From mboxrd@z Thu Jan 1 00:00:00 1970 From: Stefano Stabellini Subject: [PATCH v4 14/23] xen/arm: generate a simple device tree for domUs Date: Fri, 5 Oct 2018 11:47:22 -0700 Message-ID: <1538765251-25256-14-git-send-email-sstabellini@kernel.org> References: Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: julien.grall@arm.com Cc: Stefano Stabellini , sstabellini@kernel.org, andrii_anisov@epam.com, xen-devel@lists.xen.org List-Id: xen-devel@lists.xenproject.org SW50cm9kdWNlIGZ1bmN0aW9ucyB0byBnZW5lcmF0ZSBhIGJhc2ljIGRvbVUgZGV2aWNlIHRyZWUs IHNpbWlsYXIgdG8gdGhlCmV4aXN0aW5nIGZ1bmN0aW9ucyBpbiB0b29scy9saWJ4bC9saWJ4bF9h cm0uYy4KClNpZ25lZC1vZmYtYnk6IFN0ZWZhbm8gU3RhYmVsbGluaSA8c3RlZmFub3NAeGlsaW54 LmNvbT4KLS0tCkNoYW5nZXMgaW4gdjQ6Ci0gY29kZSBzdHlsZQotIHR3byBzZXBhcmF0ZSBmdW5j dGlvbnMgZm9yIGdpY3YyIGFuZCBnaWN2MwotIHJlbW92ZSB1c2VsZXNzIGxvY2FsIHZhcmlhYmxl cwotIGZpeCB0eXBvcwotIGRvIG5vdCB1c2UgaG9zdCBhZGRyZXNzIGFuZCBzaXplIGNlbGxzIGZv ciB0aGUgZ3Vlc3QgRFQKLSB1c2UgI2RlZmluZSBmb3IgYWRkcmNlbGxzIGFuZCBzaXplY2VsbHMK CkNoYW5nZXMgaW4gdjM6Ci0gcmVtb3ZlIENPTkZJR19BQ1BJIGZvciBtYWtlX2Nob3Nlbl9ub2Rl Ci0gcmVtb3ZlIG1ha2VfaHlwZXJ2aXNvcl9ub2RlIHVudGlsIGFsbCBYZW4gcmVsYXRlZCBmdW5j dGlvbmFsaXRpZXMKICAoZXZ0Y2hucywgZ3JhbnQgdGFibGUsIGV0Yy4pIHdvcmsgY29ycmVjdGx5 CgpDaGFuZ2VzIGluIHYyOgotIG1vdmUgcHJlcGFyZV9kdGIgcmVuYW1lIHRvIHByZXZpb3VzIHBh dGNoCi0gdXNlIHN3aXRjaCBmb3IgdGhlIGdpYyB2ZXJzaW9uCi0gdXNlIGFybSxnaWMtNDAwIGlu c3RlYWQgb2YgYXJtLGNvcnRleC1hMTUtZ2ljCi0gYWRkIEB1bml0LWFkZHJlc3MgaW4gdGhlIGdp YyBub2RlIG5hbWUKLSBhZGQgY29tbWVudCBvbiBET01VX0RUQl9TSVpFCi0tLQogeGVuL2FyY2gv YXJtL2RvbWFpbl9idWlsZC5jIHwgMjM1ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKystCiAxIGZpbGUgY2hhbmdlZCwgMjMzIGluc2VydGlvbnMoKyksIDIgZGVsZXRp b25zKC0pCgpkaWZmIC0tZ2l0IGEveGVuL2FyY2gvYXJtL2RvbWFpbl9idWlsZC5jIGIveGVuL2Fy Y2gvYXJtL2RvbWFpbl9idWlsZC5jCmluZGV4IGVmYjUzMGEuLmJmOGFlY2EgMTAwNjQ0Ci0tLSBh L3hlbi9hcmNoL2FybS9kb21haW5fYnVpbGQuYworKysgYi94ZW4vYXJjaC9hcm0vZG9tYWluX2J1 aWxkLmMKQEAgLTEwMTcsNyArMTAxNyw2IEBAIHN0YXRpYyBpbnQgX19pbml0IG1ha2VfdGltZXJf bm9kZShjb25zdCBzdHJ1Y3QgZG9tYWluICpkLCB2b2lkICpmZHQsCiAgICAgcmV0dXJuIHJlczsK IH0KIAotI2lmZGVmIENPTkZJR19BQ1BJCiAvKgogICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGFz IHBhcnQgb2YgdGhlIGRldmljZSB0cmVlIGdlbmVyYXRpb24gZm9yIERvbTAKICAqIG9uIEFDUEkg c3lzdGVtcywgYW5kIERvbVVzIHN0YXJ0ZWQgZGlyZWN0bHkgZnJvbSBYZW4gYmFzZWQgb24gZGV2 aWNlCkBAIC0xMDYzLDcgKzEwNjIsNiBAQCBzdGF0aWMgaW50IF9faW5pdCBtYWtlX2Nob3Nlbl9u b2RlKGNvbnN0IHN0cnVjdCBrZXJuZWxfaW5mbyAqa2luZm8pCiAKICAgICByZXR1cm4gcmVzOwog fQotI2VuZGlmCiAKIHN0YXRpYyBpbnQgX19pbml0IG1hcF9pcnFfdG9fZG9tYWluKHN0cnVjdCBk b21haW4gKmQsIHVuc2lnbmVkIGludCBpcnEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBib29sIG5lZWRfbWFwcGluZywgY29uc3QgY2hhciAqZGV2bmFtZSkKQEAgLTE0NTUs NiArMTQ1MywyMzUgQEAgc3RhdGljIGludCBfX2luaXQgaGFuZGxlX25vZGUoc3RydWN0IGRvbWFp biAqZCwgc3RydWN0IGtlcm5lbF9pbmZvICpraW5mbywKICAgICByZXR1cm4gcmVzOwogfQogCitz dGF0aWMgaW50IF9faW5pdCBtYWtlX2dpY3YyX2RvbVVfbm9kZShjb25zdCBzdHJ1Y3QgZG9tYWlu ICpkLCB2b2lkICpmZHQpCit7CisgICAgaW50IHJlcyA9IDA7CisgICAgX19iZTMyIHJlZ1soR1VF U1RfUk9PVF9BRERSRVNTX0NFTExTICsgR1VFU1RfUk9PVF9TSVpFX0NFTExTKSAqIDJdOworICAg IF9fYmUzMiAqY2VsbHM7CisKKyAgICByZXMgPSBmZHRfYmVnaW5fbm9kZShmZHQsICJpbnRlcnJ1 cHQtY29udHJvbGxlckAiX19zdHJpbmdpZnkoR1VFU1RfR0lDRF9CQVNFKSk7CisgICAgaWYgKCBy ZXMgKQorICAgICAgICByZXR1cm4gcmVzOworCisgICAgcmVzID0gZmR0X3Byb3BlcnR5X2NlbGwo ZmR0LCAiI2FkZHJlc3MtY2VsbHMiLCAwKTsKKyAgICBpZiAoIHJlcyApCisgICAgICAgIHJldHVy biByZXM7CisKKyAgICByZXMgPSBmZHRfcHJvcGVydHlfY2VsbChmZHQsICIjaW50ZXJydXB0LWNl bGxzIiwgMyk7CisgICAgaWYgKCByZXMgKQorICAgICAgICByZXR1cm4gcmVzOworCisgICAgcmVz ID0gZmR0X3Byb3BlcnR5KGZkdCwgImludGVycnVwdC1jb250cm9sbGVyIiwgTlVMTCwgMCk7Cisg ICAgaWYgKCByZXMgKQorICAgICAgICByZXR1cm4gcmVzOworCisgICAgcmVzID0gZmR0X3Byb3Bl cnR5X3N0cmluZyhmZHQsICJjb21wYXRpYmxlIiwgImFybSxnaWMtNDAwIik7CisgICAgaWYgKCBy ZXMgKQorICAgICAgICByZXR1cm4gcmVzOworCisgICAgY2VsbHMgPSAmcmVnWzBdOworICAgIGR0 X2NoaWxkX3NldF9yYW5nZSgmY2VsbHMsIEdVRVNUX1JPT1RfQUREUkVTU19DRUxMUywgR1VFU1Rf Uk9PVF9TSVpFX0NFTExTLAorICAgICAgICAgICAgICAgICAgICAgICBHVUVTVF9HSUNEX0JBU0Us IEdVRVNUX0dJQ0RfU0laRSk7CisgICAgZHRfY2hpbGRfc2V0X3JhbmdlKCZjZWxscywgR1VFU1Rf Uk9PVF9BRERSRVNTX0NFTExTLCBHVUVTVF9ST09UX1NJWkVfQ0VMTFMsCisgICAgICAgICAgICAg ICAgICAgICAgIEdVRVNUX0dJQ0NfQkFTRSwgR1VFU1RfR0lDQ19TSVpFKTsKKworICAgIHJlcyA9 IGZkdF9wcm9wZXJ0eShmZHQsICJyZWciLCByZWcsIHNpemVvZihyZWcpKTsKKyAgICBpZiAocmVz KQorICAgICAgICByZXR1cm4gcmVzOworCisgICAgcmVzID0gZmR0X3Byb3BlcnR5X2NlbGwoZmR0 LCAibGludXgscGhhbmRsZSIsIEdVRVNUX1BIQU5ETEVfR0lDKTsKKyAgICBpZiAocmVzKQorICAg ICAgICByZXR1cm4gcmVzOworCisgICAgcmVzID0gZmR0X3Byb3BlcnR5X2NlbGwoZmR0LCAicGhh bmRsZSIsIEdVRVNUX1BIQU5ETEVfR0lDKTsKKyAgICBpZiAocmVzKQorICAgICAgICByZXR1cm4g cmVzOworCisgICAgcmVzID0gZmR0X2VuZF9ub2RlKGZkdCk7CisKKyAgICByZXR1cm4gcmVzOwor fQorCitzdGF0aWMgaW50IF9faW5pdCBtYWtlX2dpY3YzX2RvbVVfbm9kZShjb25zdCBzdHJ1Y3Qg ZG9tYWluICpkLCB2b2lkICpmZHQpCit7CisgICAgaW50IHJlcyA9IDA7CisgICAgX19iZTMyIHJl Z1soR1VFU1RfUk9PVF9BRERSRVNTX0NFTExTICsgR1VFU1RfUk9PVF9TSVpFX0NFTExTKSAqIDJd OworICAgIF9fYmUzMiAqY2VsbHM7CisKKyAgICByZXMgPSBmZHRfYmVnaW5fbm9kZShmZHQsICJp bnRlcnJ1cHQtY29udHJvbGxlckAiX19zdHJpbmdpZnkoR1VFU1RfR0lDVjNfR0lDRF9CQVNFKSk7 CisgICAgaWYgKCByZXMgKQorICAgICAgICByZXR1cm4gcmVzOworCisgICAgcmVzID0gZmR0X3By b3BlcnR5X2NlbGwoZmR0LCAiI2FkZHJlc3MtY2VsbHMiLCAwKTsKKyAgICBpZiAoIHJlcyApCisg ICAgICAgIHJldHVybiByZXM7CisKKyAgICByZXMgPSBmZHRfcHJvcGVydHlfY2VsbChmZHQsICIj aW50ZXJydXB0LWNlbGxzIiwgMyk7CisgICAgaWYgKCByZXMgKQorICAgICAgICByZXR1cm4gcmVz OworCisgICAgcmVzID0gZmR0X3Byb3BlcnR5KGZkdCwgImludGVycnVwdC1jb250cm9sbGVyIiwg TlVMTCwgMCk7CisgICAgaWYgKCByZXMgKQorICAgICAgICByZXR1cm4gcmVzOworCisgICAgcmVz ID0gZmR0X3Byb3BlcnR5X3N0cmluZyhmZHQsICJjb21wYXRpYmxlIiwgImFybSxnaWMtdjMiKTsK KyAgICBpZiAoIHJlcyApCisgICAgICAgIHJldHVybiByZXM7CisKKyAgICBjZWxscyA9ICZyZWdb MF07CisgICAgZHRfY2hpbGRfc2V0X3JhbmdlKCZjZWxscywgR1VFU1RfUk9PVF9BRERSRVNTX0NF TExTLCBHVUVTVF9ST09UX1NJWkVfQ0VMTFMsCisgICAgICAgICAgICAgICAgICAgICAgIEdVRVNU X0dJQ1YzX0dJQ0RfQkFTRSwgR1VFU1RfR0lDVjNfR0lDRF9TSVpFKTsKKyAgICBkdF9jaGlsZF9z ZXRfcmFuZ2UoJmNlbGxzLCBHVUVTVF9ST09UX0FERFJFU1NfQ0VMTFMsIEdVRVNUX1JPT1RfU0la RV9DRUxMUywKKyAgICAgICAgICAgICAgICAgICAgICAgR1VFU1RfR0lDVjNfR0lDUjBfQkFTRSwg R1VFU1RfR0lDVjNfR0lDUjBfU0laRSk7CisKKyAgICByZXMgPSBmZHRfcHJvcGVydHkoZmR0LCAi cmVnIiwgcmVnLCBzaXplb2YocmVnKSk7CisgICAgaWYgKHJlcykKKyAgICAgICAgcmV0dXJuIHJl czsKKworICAgIHJlcyA9IGZkdF9wcm9wZXJ0eV9jZWxsKGZkdCwgImxpbnV4LHBoYW5kbGUiLCBH VUVTVF9QSEFORExFX0dJQyk7CisgICAgaWYgKHJlcykKKyAgICAgICAgcmV0dXJuIHJlczsKKwor ICAgIHJlcyA9IGZkdF9wcm9wZXJ0eV9jZWxsKGZkdCwgInBoYW5kbGUiLCBHVUVTVF9QSEFORExF X0dJQyk7CisgICAgaWYgKHJlcykKKyAgICAgICAgcmV0dXJuIHJlczsKKworICAgIHJlcyA9IGZk dF9lbmRfbm9kZShmZHQpOworCisgICAgcmV0dXJuIHJlczsKK30KKworc3RhdGljIGludCBfX2lu aXQgbWFrZV9naWNfZG9tVV9ub2RlKGNvbnN0IHN0cnVjdCBkb21haW4gKmQsIHZvaWQgKmZkdCkK K3sKKyAgICBzd2l0Y2ggKCBnaWNfaHdfdmVyc2lvbigpICkKKyAgICB7CisgICAgY2FzZSBHSUNf VjM6CisgICAgICAgIHJldHVybiBtYWtlX2dpY3YzX2RvbVVfbm9kZShkLCBmZHQpOworICAgIGNh c2UgR0lDX1YyOgorICAgICAgICByZXR1cm4gbWFrZV9naWN2Ml9kb21VX25vZGUoZCwgZmR0KTsK KyAgICBkZWZhdWx0OgorICAgICAgICBwYW5pYygiVW5zdXBwb3J0ZWQgR0lDIHZlcnNpb24iKTsK KyAgICB9Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IG1ha2VfdGltZXJfZG9tVV9ub2RlKGNvbnN0 IHN0cnVjdCBkb21haW4gKmQsIHZvaWQgKmZkdCkKK3sKKyAgICBpbnQgcmVzOworICAgIGdpY19p bnRlcnJ1cHRfdCBpbnRyc1szXTsKKworICAgIHJlcyA9IGZkdF9iZWdpbl9ub2RlKGZkdCwgInRp bWVyIik7CisgICAgaWYgKCByZXMgKQorICAgICAgICByZXR1cm4gcmVzOworCisgICAgaWYgKCAh aXNfNjRiaXRfZG9tYWluKGQpICkKKyAgICB7CisgICAgICAgIHJlcyA9IGZkdF9wcm9wZXJ0eV9z dHJpbmcoZmR0LCAiY29tcGF0aWJsZSIsICJhcm0sYXJtdjctdGltZXIiKTsKKyAgICAgICAgaWYg KCByZXMgKQorICAgICAgICAgICAgcmV0dXJuIHJlczsKKyAgICB9CisgICAgZWxzZQorICAgIHsK KyAgICAgICAgcmVzID0gZmR0X3Byb3BlcnR5X3N0cmluZyhmZHQsICJjb21wYXRpYmxlIiwgImFy bSxhcm12OC10aW1lciIpOworICAgICAgICBpZiAoIHJlcyApCisgICAgICAgICAgICByZXR1cm4g cmVzOworICAgIH0KKworICAgIHNldF9pbnRlcnJ1cHRfcHBpKGludHJzWzBdLCBHVUVTVF9USU1F Ul9QSFlTX1NfUFBJLCAweGYsIERUX0lSUV9UWVBFX0xFVkVMX0xPVyk7CisgICAgc2V0X2ludGVy cnVwdF9wcGkoaW50cnNbMV0sIEdVRVNUX1RJTUVSX1BIWVNfTlNfUFBJLCAweGYsIERUX0lSUV9U WVBFX0xFVkVMX0xPVyk7CisgICAgc2V0X2ludGVycnVwdF9wcGkoaW50cnNbMl0sIEdVRVNUX1RJ TUVSX1ZJUlRfUFBJLCAweGYsIERUX0lSUV9UWVBFX0xFVkVMX0xPVyk7CisKKyAgICByZXMgPSBm ZHRfcHJvcGVydHkoZmR0LCAiaW50ZXJydXB0cyIsIGludHJzLCBzaXplb2YgKGludHJzWzBdKSAq IDMpOworICAgIGlmICggcmVzICkKKyAgICAgICAgcmV0dXJuIHJlczsKKworICAgIHJlcyA9IGZk dF9wcm9wZXJ0eV9jZWxsKGZkdCwgImludGVycnVwdC1wYXJlbnQiLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEdVRVNUX1BIQU5ETEVfR0lDKTsKKyAgICBpZiAocmVzKQorICAgICAgICBy ZXR1cm4gcmVzOworCisgICAgcmVzID0gZmR0X2VuZF9ub2RlKGZkdCk7CisKKyAgICByZXR1cm4g cmVzOworfQorCisvKgorICogVGhlIG1heCBzaXplIGZvciBEVCBpcyAyTUIuIEhvd2V2ZXIsIHRo ZSBnZW5lcmF0ZWQgRFQgaXMgc21hbGwsIDRLQgorICogYXJlIGVub3VnaCBmb3Igbm93LCBidXQg d2UgbWlnaHQgaGF2ZSB0byBpbmNyZWFzZSBpdCBpbiB0aGUgZnV0dXJlLgorICovCisjZGVmaW5l IERPTVVfRFRCX1NJWkUgNDA5Ngorc3RhdGljIGludCBfX2luaXQgcHJlcGFyZV9kdGJfZG9tVShz dHJ1Y3QgZG9tYWluICpkLCBzdHJ1Y3Qga2VybmVsX2luZm8gKmtpbmZvKQoreworICAgIGludCBh ZGRyY2VsbHMsIHNpemVjZWxsczsKKyAgICBpbnQgcmV0OworCisgICAgYWRkcmNlbGxzID0gR1VF U1RfUk9PVF9BRERSRVNTX0NFTExTOworICAgIHNpemVjZWxscyA9IEdVRVNUX1JPT1RfU0laRV9D RUxMUzsKKworICAgIGtpbmZvLT5mZHQgPSB4bWFsbG9jX2J5dGVzKERPTVVfRFRCX1NJWkUpOwor ICAgIGlmICgga2luZm8tPmZkdCA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuIC1FTk9NRU07CisK KyAgICByZXQgPSBmZHRfY3JlYXRlKGtpbmZvLT5mZHQsIERPTVVfRFRCX1NJWkUpOworICAgIGlm ICggcmV0IDwgMCApCisgICAgICAgIGdvdG8gZXJyOworCisgICAgcmV0ID0gZmR0X2ZpbmlzaF9y ZXNlcnZlbWFwKGtpbmZvLT5mZHQpOworICAgIGlmICggcmV0IDwgMCApCisgICAgICAgIGdvdG8g ZXJyOworCisgICAgcmV0ID0gZmR0X2JlZ2luX25vZGUoa2luZm8tPmZkdCwgIi8iKTsKKyAgICBp ZiAoIHJldCA8IDAgKQorICAgICAgICBnb3RvIGVycjsKKworICAgIHJldCA9IGZkdF9wcm9wZXJ0 eV9jZWxsKGtpbmZvLT5mZHQsICIjYWRkcmVzcy1jZWxscyIsIGFkZHJjZWxscyk7CisgICAgaWYg KCByZXQgKQorICAgICAgICBnb3RvIGVycjsKKworICAgIHJldCA9IGZkdF9wcm9wZXJ0eV9jZWxs KGtpbmZvLT5mZHQsICIjc2l6ZS1jZWxscyIsIHNpemVjZWxscyk7CisgICAgaWYgKCByZXQgKQor ICAgICAgICBnb3RvIGVycjsKKworICAgIHJldCA9IG1ha2VfY2hvc2VuX25vZGUoa2luZm8pOwor ICAgIGlmICggcmV0ICkKKyAgICAgICAgZ290byBlcnI7CisKKyAgICByZXQgPSBtYWtlX3BzY2lf bm9kZShraW5mby0+ZmR0LCBOVUxMKTsKKyAgICBpZiAoIHJldCApCisgICAgICAgIGdvdG8gZXJy OworCisgICAgcmV0ID0gbWFrZV9jcHVzX25vZGUoZCwga2luZm8tPmZkdCwgTlVMTCk7CisgICAg aWYgKCByZXQgKQorICAgICAgICBnb3RvIGVycjsKKworICAgIHJldCA9IG1ha2VfbWVtb3J5X25v ZGUoZCwga2luZm8tPmZkdCwgYWRkcmNlbGxzLCBzaXplY2VsbHMsIGtpbmZvKTsKKyAgICBpZiAo IHJldCApCisgICAgICAgIGdvdG8gZXJyOworCisgICAgcmV0ID0gbWFrZV9naWNfZG9tVV9ub2Rl KGQsIGtpbmZvLT5mZHQpOworICAgIGlmICggcmV0ICkKKyAgICAgICAgZ290byBlcnI7CisKKyAg ICByZXQgPSBtYWtlX3RpbWVyX2RvbVVfbm9kZShkLCBraW5mby0+ZmR0KTsKKyAgICBpZiAoIHJl dCApCisgICAgICAgIGdvdG8gZXJyOworCisgICAgcmV0ID0gZmR0X2VuZF9ub2RlKGtpbmZvLT5m ZHQpOworICAgIGlmICggcmV0IDwgMCApCisgICAgICAgIGdvdG8gZXJyOworCisgICAgcmV0ID0g ZmR0X2ZpbmlzaChraW5mby0+ZmR0KTsKKyAgICBpZiAoIHJldCA8IDAgKQorICAgICAgICBnb3Rv IGVycjsKKworICAgIHJldHVybiAwOworCisgIGVycjoKKyAgICBwcmludGsoIkRldmljZSB0cmVl IGdlbmVyYXRpb24gZmFpbGVkICglZCkuXG4iLCByZXQpOworICAgIHhmcmVlKGtpbmZvLT5mZHQp OworCisgICAgcmV0dXJuIC1FSU5WQUw7Cit9CisKIHN0YXRpYyBpbnQgX19pbml0IHByZXBhcmVf ZHRiX2h3ZG9tKHN0cnVjdCBkb21haW4gKmQsIHN0cnVjdCBrZXJuZWxfaW5mbyAqa2luZm8pCiB7 CiAgICAgY29uc3QgcDJtX3R5cGVfdCBkZWZhdWx0X3AybXQgPSBwMm1fbW1pb19kaXJlY3RfYzsK QEAgLTIzMjUsNiArMjU1MiwxMCBAQCBzdGF0aWMgaW50IF9faW5pdCBjb25zdHJ1Y3RfZG9tVShz dHJ1Y3QgZG9tYWluICpkLAogI2VuZGlmCiAgICAgYWxsb2NhdGVfbWVtb3J5KGQsICZraW5mbyk7 CiAKKyAgICByYyA9IHByZXBhcmVfZHRiX2RvbVUoZCwgJmtpbmZvKTsKKyAgICBpZiAoIHJjIDwg MCApCisgICAgICAgIHJldHVybiByYzsKKwogICAgIHJldHVybiBfX2NvbnN0cnVjdF9kb21haW4o ZCwgJmtpbmZvKTsKIH0KIAotLSAKMS45LjEKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0 cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlz dGluZm8veGVuLWRldmVs