From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jean Delvare Subject: i2c-tools: Improved decode-dimms script Date: Tue, 17 Mar 2009 18:20:25 +0100 Message-ID: <20090317182025.2cb1b5f5@hyperion.delvare> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="MP_/1oq0KZh4AfNuF7EosRjS/nu" Return-path: Sender: linux-i2c-owner-u79uwXL29TY76Z2rM5mHXA@public.gmane.org To: Linux I2C Cc: Paul Goyette , "Robert P. J. Day" , Mike Frysinger List-Id: linux-i2c@vger.kernel.org --MP_/1oq0KZh4AfNuF7EosRjS/nu Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Content-Disposition: inline Hi all, While the decode-dimms script is generally useful, I always had the regret that it wasn't so easy to figure out whether a specific combination of memory modules was optimum or not, because the data for each DIMM was printed separately. So I've made some changes to the script to make it more user-friendly in this respect. It was quite some work because the script was really not designed for that in the first place, but I have finally come up with something that works. More specifically, I have added an option (--side-by-side) which alters the output format of the script. Instead of displaying modules one by one, they are all displayed at the same time, with a separate column for each DIMM. This makes it very easy to compare the characteristics of the memory modules in a given system. I also added an option (--merge-cells) which makes it even easier to spot diverging characteristics by merging the cells of every given line when they all have the same value. Both options are available for both text and HTML outputs. I have attached resulting script and invite interested users to give it a try. Feedback and comments are welcome. You can also (temporarily) look at individual patches but the series is relatively long: http://jdelvare.pck.nerim.net/linux/decode-dimms/ The first 12 patches are preliminary work, patch #13 implements --side-by-side and patch #14 implements --merge-cells. I have also made available (still temporarily) examples of the new HTML output for both a good DIMM combination and a bad one: http://jdelvare.pck.nerim.net/linux/decode-dimms/decode-dimms-good.html http://jdelvare.pck.nerim.net/linux/decode-dimms/decode-dimms-bad.html I'll commit all these patches to the i2c-tools repository tomorrow. -- Jean Delvare --MP_/1oq0KZh4AfNuF7EosRjS/nu Content-Type: application/octet-stream; name=decode-dimms Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=decode-dimms IyEvdXNyL2Jpbi9wZXJsIC13CiMKIyBFRVBST00gZGF0YSBkZWNvZGVyIGZvciBTRFJBTSBESU1N IG1vZHVsZXMKIwojIENvcHlyaWdodCAxOTk4LCAxOTk5IFBoaWxpcCBFZGVsYnJvY2sgPHBoaWxA bmV0cm9lZGdlLmNvbT4KIyBtb2RpZmllZCBieSBDaHJpc3RpYW4gWnVja3NjaHdlcmR0IDx6YW55 QHRyaXEubmV0PgojIG1vZGlmaWVkIGJ5IEJ1cmthcnQgTGluZ25lciA8YnVya2FydEBib2xsY2hl bi5kZT4KIyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOSAgSmVhbiBEZWx2YXJlIDxraGFsaUBsaW51 eC1mci5vcmc+CiMKIyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy ZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQojICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiMgICAgdGhlIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg b3IKIyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgojCiMgICAgVGhpcyBw cm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws CiMgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg d2FycmFudHkgb2YKIyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UuICBTZWUgdGhlCiMgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y IG1vcmUgZGV0YWlscy4KIwojICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dy YW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyAgICBGb3VuZGF0aW9uLCBJ bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sCiMgICAgTUEgMDIx MTAtMTMwMSBVU0EuCiMKIwojIFRoZSBlZXByb20gZHJpdmVyIG11c3QgYmUgbG9hZGVkICh1bmxl c3Mgb3B0aW9uIC14IGlzIHVzZWQpLiBGb3Iga2VybmVscwojIG9sZGVyIHRoYW4gMi42LjAsIHRo ZSBlZXByb20gZHJpdmVyIGNhbiBiZSBmb3VuZCBpbiB0aGUgbG0tc2Vuc29ycyBwYWNrYWdlLgoj CiMgUmVmZXJlbmNlczoKIyBQQyBTRFJBTSBTZXJpYWwgUHJlc2VuY2UKIyBEZXRlY3QgKFNQRCkg U3BlY2lmaWNhdGlvbiwgSW50ZWwsCiMgMTk5NywxOTk5LCBSZXYgMS4yQgojCiMgSmVkZWMgU3Rh bmRhcmRzIDQuMS54ICYgNC41LngKIyBodHRwOi8vd3d3LmplZGVjLm9yZwojCgpyZXF1aXJlIDUu MDA0OwoKdXNlIHN0cmljdDsKdXNlIFBPU0lYIHF3KGNlaWwpOwp1c2UgRmNudGwgcXcoOkRFRkFV TFQgOnNlZWspOwp1c2UgdmFycyBxdygkb3B0X2h0bWwgJG9wdF9ib2R5b25seSAkb3B0X3NpZGVf Ynlfc2lkZSAkb3B0X21lcmdlCgkgICAgJG9wdF9pZ25jaGVjayAkdXNlX3N5c2ZzICR1c2VfaGV4 ZHVtcAoJICAgIEB2ZW5kb3JzICVkZWNvZGVfY2FsbGJhY2sgJHJldmlzaW9uIEBkaW1tICRjdXJy ZW50ICVoZXhkdW1wX2NhY2hlKTsKCnVzZSBjb25zdGFudCBMSVRUTEVFTkRJQU4JPT4gImxpdHRs ZS1lbmRpYW4iOwp1c2UgY29uc3RhbnQgQklHRU5ESUFOCQk9PiAiYmlnLWVuZGlhbiI7CgokcmV2 aXNpb24gPSAnJFJldmlzaW9uOiA1NTYxICQgKCREYXRlOiAyMDA4LTEyLTExIDE3OjU2OjU0ICsw MTAwIChqZXUuIDExIGTDqWMuIDIwMDgpICQpJzsKJHJldmlzaW9uID1+IHMvXCRcdys6ICguKj8p IFwkLyQxL2c7CiRyZXZpc2lvbiA9fiBzLyBcKFteKCldKlwpLy87CgpAdmVuZG9ycyA9ICgKWyJB TUQiLCAiQU1JIiwgIkZhaXJjaGlsZCIsICJGdWppdHN1IiwKICJHVEUiLCAiSGFycmlzIiwgIkhp dGFjaGkiLCAiSW5tb3MiLAogIkludGVsIiwgIkkuVC5ULiIsICJJbnRlcnNpbCIsICJNb25vbGl0 aGljIE1lbW9yaWVzIiwKICJNb3N0ZWsiLCAiRnJlZXNjYWxlIChmb3JtZXIgTW90b3JvbGEpIiwg Ik5hdGlvbmFsIiwgIk5FQyIsCiAiUkNBIiwgIlJheXRoZW9uIiwgIkNvbmV4YW50IChSb2Nrd2Vs bCkiLCAiU2VlcSIsCiAiTlhQIChmb3JtZXIgU2lnbmV0aWNzLCBQaGlsaXBzIFNlbWkuKSIsICJT eW5lcnRlayIsICJUZXhhcyBJbnN0cnVtZW50cyIsICJUb3NoaWJhIiwKICJYaWNvciIsICJaaWxv ZyIsICJFdXJvdGVjaG5pcXVlIiwgIk1pdHN1YmlzaGkiLAogIkx1Y2VudCAoQVQmVCkiLCAiRXhl bCIsICJBdG1lbCIsICJTR1MvVGhvbXNvbiIsCiAiTGF0dGljZSBTZW1pLiIsICJOQ1IiLCAiV2Fm ZXIgU2NhbGUgSW50ZWdyYXRpb24iLCAiSUJNIiwKICJUcmlzdGFyIiwgIlZpc2ljIiwgIkludGwu IENNT1MgVGVjaG5vbG9neSIsICJTU1NJIiwKICJNaWNyb2NoaXBUZWNobm9sb2d5IiwgIlJpY29o IEx0ZC4iLCAiVkxTSSIsICJNaWNyb24gVGVjaG5vbG9neSIsCiAiSHl1bmRhaSBFbGVjdHJvbmlj cyIsICJPS0kgU2VtaWNvbmR1Y3RvciIsICJBQ1RFTCIsICJTaGFycCIsCiAiQ2F0YWx5c3QiLCAi UGFuYXNvbmljIiwgIklEVCIsICJDeXByZXNzIiwKICJERUMiLCAiTFNJIExvZ2ljIiwgIlphcmxp bmsgKGZvcm1lciBQbGVzc2V5KSIsICJVVE1DIiwKICJUaGlua2luZyBNYWNoaW5lIiwgIlRob21z b24gQ1NGIiwgIkludGVncmF0ZWQgQ01PUyAoVmVydGV4KSIsICJIb25leXdlbGwiLAogIlRla3Ry b25peCIsICJTdW4gTWljcm9zeXN0ZW1zIiwgIlNTVCIsICJQcm9Nb3MvTW9zZWwgVml0ZWxpYyIs CiAiSW5maW5lb24gKGZvcm1lciBTaWVtZW5zKSIsICJNYWNyb25peCIsICJYZXJveCIsICJQbHVz IExvZ2ljIiwKICJTdW5EaXNrIiwgIkVsYW4gQ2lyY3VpdCBUZWNoLiIsICJFdXJvcGVhbiBTaWxp Y29uIFN0ci4iLCAiQXBwbGUgQ29tcHV0ZXIiLAogIlhpbGlueCIsICJDb21wYXEiLCAiUHJvdG9j b2wgRW5naW5lcyIsICJTQ0kiLAogIlNlaWtvIEluc3RydW1lbnRzIiwgIlNhbXN1bmciLCAiSTMg RGVzaWduIFN5c3RlbSIsICJLbGljIiwKICJDcm9zc3BvaW50IFNvbHV0aW9ucyIsICJBbGxpYW5j ZSBTZW1pY29uZHVjdG9yIiwgIlRhbmRlbSIsICJIZXdsZXR0LVBhY2thcmQiLAogIkludGcuIFNp bGljb24gU29sdXRpb25zIiwgIkJyb29rdHJlZSIsICJOZXcgTWVkaWEiLCAiTUhTIEVsZWN0cm9u aWMiLAogIlBlcmZvcm1hbmNlIFNlbWkuIiwgIldpbmJvbmQgRWxlY3Ryb25pYyIsICJLYXdhc2Fr aSBTdGVlbCIsICJCcmlnaHQgTWljcm8iLAogIlRFQ01BUiIsICJFeGFyIiwgIlBDTUNJQSIsICJM RyBTZW1pIChmb3JtZXIgR29sZHN0YXIpIiwKICJOb3J0aGVybiBUZWxlY29tIiwgIlNhbnlvIiwg IkFycmF5IE1pY3Jvc3lzdGVtcyIsICJDcnlzdGFsIFNlbWljb25kdWN0b3IiLAogIkFuYWxvZyBE ZXZpY2VzIiwgIlBNQy1TaWVycmEiLCAiQXNwYXJpeCIsICJDb252ZXggQ29tcHV0ZXIiLAogIlF1 YWxpdHkgU2VtaWNvbmR1Y3RvciIsICJOaW1idXMgVGVjaG5vbG9neSIsICJUcmFuc3dpdGNoIiwg Ik1pY3JvbmFzIChJVFQgSW50ZXJtZXRhbGwpIiwKICJDYW5ub24iLCAiQWx0ZXJhIiwgIk5FWENP TSIsICJRVUFMQ09NTSIsCiAiU29ueSIsICJDcmF5IFJlc2VhcmNoIiwgIkFNUyhBdXN0cmlhIE1p Y3JvKSIsICJWaXRlc3NlIiwKICJBc3RlciBFbGVjdHJvbmljcyIsICJCYXkgTmV0d29ya3MgKFN5 bm9wdGljKSIsICJaZW50cnVtIG9yIFpNRCIsICJUUlciLAogIlRoZXN5cyIsICJTb2xib3VybmUg Q29tcHV0ZXIiLCAiQWxsaWVkLVNpZ25hbCIsICJEaWFsb2ciLAogIk1lZGlhIFZpc2lvbiIsICJM ZXZlbCBPbmUgQ29tbXVuaWNhdGlvbiJdLApbIkNpcnJ1cyBMb2dpYyIsICJOYXRpb25hbCBJbnN0 cnVtZW50cyIsICJJTEMgRGF0YSBEZXZpY2UiLCAiQWxjYXRlbCBNaWV0ZWMiLAogIk1pY3JvIExp bmVhciIsICJVbml2LiBvZiBOQyIsICJKVEFHIFRlY2hub2xvZ2llcyIsICJCQUUgU3lzdGVtcyIs CiAiTmNoaXAiLCAiR2FsaWxlbyBUZWNoIiwgIkJlc3RsaW5rIFN5c3RlbXMiLCAiR3JheWNoaXAi LAogIkdFTk5VTSIsICJWaWRlb0xvZ2ljIiwgIlJvYmVydCBCb3NjaCIsICJDaGlwIEV4cHJlc3Mi LAogIkRBVEFSQU0iLCAiVW5pdGVkIE1pY3JvZWxlYyBDb3JwLiIsICJUQ1NJIiwgIlNtYXJ0IE1v ZHVsYXIiLAogIkh1Z2hlcyBBaXJjcmFmdCIsICJMYW5zdGFyIFNlbWljb25kdWN0b3IiLCAiUWxv Z2ljIiwgIktpbmdzdG9uIiwKICJNdXNpYyBTZW1pIiwgIkVyaWNzc29uIENvbXBvbmVudHMiLCAi U3BhU0UiLCAiRW9uIFNpbGljb24gRGV2aWNlcyIsCiAiUHJvZ3JhbW1hYmxlIE1pY3JvIENvcnAi LCAiRG9EIiwgIkludGVnLiBNZW1vcmllcyBUZWNoLiIsICJDb3JvbGxhcnkgSW5jLiIsCiAiRGFs bGFzIFNlbWljb25kdWN0b3IiLCAiT21uaXZpc2lvbiIsICJFSVYoU3dpdHplcmxhbmQpIiwgIk5v dmF0ZWwgV2lyZWxlc3MiLAogIlphcmxpbmsgKGZvcm1lciBNaXRlbCkiLCAiQ2xlYXJwb2ludCIs ICJDYWJsZXRyb24iLCAiU1RFQyAoZm9ybWVyIFNpbGljb24gVGVjaG5vbG9neSkiLAogIlZhbmd1 YXJkIiwgIkhhZ2l3YXJhIFN5cy1Db20iLCAiVmFudGlzIiwgIkNlbGVzdGljYSIsCiAiQ2VudHVy eSIsICJIYWwgQ29tcHV0ZXJzIiwgIlJvaG0gQ29tcGFueSBMdGQuIiwgIkp1bmlwZXIgTmV0d29y a3MiLAogIkxpYml0IFNpZ25hbCBQcm9jZXNzaW5nIiwgIk11c2hraW4gRW5oYW5jZWQgTWVtb3J5 IiwgIlR1bmRyYSBTZW1pY29uZHVjdG9yIiwgIkFkYXB0ZWMgSW5jLiIsCiAiTGlnaHRTcGVlZCBT ZW1pLiIsICJaU1AgQ29ycC4iLCAiQU1JQyBUZWNobm9sb2d5IiwgIkFkb2JlIFN5c3RlbXMiLAog IkR5bmFjaGlwIiwgIlBOWSBFbGVjdHJvbmljcyIsICJOZXdwb3J0IERpZ2l0YWwiLCAiTU1DIE5l dHdvcmtzIiwKICJUIFNxdWFyZSIsICJTZWlrbyBFcHNvbiIsICJCcm9hZGNvbSIsICJWaWtpbmcg Q29tcG9uZW50cyIsCiAiVjMgU2VtaWNvbmR1Y3RvciIsICJGbGV4dHJvbmljcyAoZm9ybWVyIE9y Yml0KSIsICJTdXdhIEVsZWN0cm9uaWNzIiwgIlRyYW5zbWV0YSIsCiAiTWljcm9uIENNUyIsICJB bWVyaWNhbiBDb21wdXRlciAmIERpZ2l0YWwgQ29tcG9uZW50cyBJbmMiLCAiRW5oYW5jZSAzMDAw IEluYyIsICJUb3dlciBTZW1pY29uZHVjdG9yIiwKICJDUFUgRGVzaWduIiwgIlByaWNlIFBvaW50 IiwgIk1heGltIEludGVncmF0ZWQgUHJvZHVjdCIsICJUZWxsYWJzIiwKICJDZW50YXVyIFRlY2hu b2xvZ3kiLCAiVW5pZ2VuIENvcnBvcmF0aW9uIiwgIlRyYW5zY2VuZCBJbmZvcm1hdGlvbiIsICJN ZW1vcnkgQ2FyZCBUZWNobm9sb2d5IiwKICJDS0QgQ29ycG9yYXRpb24gTHRkLiIsICJDYXBpdGFs IEluc3RydW1lbnRzLCBJbmMuIiwgIkFpY2EgS29neW8sIEx0ZC4iLCAiTGludmV4IFRlY2hub2xv Z3kiLAogIk1TQyBWZXJ0cmllYnMgR21iSCIsICJBS00gQ29tcGFueSwgTHRkLiIsICJEeW5hbWVt LCBJbmMuIiwgIk5FUkEgQVNBIiwKICJHU0kgVGVjaG5vbG9neSIsICJEYW5lLUVsZWMgKEMgTWVt b3J5KSIsICJBY29ybiBDb21wdXRlcnMiLCAiTGFyYSBUZWNobm9sb2d5IiwKICJPYWsgVGVjaG5v bG9neSwgSW5jLiIsICJJdGVjIE1lbW9yeSIsICJUYW5pc3lzIFRlY2hub2xvZ3kiLCAiVHJ1ZXZp c2lvbiIsCiAiV2ludGVjIEluZHVzdHJpZXMiLCAiU3VwZXIgUEMgTWVtb3J5IiwgIk1HViBNZW1v cnkiLCAiR2FsdmFudGVjaCIsCiAiR2Fkem9veCBOdGV3b3JrcyIsICJNdWx0aSBEaW1lbnNpb25h bCBDb25zLiIsICJHYXRlRmllbGQiLCAiSW50ZWdyYXRlZCBNZW1vcnkgU3lzdGVtIiwKICJUcmlz Y2VuZCIsICJYYVF0aSIsICJHb2xkZW5yYW0iLCAiQ2xlYXIgTG9naWMiLAogIkNpbWFyb24gQ29t bXVuaWNhdGlvbnMiLCAiTmlwcG9uIFN0ZWVsIFNlbWkuIENvcnAuIiwgIkFkdmFudGFnZSBNZW1v cnkiLCAiQU1DQyIsCiAiTGVDcm95IiwgIllhbWFoYSBDb3Jwb3JhdGlvbiIsICJEaWdpdGFsIE1p Y3Jvd2F2ZSIsICJOZXRMb2dpYyBNaWNyb3N5c3RlbXMiLAogIk1JTU9TIFNlbWljb25kdWN0b3Ii LCAiQWR2YW5jZWQgRmlicmUiLCAiQkYgR29vZHJpY2ggRGF0YS4iLCAiRXBpZ3JhbSIsCiAiQWNi ZWwgUG9seXRlY2ggSW5jLiIsICJBcGFjZXIgVGVjaG5vbG9neSIsICJBZG1vciBNZW1vcnkiLCAi Rk9YQ09OTiIsCiAiUXVhZHJhdGljcyBTdXBlcmNvbmR1Y3RvciIsICIzQ09NIl0sClsiQ2FtaW50 b25uIENvcnBvcmF0aW9uIiwgIklTT0EgSW5jb3Jwb3JhdGVkIiwgIkFnYXRlIFNlbWljb25kdWN0 b3IiLCAiQURNdGVrIEluY29ycG9yYXRlZCIsCiAiSFlQRVJURUMiLCAiQWRob2MgVGVjaG5vbG9n aWVzIiwgIk1PU0FJRCBUZWNobm9sb2dpZXMiLCAiQXJkZW50IFRlY2hub2xvZ2llcyIsCiAiU3dp dGNoY29yZSIsICJDaXNjbyBTeXN0ZW1zLCBJbmMuIiwgIkFsbGF5ZXIgVGVjaG5vbG9naWVzIiwg IldvcmtYIEFHIiwKICJPYXNpcyBTZW1pY29uZHVjdG9yIiwgIk5vdmFuZXQgU2VtaWNvbmR1Y3Rv ciIsICJFLU0gU29sdXRpb25zIiwgIlBvd2VyIEdlbmVyYWwiLAogIkFkdmFuY2VkIEhhcmR3YXJl IEFyY2guIiwgIklub3ZhIFNlbWljb25kdWN0b3JzIEdtYkgiLCAiVGVsb2NpdHkiLCAiRGVsa2lu IERldmljZXMiLAogIlN5bWFnZXJ5IE1pY3Jvc3lzdGVtcyIsICJDLVBvcnQgQ29ycG9yYXRpb24i LCAiU2liZXJDb3JlIFRlY2hub2xvZ2llcyIsICJTb3V0aGxhbmQgTWljcm9zeXN0ZW1zIiwKICJN YWxsZWFibGUgVGVjaG5vbG9naWVzIiwgIktlbmRpbiBDb21tdW5pY2F0aW9ucyIsICJHcmVhdCBU ZWNobm9sb2d5IE1pY3JvY29tcHV0ZXIiLCAiU2FubWluYSBDb3Jwb3JhdGlvbiIsCiAiSEFEQ08g Q29ycG9yYXRpb24iLCAiQ29yc2FpciIsICJBY3RyYW5zIFN5c3RlbSBJbmMuIiwgIkFMUEhBIFRl Y2hub2xvZ2llcyIsCiAiU2lsaWNvbiBMYWJvcmF0b3JpZXMsIEluYy4gKEN5Z25hbCkiLCAiQXJ0 ZXN5biBUZWNobm9sb2dpZXMiLCAiQWxpZ24gTWFudWZhY3R1cmluZyIsICJQZXJlZ3JpbmUgU2Vt aWNvbmR1Y3RvciIsCiAiQ2hhbWVsZW9uIFN5c3RlbXMiLCAiQXBsdXMgRmxhc2ggVGVjaG5vbG9n eSIsICJNSVBTIFRlY2hub2xvZ2llcyIsICJDaHJ5c2FsaXMgSVRTIiwKICJBRFRFQyBDb3Jwb3Jh dGlvbiIsICJLZW50cm9uIFRlY2hub2xvZ2llcyIsICJXaW4gVGVjaG5vbG9naWVzIiwgIlRhY2h5 b24gU2VtaWNvbmR1Y3RvciAoZm9ybWVyIEFTSUMgRGVzaWducyBJbmMuKSIsCiAiRXh0cmVtZSBQ YWNrZXQgRGV2aWNlcyIsICJSRiBNaWNybyBEZXZpY2VzIiwgIlNpZW1lbnMgQUciLCAiU2Fybm9m ZiBDb3Jwb3JhdGlvbiIsCiAiSXRhdXRlYyBQaGlsY28gU0EiLCAiUmFkaWF0YSBJbmMuIiwgIkJl bmNobWFyayBFbGVjdC4gKEFWRVgpIiwgIkxlZ2VuZCIsCiAiU3BlY1RlayBJbmNvcnBvcmF0ZWQi LCAiSGkvZm4iLCAiRW5pa2lhIEluY29ycG9yYXRlZCIsICJTd2l0Y2hPbiBOZXR3b3JrcyIsCiAi QUFOZXRjb20gSW5jb3Jwb3JhdGVkIiwgIk1pY3JvIE1lbW9yeSBCYW5rIiwgIkVTUyBUZWNobm9s b2d5IiwgIlZpcmF0YSBDb3Jwb3JhdGlvbiIsCiAiRXhjZXNzIEJhbmR3aWR0aCIsICJXZXN0IEJh eSBTZW1pY29uZHVjdG9yIiwgIkRTUCBHcm91cCIsICJOZXdwb3J0IENvbW11bmljYXRpb25zIiwK ICJDaGlwMkNoaXAgSW5jb3Jwb3JhdGVkIiwgIlBob2JvcyBDb3Jwb3JhdGlvbiIsICJJbnRlbGxp dGVjaCBDb3Jwb3JhdGlvbiIsICJOb3JkaWMgVkxTSSBBU0EiLAogIklzaG9uaSBOZXR3b3JrcyIs ICJTaWxpY29uIFNwaWNlIiwgIkFsY2hlbXkgU2VtaWNvbmR1Y3RvciIsICJBZ2lsZW50IFRlY2hu b2xvZ2llcyIsCiAiQ2VudGlsbGl1bSBDb21tdW5pY2F0aW9ucyIsICJXLkwuIEdvcmUiLCAiSGFu Qml0IEVsZWN0cm9uaWNzIiwgIkdsb2JlU3BhbiIsCiAiRWxlbWVudCAxNCIsICJQeWNvbiIsICJT YWlmdW4gU2VtaWNvbmR1Y3RvcnMiLCAiU2lieXRlLCBJbmNvcnBvcmF0ZWQiLAogIk1ldGFMaW5r IFRlY2hub2xvZ2llcyIsICJGZWl5YSBUZWNobm9sb2d5IiwgIkkgJiBDIFRlY2hub2xvZ3kiLCAi U2hpa2F0cm9uaWNzIiwKICJFbGVrdHJvYml0IiwgIk1lZ2ljIiwgIkNvbS1UaWVyIiwgIk1hbGF5 c2lhIE1pY3JvIFNvbHV0aW9ucyIsCiAiSHlwZXJjaGlwIiwgIkdlbXN0b25lIENvbW11bmljYXRp b25zIiwgIkFuYWRpZ20gKGZvcm1lciBBbmFkeW5lKSIsICIzUGFyRGF0YSIsCiAiTWVsbGFub3gg VGVjaG5vbG9naWVzIiwgIlRlbnggVGVjaG5vbG9naWVzIiwgIkhlbGl4IEFHIiwgIkRvbW9zeXMi LAogIlNreXVwIFRlY2hub2xvZ3kiLCAiSGlOVCBDb3Jwb3JhdGlvbiIsICJDaGlhcm8iLCAiTURU IFRlY2hub2xvZ2llcyBHbWJIIChmb3JtZXIgTUNJIENvbXB1dGVyIEdNQkgpIiwKICJFeGJpdCBU ZWNobm9sb2d5IEEvUyIsICJJbnRlZ3JhdGVkIFRlY2hub2xvZ3kgRXhwcmVzcyIsICJBVkVEIE1l bW9yeSIsICJMZWdlcml0eSIsCiAiSmFzbWluZSBOZXR3b3JrcyIsICJDYXNwaWFuIE5ldHdvcmtz IiwgIm5DVUJFIiwgIlNpbGljb24gQWNjZXNzIE5ldHdvcmtzIiwKICJGREsgQ29ycG9yYXRpb24i LCAiSGlnaCBCYW5kd2lkdGggQWNjZXNzIiwgIk11bHRpTGluayBUZWNobm9sb2d5IiwgIkJSRUNJ UyIsCiAiV29ybGQgV2lkZSBQYWNrZXRzIiwgIkFQVyIsICJDaGljb3J5IFN5c3RlbXMiLCAiWHN0 cmVhbSBMb2dpYyIsCiAiRmFzdC1DaGlwIiwgIlp1Y290dG8gV2lyZWxlc3MiLCAiUmVhbGNoaXAi LCAiR2FsYXh5IFBvd2VyIiwKICJlU2lsaWNvbiIsICJNb3JwaGljcyBUZWNobm9sb2d5IiwgIkFj Y2VsZXJhbnQgTmV0d29ya3MiLCAiU2lsaWNvbiBXYXZlIiwKICJTYW5kQ3JhZnQiLCAiRWxwaWRh Il0sClsiU29sZWN0cm9uIiwgIk9wdG9zeXMgVGVjaG5vbG9naWVzIiwgIkJ1ZmZhbG8gKGZvcm1l ciBNZWxjbykiLCAiVHJpTWVkaWEgVGVjaG5vbG9naWVzIiwKICJDeWFuIFRlY2hub2xvZ2llcyIs ICJHbG9iYWwgTG9jYXRlIiwgIk9wdGlsbGlvbiIsICJUZXJhZ28gQ29tbXVuaWNhdGlvbnMiLAog IklrYW5vcyBDb21tdW5pY2F0aW9ucyIsICJQcmluY2V0b24gVGVjaG5vbG9neSIsICJOYW55YSBU ZWNobm9sb2d5IiwgIkVsaXRlIEZsYXNoIFN0b3JhZ2UiLAogIk15c3RpY29tIiwgIkxpZ2h0U2Fu ZCBDb21tdW5pY2F0aW9ucyIsICJBVEkgVGVjaG5vbG9naWVzIiwgIkFnZXJlIFN5c3RlbXMiLAog Ik5lb01hZ2ljIiwgIkF1cm9yYU5ldGljcyIsICJHb2xkZW4gRW1waXJlIiwgIk11c2hraW4iLAog IlRpb2dhIFRlY2hub2xvZ2llcyIsICJOZXRsaXN0IiwgIlRlcmFMb2dpYyIsICJDaWNhZGEgU2Vt aWNvbmR1Y3RvciIsCiAiQ2VudG9uIEVsZWN0cm9uaWNzIiwgIlR5Y28gRWxlY3Ryb25pY3MiLCAi TWFnaXMgV29ya3MiLCAiWmV0dGFjb20iLAogIkNvZ2VuY3kgU2VtaWNvbmR1Y3RvciIsICJDaGlw Y29uIEFTIiwgIkFzcGV4IFRlY2hub2xvZ3kiLCAiRjUgTmV0d29ya3MiLAogIlByb2dyYW1tYWJs ZSBTaWxpY29uIFNvbHV0aW9ucyIsICJDaGlwV3JpZ2h0cyIsICJBY29ybiBOZXR3b3JrcyIsICJR dWlja2xvZ2ljIiwKICJLaW5nbWF4IFNlbWljb25kdWN0b3IiLCAiQk9QUyIsICJGbGFzeXMiLCAi Qml0QmxpdHogQ29tbXVuaWNhdGlvbnMiLAogImVNZW1vcnkgVGVjaG5vbG9neSIsICJQcm9ja2V0 IE5ldHdvcmtzIiwgIlB1cnBsZSBSYXkiLCAiVHJlYmlhIE5ldHdvcmtzIiwKICJEZWx0YSBFbGVj dHJvbmljcyIsICJPbmV4IENvbW11bmljYXRpb25zIiwgIkFtcGxlIENvbW11bmljYXRpb25zIiwg Ik1lbW9yeSBFeHBlcnRzIEludGwiLAogIkFzdHV0ZSBOZXR3b3JrcyIsICJBemFuZGEgTmV0d29y ayBEZXZpY2VzIiwgIkRpYmNvbSIsICJUZWttb3MiLAogIkFQSSBOZXRXb3JrcyIsICJCYXkgTWlj cm9zeXN0ZW1zIiwgIkZpcmVjcm9uIEx0ZCIsICJSZXNvbmV4dCBDb21tdW5pY2F0aW9ucyIsCiAi VGFjaHlzIFRlY2hub2xvZ2llcyIsICJFcXVhdG9yIFRlY2hub2xvZ3kiLCAiQ29uY2VwdCBDb21w dXRlciIsICJTSUxDT00iLAogIjNEbGFicyIsICJjJ3QgTWFnYXppbmUiLCAiU2FuZXJhIFN5c3Rl bXMiLCAiU2lsaWNvbiBQYWNrZXRzIiwKICJWaWFzeXN0ZW1zIEdyb3VwIiwgIlNpbXRlayIsICJT ZW1pY29uIERldmljZXMgU2luZ2Fwb3JlIiwgIlNhdHJvbiBIYW5kZWxzZ2VzIiwKICJJbXByb3Yg U3lzdGVtcyIsICJJTkRVU1lTIEdtYkgiLCAiQ29ycmVudCIsICJJbmZyYW50IFRlY2hub2xvZ2ll cyIsCiAiUml0ZWsgQ29ycCIsICJlbXBvd2VyVGVsIE5ldHdvcmtzIiwgIkh5cGVydGVjIiwgIkNh dml1bSBOZXR3b3JrcyIsCiAiUExYIFRlY2hub2xvZ3kiLCAiTWFzc2FuYSBEZXNpZ24iLCAiSW50 cmluc2l0eSIsICJWYWxlbmNlIFNlbWljb25kdWN0b3IiLAogIlRlcmF3YXZlIENvbW11bmljYXRp b25zIiwgIkljZUZ5cmUgU2VtaWNvbmR1Y3RvciIsICJQcmltYXJpb24iLCAiUGljb2NoaXAgRGVz aWducyBMdGQiLAogIlNpbHZlcmJhY2sgU3lzdGVtcyIsICJKYWRlIFN0YXIgVGVjaG5vbG9naWVz IiwgIlBpam5lbmJ1cmcgU2VjdXJlYWxpbmsiLAogIlRha2VNUyBJbnRlcm5hdGlvbmFsIEFHIiwg IkNhbWJyaWRnZSBTaWxpY29uIFJhZGlvIiwKICJTd2lzc2JpdCIsICJOYXpvbWkgQ29tbXVuaWNh dGlvbnMiLCAiZVdhdmUgU3lzdGVtIiwKICJSb2Nrd2VsbCBDb2xsaW5zIiwgIlBpY29jZWwgQ28u LCBMdGQuIiwgIkFscGhhbW9zYWljIEx0ZCIsICJTYW5kYnVyc3QiLAogIlNpQ29uIFZpZGVvIiwg Ik5hbm9BbXAgU29sdXRpb25zIiwgIkVyaWNzc29uIFRlY2hub2xvZ3kiLCAiUHJhaXJpZUNvbW0i LAogIk1pdGFjIEludGVybmF0aW9uYWwiLCAiTGF5ZXIgTiBOZXR3b3JrcyIsICJNdGVrVmlzaW9u IiwgIkFsbGVncm8gTmV0d29ya3MiLAogIk1hcnZlbGwgU2VtaWNvbmR1Y3RvcnMiLCAiTmV0ZXJn eSBNaWNyb2VsZWN0cm9uaWMiLCAiTlZJRElBIiwgIkludGVybmV0IE1hY2hpbmVzIiwKICJQZWFr IEVsZWN0cm9uaWNzIiwgIkxpdGNoZmllbGQgQ29tbXVuaWNhdGlvbiIsICJBY2N0b24gVGVjaG5v bG9neSIsICJUZXJhZGlhbnQgTmV0d29ya3MiLAogIkV1cm9wZSBUZWNobm9sb2dpZXMiLCAiQ29y dGluYSBTeXN0ZW1zIiwgIlJBTSBDb21wb25lbnRzIiwgIlJhcWlhIE5ldHdvcmtzIiwKICJDbGVh clNwZWVkIiwgIk1hdHN1c2hpdGEgQmF0dGVyeSIsICJYZWxlcmF0ZWQiLCAiU2ltcGxlVGVjaCIs CiAiVXRyb24gVGVjaG5vbG9neSIsICJBc3RlYyBJbnRlcm5hdGlvbmFsIiwgIkFWTSBnbWJIIiwg IlJlZHV4IENvbW11bmljYXRpb25zIiwKICJEb3QgSGlsbCBTeXN0ZW1zIiwgIlRlcmFDaGlwIl0s ClsiVC1SQU0gSW5jb3Jwb3JhdGVkIiwgIklubm92aWNzIFdpcmVsZXNzIiwgIlRla25vdnVzIiwg IktleUV5ZSBDb21tdW5pY2F0aW9ucyIsCiAiUnVuY29tIFRlY2hub2xvZ2llcyIsICJSZWRTd2l0 Y2giLCAiRG90Y2FzdCIsICJTaWxpY29uIE1vdW50YWluIE1lbW9yeSIsCiAiU2lnbmlhIFRlY2hu b2xvZ2llcyIsICJQaXhpbSIsICJHYWxhemFyIE5ldHdvcmtzIiwgIldoaXRlIEVsZWN0cm9uaWMg RGVzaWducyIsCiAiUGF0cmlvdCBTY2llbnRpZmljIiwgIk5lb2F4aW9tIENvcnBvcmF0aW9uIiwg IjNZIFBvd2VyIFRlY2hub2xvZ3kiLCAiRXVyb3BlIFRlY2hub2xvZ2llcyIsCiAiUG90ZW50aWEg UG93ZXIgU3lzdGVtcyIsICJDLWd1eXMgSW5jb3Jwb3JhdGVkIiwgIkRpZ2l0YWwgQ29tbXVuaWNh dGlvbnMgVGVjaG5vbG9neSBJbmNvcnBvcmF0ZWQiLCAiU2lsaWNvbi1CYXNlZCBUZWNobm9sb2d5 IiwKICJGdWxjcnVtIE1pY3Jvc3lzdGVtcyIsICJQb3NpdGl2byBJbmZvcm1hdGljYSBMdGQiLCAi WElPdGVjaCBDb3Jwb3JhdGlvbiIsICJQb3J0YWxQbGF5ZXIiLAogIlpoaXlpbmcgU29mdHdhcmUi LCAiRGlyZWN0MkRhdGEiLCAiUGhvbmV4IEJyb2FkYmFuZCIsICJTa3l3b3JrcyBTb2x1dGlvbnMi LAogIkVudHJvcGljIENvbW11bmljYXRpb25zIiwgIlBhY2lmaWMgRm9yY2UgVGVjaG5vbG9neSIs ICJaZW5zeXMgQS9TIiwgIkxlZ2VuZCBTaWxpY29uIENvcnAuIiwKICJzY2ktd29yeCBHbWJIIiwg IlNNU0MgKGZvcm1lciBPYXNpcyBTaWxpY29uIFN5c3RlbXMpIiwgIlJlbmVzYXMgVGVjaG5vbG9n eSIsICJSYXphIE1pY3JvZWxlY3Ryb25pY3MiLAogIlBoeXdvcmtzIiwgIk1lZGlhVGVrIiwgIk5v bi1jZW50cyBQcm9kdWN0aW9ucyIsICJVUyBNb2R1bGFyIiwKICJXaW50ZWdyYSBMdGQiLCAiTWF0 aHN0YXIiLCAiU3RhckNvcmUiLCAiT3BsdXMgVGVjaG5vbG9naWVzIiwKICJNaW5kc3BlZWQiLCAi SnVzdCBZb3VuZyBDb21wdXRlciIsICJSYWRpYSBDb21tdW5pY2F0aW9ucyIsICJPQ1oiLAogIkVt dXplZCIsICJMT0dJQyBEZXZpY2VzIiwgIklucGhpIENvcnBvcmF0aW9uIiwgIlF1YWtlIFRlY2hu b2xvZ2llcyIsCiAiVml4ZWwiLCAiU29sdXNUZWsiLCAiS29uZ3NiZXJnIE1hcml0aW1lIiwgIkZh cmFkYXkgVGVjaG5vbG9neSIsCiAiQWx0aXVtIEx0ZC4iLCAiSW5zeXRlIiwgIkFSTSBMdGQuIiwg IkRpZ2lWaXNpb24iLAogIlZhdGl2IFRlY2hub2xvZ2llcyIsICJFbmRpY290dCBJbnRlcmNvbm5l Y3QgVGVjaG5vbG9naWVzIiwgIlBlcmljb20iLCAiQmFuZHNwZWVkIiwKICJMZVdpeiBDb21tdW5p Y2F0aW9ucyIsICJDUFUgVGVjaG5vbG9neSIsICJSYW1heGVsIFRlY2hub2xvZ3kiLCAiRFNQIEdy b3VwIiwKICJBeGlzIENvbW11bmljYXRpb25zIiwgIkxlZ2FjeSBFbGVjdHJvbmljcyIsICJDaHJv bnRlbCIsICJQb3dlcmNoaXAgU2VtaWNvbmR1Y3RvciIsCiAiTW9iaWxFeWUgVGVjaG5vbG9naWVz IiwgIkV4Y2VsIFNlbWljb25kdWN0b3IiLCAiQS1EQVRBIFRlY2hub2xvZ3kiLCAiVmlydHVhbERp Z20iLAogIkcgU2tpbGwgSW50bCIsICJRdWFudGEgQ29tcHV0ZXIiLCAiWWllbGQgTWljcm9lbGVj dHJvbmljcyIsICJBZmEgVGVjaG5vbG9naWVzIiwKICJLSU5HQk9YIFRlY2hub2xvZ3kgQ28uIEx0 ZC4iLCAiQ2V2YSIsICJpU3RvciBOZXR3b3JrcyIsICJBZHZhbmNlIE1vZHVsZXMiLAogIk1pY3Jv c29mdCIsICJPcGVuLVNpbGljb24iLCAiR29hbCBTZW1pY29uZHVjdG9yIiwgIkFSQyBJbnRlcm5h dGlvbmFsIiwKICJTaW1tdGVjIiwgIk1ldGFub2lhIiwgIktleSBTdHJlYW0iLCAiTG93cmFuY2Ug RWxlY3Ryb25pY3MiLAogIkFkaW1vcyIsICJTaUdlIFNlbWljb25kdWN0b3IiLCAiRm9kdXMgQ29t bXVuaWNhdGlvbnMiLCAiQ3JlZGVuY2UgU3lzdGVtcyBDb3JwLiIsCiAiR2VuZXNpcyBNaWNyb2No aXAgSW5jLiIsICJWaWhhbmEsIEluYy4iLCAiV0lTIFRlY2hub2xvZ2llcyIsICJHYXRlQ2hhbmdl IFRlY2hub2xvZ2llcyIsCiAiSGlnaCBEZW5zaXR5IERldmljZXMgQVMiLCAiU3lub3BzeXMiLCAi R2lnYXJhbSIsICJFbmlnbWEgU2VtaWNvbmR1Y3RvciBJbmMuIiwKICJDZW50dXJ5IE1pY3JvIElu Yy4iLCAiSWNlcmEgU2VtaWNvbmR1Y3RvciIsICJNZWRpYXdvcmtzIEludGVncmF0ZWQgU3lzdGVt cyIsICJPJ05laWwgUHJvZHVjdCBEZXZlbG9wbWVudCIsCiAiU3VwcmVtZSBUb3AgVGVjaG5vbG9n eSBMdGQuIiwgIk1pY3JvRGlzcGxheSBDb3Jwb3JhdGlvbiIsICJUZWFtIEdyb3VwIEluYy4iLCAi U2luZXR0IENvcnBvcmF0aW9uIiwKICJUb3NoaWJhIENvcnBvcmF0aW9uIiwgIlRlbnNpbGljYSIs ICJTaVJGIFRlY2hub2xvZ3kiLCAiQmFjb2MgSW5jLiIsCiAiU01hTCBDYW1lcmEgVGVjaG5vbG9n aWVzIiwgIlRob21zb24gU0MiLCAiQWlyZ28gTmV0d29ya3MiLCAiV2lzYWlyIEx0ZC4iLAogIlNp Z21hVGVsIiwgIkFya2Fkb3MiLCAiQ29tcGV0ZSBJVCBnbWJIIENvLiBLRyIsICJFdWRhciBUZWNo bm9sb2d5IEluYy4iLAogIkZvY3VzIEVuaGFuY2VtZW50cyIsICJYeXJhdGV4Il0sClsiU3BlY3Vs YXIgTmV0d29ya3MiLCAiUGF0cmlvdCBNZW1vcnkiLCAiVS1DaGlwIFRlY2hub2xvZ3kgQ29ycC4i LCAiU2lsaWNvbiBPcHRpeCIsCiAiR3JlZW5maWVsZCBOZXR3b3JrcyIsICJDb21wdVJBTSBHbWJI IiwgIlN0YXJnZW4sIEluYy4iLCAiTmV0Q2VsbCBDb3Jwb3JhdGlvbiIsCiAiRXhjYWxpYnJ1cyBU ZWNobm9sb2dpZXMgTHRkIiwgIlNDTSBNaWNyb3N5c3RlbXMiLCAiWHNpZ28gU3lzdGVtcywgSW5j LiIsICJDSElQUyAmIFN5c3RlbXMgSW5jIiwKICJUaWVyIDEgTXVsdGljaGlwIFNvbHV0aW9ucyIs ICJDV1JMIExhYnMiLCAiVGVyYWRpY2kiLCAiR2lnYXJhbSwgSW5jLiIsCiAiZzIgTWljcm9zeXN0 ZW1zIiwgIlBvd2VyRmxhc2ggU2VtaWNvbmR1Y3RvciIsICJQLkEuIFNlbWksIEluYy4iLCAiTm92 YVRlY2ggU29sdXRpb25zLCBTLkEuIiwKICJjMiBNaWNyb3N5c3RlbXMsIEluYy4iLCAiTGV2ZWw1 IE5ldHdvcmtzIiwgIkNPUyBNZW1vcnkgQUciLCAiSW5ub3Zhc2ljIFNlbWljb25kdWN0b3IiLAog IjAySUMgQ28uIEx0ZCIsICJUYWJ1bGEsIEluYy4iLCAiQ3J1Y2lhbCBUZWNobm9sb2d5IiwgIkNo ZWxzaW8gQ29tbXVuaWNhdGlvbnMiLAogIlNvbGFyZmxhcmUgQ29tbXVuaWNhdGlvbnMiLCAiWGFt YmFsYSBJbmMuIiwgIkVBRFMgQXN0cml1bSIsICJBVE8gU2VtaWNvbiBDby4gTHRkLiIsCiAiSW1h Z2luZyBXb3JrcywgSW5jLiIsICJBc3R1dGUgTmV0d29ya3MsIEluYy4iLCAiVHplcm8iLCAiRW11 bGV4IiwKICJQb3dlci1PbmUiLCAiUHVsc2V+TElOSyBJbmMuIiwgIkhvbiBIYWkgUHJlY2lzaW9u IEluZHVzdHJ5IiwgIldoaXRlIFJvY2sgTmV0d29ya3MgSW5jLiIsCiAiVGVsZWdlbnQgU3lzdGVt cyBVU0EsIEluYy4iLCAiQXRydWEgVGVjaG5vbG9naWVzLCBJbmMuIiwgIkFjYmVsIFBvbHl0ZWNo IEluYy4iLAogImVSaWRlIEluYy4iLCJVTGkgRWxlY3Ryb25pY3MgSW5jLiIsICJNYWdudW0gU2Vt aWNvbmR1Y3RvciBJbmMuIiwgIm5lb09uZSBUZWNobm9sb2d5LCBJbmMuIiwKICJDb25uZXggVGVj aG5vbG9neSwgSW5jLiIsICJTdHJlYW0gUHJvY2Vzc29ycywgSW5jLiIsICJGb2N1cyBFbmhhbmNl bWVudHMiLCAiVGVsZWNpcyBXaXJlbGVzcywgSW5jLiIsCiAidU5hdiBNaWNyb2VsZWN0cm9uaWNz IiwgIlRhcmFyaSwgSW5jLiIsICJBbWJyaWMsIEluYy4iLCAiTmV3cG9ydCBNZWRpYSwgSW5jLiIs ICJWTVRTIiwKICJFbnVjbGlhIFNlbWljb25kdWN0b3IsIEluYy4iLCAiVmlydGl1bSBUZWNobm9s b2d5IEluYy4iLCAiU29saWQgU3RhdGUgU3lzdGVtIENvLiwgTHRkLiIsICJLaWFuIFRlY2ggTExD IiwKICJBcnRpbWkiLCAiUG93ZXIgUXVvdGllbnQgSW50ZXJuYXRpb25hbCIsICJBdmFnbyBUZWNo bm9sb2dpZXMiLCAiQURUZWNobm9sb2d5IiwgIlNpZ21hIERlc2lnbnMiLAogIlNpQ29ydGV4LCBJ bmMuIiwgIlZlbnR1cmEgVGVjaG5vbG9neSBHcm91cCIsICJlQVNJQyIsICJNLkguUy4gU0FTIiwg Ik1pY3JvIFN0YXIgSW50ZXJuYXRpb25hbCIsCiAiUmFwcG9ydCBJbmMuIiwgIk1ha3dheSBJbnRl cm5hdGlvbmFsIiwgIkJyb2FkIFJlYWNoIEVuZ2luZWVyaW5nIENvLiIsCiAiU2VtaWNvbmR1Y3Rv ciBNZmcgSW50bCBDb3JwIiwgIlNpQ29ubmVjdCIsICJGQ0kgVVNBIEluYy4iLCAiVmFsaWRpdHkg U2Vuc29ycyIsCiAiQ29uZXkgVGVjaG5vbG9neSBDby4gTHRkLiIsICJTcGFucyBMb2dpYyIsICJO ZXRlcmlvbiBJbmMuIiwgIlFpbW9uZGEiLAogIk5ldyBKYXBhbiBSYWRpbyBDby4gTHRkLiIsICJW ZWxvZ2l4IiwgIk1vbnRhbHZvIFN5c3RlbXMiLCAiaVZpdml0eSBJbmMuIiwgIldhbHRvbiBDaGFp bnRlY2giLAogIkFFTkVPTiIsICJMb3JvbSBJbmR1c3RyaWFsIENvLiBMdGQuIiwgIlJhZGlvc3Bp cmUgTmV0d29ya3MiLCAiU2Vuc2lvIFRlY2hub2xvZ2llcywgSW5jLiIsCiAiTmV0aHJhIEltYWdp bmciLCAiSGV4b24gVGVjaG5vbG9neSBQdGUgTHRkIiwgIkNvbXB1U3RvY3ggKENTWCkiLCAiTWV0 aG9kZSBFbGVjdHJvbmljcywgSW5jLiIsCiAiQ29ubmVjdCBPbmUgTHRkLiIsICJPcHVsYW4gVGVj aG5vbG9naWVzIiwgIlNlcHRlbnRyaW8gTlYiLCAiR29sZGVubWFycyBUZWNobm9sb2d5IEluYy4i LAogIktyZXRvbiBDb3Jwb3JhdGlvbiIsICJDb2NobGVhciBMdGQuIiwgIkFsdGFpciBTZW1pY29u ZHVjdG9yIiwgIk5ldEVmZmVjdCwgSW5jLiIsCiAiU3BhbnNpb24sIEluYy4iLCAiVGFpd2FuIFNl bWljb25kdWN0b3IgTWZnIiwgIkVtcGhhbnkgU3lzdGVtcyBJbmMuIiwKICJBcGFjZVdhdmUgVGVj aG5vbG9naWVzIiwgIk1vYmlseWdlbiBDb3Jwb3JhdGlvbiIsICJUZWdvIiwgIkNzd2l0Y2ggQ29y cG9yYXRpb24iLAogIkhhaWVyIChCZWlqaW5nKSBJQyBEZXNpZ24gQ28uIiwgIk1ldGFSQU0iLCAi QXhlbCBFbGVjdHJvbmljcyBDby4gTHRkLiIsICJUaWxlcmEgQ29ycG9yYXRpb24iLAogIkFxdWFu dGlhIiwgIlZpdmFjZSBTZW1pY29uZHVjdG9yIiwgIlJlZHBpbmUgU2lnbmFscyIsICJPY3RhbGlj YSIsICJJbnRlckRpZ2l0YWwgQ29tbXVuaWNhdGlvbnMiLAogIkF2YW50IFRlY2hub2xvZ3kiLCAi QXNyb2NrLCBJbmMuIiwgIkF2YWlsaW5rIiwgIlF1YXJ0aWNzLCBJbmMuIiwgIkVsZW1lbnQgQ1hJ IiwKICJJbm5vdmFjaW9uZXMgTWljcm9lbGVjdHJvbmljYXMiLCAiVmVyaVNpbGljb24gTWljcm9l bGVjdHJvbmljcyIsICJXNSBOZXR3b3JrcyJdLApbIk1PVkVLSU5HIiwgIk1hdnJpeCBUZWNobm9s b2d5LCBJbmMuIiwgIkNlbGxHdWlkZSBMdGQuIiwgIkZhcmFkYXkgVGVjaG5vbG9neSIsCiAiRGlh YmxvIFRlY2hub2xvZ2llcywgSW5jLiIsICJKZW5uaWMiLCAiT2N0YXNpYyIsICJNb2xleCBJbmNv cnBvcmF0ZWQiLCAiM0xlYWYgTmV0d29ya3MiLAogIkJyaWdodCBNaWNyb24gVGVjaG5vbG9neSIs ICJOZXR4ZW4iLCAiTmV4dFdhdmUgQnJvYWRiYW5kIEluYy4iLCAiRGlzcGxheUxpbmsiLCAiWk1P UyBUZWNobm9sb2d5IiwKICJUZWMtSGlsbCIsICJNdWx0aWdpZywgSW5jLiIsICJBbWltb24iLCAi RXVwaG9uaWMgVGVjaG5vbG9naWVzLCBJbmMuIiwgIkJSTiBQaG9lbml4IiwKICJJblNpbGljYSIs ICJFbWJlciBDb3Jwb3JhdGlvbiIsICJBdmV4aXIgVGVjaG5vbG9naWVzIENvcnBvcmF0aW9uIiwg IkVjaGVsb24gQ29ycG9yYXRpb24iLAogIkVkZ2V3YXRlciBDb21wdXRlciBTeXN0ZW1zIiwgIlhN T1MgU2VtaWNvbmR1Y3RvciBMdGQuIiwgIkdFTlVTSU9OLCBJbmMuIiwgIk1lbW9yeSBDb3JwIE5W IiwKICJTaWxpY29uQmx1ZSBUZWNobm9sb2dpZXMiLCAiUmFtYnVzIEluYy4iXSk7CgokdXNlX3N5 c2ZzID0gLWQgJy9zeXMvYnVzJzsKCiMgV2UgY29uc2lkZXIgdGhhdCBubyBkYXRhIHdhcyB3cml0 dGVuIHRvIHRoaXMgYXJlYSBvZiB0aGUgU1BEIEVFUFJPTSBpZgojIGFsbCBieXRlcyByZWFkIDB4 MDAgb3IgYWxsIGJ5dGVzIHJlYWQgMHhmZgpzdWIgc3BkX3dyaXR0ZW4oQCkKewoJbXkgJGFsbF8w MCA9IDE7CglteSAkYWxsX2ZmID0gMTsKCglmb3JlYWNoIG15ICRiIChAXykgewoJCSRhbGxfMDAg PSAwIHVubGVzcyAkYiA9PSAweDAwOwoJCSRhbGxfZmYgPSAwIHVubGVzcyAkYiA9PSAweGZmOwoJ CXJldHVybiAxIHVubGVzcyAkYWxsXzAwIG9yICRhbGxfZmY7Cgl9CgoJcmV0dXJuIDA7Cn0KCnN1 YiBwYXJpdHkoJCkKewoJbXkgJG4gPSBzaGlmdDsKCW15ICRwYXJpdHkgPSAwOwoKCXdoaWxlICgk bikgewoJCSRwYXJpdHkrKyBpZiAoJG4gJiAxKTsKCQkkbiA+Pj0gMTsKCX0KCglyZXR1cm4gKCRw YXJpdHkgJiAxKTsKfQoKIyBOZXcgZW5jb2RpbmcgZm9ybWF0IChhcyBvZiBERFIzKSBmb3IgbWFu dWZhY3R1cmVyIGp1c3QgaGFzIGEgY291bnQgb2YKIyBsZWFkaW5nIDB4N0YgcmF0aGVyIHRoYW4g YWxsIHRoZSBpbmRpdmlkdWFsIGJ5dGVzLiAgVGhlIGNvdW50IGJ5dGVzIGluY2x1ZGVzCiMgcGFy aXR5IQpzdWIgbWFudWZhY3R1cmVyX2RkcjMoJCQpCnsKCW15ICgkY291bnQsICRjb2RlKSA9IEBf OwoJcmV0dXJuICJJbnZhbGlkIiBpZiBwYXJpdHkoJGNvdW50KSAhPSAxOwoJcmV0dXJuICJJbnZh bGlkIiBpZiBwYXJpdHkoJGNvZGUpICE9IDE7CglyZXR1cm4gKCgkY29kZSAmIDB4N0YpIC0gMSA+ ICR2ZW5kb3JzWyRjb3VudCAmIDB4N0ZdKSA/ICJVbmtub3duIiA6CgkJJHZlbmRvcnNbJGNvdW50 ICYgMHg3Rl1bKCRjb2RlICYgMHg3RikgLSAxXTsKfQoKc3ViIG1hbnVmYWN0dXJlcihAKQp7Cglt eSBAYnl0ZXMgPSBAXzsKCW15ICRhaSA9IDA7CglteSAkZmlyc3Q7CgoJcmV0dXJuICgiVW5kZWZp bmVkIiwgW10pIHVubGVzcyBzcGRfd3JpdHRlbihAYnl0ZXMpOwoKCXdoaWxlIChkZWZpbmVkKCRm aXJzdCA9IHNoaWZ0KEBieXRlcykpICYmICRmaXJzdCA9PSAweDdGKSB7CgkJJGFpKys7Cgl9CgoJ cmV0dXJuICgiSW52YWxpZCIsIFtdKSB1bmxlc3MgZGVmaW5lZCAkZmlyc3Q7CglyZXR1cm4gKCJJ bnZhbGlkIiwgWyRmaXJzdCwgQGJ5dGVzXSkgaWYgcGFyaXR5KCRmaXJzdCkgIT0gMTsKCWlmIChw YXJpdHkoJGFpKSA9PSAwKSB7CgkJJGFpIHw9IDB4ODA7Cgl9CglyZXR1cm4gKG1hbnVmYWN0dXJl cl9kZHIzKCRhaSwgJGZpcnN0KSwgXEBieXRlcyk7Cn0KCnN1YiBtYW51ZmFjdHVyZXJfZGF0YShA KQp7CglteSAkaGV4ID0gIiI7CglteSAkYXNjID0gIiI7CgoJcmV0dXJuIHVubGVzcyBzcGRfd3Jp dHRlbihAXyk7CgoJZm9yZWFjaCBteSAkYnl0ZSAoQF8pIHsKCQkkaGV4IC49IHNwcmludGYoIlwl MDJYICIsICRieXRlKTsKCQkkYXNjIC49ICgkYnl0ZSA+PSAzMiAmJiAkYnl0ZSA8IDEyNykgPyBj aHIoJGJ5dGUpIDogJz8nOwoJfQoKCXJldHVybiAiJGhleChcIiRhc2NcIikiOwp9CgpzdWIgcGFy dF9udW1iZXIoQCkKewoJbXkgJGFzYyA9ICIiOwoJbXkgJGJ5dGU7CgoJd2hpbGUgKGRlZmluZWQg KCRieXRlID0gc2hpZnQpICYmICRieXRlID49IDMyICYmICRieXRlIDwgMTI3KSB7CgkJJGFzYyAu PSBjaHIoJGJ5dGUpOwoJfQoKCXJldHVybiAoJGFzYyBlcSAiIikgPyAiVW5kZWZpbmVkIiA6ICRh c2M7Cn0KCnN1YiBjYXNfbGF0ZW5jaWVzKEApCnsKCXJldHVybiAiTm9uZSIgdW5sZXNzIEBfOwoJ cmV0dXJuIGpvaW4gJywgJywgbWFwKCIke199VCIsIHNvcnQgeyAkYiA8PT4gJGEgfSBAXyk7Cn0K CiMgUmVhbCBwcmludGluZyBmdW5jdGlvbnMKCnN1YiBodG1sX2VuY29kZSgkKQp7CglteSAkdGV4 dCA9IHNoaWZ0OwoJJHRleHQgPX4gcy88L1wmbHQ7L3NnOwoJJHRleHQgPX4gcy8+L1wmZ3Q7L3Nn OwoJJHRleHQgPX4gcy9cbi88YnI+XG4vc2c7CglyZXR1cm4gJHRleHQ7Cn0KCnN1YiBzYW1lX3Zh bHVlcyhAKQp7CglteSAkdmFsdWUgPSBzaGlmdDsKCXdoaWxlIChAXykgewoJCXJldHVybiAwIHVu bGVzcyAkdmFsdWUgZXEgc2hpZnQ7Cgl9CglyZXR1cm4gMTsKfQoKc3ViIHJlYWxfcHJpbnRsKCQk KSAjIHByaW50IGEgbGluZSB3LyBsYWJlbCBhbmQgdmFsdWVzCnsKCW15ICgkbGFiZWwsIEB2YWx1 ZXMpID0gQF87Cglsb2NhbCAkXzsKCglpZiAoJG9wdF9odG1sKSB7CgkJJGxhYmVsID0gaHRtbF9l bmNvZGUoJGxhYmVsKTsKCQlAdmFsdWVzID0gbWFwIHsgaHRtbF9lbmNvZGUoJF8pIH0gQHZhbHVl czsKCQlwcmludCAiPHRyPjx0ZCB2YWxpZ249dG9wPiRsYWJlbDwvdGQ+IjsKCQlpZiAoJG9wdF9t ZXJnZSAmJiBzYW1lX3ZhbHVlcyhAdmFsdWVzKSkgewoJCQlwcmludCAiPHRkIGNvbHNwYW49Ii4o c2NhbGFyIEB2YWx1ZXMpLiI+JHZhbHVlc1swXTwvdGQ+IjsKCQl9IGVsc2UgewoJCQlwcmludCAi PHRkPiRfPC90ZD4iIGZvcmVhY2ggQHZhbHVlczsKCQl9CgkJcHJpbnQgIjwvdHI+XG4iOwoJfSBl bHNlIHsKCQlpZiAoJG9wdF9tZXJnZSAmJiBzYW1lX3ZhbHVlcyhAdmFsdWVzKSkgewoJCQlzcGxp Y2UoQHZhbHVlcywgMSk7CgkJfQoKCQlteSAkZm9ybWF0ID0gIiUtNDdzIi4oIiAlLTE5cyIgeCAo c2NhbGFyIEB2YWx1ZXMgLSAxKSkuIiAlc1xuIjsKCgkJIyBJdCdzIGEgYml0IHRyaWNreSBiZWNh dXNlIGVhY2ggdmFsdWUgbWF5IHNwYW4gb3ZlciBtb3JlIHRoYW4KCQkjIG9uZSBsaW5lLiBXZSBj YW4gZWFzaWx5IGV4dHJhY3QgdGhlIHZhbHVlcyBwZXIgY29sdW1uLCBidXQKCQkjIHdlIG5lZWQg dGhlbSBwZXIgbGluZSBhdCBwcmludGluZyB0aW1lLiBTbyB3ZSBoYXZlIHRvCgkJIyBwcmVwYXJl IGEgMkQgYXJyYXkgd2l0aCBhbGwgdGhlIGluZGl2aWR1YWwgc3RyaW5nIGZyYWdtZW50cy4KCQlt eSAoJGNvbCwgQGxpbmVzKTsKCQlmb3IgKCRjb2wgPSAwOyAkY29sIDwgQHZhbHVlczsgJGNvbCsr KSB7CgkJCW15IEBjZWxscyA9IHNwbGl0IC9cbi8sICR2YWx1ZXNbJGNvbF07CgkJCWZvciAobXkg JGwgPSAwOyAkbCA8IEBjZWxsczsgJGwrKykgewoJCQkJJGxpbmVzWyRsXS0+WyRjb2xdID0gJGNl bGxzWyRsXTsKCQkJfQoJCX0KCgkJcHJpbnRmICRmb3JtYXQsICRsYWJlbCwgQHtzaGlmdCBAbGlu ZXN9OwoJCXByaW50ZiAkZm9ybWF0LCAiIiwgQHskX30gZm9yZWFjaCAoQGxpbmVzKTsKCX0KfQoK c3ViIHByaW50bDIoJCQpICMgcHJpbnQgYSBsaW5lIHcvIGxhYmVsIGFuZCB2YWx1ZSAob3V0c2lk ZSBhIHRhYmxlKQp7CglteSAoJGxhYmVsLCAkdmFsdWUpID0gQF87CglpZiAoJG9wdF9odG1sKSB7 CgkJJGxhYmVsID0gaHRtbF9lbmNvZGUoJGxhYmVsKTsKCQkkdmFsdWUgPSBodG1sX2VuY29kZSgk dmFsdWUpOwoJfQoJcHJpbnQgIiRsYWJlbDogJHZhbHVlXG4iOwp9CgpzdWIgcmVhbF9wcmludHMo JCkgIyBwcmludCBzZXBhcmF0b3Igdy8gZ2l2ZW4gdGV4dAp7CglteSAoJGxhYmVsLCAkbmNvbCkg PSBAXzsKCSRuY29sID0gMSB1bmxlc3MgJG5jb2w7CglpZiAoJG9wdF9odG1sKSB7CgkJJGxhYmVs ID0gaHRtbF9lbmNvZGUoJGxhYmVsKTsKCQlwcmludCAiPHRyPjx0ZCBhbGlnbj1jZW50ZXIgY29s c3Bhbj0iLigxKyRuY29sKS4iPjxiPiRsYWJlbDwvYj48L3RkPjwvdHI+XG4iOwoJfSBlbHNlIHsK CQlwcmludCAiXG4tLS09PT0gJGxhYmVsID09PS0tLVxuIjsKCX0KfQoKc3ViIHByaW50aCgkJCkg IyBwcmludCBoZWFkZXIgdy8gZ2l2ZW4gdGV4dAp7CglteSAoJGhlYWRlciwgJHN1YikgPSBAXzsK CWlmICgkb3B0X2h0bWwpIHsKCQkkaGVhZGVyID0gaHRtbF9lbmNvZGUoJGhlYWRlcik7CgkJJHN1 YiA9IGh0bWxfZW5jb2RlKCRzdWIpOwoJCXByaW50ICI8aDE+JGhlYWRlcjwvaDE+XG4iOwoJCXBy aW50ICI8cD4kc3ViPC9wPlxuIjsKCX0gZWxzZSB7CgkJcHJpbnQgIlxuJGhlYWRlclxuJHN1Ylxu IjsKCX0KfQoKc3ViIHByaW50YygkKSAjIHByaW50IGNvbW1lbnQKewoJbXkgKCRjb21tZW50KSA9 IEBfOwoJaWYgKCRvcHRfaHRtbCkgewoJCSRjb21tZW50ID0gaHRtbF9lbmNvZGUoJGNvbW1lbnQp OwoJCXByaW50ICI8IS0tICRjb21tZW50IC0tPlxuIjsKCX0gZWxzZSB7CgkJcHJpbnQgIiMgJGNv bW1lbnRcbiI7Cgl9Cn0KCiMgRmFrZSBwcmludGluZyBmdW5jdGlvbnMKIyBUaGVzZSBkb24ndCBh Y3R1YWxseSBwcmludCBhbnl0aGluZywgaW5zdGVhZCB0aGV5IHN0b3JlIHRoZSBkZXNpcmVkCiMg b3V0cHV0IGZvciBsYXRlciBwcm9jZXNzaW5nLgoKc3ViIHByaW50bCgkJCkgIyBwcmludCBhIGxp bmUgdy8gbGFiZWwgYW5kIHZhbHVlCnsKCW15IEBvdXRwdXQgPSAoXCZyZWFsX3ByaW50bCwgQF8p OwoJcHVzaCBAeyRkaW1tWyRjdXJyZW50XS0+e291dHB1dH19LCBcQG91dHB1dDsKfQoKc3ViIHBy aW50cygkKSAjIHByaW50IHNlcGFyYXRvciB3LyBnaXZlbiB0ZXh0CnsKCW15IEBvdXRwdXQgPSAo XCZyZWFsX3ByaW50cywgQF8pOwoJcHVzaCBAeyRkaW1tWyRjdXJyZW50XS0+e291dHB1dH19LCBc QG91dHB1dDsKfQoKIyBIZWxwZXIgZnVuY3Rpb25zCgpzdWIgdG5zKCQpICMgcHJpbnQgYSB0aW1l IGluIG5zCnsKCXJldHVybiBzcHJpbnRmKCIlMy4yZiBucyIsICRfWzBdKTsKfQoKc3ViIHRuczMo JCkgIyBwcmludCBhIHRpbWUgaW4gbnMsIHdpdGggMyBkZWNpbWFsIGRpZ2l0cwp7CglyZXR1cm4g c3ByaW50ZigiJS4zZiBucyIsICRfWzBdKTsKfQoKc3ViIHZhbHVlX29yX3VuZGVmaW5lZAp7Cglt eSAoJHZhbHVlLCAkdW5pdCkgPSBAXzsKCXJldHVybiAiVW5kZWZpbmVkISIgdW5sZXNzICR2YWx1 ZTsKCSR2YWx1ZSAuPSAiICR1bml0IiBpZiBkZWZpbmVkICR1bml0OwoJcmV0dXJuICR2YWx1ZTsK fQoKIyBQYXJhbWV0ZXI6IEVFUFJPTSBieXRlcyAwLTEyNyAodXNpbmcgMy02MikKc3ViIGRlY29k ZV9zZHJfc2RyYW0oJCkKewoJbXkgJGJ5dGVzID0gc2hpZnQ7CglteSAkdGVtcDsKCiMgU1BEIHJl dmlzaW9uCglwcmludGwoIlNQRCBSZXZpc2lvbiIsICRieXRlcy0+WzYyXSk7Cgojc2l6ZSBjb21w dXRhdGlvbgoKCXByaW50cygiTWVtb3J5IENoYXJhY3RlcmlzdGljcyIpOwoKCW15ICRrID0gMDsK CW15ICRpaSA9IDA7CgoJJGlpID0gKCRieXRlcy0+WzNdICYgMHgwZikgKyAoJGJ5dGVzLT5bNF0g JiAweDBmKSAtIDE3OwoJaWYgKCgkYnl0ZXMtPls1XSA8PSA4KSAmJiAoJGJ5dGVzLT5bMTddIDw9 IDgpKSB7CgkJICRrID0gJGJ5dGVzLT5bNV0gKiAkYnl0ZXMtPlsxN107Cgl9CgoJaWYgKCRpaSA+ IDAgJiYgJGlpIDw9IDEyICYmICRrID4gMCkgewoJCXByaW50bCgiU2l6ZSIsICgoMSA8PCAkaWkp ICogJGspIC4gIiBNQiIpOwoJfSBlbHNlIHsKCQlwcmludGwoIklOVkFMSUQgU0laRSIsICRieXRl cy0+WzNdIC4gIiwiIC4gJGJ5dGVzLT5bNF0gLiAiLCIgLgoJCQkJICAgICAgICRieXRlcy0+WzVd IC4gIiwiIC4gJGJ5dGVzLT5bMTddKTsKCX0KCglteSBAY2FzOwoJZm9yICgkaWkgPSAwOyAkaWkg PCA3OyAkaWkrKykgewoJCXB1c2goQGNhcywgJGlpICsgMSkgaWYgKCRieXRlcy0+WzE4XSAmICgx IDw8ICRpaSkpOwoJfQoKCW15ICR0cmNkOwoJbXkgJHRycDsKCW15ICR0cmFzOwoJbXkgJGN0aW1l ID0gKCRieXRlcy0+WzldID4+IDQpICsgKCRieXRlcy0+WzldICYgMHhmKSAqIDAuMTsKCgkkdHJj ZCA9ICRieXRlcy0+WzI5XTsKCSR0cnAgPSAkYnl0ZXMtPlsyN107OwoJJHRyYXMgPSAkYnl0ZXMt PlszMF07CgoJcHJpbnRsKCJ0Q0wtdFJDRC10UlAtdFJBUyIsCgkJJGNhc1skI2Nhc10gLiAiLSIg LgoJCWNlaWwoJHRyY2QvJGN0aW1lKSAuICItIiAuCgkJY2VpbCgkdHJwLyRjdGltZSkgLiAiLSIg LgoJCWNlaWwoJHRyYXMvJGN0aW1lKSk7CgoJaWYgKCRieXRlcy0+WzNdID09IDApIHsgJHRlbXAg PSAiVW5kZWZpbmVkISI7IH0KCWVsc2lmICgkYnl0ZXMtPlszXSA9PSAxKSB7ICR0ZW1wID0gIjEv MTYiOyB9CgllbHNpZiAoJGJ5dGVzLT5bM10gPT0gMikgeyAkdGVtcCA9ICIyLzE3IjsgfQoJZWxz aWYgKCRieXRlcy0+WzNdID09IDMpIHsgJHRlbXAgPSAiMy8xOCI7IH0KCWVsc2UgeyAkdGVtcCA9 ICRieXRlcy0+WzNdOyB9CglwcmludGwoIk51bWJlciBvZiBSb3cgQWRkcmVzcyBCaXRzIiwgJHRl bXApOwoKCWlmICgkYnl0ZXMtPls0XSA9PSAwKSB7ICR0ZW1wID0gIlVuZGVmaW5lZCEiOyB9Cgll bHNpZiAoJGJ5dGVzLT5bNF0gPT0gMSkgeyAkdGVtcCA9ICIxLzE2IjsgfQoJZWxzaWYgKCRieXRl cy0+WzRdID09IDIpIHsgJHRlbXAgPSAiMi8xNyI7IH0KCWVsc2lmICgkYnl0ZXMtPls0XSA9PSAz KSB7ICR0ZW1wID0gIjMvMTgiOyB9CgllbHNlIHsgJHRlbXAgPSAkYnl0ZXMtPls0XTsgfQoJcHJp bnRsKCJOdW1iZXIgb2YgQ29sIEFkZHJlc3MgQml0cyIsICR0ZW1wKTsKCglwcmludGwoIk51bWJl ciBvZiBNb2R1bGUgUm93cyIsIHZhbHVlX29yX3VuZGVmaW5lZCgkYnl0ZXMtPls1XSkpOwoKCWlm ICgkYnl0ZXMtPls3XSA+IDEpIHsgJHRlbXAgPSAiVW5kZWZpbmVkISI7IH0KCWVsc2UgeyAkdGVt cCA9ICgkYnl0ZXMtPls3XSAqIDI1NikgKyAkYnl0ZXMtPls2XTsgfQoJcHJpbnRsKCJEYXRhIFdp ZHRoIiwgJHRlbXApOwoKCWlmICgkYnl0ZXMtPls4XSA9PSAwKSB7ICR0ZW1wID0gIjUuMCBWb2x0 L1RUTCI7IH0KCWVsc2lmICgkYnl0ZXMtPls4XSA9PSAxKSB7ICR0ZW1wID0gIkxWVFRMIjsgfQoJ ZWxzaWYgKCRieXRlcy0+WzhdID09IDIpIHsgJHRlbXAgPSAiSFNUTCAxLjUiOyB9CgllbHNpZiAo JGJ5dGVzLT5bOF0gPT0gMykgeyAkdGVtcCA9ICJTU1RMIDMuMyI7IH0KCWVsc2lmICgkYnl0ZXMt Pls4XSA9PSA0KSB7ICR0ZW1wID0gIlNTVEwgMi41IjsgfQoJZWxzaWYgKCRieXRlcy0+WzhdID09 IDI1NSkgeyAkdGVtcCA9ICJOZXcgVGFibGUiOyB9CgllbHNlIHsgJHRlbXAgPSAiVW5kZWZpbmVk ISI7IH0KCXByaW50bCgiTW9kdWxlIEludGVyZmFjZSBTaWduYWwgTGV2ZWxzIiwgJHRlbXApOwoK CWlmICgkYnl0ZXMtPlsxMV0gPT0gMCkgeyAkdGVtcCA9ICJObyBQYXJpdHkiOyB9CgllbHNpZiAo JGJ5dGVzLT5bMTFdID09IDEpIHsgJHRlbXAgPSAiUGFyaXR5IjsgfQoJZWxzaWYgKCRieXRlcy0+ WzExXSA9PSAyKSB7ICR0ZW1wID0gIkVDQyI7ICB9CgllbHNlIHsgJHRlbXAgPSAiVW5kZWZpbmVk ISI7IH0KCXByaW50bCgiTW9kdWxlIENvbmZpZ3VyYXRpb24gVHlwZSIsICR0ZW1wKTsKCglpZiAo JGJ5dGVzLT5bMTJdICYgMHg4MCkgeyAkdGVtcCA9ICJTZWxmIFJlZnJlc2hpbmciOyB9CgllbHNl IHsgJHRlbXAgPSAiTm90IFNlbGYgUmVmcmVzaGluZyI7IH0KCXByaW50bCgiUmVmcmVzaCBUeXBl IiwgJHRlbXApOwoKCSR0ZW1wID0gJGJ5dGVzLT5bMTJdICYgMHg3ZjsKCWlmICgkdGVtcCA9PSAw KSB7ICR0ZW1wID0gIk5vcm1hbCAoMTUuNjI1IHVzKSI7IH0KCWVsc2lmICgkdGVtcCA9PSAxKSB7 ICR0ZW1wID0gIlJlZHVjZWQgKDMuOSB1cykiOyB9CgllbHNpZiAoJHRlbXAgPT0gMikgeyAkdGVt cCA9ICJSZWR1Y2VkICg3LjggdXMpIjsgfQoJZWxzaWYgKCR0ZW1wID09IDMpIHsgJHRlbXAgPSAi RXh0ZW5kZWQgKDMxLjMgdXMpIjsgfQoJZWxzaWYgKCR0ZW1wID09IDQpIHsgJHRlbXAgPSAiRXh0 ZW5kZWQgKDYyLjUgdXMpIjsgfQoJZWxzaWYgKCR0ZW1wID09IDUpIHsgJHRlbXAgPSAiRXh0ZW5k ZWQgKDEyNSB1cykiOyB9CgllbHNlIHsgJHRlbXAgPSAiVW5kZWZpbmVkISI7IH0KCXByaW50bCgi UmVmcmVzaCBSYXRlIiwgJHRlbXApOwoKCWlmICgkYnl0ZXMtPlsxM10gJiAweDgwKSB7ICR0ZW1w ID0gIkJhbmsyID0gMiB4IEJhbmsxIjsgfQoJZWxzZSB7ICR0ZW1wID0gIk5vIEJhbmsyIE9SIEJh bmsyID0gQmFuazEgd2lkdGgiOyB9CglwcmludGwoIlByaW1hcnkgU0RSQU0gQ29tcG9uZW50IEJh bmsgQ29uZmlnIiwgJHRlbXApOwoJcHJpbnRsKCJQcmltYXJ5IFNEUkFNIENvbXBvbmVudCBXaWR0 aHMiLAoJICAgICAgIHZhbHVlX29yX3VuZGVmaW5lZCgkYnl0ZXMtPlsxM10gJiAweDdmKSk7CgoJ aWYgKCRieXRlcy0+WzE0XSAmIDB4ODApIHsgJHRlbXAgPSAiQmFuazIgPSAyIHggQmFuazEiOyB9 CgllbHNlIHsgJHRlbXAgPSAiTm8gQmFuazIgT1IgQmFuazIgPSBCYW5rMSB3aWR0aCI7IH0KCXBy aW50bCgiRXJyb3IgQ2hlY2tpbmcgU0RSQU0gQ29tcG9uZW50IEJhbmsgQ29uZmlnIiwgJHRlbXAp OwoJcHJpbnRsKCJFcnJvciBDaGVja2luZyBTRFJBTSBDb21wb25lbnQgV2lkdGhzIiwKCSAgICAg ICB2YWx1ZV9vcl91bmRlZmluZWQoJGJ5dGVzLT5bMTRdICYgMHg3ZikpOwoKCXByaW50bCgiTWlu IENsb2NrIERlbGF5IGZvciBCYWNrIHRvIEJhY2sgUmFuZG9tIEFjY2VzcyIsCgkgICAgICAgdmFs dWVfb3JfdW5kZWZpbmVkKCRieXRlcy0+WzE1XSkpOwoKCW15IEBhcnJheTsKCWZvciAoJGlpID0g MDsgJGlpIDwgNDsgJGlpKyspIHsKCQlwdXNoKEBhcnJheSwgMSA8PCAkaWkpIGlmICgkYnl0ZXMt PlsxNl0gJiAoMSA8PCAkaWkpKTsKCX0KCXB1c2goQGFycmF5LCAiUGFnZSIpIGlmICgkYnl0ZXMt PlsxNl0gJiAxMjgpOwoJaWYgKEBhcnJheSkgeyAkdGVtcCA9IGpvaW4gJywgJywgQGFycmF5OyB9 CgllbHNlIHsgJHRlbXAgPSAiTm9uZSI7IH0KCXByaW50bCgiU3VwcG9ydGVkIEJ1cnN0IExlbmd0 aHMiLCAkdGVtcCk7CgoJcHJpbnRsKCJOdW1iZXIgb2YgRGV2aWNlIEJhbmtzIiwKCSAgICAgICB2 YWx1ZV9vcl91bmRlZmluZWQoJGJ5dGVzLT5bMTddKSk7CgoJcHJpbnRsKCJTdXBwb3J0ZWQgQ0FT IExhdGVuY2llcyIsIGNhc19sYXRlbmNpZXMoQGNhcykpOwoKCUBhcnJheSA9ICgpOwoJZm9yICgk aWkgPSAwOyAkaWkgPCA3OyAkaWkrKykgewoJCXB1c2goQGFycmF5LCAkaWkpIGlmICgkYnl0ZXMt PlsxOV0gJiAoMSA8PCAkaWkpKTsKCX0KCWlmIChAYXJyYXkpIHsgJHRlbXAgPSBqb2luICcsICcs IEBhcnJheTsgfQoJZWxzZSB7ICR0ZW1wID0gIk5vbmUiOyB9CglwcmludGwoIlN1cHBvcnRlZCBD UyBMYXRlbmNpZXMiLCAkdGVtcCk7CgoJQGFycmF5ID0gKCk7Cglmb3IgKCRpaSA9IDA7ICRpaSA8 IDc7ICRpaSsrKSB7CgkJcHVzaChAYXJyYXksICRpaSkgaWYgKCRieXRlcy0+WzIwXSAmICgxIDw8 ICRpaSkpOwoJfQoJaWYgKEBhcnJheSkgeyAkdGVtcCA9IGpvaW4gJywgJywgQGFycmF5OyB9Cgll bHNlIHsgJHRlbXAgPSAiTm9uZSI7IH0KCXByaW50bCgiU3VwcG9ydGVkIFdFIExhdGVuY2llcyIs ICR0ZW1wKTsKCglpZiAoQGNhcyA+PSAxKSB7CgkJcHJpbnRsKCJDeWNsZSBUaW1lIGF0IENBUyAi LiRjYXNbJCNjYXNdLCAiJGN0aW1lIG5zIik7CgoJCSR0ZW1wID0gKCRieXRlcy0+WzEwXSA+PiA0 KSArICgkYnl0ZXMtPlsxMF0gJiAweGYpICogMC4xOwoJCXByaW50bCgiQWNjZXNzIFRpbWUgYXQg Q0FTICIuJGNhc1skI2Nhc10sICIkdGVtcCBucyIpOwoJfQoKCWlmIChAY2FzID49IDIgJiYgc3Bk X3dyaXR0ZW4oQCRieXRlc1syMy4uMjRdKSkgewoJCSR0ZW1wID0gJGJ5dGVzLT5bMjNdID4+IDQ7 CgkJaWYgKCR0ZW1wID09IDApIHsgJHRlbXAgPSAiVW5kZWZpbmVkISI7IH0KCQllbHNlIHsKCQkJ JHRlbXAgKz0gMTUgaWYgJHRlbXAgPCA0OwoJCQkkdGVtcCArPSAoJGJ5dGVzLT5bMjNdICYgMHhm KSAqIDAuMTsKCQkJJHRlbXAgLj0gIiBucyI7CgkJfQoJCXByaW50bCgiQ3ljbGUgVGltZSBhdCBD QVMgIi4kY2FzWyQjY2FzLTFdLCAkdGVtcCk7CgoJCSR0ZW1wID0gJGJ5dGVzLT5bMjRdID4+IDQ7 CgkJaWYgKCR0ZW1wID09IDApIHsgJHRlbXAgPSAiVW5kZWZpbmVkISI7IH0KCQllbHNlIHsKCQkJ JHRlbXAgKz0gMTUgaWYgJHRlbXAgPCA0OwoJCQkkdGVtcCArPSAoJGJ5dGVzLT5bMjRdICYgMHhm KSAqIDAuMTsKCQkJJHRlbXAgLj0gIiBucyI7CgkJfQoJCXByaW50bCgiQWNjZXNzIFRpbWUgYXQg Q0FTICIuJGNhc1skI2Nhcy0xXSwgJHRlbXApOwoJfQoKCWlmIChAY2FzID49IDMgJiYgc3BkX3dy aXR0ZW4oQCRieXRlc1syNS4uMjZdKSkgewoJCSR0ZW1wID0gJGJ5dGVzLT5bMjVdID4+IDI7CgkJ aWYgKCR0ZW1wID09IDApIHsgJHRlbXAgPSAiVW5kZWZpbmVkISI7IH0KCQllbHNlIHsKCQkJJHRl bXAgKz0gKCRieXRlcy0+WzI1XSAmIDB4MykgKiAwLjI1OwoJCQkkdGVtcCAuPSAiIG5zIjsKCQl9 CgkJcHJpbnRsKCJDeWNsZSBUaW1lIGF0IENBUyAiLiRjYXNbJCNjYXMtMl0sICR0ZW1wKTsKCgkJ JHRlbXAgPSAkYnl0ZXMtPlsyNl0gPj4gMjsKCQlpZiAoJHRlbXAgPT0gMCkgeyAkdGVtcCA9ICJV bmRlZmluZWQhIjsgfQoJCWVsc2UgewoJCQkkdGVtcCArPSAoJGJ5dGVzLT5bMjZdICYgMHgzKSAq IDAuMjU7CgkJCSR0ZW1wIC49ICIgbnMiOwoJCX0KCQlwcmludGwoIkFjY2VzcyBUaW1lIGF0IENB UyAiLiRjYXNbJCNjYXMtMl0sICR0ZW1wKTsKCX0KCgkkdGVtcCA9ICIiOwoJaWYgKCRieXRlcy0+ WzIxXSAmIDEpIHsgJHRlbXAgLj0gIkJ1ZmZlcmVkIEFkZHJlc3MvQ29udHJvbCBJbnB1dHNcbiI7 IH0KCWlmICgkYnl0ZXMtPlsyMV0gJiAyKSB7ICR0ZW1wIC49ICJSZWdpc3RlcmVkIEFkZHJlc3Mv Q29udHJvbCBJbnB1dHNcbiI7IH0KCWlmICgkYnl0ZXMtPlsyMV0gJiA0KSB7ICR0ZW1wIC49ICJP biBjYXJkIFBMTCAoY2xvY2spXG4iOyB9CglpZiAoJGJ5dGVzLT5bMjFdICYgOCkgeyAkdGVtcCAu PSAiQnVmZmVyZWQgRFFNQiBJbnB1dHNcbiI7IH0KCWlmICgkYnl0ZXMtPlsyMV0gJiAxNikgeyAk dGVtcCAuPSAiUmVnaXN0ZXJlZCBEUU1CIElucHV0c1xuIjsgfQoJaWYgKCRieXRlcy0+WzIxXSAm IDMyKSB7ICR0ZW1wIC49ICJEaWZmZXJlbnRpYWwgQ2xvY2sgSW5wdXRcbiI7IH0KCWlmICgkYnl0 ZXMtPlsyMV0gJiA2NCkgeyAkdGVtcCAuPSAiUmVkdW5kYW50IFJvdyBBZGRyZXNzXG4iOyB9Cglp ZiAoJGJ5dGVzLT5bMjFdICYgMTI4KSB7ICR0ZW1wIC49ICJVbmRlZmluZWQgKGJpdCA3KVxuIjsg fQoJaWYgKCRieXRlcy0+WzIxXSA9PSAwKSB7ICR0ZW1wIC49ICIoTm9uZSBSZXBvcnRlZClcbiI7 IH0KCXByaW50bCgiU0RSQU0gTW9kdWxlIEF0dHJpYnV0ZXMiLCAkdGVtcCk7CgoJJHRlbXAgPSAi IjsKCWlmICgkYnl0ZXMtPlsyMl0gJiAxKSB7ICR0ZW1wIC49ICJTdXBwb3J0cyBFYXJseSBSQVMj IFJlY2hhcmdlXG4iOyB9CglpZiAoJGJ5dGVzLT5bMjJdICYgMikgeyAkdGVtcCAuPSAiU3VwcG9y dHMgQXV0by1QcmVjaGFyZ2VcbiI7IH0KCWlmICgkYnl0ZXMtPlsyMl0gJiA0KSB7ICR0ZW1wIC49 ICJTdXBwb3J0cyBQcmVjaGFyZ2UgQWxsXG4iOyB9CglpZiAoJGJ5dGVzLT5bMjJdICYgOCkgeyAk dGVtcCAuPSAiU3VwcG9ydHMgV3JpdGUxL1JlYWQgQnVyc3RcbiI7IH0KCWlmICgkYnl0ZXMtPlsy Ml0gJiAxNikgeyAkdGVtcCAuPSAiTG93ZXIgVkNDIFRvbGVyYW5jZTogNSVcbiI7IH0KCWVsc2Ug eyAkdGVtcCAuPSAiTG93ZXIgVkNDIFRvbGVyYW5jZTogMTAlXG4iOyB9CglpZiAoJGJ5dGVzLT5b MjJdICYgMzIpIHsgJHRlbXAgLj0gIlVwcGVyIFZDQyBUb2xlcmFuY2U6IDUlXG4iOyB9CgllbHNl IHsgJHRlbXAgLj0gIlVwcGVyIFZDQyBUb2xlcmFuY2U6IDEwJVxuIjsgfQoJaWYgKCRieXRlcy0+ WzIyXSAmIDY0KSB7ICR0ZW1wIC49ICJVbmRlZmluZWQgKGJpdCA2KVxuIjsgfQoJaWYgKCRieXRl cy0+WzIyXSAmIDEyOCkgeyAkdGVtcCAuPSAiVW5kZWZpbmVkIChiaXQgNylcbiI7IH0KCXByaW50 bCgiU0RSQU0gRGV2aWNlIEF0dHJpYnV0ZXMgKEdlbmVyYWwpIiwgJHRlbXApOwoKCXByaW50bCgi TWluaW11bSBSb3cgUHJlY2hhcmdlIFRpbWUiLAoJICAgICAgIHZhbHVlX29yX3VuZGVmaW5lZCgk Ynl0ZXMtPlsyN10sICJucyIpKTsKCglwcmludGwoIlJvdyBBY3RpdmUgdG8gUm93IEFjdGl2ZSBN aW4iLAoJICAgICAgIHZhbHVlX29yX3VuZGVmaW5lZCgkYnl0ZXMtPlsyOF0sICJucyIpKTsKCglw cmludGwoIlJBUyB0byBDQVMgRGVsYXkiLAoJICAgICAgIHZhbHVlX29yX3VuZGVmaW5lZCgkYnl0 ZXMtPlsyOV0sICJucyIpKTsKCglwcmludGwoIk1pbiBSQVMgUHVsc2UgV2lkdGgiLAoJICAgICAg IHZhbHVlX29yX3VuZGVmaW5lZCgkYnl0ZXMtPlszMF0sICJucyIpKTsKCgkkdGVtcCA9ICIiOwoJ aWYgKCRieXRlcy0+WzMxXSAmIDEpIHsgJHRlbXAgLj0gIjQgTUJ5dGVcbiI7IH0KCWlmICgkYnl0 ZXMtPlszMV0gJiAyKSB7ICR0ZW1wIC49ICI4IE1CeXRlXG4iOyB9CglpZiAoJGJ5dGVzLT5bMzFd ICYgNCkgeyAkdGVtcCAuPSAiMTYgTUJ5dGVcbiI7IH0KCWlmICgkYnl0ZXMtPlszMV0gJiA4KSB7 ICR0ZW1wIC49ICIzMiBNQnl0ZVxuIjsgfQoJaWYgKCRieXRlcy0+WzMxXSAmIDE2KSB7ICR0ZW1w IC49ICI2NCBNQnl0ZVxuIjsgfQoJaWYgKCRieXRlcy0+WzMxXSAmIDMyKSB7ICR0ZW1wIC49ICIx MjggTUJ5dGVcbiI7IH0KCWlmICgkYnl0ZXMtPlszMV0gJiA2NCkgeyAkdGVtcCAuPSAiMjU2IE1C eXRlXG4iOyB9CglpZiAoJGJ5dGVzLT5bMzFdICYgMTI4KSB7ICR0ZW1wIC49ICI1MTIgTUJ5dGVc biI7IH0KCWlmICgkYnl0ZXMtPlszMV0gPT0gMCkgeyAkdGVtcCAuPSAiKFVuZGVmaW5lZCEgLS0g Tm9uZSBSZXBvcnRlZCEpXG4iOyB9CglwcmludGwoIlJvdyBEZW5zaXRpZXMiLCAkdGVtcCk7CgoJ aWYgKCgkYnl0ZXMtPlszMl0gJiAweGYpIDw9IDkpIHsKCQkkdGVtcCA9ICgoJGJ5dGVzLT5bMzJd ICYgMHg3ZikgPj4gNCkgKyAoJGJ5dGVzLT5bMzJdICYgMHhmKSAqIDAuMTsKCQlwcmludGwoIkNv bW1hbmQgYW5kIEFkZHJlc3MgU2lnbmFsIFNldHVwIFRpbWUiLAoJCSAgICAgICAoKCRieXRlcy0+ WzMyXSA+PiA3KSA/IC0kdGVtcCA6ICR0ZW1wKSAuICIgbnMiKTsKCX0KCglpZiAoKCRieXRlcy0+ WzMzXSAmIDB4ZikgPD0gOSkgewoJCSR0ZW1wID0gKCgkYnl0ZXMtPlszM10gJiAweDdmKSA+PiA0 KSArICgkYnl0ZXMtPlszM10gJiAweGYpICogMC4xOwoJCXByaW50bCgiQ29tbWFuZCBhbmQgQWRk cmVzcyBTaWduYWwgSG9sZCBUaW1lIiwKCQkgICAgICAgKCgkYnl0ZXMtPlszM10gPj4gNykgPyAt JHRlbXAgOiAkdGVtcCkgLiAiIG5zIik7Cgl9CgoJaWYgKCgkYnl0ZXMtPlszNF0gJiAweGYpIDw9 IDkpIHsKCQkkdGVtcCA9ICgoJGJ5dGVzLT5bMzRdICYgMHg3ZikgPj4gNCkgKyAoJGJ5dGVzLT5b MzRdICYgMHhmKSAqIDAuMTsKCQlwcmludGwoIkRhdGEgU2lnbmFsIFNldHVwIFRpbWUiLAoJCSAg ICAgICAoKCRieXRlcy0+WzM0XSA+PiA3KSA/IC0kdGVtcCA6ICR0ZW1wKSAuICIgbnMiKTsKCX0K CglpZiAoKCRieXRlcy0+WzM1XSAmIDB4ZikgPD0gOSkgewoJCSR0ZW1wID0gKCgkYnl0ZXMtPlsz NV0gJiAweDdmKSA+PiA0KSArICgkYnl0ZXMtPlszNV0gJiAweGYpICogMC4xOwoJCXByaW50bCgi RGF0YSBTaWduYWwgSG9sZCBUaW1lIiwKCQkgICAgICAgKCgkYnl0ZXMtPlszNV0gPj4gNykgPyAt JHRlbXAgOiAkdGVtcCkgLiAiIG5zIik7Cgl9Cn0KCiMgUGFyYW1ldGVyOiBFRVBST00gYnl0ZXMg MC0xMjcgKHVzaW5nIDMtNjIpCnN1YiBkZWNvZGVfZGRyX3NkcmFtKCQpCnsKCW15ICRieXRlcyA9 IHNoaWZ0OwoJbXkgJHRlbXA7CgojIFNQRCByZXZpc2lvbgoJaWYgKCRieXRlcy0+WzYyXSAhPSAw eGZmKSB7CgkJcHJpbnRsKCJTUEQgUmV2aXNpb24iLCAoJGJ5dGVzLT5bNjJdID4+IDQpIC4gIi4i IC4KCQkJCSAgICAgICAoJGJ5dGVzLT5bNjJdICYgMHhmKSk7Cgl9CgojIHNwZWVkCglwcmludHMo Ik1lbW9yeSBDaGFyYWN0ZXJpc3RpY3MiKTsKCgkkdGVtcCA9ICgkYnl0ZXMtPls5XSA+PiA0KSAr ICgkYnl0ZXMtPls5XSAmIDB4ZikgKiAwLjE7CglteSAkZGRyY2xrID0gMiAqICgxMDAwIC8gJHRl bXApOwoJbXkgJHRiaXRzID0gKCRieXRlcy0+WzddICogMjU2KSArICRieXRlcy0+WzZdOwoJaWYg KCgkYnl0ZXMtPlsxMV0gPT0gMikgfHwgKCRieXRlcy0+WzExXSA9PSAxKSkgeyAkdGJpdHMgPSAk dGJpdHMgLSA4OyB9CglteSAkcGNjbGsgPSBpbnQgKCRkZHJjbGsgKiAkdGJpdHMgLyA4KTsKCSRw Y2NsayArPSAxMDAgaWYgKCRwY2NsayAlIDEwMCkgPj0gNTA7ICMgUm91bmQgcHJvcGVybHkKCSRw Y2NsayA9ICRwY2NsayAtICgkcGNjbGsgJSAxMDApOwoJJGRkcmNsayA9IGludCAoJGRkcmNsayk7 CglwcmludGwoIk1heGltdW0gbW9kdWxlIHNwZWVkIiwgIiR7ZGRyY2xrfU1IeiAoUEMke3BjY2xr fSkiKTsKCiNzaXplIGNvbXB1dGF0aW9uCglteSAkayA9IDA7CglteSAkaWkgPSAwOwoKCSRpaSA9 ICgkYnl0ZXMtPlszXSAmIDB4MGYpICsgKCRieXRlcy0+WzRdICYgMHgwZikgLSAxNzsKCWlmICgo JGJ5dGVzLT5bNV0gPD0gOCkgJiYgKCRieXRlcy0+WzE3XSA8PSA4KSkgewoJCSAkayA9ICRieXRl cy0+WzVdICogJGJ5dGVzLT5bMTddOwoJfQoKCWlmICgkaWkgPiAwICYmICRpaSA8PSAxMiAmJiAk ayA+IDApIHsKCQlwcmludGwoIlNpemUiLCAoKDEgPDwgJGlpKSAqICRrKSAuICIgTUIiKTsKCX0g ZWxzZSB7CgkJcHJpbnRsKCJJTlZBTElEIFNJWkUiLCAkYnl0ZXMtPlszXSAuICIsICIgLiAkYnl0 ZXMtPls0XSAuICIsICIgLgoJCQkJICAgICAgICRieXRlcy0+WzVdIC4gIiwgIiAuICRieXRlcy0+ WzE3XSk7Cgl9CgoJbXkgJGhpZ2hlc3RDQVMgPSAwOwoJbXkgJWNhczsKCWZvciAoJGlpID0gMDsg JGlpIDwgNzsgJGlpKyspIHsKCQlpZiAoJGJ5dGVzLT5bMThdICYgKDEgPDwgJGlpKSkgewoJCQkk aGlnaGVzdENBUyA9IDErJGlpKjAuNTsKCQkJJGNhc3skaGlnaGVzdENBU30rKzsKCQl9Cgl9CgoJ bXkgJHRyY2Q7CglteSAkdHJwOwoJbXkgJHRyYXM7CglteSAkY3RpbWUgPSAoJGJ5dGVzLT5bOV0g Pj4gNCkgKyAoJGJ5dGVzLT5bOV0gJiAweGYpICogMC4xOwoKCSR0cmNkID0gKCRieXRlcy0+WzI5 XSA+PiAyKSArICgoJGJ5dGVzLT5bMjldICYgMykgKiAwLjI1KTsKCSR0cnAgPSAoJGJ5dGVzLT5b MjddID4+IDIpICsgKCgkYnl0ZXMtPlsyN10gJiAzKSAqIDAuMjUpOwoJJHRyYXMgPSAkYnl0ZXMt PlszMF07CgoJcHJpbnRsKCJ0Q0wtdFJDRC10UlAtdFJBUyIsCgkJJGhpZ2hlc3RDQVMgLiAiLSIg LgoJCWNlaWwoJHRyY2QvJGN0aW1lKSAuICItIiAuCgkJY2VpbCgkdHJwLyRjdGltZSkgLiAiLSIg LgoJCWNlaWwoJHRyYXMvJGN0aW1lKSk7CgojIGxhdGVuY2llcwoJcHJpbnRsKCJTdXBwb3J0ZWQg Q0FTIExhdGVuY2llcyIsIGNhc19sYXRlbmNpZXMoa2V5cyAlY2FzKSk7CgoJbXkgQGFycmF5OwoJ Zm9yICgkaWkgPSAwOyAkaWkgPCA3OyAkaWkrKykgewoJCXB1c2goQGFycmF5LCAkaWkpIGlmICgk Ynl0ZXMtPlsxOV0gJiAoMSA8PCAkaWkpKTsKCX0KCWlmIChAYXJyYXkpIHsgJHRlbXAgPSBqb2lu ICcsICcsIEBhcnJheTsgfQoJZWxzZSB7ICR0ZW1wID0gIk5vbmUiOyB9CglwcmludGwoIlN1cHBv cnRlZCBDUyBMYXRlbmNpZXMiLCAkdGVtcCk7CgoJQGFycmF5ID0gKCk7Cglmb3IgKCRpaSA9IDA7 ICRpaSA8IDc7ICRpaSsrKSB7CgkJcHVzaChAYXJyYXksICRpaSkgaWYgKCRieXRlcy0+WzIwXSAm ICgxIDw8ICRpaSkpOwoJfQoJaWYgKEBhcnJheSkgeyAkdGVtcCA9IGpvaW4gJywgJywgQGFycmF5 OyB9CgllbHNlIHsgJHRlbXAgPSAiTm9uZSI7IH0KCXByaW50bCgiU3VwcG9ydGVkIFdFIExhdGVu Y2llcyIsICR0ZW1wKTsKCiMgdGltaW5ncwoJaWYgKGV4aXN0cyAkY2FzeyRoaWdoZXN0Q0FTfSkg ewoJCXByaW50bCgiTWluaW11bSBDeWNsZSBUaW1lIGF0IENBUyAkaGlnaGVzdENBUyIsCgkJICAg ICAgICIkY3RpbWUgbnMiKTsKCgkJcHJpbnRsKCJNYXhpbXVtIEFjY2VzcyBUaW1lIGF0IENBUyAk aGlnaGVzdENBUyIsCgkJICAgICAgICgoJGJ5dGVzLT5bMTBdID4+IDQpICogMC4xICsgKCRieXRl cy0+WzEwXSAmIDB4ZikgKiAwLjAxKSAuICIgbnMiKTsKCX0KCglpZiAoZXhpc3RzICRjYXN7JGhp Z2hlc3RDQVMtMC41fSAmJiBzcGRfd3JpdHRlbihAJGJ5dGVzWzIzLi4yNF0pKSB7CgkJcHJpbnRs KCJNaW5pbXVtIEN5Y2xlIFRpbWUgYXQgQ0FTICIuKCRoaWdoZXN0Q0FTLTAuNSksCgkJICAgICAg ICgoJGJ5dGVzLT5bMjNdID4+IDQpICsgKCRieXRlcy0+WzIzXSAmIDB4ZikgKiAwLjEpIC4gIiBu cyIpOwoKCQlwcmludGwoIk1heGltdW0gQWNjZXNzIFRpbWUgYXQgQ0FTICIuKCRoaWdoZXN0Q0FT LTAuNSksCgkJICAgICAgICgoJGJ5dGVzLT5bMjRdID4+IDQpICogMC4xICsgKCRieXRlcy0+WzI0 XSAmIDB4ZikgKiAwLjAxKSAuICIgbnMiKTsKCX0KCglpZiAoZXhpc3RzICRjYXN7JGhpZ2hlc3RD QVMtMX0gJiYgc3BkX3dyaXR0ZW4oQCRieXRlc1syNS4uMjZdKSkgewoJCXByaW50bCgiTWluaW11 bSBDeWNsZSBUaW1lIGF0IENBUyAiLigkaGlnaGVzdENBUy0xKSwKCQkgICAgICAgKCgkYnl0ZXMt PlsyNV0gPj4gNCkgKyAoJGJ5dGVzLT5bMjVdICYgMHhmKSAqIDAuMSkgLiAiIG5zIik7CgoJCXBy aW50bCgiTWF4aW11bSBBY2Nlc3MgVGltZSBhdCBDQVMgIi4oJGhpZ2hlc3RDQVMtMSksCgkJICAg ICAgICgoJGJ5dGVzLT5bMjZdID4+IDQpICogMC4xICsgKCRieXRlcy0+WzI2XSAmIDB4ZikgKiAw LjAxKSAuICIgbnMiKTsKCX0KCiMgbW9kdWxlIGF0dHJpYnV0ZXMKCWlmICgkYnl0ZXMtPls0N10g JiAweDAzKSB7CgkJaWYgKCgkYnl0ZXMtPls0N10gJiAweDAzKSA9PSAweDAxKSB7ICR0ZW1wID0g IjEuMTI1XCIgdG8gMS4yNVwiIjsgfQoJCWVsc2lmICgoJGJ5dGVzLT5bNDddICYgMHgwMykgPT0g MHgwMikgeyAkdGVtcCA9ICIxLjdcIiI7IH0KCQllbHNpZiAoKCRieXRlcy0+WzQ3XSAmIDB4MDMp ID09IDB4MDMpIHsgJHRlbXAgPSAiT3RoZXIiOyB9CgkJcHJpbnRsKCJNb2R1bGUgSGVpZ2h0Iiwg JHRlbXApOwoJfQp9CgpzdWIgZGRyMl9zZHJhbV9jdGltZSgkKQp7CglteSAkYnl0ZSA9IHNoaWZ0 OwoJbXkgJGN0aW1lOwoKCSRjdGltZSA9ICRieXRlID4+IDQ7CglpZiAoKCRieXRlICYgMHhmKSA8 PSA5KSB7ICRjdGltZSArPSAoJGJ5dGUgJiAweGYpICogMC4xOyB9CgllbHNpZiAoKCRieXRlICYg MHhmKSA9PSAxMCkgeyAkY3RpbWUgKz0gMC4yNTsgfQoJZWxzaWYgKCgkYnl0ZSAmIDB4ZikgPT0g MTEpIHsgJGN0aW1lICs9IDAuMzM7IH0KCWVsc2lmICgoJGJ5dGUgJiAweGYpID09IDEyKSB7ICRj dGltZSArPSAwLjY2OyB9CgllbHNpZiAoKCRieXRlICYgMHhmKSA9PSAxMykgeyAkY3RpbWUgKz0g MC43NTsgfQoKCXJldHVybiAkY3RpbWU7Cn0KCnN1YiBkZHIyX3NkcmFtX2F0aW1lKCQpCnsKCW15 ICRieXRlID0gc2hpZnQ7CglteSAkYXRpbWU7CgoJJGF0aW1lID0gKCRieXRlID4+IDQpICogMC4x ICsgKCRieXRlICYgMHhmKSAqIDAuMDE7CgoJcmV0dXJuICRhdGltZTsKfQoKIyBCYXNlLCBoaWdo LWJpdCwgMy1iaXQgZnJhY3Rpb24gY29kZQpzdWIgZGRyMl9zZHJhbV9ydGltZSgkJCQpCnsKCW15 ICgkcnRpbWUsICRtc2IsICRleHQpID0gQF87CglteSBAdGFibGUgPSAoMCwgLjI1LCAuMzMsIC41 MCwgLjY2LCAuNzUpOwoKCXJldHVybiAkcnRpbWUgKyAkbXNiICogMjU2ICsgJHRhYmxlWyRleHRd Owp9CgpzdWIgZGRyMl9tb2R1bGVfdHlwZXMoJCkKewoJbXkgJGJ5dGUgPSBzaGlmdDsKCW15IEB0 eXBlcyA9IHF3KFJESU1NIFVESU1NIFNPLURJTU0gTWljcm8tRElNTSBNaW5pLVJESU1NIE1pbmkt VURJTU0pOwoJbXkgQHdpZHRocyA9ICgxMzMuMzUsIDEzMy4yNSwgNjcuNiwgNDUuNSwgODIuMCwg ODIuMCk7CglteSBAc3VwdHlwZXM7Cglsb2NhbCAkXzsKCglmb3JlYWNoICgwLi41KSB7CgkJcHVz aCBAc3VwdHlwZXMsICIkdHlwZXNbJF9dICgkd2lkdGhzWyRfXSBtbSkiCgkJCWlmICgkYnl0ZSAm ICgxIDw8ICRfKSk7Cgl9CgoJcmV0dXJuIEBzdXB0eXBlczsKfQoKc3ViIGRkcjJfcmVmcmVzaF9y YXRlKCQpCnsKCW15ICRieXRlID0gc2hpZnQ7CglteSBAcmVmcmVzaCA9IHF3KE5vcm1hbCBSZWR1 Y2VkIFJlZHVjZWQgRXh0ZW5kZWQgRXh0ZW5kZWQgRXh0ZW5kZWQpOwoJbXkgQHJlZnJlc2h0ID0g KDE1LjYyNSwgMy45LCA3LjgsIDMxLjMsIDYyLjUsIDEyNSk7CgoJcmV0dXJuICIkcmVmcmVzaFsk Ynl0ZSAmIDB4N2ZdICgkcmVmcmVzaHRbJGJ5dGUgJiAweDdmXSB1cykiLgoJICAgICAgICgkYnl0 ZSAmIDB4ODAgPyAiIC0gU2VsZiBSZWZyZXNoIiA6ICIiKTsKfQoKIyBQYXJhbWV0ZXI6IEVFUFJP TSBieXRlcyAwLTEyNyAodXNpbmcgMy02MikKc3ViIGRlY29kZV9kZHIyX3NkcmFtKCQpCnsKCW15 ICRieXRlcyA9IHNoaWZ0OwoJbXkgJHRlbXA7CglteSAkY3RpbWU7CgojIFNQRCByZXZpc2lvbgoJ aWYgKCRieXRlcy0+WzYyXSAhPSAweGZmKSB7CgkJcHJpbnRsKCJTUEQgUmV2aXNpb24iLCAoJGJ5 dGVzLT5bNjJdID4+IDQpIC4gIi4iIC4KCQkJCSAgICAgICAoJGJ5dGVzLT5bNjJdICYgMHhmKSk7 Cgl9CgojIHNwZWVkCglwcmludHMoIk1lbW9yeSBDaGFyYWN0ZXJpc3RpY3MiKTsKCgkkY3RpbWUg PSBkZHIyX3NkcmFtX2N0aW1lKCRieXRlcy0+WzldKTsKCW15ICRkZHJjbGsgPSAyICogKDEwMDAg LyAkY3RpbWUpOwoJbXkgJHRiaXRzID0gKCRieXRlcy0+WzddICogMjU2KSArICRieXRlcy0+WzZd OwoJaWYgKCRieXRlcy0+WzExXSAmIDB4MDMpIHsgJHRiaXRzID0gJHRiaXRzIC0gODsgfQoJbXkg JHBjY2xrID0gaW50ICgkZGRyY2xrICogJHRiaXRzIC8gOCk7CgkjIFJvdW5kIGRvd24gdG8gY29t cGx5IHdpdGggSmVkZWMKCSRwY2NsayA9ICRwY2NsayAtICgkcGNjbGsgJSAxMDApOwoJJGRkcmNs ayA9IGludCAoJGRkcmNsayk7CglwcmludGwoIk1heGltdW0gbW9kdWxlIHNwZWVkIiwgIiR7ZGRy Y2xrfU1IeiAoUEMyLSR7cGNjbGt9KSIpOwoKI3NpemUgY29tcHV0YXRpb24KCW15ICRrID0gMDsK CW15ICRpaSA9IDA7CgoJJGlpID0gKCRieXRlcy0+WzNdICYgMHgwZikgKyAoJGJ5dGVzLT5bNF0g JiAweDBmKSAtIDE3OwoJJGsgPSAoKCRieXRlcy0+WzVdICYgMHg3KSArIDEpICogJGJ5dGVzLT5b MTddOwoKCWlmKCRpaSA+IDAgJiYgJGlpIDw9IDEyICYmICRrID4gMCkgewoJCXByaW50bCgiU2l6 ZSIsICgoMSA8PCAkaWkpICogJGspIC4gIiBNQiIpOwoJfSBlbHNlIHsKCQlwcmludGwoIklOVkFM SUQgU0laRSIsICRieXRlcy0+WzNdIC4gIiwiIC4gJGJ5dGVzLT5bNF0gLiAiLCIgLgoJCQkJICAg ICAgICRieXRlcy0+WzVdIC4gIiwiIC4gJGJ5dGVzLT5bMTddKTsKCX0KCglwcmludGwoIkJhbmtz IHggUm93cyB4IENvbHVtbnMgeCBCaXRzIiwKCSAgICAgICBqb2luKCcgeCAnLCAkYnl0ZXMtPlsx N10sICRieXRlcy0+WzNdLCAkYnl0ZXMtPls0XSwgJGJ5dGVzLT5bNl0pKTsKCXByaW50bCgiUmFu a3MiLCAoJGJ5dGVzLT5bNV0gJiA3KSArIDEpOwoKCXByaW50bCgiU0RSQU0gRGV2aWNlIFdpZHRo IiwgJGJ5dGVzLT5bMTNdLiIgYml0cyIpOwoKCW15IEBoZWlnaHRzID0gKCc8IDI1LjQnLCAnMjUu NCcsICcyNS40IC0gMzAuMCcsICczMC4wJywgJzMwLjUnLCAnPiAzMC41Jyk7CglwcmludGwoIk1v ZHVsZSBIZWlnaHQiLCAkaGVpZ2h0c1skYnl0ZXMtPls1XSA+PiA1XS4iIG1tIik7CgoJbXkgQHN1 cHR5cGVzID0gZGRyMl9tb2R1bGVfdHlwZXMoJGJ5dGVzLT5bMjBdKTsKCXByaW50bCgiTW9kdWxl IFR5cGUiLihAc3VwdHlwZXMgPiAxID8gJ3MnIDogJycpLCBqb2luKCcsICcsIEBzdXB0eXBlcykp OwoKCXByaW50bCgiRFJBTSBQYWNrYWdlIiwgJGJ5dGVzLT5bNV0gJiAweDEwID8gIlN0YWNrIiA6 ICJQbGFuYXIiKTsKCglteSBAdm9sdHMgPSAoIlRUTCAoNVYgVG9sZXJhbnQpIiwgIkxWVFRMIiwg IkhTVEwgMS41ViIsCgkJICAgICAiU1NUTCAzLjNWIiwgIlNTVEwgMi41ViIsICJTU1RMIDEuOFYi LCAiVEJEIik7CglwcmludGwoIlZvbHRhZ2UgSW50ZXJmYWNlIExldmVsIiwgJHZvbHRzWyRieXRl cy0+WzhdXSk7CgoJcHJpbnRsKCJSZWZyZXNoIFJhdGUiLCBkZHIyX3JlZnJlc2hfcmF0ZSgkYnl0 ZXMtPlsxMl0pKTsKCglteSBAYnVyc3Q7CglwdXNoIEBidXJzdCwgNCBpZiAoJGJ5dGVzLT5bMTZd ICYgNCk7CglwdXNoIEBidXJzdCwgOCBpZiAoJGJ5dGVzLT5bMTZdICYgOCk7CgkkYnVyc3RbMF0g PSAnTm9uZScgaWYgIUBidXJzdDsKCXByaW50bCgiU3VwcG9ydGVkIEJ1cnN0IExlbmd0aHMiLCBq b2luKCcsICcsIEBidXJzdCkpOwoKCW15ICRoaWdoZXN0Q0FTID0gMDsKCW15ICVjYXM7Cglmb3Ig KCRpaSA9IDI7ICRpaSA8IDc7ICRpaSsrKSB7CgkJaWYgKCRieXRlcy0+WzE4XSAmICgxIDw8ICRp aSkpIHsKCQkJJGhpZ2hlc3RDQVMgPSAkaWk7CgkJCSRjYXN7JGhpZ2hlc3RDQVN9Kys7CgkJfQoJ fQoKCW15ICR0cmNkOwoJbXkgJHRycDsKCW15ICR0cmFzOwoKCSR0cmNkID0gKCRieXRlcy0+WzI5 XSA+PiAyKSArICgoJGJ5dGVzLT5bMjldICYgMykgKiAwLjI1KTsKCSR0cnAgPSAoJGJ5dGVzLT5b MjddID4+IDIpICsgKCgkYnl0ZXMtPlsyN10gJiAzKSAqIDAuMjUpOwoJJHRyYXMgPSAkYnl0ZXMt PlszMF07CgoJcHJpbnRsKCJ0Q0wtdFJDRC10UlAtdFJBUyIsCgkJJGhpZ2hlc3RDQVMgLiAiLSIg LgoJCWNlaWwoJHRyY2QvJGN0aW1lKSAuICItIiAuCgkJY2VpbCgkdHJwLyRjdGltZSkgLiAiLSIg LgoJCWNlaWwoJHRyYXMvJGN0aW1lKSk7CgojIGxhdGVuY2llcwoJcHJpbnRsKCJTdXBwb3J0ZWQg Q0FTIExhdGVuY2llcyAodENMKSIsIGNhc19sYXRlbmNpZXMoa2V5cyAlY2FzKSk7CgojIHRpbWlu Z3MKCWlmIChleGlzdHMgJGNhc3skaGlnaGVzdENBU30pIHsKCQlwcmludGwoIk1pbmltdW0gQ3lj bGUgVGltZSBhdCBDQVMgJGhpZ2hlc3RDQVMgKHRDSyBtaW4pIiwKCQkgICAgICAgdG5zKCRjdGlt ZSkpOwoJCXByaW50bCgiTWF4aW11bSBBY2Nlc3MgVGltZSBhdCBDQVMgJGhpZ2hlc3RDQVMgKHRB QykiLAoJCSAgICAgICB0bnMoZGRyMl9zZHJhbV9hdGltZSgkYnl0ZXMtPlsxMF0pKSk7Cgl9CgoJ aWYgKGV4aXN0cyAkY2FzeyRoaWdoZXN0Q0FTLTF9ICYmIHNwZF93cml0dGVuKEAkYnl0ZXNbMjMu LjI0XSkpIHsKCQlwcmludGwoIk1pbmltdW0gQ3ljbGUgVGltZSBhdCBDQVMgIi4oJGhpZ2hlc3RD QVMtMSksCgkJICAgICAgIHRucyhkZHIyX3NkcmFtX2N0aW1lKCRieXRlcy0+WzIzXSkpKTsKCQlw cmludGwoIk1heGltdW0gQWNjZXNzIFRpbWUgYXQgQ0FTICIuKCRoaWdoZXN0Q0FTLTEpLAoJCSAg ICAgICB0bnMoZGRyMl9zZHJhbV9hdGltZSgkYnl0ZXMtPlsyNF0pKSk7Cgl9CgoJaWYgKGV4aXN0 cyAkY2FzeyRoaWdoZXN0Q0FTLTJ9ICYmIHNwZF93cml0dGVuKEAkYnl0ZXNbMjUuLjI2XSkpIHsK CQlwcmludGwoIk1pbmltdW0gQ3ljbGUgVGltZSBhdCBDQVMgIi4oJGhpZ2hlc3RDQVMtMiksCgkJ ICAgICAgIHRucyhkZHIyX3NkcmFtX2N0aW1lKCRieXRlcy0+WzI1XSkpKTsKCQlwcmludGwoIk1h eGltdW0gQWNjZXNzIFRpbWUgYXQgQ0FTICIuKCRoaWdoZXN0Q0FTLTIpLAoJCSAgICAgICB0bnMo ZGRyMl9zZHJhbV9hdGltZSgkYnl0ZXMtPlsyNl0pKSk7Cgl9CglwcmludGwoIk1heGltdW0gQ3lj bGUgVGltZSAodENLIG1heCkiLAoJICAgICAgIHRucyhkZHIyX3NkcmFtX2N0aW1lKCRieXRlcy0+ WzQzXSkpKTsKCiMgbW9yZSB0aW1pbmcgaW5mb3JtYXRpb24KCXByaW50cygiVGltaW5nIFBhcmFt ZXRlcnMiKTsKCXByaW50bCgiQWRkcmVzcy9Db21tYW5kIFNldHVwIFRpbWUgQmVmb3JlIENsb2Nr ICh0SVMpIiwKCSAgICAgICB0bnMoZGRyMl9zZHJhbV9hdGltZSgkYnl0ZXMtPlszMl0pKSk7Cglw cmludGwoIkFkZHJlc3MvQ29tbWFuZCBIb2xkIFRpbWUgQWZ0ZXIgQ2xvY2sgKHRJSCkiLAoJICAg ICAgIHRucyhkZHIyX3NkcmFtX2F0aW1lKCRieXRlcy0+WzMzXSkpKTsKCXByaW50bCgiRGF0YSBJ bnB1dCBTZXR1cCBUaW1lIEJlZm9yZSBTdHJvYmUgKHREUykiLAoJICAgICAgIHRucyhkZHIyX3Nk cmFtX2F0aW1lKCRieXRlcy0+WzM0XSkpKTsKCXByaW50bCgiRGF0YSBJbnB1dCBIb2xkIFRpbWUg QWZ0ZXIgU3Ryb2JlICh0REgpIiwKCSAgICAgICB0bnMoZGRyMl9zZHJhbV9hdGltZSgkYnl0ZXMt PlszNV0pKSk7CglwcmludGwoIk1pbmltdW0gUm93IFByZWNoYXJnZSBEZWxheSAodFJQKSIsIHRu cygkdHJwKSk7CglwcmludGwoIk1pbmltdW0gUm93IEFjdGl2ZSB0byBSb3cgQWN0aXZlIERlbGF5 ICh0UlJEKSIsCgkgICAgICAgdG5zKCRieXRlcy0+WzI4XS80KSk7CglwcmludGwoIk1pbmltdW0g UkFTIyB0byBDQVMjIERlbGF5ICh0UkNEKSIsIHRucygkdHJjZCkpOwoJcHJpbnRsKCJNaW5pbXVt IFJBUyMgUHVsc2UgV2lkdGggKHRSQVMpIiwgdG5zKCR0cmFzKSk7CglwcmludGwoIldyaXRlIFJl Y292ZXJ5IFRpbWUgKHRXUikiLCB0bnMoJGJ5dGVzLT5bMzZdLzQpKTsKCXByaW50bCgiTWluaW11 bSBXcml0ZSB0byBSZWFkIENNRCBEZWxheSAodFdUUikiLCB0bnMoJGJ5dGVzLT5bMzddLzQpKTsK CXByaW50bCgiTWluaW11bSBSZWFkIHRvIFByZS1jaGFyZ2UgQ01EIERlbGF5ICh0UlRQKSIsIHRu cygkYnl0ZXMtPlszOF0vNCkpOwoJcHJpbnRsKCJNaW5pbXVtIEFjdGl2ZSB0byBBdXRvLXJlZnJl c2ggRGVsYXkgKHRSQykiLAoJICAgICAgIHRucyhkZHIyX3NkcmFtX3J0aW1lKCRieXRlcy0+WzQx XSwgMCwgKCRieXRlcy0+WzQwXSA+PiA0KSAmIDcpKSk7CglwcmludGwoIk1pbmltdW0gUmVjb3Zl cnkgRGVsYXkgKHRSRkMpIiwKCSAgICAgICB0bnMoZGRyMl9zZHJhbV9ydGltZSgkYnl0ZXMtPls0 Ml0sICRieXRlcy0+WzQwXSAmIDEsCgkJCQkgICAgKCRieXRlcy0+WzQwXSA+PiAxKSAmIDcpKSk7 CglwcmludGwoIk1heGltdW0gRFFTIHRvIERRIFNrZXcgKHREUVNRKSIsIHRucygkYnl0ZXMtPls0 NF0vMTAwKSk7CglwcmludGwoIk1heGltdW0gUmVhZCBEYXRhIEhvbGQgU2tldyAodFFIUykiLCB0 bnMoJGJ5dGVzLT5bNDVdLzEwMCkpOwoJcHJpbnRsKCJQTEwgUmVsb2NrIFRpbWUiLCAkYnl0ZXMt Pls0Nl0gLiAiIHVzIikgaWYgKCRieXRlcy0+WzQ2XSk7Cn0KCiMgUGFyYW1ldGVyOiBFRVBST00g Ynl0ZXMgMC0xMjcgKHVzaW5nIDMtNzYpCnN1YiBkZWNvZGVfZGRyM19zZHJhbSgkKQp7CglteSAk Ynl0ZXMgPSBzaGlmdDsKCW15ICR0ZW1wOwoJbXkgJGN0aW1lOwoKCW15IEBtb2R1bGVfdHlwZXMg PSAoIlVuZGVmaW5lZCIsICJSRElNTSIsICJVRElNTSIsICJTTy1ESU1NIiwKCQkJICAgICJNaWNy by1ESU1NIiwgIk1pbmktUkRJTU0iLCAiTWluaS1VRElNTSIpOwoKCXByaW50bCgiTW9kdWxlIFR5 cGUiLCAoJGJ5dGVzLT5bM10gPD0gJCNtb2R1bGVfdHlwZXMpID8KCQkJCQkkbW9kdWxlX3R5cGVz WyRieXRlcy0+WzNdXSA6CgkJCQkJc3ByaW50KCJSZXNlcnZlZCAoMHglLjJYKSIsICRieXRlcy0+ WzNdKSk7CgojIHNwZWVkCglwcmludHMoIk1lbW9yeSBDaGFyYWN0ZXJpc3RpY3MiKTsKCglteSAk ZGl2aWRlbmQgPSAoJGJ5dGVzLT5bOV0gPj4gNCkgJiAxNTsKCW15ICRkaXZpc29yICA9ICRieXRl cy0+WzldICYgMTU7CglwcmludGwoIkZpbmUgdGltZSBiYXNlIiwgc3ByaW50ZigiJS4zZiIsICRk aXZpZGVuZCAvICRkaXZpc29yKSAuICIgcHMiKTsKCgkkZGl2aWRlbmQgPSAkYnl0ZXMtPlsxMF07 CgkkZGl2aXNvciAgPSAkYnl0ZXMtPlsxMV07CglteSAkbXRiID0gJGRpdmlkZW5kIC8gJGRpdmlz b3I7CglwcmludGwoIk1lZGl1bSB0aW1lIGJhc2UiLCB0bnMzKCRtdGIpKTsKCgkkY3RpbWUgPSAk Ynl0ZXMtPlsxMl0gKiAkbXRiOwoJbXkgJGRkcmNsayA9IDIgKiAoMTAwMCAvICRjdGltZSk7Cglt eSAkdGJpdHMgPSAxIDw8ICgoJGJ5dGVzLT5bOF0gJiA3KSArIDMpOwoJbXkgJHBjY2xrID0gaW50 ICgkZGRyY2xrICogJHRiaXRzIC8gOCk7CgkkZGRyY2xrID0gaW50ICgkZGRyY2xrKTsKCXByaW50 bCgiTWF4aW11bSBtb2R1bGUgc3BlZWQiLCAiJHtkZHJjbGt9TUh6IChQQzMtJHtwY2Nsa30pIik7 CgojIFNpemUgY29tcHV0YXRpb24KCglteSAkY2FwID0gICgkYnl0ZXMtPls0XSAgICAgICAmIDE1 KSArIDI4OwoJJGNhcCAgICs9ICAoJGJ5dGVzLT5bOF0gICAgICAgJiA3KSAgKyAzOwoJJGNhcCAg IC09ICAoJGJ5dGVzLT5bN10gICAgICAgJiA3KSAgKyAyOwoJJGNhcCAgIC09IDIwICsgMzsKCW15 ICRrICAgPSAoKCRieXRlcy0+WzddID4+IDMpICYgMzEpICsgMTsKCXByaW50bCgiU2l6ZSIsICgo MSA8PCAkY2FwKSAqICRrKSAuICIgTUIiKTsKCglwcmludGwoIkJhbmtzIHggUm93cyB4IENvbHVt bnMgeCBCaXRzIiwKCSAgICAgICBqb2luKCcgeCAnLCAxIDw8ICgoKCRieXRlcy0+WzRdID4+IDQp ICYgIDcpICsgIDMpLAoJCQkgICAoKCgkYnl0ZXMtPls1XSA+PiAzKSAmIDMxKSArIDEyKSwKCQkJ ICAgKCAoJGJ5dGVzLT5bNV0gICAgICAgJiAgNykgKyAgOSksCgkJCSAgICggMSA8PCAoKCRieXRl cy0+WzhdICYgIDcpICsgMykpICkpOwoJcHJpbnRsKCJSYW5rcyIsICRrKTsKCglwcmludGwoIlNE UkFNIERldmljZSBXaWR0aCIsICgxIDw8ICgoJGJ5dGVzLT5bN10gJiA3KSArIDIpKS4iIGJpdHMi KTsKCglteSAkdGFhOwoJbXkgJHRyY2Q7CglteSAkdHJwOwoJbXkgJHRyYXM7CgoJJHRhYSAgPSBp bnQoJGJ5dGVzLT5bMTZdIC8gJGJ5dGVzLT5bMTJdKTsKCSR0cmNkID0gaW50KCRieXRlcy0+WzE4 XSAvICRieXRlcy0+WzEyXSk7CgkkdHJwICA9IGludCgkYnl0ZXMtPlsyMF0gLyAkYnl0ZXMtPlsx Ml0pOwoJJHRyYXMgPSBpbnQoKCgkYnl0ZXMtPlsyMV0gPj4gNCkgKiAyNTYgKyAkYnl0ZXMtPlsy Ml0pIC8gJGJ5dGVzLT5bMTJdKTsKCglwcmludGwoInRDTC10UkNELXRSUC10UkFTIiwgam9pbigi LSIsICR0YWEsICR0cmNkLCAkdHJwLCAkdHJhcykpOwoKIyBsYXRlbmNpZXMKCW15ICRoaWdoZXN0 Q0FTID0gMDsKCW15ICVjYXM7CglteSAkaWk7CglteSAkY2FzX3N1cCA9ICgkYnl0ZXMtPlsxNV0g PDwgOCkgKyAkYnl0ZXMtPlsxNF07Cglmb3IgKCRpaSA9IDA7ICRpaSA8IDE1OyAkaWkrKykgewoJ CWlmICgkY2FzX3N1cCAmICgxIDw8ICRpaSkpIHsKCQkJJGhpZ2hlc3RDQVMgPSAkaWkgKyA0OwoJ CQkkY2FzeyRoaWdoZXN0Q0FTfSsrOwoJCX0KCX0KCXByaW50bCgiU3VwcG9ydGVkIENBUyBMYXRl bmNpZXMgKHRDTCkiLCBjYXNfbGF0ZW5jaWVzKGtleXMgJWNhcykpOwoKIyBtb3JlIHRpbWluZyBp bmZvcm1hdGlvbgoJcHJpbnRzKCJUaW1pbmcgUGFyYW1ldGVycyIpOwoKCXByaW50bCgiTWluaW11 bSBXcml0ZSBSZWNvdmVyeSB0aW1lICh0V1IpIiwgdG5zMygkYnl0ZXMtPlsxN10gKiAkbXRiKSk7 CglwcmludGwoIk1pbmltdW0gUm93IEFjdGl2ZSB0byBSb3cgQWN0aXZlIERlbGF5ICh0UlJEKSIs CgkJdG5zMygkYnl0ZXMtPlsxOV0gKiAkbXRiKSk7CglwcmludGwoIk1pbmltdW0gQWN0aXZlIHRv IEF1dG8tUmVmcmVzaCBEZWxheSAodFJDKSIsCgkJdG5zMygoKCgoJGJ5dGVzLT5bMjFdID4+IDQp ICYgMTUpIDw8IDgpICsgJGJ5dGVzLT5bMjNdKSAqICRtdGIpKTsKCXByaW50bCgiTWluaW11bSBS ZWNvdmVyeSBEZWxheSAodFJGQykiLAoJCXRuczMoKCgkYnl0ZXMtPlsyNV0gPDwgOCkgKyAkYnl0 ZXMtPlsyNF0pICogJG10YikpOwoJcHJpbnRsKCJNaW5pbXVtIFdyaXRlIHRvIFJlYWQgQ01EIERl bGF5ICh0V1RSKSIsCgkJdG5zMygkYnl0ZXMtPlsyNl0gKiAkbXRiKSk7CglwcmludGwoIk1pbmlt dW0gUmVhZCB0byBQcmUtY2hhcmdlIENNRCBEZWxheSAodFJUUCkiLAoJCXRuczMoJGJ5dGVzLT5b MjddICogJG10YikpOwoJcHJpbnRsKCJNaW5pbXVtIEZvdXIgQWN0aXZhdGUgV2luZG93IERlbGF5 ICh0RkFXKSIsCgkJdG5zMygoKCgkYnl0ZXMtPlsyOF0gJiAxNSkgPDwgOCkgKyAkYnl0ZXMtPlsy OV0pICogJG10YikpOwoKIyBtaXNjZWxsYW5lb3VzIHN0dWZmCglwcmludHMoIk9wdGlvbmFsIEZl YXR1cmVzIik7CgoJbXkgJHZvbHRzID0gIjEuNVYiOwoJaWYgKCRieXRlcy0+WzZdICYgMSkgewoJ CSR2b2x0cyAuPSAiIHRvbGVyYW50IjsKCX0KCWlmICgkYnl0ZXMtPls2XSAmIDIpIHsKCQkkdm9s dHMgLj0gIiwgMS4zNVYgIjsKCX0KCWlmICgkYnl0ZXMtPls2XSAmIDQpIHsKCQkkdm9sdHMgLj0g IiwgMS4yWCBWIjsKCX0KCXByaW50bCgiT3BlcmFibGUgdm9sdGFnZXMiLCAkdm9sdHMpOwoJcHJp bnRsKCJSWlEvNiBzdXBwb3J0ZWQ/IiwgKCRieXRlcy0+WzMwXSAmIDEpID8gIlllcyIgOiAiTm8i KTsKCXByaW50bCgiUlpRLzcgc3VwcG9ydGVkPyIsICgkYnl0ZXMtPlszMF0gJiAyKSA/ICJZZXMi IDogIk5vIik7CglwcmludGwoIkRMTC1PZmYgTW9kZSBzdXBwb3J0ZWQ/IiwgKCRieXRlcy0+WzMw XSAmIDEyOCkgPyAiWWVzIiA6ICJObyIpOwoJcHJpbnRsKCJPcGVyYXRpbmcgdGVtcGVyYXR1cmUg cmFuZ2UiLCBzcHJpbnRmICIwLSVkQyIsCgkJKCRieXRlcy0+WzMxXSAmIDEpID8gOTUgOiA4NSk7 CglwcmludGwoIlJlZnJlc2ggUmF0ZSBpbiBleHRlbmRlZCB0ZW1wIHJhbmdlIiwKCQkoJGJ5dGVz LT5bMzFdICYgMikgPyAiMlgiIDogIjFYIik7CglwcmludGwoIkF1dG8gU2VsZi1SZWZyZXNoPyIs ICgkYnl0ZXMtPlszMV0gJiA0KSA/ICJZZXMiIDogIk5vIik7CglwcmludGwoIk9uLURpZSBUaGVy bWFsIFNlbnNvciByZWFkb3V0PyIsCgkJKCRieXRlcy0+WzMxXSAmIDgpID8gIlllcyIgOiAiTm8i KTsKCXByaW50bCgiUGFydGlhbCBBcnJheSBTZWxmLVJlZnJlc2g/IiwKCQkoJGJ5dGVzLT5bMzFd ICYgMTI4KSA/ICJZZXMiIDogIk5vIik7CglwcmludGwoIlRoZXJtYWwgU2Vuc29yIEFjY3VyYWN5 IiwKCQkoJGJ5dGVzLT5bMzJdICYgMTI4KSA/IHNwcmludGYoJGJ5dGVzLT5bMzJdICYgMTI3KSA6 CgkJCQkJIk5vdCBpbXBsZW1lbnRlZCIpOwoJcHJpbnRsKCJTRFJBTSBEZXZpY2UgVHlwZSIsCgkJ KCRieXRlcy0+WzMzXSAmIDEyOCkgPyBzcHJpbnRmKCRieXRlcy0+WzMzXSAmIDEyNykgOgoJCQkJ CSJTdGFuZGFyZCBNb25vbGl0aGljIik7CglpZiAoJGJ5dGVzLT5bM10gPj0gMSAmJiAkYnl0ZXMt PlszXSA8PSA2KSB7CgoJCXByaW50cygiUGh5c2ljYWwgQ2hhcmFjdGVyaXN0aWNzIik7CgkJcHJp bnRsKCJNb2R1bGUgSGVpZ2h0IChtbSkiLCAoJGJ5dGVzLT5bNjBdICYgMzEpICsgMTUpOwoJCXBy aW50bCgiTW9kdWxlIFRoaWNrbmVzcyAobW0pIiwgc3ByaW50ZigiJWQgZnJvbnQsICVkIGJhY2si LAoJCQkJCQkoJGJ5dGVzLT5bNjFdICYgMTUpICsgMSwKCQkJCQkJKCgkYnl0ZXMtPls2MV0gPj4g NCkgJiAxNSkgKzEpKTsKCQlwcmludGwoIk1vZHVsZSBXaWR0aCAobW0pIiwgKCRieXRlcy0+WzNd IDw9IDIpID8gMTMzLjUgOgoJCQkJCSgkYnl0ZXMtPlszXSA9PSAzKSA/IDY3LjYgOiAiVEJEIik7 CgoJCW15ICRhbHBoYWJldCA9ICJBQkNERUZHSEpLTE1OUFJUVVZXWSI7CgkJbXkgJHJlZiA9ICRi eXRlcy0+WzYyXSAmIDMxOwoJCW15ICRyZWZfY2FyZDsKCQlpZiAoJHJlZiA9PSAzMSkgewoJCQkk cmVmX2NhcmQgPSAiWloiOwoJCX0gZWxzZSB7CgkJCWlmICgkYnl0ZXMtPls2Ml0gJiAxMjgpIHsK CQkJCSRyZWYgKz0gMzE7CgkJCX0KCQkJaWYgKCRyZWYgPCBsZW5ndGggJGFscGhhYmV0KSB7CgkJ CQkkcmVmX2NhcmQgPSBzdWJzdHIgJGFscGhhYmV0LCAkcmVmLCAxOwoJCQl9IGVsc2UgewoJCQkJ bXkgJHJlZjEgPSBpbnQoJHJlZiAvIChsZW5ndGggJGFscGhhYmV0KSk7CgkJCQkkcmVmIC09IChs ZW5ndGggJGFscGhhYmV0KSAqICRyZWYxOwoJCQkJJHJlZl9jYXJkID0gKHN1YnN0ciAkYWxwaGFi ZXQsICRyZWYxLCAxKSAuCgkJCQkJICAgIChzdWJzdHIgJGFscGhhYmV0LCAkcmVmLCAxKTsKCQkJ fQoJCX0KCQlwcmludGwoIk1vZHVsZSBSZWZlcmVuY2UgQ2FyZCIsICRyZWZfY2FyZCk7Cgl9Cglp ZiAoJGJ5dGVzLT5bM10gPT0gMSB8fCAkYnl0ZXMtPlszXSA9PSA1KSB7CgkJcHJpbnRzKCJSZWdp c3RlcmVkIERJTU0iKTsKCgkJbXkgQHJvd3MgPSAoIlVuZGVmaW5lZCIsIDEsIDIsIDQpOwoJCXBy aW50bCgiIyBEUkFNIFJvd3MiLCAkcm93c1soJGJ5dGVzLT5bNjNdID4+IDIpICYgM10pOwoJCXBy aW50bCgiIyBSZWdpc3RlcnMiLCAkcm93c1skYnl0ZXMtPls2M10gJiAzXSk7CgkJcHJpbnRsKCJS ZWdpc3RlciBtYW51ZmFjdHVyZXIiLAoJCQltYW51ZmFjdHVyZXJfZGRyMygkYnl0ZXMtPls2NV0s ICRieXRlcy0+WzY2XSkpOwoJCXByaW50bCgiUmVnaXN0ZXIgZGV2aWNlIHR5cGUiLAoJCQkJKCgk Ynl0ZXMtPls2OF0gJiA3KSA9PSAwKSA/ICJTU1RFMzI4ODIiIDoKCQkJCQkiVW5kZWZpbmVkIik7 CgkJcHJpbnRsKCJSZWdpc3RlciByZXZpc2lvbiIsIHNwcmludGYoIjB4JS4yWCIsICRieXRlcy0+ WzY3XSkpOwoJCXByaW50bCgiSGVhdCBzcHJlYWRlciBjaGFyYWN0ZXJpc3RpY3MiLAoJCQkJKCRi eXRlcy0+WzY0XSA8IDEyOCkgPyAiTm90IGluY29ycG9yYXRlZCIgOgoJCQkJCXNwcmludGYoIiUu MlgiLCAoJGJ5dGVzLT5bNjRdICYgMTI3KSkpOwoJCW15ICRyZWdzOwoJCWZvciAobXkgJGkgPSAw OyAkaSA8IDg7ICRpKyspIHsKCQkJJHJlZ3MgPSBzcHJpbnRmKCJTU1RFMzI4ODIgUkMlZC9SQyVk IiwKCQkJCQkkaSAqIDIsICRpICogMiArIDEpOwoJCQlwcmludGwoJHJlZ3MsIHNwcmludGYoIiUu MlgiLCAkYnl0ZXMtPlskaSArIDY5XSkpOwoJCX0KCX0KfQoKIyBQYXJhbWV0ZXI6IEVFUFJPTSBi eXRlcyAwLTEyNyAodXNpbmcgNC01KQpzdWIgZGVjb2RlX2RpcmVjdF9yYW1idXMoJCkKewoJbXkg JGJ5dGVzID0gc2hpZnQ7Cgojc2l6ZSBjb21wdXRhdGlvbgoJcHJpbnRzKCJNZW1vcnkgQ2hhcmFj dGVyaXN0aWNzIik7CgoJbXkgJGlpOwoKCSRpaSA9ICgkYnl0ZXMtPls0XSAmIDB4MGYpICsgKCRi eXRlcy0+WzRdID4+IDQpICsgKCRieXRlcy0+WzVdICYgMHgwNykgLSAxMzsKCglpZiAoJGlpID4g MCAmJiAkaWkgPCAxNikgewoJCXByaW50bCgiU2l6ZSIsICgxIDw8ICRpaSkgLiAiIE1CIik7Cgl9 IGVsc2UgewoJCXByaW50bCgiSU5WQUxJRCBTSVpFIiwgc3ByaW50ZigiMHglMDJ4LCAweCUwMngi LAoJCQkJCSAgICAgICAkYnl0ZXMtPls0XSwgJGJ5dGVzLT5bNV0pKTsKCX0KfQoKIyBQYXJhbWV0 ZXI6IEVFUFJPTSBieXRlcyAwLTEyNyAodXNpbmcgMy01KQpzdWIgZGVjb2RlX3JhbWJ1cygkKQp7 CglteSAkYnl0ZXMgPSBzaGlmdDsKCiNzaXplIGNvbXB1dGF0aW9uCglwcmludHMoIk1lbW9yeSBD aGFyYWN0ZXJpc3RpY3MiKTsKCglteSAkaWk7CgoJJGlpID0gKCRieXRlcy0+WzNdICYgMHgwZikg KyAoJGJ5dGVzLT5bM10gPj4gNCkgKyAoJGJ5dGVzLT5bNV0gJiAweDA3KSAtIDEzOwoKCWlmICgk aWkgPiAwICYmICRpaSA8IDE2KSB7CgkJcHJpbnRsKCJTaXplIiwgKDEgPDwgJGlpKSAuICIgTUIi KTsKCX0gZWxzZSB7CgkJcHJpbnRsKCJJTlZBTElEIFNJWkUiLCBzcHJpbnRmKCIweCUwMngsIDB4 JTAyeCIsCgkJCQkJICAgICAgICRieXRlcy0+WzNdLCAkYnl0ZXMtPls1XSkpOwoJfQp9CgolZGVj b2RlX2NhbGxiYWNrID0gKAoJIlNEUiBTRFJBTSIJPT4gXCZkZWNvZGVfc2RyX3NkcmFtLAoJIkRE UiBTRFJBTSIJPT4gXCZkZWNvZGVfZGRyX3NkcmFtLAoJIkREUjIgU0RSQU0iCT0+IFwmZGVjb2Rl X2RkcjJfc2RyYW0sCgkiRERSMyBTRFJBTSIJPT4gXCZkZWNvZGVfZGRyM19zZHJhbSwKCSJEaXJl Y3QgUmFtYnVzIgk9PiBcJmRlY29kZV9kaXJlY3RfcmFtYnVzLAoJIlJhbWJ1cyIJPT4gXCZkZWNv ZGVfcmFtYnVzLAopOwoKIyBQYXJhbWV0ZXI6IE1hbnVmYWN0dXJpbmcgeWVhci93ZWVrIGJ5dGVz CnN1YiBtYW51ZmFjdHVyZV9kYXRlKCQkKQp7CglteSAoJHllYXIsICR3ZWVrKSA9IEBfOwoKCSMg SW4gdGhlb3J5IHRoZSB5ZWFyIGFuZCB3ZWVrIGFyZSBpbiBCQ0QgZm9ybWF0LCBidXQKCSMgdGhp cyBpcyBub3QgYWx3YXlzIHRydWUgaW4gcHJhY3RpY2UgOigKCWlmICgoJHllYXIgJiAweGYwKSA8 PSAweDkwICYmICgkeWVhciAmIDB4MGYpIDw9IDB4MDkKCSAmJiAoJHdlZWsgJiAweGYwKSA8PSAw eDkwICYmICgkd2VlayAmIDB4MGYpIDw9IDB4MDkpIHsKCQkjIE5vdGUgdGhhdCB0aGlzIGhldXJp c3RpYyB3aWxsIGJyZWFrIGluIHllYXIgMjA4MAoJCXJldHVybiBzcHJpbnRmKCIlZCUwMlgtVyUw MlgiLAoJCQkJJHllYXIgPj0gMHg4MCA/IDE5IDogMjAsICR5ZWFyLCAkd2Vlayk7Cgl9IGVsc2Ug ewoJCXJldHVybiBzcHJpbnRmKCIweCUwMlglMDJYIiwgJHllYXIsICR3ZWVrKTsKCX0KfQoKc3Vi IHByaW50bF9tZmdfbG9jYXRpb25fY29kZSgkKQp7CglteSAkY29kZSA9IHNoaWZ0OwoJbXkgJGxl dHRlciA9IGNocigkY29kZSk7CgoJcmV0dXJuIHVubGVzcyBzcGRfd3JpdHRlbigkY29kZSk7Cgkj IFRyeSB0aGUgbG9jYXRpb24gY29kZSBhcyBBU0NJSSBmaXJzdCwgYXMgZWFybGllciBzcGVjaWZp Y2F0aW9ucwoJIyBzdWdnZXN0ZWQgdGhpcy4gQXMgbmV3ZXIgc3BlY2lmaWNhdGlvbnMgZG9uJ3Qg bWVudGlvbiBpdCBhbnltb3JlLAoJIyB3ZSBzdGlsbCBmYWxsIGJhY2sgdG8gYmluYXJ5LgoJcHJp bnRsKCJNYW51ZmFjdHVyaW5nIExvY2F0aW9uIENvZGUiLAoJICAgICAgICRsZXR0ZXIgPX4gbS9e W1x3XGRdJC8gPyAkbGV0dGVyIDogc3ByaW50ZigiMHglLjJYIiwgJGNvZGUpKTsKfQoKc3ViIHBy aW50bF9tZmdfYXNzZW1ibHlfc2VyaWFsKEApCnsKCXJldHVybiB1bmxlc3Mgc3BkX3dyaXR0ZW4o QF8pOwoJcHJpbnRsKCJBc3NlbWJseSBTZXJpYWwgTnVtYmVyIiwgc3ByaW50ZigiMHglMDJYJTAy WCUwMlglMDJYIiwgQF8pKTsKfQoKIyBQYXJhbWV0ZXI6IEVFUFJPTSBieXRlcyAwLTE3NSAodXNp bmcgMTE3LTE0OSkKc3ViIGRlY29kZV9kZHIzX21mZ19kYXRhKCQpCnsKCW15ICRieXRlcyA9IHNo aWZ0OwoKCXByaW50cygiTWFudWZhY3R1cmVyIERhdGEiKTsKCglwcmludGwoIk1vZHVsZSBNYW51 ZmFjdHVyZXIiLAoJICAgICAgIG1hbnVmYWN0dXJlcl9kZHIzKCRieXRlcy0+WzExN10sICRieXRl cy0+WzExOF0pKTsKCglpZiAoc3BkX3dyaXR0ZW4oQHskYnl0ZXN9WzE0OC4uMTQ5XSkpIHsKCQlw cmludGwoIkRSQU0gTWFudWZhY3R1cmVyIiwKCQkgICAgICAgbWFudWZhY3R1cmVyX2RkcjMoJGJ5 dGVzLT5bMTQ4XSwgJGJ5dGVzLT5bMTQ5XSkpOwoJfQoKCXByaW50bF9tZmdfbG9jYXRpb25fY29k ZSgkYnl0ZXMtPlsxMTldKTsKCglpZiAoc3BkX3dyaXR0ZW4oQHskYnl0ZXN9WzEyMC4uMTIxXSkp IHsKCQlwcmludGwoIk1hbnVmYWN0dXJpbmcgRGF0ZSIsCgkJICAgICAgIG1hbnVmYWN0dXJlX2Rh dGUoJGJ5dGVzLT5bMTIwXSwgJGJ5dGVzLT5bMTIxXSkpOwoJfQoKCXByaW50bF9tZmdfYXNzZW1i bHlfc2VyaWFsKEB7JGJ5dGVzfVsxMjIuLjEyNV0pOwoKCXByaW50bCgiUGFydCBOdW1iZXIiLCBw YXJ0X251bWJlcihAeyRieXRlc31bMTI4Li4xNDVdKSk7CgoJaWYgKHNwZF93cml0dGVuKEB7JGJ5 dGVzfVsxNDYuLjE0N10pKSB7CgkJcHJpbnRsKCJSZXZpc2lvbiBDb2RlIiwKCQkgICAgICAgc3By aW50ZigiMHglMDJYJTAyWCIsICRieXRlcy0+WzE0Nl0sICRieXRlcy0+WzE0N10pKTsKCX0KfQoK IyBQYXJhbWV0ZXI6IEVFUFJPTSBieXRlcyAwLTEyNyAodXNpbmcgNjQtOTgpCnN1YiBkZWNvZGVf bWFudWZhY3R1cmluZ19pbmZvcm1hdGlvbigkKQp7CglteSAkYnl0ZXMgPSBzaGlmdDsKCW15ICgk dGVtcCwgJGV4dHJhKTsKCglwcmludHMoIk1hbnVmYWN0dXJpbmcgSW5mb3JtYXRpb24iKTsKCgkj ICRleHRyYSBpcyBhIHJlZmVyZW5jZSB0byBhbiBhcnJheSBjb250YWluaW5nIHVwIHRvCgkjIDcg ZXh0cmEgYnl0ZXMgZnJvbSB0aGUgTWFudWZhY3R1cmVyIGZpZWxkLiBTb21ldGltZXMKCSMgdGhl c2UgYnl0ZXMgYXJlIGZpbGxlZCB3aXRoIGludGVyZXN0aW5nIGRhdGEuCgkoJHRlbXAsICRleHRy YSkgPSBtYW51ZmFjdHVyZXIoQHskYnl0ZXN9WzY0Li43MV0pOwoJcHJpbnRsKCJNYW51ZmFjdHVy ZXIiLCAkdGVtcCk7CgkkdGVtcCA9IG1hbnVmYWN0dXJlcl9kYXRhKEB7JGV4dHJhfSk7Cglwcmlu dGwoIkN1c3RvbSBNYW51ZmFjdHVyZXIgRGF0YSIsICR0ZW1wKSBpZiBkZWZpbmVkICR0ZW1wOwoK CXByaW50bF9tZmdfbG9jYXRpb25fY29kZSgkYnl0ZXMtPls3Ml0pOwoKCXByaW50bCgiUGFydCBO dW1iZXIiLCBwYXJ0X251bWJlcihAeyRieXRlc31bNzMuLjkwXSkpOwoKCWlmIChzcGRfd3JpdHRl bihAeyRieXRlc31bOTEuLjkyXSkpIHsKCQlwcmludGwoIlJldmlzaW9uIENvZGUiLAoJCSAgICAg ICBzcHJpbnRmKCIweCUwMlglMDJYIiwgQHskYnl0ZXN9WzkxLi45Ml0pKTsKCX0KCglpZiAoc3Bk X3dyaXR0ZW4oQHskYnl0ZXN9WzkzLi45NF0pKSB7CgkJcHJpbnRsKCJNYW51ZmFjdHVyaW5nIERh dGUiLAoJCSAgICAgICBtYW51ZmFjdHVyZV9kYXRlKCRieXRlcy0+WzkzXSwgJGJ5dGVzLT5bOTRd KSk7Cgl9CgoJcHJpbnRsX21mZ19hc3NlbWJseV9zZXJpYWwoQHskYnl0ZXN9Wzk1Li45OF0pOwp9 CgojIFBhcmFtZXRlcjogRUVQUk9NIGJ5dGVzIDAtMTI3ICh1c2luZyAxMjYtMTI3KQpzdWIgZGVj b2RlX2ludGVsX3NwZWNfZnJlcSgkKQp7CglteSAkYnl0ZXMgPSBzaGlmdDsKCW15ICR0ZW1wOwoK CXByaW50cygiSW50ZWwgU3BlY2lmaWNhdGlvbiIpOwoKCWlmICgkYnl0ZXMtPlsxMjZdID09IDB4 NjYpIHsgJHRlbXAgPSAiNjZNSHoiOyB9CgllbHNpZiAoJGJ5dGVzLT5bMTI2XSA9PSAxMDApIHsg JHRlbXAgPSAiMTAwTUh6IG9yIDEzM01IeiI7IH0KCWVsc2lmICgkYnl0ZXMtPlsxMjZdID09IDEz MykgeyAkdGVtcCA9ICIxMzNNSHoiOyB9CgllbHNlIHsgJHRlbXAgPSAiVW5kZWZpbmVkISI7IH0K CXByaW50bCgiRnJlcXVlbmN5IiwgJHRlbXApOwoKCSR0ZW1wID0gIiI7CglpZiAoJGJ5dGVzLT5b MTI3XSAmIDEpIHsgJHRlbXAgLj0gIkludGVsIENvbmN1cnJlbnQgQXV0by1wcmVjaGFyZ2VcbiI7 IH0KCWlmICgkYnl0ZXMtPlsxMjddICYgMikgeyAkdGVtcCAuPSAiQ0FTIExhdGVuY3kgPSAyXG4i OyB9CglpZiAoJGJ5dGVzLT5bMTI3XSAmIDQpIHsgJHRlbXAgLj0gIkNBUyBMYXRlbmN5ID0gM1xu IjsgfQoJaWYgKCRieXRlcy0+WzEyN10gJiA4KSB7ICR0ZW1wIC49ICJKdW5jdGlvbiBUZW1wIEEg KDEwMCBkZWdyZWVzIEMpXG4iOyB9CgllbHNlIHsgJHRlbXAgLj0gIkp1bmN0aW9uIFRlbXAgQiAo OTAgZGVncmVlcyBDKVxuIjsgfQoJaWYgKCRieXRlcy0+WzEyN10gJiAxNikgeyAkdGVtcCAuPSAi Q0xLIDMgQ29ubmVjdGVkXG4iOyB9CglpZiAoJGJ5dGVzLT5bMTI3XSAmIDMyKSB7ICR0ZW1wIC49 ICJDTEsgMiBDb25uZWN0ZWRcbiI7IH0KCWlmICgkYnl0ZXMtPlsxMjddICYgNjQpIHsgJHRlbXAg Lj0gIkNMSyAxIENvbm5lY3RlZFxuIjsgfQoJaWYgKCRieXRlcy0+WzEyN10gJiAxMjgpIHsgJHRl bXAgLj0gIkNMSyAwIENvbm5lY3RlZFxuIjsgfQoJaWYgKCgkYnl0ZXMtPlsxMjddICYgMTkyKSA9 PSAxOTIpIHsgJHRlbXAgLj0gIkRvdWJsZS1zaWRlZCBESU1NXG4iOyB9CgllbHNpZiAoKCRieXRl cy0+WzEyN10gJiAxOTIpICE9IDApIHsgJHRlbXAgLj0gIlNpbmdsZS1zaWRlZCBESU1NXG4iOyB9 CglwcmludGwoIkRldGFpbHMgZm9yIDEwME1IeiBTdXBwb3J0IiwgJHRlbXApOwp9CgojIFJlYWQg dmFyaW91cyBoZXggZHVtcCBzdHlsZSBmb3JtYXRzOiBoZXhkdW1wLCBoZXhkdW1wIC1DLCBpMmNk dW1wLCBlZXByb2cKIyBub3RlIHRoYXQgbm9ybWFsICdoZXhkdW1wJyBmb3JtYXQgb24gYSBsaXR0 bGUtZW5kaWFuIHN5c3RlbSBieXRlLXN3YXBzCiMgd29yZHMsIHVzaW5nIGhleGR1bXAgLUMgaXMg YmV0dGVyLgpzdWIgcmVhZF9oZXhkdW1wKCQpCnsKCW15ICRhZGRyID0gMDsKCW15ICRyZXBzdGFy dCA9IDA7CglteSBAYnl0ZXM7CglteSAkaGVhZGVyID0gMTsKCW15ICR3b3JkID0gMDsKCgkjIExv b2sgaW4gdGhlIGNhY2hlIGZpcnN0CglyZXR1cm4gQHskaGV4ZHVtcF9jYWNoZXskX1swXX19IGlm IGV4aXN0cyAkaGV4ZHVtcF9jYWNoZXskX1swXX07CgoJb3BlbiBGLCAnPCcsICRfWzBdIG9yIGRp ZSAiVW5hYmxlIHRvIG9wZW46ICRfWzBdIjsKCXdoaWxlICg8Rj4pIHsKCQljaG9tcDsKCQlpZiAo L15cKiQvKSB7CgkJCSRyZXBzdGFydCA9ICRhZGRyOwoJCQluZXh0OwoJCX0KCQkvXig/OjAwMDAg KT8oW2EtZlxkXXsyLDh9KTo/XHMrKCg6P1thLWZcZF17NH1ccyopezh9fCg6P1thLWZcZF17Mn1c cyopezE2fSkvaSB8fAoJCS9eKD86MDAwMCApPyhbYS1mXGRdezIsOH0pOj9ccyokL2k7CgkJbmV4 dCBpZiAoIWRlZmluZWQgJDEgJiYgJGhlYWRlcik7CQkjIHNraXAgbGVhZGluZyB1bnBhcnNlZCBs aW5lcwoKCQlkZWZpbmVkICQxIG9yIGRpZSAiVW5hYmxlIHRvIHBhcnNlIGlucHV0IjsKCQkkaGVh ZGVyID0gMDsKCgkJJGFkZHIgPSBoZXggJDE7CgkJaWYgKCRyZXBzdGFydCkgewoJCQlAYnl0ZXNb JHJlcHN0YXJ0IC4uICgkYWRkci0xKV0gPQoJCQkJKEBieXRlc1soJHJlcHN0YXJ0LTE2KS4uKCRy ZXBzdGFydC0xKV0pIHggKCgkYWRkci0kcmVwc3RhcnQpLzE2KTsKCQkJJHJlcHN0YXJ0ID0gMDsK CQl9CgkJbGFzdCB1bmxlc3MgZGVmaW5lZCAkMjsKCQlmb3JlYWNoIChzcGxpdCgvXHMrLywgJDIp KSB7CgkJCWlmICgvXiguLikoLi4pJC8pIHsKCQkJICAgICAgICAkd29yZCB8PSAxOwoJCQkJaWYg KCR1c2VfaGV4ZHVtcCBlcSBMSVRUTEVFTkRJQU4pIHsKCQkJCQkkYnl0ZXNbJGFkZHIrK10gPSBo ZXgoJDIpOwoJCQkJCSRieXRlc1skYWRkcisrXSA9IGhleCgkMSk7CgkJCQl9IGVsc2UgewoJCQkJ CSRieXRlc1skYWRkcisrXSA9IGhleCgkMSk7CgkJCQkJJGJ5dGVzWyRhZGRyKytdID0gaGV4KCQy KTsKCQkJCX0KCQkJfSBlbHNlIHsKCQkJCSRieXRlc1skYWRkcisrXSA9IGhleCgkXyk7CgkJCX0K CQl9Cgl9CgljbG9zZSBGOwoJJGhlYWRlciBhbmQgZGllICJVbmFibGUgdG8gcGFyc2UgYW55IGRh dGEgZnJvbSBoZXhkdW1wICckX1swXSciOwoJJHdvcmQgYW5kIHByaW50YygiVXNpbmcgJHVzZV9o ZXhkdW1wIDE2LWJpdCBoZXggZHVtcCIpOwoKCSMgQ2FjaGUgdGhlIGRhdGEgZm9yIGxhdGVyIHVz ZQoJJGhleGR1bXBfY2FjaGV7JF9bMF19ID0gXEBieXRlczsKCXJldHVybiBAYnl0ZXM7Cn0KCiMg UmV0dXJucyB0aGUgKHRvdGFsLCB1c2VkKSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIEVFUFJPTSwK IyBhc3N1bWluZyBpdCBpcyBhIG5vbi1SYW1idXMgU1BEIEVFUFJPTS4Kc3ViIHNwZF9zaXplcygk KQp7CglteSAkYnl0ZXMgPSBzaGlmdDsKCglpZiAoJGJ5dGVzLT5bMl0gPj0gOSkgewoJCSMgRm9y IEZCLURJTU0gYW5kIG5ld2VyLCBkZWNvZGUgbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4KCQlteSAk c3BkX2xlbiA9ICgkYnl0ZXMtPlswXSA+PiA0KSAmIDc7CgkJbXkgJHNpemUgPSA2NCA8PCAoJGJ5 dGVzLT5bMF0gJiAxNSk7CgkJaWYgKCRzcGRfbGVuID09IDApIHsKCQkJcmV0dXJuICgkc2l6ZSwg MTI4KTsKCQl9IGVsc2lmICgkc3BkX2xlbiA9PSAxKSB7CgkJCXJldHVybiAoJHNpemUsIDE3Nik7 CgkJfSBlbHNpZiAoJHNwZF9sZW4gPT0gMikgewoJCQlyZXR1cm4gKCRzaXplLCAyNTYpOwoJCX0g ZWxzZSB7CgkJCXJldHVybiAoNjQsIDY0KTsKCQl9Cgl9IGVsc2UgewoJCW15ICRzaXplOwoJCWlm ICgkYnl0ZXMtPlsxXSA8PSAxNCkgewoJCQkkc2l6ZSA9IDEgPDwgJGJ5dGVzLT5bMV07CgkJfSBl bHNpZiAoJGJ5dGVzLT5bMV0gPT0gMCkgewoJCQkkc2l6ZSA9ICJSRlUiOwoJCX0gZWxzZSB7ICRz aXplID0gIkVSUk9SISIgfQoKCQlyZXR1cm4gKCRzaXplLCAoJGJ5dGVzLT5bMF0gPCA2NCkgPyA2 NCA6ICRieXRlcy0+WzBdKTsKCX0KfQoKIyBSZWFkIGJ5dGVzIGZyb20gU1BELUVFUFJPTQojIE5v dGU6IG9mZnNldCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMTYhCnN1YiByZWFkc3BkKCQkJCkKewoJ bXkgKCRvZmZzZXQsICRzaXplLCAkZGltbV9pKSA9IEBfOwoJbXkgQGJ5dGVzOwoJaWYgKCR1c2Vf aGV4ZHVtcCkgewoJCUBieXRlcyA9IHJlYWRfaGV4ZHVtcCgkZGltbV9pKTsKCQlyZXR1cm4gQGJ5 dGVzWyRvZmZzZXQuLigkb2Zmc2V0ICsgJHNpemUgLSAxKV07Cgl9IGVsc2lmICgkdXNlX3N5c2Zz KSB7CgkJIyBLZXJuZWwgMi42IHdpdGggc3lzZnMKCQlzeXNvcGVuKEhBTkRMRSwgIiRkaW1tX2kv ZWVwcm9tIiwgT19SRE9OTFkpCgkJCW9yIGRpZSAiQ2Fubm90IG9wZW4gJGRpbW1faS9lZXByb20i OwoJCWJpbm1vZGUgSEFORExFOwoJCXN5c3NlZWsoSEFORExFLCAkb2Zmc2V0LCBTRUVLX1NFVCk7 CgkJc3lzcmVhZChIQU5ETEUsIG15ICRlZXByb20sICRzaXplKTsKCQljbG9zZSBIQU5ETEU7CgkJ QGJ5dGVzID0gdW5wYWNrKCJDKiIsICRlZXByb20pOwoJfSBlbHNlIHsKCQkjIEtlcm5lbCAyLjQg d2l0aCBwcm9jZnMKCQlmb3IgbXkgJGkgKDAgLi4gKCRzaXplLTEpLzE2KSB7CgkJCW15ICRoZXhv ZmYgPSBzcHJpbnRmKCclMDJ4JywgJG9mZnNldCArICRpICogMTYpOwoJCQlwdXNoIEBieXRlcywg c3BsaXQoIiAiLCBgY2F0ICRkaW1tX2kvJGhleG9mZmApOwoJCX0KCX0KCXJldHVybiBAYnl0ZXM7 Cn0KCiMgQ2FsY3VsYXRlIGFuZCB2ZXJpZnkgY2hlY2tzdW0gb2YgZmlyc3QgNjMgYnl0ZXMKc3Vi IGNoZWNrc3VtKCQpCnsKCW15ICRieXRlcyA9IHNoaWZ0OwoJbXkgJGRpbW1fY2hlY2tzdW0gPSAw OwoJbG9jYWwgJF87CgoJJGRpbW1fY2hlY2tzdW0gKz0gJGJ5dGVzLT5bJF9dIGZvcmVhY2ggKDAg Li4gNjIpOwoJJGRpbW1fY2hlY2tzdW0gJj0gMHhmZjsKCglyZXR1cm4gKCJFRVBST00gQ2hlY2tz dW0gb2YgYnl0ZXMgMC02MiIsCgkJKCRieXRlcy0+WzYzXSA9PSAkZGltbV9jaGVja3N1bSkgPyAx IDogMCwKCQlzcHJpbnRmKCcweCUwMlgnLCAkYnl0ZXMtPls2M10pLAoJCXNwcmludGYoJzB4JTAy WCcsICRkaW1tX2NoZWNrc3VtKSk7Cn0KCiMgQ2FsY3VsYXRlIGFuZCB2ZXJpZnkgQ1JDCnN1YiBj aGVja19jcmMoJCkKewoJbXkgJGJ5dGVzID0gc2hpZnQ7CglteSAkY3JjID0gMDsKCW15ICRjcmNf Y292ZXIgPSAkYnl0ZXMtPlswXSAmIDB4ODAgPyAxMTYgOiAxMjU7CglteSAkY3JjX3B0ciA9IDA7 CglteSAkY3JjX2JpdDsKCgl3aGlsZSAoJGNyY19wdHIgPD0gJGNyY19jb3ZlcikgewoJCSRjcmMg PSAkY3JjIF4gKCRieXRlcy0+WyRjcmNfcHRyXSA8PCA4KTsKCQlmb3IgKCRjcmNfYml0ID0gMDsg JGNyY19iaXQgPCA4OyAkY3JjX2JpdCsrKSB7CgkJCWlmICgkY3JjICYgMHg4MDAwKSB7CgkJCQkk Y3JjID0gKCRjcmMgPDwgMSkgXiAweDEwMjE7CgkJCX0gZWxzZSB7CgkJCQkkY3JjID0gJGNyYyA8 PCAxCgkJCX0KCQl9CgkJJGNyY19wdHIrKzsKCX0KCSRjcmMgJj0gMHhmZmZmOwoKCW15ICRkaW1t X2NyYyA9ICgkYnl0ZXMtPlsxMjddIDw8IDgpIHwgJGJ5dGVzLT5bMTI2XTsKCXJldHVybiAoIkVF UFJPTSBDUkMgb2YgYnl0ZXMgMC0kY3JjX2NvdmVyIiwKCQkoJGRpbW1fY3JjID09ICRjcmMpID8g MSA6IDAsCgkJc3ByaW50ZigiMHglMDRYIiwgJGRpbW1fY3JjKSwKCQlzcHJpbnRmKCIweCUwNFgi LCAkY3JjKSk7Cn0KCiMgUGFyc2UgY29tbWFuZC1saW5lCmZvcmVhY2ggKEBBUkdWKSB7CglpZiAo JF8gZXEgJy1oJyB8fCAkXyBlcSAnLS1oZWxwJykgewoJCXByaW50ICJVc2FnZTogJDAgWy1jXSBb LWYgWy1iXV0gWy14fC1YIGZpbGUgW2ZpbGVzLi5dXVxuIiwKCQkJIiAgICAgICAkMCAtaFxuXG4i LAoJCQkiICAtZiwgLS1mb3JtYXQgICAgICAgICAgICBQcmludCBuaWNlIGh0bWwgb3V0cHV0XG4i LAoJCQkiICAtYiwgLS1ib2R5b25seSAgICAgICAgICBEb24ndCBwcmludCBodG1sIGhlYWRlclxu IiwKCQkJIiAgICAgICAgICAgICAgICAgICAgICAgICAgKHVzZWZ1bCBmb3IgcG9zdHByb2Nlc3Np bmcgdGhlIG91dHB1dClcbiIsCgkJCSIgICAgICAtLXNpZGUtYnktc2lkZSAgICAgIERpc3BsYXkg YWxsIERJTU1zIHNpZGUtYnktc2lkZSBpZiBwb3NzaWJsZVxuIiwKCQkJIiAgICAgIC0tbWVyZ2Ut Y2VsbHMgICAgICAgTWVyZ2UgbmVpZ2hib3VyIGNlbGxzIHdpdGggaWRlbnRpY2FsIHZhbHVlc1xu IiwKCQkJIiAgICAgICAgICAgICAgICAgICAgICAgICAgKHNpZGUtYnktc2lkZSBvdXRwdXQgb25s eSlcbiIsCgkJCSIgIC1jLCAtLWNoZWNrc3VtICAgICAgICAgIERlY29kZSBjb21wbGV0ZWx5IGV2 ZW4gaWYgY2hlY2tzdW0gZmFpbHNcbiIsCgkJCSIgIC14LCAgICAgICAgICAgICAgICAgICAgIFJl YWQgZGF0YSBmcm9tIGhleGR1bXAgZmlsZXNcbiIsCgkJCSIgIC1YLCAgICAgICAgICAgICAgICAg ICAgIFNhbWUgYXMgLXggZXhjZXB0IHRyZWF0IG11bHRpYnl0ZSBoZXhcbiIsCgkJCSIgICAgICAg ICAgICAgICAgICAgICAgICAgIGRhdGEgYXMgbGl0dGxlIGVuZGlhblxuIiwKCQkJIiAgLWgsIC0t aGVscCAgICAgICAgICAgICAgRGlzcGxheSB0aGlzIHVzYWdlIHN1bW1hcnlcbiI7CgkJcHJpbnQg PDwiRU9GIjsKCkhleGR1bXBzIGNhbiBiZSB0aGUgb3V0cHV0IGZyb20gaGV4ZHVtcCwgaGV4ZHVt cCAtQywgaTJjZHVtcCwgZWVwcm9nIGFuZApsaWtlbHkgbWFueSBvdGhlciBwcm9nYW1zIHByb2R1 Y2luZyBoZXggZHVtcHMgb2Ygb25lIGtpbmQgb3IgYW5vdGhlci4gIE5vdGUKdGhhdCB0aGUgZGVm YXVsdCBvdXRwdXQgb2YgImhleGR1bXAiIHdpbGwgYmUgYnl0ZS1zd2FwcGVkIG9uIGxpdHRsZS1l bmRpYW4Kc3lzdGVtcyBhbmQgeW91IG11c3QgdXNlIC1YIGluc3RlYWQgb2YgLXgsIG90aGVyd2lz ZSB0aGUgZHVtcCB3aWxsIG5vdCBiZQpwYXJzZWQgY29ycmVjdGx5LiAgSXQgaXMgYmV0dGVyIHRv IHVzZSAiaGV4ZHVtcCAtQyIsIHdoaWNoIGlzIG5vdCBhbWJpZ3VvdXMuCkVPRgoJCWV4aXQ7Cgl9 CgoJaWYgKCRfIGVxICctZicgfHwgJF8gZXEgJy0tZm9ybWF0JykgewoJCSRvcHRfaHRtbCA9IDE7 CgkJbmV4dDsKCX0KCWlmICgkXyBlcSAnLWInIHx8ICRfIGVxICctLWJvZHlvbmx5JykgewoJCSRv cHRfYm9keW9ubHkgPSAxOwoJCW5leHQ7Cgl9CglpZiAoJF8gZXEgJy0tc2lkZS1ieS1zaWRlJykg ewoJCSRvcHRfc2lkZV9ieV9zaWRlID0gMTsKCQluZXh0OwoJfQoJaWYgKCRfIGVxICctLW1lcmdl LWNlbGxzJykgewoJCSRvcHRfbWVyZ2UgPSAxOwoJCW5leHQ7Cgl9CglpZiAoJF8gZXEgJy1jJyB8 fCAkXyBlcSAnLS1jaGVja3N1bScpIHsKCQkkb3B0X2lnbmNoZWNrID0gMTsKCQluZXh0OwoJfQoJ aWYgKCRfIGVxICcteCcpIHsKCQkkdXNlX2hleGR1bXAgPSBCSUdFTkRJQU47CgkJbmV4dDsKCX0K CWlmICgkXyBlcSAnLVgnKSB7CgkJJHVzZV9oZXhkdW1wID0gTElUVExFRU5ESUFOOwoJCW5leHQ7 Cgl9CgoJaWYgKG0vXi0vKSB7CgkJcHJpbnQgU1RERVJSICJVbnJlY29nbml6ZWQgb3B0aW9uICRf XG4iOwoJCWV4aXQ7Cgl9CgoJcHVzaCBAZGltbSwgeyBlZXByb20gPT4gJF8sIGZpbGUgPT4gJF8g fSBpZiAkdXNlX2hleGR1bXA7Cn0KCmlmICgkb3B0X2h0bWwgJiYgISRvcHRfYm9keW9ubHkpIHsK CXByaW50ICI8IURPQ1RZUEUgaHRtbCBQVUJMSUMgXCItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5h bC8vRU5cIj5cbiIsCgkgICAgICAiPGh0bWw+PGhlYWQ+XG4iLAoJCSAgIlx0PG1ldGEgSFRUUC1F UVVJVj1cIkNvbnRlbnQtVHlwZVwiIENPTlRFTlQ9XCJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4 NTktMVwiPlxuIiwKCQkgICJcdDx0aXRsZT5QQyBESU1NIFNlcmlhbCBQcmVzZW5jZSBEZXRlY3Qg VGVzdGVyL0RlY29kZXIgT3V0cHV0PC90aXRsZT5cbiIsCgkJICAiPC9oZWFkPjxib2R5PlxuIjsK fQoKcHJpbnRjKCJkZWNvZGUtZGltbXMgdmVyc2lvbiAkcmV2aXNpb24iKTsKcHJpbnRoKCdNZW1v cnkgU2VyaWFsIFByZXNlbmNlIERldGVjdCBEZWNvZGVyJywKJ0J5IFBoaWxpcCBFZGVsYnJvY2ss IENocmlzdGlhbiBadWNrc2Nod2VyZHQsIEJ1cmthcnQgTGluZ25lciwKSmVhbiBEZWx2YXJlLCBU cmVudCBQaWVwaG8gYW5kIG90aGVycycpOwoKCnN1YiBnZXRfZGltbV9saXN0CnsKCW15ICgkZGly LCAkZmlsZSwgQGZpbGVzKTsKCglpZiAoJHVzZV9zeXNmcykgewoJCSRkaXIgPSAnL3N5cy9idXMv aTJjL2RyaXZlcnMvZWVwcm9tJzsKCX0gZWxzZSB7CgkJJGRpciA9ICcvcHJvYy9zeXMvZGV2L3Nl bnNvcnMnOwoJfQoKCWlmIChvcGVuZGlyKGxvY2FsICpESVIsICRkaXIpKSB7CgkJd2hpbGUgKGRl ZmluZWQoJGZpbGUgPSByZWFkZGlyKERJUikpKSB7CgkJCW5leHQgaWYgJHVzZV9zeXNmcyAmJiAk ZmlsZSAhfiAvXlxkKy1bXGRhLWZdKyQvaTsKCQkJbmV4dCBpZiAhJHVzZV9zeXNmcyAmJiAkZmls ZSAhfiAvXmVlcHJvbS0vOwoJCQlwdXNoIEBmaWxlcywgeyBlZXByb20gPT4gIiRmaWxlIiwKCQkJ CSAgICAgICBmaWxlID0+ICIkZGlyLyRmaWxlIiB9OwoJCX0KCQljbG9zZShESVIpOwoJCXJldHVy biBzb3J0IHsgJGEtPntmaWxlfSBjbXAgJGItPntmaWxlfSB9IEBmaWxlczsKCX0gZWxzaWYgKCEg LWQgJy9zeXMvbW9kdWxlL2VlcHJvbScpIHsKCQlwcmludCAiTm8gRUVQUk9NIGZvdW5kLCBhcmUg eW91IHN1cmUgdGhlIGVlcHJvbSBtb2R1bGUgaXMgbG9hZGVkP1xuIjsKCQlleGl0OwoJfQp9Cgoj IEBkaW1tIGlzIGEgbGlzdCBvZiBoYXNoZXMuIFRoZXJlJ3Mgb25lIGhhc2ggZm9yIGVhY2ggRUVQ Uk9NIHdlIGZvdW5kLgojIEVhY2ggaGFzaCBoYXMgdGhlIGZvbGxvd2luZyBrZXlzOgojICAqIGVl cHJvbTogTmFtZSBvZiB0aGUgZWVwcm9tIGRhdGEgZmlsZQojICAqIGZpbGU6IEZ1bGwgcGF0aCB0 byB0aGUgZWVwcm9tIGRhdGEgZmlsZQojICAqIGJ5dGVzOiBUaGUgRUVQUk9NIGRhdGEgKGFycmF5 KQojICAqIGlzX3JhbWJ1czogV2hldGhlciB0aGlzIGlzIGEgUkFNQlVTIERJTU0gb3Igbm90IChi b29sZWFuKQojICAqIGNoa19sYWJlbDogVGhlIGxhYmVsIHRvIGRpc3BsYXkgZm9yIHRoZSBjaGVj a3N1bSBvciBDUkMKIyAgKiBjaGtfdmFsaWQ6IFdoZXRoZXIgdGhlIGNoZWNrc3VtIG9yIENSQyBp cyB2YWxpZCBvciBub3QgKGJvb2xlYW4pCiMgICogY2hrX3NwZDogVGhlIGNoZWNrc3VtIG9yIENS QyB2YWx1ZSBmb3VuZCBpbiB0aGUgRUVQUk9NCiMgICogY2hrX2NhbGM6IFRoZSBjaGVja3N1bSBv ciBDUkMgY29tcHV0ZWQgZnJvbSB0aGUgRUVQUk9NIGRhdGEKIyBLZXlzIGFyZSBhZGRlZCBvdmVy IHRpbWUuCkBkaW1tID0gZ2V0X2RpbW1fbGlzdCgpIHVubGVzcyAkdXNlX2hleGR1bXA7Cgpmb3Ig bXkgJGkgKDAgLi4gJCNkaW1tKSB7CglteSBAYnl0ZXMgPSByZWFkc3BkKDAsIDEyOCwgJGRpbW1b JGldLT57ZmlsZX0pOwoJJGRpbW1bJGldLT57Ynl0ZXN9ID0gXEBieXRlczsKCSRkaW1tWyRpXS0+ e2lzX3JhbWJ1c30gPSAkYnl0ZXNbMF0gPCA0OwkJIyBTaW1wbGUgaGV1cmlzdGljCglpZiAoJGRp bW1bJGldLT57aXNfcmFtYnVzfSB8fCAkYnl0ZXNbMl0gPCA5KSB7CgkJKCRkaW1tWyRpXS0+e2No a19sYWJlbH0sICRkaW1tWyRpXS0+e2Noa192YWxpZH0sCgkJICRkaW1tWyRpXS0+e2Noa19zcGR9 LCAkZGltbVskaV0tPntjaGtfY2FsY30pID0KCQkJY2hlY2tzdW0oXEBieXRlcyk7Cgl9IGVsc2Ug ewoJCSgkZGltbVskaV0tPntjaGtfbGFiZWx9LCAkZGltbVskaV0tPntjaGtfdmFsaWR9LAoJCSAk ZGltbVskaV0tPntjaGtfc3BkfSwgJGRpbW1bJGldLT57Y2hrX2NhbGN9KSA9CgkJCWNoZWNrX2Ny YyhcQGJ5dGVzKTsKCX0KfQoKIyBDaGVja3N1bSBvciBDUkMgdmFsaWRhdGlvbgppZiAoISRvcHRf aWduY2hlY2spIHsKCWZvciAobXkgJGkgPSAwOyAkaSA8IEBkaW1tOyApIHsKCQlpZiAoJGRpbW1b JGldLT57Y2hrX3ZhbGlkfSkgewoJCQkkaSsrOwoJCX0gZWxzZSB7CgkJCXNwbGljZShAZGltbSwg JGksIDEpOwoJCX0KCX0KfQoKIyBQcm9jZXNzIHRoZSB2YWxpZCBlbnRyaWVzCmZvciAkY3VycmVu dCAoMCAuLiAkI2RpbW0pIHsKCW15IEBieXRlcyA9IEB7JGRpbW1bJGN1cnJlbnRdLT57Ynl0ZXN9 fTsKCglpZiAoJG9wdF9zaWRlX2J5X3NpZGUpIHsKCQlwcmludGwoIkRlY29kaW5nIEVFUFJPTSIs ICRkaW1tWyRjdXJyZW50XS0+e2VlcHJvbX0pOwoJfQoKCWlmICghJHVzZV9oZXhkdW1wKSB7CgkJ aWYgKCRkaW1tWyRjdXJyZW50XS0+e2ZpbGV9ID1+IC8tKFtcZGEtZl0rKSQvaSkgewoJCQlteSAk ZGltbV9udW0gPSBoZXgoJDEpIC0gMHg1MCArIDE7CgkJCWlmICgkZGltbV9udW0gPj0gMSAmJiAk ZGltbV9udW0gPD0gOCkgewoJCQkJcHJpbnRsKCJHdWVzc2luZyBESU1NIGlzIGluIiwgImJhbmsg JGRpbW1fbnVtIik7CgkJCX0KCQl9Cgl9CgojIERlY29kZSBmaXJzdCAzIGJ5dGVzICgwLTIpCglw cmludHMoIlNQRCBFRVBST00gSW5mb3JtYXRpb24iKTsKCglwcmludGwoJGRpbW1bJGN1cnJlbnRd LT57Y2hrX2xhYmVsfSwgKCRkaW1tWyRjdXJyZW50XS0+e2Noa192YWxpZH0gPwoJCXNwcmludGYo Ik9LICglcykiLCAkZGltbVskY3VycmVudF0tPntjaGtfY2FsY30pIDoKCQlzcHJpbnRmKCJCYWRc bihmb3VuZCAlcywgY2FsY3VsYXRlZCAlcykiLAoJCQkkZGltbVskY3VycmVudF0tPntjaGtfc3Bk fSwgJGRpbW1bJGN1cnJlbnRdLT57Y2hrX2NhbGN9KSkpOwoKCW15ICR0ZW1wOwoJaWYgKCRkaW1t WyRjdXJyZW50XS0+e2lzX3JhbWJ1c30pIHsKCQlpZiAoJGJ5dGVzWzBdID09IDEpIHsgJHRlbXAg PSAiMC43IjsgfQoJCWVsc2lmICgkYnl0ZXNbMF0gPT0gMikgeyAkdGVtcCA9ICIxLjAiOyB9CgkJ ZWxzaWYgKCRieXRlc1swXSA9PSAwKSB7ICR0ZW1wID0gIkludmFsaWQiOyB9CgkJZWxzZSB7ICR0 ZW1wID0gIlJlc2VydmVkIjsgfQoJCXByaW50bCgiU1BEIFJldmlzaW9uIiwgJHRlbXApOwoJfSBl bHNlIHsKCQlteSAoJHNwZF9zaXplLCAkc3BkX3VzZWQpID0gc3BkX3NpemVzKFxAYnl0ZXMpOwoJ CXByaW50bCgiIyBvZiBieXRlcyB3cml0dGVuIHRvIFNEUkFNIEVFUFJPTSIsICRzcGRfdXNlZCk7 CgkJcHJpbnRsKCJUb3RhbCBudW1iZXIgb2YgYnl0ZXMgaW4gRUVQUk9NIiwgJHNwZF9zaXplKTsK CgkJIyBJZiB0aGVyZSdzIG1vcmUgZGF0YSB0aGFuIHdoYXQgd2UndmUgcmVhZCwgbGV0J3MKCQkj IHJlYWQgaXQgbm93LiAgRERSMyB3aWxsIG5lZWQgdGhpcyBkYXRhLgoJCWlmICgkc3BkX3VzZWQg PiBAYnl0ZXMpIHsKCQkJcHVzaCAoQGJ5dGVzLAoJCQkgICAgICByZWFkc3BkKEBieXRlcywgJHNw ZF91c2VkIC0gQGJ5dGVzLAoJCQkJICAgICAgJGRpbW1bJGN1cnJlbnRdLT57ZmlsZX0pKTsKCQl9 Cgl9CgoJbXkgJHR5cGUgPSBzcHJpbnRmKCJVbmtub3duICgweCUwMngpIiwgJGJ5dGVzWzJdKTsK CWlmICgkZGltbVskY3VycmVudF0tPntpc19yYW1idXN9KSB7CgkJaWYgKCRieXRlc1syXSA9PSAx KSB7ICR0eXBlID0gIkRpcmVjdCBSYW1idXMiOyB9CgkJZWxzaWYgKCRieXRlc1syXSA9PSAxNykg eyAkdHlwZSA9ICJSYW1idXMiOyB9Cgl9IGVsc2UgewoJCW15IEB0eXBlX2xpc3QgPSAoCgkJCSJS ZXNlcnZlZCIsICJGUE0gRFJBTSIsCQkjIDAsIDEKCQkJIkVETyIsICJQaXBlbGluZWQgTmliYmxl IiwJIyAyLCAzCgkJCSJTRFIgU0RSQU0iLCAiTXVsdGlwbGV4ZWQgUk9NIiwJIyA0LCA1CgkJCSJE RFIgU0dSQU0iLCAiRERSIFNEUkFNIiwJIyA2LCA3CgkJCSJERFIyIFNEUkFNIiwgIkZCLURJTU0i LAkjIDgsIDkKCQkJIkZCLURJTU0gUHJvYmUiLCAiRERSMyBTRFJBTSIsCSMgMTAsIDExCgkJKTsK CQlpZiAoJGJ5dGVzWzJdIDwgQHR5cGVfbGlzdCkgewoJCQkkdHlwZSA9ICR0eXBlX2xpc3RbJGJ5 dGVzWzJdXTsKCQl9Cgl9CglwcmludGwoIkZ1bmRhbWVudGFsIE1lbW9yeSB0eXBlIiwgJHR5cGUp OwoKIyBEZWNvZGUgbmV4dCA2MSBieXRlcyAoMy02MywgZGVwZW5kIG9uIG1lbW9yeSB0eXBlKQoJ JGRlY29kZV9jYWxsYmFja3skdHlwZX0tPihcQGJ5dGVzKQoJCWlmIGV4aXN0cyAkZGVjb2RlX2Nh bGxiYWNreyR0eXBlfTsKCglpZiAoJHR5cGUgZXEgIkREUjMgU0RSQU0iKSB7CgkJIyBEZWNvZGUg RERSMy1zcGVjaWZpYyBtYW51ZmFjdHVyaW5nIGRhdGEgaW4gYnl0ZXMKCQkjIDExNy0xNDkKCQlk ZWNvZGVfZGRyM19tZmdfZGF0YShcQGJ5dGVzKQoJfSBlbHNlIHsKCQkjIERlY29kZSBuZXh0IDM1 IGJ5dGVzICg2NC05OCwgY29tbW9uIHRvIG1vc3QKCQkjIG1lbW9yeSB0eXBlcykKCQlkZWNvZGVf bWFudWZhY3R1cmluZ19pbmZvcm1hdGlvbihcQGJ5dGVzKTsKCX0KCiMgTmV4dCAyNyBieXRlcyAo OTktMTI1KSBhcmUgbWFudWZhY3R1cmVyIHNwZWNpZmljLCBjYW4ndCBkZWNvZGUKCiMgTGFzdCAy IGJ5dGVzICgxMjYtMTI3KSBhcmUgcmVzZXJ2ZWQsIEludGVsIHVzZWQgdGhlbSBhcyBhbiBleHRl bnNpb24KCWlmICgkdHlwZSBlcSAiU0RSIFNEUkFNIikgewoJCWRlY29kZV9pbnRlbF9zcGVjX2Zy ZXEoXEBieXRlcyk7Cgl9Cn0KCiMgU2lkZS1ieS1zaWRlIG91dHB1dCBmb3JtYXQgaXMgb25seSBw b3NzaWJsZSBpZiBhbGwgRElNTXMgaGF2ZSBhIHNpbWlsYXIKIyBvdXRwdXQgc3RydWN0dXJlCmlm ICgkb3B0X3NpZGVfYnlfc2lkZSkgewoJZm9yICRjdXJyZW50ICgxIC4uICQjZGltbSkgewoJCW15 IEByZWZfb3V0cHV0ID0gQHskZGltbVswXS0+e291dHB1dH19OwoJCW15IEB0ZXN0X291dHB1dCA9 IEB7JGRpbW1bJGN1cnJlbnRdLT57b3V0cHV0fX07CgkJbXkgJGxpbmU7CgoJCWlmIChzY2FsYXIg QHJlZl9vdXRwdXQgIT0gc2NhbGFyIEB0ZXN0X291dHB1dCkgewoJCQkkb3B0X3NpZGVfYnlfc2lk ZSA9IDA7CgkJCWxhc3Q7CgkJfQoKCQlmb3IgKCRsaW5lID0gMDsgJGxpbmUgPCBAcmVmX291dHB1 dDsgJGxpbmUrKykgewoJCQlteSAoJHJlZl9mdW5jLCAkcmVmX2xhYmVsLCBAcmVmX2R1bW15KSA9 IEB7JHJlZl9vdXRwdXRbJGxpbmVdfTsKCQkJbXkgKCR0ZXN0X2Z1bmMsICR0ZXN0X2xhYmVsLCBA dGVzdF9kdW1teSkgPSBAeyR0ZXN0X291dHB1dFskbGluZV19OwoKCQkJaWYgKCRyZWZfZnVuYyAh PSAkdGVzdF9mdW5jIHx8ICRyZWZfbGFiZWwgbmUgJHRlc3RfbGFiZWwpIHsKCQkJCSRvcHRfc2lk ZV9ieV9zaWRlID0gMDsKCQkJCWxhc3Q7CgkJCX0KCQl9Cgl9CgoJcHJpbnRjKCJTaWRlLWJ5LXNp ZGUgb3V0cHV0IG9ubHkgcG9zc2libGUgaWYgYWxsIERJTU1TIGFyZSBzaW1pbGFyXG4iKQoJCXVu bGVzcyAkb3B0X3NpZGVfYnlfc2lkZTsKfQoKIyBQcmludCB0aGUgZGVjb2RlZCBpbmZvcm1hdGlv biBmb3IgYWxsIERJTU1zCmZvciAkY3VycmVudCAoMCAuLiAkI2RpbW0pIHsKCWlmICghJG9wdF9z aWRlX2J5X3NpZGUpIHsKCQlwcmludCAiPGI+PHU+IiBpZiAkb3B0X2h0bWw7CgkJcHJpbnRsMigi XG5cbkRlY29kaW5nIEVFUFJPTSIsICRkaW1tWyRjdXJyZW50XS0+e2ZpbGV9KTsKCQlwcmludCAi PC91PjwvYj4iIGlmICRvcHRfaHRtbDsKCX0KCXByaW50ICI8dGFibGUgYm9yZGVyPTE+XG4iIGlm ICRvcHRfaHRtbDsKCglteSBAb3V0cHV0ID0gQHskZGltbVskY3VycmVudF0tPntvdXRwdXR9fTsK CWZvciAobXkgJGxpbmUgPSAwOyAkbGluZSA8IEBvdXRwdXQ7ICRsaW5lKyspIHsKCQlteSAoJGZ1 bmMsIEBwYXJhbSkgPSBAeyRvdXRwdXRbJGxpbmVdfTsKCgkJaWYgKCRvcHRfc2lkZV9ieV9zaWRl KSB7CgkJCWZvcmVhY2ggKCRjdXJyZW50KzEgLi4gJCNkaW1tKSB7CgkJCQlteSBAeG91dHB1dCA9 IEB7JGRpbW1bJF9dLT57b3V0cHV0fX07CgkJCQlpZiAoQHskeG91dHB1dFskbGluZV19ID09IDMp IHsKCQkJCQkjIExpbmUgd2l0aCBkYXRhLCBzdGFjayBhbGwgdmFsdWVzCgkJCQkJcHVzaCBAcGFy YW0sIEB7JHhvdXRwdXRbJGxpbmVdfVsyXTsKCQkJCX0gZWxzZSB7CgkJCQkJIyBTZXBhcmF0b3Is IG1ha2UgaXQgc3BhbgoJCQkJCXB1c2ggQHBhcmFtLCBzY2FsYXIgQGRpbW07CgkJCQl9CgkJCX0K CQl9CgoJCSRmdW5jLT4oQHBhcmFtKTsKCX0KCglwcmludCAiPC90YWJsZT5cbiIgaWYgJG9wdF9o dG1sOwoJbGFzdCBpZiAkb3B0X3NpZGVfYnlfc2lkZTsKfQpwcmludGwyKCJcblxuTnVtYmVyIG9m IFNEUkFNIERJTU1zIGRldGVjdGVkIGFuZCBkZWNvZGVkIiwgc2NhbGFyIEBkaW1tKTsKCnByaW50 ICI8L2JvZHk+PC9odG1sPlxuIiBpZiAoJG9wdF9odG1sICYmICEkb3B0X2JvZHlvbmx5KTsK --MP_/1oq0KZh4AfNuF7EosRjS/nu--