Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pGdcF-000194-14 for pgsql-hackers@arkaria.postgresql.org; Sat, 14 Jan 2023 10:18:24 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1pGdbE-0008E9-Er for pgsql-hackers@arkaria.postgresql.org; Sat, 14 Jan 2023 10:17:20 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pGdbD-00089n-IZ for pgsql-hackers@lists.postgresql.org; Sat, 14 Jan 2023 10:17:20 +0000 Received: from mail.postgrespro.ru ([93.174.131.139]) by makus.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1pGdb3-0007M1-Tg for pgsql-hackers@lists.postgresql.org; Sat, 14 Jan 2023 10:17:18 +0000 Received: from [192.168.28.32] (cyclops.postgrespro.ru [93.174.131.138]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client did not present a certificate) by mail.postgrespro.ru (Postfix) with ESMTPSA id 1AE4421C4C38; Sat, 14 Jan 2023 13:17:07 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mail; t=1673691427; bh=8vNmhKO2oKR4g7M230di0vm/qG2nSvo0w7iS44TriOw=; h=Date:Subject:To:Cc:References:From:In-Reply-To; b=U7koP4oRYbQE7o3gZj7GkJ1/aMju7C57hfR7fqRj1NGGGZ7LSnGPkGzOEr06RKlIB tmuqAQHrIe26I3Vw4yewxote4JnSUgRYow5hw5uXT/Cl6LyQP+N+G37Yk81HE9Zp8q biGbVG6WX8xonLrjmtof7x47tjsRS92K4rbNX1Gw= Content-Type: multipart/mixed; boundary="------------u70ux5ZjNHtK0A5sVFMd9Ey9" Message-ID: <919243a3-4811-6fef-32fe-f03d89f80ffb@postgrespro.ru> Date: Sat, 14 Jan 2023 13:17:07 +0300 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.6.1 Subject: Re: Operation log for major operations To: vignesh C Cc: Alvaro Herrera , PostgreSQL Hackers References: <20221123090021.ba5johlgwwdx2nzm@alvherre.pgsql> <066b68a1-6e25-6e10-a88f-4f24e7b60a51@postgrespro.ru> Content-Language: ru, en-US From: Dmitry Koval In-Reply-To: List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------u70ux5ZjNHtK0A5sVFMd9Ey9 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Hi! >The patch does not apply on top of HEAD ... Here is a fixed version. Small additional fixes: 1) added CRC calculation for empty 'pg_control_log' file; 2) added saving 'errno' before calling LWLockRelease and restoring after that; 3) corrected pg_upgrade for case old cluster does not have 'pg_control_log' file. -- With best regards, Dmitry Koval Postgres Professional: http://postgrespro.com --------------u70ux5ZjNHtK0A5sVFMd9Ey9 Content-Type: text/plain; charset=UTF-8; name="v3-0001-Operation-log.patch" Content-Disposition: attachment; filename="v3-0001-Operation-log.patch" Content-Transfer-Encoding: base64 RnJvbSA2OWZhYWM1ZTlmYzExZDE3ZDY0MWEwY2ZmM2IyNjgwNmMyOTMwZTNmIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBLb3ZhbCBEbWl0cnkgPGQua292YWxAcG9zdGdyZXNw cm8ucnU+CkRhdGU6IE1vbiwgMTQgTm92IDIwMjIgMjE6Mzk6MTQgKzAzMDAKU3ViamVjdDog W1BBVENIIHYzXSBPcGVyYXRpb24gbG9nCgotLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFu c2FtL3hsb2cuYyAgICAgICAgICAgICB8ICAxMCArCiBzcmMvYmFja2VuZC9iYWNrdXAvYmFz ZWJhY2t1cC5jICAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvc3RvcmFnZS9s bWdyL2x3bG9ja25hbWVzLnR4dCAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL3V0aWxzL21p c2MvTWFrZWZpbGUgICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC91dGlscy9t aXNjL21lc29uLmJ1aWxkICAgICAgICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvdXRpbHMv bWlzYy9wZ19jb250cm9sbG9nLmMgICAgICAgIHwgMTQyICsrKysKIHNyYy9iaW4vcGdfY2hl Y2tzdW1zL3BnX2NoZWNrc3Vtcy5jICAgICAgICAgICB8ICAgMSArCiBzcmMvYmluL3BnX3Jl c2V0d2FsL3BnX3Jlc2V0d2FsLmMgICAgICAgICAgICAgfCAgIDQgKwogc3JjL2Jpbi9wZ19y ZXdpbmQvZmlsZV9vcHMuYyAgICAgICAgICAgICAgICAgIHwgIDI4ICsKIHNyYy9iaW4vcGdf cmV3aW5kL2ZpbGVfb3BzLmggICAgICAgICAgICAgICAgICB8ICAgMiArCiBzcmMvYmluL3Bn X3Jld2luZC9wZ19yZXdpbmQuYyAgICAgICAgICAgICAgICAgfCAgNTkgKysKIHNyYy9iaW4v cGdfdXBncmFkZS9jb250cm9sZGF0YS5jICAgICAgICAgICAgICB8ICA2NyArKwogc3JjL2Jp bi9wZ191cGdyYWRlL2V4ZWMuYyAgICAgICAgICAgICAgICAgICAgIHwgICA5ICstCiBzcmMv YmluL3BnX3VwZ3JhZGUvcGdfdXBncmFkZS5jICAgICAgICAgICAgICAgfCAgIDIgKwogc3Jj L2Jpbi9wZ191cGdyYWRlL3BnX3VwZ3JhZGUuaCAgICAgICAgICAgICAgIHwgICAyICsKIHNy Yy9jb21tb24vTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMSArCiBz cmMvY29tbW9uL2NvbnRyb2xsb2dfdXRpbHMuYyAgICAgICAgICAgICAgICAgfCA2ODMgKysr KysrKysrKysrKysrKysrCiBzcmMvY29tbW9uL21lc29uLmJ1aWxkICAgICAgICAgICAgICAg ICAgICAgICAgfCAgIDEgKwogc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19jb250cm9sbG9nLmgg ICAgICAgICAgIHwgMTQyICsrKysKIHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQg ICAgICAgICAgICAgICB8ICAgOSArCiBzcmMvaW5jbHVkZS9jb21tb24vY29udHJvbGxvZ191 dGlscy5oICAgICAgICAgfCAgMjcgKwogc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X21pc2MvbWVz b24uYnVpbGQgICAgICAgIHwgICAxICsKIC4uLi9tb2R1bGVzL3Rlc3RfbWlzYy90LzAwNF9v cGVyYXRpb25fbG9nLnBsICB8IDEzNiArKysrCiBzcmMvdG9vbHMvbXN2Yy9Na3ZjYnVpbGQu cG0gICAgICAgICAgICAgICAgICAgfCAgIDQgKy0KIDI0IGZpbGVzIGNoYW5nZWQsIDEzMjkg aW5zZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMv YmFja2VuZC91dGlscy9taXNjL3BnX2NvbnRyb2xsb2cuYwogY3JlYXRlIG1vZGUgMTAwNjQ0 IHNyYy9jb21tb24vY29udHJvbGxvZ191dGlscy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3Jj L2luY2x1ZGUvY2F0YWxvZy9wZ19jb250cm9sbG9nLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBz cmMvaW5jbHVkZS9jb21tb24vY29udHJvbGxvZ191dGlscy5oCiBjcmVhdGUgbW9kZSAxMDA2 NDQgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X21pc2MvdC8wMDRfb3BlcmF0aW9uX2xvZy5wbAoK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cuYyBiL3NyYy9i YWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cuYwppbmRleCAwMDcwZDU2YjBiLi42YjgyYWNi NDZiIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nLmMKKysr IGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5jCkBAIC02OCw2ICs2OCw3IEBA CiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19jb250cm9sLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9w Z19kYXRhYmFzZS5oIgogI2luY2x1ZGUgImNvbW1vbi9jb250cm9sZGF0YV91dGlscy5oIgor I2luY2x1ZGUgImNvbW1vbi9jb250cm9sbG9nX3V0aWxzLmgiCiAjaW5jbHVkZSAiY29tbW9u L2ZpbGVfdXRpbHMuaCIKICNpbmNsdWRlICJleGVjdXRvci9pbnN0cnVtZW50LmgiCiAjaW5j bHVkZSAibWlzY2FkbWluLmgiCkBAIC00Nzc0LDYgKzQ3NzUsOSBAQCBCb290U3RyYXBYTE9H KHZvaWQpCiAJLyogc29tZSBhZGRpdGlvbmFsIENvbnRyb2xGaWxlIGZpZWxkcyBhcmUgc2V0 IGluIFdyaXRlQ29udHJvbEZpbGUoKSAqLwogCVdyaXRlQ29udHJvbEZpbGUoKTsKIAorCS8q IFB1dCBpbmZvcm1hdGlvbiBpbnRvIG9wZXJhdGlvbiBsb2cuICovCisJcHV0X29wZXJhdGlv bl9sb2dfZWxlbWVudChEYXRhRGlyLCBPTFRfQk9PVFNUUkFQKTsKKwogCS8qIEJvb3RzdHJh cCB0aGUgY29tbWl0IGxvZywgdG9vICovCiAJQm9vdFN0cmFwQ0xPRygpOwogCUJvb3RTdHJh cENvbW1pdFRzKCk7CkBAIC01NzQwLDggKzU3NDQsMTQgQEAgU3RhcnR1cFhMT0codm9pZCkK IAlTcGluTG9ja1JlbGVhc2UoJlhMb2dDdGwtPmluZm9fbGNrKTsKIAogCVVwZGF0ZUNvbnRy b2xGaWxlKCk7CisKIAlMV0xvY2tSZWxlYXNlKENvbnRyb2xGaWxlTG9jayk7CiAKKwkvKiBQ dXQgaW5mb3JtYXRpb24gaW50byBvcGVyYXRpb24gbG9nLiAqLworCWlmIChwcm9tb3RlZCkK KwkJcHV0X29wZXJhdGlvbl9sb2dfZWxlbWVudChEYXRhRGlyLCBPTFRfUFJPTU9URUQpOwor CXB1dF9vcGVyYXRpb25fbG9nX2VsZW1lbnQoRGF0YURpciwgT0xUX1NUQVJUVVApOworCiAJ LyoKIAkgKiBTaHV0ZG93biB0aGUgcmVjb3ZlcnkgZW52aXJvbm1lbnQuICBUaGlzIG11c3Qg b2NjdXIgYWZ0ZXIKIAkgKiBSZWNvdmVyUHJlcGFyZWRUcmFuc2FjdGlvbnMoKSAoc2VlIG5v dGVzIGluIGxvY2tfdHdvcGhhc2VfcmVjb3ZlcigpKQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvYmFja3VwL2Jhc2ViYWNrdXAuYyBiL3NyYy9iYWNrZW5kL2JhY2t1cC9iYXNlYmFja3Vw LmMKaW5kZXggM2ZiOTQ1MTY0My4uMGNhNzA5YjViMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvYmFja3VwL2Jhc2ViYWNrdXAuYworKysgYi9zcmMvYmFja2VuZC9iYWNrdXAvYmFzZWJh Y2t1cC5jCkBAIC0yMTEsNiArMjExLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBleGNsdWRl X2xpc3RfaXRlbSBleGNsdWRlRmlsZXNbXSA9CiAgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3Qg ZXhjbHVkZV9saXN0X2l0ZW0gbm9DaGVja3N1bUZpbGVzW10gPSB7CiAJeyJwZ19jb250cm9s IiwgZmFsc2V9LAorCXsicGdfY29udHJvbF9sb2ciLCBmYWxzZX0sCiAJeyJwZ19maWxlbm9k ZS5tYXAiLCBmYWxzZX0sCiAJeyJwZ19pbnRlcm5hbC5pbml0IiwgdHJ1ZX0sCiAJeyJQR19W RVJTSU9OIiwgZmFsc2V9LApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdy L2x3bG9ja25hbWVzLnR4dCBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9sd2xvY2tuYW1l cy50eHQKaW5kZXggNmM3Y2Y2YzI5NS4uNTY3M2RlMTY2OSAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvc3RvcmFnZS9sbWdyL2x3bG9ja25hbWVzLnR4dAorKysgYi9zcmMvYmFja2VuZC9z dG9yYWdlL2xtZ3IvbHdsb2NrbmFtZXMudHh0CkBAIC01MywzICs1Myw0IEBAIFhhY3RUcnVu Y2F0aW9uTG9jawkJCQkJNDQKICMgNDUgd2FzIFhhY3RUcnVuY2F0aW9uTG9jayB1bnRpbCBy ZW1vdmFsIG9mIEJhY2tlbmRSYW5kb21Mb2NrCiBXcmFwTGltaXRzVmFjdXVtTG9jawkJCQk0 NgogTm90aWZ5UXVldWVUYWlsTG9jawkJCQkJNDcKK0NvbnRyb2xMb2dGaWxlTG9jawkJCQkJ NDgKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvTWFrZWZpbGUgYi9zcmMv YmFja2VuZC91dGlscy9taXNjL01ha2VmaWxlCmluZGV4IGI5ZWU0ZWI0OGEuLjNmYTIwZTAz NjggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvTWFrZWZpbGUKKysrIGIv c3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9NYWtlZmlsZQpAQCAtMjMsNiArMjMsNyBAQCBPQkpT ID0gXAogCWhlbHBfY29uZmlnLm8gXAogCXBnX2NvbmZpZy5vIFwKIAlwZ19jb250cm9sZGF0 YS5vIFwKKwlwZ19jb250cm9sbG9nLm8gXAogCXBnX3J1c2FnZS5vIFwKIAlwc19zdGF0dXMu byBcCiAJcXVlcnllbnZpcm9ubWVudC5vIFwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0 aWxzL21pc2MvbWVzb24uYnVpbGQgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL21lc29uLmJ1 aWxkCmluZGV4IGUzZTk5ZWM1Y2IuLjk5MzJhYTYzN2QgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL3V0aWxzL21pc2MvbWVzb24uYnVpbGQKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlz Yy9tZXNvbi5idWlsZApAQCAtOCw2ICs4LDcgQEAgYmFja2VuZF9zb3VyY2VzICs9IGZpbGVz KAogICAnaGVscF9jb25maWcuYycsCiAgICdwZ19jb25maWcuYycsCiAgICdwZ19jb250cm9s ZGF0YS5jJywKKyAgJ3BnX2NvbnRyb2xsb2cuYycsCiAgICdwZ19ydXNhZ2UuYycsCiAgICdw c19zdGF0dXMuYycsCiAgICdxdWVyeWVudmlyb25tZW50LmMnLApkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvdXRpbHMvbWlzYy9wZ19jb250cm9sbG9nLmMgYi9zcmMvYmFja2VuZC91dGls cy9taXNjL3BnX2NvbnRyb2xsb2cuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwLi5jNDdjM2JmMzdmCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2JhY2tlbmQvdXRp bHMvbWlzYy9wZ19jb250cm9sbG9nLmMKQEAgLTAsMCArMSwxNDIgQEAKKy8qLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorICoKKyAqIHBnX2NvbnRyb2xsb2cuYworICoKKyAqIFJvdXRpbmVzIHRv IGV4cG9zZSB0aGUgY29udGVudHMgb2YgdGhlIGNvbnRyb2wgbG9nIGZpbGUgdmlhIGEgc2V0 IG9mIFNRTAorICogZnVuY3Rpb25zLgorICoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykg MTk5Ni0yMDIyLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICogUG9y dGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9m IENhbGlmb3JuaWEKKyAqCisgKiBJREVOVElGSUNBVElPTgorICoJICBzcmMvYmFja2VuZC91 dGlscy9taXNjL3BnX2NvbnRyb2xsb2cuYworICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8K KworI2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJhY2Nlc3MvaHR1cF9kZXRh aWxzLmgiCisjaW5jbHVkZSAiYWNjZXNzL3RyYW5zYW0uaCIKKyNpbmNsdWRlICJhY2Nlc3Mv eGxvZy5oIgorI2luY2x1ZGUgImFjY2Vzcy94bG9nX2ludGVybmFsLmgiCisjaW5jbHVkZSAi Y2F0YWxvZy9wZ190eXBlLmgiCisjaW5jbHVkZSAiY29tbW9uL2NvbnRyb2xsb2dfdXRpbHMu aCIKKyNpbmNsdWRlICJmdW5jYXBpLmgiCisjaW5jbHVkZSAibWlzY2FkbWluLmgiCisjaW5j bHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKKyNpbmNsdWRlICJ1dGlscy9wZ19sc24uaCIKKyNp bmNsdWRlICJ1dGlscy90aW1lc3RhbXAuaCIKKworLyoKKyAqIHBnX29wZXJhdGlvbl9sb2cK KyAqCisgKiBSZXR1cm5zIGxpc3Qgb2Ygb3BlcmF0aW9uIGxvZyBkYXRhLgorICogTk9URTog dGhpcyBpcyBhIHNldC1yZXR1cm5pbmctZnVuY3Rpb24gKFNSRikuCisgKi8KK0RhdHVtCitw Z19vcGVyYXRpb25fbG9nKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisjZGVmaW5lIFBHX09QRVJB VElPTl9MT0dfQ09MUwk2CisJRnVuY0NhbGxDb250ZXh0ICpmdW5jY3R4OworCU9wZXJhdGlv bkxvZ0J1ZmZlciAqbG9nX2J1ZmZlcjsKKworCS8qCisJICogSW5pdGlhbGl6ZSB0dXBsZSBk ZXNjcmlwdG9yICYgZnVuY3Rpb24gY2FsbCBjb250ZXh0LgorCSAqLworCWlmIChTUkZfSVNf RklSU1RDQUxMKCkpCisJeworCQlNZW1vcnlDb250ZXh0IG9sZGN4dDsKKwkJVHVwbGVEZXNj CXR1cGRlc2M7CisJCWJvb2wJCWNyY19vazsKKworCQkvKiBjcmVhdGUgYSBmdW5jdGlvbiBj b250ZXh0IGZvciBjcm9zcy1jYWxsIHBlcnNpc3RlbmNlICovCisJCWZ1bmNjdHggPSBTUkZf RklSU1RDQUxMX0lOSVQoKTsKKworCQkvKiBzd2l0Y2ggdG8gbWVtb3J5IGNvbnRleHQgYXBw cm9wcmlhdGUgZm9yIG11bHRpcGxlIGZ1bmN0aW9uIGNhbGxzICovCisJCW9sZGN4dCA9IE1l bW9yeUNvbnRleHRTd2l0Y2hUbyhmdW5jY3R4LT5tdWx0aV9jYWxsX21lbW9yeV9jdHgpOwor CisJCS8qIHJlYWQgdGhlIGNvbnRyb2wgZmlsZSAqLworCQlsb2dfYnVmZmVyID0gZ2V0X29w ZXJhdGlvbl9sb2coRGF0YURpciwgJmNyY19vayk7CisJCWlmICghY3JjX29rKQorCQkJZXJl cG9ydChFUlJPUiwKKwkJCQkJKGVycm1zZygiY2FsY3VsYXRlZCBDUkMgY2hlY2tzdW0gZG9l cyBub3QgbWF0Y2ggdmFsdWUgc3RvcmVkIGluIGZpbGUiKSkpOworCisJCXR1cGRlc2MgPSBD cmVhdGVUZW1wbGF0ZVR1cGxlRGVzYyhQR19PUEVSQVRJT05fTE9HX0NPTFMpOworCisJCVR1 cGxlRGVzY0luaXRFbnRyeSh0dXBkZXNjLCAoQXR0ck51bWJlcikgMSwgImV2ZW50IiwKKwkJ CQkJCSAgIFRFWFRPSUQsIC0xLCAwKTsKKwkJVHVwbGVEZXNjSW5pdEVudHJ5KHR1cGRlc2Ms IChBdHRyTnVtYmVyKSAyLCAiZWRpdGlvbiIsCisJCQkJCQkgICBURVhUT0lELCAtMSwgMCk7 CisJCVR1cGxlRGVzY0luaXRFbnRyeSh0dXBkZXNjLCAoQXR0ck51bWJlcikgMywgInZlcnNp b24iLAorCQkJCQkJICAgVEVYVE9JRCwgLTEsIDApOworCQlUdXBsZURlc2NJbml0RW50cnko dHVwZGVzYywgKEF0dHJOdW1iZXIpIDQsICJsc24iLAorCQkJCQkJICAgUEdfTFNOT0lELCAt MSwgMCk7CisJCVR1cGxlRGVzY0luaXRFbnRyeSh0dXBkZXNjLCAoQXR0ck51bWJlcikgNSwg Imxhc3QiLAorCQkJCQkJICAgVElNRVNUQU1QVFpPSUQsIC0xLCAwKTsKKwkJVHVwbGVEZXNj SW5pdEVudHJ5KHR1cGRlc2MsIChBdHRyTnVtYmVyKSA2LCAiY291bnQiLAorCQkJCQkJICAg SU5UNE9JRCwgLTEsIDApOworCisJCWZ1bmNjdHgtPnR1cGxlX2Rlc2MgPSBCbGVzc1R1cGxl RGVzYyh0dXBkZXNjKTsKKworCQkvKiBUaGUgb25seSBzdGF0ZSB3ZSBuZWVkIGlzIHRoZSBv cGVyYXRpb24gbG9nIGJ1ZmZlci4gKi8KKwkJZnVuY2N0eC0+dXNlcl9mY3R4ID0gKHZvaWQg KikgbG9nX2J1ZmZlcjsKKworCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY3h0KTsKKwl9 CisKKwkvKiBzdHVmZiBkb25lIG9uIGV2ZXJ5IGNhbGwgb2YgdGhlIGZ1bmN0aW9uICovCisJ ZnVuY2N0eCA9IFNSRl9QRVJDQUxMX1NFVFVQKCk7CisJbG9nX2J1ZmZlciA9IChPcGVyYXRp b25Mb2dCdWZmZXIgKikgZnVuY2N0eC0+dXNlcl9mY3R4OworCisJaWYgKGZ1bmNjdHgtPmNh bGxfY250ciA8IGdldF9vcGVyYXRpb25fbG9nX2NvdW50KGxvZ19idWZmZXIpKQorCXsKKwkJ RGF0dW0JCXJlc3VsdDsKKwkJRGF0dW0JCXZhbHVlc1tQR19PUEVSQVRJT05fTE9HX0NPTFNd OworCQlib29sCQludWxsc1tQR19PUEVSQVRJT05fTE9HX0NPTFNdOworCQlIZWFwVHVwbGUJ dHVwbGU7CisJCU9wZXJhdGlvbkxvZ0RhdGEgKmRhdGEgPSBnZXRfb3BlcmF0aW9uX2xvZ19l bGVtZW50KGxvZ19idWZmZXIsICh1aW50MTYpIGZ1bmNjdHgtPmNhbGxfY250cik7CisJCWlu dAkJCW1ham9yX3ZlcnNpb24sCisJCQkJCW1pbm9yX3ZlcnNpb24sCisJCQkJCXBhdGNoX3Zl cnNpb247CisKKwkJLyoKKwkJICogRm9ybSB0dXBsZSB3aXRoIGFwcHJvcHJpYXRlIGRhdGEu CisJCSAqLworCQlNZW1TZXQobnVsbHMsIDAsIHNpemVvZihudWxscykpOworCQlNZW1TZXQo dmFsdWVzLCAwLCBzaXplb2YodmFsdWVzKSk7CisKKwkJLyogZXZlbnQgKi8KKwkJdmFsdWVz WzBdID0gQ1N0cmluZ0dldFRleHREYXR1bShnZXRfb3BlcmF0aW9uX2xvZ190eXBlX25hbWUo ZGF0YS0+b2xfdHlwZSkpOworCisJCS8qIGVkaXRpb24gKi8KKwkJdmFsdWVzWzFdID0gQ1N0 cmluZ0dldFRleHREYXR1bShnZXRfc3RyX2VkaXRpb24oZGF0YS0+b2xfZWRpdGlvbikpOwor CisJCS8qIHZlcnNpb24gKi8KKwkJcGF0Y2hfdmVyc2lvbiA9IGRhdGEtPm9sX3ZlcnNpb24g JSAxMDA7CisJCW1pbm9yX3ZlcnNpb24gPSAoZGF0YS0+b2xfdmVyc2lvbiAvIDEwMCkgJSAx MDA7CisJCW1ham9yX3ZlcnNpb24gPSBkYXRhLT5vbF92ZXJzaW9uIC8gMTAwMDA7CisJCWlm IChtYWpvcl92ZXJzaW9uIDwgMTAwMCkKKwkJCXZhbHVlc1syXSA9IENTdHJpbmdHZXRUZXh0 RGF0dW0ocHNwcmludGYoIiV1LiV1LiV1LiV1IiwgbWFqb3JfdmVyc2lvbiAvIDEwMCwKKwkJ CQkJCQkJCQkJCQkgbWFqb3JfdmVyc2lvbiAlIDEwMCwKKwkJCQkJCQkJCQkJCQkgbWlub3Jf dmVyc2lvbiwgcGF0Y2hfdmVyc2lvbikpOworCQllbHNlCisJCQl2YWx1ZXNbMl0gPSBDU3Ry aW5nR2V0VGV4dERhdHVtKHBzcHJpbnRmKCIldS4ldS4ldSIsIG1ham9yX3ZlcnNpb24gLyAx MDAsCisJCQkJCQkJCQkJCQkJIG1pbm9yX3ZlcnNpb24sIHBhdGNoX3ZlcnNpb24pKTsKKwor CQkvKiBsc24gKi8KKwkJdmFsdWVzWzNdID0gTFNOR2V0RGF0dW0oZGF0YS0+b2xfbHNuKTsK KworCQkvKiBsYXN0ICovCisJCXZhbHVlc1s0XSA9IFRpbWVzdGFtcFR6R2V0RGF0dW0odGlt ZV90X3RvX3RpbWVzdGFtcHR6KGRhdGEtPm9sX3RpbWVzdGFtcCkpOworCisJCS8qIGNvdW50 ICovCisJCXZhbHVlc1s1XSA9IEludDMyR2V0RGF0dW0oZGF0YS0+b2xfY291bnQpOworCisJ CXR1cGxlID0gaGVhcF9mb3JtX3R1cGxlKGZ1bmNjdHgtPnR1cGxlX2Rlc2MsIHZhbHVlcywg bnVsbHMpOworCQlyZXN1bHQgPSBIZWFwVHVwbGVHZXREYXR1bSh0dXBsZSk7CisJCVNSRl9S RVRVUk5fTkVYVChmdW5jY3R4LCByZXN1bHQpOworCX0KKworCS8qIGRvbmUgd2hlbiB0aGVy ZSBhcmUgbm8gbW9yZSBlbGVtZW50cyBsZWZ0ICovCisJU1JGX1JFVFVSTl9ET05FKGZ1bmNj dHgpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19jaGVja3N1bXMvcGdfY2hlY2tzdW1z LmMgYi9zcmMvYmluL3BnX2NoZWNrc3Vtcy9wZ19jaGVja3N1bXMuYwppbmRleCBhYTIxMDA3 NDk3Li4zMjEyMmRiMDIzIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2NoZWNrc3Vtcy9wZ19j aGVja3N1bXMuYworKysgYi9zcmMvYmluL3BnX2NoZWNrc3Vtcy9wZ19jaGVja3N1bXMuYwpA QCAtMTE1LDYgKzExNSw3IEBAIHN0cnVjdCBleGNsdWRlX2xpc3RfaXRlbQogICovCiBzdGF0 aWMgY29uc3Qgc3RydWN0IGV4Y2x1ZGVfbGlzdF9pdGVtIHNraXBbXSA9IHsKIAl7InBnX2Nv bnRyb2wiLCBmYWxzZX0sCisJeyJwZ19jb250cm9sX2xvZyIsIGZhbHNlfSwKIAl7InBnX2Zp bGVub2RlLm1hcCIsIGZhbHNlfSwKIAl7InBnX2ludGVybmFsLmluaXQiLCB0cnVlfSwKIAl7 IlBHX1ZFUlNJT04iLCBmYWxzZX0sCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX3Jlc2V0d2Fs L3BnX3Jlc2V0d2FsLmMgYi9zcmMvYmluL3BnX3Jlc2V0d2FsL3BnX3Jlc2V0d2FsLmMKaW5k ZXggZTdlZjJiOGJkMC4uNWNkM2ZjMjlmYiAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19yZXNl dHdhbC9wZ19yZXNldHdhbC5jCisrKyBiL3NyYy9iaW4vcGdfcmVzZXR3YWwvcGdfcmVzZXR3 YWwuYwpAQCAtNTAsNiArNTAsNyBAQAogI2luY2x1ZGUgImFjY2Vzcy94bG9nLmgiCiAjaW5j bHVkZSAiYWNjZXNzL3hsb2dfaW50ZXJuYWwuaCIKICNpbmNsdWRlICJjb21tb24vY29udHJv bGRhdGFfdXRpbHMuaCIKKyNpbmNsdWRlICJjb21tb24vY29udHJvbGxvZ191dGlscy5oIgog I2luY2x1ZGUgImNvbW1vbi9mZV9tZW11dGlscy5oIgogI2luY2x1ZGUgImNvbW1vbi9maWxl X3Blcm0uaCIKICNpbmNsdWRlICJjb21tb24vbG9nZ2luZy5oIgpAQCAtODg1LDYgKzg4Niw5 IEBAIFJld3JpdGVDb250cm9sRmlsZSh2b2lkKQogCiAJLyogVGhlIGNvbnRyb2wgZmlsZSBn ZXRzIGZsdXNoZWQgaGVyZS4gKi8KIAl1cGRhdGVfY29udHJvbGZpbGUoIi4iLCAmQ29udHJv bEZpbGUsIHRydWUpOworCisJLyogUHV0IGluZm9ybWF0aW9uIGludG8gb3BlcmF0aW9uIGxv Zy4gKi8KKwlwdXRfb3BlcmF0aW9uX2xvZ19lbGVtZW50KCIuIiwgT0xUX1JFU0VUV0FMKTsK IH0KIAogCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX3Jld2luZC9maWxlX29wcy5jIGIvc3Jj L2Jpbi9wZ19yZXdpbmQvZmlsZV9vcHMuYwppbmRleCAyNTk5NmI0ZGE0Li5mYjZkYzczMzA5 IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX3Jld2luZC9maWxlX29wcy5jCisrKyBiL3NyYy9i aW4vcGdfcmV3aW5kL2ZpbGVfb3BzLmMKQEAgLTM1NCw2ICszNTQsMzQgQEAgc2x1cnBGaWxl KGNvbnN0IGNoYXIgKmRhdGFkaXIsIGNvbnN0IGNoYXIgKnBhdGgsIHNpemVfdCAqZmlsZXNp emUpCiAJcmV0dXJuIGJ1ZmZlcjsKIH0KIAorLyoKKyAqIFRyeSB0byBvcGVuIGZpbGUuCisg KiBSZXR1cm5zIHRydWUgaWYgZmlsZSBleGlzdHMuCisgKi8KK2Jvb2wKK2NoZWNrX2ZpbGVf ZXhpc3RzKGNvbnN0IGNoYXIgKmRhdGFkaXIsIGNvbnN0IGNoYXIgKnBhdGgpCit7CisJY2hh cgkJZnVsbHBhdGhbTUFYUEdQQVRIXTsKKwlpbnQJCQlmZDsKKworCXNucHJpbnRmKGZ1bGxw YXRoLCBzaXplb2YoZnVsbHBhdGgpLCAiJXMvJXMiLCBkYXRhZGlyLCBwYXRoKTsKKworCWVy cm5vID0gMDsKKwlpZiAoKGZkID0gb3BlbihmdWxscGF0aCwgT19SRE9OTFkgfCBQR19CSU5B UlksIDApKSA9PSAtMSkKKwl7CisJCS8qIEZpbGUgZG9lc24ndCBleGlzdCAqLworCQlpZiAo ZXJybm8gPT0gRU5PRU5UKQorCQkJcmV0dXJuIGZhbHNlOworCisJCXBnX2ZhdGFsKCJjb3Vs ZCBub3Qgb3BlbiBmaWxlIFwiJXNcIiBmb3IgcmVhZGluZzogJW0iLAorCQkJCSBmdWxscGF0 aCk7CisJfQorCisJY2xvc2UoZmQpOworCisJcmV0dXJuIHRydWU7Cit9CisKIC8qCiAgKiBU cmF2ZXJzZSB0aHJvdWdoIGFsbCBmaWxlcyBpbiBhIGRhdGEgZGlyZWN0b3J5LCBjYWxsaW5n ICdjYWxsYmFjaycKICAqIGZvciBlYWNoIGZpbGUuCmRpZmYgLS1naXQgYS9zcmMvYmluL3Bn X3Jld2luZC9maWxlX29wcy5oIGIvc3JjL2Jpbi9wZ19yZXdpbmQvZmlsZV9vcHMuaAppbmRl eCA0MjdjZjhlMGI1Li45MDRjNjk3YTljIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX3Jld2lu ZC9maWxlX29wcy5oCisrKyBiL3NyYy9iaW4vcGdfcmV3aW5kL2ZpbGVfb3BzLmgKQEAgLTI2 LDQgKzI2LDYgQEAgZXh0ZXJuIGNoYXIgKnNsdXJwRmlsZShjb25zdCBjaGFyICpkYXRhZGly LCBjb25zdCBjaGFyICpwYXRoLCBzaXplX3QgKmZpbGVzaXplKTsKIHR5cGVkZWYgdm9pZCAo KnByb2Nlc3NfZmlsZV9jYWxsYmFja190KSAoY29uc3QgY2hhciAqcGF0aCwgZmlsZV90eXBl X3QgdHlwZSwgc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIgKmxpbmtfdGFyZ2V0KTsKIGV4dGVy biB2b2lkIHRyYXZlcnNlX2RhdGFkaXIoY29uc3QgY2hhciAqZGF0YWRpciwgcHJvY2Vzc19m aWxlX2NhbGxiYWNrX3QgY2FsbGJhY2spOwogCitleHRlcm4gYm9vbCBjaGVja19maWxlX2V4 aXN0cyhjb25zdCBjaGFyICpkYXRhZGlyLCBjb25zdCBjaGFyICpwYXRoKTsKKwogI2VuZGlm CQkJCQkJCS8qIEZJTEVfT1BTX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfcmV3aW5k L3BnX3Jld2luZC5jIGIvc3JjL2Jpbi9wZ19yZXdpbmQvcGdfcmV3aW5kLmMKaW5kZXggODU4 ZDhkOWYyZi4uZWIxMTUzMWRlMSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19yZXdpbmQvcGdf cmV3aW5kLmMKKysrIGIvc3JjL2Jpbi9wZ19yZXdpbmQvcGdfcmV3aW5kLmMKQEAgLTE5LDYg KzE5LDcgQEAKICNpbmNsdWRlICJjYXRhbG9nL2NhdHZlcnNpb24uaCIKICNpbmNsdWRlICJj YXRhbG9nL3BnX2NvbnRyb2wuaCIKICNpbmNsdWRlICJjb21tb24vY29udHJvbGRhdGFfdXRp bHMuaCIKKyNpbmNsdWRlICJjb21tb24vY29udHJvbGxvZ191dGlscy5oIgogI2luY2x1ZGUg ImNvbW1vbi9maWxlX3Blcm0uaCIKICNpbmNsdWRlICJjb21tb24vcmVzdHJpY3RlZF90b2tl bi5oIgogI2luY2x1ZGUgImNvbW1vbi9zdHJpbmcuaCIKQEAgLTQzLDYgKzQ0LDggQEAgc3Rh dGljIHZvaWQgY3JlYXRlQmFja3VwTGFiZWwoWExvZ1JlY1B0ciBzdGFydHBvaW50LCBUaW1l TGluZUlEIHN0YXJ0dGxpLAogCiBzdGF0aWMgdm9pZCBkaWdlc3RDb250cm9sRmlsZShDb250 cm9sRmlsZURhdGEgKkNvbnRyb2xGaWxlLAogCQkJCQkJCSAgY29uc3QgY2hhciAqY29udGVu dCwgc2l6ZV90IHNpemUpOworc3RhdGljIHZvaWQgZGlnZXN0T3BlcmF0aW9uTG9nKE9wZXJh dGlvbkxvZ0J1ZmZlciAqIExvZ0J1ZmZlciwKKwkJCQkJCQkgICBjb25zdCBjaGFyICpjb250 ZW50LCBzaXplX3Qgc2l6ZSk7CiBzdGF0aWMgdm9pZCBnZXRSZXN0b3JlQ29tbWFuZChjb25z dCBjaGFyICphcmd2MCk7CiBzdGF0aWMgdm9pZCBzYW5pdHlDaGVja3Modm9pZCk7CiBzdGF0 aWMgdm9pZCBmaW5kQ29tbW9uQW5jZXN0b3JUaW1lbGluZShYTG9nUmVjUHRyICpyZWNwdHIs IGludCAqdGxpSW5kZXgpOwpAQCAtNTMsNiArNTYsOCBAQCBzdGF0aWMgQ29udHJvbEZpbGVE YXRhIENvbnRyb2xGaWxlX3RhcmdldDsKIHN0YXRpYyBDb250cm9sRmlsZURhdGEgQ29udHJv bEZpbGVfc291cmNlOwogc3RhdGljIENvbnRyb2xGaWxlRGF0YSBDb250cm9sRmlsZV9zb3Vy Y2VfYWZ0ZXI7CiAKK3N0YXRpYyBPcGVyYXRpb25Mb2dCdWZmZXIgT3BlcmF0aW9uTG9nX3Rh cmdldCA9IHswfTsKKwogY29uc3QgY2hhciAqcHJvZ25hbWU7CiBpbnQJCQlXYWxTZWdTejsK IApAQCAtMzMwLDYgKzMzNSwxNSBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAlk aWdlc3RDb250cm9sRmlsZSgmQ29udHJvbEZpbGVfc291cmNlLCBidWZmZXIsIHNpemUpOwog CXBnX2ZyZWUoYnVmZmVyKTsKIAorCS8qIFJlYWQgdGFyZ2V0IG9wZXJhdGlvbiBsb2cgZm9y IHByZXZlbnQgcmV3cml0aW5nIGl0LiAqLworCWlmIChjaGVja19maWxlX2V4aXN0cyhkYXRh ZGlyX3RhcmdldCwgUEdfT1BFUkFUSU9OX0xPR19GSUxFKSkKKwl7CisJCWJ1ZmZlciA9IHNs dXJwRmlsZShkYXRhZGlyX3RhcmdldCwgUEdfT1BFUkFUSU9OX0xPR19GSUxFLCAmc2l6ZSk7 CisJCWRpZ2VzdE9wZXJhdGlvbkxvZygmT3BlcmF0aW9uTG9nX3RhcmdldCwgYnVmZmVyLCBz aXplKTsKKwkJcGdfZnJlZShidWZmZXIpOworCX0KKwkvKiBPdGhlcndpc2Ugd2UgaGF2ZSBP cGVyYXRpb25Mb2dfdGFyZ2V0IHdpdGggemVyb3MuICovCisKIAlzYW5pdHlDaGVja3MoKTsK IAogCS8qCkBAIC02NzIsNyArNjg2LDE0IEBAIHBlcmZvcm1fcmV3aW5kKGZpbGVtYXBfdCAq ZmlsZW1hcCwgcmV3aW5kX3NvdXJjZSAqc291cmNlLAogCUNvbnRyb2xGaWxlX25ldy5taW5S ZWNvdmVyeVBvaW50VExJID0gZW5kdGxpOwogCUNvbnRyb2xGaWxlX25ldy5zdGF0ZSA9IERC X0lOX0FSQ0hJVkVfUkVDT1ZFUlk7CiAJaWYgKCFkcnlfcnVuKQorCXsKIAkJdXBkYXRlX2Nv bnRyb2xmaWxlKGRhdGFkaXJfdGFyZ2V0LCAmQ29udHJvbEZpbGVfbmV3LCBkb19zeW5jKTsK KworCQkvKiBSZXN0b3JlIHNhdmVkIG9wZXJhdGlvbiBsb2cuICovCisJCXVwZGF0ZV9vcGVy YXRpb25fbG9nKGRhdGFkaXJfdGFyZ2V0LCAmT3BlcmF0aW9uTG9nX3RhcmdldCk7CisJCS8q IFB1dCBpbmZvcm1hdGlvbiBhYm91dCAicGdfcmV3aW5kIiBpbnRvIG9wZXJhdGlvbiBsb2cu ICovCisJCXB1dF9vcGVyYXRpb25fbG9nX2VsZW1lbnQoZGF0YWRpcl90YXJnZXQsIE9MVF9S RVdJTkQpOworCX0KIH0KIAogc3RhdGljIHZvaWQKQEAgLTEwMDksNiArMTAzMCw0NCBAQCBk aWdlc3RDb250cm9sRmlsZShDb250cm9sRmlsZURhdGEgKkNvbnRyb2xGaWxlLCBjb25zdCBj aGFyICpjb250ZW50LAogCWNoZWNrQ29udHJvbEZpbGUoQ29udHJvbEZpbGUpOwogfQogCisv KgorICogQ2hlY2sgQ1JDIG9mIG9wZXJhdGlvbiBsb2cgYnVmZmVyCisgKi8KK3N0YXRpYyB2 b2lkCitjaGVja09wZXJhdGlvbkxvZ0J1ZmZlcihPcGVyYXRpb25Mb2dCdWZmZXIgKiBMb2dC dWZmZXIpCit7CisJcGdfY3JjMzJjCWNyYzsKKworCS8qIENhbGN1bGF0ZSBDUkMgKi8KKwlJ TklUX0NSQzMyQyhjcmMpOworCUNPTVBfQ1JDMzJDKGNyYywKKwkJCQkoY2hhciAqKSBMb2dC dWZmZXIgKyBzaXplb2YocGdfY3JjMzJjKSwKKwkJCQlQR19PUEVSQVRJT05fTE9HX0ZVTExf U0laRSAtIHNpemVvZihwZ19jcmMzMmMpKTsKKwlGSU5fQ1JDMzJDKGNyYyk7CisKKwkvKiBB bmQgc2ltcGx5IGNvbXBhcmUgaXQgKi8KKwlpZiAoIUVRX0NSQzMyQyhjcmMsIExvZ0J1ZmZl ci0+aGVhZGVyLm9sX2NyYykpCisJCXBnX2ZhdGFsKCJ1bmV4cGVjdGVkIG9wZXJhdGlvbiBs b2cgQ1JDIik7Cit9CisKKy8qCisgKiBWZXJpZnkgb3BlcmF0aW9uIGxvZyBjb250ZW50cyBp biB0aGUgYnVmZmVyICdjb250ZW50JywgYW5kIGNvcHkgaXQgdG8KKyAqICpMb2dCdWZmZXIu CisgKi8KK3N0YXRpYyB2b2lkCitkaWdlc3RPcGVyYXRpb25Mb2coT3BlcmF0aW9uTG9nQnVm ZmVyICogTG9nQnVmZmVyLCBjb25zdCBjaGFyICpjb250ZW50LAorCQkJCSAgIHNpemVfdCBz aXplKQoreworCWlmIChzaXplICE9IFBHX09QRVJBVElPTl9MT0dfRlVMTF9TSVpFKQorCQlw Z19mYXRhbCgidW5leHBlY3RlZCBvcGVyYXRpb24gbG9nIHNpemUgJWQsIGV4cGVjdGVkICVk IiwKKwkJCQkgKGludCkgc2l6ZSwgUEdfT1BFUkFUSU9OX0xPR19GVUxMX1NJWkUpOworCisJ bWVtY3B5KExvZ0J1ZmZlciwgY29udGVudCwgc2l6ZSk7CisKKwkvKiBBZGRpdGlvbmFsIGNo ZWNrcyBvbiBvcGVyYXRpb24gbG9nICovCisJY2hlY2tPcGVyYXRpb25Mb2dCdWZmZXIoTG9n QnVmZmVyKTsKK30KKwogLyoKICAqIEdldCB2YWx1ZSBvZiBHVUMgcGFyYW1ldGVyIHJlc3Rv cmVfY29tbWFuZCBmcm9tIHRoZSB0YXJnZXQgY2x1c3Rlci4KICAqCmRpZmYgLS1naXQgYS9z cmMvYmluL3BnX3VwZ3JhZGUvY29udHJvbGRhdGEuYyBiL3NyYy9iaW4vcGdfdXBncmFkZS9j b250cm9sZGF0YS5jCmluZGV4IDkwNzFhNmZkNDUuLmRmNTg5N2M2N2YgMTAwNjQ0Ci0tLSBh L3NyYy9iaW4vcGdfdXBncmFkZS9jb250cm9sZGF0YS5jCisrKyBiL3NyYy9iaW4vcGdfdXBn cmFkZS9jb250cm9sZGF0YS5jCkBAIC0xNCw2ICsxNCw3IEBACiAjaW5jbHVkZSAicGdfdXBn cmFkZS5oIgogI2luY2x1ZGUgImNvbW1vbi9zdHJpbmcuaCIKIAorI2luY2x1ZGUgImNvbW1v bi9jb250cm9sbG9nX3V0aWxzLmgiCiAKIC8qCiAgKiBnZXRfY29udHJvbF9kYXRhKCkKQEAg LTczMSwzICs3MzIsNjkgQEAgZGlzYWJsZV9vbGRfY2x1c3Rlcih2b2lkKQogCQkgICAic3Rh cnRlZCBvbmNlIHRoZSBuZXcgY2x1c3RlciBoYXMgYmVlbiBzdGFydGVkLiIsCiAJCSAgIG9s ZF9jbHVzdGVyLnBnZGF0YSk7CiB9CisKKworLyoKKyAqIGNvcHlfb3BlcmF0aW9uX2xvZygp CisgKgorICogQ29weSBvcGVyYXRpb24gbG9nIGZyb20gdGhlIG9sZCBjbHVzdGVyIHRvIHRo ZSBuZXcgY2x1c3RlciBhbmQgcHV0IGluZm8KKyAqIGFib3V0IHVwZ3JhZGUuIElmIG9wZXJh dGlvbiBsb2cgbm90IGV4aXN0cyBpbiB0aGUgb2xkIGNsdXN0ZXIgdGhlbiBwdXQKKyAqIHN0 YXJ0dXAgbWVzc2FnZSB3aXRoIHZlcnNpb24gaW5mbyBvZiBvbGQgY2x1c3Rlci4KKyAqLwor dm9pZAorY29weV9vcGVyYXRpb25fbG9nKHZvaWQpCit7CisJT3BlcmF0aW9uTG9nQnVmZmVy ICpsb2dfYnVmZmVyOworCWJvb2wJCWxvZ19pc19lbXB0eSA9IHRydWU7CisJQ2x1c3Rlcklu Zm8gKmNsdXN0ZXI7CisJYm9vbAkJY3JjX29rOworCWNoYXIJCWZpbGVuYW1lW01BWFBHUEFU SF07CisJRklMRQkgICAqZnA7CisKKwkvKiBUcnkgdG8gb3BlbiBvcGVyYXRpb24gbG9nIGZp bGUgaW4gdGhlIG9sZCBjbHVzdGVyLiAqLworCXNucHJpbnRmKGZpbGVuYW1lLCBzaXplb2Yo ZmlsZW5hbWUpLCAiJXMvJXMiLCBvbGRfY2x1c3Rlci5wZ2RhdGEsIFBHX09QRVJBVElPTl9M T0dfRklMRSk7CisJaWYgKChmcCA9IGZvcGVuKGZpbGVuYW1lLCAiciIpKSAhPSBOVUxMKQor CXsKKwkJbG9nX2lzX2VtcHR5ID0gZmFsc2U7CisJCWZjbG9zZShmcCk7CisJfQorCisJaWYg KCFsb2dfaXNfZW1wdHkpCisJeworCQkvKiBSZWFkIG9wZXJhdGlvbiBsb2cgZnJvbSB0aGUg b2xkIGNsdXN0ZXIuICovCisJCWxvZ19idWZmZXIgPSBnZXRfb3BlcmF0aW9uX2xvZyhvbGRf Y2x1c3Rlci5wZ2RhdGEsICZjcmNfb2spOworCQlpZiAoIWNyY19vaykKKwkJCXBnX2ZhdGFs KCJwZ19jb250cm9sIG9wZXJhdGlvbiBsb2cgQ1JDIHZhbHVlIGlzIGluY29ycmVjdCIpOwor CisJCS8qCisJCSAqIENoZWNrIG9wZXJhdGlvbiBsb2cgcmVjb3JkcyBpbiB0aGUgb2xkIGNs dXN0ZXIuIE5lZWQgdG8gcHV0CisJCSAqIGluZm9ybWF0aW9uIGFib3V0IG9sZCB2ZXJzaW9u IGluIGNhc2Ugb3BlcmF0aW9uIGxvZyBpcyBlbXB0eS4KKwkJICovCisJCWxvZ19pc19lbXB0 eSA9IChnZXRfb3BlcmF0aW9uX2xvZ19jb3VudChsb2dfYnVmZmVyKSA9PSAwKTsKKwl9CisJ ZWxzZQorCQlsb2dfYnVmZmVyID0gZ2V0X2VtcHR5X29wZXJhdGlvbl9sb2dfYnVmZmVyKCk7 CisKKwlpZiAodXNlcl9vcHRzLnRyYW5zZmVyX21vZGUgPT0gVFJBTlNGRVJfTU9ERV9MSU5L KQorCQljbHVzdGVyID0gJm9sZF9jbHVzdGVyOworCWVsc2UKKwl7CisJCWNsdXN0ZXIgPSAm bmV3X2NsdXN0ZXI7CisKKwkJLyogUGxhY2Ugb3BlcmF0aW9uIGxvZyBpbiB0aGUgbmV3IGNs dXN0ZXIuICovCisJCXVwZGF0ZV9vcGVyYXRpb25fbG9nKGNsdXN0ZXItPnBnZGF0YSwgbG9n X2J1ZmZlcik7CisJfQorCisJcGZyZWUobG9nX2J1ZmZlcik7CisKKwkvKiBQdXQgaW5mb3Jt YXRpb24gYWJvdXQgdGhlIG9sZCBjbHVzdGVyIGlmIG5lZWRlZC4gKi8KKwlpZiAobG9nX2lz X2VtcHR5KQorCQlwdXRfb3BlcmF0aW9uX2xvZ19lbGVtZW50X3ZlcnNpb24oY2x1c3Rlci0+ cGdkYXRhLCBPTFRfU1RBUlRVUCwKKwkJCQkJCQkJCQkgIEVEX1BHX09SSUdJTkFMLAorCQkJ CQkJCQkJCSAgb2xkX2NsdXN0ZXIuYmluX3ZlcnNpb25fbnVtKTsKKworCS8qCisJICogUHV0 IGluZm9ybWF0aW9uIGFib3V0IHVwZ3JhZGUgaW4gdGhlIG9wZXJhdGlvbiBsb2cgb2YgdGhl IG9sZCBjbHVzdGVyLgorCSAqLworCXB1dF9vcGVyYXRpb25fbG9nX2VsZW1lbnQoY2x1c3Rl ci0+cGdkYXRhLCBPTFRfVVBHUkFERSk7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX3Vw Z3JhZGUvZXhlYy5jIGIvc3JjL2Jpbi9wZ191cGdyYWRlL2V4ZWMuYwppbmRleCA1YjJlZGVi ZTQxLi42NzI4YTYxN2RlIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX3VwZ3JhZGUvZXhlYy5j CisrKyBiL3NyYy9iaW4vcGdfdXBncmFkZS9leGVjLmMKQEAgLTM3LDcgKzM3LDggQEAgZ2V0 X2Jpbl92ZXJzaW9uKENsdXN0ZXJJbmZvICpjbHVzdGVyKQogCUZJTEUJICAgKm91dHB1dDsK IAlpbnQJCQlyYzsKIAlpbnQJCQl2MSA9IDAsCi0JCQkJdjIgPSAwOworCQkJCXYyID0gMCwK KwkJCQl2MyA9IDA7CiAKIAlzbnByaW50ZihjbWQsIHNpemVvZihjbWQpLCAiXCIlcy9wZ19j dGxcIiAtLXZlcnNpb24iLCBjbHVzdGVyLT5iaW5kaXIpOwogCWZmbHVzaChOVUxMKTsKQEAg LTUyLDE4ICs1MywyMCBAQCBnZXRfYmluX3ZlcnNpb24oQ2x1c3RlckluZm8gKmNsdXN0ZXIp CiAJCXBnX2ZhdGFsKCJjb3VsZCBub3QgZ2V0IHBnX2N0bCB2ZXJzaW9uIGRhdGEgdXNpbmcg JXM6ICVzIiwKIAkJCQkgY21kLCB3YWl0X3Jlc3VsdF90b19zdHIocmMpKTsKIAotCWlmIChz c2NhbmYoY21kX291dHB1dCwgIiUqcyAlKnMgJWQuJWQiLCAmdjEsICZ2MikgPCAxKQotCQlw Z19mYXRhbCgiY291bGQgbm90IGdldCBwZ19jdGwgdmVyc2lvbiBvdXRwdXQgZnJvbSAlcyIs IGNtZCk7CisJaWYgKHNzY2FuZihjbWRfb3V0cHV0LCAiJSpzICUqcyAlZC4lZC4lZCIsICZ2 MSwgJnYyLCAmdjMpIDwgMSkKKwkJcGdfZmF0YWwoImNvdWxkIG5vdCBnZXQgcGdfY3RsIHZl cnNpb24gb3V0cHV0IGZyb20gJXNcbiIsIGNtZCk7CiAKIAlpZiAodjEgPCAxMCkKIAl7CiAJ CS8qIG9sZCBzdHlsZSwgZS5nLiA5LjYuMSAqLwogCQljbHVzdGVyLT5iaW5fdmVyc2lvbiA9 IHYxICogMTAwMDAgKyB2MiAqIDEwMDsKKwkJY2x1c3Rlci0+YmluX3ZlcnNpb25fbnVtID0g KGNsdXN0ZXItPmJpbl92ZXJzaW9uICsgdjMpICogMTAwOwogCX0KIAllbHNlCiAJewogCQkv KiBuZXcgc3R5bGUsIGUuZy4gMTAuMSAqLwogCQljbHVzdGVyLT5iaW5fdmVyc2lvbiA9IHYx ICogMTAwMDA7CisJCWNsdXN0ZXItPmJpbl92ZXJzaW9uX251bSA9IChjbHVzdGVyLT5iaW5f dmVyc2lvbiArIHYyKSAqIDEwMDsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdf dXBncmFkZS9wZ191cGdyYWRlLmMgYi9zcmMvYmluL3BnX3VwZ3JhZGUvcGdfdXBncmFkZS5j CmluZGV4IGU1NTk3ZDMxMDUuLmRmNjI1OGFiMDMgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdf dXBncmFkZS9wZ191cGdyYWRlLmMKKysrIGIvc3JjL2Jpbi9wZ191cGdyYWRlL3BnX3VwZ3Jh ZGUuYwpAQCAtMTk0LDYgKzE5NCw4IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQog CQljaGVja19vaygpOwogCX0KIAorCWNvcHlfb3BlcmF0aW9uX2xvZygpOworCiAJY3JlYXRl X3NjcmlwdF9mb3Jfb2xkX2NsdXN0ZXJfZGVsZXRpb24oJmRlbGV0aW9uX3NjcmlwdF9maWxl X25hbWUpOwogCiAJaXNzdWVfd2FybmluZ3NfYW5kX3NldF93YWxfbGV2ZWwoKTsKZGlmZiAt LWdpdCBhL3NyYy9iaW4vcGdfdXBncmFkZS9wZ191cGdyYWRlLmggYi9zcmMvYmluL3BnX3Vw Z3JhZGUvcGdfdXBncmFkZS5oCmluZGV4IDVmMmExMTZmMjMuLmE2ZGRhN2IwYzMgMTAwNjQ0 Ci0tLSBhL3NyYy9iaW4vcGdfdXBncmFkZS9wZ191cGdyYWRlLmgKKysrIGIvc3JjL2Jpbi9w Z191cGdyYWRlL3BnX3VwZ3JhZGUuaApAQCAtMjY0LDYgKzI2NCw3IEBAIHR5cGVkZWYgc3Ry dWN0CiAJdWludDMyCQltYWpvcl92ZXJzaW9uOwkvKiBQR19WRVJTSU9OIG9mIGNsdXN0ZXIg Ki8KIAljaGFyCQltYWpvcl92ZXJzaW9uX3N0cls2NF07CS8qIHN0cmluZyBQR19WRVJTSU9O IG9mIGNsdXN0ZXIgKi8KIAl1aW50MzIJCWJpbl92ZXJzaW9uOwkvKiB2ZXJzaW9uIHJldHVy bmVkIGZyb20gcGdfY3RsICovCisJdWludDMyCQliaW5fdmVyc2lvbl9udW07CS8qIGZ1bGwg dmVyc2lvbiAoaW5jbC4gbWlub3IgcGFydCkgcmV0dXJuZWQgZnJvbSBwZ19jdGwgKi8KIAlj b25zdCBjaGFyICp0YWJsZXNwYWNlX3N1ZmZpeDsJLyogZGlyZWN0b3J5IHNwZWNpZmljYXRp b24gKi8KIH0gQ2x1c3RlckluZm87CiAKQEAgLTM0OCw2ICszNDksNyBAQCB2b2lkCQljcmVh dGVfc2NyaXB0X2Zvcl9vbGRfY2x1c3Rlcl9kZWxldGlvbihjaGFyICoqZGVsZXRpb25fc2Ny aXB0X2ZpbGVfbmFtZSk7CiB2b2lkCQlnZXRfY29udHJvbF9kYXRhKENsdXN0ZXJJbmZvICpj bHVzdGVyLCBib29sIGxpdmVfY2hlY2spOwogdm9pZAkJY2hlY2tfY29udHJvbF9kYXRhKENv bnRyb2xEYXRhICpvbGRjdHJsLCBDb250cm9sRGF0YSAqbmV3Y3RybCk7CiB2b2lkCQlkaXNh YmxlX29sZF9jbHVzdGVyKHZvaWQpOwordm9pZAkJY29weV9vcGVyYXRpb25fbG9nKHZvaWQp OwogCiAKIC8qIGR1bXAuYyAqLwpkaWZmIC0tZ2l0IGEvc3JjL2NvbW1vbi9NYWtlZmlsZSBi L3NyYy9jb21tb24vTWFrZWZpbGUKaW5kZXggMTEzMDI5YmY3Yi4uNDZjZjY1MzQ2NiAxMDA2 NDQKLS0tIGEvc3JjL2NvbW1vbi9NYWtlZmlsZQorKysgYi9zcmMvY29tbW9uL01ha2VmaWxl CkBAIC01Miw2ICs1Miw3IEBAIE9CSlNfQ09NTU9OID0gXAogCWNvbXByZXNzaW9uLm8gXAog CWNvbmZpZ19pbmZvLm8gXAogCWNvbnRyb2xkYXRhX3V0aWxzLm8gXAorCWNvbnRyb2xsb2df dXRpbHMubyBcCiAJZDJzLm8gXAogCWVuY25hbWVzLm8gXAogCWV4ZWMubyBcCmRpZmYgLS1n aXQgYS9zcmMvY29tbW9uL2NvbnRyb2xsb2dfdXRpbHMuYyBiL3NyYy9jb21tb24vY29udHJv bGxvZ191dGlscy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLmQz MDkxNzljMzMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tbW9uL2NvbnRyb2xsb2dfdXRp bHMuYwpAQCAtMCwwICsxLDY4MyBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICog Y29udHJvbGxvZ191dGlscy5jCisgKgkJQ29tbW9uIGNvZGUgZm9yIG9wZXJhdGlvbiBsb2cg ZmlsZSBvdXRwdXQuCisgKgorICoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0y MDIyLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICogUG9ydGlvbnMg Q29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlm b3JuaWEKKyAqCisgKgorICogSURFTlRJRklDQVRJT04KKyAqCSAgc3JjL2NvbW1vbi9jb250 cm9sbG9nX3V0aWxzLmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisjaWZu ZGVmIEZST05URU5ECisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKyNlbHNlCisjaW5jbHVkZSAi cG9zdGdyZXNfZmUuaCIKKyNlbmRpZgorCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVk ZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHRpbWUuaD4K KworI2luY2x1ZGUgImFjY2Vzcy94bG9nX2ludGVybmFsLmgiCisjaW5jbHVkZSAiY2F0YWxv Zy9wZ19jb250cm9sLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19jb250cm9sbG9nLmgiCisj aW5jbHVkZSAiY29tbW9uL2NvbnRyb2xkYXRhX3V0aWxzLmgiCisjaW5jbHVkZSAiY29tbW9u L2NvbnRyb2xsb2dfdXRpbHMuaCIKKyNpbmNsdWRlICJjb21tb24vZmlsZV9wZXJtLmgiCisj aWZkZWYgRlJPTlRFTkQKKyNpbmNsdWRlICJjb21tb24vZmlsZV91dGlscy5oIgorI2luY2x1 ZGUgImNvbW1vbi9sb2dnaW5nLmgiCisjZW5kaWYKKyNpbmNsdWRlICJwb3J0L3BnX2NyYzMy Yy5oIgorCisjaWZuZGVmIEZST05URU5ECisjaW5jbHVkZSAicGdzdGF0LmgiCisjaW5jbHVk ZSAic3RvcmFnZS9mZC5oIgorI2luY2x1ZGUgInN0b3JhZ2UvbHdsb2NrLmgiCisjZW5kaWYK KworLyoKKyAqIERlc2NyaXB0aW9ucyBvZiBzdXBwb3J0ZWQgb3BlcmF0aW9ucyBvZiBvcGVy YXRpb24gbG9nLgorICovCitPcGVyYXRpb25Mb2dUeXBlRGVzYyBPcGVyYXRpb25Mb2dUeXBl c0Rlc2NzW10gPSB7CisJe09MVF9CT09UU1RSQVAsIE9MTV9JTlNFUlQsICJib290c3RyYXAi fSwKKwl7T0xUX1NUQVJUVVAsIE9MTV9NRVJHRSwgInN0YXJ0dXAifSwKKwl7T0xUX1JFU0VU V0FMLCBPTE1fTUVSR0UsICJwZ19yZXNldHdhbCJ9LAorCXtPTFRfUkVXSU5ELCBPTE1fTUVS R0UsICJwZ19yZXdpbmQifSwKKwl7T0xUX1VQR1JBREUsIE9MTV9JTlNFUlQsICJwZ191cGdy YWRlIn0sCisJe09MVF9QUk9NT1RFRCwgT0xNX0lOU0VSVCwgInByb21vdGVkIn0KK307CisK KworLyoKKyAqIGNhbGN1bGF0ZV9vcGVyYXRpb25fbG9nX2NyYygpCisgKgorICogQ2FsY3Vs YXRlIENSQyBvZiBvcGVyYXRpb24gbG9nLgorICovCitzdGF0aWMgcGdfY3JjMzJjCitjYWxj dWxhdGVfb3BlcmF0aW9uX2xvZ19jcmMoT3BlcmF0aW9uTG9nQnVmZmVyICogbG9nX2J1ZmZl cikKK3sKKwlwZ19jcmMzMmMJY3JjOworCisJSU5JVF9DUkMzMkMoY3JjKTsKKwlDT01QX0NS QzMyQyhjcmMsCisJCQkJKGNoYXIgKikgbG9nX2J1ZmZlciArIHNpemVvZihwZ19jcmMzMmMp LAorCQkJCVBHX09QRVJBVElPTl9MT0dfRlVMTF9TSVpFIC0gc2l6ZW9mKHBnX2NyYzMyYykp OworCUZJTl9DUkMzMkMoY3JjKTsKKworCXJldHVybiBjcmM7Cit9CisKKy8qCisgKiBnZXRf ZW1wdHlfb3BlcmF0aW9uX2xvZygpCisgKgorICogRnVuY3Rpb24gcmV0dXJucyBlbXB0eSBv cGVyYXRpb24gbG9nIGJ1ZmZlci4KKyAqLworT3BlcmF0aW9uTG9nQnVmZmVyICoKK2dldF9l bXB0eV9vcGVyYXRpb25fbG9nX2J1ZmZlcih2b2lkKQoreworCU9wZXJhdGlvbkxvZ0J1ZmZl ciAqbG9nX2J1ZmZlcjsKKworCS8qIEluaXRpYWxpemUgb3BlcmF0aW9uIGxvZyBmaWxlIHdp dGggemVyb3MuICovCisJbG9nX2J1ZmZlciA9IHBhbGxvYzAoUEdfT1BFUkFUSU9OX0xPR19G VUxMX1NJWkUpOworCisJLyogQ2FsY3VsYXRlIENSQy4gKi8KKwlsb2dfYnVmZmVyLT5oZWFk ZXIub2xfY3JjID0gY2FsY3VsYXRlX29wZXJhdGlvbl9sb2dfY3JjKGxvZ19idWZmZXIpOwor CisJcmV0dXJuIGxvZ19idWZmZXI7Cit9CisKKy8qCisgKiBjcmVhdGVfb3BlcmF0aW9uX2xv Z19maWxlKCkKKyAqCisgKiBDcmVhdGUgZmlsZSBmb3Igb3BlcmF0aW9uIGxvZyBhbmQgaW5p dGlhbGl6ZSBpdCB3aXRoIHplcm9zLgorICogRnVuY3Rpb24gcmV0dXJucyBkZXNjcmlwdG9y IG9mIGNyZWF0ZWQgZmlsZSBvciAtMSBpbiBlcnJvciBjYXNlLgorICogRnVuY3Rpb24gY2Fu bm90IGdlbmVyYXRlIHJlcG9ydCB3aXRoIEVSUk9SIGFuZCBGQVRBTCBmb3IgY29ycmVjdCBs b2NrCisgKiByZWxlYXNpbmcgb24gdG9wIGxldmVsLgorICovCitzdGF0aWMgaW50CitjcmVh dGVfb3BlcmF0aW9uX2xvZ19maWxlKGNoYXIgKkNvbnRyb2xMb2dGaWxlUGF0aCkKK3sKKwlp bnQJCQlmZDsKKwlPcGVyYXRpb25Mb2dCdWZmZXIgKmxvZ19idWZmZXI7CisKKyNpZm5kZWYg RlJPTlRFTkQKKwlmZCA9IE9wZW5UcmFuc2llbnRGaWxlKENvbnRyb2xMb2dGaWxlUGF0aCwg T19SRFdSIHwgT19DUkVBVCB8IFBHX0JJTkFSWSk7CisKKwlpZiAoZmQgPCAwKQorCXsKKwkJ ZXJlcG9ydChMT0csCisJCQkJKGVycmNvZGVfZm9yX2ZpbGVfYWNjZXNzKCksCisJCQkJIGVy cm1zZygiY291bGQgbm90IGNyZWF0ZSBmaWxlIFwiJXNcIjogJW0iLAorCQkJCQkJUEdfT1BF UkFUSU9OX0xPR19GSUxFKSkpOworCQlyZXR1cm4gLTE7CisJfQorI2Vsc2UKKwlmZCA9IG9w ZW4oQ29udHJvbExvZ0ZpbGVQYXRoLCBPX1JEV1IgfCBPX0NSRUFUIHwgUEdfQklOQVJZLCBw Z19maWxlX2NyZWF0ZV9tb2RlKTsKKworCWlmIChmZCA8IDApCisJCXBnX2ZhdGFsKCJjb3Vs ZCBub3QgY3JlYXRlIGZpbGUgXCIlc1wiOiAlbSIsCisJCQkJIENvbnRyb2xMb2dGaWxlUGF0 aCk7CisjZW5kaWYKKworCS8qIEluaXRpYWxpemUgb3BlcmF0aW9uIGxvZyBmaWxlIHdpdGgg emVyb3MuICovCisJbG9nX2J1ZmZlciA9IGdldF9lbXB0eV9vcGVyYXRpb25fbG9nX2J1ZmZl cigpOworCisJZXJybm8gPSAwOworCWlmICh3cml0ZShmZCwgbG9nX2J1ZmZlciwgUEdfT1BF UkFUSU9OX0xPR19GVUxMX1NJWkUpICE9IFBHX09QRVJBVElPTl9MT0dfRlVMTF9TSVpFKQor CXsKKwkJLyogSWYgd3JpdGUgZGlkbid0IHNldCBlcnJubywgYXNzdW1lIHByb2JsZW0gaXMg bm8gZGlzayBzcGFjZS4gKi8KKwkJaWYgKGVycm5vID09IDApCisJCQllcnJubyA9IEVOT1NQ QzsKKworI2lmbmRlZiBGUk9OVEVORAorCQllcmVwb3J0KExPRywKKwkJCQkoZXJyY29kZV9m b3JfZmlsZV9hY2Nlc3MoKSwKKwkJCQkgZXJybXNnKCJjb3VsZCBub3Qgd3JpdGUgb3BlcmF0 aW9uIGxvZyBpbiB0aGUgZmlsZSBcIiVzXCI6ICVtIiwKKwkJCQkJCUNvbnRyb2xMb2dGaWxl UGF0aCkpKTsKKyNlbHNlCisJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgd3JpdGUgb3BlcmF0aW9u IGxvZyBpbiB0aGUgZmlsZSBcIiVzXCI6ICVtIiwKKwkJCQkgQ29udHJvbExvZ0ZpbGVQYXRo KTsKKyNlbmRpZgorCQlwZnJlZShsb2dfYnVmZmVyKTsKKwkJcmV0dXJuIC0xOworCX0KKwor CXBmcmVlKGxvZ19idWZmZXIpOworCisjaWZuZGVmIEZST05URU5ECisJaWYgKHBnX2ZzeW5j KGZkKSAhPSAwKQorCXsKKwkJZXJlcG9ydChMT0csCisJCQkJKGVycmNvZGVfZm9yX2ZpbGVf YWNjZXNzKCksCisJCQkJIGVycm1zZygiY291bGQgbm90IGZzeW5jIGZpbGUgXCIlc1wiOiAl bSIsCisJCQkJCQlDb250cm9sTG9nRmlsZVBhdGgpKSk7CisJCXJldHVybiAtMTsKKwl9Cisj ZWxzZQorCWlmIChmc3luYyhmZCkgIT0gMCkKKwkJcGdfZmF0YWwoImNvdWxkIG5vdCBmc3lu YyBmaWxlIFwiJXNcIjogJW0iLCBDb250cm9sTG9nRmlsZVBhdGgpOworI2VuZGlmCisKKwlp ZiAobHNlZWsoZmQsIDAsIFNFRUtfU0VUKSAhPSAwKQorCXsKKyNpZm5kZWYgRlJPTlRFTkQK KwkJZXJlcG9ydChMT0csCisJCQkJKGVycmNvZGVfZm9yX2ZpbGVfYWNjZXNzKCksCisJCQkJ IGVycm1zZygiY291bGQgbm90IHNlZWsgdG8gcG9zaXRpb24gMCBvZiBmaWxlIFwiJXNcIjog JW0iLAorCQkJCQkJQ29udHJvbExvZ0ZpbGVQYXRoKSkpOworI2Vsc2UKKwkJcGdfZmF0YWwo ImNvdWxkIG5vdCBzZWVrIHRvIHBvc2l0aW9uIDAgb2YgZmlsZSBcIiVzXCI6ICVtIiwKKwkJ CQkgQ29udHJvbExvZ0ZpbGVQYXRoKTsKKyNlbmRpZgorCQlyZXR1cm4gLTE7CisJfQorCisJ cmV0dXJuIGZkOworfQorCisjZGVmaW5lIExXTG9ja1JlbGVhc2VTYXZlRXJybm8obG9jaykg XAorCXNhdmVfZXJybm8gPSBlcnJubzsgXAorCUxXTG9ja1JlbGVhc2UobG9jayk7IFwKKwll cnJubyA9IHNhdmVfZXJybm87IFwKKworLyoKKyAqIGdldF9vcGVyYXRpb25fbG9nKCkKKyAq CisgKiBHZXQgdGhlIG9wZXJhdGlvbiBsb2cgcmluZyBidWZmZXIuIFRoZSByZXN1bHQgaXMg cmV0dXJuZWQgYXMgYSBwYWxsb2MnZCBjb3B5CisgKiBvZiBvcGVyYXRpb24gbG9nIGJ1ZmZl ci4KKyAqCisgKiBjcmNfb2tfcCBjYW4gYmUgdXNlZCBieSB0aGUgY2FsbGVyIHRvIHNlZSB3 aGV0aGVyIHRoZSBDUkMgb2YgdGhlIG9wZXJhdGlvbgorICogbG9nIGlzIGNvcnJlY3QuCisg Ki8KK09wZXJhdGlvbkxvZ0J1ZmZlciAqCitnZXRfb3BlcmF0aW9uX2xvZyhjb25zdCBjaGFy ICpEYXRhRGlyLCBib29sICpjcmNfb2tfcCkKK3sKKwlPcGVyYXRpb25Mb2dCdWZmZXIgKmxv Z19idWZmZXIgPSBOVUxMOworCWludAkJCWZkOworCWNoYXIJCUNvbnRyb2xMb2dGaWxlUGF0 aFtNQVhQR1BBVEhdOworCXBnX2NyYzMyYwljcmM7CisJaW50CQkJcjsKKyNpZm5kZWYgRlJP TlRFTkQKKwlpbnQJCQlzYXZlX2Vycm5vOworI2VuZGlmCisKKwlBc3NlcnQoY3JjX29rX3Ap OworCisJc25wcmludGYoQ29udHJvbExvZ0ZpbGVQYXRoLCBNQVhQR1BBVEgsICIlcy8lcyIs IERhdGFEaXIsIFBHX09QRVJBVElPTl9MT0dfRklMRSk7CisKKyNpZm5kZWYgRlJPTlRFTkQK KwlMV0xvY2tBY3F1aXJlKENvbnRyb2xMb2dGaWxlTG9jaywgTFdfRVhDTFVTSVZFKTsKKwlm ZCA9IE9wZW5UcmFuc2llbnRGaWxlKENvbnRyb2xMb2dGaWxlUGF0aCwgT19SRE9OTFkgfCBQ R19CSU5BUlkpOworI2Vsc2UKKwlmZCA9IG9wZW4oQ29udHJvbExvZ0ZpbGVQYXRoLCBPX1JE T05MWSB8IFBHX0JJTkFSWSwgMCk7CisjZW5kaWYKKwlpZiAoZmQgPCAwKQorCXsKKwkJLyog RmlsZSBkb2Vzbid0IGV4aXN0IC0gdHJ5IHRvIGNyZWF0ZSBpdC4gKi8KKwkJaWYgKGVycm5v ID09IEVOT0VOVCkKKwkJCWZkID0gY3JlYXRlX29wZXJhdGlvbl9sb2dfZmlsZShDb250cm9s TG9nRmlsZVBhdGgpOworCisJCWlmIChmZCA8IDApCisJCXsKKyNpZm5kZWYgRlJPTlRFTkQK KwkJCUxXTG9ja1JlbGVhc2VTYXZlRXJybm8oQ29udHJvbExvZ0ZpbGVMb2NrKTsKKworCQkJ ZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGVfZm9yX2ZpbGVfYWNjZXNzKCksCisJCQkJ CSBlcnJtc2coImNvdWxkIG5vdCBvcGVuIGZpbGUgXCIlc1wiIGZvciByZWFkaW5nOiAlbSIs CisJCQkJCQkJQ29udHJvbExvZ0ZpbGVQYXRoKSkpOworI2Vsc2UKKwkJCXBnX2ZhdGFsKCJj b3VsZCBub3Qgb3BlbiBmaWxlIFwiJXNcIiBmb3IgcmVhZGluZzogJW0iLAorCQkJCQkgQ29u dHJvbExvZ0ZpbGVQYXRoKTsKKyNlbmRpZgorCQl9CisJfQorCisJbG9nX2J1ZmZlciA9IHBh bGxvYyhQR19PUEVSQVRJT05fTE9HX0ZVTExfU0laRSk7CisKKwlyID0gcmVhZChmZCwgbG9n X2J1ZmZlciwgUEdfT1BFUkFUSU9OX0xPR19GVUxMX1NJWkUpOworCWlmIChyICE9IFBHX09Q RVJBVElPTl9MT0dfRlVMTF9TSVpFKQorCXsKKyNpZm5kZWYgRlJPTlRFTkQKKwkJTFdMb2Nr UmVsZWFzZVNhdmVFcnJubyhDb250cm9sTG9nRmlsZUxvY2spOworCisJCWVyZXBvcnQoRVJS T1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9EQVRBX0NPUlJVUFRFRCksCisJCQkJIGVycm1z ZygiY291bGQgbm90IHJlYWQgb3BlcmF0aW9uIGxvZyBmcm9tIHRoZSBmaWxlIFwiJXNcIjog cmVhZCAlZCBvZiAlZCIsCisJCQkJCQlDb250cm9sTG9nRmlsZVBhdGgsIHIsIFBHX09QRVJB VElPTl9MT0dfRlVMTF9TSVpFKSkpOworI2Vsc2UKKwkJcGdfZmF0YWwoImNvdWxkIG5vdCBy ZWFkIG9wZXJhdGlvbiBsb2cgZnJvbSB0aGUgZmlsZSBcIiVzXCI6IHJlYWQgJWQgb2YgJWQi LAorCQkJCSBDb250cm9sTG9nRmlsZVBhdGgsIHIsIFBHX09QRVJBVElPTl9MT0dfRlVMTF9T SVpFKTsKKyNlbmRpZgorCX0KKworI2lmbmRlZiBGUk9OVEVORAorCWlmIChDbG9zZVRyYW5z aWVudEZpbGUoZmQpICE9IDApCisJeworCQlMV0xvY2tSZWxlYXNlU2F2ZUVycm5vKENvbnRy b2xMb2dGaWxlTG9jayk7CisKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZV9mb3Jf ZmlsZV9hY2Nlc3MoKSwKKwkJCQkgZXJybXNnKCJjb3VsZCBub3QgY2xvc2UgZmlsZSBcIiVz XCI6ICVtIiwKKwkJCQkJCUNvbnRyb2xMb2dGaWxlUGF0aCkpKTsKKwl9CisJTFdMb2NrUmVs ZWFzZShDb250cm9sTG9nRmlsZUxvY2spOworI2Vsc2UKKwlpZiAoY2xvc2UoZmQpICE9IDAp CisJCXBnX2ZhdGFsKCJjb3VsZCBub3QgY2xvc2UgZmlsZSBcIiVzXCI6ICVtIiwgQ29udHJv bExvZ0ZpbGVQYXRoKTsKKyNlbmRpZgorCisJLyogQ2hlY2sgdGhlIENSQy4gKi8KKwljcmMg PSBjYWxjdWxhdGVfb3BlcmF0aW9uX2xvZ19jcmMobG9nX2J1ZmZlcik7CisKKwkqY3JjX29r X3AgPSBFUV9DUkMzMkMoY3JjLCBsb2dfYnVmZmVyLT5oZWFkZXIub2xfY3JjKTsKKworCXJl dHVybiBsb2dfYnVmZmVyOworfQorCisvKgorICogdXBkYXRlX29wZXJhdGlvbl9sb2coKQor ICoKKyAqIFVwZGF0ZSB0aGUgb3BlcmF0aW9uIGxvZyByaW5nIGJ1ZmZlci4KKyAqIE5vdGUu IFRvIHByb3RlY3QgYWdhaW5zdCBmYWlsdXJlcyBhIG9wZXJhdGlvbiBsb2cgZmlsZSBpcyB3 cml0dGVuIGluIHR3bworICogc3RhZ2VzOiBmaXJzdCBhIHRlbXBvcmFyeSBmaWxlIGlzIGNy ZWF0ZWQsIHRoZW4gdGhlIHRlbXBvcmFyeSBmaWxlIGlzCisgKiByZW5hbWVkIHRvIHRoZSBv cGVyYXRpb24gbG9nIGZpbGUuCisgKi8KK3ZvaWQKK3VwZGF0ZV9vcGVyYXRpb25fbG9nKGNv bnN0IGNoYXIgKkRhdGFEaXIsIE9wZXJhdGlvbkxvZ0J1ZmZlciAqIGxvZ19idWZmZXIpCit7 CisJaW50CQkJZmQ7CisJY2hhcgkJQ29udHJvbExvZ0ZpbGVQYXRoW01BWFBHUEFUSF07CisJ Y2hhcgkJQ29udHJvbExvZ0ZpbGVQYXRoVG1wW01BWFBHUEFUSF07CisjaWZuZGVmIEZST05U RU5ECisJaW50CQkJc2F2ZV9lcnJubzsKKyNlbmRpZgorCisJc25wcmludGYoQ29udHJvbExv Z0ZpbGVQYXRoLCBzaXplb2YoQ29udHJvbExvZ0ZpbGVQYXRoKSwgIiVzLyVzIiwgRGF0YURp ciwKKwkJCSBQR19PUEVSQVRJT05fTE9HX0ZJTEUpOworCXNucHJpbnRmKENvbnRyb2xMb2dG aWxlUGF0aFRtcCwgc2l6ZW9mKENvbnRyb2xMb2dGaWxlUGF0aFRtcCksICIlcy50bXAiLAor CQkJIENvbnRyb2xMb2dGaWxlUGF0aCk7CisKKwkvKiBSZWNhbGN1bGF0ZSBDUkMgb2Ygb3Bl cmF0aW9uIGxvZy4gKi8KKwlsb2dfYnVmZmVyLT5oZWFkZXIub2xfY3JjID0gY2FsY3VsYXRl X29wZXJhdGlvbl9sb2dfY3JjKGxvZ19idWZmZXIpOworCisjaWZuZGVmIEZST05URU5ECisJ TFdMb2NrQWNxdWlyZShDb250cm9sTG9nRmlsZUxvY2ssIExXX0VYQ0xVU0lWRSk7CisjZW5k aWYKKworCS8qIENyZWF0ZSBhIHRlbXBvcmFyeSBmaWxlLiAqLworCWZkID0gY3JlYXRlX29w ZXJhdGlvbl9sb2dfZmlsZShDb250cm9sTG9nRmlsZVBhdGhUbXApOworCWlmIChmZCA8IDAp CisJeworI2lmbmRlZiBGUk9OVEVORAorCQlMV0xvY2tSZWxlYXNlU2F2ZUVycm5vKENvbnRy b2xMb2dGaWxlTG9jayk7CisKKwkJZXJlcG9ydChQQU5JQywKKwkJCQkoZXJyY29kZV9mb3Jf ZmlsZV9hY2Nlc3MoKSwKKwkJCQkgZXJybXNnKCJjb3VsZCBub3Qgb3BlbiBmaWxlIFwiJXNc IjogJW0iLAorCQkJCQkJQ29udHJvbExvZ0ZpbGVQYXRoVG1wKSkpOworI2Vsc2UKKwkJcGdf ZmF0YWwoImNvdWxkIG5vdCBvcGVuIGZpbGUgXCIlc1wiOiAlbSIsIENvbnRyb2xMb2dGaWxl UGF0aFRtcCk7CisjZW5kaWYKKwl9CisKKwkvKiBQbGFjZSBvcGVyYXRpb24gbG9nIGJ1ZmZl ciBpbnRvIHRlbXBvcmFyeSBmaWxlLiAqLworCWVycm5vID0gMDsKKwlpZiAod3JpdGUoZmQs IGxvZ19idWZmZXIsIFBHX09QRVJBVElPTl9MT0dfRlVMTF9TSVpFKSAhPSBQR19PUEVSQVRJ T05fTE9HX0ZVTExfU0laRSkKKwl7CisJCS8qIGlmIHdyaXRlIGRpZG4ndCBzZXQgZXJybm8s IGFzc3VtZSBwcm9ibGVtIGlzIG5vIGRpc2sgc3BhY2UgKi8KKwkJaWYgKGVycm5vID09IDAp CisJCQllcnJubyA9IEVOT1NQQzsKKworI2lmbmRlZiBGUk9OVEVORAorCQlMV0xvY2tSZWxl YXNlU2F2ZUVycm5vKENvbnRyb2xMb2dGaWxlTG9jayk7CisKKwkJZXJlcG9ydChQQU5JQywK KwkJCQkoZXJyY29kZV9mb3JfZmlsZV9hY2Nlc3MoKSwKKwkJCQkgZXJybXNnKCJjb3VsZCBu b3Qgd3JpdGUgb3BlcmF0aW9uIGxvZyBpbiB0aGUgZmlsZSBcIiVzXCI6ICVtIiwKKwkJCQkJ CUNvbnRyb2xMb2dGaWxlUGF0aFRtcCkpKTsKKyNlbHNlCisJCXBnX2ZhdGFsKCJjb3VsZCBu b3Qgd3JpdGUgb3BlcmF0aW9uIGxvZyBpbiB0aGUgZmlsZSBcIiVzXCI6ICVtIiwKKwkJCQkg Q29udHJvbExvZ0ZpbGVQYXRoVG1wKTsKKyNlbmRpZgorCX0KKworCS8qIENsb3NlIHRoZSB0 ZW1wb3JhcnkgZmlsZS4gKi8KKyNpZm5kZWYgRlJPTlRFTkQKKwlpZiAoQ2xvc2VUcmFuc2ll bnRGaWxlKGZkKSAhPSAwKQorCXsKKwkJTFdMb2NrUmVsZWFzZVNhdmVFcnJubyhDb250cm9s TG9nRmlsZUxvY2spOworCisJCWVyZXBvcnQoUEFOSUMsCisJCQkJKGVycmNvZGVfZm9yX2Zp bGVfYWNjZXNzKCksCisJCQkJIGVycm1zZygiY291bGQgbm90IGNsb3NlIGZpbGUgXCIlc1wi OiAlbSIsCisJCQkJCQlDb250cm9sTG9nRmlsZVBhdGhUbXApKSk7CisJfQorI2Vsc2UKKwlp ZiAoY2xvc2UoZmQpICE9IDApCisJCXBnX2ZhdGFsKCJjb3VsZCBub3QgY2xvc2UgZmlsZSBc IiVzXCI6ICVtIiwgQ29udHJvbExvZ0ZpbGVQYXRoVG1wKTsKKyNlbmRpZgorCisJLyogVW5s aW5rIG9sZCBmaWxlIHdpdGggb3BlcmF0aW9uIGxvZy4gKi8KKwlpZiAodW5saW5rKENvbnRy b2xMb2dGaWxlUGF0aCkgIT0gMCkKKwl7CisJCS8qIEZpbGUgY2FuIGJlIG5vdCBleGlzdDog aWdub3JlIHRoaXMgc3BlY2lmaWMgZXJyb3IuICovCisJCWlmIChlcnJubyAhPSBFTk9FTlQp CisJCXsKKyNpZm5kZWYgRlJPTlRFTkQKKwkJCUxXTG9ja1JlbGVhc2VTYXZlRXJybm8oQ29u dHJvbExvZ0ZpbGVMb2NrKTsKKworCQkJZXJlcG9ydChQQU5JQywKKwkJCQkJKGVycmNvZGVf Zm9yX2ZpbGVfYWNjZXNzKCksCisJCQkJCSBlcnJtc2coImNvdWxkIG5vdCB1bmxpbmsgZmls ZSBcIiVzXCI6ICVtIiwKKwkJCQkJCQlDb250cm9sTG9nRmlsZVBhdGgpKSk7CisjZWxzZQor CQkJcGdfZmF0YWwoImNvdWxkIG5vdCB1bmxpbmsgZmlsZSBcIiVzXCI6ICVtIiwgQ29udHJv bExvZ0ZpbGVQYXRoKTsKKyNlbmRpZgorCQl9CisJfQorCisJLyogUmVuYW1lIHRlbXBvcmFy eSBmaWxlIHRvIHJlcXVpcmVkIG5hbWUuICovCisjaWZuZGVmIEZST05URU5ECisJaWYgKGR1 cmFibGVfcmVuYW1lKENvbnRyb2xMb2dGaWxlUGF0aFRtcCwgQ29udHJvbExvZ0ZpbGVQYXRo LCBMT0cpICE9IDApCisJeworCQlMV0xvY2tSZWxlYXNlU2F2ZUVycm5vKENvbnRyb2xMb2dG aWxlTG9jayk7CisKKwkJZXJlcG9ydChQQU5JQywKKwkJCQkoZXJyY29kZV9mb3JfZmlsZV9h Y2Nlc3MoKSwKKwkJCQkgZXJybXNnKCJjb3VsZCBub3QgcmVuYW1lIGZpbGUgXCIlc1wiIHRv IFwiJXNcIjogJW0iLAorCQkJCQkJQ29udHJvbExvZ0ZpbGVQYXRoVG1wLCBDb250cm9sTG9n RmlsZVBhdGgpKSk7CisJfQorCUxXTG9ja1JlbGVhc2UoQ29udHJvbExvZ0ZpbGVMb2NrKTsK KyNlbHNlCisJaWYgKGR1cmFibGVfcmVuYW1lKENvbnRyb2xMb2dGaWxlUGF0aFRtcCwgQ29u dHJvbExvZ0ZpbGVQYXRoKSAhPSAwKQorCQlwZ19mYXRhbCgiY291bGQgbm90IHJlbmFtZSBm aWxlIFwiJXNcIiB0byBcIiVzXCI6ICVtIiwKKwkJCQkgQ29udHJvbExvZ0ZpbGVQYXRoVG1w LCBDb250cm9sTG9nRmlsZVBhdGgpOworI2VuZGlmCit9CisKKy8qCisgKiBpc19lbnVtX3Zh bHVlX2NvcnJlY3QoKQorICoKKyAqIEZ1bmN0aW9uIHJldHVybnMgdHJ1ZSBpbiBjYXNlIHZh bHVlIGlzIGNvcnJlY3QgdmFsdWUgb2YgZW51bS4KKyAqCisgKiB2YWwgLSB0ZXN0IHZhbHVl OworICogbWludmFsIC0gZmlyc3QgZW51bSB2YWx1ZSAoY29ycmVjdCB2YWx1ZSk7CisgKiBt YXh2YWwgLSBsYXN0IGVudW0gdmFsdWUgKGluY29ycmVjdCB2YWx1ZSkuCisgKi8KK3N0YXRp YyBib29sCitpc19lbnVtX3ZhbHVlX2NvcnJlY3QoaW50MTYgdmFsLCBpbnQxNiBtaW52YWws IGludDE2IG1heHZhbCkKK3sKKwlBc3NlcnQodmFsID49IG1pbnZhbCB8fCB2YWwgPCBtYXh2 YWwpOworCisJaWYgKHZhbCA8IG1pbnZhbCB8fCB2YWwgPj0gbWF4dmFsKQorCQlyZXR1cm4g ZmFsc2U7CisJcmV0dXJuIHRydWU7Cit9CisKKy8qCisgKiBnZXRfb3BlcmF0aW9uX2xvZ190 eXBlX2Rlc2MoKQorICoKKyAqIEZ1bmN0aW9uIHJldHVybnMgcG9pbnRlciB0byBPcGVyYXRp b25Mb2dUeXBlRGVzYyBzdHJ1Y3QgZm9yIGdpdmVuIHR5cGUgb2YKKyAqIG9wZXJhdGlvbiBv bF90eXBlLgorICovCitzdGF0aWMgT3BlcmF0aW9uTG9nVHlwZURlc2MgKgorZ2V0X29wZXJh dGlvbl9sb2dfdHlwZV9kZXNjKG9sX3R5cGVfZW51bSBvbF90eXBlKQoreworCXJldHVybiAm T3BlcmF0aW9uTG9nVHlwZXNEZXNjc1tvbF90eXBlIC0gMV07Cit9CisKKy8qCisgKiBmaWxs X29wZXJhdGlvbl9sb2dfZWxlbWVudCgpCisgKgorICogRmlsbCBuZXcgb3BlcmF0aW9uIGxv ZyBlbGVtZW50LiBWYWx1ZSBvZiBvbF9sc24gaXMgbGFzdCBjaGVja3BvaW50IHJlY29yZAor ICogcG9pbnRlci4KKyAqLworc3RhdGljIHZvaWQKK2ZpbGxfb3BlcmF0aW9uX2xvZ19lbGVt ZW50KENvbnRyb2xGaWxlRGF0YSAqQ29udHJvbEZpbGUsCisJCQkJCQkgICBPcGVyYXRpb25M b2dUeXBlRGVzYyAqIGRlc2MsCisJCQkJCQkgICBQZ051bUVkaXRpb24gZWRpdGlvbiwgdWlu dDMyIHZlcnNpb25fbnVtLAorCQkJCQkJICAgT3BlcmF0aW9uTG9nRGF0YSAqIGRhdGEpCit7 CisJZGF0YS0+b2xfdHlwZSA9IGRlc2MtPm9sX3R5cGU7CisJZGF0YS0+b2xfZWRpdGlvbiA9 IGVkaXRpb247CisJZGF0YS0+b2xfY291bnQgPSAxOworCWRhdGEtPm9sX3ZlcnNpb24gPSB2 ZXJzaW9uX251bTsKKwlkYXRhLT5vbF90aW1lc3RhbXAgPSAocGdfdGltZV90KSB0aW1lKE5V TEwpOworCWRhdGEtPm9sX2xzbiA9IENvbnRyb2xGaWxlLT5jaGVja1BvaW50OworfQorCisv KgorICogZmluZF9vcGVyYXRpb25fbG9nX2VsZW1lbnRfZm9yX21lcmdlKCkKKyAqCisgKiBG aW5kIGVsZW1lbnQgaW50byBvcGVyYXRpb24gbG9nIHJpbmcgYnVmZmVyIGJ5IG9sX3R5cGUg YW5kIHZlcnNpb24uCisgKiBSZXR1cm5zIE5VTEwgaW4gY2FzZSBlbGVtZW50IGlzIG5vdCBm b3VuZC4KKyAqLworc3RhdGljIE9wZXJhdGlvbkxvZ0RhdGEgKgorZmluZF9vcGVyYXRpb25f bG9nX2VsZW1lbnRfZm9yX21lcmdlKG9sX3R5cGVfZW51bSBvbF90eXBlLAorCQkJCQkJCQkJ IE9wZXJhdGlvbkxvZ0J1ZmZlciAqIGxvZ19idWZmZXIsCisJCQkJCQkJCQkgUGdOdW1FZGl0 aW9uIGVkaXRpb24sIHVpbnQzMiB2ZXJzaW9uX251bSkKK3sKKwl1aW50MzIJCWZpcnN0ID0g bG9nX2J1ZmZlci0+aGVhZGVyLm9sX2ZpcnN0OworCXVpbnQzMgkJY291bnQgPSBnZXRfb3Bl cmF0aW9uX2xvZ19jb3VudChsb2dfYnVmZmVyKTsKKwlPcGVyYXRpb25Mb2dEYXRhICpkYXRh OworCXVpbnQzMgkJaTsKKworCUFzc2VydChmaXJzdCA8IFBHX09QRVJBVElPTl9MT0dfQ09V TlQgJiYgY291bnQgPD0gUEdfT1BFUkFUSU9OX0xPR19DT1VOVCk7CisKKwlmb3IgKGkgPSAw OyBpIDwgY291bnQ7IGkrKykKKwl7CisJCWRhdGEgPSAmbG9nX2J1ZmZlci0+ZGF0YVsoZmly c3QgKyBpKSAlIFBHX09QRVJBVElPTl9MT0dfQ09VTlRdOworCQlpZiAoZGF0YS0+b2xfdHlw ZSA9PSBvbF90eXBlICYmCisJCQlkYXRhLT5vbF9lZGl0aW9uID09IGVkaXRpb24gJiYKKwkJ CWRhdGEtPm9sX3ZlcnNpb24gPT0gdmVyc2lvbl9udW0pCisJCQlyZXR1cm4gZGF0YTsKKwl9 CisKKwlyZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIHB1dF9vcGVyYXRpb25fbG9nX2VsZW1l bnQoKSwgcHV0X29wZXJhdGlvbl9sb2dfZWxlbWVudF92ZXJzaW9uKCkKKyAqCisgKiBQdXQg ZWxlbWVudCBpbnRvIG9wZXJhdGlvbiBsb2cgcmluZyBidWZmZXIuCisgKgorICogRGF0YURp ciBpcyB0aGUgcGF0aCB0byB0aGUgdG9wIGxldmVsIG9mIHRoZSBQR0RBVEEgZGlyZWN0b3J5 IHRyZWU7CisgKiBvbF90eXBlIGlzIHR5cGUgb2Ygb3BlcmF0aW9uOworICogZWRpdGlvbiBp cyBlZGl0aW9uIG9mIGN1cnJlbnQgUG9zdGdyZVNRTCB2ZXJzaW9uOworICogdmVyc2lvbl9u dW0gaXMgbnVtYmVyIG9mIHZlcnNpb24gKGZvciBleGFtcGxlIDEzMDAwODAyIGZvciB2MTMu OC4yKS4KKyAqCisgKiBOb3RlIHRoYXQgaXQgaXMgdXAgdG8gdGhlIGNhbGxlciB0byBwcm9w ZXJseSBsb2NrIENvbnRyb2xGaWxlTG9nTG9jayB3aGVuCisgKiBjYWxsaW5nIHRoaXMgcm91 dGluZSBpbiB0aGUgYmFja2VuZC4KKyAqLwordm9pZAorcHV0X29wZXJhdGlvbl9sb2dfZWxl bWVudF92ZXJzaW9uKGNvbnN0IGNoYXIgKkRhdGFEaXIsIG9sX3R5cGVfZW51bSBvbF90eXBl LAorCQkJCQkJCQkgIFBnTnVtRWRpdGlvbiBlZGl0aW9uLCB1aW50MzIgdmVyc2lvbl9udW0p Cit7CisJT3BlcmF0aW9uTG9nQnVmZmVyICpsb2dfYnVmZmVyOworCUNvbnRyb2xGaWxlRGF0 YSAqQ29udHJvbEZpbGU7CisJYm9vbAkJY3JjX29rOworCU9wZXJhdGlvbkxvZ1R5cGVEZXNj ICpkZXNjOworCisJaWYgKCFpc19lbnVtX3ZhbHVlX2NvcnJlY3Qob2xfdHlwZSwgT0xUX0JP T1RTVFJBUCwgT0xUX051bWJlck9mVHlwZXMpKQorCXsKKyNpZm5kZWYgRlJPTlRFTkQKKwkJ ZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0RBVEFfQ09SUlVQVEVEKSwK KwkJCQkgZXJybXNnKCJpbnZhbGlkIHR5cGUgb2Ygb3BlcmF0aW9uICgldSkgZm9yIG9wZXJh dGlvbiBsb2ciLCBvbF90eXBlKSkpOworI2Vsc2UKKwkJcGdfZmF0YWwoImludmFsaWQgdHlw ZSBvZiBvcGVyYXRpb24gKCV1KSBmb3Igb3BlcmF0aW9uIGxvZyIsIG9sX3R5cGUpOworI2Vu ZGlmCisJfQorCisJZGVzYyA9IGdldF9vcGVyYXRpb25fbG9nX3R5cGVfZGVzYyhvbF90eXBl KTsKKworCWlmICghaXNfZW51bV92YWx1ZV9jb3JyZWN0KGRlc2MtPm9sX21vZGUsIE9MTV9N RVJHRSwgT0xNX051bWJlck9mTW9kZXMpKQorCXsKKyNpZm5kZWYgRlJPTlRFTkQKKwkJZXJl cG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0RBVEFfQ09SUlVQVEVEKSwKKwkJ CQkgZXJybXNnKCJpbnZhbGlkIG1vZGUgb2Ygb3BlcmF0aW9uICgldSkgZm9yIG9wZXJhdGlv biBsb2ciLCBvbF90eXBlKSkpOworI2Vsc2UKKwkJcGdfZmF0YWwoImludmFsaWQgbW9kZSBv ZiBvcGVyYXRpb24gKCV1KSBmb3Igb3BlcmF0aW9uIGxvZyIsIG9sX3R5cGUpOworI2VuZGlm CisJfQorCisJLyogZ2V0IGEgY29weSBvZiB0aGUgY29udHJvbCBmaWxlICovCisJQ29udHJv bEZpbGUgPSBnZXRfY29udHJvbGZpbGUoRGF0YURpciwgJmNyY19vayk7CisJaWYgKCFjcmNf b2spCisjaWZuZGVmIEZST05URU5ECisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUo RVJSQ09ERV9EQVRBX0NPUlJVUFRFRCksCisJCQkJIGVycm1zZygicGdfY29udHJvbCBDUkMg dmFsdWUgaXMgaW5jb3JyZWN0IikpKTsKKyNlbHNlCisJCXBnX2ZhdGFsKCJwZ19jb250cm9s IENSQyB2YWx1ZSBpcyBpbmNvcnJlY3QiKTsKKyNlbmRpZgorCisJLyogZ2V0IGEgY29weSBv ZiB0aGUgb3BlcmF0aW9uIGxvZyAqLworCWxvZ19idWZmZXIgPSBnZXRfb3BlcmF0aW9uX2xv ZyhEYXRhRGlyLCAmY3JjX29rKTsKKwlpZiAoIWNyY19vaykKKyNpZm5kZWYgRlJPTlRFTkQK KwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0RBVEFfQ09SUlVQVEVE KSwKKwkJCQkgZXJybXNnKCJwZ19jb250cm9sX2xvZyBDUkMgdmFsdWUgaXMgaW5jb3JyZWN0 IikpKTsKKyNlbHNlCisJCXBnX2ZhdGFsKCJwZ19jb250cm9sX2xvZyBDUkMgdmFsdWUgaXMg aW5jb3JyZWN0Iik7CisjZW5kaWYKKworCXN3aXRjaCAoZGVzYy0+b2xfbW9kZSkKKwl7CisJ CWNhc2UgT0xNX01FUkdFOgorCQkJeworCQkJCU9wZXJhdGlvbkxvZ0RhdGEgKmRhdGE7CisK KwkJCQlkYXRhID0gZmluZF9vcGVyYXRpb25fbG9nX2VsZW1lbnRfZm9yX21lcmdlKG9sX3R5 cGUsIGxvZ19idWZmZXIsCisJCQkJCQkJCQkJCQkJCQllZGl0aW9uLCB2ZXJzaW9uX251bSk7 CisJCQkJaWYgKGRhdGEpCisJCQkJeworCQkJCQkvKgorCQkJCQkgKiBXZSBqdXN0IGZvdW5k IHRoZSBlbGVtZW50IHdpdGggdGhlIHNhbWUgdHlwZSBhbmQgdGhlCisJCQkJCSAqIHNhbWUg dmVyc2lvbi4gVXBkYXRlIGl0LgorCQkJCQkgKi8KKwkJCQkJaWYgKGRhdGEtPm9sX2NvdW50 IDwgUEdfVUlOVDE2X01BWCkgLyogcHJldmVudCBvdmVyZmxvdyAqLworCQkJCQkJZGF0YS0+ b2xfY291bnQrKzsKKwkJCQkJZGF0YS0+b2xfdGltZXN0YW1wID0gKHBnX3RpbWVfdCkgdGlt ZShOVUxMKTsKKwkJCQkJZGF0YS0+b2xfbHNuID0gQ29udHJvbEZpbGUtPmNoZWNrUG9pbnQ7 CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJCS8qIEZBTExUSFJPVUdIICovCisKKwkJ Y2FzZSBPTE1fSU5TRVJUOgorCQkJeworCQkJCXVpbnQxNgkJZmlyc3QgPSBsb2dfYnVmZmVy LT5oZWFkZXIub2xfZmlyc3Q7CisJCQkJdWludDE2CQljb3VudCA9IGxvZ19idWZmZXItPmhl YWRlci5vbF9jb3VudDsKKwkJCQl1aW50MTYJCWN1cnJlbnQ7CisKKwkJCQlBc3NlcnQoZmly c3QgPCBQR19PUEVSQVRJT05fTE9HX0NPVU5UICYmIGNvdW50IDw9IFBHX09QRVJBVElPTl9M T0dfQ09VTlQpOworCisJCQkJaWYgKGNvdW50ID09IFBHX09QRVJBVElPTl9MT0dfQ09VTlQp CisJCQkJeworCQkJCQljdXJyZW50ID0gZmlyc3Q7CisJCQkJCS8qIE93ZXJmbG93LCBzaGlm dCB0aGUgZmlyc3QgZWxlbWVudCAqLworCQkJCQlsb2dfYnVmZmVyLT5oZWFkZXIub2xfZmly c3QgPSAoZmlyc3QgKyAxKSAlIFBHX09QRVJBVElPTl9MT0dfQ09VTlQ7CisJCQkJfQorCQkJ CWVsc2UKKwkJCQl7CisJCQkJCWN1cnJlbnQgPSBmaXJzdCArIGNvdW50OworCQkJCQkvKiBJ bmNyZWFzZSBudW1iZXIgb2YgZWxlbWVudHM6ICovCisJCQkJCWxvZ19idWZmZXItPmhlYWRl ci5vbF9jb3VudCsrOworCQkJCX0KKworCQkJCS8qIEZpbGwgb3BlcmF0aW9uIGxvZyBlbGVt ZW50LiAqLworCQkJCWZpbGxfb3BlcmF0aW9uX2xvZ19lbGVtZW50KENvbnRyb2xGaWxlLCBk ZXNjLCBlZGl0aW9uLCB2ZXJzaW9uX251bSwKKwkJCQkJCQkJCQkgICAmbG9nX2J1ZmZlci0+ ZGF0YVtjdXJyZW50XSk7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJZGVmYXVsdDoKKyNpZm5k ZWYgRlJPTlRFTkQKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVf REFUQV9DT1JSVVBURUQpLAorCQkJCQkgZXJybXNnKCJ1bmV4cGVjdGVkIG9wZXJhdGlvbiBs b2cgbW9kZSAlZCIsCisJCQkJCQkJZGVzYy0+b2xfbW9kZSkpKTsKKyNlbHNlCisJCQlwZ19m YXRhbCgidW5leHBlY3RlZCBvcGVyYXRpb24gbG9nIG1vZGUgJWQiLCBkZXNjLT5vbF9tb2Rl KTsKKyNlbmRpZgorCX0KKworCXVwZGF0ZV9vcGVyYXRpb25fbG9nKERhdGFEaXIsIGxvZ19i dWZmZXIpOworCisJcGZyZWUobG9nX2J1ZmZlcik7CisKKwlwZnJlZShDb250cm9sRmlsZSk7 Cit9CisKKy8qCisgKiBIZWxwZXIgY29uc3RhbnQgZm9yIGRldGVybWluZSBjdXJyZW50IGVk aXRpb24uCisgKiBIZXJlIGNhbiBiZSBjdXN0b20gZWRpdGlvbnMuCisgKi8KK3N0YXRpYyBj b25zdCB1aW50OCBjdXJyZW50X2VkaXRpb24gPSBFRF9QR19PUklHSU5BTDsKKworLyoKKyAq IEhlbHBlciBjb25zdGFudCBmb3IgZGV0ZXJtaW5lIGN1cnJlbnQgdmVyc2lvbi4KKyAqIE11 bHRpcGxpZXIgMTAwIHVzZWQgYXMgcmVzZXJ2ZSBvZiBsYXN0IHR3byBkaWdpdHMgZm9yIHBh dGNoIG51bWJlci4KKyAqLworc3RhdGljIGNvbnN0IHVpbnQzMiBjdXJyZW50X3ZlcnNpb25f bnVtID0gUEdfVkVSU0lPTl9OVU0gKiAxMDA7CisKK3ZvaWQKK3B1dF9vcGVyYXRpb25fbG9n X2VsZW1lbnQoY29uc3QgY2hhciAqRGF0YURpciwgb2xfdHlwZV9lbnVtIG9sX3R5cGUpCit7 CisJcHV0X29wZXJhdGlvbl9sb2dfZWxlbWVudF92ZXJzaW9uKERhdGFEaXIsIG9sX3R5cGUs IGN1cnJlbnRfZWRpdGlvbiwgY3VycmVudF92ZXJzaW9uX251bSk7Cit9CisKKy8qCisgKiBn ZXRfb3BlcmF0aW9uX2xvZ19lbGVtZW50KCkKKyAqCisgKiBSZXR1cm5zIG9wZXJhdGlvbiBs b2cgYnVmZmVyIGVsZW1lbnQgd2l0aCBudW1iZXIgbnVtLgorICovCitPcGVyYXRpb25Mb2dE YXRhICoKK2dldF9vcGVyYXRpb25fbG9nX2VsZW1lbnQoT3BlcmF0aW9uTG9nQnVmZmVyICog bG9nX2J1ZmZlciwgdWludDE2IG51bSkKK3sKKwl1aW50MzIJCWZpcnN0ID0gbG9nX2J1ZmZl ci0+aGVhZGVyLm9sX2ZpcnN0OworI2lmZGVmIFVTRV9BU1NFUlRfQ0hFQ0tJTkcKKwl1aW50 MzIJCWNvdW50ID0gZ2V0X29wZXJhdGlvbl9sb2dfY291bnQobG9nX2J1ZmZlcik7CisKKwlB c3NlcnQobnVtIDwgY291bnQpOworI2VuZGlmCisKKwlyZXR1cm4gJmxvZ19idWZmZXItPmRh dGFbKGZpcnN0ICsgbnVtKSAlIFBHX09QRVJBVElPTl9MT0dfQ09VTlRdOworfQorCisvKgor ICogZ2V0X29wZXJhdGlvbl9sb2dfY291bnQoKQorICoKKyAqIFJldHVybnMgbnVtYmVyIG9m IGVsZW1lbnRzIGluIGdpdmVuIG9wZXJhdGlvbiBsb2cgYnVmZmVyLgorICovCit1aW50MTYK K2dldF9vcGVyYXRpb25fbG9nX2NvdW50KE9wZXJhdGlvbkxvZ0J1ZmZlciAqIGxvZ19idWZm ZXIpCit7CisJcmV0dXJuIGxvZ19idWZmZXItPmhlYWRlci5vbF9jb3VudDsKK30KKworLyoK KyAqIGdldF9vcGVyYXRpb25fbG9nX3R5cGVfbmFtZSgpCisgKgorICogUmV0dXJucyBuYW1l IG9mIGdpdmVuIHR5cGUuCisgKi8KK2NvbnN0IGNoYXIgKgorZ2V0X29wZXJhdGlvbl9sb2df dHlwZV9uYW1lKG9sX3R5cGVfZW51bSBvbF90eXBlKQoreworCWlmIChpc19lbnVtX3ZhbHVl X2NvcnJlY3Qob2xfdHlwZSwgT0xUX0JPT1RTVFJBUCwgT0xUX051bWJlck9mVHlwZXMpKQor CQlyZXR1cm4gT3BlcmF0aW9uTG9nVHlwZXNEZXNjc1tvbF90eXBlIC0gMV0ub2xfbmFtZTsK KwllbHNlCisJCXJldHVybiBwc3ByaW50ZigidW5rbm93biBuYW1lICV1Iiwgb2xfdHlwZSk7 Cit9CmRpZmYgLS1naXQgYS9zcmMvY29tbW9uL21lc29uLmJ1aWxkIGIvc3JjL2NvbW1vbi9t ZXNvbi5idWlsZAppbmRleCA0MWJkNThlYmRmLi4yNTE2OTEzZWRkIDEwMDY0NAotLS0gYS9z cmMvY29tbW9uL21lc29uLmJ1aWxkCisrKyBiL3NyYy9jb21tb24vbWVzb24uYnVpbGQKQEAg LTYsNiArNiw3IEBAIGNvbW1vbl9zb3VyY2VzID0gZmlsZXMoCiAgICdjaGVja3N1bV9oZWxw ZXIuYycsCiAgICdjb21wcmVzc2lvbi5jJywKICAgJ2NvbnRyb2xkYXRhX3V0aWxzLmMnLAor ICAnY29udHJvbGxvZ191dGlscy5jJywKICAgJ2VuY25hbWVzLmMnLAogICAnZXhlYy5jJywK ICAgJ2ZpbGVfcGVybS5jJywKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdf Y29udHJvbGxvZy5oIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19jb250cm9sbG9nLmgKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uZmRkYWMyNWZlYQotLS0gL2Rl di9udWxsCisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfY29udHJvbGxvZy5oCkBAIC0w LDAgKzEsMTQyIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBwZ19jb250cm9s bG9nLmgKKyAqCSAgVGhlIHN5c3RlbSBvcGVyYXRpb24gbG9nIGZpbGUgInBnX2NvbnRyb2xf bG9nIiBpcyBub3QgYSBoZWFwCisgKiAgICByZWxhdGlvbi4KKyAqCSAgSG93ZXZlciwgd2Ug ZGVmaW5lIGl0IGhlcmUgc28gdGhhdCB0aGUgZm9ybWF0IGlzIGRvY3VtZW50ZWQuCisgKgor ICoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDIyLCBQb3N0Z3JlU1FMIEds b2JhbCBEZXZlbG9wbWVudCBHcm91cAorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0 LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKKyAqCisgKiBzcmMv aW5jbHVkZS9jYXRhbG9nL3BnX2NvbnRyb2xsb2cuaAorICoKKyAqLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorICovCisjaWZuZGVmIFBHX0NPTlRST0xMT0dfSAorI2RlZmluZSBQR19DT05UUk9M TE9HX0gKKworI2luY2x1ZGUgImFjY2Vzcy90cmFuc2FtLmgiCisjaW5jbHVkZSAiYWNjZXNz L3hsb2dkZWZzLmgiCisjaW5jbHVkZSAicGd0aW1lLmgiCQkJCS8qIGZvciBwZ190aW1lX3Qg Ki8KKyNpbmNsdWRlICJwb3J0L3BnX2NyYzMyYy5oIgorCisjZGVmaW5lIFBHX09QRVJBVElP Tl9MT0dfRklMRQkiZ2xvYmFsL3BnX2NvbnRyb2xfbG9nIgorCisvKgorICogVHlwZSBvZiBv cGVyYXRpb24gZm9yIG9wZXJhdGlvbiBsb2cuCisgKi8KK3R5cGVkZWYgZW51bQoreworCU9M VF9CT09UU1RSQVAgPSAxLAkJCS8qIGJvb3RzdHJhcCAqLworCU9MVF9TVEFSVFVQLAkJCQkv KiBzZXJ2ZXIgc3RhcnR1cCAqLworCU9MVF9SRVNFVFdBTCwJCQkJLyogcGdfcmVzZXR3YWwg Ki8KKwlPTFRfUkVXSU5ELAkJCQkJLyogcGdfcmV3aW5kICovCisJT0xUX1VQR1JBREUsCQkJ CS8qIHBnX3VwZ3JhZGUgKi8KKwlPTFRfUFJPTU9URUQsCQkJCS8qIHByb21vdGVkICovCisJ T0xUX051bWJlck9mVHlwZXMJCQkvKiBzaG91bGQgYmUgbGFzdCAqLworfQkJCW9sX3R5cGVf ZW51bTsKKworLyoKKyAqIE1vZGUgb2Ygb3BlcmF0aW9uIHByb2Nlc3NpbmcuCisgKi8KK3R5 cGVkZWYgZW51bQoreworCU9MTV9NRVJHRSA9IDEsCQkJCS8qIGluc2VydCBlbGVtZW50IG9u bHkgaWYgbm90IGV4aXN0cyBlbGVtZW50CisJCQkJCQkJCSAqIHdpdGggdGhlIHNhbWUgb2xf dHlwZSBhbmQgb2xfdmVyc2lvbjsKKwkJCQkJCQkJICogb3RoZXJ3aXNlIHVwZGF0ZSBleGlz dGluZyBlbGVtZW50ICovCisJT0xNX0lOU0VSVCwJCQkJCS8qIGluc2VydCBlbGVtZW50IGlu dG8gcmluZyBidWZmZXIgJ2FzIGlzJyAqLworCU9MTV9OdW1iZXJPZk1vZGVzCQkJLyogc2hv dWxkIGJlIGxhc3QgKi8KK30JCQlvbF9tb2RlX2VudW07CisKKy8qCisgKiBIZWxwZXIgc3Ry dWN0IGZvciBkZXNjcmliaW5nIHN1cHBvcnRlZCBvcGVyYXRpb25zLgorICovCit0eXBlZGVm IHN0cnVjdCBPcGVyYXRpb25Mb2dUeXBlRGVzYworeworCW9sX3R5cGVfZW51bSBvbF90eXBl OwkJLyogZWxlbWVudCB0eXBlICovCisJb2xfbW9kZV9lbnVtIG9sX21vZGU7CQkvKiBlbGVt ZW50IG1vZGUgKi8KKwljb25zdCBjaGFyICpvbF9uYW1lOwkJLyogZGlzcGxheSBuYW1lIG9m IGVsZW1lbnQgKi8KK30JCQlPcGVyYXRpb25Mb2dUeXBlRGVzYzsKKworLyoKKyAqIEVsZW1l bnQgb2Ygb3BlcmF0aW9uIGxvZyByaW5nIGJ1ZmZlciAoMjQgYnl0ZXMpLgorICovCit0eXBl ZGVmIHN0cnVjdCBPcGVyYXRpb25Mb2dEYXRhCit7CisJdWludDgJCW9sX3R5cGU7CQkvKiBv cGVyYXRpb24gdHlwZSAqLworCXVpbnQ4CQlvbF9lZGl0aW9uOwkJLyogcG9zdGdyZXMgZWRp dGlvbiAqLworCXVpbnQxNgkJb2xfY291bnQ7CQkvKiBudW1iZXIgb2Ygb3BlcmF0aW9ucyAq LworCXVpbnQzMgkJb2xfdmVyc2lvbjsJCS8qIHBvc3RncmVzIHZlcnNpb24gKi8KKwlwZ190 aW1lX3QJb2xfdGltZXN0YW1wOwkvKiA9IGludDY0LCBvcGVyYXRpb24gZGF0ZS90aW1lICov CisJWExvZ1JlY1B0cglvbF9sc247CQkJLyogPSB1aW50NjQsIGxhc3QgY2hlY2sgcG9pbnQg cmVjb3JkIHB0ciAqLworfQkJCU9wZXJhdGlvbkxvZ0RhdGE7CisKKy8qCisgKiBIZWFkZXIg b2Ygb3BlcmF0aW9uIGxvZyByaW5nIGJ1ZmZlciAoOCBieXRlcykuCisgKi8KK3R5cGVkZWYg c3RydWN0IE9wZXJhdGlvbkxvZ0hlYWRlcgoreworCXBnX2NyYzMyYwlvbF9jcmM7CQkJLyog Q1JDIG9mIG9wZXJhdGlvbiBsb2cgLi4uIE1VU1QgQkUgRklSU1QhICovCisJdWludDE2CQlv bF9maXJzdDsJCS8qIHBvc2l0aW9uIG9mIGZpcnN0IHJpbmcgYnVmZmVyIGVsZW1lbnQgKi8K Kwl1aW50MTYJCW9sX2NvdW50OwkJLyogbnVtYmVyIG9mIGVsZW1lbnRzIGluIHJpbmcgYnVm ZmVyICovCit9CQkJT3BlcmF0aW9uTG9nSGVhZGVyOworCisvKgorICogV2hvbGUgc2l6ZSBv ZiB0aGUgb3BlcmF0aW9uIGxvZyByaW5nIGJ1ZmZlciAod2l0aCBoZWFkZXIpLgorICovCisj ZGVmaW5lIFBHX09QRVJBVElPTl9MT0dfRlVMTF9TSVpFCTgxOTIKKworLyoKKyAqIFNpemUg b2YgZWxlbWVudHMgb2YgdGhlIG9wZXJhdGlvbiBsb2cgcmluZyBidWZmZXIuCisgKiBWYWx1 ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2Ygc2l6ZW9mKE9wZXJhdGlvbkxvZ0RhdGEpLgorICov CisjZGVmaW5lIFBHX09QRVJBVElPTl9MT0dfU0laRQkJCShQR19PUEVSQVRJT05fTE9HX0ZV TExfU0laRSAtIHNpemVvZihPcGVyYXRpb25Mb2dIZWFkZXIpKQorCisvKgorICogTnVtYmVy IG9mIGVsZW1lbnRzIGluIHRoZSBvcGVyYXRpb24gbG9nLgorICovCisjZGVmaW5lIFBHX09Q RVJBVElPTl9MT0dfQ09VTlQJCQkoUEdfT1BFUkFUSU9OX0xPR19TSVpFIC8gc2l6ZW9mKE9w ZXJhdGlvbkxvZ0RhdGEpKQorCisvKgorICogT3BlcmF0aW9uIGxvZyByaW5nIGJ1ZmZlci4K KyAqLwordHlwZWRlZiBzdHJ1Y3QgT3BlcmF0aW9uTG9nQnVmZmVyCit7CisJT3BlcmF0aW9u TG9nSGVhZGVyIGhlYWRlcjsKKwlPcGVyYXRpb25Mb2dEYXRhIGRhdGFbUEdfT1BFUkFUSU9O X0xPR19DT1VOVF07CisKK30JCQlPcGVyYXRpb25Mb2dCdWZmZXI7CisKK1N0YXRpY0Fzc2Vy dERlY2woc2l6ZW9mKE9wZXJhdGlvbkxvZ0J1ZmZlcikgPT0gUEdfT1BFUkFUSU9OX0xPR19G VUxMX1NJWkUsCisJCQkJICJzdHJ1Y3R1cmUgT3BlcmF0aW9uTG9nQnVmZmVyIG11c3QgaGF2 ZSBzaXplIFBHX09QRVJBVElPTl9MT0dfRlVMTF9TSVpFIik7CisKKy8qIEVudW0gZm9yIHBv c3RncmVzIGVkaXRpb24uICovCit0eXBlZGVmIGVudW0KK3sKKwlFRF9QR19PUklHSU5BTCA9 IDAKKwkvKiBIZXJlIGNhbiBiZSBjdXN0b20gZWRpdGlvbnMgKi8KK30gUGdOdW1FZGl0aW9u OworCisjZGVmaW5lIEVEX1BHX09SSUdJTkFMX1NUUgkJInZhbmlsbGEiCisjZGVmaW5lIEVE X1VOS05PV05fU1RSCQkJInVua25vd24iCisKKy8qCisgKiBnZXRfc3RyX2VkaXRpb24oKQor ICoKKyAqIFJldHVybnMgZWRpdGlvbiBzdHJpbmcgYnkgZWRpdGlvbiBudW1iZXIuCisgKi8K K3N0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqCitnZXRfc3RyX2VkaXRpb24oUGdOdW1FZGl0 aW9uIGVkaXRpb24pCit7CisJc3dpdGNoIChlZGl0aW9uKQorCXsKKwkJY2FzZSBFRF9QR19P UklHSU5BTDoKKwkJCXJldHVybiBFRF9QR19PUklHSU5BTF9TVFI7CisKKwkJCS8qIEhlcmUg Y2FuIGJlIGN1c3RvbSBlZGl0aW9ucyAqLworCX0KKwlyZXR1cm4gRURfVU5LTk9XTl9TVFI7 Cit9CisKKyNlbmRpZgkJCQkJCQkvKiBQR19DT05UUk9MTE9HX0ggKi8KZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQgYi9zcmMvaW5jbHVkZS9jYXRhbG9n L3BnX3Byb2MuZGF0CmluZGV4IDM4MTBkZTdiMjIuLjM3Mzk3ZjJjODYgMTAwNjQ0Ci0tLSBh L3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKKysrIGIvc3JjL2luY2x1ZGUvY2F0 YWxvZy9wZ19wcm9jLmRhdApAQCAtMTE4OTEsNCArMTE4OTEsMTMgQEAKICAgcHJvcmV0dHlw ZSA9PiAnYnl0ZWEnLCBwcm9hcmd0eXBlcyA9PiAncGdfYnJpbl9taW5tYXhfbXVsdGlfc3Vt bWFyeScsCiAgIHByb3NyYyA9PiAnYnJpbl9taW5tYXhfbXVsdGlfc3VtbWFyeV9zZW5kJyB9 LAogCisjIG9wZXJhdGlvbiBsb2cgZnVuY3Rpb24KK3sgb2lkID0+ICc4MTEwJywgZGVzY3Ig PT4gJ3Nob3cgb3BlcmF0aW9uIGxvZycsCisgIHByb25hbWUgPT4gJ3BnX29wZXJhdGlvbl9s b2cnLCBwcm9yb3dzID0+ICcxNzAnLCBwcm9yZXRzZXQgPT4gJ3QnLAorICBwcm92b2xhdGls ZSA9PiAndicsIHByb3JldHR5cGUgPT4gJ3JlY29yZCcsIHByb2FyZ3R5cGVzID0+ICcnLAor ICBwcm9hbGxhcmd0eXBlcyA9PiAne3RleHQsdGV4dCx0ZXh0LHBnX2xzbix0aW1lc3RhbXB0 eixpbnQ0fScsCisgIHByb2FyZ21vZGVzID0+ICd7byxvLG8sbyxvLG99JywKKyAgcHJvYXJn bmFtZXMgPT4gJ3tldmVudCxlZGl0aW9uLHZlcnNpb24sbHNuLGxhc3QsY291bnR9JywKKyAg cHJvc3JjID0+ICdwZ19vcGVyYXRpb25fbG9nJyB9LAorCiBdCmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS9jb21tb24vY29udHJvbGxvZ191dGlscy5oIGIvc3JjL2luY2x1ZGUvY29tbW9u L2NvbnRyb2xsb2dfdXRpbHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MDAwLi5kYzVjMDFlODdmCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2luY2x1ZGUvY29tbW9u L2NvbnRyb2xsb2dfdXRpbHMuaApAQCAtMCwwICsxLDI3IEBACisvKgorICogY29udHJvbGxv Z191dGlscy5oCisgKgkJQ29tbW9uIGNvZGUgZm9yIHBnX2NvbnRyb2xfbG9nIG91dHB1dAor ICoKKyAqCVBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDIyLCBQb3N0Z3JlU1FMIEds b2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoJUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0 LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKKyAqCisgKglzcmMv aW5jbHVkZS9jb21tb24vY29udHJvbGxvZ191dGlscy5oCisgKi8KKyNpZm5kZWYgQ09NTU9O X0NPTlRST0xMT0dfVVRJTFNfSAorI2RlZmluZSBDT01NT05fQ09OVFJPTExPR19VVElMU19I CisKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2NvbnRyb2xsb2cuaCIKKworZXh0ZXJuIE9wZXJh dGlvbkxvZ0J1ZmZlciAqIGdldF9vcGVyYXRpb25fbG9nKGNvbnN0IGNoYXIgKkRhdGFEaXIs IGJvb2wgKmNyY19va19wKTsKK2V4dGVybiBPcGVyYXRpb25Mb2dCdWZmZXIgKiBnZXRfZW1w dHlfb3BlcmF0aW9uX2xvZ19idWZmZXIodm9pZCk7CitleHRlcm4gdm9pZCB1cGRhdGVfb3Bl cmF0aW9uX2xvZyhjb25zdCBjaGFyICpEYXRhRGlyLCBPcGVyYXRpb25Mb2dCdWZmZXIgKiBs b2dfYnVmZmVyKTsKKworZXh0ZXJuIHZvaWQgcHV0X29wZXJhdGlvbl9sb2dfZWxlbWVudChj b25zdCBjaGFyICpEYXRhRGlyLCBvbF90eXBlX2VudW0gb2xfdHlwZSk7CitleHRlcm4gdm9p ZCBwdXRfb3BlcmF0aW9uX2xvZ19lbGVtZW50X3ZlcnNpb24oY29uc3QgY2hhciAqRGF0YURp ciwgb2xfdHlwZV9lbnVtIG9sX3R5cGUsCisJCQkJCQkJCQkJCSAgUGdOdW1FZGl0aW9uIGVk aXRpb24sIHVpbnQzMiB2ZXJzaW9uX251bSk7CitleHRlcm4gdWludDE2IGdldF9vcGVyYXRp b25fbG9nX2NvdW50KE9wZXJhdGlvbkxvZ0J1ZmZlciAqIGxvZ19idWZmZXIpOworZXh0ZXJu IE9wZXJhdGlvbkxvZ0RhdGEgKiBnZXRfb3BlcmF0aW9uX2xvZ19lbGVtZW50KE9wZXJhdGlv bkxvZ0J1ZmZlciAqIGxvZ19idWZmZXIsCisJCQkJCQkJCQkJCQkJdWludDE2IG51bSk7Citl eHRlcm4gY29uc3QgY2hhciAqZ2V0X29wZXJhdGlvbl9sb2dfdHlwZV9uYW1lKG9sX3R5cGVf ZW51bSBvbF90eXBlKTsKKworI2VuZGlmCQkJCQkJCS8qIENPTU1PTl9DT05UUk9MTE9HX1VU SUxTX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9taXNjL21lc29u LmJ1aWxkIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X21pc2MvbWVzb24uYnVpbGQKaW5kZXgg MjFiZGU0MjdiNC4uZWM2OTgyODRhZiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy90 ZXN0X21pc2MvbWVzb24uYnVpbGQKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X21pc2Mv bWVzb24uYnVpbGQKQEAgLTksNiArOSw3IEBAIHRlc3RzICs9IHsKICAgICAgICd0LzAwMV9j b25zdHJhaW50X3ZhbGlkYXRpb24ucGwnLAogICAgICAgJ3QvMDAyX3RhYmxlc3BhY2UucGwn LAogICAgICAgJ3QvMDAzX2NoZWNrX2d1Yy5wbCcsCisgICAgICAndC8wMDRfb3BlcmF0aW9u X2xvZy5wbCcsCiAgICAgXSwKICAgfSwKIH0KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVs ZXMvdGVzdF9taXNjL3QvMDA0X29wZXJhdGlvbl9sb2cucGwgYi9zcmMvdGVzdC9tb2R1bGVz L3Rlc3RfbWlzYy90LzAwNF9vcGVyYXRpb25fbG9nLnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAuLjNhMDdmNzhmZmEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMv dGVzdC9tb2R1bGVzL3Rlc3RfbWlzYy90LzAwNF9vcGVyYXRpb25fbG9nLnBsCkBAIC0wLDAg KzEsMTM2IEBACisKKyMgQ29weXJpZ2h0IChjKSAyMDIyLCBQb3N0Z3JlU1FMIEdsb2JhbCBE ZXZlbG9wbWVudCBHcm91cAorCisjIFRlc3QgZm9yIG9wZXJhdGlvbiBsb2cuCisjCisjIFNv bWUgZXZlbnRzIGxpa2UKKyMgImJvb3RzdHJhcCIsICJzdGFydHVwIiwgInBnX3Jld2luZCIs ICJwZ19yZXNldHdhbCIsICJwcm9tb3RlZCIsICJwZ191cGdyYWRlIgorIyBzaG91bGQgYmUg cmVnaXN0ZXJlZCBpbiBvcGVyYXRpb24gbG9nLgorCit1c2Ugc3RyaWN0OwordXNlIHdhcm5p bmdzOworCit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3RlcjsKK3VzZSBQb3N0Z3JlU1FM OjpUZXN0OjpVdGlsczsKK3VzZSBUZXN0OjpNb3JlOwordXNlIEZpbGU6OkNvcHk7CisKKyMg Q3JlYXRlIGFuZCBzdGFydCBwcmltYXJ5IG5vZGUKK215ICRub2RlX3ByaW1hcnkgPSBQb3N0 Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ3ByaW1hcnknKTsKKyRub2RlX3ByaW1hcnkt PmluaXQoYWxsb3dzX3N0cmVhbWluZyA9PiAxKTsKKyRub2RlX3ByaW1hcnktPmFwcGVuZF9j b25mKCdwb3N0Z3Jlc3FsLmNvbmYnLCBxcSh3YWxfa2VlcF9zaXplID0gMTAwTUIpKTsKKyRu b2RlX3ByaW1hcnktPnN0YXJ0OworCisjIEdldCBzZXJ2ZXIgdmVyc2lvbgorbXkgJHNlcnZl cl92ZXJzaW9uID0gJG5vZGVfcHJpbWFyeS0+c2FmZV9wc3FsKCJwb3N0Z3JlcyIsICJTRUxF Q1QgY3VycmVudF9zZXR0aW5nKCdzZXJ2ZXJfdmVyc2lvbl9udW0nKTsiKSArIDA7CitteSAk bWFqb3JfdmVyc2lvbiA9ICRzZXJ2ZXJfdmVyc2lvbiAvIDEwMDAwOworbXkgJG1pbm9yX3Zl cnNpb24gPSAkc2VydmVyX3ZlcnNpb24gJSAxMDA7CisKKyMgR2V0IHByaW1hcnkgbm9kZSBi YWNrdXAKKyRub2RlX3ByaW1hcnktPmJhY2t1cCgncHJpbWFyeV9iYWNrdXAnKTsKKworIyBJ bml0aWFsaXplIHN0YW5kYnkgbm9kZSBmcm9tIGJhY2t1cAorbXkgJG5vZGVfc3RhbmRieSA9 IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygnc3RhbmRieScpOworJG5vZGVfc3Rh bmRieS0+aW5pdF9mcm9tX2JhY2t1cCgkbm9kZV9wcmltYXJ5LCAncHJpbWFyeV9iYWNrdXAn LCBoYXNfc3RyZWFtaW5nID0+IDEpOworJG5vZGVfc3RhbmRieS0+c3RhcnQ7CisKKyMgUHJv bW90ZSB0aGUgc3RhbmRieQorJG5vZGVfc3RhbmRieS0+cHJvbW90ZTsKKworIyBTdG9wIHN0 YW5kYnkgbm9kZQorJG5vZGVfc3RhbmRieS0+c3RvcDsKKworbXkgJG5vZGVfc3RhbmRieV9w Z2RhdGEgID0gJG5vZGVfc3RhbmRieS0+ZGF0YV9kaXI7CitteSAkbm9kZV9wcmltYXJ5X2Nv bm5zdHIgPSAkbm9kZV9wcmltYXJ5LT5jb25uc3RyOworCisjIEtlZXAgYSB0ZW1wb3Jhcnkg cG9zdGdyZXNxbC5jb25mIG9yIGl0IHdvdWxkIGJlIG92ZXJ3cml0dGVuIGR1cmluZyB0aGUg cmV3aW5kLgorbXkgJHRtcF9mb2xkZXIgPSBQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczo6dGVt cGRpcjsKK2NvcHkoIiRub2RlX3N0YW5kYnlfcGdkYXRhL3Bvc3RncmVzcWwuY29uZiIsICIk dG1wX2ZvbGRlci9ub2RlX3N0YW5kYnktcG9zdGdyZXNxbC5jb25mLnRtcCIpOworCisjIEdl dCAicGdfcmV3aW5kIiBldmVudAorY29tbWFuZF9vaygKKwlbCisJCSdwZ19yZXdpbmQnLAor CQkiLS1zb3VyY2Utc2VydmVyPSRub2RlX3ByaW1hcnlfY29ubnN0ciIsCisJCSItLXRhcmdl dC1wZ2RhdGE9JG5vZGVfc3RhbmRieV9wZ2RhdGEiLAorCQkiLS1kZWJ1ZyIKKwldLAorCSdy dW4gcGdfcmV3aW5kJyk7CisKKyMgTW92ZSBiYWNrIHBvc3RncmVzcWwuY29uZiB3aXRoIG9s ZCBzZXR0aW5ncworbW92ZSgiJHRtcF9mb2xkZXIvbm9kZV9zdGFuZGJ5LXBvc3RncmVzcWwu Y29uZi50bXAiLCAiJG5vZGVfc3RhbmRieV9wZ2RhdGEvcG9zdGdyZXNxbC5jb25mIik7CisK KyMgU3RhcnQgYW5kIHN0b3Agc3RhbmRieSBiZWZvcmUgcmVzZXR3YWwgYW5kIHVwZ3JhZGUK KyRub2RlX3N0YW5kYnktPnN0YXJ0OworJG5vZGVfc3RhbmRieS0+c3RvcDsKKworIyBHZXQg Zmlyc3QgInBnX3Jlc2V0d2FsIiBldmVudAorc3lzdGVtX29yX2JhaWwoJ3BnX3Jlc2V0d2Fs JywgJy1mJywgJG5vZGVfc3RhbmRieS0+ZGF0YV9kaXIpOworCisjIEdldCBzZWNvbmQgInBn X3Jlc2V0d2FsIiBldmVudAorc3lzdGVtX29yX2JhaWwoJ3BnX3Jlc2V0d2FsJywgJy1mJywg JG5vZGVfc3RhbmRieS0+ZGF0YV9kaXIpOworCisjIEluaXRpYWxpemUgYSBuZXcgbm9kZSBm b3IgdGhlIHVwZ3JhZGUKK215ICRub2RlX25ldyA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0 ZXItPm5ldygnbmV3Jyk7Ciskbm9kZV9uZXctPmluaXQ7CisKK215ICRiaW5kaXJfbmV3ID0g JG5vZGVfbmV3LT5jb25maWdfZGF0YSgnLS1iaW5kaXInKTsKK215ICRiaW5kaXJfc3RhbmRi eSA9ICRub2RlX3N0YW5kYnktPmNvbmZpZ19kYXRhKCctLWJpbmRpcicpOworCisjIFdlIHdh bnQgdG8gcnVuIHBnX3VwZ3JhZGUgaW4gdGhlIGJ1aWxkIGRpcmVjdG9yeSBzbyB0aGF0IGFu eSBmaWxlcyBnZW5lcmF0ZWQKKyMgZmluaXNoIGluIGl0LCBsaWtlIGRlbGV0ZV9vbGRfY2x1 c3Rlci57c2gsYmF0fS4KK2NoZGlyICR7UG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM6OnRtcF9j aGVja307CisKKyMgUnVuIHBnX3VwZ3JhZGUKK2NvbW1hbmRfb2soCisJWworCQkncGdfdXBn cmFkZScsICctLW5vLXN5bmMnLCAgICAgICAgICctZCcsICRub2RlX3N0YW5kYnktPmRhdGFf ZGlyLAorCQknLUQnLCAgICAgICAgICRub2RlX25ldy0+ZGF0YV9kaXIsICctYicsICRiaW5k aXJfc3RhbmRieSwKKwkJJy1CJywgICAgICAgICAkYmluZGlyX25ldywgICAgICAgICAnLXMn LCAkbm9kZV9uZXctPmhvc3QsCisJCSctcCcsICAgICAgICAgJG5vZGVfc3RhbmRieS0+cG9y dCwgJy1QJywgJG5vZGVfbmV3LT5wb3J0CisJXSwKKwkncnVuIHBnX3VwZ3JhZGUnKTsKKyMK KyMgTmVlZCB0byBjaGVjayBvcGVyYXRpb24gbG9nCisjCitzdWIgY2hlY2tfZXZlbnQKK3sK KwlteSAkZXZlbnRfbmFtZSA9IHNoaWZ0OworCW15ICRyZXN1bHQgPSBzaGlmdDsKKwlteSAk ZnVuY19hcmdzID0gc2hpZnQgPyAic3VtKGNvdW50KSwgY291bnQoKikiIDogImNvdW50KCop IjsKKworCW15ICRwc3FsX3N0ZG91dCA9ICRub2RlX25ldy0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsIHFxKAorCQlTRUxFQ1QKKwkJCSRmdW5jX2FyZ3MsCisJCQltaW4oc3BsaXRfcGFydCh2 ZXJzaW9uLCcuJywnMScpKSwKKwkJCW1pbihzcGxpdF9wYXJ0KHZlcnNpb24sJy4nLCcyJykp CisJCUZST00KKwkJCXBnX29wZXJhdGlvbl9sb2coKQorCQlXSEVSRQorCQkJZXZlbnQ9JyRl dmVudF9uYW1lJykpOworCisJaXMoJHBzcWxfc3Rkb3V0LCAkcmVzdWx0LCAnY2hlY2sgbnVt YmVyIG9mIGV2ZW50ICcgLiAkZXZlbnRfbmFtZSk7CisJcmV0dXJuOworfQorI1N0YXJ0IG5l dyBub2RlCiskbm9kZV9uZXctPnN0YXJ0OworCisjIENoZWNrIG51bWJlciBvZiBldmVudCAi Ym9vdHN0cmFwIgorY2hlY2tfZXZlbnQoJ2Jvb3RzdHJhcCcsIHFxKDF8MXwkbWFqb3JfdmVy c2lvbnwkbWlub3JfdmVyc2lvbiksIDEpOworCisjIENoZWNrIG51bWJlciBvZiBldmVudCAi c3RhcnR1cCIKK2NoZWNrX2V2ZW50KCdzdGFydHVwJywgcXEoMXwkbWFqb3JfdmVyc2lvbnwk bWlub3JfdmVyc2lvbiksIDApOworCisjIENoZWNrIG51bWJlciBvZiBldmVudCAicHJvbW90 ZWQiCitjaGVja19ldmVudCgncHJvbW90ZWQnLCBxcSgxfDF8JG1ham9yX3ZlcnNpb258JG1p bm9yX3ZlcnNpb24pLCAxKTsKKworIyBDaGVjayBudW1iZXIgb2YgZXZlbnQgInBnX3VwZ3Jh ZGUiCitjaGVja19ldmVudCgncGdfdXBncmFkZScsIHFxKDF8MXwkbWFqb3JfdmVyc2lvbnwk bWlub3JfdmVyc2lvbiksIDEpOworCisjIENoZWNrIG51bWJlciBvZiBldmVudCAicGdfcmVz ZXR3YWwiCitjaGVja19ldmVudCgncGdfcmVzZXR3YWwnLCBxcSgyfDF8JG1ham9yX3ZlcnNp b258JG1pbm9yX3ZlcnNpb24pLCAxKTsKKworIyBDaGVjayBudW1iZXIgb2YgZXZlbnQgInBn X3Jld2luZCIKK2NoZWNrX2V2ZW50KCdwZ19yZXdpbmQnLCBxcSgxfDF8JG1ham9yX3ZlcnNp b258JG1pbm9yX3ZlcnNpb24pLCAxKTsKKworZG9uZV90ZXN0aW5nKCk7CmRpZmYgLS1naXQg YS9zcmMvdG9vbHMvbXN2Yy9Na3ZjYnVpbGQucG0gYi9zcmMvdG9vbHMvbXN2Yy9Na3ZjYnVp bGQucG0KaW5kZXggZjFjOWRkZjRhMC4uMGNmZDk2ZDliYSAxMDA2NDQKLS0tIGEvc3JjL3Rv b2xzL21zdmMvTWt2Y2J1aWxkLnBtCisrKyBiL3NyYy90b29scy9tc3ZjL01rdmNidWlsZC5w bQpAQCAtMTM0LDggKzEzNCw4IEBAIHN1YiBta3ZjYnVpbGQKIAogCW91ciBAcGdjb21tb25h bGxmaWxlcyA9IHF3KAogCSAgYXJjaGl2ZS5jIGJhc2U2NC5jIGNoZWNrc3VtX2hlbHBlci5j IGNvbXByZXNzaW9uLmMKLQkgIGNvbmZpZ19pbmZvLmMgY29udHJvbGRhdGFfdXRpbHMuYyBk MnMuYyBlbmNuYW1lcy5jIGV4ZWMuYwotCSAgZjJzLmMgZmlsZV9wZXJtLmMgZmlsZV91dGls cy5jIGhhc2hmbi5jIGlwLmMganNvbmFwaS5jCisJICBjb25maWdfaW5mby5jIGNvbnRyb2xk YXRhX3V0aWxzLmMgY29udHJvbGxvZ191dGlscy5jIGQycy5jIGVuY25hbWVzLmMKKwkgIGV4 ZWMuYyBmMnMuYyBmaWxlX3Blcm0uYyBmaWxlX3V0aWxzLmMgaGFzaGZuLmMgaXAuYyBqc29u YXBpLmMKIAkgIGtleXdvcmRzLmMga3dsb29rdXAuYyBsaW5rLWNhbmFyeS5jIG1kNV9jb21t b24uYyBwZXJjZW50cmVwbC5jCiAJICBwZ19nZXRfbGluZS5jIHBnX2x6Y29tcHJlc3MuYyBw Z19wcm5nLmMgcGdmbmFtZXMuYyBwc3ByaW50Zi5jIHJlbHBhdGguYwogCSAgcm10cmVlLmMg c2FzbHByZXAuYyBzY3JhbS1jb21tb24uYyBzdHJpbmcuYyBzdHJpbmdpbmZvLmMgdW5pY29k ZV9ub3JtLmMKLS0gCjIuMzEuMC53aW5kb3dzLjEKCg== --------------u70ux5ZjNHtK0A5sVFMd9Ey9--