[PATCH v7 4/6] ieee1275: add support for NVMeoFC
Avnish Chouhan <[email protected]> Fri, 20 Feb 2026 18:28:26 +0530
| Newsgroups | org.gnu.grub-devel |
|---|---|
| Message-ID | <[email protected]> |
VGhpcyBwYXRjaCBpbXBsZW1lbnRzIHRoZSBmdW5jdGlvbnMgdG8gc2NhbiBhbmQgZGlzY292ZXJ5 IG9mIE5WTWVvRkMuCgpTaWduZWQtb2ZmLWJ5OiBEaWVnbyBEb21pbmdvcyA8ZGllZ29kb0Bici5p Ym0uY29tPgpTaWduZWQtb2ZmLWJ5OiBBdm5pc2ggQ2hvdWhhbiA8YXZuaXNoQGxpbnV4LmlibS5j b20+Ci0tLQogZ3J1Yi1jb3JlL2Rpc2svaWVlZTEyNzUvb2ZkaXNrLmMgfCAzOTggKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLQogMSBmaWxlIGNo YW5nZWQsIDMwMCBpbnNlcnRpb25zKCspLCA5OCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9n cnViLWNvcmUvZGlzay9pZWVlMTI3NS9vZmRpc2suYyBiL2dydWItY29yZS9kaXNrL2llZWUxMjc1 L29mZGlzay5jCmluZGV4IDYyMDkwZmIuLmViOTNkZTMgMTAwNjQ0Ci0tLSBhL2dydWItY29yZS9k aXNrL2llZWUxMjc1L29mZGlzay5jCisrKyBiL2dydWItY29yZS9kaXNrL2llZWUxMjc1L29mZGlz ay5jCkBAIC0yNiw2ICsyNiw5IEBACiAjaW5jbHVkZSA8Z3J1Yi90aW1lLmg+CiAjaW5jbHVkZSA8 Z3J1Yi9zYWZlbWF0aC5oPgogCisjZGVmaW5lIEVYVEVORF9QQVRIXzY0IDY0CisjZGVmaW5lIEVY VEVORF9QQVRIXzUxMiA1MTIKKwogc3RhdGljIGNoYXIgKmxhc3RfZGV2cGF0aDsKIHN0YXRpYyBn cnViX2llZWUxMjc1X2loYW5kbGVfdCBsYXN0X2loYW5kbGU7CiAKQEAgLTIyMywxMTcgKzIyNiwz MTYgQEAgZGV2X2l0ZXJhdGVfcmVhbCAoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqcGF0 aCkKICAgcmV0dXJuOwogfQogCi1zdGF0aWMgdm9pZAotZGV2X2l0ZXJhdGUgKGNvbnN0IHN0cnVj dCBncnViX2llZWUxMjc1X2RldmFsaWFzICphbGlhcykKLXsKLSAgaWYgKGdydWJfc3RyY21wIChh bGlhcy0+dHlwZSwgImZjcCIpID09IDApCitkZXZfaXRlcmF0ZV9mY3BfZGlza3MgKGNvbnN0IHN0 cnVjdCBncnViX2llZWUxMjc1X2RldmFsaWFzICphbGlhcykKKyB7CisgIC8qCisgICAqIElmIHdl IGFyZSBkZWFsaW5nIHdpdGggZmNwIGRldmljZXMsIHdlIG5lZWQKKyAgICogdG8gZmluZCB0aGUg V1dQTnMgYW5kIExVTnMgdG8gaXRlcmF0ZSB0aGVtCisgICAqLworICBncnViX2llZWUxMjc1X2lo YW5kbGVfdCBpaGFuZGxlOworICBncnViX3VpbnQ2NF90ICpwdHJfdGFyZ2V0cywgKnB0cl9sdW5z LCBrLCBsOworICB1bnNpZ25lZCBpbnQgaSwgaiwgcG9zOworICBjaGFyICpidWYsICpidWZwdHI7 CisgIHN0cnVjdCBzZXRfZmNwX3RhcmdldHNfYXJncworICB7CisgICAgc3RydWN0IGdydWJfaWVl ZTEyNzVfY29tbW9uX2hkciBjb21tb247CisgICAgZ3J1Yl9pZWVlMTI3NV9jZWxsX3QgbWV0aG9k OworICAgIGdydWJfaWVlZTEyNzVfY2VsbF90IGloYW5kbGU7CisgICAgZ3J1Yl9pZWVlMTI3NV9j ZWxsX3QgY2F0Y2hfcmVzdWx0OworICAgIGdydWJfaWVlZTEyNzVfY2VsbF90IG5lbnRyaWVzOwor ICAgIGdydWJfaWVlZTEyNzVfY2VsbF90IHRhYmxlOworICB9IGFyZ3NfdGFyZ2V0czsKKworICBz dHJ1Y3Qgc2V0X2ZjcF9sdW5zX2FyZ3MKKyAgeworICAgIHN0cnVjdCBncnViX2llZWUxMjc1X2Nv bW1vbl9oZHIgY29tbW9uOworICAgIGdydWJfaWVlZTEyNzVfY2VsbF90IG1ldGhvZDsKKyAgICBn cnViX2llZWUxMjc1X2NlbGxfdCBpaGFuZGxlOworICAgIGdydWJfaWVlZTEyNzVfY2VsbF90IHd3 cG5faDsKKyAgICBncnViX2llZWUxMjc1X2NlbGxfdCB3d3BuX2w7CisgICAgZ3J1Yl9pZWVlMTI3 NV9jZWxsX3QgY2F0Y2hfcmVzdWx0OworICAgIGdydWJfaWVlZTEyNzVfY2VsbF90IG5lbnRyaWVz OworICAgIGdydWJfaWVlZTEyNzVfY2VsbF90IHRhYmxlOworICB9IGFyZ3NfbHVuczsKKworICBz dHJ1Y3QgYXJnc19yZXQKKyAgeworICAgIGdydWJfdWludDY0X3QgYWRkcjsKKyAgICBncnViX3Vp bnQ2NF90IGxlbjsKKyAgfTsKKyAgc3RydWN0IGFyZ3NfcmV0ICp0YXJnZXRzX3RhYmxlOworICBz dHJ1Y3QgYXJnc19yZXQgKmx1bnNfdGFibGU7CisKKyAgaWYgKGdydWJfaWVlZTEyNzVfb3BlbiAo YWxpYXMtPnBhdGgsICZpaGFuZGxlKSkKICAgICB7Ci0gICAgICAvKgotICAgICAgICogSWYgd2Ug YXJlIGRlYWxpbmcgd2l0aCBmY3AgZGV2aWNlcywgd2UgbmVlZAotICAgICAgICogdG8gZmluZCB0 aGUgV1dQTnMgYW5kIExVTnMgdG8gaXRlcmF0ZSB0aGVtCi0gICAgICAgKi8KLSAgICAgIGdydWJf aWVlZTEyNzVfaWhhbmRsZV90IGloYW5kbGU7Ci0gICAgICBncnViX3VpbnQ2NF90ICpwdHJfdGFy Z2V0cywgKnB0cl9sdW5zLCBrLCBsOwotICAgICAgdW5zaWduZWQgaW50IGksIGosIHBvczsKLSAg ICAgIGNoYXIgKmJ1ZiwgKmJ1ZnB0cjsKLSAgICAgIHN0cnVjdCBzZXRfZmNwX3RhcmdldHNfYXJn cwotICAgICAgewotICAgICAgICBzdHJ1Y3QgZ3J1Yl9pZWVlMTI3NV9jb21tb25faGRyIGNvbW1v bjsKLSAgICAgICAgZ3J1Yl9pZWVlMTI3NV9jZWxsX3QgbWV0aG9kOwotICAgICAgICBncnViX2ll ZWUxMjc1X2NlbGxfdCBpaGFuZGxlOwotICAgICAgICBncnViX2llZWUxMjc1X2NlbGxfdCBjYXRj aF9yZXN1bHQ7Ci0gICAgICAgIGdydWJfaWVlZTEyNzVfY2VsbF90IG5lbnRyaWVzOwotICAgICAg ICBncnViX2llZWUxMjc1X2NlbGxfdCB0YWJsZTsKLSAgICAgIH0gYXJnc190YXJnZXRzOwotCi0g ICAgICBzdHJ1Y3Qgc2V0X2ZjcF9sdW5zX2FyZ3MKLSAgICAgIHsKLSAgICAgICAgc3RydWN0IGdy dWJfaWVlZTEyNzVfY29tbW9uX2hkciBjb21tb247Ci0gICAgICAgIGdydWJfaWVlZTEyNzVfY2Vs bF90IG1ldGhvZDsKLSAgICAgICAgZ3J1Yl9pZWVlMTI3NV9jZWxsX3QgaWhhbmRsZTsKLSAgICAg ICAgZ3J1Yl9pZWVlMTI3NV9jZWxsX3Qgd3dwbl9oOwotICAgICAgICBncnViX2llZWUxMjc1X2Nl bGxfdCB3d3BuX2w7Ci0gICAgICAgIGdydWJfaWVlZTEyNzVfY2VsbF90IGNhdGNoX3Jlc3VsdDsK LSAgICAgICAgZ3J1Yl9pZWVlMTI3NV9jZWxsX3QgbmVudHJpZXM7Ci0gICAgICAgIGdydWJfaWVl ZTEyNzVfY2VsbF90IHRhYmxlOwotICAgICAgfSBhcmdzX2x1bnM7Ci0KLSAgICAgIHN0cnVjdCBh cmdzX3JldAotICAgICAgewotICAgICAgICBncnViX3VpbnQ2NF90IGFkZHI7Ci0gICAgICAgIGdy dWJfdWludDY0X3QgbGVuOwotICAgICAgfTsKKyAgICAgIGdydWJfZHByaW50ZiAoImRpc2siLCAi ZmFpbGVkIHRvIG9wZW4gdGhlIGRpc2sgd2hpbGUgaXRlcmF0aW5nIEZDUCBkaXNrIHBhdGg9JXNc biIsIGFsaWFzLT5wYXRoKTsKKyAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICAgIGlmIChncnVi X2llZWUxMjc1X29wZW4gKGFsaWFzLT5wYXRoLCAmaWhhbmRsZSkpCisgIC8qIFNldHVwIHRoZSBm Y3AtdGFyZ2V0cyBtZXRob2QgdG8gY2FsbCB2aWEgcGZ3Ki8KKyAgSU5JVF9JRUVFMTI3NV9DT01N T04gKCZhcmdzX3RhcmdldHMuY29tbW9uLCAiY2FsbC1tZXRob2QiLCAyLCAzKTsKKyAgYXJnc190 YXJnZXRzLm1ldGhvZCA9IChncnViX2llZWUxMjc1X2NlbGxfdCkgImZjcC10YXJnZXRzIjsKKyAg YXJnc190YXJnZXRzLmloYW5kbGUgPSBpaGFuZGxlOworCisgIC8qIFNldHVwIHRoZSBmY3AtbHVu cyBtZXRob2QgdG8gY2FsbCB2aWEgcGZ3ICovCisgIElOSVRfSUVFRTEyNzVfQ09NTU9OICgmYXJn c19sdW5zLmNvbW1vbiwgImNhbGwtbWV0aG9kIiwgNCwgMyk7CisgIGFyZ3NfbHVucy5tZXRob2Qg PSAoZ3J1Yl9pZWVlMTI3NV9jZWxsX3QpICJmY3AtbHVucyI7CisgIGFyZ3NfbHVucy5paGFuZGxl ID0gaWhhbmRsZTsKKyAgaWYgKElFRUUxMjc1X0NBTExfRU5UUllfRk4gKCZhcmdzX3RhcmdldHMp ID09IC0xKQorICAgIHsKKyAgICAgIGdydWJfZHByaW50ZiAoImRpc2siLCAiZmFpbGVkIHRvIGdl dCB0aGUgdGFyZ2V0cyB3aGlsZSBpdGVyYXRpbmcgRkNQIGRpc2sgcGF0aD0lc1xuIiwgYWxpYXMt PnBhdGgpOworICAgICAgZ3J1Yl9pZWVlMTI3NV9jbG9zZSAoaWhhbmRsZSk7CisgICAgICByZXR1 cm47CisgICAgfQorICAvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIGJ1aWxkaW5nIHRoZSBwYXRoICov CisgIGJ1ZiA9IGdydWJfbWFsbG9jIChncnViX3N0cmxlbiAoYWxpYXMtPnBhdGgpICsgRVhURU5E X1BBVEhfNjQpOworICBpZiAoIWJ1ZikKKyAgICB7CisgICAgICBncnViX2llZWUxMjc1X2Nsb3Nl IChpaGFuZGxlKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisgIGJ1ZnB0ciA9IGdydWJfc3RwY3B5 IChidWYsIGFsaWFzLT5wYXRoKTsKKworICAvKgorICAgKiBJdGVyYXRlIG92ZXIgZW50cmllcyBy ZXR1cm5lZCBieSBwZncuIEVhY2ggZW50cnkgY29udGFpbnMgYQorICAgKiBwb2ludGVyIHRvIHd3 cG4gdGFibGUgYW5kIGhpcyBsZW5ndGguCisgICAqLworICB0YXJnZXRzX3RhYmxlID0gKHN0cnVj dCBhcmdzX3JldCAqKSAoYXJnc190YXJnZXRzLnRhYmxlKTsKKyAgZm9yIChpID0gMDsgaSA8IGFy Z3NfdGFyZ2V0cy5uZW50cmllczsgaSsrKQorICAgIHsKKyAgICAgIHB0cl90YXJnZXRzID0gKGdy dWJfdWludDY0X3QqKSB0YXJnZXRzX3RhYmxlW2ldLmFkZHI7CisgICAgICAvKiBJdGVyYXRlIG92 ZXIgYWxsIHd3cG5zIGluIGdpdmVuIHRhYmxlICovCisgICAgICBmb3IgKGsgPSAwOyBrIDwgdGFy Z2V0c190YWJsZVtpXS5sZW47IGsrKykKICAgICAgICAgewotICAgICAgICAgIGdydWJfZHByaW50 ZiAoImRpc2siLCAiZmFpbGVkIHRvIG9wZW4gdGhlIGRpc2sgd2hpbGUgaXRlcmF0aW5nIEZDUCBk aXNrIHBhdGg9JXNcbiIsIGFsaWFzLT5wYXRoKTsKLSAgICAgICAgICByZXR1cm47CisgICAgICAg ICAgYXJnc19sdW5zLnd3cG5fbCA9IChncnViX2llZWUxMjc1X2NlbGxfdCkgKCpwdHJfdGFyZ2V0 cyk7CisgICAgICAgICAgYXJnc19sdW5zLnd3cG5faCA9IChncnViX2llZWUxMjc1X2NlbGxfdCkg KCpwdHJfdGFyZ2V0cyA+PiAzMik7CisgICAgICAgICAgcG9zID0gZ3J1Yl9zbnByaW50ZiAoYnVm cHRyLCAzMiwgIi9kaXNrQCUiIFBSSXhHUlVCX1VJTlQ2NF9ULAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGdydWJfZ2V0X3VuYWxpZ25lZDY0ICgqcHRyX3RhcmdldHMrKykpOworICAg ICAgICAgIC8qIEdldCB0aGUgbHVucyBmb3IgZ2l2ZW4gd3dwbiB0YXJnZXQgKi8KKyAgICAgICAg ICBpZiAoSUVFRTEyNzVfQ0FMTF9FTlRSWV9GTiAoJmFyZ3NfbHVucykgPT0gLTEpCisgICAgICAg ICAgICB7CisgICAgICAgICAgICAgIGdydWJfZHByaW50ZiAoImRpc2siLCAiZmFpbGVkIHRvIGdl dCB0aGUgTFVOUyB3aGlsZSBpdGVyYXRpbmcgRkNQIGRpc2sgcGF0aD0lc1xuIiwgYnVmKTsKKyAg ICAgICAgICAgICAgZ3J1Yl9pZWVlMTI3NV9jbG9zZSAoaWhhbmRsZSk7CisgICAgICAgICAgICAg IGdydWJfZnJlZSAoYnVmKTsKKyAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQor ICAgICAgICAgIGx1bnNfdGFibGUgPSAoc3RydWN0IGFyZ3NfcmV0ICopIChhcmdzX2x1bnMudGFi bGUpOworCisgICAgICAgICAgLyogSXRlcmF0ZSBvdmVyIGFsbCBMVU5zICovCisgICAgICAgICAg Zm9yIChqID0gMDsgaiA8IGFyZ3NfbHVucy5uZW50cmllczsgaisrKQorICAgICAgICAgICAgewor ICAgICAgICAgICAgICBwdHJfbHVucyA9IChncnViX3VpbnQ2NF90KikgbHVuc190YWJsZVtqXS5h ZGRyOworICAgICAgICAgICAgICBmb3IgKGwgPSAwOyBsIDwgbHVuc190YWJsZVtqXS5sZW47IGwr KykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBncnViX3NucHJpbnRmICgm YnVmcHRyW3Bvc10sIDMwLCAiLCUiIFBSSXhHUlVCX1VJTlQ2NF9ULAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZ3J1Yl9nZXRfdW5hbGlnbmVkNjQgKCpwdHJfbHVucysrKSk7Cisg ICAgICAgICAgICAgICAgICBkZXZfaXRlcmF0ZV9yZWFsIChidWYsIGJ1Zik7CisgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgfQogICAgICAgICB9CisgICAgfQorICBncnViX2llZWUxMjc1 X2Nsb3NlIChpaGFuZGxlKTsKKyAgZ3J1Yl9mcmVlIChidWYpOworICByZXR1cm47Cit9CiAKLSAg ICAgIC8qIFNldHVwIHRoZSBmY3AtdGFyZ2V0cyBtZXRob2QgdG8gY2FsbCB2aWEgcGZ3Ki8KLSAg ICAgIElOSVRfSUVFRTEyNzVfQ09NTU9OICgmYXJnc190YXJnZXRzLmNvbW1vbiwgImNhbGwtbWV0 aG9kIiwgMiwgMyk7Ci0gICAgICBhcmdzX3RhcmdldHMubWV0aG9kID0gKGdydWJfaWVlZTEyNzVf Y2VsbF90KSAiZmNwLXRhcmdldHMiOwotICAgICAgYXJnc190YXJnZXRzLmloYW5kbGUgPSBpaGFu ZGxlOworc3RhdGljIHZvaWQKK2Rldl9pdGVyYXRlX2ZjcF9udm1lb2YgKGNvbnN0IHN0cnVjdCBn cnViX2llZWUxMjc1X2RldmFsaWFzICphbGlhcykKK3sKKyAgY2hhciAqYnVmcHRyOworICBncnVi X2llZWUxMjc1X2loYW5kbGVfdCBpaGFuZGxlOworCisgIC8qIENyZWF0ZSB0aGUgc3RydWN0cyBm b3IgdGhlIHBhcmFtZXRlcnMgcGFzc2luZyB0byBQRlcgKi8KKyAgc3RydWN0IG52bWVfYXJncwor ICB7CisgICAgc3RydWN0IGdydWJfaWVlZTEyNzVfY29tbW9uX2hkciBjb21tb247CisgICAgZ3J1 Yl9pZWVlMTI3NV9jZWxsX3QgbWV0aG9kOworICAgIGdydWJfaWVlZTEyNzVfY2VsbF90IGloYW5k bGU7CisgICAgZ3J1Yl9pZWVlMTI3NV9jZWxsX3QgY2F0Y2hfcmVzdWx0OworICAgIGdydWJfaWVl ZTEyNzVfY2VsbF90IG5lbnRyaWVzOworICAgIGdydWJfaWVlZTEyNzVfY2VsbF90IHRhYmxlOwor ICB9IG52bWVfZGlzY292ZXJ5X2NvbnRyb2xsZXJzX2FyZ3MsIG52bWVfY29udHJvbGxlcnNfYXJn cywgbnZtZV9uYW1lc3BhY2VzX2FyZ3M7CisKKyAgLyogQ3JlYXRlIHRoZSBzdHJ1Y3RzIGZvciB0 aGUgcmVzdWx0cyBmcm9tIFBGVyAqLworICBzdHJ1Y3QgZGlzY292ZXJ5X2NvbnRyb2xsZXJzX3Rh YmxlX3N0cnVjdAorICB7CisgICAgZ3J1Yl91aW50NjRfdCB0YWJsZVsyNTZdOworICAgIGdydWJf dWludDMyX3QgbGVuOworICB9IGRpc2NvdmVyeV9jb250cm9sbGVyc190YWJsZTsKKworICAvKgor ICAgKiBzdHJ1Y3QgbnZtZV9jb250cm9sbGVyc190YWJsZV9lbnRyeQorICAgKiB0aGlzIHRoZSBy ZXR1cm4gb2YgbnZtZS1jb250cm9sbGVycyBtZXRob2QgdGFibGVzLCBjb250YWluaW5nOgorICAg KiAtIDItYnl0ZSBjb250cm9sbGVyIElECisgICAqIC0gMjU2LWJ5dGUgdHJhbnNwb3J0IGFkZHJl c3Mgc3RyaW5nCisgICAqIC0gMjU2LWJ5dGUgZmllbGQgY29udGFpbmluZyBudWxsLXRlcm1pbmF0 ZWQgTlZNIHN1YnN5c3RlbSBOUU4gc3RyaW5nIHVwIHRvIDIyMyBjaGFyYWN0ZXJzCisgICAqLwor ICBzdHJ1Y3QgbnZtZV9jb250cm9sbGVyc190YWJsZV9lbnRyeQorICB7CisgICAgZ3J1Yl91aW50 MTZfdCBpZDsKKyAgICBjaGFyIHd3cG5bMjU2XTsKKyAgICBjaGFyIG5xblsyNTZdOworICB9Owor CisgIHN0cnVjdCBudm1lX2NvbnRyb2xsZXJzX3RhYmxlX2VudHJ5X3JlYWwKKyAgeworICAgIGdy dWJfdWludDE2X3QgaWQ7CisgICAgY2hhciB3d3BuWzI1Nl07CisgICAgY2hhciBucW5bMjU2XTsK KyAgfTsKIAotICAgICAgLyogU2V0dXAgdGhlIGZjcC1sdW5zIG1ldGhvZCB0byBjYWxsIHZpYSBw ZncgKi8KLSAgICAgIElOSVRfSUVFRTEyNzVfQ09NTU9OICgmYXJnc19sdW5zLmNvbW1vbiwgImNh bGwtbWV0aG9kIiwgNCwgMyk7Ci0gICAgICBhcmdzX2x1bnMubWV0aG9kID0gKGdydWJfaWVlZTEy NzVfY2VsbF90KSAiZmNwLWx1bnMiOwotICAgICAgYXJnc19sdW5zLmloYW5kbGUgPSBpaGFuZGxl OwotICAgICAgaWYgKElFRUUxMjc1X0NBTExfRU5UUllfRk4gKCZhcmdzX3RhcmdldHMpID09IC0x KQorICBzdHJ1Y3QgbnZtZV9jb250cm9sbGVyc190YWJsZV9lbnRyeSogbnZtZV9jb250cm9sbGVy c190YWJsZTsKKyAgZ3J1Yl91aW50MzJfdCBudm1lX2NvbnRyb2xsZXJzX3RhYmxlX2VudHJpZXM7 CisgIGNoYXIgKmJ1ZjsKKyAgdW5zaWduZWQgaW50IGkgPSAwOworICBpbnQgY3VycmVudF9idWZm ZXJfaW5kZXg7CisgIGludCBudm1lX2NvbnRyb2xsZXJfaW5kZXg7CisgIGludCBidWZwdHJfcG9z MjsKKyAgZ3J1Yl91aW50MzJfdCBuYW1lc3BhY2VfaW5kZXggPSAwOworICBzdHJ1Y3QgbnZtZV9j b250cm9sbGVyc190YWJsZV9lbnRyeSogbnZtZV9jb250cm9sbGVyc190YWJsZV9idWY7CisKKyAg bnZtZV9jb250cm9sbGVyc190YWJsZSA9IGdydWJfbWFsbG9jIChzaXplb2YgKHN0cnVjdCBudm1l X2NvbnRyb2xsZXJzX3RhYmxlX2VudHJ5KSAqIDI1Nik7CisgIC8qIEFsbG9jYXRlIG1lbW9yeSBm b3IgYnVpbGRpbmcgdGhlIE5WTWVvRiBwYXRoICovCisgIGJ1ZiA9IGdydWJfbWFsbG9jIChncnVi X3N0cmxlbiAoYWxpYXMtPnBhdGgpICsgRVhURU5EX1BBVEhfNTEyKTsKKworICBpZiAoIWJ1ZiB8 fCAhbnZtZV9jb250cm9sbGVyc190YWJsZSkKKyAgICB7CisgICAgICBncnViX2ZyZWUgKG52bWVf Y29udHJvbGxlcnNfdGFibGUpOworICAgICAgZ3J1Yl9mcmVlIChidWYpOworICAgICAgcmV0dXJu OworICAgIH0KKworICAvKiBDb3B5IHRoZSBhbGlhcy0+cGF0aCB0byBidWYgc28gd2UgY2FuIHdv cmsgd2l0aCAqLworICBidWZwdHIgPSBncnViX3N0cGNweSAoYnVmLCBhbGlhcy0+cGF0aCk7Cisg IGdydWJfc25wcmludGYgKGJ1ZnB0ciwgMzIsICIvbnZtZS1vZiIpOworCisgIC8qCisgICAqICBP cGVuIHRoZSBudm1lLW9mIGxheWVyCisgICAqICBFeC4gIC9wY2lAYnVzL2ZpYnJlLWNoYW5uZWxA QGRldixmdW5jL252bWUtb2YKKyAgICovCisgIGlmIChncnViX2llZWUxMjc1X29wZW4gKGJ1Ziwg JmloYW5kbGUpKQorICAgIHsKKyAgICAgIGdydWJfZHByaW50ZiAoImRpc2siLCAiZmFpbGVkIHRv IG9wZW4gdGhlIGRpc2sgd2hpbGUgaXRlcmF0aW5nIEZDUCBkaXNrIHBhdGg9JXNcbiIsIGJ1Zik7 CisgICAgICBncnViX2ZyZWUgKG52bWVfY29udHJvbGxlcnNfdGFibGUpOworICAgICAgZ3J1Yl9m cmVlIChidWYpOworICAgICAgcmV0dXJuOworICAgIH0KKworICAvKgorICAgKiBDYWxsIHRvIG52 bWUtZGlzY292ZXJ5LWNvbnRyb2xsZXJzIG1ldGhvZCBmcm9tIHRoZSBudm1lLW9mIGxheWVyCisg ICAqIHRvIGdldCBhIGxpc3Qgb2YgdGhlIE5WTWUgZGlzY292ZXJ5IGNvbnRyb2xsZXJzIHBlciB0 aGUgYmluZGluZworICAgKi8KKyAgSU5JVF9JRUVFMTI3NV9DT01NT04gKCZudm1lX2Rpc2NvdmVy eV9jb250cm9sbGVyc19hcmdzLmNvbW1vbiwgImNhbGwtbWV0aG9kIiwgMiwgMik7CisgIG52bWVf ZGlzY292ZXJ5X2NvbnRyb2xsZXJzX2FyZ3MubWV0aG9kID0gKGdydWJfaWVlZTEyNzVfY2VsbF90 KSAibnZtZS1kaXNjb3ZlcnktY29udHJvbGxlcnMiOworICBudm1lX2Rpc2NvdmVyeV9jb250cm9s bGVyc19hcmdzLmloYW5kbGUgPSBpaGFuZGxlOworICBpZiAoSUVFRTEyNzVfQ0FMTF9FTlRSWV9G TiAoJm52bWVfZGlzY292ZXJ5X2NvbnRyb2xsZXJzX2FyZ3MpID09IC0xKQorICAgIHsKKyAgICAg IGdydWJfZHByaW50ZiAoImRpc2siLCAiZmFpbGVkIHRvIGdldCB0aGUgdGFyZ2V0cyB3aGlsZSBp dGVyYXRpbmcgRkNQIGRpc2sgcGF0aD0lc1xuIiwgYnVmKTsKKyAgICAgIGdydWJfZnJlZSAobnZt ZV9jb250cm9sbGVyc190YWJsZSk7CisgICAgICBncnViX2ZyZWUgKGJ1Zik7CisgICAgICBncnVi X2llZWUxMjc1X2Nsb3NlIChpaGFuZGxlKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgLyog QWZ0ZXIgY2xvc2luZyB0aGUgZGV2aWNlLCB0aGUgaW5mbyBpcyBsb3N0LiBTbyBsZXRzIGNvcHkg ZWFjaCBidWZmZXIgaW4gdGhlIGJ1ZmZlcnMgdGFibGUgKi8KKyAgZGlzY292ZXJ5X2NvbnRyb2xs ZXJzX3RhYmxlLmxlbiA9IChncnViX3VpbnQzMl90KSBudm1lX2Rpc2NvdmVyeV9jb250cm9sbGVy c19hcmdzLm5lbnRyaWVzOworCisgIGZvciAoaSA9IDA7IGkgPCBkaXNjb3ZlcnlfY29udHJvbGxl cnNfdGFibGUubGVuOyBpKyspCisgICAgeworICAgICAgZGlzY292ZXJ5X2NvbnRyb2xsZXJzX3Rh YmxlLnRhYmxlW2ldID0gKChncnViX3VpbnQ2NF90KikgbnZtZV9kaXNjb3ZlcnlfY29udHJvbGxl cnNfYXJncy50YWJsZSlbaV07CisgICAgfQorICBncnViX2llZWUxMjc1X2Nsb3NlIChpaGFuZGxl KTsKKyAgZ3J1Yl9kcHJpbnRmICgib2ZkaXNrIiwiTlZNZW9GOiBGb3VuZCAlZCBkaXNjb3Zlcnkg Y29udHJvbGxlcnNcbiIsIGRpc2NvdmVyeV9jb250cm9sbGVyc190YWJsZS5sZW4pOworCisgIC8q IEZvciBlYWNoIG52bWUgZGlzY292ZXJ5IGNvbnRyb2xsZXIgKi8KKyAgZm9yIChjdXJyZW50X2J1 ZmZlcl9pbmRleCA9IDA7IGN1cnJlbnRfYnVmZmVyX2luZGV4IDwgKGludCkgZGlzY292ZXJ5X2Nv bnRyb2xsZXJzX3RhYmxlLmxlbjsgY3VycmVudF9idWZmZXJfaW5kZXgrKykKKyAgICB7CisgICAg ICBncnViX3NucHJpbnRmIChidWZwdHIsIDY0LCAiL252bWUtb2YvY29udHJvbGxlckAlIiBQUkl4 R1JVQl9VSU5UNjRfVCAiLGZmZmYiLAorICAgICAgICAgICAgICAgICAgICAgZGlzY292ZXJ5X2Nv bnRyb2xsZXJzX3RhYmxlLnRhYmxlW2N1cnJlbnRfYnVmZmVyX2luZGV4XSk7CisgICAgICBncnVi X2RwcmludGYgKCJvZmRpc2siLCAibnZtZW9mIGNvbnRyb2xsZXI9JXNcbiIsIGJ1Zik7CisgICAg ICBpZiAoZ3J1Yl9pZWVlMTI3NV9vcGVuIChidWYsICZpaGFuZGxlKSkKICAgICAgICAgewotICAg ICAgICAgIGdydWJfZHByaW50ZiAoImRpc2siLCAiZmFpbGVkIHRvIGdldCB0aGUgdGFyZ2V0cyB3 aGlsZSBpdGVyYXRpbmcgRkNQIGRpc2sgcGF0aD0lc1xuIiwgYWxpYXMtPnBhdGgpOwotICAgICAg ICAgIGdydWJfaWVlZTEyNzVfY2xvc2UgKGloYW5kbGUpOwotICAgICAgICAgIHJldHVybjsKKyAg ICAgICAgICBncnViX2RwcmludGYgKCJvZmRpc2siLCAiZmFpbGVkIHRvIG9wZW4gdGhlIGRpc2sg d2hpbGUgZ2V0dGluZyBudm1lLWNvbnRyb2xsZXJzICBwYXRoPSVzXG4iLCBidWYpOworICAgICAg ICAgIGNvbnRpbnVlOwogICAgICAgICB9Ci0gICAgICBidWYgPSBncnViX21hbGxvYyAoZ3J1Yl9z dHJsZW4gKGFsaWFzLT5wYXRoKSArIDMyICsgMzIpOwotICAgICAgaWYgKCFidWYpCisgICAgICBJ TklUX0lFRUUxMjc1X0NPTU1PTiAoJm52bWVfY29udHJvbGxlcnNfYXJncy5jb21tb24sICJjYWxs LW1ldGhvZCIsIDIsIDIpOworICAgICAgbnZtZV9jb250cm9sbGVyc19hcmdzLm1ldGhvZCA9IChn cnViX2llZWUxMjc1X2NlbGxfdCkgIm52bWUtY29udHJvbGxlcnMiOworICAgICAgbnZtZV9jb250 cm9sbGVyc19hcmdzLmloYW5kbGUgPSBpaGFuZGxlOworICAgICAgbnZtZV9jb250cm9sbGVyc19h cmdzLmNhdGNoX3Jlc3VsdCA9IDA7CisKKyAgICAgIGlmIChJRUVFMTI3NV9DQUxMX0VOVFJZX0ZO ICgmbnZtZV9jb250cm9sbGVyc19hcmdzKSA9PSAtMSkKICAgICAgICAgeworICAgICAgICAgIGdy dWJfZHByaW50ZiAoIm9mZGlzayIsICJmYWlsZWQgdG8gZ2V0IHRoZSBudm1lLWNvbnRyb2xsZXJz IHdoaWxlIGl0ZXJhdGluZyBGQ1AgZGlzayBwYXRoXG4iKTsKICAgICAgICAgICBncnViX2llZWUx Mjc1X2Nsb3NlIChpaGFuZGxlKTsKLSAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAg IGJ1ZnB0ciA9IGdydWJfc3RwY3B5IChidWYsIGFsaWFzLT5wYXRoKTsKKyAgICAgICAgICBjb250 aW51ZTsKKwkgfQogCi0gICAgICAvKgotICAgICAgICogSXRlcmF0ZSBvdmVyIGVudHJpZXMgcmV0 dXJuZWQgYnkgcGZ3LiBFYWNoIGVudHJ5IGNvbnRhaW5zIGEKLSAgICAgICAqIHBvaW50ZXIgdG8g d3dwbiB0YWJsZSBhbmQgaGlzIGxlbmd0aC4KLSAgICAgICAqLwotICAgICAgc3RydWN0IGFyZ3Nf cmV0ICp0YXJnZXRzX3RhYmxlID0gKHN0cnVjdCBhcmdzX3JldCAqKSAoYXJnc190YXJnZXRzLnRh YmxlKTsKLSAgICAgIGZvciAoaSA9IDA7IGkgPCBhcmdzX3RhcmdldHMubmVudHJpZXM7IGkrKykK KyAgICAgIC8qIENvcHkgdGhlIGJ1ZmZlciBsaXN0IHRvIG52bWVfY29udHJvbGxlcnNfdGFibGUg Ki8KKyAgICAgIG52bWVfY29udHJvbGxlcnNfdGFibGVfZW50cmllcyA9ICgoZ3J1Yl91aW50MzJf dCkgbnZtZV9jb250cm9sbGVyc19hcmdzLm5lbnRyaWVzKTsKKyAgICAgIG52bWVfY29udHJvbGxl cnNfdGFibGVfYnVmID0gKHN0cnVjdCBudm1lX2NvbnRyb2xsZXJzX3RhYmxlX2VudHJ5KikgbnZt ZV9jb250cm9sbGVyc19hcmdzLnRhYmxlOworICAgICAgZm9yIChpID0gMDsgaSA8IG52bWVfY29u dHJvbGxlcnNfdGFibGVfZW50cmllczsgaSsrKQogICAgICAgICB7Ci0gICAgICAgICAgcHRyX3Rh cmdldHMgPSAoZ3J1Yl91aW50NjRfdCopIHRhcmdldHNfdGFibGVbaV0uYWRkcjsKLSAgICAgICAg ICAvKiBJdGVyYXRlIG92ZXIgYWxsIHd3cG5zIGluIGdpdmVuIHRhYmxlICovCi0gICAgICAgICAg Zm9yKGsgPSAwOyBrIDwgdGFyZ2V0c190YWJsZVtpXS5sZW47IGsrKykKLSAgICAgICAgICAgIHsK LSAgICAgICAgICAgICAgYXJnc19sdW5zLnd3cG5fbCA9IChncnViX2llZWUxMjc1X2NlbGxfdCkg KCpwdHJfdGFyZ2V0cyk7Ci0gICAgICAgICAgICAgIGFyZ3NfbHVucy53d3BuX2ggPSAoZ3J1Yl9p ZWVlMTI3NV9jZWxsX3QpICgqcHRyX3RhcmdldHMgPj4gMzIpOwotICAgICAgICAgICAgICBwb3Mg PSBncnViX3NucHJpbnRmIChidWZwdHIsIDMyLCAiL2Rpc2tAJSIgUFJJeEdSVUJfVUlOVDY0X1Qs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3J1Yl9nZXRfdW5hbGlnbmVkNjQg KCpwdHJfdGFyZ2V0cysrKSk7Ci0gICAgICAgICAgICAgIC8qIEdldCB0aGUgbHVucyBmb3IgZ2l2 ZW4gd3dwbiB0YXJnZXQgKi8KLSAgICAgICAgICAgICAgaWYgKElFRUUxMjc1X0NBTExfRU5UUllf Rk4gKCZhcmdzX2x1bnMpID09IC0xKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg ICAgIGdydWJfZHByaW50ZiAoImRpc2siLCAiZmFpbGVkIHRvIGdldCB0aGUgTFVOUyB3aGlsZSBp dGVyYXRpbmcgRkNQIGRpc2sgcGF0aD0lc1xuIiwgYnVmKTsKLSAgICAgICAgICAgICAgICAgIGdy dWJfaWVlZTEyNzVfY2xvc2UgKGloYW5kbGUpOwotICAgICAgICAgICAgICAgICAgZ3J1Yl9mcmVl IChidWYpOwotICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLSAg ICAgICAgICAgICAgc3RydWN0IGFyZ3NfcmV0ICpsdW5zX3RhYmxlID0gKHN0cnVjdCBhcmdzX3Jl dCAqKSAoYXJnc19sdW5zLnRhYmxlKTsKLQotICAgICAgICAgICAgICAvKiBJdGVyYXRlIG92ZXIg YWxsIExVTnMgKi8KLSAgICAgICAgICAgICAgZm9yKGogPSAwOyBqIDwgYXJnc19sdW5zLm5lbnRy aWVzOyBqKyspCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgcHRyX2x1bnMg PSAoZ3J1Yl91aW50NjRfdCopIGx1bnNfdGFibGVbal0uYWRkcjsKLSAgICAgICAgICAgICAgICAg IGZvcihsID0gMDsgbCA8IGx1bnNfdGFibGVbal0ubGVuOyBsKyspCi0gICAgICAgICAgICAgICAg ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICBncnViX3NucHJpbnRmICgmYnVmcHRyW3Bvc10s IDMwLCAiLCUiIFBSSXhHUlVCX1VJTlQ2NF9ULAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZ3J1Yl9nZXRfdW5hbGlnbmVkNjQgKCpwdHJfbHVucysrKSk7Ci0gICAgICAgICAg ICAgICAgICAgICAgZGV2X2l0ZXJhdGVfcmVhbCAoYnVmLCBidWYpOwotICAgICAgICAgICAgICAg ICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9CisJICAg bnZtZV9jb250cm9sbGVyc190YWJsZVtpXS5pZCA9IChncnViX3VpbnQxNl90KSBudm1lX2NvbnRy b2xsZXJzX3RhYmxlX2J1ZltpXS5pZDsKKyAgICAgICAgICBncnViX3N0cmNweSAobnZtZV9jb250 cm9sbGVyc190YWJsZVtpXS53d3BuLCBudm1lX2NvbnRyb2xsZXJzX3RhYmxlX2J1ZltpXS53d3Bu KTsKKyAgICAgICAgICBncnViX3N0cmNweSAobnZtZV9jb250cm9sbGVyc190YWJsZVtpXS5ucW4s IG52bWVfY29udHJvbGxlcnNfdGFibGVfYnVmW2ldLm5xbik7CisJIH0KICAgICAgIGdydWJfaWVl ZTEyNzVfY2xvc2UgKGloYW5kbGUpOwotICAgICAgZ3J1Yl9mcmVlIChidWYpOwotICAgICAgcmV0 dXJuOworICAgICAgZ3J1Yl9kcHJpbnRmICgib2ZkaXNrIiwgIk5WTWVvRjogZm91bmQgJWQgbnZt ZSBjb250cm9sbGVyc1xuIiwgKGludCkgbnZtZV9jb250cm9sbGVyc19hcmdzLm5lbnRyaWVzKTsK KworICAgICAgLyogRm9yIGVhY2ggbnZtZSBjb250cm9sbGVyICovCisgICAgICBmb3IgKG52bWVf Y29udHJvbGxlcl9pbmRleCA9IDA7IG52bWVfY29udHJvbGxlcl9pbmRleCA8IChpbnQpIG52bWVf Y29udHJvbGxlcnNfYXJncy5uZW50cmllczsgbnZtZV9jb250cm9sbGVyX2luZGV4KyspCisgICAg ICAgeworICAgICAgICAgLyoKKwkgICAqIE9wZW4gdGhlIG52bWUgY29udHJvbGxlcgorICAgICAg ICAgICogL3BjaUBidXMvZmlicmUtY2hhbm5lbEBkZXYsZnVuYy9udm1lLW9mL2NvbnRyb2xsZXJA dHJhbnNwb3J0LWFkZHIsY3Rsci1pZDpucW49dGd0LXN1YnN5c3RlbS1ucW4KKyAgICAgICAgICAq LworICAgICAgICAgYnVmcHRyX3BvczIgPSBncnViX3NucHJpbnRmIChidWZwdHIsIDUxMiwgIi9u dm1lLW9mL2NvbnRyb2xsZXJAJXMsZmZmZjpucW49JXMiLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgbnZtZV9jb250cm9sbGVyc190YWJsZVtudm1lX2NvbnRyb2xsZXJf aW5kZXhdLnd3cG4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudm1l X2NvbnRyb2xsZXJzX3RhYmxlW252bWVfY29udHJvbGxlcl9pbmRleF0ubnFuKTsKKwkgIGdydWJf ZHByaW50ZiAoIm9mZGlzayIsICJOVk1lb0Y6IG52bWVvZiBjb250cm9sbGVyPSVzXG4iLCBidWYp OworICAgICAgICAgaWYgKGdydWJfaWVlZTEyNzVfb3BlbiAoYnVmLCAmaWhhbmRsZSkpCisJICAg IHsKKyAgICAgICAgICAgICBncnViX2RwcmludGYgKCJvZmRpc2siLCAiZmFpbGVkIHRvIG9wZW4g dGhlIHBhdGg9JXNcbiIsIGJ1Zik7CisgICAgICAgICAgICAgY29udGludWU7CisJICAgIH0KKyAg ICAgICAgIElOSVRfSUVFRTEyNzVfQ09NTU9OICgmbnZtZV9uYW1lc3BhY2VzX2FyZ3MuY29tbW9u LCAiY2FsbC1tZXRob2QiLCAyLCAyKTsKKyAgICAgICAgIG52bWVfbmFtZXNwYWNlc19hcmdzLm1l dGhvZCA9IChncnViX2llZWUxMjc1X2NlbGxfdCkgImdldC1uYW1lc3BhY2UtbGlzdCI7CisgICAg ICAgICBudm1lX25hbWVzcGFjZXNfYXJncy5paGFuZGxlID0gaWhhbmRsZTsKKyAgICAgICAgIG52 bWVfbmFtZXNwYWNlc19hcmdzLmNhdGNoX3Jlc3VsdCA9IDA7CisKKwkgIGlmIChJRUVFMTI3NV9D QUxMX0VOVFJZX0ZOICgmbnZtZV9uYW1lc3BhY2VzX2FyZ3MpID09IC0xKQorICAgICAgICAgICB7 CisgICAgICAgICAgICAgZ3J1Yl9kcHJpbnRmICgib2ZkaXNrIiwgImZhaWxlZCB0byBnZXQgdGhl IG52bWUtbmFtZXNwYWNlLWxpc3Qgd2hpbGUgaXRlcmF0aW5nIEZDUCBkaXNrIHBhdGhcbiIpOwor ICAgICAgICAgICAgIGdydWJfaWVlZTEyNzVfY2xvc2UgKGloYW5kbGUpOworICAgICAgICAgICAg IGNvbnRpbnVlOworICAgICAgICAgICB9CisgICAgICAgICBncnViX3VpbnQzMl90ICpuYW1lc3Bh Y2VzID0gKGdydWJfdWludDMyX3QqKSBudm1lX25hbWVzcGFjZXNfYXJncy50YWJsZTsKKyAgICAg ICAgIGdydWJfZHByaW50ZiAoIm9mZGlzayIsICJOVk1lb0Y6IGZvdW5kICVkIG5hbWVzcGFjZXNc biIsIChpbnQpbnZtZV9uYW1lc3BhY2VzX2FyZ3MubmVudHJpZXMpOworCSAgZ3J1Yl9pZWVlMTI3 NV9jbG9zZSAoaWhhbmRsZSk7CisgICAgICAgICBuYW1lc3BhY2VfaW5kZXggPSAwOworICAgICAg ICAgZm9yIChuYW1lc3BhY2VfaW5kZXg9MDsgbmFtZXNwYWNlX2luZGV4IDwgbnZtZV9uYW1lc3Bh Y2VzX2FyZ3MubmVudHJpZXM7IG5hbWVzcGFjZV9pbmRleCsrKQorICAgICAgICAgICB7CisJICAg ICAgZ3J1Yl9zbnByaW50ZiAoYnVmcHRyK2J1ZnB0cl9wb3MyLCA1MTIsICIvbmFtZXNwYWNlQCUi UFJJeEdSVUJfVUlOVDMyX1QsIG5hbWVzcGFjZXNbbmFtZXNwYWNlX2luZGV4XSk7CisgICAgICAg ICAgICAgZ3J1Yl9kcHJpbnRmICgib2ZkaXNrIiwgIk5WTWVvRjogbmFtZXNwYWNlPSVzXG4iLCBi dWYpOworICAgICAgICAgICAgIGRldl9pdGVyYXRlX3JlYWwgKGJ1ZiwgYnVmKTsKKyAgICAgICAg ICAgfQorICAgICAgICAgZGV2X2l0ZXJhdGVfcmVhbCAoYnVmLCBidWYpOworCX0KKyAgICB9Cisg IGdydWJfZnJlZSAoYnVmKTsKKyAgZ3J1Yl9mcmVlIChudm1lX2NvbnRyb2xsZXJzX3RhYmxlKTsK KyAgcmV0dXJuOworfQorCitzdGF0aWMgdm9pZAorZGV2X2l0ZXJhdGUgKGNvbnN0IHN0cnVjdCBn cnViX2llZWUxMjc1X2RldmFsaWFzICphbGlhcykKK3sKKyAgaWYgKGdydWJfc3RyY21wIChhbGlh cy0+dHlwZSwgImZjcCIpID09IDApCisgICAgeworICAgICAgLyogSXRlcmF0ZSBkaXNrcyAqLwor ICAgICAgZGV2X2l0ZXJhdGVfZmNwX2Rpc2tzIChhbGlhcyk7CisgICAgICAvKiBJdGVyYXRlIE5W TWVvRiAqLworICAgICAgZGV2X2l0ZXJhdGVfZmNwX252bWVvZiAoYWxpYXMpOwogICAgIH0KICAg ZWxzZSBpZiAoZ3J1Yl9zdHJjbXAgKGFsaWFzLT50eXBlLCAidnNjc2kiKSA9PSAwKQogICAgIHsK LS0gCjIuNTAuMSAoQXBwbGUgR2l0LTE1NSkKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwpHcnViLWRldmVsIG1haWxpbmcgbGlzdApHcnViLWRldmVsQGdu dS5vcmcKaHR0cHM6Ly9saXN0cy5nbnUub3JnL21haWxtYW4vbGlzdGluZm8vZ3J1Yi1kZXZlbAo=