From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S964813AbXBFAGr (ORCPT ); Mon, 5 Feb 2007 19:06:47 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S964830AbXBFAGr (ORCPT ); Mon, 5 Feb 2007 19:06:47 -0500 Received: from web26913.mail.ukl.yahoo.com ([217.146.177.80]:21964 "HELO web26913.mail.ukl.yahoo.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with SMTP id S964813AbXBFAGo (ORCPT ); Mon, 5 Feb 2007 19:06:44 -0500 DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=s1024; d=yahoo.fr; h=X-YMail-OSG:Received:X-Mailer:Date:From:Subject:To:MIME-Version:Content-Type:Message-ID; b=WkEXeb44LDWXrO2Iki5XrkpZiPr63gbjTL/zmqYQzxODyrZDBABRcbbwPqhN9Bhep7508LTouIHoqzif9H9w6fvyzvbTiO0ZFIQPFHsaLKv7jLxzpy28e646UpAGh5pwkyqUa56yGSvShl2UcbeO8A1zoUBsfs/unWE27FHLEUY=; X-YMail-OSG: JeSFRHkVM1kC3v4JXUGbUuHxoemDf7rtBuIQ4kAphS9rLAwAhtTejS816gKHJflS6ML20HswTRTiYPW6iSkAfZK_SL_pwJ73Y58XeDQJKB9nsfg4CJKs09SptoIddmMlflLBZyaQoZO5 X-Mailer: YahooMailRC/368.3 YahooMailWebService/0.6.132.7 Date: Mon, 5 Feb 2007 23:59:58 +0000 (GMT) From: Etienne Lorrain Subject: [PATCH] Compressed ia32 ELF file generation for loading by Gujin 3/3 To: linux-kernel@vger.kernel.org MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="0-74559014-1170719998=:33867" Message-ID: <829689.33867.qm@web26913.mail.ukl.yahoo.com> Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org --0-74559014-1170719998=:33867 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: quoted-printable The two standalone executable...=0A=0A=0A=0A=0A=09=0A=0A=09=0A=09=09=0A____= _______________________________________________________________________ =0A= D=E9couvrez une nouvelle fa=E7on d'obtenir des r=E9ponses =E0 toutes vos qu= estions ! =0AProfitez des connaissances, des opinions et des exp=E9riences = des internautes sur Yahoo! Questions/R=E9ponses =0Ahttp://fr.answers.yahoo.= com --0-74559014-1170719998=:33867 Content-Type: application/octet-stream; name="=?utf-8?q?gujin-patch-2.6.20-3?=" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="=?utf-8?q?gujin-patch-2.6.20-3?=" ZGlmZiAtdXByTiAtWCBsaW51eC0yLjYuMjAvRG9jdW1lbnRhdGlvbi9kb250 ZGlmZiBsaW51eC0yLjYuMjAvc2NyaXB0cy9nemNvcHkuYyBsaW51eC0yLjYu MjAtZ3VqaW4vc2NyaXB0cy9nemNvcHkuYwotLS0gbGludXgtMi42LjIwL3Nj cmlwdHMvZ3pjb3B5LmMJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAg KzAxMDAKKysrIGxpbnV4LTIuNi4yMC1ndWppbi9zY3JpcHRzL2d6Y29weS5j CTIwMDctMDItMDUgMjE6Mjc6MDUuMDAwMDAwMDAwICswMDAwCkBAIC0wLDAg KzEsMTAwNiBAQAorLyoKKyAqIGd6Y29weTogdXRpbGl0eSB0byBjb3B5IChv bmx5KSBHWmlwIGZpbGVzLCBwb3NzaWJseSBkaXNwbGF5aW5nIG9yCisgKiBt b2RpZnlpbmcgdGhlaXIgaGVhZGVyLgorICoKKyAqIENvcHlyaWdodCAoQykg MjAwNCBFdGllbm5lIExvcnJhaW4sIGZpbmdlcnByaW50ICgyRDNBRjNFQSk6 CisgKiAgIDI0NzEgREY2NCA5REVFIDQxRDQgQzhEQiA5NjY3IEU0NDggRkY4 QyAyRDNBIEYzRUEKKyAqIEUtTWFpbDogZXRpZW5uZSBkb3QgbG9ycmFpbiBh dCBndWppbiBkb3Qgb3JnCisgKgorICogICBUaGlzIHNvZnR3YXJlIGlzIHBy b3ZpZGVkICdhcy1pcycsIHdpdGhvdXQgYW55IGV4cHJlc3Mgb3IgaW1wbGll ZAorICogIHdhcnJhbnR5LiAgSW4gbm8gZXZlbnQgd2lsbCB0aGUgYXV0aG9y cyBiZSBoZWxkIGxpYWJsZSBmb3IgYW55IGRhbWFnZXMKKyAqICBhcmlzaW5n IGZyb20gdGhlIHVzZSBvZiB0aGlzIHNvZnR3YXJlLgorICoKKyAqICBQZXJt aXNzaW9uIGlzIGdyYW50ZWQgdG8gYW55b25lIHRvIHVzZSB0aGlzIHNvZnR3 YXJlIGZvciBhbnkgcHVycG9zZSwKKyAqICBpbmNsdWRpbmcgY29tbWVyY2lh bCBhcHBsaWNhdGlvbnMsIGFuZCB0byBhbHRlciBpdCBhbmQgcmVkaXN0cmli dXRlIGl0CisgKiAgZnJlZWx5LCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcg cmVzdHJpY3Rpb25zOgorICoKKyAqICAxLiBUaGUgb3JpZ2luIG9mIHRoaXMg c29mdHdhcmUgbXVzdCBub3QgYmUgbWlzcmVwcmVzZW50ZWQ7IHlvdSBtdXN0 IG5vdAorICogICAgIGNsYWltIHRoYXQgeW91IHdyb3RlIHRoZSBvcmlnaW5h bCBzb2Z0d2FyZS4gSWYgeW91IHVzZSB0aGlzIHNvZnR3YXJlCisgKiAgICAg aW4gYSBwcm9kdWN0LCBhbiBhY2tub3dsZWRnbWVudCBpbiB0aGUgcHJvZHVj dCBkb2N1bWVudGF0aW9uIHdvdWxkIGJlCisgKiAgICAgYXBwcmVjaWF0ZWQg YnV0IGlzIG5vdCByZXF1aXJlZC4KKyAqICAyLiBBbHRlcmVkIHNvdXJjZSB2 ZXJzaW9ucyBtdXN0IGJlIHBsYWlubHkgbWFya2VkIGFzIHN1Y2gsIGFuZCBt dXN0IG5vdCBiZQorICogICAgIG1pc3JlcHJlc2VudGVkIGFzIGJlaW5nIHRo ZSBvcmlnaW5hbCBzb2Z0d2FyZS4KKyAqICAzLiBUaGlzIG5vdGljZSBtYXkg bm90IGJlIHJlbW92ZWQgb3IgYWx0ZXJlZCBmcm9tIGFueSBzb3VyY2UgZGlz dHJpYnV0aW9uLgorICoKKyAqICAgVGhlIGRhdGEgZm9ybWF0IHVzZWQgYnkg dGhlIHpsaWIgbGlicmFyeSBpcyBkZXNjcmliZWQgYnkgUkZDcyAoUmVxdWVz dCBmb3IKKyAqICBDb21tZW50cykgMTk1MCB0byAxOTUyIGluIHRoZSBmaWxl cyBodHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmMxOTUwLnR4dAorICogICh6 bGliIGZvcm1hdCksIHJmYzE5NTEudHh0IChkZWZsYXRlIGZvcm1hdCkgYW5k IHJmYzE5NTIudHh0IChnemlwIGZvcm1hdCkuCisgKi8KKworLyoKKyAqIFRP RE86IE1hbmFnZSAoZXh0cmFjdC9yZW1vdmUvaW5zZXJ0Li4uKSBjb25jYXRl bmF0ZWQgWklQIGZpbGVzLgorICoKKyAqIENoYW5nZWxvZzoKKyAqIDE1Lzkv MjAwMTogRXRpZW5uZSBMb3JyYWluLiBJbml0aWFsIHJlbGVhc2UgZm9yIHRo ZSBHdWppbiBib290bG9hZGVyLgorICogMjMvOC8yMDAyOiBFdGllbm5lIExv cnJhaW4uICctcycgLT4gJy1jJywgb25seSBvbmUgaW5wdXQvb3V0cHV0IGZp bGUKKyAqIDEwLzkvMjAwNDogRXRpZW5uZSBMb3JyYWluLiBGb3JtYWwgQlNE LWxpa2UgbGljZW5zZSByZWxlYXNlICYgY29ycmVjdCBtaW5pYnVnLgorICog MjgvOS8yMDA1OiBFdGllbm5lIExvcnJhaW4uIHJlbW92ZSB3YXJuaW5nIGxp bmUgODM4OiBbdW5zaWduZWRdIGNoYXIgKnB0ciA9IGZ1bGxfY29udGVudDsK KyAqCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8bWFs bG9jLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzeXMvc3Rh dC5oPgkJLyogc3RhdCgpICovCisjaW5jbHVkZSA8dW5pc3RkLmg+CQkvKiBz dGF0KCkgKi8KKworI2lmIDAKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNlbHNl CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHN0cmxlbihjb25zdCBjaGFyICpz dHIpCit7CisJY29uc3QgY2hhciAqcHRyID0gc3RyOworCXdoaWxlICgqcHRy KQorCQlwdHIrKzsKKwlyZXR1cm4gcHRyIC0gc3RyOworfQorCitzdGF0aWMg aW5saW5lIHZvaWQgbXlfc3RyY3B5KGNoYXIgKmRzdCwgY29uc3QgY2hhciAq c3JjKQoreworCXdoaWxlICgqc3JjKQorCQkqZHN0KysgPSAqc3JjKys7CisJ KmRzdCA9ICpzcmM7CQkvKiBjb3B5IHRoZSB6ZXJvICovCit9CisjZGVmaW5l IHN0cmNweSBteV9zdHJjcHkKKworc3RhdGljIGlubGluZSB2b2lkIG15X3N0 cmNhdChjaGFyICpkc3QsIGNvbnN0IGNoYXIgKnNyYykKK3sKKwlkc3QgKz0g c3RybGVuKGRzdCk7CisJc3RyY3B5KGRzdCwgc3JjKTsKK30KKyNkZWZpbmUg c3RyY2F0IG15X3N0cmNhdAorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHN0 cmNtcChjb25zdCBjaGFyICpzMSwgY29uc3QgY2hhciAqczIpCit7CisJd2hp bGUgKCpzMSAmJiAqczEgPT0gKnMyKSB7CisJCXMxKys7CisJCXMyKys7CisJ fQorCXJldHVybiAoKnMxICE9ICpzMik7Cit9CisjZW5kaWYKKworI2RlZmlu ZSBTVFIgc3RhdGljIGNvbnN0IGNoYXIKKworU1RSIHVzYWdlW10gPSAiZ3pj b3B5OiB1dGlsaXR5IHRvIGNvcHkgKG9ubHkpIEdaaXAgZmlsZXMsIHBvc3Np Ymx5IGRpc3BsYXlpbmdcbiIKKwkgICAgICAiICAgICAgICBvciBtb2RpZnlp bmcgdGhlaXIgaGVhZGVyLlxuIgorICAgICJDb3B5cmlnaHQgMjAwMyBFdGll bm5lIExvcnJhaW4sIEJTRC1saWtlIGxpY2Vuc2UuXG4iCisgICAgIlVTQUdF OlxuIgorICAgICIgICAgZ3pjb3B5IC1oICAgICAgICAgICAgICAtPiBkaXNw bGF5IHRoaXMgaGVscFxuIgorICAgICIgICAgZ3pjb3B5IC1WICAgICAgICAg ICAgICAtPiBkaXNwbGF5IHRoZSB2ZXJzaW9uXG4iCisgICAgIiAgICBnemNv cHkgLXYgICAgICAgICAgICAgIC0+IGJlIHZlcmJvc2VcbiIKKyAgICAiICAg IGd6Y29weSAtYyBpbmZpbGUuZ3ogICAgLT4gc2hvdyB0aGUgY29tbWVudC4g KC1jMCBmb3IgcmF3IGZvcm0pXG4iCS8qIHdhcyAtcyAqLworICAgICIgICAg Z3pjb3B5IC1jPScnIGluZmlsZS5neiBvdXRmaWxlLmd6ICAgIC0+IHNldCAo Y2xlYXIgaWYgJycpIHRoZSBjb21tZW50XG4iCisgICAgIiAgICBnemNvcHkg LWE9XCI8YSBjb21tZW50PlwiIGluLmd6IG91dC5neiAtPiBhZGQvYXBwZW5k IGEgY29tbWVudFxuIgorICAgICIgICAgZ3pjb3B5IC1wPSc8YSBjb21tZW50 PicgaW4uZ3ogb3V0Lmd6IC0+IGFkZC9wcmVwZW5kIGEgY29tbWVudC5cbiIK KyAgICAiICAgIGd6Y29weSAtayBpbmZpbGUuZ3ogICAgLT4gc2hvdyB0aGUg aGVhZGVyIENSQy4gKC1rMCBmb3IgcmF3IGZvcm0pXG4iCisgICAgIiAgICBn emNvcHkgLWs9ezAsMX0gaW5maWxlLmd6IG91dGZpbGUuZ3ogIC0+IChkZSlh Y3RpdmF0ZSB0aGUgaGVhZGVyIENSQ1xuIgorICAgICIgICAgZ3pjb3B5IC1i IGluZmlsZS5neiAgICAtPiBzaG93IHRoZSB0ZXh0L2JpbmFyeSBmbGFnXG4i CisgICAgIiAgICBnemNvcHkgLWI9ezAsMX0gaW5maWxlLmd6IG91dGZpbGUu Z3ogIC0+IHNldCB0aGUgZmxhZzogYmluYXJ5PTAvdGV4dD0xXG4iCisgICAg IiAgICBnemNvcHkgLW4gaW5maWxlLmd6ICAgIC0+IHNob3cgdGhlIG9yaWdp bmFsIG5hbWUuICgtbjAgZm9yIHJhdyBmb3JtKVxuIgorICAgICIgICAgZ3pj b3B5IC1uPWZpbGVuYW1lIGluLmd6IG91dC5neiAgICAgICAtPiBzZXQgKGNs ZWFyIGlmICcnKSBvcmlnaW5hbCBuYW1lXG4iCisgICAgIk5PVEU6XG4iCisg ICAgIiBVc2UgbXVsdGlwbGUgY29tbWFuZDogZ3pjb3B5IC1jPSAtYT0nY29t JyAtYT0nbScgLXBsPSdlbnQnIGluLmd6IG91dC5neiAuXG4iCisgICAgIiBV c2Ugb3B0aW9uIC1he3MsbCx0fSBvciAtcHtzLGwsdH0gdG8gY2hlY2svZm9y Y2UgYSB7c3BhY2UsbGluZWZlZWQsdGFifVxuIgorICAgICIgIGluIGJldHdl ZW4gY29tbWVudCBwYXJ0cy4gVXNlIGZpbGVuYW1lIFwiLVwiIGZvciBzdGRp biBhbmQvb3Igc3Rkb3V0LlxuIgorICAgICIgVXNlIHRoZSAtZiBvcHRpb24g dG8gZm9yY2Ugb3ZlcndyaXRpbmcgb3V0cHV0IGZpbGUsIG9yIGlmIHlvdSB3 YW50XG4iCisgICAgIiB0aGUgb3V0cHV0IGluIHRoZSBpbnB1dCBmaWxlIC0g eW91IHRoZW4gbmVlZCBhIGxvdCBvZiB2aXJ0dWFsIG1lbW9yeS5cbiI7CisK K1NUUiB2ZXJzaW9uW10gPSAiZ3pjb3B5IHZlcnNpb24gMS4yIChDKSAyMDAz IEV0aWVubmUgTG9ycmFpbiwgQlNELWxpa2UgbGljZW5zZS4iOworU1RSIHNo b3dfdGV4dGZsYWdzX3RleHRfbXNnW10gPSAiXCIlc1wiIGlzIHByb2JhYmx5 IGEgdGV4dCBmaWxlXG4iOworU1RSIHNob3dfdGV4dGZsYWdzX2JpbmFyeV9t c2dbXSA9ICJcIiVzXCIgaXMgcHJvYmFibHkgYSBiaW5hcnkgZmlsZVxuIjsK K1NUUiBzaG93X2hlYWRlcl9jcmNfbXNnW10gPSAiXCIlc1wiIGhlYWRlciBD UkMxNiBpcyAweCVYLlxuIjsKK1NUUiBub19DUkNfdG9fc2hvd19tc2dbXSA9 ICJcIiVzXCIgZG9lcyBub3QgY29udGFpbiBhbnkgaGVhZGVyIENSQy5cbiI7 CitTVFIgc2hvd19uYW1lX21zZ1tdID0gIlwiJXNcIiBvcmlnaW5hbCBuYW1l OiBcIiVzXCJcbiI7CitTVFIgbm9fbmFtZV90b19zaG93X21zZ1tdID0gIlwi JXNcIiBkb2VzIG5vdCBjb250YWluIGFueSBvcmlnaW5hbCBuYW1lLlxuIjsK K1NUUiBzaG93X2NvbW1lbnRfbXNnW10gPSAiXCIlc1wiIGNvbW1lbnQ6IFwi JXNcIlxuIjsKK1NUUiBub19jb21tZW50X3RvX3Nob3dfbXNnW10gPSAiXCIl c1wiIGRvZXMgbm90IGNvbnRhaW4gYW55IGNvbW1lbnQuXG4iOworCisjZGVm aW5lIFBSSU5URVJSKGZvcm1hdCwgYXJncy4uLikgZG8geyBcCisJaWYgKGVy cm5vKSBwZXJyb3IgKCJnemNvcHkiKTsJCVwKKwlmcHJpbnRmIChzdGRlcnIs ICJnemNvcHk6ICIpOwkJXAorCWZwcmludGYgKHN0ZGVyciwgZm9ybWF0ICwg IyMgYXJncyk7CVwKKwlmcHJpbnRmIChzdGRlcnIsICJcbiIpOwkJCVwKKwl9 IHdoaWxlICgwKQorCisjZGVmaW5lIEVOREhMUAkiLCB0cnk6IGd6Y29weSAt aCIKKworU1RSIHVua25vd25fYWN0aW9uW10gPSAidW5yZWNvZ25pc2VkIG9w dGlvbiAtJWMiIEVOREhMUDsKK1NUUiBtYWxmb3JtZWRfY3JjX3BhcmFtW10g PSAiaGVhZGVyIGNyYyBvcHRpb24gaXMgbmVpdGhlciAiCisJCQkJImVuYWJs ZSAoLWs9MSkgbm9yIGRpc2FibGUgKC1rPTApIiBFTkRITFA7CitTVFIgbWFs Zm9ybWVkX3BhcmFtW10gPSAibm8gcGFyYW1ldGVyIGFmdGVyIC0lYz0gb3B0 aW9uIiBFTkRITFA7CitTVFIgdG9vX21hbnlfcGFyYW1bXSA9ICJ0b28gbWFu eSBwYXJhbWV0ZXJzOiBcIiVzXCIiIEVOREhMUDsKK1NUUiB1bmtub3duX2Nv bW1lbnRbXSA9ICJubyBjb21tZW50IHRvIHByZS9hcHBlbmQiIEVOREhMUDsK K1NUUiBub19pbnB1dF9maWxlW10gPSAibm8gaW5wdXQgZmlsZSIgRU5ESExQ OworU1RSIG5vX291dHB1dF9maWxlW10gPSAibm8gb3V0cHV0IGZpbGUiIEVO REhMUDsKK1NUUiBjYW5ub3Rfb3Blbl9pbnB1dF9maWxlW10gPSAiY2Fubm90 IG9wZW4gaW5wdXQgZmlsZSBcIiVzXCIuIjsKK1NUUiBub3RfZ3ppcF9maWxl W10gPSAiaW5wdXQgZmlsZSBcIiVzXCIgaXMgbm90IGEgZ3ppcCBmaWxlLCAi CisJCQkic2lnbmF0dXJlOiAweCVYLiI7CitTVFIgYmFkX2hlYWRlcl9jcmNb XSA9ICJiYWQgaGVhZGVyIGNyYzMyOiBpcyAweCVYLCAiICJzaG91bGQgYmUg MHglWC4iOworU1RSIG5vdF9lbm91Z2hfbWVtb3J5W10gPSAibm90IGVub3Vn aCBtZW1vcnkuIjsKK1NUUiBjYW5ub3Rfb3Blbl9vdXRwdXRfZmlsZVtdID0g ImNhbm5vdCBvcGVuIGlucHV0IGZpbGUgXCIlc1wiLiI7CitTVFIgb3V0Zmls ZV9hbHJlYWR5X2V4aXN0c1tdID0gIm91dHB1dCBmaWxlIFwiJXNcIiBhbHJl YWR5IGV4aXN0cyBhbmQgIgorCQkJCSJvcHRpb24gLWYgbm90IHNwZWNpZmll ZC5cbiI7CitTVFIgY2Fubm90X3dyaXRlX3RvX2ZpbGVbXSA9ICJjYW5ub3Qg d3JpdGUgdG8gZmlsZSBcIiVzXCIuIjsKK1NUUiByZWFkX2lucHV0X2ZpbGVf ZXJyb3JbXSA9ICJlcnJvciByZWFkaW5nIGZyb20gZmlsZSBcIiVzXCIuIjsK K1NUUiBjYW5ub3RfY2xvc2VfaW5wdXRfZmlsZVtdID0gImNhbm5vdCBjbG9z ZSBpbnB1dCBmaWxlIFwiJXNcIi4iOworU1RSIGNhbm5vdF9jbG9zZV9vdXRw dXRfZmlsZVtdID0gImNhbm5vdCBjbG9zZSBvdXRwdXQgZmlsZSBcIiVzXCIu IjsKKworI2RlZmluZSBWRVJCT1NFKGZvcm1hdCwgYXJncy4uLikgZG8geyBc CisJaWYgKHZlcmJvc2UpCQkJCVwKKwkgICAgZnByaW50ZiAoc3RkZXJyLCBm b3JtYXQgLCAjIyBhcmdzKTsJXAorCX0gd2hpbGUgKDApCisKK1NUUiB0cmVh dGluZ19pbnRwdXRfZmlsZVtdID0gInRyZWF0aW5nIFwiJXNcIiBhcyBpbnB1 dCBmaWxlLlxuIjsKK1NUUiBzdGFuZGFydF9pbnB1dFtdID0gInN0YW5kYXJ0 IGlucHV0IjsKK1NUUiBzdGFuZGFydF9vdXRwdXRbXSA9ICJzdGFuZGFydCBv dXRwdXQiOworU1RSIGV4dHJhX2ZpZWxkX3ByZXNlbnRbXSA9ICJleHRyYSBm aWVsZCBvZiAldSBieXRlcyBwcmVzZW50LlxuIjsKK1NUUiBvcmlnaW5hbF9u YW1lW10gPSAib3JpZ2luYWwgbmFtZTogXCIlc1wiLlxuIjsKK1NUUiBjb21t ZW50X3ByZXNlbnRbXSA9ICJjb21tZW50OiBcIiVzXCIuXG4iOworU1RSIGhl YWRlcl9jcmNfcHJlc2VudFtdID0gImhlYWRlciBDUkMxNiBwcmVzZW50OiAw eCVYLlxuIjsKK1NUUiB0cmVhdGluZ19vdXRwdXRfZmlsZVtdID0gInRyZWF0 aW5nIFwiJXNcIiBhcyBvdXRwdXQgZmlsZS5cbiI7CitTVFIgZW5hYmxpbmdf aGVhZGVyX2NyY1tdID0gImVuYWJsaW5nIGhlYWRlciBDUkMuXG4iOworU1RS IGRpc2FibGluZ19oZWFkZXJfY3JjW10gPSAiZGlzYWJsaW5nIGhlYWRlciBD UkMuXG4iOworU1RSIHJlbW92aW5nX2NvbW1lbnRbXSA9ICJyZW1vdmluZyBj b21tZW50LlxuIjsKK1NUUiByZXBsYWNpbmdfY29tbWVudFtdID0gInJlcGxh Y2luZyBjb21tZW50IHdpdGggXCIlc1wiLlxuIjsKK1NUUiBhZGRpbmdfY29t bWVudFtdID0gImFkZGluZyBjb21tZW50IFwiJXNcIi5cbiI7CitTVFIgYXBw ZW5kaW5nX2NvbW1lbnRbXSA9ICJhcHBlbmRpbmcgY29tbWVudCBcIiVzXCIu XG4iOworU1RSIHByZXBlbmRpbmdfY29tbWVudFtdID0gInByZXBlbmRpbmcg Y29tbWVudCBcIiVzXCIuXG4iOworU1RSIG5ld19oZWFkZXJfY3JjW10gPSAi bmV3IGhlYWRlciBDUkMxNjogMHglWC5cbiI7CitTVFIgcmVtb3ZpbmdfbmFt ZVtdID0gInJlbW92aW5nIHRoZSBvcmlnaW5hbCBuYW1lIGZpZWxkLlxuIjsK K1NUUiBjaGFuZ2luZ19uYW1lW10gPSAiY2hhbmdpbmcgdGhlIG9yaWdpbmFs IG5hbWUgZmllbGQgdG8gXCIlc1wiLlxuIjsKK1NUUiBzZXRfcHJvYmFibHl0 ZXh0X2ZsYWdbXSA9ICJzZXQgdGhlIHByb2JhYmx5IEFTQ0lJL3RleHQgZmxh Z3MuXG4iOworU1RSIGNsZWFyX3Byb2JhYmx5dGV4dF9mbGFnW10gPSAiY2xl YXIgdGhlIHByb2JhYmx5IEFTQ0lJL3RleHQgZmxhZ3MuXG4iOworCisjdW5k ZWYgU1RSCisKK2VudW0gbWFpbl9yZXR1cm5lZF9lbnVtIHsKKwl3YXJuX2Vt cHR5X2NvbW1lbnQgPSAxLAorCXdhcm5fbm9fY29tbWVudCA9IDIsCisJZXJy X25vbmUgPSAwLAorCWVycl90b29fbWFueV9wYXJhbSA9IC0xLAorCWVycl91 bmtub3duX2NvbW1lbnQgPSAtMiwKKwllcnJfdW5rbm93bl9hY3Rpb24gPSAt MywKKwllcnJfbWFsZm9ybWVkX3BhcmFtID0gLTQsCisJZXJyX21hbGZvcm1l ZF9jcmNfcGFyYW0gPSAtNSwKKwllcnJfbm9faW5wdXRfZmlsZSA9IC02LAor CWVycl9ub19vdXRwdXRfZmlsZSA9IC03LAorCWVycl9jYW5ub3Rfb3Blbl9p bnB1dF9maWxlID0gLTgsCisJZXJyX25vdF9nemlwX2ZpbGUgPSAtOSwKKwll cnJfYmFkX2hlYWRlcl9jcmMgPSAtMTAsCisJZXJyX25vdF9lbm91Z2hfbWVt b3J5ID0gLTExLAorCWVycl9jYW5ub3Rfb3Blbl9vdXRwdXRfZmlsZSA9IC0x MiwKKwllcnJfb3V0ZmlsZV9hbHJlYWR5X2V4aXN0cyA9IC0xMywKKwllcnJf Y2Fubm90X3dyaXRlX3RvX2ZpbGUgPSAtMTQsCisJZXJyX3JlYWRfaW5wdXRf ZmlsZV9lcnJvciA9IC0xNSwKKwllcnJfY2Fubm90X2Nsb3NlX2lucHV0X2Zp bGUgPSAtMTYsCisJZXJyX2Nhbm5vdF9jbG9zZV9vdXRwdXRfZmlsZSA9IC0x NworfTsKKworLyogVGhlIEd6aXAgaGVhZGVyICh3aXRoIHVuc2lnbmVkIGNo YXIgZmxhZ3MpOiAqLworc3RydWN0IGd6aGVhZGVyX3N0ciB7CisJdW5zaWdu ZWQgc2hvcnQgc2lnbmF0dXJlXzB4OEIxRjsKKwl1bnNpZ25lZCBjaGFyIGNv bXByZXNzaW9uX21ldGhvZDsJLyogPVpfREVGTEFURUQgKi8KKwl1bnNpZ25l ZCBjaGFyIGZsYWdzOworI2RlZmluZSBGTEFHU19hc2NpaQkJMHgwMQkvKiBm aWxlIHByb2JhYmx5IGFzY2lpIHRleHQgKi8KKyNkZWZpbmUgRkxBR1NfaGVh ZGVyX2NyYwkweDAyCS8qIGhlYWRlciBDUkMgcHJlc2VudCAqLworI2RlZmlu ZSBGTEFHU19leHRyYV9maWVsZAkweDA0CS8qIGV4dHJhIGZpZWxkIHByZXNl bnQgKi8KKyNkZWZpbmUgRkxBR1Nfb3JpZ19uYW1lCQkweDA4CS8qIG9yaWdp bmFsIGZpbGUgbmFtZSBwcmVzZW50ICovCisjZGVmaW5lIEZMQUdTX2NvbW1l bnQJCTB4MTAJLyogZmlsZSBjb21tZW50IHByZXNlbnQgKi8KKyNkZWZpbmUg RkxBR1NfdW5rbm93bgkJMHhFMAkvKiByZXNlcnZlZCAqLworCXVuc2lnbmVk IG1vZGlmX3RpbWU7CS8qIG5iIHNlY29uZCBzaW5jZSAxLzEvMTk3MCAqLwor CXVuc2lnbmVkIGNoYXIgZXh0cmFmbGFnczsKKyNkZWZpbmUgRVhUUkFGTEFH U19tYXhfY29tcHJlc3MJMgorI2RlZmluZSBFWFRSQUZMQUdTX2Zhc3RfYWxn bwk0CisJdW5zaWduZWQgY2hhciBvcGVyYXRpbmdfc3lzdGVtOworfSBfX2F0 dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8qIFRoZSBvbmx5IGNvbXByZXNz aW9uIG1ldGhvZCByZWNvZ25pc2VkIGJ5IEd6aXA6ICovCisjZGVmaW5lIFpf REVGTEFURUQJOAorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNyYzMyKHVu c2lnbmVkIGNyYywgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCB1bnNpZ25l ZCBsZW4pCit7CisJY29uc3QgdW5zaWduZWQgY2hhciAqZW5kID0gYnVmICsg bGVuOworCisJaWYgKGJ1ZiA9PSAwKQorCQlyZXR1cm4gMEw7CisKKwljcmMg PSB+Y3JjOworCXdoaWxlIChidWYgPCBlbmQpIHsKKwkJdW5zaWduZWQgYyA9 IChjcmMgXiAqYnVmKyspICYgMHhmZjsKKwkJdW5zaWduZWQgc2hvcnQgazsK KyNkZWZpbmUgUE9MWQkweGVkYjg4MzIwTAkvKiBwb2x5bm9taWFsIGV4Y2x1 c2l2ZS1vciBwYXR0ZXJuICovCisJCWZvciAoayA9IDg7IGsgIT0gMDsgay0t KQorCQkJYyA9IGMgJiAxID8gKGMgPj4gMSkgXiBQT0xZIDogYyA+PiAxOwor CQljcmMgPSBjIF4gKGNyYyA+PiA4KTsKKwl9CisJcmV0dXJuIH5jcmM7Cit9 CisKK3N0YXRpYyB1bnNpZ25lZCBpbml0aGVhZGVyX2NyYzMyKHN0cnVjdCBn emhlYWRlcl9zdHIgKmhkcikKK3sKKwl1bnNpZ25lZCBjcmMgPSBjcmMzMigw LCAwLCAwKTsKKwlyZXR1cm4gY3JjMzIoY3JjLCAodW5zaWduZWQgY2hhciAq KWhkciwgc2l6ZW9mKHN0cnVjdCBnemhlYWRlcl9zdHIpKTsKK30KKworc3Rh dGljIHVuc2lnbmVkIGFkZGJ5dGVfY3JjMzIodW5zaWduZWQgY3JjLCBpbnQg dmFsKQoreworCXVuc2lnbmVkIGNoYXIgdG1wID0gdmFsOworCisJcmV0dXJu IGNyYzMyKGNyYywgJnRtcCwgMSk7Cit9CisKK2ludCBtYWluKGludCBhcmdj LCBjaGFyICoqYXJndikKK3sKKwljaGFyIC8qICpwcm9nbmFtZSA9ICphcmd2 LCAqLyBoZWxwX29wdGlvbltdID0gIi1oIiwgKmhlbHBfb3B0aW9uX3B0ciA9 IGhlbHBfb3B0aW9uOworCisJZW51bSBtYWluX3JldHVybmVkX2VudW0gcmV0 dXJuZWQgPSBlcnJfbm9uZTsKKworCWNoYXIgKmluZmlsZW5hbWUgPSAwLCAq b3V0ZmlsZW5hbWUgPSAwOworCUZJTEUgKmluZmlsZSA9IE5VTEwsICpvdXRm aWxlID0gTlVMTDsKKworCWludCB2ZXJib3NlID0gMCwgc2hvd19uYW1lID0g MCwgc2hvd19jb21tZW50ID0gMCwgb3ZlcndyaXRlID0gMCwKKwkgICAgc2hv d19oZWFkZXJfY3JjID0gMCwgc2hvd190ZXh0X2ZsYWcgPSAwLAorCSAgICBz ZXRfdGV4dF9mbGFnID0gLTEsIGFjdGl2YXRlX2hlYWRlcl9jcmMgPSAtMTsK KworCXN0cnVjdCBnemhlYWRlcl9zdHIgaGVhZGVyOworCXVuc2lnbmVkIGhl YWRlcl9jcmMgPSAwLCBjYWxjdWxhdGVkX2hlYWRlcl9jcmM7CisJdW5zaWdu ZWQgc2hvcnQgZXh0cmFmaWVsZF9sZW4gPSAwOworCWNoYXIgKmV4dHJhZmll bGQgPSAwOworCWNoYXIgKm5hbWUgPSAwLCAqY29tbWVudCA9IDA7CisKKwlj aGFyICpuZXdjb21tZW50ID0gMCwgKm5ld3ByZWNvbW1lbnQgPSAwLCAqbmV3 cG9zdGNvbW1lbnQgPSAwLCAqbmV3bmFtZSA9IDA7CisJY2hhciBjaGVja3By ZXNwYyA9IDAsIGNoZWNrcG9zdHNwYyA9IDA7CisJY2hhciAqcHRyOworCWlu dCBjcHQ7CisKKwlpZiAoYXJnYyA9PSAxKSB7CisJCWFyZ2MgPSAyOworCQlh cmd2ID0gJmhlbHBfb3B0aW9uX3B0cjsKKwl9IGVsc2UgeworCQlhcmdjLS07 CisJCWFyZ3YrKzsKKwl9CisKKwlmb3IgKGNwdCA9IDA7IGNwdCA8IGFyZ2M7 IGNwdCsrKSB7CisJCWlmIChhcmd2W2NwdF1bMF0gPT0gJy0nICYmIGFyZ3Zb Y3B0XVsxXSAhPSAnXDAnKSB7CisJCQlzd2l0Y2ggKGFyZ3ZbY3B0XVsxXSkg eworCQkJY2FzZSAnVic6CisJCQkJcHJpbnRmKCIlc1xuIiwgdmVyc2lvbik7 CisJCQkJcmV0dXJuIGVycl9ub25lOworCQkJY2FzZSAnaCc6CisJCQkJcHJp bnRmKCIlc1xuIiwgdXNhZ2UpOworCQkJCXJldHVybiBlcnJfbm9uZTsKKwkJ CWNhc2UgJ3YnOgorCQkJCXZlcmJvc2UgPSAxOworCQkJCWJyZWFrOworCQkJ Y2FzZSAnZic6CisJCQkJaWYgKGFyZ3ZbY3B0XVsyXSA9PSAnXDAnKQorCQkJ CQlvdmVyd3JpdGUgPSAxOworCQkJCWJyZWFrOworCQkJY2FzZSAnYic6CisJ CQkJaWYgKGFyZ3ZbY3B0XVsyXSA9PSAnXDAnKSB7CisJCQkJCXNob3dfdGV4 dF9mbGFnID0gMTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCWlmIChhcmd2 W2NwdF1bMl0gPT0gJzAnKSB7CisJCQkJCXNob3dfdGV4dF9mbGFnID0gMjsJ LyogcmF3IGZvcm0gKi8KKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCWlmIChh cmd2W2NwdF1bMl0gIT0gJz0nCisJCQkJICAgIHx8IChhcmd2W2NwdF1bM10g IT0gJzAnICYmIGFyZ3ZbY3B0XVszXSAhPSAnMScpKSB7CisJCQkJCVBSSU5U RVJSKG1hbGZvcm1lZF9wYXJhbSwgYXJndltjcHRdWzFdKTsKKwkJCQkJcmV0 dXJuIGVycl9tYWxmb3JtZWRfcGFyYW07CisJCQkJfQorCQkJCXNldF90ZXh0 X2ZsYWcgPSAoYXJndltjcHRdWzNdID09ICcxJyk7CisJCQkJYnJlYWs7CisJ CQljYXNlICdrJzoKKwkJCQlpZiAoYXJndltjcHRdWzJdID09ICdcMCcpIHsK KwkJCQkJc2hvd19oZWFkZXJfY3JjID0gMTsKKwkJCQkJYnJlYWs7CisJCQkJ fQorCQkJCWlmIChhcmd2W2NwdF1bMl0gPT0gJzAnKSB7CisJCQkJCXNob3df aGVhZGVyX2NyYyA9IDI7CS8qIHJhdyBmb3JtICovCisJCQkJCWJyZWFrOwor CQkJCX0KKwkJCQlpZiAoYXJndltjcHRdWzJdICE9ICc9JworCQkJCSAgICB8 fCAoYXJndltjcHRdWzNdICE9ICcwJyAmJiBhcmd2W2NwdF1bM10gIT0gJzEn KSkgeworCQkJCQlQUklOVEVSUihtYWxmb3JtZWRfY3JjX3BhcmFtKTsKKwkJ CQkJcmV0dXJuIGVycl9tYWxmb3JtZWRfY3JjX3BhcmFtOworCQkJCX0KKwkJ CQlhY3RpdmF0ZV9oZWFkZXJfY3JjID0gKGFyZ3ZbY3B0XVszXSA9PSAnMScp OworCQkJCWJyZWFrOworCQkJY2FzZSAnbic6CisJCQkJaWYgKGFyZ3ZbY3B0 XVsyXSA9PSAnXDAnKSB7CisJCQkJCXNob3dfbmFtZSA9IDE7CisJCQkJCWJy ZWFrOworCQkJCX0KKwkJCQlpZiAoYXJndltjcHRdWzJdID09ICcwJykgewor CQkJCQlzaG93X25hbWUgPSAyOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJ aWYgKGFyZ3ZbY3B0XVsyXSAhPSAnPScpIHsKKwkJCQkJUFJJTlRFUlIobWFs Zm9ybWVkX3BhcmFtLCBhcmd2W2NwdF1bMV0pOworCQkJCQlyZXR1cm4gZXJy X21hbGZvcm1lZF9wYXJhbTsKKwkJCQl9CisJCQkJbmV3bmFtZSA9ICZhcmd2 W2NwdF1bM107CisJCQkJYnJlYWs7CisJCQljYXNlICdjJzoKKwkJCQlpZiAo YXJndltjcHRdWzJdID09ICdcMCcpIHsKKwkJCQkJc2hvd19jb21tZW50ID0g MTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCWlmIChhcmd2W2NwdF1bMl0g PT0gJzAnKSB7CisJCQkJCXNob3dfY29tbWVudCA9IDI7CisJCQkJCWJyZWFr OworCQkJCX0KKwkJCQlpZiAoYXJndltjcHRdWzJdICE9ICc9JykgeworCQkJ CQlQUklOVEVSUihtYWxmb3JtZWRfcGFyYW0sIGFyZ3ZbY3B0XVsxXSk7CisJ CQkJCXJldHVybiBlcnJfbWFsZm9ybWVkX3BhcmFtOworCQkJCX0KKwkJCQlu ZXdjb21tZW50ID0gJmFyZ3ZbY3B0XVszXTsKKwkJCQlicmVhazsKKwkJCWNh c2UgJ3AnOnsKKwkJCQkJdW5zaWduZWQgbGVuOworCQkJCQl1bnNpZ25lZCBj aGFyIGNoZWNrc3BjOworCQkJCQljaGFyICpzdGFydDsKKworCQkJCQlsZW4g PSAyOworCQkJCQlzd2l0Y2ggKGFyZ3ZbY3B0XVtsZW5dKSB7CisJCQkJCWNh c2UgJ3MnOgorCQkJCQkJY2hlY2tzcGMgPSAnICc7CisJCQkJCQlsZW4rKzsK KwkJCQkJCWJyZWFrOworCQkJCQljYXNlICdsJzoKKwkJCQkJCWNoZWNrc3Bj ID0gJ1xuJzsKKwkJCQkJCWxlbisrOworCQkJCQkJYnJlYWs7CisJCQkJCWNh c2UgJ3QnOgorCQkJCQkJY2hlY2tzcGMgPSAnXHQnOworCQkJCQkJbGVuKys7 CisJCQkJCQlicmVhazsKKwkJCQkJZGVmYXVsdDoKKwkJCQkJY2FzZSAnPSc6 CisJCQkJCQljaGVja3NwYyA9ICdcMCc7CisJCQkJCQlicmVhazsKKwkJCQkJ fQorCisJCQkJCWlmIChhcmd2W2NwdF1bbGVuKytdICE9ICc9JykgeworCQkJ CQkJUFJJTlRFUlIobWFsZm9ybWVkX3BhcmFtLCBhcmd2W2NwdF1bMV0pOwor CQkJCQkJcmV0dXJuIGVycl9tYWxmb3JtZWRfcGFyYW07CisJCQkJCX0KKwkJ CQkJc3RhcnQgPSAmYXJndltjcHRdW2xlbl07CisJCQkJCWxlbiA9IHN0cmxl bihzdGFydCkgKyAxOworCQkJCQlpZiAoKnN0YXJ0ID09IDApIHsKKwkJCQkJ CWlmIChuZXdwcmVjb21tZW50ID09IDApCisJCQkJCQkJY2hlY2twcmVzcGMg PSBjaGVja3NwYzsKKwkJCQkJfSBlbHNlIGlmIChuZXdwcmVjb21tZW50ID09 IDApIHsKKwkJCQkJCW5ld3ByZWNvbW1lbnQgPSBtYWxsb2MobGVuKTsKKwkJ CQkJCWlmIChuZXdwcmVjb21tZW50ID09IDApCisJCQkJCQkJZ290byBsYWJl bF9ub3RfZW5vdWdoX21lbW9yeTsKKwkJCQkJCWNoZWNrcHJlc3BjID0gY2hl Y2tzcGM7CisJCQkJCQlzdHJjcHkobmV3cHJlY29tbWVudCwgc3RhcnQpOwor CQkJCQl9IGVsc2UgeworCQkJCQkJY2hhciAqdG1wID0gbWFsbG9jKHN0cmxl bihuZXdwcmVjb21tZW50KQorCQkJCQkJCQkJICsgbGVuICsgMSk7CisJCQkJ CQlpZiAodG1wID09IDApCisJCQkJCQkJZ290byBsYWJlbF9ub3RfZW5vdWdo X21lbW9yeTsKKwkJCQkJCXN0cmNweSh0bXAsIHN0YXJ0KTsKKwkJCQkJCS8q IGxhc3QgY2hhcjogKi8KKwkJCQkJCXB0ciA9ICZ0bXBbbGVuIC0gMl07CisJ CQkJCQlpZiAoY2hlY2tzcGMgIT0gJ1wwJyAmJiAqcHRyICE9IGNoZWNrc3Bj CisJCQkJCQkJJiYgbmV3cHJlY29tbWVudFswXSAhPSBjaGVja3NwYykKKwkJ CQkJCQkqKytwdHIgPSBjaGVja3NwYzsKKwkJCQkJCXB0cisrOworCQkJCQkJ c3RyY3B5KHB0ciwgbmV3cHJlY29tbWVudCk7CisJCQkJCQlmcmVlKG5ld3By ZWNvbW1lbnQpOworCQkJCQkJbmV3cHJlY29tbWVudCA9IHRtcDsKKwkJCQkJ fQorCQkJCX0KKwkJCQlicmVhazsKKwkJCWNhc2UgJ2EnOnsKKwkJCQkJdW5z aWduZWQgbGVuOworCQkJCQl1bnNpZ25lZCBjaGFyIGNoZWNrc3BjOworCQkJ CQljaGFyICpzdGFydDsKKworCQkJCQlsZW4gPSAyOworCQkJCQlzd2l0Y2gg KGFyZ3ZbY3B0XVtsZW5dKSB7CisJCQkJCWNhc2UgJ3MnOgorCQkJCQkJY2hl Y2tzcGMgPSAnICc7CisJCQkJCQlsZW4rKzsKKwkJCQkJCWJyZWFrOworCQkJ CQljYXNlICdsJzoKKwkJCQkJCWNoZWNrc3BjID0gJ1xuJzsKKwkJCQkJCWxl bisrOworCQkJCQkJYnJlYWs7CisJCQkJCWNhc2UgJ3QnOgorCQkJCQkJY2hl Y2tzcGMgPSAnXHQnOworCQkJCQkJbGVuKys7CisJCQkJCQlicmVhazsKKwkJ CQkJY2FzZSAnPSc6CisJCQkJCWRlZmF1bHQ6CisJCQkJCQljaGVja3NwYyA9 ICdcMCc7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCisJCQkJCWlmIChhcmd2 W2NwdF1bbGVuKytdICE9ICc9JykgeworCQkJCQkJUFJJTlRFUlIobWFsZm9y bWVkX3BhcmFtLCBhcmd2W2NwdF1bMV0pOworCQkJCQkJcmV0dXJuIGVycl9t YWxmb3JtZWRfcGFyYW07CisJCQkJCX0KKwkJCQkJc3RhcnQgPSAmYXJndltj cHRdW2xlbl07CisJCQkJCWxlbiA9IHN0cmxlbihzdGFydCkgKyAxOworCQkJ CQlpZiAoKnN0YXJ0ID09IDApIHsKKwkJCQkJCWlmIChuZXdwb3N0Y29tbWVu dCA9PSAwKQorCQkJCQkJCWNoZWNrcG9zdHNwYyA9IGNoZWNrc3BjOworCQkJ CQl9IGVsc2UgaWYgKG5ld3Bvc3Rjb21tZW50ID09IDApIHsKKwkJCQkJCW5l d3Bvc3Rjb21tZW50ID0gbWFsbG9jKGxlbik7CisJCQkJCQlpZiAobmV3cG9z dGNvbW1lbnQgPT0gMCkKKwkJCQkJCQlnb3RvIGxhYmVsX25vdF9lbm91Z2hf bWVtb3J5OworCQkJCQkJY2hlY2twb3N0c3BjID0gY2hlY2tzcGM7CisJCQkJ CQlzdHJjcHkobmV3cG9zdGNvbW1lbnQsIHN0YXJ0KTsKKwkJCQkJfSBlbHNl IHsKKwkJCQkJCXB0ciA9IHJlYWxsb2MobmV3cG9zdGNvbW1lbnQsCisJCQkJ CQkJIHN0cmxlbihuZXdwb3N0Y29tbWVudCkgKyBsZW4gKyAxKTsKKwkJCQkJ CWlmIChwdHIgPT0gMCkKKwkJCQkJCQlnb3RvIGxhYmVsX25vdF9lbm91Z2hf bWVtb3J5OworCQkJCQkJbmV3cG9zdGNvbW1lbnQgPSBwdHI7CisJCQkJCQkv KiBsYXN0IGNoYXI6ICovCisJCQkJCQlwdHIgPSAmbmV3cG9zdGNvbW1lbnRb c3RybGVuKG5ld3Bvc3Rjb21tZW50KSAtIDFdOworCQkJCQkJaWYgKGNoZWNr c3BjICE9ICdcMCcgJiYgKnB0ciAhPSBjaGVja3NwYworCQkJCQkJICAgICYm ICpzdGFydCAhPSBjaGVja3NwYykKKwkJCQkJCQkqKytwdHIgPSBjaGVja3Nw YzsKKwkJCQkJCXB0cisrOworCQkJCQkJc3RyY3B5KHB0ciwgc3RhcnQpOwor CQkJCQl9CisJCQkJfQorCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlQ UklOVEVSUih1bmtub3duX2FjdGlvbiwgYXJndltjcHRdWzFdKTsKKwkJCQly ZXR1cm4gZXJyX3Vua25vd25fYWN0aW9uOworCQkJfQorCQl9IGVsc2UgaWYg KGluZmlsZW5hbWUgPT0gMCkgeworCQkJaW5maWxlbmFtZSA9IGFyZ3ZbY3B0 XTsKKwkJfSBlbHNlIGlmIChvdXRmaWxlbmFtZSA9PSAwKSB7CisJCQlvdXRm aWxlbmFtZSA9IGFyZ3ZbY3B0XTsKKwkJfSBlbHNlIHsKKwkJCVBSSU5URVJS KHRvb19tYW55X3BhcmFtLCBhcmd2W2NwdF0pOworCQkJcmV0dXJuIGVycl90 b29fbWFueV9wYXJhbTsKKwkJfQorCX0KKworCS8qCisJICogQ2hlY2sgb3B0 aW9uIHZhbGlkaXR5OgorCSAqLworCWlmIChpbmZpbGVuYW1lID09IDApIHsK KwkJUFJJTlRFUlIobm9faW5wdXRfZmlsZSk7CisJCXJldHVybiBlcnJfbm9f aW5wdXRfZmlsZTsKKwl9CisKKwlpZiAobmV3bmFtZSB8fCBuZXdjb21tZW50 IHx8IG5ld3Bvc3Rjb21tZW50IHx8IG5ld3ByZWNvbW1lbnQKKwkJfHwgYWN0 aXZhdGVfaGVhZGVyX2NyYyAhPSAtMSB8fCBzZXRfdGV4dF9mbGFnICE9IC0x KSB7CisJCWlmIChvdXRmaWxlbmFtZSA9PSAwKSB7CisJCQlpZiAob3Zlcndy aXRlKSB7CisJCQkJb3V0ZmlsZW5hbWUgPSBpbmZpbGVuYW1lOworCQkJfSBl bHNlIHsKKwkJCQlQUklOVEVSUihub19vdXRwdXRfZmlsZSk7CisJCQkJcmV0 dXJuIGVycl9ub19vdXRwdXRfZmlsZTsKKwkJCX0KKwkJfQorCX0KKworCS8q CisJICogUmVhZCB0aGUgaW5wdXQgZmlsZToKKwkgKi8KKwlpZiAoIXN0cmNt cChpbmZpbGVuYW1lLCAiLSIpKSB7CisJCWluZmlsZSA9IHN0ZGluOworCQlW RVJCT1NFKHRyZWF0aW5nX2ludHB1dF9maWxlLCBzdGFuZGFydF9pbnB1dCk7 CisJfSBlbHNlIHsKKwkJaW5maWxlID0gZm9wZW4oaW5maWxlbmFtZSwgInIi KTsKKwkJaWYgKGluZmlsZSA9PSBOVUxMKSB7CisJCQlQUklOVEVSUihjYW5u b3Rfb3Blbl9pbnB1dF9maWxlLCBpbmZpbGVuYW1lKTsKKwkJCXJldHVybiBl cnJfY2Fubm90X29wZW5faW5wdXRfZmlsZTsKKwkJfQorCQlWRVJCT1NFKHRy ZWF0aW5nX2ludHB1dF9maWxlLCBpbmZpbGVuYW1lKTsKKwl9CisKKwlwdHIg PSAoY2hhciAqKSZoZWFkZXI7CisJZm9yIChjcHQgPSAwOyBjcHQgPCBzaXpl b2YoaGVhZGVyKTsgY3B0KyspIHsKKwkJaW50IHRtcCA9IGZnZXRjKGluZmls ZSk7CisJCWlmICh0bXAgPT0gRU9GKSB7CisJCQlpZiAoIWZlcnJvcihpbmZp bGUpKQorCQkJCWdvdG8gbGFiZWxfbm90X2d6aXBfZmlsZTsKKwkJCWVsc2UK KwkJCQlnb3RvIGxhYmVsX3JlYWRfaW5wdXRfZmlsZV9lcnJvcjsKKwkJfQor CQkqcHRyKysgPSB0bXA7CisJfQorCisJY2FsY3VsYXRlZF9oZWFkZXJfY3Jj ID0gaW5pdGhlYWRlcl9jcmMzMigmaGVhZGVyKTsKKworCWlmIChoZWFkZXIu c2lnbmF0dXJlXzB4OEIxRiAhPSAweDhCMUYgfHwgaGVhZGVyLmNvbXByZXNz aW9uX21ldGhvZCAhPSBaX0RFRkxBVEVECisJCXx8IGhlYWRlci5mbGFncyAm IEZMQUdTX3Vua25vd24pCisJCWdvdG8gbGFiZWxfbm90X2d6aXBfZmlsZTsK KworCWlmIChoZWFkZXIuZmxhZ3MgJiBGTEFHU19leHRyYV9maWVsZCkgewor CQlpbnQgdG1wID0gZmdldGMoaW5maWxlKTsKKwkJaWYgKHRtcCA9PSBFT0Yp IHsKKwkJCWlmICghZmVycm9yKGluZmlsZSkpCisJCQkJZ290byBsYWJlbF9u b3RfZ3ppcF9maWxlOworCQkJZWxzZQorCQkJCWdvdG8gbGFiZWxfcmVhZF9p bnB1dF9maWxlX2Vycm9yOworCQl9CisJCWNhbGN1bGF0ZWRfaGVhZGVyX2Ny YyA9IGFkZGJ5dGVfY3JjMzIoY2FsY3VsYXRlZF9oZWFkZXJfY3JjLCB0bXAp OworCQlleHRyYWZpZWxkX2xlbiA9IHRtcDsKKwkJdG1wID0gZmdldGMoaW5m aWxlKTsKKwkJaWYgKHRtcCA9PSBFT0YpIHsKKwkJCWlmICghZmVycm9yKGlu ZmlsZSkpCisJCQkJZ290byBsYWJlbF9ub3RfZ3ppcF9maWxlOworCQkJZWxz ZQorCQkJCWdvdG8gbGFiZWxfcmVhZF9pbnB1dF9maWxlX2Vycm9yOworCQl9 CisJCWNhbGN1bGF0ZWRfaGVhZGVyX2NyYyA9IGFkZGJ5dGVfY3JjMzIoY2Fs Y3VsYXRlZF9oZWFkZXJfY3JjLCB0bXApOworCQlleHRyYWZpZWxkX2xlbiB8 PSB0bXAgPDwgODsKKwkJVkVSQk9TRShleHRyYV9maWVsZF9wcmVzZW50LCBl eHRyYWZpZWxkX2xlbik7CisKKwkJaWYgKGV4dHJhZmllbGRfbGVuICE9IDAp IHsKKwkJCWlmICgoZXh0cmFmaWVsZCA9IG1hbGxvYyhleHRyYWZpZWxkX2xl bikpID09IDApCisJCQkJZ290byBsYWJlbF9ub3RfZW5vdWdoX21lbW9yeTsK KwkJfQorCQlmb3IgKGNwdCA9IDA7IGNwdCA8IGV4dHJhZmllbGRfbGVuOyBj cHQrKykgeworCQkJdG1wID0gZmdldGMoaW5maWxlKTsKKwkJCWlmICh0bXAg PT0gRU9GKSB7CisJCQkJaWYgKCFmZXJyb3IoaW5maWxlKSkKKwkJCQkJZ290 byBsYWJlbF9ub3RfZ3ppcF9maWxlOworCQkJCWVsc2UKKwkJCQkJZ290byBs YWJlbF9yZWFkX2lucHV0X2ZpbGVfZXJyb3I7CisJCQl9CisJCQljYWxjdWxh dGVkX2hlYWRlcl9jcmMgPSBhZGRieXRlX2NyYzMyKGNhbGN1bGF0ZWRfaGVh ZGVyX2NyYywgdG1wKTsKKwkJCWV4dHJhZmllbGRbY3B0XSA9IHRtcDsKKwkJ fQorCX0KKworCWlmIChoZWFkZXIuZmxhZ3MgJiBGTEFHU19vcmlnX25hbWUp IHsKKwkJdW5zaWduZWQgbmFtZV9sZW4gPSAwLCBuYW1lX2FsbG9jZWQgPSAw OworCQlpbnQgdG1wOworCisJCWRvIHsKKwkJCXRtcCA9IGZnZXRjKGluZmls ZSk7CisJCQlpZiAodG1wID09IEVPRikgeworCQkJCWlmICghZmVycm9yKGlu ZmlsZSkpCisJCQkJCWdvdG8gbGFiZWxfbm90X2d6aXBfZmlsZTsKKwkJCQll bHNlCisJCQkJCWdvdG8gbGFiZWxfcmVhZF9pbnB1dF9maWxlX2Vycm9yOwor CQkJfQorCQkJY2FsY3VsYXRlZF9oZWFkZXJfY3JjID0gYWRkYnl0ZV9jcmMz MihjYWxjdWxhdGVkX2hlYWRlcl9jcmMsIHRtcCk7CisJCQlpZiAobmFtZV9s ZW4gPj0gbmFtZV9hbGxvY2VkKSB7CisJCQkJaWYgKG5hbWUgIT0gMCkgewor CQkJCQlpZiAoKHB0ciA9IHJlYWxsb2MobmFtZSwgbmFtZV9hbGxvY2VkICs9 IDEwMjQpKSA9PSAwKQorCQkJCQkJZ290byBsYWJlbF9ub3RfZW5vdWdoX21l bW9yeTsKKwkJCQkJbmFtZSA9IHB0cjsKKwkJCQl9IGVsc2UgeworCQkJCQlp ZiAoKG5hbWUgPSBtYWxsb2MobmFtZV9hbGxvY2VkID0gMTAyNCkpID09IDAp CisJCQkJCQlnb3RvIGxhYmVsX25vdF9lbm91Z2hfbWVtb3J5OworCQkJCX0K KwkJCX0KKwkJCW5hbWVbbmFtZV9sZW4rK10gPSB0bXA7CisJCX0gd2hpbGUg KHRtcCAhPSAnXDAnKTsKKwkJVkVSQk9TRShvcmlnaW5hbF9uYW1lLCBuYW1l KTsKKwl9CisKKwlpZiAoaGVhZGVyLmZsYWdzICYgRkxBR1NfY29tbWVudCkg eworCQl1bnNpZ25lZCBjb21tZW50X2xlbiA9IDAsIGNvbW1lbnRfYWxsb2Nl ZCA9IDA7CisJCWludCB0bXA7CisKKwkJZG8geworCQkJdG1wID0gZmdldGMo aW5maWxlKTsKKwkJCWlmICh0bXAgPT0gRU9GKSB7CisJCQkJaWYgKCFmZXJy b3IoaW5maWxlKSkKKwkJCQkJZ290byBsYWJlbF9ub3RfZ3ppcF9maWxlOwor CQkJCWVsc2UKKwkJCQkJZ290byBsYWJlbF9yZWFkX2lucHV0X2ZpbGVfZXJy b3I7CisJCQl9CisJCQljYWxjdWxhdGVkX2hlYWRlcl9jcmMgPSBhZGRieXRl X2NyYzMyKGNhbGN1bGF0ZWRfaGVhZGVyX2NyYywgdG1wKTsKKwkJCWlmIChj b21tZW50X2xlbiA+PSBjb21tZW50X2FsbG9jZWQpIHsKKwkJCQlpZiAoY29t bWVudCAhPSAwKSB7CisJCQkJCWlmICgocHRyID0gcmVhbGxvYyhjb21tZW50 LCBjb21tZW50X2FsbG9jZWQgKz0gMTAyNCkpCisJCQkJCQk9PSAwKQorCQkJ CQkJZ290byBsYWJlbF9ub3RfZW5vdWdoX21lbW9yeTsKKwkJCQkJY29tbWVu dCA9IHB0cjsKKwkJCQl9IGVsc2UgeworCQkJCQlpZiAoKGNvbW1lbnQgPSBt YWxsb2MoY29tbWVudF9hbGxvY2VkID0gMTAyNCkpID09IDApCisJCQkJCQln b3RvIGxhYmVsX25vdF9lbm91Z2hfbWVtb3J5OworCQkJCX0KKwkJCX0KKwkJ CWNvbW1lbnRbY29tbWVudF9sZW4rK10gPSB0bXA7CisJCX0gd2hpbGUgKHRt cCAhPSAnXDAnKTsKKwkJVkVSQk9TRShjb21tZW50X3ByZXNlbnQsIGNvbW1l bnQpOworCX0KKworCWlmIChoZWFkZXIuZmxhZ3MgJiBGTEFHU19oZWFkZXJf Y3JjKSB7CisJCWludCB0bXAgPSBmZ2V0YyhpbmZpbGUpOworCQlpZiAodG1w ID09IEVPRikgeworCQkJaWYgKCFmZXJyb3IoaW5maWxlKSkKKwkJCQlnb3Rv IGxhYmVsX25vdF9nemlwX2ZpbGU7CisJCQllbHNlCisJCQkJZ290byBsYWJl bF9yZWFkX2lucHV0X2ZpbGVfZXJyb3I7CisJCX0KKwkJaGVhZGVyX2NyYyA9 IHRtcDsKKwkJdG1wID0gZmdldGMoaW5maWxlKTsKKwkJaWYgKHRtcCA9PSBF T0YpIHsKKwkJCWlmICghZmVycm9yKGluZmlsZSkpCisJCQkJZ290byBsYWJl bF9ub3RfZ3ppcF9maWxlOworCQkJZWxzZQorCQkJCWdvdG8gbGFiZWxfcmVh ZF9pbnB1dF9maWxlX2Vycm9yOworCQl9CisJCWhlYWRlcl9jcmMgfD0gdG1w IDw8IDg7CisJCWNhbGN1bGF0ZWRfaGVhZGVyX2NyYyAmPSAweEZGRkY7CisJ CWlmIChzaG93X2hlYWRlcl9jcmMgPT0gMikKKwkJCXByaW50ZigiMHglWFxu IiwgaGVhZGVyX2NyYyk7CisJCWVsc2UgaWYgKHNob3dfaGVhZGVyX2NyYyAh PSAwKQorCQkJcHJpbnRmKHNob3dfaGVhZGVyX2NyY19tc2csIGluZmlsZW5h bWUsIGhlYWRlcl9jcmMpOworCQlWRVJCT1NFKGhlYWRlcl9jcmNfcHJlc2Vu dCwgaGVhZGVyX2NyYyk7CisJCWlmIChjYWxjdWxhdGVkX2hlYWRlcl9jcmMg IT0gaGVhZGVyX2NyYykgeworCQkJUFJJTlRFUlIoYmFkX2hlYWRlcl9jcmMs IGhlYWRlcl9jcmMsIGNhbGN1bGF0ZWRfaGVhZGVyX2NyYyk7CisJCQlyZXR1 cm5lZCA9IGVycl9iYWRfaGVhZGVyX2NyYzsKKwkJCWdvdG8gbGFiZWxfZW5k OworCQl9CisJfSBlbHNlIHsKKwkJaWYgKHNob3dfaGVhZGVyX2NyYyAhPSAw ICYmIHNob3dfaGVhZGVyX2NyYyAhPSAyKQorCQkJcHJpbnRmKG5vX0NSQ190 b19zaG93X21zZywgaW5maWxlbmFtZSk7CisJfQorCisJLyoKKwkgKiBUcmVh dCBjb21tYW5kczoKKwkgKi8KKworCWlmIChzaG93X25hbWUgPT0gMikgewor CQlpZiAobmFtZSAhPSAwKQorCQkJcHJpbnRmKCIlc1xuIiwgbmFtZSk7CisJ fSBlbHNlIGlmIChzaG93X25hbWUpIHsKKwkJaWYgKG5hbWUgIT0gMCkKKwkJ CXByaW50ZihzaG93X25hbWVfbXNnLCBpbmZpbGVuYW1lLCBuYW1lKTsKKwkJ ZWxzZQorCQkJcHJpbnRmKG5vX25hbWVfdG9fc2hvd19tc2csIGluZmlsZW5h bWUpOworCX0KKworCWlmIChzaG93X2NvbW1lbnQgPT0gMikgeworCQlpZiAo Y29tbWVudCAhPSAwKQorCQkJcHJpbnRmKCIlc1xuIiwgY29tbWVudCk7CisJ fSBlbHNlIGlmIChzaG93X2NvbW1lbnQpIHsKKwkJaWYgKGNvbW1lbnQgIT0g MCkKKwkJCXByaW50ZihzaG93X2NvbW1lbnRfbXNnLCBpbmZpbGVuYW1lLCBj b21tZW50KTsKKwkJZWxzZQorCQkJcHJpbnRmKG5vX2NvbW1lbnRfdG9fc2hv d19tc2csIGluZmlsZW5hbWUpOworCX0KKworCWlmIChzaG93X3RleHRfZmxh ZyA9PSAyKSB7CisJCXByaW50ZigiJXVcbiIsIGhlYWRlci5mbGFncyAmIEZM QUdTX2FzY2lpKTsKKwl9IGVsc2UgaWYgKHNob3dfdGV4dF9mbGFnKSB7CisJ CWlmIChoZWFkZXIuZmxhZ3MgJiBGTEFHU19hc2NpaSkKKwkJCXByaW50Zihz aG93X3RleHRmbGFnc190ZXh0X21zZywgaW5maWxlbmFtZSk7CisJCWVsc2UK KwkJCXByaW50ZihzaG93X3RleHRmbGFnc19iaW5hcnlfbXNnLCBpbmZpbGVu YW1lKTsKKwl9CisKKwlpZiAoc2V0X3RleHRfZmxhZyAhPSAtMSkgeworCQlp ZiAoc2V0X3RleHRfZmxhZyA9PSAwKSB7CisJCQloZWFkZXIuZmxhZ3MgJj0g fkZMQUdTX2FzY2lpOworCQkJVkVSQk9TRShjbGVhcl9wcm9iYWJseXRleHRf ZmxhZyk7CisJCX0gZWxzZSB7CisJCQloZWFkZXIuZmxhZ3MgfD0gRkxBR1Nf YXNjaWk7CisJCQlWRVJCT1NFKHNldF9wcm9iYWJseXRleHRfZmxhZyk7CisJ CX0KKwl9CisKKwlpZiAoYWN0aXZhdGVfaGVhZGVyX2NyYyAhPSAtMSkgewor CQlpZiAoYWN0aXZhdGVfaGVhZGVyX2NyYykgeworCQkJaGVhZGVyLmZsYWdz IHw9IEZMQUdTX2hlYWRlcl9jcmM7CisJCQlWRVJCT1NFKGVuYWJsaW5nX2hl YWRlcl9jcmMpOworCQl9IGVsc2UgeworCQkJaGVhZGVyLmZsYWdzICY9IH5G TEFHU19oZWFkZXJfY3JjOworCQkJVkVSQk9TRShkaXNhYmxpbmdfaGVhZGVy X2NyYyk7CisJCX0KKwl9CisKKwlpZiAobmV3bmFtZSkgeworCQlpZiAoKm5l d25hbWUgPT0gMCkgeworCQkJaGVhZGVyLmZsYWdzICY9IH5GTEFHU19vcmln X25hbWU7CisJCQlWRVJCT1NFKHJlbW92aW5nX25hbWUpOworCQl9IGVsc2Ug eworCQkJaGVhZGVyLmZsYWdzIHw9IEZMQUdTX29yaWdfbmFtZTsKKwkJCVZF UkJPU0UoY2hhbmdpbmdfbmFtZSwgbmV3bmFtZSk7CisJCQlpZiAobmFtZSkK KwkJCQlmcmVlKG5hbWUpOworCQkJbmFtZSA9IG1hbGxvYyhzdHJsZW4obmV3 bmFtZSkgKyAxKTsKKwkJCXN0cmNweShuYW1lLCBuZXduYW1lKTsKKwkJfQor CX0KKworCWlmIChuZXdjb21tZW50KSB7CisJCWlmICgqbmV3Y29tbWVudCA9 PSAnXDAnKSB7CisJCQlWRVJCT1NFKHJlbW92aW5nX2NvbW1lbnQpOworCQkJ aWYgKGNvbW1lbnQpCisJCQkJZnJlZShjb21tZW50KTsKKwkJCWNvbW1lbnQg PSAwOworCQkJaGVhZGVyLmZsYWdzICY9IH5GTEFHU19jb21tZW50OworCQl9 IGVsc2UgeworCQkJVkVSQk9TRShyZXBsYWNpbmdfY29tbWVudCwgbmV3Y29t bWVudCk7CisJCQlpZiAoY29tbWVudCkKKwkJCQlmcmVlKGNvbW1lbnQpOwor CQkJY29tbWVudCA9IG1hbGxvYyhzdHJsZW4obmV3Y29tbWVudCkgKyAxKTsK KwkJCXN0cmNweShjb21tZW50LCBuZXdjb21tZW50KTsKKwkJCWhlYWRlci5m bGFncyB8PSBGTEFHU19jb21tZW50OworCQl9CisJfQorCisJaWYgKG5ld3By ZWNvbW1lbnQpIHsKKwkJaWYgKChoZWFkZXIuZmxhZ3MgJiBGTEFHU19jb21t ZW50KSA9PSAwKSB7CisJCQlWRVJCT1NFKGFkZGluZ19jb21tZW50LCBuZXdw cmVjb21tZW50KTsKKwkJCWNvbW1lbnQgPSBtYWxsb2Moc3RybGVuKG5ld3By ZWNvbW1lbnQpICsgMSk7CisJCQlpZiAoY29tbWVudCA9PSAwKQorCQkJCWdv dG8gbGFiZWxfbm90X2Vub3VnaF9tZW1vcnk7CisJCQlzdHJjcHkoY29tbWVu dCwgbmV3cHJlY29tbWVudCk7CisJCQkvKiBsYXN0IGNoYXI6ICovCisJCQlw dHIgPSAmY29tbWVudFtzdHJsZW4oY29tbWVudCldOworCQkJaWYgKGNoZWNr cHJlc3BjICE9ICdcMCcgJiYgKnB0ciAhPSBjaGVja3ByZXNwYykgeworCQkJ CSorK3B0ciA9IGNoZWNrcHJlc3BjOworCQkJCSorK3B0ciA9ICdcMCc7CisJ CQl9CisJCQlmcmVlKG5ld3ByZWNvbW1lbnQpOworCQkJbmV3cHJlY29tbWVu dCA9IDA7CisJCX0gZWxzZSB7CisJCQlWRVJCT1NFKHByZXBlbmRpbmdfY29t bWVudCwgbmV3cHJlY29tbWVudCk7CisJCQlwdHIgPSByZWFsbG9jKG5ld3By ZWNvbW1lbnQsIHN0cmxlbihuZXdwcmVjb21tZW50KSArIDEKKwkJCQkJCQkr IHN0cmxlbihjb21tZW50KSArIDEpOworCQkJaWYgKHB0ciA9PSAwKQorCQkJ CWdvdG8gbGFiZWxfbm90X2Vub3VnaF9tZW1vcnk7CisJCQluZXdwcmVjb21t ZW50ID0gcHRyOworCQkJLyogbGFzdCBjaGFyOiAqLworCQkJcHRyID0gJm5l d3ByZWNvbW1lbnRbc3RybGVuKG5ld3ByZWNvbW1lbnQpXTsKKwkJCWlmIChj aGVja3ByZXNwYyAhPSAnXDAnCisJCQkgICAgJiYgKnB0ciAhPSBjaGVja3By ZXNwYyAmJiBjb21tZW50WzBdICE9IGNoZWNrcHJlc3BjKQorCQkJCSorK3B0 ciA9IGNoZWNrcHJlc3BjOworCQkJcHRyKys7CisJCQlzdHJjcHkocHRyLCBj b21tZW50KTsKKwkJCWZyZWUoY29tbWVudCk7CisJCQljb21tZW50ID0gbmV3 cHJlY29tbWVudDsKKwkJCW5ld3ByZWNvbW1lbnQgPSAwOworCQl9CisJCWhl YWRlci5mbGFncyB8PSBGTEFHU19jb21tZW50OworCX0KKworCWlmIChuZXdw b3N0Y29tbWVudCkgeworCQlpZiAoKGhlYWRlci5mbGFncyAmIEZMQUdTX2Nv bW1lbnQpID09IDApIHsKKwkJCVZFUkJPU0UoYWRkaW5nX2NvbW1lbnQsIG5l d3Bvc3Rjb21tZW50KTsKKwkJCWNvbW1lbnQgPSBtYWxsb2Moc3RybGVuKG5l d3Bvc3Rjb21tZW50KSArIDEpOworCQkJaWYgKGNvbW1lbnQgPT0gMCkKKwkJ CQlnb3RvIGxhYmVsX25vdF9lbm91Z2hfbWVtb3J5OworCQkJc3RyY3B5KGNv bW1lbnQsIG5ld3Bvc3Rjb21tZW50KTsKKwkJCS8qIGxhc3QgY2hhcjogKi8K KwkJCXB0ciA9ICZjb21tZW50W3N0cmxlbihjb21tZW50KV07CisJCQlpZiAo Y2hlY2twb3N0c3BjICE9ICdcMCcgJiYgKnB0ciAhPSBjaGVja3Bvc3RzcGMp IHsKKwkJCQkqKytwdHIgPSBjaGVja3Bvc3RzcGM7CisJCQkJKisrcHRyID0g J1wwJzsKKwkJCX0KKwkJCWZyZWUobmV3cG9zdGNvbW1lbnQpOworCQkJbmV3 cG9zdGNvbW1lbnQgPSAwOworCQl9IGVsc2UgeworCQkJVkVSQk9TRShhcHBl bmRpbmdfY29tbWVudCwgbmV3cG9zdGNvbW1lbnQpOworCQkJcHRyID0gcmVh bGxvYyhjb21tZW50LCBzdHJsZW4oY29tbWVudCkKKwkJCQkJCSArIDEgKyBz dHJsZW4obmV3cG9zdGNvbW1lbnQpICsgMSk7CisJCQlpZiAocHRyID09IDAp CisJCQkJZ290byBsYWJlbF9ub3RfZW5vdWdoX21lbW9yeTsKKwkJCWNvbW1l bnQgPSBwdHI7CisJCQkvKiBsYXN0IGNoYXI6ICovCisJCQlwdHIgPSAmY29t bWVudFtzdHJsZW4oY29tbWVudCkgLSAxXTsKKwkJCWlmIChjaGVja3Bvc3Rz cGMgIT0gJ1wwJworCQkJICAgICYmICpwdHIgIT0gY2hlY2twb3N0c3BjICYm IG5ld3Bvc3Rjb21tZW50WzBdICE9IGNoZWNrcG9zdHNwYykKKwkJCQkqKytw dHIgPSBjaGVja3Bvc3RzcGM7CisJCQlwdHIrKzsKKwkJCXN0cmNweShwdHIs IG5ld3Bvc3Rjb21tZW50KTsKKwkJCWZyZWUobmV3cG9zdGNvbW1lbnQpOwor CQkJbmV3cG9zdGNvbW1lbnQgPSAwOworCQl9CisJCWhlYWRlci5mbGFncyB8 PSBGTEFHU19jb21tZW50OworCX0KKworCS8qCisJICogV3JpdGUgdGhlIGZp bGUgYmFjazoKKwkgKi8KKworCWlmIChvdXRmaWxlbmFtZSAhPSAwKSB7CisJ CXN0cnVjdCBzdGF0IGluYnVmOworCQljaGFyICpmdWxsX2NvbnRlbnQgPSAw OworCQl1bnNpZ25lZCBmdWxsX2xlbmd0aCA9IDA7CisKKwkJaWYgKGZzdGF0 KGZpbGVubyhpbmZpbGUpLCAmaW5idWYpICE9IC0xKSB7CisJCQlmdWxsX2Nv bnRlbnQgPSBtYWxsb2MoaW5idWYuc3Rfc2l6ZSk7CS8qIGJpdCB0b28gbXVj aCBidXQuLi4gKi8KKwkJCWlmIChmdWxsX2NvbnRlbnQgIT0gMCkgeworCQkJ CWNoYXIgKnB0ciA9IGZ1bGxfY29udGVudDsKKwkJCQlmb3IgKDs7KSB7CisJ CQkJCWludCB0bXAgPSBmZ2V0YyhpbmZpbGUpOworCisJCQkJCWlmICh0bXAg PT0gRU9GKSB7CisJCQkJCQlpZiAoZmVycm9yKGluZmlsZSkpIHsKKwkJCQkJ CQlmcmVlKGZ1bGxfY29udGVudCk7CisJCQkJCQkJZ290byBsYWJlbF9yZWFk X2lucHV0X2ZpbGVfZXJyb3I7CisJCQkJCQl9CisJCQkJCQlicmVhazsKKwkJ CQkJfQorCQkJCQlmdWxsX2xlbmd0aCsrOworCQkJCQlpZiAoZnVsbF9sZW5n dGggPj0gaW5idWYuc3Rfc2l6ZSkgeworCQkJCQkJZnJlZShmdWxsX2NvbnRl bnQpOworCQkJCQkJZ290byBsYWJlbF9yZWFkX2lucHV0X2ZpbGVfZXJyb3I7 CisJCQkJCX0KKwkJCQkJKnB0cisrID0gdG1wOworCQkJCX0KKwkJCX0gZWxz ZSBpZiAob3V0ZmlsZW5hbWUgPT0gaW5maWxlbmFtZSkKKwkJCQlnb3RvIGxh YmVsX3JlYWRfaW5wdXRfZmlsZV9lcnJvcjsKKwkJfQorCisJCWlmICghc3Ry Y21wKG91dGZpbGVuYW1lLCAiLSIpKSB7CisJCQlvdXRmaWxlID0gc3Rkb3V0 OworCQkJVkVSQk9TRSh0cmVhdGluZ19vdXRwdXRfZmlsZSwgc3RhbmRhcnRf b3V0cHV0KTsKKwkJfSBlbHNlIHsKKwkJCWlmIChvdmVyd3JpdGUgPT0gMCkg eworCQkJCXN0cnVjdCBzdGF0IGJ1ZjsKKwkJCQlpZiAoc3RhdChvdXRmaWxl bmFtZSwgJmJ1ZikgIT0gLTEgJiYgZXJybm8gIT0gRU5PRU5UKSB7CisJCQkJ CWVycm5vID0gMDsKKwkJCQkJUFJJTlRFUlIob3V0ZmlsZV9hbHJlYWR5X2V4 aXN0cywgb3V0ZmlsZW5hbWUpOworCQkJCQlyZXR1cm5lZCA9IGVycl9vdXRm aWxlX2FscmVhZHlfZXhpc3RzOworCQkJCQlnb3RvIGxhYmVsX2VuZDsKKwkJ CQl9CisJCQkJZXJybm8gPSAwOworCQkJfQorCQkJb3V0ZmlsZSA9IGZvcGVu KG91dGZpbGVuYW1lLCAidyIpOworCQkJaWYgKG91dGZpbGUgPT0gTlVMTCkg eworCQkJCVBSSU5URVJSKGNhbm5vdF9vcGVuX291dHB1dF9maWxlLCBvdXRm aWxlbmFtZSk7CisJCQkJcmV0dXJuZWQgPSBlcnJfY2Fubm90X29wZW5fb3V0 cHV0X2ZpbGU7CisJCQkJZ290byBsYWJlbF9lbmQ7CisJCQl9CisJCQlWRVJC T1NFKHRyZWF0aW5nX291dHB1dF9maWxlLCBvdXRmaWxlbmFtZSk7CisJCX0K KworCQlwdHIgPSAoY2hhciAqKSZoZWFkZXI7CisJCWZvciAoY3B0ID0gMDsg Y3B0IDwgc2l6ZW9mKGhlYWRlcik7IGNwdCsrKSB7CisJCQlpZiAoZnB1dGMo KnB0cisrLCBvdXRmaWxlKSA9PSBFT0YpCisJCQkJZ290byBsYWJlbF9jYW5u b3Rfd3JpdGVfdG9fZmlsZTsKKwkJfQorCisJCWNhbGN1bGF0ZWRfaGVhZGVy X2NyYyA9IGluaXRoZWFkZXJfY3JjMzIoJmhlYWRlcik7CisKKwkJaWYgKGhl YWRlci5mbGFncyAmIEZMQUdTX2V4dHJhX2ZpZWxkKSB7CisJCQlwdHIgPSBl eHRyYWZpZWxkOworCQkJaWYgKGZwdXRjKGV4dHJhZmllbGRfbGVuLCBvdXRm aWxlKSA9PSBFT0YKKwkJCQl8fCBmcHV0YyhleHRyYWZpZWxkX2xlbiA+PiA4 LCBvdXRmaWxlKSA9PSBFT0YpCisJCQkJZ290byBsYWJlbF9jYW5ub3Rfd3Jp dGVfdG9fZmlsZTsKKwkJCWNhbGN1bGF0ZWRfaGVhZGVyX2NyYyA9IGFkZGJ5 dGVfY3JjMzIoY2FsY3VsYXRlZF9oZWFkZXJfY3JjLAorCQkJCQkJCQlleHRy YWZpZWxkX2xlbik7CisJCQljYWxjdWxhdGVkX2hlYWRlcl9jcmMgPSBhZGRi eXRlX2NyYzMyKGNhbGN1bGF0ZWRfaGVhZGVyX2NyYywKKwkJCQkJCQkJZXh0 cmFmaWVsZF9sZW4gPj4gOCk7CisKKwkJCWZvciAoY3B0ID0gMDsgY3B0IDwg ZXh0cmFmaWVsZF9sZW47IGNwdCsrKSB7CisJCQkJaWYgKGZwdXRjKCpwdHIs IG91dGZpbGUpID09IEVPRikKKwkJCQkJZ290byBsYWJlbF9jYW5ub3Rfd3Jp dGVfdG9fZmlsZTsKKwkJCQljYWxjdWxhdGVkX2hlYWRlcl9jcmMgPSBhZGRi eXRlX2NyYzMyKGNhbGN1bGF0ZWRfaGVhZGVyX2NyYywKKwkJCQkJCQkJKnB0 cik7CisJCQkJcHRyKys7CisJCQl9CisJCX0KKwkJaWYgKGhlYWRlci5mbGFn cyAmIEZMQUdTX29yaWdfbmFtZSkgeworCQkJdW5zaWduZWQgbmFtZV9sZW4g PSBzdHJsZW4obmFtZSkgKyAxOworCisJCQlwdHIgPSBuYW1lOworCQkJZm9y IChjcHQgPSAwOyBjcHQgPCBuYW1lX2xlbjsgY3B0KyspIHsKKwkJCQlpZiAo ZnB1dGMoKnB0ciwgb3V0ZmlsZSkgPT0gRU9GKQorCQkJCQlnb3RvIGxhYmVs X2Nhbm5vdF93cml0ZV90b19maWxlOworCQkJCWNhbGN1bGF0ZWRfaGVhZGVy X2NyYyA9IGFkZGJ5dGVfY3JjMzIoY2FsY3VsYXRlZF9oZWFkZXJfY3JjLAor CQkJCQkJCQkqcHRyKTsKKwkJCQlwdHIrKzsKKwkJCX0KKwkJfQorCQlpZiAo aGVhZGVyLmZsYWdzICYgRkxBR1NfY29tbWVudCkgeworCQkJdW5zaWduZWQg Y29tbWVudF9sZW4gPSBzdHJsZW4oY29tbWVudCkgKyAxOworCisJCQlwdHIg PSBjb21tZW50OworCQkJZm9yIChjcHQgPSAwOyBjcHQgPCBjb21tZW50X2xl bjsgY3B0KyspIHsKKwkJCQlpZiAoZnB1dGMoKnB0ciwgb3V0ZmlsZSkgPT0g RU9GKQorCQkJCQlnb3RvIGxhYmVsX2Nhbm5vdF93cml0ZV90b19maWxlOwor CQkJCWNhbGN1bGF0ZWRfaGVhZGVyX2NyYyA9IGFkZGJ5dGVfY3JjMzIoY2Fs Y3VsYXRlZF9oZWFkZXJfY3JjLAorCQkJCQkJCQkqcHRyKTsKKwkJCQlwdHIr KzsKKwkJCX0KKwkJfQorCQlpZiAoaGVhZGVyLmZsYWdzICYgRkxBR1NfaGVh ZGVyX2NyYykgeworCQkJY2FsY3VsYXRlZF9oZWFkZXJfY3JjICY9IDB4RkZG RjsKKwkJCWlmIChmcHV0YyhjYWxjdWxhdGVkX2hlYWRlcl9jcmMsIG91dGZp bGUpID09IEVPRgorCQkJCXx8IGZwdXRjKGNhbGN1bGF0ZWRfaGVhZGVyX2Ny YyA+PiA4LCBvdXRmaWxlKSA9PSBFT0YpCisJCQkJZ290byBsYWJlbF9jYW5u b3Rfd3JpdGVfdG9fZmlsZTsKKwkJCWlmIChzaG93X2hlYWRlcl9jcmMgPT0g MikKKwkJCQlwcmludGYoIjB4JVhcbiIsIGhlYWRlcl9jcmMpOworCQkJZWxz ZSBpZiAoc2hvd19oZWFkZXJfY3JjICE9IDApCisJCQkJcHJpbnRmKHNob3df aGVhZGVyX2NyY19tc2csIGluZmlsZW5hbWUsIGhlYWRlcl9jcmMpOworCQkJ VkVSQk9TRShuZXdfaGVhZGVyX2NyYywgY2FsY3VsYXRlZF9oZWFkZXJfY3Jj KTsKKwkJfQorCisJCWlmIChmdWxsX2NvbnRlbnQgPT0gMCkgeworCQkJZm9y ICg7OykgeworCQkJCWludCB0bXAgPSBmZ2V0YyhpbmZpbGUpOworCisJCQkJ aWYgKHRtcCA9PSBFT0YpIHsKKwkJCQkJaWYgKGZlcnJvcihpbmZpbGUpKQor CQkJCQkJZ290byBsYWJlbF9yZWFkX2lucHV0X2ZpbGVfZXJyb3I7CisJCQkJ CWJyZWFrOworCQkJCX0KKwkJCQlpZiAoZnB1dGModG1wLCBvdXRmaWxlKSA9 PSBFT0YpCisJCQkJCWdvdG8gbGFiZWxfY2Fubm90X3dyaXRlX3RvX2ZpbGU7 CisJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAoZndyaXRlKGZ1bGxfY29udGVu dCwgMSwgZnVsbF9sZW5ndGgsIG91dGZpbGUpICE9IGZ1bGxfbGVuZ3RoKQor CQkJCWdvdG8gbGFiZWxfY2Fubm90X3dyaXRlX3RvX2ZpbGU7CisJCX0KKwl9 CisKKyAgICAgIGxhYmVsX2VuZDoKKwlpZiAoZXh0cmFmaWVsZCAhPSAwKQor CQlmcmVlKGV4dHJhZmllbGQpOworCWlmIChuYW1lICE9IDApCisJCWZyZWUo bmFtZSk7CisJaWYgKGNvbW1lbnQgIT0gMCkKKwkJZnJlZShjb21tZW50KTsK KworCWlmIChpbmZpbGUgIT0gTlVMTCkgeworCQlpZiAoZmNsb3NlKGluZmls ZSkgPT0gRU9GKSB7CisJCQlQUklOVEVSUihjYW5ub3RfY2xvc2VfaW5wdXRf ZmlsZSwgaW5maWxlbmFtZSk7CisJCQlyZXR1cm5lZCA9IGVycl9jYW5ub3Rf Y2xvc2VfaW5wdXRfZmlsZTsKKwkJfQorCX0KKworCWlmIChvdXRmaWxlICE9 IE5VTEwpIHsKKwkJaWYgKGZjbG9zZShvdXRmaWxlKSA9PSBFT0YpIHsKKwkJ CVBSSU5URVJSKGNhbm5vdF9jbG9zZV9vdXRwdXRfZmlsZSwgb3V0ZmlsZW5h bWUpOworCQkJcmV0dXJuZWQgPSBlcnJfY2Fubm90X2Nsb3NlX291dHB1dF9m aWxlOworCQl9CisJfQorCXJldHVybiByZXR1cm5lZDsKKworICAgICAgbGFi ZWxfbm90X2d6aXBfZmlsZToKKwlQUklOVEVSUihub3RfZ3ppcF9maWxlLCBp bmZpbGVuYW1lLCBoZWFkZXIuc2lnbmF0dXJlXzB4OEIxRik7CisJcmV0dXJu ZWQgPSBlcnJfbm90X2d6aXBfZmlsZTsKKwlnb3RvIGxhYmVsX2VuZDsKKwor ICAgICAgbGFiZWxfbm90X2Vub3VnaF9tZW1vcnk6CisJUFJJTlRFUlIobm90 X2Vub3VnaF9tZW1vcnkpOworCXJldHVybmVkID0gZXJyX25vdF9lbm91Z2hf bWVtb3J5OworCWdvdG8gbGFiZWxfZW5kOworCisgICAgICBsYWJlbF9yZWFk X2lucHV0X2ZpbGVfZXJyb3I6CisJUFJJTlRFUlIocmVhZF9pbnB1dF9maWxl X2Vycm9yLCBpbmZpbGVuYW1lKTsKKwlyZXR1cm5lZCA9IGVycl9yZWFkX2lu cHV0X2ZpbGVfZXJyb3I7CisJZ290byBsYWJlbF9lbmQ7CisKKyAgICAgIGxh YmVsX2Nhbm5vdF93cml0ZV90b19maWxlOgorCVBSSU5URVJSKGNhbm5vdF93 cml0ZV90b19maWxlLCBvdXRmaWxlbmFtZSk7CisJcmV0dXJuZWQgPSBlcnJf Y2Fubm90X3dyaXRlX3RvX2ZpbGU7CisJZ290byBsYWJlbF9lbmQ7Cit9CmRp ZmYgLXVwck4gLVggbGludXgtMi42LjIwL0RvY3VtZW50YXRpb24vZG9udGRp ZmYgbGludXgtMi42LjIwL3NjcmlwdHMvZ3pwYXJhbS5jIGxpbnV4LTIuNi4y MC1ndWppbi9zY3JpcHRzL2d6cGFyYW0uYwotLS0gbGludXgtMi42LjIwL3Nj cmlwdHMvZ3pwYXJhbS5jCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAw ICswMTAwCisrKyBsaW51eC0yLjYuMjAtZ3VqaW4vc2NyaXB0cy9nenBhcmFt LmMJMjAwNy0wMi0wNSAyMToyNzowNS4wMDAwMDAwMDAgKzAwMDAKQEAgLTAs MCArMSwyNDcgQEAKKy8qCisgKiBUaGlzIGZpbGUgImd6cGFyYW0uYyIgaXMg bGljZW5zZWQgd2l0aCB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBMSU5VWCBr ZXJuZWwuCisgKiBDb3B5cmlnaHQgMjAwNCwgRXRpZW5uZSBMb3JyYWluIChl dGllbm5lIGRvdCBsb3JyYWluIGF0IGd1amluIGRvdCBvcmcpCisgKgorICog IFRoZSBtYWluIHVzZSBvZiB0aGlzIGZpbGUgaXMgdG8gcHJvZHVjZSBhICJH dWppbiBuYXRpdmUgYm9vdGFibGUKKyAqIGZpbGUiIGkuZS4gYSBMSU5VWCBj b21wcmVzc2VkIEVMRiBrZXJuZWwgd2l0aCBhICJrZ3oiIGV4dGVuc2lvbiwK KyAqIG1vcmUgZXhhY3RseSB0aGUgb3B0aW9uIHBhcnQgd2hpY2ggaXMgZ29p bmcgdG8gYmUgd3JpdHRlbiBpbiB0aGUKKyAqIGNvbW1lbnQgZmllbGQgb2Yg dGhlIEdaSVAgZmlsZSAoYXMgZG9jdW1lbnRlZCBpbiB0aGUgR1pJUCBmb3Jt YXQpLgorICogU2VlIGxpbnV4L01ha2VmaWxlIHRvIGtub3cgaG93IHRoZSBm b2xsb3dpbmcgaXMgdXNlZCBmb3IgdGFyZ2V0CisgKiAqLmtneiAtIHNpbXBs eSBieSB1c2luZyB0aGUgImd6Y29weSIgdXRpbGl0eS4KKyAqCisgKiBUaGlz IHN0YW5kYWxvbmUgZXhlY3V0YWJsZSBuYW1lZCAiZ3pwYXJhbSIgaXMganVz dCBkaXNwbGF5aW5nIGEKKyAqIGxpbmUgY29udGFpbmluZyB6ZXJvIG9yIG1v cmUgZmllbGQgb2YgdGhlIHBhdHRlcm4KKyAqICI8dmFyaWFibGU+PTB4PGhl eGF2YWx1ZT4iIChpLmUuIG5vIGRlY2ltYWwpLCB0byBkZWZpbmUgZm9yIHdo aWNoCisgKiBDUFUgdGhpcyBrZXJuZWwgaXMgZm9yLCB3aGljaCB2aWRlbyBt b2RlIGNhbiBiZSB1c2VkIChmb3IgaW5zdGFuY2UKKyAqIGZvcmJpZCBWRVNB IDEuMCBncmFwaGljIG1vZGVzKSwgd2hlcmUgdG8gY29weSB0aGUgTGludXgg cGFyYW1ldGVyCisgKiA0IEtiIHBhZ2UgaW4gcmVhbC1tb2RlIG1lbW9yeSwg YW5kIHRoZSBsaWtlLgorICoKKyAqIEJlY2F1c2UgbW9zdCB2YWx1ZXMgZGVw ZW5kIG9uIGNvbXBpbGF0aW9uIHN3aXRjaGVzIG9mIHRoZQorICogTGludXgg a2VybmVsIC0gd2UgaGF2ZSB0byB1c2UgYW4gdXAtdG8tZGF0ZSBmaWxlIHJl ZmxlY3RpbmcKKyAqIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgLSBidXQg YmVjYXVzZSB3ZSBtYXkgY3Jvc3MgY29tcGlsZQorICogdGhlIGtlcm5lbCB3 ZSBoYXZlIGhlcmUgdG8gdXNlIHRoZSBob3N0IGNvbXBpbGVyICh3aXRoIG1h eWJlCisgKiBkaWZmZXJlbnQgb3B0aW1pc2F0aW9uIG9wdGlvbnMpLiBUaGUg c2ltcGxlciBzZWVtcyB0byB1c2UKKyAqIHRoZSBmaWxlICJsaW51eC9pbmNs dWRlL2xpbnV4L2F1dG9jb25mLmgiLiBUaGlzIGxhdGVyIGZpbGUgaXMKKyAq IGF1dG9tYWdpY2FsbHkgdXBkYXRlZCBieSAibWFrZSBtZW51Y29uZmlnIi4K KyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2luY2x1ZGUgIi4uL2lu Y2x1ZGUvbGludXgvYXV0b2NvbmYuaCIKKworLyoKKyAqICBUaG9zZSBhcmUg bm90IHVzZWQgZm9yIG5vdywgR3VqaW4gd2lsbCB1c2UgaXRzIGRlZmF1bHQg YmVoYXZpb3VyCisgKiBiZWNhdXNlIHdlIGRvIG5vdCBkaXNwbGF5IHRoZW0g b24gc3Rkb3V0OgorICogVGhlIHJ1bmFkcj0weC4uLiBwYXJhbWV0ZXIgY2Fu IGJlIHVzZWQgdG8gb3ZlcndyaXRlIHRoZSBlbnRyeQorICogYWRkcmVzcyBn aXZlbiBpbiB0aGUgdm1saW51eCBFTEYgaGVhZGVyLgorICovCitjb25zdCB1 bnNpZ25lZCBydW5hZHIgPSAwLCBtaW5yYW0gPSAwLCBvcHRpb24gPSAwOwor CisvKgorICogIEtlZXAgZm9yIG5vdyB0aGUgZGVmYXVsdCBvZiAweDgwMDAw IChsaW5lYXIgYWRkcmVzcykgZm9yIHBhcmFtYWRyOgorICogaXQgaGFzIHRv IGJlIGEgImZyZWUiIHJlYWwgbW9kZSBtZW1vcnkgYWRkcmVzcywgYW5kIGlm IHRoZSB1c2VyIGlzIHVzaW5nCisgKiBhIERPUyBib290bG9hZGVyIHRoZSBi b290bG9hZGVyIGNvZGUgY2FuIGJlIHF1aXRlIGhpZ2ggaW4gbWVtb3J5IHdo ZW4KKyAqIHVzaW5nIGEgbG90IG9mIERPUyBkcml2ZXJzIChsaWtlIERPUyBV U0IgZGlzayBkcml2ZXJzKS4KKyAqLworY29uc3QgdW5zaWduZWQgcGFyYW1h ZHIgPSAwOworCisvKgorICogU2luY2UgMi42LjEzLCB0aGUgbGluayBhZGRy ZXNzIG9mIHRoZSB2bWxpbnV4IGtlcm5lbCBjYW4gYmUgbWFudWFsbHkKKyAq IGRlZmluZWQgaW4gdGhlIFBIWVNJQ0FMX1NUQVJUIHBhcmFtZXRlciwgZm9y IGluc3RhbmNlIHRvIGxvYWQgdGhlCisgKiBrZXJuZWwgYXQgYSBiaWcgVExC IGJvdW5kYXJ5ICgyIE1ieXRlcykuCisgKiBUaGUgR3VqaW4gYm9vdGxvYWRl ciAodmVyc2lvbiAxLjggYW5kIGFmdGVyKSBrbm93cyB3aGVyZSB0byBsb2Fk CisgKiBjb2RlIGFuZCBkYXRhIGJ5IHJlYWRpbmcgdGhlIEVMRiBwcm9ncmFt IGhlYWRlciAoanVzdCBhZnRlciB0aGUgRUxGCisgKiBoZWFkZXIpLCBhbmQg bWF5IGZpbmQgdGhlcmUgdGhlIHJlYWwtbW9kZSBjb2RlIHBvc2l0aW9uL3Np emUgdG9vLgorICogSWYgdGhlIHJlYWwgbW9kZSBjb2RlIGlzIG5vdCBmb3Vu ZCBpbiB0aGUgRUxGIHByb2dyYW0gaGVhZGVyLAorICogR3VqaW4gc2VhcmNo IGl0IGluIHRoZSBzZWN0aW9uIHRhYmxlOiB0aGF0IGlzIHRoZSBzZWN0aW9u IGNvbnRhaW5pbmcKKyAqIGNvZGUgYW5kIG9mIGJhc2UgYWRkcmVzcyB6ZXJv IChvZmZzZXQgaW50byBhIHNlZ21lbnQxNjpvZmZzZXQxNiBhZGRyZXNzKS4K KyAqIEJlZm9yZSBHdWppbi0xLjcsIHRoZSBsb2FkIGFkZHJlc3Mgd2FzIGRl ZmluZWQgaW4gdGhlICJsb2FkYWRyIgorICogcGFyYW1ldGVyIGJlY2F1c2Ug b2YgdGhlIGJpbmFyeSBmb3JtYXQgdXNlZC4KKyAqLworY29uc3QgdW5zaWdu ZWQgbWluX2d1amluX3ZlcnNpb24gPSAweDEwNzsKKworLyoKKyAqIFE6IFdo eSBjaGVjayB0aGUgcHJvY2Vzc29yIGhlcmUgKGkuZS4gYmVmb3JlIGV2ZW4g Y2FsbGluZyBsaW51eF9zZXRfcGFyYW1zKCksCisgKiAgICB3ZSBjb3VsZCBj aGVjayB0aGUgcHJvY2Vzc29yIGFuZCBleGl0IHdpdGggYW4gZXJyb3IgY29k ZS4uLikgPworICogQTogRmlyc3QgdGhlIHByb2Nlc3NvciBtYXkgbm90IGJl IGFuIGlhMzIgb25lICh4ODZfNjQsIGlhNjQgb3IgZXZlbgorICogICAgUG93 ZXJQQykgYW5kIHRoZSBjb21waWxhdGlvbiBvZiBsaW51eF9zZXRfcGFyYW1z KCkgbWF5IHVzZSBpYTMyCisgKiAgICBpbnN0cnVjdGlvbnMgKE1NWCkgbm90 IGRlZmluZWQgZm9yIHRoZSBjdXJyZW50IHByb2Nlc3NvciB1c2VkLgorICog ICAgVGhpcyBtYXNrIHNoYWxsIHNheTogZG8gbm90IGV2ZW4gdHJ5IHRvIGV4 ZWN1dGUgdGhlIGZpcnN0IGFzc2VtYmx5CisgKiAgICBpbnN0cnVjdGlvbiBv ZiBsaW51eF9zZXRfcGFyYW1zKCkgaWYgY29ycmVzcG9uZGluZyBiaXQgaXMg c2V0LgorICogICAgSXQgbWF5IHN0aWxsIGJlIGVhc2llciB0byByZWZ1c2Ug YSBDUFUgaGVyZSAoUGVudGl1bSBjb2RlIG9uIGFuIGkzODYpCisgKi8KKyNk ZWZpbmUgQ0FOX1JVTl9DUFVfRkFNSUxZKHgpCX4oMSA8PCB4KQorCitjb25z dCB1bnNpZ25lZCBtYXNrY3B1ID0gMHg4MDAwMDAwMAkvKiByZWZ1c2UgdG8g c3RhcnQgaWYgbm8gSUEzMiBCSU9TIChub3QgYSBQQykgKi8KKwkvL3wgMHg0 MDAwMDAwMAkvKiByZWZ1c2UgdG8gc3RhcnQgZnJvbSBET1Mvd2luZG93cyAq LworCS8vfCAweDIwMDAwMDAwCS8qIHJlZnVzZSB0byBzdGFydCBmcm9tIEVN TTM4Ni92aXJ0dWFsIGVudmlyb25tZW50ICovCisJfCAoMHgwMDAxODBGRgkv KiBiaXRzIHVzZWQgZm9yIHByZWNpc2UgQ1BVIHR5cGUgY29tcGF0aWJpbGl0 eSAqLworCS8vICYgQ0FOX1JVTl9DUFVfRkFNSUxZKDApCS8qIGNhbiBydW4g b24gODA4NiAqLworCS8vICYgQ0FOX1JVTl9DUFVfRkFNSUxZKDEpCS8qIGNh biBydW4gb24gODAxODYgKi8KKwkvLyAmIENBTl9SVU5fQ1BVX0ZBTUlMWSgy KQkvKiBjYW4gcnVuIG9uIDgwMjg2ICovCisjaWZkZWYgQ09ORklHX00zODYK KwkmIENBTl9SVU5fQ1BVX0ZBTUlMWSgzKQkJLyogaS5lLiBjYW5ub3Qgc2V0 IEFDIGkuZS4gYml0IDE4IG9mIGZsYWdzICovCisJJiBDQU5fUlVOX0NQVV9G QU1JTFkoNCkJCS8qIGkuZS4gQ1BVSUQgZmFtaWx5ID0gNCBvciBubyBDUFVJ RCAqLworCSYgQ0FOX1JVTl9DUFVfRkFNSUxZKDUpCQkvKiBpLmUuIENQVUlE IGZhbWlseSA9PSA1ICovCisJJiBDQU5fUlVOX0NQVV9GQU1JTFkoNikJCS8q IGkuZS4gQ1BVSUQgZmFtaWx5ID09IDYgKi8KKwkmIENBTl9SVU5fQ1BVX0ZB TUlMWSgxNSkJLyogaS5lLiBDUFVJRCBmYW1pbHkgPT0gKDB4RiArIDApIGV4 dGVuZGVkX2ZhbWlseSAqLworI2VsaWYgZGVmaW5lZCAoQ09ORklHX000ODYp CisJJiBDQU5fUlVOX0NQVV9GQU1JTFkoNCkKKwkmIENBTl9SVU5fQ1BVX0ZB TUlMWSg1KQorCSYgQ0FOX1JVTl9DUFVfRkFNSUxZKDYpCisJJiBDQU5fUlVO X0NQVV9GQU1JTFkoMTUpCisjZWxpZiBkZWZpbmVkIChDT05GSUdfTTU4Nikg fHwgZGVmaW5lZCAoQ09ORklHX01LNikgXAorCXx8IGRlZmluZWQgKENPTkZJ R19NQ1JVU09FKSB8fCBkZWZpbmVkIChDT05GSUdfTVdJTkNISVBDNikKKwkm IENBTl9SVU5fQ1BVX0ZBTUlMWSg1KQorCSYgQ0FOX1JVTl9DUFVfRkFNSUxZ KDYpCisJJiBDQU5fUlVOX0NQVV9GQU1JTFkoMTUpCisjZWxpZiBkZWZpbmVk IChDT05GSUdfTTY4NikgfHwgZGVmaW5lZCAoQ09ORklHX01QRU5USVVNSUkp IFwKKwl8fCBkZWZpbmVkIChDT05GSUdfTVBFTlRJVU1JSUkpIHx8IGRlZmlu ZWQgKENPTkZJR19NUEVOVElVTU0pIFwKKwl8fCBkZWZpbmVkIChDT05GSUdf TUs3KSB8fCBkZWZpbmVkIChDT05GSUdfTVdJTkNISVAyKSBcCisJfHwgZGVm aW5lZCAoQ09ORklHX01DWVJJWElJSSkgfHwgZGVmaW5lZCAoQ09ORklHX01W SUFDM18yKQorCSYgQ0FOX1JVTl9DUFVfRkFNSUxZKDYpCisJJiBDQU5fUlVO X0NQVV9GQU1JTFkoMTUpCisjZWxpZiBkZWZpbmVkIChDT05GSUdfTVBFTlRJ VU00KSB8fCBkZWZpbmVkIChDT05GSUdfTUs4KQorCSYgQ0FOX1JVTl9DUFVf RkFNSUxZKDE1KQorI2VsaWYgZGVmaW5lZCAoQ09ORklHX0lBNjQpCisJJiBD QU5fUlVOX0NQVV9GQU1JTFkoNykJCS8qIGNhbiBydW4gb24gODA3ODYsIGku ZS4gQ1BVSUQgZmFtaWx5ID09IDcgKi8KKwkmIENBTl9SVU5fQ1BVX0ZBTUlM WSgxNikJLyogY2FuIHJ1biBvbiA4MD84NiwgaS5lLiBDUFVJRCBmYW1pbHkg PT0gKDB4RiArIDEpIGV4dGVuZGVkX2ZhbWlseSAqLworI2VsaWYgZGVmaW5l ZCAoQ09ORklHX0lBNjRfMikKKwkmIENBTl9SVU5fQ1BVX0ZBTUlMWSgxNikK KyNlbmRpZgorCSk7CisKKy8qIFByb2JhYmx5IHBsZW50eSBvZiBvdGhlciBj aGVja3MgdG8gZG8gaGVyZS4uLiBzZWUgdm1saW51ei5oICovCitjb25zdCB1 bnNpZ25lZCBtYXNrRGZsYWdzID0gMAorI2lmbmRlZiBDT05GSUdfTUFUSF9F TVVMQVRJT04KKwl8ICgxIDw8IDApCisjZW5kaWYKKyNpZmRlZiBDT05GSUdf TTU4NlRTQworCXwgKDEgPDwgNCkKKyNlbmRpZgorI2lmZGVmIENPTkZJR19Y ODZfQ01QWENIRworCXwgKDEgPDwgOCkKKyNlbmRpZgorI2lmZGVmIENPTkZJ R19NNTg2TU1YCisJfCAoMSA8PCAyMykKKyNlbmRpZgorCTsKK2NvbnN0IHVu c2lnbmVkIG1hc2tDZmxhZ3MgPSAwCisjaWZkZWYgQ09ORklHX1g4Nl9DTVBY Q0hHMTZCCisJfCAoMSA8PCAxMykKKyNlbmRpZgorI2lmZGVmIENPTkZJR19Y ODZfNjQKKy8qIEZvciB0aGlzLCBzZWUgaHR0cDovL3d3dy54ODYtNjQub3Jn L2xpc3RzL2Rpc2N1c3MvbXNnMDI5NzEuaHRtbCAqLworCXwgKDEgPDwgMCkg IHwgKDEgPDwgMykgIHwgKDEgPDwgNCkgIHwgKDEgPDwgNSkgIHwgKDEgPDwg NikKKwl8ICgxIDw8IDgpICB8ICgxIDw8IDkpICAgICAgICAgICAgICB8ICgx IDw8IDEyKSB8ICgxIDw8IDEzKQorCXwgKDEgPDwgMTUpIHwgKDEgPDwgMTYp IHwgKDEgPDwgMTkpIHwgKDEgPDwgMjQpCisJfCAoMSA8PCAyNSkgfCAoMSA8 PCAyNikKKyNlbmRpZgorCTsKKworLyogdW51c2VkIG9uIFBDczogKi8KK2Nv bnN0IHVuc2lnbmVkIG1hc2tCZmxhZ3MgPSAwOworCisvKiBBTUQgQ1BVSUQg MHg4MDAwMDAwMTogKi8KK2NvbnN0IHVuc2lnbmVkIG1hc2tBZmxhZ3MgPSAw CisjaWZkZWYgQ09ORklHX1g4Nl82NAorLyogRm9yIG5leHQgMyBsaW5lcywg c2VlIGh0dHA6Ly93d3cueDg2LTY0Lm9yZy9saXN0cy9kaXNjdXNzL21zZzAy OTcxLmh0bWwgKi8KKwl8ICgxIDw8IDApICB8ICgxIDw8IDMpICB8ICgxIDw8 IDQpICB8ICgxIDw8IDUpICB8ICgxIDw8IDYpCisJfCAoMSA8PCA4KSAgfCAo MSA8PCA5KSAgfCAoMSA8PCAxMSkgfCAoMSA8PCAxMikgfCAoMSA8PCAxMykK Kwl8ICgxIDw8IDE1KSB8ICgxIDw8IDE2KSAgICAgICAgICAgICB8ICgxIDw8 IDI0KQorCXwgKDEgPDwgMjkpCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfWDg2 X1VTRV8zRE5PVworCXwgKDEgPDwgMzEpCisjZW5kaWYKKwk7CisKKy8qCisg KiBtYXNrdmVzYSBhbmQgbWFza3Jlc29sdXRpb24gYXJlIG9ubHkgY2hlY2tl ZCB3aGVuIHRoZSBsb2FkZXIgaGFzCisgKiBzY3JlZW4gbWFuYWdlbWVudCBj b21waWxlZC1pbiwgaS5lLiBub3QgZm9yIHRpbnkuaW1nIG5vciB0aW55LmV4 ZQorICogdmVyc2lvbiBvZiBHdWppbi4KKyAqIFNldCB0aGVtIHRvIHplcm8g dG8gY29tcGxldGVseSBkaXNhYmxlIHRob3NlIGNoZWNrIGluIEd1amluLgor ICovCisKKyNkZWZpbmUgTUFTS1ZFU0FfeEJQUCh4KQkoMSA8PCAoeC0xKSkJ LyogeCBpcyBudW1iZXIgb2YgQml0UGVyUGl4ZWwgKi8KKyNkZWZpbmUgTUFT S1ZFU0FfVEVYVAkJKDEgPDwgMTYpCS8qIGFibGUgdG8gYm9vdCBpbiB0ZXh0 IG1vZGUgKi8KKyNkZWZpbmUgTUFTS1ZFU0FfV0lOCQkoMSA8PCAxNykJLyog YWJsZSB0byBib290IGluIFZFU0ExIG1vZGUgKi8KKyNkZWZpbmUgTUFTS1ZF U0FfTElOCQkoMSA8PCAxOCkJLyogYWJsZSB0byBib290IGluIFZFU0EyIGxp bmVhciBtb2RlICovCisjZGVmaW5lIE1BU0tWRVNBX0xJTjJXSU4JKDEgPDwg MTkpCS8qIGZvcmNlIFZFU0ExIGlmIGluIFZFU0EyICovCisjZGVmaW5lIE1B U0tWRVNBX05PR1JBUEhJQ1ZHQQkoMSA8PCAyMCkJLyogQ2Fubm90IGhhbmRs ZSBWR0EgZ3JhcGhpYyBtb2RlcyAqLworCitjb25zdCB1bnNpZ25lZCBtYXNr dmVzYSA9IDAgLyogdXNlIE9SIHRvIGV4Y2x1ZGUgdGhvc2U6ICovCisjaWZu ZGVmIENPTkZJR19GQl9WRVNBCisJfCBNQVNLVkVTQV94QlBQKDEpCisJfCBN QVNLVkVTQV94QlBQKDIpCisJfCBNQVNLVkVTQV94QlBQKDQpCisJfCBNQVNL VkVTQV94QlBQKDgpCisJfCBNQVNLVkVTQV94QlBQKDE1KQorCXwgTUFTS1ZF U0FfeEJQUCgxNikKKwl8IE1BU0tWRVNBX3hCUFAoMjQpCisJfCBNQVNLVkVT QV94QlBQKDMyKQorI2VuZGlmCisjaWYgZGVmaW5lZCAoQ09ORklHX1ZHQV9D T05TT0xFKSB8fCBkZWZpbmVkIChDT05GSUdfTURBX0NPTlNPTEUpCisJfCBN QVNLVkVTQV9URVhUCisjZW5kaWYKKwkvLyB8IE1BU0tWRVNBX1dJTgorI2lm ZGVmIENPTkZJR19GQl9WRVNBCisJfCBNQVNLVkVTQV9MSU4KKyNlbmRpZgor CS8vIHwgTUFTS1ZFU0FfTElOMldJTgorCXwgTUFTS1ZFU0FfTk9HUkFQSElD VkdBCisJOworCisjZGVmaW5lIE1BU0tSRVNPTFVUSU9OXzQwY29scwkJKDEg PDwgMCkKKyNkZWZpbmUgTUFTS1JFU09MVVRJT05fODBjb2xzCQkoMSA8PCAx KQorI2RlZmluZSBNQVNLUkVTT0xVVElPTl8xMDBjb2xzCQkoMSA8PCAyKQor I2RlZmluZSBNQVNLUkVTT0xVVElPTl8xMzJjb2xzCQkoMSA8PCAzKQorI2Rl ZmluZSBNQVNLUkVTT0xVVElPTl8xNjBjb2xzCQkoMSA8PCA0KQorCisjZGVm aW5lIE1BU0tSRVNPTFVUSU9OXzI0cm93cwkJKDEgPDwgNSkJLyogbW9zdGx5 IFZUL3NlcmlhbCAqLworI2RlZmluZSBNQVNLUkVTT0xVVElPTl8yNXJvd3MJ CSgxIDw8IDYpCisjZGVmaW5lIE1BU0tSRVNPTFVUSU9OXzMwcm93cwkJKDEg PDwgNykKKyNkZWZpbmUgTUFTS1JFU09MVVRJT05fMzZyb3dzCQkoMSA8PCA4 KQkvKiBtb3N0bHkgVlQvc2VyaWFsICovCisjZGVmaW5lIE1BU0tSRVNPTFVU SU9OXzQzcm93cwkJKDEgPDwgOSkKKyNkZWZpbmUgTUFTS1JFU09MVVRJT05f NDRyb3dzCQkoMSA8PCAxMCkKKyNkZWZpbmUgTUFTS1JFU09MVVRJT05fNDhy b3dzCQkoMSA8PCAxMSkJLyogbW9zdGx5IFZUL3NlcmlhbCAqLworI2RlZmlu ZSBNQVNLUkVTT0xVVElPTl81MHJvd3MJCSgxIDw8IDEyKQorI2RlZmluZSBN QVNLUkVTT0xVVElPTl82MHJvd3MJCSgxIDw8IDEzKQorI2RlZmluZSBNQVNL UkVTT0xVVElPTl82NHJvd3MJCSgxIDw8IDE0KQorCisjZGVmaW5lIE1BU0tS RVNPTFVUSU9OXzMyMHgyMDAJCSgxIDw8IDE1KQorI2RlZmluZSBNQVNLUkVT T0xVVElPTl8zMjB4NDAwCQkoMSA8PCAxNikKKyNkZWZpbmUgTUFTS1JFU09M VVRJT05fNjQweDIwMAkJKDEgPDwgMTcpCisjZGVmaW5lIE1BU0tSRVNPTFVU SU9OXzY0MHgzNTAJCSgxIDw8IDE4KQorI2RlZmluZSBNQVNLUkVTT0xVVElP Tl82NDB4NDAwCQkoMSA8PCAxOSkKKyNkZWZpbmUgTUFTS1JFU09MVVRJT05f NjQweDQ4MAkJKDEgPDwgMjApCisjZGVmaW5lIE1BU0tSRVNPTFVUSU9OXzcy MHg0MDAJCSgxIDw8IDIxKQorI2RlZmluZSBNQVNLUkVTT0xVVElPTl83Njh4 MTAyNAkJKDEgPDwgMjIpCisjZGVmaW5lIE1BU0tSRVNPTFVUSU9OXzgwMHg2 MDAJCSgxIDw8IDIzKQorI2RlZmluZSBNQVNLUkVTT0xVVElPTl84MzJ4NjI0 CQkoMSA8PCAyNCkKKyNkZWZpbmUgTUFTS1JFU09MVVRJT05fMTAyNHg3NjgJ CSgxIDw8IDI1KQorI2RlZmluZSBNQVNLUkVTT0xVVElPTl8xMTUyeDg2NAkJ KDEgPDwgMjYpCisjZGVmaW5lIE1BU0tSRVNPTFVUSU9OXzEyODB4OTYwCQko MSA8PCAyNykKKyNkZWZpbmUgTUFTS1JFU09MVVRJT05fMTI4MHgxMDI0CSgx IDw8IDI4KQorI2RlZmluZSBNQVNLUkVTT0xVVElPTl8xNjAweDEyMDAJKDEg PDwgMjkpCisjZGVmaW5lIE1BU0tSRVNPTFVUSU9OXzIwNDh4MTU0MAkoMSA8 PCAzMCkKKyNkZWZpbmUgTUFTS1JFU09MVVRJT05fVU5MSVNURUQJCSgxIDw8 IDMxKQkvKiBub3QgbGlzdGVkIGludmFsaWQgKi8KKworY29uc3QgdW5zaWdu ZWQgbWFza3Jlc29sdXRpb24gPSAwIC8qIHVzZSBPUiB0byBleGNsdWRlIHRo b3NlOiAqLworCXwgTUFTS1JFU09MVVRJT05fNDBjb2xzCisJfCBNQVNLUkVT T0xVVElPTl8zMjB4MjAwCisJfCBNQVNLUkVTT0xVVElPTl8zMjB4NDAwCisJ Ly8gfCBNQVNLUkVTT0xVVElPTl9VTkxJU1RFRAkvKiBub3QgbGlzdGVkIGlu dmFsaWQgKi8KKwk7CisKK2ludCBtYWluIChpbnQgYXJnYywgY2hhciAqKmFy Z3YpIHsKKwlwcmludGYgKCJtaW5fZ3VqaW5fdmVyc2lvbj0weCVYIG1hc2tj cHU9MHglWCAiLAorCQltaW5fZ3VqaW5fdmVyc2lvbiwgbWFza2NwdSk7CisJ aWYgKG1hc2tEZmxhZ3MgIT0gMCkKKwkJcHJpbnRmICgibWFza0RmbGFncz0w eCVYICIsIG1hc2tEZmxhZ3MpOworCWlmIChtYXNrQWZsYWdzICE9IDApCisJ CXByaW50ZiAoIm1hc2tBZmxhZ3M9MHglWCAiLCBtYXNrQWZsYWdzKTsKKwlw cmludGYgKCJtYXNrdmVzYT0weCVYIG1hc2tyZXNvbHV0aW9uPTB4JVhcbiIs CisJCW1hc2t2ZXNhLCBtYXNrcmVzb2x1dGlvbik7CisJcmV0dXJuIDA7CisJ fQo= --0-74559014-1170719998=:33867--