From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 31499 invoked by alias); 8 Feb 2009 13:03:51 -0000 Received: (qmail 31487 invoked by uid 22791); 8 Feb 2009 13:03:47 -0000 X-SWARE-Spam-Status: No, hits=-1.2 required=5.0 tests=AWL,BAYES_00,SARE_MSGID_LONG40,SPF_PASS X-Spam-Check-By: sourceware.org Received: from ti-out-0910.google.com (HELO ti-out-0910.google.com) (209.85.142.184) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Sun, 08 Feb 2009 13:03:40 +0000 Received: by ti-out-0910.google.com with SMTP id y8so1407283tia.12 for ; Sun, 08 Feb 2009 05:03:36 -0800 (PST) MIME-Version: 1.0 Received: by 10.110.95.3 with SMTP id s3mr6330752tib.35.1234098216543; Sun, 08 Feb 2009 05:03:36 -0800 (PST) In-Reply-To: References: <200901221324.02225.pedro@codesourcery.com> Date: Sun, 08 Feb 2009 13:03:00 -0000 Message-ID: Subject: Re: [RFA] Submit process record and replay third time, 3/9 From: teawater To: Pedro Alves Cc: gdb-patches@sourceware.org Content-Type: multipart/mixed; boundary=0016e64fcc88d0a576046267e115 X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2009-02/txt/msg00187.txt.bz2 --0016e64fcc88d0a576046267e115 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-length: 179 Hi Pedro, According to your mail "Get rid of linux-thread-db.c:target_beneath". I get ride of this global beneath function pointers. Do you think this patch is OK? Thanks, Hui --0016e64fcc88d0a576046267e115 Content-Type: text/plain; charset=US-ASCII; name="3-record_target.txt" Content-Disposition: attachment; filename="3-record_target.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_fqxq5ltp1 Content-length: 52879 LS0tCiBNYWtlZmlsZS5pbiB8ICAgIDQgCiByZWNvcmQuYyAgICB8IDEyNTkg KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrCiByZWNvcmQuaCAgICB8ICAgODcgKysrKwogMyBm aWxlcyBjaGFuZ2VkLCAxMzQ4IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25z KC0pCgotLS0gYS9NYWtlZmlsZS5pbgorKysgYi9NYWtlZmlsZS5pbgpAQCAt NjYxLDcgKzY2MSw3IEBAIFNGSUxFUyA9IGFkYS1leHAueSBhZGEtbGFuZy5j IGFkYS10eXBlcHIKIAl2YWxhcml0aC5jIHZhbG9wcy5jIHZhbHByaW50LmMg dmFsdWUuYyB2YXJvYmouYyB2ZWMuYyBcCiAJd3JhcHBlci5jIFwKIAl4bWwt dGRlc2MuYyB4bWwtc3VwcG9ydC5jIFwKLQlpbmZlcmlvci5jCisJaW5mZXJp b3IuYyByZWNvcmQuYwogCiBMSU5URklMRVMgPSAkKFNGSUxFUykgJChZWUZJ TEVTKSAkKENPTkZJR19TUkNTKSBpbml0LmMKIApAQCAtODEyLDcgKzgxMiw3 IEBAIENPTU1PTl9PQlMgPSAkKERFUEZJTEVTKSAkKENPTkZJR19PQlMpICQK IAlzb2xpYi5vIHNvbGliLW51bGwubyBcCiAJcHJvbG9ndWUtdmFsdWUubyBt ZW1vcnktbWFwLm8geG1sLXN1cHBvcnQubyBcCiAJdGFyZ2V0LWRlc2NyaXB0 aW9ucy5vIHRhcmdldC1tZW1vcnkubyB4bWwtdGRlc2MubyB4bWwtYnVpbHRp bi5vIFwKLQlpbmZlcmlvci5vIG9zZGF0YS5vCisJaW5mZXJpb3IubyBvc2Rh dGEubyByZWNvcmQubwogCiBUU09CUyA9IGluZmxvdy5vCiAKLS0tIC9kZXYv bnVsbAorKysgYi9yZWNvcmQuYwpAQCAtMCwwICsxLDEyNTkgQEAKKy8qIFBy b2Nlc3MgcmVjb3JkIGFuZCByZXBsYXkgdGFyZ2V0IGZvciBHREIsIHRoZSBH TlUgZGVidWdnZXIuCisKKyAgIENvcHlyaWdodCAoQykgMjAwOCBGcmVlIFNv ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBmaWxlIGlzIHBh cnQgb2YgR0RCLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2Fy ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAg aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2Us IG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor CisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBX QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m CisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhh dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3Qs IHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisj aW5jbHVkZSAiZGVmcy5oIgorI2luY2x1ZGUgInRhcmdldC5oIgorI2luY2x1 ZGUgImdkYmNtZC5oIgorI2luY2x1ZGUgInJlZ2NhY2hlLmgiCisjaW5jbHVk ZSAiaW5mZXJpb3IuaCIKKyNpbmNsdWRlICJnZGJ0aHJlYWQuaCIKKyNpbmNs dWRlICJldmVudC10b3AuaCIKKyNpbmNsdWRlICJhbm5vdGF0ZS5oIgorI2lu Y2x1ZGUgIm9ic2VydmVyLmgiCisjaW5jbHVkZSAicmVjb3JkLmgiCisKKyNp bmNsdWRlIDxzaWduYWwuaD4KKworI2RlZmluZSBERUZBVUxUX1JFQ09SRF9J TlNOX01BWF9OVU0JMjAwMDAwCisKK2ludCByZWNvcmRfZGVidWcgPSAwOwor CityZWNvcmRfdCByZWNvcmRfZmlyc3Q7CityZWNvcmRfdCAqcmVjb3JkX2xp c3QgPSAmcmVjb3JkX2ZpcnN0OworcmVjb3JkX3QgKnJlY29yZF9hcmNoX2xp c3RfaGVhZCA9IE5VTEw7CityZWNvcmRfdCAqcmVjb3JkX2FyY2hfbGlzdF90 YWlsID0gTlVMTDsKK3N0cnVjdCByZWdjYWNoZSAqcmVjb3JkX3JlZ2NhY2hl ID0gTlVMTDsKKworLyogMSBhc2sgdXNlci4gMCBhdXRvIGRlbGV0ZSB0aGUg bGFzdCByZWNvcmRfdC4gICovCitzdGF0aWMgaW50IHJlY29yZF9zdG9wX2F0 X2xpbWl0ID0gMTsKK3N0YXRpYyBpbnQgcmVjb3JkX2luc25fbWF4X251bSA9 IERFRkFVTFRfUkVDT1JEX0lOU05fTUFYX05VTTsKK3N0YXRpYyBpbnQgcmVj b3JkX2luc25fbnVtID0gMDsKKworc3RydWN0IHRhcmdldF9vcHMgcmVjb3Jk X29wczsKK3N0YXRpYyBpbnQgcmVjb3JkX3Jlc3VtZV9zdGVwID0gMDsKK3N0 YXRpYyBlbnVtIHRhcmdldF9zaWduYWwgcmVjb3JkX3Jlc3VtZV9zaWdnbmFs Oworc3RhdGljIGludCByZWNvcmRfZ2V0X3NpZyA9IDA7CitzdGF0aWMgc2ln c2V0X3QgcmVjb3JkX21hc2thbGw7CitzdGF0aWMgaW50IHJlY29yZF9nZGJf b3BlcmF0aW9uX2Rpc2FibGUgPSAwOworaW50IHJlY29yZF93aWxsX3N0b3Jl X3JlZ2lzdGVycyA9IDA7CisKK2V4dGVybiBzdHJ1Y3QgYnBfbG9jYXRpb24g KmJwX2xvY2F0aW9uX2NoYWluOworCisvKiBUaGUgYmVuZWF0aCBmdW5jdGlv biBwb2ludGVycy4gICovCitzdGF0aWMgdm9pZCAoKnJlY29yZF9iZW5lYXRo X3RvX3Jlc3VtZSkgKHB0aWRfdCwgaW50LCBlbnVtIHRhcmdldF9zaWduYWwp ID0KKyAgTlVMTDsKK3N0YXRpYyBwdGlkX3QgKCpyZWNvcmRfYmVuZWF0aF90 b193YWl0KSAoc3RydWN0IHRhcmdldF9vcHMgKiwgcHRpZF90LAorCQkJCQkg c3RydWN0IHRhcmdldF93YWl0c3RhdHVzICopID0gTlVMTDsKK3N0YXRpYyB2 b2lkICgqcmVjb3JkX2JlbmVhdGhfdG9fc3RvcmVfcmVnaXN0ZXJzKSAoc3Ry dWN0IHJlZ2NhY2hlICosCisJCQkJCQkgIGludCByZWdubykgPSBOVUxMOwor c3RhdGljIExPTkdFU1QgKCpyZWNvcmRfYmVuZWF0aF90b194ZmVyX3BhcnRp YWwpIChzdHJ1Y3QgdGFyZ2V0X29wcyAqIG9wcywKKwkJCQkJCSAgZW51bSB0 YXJnZXRfb2JqZWN0IG9iamVjdCwKKwkJCQkJCSAgY29uc3QgY2hhciAqYW5u ZXgsCisJCQkJCQkgIGdkYl9ieXRlICogcmVhZGJ1ZiwKKwkJCQkJCSAgY29u c3QgZ2RiX2J5dGUgKiB3cml0ZWJ1ZiwKKwkJCQkJCSAgVUxPTkdFU1Qgb2Zm c2V0LAorCQkJCQkJICBMT05HRVNUIGxlbikgPSBOVUxMOworc3RhdGljIGlu dCAoKnJlY29yZF9iZW5lYXRoX3RvX2luc2VydF9icmVha3BvaW50KSAoc3Ry dWN0IGJwX3RhcmdldF9pbmZvICopID0KKyAgTlVMTDsKK3N0YXRpYyBpbnQg KCpyZWNvcmRfYmVuZWF0aF90b19yZW1vdmVfYnJlYWtwb2ludCkgKHN0cnVj dCBicF90YXJnZXRfaW5mbyAqKSA9CisgIE5VTEw7CisKK3N0YXRpYyB2b2lk CityZWNvcmRfbGlzdF9yZWxlYXNlIChyZWNvcmRfdCAqIHJlYykKK3sKKyAg cmVjb3JkX3QgKnRtcDsKKworICBpZiAoIXJlYykKKyAgICByZXR1cm47CisK KyAgd2hpbGUgKHJlYy0+bmV4dCkKKyAgICB7CisgICAgICByZWMgPSByZWMt Pm5leHQ7CisgICAgfQorCisgIHdoaWxlIChyZWMtPnByZXYpCisgICAgewor ICAgICAgdG1wID0gcmVjOworICAgICAgcmVjID0gcmVjLT5wcmV2OworICAg ICAgaWYgKHRtcC0+dHlwZSA9PSByZWNvcmRfcmVnKQorCXhmcmVlICh0bXAt PnUucmVnLnZhbCk7CisgICAgICBlbHNlIGlmICh0bXAtPnR5cGUgPT0gcmVj b3JkX21lbSkKKwl4ZnJlZSAodG1wLT51Lm1lbS52YWwpOworICAgICAgeGZy ZWUgKHRtcCk7CisgICAgfQorCisgIGlmIChyZWMgIT0gJnJlY29yZF9maXJz dCkKKyAgICB4ZnJlZSAocmVjKTsKK30KKworc3RhdGljIHZvaWQKK3JlY29y ZF9saXN0X3JlbGVhc2VfbmV4dCAodm9pZCkKK3sKKyAgcmVjb3JkX3QgKnJl YyA9IHJlY29yZF9saXN0OworICByZWNvcmRfdCAqdG1wID0gcmVjLT5uZXh0 OworICByZWMtPm5leHQgPSBOVUxMOworICB3aGlsZSAodG1wKQorICAgIHsK KyAgICAgIHJlYyA9IHRtcC0+bmV4dDsKKyAgICAgIGlmICh0bXAtPnR5cGUg PT0gcmVjb3JkX3JlZykKKwlyZWNvcmRfaW5zbl9udW0tLTsKKyAgICAgIGVs c2UgaWYgKHRtcC0+dHlwZSA9PSByZWNvcmRfcmVnKQorCXhmcmVlICh0bXAt PnUucmVnLnZhbCk7CisgICAgICBlbHNlIGlmICh0bXAtPnR5cGUgPT0gcmVj b3JkX21lbSkKKwl4ZnJlZSAodG1wLT51Lm1lbS52YWwpOworICAgICAgeGZy ZWUgKHRtcCk7CisgICAgICB0bXAgPSByZWM7CisgICAgfQorfQorCitzdGF0 aWMgdm9pZAorcmVjb3JkX2xpc3RfcmVsZWFzZV9maXJzdCAodm9pZCkKK3sK KyAgcmVjb3JkX3QgKnRtcCA9IE5VTEw7CisgIGVudW0gcmVjb3JkX3R5cGUg dHlwZTsKKworICBpZiAoIXJlY29yZF9maXJzdC5uZXh0KQorICAgIHJldHVy bjsKKworICB3aGlsZSAoMSkKKyAgICB7CisgICAgICB0eXBlID0gcmVjb3Jk X2ZpcnN0Lm5leHQtPnR5cGU7CisKKyAgICAgIGlmICh0eXBlID09IHJlY29y ZF9yZWcpCisJeGZyZWUgKHJlY29yZF9maXJzdC5uZXh0LT51LnJlZy52YWwp OworICAgICAgZWxzZSBpZiAodHlwZSA9PSByZWNvcmRfbWVtKQorCXhmcmVl IChyZWNvcmRfZmlyc3QubmV4dC0+dS5tZW0udmFsKTsKKyAgICAgIHRtcCA9 IHJlY29yZF9maXJzdC5uZXh0OworICAgICAgcmVjb3JkX2ZpcnN0Lm5leHQg PSB0bXAtPm5leHQ7CisgICAgICB4ZnJlZSAodG1wKTsKKworICAgICAgaWYg KCFyZWNvcmRfZmlyc3QubmV4dCkKKwl7CisJICBnZGJfYXNzZXJ0IChyZWNv cmRfaW5zbl9udW0gPT0gMSk7CisJICBicmVhazsKKwl9CisKKyAgICAgIHJl Y29yZF9maXJzdC5uZXh0LT5wcmV2ID0gJnJlY29yZF9maXJzdDsKKworICAg ICAgaWYgKHR5cGUgPT0gcmVjb3JkX2VuZCkKKwlicmVhazsKKyAgICB9CisK KyAgcmVjb3JkX2luc25fbnVtLS07Cit9CisKKy8qIEFkZCBhIHJlY29yZF90 IHRvIHJlY29yZF9hcmNoX2xpc3QuICAqLworc3RhdGljIHZvaWQKK3JlY29y ZF9hcmNoX2xpc3RfYWRkIChyZWNvcmRfdCAqIHJlYykKK3sKKyAgaWYgKHJl Y29yZF9kZWJ1ZyA+IDEpCisgICAgZnByaW50Zl91bmZpbHRlcmVkIChnZGJf c3RkbG9nLAorCQkJIlByb2Nlc3MgcmVjb3JkOiByZWNvcmRfYXJjaF9saXN0 X2FkZCAlcy5cbiIsCisJCQlob3N0X2FkZHJlc3NfdG9fc3RyaW5nIChyZWMp KTsKKworICBpZiAocmVjb3JkX2FyY2hfbGlzdF90YWlsKQorICAgIHsKKyAg ICAgIHJlY29yZF9hcmNoX2xpc3RfdGFpbC0+bmV4dCA9IHJlYzsKKyAgICAg IHJlYy0+cHJldiA9IHJlY29yZF9hcmNoX2xpc3RfdGFpbDsKKyAgICAgIHJl Y29yZF9hcmNoX2xpc3RfdGFpbCA9IHJlYzsKKyAgICB9CisgIGVsc2UKKyAg ICB7CisgICAgICByZWNvcmRfYXJjaF9saXN0X2hlYWQgPSByZWM7CisgICAg ICByZWNvcmRfYXJjaF9saXN0X3RhaWwgPSByZWM7CisgICAgfQorfQorCisv KiBSZWNvcmQgdGhlIHZhbHVlIG9mIGEgcmVnaXN0ZXIgKCJudW0iKSB0byBy ZWNvcmRfYXJjaF9saXN0LiAgKi8KK2ludAorcmVjb3JkX2FyY2hfbGlzdF9h ZGRfcmVnIChpbnQgbnVtKQoreworICByZWNvcmRfdCAqcmVjOworCisgIGlm IChyZWNvcmRfZGVidWcgPiAxKQorICAgIGZwcmludGZfdW5maWx0ZXJlZCAo Z2RiX3N0ZGxvZywKKwkJCSJQcm9jZXNzIHJlY29yZDogYWRkIHJlZ2lzdGVy IG51bSA9ICVkIHRvICIKKwkJCSJyZWNvcmQgbGlzdC5cbiIsCisJCQludW0p OworCisgIHJlYyA9IChyZWNvcmRfdCAqKSB4bWFsbG9jIChzaXplb2YgKHJl Y29yZF90KSk7CisgIHJlYy0+dS5yZWcudmFsID0gKGdkYl9ieXRlICopIHht YWxsb2MgKE1BWF9SRUdJU1RFUl9TSVpFKTsKKyAgcmVjLT5wcmV2ID0gTlVM TDsKKyAgcmVjLT5uZXh0ID0gTlVMTDsKKyAgcmVjLT50eXBlID0gcmVjb3Jk X3JlZzsKKyAgcmVjLT51LnJlZy5udW0gPSBudW07CisKKyAgcmVnY2FjaGVf cmF3X3JlYWQgKHJlY29yZF9yZWdjYWNoZSwgbnVtLCByZWMtPnUucmVnLnZh bCk7CisKKyAgcmVjb3JkX2FyY2hfbGlzdF9hZGQgKHJlYyk7CisKKyAgcmV0 dXJuIDA7Cit9CisKKy8qIFJlY29yZCB0aGUgdmFsdWUgb2YgYSByZWdpb24g b2YgbWVtb3J5IHdob3NlIGFkZHJlc3MgaXMgImFkZHIiIGFuZAorICAgbGVu Z3RoIGlzICJsZW4iIHRvIHJlY29yZF9hcmNoX2xpc3QuICAqLworCitpbnQK K3JlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoQ09SRV9BRERSIGFkZHIsIGlu dCBsZW4pCit7CisgIHJlY29yZF90ICpyZWM7CisKKyAgaWYgKHJlY29yZF9k ZWJ1ZyA+IDEpCisgICAgZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9n LAorCQkJIlByb2Nlc3MgcmVjb3JkOiBhZGQgbWVtIGFkZHIgPSAweCVzIGxl biA9ICVkIHRvICIKKwkJCSJyZWNvcmQgbGlzdC5cbiIsCisJCQlwYWRkcl9u eiAoYWRkciksIGxlbik7CisKKyAgaWYgKCFhZGRyKQorICAgIHJldHVybiAw OworCisgIHJlYyA9IChyZWNvcmRfdCAqKSB4bWFsbG9jIChzaXplb2YgKHJl Y29yZF90KSk7CisgIHJlYy0+dS5tZW0udmFsID0gKGdkYl9ieXRlICopIHht YWxsb2MgKGxlbik7CisgIHJlYy0+cHJldiA9IE5VTEw7CisgIHJlYy0+bmV4 dCA9IE5VTEw7CisgIHJlYy0+dHlwZSA9IHJlY29yZF9tZW07CisgIHJlYy0+ dS5tZW0uYWRkciA9IGFkZHI7CisgIHJlYy0+dS5tZW0ubGVuID0gbGVuOwor CisgIGlmICh0YXJnZXRfcmVhZF9tZW1vcnkgKGFkZHIsIHJlYy0+dS5tZW0u dmFsLCBsZW4pKQorICAgIHsKKyAgICAgIGlmIChyZWNvcmRfZGVidWcpCisJ ZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLAorCQkJICAgICJQcm9j ZXNzIHJlY29yZDogZXJyb3IgcmVhZGluZyBtZW1vcnkgYXQgIgorCQkJICAg ICJhZGRyID0gMHglcyBsZW4gPSAlZC5cbiIsCisJCQkgICAgcGFkZHJfbnog KGFkZHIpLCBsZW4pOworICAgICAgeGZyZWUgKHJlYy0+dS5tZW0udmFsKTsK KyAgICAgIHhmcmVlIChyZWMpOworICAgICAgcmV0dXJuIC0xOworICAgIH0K KworICByZWNvcmRfYXJjaF9saXN0X2FkZCAocmVjKTsKKworICByZXR1cm4g MDsKK30KKworLyogQWRkIGEgcmVjb3JkX2VuZCB0eXBlIHJlY29yZF90IHRv IHJlY29yZF9hcmNoX2xpc3QuICAqLworaW50CityZWNvcmRfYXJjaF9saXN0 X2FkZF9lbmQgKGludCBuZWVkX2Rhc20pCit7CisgIHJlY29yZF90ICpyZWM7 CisKKyAgaWYgKHJlY29yZF9kZWJ1ZyA+IDEpCisgICAgZnByaW50Zl91bmZp bHRlcmVkIChnZGJfc3RkbG9nLAorCQkJIlByb2Nlc3MgcmVjb3JkOiBhZGQg ZW5kIG5lZWRfZGFzbSA9ICVkIHRvICIKKwkJCSJhcmNoIGxpc3QuXG4iLAor CQkJbmVlZF9kYXNtKTsKKworICByZWMgPSAocmVjb3JkX3QgKikgeG1hbGxv YyAoc2l6ZW9mIChyZWNvcmRfdCkpOworICByZWMtPnByZXYgPSBOVUxMOwor ICByZWMtPm5leHQgPSBOVUxMOworICByZWMtPnR5cGUgPSByZWNvcmRfZW5k OworCisgIHJlYy0+dS5uZWVkX2Rhc20gPSBuZWVkX2Rhc207CisKKyAgcmVj b3JkX2FyY2hfbGlzdF9hZGQgKHJlYyk7CisKKyAgcmV0dXJuIDA7Cit9CisK K3N0YXRpYyB2b2lkCityZWNvcmRfY2hlY2tfaW5zbl9udW0gKGludCBzZXRf dGVybWluYWwpCit7CisgIGlmIChyZWNvcmRfaW5zbl9tYXhfbnVtKQorICAg IHsKKyAgICAgIGdkYl9hc3NlcnQgKHJlY29yZF9pbnNuX251bSA8PSByZWNv cmRfaW5zbl9tYXhfbnVtKTsKKyAgICAgIGlmIChyZWNvcmRfaW5zbl9udW0g PT0gcmVjb3JkX2luc25fbWF4X251bSkKKwl7CisJICAvKiBBc2sgdXNlciB3 aGF0IHRvIGRvLiAgKi8KKwkgIGlmIChyZWNvcmRfc3RvcF9hdF9saW1pdCkK KwkgICAgeworCSAgICAgIGludCBxOworCSAgICAgIGlmIChzZXRfdGVybWlu YWwpCisJCXRhcmdldF90ZXJtaW5hbF9vdXJzICgpOworCSAgICAgIHEgPSB5 cXVlcnkgKF8oIkRvIHlvdSB3YW50IHRvIGF1dG8gZGVsZXRlIHByZXZpb3Vz IGV4ZWN1dGlvbiAiCisJCQkgICAgImxvZyBlbnRyaWVzIHdoZW4gcmVjb3Jk L3JlcGxheSBidWZmZXIgYmVjb21lcyAiCisJCQkgICAgImZ1bGwgKHJlY29y ZC1zdG9wLWF0LWxpbWl0KT8iKSk7CisJICAgICAgaWYgKHNldF90ZXJtaW5h bCkKKwkJdGFyZ2V0X3Rlcm1pbmFsX2luZmVyaW9yICgpOworCSAgICAgIGlm IChxKQorCQlyZWNvcmRfc3RvcF9hdF9saW1pdCA9IDA7CisJICAgICAgZWxz ZQorCQllcnJvciAoXygiUHJvY2VzcyByZWNvcmQ6IGluZmVyaW9yIHByb2dy YW0gc3RvcHBlZC4iKSk7CisJICAgIH0KKwl9CisgICAgfQorfQorCitzdGF0 aWMgdm9pZAorcmVjb3JkX25vcm1hbF9zdG9wICh2b2lkKQoreworICBmaW5p c2hfdGhyZWFkX3N0YXRlIChtaW51c19vbmVfcHRpZCk7CisKKyAgaWYgKCFi cmVha3BvaW50c19hbHdheXNfaW5zZXJ0ZWRfbW9kZSAoKSAmJiB0YXJnZXRf aGFzX2V4ZWN1dGlvbikKKyAgICByZW1vdmVfYnJlYWtwb2ludHMgKCk7CisK KyAgdGFyZ2V0X3Rlcm1pbmFsX291cnMgKCk7CisKKyAgaWYgKHRhcmdldF9o YXNfc3RhY2sgJiYgIXN0b3Bfc3RhY2tfZHVtbXkpCisgICAgc2V0X2N1cnJl bnRfc2FsX2Zyb21fZnJhbWUgKGdldF9jdXJyZW50X2ZyYW1lICgpLCAxKTsK KworICBzZWxlY3RfZnJhbWUgKGdldF9jdXJyZW50X2ZyYW1lICgpKTsKKwor ICBhbm5vdGF0ZV9zdG9wcGVkICgpOworICBpZiAoIXN1cHByZXNzX3N0b3Bf b2JzZXJ2ZXIpCisgICAgeworICAgICAgaWYgKCFwdGlkX2VxdWFsIChpbmZl cmlvcl9wdGlkLCBudWxsX3B0aWQpKQorCW9ic2VydmVyX25vdGlmeV9ub3Jt YWxfc3RvcCAoaW5mZXJpb3JfdGhyZWFkICgpLT5zdG9wX2Jwc3RhdCk7Cisg ICAgICBlbHNlCisJb2JzZXJ2ZXJfbm90aWZ5X25vcm1hbF9zdG9wIChOVUxM KTsKKyAgICB9Cit9CisKKy8qIEJlZm9yZSBpbmZlcmlvciBzdGVwICh3aGVu IEdEQiByZWNvcmQgdGhlIHJ1bm5pbmcgbWVzc2FnZSwgaW5mZXJpb3IKKyAg IG9ubHkgY2FuIHN0ZXApLCBHREIgd2lsbCBjYWxsIHRoaXMgZnVuY3Rpb24g dG8gcmVjb3JkIHRoZSB2YWx1ZXMgdG8KKyAgIHJlY29yZF9saXN0LiAgVGhp cyBmdW5jdGlvbiB3aWxsIGNhbGwgZ2RiYXJjaF9wcm9jZXNzX3JlY29yZCB0 bworICAgcmVjb3JkIHRoZSBydW5uaW5nIG1lc3NhZ2Ugb2YgaW5mZXJpb3Ig YW5kIHNldCB0aGVtIHRvCisgICByZWNvcmRfYXJjaF9saXN0LCBhbmQgYWRk IGl0IHRvIHJlY29yZF9saXN0LiAgKi8KKworc3RhdGljIHZvaWQKK3JlY29y ZF9tZXNzYWdlX2NsZWFudXBzICh2b2lkICppZ25vcmUpCit7CisgIHJlY29y ZF9saXN0X3JlbGVhc2UgKHJlY29yZF9hcmNoX2xpc3RfdGFpbCk7CisgIHNl dF9leGVjdXRpbmcgKGluZmVyaW9yX3B0aWQsIDApOworICByZWNvcmRfbm9y bWFsX3N0b3AgKCk7Cit9CisKK3ZvaWQKK3JlY29yZF9tZXNzYWdlIChzdHJ1 Y3QgZ2RiYXJjaCAqZ2RiYXJjaCkKK3sKKyAgaW50IHJldDsKKyAgc3RydWN0 IGNsZWFudXAgKm9sZF9jbGVhbnVwcyA9IG1ha2VfY2xlYW51cCAocmVjb3Jk X21lc3NhZ2VfY2xlYW51cHMsIDApOworCisgIHJlY29yZF9hcmNoX2xpc3Rf aGVhZCA9IE5VTEw7CisgIHJlY29yZF9hcmNoX2xpc3RfdGFpbCA9IE5VTEw7 CisKKyAgLyogQ2hlY2sgcmVjb3JkX2luc25fbnVtLiAgKi8KKyAgcmVjb3Jk X2NoZWNrX2luc25fbnVtICgxKTsKKworICByZWNvcmRfcmVnY2FjaGUgPSBn ZXRfY3VycmVudF9yZWdjYWNoZSAoKTsKKworICByZXQgPSBnZGJhcmNoX3By b2Nlc3NfcmVjb3JkIChnZGJhcmNoLAorCQkJCXJlZ2NhY2hlX3JlYWRfcGMg KHJlY29yZF9yZWdjYWNoZSkpOworICBpZiAocmV0ID4gMCkKKyAgICBlcnJv ciAoXygiUHJvY2VzcyByZWNvcmQ6IGluZmVyaW9yIHByb2dyYW0gc3RvcHBl ZC4iKSk7CisgIGlmIChyZXQgPCAwKQorICAgIGVycm9yIChfKCJQcm9jZXNz IHJlY29yZDogZmFpbGVkIHRvIHJlY29yZCBleGVjdXRpb24gbG9nLiIpKTsK KworICBkaXNjYXJkX2NsZWFudXBzIChvbGRfY2xlYW51cHMpOworCisgIHJl Y29yZF9saXN0LT5uZXh0ID0gcmVjb3JkX2FyY2hfbGlzdF9oZWFkOworICBy ZWNvcmRfYXJjaF9saXN0X2hlYWQtPnByZXYgPSByZWNvcmRfbGlzdDsKKyAg cmVjb3JkX2xpc3QgPSByZWNvcmRfYXJjaF9saXN0X3RhaWw7CisKKyAgaWYg KHJlY29yZF9pbnNuX251bSA9PSByZWNvcmRfaW5zbl9tYXhfbnVtICYmIHJl Y29yZF9pbnNuX21heF9udW0pCisgICAgcmVjb3JkX2xpc3RfcmVsZWFzZV9m aXJzdCAoKTsKKyAgZWxzZQorICAgIHJlY29yZF9pbnNuX251bSsrOworfQor CisvKiBUaGluZ3MgdG8gY2xlYW4gdXAgaWYgd2UgZXJyb3Igb3IgUVVJVCBv dXQgb2YgZnVuY3Rpb24gdGhhdCBzZXQKKyAgIHJlY29yZF9nZGJfb3BlcmF0 aW9uX2Rpc2FibGUgKGllLiBjb21tYW5kIHRoYXQgY2F1c2VkIHRhcmdldF93 YWl0IHRvIGJlIGNhbGxlZCkuICAqLworc3RhdGljIHZvaWQKK3JlY29yZF9n ZGJfb3BlcmF0aW9uX2Rpc2FibGVfY2xlYW51cHMgKHZvaWQgKmlnbm9yZSkK K3sKKyAgcmVjb3JkX2dkYl9vcGVyYXRpb25fZGlzYWJsZSA9IDA7Cit9CisK K3N0cnVjdCBjbGVhbnVwICoKK3JlY29yZF9nZGJfb3BlcmF0aW9uX2Rpc2Fi bGVfc2V0ICh2b2lkKQoreworICBzdHJ1Y3QgY2xlYW51cCAqb2xkX2NsZWFu dXBzID0gbWFrZV9jbGVhbnVwIChyZWNvcmRfZ2RiX29wZXJhdGlvbl9kaXNh YmxlX2NsZWFudXBzLCAwKTsKKyAgcmVjb3JkX2dkYl9vcGVyYXRpb25fZGlz YWJsZSA9IDE7CisKKyAgcmV0dXJuIG9sZF9jbGVhbnVwczsKK30KKworc3Rh dGljIHZvaWQKK3JlY29yZF9vcGVuIChjaGFyICpuYW1lLCBpbnQgZnJvbV90 dHkpCit7CisgIHN0cnVjdCB0YXJnZXRfb3BzICp0OworCisgIGlmIChyZWNv cmRfZGVidWcpCisgICAgZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9n LCAiUHJvY2VzcyByZWNvcmQ6IHJlY29yZF9vcGVuXG4iKTsKKworICAvKiBj aGVjayBleGVjICovCisgIGlmICghdGFyZ2V0X2hhc19leGVjdXRpb24pCisg ICAgZXJyb3IgKF8oIlByb2Nlc3MgcmVjb3JkOiB0aGUgcHJvZ3JhbSBpcyBu b3QgYmVpbmcgcnVuLiIpKTsKKyAgaWYgKG5vbl9zdG9wKQorICAgIGVycm9y IChfKCJQcm9jZXNzIHJlY29yZCB0YXJnZXQgY2FuJ3QgZGVidWcgaW5mZXJp b3IgaW4gbm9uLXN0b3AgbW9kZSAiCisJICAgICAiKG5vbi1zdG9wKS4iKSk7 CisgIGlmICh0YXJnZXRfYXN5bmNfcGVybWl0dGVkKQorICAgIGVycm9yIChf KCJQcm9jZXNzIHJlY29yZCB0YXJnZXQgY2FuJ3QgZGVidWcgaW5mZXJpb3Ig aW4gYXN5bmNocm9ub3VzICIKKwkgICAgICJtb2RlICh0YXJnZXQtYXN5bmMp LiIpKTsKKworICBpZiAoIWdkYmFyY2hfcHJvY2Vzc19yZWNvcmRfcCAoY3Vy cmVudF9nZGJhcmNoKSkKKyAgICBlcnJvciAoXygiUHJvY2VzcyByZWNvcmQ6 IHRoZSBjdXJyZW50IGFyY2hpdGVjdHVyZSBkb2Vzbid0IHN1cHBvcnQgIgor CSAgICAgInJlY29yZCBmdW5jdGlvbi4iKSk7CisKKyAgLyogQ2hlY2sgaWYg cmVjb3JkIHRhcmdldCBpcyBhbHJlYWR5IHJ1bm5pbmcuICAqLworICBpZiAo VEFSR0VUX0lTX1BST0NFU1NfUkVDT1JEKQorICAgIHsKKyAgICAgIGlmICgh bnF1ZXJ5CisJICAoXygiUHJvY2VzcyByZWNvcmQgdGFyZ2V0IGFscmVhZHkg cnVubmluZywgZG8geW91IHdhbnQgdG8gZGVsZXRlICIKKwkgICAgICJ0aGUg b2xkIHJlY29yZCBsb2c/IikpKQorCXJldHVybjsKKyAgICB9CisKKyAgLyog U2V0IHRoZSBiZW5lYXRoIGZ1bmN0aW9uIHBvaW50ZXJzLiAgKi8KKyAgZm9y ICh0ID0gY3VycmVudF90YXJnZXQuYmVuZWF0aDsgdCAhPSBOVUxMOyB0ID0g dC0+YmVuZWF0aCkKKyAgICB7CisgICAgICBpZiAoIXJlY29yZF9iZW5lYXRo X3RvX3Jlc3VtZSkKKwlyZWNvcmRfYmVuZWF0aF90b19yZXN1bWUgPSB0LT50 b19yZXN1bWU7CisgICAgICBpZiAoIXJlY29yZF9iZW5lYXRoX3RvX3dhaXQp CisJcmVjb3JkX2JlbmVhdGhfdG9fd2FpdCA9IHQtPnRvX3dhaXQ7CisgICAg ICBpZiAoIXJlY29yZF9iZW5lYXRoX3RvX3N0b3JlX3JlZ2lzdGVycykKKwly ZWNvcmRfYmVuZWF0aF90b19zdG9yZV9yZWdpc3RlcnMgPSB0LT50b19zdG9y ZV9yZWdpc3RlcnM7CisgICAgICBpZiAoIXJlY29yZF9iZW5lYXRoX3RvX3hm ZXJfcGFydGlhbCkKKwlyZWNvcmRfYmVuZWF0aF90b194ZmVyX3BhcnRpYWwg PSB0LT50b194ZmVyX3BhcnRpYWw7CisgICAgICBpZiAoIXJlY29yZF9iZW5l YXRoX3RvX2luc2VydF9icmVha3BvaW50KQorCXJlY29yZF9iZW5lYXRoX3Rv X2luc2VydF9icmVha3BvaW50ID0gdC0+dG9faW5zZXJ0X2JyZWFrcG9pbnQ7 CisgICAgICBpZiAoIXJlY29yZF9iZW5lYXRoX3RvX3JlbW92ZV9icmVha3Bv aW50KQorCXJlY29yZF9iZW5lYXRoX3RvX3JlbW92ZV9icmVha3BvaW50ID0g dC0+dG9fcmVtb3ZlX2JyZWFrcG9pbnQ7CisgICAgfQorICBpZiAoIXJlY29y ZF9iZW5lYXRoX3RvX3Jlc3VtZSkKKyAgICBlcnJvciAoXygiUHJvY2VzcyBy ZWNvcmQgY2FuJ3QgZ2V0IHRvX3Jlc3VtZS4iKSk7CisgIGlmICghcmVjb3Jk X2JlbmVhdGhfdG9fd2FpdCkKKyAgICBlcnJvciAoXygiUHJvY2VzcyByZWNv cmQgY2FuJ3QgZ2V0IHRvX3dhaXQuIikpOworICBpZiAoIXJlY29yZF9iZW5l YXRoX3RvX3N0b3JlX3JlZ2lzdGVycykKKyAgICBlcnJvciAoXygiUHJvY2Vz cyByZWNvcmQgY2FuJ3QgZ2V0IHRvX3N0b3JlX3JlZ2lzdGVycy4iKSk7Cisg IGlmICghcmVjb3JkX2JlbmVhdGhfdG9feGZlcl9wYXJ0aWFsKQorICAgIGVy cm9yIChfKCJQcm9jZXNzIHJlY29yZCBjYW4ndCBnZXQgdG9feGZlcl9wYXJ0 aWFsLiIpKTsKKyAgaWYgKCFyZWNvcmRfYmVuZWF0aF90b19pbnNlcnRfYnJl YWtwb2ludCkKKyAgICBlcnJvciAoXygiUHJvY2VzcyByZWNvcmQgY2FuJ3Qg Z2V0IHRvX2luc2VydF9icmVha3BvaW50LiIpKTsKKyAgaWYgKCFyZWNvcmRf YmVuZWF0aF90b19yZW1vdmVfYnJlYWtwb2ludCkKKyAgICBlcnJvciAoXygi UHJvY2VzcyByZWNvcmQgY2FuJ3QgZ2V0IHRvX3JlbW92ZV9icmVha3BvaW50 LiIpKTsKKworICBwdXNoX3RhcmdldCAoJnJlY29yZF9vcHMpOworCisgIC8q IFJlc2V0ICovCisgIHJlY29yZF9pbnNuX251bSA9IDA7CisgIHJlY29yZF9s aXN0ID0gJnJlY29yZF9maXJzdDsKKyAgcmVjb3JkX2xpc3QtPm5leHQgPSBO VUxMOworfQorCitzdGF0aWMgdm9pZAorcmVjb3JkX2Nsb3NlIChpbnQgcXVp dHRpbmcpCit7CisgIGlmIChyZWNvcmRfZGVidWcpCisgICAgZnByaW50Zl91 bmZpbHRlcmVkIChnZGJfc3RkbG9nLCAiUHJvY2VzcyByZWNvcmQ6IHJlY29y ZF9jbG9zZVxuIik7CisKKyAgcmVjb3JkX2xpc3RfcmVsZWFzZSAocmVjb3Jk X2xpc3QpOworfQorCitzdGF0aWMgdm9pZAorcmVjb3JkX3Jlc3VtZSAocHRp ZF90IHB0aWQsIGludCBzdGVwLCBlbnVtIHRhcmdldF9zaWduYWwgc2lnZ25h bCkKK3sKKyAgcmVjb3JkX3Jlc3VtZV9zdGVwID0gc3RlcDsKKyAgcmVjb3Jk X3Jlc3VtZV9zaWdnbmFsID0gc2lnZ25hbDsKKworICBpZiAoIVJFQ09SRF9J U19SRVBMQVkpCisgICAgeworICAgICAgcmVjb3JkX21lc3NhZ2UgKGN1cnJl bnRfZ2RiYXJjaCk7CisgICAgICByZWNvcmRfYmVuZWF0aF90b19yZXN1bWUg KHB0aWQsIDEsIHNpZ2duYWwpOworICAgIH0KK30KKworc3RhdGljIHZvaWQK K3JlY29yZF9zaWdfaGFuZGxlciAoaW50IHNpZ25vKQoreworICBpZiAocmVj b3JkX2RlYnVnKQorICAgIGZwcmludGZfdW5maWx0ZXJlZCAoZ2RiX3N0ZGxv ZywgIlByb2Nlc3MgcmVjb3JkOiBnZXQgYSBzaWduYWxcbiIpOworCisgIHJl Y29yZF9yZXN1bWVfc3RlcCA9IDE7CisgIHJlY29yZF9nZXRfc2lnID0gMTsK K30KKworc3RhdGljIHZvaWQKK3JlY29yZF93YWl0X2NsZWFudXBzICh2b2lk ICppZ25vcmUpCit7CisgIGlmIChleGVjdXRpb25fZGlyZWN0aW9uID09IEVY RUNfUkVWRVJTRSkKKyAgICB7CisgICAgICBpZiAocmVjb3JkX2xpc3QtPm5l eHQpCisJcmVjb3JkX2xpc3QgPSByZWNvcmRfbGlzdC0+bmV4dDsKKyAgICB9 CisgIGVsc2UKKyAgICByZWNvcmRfbGlzdCA9IHJlY29yZF9saXN0LT5wcmV2 OworCisgIHNldF9leGVjdXRpbmcgKGluZmVyaW9yX3B0aWQsIDApOworICBy ZWNvcmRfbm9ybWFsX3N0b3AgKCk7Cit9CisKKy8qIHJlY29yZF93YWl0Cisg ICBJbiByZXBsYXkgbW9kZSwgdGhpcyBmdW5jdGlvbiBleGFtaW5lcyB0aGUg cmVjb3JkZWQgbG9nIGFuZAorICAgZGV0ZXJtaW5lcyB3aGVyZSB0byBzdG9w LiAgKi8KKworc3RhdGljIHB0aWRfdAorcmVjb3JkX3dhaXQgKHN0cnVjdCB0 YXJnZXRfb3BzICpvcHMsCisgICAgICAgICAgICAgIHB0aWRfdCBwdGlkLCBz dHJ1Y3QgdGFyZ2V0X3dhaXRzdGF0dXMgKnN0YXR1cykKK3sKKyAgc3RydWN0 IGNsZWFudXAgKnNldF9jbGVhbnVwcyA9IHJlY29yZF9nZGJfb3BlcmF0aW9u X2Rpc2FibGVfc2V0ICgpOworCisgIGlmIChyZWNvcmRfZGVidWcpCisgICAg ZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLAorCQkJIlByb2Nlc3Mg cmVjb3JkOiByZWNvcmRfd2FpdCAiCisJCQkicmVjb3JkX3Jlc3VtZV9zdGVw ID0gJWRcbiIsCisJCQlyZWNvcmRfcmVzdW1lX3N0ZXApOworCisgIGlmICgh UkVDT1JEX0lTX1JFUExBWSkKKyAgICB7CisgICAgICBpZiAocmVjb3JkX3Jl c3VtZV9zdGVwKQorCXsKKwkgIC8qIFRoaXMgaXMgYSBzaW5nbGUgc3RlcC4g ICovCisJICByZXR1cm4gcmVjb3JkX2JlbmVhdGhfdG9fd2FpdCAoZmluZF90 YXJnZXRfYmVuZWF0aCAob3BzKSwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0aWQsIHN0YXR1cyk7 CisJfQorICAgICAgZWxzZQorCXsKKwkgIGlmIChyZWNvcmRfcmVzdW1lX3N0 ZXApCisJICAgIHsKKwkgICAgICAvKiBUaGlzIGlzIGEgc2luZ2xlIHN0ZXAu ICAqLworCSAgICAgIHJldHVybiByZWNvcmRfYmVuZWF0aF90b193YWl0IChm aW5kX3RhcmdldF9iZW5lYXRoIChvcHMpLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0aWQs IHN0YXR1cyk7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgeworCSAgICAgIC8q IFRoaXMgaXMgbm90IGEgc2luZ2xlIHN0ZXAuICAqLworCSAgICAgIHB0aWRf dCByZXQ7CisJICAgICAgaW50IGlzX2JyZWFrcG9pbnQgPSAxOworCSAgICAg IENPUkVfQUREUiBwYyA9IDA7CisJICAgICAgaW50IHBjX2lzX3JlYWQgPSAw OworCSAgICAgIHN0cnVjdCBicF9sb2NhdGlvbiAqYmw7CisJICAgICAgc3Ry dWN0IGJyZWFrcG9pbnQgKmI7CisKKwkgICAgICBkbworCQl7CisJCSAgcmV0 ID0gcmVjb3JkX2JlbmVhdGhfdG9fd2FpdCAoZmluZF90YXJnZXRfYmVuZWF0 aCAob3BzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHB0aWQsIHN0YXR1cyk7CisKKwkJ ICBpZiAoc3RhdHVzLT5raW5kID09IFRBUkdFVF9XQUlUS0lORF9TVE9QUEVE CisJCSAgICAgICYmIHN0YXR1cy0+dmFsdWUuc2lnID09IFRBUkdFVF9TSUdO QUxfVFJBUCkKKwkJICAgIHsKKwkJICAgICAgLyogQ2hlY2sgaWYgdGhlcmUg aXMgYSBicmVha3BvaW50LiAgKi8KKwkJICAgICAgcGNfaXNfcmVhZCA9IDA7 CisJCSAgICAgIHJlZ2lzdGVyc19jaGFuZ2VkICgpOworCQkgICAgICBmb3Ig KGJsID0gYnBfbG9jYXRpb25fY2hhaW47IGJsOyBibCA9IGJsLT5nbG9iYWxf bmV4dCkKKwkJCXsKKwkJCSAgYiA9IGJsLT5vd25lcjsKKwkJCSAgZ2RiX2Fz c2VydCAoYik7CisJCQkgIGlmIChiLT5lbmFibGVfc3RhdGUgIT0gYnBfZW5h YmxlZAorCQkJICAgICAgJiYgYi0+ZW5hYmxlX3N0YXRlICE9IGJwX3Blcm1h bmVudCkKKwkJCSAgICBjb250aW51ZTsKKwkJCSAgaWYgKCFwY19pc19yZWFk KQorCQkJICAgIHsKKwkJCSAgICAgIHBjID0KKwkJCQlyZWdjYWNoZV9yZWFk X3BjIChnZXRfdGhyZWFkX3JlZ2NhY2hlIChyZXQpKTsKKwkJCSAgICAgIHBj X2lzX3JlYWQgPSAxOworCQkJICAgIH0KKwkJCSAgc3dpdGNoIChiLT50eXBl KQorCQkJICAgIHsKKwkJCSAgICBkZWZhdWx0OgorCQkJICAgICAgaWYgKGJs LT5hZGRyZXNzID09IHBjKQorCQkJCWdvdG8gYnJlYWtwb2ludDsKKwkJCSAg ICAgIGJyZWFrOworCisJCQkgICAgY2FzZSBicF93YXRjaHBvaW50OgorCQkJ ICAgICAgLyogWFhYIHRlYXdhdGVyOiBJIHN0aWxsIG5vdCB2ZXJ5IGNsZWFy IGhvdyB0bworCQkJCSBkZWFsIHdpdGggaXQuICAqLworCQkJICAgICAgZ290 byBicmVha3BvaW50OworCQkJICAgICAgYnJlYWs7CisKKwkJCSAgICBjYXNl IGJwX2NhdGNocG9pbnQ6CisJCQkgICAgICBnZGJfYXNzZXJ0IChiLT5vcHMg IT0gTlVMTAorCQkJCQkgICYmIGItPm9wcy0+YnJlYWtwb2ludF9oaXQgIT0g TlVMTCk7CisJCQkgICAgICBpZiAoYi0+b3BzLT5icmVha3BvaW50X2hpdCAo YikpCisJCQkJZ290byBicmVha3BvaW50OworCQkJICAgICAgYnJlYWs7CisK KwkJCSAgICBjYXNlIGJwX2hhcmR3YXJlX3dhdGNocG9pbnQ6CisJCQkgICAg Y2FzZSBicF9yZWFkX3dhdGNocG9pbnQ6CisJCQkgICAgY2FzZSBicF9hY2Nl c3Nfd2F0Y2hwb2ludDoKKwkJCSAgICAgIGlmIChTVE9QUEVEX0JZX1dBVENI UE9JTlQgKDApKQorCQkJCWdvdG8gYnJlYWtwb2ludDsKKwkJCSAgICAgIGJy ZWFrOworCQkJICAgIH0KKwkJCX0KKworCQkgICAgICAvKiBUaGVyZSBpcyBu b3QgYSBicmVha3BvaW50LiAgKi8KKwkJICAgICAgcmVjb3JkX21lc3NhZ2Ug KGN1cnJlbnRfZ2RiYXJjaCk7CisJCSAgICAgIHJlY29yZF9iZW5lYXRoX3Rv X3Jlc3VtZSAocHRpZCwgMSwKKwkJCQkJCXJlY29yZF9yZXN1bWVfc2lnZ25h bCk7CisJCSAgICAgIGNvbnRpbnVlOworCQkgICAgfQorCisJCSAgaXNfYnJl YWtwb2ludCA9IDA7CisKKwkJYnJlYWtwb2ludDoKKwkJICAvKiBBZGQgZ2Ri YXJjaF9kZWNyX3BjX2FmdGVyX2JyZWFrIHRvIHBjIGJlY2F1c2UgZ2RiIHdp bGwKKwkJICAgICBleHBlY3QgdGhlIHBjIHRvIGJlIGF0IGFkZHJlc3MgcGx1 cyBkZWNyX3BjX2FmdGVyX2JyZWFrCisJCSAgICAgd2hlbiB0aGUgaW5mZXJp b3Igc3RvcHMgYXQgYSBicmVha3BvaW50LiAgKi8KKwkJICBpZiAoaXNfYnJl YWtwb2ludCkKKwkJICAgIHsKKwkJICAgICAgQ09SRV9BRERSIGRlY3JfcGNf YWZ0ZXJfYnJlYWsgPQorCQkJZ2RiYXJjaF9kZWNyX3BjX2FmdGVyX2JyZWFr IChjdXJyZW50X2dkYmFyY2gpOworCQkgICAgICBpZiAoZGVjcl9wY19hZnRl cl9icmVhaykKKwkJCXsKKwkJCSAgaWYgKCFwY19pc19yZWFkKQorCQkJICAg IHBjID0KKwkJCSAgICAgIHJlZ2NhY2hlX3JlYWRfcGMgKGdldF90aHJlYWRf cmVnY2FjaGUgKHJldCkpOworCQkJICByZWdjYWNoZV93cml0ZV9wYyAoZ2V0 X3RocmVhZF9yZWdjYWNoZSAocmV0KSwKKwkJCQkJICAgICBwYyArIGRlY3Jf cGNfYWZ0ZXJfYnJlYWspOworCQkJfQorCQkgICAgfQorCisJCSAgYnJlYWs7 CisJCX0KKwkgICAgICB3aGlsZSAoMSk7CisKKwkgICAgICByZXR1cm4gcmV0 OworCSAgICB9CisJfQorICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGlu dCBuZWVkX2Rhc20gPSAwOworICAgICAgc3RydWN0IHJlZ2NhY2hlICpyZWdj YWNoZSA9IGdldF9jdXJyZW50X3JlZ2NhY2hlICgpOworICAgICAgaW50IGNv bnRpbnVlX2ZsYWcgPSAxOworICAgICAgaW50IGZpcnN0X3JlY29yZF9lbmQg PSAxOworICAgICAgc3RydWN0IGNsZWFudXAgKm9sZF9jbGVhbnVwcyA9IG1h a2VfY2xlYW51cCAocmVjb3JkX3dhaXRfY2xlYW51cHMsIDApOworICAgICAg Q09SRV9BRERSIHRtcF9wYzsKKworICAgICAgc3RhdHVzLT5raW5kID0gVEFS R0VUX1dBSVRLSU5EX1NUT1BQRUQ7CisKKyAgICAgIC8qIENoZWNrIGJyZWFr cG9pbnQgd2hlbiBmb3J3YXJkIGV4ZWN1dGUuICAqLworICAgICAgaWYgKGV4 ZWN1dGlvbl9kaXJlY3Rpb24gPT0gRVhFQ19GT1JXQVJEKQorCXsKKwkgIHRt cF9wYyA9IHJlZ2NhY2hlX3JlYWRfcGMgKHJlZ2NhY2hlKTsKKwkgIGlmIChi cmVha3BvaW50X2luc2VydGVkX2hlcmVfcCAodG1wX3BjKSkKKwkgICAgewor CSAgICAgIGlmIChyZWNvcmRfZGVidWcpCisJCWZwcmludGZfdW5maWx0ZXJl ZCAoZ2RiX3N0ZGxvZywKKwkJCQkgICAgIlByb2Nlc3MgcmVjb3JkOiBicmVh ayBhdCAweCVzLlxuIiwKKwkJCQkgICAgcGFkZHJfbnogKHRtcF9wYykpOwor CSAgICAgIGlmIChnZGJhcmNoX2RlY3JfcGNfYWZ0ZXJfYnJlYWsgKGdldF9y ZWdjYWNoZV9hcmNoIChyZWdjYWNoZSkpCisJCSAgJiYgIXJlY29yZF9yZXN1 bWVfc3RlcCkKKwkJcmVnY2FjaGVfd3JpdGVfcGMgKHJlZ2NhY2hlLAorCQkJ CSAgIHRtcF9wYyArCisJCQkJICAgZ2RiYXJjaF9kZWNyX3BjX2FmdGVyX2Jy ZWFrCisJCQkJICAgKGdldF9yZWdjYWNoZV9hcmNoIChyZWdjYWNoZSkpKTsK KwkgICAgICBnb3RvIHJlcGxheV9vdXQ7CisJICAgIH0KKwl9CisKKyAgICAg IHJlY29yZF9nZXRfc2lnID0gMDsKKyAgICAgIHNpZ25hbCAoU0lHSU5ULCBy ZWNvcmRfc2lnX2hhbmRsZXIpOworICAgICAgLyogSWYgR0RCIGlzIGluIHRl cm1pbmFsX2luZmVyaW9yIG1vZGUsIGl0IHdpbGwgbm90IGdldCB0aGUgc2ln bmFsLgorICAgICAgICAgQW5kIGluIEdEQiByZXBsYXkgbW9kZSwgR0RCIGRv ZXNuJ3QgbmVlZCB0byBiZSBpbiB0ZXJtaW5hbF9pbmZlcmlvcgorICAgICAg ICAgbW9kZSwgYmVjYXVzZSBpbmZlcmlvciB3aWxsIG5vdCBleGVjdXRlZC4K KyAgICAgICAgIFRoZW4gc2V0IGl0IHRvIHRlcm1pbmFsX291cnMgdG8gbWFr ZSBHREIgZ2V0IHRoZSBzaWduYWwuICAqLworICAgICAgdGFyZ2V0X3Rlcm1p bmFsX291cnMgKCk7CisKKyAgICAgIC8qIEluIEVYRUNfRk9SV0FSRCBtb2Rl LCByZWNvcmRfbGlzdCBwb2ludHMgdG8gdGhlIHRhaWwgb2YgcHJldgorICAg ICAgICAgaW5zdHJ1Y3Rpb24uICAqLworICAgICAgaWYgKGV4ZWN1dGlvbl9k aXJlY3Rpb24gPT0gRVhFQ19GT1JXQVJEICYmIHJlY29yZF9saXN0LT5uZXh0 KQorCXJlY29yZF9saXN0ID0gcmVjb3JkX2xpc3QtPm5leHQ7CisKKyAgICAg IC8qIExvb3Agb3ZlciB0aGUgcmVjb3JkX2xpc3QsIGxvb2tpbmcgZm9yIHRo ZSBuZXh0IHBsYWNlIHRvCisJIHN0b3AuICAqLworICAgICAgZG8KKwl7CisJ ICAvKiBDaGVjayBmb3IgYmVnaW5uaW5nIGFuZCBlbmQgb2YgbG9nLiAgKi8K KwkgIGlmIChleGVjdXRpb25fZGlyZWN0aW9uID09IEVYRUNfUkVWRVJTRQor CSAgICAgICYmIHJlY29yZF9saXN0ID09ICZyZWNvcmRfZmlyc3QpCisJICAg IHsKKwkgICAgICAvKiBIaXQgYmVnaW5uaW5nIG9mIHJlY29yZCBsb2cgaW4g cmV2ZXJzZS4gICovCisJICAgICAgc3RhdHVzLT5raW5kID0gVEFSR0VUX1dB SVRLSU5EX05PX0hJU1RPUlk7CisJICAgICAgYnJlYWs7CisJICAgIH0KKwkg IGlmIChleGVjdXRpb25fZGlyZWN0aW9uICE9IEVYRUNfUkVWRVJTRSAmJiAh cmVjb3JkX2xpc3QtPm5leHQpCisJICAgIHsKKwkgICAgICAvKiBIaXQgZW5k IG9mIHJlY29yZCBsb2cgZ29pbmcgZm9yd2FyZC4gICovCisJICAgICAgc3Rh dHVzLT5raW5kID0gVEFSR0VUX1dBSVRLSU5EX05PX0hJU1RPUlk7CisJICAg ICAgYnJlYWs7CisJICAgIH0KKworCSAgLyogU2V0IHB0aWQsIHJlZ2lzdGVy IGFuZCBtZW1vcnkgYWNjb3JkaW5nIHRvIHJlY29yZF9saXN0LiAgKi8KKwkg IGlmIChyZWNvcmRfbGlzdC0+dHlwZSA9PSByZWNvcmRfcmVnKQorCSAgICB7 CisJICAgICAgLyogcmVnICovCisJICAgICAgZ2RiX2J5dGUgcmVnW01BWF9S RUdJU1RFUl9TSVpFXTsKKwkgICAgICBpZiAocmVjb3JkX2RlYnVnID4gMSkK KwkJZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLAorCQkJCSAgICAi UHJvY2VzcyByZWNvcmQ6IHJlY29yZF9yZWcgJXMgdG8gIgorCQkJCSAgICAi aW5mZXJpb3IgbnVtID0gJWQuXG4iLAorCQkJCSAgICBob3N0X2FkZHJlc3Nf dG9fc3RyaW5nIChyZWNvcmRfbGlzdCksCisJCQkJICAgIHJlY29yZF9saXN0 LT51LnJlZy5udW0pOworCSAgICAgIHJlZ2NhY2hlX2Nvb2tlZF9yZWFkIChy ZWdjYWNoZSwgcmVjb3JkX2xpc3QtPnUucmVnLm51bSwgcmVnKTsKKwkgICAg ICByZWdjYWNoZV9jb29rZWRfd3JpdGUgKHJlZ2NhY2hlLCByZWNvcmRfbGlz dC0+dS5yZWcubnVtLAorCQkJCSAgICAgcmVjb3JkX2xpc3QtPnUucmVnLnZh bCk7CisJICAgICAgbWVtY3B5IChyZWNvcmRfbGlzdC0+dS5yZWcudmFsLCBy ZWcsIE1BWF9SRUdJU1RFUl9TSVpFKTsKKwkgICAgfQorCSAgZWxzZSBpZiAo cmVjb3JkX2xpc3QtPnR5cGUgPT0gcmVjb3JkX21lbSkKKwkgICAgeworCSAg ICAgIC8qIG1lbSAqLworCSAgICAgIGdkYl9ieXRlICptZW0gPSBhbGxvY2Eg KHJlY29yZF9saXN0LT51Lm1lbS5sZW4pOworCSAgICAgIGlmIChyZWNvcmRf ZGVidWcgPiAxKQorCQlmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2cs CisJCQkJICAgICJQcm9jZXNzIHJlY29yZDogcmVjb3JkX21lbSAlcyB0byAi CisJCQkJICAgICJpbmZlcmlvciBhZGRyID0gMHglcyBsZW4gPSAlZC5cbiIs CisJCQkJICAgIGhvc3RfYWRkcmVzc190b19zdHJpbmcgKHJlY29yZF9saXN0 KSwKKwkJCQkgICAgcGFkZHJfbnogKHJlY29yZF9saXN0LT51Lm1lbS5hZGRy KSwKKwkJCQkgICAgcmVjb3JkX2xpc3QtPnUubWVtLmxlbik7CisKKwkgICAg ICBpZiAodGFyZ2V0X3JlYWRfbWVtb3J5CisJCSAgKHJlY29yZF9saXN0LT51 Lm1lbS5hZGRyLCBtZW0sIHJlY29yZF9saXN0LT51Lm1lbS5sZW4pKQorCQll cnJvciAoXygiUHJvY2VzcyByZWNvcmQ6IGVycm9yIHJlYWRpbmcgbWVtb3J5 IGF0ICIKKwkJCSAiYWRkciA9IDB4JXMgbGVuID0gJWQuIiksCisJCSAgICAg ICBwYWRkcl9ueiAocmVjb3JkX2xpc3QtPnUubWVtLmFkZHIpLAorCQkgICAg ICAgcmVjb3JkX2xpc3QtPnUubWVtLmxlbik7CisKKwkgICAgICBpZiAodGFy Z2V0X3dyaXRlX21lbW9yeQorCQkgIChyZWNvcmRfbGlzdC0+dS5tZW0uYWRk ciwgcmVjb3JkX2xpc3QtPnUubWVtLnZhbCwKKwkJICAgcmVjb3JkX2xpc3Qt PnUubWVtLmxlbikpCisJCWVycm9yIChfCisJCSAgICAgICAoIlByb2Nlc3Mg cmVjb3JkOiBlcnJvciB3cml0aW5nIG1lbW9yeSBhdCAiCisJCQkiYWRkciA9 IDB4JXMgbGVuID0gJWQuIiksCisJCSAgICAgICBwYWRkcl9ueiAocmVjb3Jk X2xpc3QtPnUubWVtLmFkZHIpLAorCQkgICAgICAgcmVjb3JkX2xpc3QtPnUu bWVtLmxlbik7CisKKwkgICAgICBtZW1jcHkgKHJlY29yZF9saXN0LT51Lm1l bS52YWwsIG1lbSwgcmVjb3JkX2xpc3QtPnUubWVtLmxlbik7CisJICAgIH0K KwkgIGVsc2UKKwkgICAgeworCSAgICAgIGlmIChyZWNvcmRfZGVidWcgPiAx KQorCQlmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCisJCQkJICAg ICJQcm9jZXNzIHJlY29yZDogcmVjb3JkX2VuZCAlcyB0byAiCisJCQkJICAg ICJpbmZlcmlvciBuZWVkX2Rhc20gPSAlZC5cbiIsCisJCQkJICAgIGhvc3Rf YWRkcmVzc190b19zdHJpbmcgKHJlY29yZF9saXN0KSwKKwkJCQkgICAgcmVj b3JkX2xpc3QtPnUubmVlZF9kYXNtKTsKKworCSAgICAgIGlmIChleGVjdXRp b25fZGlyZWN0aW9uID09IEVYRUNfRk9SV0FSRCkKKwkJbmVlZF9kYXNtID0g cmVjb3JkX2xpc3QtPnUubmVlZF9kYXNtOworCSAgICAgIGlmIChuZWVkX2Rh c20pCisJCWdkYmFyY2hfcHJvY2Vzc19yZWNvcmRfZGFzbSAoY3VycmVudF9n ZGJhcmNoKTsKKworCSAgICAgIGlmIChmaXJzdF9yZWNvcmRfZW5kICYmIGV4 ZWN1dGlvbl9kaXJlY3Rpb24gPT0gRVhFQ19SRVZFUlNFKQorCQl7CisJCSAg LyogV2hlbiByZXZlcnNlIGV4Y3V0ZSwgdGhlIGZpcnN0IHJlY29yZF9lbmQg aXMgdGhlIHBhcnQgb2YKKwkJICAgICBjdXJyZW50IGluc3RydWN0aW9uLiAg Ki8KKwkJICBmaXJzdF9yZWNvcmRfZW5kID0gMDsKKwkJfQorCSAgICAgIGVs c2UKKwkJeworCQkgIC8qIEluIEVYRUNfUkVWRVJTRSBtb2RlLCB0aGlzIGlz IHRoZSByZWNvcmRfZW5kIG9mIHByZXYKKwkJICAgICBpbnN0cnVjdGlvbi4K KwkJICAgICBJbiBFWEVDX0ZPUldBUkQgbW9kZSwgdGhpcyBpcyB0aGUgcmVj b3JkX2VuZCBvZiBjdXJyZW50CisJCSAgICAgaW5zdHJ1Y3Rpb24uICAqLwor CQkgIC8qIHN0ZXAgKi8KKwkJICBpZiAocmVjb3JkX3Jlc3VtZV9zdGVwKQor CQkgICAgeworCQkgICAgICBpZiAocmVjb3JkX2RlYnVnID4gMSkKKwkJCWZw cmludGZfdW5maWx0ZXJlZCAoZ2RiX3N0ZGxvZywKKwkJCQkJICAgICJQcm9j ZXNzIHJlY29yZDogc3RlcC5cbiIpOworCQkgICAgICBjb250aW51ZV9mbGFn ID0gMDsKKwkJICAgIH0KKworCQkgIC8qIGNoZWNrIGJyZWFrcG9pbnQgKi8K KwkJICB0bXBfcGMgPSByZWdjYWNoZV9yZWFkX3BjIChyZWdjYWNoZSk7CisJ CSAgaWYgKGJyZWFrcG9pbnRfaW5zZXJ0ZWRfaGVyZV9wICh0bXBfcGMpKQor CQkgICAgeworCQkgICAgICBpZiAocmVjb3JkX2RlYnVnKQorCQkJZnByaW50 Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLAorCQkJCQkgICAgIlByb2Nlc3Mg cmVjb3JkOiBicmVhayAiCisJCQkJCSAgICAiYXQgMHglcy5cbiIsCisJCQkJ CSAgICBwYWRkcl9ueiAodG1wX3BjKSk7CisJCSAgICAgIGlmIChnZGJhcmNo X2RlY3JfcGNfYWZ0ZXJfYnJlYWsgKGdldF9yZWdjYWNoZV9hcmNoIChyZWdj YWNoZSkpCisJCQkgICYmIGV4ZWN1dGlvbl9kaXJlY3Rpb24gPT0gRVhFQ19G T1JXQVJECisJCQkgICYmICFyZWNvcmRfcmVzdW1lX3N0ZXApCisJCQlyZWdj YWNoZV93cml0ZV9wYyAocmVnY2FjaGUsCisJCQkJCSAgIHRtcF9wYyArCisJ CQkJCSAgIGdkYmFyY2hfZGVjcl9wY19hZnRlcl9icmVhaworCQkJCQkgICAo Z2V0X3JlZ2NhY2hlX2FyY2ggKHJlZ2NhY2hlKSkpOworCQkgICAgICBjb250 aW51ZV9mbGFnID0gMDsKKwkJICAgIH0KKwkJfQorCSAgICAgIGlmIChleGVj dXRpb25fZGlyZWN0aW9uID09IEVYRUNfUkVWRVJTRSkKKwkJbmVlZF9kYXNt ID0gcmVjb3JkX2xpc3QtPnUubmVlZF9kYXNtOworCSAgICB9CisKK25leHQ6 CisJICBpZiAoY29udGludWVfZmxhZykKKwkgICAgeworCSAgICAgIGlmIChl eGVjdXRpb25fZGlyZWN0aW9uID09IEVYRUNfUkVWRVJTRSkKKwkJeworCQkg IGlmIChyZWNvcmRfbGlzdC0+cHJldikKKwkJICAgIHJlY29yZF9saXN0ID0g cmVjb3JkX2xpc3QtPnByZXY7CisJCX0KKwkgICAgICBlbHNlCisJCXsKKwkJ ICBpZiAocmVjb3JkX2xpc3QtPm5leHQpCisJCSAgICByZWNvcmRfbGlzdCA9 IHJlY29yZF9saXN0LT5uZXh0OworCQl9CisJICAgIH0KKwl9CisgICAgICB3 aGlsZSAoY29udGludWVfZmxhZyk7CisKKyAgICAgIHNpZ25hbCAoU0lHSU5U LCBoYW5kbGVfc2lnaW50KTsKKworcmVwbGF5X291dDoKKyAgICAgIGlmIChy ZWNvcmRfZ2V0X3NpZykKKwlzdGF0dXMtPnZhbHVlLnNpZyA9IFRBUkdFVF9T SUdOQUxfSU5UOworICAgICAgZWxzZQorCXN0YXR1cy0+dmFsdWUuc2lnID0g VEFSR0VUX1NJR05BTF9UUkFQOworCisgICAgICBkaXNjYXJkX2NsZWFudXBz IChvbGRfY2xlYW51cHMpOworICAgIH0KKworICBkb19jbGVhbnVwcyAoc2V0 X2NsZWFudXBzKTsKKyAgcmV0dXJuIGluZmVyaW9yX3B0aWQ7Cit9CisKK3N0 YXRpYyB2b2lkCityZWNvcmRfZGlzY29ubmVjdCAoc3RydWN0IHRhcmdldF9v cHMgKnRhcmdldCwgY2hhciAqYXJncywgaW50IGZyb21fdHR5KQoreworICBp ZiAocmVjb3JkX2RlYnVnKQorICAgIGZwcmludGZfdW5maWx0ZXJlZCAoZ2Ri X3N0ZGxvZywgIlByb2Nlc3MgcmVjb3JkOiByZWNvcmRfZGlzY29ubmVjdFxu Iik7CisKKyAgdW5wdXNoX3RhcmdldCAoJnJlY29yZF9vcHMpOworICB0YXJn ZXRfZGlzY29ubmVjdCAoYXJncywgZnJvbV90dHkpOworfQorCitzdGF0aWMg dm9pZAorcmVjb3JkX2RldGFjaCAoc3RydWN0IHRhcmdldF9vcHMgKm9wcywg Y2hhciAqYXJncywgaW50IGZyb21fdHR5KQoreworICBpZiAocmVjb3JkX2Rl YnVnKQorICAgIGZwcmludGZfdW5maWx0ZXJlZCAoZ2RiX3N0ZGxvZywgIlBy b2Nlc3MgcmVjb3JkOiByZWNvcmRfZGV0YWNoXG4iKTsKKworICB1bnB1c2hf dGFyZ2V0ICgmcmVjb3JkX29wcyk7CisgIHRhcmdldF9kZXRhY2ggKGFyZ3Ms IGZyb21fdHR5KTsKK30KKworc3RhdGljIHZvaWQKK3JlY29yZF9tb3Vybl9p bmZlcmlvciAoc3RydWN0IHRhcmdldF9vcHMgKm9wcykKK3sKKyAgaWYgKHJl Y29yZF9kZWJ1ZykKKyAgICBmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRs b2csICJQcm9jZXNzIHJlY29yZDogIgorCQkJICAgICAgICAgICAgInJlY29y ZF9tb3Vybl9pbmZlcmlvclxuIik7CisKKyAgdW5wdXNoX3RhcmdldCAoJnJl Y29yZF9vcHMpOworICB0YXJnZXRfbW91cm5faW5mZXJpb3IgKCk7Cit9CisK Ky8qIENsb3NlIHByb2Nlc3MgcmVjb3JkIHRhcmdldCBiZWZvcmUga2lsbGlu ZyB0aGUgaW5mZXJpb3IgcHJvY2Vzcy4gICovCitzdGF0aWMgdm9pZAorcmVj b3JkX2tpbGwgKHZvaWQpCit7CisgIGlmIChyZWNvcmRfZGVidWcpCisgICAg ZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLCAiUHJvY2VzcyByZWNv cmQ6IHJlY29yZF9raWxsXG4iKTsKKworICB1bnB1c2hfdGFyZ2V0ICgmcmVj b3JkX29wcyk7CisgIHRhcmdldF9raWxsICgpOworfQorCisvKiBSZWNvcmQg cmVnaXN0ZXJzIGNoYW5nZSAoYnkgdXNlciBvciBieSBHREIpIHRvIGxpc3Qg YXMgYW4gaW5zdHJ1Y3Rpb24uICAqLworc3RhdGljIHZvaWQKK3JlY29yZF9y ZWdpc3RlcnNfY2hhbmdlIChzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLCBp bnQgcmVnbnVtKQoreworICAvKiBDaGVjayByZWNvcmRfaW5zbl9udW0uICAq LworICByZWNvcmRfY2hlY2tfaW5zbl9udW0gKDApOworCisgIHJlY29yZF9h cmNoX2xpc3RfaGVhZCA9IE5VTEw7CisgIHJlY29yZF9hcmNoX2xpc3RfdGFp bCA9IE5VTEw7CisKKyAgcmVjb3JkX3JlZ2NhY2hlID0gZ2V0X2N1cnJlbnRf cmVnY2FjaGUgKCk7CisKKyAgaWYgKHJlZ251bSA8IDApCisgICAgeworICAg ICAgaW50IGk7CisgICAgICBmb3IgKGkgPSAwOyBpIDwgZ2RiYXJjaF9udW1f cmVncyAoZ2V0X3JlZ2NhY2hlX2FyY2ggKHJlZ2NhY2hlKSk7IGkrKykKKwl7 CisJICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfcmVnIChpKSkKKwkgICAg eworCSAgICAgIHJlY29yZF9saXN0X3JlbGVhc2UgKHJlY29yZF9hcmNoX2xp c3RfdGFpbCk7CisJICAgICAgZXJyb3IgKF8oIlByb2Nlc3MgcmVjb3JkOiBm YWlsZWQgdG8gcmVjb3JkIGV4ZWN1dGlvbiBsb2cuIikpOworCSAgICB9CisJ fQorICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGlmIChyZWNvcmRfYXJj aF9saXN0X2FkZF9yZWcgKHJlZ251bSkpCisJeworCSAgcmVjb3JkX2xpc3Rf cmVsZWFzZSAocmVjb3JkX2FyY2hfbGlzdF90YWlsKTsKKwkgIGVycm9yIChf KCJQcm9jZXNzIHJlY29yZDogZmFpbGVkIHRvIHJlY29yZCBleGVjdXRpb24g bG9nLiIpKTsKKwl9CisgICAgfQorICBpZiAocmVjb3JkX2FyY2hfbGlzdF9h ZGRfZW5kICgwKSkKKyAgICB7CisgICAgICByZWNvcmRfbGlzdF9yZWxlYXNl IChyZWNvcmRfYXJjaF9saXN0X3RhaWwpOworICAgICAgZXJyb3IgKF8oIlBy b2Nlc3MgcmVjb3JkOiBmYWlsZWQgdG8gcmVjb3JkIGV4ZWN1dGlvbiBsb2cu IikpOworICAgIH0KKyAgcmVjb3JkX2xpc3QtPm5leHQgPSByZWNvcmRfYXJj aF9saXN0X2hlYWQ7CisgIHJlY29yZF9hcmNoX2xpc3RfaGVhZC0+cHJldiA9 IHJlY29yZF9saXN0OworICByZWNvcmRfbGlzdCA9IHJlY29yZF9hcmNoX2xp c3RfdGFpbDsKKworICBpZiAocmVjb3JkX2luc25fbnVtID09IHJlY29yZF9p bnNuX21heF9udW0gJiYgcmVjb3JkX2luc25fbWF4X251bSkKKyAgICByZWNv cmRfbGlzdF9yZWxlYXNlX2ZpcnN0ICgpOworICBlbHNlCisgICAgcmVjb3Jk X2luc25fbnVtKys7Cit9CisKK3N0YXRpYyB2b2lkCityZWNvcmRfc3RvcmVf cmVnaXN0ZXJzIChzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLCBpbnQgcmVn bm8pCit7CisgIGlmICghcmVjb3JkX2dkYl9vcGVyYXRpb25fZGlzYWJsZSkK KyAgICB7CisgICAgICBpZiAoUkVDT1JEX0lTX1JFUExBWSkKKwl7CisJICBp bnQgbjsKKwkgIHN0cnVjdCBjbGVhbnVwICpvbGRfY2xlYW51cHM7CisKKwkg IC8qIExldCB1c2VyIGNob29zZSBpZiBoZSB3YW50cyB0byB3cml0ZSByZWdp c3RlciBvciBub3QuICAqLworCSAgaWYgKHJlZ25vIDwgMCkKKwkgICAgbiA9 CisJICAgICAgbnF1ZXJ5IChfKCJCZWNhdXNlIEdEQiBpcyBpbiByZXBsYXkg bW9kZSwgY2hhbmdpbmcgdGhlICIKKwkJCSJ2YWx1ZSBvZiBhIHJlZ2lzdGVy IHdpbGwgbWFrZSB0aGUgZXhlY3V0aW9uICIKKwkJCSJsb2cgdW51c2FibGUg ZnJvbSB0aGlzIHBvaW50IG9ud2FyZC4gICIKKwkJCSJDaGFuZ2UgYWxsIHJl Z2lzdGVycz8iKSk7CisJICBlbHNlCisJICAgIG4gPQorCSAgICAgIG5xdWVy eSAoXygiQmVjYXVzZSBHREIgaXMgaW4gcmVwbGF5IG1vZGUsIGNoYW5naW5n IHRoZSB2YWx1ZSAiCisJCQkib2YgYSByZWdpc3RlciB3aWxsIG1ha2UgdGhl IGV4ZWN1dGlvbiBsb2cgdW51c2FibGUgIgorCQkJImZyb20gdGhpcyBwb2lu dCBvbndhcmQuICBDaGFuZ2UgcmVnaXN0ZXIgJXM/IiksCisJCSAgICAgIGdk YmFyY2hfcmVnaXN0ZXJfbmFtZSAoZ2V0X3JlZ2NhY2hlX2FyY2ggKHJlZ2Nh Y2hlKSwKKwkJCQkJICAgICAgIHJlZ25vKSk7CisKKwkgIGlmICghbikKKwkg ICAgeworCSAgICAgIC8qIEludmFsaWRhdGUgdGhlIHZhbHVlIG9mIHJlZ2Nh Y2hlIHRoYXQgd2FzIHNldCBpbiBmdW5jdGlvbgorCSAgICAgICAgICJyZWdj YWNoZV9yYXdfd3JpdGUiLiAgKi8KKwkgICAgICBpZiAocmVnbm8gPCAwKQor CQl7CisJCSAgaW50IGk7CisJCSAgZm9yIChpID0gMDsKKwkJICAgICAgIGkg PCBnZGJhcmNoX251bV9yZWdzIChnZXRfcmVnY2FjaGVfYXJjaCAocmVnY2Fj aGUpKTsKKwkJICAgICAgIGkrKykKKwkJICAgIHJlZ2NhY2hlX2ludmFsaWRh dGUgKHJlZ2NhY2hlLCBpKTsKKwkJfQorCSAgICAgIGVsc2UKKwkJcmVnY2Fj aGVfaW52YWxpZGF0ZSAocmVnY2FjaGUsIHJlZ25vKTsKKworCSAgICAgIGVy cm9yIChfKCJQcm9jZXNzIHJlY29yZCBjYW5jZWxlZCB0aGUgb3BlcmF0aW9u LiIpKTsKKwkgICAgfQorCisJICAvKiBEZXN0cm95IHRoZSByZWNvcmQgZnJv bSBoZXJlIGZvcndhcmQuICAqLworCSAgcmVjb3JkX2xpc3RfcmVsZWFzZV9u ZXh0ICgpOworCX0KKworICAgICAgcmVjb3JkX3JlZ2lzdGVyc19jaGFuZ2Ug KHJlZ2NhY2hlLCByZWdubyk7CisgICAgfQorICByZWNvcmRfYmVuZWF0aF90 b19zdG9yZV9yZWdpc3RlcnMgKHJlZ2NhY2hlLCByZWdubyk7Cit9CisKKy8q IHJlY29yZF94ZmVyX3BhcnRpYWwgLS0gYmVoYXZpb3IgaXMgY29uZGl0aW9u YWwgb24gUkVDT1JEX0lTX1JFUExBWS4KKyAgIEluIHJlcGxheSBtb2RlLCB3 ZSBjYW5ub3Qgd3JpdGUgbWVtb3J5IHVubGVzIHdlIGFyZSB3aWxsaW5nIHRv CisgICBpbnZhbGlkYXRlIHRoZSByZWNvcmQvcmVwbGF5IGxvZyBmcm9tIHRo aXMgcG9pbnQgZm9yd2FyZC4gICovCisKK3N0YXRpYyBMT05HRVNUCityZWNv cmRfeGZlcl9wYXJ0aWFsIChzdHJ1Y3QgdGFyZ2V0X29wcyAqb3BzLCBlbnVt IHRhcmdldF9vYmplY3Qgb2JqZWN0LAorCQkgICAgIGNvbnN0IGNoYXIgKmFu bmV4LCBnZGJfYnl0ZSAqIHJlYWRidWYsCisJCSAgICAgY29uc3QgZ2RiX2J5 dGUgKiB3cml0ZWJ1ZiwgVUxPTkdFU1Qgb2Zmc2V0LCBMT05HRVNUIGxlbikK K3sKKyAgaWYgKCFyZWNvcmRfZ2RiX29wZXJhdGlvbl9kaXNhYmxlCisgICAg ICAmJiAob2JqZWN0ID09IFRBUkdFVF9PQkpFQ1RfTUVNT1JZCisJICB8fCBv YmplY3QgPT0gVEFSR0VUX09CSkVDVF9SQVdfTUVNT1JZKSAmJiB3cml0ZWJ1 ZikKKyAgICB7CisgICAgICBpZiAoUkVDT1JEX0lTX1JFUExBWSkKKwl7CisJ ICAvKiBMZXQgdXNlciBjaG9vc2UgaWYgaGUgd2FudHMgdG8gd3JpdGUgbWVt b3J5IG9yIG5vdC4gICovCisJICBpZiAoIW5xdWVyeSAoXygiQmVjYXVzZSBH REIgaXMgaW4gcmVwbGF5IG1vZGUsIHdyaXRpbmcgdG8gbWVtb3J5ICIKKwkJ ICAgICAgICAgIndpbGwgbWFrZSB0aGUgZXhlY3V0aW9uIGxvZyB1bnVzYWJs ZSBmcm9tIHRoaXMgIgorCQkgICAgICAgICAicG9pbnQgb253YXJkLiAgV3Jp dGUgbWVtb3J5IGF0IGFkZHJlc3MgMHglcz8iKSwKKwkJICAgICAgIHBhZGRy X256IChvZmZzZXQpKSkKKwkgICAgcmV0dXJuIC0xOworCisJICAvKiBEZXN0 cm95IHRoZSByZWNvcmQgZnJvbSBoZXJlIGZvcndhcmQuICAqLworCSAgcmVj b3JkX2xpc3RfcmVsZWFzZV9uZXh0ICgpOworCX0KKworICAgICAgLyogQ2hl Y2sgcmVjb3JkX2luc25fbnVtICovCisgICAgICByZWNvcmRfY2hlY2tfaW5z bl9udW0gKDApOworCisgICAgICAvKiBSZWNvcmQgcmVnaXN0ZXJzIGNoYW5n ZSB0byBsaXN0IGFzIGFuIGluc3RydWN0aW9uLiAgKi8KKyAgICAgIHJlY29y ZF9hcmNoX2xpc3RfaGVhZCA9IE5VTEw7CisgICAgICByZWNvcmRfYXJjaF9s aXN0X3RhaWwgPSBOVUxMOworICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3Rf YWRkX21lbSAob2Zmc2V0LCBsZW4pKQorCXsKKwkgIHJlY29yZF9saXN0X3Jl bGVhc2UgKHJlY29yZF9hcmNoX2xpc3RfdGFpbCk7CisJICBpZiAocmVjb3Jk X2RlYnVnKQorCSAgICBmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2cs CisJCQkJXygiUHJvY2VzcyByZWNvcmQ6IGZhaWxlZCB0byByZWNvcmQgIgor CQkJCSAgImV4ZWN1dGlvbiBsb2cuIikpOworCSAgcmV0dXJuIC0xOworCX0K KyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9lbmQgKDApKQorCXsK KwkgIHJlY29yZF9saXN0X3JlbGVhc2UgKHJlY29yZF9hcmNoX2xpc3RfdGFp bCk7CisJICBpZiAocmVjb3JkX2RlYnVnKQorCSAgICBmcHJpbnRmX3VuZmls dGVyZWQgKGdkYl9zdGRsb2csCisJCQkJXygiUHJvY2VzcyByZWNvcmQ6IGZh aWxlZCB0byByZWNvcmQgIgorCQkJCSAgImV4ZWN1dGlvbiBsb2cuIikpOwor CSAgcmV0dXJuIC0xOworCX0KKyAgICAgIHJlY29yZF9saXN0LT5uZXh0ID0g cmVjb3JkX2FyY2hfbGlzdF9oZWFkOworICAgICAgcmVjb3JkX2FyY2hfbGlz dF9oZWFkLT5wcmV2ID0gcmVjb3JkX2xpc3Q7CisgICAgICByZWNvcmRfbGlz dCA9IHJlY29yZF9hcmNoX2xpc3RfdGFpbDsKKworICAgICAgaWYgKHJlY29y ZF9pbnNuX251bSA9PSByZWNvcmRfaW5zbl9tYXhfbnVtICYmIHJlY29yZF9p bnNuX21heF9udW0pCisJcmVjb3JkX2xpc3RfcmVsZWFzZV9maXJzdCAoKTsK KyAgICAgIGVsc2UKKwlyZWNvcmRfaW5zbl9udW0rKzsKKyAgICB9CisKKyAg cmV0dXJuIHJlY29yZF9iZW5lYXRoX3RvX3hmZXJfcGFydGlhbCAoZmluZF90 YXJnZXRfYmVuZWF0aCAob3BzKSwgb2JqZWN0LAorCQkJCQkgYW5uZXgsIHJl YWRidWYsIHdyaXRlYnVmLCBvZmZzZXQsCisJCQkJCSBsZW4pOworfQorCisv KiByZWNvcmRfaW5zZXJ0X2JyZWFrcG9pbnQKKyAgIHJlY29yZF9yZW1vdmVf YnJlYWtwb2ludAorICAgQmVoYXZpb3IgaXMgY29uZGl0aW9uYWwgb24gUkVD T1JEX0lTX1JFUExBWS4KKyAgIFdlIHdpbGwgbm90IGFjdHVhbGx5IGluc2Vy dCBvciByZW1vdmUgYnJlYWtwb2ludHMgd2hlbiByZXBsYXlpbmcsCisgICBu b3Igd2hlbiByZWNvcmRpbmcuICAqLworCitzdGF0aWMgaW50CityZWNvcmRf aW5zZXJ0X2JyZWFrcG9pbnQgKHN0cnVjdCBicF90YXJnZXRfaW5mbyAqYnBf dGd0KQoreworICBpZiAoIVJFQ09SRF9JU19SRVBMQVkpCisgICAgeworICAg ICAgc3RydWN0IGNsZWFudXAgKm9sZF9jbGVhbnVwcyA9IHJlY29yZF9nZGJf b3BlcmF0aW9uX2Rpc2FibGVfc2V0ICgpOworICAgICAgaW50IHJldCA9IHJl Y29yZF9iZW5lYXRoX3RvX2luc2VydF9icmVha3BvaW50IChicF90Z3QpOwor CisgICAgICBkb19jbGVhbnVwcyAob2xkX2NsZWFudXBzKTsKKworICAgICAg cmV0dXJuIHJldDsKKyAgICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRp YyBpbnQKK3JlY29yZF9yZW1vdmVfYnJlYWtwb2ludCAoc3RydWN0IGJwX3Rh cmdldF9pbmZvICpicF90Z3QpCit7CisgIGlmICghUkVDT1JEX0lTX1JFUExB WSkKKyAgICB7CisgICAgICBzdHJ1Y3QgY2xlYW51cCAqb2xkX2NsZWFudXBz ID0gcmVjb3JkX2dkYl9vcGVyYXRpb25fZGlzYWJsZV9zZXQgKCk7CisgICAg ICBpbnQgcmV0ID0gcmVjb3JkX2JlbmVhdGhfdG9fcmVtb3ZlX2JyZWFrcG9p bnQgKGJwX3RndCk7CisKKyAgICAgIGRvX2NsZWFudXBzIChvbGRfY2xlYW51 cHMpOworCisgICAgICByZXR1cm4gcmV0OworICAgIH0KKworICByZXR1cm4g MDsKK30KKworc3RhdGljIGludAorcmVjb3JkX2Nhbl9leGVjdXRlX3JldmVy c2UgKHZvaWQpCit7CisgIHJldHVybiAxOworfQorCitzdGF0aWMgdm9pZAor aW5pdF9yZWNvcmRfb3BzICh2b2lkKQoreworICByZWNvcmRfb3BzLnRvX3No b3J0bmFtZSA9ICJyZWNvcmQiOworICByZWNvcmRfb3BzLnRvX2xvbmduYW1l ID0gIlByb2Nlc3MgcmVjb3JkIGFuZCByZXBsYXkgdGFyZ2V0IjsKKyAgcmVj b3JkX29wcy50b19kb2MgPQorICAgICJMb2cgcHJvZ3JhbSB3aGlsZSBleGVj dXRpbmcgYW5kIHJlcGxheSBleGVjdXRpb24gZnJvbSBsb2cuIjsKKyAgcmVj b3JkX29wcy50b19vcGVuID0gcmVjb3JkX29wZW47CisgIHJlY29yZF9vcHMu dG9fY2xvc2UgPSByZWNvcmRfY2xvc2U7CisgIHJlY29yZF9vcHMudG9fcmVz dW1lID0gcmVjb3JkX3Jlc3VtZTsKKyAgcmVjb3JkX29wcy50b193YWl0ID0g cmVjb3JkX3dhaXQ7CisgIHJlY29yZF9vcHMudG9fZGlzY29ubmVjdCA9IHJl Y29yZF9kaXNjb25uZWN0OworICByZWNvcmRfb3BzLnRvX2RldGFjaCA9IHJl Y29yZF9kZXRhY2g7CisgIHJlY29yZF9vcHMudG9fbW91cm5faW5mZXJpb3Ig PSByZWNvcmRfbW91cm5faW5mZXJpb3I7CisgIHJlY29yZF9vcHMudG9fa2ls bCA9IHJlY29yZF9raWxsOworICByZWNvcmRfb3BzLnRvX2NyZWF0ZV9pbmZl cmlvciA9IGZpbmRfZGVmYXVsdF9jcmVhdGVfaW5mZXJpb3I7CisgIHJlY29y ZF9vcHMudG9fc3RvcmVfcmVnaXN0ZXJzID0gcmVjb3JkX3N0b3JlX3JlZ2lz dGVyczsKKyAgcmVjb3JkX29wcy50b194ZmVyX3BhcnRpYWwgPSByZWNvcmRf eGZlcl9wYXJ0aWFsOworICByZWNvcmRfb3BzLnRvX2luc2VydF9icmVha3Bv aW50ID0gcmVjb3JkX2luc2VydF9icmVha3BvaW50OworICByZWNvcmRfb3Bz LnRvX3JlbW92ZV9icmVha3BvaW50ID0gcmVjb3JkX3JlbW92ZV9icmVha3Bv aW50OworICByZWNvcmRfb3BzLnRvX2Nhbl9leGVjdXRlX3JldmVyc2UgPSBy ZWNvcmRfY2FuX2V4ZWN1dGVfcmV2ZXJzZTsKKyAgcmVjb3JkX29wcy50b19z dHJhdHVtID0gcmVjb3JkX3N0cmF0dW07CisgIHJlY29yZF9vcHMudG9fbWFn aWMgPSBPUFNfTUFHSUM7Cit9CisKK3N0YXRpYyB2b2lkCitzaG93X3JlY29y ZF9kZWJ1ZyAoc3RydWN0IHVpX2ZpbGUgKmZpbGUsIGludCBmcm9tX3R0eSwK KwkJICAgc3RydWN0IGNtZF9saXN0X2VsZW1lbnQgKmMsIGNvbnN0IGNoYXIg KnZhbHVlKQoreworICBmcHJpbnRmX2ZpbHRlcmVkIChmaWxlLCBfKCJEZWJ1 Z2dpbmcgb2YgcHJvY2VzcyByZWNvcmQgdGFyZ2V0IGlzICVzLlxuIiksCisJ CSAgICB2YWx1ZSk7Cit9CisKKy8qIGNtZF9yZWNvcmRfc3RhcnQgLS0gYWxp YXMgZm9yICJ0YXJnZXQgcmVjb3JkIi4gICovCisKK3N0YXRpYyB2b2lkCitj bWRfcmVjb3JkX3N0YXJ0IChjaGFyICphcmdzLCBpbnQgZnJvbV90dHkpCit7 CisgIGV4ZWN1dGVfY29tbWFuZCAoInRhcmdldCByZWNvcmQiLCBmcm9tX3R0 eSk7Cit9CisKKy8qIGNtZF9yZWNvcmRfZGVsZXRlIC0tIHRydW5jYXRlIHRo ZSByZWNvcmQgbG9nIGZyb20gdGhlIHByZXNlbnQgcG9pbnQKKyAgIG9mIHJl cGxheSB1bnRpbCB0aGUgZW5kLiAgKi8KKworc3RhdGljIHZvaWQKK2NtZF9y ZWNvcmRfZGVsZXRlIChjaGFyICphcmdzLCBpbnQgZnJvbV90dHkpCit7Cisg IGlmIChUQVJHRVRfSVNfUFJPQ0VTU19SRUNPUkQpCisgICAgeworICAgICAg aWYgKFJFQ09SRF9JU19SRVBMQVkpCisJeworCSAgaWYgKCFmcm9tX3R0eSB8 fCBxdWVyeSAoXygiRGVsZXRlIHRoZSBsb2cgZnJvbSB0aGlzIHBvaW50IGZv cndhcmQgIgorCQkgICAgICAgICAgICAgICAgICAgICJhbmQgYmVnaW4gdG8g cmVjb3JkIHRoZSBydW5uaW5nIG1lc3NhZ2UgIgorCQkgICAgICAgICAgICAg ICAgICAgICJhdCBjdXJyZW50IFBDPyIpKSkKKwkgICAgcmVjb3JkX2xpc3Rf cmVsZWFzZV9uZXh0ICgpOworCX0KKyAgICAgIGVsc2UKKwkgIHByaW50Zl91 bmZpbHRlcmVkIChfKCJBbHJlYWR5IGF0IGVuZCBvZiByZWNvcmQgbGlzdC5c biIpKTsKKworICAgIH0KKyAgZWxzZQorICAgIHByaW50Zl91bmZpbHRlcmVk IChfKCJQcm9jZXNzIHJlY29yZCBpcyBub3Qgc3RhcnRlZC5cbiIpKTsKK30K KworLyogY21kX3JlY29yZF9zdG9wIC0tIGltcGxlbWVudCB0aGUgInN0b3By ZWNvcmQiIGNvbW1hbmQuICAqLworCitzdGF0aWMgdm9pZAorY21kX3JlY29y ZF9zdG9wIChjaGFyICphcmdzLCBpbnQgZnJvbV90dHkpCit7CisgIGlmIChU QVJHRVRfSVNfUFJPQ0VTU19SRUNPUkQpCisgICAgeworICAgICAgaWYgKCFy ZWNvcmRfbGlzdCB8fCAhZnJvbV90dHkgfHwgcXVlcnkgKF8oIkRlbGV0ZSBy ZWNvcmRlZCBsb2cgYW5kICIKKwkgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgInN0b3AgcmVjb3JkaW5nPyIpKSkKKwl1bnB1c2hf dGFyZ2V0ICgmcmVjb3JkX29wcyk7CisgICAgfQorICBlbHNlCisgICAgcHJp bnRmX3VuZmlsdGVyZWQgKF8oIlByb2Nlc3MgcmVjb3JkIGlzIG5vdCBzdGFy dGVkLlxuIikpOworfQorCisvKiBzZXRfcmVjb3JkX2luc25fbWF4X251bSAt LSBzZXQgdXBwZXIgbGltaXQgb2YgcmVjb3JkIGxvZyBzaXplLiAgKi8KKwor c3RhdGljIHZvaWQKK3NldF9yZWNvcmRfaW5zbl9tYXhfbnVtIChjaGFyICph cmdzLCBpbnQgZnJvbV90dHksIHN0cnVjdCBjbWRfbGlzdF9lbGVtZW50ICpj KQoreworICBpZiAocmVjb3JkX2luc25fbnVtID4gcmVjb3JkX2luc25fbWF4 X251bSAmJiByZWNvcmRfaW5zbl9tYXhfbnVtKQorICAgIHsKKyAgICAgIHBy aW50Zl91bmZpbHRlcmVkIChfKCJSZWNvcmQgaW5zdHJ1Y3Rpb25zIG51bWJl ciBpcyBiaWdnZXIgdGhhbiAiCisJCSAgICAgICAgICAgInJlY29yZCBpbnN0 cnVjdGlvbnMgbWF4IG51bWJlci4gIEF1dG8gZGVsZXRlICIKKwkJICAgICAg ICAgICAidGhlIGZpcnN0IG9uZXM/XG4iKSk7CisKKyAgICAgIHdoaWxlIChy ZWNvcmRfaW5zbl9udW0gPiByZWNvcmRfaW5zbl9tYXhfbnVtKQorCXJlY29y ZF9saXN0X3JlbGVhc2VfZmlyc3QgKCk7CisgICAgfQorfQorCisvKiBzaG93 X3JlY29yZF9pbnNuX251bWJlciAtLSBwcmludCB0aGUgY3VycmVudCBpbmRl eAorICAgaW50byB0aGUgcmVjb3JkIGxvZyAobnVtYmVyIG9mIGluc25zIHJl Y29yZGVkIHNvIGZhcikuICAqLworCitzdGF0aWMgdm9pZAorc2hvd19yZWNv cmRfaW5zbl9udW1iZXIgKGNoYXIgKmlnbm9yZSwgaW50IGZyb21fdHR5KQor eworICBwcmludGZfdW5maWx0ZXJlZCAoXygiUmVjb3JkIGluc3RydWN0aW9u IG51bWJlciBpcyAlZC5cbiIpLAorCQkgICAgIHJlY29yZF9pbnNuX251bSk7 Cit9CisKK3ZvaWQKK19pbml0aWFsaXplX3JlY29yZCAodm9pZCkKK3sKKyAg LyogSW5pdCByZWNvcmRfbWFza2FsbC4gICovCisgIGlmIChzaWdmaWxsc2V0 ICgmcmVjb3JkX21hc2thbGwpID09IC0xKQorICAgIHBlcnJvcl93aXRoX25h bWUgKF8oIlByb2Nlc3MgcmVjb3JkOiBzaWdmaWxsc2V0IGZhaWxlZCIpKTsK KworICAvKiBJbml0IHJlY29yZF9maXJzdC4gICovCisgIHJlY29yZF9maXJz dC5wcmV2ID0gTlVMTDsKKyAgcmVjb3JkX2ZpcnN0Lm5leHQgPSBOVUxMOwor ICByZWNvcmRfZmlyc3QudHlwZSA9IHJlY29yZF9lbmQ7CisgIHJlY29yZF9m aXJzdC51Lm5lZWRfZGFzbSA9IDA7CisKKyAgaW5pdF9yZWNvcmRfb3BzICgp OworICBhZGRfdGFyZ2V0ICgmcmVjb3JkX29wcyk7CisKKyAgYWRkX3NldHNo b3dfemludGVnZXJfY21kICgicmVjb3JkIiwgbm9fY2xhc3MsICZyZWNvcmRf ZGVidWcsCisJCQkgICAgXygiU2V0IGRlYnVnZ2luZyBvZiByZWNvcmQvcmVw bGF5IGZlYXR1cmUuIiksCisJCQkgICAgXygiU2hvdyBkZWJ1Z2dpbmcgb2Yg cmVjb3JkL3JlcGxheSBmZWF0dXJlLiIpLAorCQkJICAgIF8oIldoZW4gZW5h YmxlZCwgZGVidWdnaW5nIG91dHB1dCBmb3IgIgorCQkJICAgICAgInJlY29y ZC9yZXBsYXkgZmVhdHVyZSBpcyBkaXNwbGF5ZWQuIiksCisJCQkgICAgTlVM TCwgc2hvd19yZWNvcmRfZGVidWcsICZzZXRkZWJ1Z2xpc3QsCisJCQkgICAg JnNob3dkZWJ1Z2xpc3QpOworCisgIGFkZF9jb20gKCJyZWNvcmQiLCBjbGFz c19vYnNjdXJlLCBjbWRfcmVjb3JkX3N0YXJ0LAorCSAgIF8oIkFiYnJldmlh dGVkIGZvcm0gb2YgXCJ0YXJnZXQgcmVjb3JkXCIgY29tbWFuZC4iKSk7CisK KyAgYWRkX2NvbV9hbGlhcyAoInJlYyIsICJyZWNvcmQiLCBjbGFzc19vYnNj dXJlLCAxKTsKKworICAvKiBYWFg6IEkgdHJ5IHRvIHVzZSBzb21lIHNpbXBs ZSBjb21tYW5kcyBzdWNoIGFzICJkaXNjb25uZWN0IiBhbmQKKyAgICAgImRl dGFjaCIgdG8gc3VwcG9ydCB0aGlzIGZ1bmN0aW9ucy4gIEJ1dCB0aGVzZSBj b21tYW5kcyBhbGwgaGF2ZQorICAgICBvdGhlciBhZmZlY3QgdG8gR0RCIHN1 Y2ggYXMgY2FsbCBmdW5jdGlvbiAibm9fc2hhcmVkX2xpYnJhcmllcyIuCisg ICAgIFNvIEkgYWRkIHNwZWNpYWwgY29tbWFuZHMgdG8gR0RCLiAgKi8KKyAg YWRkX2NvbSAoImRlbHJlY29yZCIsIGNsYXNzX29ic2N1cmUsIGNtZF9yZWNv cmRfZGVsZXRlLAorCSAgIF8oIkRlbGV0ZSB0aGUgcmVzdCBvZiBleGVjdXRp b24gbG9nIGFuZCBzdGFydCByZWNvcmRpbmcgaXQgYW5ldy4iKSk7CisgIGFk ZF9jb21fYWxpYXMgKCJkciIsICJkZWxyZWNvcmQiLCBjbGFzc19vYnNjdXJl LCAxKTsKKyAgYWRkX2NvbSAoInN0b3ByZWNvcmQiLCBjbGFzc19vYnNjdXJl LCBjbWRfcmVjb3JkX3N0b3AsCisJICAgXygiU3RvcCB0aGUgcmVjb3JkL3Jl cGxheSB0YXJnZXQuIikpOworICBhZGRfY29tX2FsaWFzICgic3IiLCAic3Rv cHJlY29yZCIsIGNsYXNzX29ic2N1cmUsIDEpOworCisgIC8qIFJlY29yZCBp bnN0cnVjdGlvbnMgbnVtYmVyIGxpbWl0IGNvbW1hbmQuICAqLworICBhZGRf c2V0c2hvd19ib29sZWFuX2NtZCAoInJlY29yZC1zdG9wLWF0LWxpbWl0Iiwg bm9fY2xhc3MsCisJCQkgICAgJnJlY29yZF9zdG9wX2F0X2xpbWl0LAorCQkJ ICAgIF8oIlNldCB3aGV0aGVyIHJlY29yZC9yZXBsYXkgc3RvcCB3aGVuICIK KwkJCSAgICAgICJyZWNvcmQvcmVwbGF5IGJ1ZmZlciBiZWNvbWVzIGZ1bGwu IiksCisJCQkgICAgXygiU2hvdyB3aGV0aGVyIHJlY29yZC9yZXBsYXkgc3Rv cCB3aGVuICIKKwkJCSAgICAgICJyZWNvcmQvcmVwbGF5IGJ1ZmZlciBiZWNv bWVzIGZ1bGwuIiksCisJICAgICAgICAgICAgICAgICAgICBfKCJFbmFibGUg aXMgZGVmYXVsdCB2YWx1ZS5cbiIKKwkgICAgICAgICAgICAgICAgICAgICAg IldoZW4gZW5hYmxlZCwgaWYgdGhlIHJlY29yZC9yZXBsYXkgYnVmZmVyICIK KwkJCSAgICAgICJiZWNvbWVzIGZ1bGwsXG4iCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAiYXNrIHVzZXIgd2hhdCB0byBkby5cbiIKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICJXaGVuIGRpc2FibGVkLCBpZiB0 aGUgcmVjb3JkL3JlcGxheSBidWZmZXIgIgorCQkJICAgICAgImJlY29tZXMg ZnVsbCxcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZWxl dGUgaXQgYW5kIHN0YXJ0IG5ldyByZWNvcmRpbmcuIiksCisJCQkgICAgTlVM TCwgTlVMTCwgJnNldGxpc3QsICZzaG93bGlzdCk7CisgIGFkZF9zZXRzaG93 X3ppbnRlZ2VyX2NtZCAoInJlY29yZC1pbnNuLW51bWJlci1tYXgiLCBub19j bGFzcywKKwkJCSAgICAmcmVjb3JkX2luc25fbWF4X251bSwKKwkJCSAgICBf KCJTZXQgcmVjb3JkL3JlcGxheSBidWZmZXIgbGltaXQuIiksCisJCQkgICAg XygiU2hvdyByZWNvcmQvcmVwbGF5IGJ1ZmZlciBsaW1pdC4iKSwKKwkJCSAg ICBfKCJTZXQgdGhlIG1heGltdW0gbnVtYmVyIG9mIGluc3RydWN0aW9ucyB0 byBiZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3RvcmVk IGluIHRoZVxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJl Y29yZC9yZXBsYXkgYnVmZmVyLiAgIgorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIlplcm8gbWVhbnMgdW5saW1pdGVkIChkZWZhdWx0IDIwMDAw MCkuIiksCisJCQkgICAgc2V0X3JlY29yZF9pbnNuX21heF9udW0sCisJCQkg ICAgTlVMTCwgJnNldGxpc3QsICZzaG93bGlzdCk7CisgIGFkZF9pbmZvICgi cmVjb3JkLWluc24tbnVtYmVyIiwgc2hvd19yZWNvcmRfaW5zbl9udW1iZXIs CisJICAgIF8oIlNob3cgdGhlIGN1cnJlbnQgbnVtYmVyIG9mIGluc3RydWN0 aW9ucyBpbiB0aGUgIgorCSAgICAgICJyZWNvcmQvcmVwbGF5IGJ1ZmZlci4i KSk7Cit9Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjb3JkLmgKQEAgLTAsMCAr MSw4NyBAQAorLyogUHJvY2VzcyByZWNvcmQgYW5kIHJlcGxheSB0YXJnZXQg Zm9yIEdEQiwgdGhlIEdOVSBkZWJ1Z2dlci4KKworICAgQ29weXJpZ2h0IChD KSAyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBU aGlzIGZpbGUgaXMgcGFydCBvZiBHREIuCisKKyAgIFRoaXMgcHJvZ3JhbSBp cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv b3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhl IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBv ZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxh dGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRl ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0 IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp ZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAg IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJv Z3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5z ZXMvPi4gICovCisKKyNpZm5kZWYgX1JFQ09SRF9IXworI2RlZmluZSBfUkVD T1JEX0hfCisKKyNkZWZpbmUgVEFSR0VUX0lTX1BST0NFU1NfUkVDT1JEICAg XAorICAgICAoY3VycmVudF90YXJnZXQuYmVuZWF0aCA9PSAmcmVjb3JkX29w cykKKyNkZWZpbmUgUkVDT1JEX0lTX1JFUExBWSBcCisgICAgIChyZWNvcmRf bGlzdC0+bmV4dCB8fCBleGVjdXRpb25fZGlyZWN0aW9uID09IEVYRUNfUkVW RVJTRSkKKwordHlwZWRlZiBzdHJ1Y3QgcmVjb3JkX3JlZ19zCit7CisgIGlu dCBudW07CisgIGdkYl9ieXRlICp2YWw7Cit9IHJlY29yZF9yZWdfdDsKKwor dHlwZWRlZiBzdHJ1Y3QgcmVjb3JkX21lbV9zCit7CisgIENPUkVfQUREUiBh ZGRyOworICBpbnQgbGVuOworICBnZGJfYnl0ZSAqdmFsOworfSByZWNvcmRf bWVtX3Q7CisKK2VudW0gcmVjb3JkX3R5cGUKK3sKKyAgcmVjb3JkX2VuZCA9 IDAsCisgIHJlY29yZF9yZWcsCisgIHJlY29yZF9tZW0KK307CisKKy8qIFRo aXMgaXMgdGhlIGNvcmUgc3RydWN0IG9mIHJlY29yZCBmdW5jdGlvbi4KKwor ICAgQW4gZW50aXR5IG9mIHJlY29yZF90IGlzIGEgcmVjb3JkIG9mIHRoZSB2 YWx1ZSBjaGFuZ2Ugb2YgYSByZWdpc3RlcgorICAgKCJyZWNvcmRfcmVnIikg b3IgYSBwYXJ0IG9mIG1lbW9yeSAoInJlY29yZF9tZW0iKS4gIEFuZCBlYWNo CisgICBpbnN0cnVjdGlvbiBtdXN0IGhhcyBhIHJlY29yZF90ICgicmVjb3Jk X2VuZCIpIHRoYXQgcG9pbnRzIG91dCB0aGlzCisgICBpcyB0aGUgbGFzdCBy ZWNvcmRfdCBvZiB0aGlzIGluc3RydWN0aW9uLgorCisgICBFYWNoIHJlY29y ZF90IGlzIGxpbmtlZCB0byAicmVjb3JkX2xpc3QiIGJ5ICJwcmV2IiBhbmQg Im5leHQiLgorICovCit0eXBlZGVmIHN0cnVjdCByZWNvcmRfcworeworICBz dHJ1Y3QgcmVjb3JkX3MgKnByZXY7CisgIHN0cnVjdCByZWNvcmRfcyAqbmV4 dDsKKyAgZW51bSByZWNvcmRfdHlwZSB0eXBlOworICB1bmlvbgorICB7Cisg ICAgLyogcmVnICovCisgICAgcmVjb3JkX3JlZ190IHJlZzsKKyAgICAvKiBt ZW0gKi8KKyAgICByZWNvcmRfbWVtX3QgbWVtOworICAgIC8qIGVuZCAqLwor ICAgIGludCBuZWVkX2Rhc207CisgIH0gdTsKK30gcmVjb3JkX3Q7CisKK2V4 dGVybiBpbnQgcmVjb3JkX2RlYnVnOworZXh0ZXJuIHJlY29yZF90ICpyZWNv cmRfbGlzdDsKK2V4dGVybiByZWNvcmRfdCAqcmVjb3JkX2FyY2hfbGlzdF9o ZWFkOworZXh0ZXJuIHJlY29yZF90ICpyZWNvcmRfYXJjaF9saXN0X3RhaWw7 CitleHRlcm4gc3RydWN0IHJlZ2NhY2hlICpyZWNvcmRfcmVnY2FjaGU7CisK K2V4dGVybiBzdHJ1Y3QgdGFyZ2V0X29wcyByZWNvcmRfb3BzOworCitleHRl cm4gaW50IHJlY29yZF9hcmNoX2xpc3RfYWRkX3JlZyAoaW50IG51bSk7Citl eHRlcm4gaW50IHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoQ09SRV9BRERS IGFkZHIsIGludCBsZW4pOworZXh0ZXJuIGludCByZWNvcmRfYXJjaF9saXN0 X2FkZF9lbmQgKGludCBuZWVkX2Rhc20pOworZXh0ZXJuIHZvaWQgcmVjb3Jk X21lc3NhZ2UgKHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoKTsKK2V4dGVybiBz dHJ1Y3QgY2xlYW51cCAqIHJlY29yZF9nZGJfb3BlcmF0aW9uX2Rpc2FibGVf c2V0ICh2b2lkKTsKKworI2VuZGlmIC8qIF9SRUNPUkRfSF8gKi8K --0016e64fcc88d0a576046267e115--