From mboxrd@z Thu Jan 1 00:00:00 1970 From: Konrad Rzeszutek Wilk Subject: [PATCH v4 14/34] xen-xsplice: Tool to manipulate xsplice payloads Date: Tue, 15 Mar 2016 13:56:36 -0400 Message-ID: <1458064616-23101-15-git-send-email-konrad.wilk@oracle.com> References: <1458064616-23101-1-git-send-email-konrad.wilk@oracle.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta3.messagelabs.com ([195.245.230.39]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1aftGf-00019q-UK for xen-devel@lists.xenproject.org; Tue, 15 Mar 2016 18:00:30 +0000 In-Reply-To: <1458064616-23101-1-git-send-email-konrad.wilk@oracle.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: xen-devel@lists.xenproject.org, ross.lagerwall@citrix.com, konrad@kernel.org, andrew.cooper3@citrix.com, mpohlack@amazon.de, sasha.levin@oracle.com Cc: Wei Liu , Stefano Stabellini , Ian Jackson , Konrad Rzeszutek Wilk List-Id: xen-devel@lists.xenproject.org QSBzaW1wbGUgdG9vbCB0aGF0IGFsbG93cyBhbiBzeXN0ZW0gYWRtaW4gdG8gcGVyZm9ybQpiYXNp YyB4c3BsaWNlIG9wZXJhdGlvbnM6CgogLSBVcGxvYWQgYSB4c3BsaWNlIGZpbGUgKHdpdGggYW4g dW5pcXVlIG5hbWUpCiAtIExpc3QgYWxsIHRoZSB4c3BsaWNlIHBheWxvYWRzIGxvYWRlZC4KIC0g QXBwbHksIHJldmVydCwgcmVwbGFjZSwgdW5sb2FkLCBvciBjaGVjayB0aGUgcGF5bG9hZCB1c2lu ZyB0aGUKICAgdW5pcXVlIG5hbWUuCiAtIERvIGFsbCB0aHJlZSAtIHVwbG9hZCwgY2hlY2ssIGFu ZCBhcHBseSB0aGUKICAgcGF5bG9hZCBpbiBvbmUgZ28gKGxvYWQpLiBBbHNvIHdpbGwgdXNlIHRo ZSBuYW1lIG9mIHRoZQogICBmaWxlIGFzIHRoZSA8bmFtZT4KClNpZ25lZC1vZmYtYnk6IEtvbnJh ZCBSemVzenV0ZWsgV2lsayA8a29ucmFkLndpbGtAb3JhY2xlLmNvbT4KU2lnbmVkLW9mZi1ieTog Um9zcyBMYWdlcndhbGwgPHJvc3MubGFnZXJ3YWxsQGNpdHJpeC5jb20+CgotLS0KQ2M6IElhbiBK YWNrc29uIDxpYW4uamFja3NvbkBldS5jaXRyaXguY29tPgpDYzogU3RlZmFubyBTdGFiZWxsaW5p IDxzdGVmYW5vLnN0YWJlbGxpbmlAZXUuY2l0cml4LmNvbT4KQ2M6IFdlaSBMaXUgPHdlaS5saXUy QGNpdHJpeC5jb20+Cgp2MjoKIC0gUmVtb3ZlZCBSRVZFUlRFRCBzdGF0ZS4KIC0gRml4ZWQgYnVn cyBoYW5kbGluZyBYU1BMSUNFX1NUQVRVU19QUk9HUkVTUy4KIC0gU3BsaXQgc3RhdHVzIGludG8g c3RhdGUgYW5kIGVycm9yLgogICBBZGQgUkVQTEFDRSBhY3Rpb24uCnYzOgogLSBVdGlsaXplIHRo ZSB0aW1lb3V0IGFuZCB1c2UgdGhlIGRlZmF1bHQgb25lIChsZXQgdGhlIGh5cGVydmlzb3IKICAg cGljayBpdCkuCiAtIENoYW5nZSB0aGUgcy9hbGwvbG9hZCBhbmQgaW5mZXIgdGhlIDxpZD4gZnJv bSBuYW1lIG9mIGZpbGUuCnY0OgogLSBzL2lkL25hbWUvCiAtIERvbid0IHVzZSBoeXBlcmNhbGwg YnVmZmVyIGluIHVwbG9hZF9mdW5jLCBpbnN0ZWFkIGRvIGl0IGluIGxpYnhjCiAtIFJlbW92ZSB0 aGUgZGVidWcgcHJpbnRrLgp2NToKIC0gUmVtb3ZlIGdvdG8ncyAocGVyIFdlaSdzIHJldmlldykK IC0gVXNlIGZwcmludGYoc3RkZXJyIGluIGVycm9yIHBhdGhzLgogLSBBZGQgbG9jYWwgdmFyaWFi bGUgYmxvY2suCnY2OgogLSBTeW50YXgsIGV4cGFuZCBjb21tZW50LCBhbmQgZG9uJ3Qgb3Zlcndy aXRlIHJjIGlmIHhjX3hzcGxpY2VfdXBsb2FkIGZhaWxlZC4Kdjc6CiAtIFJlbW92ZSBMT0FERUQg c3RhdGUuIE9ubHkgaGF2ZSBDSEVDS0VEIHN0YXRlLgotLS0KIC5naXRpZ25vcmUgICAgICAgICAg ICAgICB8ICAgMSArCiB0b29scy9taXNjL01ha2VmaWxlICAgICAgfCAgIDQgKwogdG9vbHMvbWlz Yy94ZW4teHNwbGljZS5jIHwgNDYzICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrCiAzIGZpbGVzIGNoYW5nZWQsIDQ2OCBpbnNlcnRpb25zKCspCiBjcmVhdGUg bW9kZSAxMDA2NDQgdG9vbHMvbWlzYy94ZW4teHNwbGljZS5jCgpkaWZmIC0tZ2l0IGEvLmdpdGln bm9yZSBiLy5naXRpZ25vcmUKaW5kZXggOTFmNjkwYy4uNWNhZTkzNSAxMDA2NDQKLS0tIGEvLmdp dGlnbm9yZQorKysgYi8uZ2l0aWdub3JlCkBAIC0xODEsNiArMTgxLDcgQEAgdG9vbHMvbWlzYy94 Y19zaGFkb3cKIHRvb2xzL21pc2MveGVuX2NwdXBlcmYKIHRvb2xzL21pc2MveGVuLWRldGVjdAog dG9vbHMvbWlzYy94ZW4tdG1lbS1saXN0LXBhcnNlCit0b29scy9taXNjL3hlbi14c3BsaWNlCiB0 b29scy9taXNjL3hlbnBlcmYKIHRvb2xzL21pc2MveGVucG0KIHRvb2xzL21pc2MveGVuLWh2bWN0 eApkaWZmIC0tZ2l0IGEvdG9vbHMvbWlzYy9NYWtlZmlsZSBiL3Rvb2xzL21pc2MvTWFrZWZpbGUK aW5kZXggYTJlZjBlYy4uZTE5NTZmNiAxMDA2NDQKLS0tIGEvdG9vbHMvbWlzYy9NYWtlZmlsZQor KysgYi90b29scy9taXNjL01ha2VmaWxlCkBAIC0zMSw2ICszMSw3IEBAIElOU1RBTExfU0JJTiAg ICAgICAgICAgICAgICAgICArPSB4ZW5sb2NrcHJvZgogSU5TVEFMTF9TQklOICAgICAgICAgICAg ICAgICAgICs9IHhlbnBlcmYKIElOU1RBTExfU0JJTiAgICAgICAgICAgICAgICAgICArPSB4ZW5w bQogSU5TVEFMTF9TQklOICAgICAgICAgICAgICAgICAgICs9IHhlbndhdGNoZG9nZAorSU5TVEFM TF9TQklOICAgICAgICAgICAgICAgICAgICs9IHhlbi14c3BsaWNlCiBJTlNUQUxMX1NCSU4gKz0g JChJTlNUQUxMX1NCSU4teSkKIAogIyBFdmVyeXRoaW5nIHRvIGJlIGluc3RhbGxlZCBpbiBhIHBy aXZhdGUgYmluLwpAQCAtOTksNiArMTAwLDkgQEAgeGVuLW1mbmR1bXA6IHhlbi1tZm5kdW1wLm8K IHhlbndhdGNoZG9nZDogeGVud2F0Y2hkb2dkLm8KIAkkKENDKSAkKExERkxBR1MpIC1vICRAICQ8 ICQoTERMSUJTX2xpYnhlbmN0cmwpICQoQVBQRU5EX0xERkxBR1MpCiAKK3hlbi14c3BsaWNlOiB4 ZW4teHNwbGljZS5vCisJJChDQykgJChMREZMQUdTKSAtbyAkQCAkPCAkKExETElCU19saWJ4ZW5j dHJsKSAkKEFQUEVORF9MREZMQUdTKQorCiB4ZW4tbG93bWVtZDogeGVuLWxvd21lbWQubwogCSQo Q0MpICQoTERGTEFHUykgLW8gJEAgJDwgJChMRExJQlNfbGlieGVuZXZ0Y2huKSAkKExETElCU19s aWJ4ZW5jdHJsKSAkKExETElCU19saWJ4ZW5zdG9yZSkgJChBUFBFTkRfTERGTEFHUykKIApkaWZm IC0tZ2l0IGEvdG9vbHMvbWlzYy94ZW4teHNwbGljZS5jIGIvdG9vbHMvbWlzYy94ZW4teHNwbGlj ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiOTIyOGUKLS0tIC9kZXYv bnVsbAorKysgYi90b29scy9taXNjL3hlbi14c3BsaWNlLmMKQEAgLTAsMCArMSw0NjMgQEAKKy8q CisgKiBDb3B5cmlnaHQgKGMpIDIwMTYgT3JhY2xlIGFuZC9vciBpdHMgYWZmaWxpYXRlcy4gQWxs IHJpZ2h0cyByZXNlcnZlZC4KKyAqLworCisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxs aWJnZW4uaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1 ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN5cy9tbWFuLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQu aD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDx4ZW5jdHJsLmg+CisjaW5jbHVkZSA8 eGVuc3RvcmUuaD4KKworc3RhdGljIHhjX2ludGVyZmFjZSAqeGNoOworCit2b2lkIHNob3dfaGVs cCh2b2lkKQoreworICAgIGZwcmludGYoc3RkZXJyLAorICAgICAgICAgICAgInhlbi14c3BsaWNl OiBYc3BsaWNlIHRlc3QgdG9vbFxuIgorICAgICAgICAgICAgIlVzYWdlOiB4ZW4teHNwbGljZSA8 Y29tbWFuZD4gW2FyZ3NdXG4iCisgICAgICAgICAgICAiIDxuYW1lPiBBbiB1bmlxdWUgbmFtZSBv ZiBwYXlsb2FkLiBVcCB0byAlZCBjaGFyYWN0ZXJzLlxuIgorICAgICAgICAgICAgIkNvbW1hbmRz OlxuIgorICAgICAgICAgICAgIiAgaGVscCAgICAgICAgICAgICAgICAgICBkaXNwbGF5IHRoaXMg aGVscFxuIgorICAgICAgICAgICAgIiAgdXBsb2FkIDxuYW1lPiA8ZmlsZT4gICB1cGxvYWQgZmls ZSA8ZmlsZT4gd2l0aCA8bmFtZT4gbmFtZVxuIgorICAgICAgICAgICAgIiAgbGlzdCAgICAgICAg ICAgICAgICAgICBsaXN0IHBheWxvYWRzIHVwbG9hZGVkLlxuIgorICAgICAgICAgICAgIiAgYXBw bHkgPG5hbWU+ICAgICAgICAgICBhcHBseSA8bmFtZT4gcGF0Y2guXG4iCisgICAgICAgICAgICAi ICByZXZlcnQgPG5hbWU+ICAgICAgICAgIHJldmVydCBuYW1lIDxuYW1lPiBwYXRjaC5cbiIKKyAg ICAgICAgICAgICIgIHJlcGxhY2UgPG5hbWU+ICAgICAgICAgYXBwbHkgPG5hbWU+IHBhdGNoIGFu ZCByZXZlcnQgYWxsIG90aGVycy5cbiIKKyAgICAgICAgICAgICIgIHVubG9hZCA8bmFtZT4gICAg ICAgICAgdW5sb2FkIG5hbWUgPG5hbWU+IHBhdGNoLlxuIgorICAgICAgICAgICAgIiAgbG9hZCAg PGZpbGU+ICAgICAgICAgICB1cGxvYWQsIGNoZWNrIGFuZCBhcHBseSA8ZmlsZT4uXG4iCisgICAg ICAgICAgICAiICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgaXMgdGhlIDxmaWxlPiBuYW1l XG4iLAorICAgICAgICAgICAgWEVOX1hTUExJQ0VfTkFNRV9TSVpFKTsKK30KKworLyogd3JhcHBl ciBmdW5jdGlvbiAqLworc3RhdGljIGludCBoZWxwX2Z1bmMoaW50IGFyZ2MsIGNoYXIgKmFyZ3Zb XSkKK3sKKyAgICBzaG93X2hlbHAoKTsKKyAgICByZXR1cm4gMDsKK30KKworI2RlZmluZSBBUlJB WV9TSVpFKGEpIChzaXplb2YgKGEpIC8gc2l6ZW9mICgoYSlbMF0pKQorCitzdGF0aWMgY29uc3Qg Y2hhciAqc3RhdGUyc3RyKHVuc2lnbmVkIGludCBzdGF0ZSkKK3sKKyNkZWZpbmUgU1RBVEUoeCkg W1hTUExJQ0VfU1RBVEVfIyN4XSA9ICN4CisgICAgc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IG5h bWVzW10gPSB7CisgICAgICAgICAgICBTVEFURShDSEVDS0VEKSwKKyAgICAgICAgICAgIFNUQVRF KEFQUExJRUQpLAorICAgIH07CisjdW5kZWYgU1RBVEUKKyAgICBpZiAoc3RhdGUgPj0gQVJSQVlf U0laRShuYW1lcykgfHwgIW5hbWVzW3N0YXRlXSkKKyAgICAgICAgcmV0dXJuICJ1bmtub3duIjsK KworICAgIHJldHVybiBuYW1lc1tzdGF0ZV07Cit9CisKKy8qIFRoaXMgdmFsdWUgd2FzIGNob29z ZW4gYWRob2MuIEl0IGNvdWxkIGJlIDQyIHRvby4gKi8KKyNkZWZpbmUgTUFYX0xFTiAxMQorc3Rh dGljIGludCBsaXN0X2Z1bmMoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICB1bnNpZ25l ZCBpbnQgaWR4LCBkb25lLCBsZWZ0LCBpOworICAgIHhlbl94c3BsaWNlX3N0YXR1c190ICppbmZv ID0gTlVMTDsKKyAgICBjaGFyICpuYW1lID0gTlVMTDsKKyAgICB1aW50MzJfdCAqbGVuID0gTlVM TDsKKyAgICBpbnQgcmMgPSBFTk9NRU07CisKKyAgICBpZiAoIGFyZ2MgKQorICAgIHsKKyAgICAg ICAgc2hvd19oZWxwKCk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgaWR4ID0gbGVm dCA9IDA7CisgICAgaW5mbyA9IG1hbGxvYyhzaXplb2YoKmluZm8pICogTUFYX0xFTik7CisgICAg aWYgKCAhaW5mbyApCisgICAgICAgIHJldHVybiByYzsKKyAgICBuYW1lID0gbWFsbG9jKHNpemVv ZigqbmFtZSkgKiBYRU5fWFNQTElDRV9OQU1FX1NJWkUgKiBNQVhfTEVOKTsKKyAgICBpZiAoICFu YW1lICkKKyAgICB7CisgICAgICAgIGZyZWUoaW5mbyk7CisgICAgICAgIHJldHVybiByYzsKKyAg ICB9CisgICAgbGVuID0gbWFsbG9jKHNpemVvZigqbGVuKSAqIE1BWF9MRU4pOworICAgIGlmICgg IWxlbiApIHsKKyAgICAgICAgZnJlZShuYW1lKTsKKyAgICAgICAgZnJlZShpbmZvKTsKKyAgICAg ICAgcmV0dXJuIHJjOworICAgIH0KKworICAgIGZwcmludGYoc3Rkb3V0LCIgSUQgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzdGF0dXNcbiIKKyAgICAgICAgICAgICAgICAg ICAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS1c biIpOworICAgIGRvIHsKKyAgICAgICAgZG9uZSA9IDA7CisgICAgICAgIC8qIFRoZSBtZW1zZXQg aXMgZG9uZSB0byBjYXRjaCBlcnJvcnMuICovCisgICAgICAgIG1lbXNldChpbmZvLCAnQScsIHNp emVvZigqaW5mbykgKiBNQVhfTEVOKTsKKyAgICAgICAgbWVtc2V0KG5hbWUsICdCJywgc2l6ZW9m KCpuYW1lICogTUFYX0xFTiAqIFhFTl9YU1BMSUNFX05BTUVfU0laRSkpOworICAgICAgICBtZW1z ZXQobGVuLCAnQycsIHNpemVvZigqbGVuKSAqIE1BWF9MRU4pOworICAgICAgICByYyA9IHhjX3hz cGxpY2VfbGlzdCh4Y2gsIE1BWF9MRU4sIGlkeCwgaW5mbywgbmFtZSwgbGVuLCAmZG9uZSwgJmxl ZnQpOworICAgICAgICBpZiAoIHJjICkKKyAgICAgICAgeworICAgICAgICAgICAgZnByaW50Zihz dGRlcnIsICJGYWlsZWQgdG8gbGlzdCAlZC8lZDogJWQoJXMpIVxuIiwKKyAgICAgICAgICAgICAg ICAgICAgaWR4LCBsZWZ0LCBlcnJubywgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgICAgIGJy ZWFrOworICAgICAgICB9CisgICAgICAgIGZvciAoIGkgPSAwOyBpIDwgZG9uZTsgaSsrICkKKyAg ICAgICAgeworICAgICAgICAgICAgdW5zaWduZWQgaW50IGo7CisgICAgICAgICAgICB1aW50MzJf dCBzejsKKyAgICAgICAgICAgIGNoYXIgKnN0cjsKKworICAgICAgICAgICAgc3ogPSBsZW5baV07 CisgICAgICAgICAgICBzdHIgPSBuYW1lICsgKGkgKiBYRU5fWFNQTElDRV9OQU1FX1NJWkUpOwor ICAgICAgICAgICAgZm9yICggaiA9IHN6OyBqIDwgWEVOX1hTUExJQ0VfTkFNRV9TSVpFOyBqKysg KQorICAgICAgICAgICAgICAgIHN0cltqXSA9ICdcMCc7CisKKyAgICAgICAgICAgIHByaW50Zigi JS00MHN8ICVzIiwgc3RyLCBzdGF0ZTJzdHIoaW5mb1tpXS5zdGF0ZSkpOworICAgICAgICAgICAg aWYgKCBpbmZvW2ldLnJjICkKKyAgICAgICAgICAgICAgICBwcmludGYoIiAoJWQsICVzKVxuIiwg LWluZm9baV0ucmMsIHN0cmVycm9yKC1pbmZvW2ldLnJjKSk7CisgICAgICAgICAgICBlbHNlCisg ICAgICAgICAgICAgICAgcHV0cygiIik7CisgICAgICAgIH0KKyAgICAgICAgaWR4ICs9IGRvbmU7 CisgICAgfSB3aGlsZSAoIGxlZnQgKTsKKworICAgIGZyZWUobmFtZSk7CisgICAgZnJlZShpbmZv KTsKKyAgICBmcmVlKGxlbik7CisgICAgcmV0dXJuIHJjOworfQorI3VuZGVmIE1BWF9MRU4KKwor c3RhdGljIGludCBnZXRfbmFtZShpbnQgYXJnYywgY2hhciAqYXJndltdLCBjaGFyICpuYW1lKQor eworICAgIHNzaXplX3QgbGVuID0gc3RybGVuKGFyZ3ZbMF0pOworICAgIGlmICggbGVuID4gWEVO X1hTUExJQ0VfTkFNRV9TSVpFICkKKyAgICB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiSUQg TVVTVCBiZSAlZCBjaGFyYWN0ZXJzIVxuIiwgWEVOX1hTUExJQ0VfTkFNRV9TSVpFKTsKKyAgICAg ICAgZXJybm8gPSBFSU5WQUw7CisgICAgICAgIHJldHVybiBlcnJubzsKKyAgICB9CisgICAgLyog RG9uJ3Qgd2FudCBhbnkgZnVubnkgc3RyaW5ncyBmcm9tIHRoZSBzdGFjay4gKi8KKyAgICBtZW1z ZXQobmFtZSwgMCwgWEVOX1hTUExJQ0VfTkFNRV9TSVpFKTsKKyAgICBzdHJuY3B5KG5hbWUsIGFy Z3ZbMF0sIGxlbik7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdXBsb2FkX2Z1bmMo aW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBjaGFyICpmaWxlbmFtZTsKKyAgICBjaGFy IG5hbWVbWEVOX1hTUExJQ0VfTkFNRV9TSVpFXTsKKyAgICBpbnQgZmQgPSAwLCByYzsKKyAgICBz dHJ1Y3Qgc3RhdCBidWY7CisgICAgdW5zaWduZWQgY2hhciAqZmJ1ZjsKKyAgICBzc2l6ZV90IGxl bjsKKworICAgIGlmICggYXJnYyAhPSAyICkKKyAgICB7CisgICAgICAgIHNob3dfaGVscCgpOwor ICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgaWYgKCBnZXRfbmFtZShhcmdjLCBhcmd2 LCBuYW1lKSApCisgICAgICAgIHJldHVybiBFSU5WQUw7CisKKyAgICBmaWxlbmFtZSA9IGFyZ3Zb MV07CisgICAgZmQgPSBvcGVuKGZpbGVuYW1lLCBPX1JET05MWSk7CisgICAgaWYgKCBmZCA8IDAg KQorICAgIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDb3VsZCBub3Qgb3BlbiAlcywgZXJy b3I6ICVkKCVzKVxuIiwKKyAgICAgICAgICAgICAgICBmaWxlbmFtZSwgZXJybm8sIHN0cmVycm9y KGVycm5vKSk7CisgICAgICAgIHJldHVybiBlcnJubzsKKyAgICB9CisgICAgaWYgKCBzdGF0KGZp bGVuYW1lLCAmYnVmKSAhPSAwICkKKyAgICB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ291 bGQgbm90IGdldCByaWdodCBzaXplICVzLCBlcnJvcjogJWQoJXMpXG4iLAorICAgICAgICAgICAg ICAgIGZpbGVuYW1lLCBlcnJubywgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgY2xvc2UoZmQp OworICAgICAgICByZXR1cm4gZXJybm87CisgICAgfQorCisgICAgbGVuID0gYnVmLnN0X3NpemU7 CisgICAgZmJ1ZiA9IG1tYXAoMCwgbGVuLCBQUk9UX1JFQUQsIE1BUF9QUklWQVRFLCBmZCwgMCk7 CisgICAgaWYgKCBmYnVmID09IE1BUF9GQUlMRUQgKQorICAgIHsKKyAgICAgICAgZnByaW50Zihz dGRlcnIsIkNvdWxkIG5vdCBtYXA6ICVzLCBlcnJvcjogJWQoJXMpXG4iLAorICAgICAgICAgICAg ICAgIGZpbGVuYW1lLCBlcnJubywgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgY2xvc2UgKGZk KTsKKyAgICAgICAgcmV0dXJuIGVycm5vOworICAgIH0KKyAgICBwcmludGYoIlVwbG9hZGluZyAl cyAoJXp1IGJ5dGVzKVxuIiwgZmlsZW5hbWUsIGxlbik7CisgICAgcmMgPSB4Y194c3BsaWNlX3Vw bG9hZCh4Y2gsIG5hbWUsIGZidWYsIGxlbik7CisgICAgaWYgKCByYyApCisgICAgICAgIGZwcmlu dGYoc3RkZXJyLCAiVXBsb2FkIGZhaWxlZDogJXMsIGVycm9yOiAlZCglcykhXG4iLAorICAgICAg ICAgICAgICAgIGZpbGVuYW1lLCBlcnJubywgc3RyZXJyb3IoZXJybm8pKTsKKworICAgIGlmICgg bXVubWFwKCBmYnVmLCBsZW4pICkKKyAgICB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ291 bGQgbm90IHVubWFwIT8gZXJyb3I6ICVkKCVzKSFcbiIsCisgICAgICAgICAgICAgICAgZXJybm8s IHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIGlmICggIXJjICkKKyAgICAgICAgICAgIHJjID0g ZXJybm87CisgICAgfQorICAgIGNsb3NlKGZkKTsKKworICAgIHJldHVybiByYzsKK30KKworLyog VGhlc2UgTVVTVCBtYXRjaCB0byB0aGUgJ2FjdGlvbl9vcHRpb25zW10nIGFycmF5IHNsb3RzLiAq LworZW51bSB7CisgICAgQUNUSU9OX0FQUExZID0gMCwKKyAgICBBQ1RJT05fUkVWRVJUID0gMSwK KyAgICBBQ1RJT05fVU5MT0FEID0gMiwKKyAgICBBQ1RJT05fUkVQTEFDRSA9IDMsCit9OworCitz dHJ1Y3QgeworICAgIGludCBhbGxvdzsgLyogU3RhdGUgaXQgbXVzdCBiZSBpbiB0byBjYWxsIGZ1 bmN0aW9uLiAqLworICAgIGludCBleHBlY3RlZDsgLyogVGhlIHN0YXRlIHRvIGJlIGluIGFmdGVy IHRoZSBmdW5jdGlvbi4gKi8KKyAgICBjb25zdCBjaGFyICpuYW1lOworICAgIGludCAoKmZ1bmN0 aW9uKSh4Y19pbnRlcmZhY2UgKnhjaCwgY2hhciAqbmFtZSwgdWludDMyX3QgdGltZW91dCk7Cisg ICAgdW5zaWduZWQgaW50IGV4ZWN1dGVkOyAvKiBIYXMgdGhlIGZ1bmN0aW9uIGJlZW4gY2FsbGVk Py4gKi8KK30gYWN0aW9uX29wdGlvbnNbXSA9IHsKKyAgICB7ICAgLmFsbG93ID0gWFNQTElDRV9T VEFURV9DSEVDS0VELAorICAgICAgICAuZXhwZWN0ZWQgPSBYU1BMSUNFX1NUQVRFX0FQUExJRUQs CisgICAgICAgIC5uYW1lID0gImFwcGx5IiwKKyAgICAgICAgLmZ1bmN0aW9uID0geGNfeHNwbGlj ZV9hcHBseSwKKyAgICB9LAorICAgIHsgICAuYWxsb3cgPSBYU1BMSUNFX1NUQVRFX0FQUExJRUQs CisgICAgICAgIC5leHBlY3RlZCA9IFhTUExJQ0VfU1RBVEVfQ0hFQ0tFRCwKKyAgICAgICAgLm5h bWUgPSAicmV2ZXJ0IiwKKyAgICAgICAgLmZ1bmN0aW9uID0geGNfeHNwbGljZV9yZXZlcnQsCisg ICAgfSwKKyAgICB7ICAgLmFsbG93ID0gWFNQTElDRV9TVEFURV9DSEVDS0VELAorICAgICAgICAu ZXhwZWN0ZWQgPSAtRU5PRU5ULAorICAgICAgICAubmFtZSA9ICJ1bmxvYWQiLAorICAgICAgICAu ZnVuY3Rpb24gPSB4Y194c3BsaWNlX3VubG9hZCwKKyAgICB9LAorICAgIHsgICAuYWxsb3cgPSBY U1BMSUNFX1NUQVRFX0NIRUNLRUQsCisgICAgICAgIC5leHBlY3RlZCA9IFhTUExJQ0VfU1RBVEVf QVBQTElFRCwKKyAgICAgICAgLm5hbWUgPSAicmVwbGFjZSIsCisgICAgICAgIC5mdW5jdGlvbiA9 IHhjX3hzcGxpY2VfcmVwbGFjZSwKKyAgICB9LAorfTsKKworLyogR28gYXJvdW5kIDMwMCAqIDAu MSBzZWNvbmRzID0gMzAgc2Vjb25kcy4gKi8KKyNkZWZpbmUgUkVUUklFUyAzMDAKKy8qIGFrYSAw LjEgc2Vjb25kICovCisjZGVmaW5lIERFTEFZIDEwMDAwMAorCitpbnQgYWN0aW9uX2Z1bmMoaW50 IGFyZ2MsIGNoYXIgKmFyZ3ZbXSwgdW5zaWduZWQgaW50IGlkeCkKK3sKKyAgICBjaGFyIG5hbWVb WEVOX1hTUExJQ0VfTkFNRV9TSVpFXTsKKyAgICBpbnQgcmMsIG9yaWdpbmFsX3N0YXRlOworICAg IHhlbl94c3BsaWNlX3N0YXR1c190IHN0YXR1czsKKyAgICB1bnNpZ25lZCBpbnQgcmV0cnkgPSAw OworCisgICAgaWYgKCBhcmdjICE9IDEgKQorICAgIHsKKyAgICAgICAgc2hvd19oZWxwKCk7Cisg ICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBpZiAoIGlkeCA+PSBBUlJBWV9TSVpFKGFj dGlvbl9vcHRpb25zKSApCisgICAgICAgIHJldHVybiAtMTsKKworICAgIGlmICggZ2V0X25hbWUo YXJnYywgYXJndiwgbmFtZSkgKQorICAgICAgICByZXR1cm4gRUlOVkFMOworCisgICAgLyogQ2hl Y2sgaW5pdGlhbCBzdGF0dXMuICovCisgICAgcmMgPSB4Y194c3BsaWNlX2dldCh4Y2gsIG5hbWUs ICZzdGF0dXMpOworICAgIGlmICggcmMgKQorICAgIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIs ICIlcyBmYWlsZWQgdG8gZ2V0IHN0YXR1cyAocmM9JWQsICVzKSFcbiIsCisgICAgICAgICAgICAg ICAgbmFtZSwgLXJjLCBzdHJlcnJvcigtcmMpKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0K KyAgICBpZiAoIHN0YXR1cy5yYyA9PSAtRUFHQUlOICkKKyAgICB7CisgICAgICAgIGZwcmludGYo c3RkZXJyLCAiJXMgZmFpbGVkLiBPcGVyYXRpb24gYWxyZWFkeSBpbiBwcm9ncmVzc1xuIiwgbmFt ZSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBpZiAoIHN0YXR1cy5zdGF0ZSA9 PSBhY3Rpb25fb3B0aW9uc1tpZHhdLmV4cGVjdGVkICkKKyAgICB7CisgICAgICAgIHByaW50Zigi Tm8gYWN0aW9uIG5lZWRlZFxuIik7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIC8q IFBlcmZvcm0gYWN0aW9uLiAqLworICAgIGlmICggYWN0aW9uX29wdGlvbnNbaWR4XS5hbGxvdyAm IHN0YXR1cy5zdGF0ZSApCisgICAgeworICAgICAgICBwcmludGYoIlBlcmZvcm1pbmcgJXM6Iiwg YWN0aW9uX29wdGlvbnNbaWR4XS5uYW1lKTsKKyAgICAgICAgcmMgPSBhY3Rpb25fb3B0aW9uc1tp ZHhdLmZ1bmN0aW9uKHhjaCwgbmFtZSwgMCk7CisgICAgICAgIGlmICggcmMgKQorICAgICAgICB7 CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzIGZhaWxlZCB3aXRoICVkKCVzKVxuIiwg bmFtZSwgLXJjLCBzdHJlcnJvcigtcmMpKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAg ICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBwcmludGYoIiVzOiBpbiB3cm9u ZyBzdGF0ZSAoJXMpLCBleHBlY3RlZCAoJXMpXG4iLAorICAgICAgICAgICAgICAgbmFtZSwgc3Rh dGUyc3RyKHN0YXR1cy5zdGF0ZSksCisgICAgICAgICAgICAgICBzdGF0ZTJzdHIoYWN0aW9uX29w dGlvbnNbaWR4XS5leHBlY3RlZCkpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAg b3JpZ2luYWxfc3RhdGUgPSBzdGF0dXMuc3RhdGU7CisgICAgZG8geworICAgICAgICByYyA9IHhj X3hzcGxpY2VfZ2V0KHhjaCwgbmFtZSwgJnN0YXR1cyk7CisgICAgICAgIGlmICggcmMgKQorICAg ICAgICB7CisgICAgICAgICAgICByYyA9IC1lcnJubzsKKyAgICAgICAgICAgIGJyZWFrOworICAg ICAgICB9CisKKyAgICAgICAgaWYgKCBzdGF0dXMuc3RhdGUgIT0gb3JpZ2luYWxfc3RhdGUgKQor ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmICggc3RhdHVzLnJjICYmIHN0YXR1cy5yYyAh PSAtRUFHQUlOICkKKyAgICAgICAgeworICAgICAgICAgICAgcmMgPSBzdGF0dXMucmM7CisgICAg ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHByaW50ZigiLiIpOworICAgICAg ICBmZmx1c2goc3Rkb3V0KTsKKyAgICAgICAgdXNsZWVwKERFTEFZKTsKKyAgICB9IHdoaWxlICgg KytyZXRyeSA8IFJFVFJJRVMgKTsKKworICAgIGlmICggcmV0cnkgPj0gUkVUUklFUyApCisgICAg eworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBPcGVyYXRpb24gZGlkbid0IGNvbXBsZXRl IGFmdGVyIDMwIHNlY29uZHMuXG4iLCBuYW1lKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0K KyAgICBlbHNlCisgICAgeworICAgICAgICBpZiAoIHJjID09IDAgKQorICAgICAgICAgICAgcmMg PSBzdGF0dXMuc3RhdGU7CisKKyAgICAgICAgaWYgKCBhY3Rpb25fb3B0aW9uc1tpZHhdLmV4cGVj dGVkID09IHJjICkKKyAgICAgICAgICAgIHByaW50ZigiIGNvbXBsZXRlZFxuIik7CisgICAgICAg IGVsc2UgaWYgKCByYyA8IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVy ciwgIiVzIGZhaWxlZCB3aXRoICVkKCVzKVxuIiwgbmFtZSwgLXJjLCBzdHJlcnJvcigtcmMpKTsK KyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAg IHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IGluIHdyb25nIHN0YXRlICglcyks IGV4cGVjdGVkICglcylcbiIsCisgICAgICAgICAgICAgICBuYW1lLCBzdGF0ZTJzdHIocmMpLAor ICAgICAgICAgICAgICAgc3RhdGUyc3RyKGFjdGlvbl9vcHRpb25zW2lkeF0uZXhwZWN0ZWQpKTsK KyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAw OworfQorCitzdGF0aWMgaW50IGxvYWRfZnVuYyhpbnQgYXJnYywgY2hhciAqYXJndltdKQorewor ICAgIGludCByYzsKKyAgICBjaGFyICpuZXdfYXJndlsyXTsKKyAgICBjaGFyICpwYXRoLCAqbmFt ZSwgKmxhc3Rkb3Q7CisKKyAgICBpZiAoIGFyZ2MgIT0gMSApCisgICAgeworICAgICAgICBzaG93 X2hlbHAoKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICAvKiA8ZmlsZT4gKi8KKyAg ICBuZXdfYXJndlsxXSA9IGFyZ3ZbMF07CisKKyAgICAvKiBTeW50aGVzaXplIHRoZSA8aWQ+ICov CisgICAgcGF0aCA9IHN0cmR1cChhcmd2WzBdKTsKKworICAgIG5hbWUgPSBiYXNlbmFtZShwYXRo KTsKKyAgICBsYXN0ZG90ID0gc3RycmNocihuYW1lLCAnLicpOworICAgIGlmICggbGFzdGRvdCAh PSBOVUxMICkKKyAgICAgICAgKmxhc3Rkb3QgPSAnXDAnOworICAgIG5ld19hcmd2WzBdID0gbmFt ZTsKKworICAgIHJjID0gdXBsb2FkX2Z1bmMoMiAvKiA8aWQ+IDxmaWxlPiAqLywgbmV3X2FyZ3Yp OworICAgIGlmICggcmMgKQorICAgICAgICByZXR1cm4gcmM7CisKKyAgICByYyA9IGFjdGlvbl9m dW5jKDEgLyogb25seSA8aWQ+ICovLCBuZXdfYXJndiwgQUNUSU9OX0FQUExZKTsKKyAgICBpZiAo IHJjICkKKyAgICAgICAgYWN0aW9uX2Z1bmMoMSwgbmV3X2FyZ3YsIEFDVElPTl9VTkxPQUQpOwor CisgICAgZnJlZShwYXRoKTsKKyAgICByZXR1cm4gcmM7Cit9CisKKy8qCisgKiBUaGVzZSBhcmUg YWxzbyBmdW5jdGlvbnMgaW4gYWN0aW9uX29wdGlvbnMgdGhhdCBhcmUgY2FsbGVkIGluIGNhc2UK KyAqIG5vbmUgb2YgdGhlIG9uZXMgaW4gbWFpbl9vcHRpb25zIG1hdGNoLgorICovCitzdHJ1Y3Qg eworICAgIGNvbnN0IGNoYXIgKm5hbWU7CisgICAgaW50ICgqZnVuY3Rpb24pKGludCBhcmdjLCBj aGFyICphcmd2W10pOworfSBtYWluX29wdGlvbnNbXSA9IHsKKyAgICB7ICJoZWxwIiwgaGVscF9m dW5jIH0sCisgICAgeyAibGlzdCIsIGxpc3RfZnVuYyB9LAorICAgIHsgInVwbG9hZCIsIHVwbG9h ZF9mdW5jIH0sCisgICAgeyAibG9hZCIsIGxvYWRfZnVuYyB9LAorfTsKKworaW50IG1haW4oaW50 IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBpbnQgaSwgaiwgcmV0OworCisgICAgaWYgKCBh cmdjICA8PSAxICkKKyAgICB7CisgICAgICAgIHNob3dfaGVscCgpOworICAgICAgICByZXR1cm4g MDsKKyAgICB9CisgICAgZm9yICggaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG1haW5fb3B0aW9ucyk7 IGkrKyApCisgICAgICAgIGlmICghc3RybmNtcChtYWluX29wdGlvbnNbaV0ubmFtZSwgYXJndlsx XSwgc3RybGVuKGFyZ3ZbMV0pKSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgaWYgKCBpID09 IEFSUkFZX1NJWkUobWFpbl9vcHRpb25zKSApCisgICAgeworICAgICAgICBmb3IgKCBqID0gMDsg aiA8IEFSUkFZX1NJWkUoYWN0aW9uX29wdGlvbnMpOyBqKysgKQorICAgICAgICAgICAgaWYgKCFz dHJuY21wKGFjdGlvbl9vcHRpb25zW2pdLm5hbWUsIGFyZ3ZbMV0sIHN0cmxlbihhcmd2WzFdKSkp CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYgKCBqID09IEFSUkFZX1NJWkUo YWN0aW9uX29wdGlvbnMpICkKKyAgICAgICAgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIs ICJVbnJlY29nbmlzZWQgY29tbWFuZCAnJXMnIC0tIHRyeSAiCisgICAgICAgICAgICAgICAgICAg Iid4ZW4teHNwbGljZSBoZWxwJ1xuIiwgYXJndlsxXSk7CisgICAgICAgICAgICByZXR1cm4gMTsK KyAgICAgICAgfQorICAgIH0gZWxzZQorICAgICAgICBqID0gQVJSQVlfU0laRShhY3Rpb25fb3B0 aW9ucyk7CisKKyAgICB4Y2ggPSB4Y19pbnRlcmZhY2Vfb3BlbigwLDAsMCk7CisgICAgaWYgKCAh eGNoICkKKyAgICB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiZmFpbGVkIHRvIGdldCB0aGUg aGFuZGxlclxuIik7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGlmICggaSA9PSBB UlJBWV9TSVpFKG1haW5fb3B0aW9ucykgKQorICAgICAgICByZXQgPSBhY3Rpb25fZnVuYyhhcmdj IC0yLCBhcmd2ICsgMiwgaik7CisgICAgZWxzZQorICAgICAgICByZXQgPSBtYWluX29wdGlvbnNb aV0uZnVuY3Rpb24oYXJnYyAtMiwgYXJndiArIDIpOworCisgICAgeGNfaW50ZXJmYWNlX2Nsb3Nl KHhjaCk7CisKKyAgICByZXR1cm4gISFyZXQ7Cit9CisKKy8qCisgKiBMb2NhbCB2YXJpYWJsZXM6 CisgKiBtb2RlOiBDCisgKiBjLWZpbGUtc3R5bGU6ICJCU0QiCisgKiBjLWJhc2ljLW9mZnNldDog NAorICogdGFiLXdpZHRoOiA0CisgKiBpbmRlbnQtdGFicy1tb2RlOiBuaWwKKyAqIEVuZDoKKyAq LwotLSAKMi41LjAKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW4ub3JnCmh0dHA6 Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo=