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: [RFC,2/2] dmaengine: xilinx_dma: Add Xilinx AXI MCDMA Engine driver support From: Vinod Koul Message-Id: <20180821154635.GG2388@vkoul-mobl> Date: Tue, 21 Aug 2018 21:16:35 +0530 To: Radhey Shyam Pandey Cc: robh+dt@kernel.org, mark.rutland@arm.com, michal.simek@xilinx.com, dan.j.williams@intel.com, appanad@xilinx.com, lars@metafoo.de, dmaengine@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org List-ID: T24gMzEtMDctMTgsIDIzOjE2LCBSYWRoZXkgU2h5YW0gUGFuZGV5IHdyb3RlOgo+ICBzdHJ1Y3Qg eGlsaW54X2RtYV9jb25maWcgewo+IEBAIC00MDIsNiArNDcwLDcgQEAgc3RydWN0IHhpbGlueF9k bWFfY29uZmlnIHsKPiAgCWludCAoKmNsa19pbml0KShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpw ZGV2LCBzdHJ1Y3QgY2xrICoqYXhpX2NsaywKPiAgCQkJc3RydWN0IGNsayAqKnR4X2Nsaywgc3Ry dWN0IGNsayAqKnR4c19jbGssCj4gIAkJCXN0cnVjdCBjbGsgKipyeF9jbGssIHN0cnVjdCBjbGsg KipyeHNfY2xrKTsKPiArCWlycXJldHVybl90ICgqaXJxX2hhbmRsZXIpKGludCBpcnEsIHZvaWQg KmRhdGEpOwoKdGhpcyBzb3VuZHMgbGlrZSBhIHByZXBhcmF0b3J5IGNoYW5nZT8KCj4gKwl9IGVs c2UgaWYgKGNoYW4tPnhkZXYtPmRtYV9jb25maWctPmRtYXR5cGUgPT0gWERNQV9UWVBFX0FYSU1D RE1BKSB7Cj4gKwkJLyogQWxsb2NhdGUgdGhlIGJ1ZmZlciBkZXNjcmlwdG9ycy4gKi8KPiArCQlj aGFuLT5zZWdfbXYgPSBkbWFfemFsbG9jX2NvaGVyZW50KGNoYW4tPmRldiwKPiArCQkJCQkJICBz aXplb2YoKmNoYW4tPnNlZ19tdikgKgo+ICsJCQkJCQkgIFhJTElOWF9ETUFfTlVNX0RFU0NTLAo+ ICsJCQkJCQkgICZjaGFuLT5zZWdfcCwgR0ZQX0tFUk5FTCk7Cj4gKwkJaWYgKCFjaGFuLT5zZWdf bXYpIHsKPiArCQkJZGV2X2VycihjaGFuLT5kZXYsCj4gKwkJCQkidW5hYmxlIHRvIGFsbG9jYXRl IGNoYW5uZWwgJWQgZGVzY3JpcHRvcnNcbiIsCj4gKwkJCQljaGFuLT5pZCk7Cj4gKwkJCXJldHVy biAtRU5PTUVNOwo+ICsJCX0KPiArCQlmb3IgKGkgPSAwOyBpIDwgWElMSU5YX0RNQV9OVU1fREVT Q1M7IGkrKykgewo+ICsJCQljaGFuLT5zZWdfbXZbaV0uaHcubmV4dF9kZXNjID0KPiArCQkJbG93 ZXJfMzJfYml0cyhjaGFuLT5zZWdfcCArIHNpemVvZigqY2hhbi0+c2VnX212KSAqCj4gKwkJCQko KGkgKyAxKSAlIFhJTElOWF9ETUFfTlVNX0RFU0NTKSk7Cj4gKwkJCWNoYW4tPnNlZ19tdltpXS5o dy5uZXh0X2Rlc2NfbXNiID0KPiArCQkJdXBwZXJfMzJfYml0cyhjaGFuLT5zZWdfcCArIHNpemVv ZigqY2hhbi0+c2VnX212KSAqCj4gKwkJCQkoKGkgKyAxKSAlIFhJTElOWF9ETUFfTlVNX0RFU0NT KSk7Cj4gKwkJCWNoYW4tPnNlZ19tdltpXS5waHlzID0gY2hhbi0+c2VnX3AgKwo+ICsJCQkJc2l6 ZW9mKCpjaGFuLT5zZWdfdikgKiBpOwo+ICsJCQlsaXN0X2FkZF90YWlsKCZjaGFuLT5zZWdfbXZb aV0ubm9kZSwKPiArCQkJCSAgICAgICZjaGFuLT5mcmVlX3NlZ19saXN0KTsKPiArCQl9Cgpvbmx5 IGNoYW5nZSB3aXRoIHRoaXMgYW5kIHByZXZpb3VzIG9uZSBzZWVtcyB0byBiZSB1c2Ugb2Ygc2Vn X212IGluc3RlYWQKb2Ygc2VnX3YgcmlnaHQ/IGlmIHNvLCBjYW4geW91IHRyeSB0byBtb2R1bGFy aXNlIHRoaXMuLgoKPiAgLyoqCj4gKyAqIHhpbGlueF9tY2RtYV9zdGFydF90cmFuc2ZlciAtIFN0 YXJ0cyBNQ0RNQSB0cmFuc2Zlcgo+ICsgKiBAY2hhbjogRHJpdmVyIHNwZWNpZmljIGNoYW5uZWwg c3RydWN0IHBvaW50ZXIKPiArICovCj4gK3N0YXRpYyB2b2lkIHhpbGlueF9tY2RtYV9zdGFydF90 cmFuc2ZlcihzdHJ1Y3QgeGlsaW54X2RtYV9jaGFuICpjaGFuKQo+ICt7Cj4gKwlzdHJ1Y3QgeGls aW54X2RtYV90eF9kZXNjcmlwdG9yICpoZWFkX2Rlc2MsICp0YWlsX2Rlc2M7Cj4gKwlzdHJ1Y3Qg eGlsaW54X2F4aWRtYV90eF9zZWdtZW50ICp0YWlsX3NlZ21lbnQ7Cj4gKwl1MzIgcmVnOwo+ICsK PiArCWlmIChjaGFuLT5lcnIpCj4gKwkJcmV0dXJuOwo+ICsKPiArCWlmICghY2hhbi0+aWRsZSkK PiArCQlyZXR1cm47Cj4gKwo+ICsJaWYgKGxpc3RfZW1wdHkoJmNoYW4tPnBlbmRpbmdfbGlzdCkp Cj4gKwkJcmV0dXJuOwoKb2theSBpIHdhcyB0aGlua2luZyB0aGF0IHdlIG5lZWQgbG9jayBoZXJl LCBidXQgdGhlbiB0aGlzIGlzIGNhbGxlZCB3aXRoCmxvY2sgaGVsZCwgd29ydGggbWVudGlvbmlu ZyBpbiB0aGUgY29tbWVudCB0aG91Z2guLgoKPiArc3RhdGljIGlycXJldHVybl90IHhpbGlueF9t Y2RtYV9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkYXRhKQo+ICt7Cj4gKwlzdHJ1Y3QgeGls aW54X2RtYV9jaGFuICpjaGFuID0gZGF0YTsKPiArCXUzMiBzdGF0dXMsIHNlcl9vZmZzZXQsIGNo YW5fc2VybWFzaywgY2hhbl9vZmZzZXQgPSAwLCBjaGFuX2lkOwo+ICsKPiArCWlmIChjaGFuLT5k aXJlY3Rpb24gPT0gRE1BX0RFVl9UT19NRU0pCj4gKwkJc2VyX29mZnNldCA9IFhJTElOWF9NQ0RN QV9SWElOVF9TRVJfT0ZGU0VUOwo+ICsJZWxzZQo+ICsJCXNlcl9vZmZzZXQgPSBYSUxJTlhfTUNE TUFfVFhJTlRfU0VSX09GRlNFVDsKPiArCj4gKwkvKiBSZWFkIHRoZSBjaGFubmVsIGlkIHJhaXNp bmcgdGhlIGludGVycnVwdCovCj4gKwljaGFuX3Nlcm1hc2sgPSBkbWFfY3RybF9yZWFkKGNoYW4s IHNlcl9vZmZzZXQpOwo+ICsJY2hhbl9pZCA9IGZmcyhjaGFuX3Nlcm1hc2spOwo+ICsKPiArCWlm ICghY2hhbl9pZCkKPiArCQlyZXR1cm4gSVJRX05PTkU7Cj4gKwo+ICsJaWYgKGNoYW4tPmRpcmVj dGlvbiA9PSBETUFfREVWX1RPX01FTSkKPiArCQljaGFuX29mZnNldCA9IFhJTElOWF9ETUFfTUFY X0NIQU5TX1BFUl9ERVZJQ0UgLyAyOwo+ICsKPiArCWNoYW5fb2Zmc2V0ID0gY2hhbl9vZmZzZXQg KyAoY2hhbl9pZCAtIDEpOwo+ICsJY2hhbiA9IGNoYW4tPnhkZXYtPmNoYW5bY2hhbl9vZmZzZXRd Owo+ICsJLyogUmVhZCB0aGUgc3RhdHVzIGFuZCBhY2sgdGhlIGludGVycnVwdHMuICovCj4gKwlz dGF0dXMgPSBkbWFfY3RybF9yZWFkKGNoYW4sIFhJTElOWF9NQ0RNQV9DSEFOX1NSX09GRlNFVChj aGFuLT50ZGVzdCkpOwo+ICsJaWYgKCEoc3RhdHVzICYgWElMSU5YX01DRE1BX0lSUV9BTExfTUFT SykpCj4gKwkJcmV0dXJuIElSUV9OT05FOwo+ICsKPiArCWRtYV9jdHJsX3dyaXRlKGNoYW4sIFhJ TElOWF9NQ0RNQV9DSEFOX1NSX09GRlNFVChjaGFuLT50ZGVzdCksCj4gKwkJICAgICAgIHN0YXR1 cyAmIFhJTElOWF9NQ0RNQV9JUlFfQUxMX01BU0spOwo+ICsKPiArCWlmIChzdGF0dXMgJiBYSUxJ TlhfTUNETUFfSVJRX0VSUl9NQVNLKSB7Cj4gKwkJZGV2X2VycihjaGFuLT5kZXYsICJDaGFubmVs ICVwIGhhcyBlcnJvcnMgJXggY2RyICV4IHRkciAleFxuIiwKPiArCQkJY2hhbiwgZG1hX2N0cmxf cmVhZChjaGFuLAo+ICsJCQlYSUxJTlhfTUNETUFfQ0hfRVJSX09GRlNFVCksIGRtYV9jdHJsX3Jl YWQoY2hhbiwKPiArCQkJWElMSU5YX01DRE1BX0NIQU5fQ0RFU0NfT0ZGU0VUKGNoYW4tPnRkZXN0 KSksCj4gKwkJCWRtYV9jdHJsX3JlYWQoY2hhbiwKPiArCQkJCSAgICAgIFhJTElOWF9NQ0RNQV9D SEFOX1RERVNDX09GRlNFVAo+ICsJCQkJICAgICAgKGNoYW4tPnRkZXN0KSkpOwoKdGhpcyBsb29r cyB2ZXJ5IGhhcmQgdG8gcmVhZCwgcGxlYXNlIHN0YXJ0IGVhY2ggZG1hX2N0cmxfcmVhZCgpIGZy b20gYQpuZXcgbGluZSB0byBtYWtlIGl0IGJldHRlcgoKPiArCQljaGFuLT5lcnIgPSB0cnVlOwo+ ICsJfQo+ICsKPiArCWlmIChzdGF0dXMgJiBYSUxJTlhfTUNETUFfSVJRX0RFTEFZX01BU0spIHsK PiArCQkvKgo+ICsJCSAqIERldmljZSB0YWtlcyB0b28gbG9uZyB0byBkbyB0aGUgdHJhbnNmZXIg d2hlbiB1c2VyIHJlcXVpcmVzCj4gKwkJICogcmVzcG9uc2l2ZW5lc3MuCj4gKwkJICovCj4gKwkJ ZGV2X2RiZyhjaGFuLT5kZXYsICJJbnRlci1wYWNrZXQgbGF0ZW5jeSB0b28gbG9uZ1xuIik7Cgpz byB3ZSBqdXN0IGxvZyBpdC4uPwoKPiArCX0KPiArCj4gKwlpZiAoc3RhdHVzICYgWElMSU5YX01D RE1BX0lSUV9JT0NfTUFTSykgewo+ICsJCXNwaW5fbG9jaygmY2hhbi0+bG9jayk7Cj4gKwkJeGls aW54X2RtYV9jb21wbGV0ZV9kZXNjcmlwdG9yKGNoYW4pOwo+ICsJCWNoYW4tPmlkbGUgPSB0cnVl Owo+ICsJCWNoYW4tPnN0YXJ0X3RyYW5zZmVyKGNoYW4pOwo+ICsJCXNwaW5fdW5sb2NrKCZjaGFu LT5sb2NrKTsKPiArCX0KPiArCj4gKwl0YXNrbGV0X3NjaGVkdWxlKCZjaGFuLT50YXNrbGV0KTsK PiArCXJldHVybiBJUlFfSEFORExFRDsKPiArCgpib2d1cyBlbXB0eSBsaW5lLi4uCgo+ICtzdGF0 aWMgc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICp4aWxpbnhfbWNkbWFfcHJlcF9zbGF2 ZV9zZygKPiArCXN0cnVjdCBkbWFfY2hhbiAqZGNoYW4sIHN0cnVjdCBzY2F0dGVybGlzdCAqc2ds LCB1bnNpZ25lZCBpbnQgc2dfbGVuLAo+ICsJZW51bSBkbWFfdHJhbnNmZXJfZGlyZWN0aW9uIGRp cmVjdGlvbiwgdW5zaWduZWQgbG9uZyBmbGFncywKPiArCXZvaWQgKmNvbnRleHQpCgppbmRlbnQg aXMgcHJldHR5IGJhZCBoZXJlIHRvbyA6KAoKPiArewo+ICsJc3RydWN0IHhpbGlueF9kbWFfY2hh biAqY2hhbiA9IHRvX3hpbGlueF9jaGFuKGRjaGFuKTsKPiArCXN0cnVjdCB4aWxpbnhfZG1hX3R4 X2Rlc2NyaXB0b3IgKmRlc2M7Cj4gKwlzdHJ1Y3QgeGlsaW54X2F4aW1jZG1hX3R4X3NlZ21lbnQg KnNlZ21lbnQgPSBOVUxMOwo+ICsJdTMyICphcHBfdyA9ICh1MzIgKiljb250ZXh0Owo+ICsJc3Ry dWN0IHNjYXR0ZXJsaXN0ICpzZzsKPiArCXNpemVfdCBjb3B5Owo+ICsJc2l6ZV90IHNnX3VzZWQ7 Cj4gKwl1bnNpZ25lZCBpbnQgaTsKPiArCj4gKwlpZiAoIWlzX3NsYXZlX2RpcmVjdGlvbihkaXJl Y3Rpb24pKQo+ICsJCXJldHVybiBOVUxMOwo+ICsKPiArCS8qIEFsbG9jYXRlIGEgdHJhbnNhY3Rp b24gZGVzY3JpcHRvci4gKi8KPiArCWRlc2MgPSB4aWxpbnhfZG1hX2FsbG9jX3R4X2Rlc2NyaXB0 b3IoY2hhbik7Cj4gKwlpZiAoIWRlc2MpCj4gKwkJcmV0dXJuIE5VTEw7Cj4gKwo+ICsJZG1hX2Fz eW5jX3R4X2Rlc2NyaXB0b3JfaW5pdCgmZGVzYy0+YXN5bmNfdHgsICZjaGFuLT5jb21tb24pOwo+ ICsJZGVzYy0+YXN5bmNfdHgudHhfc3VibWl0ID0geGlsaW54X2RtYV90eF9zdWJtaXQ7Cj4gKwo+ ICsJLyogQnVpbGQgdHJhbnNhY3Rpb25zIHVzaW5nIGluZm9ybWF0aW9uIGluIHRoZSBzY2F0dGVy IGdhdGhlciBsaXN0ICovCj4gKwlmb3JfZWFjaF9zZyhzZ2wsIHNnLCBzZ19sZW4sIGkpIHsKPiAr CQlzZ191c2VkID0gMDsKPiArCj4gKwkJLyogTG9vcCB1bnRpbCB0aGUgZW50aXJlIHNjYXR0ZXJs aXN0IGVudHJ5IGlzIHVzZWQgKi8KPiArCQl3aGlsZSAoc2dfdXNlZCA8IHNnX2RtYV9sZW4oc2cp KSB7Cj4gKwkJCXN0cnVjdCB4aWxpbnhfYXhpbWNkbWFfZGVzY19odyAqaHc7Cj4gKwo+ICsJCQkv KiBHZXQgYSBmcmVlIHNlZ21lbnQgKi8KPiArCQkJc2VnbWVudCA9IHhpbGlueF9heGltY2RtYV9h bGxvY190eF9zZWdtZW50KGNoYW4pOwo+ICsJCQlpZiAoIXNlZ21lbnQpCj4gKwkJCQlnb3RvIGVy cm9yOwo+ICsKPiArCQkJLyoKPiArCQkJICogQ2FsY3VsYXRlIHRoZSBtYXhpbXVtIG51bWJlciBv ZiBieXRlcyB0byB0cmFuc2ZlciwKPiArCQkJICogbWFraW5nIHN1cmUgaXQgaXMgbGVzcyB0aGFu IHRoZSBodyBsaW1pdAo+ICsJCQkgKi8KPiArCQkJY29weSA9IG1pbl90KHNpemVfdCwgc2dfZG1h X2xlbihzZykgLSBzZ191c2VkLAo+ICsJCQkJICAgICBYSUxJTlhfRE1BX01BWF9UUkFOU19MRU4p Owo+ICsJCQlodyA9ICZzZWdtZW50LT5odzsKPiArCj4gKwkJCS8qIEZpbGwgaW4gdGhlIGRlc2Ny aXB0b3IgKi8KPiArCQkJeGlsaW54X2F4aW1jZG1hX2J1ZihjaGFuLCBodywgc2dfZG1hX2FkZHJl c3Moc2cpLAo+ICsJCQkJCSAgICBzZ191c2VkKTsKPiArCQkJaHctPmNvbnRyb2wgPSBjb3B5Owo+ ICsKPiArCQkJaWYgKGNoYW4tPmRpcmVjdGlvbiA9PSBETUFfTUVNX1RPX0RFVikgewo+ICsJCQkJ aWYgKGFwcF93KQoKd2h5IG5vdCBtYWtlIGNvbmRpdGlvbiBhczogY2hhbi0+ZGlyZWN0aW9uID09 IERNQV9NRU1fVE9fREVWICYmIGFwcF93Cgo+ICsJCQkJCW1lbWNweShody0+YXBwLCBhcHBfdywg c2l6ZW9mKHUzMikgKgo+ICsJCQkJCSAgICAgICBYSUxJTlhfRE1BX05VTV9BUFBfV09SRFMpOwo+ ICsJCQl9Cj4gKwo+ICsJCQlzZ191c2VkICs9IGNvcHk7Cj4gKwkJCS8qCj4gKwkJCSAqIEluc2Vy dCB0aGUgc2VnbWVudCBpbnRvIHRoZSBkZXNjcmlwdG9yIHNlZ21lbnRzCj4gKwkJCSAqIGxpc3Qu Cj4gKwkJCSAqLwo+ICsJCQlsaXN0X2FkZF90YWlsKCZzZWdtZW50LT5ub2RlLCAmZGVzYy0+c2Vn bWVudHMpOwo+ICsJCX0KPiArCX0KPiArCj4gKwlzZWdtZW50ID0gbGlzdF9maXJzdF9lbnRyeSgm ZGVzYy0+c2VnbWVudHMsCj4gKwkJCQkgICBzdHJ1Y3QgeGlsaW54X2F4aW1jZG1hX3R4X3NlZ21l bnQsIG5vZGUpOwo+ICsJZGVzYy0+YXN5bmNfdHgucGh5cyA9IHNlZ21lbnQtPnBoeXM7Cj4gKwo+ ICsJLyogRm9yIHRoZSBsYXN0IERNQV9NRU1fVE9fREVWIHRyYW5zZmVyLCBzZXQgRU9QICovCj4g KwlpZiAoY2hhbi0+ZGlyZWN0aW9uID09IERNQV9NRU1fVE9fREVWKSB7Cj4gKwkJc2VnbWVudC0+ aHcuY29udHJvbCB8PSBYSUxJTlhfTUNETUFfQkRfU09QOwo+ICsJCXNlZ21lbnQgPSBsaXN0X2xh c3RfZW50cnkoJmRlc2MtPnNlZ21lbnRzLAo+ICsJCQkJCSAgc3RydWN0IHhpbGlueF9heGltY2Rt YV90eF9zZWdtZW50LAo+ICsJCQkJCSAgbm9kZSk7Cj4gKwkJc2VnbWVudC0+aHcuY29udHJvbCB8 PSBYSUxJTlhfTUNETUFfQkRfRU9QOwo+ICsJfQo+ICsKPiArCXJldHVybiAmZGVzYy0+YXN5bmNf dHg7Cj4gKwo+ICtlcnJvcjoKPiArCXhpbGlueF9kbWFfZnJlZV90eF9kZXNjcmlwdG9yKGNoYW4s IGRlc2MpOwoKd2lsbCBpdCBmcmVlIHRoZSBvbmVzIGFsbG9jYXRlZCBoZXJlIG9yIGFsbCBkZXNj cmlwdG9ycz8KCj4gIC8qKgo+ICAgKiB4aWxpbnhfZG1hX3ByZXBfc2xhdmVfc2cgLSBwcmVwYXJl IGRlc2NyaXB0b3JzIGZvciBhIERNQV9TTEFWRSB0cmFuc2FjdGlvbgo+IEBAIC0yNDIyLDEyICsy ODI3LDE2IEBAIHN0YXRpYyBpbnQgeGlsaW54X2RtYV9jaGFuX3Byb2JlKHN0cnVjdCB4aWxpbnhf ZG1hX2RldmljZSAqeGRldiwKPiAgCj4gIAlpZiAob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUobm9k ZSwgInhsbngsYXhpLXZkbWEtbW0ycy1jaGFubmVsIikgfHwKPiAgCSAgICBvZl9kZXZpY2VfaXNf Y29tcGF0aWJsZShub2RlLCAieGxueCxheGktZG1hLW1tMnMtY2hhbm5lbCIpIHx8Cj4gLQkgICAg b2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUobm9kZSwgInhsbngsYXhpLWNkbWEtY2hhbm5lbCIpKSB7 Cj4gKwkgICAgb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUobm9kZSwgInhsbngsYXhpLWNkbWEtY2hh bm5lbCIpIHx8Cj4gKwkgICAgb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUobm9kZSwgInhsbngsYXhp LW1jZG1hLW1tMnMtY2hhbm5lbCIpKSB7Cgp0aGlzIGlzIG5vdCBzY2FsaW5nLCBtYXliZSB5b3Ug c2hvdWxkIHVzZSBkYXRhIHdpdGggZWFjaApjb21wYXRpYmxlIHRvIGNoZWNrIGZvciBzcGVjaWZp YyB0aGluZ3MuLgoKPiArc3RhdGljIGNvbnN0IHN0cnVjdCB4aWxpbnhfZG1hX2NvbmZpZyBheGlt Y2RtYV9jb25maWcgPSB7Cj4gKwkuZG1hdHlwZSA9IFhETUFfVFlQRV9BWElNQ0RNQSwKPiArCS5j bGtfaW5pdCA9IGF4aWRtYV9jbGtfaW5pdCwKPiArCS5pcnFfaGFuZGxlciA9IHhpbGlueF9tY2Rt YV9pcnFfaGFuZGxlciwKPiArfTsKPiAgc3RhdGljIGNvbnN0IHN0cnVjdCB4aWxpbnhfZG1hX2Nv bmZpZyBheGljZG1hX2NvbmZpZyA9IHsKPiAgCS5kbWF0eXBlID0gWERNQV9UWVBFX0NETUEsCj4g IAkuY2xrX2luaXQgPSBheGljZG1hX2Nsa19pbml0LAo+ICsJLmlycV9oYW5kbGVyID0geGlsaW54 X2RtYV9pcnFfaGFuZGxlciwKCnRoaXMgc2hvdWxkIGJlIGluIHByZXBhcmF0b3J5IHBhdGNoCg==