From: "NARUSE, Yui" Date: 2008-02-21T18:19:54+09:00 Subject: [ruby-dev:33883] patch for inspect This is a multi-part message in MIME format. --------------000908040603080005010700 Content-Type: text/plain; charset=ISO-2022-JP Content-Transfer-Encoding: 7bit 成瀬です。 懸案の inspect を、田中さんの示唆を基に変えるパッチです。 意図としては、p と irb で生の文字列が出るようにすることを第一にし、それ 以外のケースでエスケープされてしまうことはやむをえないとしました。 手法としては inspect_accumulate(str) と文字列を与え、その文字列と対象文 字列のエンコーディングが等しければそのまま、異なっていればエスケープしま す。inspect_accumulate が定義されていなければ、それより先のオブジェクト では inspect を用います。 -- NARUSE, Yui DBDB A476 FDBD 9450 02CD 0EFC BCE3 C388 472E C1EA --------------000908040603080005010700 Content-Type: text/plain; name="inspect.patch" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="inspect.patch" LS0tIGFycmF5LmMJKHJldmlzaW9uIDE1NTYwKQorKysgYXJyYXkuYwkod29ya2luZyBjb3B5 KQpAQCAtMTMwNywyMyArMTMwNywzNCBAQCByYl9hcnlfam9pbl9tKGludCBhcmdjLCBWQUxV RSAqYXJndiwgVkFMCiB9CiAKIHN0YXRpYyBWQUxVRQotaW5zcGVjdF9hcnkoVkFMVUUgYXJ5 LCBWQUxVRSBkdW1teSwgaW50IHJlY3VyKQoraW5zcGVjdF9hcnkoVkFMVUUgYXJ5LCBWQUxV RSByZXN1bHQsIGludCByZWN1cikKIHsKICAgICBpbnQgdGFpbnRlZCA9IE9CSl9UQUlOVEVE KGFyeSk7CiAgICAgbG9uZyBpOwotICAgIFZBTFVFIHMsIHN0cjsKIAotICAgIGlmIChyZWN1 cikgcmV0dXJuIHJiX3RhaW50ZWRfc3RyX25ldzIoIlsuLi5dIik7Ci0gICAgc3RyID0gcmJf c3RyX2J1Zl9uZXcyKCJbIik7CisgICAgaWYgKHJlY3VyKSByZXR1cm4gcmJfc3RyX2J1Zl9j YXRfYXNjaWkocmVzdWx0LCAiWy4uLl0iKTsKKyAgICByYl9zdHJfYnVmX2NhdF9hc2NpaShy ZXN1bHQsICJbIik7CiAgICAgZm9yIChpPTA7IGk8UkFSUkFZX0xFTihhcnkpOyBpKyspIHsK LQlzID0gcmJfaW5zcGVjdChSQVJSQVlfUFRSKGFyeSlbaV0pOwotCWlmIChPQkpfVEFJTlRF RChzKSkgdGFpbnRlZCA9IFF0cnVlOwotCWlmIChpID4gMCkgcmJfc3RyX2J1Zl9jYXQyKHN0 ciwgIiwgIik7Ci0JcmJfc3RyX2J1Zl9hcHBlbmQoc3RyLCBzKTsKLSAgICB9Ci0gICAgcmJf c3RyX2J1Zl9jYXQyKHN0ciwgIl0iKTsKLSAgICBpZiAodGFpbnRlZCkgT0JKX1RBSU5UKHN0 cik7Ci0gICAgcmV0dXJuIHN0cjsKKwlpZiAoaSA+IDApIHJiX3N0cl9idWZfY2F0X2FzY2lp KHJlc3VsdCwgIiwgIik7CisJcmJfaW5zcGVjdF9hY2N1bXVsYXRlKFJBUlJBWV9QVFIoYXJ5 KVtpXSwgcmVzdWx0KTsKKyAgICB9CisgICAgcmJfc3RyX2J1Zl9jYXRfYXNjaWkocmVzdWx0 LCAiXSIpOworICAgIE9CSl9JTkZFQ1QocmVzdWx0LCBhcnkpOworICAgIHJldHVybiByZXN1 bHQ7Cit9CisKKy8qCisgKiAgY2FsbC1zZXE6CisgKiAgICAgYXJyYXkuaW5zcGVjdF9hY2N1 bXVsYXRlKHN0cikgIC0+IHN0cmluZworICoKKyAqICBDcmVhdGUgYSBwcmludGFibGUgdmVy c2lvbiBvZiA8aT5hcnJheTwvaT4uCisgKi8KKworc3RhdGljIFZBTFVFCityYl9hcnlfaW5z cGVjdF9hY2N1bXVsYXRlKFZBTFVFIGFyeSwgVkFMVUUgcmVzdWx0KQoreworICAgIGlmIChS QVJSQVlfTEVOKGFyeSkgPT0gMCkgcmV0dXJuIHJiX3N0cl9idWZfY2F0X2FzY2lpKHJlc3Vs dCwgIltdIik7CisgICAgcmV0dXJuIHJiX2V4ZWNfcmVjdXJzaXZlKGluc3BlY3RfYXJ5LCBh cnksIHJlc3VsdCk7CiB9CiAKIC8qCkBAIC0xMzM3LDggKzEzNDgsNyBAQCBpbnNwZWN0X2Fy eShWQUxVRSBhcnksIFZBTFVFIGR1bW15LCBpbnQgCiBzdGF0aWMgVkFMVUUKIHJiX2FyeV9p bnNwZWN0KFZBTFVFIGFyeSkKIHsKLSAgICBpZiAoUkFSUkFZX0xFTihhcnkpID09IDApIHJl dHVybiByYl91c2FzY2lpX3N0cl9uZXcyKCJbXSIpOwotICAgIHJldHVybiByYl9leGVjX3Jl Y3Vyc2l2ZShpbnNwZWN0X2FyeSwgYXJ5LCAwKTsKKyAgICByZXR1cm4gcmJfYXJ5X2luc3Bl Y3RfYWNjdW11bGF0ZShhcnksIHJiX3N0cl9idWZfbmV3KDApKTsKIH0KIAogVkFMVUUKQEAg LTMyMjEsNiArMzIzMSw3IEBAIEluaXRfQXJyYXkodm9pZCkKIAogICAgIHJiX2RlZmluZV9t ZXRob2QocmJfY0FycmF5LCAidG9fcyIsIHJiX2FyeV9pbnNwZWN0LCAwKTsKICAgICByYl9k ZWZpbmVfbWV0aG9kKHJiX2NBcnJheSwgImluc3BlY3QiLCByYl9hcnlfaW5zcGVjdCwgMCk7 CisgICAgcmJfZGVmaW5lX21ldGhvZChyYl9jQXJyYXksICJpbnNwZWN0X2FjY3VtdWxhdGUi LCByYl9hcnlfaW5zcGVjdF9hY2N1bXVsYXRlLCAxKTsKICAgICByYl9kZWZpbmVfbWV0aG9k KHJiX2NBcnJheSwgInRvX2EiLCByYl9hcnlfdG9fYSwgMCk7CiAgICAgcmJfZGVmaW5lX21l dGhvZChyYl9jQXJyYXksICJ0b19hcnkiLCByYl9hcnlfdG9fYXJ5X20sIDApOwogICAgIHJi X2RlZmluZV9tZXRob2QocmJfY0FycmF5LCAiZnJvemVuPyIsICByYl9hcnlfZnJvemVuX3As IDApOwotLS0gaGFzaC5jCShyZXZpc2lvbiAxNTU2MCkKKysrIGhhc2guYwkod29ya2luZyBj b3B5KQpAQCAtMTE0NSwzNyArMTE0NSw1MCBAQCByYl9oYXNoX3RvX2EoVkFMVUUgaGFzaCkK IH0KIAogc3RhdGljIGludAotaW5zcGVjdF9pKFZBTFVFIGtleSwgVkFMVUUgdmFsdWUsIFZB TFVFIHN0cikKK2luc3BlY3RfaShWQUxVRSBrZXksIFZBTFVFIHZhbHVlLCBWQUxVRSByZXN1 bHQpCiB7CiAgICAgVkFMVUUgc3RyMjsKIAogICAgIGlmIChrZXkgPT0gUXVuZGVmKSByZXR1 cm4gU1RfQ09OVElOVUU7Ci0gICAgaWYgKFJTVFJJTkdfTEVOKHN0cikgPiAxKSB7Ci0JcmJf c3RyX2NhdDIoc3RyLCAiLCAiKTsKKyAgICBpZiAoKihSU1RSSU5HX0VORChyZXN1bHQpLTEp ICE9ICd7JykgeworCXJiX3N0cl9idWZfY2F0X2FzY2lpKHJlc3VsdCwgIiwgIik7CiAgICAg fQotICAgIHN0cjIgPSByYl9pbnNwZWN0KGtleSk7Ci0gICAgcmJfc3RyX2J1Zl9hcHBlbmQo c3RyLCBzdHIyKTsKLSAgICBPQkpfSU5GRUNUKHN0ciwgc3RyMik7Ci0gICAgcmJfc3RyX2J1 Zl9jYXQyKHN0ciwgIj0+Iik7Ci0gICAgc3RyMiA9IHJiX2luc3BlY3QodmFsdWUpOwotICAg IHJiX3N0cl9idWZfYXBwZW5kKHN0ciwgc3RyMik7Ci0gICAgT0JKX0lORkVDVChzdHIsIHN0 cjIpOworICAgIHJiX2luc3BlY3RfYWNjdW11bGF0ZShrZXksIHJlc3VsdCk7CisgICAgcmJf c3RyX2J1Zl9jYXRfYXNjaWkocmVzdWx0LCAiPT4iKTsKKyAgICByYl9pbnNwZWN0X2FjY3Vt dWxhdGUodmFsdWUsIHJlc3VsdCk7CiAKICAgICByZXR1cm4gU1RfQ09OVElOVUU7CiB9CiAK IHN0YXRpYyBWQUxVRQotaW5zcGVjdF9oYXNoKFZBTFVFIGhhc2gsIFZBTFVFIGR1bW15LCBp bnQgcmVjdXIpCitpbnNwZWN0X2hhc2goVkFMVUUgaGFzaCwgVkFMVUUgcmVzdWx0LCBpbnQg cmVjdXIpCiB7Ci0gICAgVkFMVUUgc3RyOwogCi0gICAgaWYgKHJlY3VyKSByZXR1cm4gcmJf dXNhc2NpaV9zdHJfbmV3Migiey4uLn0iKTsKLSAgICBzdHIgPSByYl9zdHJfYnVmX25ldzIo InsiKTsKLSAgICByYl9oYXNoX2ZvcmVhY2goaGFzaCwgaW5zcGVjdF9pLCBzdHIpOwotICAg IHJiX3N0cl9idWZfY2F0MihzdHIsICJ9Iik7Ci0gICAgT0JKX0lORkVDVChzdHIsIGhhc2gp OworICAgIGlmIChyZWN1cikgcmV0dXJuIHJiX3N0cl9idWZfY2F0X2FzY2lpKHJlc3VsdCwg InsuLi59Iik7CisgICAgcmJfc3RyX2J1Zl9jYXRfYXNjaWkocmVzdWx0LCAieyIpOworICAg IHJiX2hhc2hfZm9yZWFjaChoYXNoLCBpbnNwZWN0X2ksIHJlc3VsdCk7CisgICAgcmJfc3Ry X2J1Zl9jYXRfYXNjaWkocmVzdWx0LCAifSIpOworICAgIE9CSl9JTkZFQ1QocmVzdWx0LCBo YXNoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQogCi0gICAgcmV0dXJuIHN0cjsKKy8qCisg KiBjYWxsLXNlcToKKyAqICAgaHNoLnRvX3MgICA9PiBzdHJpbmcKKyAqICAgaHNoLmluc3Bl Y3QgID0+IHN0cmluZworICoKKyAqIFJldHVybiB0aGUgY29udGVudHMgb2YgdGhpcyBoYXNo IGFzIGEgc3RyaW5nLgorICoKKyAqICAgICBoID0geyAiYyIgPT4gMzAwLCAiYSIgPT4gMTAw LCAiZCIgPT4gNDAwLCAiYyIgPT4gMzAwICB9CisgKiAgICAgaC50b19zICAgIz0+ICJ7XCJh XCI9PjEwMCwgXCJjXCI9PjMwMCwgXCJkXCI9PjQwMH0iCisgKi8KKworc3RhdGljIFZBTFVF CityYl9oYXNoX2luc3BlY3RfYWNjdW11bGF0ZShWQUxVRSBoYXNoLCBWQUxVRSByZXN1bHQp Cit7CisgICAgaWYgKFJIQVNIX0VNUFRZX1AoaGFzaCkpCisJcmV0dXJuIHJiX3N0cl9idWZf Y2F0X2FzY2lpKHJlc3VsdCwgInt9Iik7CisgICAgcmV0dXJuIHJiX2V4ZWNfcmVjdXJzaXZl KGluc3BlY3RfaGFzaCwgaGFzaCwgcmVzdWx0KTsKIH0KIAogLyoKQEAgLTExOTIsOSArMTIw NSw3IEBAIGluc3BlY3RfaGFzaChWQUxVRSBoYXNoLCBWQUxVRSBkdW1teSwgaW4KIHN0YXRp YyBWQUxVRQogcmJfaGFzaF9pbnNwZWN0KFZBTFVFIGhhc2gpCiB7Ci0gICAgaWYgKFJIQVNI X0VNUFRZX1AoaGFzaCkpCi0JcmV0dXJuIHJiX3VzYXNjaWlfc3RyX25ldzIoInt9Iik7Ci0g ICAgcmV0dXJuIHJiX2V4ZWNfcmVjdXJzaXZlKGluc3BlY3RfaGFzaCwgaGFzaCwgMCk7Cisg ICAgcmV0dXJuIHJiX2hhc2hfaW5zcGVjdF9hY2N1bXVsYXRlKGhhc2gsIHJiX3N0cl9idWZf bmV3KDApKTsKIH0KIAogLyoKQEAgLTI1NjAsNiArMjU3MSw3IEBAIEluaXRfSGFzaCh2b2lk KQogICAgIHJiX2RlZmluZV9tZXRob2QocmJfY0hhc2gsInRvX2EiLCByYl9oYXNoX3RvX2Es IDApOwogICAgIHJiX2RlZmluZV9tZXRob2QocmJfY0hhc2gsInRvX3MiLCByYl9oYXNoX2lu c3BlY3QsIDApOwogICAgIHJiX2RlZmluZV9tZXRob2QocmJfY0hhc2gsImluc3BlY3QiLCBy Yl9oYXNoX2luc3BlY3QsIDApOworICAgIHJiX2RlZmluZV9tZXRob2QocmJfY0hhc2gsImlu c3BlY3RfYWNjdW11bGF0ZSIsIHJiX2hhc2hfaW5zcGVjdF9hY2N1bXVsYXRlLCAxKTsKIAog ICAgIHJiX2RlZmluZV9tZXRob2QocmJfY0hhc2gsIj09IiwgcmJfaGFzaF9lcXVhbCwgMSk7 CiAgICAgcmJfZGVmaW5lX21ldGhvZChyYl9jSGFzaCwiW10iLCByYl9oYXNoX2FyZWYsIDEp OwotLS0gaW8uYwkocmV2aXNpb24gMTU1NjApCisrKyBpby5jCSh3b3JraW5nIGNvcHkpCkBA IC00NTU2LDcgKzQ1NTYsMTAgQEAgcmJfZl9wdXRzKGludCBhcmdjLCBWQUxVRSAqYXJndikK IHZvaWQKIHJiX3AoVkFMVUUgb2JqKSAvKiBmb3IgZGVidWcgcHJpbnQgd2l0aGluIEMgY29k ZSAqLwogewotICAgIHJiX2lvX3dyaXRlKHJiX3N0ZG91dCwgcmJfb2JqX2FzX3N0cmluZyhy Yl9pbnNwZWN0KG9iaikpKTsKKyAgICBWQUxVRSBzdHIgPSByYl9zdHJfYnVmX25ldygwKTsK KyAgICByYl9lbmNfYXNzb2NpYXRlKHN0ciwgcmJfZGVmYXVsdF9leHRlcm5hbF9lbmNvZGlu ZygpKTsKKyAgICByYl9pbnNwZWN0X2FjY3VtdWxhdGUob2JqLCBzdHIpOworICAgIHJiX2lv X3dyaXRlKHJiX3N0ZG91dCwgc3RyKTsKICAgICByYl9pb193cml0ZShyYl9zdGRvdXQsIHJi X2RlZmF1bHRfcnMpOwogfQogCi0tLSBsaWIvaXJiLnJiCShyZXZpc2lvbiAxNTU2MCkKKysr IGxpYi9pcmIucmIJKHdvcmtpbmcgY29weSkKQEAgLTI5OCw3ICsyOTgsNyBAQCBtb2R1bGUg SVJCCiAKICAgICBkZWYgb3V0cHV0X3ZhbHVlCiAgICAgICBpZiBAY29udGV4dC5pbnNwZWN0 PwotICAgICAgICBwcmludGYgQGNvbnRleHQucmV0dXJuX2Zvcm1hdCwgQGNvbnRleHQubGFz dF92YWx1ZS5pbnNwZWN0CisgICAgICAgIHByaW50ZiBAY29udGV4dC5yZXR1cm5fZm9ybWF0 LCBAY29udGV4dC5sYXN0X3ZhbHVlLmluc3BlY3RfYWNjdW11bGF0ZSgiIi5mb3JjZV9lbmNv ZGluZyhFbmNvZGluZy5kZWZhdWx0X2V4dGVybmFsKSkKICAgICAgIGVsc2UKICAgICAgICAg cHJpbnRmIEBjb250ZXh0LnJldHVybl9mb3JtYXQsIEBjb250ZXh0Lmxhc3RfdmFsdWUKICAg ICAgIGVuZAotLS0gb2JqZWN0LmMJKHJldmlzaW9uIDE1NTYwKQorKysgb2JqZWN0LmMJKHdv cmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAgVkFMVUUgcmJfY05pbENsYXNzOwogVkFM VUUgcmJfY1RydWVDbGFzczsKIFZBTFVFIHJiX2NGYWxzZUNsYXNzOwogCi1zdGF0aWMgSUQg aWRfZXEsIGlkX2VxbCwgaWRfbWF0Y2gsIGlkX2luc3BlY3QsIGlkX2luaXRfY29weTsKK3N0 YXRpYyBJRCBpZF9lcSwgaWRfZXFsLCBpZF9tYXRjaCwgaWRfaW5zcGVjdCwgaWRfaW5zcGVj dF9hY2N1bXVsYXRlLCBpZF9pbml0X2NvcHk7CiAKIC8qCiAgKiAgY2FsbC1zZXE6CkBAIC0z MTMsNiArMzEzLDEyIEBAIHJiX2luc3BlY3QoVkFMVUUgb2JqKQogICAgIHJldHVybiByYl9v YmpfYXNfc3RyaW5nKHJiX2Z1bmNhbGwob2JqLCBpZF9pbnNwZWN0LCAwLCAwKSk7CiB9CiAK K1ZBTFVFCityYl9pbnNwZWN0X2FjY3VtdWxhdGUoVkFMVUUgb2JqLCBWQUxVRSByZXN1bHQp Cit7CisgICAgcmV0dXJuIHJiX29ial9hc19zdHJpbmcocmJfZnVuY2FsbChvYmosIGlkX2lu c3BlY3RfYWNjdW11bGF0ZSwgMSwgcmVzdWx0KSk7Cit9CisKIHN0YXRpYyBpbnQKIGluc3Bl Y3RfaShJRCBpZCwgVkFMVUUgdmFsdWUsIFZBTFVFIHN0cikKIHsKQEAgLTMyNCwxNiArMzMw LDE1IEBAIGluc3BlY3RfaShJRCBpZCwgVkFMVUUgdmFsdWUsIFZBTFVFIHN0cikKICAgICBp ZiAoIXJiX2lzX2luc3RhbmNlX2lkKGlkKSkgcmV0dXJuIFNUX0NPTlRJTlVFOwogICAgIGlm IChSU1RSSU5HX1BUUihzdHIpWzBdID09ICctJykgeyAvKiBmaXJzdCBlbGVtZW50ICovCiAJ UlNUUklOR19QVFIoc3RyKVswXSA9ICcjJzsKLQlyYl9zdHJfY2F0MihzdHIsICIgIik7CisJ cmJfc3RyX2J1Zl9jYXRfYXNjaWkoc3RyLCAiICIpOwogICAgIH0KICAgICBlbHNlIHsKLQly Yl9zdHJfY2F0MihzdHIsICIsICIpOworCXJiX3N0cl9idWZfY2F0X2FzY2lpKHN0ciwgIiwg Iik7CiAgICAgfQogICAgIGl2bmFtZSA9IHJiX2lkMm5hbWUoaWQpOwogICAgIHJiX3N0cl9j YXQyKHN0ciwgaXZuYW1lKTsKLSAgICByYl9zdHJfY2F0MihzdHIsICI9Iik7Ci0gICAgc3Ry MiA9IHJiX2luc3BlY3QodmFsdWUpOwotICAgIHJiX3N0cl9hcHBlbmQoc3RyLCBzdHIyKTsK KyAgICByYl9zdHJfYnVmX2NhdF9hc2NpaShzdHIsICI9Iik7CisgICAgcmJfaW5zcGVjdF9h Y2N1bXVsYXRlKHZhbHVlLCBzdHIpOwogICAgIE9CSl9JTkZFQ1Qoc3RyLCBzdHIyKTsKIAog ICAgIHJldHVybiBTVF9DT05USU5VRTsKQEAgLTM0MywxOCArMzQ4LDY3IEBAIHN0YXRpYyBW QUxVRQogaW5zcGVjdF9vYmooVkFMVUUgb2JqLCBWQUxVRSBzdHIsIGludCByZWN1cikKIHsK ICAgICBpZiAocmVjdXIpIHsKLQlyYl9zdHJfY2F0MihzdHIsICIgLi4uIik7CisJcmJfc3Ry X2J1Zl9jYXRfYXNjaWkoc3RyLCAiIC4uLiIpOwogICAgIH0KICAgICBlbHNlIHsKIAlyYl9p dmFyX2ZvcmVhY2gob2JqLCBpbnNwZWN0X2ksIHN0cik7CiAgICAgfQotICAgIHJiX3N0cl9j YXQyKHN0ciwgIj4iKTsKKyAgICByYl9zdHJfYnVmX2NhdF9hc2NpaShzdHIsICI+Iik7CiAg ICAgUlNUUklOR19QVFIoc3RyKVswXSA9ICcjJzsKICAgICBPQkpfSU5GRUNUKHN0ciwgb2Jq KTsKIAogICAgIHJldHVybiBzdHI7CiB9CiAKK3N0YXRpYyBWQUxVRQorb2JqX2l2YXJfaW5z cGVjdChWQUxVRSBvYmosIFZBTFVFIHJlc3VsdCkKK3sKKyAgICBpbnQgaGFzX2l2YXIgPSAw OworICAgIFZBTFVFICpwdHIgPSBST0JKRUNUX1BUUihvYmopOworICAgIGxvbmcgbGVuID0g Uk9CSkVDVF9MRU4ob2JqKTsKKyAgICBsb25nIGk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwg bGVuOyBpKyspIHsKKwlpZiAocHRyW2ldICE9IFF1bmRlZikgeworCSAgICBoYXNfaXZhciA9 IDE7CisJICAgIGJyZWFrOworCX0KKyAgICB9CisKKyAgICBpZiAoaGFzX2l2YXIpIHsKKwlj aGFyICpjOworCisJYyA9IHJiX29ial9jbGFzc25hbWUob2JqKTsKKwlyYl9zdHJfYXBwZW5k KHJlc3VsdCwgcmJfc3ByaW50ZigiLTwlczolcCIsIGMsICh2b2lkKilvYmopKTsKKwlyZXR1 cm4gcmJfZXhlY19yZWN1cnNpdmUoaW5zcGVjdF9vYmosIG9iaiwgcmVzdWx0KTsKKyAgICB9 CisgICAgcmV0dXJuIDA7Cit9CisKKy8qCisgKiAgY2FsbC1zZXE6CisgKiAgICAgb2JqLmlu c3BlY3RfYWNjdW11bGF0ZShzdHIpICAgPT4gc3RyaW5nCisgKiAgCisgKiAgUmV0dXJucyBh IHN0cmluZyBjb250YWluaW5nIGEgaHVtYW4tcmVhZGFibGUgcmVwcmVzZW50YXRpb24gb2YK KyAqICA8aT5vYmo8L2k+LiBJZiBub3Qgb3ZlcnJpZGRlbiwgdXNlcyB0aGUgPGNvZGU+dG9f czwvY29kZT4gbWV0aG9kIHRvCisgKiAgZ2VuZXJhdGUgdGhlIHN0cmluZy4KKyAqLworCitz dGF0aWMgVkFMVUUKK3JiX29ial9pbnNwZWN0X2FjY3VtdWxhdGUoVkFMVUUgb2JqLCBWQUxV RSByZXN1bHQpCit7CisgICAgaWYgKFRZUEUob2JqKSA9PSBUX09CSkVDVCkgeworCVZBTFVF IG1ldGggPSByYl9vYmpfbWV0aG9kKG9iaiwgSUQyU1lNKGlkX2luc3BlY3QpKTsKKwlWQUxV RSBvd25lciA9IHJiX2Z1bmNhbGwobWV0aCwgcmJfaW50ZXJuKCJvd25lciIpLCAwLCAwKTsK KwlpZiAob3duZXIgPT0gcmJfbUtlcm5lbCkgeworCSAgICBWQUxVRSBzdHIgPSBvYmpfaXZh cl9pbnNwZWN0KG9iaiwgcmVzdWx0KTsKKwkgICAgaWYgKHN0cikKKwkJcmV0dXJuIHN0cjsK Kwl9CisgICAgfQorICAgIHJldHVybiByYl9zdHJfYXBwZW5kKHJlc3VsdCwgcmJfZnVuY2Fs bChvYmosIGlkX2luc3BlY3QsIDAsIDApKTsKK30KKwogLyoKICAqICBjYWxsLXNlcToKICAq ICAgICBvYmouaW5zcGVjdCAgID0+IHN0cmluZwpAQCAtMzY3LDM3ICs0MjEsMTcgQEAgaW5z cGVjdF9vYmooVkFMVUUgb2JqLCBWQUxVRSBzdHIsIGludCByZQogICogICAgIFRpbWUubmV3 Lmluc3BlY3QgICAgICAgICAgICAgICAgICM9PiAiV2VkIEFwciAwOSAwODo1NDozOSBDRFQg MjAwMyIKICAqLwogCi0KIHN0YXRpYyBWQUxVRQogcmJfb2JqX2luc3BlY3QoVkFMVUUgb2Jq KQogewotCiAgICAgaWYgKFRZUEUob2JqKSA9PSBUX09CSkVDVCkgewotICAgICAgICBpbnQg aGFzX2l2YXIgPSAwOwotICAgICAgICBWQUxVRSAqcHRyID0gUk9CSkVDVF9QVFIob2JqKTsK LSAgICAgICAgbG9uZyBsZW4gPSBST0JKRUNUX0xFTihvYmopOwotICAgICAgICBsb25nIGk7 Ci0KLSAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0gICAgICAgICAgICBp ZiAocHRyW2ldICE9IFF1bmRlZikgewotICAgICAgICAgICAgICAgIGhhc19pdmFyID0gMTsK LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0g ICAgICAgIGlmIChoYXNfaXZhcikgewotICAgICAgICAgICAgVkFMVUUgc3RyOwotICAgICAg ICAgICAgY2hhciAqYzsKLQotICAgICAgICAgICAgYyA9IHJiX29ial9jbGFzc25hbWUob2Jq KTsKLSAgICAgICAgICAgIHN0ciA9IHJiX3NwcmludGYoIi08JXM6JXAiLCBjLCAodm9pZCop b2JqKTsKLSAgICAgICAgICAgIHJldHVybiByYl9leGVjX3JlY3Vyc2l2ZShpbnNwZWN0X29i aiwgb2JqLCBzdHIpOwotICAgICAgICB9CisgICAgICAgIFZBTFVFIHN0ciA9IG9ial9pdmFy X2luc3BlY3Qob2JqLCByYl9zdHJfYnVmX25ldygwKSk7CisgICAgICAgIGlmIChzdHIpCisJ ICAgIHJldHVybiBzdHI7CiAgICAgfQogICAgIHJldHVybiByYl9mdW5jYWxsKG9iaiwgcmJf aW50ZXJuKCJ0b19zIiksIDAsIDApOwogfQogCi0KIC8qCiAgKiAgY2FsbC1zZXE6CiAgKiAg ICAgb2JqLmluc3RhbmNlX29mPyhjbGFzcykgICAgPT4gdHJ1ZSBvciBmYWxzZQpAQCAtMjQw Myw2ICsyNDM3LDcgQEAgSW5pdF9PYmplY3Qodm9pZCkKIAogICAgIHJiX2RlZmluZV9tZXRo b2QocmJfbUtlcm5lbCwgInRvX3MiLCByYl9hbnlfdG9fcywgMCk7CiAgICAgcmJfZGVmaW5l X21ldGhvZChyYl9tS2VybmVsLCAiaW5zcGVjdCIsIHJiX29ial9pbnNwZWN0LCAwKTsKKyAg ICByYl9kZWZpbmVfbWV0aG9kKHJiX21LZXJuZWwsICJpbnNwZWN0X2FjY3VtdWxhdGUiLCBy Yl9vYmpfaW5zcGVjdF9hY2N1bXVsYXRlLCAxKTsKICAgICByYl9kZWZpbmVfbWV0aG9kKHJi X21LZXJuZWwsICJtZXRob2RzIiwgcmJfb2JqX21ldGhvZHMsIC0xKTsKICAgICByYl9kZWZp bmVfbWV0aG9kKHJiX21LZXJuZWwsICJzaW5nbGV0b25fbWV0aG9kcyIsIHJiX29ial9zaW5n bGV0b25fbWV0aG9kcywgLTEpOyAvKiBpbiBjbGFzcy5jICovCiAgICAgcmJfZGVmaW5lX21l dGhvZChyYl9tS2VybmVsLCAicHJvdGVjdGVkX21ldGhvZHMiLCByYl9vYmpfcHJvdGVjdGVk X21ldGhvZHMsIC0xKTsKQEAgLTI1MjQsNSArMjU1OSw2IEBAIEluaXRfT2JqZWN0KHZvaWQp CiAgICAgaWRfZXFsID0gcmJfaW50ZXJuKCJlcWw/Iik7CiAgICAgaWRfbWF0Y2ggPSByYl9p bnRlcm4oIj1+Iik7CiAgICAgaWRfaW5zcGVjdCA9IHJiX2ludGVybigiaW5zcGVjdCIpOwor ICAgIGlkX2luc3BlY3RfYWNjdW11bGF0ZSA9IHJiX2ludGVybigiaW5zcGVjdF9hY2N1bXVs YXRlIik7CiAgICAgaWRfaW5pdF9jb3B5ID0gcmJfaW50ZXJuKCJpbml0aWFsaXplX2NvcHki KTsKIH0KLS0tIHN0cmluZy5jCShyZXZpc2lvbiAxNTU2MCkKKysrIHN0cmluZy5jCSh3b3Jr aW5nIGNvcHkpCkBAIC0zNjM5LDI0ICszNjM5LDE5IEBAIHByZWZpeF9lc2NhcGUoVkFMVUUg c3RyLCBpbnQgYywgcmJfZW5jb2QKIAogLyoKICAqIGNhbGwtc2VxOgotICogICBzdHIuaW5z cGVjdCAgID0+IHN0cmluZworICogICBzdHIuaW5zcGVjdF9hY2N1bXVsYXRlKHN0cikgICA9 PiBzdHJpbmcKICAqCiAgKiBSZXR1cm5zIGEgcHJpbnRhYmxlIHZlcnNpb24gb2YgX3N0cl8s IHN1cnJvdW5kZWQgYnkgcXVvdGUgbWFya3MsCiAgKiB3aXRoIHNwZWNpYWwgY2hhcmFjdGVy cyBlc2NhcGVkLgotICoKLSAqICAgIHN0ciA9ICJoZWxsbyIKLSAqICAgIHN0clszXSA9ICJc YiIKLSAqICAgIHN0ci5pbnNwZWN0ICAgICAgICM9PiAiXCJoZWxcYm9cIiIKICAqLwogCiBW QUxVRQotcmJfc3RyX2luc3BlY3QoVkFMVUUgc3RyKQorcmJfc3RyX2luc3BlY3RfYWNjdW11 bGF0ZShWQUxVRSBzdHIsIFZBTFVFIHJlc3VsdCkKIHsKLSAgICByYl9lbmNvZGluZyAqZW5j ID0gU1RSX0VOQ19HRVQoc3RyKTsKKyAgICByYl9lbmNvZGluZyAqZW5jID0gU1RSX0VOQ19H RVQocmVzdWx0KTsKICAgICBjaGFyICpwLCAqcGVuZDsKLSAgICBWQUxVRSByZXN1bHQgPSBy Yl9zdHJfYnVmX25ldzIoIiIpOwogCi0gICAgcmJfZW5jX2Fzc29jaWF0ZShyZXN1bHQsIGVu Yyk7CisgICAgaWYgKCFlbmMgfHwgZW5jICE9IFNUUl9FTkNfR0VUKHN0cikpIGVuYyA9IHJi X3VzYXNjaWlfZW5jb2RpbmcoKTsKICAgICBzdHJfY2F0X2NoYXIocmVzdWx0LCAnIicsIGVu Yyk7CiAgICAgcCA9IFJTVFJJTkdfUFRSKHN0cik7IHBlbmQgPSBSU1RSSU5HX0VORChzdHIp OwogICAgIHdoaWxlIChwIDwgcGVuZCkgewpAQCAtMzczMSw2ICszNzI2LDIzIEBAIHJiX3N0 cl9pbnNwZWN0KFZBTFVFIHN0cikKICAgICBPQkpfSU5GRUNUKHJlc3VsdCwgc3RyKTsKICAg ICByZXR1cm4gcmVzdWx0OwogfQorLyoKKyAqIGNhbGwtc2VxOgorICogICBzdHIuaW5zcGVj dCAgID0+IHN0cmluZworICoKKyAqIFJldHVybnMgYSBwcmludGFibGUgdmVyc2lvbiBvZiBf c3RyXywgc3Vycm91bmRlZCBieSBxdW90ZSBtYXJrcywKKyAqIHdpdGggc3BlY2lhbCBjaGFy YWN0ZXJzIGVzY2FwZWQuCisgKgorICogICAgc3RyID0gImhlbGxvIgorICogICAgc3RyWzNd ID0gIlxiIgorICogICAgc3RyLmluc3BlY3QgICAgICAgIz0+ICJcImhlbFxib1wiIgorICov CisKK1ZBTFVFCityYl9zdHJfaW5zcGVjdChWQUxVRSBzdHIpCit7CisgICAgcmV0dXJuIHJi X3N0cl9pbnNwZWN0X2FjY3VtdWxhdGUoc3RyLCByYl9zdHJfYnVmX25ldygwKSk7Cit9CiAK ICNkZWZpbmUgSVNfRVZTVFIocCxlKSAoKHApIDwgKGUpICYmICgqKHApID09ICckJyB8fCAq KHApID09ICdAJyB8fCAqKHApID09ICd7JykpCiAKQEAgLTY0MjcsNiArNjQzOSw3IEBAIElu aXRfU3RyaW5nKHZvaWQpCiAgICAgcmJfZGVmaW5lX21ldGhvZChyYl9jU3RyaW5nLCAidG9f cyIsIHJiX3N0cl90b19zLCAwKTsKICAgICByYl9kZWZpbmVfbWV0aG9kKHJiX2NTdHJpbmcs ICJ0b19zdHIiLCByYl9zdHJfdG9fcywgMCk7CiAgICAgcmJfZGVmaW5lX21ldGhvZChyYl9j U3RyaW5nLCAiaW5zcGVjdCIsIHJiX3N0cl9pbnNwZWN0LCAwKTsKKyAgICByYl9kZWZpbmVf bWV0aG9kKHJiX2NTdHJpbmcsICJpbnNwZWN0X2FjY3VtdWxhdGUiLCByYl9zdHJfaW5zcGVj dF9hY2N1bXVsYXRlLCAxKTsKICAgICByYl9kZWZpbmVfbWV0aG9kKHJiX2NTdHJpbmcsICJk dW1wIiwgcmJfc3RyX2R1bXAsIDApOwogCiAgICAgcmJfZGVmaW5lX21ldGhvZChyYl9jU3Ry aW5nLCAidXBjYXNlIiwgcmJfc3RyX3VwY2FzZSwgMCk7Ci0tLSBzdHJ1Y3QuYwkocmV2aXNp b24gMTU1NjApCisrKyBzdHJ1Y3QuYwkod29ya2luZyBjb3B5KQpAQCAtNDc3LDQ1ICs0Nzcs NTkgQEAgcmJfc3RydWN0X2VhY2hfcGFpcihWQUxVRSBzKQogfQogCiBzdGF0aWMgVkFMVUUK LWluc3BlY3Rfc3RydWN0KFZBTFVFIHMsIFZBTFVFIGR1bW15LCBpbnQgcmVjdXIpCitpbnNw ZWN0X3N0cnVjdChWQUxVRSBzLCBWQUxVRSByZXN1bHQsIGludCByZWN1cikKIHsKICAgICBj aGFyICpjbmFtZSA9IHJiX2NsYXNzMm5hbWUocmJfb2JqX2NsYXNzKHMpKTsKLSAgICBWQUxV RSBzdHIsIG1lbWJlcnM7CisgICAgVkFMVUUgbWVtYmVyczsKICAgICBsb25nIGk7CiAKICAg ICBpZiAocmVjdXIpIHsKLQlyZXR1cm4gcmJfc3ByaW50ZigiIzxzdHJ1Y3QgJXM6Li4uPiIs IGNuYW1lKTsKKwlyZXR1cm4gcmJfc3RyX2FwcGVuZChyZXN1bHQsIHJiX3NwcmludGYoIiM8 c3RydWN0ICVzOi4uLj4iLCBjbmFtZSkpOwogICAgIH0KIAogICAgIG1lbWJlcnMgPSByYl9z dHJ1Y3RfbWVtYmVycyhzKTsKICAgICBpZiAoY25hbWVbMF0gPT0gJyMnKSB7Ci0Jc3RyID0g cmJfc3RyX25ldzIoIiM8c3RydWN0ICIpOworCXJiX3N0cl9idWZfY2F0X2FzY2lpKHJlc3Vs dCwgIiM8c3RydWN0ICIpOwogICAgIH0KICAgICBlbHNlIHsKLQlzdHIgPSByYl9zcHJpbnRm KCIjPHN0cnVjdCAlcyAiLCBjbmFtZSk7CisJcmJfc3RyX2FwcGVuZChyZXN1bHQsIHJiX3Nw cmludGYoIiM8c3RydWN0ICVzICIsIGNuYW1lKSk7CiAgICAgfQogICAgIGZvciAoaT0wOyBp PFJTVFJVQ1RfTEVOKHMpOyBpKyspIHsKIAlWQUxVRSBzbG90OwogCUlEIGlkOwogCiAJaWYg KGkgPiAwKSB7Ci0JICAgIHJiX3N0cl9jYXQyKHN0ciwgIiwgIik7CisJICAgIHJiX3N0cl9i dWZfY2F0X2FzY2lpKHJlc3VsdCwgIiwgIik7CiAJfQogCXNsb3QgPSBSQVJSQVlfUFRSKG1l bWJlcnMpW2ldOwogCWlkID0gU1lNMklEKHNsb3QpOwogCWlmIChyYl9pc19sb2NhbF9pZChp ZCkgfHwgcmJfaXNfY29uc3RfaWQoaWQpKSB7Ci0JICAgIHJiX3N0cl9hcHBlbmQoc3RyLCBy Yl9pZDJzdHIoaWQpKTsKKwkgICAgcmJfc3RyX2FwcGVuZChyZXN1bHQsIHJiX2lkMnN0cihp ZCkpOwogCX0KIAllbHNlIHsKLQkgICAgcmJfc3RyX2FwcGVuZChzdHIsIHJiX2luc3BlY3Qo c2xvdCkpOworCSAgICByYl9zdHJfYXBwZW5kKHJlc3VsdCwgcmJfaW5zcGVjdF9hY2N1bXVs YXRlKHNsb3QpKTsKIAl9Ci0JcmJfc3RyX2NhdDIoc3RyLCAiPSIpOwotCXJiX3N0cl9hcHBl bmQoc3RyLCByYl9pbnNwZWN0KFJTVFJVQ1RfUFRSKHMpW2ldKSk7CisJcmJfc3RyX2J1Zl9j YXRfYXNjaWkocmVzdWx0LCAiPSIpOworCXJiX3N0cl9hcHBlbmQocmVzdWx0LCByYl9pbnNw ZWN0X2FjY3VtdWxhdGUoUlNUUlVDVF9QVFIocylbaV0pKTsKICAgICB9Ci0gICAgcmJfc3Ry X2NhdDIoc3RyLCAiPiIpOwotICAgIE9CSl9JTkZFQ1Qoc3RyLCBzKTsKKyAgICByYl9zdHJf YnVmX2NhdF9hc2NpaShyZXN1bHQsICI+Iik7CisgICAgT0JKX0lORkVDVChyZXN1bHQsIHMp OworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIGNhbGwtc2VxOgorICogICBz dHJ1Y3QudG9fcyAgICAgID0+IHN0cmluZworICogICBzdHJ1Y3QuaW5zcGVjdCAgID0+IHN0 cmluZworICoKKyAqIERlc2NyaWJlIHRoZSBjb250ZW50cyBvZiB0aGlzIHN0cnVjdCBpbiBh IHN0cmluZy4KKyAqLwogCi0gICAgcmV0dXJuIHN0cjsKK3N0YXRpYyBWQUxVRQorcmJfc3Ry dWN0X2luc3BlY3RfYWNjdW11bGF0ZShWQUxVRSBzLCBWQUxVRSByZXN1bHQpCit7CisgICAg cmV0dXJuIHJiX2V4ZWNfcmVjdXJzaXZlKGluc3BlY3Rfc3RydWN0LCBzLCByZXN1bHQpOwog fQogCiAvKgpAQCAtNTI5LDcgKzU0Myw3IEBAIGluc3BlY3Rfc3RydWN0KFZBTFVFIHMsIFZB TFVFIGR1bW15LCBpbnQKIHN0YXRpYyBWQUxVRQogcmJfc3RydWN0X2luc3BlY3QoVkFMVUUg cykKIHsKLSAgICByZXR1cm4gcmJfZXhlY19yZWN1cnNpdmUoaW5zcGVjdF9zdHJ1Y3QsIHMs IDApOworICAgIHJldHVybiByYl9zdHJ1Y3RfaW5zcGVjdF9hY2N1bXVsYXRlKHMsIHJiX3N0 cl9idWZfbmV3KDApKTsKIH0KIAogLyoK --------------000908040603080005010700--