From mboxrd@z Thu Jan 1 00:00:00 1970 X-Msuck: nntp://news.gmane.org/gmane.linux.lib.musl.general/1658 Path: news.gmane.org!not-for-mail From: =?ISO-8859-2?Q?Daniel_Cegie=B3ka?= Newsgroups: gmane.linux.lib.musl.general Subject: [Vision for new platform] syslog, sed, cron Date: Wed, 22 Aug 2012 19:31:49 +0200 Message-ID: Reply-To: musl@lists.openwall.com NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary=e89a8f647bf57fde3504c7de1f23 X-Trace: ger.gmane.org 1345656748 8222 80.91.229.3 (22 Aug 2012 17:32:28 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Wed, 22 Aug 2012 17:32:28 +0000 (UTC) To: musl@lists.openwall.com Original-X-From: musl-return-1659-gllmg-musl=m.gmane.org@lists.openwall.com Wed Aug 22 19:32:28 2012 Return-path: Envelope-to: gllmg-musl@plane.gmane.org Original-Received: from mother.openwall.net ([195.42.179.200]) by plane.gmane.org with smtp (Exim 4.69) (envelope-from ) id 1T4En5-00050r-Dj for gllmg-musl@plane.gmane.org; Wed, 22 Aug 2012 19:32:27 +0200 Original-Received: (qmail 30406 invoked by uid 550); 22 Aug 2012 17:32:25 -0000 Mailing-List: contact musl-help@lists.openwall.com; run by ezmlm Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: Original-Received: (qmail 30392 invoked from network); 22 Aug 2012 17:32:24 -0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:from:date:message-id:subject:to:content-type; bh=s8kEHLADHATlB42WT1xoz3lhuxSX7liK0iWIynONdEQ=; b=QLI49gj9IWwFA+HP8yeYKsfw1cb8tAzW4WMc0KlDN3smlzJTBuqAtiA1Wr33bwX2NX fnYwrcl6Zlvog4k1H/A5bhZ3rgVoXQwEn6fCkANqdi0kpSCNMY/Lsv1T46W03X8hCmS1 gEJYKY/Y5d9yCRZ6W+MAot5CWbGIjtb05FwqhkVtA2J2OD1ZnZeW4MAytQib6d1rMui3 t7pXNXPq31vkBBMJK4Dk85Ve/UyuFoGY8Mlt6+EdAxB8sUVRoCjJ1JqXopCVUm0hG6kA i3nFiFL0VXzx3TsiVMTjsVOpCSZQcUOKzUt5OlIrKQHCbCSZiopBYr6cDRf83IfoybQ8 fvGQ== Xref: news.gmane.org gmane.linux.lib.musl.general:1658 Archived-At: --e89a8f647bf57fde3504c7de1f23 Content-Type: text/plain; charset=ISO-8859-1 Hi, Rich started with basic tools for unix (noXCUse): http://git.etalabs.net/cgi-bin/gitweb.cgi?p=noxcuse;a=summary ...and this is a good time to talk about other tools/daemons. syslog ---------- rsyslog, syslog-ng - seems to be quite a hard choice. syslog-ng needs glib etc. sysklogd - is an old and good, but today might be a little too outdated. socklog - recommended by suckless.org etc., http://smarden.org/socklog/ metalog - (http://metalog.sourceforge.net/). Require PCRE, but it is a very lightweight solution. The original release has ugly gnulib dep. I deleted the extraneous code (gnulib) and packed everything into one file (mlog.tar). The whole is adapted to musl. This stuff requires further work (Makefile +-DOPTIONS)... sed ----- sed can be a big problem. I noticed that some programs require gnu sed for proper installation (configure, Makefile). minised is very interesting and worth a recommendation. http://www.exactcode.de/site/open_source/minised/ Unfortunately, even with minised I can't build packages such as e2fsprogs, findutils or find etc. from my find's build.log: checking whether gcc and cc understand -c and -o together... yes checking for a BSD-compatible install... /usr/bin/install -c checking whether ln -s works... yes checking for a sed that does not truncate output... configure: error: no acceptable sed could be found in $PATH We can prepare a patches etc... but if autotools will push gnu sed this issue will return in the future as well as with other programs... btw. I also ported to musl/linux bsd sed (from OpenBSD), but it has worse compatibility with gnu sed than minised. cron ------ I recommend ncron. Works very well with musl. http://kain.us/nk/projects/ best regards, Daniel --e89a8f647bf57fde3504c7de1f23 Content-Type: application/x-tar; name="mlog.tar" Content-Disposition: attachment; filename="mlog.tar" Content-Transfer-Encoding: base64 X-Attachment-Id: f_h66hzs4d0 bWxvZy5jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMDA2NDQAMDAwMTc1 MAAwMDAxNzUwADAwMDAwMTU0NjI2ADEyMDEzMjQ2NTQwADAxMTQyMwAgMAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhciAgAGRhbmljZQAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAZGFuaWNlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAj ZGVmaW5lIEhBVkVfREFFTU9OIDEKI2RlZmluZSBIQVZFX1NZU19LTE9HX0ggMQojZGVmaW5lIEhB VkVfS0xPR0NUTCAxCiNkZWZpbmUgUEFDS0FHRSAibWV0YWxvZyIKI2RlZmluZSBWRVJTSU9OICIz IgojZGVmaW5lIFNZU0xPR19OQU1FUyAxCgojaWZkZWYgX19hdHRyaWJ1dGVfXwojdW5kZWYgX19h dHRyaWJ1dGVfXwojZW5kaWYKI2RlZmluZSBfX2F0dHJpYnV0ZV9fKGEpCgojaWZuZGVmIF9HTlVf U09VUkNFCiNkZWZpbmUgX0dOVV9TT1VSQ0UKI2VuZGlmCgojaW5jbHVkZSA8YWxsb2NhLmg+CiNp bmNsdWRlIDxhc3NlcnQuaD4KI2luY2x1ZGUgPGRpcmVudC5oPgojaW5jbHVkZSA8ZXJybm8uaD4K I2luY2x1ZGUgPGZjbnRsLmg+CiNpbmNsdWRlIDxnZXRvcHQuaD4KI2luY2x1ZGUgPGludHR5cGVz Lmg+CiNpbmNsdWRlIDxsaW1pdHMuaD4KI2luY2x1ZGUgPHBvbGwuaD4KI2luY2x1ZGUgPHNpZ25h bC5oPgojaW5jbHVkZSA8c3RkYXJnLmg+CiNpbmNsdWRlIDxzdGRib29sLmg+CiNpbmNsdWRlIDxz dGRkZWYuaD4KI2luY2x1ZGUgPHN0ZGludC5oPgojaW5jbHVkZSA8c3RkaW8uaD4KI2luY2x1ZGUg PHN0ZGxpYi5oPgojaW5jbHVkZSA8c3RyaW5nLmg+CiNpbmNsdWRlIDxzeXNsb2cuaD4KI2luY2x1 ZGUgPHRpbWUuaD4KI2luY2x1ZGUgPHVuaXN0ZC5oPgojaW5jbHVkZSA8c3lzL3NvY2tldC5oPgoj aW5jbHVkZSA8c3lzL3N0YXQuaD4KI2luY2x1ZGUgPHN5cy90aW1lLmg+CiNpbmNsdWRlIDxzeXMv dHlwZXMuaD4KI2luY2x1ZGUgPHN5cy91bi5oPgojaW5jbHVkZSA8c3lzL3dhaXQuaD4KI2luY2x1 ZGUgPHN5c2xvZy5oPgojaW5jbHVkZSA8Y3R5cGUuaD4KI2luY2x1ZGUgPHNpZ25hbC5oPgoKI2lm ZGVmIEhBVkVfU1lTX0tMT0dfSAojIGluY2x1ZGUgPHN5cy9rbG9nLmg+CiNlbmRpZgojaW5jbHVk ZSA8cGNyZS5oPgoKLyogSEVMUEVSUyAqLwojZGVmaW5lIEFSUkFZX1NJWkUoYXJyKSAoc2l6ZW9m KGFycikgLyBzaXplb2YoYXJyWzBdKSkKI2RlZmluZSB3YXJuKGZtdCwgYXJncy4uLikgXAogICAg ZnByaW50ZihzdGRlcnIsICIlczogIiBmbXQgIlxuIiwgIm1ldGFsb2ciICwgIyMgYXJncykKI2Rl ZmluZSB3YXJuZihmbXQsIGFyZ3MuLi4pIHdhcm4oIiVzKCk6JWk6ICIgZm10LCBfX2Z1bmNfXywg X19MSU5FX18gLCAjIyBhcmdzKQojZGVmaW5lIHdhcm5wKGZtdCwgYXJncy4uLikgd2FybihmbXQg IjogJXMiICwgIyMgYXJncyAsIHN0cmVycm9yKGVycm5vKSkKI2RlZmluZSBfZXJyKHdmdW5jLCBm bXQsIGFyZ3MuLi4pIFwKICAgIGRvIHsgXAogICAgICAgIHdmdW5jKCJlcnJvcjogIiBmbXQsICMj IGFyZ3MpOyBcCiAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOyBcCiAgICB9IHdoaWxlICgwKQoj ZGVmaW5lIGVycihmbXQsIGFyZ3MuLi4pIF9lcnIod2FybiwgZm10LCAjIyBhcmdzKQojZGVmaW5l IGVycmYoZm10LCBhcmdzLi4uKSBfZXJyKHdhcm5mLCBmbXQsICMjIGFyZ3MpCiNkZWZpbmUgZXJy cChmbXQsIGFyZ3MuLi4pIF9lcnIod2FybnAsIGZtdCAsICMjIGFyZ3MpCgpzdGF0aWMgcGNyZSAq d3BjcmVfY29tcGlsZShjb25zdCBjaGFyICpwYXR0ZXJuLCBpbnQgb3B0aW9ucykKewogICAgY29u c3QgY2hhciAqZXJycHRyOwogICAgaW50IGVycm9mZnNldDsKICAgIHBjcmUgKnJldCA9IHBjcmVf Y29tcGlsZShwYXR0ZXJuLCBvcHRpb25zLCAmZXJycHRyLCAmZXJyb2Zmc2V0LCBOVUxMKTsKICAg IGlmICghcmV0KQogICAgICAgIHdhcm4oIkludmFsaWQgcmVnZXggWyVzXSBhdCAlZDogJXMiLCBw YXR0ZXJuLCBlcnJvZmZzZXQsIGVycnB0cik7CiAgICByZXR1cm4gcmV0Owp9CgpzdGF0aWMgdm9p ZCAqd21hbGxvYyhzaXplX3Qgc2l6ZSkKewogICAgdm9pZCAqcmV0ID0gbWFsbG9jKHNpemUpOwog ICAgaWYgKCFyZXQpCiAgICAgICAgd2FybnAoIm1hbGxvYyglenUpIGZhaWxlZCIsIHNpemUpOwog ICAgcmV0dXJuIHJldDsKfQoKc3RhdGljIHZvaWQgKndyZWFsbG9jKHZvaWQgKnB0ciwgc2l6ZV90 IHNpemUpCnsKICAgIHZvaWQgKnJldCA9IHJlYWxsb2MocHRyLCBzaXplKTsKICAgIGlmICghcmV0 KQogICAgICAgIHdhcm5wKCJyZWFsbG9jKCVwLCAlenUpIGZhaWxlZCIsIHB0ciwgc2l6ZSk7CiAg ICByZXR1cm4gcmV0Owp9CgpzdGF0aWMgY2hhciAqd3N0cmR1cChjb25zdCBjaGFyICpzKQp7CiAg ICBjaGFyICpyZXQgPSBzdHJkdXAocyk7CiAgICBpZiAoIXJldCkKICAgICAgICB3YXJucCgic3Ry ZHVwKFwiJXNcIikgZmFpbGVkIiwgcyk7CiAgICByZXR1cm4gcmV0Owp9CgpzdGF0aWMgY2hhciAq eHN0cmR1cChjb25zdCBjaGFyICpzKQp7CiAgICBjaGFyICpyZXQgPSBzdHJkdXAocyk7CiAgICBp ZiAoIXJldCkKICAgICAgICBlcnJwKCJzdHJkdXAoXCIlc1wiKSBmYWlsZWQiLCBzKTsKICAgIHJl dHVybiByZXQ7Cn0KCi8qIEVORCBIRUxQRVJTICovCgojaWZkZWYgX1BBVEhfTE9HCiMgZGVmaW5l IFNPQ0tOQU1FIF9QQVRIX0xPRwojZWxzZQojIGRlZmluZSBTT0NLTkFNRSAiL2Rldi9sb2ciCiNl bmRpZgojaWZkZWYgX1BBVEhfS0xPRwojIGRlZmluZSBLTE9HX0ZJTEUgX1BBVEhfS0xPRwojZWxz ZQojIGRlZmluZSBLTE9HX0ZJTEUgIi9kZXYva2xvZyIKI2VuZGlmCgp0eXBlZGVmIHN0cnVjdCBQ Q1JFSW5mb18gewogICAgcGNyZSAqcGNyZTsKICAgIHBjcmVfZXh0cmEgKnBjcmVfZXh0cmE7Cn0g UENSRUluZm87Cgp0eXBlZGVmIHN0cnVjdCBEdXBsaWNhdGVUcmFja2VyXyB7CiAgICBjaGFyICpw cmV2aW91c19wcmc7CiAgICBjaGFyICpwcmV2aW91c19pbmZvOwogICAgc2l6ZV90IHNpemVvZl9w cmV2aW91c19wcmc7CiAgICBzaXplX3Qgc2l6ZW9mX3ByZXZpb3VzX2luZm87CiAgICBzaXplX3Qg cHJldmlvdXNfc2l6ZW9mX3ByZzsKICAgIHNpemVfdCBwcmV2aW91c19zaXplb2ZfaW5mbzsKICAg IHVuc2lnbmVkIGludCBzYW1lX2NvdW50ZXI7Cn0gRHVwbGljYXRlVHJhY2tlcjsKCnR5cGVkZWYg ZW51bSBGbHVzaE1vZGVfIHsKICAgIEZMVVNIX0RFRkFVTFQsIEZMVVNIX0FMV0FZUywgRkxVU0hf TkVWRVIKfSBGbHVzaE1vZGU7Cgp0eXBlZGVmIHN0cnVjdCBSYXRlTGltaXRlcl8gewogICAgaW50 NjRfdCB1c2VjX2JldHdlZW5fbXNnczsKICAgIGludCBidWNrZXRfc2l6ZTsKICAgIGludCB0b2tl bl9idWNrZXQ7CiAgICBpbnQ2NF90IGxhc3RfdGljazsKfSBSYXRlTGltaXRlcjsKCnR5cGVkZWYg c3RydWN0IE91dHB1dF8gewogICAgY2hhciAqZGlyZWN0b3J5OwogICAgRklMRSAqZnA7CiAgICBv ZmZfdCBzaXplOwogICAgb2ZmX3QgbWF4c2l6ZTsKICAgIGludCBtYXhmaWxlczsKICAgIHRpbWVf dCBtYXh0aW1lOwogICAgdGltZV90IGNyZWF0aW1lOwogICAgRHVwbGljYXRlVHJhY2tlciBkdDsK ICAgIHN0cnVjdCBPdXRwdXRfICpuZXh0X291dHB1dDsKICAgIGNoYXIgKnBvc3Ryb3RhdGVfY21k OwogICAgaW50IHNob3dyZXBlYXRzOwogICAgY29uc3QgY2hhciAqc3RhbXBfZm10OwogICAgRmx1 c2hNb2RlIGZsdXNoOwogICAgUmF0ZUxpbWl0ZXIgcmF0ZTsKfSBPdXRwdXQ7Cgp0eXBlZGVmIGVu dW0gUmVnZXhTaWduXyB7CiAgICBSRUdFWF9TSUdOX1BPU0lUSVZFLCBSRUdFWF9TSUdOX05FR0FU SVZFCn0gUmVnZXhTaWduOwoKdHlwZWRlZiBzdHJ1Y3QgUmVnZXhXaXRoU2lnbl8gewogICAgUENS RUluZm8gcmVnZXg7CiAgICBSZWdleFNpZ24gc2lnbjsKfSBSZWdleFdpdGhTaWduOwoKdHlwZWRl ZiBzdHJ1Y3QgQ29uZmlnQmxvY2tfIHsKICAgIGludCBtaW5pbXVtOwogICAgaW50IG1heGltdW07 CiAgICBpbnQgKmZhY2lsaXRpZXM7CiAgICBpbnQgbmJfZmFjaWxpdGllczsKICAgIFJlZ2V4V2l0 aFNpZ24gKnJlZ2V4ZXN3aXRoc2lnbjsKICAgIGludCBuYl9yZWdleGVzOwogICAgb2ZmX3QgbWF4 c2l6ZTsKICAgIGludCBtYXhmaWxlczsKICAgIHRpbWVfdCBtYXh0aW1lOwogICAgT3V0cHV0ICpv dXRwdXQ7CiAgICBjb25zdCBjaGFyICpjb21tYW5kOwogICAgY29uc3QgY2hhciAqcHJvZ3JhbTsK ICAgIC8qCiAgICAgKiBJZiBvdXRwdXQgb3IgY29tbWFuZCBtYXRjaCwgYW5kIGJyayBpcyBzZXQs CiAgICAgKiBkbyBvdXRwdXQgYW5kL29yIGNvbW1hbmQgdGhlbiBicmVhayBvdXQgb2YKICAgICAq IG1hdGNoIGxvb3AsIGkuZS4gZG9uJ3QgY29uc2lkZXIgYW55IG1vcmUKICAgICAqIHNlY3Rpb25z IGJlbG93IHRoaXMgb25lIGluIHRoZSBjb25maWcgZmlsZS4KICAgICAqLwogICAgaW50IGJyazsK ICAgIFJlZ2V4V2l0aFNpZ24gKnByb2dyYW1fcmVnZXhlc3dpdGhzaWduOwogICAgaW50IHByb2dy YW1fbmJfcmVnZXhlczsKICAgIHN0cnVjdCBDb25maWdCbG9ja18gKm5leHRfYmxvY2s7CiAgICBj aGFyICpwb3N0cm90YXRlX2NtZDsKICAgIGludCBzaG93cmVwZWF0czsKICAgIGNvbnN0IGNoYXIg KnN0YW1wX2ZtdDsKICAgIEZsdXNoTW9kZSBmbHVzaDsKICAgIGludDY0X3QgdXNlY19iZXR3ZWVu X21zZ3M7CiAgICBpbnQgYnVyc3RfbGVuZ3RoOwp9IENvbmZpZ0Jsb2NrOwoKdHlwZWRlZiBlbnVt IExvZ0xpbmVUeXBlXyB7CiAgICAgICAgTE9HTElORVRZUEVfU1lTTE9HLAogICAgICAgIExPR0xJ TkVUWVBFX0tMT0cKfSBMb2dMaW5lVHlwZTsKCiNkZWZpbmUgREVGQVVMVF9NSU5JTVVNIExPR19E RUJVRwojZGVmaW5lIERFRkFVTFRfTUFYSU1VTSBJTlRfTUFYCiNkZWZpbmUgREVGQVVMVF9NQVhT SVpFICgob2ZmX3QpIDEwMDAwMDApCiNkZWZpbmUgREVGQVVMVF9NQVhGSUxFUyA1CiNkZWZpbmUg REVGQVVMVF9NQVhUSU1FICgodGltZV90KSA2MCAqIDYwICogMjQpCiNkZWZpbmUgREVGQVVMVF9D T05TT0xFX0xFVkVMIDcKI2RlZmluZSBNSU5fQ09OU09MRV9MRVZFTCAwCiNkZWZpbmUgTUFYX0NP TlNPTEVfTEVWRUwgNwojZGVmaW5lIENGX1BST0dOQU1FX0tFUk5FTCAia2VybmVsIgojZGVmaW5l IE9VVFBVVF9ESVJfVElNRVNUQU1QICIudGltZXN0YW1wIgojZGVmaW5lIE9VVFBVVF9ESVJfQ1VS UkVOVCAiY3VycmVudCIKI2RlZmluZSBPVVRQVVRfRElSX1BFUk1TIDA3MDAKI2RlZmluZSBPVVRQ VVRfRElSX0xPR0ZJTEVTX1BSRUZJWCAibG9nLSIKI2RlZmluZSBPVVRQVVRfRElSX0xPR0ZJTEVT X1NVRkZJWCAiJVktJW0tJWQtJUg6JU06JVMiCiNkZWZpbmUgREVGQVVMVF9DT05GSUdfRklMRSAi L2V0YyIgIi9tZXRhbG9nLmNvbmYiCiNkZWZpbmUgREVGQVVMVF9QSURfRklMRSAiL3Zhci9ydW4v bWV0YWxvZy5waWQiCiNkZWZpbmUgTk9OUFJJTlRBQkxFX1NVU1RJVFVURV9DSEFSICdfJwojZGVm aW5lIFBST0dOQU1FX01BU1RFUiAibWV0YWxvZyBbTUFTVEVSXSIKI2RlZmluZSBQUk9HTkFNRV9L RVJORUwgIm1ldGFsb2cgW0tFUk5FTF0iCiNkZWZpbmUgTEFTVF9PVVRQVVQgIiAgICAgICAgICAg ICAgICAtIExhc3Qgb3V0cHV0IHJlcGVhdGVkICV1IHRpbWVzIC1cbiIKI2RlZmluZSBMQVNUX09V VFBVVF9UV0lDRSAiICAgICAgICAgICAgICAgIC0gTGFzdCBvdXRwdXQgcmVwZWF0ZWQgdHdpY2Ug LVxuIgojZGVmaW5lIE1BWF9TSUdOSUZJQ0FOVF9MRU5HVEggNTEyVQojZGVmaW5lIE1BWF9MT0df TEVOR1RIIDgxOTJVICAgICAgICAgIC8qIG11c3QgYmUgPCAoSU5UX01BWCAvIDIpICovCiNkZWZp bmUgREVGQVVMVF9TVEFNUF9GTVQgIiViICVkICVUIgoKI2lmZGVmIEFDQ0VQVF9VTklDT0RFX0NP TlRST0xfQ0hBUlMKIyBkZWZpbmUgSVNDVFJMQ09ERShYKSAoKFgpID09IDB4N2YgfHwgKCh1bnNp Z25lZCBjaGFyKSAoWCkpIDwgMzJVKQojZWxzZQojIGRlZmluZSBJU0NUUkxDT0RFKFgpICgoWCkg PT0gMHg3ZiB8fCAhKCgodW5zaWduZWQgY2hhcikgKFgpKSAmIDB4NjApKQojZW5kaWYKCiNpZmRl ZiBIQVZFX0tMT0dDVEwKIyBkZWZpbmUgS0xPR0NUTF9PUFRJT05TICJjOiIKI2Vsc2UKIyBkZWZp bmUgS0xPR0NUTF9PUFRJT05TICIiCiNlbmRpZgojZGVmaW5lIEdFVE9QVF9PUFRJT05TIEtMT0dD VExfT1BUSU9OUyAiYUJDOmhwOnNWdk4iCgpzdGF0aWMgc3RydWN0IG9wdGlvbiBsb25nX29wdGlv bnNbXSA9IHsKICAgIHsgImFzeW5jIiwgICAgICAgIDAsIE5VTEwsICdhJyB9LAogICAgeyAiZGFl bW9uaXplIiwgICAgMCwgTlVMTCwgJ0InIH0sCiNpZmRlZiBIQVZFX0tMT0dDVEwKICAgIHsgImNv bnNvbGVsZXZlbCIsIDEsIE5VTEwsICdjJyB9LAojZW5kaWYKICAgIHsgImNvbmZpZ2ZpbGUiLCAg IDEsIE5VTEwsICdDJyB9LAogICAgeyAiaGVscCIsICAgICAgICAgMCwgTlVMTCwgJ2gnIH0sCiAg ICB7ICJuby1rZXJuZWwiLCAgICAwLCBOVUxMLCAnTicgfSwKICAgIHsgInBpZGZpbGUiLCAgICAg IDEsIE5VTEwsICdwJyB9LAogICAgeyAic3luY2hyb25vdXMiLCAgMCwgTlVMTCwgJ3MnIH0sCiAg ICB7ICJzeW5jIiwgICAgICAgICAwLCBOVUxMLCAncycgfSwKICAgIHsgInZlcmJvc2UiLCAgICAg IDAsIE5VTEwsICd2JyB9LAogICAgeyAidmVyc2lvbiIsICAgICAgMCwgTlVMTCwgJ1YnIH0sCiAg ICB7IE5VTEwsICAgICAgICAgICAwLCBOVUxMLCAgMCAgfQp9OwoKI2lmIGRlZmluZWQoX19saW51 eF9fKSAmJiAhZGVmaW5lZChIQVZFX1NFVFBST0NUSVRMRSkKc3RhdGljIGNoYXIgKiphcmd2MDsK c3RhdGljIGludCBhcmd2X2x0aDsKI2VuZGlmCnN0YXRpYyBDb25maWdCbG9jayAqY29uZmlnX2Js b2NrczsKc3RhdGljIE91dHB1dCAqb3V0cHV0czsKI2lmZGVmIEhBVkVfS0xPR0NUTApzdGF0aWMg aW50IGNvbnNvbGVfbGV2ZWwgPSBERUZBVUxUX0NPTlNPTEVfTEVWRUw7CiNlbmRpZgpzdGF0aWMg cGlkX3QgY2hpbGQ7CnN0YXRpYyBzaWdfYXRvbWljX3Qgc3luY2hyb25vdXMgPSAoc2lnX2F0b21p Y190KSAxOwpzdGF0aWMgaW50IHZlcmJvc2U7CnN0YXRpYyBib29sIGRvX2tlcm5lbF9sb2cgPSB0 cnVlOwpzdGF0aWMgc2lnbmVkIGNoYXIgZGFlbW9uaXplOwpzdGF0aWMgY29uc3QgY2hhciAqcGlk X2ZpbGUgPSBERUZBVUxUX1BJRF9GSUxFOwpzdGF0aWMgY29uc3QgY2hhciAqY29uZmlnX2ZpbGUg PSBERUZBVUxUX0NPTkZJR19GSUxFOwpzdGF0aWMgaW50IHNwYXduX3JlY3Vyc2lvbiA9IDA7CnN0 YXRpYyBpbnQgZG9sb2dfcXVldWVbMl07CnN0YXRpYyB2b2lkIHNpZ25hbF9kb0xvZ19kZXF1ZXVl KHZvaWQpOwoKc3RhdGljIGludCBkb0xvZyhjb25zdCBjaGFyICogZm10LCAuLi4pOwoKLyogUmV0 dXJuIHZhbHVlczoKICogICAwIC0gc3VjY2VzcwogKiAgLTMgLSBtZW1vcnkgZmFpbHVyZQogKiA8 LTMgLSBwYXJzZSBlcnJvciBvbiBzcGVjaWZpYyBsaW5lcwogKgogKiBDYWxsZXIgb25seSBjYXJl cyBhYm91dCBzdWNjZXNzOyB0aGUgcmVzdCBhcmUgZm9yIGRldmVsb3BlcnMgd2hpbGUgZGVidWdn aW5nCiAqLwpzdGF0aWMgaW50IHBhcnNlTGluZShjaGFyICogY29uc3QgbGluZSwgQ29uZmlnQmxv Y2sgKipjdXJfYmxvY2ssCiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENvbmZpZ0Jsb2NrICog Y29uc3QgZGVmYXVsdF9ibG9jaywKICAgICAgICAgICAgICAgICAgICAgcGNyZSAqIGNvbnN0IHJl X25ld2Jsb2NrLCBwY3JlICogY29uc3QgcmVfbmV3c3RtdCwKICAgICAgICAgICAgICAgICAgICAg cGNyZSAqIGNvbnN0IHJlX2NvbW1lbnQsIHBjcmUgKiBjb25zdCByZV9udWxsKQp7CiAgICBpbnQg b3ZlY3RvclsxNl07CiAgICBwY3JlICpuZXdfcmVnZXg7CiAgICBjb25zdCBjaGFyICprZXl3b3Jk OwogICAgY29uc3QgY2hhciAqdmFsdWU7CiAgICBpbnQgbGluZV9zaXplOwogICAgaW50IHN0Y291 bnQ7CgogICAgaWYgKChsaW5lX3NpemUgPSAoaW50KSBzdHJsZW4obGluZSkpIDw9IDApIHsKICAg ICAgICByZXR1cm4gMDsKICAgIH0KICAgIGlmIChsaW5lW2xpbmVfc2l6ZSAtIDFdID09ICdcbicp IHsKICAgICAgICBpZiAobGluZV9zaXplIDwgMikgewogICAgICAgICAgICByZXR1cm4gMDsKICAg ICAgICB9CiAgICAgICAgbGluZVstLWxpbmVfc2l6ZV0gPSAwOwogICAgfQogICAgaWYgKHBjcmVf ZXhlYyhyZV9udWxsLCBOVUxMLCBsaW5lLCBsaW5lX3NpemUsCiAgICAgICAgICAgICAgICAgIDAs IDAsIG92ZWN0b3IsIEFSUkFZX1NJWkUob3ZlY3RvcikpID49IDAgfHwKICAgICAgICBwY3JlX2V4 ZWMocmVfY29tbWVudCwgTlVMTCwgbGluZSwgbGluZV9zaXplLAogICAgICAgICAgICAgICAgICAw LCAwLCBvdmVjdG9yLCBBUlJBWV9TSVpFKG92ZWN0b3IpKSA+PSAwKSB7CiAgICAgICAgcmV0dXJu IDA7CiAgICB9CiAgICBpZiAocGNyZV9leGVjKHJlX25ld2Jsb2NrLCBOVUxMLCBsaW5lLCBsaW5l X3NpemUsCiAgICAgICAgICAgICAgICAgIDAsIDAsIG92ZWN0b3IsIEFSUkFZX1NJWkUob3ZlY3Rv cikpID49IDApIHsKICAgICAgICBDb25maWdCbG9jayAqcHJldmlvdXNfYmxvY2sgPSAqY3VyX2Js b2NrOwoKICAgICAgICBpZiAoKCpjdXJfYmxvY2sgPSB3bWFsbG9jKHNpemVvZiAqKmN1cl9ibG9j aykpID09IE5VTEwpCiAgICAgICAgICAgIHJldHVybiAtMzsKICAgICAgICAqKmN1cl9ibG9jayA9 ICpkZWZhdWx0X2Jsb2NrOwogICAgICAgIGlmIChjb25maWdfYmxvY2tzID09IE5VTEwpIHsKICAg ICAgICAgICAgY29uZmlnX2Jsb2NrcyA9ICpjdXJfYmxvY2s7CiAgICAgICAgfSBlbHNlIHsKICAg ICAgICAgICAgcHJldmlvdXNfYmxvY2stPm5leHRfYmxvY2sgPSAqY3VyX2Jsb2NrOwogICAgICAg IH0KICAgICAgICByZXR1cm4gMDsKICAgIH0KICAgIGlmICgoc3Rjb3VudCA9CiAgICAgICAgIHBj cmVfZXhlYyhyZV9uZXdzdG10LCBOVUxMLCBsaW5lLCBsaW5lX3NpemUsCiAgICAgICAgICAgICAg ICAgICAwLCAwLCBvdmVjdG9yLCBBUlJBWV9TSVpFKG92ZWN0b3IpKSkgPj0gMykgewogICAgICAg IHBjcmVfZ2V0X3N1YnN0cmluZyhsaW5lLCBvdmVjdG9yLCBzdGNvdW50LCAxLCAma2V5d29yZCk7 CiAgICAgICAgcGNyZV9nZXRfc3Vic3RyaW5nKGxpbmUsIG92ZWN0b3IsIHN0Y291bnQsIDIsICZ2 YWx1ZSk7CiAgICAgICAgaWYgKHN0cmNhc2VjbXAoa2V5d29yZCwgIm1pbmltdW0iKSA9PSAwKSB7 CiAgICAgICAgICAgICgqY3VyX2Jsb2NrKS0+bWluaW11bSA9IGF0b2kodmFsdWUpOwogICAgICAg IH0gZWxzZSBpZiAoc3RyY2FzZWNtcChrZXl3b3JkLCAibWF4aW11bSIpID09IDApIHsKICAgICAg ICAgICAgKCpjdXJfYmxvY2spLT5tYXhpbXVtID0gYXRvaSh2YWx1ZSk7CiAgICAgICAgfSBlbHNl IGlmIChzdHJjYXNlY21wKGtleXdvcmQsICJmYWNpbGl0eSIpID09IDApIHsKICAgICAgICAgICAg aW50IG4gPSAwOwoKICAgICAgICAgICAgaWYgKCp2YWx1ZSA9PSAnKicgJiYgdmFsdWVbMV0gPT0g MCkgewogICAgICAgICAgICAgICAgaWYgKCgqY3VyX2Jsb2NrKS0+ZmFjaWxpdGllcyAhPSBOVUxM KSB7CiAgICAgICAgICAgICAgICAgICAgZnJlZSgoKmN1cl9ibG9jayktPmZhY2lsaXRpZXMpOwog ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKCpjdXJfYmxvY2spLT5mYWNpbGl0aWVz ID0gTlVMTDsKICAgICAgICAgICAgICAgICgqY3VyX2Jsb2NrKS0+bmJfZmFjaWxpdGllcyA9IDA7 CiAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgfQogICAgICAgICAgICB3aGls ZSAoZmFjaWxpdHluYW1lc1tuXS5jX25hbWUgIT0gTlVMTCAmJgogICAgICAgICAgICAgICAgICAg c3RyY2FzZWNtcChmYWNpbGl0eW5hbWVzW25dLmNfbmFtZSwgdmFsdWUpICE9IDApIHsKICAgICAg ICAgICAgICAgIG4rKzsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoZmFjaWxpdHluYW1l c1tuXS5jX25hbWUgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgd2FybigiVW5rbm93biBmYWNp bGl0eSA6IFslc10iLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICByZXR1cm4gLTQ7CiAgICAgICAg ICAgIH0KICAgICAgICAgICAgKCpjdXJfYmxvY2spLT5mYWNpbGl0aWVzID0gd3JlYWxsb2MoKCpj dXJfYmxvY2spLT5mYWNpbGl0aWVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoKCpjdXJfYmxvY2spLT5uYl9mYWNpbGl0aWVzICsgMSkgKgogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoKigqY3VyX2Js b2NrKS0+ZmFjaWxpdGllcykpOwogICAgICAgICAgICBpZiAoKCpjdXJfYmxvY2spLT5mYWNpbGl0 aWVzID09IE5VTEwpCiAgICAgICAgICAgICAgICByZXR1cm4gLTM7CiAgICAgICAgICAgICgqY3Vy X2Jsb2NrKS0+ZmFjaWxpdGllc1soKmN1cl9ibG9jayktPm5iX2ZhY2lsaXRpZXNdID0KICAgICAg ICAgICAgICAgIExPR19GQUMoZmFjaWxpdHluYW1lc1tuXS5jX3ZhbCk7CiAgICAgICAgICAgICgq Y3VyX2Jsb2NrKS0+bmJfZmFjaWxpdGllcysrOwogICAgICAgIH0gZWxzZSBpZiAoc3RyY2FzZWNt cChrZXl3b3JkLCAicmVnZXgiKSA9PSAwIHx8CiAgICAgICAgICAgICAgICAgICBzdHJjYXNlY21w KGtleXdvcmQsICJuZWdfcmVnZXgiKSA9PSAwKSB7CiAgICAgICAgICAgIGNvbnN0IGNoYXIgKnJl Z2V4OwogICAgICAgICAgICBSZWdleFdpdGhTaWduICpuZXdfcmVnZXhlc3dpdGhzaWduOwoKICAg ICAgICAgICAgaWYgKChyZWdleCA9IHdzdHJkdXAodmFsdWUpKSA9PSBOVUxMKQogICAgICAgICAg ICAgICAgcmV0dXJuIC0zOwogICAgICAgICAgICBpZiAoKG5ld19yZWdleGVzd2l0aHNpZ24gPQog ICAgICAgICAgICAgICAgIHdyZWFsbG9jKCgqY3VyX2Jsb2NrKS0+cmVnZXhlc3dpdGhzaWduLAog ICAgICAgICAgICAgICAgICAgICAgICAgICgoKmN1cl9ibG9jayktPm5iX3JlZ2V4ZXMgKyAxKSAq CiAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mICooKCpjdXJfYmxvY2spLT5yZWdleGVz d2l0aHNpZ24pKSkgPT0gTlVMTCkKICAgICAgICAgICAgICAgIHJldHVybiAtMzsKICAgICAgICAg ICAgKCpjdXJfYmxvY2spLT5yZWdleGVzd2l0aHNpZ24gPSBuZXdfcmVnZXhlc3dpdGhzaWduOwog ICAgICAgICAgICBpZiAoKG5ld19yZWdleCA9IHdwY3JlX2NvbXBpbGUocmVnZXgsIFBDUkVfQ0FT RUxFU1MpKSA9PSBOVUxMKQogICAgICAgICAgICAgICAgcmV0dXJuIC01OwogICAgICAgICAgICB7 CiAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplcnJwdHI7CiAgICAgICAgICAgICAgICBSZWdl eFdpdGhTaWduICogY29uc3QgdGhpc19yZWdleCA9CiAgICAgICAgICAgICAgICAgICAgJigoKmN1 cl9ibG9jayktPnJlZ2V4ZXN3aXRoc2lnblsoKmN1cl9ibG9jayktPm5iX3JlZ2V4ZXNdKTsKCiAg ICAgICAgICAgICAgICBpZiAoc3RyY2FzZWNtcChrZXl3b3JkLCAibmVnX3JlZ2V4IikgPT0gMCkg ewogICAgICAgICAgICAgICAgICAgIHRoaXNfcmVnZXgtPnNpZ24gPSBSRUdFWF9TSUdOX05FR0FU SVZFOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICB0aGlzX3Jl Z2V4LT5zaWduID0gUkVHRVhfU0lHTl9QT1NJVElWRTsKICAgICAgICAgICAgICAgIH0KICAgICAg ICAgICAgICAgIHRoaXNfcmVnZXgtPnJlZ2V4LnBjcmUgPSBuZXdfcmVnZXg7CiAgICAgICAgICAg ICAgICB0aGlzX3JlZ2V4LT5yZWdleC5wY3JlX2V4dHJhID0KICAgICAgICAgICAgICAgICAgICBw Y3JlX3N0dWR5KG5ld19yZWdleCwgMCwgJmVycnB0cik7CiAgICAgICAgICAgIH0KICAgICAgICAg ICAgKCpjdXJfYmxvY2spLT5uYl9yZWdleGVzKys7CiAgICAgICAgfSBlbHNlIGlmIChzdHJjYXNl Y21wKGtleXdvcmQsICJwcm9ncmFtX3JlZ2V4IikgPT0gMCB8fAogICAgICAgICAgICAgICAgICAg c3RyY2FzZWNtcChrZXl3b3JkLCAicHJvZ3JhbV9uZWdfcmVnZXgiKSA9PSAwKSB7CiAgICAgICAg ICAgIGNvbnN0IGNoYXIgKnJlZ2V4OwogICAgICAgICAgICBSZWdleFdpdGhTaWduICpuZXdfcmVn ZXhlc3dpdGhzaWduOwoKICAgICAgICAgICAgaWYgKChyZWdleCA9IHdzdHJkdXAodmFsdWUpKSA9 PSBOVUxMKQogICAgICAgICAgICAgICAgcmV0dXJuIC0zOwogICAgICAgICAgICBpZiAoKG5ld19y ZWdleGVzd2l0aHNpZ24gPQogICAgICAgICAgICAgICAgIHdyZWFsbG9jKCgqY3VyX2Jsb2NrKS0+ cHJvZ3JhbV9yZWdleGVzd2l0aHNpZ24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgKCgqY3Vy X2Jsb2NrKS0+cHJvZ3JhbV9uYl9yZWdleGVzICsgMSkgKgogICAgICAgICAgICAgICAgICAgICAg ICAgIHNpemVvZiAqKCgqY3VyX2Jsb2NrKS0+cHJvZ3JhbV9yZWdleGVzd2l0aHNpZ24pKSkKICAg ICAgICAgICAgICAgID09IE5VTEwpCiAgICAgICAgICAgICAgICByZXR1cm4gLTM7CiAgICAgICAg ICAgICgqY3VyX2Jsb2NrKS0+cHJvZ3JhbV9yZWdleGVzd2l0aHNpZ24gPSBuZXdfcmVnZXhlc3dp dGhzaWduOwogICAgICAgICAgICBpZiAoKG5ld19yZWdleCA9IHdwY3JlX2NvbXBpbGUocmVnZXgs IFBDUkVfQ0FTRUxFU1MpKSA9PSBOVUxMKQogICAgICAgICAgICAgICAgcmV0dXJuIC01OwogICAg ICAgICAgICB7CiAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplcnJwdHI7CiAgICAgICAgICAg ICAgICBSZWdleFdpdGhTaWduICogY29uc3QgdGhpc19yZWdleCA9CiAgICAgICAgICAgICAgICAg ICAgJigoKmN1cl9ibG9jayktPnByb2dyYW1fcmVnZXhlc3dpdGhzaWduCiAgICAgICAgICAgICAg ICAgICAgICBbKCpjdXJfYmxvY2spLT5wcm9ncmFtX25iX3JlZ2V4ZXNdKTsKCiAgICAgICAgICAg ICAgICBpZiAoc3RyY2FzZWNtcChrZXl3b3JkLCAicHJvZ3JhbV9uZWdfcmVnZXgiKSA9PSAwKSB7 CiAgICAgICAgICAgICAgICAgICAgdGhpc19yZWdleC0+c2lnbiA9IFJFR0VYX1NJR05fTkVHQVRJ VkU7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHRoaXNfcmVn ZXgtPnNpZ24gPSBSRUdFWF9TSUdOX1BPU0lUSVZFOwogICAgICAgICAgICAgICAgfQogICAgICAg ICAgICAgICAgdGhpc19yZWdleC0+cmVnZXgucGNyZSA9IG5ld19yZWdleDsKICAgICAgICAgICAg ICAgIHRoaXNfcmVnZXgtPnJlZ2V4LnBjcmVfZXh0cmEgPQogICAgICAgICAgICAgICAgICAgIHBj cmVfc3R1ZHkobmV3X3JlZ2V4LCAwLCAmZXJycHRyKTsKICAgICAgICAgICAgfQogICAgICAgICAg ICAoKmN1cl9ibG9jayktPnByb2dyYW1fbmJfcmVnZXhlcysrOwogICAgICAgIH0gZWxzZSBpZiAo c3RyY2FzZWNtcChrZXl3b3JkLCAibWF4c2l6ZSIpID09IDApIHsKICAgICAgICAgICAgKCpjdXJf YmxvY2spLT5tYXhzaXplID0gKG9mZl90KSBzdHJ0b3VsbCh2YWx1ZSwgTlVMTCwgMCk7CiAgICAg ICAgICAgIGlmICgoKmN1cl9ibG9jayktPm91dHB1dCAhPSBOVUxMKSB7CiAgICAgICAgICAgICAg ICAoKmN1cl9ibG9jayktPm91dHB1dC0+bWF4c2l6ZSA9ICgqY3VyX2Jsb2NrKS0+bWF4c2l6ZTsK ICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAoc3RyY2FzZWNtcChrZXl3b3JkLCAibWF4 ZmlsZXMiKSA9PSAwKSB7CiAgICAgICAgICAgICAgICAoKmN1cl9ibG9jayktPm1heGZpbGVzID0g YXRvaSh2YWx1ZSk7CiAgICAgICAgICAgIGlmICgoKmN1cl9ibG9jayktPm91dHB1dCAhPSBOVUxM KSB7CiAgICAgICAgICAgICAgICAoKmN1cl9ibG9jayktPm91dHB1dC0+bWF4ZmlsZXMgPSAoKmN1 cl9ibG9jayktPm1heGZpbGVzOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChzdHJj YXNlY21wKGtleXdvcmQsICJtYXh0aW1lIikgPT0gMCkgewogICAgICAgICAgICAoKmN1cl9ibG9j ayktPm1heHRpbWUgPSAodGltZV90KSBzdHJ0b3VsbCh2YWx1ZSwgTlVMTCwgMCk7CiAgICAgICAg ICAgIGlmICgoKmN1cl9ibG9jayktPm91dHB1dCAhPSBOVUxMKSB7CiAgICAgICAgICAgICAgICAo KmN1cl9ibG9jayktPm91dHB1dC0+bWF4dGltZSA9ICgqY3VyX2Jsb2NrKS0+bWF4dGltZTsKICAg ICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAoc3RyY2FzZWNtcChrZXl3b3JkLCAic2hvd3Jl cGVhdHMiKSA9PSAwKSB7CiAgICAgICAgICAgICgqY3VyX2Jsb2NrKS0+c2hvd3JlcGVhdHMgPSBh dG9pKHZhbHVlKTsKICAgICAgICAgICAgaWYgKCgqY3VyX2Jsb2NrKS0+b3V0cHV0ICE9IE5VTEwp IHsKICAgICAgICAgICAgICAgICgqY3VyX2Jsb2NrKS0+b3V0cHV0LT5zaG93cmVwZWF0cyA9ICgq Y3VyX2Jsb2NrKS0+c2hvd3JlcGVhdHM7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYg KHN0cmNhc2VjbXAoa2V5d29yZCwgImxvZ2RpciIpID09IDApIHsKICAgICAgICAgICAgY2hhciAq bG9nZGlyOwogICAgICAgICAgICBPdXRwdXQgKm91dHB1dHNfc2NhbiA9IG91dHB1dHM7CiAgICAg ICAgICAgIE91dHB1dCAqcHJldmlvdXNfc2NhbiA9IE5VTEw7CiAgICAgICAgICAgIE91dHB1dCAq bmV3X291dHB1dDsKCiAgICAgICAgICAgIHdoaWxlIChvdXRwdXRzX3NjYW4gIT0gTlVMTCkgewog ICAgICAgICAgICAgICAgaWYgKG91dHB1dHNfc2Nhbi0+ZGlyZWN0b3J5ICE9IE5VTEwgJiYKICAg ICAgICAgICAgICAgICAgICBzdHJjbXAob3V0cHV0c19zY2FuLT5kaXJlY3RvcnksIHZhbHVlKSA9 PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgKCpjdXJfYmxvY2spLT5vdXRwdXQgPSBvdXRwdXRz X3NjYW47CiAgICAgICAgICAgICAgICAgICAgZ290byBkdXBsaWNhdGVfb3V0cHV0OwogICAgICAg ICAgICAgICAgfQogICAgICAgICAgICAgICAgcHJldmlvdXNfc2NhbiA9IG91dHB1dHNfc2NhbjsK ICAgICAgICAgICAgICAgIG91dHB1dHNfc2NhbiA9IG91dHB1dHNfc2Nhbi0+bmV4dF9vdXRwdXQ7 CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKChuZXdfb3V0cHV0ID0gd21hbGxvYyhzaXpl b2YgKm5ld19vdXRwdXQpKSA9PSBOVUxMIHx8CiAgICAgICAgICAgICAgICAobG9nZGlyID0gd3N0 cmR1cCh2YWx1ZSkpID09IE5VTEwpIHsKICAgICAgICAgICAgICAgIGZyZWUobmV3X291dHB1dCk7 CiAgICAgICAgICAgICAgICByZXR1cm4gLTM7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgbmV3 X291dHB1dC0+ZGlyZWN0b3J5ID0gbG9nZGlyOwogICAgICAgICAgICBuZXdfb3V0cHV0LT5mcCA9 IE5VTEw7CiAgICAgICAgICAgIG5ld19vdXRwdXQtPnNpemUgPSAob2ZmX3QpIDA7CiAgICAgICAg ICAgIG5ld19vdXRwdXQtPm1heHNpemUgPSAoKmN1cl9ibG9jayktPm1heHNpemU7CiAgICAgICAg ICAgIG5ld19vdXRwdXQtPm1heGZpbGVzID0gKCpjdXJfYmxvY2spLT5tYXhmaWxlczsKICAgICAg ICAgICAgbmV3X291dHB1dC0+bWF4dGltZSA9ICgqY3VyX2Jsb2NrKS0+bWF4dGltZTsKICAgICAg ICAgICAgbmV3X291dHB1dC0+c2hvd3JlcGVhdHMgPSAoKmN1cl9ibG9jayktPnNob3dyZXBlYXRz OwogICAgICAgICAgICBuZXdfb3V0cHV0LT5zdGFtcF9mbXQgPSAoKmN1cl9ibG9jayktPnN0YW1w X2ZtdDsKICAgICAgICAgICAgbmV3X291dHB1dC0+Zmx1c2ggPSAoKmN1cl9ibG9jayktPmZsdXNo OwogICAgICAgICAgICBuZXdfb3V0cHV0LT5kdC5wcmV2aW91c19wcmcgPSBOVUxMOwogICAgICAg ICAgICBuZXdfb3V0cHV0LT5kdC5wcmV2aW91c19pbmZvID0gTlVMTDsKICAgICAgICAgICAgbmV3 X291dHB1dC0+ZHQuc2l6ZW9mX3ByZXZpb3VzX3ByZyA9IChzaXplX3QpIDBVOwogICAgICAgICAg ICBuZXdfb3V0cHV0LT5kdC5zaXplb2ZfcHJldmlvdXNfaW5mbyA9IChzaXplX3QpIDBVOwogICAg ICAgICAgICBuZXdfb3V0cHV0LT5kdC5wcmV2aW91c19zaXplb2ZfcHJnID0gKHNpemVfdCkgMFU7 CiAgICAgICAgICAgIG5ld19vdXRwdXQtPmR0LnByZXZpb3VzX3NpemVvZl9pbmZvID0gKHNpemVf dCkgMFU7CiAgICAgICAgICAgIG5ld19vdXRwdXQtPmR0LnNhbWVfY291bnRlciA9IDBVOwogICAg ICAgICAgICBuZXdfb3V0cHV0LT5yYXRlLnVzZWNfYmV0d2Vlbl9tc2dzID0gKCpjdXJfYmxvY2sp LT51c2VjX2JldHdlZW5fbXNnczsKICAgICAgICAgICAgbmV3X291dHB1dC0+cmF0ZS5idWNrZXRf c2l6ZSA9ICgqY3VyX2Jsb2NrKS0+YnVyc3RfbGVuZ3RoOwogICAgICAgICAgICBuZXdfb3V0cHV0 LT5yYXRlLnRva2VuX2J1Y2tldCA9ICgqY3VyX2Jsb2NrKS0+YnVyc3RfbGVuZ3RoOwogICAgICAg ICAgICBuZXdfb3V0cHV0LT5yYXRlLmxhc3RfdGljayA9IDA7CiAgICAgICAgICAgIG5ld19vdXRw dXQtPm5leHRfb3V0cHV0ID0gTlVMTDsKICAgICAgICAgICAgaWYgKHByZXZpb3VzX3NjYW4gIT0g TlVMTCkgewogICAgICAgICAgICAgICAgcHJldmlvdXNfc2Nhbi0+bmV4dF9vdXRwdXQgPSBuZXdf b3V0cHV0OwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgb3V0cHV0cyA9IG5l d19vdXRwdXQ7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgKCpjdXJfYmxvY2spLT5vdXRwdXQg PSBuZXdfb3V0cHV0OwogICAgICAgICAgICBkdXBsaWNhdGVfb3V0cHV0OgogICAgICAgICAgICAo dm9pZCkgMDsKICAgICAgICB9IGVsc2UgaWYgKHN0cmNhc2VjbXAoa2V5d29yZCwgImNvbW1hbmQi KSA9PSAwKSB7CiAgICAgICAgICAgIGlmICgoKCpjdXJfYmxvY2spLT5jb21tYW5kID0gd3N0cmR1 cCh2YWx1ZSkpID09IE5VTEwpCiAgICAgICAgICAgICAgICByZXR1cm4gLTM7CiAgICAgICAgfSBl bHNlIGlmIChzdHJjYXNlY21wKGtleXdvcmQsICJwcm9ncmFtIikgPT0gMCkgewogICAgICAgICAg ICBpZiAoKCgqY3VyX2Jsb2NrKS0+cHJvZ3JhbSA9IHdzdHJkdXAodmFsdWUpKSA9PSBOVUxMKQog ICAgICAgICAgICAgICAgcmV0dXJuIC0zOwogICAgICAgIH0gZWxzZSBpZiAoc3RyY2FzZWNtcChr ZXl3b3JkLCAicG9zdHJvdGF0ZV9jbWQiKSA9PSAwKSB7CiAgICAgICAgICAgIGlmICgoKCpjdXJf YmxvY2spLT5wb3N0cm90YXRlX2NtZCA9IHdzdHJkdXAodmFsdWUpKSA9PSBOVUxMKQogICAgICAg ICAgICAgICByZXR1cm4gLTM7CiAgICAgICAgICAgIGlmICgoKmN1cl9ibG9jayktPm91dHB1dCAh PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAoKmN1cl9ibG9jayktPm91dHB1dC0+cG9zdHJvdGF0 ZV9jbWQgPSAoKmN1cl9ibG9jayktPnBvc3Ryb3RhdGVfY21kOwogICAgICAgICAgICB9CiAgICAg ICAgfSBlbHNlIGlmIChzdHJjYXNlY21wKGtleXdvcmQsICJicmVhayIpID09IDApIHsKICAgICAg ICAgICAgKCpjdXJfYmxvY2spLT5icmsgPSBhdG9pKHZhbHVlKTsKICAgICAgICB9IGVsc2UgaWYg KHN0cmNhc2VjbXAoa2V5d29yZCwgInN0YW1wX2ZtdCIpID09IDApIHsKICAgICAgICAgICAgaWYg KCgoKmN1cl9ibG9jayktPnN0YW1wX2ZtdCA9IHdzdHJkdXAodmFsdWUpKSA9PSBOVUxMKQogICAg ICAgICAgICAgICByZXR1cm4gLTM7CiAgICAgICAgICAgIGlmICgoKmN1cl9ibG9jayktPm91dHB1 dCAhPSBOVUxMKSB7CiAgICAgICAgICAgICAgICAoKmN1cl9ibG9jayktPm91dHB1dC0+c3RhbXBf Zm10ID0gKCpjdXJfYmxvY2spLT5zdGFtcF9mbXQ7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVs c2UgaWYgKHN0cmNhc2VjbXAoa2V5d29yZCwgImZsdXNoIikgPT0gMCkgewogICAgICAgICAgICBp ZiAoYXRvaSh2YWx1ZSkpCiAgICAgICAgICAgICAgICAoKmN1cl9ibG9jayktPmZsdXNoID0gRkxV U0hfQUxXQVlTOwogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAoKmN1cl9ibG9jaykt PmZsdXNoID0gRkxVU0hfTkVWRVI7CiAgICAgICAgICAgIGlmICgoKmN1cl9ibG9jayktPm91dHB1 dCAhPSBOVUxMKQogICAgICAgICAgICAgICAgKCpjdXJfYmxvY2spLT5vdXRwdXQtPmZsdXNoID0g KCpjdXJfYmxvY2spLT5mbHVzaDsKICAgICAgICB9IGVsc2UgaWYgKHN0cmNhc2VjbXAoa2V5d29y ZCwgInJhdGVsaW1pdCIpID09IDApIHsKICAgICAgICAgICAgZG91YmxlIGJhc2VfcmF0ZTsKICAg ICAgICAgICAgaW50NjRfdCB1c2VjX2JldHdlZW5fbXNnczsKICAgICAgICAgICAgY2hhciAqZW5k OwoKICAgICAgICAgICAgYmFzZV9yYXRlID0gc3RydG9kKHZhbHVlLCAmZW5kKTsKICAgICAgICAg ICAgaWYgKGVuZCA9PSB2YWx1ZSkgewogICAgICAgICAgICAgICAgd2FybnAoIk1pc3NpbmcgbnVt YmVyIDogWyVzXSIsIHZhbHVlKTsKICAgICAgICAgICAgICAgIHJldHVybiAtNjsKICAgICAgICAg ICAgfQogICAgICAgICAgICBpZiAoYmFzZV9yYXRlIDwgMC4pIHsKICAgICAgICAgICAgICAgIHdh cm4oIk5lZ2F0aXZlIG51bWJlciA6IFslc10iLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICByZXR1 cm4gLTY7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmIChiYXNlX3JhdGUpIHsKICAgICAg ICAgICAgICAgIGRvdWJsZSB1c2VjOwogICAgICAgICAgICAgICAgaWYgKGVuZFswXSAhPSAnLycp IHsKICAgICAgICAgICAgICAgICAgICB3YXJuKCJNaXNzaW5nIHVuaXQgb2YgdGltZSA6IFslc10i LCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC02OwogICAgICAgICAgICAgICAg fQogICAgICAgICAgICAgICAgc3dpdGNoIChlbmRbMV0pIHsKICAgICAgICAgICAgICAgIGNhc2Ug J3MnOiB1c2VjID0gMTAwMDAwMC47IGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAnbSc6IHVz ZWMgPSAxMDAwMDAwLiAqIDYwOyBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ2gnOiB1c2Vj ID0gMTAwMDAwMC4gKiA2MCAqIDYwOyBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ2QnOiB1 c2VjID0gMTAwMDAwMC4gKiA2MCAqIDYwICogMjQ7IGJyZWFrOwogICAgICAgICAgICAgICAgZGVm YXVsdDoKICAgICAgICAgICAgICAgICAgICB3YXJuKCJJbnZhbGlkIHVuaXQgb2YgdGltZSA6IFsl c10iLCBlbmQgKyAxKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTY7CiAgICAgICAgICAg ICAgICB9CiAgICAgICAgICAgICAgICB1c2VjX2JldHdlZW5fbXNncyA9IHVzZWMgLyBiYXNlX3Jh dGU7CiAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgdXNlY19iZXR3ZWVuX21zZ3Mg PSBiYXNlX3JhdGU7CgogICAgICAgICAgICBhc3NlcnQodXNlY19iZXR3ZWVuX21zZ3MgPj0gMCk7 CiAgICAgICAgICAgICgqY3VyX2Jsb2NrKS0+dXNlY19iZXR3ZWVuX21zZ3MgPSB1c2VjX2JldHdl ZW5fbXNnczsKICAgICAgICAgICAgaWYgKCgqY3VyX2Jsb2NrKS0+b3V0cHV0ICE9IE5VTEwpCiAg ICAgICAgICAgICAgICAoKmN1cl9ibG9jayktPm91dHB1dC0+cmF0ZS51c2VjX2JldHdlZW5fbXNn cyA9CiAgICAgICAgICAgICAgICAgICAgdXNlY19iZXR3ZWVuX21zZ3M7CiAgICAgICAgfSBlbHNl IGlmIChzdHJjYXNlY21wKGtleXdvcmQsICJyYXRlbGltaXRfYnVyc3QiKSA9PSAwKSB7CiAgICAg ICAgICAgIGludCBidXJzdF9sZW5ndGggPSBhdG9pKHZhbHVlKTsKICAgICAgICAgICAgaWYgKGJ1 cnN0X2xlbmd0aCA8IDEpIHsKICAgICAgICAgICAgICAgIHdhcm4oIk5vbi1wb3NpdGl2ZSBidXN0 IGxlbmd0aCA6IFslc10iLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICByZXR1cm4gLTY7CiAgICAg ICAgICAgIH0KICAgICAgICAgICAgKCpjdXJfYmxvY2spLT5idXJzdF9sZW5ndGggPSBidXJzdF9s ZW5ndGg7CiAgICAgICAgICAgIGlmICgoKmN1cl9ibG9jayktPm91dHB1dCAhPSBOVUxMKSB7CiAg ICAgICAgICAgICAgICAoKmN1cl9ibG9jayktPm91dHB1dC0+cmF0ZS5idWNrZXRfc2l6ZSA9IGJ1 cnN0X2xlbmd0aDsKICAgICAgICAgICAgICAgICgqY3VyX2Jsb2NrKS0+b3V0cHV0LT5yYXRlLnRv a2VuX2J1Y2tldCA9IGJ1cnN0X2xlbmd0aDsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZQog ICAgICAgICAgICBlcnIoIlVua25vd24ga2V5d29yZCAnJXMnISBsaW5lOiAlcyIsIGtleXdvcmQs IGxpbmUpOwogICAgfQogICAgcmV0dXJuIDA7Cn0KCnN0YXRpYyBpbnQgY29uZmlnUGFyc2VyKGNv bnN0IGNoYXIgKiBjb25zdCBmaWxlKQp7CiAgICBjaGFyIGxpbmVbTElORV9NQVhdOwogICAgRklM RSAqZnA7CiAgICBwY3JlICpyZV9uZXdibG9jazsKICAgIHBjcmUgKnJlX25ld3N0bXQ7CiAgICBw Y3JlICpyZV9jb21tZW50OwogICAgcGNyZSAqcmVfbnVsbDsKICAgIGludCByZXRjb2RlID0gMDsK ICAgIENvbmZpZ0Jsb2NrIGRlZmF1bHRfYmxvY2sgPSB7CiAgICAgICAgICAgIERFRkFVTFRfTUlO SU1VTSwgICAgICAgICAgIC8qIG1pbmltdW0gKi8KICAgICAgICAgICAgREVGQVVMVF9NQVhJTVVN LCAgICAgICAgICAgLyogbWF4aW11bSAqLwogICAgICAgICAgICBOVUxMLCAgICAgICAgICAgICAg ICAgICAgICAvKiBmYWNpbGl0aWVzICovCiAgICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIG5iX2ZhY2lsaXRpZXMgKi8KICAgICAgICAgICAgTlVMTCwgICAgICAgICAgICAg ICAgICAgICAgLyogcmVnZXhlcyAqLwogICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBuYl9yZWdleGVzICovCiAgICAgICAgICAgIChvZmZfdCkgREVGQVVMVF9NQVhTSVpF LCAgIC8qIG1heHNpemUgKi8KICAgICAgICAgICAgREVGQVVMVF9NQVhGSUxFUywgICAgICAgICAg LyogbWF4ZmlsZXMgKi8KICAgICAgICAgICAgKHRpbWVfdCkgREVGQVVMVF9NQVhUSU1FLCAgLyog bWF4dGltZSAqLwogICAgICAgICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAvKiBvdXRw dXQgKi8KICAgICAgICAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgLyogY29tbWFuZCAq LwogICAgICAgICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAvKiBwcm9ncmFtICovCiAg ICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGJyZWFrIGZsYWcgKi8KICAg ICAgICAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgLyogcHJvZ3JhbV9yZWdleGVzICov CiAgICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHByb2dyYW1fbmJfcmVn ZXhlcyAqLwogICAgICAgICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAvKiBuZXh0X2Js b2NrICovCiAgICAgICAgICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgIC8qIHBvc3Ryb3Rh dGVfY21kICovCiAgICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNob3dy ZXBlYXRzICovCiAgICAgICAgICAgIERFRkFVTFRfU1RBTVBfRk1ULCAgICAgICAgIC8qIHN0YW1w X2ZtdCAqLwogICAgICAgICAgICBGTFVTSF9ERUZBVUxULCAgICAgICAgICAgICAvKiBmbHVzaCAq LwogICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiB1c2VjX2JldHdlZW5f bXNncyAqLwogICAgICAgICAgICAxLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBtYXhfYnVy c3RfbGVuZ3RoICovCiAgICB9OwogICAgQ29uZmlnQmxvY2sgKmN1cl9ibG9jayA9ICZkZWZhdWx0 X2Jsb2NrOwoKICAgIGlmICgoZnAgPSBmb3BlbihmaWxlLCAiciIpKSA9PSBOVUxMKSB7CiAgICAg ICAgd2FybnAoIkNhbid0IG9wZW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSIpOwogICAgICAgIHJl dHVybiAtMjsKICAgIH0KICAgIHJlX25ld2Jsb2NrID0gd3BjcmVfY29tcGlsZSgiOlxccyokIiwg MCk7CiAgICByZV9uZXdzdG10ID0gd3BjcmVfY29tcGlsZSgiXlxccyooLis/KVxccyo9XFxzKlwi PyhbXlwiXSopXCI/XFxzKiQiLCAwKTsKICAgIHJlX2NvbW1lbnQgPSB3cGNyZV9jb21waWxlKCJe XFxzKiMiLCAwKTsKICAgIHJlX251bGwgPSB3cGNyZV9jb21waWxlKCJeXFxzKiQiLCAwKTsKICAg IGlmICghcmVfbmV3YmxvY2sgfHwgIXJlX25ld3N0bXQgfHwgIXJlX2NvbW1lbnQgfHwgIXJlX251 bGwpIHsKICAgICAgICByZXRjb2RlID0gLTE7CiAgICAgICAgZ290byBydG47CiAgICB9CiAgICB3 aGlsZSAoZmdldHMobGluZSwgc2l6ZW9mIGxpbmUsIGZwKSAhPSBOVUxMKSB7CiAgICAgICAgaWYg KChyZXRjb2RlID0gcGFyc2VMaW5lKGxpbmUsICZjdXJfYmxvY2ssICZkZWZhdWx0X2Jsb2NrLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZV9uZXdibG9jaywgcmVfbmV3c3RtdCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVfY29tbWVudCwgcmVfbnVsbCkpICE9 IDApIHsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgfQogcnRuOgogICAgaWYgKHJl X25ld2Jsb2NrICE9IE5VTEwpIHsKICAgICAgICBwY3JlX2ZyZWUocmVfbmV3YmxvY2spOwogICAg fQogICAgaWYgKHJlX25ld3N0bXQgIT0gTlVMTCkgewogICAgICAgIHBjcmVfZnJlZShyZV9uZXdz dG10KTsKICAgIH0KICAgIGlmIChyZV9jb21tZW50ICE9IE5VTEwpIHsKICAgICAgICBwY3JlX2Zy ZWUocmVfY29tbWVudCk7CiAgICB9CiAgICBpZiAocmVfbnVsbCAhPSBOVUxMKSB7CiAgICAgICAg cGNyZV9mcmVlKHJlX251bGwpOwogICAgfQogICAgZmNsb3NlKGZwKTsKCiAgICByZXR1cm4gcmV0 Y29kZTsKfQoKc3RhdGljIHZvaWQgY2xlYXJhcmdzKGludCBhcmdjLCBjaGFyICoqYXJndikKewoj aWZuZGVmIE5PX1BST0NOQU1FX0NIQU5HRQojIGlmIGRlZmluZWQoX19saW51eF9fKSAmJiAhZGVm aW5lZChIQVZFX1NFVFBST0NUSVRMRSkKICAgIGludCBpOwoKICAgIGZvciAoaSA9IDA7IGVudmly b25baV0gIT0gTlVMTDsgaSsrKTsKICAgIGFyZ3YwID0gYXJndjsKICAgIGlmIChpID4gMCkgewog ICAgICAgIGFyZ3ZfbHRoID0gZW52aXJvbltpLTFdICsgc3RybGVuKGVudmlyb25baS0xXSkgLSBh cmd2MFswXTsKICAgIH0gZWxzZSB7CiAgICAgICAgYXJndl9sdGggPSBhcmd2MFthcmdjLTFdICsg c3RybGVuKGFyZ3YwW2FyZ2MtMV0pIC0gYXJndjBbMF07CiAgICB9CiAgICBpZiAoZW52aXJvbiAh PSBOVUxMKSB7CiAgICAgICAgY2hhciAqKm5ld19lbnZpcm9uOwogICAgICAgIHVuc2lnbmVkIGlu dCBlbnZfbmIgPSAwVTsKCiAgICAgICAgd2hpbGUgKGVudmlyb25bZW52X25iXSAhPSBOVUxMKSB7 CiAgICAgICAgICAgIGVudl9uYisrOwogICAgICAgIH0KICAgICAgICBpZiAoKG5ld19lbnZpcm9u ID0gbWFsbG9jKCgxVSArIGVudl9uYikgKiBzaXplb2YgKGNoYXIgKikpKSA9PSBOVUxMKSB7CiAg ICAgICAgICAgIGFib3J0KCk7CiAgICAgICAgfQogICAgICAgIG5ld19lbnZpcm9uW2Vudl9uYl0g PSBOVUxMOwogICAgICAgIHdoaWxlIChlbnZfbmIgPiAwVSkgewogICAgICAgICAgICBlbnZfbmIt LTsKICAgICAgICAgICAgLyogQ2FuIGFueSBiYWQgdGhpbmcgaGFwcGVuIGlmIHN0cmR1cCgpIGV2 ZXIgZmFpbHM/ICovCiAgICAgICAgICAgIG5ld19lbnZpcm9uW2Vudl9uYl0gPSB4c3RyZHVwKGVu dmlyb25bZW52X25iXSk7CiAgICAgICAgfQogICAgICAgIGVudmlyb24gPSBuZXdfZW52aXJvbjsK ICAgIH0KIyBlbHNlCiAgICAodm9pZCkgYXJnYzsKICAgICh2b2lkKSBhcmd2OwojIGVuZGlmCiNl bmRpZgp9CgojaWZuZGVmIEhBVkVfU0VUUFJPR05BTUUKc3RhdGljIHZvaWQgc2V0cHJvZ25hbWUo Y29uc3QgY2hhciAqIGNvbnN0IHRpdGxlKQp7CiNpZm5kZWYgTk9fUFJPQ05BTUVfQ0hBTkdFCiMg aWZkZWYgSEFWRV9TRVRQUk9DVElUTEUKICAgIHNldHByb2N0aXRsZSgiLSVzIiwgdGl0bGUpOwoj IGVsaWYgZGVmaW5lZChfX2xpbnV4X18pCgogICAgaWYgKGFyZ3YwICE9IE5VTEwpIHsKICAgICAg ICBtZW1zZXQoYXJndjBbMF0sIDAsIGFyZ3ZfbHRoKTsKICAgICAgICBzdHJuY3B5KGFyZ3YwWzBd LCB0aXRsZSwgYXJndl9sdGggLSAyKTsKICAgICAgICBhcmd2MFsxXSA9IE5VTEw7CiAgICB9CiMg ZWxpZiBkZWZpbmVkKF9faHB1eF9fKQogICAgdW5pb24gcHN0dW4gcHN0OwoKICAgIHBzdC5wc3Rf Y29tbWFuZCA9IHRpdGxlOwogICAgcHN0YXQoUFNUQVRfU0VUQ01ELCBwc3QsIHN0cmxlbih0aXRs ZSksIDAsIDApOwojIGVuZGlmCiNlbmRpZgogICAgKHZvaWQpIHRpdGxlOwp9CiNlbmRpZgoKc3Rh dGljIGludCBnZXREYXRhU291cmNlcyhpbnQgc29ja2V0c1tdKQp7CiAgICBzdHJ1Y3Qgc29ja2Fk ZHJfdW4gc2E7CiNpZmRlZiBIQVZFX0tMT0dDVEwKICAgIGludCBmZHBpcGVbMl07CiAgICBwaWRf dCBwZ2lkOwogICAgaW50IGxvb3AgPSAxOwojZW5kaWYKCiAgICBpZiAoKHNvY2tldHNbMF0gPSBz b2NrZXQoUEZfVU5JWCwgU09DS19ER1JBTSwgMCkpIDwgMCkgewogICAgICAgIHdhcm5wKCJVbmFi bGUgdG8gY3JlYXRlIGEgbG9jYWwgc29ja2V0Iik7CiAgICAgICAgcmV0dXJuIC0xOwogICAgfQog ICAgc2Euc3VuX2ZhbWlseSA9IEFGX1VOSVg7CiAgICBpZiAoc25wcmludGYoc2Euc3VuX3BhdGgs IHNpemVvZiBzYS5zdW5fcGF0aCwgIiVzIiwgU09DS05BTUUpIDwgMCkgewogICAgICAgIHdhcm5w KCJTb2NrZXQgbmFtZSB0b28gbG9uZyIpOwogICAgICAgIGNsb3NlKHNvY2tldHNbMF0pOwogICAg ICAgIHJldHVybiAtMjsKICAgIH0KICAgIHVubGluayhzYS5zdW5fcGF0aCk7CiAgICBpZiAoYmlu ZChzb2NrZXRzWzBdLCAoc3RydWN0IHNvY2thZGRyICopICZzYSwgKHNvY2tsZW5fdCkgc2l6ZW9m IHNhKSA8IDApIHsKICAgICAgICB3YXJucCgiVW5hYmxlIHRvIGJpbmQgYSBsb2NhbCBzb2NrZXQi KTsKICAgICAgICBjbG9zZShzb2NrZXRzWzBdKTsKICAgICAgICByZXR1cm4gLTE7CiAgICB9CiAg ICBjaG1vZChzYS5zdW5fcGF0aCwgMDY2Nik7CiAgICBzb2NrZXRzWzFdID0gLTE7CgogICAgLyog c2V0dXAgdGhlIHNpZ25hbCBoYW5kbGVyIHBpcGUgKi8KICAgIGlmIChzb2NrZXRwYWlyKEFGX0xP Q0FMLCBTT0NLX1NUUkVBTSwgMCwgZG9sb2dfcXVldWUpIDwgMCkgewogICAgICAgIGlmIChwaXBl KGRvbG9nX3F1ZXVlKSA8IDApIHsKICAgICAgICAgICAgd2FybnAoIlVuYWJsZSB0byBjcmVhdGUg YSBwaXBlIik7CiAgICAgICAgICAgIHJldHVybiAtNDsKICAgICAgICB9CiAgICB9CgogICAgaWYg KCFkb19rZXJuZWxfbG9nKSB7CiAgICAgICAgLyoKICAgICAgICAgKiBUaGlzIHdpbGwgYXZvaWQg cmVhZGluZyBmcm9tIHRoZSBrZXJuZWwgc29ja2V0IGluIHRoZSBwcm9jZXNzKCkKICAgICAgICAg KiBmdW5jdGlvbiwgd2hpY2ggb25seSB0YWtlcyBpbnRvIGFjY291bnQgdmFsaWQgZGVzY3JpcHRv cnMuCiAgICAgICAgICovCiAgICAgICAgc29ja2V0c1sxXSA9IC0xOwogICAgICAgIHJldHVybiAw OwogICAgfQoKI2lmZGVmIEhBVkVfS0xPR0NUTAogICAgLyogbGFyZ2VyIGJ1ZmZlcnMgY29tcGFy ZWQgdG8gYSBwaXBlKCkgKi8KICAgIGlmIChzb2NrZXRwYWlyKEFGX1VOSVgsIFNPQ0tfU1RSRUFN LCAwLCBmZHBpcGUpIDwgMCkgewogICAgICAgIHdhcm5wKCJVbmFibGUgdG8gY3JlYXRlIGEgcGlw ZSIpOwogICAgICAgIGNsb3NlKHNvY2tldHNbMF0pOwogICAgICAgIHJldHVybiAtMzsKICAgIH0K ICAgIHBnaWQgPSBnZXRwZ3JwKCk7CiAgICBpZiAoKGNoaWxkID0gZm9yaygpKSA8IChwaWRfdCkg MCkgewogICAgICAgIHdhcm5wKCJVbmFibGUgdG8gY3JlYXRlIHRoZSBrbG9nZCBjaGlsZCIpOwog ICAgICAgIGNsb3NlKHNvY2tldHNbMF0pOwogICAgICAgIHJldHVybiAtMzsKICAgIH0gZWxzZSBp ZiAoY2hpbGQgPT0gKHBpZF90KSAwKSB7CiAgICAgICAgY2hhciBsaW5lW0xJTkVfTUFYXTsKICAg ICAgICBpbnQgczsKCiAgICAgICAgc2lnbmFsKFNJR1VTUjEsIFNJR19JR04pOwogICAgICAgIHNp Z25hbChTSUdVU1IyLCBTSUdfSUdOKTsKICAgICAgICBzZXRwZ2lkKChwaWRfdCkgMCwgcGdpZCk7 CiAgICAgICAgc2V0cHJvZ25hbWUoUFJPR05BTUVfS0VSTkVMKTsKICAgICAgICBpZiAoa2xvZ2N0 bCgxLCBOVUxMLCAwKSA8IDAgfHwKICAgICAgICAgICAga2xvZ2N0bCg4LCBOVUxMLCBjb25zb2xl X2xldmVsKSA8IDAgfHwKICAgICAgICAgICAga2xvZ2N0bCg2LCBOVUxMLCAwKSA8IDApIHsKICAg ICAgICAgICAgd2FybnAoIlVuYWJsZSB0byBjb250cm9sIHRoZSBrZXJuZWwgbG9nZ2luZyBkZXZp Y2UiKTsKICAgICAgICAgICAgcmV0dXJuIC00OwogICAgICAgIH0KCiAgICAgICAgd2hpbGUgKGxv b3ApIHsKICAgICAgICAgICAgd2hpbGUgKChzID0ga2xvZ2N0bCgyLCBsaW5lLCBzaXplb2YgKGxp bmUpKSkgPCAwICYmIGVycm5vID09IEVJTlRSKQogICAgICAgICAgICAgICAgY29udGludWU7CiAg ICAgICAgICAgIGlmIChzID09IC0xKSB7CiAgICAgICAgICAgICAgICBsb29wID0gMDsKICAgICAg ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC8qIG1ha2Ugc3VyZSB3 ZSB3cml0ZSB0aGUgd2hvbGUgYnVmZmVyIGludG8gdGhlIHBpcGUKICAgICAgICAgICAgICAgbGlu ZSBwYXJzaW5nIGlzIGRvbmUgb24gdGhlIG90aGVyIGVuZCAqLwogICAgICAgICAgICBpbnQgb3V0 ID0gMDsKICAgICAgICAgICAgd2hpbGUgKG91dCA8IHMpIHsKICAgICAgICAgICAgICAgIGludCB3 ID0gd3JpdGUoZmRwaXBlWzFdLCAmbGluZVtvdXRdLCBzIC0gb3V0KTsKICAgICAgICAgICAgICAg IGlmICh3ID09IC0xICYmIGVycm5vICE9IEVJTlRSKSB7CiAgICAgICAgICAgICAgICAgICAgbG9v cCA9IDA7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAg ICAgICAgICAgICBvdXQgKz0gdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBrbG9n Y3RsKDcsIE5VTEwsIDApOwogICAgICAgIGtsb2djdGwoMCwgTlVMTCwgMCk7CgogICAgICAgIHJl dHVybiAwOwogICAgfQogICAgc29ja2V0c1sxXSA9IGZkcGlwZVswXTsKI2Vsc2UgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogIUhBVkVfS0xPR0NUTCAqLwogICAgewogICAgICAg IGludCBrbG9nZmQ7CgogICAgICAgIGlmICgoa2xvZ2ZkID0gb3BlbihLTE9HX0ZJTEUsIE9fUkRP TkxZKSkgPCAwKSB7CiAgICAgICAgICAgIHJldHVybiAwOyAgICAgICAgICAgICAgICAgIC8qIG5v bi1mYXRhbCAqLwogICAgICAgIH0KICAgICAgICBzb2NrZXRzWzFdID0ga2xvZ2ZkOwogICAgfQoj ZW5kaWYKCiAgICByZXR1cm4gMDsKfQoKc3RhdGljIGludCBzcGF3bkNvbW1hbmQoY29uc3QgY2hh ciAqIGNvbnN0IGNvbW1hbmQsIGNvbnN0IGNoYXIgKiBjb25zdCBkYXRlLAogICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCBjaGFyICogY29uc3QgcHJnLCBjb25zdCBjaGFyICogY29uc3QgaW5m bykKewogICAgcGlkX3QgcGlkOwoKICAgIGlmIChzcGF3bl9yZWN1cnNpb24pIHJldHVybiAxOwog ICAgc3Bhd25fcmVjdXJzaW9uKys7CgogICAgcGlkID0gZm9yaygpOwogICAgaWYgKHBpZCA9PSAw KSB7CiAgICAgICAgZXhlY2woY29tbWFuZCwgY29tbWFuZCwgZGF0ZSwgcHJnLCBpbmZvLCAoY2hh ciAqKSBOVUxMKTsKICAgICAgICBfZXhpdCgxMjcpOwogICAgfQoKICAgIGlmICh2ZXJib3NlKQog ICAgICAgIGRvTG9nKCJGb3JrZWQgY29tbWFuZCBcIiVzIFwiJXNcIiBcIiVzXCIgXCIlc1wiIFsl dV0uIiwKICAgICAgICAgICAgICBjb21tYW5kLCBkYXRlLCBwcmcsIGluZm8sICh1bnNpZ25lZCkg cGlkKTsKICAgIHNwYXduX3JlY3Vyc2lvbi0tOwogICAgcmV0dXJuIDA7Cn0KCnN0YXRpYyBpbnQg cGFyc2VMb2dMaW5lKGNvbnN0IExvZ0xpbmVUeXBlIGxvZ2xpbmV0eXBlLCBjaGFyICpsaW5lLAog ICAgICAgICAgICAgICAgICAgICAgICBpbnQgKiBjb25zdCBsb2djb2RlLAogICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCBjaGFyICoqIGNvbnN0IHByZywgY2hhciAqKiBjb25zdCBpbmZvKQp7 CiNpZm5kZWYgSEFWRV9LTE9HQ1RMCiAgICBpZiAobG9nbGluZXR5cGUgIT0gTE9HTElORVRZUEVf S0xPRykgewojZW5kaWYKICAgICAgICBpZiAoKmxpbmUgIT0gJzwnKSB7CiAgICAgICAgICAgIHJl dHVybiAtMTsKICAgICAgICB9CiAgICAgICAgbGluZSsrOwogICAgICAgIGlmICgoKmxvZ2NvZGUg PSBhdG9pKGxpbmUpKSA8PSAwKSB7CiAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICB9CiAg ICAgICAgd2hpbGUgKCpsaW5lICE9ICc+JykgewogICAgICAgICAgICBpZiAoKmxpbmUgPT0gMCkg ewogICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGxp bmUrKzsKICAgICAgICB9CiAgICAgICAgbGluZSsrOwojaWZuZGVmIEhBVkVfS0xPR0NUTAogICAg fSBlbHNlIHsKICAgICAgICAqbG9nY29kZSA9IDA7CiAgICB9CiNlbmRpZgoKICAgIGlmIChsb2ds aW5ldHlwZSA9PSBMT0dMSU5FVFlQRV9LTE9HKSB7CiAgICAgICAgKmxvZ2NvZGUgfD0gTE9HX0tF Uk47CiAgICAgICAgKnByZyA9IENGX1BST0dOQU1FX0tFUk5FTDsKICAgICAgICAqaW5mbyA9IGxp bmU7CiAgICAgICAgcmV0dXJuIDA7CiAgICB9CiAgICB3aGlsZSAoKmxpbmUgIT0gJzonKSB7CiAg ICAgICAgaWYgKCpsaW5lID09IDApIHsKICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgIH0K ICAgICAgICBsaW5lKys7CiAgICB9CiAgICBsaW5lKys7CiAgICB3aGlsZSAoaXNzcGFjZSgqbGlu ZSkgPT0gMCkgewogICAgICAgIGlmICgqbGluZSA9PSAwKSB7CiAgICAgICAgICAgIHJldHVybiAt MTsKICAgICAgICB9CiAgICAgICAgbGluZSsrOwogICAgfQogICAgKmxpbmUrKyA9IDA7CiAgICAq cHJnID0gbGluZTsKICAgIHdoaWxlICgqbGluZSAhPSAnWycgJiYgKmxpbmUgIT0gJzonKSB7CiAg ICAgICAgaWYgKCpsaW5lID09IDApIHsKICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgIH0K ICAgICAgICBsaW5lKys7CiAgICB9CiAgICBpZiAoKmxpbmUgPT0gJ1snKSB7CiAgICAgICAgKmxp bmUrKyA9IDA7CiAgICAgICAgd2hpbGUgKCpsaW5lICE9ICddJykgewogICAgICAgICAgICBpZiAo KmxpbmUgPT0gMCkgewogICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICAgICB9CiAg ICAgICAgICAgIGxpbmUrKzsKICAgICAgICB9CiAgICAgICAgbGluZSsrOwogICAgICAgIHdoaWxl ICgqbGluZSAhPSAnOicpIHsKICAgICAgICAgICAgaWYgKCpsaW5lID09IDApIHsKICAgICAgICAg ICAgICAgIHJldHVybiAtMTsKICAgICAgICAgICAgfQogICAgICAgICAgICBsaW5lKys7CiAgICAg ICAgfQogICAgfSBlbHNlIHsKICAgICAgICAqbGluZSA9IDA7CiAgICB9CiAgICBsaW5lKys7CiAg ICB3aGlsZSAoaXNzcGFjZSgqbGluZSkgIT0gMCkgewogICAgICAgIGlmICgqbGluZSA9PSAwKSB7 CiAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICB9CiAgICAgICAgbGluZSsrOwogICAgfQog ICAgKmluZm8gPSBsaW5lOwoKICAgIHJldHVybiAwOwp9CgpzdGF0aWMgaW50IHJvdGF0ZUxvZ0Zp bGVzKGNvbnN0IGNoYXIgKiBjb25zdCBkaXJlY3RvcnksIGNvbnN0IGludCBtYXhmaWxlcykKewog ICAgY2hhciBwYXRoW1BBVEhfTUFYXTsKICAgIGNoYXIgb2xkX25hbWVbUEFUSF9NQVhdOwogICAg Y29uc3QgY2hhciAqbmFtZTsKICAgIERJUiAqZGlyOwogICAgc3RydWN0IGRpcmVudCAqZGlyZW50 OwogICAgaW50IGZvdW5kbG9nczsKICAgIGludCB5ZWFyLCBtb24sIG1kYXksIGhvdXIsIG1pbiwg c2VjOwogICAgaW50IG9sZGVyX3llYXIsIG9sZGVyX21vbiA9IElOVF9NQVgsIG9sZGVyX21kYXkg PSBJTlRfTUFYLAogICAgICAgIG9sZGVyX2hvdXIgPSBJTlRfTUFYLCBvbGRlcl9taW4gPSBJTlRf TUFYLCBvbGRlcl9zZWMgPSBJTlRfTUFYOwoKICAgIHJlc2NhbjoKICAgIGZvdW5kbG9ncyA9IDA7 CiAgICAqb2xkX25hbWUgPSAwOwogICAgb2xkZXJfeWVhciA9IElOVF9NQVg7CiAgICBpZiAoKGRp ciA9IG9wZW5kaXIoZGlyZWN0b3J5KSkgPT0gTlVMTCkgewogICAgICAgIHdhcm5wKCJVbmFibGUg dG8gcm90YXRlIFslc10iLCBkaXJlY3RvcnkpOwogICAgICAgIHJldHVybiAtMTsKICAgIH0KICAg IHdoaWxlICgoZGlyZW50ID0gcmVhZGRpcihkaXIpKSAhPSBOVUxMKSB7CiAgICAgICAgbmFtZSA9 IGRpcmVudC0+ZF9uYW1lOwogICAgICAgIGlmIChzdHJuY21wKG5hbWUsIE9VVFBVVF9ESVJfTE9H RklMRVNfUFJFRklYLAogICAgICAgICAgICAgICAgICAgIHNpemVvZiBPVVRQVVRfRElSX0xPR0ZJ TEVTX1BSRUZJWCAtIDFVKSA9PSAwKSB7CiAgICAgICAgICAgIGlmIChzc2NhbmYobmFtZSwgT1VU UFVUX0RJUl9MT0dGSUxFU19QUkVGSVggIiVkLSVkLSVkLSVkOiVkOiVkIiwKICAgICAgICAgICAg ICAgICAgICAgICAmeWVhciwgJm1vbiwgJm1kYXksICZob3VyLCAmbWluLCAmc2VjKSAhPSA2KSB7 CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBmb3Vu ZGxvZ3MrKzsKICAgICAgICAgICAgaWYgKHllYXIgPCBvbGRlcl95ZWFyIHx8ICh5ZWFyID09IG9s ZGVyX3llYXIgJiYKICAgICAgICAgICAgICAgKG1vbiAgPCBvbGRlcl9tb24gIHx8IChtb24gID09 IG9sZGVyX21vbiAgJiYKICAgICAgICAgICAgICAgKG1kYXkgPCBvbGRlcl9tZGF5IHx8IChtZGF5 ID09IG9sZGVyX21kYXkgJiYKICAgICAgICAgICAgICAgKGhvdXIgPCBvbGRlcl9ob3VyIHx8ICho b3VyID09IG9sZGVyX2hvdXIgJiYKICAgICAgICAgICAgICAgKG1pbiAgPCBvbGRlcl9taW4gIHx8 IChtaW4gID09IG9sZGVyX21pbiAgJiYKICAgICAgICAgICAgICAgKHNlYyAgPCBvbGRlcl9zZWMp KSkpKSkpKSkpKSB7ICAgLyogeWVhaCEgKi8KICAgICAgICAgICAgICAgIG9sZGVyX3llYXIgPSB5 ZWFyOwogICAgICAgICAgICAgICAgb2xkZXJfbW9uID0gbW9uOwogICAgICAgICAgICAgICAgb2xk ZXJfbWRheSA9IG1kYXk7CiAgICAgICAgICAgICAgICBvbGRlcl9ob3VyID0gaG91cjsKICAgICAg ICAgICAgICAgIG9sZGVyX21pbiA9IG1pbjsKICAgICAgICAgICAgICAgIG9sZGVyX3NlYyA9IHNl YzsKICAgICAgICAgICAgICAgIHN0cm5jcHkob2xkX25hbWUsIG5hbWUsIHNpemVvZiBvbGRfbmFt ZSk7CiAgICAgICAgICAgICAgICBvbGRfbmFtZVtzaXplb2Ygb2xkX25hbWUgLSAxVV0gPSAwOwog ICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgY2xvc2VkaXIoZGlyKTsKICAgIGlmIChm b3VuZGxvZ3MgPj0gbWF4ZmlsZXMpIHsKICAgICAgICBpZiAoKm9sZF9uYW1lID09IDApIHsKICAg ICAgICAgICAgcmV0dXJuIC0zOwogICAgICAgIH0KICAgICAgICBpZiAoc25wcmludGYocGF0aCwg c2l6ZW9mIHBhdGgsICIlcy8lcyIsIGRpcmVjdG9yeSwgb2xkX25hbWUpIDwgMCkgewogICAgICAg ICAgICB3YXJucCgiUGF0aCB0b28gbG9uZyB0byB1bmxpbmsgWyVzLyVzXSIsIGRpcmVjdG9yeSwg b2xkX25hbWUpOwogICAgICAgICAgICByZXR1cm4gLTQ7CiAgICAgICAgfQogICAgICAgIGlmICh1 bmxpbmsocGF0aCkgPCAwKSB7CiAgICAgICAgICAgIHJldHVybiAtMjsKICAgICAgICB9CiAgICAg ICAgZm91bmRsb2dzLS07CiAgICAgICAgaWYgKGZvdW5kbG9ncyA+PSBtYXhmaWxlcykgewogICAg ICAgICAgICBnb3RvIHJlc2NhbjsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIDA7Cn0KCnN0 YXRpYyBpbnQgcmF0ZUxpbWl0KFJhdGVMaW1pdGVyICogY29uc3QgcmwpCnsKICAgIHN0cnVjdCB0 aW1ldmFsIHR2OwogICAgaW50NjRfdCBjdXJyZW50X3RpY2ssIGRpZmZfdGlja3M7CgogICAgaWYg KHJsLT51c2VjX2JldHdlZW5fbXNncyA9PSAwKQogICAgICAgIHJldHVybiAwOyAvKiBvdXRwdXQg Y2hhbm5lbCBpcyBub3QgbGltaXRlZCAqLwogICAgaWYgKGdldHRpbWVvZmRheSgmdHYsIE5VTEwp KQogICAgICAgIHJldHVybiAwOyAvKiBpZiBpbiBkb3VidCwgbmV2ZXIgbGltaXQgKi8KCiAgICAv KiBGaWxsIHVwIGJ1Y2tldCB3aXRoIG9uZSB0b2tlbiBldmVyeSB1c2VjX2JldHdlZW5fbXNncyBt aWNyb3NlY29uZHMgKi8KICAgIGN1cnJlbnRfdGljayA9IHR2LnR2X3NlYyAqIChpbnQ2NF90KTEw MDAwMDAgKyB0di50dl91c2VjOwogICAgY3VycmVudF90aWNrIC89IHJsLT51c2VjX2JldHdlZW5f bXNnczsKICAgIGRpZmZfdGlja3MgPSBjdXJyZW50X3RpY2sgLSBybC0+bGFzdF90aWNrOwogICAg aWYgKGRpZmZfdGlja3MgPiAwKSB7CiAgICAgICAgZGlmZl90aWNrcyArPSBybC0+dG9rZW5fYnVj a2V0OwogICAgICAgIGlmIChkaWZmX3RpY2tzIDwgcmwtPmJ1Y2tldF9zaXplKQogICAgICAgICAg ICBybC0+dG9rZW5fYnVja2V0ID0gKGludClkaWZmX3RpY2tzOwogICAgICAgIGVsc2UgLyogYnVj a2V0IG92ZXJmbG93ICovCiAgICAgICAgICAgIHJsLT50b2tlbl9idWNrZXQgPSBybC0+YnVja2V0 X3NpemU7CiAgICB9CiAgICBybC0+bGFzdF90aWNrID0gY3VycmVudF90aWNrOwoKICAgIC8qIExv ZyBtZXNzYWdlIG9ubHkgaWYgdG9rZW4gYXZhaWxhYmxlIHRvIHBheSBmb3IgaXQgKi8KICAgIGlm IChybC0+dG9rZW5fYnVja2V0IDw9IDApCiAgICAgICAgcmV0dXJuIDE7IC8qIHN1cHByZXNzIHRo aXMgbWVzc2FnZSBkdWUgdG8gcmF0ZSBsaW1pdCAqLwogICAgLS1ybC0+dG9rZW5fYnVja2V0Owog ICAgcmV0dXJuIDA7IC8qIG1lc3NhZ2UgaXMgd2l0aGluIGxpbWl0ICovCn0KCnN0YXRpYyBpbnQg d3JpdGVMb2dMaW5lKE91dHB1dCAqIGNvbnN0IG91dHB1dCwgY29uc3QgY2hhciAqIGNvbnN0IGRh dGUsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiBjb25zdCBwcmcsIGNvbnN0 IGNoYXIgKiBjb25zdCBpbmZvKQp7CiAgICBzaXplX3Qgc2l6ZW9mX3ByZzsKICAgIHNpemVfdCBz aXplb2ZfaW5mbzsKICAgIHRpbWVfdCBub3c7CgogICAgaWYgKG91dHB1dCA9PSBOVUxMIHx8IG91 dHB1dC0+ZGlyZWN0b3J5ID09IE5VTEwgfHwKICAgICAgICAoc2l6ZW9mX3ByZyA9IHN0cmxlbihw cmcpKSA8PSAoc2l6ZV90KSAwVSB8fAogICAgICAgIChzaXplb2ZfaW5mbyA9IHN0cmxlbihpbmZv KSkgPD0gKHNpemVfdCkgMFUpIHsKICAgICAgICByZXR1cm4gMDsKICAgIH0KICAgIGlmIChzaXpl b2ZfaW5mbyA+IE1BWF9TSUdOSUZJQ0FOVF9MRU5HVEgpIHsKICAgICAgICBzaXplb2ZfaW5mbyA9 IE1BWF9TSUdOSUZJQ0FOVF9MRU5HVEg7CiAgICB9CiAgICBpZiAoc2l6ZW9mX3ByZyA+IE1BWF9T SUdOSUZJQ0FOVF9MRU5HVEgpIHsKICAgICAgICBzaXplb2ZfcHJnID0gTUFYX1NJR05JRklDQU5U X0xFTkdUSDsKICAgIH0KCiAgICBpZiAocmF0ZUxpbWl0KCZvdXRwdXQtPnJhdGUpKSB7CiAgICAg ICAgcmV0dXJuIDA7CiAgICB9CiAgICBpZiAob3V0cHV0LT5zaG93cmVwZWF0cyA9PSAwICYmCiAg ICAgICAgc2l6ZW9mX2luZm8gPT0gb3V0cHV0LT5kdC5wcmV2aW91c19zaXplb2ZfaW5mbyAmJgog ICAgICAgIHNpemVvZl9wcmcgPT0gb3V0cHV0LT5kdC5wcmV2aW91c19zaXplb2ZfcHJnICYmCiAg ICAgICAgbWVtY21wKG91dHB1dC0+ZHQucHJldmlvdXNfaW5mbywgaW5mbywgc2l6ZW9mX2luZm8p ID09IDAgJiYKICAgICAgICBtZW1jbXAob3V0cHV0LT5kdC5wcmV2aW91c19wcmcsIHByZywgc2l6 ZW9mX3ByZykgPT0gMCkgewogICAgICAgIGlmIChvdXRwdXQtPmR0LnNhbWVfY291bnRlciA8IFVJ TlRfTUFYKSB7CiAgICAgICAgICAgIG91dHB1dC0+ZHQuc2FtZV9jb3VudGVyKys7CiAgICAgICAg fQogICAgICAgIHJldHVybiAwOwogICAgfQoKICAgIGlmIChzaXplb2ZfaW5mbyA+IG91dHB1dC0+ ZHQuc2l6ZW9mX3ByZXZpb3VzX2luZm8pIHsKICAgICAgICBjaGFyICpwcCA9IG91dHB1dC0+ZHQu cHJldmlvdXNfaW5mbzsKCiAgICAgICAgaWYgKChwcCA9IHdyZWFsbG9jKG91dHB1dC0+ZHQucHJl dmlvdXNfaW5mbywgc2l6ZW9mX2luZm8pKSAhPSBOVUxMKSB7CiAgICAgICAgICAgIG91dHB1dC0+ ZHQucHJldmlvdXNfaW5mbyA9IHBwOwogICAgICAgICAgICBtZW1jcHkob3V0cHV0LT5kdC5wcmV2 aW91c19pbmZvLCBpbmZvLCBzaXplb2ZfaW5mbyk7CiAgICAgICAgICAgIG91dHB1dC0+ZHQuc2l6 ZW9mX3ByZXZpb3VzX2luZm8gPSBzaXplb2ZfaW5mbzsKICAgICAgICB9CiAgICB9IGVsc2Ugewog ICAgICAgIG1lbWNweShvdXRwdXQtPmR0LnByZXZpb3VzX2luZm8sIGluZm8sIHNpemVvZl9pbmZv KTsKICAgICAgICBvdXRwdXQtPmR0LnByZXZpb3VzX3NpemVvZl9pbmZvID0gc2l6ZW9mX2luZm87 CiAgICB9CiAgICBpZiAoc2l6ZW9mX3ByZyA+IG91dHB1dC0+ZHQuc2l6ZW9mX3ByZXZpb3VzX3By ZykgewogICAgICAgIGNoYXIgKnBwID0gb3V0cHV0LT5kdC5wcmV2aW91c19wcmc7CgogICAgICAg IGlmICgocHAgPSB3cmVhbGxvYyhvdXRwdXQtPmR0LnByZXZpb3VzX3ByZywgc2l6ZW9mX3ByZykp ICE9IE5VTEwpIHsKICAgICAgICAgICAgb3V0cHV0LT5kdC5wcmV2aW91c19wcmcgPSBwcDsKICAg ICAgICAgICAgbWVtY3B5KG91dHB1dC0+ZHQucHJldmlvdXNfcHJnLCBwcmcsIHNpemVvZl9wcmcp OwogICAgICAgICAgICBvdXRwdXQtPmR0LnNpemVvZl9wcmV2aW91c19wcmcgPSBzaXplb2ZfcHJn OwogICAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgICAgbWVtY3B5KG91dHB1dC0+ZHQucHJldmlv dXNfcHJnLCBwcmcsIHNpemVvZl9wcmcpOwogICAgICAgIG91dHB1dC0+ZHQucHJldmlvdXNfc2l6 ZW9mX3ByZyA9IHNpemVvZl9wcmc7CiAgICB9CiAgICBub3cgPSB0aW1lKE5VTEwpOwogICAgaWYg KG91dHB1dC0+ZnAgPT0gTlVMTCkgewogICAgICAgIHN0cnVjdCBzdGF0IHN0OwogICAgICAgIEZJ TEUgKmZwOwogICAgICAgIEZJTEUgKmZwX3RzOwogICAgICAgIHRpbWVfdCBjcmVhdGltZTsKICAg ICAgICBjaGFyIHBhdGhbUEFUSF9NQVhdOwoKICAgICAgICB0ZXN0ZGlyOgogICAgICAgIGlmIChz dGF0KG91dHB1dC0+ZGlyZWN0b3J5LCAmc3QpIDwgMCkgewogICAgICAgICAgICBpZiAobWtkaXIo b3V0cHV0LT5kaXJlY3RvcnksIE9VVFBVVF9ESVJfUEVSTVMpIDwgMCkgewogICAgICAgICAgICAg ICAgd2FybnAoIkNhbid0IGNyZWF0ZSBbJXNdIiwgb3V0cHV0LT5kaXJlY3RvcnkpOwogICAgICAg ICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmICghU19J U0RJUihzdC5zdF9tb2RlKSkgewogICAgICAgICAgICBpZiAodW5saW5rKG91dHB1dC0+ZGlyZWN0 b3J5KSA8IDApIHsKICAgICAgICAgICAgICAgIHdhcm5wKCJDYW4ndCB1bmxpbmsgWyVzXSIsIG91 dHB1dC0+ZGlyZWN0b3J5KTsKICAgICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgICAg fQogICAgICAgICAgICBnb3RvIHRlc3RkaXI7CiAgICAgICAgfQogICAgICAgIGlmIChzbnByaW50 ZihwYXRoLCBzaXplb2YgcGF0aCwgIiVzLyIgT1VUUFVUX0RJUl9DVVJSRU5ULAogICAgICAgICAg ICAgICAgICAgICBvdXRwdXQtPmRpcmVjdG9yeSkgPCAwKSB7CiAgICAgICAgICAgIHdhcm5wKCJQ YXRoIG5hbWUgdG9vIGxvbmcgZm9yIGN1cnJlbnQgaW4gWyVzXSIsIG91dHB1dC0+ZGlyZWN0b3J5 KTsKICAgICAgICAgICAgcmV0dXJuIC0yOwogICAgICAgIH0KICAgICAgICBpZiAoKGZwID0gZm9w ZW4ocGF0aCwgImEiKSkgPT0gTlVMTCkgewogICAgICAgICAgICB3YXJucCgiVW5hYmxlIHRvIGFj Y2VzcyBbJXNdIiwgcGF0aCk7CiAgICAgICAgICAgIHJldHVybiAtMzsKICAgICAgICB9CiAgICAg ICAgaWYgKHNucHJpbnRmKHBhdGgsIHNpemVvZiBwYXRoLCAiJXMvIiBPVVRQVVRfRElSX1RJTUVT VEFNUCwKICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LT5kaXJlY3RvcnkpIDwgMCkgewogICAg ICAgICAgICB3YXJucCgiUGF0aCBuYW1lIHRvbyBsb25nIGZvciB0aW1lc3RhbXAgaW4gWyVzXSIs IG91dHB1dC0+ZGlyZWN0b3J5KTsKICAgICAgICAgICAgZmNsb3NlKGZwKTsKICAgICAgICAgICAg cmV0dXJuIC0yOwogICAgICAgIH0KICAgICAgICBpZiAoKGZwX3RzID0gZm9wZW4ocGF0aCwgInIi KSkgPT0gTlVMTCkgewogICAgICAgICAgICByZWNyZWF0ZV90czoKICAgICAgICAgICAgY3JlYXRp bWUgPSB0aW1lKE5VTEwpOwogICAgICAgICAgICBpZiAoKGZwX3RzID0gZm9wZW4ocGF0aCwgInci KSkgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgd2FybnAoIlVuYWJsZSB0byB3cml0ZSB0aGUg dGltZXN0YW1wIFslc10iLCBwYXRoKTsKICAgICAgICAgICAgICAgIGZjbG9zZShmcCk7CiAgICAg ICAgICAgICAgICByZXR1cm4gLTM7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnByaW50Zihm cF90cywgIiVsbHVcbiIsICh1bnNpZ25lZCBsb25nIGxvbmcpIGNyZWF0aW1lKTsKICAgICAgICB9 IGVsc2UgewogICAgICAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgY3JlYXRpbWVfOwoKICAgICAg ICAgICAgaWYgKGZzY2FuZihmcF90cywgIiVsbHUiLCAmY3JlYXRpbWVfKSA8PSAwKSB7CiAgICAg ICAgICAgICAgICBmY2xvc2UoZnBfdHMpOwogICAgICAgICAgICAgICAgZ290byByZWNyZWF0ZV90 czsKICAgICAgICAgICAgfQogICAgICAgICAgICBjcmVhdGltZSA9ICh0aW1lX3QpIGNyZWF0aW1l XzsKICAgICAgICB9CiAgICAgICAgaWYgKGZjbG9zZShmcF90cykgIT0gMCkgewogICAgICAgICAg ICB3YXJucCgiVW5hYmxlIHRvIGNsb3NlIFslc10iLCBwYXRoKTsKICAgICAgICAgICAgcmV0dXJu IC0zOwogICAgICAgIH0KICAgICAgICBvdXRwdXQtPmNyZWF0aW1lID0gY3JlYXRpbWU7CiAgICAg ICAgaWYgKG91dHB1dC0+bWF4dGltZSkKICAgICAgICAgICAgb3V0cHV0LT5jcmVhdGltZSAtPSAo Y3JlYXRpbWUgJSBvdXRwdXQtPm1heHRpbWUpOwogICAgICAgIG91dHB1dC0+c2l6ZSA9IChvZmZf dCkgZnRlbGwoZnApOwogICAgICAgIG91dHB1dC0+ZnAgPSBmcDsKICAgIH0KICAgIGlmICgob3V0 cHV0LT5tYXhzaXplICE9IDApICYmIChvdXRwdXQtPm1heHRpbWUgIT0gMCkpIHsKICAgICAgICBp ZiAob3V0cHV0LT5zaXplID49IG91dHB1dC0+bWF4c2l6ZSB8fAogICAgICAgICAgICBub3cgPiAo b3V0cHV0LT5jcmVhdGltZSArIG91dHB1dC0+bWF4dGltZSkpIHsKICAgICAgICAgICAgc3RydWN0 IHRtICp0aW1lX2dtOwogICAgICAgICAgICBjaGFyIHBhdGhbUEFUSF9NQVhdOwogICAgICAgICAg ICBjaGFyIG5ld3BhdGhbUEFUSF9NQVhdOwoKICAgICAgICAgICAgaWYgKG91dHB1dC0+ZnAgPT0g TlVMTCkgewogICAgICAgICAgICAgICAgd2FybmYoIkludGVybmFsIGluY29uc2lzdGVuY3kiKTsK ICAgICAgICAgICAgICAgIHJldHVybiAtNjsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAo KHRpbWVfZ20gPSBnbXRpbWUoJm5vdykpID09IE5VTEwpIHsKICAgICAgICAgICAgICAgIHdhcm5w KCJVbmFibGUgdG8gZmluZCB0aGUgY3VycmVudCBkYXRlIik7CiAgICAgICAgICAgICAgICByZXR1 cm4gLTQ7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHNucHJpbnRmKG5ld3BhdGgsIHNp emVvZiBuZXdwYXRoLCAiJXMvIiBPVVRQVVRfRElSX0xPR0ZJTEVTX1BSRUZJWCwKICAgICAgICAg ICAgICAgIG91dHB1dC0+ZGlyZWN0b3J5KSA8IDApCiAgICAgICAgICAgIHsKICAgICAgICAgICAg ICAgIHdhcm5wKCJQYXRoIG5hbWUgdG9vIGxvbmcgZm9yIG5ldyBwYXRoIGluIFslc10iLCBvdXRw dXQtPmRpcmVjdG9yeSk7CiAgICAgICAgICAgICAgICByZXR1cm4gLTI7CiAgICAgICAgICAgIH0K ICAgICAgICAgICAgaWYgKHN0cmZ0aW1lKG5ld3BhdGggKyBzdHJsZW4obmV3cGF0aCksIHNpemVv ZiBuZXdwYXRoIC0gc3RybGVuKG5ld3BhdGgpLAogICAgICAgICAgICAgICAgICAgICAgICBPVVRQ VVRfRElSX0xPR0ZJTEVTX1NVRkZJWCwgdGltZV9nbSkgPT0gMCkKICAgICAgICAgICAgewogICAg ICAgICAgICAgICAgd2FybnAoIlBhdGggbmFtZSB0b28gbG9uZyBmb3IgbmV3IHBhdGggaW4gWyVz XSIsIG91dHB1dC0+ZGlyZWN0b3J5KTsKICAgICAgICAgICAgICAgIHJldHVybiAtMjsKICAgICAg ICAgICAgfQogICAgICAgICAgICBpZiAoc25wcmludGYocGF0aCwgc2l6ZW9mIHBhdGgsICIlcy8i IE9VVFBVVF9ESVJfQ1VSUkVOVCwKICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LT5kaXJl Y3RvcnkpIDwgMCkgewogICAgICAgICAgICAgICAgd2FybnAoIlBhdGggbmFtZSB0b28gbG9uZyBm b3IgY3VycmVudCBpbiBbJXNdIiwgb3V0cHV0LT5kaXJlY3RvcnkpOwogICAgICAgICAgICAgICAg cmV0dXJuIC0yOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJvdGF0ZUxvZ0ZpbGVzKG91dHB1 dC0+ZGlyZWN0b3J5LCBvdXRwdXQtPm1heGZpbGVzKTsKICAgICAgICAgICAgZmNsb3NlKG91dHB1 dC0+ZnApOwogICAgICAgICAgICBvdXRwdXQtPmZwID0gTlVMTDsKICAgICAgICAgICAgaWYgKHJl bmFtZShwYXRoLCBuZXdwYXRoKSA8IDAgJiYgdW5saW5rKHBhdGgpIDwgMCkgewogICAgICAgICAg ICAgICAgd2FybnAoIlVuYWJsZSB0byByZW5hbWUgWyVzXSB0byBbJXNdIiwgcGF0aCwgbmV3cGF0 aCk7CiAgICAgICAgICAgICAgICByZXR1cm4gLTU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAg aWYgKG91dHB1dC0+cG9zdHJvdGF0ZV9jbWQgIT0gTlVMTCkKICAgICAgICAgICAgICAgIHNwYXdu Q29tbWFuZChvdXRwdXQtPnBvc3Ryb3RhdGVfY21kLCBkYXRlLCBwcmcsIG5ld3BhdGgpOwogICAg ICAgICAgICBpZiAoc25wcmludGYocGF0aCwgc2l6ZW9mIHBhdGgsICIlcy8iIE9VVFBVVF9ESVJf VElNRVNUQU1QLAogICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQtPmRpcmVjdG9yeSkgPCAw KSB7CiAgICAgICAgICAgICAgICB3YXJucCgiUGF0aCBuYW1lIHRvbyBsb25nIGZvciB0aW1lc3Rh bXAgaW4gWyVzXSIsIG91dHB1dC0+ZGlyZWN0b3J5KTsKICAgICAgICAgICAgICAgIHJldHVybiAt MjsKICAgICAgICAgICAgfQogICAgICAgICAgICB1bmxpbmsocGF0aCk7CiAgICAgICAgICAgIGdv dG8gdGVzdGRpcjsKICAgICAgICB9CiAgICB9CiAgICBpZiAob3V0cHV0LT5kdC5zYW1lX2NvdW50 ZXIgPiAwVSkgewogICAgICAgIGlmIChvdXRwdXQtPmR0LnNhbWVfY291bnRlciA9PSAxKSB7CiAg ICAgICAgICAgIGZwcmludGYob3V0cHV0LT5mcCwgTEFTVF9PVVRQVVRfVFdJQ0UpOwogICAgICAg ICAgICBvdXRwdXQtPnNpemUgKz0gKG9mZl90KSAoc2l6ZW9mIExBU1RfT1VUUFVUX1RXSUNFIC0g KHNpemVfdCkgMVUpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGludCBmcHM7CgogICAg ICAgICAgICBmcHMgPSBmcHJpbnRmKG91dHB1dC0+ZnAsIExBU1RfT1VUUFVULCBvdXRwdXQtPmR0 LnNhbWVfY291bnRlcik7CiAgICAgICAgICAgIGlmIChmcHMgPj0gKGludCkgKHNpemVvZiBMQVNU X09VVFBVVCAtIHNpemVvZiAiJXUiKSkgewogICAgICAgICAgICAgICAgb3V0cHV0LT5zaXplICs9 IChvZmZfdCkgZnBzOwogICAgICAgICAgICB9IGVsc2UgaWYgKGZwcyA+IDApIHsKICAgICAgICAg ICAgICAgIG91dHB1dC0+c2l6ZSArPSAob2ZmX3QpIChzaXplb2YgTEFTVF9PVVRQVVQgKyAoc2l6 ZV90KSAxMFUpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIG91dHB1dC0+ZHQuc2Ft ZV9jb3VudGVyID0gMFU7CiAgICB9CiAgICBpZiAoZGF0ZVswXSkKICAgICAgICBmcHJpbnRmKG91 dHB1dC0+ZnAsICIlcyAiLCBkYXRlKTsKICAgIGZwcmludGYob3V0cHV0LT5mcCwgIlslc10gJXNc biIsIHByZywgaW5mbyk7CiAgICBvdXRwdXQtPnNpemUgKz0gKG9mZl90KSBzdHJsZW4oZGF0ZSk7 CiAgICBvdXRwdXQtPnNpemUgKz0gKG9mZl90KSAoc2l6ZW9mX3ByZyArIHNpemVvZl9pbmZvKTsK ICAgIG91dHB1dC0+c2l6ZSArPSAob2ZmX3QpIDU7CiAgICBpZiAob3V0cHV0LT5mbHVzaCA9PSBG TFVTSF9BTFdBWVMgfHwKICAgICAgICAob3V0cHV0LT5mbHVzaCA9PSBGTFVTSF9ERUZBVUxUICYm IHN5bmNocm9ub3VzICE9IChzaWdfYXRvbWljX3QpIDApKSB7CiAgICAgICAgZmZsdXNoKG91dHB1 dC0+ZnApOwogICAgfQogICAgcmV0dXJuIDA7Cn0KCnN0YXRpYyB2b2lkIGZsdXNoQWxsKHZvaWQp CnsKICAgIENvbmZpZ0Jsb2NrICpibG9jayA9IGNvbmZpZ19ibG9ja3M7CiAgICB3aGlsZSAoYmxv Y2spIHsKICAgICAgICBpZiAoYmxvY2stPm91dHB1dCAmJiBibG9jay0+b3V0cHV0LT5mcCkKICAg ICAgICAgICAgZmZsdXNoX3VubG9ja2VkKGJsb2NrLT5vdXRwdXQtPmZwKTsKICAgICAgICBibG9j ayA9IGJsb2NrLT5uZXh0X2Jsb2NrOwogICAgfQp9CgpzdGF0aWMgaW50IHByb2Nlc3NMb2dMaW5l KGNvbnN0IGludCBsb2djb2RlLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIg KiBjb25zdCBwcmcsIGNoYXIgKiBjb25zdCBpbmZvKQp7CiAgICBpbnQgb3ZlY3RvclsxNl07CiAg ICBDb25maWdCbG9jayAqYmxvY2sgPSBjb25maWdfYmxvY2tzOwogICAgUmVnZXhXaXRoU2lnbiAq dGhpc19yZWdleDsKICAgIGNvbnN0IGludCBmYWNpbGl0eSA9IExPR19GQUMobG9nY29kZSk7CiAg ICBjb25zdCBpbnQgcHJpb3JpdHkgPSBMT0dfUFJJKGxvZ2NvZGUpOwogICAgaW50IG5iX3JlZ2V4 ZXM7CiAgICBpbnQgaW5mb19sZW47CiAgICBpbnQgcHJnX2xlbjsKICAgIGludCByZWdleF9yZXN1 bHQ7CgogICAgd2hpbGUgKGJsb2NrICE9IE5VTEwpIHsKICAgICAgICBpZiAoYmxvY2stPmZhY2ls aXRpZXMgIT0gTlVMTCkgewogICAgICAgICAgICBpbnQgbmIgPSBibG9jay0+bmJfZmFjaWxpdGll czsKICAgICAgICAgICAgY29uc3QgaW50ICogY29uc3QgZmFjaWxpdGllcyA9IGJsb2NrLT5mYWNp bGl0aWVzOwoKICAgICAgICAgICAgd2hpbGUgKG5iID4gMCkgewogICAgICAgICAgICAgICAgbmIt LTsKICAgICAgICAgICAgICAgIGlmIChmYWNpbGl0eSA9PSBmYWNpbGl0aWVzW25iXSkgewogICAg ICAgICAgICAgICAgICAgIGdvdG8gZmFjaWxpdHlfb2s7CiAgICAgICAgICAgICAgICB9CiAgICAg ICAgICAgIH0KICAgICAgICAgICAgZ290byBuZXh0YmxvY2s7CiAgICAgICAgfQogICAgICAgIGZh Y2lsaXR5X29rOgogICAgICAgIGlmIChwcmlvcml0eSA+IGJsb2NrLT5taW5pbXVtICYmIHByaW9y aXR5IDwgYmxvY2stPm1heGltdW0pIHsKICAgICAgICAgICAgZ290byBuZXh0YmxvY2s7CiAgICAg ICAgfQogICAgICAgIGlmIChibG9jay0+cHJvZ3JhbSAhPSBOVUxMICYmIHN0cmNhc2VjbXAoYmxv Y2stPnByb2dyYW0sIHByZykgIT0gMCkgewogICAgICAgICAgICBnb3RvIG5leHRibG9jazsKICAg ICAgICB9CiAgICAgICAgaWYgKChuYl9yZWdleGVzID0gYmxvY2stPnByb2dyYW1fbmJfcmVnZXhl cykgPiAwKSB7CiAgICAgICAgICAgIHJlZ2V4X3Jlc3VsdCA9IDA7CiAgICAgICAgICAgIGlmICgo cHJnX2xlbiA9IChpbnQpIHN0cmxlbihwcmcpKSA8IDApIHsKICAgICAgICAgICAgICAgIGdvdG8g bmV4dGJsb2NrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRoaXNfcmVnZXggPSBibG9jay0+ cHJvZ3JhbV9yZWdleGVzd2l0aHNpZ247CiAgICAgICAgICAgIGRvIHsKICAgICAgICAgICAgICAg IGlmICh0aGlzX3JlZ2V4LT5zaWduID09IFJFR0VYX1NJR05fUE9TSVRJVkUpIHsKICAgICAgICAg ICAgICAgICAgICBpZiAocGNyZV9leGVjKHRoaXNfcmVnZXgtPnJlZ2V4LnBjcmUsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzX3JlZ2V4LT5yZWdleC5wY3JlX2V4dHJhLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJnLCBwcmdfbGVuLCAwLCAwLCBvdmVj dG9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVJSQVlfU0laRShvdmVjdG9y KSkgPj0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICByZWdleF9yZXN1bHQgPSAxOwogICAg ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAg ICAgICAgaWYgKHBjcmVfZXhlYyh0aGlzX3JlZ2V4LT5yZWdleC5wY3JlLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdGhpc19yZWdleC0+cmVnZXgucGNyZV9leHRyYSwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZywgcHJnX2xlbiwgMCwgMCwgb3ZlY3RvciwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFSUkFZX1NJWkUob3ZlY3RvcikpIDwg MCkgewogICAgICAgICAgICAgICAgICAgICAgICByZWdleF9yZXN1bHQgPSAxOwogICAgICAgICAg ICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHRoaXNfcmVnZXgr KzsKICAgICAgICAgICAgICAgIG5iX3JlZ2V4ZXMtLTsKICAgICAgICAgICAgfSB3aGlsZSAobmJf cmVnZXhlcyA+IDApOwogICAgICAgICAgICBpZiAocmVnZXhfcmVzdWx0ID09IDApIHsKICAgICAg ICAgICAgICAgIGdvdG8gbmV4dGJsb2NrOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAg IGlmICgoaW5mb19sZW4gPSAoaW50KSBzdHJsZW4oaW5mbykpIDw9IDApIHsKICAgICAgICAgICAg Z290byBuZXh0YmxvY2s7CiAgICAgICAgfQogICAgICAgIGlmICgobmJfcmVnZXhlcyA9IGJsb2Nr LT5uYl9yZWdleGVzKSA+IDAgJiYgKmluZm8gIT0gMCkgewogICAgICAgICAgICByZWdleF9yZXN1 bHQgPSAwOwogICAgICAgICAgICB0aGlzX3JlZ2V4ID0gYmxvY2stPnJlZ2V4ZXN3aXRoc2lnbjsK ICAgICAgICAgICAgZG8gewogICAgICAgICAgICAgICAgaWYgKHRoaXNfcmVnZXgtPnNpZ24gPT0g UkVHRVhfU0lHTl9QT1NJVElWRSkgewogICAgICAgICAgICAgICAgICAgIGlmIChwY3JlX2V4ZWMo dGhpc19yZWdleC0+cmVnZXgucGNyZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHRoaXNfcmVnZXgtPnJlZ2V4LnBjcmVfZXh0cmEsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpbmZvLCBpbmZvX2xlbiwgMCwgMCwgb3ZlY3RvciwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEFSUkFZX1NJWkUob3ZlY3RvcikpID49IDApIHsKICAgICAgICAgICAg ICAgICAgICAgICAgcmVnZXhfcmVzdWx0ID0gMTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAg ICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIGlmIChwY3JlX2V4ZWModGhp c19yZWdleC0+cmVnZXgucGNyZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRo aXNfcmVnZXgtPnJlZ2V4LnBjcmVfZXh0cmEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpbmZvLCBpbmZvX2xlbiwgMCwgMCwgb3ZlY3RvciwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEFSUkFZX1NJWkUob3ZlY3RvcikpIDwgMCkgewogICAgICAgICAgICAgICAg ICAgICAgICByZWdleF9yZXN1bHQgPSAxOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg ICAgICAgIH0KICAgICAgICAgICAgICAgIHRoaXNfcmVnZXgrKzsKICAgICAgICAgICAgICAgIG5i X3JlZ2V4ZXMtLTsKICAgICAgICAgICAgfSB3aGlsZSAobmJfcmVnZXhlcyA+IDApOwogICAgICAg ICAgICBpZiAocmVnZXhfcmVzdWx0ID09IDApIHsKICAgICAgICAgICAgICAgIGdvdG8gbmV4dGJs b2NrOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICgoc2l6ZV90KSBpbmZvX2xl biA+IE1BWF9MT0dfTEVOR1RIKSB7CiAgICAgICAgICAgIGluZm9bTUFYX0xPR19MRU5HVEhdID0g MDsKICAgICAgICB9CgogICAgICAgIGNoYXIgZGF0ZWJ1ZlsxMDBdID0geyAnXDAnIH07CiAgICAg ICAgaWYgKGJsb2NrLT5vdXRwdXQgJiYgYmxvY2stPm91dHB1dC0+c3RhbXBfZm10WzBdKSB7CiAg ICAgICAgICAgIGNvbnN0IHRpbWVfdCBub3cgPSB0aW1lKE5VTEwpOwogICAgICAgICAgICBzdHJ1 Y3QgdG0gKnRtID0gbG9jYWx0aW1lKCZub3cpOwogICAgICAgICAgICBpZiAodG0pCiAgICAgICAg ICAgICAgICBzdHJmdGltZShkYXRlYnVmLCBzaXplb2YgZGF0ZWJ1ZiwgYmxvY2stPm91dHB1dC0+ c3RhbXBfZm10LCB0bSk7CiAgICAgICAgfQoKICAgICAgICBib29sIGRvX2JyZWFrID0gZmFsc2U7 CiAgICAgICAgaWYgKGJsb2NrLT5vdXRwdXQgIT0gTlVMTCkgewogICAgICAgICAgICB3cml0ZUxv Z0xpbmUoYmxvY2stPm91dHB1dCwgZGF0ZWJ1ZiwgcHJnLCBpbmZvKTsKICAgICAgICAgICAgaWYg KGJsb2NrLT5icmspCiAgICAgICAgICAgICAgICBkb19icmVhayA9IHRydWU7CiAgICAgICAgfQog ICAgICAgIGlmIChibG9jay0+Y29tbWFuZCAhPSBOVUxMKSB7CiAgICAgICAgICAgIHNwYXduQ29t bWFuZChibG9jay0+Y29tbWFuZCwgZGF0ZWJ1ZiwgcHJnLCBpbmZvKTsKICAgICAgICAgICAgaWYg KGJsb2NrLT5icmspCiAgICAgICAgICAgICAgICBkb19icmVhayA9IHRydWU7CiAgICAgICAgfQog ICAgICAgIGlmIChkb19icmVhaykKICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIG5leHRibG9j azoKCiAgICAgICAgYmxvY2sgPSBibG9jay0+bmV4dF9ibG9jazsKICAgIH0KCiAgICByZXR1cm4g MDsKfQoKc3RhdGljIGludCBkb0xvZyhjb25zdCBjaGFyICogZm10LCAuLi4pCnsKICAgIGNoYXIg aW5mb2J1Zls1MTJdOwogICAgdmFfbGlzdCBhcDsKCiAgICB2YV9zdGFydChhcCwgZm10KTsKICAg IHZzbnByaW50ZiAoaW5mb2J1Ziwgc2l6ZW9mIGluZm9idWYsIGZtdCwgYXApOwogICAgdmFfZW5k KGFwKTsKCiAgICByZXR1cm4gcHJvY2Vzc0xvZ0xpbmUoTE9HX1NZU0xPRywgIm1ldGFsb2ciLCBp bmZvYnVmKTsKfQoKc3RhdGljIHZvaWQgc2FuaXRpemUoY2hhciAqIGNvbnN0IGxpbmVfKQp7CiAg ICByZWdpc3RlciB1bnNpZ25lZCBjaGFyICpsaW5lID0gKHVuc2lnbmVkIGNoYXIgKikgbGluZV87 CgogICAgd2hpbGUgKCpsaW5lICE9IDBVKSB7CiAgICAgICAgaWYgKElTQ1RSTENPREUoKmxpbmUp KSB7CiAgICAgICAgICAgICpsaW5lID0gTk9OUFJJTlRBQkxFX1NVU1RJVFVURV9DSEFSOwogICAg ICAgIH0KICAgICAgICBsaW5lKys7CiAgICB9Cn0KCnN0YXRpYyBpbnQgbG9nX2xpbmUoTG9nTGlu ZVR5cGUgbG9nbGluZXR5cGUsIGNoYXIgKmJ1ZikKewogICAgaW50IGxvZ2NvZGU7CiAgICBjb25z dCBjaGFyICpwcmc7CiAgICBjaGFyICppbmZvOwoKICAgIHNhbml0aXplKGJ1Zik7CiAgICBpZiAo cGFyc2VMb2dMaW5lKGxvZ2xpbmV0eXBlLCBidWYsICZsb2djb2RlLCAmcHJnLCAmaW5mbykgPCAw KQogICAgICByZXR1cm4gLTE7CiAgICByZXR1cm4gcHJvY2Vzc0xvZ0xpbmUobG9nY29kZSwgcHJn LCBpbmZvKTsKfQoKc3RhdGljIGludCBsb2dfdWRwKGNoYXIgKmJ1ZiwgaW50IGJzaXplKQp7CiAg ICBidWZbYnNpemVdID0gJ1wwJzsKICAgIHdyaXRlKDEsIGJ1Ziwgc3RybGVuKGJ1ZikpOwogICAg cmV0dXJuIGxvZ19saW5lKExPR0xJTkVUWVBFX1NZU0xPRywgYnVmKTsKfQoKc3RhdGljIGludCBs b2dfa2VybmVsKGNoYXIgKmJ1ZiwgaW50IGJzaXplKQp7CiAgICBjaGFyICpzID0gYnVmOwogICAg aW50IG4gPSAwLCBzdGFydCA9IDA7CgogICAgcyA9IGJ1ZjsKICAgIHdoaWxlIChuIDwgYnNpemUp IHsKICAgICAgICBpZiAoc1tuXSA9PSAnXG4nKSB7CiAgICAgICAgICAgIHNbbl0gPSAnXDAnOwog ICAgICAgICAgICBsb2dfbGluZShMT0dMSU5FVFlQRV9LTE9HLCAmc1tzdGFydF0pOwogICAgICAg ICAgICBzdGFydCA9IG4gKyAxOwogICAgICAgIH0KICAgICAgICBuKys7CiAgICB9CgogICAgLyog d2UgY291bGRuJ3QgZmluZCBhbnkgXG4gPz8/CiAgICAgICA9PiBpbnZhbGlkYXRlIHRoaXMgYnVm ZmVyICovCiAgICBpZiAoc3RhcnQgPT0gMCkKICAgICAgcmV0dXJuIDA7CgogICAgcmV0dXJuIGJz aXplIC0gc3RhcnQ7Cn0KCnN0YXRpYyBpbnQgcHJvY2Vzcyhjb25zdCBpbnQgc29ja2V0c1tdKQp7 CiAgICBzdHJ1Y3QgcG9sbGZkIGZkc1szXSwgKnNpZ2xvZywgKnN5c2xvZywgKmtsb2c7CiAgICBp bnQgbmZkczsKICAgIGludCBldmVudDsKICAgIHNzaXplX3QgcmQ7CiAgICBpbnQgbGQ7CiAgICBj aGFyIGJ1ZmZlclsyXVs0MDk2XTsKICAgIGludCBicG9zOwoKICAgIHNpZ2xvZyA9IHN5c2xvZyA9 IGtsb2cgPSBOVUxMOwogICAgbmZkcyA9IDA7CgogICAgc2lnbG9nID0gJmZkc1tuZmRzXTsKICAg IGZkc1tuZmRzXS5mZCA9IGRvbG9nX3F1ZXVlWzBdOwogICAgZmRzW25mZHNdLmV2ZW50cyA9IFBP TExJTiB8IFBPTExFUlIgfCBQT0xMSFVQIHwgUE9MTE5WQUw7CiAgICBmZHNbbmZkc10ucmV2ZW50 cyA9IDA7CiAgICArK25mZHM7CiAgICBpZiAoc29ja2V0c1swXSA+PSAwKSB7CiAgICAgICAgc3lz bG9nID0gJmZkc1tuZmRzXTsKICAgICAgICBmZHNbbmZkc10uZmQgPSBzb2NrZXRzWzBdOwogICAg ICAgIGZkc1tuZmRzXS5ldmVudHMgPSBQT0xMSU4gfCBQT0xMRVJSIHwgUE9MTEhVUCB8IFBPTExO VkFMOwogICAgICAgIGZkc1tuZmRzXS5yZXZlbnRzID0gMDsKICAgICAgICArK25mZHM7CiAgICB9 CiAgICBpZiAoc29ja2V0c1sxXSA+PSAwKSB7CiAgICAgICAga2xvZyA9ICZmZHNbbmZkc107CiAg ICAgICAgZmRzW25mZHNdLmZkID0gc29ja2V0c1sxXTsKICAgICAgICBmZHNbbmZkc10uZXZlbnRz ID0gUE9MTElOIHwgUE9MTEVSUiB8IFBPTExIVVAgfCBQT0xMTlZBTDsKICAgICAgICBmZHNbbmZk c10ucmV2ZW50cyA9IDA7CiAgICAgICAgKytuZmRzOwogICAgfQoKICAgIGJwb3MgPSAwOwogICAg Zm9yICg7OykgewogICAgICAgIHdoaWxlIChwb2xsKGZkcywgbmZkcywgLTEpIDwgMCAmJiBlcnJu byA9PSBFSU5UUikKICAgICAgICAgICAgOwoKICAgICAgICAvKiBTaWduYWwgcXVldWUgKi8KICAg ICAgICBpZiAoc2lnbG9nICYmIHNpZ2xvZy0+cmV2ZW50cykgewogICAgICAgICAgICBldmVudCA9 IHNpZ2xvZy0+cmV2ZW50czsKICAgICAgICAgICAgc2lnbG9nLT5yZXZlbnRzID0gMDsKICAgICAg ICAgICAgaWYgKGV2ZW50ICE9IFBPTExJTikgewogICAgICAgICAgICAgICAgd2FybigiU2lnbmFs IHF1ZXVlIHNvY2tldCBlcnJvciAtIGFib3J0aW5nIik7CiAgICAgICAgICAgICAgICBjbG9zZShz aWdsb2ctPmZkKTsKICAgICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgICAgfQoKICAg ICAgICAgICAgc2lnbmFsX2RvTG9nX2RlcXVldWUoKTsKICAgICAgICB9CgogICAgICAgIC8qIFVE UCBzb2NrZXQgKHN5c2xvZykgKi8KICAgICAgICBpZiAoc3lzbG9nICYmIHN5c2xvZy0+cmV2ZW50 cykgewogICAgICAgICAgICBldmVudCA9IHN5c2xvZy0+cmV2ZW50czsKICAgICAgICAgICAgc3lz bG9nLT5yZXZlbnRzID0gMDsKICAgICAgICAgICAgaWYgKGV2ZW50ICE9IFBPTExJTikgewogICAg ICAgICAgICAgICAgd2FybigiU3lzbG9nIHNvY2tldCBlcnJvciAtIGFib3J0aW5nIik7CiAgICAg ICAgICAgICAgICBjbG9zZShzeXNsb2ctPmZkKTsKICAgICAgICAgICAgICAgIHJldHVybiAtMTsK ICAgICAgICAgICAgfQoKICAgICAgICAgICAgLyogcmVjZWl2ZSBhIHNpbmdsZSBsb2cgbGluZSAo VURQKSBhbmQgcHJvY2VzcyBpdC4gcmVjZWl2ZSBvbmUgYnl0ZSBmb3IgJ1wwJyAqLwogICAgICAg ICAgICB3aGlsZSAoKChyZCA9IHJlYWQoc3lzbG9nLT5mZCwgYnVmZmVyWzBdLCBzaXplb2YoYnVm ZmVyWzBdKS0xKSkgPCAwKSAmJiAoZXJybm8gPT0gRUlOVFIpKQogICAgICAgICAgICAgICAgOwog ICAgICAgICAgICBpZiAocmQgPT0gLTEpCiAgICAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAg ICAgICAgIGxvZ191ZHAoYnVmZmVyWzBdLCByZCk7CiAgICAgICAgfQoKICAgICAgICAvKiBTVFJF QU1fU09DS0VUIChrbG9nKSAqLwogICAgICAgIGlmIChrbG9nICYmIGtsb2ctPnJldmVudHMpIHsK ICAgICAgICAgICAgZXZlbnQgPSBrbG9nLT5yZXZlbnRzOwogICAgICAgICAgICBrbG9nLT5yZXZl bnRzID0gMDsKICAgICAgICAgICAgaWYgKGV2ZW50ICE9IFBPTExJTikgewogICAgICAgICAgICAg ICAgd2FybigiS2xvZyBzb2NrZXQgZXJyb3IgLSBhYm9ydGluZyIpOwogICAgICAgICAgICAgICAg Y2xvc2Uoa2xvZy0+ZmQpOwogICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICAgICB9 CgogICAgICAgICAgICAvKiByZWNlaXZlIGEgY2h1bmsgb2Yga2VybmVsIGxvZyBtZXNzYWdlLi4u ICovCiAgICAgICAgICAgIHdoaWxlICgocmQgPSByZWFkKGtsb2ctPmZkLCAmYnVmZmVyWzFdW2Jw b3NdLCBzaXplb2YoYnVmZmVyWzFdKSAtIGJwb3MpKSA8IDAgJiYgZXJybm8gPT0gRUlOVFIpCiAg ICAgICAgICAgICAgICA7CiAgICAgICAgICAgIGlmIChyZCA9PSAtMSkKICAgICAgICAgICAgICAg IHJldHVybiAtMTsKCiAgICAgICAgICAgIC8qIC4uLiBhbmQgcHJvY2VzcyB0aGVtIGxpbmUgYnkg bGluZSAqLwogICAgICAgICAgICByZCArPSBicG9zOwogICAgICAgICAgICBpZiAoKGxkID0gbG9n X2tlcm5lbChidWZmZXJbMV0sIHJkKSkgPiAwKSB7CiAgICAgICAgICAgICAgICAvKiBtb3ZlIHJl bWFpbmRlciBvZiBhIG1lc3NhZ2UgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgYnVmZmVyCiAgICAg ICAgICAgICAgICAgICBpdCdsbCBiZSBsb2dnZWQgb25jZSB3ZSBjYW4gcmVhZCB0aGUgd2hvbGUg bGluZSBpbnRvIGJ1ZmZlclsxXSAqLwogICAgICAgICAgICAgICAgbWVtbW92ZShidWZmZXJbMV0s ICZidWZmZXJbMV1bbGRdLCBicG9zID0gcmQgLSBsZCk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAg ICAgICAgICAgICAgICBicG9zID0gMDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAg IHJldHVybiAwOwp9CgpzdGF0aWMgaW50IGRlbGV0ZV9waWRfZmlsZShjb25zdCBjaGFyICogY29u c3QgcGlkX2ZpbGUpCnsKICAgIHJldHVybiBwaWRfZmlsZSA/IHVubGluayhwaWRfZmlsZSkgOiAw Owp9CgpzdGF0aWMgaW50IHVwZGF0ZV9waWRfZmlsZShjb25zdCBjaGFyICogY29uc3QgcGlkX2Zp bGUpCnsKICAgIGludCBmZDsKICAgIEZJTEUgKmZwOwoKICAgIGlmIChwaWRfZmlsZSA9PSBOVUxM IHx8ICpwaWRfZmlsZSAhPSAnLycpCiAgICAgICAgcmV0dXJuIDA7CgogICAgZmQgPSBvcGVuKHBp ZF9maWxlLCBPX0NSRUFUIHwgT19XUk9OTFkgfCBPX1RSVU5DIHwgT19OT0ZPTExPVywgMDY0NCk7 CiAgICBpZiAoZmQgPT0gLTEpCiAgICAgICAgZ290byBlcnI7CiAgICBpZiAoZmNobW9kKGZkLCAw NjQ0KSkKICAgICAgICBnb3RvIGVycjsKCiAgICBmcCA9IGZkb3BlbihmZCwgInciKTsKICAgIGlm ICghZnApCiAgICAgICAgZ290byBlcnI7CiAgICBpZiAoZnByaW50ZihmcCwgIiVsdVxuIiwgKHVu c2lnbmVkIGxvbmcpZ2V0cGlkKCkpIDw9IDApCiAgICAgICAgZ290byBlcnI7CiAgICBpZiAoZmVy cm9yKGZwKSkKICAgICAgICBnb3RvIGVycjsKICAgIGlmIChmY2xvc2UoZnApKQogICAgICAgIGdv dG8gZXJyOwoKICAgIHJldHVybiAwOwoKIGVycjoKICAgIHdhcm5wKCJwaWQgZmlsZSBjcmVhdGlv biBmYWlsZWQ6ICVzIiwgcGlkX2ZpbGUpOwogICAgcmV0dXJuIC0xOwp9CgpzdGF0aWMgdm9pZCBl eGl0X2hvb2sodm9pZCkKewogICAgLyogRmx1c2ggYWxsIGJ1ZmZlcnMganVzdCB0byBiZSBzdXJl ICovCiAgICBzeW5jaHJvbm91cyA9IChzaWdfYXRvbWljX3QpIDE7CiAgICBmbHVzaEFsbCgpOwog ICAgaWYgKGNoaWxkID4gKHBpZF90KSAwKSB7CiAgICAgICAga2lsbChjaGlsZCwgU0lHVEVSTSk7 CiAgICB9CiAgICBkZWxldGVfcGlkX2ZpbGUocGlkX2ZpbGUpOwp9CgpzdGF0aWMgdm9pZCBzaWdu YWxfZG9Mb2dfcXVldWUoY29uc3QgY2hhciAqZm10LCBjb25zdCB1bnNpZ25lZCBpbnQgcGlkLCBj b25zdCBpbnQgc3RhdHVzKQp7CiAgICBzc2l6ZV90IHJldDsKICAgIHVuc2lnbmVkIGludCBmbXRf bGVuID0gKHVuc2lnbmVkIGludClzdHJsZW4oZm10KTsKICAgIGNoYXIgYnVmW3NpemVvZihwaWQp ICsgc2l6ZW9mKHN0YXR1cykgKyBzaXplb2YoZm10X2xlbildOwogICAgbWVtY3B5KGJ1ZiwgJnBp ZCwgc2l6ZW9mKHBpZCkpOwogICAgbWVtY3B5KGJ1ZitzaXplb2YocGlkKSwgJnN0YXR1cywgc2l6 ZW9mKHN0YXR1cykpOwogICAgbWVtY3B5KGJ1ZitzaXplb2YocGlkKStzaXplb2Yoc3RhdHVzKSwg JmZtdF9sZW4sIHNpemVvZihmbXRfbGVuKSk7CiAgICByZXQgPSB3cml0ZShkb2xvZ19xdWV1ZVsx XSwgYnVmLCBzaXplb2YoYnVmKSk7CiAgICBhc3NlcnQocmV0ID09IHNpemVvZihidWYpKTsKICAg IHJldCA9IHdyaXRlKGRvbG9nX3F1ZXVlWzFdLCBmbXQsIGZtdF9sZW4pOwogICAgYXNzZXJ0KHJl dCA9PSBmbXRfbGVuKTsKfQoKc3RhdGljIHZvaWQgc2lnbmFsX2RvTG9nX2RlcXVldWUodm9pZCkK ewogICAgdW5zaWduZWQgaW50IHBpZCwgZm10X2xlbjsKICAgIGludCBzdGF0dXM7CiAgICBjaGFy ICpidWY7CiAgICBzc2l6ZV90IHJldDsKCiAgICByZXQgPSByZWFkKGRvbG9nX3F1ZXVlWzBdLCAm cGlkLCBzaXplb2YocGlkKSk7CiAgICBhc3NlcnQocmV0ID09IHNpemVvZihwaWQpKTsKICAgIHJl dCA9IHJlYWQoZG9sb2dfcXVldWVbMF0sICZzdGF0dXMsIHNpemVvZihzdGF0dXMpKTsKICAgIGFz c2VydChyZXQgPT0gc2l6ZW9mKHN0YXR1cykpOwogICAgcmV0ID0gcmVhZChkb2xvZ19xdWV1ZVsw XSwgJmZtdF9sZW4sIHNpemVvZihmbXRfbGVuKSk7CiAgICBhc3NlcnQocmV0ID09IHNpemVvZihm bXRfbGVuKSk7CgogICAgYnVmID0gbWFsbG9jKGZtdF9sZW4rMSk7CiAgICBhc3NlcnQoYnVmICE9 IE5VTEwpOwogICAgcmV0ID0gcmVhZChkb2xvZ19xdWV1ZVswXSwgYnVmLCBmbXRfbGVuKTsKICAg IGFzc2VydChyZXQgPT0gZm10X2xlbik7CiAgICBidWZbZm10X2xlbl0gPSAnXDAnOwoKICAgICsr c3Bhd25fcmVjdXJzaW9uOwogICAgZG9Mb2coYnVmLCBwaWQsIHN0YXR1cyk7CiAgICAtLXNwYXdu X3JlY3Vyc2lvbjsKfQoKX19hdHRyaWJ1dGVfXyAoKG5vcmV0dXJuKSkKc3RhdGljIHZvaWQgbWV0 YWxvZ19zaWduYWxfZXhpdChpbnQgZXhpdF9zdGF0dXMpCnsKICAgIGV4aXRfaG9vaygpOwogICAg X2V4aXQoZXhpdF9zdGF0dXMpOwp9CgpfX2F0dHJpYnV0ZV9fICgobm9yZXR1cm4pKQpzdGF0aWMg dm9pZCBzaWdrY2hsZChpbnQgc2lnKQp7CiAgICBzaWduYWxfZG9Mb2dfcXVldWUoIlByb2Nlc3Mg WyV1XSBkaWVkIHdpdGggc2lnbmFsIFslZF1cbiIsICh1bnNpZ25lZCBpbnQpIGdldHBpZCgpLCBz aWcpOwogICAgbWV0YWxvZ19zaWduYWxfZXhpdChFWElUX0ZBSUxVUkUpOwp9CgpzdGF0aWMgdm9p ZCBzaWdjaGxkKGludCBzaWcpCnsKICAgIHBpZF90IHBpZDsKICAgIHNpZ25lZCBjaGFyIHNob3Vs ZF9leGl0ID0gMDsKICAgIGludCBjaGlsZF9zdGF0dXM7CgogICAgKHZvaWQpIHNpZzsKICAgIHdo aWxlICgocGlkID0gd2FpdHBpZCgocGlkX3QpIC0xLCAmY2hpbGRfc3RhdHVzLCBXTk9IQU5HKSkg PiAocGlkX3QpIDApIHsKICAgICAgICBpZiAocGlkID09IGNoaWxkKSB7CiAgICAgICAgICAgIHNp Z25hbF9kb0xvZ19xdWV1ZSgiS2xvZyBjaGlsZCBbJXVdIGRpZWQuIiwgKHVuc2lnbmVkKSBwaWQs IDApOwogICAgICAgICAgICBzaG91bGRfZXhpdCA9IDE7CiAgICAgICAgfSBlbHNlIHsKICAgICAg ICAgICAgaWYgKFdJRkVYSVRFRChjaGlsZF9zdGF0dXMpICYmIFdFWElUU1RBVFVTKGNoaWxkX3N0 YXR1cykpCiAgICAgICAgICAgICAgICBzaWduYWxfZG9Mb2dfcXVldWUoIkNoaWxkIFsldV0gZXhp dGVkIHdpdGggcmV0dXJuIGNvZGUgJXUuIiwKICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25l ZCkgcGlkLCBXRVhJVFNUQVRVUyhjaGlsZF9zdGF0dXMpKTsKICAgICAgICAgICAgZWxzZSBpZiAo IVdJRkVYSVRFRChjaGlsZF9zdGF0dXMpKQogICAgICAgICAgICAgICAgc2lnbmFsX2RvTG9nX3F1 ZXVlKCJDaGlsZCBbJXVdIGNhdWdodCBzaWduYWwgJXUuIiwKICAgICAgICAgICAgICAgICAgICAg ICh1bnNpZ25lZCkgcGlkLCBXVEVSTVNJRyhjaGlsZF9zdGF0dXMpKTsKICAgICAgICAgICAgZWxz ZSBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgIHNpZ25hbF9kb0xvZ19xdWV1ZSgiQ2hpbGQg WyV1XSBleGl0ZWQgc3VjY2Vzc2Z1bGx5LiIsICh1bnNpZ25lZCkgcGlkLCAwKTsKICAgICAgICB9 CiAgICB9CiAgICBpZiAoc2hvdWxkX2V4aXQgIT0gMCkgewogICAgICAgIGNoaWxkID0gKHBpZF90 KSAwOwogICAgICAgIG1ldGFsb2dfc2lnbmFsX2V4aXQoRVhJVF9GQUlMVVJFKTsKICAgIH0KfQoK c3RhdGljIHZvaWQgc2lndXNyMShpbnQgc2lnKQp7CiAgICAodm9pZCkgc2lnOwoKICAgIHN5bmNo cm9ub3VzID0gKHNpZ19hdG9taWNfdCkgMTsKICAgIHNpZ25hbF9kb0xvZ19xdWV1ZSgiR290IFNJ R1VTUjEgLSBlbmFibGluZyBzeW5jaHJvbm91cyBtb2RlLiIsIDAsIDApOwogICAgZmx1c2hBbGwo KTsKfQoKc3RhdGljIHZvaWQgc2lndXNyMihpbnQgc2lnKQp7CiAgICAodm9pZCkgc2lnOwoKICAg IHN5bmNocm9ub3VzID0gKHNpZ19hdG9taWNfdCkgMDsKICAgIHNpZ25hbF9kb0xvZ19xdWV1ZSgi R290IFNJR1VTUjIgLSBkaXNhYmxpbmcgc3luY2hyb25vdXMgbW9kZS4iLCAwLCAwKTsKfQoKc3Rh dGljIHZvaWQgc2V0c2lnbmFscyh2b2lkKQp7CiAgICBhdGV4aXQoZXhpdF9ob29rKTsKICAgIHNp Z25hbChTSUdDSExELCBzaWdjaGxkKTsKICAgIHNpZ25hbChTSUdQSVBFLCBzaWdrY2hsZCk7CiAg ICBzaWduYWwoU0lHSFVQLCBzaWdrY2hsZCk7CiAgICBzaWduYWwoU0lHVEVSTSwgc2lna2NobGQp OwogICAgc2lnbmFsKFNJR1FVSVQsIHNpZ2tjaGxkKTsKICAgIHNpZ25hbChTSUdJTlQsIHNpZ2tj aGxkKTsKICAgIHNpZ25hbChTSUdVU1IxLCBzaWd1c3IxKTsKICAgIHNpZ25hbChTSUdVU1IyLCBz aWd1c3IyKTsKfQoKI2lmbmRlZiBIQVZFX0RBRU1PTgpzdGF0aWMgaW50IGNsb3NlZGVzY19hbGwo Y29uc3QgaW50IGNsb3Nlc3RkaW4pCnsKICAgIGludCBmb2RkZXI7CgogICAgaWYgKGNsb3Nlc3Rk aW4gIT0gMCkgewogICAgICAgICh2b2lkKSBjbG9zZSgwKTsKICAgICAgICBpZiAoKGZvZGRlciA9 IG9wZW4oIi9kZXYvbnVsbCIsIE9fUkRPTkxZKSkgPT0gLTEpIHsKICAgICAgICAgICAgcmV0dXJu IC0xOwogICAgICAgIH0KICAgICAgICAodm9pZCkgZHVwMihmb2RkZXIsIDApOwogICAgICAgIGlm IChmb2RkZXIgPiAwKSB7CiAgICAgICAgICAgICh2b2lkKSBjbG9zZShmb2RkZXIpOwogICAgICAg IH0KICAgIH0KICAgIGlmICgoZm9kZGVyID0gb3BlbigiL2Rldi9udWxsIiwgT19XUk9OTFkpKSA9 PSAtMSkgewogICAgICAgIHJldHVybiAtMTsKICAgIH0KICAgICh2b2lkKSBkdXAyKGZvZGRlciwg MSk7CiAgICAodm9pZCkgZHVwMigxLCAyKTsKICAgIGlmIChmb2RkZXIgPiAyKSB7CiAgICAgICAg KHZvaWQpIGNsb3NlKGZvZGRlcik7CiAgICB9CgogICAgcmV0dXJuIDA7Cn0KI2VuZGlmCgpzdGF0 aWMgdm9pZCBkb2RhZW1vbml6ZSh2b2lkKQp7CiAgICBpZiAoZGFlbW9uaXplICE9IDApIHsKI2lm bmRlZiBIQVZFX0RBRU1PTgogICAgICAgIHBpZF90IGNoaWxkOwogICAgICAgIGlmICgoY2hpbGQg PSBmb3JrKCkpID09IChwaWRfdCkgLTEpIHsKICAgICAgICAgICAgd2FybnAoIkRhZW1vbml6YXRp b24gZmFpbGVkIC0gZm9yayIpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfSBlbHNlIGlm IChjaGlsZCAhPSAocGlkX3QpIDApIHsKICAgICAgICAgICAgX2V4aXQoRVhJVF9TVUNDRVNTKTsK ICAgICAgICB9IGVsc2UgaWYgKHNldHNpZCgpID09IChwaWRfdCkgLTEpIHsKICAgICAgICAgICAg ZXJycCgiRGFlbW9uaXphdGlvbiBmYWlsZWQgOiBzZXRzaWQiKTsKICAgICAgICB9CiAgICAgICAg KHZvaWQpIGNoZGlyKCIvIik7CiAgICAgICAgKHZvaWQpIGNsb3NlZGVzY19hbGwoMSk7CiNlbHNl CiAgICAgICAgaWYgKGRhZW1vbigwLCAwKSkKICAgICAgICAgICAgZXJycCgiRGFlbW9uaXphdGlv biBmYWlsZWQiKTsKI2VuZGlmCiAgICB9Cn0KCl9fYXR0cmlidXRlX18gKChub3JldHVybikpCnN0 YXRpYyB2b2lkIGhlbHAodm9pZCkKewogICAgY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0aW9ucyA9 IGxvbmdfb3B0aW9uczsKCiAgICBwdXRzKFBBQ0tBR0UgIiB2ZXJzaW9uICIgVkVSU0lPTiAiXG4i KTsKICAgIHB1dHMoIk9wdGlvbnM6Iik7CiAgICBkbyB7CiAgICAgICAgcHJpbnRmKCIgICAtJWMs IC0tJXMlc1xuIiwgb3B0aW9ucy0+dmFsLCBvcHRpb25zLT5uYW1lLAogICAgICAgICAgICAgICBv cHRpb25zLT5oYXNfYXJnID8gIiA8b3B0PiIgOiAiIik7CiAgICAgICAgb3B0aW9ucysrOwogICAg fSB3aGlsZSAob3B0aW9ucy0+bmFtZSAhPSBOVUxMKTsKICAgIGV4aXQoRVhJVF9TVUNDRVNTKTsK fQoKc3RhdGljIHZvaWQgcGFyc2VPcHRpb25zKGludCBhcmdjLCBjaGFyICphcmd2W10pCnsKICAg IGludCBmb2RkZXI7CiAgICBpbnQgb3B0aW9uX2luZGV4ID0gMDsKCiAgICB3aGlsZSAoKGZvZGRl ciA9ICBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2LCBHRVRPUFRfT1BUSU9OUywKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGxvbmdfb3B0aW9ucywgJm9wdGlvbl9pbmRleCkpICE9IC0x KSB7CiAgICAgICAgc3dpdGNoIChmb2RkZXIpIHsKICAgICAgICBjYXNlICdhJyA6CiAgICAgICAg ICAgIHN5bmNocm9ub3VzID0gKHNpZ19hdG9taWNfdCkgMDsKICAgICAgICAgICAgYnJlYWs7CiAg ICAgICAgY2FzZSAnQicgOgogICAgICAgICAgICBkYWVtb25pemUgPSAxOwogICAgICAgICAgICBi cmVhazsKI2lmZGVmIEhBVkVfS0xPR0NUTAogICAgICAgIGNhc2UgJ2MnIDoKICAgICAgICAgICAg Y29uc29sZV9sZXZlbCA9IGF0b2kob3B0YXJnKTsKICAgICAgICAgICAgaWYgKGNvbnNvbGVfbGV2 ZWwgPCBNSU5fQ09OU09MRV9MRVZFTCB8fAogICAgICAgICAgICAgICAgY29uc29sZV9sZXZlbCA+ IE1BWF9DT05TT0xFX0xFVkVMKQogICAgICAgICAgICAgICAgZXJyKCJJbnZhbGlkIGNvbnNvbGUg bGV2ZWwiKTsKICAgICAgICAgICAgYnJlYWs7CiNlbmRpZgogICAgICAgIGNhc2UgJ0MnIDoKICAg ICAgICAgICAgY29uZmlnX2ZpbGUgPSB4c3RyZHVwKG9wdGFyZyk7CiAgICAgICAgICAgIGJyZWFr OwogICAgICAgIGNhc2UgJ3YnIDoKICAgICAgICAgICAgKyt2ZXJib3NlOwogICAgICAgICAgICBi cmVhazsKICAgICAgICBjYXNlICdOJyA6CiAgICAgICAgICAgIGRvX2tlcm5lbF9sb2cgPSBmYWxz ZTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAnVicgOgogICAgICAgICAgICBwdXRz KFBBQ0tBR0UgIiB2ZXJzaW9uICIgVkVSU0lPTik7CiAgICAgICAgICAgIGV4aXQoRVhJVF9TVUND RVNTKTsKICAgICAgICBjYXNlICdoJyA6CiAgICAgICAgICAgIGhlbHAoKTsKICAgICAgICBjYXNl ICdwJyA6CiAgICAgICAgICAgIHBpZF9maWxlID0geHN0cmR1cChvcHRhcmcpOwogICAgICAgICAg ICBicmVhazsKICAgICAgICBjYXNlICdzJyA6CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNh c2UgJzonIDoKICAgICAgICAgICAgZXJyKCJPcHRpb24gJyVjJyBpcyBtaXNzaW5nIHBhcmFtZXRl ciIsIG9wdG9wdCk7CiAgICAgICAgY2FzZSAnPyc6CiAgICAgICAgICAgIGVycigiVW5rbm93biBv cHRpb24gJyVjJyBvciBhcmd1bWVudCBtaXNzaW5nIiwgb3B0b3B0KTsKICAgICAgICBkZWZhdWx0 IDoKICAgICAgICAgICAgZXJyKCJVbmtub3duIG9wdGlvbiAnJWMnIiwgb3B0b3B0KTsKICAgICAg ICB9CiAgICB9Cn0KCnN0YXRpYyB2b2lkIGNoZWNrUm9vdCh2b2lkKQp7CiAgICBpZiAoZ2V0ZXVp ZCgpICE9ICh1aWRfdCkgMCkKICAgICAgICBlcnIoIlNvcnJ5LCB5b3UgbXVzdCBiZSByb290IHRv IGxhdW5jaCB0aGlzIHByb2dyYW0iKTsKfQoKaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3Zb XSkKewogICAgaW50IHNvY2tldHNbMl07CgogICAgcGFyc2VPcHRpb25zKGFyZ2MsIGFyZ3YpOwog ICAgaWYgKGNvbmZpZ1BhcnNlcihjb25maWdfZmlsZSkgPCAwKQogICAgICAgIGVycigiQmFkIGNv bmZpZ3VyYXRpb24gZmlsZSIpOwogICAgY2hlY2tSb290KCk7CiAgICBkb2RhZW1vbml6ZSgpOwog ICAgc2V0c2lnbmFscygpOwogICAgaWYgKHVwZGF0ZV9waWRfZmlsZShwaWRfZmlsZSkpCiAgICAg ICAgcmV0dXJuIC0xOwogICAgY2xlYXJhcmdzKGFyZ2MsIGFyZ3YpOwogICAgc2V0cHJvZ25hbWUo UFJPR05BTUVfTUFTVEVSKTsKICAgIGlmIChnZXREYXRhU291cmNlcyhzb2NrZXRzKSA8IDApCiAg ICAgICAgZXJyKCJVbmFibGUgdG8gYmluZCBzb2NrZXRzIik7CgogICAgcmV0dXJuIHByb2Nlc3Mo c29ja2V0cyk7Cn0KAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAFJFQURNRQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMDAwNjQ0ADAw MDE3NTAAMDAwMTc1MAAwMDAwMDAwMDE1NwAxMjAxMzI0NjU0MwAwMTExNzEAIDAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdXN0YXIgIABkYW5pY2UAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAGRhbmljZQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAcmVxdWlyZSBQQ1JFICgtbHBjcmUpLgoKZ2NjIC1PcyBtbG9nLmMgLW8gbWxvZyAtbHBjcmUg LXMKCm9yIHN0YXRpYzoKCmdjYyAtT3MgbWxvZy5jIC1vIG1sb2cgLWxwY3JlIC1zIC1zdGF0aWMK AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AABtZXRhbG9nLmNvbmYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAwMDY0NAAwMDAx NzUwADAwMDE3NTAAMDAwMDAwMDYzMjYAMTIwMTUxNjM2NTEAMDEyNjE0ACAwAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHVzdGFyICAAZGFuaWNlAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAABkYW5pY2UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ACMgU2FtcGxlIE1ldGFsb2cgY29uZmlndXJhdGlvbiBmaWxlCgptYXhzaXplICA9IDEwNDg1NzYg ICMgc2l6ZSBpbiBieXRlcyAoMTA0ODU3NiA9IDEgbWVnYWJ5dGUpCm1heHRpbWUgID0gODY0MDAg ICAgIyB0aW1lIGluIHNlY29uZHMgKDg2NDAwID0gMSBkYXkpCm1heGZpbGVzID0gNSAgICAgICAg IyBudW0gZmlsZXMgcGVyIGRpcmVjdG9yeQoKIyBUaGlzIHdpbGwgY2FwdHVyZSBhbGwgb2YgdGhl IGludGVybmFsIGxvZyBtZXNzYWdlcyB0aGF0IG1ldGFsb2cgaXRzZWxmCiMgZ2VuZXJhdGVzLiAg SWYgeW91IHVzZSBhbnkgImNvbW1hbmQiIG9wdGlvbnMgYmVsb3csIHlvdSB3aWxsIHdhbnQgdGhp cwojIGFzIG1ldGFsb2cgZ2VuZXJhdGVzIGEgbG90IG9mIHN0YXR1cyBtZXNzYWdlcyB3aGVuZXZl ciBpdCBleGVjdXRlcyBhCiMgY29tbWFuZCBhbmQgY2hpbGRyZW4gcHJvY2Vzc2VzIGV4aXQuCiNN ZXRhbG9nIDoKIwojICBwcm9ncmFtICAgPSAibWV0YWxvZyIKIyAgbG9nZGlyICAgID0gIi92YXIv bG9nL21ldGFsb2ciCiMgIGJyZWFrICAgICA9IDEKCiMgVW5jb21tZW50IGFuZCBhZGp1c3QgdGhl IGZvbGxvd2luZyBsaW5lcyBhY2NvcmRpbmcgdG8geW91ciBjb25zb2xlIGxvZ2dpbmcKIyBuZWVk cy4gIElmIHlvdSB3YW50IHRvIG9ubHkgb3V0cHV0IHRoaW5ncyB0aGF0IHdlcmUgbm90IGNhdWdo dCBieSBvdGhlciBsb2cKIyBzZWN0aW9ucywgbW92ZSB0aGlzIHRvIHRoZSBlbmQgb2YgdGhlIGZp bGUuICBNYWtlIHN1cmUgdGhpcyBjb21tYW5kIGlzIG9uCiMgeW91ciByb290IHBhcnRpdGlvbiBp ZiB5b3UgaGF2ZSAvdXNyIG1vdW50ZWQgc2VwYXJhdGVseS4gIFRoaXMgc2NyaXB0IHNob3VsZAoj IG1lcmVseSB3cml0ZSAkQCB0byBzb21lIGRldmljZSAoeW91ciBjb25zb2xlIGZvciBtZXNzYWdl cyk6CiMgZWNobyAiJEAiID4gL2Rldi90dHkxMAojCiNjb25zb2xlIGxvZ2dpbmcgOgojCiMgIGZh Y2lsaXR5ICA9ICIqIgojICBjb21tYW5kICAgPSAiL3NiaW4vY29uc29sZWxvZy5zaCIKCkV2ZXJ5 dGhpbmcgaW1wb3J0YW50IDoKCiAgICBmYWNpbGl0eSA9ICIqIgogICAgbWluaW11bSAgPSA2CiAg ICBsb2dkaXIgICA9ICIvdmFyL2xvZy9ldmVyeXRoaW5nIgojaWYgYnJlYWsga2V5d29yZCBkb2Vz IG5vdCBhcHBlYXIsIHJ1bGVzIGFmdGVyIGhlcmUgd2lsbCBiZSBydW4uCgpFdmVyeXRoaW5nIHZl cnkgaW1wb3J0YW50IDoKCiAgICBmYWNpbGl0eSA9ICIqIgogICAgbWluaW11bSAgPSAxCiAgICBs b2dkaXIgICA9ICIvdmFyL2xvZy9jcml0aWNhbCIKClBhc3N3b3JkIGZhaWx1cmVzIDoKCiAgICBy ZWdleCAgICA9ICIocGFzc3dvcmR8bG9naW58YXV0aGVudGljYXRpb24pXHMrKGZhaWx8aW52YWxp ZCkiCiAgICByZWdleCAgICA9ICIoZmFpbGVkfGludmFsaWQpXHMrKHBhc3N3b3JkfGxvZ2lufGF1 dGhlbnRpY2F0aW9ufHVzZXIpIgogICAgcmVnZXggICAgPSAiSUxMRUdBTCBST09UIExPR0lOIgog ICAgbG9nZGlyICAgPSAiL3Zhci9sb2cvcHdkZmFpbCIKIyAgICBjb21tYW5kICA9ICIvdXNyL2xv Y2FsL3NiaW4vbWFpbF9wd2RfZmFpbHVyZXMuc2giCgpLZXJuZWwgbWVzc2FnZXMgOgoKICAgIGZh Y2lsaXR5ID0gImtlcm4iCiAgICBsb2dkaXIgICA9ICIvdmFyL2xvZy9rZXJuZWwiCiAgICBicmVh ayAgICA9IDEKCkNyb25kIDoKCiAgICBmYWNpbGl0eSA9ICJjcm9uIgogICAgbG9nZGlyICAgPSAi L3Zhci9sb2cvY3JvbiIKICAgIGJyZWFrICAgID0gMQoKRHVkZXMgZmlyZXdhbGxlZCBieSBJUFRy YXAgOgoKICAgIHByb2dyYW0gID0gImlwdHJhcCIKICAgIGxvZ2RpciAgID0gIi92YXIvbG9nL2lw dHJhcCIKICAgIGJyZWFrICAgID0gMQoKRlRQIFNlcnZlciA6CgogICAgZmFjaWxpdHkgPSAiZnRw IgogICAgbG9nZGlyICAgPSAiL3Zhci9sb2cvZnRwZCIKICAgIGJyZWFrICAgID0gMQoKTmV3cyBT ZXJ2ZXIgOgoKICAgIGZhY2lsaXR5ID0gIm5ld3MiCiAgICBsb2dkaXIgICA9ICIvdmFyL2xvZy9u ZXdzIgogICAgYnJlYWsgICAgPSAxCgpTU0ggU2VydmVyIDoKCiAgICBwcm9ncmFtICA9ICJzc2hk IgogICAgbG9nZGlyICAgPSAiL3Zhci9sb2cvc3NoZCIKICAgIGJyZWFrICAgID0gMQoKI3doeSB0 aGUgaGVsbCBkbyB5b3Ugc3RpbGwgcnVuIHRoYXQgdGhpbmcgIT8KVGVsbmV0IDoKCiAgICBwcm9n cmFtICA9ICJsb2dpbiIKICAgIGxvZ2RpciAgID0gIi92YXIvbG9nL3RlbG5ldCIKICAgIGJyZWFr ICAgID0gMQoKSW1hcCA6CgogICAgcHJvZ3JhbSAgPSAiL3Vzci9zYmluL2ltYXBkIgogICAgbG9n ZGlyICAgPSAiL3Zhci9sb2cvaW1hcCIKICAgIGJyZWFrICAgID0gMQoKUE9QIFRvYXN0ZXIgOgoK ICAgIHByb2dyYW0gID0gIi91c3Ivc2Jpbi9pcG9wM2QiCiAgICBsb2dkaXIgICA9ICIvdmFyL2xv Zy9wb3AiCiAgICBicmVhayAgICA9IDEKCiMgQWRkIGF1dGhlbnRpY2F0ZWQgSVAgYWRkcmVzc2Vz IGZvciBTTVRQIHJlbGF5aW5nIDoKCiMgICAgcHJvZ3JhbSAgPSAiL3Vzci9zYmluL2lwb3AzZCIK IyAgICByZWdleCAgICA9ICJMb2dpbi4rbm1zZ3M9IgojICAgIGNvbW1hbmQgID0gIi91c3IvbG9j YWwvc2Jpbi9hZGRfcG9wX2FkZHJlc3Muc2giCiMgICAgYnJlYWsgICAgPSAxCgpNYWlsIDoKCiAg ICBmYWNpbGl0eSA9ICJtYWlsIgogICAgbmVnX3JlZ2V4PSAic3RhcnRpbmcgZGFlbW9uIgogICAg bG9nZGlyICAgPSAiL3Zhci9sb2cvbWFpbCIKICAgIGJyZWFrICAgID0gMQoKIyBleGltIHN0dWZm IC0gbG9nIG91dHB1dCBmcm9tIGV2ZXJ5IHByb2dyYW0gd2hvc2UgbmFtZSBiZWdpbnMgd2l0aAoj ICJleGltIi4KIwpFeGltIDoKCiAgICBwcm9ncmFtX3JlZ2V4ID0gIl5leGltIgogICAgbG9nZGly ICAgICAgICA9ICIvdmFyL2xvZy9leGltIgogICAgYnJlYWsgICAgICAgICA9IDEKClBwcCA6CiAg ICBwcm9ncmFtX3JlZ2V4ID0gIl5wcHAiCiAgICBsb2dkaXIgICAgPSAiL3Zhci9sb2cvcHBwIgog ICAgYnJlYWsgICAgID0gMQoKUG9zdGdyZXNxbCA6CiAgICBwcm9ncmFtX3JlZ2V4ID0gIl5wb3N0 bWFzdGVyIgogICAgcHJvZ3JhbV9yZWdleCA9ICJecG9zdGdyZXMiCiAgICBsb2dkaXIgICAgPSAi L3Zhci9sb2cvcG9zdGdyZXMiCiAgICBicmVhayAgICAgPSAxCgpBcGFjaGUgOgogICAgcHJvZ3Jh bV9yZWdleCA9ICJeaHR0cGQiCiAgICBsb2dkaXIgICAgPSAiL3Zhci9sb2cvaHR0cCIKICAgIGJy ZWFrICAgICA9IDEKCkhBTCA6CiAgICBwcm9ncmFtX3JlZ2V4ID0gIl5oYWwiCiAgICBsb2dkaXIg ICAgPSAiL3Zhci9sb2cvaGFsIgogICAgYnJlYWsgICAgID0gMQoAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== --e89a8f647bf57fde3504c7de1f23--