From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Subject: Re: [PATCH v2 12/23] drm/i915: Sanitize the TypeC connect/detect sequences Date: Wed, 26 Jun 2019 14:51:40 +0300 Message-ID: <20190626115140.GN5942@intel.com> References: <20190620140600.11357-1-imre.deak@intel.com> <20190620140600.11357-13-imre.deak@intel.com> <20190625134201.GC5942@intel.com> <20190625183043.GA5455@ideak-desk.fi.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by gabe.freedesktop.org (Postfix) with ESMTPS id 3763D6E39C for ; Wed, 26 Jun 2019 11:51:47 +0000 (UTC) Content-Disposition: inline In-Reply-To: <20190625183043.GA5455@ideak-desk.fi.intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Imre Deak Cc: intel-gfx@lists.freedesktop.org, Paulo Zanoni List-Id: intel-gfx@lists.freedesktop.org T24gVHVlLCBKdW4gMjUsIDIwMTkgYXQgMDk6MzA6NDNQTSArMDMwMCwgSW1yZSBEZWFrIHdyb3Rl Ogo+IE9uIFR1ZSwgSnVuIDI1LCAyMDE5IGF0IDA0OjQyOjAxUE0gKzAzMDAsIFZpbGxlIFN5cmrD pGzDpCB3cm90ZToKPiA+IE9uIFRodSwgSnVuIDIwLCAyMDE5IGF0IDA1OjA1OjQ5UE0gKzAzMDAs IEltcmUgRGVhayB3cm90ZToKPiA+ID4gTWFrZSB0aGUgb3JkZXIgZHVyaW5nIGRldGVjdGlvbiBt b3JlIGNvbnNpc3RlbnQ6IGZpcnN0IHJlc2V0IHRoZSBUeXBlQwo+ID4gPiBwb3J0IG1vZGUgaWYg bmVlZGVkIChhZGRpbmcgbmV3IGhlbHBlcnMgZm9yIHRoaXMpLCB0aGVuIGRldGVjdCBhbnkKPiA+ ID4gY29ubmVjdGVkIHNpbmsuCj4gPiA+IAo+ID4gPiBUbyBjaGVjayBpZiBhIHBvcnQgbW9kZSBy ZXNldCBpcyBuZWVkZWQgZGV0ZXJtaW5lIGZpcnN0IHRoZSB0YXJnZXQgcG9ydAo+ID4gPiBtb2Rl IGJhc2VkIG9uIHRoZSBsaXZlIHN0YXR1cyBpZiBhIHNpbmsgaXMgYWxyZWFkeSBjb25uZWN0ZWQg b3IgdGhlCj4gPiA+IFBIWSBzdGF0dXMgY29tcGxldGUgZmxhZyBvdGhlcndpc2UuCj4gPiA+IAo+ ID4gPiBBZGQgYSBXQVJOIGluIGxlZ2FjeSBtb2RlIGlmIHVuZXhwZWN0ZWRseSB3ZSBjYW4ndCBz ZXQgdGhlIHVuc2FmZSBtb2RlCj4gPiA+IG9yIGlmIHRoZSBGSUEgZG9lc24ndCBwcm92aWRlIHRo ZSA0IGxhbmVzIHJlcXVpcmVkLgo+ID4gPiAKPiA+ID4gQ2M6IEpvc8OpIFJvYmVydG8gZGUgU291 emEgPGpvc2Uuc291emFAaW50ZWwuY29tPgo+ID4gPiBDYzogUm9kcmlnbyBWaXZpIDxyb2RyaWdv LnZpdmlAaW50ZWwuY29tPgo+ID4gPiBDYzogUGF1bG8gWmFub25pIDxwYXVsby5yLnphbm9uaUBp bnRlbC5jb20+Cj4gPiA+IENjOiBWaWxsZSBTeXJqw6Rsw6QgPHZpbGxlLnN5cmphbGFAbGludXgu aW50ZWwuY29tPgo+ID4gPiBTaWduZWQtb2ZmLWJ5OiBJbXJlIERlYWsgPGltcmUuZGVha0BpbnRl bC5jb20+Cj4gPiA+IC0tLQo+ID4gPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRl bF90Yy5jIHwgOTYgKysrKysrKysrKysrLS0tLS0tLS0tLS0tLQo+ID4gPiAgMSBmaWxlIGNoYW5n ZWQsIDQ3IGluc2VydGlvbnMoKyksIDQ5IGRlbGV0aW9ucygtKQo+ID4gPiAKPiA+ID4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfdGMuYyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfdGMuYwo+ID4gPiBpbmRleCBmZmZlNGM0YTY2MDIu LmVkMjI1M2IyMWIwOSAxMDA2NDQKPiA+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlz cGxheS9pbnRlbF90Yy5jCj4gPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkv aW50ZWxfdGMuYwo+ID4gPiBAQCAtMTcyLDQxICsxNzIsNDMgQEAgc3RhdGljIGJvb2wgaWNsX3Rj X3BoeV9zZXRfc2FmZV9tb2RlKHN0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQgKmRpZ19wb3J0LAo+ ID4gPiAgICogd2lsbCByZXF1aXJlIGEgbG90IG9mIGNvb3JkaW5hdGlvbiB3aXRoIHVzZXIgc3Bh Y2UgYW5kIHRob3JvdWdoIHRlc3RpbmcgZm9yCj4gPiA+ICAgKiB0aGUgZXh0cmEgcG9zc2libGUg Y2FzZXMuCj4gPiA+ICAgKi8KPiA+ID4gLXN0YXRpYyBib29sIGljbF90Y19waHlfY29ubmVjdChz dHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0ICpkaWdfcG9ydCkKPiA+ID4gK3N0YXRpYyB2b2lkIGlj bF90Y19waHlfY29ubmVjdChzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0ICpkaWdfcG9ydCkKPiA+ ID4gIHsKPiA+ID4gLQl1MzIgbGl2ZV9zdGF0dXNfbWFzazsKPiA+ID4gLQo+ID4gPiAtCWlmIChk aWdfcG9ydC0+dGNfbW9kZSAhPSBUQ19QT1JUX0xFR0FDWSAmJgo+ID4gPiAtCSAgICBkaWdfcG9y dC0+dGNfbW9kZSAhPSBUQ19QT1JUX0RQX0FMVCkKPiA+ID4gLQkJcmV0dXJuIHRydWU7Cj4gPiA+ IC0KPiA+ID4gIAlpZiAoIWljbF90Y19waHlfc3RhdHVzX2NvbXBsZXRlKGRpZ19wb3J0KSkgewo+ ID4gPiAgCQlEUk1fREVCVUdfS01TKCJQb3J0ICVzOiBQSFkgbm90IHJlYWR5XG4iLAo+ID4gPiAg CQkJICAgICAgZGlnX3BvcnQtPnRjX3BvcnRfbmFtZSk7Cj4gPiA+IC0JCVdBUk5fT04oZGlnX3Bv cnQtPnRjX2xlZ2FjeV9wb3J0KTsKPiA+IAo+ID4gQXJlIHdlIGV4cGVjdGluZyBsZWdhY3kgcG9y dHMgdG8gaW5kaWNhdGUgIm5vdCBjb21wbGV0ZSI/Cj4gCj4gWWVzLCBJIHRoaW5rIHRoYXQgbWF5 IGhhcHBlbiBpZiBkdXJpbmcgZHJpdmVyIGxvYWRpbmcvcmVzdW1lIHRoZSBzaW5rIGlzCj4gbm90 IGNvbm5lY3RlZCwgVkJUIHNheXMgdGhlIHBvcnQgaXMgbGVnYWN5LCBidXQgdGhlIGZpcm13YXJl IHdvdWxkCj4gaGFwcGVuIHRvIHNldCB0aGUgJ3BoeSBjb21wbGV0ZScgZmxhZyBvbmx5IHdpdGgg c29tZSBkZWxheS4gSW4gdGhhdCBjYXNlCj4gd2UnZCB0cnkgdG8gY29ubmVjdCB0aGUgUEhZIGZy b20gaW50ZWxfdGNfcG9ydF9zYW5pdGl6ZSgpLCBsYXRlciBpbiB0aGUKPiBwYXRjaHNldCwgc28g J3BoeSBjb21wbGV0ZScgY291bGQgYmUgc3RpbGwgdW5zZXQgaGVyZS4gV2UnZCBvbmx5IGNvbm5l Y3QKPiB0aGUgUEhZIHRoZW4gd2hlbiB0aGUgc2luayBnZXRzIHBsdWdnZWQuCgpPSy4KClJldmll d2VkLWJ5OiBWaWxsZSBTeXJqw6Rsw6QgPHZpbGxlLnN5cmphbGFAbGludXguaW50ZWwuY29tPgoK PiAKPiA+IAo+ID4gPiAtCQlyZXR1cm4gZmFsc2U7Cj4gPiA+ICsJCWdvdG8gb3V0X3NldF90YnRf YWx0X21vZGU7Cj4gPiA+ICAJfQo+ID4gPiAgCj4gPiA+IC0JaWYgKCFpY2xfdGNfcGh5X3NldF9z YWZlX21vZGUoZGlnX3BvcnQsIGZhbHNlKSkKPiA+ID4gLQkJcmV0dXJuIGZhbHNlOwo+ID4gPiAr CWlmICghaWNsX3RjX3BoeV9zZXRfc2FmZV9tb2RlKGRpZ19wb3J0LCBmYWxzZSkgJiYKPiA+ID4g KwkgICAgIVdBUk5fT04oZGlnX3BvcnQtPnRjX2xlZ2FjeV9wb3J0KSkKPiA+ID4gKwkJZ290byBv dXRfc2V0X3RidF9hbHRfbW9kZTsKPiA+ID4gIAo+ID4gPiAtCWlmIChkaWdfcG9ydC0+dGNfbW9k ZSA9PSBUQ19QT1JUX0xFR0FDWSkKPiA+ID4gLQkJcmV0dXJuIHRydWU7Cj4gPiA+ICsJaWYgKGRp Z19wb3J0LT50Y19sZWdhY3lfcG9ydCkgewo+ID4gPiArCQlXQVJOX09OKGludGVsX3RjX3BvcnRf ZmlhX21heF9sYW5lX2NvdW50KGRpZ19wb3J0KSAhPSA0KTsKPiA+ID4gKwkJZGlnX3BvcnQtPnRj X21vZGUgPSBUQ19QT1JUX0xFR0FDWTsKPiA+ID4gIAo+ID4gPiAtCWxpdmVfc3RhdHVzX21hc2sg PSB0Y19wb3J0X2xpdmVfc3RhdHVzX21hc2soZGlnX3BvcnQpOwo+ID4gPiArCQlyZXR1cm47Cj4g PiA+ICsJfQo+ID4gPiAgCj4gPiA+ICAJLyoKPiA+ID4gIAkgKiBOb3cgd2UgaGF2ZSB0byByZS1j aGVjayB0aGUgbGl2ZSBzdGF0ZSwgaW4gY2FzZSB0aGUgcG9ydCByZWNlbnRseQo+ID4gPiAgCSAq IGJlY2FtZSBkaXNjb25uZWN0ZWQuIE5vdCBuZWNlc3NhcnkgZm9yIGxlZ2FjeSBtb2RlLgo+ID4g PiAgCSAqLwo+ID4gPiAtCWlmICghKGxpdmVfc3RhdHVzX21hc2sgJiBCSVQoVENfUE9SVF9EUF9B TFQpKSkgewo+ID4gPiArCWlmICghKHRjX3BvcnRfbGl2ZV9zdGF0dXNfbWFzayhkaWdfcG9ydCkg JiBCSVQoVENfUE9SVF9EUF9BTFQpKSkgewo+ID4gPiAgCQlEUk1fREVCVUdfS01TKCJQb3J0ICVz OiBQSFkgc3VkZGVuIGRpc2Nvbm5lY3RcbiIsCj4gPiA+ICAJCQkgICAgICBkaWdfcG9ydC0+dGNf cG9ydF9uYW1lKTsKPiA+ID4gLQkJaWNsX3RjX3BoeV9kaXNjb25uZWN0KGRpZ19wb3J0KTsKPiA+ ID4gLQkJcmV0dXJuIGZhbHNlOwo+ID4gPiArCQlnb3RvIG91dF9zZXRfc2FmZV9tb2RlOwo+ID4g PiAgCX0KPiA+ID4gIAo+ID4gPiAtCXJldHVybiB0cnVlOwo+ID4gPiArCWRpZ19wb3J0LT50Y19t b2RlID0gVENfUE9SVF9EUF9BTFQ7Cj4gPiA+ICsKPiA+ID4gKwlyZXR1cm47Cj4gPiA+ICsKPiA+ ID4gK291dF9zZXRfc2FmZV9tb2RlOgo+ID4gPiArCWljbF90Y19waHlfc2V0X3NhZmVfbW9kZShk aWdfcG9ydCwgdHJ1ZSk7Cj4gPiA+ICtvdXRfc2V0X3RidF9hbHRfbW9kZToKPiA+ID4gKwlkaWdf cG9ydC0+dGNfbW9kZSA9IFRDX1BPUlRfVEJUX0FMVDsKPiA+ID4gIH0KPiA+ID4gIAo+ID4gPiAg LyoKPiA+ID4gQEAgLTIyNywyNyArMjI5LDM3IEBAIHZvaWQgaWNsX3RjX3BoeV9kaXNjb25uZWN0 KHN0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQgKmRpZ19wb3J0KQo+ID4gPiAgCWRlZmF1bHQ6Cj4g PiA+ICAJCU1JU1NJTkdfQ0FTRShkaWdfcG9ydC0+dGNfbW9kZSk7Cj4gPiA+ICAJfQo+ID4gPiAr fQo+ID4gPiAgCj4gPiA+IC0JRFJNX0RFQlVHX0tNUygiUG9ydCAlczogbW9kZSAlcyBkaXNjb25u ZWN0ZWRcbiIsCj4gPiA+IC0JCSAgICAgIGRpZ19wb3J0LT50Y19wb3J0X25hbWUsCj4gPiA+IC0J CSAgICAgIHRjX3BvcnRfbW9kZV9uYW1lKGRpZ19wb3J0LT50Y19tb2RlKSk7Cj4gPiA+ICtzdGF0 aWMgZW51bSB0Y19wb3J0X21vZGUKPiA+ID4gK2ludGVsX3RjX3BvcnRfZ2V0X3RhcmdldF9tb2Rl KHN0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQgKmRpZ19wb3J0KQo+ID4gPiArewo+ID4gPiArCXUz MiBsaXZlX3N0YXR1c19tYXNrID0gdGNfcG9ydF9saXZlX3N0YXR1c19tYXNrKGRpZ19wb3J0KTsK PiA+ID4gKwo+ID4gPiArCWlmIChsaXZlX3N0YXR1c19tYXNrKQo+ID4gPiArCQlyZXR1cm4gZmxz KGxpdmVfc3RhdHVzX21hc2spIC0gMTsKPiA+ID4gKwo+ID4gPiArCXJldHVybiBpY2xfdGNfcGh5 X3N0YXR1c19jb21wbGV0ZShkaWdfcG9ydCkgJiYKPiA+ID4gKwkgICAgICAgZGlnX3BvcnQtPnRj X2xlZ2FjeV9wb3J0ID8gVENfUE9SVF9MRUdBQ1kgOgo+ID4gPiArCQkJCQkgIFRDX1BPUlRfVEJU X0FMVDsKPiA+ID4gIH0KPiA+ID4gIAo+ID4gPiAtc3RhdGljIHZvaWQgaWNsX3VwZGF0ZV90Y19w b3J0X3R5cGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ID4gPiAtCQkJCSAg ICBzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0ICppbnRlbF9kaWdfcG9ydCwKPiA+ID4gLQkJCQkg ICAgdTMyIGxpdmVfc3RhdHVzX21hc2spCj4gPiA+ICtzdGF0aWMgdm9pZCBpbnRlbF90Y19wb3J0 X3Jlc2V0X21vZGUoc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqZGlnX3BvcnQpCj4gPiA+ICB7 Cj4gPiA+IC0JZW51bSB0Y19wb3J0X21vZGUgb2xkX21vZGUgPSBpbnRlbF9kaWdfcG9ydC0+dGNf bW9kZTsKPiA+ID4gKwllbnVtIHRjX3BvcnRfbW9kZSBvbGRfdGNfbW9kZSA9IGRpZ19wb3J0LT50 Y19tb2RlOwo+ID4gPiAgCj4gPiA+IC0JaWYgKCFsaXZlX3N0YXR1c19tYXNrKQo+ID4gPiAtCQly ZXR1cm47Cj4gPiA+ICsJaWNsX3RjX3BoeV9kaXNjb25uZWN0KGRpZ19wb3J0KTsKPiA+ID4gKwlp Y2xfdGNfcGh5X2Nvbm5lY3QoZGlnX3BvcnQpOwo+ID4gPiAgCj4gPiA+IC0JaW50ZWxfZGlnX3Bv cnQtPnRjX21vZGUgPSBmbHMobGl2ZV9zdGF0dXNfbWFzaykgLSAxOwo+ID4gPiArCURSTV9ERUJV R19LTVMoIlBvcnQgJXM6IFRDIHBvcnQgbW9kZSByZXNldCAoJXMgLT4gJXMpXG4iLAo+ID4gPiAr CQkgICAgICBkaWdfcG9ydC0+dGNfcG9ydF9uYW1lLAo+ID4gPiArCQkgICAgICB0Y19wb3J0X21v ZGVfbmFtZShvbGRfdGNfbW9kZSksCj4gPiA+ICsJCSAgICAgIHRjX3BvcnRfbW9kZV9uYW1lKGRp Z19wb3J0LT50Y19tb2RlKSk7Cj4gPiA+ICt9Cj4gPiA+ICAKPiA+ID4gLQlpZiAob2xkX21vZGUg IT0gaW50ZWxfZGlnX3BvcnQtPnRjX21vZGUpCj4gPiA+IC0JCURSTV9ERUJVR19LTVMoIlBvcnQg JXM6IHBvcnQgaGFzIG1vZGUgJXNcbiIsCj4gPiA+IC0JCQkgICAgICBpbnRlbF9kaWdfcG9ydC0+ dGNfcG9ydF9uYW1lLAo+ID4gPiAtCQkJICAgICAgdGNfcG9ydF9tb2RlX25hbWUoaW50ZWxfZGln X3BvcnQtPnRjX21vZGUpKTsKPiA+ID4gK3N0YXRpYyBib29sIGludGVsX3RjX3BvcnRfbmVlZHNf cmVzZXQoc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqZGlnX3BvcnQpCj4gPiA+ICt7Cj4gPiA+ ICsJcmV0dXJuIGludGVsX3RjX3BvcnRfZ2V0X3RhcmdldF9tb2RlKGRpZ19wb3J0KSAhPSBkaWdf cG9ydC0+dGNfbW9kZTsKPiA+ID4gIH0KPiA+ID4gIAo+ID4gPiAgLyoKPiA+ID4gQEAgLTI2Miwy NCArMjc0LDEwIEBAIHN0YXRpYyB2b2lkIGljbF91cGRhdGVfdGNfcG9ydF90eXBlKHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiA+ID4gICAqLwo+ID4gPiAgYm9vbCBpbnRlbF90 Y19wb3J0X2Nvbm5lY3RlZChzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0ICpkaWdfcG9ydCkKPiA+ ID4gIHsKPiA+ID4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1 KGRpZ19wb3J0LT5iYXNlLmJhc2UuZGV2KTsKPiA+ID4gLQl1MzIgbGl2ZV9zdGF0dXNfbWFzayA9 IHRjX3BvcnRfbGl2ZV9zdGF0dXNfbWFzayhkaWdfcG9ydCk7Cj4gPiA+IC0KPiA+ID4gLQkvKgo+ ID4gPiAtCSAqIFRoZSBzcGVjIHNheXMgd2Ugc2hvdWxkbid0IGJlIHVzaW5nIHRoZSBJU1IgYml0 cyBmb3IgZGV0ZWN0aW5nCj4gPiA+IC0JICogYmV0d2VlbiBUQyBhbmQgVEJULiBXZSBzaG91bGQg dXNlIERGTEVYRFBTUC4KPiA+ID4gLQkgKi8KPiA+ID4gLQlpZiAoIWxpdmVfc3RhdHVzX21hc2sg JiYgIWRpZ19wb3J0LT50Y19sZWdhY3lfcG9ydCkgewo+ID4gPiAtCQlpY2xfdGNfcGh5X2Rpc2Nv bm5lY3QoZGlnX3BvcnQpOwo+ID4gPiAtCj4gPiA+IC0JCXJldHVybiBmYWxzZTsKPiA+ID4gLQl9 Cj4gPiA+IC0KPiA+ID4gLQlpY2xfdXBkYXRlX3RjX3BvcnRfdHlwZShkZXZfcHJpdiwgZGlnX3Bv cnQsIGxpdmVfc3RhdHVzX21hc2spOwo+ID4gPiAtCWlmICghaWNsX3RjX3BoeV9jb25uZWN0KGRp Z19wb3J0KSkKPiA+ID4gLQkJcmV0dXJuIGZhbHNlOwo+ID4gPiArCWlmIChpbnRlbF90Y19wb3J0 X25lZWRzX3Jlc2V0KGRpZ19wb3J0KSkKPiA+ID4gKwkJaW50ZWxfdGNfcG9ydF9yZXNldF9tb2Rl KGRpZ19wb3J0KTsKPiA+ID4gIAo+ID4gPiAtCXJldHVybiB0cnVlOwo+ID4gPiArCXJldHVybiB0 Y19wb3J0X2xpdmVfc3RhdHVzX21hc2soZGlnX3BvcnQpICYgQklUKGRpZ19wb3J0LT50Y19tb2Rl KTsKPiA+ID4gIH0KPiA+ID4gIAo+ID4gPiAgdm9pZCBpbnRlbF90Y19wb3J0X2luaXQoc3RydWN0 IGludGVsX2RpZ2l0YWxfcG9ydCAqZGlnX3BvcnQsIGJvb2wgaXNfbGVnYWN5KQo+ID4gPiAtLSAK PiA+ID4gMi4xNy4xCj4gPiAKPiA+IC0tIAo+ID4gVmlsbGUgU3lyasOkbMOkCj4gPiBJbnRlbAoK LS0gClZpbGxlIFN5cmrDpGzDpApJbnRlbApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5m cmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0 aW5mby9pbnRlbC1nZng=