From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 From: Viktor Ashirov To: git-commits@fedoraproject.org Subject: [rpms/389-ds-base] rawhide: Update to 3.3.0 upstream release Date: Mon, 31 Aug 2026 08:05:49 GMT Message-ID: <178816354974.1.1769193751393143704.rpms-389-ds-base-c934b8ec71f2@fedoraproject.org> List-ID: X-Git-Repo: rpms/389-ds-base X-Git-Branch: rawhide X-Git-Rev: c934b8ec71f2d75243e9c97ca2c86373976983a2 ICAgICAgICAgICAgQSBuZXcgY29tbWl0IGhhcyBiZWVuIHB1c2hlZC4KCiAgICAgICAgICAgIFJl cG8gICA6IHJwbXMvMzg5LWRzLWJhc2UKICAgICAgICAgICAgQnJhbmNoIDogcmF3aGlkZQogICAg ICAgICAgICBDb21taXQgOiBjOTM0YjhlYzcxZjJkNzUyNDNlOWM5N2NhMmM4NjM3Mzk3Njk4M2Ey CiAgICAgICAgICAgIEF1dGhvciA6IFZpa3RvciBBc2hpcm92IDx2YXNoaXJvdkByZWRoYXQuY29t PgogICAgICAgICAgICBEYXRlICAgOiAyMDI2LTA4LTMxVDEwOjA1OjQ0KzAyOjAwCiAgICAgICAg ICAgIFN0YXRzICA6ICsxMDk2NDYvLTMzOCBpbiA0NzAgZmlsZShzKQogICAgICAgICAgICBVUkwg ICAgOiBodHRwczovL3NyYy5mZWRvcmFwcm9qZWN0Lm9yZy9ycG1zLzM4OS1kcy1iYXNlL2MvYzkz NGI4ZWM3MWYyZDc1MjQzZTljOTdjYTJjODYzNzM5NzY5ODNhMj9icmFuY2g9cmF3aGlkZQoKICAg ICAgICAgICAgTG9nOgogICAgICAgICAgICBVcGRhdGUgdG8gMy4zLjAgdXBzdHJlYW0gcmVsZWFz ZQoKVXBzdHJlYW0gdGFnOiAzODktZHMtYmFzZS0zLjMuMApVcHN0cmVhbSBjb21taXQ6IDg5ZWU4 MzEyCgpDb21taXQgYXV0aG9yZWQgYnkgUGFja2l0IGF1dG9tYXRpb24gKGh0dHBzOi8vcGFja2l0 LmRldi8pCgotLS0KZGlmZiAtLWdpdCBhLy5wYWNraXQueWFtbCBiLy5wYWNraXQueWFtbApuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzhiMTdiCi0tLSAvZGV2L251bGwKKysr IGIvLnBhY2tpdC55YW1sCkBAIC0wLDAgKzEsMTAwIEBACistLS0KKyMgU2VlIHRoZSBkb2N1bWVu dGF0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uOgorIyBodHRwczovL3BhY2tpdC5kZXYvZG9jcy9j b25maWd1cmF0aW9uLworc3BlY2ZpbGVfcGF0aDogcnBtLzM4OS1kcy1iYXNlLnNwZWMKK3Vwc3Ry ZWFtX3Byb2plY3RfdXJsOiBodHRwczovL2dpdGh1Yi5jb20vMzg5ZHMvMzg5LWRzLWJhc2UKK3Vw c3RyZWFtX3BhY2thZ2VfbmFtZTogMzg5LWRzLWJhc2UKK2Rvd25zdHJlYW1fcGFja2FnZV9uYW1l OiAzODktZHMtYmFzZQorCisjIFNlZTogaHR0cHM6Ly9wYWNraXQuZGV2L2RvY3MvY29uZmlndXJh dGlvbi8jdXBzdHJlYW1fdGFnX3RlbXBsYXRlCit1cHN0cmVhbV90YWdfdGVtcGxhdGU6ICIzODkt ZHMtYmFzZS17dmVyc2lvbn0iCisKKyMgU2VlOiBodHRwczovL3BhY2tpdC5kZXYvZG9jcy9jb25m aWd1cmF0aW9uLyNyZWxlYXNlX3N1ZmZpeAorcmVsZWFzZV9zdWZmaXg6ICJ7UEFDS0lUX1BST0pF Q1RfQlJBTkNIfSIKKworc3JwbV9idWlsZF9kZXBzOgorICAtIG1ha2UKKyAgLSBjYXJnbworICAt IG5wbQorICAtIHJzeW5jCisKK2FjdGlvbnM6CisgIHBvc3QtdXBzdHJlYW0tY2xvbmU6CisgICAg LSBjYXJnbyBpbnN0YWxsIGNhcmdvLWxpY2Vuc2UKKyAgICAtIG1ha2UgLWYgcnBtLm1rIHJwbXJv b3QgcnBtc3BlYworICBjcmVhdGUtYXJjaGl2ZToKKyAgICAtIG1ha2UgLWYgcnBtLm1rIEJVTkRM RV9MSUJEQj0xIGRvd25sb2FkLWNhcmdvLWRlcGVuZGVuY2llcyB0YXJiYWxscworICAgIC0gcHl0 aG9uMyBycG0vYnVuZGxlLXJ1c3QtbnBtLnB5IC1mIHNyYyBzcmMvY29ja3BpdC8zODktY29uc29s ZSBycG0vMzg5LWRzLWJhc2Uuc3BlYworICAgIC0gImJhc2ggLWMgJ2xzIC0xIGRpc3Qvc291cmNl cy8zODktZHMtYmFzZSoudGFyLmJ6MiciCisKKyAgZ2V0LWN1cnJlbnQtdmVyc2lvbjoKKyAgICAt IHJwbXNwZWMgLXEgLS1xZiAiJXtWZXJzaW9ufSIgLS1zcnBtIHJwbS8zODktZHMtYmFzZS5zcGVj CisKK2ZpbGVzX3RvX3N5bmM6CisgIC0gc3JjOiBycG0vMzg5LWRzLWJhc2Uuc3BlYworICAgIGRl c3Q6IDM4OS1kcy1iYXNlLnNwZWMKKyAgLSAucGFja2l0LnlhbWwKKworYWxsb3dlZF9wcl9hdXRo b3JzOgorICAtIHBhY2tpdAorICAtIGFsbF9hZG1pbnMKKworbm90aWZpY2F0aW9uczoKKyAgcHVs bF9yZXF1ZXN0OgorICAgIHN1Y2Nlc3NmdWxfYnVpbGQ6IHRydWUKKworam9iczoKKy0gam9iOiBj b3ByX2J1aWxkCisgIHRyaWdnZXI6IHB1bGxfcmVxdWVzdAorICB0YXJnZXRzOgorICAgIGZlZG9y YS1hbGw6CisgICAgICAgIHdpdGhvdXRfb3B0czoKKyAgICAgICAgICAgIC0gYnVuZGxlX2xpYmRi CisgICAgZXBlbC0xMC1hbGw6CisgICAgICAgIHdpdGhfb3B0czoKKyAgICAgICAgICAgIC0gYnVu ZGxlX2xpYmRiCisKKy0gam9iOiBjb3ByX2J1aWxkCisgIHRyaWdnZXI6IGNvbW1pdAorICBicmFu Y2g6IG1haW4KKyAgcHJlc2VydmVfcHJvamVjdDogdHJ1ZQorICB0YXJnZXRzOgorICAgIGZlZG9y YS1hbGw6CisgICAgICAgIHdpdGhvdXRfb3B0czoKKyAgICAgICAgICAgIC0gYnVuZGxlX2xpYmRi CisgICAgZXBlbC0xMC1hbGw6CisgICAgICAgIHdpdGhfb3B0czoKKyAgICAgICAgICAgIC0gYnVu ZGxlX2xpYmRiCisKKyMgVVBEQVRFIE9OIEJSQU5DSElORzogd2hlbiBhIG5ldyAzODktZHMtYmFz ZS1YLlkgYnJhbmNoIGlzIGNyZWF0ZWQsCisjIGNvcHkgdGhpcyBmaWxlIHRvIHRoZSBuZXcgYnJh bmNoIGFuZCB1cGRhdGUgZGlzdF9naXRfYnJhbmNoZXMgdG8KKyMgcG9pbnQgdG8gdGhlIGNvcnJl Y3QgRmVkb3JhIHJlbGVhc2UgKGUuZy4gZjQ2KS4gVGhlbiB1cGRhdGUgbWFpbidzCisjIGRpc3Rf Z2l0X2JyYW5jaGVzIGlmIHJhd2hpZGUgaGFzIG1vdmVkIHRvIGEgbmV3IHZlcnNpb24uCisjCisj IEN1cnJlbnQgbWFwcGluZzoKKyMgICBtYWluIGJyYW5jaCAgICAgICAgICAgICAgLT4gZmVkb3Jh LXJhd2hpZGUKKyMgICAzODktZHMtYmFzZS0zLjMgYnJhbmNoICAgLT4gZjQ1CisjICAgMzg5LWRz LWJhc2UtMy4yIGJyYW5jaCAgIC0+IGY0MywgZjQ0CisjCisjIE5vdGU6IFNvdXJjZTYvNy84ICh2 ZW5kb3IsIENhcmdvLmxvY2ssIGNvY2twaXRfZGlzdCkgYXJlIGNvbW1lbnRlZCBvdXQKKyMgaW4g dGhlIHVwc3RyZWFtIHNwZWMuIFRoZSBtYWluIHRhcmJhbGwgYWxyZWFkeSBidW5kbGVzIHZlbmRv ci8gYW5kCisjIGNvY2twaXRfZGlzdC8gdmlhIHJwbS5taywgc28gbm8gc2VwYXJhdGUgdXBsb2Fk IGlzIG5lZWRlZC4gU291cmNlNi83LzgKKyMgY2FuIGJlIGFkZGVkIGJhY2sgbWFudWFsbHkgZHVy aW5nIG1haW50ZW5hbmNlIChlLmcuIGZvciBDVkUgcmVidWlsZHMpLgorLSBqb2I6IHByb3Bvc2Vf ZG93bnN0cmVhbQorICB0cmlnZ2VyOiByZWxlYXNlCisgIGRpc3RfZ2l0X2JyYW5jaGVzOgorICAg IC0gZmVkb3JhLXJhd2hpZGUKKworIyBCdWlsZHMgaW4gS29qaSBhdXRvbWF0aWNhbGx5IHdoZW4g dGhlIGRpc3QtZ2l0IFBSIGlzIG1lcmdlZC4KKy0gam9iOiBrb2ppX2J1aWxkCisgIHRyaWdnZXI6 IGNvbW1pdAorICBkaXN0X2dpdF9icmFuY2hlczoKKyAgICAtIGZlZG9yYS1yYXdoaWRlCisKKyMg Q3JlYXRlcyBhIEJvZGhpIHVwZGF0ZSBhZnRlciBhIHN1Y2Nlc3NmdWwgS29qaSBidWlsZC4KKyMg UmF3aGlkZSB1cGRhdGVzIGFyZSBjcmVhdGVkIGF1dG9tYXRpY2FsbHkgYnkgRmVkb3JhIGluZnJh c3RydWN0dXJlLAorIyBzbyBmZWRvcmEtYnJhbmNoZWQgaXMgdXNlZCBoZXJlOyBhZGQgc3RhYmxl IGJyYW5jaGVzIHdoZW4gbmVlZGVkLgorLSBqb2I6IGJvZGhpX3VwZGF0ZQorICB0cmlnZ2VyOiBr b2ppX2J1aWxkCisgIGRpc3RfZ2l0X2JyYW5jaGVzOgorICAgIC0gZmVkb3JhLWJyYW5jaGVkCgpk aWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvMzg5LWRzLWJhc2UtMy4zLjAgYi8z ODktZHMtYmFzZS0zLjMuMC1idWlsZC8zODktZHMtYmFzZS0zLjMuMApuZXcgZmlsZSBtb2RlIDE2 MDAwMAppbmRleCAwMDAwMDAwLi5lYmNlNzg0Ci0tLSAvZGV2L251bGwKKysrIGIvMzg5LWRzLWJh c2UtMy4zLjAtYnVpbGQvMzg5LWRzLWJhc2UtMy4zLjAKQEAgLTAsMCArMSBAQAorU3VicHJvamVj dCBjb21taXQgZWJjZTc4NDljOWExZmFlODFjZmM4Yjk0MTQ2OTEzYzczZjEwOTkwNAoKZGlmZiAt LWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wLy5hcHB2ZXlvci55 bWwgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC8uYXBwdmV5b3IueW1s Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzMWY5YWUKLS0tIC9kZXYvbnVs bAorKysgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC8uYXBwdmV5b3Iu eW1sCkBAIC0wLDAgKzEsNDEgQEAKK3ZlcnNpb246ICd7YnVpbGR9JworCitlbnZpcm9ubWVudDoK KyAgbWF0cml4OgorICAtIE1TWVNURU06IE1JTkdXNjQKKyAgICBDUFU6IHg4Nl82NAorICAgIE1T VkM6IGFtZDY0CisgICAgQ09ORklHX0ZMQUdTOiAtLWVuYWJsZS1kZWJ1ZworICAtIE1TWVNURU06 IE1JTkdXNjQKKyAgICBDUFU6IHg4Nl82NAorICAgIENPTkZJR19GTEFHUzogLS1lbmFibGUtZGVi dWcKKyAgLSBNU1lTVEVNOiBNSU5HVzMyCisgICAgQ1BVOiBpNjg2CisgICAgTVNWQzogeDg2Cisg ICAgQ09ORklHX0ZMQUdTOiAtLWVuYWJsZS1kZWJ1ZworICAtIE1TWVNURU06IE1JTkdXMzIKKyAg ICBDUFU6IGk2ODYKKyAgICBDT05GSUdfRkxBR1M6IC0tZW5hYmxlLWRlYnVnCisgIC0gTVNZU1RF TTogTUlOR1c2NAorICAgIENQVTogeDg2XzY0CisgICAgTVNWQzogYW1kNjQKKyAgLSBNU1lTVEVN OiBNSU5HVzY0CisgICAgQ1BVOiB4ODZfNjQKKyAgLSBNU1lTVEVNOiBNSU5HVzMyCisgICAgQ1BV OiBpNjg2CisgICAgTVNWQzogeDg2CisgIC0gTVNZU1RFTTogTUlOR1czMgorICAgIENQVTogaTY4 NgorCitpbnN0YWxsOgorICAtIHNldCBQQVRIPWM6XG1zeXM2NFwlTVNZU1RFTSVcYmluO2M6XG1z eXM2NFx1c3JcYmluOyVQQVRIJQorICAtIGlmIGRlZmluZWQgTVNWQyBjYWxsICJjOlxQcm9ncmFt IEZpbGVzICh4ODYpXE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIDE0LjBcVkNcdmN2YXJzYWxsLmJh dCIgJU1TVkMlCisgIC0gaWYgZGVmaW5lZCBNU1ZDIHBhY21hbiAtLW5vY29uZmlybSAtUnNjIG1p bmd3LXc2NC0lQ1BVJS1nY2MgZ2NjCisKK2J1aWxkX3NjcmlwdDoKKyAgLSBiYXNoIC1jICJhdXRv Y29uZiIKKyAgLSBiYXNoIC1jICIuL2NvbmZpZ3VyZSAkQ09ORklHX0ZMQUdTIgorICAtIG1pbmd3 MzItbWFrZQorICAtIGZpbGUgbGliL2plbWFsbG9jLmRsbAorICAtIG1pbmd3MzItbWFrZSB0ZXN0 cworICAtIG1pbmd3MzItbWFrZSAtayBjaGVjawoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMu My4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wLy5hdXRvbTR0ZS5jZmcgYi8zODktZHMtYmFzZS0zLjMu MC1idWlsZC9qZW1hbGxvYy01LjMuMC8uYXV0b200dGUuY2ZnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAuLmZlMjQyNGQKLS0tIC9kZXYvbnVsbAorKysgYi8zODktZHMtYmFzZS0z LjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC8uYXV0b200dGUuY2ZnCkBAIC0wLDAgKzEsMyBAQAor YmVnaW4tbGFuZ3VhZ2U6ICJBdXRvY29uZi13aXRob3V0LWFjbG9jYWwtbTQiCithcmdzOiAtLW5v LWNhY2hlCitlbmQtbGFuZ3VhZ2U6ICJBdXRvY29uZi13aXRob3V0LWFjbG9jYWwtbTQiCgpkaWZm IC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvLmNpcnJ1cy55 bWwgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC8uY2lycnVzLnltbApu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTY5NTM5Ci0tLSAvZGV2L251bGwK KysrIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvLmNpcnJ1cy55bWwK QEAgLTAsMCArMSw0NiBAQAorZW52OgorICBDSVJSVVNfQ0xPTkVfREVQVEg6IDEKKyAgQVJDSDog YW1kNjQKKwordGFzazoKKyAgbWF0cml4OgorICAgICAgZW52OgorICAgICAgICBERUJVR19DT05G SUc6IC0tZW5hYmxlLWRlYnVnCisgICAgICBlbnY6CisgICAgICAgIERFQlVHX0NPTkZJRzogLS1k aXNhYmxlLWRlYnVnCisgIG1hdHJpeDoKKyAgICAtIGVudjoKKyAgICAgICAgUFJPRl9DT05GSUc6 IC0tZW5hYmxlLXByb2YKKyAgICAtIGVudjoKKyAgICAgICAgUFJPRl9DT05GSUc6IC0tZGlzYWJs ZS1wcm9mCisgIG1hdHJpeDoKKyAgICAtIG5hbWU6IDY0LWJpdAorICAgICAgZW52OgorICAgICAg ICBDQzoKKyAgICAgICAgQ1hYOgorICAgIC0gbmFtZTogMzItYml0CisgICAgICBlbnY6CisgICAg ICAgIENDOiBjYyAtbTMyCisgICAgICAgIENYWDogYysrIC1tMzIKKyAgbWF0cml4OgorICAgIC0g ZW52OgorICAgICAgICBVTkNPTU1PTl9DT05GSUc6CisgICAgLSBlbnY6CisgICAgICAgIFVOQ09N TU9OX0NPTkZJRzogLS13aXRoLWxnLXBhZ2U9MTYgLS13aXRoLW1hbGxvYy1jb25mPXRjYWNoZTpm YWxzZQorICBmcmVlYnNkX2luc3RhbmNlOgorICAgIG1hdHJpeDoKKyAgICAgIGltYWdlOiBmcmVl YnNkLTEyLTMtcmVsZWFzZS1hbWQ2NAorICBpbnN0YWxsX3NjcmlwdDoKKyAgICAtIHNlZCAtaS5i YWsgLWUgJ3MscGtnK2h0dHA6Ly9wa2cuRnJlZUJTRC5vcmcvXCR7QUJJfS9xdWFydGVybHkscGtn K2h0dHA6Ly9wa2cuRnJlZUJTRC5vcmcvXCR7QUJJfS9sYXRlc3QsJyAvZXRjL3BrZy9GcmVlQlNE LmNvbmYKKyAgICAtIHBrZyB1cGdyYWRlIC15CisgICAgLSBwa2cgaW5zdGFsbCAteSBhdXRvY29u ZiBnbWFrZQorICBzY3JpcHQ6CisgICAgLSBhdXRvY29uZgorICAgICMgV2UgZG9uJ3QgcGVyZmVj dGx5IHRyYWNrIGZyZWVic2Qgc3RkbGliLmggZGVmaW5pdGlvbnMuICBUaGlzIGlzIGZpbmUgd2hl bgorICAgICMgd2UgY291bnQgYXMgYSBzeXN0ZW0gaGVhZGVyLCBidXQgYnJlYWtzIG90aGVyd2lz ZSwgbGlrZSBkdXJpbmcgdGhlc2UKKyAgICAjIHRlc3RzLgorICAgIC0gLi9jb25maWd1cmUgLS13 aXRoLWplbWFsbG9jLXByZWZpeD1jaV8gJHtERUJVR19DT05GSUd9ICR7UFJPRl9DT05GSUd9ICR7 VU5DT01NT05fQ09ORklHfQorICAgIC0gZXhwb3J0IEpGTEFHPWBzeXNjdGwgLW4ga2Vybi5zbXAu Y3B1c2AKKyAgICAtIGdtYWtlIC1qJHtKRkxBR30KKyAgICAtIGdtYWtlIC1qJHtKRkxBR30gdGVz dHMKKyAgICAtIGdtYWtlIGNoZWNrCgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVp bGQvamVtYWxsb2MtNS4zLjAvLmNsYW5nLWZvcm1hdCBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxk L2plbWFsbG9jLTUuMy4wLy5jbGFuZy1mb3JtYXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMC4uNzE5YzAzYwotLS0gL2Rldi9udWxsCisrKyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1 aWxkL2plbWFsbG9jLTUuMy4wLy5jbGFuZy1mb3JtYXQKQEAgLTAsMCArMSwxMjIgQEAKKyMgamVt YWxsb2MgdGFyZ2V0cyBjbGFuZy1mb3JtYXQgdmVyc2lvbiA4LiAgV2UgaW5jbHVkZSBldmVyeSBv cHRpb24gaXQgc3VwcG9ydHMKKyMgaGVyZSwgYnV0IGNvbW1lbnQgb3V0IHRoZSBvbmVzIHRoYXQg YXJlbid0IHJlbGV2YW50IGZvciB1cy4KKy0tLQorIyBBY2Nlc3NNb2RpZmllck9mZnNldDogLTIK K0FsaWduQWZ0ZXJPcGVuQnJhY2tldDogRG9udEFsaWduCitBbGlnbkNvbnNlY3V0aXZlQXNzaWdu bWVudHM6IGZhbHNlCitBbGlnbkNvbnNlY3V0aXZlRGVjbGFyYXRpb25zOiBmYWxzZQorQWxpZ25F c2NhcGVkTmV3bGluZXM6IFJpZ2h0CitBbGlnbk9wZXJhbmRzOiBmYWxzZQorQWxpZ25UcmFpbGlu Z0NvbW1lbnRzOiBmYWxzZQorQWxsb3dBbGxQYXJhbWV0ZXJzT2ZEZWNsYXJhdGlvbk9uTmV4dExp bmU6IHRydWUKK0FsbG93U2hvcnRCbG9ja3NPbkFTaW5nbGVMaW5lOiBmYWxzZQorQWxsb3dTaG9y dENhc2VMYWJlbHNPbkFTaW5nbGVMaW5lOiBmYWxzZQorQWxsb3dTaG9ydEZ1bmN0aW9uc09uQVNp bmdsZUxpbmU6IEVtcHR5CitBbGxvd1Nob3J0SWZTdGF0ZW1lbnRzT25BU2luZ2xlTGluZTogZmFs c2UKK0FsbG93U2hvcnRMb29wc09uQVNpbmdsZUxpbmU6IGZhbHNlCitBbHdheXNCcmVha0FmdGVy UmV0dXJuVHlwZTogQWxsRGVmaW5pdGlvbnMKK0Fsd2F5c0JyZWFrQmVmb3JlTXVsdGlsaW5lU3Ry aW5nczogdHJ1ZQorIyBBbHdheXNCcmVha1RlbXBsYXRlRGVjbGFyYXRpb25zOiBZZXMKK0JpblBh Y2tBcmd1bWVudHM6IHRydWUKK0JpblBhY2tQYXJhbWV0ZXJzOiB0cnVlCitCcmFjZVdyYXBwaW5n OgorICBBZnRlckNsYXNzOiBmYWxzZQorICBBZnRlckNvbnRyb2xTdGF0ZW1lbnQ6IGZhbHNlCisg IEFmdGVyRW51bTogZmFsc2UKKyAgQWZ0ZXJGdW5jdGlvbjogZmFsc2UKKyAgQWZ0ZXJOYW1lc3Bh Y2U6IGZhbHNlCisgIEFmdGVyT2JqQ0RlY2xhcmF0aW9uOiBmYWxzZQorICBBZnRlclN0cnVjdDog ZmFsc2UKKyAgQWZ0ZXJVbmlvbjogZmFsc2UKKyAgQmVmb3JlQ2F0Y2g6IGZhbHNlCisgIEJlZm9y ZUVsc2U6IGZhbHNlCisgIEluZGVudEJyYWNlczogZmFsc2UKKyMgQnJlYWtBZnRlckphdmFGaWVs ZEFubm90YXRpb25zOiB0cnVlCitCcmVha0JlZm9yZUJpbmFyeU9wZXJhdG9yczogTm9uQXNzaWdu bWVudAorQnJlYWtCZWZvcmVCcmFjZXM6IEF0dGFjaAorQnJlYWtCZWZvcmVUZXJuYXJ5T3BlcmF0 b3JzOiB0cnVlCisjIEJyZWFrQ29uc3RydWN0b3JJbml0aWFsaXplcnM6IEJlZm9yZUNvbG9uCisj IEJyZWFrSW5oZXJpdGFuY2VMaXN0OiBCZWZvcmVDb2xvbgorQnJlYWtTdHJpbmdMaXRlcmFsczog ZmFsc2UKK0NvbHVtbkxpbWl0OiA4MAorIyBDb21tZW50UHJhZ21hczogJycKKyMgQ29tcGFjdE5h bWVzcGFjZXM6IHRydWUKKyMgQ29uc3RydWN0b3JJbml0aWFsaXplckFsbE9uT25lTGluZU9yT25l UGVyTGluZTogdHJ1ZQorIyBDb25zdHJ1Y3RvckluaXRpYWxpemVySW5kZW50V2lkdGg6IDQKK0Nv bnRpbnVhdGlvbkluZGVudFdpZHRoOiAyCitDcHAxMUJyYWNlZExpc3RTdHlsZTogdHJ1ZQorRGVy aXZlUG9pbnRlckFsaWdubWVudDogZmFsc2UKK0Rpc2FibGVGb3JtYXQ6ICAgZmFsc2UKK0V4cGVy aW1lbnRhbEF1dG9EZXRlY3RCaW5QYWNraW5nOiBmYWxzZQorRml4TmFtZXNwYWNlQ29tbWVudHM6 IHRydWUKK0ZvckVhY2hNYWNyb3M6ICAgWyBxbF9mb3JlYWNoLCBxcl9mb3JlYWNoLCBdCisjIElu Y2x1ZGVCbG9ja3M6IFByZXNlcnZlCisjIEluY2x1ZGVDYXRlZ29yaWVzOgorIyAgIC0gUmVnZXg6 ICAgICAgICAgICAnXjwuKlwuaChwcCk/PicKKyMgICAgIFByaW9yaXR5OiAgICAgICAgMQorIyBJ bmNsdWRlSXNNYWluUmVnZXg6ICcnCitJbmRlbnRDYXNlTGFiZWxzOiBmYWxzZQorSW5kZW50UFBE aXJlY3RpdmVzOiBBZnRlckhhc2gKK0luZGVudFdpZHRoOiA0CitJbmRlbnRXcmFwcGVkRnVuY3Rp b25OYW1lczogZmFsc2UKKyMgSmF2YUltcG9ydEdyb3VwczogW10KKyMgSmF2YVNjcmlwdFF1b3Rl czogTGVhdmUKKyMgSmF2YVNjcmlwdFdyYXBJbXBvcnRzOiBUcnVlCitLZWVwRW1wdHlMaW5lc0F0 VGhlU3RhcnRPZkJsb2NrczogZmFsc2UKK0xhbmd1YWdlOiBDcHAKK01hY3JvQmxvY2tCZWdpbjog JycKK01hY3JvQmxvY2tFbmQ6ICcnCitNYXhFbXB0eUxpbmVzVG9LZWVwOiAxCisjIE5hbWVzcGFj ZUluZGVudGF0aW9uOiBOb25lCisjIE9iakNCaW5QYWNrUHJvdG9jb2xMaXN0OiBBdXRvCisjIE9i akNCbG9ja0luZGVudFdpZHRoOiAyCisjIE9iakNTcGFjZUFmdGVyUHJvcGVydHk6IGZhbHNlCisj IE9iakNTcGFjZUJlZm9yZVByb3RvY29sTGlzdDogZmFsc2UKKworUGVuYWx0eUJyZWFrQXNzaWdu bWVudDogMgorUGVuYWx0eUJyZWFrQmVmb3JlRmlyc3RDYWxsUGFyYW1ldGVyOiAxCitQZW5hbHR5 QnJlYWtDb21tZW50OiAzMDAKK1BlbmFsdHlCcmVha0ZpcnN0TGVzc0xlc3M6IDEyMAorUGVuYWx0 eUJyZWFrU3RyaW5nOiAxMDAwCisjIFBlbmFsdHlCcmVha1RlbXBsYXRlRGVjbGFyYXRpb246IDEw CitQZW5hbHR5RXhjZXNzQ2hhcmFjdGVyOiAxMDAwMDAwCitQZW5hbHR5UmV0dXJuVHlwZU9uSXRz T3duTGluZTogNjAKK1BvaW50ZXJBbGlnbm1lbnQ6IFJpZ2h0CisjIFJhd1N0cmluZ0Zvcm1hdHM6 CisjICAgLSBMYW5ndWFnZTogVGV4dFByb3RvCisjICAgICAgIERlbGltaXRlcnM6CisjICAgICAg ICAgLSAncGInCisjICAgICAgICAgLSAncHJvdG8nCisjICAgICAgIEVuY2xvc2luZ0Z1bmN0aW9u czoKKyMgICAgICAgICAtICdQQVJTRV9URVhUX1BST1RPJworIyAgICAgICBCYXNlZE9uU3R5bGU6 IGdvb2dsZQorIyAgIC0gTGFuZ3VhZ2U6IENwcAorIyAgICAgICBEZWxpbWl0ZXJzOgorIyAgICAg ICAgIC0gJ2NjJworIyAgICAgICAgIC0gJ2NwcCcKKyMgICAgICAgQmFzZWRPblN0eWxlOiBsbHZt CisjICAgICAgIENhbm9uaWNhbERlbGltaXRlcjogJ2NjJworUmVmbG93Q29tbWVudHM6IHRydWUK K1NvcnRJbmNsdWRlczogZmFsc2UKK1NwYWNlQWZ0ZXJDU3R5bGVDYXN0OiBmYWxzZQorIyBTcGFj ZUFmdGVyVGVtcGxhdGVLZXl3b3JkOiB0cnVlCitTcGFjZUJlZm9yZUFzc2lnbm1lbnRPcGVyYXRv cnM6IHRydWUKKyMgU3BhY2VCZWZvcmVDcHAxMUJyYWNlZExpc3Q6IGZhbHNlCisjIFNwYWNlQmVm b3JlQ3RvckluaXRpYWxpemVyQ29sb246IHRydWUKKyMgU3BhY2VCZWZvcmVJbmhlcml0YW5jZUNv bG9uOiB0cnVlCitTcGFjZUJlZm9yZVBhcmVuczogQ29udHJvbFN0YXRlbWVudHMKKyMgU3BhY2VC ZWZvcmVSYW5nZUJhc2VkRm9yTG9vcENvbG9uOiB0cnVlCitTcGFjZUluRW1wdHlQYXJlbnRoZXNl czogZmFsc2UKK1NwYWNlc0JlZm9yZVRyYWlsaW5nQ29tbWVudHM6IDIKK1NwYWNlc0luQW5nbGVz OiAgZmFsc2UKK1NwYWNlc0luQ1N0eWxlQ2FzdFBhcmVudGhlc2VzOiBmYWxzZQorIyBTcGFjZXNJ bkNvbnRhaW5lckxpdGVyYWxzOiBmYWxzZQorU3BhY2VzSW5QYXJlbnRoZXNlczogZmFsc2UKK1Nw YWNlc0luU3F1YXJlQnJhY2tldHM6IGZhbHNlCisjIFN0YW5kYXJkOiBDcHAxMQorIyBUaGlzIGlz IG5vbWluYWxseSBzdXBwb3J0ZWQgaW4gY2xhbmctZm9ybWF0IHZlcnNpb24gOCwgYnV0IG5vdCBp biB0aGUgYnVpbGQKKyMgdXNlZCBieSBzb21lIG9mIHRoZSBjb3JlIGplbWFsbG9jIGRldmVsb3Bl cnMuCisjIFN0YXRlbWVudE1hY3JvczogW10KK1RhYldpZHRoOiA4CitVc2VUYWI6IE5ldmVyCisu Li4KCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC8u Z2l0YXR0cmlidXRlcyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wLy5n aXRhdHRyaWJ1dGVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzMTNiNTYK LS0tIC9kZXYvbnVsbAorKysgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMu MC8uZ2l0YXR0cmlidXRlcwpAQCAtMCwwICsxIEBACisqIHRleHQ9YXV0byBlb2w9bGYKCmRpZmYg LS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC8uZ2l0aWdub3Jl IGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvLmdpdGlnbm9yZQpuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzBiMzM4Ci0tLSAvZGV2L251bGwKKysr IGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvLmdpdGlnbm9yZQpAQCAt MCwwICsxLDEwMCBAQAorL2Jpbi9qZW1hbGxvYy1jb25maWcKKy9iaW4vamVtYWxsb2Muc2gKKy9i aW4vamVwcm9mCisKKy9jb25maWcuc3RhbXAKKy9jb25maWcubG9nCisvY29uZmlnLnN0YXR1cwor L2NvbmZpZ3VyZQorCisvZG9jL2h0bWwueHNsCisvZG9jL21hbnBhZ2VzLnhzbAorL2RvYy9qZW1h bGxvYy54bWwKKy9kb2MvamVtYWxsb2MuaHRtbAorL2RvYy9qZW1hbGxvYy4zCisKKy9kb2NfaW50 ZXJuYWwvUFJPRklMSU5HX0lOVEVSTkFMUy5wZGYKKworL2plbWFsbG9jLnBjCisKKy9saWIvCisK Ky9NYWtlZmlsZQorCisvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9qZW1hbGxvY19wcmVhbWJs ZS5oCisvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9qZW1hbGxvY19pbnRlcm5hbF9kZWZzLmgK Ky9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL3ByaXZhdGVfbmFtZXNwYWNlLmdlbi5oCisvaW5j bHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9wcml2YXRlX25hbWVzcGFjZS5oCisvaW5jbHVkZS9qZW1h bGxvYy9pbnRlcm5hbC9wcml2YXRlX25hbWVzcGFjZV9qZXQuZ2VuLmgKKy9pbmNsdWRlL2plbWFs bG9jL2ludGVybmFsL3ByaXZhdGVfbmFtZXNwYWNlX2pldC5oCisvaW5jbHVkZS9qZW1hbGxvYy9p bnRlcm5hbC9wcml2YXRlX3N5bWJvbHMuYXdrCisvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9w cml2YXRlX3N5bWJvbHNfamV0LmF3aworL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvcHVibGlj X25hbWVzcGFjZS5oCisvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9wdWJsaWNfc3ltYm9scy50 eHQKKy9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL3B1YmxpY191bm5hbWVzcGFjZS5oCisvaW5j bHVkZS9qZW1hbGxvYy9qZW1hbGxvYy5oCisvaW5jbHVkZS9qZW1hbGxvYy9qZW1hbGxvY19kZWZz LmgKKy9pbmNsdWRlL2plbWFsbG9jL2plbWFsbG9jX21hY3Jvcy5oCisvaW5jbHVkZS9qZW1hbGxv Yy9qZW1hbGxvY19tYW5nbGUuaAorL2luY2x1ZGUvamVtYWxsb2MvamVtYWxsb2NfbWFuZ2xlX2pl dC5oCisvaW5jbHVkZS9qZW1hbGxvYy9qZW1hbGxvY19wcm90b3MuaAorL2luY2x1ZGUvamVtYWxs b2MvamVtYWxsb2NfcHJvdG9zX2pldC5oCisvaW5jbHVkZS9qZW1hbGxvYy9qZW1hbGxvY19yZW5h bWUuaAorL2luY2x1ZGUvamVtYWxsb2MvamVtYWxsb2NfdHlwZWRlZnMuaAorCisvc3JjLyouW29k XQorL3NyYy8qLnN5bQorCisvcnVuX3Rlc3RzLm91dC8KKworL3Rlc3QvdGVzdC5zaAordGVzdC9p bmNsdWRlL3Rlc3QvamVtYWxsb2NfdGVzdC5oCit0ZXN0L2luY2x1ZGUvdGVzdC9qZW1hbGxvY190 ZXN0X2RlZnMuaAorCisvdGVzdC9pbnRlZ3JhdGlvbi9bQS1aYS16XSoKKyEvdGVzdC9pbnRlZ3Jh dGlvbi9jcHAvCishL3Rlc3QvaW50ZWdyYXRpb24vW0EtWmEtel0qLioKKy90ZXN0L2ludGVncmF0 aW9uLyouW29kXQorL3Rlc3QvaW50ZWdyYXRpb24vKi5vdXQKKworL3Rlc3QvaW50ZWdyYXRpb24v Y3BwL1tBLVphLXpdKgorIS90ZXN0L2ludGVncmF0aW9uL2NwcC9bQS1aYS16XSouKgorL3Rlc3Qv aW50ZWdyYXRpb24vY3BwLyouW29kXQorL3Rlc3QvaW50ZWdyYXRpb24vY3BwLyoub3V0CisKKy90 ZXN0L3NyYy8qLltvZF0KKworL3Rlc3Qvc3RyZXNzL1tBLVphLXpdKgorIS90ZXN0L3N0cmVzcy9b QS1aYS16XSouKgorL3Rlc3Qvc3RyZXNzLyouW29kXQorL3Rlc3Qvc3RyZXNzLyoub3V0CisKKy90 ZXN0L3VuaXQvW0EtWmEtel0qCishL3Rlc3QvdW5pdC9bQS1aYS16XSouKgorL3Rlc3QvdW5pdC8q LltvZF0KKy90ZXN0L3VuaXQvKi5vdXQKKworL3Rlc3QvYW5hbHl6ZS9bQS1aYS16XSoKKyEvdGVz dC9hbmFseXplL1tBLVphLXpdKi4qCisvdGVzdC9hbmFseXplLyouW29kXQorL3Rlc3QvYW5hbHl6 ZS8qLm91dAorCisvVkVSU0lPTgorCisqLnBkYgorKi5zZGYKKyoub3BlbmRiCisqLlZDLmRiCisq Lm9wZW5zZGYKKyouY2FjaGVmaWxlCisqLnN1bworKi51c2VyCisqLnNsbi5kb2NzdGF0ZXMKKyou dG1wCisudnMvCisvbXN2Yy9XaW4zMi8KKy9tc3ZjL3g2NC8KKy9tc3ZjL3Byb2plY3RzLyovKi9E ZWJ1ZyovCisvbXN2Yy9wcm9qZWN0cy8qLyovUmVsZWFzZSovCisvbXN2Yy9wcm9qZWN0cy8qLyov V2luMzIvCisvbXN2Yy9wcm9qZWN0cy8qLyoveDY0LwoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNl LTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wLy50cmF2aXMueW1sIGIvMzg5LWRzLWJhc2UtMy4z LjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvLnRyYXZpcy55bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMC4uYmY0NGZhZAotLS0gL2Rldi9udWxsCisrKyBiLzM4OS1kcy1iYXNlLTMu My4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wLy50cmF2aXMueW1sCkBAIC0wLDAgKzEsNDEzIEBACisj IFRoaXMgY29uZmlnIGZpbGUgaXMgZ2VuZXJhdGVkIGJ5IC4vc2NyaXB0cy9nZW5fdHJhdmlzLnB5 LgorIyBEbyBub3QgZWRpdCBieSBoYW5kLgorCisjIFdlIHVzZSAnbWluaW1hbCcsIGJlY2F1c2Ug J2dlbmVyaWMnIG1ha2VzIFdpbmRvd3MgVk1zIGhhbmcgYXQgc3RhcnR1cC4gQWxzbworIyB0aGUg c29mdHdhcmUgcHJvdmlkZWQgYnkgJ2dlbmVyaWMnIGlzIHNpbXBseSBub3QgbmVlZGVkIGZvciBv dXIgdGVzdHMuCisjIERpZmZlcmVuY2VzIGFyZSBleHBsYWluZWQgaGVyZToKKyMgaHR0cHM6Ly9k b2NzLnRyYXZpcy1jaS5jb20vdXNlci9sYW5ndWFnZXMvbWluaW1hbC1hbmQtZ2VuZXJpYy8KK2xh bmd1YWdlOiBtaW5pbWFsCitkaXN0OiBmb2NhbAorCitqb2JzOgorICBpbmNsdWRlOgorICAgIC0g b3M6IHdpbmRvd3MKKyAgICAgIGFyY2g6IGFtZDY0CisgICAgICBlbnY6IENDPWdjYyBDWFg9Zysr IEVYVFJBX0NGTEFHUz0iLWZjb21tb24iCisgICAgLSBvczogd2luZG93cworICAgICAgYXJjaDog YW1kNjQKKyAgICAgIGVudjogQ0M9Z2NjIENYWD1nKysgQ09ORklHVVJFX0ZMQUdTPSItLWVuYWJs ZS1kZWJ1ZyIgRVhUUkFfQ0ZMQUdTPSItZmNvbW1vbiIKKyAgICAtIG9zOiB3aW5kb3dzCisgICAg ICBhcmNoOiBhbWQ2NAorICAgICAgZW52OiBDQz1jbC5leGUgQ1hYPWNsLmV4ZQorICAgIC0gb3M6 IHdpbmRvd3MKKyAgICAgIGFyY2g6IGFtZDY0CisgICAgICBlbnY6IENDPWdjYyBDWFg9ZysrIENS T1NTX0NPTVBJTEVfMzJCSVQ9eWVzIEVYVFJBX0NGTEFHUz0iLWZjb21tb24iCisgICAgLSBvczog d2luZG93cworICAgICAgYXJjaDogYW1kNjQKKyAgICAgIGVudjogQ0M9Y2wuZXhlIENYWD1jbC5l eGUgQ09ORklHVVJFX0ZMQUdTPSItLWVuYWJsZS1kZWJ1ZyIKKyAgICAtIG9zOiB3aW5kb3dzCisg ICAgICBhcmNoOiBhbWQ2NAorICAgICAgZW52OiBDQz1nY2MgQ1hYPWcrKyBDUk9TU19DT01QSUxF XzMyQklUPXllcyBDT05GSUdVUkVfRkxBR1M9Ii0tZW5hYmxlLWRlYnVnIiBFWFRSQV9DRkxBR1M9 Ii1mY29tbW9uIgorICAgIC0gb3M6IHdpbmRvd3MKKyAgICAgIGFyY2g6IGFtZDY0CisgICAgICBl bnY6IENDPWNsLmV4ZSBDWFg9Y2wuZXhlIENST1NTX0NPTVBJTEVfMzJCSVQ9eWVzCisgICAgLSBv czogd2luZG93cworICAgICAgYXJjaDogYW1kNjQKKyAgICAgIGVudjogQ0M9Y2wuZXhlIENYWD1j bC5leGUgQ1JPU1NfQ09NUElMRV8zMkJJVD15ZXMgQ09ORklHVVJFX0ZMQUdTPSItLWVuYWJsZS1k ZWJ1ZyIKKyAgICAtIG9zOiBmcmVlYnNkCisgICAgICBhcmNoOiBhbWQ2NAorICAgICAgZW52OiBD Qz1nY2MgQ1hYPWcrKworICAgIC0gb3M6IGZyZWVic2QKKyAgICAgIGFyY2g6IGFtZDY0CisgICAg ICBlbnY6IENDPWdjYyBDWFg9ZysrIENPTkZJR1VSRV9GTEFHUz0iLS1lbmFibGUtZGVidWciCisg ICAgLSBvczogZnJlZWJzZAorICAgICAgYXJjaDogYW1kNjQKKyAgICAgIGVudjogQ0M9Z2NjIENY WD1nKysgQ09ORklHVVJFX0ZMQUdTPSItLWVuYWJsZS1wcm9mIC0tZW5hYmxlLXByb2YtbGlidW53 aW5kIgorICAgIC0gb3M6IGZyZWVic2QKKyAgICAgIGFyY2g6IGFtZDY0CisgICAgICBlbnY6IEND PWdjYyBDWFg9ZysrIENPTkZJR1VSRV9GTEFHUz0iLS13aXRoLWxnLXBhZ2U9MTYgLS13aXRoLW1h bGxvYy1jb25mPXRjYWNoZTpmYWxzZSIKKyAgICAtIG9zOiBmcmVlYnNkCisgICAgICBhcmNoOiBh bWQ2NAorICAgICAgZW52OiBDQz1nY2MgQ1hYPWcrKyBDUk9TU19DT01QSUxFXzMyQklUPXllcwor ICAgIC0gb3M6IGZyZWVic2QKKyAgICAgIGFyY2g6IGFtZDY0CisgICAgICBlbnY6IENDPWdjYyBD WFg9ZysrIENPTkZJR1VSRV9GTEFHUz0iLS1lbmFibGUtZGVidWcgLS1lbmFibGUtcHJvZiAtLWVu YWJsZS1wcm9mLWxpYnVud2luZCIKKyAgICAtIG9zOiBmcmVlYnNkCisgICAgICBhcmNoOiBhbWQ2 NAorICAgICAgZW52OiBDQz1nY2MgQ1hYPWcrKyBDT05GSUdVUkVfRkxBR1M9Ii0tZW5hYmxlLWRl YnVnIC0td2l0aC1sZy1wYWdlPTE2IC0td2l0aC1tYWxsb2MtY29uZj10Y2FjaGU6ZmFsc2UiCisg ICAgLSBvczogZnJlZWJzZAorICAgICAgYXJjaDogYW1kNjQKKyAgICAgIGVudjogQ0M9Z2NjIENY WD1nKysgQ1JPU1NfQ09NUElMRV8zMkJJVD15ZXMgQ09ORklHVVJFX0ZMQUdTPSItLWVuYWJsZS1k ZWJ1ZyIKKyAgICAtIG9zOiBmcmVlYnNkCisgICAgICBhcmNoOiBhbWQ2NAorICAgICAgZW52OiBD Qz1nY2MgQ1hYPWcrKyBDT05GSUdVUkVfRkxBR1M9Ii0tZW5hYmxlLXByb2YgLS1lbmFibGUtcHJv Zi1saWJ1bndpbmQgLS13aXRoLWxnLXBhZ2U9MTYgLS13aXRoLW1hbGxvYy1jb25mPXRjYWNoZTpm YWxzZSIKKyAgICAtIG9zOiBmcmVlYnNkCisgICAgICBhcmNoOiBhbWQ2NAorICAgICAgZW52OiBD Qz1nY2MgQ1hYPWcrKyBDUk9TU19DT01QSUxFXzMyQklUPXllcyBDT05GSUdVUkVfRkxBR1M9Ii0t ZW5hYmxlLXByb2YgLS1lbmFibGUtcHJvZi1saWJ1bndpbmQiCisgICAgLSBvczogZnJlZWJzZAor ICAgICAgYXJjaDogYW1kNjQKKyAgICAgIGVudjogQ0M9Z2NjIENYWD1nKysgQ1JPU1NfQ09NUElM RV8zMkJJVD15ZXMgQ09ORklHVVJFX0ZMQUdTPSItLXdpdGgtbGctcGFnZT0xNiAtLXdpdGgtbWFs bG9jLWNvbmY9dGNhY2hlOmZhbHNlIgorICAgIC0gb3M6IGZyZWVic2QKKyAgICAgIGFyY2g6IGFt ZDY0CisgICAgICBlbnY6IENDPWdjYyBDWFg9ZysrIENPTkZJR1VSRV9GTEFHUz0iLS1lbmFibGUt ZGVidWcgLS1lbmFibGUtcHJvZiAtLWVuYWJsZS1wcm9mLWxpYnVud2luZCAtLXdpdGgtbGctcGFn ZT0xNiAtLXdpdGgtbWFsbG9jLWNvbmY9dGNhY2hlOmZhbHNlIgorICAgIC0gb3M6IGZyZWVic2QK KyAgICAgIGFyY2g6IGFtZDY0CisgICAgICBlbnY6IENDPWdjYyBDWFg9ZysrIENST1NTX0NPTVBJ TEVfMzJCSVQ9eWVzIENPTkZJR1VSRV9GTEFHUz0iLS1lbmFibGUtZGVidWcgLS1lbmFibGUtcHJv ZiAtLWVuYWJsZS1wcm9mLWxpYnVud2luZCIKKyAgICAtIG9zOiBmcmVlYnNkCisgICAgICBhcmNo OiBhbWQ2NAorICAgICAgZW52OiBDQz1nY2MgQ1hYPWcrKyBDUk9TU19DT01QSUxFXzMyQklUPXll cyBDT05GSUdVUkVfRkxBR1M9Ii0tZW5hYmxlLWRlYnVnIC0td2l0aC1sZy1wYWdlPTE2IC0td2l0 aC1tYWxsb2MtY29uZj10Y2FjaGU6ZmFsc2UiCisgICAgLSBvczogZnJlZWJzZAorICAgICAgYXJj aDogYW1kNjQKKyAgICAgIGVudjogQ0M9Z2NjIENYWD1nKysgQ1JPU1NfQ09NUElMRV8zMkJJVD15 ZXMgQ09ORklHVVJFX0ZMQUdTPSItLWVuYWJsZS1wcm9mIC0tZW5hYmxlLXByb2YtbGlidW53aW5k IC0td2l0aC1sZy1wYWdlPTE2IC0td2l0aC1tYWxsb2MtY29uZj10Y2FjaGU6ZmFsc2UiCisgICAg LSBvczogZnJlZWJzZAorICAgICAgYXJjaDogYW1kNjQKKyAgICAgIGVudjogQ0M9Z2NjIENYWD1n KysgQ1JPU1NfQ09NUElMRV8zMkJJVD15ZXMgQ09ORklHVVJFX0ZMQUdTPSItLWVuYWJsZS1kZWJ1 ZyAtLWVuYWJsZS1wcm9mIC0tZW5hYmxlLXByb2YtbGlidW53aW5kIC0td2l0aC1sZy1wYWdlPTE2 IC0td2l0aC1tYWxsb2MtY29uZj10Y2FjaGU6ZmFsc2UiCisgICAgLSBvczogbGludXgKKyAgICAg IGFyY2g6IGFtZDY0CisgICAgICBlbnY6IENDPWdjYyBDWFg9ZysrIEVYVFJBX0NGTEFHUz0iLVdl cnJvciAtV25vLWFycmF5LWJvdW5kcyIKKyAgICAtIG9zOiBsaW51eAorICAgICAgYXJjaDogYW1k NjQKKyAgICAgIGVudjogQ0M9Y2xhbmcgQ1hYPWNsYW5nKysgRVhUUkFfQ0ZMQUdTPSItV2Vycm9y IC1Xbm8tYXJyYXktYm91bmRzIC1Xbm8tdW5rbm93bi13YXJuaW5nLW9wdGlvbiAtV25vLWlnbm9y ZWQtYXR0cmlidXRlcyIKKyAgICAtIG9zOiBsaW51eAorICAgICAgYXJjaDogYW1kNjQKKyAgICAg IGVudjogQ0M9Z2NjIENYWD1nKysgQ1JPU1NfQ09NUElMRV8zMkJJVD15ZXMgQ09NUElMRVJfRkxB R1M9Ii1tMzIiIEVYVFJBX0NGTEFHUz0iLVdlcnJvciAtV25vLWFycmF5LWJvdW5kcyIKKyAgICAt IG9zOiBsaW51eAorICAgICAgYXJjaDogYW1kNjQKKyAgICAgIGVudjogQ0M9Z2NjIENYWD1nKysg Q09ORklHVVJFX0ZMQUdTPSItLWVuYWJsZS1kZWJ1ZyIgRVhUUkFfQ0ZMQUdTPSItV2Vycm9yIC1X bm8tYXJyYXktYm91bmRzIgorICAgIC0gb3M6IGxpbnV4CisgICAgICBhcmNoOiBhbWQ2NAorICAg ICAgZW52OiBDQz1nY2MgQ1hYPWcrKyBDT05GSUdVUkVfRkxBR1M9Ii0tZW5hYmxlLXByb2YiIEVY VFJBX0NGTEFHUz0iLVdlcnJvciAtV25vLWFycmF5LWJvdW5kcyIKKyAgICAtIG9zOiBsaW51eAor ICAgICAgYXJjaDogYW1kNjQKKyAgICAgIGVudjogQ0M9Z2NjIENYWD1nKysgQ09ORklHVVJFX0ZM QUdTPSItLWRpc2FibGUtc3RhdHMiIEVYVFJBX0NGTEFHUz0iLVdlcnJvciAtV25vLWFycmF5LWJv dW5kcyIKKyAgICAtIG9zOiBsaW51eAorICAgICAgYXJjaDogYW1kNjQKKyAgICAgIGVudjogQ0M9 Z2NjIENYWD1nKysgQ09ORklHVVJFX0ZMQUdTPSItLWRpc2FibGUtbGliZGwiIEVYVFJBX0NGTEFH Uz0iLVdlcnJvciAtV25vLWFycmF5LWJvdW5kcyIKKyAgICAtIG9zOiBsaW51eAorICAgICAgYXJj aDogYW1kNjQKKyAgICAgIGVudjogQ0M9Z2NjIENYWD1nKysgQ09ORklHVVJFX0ZMQUdTPSItLWVu YWJsZS1vcHQtc2FmZXR5LWNoZWNrcyIgRVhUUkFfQ0ZMQUdTPSItV2Vycm9yIC1Xbm8tYXJyYXkt Ym91bmRzIgorICAgIC0gb3M6IGxpbnV4CisgICAgICBhcmNoOiBhbWQ2NAorICAgICAgZW52OiBD Qz1nY2MgQ1hYPWcrKyBDT05GSUdVUkVfRkxBR1M9Ii0td2l0aC1sZy1wYWdlPTE2IiBFWFRSQV9D RkxBR1M9Ii1XZXJyb3IgLVduby1hcnJheS1ib3VuZHMiCisgICAgLSBvczogbGludXgKKyAgICAg IGFyY2g6IGFtZDY0CisgICAgICBlbnY6IENDPWdjYyBDWFg9ZysrIENPTkZJR1VSRV9GTEFHUz0i LS13aXRoLW1hbGxvYy1jb25mPXRjYWNoZTpmYWxzZSIgRVhUUkFfQ0ZMQUdTPSItV2Vycm9yIC1X bm8tYXJyYXktYm91bmRzIgorICAgIC0gb3M6IGxpbnV4CisgICAgICBhcmNoOiBhbWQ2NAorICAg ICAgZW52OiBDQz1nY2MgQ1hYPWcrKyBDT05GSUdVUkVfRkxBR1M9Ii0td2l0aC1tYWxsb2MtY29u Zj1kc3M6cHJpbWFyeSIgRVhUUkFfQ0ZMQUdTPSItV2Vycm9yIC1Xbm8tYXJyYXktYm91bmRzIgor ICAgIC0gb3M6IGxpbnV4CisgICAgICBhcmNoOiBhbWQ2NAorICAgICAgZW52OiBDQz1nY2MgQ1hY PWcrKyBDT05GSUdVUkVfRkxBR1M9Ii0td2l0aC1tYWxsb2MtY29uZj1wZXJjcHVfYXJlbmE6cGVy Y3B1IiBFWFRSQV9DRkxBR1M9Ii1XZXJyb3IgLVduby1hcnJheS1ib3VuZHMiCisgICAgLSBvczog bGludXgKKyAgICAgIGFyY2g6IGFtZDY0CisgICAgICBlbnY6IENDPWdjYyBDWFg9ZysrIENPTkZJ R1VSRV9GTEFHUz0iLS13aXRoLW1hbGxvYy1jb25mPWJhY2tncm91bmRfdGhyZWFkOnRydWUiIEVY VFJBX0NGTEFHUz0iLVdlcnJvciAtV25vLWFycmF5LWJvdW5kcyIKKyAgICAtIG9zOiBsaW51eAor ICAgICAgYXJjaDogYW1kNjQKKyAgICAgIGVudjogQ0M9Y2xhbmcgQ1hYPWNsYW5nKysgQ1JPU1Nf Q09NUElMRV8zMkJJVD15ZXMgQ09NUElMRVJfRkxBR1M9Ii1tMzIiIEVYVFJBX0NGTEFHUz0iLVdl cnJvciAtV25vLWFycmF5LWJvdW5kcyAtV25vLXVua25vd24td2FybmluZy1vcHRpb24gLVduby1p Z25vcmVkLWF0dHJpYnV0ZXMiCisgICAgLSBvczogbGludXgKKyAgICAgIGFyY2g6IGFtZDY0Cisg ICAgICBlbnY6IENDPWNsYW5nIENYWD1jbGFuZysrIENPTkZJR1VSRV9GTEFHUz0iLS1lbmFibGUt ZGVidWciIEVYVFJBX0NGTEFHUz0iLVdlcnJvciAtV25vLWFycmF5LWJvdW5kcyAtV25vLXVua25v d24td2FybmluZy1vcHRpb24gLVduby1pZ25vcmVkLWF0dHJpYnV0ZXMiCisgICAgLSBvczogbGlu dXgKKyAgICAgIGFyY2g6IGFtZDY0CisgICAgICBlbnY6IENDPWNsYW5nIENYWD1jbGFuZysrIENP TkZJR1VSRV9GTEFHUz0iLS1lbmFibGUtcHJvZiIgRVhUUkFfQ0ZMQUdTPSItV2Vycm9yIC1Xbm8t YXJyYXktYm91bmRzIC1Xbm8tdW5rbm93bi13YXJuaW5nLW9wdGlvbiAtV25vLWlnbm9yZWQtYXR0 cmlidXRlcyIKKyAgICAtIG9zOiBsaW51eAorICAgICAgYXJjaDogYW1kNjQKKyAgICAgIGVudjog Q0M9Y2xhbmcgQ1hYPWNsYW5nKysgQ09ORklHVVJFX0ZMQUdTPSItLWRpc2FibGUtc3RhdHMiIEVY VFJBX0NGTEFHUz0iLVdlcnJvciAtV25vLWFycmF5LWJvdW5kcyAtV25vLXVua25vd24td2Fybmlu Zy1vcHRpb24gLVduby1pZ25vcmVkLWF0dHJpYnV0ZXMiCisgICAgLSBvczogbGludXgKKyAgICAg IGFyY2g6IGFtZDY0CisgICAgICBlbnY6IENDPWNsYW5nIENYWD1jbGFuZysrIENPTkZJR1VSRV9G TEFHUz0iLS1kaXNhYmxlLWxpYmRsIiBFWFRSQV9DRkxBR1M9Ii1XZXJyb3IgLVduby1hcnJheS1i b3VuZHMgLVduby11bmtub3duLXdhcm5pbmctb3B0aW9uIC1Xbm8taWdub3JlZC1hdHRyaWJ1dGVz IgorICAgIC0gb3M6IGxpbnV4CisgICAgICBhcmNoOiBhbWQ2NAorICAgICAgZW52OiBDQz1jbGFu ZyBDWFg9Y2xhbmcrKyBDT05GSUdVUkVfRkxBR1M9Ii0tZW5hYmxlLW9wdC1zYWZldHktY2hlY2tz IiBFWFRSQV9DRkxBR1M9Ii1XZXJyb3IgLVduby1hcnJheS1ib3VuZHMgLVduby11bmtub3duLXdh cm5pbmctb3B0aW9uIC1Xbm8taWdub3JlZC1hdHRyaWJ1dGVzIgorICAgIC0gb3M6IGxpbnV4Cisg ICAgICBhcmNoOiBhbWQ2NAorICAgICAgZW52OiBDQz1jbGFuZyBDWFg9Y2xhbmcrKyBDT05GSUdV UkVfRkxBR1M9Ii0td2l0aC1sZy1wYWdlPTE2IiBFWFRSQV9DRkxBR1M9Ii1XZXJyb3IgLVduby1h cnJheS1ib3VuZHMgLVduby11bmtub3duLXdhcm5pbmctb3B0aW9uIC1Xbm8taWdub3JlZC1hdHRy aWJ1dGVzIgorICAgIC0gb3M6IGxpbnV4CisgICAgICBhcmNoOiBhbWQ2NAorICAgICAgZW52OiBD Qz1jbGFuZyBDWFg9Y2xhbmcrKyBDT05GSUdVUkVfRkxBR1M9Ii0td2l0aC1tYWxsb2MtY29uZj10 Y2FjaGU6ZmFsc2UiIEVYVFJBX0NGTEFHUz0iLVdlcnJvciAtV25vLWFycmF5LWJvdW5kcyAtV25v LXVua25vd24td2FybmluZy1vcHRpb24gLVduby1pZ25vcmVkLWF0dHJpYnV0ZXMiCisgICAgLSBv czogbGludXgKKyAgICAgIGFyY2g6IGFtZDY0CisgICAgICBlbnY6IENDPWNsYW5nIENYWD1jbGFu ZysrIENPTkZJR1VSRV9GTEFHUz0iLS13aXRoLW1hbGxvYy1jb25mPWRzczpwcmltYXJ5IiBFWFRS QV9DRkxBR1M9Ii1XZXJyb3IgLVduby1hcnJheS1ib3VuZHMgLVduby11bmtub3duLXdhcm5pbmct b3B0aW9uIC1Xbm8taWdub3JlZC1hdHRyaWJ1dGVzIgorICAgIC0gb3M6IGxpbnV4CisgICAgICBh cmNoOiBhbWQ2NAorICAgICAgZW52OiBDQz1jbGFuZyBDWFg9Y2xhbmcrKyBDT05GSUdVUkVfRkxB R1M9Ii0td2l0aC1tYWxsb2MtY29uZj1wZXJjcHVfYXJlbmE6cGVyY3B1IiBFWFRSQV9DRkxBR1M9 Ii1XZXJyb3IgLVduby1hcnJheS1ib3VuZHMgLVduby11bmtub3duLXdhcm5pbmctb3B0aW9uIC1X bm8taWdub3JlZC1hdHRyaWJ1dGVzIgorICAgIC0gb3M6IGxpbnV4CisgICAgICBhcmNoOiBhbWQ2 NAorICAgICAgZW52OiBDQz1jbGFuZyBDWFg9Y2xhbmcrKyBDT05GSUdVUkVfRkxBR1M9Ii0td2l0 aC1tYWxsb2MtY29uZj1iYWNrZ3JvdW5kX3RocmVhZDp0cnVlIiBFWFRSQV9DRkxBR1M9Ii1XZXJy b3IgLVduby1hcnJheS1ib3VuZHMgLVduby11bmtub3duLXdhcm5pbmctb3B0aW9uIC1Xbm8taWdu b3JlZC1hdHRyaWJ1dGVzIgorICAgIC0gb3M6IGxpbnV4CisgICAgICBhcmNoOiBhbWQ2NAorICAg ICAgZW52OiBDQz1nY2MgQ1hYPWcrKyBDUk9TU19DT01QSUxFXzMyQklUPXllcyBDT01QSUxFUl9G TEFHUz0iLW0zMiIgQ09ORklHVVJFX0ZMQUdTPSItLWVuYWJsZS1kZWJ1ZyIgRVhUUkFfQ0ZMQUdT PSItV2Vycm9yIC1Xbm8tYXJyYXktYm91bmRzIgorICAgIC0gb3M6IGxpbnV4CisgICAgICBhcmNo OiBhbWQ2NAorICAgICAgZW52OiBDQz1nY2MgQ1hYPWcrKyBDUk9TU19DT01QSUxFXzMyQklUPXll cyBDT01QSUxFUl9GTEFHUz0iLW0zMiIgQ09ORklHVVJFX0ZMQUdTPSItLWVuYWJsZS1wcm9mIiBF WFRSQV9DRkxBR1M9Ii1XZXJyb3IgLVduby1hcnJheS1ib3VuZHMiCisgICAgLSBvczogbGludXgK KyAgICAgIGFyY2g6IGFtZDY0CisgICAgICBlbnY6IENDPWdjYyBDWFg9ZysrIENST1NTX0NPTVBJ TEVfMzJCSVQ9eWVzIENPTVBJTEVSX0ZMQUdTPSItbTMyIiBDT05GSUdVUkVfRkxBR1M9Ii0tZGlz YWJsZS1zdGF0cyIgRVhUUkFfQ0ZMQUdTPSItV2Vycm9yIC1Xbm8tYXJyYXktYm91bmRzIgorICAg IC0gb3M6IGxpbnV4CisgICAgICBhcmNoOiBhbWQ2NAorICAgICAgZW52OiBDQz1nY2MgQ1hYPWcr KyBDUk9TU19DT01QSUxFXzMyQklUPXllcyBDT01QSUxFUl9GTEFHUz0iLW0zMiIgQ09ORklHVVJF X0ZMQUdTPSItLWRpc2FibGUtbGliZGwiIEVYVFJBX0NGTEFHUz0iLVdlcnJvciAtV25vLWFycmF5 LWJvdW5kcyIKKyAgICAtIG9zOiBsaW51eAorICAgICAgYXJjaDogYW1kNjQKKyAgICAgIGVudjog Q0M9Z2NjIENYWD1nKysgQ1JPU1NfQ09NUElMRV8zMkJJVD15ZXMgQ09NUElMRVJfRkxBR1M9Ii1t MzIiIENPTkZJR1VSRV9GTEFHUz0iLS1lbmFibGUtb3B0LXNhZmV0eS1jaGVja3MiIEVYVFJBX0NG TEFHUz0iLVdlcnJvciAtV25vLWFycmF5LWJvdW5kcyIKKyAgICAtIG9zOiBsaW51eAorICAgICAg YXJjaDogYW1kNjQKKyAgICAgIGVudjogQ0M9Z2NjIENYWD1nKysgQ1JPU1NfQ09NUElMRV8zMkJJ VD15ZXMgQ09NUElMRVJfRkxBR1M9Ii1tMzIiIENPTkZJR1VSRV9GTEFHUz0iLS13aXRoLWxnLXBh Z2U9MTYiIEVYVFJBX0NGTEFHUz0iLVdlcnJvciAtV25vLWFycmF5LWJvdW5kcyIKKyAgICAtIG9z OiBsaW51eAorICAgICAgYXJjaDogYW1kNjQKKyAgICAgIGVudjogQ0M9Z2NjIENYWD1nKysgQ1JP U1NfQ09NUElMRV8zMkJJVD15ZXMgQ09NUElMRVJfRkxBR1M9Ii1tMzIiIENPTkZJR1VSRV9GTEFH Uz0iLS13aXRoLW1hbGxvYy1jb25mPXRjYWNoZTpmYWxzZSIgRVhUUkFfQ0ZMQUdTPSItV2Vycm9y IC1Xbm8tYXJyYXktYm91bmRzIgorICAgIC0gb3M6IGxpbnV4CisgICAgICBhcmNoOiBhbWQ2NAor ICAgICAgZW52OiBDQz1nY2MgQ1hYPWcrKyBDUk9TU19DT01QSUxFXzMyQklUPXllcyBDT01QSUxF Ul9GTEFHUz0iLW0zMiIgQ09ORklHVVJFX0ZMQUdTPSItLXdpdGgtbWFsbG9jLWNvbmY9ZHNzOnBy aW1hcnkiIEVYVFJBX0NGTEFHUz0iLVdlcnJvciAtV25vLWFycmF5LWJvdW5kcyIKKyAgICAtIG9z OiBsaW51eAorICAgICAgYXJjaDogYW1kNjQKKyAgICAgIGVudjogQ0M9Z2NjIENYWD1nKysgQ1JP U1NfQ09NUElMRV8zMkJJVD15ZXMgQ09NUElMRVJfRkxBR1M9Ii1tMzIiIENPTkZJR1VSRV9GTEFH Uz0iLS13aXRoLW1hbGxvYy1jb25mPXBlcmNwdV9hcmVuYTpwZXJjcHUiIEVYVFJBX0NGTEFHUz0i LVdlcnJvciAtV25vLWFycmF5LWJvdW5kcyIKKyAgICAtIG9zOiBsaW51eAorICAgICAgYXJjaDog YW1kNjQKKyAgICAgIGVudjogQ0M9Z2NjIENYWD1nKysgQ1JPU1NfQ09NUElMRV8zMkJJVD15ZXMg Q09NUElMRVJfRkxBR1M9Ii1tMzIiIENPTkZJR1VSRV9GTEFHUz0iLS13aXRoLW1hbGxvYy1jb25m PWJhY2tncm91bmRfdGhyZWFkOnRydWUiIEVYVFJBX0NGTEFHUz0iLVdlcnJvciAtV25vLWFycmF5 LWJvdW5kcyIKKyAgICAtIG9zOiBsaW51eAorICAgICAgYXJjaDogYW1kNjQKKyAgICAgIGVudjog Q0M9Z2NjIENYWD1nKysgQ09ORklHVVJFX0ZMQUdTPSItLWVuYWJsZS1kZWJ1ZyAtLWVuYWJsZS1w cm9mIiBFWFRSQV9DRkxBR1M9Ii1XZXJyb3IgLVduby1hcnJheS1ib3VuZHMiCisgICAgLSBvczog bGludXgKKyAgICAgIGFyY2g6IGFtZDY0CisgICAgICBlbnY6IENDPWdjYyBDWFg9ZysrIENPTkZJ R1VSRV9GTEFHUz0iLS1lbmFibGUtZGVidWcgLS1kaXNhYmxlLXN0YXRzIiBFWFRSQV9DRkxBR1M9 Ii1XZXJyb3IgLVduby1hcnJheS1ib3VuZHMiCisgICAgLSBvczogbGludXgKKyAgICAgIGFyY2g6 IGFtZDY0CisgICAgICBlbnY6IENDPWdjYyBDWFg9ZysrIENPTkZJR1VSRV9GTEFHUz0iLS1lbmFi bGUtZGVidWcgLS1kaXNhYmxlLWxpYmRsIiBFWFRSQV9DRkxBR1M9Ii1XZXJyb3IgLVduby1hcnJh eS1ib3VuZHMiCisgICAgLSBvczogbGludXgKKyAgICAgIGFyY2g6IGFtZDY0CisgICAgICBlbnY6 IENDPWdjYyBDWFg9ZysrIENPTkZJR1VSRV9GTEFHUz0iLS1lbmFibGUtZGVidWcgLS1lbmFibGUt b3B0LXNhZmV0eS1jaGVja3MiIEVYVFJBX0NGTEFHUz0iLVdlcnJvciAtV25vLWFycmF5LWJvdW5k cyIKKyAgICAtIG9zOiBsaW51eAorICAgICAgYXJjaDogYW1kNjQKKyAgICAgIGVudjogQ0M9Z2Nj IENYWD1nKysgQ09ORklHVVJFX0ZMQUdTPSItLWVuYWJsZS1kZWJ1ZyAtLXdpdGgtbGctcGFnZT0x NiIgRVhUUkFfQ0ZMQUdTPSItV2Vycm9yIC1Xbm8tYXJyYXktYm91bmRzIgorICAgIC0gb3M6IGxp bnV4CisgICAgICBhcmNoOiBhbWQ2NAorICAgICAgZW52OiBDQz1nY2MgQ1hYPWcrKyBDT05GSUdV UkVfRkxBR1M9Ii0tZW5hYmxlLWRlYnVnIC0td2l0aC1tYWxsb2MtY29uZj10Y2FjaGU6ZmFsc2Ui IEVYVFJBX0NGTEFHUz0iLVdlcnJvciAtV25vLWFycmF5LWJvdW5kcyIKKyAgICAtIG9zOiBsaW51 eAorICAgICAgYXJjaDogYW1kNjQKKyAgICAgIGVudjogQ0M9Z2NjIENYWD1nKysgQ09ORklHVVJF X0ZMQUdTPSItLWVuYWJsZS1kZWJ1ZyAtLXdpdGgtbWFsbG9jLWNvbmY9ZHNzOnByaW1hcnkiIEVY VFJBX0NGTEFHUz0iLVdlcnJvciAtV25vLWFycmF5LWJvdW5kcyIKKyAgICAtIG9zOiBsaW51eAor ICAgICAgYXJjaDogYW1kNjQKKyAgICAgIGVudjogQ0M9Z2NjIENYWD1nKysgQ09ORklHVVJFX0ZM QUdTPSItLWVuYWJsZS1kZWJ1ZyAtLXdpdGgtbWFsbG9jLWNvbmY9cGVyY3B1X2FyZW5hOnBlcmNw dSIgRVhUUkFfQ0ZMQUdTPSItV2Vycm9yIC1Xbm8tYXJyYXktYm91bmRzIgorICAgIC0gb3M6IGxp bnV4CisgICAgICBhcmNoOiBhbWQ2NAorICAgICAgZW52OiBDQz1nY2MgQ1hYPWcrKyBDT05GSUdV UkVfRkxBR1M9Ii0tZW5hYmxlLWRlYnVnIC0td2l0aC1tYWxsb2MtY29uZj1iYWNrZ3JvdW5kX3Ro cmVhZDp0cnVlIiBFWFRSQV9DRkxBR1M9Ii1XZXJyb3IgLVduby1hcnJheS1ib3VuZHMiCisgICAg LSBvczogbGludXgKKyAgICAgIGFyY2g6IGFtZDY0CisgICAgICBlbnY6IENDPWdjYyBDWFg9Zysr IENPTkZJR1VSRV9GTEFHUz0iLS1lbmFibGUtcHJvZiAtLWRpc2FibGUtc3RhdHMiIEVYVFJBX0NG TEFHUz0iLVdlcnJvciAtV25vLWFycmF5LWJvdW5kcyIKKyAgICAtIG9zOiBsaW51eAorICAgICAg YXJjaDogYW1kNjQKKyAgICAgIGVudjogQ0M9Z2NjIENYWD1nKysgQ09ORklHVVJFX0ZMQUdTPSIt LWVuYWJsZS1wcm9mIC0tZGlzYWJsZS1saWJkbCIgRVhUUkFfQ0ZMQUdTPSItV2Vycm9yIC1Xbm8t YXJyYXktYm91bmRzIgorICAgIC0gb3M6IGxpbnV4CisgICAgICBhcmNoOiBhbWQ2NAorICAgICAg ZW52OiBDQz1nY2MgQ1hYPWcrKyBDT05GSUdVUkVfRkxBR1M9Ii0tZW5hYmxlLXByb2YgLS1lbmFi bGUtb3B0LXNhZmV0eS1jaGVja3MiIEVYVFJBX0NGTEFHUz0iLVdlcnJvciAtV25vLWFycmF5LWJv dW5kcyIKKyAgICAtIG9zOiBsaW51eAorICAgICAgYXJjaDogYW1kNjQKKyAgICAgIGVudjogQ0M9 Z2NjIENYWD1nKysgQ09ORklHVVJFX0ZMQUdTPSItLWVuYWJsZS1wcm9mIC0td2l0aC1sZy1wYWdl PTE2IiBFWFRSQV9DRkxBR1M9Ii1XZXJyb3IgLVduby1hcnJheS1ib3VuZHMiCisgICAgLSBvczog bGludXgKKyAgICAgIGFyY2g6IGFtZDY0CisgICAgICBlbnY6IENDPWdjYyBDWFg9ZysrIENPTkZJ R1VSRV9GTEFHUz0iLS1lbmFibGUtcHJvZiAtLXdpdGgtbWFsbG9jLWNvbmY9dGNhY2hlOmZhbHNl IiBFWFRSQV9DRkxBR1M9Ii1XZXJyb3IgLVduby1hcnJheS1ib3VuZHMiCisgICAgLSBvczogbGlu dXgKKyAgICAgIGFyY2g6IGFtZDY0CisgICAgICBlbnY6IENDPWdjYyBDWFg9ZysrIENPTkZJR1VS RV9GTEFHUz0iLS1lbmFibGUtcHJvZiAtLXdpdGgtbWFsbG9jLWNvbmY9ZHNzOnByaW1hcnkiIEVY VFJBX0NGTEFHUz0iLVdlcnJvciAtV25vLWFycmF5LWJvdW5kcyIKKyAgICAtIG9zOiBsaW51eAor ICAgICAgYXJjaDogYW1kNjQKKyAgICAgIGVudjogQ0M9Z2NjIENYWD1nKysgQ09ORklHVVJFX0ZM QUdTPSItLWVuYWJsZS1wcm9mIC0td2l0aC1tYWxsb2MtY29uZj1wZXJjcHVfYXJlbmE6cGVyY3B1 IiBFWFRSQV9DRkxBR1M9Ii1XZXJyb3IgLVduby1hcnJheS1ib3VuZHMiCisgICAgLSBvczogbGlu dXgKKyAgICAgIGFyY2g6IGFtZDY0CisgICAgICBlbnY6IENDPWdjYyBDWFg9ZysrIENPTkZJR1VS RV9GTEFHUz0iLS1lbmFibGUtcHJvZiAtLXdpdGgtbWFsbG9jLWNvbmY9YmFja2dyb3VuZF90aHJl YWQ6dHJ1ZSIgRVhUUkFfQ0ZMQUdTPSItV2Vycm9yIC1Xbm8tYXJyYXktYm91bmRzIgorICAgIC0g b3M6IGxpbnV4CisgICAgICBhcmNoOiBhbWQ2NAorICAgICAgZW52OiBDQz1nY2MgQ1hYPWcrKyBD T05GSUdVUkVfRkxBR1M9Ii0tZGlzYWJsZS1zdGF0cyAtLWRpc2FibGUtbGliZGwiIEVYVFJBX0NG TEFHUz0iLVdlcnJvciAtV25vLWFycmF5LWJvdW5kcyIKKyAgICAtIG9zOiBsaW51eAorICAgICAg YXJjaDogYW1kNjQKKyAgICAgIGVudjogQ0M9Z2NjIENYWD1nKysgQ09ORklHVVJFX0ZMQUdTPSIt LWRpc2FibGUtc3RhdHMgLS1lbmFibGUtb3B0LXNhZmV0eS1jaGVja3MiIEVYVFJBX0NGTEFHUz0i LVdlcnJvciAtV25vLWFycmF5LWJvdW5kcyIKKyAgICAtIG9zOiBsaW51eAorICAgICAgYXJjaDog YW1kNjQKKyAgICAgIGVudjogQ0M9Z2NjIENYWD1nKysgQ09ORklHVVJFX0ZMQUdTPSItLWRpc2Fi bGUtc3RhdHMgLS13aXRoLWxnLXBhZ2U9MTYiIEVYVFJBX0NGTEFHUz0iLVdlcnJvciAtV25vLWFy cmF5LWJvdW5kcyIKKyAgICAtIG9zOiBsaW51eAorICAgICAgYXJjaDogYW1kNjQKKyAgICAgIGVu djogQ0M9Z2NjIENYWD1nKysgQ09ORklHVVJFX0ZMQUdTPSItLWRpc2FibGUtc3RhdHMgLS13aXRo LW1hbGxvYy1jb25mPXRjYWNoZTpmYWxzZSIgRVhUUkFfQ0ZMQUdTPSItV2Vycm9yIC1Xbm8tYXJy YXktYm91bmRzIgorICAgIC0gb3M6IGxpbnV4CisgICAgICBhcmNoOiBhbWQ2NAorICAgICAgZW52 OiBDQz1nY2MgQ1hYPWcrKyBDT05GSUdVUkVfRkxBR1M9Ii0tZGlzYWJsZS1zdGF0cyAtLXdpdGgt bWFsbG9jLWNvbmY9ZHNzOnByaW1hcnkiIEVYVFJBX0NGTEFHUz0iLVdlcnJvciAtV25vLWFycmF5 LWJvdW5kcyIKKyAgICAtIG9zOiBsaW51eAorICAgICAgYXJjaDogYW1kNjQKKyAgICAgIGVudjog Q0M9Z2NjIENYWD1nKysgQ09ORklHVVJFX0ZMQUdTPSItLWRpc2FibGUtc3RhdHMgLS13aXRoLW1h bGxvYy1jb25mPXBlcmNwdV9hcmVuYTpwZXJjcHUiIEVYVFJBX0NGTEFHUz0iLVdlcnJvciAtV25v LWFycmF5LWJvdW5kcyIKKyAgICAtIG9zOiBsaW51eAorICAgICAgYXJjaDogYW1kNjQKKyAgICAg IGVudjogQ0M9Z2NjIENYWD1nKysgQ09ORklHVVJFX0ZMQUdTPSItLWRpc2FibGUtc3RhdHMgLS13 aXRoLW1hbGxvYy1jb25mPWJhY2tncm91bmRfdGhyZWFkOnRydWUiIEVYVFJBX0NGTEFHUz0iLVdl cnJvciAtV25vLWFycmF5LWJvdW5kcyIKKyAgICAtIG9zOiBsaW51eAorICAgICAgYXJjaDogYW1k NjQKKyAgICAgIGVudjogQ0M9Z2NjIENYWD1nKysgQ09ORklHVVJFX0ZMQUdTPSItLWRpc2FibGUt bGliZGwgLS1lbmFibGUtb3B0LXNhZmV0eS1jaGVja3MiIEVYVFJBX0NGTEFHUz0iLVdlcnJvciAt V25vLWFycmF5LWJvdW5kcyIKKyAgICAtIG9zOiBsaW51eAorICAgICAgYXJjaDogYW1kNjQKKyAg ICAgIGVudjogQ0M9Z2NjIENYWD1nKysgQ09ORklHVVJFX0ZMQUdTPSItLWRpc2FibGUtbGliZGwg LS13aXRoLWxnLXBhZ2U9MTYiIEVYVFJBX0NGTEFHUz0iLVdlcnJvciAtV25vLWFycmF5LWJvdW5k cyIKKyAgICAtIG9zOiBsaW51eAorICAgICAgYXJjaDogYW1kNjQKKyAgICAgIGVudjogQ0M9Z2Nj IENYWD1nKysgQ09ORklHVVJFX0ZMQUdTPSItLWRpc2FibGUtbGliZGwgLS13aXRoLW1hbGxvYy1j b25mPXRjYWNoZTpmYWxzZSIgRVhUUkFfQ0ZMQUdTPSItV2Vycm9yIC1Xbm8tYXJyYXktYm91bmRz IgorICAgIC0gb3M6IGxpbnV4CisgICAgICBhcmNoOiBhbWQ2NAorICAgICAgZW52OiBDQz1nY2Mg Q1hYPWcrKyBDT05GSUdVUkVfRkxBR1M9Ii0tZGlzYWJsZS1saWJkbCAtLXdpdGgtbWFsbG9jLWNv bmY9ZHNzOnByaW1hcnkiIEVYVFJBX0NGTEFHUz0iLVdlcnJvciAtV25vLWFycmF5LWJvdW5kcyIK KyAgICAtIG9zOiBsaW51eAorICAgICAgYXJjaDogYW1kNjQKKyAgICAgIGVudjogQ0M9Z2NjIENY WD1nKysgQ09ORklHVVJFX0ZMQUdTPSItLWRpc2FibGUtbGliZGwgLS13aXRoLW1hbGxvYy1jb25m PXBlcmNwdV9hcmVuYTpwZXJjcHUiIEVYVFJBX0NGTEFHUz0iLVdlcnJvciAtV25vLWFycmF5LWJv dW5kcyIKKyAgICAtIG9zOiBsaW51eAorICAgICAgYXJjaDogYW1kNjQKKyAgICAgIGVudjogQ0M9 Z2NjIENYWD1nKysgQ09ORklHVVJFX0ZMQUdTPSItLWRpc2FibGUtbGliZGwgLS13aXRoLW1hbGxv Yy1jb25mPWJhY2tncm91bmRfdGhyZWFkOnRydWUiIEVYVFJBX0NGTEFHUz0iLVdlcnJvciAtV25v LWFycmF5LWJvdW5kcyIKKyAgICAtIG9zOiBsaW51eAorICAgICAgYXJjaDogYW1kNjQKKyAgICAg IGVudjogQ0M9Z2NjIENYWD1nKysgQ09ORklHVVJFX0ZMQUdTPSItLWVuYWJsZS1vcHQtc2FmZXR5 LWNoZWNrcyAtLXdpdGgtbGctcGFnZT0xNiIgRVhUUkFfQ0ZMQUdTPSItV2Vycm9yIC1Xbm8tYXJy YXktYm91bmRzIgorICAgIC0gb3M6IGxpbnV4CisgICAgICBhcmNoOiBhbWQ2NAorICAgICAgZW52 OiBDQz1nY2MgQ1hYPWcrKyBDT05GSUdVUkVfRkxBR1M9Ii0tZW5hYmxlLW9wdC1zYWZldHktY2hl Y2tzIC0td2l0aC1tYWxsb2MtY29uZj10Y2FjaGU6ZmFsc2UiIEVYVFJBX0NGTEFHUz0iLVdlcnJv ciAtV25vLWFycmF5LWJvdW5kcyIKKyAgICAtIG9zOiBsaW51eAorICAgICAgYXJjaDogYW1kNjQK KyAgICAgIGVudjogQ0M9Z2NjIENYWD1nKysgQ09ORklHVVJFX0ZMQUdTPSItLWVuYWJsZS1vcHQt c2FmZXR5LWNoZWNrcyAtLXdpdGgtbWFsbG9jLWNvbmY9ZHNzOnByaW1hcnkiIEVYVFJBX0NGTEFH Uz0iLVdlcnJvciAtV25vLWFycmF5LWJvdW5kcyIKKyAgICAtIG9zOiBsaW51eAorICAgICAgYXJj aDogYW1kNjQKKyAgICAgIGVudjogQ0M9Z2NjIENYWD1nKysgQ09ORklHVVJFX0ZMQUdTPSItLWVu YWJsZS1vcHQtc2FmZXR5LWNoZWNrcyAtLXdpdGgtbWFsbG9jLWNvbmY9cGVyY3B1X2FyZW5hOnBl cmNwdSIgRVhUUkFfQ0ZMQUdTPSItV2Vycm9yIC1Xbm8tYXJyYXktYm91bmRzIgorICAgIC0gb3M6 IGxpbnV4CisgICAgICBhcmNoOiBhbWQ2NAorICAgICAgZW52OiBDQz1nY2MgQ1hYPWcrKyBDT05G SUdVUkVfRkxBR1M9Ii0tZW5hYmxlLW9wdC1zYWZldHktY2hlY2tzIC0td2l0aC1tYWxsb2MtY29u Zj1iYWNrZ3JvdW5kX3RocmVhZDp0cnVlIiBFWFRSQV9DRkxBR1M9Ii1XZXJyb3IgLVduby1hcnJh eS1ib3VuZHMiCisgICAgLSBvczogbGludXgKKyAgICAgIGFyY2g6IGFtZDY0CisgICAgICBlbnY6 IENDPWdjYyBDWFg9ZysrIENPTkZJR1VSRV9GTEFHUz0iLS13aXRoLWxnLXBhZ2U9MTYgLS13aXRo LW1hbGxvYy1jb25mPXRjYWNoZTpmYWxzZSIgRVhUUkFfQ0ZMQUdTPSItV2Vycm9yIC1Xbm8tYXJy YXktYm91bmRzIgorICAgIC0gb3M6IGxpbnV4CisgICAgICBhcmNoOiBhbWQ2NAorICAgICAgZW52 OiBDQz1nY2MgQ1hYPWcrKyBDT05GSUdVUkVfRkxBR1M9Ii0td2l0aC1sZy1wYWdlPTE2IC0td2l0 aC1tYWxsb2MtY29uZj1kc3M6cHJpbWFyeSIgRVhUUkFfQ0ZMQUdTPSItV2Vycm9yIC1Xbm8tYXJy YXktYm91bmRzIgorICAgIC0gb3M6IGxpbnV4CisgICAgICBhcmNoOiBhbWQ2NAorICAgICAgZW52 OiBDQz1nY2MgQ1hYPWcrKyBDT05GSUdVUkVfRkxBR1M9Ii0td2l0aC1sZy1wYWdlPTE2IC0td2l0 aC1tYWxsb2MtY29uZj1wZXJjcHVfYXJlbmE6cGVyY3B1IiBFWFRSQV9DRkxBR1M9Ii1XZXJyb3Ig LVduby1hcnJheS1ib3VuZHMiCisgICAgLSBvczogbGludXgKKyAgICAgIGFyY2g6IGFtZDY0Cisg ICAgICBlbnY6IENDPWdjYyBDWFg9ZysrIENPTkZJR1VSRV9GTEFHUz0iLS13aXRoLWxnLXBhZ2U9 MTYgLS13aXRoLW1hbGxvYy1jb25mPWJhY2tncm91bmRfdGhyZWFkOnRydWUiIEVYVFJBX0NGTEFH Uz0iLVdlcnJvciAtV25vLWFycmF5LWJvdW5kcyIKKyAgICAtIG9zOiBsaW51eAorICAgICAgYXJj aDogYW1kNjQKKyAgICAgIGVudjogQ0M9Z2NjIENYWD1nKysgQ09ORklHVVJFX0ZMQUdTPSItLXdp dGgtbWFsbG9jLWNvbmY9dGNhY2hlOmZhbHNlLGRzczpwcmltYXJ5IiBFWFRSQV9DRkxBR1M9Ii1X ZXJyb3IgLVduby1hcnJheS1ib3VuZHMiCisgICAgLSBvczogbGludXgKKyAgICAgIGFyY2g6IGFt ZDY0CisgICAgICBlbnY6IENDPWdjYyBDWFg9ZysrIENPTkZJR1VSRV9GTEFHUz0iLS13aXRoLW1h bGxvYy1jb25mPXRjYWNoZTpmYWxzZSxwZXJjcHVfYXJlbmE6cGVyY3B1IiBFWFRSQV9DRkxBR1M9 Ii1XZXJyb3IgLVduby1hcnJheS1ib3VuZHMiCisgICAgLSBvczogbGludXgKKyAgICAgIGFyY2g6 IGFtZDY0CisgICAgICBlbnY6IENDPWdjYyBDWFg9ZysrIENPTkZJR1VSRV9GTEFHUz0iLS13aXRo LW1hbGxvYy1jb25mPXRjYWNoZTpmYWxzZSxiYWNrZ3JvdW5kX3RocmVhZDp0cnVlIiBFWFRSQV9D RkxBR1M9Ii1XZXJyb3IgLVduby1hcnJheS1ib3VuZHMiCisgICAgLSBvczogbGludXgKKyAgICAg IGFyY2g6IGFtZDY0CisgICAgICBlbnY6IENDPWdjYyBDWFg9ZysrIENPTkZJR1VSRV9GTEFHUz0i LS13aXRoLW1hbGxvYy1jb25mPWRzczpwcmltYXJ5LHBlcmNwdV9hcmVuYTpwZXJjcHUiIEVYVFJB X0NGTEFHUz0iLVdlcnJvciAtV25vLWFycmF5LWJvdW5kcyIKKyAgICAtIG9zOiBsaW51eAorICAg ICAgYXJjaDogYW1kNjQKKyAgICAgIGVudjogQ0M9Z2NjIENYWD1nKysgQ09ORklHVVJFX0ZMQUdT PSItLXdpdGgtbWFsbG9jLWNvbmY9ZHNzOnByaW1hcnksYmFja2dyb3VuZF90aHJlYWQ6dHJ1ZSIg RVhUUkFfQ0ZMQUdTPSItV2Vycm9yIC1Xbm8tYXJyYXktYm91bmRzIgorICAgIC0gb3M6IGxpbnV4 CisgICAgICBhcmNoOiBhbWQ2NAorICAgICAgZW52OiBDQz1nY2MgQ1hYPWcrKyBDT05GSUdVUkVf RkxBR1M9Ii0td2l0aC1tYWxsb2MtY29uZj1wZXJjcHVfYXJlbmE6cGVyY3B1LGJhY2tncm91bmRf dGhyZWFkOnRydWUiIEVYVFJBX0NGTEFHUz0iLVdlcnJvciAtV25vLWFycmF5LWJvdW5kcyIKKyAg ICAtIG9zOiBsaW51eAorICAgICAgYXJjaDogcHBjNjRsZQorICAgICAgZW52OiBDQz1nY2MgQ1hY PWcrKyBFWFRSQV9DRkxBR1M9Ii1XZXJyb3IgLVduby1hcnJheS1ib3VuZHMiCisgICAgLSBvczog bGludXgKKyAgICAgIGFyY2g6IHBwYzY0bGUKKyAgICAgIGVudjogQ0M9Z2NjIENYWD1nKysgQ09O RklHVVJFX0ZMQUdTPSItLWVuYWJsZS1kZWJ1ZyIgRVhUUkFfQ0ZMQUdTPSItV2Vycm9yIC1Xbm8t YXJyYXktYm91bmRzIgorICAgIC0gb3M6IGxpbnV4CisgICAgICBhcmNoOiBwcGM2NGxlCisgICAg ICBlbnY6IENDPWdjYyBDWFg9ZysrIENPTkZJR1VSRV9GTEFHUz0iLS1lbmFibGUtcHJvZiIgRVhU UkFfQ0ZMQUdTPSItV2Vycm9yIC1Xbm8tYXJyYXktYm91bmRzIgorICAgIC0gb3M6IGxpbnV4Cisg ICAgICBhcmNoOiBwcGM2NGxlCisgICAgICBlbnY6IENDPWdjYyBDWFg9ZysrIENPTkZJR1VSRV9G TEFHUz0iLS1kaXNhYmxlLXN0YXRzIiBFWFRSQV9DRkxBR1M9Ii1XZXJyb3IgLVduby1hcnJheS1i b3VuZHMiCisgICAgLSBvczogbGludXgKKyAgICAgIGFyY2g6IHBwYzY0bGUKKyAgICAgIGVudjog Q0M9Z2NjIENYWD1nKysgQ09ORklHVVJFX0ZMQUdTPSItLWRpc2FibGUtbGliZGwiIEVYVFJBX0NG TEFHUz0iLVdlcnJvciAtV25vLWFycmF5LWJvdW5kcyIKKyAgICAtIG9zOiBsaW51eAorICAgICAg YXJjaDogcHBjNjRsZQorICAgICAgZW52OiBDQz1nY2MgQ1hYPWcrKyBDT05GSUdVUkVfRkxBR1M9 Ii0tZW5hYmxlLW9wdC1zYWZldHktY2hlY2tzIiBFWFRSQV9DRkxBR1M9Ii1XZXJyb3IgLVduby1h cnJheS1ib3VuZHMiCisgICAgLSBvczogbGludXgKKyAgICAgIGFyY2g6IHBwYzY0bGUKKyAgICAg IGVudjogQ0M9Z2NjIENYWD1nKysgQ09ORklHVVJFX0ZMQUdTPSItLXdpdGgtbGctcGFnZT0xNiIg RVhUUkFfQ0ZMQUdTPSItV2Vycm9yIC1Xbm8tYXJyYXktYm91bmRzIgorICAgIC0gb3M6IGxpbnV4 CisgICAgICBhcmNoOiBwcGM2NGxlCisgICAgICBlbnY6IENDPWdjYyBDWFg9ZysrIENPTkZJR1VS RV9GTEFHUz0iLS13aXRoLW1hbGxvYy1jb25mPXRjYWNoZTpmYWxzZSIgRVhUUkFfQ0ZMQUdTPSIt V2Vycm9yIC1Xbm8tYXJyYXktYm91bmRzIgorICAgIC0gb3M6IGxpbnV4CisgICAgICBhcmNoOiBw cGM2NGxlCisgICAgICBlbnY6IENDPWdjYyBDWFg9ZysrIENPTkZJR1VSRV9GTEFHUz0iLS13aXRo LW1hbGxvYy1jb25mPWRzczpwcmltYXJ5IiBFWFRSQV9DRkxBR1M9Ii1XZXJyb3IgLVduby1hcnJh eS1ib3VuZHMiCisgICAgLSBvczogbGludXgKKyAgICAgIGFyY2g6IHBwYzY0bGUKKyAgICAgIGVu djogQ0M9Z2NjIENYWD1nKysgQ09ORklHVVJFX0ZMQUdTPSItLXdpdGgtbWFsbG9jLWNvbmY9cGVy Y3B1X2FyZW5hOnBlcmNwdSIgRVhUUkFfQ0ZMQUdTPSItV2Vycm9yIC1Xbm8tYXJyYXktYm91bmRz IgorICAgIC0gb3M6IGxpbnV4CisgICAgICBhcmNoOiBwcGM2NGxlCisgICAgICBlbnY6IENDPWdj YyBDWFg9ZysrIENPTkZJR1VSRV9GTEFHUz0iLS13aXRoLW1hbGxvYy1jb25mPWJhY2tncm91bmRf dGhyZWFkOnRydWUiIEVYVFJBX0NGTEFHUz0iLVdlcnJvciAtV25vLWFycmF5LWJvdW5kcyIKKyAg ICAtIG9zOiBvc3gKKyAgICAgIGFyY2g6IGFtZDY0CisgICAgICBlbnY6IENDPWdjYyBDWFg9Zysr IEVYVFJBX0NGTEFHUz0iLVdlcnJvciAtV25vLWFycmF5LWJvdW5kcyAtV25vLXVua25vd24td2Fy bmluZy1vcHRpb24gLVduby1pZ25vcmVkLWF0dHJpYnV0ZXMgLVduby1kZXByZWNhdGVkLWRlY2xh cmF0aW9ucyIKKyAgICAtIG9zOiBvc3gKKyAgICAgIGFyY2g6IGFtZDY0CisgICAgICBlbnY6IEND PWdjYyBDWFg9ZysrIENST1NTX0NPTVBJTEVfMzJCSVQ9eWVzIEVYVFJBX0NGTEFHUz0iLVdlcnJv ciAtV25vLWFycmF5LWJvdW5kcyAtV25vLXVua25vd24td2FybmluZy1vcHRpb24gLVduby1pZ25v cmVkLWF0dHJpYnV0ZXMgLVduby1kZXByZWNhdGVkLWRlY2xhcmF0aW9ucyIKKyAgICAtIG9zOiBv c3gKKyAgICAgIGFyY2g6IGFtZDY0CisgICAgICBlbnY6IENDPWdjYyBDWFg9ZysrIENPTkZJR1VS RV9GTEFHUz0iLS1lbmFibGUtZGVidWciIEVYVFJBX0NGTEFHUz0iLVdlcnJvciAtV25vLWFycmF5 LWJvdW5kcyAtV25vLXVua25vd24td2FybmluZy1vcHRpb24gLVduby1pZ25vcmVkLWF0dHJpYnV0 ZXMgLVduby1kZXByZWNhdGVkLWRlY2xhcmF0aW9ucyIKKyAgICAtIG9zOiBvc3gKKyAgICAgIGFy Y2g6IGFtZDY0CisgICAgICBlbnY6IENDPWdjYyBDWFg9ZysrIENPTkZJR1VSRV9GTEFHUz0iLS1k aXNhYmxlLXN0YXRzIiBFWFRSQV9DRkxBR1M9Ii1XZXJyb3IgLVduby1hcnJheS1ib3VuZHMgLVdu by11bmtub3duLXdhcm5pbmctb3B0aW9uIC1Xbm8taWdub3JlZC1hdHRyaWJ1dGVzIC1Xbm8tZGVw cmVjYXRlZC1kZWNsYXJhdGlvbnMiCisgICAgLSBvczogb3N4CisgICAgICBhcmNoOiBhbWQ2NAor ICAgICAgZW52OiBDQz1nY2MgQ1hYPWcrKyBDT05GSUdVUkVfRkxBR1M9Ii0tZGlzYWJsZS1saWJk bCIgRVhUUkFfQ0ZMQUdTPSItV2Vycm9yIC1Xbm8tYXJyYXktYm91bmRzIC1Xbm8tdW5rbm93bi13 YXJuaW5nLW9wdGlvbiAtV25vLWlnbm9yZWQtYXR0cmlidXRlcyAtV25vLWRlcHJlY2F0ZWQtZGVj bGFyYXRpb25zIgorICAgIC0gb3M6IG9zeAorICAgICAgYXJjaDogYW1kNjQKKyAgICAgIGVudjog Q0M9Z2NjIENYWD1nKysgQ09ORklHVVJFX0ZMQUdTPSItLWVuYWJsZS1vcHQtc2FmZXR5LWNoZWNr cyIgRVhUUkFfQ0ZMQUdTPSItV2Vycm9yIC1Xbm8tYXJyYXktYm91bmRzIC1Xbm8tdW5rbm93bi13 YXJuaW5nLW9wdGlvbiAtV25vLWlnbm9yZWQtYXR0cmlidXRlcyAtV25vLWRlcHJlY2F0ZWQtZGVj bGFyYXRpb25zIgorICAgIC0gb3M6IG9zeAorICAgICAgYXJjaDogYW1kNjQKKyAgICAgIGVudjog Q0M9Z2NjIENYWD1nKysgQ09ORklHVVJFX0ZMQUdTPSItLXdpdGgtbGctcGFnZT0xNiIgRVhUUkFf Q0ZMQUdTPSItV2Vycm9yIC1Xbm8tYXJyYXktYm91bmRzIC1Xbm8tdW5rbm93bi13YXJuaW5nLW9w dGlvbiAtV25vLWlnbm9yZWQtYXR0cmlidXRlcyAtV25vLWRlcHJlY2F0ZWQtZGVjbGFyYXRpb25z IgorICAgIC0gb3M6IG9zeAorICAgICAgYXJjaDogYW1kNjQKKyAgICAgIGVudjogQ0M9Z2NjIENY WD1nKysgQ09ORklHVVJFX0ZMQUdTPSItLXdpdGgtbWFsbG9jLWNvbmY9dGNhY2hlOmZhbHNlIiBF WFRSQV9DRkxBR1M9Ii1XZXJyb3IgLVduby1hcnJheS1ib3VuZHMgLVduby11bmtub3duLXdhcm5p bmctb3B0aW9uIC1Xbm8taWdub3JlZC1hdHRyaWJ1dGVzIC1Xbm8tZGVwcmVjYXRlZC1kZWNsYXJh dGlvbnMiCisgICAgIyBEZXZlbG9wbWVudCBidWlsZAorICAgIC0gb3M6IGxpbnV4CisgICAgICBl bnY6IENDPWdjYyBDWFg9ZysrIENPTkZJR1VSRV9GTEFHUz0iLS1lbmFibGUtZGVidWcgLS1kaXNh YmxlLWNhY2hlLW9ibGl2aW91cyAtLWVuYWJsZS1zdGF0cyAtLWVuYWJsZS1sb2cgLS1lbmFibGUt cHJvZiIgRVhUUkFfQ0ZMQUdTPSItV2Vycm9yIC1Xbm8tYXJyYXktYm91bmRzIgorICAgICMgLS1l bmFibGUtZXhwZXJtZW50YWwtc21hbGxvY3g6CisgICAgLSBvczogbGludXgKKyAgICAgIGVudjog Q0M9Z2NjIENYWD1nKysgQ09ORklHVVJFX0ZMQUdTPSItLWVuYWJsZS1kZWJ1ZyAtLWVuYWJsZS1l eHBlcmltZW50YWwtc21hbGxvY3ggLS1lbmFibGUtc3RhdHMgLS1lbmFibGUtcHJvZiIgRVhUUkFf Q0ZMQUdTPSItV2Vycm9yIC1Xbm8tYXJyYXktYm91bmRzIgorCisKK2JlZm9yZV9pbnN0YWxsOgor ICAtIHwtCisgICAgaWYgdGVzdCAtZiAiLi9zY3JpcHRzLyRUUkFWSVNfT1NfTkFNRS9iZWZvcmVf aW5zdGFsbC5zaCI7IHRoZW4KKyAgICAgIHNvdXJjZSAuL3NjcmlwdHMvJFRSQVZJU19PU19OQU1F L2JlZm9yZV9pbnN0YWxsLnNoCisgICAgZmkKKworYmVmb3JlX3NjcmlwdDoKKyAgLSB8LQorICAg IGlmIHRlc3QgLWYgIi4vc2NyaXB0cy8kVFJBVklTX09TX05BTUUvYmVmb3JlX3NjcmlwdC5zaCI7 IHRoZW4KKyAgICAgIHNvdXJjZSAuL3NjcmlwdHMvJFRSQVZJU19PU19OQU1FL2JlZm9yZV9zY3Jp cHQuc2gKKyAgICBlbHNlCisgICAgICBzY3JpcHRzL2dlbl90cmF2aXMucHkgPiB0cmF2aXNfc2Ny aXB0ICYmIGRpZmYgLnRyYXZpcy55bWwgdHJhdmlzX3NjcmlwdAorICAgICAgYXV0b2NvbmYKKyAg ICAgICMgSWYgQ09NUElMRVJfRkxBR1MgYXJlIG5vdCBlbXB0eSwgYWRkIHRoZW0gdG8gQ0MgYW5k IENYWAorICAgICAgLi9jb25maWd1cmUgJHtDT01QSUxFUl9GTEFHUzorIENDPSIkQ0MgJENPTVBJ TEVSX0ZMQUdTIiBDWFg9IiRDWFggJENPTVBJTEVSX0ZMQUdTIn0gJENPTkZJR1VSRV9GTEFHUwor ICAgICAgbWFrZSAtajMKKyAgICAgIG1ha2UgLWozIHRlc3RzCisgICAgZmkKKworc2NyaXB0Ogor ICAtIHwtCisgICAgaWYgdGVzdCAtZiAiLi9zY3JpcHRzLyRUUkFWSVNfT1NfTkFNRS9zY3JpcHQu c2giOyB0aGVuCisgICAgICBzb3VyY2UgLi9zY3JpcHRzLyRUUkFWSVNfT1NfTkFNRS9zY3JpcHQu c2gKKyAgICBlbHNlCisgICAgICBtYWtlIGNoZWNrCisgICAgZmkKKwoKZGlmZiAtLWdpdCBhLzM4 OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL0NPUFlJTkcgYi8zODktZHMtYmFz ZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9DT1BZSU5HCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAuLjNiN2ZkMzUKLS0tIC9kZXYvbnVsbAorKysgYi8zODktZHMtYmFzZS0z LjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9DT1BZSU5HCkBAIC0wLDAgKzEsMjcgQEAKK1VubGVz cyBvdGhlcndpc2Ugc3BlY2lmaWVkLCBmaWxlcyBpbiB0aGUgamVtYWxsb2Mgc291cmNlIGRpc3Ry aWJ1dGlvbiBhcmUKK3N1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBsaWNlbnNlOgorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KK0NvcHlyaWdodCAoQykgMjAwMi1wcmVzZW50IEphc29uIEV2YW5zIDxq YXNvbmVAY2Fub253YXJlLmNvbT4uCitBbGwgcmlnaHRzIHJlc2VydmVkLgorQ29weXJpZ2h0IChD KSAyMDA3LTIwMTIgTW96aWxsYSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KK0Nv cHlyaWdodCAoQykgMjAwOS1wcmVzZW50IEZhY2Vib29rLCBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy dmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z LCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0 aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorMS4gUmVkaXN0cmlidXRpb25z IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlKHMp LAorICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l ci4KKzIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg YWJvdmUgY29weXJpZ2h0IG5vdGljZShzKSwKKyAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAgIGFuZC9v ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCitUSElT IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIGBgQVMgSVMn JyBBTkQgQU5ZIEVYUFJFU1MKK09SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKK01FUkNIQU5UQUJJTElU WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ TiBOTworRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIoUykgQkUgTElBQkxFIEZPUiBB TlkgRElSRUNULCBJTkRJUkVDVCwKK0lOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKK0xJTUlURUQgVE8sIFBS T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE QVRBLCBPUgorUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF RCBBTkQgT04gQU5ZIFRIRU9SWSBPRgorTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRQorT1IgT1RIRVJX SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg RVZFTiBJRgorQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxk L2plbWFsbG9jLTUuMy4wL0NoYW5nZUxvZyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFs bG9jLTUuMy4wL0NoYW5nZUxvZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4z MmZkZTU2Ci0tLSAvZGV2L251bGwKKysrIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxs b2MtNS4zLjAvQ2hhbmdlTG9nCkBAIC0wLDAgKzEsMTYxOCBAQAorRm9sbG93aW5nIGFyZSBjaGFu Z2UgaGlnaGxpZ2h0cyBhc3NvY2lhdGVkIHdpdGggb2ZmaWNpYWwgcmVsZWFzZXMuICBJbXBvcnRh bnQKK2J1ZyBmaXhlcyBhcmUgYWxsIG1lbnRpb25lZCwgYnV0IHNvbWUgaW50ZXJuYWwgZW5oYW5j ZW1lbnRzIGFyZSBvbWl0dGVkIGhlcmUgZm9yCiticmV2aXR5LiAgTXVjaCBtb3JlIGRldGFpbCBj YW4gYmUgZm91bmQgaW4gdGhlIGdpdCByZXZpc2lvbiBoaXN0b3J5OgorCisgICAgaHR0cHM6Ly9n aXRodWIuY29tL2plbWFsbG9jL2plbWFsbG9jCisKKyogNS4zLjAgKE1heSA2LCAyMDIyKQorCisg IFRoaXMgcmVsZWFzZSBjb250YWlucyBtYW55IHNwZWVkIGFuZCBzcGFjZSBvcHRpbWl6YXRpb25z LCBmcm9tIG1pY3JvCisgIG9wdGltaXphdGlvbnMgb24gY29tbW9uIHBhdGhzIHRvIHJld29yayBv ZiBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMgYW5kCisgIGxvY2tpbmcgc2NoZW1lcywgYW5kIG1h bnkgbW9yZSB0b28gZGV0YWlsZWQgdG8gbGlzdCBiZWxvdy4gIE11bHRpcGxlIHBlcmNlbnQKKyAg b2Ygc3lzdGVtIGxldmVsIG1ldHJpYyBpbXByb3ZlbWVudHMgd2VyZSBtZWFzdXJlZCBpbiB0ZXN0 ZWQgcHJvZHVjdGlvbgorICB3b3JrbG9hZHMuICBUaGUgcmVsZWFzZSBoYXMgZ29uZSB0aHJvdWdo IGxhcmdlLXNjYWxlIHByb2R1Y3Rpb24gdGVzdGluZy4KKworICBOZXcgZmVhdHVyZXM6CisgIC0g QWRkIHRoZSB0aHJlYWQuaWRsZSBtYWxsY3RsIHdoaWNoIGhpbnRzIHRoYXQgdGhlIGNhbGxpbmcg dGhyZWFkIHdpbGwgYmUKKyAgICBpZGxlIGZvciBhIG5vbnRyaXZpYWwgcGVyaW9kIG9mIHRpbWUu ICAoQGRhdmlkdGdvbGRibGF0dCkKKyAgLSBBbGxvdyBzbWFsbCBzaXplIGNsYXNzZXMgdG8gYmUg dGhlIG1heGltdW0gc2l6ZSBjbGFzcyB0byBjYWNoZSBpbiB0aGUKKyAgICB0aHJlYWQtc3BlY2lm aWMgY2FjaGUsIHRocm91Z2ggdGhlIG9wdC5bbGdfXXRjYWNoZV9tYXggb3B0aW9uLiAgKEBpbnRl cndxLAorICAgIEBqb3JkYWxnbykKKyAgLSBNYWtlIHRoZSBiZWhhdmlvciBvZiByZWFsbG9jKHB0 ciwgMCkgY29uZmlndXJhYmxlIHdpdGggb3B0Lnplcm9fcmVhbGxvYy4KKyAgICAoQGRhdmlkdGdv bGRibGF0dCkKKyAgLSBBZGQgJ21ha2UgdW5pbnN0YWxsJyBzdXBwb3J0LiAgKEBzYW5nc2h1ZHVv LCBATGFwZW5rb3YpCisgIC0gU3VwcG9ydCBDKysxNyBvdmVyLWFsaWduZWQgYWxsb2NhdGlvbi4g IChAbWFya3NhbnRhbmllbGxvKQorICAtIEFkZCB0aGUgdGhyZWFkLnBlYWsgbWFsbGN0bCBmb3Ig YXBwcm94aW1hdGUgcGVyLXRocmVhZCBwZWFrIG1lbW9yeSB0cmFja2luZy4KKyAgICAoQGRhdmlk dGdvbGRibGF0dCkKKyAgLSBBZGQgaW50ZXJ2YWwtYmFzZWQgc3RhdHMgb3V0cHV0IG9wdC5zdGF0 c19pbnRlcnZhbC4gIChAaW50ZXJ3cSkKKyAgLSBBZGQgcHJvZi5wcmVmaXggdG8gb3ZlcnJpZGUg ZmlsZW5hbWUgcHJlZml4ZXMgZm9yIGR1bXBzLiAgKEB6aHhjaGVuMTcpCisgIC0gQWRkIGhpZ2gg cmVzb2x1dGlvbiB0aW1lc3RhbXAgc3VwcG9ydCBmb3IgcHJvZmlsaW5nLiAgKEB0eXJvZ3VydSkK KyAgLSBBZGQgdGhlIC0tY29sbGFwc2VkIGZsYWcgdG8gamVwcm9mIGZvciBmbGFtZWdyYXBoIGdl bmVyYXRpb24uCisgICAgKEBpZ29yd3d3d3d3d3d3d3d3d3d3d3d3d3cpCisgIC0gQWRkIHRoZSAt LWRlYnVnLXN5bXMtYnktaWQgb3B0aW9uIHRvIGplcHJvZiBmb3IgZGVidWcgc3ltYm9scyBkaXNj b3ZlcnkuCisgICAgKEBEZWFubmFHZWxiYXJ0KQorICAtIEFkZCB0aGUgb3B0LnByb2ZfbGVha19l cnJvciBvcHRpb24gdG8gZXhpdCB3aXRoIGVycm9yIGNvZGUgd2hlbiBsZWFrIGlzCisgICAgZGV0 ZWN0ZWQgdXNpbmcgb3B0LnByb2ZfZmluYWwuICAoQHl1bnh1bykKKyAgLSBBZGQgb3B0LmNhY2hl X29ibGl2aW91cyBhcyBhbiBydW50aW1lIGFsdGVybmF0aXZlIHRvIGNvbmZpZy5jYWNoZV9vYmxp dmlvdXMuCisgICAgKEBpbnRlcndxKQorICAtIEFkZCBtYWxsY3RsIGludGVyZmFjZXM6CisgICAg KyBvcHQuemVyb19yZWFsbG9jICAoQGRhdmlkdGdvbGRibGF0dCkKKyAgICArIG9wdC5jYWNoZV9v YmxpdmlvdXMgIChAaW50ZXJ3cSkKKyAgICArIG9wdC5wcm9mX2xlYWtfZXJyb3IgIChAeXVueHVv KQorICAgICsgb3B0LnN0YXRzX2ludGVydmFsICAoQGludGVyd3EpCisgICAgKyBvcHQuc3RhdHNf aW50ZXJ2YWxfb3B0cyAgKEBpbnRlcndxKQorICAgICsgb3B0LnRjYWNoZV9tYXggIChAaW50ZXJ3 cSkKKyAgICArIG9wdC50cnVzdF9tYWR2aXNlICAoQGF6YXQpCisgICAgKyBwcm9mLnByZWZpeCAg KEB6aHhjaGVuMTcpCisgICAgKyBzdGF0cy56ZXJvX3JlYWxsb2NzICAoQGRhdmlkdGdvbGRibGF0 dCkKKyAgICArIHRocmVhZC5pZGxlICAoQGRhdmlkdGdvbGRibGF0dCkKKyAgICArIHRocmVhZC5w ZWFrLntyZWFkLHJlc2V0fSAgKEBkYXZpZHRnb2xkYmxhdHQpCisKKyAgQnVnIGZpeGVzOgorICAt IEZpeCB0aGUgc3luY2hyb25pemF0aW9uIGFyb3VuZCBleHBsaWNpdCB0Y2FjaGUgY3JlYXRpb24g d2hpY2ggY291bGQgY2F1c2UKKyAgICBpbnZhbGlkIHRjYWNoZSBpZGVudGlmaWVycy4gIFRoaXMg cmVncmVzc2lvbiB3YXMgZmlyc3QgcmVsZWFzZWQgaW4gNS4wLjAuCisgICAgKEB5b3NoaW5vcmlt LCBAZGF2aWR0Z29sZGJsYXR0KQorICAtIEZpeCBhIHByb2ZpbGluZyBiaWFzaW5nIGlzc3VlIHdo aWNoIGNvdWxkIGNhdXNlIGluY29ycmVjdCBoZWFwIHVzYWdlIGFuZAorICAgIG9iamVjdCBjb3Vu dHMuICBUaGlzIGlzc3VlIGV4aXN0ZWQgaW4gYWxsIHByZXZpb3VzIHJlbGVhc2VzIHdpdGggdGhl IGhlYXAKKyAgICBwcm9maWxpbmcgZmVhdHVyZS4gIChAZGF2aWR0Z29sZGJsYXR0KQorICAtIEZp eCB0aGUgb3JkZXIgb2Ygc3RhdHMgY291bnRlciB1cGRhdGluZyBvbiBsYXJnZSByZWFsbG9jIHdo aWNoIGNvdWxkIGNhdXNlCisgICAgZmFpbGVkIGFzc2VydGlvbnMuICBUaGlzIHJlZ3Jlc3Npb24g d2FzIGZpcnN0IHJlbGVhc2VkIGluIDUuMC4wLiAgKEBhemF0KQorICAtIEZpeCB0aGUgbG9ja2lu ZyBvbiB0aGUgYXJlbmEgZGVzdHJveSBtYWxsY3RsLCB3aGljaCBjb3VsZCBjYXVzZSBjb25jdXJy ZW50CisgICAgYXJlbmEgY3JlYXRpb25zIHRvIGZhaWwuICBUaGlzIGZ1bmN0aW9uYWxpdHkgd2Fz IGZpcnN0IGludHJvZHVjZWQgaW4gNS4wLjAuCisgICAgKEBpbnRlcndxKQorCisgIFBvcnRhYmls aXR5IGltcHJvdmVtZW50czoKKyAgLSBSZW1vdmUgbm90aHJvdyBmcm9tIHN5c3RlbSBmdW5jdGlv biBkZWNsYXJhdGlvbnMgb24gbWFjT1MgYW5kIEZyZWVCU0QuCisgICAgKEBkYXZpZHRnb2xkYmxh dHQsIEBmcmVkZW1tb3R0LCBAbGVyZXMpCisgIC0gSW1wcm92ZSBvdmVyY29tbWl0IGFuZCBwYWdl IGFsaWdubWVudCBzZXR0aW5ncyBvbiBOZXRCU0QuICAoQHpvdWxhc2MpCisgIC0gSW1wcm92ZSBD UFUgYWZmaW5pdHkgc3VwcG9ydCBvbiBCU0QgcGxhdGZvcm1zLiAgKEBkZXZuZXhlbikKKyAgLSBJ bXByb3ZlIHV0cmFjZSBkZXRlY3Rpb24gYW5kIHN1cHBvcnQuICAoQGRldm5leGVuKQorICAtIElt cHJvdmUgUUVNVSBzdXBwb3J0IHdpdGggTUFEVl9ET05UTkVFRCB6ZXJvZWQgcGFnZXMgZGV0ZWN0 aW9uLiAgKEBhemF0KQorICAtIEFkZCBtZW1jbnRsIHN1cHBvcnQgb24gU29sYXJpcyAvIGlsbHVt b3MuICAoQGRldm5leGVuKQorICAtIEltcHJvdmUgQ1BVX1NQSU5XQUlUIG9uIEFSTS4gIChAQVdT anN3aW5uZXkpCisgIC0gSW1wcm92ZSBUU0QgY2xlYW51cCBvbiBGcmVlQlNELiAgKEBMYXBlbmtv dikKKyAgLSBEaXNhYmxlIHBlcmNwdV9hcmVuYSBpZiB0aGUgQ1BVIGNvdW50IGNhbm5vdCBiZSBy ZWxpYWJseSBkZXRlY3RlZC4gIChAYXphdCkKKyAgLSBBZGQgbWFsbG9jX3NpemUoMykgb3ZlcnJp ZGUgc3VwcG9ydC4gIChAZGV2bmV4ZW4pCisgIC0gQWRkIG1tYXAgVk1fTUFLRV9UQUcgc3VwcG9y dC4gIChAZGV2bmV4ZW4pCisgIC0gQWRkIHN1cHBvcnQgZm9yIE1BRFZfW05PXUNPUkUuICAoQGRl dm5leGVuKQorICAtIEFkZCBzdXBwb3J0IGZvciBEcmFnb25GbHlCU0QuICAoQGRldm5leGVuKQor ICAtIEZpeCB0aGUgUVVBTlRVTSBzZXR0aW5nIG9uIE1JUFM2NC4gIChAYnJvb2tzZGF2aXMpCisg IC0gQWRkIHRoZSBRVUFOVFVNIHNldHRpbmcgZm9yIEFSQy4gIChAdmluZWV0Z2FyYykKKyAgLSBB ZGQgdGhlIFFVQU5UVU0gc2V0dGluZyBmb3IgTG9vbmdBcmNoLiAgKEB3YW5namwtdW9zKQorICAt IEFkZCBRTlggc3VwcG9ydC4gIChAanFpYW4tYXVyb3JhKQorICAtIEF2b2lkIGF0ZXhpdCgzKSBj YWxscyB1bmxlc3MgdGhlIHJlbGV2YW50IHByb2ZpbGluZyBmZWF0dXJlcyBhcmUgZW5hYmxlZC4K KyAgICAoQEJ1c3lKYXksIEBsYWl3ZWktcmljZSwgQGludGVyd3EpCisgIC0gRml4IHVua25vd24g b3B0aW9uIGRldGVjdGlvbiB3aGVuIHVzaW5nIENsYW5nLiAgKEBMYXBlbmtvdikKKyAgLSBGaXgg c3ltYm9sIGNvbmZsaWN0IHdpdGggbXVzbCBsaWJjLiAgKEBnZW9yZ3RoZWdyZWF0KQorICAtIEFk ZCAtV2ltcGxpY2l0LWZhbGx0aHJvdWdoIGNoZWNrcy4gIChAbmlja2Rlc2F1bG5pZXJzKQorICAt IEFkZCBfX2ZvcmNlaW5saW5lIHN1cHBvcnQgb24gTVNWQy4gIChAc2FudGFnYWRhKQorICAtIElt cHJvdmUgRnJlZUJTRCBhbmQgV2luZG93cyBDSSBzdXBwb3J0LiAgKEBMYXBlbmtvdikKKyAgLSBB ZGQgQ0kgc3VwcG9ydCBmb3IgUFBDNjRMRSBhcmNoaXRlY3R1cmUuICAoQGV6ZWV5YWhvbykKKwor ICBJbmNvbXBhdGlibGUgY2hhbmdlczoKKyAgLSBNYXhpbXVtIHNpemUgY2xhc3MgYWxsb3dlZCBp biB0Y2FjaGUgKG9wdC5bbGdfXXRjYWNoZV9tYXgpIG5vdyBoYXMgYW4gdXBwZXIKKyAgICBib3Vu ZCBvZiA4TWlCLiAgKEBpbnRlcndxKQorCisgIE9wdGltaXphdGlvbnMgYW5kIHJlZmFjdG9ycyAo QGRhdmlkdGdvbGRibGF0dCwgQExhcGVua292LCBAaW50ZXJ3cSk6CisgIC0gT3B0aW1pemUgdGhl IGNvbW1vbiBjYXNlcyBvZiB0aGUgdGhyZWFkIGNhY2hlIG9wZXJhdGlvbnMuCisgIC0gT3B0aW1p emUgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzLCBpbmNsdWRpbmcgUkIgdHJlZSBhbmQgcGFpcmlu ZyBoZWFwLgorICAtIE9wdGltaXplIHRoZSBpbnRlcm5hbCBsb2NraW5nIG9uIGV4dGVudCBtYW5h Z2VtZW50LgorICAtIEV4dHJhY3QgYW5kIHJlZmFjdG9yIHRoZSBpbnRlcm5hbCBwYWdlIGFsbG9j YXRvciBhbmQgaW50ZXJmYWNlIG1vZHVsZXMuCisKKyAgRG9jdW1lbnRhdGlvbjoKKyAgLSBGaXgg ZG9jIGJ1aWxkIHdpdGggLS13aXRoLWluc3RhbGwtc3VmZml4LiAgKEBsYXdtdXJyYXksIEBpbnRl cndxKQorICAtIEFkZCBQUk9GSUxJTkdfSU5URVJOQUxTLm1kLiAgKEBkYXZpZHRnb2xkYmxhdHQp CisgIC0gRW5zdXJlIHRoZSBwcm9wZXIgb3JkZXIgb2YgZG9jIGJ1aWxkaW5nIGFuZCBpbnN0YWxs YXRpb24uICAoQE1pbmdsaS1ZdSkKKworKiA1LjIuMSAoQXVndXN0IDUsIDIwMTkpCisKKyAgVGhp cyByZWxlYXNlIGlzIHByaW1hcmlseSBhYm91dCBXaW5kb3dzLiAgQSBjcml0aWNhbCB2aXJ0dWFs IG1lbW9yeSBsZWFrIGlzCisgIHJlc29sdmVkIG9uIGFsbCBXaW5kb3dzIHBsYXRmb3Jtcy4gIFRo ZSByZWdyZXNzaW9uIHdhcyBwcmVzZW50IGluIGFsbCByZWxlYXNlcworICBzaW5jZSA1LjAuMC4K KworICBCdWcgZml4ZXM6CisgIC0gRml4IGEgc2V2ZXJlIHZpcnR1YWwgbWVtb3J5IGxlYWsgb24g V2luZG93cy4gIFRoaXMgcmVncmVzc2lvbiB3YXMgZmlyc3QKKyAgICByZWxlYXNlZCBpbiA1LjAu MC4gIChASWduaXRpb24sIEBqMHQsIEBmcmVkZXJpay1oLCBAZGF2aWR0Z29sZGJsYXR0LAorICAg IEBpbnRlcndxKQorICAtIEZpeCBzaXplIDAgaGFuZGxpbmcgaW4gcG9zaXhfbWVtYWxpZ24oKS4g IFRoaXMgcmVncmVzc2lvbiB3YXMgZmlyc3QgcmVsZWFzZWQKKyAgICBpbiA1LjIuMC4gIChAaW50 ZXJ3cSkKKyAgLSBGaXggdGhlIHByb2ZfbG9nIHVuaXQgdGVzdCB3aGljaCBtYXkgb2JzZXJ2ZSB1 bmV4cGVjdGVkIGJhY2t0cmFjZXMgZnJvbQorICAgIGNvbXBpbGVyIG9wdGltaXphdGlvbnMuICBU aGUgdGVzdCB3YXMgZmlyc3QgYWRkZWQgaW4gNS4yLjAuICAoQG1hcnhpbiwKKyAgICBAZ256bGJn LCBAaW50ZXJ3cSkKKyAgLSBGaXggdGhlIGRlY2xhcmF0aW9uIG9mIHRoZSBleHRlbnRfYXZhaWwg dHJlZS4gIFRoaXMgcmVncmVzc2lvbiB3YXMgZmlyc3QKKyAgICByZWxlYXNlZCBpbiA1LjEuMC4g IChAem91bGFzYykKKyAgLSBGaXggYW4gaW5jb3JyZWN0IHJlZmVyZW5jZSBpbiBqZXByb2YuICBU aGlzIGZ1bmN0aW9uYWxpdHkgd2FzIGZpcnN0IHJlbGVhc2VkCisgICAgaW4gMy4wLjAuICAoQHBy ZWhpc3RvcmljLXBlbmd1aW4pCisgIC0gRml4IGFuIGFzc2VydGlvbiBvbiB0aGUgZGVhbGxvY2F0 aW9uIGZhc3QtcGF0aC4gIFRoaXMgcmVncmVzc2lvbiB3YXMgZmlyc3QKKyAgICByZWxlYXNlZCBp biA1LjIuMC4gIChAeWluYW4xMDQ4NTc2KQorICAtIEZpeCB0aGUgVExTX01PREVMIGF0dHJpYnV0 ZSBpbiBoZWFkZXJzLiAgVGhpcyByZWdyZXNzaW9uIHdhcyBmaXJzdCByZWxlYXNlZAorICAgIGlu IDUuMC4wLiAgKEB6b3VsYXNjLCBAaW50ZXJ3cSkKKworICBPcHRpbWl6YXRpb25zIGFuZCByZWZh Y3RvcnM6CisgIC0gSW1wbGVtZW50IG9wdC5yZXRhaW4gb24gV2luZG93cyBhbmQgZW5hYmxlIGJ5 IGRlZmF1bHQgb24gNjQtYml0LiAgKEBpbnRlcndxLAorICAgIEBkYXZpZHRnb2xkYmxhdHQpCisg IC0gT3B0aW1pemUgYXdheSBhIGJyYW5jaCBvbiB0aGUgb3BlcmF0b3IgZGVsZXRlW10gcGF0aC4g IChAbWdyaWNlKQorICAtIEFkZCBmb3JtYXQgYW5ub3RhdGlvbiB0byB0aGUgZm9ybWF0IGdlbmVy YXRvciBmdW5jdGlvbi4gIChAem91bGFzYykKKyAgLSBSZWZhY3RvciBhbmQgaW1wcm92ZSB0aGUg c2l6ZSBjbGFzcyBoZWFkZXIgZ2VuZXJhdGlvbi4gIChAeWluYW4xMDQ4NTc2KQorICAtIFJlbW92 ZSBiZXN0IGZpdC4gIChAZGp3YXRzb24pCisgIC0gQXZvaWQgYmxvY2tpbmcgb24gYmFja2dyb3Vu ZCB0aHJlYWQgbG9ja3MgZm9yIHN0YXRzLiAgKEBvcmFuYWdyYSwgQGludGVyd3EpCisKKyogNS4y LjAgKEFwcmlsIDIsIDIwMTkpCisKKyAgVGhpcyByZWxlYXNlIGluY2x1ZGVzIGEgZmV3IG5vdGFi bGUgaW1wcm92ZW1lbnRzLCB3aGljaCBhcmUgc3VtbWFyaXplZCBiZWxvdzoKKyAgMSkgaW1wcm92 ZWQgZmFzdC1wYXRoIHBlcmZvcm1hbmNlIGZyb20gdGhlIG9wdGltaXphdGlvbnMgYnkgQGRqd2F0 c29uOyAyKQorICByZWR1Y2VkIHZpcnR1YWwgbWVtb3J5IGZyYWdtZW50YXRpb24gYW5kIG1ldGFk YXRhIHVzYWdlOyBhbmQgMykgYnVnIGZpeGVzIG9uCisgIHNldHRpbmcgdGhlIG51bWJlciBvZiBi YWNrZ3JvdW5kIHRocmVhZHMuICBJbiBhZGRpdGlvbiwgcGVhayAvIHNwaWtlIG1lbW9yeQorICB1 c2FnZSBpcyBpbXByb3ZlZCB3aXRoIGNlcnRhaW4gYWxsb2NhdGlvbiBwYXR0ZXJucy4gIEFzIHVz dWFsLCB0aGUgcmVsZWFzZSBhbmQKKyAgcHJpb3IgZGV2IHZlcnNpb25zIGhhdmUgZ29uZSB0aHJv dWdoIGxhcmdlLXNjYWxlIHByb2R1Y3Rpb24gdGVzdGluZy4KKworICBOZXcgZmVhdHVyZXM6Cisg IC0gSW1wbGVtZW50IG92ZXJzaXplX3RocmVzaG9sZCwgd2hpY2ggdXNlcyBhIGRlZGljYXRlZCBh cmVuYSBmb3IgYWxsb2NhdGlvbnMKKyAgICBjcm9zc2luZyB0aGUgc3BlY2lmaWVkIHRocmVzaG9s ZCB0byByZWR1Y2UgZnJhZ21lbnRhdGlvbi4gIChAaW50ZXJ3cSkKKyAgLSBBZGQgZXh0ZW50cyB1 c2FnZSBpbmZvcm1hdGlvbiB0byBzdGF0cy4gIChAdHlsZXJldHplbCkKKyAgLSBMb2cgdGltZSBp bmZvcm1hdGlvbiBmb3Igc2FtcGxlZCBhbGxvY2F0aW9ucy4gIChAdHlsZXJldHplbCkKKyAgLSBT dXBwb3J0IDAgc2l6ZSBpbiBzZGFsbG9jeC4gIChAZGp3YXRzb24pCisgIC0gT3V0cHV0IHJhdGUg Zm9yIGNlcnRhaW4gY291bnRlcnMgaW4gbWFsbG9jX3N0YXRzLiAgKEB6aW5vYWxlKQorICAtIEFk ZCBjb25maWd1cmUgb3B0aW9uIC0tZW5hYmxlLXJlYWRsaW5rYXQsIHdoaWNoIGFsbG93cyB0aGUg dXNlIG9mIHJlYWRsaW5rYXQKKyAgICBvdmVyIHJlYWRsaW5rLiAgKEBkYXZpZHRnb2xkYmxhdHQp CisgIC0gQWRkIGNvbmZpZ3VyZSBvcHRpb25zIC0te2VuYWJsZSxkaXNhYmxlfS17c3RhdGljLHNo YXJlZH0gdG8gYWxsb3cgbm90CisgICAgYnVpbGRpbmcgdW53YW50ZWQgbGlicmFyaWVzLiAgKEBF cmljc29uMjMxNCkKKyAgLSBBZGQgY29uZmlndXJlIG9wdGlvbiAtLWRpc2FibGUtbGliZGwgdG8g ZW5hYmxlIGZ1bGx5IHN0YXRpYyBidWlsZHMuCisgICAgKEBpbnRlcndxKQorICAtIEFkZCBtYWxs Y3RsIGludGVyZmFjZXM6CisJKyBvcHQub3ZlcnNpemVfdGhyZXNob2xkIChAaW50ZXJ3cSkKKwkr IHN0YXRzLmFyZW5hcy48aT4uZXh0ZW50X2F2YWlsIChAdHlsZXJldHplbCkKKwkrIHN0YXRzLmFy ZW5hcy48aT4uZXh0ZW50cy48aj4ubntkaXJ0eSxtdXp6eSxyZXRhaW5lZH0gKEB0eWxlcmV0emVs KQorCSsgc3RhdHMuYXJlbmFzLjxpPi5leHRlbnRzLjxqPi57ZGlydHksbXV6enkscmV0YWluZWR9 X2J5dGVzCisJICAoQHR5bGVyZXR6ZWwpCisKKyAgUG9ydGFiaWxpdHkgaW1wcm92ZW1lbnRzOgor ICAtIFVwZGF0ZSBNU1ZDIGJ1aWxkcy4gIChAbWFrc3F3ZSwgQHJ1c3R5eCkKKyAgLSBXb3JrYXJv dW5kIGEgY29tcGlsZXIgb3B0aW1pemVyIGJ1ZyBvbiBzMzkweC4gIChAcmttaXNyYSkKKyAgLSBN YWtlIHVzZSBvZiBwdGhyZWFkX3NldF9uYW1lX25wKDMpIG9uIEZyZWVCU0QuICAoQHRyYXN6KQor ICAtIEltcGxlbWVudCBtYWxsb2NfZ2V0Y3B1KCkgdG8gZW5hYmxlIHBlcmNwdV9hcmVuYSBmb3Ig d2luZG93cy4gIChAc2FudGFnYWRhKQorICAtIExpbmsgYWdhaW5zdCAtcHRocmVhZCBpbnN0ZWFk IG9mIC1scHRocmVhZC4gIChAcGFyYXZvaWQpCisgIC0gTWFrZSBiYWNrZ3JvdW5kX3RocmVhZCBu b3QgZGVwZW5kZW50IG9uIGxpYmRsLiAgKEBpbnRlcndxKQorICAtIEFkZCBzdHJpbmdpZnkgdG8g Zml4IGEgbGlua2VyIGRpcmVjdGl2ZSBpc3N1ZSBvbiBNU1ZDLiAgKEBkYXZlcmlnYnkpCisgIC0g RGV0ZWN0IGFuZCBmYWxsIGJhY2sgd2hlbiA4LWJpdCBhdG9taWNzIGFyZSB1bmF2YWlsYWJsZS4g IChAaW50ZXJ3cSkKKyAgLSBGYWxsIGJhY2sgdG8gdGhlIGRlZmF1bHQgcHRocmVhZF9jcmVhdGUg aWYgZGxzeW0oMykgZmFpbHMuICAoQGludGVyd3EpCisKKyAgT3B0aW1pemF0aW9ucyBhbmQgcmVm YWN0b3JzOgorICAtIFJlZmFjdG9yIHRoZSBUU0QgbW9kdWxlLiAgKEBkYXZpZHRnb2xkYmxhdHQp CisgIC0gQXZvaWQgdGFraW5nIGV4dGVudHNfbXV6enkgbXV0ZXggd2hlbiBtdXp6eSBpcyBkaXNh YmxlZC4gIChAaW50ZXJ3cSkKKyAgLSBBdm9pZCB0YWtpbmcgbGFyZ2VfbXR4IGZvciBhdXRvIGFy ZW5hcyBvbiB0aGUgdGNhY2hlIGZsdXNoIHBhdGguICAoQGludGVyd3EpCisgIC0gT3B0aW1pemUg aXhhbGxvYyBieSBhdm9pZGluZyBhIHNpemUgbG9va3VwLiAgKEBpbnRlcndxKQorICAtIEltcGxl bWVudCBvcHQub3ZlcnNpemVfdGhyZXNob2xkIHdoaWNoIHVzZXMgYSBkZWRpY2F0ZWQgYXJlbmEg Zm9yIHJlcXVlc3RzCisgICAgY3Jvc3NpbmcgdGhlIHRocmVzaG9sZCwgYWxzbyBlYWdlcmx5IHB1 cmdlcyB0aGUgb3ZlcnNpemUgZXh0ZW50cy4gIERlZmF1bHQKKyAgICB0aGUgdGhyZXNob2xkIHRv IDggTWlCLiAgKEBpbnRlcndxKQorICAtIENsZWFuIGNvbXBpbGF0aW9uIHdpdGggLVdleHRyYS4g IChAZ256bGJnLCBAamFzb25lKQorICAtIFJlZmFjdG9yIHRoZSBzaXplIGNsYXNzIG1vZHVsZS4g IChAZGF2aWR0Z29sZGJsYXR0KQorICAtIFJlZmFjdG9yIHRoZSBzdGF0cyBlbWl0dGVyLiAgKEB0 eWxlcmV0emVsKQorICAtIE9wdGltaXplIHBvdzJfY2VpbC4gIChAcmttaXNyYSkKKyAgLSBBdm9p ZCBydW50aW1lIGRldGVjdGlvbiBvZiBsYXp5IHB1cmdpbmcgb24gRnJlZUJTRC4gIChAdHJhc3op CisgIC0gT3B0aW1pemUgbW1hcCgyKSBhbGlnbm1lbnQgaGFuZGxpbmcgb24gRnJlZUJTRC4gIChA dHJhc3opCisgIC0gSW1wcm92ZSBlcnJvciBoYW5kbGluZyBmb3IgVEhQIHN0YXRlIGluaXRpYWxp emF0aW9uLiAgKEBqc3RlZW1hbm4pCisgIC0gUmV3b3JrIHRoZSBtYWxsb2MoKSBmYXN0IHBhdGgu ICAoQGRqd2F0c29uKQorICAtIFJld29yayB0aGUgZnJlZSgpIGZhc3QgcGF0aC4gIChAZGp3YXRz b24pCisgIC0gUmVmYWN0b3IgYW5kIG9wdGltaXplIHRoZSB0Y2FjaGUgZmlsbCAvIGZsdXNoIHBh dGhzLiAgKEBkandhdHNvbikKKyAgLSBPcHRpbWl6ZSBzeW5jIC8gbHdzeW5jIG9uIFBvd2VyUEMu ICAoQGNobWVlZWRhbGYpCisgIC0gQnlwYXNzIGV4dGVudF9kYWxsb2MoKSB3aGVuIHJldGFpbiBp cyBlbmFibGVkLiAgKEBpbnRlcndxKQorICAtIE9wdGltaXplIHRoZSBsb2NraW5nIG9uIGxhcmdl IGRlYWxsb2NhdGlvbi4gIChAaW50ZXJ3cSkKKyAgLSBSZWR1Y2UgdGhlIG51bWJlciBvZiBwYWdl cyBjb21taXR0ZWQgZnJvbSBzYW5pdHkgY2hlY2tpbmcgaW4gZGVidWcgYnVpbGQuCisgICAgKEB0 cmFzeiwgQGludGVyd3EpCisgIC0gRGVwcmVjYXRlIE9TU3BpbkxvY2suICAoQGludGVyd3EpCisg IC0gTG93ZXIgdGhlIGRlZmF1bHQgbnVtYmVyIG9mIGJhY2tncm91bmQgdGhyZWFkcyB0byA0ICh3 aGVuIHRoZSBmZWF0dXJlCisgICAgaXMgZW5hYmxlZCkuICAoQGludGVyd3EpCisgIC0gT3B0aW1p emUgdGhlIHRyeWxvY2sgc3BpbiB3YWl0LiAgKEBkandhdHNvbikKKyAgLSBVc2UgYXJlbmEgaW5k ZXggZm9yIGFyZW5hLW1hdGNoaW5nIGNoZWNrcy4gIChAaW50ZXJ3cSkKKyAgLSBBdm9pZCBmb3Jj ZWQgZGVjYXkgb24gdGhyZWFkIHRlcm1pbmF0aW9uIHdoZW4gdXNpbmcgYmFja2dyb3VuZCB0aHJl YWRzLgorICAgIChAaW50ZXJ3cSkKKyAgLSBEaXNhYmxlIG11enp5IGRlY2F5IGJ5IGRlZmF1bHQu ICAoQGRqd2F0c29uLCBAaW50ZXJ3cSkKKyAgLSBPbmx5IGluaXRpYWxpemUgbGliZ2NjIHVud2lu ZGVyIHdoZW4gcHJvZmlsaW5nIGlzIGVuYWJsZWQuICAoQHBhcmF2b2lkLAorICAgIEBpbnRlcndx KQorCisgIEJ1ZyBmaXhlcyAoYWxsIG9ubHkgcmVsZXZhbnQgdG8gamVtYWxsb2MgNS54KToKKyAg LSBGaXggYmFja2dyb3VuZCB0aHJlYWQgaW5kZXggaXNzdWVzIHdpdGggbWF4X2JhY2tncm91bmRf dGhyZWFkcy4gIChAZGp3YXRzb24sCisgICAgQGludGVyd3EpCisgIC0gRml4IHN0YXRzIG91dHB1 dCBmb3Igb3B0LmxnX2V4dGVudF9tYXhfYWN0aXZlX2ZpdC4gIChAaW50ZXJ3cSkKKyAgLSBGaXgg b3B0LnByb2ZfcHJlZml4IGluaXRpYWxpemF0aW9uLiAgKEBkYXZpZHRnb2xkYmxhdHQpCisgIC0g UHJvcGVybHkgdHJpZ2dlciBkZWNheSBvbiB0Y2FjaGUgZGVzdHJveS4gIChAaW50ZXJ3cSwgQGFt b3NiaXJkKQorICAtIEZpeCB0Y2FjaGUuZmx1c2guICAoQGludGVyd3EpCisgIC0gRGV0ZWN0IHdo ZXRoZXIgZXhwbGljaXQgZXh0ZW50IHplcm8gb3V0IGlzIG5lY2Vzc2FyeSB3aXRoIGh1Z2UgcGFn ZXMgb3IKKyAgICBjdXN0b20gZXh0ZW50IGhvb2tzLCB3aGljaCBtYXkgY2hhbmdlIHRoZSBwdXJn ZSBzZW1hbnRpY3MuICAoQGludGVyd3EpCisgIC0gRml4IGEgc2lkZSBlZmZlY3QgY2F1c2VkIGJ5 IGV4dGVudF9tYXhfYWN0aXZlX2ZpdCBjb21iaW5lZCB3aXRoIGRlY2F5LWJhc2VkCisgICAgcHVy Z2luZywgd2hlcmUgZnJlZWQgZXh0ZW50cyBjYW4gYWNjdW11bGF0ZSBhbmQgbm90IGJlIHJldXNl ZCBmb3IgYW4KKyAgICBleHRlbmRlZCBwZXJpb2Qgb2YgdGltZS4gIChAaW50ZXJ3cSwgQG1wZ2hm KQorICAtIEZpeCBhIG1pc3NpbmcgdW5sb2NrIG9uIGV4dGVudCByZWdpc3RlciBlcnJvciBoYW5k bGluZy4gIChAem91bGFzYykKKworICBUZXN0aW5nOgorICAtIFNpbXBsaWZ5IHRoZSBUcmF2aXMg c2NyaXB0IG91dHB1dC4gIChAZ256bGJnKQorICAtIFVwZGF0ZSB0aGUgdGVzdCBzY3JpcHRzIGZv ciBGcmVlQlNELiAgKEBkZXZuZXhlbikKKyAgLSBBZGQgdW5pdCB0ZXN0cyBmb3IgdGhlIHByb2R1 Y2VyLWNvbnN1bWVyIHBhdHRlcm4uICAoQGludGVyd3EpCisgIC0gQWRkIENpcnJ1cy1DSSBjb25m aWcgZm9yIEZyZWVCU0QgYnVpbGRzLiAgKEBqYXNvbmUpCisgIC0gQWRkIHNpemUtbWF0Y2hpbmcg c2FuaXR5IGNoZWNrcyBvbiB0Y2FjaGUgZmx1c2guICAoQGRhdmlkdGdvbGRibGF0dCwKKyAgICBA aW50ZXJ3cSkKKworICBJbmNvbXBhdGlibGUgY2hhbmdlczoKKyAgLSBSZW1vdmUgLS13aXRoLWxn LXBhZ2Utc2l6ZXMuICAoQGRhdmlkdGdvbGRibGF0dCkKKworICBEb2N1bWVudGF0aW9uOgorICAt IEF0dGVtcHQgdG8gYnVpbGQgZG9jcyBieSBkZWZhdWx0LCBob3dldmVyIHNraXAgZG9jIGJ1aWxk aW5nIHdoZW4geHNsdHByb2MKKyAgICBpcyBtaXNzaW5nLiAoQGludGVyd3EsIEBjbXVlbGxuZXIp CisKKyogNS4xLjAgKE1heSA0LCAyMDE4KQorCisgIFRoaXMgcmVsZWFzZSBpcyBwcmltYXJpbHkg YWJvdXQgZmluZS10dW5pbmcsIHJhbmdpbmcgZnJvbSBzZXZlcmFsIG5ldyBmZWF0dXJlcworICB0 byBudW1lcm91cyBub3RhYmxlIHBlcmZvcm1hbmNlIGFuZCBwb3J0YWJpbGl0eSBlbmhhbmNlbWVu dHMuICBUaGUgcmVsZWFzZSBhbmQKKyAgcHJpb3IgZGV2IHZlcnNpb25zIGhhdmUgYmVlbiBydW5u aW5nIGluIG11bHRpcGxlIGxhcmdlIHNjYWxlIGFwcGxpY2F0aW9ucyBmb3IKKyAgbW9udGhzLCBh bmQgdGhlIGN1bXVsYXRpdmUgaW1wcm92ZW1lbnRzIGFyZSBzdWJzdGFudGlhbCBpbiBtYW55IGNh c2VzLgorCisgIEdpdmVuIHRoZSBsb25nIGFuZCBzdWNjZXNzZnVsIHByb2R1Y3Rpb24gcnVucywg dGhpcyByZWxlYXNlIGlzIGxpa2VseSBhIGdvb2QKKyAgY2FuZGlkYXRlIGZvciBhcHBsaWNhdGlv bnMgdG8gdXBncmFkZSwgZnJvbSBib3RoIGplbWFsbG9jIDUuMCBhbmQgYmVmb3JlLiAgRm9yCisg IHBlcmZvcm1hbmNlLWNyaXRpY2FsIGFwcGxpY2F0aW9ucywgdGhlIG5ld2x5IGFkZGVkIFRVTklO Ry5tZCBwcm92aWRlcworICBndWlkZWxpbmVzIG9uIGplbWFsbG9jIHR1bmluZy4KKworICBOZXcg ZmVhdHVyZXM6CisgIC0gSW1wbGVtZW50IHRyYW5zcGFyZW50IGh1Z2UgcGFnZSBzdXBwb3J0IGZv ciBpbnRlcm5hbCBtZXRhZGF0YS4gIChAaW50ZXJ3cSkKKyAgLSBBZGQgb3B0LnRocCB0byBhbGxv dyBlbmFibGluZyAvIGRpc2FibGluZyB0cmFuc3BhcmVudCBodWdlIHBhZ2VzIGZvciBhbGwKKyAg ICBtYXBwaW5ncy4gIChAaW50ZXJ3cSkKKyAgLSBBZGQgbWF4aW11bSBiYWNrZ3JvdW5kIHRocmVh ZCBjb3VudCBvcHRpb24uICAoQGRqd2F0c29uKQorICAtIEFsbG93IHByb2ZfYWN0aXZlIHRvIGNv bnRyb2wgb3B0LmxnX3Byb2ZfaW50ZXJ2YWwgYW5kIHByb2YuZ2R1bXAuCisgICAgKEBpbnRlcndx KQorICAtIEFsbG93IGFyZW5hIGluZGV4IGxvb2t1cCBiYXNlZCBvbiBhbGxvY2F0aW9uIGFkZHJl c3NlcyB2aWEgbWFsbGN0bC4KKyAgICAoQGxpb25rb3YpCisgIC0gQWxsb3cgZGlzYWJsaW5nIGlu aXRpYWwtZXhlYyBUTFMgbW9kZWwuICAoQGRhdmlkdGdvbGRibGF0dCwgQEtlbk1hY0QpCisgIC0g QWRkIG9wdC5sZ19leHRlbnRfbWF4X2FjdGl2ZV9maXQgdG8gc2V0IHRoZSBtYXggcmF0aW8gYmV0 d2VlbiB0aGUgc2l6ZSBvZgorICAgIHRoZSBhY3RpdmUgZXh0ZW50IHNlbGVjdGVkICh0byBzcGxp dCBvZmYgZnJvbSkgYW5kIHRoZSBzaXplIG9mIHRoZSByZXF1ZXN0ZWQKKyAgICBhbGxvY2F0aW9u LiAgKEBpbnRlcndxLCBAZGF2aWR0Z29sZGJsYXR0KQorICAtIEFkZCByZXRhaW5fZ3Jvd19saW1p dCB0byBzZXQgdGhlIG1heCBzaXplIHdoZW4gZ3Jvd2luZyB2aXJ0dWFsIGFkZHJlc3MKKyAgICBz cGFjZS4gIChAaW50ZXJ3cSkKKyAgLSBBZGQgbWFsbGN0bCBpbnRlcmZhY2VzOgorICAgICsgYXJl bmEuPGk+LnJldGFpbl9ncm93X2xpbWl0ICAoQGludGVyd3EpCisgICAgKyBhcmVuYXMubG9va3Vw ICAoQGxpb25rb3YpCisgICAgKyBtYXhfYmFja2dyb3VuZF90aHJlYWRzICAoQGRqd2F0c29uKQor ICAgICsgb3B0LmxnX2V4dGVudF9tYXhfYWN0aXZlX2ZpdCAgKEBpbnRlcndxKQorICAgICsgb3B0 Lm1heF9iYWNrZ3JvdW5kX3RocmVhZHMgIChAZGp3YXRzb24pCisgICAgKyBvcHQubWV0YWRhdGFf dGhwICAoQGludGVyd3EpCisgICAgKyBvcHQudGhwICAoQGludGVyd3EpCisgICAgKyBzdGF0cy5t ZXRhZGF0YV90aHAgIChAaW50ZXJ3cSkKKworICBQb3J0YWJpbGl0eSBpbXByb3ZlbWVudHM6Cisg IC0gU3VwcG9ydCBHTlUva0ZyZWVCU0QgY29uZmlndXJhdGlvbi4gIChAcGFyYXZvaWQpCisgIC0g U3VwcG9ydCBtNjhrLCBuaW9zMiBhbmQgU0gzIGFyY2hpdGVjdHVyZXMuICAoQHBhcmF2b2lkKQor ICAtIEZhbGwgYmFjayB0byBGRF9DTE9FWEVDIHdoZW4gT19DTE9FWEVDIGlzIHVuYXZhaWxhYmxl LiAgKEB6b255aXRvbykKKyAgLSBGaXggc3ltYm9sIGxpc3RpbmcgZm9yIGNyb3NzLWNvbXBpbGlu Zy4gIChAdGFtaXJkKQorICAtIEZpeCBoaWdoIGJpdHMgY29tcHV0YXRpb24gb24gQVJNLiAgKEBk YXZpZHRnb2xkYmxhdHQsIEBwYXJhdm9pZCkKKyAgLSBEaXNhYmxlIHRoZSBDUFVfU1BJTldBSVQg bWFjcm8gZm9yIFBvd2VyLiAgKEBkYXZpZHRnb2xkYmxhdHQsIEBtYXJ4aW4pCisgIC0gRml4IE1T VkMgMjAxNSAmIDIwMTcgYnVpbGRzLiAgKEBydXN0eXgpCisgIC0gSW1wcm92ZSBSSVNDLVYgc3Vw cG9ydC4gIChARWRTY2hvdXRlbikKKyAgLSBTZXQgbmFtZSBtYW5nbGluZyBzY3JpcHQgaW4gc3Ry aWN0IG1vZGUuICAoQG5pY29sb3YpCisgIC0gQXZvaWQgTUFEVl9IVUdFUEFHRSBvbiBBUk0uICAo QG1hcnhpbikKKyAgLSBNb2RpZnkgY29uZmlndXJlIHRvIGRldGVybWluZSByZXR1cm4gdmFsdWUg b2Ygc3RyZXJyb3Jfci4KKyAgICAoQGRhdmlkdGdvbGRibGF0dCwgQGNmZXJyaXMxMDAwKQorICAt IE1ha2Ugc3VyZSBDWFhGTEFHUyBpcyB0ZXN0ZWQgd2l0aCBDUFAgY29tcGlsZXIuICAoQG5laGFs andhbmkpCisgIC0gRml4IDMyLWJpdCBidWlsZCBvbiBNU1ZDLiAgKEBydXN0eXgpCisgIC0gRml4 IGV4dGVybmFsIHN5bWJvbCBvbiBNU1ZDLiAgKEBtYWtzcXdlKQorICAtIEF2b2lkIGEgcHJpbnRm IGZvcm1hdCBzcGVjaWZpZXIgd2FybmluZy4gIChAamFzb25lKQorICAtIEFkZCBjb25maWd1cmUg b3B0aW9uIC0tZGlzYWJsZS1pbml0aWFsLWV4ZWMtdGxzIHdoaWNoIGNhbiBhbGxvdyBqZW1hbGxv YyB0bworICAgIGJlIGR5bmFtaWNhbGx5IGxvYWRlZCBhZnRlciBwcm9ncmFtIHN0YXJ0dXAuICAo QGRhdmlkdGdvbGRibGF0dCwgQEtlbk1hY0QpCisgIC0gQUFyY2g2NDogQWRkIElMUDMyIHN1cHBv cnQuICAoQGNtdWVsbG5lcikKKyAgLSBBZGQgLS13aXRoLWxnLXZhZGRyIGNvbmZpZ3VyZSBvcHRp b24gdG8gc3VwcG9ydCBjcm9zcyBjb21waWxpbmcuCisgICAgKEBjbXVlbGxuZXIsIEBkYXZpZHRn b2xkYmxhdHQpCisKKyAgT3B0aW1pemF0aW9ucyBhbmQgcmVmYWN0b3JzOgorICAtIEltcHJvdmUg YWN0aXZlIGV4dGVudCBmaXQgd2l0aCBleHRlbnRfbWF4X2FjdGl2ZV9maXQuICBUaGlzIGNvbnNp ZGVyYWJseQorICAgIHJlZHVjZXMgZnJhZ21lbnRhdGlvbiBvdmVyIHRpbWUgYW5kIGltcHJvdmVz IHZpcnR1YWwgbWVtb3J5IGFuZCBtZXRhZGF0YQorICAgIHVzYWdlLiAgKEBkYXZpZHRnb2xkYmxh dHQsIEBpbnRlcndxKQorICAtIEVhZ2VybHkgY29hbGVzY2UgbGFyZ2UgZXh0ZW50cyB0byByZWR1 Y2UgZnJhZ21lbnRhdGlvbi4gIChAaW50ZXJ3cSkKKyAgLSBzZGFsbG9jeDogb25seSByZWFkIHNp emUgaW5mbyB3aGVuIHBhZ2UgYWxpZ25lZCAoaS5lLiBwb3NzaWJseSBzYW1wbGVkKSwKKyAgICB3 aGljaCBzcGVlZHMgdXAgdGhlIHNpemVkIGRlYWxsb2NhdGlvbiBwYXRoIHNpZ25pZmljYW50bHku ICAoQGludGVyd3EpCisgIC0gQXZvaWQgYXR0ZW1wdGluZyBuZXcgbWFwcGluZ3MgZm9yIGluIHBs YWNlIGV4cGFuc2lvbiB3aXRoIHJldGFpbiwgc2luY2UKKyAgICBpdCByYXJlbHkgc3VjY2VlZHMg aW4gcHJhY3RpY2UgYW5kIGNhdXNlcyBoaWdoIG92ZXJoZWFkLiAgKEBpbnRlcndxKQorICAtIFJl ZmFjdG9yIE9PTSBoYW5kbGluZyBpbiBuZXdJbXBsLiAgKEB3cWZpc2gpCisgIC0gQWRkIGludGVy bmFsIGZpbmUtZ3JhaW5lZCBsb2dnaW5nIGZ1bmN0aW9uYWxpdHkgZm9yIGRlYnVnZ2luZyB1c2Uu CisgICAgKEBkYXZpZHRnb2xkYmxhdHQpCisgIC0gUmVmYWN0b3IgYXJlbmEgLyB0Y2FjaGUgaW50 ZXJhY3Rpb25zLiAgKEBkYXZpZHRnb2xkYmxhdHQpCisgIC0gUmVmYWN0b3IgZXh0ZW50IG1hbmFn ZW1lbnQgd2l0aCBkdW1wYWJsZSBmbGFnLiAgKEBkYXZpZHRnb2xkYmxhdHQpCisgIC0gQWRkIHJ1 bnRpbWUgZGV0ZWN0aW9uIG9mIGxhenkgcHVyZ2luZy4gIChAaW50ZXJ3cSkKKyAgLSBVc2UgcGFp cmluZyBoZWFwIGluc3RlYWQgb2YgcmVkLWJsYWNrIHRyZWUgZm9yIGV4dGVudHNfYXZhaWwuICAo QGRqd2F0c29uKQorICAtIFVzZSBzeXNjdGwgb24gc3RhcnR1cCBpbiBGcmVlQlNELiAgKEB0cmFz eikKKyAgLSBVc2UgdGhyZWFkIGxvY2FsIHBybmcgc3RhdGUgaW5zdGVhZCBvZiBhdG9taWMuICAo QGRqd2F0c29uKQorICAtIE1ha2UgZGVjYXkgdG8gYWx3YXlzIHB1cmdlIG9uZSBtb3JlIGV4dGVu dCB0aGFuIGJlZm9yZSwgYmVjYXVzZSBpbgorICAgIHByYWN0aWNlIGxhcmdlIGV4dGVudHMgYXJl IHVzdWFsbHkgdGhlIG9uZXMgdGhhdCBjcm9zcyB0aGUgZGVjYXkgdGhyZXNob2xkLgorICAgIFB1 cmdpbmcgdGhlIGFkZGl0aW9uYWwgZXh0ZW50IGhlbHBzIHNhdmUgbWVtb3J5IGFzIHdlbGwgYXMg cmVkdWNlIFZNCisgICAgZnJhZ21lbnRhdGlvbi4gIChAaW50ZXJ3cSkKKyAgLSBGYXN0IGRpdmlz aW9uIGJ5IGR5bmFtaWMgdmFsdWVzLiAgKEBkYXZpZHRnb2xkYmxhdHQpCisgIC0gSW1wcm92ZSB0 aGUgZml0IGZvciBhbGlnbmVkIGFsbG9jYXRpb24uICAoQGludGVyd3EsIEBlZHdpbnNtaXRoKQor ICAtIFJlZmFjdG9yIGV4dGVudF90IGJpdHBhY2tpbmcuICAoQHJrbWlzcmEpCisgIC0gT3B0aW1p emUgdGhlIGdlbmVyYXRlZCBhc3NlbWJseSBmb3IgdGlja2VyIG9wZXJhdGlvbnMuICAoQGRhdmlk dGdvbGRibGF0dCkKKyAgLSBDb252ZXJ0IHN0YXRzIHByaW50aW5nIHRvIHVzZSBhIHN0cnVjdHVy ZWQgdGV4dCBlbWl0dGVyLiAgKEBkYXZpZHRnb2xkYmxhdHQpCisgIC0gUmVtb3ZlIHByZXNlcnZl X2xydSBmZWF0dXJlIGZvciBleHRlbnRzIG1hbmFnZW1lbnQuICAoQGRqd2F0c29uKQorICAtIENv bnNvbGlkYXRlIHR3byBtZW1vcnkgbG9hZHMgaW50byBvbmUgb24gdGhlIGZhc3QgZGVhbGxvY2F0 aW9uIHBhdGguCisgICAgKEBkYXZpZHRnb2xkYmxhdHQsIEBpbnRlcndxKQorCisgIEJ1ZyBmaXhl cyAobW9zdCBvZiB0aGUgaXNzdWVzIGFyZSBvbmx5IHJlbGV2YW50IHRvIGplbWFsbG9jIDUuMCk6 CisgIC0gRml4IGRlYWRsb2NrIHdpdGggbXVsdGl0aHJlYWRlZCBmb3JrIGluIE9TIFguICAoQGRh dmlkdGdvbGRibGF0dCkKKyAgLSBWYWxpZGF0ZSByZXR1cm5lZCBmaWxlIGRlc2NyaXB0b3IgYmVm b3JlIHVzZS4gIChAem9ueWl0b28pCisgIC0gRml4IGEgZmV3IGJhY2tncm91bmQgdGhyZWFkIGlu aXRpYWxpemF0aW9uIGFuZCBzaHV0ZG93biBpc3N1ZXMuICAoQGludGVyd3EpCisgIC0gRml4IGFu IGV4dGVudCBjb2FsZXNjZSArIGRlY2F5IHJhY2UgYnkgdGFraW5nIGJvdGggY29hbGVzY2luZyBl eHRlbnRzIG9mZgorICAgIHRoZSBMUlUgbGlzdC4gIChAaW50ZXJ3cSkKKyAgLSBGaXggcG90ZW50 aWFsbHkgdW5ib3VuZCBpbmNyZWFzZSBkdXJpbmcgZGVjYXksIGNhdXNlZCBieSBvbmUgdGhyZWFk IGtlZXAKKyAgICBzdGFzaGluZyBtZW1vcnkgdG8gcHVyZ2Ugd2hpbGUgb3RoZXIgdGhyZWFkcyBn ZW5lcmF0aW5nIG5ldyBwYWdlcy4gIFRoZQorICAgIG51bWJlciBvZiBwYWdlcyB0byBwdXJnZSBp cyBjaGVja2VkIHRvIHByZXZlbnQgdGhpcy4gIChAaW50ZXJ3cSkKKyAgLSBGaXggYSBGcmVlQlNE IGJvb3RzdHJhcCBhc3NlcnRpb24uICAoQHN0cmVqZGEsIEBpbnRlcndxKQorICAtIEhhbmRsZSAz MiBiaXQgbXV0ZXggY291bnRlcnMuICAoQHJrbWlzcmEpCisgIC0gRml4IGEgaW5kZXhpbmcgYnVn IHdoZW4gY3JlYXRpbmcgYmFja2dyb3VuZCB0aHJlYWRzLiAgKEBkYXZpZHRnb2xkYmxhdHQsCisg ICAgQGJpbmxpdTE5KQorICAtIEZpeCBhcmd1bWVudHMgcGFzc2VkIHRvIGV4dGVudF9pbml0LiAg KEB5dWxlbml3bywgQGludGVyd3EpCisgIC0gRml4IGFkZHJlc3NlcyB1c2VkIGZvciBvcmRlcmlu ZyBtdXRleGVzLiAgKEBya21pc3JhKQorICAtIEZpeCBhYm9ydF9jb25mIHByb2Nlc3NpbmcgZHVy aW5nIGJvb3RzdHJhcC4gIChAaW50ZXJ3cSkKKyAgLSBGaXggaW5jbHVkZSBwYXRoIG9yZGVyIGZv ciBvdXQtb2YtdHJlZSBidWlsZHMuICAoQGNtdWVsbG5lcikKKworICBJbmNvbXBhdGlibGUgY2hh bmdlczoKKyAgLSBSZW1vdmUgLS1kaXNhYmxlLXRocC4gIChAaW50ZXJ3cSkKKyAgLSBSZW1vdmUg bWFsbGN0bCBpbnRlcmZhY2VzOgorICAgICsgY29uZmlnLnRocCAgKEBpbnRlcndxKQorCisgIERv Y3VtZW50YXRpb246CisgIC0gQWRkIFRVTklORy5tZC4gIChAaW50ZXJ3cSwgQGRhdmlkdGdvbGRi bGF0dCwgQGRqd2F0c29uKQorCisqIDUuMC4xIChKdWx5IDEsIDIwMTcpCisKKyAgVGhpcyBidWdm aXggcmVsZWFzZSBmaXhlcyBzZXZlcmFsIGlzc3VlcywgbW9zdCBvZiB3aGljaCBhcmUgb2JzY3Vy ZSBlbm91Z2gKKyAgdGhhdCB0eXBpY2FsIGFwcGxpY2F0aW9ucyBhcmUgbm90IGltcGFjdGVkLgor CisgIEJ1ZyBmaXhlczoKKyAgLSBVcGRhdGUgZGVjYXktPm51bnB1cmdlZCBiZWZvcmUgcHVyZ2lu ZywgaW4gb3JkZXIgdG8gYXZvaWQgcG90ZW50aWFsIHVwZGF0ZQorICAgIHJhY2VzIGFuZCBzdWJz ZXF1ZW50IGluY29ycmVjdCBwdXJnaW5nIHZvbHVtZS4gIChAaW50ZXJ3cSkKKyAgLSBPbmx5IGFi b3J0IG9uIGRsc3ltKDMpIGVycm9yIGlmIHRoZSBmYWlsdXJlIGltcGFjdHMgYW4gZW5hYmxlZCBm ZWF0dXJlIChsYXp5CisgICAgbG9ja2luZyBhbmQvb3IgYmFja2dyb3VuZCB0aHJlYWRzKS4gIFRo aXMgbWl0aWdhdGVzIGFuIGluaXRpYWxpemF0aW9uCisgICAgZmFpbHVyZSBidWcgZm9yIHdoaWNo IHdlIHN0aWxsIGRvIG5vdCBoYXZlIGEgY2xlYXIgcmVwcm9kdWN0aW9uIHRlc3QgY2FzZS4KKyAg ICAoQGludGVyd3EpCisgIC0gTW9kaWZ5IHRzZCBtYW5hZ2VtZW50IHNvIHRoYXQgaXQgbmVpdGhl ciBjcmFzaGVzIG5vciBsZWFrcyBpZiBhIHRocmVhZCdzCisgICAgb25seSBhbGxvY2F0aW9uIGFj dGl2aXR5IGlzIHRvIGNhbGwgZnJlZSgpIGFmdGVyIFRMUyBkZXN0cnVjdG9ycyBoYXZlIGJlZW4K KyAgICBleGVjdXRlZC4gIFRoaXMgYmVoYXZpb3Igd2FzIG9ic2VydmVkIHdoZW4gb3BlcmF0aW5n IHdpdGggR05VIGxpYmMsIGFuZCBpcworICAgIHVubGlrZWx5IHRvIGJlIGFuIGlzc3VlIHdpdGgg b3RoZXIgbGliYyBpbXBsZW1lbnRhdGlvbnMuICAoQGludGVyd3EpCisgIC0gTWFzayBzaWduYWxz IGR1cmluZyBiYWNrZ3JvdW5kIHRocmVhZCBjcmVhdGlvbi4gIFRoaXMgcHJldmVudHMgc2lnbmFs cyBmcm9tCisgICAgYmVpbmcgaW5hZHZlcnRlbnRseSBkZWxpdmVyZWQgdG8gYmFja2dyb3VuZCB0 aHJlYWRzLiAgKEBqYXNvbmUsCisgICAgQGRhdmlkdGdvbGRibGF0dCwgQGludGVyd3EpCisgIC0g QXZvaWQgaW5hY3Rpdml0eSBjaGVja3Mgd2l0aGluIGJhY2tncm91bmQgdGhyZWFkcywgaW4gb3Jk ZXIgdG8gcHJldmVudAorICAgIHJlY3Vyc2l2ZSBtdXRleCBhY3F1aXNpdGlvbi4gIChAaW50ZXJ3 cSkKKyAgLSBGaXggZXh0ZW50X2dyb3dfcmV0YWluZWQoKSB0byB1c2UgdGhlIHNwZWNpZmllZCBo b29rcyB3aGVuIHRoZQorICAgIGFyZW5hLjxpPi5leHRlbnRfaG9va3MgbWFsbGN0bCBpcyB1c2Vk IHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGhvb2tzLgorICAgIChAaW50ZXJ3cSkKKyAgLSBBZGQg bWlzc2luZyByZWVudHJhbmN5IHN1cHBvcnQgZm9yIGN1c3RvbSBleHRlbnQgaG9va3Mgd2hpY2gg YWxsb2NhdGUuCisgICAgKEBpbnRlcndxKQorICAtIFBvc3QtZm9yaygyKSwgcmUtaW5pdGlhbGl6 ZSB0aGUgbGlzdCBvZiB0Y2FjaGVzIGFzc29jaWF0ZWQgd2l0aCBlYWNoIGFyZW5hCisgICAgdG8g Y29udGFpbiBubyB0Y2FjaGVzIGV4Y2VwdCB0aGUgZm9ya2luZyB0aHJlYWQncy4gIChAaW50ZXJ3 cSkKKyAgLSBBZGQgbWlzc2luZyBwb3N0LWZvcmsoMikgbXV0ZXggcmVpbml0aWFsaXphdGlvbiBm b3IgZXh0ZW50X2dyb3dfbXR4LiAgVGhpcworICAgIGZpeGVzIHBvdGVudGlhbCBkZWFkbG9ja3Mg YWZ0ZXIgZm9yaygyKS4gIChAaW50ZXJ3cSkKKyAgLSBFbmZvcmNlIG1pbmltdW0gYXV0b2NvbmYg dmVyc2lvbiAoY3VycmVudGx5IDIuNjgpLCBzaW5jZSAyLjYzIGlzIGtub3duIHRvCisgICAgZ2Vu ZXJhdGUgY29ycnVwdCBjb25maWd1cmUgc2NyaXB0cy4gIChAamFzb25lKQorICAtIEVuc3VyZSB0 aGF0IHRoZSBjb25maWd1cmVkIHBhZ2Ugc2l6ZSAoLS13aXRoLWxnLXBhZ2UpIGlzIG5vIGxhcmdl ciB0aGFuIHRoZQorICAgIGNvbmZpZ3VyZWQgaHVnZSBwYWdlIHNpemUgKC0td2l0aC1sZy1odWdl cGFnZSkuICAoQGphc29uZSkKKworKiA1LjAuMCAoSnVuZSAxMywgMjAxNykKKworICBVbmxpa2Ug YWxsIHByZXZpb3VzIGplbWFsbG9jIHJlbGVhc2VzLCB0aGlzIHJlbGVhc2UgZG9lcyBub3QgdXNl IG5hdHVyYWxseQorICBhbGlnbmVkICJjaHVua3MiIGZvciB2aXJ0dWFsIG1lbW9yeSBtYW5hZ2Vt ZW50LCBhbmQgaW5zdGVhZCB1c2VzIHBhZ2UtYWxpZ25lZAorICAiZXh0ZW50cyIuICBUaGlzIGNo YW5nZSBoYXMgZmV3IGV4dGVybmFsbHkgdmlzaWJsZSBlZmZlY3RzLCBidXQgdGhlIGludGVybmFs CisgIGltcGFjdHMgYXJlLi4uIGV4dGVuc2l2ZS4gIE1hbnkgb3RoZXIgaW50ZXJuYWwgY2hhbmdl cyBjb21iaW5lIHRvIG1ha2UgdGhpcworICB0aGUgbW9zdCBjb2hlc2l2ZWx5IGRlc2lnbmVkIHZl cnNpb24gb2YgamVtYWxsb2Mgc28gZmFyLCB3aXRoIGFtcGxlCisgIG9wcG9ydHVuaXR5IGZvciBm dXJ0aGVyIGVuaGFuY2VtZW50cy4KKworICBDb250aW51b3VzIGludGVncmF0aW9uIGlzIG5vdyBh biBpbnRlZ3JhbCBhc3BlY3Qgb2YgZGV2ZWxvcG1lbnQgdGhhbmtzIHRvIHRoZQorICBlZmZvcnRz IG9mIEBkYXZpZHRnb2xkYmxhdHQsIGFuZCB0aGUgZGV2IGJyYW5jaCB0ZW5kcyB0byByZW1haW4g cmVhc29uYWJseQorICBzdGFibGUgb24gdGhlIHRlc3RlZCBwbGF0Zm9ybXMgKExpbnV4LCBGcmVl QlNELCBtYWNPUywgYW5kIFdpbmRvd3MpLiAgQXMgYQorICBzaWRlIGVmZmVjdCB0aGUgb2ZmaWNp YWwgcmVsZWFzZSBmcmVxdWVuY3kgbWF5IGRlY3JlYXNlIG92ZXIgdGltZS4KKworICBOZXcgZmVh dHVyZXM6CisgIC0gSW1wbGVtZW50IG9wdGlvbmFsIHBlci1DUFUgYXJlbmEgc3VwcG9ydDsgdGhy ZWFkcyBjaG9vc2Ugd2hpY2ggYXJlbmEgdG8gdXNlCisgICAgYmFzZWQgb24gY3VycmVudCBDUFUg cmF0aGVyIHRoYW4gb24gZml4ZWQgdGhyZWFkLS0+YXJlbmEgYXNzb2NpYXRpb25zLgorICAgIChA aW50ZXJ3cSkKKyAgLSBJbXBsZW1lbnQgdHdvLXBoYXNlIGRlY2F5IG9mIHVudXNlZCBkaXJ0eSBw YWdlcy4gIFBhZ2VzIHRyYW5zaXRpb24gZnJvbQorICAgIGRpcnR5LS0+bXV6enktLT5jbGVhbiwg d2hlcmUgdGhlIGZpcnN0IHBoYXNlIHRyYW5zaXRpb24gcmVsaWVzIG9uCisgICAgbWFkdmlzZSgu Li4gTUFEVl9GUkVFKSBzZW1hbnRpY3MsIGFuZCB0aGUgc2Vjb25kIHBoYXNlIHRyYW5zaXRpb24g ZGlzY2FyZHMKKyAgICBwYWdlcyBzdWNoIHRoYXQgdGhleSBhcmUgcmVwbGFjZWQgd2l0aCBkZW1h bmQtemVyb2VkIHBhZ2VzIG9uIG5leHQgYWNjZXNzLgorICAgIChAamFzb25lKQorICAtIEluY3Jl YXNlIGRlY2F5IHRpbWUgcmVzb2x1dGlvbiBmcm9tIHNlY29uZHMgdG8gbWlsbGlzZWNvbmRzLiAg KEBqYXNvbmUpCisgIC0gSW1wbGVtZW50IG9wdC1pbiBwZXIgQ1BVIGJhY2tncm91bmQgdGhyZWFk cywgYW5kIHVzZSB0aGVtIGZvciBhc3luY2hyb25vdXMKKyAgICBkZWNheS1kcml2ZW4gdW51c2Vk IGRpcnR5IHBhZ2UgcHVyZ2luZy4gIChAaW50ZXJ3cSkKKyAgLSBBZGQgbXV0ZXggcHJvZmlsaW5n LCB3aGljaCBjb2xsZWN0cyBhIHZhcmlldHkgb2Ygc3RhdGlzdGljcyB1c2VmdWwgZm9yCisgICAg ZGlhZ25vc2luZyBvdmVyaGVhZC9jb250ZW50aW9uIGlzc3Vlcy4gIChAaW50ZXJ3cSkKKyAgLSBB ZGQgQysrIG5ldy9kZWxldGUgb3BlcmF0b3IgYmluZGluZ3MuICAoQGRqd2F0c29uKQorICAtIFN1 cHBvcnQgbWFudWFsbHkgY3JlYXRlZCBhcmVuYSBkZXN0cnVjdGlvbiwgc3VjaCB0aGF0IGFsbCBk YXRhIGFuZCBtZXRhZGF0YQorICAgIGFyZSBkaXNjYXJkZWQuICBBZGQgTUFMTENUTF9BUkVOQVNf REVTVFJPWUVEIGZvciBhY2Nlc3NpbmcgbWVyZ2VkIHN0YXRzCisgICAgYXNzb2NpYXRlZCB3aXRo IGRlc3Ryb3llZCBhcmVuYXMuICAoQGphc29uZSkKKyAgLSBBZGQgTUFMTENUTF9BUkVOQVNfQUxM IGFzIGEgZml4ZWQgaW5kZXggZm9yIHVzZSBpbiBhY2Nlc3NpbmcKKyAgICBtZXJnZWQvZGVzdHJv eWVkIGFyZW5hIHN0YXRpc3RpY3MgdmlhIG1hbGxjdGwuICAoQGphc29uZSkKKyAgLSBBZGQgb3B0 LmFib3J0X2NvbmYgdG8gb3B0aW9uYWxseSBhYm9ydCBpZiBpbnZhbGlkIGNvbmZpZ3VyYXRpb24g b3B0aW9ucyBhcmUKKyAgICBkZXRlY3RlZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24uICAoQGludGVy d3EpCisgIC0gQWRkIG9wdC5zdGF0c19wcmludF9vcHRzLCBzbyB0aGF0IGUuZy4gSlNPTiBvdXRw dXQgY2FuIGJlIHNlbGVjdGVkIGZvciB0aGUKKyAgICBzdGF0cyBkdW1wZWQgZHVyaW5nIGV4aXQg aWYgb3B0LnN0YXRzX3ByaW50IGlzIHRydWUuICAoQGphc29uZSkKKyAgLSBBZGQgLS13aXRoLXZl cnNpb249VkVSU0lPTiBmb3IgdXNlIHdoZW4gZW1iZWRkaW5nIGplbWFsbG9jIGludG8gYW5vdGhl cgorICAgIHByb2plY3QncyBnaXQgcmVwb3NpdG9yeS4gIChAamFzb25lKQorICAtIEFkZCAtLWRp c2FibGUtdGhwIHRvIHN1cHBvcnQgY3Jvc3MgY29tcGlsaW5nLiAgKEBqYXNvbmUpCisgIC0gQWRk IC0td2l0aC1sZy1odWdlcGFnZSB0byBzdXBwb3J0IGNyb3NzIGNvbXBpbGluZy4gIChAamFzb25l KQorICAtIEFkZCBtYWxsY3RsIGludGVyZmFjZXMgKHZhcmlvdXMgYXV0aG9ycyk6CisgICAgKyBi YWNrZ3JvdW5kX3RocmVhZAorICAgICsgb3B0LmFib3J0X2NvbmYKKyAgICArIG9wdC5yZXRhaW4K KyAgICArIG9wdC5wZXJjcHVfYXJlbmEKKyAgICArIG9wdC5iYWNrZ3JvdW5kX3RocmVhZAorICAg ICsgb3B0LntkaXJ0eSxtdXp6eX1fZGVjYXlfbXMKKyAgICArIG9wdC5zdGF0c19wcmludF9vcHRz CisgICAgKyBhcmVuYS48aT4uaW5pdGlhbGl6ZWQKKyAgICArIGFyZW5hLjxpPi5kZXN0cm95Cisg ICAgKyBhcmVuYS48aT4ue2RpcnR5LG11enp5fV9kZWNheV9tcworICAgICsgYXJlbmEuPGk+LmV4 dGVudF9ob29rcworICAgICsgYXJlbmFzLntkaXJ0eSxtdXp6eX1fZGVjYXlfbXMKKyAgICArIGFy ZW5hcy5iaW4uPGk+LnNsYWJfc2l6ZQorICAgICsgYXJlbmFzLm5sZXh0ZW50cworICAgICsgYXJl bmFzLmxleHRlbnQuPGk+LnNpemUKKyAgICArIGFyZW5hcy5jcmVhdGUKKyAgICArIHN0YXRzLmJh Y2tncm91bmRfdGhyZWFkLntudW1fdGhyZWFkcyxudW1fcnVucyxydW5faW50ZXJ2YWx9CisgICAg KyBzdGF0cy5tdXRleGVzLntjdGwsYmFja2dyb3VuZF90aHJlYWQscHJvZixyZXNldH0uCisgICAg ICB7bnVtX29wcyxudW1fc3Bpbl9hY3EsbnVtX3dhaXQsbWF4X3dhaXRfdGltZSx0b3RhbF93YWl0 X3RpbWUsbWF4X251bV90aGRzLAorICAgICAgbnVtX293bmVyX3N3aXRjaH0KKyAgICArIHN0YXRz LmFyZW5hcy48aT4ue2RpcnR5LG11enp5fV9kZWNheV9tcworICAgICsgc3RhdHMuYXJlbmFzLjxp Pi51cHRpbWUKKyAgICArIHN0YXRzLmFyZW5hcy48aT4ue3BtdXp6eSxiYXNlLGludGVybmFsLHJl c2lkZW50fQorICAgICsgc3RhdHMuYXJlbmFzLjxpPi57ZGlydHksbXV6enl9X3tucHVyZ2Usbm1h ZHZpc2UscHVyZ2VkfQorICAgICsgc3RhdHMuYXJlbmFzLjxpPi5iaW5zLjxqPi57bnNsYWJzLHJl c2xhYnMsY3Vyc2xhYnN9CisgICAgKyBzdGF0cy5hcmVuYXMuPGk+LmJpbnMuPGo+Lm11dGV4Lgor ICAgICAge251bV9vcHMsbnVtX3NwaW5fYWNxLG51bV93YWl0LG1heF93YWl0X3RpbWUsdG90YWxf d2FpdF90aW1lLG1heF9udW1fdGhkcywKKyAgICAgIG51bV9vd25lcl9zd2l0Y2h9CisgICAgKyBz dGF0cy5hcmVuYXMuPGk+LmxleHRlbnRzLjxqPi57bm1hbGxvYyxuZGFsbG9jLG5yZXF1ZXN0cyxj dXJsZXh0ZW50c30KKyAgICArIHN0YXRzLmFyZW5hcy5pLm11dGV4ZXMue2xhcmdlLGV4dGVudF9h dmFpbCxleHRlbnRzX2RpcnR5LGV4dGVudHNfbXV6enksCisgICAgICBleHRlbnRzX3JldGFpbmVk LGRlY2F5X2RpcnR5LGRlY2F5X211enp5LGJhc2UsdGNhY2hlX2xpc3R9LgorICAgICAge251bV9v cHMsbnVtX3NwaW5fYWNxLG51bV93YWl0LG1heF93YWl0X3RpbWUsdG90YWxfd2FpdF90aW1lLG1h eF9udW1fdGhkcywKKyAgICAgIG51bV9vd25lcl9zd2l0Y2h9CisKKyAgUG9ydGFiaWxpdHkgaW1w cm92ZW1lbnRzOgorICAtIEltcHJvdmUgcmVlbnRyYW50IGFsbG9jYXRpb24gc3VwcG9ydCwgc3Vj aCB0aGF0IGRlYWRsb2NrIGlzIGxlc3MgbGlrZWx5IGlmCisgICAgZS5nLiBhIHN5c3RlbSBsaWJy YXJ5IGNhbGwgaW4gdHVybiBhbGxvY2F0ZXMgbWVtb3J5LiAgKEBkYXZpZHRnb2xkYmxhdHQsCisg ICAgQGludGVyd3EpCisgIC0gU3VwcG9ydCBzdGF0aWMgbGlua2luZyBvZiBqZW1hbGxvYyB3aXRo IGdsaWJjLiAgKEBkandhdHNvbikKKworICBPcHRpbWl6YXRpb25zIGFuZCByZWZhY3RvcnM6Cisg IC0gT3JnYW5pemUgdmlydHVhbCBtZW1vcnkgYXMgImV4dGVudHMiIG9mIHZpcnR1YWwgbWVtb3J5 IHBhZ2VzLCByYXRoZXIgdGhhbiBhcworICAgIG5hdHVyYWxseSBhbGlnbmVkICJjaHVua3MiLCBh bmQgc3RvcmUgYWxsIG1ldGFkYXRhIGluIGFyYml0cmFyaWx5IGRpc3RhbnQKKyAgICBsb2NhdGlv bnMuICBUaGlzIHJlZHVjZXMgdmlydHVhbCBtZW1vcnkgZXh0ZXJuYWwgZnJhZ21lbnRhdGlvbiwg YW5kIHdpbGwKKyAgICBpbnRlcmFjdCBiZXR0ZXIgd2l0aCBodWdlIHBhZ2VzIChub3QgeWV0IGV4 cGxpY2l0bHkgc3VwcG9ydGVkKS4gIChAamFzb25lKQorICAtIEZvbGQgbGFyZ2UgYW5kIGh1Z2Ug c2l6ZSBjbGFzc2VzIHRvZ2V0aGVyOyBvbmx5IHNtYWxsIGFuZCBsYXJnZSBzaXplIGNsYXNzZXMK KyAgICByZW1haW4uICAoQGphc29uZSkKKyAgLSBVbmlmeSB0aGUgYWxsb2NhdGlvbiBwYXRocywg YW5kIG1lcmdlIG1vc3QgZmFzdC1wYXRoIGJyYW5jaGluZyBkZWNpc2lvbnMuCisgICAgKEBkYXZp ZHRnb2xkYmxhdHQsIEBpbnRlcndxKQorICAtIEVtYmVkIHBlciB0aHJlYWQgYXV0b21hdGljIHRj YWNoZSBpbnRvIHRocmVhZC1zcGVjaWZpYyBkYXRhLCB3aGljaCByZWR1Y2VzCisgICAgY29uZGl0 aW9uYWwgYnJhbmNoZXMgYW5kIGRlcmVmZXJlbmNlcy4gIEFsc28gcmVvcmdhbml6ZSB0Y2FjaGUg dG8gaW5jcmVhc2UKKyAgICBmYXN0LXBhdGggZGF0YSBsb2NhbGl0eS4gIChAaW50ZXJ3cSkKKyAg LSBSZXdyaXRlIGF0b21pY3MgdG8gY2xvc2VseSBtb2RlbCB0aGUgQzExIEFQSSwgY29udmVydCB2 YXJpb3VzCisgICAgc3luY2hyb25pemF0aW9uIGZyb20gbXV0ZXgtYmFzZWQgdG8gYXRvbWljLCBh bmQgdXNlIHRoZSBleHBsaWNpdCBtZW1vcnkKKyAgICBvcmRlcmluZyBjb250cm9sIHRvIHJlc29s dmUgdmFyaW91cyBoeXBvdGhldGljYWwgcmFjZXMgd2l0aG91dCBpbmNyZWFzaW5nCisgICAgc3lu Y2hyb25pemF0aW9uIG92ZXJoZWFkLiAgKEBkYXZpZHRnb2xkYmxhdHQpCisgIC0gRXh0ZW5zaXZl bHkgb3B0aW1pemUgcnRyZWUgdmlhIHZhcmlvdXMgbWV0aG9kczoKKyAgICArIEFkZCBtdWx0aXBs ZSBsYXllcnMgb2YgcnRyZWUgbG9va3VwIGNhY2hpbmcsIHNpbmNlIHJ0cmVlIGxvb2t1cHMgYXJl IG5vdworICAgICAgcGFydCBvZiBmYXN0LXBhdGggZGVhbGxvY2F0aW9uLiAgKEBpbnRlcndxKQor ICAgICsgRGV0ZXJtaW5lIHJ0cmVlIGxheW91dCBhdCBjb21waWxlIHRpbWUuICAoQGphc29uZSkK KyAgICArIE1ha2UgdGhlIHRyZWUgc2hhbGxvd2VyIGZvciBjb21tb24gY29uZmlndXJhdGlvbnMu ICAoQGphc29uZSkKKyAgICArIEVtYmVkIHRoZSByb290IG5vZGUgaW4gdGhlIHRvcC1sZXZlbCBy dHJlZSBkYXRhIHN0cnVjdHVyZSwgdGh1cyBhdm9pZGluZworICAgICAgb25lIGxldmVsIG9mIGlu ZGlyZWN0aW9uLiAgKEBqYXNvbmUpCisgICAgKyBGdXJ0aGVyIHNwZWNpYWxpemUgbGVhZiBlbGVt ZW50cyBhcyBjb21wYXJlZCB0byBpbnRlcm5hbCBub2RlIGVsZW1lbnRzLAorICAgICAgYW5kIGRp cmVjdGx5IGVtYmVkIGV4dGVudCBtZXRhZGF0YSBuZWVkZWQgZm9yIGZhc3QtcGF0aCBkZWFsbG9j YXRpb24uCisgICAgICAoQGphc29uZSkKKyAgICArIElnbm9yZSBsZWFkaW5nIGFsd2F5cy16ZXJv IGFkZHJlc3MgYml0cyAoYXJjaGl0ZWN0dXJlLXNwZWNpZmljKS4KKyAgICAgIChAamFzb25lKQor ICAtIFJlb3JnYW5pemUgaGVhZGVycyAob25nb2luZyB3b3JrKSB0byBtYWtlIHRoZW0gaGVybWV0 aWMsIGFuZCBkaXNlbnRhbmdsZQorICAgIHZhcmlvdXMgbW9kdWxlIGRlcGVuZGVuY2llcy4gIChA ZGF2aWR0Z29sZGJsYXR0KQorICAtIENvbnZlcnQgdmFyaW91cyBpbnRlcm5hbCBkYXRhIHN0cnVj dHVyZXMgc3VjaCBhcyBzaXplIGNsYXNzIG1ldGFkYXRhIGZyb20KKyAgICBib290LXRpbWUtaW5p dGlhbGl6ZWQgdG8gY29tcGlsZS10aW1lLWluaXRpYWxpemVkLiAgUHJvcGFnYXRlIHJlc3VsdGlu ZyBkYXRhCisgICAgc3RydWN0dXJlIHNpbXBsaWZpY2F0aW9ucywgc3VjaCBhcyBtYWtpbmcgYXJl bmEgbWV0YWRhdGEgZml4ZWQtc2l6ZS4KKyAgICAoQGphc29uZSkKKyAgLSBTaW1wbGlmeSBzaXpl IGNsYXNzIGxvb2t1cHMgd2hlbiBjb25zdHJhaW5lZCB0byBzaXplIGNsYXNzZXMgdGhhdCBhcmUK KyAgICBtdWx0aXBsZXMgb2YgdGhlIHBhZ2Ugc2l6ZS4gIFRoaXMgc3BlZWRzIGxvb2t1cHMsIGJ1 dCB0aGUgcHJpbWFyeSBiZW5lZml0IGlzCisgICAgY29tcGxleGl0eSByZWR1Y3Rpb24gaW4gY29k ZSB0aGF0IHdhcyB0aGUgc291cmNlIG9mIG51bWVyb3VzIHJlZ3Jlc3Npb25zLgorICAgIChAamFz b25lKQorICAtIExvY2sgaW5kaXZpZHVhbCBleHRlbnRzIHdoZW4gcG9zc2libGUgZm9yIGxvY2Fs aXplZCBleHRlbnQgb3BlcmF0aW9ucywKKyAgICByYXRoZXIgdGhhbiByZWx5aW5nIG9uIGEgdG9w LWxldmVsIGFyZW5hIGxvY2suICAoQGRhdmlkdGdvbGRibGF0dCwgQGphc29uZSkKKyAgLSBVc2Ug Zmlyc3QgZml0IGxheW91dCBwb2xpY3kgaW5zdGVhZCBvZiBiZXN0IGZpdCwgaW4gb3JkZXIgdG8g aW1wcm92ZQorICAgIHBhY2tpbmcuICAoQGphc29uZSkKKyAgLSBJZiBtdW5tYXAoMikgaXMgbm90 IGluIHVzZSwgdXNlIGFuIGV4cG9uZW50aWFsIHNlcmllcyB0byBncm93IGVhY2ggYXJlbmEncwor ICAgIHZpcnR1YWwgbWVtb3J5LCBzbyB0aGF0IHRoZSBudW1iZXIgb2YgZGlzam9pbnQgdmlydHVh bCBtZW1vcnkgbWFwcGluZ3MKKyAgICByZW1haW5zIGxvdy4gIChAamFzb25lKQorICAtIEltcGxl bWVudCBwZXIgYXJlbmEgYmFzZSBhbGxvY2F0b3JzLCBzbyB0aGF0IGFyZW5hcyBuZXZlciBzaGFy ZSBhbnkgdmlydHVhbAorICAgIG1lbW9yeSBwYWdlcy4gIChAamFzb25lKQorICAtIEF1dG9tYXRp Y2FsbHkgZ2VuZXJhdGUgcHJpdmF0ZSBzeW1ib2wgbmFtZSBtYW5nbGluZyBtYWNyb3MuICAoQGph c29uZSkKKworICBJbmNvbXBhdGlibGUgY2hhbmdlczoKKyAgLSBSZXBsYWNlIGNodW5rIGhvb2tz IHdpdGggYW4gZXhwYW5kZWQvbm9ybWFsaXplZCBzZXQgb2YgZXh0ZW50IGhvb2tzLgorICAgIChA amFzb25lKQorICAtIFJlbW92ZSByYXRpby1iYXNlZCBwdXJnaW5nLiAgKEBqYXNvbmUpCisgIC0g UmVtb3ZlIC0tZGlzYWJsZS10Y2FjaGUuICAoQGphc29uZSkKKyAgLSBSZW1vdmUgLS1kaXNhYmxl LXRscy4gIChAamFzb25lKQorICAtIFJlbW92ZSAtLWVuYWJsZS1pdnNhbGxvYy4gIChAamFzb25l KQorICAtIFJlbW92ZSAtLXdpdGgtbGctc2l6ZS1jbGFzcy1ncm91cC4gIChAamFzb25lKQorICAt IFJlbW92ZSAtLXdpdGgtbGctdGlueS1taW4uICAoQGphc29uZSkKKyAgLSBSZW1vdmUgLS1kaXNh YmxlLWNjLXNpbGVuY2UuICAoQGphc29uZSkKKyAgLSBSZW1vdmUgLS1lbmFibGUtY29kZS1jb3Zl cmFnZS4gIChAamFzb25lKQorICAtIFJlbW92ZSAtLWRpc2FibGUtbXVubWFwIChyZXBsYWNlZCBi eSBvcHQucmV0YWluKS4gIChAamFzb25lKQorICAtIFJlbW92ZSBWYWxncmluZCBzdXBwb3J0LiAg KEBqYXNvbmUpCisgIC0gUmVtb3ZlIHF1YXJhbnRpbmUgc3VwcG9ydC4gIChAamFzb25lKQorICAt IFJlbW92ZSByZWR6b25lIHN1cHBvcnQuICAoQGphc29uZSkKKyAgLSBSZW1vdmUgbWFsbGN0bCBp bnRlcmZhY2VzICh2YXJpb3VzIGF1dGhvcnMpOgorICAgICsgY29uZmlnLm11bm1hcAorICAgICsg Y29uZmlnLnRjYWNoZQorICAgICsgY29uZmlnLnRscworICAgICsgY29uZmlnLnZhbGdyaW5kCisg ICAgKyBvcHQubGdfY2h1bmsKKyAgICArIG9wdC5wdXJnZQorICAgICsgb3B0LmxnX2RpcnR5X211 bHQKKyAgICArIG9wdC5kZWNheV90aW1lCisgICAgKyBvcHQucXVhcmFudGluZQorICAgICsgb3B0 LnJlZHpvbmUKKyAgICArIG9wdC50aHAKKyAgICArIGFyZW5hLjxpPi5sZ19kaXJ0eV9tdWx0Cisg ICAgKyBhcmVuYS48aT4uZGVjYXlfdGltZQorICAgICsgYXJlbmEuPGk+LmNodW5rX2hvb2tzCisg ICAgKyBhcmVuYXMuaW5pdGlhbGl6ZWQKKyAgICArIGFyZW5hcy5sZ19kaXJ0eV9tdWx0CisgICAg KyBhcmVuYXMuZGVjYXlfdGltZQorICAgICsgYXJlbmFzLmJpbi48aT4ucnVuX3NpemUKKyAgICAr IGFyZW5hcy5ubHJ1bnMKKyAgICArIGFyZW5hcy5scnVuLjxpPi5zaXplCisgICAgKyBhcmVuYXMu bmhjaHVua3MKKyAgICArIGFyZW5hcy5oY2h1bmsuPGk+LnNpemUKKyAgICArIGFyZW5hcy5leHRl bmQKKyAgICArIHN0YXRzLmNhY3RpdmUKKyAgICArIHN0YXRzLmFyZW5hcy48aT4ubGdfZGlydHlf bXVsdAorICAgICsgc3RhdHMuYXJlbmFzLjxpPi5kZWNheV90aW1lCisgICAgKyBzdGF0cy5hcmVu YXMuPGk+Lm1ldGFkYXRhLnttYXBwZWQsYWxsb2NhdGVkfQorICAgICsgc3RhdHMuYXJlbmFzLjxp Pi57bnB1cmdlLG5tYWR2aXNlLHB1cmdlZH0KKyAgICArIHN0YXRzLmFyZW5hcy48aT4uaHVnZS57 YWxsb2NhdGVkLG5tYWxsb2MsbmRhbGxvYyxucmVxdWVzdHN9CisgICAgKyBzdGF0cy5hcmVuYXMu PGk+LmJpbnMuPGo+LntucnVucyxyZXJ1bnMsY3VycnVuc30KKyAgICArIHN0YXRzLmFyZW5hcy48 aT4ubHJ1bnMuPGo+LntubWFsbG9jLG5kYWxsb2MsbnJlcXVlc3RzLGN1cnJ1bnN9CisgICAgKyBz dGF0cy5hcmVuYXMuPGk+LmhjaHVua3MuPGo+LntubWFsbG9jLG5kYWxsb2MsbnJlcXVlc3RzLGN1 cmhjaHVua3N9CisKKyAgQnVnIGZpeGVzOgorICAtIEltcHJvdmUgaW50ZXJ2YWwtYmFzZWQgcHJv ZmlsZSBkdW1wIHRyaWdnZXJpbmcgdG8gZHVtcCBvbmx5IG9uZSBwcm9maWxlIHdoZW4KKyAgICBh IHNpbmdsZSBhbGxvY2F0aW9uJ3Mgc2l6ZSBleGNlZWRzIHRoZSBpbnRlcnZhbC4gIChAamFzb25l KQorICAtIFVzZSBwcmVmaXhlZCBmdW5jdGlvbiBuYW1lcyAoYXMgY29udHJvbGxlZCBieSAtLXdp dGgtamVtYWxsb2MtcHJlZml4KSB3aGVuCisgICAgcHJ1bmluZyBiYWNrdHJhY2UgZnJhbWVzIGlu IGplcHJvZi4gIChAamFzb25lKQorCisqIDQuNS4wIChGZWJydWFyeSAyOCwgMjAxNykKKworICBU aGlzIGlzIHRoZSBmaXJzdCByZWxlYXNlIHRvIGJlbmVmaXQgZnJvbSBtdWNoIGJyb2FkZXIgY29u dGludW91cyBpbnRlZ3JhdGlvbgorICB0ZXN0aW5nLCB0aGFua3MgdG8gQGRhdmlkdGdvbGRibGF0 dC4gIEhhZCB3ZSBoYWQgdGhpcyB0ZXN0aW5nIGluZnJhc3RydWN0dXJlCisgIGluIHBsYWNlIGZv ciBwcmlvciByZWxlYXNlcywgaXQgd291bGQgaGF2ZSBjYXVnaHQgYWxsIG9mIHRoZSBtb3N0IHNl cmlvdXMKKyAgcmVncmVzc2lvbnMgZml4ZWQgYnkgdGhpcyByZWxlYXNlLgorCisgIE5ldyBmZWF0 dXJlczoKKyAgLSBBZGQgLS1kaXNhYmxlLXRocCBhbmQgdGhlIG9wdC50aHAgbWFsbGN0bCB0byBw cm92aWRlIG9wdC1vdXQgbWVjaGFuaXNtcyBmb3IKKyAgICB0cmFuc3BhcmVudCBodWdlIHBhZ2Ug aW50ZWdyYXRpb24uICAoQGphc29uZSkKKyAgLSBVcGRhdGUgem9uZSBhbGxvY2F0b3IgaW50ZWdy YXRpb24gdG8gd29yayB3aXRoIG1hY09TIDEwLjEyLiAgKEBnbGFuZGl1bSkKKyAgLSBSZXN0cnVj dHVyZSAqQ0ZMQUdTIGNvbmZpZ3VyYXRpb24sIHNvIHRoYXQgQ0ZMQUdTIGJlaGF2ZXMgdHlwaWNh bGx5LCBhbmQKKyAgICBFWFRSQV9DRkxBR1MgcHJvdmlkZXMgYSB3YXkgdG8gc3BlY2lmeSBlLmcu IC1XZXJyb3IgZHVyaW5nIGJ1aWxkaW5nLCBidXQgbm90CisgICAgZHVyaW5nIGNvbmZpZ3VyYXRp b24uICAoQGphc29uZSwgQHJvbmF3aG8pCisKKyAgQnVnIGZpeGVzOgorICAtIEZpeCBEU1MgKHNi cmsoMiktYmFzZWQpIGFsbG9jYXRpb24uICBUaGlzIHJlZ3Jlc3Npb24gd2FzIGZpcnN0IHJlbGVh c2VkIGluCisgICAgNC4zLjAuICAoQGphc29uZSkKKyAgLSBIYW5kbGUgcmFjZSBpbiBwZXIgc2l6 ZSBjbGFzcyB1dGlsaXphdGlvbiBjb21wdXRhdGlvbi4gIFRoaXMgZnVuY3Rpb25hbGl0eQorICAg IHdhcyBmaXJzdCByZWxlYXNlZCBpbiA0LjAuMC4gIChAaW50ZXJ3cSkKKyAgLSBGaXggbG9jayBv cmRlciByZXZlcnNhbCBkdXJpbmcgZ2R1bXAuICAoQGphc29uZSkKKyAgLSBGaXgvcmVmYWN0b3Ig dGNhY2hlIHN5bmNocm9uaXphdGlvbi4gIFRoaXMgcmVncmVzc2lvbiB3YXMgZmlyc3QgcmVsZWFz ZWQgaW4KKyAgICA0LjAuMC4gIChAamFzb25lKQorICAtIEZpeCB2YXJpb3VzIEpTT04tZm9ybWF0 dGVkIG1hbGxvY19zdGF0c19wcmludCgpIGJ1Z3MuICBUaGlzIGZ1bmN0aW9uYWxpdHkKKyAgICB3 YXMgZmlyc3QgcmVsZWFzZWQgaW4gNC4zLjAuICAoQGphc29uZSkKKyAgLSBGaXggaHVnZS1hbGln bmVkIGFsbG9jYXRpb24uICBUaGlzIHJlZ3Jlc3Npb24gd2FzIGZpcnN0IHJlbGVhc2VkIGluIDQu NC4wLgorICAgIChAamFzb25lKQorICAtIFdoZW4gdHJhbnNwYXJlbnQgaHVnZSBwYWdlIGludGVn cmF0aW9uIGlzIGVuYWJsZWQsIGRldGVjdCB3aGF0IHN0YXRlIHBhZ2VzCisgICAgc3RhcnQgaW4g YWNjb3JkaW5nIHRvIHRoZSBrZXJuZWwncyBjdXJyZW50IG9wZXJhdGluZyBtb2RlLCBhbmQgb25s eSBjb252ZXJ0CisgICAgYXJlbmEgY2h1bmtzIHRvIG5vbi1odWdlIGR1cmluZyBwdXJnaW5nIGlm IHRoYXQgaXMgbm90IHRoZWlyIGluaXRpYWwgc3RhdGUuCisgICAgVGhpcyBmdW5jdGlvbmFsaXR5 IHdhcyBmaXJzdCByZWxlYXNlZCBpbiA0LjQuMC4gIChAamFzb25lKQorICAtIEZpeCBsZ19jaHVu ayBjbGFtcGluZyBmb3IgdGhlIC0tZW5hYmxlLWNhY2hlLW9ibGl2aW91cyAtLWRpc2FibGUtZmls bCBjYXNlLgorICAgIFRoaXMgcmVncmVzc2lvbiB3YXMgZmlyc3QgcmVsZWFzZWQgaW4gNC4wLjAu ICAoQGphc29uZSwgQDQyOGRlc21vKQorICAtIFByb3Blcmx5IGRldGVjdCBzcGFyYzY0IHdoZW4g YnVpbGRpbmcgZm9yIExpbnV4LiAgKEBnbGF1Yml0eikKKworKiA0LjQuMCAoRGVjZW1iZXIgMywg MjAxNikKKworICBOZXcgZmVhdHVyZXM6CisgIC0gQWRkIGNvbmZpZ3VyZSBzdXBwb3J0IGZvciAq LSotbGludXgtYW5kcm9pZC4gIChAY2ZlcnJpczEwMDAsIEBqYXNvbmUpCisgIC0gQWRkIHRoZSAt LWRpc2FibGUtc3lzY2FsbCBjb25maWd1cmUgb3B0aW9uLCBmb3IgdXNlIG9uIHN5c3RlbXMgdGhh dCBwbGFjZQorICAgIHNlY3VyaXR5LW1vdGl2YXRlZCBsaW1pdGF0aW9ucyBvbiBzeXNjYWxsKDIp LiAgKEBqYXNvbmUpCisgIC0gQWRkIHN1cHBvcnQgZm9yIERlYmlhbiBHTlUva0ZyZWVCU0QuICAo QHRoZXNhbSkKKworICBPcHRpbWl6YXRpb25zOgorICAtIEFkZCBleHRlbnQgc2VyaWFsIG51bWJl cnMgYW5kIHVzZSB0aGVtIHdoZXJlIGFwcHJvcHJpYXRlIGFzIGEgc29ydCBrZXkgdGhhdAorICAg IGlzIGhpZ2hlciBwcmlvcml0eSB0aGFuIGFkZHJlc3MsIHNvIHRoYXQgdGhlIGFsbG9jYXRpb24g cG9saWN5IHByZWZlcnMgb2xkZXIKKyAgICBleHRlbnRzLiAgVGhpcyB0ZW5kcyB0byBpbXByb3Zl IGxvY2FsaXR5IChkZWNyZWFzZSBmcmFnbWVudGF0aW9uKSB3aGVuCisgICAgbWVtb3J5IGdyb3dz IGRvd253YXJkLiAgKEBqYXNvbmUpCisgIC0gUmVmYWN0b3IgbWFkdmlzZSgyKSBjb25maWd1cmF0 aW9uIHNvIHRoYXQgTUFEVl9GUkVFIGlzIGRldGVjdGVkIGFuZCB1dGlsaXplZAorICAgIG9uIExp bnV4IDQuNSBhbmQgbmV3ZXIuICAoQGphc29uZSkKKyAgLSBNYXJrIHBhcnRpYWxseSBwdXJnZWQg YXJlbmEgY2h1bmtzIGFzIG5vbi1odWdlLXBhZ2UuICBUaGlzIGltcHJvdmVzCisgICAgaW50ZXJh Y3Rpb24gd2l0aCBMaW51eCdzIHRyYW5zcGFyZW50IGh1Z2UgcGFnZSBmdW5jdGlvbmFsaXR5LiAg KEBqYXNvbmUpCisKKyAgQnVnIGZpeGVzOgorICAtIEZpeCBzaXplIGNsYXNzIGNvbXB1dGF0aW9u cyBmb3IgZWRnZSBjb25kaXRpb25zIGludm9sdmluZyBleHRyZW1lbHkgbGFyZ2UKKyAgICBhbGxv Y2F0aW9ucy4gIFRoaXMgcmVncmVzc2lvbiB3YXMgZmlyc3QgcmVsZWFzZWQgaW4gNC4wLjAuICAo QGphc29uZSwKKyAgICBAaW5ndmFyaGEpCisgIC0gUmVtb3ZlIG92ZXJseSByZXN0cmljdGl2ZSBh c3NlcnRpb25zIHJlbGF0ZWQgdG8gdGhlIGNhY3RpdmUgc3RhdGlzdGljLiAgVGhpcworICAgIHJl Z3Jlc3Npb24gd2FzIGZpcnN0IHJlbGVhc2VkIGluIDQuMS4wLiAgKEBqYXNvbmUpCisgIC0gSW1w bGVtZW50IGEgbW9yZSByZWxpYWJsZSBkZXRlY3Rpb24gc2NoZW1lIGZvciBvc191bmZhaXJfbG9j ayBvbiBtYWNPUy4KKyAgICAoQGpzemFrbWVpc3RlcikKKworKiA0LjMuMSAoTm92ZW1iZXIgNywg MjAxNikKKworICBCdWcgZml4ZXM6CisgIC0gRml4IGEgc2V2ZXJlIHZpcnR1YWwgbWVtb3J5IGxl YWsuICBUaGlzIHJlZ3Jlc3Npb24gd2FzIGZpcnN0IHJlbGVhc2VkIGluCisgICAgNC4zLjAuICAo QGludGVyd3EsIEBqYXNvbmUpCisgIC0gUmVmYWN0b3IgYXRvbWljIGFuZCBwcm5nIEFQSXMgdG8g cmVzdG9yZSBzdXBwb3J0IGZvciAzMi1iaXQgcGxhdGZvcm1zIHRoYXQKKyAgICB1c2UgcHJlLUMx MSB0b29sY2hhaW5zLCBlLmcuIEZyZWVCU0QncyBtaXBzLiAgKEBqYXNvbmUpCisKKyogNC4zLjAg KE5vdmVtYmVyIDQsIDIwMTYpCisKKyAgVGhpcyBpcyB0aGUgZmlyc3QgcmVsZWFzZSB0aGF0IHBh c3NlcyB0aGUgdGVzdCBzdWl0ZSBmb3IgbXVsdGlwbGUgV2luZG93cworICBjb25maWd1cmF0aW9u cywgdGhhbmtzIGluIGxhcmdlIHBhcnQgdG8gQGdsYW5kaXVtIHNldHRpbmcgdXAgY29udGludW91 cworICBpbnRlZ3JhdGlvbiB2aWEgQXBwVmV5b3IgKGFuZCBUcmF2aXMgQ0kgZm9yIExpbnV4IGFu ZCBPUyBYKS4KKworICBOZXcgZmVhdHVyZXM6CisgIC0gQWRkICJKIiAoSlNPTikgc3VwcG9ydCB0 byBtYWxsb2Nfc3RhdHNfcHJpbnQoKS4gIChAamFzb25lKQorICAtIEFkZCBDcmF5IGNvbXBpbGVy IHN1cHBvcnQuICAoQHJvbmF3aG8pCisKKyAgT3B0aW1pemF0aW9uczoKKyAgLSBBZGQvdXNlIGFk YXB0aXZlIHNwaW5uaW5nIGZvciBib290c3RyYXBwaW5nIGFuZCByYWRpeCB0cmVlIG5vZGUKKyAg ICBpbml0aWFsaXphdGlvbi4gIChAamFzb25lKQorCisgIEJ1ZyBmaXhlczoKKyAgLSBGaXggbGFy Z2UgYWxsb2NhdGlvbiB0byBzZWFyY2ggc3RhcnRpbmcgaW4gdGhlIG9wdGltYWwgc2l6ZSBjbGFz cyBoZWFwLAorICAgIHdoaWNoIGNhbiBzdWJzdGFudGlhbGx5IHJlZHVjZSB2aXJ0dWFsIG1lbW9y eSBjaHVybiBhbmQgZnJhZ21lbnRhdGlvbi4gIFRoaXMKKyAgICByZWdyZXNzaW9uIHdhcyBmaXJz dCByZWxlYXNlZCBpbiA0LjAuMC4gIChAbWpwNDEsIEBqYXNvbmUpCisgIC0gRml4IHN0YXRzLmFy ZW5hcy48aT4ubnRocmVhZHMgYWNjb3VudGluZy4gIChAaW50ZXJ3cSkKKyAgLSBGaXggYW5kIHNp bXBsaWZ5IGRlY2F5LWJhc2VkIHB1cmdpbmcuICAoQGphc29uZSkKKyAgLSBNYWtlIERTUyAoc2Jy aygyKS1yZWxhdGVkKSBvcGVyYXRpb25zIGxvY2tsZXNzLCB3aGljaCByZXNvbHZlcyBwb3RlbnRp YWwKKyAgICBkZWFkbG9ja3MgZHVyaW5nIHRocmVhZCBleGl0LiAgKEBqYXNvbmUpCisgIC0gRml4 IG92ZXItc2l6ZWQgYWxsb2NhdGlvbiBvZiByYWRpeCB0cmVlIGxlYWYgbm9kZXMuICAoQG1qcDQx LCBAb2dhdW4sCisgICAgQGphc29uZSkKKyAgLSBGaXggb3Zlci1zaXplZCBhbGxvY2F0aW9uIG9m IGFyZW5hX3QgKHBsdXMgYXNzb2NpYXRlZCBzdGF0cykgZGF0YQorICAgIHN0cnVjdHVyZXMuICAo QGphc29uZSwgQGludGVyd3EpCisgIC0gRml4IEVYVFJBX0NGTEFHUyB0byBub3QgYWZmZWN0IGNv bmZpZ3VyYXRpb24uICAoQGphc29uZSkKKyAgLSBGaXggYSBWYWxncmluZCBpbnRlZ3JhdGlvbiBi dWcuICAoQHJvbmF3aG8pCisgIC0gRGlzYWxsb3cgMHg1YSBqdW5rIGZpbGxpbmcgd2hlbiBydW5u aW5nIGluIFZhbGdyaW5kLiAgKEBqYXNvbmUpCisgIC0gRml4IGEgZmlsZSBkZXNjcmlwdG9yIGxl YWsgb24gTGludXguICBUaGlzIHJlZ3Jlc3Npb24gd2FzIGZpcnN0IHJlbGVhc2VkIGluCisgICAg NC4yLjAuICAoQHZzYXJ1bmFzLCBAamFzb25lKQorICAtIEZpeCBzdGF0aWMgbGlua2luZyBvZiBq ZW1hbGxvYyB3aXRoIGdsaWJjLiAgKEBkandhdHNvbikKKyAgLSBVc2Ugc3lzY2FsbCgyKSByYXRo ZXIgdGhhbiB7b3BlbixyZWFkLGNsb3NlfSgyKSBkdXJpbmcgYm9vdCBvbiBMaW51eC4gIFRoaXMK KyAgICB3b3JrcyBhcm91bmQgb3RoZXIgbGlicmFyaWVzJyBzeXN0ZW0gY2FsbCB3cmFwcGVycyBw ZXJmb3JtaW5nIHJlZW50cmFudAorICAgIGFsbG9jYXRpb24uICAoQGtzcGlua2EsIEBXaGlzc2ks IEBqYXNvbmUpCisgIC0gRml4IE9TIFggZGVmYXVsdCB6b25lIHJlcGxhY2VtZW50IHRvIHdvcmsg d2l0aCBPUyBYIDEwLjEyLiAgKEBnbGFuZGl1bSwKKyAgICBAamFzb25lKQorICAtIEZpeCBjYWNo ZWQgbWVtb3J5IG1hbmFnZW1lbnQgdG8gYXZvaWQgbmVlZGxlc3MgY29tbWl0L2RlY29tbWl0IG9w ZXJhdGlvbnMKKyAgICBkdXJpbmcgcHVyZ2luZywgd2hpY2ggcmVzb2x2ZXMgcGVybWFuZW50IHZp cnR1YWwgbWVtb3J5IG1hcCBmcmFnbWVudGF0aW9uCisgICAgaXNzdWVzIG9uIFdpbmRvd3MuICAo QG1qcDQxLCBAamFzb25lKQorICAtIEZpeCBUU0QgZmV0Y2hlcyB0byBhdm9pZCAocmVjdXJzaXZl KSBhbGxvY2F0aW9uLiAgVGhpcyBpcyByZWxldmFudCB0bworICAgIG5vbi1UTFMgYW5kIFdpbmRv d3MgY29uZmlndXJhdGlvbnMuICAoQGphc29uZSkKKyAgLSBGaXggbWFsbG9jX2NvbmYgb3ZlcnJp ZGluZyB0byB3b3JrIG9uIFdpbmRvd3MuICAoQGphc29uZSkKKyAgLSBGb3JjaWJseSBkaXNhYmxl IGxhenktbG9jayBvbiBXaW5kb3dzICh3YXMgZm9yY2libHkgKmVuYWJsZWQqKS4gIChAamFzb25l KQorCisqIDQuMi4xIChKdW5lIDgsIDIwMTYpCisKKyAgQnVnIGZpeGVzOgorICAtIEZpeCBib290 c3RyYXBwaW5nIGlzc3VlcyBmb3IgY29uZmlndXJhdGlvbnMgdGhhdCByZXF1aXJlIGFsbG9jYXRp b24gZHVyaW5nCisgICAgdHNkIGluaXRpYWxpemF0aW9uIChlLmcuIC0tZGlzYWJsZS10bHMpLiAg KEBjZmVycmlzMTAwMCwgQGphc29uZSkKKyAgLSBGaXggZ2V0dGltZW9mZGF5KCkgdmVyc2lvbiBv ZiBuc3RpbWVfdXBkYXRlKCkuICAoQHJvbmF3aG8pCisgIC0gRml4IFZhbGdyaW5kIHJlZ3Jlc3Np b25zIGluIGNhbGxvYygpIGFuZCBjaHVua19hbGxvY193cmFwcGVyKCkuICAoQHJvbmF3aG8pCisg IC0gRml4IHBvdGVudGlhbCBWTSBtYXAgZnJhZ21lbnRhdGlvbiByZWdyZXNzaW9uLiAgKEBqYXNv bmUpCisgIC0gRml4IG9wdF96ZXJvLXRyaWdnZXJlZCBpbi1wbGFjZSBodWdlIHJlYWxsb2NhdGlv biB6ZXJvaW5nLiAgKEBqYXNvbmUpCisgIC0gRml4IGhlYXAgcHJvZmlsaW5nIGNvbnRleHQgbGVh a3MgaW4gcmVhbGxvY2F0aW9uIGVkZ2UgY2FzZXMuICAoQGphc29uZSkKKworKiA0LjIuMCAoTWF5 IDEyLCAyMDE2KQorCisgIE5ldyBmZWF0dXJlczoKKyAgLSBBZGQgdGhlIGFyZW5hLjxpPi5yZXNl dCBtYWxsY3RsLCB3aGljaCBtYWtlcyBpdCBwb3NzaWJsZSB0byBkaXNjYXJkIGFsbCBvZgorICAg IGFuIGFyZW5hJ3MgYWxsb2NhdGlvbnMgaW4gYSBzaW5nbGUgb3BlcmF0aW9uLiAgKEBqYXNvbmUp CisgIC0gQWRkIHRoZSBzdGF0cy5yZXRhaW5lZCBhbmQgc3RhdHMuYXJlbmFzLjxpPi5yZXRhaW5l ZCBzdGF0aXN0aWNzLiAgKEBqYXNvbmUpCisgIC0gQWRkIHRoZSAtLXdpdGgtdmVyc2lvbiBjb25m aWd1cmUgb3B0aW9uLiAgKEBqYXNvbmUpCisgIC0gU3VwcG9ydCAtLXdpdGgtbGctcGFnZSB2YWx1 ZXMgbGFyZ2VyIHRoYW4gYWN0dWFsIHBhZ2Ugc2l6ZS4gIChAamFzb25lKQorCisgIE9wdGltaXph dGlvbnM6CisgIC0gVXNlIHBhaXJpbmcgaGVhcHMgcmF0aGVyIHRoYW4gcmVkLWJsYWNrIHRyZWVz IGZvciB2YXJpb3VzIGhvdCBkYXRhCisgICAgc3RydWN0dXJlcy4gIChAZGp3YXRzb24sIEBqYXNv bmUpCisgIC0gU3RyZWFtbGluZSBmYXN0IHBhdGhzIG9mIHJ0cmVlIG9wZXJhdGlvbnMuICAoQGph c29uZSkKKyAgLSBPcHRpbWl6ZSB0aGUgZmFzdCBwYXRocyBvZiBjYWxsb2MoKSBhbmQgW20sZCxz ZF1hbGxvY3goKS4gIChAamFzb25lKQorICAtIERlY29tbWl0IHVudXNlZCB2aXJ0dWFsIG1lbW9y eSBpZiB0aGUgT1MgZG9lcyBub3Qgb3ZlcmNvbW1pdC4gIChAamFzb25lKQorICAtIFNwZWNpZnkg TUFQX05PUkVTRVJWRSBvbiBMaW51eCBpZiBbaGV1cmlzdGljXSBvdmVyY29tbWl0IGlzIGFjdGl2 ZSwgaW4gb3JkZXIKKyAgICB0byBhdm9pZCB1bmZvcnR1bmF0ZSBpbnRlcmFjdGlvbnMgZHVyaW5n IGZvcmsoMikuICAoQGphc29uZSkKKworICBCdWcgZml4ZXM6CisgIC0gRml4IGNodW5rIGFjY291 bnRpbmcgcmVsYXRlZCB0byB0cmlnZ2VyaW5nIGdkdW1wIHByb2ZpbGVzLiAgKEBqYXNvbmUpCisg IC0gTGluayBhZ2FpbnN0IGxpYnJ0IGZvciBjbG9ja19nZXR0aW1lKDIpIGlmIGdsaWJjIDwgMi4x Ny4gIChAamFzb25lKQorICAtIFNjYWxlIGxlYWsgcmVwb3J0IHN1bW1hcnkgYWNjb3JkaW5nIHRv IHNhbXBsaW5nIHByb2JhYmlsaXR5LiAgKEBqYXNvbmUpCisKKyogNC4xLjEgKE1heSAzLCAyMDE2 KQorCisgIFRoaXMgYnVnZml4IHJlbGVhc2UgcmVzb2x2ZXMgYSB2YXJpZXR5IG9mIG1vc3RseSBt aW5vciBpc3N1ZXMsIHRob3VnaCB0aGUKKyAgYml0bWFwIGZpeCBpcyBjcml0aWNhbCBmb3IgNjQt Yml0IFdpbmRvd3MuCisKKyAgQnVnIGZpeGVzOgorICAtIEZpeCB0aGUgbGluZWFyIHNjYW4gdmVy c2lvbiBvZiBiaXRtYXBfc2Z1KCkgdG8gc2hpZnQgYnkgdGhlIHByb3BlciBhbW91bnQKKyAgICBl dmVuIHdoZW4gc2l6ZW9mKGxvbmcpIGlzIG5vdCB0aGUgc2FtZSBhcyBzaXplb2Yodm9pZCAqKSwg YXMgb24gNjQtYml0CisgICAgV2luZG93cy4gIChAamFzb25lKQorICAtIEZpeCBoYXNoaW5nIGZ1 bmN0aW9ucyB0byBhdm9pZCB1bmFsaWduZWQgbWVtb3J5IGFjY2Vzc2VzIChhbmQgcmVzdWx0aW5n CisgICAgY3Jhc2hlcykuICBUaGlzIGlzIHJlbGV2YW50IGF0IGxlYXN0IHRvIHNvbWUgQVJNLWJh c2VkIHBsYXRmb3Jtcy4KKyAgICAoQHJrbWlzcmEpCisgIC0gRml4IGZvcmsoKS1yZWxhdGVkIGxv Y2sgcmFuayBvcmRlcmluZyByZXZlcnNhbHMuICBUaGVzZSByZXZlcnNhbHMgd2VyZQorICAgIHVu bGlrZWx5IHRvIGNhdXNlIGRlYWRsb2NrcyBpbiBwcmFjdGljZSBleGNlcHQgd2hlbiBoZWFwIHBy b2ZpbGluZyB3YXMKKyAgICBlbmFibGVkIGFuZCBhY3RpdmUuICAoQGphc29uZSkKKyAgLSBGaXgg dmFyaW91cyBjaHVuayBsZWFrcyBpbiBPT00gY29kZSBwYXRocy4gIChAamFzb25lKQorICAtIEZp eCBtYWxsb2Nfc3RhdHNfcHJpbnQoKSB0byBwcmludCBvcHQubmFyZW5hcyBjb3JyZWN0bHkuICAo QGphc29uZSkKKyAgLSBGaXggTVNWQy1zcGVjaWZpYyBidWlsZC90ZXN0IGlzc3Vlcy4gIChAcnVz dHl4LCBAeXVzbGVwdWtoaW4pCisgIC0gRml4IGEgdmFyaWV0eSBvZiB0ZXN0IGZhaWx1cmVzIHRo YXQgd2VyZSBkdWUgdG8gdGVzdCBmcmFnaWxpdHkgcmF0aGVyIHRoYW4KKyAgICBjb3JlIGJ1Z3Mu ICAoQGphc29uZSkKKworKiA0LjEuMCAoRmVicnVhcnkgMjgsIDIwMTYpCisKKyAgVGhpcyByZWxl YXNlIGlzIHByaW1hcmlseSBhYm91dCBvcHRpbWl6YXRpb25zLCBidXQgaXQgYWxzbyBpbmNvcnBv cmF0ZXMgYSBsb3QKKyAgb2YgcG9ydGFiaWxpdHktbW90aXZhdGVkIHJlZmFjdG9yaW5nIGFuZCBl bmhhbmNlbWVudHMuICBNYW55IHBlb3BsZSB3b3JrZWQgb24KKyAgdGhpcyByZWxlYXNlLCB0byBh biBleHRlbnQgdGhhdCBldmVuIHdpdGggdGhlIG9taXNzaW9uIGhlcmUgb2YgbWlub3IgY2hhbmdl cworICAoc2VlIGdpdCByZXZpc2lvbiBoaXN0b3J5KSwgYW5kIG9mIHRoZSBwZW9wbGUgd2hvIHJl cG9ydGVkIGFuZCBkaWFnbm9zZWQKKyAgaXNzdWVzLCBzbyBtdWNoIG9mIHRoZSB3b3JrIHdhcyBj b250cmlidXRlZCB0aGF0IHN0YXJ0aW5nIHdpdGggdGhpcyByZWxlYXNlLAorICBjaGFuZ2VzIGFy ZSBhbm5vdGF0ZWQgd2l0aCBhdXRob3IgY3JlZGl0cyB0byBoZWxwIHJlZmxlY3QgdGhlIGNvbGxh Ym9yYXRpdmUKKyAgZWZmb3J0IGludm9sdmVkLgorCisgIE5ldyBmZWF0dXJlczoKKyAgLSBJbXBs ZW1lbnQgZGVjYXktYmFzZWQgdW51c2VkIGRpcnR5IHBhZ2UgcHVyZ2luZywgYSBtYWpvciBvcHRp bWl6YXRpb24gd2l0aAorICAgIG1hbGxjdGwgQVBJIGltcGFjdC4gIFRoaXMgaXMgYW4gYWx0ZXJu YXRpdmUgdG8gdGhlIGV4aXN0aW5nIHJhdGlvLWJhc2VkCisgICAgdW51c2VkIGRpcnR5IHBhZ2Ug cHVyZ2luZywgYW5kIGlzIGludGVuZGVkIHRvIGV2ZW50dWFsbHkgYmVjb21lIHRoZSBzb2xlCisg ICAgcHVyZ2luZyBtZWNoYW5pc20uICBOZXcgbWFsbGN0bHM6CisgICAgKyBvcHQucHVyZ2UKKyAg ICArIG9wdC5kZWNheV90aW1lCisgICAgKyBhcmVuYS48aT4uZGVjYXkKKyAgICArIGFyZW5hLjxp Pi5kZWNheV90aW1lCisgICAgKyBhcmVuYXMuZGVjYXlfdGltZQorICAgICsgc3RhdHMuYXJlbmFz LjxpPi5kZWNheV90aW1lCisgICAgKEBqYXNvbmUsIEBjZXZhbnM4NykKKyAgLSBBZGQgLS13aXRo LW1hbGxvYy1jb25mLCB3aGljaCBtYWtlcyBpdCBwb3NzaWJsZSB0byBlbWJlZCBhIGRlZmF1bHQK KyAgICBvcHRpb25zIHN0cmluZyBkdXJpbmcgY29uZmlndXJhdGlvbi4gIFRoaXMgd2FzIG1vdGl2 YXRlZCBieSB0aGUgZGVzaXJlIHRvCisgICAgc3BlY2lmeSAtLXdpdGgtbWFsbG9jLWNvbmY9cHVy Z2U6ZGVjYXkgLCBzaW5jZSB0aGUgZGVmYXVsdCBtdXN0IHJlbWFpbgorICAgIHB1cmdlOnJhdGlv IHVudGlsIHRoZSA1LjAuMCByZWxlYXNlLiAgKEBqYXNvbmUpCisgIC0gQWRkIE1TIFZpc3VhbCBT dHVkaW8gMjAxNSBzdXBwb3J0LiAgKEBydXN0eXgsIEB5dXNsZXB1a2hpbikKKyAgLSBNYWtlICph bGxvY3goKSBzaXplIGNsYXNzIG92ZXJmbG93IGJlaGF2aW9yIGRlZmluZWQuICBUaGUgbWF4aW11 bQorICAgIHNpemUgY2xhc3MgaXMgbm93IGxlc3MgdGhhbiBQVFJESUZGX01BWCB0byBwcm90ZWN0 IGFwcGxpY2F0aW9ucyBhZ2FpbnN0CisgICAgbnVtZXJpY2FsIG92ZXJmbG93LCBhbmQgYWxsIGFs bG9jYXRpb24gZnVuY3Rpb25zIGFyZSBndWFyYW50ZWVkIHRvIGluZGljYXRlCisgICAgZXJyb3Jz IHJhdGhlciB0aGFuIHBvdGVudGlhbGx5IGNyYXNoaW5nIGlmIHRoZSByZXF1ZXN0IHNpemUgZXhj ZWVkcyB0aGUKKyAgICBtYXhpbXVtIHNpemUgY2xhc3MuICAoQGphc29uZSkKKyAgLSBqZXByb2Y6 CisgICAgKyBBZGQgcmF3IGhlYXAgcHJvZmlsZSBzdXBwb3J0LiAgKEBqYXNvbmUpCisgICAgKyBB ZGQgLS1yZXRhaW4gYW5kIC0tZXhjbHVkZSBmb3IgYmFja3RyYWNlIHN5bWJvbCBmaWx0ZXJpbmcu ICAoQGphc29uZSkKKworICBPcHRpbWl6YXRpb25zOgorICAtIE9wdGltaXplIHRoZSBmYXN0IHBh dGggdG8gY29tYmluZSB2YXJpb3VzIGJvb3RzdHJhcHBpbmcgYW5kIGNvbmZpZ3VyYXRpb24KKyAg ICBjaGVja3MgYW5kIGV4ZWN1dGUgbW9yZSBzdHJlYW1saW5lZCBjb2RlIGluIHRoZSBjb21tb24g Y2FzZS4gIChAaW50ZXJ3cSkKKyAgLSBVc2UgbGluZWFyIHNjYW4gZm9yIHNtYWxsIGJpdG1hcHMg KHVzZWQgZm9yIHNtYWxsIG9iamVjdCB0cmFja2luZykuICBJbgorICAgIGFkZGl0aW9uIHRvIHNw ZWVkaW5nIHVwIGJpdG1hcCBvcGVyYXRpb25zIG9uIDY0LWJpdCBzeXN0ZW1zLCB0aGlzIHJlZHVj ZXMKKyAgICBhbGxvY2F0b3IgbWV0YWRhdGEgb3ZlcmhlYWQgYnkgYXBwcm94aW1hdGVseSAwLjIl LiAgKEBkandhdHNvbikKKyAgLSBTZXBhcmF0ZSBhcmVuYV9hdmFpbCB0cmVlcywgd2hpY2ggc3Vi c3RhbnRpYWxseSBzcGVlZHMgdXAgcnVuIHRyZWUKKyAgICBvcGVyYXRpb25zLiAgKEBkandhdHNv bikKKyAgLSBVc2UgbWVtb2l6YXRpb24gKGJvb3QtdGltZS1jb21wdXRlZCB0YWJsZSkgZm9yIHJ1 biBxdWFudGl6YXRpb24uICBTZXBhcmF0ZQorICAgIGFyZW5hX2F2YWlsIHRyZWVzIHJlZHVjZWQg dGhlIGltcG9ydGFuY2Ugb2YgdGhpcyBvcHRpbWl6YXRpb24uICAoQGphc29uZSkKKyAgLSBBdHRl bXB0IG1tYXAtYmFzZWQgaW4tcGxhY2UgaHVnZSByZWFsbG9jYXRpb24uICBUaGlzIGNhbiBkcmFt YXRpY2FsbHkgc3BlZWQKKyAgICB1cCBpbmNyZW1lbnRhbCBodWdlIHJlYWxsb2NhdGlvbi4gIChA amFzb25lKQorCisgIEluY29tcGF0aWJsZSBjaGFuZ2VzOgorICAtIE1ha2Ugb3B0Lm5hcmVuYXMg dW5zaWduZWQgcmF0aGVyIHRoYW4gc2l6ZV90LiAgKEBqYXNvbmUpCisKKyAgQnVnIGZpeGVzOgor ICAtIEZpeCBzdGF0cy5jYWN0aXZlIGFjY291bnRpbmcgcmVncmVzc2lvbi4gIChAcnVzdHl4LCBA amFzb25lKQorICAtIEhhbmRsZSB1bmFsaWduZWQga2V5cyBpbiBoYXNoKCkuICBUaGlzIGNhdXNl ZCBwcm9ibGVtcyBmb3Igc29tZSBBUk0gc3lzdGVtcy4KKyAgICAoQGphc29uZSwgQGNmZXJyaXMx MDAwKQorICAtIFJlZmFjdG9yIGFyZW5hcyBhcnJheS4gIEluIGFkZGl0aW9uIHRvIGZpeGluZyBh IGZvcmstcmVsYXRlZCBkZWFkbG9jaywgdGhpcworICAgIG1ha2VzIGFyZW5hIGxvb2t1cHMgZmFz dGVyIGFuZCBzaW1wbGVyLiAgKEBqYXNvbmUpCisgIC0gTW92ZSByZXRhaW5lZCBtZW1vcnkgYWxs b2NhdGlvbiBvdXQgb2YgdGhlIGRlZmF1bHQgY2h1bmsgYWxsb2NhdGlvbgorICAgIGZ1bmN0aW9u LCB0byBhIGxvY2F0aW9uIHRoYXQgZ2V0cyBleGVjdXRlZCBldmVuIGlmIHRoZSBhcHBsaWNhdGlv biBpbnN0YWxscworICAgIGEgY3VzdG9tIGNodW5rIGFsbG9jYXRpb24gZnVuY3Rpb24uICBUaGlz IHJlc29sdmVzIGEgdmlydHVhbCBtZW1vcnkgbGVhay4KKyAgICAoQGJ1Y2hncikKKyAgLSBGaXgg YSBwb3RlbnRpYWwgdHNkIGNsZWFudXAgbGVhay4gIChAY2ZlcnJpczEwMDAsIEBqYXNvbmUpCisg IC0gRml4IHJ1biBxdWFudGl6YXRpb24uICBJbiBwcmFjdGljZSB0aGlzIGJ1ZyBoYWQgbm8gaW1w YWN0IHVubGVzcworICAgIGFwcGxpY2F0aW9ucyByZXF1ZXN0ZWQgbWVtb3J5IHdpdGggYWxpZ25t ZW50IGV4Y2VlZGluZyBvbmUgcGFnZS4KKyAgICAoQGphc29uZSwgQGRqd2F0c29uKQorICAtIEZp eCBMaW51eFRocmVhZHMtc3BlY2lmaWMgYm9vdHN0cmFwcGluZyBkZWFkbG9jay4gIChDb3NtaW4g UGFyYXNjaGl2KQorICAtIGplcHJvZjoKKyAgICArIERvbid0IGRpc2NhcmQgY3VybCBvcHRpb25z IGlmIHRpbWVvdXQgaXMgbm90IGRlZmluZWQuICAoQGRqd2F0c29uKQorICAgICsgRGV0ZWN0IGZh aWxlZCBwcm9maWxlIGZldGNoZXMuICAoQGRqd2F0c29uKQorICAtIEZpeCBzdGF0cy5hcmVuYXMu PGk+Lntkc3MsbGdfZGlydHlfbXVsdCxkZWNheV90aW1lLHBhY3RpdmUscGRpcnR5fSBmb3IKKyAg ICAtLWRpc2FibGUtc3RhdHMgY2FzZS4gIChAamFzb25lKQorCisqIDQuMC40IChPY3RvYmVyIDI0 LCAyMDE1KQorCisgIFRoaXMgYnVnZml4IHJlbGVhc2UgZml4ZXMgYW5vdGhlciB4YWxsb2N4KCkg cmVncmVzc2lvbi4gIE5vIG90aGVyIHJlZ3Jlc3Npb25zCisgIGhhdmUgY29tZSB0byBsaWdodCBp biBvdmVyIGEgbW9udGgsIHNvIHRoaXMgaXMgbGlrZWx5IGEgZ29vZCBzdGFydGluZyBwb2ludAor ICBmb3IgcGVvcGxlIHdobyBwcmVmZXIgdG8gd2FpdCBmb3IgImRvdCBvbmUiIHJlbGVhc2VzIHdp dGggYWxsIHRoZSBtYWpvciBpc3N1ZXMKKyAgc2hha2VuIG91dC4KKworICBCdWcgZml4ZXM6Cisg IC0gRml4IHhhbGxvY3goLi4uLCBNQUxMT0NYX1pFUk8gdG8gemVybyB0aGUgbGFzdCBmdWxsIHRy YWlsaW5nIHBhZ2Ugb2YgbGFyZ2UKKyAgICBhbGxvY2F0aW9ucyB0aGF0IGhhdmUgYmVlbiByYW5k b21seSBhc3NpZ25lZCBhbiBvZmZzZXQgb2YgMCB3aGVuCisgICAgLS1lbmFibGUtY2FjaGUtb2Js aXZpb3VzIGNvbmZpZ3VyZSBvcHRpb24gaXMgZW5hYmxlZC4KKworKiA0LjAuMyAoU2VwdGVtYmVy IDI0LCAyMDE1KQorCisgIFRoaXMgYnVnZml4IHJlbGVhc2UgY29udGludWVzIHRoZSB0cmVuZCBv ZiB4YWxsb2N4KCkgYW5kIGhlYXAgcHJvZmlsaW5nIGZpeGVzLgorCisgIEJ1ZyBmaXhlczoKKyAg LSBGaXggeGFsbG9jeCguLi4sIE1BTExPQ1hfWkVSTykgdG8gemVybyBhbGwgdHJhaWxpbmcgYnl0 ZXMgb2YgbGFyZ2UKKyAgICBhbGxvY2F0aW9ucyB3aGVuIC0tZW5hYmxlLWNhY2hlLW9ibGl2aW91 cyBjb25maWd1cmUgb3B0aW9uIGlzIGVuYWJsZWQuCisgIC0gRml4IHhhbGxvY3goLi4uLCBNQUxM T0NYX1pFUk8pIHRvIHplcm8gdHJhaWxpbmcgYnl0ZXMgb2YgaHVnZSBhbGxvY2F0aW9ucworICAg IHdoZW4gcmVzaXppbmcgZnJvbS90byBhIHNpemUgY2xhc3MgdGhhdCBpcyBub3QgYSBtdWx0aXBs ZSBvZiB0aGUgY2h1bmsgc2l6ZS4KKyAgLSBGaXggcHJvZl90Y3R4X2R1bXBfaXRlcigpIHRvIGZp bHRlciBvdXQgbm9kZXMgdGhhdCB3ZXJlIGNyZWF0ZWQgYWZ0ZXIgaGVhcAorICAgIHByb2ZpbGUg ZHVtcGluZyBzdGFydGVkLgorICAtIFdvcmsgYXJvdW5kIGEgcG90ZW50aWFsbHkgYmFkIHRocmVh ZC1zcGVjaWZpYyBkYXRhIGluaXRpYWxpemF0aW9uCisgICAgaW50ZXJhY3Rpb24gd2l0aCBOUFRM IChnbGliYydzIHB0aHJlYWRzIGltcGxlbWVudGF0aW9uKS4KKworKiA0LjAuMiAoU2VwdGVtYmVy IDIxLCAyMDE1KQorCisgIFRoaXMgYnVnZml4IHJlbGVhc2UgYWRkcmVzc2VzIGEgZmV3IGJ1Z3Mg c3BlY2lmaWMgdG8gaGVhcCBwcm9maWxpbmcuCisKKyAgQnVnIGZpeGVzOgorICAtIEZpeCBpeGFs bG9jeF9wcm9mX3NhbXBsZSgpIHRvIG5ldmVyIG1vZGlmeSBub3IgY3JlYXRlIHNhbXBsZWQgc21h bGwKKyAgICBhbGxvY2F0aW9ucy4gIHhhbGxvY3goKSBpcyBpbiBnZW5lcmFsIGluY2FwYWJsZSBv ZiBtb3Zpbmcgc21hbGwgYWxsb2NhdGlvbnMsCisgICAgc28gdGhpcyBmaXggcmVtb3ZlcyBidWdn eSBjb2RlIHdpdGhvdXQgbG9zcyBvZiBnZW5lcmFsaXR5LgorICAtIEZpeCBpcmFsbG9jeF9wcm9m X3NhbXBsZSgpIHRvIGFsd2F5cyBhbGxvY2F0ZSBsYXJnZSByZWdpb25zLCBldmVuIHdoZW4KKyAg ICBhbGlnbm1lbnQgaXMgbm9uLXplcm8uCisgIC0gRml4IHByb2ZfYWxsb2Nfcm9sbGJhY2soKSB0 byByZWFkIHRkYXRhIGZyb20gdGhyZWFkLXNwZWNpZmljIGRhdGEgcmF0aGVyCisgICAgdGhhbiBk ZXJlZmVyZW5jaW5nIGEgcG90ZW50aWFsbHkgaW52YWxpZCB0Y3R4LgorCisqIDQuMC4xIChTZXB0 ZW1iZXIgMTUsIDIwMTUpCisKKyAgVGhpcyBpcyBhIGJ1Z2ZpeCByZWxlYXNlIHRoYXQgaXMgc29t ZXdoYXQgaGlnaCByaXNrIGR1ZSB0byB0aGUgYW1vdW50IG9mCisgIHJlZmFjdG9yaW5nIHJlcXVp cmVkIHRvIGFkZHJlc3MgZGVlcCB4YWxsb2N4KCkgcHJvYmxlbXMuICBBcyBhIHNpZGUgZWZmZWN0 IG9mCisgIHRoZXNlIGZpeGVzLCB4YWxsb2N4KCkgbm93IHRyaWVzIGhhcmRlciB0byBwYXJ0aWFs bHkgZnVsZmlsbCByZXF1ZXN0cyBmb3IKKyAgb3B0aW9uYWwgZXh0cmEgc3BhY2UuICBOb3RlIHRo YXQgYSBjb3VwbGUgb2YgbWlub3IgaGVhcCBwcm9maWxpbmcKKyAgb3B0aW1pemF0aW9ucyBhcmUg aW5jbHVkZWQsIGJ1dCB0aGVzZSBhcmUgYmV0dGVyIHRob3VnaHQgb2YgYXMgcGVyZm9ybWFuY2UK KyAgZml4ZXMgdGhhdCB3ZXJlIGludGVncmFsIHRvIGRpc2NvdmVyaW5nIG1vc3Qgb2YgdGhlIG90 aGVyIGJ1Z3MuCisKKyAgT3B0aW1pemF0aW9uczoKKyAgLSBBdm9pZCBhIGNodW5rIG1ldGFkYXRh IHJlYWQgaW4gYXJlbmFfcHJvZl90Y3R4X3NldCgpLCBzaW5jZSBpdCBpcyBpbiB0aGUKKyAgICBm YXN0IHBhdGggd2hlbiBoZWFwIHByb2ZpbGluZyBpcyBlbmFibGVkLiAgQWRkaXRpb25hbGx5LCBz cGxpdCBhIHNwZWNpYWwKKyAgICBjYXNlIG91dCBpbnRvIGFyZW5hX3Byb2ZfdGN0eF9yZXNldCgp LCB3aGljaCBhbHNvIGF2b2lkcyBjaHVuayBtZXRhZGF0YQorICAgIHJlYWRzLgorICAtIE9wdGlt aXplIGlyYWxsb2N4X3Byb2YoKSB0byBvcHRpbWlzdGljYWxseSB1cGRhdGUgdGhlIHNhbXBsZXIg c3RhdGUuICBUaGUKKyAgICBwcmlvciBpbXBsZW1lbnRhdGlvbiBhcHBlYXJzIHRvIGhhdmUgYmVl biBhIGhvbGRvdmVyIGZyb20gd2hlbgorICAgIHJhbGxvY3goKS94YWxsb2N4KCkgZnVuY3Rpb25h bGl0eSB3YXMgY29tYmluZWQgYXMgcmFsbG9jbSgpLgorCisgIEJ1ZyBmaXhlczoKKyAgLSBGaXgg VExTIGNvbmZpZ3VyYXRpb24gc3VjaCB0aGF0IGl0IGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBmb3Ig cGxhdGZvcm1zIG9uCisgICAgd2hpY2ggaXQgd29ya3MgY29ycmVjdGx5LgorICAtIEZpeCBhcmVu YXNfY2FjaGVfY2xlYW51cCgpIGFuZCBhcmVuYV9nZXRfaGFyZCgpIHRvIGhhbmRsZQorICAgIGFs bG9jYXRpb24vZGVhbGxvY2F0aW9uIHdpdGhpbiB0aGUgYXBwbGljYXRpb24ncyB0aHJlYWQtc3Bl Y2lmaWMgZGF0YQorICAgIGNsZWFudXAgZnVuY3Rpb25zIGV2ZW4gYWZ0ZXIgYXJlbmFzX2NhY2hl IGlzIHRvcm4gZG93bi4KKyAgLSBGaXggeGFsbG9jeCgpIGJ1Z3MgcmVsYXRlZCB0byBzaXplK2V4 dHJhIGV4Y2VlZGluZyBIVUdFX01BWENMQVNTLgorICAtIEZpeCBjaHVuayBwdXJnZSBob29rIGNh bGxzIGZvciBpbi1wbGFjZSBodWdlIHNocmlua2luZyByZWFsbG9jYXRpb24gdG8KKyAgICBzcGVj aWZ5IHRoZSBvbGQgY2h1bmsgc2l6ZSByYXRoZXIgdGhhbiB0aGUgbmV3IGNodW5rIHNpemUuICBU aGlzIGJ1ZyBjYXVzZWQKKyAgICBubyBjb3JyZWN0bmVzcyBpc3N1ZXMgZm9yIHRoZSBkZWZhdWx0 IGNodW5rIHB1cmdlIGZ1bmN0aW9uLCBidXQgd2FzCisgICAgdmlzaWJsZSB0byBjdXN0b20gZnVu Y3Rpb25zIHNldCB2aWEgdGhlICJhcmVuYS48aT4uY2h1bmtfaG9va3MiIG1hbGxjdGwuCisgIC0g Rml4IGhlYXAgcHJvZmlsaW5nIGJ1Z3M6CisgICAgKyBGaXggaGVhcCBwcm9maWxpbmcgdG8gZGlz dGluZ3Vpc2ggYW1vbmcgb3RoZXJ3aXNlIGlkZW50aWNhbCBzYW1wbGUgc2l0ZXMKKyAgICAgIHdp dGggaW50ZXJwb3NlZCByZXNldHMgKHRyaWdnZXJlZCB2aWEgdGhlICJwcm9mLnJlc2V0IiBtYWxs Y3RsKS4gIFRoaXMgYnVnCisgICAgICBjb3VsZCBjYXVzZSBkYXRhIHN0cnVjdHVyZSBjb3JydXB0 aW9uIHRoYXQgd291bGQgbW9zdCBsaWtlbHkgcmVzdWx0IGluIGEKKyAgICAgIHNlZ2ZhdWx0Lgor ICAgICsgRml4IGlyZWFsbG9jX3Byb2YoKSB0byBwcm9mX2FsbG9jX3JvbGxiYWNrKCkgb24gT09N LgorICAgICsgTWFrZSBvbmUgY2FsbCB0byBwcm9mX2FjdGl2ZV9nZXRfdW5sb2NrZWQoKSBwZXIg YWxsb2NhdGlvbiBldmVudCwgYW5kIHVzZQorICAgICAgdGhlIHJlc3VsdCB0aHJvdWdob3V0IHRo ZSByZWxldmFudCBmdW5jdGlvbnMgdGhhdCBoYW5kbGUgYW4gYWxsb2NhdGlvbgorICAgICAgZXZl bnQuICBBbHNvIGFkZCBhIG1pc3NpbmcgY2hlY2sgaW4gcHJvZl9yZWFsbG9jKCkuICBUaGVzZSBm aXhlcyBwcm90ZWN0CisgICAgICBhbGxvY2F0aW9uIGV2ZW50cyBhZ2FpbnN0IGNvbmN1cnJlbnQg cHJvZl9hY3RpdmUgY2hhbmdlcy4KKyAgICArIEZpeCBpeGFsbG9jeF9wcm9mKCkgdG8gcGFzcyB1 c2l6ZV9tYXggYW5kIHplcm8gdG8gaXhhbGxvY3hfcHJvZl9zYW1wbGUoKQorICAgICAgaW4gdGhl IGNvcnJlY3Qgb3JkZXIuCisgICAgKyBGaXggcHJvZl9yZWFsbG9jKCkgdG8gY2FsbCBwcm9mX2Zy ZWVfc2FtcGxlZF9vYmplY3QoKSBhZnRlciBjYWxsaW5nCisgICAgICBwcm9mX21hbGxvY19zYW1w bGVfb2JqZWN0KCkuICBQcmlvciB0byB0aGlzIGZpeCwgaWYgdGN0eCBhbmQgb2xkX3RjdHggd2Vy ZQorICAgICAgdGhlIHNhbWUsIHRoZSB0Y3R4IGNvdWxkIGhhdmUgYmVlbiBwcmVtYXR1cmVseSBk ZXN0cm95ZWQuCisgIC0gRml4IHBvcnRhYmlsaXR5IGJ1Z3M6CisgICAgKyBEb24ndCBiaXRzaGlm dCBieSBuZWdhdGl2ZSBhbW91bnRzIHdoZW4gZW5jb2RpbmcvZGVjb2RpbmcgcnVuIHNpemVzIGlu CisgICAgICBjaHVuayBoZWFkZXIgbWFwcy4gIFRoaXMgYWZmZWN0ZWQgc3lzdGVtcyB3aXRoIHBh Z2Ugc2l6ZXMgZ3JlYXRlciB0aGFuIDgKKyAgICAgIEtpQi4KKyAgICArIFJlbmFtZSBpbmRleF90 IHRvIHN6aW5kX3QgdG8gYXZvaWQgYW4gZXhpc3RpbmcgdHlwZSBvbiBTb2xhcmlzLgorICAgICsg QWRkIEpFTUFMTE9DX0NYWF9USFJPVyB0byB0aGUgbWVtYWxpZ24oKSBmdW5jdGlvbiBwcm90b3R5 cGUsIGluIG9yZGVyIHRvCisgICAgICBtYXRjaCBnbGliYyBhbmQgYXZvaWQgY29tcGlsYXRpb24g ZXJyb3JzIHdoZW4gaW5jbHVkaW5nIGJvdGgKKyAgICAgIGplbWFsbG9jL2plbWFsbG9jLmggYW5k IG1hbGxvYy5oIGluIEMrKyBjb2RlLgorICAgICsgRG9uJ3QgYXNzdW1lIHRoYXQgL2Jpbi9zaCBp cyBhcHByb3ByaWF0ZSB3aGVuIHJ1bm5pbmcgc2l6ZV9jbGFzc2VzLnNoCisgICAgICBkdXJpbmcg Y29uZmlndXJhdGlvbi4KKyAgICArIENvbnNpZGVyIF9fc3BhcmN2OSBhIHN5bm9ueW0gZm9yIF9f c3BhcmM2NF9fIHdoZW4gZGVmaW5pbmcgTEdfUVVBTlRVTS4KKyAgICArIExpbmsgdGVzdHMgdG8g bGlicnQgaWYgaXQgY29udGFpbnMgY2xvY2tfZ2V0dGltZSgyKS4KKworKiA0LjAuMCAoQXVndXN0 IDE3LCAyMDE1KQorCisgIFRoaXMgdmVyc2lvbiBjb250YWlucyBtYW55IHNwZWVkIGFuZCBzcGFj ZSBvcHRpbWl6YXRpb25zLCBib3RoIG1pbm9yIGFuZAorICBtYWpvci4gIFRoZSBtYWpvciB0aGVt ZXMgYXJlIGdlbmVyYWxpemF0aW9uLCB1bmlmaWNhdGlvbiwgYW5kIHNpbXBsaWZpY2F0aW9uLgor ICBBbHRob3VnaCBtYW55IG9mIHRoZXNlIG9wdGltaXphdGlvbnMgY2F1c2Ugbm8gdmlzaWJsZSBi ZWhhdmlvciBjaGFuZ2UsIHRoZWlyCisgIGN1bXVsYXRpdmUgZWZmZWN0IGlzIHN1YnN0YW50aWFs LgorCisgIE5ldyBmZWF0dXJlczoKKyAgLSBOb3JtYWxpemUgc2l6ZSBjbGFzcyBzcGFjaW5nIHRv IGJlIGNvbnNpc3RlbnQgYWNyb3NzIHRoZSBjb21wbGV0ZSBzaXplCisgICAgcmFuZ2UuICBCeSBk ZWZhdWx0IHRoZXJlIGFyZSBmb3VyIHNpemUgY2xhc3NlcyBwZXIgc2l6ZSBkb3VibGluZywgYnV0 IHRoaXMKKyAgICBpcyBub3cgY29uZmlndXJhYmxlIHZpYSB0aGUgLS13aXRoLWxnLXNpemUtY2xh c3MtZ3JvdXAgb3B0aW9uLiAgQWxzbyBhZGQgdGhlCisgICAgLS13aXRoLWxnLXBhZ2UsIC0td2l0 aC1sZy1wYWdlLXNpemVzLCAtLXdpdGgtbGctcXVhbnR1bSwgYW5kCisgICAgLS13aXRoLWxnLXRp bnktbWluIG9wdGlvbnMsIHdoaWNoIGNhbiBiZSB1c2VkIHRvIHR3ZWFrIHBhZ2UgYW5kIHNpemUg Y2xhc3MKKyAgICBzZXR0aW5ncy4gIEltcGFjdHM6CisgICAgKyBXb3JzdCBjYXNlIHBlcmZvcm1h bmNlIGZvciBpbmNyZW1lbnRhbGx5IGdyb3dpbmcvc2hyaW5raW5nIHJlYWxsb2NhdGlvbgorICAg ICAgaXMgaW1wcm92ZWQgYmVjYXVzZSB0aGVyZSBhcmUgZmFyIGZld2VyIHNpemUgY2xhc3Nlcywg YW5kIHRoZXJlZm9yZQorICAgICAgY29weWluZyBoYXBwZW5zIGxlc3Mgb2Z0ZW4uCisgICAgKyBJ bnRlcm5hbCBmcmFnbWVudGF0aW9uIGlzIGxpbWl0ZWQgdG8gMjAlIGZvciBhbGwgYnV0IHRoZSBz bWFsbGVzdCBzaXplCisgICAgICBjbGFzc2VzICh0aG9zZSBsZXNzIHRoYW4gZm91ciB0aW1lcyB0 aGUgcXVhbnR1bSkuICAoMUIgKyA0IEtpQikKKyAgICAgIGFuZCAoMUIgKyA0IE1pQikgcHJldmlv dXNseSBzdWZmZXJlZCBuZWFybHkgNTAlIGludGVybmFsIGZyYWdtZW50YXRpb24uCisgICAgKyBD aHVuayBmcmFnbWVudGF0aW9uIHRlbmRzIHRvIGJlIGxvd2VyIGJlY2F1c2UgdGhlcmUgYXJlIGZl d2VyIGRpc3RpbmN0IHJ1bgorICAgICAgc2l6ZXMgdG8gcGFjay4KKyAgLSBBZGQgc3VwcG9ydCBm b3IgZXhwbGljaXQgdGNhY2hlcy4gIFRoZSAidGNhY2hlLmNyZWF0ZSIsICJ0Y2FjaGUuZmx1c2gi LCBhbmQKKyAgICAidGNhY2hlLmRlc3Ryb3kiIG1hbGxjdGxzIGNvbnRyb2wgdGNhY2hlIGxpZmV0 aW1lIGFuZCBmbHVzaGluZywgYW5kIHRoZQorICAgIE1BTExPQ1hfVENBQ0hFKHRjKSBhbmQgTUFM TE9DWF9UQ0FDSEVfTk9ORSBmbGFncyB0byB0aGUgKmFsbG9jeCgpIEFQSQorICAgIGNvbnRyb2wg d2hpY2ggdGNhY2hlIGlzIHVzZWQgZm9yIGVhY2ggb3BlcmF0aW9uLgorICAtIEltcGxlbWVudCBw ZXIgdGhyZWFkIGhlYXAgcHJvZmlsaW5nLCBhcyB3ZWxsIGFzIHRoZSBhYmlsaXR5IHRvCisgICAg ZW5hYmxlL2Rpc2FibGUgaGVhcCBwcm9maWxpbmcgb24gYSBwZXIgdGhyZWFkIGJhc2lzLiAgQWRk IHRoZSAicHJvZi5yZXNldCIsCisgICAgInByb2YubGdfc2FtcGxlIiwgInRocmVhZC5wcm9mLm5h bWUiLCAidGhyZWFkLnByb2YuYWN0aXZlIiwKKyAgICAib3B0LnByb2ZfdGhyZWFkX2FjdGl2ZV9p bml0IiwgInByb2YudGhyZWFkX2FjdGl2ZV9pbml0IiwgYW5kCisgICAgInRocmVhZC5wcm9mLmFj dGl2ZSIgbWFsbGN0bHMuCisgIC0gQWRkIHN1cHBvcnQgZm9yIHBlciBhcmVuYSBhcHBsaWNhdGlv bi1zcGVjaWZpZWQgY2h1bmsgYWxsb2NhdG9ycywgY29uZmlndXJlZAorICAgIHZpYSB0aGUgImFy ZW5hLjxpPi5jaHVua19ob29rcyIgbWFsbGN0bC4KKyAgLSBSZWZhY3RvciBodWdlIGFsbG9jYXRp b24gdG8gYmUgbWFuYWdlZCBieSBhcmVuYXMsIHNvIHRoYXQgYXJlbmFzIG5vdworICAgIGZ1bmN0 aW9uIGFzIGdlbmVyYWwgcHVycG9zZSBpbmRlcGVuZGVudCBhbGxvY2F0b3JzLiAgVGhpcyBpcyBp bXBvcnRhbnQgaW4KKyAgICB0aGUgY29udGV4dCBvZiB1c2VyLXNwZWNpZmllZCBjaHVuayBhbGxv Y2F0b3JzLCBhc2lkZSBmcm9tIHRoZSBzY2FsYWJpbGl0eQorICAgIGJlbmVmaXRzLiAgUmVsYXRl ZCBuZXcgc3RhdGlzdGljczoKKyAgICArIFRoZSAic3RhdHMuYXJlbmFzLjxpPi5odWdlLmFsbG9j YXRlZCIsICJzdGF0cy5hcmVuYXMuPGk+Lmh1Z2Uubm1hbGxvYyIsCisgICAgICAic3RhdHMuYXJl bmFzLjxpPi5odWdlLm5kYWxsb2MiLCBhbmQgInN0YXRzLmFyZW5hcy48aT4uaHVnZS5ucmVxdWVz dHMiCisgICAgICBtYWxsY3RscyBwcm92aWRlIGhpZ2ggbGV2ZWwgcGVyIGFyZW5hIGh1Z2UgYWxs b2NhdGlvbiBzdGF0aXN0aWNzLgorICAgICsgVGhlICJhcmVuYXMubmhjaHVua3MiLCAiYXJlbmFz LmhjaHVuay48aT4uc2l6ZSIsCisgICAgICAic3RhdHMuYXJlbmFzLjxpPi5oY2h1bmtzLjxqPi5u bWFsbG9jIiwKKyAgICAgICJzdGF0cy5hcmVuYXMuPGk+LmhjaHVua3MuPGo+Lm5kYWxsb2MiLAor ICAgICAgInN0YXRzLmFyZW5hcy48aT4uaGNodW5rcy48aj4ubnJlcXVlc3RzIiwgYW5kCisgICAg ICAic3RhdHMuYXJlbmFzLjxpPi5oY2h1bmtzLjxqPi5jdXJoY2h1bmtzIiBtYWxsY3RscyBwcm92 aWRlIHBlciBzaXplIGNsYXNzCisgICAgICBzdGF0aXN0aWNzLgorICAtIEFkZCB0aGUgJ3V0aWwn IGNvbHVtbiB0byBtYWxsb2Nfc3RhdHNfcHJpbnQoKSBvdXRwdXQsIHdoaWNoIHJlcG9ydHMgdGhl CisgICAgcHJvcG9ydGlvbiBvZiBhdmFpbGFibGUgcmVnaW9ucyB0aGF0IGFyZSBjdXJyZW50bHkg aW4gdXNlIGZvciBlYWNoIHNtYWxsCisgICAgc2l6ZSBjbGFzcy4KKyAgLSBBZGQgImFsbG9jIiBh bmQgImZyZWUiIG1vZGVzIGZvciBmb3IganVuayBmaWxsaW5nIChzZWUgdGhlICJvcHQuanVuayIK KyAgICBtYWxsY3RsKSwgc28gdGhhdCBpdCBpcyBwb3NzaWJsZSB0byBzZXBhcmF0ZWx5IGVuYWJs ZSBqdW5rIGZpbGxpbmcgZm9yCisgICAgYWxsb2NhdGlvbiB2ZXJzdXMgZGVhbGxvY2F0aW9uLgor ICAtIEFkZCB0aGUgamVtYWxsb2MtY29uZmlnIHNjcmlwdCwgd2hpY2ggcHJvdmlkZXMgaW5mb3Jt YXRpb24gYWJvdXQgaG93CisgICAgamVtYWxsb2Mgd2FzIGNvbmZpZ3VyZWQsIGFuZCBob3cgdG8g aW50ZWdyYXRlIGl0IGludG8gYXBwbGljYXRpb24gYnVpbGRzLgorICAtIEFkZCBtZXRhZGF0YSBz dGF0aXN0aWNzLCB3aGljaCBhcmUgYWNjZXNzaWJsZSB2aWEgdGhlICJzdGF0cy5tZXRhZGF0YSIs CisgICAgInN0YXRzLmFyZW5hcy48aT4ubWV0YWRhdGEubWFwcGVkIiwgYW5kCisgICAgInN0YXRz LmFyZW5hcy48aT4ubWV0YWRhdGEuYWxsb2NhdGVkIiBtYWxsY3Rscy4KKyAgLSBBZGQgdGhlICJz dGF0cy5yZXNpZGVudCIgbWFsbGN0bCwgd2hpY2ggcmVwb3J0cyB0aGUgdXBwZXIgbGltaXQgb2YK KyAgICBwaHlzaWNhbGx5IHJlc2lkZW50IG1lbW9yeSBtYXBwZWQgYnkgdGhlIGFsbG9jYXRvci4K KyAgLSBBZGQgcGVyIGFyZW5hIGNvbnRyb2wgb3ZlciB1bnVzZWQgZGlydHkgcGFnZSBwdXJnaW5n LCB2aWEgdGhlCisgICAgImFyZW5hcy5sZ19kaXJ0eV9tdWx0IiwgImFyZW5hLjxpPi5sZ19kaXJ0 eV9tdWx0IiwgYW5kCisgICAgInN0YXRzLmFyZW5hcy48aT4ubGdfZGlydHlfbXVsdCIgbWFsbGN0 bHMuCisgIC0gQWRkIHRoZSAicHJvZi5nZHVtcCIgbWFsbGN0bCwgd2hpY2ggbWFrZXMgaXQgcG9z c2libGUgdG8gdG9nZ2xlIHRoZSBnZHVtcAorICAgIGZlYXR1cmUgb24vb2ZmIGR1cmluZyBwcm9n cmFtIGV4ZWN1dGlvbi4KKyAgLSBBZGQgc2RhbGxvY3goKSwgd2hpY2ggaW1wbGVtZW50cyBzaXpl ZCBkZWFsbG9jYXRpb24uICBUaGUgcHJpbWFyeQorICAgIG9wdGltaXphdGlvbiBvdmVyIGRhbGxv Y3goKSBpcyB0aGUgcmVtb3ZhbCBvZiBhIG1ldGFkYXRhIHJlYWQsIHdoaWNoIG9mdGVuCisgICAg c3VmZmVycyBhbiBMMSBjYWNoZSBtaXNzLgorICAtIEFkZCBtaXNzaW5nIGhlYWRlciBpbmNsdWRl cyBpbiBqZW1hbGxvYy9qZW1hbGxvYy5oLCBzbyB0aGF0IGFwcGxpY2F0aW9ucworICAgIG9ubHkg aGF2ZSB0byAjaW5jbHVkZSA8amVtYWxsb2MvamVtYWxsb2MuaD4uCisgIC0gQWRkIHN1cHBvcnQg Zm9yIGFkZGl0aW9uYWwgcGxhdGZvcm1zOgorICAgICsgQml0cmlnCisgICAgKyBDeWd3aW4KKyAg ICArIERyYWdvbkZseUJTRAorICAgICsgaU9TCisgICAgKyBPcGVuQlNECisgICAgKyBPcGVuUklT Qy9vcjFrCisKKyAgT3B0aW1pemF0aW9uczoKKyAgLSBNYWludGFpbiBkaXJ0eSBydW5zIGluIHBl ciBhcmVuYSBMUlVzIHJhdGhlciB0aGFuIGluIHBlciBhcmVuYSB0cmVlcyBvZgorICAgIGRpcnR5 LXJ1bi1jb250YWluaW5nIGNodW5rcy4gIEluIHByYWN0aWNlIHRoaXMgY2hhbmdlIHNpZ25pZmlj YW50bHkgcmVkdWNlcworICAgIGRpcnR5IHBhZ2UgcHVyZ2luZyB2b2x1bWUuCisgIC0gSW50ZWdy YXRlIHdob2xlIGNodW5rcyBpbnRvIHRoZSB1bnVzZWQgZGlydHkgcGFnZSBwdXJnaW5nIG1hY2hp bmVyeS4gIFRoaXMKKyAgICByZWR1Y2VzIHRoZSBjb3N0IG9mIHJlcGVhdGVkIGh1Z2UgYWxsb2Nh dGlvbi9kZWFsbG9jYXRpb24sIGJlY2F1c2UgaXQKKyAgICBlZmZlY3RpdmVseSBpbnRyb2R1Y2Vz IGEgY2FjaGUgb2YgY2h1bmtzLgorICAtIFNwbGl0IHRoZSBhcmVuYSBjaHVuayBtYXAgaW50byB0 d28gc2VwYXJhdGUgYXJyYXlzLCBpbiBvcmRlciB0byBpbmNyZWFzZQorICAgIGNhY2hlIGxvY2Fs aXR5IGZvciB0aGUgZnJlcXVlbnRseSBhY2Nlc3NlZCBiaXRzLgorICAtIE1vdmUgc21hbGwgcnVu IG1ldGFkYXRhIG91dCBvZiBydW5zLCBpbnRvIGFyZW5hIGNodW5rIGhlYWRlcnMuICBUaGlzIHJl ZHVjZXMKKyAgICBydW4gZnJhZ21lbnRhdGlvbiwgc21hbGxlciBydW5zIHJlZHVjZSBleHRlcm5h bCBmcmFnbWVudGF0aW9uIGZvciBzbWFsbCBzaXplCisgICAgY2xhc3NlcywgYW5kIHBhY2tlZCAo bGVzcyB1bmlmb3JtbHkgYWxpZ25lZCkgbWV0YWRhdGEgbGF5b3V0IGltcHJvdmVzIENQVQorICAg IGNhY2hlIHNldCBkaXN0cmlidXRpb24uCisgIC0gUmFuZG9tbHkgZGlzdHJpYnV0ZSBsYXJnZSBh bGxvY2F0aW9uIGJhc2UgcG9pbnRlciBhbGlnbm1lbnQgcmVsYXRpdmUgdG8gcGFnZQorICAgIGJv dW5kYXJpZXMgaW4gb3JkZXIgdG8gbW9yZSB1bmlmb3JtbHkgdXRpbGl6ZSBDUFUgY2FjaGUgc2V0 cy4gIFRoaXMgY2FuIGJlCisgICAgZGlzYWJsZWQgdmlhIHRoZSAtLWRpc2FibGUtY2FjaGUtb2Js aXZpb3VzIGNvbmZpZ3VyZSBvcHRpb24sIGFuZCBxdWVyaWVkIHZpYQorICAgIHRoZSAiY29uZmln LmNhY2hlX29ibGl2aW91cyIgbWFsbGN0bC4KKyAgLSBNaWNyby1vcHRpbWl6ZSB0aGUgZmFzdCBw YXRocyBmb3IgdGhlIHB1YmxpYyBBUEkgZnVuY3Rpb25zLgorICAtIFJlZmFjdG9yIHRocmVhZC1z cGVjaWZpYyBkYXRhIHRvIHJlc2lkZSBpbiBhIHNpbmdsZSBzdHJ1Y3R1cmUuICBUaGlzIGFzc3Vy ZXMKKyAgICB0aGF0IG9ubHkgYSBzaW5nbGUgVExTIHJlYWQgaXMgbmVjZXNzYXJ5IHBlciBjYWxs IGludG8gdGhlIHB1YmxpYyBBUEkuCisgIC0gSW1wbGVtZW50IGluLXBsYWNlIGh1Z2UgYWxsb2Nh dGlvbiBncm93aW5nIGFuZCBzaHJpbmtpbmcuCisgIC0gUmVmYWN0b3IgcnRyZWUgKHJhZGl4IHRy ZWUgZm9yIGNodW5rIGxvb2t1cHMpIHRvIGJlIGxvY2stZnJlZSwgYW5kIG1ha2UKKyAgICBhZGRp dGlvbmFsIG9wdGltaXphdGlvbnMgdGhhdCByZWR1Y2UgbWF4aW11bSBsb29rdXAgZGVwdGggdG8g b25lIG9yIHR3bworICAgIGxldmVscy4gIFRoaXMgcmVzb2x2ZXMgd2hhdCB3YXMgYSBjb25jdXJy ZW5jeSBib3R0bGVuZWNrIGZvciBwZXIgYXJlbmEgaHVnZQorICAgIGFsbG9jYXRpb24sIGJlY2F1 c2UgYSBnbG9iYWwgZGF0YSBzdHJ1Y3R1cmUgaXMgY3JpdGljYWwgZm9yIGRldGVybWluaW5nCisg ICAgd2hpY2ggYXJlbmFzIG93biB3aGljaCBodWdlIGFsbG9jYXRpb25zLgorCisgIEluY29tcGF0 aWJsZSBjaGFuZ2VzOgorICAtIFJlcGxhY2UgLS1lbmFibGUtY2Mtc2lsZW5jZSB3aXRoIC0tZGlz YWJsZS1jYy1zaWxlbmNlIHRvIHN1cHByZXNzIHNwdXJpb3VzCisgICAgd2FybmluZ3MgYnkgZGVm YXVsdC4KKyAgLSBBc3N1cmUgdGhhdCB0aGUgY29uc3RuZXNzIG9mIG1hbGxvY191c2FibGVfc2l6 ZSgpJ3MgcmV0dXJuIHR5cGUgbWF0Y2hlcyB0aGF0CisgICAgb2YgdGhlIHN5c3RlbSBpbXBsZW1l bnRhdGlvbi4KKyAgLSBDaGFuZ2UgdGhlIGhlYXAgcHJvZmlsZSBkdW1wIGZvcm1hdCB0byBzdXBw b3J0IHBlciB0aHJlYWQgaGVhcCBwcm9maWxpbmcsCisgICAgcmVuYW1lIHBwcm9mIHRvIGplcHJv ZiwgYW5kIGVuaGFuY2UgaXQgd2l0aCB0aGUgLS10aHJlYWQ9PG4+IG9wdGlvbi4gIEFzIGEKKyAg ICByZXN1bHQsIHRoZSBidW5kbGVkIGplcHJvZiBtdXN0IG5vdyBiZSB1c2VkIHJhdGhlciB0aGFu IHRoZSB1cHN0cmVhbQorICAgIChncGVyZnRvb2xzKSBwcHJvZi4KKyAgLSBEaXNhYmxlICJvcHQu cHJvZl9maW5hbCIgYnkgZGVmYXVsdCwgaW4gb3JkZXIgdG8gYXZvaWQgYXRleGl0KDMpLCB3aGlj aCBjYW4KKyAgICBpbnRlcm5hbGx5IGRlYWRsb2NrIG9uIHNvbWUgcGxhdGZvcm1zLgorICAtIENo YW5nZSB0aGUgImFyZW5hcy5ubHJ1bnMiIG1hbGxjdGwgdHlwZSBmcm9tIHNpemVfdCB0byB1bnNp Z25lZC4KKyAgLSBSZXBsYWNlIHRoZSAic3RhdHMuYXJlbmFzLjxpPi5iaW5zLjxqPi5hbGxvY2F0 ZWQiIG1hbGxjdGwgd2l0aAorICAgICJzdGF0cy5hcmVuYXMuPGk+LmJpbnMuPGo+LmN1cnJlZ3Mi LgorICAtIElnbm9yZSBNQUxMT0NfQ09ORiBpbiBzZXR7dWlkLGdpZCxjYXB9IGJpbmFyaWVzLgor ICAtIElnbm9yZSBNQUxMT0NYX0FSRU5BKGEpIGluIGRhbGxvY3goKSwgaW4gZmF2b3Igb2YgdXNp bmcgdGhlCisgICAgTUFMTE9DWF9UQ0FDSEUodGMpIGFuZCBNQUxMT0NYX1RDQUNIRV9OT05FIGZs YWdzIHRvIGNvbnRyb2wgdGNhY2hlIHVzYWdlLgorCisgIFJlbW92ZWQgZmVhdHVyZXM6CisgIC0g UmVtb3ZlIHRoZSAqYWxsb2NtKCkgQVBJLCB3aGljaCBpcyBzdXBlcnNlZGVkIGJ5IHRoZSAqYWxs b2N4KCkgQVBJLgorICAtIFJlbW92ZSB0aGUgLS1lbmFibGUtZHNzIG9wdGlvbnMsIGFuZCBtYWtl IGRzcyBub24tb3B0aW9uYWwgb24gYWxsIHBsYXRmb3JtcworICAgIHdoaWNoIHN1cHBvcnQgc2Jy aygyKS4KKyAgLSBSZW1vdmUgdGhlICJhcmVuYXMucHVyZ2UiIG1hbGxjdGwsIHdoaWNoIHdhcyBv YnNvbGV0ZWQgYnkgdGhlCisgICAgImFyZW5hLjxpPi5wdXJnZSIgbWFsbGN0bCBpbiAzLjEuMC4K KyAgLSBSZW1vdmUgdGhlIHVubmVjZXNzYXJ5ICJvcHQudmFsZ3JpbmQiIG1hbGxjdGw7IGplbWFs bG9jIGF1dG9tYXRpY2FsbHkKKyAgICBkZXRlY3RzIHdoZXRoZXIgaXQgaXMgcnVubmluZyBpbnNp ZGUgVmFsZ3JpbmQuCisgIC0gUmVtb3ZlIHRoZSAic3RhdHMuaHVnZS5hbGxvY2F0ZWQiLCAic3Rh dHMuaHVnZS5ubWFsbG9jIiwgYW5kCisgICAgInN0YXRzLmh1Z2UubmRhbGxvYyIgbWFsbGN0bHMu CisgIC0gUmVtb3ZlIHRoZSAtLWVuYWJsZS1tcmVtYXAgb3B0aW9uLgorICAtIFJlbW92ZSB0aGUg InN0YXRzLmNodW5rcy5jdXJyZW50IiwgInN0YXRzLmNodW5rcy50b3RhbCIsIGFuZAorICAgICJz dGF0cy5jaHVua3MuaGlnaCIgbWFsbGN0bHMuCisKKyAgQnVnIGZpeGVzOgorICAtIEZpeCB0aGUg Y2FjdGl2ZSBzdGF0aXN0aWMgdG8gZGVjcmVhc2UgKHJhdGhlciB0aGFuIGluY3JlYXNlKSB3aGVu IGFjdGl2ZQorICAgIG1lbW9yeSBkZWNyZWFzZXMuICBUaGlzIHJlZ3Jlc3Npb24gd2FzIGZpcnN0 IHJlbGVhc2VkIGluIDMuNS4wLgorICAtIEZpeCBPT00gaGFuZGxpbmcgaW4gbWVtYWxpZ24oKSBh bmQgdmFsbG9jKCkuICBBIHZhcmlhbnQgb2YgdGhpcyBidWcgZXhpc3RlZAorICAgIGluIGFsbCBy ZWxlYXNlcyBzaW5jZSAyLjAuMCwgd2hpY2ggaW50cm9kdWNlZCB0aGVzZSBmdW5jdGlvbnMuCisg IC0gRml4IGFuIE9PTS1yZWxhdGVkIHJlZ3Jlc3Npb24gaW4gYXJlbmFfdGNhY2hlX2ZpbGxfc21h bGwoKSwgd2hpY2ggY291bGQKKyAgICBjYXVzZSBjYWNoZSBjb3JydXB0aW9uIG9uIE9PTS4gIFRo aXMgcmVncmVzc2lvbiB3YXMgcHJlc2VudCBpbiBhbGwgcmVsZWFzZXMKKyAgICBmcm9tIDIuMi4w IHRocm91Z2ggMy42LjAuCisgIC0gRml4IHNpemUgY2xhc3Mgb3ZlcmZsb3cgaGFuZGxpbmcgZm9y IG1hbGxvYygpLCBwb3NpeF9tZW1hbGlnbigpLCBtZW1hbGlnbigpLAorICAgIGNhbGxvYygpLCBh bmQgcmVhbGxvYygpIHdoZW4gcHJvZmlsaW5nIGlzIGVuYWJsZWQuCisgIC0gRml4IHRoZSAiYXJl bmEuPGk+LmRzcyIgbWFsbGN0bCB0byByZXR1cm4gYW4gZXJyb3IgaWYgInByaW1hcnkiIG9yCisg ICAgInNlY29uZGFyeSIgcHJlY2VkZW5jZSBpcyBzcGVjaWZpZWQsIGJ1dCBzYnJrKDIpIGlzIG5v dCBzdXBwb3J0ZWQuCisgIC0gRml4IGZhbGxiYWNrIGxnX2Zsb29yKCkgaW1wbGVtZW50YXRpb25z IHRvIGhhbmRsZSBleHRyZW1lbHkgbGFyZ2UgaW5wdXRzLgorICAtIEVuc3VyZSB0aGUgZGVmYXVs dCBwdXJnZWFibGUgem9uZSBpcyBhZnRlciB0aGUgZGVmYXVsdCB6b25lIG9uIE9TIFguCisgIC0g Rml4IGxhdGVudCBidWdzIGluIGF0b21pY18qKCkuCisgIC0gRml4IHRoZSAiYXJlbmEuPGk+LmRz cyIgbWFsbGN0bCB0byBoYW5kbGUgcmVhZC1vbmx5IGNhbGxzLgorICAtIEZpeCB0bHNfbW9kZWwg Y29uZmlndXJhdGlvbiB0byBlbmFibGUgdGhlIGluaXRpYWwtZXhlYyBtb2RlbCB3aGVuIHBvc3Np YmxlLgorICAtIE1hcmsgbWFsbG9jX2NvbmYgYXMgYSB3ZWFrIHN5bWJvbCBzbyB0aGF0IHRoZSBh cHBsaWNhdGlvbiBjYW4gb3ZlcnJpZGUgaXQuCisgIC0gQ29ycmVjdGx5IGRldGVjdCBnbGliYydz IGFkYXB0aXZlIHB0aHJlYWQgbXV0ZXhlcy4KKyAgLSBGaXggdGhlIC0td2l0aG91dC1leHBvcnQg Y29uZmlndXJlIG9wdGlvbi4KKworKiAzLjYuMCAoTWFyY2ggMzEsIDIwMTQpCisKKyAgVGhpcyB2 ZXJzaW9uIGNvbnRhaW5zIGEgY3JpdGljYWwgYnVnIGZpeCBmb3IgYSByZWdyZXNzaW9uIHByZXNl bnQgaW4gMy41LjAgYW5kCisgIDMuNS4xLgorCisgIEJ1ZyBmaXhlczoKKyAgLSBGaXggYSByZWdy ZXNzaW9uIGluIGFyZW5hX2NodW5rX2FsbG9jKCkgdGhhdCBjYXVzZWQgY3Jhc2hlcyBkdXJpbmcK KyAgICBzbWFsbC9sYXJnZSBhbGxvY2F0aW9uIGlmIGNodW5rIGFsbG9jYXRpb24gZmFpbGVkLiAg SW4gdGhlIGFic2VuY2Ugb2YgdGhpcworICAgIGJ1ZywgY2h1bmsgYWxsb2NhdGlvbiBmYWlsdXJl IHdvdWxkIHJlc3VsdCBpbiBhbGxvY2F0aW9uIGZhaWx1cmUsIGUuZy4gIE5VTEwKKyAgICByZXR1 cm4gZnJvbSBtYWxsb2MoKS4gIFRoaXMgcmVncmVzc2lvbiB3YXMgaW50cm9kdWNlZCBpbiAzLjUu MC4KKyAgLSBGaXggYmFja3RyYWNpbmcgZm9yIGdjYyBpbnRyaW5zaWNzLWJhc2VkIGJhY2t0cmFj aW5nIGJ5IHNwZWNpZnlpbmcKKyAgICAtZm5vLW9taXQtZnJhbWUtcG9pbnRlciB0byBnY2MuICBO b3RlIHRoYXQgdGhlIGFwcGxpY2F0aW9uIChhbmQgYWxsIHRoZQorICAgIGxpYnJhcmllcyBpdCBs aW5rcyB0bykgbXVzdCBhbHNvIGJlIGNvbXBpbGVkIHdpdGggdGhpcyBvcHRpb24gZm9yCisgICAg YmFja3RyYWNpbmcgdG8gYmUgcmVsaWFibGUuCisgIC0gVXNlIGRzcyBhbGxvY2F0aW9uIHByZWNl ZGVuY2UgZm9yIGh1Z2UgYWxsb2NhdGlvbnMgYXMgd2VsbCBhcyBzbWFsbC9sYXJnZQorICAgIGFs bG9jYXRpb25zLgorICAtIEZpeCB0ZXN0IGFzc2VydGlvbiBmYWlsdXJlIG1lc3NhZ2UgZm9ybWF0 dGluZy4gIFRoaXMgYnVnIGRpZCBub3QgbWFuaWZlc3Qgb24KKyAgICB4ODZfNjQgc3lzdGVtcyBi ZWNhdXNlIG9mIGltcGxlbWVudGF0aW9uIHN1YnRsZXRpZXMgaW4gdmFfbGlzdC4KKyAgLSBGaXgg aW5jb25zZXF1ZW50aWFsIHRlc3QgZmFpbHVyZXMgZm9yIGhhc2ggYW5kIFNGTVQgY29kZS4KKwor ICBOZXcgZmVhdHVyZXM6CisgIC0gU3VwcG9ydCBoZWFwIHByb2ZpbGluZyBvbiBGcmVlQlNELiAg VGhpcyBmZWF0dXJlIGRlcGVuZHMgb24gdGhlIHByb2MKKyAgICBmaWxlc3lzdGVtIGJlaW5nIG1v dW50ZWQgZHVyaW5nIGhlYXAgcHJvZmlsZSBkdW1waW5nLgorCisqIDMuNS4xIChGZWJydWFyeSAy NSwgMjAxNCkKKworICBUaGlzIHZlcnNpb24gcHJpbWFyaWx5IGFkZHJlc3NlcyBtaW5vciBidWdz IGluIHRlc3QgY29kZS4KKworICBCdWcgZml4ZXM6CisgIC0gQ29uZmlndXJlIFNvbGFyaXMvSWxs dW1vcyB0byB1c2UgTUFEVl9GUkVFLgorICAtIEZpeCBqdW5rIGZpbGxpbmcgZm9yIG1yZW1hcCgy KS1iYXNlZCBodWdlIHJlYWxsb2NhdGlvbi4gIFRoaXMgaXMgb25seQorICAgIHJlbGV2YW50IGlm IGNvbmZpZ3VyaW5nIHdpdGggdGhlIC0tZW5hYmxlLW1yZW1hcCBvcHRpb24gc3BlY2lmaWVkLgor ICAtIEF2b2lkIGNvbXBpbGF0aW9uIGZhaWx1cmUgaWYgJ3Jlc3RyaWN0JyBDOTkga2V5d29yZCBp cyBub3Qgc3VwcG9ydGVkIGJ5IHRoZQorICAgIGNvbXBpbGVyLgorICAtIEFkZCBhIGNvbmZpZ3Vy ZSB0ZXN0IGZvciBTU0UyIHJhdGhlciB0aGFuIGFzc3VtaW5nIGl0IGlzIHVzYWJsZSBvbiBpNjg2 CisgICAgc3lzdGVtcy4gIFRoaXMgZml4ZXMgdGVzdCBjb21waWxhdGlvbiBlcnJvcnMsIGVzcGVj aWFsbHkgb24gMzItYml0IExpbnV4CisgICAgc3lzdGVtcy4KKyAgLSBGaXggbWFsbGN0bCBhcmd1 bWVudCBzaXplIG1pc21hdGNoZXMgKHNpemVfdCB2cy4gdWludDY0X3QpIGluIHRoZSBzdGF0cyB1 bml0CisgICAgdGVzdC4KKyAgLSBGaXgvcmVtb3ZlIGZsYXdlZCBhbGlnbm1lbnQtcmVsYXRlZCBv dmVyZmxvdyB0ZXN0cy4KKyAgLSBQcmV2ZW50IGNvbXBpbGVyIG9wdGltaXphdGlvbnMgdGhhdCBj b3VsZCBjaGFuZ2UgYmFja3RyYWNlcyBpbiB0aGUKKyAgICBwcm9mX2FjY3VtIHVuaXQgdGVzdC4K KworKiAzLjUuMCAoSmFudWFyeSAyMiwgMjAxNCkKKworICBUaGlzIHZlcnNpb24gZm9jdXNlcyBv biByZWZhY3RvcmluZyBhbmQgYXV0b21hdGVkIHRlc3RpbmcsIHRob3VnaCBpdCBhbHNvCisgIGlu Y2x1ZGVzIHNvbWUgbm9uLXRyaXZpYWwgaGVhcCBwcm9maWxpbmcgb3B0aW1pemF0aW9ucyBub3Qg bWVudGlvbmVkIGJlbG93LgorCisgIE5ldyBmZWF0dXJlczoKKyAgLSBBZGQgdGhlICphbGxvY3go KSBBUEksIHdoaWNoIGlzIGEgc3VjY2Vzc29yIHRvIHRoZSBleHBlcmltZW50YWwgKmFsbG9jbSgp CisgICAgQVBJLiAgVGhlICphbGxvY3goKSBmdW5jdGlvbnMgYXJlIHNsaWdodGx5IHNpbXBsZXIg dG8gdXNlIGJlY2F1c2UgdGhleSBoYXZlCisgICAgZmV3ZXIgcGFyYW1ldGVycywgdGhleSBkaXJl Y3RseSByZXR1cm4gdGhlIHJlc3VsdHMgb2YgcHJpbWFyeSBpbnRlcmVzdCwgYW5kCisgICAgbWFs bG9jeCgpL3JhbGxvY3goKSBhdm9pZCB0aGUgc3RyaWN0IGFsaWFzaW5nIHBpdGZhbGwgdGhhdAor ICAgIGFsbG9jbSgpL3JhbGxvY20oKSBzaGFyZSB3aXRoIHBvc2l4X21lbWFsaWduKCkuICBOb3Rl IHRoYXQgKmFsbG9jbSgpIGlzCisgICAgc2xhdGVkIGZvciByZW1vdmFsIGluIHRoZSBuZXh0IG5v bi1idWdmaXggcmVsZWFzZS4KKyAgLSBBZGQgc3VwcG9ydCBmb3IgTGludXhUaHJlYWRzLgorCisg IEJ1ZyBmaXhlczoKKyAgLSBVbmxlc3MgaGVhcCBwcm9maWxpbmcgaXMgZW5hYmxlZCwgZGlzYWJs ZSBmbG9hdGluZyBwb2ludCBjb2RlIGFuZCBkb24ndCBsaW5rCisgICAgd2l0aCBsaWJtLiAgVGhp cywgaW4gY29tYmluYXRpb24gd2l0aCBlLmcuIEVYVFJBX0NGTEFHUz0tbW5vLXNzZSBvbiB4NjQK KyAgICBzeXN0ZW1zLCBtYWtlcyBpdCBwb3NzaWJsZSB0byBjb21wbGV0ZWx5IGRpc2FibGUgZmxv YXRpbmcgcG9pbnQgcmVnaXN0ZXIKKyAgICB1c2UuICBTb21lIHZlcnNpb25zIG9mIGdsaWJjIG5l Z2xlY3QgdG8gc2F2ZS9yZXN0b3JlIGNhbGxlci1zYXZlZCBmbG9hdGluZworICAgIHBvaW50IHJl Z2lzdGVycyBkdXJpbmcgZHluYW1pYyBsYXp5IHN5bWJvbCBsb2FkaW5nLCBhbmQgdGhlIHN5bWJv bCBsb2FkaW5nCisgICAgY29kZSB1c2VzIHdoYXRldmVyIG1hbGxvYyB0aGUgYXBwbGljYXRpb24g aGFwcGVucyB0byBoYXZlIGxpbmtlZC9sb2FkZWQKKyAgICB3aXRoLCB0aGUgcmVzdWx0IGJlaW5n IHBvdGVudGlhbCBmbG9hdGluZyBwb2ludCByZWdpc3RlciBjb3JydXB0aW9uLgorICAtIFJlcG9y dCBFTk9NRU0gcmF0aGVyIHRoYW4gRUlOVkFMIGlmIGFuIE9PTSBvY2N1cnMgZHVyaW5nIGhlYXAg cHJvZmlsaW5nCisgICAgYmFja3RyYWNlIGNyZWF0aW9uIGluIGltZW1hbGlnbigpLiAgVGhpcyBi dWcgaW1wYWN0ZWQgcG9zaXhfbWVtYWxpZ24oKSBhbmQKKyAgICBhbGlnbmVkX2FsbG9jKCkuCisg IC0gRml4IGEgZmlsZSBkZXNjcmlwdG9yIGxlYWsgaW4gYSBwcm9mX2R1bXBfbWFwcygpIGVycm9y IHBhdGguCisgIC0gRml4IHByb2ZfZHVtcCgpIHRvIGNsb3NlIHRoZSBkdW1wIGZpbGUgZGVzY3Jp cHRvciBmb3IgYWxsIHJlbGV2YW50IGVycm9yCisgICAgcGF0aHMuCisgIC0gRml4IHJhbGxvY20o KSB0byB1c2UgdGhlIGFyZW5hIHNwZWNpZmllZCBieSB0aGUgQUxMT0NNX0FSRU5BKHMpIGZsYWcg Zm9yCisgICAgYWxsb2NhdGlvbiwgbm90IGp1c3QgZGVhbGxvY2F0aW9uLgorICAtIEZpeCBhIGRh dGEgcmFjZSBmb3IgbGFyZ2UgYWxsb2NhdGlvbiBzdGF0cyBjb3VudGVycy4KKyAgLSBGaXggYSBw b3RlbnRpYWwgaW5maW5pdGUgbG9vcCBkdXJpbmcgdGhyZWFkIGV4aXQuICBUaGlzIGJ1ZyBvY2N1 cnJlZCBvbgorICAgIFNvbGFyaXMsIGFuZCBjb3VsZCBhZmZlY3Qgb3RoZXIgcGxhdGZvcm1zIHdp dGggc2ltaWxhciBwdGhyZWFkcyBUU0QKKyAgICBpbXBsZW1lbnRhdGlvbnMuCisgIC0gRG9uJ3Qg anVuay1maWxsIHJlYWxsb2NhdGlvbnMgdW5sZXNzIHVzYWJsZSBzaXplIGNoYW5nZXMuICBUaGlz IGZpeGVzIGEKKyAgICB2aW9sYXRpb24gb2YgdGhlICphbGxvY3goKS8qYWxsb2NtKCkgc2VtYW50 aWNzLgorICAtIEZpeCBncm93aW5nIGxhcmdlIHJlYWxsb2NhdGlvbiB0byBqdW5rIGZpbGwgbmV3 IHNwYWNlLgorICAtIEZpeCBodWdlIGRlYWxsb2NhdGlvbiB0byBqdW5rIGZpbGwgd2hlbiBtdW5t YXAgaXMgZGlzYWJsZWQuCisgIC0gQ2hhbmdlIHRoZSBkZWZhdWx0IHByaXZhdGUgbmFtZXNwYWNl IHByZWZpeCBmcm9tIGVtcHR5IHRvIGplXywgYW5kIGNoYW5nZQorICAgIC0td2l0aC1wcml2YXRl LW5hbWVzcGFjZS1wcmVmaXggc28gdGhhdCBpdCBwcmVwZW5kcyBhbiBhZGRpdGlvbmFsIHByZWZp eAorICAgIHJhdGhlciB0aGFuIHJlcGxhY2luZyBqZV8uICBUaGlzIHJlZHVjZXMgdGhlIGxpa2Vs aWhvb2Qgb2YgYXBwbGljYXRpb25zCisgICAgd2hpY2ggc3RhdGljYWxseSBsaW5rIGplbWFsbG9j IGV4cGVyaWVuY2luZyBzeW1ib2wgbmFtZSBjb2xsaXNpb25zLgorICAtIEFkZCBtaXNzaW5nIHBy aXZhdGUgbmFtZXNwYWNlIG1hbmdsaW5nIChyZWxldmFudCB3aGVuCisgICAgLS13aXRoLXByaXZh dGUtbmFtZXNwYWNlIGlzIHNwZWNpZmllZCkuCisgIC0gQWRkIGFuZCB1c2UgSkVNQUxMT0NfSU5M SU5FX0Mgc28gdGhhdCBzdGF0aWMgaW5saW5lIGZ1bmN0aW9ucyBhcmUgbWFya2VkIGFzCisgICAg c3RhdGljIGV2ZW4gZm9yIGRlYnVnIGJ1aWxkcy4KKyAgLSBBZGQgYSBtaXNzaW5nIG11dGV4IHVu bG9jayBpbiBhIG1hbGxvY19pbml0X2hhcmQoKSBlcnJvciBwYXRoLiAgSW4gcHJhY3RpY2UKKyAg ICB0aGlzIGVycm9yIHBhdGggaXMgbmV2ZXIgZXhlY3V0ZWQuCisgIC0gRml4IG51bWVyb3VzIGJ1 Z3MgaW4gbWFsbG9jX3N0cm90dW1heCgpIGVycm9yIGhhbmRsaW5nL3JlcG9ydGluZy4gIFRoZXNl CisgICAgYnVncyBoYWQgbm8gaW1wYWN0IGV4Y2VwdCBmb3IgbWFsZm9ybWVkIGlucHV0cy4KKyAg LSBGaXggbnVtZXJvdXMgYnVncyBpbiBtYWxsb2Nfc25wcmludGYoKS4gIFRoZXNlIGJ1Z3Mgd2Vy ZSBub3QgZXhlcmNpc2VkIGJ5CisgICAgZXhpc3RpbmcgY2FsbHMsIHNvIHRoZXkgaGFkIG5vIGlt cGFjdC4KKworKiAzLjQuMSAoT2N0b2JlciAyMCwgMjAxMykKKworICBCdWcgZml4ZXM6CisgIC0g Rml4IGEgcmFjZSBpbiB0aGUgImFyZW5hcy5leHRlbmQiIG1hbGxjdGwgdGhhdCBjb3VsZCBjYXVz ZSBtZW1vcnkgY29ycnVwdGlvbgorICAgIG9mIGludGVybmFsIGRhdGEgc3RydWN0dXJlcyBhbmQg c3Vic2VxdWVudCBjcmFzaGVzLgorICAtIEZpeCBWYWxncmluZCBpbnRlZ3JhdGlvbiBmbGF3cyB0 aGF0IGNhdXNlZCBWYWxncmluZCB3YXJuaW5ncyBhYm91dCByZWFkcyBvZgorICAgIHVuaW5pdGlh bGl6ZWQgbWVtb3J5IGluOgorICAgICsgYXJlbmEgY2h1bmsgaGVhZGVycworICAgICsgaW50ZXJu YWwgemVyby1pbml0aWFsaXplZCBkYXRhIHN0cnVjdHVyZXMgKHJlbGV2YW50IHRvIHRjYWNoZSBh bmQgcHJvZgorICAgICAgY29kZSkKKyAgLSBQcmVzZXJ2ZSBlcnJubyBkdXJpbmcgdGhlIGZpcnN0 IGFsbG9jYXRpb24uICBBIHJlYWRsaW5rKDIpIGNhbGwgZHVyaW5nCisgICAgaW5pdGlhbGl6YXRp b24gZmFpbHMgdW5sZXNzIC9ldGMvbWFsbG9jLmNvbmYgZXhpc3RzLCBzbyBlcnJubyB3YXMgdHlw aWNhbGx5CisgICAgc2V0IGR1cmluZyB0aGUgZmlyc3QgYWxsb2NhdGlvbiBwcmlvciB0byB0aGlz IGZpeC4KKyAgLSBGaXggY29tcGlsYXRpb24gd2FybmluZ3MgcmVwb3J0ZWQgYnkgZ2NjIDQuOC4x LgorCisqIDMuNC4wIChKdW5lIDIsIDIwMTMpCisKKyAgVGhpcyB2ZXJzaW9uIGlzIGVzc2VudGlh bGx5IGEgc21hbGwgYnVnZml4IHJlbGVhc2UsIGJ1dCB0aGUgYWRkaXRpb24gb2YKKyAgYWFyY2g2 NCBzdXBwb3J0IHJlcXVpcmVzIHRoYXQgdGhlIG1pbm9yIHZlcnNpb24gYmUgaW5jcmVtZW50ZWQu CisKKyAgQnVnIGZpeGVzOgorICAtIEZpeCByYWNlLXRyaWdnZXJlZCBkZWFkbG9ja3MgaW4gY2h1 bmtfcmVjb3JkKCkuICBUaGVzZSBkZWFkbG9ja3Mgd2VyZQorICAgIHR5cGljYWxseSB0cmlnZ2Vy ZWQgYnkgbXVsdGlwbGUgdGhyZWFkcyBjb25jdXJyZW50bHkgZGVhbGxvY2F0aW5nIGh1Z2UKKyAg ICBvYmplY3RzLgorCisgIE5ldyBmZWF0dXJlczoKKyAgLSBBZGQgc3VwcG9ydCBmb3IgdGhlIGFh cmNoNjQgYXJjaGl0ZWN0dXJlLgorCisqIDMuMy4xIChNYXJjaCA2LCAyMDEzKQorCisgIFRoaXMg dmVyc2lvbiBmaXhlcyBidWdzIHRoYXQgYXJlIHR5cGljYWxseSBlbmNvdW50ZXJlZCBvbmx5IHdo ZW4gdXRpbGl6aW5nCisgIGN1c3RvbSBydW4tdGltZSBvcHRpb25zLgorCisgIEJ1ZyBmaXhlczoK KyAgLSBGaXggYSBsb2NraW5nIG9yZGVyIGJ1ZyB0aGF0IGNvdWxkIGNhdXNlIGRlYWRsb2NrIGR1 cmluZyBmb3JrIGlmIGhlYXAKKyAgICBwcm9maWxpbmcgd2VyZSBlbmFibGVkLgorICAtIEZpeCBh IGNodW5rIHJlY3ljbGluZyBidWcgdGhhdCBjb3VsZCBjYXVzZSB0aGUgYWxsb2NhdG9yIHRvIGxv c2UgdHJhY2sgb2YKKyAgICB3aGV0aGVyIGEgY2h1bmsgd2FzIHplcm9lZC4gIE9uIEZyZWVCU0Qs IE5ldEJTRCwgYW5kIE9TIFgsIGl0IGNvdWxkIGNhdXNlCisgICAgY29ycnVwdGlvbiBpZiBhbGxv Y2F0aW5nIHZpYSBzYnJrKDIpICh1bmxpa2VseSB1bmxlc3MgcnVubmluZyB3aXRoIHRoZQorICAg ICJkc3M6cHJpbWFyeSIgb3B0aW9uIHNwZWNpZmllZCkuICBUaGlzIHdhcyBjb21wbGV0ZWx5IGhh cm1sZXNzIG9uIExpbnV4CisgICAgdW5sZXNzIHVzaW5nIG1sb2NrYWxsKDIpIChhbmQgdW5saWtl bHkgZXZlbiB0aGVuLCB1bmxlc3MgdGhlCisgICAgLS1kaXNhYmxlLW11bm1hcCBjb25maWd1cmUg b3B0aW9uIG9yIHRoZSAiZHNzOnByaW1hcnkiIG9wdGlvbiB3YXMKKyAgICBzcGVjaWZpZWQpLiAg VGhpcyByZWdyZXNzaW9uIHdhcyBpbnRyb2R1Y2VkIGluIDMuMS4wIGJ5IHRoZQorICAgIG1sb2Nr YWxsKDIpL21hZHZpc2UoMikgaW50ZXJhY3Rpb24gZml4LgorICAtIEZpeCBUTFMtcmVsYXRlZCBt ZW1vcnkgY29ycnVwdGlvbiB0aGF0IGNvdWxkIG9jY3VyIGR1cmluZyB0aHJlYWQgZXhpdCBpZiB0 aGUKKyAgICB0aHJlYWQgbmV2ZXIgYWxsb2NhdGVkIG1lbW9yeS4gIE9ubHkgdGhlIHF1YXJhbnRp bmUgYW5kIHByb2YgZmFjaWxpdGllcyB3ZXJlCisgICAgc3VzY2VwdGlibGUuCisgIC0gRml4IHR3 byBxdWFyYW50aW5lIGJ1Z3M6CisgICAgKyBJbnRlcm5hbCByZWFsbG9jYXRpb24gb2YgdGhlIHF1 YXJhbnRpbmVkIG9iamVjdCBhcnJheSBsZWFrZWQgdGhlIG9sZAorICAgICAgYXJyYXkuCisgICAg KyBSZWFsbG9jYXRpb24gZmFpbHVyZSBmb3IgaW50ZXJuYWwgcmVhbGxvY2F0aW9uIG9mIHRoZSBx dWFyYW50aW5lZCBvYmplY3QKKyAgICAgIGFycmF5ICh2ZXJ5IHVubGlrZWx5KSByZXN1bHRlZCBp biBtZW1vcnkgY29ycnVwdGlvbi4KKyAgLSBGaXggVmFsZ3JpbmQgaW50ZWdyYXRpb24gdG8gYW5u b3RhdGUgYWxsIGludGVybmFsbHkgYWxsb2NhdGVkIG1lbW9yeSBpbiBhCisgICAgd2F5IHRoYXQg a2VlcHMgVmFsZ3JpbmQgaGFwcHkgYWJvdXQgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmUgYWNjZXNz LgorICAtIEZpeCBidWlsZGluZyBmb3IgczM5MCBzeXN0ZW1zLgorCisqIDMuMy4wIChKYW51YXJ5 IDIzLCAyMDEzKQorCisgIFRoaXMgdmVyc2lvbiBpbmNsdWRlcyBhIGZldyBtaW5vciBwZXJmb3Jt YW5jZSBpbXByb3ZlbWVudHMgaW4gYWRkaXRpb24gdG8gdGhlCisgIGxpc3RlZCBuZXcgZmVhdHVy ZXMgYW5kIGJ1ZyBmaXhlcy4KKworICBOZXcgZmVhdHVyZXM6CisgIC0gQWRkIGNsaXBwaW5nIHN1 cHBvcnQgdG8gbGdfY2h1bmsgb3B0aW9uIHByb2Nlc3NpbmcuCisgIC0gQWRkIHRoZSAtLWVuYWJs ZS1pdnNhbGxvYyBvcHRpb24uCisgIC0gQWRkIHRoZSAtLXdpdGhvdXQtZXhwb3J0IG9wdGlvbi4K KyAgLSBBZGQgdGhlIC0tZGlzYWJsZS16b25lLWFsbG9jYXRvciBvcHRpb24uCisKKyAgQnVnIGZp eGVzOgorICAtIEZpeCAiYXJlbmFzLmV4dGVuZCIgbWFsbGN0bCB0byBvdXRwdXQgdGhlIG51bWJl ciBvZiBhcmVuYXMuCisgIC0gRml4IGNodW5rX3JlY3ljbGUoKSB0byB1bmNvbmRpdGlvbmFsbHkg aW5mb3JtIFZhbGdyaW5kIHRoYXQgcmV0dXJuZWQgbWVtb3J5CisgICAgaXMgdW5kZWZpbmVkLgor ICAtIEZpeCBidWlsZCBicmVhayBvbiBGcmVlQlNEIHJlbGF0ZWQgdG8gYWxsb2NhLmguCisKKyog My4yLjAgKE5vdmVtYmVyIDksIDIwMTIpCisKKyAgSW4gYWRkaXRpb24gdG8gYSBjb3VwbGUgb2Yg YnVnIGZpeGVzLCB0aGlzIHZlcnNpb24gbW9kaWZpZXMgcGFnZSBydW4KKyAgYWxsb2NhdGlvbiBh bmQgZGlydHkgcGFnZSBwdXJnaW5nIGFsZ29yaXRobXMgaW4gb3JkZXIgdG8gYmV0dGVyIGNvbnRy b2wKKyAgcGFnZS1sZXZlbCB2aXJ0dWFsIG1lbW9yeSBmcmFnbWVudGF0aW9uLgorCisgIEluY29t cGF0aWJsZSBjaGFuZ2VzOgorICAtIENoYW5nZSB0aGUgIm9wdC5sZ19kaXJ0eV9tdWx0IiBkZWZh dWx0IGZyb20gNSB0byAzICgzMjoxIHRvIDg6MSkuCisKKyAgQnVnIGZpeGVzOgorICAtIEZpeCBk c3MvbW1hcCBhbGxvY2F0aW9uIHByZWNlZGVuY2UgY29kZSB0byB1c2UgcmVjeWNsYWJsZSBtbWFw IG1lbW9yeSBvbmx5CisgICAgYWZ0ZXIgcHJpbWFyeSBkc3MgYWxsb2NhdGlvbiBmYWlscy4KKyAg LSBGaXggZGVhZGxvY2sgaW4gdGhlICJhcmVuYXMucHVyZ2UiIG1hbGxjdGwuICBUaGlzIHJlZ3Jl c3Npb24gd2FzIGludHJvZHVjZWQKKyAgICBpbiAzLjEuMCBieSB0aGUgYWRkaXRpb24gb2YgdGhl ICJhcmVuYS48aT4ucHVyZ2UiIG1hbGxjdGwuCisKKyogMy4xLjAgKE9jdG9iZXIgMTYsIDIwMTIp CisKKyAgTmV3IGZlYXR1cmVzOgorICAtIEF1dG8tZGV0ZWN0IHdoZXRoZXIgcnVubmluZyBpbnNp ZGUgVmFsZ3JpbmQsIHRodXMgcmVtb3ZpbmcgdGhlIG5lZWQgdG8KKyAgICBtYW51YWxseSBzcGVj aWZ5IE1BTExPQ19DT05GPXZhbGdyaW5kOnRydWUuCisgIC0gQWRkIHRoZSAiYXJlbmFzLmV4dGVu ZCIgbWFsbGN0bCwgd2hpY2ggYWxsb3dzIGFwcGxpY2F0aW9ucyB0byBjcmVhdGUKKyAgICBtYW51 YWxseSBtYW5hZ2VkIGFyZW5hcy4KKyAgLSBBZGQgdGhlIEFMTE9DTV9BUkVOQSgpIGZsYWcgZm9y IHsscixkfWFsbG9jbSgpLgorICAtIEFkZCB0aGUgIm9wdC5kc3MiLCAiYXJlbmEuPGk+LmRzcyIs IGFuZCAic3RhdHMuYXJlbmFzLjxpPi5kc3MiIG1hbGxjdGxzLAorICAgIHdoaWNoIHByb3ZpZGUg Y29udHJvbCBvdmVyIGRzcy9tbWFwIHByZWNlZGVuY2UuCisgIC0gQWRkIHRoZSAiYXJlbmEuPGk+ LnB1cmdlIiBtYWxsY3RsLCB3aGljaCBvYnNvbGV0ZXMgImFyZW5hcy5wdXJnZSIuCisgIC0gRGVm aW5lIExHX1FVQU5UVU0gZm9yIGhwcGEuCisKKyAgSW5jb21wYXRpYmxlIGNoYW5nZXM6CisgIC0g RGlzYWJsZSB0Y2FjaGUgYnkgZGVmYXVsdCBpZiBydW5uaW5nIGluc2lkZSBWYWxncmluZCwgaW4g b3JkZXIgdG8gYXZvaWQKKyAgICBtYWtpbmcgdW5hbGxvY2F0ZWQgb2JqZWN0cyBhcHBlYXIgcmVh Y2hhYmxlIHRvIFZhbGdyaW5kLgorICAtIERyb3AgY29uc3QgZnJvbSBtYWxsb2NfdXNhYmxlX3Np emUoKSBhcmd1bWVudCBvbiBMaW51eC4KKworICBCdWcgZml4ZXM6CisgIC0gRml4IGhlYXAgcHJv ZmlsaW5nIGNyYXNoIGlmIHNhbXBsZWQgb2JqZWN0IGlzIGZyZWVkIHZpYSByZWFsbG9jKHAsIDAp LgorICAtIFJlbW92ZSBjb25zdCBmcm9tIF9fKl9ob29rIHZhcmlhYmxlIGRlY2xhcmF0aW9ucywg c28gdGhhdCBnbGliYyBjYW4gbW9kaWZ5CisgICAgdGhlbSBkdXJpbmcgcHJvY2VzcyBmb3JraW5n LgorICAtIEZpeCBtbG9ja2FsbCgyKS9tYWR2aXNlKDIpIGludGVyYWN0aW9uLgorICAtIEZpeCBm b3JrKDIpLXJlbGF0ZWQgZGVhZGxvY2tzLgorICAtIEZpeCBlcnJvciByZXR1cm4gdmFsdWUgZm9y ICJ0aHJlYWQudGNhY2hlLmVuYWJsZWQiIG1hbGxjdGwuCisKKyogMy4wLjAgKE1heSAxMSwgMjAx MikKKworICBBbHRob3VnaCB0aGlzIHZlcnNpb24gYWRkcyBzb21lIG1ham9yIG5ldyBmZWF0dXJl cywgdGhlIHByaW1hcnkgZm9jdXMgaXMgb24KKyAgaW50ZXJuYWwgY29kZSBjbGVhbnVwIHRoYXQg ZmFjaWxpdGF0ZXMgbWFpbnRhaW5hYmlsaXR5IGFuZCBwb3J0YWJpbGl0eSwgbW9zdAorICBvZiB3 aGljaCBpcyBub3QgcmVmbGVjdGVkIGluIHRoZSBDaGFuZ2VMb2cuICBUaGlzIGlzIHRoZSBmaXJz dCByZWxlYXNlIHRvCisgIGluY29ycG9yYXRlIHN1YnN0YW50aWFsIGNvbnRyaWJ1dGlvbnMgZnJv bSBudW1lcm91cyBvdGhlciBkZXZlbG9wZXJzLCBhbmQgdGhlCisgIHJlc3VsdCBpcyBhIG1vcmUg YnJvYWRseSB1c2VmdWwgYWxsb2NhdG9yIChzZWUgdGhlIGdpdCByZXZpc2lvbiBoaXN0b3J5IGZv cgorICBjb250cmlidXRpb24gZGV0YWlscykuICBOb3RlIHRoYXQgdGhlIGxpY2Vuc2UgaGFzIGJl ZW4gdW5pZmllZCwgdGhhbmtzIHRvCisgIEZhY2Vib29rIGdyYW50aW5nIGEgbGljZW5zZSB1bmRl ciB0aGUgc2FtZSB0ZXJtcyBhcyB0aGUgb3RoZXIgY29weXJpZ2h0CisgIGhvbGRlcnMgKHNlZSBD T1BZSU5HKS4KKworICBOZXcgZmVhdHVyZXM6CisgIC0gSW1wbGVtZW50IFZhbGdyaW5kIHN1cHBv cnQsIHJlZHpvbmVzLCBhbmQgcXVhcmFudGluZS4KKyAgLSBBZGQgc3VwcG9ydCBmb3IgYWRkaXRp b25hbCBwbGF0Zm9ybXM6CisgICAgKyBGcmVlQlNECisgICAgKyBNYWMgT1MgWCBMaW9uCisgICAg KyBNaW5HVworICAgICsgV2luZG93cyAobm8gc3VwcG9ydCB5ZXQgZm9yIHJlcGxhY2luZyB0aGUg c3lzdGVtIG1hbGxvYykKKyAgLSBBZGQgc3VwcG9ydCBmb3IgYWRkaXRpb25hbCBhcmNoaXRlY3R1 cmVzOgorICAgICsgTUlQUworICAgICsgU0g0CisgICAgKyBUaWxlcmEKKyAgLSBBZGQgc3VwcG9y dCBmb3IgY3Jvc3MgY29tcGlsaW5nLgorICAtIEFkZCBuYWxsb2NtKCksIHdoaWNoIHJvdW5kcyBh IHJlcXVlc3Qgc2l6ZSB1cCB0byB0aGUgbmVhcmVzdCBzaXplIGNsYXNzCisgICAgd2l0aG91dCBh Y3R1YWxseSBhbGxvY2F0aW5nLgorICAtIEltcGxlbWVudCBhbGlnbmVkX2FsbG9jKCkgKGJsYW1l IEMxMSkuCisgIC0gQWRkIHRoZSAidGhyZWFkLnRjYWNoZS5lbmFibGVkIiBtYWxsY3RsLgorICAt IEFkZCB0aGUgIm9wdC5wcm9mX2ZpbmFsIiBtYWxsY3RsLgorICAtIFVwZGF0ZSBwcHJvZiAoZnJv bSBncGVyZnRvb2xzIDIuMCkuCisgIC0gQWRkIHRoZSAtLXdpdGgtbWFuZ2xpbmcgb3B0aW9uLgor ICAtIEFkZCB0aGUgLS1kaXNhYmxlLWV4cGVyaW1lbnRhbCBvcHRpb24uCisgIC0gQWRkIHRoZSAt LWRpc2FibGUtbXVubWFwIG9wdGlvbiwgYW5kIG1ha2UgaXQgdGhlIGRlZmF1bHQgb24gTGludXgu CisgIC0gQWRkIHRoZSAtLWVuYWJsZS1tcmVtYXAgb3B0aW9uLCB3aGljaCBkaXNhYmxlcyB1c2Ug b2YgbXJlbWFwKDIpIGJ5IGRlZmF1bHQuCisKKyAgSW5jb21wYXRpYmxlIGNoYW5nZXM6CisgIC0g RW5hYmxlIHN0YXRzIGJ5IGRlZmF1bHQuCisgIC0gRW5hYmxlIGZpbGwgYnkgZGVmYXVsdC4KKyAg LSBEaXNhYmxlIGxhenkgbG9ja2luZyBieSBkZWZhdWx0LgorICAtIFJlbmFtZSB0aGUgInRjYWNo ZS5mbHVzaCIgbWFsbGN0bCB0byAidGhyZWFkLnRjYWNoZS5mbHVzaCIuCisgIC0gUmVuYW1lIHRo ZSAiYXJlbmFzLnBhZ2VzaXplIiBtYWxsY3RsIHRvICJhcmVuYXMucGFnZSIuCisgIC0gQ2hhbmdl IHRoZSAib3B0LmxnX3Byb2Zfc2FtcGxlIiBkZWZhdWx0IGZyb20gMCB0byAxOSAoMSBCIHRvIDUx MiBLaUIpLgorICAtIENoYW5nZSB0aGUgIm9wdC5wcm9mX2FjY3VtIiBkZWZhdWx0IGZyb20gdHJ1 ZSB0byBmYWxzZS4KKworICBSZW1vdmVkIGZlYXR1cmVzOgorICAtIFJlbW92ZSB0aGUgc3dhcCBm ZWF0dXJlLCBpbmNsdWRpbmcgdGhlICJjb25maWcuc3dhcCIsICJzd2FwLmF2YWlsIiwKKyAgICAi c3dhcC5wcmV6ZXJvZWQiLCAic3dhcC5uZmRzIiwgYW5kICJzd2FwLmZkcyIgbWFsbGN0bHMuCisg IC0gUmVtb3ZlIGhpZ2hydW5zIHN0YXRpc3RpY3MsIGluY2x1ZGluZyB0aGUKKyAgICAic3RhdHMu YXJlbmFzLjxpPi5iaW5zLjxqPi5oaWdocnVucyIgYW5kCisgICAgInN0YXRzLmFyZW5hcy48aT4u bHJ1bnMuPGo+LmhpZ2hydW5zIiBtYWxsY3Rscy4KKyAgLSBBcyBwYXJ0IG9mIHNtYWxsIHNpemUg Y2xhc3MgcmVmYWN0b3JpbmcsIHJlbW92ZSB0aGUgIm9wdC5sZ19bcWNdc3BhY2VfbWF4IiwKKyAg ICAiYXJlbmFzLmNhY2hlbGluZSIsICJhcmVuYXMuc3VicGFnZSIsICJhcmVuYXMuW3RxY3Ndc3Bh Y2Vfe21pbixtYXh9IiwgYW5kCisgICAgImFyZW5hcy5bdHFjc11iaW5zIiBtYWxsY3Rscy4KKyAg LSBSZW1vdmUgdGhlICJhcmVuYXMuY2h1bmtzaXplIiBtYWxsY3RsLgorICAtIFJlbW92ZSB0aGUg Im9wdC5sZ19wcm9mX3RjbWF4IiBvcHRpb24uCisgIC0gUmVtb3ZlIHRoZSAib3B0LmxnX3Byb2Zf YnRfbWF4IiBvcHRpb24uCisgIC0gUmVtb3ZlIHRoZSAib3B0LmxnX3RjYWNoZV9nY19zd2VlcCIg b3B0aW9uLgorICAtIFJlbW92ZSB0aGUgLS1kaXNhYmxlLXRpbnkgb3B0aW9uLCBpbmNsdWRpbmcg dGhlICJjb25maWcudGlueSIgbWFsbGN0bC4KKyAgLSBSZW1vdmUgdGhlIC0tZW5hYmxlLWR5bmFt aWMtcGFnZS1zaGlmdCBjb25maWd1cmUgb3B0aW9uLgorICAtIFJlbW92ZSB0aGUgLS1lbmFibGUt c3lzdiBjb25maWd1cmUgb3B0aW9uLgorCisgIEJ1ZyBmaXhlczoKKyAgLSBGaXggYSBzdGF0aXN0 aWNzLXJlbGF0ZWQgYnVnIGluIHRoZSAidGhyZWFkLmFyZW5hIiBtYWxsY3RsIHRoYXQgY291bGQg Y2F1c2UKKyAgICBpbnZhbGlkIHN0YXRpc3RpY3MgYW5kIGNyYXNoZXMuCisgIC0gV29yayBhcm91 bmQgVExTIGRlYWxsb2NhdGlvbiB2aWEgZnJlZSgpIG9uIExpbnV4LiAgVGhpcyBidWcgY291bGQg Y2F1c2UKKyAgICB3cml0ZS1hZnRlci1mcmVlIG1lbW9yeSBjb3JydXB0aW9uLgorICAtIEZpeCBh IHBvdGVudGlhbCBkZWFkbG9jayB0aGF0IGNvdWxkIG9jY3VyIGR1cmluZyBpbnRlcnZhbC0gYW5k CisgICAgZ3Jvd3RoLXRyaWdnZXJlZCBoZWFwIHByb2ZpbGUgZHVtcHMuCisgIC0gRml4IGxhcmdl IGNhbGxvYygpIHplcm9pbmcgYnVncyBkdWUgdG8gZHJvcHBpbmcgY2h1bmsgbWFwIHVuemVyb2Vk IGZsYWdzLgorICAtIEZpeCBjaHVua19hbGxvY19kc3MoKSB0byBzdG9wIGNsYWltaW5nIG1lbW9y eSBpcyB6ZXJvZWQuICBUaGlzIGJ1ZyBjb3VsZAorICAgIGNhdXNlIG1lbW9yeSBjb3JydXB0aW9u IGFuZCBjcmFzaGVzIHdpdGggLS1lbmFibGUtZHNzIHNwZWNpZmllZC4KKyAgLSBGaXggZm9yay1y ZWxhdGVkIGJ1Z3MgdGhhdCBjb3VsZCBjYXVzZSBkZWFkbG9jayBpbiBjaGlsZHJlbiBiZXR3ZWVu IGZvcmsKKyAgICBhbmQgZXhlYy4KKyAgLSBGaXggbWFsbG9jX3N0YXRzX3ByaW50KCkgdG8gaG9u b3IgJ2InIGFuZCAnbCcgaW4gdGhlIG9wdHMgcGFyYW1ldGVyLgorICAtIEZpeCByZWFsbG9jKHAs IDApIHRvIGFjdCBsaWtlIGZyZWUocCkuCisgIC0gRG8gbm90IGVuZm9yY2UgbWluaW11bSBhbGln bm1lbnQgaW4gbWVtYWxpZ24oKS4KKyAgLSBDaGVjayBmb3IgTlVMTCBwb2ludGVyIGluIG1hbGxv Y191c2FibGVfc2l6ZSgpLgorICAtIEZpeCBhbiBvZmYtYnktb25lIGhlYXAgcHJvZmlsZSBzdGF0 aXN0aWNzIGJ1ZyB0aGF0IGNvdWxkIGJlIG9ic2VydmVkIGluCisgICAgaW50ZXJ2YWwtIGFuZCBn cm93dGgtdHJpZ2dlcmVkIGhlYXAgcHJvZmlsZXMuCisgIC0gRml4IHRoZSAiZXBvY2giIG1hbGxj dGwgdG8gdXBkYXRlIGNhY2hlZCBzdGF0cyBldmVuIGlmIHRoZSBwYXNzZWQgaW4gZXBvY2gKKyAg ICBpcyAwLgorICAtIEZpeCBiaW4tPnJ1bmN1ciBtYW5hZ2VtZW50IHRvIGZpeCBhIGxheW91dCBw b2xpY3kgYnVnLiAgVGhpcyBidWcgZGlkIG5vdAorICAgIGFmZmVjdCBjb3JyZWN0bmVzcy4KKyAg LSBGaXggYSBidWcgaW4gY2hvb3NlX2FyZW5hX2hhcmQoKSB0aGF0IHBvdGVudGlhbGx5IGNhdXNl ZCBtb3JlIGFyZW5hcyB0byBiZQorICAgIGluaXRpYWxpemVkIHRoYW4gbmVjZXNzYXJ5LgorICAt IEFkZCBtaXNzaW5nICJvcHQubGdfdGNhY2hlX21heCIgbWFsbGN0bCBpbXBsZW1lbnRhdGlvbi4K KyAgLSBVc2UgZ2xpYmMgYWxsb2NhdG9yIGhvb2tzIHRvIG1ha2UgbWl4ZWQgYWxsb2NhdG9yIHVz YWdlIGxlc3MgbGlrZWx5LgorICAtIEZpeCBidWlsZCBpc3N1ZXMgZm9yIC0tZGlzYWJsZS10Y2Fj aGUuCisgIC0gRG9uJ3QgbWFuZ2xlIHB0aHJlYWRfY3JlYXRlKCkgd2hlbiAtLXdpdGgtcHJpdmF0 ZS1uYW1lc3BhY2UgaXMgc3BlY2lmaWVkLgorCisqIDIuMi41IChOb3ZlbWJlciAxNCwgMjAxMSkK KworICBCdWcgZml4ZXM6CisgIC0gRml4IGh1Z2VfcmFsbG9jKCkgcmFjZSB3aGVuIHVzaW5nIG1y ZW1hcCgyKS4gIFRoaXMgaXMgYSBzZXJpb3VzIGJ1ZyB0aGF0CisgICAgY291bGQgY2F1c2UgbWVt b3J5IGNvcnJ1cHRpb24gYW5kL29yIGNyYXNoZXMuCisgIC0gRml4IGh1Z2VfcmFsbG9jKCkgdG8g bWFpbnRhaW4gY2h1bmsgc3RhdGlzdGljcy4KKyAgLSBGaXggbWFsbG9jX3N0YXRzX3ByaW50KC4u LiwgImEiKSBvdXRwdXQuCisKKyogMi4yLjQgKE5vdmVtYmVyIDUsIDIwMTEpCisKKyAgQnVnIGZp eGVzOgorICAtIEluaXRpYWxpemUgYXJlbmFzX3RzZCBiZWZvcmUgdXNpbmcgaXQuICBUaGlzIGJ1 ZyBleGlzdGVkIGZvciAyLjIuWzAtM10sIGFzCisgICAgd2VsbCBhcyBmb3IgLS1kaXNhYmxlLXRs cyBidWlsZHMgaW4gZWFybGllciByZWxlYXNlcy4KKyAgLSBEbyBub3QgYXNzdW1lIGEgNCBLaUIg cGFnZSBzaXplIGluIHRlc3QvcmFsbG9jbS5jLgorCisqIDIuMi4zIChBdWd1c3QgMzEsIDIwMTEp CisKKyAgVGhpcyB2ZXJzaW9uIGZpeGVzIG51bWVyb3VzIGJ1Z3MgcmVsYXRlZCB0byBoZWFwIHBy b2ZpbGluZy4KKworICBCdWcgZml4ZXM6CisgIC0gRml4IGEgcHJvZi1yZWxhdGVkIHJhY2UgY29u ZGl0aW9uLiAgVGhpcyBidWcgY291bGQgY2F1c2UgbWVtb3J5IGNvcnJ1cHRpb24sCisgICAgYnV0 IG9ubHkgb2NjdXJyZWQgaW4gbm9uLWRlZmF1bHQgY29uZmlndXJhdGlvbnMgKHByb2ZfYWNjdW06 ZmFsc2UpLgorICAtIEZpeCBvZmYtYnktb25lIGJhY2t0cmFjaW5nIGlzc3VlcyAobWFrZSBzdXJl IHRoYXQgcHJvZl9hbGxvY19wcmVwKCkgaXMKKyAgICBleGNsdWRlZCBmcm9tIGJhY2t0cmFjZXMp LgorICAtIEZpeCBhIHByb2YtcmVsYXRlZCBidWcgaW4gcmVhbGxvYygpIChvbmx5IHRyaWdnZXJl ZCBieSBPT00gZXJyb3JzKS4KKyAgLSBGaXggcHJvZi1yZWxhdGVkIGJ1Z3MgaW4gYWxsb2NtKCkg YW5kIHJhbGxvY20oKS4KKyAgLSBGaXggcHJvZl90ZGF0YV9jbGVhbnVwKCkgZm9yIC0tZGlzYWJs ZS10bHMgYnVpbGRzLgorICAtIEZpeCBhIHJlbGF0aXZlIGluY2x1ZGUgcGF0aCwgdG8gZml4IG9i amRpciBidWlsZHMuCisKKyogMi4yLjIgKEp1bHkgMzAsIDIwMTEpCisKKyAgQnVnIGZpeGVzOgor ICAtIEZpeCBhIGJ1aWxkIGVycm9yIGZvciAtLWRpc2FibGUtdGNhY2hlLgorICAtIEZpeCBhc3Nl cnRpb25zIGluIGFyZW5hX3B1cmdlKCkgKGZvciByZWFsIHRoaXMgdGltZSkuCisgIC0gQWRkIHRo ZSAtLXdpdGgtcHJpdmF0ZS1uYW1lc3BhY2Ugb3B0aW9uLiAgVGhpcyBpcyBhIHdvcmthcm91bmQg Zm9yIHN5bWJvbAorICAgIGNvbmZsaWN0cyB0aGF0IGNhbiBpbmFkdmVydGVudGx5IGFyaXNlIHdo ZW4gdXNpbmcgc3RhdGljIGxpYnJhcmllcy4KKworKiAyLjIuMSAoTWFyY2ggMzAsIDIwMTEpCisK KyAgQnVnIGZpeGVzOgorICAtIEltcGxlbWVudCBhdG9taWMgb3BlcmF0aW9ucyBmb3IgeDg2L3g2 NC4gIFRoaXMgZml4ZXMgY29tcGlsYXRpb24gZmFpbHVyZXMKKyAgICBmb3IgdmVyc2lvbnMgb2Yg Z2NjIHRoYXQgYXJlIHN0aWxsIGluIHdpZGUgdXNlLgorICAtIEZpeCBhbiBhc3NlcnRpb24gaW4g YXJlbmFfcHVyZ2UoKS4KKworKiAyLjIuMCAoTWFyY2ggMjIsIDIwMTEpCisKKyAgVGhpcyB2ZXJz aW9uIGluY29ycG9yYXRlcyBzZXZlcmFsIGltcHJvdmVtZW50cyB0byBhbGdvcml0aG1zIGFuZCBk YXRhCisgIHN0cnVjdHVyZXMgdGhhdCB0ZW5kIHRvIHJlZHVjZSBmcmFnbWVudGF0aW9uIGFuZCBp bmNyZWFzZSBzcGVlZC4KKworICBOZXcgZmVhdHVyZXM6CisgIC0gQWRkIHRoZSAic3RhdHMuY2Fj dGl2ZSIgbWFsbGN0bC4KKyAgLSBVcGRhdGUgcHByb2YgKGZyb20gZ29vZ2xlLXBlcmZ0b29scyAx LjcpLgorICAtIEltcHJvdmUgYmFja3RyYWNpbmctcmVsYXRlZCBjb25maWd1cmF0aW9uIGxvZ2lj LCBhbmQgYWRkIHRoZQorICAgIC0tZGlzYWJsZS1wcm9mLWxpYmdjYyBvcHRpb24uCisKKyAgQnVn IGZpeGVzOgorICAtIENoYW5nZSBkZWZhdWx0IHN5bWJvbCB2aXNpYmlsaXR5IGZyb20gImludGVy bmFsIiwgdG8gImhpZGRlbiIsIHdoaWNoCisgICAgZGVjcmVhc2VzIHRoZSBvdmVyaGVhZCBvZiBs aWJyYXJ5LWludGVybmFsIGZ1bmN0aW9uIGNhbGxzLgorICAtIEZpeCBzeW1ib2wgdmlzaWJpbGl0 eSBzbyB0aGF0IGl0IGlzIGFsc28gc2V0IG9uIE9TIFguCisgIC0gRml4IGEgYnVpbGQgZGVwZW5k ZW5jeSByZWdyZXNzaW9uIGNhdXNlZCBieSB0aGUgaW50cm9kdWN0aW9uIG9mIHRoZSAucGljLm8K KyAgICBzdWZmaXggZm9yIFBJQyBvYmplY3QgZmlsZXMuCisgIC0gQWRkIG1pc3NpbmcgY2hlY2tz IGZvciBtdXRleCBpbml0aWFsaXphdGlvbiBmYWlsdXJlcy4KKyAgLSBEb24ndCB1c2UgbGliZ2Nj LWJhc2VkIGJhY2t0cmFjaW5nIGV4Y2VwdCBvbiB4NjQsIHdoZXJlIGl0IGlzIGtub3duIHRvIHdv cmsuCisgIC0gRml4IGRlYWRsb2NrcyBvbiBPUyBYIHRoYXQgd2VyZSBkdWUgdG8gbWVtb3J5IGFs bG9jYXRpb24gaW4KKyAgICBwdGhyZWFkX211dGV4X2xvY2soKS4KKyAgLSBIZWFwIHByb2ZpbGlu Zy1zcGVjaWZpYyBmaXhlczoKKyAgICArIEZpeCBtZW1vcnkgY29ycnVwdGlvbiBkdWUgdG8gaW50 ZWdlciBvdmVyZmxvdyBpbiBzbWFsbCByZWdpb24gaW5kZXgKKyAgICAgIGNvbXB1dGF0aW9uLCB3 aGVuIHVzaW5nIGEgc21hbGwgZW5vdWdoIHNhbXBsZSBpbnRlcnZhbCB0aGF0IHByb2ZpbGluZwor ICAgICAgY29udGV4dCBwb2ludGVycyBhcmUgc3RvcmVkIGluIHNtYWxsIHJ1biBoZWFkZXJzLgor ICAgICsgRml4IGEgYm9vdHN0cmFwIG9yZGVyaW5nIGJ1ZyB0aGF0IG9ubHkgb2NjdXJyZWQgd2l0 aCBUTFMgZGlzYWJsZWQuCisgICAgKyBGaXggYSByYWxsb2NtKCkgcnNpemUgYnVnLgorICAgICsg Rml4IGVycm9yIGRldGVjdGlvbiBidWdzIGZvciBhbGlnbmVkIG1lbW9yeSBhbGxvY2F0aW9uLgor CisqIDIuMS4zIChNYXJjaCAxNCwgMjAxMSkKKworICBCdWcgZml4ZXM6CisgIC0gRml4IGEgY3Bw IGxvZ2ljIHJlZ3Jlc3Npb24gKGR1ZSB0byB0aGUgInRocmVhZC57ZGUsfWFsbG9jYXRlZHAiIG1h bGxjdGwgZml4CisgICAgZm9yIE9TIFggaW4gMi4xLjIpLgorICAtIEZpeCBhICJ0aHJlYWQuYXJl bmEiIG1hbGxjdGwgYnVnLgorICAtIEZpeCBhIHRocmVhZCBjYWNoZSBzdGF0cyBtZXJnaW5nIGJ1 Zy4KKworKiAyLjEuMiAoTWFyY2ggMiwgMjAxMSkKKworICBCdWcgZml4ZXM6CisgIC0gRml4ICJ0 aHJlYWQue2RlLH1hbGxvY2F0ZWRwIiBtYWxsY3RsIGZvciBPUyBYLgorICAtIEFkZCBtaXNzaW5n IGplbWFsbG9jLmEgdG8gYnVpbGQgc3lzdGVtLgorCisqIDIuMS4xIChKYW51YXJ5IDMxLCAyMDEx KQorCisgIEJ1ZyBmaXhlczoKKyAgLSBGaXggYWxpZ25lZCBodWdlIHJlYWxsb2NhdGlvbiAoYWZm ZWN0ZWQgYWxsb2NtKCkpLgorICAtIEZpeCB0aGUgQUxMT0NNX0xHX0FMSUdOIG1hY3JvIGRlZmlu aXRpb24uCisgIC0gRml4IGEgaGVhcCBkdW1waW5nIGRlYWRsb2NrLgorICAtIEZpeCBhICJ0aHJl YWQuYXJlbmEiIG1hbGxjdGwgYnVnLgorCisqIDIuMS4wIChEZWNlbWJlciAzLCAyMDEwKQorCisg IFRoaXMgdmVyc2lvbiBpbmNvcnBvcmF0ZXMgc29tZSBvcHRpbWl6YXRpb25zIHRoYXQgY2FuJ3Qg cXVpdGUgYmUgY29uc2lkZXJlZAorICBidWcgZml4ZXMuCisKKyAgTmV3IGZlYXR1cmVzOgorICAt IFVzZSBMaW51eCdzIG1yZW1hcCgyKSBmb3IgaHVnZSBvYmplY3QgcmVhbGxvY2F0aW9uIHdoZW4g cG9zc2libGUuCisgIC0gQXZvaWQgbG9ja2luZyBpbiBtYWxsY3RsKigpIHdoZW4gcG9zc2libGUu CisgIC0gQWRkIHRoZSAidGhyZWFkLltkZV1hbGxvY2F0ZWRwIiBtYWxsY3RsJ3MuCisgIC0gQ29u dmVydCB0aGUgbWFudWFsIHBhZ2Ugc291cmNlIGZyb20gcm9mZiB0byBEb2NCb29rLCBhbmQgZ2Vu ZXJhdGUgYm90aCByb2ZmCisgICAgYW5kIEhUTUwgbWFudWFscy4KKworICBCdWcgZml4ZXM6Cisg IC0gRml4IGEgY3Jhc2ggZHVlIHRvIGluY29ycmVjdCBib290c3RyYXAgb3JkZXJpbmcuICBUaGlz IG9ubHkgaW1wYWN0ZWQKKyAgICAtLWVuYWJsZS1kZWJ1ZyAtLWVuYWJsZS1kc3MgY29uZmlndXJh dGlvbnMuCisgIC0gRml4IGEgbWlub3Igc3RhdGlzdGljcyBidWcgZm9yIG1hbGxjdGwoInN3YXAu YXZhaWwiLCAuLi4pLgorCisqIDIuMC4xIChPY3RvYmVyIDI5LCAyMDEwKQorCisgIEJ1ZyBmaXhl czoKKyAgLSBGaXggYSByYWNlIGNvbmRpdGlvbiBpbiBoZWFwIHByb2ZpbGluZyB0aGF0IGNvdWxk IGNhdXNlIHVuZGVmaW5lZCBiZWhhdmlvcgorICAgIGlmICJvcHQucHJvZl9hY2N1bSIgd2VyZSBk aXNhYmxlZC4KKyAgLSBBZGQgbWlzc2luZyBtdXRleCB1bmxvY2tzIGZvciBzb21lIE9PTSBlcnJv ciBwYXRocyBpbiB0aGUgaGVhcCBwcm9maWxpbmcKKyAgICBjb2RlLgorICAtIEZpeCBhIGNvbXBp bGF0aW9uIGVycm9yIGZvciBub24tQzk5IGJ1aWxkcy4KKworKiAyLjAuMCAoT2N0b2JlciAyNCwg MjAxMCkKKworICBUaGlzIHZlcnNpb24gZm9jdXNlcyBvbiB0aGUgZXhwZXJpbWVudGFsICphbGxv Y20oKSBBUEksIGFuZCBvbiBpbXByb3ZlZAorICBydW4tdGltZSBjb25maWd1cmF0aW9uL2ludHJv c3BlY3Rpb24uICBOb25ldGhlbGVzcywgbnVtZXJvdXMgcGVyZm9ybWFuY2UKKyAgaW1wcm92ZW1l bnRzIGFyZSBhbHNvIGluY2x1ZGVkLgorCisgIE5ldyBmZWF0dXJlczoKKyAgLSBJbXBsZW1lbnQg dGhlIGV4cGVyaW1lbnRhbCB7LHIscyxkfWFsbG9jbSgpIEFQSSwgd2hpY2ggcHJvdmlkZXMgYSBz dXBlcnNldAorICAgIG9mIHRoZSBmdW5jdGlvbmFsaXR5IGF2YWlsYWJsZSB2aWEgbWFsbG9jKCks IGNhbGxvYygpLCBwb3NpeF9tZW1hbGlnbigpLAorICAgIHJlYWxsb2MoKSwgbWFsbG9jX3VzYWJs ZV9zaXplKCksIGFuZCBmcmVlKCkuICBUaGVzZSBmdW5jdGlvbnMgY2FuIGJlIHVzZWQgdG8KKyAg ICBhbGxvY2F0ZS9yZWFsbG9jYXRlIGFsaWduZWQgemVyb2VkIG1lbW9yeSwgYXNrIGZvciBvcHRp b25hbCBleHRyYSBtZW1vcnkKKyAgICBkdXJpbmcgcmVhbGxvY2F0aW9uLCBwcmV2ZW50IG9iamVj dCBtb3ZlbWVudCBkdXJpbmcgcmVhbGxvY2F0aW9uLCBldGMuCisgIC0gUmVwbGFjZSBKRU1BTExP Q19PUFRJT05TL0pFTUFMTE9DX1BST0ZfUFJFRklYIHdpdGggTUFMTE9DX0NPTkYsIHdoaWNoIGlz CisgICAgbW9yZSBodW1hbi1yZWFkYWJsZSwgYW5kIG1vcmUgZmxleGlibGUuICBGb3IgZXhhbXBs ZToKKyAgICAgIEpFTUFMTE9DX09QVElPTlM9QUpQCisgICAgaXMgbm93OgorICAgICAgTUFMTE9D X0NPTkY9YWJvcnQ6dHJ1ZSxmaWxsOnRydWUsc3RhdHNfcHJpbnQ6dHJ1ZQorICAtIFBvcnQgdG8g QXBwbGUgT1MgWC4gIFNwb25zb3JlZCBieSBNb3ppbGxhLgorICAtIE1ha2UgaXQgcG9zc2libGUg Zm9yIHRoZSBhcHBsaWNhdGlvbiB0byBjb250cm9sIHRocmVhZC0tPmFyZW5hIG1hcHBpbmdzIHZp YQorICAgIHRoZSAidGhyZWFkLmFyZW5hIiBtYWxsY3RsLgorICAtIEFkZCBjb21waWxlLXRpbWUg c3VwcG9ydCBmb3IgYWxsIFRMUy1yZWxhdGVkIGZ1bmN0aW9uYWxpdHkgdmlhIHB0aHJlYWRzIFRT RC4KKyAgICBUaGlzIGlzIG1haW5seSBvZiBpbnRlcmVzdCBmb3IgT1MgWCwgd2hpY2ggZG9lcyBu b3Qgc3VwcG9ydCBUTFMsIGJ1dCBoYXMgYQorICAgIFRTRCBpbXBsZW1lbnRhdGlvbiB3aXRoIHNp bWlsYXIgcGVyZm9ybWFuY2UuCisgIC0gT3ZlcnJpZGUgbWVtYWxpZ24oKSBhbmQgdmFsbG9jKCkg aWYgdGhleSBhcmUgcHJvdmlkZWQgYnkgdGhlIHN5c3RlbS4KKyAgLSBBZGQgdGhlICJhcmVuYXMu cHVyZ2UiIG1hbGxjdGwsIHdoaWNoIGNhbiBiZSB1c2VkIHRvIHN5bmNocm9ub3VzbHkgcHVyZ2Ug YWxsCisgICAgZGlydHkgdW51c2VkIHBhZ2VzLgorICAtIE1ha2UgY3VtdWxhdGl2ZSBoZWFwIHBy b2ZpbGluZyBkYXRhIG9wdGlvbmFsLCBzbyB0aGF0IGl0IGlzIHBvc3NpYmxlIHRvCisgICAgbGlt aXQgdGhlIGFtb3VudCBvZiBtZW1vcnkgY29uc3VtZWQgYnkgaGVhcCBwcm9maWxpbmcgZGF0YSBz dHJ1Y3R1cmVzLgorICAtIEFkZCBwZXIgdGhyZWFkIGFsbG9jYXRpb24gY291bnRlcnMgdGhhdCBj YW4gYmUgYWNjZXNzZWQgdmlhIHRoZQorICAgICJ0aHJlYWQuYWxsb2NhdGVkIiBhbmQgInRocmVh ZC5kZWFsbG9jYXRlZCIgbWFsbGN0bHMuCisKKyAgSW5jb21wYXRpYmxlIGNoYW5nZXM6CisgIC0g UmVtb3ZlIEpFTUFMTE9DX09QVElPTlMgYW5kIG1hbGxvY19vcHRpb25zIChzZWUgTUFMTE9DX0NP TkYgYWJvdmUpLgorICAtIEluY3JlYXNlIGRlZmF1bHQgYmFja3RyYWNlIGRlcHRoIGZyb20gNCB0 byAxMjggZm9yIGhlYXAgcHJvZmlsaW5nLgorICAtIERpc2FibGUgaW50ZXJ2YWwtYmFzZWQgcHJv ZmlsZSBkdW1wcyBieSBkZWZhdWx0LgorCisgIEJ1ZyBmaXhlczoKKyAgLSBSZW1vdmUgYmFkIGFz c2VydGlvbnMgaW4gZm9yayBoYW5kbGVyIGZ1bmN0aW9ucy4gIFRoZXNlIGFzc2VydGlvbnMgY291 bGQKKyAgICBjYXVzZSBhYm9ydHMgZm9yIHNvbWUgY29tYmluYXRpb25zIG9mIGNvbmZpZ3VyZSBz ZXR0aW5ncy4KKyAgLSBGaXggc3RyZXJyb3JfcigpIHVzYWdlIHRvIGRlYWwgd2l0aCBub24tc3Rh bmRhcmQgc2VtYW50aWNzIGluIEdOVSBsaWJjLgorICAtIEZpeCBsZWFrIGNvbnRleHQgcmVwb3J0 aW5nLiAgVGhpcyBidWcgdGVuZGVkIHRvIGNhdXNlIHRoZSBudW1iZXIgb2YgY29udGV4dHMKKyAg ICB0byBiZSB1bmRlcnJlcG9ydGVkICh0aG91Z2ggdGhlIHJlcG9ydGVkIG51bWJlciBvZiBvYmpl Y3RzIGFuZCBieXRlcyB3ZXJlCisgICAgY29ycmVjdCkuCisgIC0gRml4IGEgcmVhbGxvYygpIGJ1 ZyBmb3IgbGFyZ2UgaW4tcGxhY2UgZ3Jvd2luZyByZWFsbG9jYXRpb24uICBUaGlzIGJ1ZyBjb3Vs ZAorICAgIGNhdXNlIG1lbW9yeSBjb3JydXB0aW9uLCBidXQgaXQgd2FzIGhhcmQgdG8gdHJpZ2dl ci4KKyAgLSBGaXggYW4gYWxsb2NhdGlvbiBidWcgZm9yIHNtYWxsIGFsbG9jYXRpb25zIHRoYXQg Y291bGQgYmUgdHJpZ2dlcmVkIGlmCisgICAgbXVsdGlwbGUgdGhyZWFkcyByYWNlZCB0byBjcmVh dGUgYSBuZXcgcnVuIG9mIGJhY2tpbmcgcGFnZXMuCisgIC0gRW5oYW5jZSB0aGUgaGVhcCBwcm9m aWxlciB0byB0cmlnZ2VyIHNhbXBsZXMgYmFzZWQgb24gdXNhYmxlIHNpemUsIHJhdGhlcgorICAg IHRoYW4gcmVxdWVzdCBzaXplLgorICAtIEZpeCBhIGhlYXAgcHJvZmlsaW5nIGJ1ZyBkdWUgdG8g c29tZXRpbWVzIGxvc2luZyB0cmFjayBvZiByZXF1ZXN0ZWQgb2JqZWN0CisgICAgc2l6ZSBmb3Ig c2FtcGxlZCBvYmplY3RzLgorCisqIDEuMC4zIChBdWd1c3QgMTIsIDIwMTApCisKKyAgQnVnIGZp eGVzOgorICAtIEZpeCB0aGUgbGlidW53aW5kLWJhc2VkIGltcGxlbWVudGF0aW9uIG9mIHN0YWNr IGJhY2t0cmFjaW5nICh1c2VkIGZvciBoZWFwCisgICAgcHJvZmlsaW5nKS4gIFRoaXMgYnVnIGNv dWxkIGNhdXNlIHplcm8tbGVuZ3RoIGJhY2t0cmFjZXMgdG8gYmUgcmVwb3J0ZWQuCisgIC0gQWRk IGEgbWlzc2luZyBtdXRleCB1bmxvY2sgaW4gbGlicmFyeSBpbml0aWFsaXphdGlvbiBjb2RlLiAg SWYgbXVsdGlwbGUKKyAgICB0aHJlYWRzIHJhY2VkIHRvIGluaXRpYWxpemUgbWFsbG9jLCBzb21l IG9mIHRoZW0gY291bGQgZW5kIHVwIHBlcm1hbmVudGx5CisgICAgYmxvY2tlZC4KKworKiAxLjAu MiAoTWF5IDExLCAyMDEwKQorCisgIEJ1ZyBmaXhlczoKKyAgLSBGaXgganVuayBmaWxsaW5nIG9m IGxhcmdlIG9iamVjdHMsIHdoaWNoIGNvdWxkIGNhdXNlIG1lbW9yeSBjb3JydXB0aW9uLgorICAt IEFkZCBNQVBfTk9SRVNFUlZFIHN1cHBvcnQgZm9yIGNodW5rIG1hcHBpbmcsIGJlY2F1c2Ugb3Ro ZXJ3aXNlIHZpcnR1YWwKKyAgICBtZW1vcnkgbGltaXRzIGNvdWxkIGNhdXNlIHN3YXAgZmlsZSBj b25maWd1cmF0aW9uIHRvIGZhaWwuICBDb250cmlidXRlZCBieQorICAgIEpvcmRhbiBEZUxvbmcu CisKKyogMS4wLjEgKEFwcmlsIDE0LCAyMDEwKQorCisgIEJ1ZyBmaXhlczoKKyAgLSBGaXggY29t cGlsYXRpb24gd2hlbiAtLWVuYWJsZS1maWxsIGlzIHNwZWNpZmllZC4KKyAgLSBGaXggdGhyZWFk cy1yZWxhdGVkIHByb2ZpbGluZyBidWdzIHRoYXQgYWZmZWN0ZWQgYWNjdXJhY3kgYW5kIGNhdXNl ZCBtZW1vcnkKKyAgICB0byBiZSBsZWFrZWQgZHVyaW5nIHRocmVhZCBleGl0LgorICAtIEZpeCBk aXJ0eSBwYWdlIHB1cmdpbmcgcmFjZSBjb25kaXRpb25zIHRoYXQgY291bGQgY2F1c2UgY3Jhc2hl cy4KKyAgLSBGaXggY3Jhc2ggaW4gdGNhY2hlIGZsdXNoaW5nIGNvZGUgZHVyaW5nIHRocmVhZCBk ZXN0cnVjdGlvbi4KKworKiAxLjAuMCAoQXByaWwgMTEsIDIwMTApCisKKyAgVGhpcyByZWxlYXNl IGZvY3VzZXMgb24gc3BlZWQgYW5kIHJ1bi10aW1lIGludHJvc3BlY3Rpb24uICBOdW1lcm91cwor ICBhbGdvcml0aG1pYyBpbXByb3ZlbWVudHMgbWFrZSB0aGlzIHJlbGVhc2Ugc3Vic3RhbnRpYWxs eSBmYXN0ZXIgdGhhbiBpdHMKKyAgcHJlZGVjZXNzb3JzLgorCisgIE5ldyBmZWF0dXJlczoKKyAg LSBJbXBsZW1lbnQgYXV0b2NvbmYtYmFzZWQgY29uZmlndXJhdGlvbiBzeXN0ZW0uCisgIC0gQWRk IG1hbGxjdGwqKCksIGZvciB0aGUgcHVycG9zZXMgb2YgaW50cm9zcGVjdGlvbiBhbmQgcnVuLXRp bWUKKyAgICBjb25maWd1cmF0aW9uLgorICAtIE1ha2UgaXQgcG9zc2libGUgZm9yIHRoZSBhcHBs aWNhdGlvbiB0byBtYW51YWxseSBmbHVzaCBhIHRocmVhZCdzIGNhY2hlLCB2aWEKKyAgICB0aGUg InRjYWNoZS5mbHVzaCIgbWFsbGN0bC4KKyAgLSBCYXNlIG1heGltdW0gZGlydHkgcGFnZSBjb3Vu dCBvbiBwcm9wb3J0aW9uIG9mIGFjdGl2ZSBtZW1vcnkuCisgIC0gQ29tcHV0ZSB2YXJpb3VzIGFk ZGl0aW9uYWwgcnVuLXRpbWUgc3RhdGlzdGljcywgaW5jbHVkaW5nIHBlciBzaXplIGNsYXNzCisg ICAgc3RhdGlzdGljcyBmb3IgbGFyZ2Ugb2JqZWN0cy4KKyAgLSBFeHBvc2UgbWFsbG9jX3N0YXRz X3ByaW50KCksIHdoaWNoIGNhbiBiZSBjYWxsZWQgcmVwZWF0ZWRseSBieSB0aGUKKyAgICBhcHBs aWNhdGlvbi4KKyAgLSBTaW1wbGlmeSB0aGUgbWFsbG9jX21lc3NhZ2UoKSBzaWduYXR1cmUgdG8g b25seSB0YWtlIG9uZSBzdHJpbmcgYXJndW1lbnQsCisgICAgYW5kIGluY29ycG9yYXRlIGFuIG9w YXF1ZSBkYXRhIHBvaW50ZXIgYXJndW1lbnQgZm9yIHVzZSBieSB0aGUgYXBwbGljYXRpb24KKyAg ICBpbiBjb21iaW5hdGlvbiB3aXRoIG1hbGxvY19zdGF0c19wcmludCgpLgorICAtIEFkZCBzdXBw b3J0IGZvciBhbGxvY2F0aW9uIGJhY2tlZCBieSBvbmUgb3IgbW9yZSBzd2FwIGZpbGVzLCBhbmQg YWxsb3cgdGhlCisgICAgYXBwbGljYXRpb24gdG8gZGlzYWJsZSBvdmVyLWNvbW1pdCBpZiBzd2Fw IGZpbGVzIGFyZSBpbiB1c2UuCisgIC0gSW1wbGVtZW50IGFsbG9jYXRpb24gcHJvZmlsaW5nIGFu ZCBsZWFrIGNoZWNraW5nLgorCisgIFJlbW92ZWQgZmVhdHVyZXM6CisgIC0gUmVtb3ZlIHRoZSBk eW5hbWljIGFyZW5hIHJlYmFsYW5jaW5nIGNvZGUsIHNpbmNlIHRocmVhZC1zcGVjaWZpYyBjYWNo aW5nCisgICAgcmVkdWNlcyBpdHMgdXRpbGl0eS4KKworICBCdWcgZml4ZXM6CisgIC0gTW9kaWZ5 IGNodW5rIGFsbG9jYXRpb24gdG8gd29yayB3aGVuIGFkZHJlc3Mgc3BhY2UgbGF5b3V0IHJhbmRv bWl6YXRpb24KKyAgICAoQVNMUikgaXMgaW4gdXNlLgorICAtIEZpeCB0aHJlYWQgY2xlYW51cCBi dWdzIHJlbGF0ZWQgdG8gVExTIGRlc3RydWN0aW9uLgorICAtIEhhbmRsZSAwLXNpemUgYWxsb2Nh dGlvbiByZXF1ZXN0cyBpbiBwb3NpeF9tZW1hbGlnbigpLgorICAtIEZpeCBhIGNodW5rIGxlYWsu ICBUaGUgbGVha2VkIGNodW5rcyB3ZXJlIG5ldmVyIHRvdWNoZWQsIHNvIHRoaXMgaW1wYWN0ZWQK KyAgICB2aXJ0dWFsIG1lbW9yeSB1c2FnZSwgYnV0IG5vdCBwaHlzaWNhbCBtZW1vcnkgdXNhZ2Uu CisKKyogbGludXhfMjAwODA4Mls3OF1hIChBdWd1c3QgMjcvMjgsIDIwMDgpCisKKyAgVGhlc2Ug c25hcHNob3QgcmVsZWFzZXMgYXJlIHRoZSBzaW1wbGUgcmVzdWx0IG9mIGluY29ycG9yYXRpbmcg TGludXgtc3BlY2lmaWMKKyAgc3VwcG9ydCBpbnRvIHRoZSBGcmVlQlNEIG1hbGxvYyBzb3VyY2Vz LgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmltOmZpbGV0eXBlPXRleHQ6dGV4dHdpZHRo PTgwCgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAv SU5TVEFMTC5tZCBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL0lOU1RB TEwubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTBkYTcxOAotLS0gL2Rl di9udWxsCisrKyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL0lOU1RB TEwubWQKQEAgLTAsMCArMSw0MjQgQEAKK0J1aWxkaW5nIGFuZCBpbnN0YWxsaW5nIGEgcGFja2Fn ZWQgcmVsZWFzZSBvZiBqZW1hbGxvYyBjYW4gYmUgYXMgc2ltcGxlIGFzCit0eXBpbmcgdGhlIGZv bGxvd2luZyB3aGlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhlIHNvdXJjZSB0cmVlOgor CisgICAgLi9jb25maWd1cmUKKyAgICBtYWtlCisgICAgbWFrZSBpbnN0YWxsCisKK0lmIGJ1aWxk aW5nIGZyb20gdW5wYWNrYWdlZCBkZXZlbG9wZXIgc291cmNlcywgdGhlIHNpbXBsZXN0IGNvbW1h bmQgc2VxdWVuY2UKK3RoYXQgbWlnaHQgd29yayBpczoKKworICAgIC4vYXV0b2dlbi5zaAorICAg IG1ha2UKKyAgICBtYWtlIGluc3RhbGwKKworWW91IGNhbiB1bmluc3RhbGwgdGhlIGluc3RhbGxl ZCBidWlsZCBhcnRpZmFjdHMgbGlrZSB0aGlzOgorCisgICAgbWFrZSB1bmluc3RhbGwKKworTm90 ZXM6CisgLSAiYXV0b2NvbmYiIG5lZWRzIHRvIGJlIGluc3RhbGxlZAorIC0gRG9jdW1lbnRhdGlv biBpcyBidWlsdCBieSB0aGUgZGVmYXVsdCB0YXJnZXQgb25seSB3aGVuIHhzbHRwcm9jIGlzCith dmFpbGFibGUuICBCdWlsZCB3aWxsIHdhcm4gYnV0IG5vdCBzdG9wIGlmIHRoZSBkZXBlbmRlbmN5 IGlzIG1pc3NpbmcuCisKKworIyMgQWR2YW5jZWQgY29uZmlndXJhdGlvbgorCitUaGUgJ2NvbmZp Z3VyZScgc2NyaXB0IHN1cHBvcnRzIG51bWVyb3VzIG9wdGlvbnMgdGhhdCBhbGxvdyBjb250cm9s IG9mIHdoaWNoCitmdW5jdGlvbmFsaXR5IGlzIGVuYWJsZWQsIHdoZXJlIGplbWFsbG9jIGlzIGlu c3RhbGxlZCwgZXRjLiAgT3B0aW9uYWxseSwgcGFzcworYW55IG9mIHRoZSBmb2xsb3dpbmcgYXJn dW1lbnRzIChub3QgYSBkZWZpbml0aXZlIGxpc3QpIHRvICdjb25maWd1cmUnOgorCisqIGAtLWhl bHBgCisKKyAgICBQcmludCBhIGRlZmluaXRpdmUgbGlzdCBvZiBvcHRpb25zLgorCisqIGAtLXBy ZWZpeD08aW5zdGFsbC1yb290LWRpcj5gCisKKyAgICBTZXQgdGhlIGJhc2UgZGlyZWN0b3J5IGlu IHdoaWNoIHRvIGluc3RhbGwuICBGb3IgZXhhbXBsZToKKworICAgICAgICAuL2NvbmZpZ3VyZSAt LXByZWZpeD0vdXNyL2xvY2FsCisKKyAgICB3aWxsIGNhdXNlIGZpbGVzIHRvIGJlIGluc3RhbGxl ZCBpbnRvIC91c3IvbG9jYWwvaW5jbHVkZSwgL3Vzci9sb2NhbC9saWIsCisgICAgYW5kIC91c3Iv bG9jYWwvbWFuLgorCisqIGAtLXdpdGgtdmVyc2lvbj0oPG1ham9yPi48bWlub3I+LjxidWdmaXg+ LTxucmV2Pi1nPGdpZD58VkVSU0lPTilgCisKKyAgICBUaGUgVkVSU0lPTiBmaWxlIGlzIG1hbmRh dG9yeSBmb3Igc3VjY2Vzc2Z1bCBjb25maWd1cmF0aW9uLCBhbmQgdGhlCisgICAgZm9sbG93aW5n IHN0ZXBzIGFyZSB0YWtlbiB0byBhc3N1cmUgaXRzIHByZXNlbmNlOgorICAgIDEpIElmIC0td2l0 aC12ZXJzaW9uPTxtYWpvcj4uPG1pbm9yPi48YnVnZml4Pi08bnJldj4tZzxnaWQ+IGlzIHNwZWNp ZmllZCwKKyAgICAgICBnZW5lcmF0ZSBWRVJTSU9OIHVzaW5nIHRoZSBzcGVjaWZpZWQgdmFsdWUu CisgICAgMikgSWYgLS13aXRoLXZlcnNpb24gaXMgbm90IHNwZWNpZmllZCBpbiBlaXRoZXIgZm9y bSBhbmQgdGhlIHNvdXJjZQorICAgICAgIGRpcmVjdG9yeSBpcyBpbnNpZGUgYSBnaXQgcmVwb3Np dG9yeSwgdHJ5IHRvIGdlbmVyYXRlIFZFUlNJT04gdmlhICdnaXQKKyAgICAgICBkZXNjcmliZScg aW52b2NhdGlvbnMgdGhhdCBwYXR0ZXJuLW1hdGNoIHJlbGVhc2UgdGFncy4KKyAgICAzKSBJZiBW RVJTSU9OIGlzIG1pc3NpbmcsIGdlbmVyYXRlIGl0IHdpdGggYSBib2d1cyB2ZXJzaW9uOgorICAg ICAgIDAuMC4wLTAtZzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKwor ICAgIE5vdGUgdGhhdCAtLXdpdGgtdmVyc2lvbj1WRVJTSU9OIGJ5cGFzc2VzICgxKSBhbmQgKDIp LCB3aGljaCBzaW1wbGlmaWVzCisgICAgVkVSU0lPTiBjb25maWd1cmF0aW9uIHdoZW4gZW1iZWRk aW5nIGEgamVtYWxsb2MgcmVsZWFzZSBpbnRvIGFub3RoZXIKKyAgICBwcm9qZWN0J3MgZ2l0IHJl cG9zaXRvcnkuCisKKyogYC0td2l0aC1ycGF0aD08Y29sb24tc2VwYXJhdGVkLXJwYXRoPmAKKwor ICAgIEVtYmVkIG9uZSBvciBtb3JlIGxpYnJhcnkgcGF0aHMsIHNvIHRoYXQgbGliamVtYWxsb2Mg Y2FuIGZpbmQgdGhlIGxpYnJhcmllcworICAgIGl0IGlzIGxpbmtlZCB0by4gIFRoaXMgd29ya3Mg b25seSBvbiBFTEYtYmFzZWQgc3lzdGVtcy4KKworKiBgLS13aXRoLW1hbmdsaW5nPTxtYXA+YAor CisgICAgTWFuZ2xlIHB1YmxpYyBzeW1ib2xzIHNwZWNpZmllZCBpbiA8bWFwPiB3aGljaCBpcyBh IGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mCisgICAgbmFtZTptYW5nbGVkIHBhaXJzLgorCisgICAg Rm9yIGV4YW1wbGUsIHRvIHVzZSBsZCdzIC0td3JhcCBvcHRpb24gYXMgYW4gYWx0ZXJuYXRpdmUg bWV0aG9kIGZvcgorICAgIG92ZXJyaWRpbmcgbGliYydzIG1hbGxvYyBpbXBsZW1lbnRhdGlvbiwg c3BlY2lmeSBzb21ldGhpbmcgbGlrZToKKworICAgICAgLS13aXRoLW1hbmdsaW5nPW1hbGxvYzpf X3dyYXBfbWFsbG9jLGZyZWU6X193cmFwX2ZyZWVbLi4uXQorCisgICAgTm90ZSB0aGF0IG1hbmds aW5nIGhhcHBlbnMgcHJpb3IgdG8gYXBwbGljYXRpb24gb2YgdGhlIHByZWZpeCBzcGVjaWZpZWQg YnkKKyAgICAtLXdpdGgtamVtYWxsb2MtcHJlZml4LCBhbmQgbWFuZ2xlZCBzeW1ib2xzIGFyZSB0 aGVuIGlnbm9yZWQgd2hlbiBhcHBseWluZworICAgIHRoZSBwcmVmaXguCisKKyogYC0td2l0aC1q ZW1hbGxvYy1wcmVmaXg9PHByZWZpeD5gCisKKyAgICBQcmVmaXggYWxsIHB1YmxpYyBBUElzIHdp dGggPHByZWZpeD4uICBGb3IgZXhhbXBsZSwgaWYgPHByZWZpeD4gaXMKKyAgICAicHJlZml4XyIs IEFQSSBjaGFuZ2VzIGxpa2UgdGhlIGZvbGxvd2luZyBvY2N1cjoKKworICAgICAgbWFsbG9jKCkg ICAgICAgICAtLT4gcHJlZml4X21hbGxvYygpCisgICAgICBtYWxsb2NfY29uZiAgICAgIC0tPiBw cmVmaXhfbWFsbG9jX2NvbmYKKyAgICAgIC9ldGMvbWFsbG9jLmNvbmYgLS0+IC9ldGMvcHJlZml4 X21hbGxvYy5jb25mCisgICAgICBNQUxMT0NfQ09ORiAgICAgIC0tPiBQUkVGSVhfTUFMTE9DX0NP TkYKKworICAgIFRoaXMgbWFrZXMgaXQgcG9zc2libGUgdG8gdXNlIGplbWFsbG9jIGF0IHRoZSBz YW1lIHRpbWUgYXMgdGhlIHN5c3RlbQorICAgIGFsbG9jYXRvciwgb3IgZXZlbiB0byB1c2UgbXVs dGlwbGUgY29waWVzIG9mIGplbWFsbG9jIHNpbXVsdGFuZW91c2x5LgorCisgICAgQnkgZGVmYXVs dCwgdGhlIHByZWZpeCBpcyAiIiwgZXhjZXB0IG9uIE9TIFgsIHdoZXJlIGl0IGlzICJqZV8iLiAg T24gT1MgWCwKKyAgICBqZW1hbGxvYyBvdmVybGF5cyB0aGUgZGVmYXVsdCBtYWxsb2Mgem9uZSwg YnV0IG1ha2VzIG5vIGF0dGVtcHQgdG8gYWN0dWFsbHkKKyAgICByZXBsYWNlIHRoZSAibWFsbG9j IiwgImNhbGxvYyIsIGV0Yy4gc3ltYm9scy4KKworKiBgLS13aXRob3V0LWV4cG9ydGAKKworICAg IERvbid0IGV4cG9ydCBwdWJsaWMgQVBJcy4gIFRoaXMgY2FuIGJlIHVzZWZ1bCB3aGVuIGJ1aWxk aW5nIGplbWFsbG9jIGFzIGEKKyAgICBzdGF0aWMgbGlicmFyeSwgb3IgdG8gYXZvaWQgZXhwb3J0 aW5nIHB1YmxpYyBBUElzIHdoZW4gdXNpbmcgdGhlIHpvbmUKKyAgICBhbGxvY2F0b3Igb24gT1NY LgorCisqIGAtLXdpdGgtcHJpdmF0ZS1uYW1lc3BhY2U9PHByZWZpeD5gCisKKyAgICBQcmVmaXgg YWxsIGxpYnJhcnktcHJpdmF0ZSBBUElzIHdpdGggPHByZWZpeD5qZV8uICBGb3Igc2hhcmVkIGxp YnJhcmllcywKKyAgICBzeW1ib2wgdmlzaWJpbGl0eSBtZWNoYW5pc21zIHByZXZlbnQgdGhlc2Ug c3ltYm9scyBmcm9tIGJlaW5nIGV4cG9ydGVkLCBidXQKKyAgICBmb3Igc3RhdGljIGxpYnJhcmll cywgbmFtaW5nIGNvbGxpc2lvbnMgYXJlIGEgcmVhbCBwb3NzaWJpbGl0eS4gIEJ5CisgICAgZGVm YXVsdCwgPHByZWZpeD4gaXMgZW1wdHksIHdoaWNoIHJlc3VsdHMgaW4gYSBzeW1ib2wgcHJlZml4 IG9mIGplXyAuCisKKyogYC0td2l0aC1pbnN0YWxsLXN1ZmZpeD08c3VmZml4PmAKKworICAgIEFw cGVuZCA8c3VmZml4PiB0byB0aGUgYmFzZSBuYW1lIG9mIGFsbCBpbnN0YWxsZWQgZmlsZXMsIHN1 Y2ggdGhhdCBtdWx0aXBsZQorICAgIHZlcnNpb25zIG9mIGplbWFsbG9jIGNhbiBjb2V4aXN0IGlu IHRoZSBzYW1lIGluc3RhbGxhdGlvbiBkaXJlY3RvcnkuICBGb3IKKyAgICBleGFtcGxlLCBsaWJq ZW1hbGxvYy5zby4wIGJlY29tZXMgbGliamVtYWxsb2M8c3VmZml4Pi5zby4wLgorCisqIGAtLXdp dGgtbWFsbG9jLWNvbmY9PG1hbGxvY19jb25mPmAKKworICAgIEVtYmVkIGA8bWFsbG9jX2NvbmY+ YCBhcyBhIHJ1bi10aW1lIG9wdGlvbnMgc3RyaW5nIHRoYXQgaXMgcHJvY2Vzc2VkIHByaW9yIHRv CisgICAgdGhlIG1hbGxvY19jb25mIGdsb2JhbCB2YXJpYWJsZSwgdGhlIC9ldGMvbWFsbG9jLmNv bmYgc3ltbGluaywgYW5kIHRoZQorICAgIE1BTExPQ19DT05GIGVudmlyb25tZW50IHZhcmlhYmxl LiAgRm9yIGV4YW1wbGUsIHRvIGNoYW5nZSB0aGUgZGVmYXVsdCBkZWNheQorICAgIHRpbWUgdG8g MzAgc2Vjb25kczoKKworICAgICAgLS13aXRoLW1hbGxvYy1jb25mPWRlY2F5X21zOjMwMDAwCisK KyogYC0tZW5hYmxlLWRlYnVnYAorCisgICAgRW5hYmxlIGFzc2VydGlvbnMgYW5kIHZhbGlkYXRp b24gY29kZS4gIFRoaXMgaW5jdXJzIGEgc3Vic3RhbnRpYWwKKyAgICBwZXJmb3JtYW5jZSBoaXQs IGJ1dCBpcyB2ZXJ5IHVzZWZ1bCBkdXJpbmcgYXBwbGljYXRpb24gZGV2ZWxvcG1lbnQuCisKKyog YC0tZGlzYWJsZS1zdGF0c2AKKworICAgIERpc2FibGUgc3RhdGlzdGljcyBnYXRoZXJpbmcgZnVu Y3Rpb25hbGl0eS4gIFNlZSB0aGUgIm9wdC5zdGF0c19wcmludCIKKyAgICBvcHRpb24gZG9jdW1l bnRhdGlvbiBmb3IgdXNhZ2UgZGV0YWlscy4KKworKiBgLS1lbmFibGUtcHJvZmAKKworICAgIEVu YWJsZSBoZWFwIHByb2ZpbGluZyBhbmQgbGVhayBkZXRlY3Rpb24gZnVuY3Rpb25hbGl0eS4gIFNl ZSB0aGUgIm9wdC5wcm9mIgorICAgIG9wdGlvbiBkb2N1bWVudGF0aW9uIGZvciB1c2FnZSBkZXRh aWxzLiAgV2hlbiBlbmFibGVkLCB0aGVyZSBhcmUgc2V2ZXJhbAorICAgIGFwcHJvYWNoZXMgdG8g YmFja3RyYWNpbmcsIGFuZCB0aGUgY29uZmlndXJlIHNjcmlwdCBjaG9vc2VzIHRoZSBmaXJzdCBv bmUKKyAgICBpbiB0aGUgZm9sbG93aW5nIGxpc3QgdGhhdCBhcHBlYXJzIHRvIGZ1bmN0aW9uIGNv cnJlY3RseToKKworICAgICsgbGlidW53aW5kICAgICAgKHJlcXVpcmVzIC0tZW5hYmxlLXByb2Yt bGlidW53aW5kKQorICAgICsgbGliZ2NjICAgICAgICAgKHVubGVzcyAtLWRpc2FibGUtcHJvZi1s aWJnY2MpCisgICAgKyBnY2MgaW50cmluc2ljcyAodW5sZXNzIC0tZGlzYWJsZS1wcm9mLWdjYykK KworKiBgLS1lbmFibGUtcHJvZi1saWJ1bndpbmRgCisKKyAgICBVc2UgdGhlIGxpYnVud2luZCBs aWJyYXJ5IChodHRwOi8vd3d3Lm5vbmdudS5vcmcvbGlidW53aW5kLykgZm9yIHN0YWNrCisgICAg YmFja3RyYWNpbmcuCisKKyogYC0tZGlzYWJsZS1wcm9mLWxpYmdjY2AKKworICAgIERpc2FibGUg dGhlIHVzZSBvZiBsaWJnY2MncyBiYWNrdHJhY2luZyBmdW5jdGlvbmFsaXR5LgorCisqIGAtLWRp c2FibGUtcHJvZi1nY2NgCisKKyAgICBEaXNhYmxlIHRoZSB1c2Ugb2YgZ2NjIGludHJpbnNpY3Mg Zm9yIGJhY2t0cmFjaW5nLgorCisqIGAtLXdpdGgtc3RhdGljLWxpYnVud2luZD08bGlidW53aW5k LmE+YAorCisgICAgU3RhdGljYWxseSBsaW5rIGFnYWluc3QgdGhlIHNwZWNpZmllZCBsaWJ1bndp bmQuYSByYXRoZXIgdGhhbiBkeW5hbWljYWxseQorICAgIGxpbmtpbmcgd2l0aCAtbHVud2luZC4K KworKiBgLS1kaXNhYmxlLWZpbGxgCisKKyAgICBEaXNhYmxlIHN1cHBvcnQgZm9yIGp1bmsvemVy byBmaWxsaW5nIG9mIG1lbW9yeS4gIFNlZSB0aGUgIm9wdC5qdW5rIiBhbmQKKyAgICAib3B0Lnpl cm8iIG9wdGlvbiBkb2N1bWVudGF0aW9uIGZvciB1c2FnZSBkZXRhaWxzLgorCisqIGAtLWRpc2Fi bGUtem9uZS1hbGxvY2F0b3JgCisKKyAgICBEaXNhYmxlIHpvbmUgYWxsb2NhdG9yIGZvciBEYXJ3 aW4uICBUaGlzIG1lYW5zIGplbWFsbG9jIHdvbid0IGJlIGhvb2tlZCBhcworICAgIHRoZSBkZWZh dWx0IGFsbG9jYXRvciBvbiBPU1gvaU9TLgorCisqIGAtLWVuYWJsZS11dHJhY2VgCisKKyAgICBF bmFibGUgdXRyYWNlKDIpLWJhc2VkIGFsbG9jYXRpb24gdHJhY2luZy4gIFRoaXMgZmVhdHVyZSBp cyBub3QgYnJvYWRseQorICAgIHBvcnRhYmxlIChGcmVlQlNEIGhhcyBpdCwgYnV0IExpbnV4IGFu ZCBPUyBYIGRvIG5vdCkuCisKKyogYC0tZW5hYmxlLXhtYWxsb2NgCisKKyAgICBFbmFibGUgc3Vw cG9ydCBmb3Igb3B0aW9uYWwgaW1tZWRpYXRlIHRlcm1pbmF0aW9uIGR1ZSB0byBvdXQtb2YtbWVt b3J5CisgICAgZXJyb3JzLCBhcyBpcyBjb21tb25seSBpbXBsZW1lbnRlZCBieSAieG1hbGxvYyIg d3JhcHBlciBmdW5jdGlvbiBmb3IgbWFsbG9jLgorICAgIFNlZSB0aGUgIm9wdC54bWFsbG9jIiBv cHRpb24gZG9jdW1lbnRhdGlvbiBmb3IgdXNhZ2UgZGV0YWlscy4KKworKiBgLS1lbmFibGUtbGF6 eS1sb2NrYAorCisgICAgRW5hYmxlIGNvZGUgdGhhdCB3cmFwcyBwdGhyZWFkX2NyZWF0ZSgpIHRv IGRldGVjdCB3aGVuIGFuIGFwcGxpY2F0aW9uCisgICAgc3dpdGNoZXMgZnJvbSBzaW5nbGUtdGhy ZWFkZWQgdG8gbXVsdGktdGhyZWFkZWQgbW9kZSwgc28gdGhhdCBpdCBjYW4gYXZvaWQKKyAgICBt dXRleCBsb2NraW5nL3VubG9ja2luZyBvcGVyYXRpb25zIHdoaWxlIGluIHNpbmdsZS10aHJlYWRl ZCBtb2RlLiAgSW4KKyAgICBwcmFjdGljZSwgdGhpcyBmZWF0dXJlIHVzdWFsbHkgaGFzIGxpdHRs ZSBpbXBhY3Qgb24gcGVyZm9ybWFuY2UgdW5sZXNzCisgICAgdGhyZWFkLXNwZWNpZmljIGNhY2hp bmcgaXMgZGlzYWJsZWQuCisKKyogYC0tZGlzYWJsZS1jYWNoZS1vYmxpdmlvdXNgCisKKyAgICBE aXNhYmxlIGNhY2hlLW9ibGl2aW91cyBsYXJnZSBhbGxvY2F0aW9uIGFsaWdubWVudCBieSBkZWZh dWx0LCBmb3IgbGFyZ2UKKyAgICBhbGxvY2F0aW9uIHJlcXVlc3RzIHdpdGggbm8gYWxpZ25tZW50 IGNvbnN0cmFpbnRzLiAgSWYgdGhpcyBmZWF0dXJlIGlzCisgICAgZGlzYWJsZWQsIGFsbCBsYXJn ZSBhbGxvY2F0aW9ucyBhcmUgcGFnZS1hbGlnbmVkIGFzIGFuIGltcGxlbWVudGF0aW9uCisgICAg YXJ0aWZhY3QsIHdoaWNoIGNhbiBzZXZlcmVseSBoYXJtIENQVSBjYWNoZSB1dGlsaXphdGlvbi4g IEhvd2V2ZXIsIHRoZQorICAgIGNhY2hlLW9ibGl2aW91cyBsYXlvdXQgY29tZXMgYXQgdGhlIGNv c3Qgb2Ygb25lIGV4dHJhIHBhZ2UgcGVyIGxhcmdlCisgICAgYWxsb2NhdGlvbiwgd2hpY2ggaW4g dGhlIG1vc3QgZXh0cmVtZSBjYXNlIGluY3JlYXNlcyBwaHlzaWNhbCBtZW1vcnkgdXNhZ2UKKyAg ICBmb3IgdGhlIDE2IEtpQiBzaXplIGNsYXNzIHRvIDIwIEtpQi4KKworKiBgLS1kaXNhYmxlLXN5 c2NhbGxgCisKKyAgICBEaXNhYmxlIHVzZSBvZiBzeXNjYWxsKDIpIHJhdGhlciB0aGFuIHtvcGVu LHJlYWQsd3JpdGUsY2xvc2V9KDIpLiAgVGhpcyBpcworICAgIGludGVuZGVkIGFzIGEgd29ya2Fy b3VuZCBmb3Igc3lzdGVtcyB0aGF0IHBsYWNlIHNlY3VyaXR5IGxpbWl0YXRpb25zIG9uCisgICAg c3lzY2FsbCgyKS4KKworKiBgLS1kaXNhYmxlLWN4eGAKKworICAgIERpc2FibGUgQysrIGludGVn cmF0aW9uLiAgVGhpcyB3aWxsIGNhdXNlIG5ldyBhbmQgZGVsZXRlIG9wZXJhdG9yCisgICAgaW1w bGVtZW50YXRpb25zIHRvIGJlIG9taXR0ZWQuCisKKyogYC0td2l0aC14c2xyb290PTxwYXRoPmAK KworICAgIFNwZWNpZnkgd2hlcmUgdG8gZmluZCBEb2NCb29rIFhTTCBzdHlsZXNoZWV0cyB3aGVu IGJ1aWxkaW5nIHRoZQorICAgIGRvY3VtZW50YXRpb24uCisKKyogYC0td2l0aC1sZy1wYWdlPTxs Zy1wYWdlPmAKKworICAgIFNwZWNpZnkgdGhlIGJhc2UgMiBsb2cgb2YgdGhlIGFsbG9jYXRvciBw YWdlIHNpemUsIHdoaWNoIG11c3QgaW4gdHVybiBiZSBhdAorICAgIGxlYXN0IGFzIGxhcmdlIGFz IHRoZSBzeXN0ZW0gcGFnZSBzaXplLiAgQnkgZGVmYXVsdCB0aGUgY29uZmlndXJlIHNjcmlwdAor ICAgIGRldGVybWluZXMgdGhlIGhvc3QncyBwYWdlIHNpemUgYW5kIHNldHMgdGhlIGFsbG9jYXRv ciBwYWdlIHNpemUgZXF1YWwgdG8KKyAgICB0aGUgc3lzdGVtIHBhZ2Ugc2l6ZSwgc28gdGhpcyBv cHRpb24gbmVlZCBub3QgYmUgc3BlY2lmaWVkIHVubGVzcyB0aGUKKyAgICBzeXN0ZW0gcGFnZSBz aXplIG1heSBjaGFuZ2UgYmV0d2VlbiBjb25maWd1cmF0aW9uIGFuZCBleGVjdXRpb24sIGUuZy4g d2hlbgorICAgIGNyb3NzIGNvbXBpbGluZy4KKworKiBgLS13aXRoLWxnLWh1Z2VwYWdlPTxsZy1o dWdlcGFnZT5gCisKKyAgICBTcGVjaWZ5IHRoZSBiYXNlIDIgbG9nIG9mIHRoZSBzeXN0ZW0gaHVn ZSBwYWdlIHNpemUuICBUaGlzIG9wdGlvbiBpcyB1c2VmdWwKKyAgICB3aGVuIGNyb3NzIGNvbXBp bGluZywgb3Igd2hlbiBvdmVycmlkaW5nIHRoZSBkZWZhdWx0IGZvciBzeXN0ZW1zIHRoYXQgZG8K KyAgICBub3QgZXhwbGljaXRseSBzdXBwb3J0IGh1Z2UgcGFnZXMuCisKKyogYC0td2l0aC1sZy1x dWFudHVtPTxsZy1xdWFudHVtPmAKKworICAgIFNwZWNpZnkgdGhlIGJhc2UgMiBsb2cgb2YgdGhl IG1pbmltdW0gYWxsb2NhdGlvbiBhbGlnbm1lbnQuICBqZW1hbGxvYyBuZWVkcworICAgIHRvIGtu b3cgdGhlIG1pbmltdW0gYWxpZ25tZW50IHRoYXQgbWVldHMgdGhlIGZvbGxvd2luZyBDIHN0YW5k YXJkCisgICAgcmVxdWlyZW1lbnQgKHF1b3RlZCBmcm9tIHRoZSBBcHJpbCAxMiwgMjAxMSBkcmFm dCBvZiB0aGUgQzExIHN0YW5kYXJkKToKKworICAgID4gIFRoZSBwb2ludGVyIHJldHVybmVkIGlm IHRoZSBhbGxvY2F0aW9uIHN1Y2NlZWRzIGlzIHN1aXRhYmx5IGFsaWduZWQgc28KKyAgICAgIHRo YXQgaXQgbWF5IGJlIGFzc2lnbmVkIHRvIGEgcG9pbnRlciB0byBhbnkgdHlwZSBvZiBvYmplY3Qg d2l0aCBhCisgICAgICBmdW5kYW1lbnRhbCBhbGlnbm1lbnQgcmVxdWlyZW1lbnQgYW5kIHRoZW4g dXNlZCB0byBhY2Nlc3Mgc3VjaCBhbiBvYmplY3QKKyAgICAgIG9yIGFuIGFycmF5IG9mIHN1Y2gg b2JqZWN0cyBpbiB0aGUgc3BhY2UgYWxsb2NhdGVkIFsuLi5dCisKKyAgICBUaGlzIHNldHRpbmcg aXMgYXJjaGl0ZWN0dXJlLXNwZWNpZmljLCBhbmQgYWx0aG91Z2ggamVtYWxsb2MgaW5jbHVkZXMg a25vd24KKyAgICBzYWZlIHZhbHVlcyBmb3IgdGhlIG1vc3QgY29tbW9ubHkgdXNlZCBtb2Rlcm4g YXJjaGl0ZWN0dXJlcywgdGhlcmUgaXMgYQorICAgIHdyaW5rbGUgcmVsYXRlZCB0byBHTlUgbGli YyAoZ2xpYmMpIHRoYXQgbWF5IGltcGFjdCB5b3VyIGNob2ljZSBvZgorICAgIDxsZy1xdWFudHVt Pi4gIE9uIG1vc3QgbW9kZXJuIGFyY2hpdGVjdHVyZXMsIHRoaXMgbWFuZGF0ZXMgMTYtYnl0ZQor ICAgIGFsaWdubWVudCAoPGxnLXF1YW50dW0+PTQpLCBidXQgdGhlIGdsaWJjIGRldmVsb3BlcnMg Y2hvc2Ugbm90IHRvIG1lZXQgdGhpcworICAgIHJlcXVpcmVtZW50IGZvciBwZXJmb3JtYW5jZSBy ZWFzb25zLiAgQW4gb2xkIGRpc2N1c3Npb24gY2FuIGJlIGZvdW5kIGF0CisgICAgPGh0dHBzOi8v c291cmNld2FyZS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTIwNj4gLiAgVW5saWtlIGds aWJjLAorICAgIGplbWFsbG9jIGRvZXMgZm9sbG93IHRoZSBDIHN0YW5kYXJkIGJ5IGRlZmF1bHQg KGNhdmVhdDogamVtYWxsb2MKKyAgICB0ZWNobmljYWxseSBjaGVhdHMgZm9yIHNpemUgY2xhc3Nl cyBzbWFsbGVyIHRoYW4gdGhlIHF1YW50dW0pLCBidXQgdGhlIGZhY3QKKyAgICB0aGF0IExpbnV4 IHN5c3RlbXMgYWxyZWFkeSB3b3JrIGFyb3VuZCB0aGlzIGFsbG9jYXRvciBub25jb21wbGlhbmNl IG1lYW5zCisgICAgdGhhdCBpdCBpcyBnZW5lcmFsbHkgc2FmZSBpbiBwcmFjdGljZSB0byBsZXQg amVtYWxsb2MncyBtaW5pbXVtIGFsaWdubWVudAorICAgIGZvbGxvdyBnbGliYydzIGxlYWQuICBJ ZiB5b3Ugc3BlY2lmeSBgLS13aXRoLWxnLXF1YW50dW09M2AgZHVyaW5nCisgICAgY29uZmlndXJh dGlvbiwgamVtYWxsb2Mgd2lsbCBwcm92aWRlIGFkZGl0aW9uYWwgc2l6ZSBjbGFzc2VzIHRoYXQg YXJlIG5vdAorICAgIDE2LWJ5dGUtYWxpZ25lZCAoMjQsIDQwLCBhbmQgNTYpLgorCisqIGAtLXdp dGgtbGctdmFkZHI9PGxnLXZhZGRyPmAKKworICAgIFNwZWNpZnkgdGhlIG51bWJlciBvZiBzaWdu aWZpY2FudCB2aXJ0dWFsIGFkZHJlc3MgYml0cy4gIEJ5IGRlZmF1bHQsIHRoZQorICAgIGNvbmZp Z3VyZSBzY3JpcHQgYXR0ZW1wdHMgdG8gZGV0ZWN0IHZpcnR1YWwgYWRkcmVzcyBzaXplIG9uIHRo b3NlIHBsYXRmb3JtcworICAgIHdoZXJlIGl0IGtub3dzIGhvdywgYW5kIHBpY2tzIGEgZGVmYXVs dCBvdGhlcndpc2UuICBUaGlzIG9wdGlvbiBtYXkgYmUKKyAgICB1c2VmdWwgd2hlbiBjcm9zcy1j b21waWxpbmcuCisKKyogYC0tZGlzYWJsZS1pbml0aWFsLWV4ZWMtdGxzYAorCisgICAgRGlzYWJs ZSB0aGUgaW5pdGlhbC1leGVjIFRMUyBtb2RlbCBmb3IgamVtYWxsb2MncyBpbnRlcm5hbCB0aHJl YWQtbG9jYWwKKyAgICBzdG9yYWdlIChvbiB0aG9zZSBwbGF0Zm9ybXMgdGhhdCBzdXBwb3J0IGV4 cGxpY2l0IHNldHRpbmdzKS4gIFRoaXMgY2FuIGFsbG93CisgICAgamVtYWxsb2MgdG8gYmUgZHlu YW1pY2FsbHkgbG9hZGVkIGFmdGVyIHByb2dyYW0gc3RhcnR1cCAoZS5nLiB1c2luZyBkbG9wZW4p LgorICAgIE5vdGUgdGhhdCBpbiB0aGlzIGNhc2UsIHRoZXJlIHdpbGwgYmUgdHdvIG1hbGxvYyBp bXBsZW1lbnRhdGlvbnMgb3BlcmF0aW5nCisgICAgaW4gdGhlIHNhbWUgcHJvY2Vzcywgd2hpY2gg d2lsbCBhbG1vc3QgY2VydGFpbmx5IHJlc3VsdCBpbiBjb25mdXNpbmcgcnVudGltZQorICAgIGNy YXNoZXMgaWYgcG9pbnRlcnMgbGVhayBmcm9tIG9uZSBpbXBsZW1lbnRhdGlvbiB0byB0aGUgb3Ro ZXIuCisKKyogYC0tZGlzYWJsZS1saWJkbGAKKworICAgIERpc2FibGUgdGhlIHVzYWdlIG9mIGxp YmRsLCBuYW1lbHkgZGxzeW0oMykgd2hpY2ggaXMgcmVxdWlyZWQgYnkgdGhlIGxhenkKKyAgICBs b2NrIG9wdGlvbi4gIFRoaXMgY2FuIGFsbG93IGJ1aWxkaW5nIHN0YXRpYyBiaW5hcmllcy4KKwor VGhlIGZvbGxvd2luZyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgKG5vdCBhIGRlZmluaXRpdmUgbGlz dCkgaW1wYWN0IGNvbmZpZ3VyZSdzCitiZWhhdmlvcjoKKworKiBgQ0ZMQUdTPSI/ImAKKyogYENY WEZMQUdTPSI/ImAKKworICAgIFBhc3MgdGhlc2UgZmxhZ3MgdG8gdGhlIEMvQysrIGNvbXBpbGVy LiAgQW55IGZsYWdzIHNldCBieSB0aGUgY29uZmlndXJlCisgICAgc2NyaXB0IGFyZSBwcmVwZW5k ZWQsIHdoaWNoIG1lYW5zIGV4cGxpY2l0bHkgc2V0IGZsYWdzIGdlbmVyYWxseSB0YWtlCisgICAg cHJlY2VkZW5jZS4gIFRha2UgY2FyZSB3aGVuIHNwZWNpZnlpbmcgZmxhZ3Mgc3VjaCBhcyAtV2Vy cm9yLCBiZWNhdXNlCisgICAgY29uZmlndXJlIHRlc3RzIG1heSBiZSBhZmZlY3RlZCBpbiB1bmRl c2lyYWJsZSB3YXlzLgorCisqIGBFWFRSQV9DRkxBR1M9Ij8iYAorKiBgRVhUUkFfQ1hYRkxBR1M9 Ij8iYAorCisgICAgQXBwZW5kIHRoZXNlIGZsYWdzIHRvIENGTEFHUy9DWFhGTEFHUywgd2l0aG91 dCBwYXNzaW5nIHRoZW0gdG8gdGhlCisgICAgY29tcGlsZXIocykgZHVyaW5nIGNvbmZpZ3VyYXRp b24uICBUaGlzIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGFkZCBmbGFncyBzdWNoCisgICAgYXMgLVdl cnJvciwgd2hpbGUgYWxsb3dpbmcgdGhlIGNvbmZpZ3VyZSBzY3JpcHQgdG8gZGV0ZXJtaW5lIHdo YXQgb3RoZXIKKyAgICBmbGFncyBhcmUgYXBwcm9wcmlhdGUgZm9yIHRoZSBzcGVjaWZpZWQgY29u ZmlndXJhdGlvbi4KKworKiBgQ1BQRkxBR1M9Ij8iYAorCisgICAgUGFzcyB0aGVzZSBmbGFncyB0 byB0aGUgQyBwcmVwcm9jZXNzb3IuICBOb3RlIHRoYXQgQ0ZMQUdTIGlzIG5vdCBwYXNzZWQgdG8K KyAgICAnY3BwJyB3aGVuICdjb25maWd1cmUnIGlzIGxvb2tpbmcgZm9yIGluY2x1ZGUgZmlsZXMs IHNvIHlvdSBtdXN0IHVzZQorICAgIENQUEZMQUdTIGluc3RlYWQgaWYgeW91IG5lZWQgdG8gaGVs cCAnY29uZmlndXJlJyBmaW5kIGhlYWRlciBmaWxlcy4KKworKiBgTERfTElCUkFSWV9QQVRIPSI/ ImAKKworICAgICdsZCcgdXNlcyB0aGlzIGNvbG9uLXNlcGFyYXRlZCBsaXN0IHRvIGZpbmQgbGli cmFyaWVzLgorCisqIGBMREZMQUdTPSI/ImAKKworICAgIFBhc3MgdGhlc2UgZmxhZ3Mgd2hlbiBs aW5raW5nLgorCisqIGBQQVRIPSI/ImAKKworICAgICdjb25maWd1cmUnIHVzZXMgdGhpcyB0byBm aW5kIHByb2dyYW1zLgorCitJbiBzb21lIGNhc2VzIGl0IG1heSBiZSBuZWNlc3NhcnkgdG8gd29y ayBhcm91bmQgY29uZmlndXJhdGlvbiByZXN1bHRzIHRoYXQgZG8KK25vdCBtYXRjaCByZWFsaXR5 LiAgRm9yIGV4YW1wbGUsIExpbnV4IDQuNSBhZGRlZCBzdXBwb3J0IGZvciB0aGUgTUFEVl9GUkVF IGZsYWcKK3RvIG1hZHZpc2UoMiksIHdoaWNoIGNhbiBjYXVzZSBwcm9ibGVtcyBpZiBidWlsZGlu ZyBvbiBhIGhvc3Qgd2l0aCBNQURWX0ZSRUUKK3N1cHBvcnQgYW5kIGRlcGxveWluZyB0byBhIHRh cmdldCB3aXRob3V0LiAgVG8gd29yayBhcm91bmQgdGhpcywgdXNlIGEgY2FjaGUKK2ZpbGUgdG8g b3ZlcnJpZGUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgZGVmaW5lZCBpbiBj b25maWd1cmUuYWMsCitlLmcuOgorCisgICAgZWNobyAiamVfY3ZfbWFkdl9mcmVlPW5vIiA+IGNv bmZpZy5jYWNoZSAmJiAuL2NvbmZpZ3VyZSAtQworCisKKyMjIEFkdmFuY2VkIGNvbXBpbGF0aW9u CisKK1RvIGJ1aWxkIG9ubHkgcGFydHMgb2YgamVtYWxsb2MsIHVzZSB0aGUgZm9sbG93aW5nIHRh cmdldHM6CisKKyAgICBidWlsZF9saWJfc2hhcmVkCisgICAgYnVpbGRfbGliX3N0YXRpYworICAg IGJ1aWxkX2xpYgorICAgIGJ1aWxkX2RvY19odG1sCisgICAgYnVpbGRfZG9jX21hbgorICAgIGJ1 aWxkX2RvYworCitUbyBpbnN0YWxsIG9ubHkgcGFydHMgb2YgamVtYWxsb2MsIHVzZSB0aGUgZm9s bG93aW5nIHRhcmdldHM6CisKKyAgICBpbnN0YWxsX2JpbgorICAgIGluc3RhbGxfaW5jbHVkZQor ICAgIGluc3RhbGxfbGliX3NoYXJlZAorICAgIGluc3RhbGxfbGliX3N0YXRpYworICAgIGluc3Rh bGxfbGliX3BjCisgICAgaW5zdGFsbF9saWIKKyAgICBpbnN0YWxsX2RvY19odG1sCisgICAgaW5z dGFsbF9kb2NfbWFuCisgICAgaW5zdGFsbF9kb2MKKworVG8gY2xlYW4gdXAgYnVpbGQgcmVzdWx0 cyB0byB2YXJ5aW5nIGRlZ3JlZXMsIHVzZSB0aGUgZm9sbG93aW5nIG1ha2UgdGFyZ2V0czoKKwor ICAgIGNsZWFuCisgICAgZGlzdGNsZWFuCisgICAgcmVsY2xlYW4KKworCisjIyBBZHZhbmNlZCBp bnN0YWxsYXRpb24KKworT3B0aW9uYWxseSwgZGVmaW5lIG1ha2UgdmFyaWFibGVzIHdoZW4gaW52 b2tpbmcgbWFrZSwgaW5jbHVkaW5nIChub3QKK2V4Y2x1c2l2ZWx5KToKKworKiBgSU5DTFVERURJ Uj0iPyJgCisKKyAgICBVc2UgdGhpcyBhcyB0aGUgaW5zdGFsbGF0aW9uIHByZWZpeCBmb3IgaGVh ZGVyIGZpbGVzLgorCisqIGBMSUJESVI9Ij8iYAorCisgICAgVXNlIHRoaXMgYXMgdGhlIGluc3Rh bGxhdGlvbiBwcmVmaXggZm9yIGxpYnJhcmllcy4KKworKiBgTUFORElSPSI/ImAKKworICAgIFVz ZSB0aGlzIGFzIHRoZSBpbnN0YWxsYXRpb24gcHJlZml4IGZvciBtYW4gcGFnZXMuCisKKyogYERF U1RESVI9Ij8iYAorCisgICAgUHJlcGVuZCBERVNURElSIHRvIElOQ0xVREVESVIsIExJQkRJUiwg REFUQURJUiwgYW5kIE1BTkRJUi4gIFRoaXMgaXMgdXNlZnVsCisgICAgd2hlbiBpbnN0YWxsaW5n IHRvIGEgZGlmZmVyZW50IHBhdGggdGhhbiB3YXMgc3BlY2lmaWVkIHZpYSAtLXByZWZpeC4KKwor KiBgQ0M9Ij8iYAorCisgICAgVXNlIHRoaXMgdG8gaW52b2tlIHRoZSBDIGNvbXBpbGVyLgorCisq IGBDRkxBR1M9Ij8iYAorCisgICAgUGFzcyB0aGVzZSBmbGFncyB0byB0aGUgY29tcGlsZXIuCisK KyogYENQUEZMQUdTPSI/ImAKKworICAgIFBhc3MgdGhlc2UgZmxhZ3MgdG8gdGhlIEMgcHJlcHJv Y2Vzc29yLgorCisqIGBMREZMQUdTPSI/ImAKKworICAgIFBhc3MgdGhlc2UgZmxhZ3Mgd2hlbiBs aW5raW5nLgorCisqIGBQQVRIPSI/ImAKKworICAgIFVzZSB0aGlzIHRvIHNlYXJjaCBmb3IgcHJv Z3JhbXMgdXNlZCBkdXJpbmcgY29uZmlndXJhdGlvbiBhbmQgYnVpbGRpbmcuCisKKworIyMgRGV2 ZWxvcG1lbnQKKworSWYgeW91IGludGVuZCB0byBtYWtlIG5vbi10cml2aWFsIGNoYW5nZXMgdG8g amVtYWxsb2MsIHVzZSB0aGUgJ2F1dG9nZW4uc2gnCitzY3JpcHQgcmF0aGVyIHRoYW4gJ2NvbmZp Z3VyZScuICBUaGlzIHJlLWdlbmVyYXRlcyAnY29uZmlndXJlJywgZW5hYmxlcworY29uZmlndXJh dGlvbiBkZXBlbmRlbmN5IHJ1bGVzLCBhbmQgZW5hYmxlcyByZS1nZW5lcmF0aW9uIG9mIGF1dG9t YXRpY2FsbHkKK2dlbmVyYXRlZCBzb3VyY2UgZmlsZXMuCisKK1RoZSBidWlsZCBzeXN0ZW0gc3Vw cG9ydHMgdXNpbmcgYW4gb2JqZWN0IGRpcmVjdG9yeSBzZXBhcmF0ZSBmcm9tIHRoZSBzb3VyY2UK K3RyZWUuICBGb3IgZXhhbXBsZSwgeW91IGNhbiBjcmVhdGUgYW4gJ29iaicgZGlyZWN0b3J5LCBh bmQgZnJvbSB3aXRoaW4gdGhhdAorZGlyZWN0b3J5LCBpc3N1ZSBjb25maWd1cmF0aW9uIGFuZCBi dWlsZCBjb21tYW5kczoKKworICAgIGF1dG9jb25mCisgICAgbWtkaXIgb2JqCisgICAgY2Qgb2Jq CisgICAgLi4vY29uZmlndXJlIC0tZW5hYmxlLWF1dG9nZW4KKyAgICBtYWtlCisKKworIyMgRG9j dW1lbnRhdGlvbgorCitUaGUgbWFudWFsIHBhZ2UgaXMgZ2VuZXJhdGVkIGluIGJvdGggaHRtbCBh bmQgcm9mZiBmb3JtYXRzLiAgQW55IHdlYiBicm93c2VyCitjYW4gYmUgdXNlZCB0byB2aWV3IHRo ZSBodG1sIG1hbnVhbC4gIFRoZSByb2ZmIG1hbnVhbCBwYWdlIGNhbiBiZSBmb3JtYXR0ZWQKK3By aW9yIHRvIGluc3RhbGxhdGlvbiB2aWEgdGhlIGZvbGxvd2luZyBjb21tYW5kOgorCisgICAgbnJv ZmYgLW1hbiAtdCBkb2MvamVtYWxsb2MuMwoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4w LWJ1aWxkL2plbWFsbG9jLTUuMy4wL01ha2VmaWxlLmluIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVp bGQvamVtYWxsb2MtNS4zLjAvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMC4uMTE5M2NkOAotLS0gL2Rldi9udWxsCisrKyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1 aWxkL2plbWFsbG9jLTUuMy4wL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsNzYyIEBACisjIENsZWFy IG91dCBhbGwgdnBhdGhzLCB0aGVuIHNldCBqdXN0IG9uZSAoZGVmYXVsdCB2cGF0aCkgZm9yIHRo ZSBtYWluIGJ1aWxkCisjIGRpcmVjdG9yeS4KK3ZwYXRoCit2cGF0aCAlIC4KKworIyBDbGVhciB0 aGUgZGVmYXVsdCBzdWZmaXhlcywgc28gdGhhdCBidWlsdC1pbiBydWxlcyBhcmUgbm90IHVzZWQu CisuU1VGRklYRVMgOgorCitTSEVMTCA6PSAvYmluL3NoCisKK0NDIDo9IEBDQ0AKK0NYWCA6PSBA Q1hYQAorCisjIENvbmZpZ3VyYXRpb24gcGFyYW1ldGVycy4KK0RFU1RESVIgPQorQklORElSIDo9 ICQoREVTVERJUilAQklORElSQAorSU5DTFVERURJUiA6PSAkKERFU1RESVIpQElOQ0xVREVESVJA CitMSUJESVIgOj0gJChERVNURElSKUBMSUJESVJACitEQVRBRElSIDo9ICQoREVTVERJUilAREFU QURJUkAKK01BTkRJUiA6PSAkKERFU1RESVIpQE1BTkRJUkAKK3NyY3Jvb3QgOj0gQHNyY3Jvb3RA CitvYmpyb290IDo9IEBvYmpyb290QAorYWJzX3NyY3Jvb3QgOj0gQGFic19zcmNyb290QAorYWJz X29ianJvb3QgOj0gQGFic19vYmpyb290QAorCisjIEJ1aWxkIHBhcmFtZXRlcnMuCitDUFBGTEFH UyA6PSBAQ1BQRkxBR1NAIC1JJChvYmpyb290KWluY2x1ZGUgLUkkKHNyY3Jvb3QpaW5jbHVkZQor Q09ORklHVVJFX0NGTEFHUyA6PSBAQ09ORklHVVJFX0NGTEFHU0AKK1NQRUNJRklFRF9DRkxBR1Mg Oj0gQFNQRUNJRklFRF9DRkxBR1NACitFWFRSQV9DRkxBR1MgOj0gQEVYVFJBX0NGTEFHU0AKK0NG TEFHUyA6PSAkKHN0cmlwICQoQ09ORklHVVJFX0NGTEFHUykgJChTUEVDSUZJRURfQ0ZMQUdTKSAk KEVYVFJBX0NGTEFHUykpCitDT05GSUdVUkVfQ1hYRkxBR1MgOj0gQENPTkZJR1VSRV9DWFhGTEFH U0AKK1NQRUNJRklFRF9DWFhGTEFHUyA6PSBAU1BFQ0lGSUVEX0NYWEZMQUdTQAorRVhUUkFfQ1hY RkxBR1MgOj0gQEVYVFJBX0NYWEZMQUdTQAorQ1hYRkxBR1MgOj0gJChzdHJpcCAkKENPTkZJR1VS RV9DWFhGTEFHUykgJChTUEVDSUZJRURfQ1hYRkxBR1MpICQoRVhUUkFfQ1hYRkxBR1MpKQorTERG TEFHUyA6PSBATERGTEFHU0AKK0VYVFJBX0xERkxBR1MgOj0gQEVYVFJBX0xERkxBR1NACitMSUJT IDo9IEBMSUJTQAorUlBBVEhfRVhUUkEgOj0gQFJQQVRIX0VYVFJBQAorU08gOj0gQHNvQAorSU1Q T1JUTElCIDo9IEBpbXBvcnRsaWJACitPIDo9IEBvQAorQSA6PSBAYUAKK0VYRSA6PSBAZXhlQAor TElCUFJFRklYIDo9IEBsaWJwcmVmaXhACitSRVYgOj0gQHJldkAKK2luc3RhbGxfc3VmZml4IDo9 IEBpbnN0YWxsX3N1ZmZpeEAKK0FCSSA6PSBAYWJpQAorWFNMVFBST0MgOj0gQFhTTFRQUk9DQAor WFNMUk9PVCA6PSBAWFNMUk9PVEAKK0FVVE9DT05GIDo9IEBBVVRPQ09ORkAKK19SUEFUSCA9IEBS UEFUSEAKK1JQQVRIID0gJChpZiAkKDEpLCQoY2FsbCBfUlBBVEgsJCgxKSkpCitjZmdoZHJzX2lu IDo9ICQoYWRkcHJlZml4ICQoc3Jjcm9vdCksQGNmZ2hkcnNfaW5AKQorY2ZnaGRyc19vdXQgOj0g QGNmZ2hkcnNfb3V0QAorY2Znb3V0cHV0c19pbiA6PSAkKGFkZHByZWZpeCAkKHNyY3Jvb3QpLEBj ZmdvdXRwdXRzX2luQCkKK2NmZ291dHB1dHNfb3V0IDo9IEBjZmdvdXRwdXRzX291dEAKK2VuYWJs ZV9hdXRvZ2VuIDo9IEBlbmFibGVfYXV0b2dlbkAKK2VuYWJsZV9kb2MgOj0gQGVuYWJsZV9kb2NA CitlbmFibGVfc2hhcmVkIDo9IEBlbmFibGVfc2hhcmVkQAorZW5hYmxlX3N0YXRpYyA6PSBAZW5h YmxlX3N0YXRpY0AKK2VuYWJsZV9wcm9mIDo9IEBlbmFibGVfcHJvZkAKK2VuYWJsZV96b25lX2Fs bG9jYXRvciA6PSBAZW5hYmxlX3pvbmVfYWxsb2NhdG9yQAorZW5hYmxlX2V4cGVyaW1lbnRhbF9z bWFsbG9jeCA6PSBAZW5hYmxlX2V4cGVyaW1lbnRhbF9zbWFsbG9jeEAKK01BTExPQ19DT05GIDo9 IEBKRU1BTExPQ19DUFJFRklYQE1BTExPQ19DT05GCitsaW5rX3dob2xlX2FyY2hpdmUgOj0gQGxp bmtfd2hvbGVfYXJjaGl2ZUAKK0RTT19MREZMQUdTID0gQERTT19MREZMQUdTQAorU09SRVYgPSBA U09SRVZACitQSUNfQ0ZMQUdTID0gQFBJQ19DRkxBR1NACitDVEFSR0VUID0gQENUQVJHRVRACitM RFRBUkdFVCA9IEBMRFRBUkdFVEAKK1RFU1RfTERfTU9ERSA9IEBURVNUX0xEX01PREVACitNS0xJ QiA9IEBNS0xJQkAKK0FSID0gQEFSQAorQVJGTEFHUyA9IEBBUkZMQUdTQAorRFVNUF9TWU1TID0g QERVTVBfU1lNU0AKK0FXSyA6PSBAQVdLQAorQ0NfTU0gPSBAQ0NfTU1ACitMTSA6PSBATE1ACitJ TlNUQUxMID0gQElOU1RBTExACisKK2lmZXEgKG1hY2hvLCAkKEFCSSkpCitURVNUX0xJQlJBUllf UEFUSCA6PSBEWUxEX0ZBTExCQUNLX0xJQlJBUllfUEFUSD0iJChvYmpyb290KWxpYiIKK2Vsc2UK K2lmZXEgKHBlY29mZiwgJChBQkkpKQorVEVTVF9MSUJSQVJZX1BBVEggOj0gUEFUSD0iJChQQVRI KTokKG9ianJvb3QpbGliIgorZWxzZQorVEVTVF9MSUJSQVJZX1BBVEggOj0KK2VuZGlmCitlbmRp ZgorCitMSUJKRU1BTExPQyA6PSAkKExJQlBSRUZJWClqZW1hbGxvYyQoaW5zdGFsbF9zdWZmaXgp CisKKyMgTGlzdHMgb2YgZmlsZXMuCitCSU5TIDo9ICQob2Jqcm9vdCliaW4vamVtYWxsb2MtY29u ZmlnICQob2Jqcm9vdCliaW4vamVtYWxsb2Muc2ggJChvYmpyb290KWJpbi9qZXByb2YKK0NfSERS UyA6PSAkKG9ianJvb3QpaW5jbHVkZS9qZW1hbGxvYy9qZW1hbGxvYyQoaW5zdGFsbF9zdWZmaXgp LmgKK0NfU1JDUyA6PSAkKHNyY3Jvb3Qpc3JjL2plbWFsbG9jLmMgXAorCSQoc3Jjcm9vdClzcmMv YXJlbmEuYyBcCisJJChzcmNyb290KXNyYy9iYWNrZ3JvdW5kX3RocmVhZC5jIFwKKwkkKHNyY3Jv b3Qpc3JjL2Jhc2UuYyBcCisJJChzcmNyb290KXNyYy9iaW4uYyBcCisJJChzcmNyb290KXNyYy9i aW5faW5mby5jIFwKKwkkKHNyY3Jvb3Qpc3JjL2JpdG1hcC5jIFwKKwkkKHNyY3Jvb3Qpc3JjL2J1 Zl93cml0ZXIuYyBcCisJJChzcmNyb290KXNyYy9jYWNoZV9iaW4uYyBcCisJJChzcmNyb290KXNy Yy9ja2guYyBcCisJJChzcmNyb290KXNyYy9jb3VudGVyLmMgXAorCSQoc3Jjcm9vdClzcmMvY3Rs LmMgXAorCSQoc3Jjcm9vdClzcmMvZGVjYXkuYyBcCisJJChzcmNyb290KXNyYy9kaXYuYyBcCisJ JChzcmNyb290KXNyYy9lY2FjaGUuYyBcCisJJChzcmNyb290KXNyYy9lZGF0YS5jIFwKKwkkKHNy Y3Jvb3Qpc3JjL2VkYXRhX2NhY2hlLmMgXAorCSQoc3Jjcm9vdClzcmMvZWhvb2tzLmMgXAorCSQo c3Jjcm9vdClzcmMvZW1hcC5jIFwKKwkkKHNyY3Jvb3Qpc3JjL2VzZXQuYyBcCisJJChzcmNyb290 KXNyYy9leHBfZ3Jvdy5jIFwKKwkkKHNyY3Jvb3Qpc3JjL2V4dGVudC5jIFwKKwkkKHNyY3Jvb3Qp c3JjL2V4dGVudF9kc3MuYyBcCisJJChzcmNyb290KXNyYy9leHRlbnRfbW1hcC5jIFwKKwkkKHNy Y3Jvb3Qpc3JjL2Z4cC5jIFwKKwkkKHNyY3Jvb3Qpc3JjL3Nhbi5jIFwKKwkkKHNyY3Jvb3Qpc3Jj L3Nhbl9idW1wLmMgXAorCSQoc3Jjcm9vdClzcmMvaG9vay5jIFwKKwkkKHNyY3Jvb3Qpc3JjL2hw YS5jIFwKKwkkKHNyY3Jvb3Qpc3JjL2hwYV9ob29rcy5jIFwKKwkkKHNyY3Jvb3Qpc3JjL2hwZGF0 YS5jIFwKKwkkKHNyY3Jvb3Qpc3JjL2luc3BlY3QuYyBcCisJJChzcmNyb290KXNyYy9sYXJnZS5j IFwKKwkkKHNyY3Jvb3Qpc3JjL2xvZy5jIFwKKwkkKHNyY3Jvb3Qpc3JjL21hbGxvY19pby5jIFwK KwkkKHNyY3Jvb3Qpc3JjL211dGV4LmMgXAorCSQoc3Jjcm9vdClzcmMvbnN0aW1lLmMgXAorCSQo c3Jjcm9vdClzcmMvcGEuYyBcCisJJChzcmNyb290KXNyYy9wYV9leHRyYS5jIFwKKwkkKHNyY3Jv b3Qpc3JjL3BhaS5jIFwKKwkkKHNyY3Jvb3Qpc3JjL3BhYy5jIFwKKwkkKHNyY3Jvb3Qpc3JjL3Bh Z2VzLmMgXAorCSQoc3Jjcm9vdClzcmMvcGVha19ldmVudC5jIFwKKwkkKHNyY3Jvb3Qpc3JjL3By b2YuYyBcCisJJChzcmNyb290KXNyYy9wcm9mX2RhdGEuYyBcCisJJChzcmNyb290KXNyYy9wcm9m X2xvZy5jIFwKKwkkKHNyY3Jvb3Qpc3JjL3Byb2ZfcmVjZW50LmMgXAorCSQoc3Jjcm9vdClzcmMv cHJvZl9zdGF0cy5jIFwKKwkkKHNyY3Jvb3Qpc3JjL3Byb2Zfc3lzLmMgXAorCSQoc3Jjcm9vdClz cmMvcHNzZXQuYyBcCisJJChzcmNyb290KXNyYy9ydHJlZS5jIFwKKwkkKHNyY3Jvb3Qpc3JjL3Nh ZmV0eV9jaGVjay5jIFwKKwkkKHNyY3Jvb3Qpc3JjL3NjLmMgXAorCSQoc3Jjcm9vdClzcmMvc2Vj LmMgXAorCSQoc3Jjcm9vdClzcmMvc3RhdHMuYyBcCisJJChzcmNyb290KXNyYy9zei5jIFwKKwkk KHNyY3Jvb3Qpc3JjL3RjYWNoZS5jIFwKKwkkKHNyY3Jvb3Qpc3JjL3Rlc3RfaG9va3MuYyBcCisJ JChzcmNyb290KXNyYy90aHJlYWRfZXZlbnQuYyBcCisJJChzcmNyb290KXNyYy90aWNrZXIuYyBc CisJJChzcmNyb290KXNyYy90c2QuYyBcCisJJChzcmNyb290KXNyYy93aXRuZXNzLmMKK2lmZXEg KCQoZW5hYmxlX3pvbmVfYWxsb2NhdG9yKSwgMSkKK0NfU1JDUyArPSAkKHNyY3Jvb3Qpc3JjL3pv bmUuYworZW5kaWYKK2lmZXEgKCQoSU1QT1JUTElCKSwkKFNPKSkKK1NUQVRJQ19MSUJTIDo9ICQo b2Jqcm9vdClsaWIvJChMSUJKRU1BTExPQykuJChBKQorZW5kaWYKK2lmZGVmIFBJQ19DRkxBR1MK K1NUQVRJQ19MSUJTICs9ICQob2Jqcm9vdClsaWIvJChMSUJKRU1BTExPQylfcGljLiQoQSkKK2Vs c2UKK1NUQVRJQ19MSUJTICs9ICQob2Jqcm9vdClsaWIvJChMSUJKRU1BTExPQylfcy4kKEEpCitl bmRpZgorRFNPUyA6PSAkKG9ianJvb3QpbGliLyQoTElCSkVNQUxMT0MpLiQoU09SRVYpCitpZm5l cSAoJChTT1JFViksJChTTykpCitEU09TICs9ICQob2Jqcm9vdClsaWIvJChMSUJKRU1BTExPQyku JChTTykKK2VuZGlmCitpZmVxICgxLCAkKGxpbmtfd2hvbGVfYXJjaGl2ZSkpCitMSkVNQUxMT0Mg Oj0gLVdsLC0td2hvbGUtYXJjaGl2ZSAtTCQob2Jqcm9vdClsaWIgLWwkKExJQkpFTUFMTE9DKSAt V2wsLS1uby13aG9sZS1hcmNoaXZlCitlbHNlCitMSkVNQUxMT0MgOj0gJChvYmpyb290KWxpYi8k KExJQkpFTUFMTE9DKS4kKElNUE9SVExJQikKK2VuZGlmCitQQyA6PSAkKG9ianJvb3QpamVtYWxs b2MucGMKK0RPQ1NfWE1MIDo9ICQob2Jqcm9vdClkb2MvamVtYWxsb2MkKGluc3RhbGxfc3VmZml4 KS54bWwKK0RPQ1NfSFRNTCA6PSAkKERPQ1NfWE1MOiQob2Jqcm9vdCklLnhtbD0kKG9ianJvb3Qp JS5odG1sKQorRE9DU19NQU4zIDo9ICQoRE9DU19YTUw6JChvYmpyb290KSUueG1sPSQob2Jqcm9v dCklLjMpCitET0NTIDo9ICQoRE9DU19IVE1MKSAkKERPQ1NfTUFOMykKK0NfVEVTVExJQl9TUkNT IDo9ICQoc3Jjcm9vdCl0ZXN0L3NyYy9idGFsbG9jLmMgJChzcmNyb290KXRlc3Qvc3JjL2J0YWxs b2NfMC5jIFwKKwkkKHNyY3Jvb3QpdGVzdC9zcmMvYnRhbGxvY18xLmMgJChzcmNyb290KXRlc3Qv c3JjL21hdGguYyBcCisJJChzcmNyb290KXRlc3Qvc3JjL210eC5jICQoc3Jjcm9vdCl0ZXN0L3Ny Yy9zbGVlcC5jIFwKKwkkKHNyY3Jvb3QpdGVzdC9zcmMvU0ZNVC5jICQoc3Jjcm9vdCl0ZXN0L3Ny Yy90ZXN0LmMgXAorCSQoc3Jjcm9vdCl0ZXN0L3NyYy90aGQuYyAkKHNyY3Jvb3QpdGVzdC9zcmMv dGltZXIuYworaWZlcSAoMSwgJChsaW5rX3dob2xlX2FyY2hpdmUpKQorQ19VVElMX0lOVEVHUkFU SU9OX1NSQ1MgOj0KK0NfVVRJTF9DUFBfU1JDUyA6PQorZWxzZQorQ19VVElMX0lOVEVHUkFUSU9O X1NSQ1MgOj0gJChzcmNyb290KXNyYy9uc3RpbWUuYyAkKHNyY3Jvb3Qpc3JjL21hbGxvY19pby5j IFwKKwkkKHNyY3Jvb3Qpc3JjL3RpY2tlci5jCitDX1VUSUxfQ1BQX1NSQ1MgOj0gJChzcmNyb290 KXNyYy9uc3RpbWUuYyAkKHNyY3Jvb3Qpc3JjL21hbGxvY19pby5jCitlbmRpZgorVEVTVFNfVU5J VCA6PSBcCisJJChzcmNyb290KXRlc3QvdW5pdC9hMC5jIFwKKwkkKHNyY3Jvb3QpdGVzdC91bml0 L2FyZW5hX2RlY2F5LmMgXAorCSQoc3Jjcm9vdCl0ZXN0L3VuaXQvYXJlbmFfcmVzZXQuYyBcCisJ JChzcmNyb290KXRlc3QvdW5pdC9hdG9taWMuYyBcCisJJChzcmNyb290KXRlc3QvdW5pdC9iYWNr Z3JvdW5kX3RocmVhZC5jIFwKKwkkKHNyY3Jvb3QpdGVzdC91bml0L2JhY2tncm91bmRfdGhyZWFk X2VuYWJsZS5jIFwKKwkkKHNyY3Jvb3QpdGVzdC91bml0L2Jhc2UuYyBcCisJJChzcmNyb290KXRl c3QvdW5pdC9iYXRjaF9hbGxvYy5jIFwKKwkkKHNyY3Jvb3QpdGVzdC91bml0L2JpbnNoYXJkLmMg XAorCSQoc3Jjcm9vdCl0ZXN0L3VuaXQvYml0bWFwLmMgXAorCSQoc3Jjcm9vdCl0ZXN0L3VuaXQv Yml0X3V0aWwuYyBcCisJJChzcmNyb290KXRlc3QvdW5pdC9idWZfd3JpdGVyLmMgXAorCSQoc3Jj cm9vdCl0ZXN0L3VuaXQvY2FjaGVfYmluLmMgXAorCSQoc3Jjcm9vdCl0ZXN0L3VuaXQvY2toLmMg XAorCSQoc3Jjcm9vdCl0ZXN0L3VuaXQvY291bnRlci5jIFwKKwkkKHNyY3Jvb3QpdGVzdC91bml0 L2RlY2F5LmMgXAorCSQoc3Jjcm9vdCl0ZXN0L3VuaXQvZGl2LmMgXAorCSQoc3Jjcm9vdCl0ZXN0 L3VuaXQvZG91YmxlX2ZyZWUuYyBcCisJJChzcmNyb290KXRlc3QvdW5pdC9lZGF0YV9jYWNoZS5j IFwKKwkkKHNyY3Jvb3QpdGVzdC91bml0L2VtaXR0ZXIuYyBcCisJJChzcmNyb290KXRlc3QvdW5p dC9leHRlbnRfcXVhbnRpemUuYyBcCisJJHtzcmNyb290fXRlc3QvdW5pdC9mYi5jIFwKKwkkKHNy Y3Jvb3QpdGVzdC91bml0L2ZvcmsuYyBcCisJJHtzcmNyb290fXRlc3QvdW5pdC9meHAuYyBcCisJ JHtzcmNyb290fXRlc3QvdW5pdC9zYW4uYyBcCisJJHtzcmNyb290fXRlc3QvdW5pdC9zYW5fYnVt cC5jIFwKKwkkKHNyY3Jvb3QpdGVzdC91bml0L2hhc2guYyBcCisJJChzcmNyb290KXRlc3QvdW5p dC9ob29rLmMgXAorCSQoc3Jjcm9vdCl0ZXN0L3VuaXQvaHBhLmMgXAorCSQoc3Jjcm9vdCl0ZXN0 L3VuaXQvaHBhX2JhY2tncm91bmRfdGhyZWFkLmMgXAorCSQoc3Jjcm9vdCl0ZXN0L3VuaXQvaHBk YXRhLmMgXAorCSQoc3Jjcm9vdCl0ZXN0L3VuaXQvaHVnZS5jIFwKKwkkKHNyY3Jvb3QpdGVzdC91 bml0L2luc3BlY3QuYyBcCisJJChzcmNyb290KXRlc3QvdW5pdC9qdW5rLmMgXAorCSQoc3Jjcm9v dCl0ZXN0L3VuaXQvanVua19hbGxvYy5jIFwKKwkkKHNyY3Jvb3QpdGVzdC91bml0L2p1bmtfZnJl ZS5jIFwKKwkkKHNyY3Jvb3QpdGVzdC91bml0L2xvZy5jIFwKKwkkKHNyY3Jvb3QpdGVzdC91bml0 L21hbGxjdGwuYyBcCisJJChzcmNyb290KXRlc3QvdW5pdC9tYWxsb2NfY29uZl8yLmMgXAorCSQo c3Jjcm9vdCl0ZXN0L3VuaXQvbWFsbG9jX2lvLmMgXAorCSQoc3Jjcm9vdCl0ZXN0L3VuaXQvbWF0 aC5jIFwKKwkkKHNyY3Jvb3QpdGVzdC91bml0L21wc2NfcXVldWUuYyBcCisJJChzcmNyb290KXRl c3QvdW5pdC9tcS5jIFwKKwkkKHNyY3Jvb3QpdGVzdC91bml0L210eC5jIFwKKwkkKHNyY3Jvb3Qp dGVzdC91bml0L25zdGltZS5jIFwKKwkkKHNyY3Jvb3QpdGVzdC91bml0L292ZXJzaXplX3RocmVz aG9sZC5jIFwKKwkkKHNyY3Jvb3QpdGVzdC91bml0L3BhLmMgXAorCSQoc3Jjcm9vdCl0ZXN0L3Vu aXQvcGFjay5jIFwKKwkkKHNyY3Jvb3QpdGVzdC91bml0L3BhZ2VzLmMgXAorCSQoc3Jjcm9vdCl0 ZXN0L3VuaXQvcGVhay5jIFwKKwkkKHNyY3Jvb3QpdGVzdC91bml0L3BoLmMgXAorCSQoc3Jjcm9v dCl0ZXN0L3VuaXQvcHJuZy5jIFwKKwkkKHNyY3Jvb3QpdGVzdC91bml0L3Byb2ZfYWNjdW0uYyBc CisJJChzcmNyb290KXRlc3QvdW5pdC9wcm9mX2FjdGl2ZS5jIFwKKwkkKHNyY3Jvb3QpdGVzdC91 bml0L3Byb2ZfZ2R1bXAuYyBcCisJJChzcmNyb290KXRlc3QvdW5pdC9wcm9mX2hvb2suYyBcCisJ JChzcmNyb290KXRlc3QvdW5pdC9wcm9mX2lkdW1wLmMgXAorCSQoc3Jjcm9vdCl0ZXN0L3VuaXQv cHJvZl9sb2cuYyBcCisJJChzcmNyb290KXRlc3QvdW5pdC9wcm9mX21kdW1wLmMgXAorCSQoc3Jj cm9vdCl0ZXN0L3VuaXQvcHJvZl9yZWNlbnQuYyBcCisJJChzcmNyb290KXRlc3QvdW5pdC9wcm9m X3Jlc2V0LmMgXAorCSQoc3Jjcm9vdCl0ZXN0L3VuaXQvcHJvZl9zdGF0cy5jIFwKKwkkKHNyY3Jv b3QpdGVzdC91bml0L3Byb2ZfdGN0eC5jIFwKKwkkKHNyY3Jvb3QpdGVzdC91bml0L3Byb2ZfdGhy ZWFkX25hbWUuYyBcCisJJChzcmNyb290KXRlc3QvdW5pdC9wcm9mX3N5c190aHJlYWRfbmFtZS5j IFwKKwkkKHNyY3Jvb3QpdGVzdC91bml0L3Bzc2V0LmMgXAorCSQoc3Jjcm9vdCl0ZXN0L3VuaXQv cWwuYyBcCisJJChzcmNyb290KXRlc3QvdW5pdC9xci5jIFwKKwkkKHNyY3Jvb3QpdGVzdC91bml0 L3JiLmMgXAorCSQoc3Jjcm9vdCl0ZXN0L3VuaXQvcmV0YWluZWQuYyBcCisJJChzcmNyb290KXRl c3QvdW5pdC9ydHJlZS5jIFwKKwkkKHNyY3Jvb3QpdGVzdC91bml0L3NhZmV0eV9jaGVjay5jIFwK KwkkKHNyY3Jvb3QpdGVzdC91bml0L3NjLmMgXAorCSQoc3Jjcm9vdCl0ZXN0L3VuaXQvc2VjLmMg XAorCSQoc3Jjcm9vdCl0ZXN0L3VuaXQvc2VxLmMgXAorCSQoc3Jjcm9vdCl0ZXN0L3VuaXQvU0ZN VC5jIFwKKwkkKHNyY3Jvb3QpdGVzdC91bml0L3NpemVfY2hlY2suYyBcCisJJChzcmNyb290KXRl c3QvdW5pdC9zaXplX2NsYXNzZXMuYyBcCisJJChzcmNyb290KXRlc3QvdW5pdC9zbGFiLmMgXAor CSQoc3Jjcm9vdCl0ZXN0L3VuaXQvc21vb3Roc3RlcC5jIFwKKwkkKHNyY3Jvb3QpdGVzdC91bml0 L3NwaW4uYyBcCisJJChzcmNyb290KXRlc3QvdW5pdC9zdGF0cy5jIFwKKwkkKHNyY3Jvb3QpdGVz dC91bml0L3N0YXRzX3ByaW50LmMgXAorCSQoc3Jjcm9vdCl0ZXN0L3VuaXQvc3ouYyBcCisJJChz cmNyb290KXRlc3QvdW5pdC90Y2FjaGVfbWF4LmMgXAorCSQoc3Jjcm9vdCl0ZXN0L3VuaXQvdGVz dF9ob29rcy5jIFwKKwkkKHNyY3Jvb3QpdGVzdC91bml0L3RocmVhZF9ldmVudC5jIFwKKwkkKHNy Y3Jvb3QpdGVzdC91bml0L3RpY2tlci5jIFwKKwkkKHNyY3Jvb3QpdGVzdC91bml0L3RzZC5jIFwK KwkkKHNyY3Jvb3QpdGVzdC91bml0L3VhZi5jIFwKKwkkKHNyY3Jvb3QpdGVzdC91bml0L3dpdG5l c3MuYyBcCisJJChzcmNyb290KXRlc3QvdW5pdC96ZXJvLmMgXAorCSQoc3Jjcm9vdCl0ZXN0L3Vu aXQvemVyb19yZWFsbG9jX2Fib3J0LmMgXAorCSQoc3Jjcm9vdCl0ZXN0L3VuaXQvemVyb19yZWFs bG9jX2ZyZWUuYyBcCisJJChzcmNyb290KXRlc3QvdW5pdC96ZXJvX3JlYWxsb2NfYWxsb2MuYyBc CisJJChzcmNyb290KXRlc3QvdW5pdC96ZXJvX3JlYWxsb2NzLmMKK2lmZXEgKEBlbmFibGVfcHJv ZkAsIDEpCitURVNUU19VTklUICs9IFwKKwkkKHNyY3Jvb3QpdGVzdC91bml0L2FyZW5hX3Jlc2V0 X3Byb2YuYyBcCisJJChzcmNyb290KXRlc3QvdW5pdC9iYXRjaF9hbGxvY19wcm9mLmMKK2VuZGlm CitURVNUU19JTlRFR1JBVElPTiA6PSAkKHNyY3Jvb3QpdGVzdC9pbnRlZ3JhdGlvbi9hbGlnbmVk X2FsbG9jLmMgXAorCSQoc3Jjcm9vdCl0ZXN0L2ludGVncmF0aW9uL2FsbG9jYXRlZC5jIFwKKwkk KHNyY3Jvb3QpdGVzdC9pbnRlZ3JhdGlvbi9leHRlbnQuYyBcCisJJChzcmNyb290KXRlc3QvaW50 ZWdyYXRpb24vbWFsbG9jLmMgXAorCSQoc3Jjcm9vdCl0ZXN0L2ludGVncmF0aW9uL21hbGxvY3gu YyBcCisJJChzcmNyb290KXRlc3QvaW50ZWdyYXRpb24vTUFMTE9DWF9BUkVOQS5jIFwKKwkkKHNy Y3Jvb3QpdGVzdC9pbnRlZ3JhdGlvbi9vdmVyZmxvdy5jIFwKKwkkKHNyY3Jvb3QpdGVzdC9pbnRl Z3JhdGlvbi9wb3NpeF9tZW1hbGlnbi5jIFwKKwkkKHNyY3Jvb3QpdGVzdC9pbnRlZ3JhdGlvbi9y YWxsb2N4LmMgXAorCSQoc3Jjcm9vdCl0ZXN0L2ludGVncmF0aW9uL3NkYWxsb2N4LmMgXAorCSQo c3Jjcm9vdCl0ZXN0L2ludGVncmF0aW9uL3NsYWJfc2l6ZXMuYyBcCisJJChzcmNyb290KXRlc3Qv aW50ZWdyYXRpb24vdGhyZWFkX2FyZW5hLmMgXAorCSQoc3Jjcm9vdCl0ZXN0L2ludGVncmF0aW9u L3RocmVhZF90Y2FjaGVfZW5hYmxlZC5jIFwKKwkkKHNyY3Jvb3QpdGVzdC9pbnRlZ3JhdGlvbi94 YWxsb2N4LmMKK2lmZXEgKEBlbmFibGVfZXhwZXJpbWVudGFsX3NtYWxsb2N4QCwgMSkKK1RFU1RT X0lOVEVHUkFUSU9OICs9IFwKKyAgJChzcmNyb290KXRlc3QvaW50ZWdyYXRpb24vc21hbGxvY3gu YworZW5kaWYKK2lmZXEgKEBlbmFibGVfY3h4QCwgMSkKK0NQUF9TUkNTIDo9ICQoc3Jjcm9vdClz cmMvamVtYWxsb2NfY3BwLmNwcAorVEVTVFNfSU5URUdSQVRJT05fQ1BQIDo9ICQoc3Jjcm9vdCl0 ZXN0L2ludGVncmF0aW9uL2NwcC9iYXNpYy5jcHAgXAorCSQoc3Jjcm9vdCl0ZXN0L2ludGVncmF0 aW9uL2NwcC9pbmZhbGxpYmxlX25ld190cnVlLmNwcCBcCisJJChzcmNyb290KXRlc3QvaW50ZWdy YXRpb24vY3BwL2luZmFsbGlibGVfbmV3X2ZhbHNlLmNwcAorZWxzZQorQ1BQX1NSQ1MgOj0KK1RF U1RTX0lOVEVHUkFUSU9OX0NQUCA6PQorZW5kaWYKK1RFU1RTX0FOQUxZWkUgOj0gJChzcmNyb290 KXRlc3QvYW5hbHl6ZS9wcm9mX2JpYXMuYyBcCisJJChzcmNyb290KXRlc3QvYW5hbHl6ZS9yYW5k LmMgXAorCSQoc3Jjcm9vdCl0ZXN0L2FuYWx5emUvc2l6ZXMuYworVEVTVFNfU1RSRVNTIDo9ICQo c3Jjcm9vdCl0ZXN0L3N0cmVzcy9iYXRjaF9hbGxvYy5jIFwKKwkkKHNyY3Jvb3QpdGVzdC9zdHJl c3MvZmlsbF9mbHVzaC5jIFwKKwkkKHNyY3Jvb3QpdGVzdC9zdHJlc3MvaG9va2JlbmNoLmMgXAor CSQoc3Jjcm9vdCl0ZXN0L3N0cmVzcy9sYXJnZV9taWNyb2JlbmNoLmMgXAorCSQoc3Jjcm9vdCl0 ZXN0L3N0cmVzcy9tYWxsY3RsLmMgXAorCSQoc3Jjcm9vdCl0ZXN0L3N0cmVzcy9taWNyb2JlbmNo LmMKKworCitURVNUUyA6PSAkKFRFU1RTX1VOSVQpICQoVEVTVFNfSU5URUdSQVRJT04pICQoVEVT VFNfSU5URUdSQVRJT05fQ1BQKSBcCisJJChURVNUU19BTkFMWVpFKSAkKFRFU1RTX1NUUkVTUykK KworUFJJVkFURV9OQU1FU1BBQ0VfSERSUyA6PSAkKG9ianJvb3QpaW5jbHVkZS9qZW1hbGxvYy9p bnRlcm5hbC9wcml2YXRlX25hbWVzcGFjZS5oICQob2Jqcm9vdClpbmNsdWRlL2plbWFsbG9jL2lu dGVybmFsL3ByaXZhdGVfbmFtZXNwYWNlX2pldC5oCitQUklWQVRFX05BTUVTUEFDRV9HRU5fSERS UyA6PSAkKFBSSVZBVEVfTkFNRVNQQUNFX0hEUlM6JS5oPSUuZ2VuLmgpCitDX1NZTV9PQkpTIDo9 ICQoQ19TUkNTOiQoc3Jjcm9vdCklLmM9JChvYmpyb290KSUuc3ltLiQoTykpCitDX1NZTVMgOj0g JChDX1NSQ1M6JChzcmNyb290KSUuYz0kKG9ianJvb3QpJS5zeW0pCitDX09CSlMgOj0gJChDX1NS Q1M6JChzcmNyb290KSUuYz0kKG9ianJvb3QpJS4kKE8pKQorQ1BQX09CSlMgOj0gJChDUFBfU1JD UzokKHNyY3Jvb3QpJS5jcHA9JChvYmpyb290KSUuJChPKSkKK0NfUElDX09CSlMgOj0gJChDX1NS Q1M6JChzcmNyb290KSUuYz0kKG9ianJvb3QpJS5waWMuJChPKSkKK0NQUF9QSUNfT0JKUyA6PSAk KENQUF9TUkNTOiQoc3Jjcm9vdCklLmNwcD0kKG9ianJvb3QpJS5waWMuJChPKSkKK0NfSkVUX1NZ TV9PQkpTIDo9ICQoQ19TUkNTOiQoc3Jjcm9vdCklLmM9JChvYmpyb290KSUuamV0LnN5bS4kKE8p KQorQ19KRVRfU1lNUyA6PSAkKENfU1JDUzokKHNyY3Jvb3QpJS5jPSQob2Jqcm9vdCklLmpldC5z eW0pCitDX0pFVF9PQkpTIDo9ICQoQ19TUkNTOiQoc3Jjcm9vdCklLmM9JChvYmpyb290KSUuamV0 LiQoTykpCitDX1RFU1RMSUJfVU5JVF9PQkpTIDo9ICQoQ19URVNUTElCX1NSQ1M6JChzcmNyb290 KSUuYz0kKG9ianJvb3QpJS51bml0LiQoTykpCitDX1RFU1RMSUJfSU5URUdSQVRJT05fT0JKUyA6 PSAkKENfVEVTVExJQl9TUkNTOiQoc3Jjcm9vdCklLmM9JChvYmpyb290KSUuaW50ZWdyYXRpb24u JChPKSkKK0NfVVRJTF9JTlRFR1JBVElPTl9PQkpTIDo9ICQoQ19VVElMX0lOVEVHUkFUSU9OX1NS Q1M6JChzcmNyb290KSUuYz0kKG9ianJvb3QpJS5pbnRlZ3JhdGlvbi4kKE8pKQorQ19URVNUTElC X0FOQUxZWkVfT0JKUyA6PSAkKENfVEVTVExJQl9TUkNTOiQoc3Jjcm9vdCklLmM9JChvYmpyb290 KSUuYW5hbHl6ZS4kKE8pKQorQ19URVNUTElCX1NUUkVTU19PQkpTIDo9ICQoQ19URVNUTElCX1NS Q1M6JChzcmNyb290KSUuYz0kKG9ianJvb3QpJS5zdHJlc3MuJChPKSkKK0NfVEVTVExJQl9PQkpT IDo9ICQoQ19URVNUTElCX1VOSVRfT0JKUykgJChDX1RFU1RMSUJfSU5URUdSQVRJT05fT0JKUykg XAorCSQoQ19VVElMX0lOVEVHUkFUSU9OX09CSlMpICQoQ19URVNUTElCX0FOQUxZWkVfT0JKUykg XAorCSQoQ19URVNUTElCX1NUUkVTU19PQkpTKQorCitURVNUU19VTklUX09CSlMgOj0gJChURVNU U19VTklUOiQoc3Jjcm9vdCklLmM9JChvYmpyb290KSUuJChPKSkKK1RFU1RTX0lOVEVHUkFUSU9O X09CSlMgOj0gJChURVNUU19JTlRFR1JBVElPTjokKHNyY3Jvb3QpJS5jPSQob2Jqcm9vdCklLiQo TykpCitURVNUU19JTlRFR1JBVElPTl9DUFBfT0JKUyA6PSAkKFRFU1RTX0lOVEVHUkFUSU9OX0NQ UDokKHNyY3Jvb3QpJS5jcHA9JChvYmpyb290KSUuJChPKSkKK1RFU1RTX0FOQUxZWkVfT0JKUyA6 PSAkKFRFU1RTX0FOQUxZWkU6JChzcmNyb290KSUuYz0kKG9ianJvb3QpJS4kKE8pKQorVEVTVFNf U1RSRVNTX09CSlMgOj0gJChURVNUU19TVFJFU1M6JChzcmNyb290KSUuYz0kKG9ianJvb3QpJS4k KE8pKQorVEVTVFNfT0JKUyA6PSAkKFRFU1RTX1VOSVRfT0JKUykgJChURVNUU19JTlRFR1JBVElP Tl9PQkpTKSAkKFRFU1RTX0FOQUxZWkVfT0JKUykgXAorCSQoVEVTVFNfU1RSRVNTX09CSlMpCitU RVNUU19DUFBfT0JKUyA6PSAkKFRFU1RTX0lOVEVHUkFUSU9OX0NQUF9PQkpTKQorCisuUEhPTlk6 IGFsbCBkaXN0IGJ1aWxkX2RvY19odG1sIGJ1aWxkX2RvY19tYW4gYnVpbGRfZG9jCisuUEhPTlk6 IGluc3RhbGxfYmluIGluc3RhbGxfaW5jbHVkZSBpbnN0YWxsX2xpYgorLlBIT05ZOiBpbnN0YWxs X2RvY19odG1sIGluc3RhbGxfZG9jX21hbiBpbnN0YWxsX2RvYyBpbnN0YWxsCisuUEhPTlk6IHRl c3RzIGNoZWNrIGNsZWFuIGRpc3RjbGVhbiByZWxjbGVhbgorCisuU0VDT05EQVJZIDogJChQUklW QVRFX05BTUVTUEFDRV9HRU5fSERSUykgJChURVNUU19PQkpTKSAkKFRFU1RTX0NQUF9PQkpTKQor CisjIERlZmF1bHQgdGFyZ2V0LgorYWxsOiBidWlsZF9saWIKKworZGlzdDogYnVpbGRfZG9jCisK KyQob2Jqcm9vdClkb2MvJSQoaW5zdGFsbF9zdWZmaXgpLmh0bWwgOiAkKG9ianJvb3QpZG9jLyUu eG1sICQoc3Jjcm9vdClkb2Mvc3R5bGVzaGVldC54c2wgJChvYmpyb290KWRvYy9odG1sLnhzbAor aWZuZXEgKCQoWFNMUk9PVCksKQorCSQoWFNMVFBST0MpIC1vICRAICQob2Jqcm9vdClkb2MvaHRt bC54c2wgJDwKK2Vsc2UKK2lmZXEgKCQod2lsZGNhcmQgJChET0NTX0hUTUwpKSwpCisJQGVjaG8g IjxwPk1pc3NpbmcgeHNsdHByb2MuICBEb2Mgbm90IGJ1aWx0LjwvcD4iID4gJEAKK2VuZGlmCisJ QGVjaG8gIk1pc3NpbmcgeHNsdHByb2MuICAiJEAiIG5vdCAocmUpYnVpbHQuIgorZW5kaWYKKwor JChvYmpyb290KWRvYy8lJChpbnN0YWxsX3N1ZmZpeCkuMyA6ICQob2Jqcm9vdClkb2MvJS54bWwg JChzcmNyb290KWRvYy9zdHlsZXNoZWV0LnhzbCAkKG9ianJvb3QpZG9jL21hbnBhZ2VzLnhzbAor aWZuZXEgKCQoWFNMUk9PVCksKQorCSQoWFNMVFBST0MpIC1vICRAICQob2Jqcm9vdClkb2MvbWFu cGFnZXMueHNsICQ8CisjIFRoZSAtbyBvcHRpb24gKG91dHB1dCBmaWxlbmFtZSkgb2YgeHNsdHBy b2MgbWF5IG5vdCB3b3JrIChpdCB1c2VzIHRoZQorIyA8cmVmbmFtZT4gaW4gdGhlIC54bWwgZmls ZSkuICBNYW51YWxseSBhZGQgdGhlIHN1ZmZpeCBpZiBzby4KKyAgaWZuZXEgKCQoaW5zdGFsbF9z dWZmaXgpLCkKKwlAaWYgWyAtZiAkKG9ianJvb3QpZG9jL2plbWFsbG9jLjMgXTsgdGhlbiBcCisJ CW12ICQob2Jqcm9vdClkb2MvamVtYWxsb2MuMyAkKG9ianJvb3QpZG9jL2plbWFsbG9jJChpbnN0 YWxsX3N1ZmZpeCkuMyA7IFwKKwlmaQorICBlbmRpZgorZWxzZQoraWZlcSAoJCh3aWxkY2FyZCAk KERPQ1NfTUFOMykpLCkKKwlAZWNobyAiTWlzc2luZyB4c2x0cHJvYy4gIERvYyBub3QgYnVpbHQu IiA+ICRACitlbmRpZgorCUBlY2hvICJNaXNzaW5nIHhzbHRwcm9jLiAgIiRAIiBub3QgKHJlKWJ1 aWx0LiIKK2VuZGlmCisKK2J1aWxkX2RvY19odG1sOiAkKERPQ1NfSFRNTCkKK2J1aWxkX2RvY19t YW46ICQoRE9DU19NQU4zKQorYnVpbGRfZG9jOiAkKERPQ1MpCisKKyMKKyMgSW5jbHVkZSBnZW5l cmF0ZWQgZGVwZW5kZW5jeSBmaWxlcy4KKyMKK2lmZGVmIENDX01NCistaW5jbHVkZSAkKENfU1lN X09CSlM6JS4kKE8pPSUuZCkKKy1pbmNsdWRlICQoQ19PQkpTOiUuJChPKT0lLmQpCistaW5jbHVk ZSAkKENQUF9PQkpTOiUuJChPKT0lLmQpCistaW5jbHVkZSAkKENfUElDX09CSlM6JS4kKE8pPSUu ZCkKKy1pbmNsdWRlICQoQ1BQX1BJQ19PQkpTOiUuJChPKT0lLmQpCistaW5jbHVkZSAkKENfSkVU X1NZTV9PQkpTOiUuJChPKT0lLmQpCistaW5jbHVkZSAkKENfSkVUX09CSlM6JS4kKE8pPSUuZCkK Ky1pbmNsdWRlICQoQ19URVNUTElCX09CSlM6JS4kKE8pPSUuZCkKKy1pbmNsdWRlICQoVEVTVFNf T0JKUzolLiQoTyk9JS5kKQorLWluY2x1ZGUgJChURVNUU19DUFBfT0JKUzolLiQoTyk9JS5kKQor ZW5kaWYKKworJChDX1NZTV9PQkpTKTogJChvYmpyb290KXNyYy8lLnN5bS4kKE8pOiAkKHNyY3Jv b3Qpc3JjLyUuYworJChDX1NZTV9PQkpTKTogQ1BQRkxBR1MgKz0gLURKRU1BTExPQ19OT19QUklW QVRFX05BTUVTUEFDRQorJChDX1NZTVMpOiAkKG9ianJvb3Qpc3JjLyUuc3ltOiAkKG9ianJvb3Qp c3JjLyUuc3ltLiQoTykKKyQoQ19PQkpTKTogJChvYmpyb290KXNyYy8lLiQoTyk6ICQoc3Jjcm9v dClzcmMvJS5jCiskKENQUF9PQkpTKTogJChvYmpyb290KXNyYy8lLiQoTyk6ICQoc3Jjcm9vdClz cmMvJS5jcHAKKyQoQ19QSUNfT0JKUyk6ICQob2Jqcm9vdClzcmMvJS5waWMuJChPKTogJChzcmNy b290KXNyYy8lLmMKKyQoQ19QSUNfT0JKUyk6IENGTEFHUyArPSAkKFBJQ19DRkxBR1MpCiskKENQ UF9QSUNfT0JKUyk6ICQob2Jqcm9vdClzcmMvJS5waWMuJChPKTogJChzcmNyb290KXNyYy8lLmNw cAorJChDUFBfUElDX09CSlMpOiBDWFhGTEFHUyArPSAkKFBJQ19DRkxBR1MpCiskKENfSkVUX1NZ TV9PQkpTKTogJChvYmpyb290KXNyYy8lLmpldC5zeW0uJChPKTogJChzcmNyb290KXNyYy8lLmMK KyQoQ19KRVRfU1lNX09CSlMpOiBDUFBGTEFHUyArPSAtREpFTUFMTE9DX0pFVCAtREpFTUFMTE9D X05PX1BSSVZBVEVfTkFNRVNQQUNFCiskKENfSkVUX1NZTVMpOiAkKG9ianJvb3Qpc3JjLyUuamV0 LnN5bTogJChvYmpyb290KXNyYy8lLmpldC5zeW0uJChPKQorJChDX0pFVF9PQkpTKTogJChvYmpy b290KXNyYy8lLmpldC4kKE8pOiAkKHNyY3Jvb3Qpc3JjLyUuYworJChDX0pFVF9PQkpTKTogQ1BQ RkxBR1MgKz0gLURKRU1BTExPQ19KRVQKKyQoQ19URVNUTElCX1VOSVRfT0JKUyk6ICQob2Jqcm9v dCl0ZXN0L3NyYy8lLnVuaXQuJChPKTogJChzcmNyb290KXRlc3Qvc3JjLyUuYworJChDX1RFU1RM SUJfVU5JVF9PQkpTKTogQ1BQRkxBR1MgKz0gLURKRU1BTExPQ19VTklUX1RFU1QKKyQoQ19URVNU TElCX0lOVEVHUkFUSU9OX09CSlMpOiAkKG9ianJvb3QpdGVzdC9zcmMvJS5pbnRlZ3JhdGlvbi4k KE8pOiAkKHNyY3Jvb3QpdGVzdC9zcmMvJS5jCiskKENfVEVTVExJQl9JTlRFR1JBVElPTl9PQkpT KTogQ1BQRkxBR1MgKz0gLURKRU1BTExPQ19JTlRFR1JBVElPTl9URVNUCiskKENfVVRJTF9JTlRF R1JBVElPTl9PQkpTKTogJChvYmpyb290KXNyYy8lLmludGVncmF0aW9uLiQoTyk6ICQoc3Jjcm9v dClzcmMvJS5jCiskKENfVEVTVExJQl9BTkFMWVpFX09CSlMpOiAkKG9ianJvb3QpdGVzdC9zcmMv JS5hbmFseXplLiQoTyk6ICQoc3Jjcm9vdCl0ZXN0L3NyYy8lLmMKKyQoQ19URVNUTElCX0FOQUxZ WkVfT0JKUyk6IENQUEZMQUdTICs9IC1ESkVNQUxMT0NfQU5BTFlaRV9URVNUCiskKENfVEVTVExJ Ql9TVFJFU1NfT0JKUyk6ICQob2Jqcm9vdCl0ZXN0L3NyYy8lLnN0cmVzcy4kKE8pOiAkKHNyY3Jv b3QpdGVzdC9zcmMvJS5jCiskKENfVEVTVExJQl9TVFJFU1NfT0JKUyk6IENQUEZMQUdTICs9IC1E SkVNQUxMT0NfU1RSRVNTX1RFU1QgLURKRU1BTExPQ19TVFJFU1NfVEVTVExJQgorJChDX1RFU1RM SUJfT0JKUyk6IENQUEZMQUdTICs9IC1JJChzcmNyb290KXRlc3QvaW5jbHVkZSAtSSQob2Jqcm9v dCl0ZXN0L2luY2x1ZGUKKyQoVEVTVFNfVU5JVF9PQkpTKTogQ1BQRkxBR1MgKz0gLURKRU1BTExP Q19VTklUX1RFU1QKKyQoVEVTVFNfSU5URUdSQVRJT05fT0JKUyk6IENQUEZMQUdTICs9IC1ESkVN QUxMT0NfSU5URUdSQVRJT05fVEVTVAorJChURVNUU19JTlRFR1JBVElPTl9DUFBfT0JKUyk6IENQ UEZMQUdTICs9IC1ESkVNQUxMT0NfSU5URUdSQVRJT05fQ1BQX1RFU1QKKyQoVEVTVFNfQU5BTFla RV9PQkpTKTogQ1BQRkxBR1MgKz0gLURKRU1BTExPQ19BTkFMWVpFX1RFU1QKKyQoVEVTVFNfU1RS RVNTX09CSlMpOiBDUFBGTEFHUyArPSAtREpFTUFMTE9DX1NUUkVTU19URVNUCiskKFRFU1RTX09C SlMpOiAkKG9ianJvb3QpdGVzdC8lLiQoTyk6ICQoc3Jjcm9vdCl0ZXN0LyUuYworJChURVNUU19D UFBfT0JKUyk6ICQob2Jqcm9vdCl0ZXN0LyUuJChPKTogJChzcmNyb290KXRlc3QvJS5jcHAKKyQo VEVTVFNfT0JKUyk6IENQUEZMQUdTICs9IC1JJChzcmNyb290KXRlc3QvaW5jbHVkZSAtSSQob2Jq cm9vdCl0ZXN0L2luY2x1ZGUKKyQoVEVTVFNfQ1BQX09CSlMpOiBDUFBGTEFHUyArPSAtSSQoc3Jj cm9vdCl0ZXN0L2luY2x1ZGUgLUkkKG9ianJvb3QpdGVzdC9pbmNsdWRlCitpZm5lcSAoJChJTVBP UlRMSUIpLCQoU08pKQorJChDUFBfT0JKUykgJChDX1NZTV9PQkpTKSAkKENfT0JKUykgJChDX0pF VF9TWU1fT0JKUykgJChDX0pFVF9PQkpTKTogQ1BQRkxBR1MgKz0gLURETExFWFBPUlQKK2VuZGlm CisKKyMgRGVwZW5kZW5jaWVzLgoraWZuZGVmIENDX01NCitIRUFERVJfRElSUyA9ICQoc3Jjcm9v dClpbmNsdWRlL2plbWFsbG9jL2ludGVybmFsIFwKKwkkKG9ianJvb3QpaW5jbHVkZS9qZW1hbGxv YyAkKG9ianJvb3QpaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbAorSEVBREVSUyA9ICQoZmlsdGVy LW91dCAkKFBSSVZBVEVfTkFNRVNQQUNFX0hEUlMpLCQod2lsZGNhcmQgJChmb3JlYWNoIGRpciwk KEhFQURFUl9ESVJTKSwkKGRpcikvKi5oKSkpCiskKENfU1lNX09CSlMpICQoQ19PQkpTKSAkKENQ UF9PQkpTKSAkKENfUElDX09CSlMpICQoQ1BQX1BJQ19PQkpTKSAkKENfSkVUX1NZTV9PQkpTKSAk KENfSkVUX09CSlMpICQoQ19URVNUTElCX09CSlMpICQoVEVTVFNfT0JKUykgJChURVNUU19DUFBf T0JKUyk6ICQoSEVBREVSUykKKyQoVEVTVFNfT0JKUykgJChURVNUU19DUFBfT0JKUyk6ICQob2Jq cm9vdCl0ZXN0L2luY2x1ZGUvdGVzdC9qZW1hbGxvY190ZXN0LmgKK2VuZGlmCisKKyQoQ19PQkpT KSAkKENQUF9PQkpTKSAkKENfUElDX09CSlMpICQoQ1BQX1BJQ19PQkpTKSAkKENfVEVTVExJQl9J TlRFR1JBVElPTl9PQkpTKSAkKENfVVRJTF9JTlRFR1JBVElPTl9PQkpTKSAkKFRFU1RTX0lOVEVH UkFUSU9OX09CSlMpICQoVEVTVFNfSU5URUdSQVRJT05fQ1BQX09CSlMpOiAkKG9ianJvb3QpaW5j bHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9wcml2YXRlX25hbWVzcGFjZS5oCiskKENfSkVUX09CSlMp ICQoQ19URVNUTElCX1VOSVRfT0JKUykgJChDX1RFU1RMSUJfQU5BTFlaRV9PQkpTKSAkKENfVEVT VExJQl9TVFJFU1NfT0JKUykgJChURVNUU19VTklUX09CSlMpICQoVEVTVFNfQU5BTFlaRV9PQkpT KSAkKFRFU1RTX1NUUkVTU19PQkpTKTogJChvYmpyb290KWluY2x1ZGUvamVtYWxsb2MvaW50ZXJu YWwvcHJpdmF0ZV9uYW1lc3BhY2VfamV0LmgKKworJChDX1NZTV9PQkpTKSAkKENfT0JKUykgJChD X1BJQ19PQkpTKSAkKENfSkVUX1NZTV9PQkpTKSAkKENfSkVUX09CSlMpICQoQ19URVNUTElCX09C SlMpICQoVEVTVFNfT0JKUyk6ICUuJChPKToKKwlAbWtkaXIgLXAgJChARCkKKwkkKENDKSAkKENG TEFHUykgLWMgJChDUFBGTEFHUykgJChDVEFSR0VUKSAkPAoraWZkZWYgQ0NfTU0KKwlAJChDQykg LU1NICQoQ1BQRkxBR1MpIC1NVCAkQCAtbyAkKEA6JS4kKE8pPSUuZCkgJDwKK2VuZGlmCisKKyQo Q19TWU1TKTogJS5zeW06CisJQG1rZGlyIC1wICQoQEQpCisJJChEVU1QX1NZTVMpICQ8IHwgJChB V0spIC1mICQob2Jqcm9vdClpbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL3ByaXZhdGVfc3ltYm9s cy5hd2sgPiAkQAorCiskKENfSkVUX1NZTVMpOiAlLnN5bToKKwlAbWtkaXIgLXAgJChARCkKKwkk KERVTVBfU1lNUykgJDwgfCAkKEFXSykgLWYgJChvYmpyb290KWluY2x1ZGUvamVtYWxsb2MvaW50 ZXJuYWwvcHJpdmF0ZV9zeW1ib2xzX2pldC5hd2sgPiAkQAorCiskKG9ianJvb3QpaW5jbHVkZS9q ZW1hbGxvYy9pbnRlcm5hbC9wcml2YXRlX25hbWVzcGFjZS5nZW4uaDogJChDX1NZTVMpCisJJChT SEVMTCkgJChzcmNyb290KWluY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvcHJpdmF0ZV9uYW1lc3Bh Y2Uuc2ggJF4gPiAkQAorCiskKG9ianJvb3QpaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9wcml2 YXRlX25hbWVzcGFjZV9qZXQuZ2VuLmg6ICQoQ19KRVRfU1lNUykKKwkkKFNIRUxMKSAkKHNyY3Jv b3QpaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9wcml2YXRlX25hbWVzcGFjZS5zaCAkXiA+ICRA CisKKyUuaDogJS5nZW4uaAorCUBpZiAhIGBjbXAgLXMgJDwgJEBgIDsgdGhlbiBlY2hvICJjcCAk PCAkQCI7IGNwICQ8ICRAIDsgZmkKKworJChDUFBfT0JKUykgJChDUFBfUElDX09CSlMpICQoVEVT VFNfQ1BQX09CSlMpOiAlLiQoTyk6CisJQG1rZGlyIC1wICQoQEQpCisJJChDWFgpICQoQ1hYRkxB R1MpIC1jICQoQ1BQRkxBR1MpICQoQ1RBUkdFVCkgJDwKK2lmZGVmIENDX01NCisJQCQoQ1hYKSAt TU0gJChDUFBGTEFHUykgLU1UICRAIC1vICQoQDolLiQoTyk9JS5kKSAkPAorZW5kaWYKKworaWZu ZXEgKCQoU09SRVYpLCQoU08pKQorJS4kKFNPKSA6ICUuJChTT1JFVikKKwlAbWtkaXIgLXAgJChA RCkKKwlsbiAtc2YgJCg8RikgJEAKK2VuZGlmCisKKyQob2Jqcm9vdClsaWIvJChMSUJKRU1BTExP QykuJChTT1JFVikgOiAkKGlmICQoUElDX0NGTEFHUyksJChDX1BJQ19PQkpTKSwkKENfT0JKUykp ICQoaWYgJChQSUNfQ0ZMQUdTKSwkKENQUF9QSUNfT0JKUyksJChDUFBfT0JKUykpCisJQG1rZGly IC1wICQoQEQpCisJJChDQykgJChEU09fTERGTEFHUykgJChjYWxsIFJQQVRILCQoUlBBVEhfRVhU UkEpKSAkKExEVEFSR0VUKSAkKyAkKExERkxBR1MpICQoTElCUykgJChFWFRSQV9MREZMQUdTKQor CiskKG9ianJvb3QpbGliLyQoTElCSkVNQUxMT0MpX3BpYy4kKEEpIDogJChDX1BJQ19PQkpTKSAk KENQUF9QSUNfT0JKUykKKyQob2Jqcm9vdClsaWIvJChMSUJKRU1BTExPQykuJChBKSA6ICQoQ19P QkpTKSAkKENQUF9PQkpTKQorJChvYmpyb290KWxpYi8kKExJQkpFTUFMTE9DKV9zLiQoQSkgOiAk KENfT0JKUykgJChDUFBfT0JKUykKKworJChTVEFUSUNfTElCUyk6CisJQG1rZGlyIC1wICQoQEQp CisJJChBUikgJChBUkZMQUdTKUBBUk9VVEAgJCsKKworJChvYmpyb290KXRlc3QvdW5pdC8lJChF WEUpOiAkKG9ianJvb3QpdGVzdC91bml0LyUuJChPKSAkKENfSkVUX09CSlMpICQoQ19URVNUTElC X1VOSVRfT0JKUykKKwlAbWtkaXIgLXAgJChARCkKKwkkKENDKSAkKExEVEFSR0VUKSAkKGZpbHRl ciAlLiQoTyksJF4pICQoY2FsbCBSUEFUSCwkKG9ianJvb3QpbGliKSAkKExERkxBR1MpICQoZmls dGVyLW91dCAtbG0sJChMSUJTKSkgJChMTSkgJChFWFRSQV9MREZMQUdTKQorCiskKG9ianJvb3Qp dGVzdC9pbnRlZ3JhdGlvbi8lJChFWEUpOiAkKG9ianJvb3QpdGVzdC9pbnRlZ3JhdGlvbi8lLiQo TykgJChDX1RFU1RMSUJfSU5URUdSQVRJT05fT0JKUykgJChDX1VUSUxfSU5URUdSQVRJT05fT0JK UykgJChvYmpyb290KWxpYi8kKExJQkpFTUFMTE9DKS4kKElNUE9SVExJQikKKwlAbWtkaXIgLXAg JChARCkKKwkkKENDKSAkKFRFU1RfTERfTU9ERSkgJChMRFRBUkdFVCkgJChmaWx0ZXIgJS4kKE8p LCReKSAkKGNhbGwgUlBBVEgsJChvYmpyb290KWxpYikgJChMSkVNQUxMT0MpICQoTERGTEFHUykg JChmaWx0ZXItb3V0IC1sbSwkKGZpbHRlciAtbHJ0IC1wdGhyZWFkIC1sc3RkYysrLCQoTElCUykp KSAkKExNKSAkKEVYVFJBX0xERkxBR1MpCisKKyQob2Jqcm9vdCl0ZXN0L2ludGVncmF0aW9uL2Nw cC8lJChFWEUpOiAkKG9ianJvb3QpdGVzdC9pbnRlZ3JhdGlvbi9jcHAvJS4kKE8pICQoQ19URVNU TElCX0lOVEVHUkFUSU9OX09CSlMpICQoQ19VVElMX0lOVEVHUkFUSU9OX09CSlMpICQob2Jqcm9v dClsaWIvJChMSUJKRU1BTExPQykuJChJTVBPUlRMSUIpCisJQG1rZGlyIC1wICQoQEQpCisJJChD WFgpICQoTERUQVJHRVQpICQoZmlsdGVyICUuJChPKSwkXikgJChjYWxsIFJQQVRILCQob2Jqcm9v dClsaWIpICQob2Jqcm9vdClsaWIvJChMSUJKRU1BTExPQykuJChJTVBPUlRMSUIpICQoTERGTEFH UykgJChmaWx0ZXItb3V0IC1sbSwkKExJQlMpKSAtbG0gJChFWFRSQV9MREZMQUdTKQorCiskKG9i anJvb3QpdGVzdC9hbmFseXplLyUkKEVYRSk6ICQob2Jqcm9vdCl0ZXN0L2FuYWx5emUvJS4kKE8p ICQoQ19KRVRfT0JKUykgJChDX1RFU1RMSUJfQU5BTFlaRV9PQkpTKQorCUBta2RpciAtcCAkKEBE KQorCSQoQ0MpICQoTERUQVJHRVQpICQoZmlsdGVyICUuJChPKSwkXikgJChjYWxsIFJQQVRILCQo b2Jqcm9vdClsaWIpICQoTERGTEFHUykgJChmaWx0ZXItb3V0IC1sbSwkKExJQlMpKSAkKExNKSAk KEVYVFJBX0xERkxBR1MpCisKKyQob2Jqcm9vdCl0ZXN0L3N0cmVzcy8lJChFWEUpOiAkKG9ianJv b3QpdGVzdC9zdHJlc3MvJS4kKE8pICQoQ19KRVRfT0JKUykgJChDX1RFU1RMSUJfU1RSRVNTX09C SlMpICQob2Jqcm9vdClsaWIvJChMSUJKRU1BTExPQykuJChJTVBPUlRMSUIpCisJQG1rZGlyIC1w ICQoQEQpCisJJChDQykgJChURVNUX0xEX01PREUpICQoTERUQVJHRVQpICQoZmlsdGVyICUuJChP KSwkXikgJChjYWxsIFJQQVRILCQob2Jqcm9vdClsaWIpICQob2Jqcm9vdClsaWIvJChMSUJKRU1B TExPQykuJChJTVBPUlRMSUIpICQoTERGTEFHUykgJChmaWx0ZXItb3V0IC1sbSwkKExJQlMpKSAk KExNKSAkKEVYVFJBX0xERkxBR1MpCisKK2J1aWxkX2xpYl9zaGFyZWQ6ICQoRFNPUykKK2J1aWxk X2xpYl9zdGF0aWM6ICQoU1RBVElDX0xJQlMpCitpZmVxICgkKGVuYWJsZV9zaGFyZWQpLCAxKQor YnVpbGRfbGliOiBidWlsZF9saWJfc2hhcmVkCitlbmRpZgoraWZlcSAoJChlbmFibGVfc3RhdGlj KSwgMSkKK2J1aWxkX2xpYjogYnVpbGRfbGliX3N0YXRpYworZW5kaWYKKworaW5zdGFsbF9iaW46 CisJJChJTlNUQUxMKSAtZCAkKEJJTkRJUikKKwlAZm9yIGIgaW4gJChCSU5TKTsgZG8gXAorCSQo SU5TVEFMTCkgLXYgLW0gNzU1ICQkYiAkKEJJTkRJUik7IFwKK2RvbmUKKworaW5zdGFsbF9pbmNs dWRlOgorCSQoSU5TVEFMTCkgLWQgJChJTkNMVURFRElSKS9qZW1hbGxvYworCUBmb3IgaCBpbiAk KENfSERSUyk7IGRvIFwKKwkkKElOU1RBTEwpIC12IC1tIDY0NCAkJGggJChJTkNMVURFRElSKS9q ZW1hbGxvYzsgXAorZG9uZQorCitpbnN0YWxsX2xpYl9zaGFyZWQ6ICQoRFNPUykKKwkkKElOU1RB TEwpIC1kICQoTElCRElSKQorCSQoSU5TVEFMTCkgLXYgLW0gNzU1ICQob2Jqcm9vdClsaWIvJChM SUJKRU1BTExPQykuJChTT1JFVikgJChMSUJESVIpCitpZm5lcSAoJChTT1JFViksJChTTykpCisJ bG4gLXNmICQoTElCSkVNQUxMT0MpLiQoU09SRVYpICQoTElCRElSKS8kKExJQkpFTUFMTE9DKS4k KFNPKQorZW5kaWYKKworaW5zdGFsbF9saWJfc3RhdGljOiAkKFNUQVRJQ19MSUJTKQorCSQoSU5T VEFMTCkgLWQgJChMSUJESVIpCisJQGZvciBsIGluICQoU1RBVElDX0xJQlMpOyBkbyBcCisJJChJ TlNUQUxMKSAtdiAtbSA3NTUgJCRsICQoTElCRElSKTsgXAorZG9uZQorCitpbnN0YWxsX2xpYl9w YzogJChQQykKKwkkKElOU1RBTEwpIC1kICQoTElCRElSKS9wa2djb25maWcKKwlAZm9yIGwgaW4g JChQQyk7IGRvIFwKKwkkKElOU1RBTEwpIC12IC1tIDY0NCAkJGwgJChMSUJESVIpL3BrZ2NvbmZp ZzsgXAorZG9uZQorCitpZmVxICgkKGVuYWJsZV9zaGFyZWQpLCAxKQoraW5zdGFsbF9saWI6IGlu c3RhbGxfbGliX3NoYXJlZAorZW5kaWYKK2lmZXEgKCQoZW5hYmxlX3N0YXRpYyksIDEpCitpbnN0 YWxsX2xpYjogaW5zdGFsbF9saWJfc3RhdGljCitlbmRpZgoraW5zdGFsbF9saWI6IGluc3RhbGxf bGliX3BjCisKK2luc3RhbGxfZG9jX2h0bWw6IGJ1aWxkX2RvY19odG1sCisJJChJTlNUQUxMKSAt ZCAkKERBVEFESVIpL2RvYy9qZW1hbGxvYyQoaW5zdGFsbF9zdWZmaXgpCisJQGZvciBkIGluICQo RE9DU19IVE1MKTsgZG8gXAorCSQoSU5TVEFMTCkgLXYgLW0gNjQ0ICQkZCAkKERBVEFESVIpL2Rv Yy9qZW1hbGxvYyQoaW5zdGFsbF9zdWZmaXgpOyBcCitkb25lCisKK2luc3RhbGxfZG9jX21hbjog YnVpbGRfZG9jX21hbgorCSQoSU5TVEFMTCkgLWQgJChNQU5ESVIpL21hbjMKKwlAZm9yIGQgaW4g JChET0NTX01BTjMpOyBkbyBcCisJJChJTlNUQUxMKSAtdiAtbSA2NDQgJCRkICQoTUFORElSKS9t YW4zOyBcCitkb25lCisKK2luc3RhbGxfZG9jOiBpbnN0YWxsX2RvY19odG1sIGluc3RhbGxfZG9j X21hbgorCitpbnN0YWxsOiBpbnN0YWxsX2JpbiBpbnN0YWxsX2luY2x1ZGUgaW5zdGFsbF9saWIK KworaWZlcSAoJChlbmFibGVfZG9jKSwgMSkKK2luc3RhbGw6IGluc3RhbGxfZG9jCitlbmRpZgor Cit1bmluc3RhbGxfYmluOgorCSQoUk0pIC12ICQoZm9yZWFjaCBiLCQobm90ZGlyICQoQklOUykp LCQoQklORElSKS8kKGIpKQorCit1bmluc3RhbGxfaW5jbHVkZToKKwkkKFJNKSAtdiAkKGZvcmVh Y2ggaCwkKG5vdGRpciAkKENfSERSUykpLCQoSU5DTFVERURJUikvamVtYWxsb2MvJChoKSkKKwly bWRpciAtdiAkKElOQ0xVREVESVIpL2plbWFsbG9jCisKK3VuaW5zdGFsbF9saWJfc2hhcmVkOgor CSQoUk0pIC12ICQoTElCRElSKS8kKExJQkpFTUFMTE9DKS4kKFNPUkVWKQoraWZuZXEgKCQoU09S RVYpLCQoU08pKQorCSQoUk0pIC12ICQoTElCRElSKS8kKExJQkpFTUFMTE9DKS4kKFNPKQorZW5k aWYKKwordW5pbnN0YWxsX2xpYl9zdGF0aWM6CisJJChSTSkgLXYgJChmb3JlYWNoIGwsJChub3Rk aXIgJChTVEFUSUNfTElCUykpLCQoTElCRElSKS8kKGwpKQorCit1bmluc3RhbGxfbGliX3BjOgor CSQoUk0pIC12ICQoZm9yZWFjaCBwLCQobm90ZGlyICQoUEMpKSwkKExJQkRJUikvcGtnY29uZmln LyQocCkpCisKK2lmZXEgKCQoZW5hYmxlX3NoYXJlZCksIDEpCit1bmluc3RhbGxfbGliOiB1bmlu c3RhbGxfbGliX3NoYXJlZAorZW5kaWYKK2lmZXEgKCQoZW5hYmxlX3N0YXRpYyksIDEpCit1bmlu c3RhbGxfbGliOiB1bmluc3RhbGxfbGliX3N0YXRpYworZW5kaWYKK3VuaW5zdGFsbF9saWI6IHVu aW5zdGFsbF9saWJfcGMKKwordW5pbnN0YWxsX2RvY19odG1sOgorCSQoUk0pIC12ICQoZm9yZWFj aCBkLCQobm90ZGlyICQoRE9DU19IVE1MKSksJChEQVRBRElSKS9kb2MvamVtYWxsb2MkKGluc3Rh bGxfc3VmZml4KS8kKGQpKQorCXJtZGlyIC12ICQoREFUQURJUikvZG9jL2plbWFsbG9jJChpbnN0 YWxsX3N1ZmZpeCkKKwordW5pbnN0YWxsX2RvY19tYW46CisJJChSTSkgLXYgJChmb3JlYWNoIGQs JChub3RkaXIgJChET0NTX01BTjMpKSwkKE1BTkRJUikvbWFuMy8kKGQpKQorCit1bmluc3RhbGxf ZG9jOiB1bmluc3RhbGxfZG9jX2h0bWwgdW5pbnN0YWxsX2RvY19tYW4KKwordW5pbnN0YWxsOiB1 bmluc3RhbGxfYmluIHVuaW5zdGFsbF9pbmNsdWRlIHVuaW5zdGFsbF9saWIKKworaWZlcSAoJChl bmFibGVfZG9jKSwgMSkKK3VuaW5zdGFsbDogdW5pbnN0YWxsX2RvYworZW5kaWYKKwordGVzdHNf dW5pdDogJChURVNUU19VTklUOiQoc3Jjcm9vdCklLmM9JChvYmpyb290KSUkKEVYRSkpCit0ZXN0 c19pbnRlZ3JhdGlvbjogJChURVNUU19JTlRFR1JBVElPTjokKHNyY3Jvb3QpJS5jPSQob2Jqcm9v dCklJChFWEUpKSAkKFRFU1RTX0lOVEVHUkFUSU9OX0NQUDokKHNyY3Jvb3QpJS5jcHA9JChvYmpy b290KSUkKEVYRSkpCit0ZXN0c19hbmFseXplOiAkKFRFU1RTX0FOQUxZWkU6JChzcmNyb290KSUu Yz0kKG9ianJvb3QpJSQoRVhFKSkKK3Rlc3RzX3N0cmVzczogJChURVNUU19TVFJFU1M6JChzcmNy b290KSUuYz0kKG9ianJvb3QpJSQoRVhFKSkKK3Rlc3RzOiB0ZXN0c191bml0IHRlc3RzX2ludGVn cmF0aW9uIHRlc3RzX2FuYWx5emUgdGVzdHNfc3RyZXNzCisKK2NoZWNrX3VuaXRfZGlyOgorCUBt a2RpciAtcCAkKG9ianJvb3QpdGVzdC91bml0CitjaGVja19pbnRlZ3JhdGlvbl9kaXI6CisJQG1r ZGlyIC1wICQob2Jqcm9vdCl0ZXN0L2ludGVncmF0aW9uCithbmFseXplX2RpcjoKKwlAbWtkaXIg LXAgJChvYmpyb290KXRlc3QvYW5hbHl6ZQorc3RyZXNzX2RpcjoKKwlAbWtkaXIgLXAgJChvYmpy b290KXRlc3Qvc3RyZXNzCitjaGVja19kaXI6IGNoZWNrX3VuaXRfZGlyIGNoZWNrX2ludGVncmF0 aW9uX2RpcgorCitjaGVja191bml0OiB0ZXN0c191bml0IGNoZWNrX3VuaXRfZGlyCisJJChTSEVM TCkgJChvYmpyb290KXRlc3QvdGVzdC5zaCAkKFRFU1RTX1VOSVQ6JChzcmNyb290KSUuYz0kKG9i anJvb3QpJSkKK2NoZWNrX2ludGVncmF0aW9uX3Byb2Y6IHRlc3RzX2ludGVncmF0aW9uIGNoZWNr X2ludGVncmF0aW9uX2RpcgoraWZlcSAoJChlbmFibGVfcHJvZiksIDEpCisJJChNQUxMT0NfQ09O Rik9InByb2Y6dHJ1ZSIgJChTSEVMTCkgJChvYmpyb290KXRlc3QvdGVzdC5zaCAkKFRFU1RTX0lO VEVHUkFUSU9OOiQoc3Jjcm9vdCklLmM9JChvYmpyb290KSUpICQoVEVTVFNfSU5URUdSQVRJT05f Q1BQOiQoc3Jjcm9vdCklLmNwcD0kKG9ianJvb3QpJSkKKwkkKE1BTExPQ19DT05GKT0icHJvZjp0 cnVlLHByb2ZfYWN0aXZlOmZhbHNlIiAkKFNIRUxMKSAkKG9ianJvb3QpdGVzdC90ZXN0LnNoICQo VEVTVFNfSU5URUdSQVRJT046JChzcmNyb290KSUuYz0kKG9ianJvb3QpJSkgJChURVNUU19JTlRF R1JBVElPTl9DUFA6JChzcmNyb290KSUuY3BwPSQob2Jqcm9vdCklKQorZW5kaWYKK2NoZWNrX2lu dGVncmF0aW9uX2RlY2F5OiB0ZXN0c19pbnRlZ3JhdGlvbiBjaGVja19pbnRlZ3JhdGlvbl9kaXIK KwkkKE1BTExPQ19DT05GKT0iZGlydHlfZGVjYXlfbXM6LTEsbXV6enlfZGVjYXlfbXM6LTEiICQo U0hFTEwpICQob2Jqcm9vdCl0ZXN0L3Rlc3Quc2ggJChURVNUU19JTlRFR1JBVElPTjokKHNyY3Jv b3QpJS5jPSQob2Jqcm9vdCklKSAkKFRFU1RTX0lOVEVHUkFUSU9OX0NQUDokKHNyY3Jvb3QpJS5j cHA9JChvYmpyb290KSUpCisJJChNQUxMT0NfQ09ORik9ImRpcnR5X2RlY2F5X21zOjAsbXV6enlf ZGVjYXlfbXM6MCIgJChTSEVMTCkgJChvYmpyb290KXRlc3QvdGVzdC5zaCAkKFRFU1RTX0lOVEVH UkFUSU9OOiQoc3Jjcm9vdCklLmM9JChvYmpyb290KSUpICQoVEVTVFNfSU5URUdSQVRJT05fQ1BQ OiQoc3Jjcm9vdCklLmNwcD0kKG9ianJvb3QpJSkKK2NoZWNrX2ludGVncmF0aW9uOiB0ZXN0c19p bnRlZ3JhdGlvbiBjaGVja19pbnRlZ3JhdGlvbl9kaXIKKwkkKFNIRUxMKSAkKG9ianJvb3QpdGVz dC90ZXN0LnNoICQoVEVTVFNfSU5URUdSQVRJT046JChzcmNyb290KSUuYz0kKG9ianJvb3QpJSkg JChURVNUU19JTlRFR1JBVElPTl9DUFA6JChzcmNyb290KSUuY3BwPSQob2Jqcm9vdCklKQorYW5h bHl6ZTogdGVzdHNfYW5hbHl6ZSBhbmFseXplX2RpcgoraWZlcSAoJChlbmFibGVfcHJvZiksIDEp CisJJChNQUxMT0NfQ09ORik9InByb2Y6dHJ1ZSIgJChTSEVMTCkgJChvYmpyb290KXRlc3QvdGVz dC5zaCAkKFRFU1RTX0FOQUxZWkU6JChzcmNyb290KSUuYz0kKG9ianJvb3QpJSkKK2Vsc2UKKwkk KFNIRUxMKSAkKG9ianJvb3QpdGVzdC90ZXN0LnNoICQoVEVTVFNfQU5BTFlaRTokKHNyY3Jvb3Qp JS5jPSQob2Jqcm9vdCklKQorZW5kaWYKK3N0cmVzczogdGVzdHNfc3RyZXNzIHN0cmVzc19kaXIK KwkkKFNIRUxMKSAkKG9ianJvb3QpdGVzdC90ZXN0LnNoICQoVEVTVFNfU1RSRVNTOiQoc3Jjcm9v dCklLmM9JChvYmpyb290KSUpCitjaGVjazogY2hlY2tfdW5pdCBjaGVja19pbnRlZ3JhdGlvbiBj aGVja19pbnRlZ3JhdGlvbl9kZWNheSBjaGVja19pbnRlZ3JhdGlvbl9wcm9mCisKK2NsZWFuOgor CXJtIC1mICQoUFJJVkFURV9OQU1FU1BBQ0VfSERSUykKKwlybSAtZiAkKFBSSVZBVEVfTkFNRVNQ QUNFX0dFTl9IRFJTKQorCXJtIC1mICQoQ19TWU1fT0JKUykKKwlybSAtZiAkKENfU1lNUykKKwly bSAtZiAkKENfT0JKUykKKwlybSAtZiAkKENQUF9PQkpTKQorCXJtIC1mICQoQ19QSUNfT0JKUykK KwlybSAtZiAkKENQUF9QSUNfT0JKUykKKwlybSAtZiAkKENfSkVUX1NZTV9PQkpTKQorCXJtIC1m ICQoQ19KRVRfU1lNUykKKwlybSAtZiAkKENfSkVUX09CSlMpCisJcm0gLWYgJChDX1RFU1RMSUJf T0JKUykKKwlybSAtZiAkKENfU1lNX09CSlM6JS4kKE8pPSUuZCkKKwlybSAtZiAkKENfT0JKUzol LiQoTyk9JS5kKQorCXJtIC1mICQoQ1BQX09CSlM6JS4kKE8pPSUuZCkKKwlybSAtZiAkKENfUElD X09CSlM6JS4kKE8pPSUuZCkKKwlybSAtZiAkKENQUF9QSUNfT0JKUzolLiQoTyk9JS5kKQorCXJt IC1mICQoQ19KRVRfU1lNX09CSlM6JS4kKE8pPSUuZCkKKwlybSAtZiAkKENfSkVUX09CSlM6JS4k KE8pPSUuZCkKKwlybSAtZiAkKENfVEVTVExJQl9PQkpTOiUuJChPKT0lLmQpCisJcm0gLWYgJChU RVNUU19PQkpTOiUuJChPKT0lJChFWEUpKQorCXJtIC1mICQoVEVTVFNfT0JKUykKKwlybSAtZiAk KFRFU1RTX09CSlM6JS4kKE8pPSUuZCkKKwlybSAtZiAkKFRFU1RTX09CSlM6JS4kKE8pPSUub3V0 KQorCXJtIC1mICQoVEVTVFNfQ1BQX09CSlM6JS4kKE8pPSUkKEVYRSkpCisJcm0gLWYgJChURVNU U19DUFBfT0JKUykKKwlybSAtZiAkKFRFU1RTX0NQUF9PQkpTOiUuJChPKT0lLmQpCisJcm0gLWYg JChURVNUU19DUFBfT0JKUzolLiQoTyk9JS5vdXQpCisJcm0gLWYgJChEU09TKSAkKFNUQVRJQ19M SUJTKQorCitkaXN0Y2xlYW46IGNsZWFuCisJcm0gLWYgJChvYmpyb290KWJpbi9qZW1hbGxvYy1j b25maWcKKwlybSAtZiAkKG9ianJvb3QpYmluL2plbWFsbG9jLnNoCisJcm0gLWYgJChvYmpyb290 KWJpbi9qZXByb2YKKwlybSAtZiAkKG9ianJvb3QpY29uZmlnLmxvZworCXJtIC1mICQob2Jqcm9v dCljb25maWcuc3RhdHVzCisJcm0gLWYgJChvYmpyb290KWNvbmZpZy5zdGFtcAorCXJtIC1mICQo Y2ZnaGRyc19vdXQpCisJcm0gLWYgJChjZmdvdXRwdXRzX291dCkKKworcmVsY2xlYW46IGRpc3Rj bGVhbgorCXJtIC1mICQob2Jqcm9vdCljb25maWd1cmUKKwlybSAtZiAkKG9ianJvb3QpVkVSU0lP TgorCXJtIC1mICQoRE9DU19IVE1MKQorCXJtIC1mICQoRE9DU19NQU4zKQorCisjPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQorIyBSZS1jb25maWd1cmF0aW9uIHJ1bGVzLgorCitpZmVxICgkKGVuYWJs ZV9hdXRvZ2VuKSwgMSkKKyQoc3Jjcm9vdCljb25maWd1cmUgOiAkKHNyY3Jvb3QpY29uZmlndXJl LmFjCisJY2QgLi8kKHNyY3Jvb3QpICYmICQoQVVUT0NPTkYpCisKKyQob2Jqcm9vdCljb25maWcu c3RhdHVzIDogJChzcmNyb290KWNvbmZpZ3VyZQorCS4vJChvYmpyb290KWNvbmZpZy5zdGF0dXMg LS1yZWNoZWNrCisKKyQoc3Jjcm9vdCljb25maWcuc3RhbXAuaW4gOiAkKHNyY3Jvb3QpY29uZmln dXJlLmFjCisJZWNobyBzdGFtcCA+ICQoc3Jjcm9vdCljb25maWcuc3RhbXAuaW4KKworJChvYmpy b290KWNvbmZpZy5zdGFtcCA6ICQoY2Znb3V0cHV0c19pbikgJChjZmdoZHJzX2luKSAkKHNyY3Jv b3QpY29uZmlndXJlCisJLi8kKG9ianJvb3QpY29uZmlnLnN0YXR1cworCUB0b3VjaCAkQAorCisj IFRoZXJlIG11c3QgYmUgc29tZSBhY3Rpb24gaW4gb3JkZXIgZm9yIG1ha2UgdG8gcmUtcmVhZCBN YWtlZmlsZSB3aGVuIGl0IGlzCisjIG91dCBvZiBkYXRlLgorJChjZmdvdXRwdXRzX291dCkgJChj ZmdoZHJzX291dCkgOiAkKG9ianJvb3QpY29uZmlnLnN0YW1wCisJQHRydWUKK2VuZGlmCgpkaWZm IC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvUkVBRE1FIGIv Mzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvUkVBRE1FCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhNmUwZDIKLS0tIC9kZXYvbnVsbAorKysgYi8zODkt ZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9SRUFETUUKQEAgLTAsMCArMSwyMCBA QAoramVtYWxsb2MgaXMgYSBnZW5lcmFsIHB1cnBvc2UgbWFsbG9jKDMpIGltcGxlbWVudGF0aW9u IHRoYXQgZW1waGFzaXplcworZnJhZ21lbnRhdGlvbiBhdm9pZGFuY2UgYW5kIHNjYWxhYmxlIGNv bmN1cnJlbmN5IHN1cHBvcnQuICBqZW1hbGxvYyBmaXJzdCBjYW1lCitpbnRvIHVzZSBhcyB0aGUg RnJlZUJTRCBsaWJjIGFsbG9jYXRvciBpbiAyMDA1LCBhbmQgc2luY2UgdGhlbiBpdCBoYXMgZm91 bmQgaXRzCit3YXkgaW50byBudW1lcm91cyBhcHBsaWNhdGlvbnMgdGhhdCByZWx5IG9uIGl0cyBw cmVkaWN0YWJsZSBiZWhhdmlvci4gIEluIDIwMTAKK2plbWFsbG9jIGRldmVsb3BtZW50IGVmZm9y dHMgYnJvYWRlbmVkIHRvIGluY2x1ZGUgZGV2ZWxvcGVyIHN1cHBvcnQgZmVhdHVyZXMKK3N1Y2gg YXMgaGVhcCBwcm9maWxpbmcgYW5kIGV4dGVuc2l2ZSBtb25pdG9yaW5nL3R1bmluZyBob29rcy4g IE1vZGVybiBqZW1hbGxvYworcmVsZWFzZXMgY29udGludWUgdG8gYmUgaW50ZWdyYXRlZCBiYWNr IGludG8gRnJlZUJTRCwgYW5kIHRoZXJlZm9yZSB2ZXJzYXRpbGl0eQorcmVtYWlucyBjcml0aWNh bC4gIE9uZ29pbmcgZGV2ZWxvcG1lbnQgZWZmb3J0cyB0cmVuZCB0b3dhcmQgbWFraW5nIGplbWFs bG9jCithbW9uZyB0aGUgYmVzdCBhbGxvY2F0b3JzIGZvciBhIGJyb2FkIHJhbmdlIG9mIGRlbWFu ZGluZyBhcHBsaWNhdGlvbnMsIGFuZAorZWxpbWluYXRpbmcvbWl0aWdhdGluZyB3ZWFrbmVzc2Vz IHRoYXQgaGF2ZSBwcmFjdGljYWwgcmVwZXJjdXNzaW9ucyBmb3IgcmVhbAord29ybGQgYXBwbGlj YXRpb25zLgorCitUaGUgQ09QWUlORyBmaWxlIGNvbnRhaW5zIGNvcHlyaWdodCBhbmQgbGljZW5z aW5nIGluZm9ybWF0aW9uLgorCitUaGUgSU5TVEFMTCBmaWxlIGNvbnRhaW5zIGluZm9ybWF0aW9u IG9uIGhvdyB0byBjb25maWd1cmUsIGJ1aWxkLCBhbmQgaW5zdGFsbAoramVtYWxsb2MuCisKK1Ro ZSBDaGFuZ2VMb2cgZmlsZSBjb250YWlucyBhIGJyaWVmIHN1bW1hcnkgb2YgY2hhbmdlcyBmb3Ig ZWFjaCByZWxlYXNlLgorCitVUkw6IGh0dHA6Ly9qZW1hbGxvYy5uZXQvCgpkaWZmIC0tZ2l0IGEv Mzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvVFVOSU5HLm1kIGIvMzg5LWRz LWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvVFVOSU5HLm1kCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5NjM5OWQKLS0tIC9kZXYvbnVsbAorKysgYi8zODktZHMt YmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9UVU5JTkcubWQKQEAgLTAsMCArMSwxMjkg QEAKK1RoaXMgZG9jdW1lbnQgc3VtbWFyaXplcyB0aGUgY29tbW9uIGFwcHJvYWNoZXMgZm9yIHBl cmZvcm1hbmNlIGZpbmUgdHVuaW5nIHdpdGgKK2plbWFsbG9jIChhcyBvZiA1LjMuMCkuICBUaGUg ZGVmYXVsdCBjb25maWd1cmF0aW9uIG9mIGplbWFsbG9jIHRlbmRzIHRvIHdvcmsKK3JlYXNvbmFi bHkgd2VsbCBpbiBwcmFjdGljZSwgYW5kIG1vc3QgYXBwbGljYXRpb25zIHNob3VsZCBub3QgaGF2 ZSB0byB0dW5lIGFueQorb3B0aW9ucy4gSG93ZXZlciwgaW4gb3JkZXIgdG8gY292ZXIgYSB3aWRl IHJhbmdlIG9mIGFwcGxpY2F0aW9ucyBhbmQgYXZvaWQKK3BhdGhvbG9naWNhbCBjYXNlcywgdGhl IGRlZmF1bHQgc2V0dGluZyBpcyBzb21ldGltZXMga2VwdCBjb25zZXJ2YXRpdmUgYW5kCitzdWJv cHRpbWFsLCBldmVuIGZvciBtYW55IGNvbW1vbiB3b3JrbG9hZHMuICBXaGVuIGplbWFsbG9jIGlz IHByb3Blcmx5IHR1bmVkIGZvcgorYSBzcGVjaWZpYyBhcHBsaWNhdGlvbiAvIHdvcmtsb2FkLCBp dCBpcyBjb21tb24gdG8gaW1wcm92ZSBzeXN0ZW0gbGV2ZWwgbWV0cmljcworYnkgYSBmZXcgcGVy Y2VudCwgb3IgbWFrZSBmYXZvcmFibGUgdHJhZGUtb2Zmcy4KKworCisjIyBOb3RhYmxlIHJ1bnRp bWUgb3B0aW9ucyBmb3IgcGVyZm9ybWFuY2UgdHVuaW5nCisKK1J1bnRpbWUgb3B0aW9ucyBjYW4g YmUgc2V0IHZpYQorW21hbGxvY19jb25mXShodHRwOi8vamVtYWxsb2MubmV0L2plbWFsbG9jLjMu aHRtbCN0dW5pbmcpLgorCisqIFtiYWNrZ3JvdW5kX3RocmVhZF0oaHR0cDovL2plbWFsbG9jLm5l dC9qZW1hbGxvYy4zLmh0bWwjYmFja2dyb3VuZF90aHJlYWQpCisKKyAgICBFbmFibGluZyBqZW1h bGxvYyBiYWNrZ3JvdW5kIHRocmVhZHMgZ2VuZXJhbGx5IGltcHJvdmVzIHRoZSB0YWlsIGxhdGVu Y3kgZm9yCisgICAgYXBwbGljYXRpb24gdGhyZWFkcywgc2luY2UgdW51c2VkIG1lbW9yeSBwdXJn aW5nIGlzIHNoaWZ0ZWQgdG8gdGhlIGRlZGljYXRlZAorICAgIGJhY2tncm91bmQgdGhyZWFkcy4g IEluIGFkZGl0aW9uLCB1bmludGVuZGVkIHB1cmdpbmcgZGVsYXkgY2F1c2VkIGJ5CisgICAgYXBw bGljYXRpb24gaW5hY3Rpdml0eSBpcyBhdm9pZGVkIHdpdGggYmFja2dyb3VuZCB0aHJlYWRzLgor CisgICAgU3VnZ2VzdGVkOiBgYmFja2dyb3VuZF90aHJlYWQ6dHJ1ZWAgd2hlbiBqZW1hbGxvYyBt YW5hZ2VkIHRocmVhZHMgY2FuIGJlCisgICAgYWxsb3dlZC4KKworKiBbbWV0YWRhdGFfdGhwXSho dHRwOi8vamVtYWxsb2MubmV0L2plbWFsbG9jLjMuaHRtbCNvcHQubWV0YWRhdGFfdGhwKQorCisg ICAgQWxsb3dpbmcgamVtYWxsb2MgdG8gdXRpbGl6ZSB0cmFuc3BhcmVudCBodWdlIHBhZ2VzIGZv ciBpdHMgaW50ZXJuYWwKKyAgICBtZXRhZGF0YSB1c3VhbGx5IHJlZHVjZXMgVExCIG1pc3NlcyBz aWduaWZpY2FudGx5LCBlc3BlY2lhbGx5IGZvciBwcm9ncmFtcworICAgIHdpdGggbGFyZ2UgbWVt b3J5IGZvb3RwcmludCBhbmQgZnJlcXVlbnQgYWxsb2NhdGlvbiAvIGRlYWxsb2NhdGlvbgorICAg IGFjdGl2aXRpZXMuICBNZXRhZGF0YSBtZW1vcnkgdXNhZ2UgbWF5IGluY3JlYXNlIGR1ZSB0byB0 aGUgdXNlIG9mIGh1Z2UKKyAgICBwYWdlcy4KKworICAgIFN1Z2dlc3RlZCBmb3IgYWxsb2NhdGlv biBpbnRlbnNpdmUgcHJvZ3JhbXM6IGBtZXRhZGF0YV90aHA6YXV0b2Agb3IKKyAgICBgbWV0YWRh dGFfdGhwOmFsd2F5c2AsIHdoaWNoIGlzIGV4cGVjdGVkIHRvIGltcHJvdmUgQ1BVIHV0aWxpemF0 aW9uIGF0IGEKKyAgICBzbWFsbCBtZW1vcnkgY29zdC4KKworKiBbZGlydHlfZGVjYXlfbXNdKGh0 dHA6Ly9qZW1hbGxvYy5uZXQvamVtYWxsb2MuMy5odG1sI29wdC5kaXJ0eV9kZWNheV9tcykgYW5k CisgIFttdXp6eV9kZWNheV9tc10oaHR0cDovL2plbWFsbG9jLm5ldC9qZW1hbGxvYy4zLmh0bWwj b3B0Lm11enp5X2RlY2F5X21zKQorCisgICAgRGVjYXkgdGltZSBkZXRlcm1pbmVzIGhvdyBmYXN0 IGplbWFsbG9jIHJldHVybnMgdW51c2VkIHBhZ2VzIGJhY2sgdG8gdGhlCisgICAgb3BlcmF0aW5n IHN5c3RlbSwgYW5kIHRoZXJlZm9yZSBwcm92aWRlcyBhIGZhaXJseSBzdHJhaWdodGZvcndhcmQg dHJhZGUtb2ZmCisgICAgYmV0d2VlbiBDUFUgYW5kIG1lbW9yeSB1c2FnZS4gIFNob3J0ZXIgZGVj YXkgdGltZSBwdXJnZXMgdW51c2VkIHBhZ2VzIGZhc3RlcgorICAgIHRvIHJlZHVjZXMgbWVtb3J5 IHVzYWdlICh1c3VhbGx5IGF0IHRoZSBjb3N0IG9mIG1vcmUgQ1BVIGN5Y2xlcyBzcGVudCBvbgor ICAgIHB1cmdpbmcpLCBhbmQgdmljZSB2ZXJzYS4KKworICAgIFN1Z2dlc3RlZDogdHVuZSB0aGUg dmFsdWVzIGJhc2VkIG9uIHRoZSBkZXNpcmVkIHRyYWRlLW9mZnMuCisKKyogW25hcmVuYXNdKGh0 dHA6Ly9qZW1hbGxvYy5uZXQvamVtYWxsb2MuMy5odG1sI29wdC5uYXJlbmFzKQorCisgICAgQnkg ZGVmYXVsdCBqZW1hbGxvYyB1c2VzIG11bHRpcGxlIGFyZW5hcyB0byByZWR1Y2UgaW50ZXJuYWwg bG9jayBjb250ZW50aW9uLgorICAgIEhvd2V2ZXIgaGlnaCBhcmVuYSBjb3VudCBtYXkgYWxzbyBp bmNyZWFzZSBvdmVyYWxsIG1lbW9yeSBmcmFnbWVudGF0aW9uLAorICAgIHNpbmNlIGFyZW5hcyBt YW5hZ2UgbWVtb3J5IGluZGVwZW5kZW50bHkuICBXaGVuIGhpZ2ggZGVncmVlIG9mIHBhcmFsbGVs aXNtCisgICAgaXMgbm90IGV4cGVjdGVkIGF0IHRoZSBhbGxvY2F0b3IgbGV2ZWwsIGxvd2VyIG51 bWJlciBvZiBhcmVuYXMgb2Z0ZW4KKyAgICBpbXByb3ZlcyBtZW1vcnkgdXNhZ2UuCisKKyAgICBT dWdnZXN0ZWQ6IGlmIGxvdyBwYXJhbGxlbGlzbSBpcyBleHBlY3RlZCwgdHJ5IGxvd2VyIGFyZW5h IGNvdW50IHdoaWxlCisgICAgbW9uaXRvcmluZyBDUFUgYW5kIG1lbW9yeSB1c2FnZS4KKworKiBb cGVyY3B1X2FyZW5hXShodHRwOi8vamVtYWxsb2MubmV0L2plbWFsbG9jLjMuaHRtbCNvcHQucGVy Y3B1X2FyZW5hKQorCisgICAgRW5hYmxlIGR5bmFtaWMgdGhyZWFkIHRvIGFyZW5hIGFzc29jaWF0 aW9uIGJhc2VkIG9uIHJ1bm5pbmcgQ1BVLiAgVGhpcyBoYXMKKyAgICB0aGUgcG90ZW50aWFsIHRv IGltcHJvdmUgbG9jYWxpdHksIGUuZy4gd2hlbiB0aHJlYWQgdG8gQ1BVIGFmZmluaXR5IGlzCisg ICAgcHJlc2VudC4KKyAgICAKKyAgICBTdWdnZXN0ZWQ6IHRyeSBgcGVyY3B1X2FyZW5hOnBlcmNw dWAgb3IgYHBlcmNwdV9hcmVuYTpwaHljcHVgIGlmCisgICAgdGhyZWFkIG1pZ3JhdGlvbiBiZXR3 ZWVuIHByb2Nlc3NvcnMgaXMgZXhwZWN0ZWQgdG8gYmUgaW5mcmVxdWVudC4KKworRXhhbXBsZXM6 CisKKyogSGlnaCByZXNvdXJjZSBjb25zdW1wdGlvbiBhcHBsaWNhdGlvbiwgcHJpb3JpdGl6aW5n IENQVSB1dGlsaXphdGlvbjoKKworICAgIGBiYWNrZ3JvdW5kX3RocmVhZDp0cnVlLG1ldGFkYXRh X3RocDphdXRvYCBjb21iaW5lZCB3aXRoIHJlbGF4ZWQgZGVjYXkgdGltZQorICAgIChpbmNyZWFz ZWQgYGRpcnR5X2RlY2F5X21zYCBhbmQgLyBvciBgbXV6enlfZGVjYXlfbXNgLAorICAgIGUuZy4g YGRpcnR5X2RlY2F5X21zOjMwMDAwLG11enp5X2RlY2F5X21zOjMwMDAwYCkuCisKKyogSGlnaCBy ZXNvdXJjZSBjb25zdW1wdGlvbiBhcHBsaWNhdGlvbiwgcHJpb3JpdGl6aW5nIG1lbW9yeSB1c2Fn ZToKKworICAgIGBiYWNrZ3JvdW5kX3RocmVhZDp0cnVlLHRjYWNoZV9tYXg6NDA5NmAgY29tYmlu ZWQgd2l0aCBzaG9ydGVyIGRlY2F5IHRpbWUKKyAgICAoZGVjcmVhc2VkIGBkaXJ0eV9kZWNheV9t c2AgYW5kIC8gb3IgYG11enp5X2RlY2F5X21zYCwKKyAgICBlLmcuIGBkaXJ0eV9kZWNheV9tczo1 MDAwLG11enp5X2RlY2F5X21zOjUwMDBgKSwgYW5kIGxvd2VyIGFyZW5hIGNvdW50CisgICAgKGUu Zy4gbnVtYmVyIG9mIENQVXMpLgorCisqIExvdyByZXNvdXJjZSBjb25zdW1wdGlvbiBhcHBsaWNh dGlvbjoKKworICAgIGBuYXJlbmFzOjEsdGNhY2hlX21heDoxMDI0YCBjb21iaW5lZCB3aXRoIHNo b3J0ZXIgZGVjYXkgdGltZSAoZGVjcmVhc2VkCisgICAgYGRpcnR5X2RlY2F5X21zYCBhbmQgLyBv ciBgbXV6enlfZGVjYXlfbXNgLGUuZy4KKyAgICBgZGlydHlfZGVjYXlfbXM6MTAwMCxtdXp6eV9k ZWNheV9tczowYCkuCisKKyogRXh0cmVtZWx5IGNvbnNlcnZhdGl2ZSAtLSBtaW5pbWl6ZSBtZW1v cnkgdXNhZ2UgYXQgYWxsIGNvc3RzLCBvbmx5IHN1aXRhYmxlIHdoZW4KK2FsbG9jYXRpb24gYWN0 aXZpdHkgaXMgdmVyeSByYXJlOgorCisgICAgYG5hcmVuYXM6MSx0Y2FjaGU6ZmFsc2UsZGlydHlf ZGVjYXlfbXM6MCxtdXp6eV9kZWNheV9tczowYAorCitOb3RlIHRoYXQgaXQgaXMgcmVjb21tZW5k ZWQgdG8gY29tYmluZSB0aGUgb3B0aW9ucyB3aXRoIGBhYm9ydF9jb25mOnRydWVgIHdoaWNoCith Ym9ydHMgaW1tZWRpYXRlbHkgb24gaWxsZWdhbCBvcHRpb25zLgorCisjIyBCZXlvbmQgcnVudGlt ZSBvcHRpb25zCisKK0luIGFkZGl0aW9uIHRvIHRoZSBydW50aW1lIG9wdGlvbnMsIHRoZXJlIGFy ZSBhIG51bWJlciBvZiBwcm9ncmFtbWF0aWMgd2F5cyB0bworaW1wcm92ZSBhcHBsaWNhdGlvbiBw ZXJmb3JtYW5jZSB3aXRoIGplbWFsbG9jLgorCisqIFtFeHBsaWNpdCBhcmVuYXNdKGh0dHA6Ly9q ZW1hbGxvYy5uZXQvamVtYWxsb2MuMy5odG1sI2FyZW5hcy5jcmVhdGUpCisKKyAgICBNYW51YWxs eSBjcmVhdGVkIGFyZW5hcyBjYW4gaGVscCBwZXJmb3JtYW5jZSBpbiB2YXJpb3VzIHdheXMsIGUu Zy4gYnkKKyAgICBtYW5hZ2luZyBsb2NhbGl0eSBhbmQgY29udGVudGlvbiBmb3Igc3BlY2lmaWMg dXNhZ2VzLiAgRm9yIGV4YW1wbGUsCisgICAgYXBwbGljYXRpb25zIGNhbiBleHBsaWNpdGx5IGFs bG9jYXRlIGZyZXF1ZW50bHkgYWNjZXNzZWQgb2JqZWN0cyBmcm9tIGEKKyAgICBkZWRpY2F0ZWQg YXJlbmEgd2l0aAorICAgIFttYWxsb2N4KCldKGh0dHA6Ly9qZW1hbGxvYy5uZXQvamVtYWxsb2Mu My5odG1sI01BTExPQ1hfQVJFTkEpIHRvIGltcHJvdmUKKyAgICBsb2NhbGl0eS4gIEluIGFkZGl0 aW9uLCBleHBsaWNpdCBhcmVuYXMgb2Z0ZW4gYmVuZWZpdCBmcm9tIGluZGl2aWR1YWxseQorICAg IHR1bmVkIG9wdGlvbnMsIGUuZy4gcmVsYXhlZCBbZGVjYXkKKyAgICB0aW1lXShodHRwOi8vamVt YWxsb2MubmV0L2plbWFsbG9jLjMuaHRtbCNhcmVuYS5pLmRpcnR5X2RlY2F5X21zKSBpZgorICAg IGZyZXF1ZW50IHJldXNlIGlzIGV4cGVjdGVkLgorCisqIFtFeHRlbnQgaG9va3NdKGh0dHA6Ly9q ZW1hbGxvYy5uZXQvamVtYWxsb2MuMy5odG1sI2FyZW5hLmkuZXh0ZW50X2hvb2tzKQorCisgICAg RXh0ZW50IGhvb2tzIGFsbG93IGN1c3RvbWl6YXRpb24gZm9yIG1hbmFnaW5nIHVuZGVybHlpbmcg bWVtb3J5LiAgT25lIHVzZQorICAgIGNhc2UgZm9yIHBlcmZvcm1hbmNlIHB1cnBvc2UgaXMgdG8g dXRpbGl6ZSBodWdlIHBhZ2VzIC0tIGZvciBleGFtcGxlLAorICAgIFtISFZNXShodHRwczovL2dp dGh1Yi5jb20vZmFjZWJvb2svaGh2bS9ibG9iL21hc3Rlci9ocGhwL3V0aWwvYWxsb2MuY3BwKQor ICAgIHVzZXMgZXhwbGljaXQgYXJlbmFzIHdpdGggY3VzdG9taXplZCBleHRlbnQgaG9va3MgdG8g bWFuYWdlIDFHQiBodWdlIHBhZ2VzCisgICAgZm9yIGZyZXF1ZW50bHkgYWNjZXNzZWQgZGF0YSwg d2hpY2ggcmVkdWNlcyBUTEIgbWlzc2VzIHNpZ25pZmljYW50bHkuCisKKyogW0V4cGxpY2l0IHRo cmVhZC10by1hcmVuYQorICBiaW5kaW5nXShodHRwOi8vamVtYWxsb2MubmV0L2plbWFsbG9jLjMu aHRtbCN0aHJlYWQuYXJlbmEpCisKKyAgICBJdCBpcyBjb21tb24gZm9yIHNvbWUgdGhyZWFkcyBp biBhbiBhcHBsaWNhdGlvbiB0byBoYXZlIGRpZmZlcmVudCBtZW1vcnkKKyAgICBhY2Nlc3MgLyBh bGxvY2F0aW9uIHBhdHRlcm5zLiAgVGhyZWFkcyB3aXRoIGhlYXZ5IHdvcmtsb2FkcyBvZnRlbiBi ZW5lZml0CisgICAgZnJvbSBleHBsaWNpdCBiaW5kaW5nLCBlLmcuIGJpbmRpbmcgdmVyeSBhY3Rp dmUgdGhyZWFkcyB0byBkZWRpY2F0ZWQgYXJlbmFzCisgICAgbWF5IHJlZHVjZSBjb250ZW50aW9u IGF0IHRoZSBhbGxvY2F0b3IgbGV2ZWwuCgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAt YnVpbGQvamVtYWxsb2MtNS4zLjAvYXV0b2dlbi5zaCBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxk L2plbWFsbG9jLTUuMy4wL2F1dG9nZW4uc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAw MDAwMC4uNzVmMzJkYQotLS0gL2Rldi9udWxsCisrKyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxk L2plbWFsbG9jLTUuMy4wL2F1dG9nZW4uc2gKQEAgLTAsMCArMSwxNyBAQAorIyEvYmluL3NoCisK K2ZvciBpIGluIGF1dG9jb25mOyBkbworICAgIGVjaG8gIiRpIgorICAgICRpCisgICAgaWYgWyAk PyAtbmUgMCBdOyB0aGVuCisJZWNobyAiRXJyb3IgJD8gaW4gJGkiCisJZXhpdCAxCisgICAgZmkK K2RvbmUKKworZWNobyAiLi9jb25maWd1cmUgLS1lbmFibGUtYXV0b2dlbiAkQCIKKy4vY29uZmln dXJlIC0tZW5hYmxlLWF1dG9nZW4gJEAKK2lmIFsgJD8gLW5lIDAgXTsgdGhlbgorICAgIGVjaG8g IkVycm9yICQ/IGluIC4vY29uZmlndXJlIgorICAgIGV4aXQgMQorZmkKCmRpZmYgLS1naXQgYS8z ODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9iaW4vamVtYWxsb2MtY29uZmln LmluIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvYmluL2plbWFsbG9j LWNvbmZpZy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MGVjYTJlCi0t LSAvZGV2L251bGwKKysrIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAv YmluL2plbWFsbG9jLWNvbmZpZy5pbgpAQCAtMCwwICsxLDgzIEBACisjIS9iaW4vc2gKKwordXNh Z2UoKSB7CisJY2F0IDw8RU9GCitVc2FnZToKKyAgQEJJTkRJUkAvamVtYWxsb2MtY29uZmlnIDxv cHRpb24+CitPcHRpb25zOgorICAtLWhlbHAgfCAtaCAgOiBQcmludCB1c2FnZS4KKyAgLS12ZXJz aW9uICAgIDogUHJpbnQgamVtYWxsb2MgdmVyc2lvbi4KKyAgLS1yZXZpc2lvbiAgIDogUHJpbnQg c2hhcmVkIGxpYnJhcnkgcmV2aXNpb24gbnVtYmVyLgorICAtLWNvbmZpZyAgICAgOiBQcmludCBj b25maWd1cmUgb3B0aW9ucyB1c2VkIHRvIGJ1aWxkIGplbWFsbG9jLgorICAtLXByZWZpeCAgICAg OiBQcmludCBpbnN0YWxsYXRpb24gZGlyZWN0b3J5IHByZWZpeC4KKyAgLS1iaW5kaXIgICAgIDog UHJpbnQgYmluYXJ5IGluc3RhbGxhdGlvbiBkaXJlY3RvcnkuCisgIC0tZGF0YWRpciAgICA6IFBy aW50IGRhdGEgaW5zdGFsbGF0aW9uIGRpcmVjdG9yeS4KKyAgLS1pbmNsdWRlZGlyIDogUHJpbnQg aW5jbHVkZSBpbnN0YWxsYXRpb24gZGlyZWN0b3J5LgorICAtLWxpYmRpciAgICAgOiBQcmludCBs aWJyYXJ5IGluc3RhbGxhdGlvbiBkaXJlY3RvcnkuCisgIC0tbWFuZGlyICAgICA6IFByaW50IG1h bnVhbCBwYWdlIGluc3RhbGxhdGlvbiBkaXJlY3RvcnkuCisgIC0tY2MgICAgICAgICA6IFByaW50 IGNvbXBpbGVyIHVzZWQgdG8gYnVpbGQgamVtYWxsb2MuCisgIC0tY2ZsYWdzICAgICA6IFByaW50 IGNvbXBpbGVyIGZsYWdzIHVzZWQgdG8gYnVpbGQgamVtYWxsb2MuCisgIC0tY3BwZmxhZ3MgICA6 IFByaW50IHByZXByb2Nlc3NvciBmbGFncyB1c2VkIHRvIGJ1aWxkIGplbWFsbG9jLgorICAtLWN4 eGZsYWdzICAgOiBQcmludCBDKysgY29tcGlsZXIgZmxhZ3MgdXNlZCB0byBidWlsZCBqZW1hbGxv Yy4KKyAgLS1sZGZsYWdzICAgIDogUHJpbnQgbGlicmFyeSBmbGFncyB1c2VkIHRvIGJ1aWxkIGpl bWFsbG9jLgorICAtLWxpYnMgICAgICAgOiBQcmludCBsaWJyYXJpZXMgamVtYWxsb2Mgd2FzIGxp bmtlZCBhZ2FpbnN0LgorRU9GCit9CisKK3ByZWZpeD0iQHByZWZpeEAiCitleGVjX3ByZWZpeD0i QGV4ZWNfcHJlZml4QCIKKworY2FzZSAiJDEiIGluCistLWhlbHAgfCAtaCkKKwl1c2FnZQorCWV4 aXQgMAorCTs7CistLXZlcnNpb24pCisJZWNobyAiQGplbWFsbG9jX3ZlcnNpb25AIgorCTs7Cist LXJldmlzaW9uKQorCWVjaG8gIkByZXZAIgorCTs7CistLWNvbmZpZykKKwllY2hvICJAQ09ORklH QCIKKwk7OworLS1wcmVmaXgpCisJZWNobyAiQFBSRUZJWEAiCisJOzsKKy0tYmluZGlyKQorCWVj aG8gIkBCSU5ESVJAIgorCTs7CistLWRhdGFkaXIpCisJZWNobyAiQERBVEFESVJAIgorCTs7Cist LWluY2x1ZGVkaXIpCisJZWNobyAiQElOQ0xVREVESVJAIgorCTs7CistLWxpYmRpcikKKwllY2hv ICJATElCRElSQCIKKwk7OworLS1tYW5kaXIpCisJZWNobyAiQE1BTkRJUkAiCisJOzsKKy0tY2Mp CisJZWNobyAiQENDQCIKKwk7OworLS1jZmxhZ3MpCisJZWNobyAiQENGTEFHU0AiCisJOzsKKy0t Y3BwZmxhZ3MpCisJZWNobyAiQENQUEZMQUdTQCIKKwk7OworLS1jeHhmbGFncykKKwllY2hvICJA Q1hYRkxBR1NAIgorCTs7CistLWxkZmxhZ3MpCisJZWNobyAiQExERkxBR1NAIEBFWFRSQV9MREZM QUdTQCIKKwk7OworLS1saWJzKQorCWVjaG8gIkBMSUJTQCIKKwk7OworKikKKwl1c2FnZQorCWV4 aXQgMQorZXNhYwoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9j LTUuMy4wL2Jpbi9qZW1hbGxvYy5zaC5pbiBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFs bG9jLTUuMy4wL2Jpbi9qZW1hbGxvYy5zaC5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwLi5jZGYzNjczCi0tLSAvZGV2L251bGwKKysrIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVp bGQvamVtYWxsb2MtNS4zLjAvYmluL2plbWFsbG9jLnNoLmluCkBAIC0wLDAgKzEsOSBAQAorIyEv YmluL3NoCisKK3ByZWZpeD1AcHJlZml4QAorZXhlY19wcmVmaXg9QGV4ZWNfcHJlZml4QAorbGli ZGlyPUBsaWJkaXJACisKK0BMRF9QUkVMT0FEX1ZBUkA9JHtsaWJkaXJ9L2xpYmplbWFsbG9jLkBT T1JFVkAKK2V4cG9ydCBATERfUFJFTE9BRF9WQVJACitleGVjICIkQCIKCmRpZmYgLS1naXQgYS8z ODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9iaW4vamVwcm9mLmluIGIvMzg5 LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvYmluL2plcHJvZi5pbgpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYmY2MjUyCi0tLSAvZGV2L251bGwKKysrIGIv Mzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvYmluL2plcHJvZi5pbgpAQCAt MCwwICsxLDU3MjMgQEAKKyMhIC91c3IvYmluL2VudiBwZXJsCisKKyMgQ29weXJpZ2h0IChjKSAx OTk4LTIwMDcsIEdvb2dsZSBJbmMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlz dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0 aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s bG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25z IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNl LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor IyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl IGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0 aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90 aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAq IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMg Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk ZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0 ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVT UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRP LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG T1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI QUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwg T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBU TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV U0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF UiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5D RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBU SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg REFNQUdFLgorCisjIC0tLQorIyBQcm9ncmFtIGZvciBwcmludGluZyB0aGUgcHJvZmlsZSBnZW5l cmF0ZWQgYnkgY29tbW9uL3Byb2ZpbGVyLmNjLAorIyBvciBieSB0aGUgaGVhcCBwcm9maWxlciAo Y29tbW9uL2RlYnVnYWxsb2NhdGlvbi5jYykKKyMKKyMgVGhlIHByb2ZpbGUgY29udGFpbnMgYSBz ZXF1ZW5jZSBvZiBlbnRyaWVzIG9mIHRoZSBmb3JtOgorIyAgICAgICA8Y291bnQ+IDxzdGFjayB0 cmFjZT4KKyMgVGhpcyBwcm9ncmFtIHBhcnNlcyB0aGUgcHJvZmlsZSwgYW5kIGdlbmVyYXRlcyB1 c2VyLXJlYWRhYmxlCisjIG91dHB1dC4KKyMKKyMgRXhhbXBsZXM6CisjCisjICUgdG9vbHMvamVw cm9mICJwcm9ncmFtIiAicHJvZmlsZSIKKyMgICBFbnRlcnMgImludGVyYWN0aXZlIiBtb2RlCisj CisjICUgdG9vbHMvamVwcm9mIC0tdGV4dCAicHJvZ3JhbSIgInByb2ZpbGUiCisjICAgR2VuZXJh dGVzIG9uZSBsaW5lIHBlciBwcm9jZWR1cmUKKyMKKyMgJSB0b29scy9qZXByb2YgLS1ndiAicHJv Z3JhbSIgInByb2ZpbGUiCisjICAgR2VuZXJhdGVzIGFubm90YXRlZCBjYWxsLWdyYXBoIGFuZCBk aXNwbGF5cyB2aWEgImd2IgorIworIyAlIHRvb2xzL2plcHJvZiAtLWd2IC0tZm9jdXM9TXV0ZXgg InByb2dyYW0iICJwcm9maWxlIgorIyAgIFJlc3RyaWN0IHRvIGNvZGUgcGF0aHMgdGhhdCBpbnZv bHZlIGFuIGVudHJ5IHRoYXQgbWF0Y2hlcyAiTXV0ZXgiCisjCisjICUgdG9vbHMvamVwcm9mIC0t Z3YgLS1mb2N1cz1NdXRleCAtLWlnbm9yZT1zdHJpbmcgInByb2dyYW0iICJwcm9maWxlIgorIyAg IFJlc3RyaWN0IHRvIGNvZGUgcGF0aHMgdGhhdCBpbnZvbHZlIGFuIGVudHJ5IHRoYXQgbWF0Y2hl cyAiTXV0ZXgiCisjICAgYW5kIGRvZXMgbm90IG1hdGNoICJzdHJpbmciCisjCisjICUgdG9vbHMv amVwcm9mIC0tbGlzdD1JQkZfQ2hlY2tEb2NpZCAicHJvZ3JhbSIgInByb2ZpbGUiCisjICAgR2Vu ZXJhdGVzIGRpc2Fzc2VtYmx5IGxpc3Rpbmcgb2YgYWxsIHJvdXRpbmVzIHdpdGggYXQgbGVhc3Qg b25lCisjICAgc2FtcGxlIHRoYXQgbWF0Y2ggdGhlIC0tbGlzdD08cmVnZXhwPiBwYXR0ZXJuLiAg VGhlIGxpc3RpbmcgaXMKKyMgICBhbm5vdGF0ZWQgd2l0aCB0aGUgZmxhdCBhbmQgY3VtdWxhdGl2 ZSBzYW1wbGUgY291bnRzIGF0IGVhY2ggbGluZS4KKyMKKyMgJSB0b29scy9qZXByb2YgLS1kaXNh c209SUJGX0NoZWNrRG9jaWQgInByb2dyYW0iICJwcm9maWxlIgorIyAgIEdlbmVyYXRlcyBkaXNh c3NlbWJseSBsaXN0aW5nIG9mIGFsbCByb3V0aW5lcyB3aXRoIGF0IGxlYXN0IG9uZQorIyAgIHNh bXBsZSB0aGF0IG1hdGNoIHRoZSAtLWRpc2FzbT08cmVnZXhwPiBwYXR0ZXJuLiAgVGhlIGxpc3Rp bmcgaXMKKyMgICBhbm5vdGF0ZWQgd2l0aCB0aGUgZmxhdCBhbmQgY3VtdWxhdGl2ZSBzYW1wbGUg Y291bnRzIGF0IGVhY2ggUEMgdmFsdWUuCisjCisjIFRPRE86IFVzZSBjb2xvciB0byBpbmRpY2F0 ZSBmaWxlcz8KKwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5nczsKK3VzZSBHZXRvcHQ6Okxvbmc7 Cit1c2UgQ3dkOworCitteSAkSkVQUk9GX1ZFUlNJT04gPSAiQGplbWFsbG9jX3ZlcnNpb25AIjsK K215ICRQUFJPRl9WRVJTSU9OID0gIjIuMCI7CisKKyMgVGhlc2UgYXJlIHRoZSBvYmplY3QgdG9v bHMgd2UgdXNlIHdoaWNoIGNhbiBjb21lIGZyb20gYQorIyB1c2VyLXNwZWNpZmllZCBsb2NhdGlv biB1c2luZyAtLXRvb2xzLCBmcm9tIHRoZSBKRVBST0ZfVE9PTFMKKyMgZW52aXJvbm1lbnQgdmFy aWFibGUsIG9yIGZyb20gdGhlIGVudmlyb25tZW50LgorbXkgJW9ial90b29sX21hcCA9ICgKKyAg Im9iamR1bXAiID0+ICJvYmpkdW1wIiwKKyAgIm5tIiA9PiAibm0iLAorICAiYWRkcjJsaW5lIiA9 PiAiYWRkcjJsaW5lIiwKKyAgImMrK2ZpbHQiID0+ICJjKytmaWx0IiwKKyAgIyMgQ29uZmlndXJl T2JqVG9vbHMgbWF5IGFkZCBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgZW50cmllczoKKyAgIyJubV9w ZGIiID0+ICJubS1wZGIiLCAgICAgICAjIGZvciByZWFkaW5nIHdpbmRvd3MgKFBEQi1mb3JtYXQp IGV4ZWN1dGFibGVzCisgICMiYWRkcjJsaW5lX3BkYiIgPT4gImFkZHIybGluZS1wZGIiLCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBkaXR0bworICAjIm90b29sIiA9PiAib3Rvb2wi LCAgICAgICAgICMgZXF1aXZhbGVudCBvZiBvYmpkdW1wIG9uIE9TIFgKKyk7CisjIE5PVEU6IHRo ZXNlIGFyZSBsaXN0cywgc28geW91IGNhbiBwdXQgaW4gY29tbWFuZGxpbmUgZmxhZ3MgaWYgeW91 IHdhbnQuCitteSBARE9UID0gKCJkb3QiKTsgICAgICAgICAgIyBsZWF2ZSBub24tYWJzb2x1dGUs IHNpbmNlIGl0IG1heSBiZSBpbiAvdXNyL2xvY2FsCitteSBAR1YgPSAoImd2Iik7CitteSBARVZJ TkNFID0gKCJldmluY2UiKTsgICAgIyBjb3VsZCBhbHNvIGJlIHhwZGYgb3IgcGVyaGFwcyBhY3Jv cmVhZAorbXkgQEtDQUNIRUdSSU5EID0gKCJrY2FjaGVncmluZCIpOworbXkgQFBTMlBERiA9ICgi cHMycGRmIik7CisjIFRoZXNlIGFyZSB1c2VkIGZvciBkeW5hbWljIHByb2ZpbGVzCitteSBAVVJM X0ZFVENIRVIgPSAoImN1cmwiLCAiLXMiLCAiLS1mYWlsIik7CisKKyMgVGhlc2UgYXJlIHRoZSB3 ZWIgcGFnZXMgdGhhdCBzZXJ2ZXJzIG5lZWQgdG8gc3VwcG9ydCBmb3IgZHluYW1pYyBwcm9maWxl cworbXkgJEhFQVBfUEFHRSA9ICIvcHByb2YvaGVhcCI7CitteSAkUFJPRklMRV9QQUdFID0gIi9w cHJvZi9wcm9maWxlIjsgICAjIG11c3Qgc3VwcG9ydCBjZ2ktcGFyYW0gIj9zZWNvbmRzPSMiCitt eSAkUE1VUFJPRklMRV9QQUdFID0gIi9wcHJvZi9wbXVwcm9maWxlKD86XFw/LiopPyI7ICMgbXVz dCBzdXBwb3J0IGNnaS1wYXJhbQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIyA/c2Vjb25kcz0jJmV2ZW50PXgmcGVyaW9kPW4KK215ICRHUk9XVEhfUEFH RSA9ICIvcHByb2YvZ3Jvd3RoIjsKK215ICRDT05URU5USU9OX1BBR0UgPSAiL3Bwcm9mL2NvbnRl bnRpb24iOworbXkgJFdBTExfUEFHRSA9ICIvcHByb2Yvd2FsbCg/OlxcPy4qKT8iOyAgIyBhY2Nl cHRzIG9wdGlvbnMgbGlrZSBuYW1lZmlsdGVyCitteSAkRklMVEVSRURQUk9GSUxFX1BBR0UgPSAi L3Bwcm9mL2ZpbHRlcmVkcHJvZmlsZSg/OlxcPy4qKT8iOworbXkgJENFTlNVU1BST0ZJTEVfUEFH RSA9ICIvcHByb2YvY2Vuc3VzcHJvZmlsZSg/OlxcPy4qKT8iOyAjIG11c3Qgc3VwcG9ydCBjZ2kt cGFyYW0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAjICI/c2Vjb25kcz0jIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAjICI/dGFnc19yZWdleHA9IyIgYW5kCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAiP3R5cGU9IyIuCitt eSAkU1lNQk9MX1BBR0UgPSAiL3Bwcm9mL3N5bWJvbCI7ICAgICAjIG11c3Qgc3VwcG9ydCBzeW1i b2wgbG9va3VwIHZpYSBQT1NUCitteSAkUFJPR1JBTV9OQU1FX1BBR0UgPSAiL3Bwcm9mL2NtZGxp bmUiOworCisjIFRoZXNlIGFyZSB0aGUgd2ViIHBhZ2VzIHRoYXQgY2FuIGJlIG5hbWVkIG9uIHRo ZSBjb21tYW5kIGxpbmUuCisjIEFsbCB0aGUgYWx0ZXJuYXRpdmVzIG11c3QgYmVnaW4gd2l0aCAv LgorbXkgJFBST0ZJTEVTID0gIigkSEVBUF9QQUdFfCRQUk9GSUxFX1BBR0V8JFBNVVBST0ZJTEVf UEFHRXwiIC4KKyAgICAgICAgICAgICAgICIkR1JPV1RIX1BBR0V8JENPTlRFTlRJT05fUEFHRXwk V0FMTF9QQUdFfCIgLgorICAgICAgICAgICAgICAgIiRGSUxURVJFRFBST0ZJTEVfUEFHRXwkQ0VO U1VTUFJPRklMRV9QQUdFKSI7CisKKyMgZGVmYXVsdCBiaW5hcnkgbmFtZQorbXkgJFVOS05PV05f QklOQVJZID0gIih1bmtub3duKSI7CisKKyMgVGhlcmUgaXMgYSBwZXJ2YXNpdmUgZGVwZW5kZW5j eSBvbiB0aGUgbGVuZ3RoIChpbiBoZXggY2hhcmFjdGVycywKKyMgaS5lLiwgbmliYmxlcykgb2Yg YW4gYWRkcmVzcywgZGlzdGluZ3Vpc2hpbmcgYmV0d2VlbiAzMi1iaXQgYW5kCisjIDY0LWJpdCBw cm9maWxlcy4gIFRvIGVyciBvbiB0aGUgc2FmZSBzaXplLCBkZWZhdWx0IHRvIDY0LWJpdCBoZXJl OgorbXkgJGFkZHJlc3NfbGVuZ3RoID0gMTY7CisKK215ICRkZXZfbnVsbCA9ICIvZGV2L251bGwi OworaWYgKCEgLWUgJGRldl9udWxsICYmICReTyA9fiAvTVNXaW4vKSB7ICAgICMgJF5PIGlzIHRo ZSBPUyBwZXJsIHdhcyBidWlsdCBmb3IKKyAgJGRldl9udWxsID0gIm51bCI7Cit9CisKKyMgQSBs aXN0IG9mIHBhdGhzIHRvIHNlYXJjaCBmb3Igc2hhcmVkIG9iamVjdCBmaWxlcworbXkgQHByZWZp eF9saXN0ID0gKCk7CisKKyMgU3BlY2lhbCByb3V0aW5lIG5hbWUgdGhhdCBzaG91bGQgbm90IGhh dmUgYW55IHN5bWJvbHMuCisjIFVzZWQgYXMgc2VwYXJhdG9yIHRvIHBhcnNlICJhZGRyMmxpbmUg LWkiIG91dHB1dC4KK215ICRzZXBfc3ltYm9sID0gJ19maW5pJzsKK215ICRzZXBfYWRkcmVzcyA9 IHVuZGVmOworCisjIyMjIyBBcmd1bWVudCBwYXJzaW5nICMjIyMjCisKK3N1YiB1c2FnZV9zdHJp bmcgeworICByZXR1cm4gPDxFT0Y7CitVc2FnZToKK2plcHJvZiBbb3B0aW9uc10gPHByb2dyYW0+ IDxwcm9maWxlcz4KKyAgIDxwcm9maWxlcz4gaXMgYSBzcGFjZSBzZXBhcmF0ZWQgbGlzdCBvZiBw cm9maWxlIG5hbWVzLgoramVwcm9mIFtvcHRpb25zXSA8c3ltYm9saXplZC1wcm9maWxlcz4KKyAg IDxzeW1ib2xpemVkLXByb2ZpbGVzPiBpcyBhIGxpc3Qgb2YgcHJvZmlsZSBmaWxlcyB3aGVyZSBl YWNoIGZpbGUgY29udGFpbnMKKyAgIHRoZSBuZWNlc3Nhcnkgc3ltYm9sIG1hcHBpbmdzICBhcyB3 ZWxsIGFzIHByb2ZpbGUgZGF0YSAobGlrZWx5IGdlbmVyYXRlZAorICAgd2l0aCAtLXJhdykuCitq ZXByb2YgW29wdGlvbnNdIDxwcm9maWxlPgorICAgPHByb2ZpbGU+IGlzIGEgcmVtb3RlIGZvcm0u ICBTeW1ib2xzIGFyZSBvYnRhaW5lZCBmcm9tIGhvc3Q6cG9ydCRTWU1CT0xfUEFHRQorCisgICBF YWNoIG5hbWUgY2FuIGJlOgorICAgL3BhdGgvdG8vcHJvZmlsZSAgICAgICAgLSBhIHBhdGggdG8g YSBwcm9maWxlIGZpbGUKKyAgIGhvc3Q6cG9ydFsvPHNlcnZpY2U+XSAgIC0gYSBsb2NhdGlvbiBv ZiBhIHNlcnZpY2UgdG8gZ2V0IHByb2ZpbGUgZnJvbQorCisgICBUaGUgLzxzZXJ2aWNlPiBjYW4g YmUgJEhFQVBfUEFHRSwgJFBST0ZJTEVfUEFHRSwgL3Bwcm9mL3BtdXByb2ZpbGUsCisgICAgICAg ICAgICAgICAgICAgICAgICAgJEdST1dUSF9QQUdFLCAkQ09OVEVOVElPTl9QQUdFLCAvcHByb2Yv d2FsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAkQ0VOU1VTUFJPRklMRV9QQUdFLCBvciAv cHByb2YvZmlsdGVyZWRwcm9maWxlLgorICAgRm9yIGluc3RhbmNlOgorICAgICBqZXByb2YgaHR0 cDovL215c2VydmVyLmNvbTo4MCRIRUFQX1BBR0UKKyAgIElmIC88c2VydmljZT4gaXMgb21pdHRl ZCwgdGhlIHNlcnZpY2UgZGVmYXVsdHMgdG8gJFBST0ZJTEVfUEFHRSAoY3B1IHByb2ZpbGluZyku CitqZXByb2YgLS1zeW1ib2xzIDxwcm9ncmFtPgorICAgTWFwcyBhZGRyZXNzZXMgdG8gc3ltYm9s IG5hbWVzLiAgSW4gdGhpcyBtb2RlLCBzdGRpbiBzaG91bGQgYmUgYQorICAgbGlzdCBvZiBsaWJy YXJ5IG1hcHBpbmdzLCBpbiB0aGUgc2FtZSBmb3JtYXQgYXMgaXMgZm91bmQgaW4gdGhlIGhlYXAt CisgICBhbmQgY3B1LXByb2ZpbGUgZmlsZXMgKHRoaXMgbG9vc2VseSBtYXRjaGVzIHRoYXQgb2Yg L3Byb2Mvc2VsZi9tYXBzCisgICBvbiBsaW51eCksIGZvbGxvd2VkIGJ5IGEgbGlzdCBvZiBoZXgg YWRkcmVzc2VzIHRvIG1hcCwgb25lIHBlciBsaW5lLgorCisgICBGb3IgbW9yZSBoZWxwIHdpdGgg cXVlcnlpbmcgcmVtb3RlIHNlcnZlcnMsIGluY2x1ZGluZyBob3cgdG8gYWRkIHRoZQorICAgbmVj ZXNzYXJ5IHNlcnZlci1zaWRlIHN1cHBvcnQgY29kZSwgc2VlIHRoaXMgZmlsZW5hbWUgKG9yIG9u ZSBsaWtlIGl0KToKKworICAgL3Vzci9kb2MvZ3BlcmZ0b29scy0kUFBST0ZfVkVSU0lPTi9wcHJv Zl9yZW1vdGVfc2VydmVycy5odG1sCisKK09wdGlvbnM6CisgICAtLWN1bSAgICAgICAgICAgICAg IFNvcnQgYnkgY3VtdWxhdGl2ZSBkYXRhCisgICAtLWJhc2U9PGJhc2U+ICAgICAgIFN1YnRyYWN0 IDxiYXNlPiBmcm9tIDxwcm9maWxlPiBiZWZvcmUgZGlzcGxheQorICAgLS1pbnRlcmFjdGl2ZSAg ICAgICBSdW4gaW4gaW50ZXJhY3RpdmUgbW9kZSAoaW50ZXJhY3RpdmUgImhlbHAiIGdpdmVzIGhl bHApIFtkZWZhdWx0XQorICAgLS1zZWNvbmRzPTxuPiAgICAgICBMZW5ndGggb2YgdGltZSBmb3Ig ZHluYW1pYyBwcm9maWxlcyBbZGVmYXVsdD0zMCBzZWNzXQorICAgLS1hZGRfbGliPTxmaWxlPiAg ICBSZWFkIGFkZGl0aW9uYWwgc3ltYm9scyBhbmQgbGluZSBpbmZvIGZyb20gdGhlIGdpdmVuIGxp YnJhcnkKKyAgIC0tbGliX3ByZWZpeD08ZGlyPiAgQ29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgbGli cmFyeSBwYXRoIHByZWZpeGVzCisKK1JlcG9ydGluZyBHcmFudWxhcml0eToKKyAgIC0tYWRkcmVz c2VzICAgICAgICAgUmVwb3J0IGF0IGFkZHJlc3MgbGV2ZWwKKyAgIC0tbGluZXMgICAgICAgICAg ICAgUmVwb3J0IGF0IHNvdXJjZSBsaW5lIGxldmVsCisgICAtLWZ1bmN0aW9ucyAgICAgICAgIFJl cG9ydCBhdCBmdW5jdGlvbiBsZXZlbCBbZGVmYXVsdF0KKyAgIC0tZmlsZXMgICAgICAgICAgICAg UmVwb3J0IGF0IHNvdXJjZSBmaWxlIGxldmVsCisKK091dHB1dCB0eXBlOgorICAgLS10ZXh0ICAg ICAgICAgICAgICBHZW5lcmF0ZSB0ZXh0IHJlcG9ydAorICAgLS1jYWxsZ3JpbmQgICAgICAgICBH ZW5lcmF0ZSBjYWxsZ3JpbmQgZm9ybWF0IHRvIHN0ZG91dAorICAgLS1ndiAgICAgICAgICAgICAg ICBHZW5lcmF0ZSBQb3N0c2NyaXB0IGFuZCBkaXNwbGF5CisgICAtLWV2aW5jZSAgICAgICAgICAg IEdlbmVyYXRlIFBERiBhbmQgZGlzcGxheQorICAgLS13ZWIgICAgICAgICAgICAgICBHZW5lcmF0 ZSBTVkcgYW5kIGRpc3BsYXkKKyAgIC0tbGlzdD08cmVnZXhwPiAgICAgR2VuZXJhdGUgc291cmNl IGxpc3Rpbmcgb2YgbWF0Y2hpbmcgcm91dGluZXMKKyAgIC0tZGlzYXNtPTxyZWdleHA+ICAgR2Vu ZXJhdGUgZGlzYXNzZW1ibHkgb2YgbWF0Y2hpbmcgcm91dGluZXMKKyAgIC0tc3ltYm9scyAgICAg ICAgICAgUHJpbnQgZGVtYW5nbGVkIHN5bWJvbCBuYW1lcyBmb3VuZCBhdCBnaXZlbiBhZGRyZXNz ZXMKKyAgIC0tZG90ICAgICAgICAgICAgICAgR2VuZXJhdGUgRE9UIGZpbGUgdG8gc3Rkb3V0Cisg ICAtLXBzICAgICAgICAgICAgICAgIEdlbmVyYXRlIFBvc3RjcmlwdCB0byBzdGRvdXQKKyAgIC0t cGRmICAgICAgICAgICAgICAgR2VuZXJhdGUgUERGIHRvIHN0ZG91dAorICAgLS1zdmcgICAgICAg ICAgICAgICBHZW5lcmF0ZSBTVkcgdG8gc3Rkb3V0CisgICAtLWdpZiAgICAgICAgICAgICAgIEdl bmVyYXRlIEdJRiB0byBzdGRvdXQKKyAgIC0tcmF3ICAgICAgICAgICAgICAgR2VuZXJhdGUgc3lt Ym9saXplZCBqZXByb2YgZGF0YSAodXNlZnVsIHdpdGggcmVtb3RlIGZldGNoKQorICAgLS1jb2xs YXBzZWQgICAgICAgICBHZW5lcmF0ZSBjb2xsYXBzZWQgc3RhY2tzIGZvciBidWlsZGluZyBmbGFt ZSBncmFwaHMKKyAgICAgICAgICAgICAgICAgICAgICAgKHNlZSBodHRwOi8vd3d3LmJyZW5kYW5n cmVnZy5jb20vZmxhbWVncmFwaHMuaHRtbCkKKworSGVhcC1Qcm9maWxlIE9wdGlvbnM6CisgICAt LWludXNlX3NwYWNlICAgICAgIERpc3BsYXkgaW4tdXNlIChtZWdhKWJ5dGVzIFtkZWZhdWx0XQor ICAgLS1pbnVzZV9vYmplY3RzICAgICBEaXNwbGF5IGluLXVzZSBvYmplY3RzCisgICAtLWFsbG9j X3NwYWNlICAgICAgIERpc3BsYXkgYWxsb2NhdGVkIChtZWdhKWJ5dGVzCisgICAtLWFsbG9jX29i amVjdHMgICAgIERpc3BsYXkgYWxsb2NhdGVkIG9iamVjdHMKKyAgIC0tc2hvd19ieXRlcyAgICAg ICAgRGlzcGxheSBzcGFjZSBpbiBieXRlcworICAgLS1kcm9wX25lZ2F0aXZlICAgICBJZ25vcmUg bmVnYXRpdmUgZGlmZmVyZW5jZXMKKworQ29udGVudGlvbi1wcm9maWxlIG9wdGlvbnM6CisgICAt LXRvdGFsX2RlbGF5ICAgICAgIERpc3BsYXkgdG90YWwgZGVsYXkgYXQgZWFjaCByZWdpb24gW2Rl ZmF1bHRdCisgICAtLWNvbnRlbnRpb25zICAgICAgIERpc3BsYXkgbnVtYmVyIG9mIGRlbGF5cyBh dCBlYWNoIHJlZ2lvbgorICAgLS1tZWFuX2RlbGF5ICAgICAgICBEaXNwbGF5IG1lYW4gZGVsYXkg YXQgZWFjaCByZWdpb24KKworQ2FsbC1ncmFwaCBPcHRpb25zOgorICAgLS1ub2RlY291bnQ9PG4+ ICAgICBTaG93IGF0IG1vc3Qgc28gbWFueSBub2RlcyBbZGVmYXVsdD04MF0KKyAgIC0tbm9kZWZy YWN0aW9uPTxmPiAgSGlkZSBub2RlcyBiZWxvdyA8Zj4qdG90YWwgW2RlZmF1bHQ9LjAwNV0KKyAg IC0tZWRnZWZyYWN0aW9uPTxmPiAgSGlkZSBlZGdlcyBiZWxvdyA8Zj4qdG90YWwgW2RlZmF1bHQ9 LjAwMV0KKyAgIC0tbWF4ZGVncmVlPTxuPiAgICAgTWF4IGluY29taW5nL291dGdvaW5nIGVkZ2Vz IHBlciBub2RlIFtkZWZhdWx0PThdCisgICAtLWZvY3VzPTxyZWdleHA+ICAgIEZvY3VzIG9uIGJh Y2t0cmFjZXMgd2l0aCBub2RlcyBtYXRjaGluZyA8cmVnZXhwPgorICAgLS10aHJlYWQ9PG4+ICAg ICAgICBTaG93IHByb2ZpbGUgZm9yIHRocmVhZCA8bj4KKyAgIC0taWdub3JlPTxyZWdleHA+ICAg SWdub3JlIGJhY2t0cmFjZXMgd2l0aCBub2RlcyBtYXRjaGluZyA8cmVnZXhwPgorICAgLS1zY2Fs ZT08bj4gICAgICAgICBTZXQgR1Ygc2NhbGluZyBbZGVmYXVsdD0wXQorICAgLS1oZWFwY2hlY2sg ICAgICAgICBNYWtlIG5vZGVzIHdpdGggbm9uLTAgb2JqZWN0IGNvdW50cworICAgICAgICAgICAg ICAgICAgICAgICAoaS5lLiBkaXJlY3QgbGVhayBnZW5lcmF0b3JzKSBtb3JlIHZpc2libGUKKyAg IC0tcmV0YWluPTxyZWdleHA+ICAgUmV0YWluIG9ubHkgbm9kZXMgdGhhdCBtYXRjaCA8cmVnZXhw PgorICAgLS1leGNsdWRlPTxyZWdleHA+ICBFeGNsdWRlIGFsbCBub2RlcyB0aGF0IG1hdGNoIDxy ZWdleHA+CisKK01pc2NlbGxhbmVvdXM6CisgICAtLXRvb2xzPTxwcmVmaXggb3IgYmluYXJ5OmZ1 bGxwYXRoPlssLi4uXSAgIFwkUEFUSCBmb3Igb2JqZWN0IHRvb2wgcGF0aG5hbWVzCisgICAtLXRl c3QgICAgICAgICAgICAgIFJ1biB1bml0IHRlc3RzCisgICAtLWhlbHAgICAgICAgICAgICAgIFRo aXMgbWVzc2FnZQorICAgLS12ZXJzaW9uICAgICAgICAgICBWZXJzaW9uIGluZm9ybWF0aW9uCisg ICAtLWRlYnVnLXN5bXMtYnktaWQgIChMaW51eCBvbmx5KSBGaW5kIGRlYnVnIHN5bWJvbCBmaWxl cyBieSBidWlsZCBJRCBhcyB3ZWxsIGFzIGJ5IG5hbWUKKworRW52aXJvbm1lbnQgVmFyaWFibGVz OgorICAgSkVQUk9GX1RNUERJUiAgICAgICAgUHJvZmlsZXMgZGlyZWN0b3J5LiBEZWZhdWx0cyB0 byBcJEhPTUUvamVwcm9mCisgICBKRVBST0ZfVE9PTFMgICAgICAgICBQcmVmaXggZm9yIG9iamVj dCB0b29scyBwYXRobmFtZXMKKworRXhhbXBsZXM6CisKK2plcHJvZiAvYmluL2xzIGxzLnByb2YK KyAgICAgICAgICAgICAgICAgICAgICAgRW50ZXJzICJpbnRlcmFjdGl2ZSIgbW9kZQoramVwcm9m IC0tdGV4dCAvYmluL2xzIGxzLnByb2YKKyAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0cyBv bmUgbGluZSBwZXIgcHJvY2VkdXJlCitqZXByb2YgLS13ZWIgL2Jpbi9scyBscy5wcm9mCisgICAg ICAgICAgICAgICAgICAgICAgIERpc3BsYXlzIGFubm90YXRlZCBjYWxsLWdyYXBoIGluIHdlYiBi cm93c2VyCitqZXByb2YgLS1ndiAvYmluL2xzIGxzLnByb2YKKyAgICAgICAgICAgICAgICAgICAg ICAgRGlzcGxheXMgYW5ub3RhdGVkIGNhbGwtZ3JhcGggdmlhICdndicKK2plcHJvZiAtLWd2IC0t Zm9jdXM9TXV0ZXggL2Jpbi9scyBscy5wcm9mCisgICAgICAgICAgICAgICAgICAgICAgIFJlc3Ry aWN0cyB0byBjb2RlIHBhdGhzIGluY2x1ZGluZyBhIC4qTXV0ZXguKiBlbnRyeQoramVwcm9mIC0t Z3YgLS1mb2N1cz1NdXRleCAtLWlnbm9yZT1zdHJpbmcgL2Jpbi9scyBscy5wcm9mCisgICAgICAg ICAgICAgICAgICAgICAgIENvZGUgcGF0aHMgaW5jbHVkaW5nIE11dGV4IGJ1dCBub3Qgc3RyaW5n CitqZXByb2YgLS1saXN0PWdldGRpciAvYmluL2xzIGxzLnByb2YKKyAgICAgICAgICAgICAgICAg ICAgICAgKFBlci1saW5lKSBhbm5vdGF0ZWQgc291cmNlIGxpc3RpbmcgZm9yIGdldGRpcigpCitq ZXByb2YgLS1kaXNhc209Z2V0ZGlyIC9iaW4vbHMgbHMucHJvZgorICAgICAgICAgICAgICAgICAg ICAgICAoUGVyLVBDKSBhbm5vdGF0ZWQgZGlzYXNzZW1ibHkgZm9yIGdldGRpcigpCisKK2plcHJv ZiBodHRwOi8vbG9jYWxob3N0OjEyMzQvCisgICAgICAgICAgICAgICAgICAgICAgIEVudGVycyAi aW50ZXJhY3RpdmUiIG1vZGUKK2plcHJvZiAtLXRleHQgbG9jYWxob3N0OjEyMzQKKyAgICAgICAg ICAgICAgICAgICAgICAgT3V0cHV0cyBvbmUgbGluZSBwZXIgcHJvY2VkdXJlIGZvciBsb2NhbGhv c3Q6MTIzNAoramVwcm9mIC0tcmF3IGxvY2FsaG9zdDoxMjM0ID4gLi9sb2NhbC5yYXcKK2plcHJv ZiAtLXRleHQgLi9sb2NhbC5yYXcKKyAgICAgICAgICAgICAgICAgICAgICAgRmV0Y2hlcyBhIHJl bW90ZSBwcm9maWxlIGZvciBsYXRlciBhbmFseXNpcyBhbmQgdGhlbgorICAgICAgICAgICAgICAg ICAgICAgICBhbmFseXplcyBpdCBpbiB0ZXh0IG1vZGUuCitFT0YKK30KKworc3ViIHZlcnNpb25f c3RyaW5nIHsKKyAgcmV0dXJuIDw8RU9GCitqZXByb2YgKHBhcnQgb2YgamVtYWxsb2MgJEpFUFJP Rl9WRVJTSU9OKQorYmFzZWQgb24gcHByb2YgKHBhcnQgb2YgZ3BlcmZ0b29scyAkUFBST0ZfVkVS U0lPTikKKworQ29weXJpZ2h0IDE5OTgtMjAwNyBHb29nbGUgSW5jLgorCitUaGlzIGlzIEJTRCBs aWNlbnNlZCBzb2Z0d2FyZTsgc2VlIHRoZSBzb3VyY2UgZm9yIGNvcHlpbmcgY29uZGl0aW9ucwor YW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24uCitUaGVyZSBpcyBOTyB3YXJyYW50eTsgbm90IGV2ZW4g Zm9yIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCitQQVJUSUNVTEFSIFBVUlBPU0Uu CitFT0YKK30KKworc3ViIHVzYWdlIHsKKyAgbXkgJG1zZyA9IHNoaWZ0OworICBwcmludCBTVERF UlIgIiRtc2dcblxuIjsKKyAgcHJpbnQgU1RERVJSIHVzYWdlX3N0cmluZygpOworICBwcmludCBT VERFUlIgIlxuRkFUQUwgRVJST1I6ICRtc2dcbiI7ICAgICMganVzdCBhcyBhIHJlbWluZGVyCisg IGV4aXQoMSk7Cit9CisKK3N1YiBJbml0KCkgeworICAjIFNldHVwIHRtcC1maWxlIG5hbWUgYW5k IGhhbmRsZXIgdG8gY2xlYW4gaXQgdXAuCisgICMgV2UgZG8gdGhpcyBpbiB0aGUgdmVyeSBiZWdp bm5pbmcgc28gdGhhdCB3ZSBjYW4gdXNlCisgICMgZXJyb3IoKSBhbmQgY2xlYW51cCgpIGZ1bmN0 aW9uIGFueXRpbWUgaGVyZSBhZnRlci4KKyAgJG1haW46OnRtcGZpbGVfc3ltID0gIi90bXAvamVw cm9mJCQuc3ltIjsKKyAgJG1haW46OnRtcGZpbGVfcHMgPSAiL3RtcC9qZXByb2YkJCI7CisgICRt YWluOjpuZXh0X3RtcGZpbGUgPSAwOworICAkU0lHeydJTlQnfSA9IFwmc2lnaGFuZGxlcjsKKwor ICAjIENhY2hlIGZyb20gZmlsZW5hbWUvbGluZW51bWJlciB0byBzb3VyY2UgY29kZQorICAkbWFp bjo6c291cmNlX2NhY2hlID0gKCk7CisKKyAgJG1haW46Om9wdF9oZWxwID0gMDsKKyAgJG1haW46 Om9wdF92ZXJzaW9uID0gMDsKKworICAkbWFpbjo6b3B0X2N1bSA9IDA7CisgICRtYWluOjpvcHRf YmFzZSA9ICcnOworICAkbWFpbjo6b3B0X2FkZHJlc3NlcyA9IDA7CisgICRtYWluOjpvcHRfbGlu ZXMgPSAwOworICAkbWFpbjo6b3B0X2Z1bmN0aW9ucyA9IDA7CisgICRtYWluOjpvcHRfZmlsZXMg PSAwOworICAkbWFpbjo6b3B0X2xpYl9wcmVmaXggPSAiIjsKKworICAkbWFpbjo6b3B0X3RleHQg PSAwOworICAkbWFpbjo6b3B0X2NhbGxncmluZCA9IDA7CisgICRtYWluOjpvcHRfbGlzdCA9ICIi OworICAkbWFpbjo6b3B0X2Rpc2FzbSA9ICIiOworICAkbWFpbjo6b3B0X3N5bWJvbHMgPSAwOwor ICAkbWFpbjo6b3B0X2d2ID0gMDsKKyAgJG1haW46Om9wdF9ldmluY2UgPSAwOworICAkbWFpbjo6 b3B0X3dlYiA9IDA7CisgICRtYWluOjpvcHRfZG90ID0gMDsKKyAgJG1haW46Om9wdF9wcyA9IDA7 CisgICRtYWluOjpvcHRfcGRmID0gMDsKKyAgJG1haW46Om9wdF9naWYgPSAwOworICAkbWFpbjo6 b3B0X3N2ZyA9IDA7CisgICRtYWluOjpvcHRfcmF3ID0gMDsKKyAgJG1haW46Om9wdF9jb2xsYXBz ZWQgPSAwOworCisgICRtYWluOjpvcHRfbm9kZWNvdW50ID0gODA7CisgICRtYWluOjpvcHRfbm9k ZWZyYWN0aW9uID0gMC4wMDU7CisgICRtYWluOjpvcHRfZWRnZWZyYWN0aW9uID0gMC4wMDE7Cisg ICRtYWluOjpvcHRfbWF4ZGVncmVlID0gODsKKyAgJG1haW46Om9wdF9mb2N1cyA9ICcnOworICAk bWFpbjo6b3B0X3RocmVhZCA9IHVuZGVmOworICAkbWFpbjo6b3B0X2lnbm9yZSA9ICcnOworICAk bWFpbjo6b3B0X3NjYWxlID0gMDsKKyAgJG1haW46Om9wdF9oZWFwY2hlY2sgPSAwOworICAkbWFp bjo6b3B0X3JldGFpbiA9ICcnOworICAkbWFpbjo6b3B0X2V4Y2x1ZGUgPSAnJzsKKyAgJG1haW46 Om9wdF9zZWNvbmRzID0gMzA7CisgICRtYWluOjpvcHRfbGliID0gIiI7CisKKyAgJG1haW46Om9w dF9pbnVzZV9zcGFjZSAgID0gMDsKKyAgJG1haW46Om9wdF9pbnVzZV9vYmplY3RzID0gMDsKKyAg JG1haW46Om9wdF9hbGxvY19zcGFjZSAgID0gMDsKKyAgJG1haW46Om9wdF9hbGxvY19vYmplY3Rz ID0gMDsKKyAgJG1haW46Om9wdF9zaG93X2J5dGVzICAgID0gMDsKKyAgJG1haW46Om9wdF9kcm9w X25lZ2F0aXZlID0gMDsKKyAgJG1haW46Om9wdF9pbnRlcmFjdGl2ZSAgID0gMDsKKworICAkbWFp bjo6b3B0X3RvdGFsX2RlbGF5ID0gMDsKKyAgJG1haW46Om9wdF9jb250ZW50aW9ucyA9IDA7Cisg ICRtYWluOjpvcHRfbWVhbl9kZWxheSA9IDA7CisKKyAgJG1haW46Om9wdF90b29scyAgID0gIiI7 CisgICRtYWluOjpvcHRfZGVidWcgICA9IDA7CisgICRtYWluOjpvcHRfdGVzdCAgICA9IDA7Cisg ICRtYWluOjpvcHRfZGVidWdfc3ltc19ieV9pZCA9IDA7CisKKyAgIyBUaGVzZSBhcmUgdW5kb2N1 bWVudGVkIGZsYWdzIHVzZWQgb25seSBieSB1bml0dGVzdHMuCisgICRtYWluOjpvcHRfdGVzdF9z dHJpZGUgPSAwOworCisgICMgQXJlIHdlIHVzaW5nICRTWU1CT0xfUEFHRT8KKyAgJG1haW46OnVz ZV9zeW1ib2xfcGFnZSA9IDA7CisKKyAgIyBGaWxlcyByZXR1cm5lZCBieSBUZW1wTmFtZS4KKyAg JW1haW46OnRlbXBuYW1lcyA9ICgpOworCisgICMgVHlwZSBvZiBwcm9maWxlIHdlIGFyZSBkZWFs aW5nIHdpdGgKKyAgIyBTdXBwb3J0ZWQgdHlwZXM6CisgICMgICAgIGNwdQorICAjICAgICBoZWFw CisgICMgICAgIGdyb3d0aAorICAjICAgICBjb250ZW50aW9uCisgICRtYWluOjpwcm9maWxlX3R5 cGUgPSAnJzsgICAgICMgRW1wdHkgdHlwZSBtZWFucyAidW5rbm93biIKKworICBHZXRPcHRpb25z KCJoZWxwISIgICAgICAgICAgPT4gXCRtYWluOjpvcHRfaGVscCwKKyAgICAgICAgICAgICAidmVy c2lvbiEiICAgICAgID0+IFwkbWFpbjo6b3B0X3ZlcnNpb24sCisgICAgICAgICAgICAgImN1bSEi ICAgICAgICAgICA9PiBcJG1haW46Om9wdF9jdW0sCisgICAgICAgICAgICAgImJhc2U9cyIgICAg ICAgICA9PiBcJG1haW46Om9wdF9iYXNlLAorICAgICAgICAgICAgICJzZWNvbmRzPWkiICAgICAg PT4gXCRtYWluOjpvcHRfc2Vjb25kcywKKyAgICAgICAgICAgICAiYWRkX2xpYj1zIiAgICAgID0+ IFwkbWFpbjo6b3B0X2xpYiwKKyAgICAgICAgICAgICAibGliX3ByZWZpeD1zIiAgID0+IFwkbWFp bjo6b3B0X2xpYl9wcmVmaXgsCisgICAgICAgICAgICAgImZ1bmN0aW9ucyEiICAgICA9PiBcJG1h aW46Om9wdF9mdW5jdGlvbnMsCisgICAgICAgICAgICAgImxpbmVzISIgICAgICAgICA9PiBcJG1h aW46Om9wdF9saW5lcywKKyAgICAgICAgICAgICAiYWRkcmVzc2VzISIgICAgID0+IFwkbWFpbjo6 b3B0X2FkZHJlc3NlcywKKyAgICAgICAgICAgICAiZmlsZXMhIiAgICAgICAgID0+IFwkbWFpbjo6 b3B0X2ZpbGVzLAorICAgICAgICAgICAgICJ0ZXh0ISIgICAgICAgICAgPT4gXCRtYWluOjpvcHRf dGV4dCwKKyAgICAgICAgICAgICAiY2FsbGdyaW5kISIgICAgID0+IFwkbWFpbjo6b3B0X2NhbGxn cmluZCwKKyAgICAgICAgICAgICAibGlzdD1zIiAgICAgICAgID0+IFwkbWFpbjo6b3B0X2xpc3Qs CisgICAgICAgICAgICAgImRpc2FzbT1zIiAgICAgICA9PiBcJG1haW46Om9wdF9kaXNhc20sCisg ICAgICAgICAgICAgInN5bWJvbHMhIiAgICAgICA9PiBcJG1haW46Om9wdF9zeW1ib2xzLAorICAg ICAgICAgICAgICJndiEiICAgICAgICAgICAgPT4gXCRtYWluOjpvcHRfZ3YsCisgICAgICAgICAg ICAgImV2aW5jZSEiICAgICAgICA9PiBcJG1haW46Om9wdF9ldmluY2UsCisgICAgICAgICAgICAg IndlYiEiICAgICAgICAgICA9PiBcJG1haW46Om9wdF93ZWIsCisgICAgICAgICAgICAgImRvdCEi ICAgICAgICAgICA9PiBcJG1haW46Om9wdF9kb3QsCisgICAgICAgICAgICAgInBzISIgICAgICAg ICAgICA9PiBcJG1haW46Om9wdF9wcywKKyAgICAgICAgICAgICAicGRmISIgICAgICAgICAgID0+ IFwkbWFpbjo6b3B0X3BkZiwKKyAgICAgICAgICAgICAic3ZnISIgICAgICAgICAgID0+IFwkbWFp bjo6b3B0X3N2ZywKKyAgICAgICAgICAgICAiZ2lmISIgICAgICAgICAgID0+IFwkbWFpbjo6b3B0 X2dpZiwKKyAgICAgICAgICAgICAicmF3ISIgICAgICAgICAgID0+IFwkbWFpbjo6b3B0X3JhdywK KyAgICAgICAgICAgICAiY29sbGFwc2VkISIgICAgID0+IFwkbWFpbjo6b3B0X2NvbGxhcHNlZCwK KyAgICAgICAgICAgICAiaW50ZXJhY3RpdmUhIiAgID0+IFwkbWFpbjo6b3B0X2ludGVyYWN0aXZl LAorICAgICAgICAgICAgICJub2RlY291bnQ9aSIgICAgPT4gXCRtYWluOjpvcHRfbm9kZWNvdW50 LAorICAgICAgICAgICAgICJub2RlZnJhY3Rpb249ZiIgPT4gXCRtYWluOjpvcHRfbm9kZWZyYWN0 aW9uLAorICAgICAgICAgICAgICJlZGdlZnJhY3Rpb249ZiIgPT4gXCRtYWluOjpvcHRfZWRnZWZy YWN0aW9uLAorICAgICAgICAgICAgICJtYXhkZWdyZWU9aSIgICAgPT4gXCRtYWluOjpvcHRfbWF4 ZGVncmVlLAorICAgICAgICAgICAgICJmb2N1cz1zIiAgICAgICAgPT4gXCRtYWluOjpvcHRfZm9j dXMsCisgICAgICAgICAgICAgInRocmVhZD1zIiAgICAgICA9PiBcJG1haW46Om9wdF90aHJlYWQs CisgICAgICAgICAgICAgImlnbm9yZT1zIiAgICAgICA9PiBcJG1haW46Om9wdF9pZ25vcmUsCisg ICAgICAgICAgICAgInNjYWxlPWkiICAgICAgICA9PiBcJG1haW46Om9wdF9zY2FsZSwKKyAgICAg ICAgICAgICAiaGVhcGNoZWNrIiAgICAgID0+IFwkbWFpbjo6b3B0X2hlYXBjaGVjaywKKyAgICAg ICAgICAgICAicmV0YWluPXMiICAgICAgID0+IFwkbWFpbjo6b3B0X3JldGFpbiwKKyAgICAgICAg ICAgICAiZXhjbHVkZT1zIiAgICAgID0+IFwkbWFpbjo6b3B0X2V4Y2x1ZGUsCisgICAgICAgICAg ICAgImludXNlX3NwYWNlISIgICA9PiBcJG1haW46Om9wdF9pbnVzZV9zcGFjZSwKKyAgICAgICAg ICAgICAiaW51c2Vfb2JqZWN0cyEiID0+IFwkbWFpbjo6b3B0X2ludXNlX29iamVjdHMsCisgICAg ICAgICAgICAgImFsbG9jX3NwYWNlISIgICA9PiBcJG1haW46Om9wdF9hbGxvY19zcGFjZSwKKyAg ICAgICAgICAgICAiYWxsb2Nfb2JqZWN0cyEiID0+IFwkbWFpbjo6b3B0X2FsbG9jX29iamVjdHMs CisgICAgICAgICAgICAgInNob3dfYnl0ZXMhIiAgICA9PiBcJG1haW46Om9wdF9zaG93X2J5dGVz LAorICAgICAgICAgICAgICJkcm9wX25lZ2F0aXZlISIgPT4gXCRtYWluOjpvcHRfZHJvcF9uZWdh dGl2ZSwKKyAgICAgICAgICAgICAidG90YWxfZGVsYXkhIiAgID0+IFwkbWFpbjo6b3B0X3RvdGFs X2RlbGF5LAorICAgICAgICAgICAgICJjb250ZW50aW9ucyEiICAgPT4gXCRtYWluOjpvcHRfY29u dGVudGlvbnMsCisgICAgICAgICAgICAgIm1lYW5fZGVsYXkhIiAgICA9PiBcJG1haW46Om9wdF9t ZWFuX2RlbGF5LAorICAgICAgICAgICAgICJ0b29scz1zIiAgICAgICAgPT4gXCRtYWluOjpvcHRf dG9vbHMsCisgICAgICAgICAgICAgInRlc3QhIiAgICAgICAgICA9PiBcJG1haW46Om9wdF90ZXN0 LAorICAgICAgICAgICAgICJkZWJ1ZyEiICAgICAgICAgPT4gXCRtYWluOjpvcHRfZGVidWcsCisg ICAgICAgICAgICAgImRlYnVnLXN5bXMtYnktaWQhIiA9PiBcJG1haW46Om9wdF9kZWJ1Z19zeW1z X2J5X2lkLAorICAgICAgICAgICAgICMgVW5kb2N1bWVudGVkIGZsYWdzIHVzZWQgb25seSBieSB1 bml0dGVzdHM6CisgICAgICAgICAgICAgInRlc3Rfc3RyaWRlPWkiICA9PiBcJG1haW46Om9wdF90 ZXN0X3N0cmlkZSwKKyAgICAgICkgfHwgdXNhZ2UoIkludmFsaWQgb3B0aW9uKHMpIik7CisKKyAg IyBEZWFsIHdpdGggdGhlIHN0YW5kYXJkIC0taGVscCBhbmQgLS12ZXJzaW9uCisgIGlmICgkbWFp bjo6b3B0X2hlbHApIHsKKyAgICBwcmludCB1c2FnZV9zdHJpbmcoKTsKKyAgICBleGl0KDApOwor ICB9CisKKyAgaWYgKCRtYWluOjpvcHRfdmVyc2lvbikgeworICAgIHByaW50IHZlcnNpb25fc3Ry aW5nKCk7CisgICAgZXhpdCgwKTsKKyAgfQorCisgICMgRGlzYXNzZW1ibHkvbGlzdGluZy9zeW1i b2xzIG1vZGUgcmVxdWlyZXMgYWRkcmVzcy1sZXZlbCBpbmZvCisgIGlmICgkbWFpbjo6b3B0X2Rp c2FzbSB8fCAkbWFpbjo6b3B0X2xpc3QgfHwgJG1haW46Om9wdF9zeW1ib2xzKSB7CisgICAgJG1h aW46Om9wdF9mdW5jdGlvbnMgPSAwOworICAgICRtYWluOjpvcHRfbGluZXMgPSAwOworICAgICRt YWluOjpvcHRfYWRkcmVzc2VzID0gMTsKKyAgICAkbWFpbjo6b3B0X2ZpbGVzID0gMDsKKyAgfQor CisgICMgQ2hlY2sgaGVhcC1wcm9maWxpbmcgZmxhZ3MKKyAgaWYgKCRtYWluOjpvcHRfaW51c2Vf c3BhY2UgKworICAgICAgJG1haW46Om9wdF9pbnVzZV9vYmplY3RzICsKKyAgICAgICRtYWluOjpv cHRfYWxsb2Nfc3BhY2UgKworICAgICAgJG1haW46Om9wdF9hbGxvY19vYmplY3RzID4gMSkgewor ICAgIHVzYWdlKCJTcGVjaWZ5IGF0IG1vc3Qgb24gb2YgLS1pbnVzZS8tLWFsbG9jIG9wdGlvbnMi KTsKKyAgfQorCisgICMgQ2hlY2sgb3V0cHV0IGdyYW51bGFyaXRpZXMKKyAgbXkgJGdyYWlucyA9 CisgICAgICAkbWFpbjo6b3B0X2Z1bmN0aW9ucyArCisgICAgICAkbWFpbjo6b3B0X2xpbmVzICsK KyAgICAgICRtYWluOjpvcHRfYWRkcmVzc2VzICsKKyAgICAgICRtYWluOjpvcHRfZmlsZXMgKwor ICAgICAgMDsKKyAgaWYgKCRncmFpbnMgPiAxKSB7CisgICAgdXNhZ2UoIk9ubHkgc3BlY2lmeSBv bmUgb3V0cHV0IGdyYW51bGFyaXR5IG9wdGlvbiIpOworICB9CisgIGlmICgkZ3JhaW5zID09IDAp IHsKKyAgICAkbWFpbjo6b3B0X2Z1bmN0aW9ucyA9IDE7CisgIH0KKworICAjIENoZWNrIG91dHB1 dCBtb2RlcworICBteSAkbW9kZXMgPQorICAgICAgJG1haW46Om9wdF90ZXh0ICsKKyAgICAgICRt YWluOjpvcHRfY2FsbGdyaW5kICsKKyAgICAgICgkbWFpbjo6b3B0X2xpc3QgZXEgJycgPyAwIDog MSkgKworICAgICAgKCRtYWluOjpvcHRfZGlzYXNtIGVxICcnID8gMCA6IDEpICsKKyAgICAgICgk bWFpbjo6b3B0X3N5bWJvbHMgPT0gMCA/IDAgOiAxKSArCisgICAgICAkbWFpbjo6b3B0X2d2ICsK KyAgICAgICRtYWluOjpvcHRfZXZpbmNlICsKKyAgICAgICRtYWluOjpvcHRfd2ViICsKKyAgICAg ICRtYWluOjpvcHRfZG90ICsKKyAgICAgICRtYWluOjpvcHRfcHMgKworICAgICAgJG1haW46Om9w dF9wZGYgKworICAgICAgJG1haW46Om9wdF9zdmcgKworICAgICAgJG1haW46Om9wdF9naWYgKwor ICAgICAgJG1haW46Om9wdF9yYXcgKworICAgICAgJG1haW46Om9wdF9jb2xsYXBzZWQgKworICAg ICAgJG1haW46Om9wdF9pbnRlcmFjdGl2ZSArCisgICAgICAwOworICBpZiAoJG1vZGVzID4gMSkg eworICAgIHVzYWdlKCJPbmx5IHNwZWNpZnkgb25lIG91dHB1dCBtb2RlIik7CisgIH0KKyAgaWYg KCRtb2RlcyA9PSAwKSB7CisgICAgaWYgKC10IFNURE9VVCkgeyAgIyBJZiBTVERPVVQgaXMgYSB0 dHksIGFjdGl2YXRlIGludGVyYWN0aXZlIG1vZGUKKyAgICAgICRtYWluOjpvcHRfaW50ZXJhY3Rp dmUgPSAxOworICAgIH0gZWxzZSB7CisgICAgICAkbWFpbjo6b3B0X3RleHQgPSAxOworICAgIH0K KyAgfQorCisgIGlmICgkbWFpbjo6b3B0X3Rlc3QpIHsKKyAgICBSdW5Vbml0VGVzdHMoKTsKKyAg ICAjIFNob3VsZCBub3QgcmV0dXJuCisgICAgZXhpdCgxKTsKKyAgfQorCisgICMgQmluYXJ5IG5h bWUgYW5kIHByb2ZpbGUgYXJndW1lbnRzIGxpc3QKKyAgJG1haW46OnByb2cgPSAiIjsKKyAgQG1h aW46OnBmaWxlX2FyZ3MgPSAoKTsKKworICAjIFJlbW90ZSBwcm9maWxpbmcgd2l0aG91dCBhIGJp bmFyeSAodXNpbmcgJFNZTUJPTF9QQUdFIGluc3RlYWQpCisgIGlmIChAQVJHViA+IDApIHsKKyAg ICBpZiAoSXNQcm9maWxlVVJMKCRBUkdWWzBdKSkgeworICAgICAgJG1haW46OnVzZV9zeW1ib2xf cGFnZSA9IDE7CisgICAgfSBlbHNpZiAoSXNTeW1ib2xpemVkUHJvZmlsZUZpbGUoJEFSR1ZbMF0p KSB7CisgICAgICAkbWFpbjo6dXNlX3N5bWJvbGl6ZWRfcHJvZmlsZSA9IDE7CisgICAgICAkbWFp bjo6cHJvZyA9ICRVTktOT1dOX0JJTkFSWTsgICMgd2lsbCBiZSBzZXQgbGF0ZXIgZnJvbSB0aGUg cHJvZmlsZSBmaWxlCisgICAgfQorICB9CisKKyAgaWYgKCRtYWluOjp1c2Vfc3ltYm9sX3BhZ2Ug fHwgJG1haW46OnVzZV9zeW1ib2xpemVkX3Byb2ZpbGUpIHsKKyAgICAjIFdlIGRvbid0IG5lZWQg YSBiaW5hcnkhCisgICAgbXkgJWRpc2FibGVkID0gKCctLWxpbmVzJyA9PiAkbWFpbjo6b3B0X2xp bmVzLAorICAgICAgICAgICAgICAgICAgICAnLS1kaXNhc20nID0+ICRtYWluOjpvcHRfZGlzYXNt KTsKKyAgICBmb3IgbXkgJG9wdGlvbiAoa2V5cyAlZGlzYWJsZWQpIHsKKyAgICAgIHVzYWdlKCIk b3B0aW9uIGNhbm5vdCBiZSB1c2VkIHdpdGhvdXQgYSBiaW5hcnkiKSBpZiAkZGlzYWJsZWR7JG9w dGlvbn07CisgICAgfQorICAgICMgU2V0ICRtYWluOjpwcm9nIGxhdGVyLi4uCisgICAgc2NhbGFy KEBBUkdWKSB8fCB1c2FnZSgiRGlkIG5vdCBzcGVjaWZ5IHByb2ZpbGUgZmlsZSIpOworICB9IGVs c2lmICgkbWFpbjo6b3B0X3N5bWJvbHMpIHsKKyAgICAjIC0tc3ltYm9scyBuZWVkcyBhIGJpbmFy eS1uYW1lICh0byBydW4gbm0gb24sIGV0YykgYnV0IG5vdCBwcm9maWxlcworICAgICRtYWluOjpw cm9nID0gc2hpZnQoQEFSR1YpIHx8IHVzYWdlKCJEaWQgbm90IHNwZWNpZnkgcHJvZ3JhbSIpOwor ICB9IGVsc2UgeworICAgICRtYWluOjpwcm9nID0gc2hpZnQoQEFSR1YpIHx8IHVzYWdlKCJEaWQg bm90IHNwZWNpZnkgcHJvZ3JhbSIpOworICAgIHNjYWxhcihAQVJHVikgfHwgdXNhZ2UoIkRpZCBu b3Qgc3BlY2lmeSBwcm9maWxlIGZpbGUiKTsKKyAgfQorCisgICMgUGFyc2UgcHJvZmlsZSBmaWxl L2xvY2F0aW9uIGFyZ3VtZW50cworICBmb3JlYWNoIG15ICRmYXJnIChAQVJHVikgeworICAgIGlm ICgkZmFyZyA9fiBtLyguKilcQChbMC05XSspKHxcLy4qKSQvICkgeworICAgICAgbXkgJG1hY2hp bmUgPSAkMTsKKyAgICAgIG15ICRudW1fbWFjaGluZXMgPSAkMjsKKyAgICAgIG15ICRwYXRoID0g JDM7CisgICAgICBmb3IgKG15ICRpID0gMDsgJGkgPCAkbnVtX21hY2hpbmVzOyAkaSsrKSB7Cisg ICAgICAgIHVuc2hpZnQoQG1haW46OnBmaWxlX2FyZ3MsICIkaS4kbWFjaGluZSRwYXRoIik7Cisg ICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIHVuc2hpZnQoQG1haW46OnBmaWxlX2FyZ3MsICRm YXJnKTsKKyAgICB9CisgIH0KKworICBpZiAoJG1haW46OnVzZV9zeW1ib2xfcGFnZSkgeworICAg IHVubGVzcyAoSXNQcm9maWxlVVJMKCRtYWluOjpwZmlsZV9hcmdzWzBdKSkgeworICAgICAgZXJy b3IoIlRoZSBmaXJzdCBwcm9maWxlIHNob3VsZCBiZSBhIHJlbW90ZSBmb3JtIHRvIHVzZSAkU1lN Qk9MX1BBR0VcbiIpOworICAgIH0KKyAgICBDaGVja1N5bWJvbFBhZ2UoKTsKKyAgICAkbWFpbjo6 cHJvZyA9IEZldGNoUHJvZ3JhbU5hbWUoKTsKKyAgfSBlbHNpZiAoISRtYWluOjp1c2Vfc3ltYm9s aXplZF9wcm9maWxlKSB7ICAjIG1heSBub3QgbmVlZCBvYmp0b29scyEKKyAgICBDb25maWd1cmVP YmpUb29scygkbWFpbjo6cHJvZykKKyAgfQorCisgICMgQnJlYWsgdGhlIG9wdF9saWJfcHJlZml4 IGludG8gdGhlIHByZWZpeF9saXN0IGFycmF5CisgIEBwcmVmaXhfbGlzdCA9IHNwbGl0ICgnLCcs ICRtYWluOjpvcHRfbGliX3ByZWZpeCk7CisKKyAgIyBSZW1vdmUgdHJhaWxpbmcgLyBmcm9tIHRo ZSBwcmVmaXhlcywgaW4gdGhlIGxpc3QgdG8gcHJldmVudAorICAjIHNlYXJjaGluZyB0aGluZ3Mg bGlrZSAvbXkvcGF0aC8vbGliL215bGliLnNvCisgIGZvcmVhY2ggKEBwcmVmaXhfbGlzdCkgewor ICAgIHN8LyskfHw7CisgIH0KKworICAjIEZsYWcgdG8gcHJldmVudCB1cyBmcm9tIHRyeWluZyBv dmVyIGFuZCBvdmVyIHRvIHVzZQorICAjICBlbGZ1dGlscyBpZiBpdCdzIG5vdCBpbnN0YWxsZWQg KHVzZWQgb25seSB3aXRoCisgICMgIC0tZGVidWctc3ltcy1ieS1pZCBvcHRpb24pLgorICAkbWFp bjo6Z2F2ZV91cF9vbl9lbGZ1dGlscyA9IDA7Cit9CisKK3N1YiBGaWx0ZXJBbmRQcmludCB7Cisg IG15ICgkcHJvZmlsZSwgJHN5bWJvbHMsICRsaWJzLCAkdGhyZWFkKSA9IEBfOworCisgICMgR2V0 IHRvdGFsIGRhdGEgaW4gcHJvZmlsZQorICBteSAkdG90YWwgPSBUb3RhbFByb2ZpbGUoJHByb2Zp bGUpOworCisgICMgUmVtb3ZlIHVuaW5pdGVyZXN0aW5nIHN0YWNrIGl0ZW1zCisgICRwcm9maWxl ID0gUmVtb3ZlVW5pbnRlcmVzdGluZ0ZyYW1lcygkc3ltYm9scywgJHByb2ZpbGUpOworCisgICMg Rm9jdXM/CisgIGlmICgkbWFpbjo6b3B0X2ZvY3VzIG5lICcnKSB7CisgICAgJHByb2ZpbGUgPSBG b2N1c1Byb2ZpbGUoJHN5bWJvbHMsICRwcm9maWxlLCAkbWFpbjo6b3B0X2ZvY3VzKTsKKyAgfQor CisgICMgSWdub3JlPworICBpZiAoJG1haW46Om9wdF9pZ25vcmUgbmUgJycpIHsKKyAgICAkcHJv ZmlsZSA9IElnbm9yZVByb2ZpbGUoJHN5bWJvbHMsICRwcm9maWxlLCAkbWFpbjo6b3B0X2lnbm9y ZSk7CisgIH0KKworICBteSAkY2FsbHMgPSBFeHRyYWN0Q2FsbHMoJHN5bWJvbHMsICRwcm9maWxl KTsKKworICAjIFJlZHVjZSBwcm9maWxlcyB0byByZXF1aXJlZCBvdXRwdXQgZ3JhbnVsYXJpdHks IGFuZCBhbHNvIGNsZWFuCisgICMgZWFjaCBzdGFjayB0cmFjZSBzbyBhIGdpdmVuIGVudHJ5IGV4 aXN0cyBhdCBtb3N0IG9uY2UuCisgIG15ICRyZWR1Y2VkID0gUmVkdWNlUHJvZmlsZSgkc3ltYm9s cywgJHByb2ZpbGUpOworCisgICMgR2V0IGRlcml2ZWQgcHJvZmlsZXMKKyAgbXkgJGZsYXQgPSBG bGF0UHJvZmlsZSgkcmVkdWNlZCk7CisgIG15ICRjdW11bGF0aXZlID0gQ3VtdWxhdGl2ZVByb2Zp bGUoJHJlZHVjZWQpOworCisgICMgUHJpbnQKKyAgaWYgKCEkbWFpbjo6b3B0X2ludGVyYWN0aXZl KSB7CisgICAgaWYgKCRtYWluOjpvcHRfZGlzYXNtKSB7CisgICAgICBQcmludERpc2Fzc2VtYmx5 KCRsaWJzLCAkZmxhdCwgJGN1bXVsYXRpdmUsICRtYWluOjpvcHRfZGlzYXNtKTsKKyAgICB9IGVs c2lmICgkbWFpbjo6b3B0X2xpc3QpIHsKKyAgICAgIFByaW50TGlzdGluZygkdG90YWwsICRsaWJz LCAkZmxhdCwgJGN1bXVsYXRpdmUsICRtYWluOjpvcHRfbGlzdCwgMCk7CisgICAgfSBlbHNpZiAo JG1haW46Om9wdF90ZXh0KSB7CisgICAgICAjIE1ha2Ugc3VyZSB0aGUgb3V0cHV0IGlzIGVtcHR5 IHdoZW4gaGF2ZSBub3RoaW5nIHRvIHJlcG9ydAorICAgICAgIyAob25seSBtYXR0ZXJzIHdoZW4g LS1oZWFwY2hlY2sgaXMgZ2l2ZW4gYnV0IHdlIG11c3QgYmUKKyAgICAgICMgY29tcGF0aWJsZSB3 aXRoIG9sZCBicmFuY2hlcyB0aGF0IGRpZCBub3QgcGFzcyAtLWhlYXBjaGVjayBhbHdheXMpOgor ICAgICAgaWYgKCR0b3RhbCAhPSAwKSB7CisgICAgICAgIHByaW50ZigiVG90YWwlczogJXMgJXNc biIsCisgICAgICAgICAgICAgICAoZGVmaW5lZCgkdGhyZWFkKSA/ICIgKHQkdGhyZWFkKSIgOiAi IiksCisgICAgICAgICAgICAgICBVbnBhcnNlKCR0b3RhbCksIFVuaXRzKCkpOworICAgICAgfQor ICAgICAgUHJpbnRUZXh0KCRzeW1ib2xzLCAkZmxhdCwgJGN1bXVsYXRpdmUsIC0xKTsKKyAgICB9 IGVsc2lmICgkbWFpbjo6b3B0X3JhdykgeworICAgICAgUHJpbnRTeW1ib2xpemVkUHJvZmlsZSgk c3ltYm9scywgJHByb2ZpbGUsICRtYWluOjpwcm9nKTsKKyAgICB9IGVsc2lmICgkbWFpbjo6b3B0 X2NvbGxhcHNlZCkgeworICAgICAgUHJpbnRDb2xsYXBzZWRTdGFja3MoJHN5bWJvbHMsICRwcm9m aWxlKTsKKyAgICB9IGVsc2lmICgkbWFpbjo6b3B0X2NhbGxncmluZCkgeworICAgICAgUHJpbnRD YWxsZ3JpbmQoJGNhbGxzKTsKKyAgICB9IGVsc2UgeworICAgICAgaWYgKFByaW50RG90KCRtYWlu Ojpwcm9nLCAkc3ltYm9scywgJHByb2ZpbGUsICRmbGF0LCAkY3VtdWxhdGl2ZSwgJHRvdGFsKSkg eworICAgICAgICBpZiAoJG1haW46Om9wdF9ndikgeworICAgICAgICAgIFJ1bkdWKFRlbXBOYW1l KCRtYWluOjpuZXh0X3RtcGZpbGUsICJwcyIpLCAiIik7CisgICAgICAgIH0gZWxzaWYgKCRtYWlu OjpvcHRfZXZpbmNlKSB7CisgICAgICAgICAgUnVuRXZpbmNlKFRlbXBOYW1lKCRtYWluOjpuZXh0 X3RtcGZpbGUsICJwZGYiKSwgIiIpOworICAgICAgICB9IGVsc2lmICgkbWFpbjo6b3B0X3dlYikg eworICAgICAgICAgIG15ICR0bXAgPSBUZW1wTmFtZSgkbWFpbjo6bmV4dF90bXBmaWxlLCAic3Zn Iik7CisgICAgICAgICAgUnVuV2ViKCR0bXApOworICAgICAgICAgICMgVGhlIGNvbW1hbmQgd2Ug cnVuIG1pZ2h0IGhhbmQgdGhlIGZpbGUgbmFtZSBvZmYKKyAgICAgICAgICAjIHRvIGFuIGFscmVh ZHkgcnVubmluZyBicm93c2VyIGluc3RhbmNlIGFuZCB0aGVuIGV4aXQuCisgICAgICAgICAgIyBO b3JtYWxseSwgd2UnZCByZW1vdmUgJHRtcCBvbiBleGl0IChyaWdodCBub3cpLAorICAgICAgICAg ICMgYnV0IGZvcmsgYSBjaGlsZCB0byByZW1vdmUgJHRtcCBhIGxpdHRsZSBsYXRlciwgc28gdGhh dCB0aGUKKyAgICAgICAgICAjIGJyb3dzZXIgaGFzIHRpbWUgdG8gbG9hZCBpdCBmaXJzdC4KKyAg ICAgICAgICBkZWxldGUgJG1haW46OnRlbXBuYW1lc3skdG1wfTsKKyAgICAgICAgICBpZiAoZm9y aygpID09IDApIHsKKyAgICAgICAgICAgIHNsZWVwIDU7CisgICAgICAgICAgICB1bmxpbmsoJHRt cCk7CisgICAgICAgICAgICBleGl0KDApOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg fSBlbHNlIHsKKyAgICAgICAgY2xlYW51cCgpOworICAgICAgICBleGl0KDEpOworICAgICAgfQor ICAgIH0KKyAgfSBlbHNlIHsKKyAgICBJbnRlcmFjdGl2ZU1vZGUoJHByb2ZpbGUsICRzeW1ib2xz LCAkbGlicywgJHRvdGFsKTsKKyAgfQorfQorCitzdWIgTWFpbigpIHsKKyAgSW5pdCgpOworICAk bWFpbjo6Y29sbGVjdGVkX3Byb2ZpbGUgPSB1bmRlZjsKKyAgQG1haW46OnByb2ZpbGVfZmlsZXMg PSAoKTsKKyAgJG1haW46Om9wX3RpbWUgPSB0aW1lKCk7CisKKyAgIyBQcmludGluZyBzeW1ib2xz IGlzIHNwZWNpYWwgYW5kIHJlcXVpcmVzIGEgbG90IGxlc3MgaW5mbyB0aGF0IG1vc3QuCisgIGlm ICgkbWFpbjo6b3B0X3N5bWJvbHMpIHsKKyAgICBQcmludFN5bWJvbHMoKlNURElOKTsgICAjIEdl dCAvcHJvYy9tYXBzIGFuZCBzeW1ib2xzIG91dHB1dCBmcm9tIHN0ZGluCisgICAgcmV0dXJuOwor ICB9CisKKyAgIyBGZXRjaCBhbGwgcHJvZmlsZSBkYXRhCisgIEZldGNoRHluYW1pY1Byb2ZpbGVz KCk7CisKKyAgIyB0aGlzIHdpbGwgaG9sZCBzeW1ib2xzIHRoYXQgd2UgcmVhZCBmcm9tIHRoZSBw cm9maWxlIGZpbGVzCisgIG15ICRzeW1ib2xfbWFwID0ge307CisKKyAgIyBSZWFkIG9uZSBwcm9m aWxlLCBwaWNrIHRoZSBsYXN0IGl0ZW0gb24gdGhlIGxpc3QKKyAgbXkgJGRhdGEgPSBSZWFkUHJv ZmlsZSgkbWFpbjo6cHJvZywgcG9wKEBtYWluOjpwcm9maWxlX2ZpbGVzKSk7CisgIG15ICRwcm9m aWxlID0gJGRhdGEtPntwcm9maWxlfTsKKyAgbXkgJHBjcyA9ICRkYXRhLT57cGNzfTsKKyAgbXkg JGxpYnMgPSAkZGF0YS0+e2xpYnN9OyAgICMgSW5mbyBhYm91dCBtYWluIHByb2dyYW0gYW5kIHNo YXJlZCBsaWJyYXJpZXMKKyAgJHN5bWJvbF9tYXAgPSBNZXJnZVN5bWJvbHMoJHN5bWJvbF9tYXAs ICRkYXRhLT57c3ltYm9sc30pOworCisgICMgQWRkIGFkZGl0aW9uYWwgcHJvZmlsZXMsIGlmIGF2 YWlsYWJsZS4KKyAgaWYgKHNjYWxhcihAbWFpbjo6cHJvZmlsZV9maWxlcykgPiAwKSB7CisgICAg Zm9yZWFjaCBteSAkcG5hbWUgKEBtYWluOjpwcm9maWxlX2ZpbGVzKSB7CisgICAgICBteSAkZGF0 YTIgPSBSZWFkUHJvZmlsZSgkbWFpbjo6cHJvZywgJHBuYW1lKTsKKyAgICAgICRwcm9maWxlID0g QWRkUHJvZmlsZSgkcHJvZmlsZSwgJGRhdGEyLT57cHJvZmlsZX0pOworICAgICAgJHBjcyA9IEFk ZFBjcygkcGNzLCAkZGF0YTItPntwY3N9KTsKKyAgICAgICRzeW1ib2xfbWFwID0gTWVyZ2VTeW1i b2xzKCRzeW1ib2xfbWFwLCAkZGF0YTItPntzeW1ib2xzfSk7CisgICAgfQorICB9CisKKyAgIyBT dWJ0cmFjdCBiYXNlIGZyb20gcHJvZmlsZSwgaWYgc3BlY2lmaWVkCisgIGlmICgkbWFpbjo6b3B0 X2Jhc2UgbmUgJycpIHsKKyAgICBteSAkYmFzZSA9IFJlYWRQcm9maWxlKCRtYWluOjpwcm9nLCAk bWFpbjo6b3B0X2Jhc2UpOworICAgICRwcm9maWxlID0gU3VidHJhY3RQcm9maWxlKCRwcm9maWxl LCAkYmFzZS0+e3Byb2ZpbGV9KTsKKyAgICAkcGNzID0gQWRkUGNzKCRwY3MsICRiYXNlLT57cGNz fSk7CisgICAgJHN5bWJvbF9tYXAgPSBNZXJnZVN5bWJvbHMoJHN5bWJvbF9tYXAsICRiYXNlLT57 c3ltYm9sc30pOworICB9CisKKyAgIyBDb2xsZWN0IHN5bWJvbHMKKyAgbXkgJHN5bWJvbHM7Cisg IGlmICgkbWFpbjo6dXNlX3N5bWJvbGl6ZWRfcHJvZmlsZSkgeworICAgICRzeW1ib2xzID0gRmV0 Y2hTeW1ib2xzKCRwY3MsICRzeW1ib2xfbWFwKTsKKyAgfSBlbHNpZiAoJG1haW46OnVzZV9zeW1i b2xfcGFnZSkgeworICAgICRzeW1ib2xzID0gRmV0Y2hTeW1ib2xzKCRwY3MpOworICB9IGVsc2Ug eworICAgICMgVE9ETyhjc2lsdmVycyk6ICRsaWJzIHVzZXMgdGhlIC9wcm9jL3NlbGYvbWFwcyBk YXRhIGZyb20gcHJvZmlsZTEsCisgICAgIyB3aGljaCBtYXkgZGlmZmVyIGZyb20gdGhlIGRhdGEg ZnJvbSBzdWJzZXF1ZW50IHByb2ZpbGVzLCBlc3BlY2lhbGx5CisgICAgIyBpZiB0aGV5IHdlcmUg cnVuIG9uIGRpZmZlcmVudCBtYWNoaW5lcy4gIFVzZSBhcHByb3ByaWF0ZSBsaWJzIGZvcgorICAg ICMgZWFjaCBwYyBzb21laG93LgorICAgICRzeW1ib2xzID0gRXh0cmFjdFN5bWJvbHMoJGxpYnMs ICRwY3MpOworICB9CisKKyAgaWYgKCFkZWZpbmVkKCRtYWluOjpvcHRfdGhyZWFkKSkgeworICAg IEZpbHRlckFuZFByaW50KCRwcm9maWxlLCAkc3ltYm9scywgJGxpYnMpOworICB9CisgIGlmIChk ZWZpbmVkKCRkYXRhLT57dGhyZWFkc30pKSB7CisgICAgZm9yZWFjaCBteSAkdGhyZWFkIChzb3J0 IHsgJGEgPD0+ICRiIH0ga2V5cygleyRkYXRhLT57dGhyZWFkc319KSkgeworICAgICAgaWYgKGRl ZmluZWQoJG1haW46Om9wdF90aHJlYWQpICYmCisgICAgICAgICAgKCRtYWluOjpvcHRfdGhyZWFk IGVxICcqJyB8fCAkbWFpbjo6b3B0X3RocmVhZCA9PSAkdGhyZWFkKSkgeworICAgICAgICBteSAk dGhyZWFkX3Byb2ZpbGUgPSAkZGF0YS0+e3RocmVhZHN9eyR0aHJlYWR9OworICAgICAgICBGaWx0 ZXJBbmRQcmludCgkdGhyZWFkX3Byb2ZpbGUsICRzeW1ib2xzLCAkbGlicywgJHRocmVhZCk7Cisg ICAgICB9CisgICAgfQorICB9CisKKyAgY2xlYW51cCgpOworICBleGl0KDApOworfQorCisjIyMj IyBFbnRyeSBQb2ludCAjIyMjIworCitNYWluKCk7CisKKyMgVGVtcG9yYXJ5IGNvZGUgdG8gZGV0 ZWN0IGlmIHdlJ3JlIHJ1bm5pbmcgb24gYSBHb29idW50dSBzeXN0ZW0uCisjIFRoZXNlIHN5c3Rl bXMgZG9uJ3QgaGF2ZSB0aGUgcmlnaHQgc3R1ZmYgaW5zdGFsbGVkIGZvciB0aGUgc3BlY2lhbAor IyBSZWFkbGluZSBsaWJyYXJpZXMgdG8gd29yaywgc28gYXMgYSB0ZW1wb3Jhcnkgd29ya2Fyb3Vu ZCwgd2UgZGVmYXVsdAorIyB0byB1c2luZyB0aGUgbm9ybWFsIHN0ZGlvIGNvZGUsIHJhdGhlciB0 aGFuIHRoZSBmYW5jaWVyIHJlYWRsaW5lLWJhc2VkCisjIGNvZGUKK3N1YiBSZWFkbGluZU1pZ2h0 RmFpbCB7CisgIGlmICgtZSAnL2xpYi9saWJ0ZXJtY2FwLnNvLjInKSB7CisgICAgcmV0dXJuIDA7 ICAjIGxpYnRlcm1jYXAgZXhpc3RzLCBzbyByZWFkbGluZSBzaG91bGQgYmUgb2theQorICB9IGVs c2UgeworICAgIHJldHVybiAxOworICB9Cit9CisKK3N1YiBSdW5HViB7CisgIG15ICRmbmFtZSA9 IHNoaWZ0OworICBteSAkYmcgPSBzaGlmdDsgICAgICAgIyAiIiBvciAiICYiIGlmIHdlIHNob3Vs ZCBydW4gaW4gYmFja2dyb3VuZAorICBpZiAoIXN5c3RlbShTaGVsbEVzY2FwZShAR1YsICItLXZl cnNpb24iKSAuICIgPiRkZXZfbnVsbCAyPiYxIikpIHsKKyAgICAjIE9wdGlvbnMgdXNpbmcgZG91 YmxlIGRhc2ggYXJlIHN1cHBvcnRlZCBieSB0aGlzIGd2IHZlcnNpb24uCisgICAgIyBBbHNvLCB0 dXJuIG9uIG5vYW50aWFsaWFzIHRvIGJldHRlciBoYW5kbGUgYnVnIGluIGd2IGZvcgorICAgICMg cG9zdHNjcmlwdCBmaWxlcyB3aXRoIGxhcmdlIGRpbWVuc2lvbnMuCisgICAgIyBUT0RPOiBNYXli ZSB3ZSBzaG91bGQgbm90IHBhc3MgdGhlIC0tbm9hbnRpYWxpYXMgZmxhZworICAgICMgaWYgdGhl IGd2IHZlcnNpb24gaXMga25vd24gdG8gd29yayBwcm9wZXJseSB3aXRob3V0IHRoZSBmbGFnLgor ICAgIHN5c3RlbShTaGVsbEVzY2FwZShAR1YsICItLXNjYWxlPSRtYWluOjpvcHRfc2NhbGUiLCAi LS1ub2FudGlhbGlhcyIsICRmbmFtZSkKKyAgICAgICAgICAgLiAkYmcpOworICB9IGVsc2Ugewor ICAgICMgT2xkIGd2IHZlcnNpb24gLSBvbmx5IHN1cHBvcnRzIG9wdGlvbnMgdGhhdCB1c2Ugc2lu Z2xlIGRhc2guCisgICAgcHJpbnQgU1RERVJSIFNoZWxsRXNjYXBlKEBHViwgIi1zY2FsZSIsICRt YWluOjpvcHRfc2NhbGUpIC4gIlxuIjsKKyAgICBzeXN0ZW0oU2hlbGxFc2NhcGUoQEdWLCAiLXNj YWxlIiwgIiRtYWluOjpvcHRfc2NhbGUiLCAkZm5hbWUpIC4gJGJnKTsKKyAgfQorfQorCitzdWIg UnVuRXZpbmNlIHsKKyAgbXkgJGZuYW1lID0gc2hpZnQ7CisgIG15ICRiZyA9IHNoaWZ0OyAgICAg ICAjICIiIG9yICIgJiIgaWYgd2Ugc2hvdWxkIHJ1biBpbiBiYWNrZ3JvdW5kCisgIHN5c3RlbShT aGVsbEVzY2FwZShARVZJTkNFLCAkZm5hbWUpIC4gJGJnKTsKK30KKworc3ViIFJ1bldlYiB7Cisg IG15ICRmbmFtZSA9IHNoaWZ0OworICBwcmludCBTVERFUlIgIkxvYWRpbmcgd2ViIHBhZ2UgZmls ZTovLy8kZm5hbWVcbiI7CisKKyAgaWYgKGB1bmFtZWAgPX4gL0Rhcndpbi8pIHsKKyAgICAjIE9T IFg6IG9wZW4gd2lsbCB1c2Ugc3RhbmRhcmQgcHJlZmVyZW5jZSBmb3IgU1ZHIGZpbGVzLgorICAg IHN5c3RlbSgiL3Vzci9iaW4vb3BlbiIsICRmbmFtZSk7CisgICAgcmV0dXJuOworICB9CisKKyAg IyBTb21lIGtpbmQgb2YgVW5peDsgdHJ5IGdlbmVyaWMgc3ltbGlua3MsIHRoZW4gc3BlY2lmaWMg YnJvd3NlcnMuCisgICMgKFN0b3Agb25jZSB3ZSBmaW5kIG9uZS4pCisgICMgV29ya3MgYmVzdCBp ZiB0aGUgYnJvd3NlciBpcyBhbHJlYWR5IHJ1bm5pbmcuCisgIG15IEBhbHQgPSAoCisgICAgIi9l dGMvYWx0ZXJuYXRpdmVzL2dub21lLXd3dy1icm93c2VyIiwKKyAgICAiL2V0Yy9hbHRlcm5hdGl2 ZXMveC13d3ctYnJvd3NlciIsCisgICAgImdvb2dsZS1jaHJvbWUiLAorICAgICJmaXJlZm94IiwK KyAgKTsKKyAgZm9yZWFjaCBteSAkYiAoQGFsdCkgeworICAgIGlmIChzeXN0ZW0oJGIsICRmbmFt ZSkgPT0gMCkgeworICAgICAgcmV0dXJuOworICAgIH0KKyAgfQorCisgIHByaW50IFNUREVSUiAi Q291bGQgbm90IGxvYWQgd2ViIGJyb3dzZXIuXG4iOworfQorCitzdWIgUnVuS2NhY2hlZ3JpbmQg eworICBteSAkZm5hbWUgPSBzaGlmdDsKKyAgbXkgJGJnID0gc2hpZnQ7ICAgICAgICMgIiIgb3Ig IiAmIiBpZiB3ZSBzaG91bGQgcnVuIGluIGJhY2tncm91bmQKKyAgcHJpbnQgU1RERVJSICJTdGFy dGluZyAnQEtDQUNIRUdSSU5EICIgLiAkZm5hbWUgLiAkYmcgLiAiJ1xuIjsKKyAgc3lzdGVtKFNo ZWxsRXNjYXBlKEBLQ0FDSEVHUklORCwgJGZuYW1lKSAuICRiZyk7Cit9CisKKworIyMjIyMgSW50 ZXJhY3RpdmUgaGVscGVyIHJvdXRpbmVzICMjIyMjCisKK3N1YiBJbnRlcmFjdGl2ZU1vZGUgewor ICAkfCA9IDE7ICAjIE1ha2Ugb3V0cHV0IHVuYnVmZmVyZWQgZm9yIGludGVyYWN0aXZlIG1vZGUK KyAgbXkgKCRvcmlnX3Byb2ZpbGUsICRzeW1ib2xzLCAkbGlicywgJHRvdGFsKSA9IEBfOworCisg IHByaW50IFNUREVSUiAiV2VsY29tZSB0byBqZXByb2YhICBGb3IgaGVscCwgdHlwZSAnaGVscCcu XG4iOworCisgICMgVXNlIFJlYWRMaW5lIGlmIGl0J3MgaW5zdGFsbGVkIGFuZCBpbnB1dCBjb21l cyBmcm9tIGEgY29uc29sZS4KKyAgaWYgKCAtdCBTVERJTiAmJgorICAgICAgICFSZWFkbGluZU1p Z2h0RmFpbCgpICYmCisgICAgICAgZGVmaW5lZChldmFsIHtyZXF1aXJlIFRlcm06OlJlYWRMaW5l fSkgKSB7CisgICAgbXkgJHRlcm0gPSBuZXcgVGVybTo6UmVhZExpbmUgJ2plcHJvZic7CisgICAg d2hpbGUgKCBkZWZpbmVkICgkXyA9ICR0ZXJtLT5yZWFkbGluZSgnKGplcHJvZikgJykpKSB7Cisg ICAgICAkdGVybS0+YWRkaGlzdG9yeSgkXykgaWYgL1xTLzsKKyAgICAgIGlmICghSW50ZXJhY3Rp dmVDb21tYW5kKCRvcmlnX3Byb2ZpbGUsICRzeW1ib2xzLCAkbGlicywgJHRvdGFsLCAkXykpIHsK KyAgICAgICAgbGFzdDsgICAgIyBleGl0IHdoZW4gd2UgZ2V0IGFuIGludGVyYWN0aXZlIGNvbW1h bmQgdG8gcXVpdAorICAgICAgfQorICAgIH0KKyAgfSBlbHNlIHsgICAgICAgIyBkb24ndCBoYXZl IHJlYWRsaW5lCisgICAgd2hpbGUgKDEpIHsKKyAgICAgIHByaW50IFNUREVSUiAiKGplcHJvZikg IjsKKyAgICAgICRfID0gPFNURElOPjsKKyAgICAgIGxhc3QgaWYgISBkZWZpbmVkICRfIDsKKyAg ICAgIHMvXHIvL2c7ICAgICAgICAgIyB0dXJuIHdpbmRvd3MtbG9va2luZyBsaW5lcyBpbnRvIHVu aXgtbG9va2luZyBsaW5lcworCisgICAgICAjIFNhdmUgc29tZSBmbGFncyB0aGF0IG1pZ2h0IGJl IHJlc2V0IGJ5IEludGVyYWN0aXZlQ29tbWFuZCgpCisgICAgICBteSAkc2F2ZV9vcHRfbGluZXMg PSAkbWFpbjo6b3B0X2xpbmVzOworCisgICAgICBpZiAoIUludGVyYWN0aXZlQ29tbWFuZCgkb3Jp Z19wcm9maWxlLCAkc3ltYm9scywgJGxpYnMsICR0b3RhbCwgJF8pKSB7CisgICAgICAgIGxhc3Q7 ICAgICMgZXhpdCB3aGVuIHdlIGdldCBhbiBpbnRlcmFjdGl2ZSBjb21tYW5kIHRvIHF1aXQKKyAg ICAgIH0KKworICAgICAgIyBSZXN0b3JlIGZsYWdzCisgICAgICAkbWFpbjo6b3B0X2xpbmVzID0g JHNhdmVfb3B0X2xpbmVzOworICAgIH0KKyAgfQorfQorCisjIFRha2VzIHR3byBhcmdzOiBvcmln IHByb2ZpbGUsIGFuZCBjb21tYW5kIHRvIHJ1bi4KKyMgUmV0dXJucyAxIGlmIHdlIHNob3VsZCBr ZWVwIGdvaW5nLCBvciAwIGlmIHdlIHdlcmUgYXNrZWQgdG8gcXVpdAorc3ViIEludGVyYWN0aXZl Q29tbWFuZCB7CisgIG15KCRvcmlnX3Byb2ZpbGUsICRzeW1ib2xzLCAkbGlicywgJHRvdGFsLCAk Y29tbWFuZCkgPSBAXzsKKyAgJF8gPSAkY29tbWFuZDsgICAgICAgICAgICAgICAgIyBqdXN0IHRv IG1ha2UgZnV0dXJlIG0vLydzIGVhc2llcgorICBpZiAoIWRlZmluZWQoJF8pKSB7CisgICAgcHJp bnQgU1RERVJSICJcbiI7CisgICAgcmV0dXJuIDA7CisgIH0KKyAgaWYgKG0vXlxzKnF1aXQvKSB7 CisgICAgcmV0dXJuIDA7CisgIH0KKyAgaWYgKG0vXlxzKmhlbHAvKSB7CisgICAgSW50ZXJhY3Rp dmVIZWxwTWVzc2FnZSgpOworICAgIHJldHVybiAxOworICB9CisgICMgQ2xlYXIgYWxsIHRoZSBt b2RlIG9wdGlvbnMgLS0gbW9kZSBpcyBjb250cm9sbGVkIGJ5ICIkY29tbWFuZCIKKyAgJG1haW46 Om9wdF90ZXh0ID0gMDsKKyAgJG1haW46Om9wdF9jYWxsZ3JpbmQgPSAwOworICAkbWFpbjo6b3B0 X2Rpc2FzbSA9IDA7CisgICRtYWluOjpvcHRfbGlzdCA9IDA7CisgICRtYWluOjpvcHRfZ3YgPSAw OworICAkbWFpbjo6b3B0X2V2aW5jZSA9IDA7CisgICRtYWluOjpvcHRfY3VtID0gMDsKKworICBp ZiAobS9eXHMqKHRleHR8dG9wKShcZCopXHMqKC4qKS8pIHsKKyAgICAkbWFpbjo6b3B0X3RleHQg PSAxOworCisgICAgbXkgJGxpbmVfbGltaXQgPSAoJDIgbmUgIiIpID8gaW50KCQyKSA6IDEwOwor CisgICAgbXkgJHJvdXRpbmU7CisgICAgbXkgJGlnbm9yZTsKKyAgICAoJHJvdXRpbmUsICRpZ25v cmUpID0gUGFyc2VJbnRlcmFjdGl2ZUFyZ3MoJDMpOworCisgICAgbXkgJHByb2ZpbGUgPSBQcm9j ZXNzUHJvZmlsZSgkdG90YWwsICRvcmlnX3Byb2ZpbGUsICRzeW1ib2xzLCAiIiwgJGlnbm9yZSk7 CisgICAgbXkgJHJlZHVjZWQgPSBSZWR1Y2VQcm9maWxlKCRzeW1ib2xzLCAkcHJvZmlsZSk7CisK KyAgICAjIEdldCBkZXJpdmVkIHByb2ZpbGVzCisgICAgbXkgJGZsYXQgPSBGbGF0UHJvZmlsZSgk cmVkdWNlZCk7CisgICAgbXkgJGN1bXVsYXRpdmUgPSBDdW11bGF0aXZlUHJvZmlsZSgkcmVkdWNl ZCk7CisKKyAgICBQcmludFRleHQoJHN5bWJvbHMsICRmbGF0LCAkY3VtdWxhdGl2ZSwgJGxpbmVf bGltaXQpOworICAgIHJldHVybiAxOworICB9CisgIGlmIChtL15ccypjYWxsZ3JpbmRccyooW14g XG5dKikvKSB7CisgICAgJG1haW46Om9wdF9jYWxsZ3JpbmQgPSAxOworCisgICAgIyBHZXQgZGVy aXZlZCBwcm9maWxlcworICAgIG15ICRjYWxscyA9IEV4dHJhY3RDYWxscygkc3ltYm9scywgJG9y aWdfcHJvZmlsZSk7CisgICAgbXkgJGZpbGVuYW1lID0gJDE7CisgICAgaWYgKCAkMSBlcSAnJyAp IHsKKyAgICAgICRmaWxlbmFtZSA9IFRlbXBOYW1lKCRtYWluOjpuZXh0X3RtcGZpbGUsICJjYWxs Z3JpbmQiKTsKKyAgICB9CisgICAgUHJpbnRDYWxsZ3JpbmQoJGNhbGxzLCAkZmlsZW5hbWUpOwor ICAgIGlmICggJDEgZXEgJycgKSB7CisgICAgICBSdW5LY2FjaGVncmluZCgkZmlsZW5hbWUsICIg JiAiKTsKKyAgICAgICRtYWluOjpuZXh0X3RtcGZpbGUrKzsKKyAgICB9CisKKyAgICByZXR1cm4g MTsKKyAgfQorICBpZiAobS9eXHMqKHdlYik/bGlzdFxzKiguKykvKSB7CisgICAgbXkgJGh0bWwg PSAoZGVmaW5lZCgkMSkgJiYgKCQxIGVxICJ3ZWIiKSk7CisgICAgJG1haW46Om9wdF9saXN0ID0g MTsKKworICAgIG15ICRyb3V0aW5lOworICAgIG15ICRpZ25vcmU7CisgICAgKCRyb3V0aW5lLCAk aWdub3JlKSA9IFBhcnNlSW50ZXJhY3RpdmVBcmdzKCQyKTsKKworICAgIG15ICRwcm9maWxlID0g UHJvY2Vzc1Byb2ZpbGUoJHRvdGFsLCAkb3JpZ19wcm9maWxlLCAkc3ltYm9scywgIiIsICRpZ25v cmUpOworICAgIG15ICRyZWR1Y2VkID0gUmVkdWNlUHJvZmlsZSgkc3ltYm9scywgJHByb2ZpbGUp OworCisgICAgIyBHZXQgZGVyaXZlZCBwcm9maWxlcworICAgIG15ICRmbGF0ID0gRmxhdFByb2Zp bGUoJHJlZHVjZWQpOworICAgIG15ICRjdW11bGF0aXZlID0gQ3VtdWxhdGl2ZVByb2ZpbGUoJHJl ZHVjZWQpOworCisgICAgUHJpbnRMaXN0aW5nKCR0b3RhbCwgJGxpYnMsICRmbGF0LCAkY3VtdWxh dGl2ZSwgJHJvdXRpbmUsICRodG1sKTsKKyAgICByZXR1cm4gMTsKKyAgfQorICBpZiAobS9eXHMq ZGlzYXNtXHMqKC4rKS8pIHsKKyAgICAkbWFpbjo6b3B0X2Rpc2FzbSA9IDE7CisKKyAgICBteSAk cm91dGluZTsKKyAgICBteSAkaWdub3JlOworICAgICgkcm91dGluZSwgJGlnbm9yZSkgPSBQYXJz ZUludGVyYWN0aXZlQXJncygkMSk7CisKKyAgICAjIFByb2Nlc3MgY3VycmVudCBwcm9maWxlIHRv IGFjY291bnQgZm9yIHZhcmlvdXMgc2V0dGluZ3MKKyAgICBteSAkcHJvZmlsZSA9IFByb2Nlc3NQ cm9maWxlKCR0b3RhbCwgJG9yaWdfcHJvZmlsZSwgJHN5bWJvbHMsICIiLCAkaWdub3JlKTsKKyAg ICBteSAkcmVkdWNlZCA9IFJlZHVjZVByb2ZpbGUoJHN5bWJvbHMsICRwcm9maWxlKTsKKworICAg ICMgR2V0IGRlcml2ZWQgcHJvZmlsZXMKKyAgICBteSAkZmxhdCA9IEZsYXRQcm9maWxlKCRyZWR1 Y2VkKTsKKyAgICBteSAkY3VtdWxhdGl2ZSA9IEN1bXVsYXRpdmVQcm9maWxlKCRyZWR1Y2VkKTsK KworICAgIFByaW50RGlzYXNzZW1ibHkoJGxpYnMsICRmbGF0LCAkY3VtdWxhdGl2ZSwgJHJvdXRp bmUpOworICAgIHJldHVybiAxOworICB9CisgIGlmIChtL15ccyooZ3Z8d2VifGV2aW5jZSlccyoo LiopLykgeworICAgICRtYWluOjpvcHRfZ3YgPSAwOworICAgICRtYWluOjpvcHRfZXZpbmNlID0g MDsKKyAgICAkbWFpbjo6b3B0X3dlYiA9IDA7CisgICAgaWYgKCQxIGVxICJndiIpIHsKKyAgICAg ICRtYWluOjpvcHRfZ3YgPSAxOworICAgIH0gZWxzaWYgKCQxIGVxICJldmluY2UiKSB7CisgICAg ICAkbWFpbjo6b3B0X2V2aW5jZSA9IDE7CisgICAgfSBlbHNpZiAoJDEgZXEgIndlYiIpIHsKKyAg ICAgICRtYWluOjpvcHRfd2ViID0gMTsKKyAgICB9CisKKyAgICBteSAkZm9jdXM7CisgICAgbXkg JGlnbm9yZTsKKyAgICAoJGZvY3VzLCAkaWdub3JlKSA9IFBhcnNlSW50ZXJhY3RpdmVBcmdzKCQy KTsKKworICAgICMgUHJvY2VzcyBjdXJyZW50IHByb2ZpbGUgdG8gYWNjb3VudCBmb3IgdmFyaW91 cyBzZXR0aW5ncworICAgIG15ICRwcm9maWxlID0gUHJvY2Vzc1Byb2ZpbGUoJHRvdGFsLCAkb3Jp Z19wcm9maWxlLCAkc3ltYm9scywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRm b2N1cywgJGlnbm9yZSk7CisgICAgbXkgJHJlZHVjZWQgPSBSZWR1Y2VQcm9maWxlKCRzeW1ib2xz LCAkcHJvZmlsZSk7CisKKyAgICAjIEdldCBkZXJpdmVkIHByb2ZpbGVzCisgICAgbXkgJGZsYXQg PSBGbGF0UHJvZmlsZSgkcmVkdWNlZCk7CisgICAgbXkgJGN1bXVsYXRpdmUgPSBDdW11bGF0aXZl UHJvZmlsZSgkcmVkdWNlZCk7CisKKyAgICBpZiAoUHJpbnREb3QoJG1haW46OnByb2csICRzeW1i b2xzLCAkcHJvZmlsZSwgJGZsYXQsICRjdW11bGF0aXZlLCAkdG90YWwpKSB7CisgICAgICBpZiAo JG1haW46Om9wdF9ndikgeworICAgICAgICBSdW5HVihUZW1wTmFtZSgkbWFpbjo6bmV4dF90bXBm aWxlLCAicHMiKSwgIiAmIik7CisgICAgICB9IGVsc2lmICgkbWFpbjo6b3B0X2V2aW5jZSkgewor ICAgICAgICBSdW5FdmluY2UoVGVtcE5hbWUoJG1haW46Om5leHRfdG1wZmlsZSwgInBkZiIpLCAi ICYiKTsKKyAgICAgIH0gZWxzaWYgKCRtYWluOjpvcHRfd2ViKSB7CisgICAgICAgIFJ1bldlYihU ZW1wTmFtZSgkbWFpbjo6bmV4dF90bXBmaWxlLCAic3ZnIikpOworICAgICAgfQorICAgICAgJG1h aW46Om5leHRfdG1wZmlsZSsrOworICAgIH0KKyAgICByZXR1cm4gMTsKKyAgfQorICBpZiAobS9e XHMqJC8pIHsKKyAgICByZXR1cm4gMTsKKyAgfQorICBwcmludCBTVERFUlIgIlVua25vd24gY29t bWFuZDogdHJ5ICdoZWxwJy5cbiI7CisgIHJldHVybiAxOworfQorCisKK3N1YiBQcm9jZXNzUHJv ZmlsZSB7CisgIG15ICR0b3RhbF9jb3VudCA9IHNoaWZ0OworICBteSAkb3JpZ19wcm9maWxlID0g c2hpZnQ7CisgIG15ICRzeW1ib2xzID0gc2hpZnQ7CisgIG15ICRmb2N1cyA9IHNoaWZ0OworICBt eSAkaWdub3JlID0gc2hpZnQ7CisKKyAgIyBQcm9jZXNzIGN1cnJlbnQgcHJvZmlsZSB0byBhY2Nv dW50IGZvciB2YXJpb3VzIHNldHRpbmdzCisgIG15ICRwcm9maWxlID0gJG9yaWdfcHJvZmlsZTsK KyAgcHJpbnRmKCJUb3RhbDogJXMgJXNcbiIsIFVucGFyc2UoJHRvdGFsX2NvdW50KSwgVW5pdHMo KSk7CisgIGlmICgkZm9jdXMgbmUgJycpIHsKKyAgICAkcHJvZmlsZSA9IEZvY3VzUHJvZmlsZSgk c3ltYm9scywgJHByb2ZpbGUsICRmb2N1cyk7CisgICAgbXkgJGZvY3VzX2NvdW50ID0gVG90YWxQ cm9maWxlKCRwcm9maWxlKTsKKyAgICBwcmludGYoIkFmdGVyIGZvY3VzaW5nIG9uICclcyc6ICVz ICVzIG9mICVzICglMC4xZiUlKVxuIiwKKyAgICAgICAgICAgJGZvY3VzLAorICAgICAgICAgICBV bnBhcnNlKCRmb2N1c19jb3VudCksIFVuaXRzKCksCisgICAgICAgICAgIFVucGFyc2UoJHRvdGFs X2NvdW50KSwgKCRmb2N1c19jb3VudCoxMDAuMCkgLyAkdG90YWxfY291bnQpOworICB9CisgIGlm ICgkaWdub3JlIG5lICcnKSB7CisgICAgJHByb2ZpbGUgPSBJZ25vcmVQcm9maWxlKCRzeW1ib2xz LCAkcHJvZmlsZSwgJGlnbm9yZSk7CisgICAgbXkgJGlnbm9yZV9jb3VudCA9IFRvdGFsUHJvZmls ZSgkcHJvZmlsZSk7CisgICAgcHJpbnRmKCJBZnRlciBpZ25vcmluZyAnJXMnOiAlcyAlcyBvZiAl cyAoJTAuMWYlJSlcbiIsCisgICAgICAgICAgICRpZ25vcmUsCisgICAgICAgICAgIFVucGFyc2Uo JGlnbm9yZV9jb3VudCksIFVuaXRzKCksCisgICAgICAgICAgIFVucGFyc2UoJHRvdGFsX2NvdW50 KSwKKyAgICAgICAgICAgKCRpZ25vcmVfY291bnQqMTAwLjApIC8gJHRvdGFsX2NvdW50KTsKKyAg fQorCisgIHJldHVybiAkcHJvZmlsZTsKK30KKworc3ViIEludGVyYWN0aXZlSGVscE1lc3NhZ2Ug eworICBwcmludCBTVERFUlIgPDxFTkRPRkhFTFA7CitJbnRlcmFjdGl2ZSBqZXByb2YgbW9kZQor CitDb21tYW5kczoKKyAgZ3YKKyAgZ3YgW2ZvY3VzXSBbLWlnbm9yZTFdIFstaWdub3JlMl0KKyAg ICAgIFNob3cgZ3JhcGhpY2FsIGhpZXJhcmNoaWNhbCBkaXNwbGF5IG9mIGN1cnJlbnQgcHJvZmls ZS4gIFdpdGhvdXQKKyAgICAgIGFueSBhcmd1bWVudHMsIHNob3dzIGFsbCBzYW1wbGVzIGluIHRo ZSBwcm9maWxlLiAgV2l0aCB0aGUgb3B0aW9uYWwKKyAgICAgICJmb2N1cyIgYXJndW1lbnQsIHJl c3RyaWN0cyB0aGUgc2FtcGxlcyBzaG93biB0byBqdXN0IHRob3NlIHdoZXJlCisgICAgICB0aGUg ImZvY3VzIiByZWd1bGFyIGV4cHJlc3Npb24gbWF0Y2hlcyBhIHJvdXRpbmUgbmFtZSBvbiB0aGUg c3RhY2sKKyAgICAgIHRyYWNlLgorCisgIHdlYgorICB3ZWIgW2ZvY3VzXSBbLWlnbm9yZTFdIFst aWdub3JlMl0KKyAgICAgIExpa2UgR1YsIGJ1dCBkaXNwbGF5cyBwcm9maWxlIGluIHlvdXIgd2Vi IGJyb3dzZXIgaW5zdGVhZCBvZiB1c2luZworICAgICAgR2hvc3R2aWV3LiBXb3JrcyBiZXN0IGlm IHlvdXIgd2ViIGJyb3dzZXIgaXMgYWxyZWFkeSBydW5uaW5nLgorICAgICAgVG8gY2hhbmdlIHRo ZSBicm93c2VyIHRoYXQgZ2V0cyB1c2VkOgorICAgICAgT24gTGludXgsIHNldCB0aGUgL2V0Yy9h bHRlcm5hdGl2ZXMvZ25vbWUtd3d3LWJyb3dzZXIgc3ltbGluay4KKyAgICAgIE9uIE9TIFgsIGNo YW5nZSB0aGUgRmluZGVyIGFzc29jaWF0aW9uIGZvciBTVkcgZmlsZXMuCisKKyAgbGlzdCBbcm91 dGluZV9yZWdleHBdIFstaWdub3JlMV0gWy1pZ25vcmUyXQorICAgICAgU2hvdyBzb3VyY2UgbGlz dGluZyBvZiByb3V0aW5lcyB3aG9zZSBuYW1lcyBtYXRjaCAicm91dGluZV9yZWdleHAiCisKKyAg d2VibGlzdCBbcm91dGluZV9yZWdleHBdIFstaWdub3JlMV0gWy1pZ25vcmUyXQorICAgICBEaXNw bGF5cyBhIHNvdXJjZSBsaXN0aW5nIG9mIHJvdXRpbmVzIHdob3NlIG5hbWVzIG1hdGNoICJyb3V0 aW5lX3JlZ2V4cCIKKyAgICAgaW4gYSB3ZWIgYnJvd3Nlci4gIFlvdSBjYW4gY2xpY2sgb24gc291 cmNlIGxpbmVzIHRvIHZpZXcgdGhlCisgICAgIGNvcnJlc3BvbmRpbmcgZGlzYXNzZW1ibHkuCisK KyAgdG9wIFstLWN1bV0gWy1pZ25vcmUxXSBbLWlnbm9yZTJdCisgIHRvcDIwIFstLWN1bV0gWy1p Z25vcmUxXSBbLWlnbm9yZTJdCisgIHRvcDM3IFstLWN1bV0gWy1pZ25vcmUxXSBbLWlnbm9yZTJd CisgICAgICBTaG93IHRvcCBsaW5lcyBvcmRlcmVkIGJ5IGZsYXQgcHJvZmlsZSBjb3VudCwgb3Ig Y3VtdWxhdGl2ZSBjb3VudAorICAgICAgaWYgLS1jdW0gaXMgc3BlY2lmaWVkLiAgSWYgYSBudW1i ZXIgaXMgcHJlc2VudCBhZnRlciAndG9wJywgdGhlCisgICAgICB0b3AgSyByb3V0aW5lcyB3aWxs IGJlIHNob3duIChkZWZhdWx0cyB0byBzaG93aW5nIHRoZSB0b3AgMTApCisKKyAgZGlzYXNtIFty b3V0aW5lX3JlZ2V4cF0gWy1pZ25vcmUxXSBbLWlnbm9yZTJdCisgICAgICBTaG93IGRpc2Fzc2Vt Ymx5IG9mIHJvdXRpbmVzIHdob3NlIG5hbWVzIG1hdGNoICJyb3V0aW5lX3JlZ2V4cCIsCisgICAg ICBhbm5vdGF0ZWQgd2l0aCBzYW1wbGUgY291bnRzLgorCisgIGNhbGxncmluZAorICBjYWxsZ3Jp bmQgW2ZpbGVuYW1lXQorICAgICAgR2VuZXJhdGVzIGNhbGxncmluZCBmaWxlLiBJZiBubyBmaWxl bmFtZSBpcyBnaXZlbiwga2NhY2hlZ3JpbmQgaXMgY2FsbGVkLgorCisgIGhlbHAgLSBUaGlzIGxp c3RpbmcKKyAgcXVpdCBvciBeRCAtIEVuZCBqZXByb2YKKworRm9yIGNvbW1hbmRzIHRoYXQgYWNj ZXB0IG9wdGlvbmFsIC1pZ25vcmUgdGFncywgc2FtcGxlcyB3aGVyZSBhbnkgcm91dGluZSBpbgor dGhlIHN0YWNrIHRyYWNlIG1hdGNoZXMgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBpbiBhbnkgb2Yg dGhlIC1pZ25vcmUKK3BhcmFtZXRlcnMgd2lsbCBiZSBpZ25vcmVkLgorCitGdXJ0aGVyIHBwcm9m IGRldGFpbHMgYXJlIGF2YWlsYWJsZSBhdCB0aGlzIGxvY2F0aW9uIChvciBvbmUgc2ltaWxhcik6 CisKKyAvdXNyL2RvYy9ncGVyZnRvb2xzLSRQUFJPRl9WRVJTSU9OL2NwdV9wcm9maWxlci5odG1s CisgL3Vzci9kb2MvZ3BlcmZ0b29scy0kUFBST0ZfVkVSU0lPTi9oZWFwX3Byb2ZpbGVyLmh0bWwK KworRU5ET0ZIRUxQCit9CitzdWIgUGFyc2VJbnRlcmFjdGl2ZUFyZ3MgeworICBteSAkYXJncyA9 IHNoaWZ0OworICBteSAkZm9jdXMgPSAiIjsKKyAgbXkgJGlnbm9yZSA9ICIiOworICBteSBAeCA9 IHNwbGl0KC8gKy8sICRhcmdzKTsKKyAgZm9yZWFjaCAkYSAoQHgpIHsKKyAgICBpZiAoJGEgPX4g bS9eKC0tfC0pbGluZXMkLykgeworICAgICAgJG1haW46Om9wdF9saW5lcyA9IDE7CisgICAgfSBl bHNpZiAoJGEgPX4gbS9eKC0tfC0pY3VtJC8pIHsKKyAgICAgICRtYWluOjpvcHRfY3VtID0gMTsK KyAgICB9IGVsc2lmICgkYSA9fiBtL14tKC4qKS8pIHsKKyAgICAgICRpZ25vcmUgLj0gKCgkaWdu b3JlIG5lICIiKSA/ICJ8IiA6ICIiICkgLiAkMTsKKyAgICB9IGVsc2UgeworICAgICAgJGZvY3Vz IC49ICgoJGZvY3VzIG5lICIiKSA/ICJ8IiA6ICIiICkgLiAkYTsKKyAgICB9CisgIH0KKyAgaWYg KCRpZ25vcmUgbmUgIiIpIHsKKyAgICBwcmludCBTVERFUlIgIklnbm9yaW5nIHNhbXBsZXMgaW4g Y2FsbCBzdGFja3MgdGhhdCBtYXRjaCAnJGlnbm9yZSdcbiI7CisgIH0KKyAgcmV0dXJuICgkZm9j dXMsICRpZ25vcmUpOworfQorCisjIyMjIyBPdXRwdXQgY29kZSAjIyMjIworCitzdWIgVGVtcE5h bWUgeworICBteSAkZm51bSA9IHNoaWZ0OworICBteSAkZXh0ID0gc2hpZnQ7CisgIG15ICRmaWxl ID0gIiRtYWluOjp0bXBmaWxlX3BzLiRmbnVtLiRleHQiOworICAkbWFpbjo6dGVtcG5hbWVzeyRm aWxlfSA9IDE7CisgIHJldHVybiAkZmlsZTsKK30KKworIyBQcmludCBwcm9maWxlIGRhdGEgaW4g cGFja2VkIGJpbmFyeSBmb3JtYXQgKDY0LWJpdCkgdG8gc3RhbmRhcmQgb3V0CitzdWIgUHJpbnRQ cm9maWxlRGF0YSB7CisgIG15ICRwcm9maWxlID0gc2hpZnQ7CisKKyAgIyBwcmludCBoZWFkZXIg KDY0LWJpdCBzdHlsZSkKKyAgIyAoemVybykgKGhlYWRlci1zaXplKSAodmVyc2lvbikgKHNhbXBs ZS1wZXJpb2QpICh6ZXJvKQorICBwcmludCBwYWNrKCdMKicsIDAsIDAsIDMsIDAsIDAsIDAsIDEs IDAsIDAsIDApOworCisgIGZvcmVhY2ggbXkgJGsgKGtleXMoJXskcHJvZmlsZX0pKSB7CisgICAg bXkgJGNvdW50ID0gJHByb2ZpbGUtPnska307CisgICAgbXkgQGFkZHJzID0gc3BsaXQoL1xuLywg JGspOworICAgIGlmICgkI2FkZHJzID49IDApIHsKKyAgICAgIG15ICRkZXB0aCA9ICQjYWRkcnMg KyAxOworICAgICAgIyBpbnQoZm9vIC8gMioqMzIpIGlzIHRoZSBvbmx5IHJlbGlhYmxlIHdheSB0 byBnZXQgcmlkIG9mIGJvdHRvbQorICAgICAgIyAzMiBiaXRzIG9uIGJvdGggMzItIGFuZCA2NC1i aXQgc3lzdGVtcy4KKyAgICAgIHByaW50IHBhY2soJ0wqJywgJGNvdW50ICYgMHhGRkZGRkZGRiwg aW50KCRjb3VudCAvIDIqKjMyKSk7CisgICAgICBwcmludCBwYWNrKCdMKicsICRkZXB0aCAmIDB4 RkZGRkZGRkYsIGludCgkZGVwdGggLyAyKiozMikpOworCisgICAgICBmb3JlYWNoIG15ICRmdWxs X2FkZHIgKEBhZGRycykgeworICAgICAgICBteSAkYWRkciA9ICRmdWxsX2FkZHI7CisgICAgICAg ICRhZGRyID1+IHMvMHgwKi8vOyAgIyBzdHJpcCBvZmYgbGVhZGluZyAweCwgemVyb2VzCisgICAg ICAgIGlmIChsZW5ndGgoJGFkZHIpID4gMTYpIHsKKyAgICAgICAgICBwcmludCBTVERFUlIgIklu dmFsaWQgYWRkcmVzcyBpbiBwcm9maWxlOiAkZnVsbF9hZGRyXG4iOworICAgICAgICAgIG5leHQ7 CisgICAgICAgIH0KKyAgICAgICAgbXkgJGxvd19hZGRyID0gc3Vic3RyKCRhZGRyLCAtOCk7ICAg ICAgICMgZ2V0IGxhc3QgOCBoZXggY2hhcnMKKyAgICAgICAgbXkgJGhpZ2hfYWRkciA9IHN1YnN0 cigkYWRkciwgLTE2LCA4KTsgICMgZ2V0IHVwIHRvIDggbW9yZSBoZXggY2hhcnMKKyAgICAgICAg cHJpbnQgcGFjaygnTConLCBoZXgoJzB4JyAuICRsb3dfYWRkciksIGhleCgnMHgnIC4gJGhpZ2hf YWRkcikpOworICAgICAgfQorICAgIH0KKyAgfQorfQorCisjIFByaW50IHN5bWJvbHMgYW5kIHBy b2ZpbGUgZGF0YQorc3ViIFByaW50U3ltYm9saXplZFByb2ZpbGUgeworICBteSAkc3ltYm9scyA9 IHNoaWZ0OworICBteSAkcHJvZmlsZSA9IHNoaWZ0OworICBteSAkcHJvZyA9IHNoaWZ0OworCisg ICRTWU1CT0xfUEFHRSA9fiBtLFteL10rJCw7ICAgICMgbWF0Y2hlcyBldmVyeXRoaW5nIGFmdGVy IHRoZSBsYXN0IHNsYXNoCisgIG15ICRzeW1ib2xfbWFya2VyID0gJCY7CisKKyAgcHJpbnQgJy0t LSAnLCAkc3ltYm9sX21hcmtlciwgIlxuIjsKKyAgaWYgKGRlZmluZWQoJHByb2cpKSB7CisgICAg cHJpbnQgJ2JpbmFyeT0nLCAkcHJvZywgIlxuIjsKKyAgfQorICB3aGlsZSAobXkgKCRwYywgJG5h bWUpID0gZWFjaCgleyRzeW1ib2xzfSkpIHsKKyAgICBteSAkc2VwID0gJyAnOworICAgIHByaW50 ICcweCcsICRwYzsKKyAgICAjIFdlIGhhdmUgYSBsaXN0IG9mIGZ1bmN0aW9uIG5hbWVzLCB3aGlj aCBpbmNsdWRlIHRoZSBpbmxpbmVkCisgICAgIyBjYWxscy4gIFRoZXkgYXJlIHNlcGFyYXRlZCAo YW5kIHRlcm1pbmF0ZWQpIGJ5IC0tLCB3aGljaCBpcworICAgICMgaWxsZWdhbCBpbiBmdW5jdGlv biBuYW1lcy4KKyAgICBmb3IgKG15ICRqID0gMjsgJGogPD0gJCN7JG5hbWV9OyAkaiArPSAzKSB7 CisgICAgICBwcmludCAkc2VwLCAkbmFtZS0+WyRqXTsKKyAgICAgICRzZXAgPSAnLS0nOworICAg IH0KKyAgICBwcmludCAiXG4iOworICB9CisgIHByaW50ICctLS0nLCAiXG4iOworCisgIG15ICRw cm9maWxlX21hcmtlcjsKKyAgaWYgKCRtYWluOjpwcm9maWxlX3R5cGUgZXEgJ2hlYXAnKSB7Cisg ICAgJEhFQVBfUEFHRSA9fiBtLFteL10rJCw7ICAgICMgbWF0Y2hlcyBldmVyeXRoaW5nIGFmdGVy IHRoZSBsYXN0IHNsYXNoCisgICAgJHByb2ZpbGVfbWFya2VyID0gJCY7CisgIH0gZWxzaWYgKCRt YWluOjpwcm9maWxlX3R5cGUgZXEgJ2dyb3d0aCcpIHsKKyAgICAkR1JPV1RIX1BBR0UgPX4gbSxb Xi9dKyQsOyAgICAjIG1hdGNoZXMgZXZlcnl0aGluZyBhZnRlciB0aGUgbGFzdCBzbGFzaAorICAg ICRwcm9maWxlX21hcmtlciA9ICQmOworICB9IGVsc2lmICgkbWFpbjo6cHJvZmlsZV90eXBlIGVx ICdjb250ZW50aW9uJykgeworICAgICRDT05URU5USU9OX1BBR0UgPX4gbSxbXi9dKyQsOyAgICAj IG1hdGNoZXMgZXZlcnl0aGluZyBhZnRlciB0aGUgbGFzdCBzbGFzaAorICAgICRwcm9maWxlX21h cmtlciA9ICQmOworICB9IGVsc2UgeyAjIGVsc2lmICgkbWFpbjo6cHJvZmlsZV90eXBlIGVxICdj cHUnKQorICAgICRQUk9GSUxFX1BBR0UgPX4gbSxbXi9dKyQsOyAgICAjIG1hdGNoZXMgZXZlcnl0 aGluZyBhZnRlciB0aGUgbGFzdCBzbGFzaAorICAgICRwcm9maWxlX21hcmtlciA9ICQmOworICB9 CisKKyAgcHJpbnQgJy0tLSAnLCAkcHJvZmlsZV9tYXJrZXIsICJcbiI7CisgIGlmIChkZWZpbmVk KCRtYWluOjpjb2xsZWN0ZWRfcHJvZmlsZSkpIHsKKyAgICAjIGlmIHVzZWQgd2l0aCByZW1vdGUg ZmV0Y2gsIHNpbXBseSBkdW1wIHRoZSBjb2xsZWN0ZWQgcHJvZmlsZSB0byBvdXRwdXQuCisgICAg b3BlbihTUkMsICI8JG1haW46OmNvbGxlY3RlZF9wcm9maWxlIik7CisgICAgd2hpbGUgKDxTUkM+ KSB7CisgICAgICBwcmludCAkXzsKKyAgICB9CisgICAgY2xvc2UoU1JDKTsKKyAgfSBlbHNlIHsK KyAgICAjIC0tcmF3L2h0dHA6IEZvciBldmVyeXRoaW5nIHRvIHdvcmsgY29ycmVjdGx5IGZvciBu b24tcmVtb3RlIHByb2ZpbGVzLCB3ZQorICAgICMgd291bGQgbmVlZCB0byBleHRlbmQgUHJpbnRQ cm9maWxlRGF0YSgpIHRvIGhhbmRsZSBhbGwgcG9zc2libGUgcHJvZmlsZQorICAgICMgdHlwZXMs IHJlLWVuYWJsZSB0aGUgY29kZSB0aGF0IGlzIGN1cnJlbnRseSBkaXNhYmxlZCBpbiBSZWFkQ1BV UHJvZmlsZSgpCisgICAgIyBhbmQgRml4Q2FsbGVyQWRkcmVzc2VzKCksIGFuZCByZW1vdmUgdGhl IHJlbW90ZSBwcm9maWxlIGR1bXBpbmcgY29kZSBpbgorICAgICMgdGhlIGJsb2NrIGFib3ZlLgor ICAgIGRpZSAiLS1yYXcvaHR0cDogamVwcm9mIGNhbiBvbmx5IGR1bXAgcmVtb3RlIHByb2ZpbGVz IGZvciAtLXJhd1xuIjsKKyAgICAjIGR1bXAgYSBjcHUtZm9ybWF0IHByb2ZpbGUgdG8gc3RhbmRh cmQgb3V0CisgICAgUHJpbnRQcm9maWxlRGF0YSgkcHJvZmlsZSk7CisgIH0KK30KKworIyBQcmlu dCB0ZXh0IG91dHB1dAorc3ViIFByaW50VGV4dCB7CisgIG15ICRzeW1ib2xzID0gc2hpZnQ7Cisg IG15ICRmbGF0ID0gc2hpZnQ7CisgIG15ICRjdW11bGF0aXZlID0gc2hpZnQ7CisgIG15ICRsaW5l X2xpbWl0ID0gc2hpZnQ7CisKKyAgbXkgJHRvdGFsID0gVG90YWxQcm9maWxlKCRmbGF0KTsKKwor ICAjIFdoaWNoIHByb2ZpbGUgdG8gc29ydCBieT8KKyAgbXkgJHMgPSAkbWFpbjo6b3B0X2N1bSA/ ICRjdW11bGF0aXZlIDogJGZsYXQ7CisKKyAgbXkgJHJ1bm5pbmdfc3VtID0gMDsKKyAgbXkgJGxp bmVzID0gMDsKKyAgZm9yZWFjaCBteSAkayAoc29ydCB7IEdldEVudHJ5KCRzLCAkYikgPD0+IEdl dEVudHJ5KCRzLCAkYSkgfHwgJGEgY21wICRiIH0KKyAgICAgICAgICAgICAgICAga2V5cygleyRj dW11bGF0aXZlfSkpIHsKKyAgICBteSAkZiA9IEdldEVudHJ5KCRmbGF0LCAkayk7CisgICAgbXkg JGMgPSBHZXRFbnRyeSgkY3VtdWxhdGl2ZSwgJGspOworICAgICRydW5uaW5nX3N1bSArPSAkZjsK KworICAgIG15ICRzeW0gPSAkazsKKyAgICBpZiAoZXhpc3RzKCRzeW1ib2xzLT57JGt9KSkgewor ICAgICAgJHN5bSA9ICRzeW1ib2xzLT57JGt9LT5bMF0gLiAiICIgLiAkc3ltYm9scy0+eyRrfS0+ WzFdOworICAgICAgaWYgKCRtYWluOjpvcHRfYWRkcmVzc2VzKSB7CisgICAgICAgICRzeW0gPSAk ayAuICIgIiAuICRzeW07CisgICAgICB9CisgICAgfQorCisgICAgaWYgKCRmICE9IDAgfHwgJGMg IT0gMCkgeworICAgICAgcHJpbnRmKCIlOHMgJTZzICU2cyAlOHMgJTZzICVzXG4iLAorICAgICAg ICAgICAgIFVucGFyc2UoJGYpLAorICAgICAgICAgICAgIFBlcmNlbnQoJGYsICR0b3RhbCksCisg ICAgICAgICAgICAgUGVyY2VudCgkcnVubmluZ19zdW0sICR0b3RhbCksCisgICAgICAgICAgICAg VW5wYXJzZSgkYyksCisgICAgICAgICAgICAgUGVyY2VudCgkYywgJHRvdGFsKSwKKyAgICAgICAg ICAgICAkc3ltKTsKKyAgICB9CisgICAgJGxpbmVzKys7CisgICAgbGFzdCBpZiAoJGxpbmVfbGlt aXQgPj0gMCAmJiAkbGluZXMgPj0gJGxpbmVfbGltaXQpOworICB9Cit9CisKKyMgQ2FsbGdyaW5k IGZvcm1hdCBoYXMgYSBjb21wcmVzc2lvbiBmb3IgcmVwZWF0ZWQgZnVuY3Rpb24gYW5kIGZpbGUK KyMgbmFtZXMuICBZb3Ugc2hvdyB0aGUgbmFtZSB0aGUgZmlyc3QgdGltZSwgYW5kIGp1c3QgdXNl IGl0cyBudW1iZXIKKyMgc3Vic2VxdWVudGx5LiAgVGhpcyBjYW4gY3V0IGRvd24gdGhlIGZpbGUg dG8gYWJvdXQgYSB0aGlyZCBvciBhCisjIHF1YXJ0ZXIgb2YgaXRzIHVuY29tcHJlc3NlZCBzaXpl LiAgJGtleSBhbmQgJHZhbCBhcmUgdGhlIGtleS92YWx1ZQorIyBwYWlyIHRoYXQgd291bGQgbm9y bWFsbHkgYmUgcHJpbnRlZCBieSBjYWxsZ3JpbmQ7ICRtYXAgaXMgYSBtYXAgZnJvbQorIyB2YWx1 ZSB0byBudW1iZXIuCitzdWIgQ29tcHJlc3NlZENHTmFtZSB7CisgIG15KCRrZXksICR2YWwsICRt YXApID0gQF87CisgIG15ICRpZHggPSAkbWFwLT57JHZhbH07CisgICMgRm9yIHZlcnkgc2hvcnQg a2V5cywgcHJvdmlkaW5nIGFuIGluZGV4IGh1cnRzIHJhdGhlciB0aGFuIGhlbHBzLgorICBpZiAo bGVuZ3RoKCR2YWwpIDw9IDMpIHsKKyAgICByZXR1cm4gIiRrZXk9JHZhbFxuIjsKKyAgfSBlbHNp ZiAoZGVmaW5lZCgkaWR4KSkgeworICAgIHJldHVybiAiJGtleT0oJGlkeClcbiI7CisgIH0gZWxz ZSB7CisgICAgIyBzY2FsYXIoa2V5cyAkbWFwKSBnaXZlcyB0aGUgbnVtYmVyIG9mIGl0ZW1zIGlu IHRoZSBtYXAuCisgICAgJGlkeCA9IHNjYWxhcihrZXlzKCV7JG1hcH0pKSArIDE7CisgICAgJG1h cC0+eyR2YWx9ID0gJGlkeDsKKyAgICByZXR1cm4gIiRrZXk9KCRpZHgpICR2YWxcbiI7CisgIH0K K30KKworIyBQcmludCB0aGUgY2FsbCBncmFwaCBpbiBhIHdheSB0aGF0J3Mgc3VpdGVhYmxlIGZv ciBjYWxsZ3JpbmQuCitzdWIgUHJpbnRDYWxsZ3JpbmQgeworICBteSAkY2FsbHMgPSBzaGlmdDsK KyAgbXkgJGZpbGVuYW1lOworICBteSAlZmlsZW5hbWVfdG9faW5kZXhfbWFwOworICBteSAlZm5u YW1lX3RvX2luZGV4X21hcDsKKworICBpZiAoJG1haW46Om9wdF9pbnRlcmFjdGl2ZSkgeworICAg ICRmaWxlbmFtZSA9IHNoaWZ0OworICAgIHByaW50IFNUREVSUiAiV3JpdGluZyBjYWxsZ3JpbmQg ZmlsZSB0byAnJGZpbGVuYW1lJy5cbiIKKyAgfSBlbHNlIHsKKyAgICAkZmlsZW5hbWUgPSAiJlNU RE9VVCI7CisgIH0KKyAgb3BlbihDRywgIj4kZmlsZW5hbWUiKTsKKyAgcHJpbnRmIENHICgiZXZl bnRzOiBIaXRzXG5cbiIpOworICBmb3JlYWNoIG15ICRjYWxsICggbWFwIHsgJF8tPlswXSB9Cisg ICAgICAgICAgICAgICAgICAgICBzb3J0IHsgJGEtPlsxXSBjbXAgJGIgLT5bMV0gfHwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAkYS0+WzJdIDw9PiAkYi0+WzJdIH0KKyAgICAgICAgICAg ICAgICAgICAgIG1hcCB7IC8oW146XSspOihcZCspOihbXiBdKykoIC0+IChbXjpdKyk6KFxkKyk6 KC4rKSk/LzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFskXywgJDEsICQyXSB9CisgICAg ICAgICAgICAgICAgICAgICBrZXlzICUkY2FsbHMgKSB7CisgICAgbXkgJGNvdW50ID0gaW50KCRj YWxscy0+eyRjYWxsfSk7CisgICAgJGNhbGwgPX4gLyhbXjpdKyk6KFxkKyk6KFteIF0rKSggLT4g KFteOl0rKTooXGQrKTooLispKT8vOworICAgIG15ICggJGNhbGxlcl9maWxlLCAkY2FsbGVyX2xp bmUsICRjYWxsZXJfZnVuY3Rpb24sCisgICAgICAgICAkY2FsbGVlX2ZpbGUsICRjYWxsZWVfbGlu ZSwgJGNhbGxlZV9mdW5jdGlvbiApID0KKyAgICAgICAoICQxLCAkMiwgJDMsICQ1LCAkNiwgJDcg KTsKKworICAgICMgVE9ETyhjc2lsdmVycyk6IGZvciBiZXR0ZXIgY29tcHJlc3Npb24sIGNvbGxl Y3QgYWxsIHRoZQorICAgICMgY2FsbGVyL2NhbGxlZV9maWxlcyBhbmQgZnVuY3Rpb25zIGZpcnN0 LCBiZWZvcmUgcHJpbnRpbmcKKyAgICAjIGFueXRoaW5nLCBhbmQgb25seSBjb21wcmVzcyB0aG9z ZSByZWZlcmVuY2VkIG1vcmUgdGhhbiBvbmNlLgorICAgIHByaW50ZiBDRyBDb21wcmVzc2VkQ0dO YW1lKCJmbCIsICRjYWxsZXJfZmlsZSwgXCVmaWxlbmFtZV90b19pbmRleF9tYXApOworICAgIHBy aW50ZiBDRyBDb21wcmVzc2VkQ0dOYW1lKCJmbiIsICRjYWxsZXJfZnVuY3Rpb24sIFwlZm5uYW1l X3RvX2luZGV4X21hcCk7CisgICAgaWYgKGRlZmluZWQgJDYpIHsKKyAgICAgIHByaW50ZiBDRyBD b21wcmVzc2VkQ0dOYW1lKCJjZmwiLCAkY2FsbGVlX2ZpbGUsIFwlZmlsZW5hbWVfdG9faW5kZXhf bWFwKTsKKyAgICAgIHByaW50ZiBDRyBDb21wcmVzc2VkQ0dOYW1lKCJjZm4iLCAkY2FsbGVlX2Z1 bmN0aW9uLCBcJWZubmFtZV90b19pbmRleF9tYXApOworICAgICAgcHJpbnRmIENHICgiY2FsbHM9 JGNvdW50ICRjYWxsZWVfbGluZVxuIik7CisgICAgfQorICAgIHByaW50ZiBDRyAoIiRjYWxsZXJf bGluZSAkY291bnRcblxuIik7CisgIH0KK30KKworIyBQcmludCBkaXNhc3NlbWJseSBmb3IgYWxs IGFsbCByb3V0aW5lcyB0aGF0IG1hdGNoICRtYWluOjpvcHRfZGlzYXNtCitzdWIgUHJpbnREaXNh c3NlbWJseSB7CisgIG15ICRsaWJzID0gc2hpZnQ7CisgIG15ICRmbGF0ID0gc2hpZnQ7CisgIG15 ICRjdW11bGF0aXZlID0gc2hpZnQ7CisgIG15ICRkaXNhc21fb3B0cyA9IHNoaWZ0OworCisgIG15 ICR0b3RhbCA9IFRvdGFsUHJvZmlsZSgkZmxhdCk7CisKKyAgZm9yZWFjaCBteSAkbGliIChAeyRs aWJzfSkgeworICAgIG15ICRzeW1ib2xfdGFibGUgPSBHZXRQcm9jZWR1cmVCb3VuZGFyaWVzKCRs aWItPlswXSwgJGRpc2FzbV9vcHRzKTsKKyAgICBteSAkb2Zmc2V0ID0gQWRkcmVzc1N1YigkbGli LT5bMV0sICRsaWItPlszXSk7CisgICAgZm9yZWFjaCBteSAkcm91dGluZSAoc29ydCBCeU5hbWUg a2V5cygleyRzeW1ib2xfdGFibGV9KSkgeworICAgICAgbXkgJHN0YXJ0X2FkZHIgPSAkc3ltYm9s X3RhYmxlLT57JHJvdXRpbmV9LT5bMF07CisgICAgICBteSAkZW5kX2FkZHIgPSAkc3ltYm9sX3Rh YmxlLT57JHJvdXRpbmV9LT5bMV07CisgICAgICAjIFNlZSBpZiB0aGVyZSBhcmUgYW55IHNhbXBs ZXMgaW4gdGhpcyByb3V0aW5lCisgICAgICBteSAkbGVuZ3RoID0gaGV4KEFkZHJlc3NTdWIoJGVu ZF9hZGRyLCAkc3RhcnRfYWRkcikpOworICAgICAgbXkgJGFkZHIgPSBBZGRyZXNzQWRkKCRzdGFy dF9hZGRyLCAkb2Zmc2V0KTsKKyAgICAgIGZvciAobXkgJGkgPSAwOyAkaSA8ICRsZW5ndGg7ICRp KyspIHsKKyAgICAgICAgaWYgKGRlZmluZWQoJGN1bXVsYXRpdmUtPnskYWRkcn0pKSB7CisgICAg ICAgICAgUHJpbnREaXNhc3NlbWJsZWRGdW5jdGlvbigkbGliLT5bMF0sICRvZmZzZXQsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcm91dGluZSwgJGZsYXQsICRjdW11bGF0 aXZlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHN0YXJ0X2FkZHIsICRl bmRfYWRkciwgJHRvdGFsKTsKKyAgICAgICAgICBsYXN0OworICAgICAgICB9CisgICAgICAgICRh ZGRyID0gQWRkcmVzc0luYygkYWRkcik7CisgICAgICB9CisgICAgfQorICB9Cit9CisKKyMgUmV0 dXJuIHJlZmVyZW5jZSB0byBhcnJheSBvZiB0dXBsZXMgb2YgdGhlIGZvcm06CisjICAgICAgIFtz dGFydF9hZGRyZXNzLCBmaWxlbmFtZSwgbGluZW51bWJlciwgaW5zdHJ1Y3Rpb24sIGxpbWl0X2Fk ZHJlc3NdCisjIEUuZy4sCisjICAgICAgIFsiMHg4MDZjNDNkIiwgIi9mb28vYmFyLmNjIiwgMTMx LCAicmV0IiwgIjB4ODA2YzQ0MCJdCitzdWIgRGlzYXNzZW1ibGUgeworICBteSAkcHJvZyA9IHNo aWZ0OworICBteSAkb2Zmc2V0ID0gc2hpZnQ7CisgIG15ICRzdGFydF9hZGRyID0gc2hpZnQ7Cisg IG15ICRlbmRfYWRkciA9IHNoaWZ0OworCisgIG15ICRvYmpkdW1wID0gJG9ial90b29sX21hcHsi b2JqZHVtcCJ9OworICBteSAkY21kID0gU2hlbGxFc2NhcGUoJG9iamR1bXAsICItQyIsICItZCIs ICItbCIsICItLW5vLXNob3ctcmF3LWluc24iLAorICAgICAgICAgICAgICAgICAgICAgICAgIi0t c3RhcnQtYWRkcmVzcz0weCRzdGFydF9hZGRyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICIt LXN0b3AtYWRkcmVzcz0weCRlbmRfYWRkciIsICRwcm9nKTsKKyAgb3BlbihPQkpEVU1QLCAiJGNt ZCB8IikgfHwgZXJyb3IoIiRjbWQ6ICQhXG4iKTsKKyAgbXkgQHJlc3VsdCA9ICgpOworICBteSAk ZmlsZW5hbWUgPSAiIjsKKyAgbXkgJGxpbmVudW1iZXIgPSAtMTsKKyAgbXkgJGxhc3QgPSBbIiIs ICIiLCAiIiwgIiJdOworICB3aGlsZSAoPE9CSkRVTVA+KSB7CisgICAgcy9cci8vZzsgICAgICAg ICAjIHR1cm4gd2luZG93cy1sb29raW5nIGxpbmVzIGludG8gdW5peC1sb29raW5nIGxpbmVzCisg ICAgY2hvcDsKKyAgICBpZiAobXxccyooW146XHNdKyk6KFxkKylccyokfCkgeworICAgICAgIyBM b2NhdGlvbiBsaW5lIG9mIHRoZSBmb3JtOgorICAgICAgIyAgIDxmaWxlbmFtZT46PGxpbmVudW1i ZXI+CisgICAgICAkZmlsZW5hbWUgPSAkMTsKKyAgICAgICRsaW5lbnVtYmVyID0gJDI7CisgICAg fSBlbHNpZiAobS9eICsoWzAtOWEtZl0rKTpccyooLiopLykgeworICAgICAgIyBEaXNhc3NlbWJs eSBsaW5lIC0tIHplcm8tZXh0ZW5kIGFkZHJlc3MgdG8gZnVsbCBsZW5ndGgKKyAgICAgIG15ICRh ZGRyID0gSGV4RXh0ZW5kKCQxKTsKKyAgICAgIG15ICRrID0gQWRkcmVzc0FkZCgkYWRkciwgJG9m ZnNldCk7CisgICAgICAkbGFzdC0+WzRdID0gJGs7ICAgIyBTdG9yZSBlbmRpbmcgYWRkcmVzcyBm b3IgcHJldmlvdXMgaW5zdHJ1Y3Rpb24KKyAgICAgICRsYXN0ID0gWyRrLCAkZmlsZW5hbWUsICRs aW5lbnVtYmVyLCAkMiwgJGVuZF9hZGRyXTsKKyAgICAgIHB1c2goQHJlc3VsdCwgJGxhc3QpOwor ICAgIH0KKyAgfQorICBjbG9zZShPQkpEVU1QKTsKKyAgcmV0dXJuIEByZXN1bHQ7Cit9CisKKyMg VGhlIGlucHV0IGZpbGUgc2hvdWxkIGNvbnRhaW4gbGluZXMgb2YgdGhlIGZvcm0gL3Byb2MvbWFw cy1saWtlCisjIG91dHB1dCAoc2FtZSBmb3JtYXQgYXMgZXhwZWN0ZWQgZnJvbSB0aGUgcHJvZmls ZXMpIG9yIHRoYXQgbG9va3MKKyMgbGlrZSBoZXggYWRkcmVzc2VzIChsaWtlICIweERFQURCRUVG IikuICBXZSB3aWxsIHBhcnNlIGFsbAorIyAvcHJvYy9tYXBzIG91dHB1dCwgYW5kIGZvciBhbGwg dGhlIGhleCBhZGRyZXNzZXMsIHdlIHdpbGwgb3V0cHV0CisjICJzaG9ydCIgc3ltYm9sIG5hbWVz LCBvbmUgcGVyIGxpbmUsIGluIHRoZSBzYW1lIG9yZGVyIGFzIHRoZSBpbnB1dC4KK3N1YiBQcmlu dFN5bWJvbHMgeworICBteSAkbWFwc19hbmRfc3ltYm9sc19maWxlID0gc2hpZnQ7CisKKyAgIyBQ YXJzZUxpYnJhcmllcyBleHBlY3RzIHBjcyB0byBiZSBpbiBhIHNldC4gIEZpbmUgYnkgdXMuLi4K KyAgbXkgQHBjbGlzdCA9ICgpOyAgICMgcGNzIGluIHNvcnRlZCBvcmRlcgorICBteSAkcGNzID0g e307CisgIG15ICRtYXAgPSAiIjsKKyAgZm9yZWFjaCBteSAkbGluZSAoPCRtYXBzX2FuZF9zeW1i b2xzX2ZpbGU+KSB7CisgICAgJGxpbmUgPX4gcy9cci8vZzsgICAgIyB0dXJuIHdpbmRvd3MtbG9v a2luZyBsaW5lcyBpbnRvIHVuaXgtbG9va2luZyBsaW5lcworICAgIGlmICgkbGluZSA9fiAvXGIo MHhbMC05YS1mXSspXGIvaSkgeworICAgICAgcHVzaChAcGNsaXN0LCBIZXhFeHRlbmQoJDEpKTsK KyAgICAgICRwY3MtPnskcGNsaXN0Wy0xXX0gPSAxOworICAgIH0gZWxzZSB7CisgICAgICAkbWFw IC49ICRsaW5lOworICAgIH0KKyAgfQorCisgIG15ICRsaWJzID0gUGFyc2VMaWJyYXJpZXMoJG1h aW46OnByb2csICRtYXAsICRwY3MpOworICBteSAkc3ltYm9scyA9IEV4dHJhY3RTeW1ib2xzKCRs aWJzLCAkcGNzKTsKKworICBmb3JlYWNoIG15ICRwYyAoQHBjbGlzdCkgeworICAgICMgLT5bMF0g aXMgdGhlIHNob3J0bmFtZSwgLT5bMl0gaXMgdGhlIGZ1bGwgbmFtZQorICAgIHByaW50KCgkc3lt Ym9scy0+eyRwY30tPlswXSB8fCAiPz8iKSAuICJcbiIpOworICB9Cit9CisKKworIyBGb3Igc29y dGluZyBmdW5jdGlvbnMgYnkgbmFtZQorc3ViIEJ5TmFtZSB7CisgIHJldHVybiBTaG9ydEZ1bmN0 aW9uTmFtZSgkYSkgY21wIFNob3J0RnVuY3Rpb25OYW1lKCRiKTsKK30KKworIyBQcmludCBzb3Vy Y2UtbGlzdGluZyBmb3IgYWxsIGFsbCByb3V0aW5lcyB0aGF0IG1hdGNoICRsaXN0X29wdHMKK3N1 YiBQcmludExpc3RpbmcgeworICBteSAkdG90YWwgPSBzaGlmdDsKKyAgbXkgJGxpYnMgPSBzaGlm dDsKKyAgbXkgJGZsYXQgPSBzaGlmdDsKKyAgbXkgJGN1bXVsYXRpdmUgPSBzaGlmdDsKKyAgbXkg JGxpc3Rfb3B0cyA9IHNoaWZ0OworICBteSAkaHRtbCA9IHNoaWZ0OworCisgIG15ICRvdXRwdXQg PSBcKlNURE9VVDsKKyAgbXkgJGZuYW1lID0gIiI7CisKKyAgaWYgKCRodG1sKSB7CisgICAgIyBB cnJhbmdlIHRvIHdyaXRlIHRoZSBvdXRwdXQgdG8gYSB0ZW1wb3JhcnkgZmlsZQorICAgICRmbmFt ZSA9IFRlbXBOYW1lKCRtYWluOjpuZXh0X3RtcGZpbGUsICJodG1sIik7CisgICAgJG1haW46Om5l eHRfdG1wZmlsZSsrOworICAgIGlmICghb3BlbihURU1QLCAiPiRmbmFtZSIpKSB7CisgICAgICBw cmludCBTVERFUlIgIiRmbmFtZTogJCFcbiI7CisgICAgICByZXR1cm47CisgICAgfQorICAgICRv dXRwdXQgPSBcKlRFTVA7CisgICAgcHJpbnQgJG91dHB1dCBIdG1sTGlzdGluZ0hlYWRlcigpOwor ICAgIHByaW50ZiAkb3V0cHV0ICgiPGRpdiBjbGFzcz1cImxlZ2VuZFwiPiVzPGJyPlRvdGFsOiAl cyAlczwvZGl2PlxuIiwKKyAgICAgICAgICAgICAgICAgICAgJG1haW46OnByb2csIFVucGFyc2Uo JHRvdGFsKSwgVW5pdHMoKSk7CisgIH0KKworICBteSAkbGlzdGVkID0gMDsKKyAgZm9yZWFjaCBt eSAkbGliIChAeyRsaWJzfSkgeworICAgIG15ICRzeW1ib2xfdGFibGUgPSBHZXRQcm9jZWR1cmVC b3VuZGFyaWVzKCRsaWItPlswXSwgJGxpc3Rfb3B0cyk7CisgICAgbXkgJG9mZnNldCA9IEFkZHJl c3NTdWIoJGxpYi0+WzFdLCAkbGliLT5bM10pOworICAgIGZvcmVhY2ggbXkgJHJvdXRpbmUgKHNv cnQgQnlOYW1lIGtleXMoJXskc3ltYm9sX3RhYmxlfSkpIHsKKyAgICAgICMgUHJpbnQgaWYgdGhl cmUgYXJlIGFueSBzYW1wbGVzIGluIHRoaXMgcm91dGluZQorICAgICAgbXkgJHN0YXJ0X2FkZHIg PSAkc3ltYm9sX3RhYmxlLT57JHJvdXRpbmV9LT5bMF07CisgICAgICBteSAkZW5kX2FkZHIgPSAk c3ltYm9sX3RhYmxlLT57JHJvdXRpbmV9LT5bMV07CisgICAgICBteSAkbGVuZ3RoID0gaGV4KEFk ZHJlc3NTdWIoJGVuZF9hZGRyLCAkc3RhcnRfYWRkcikpOworICAgICAgbXkgJGFkZHIgPSBBZGRy ZXNzQWRkKCRzdGFydF9hZGRyLCAkb2Zmc2V0KTsKKyAgICAgIGZvciAobXkgJGkgPSAwOyAkaSA8 ICRsZW5ndGg7ICRpKyspIHsKKyAgICAgICAgaWYgKGRlZmluZWQoJGN1bXVsYXRpdmUtPnskYWRk cn0pKSB7CisgICAgICAgICAgJGxpc3RlZCArPSBQcmludFNvdXJjZSgKKyAgICAgICAgICAgICRs aWItPlswXSwgJG9mZnNldCwKKyAgICAgICAgICAgICRyb3V0aW5lLCAkZmxhdCwgJGN1bXVsYXRp dmUsCisgICAgICAgICAgICAkc3RhcnRfYWRkciwgJGVuZF9hZGRyLAorICAgICAgICAgICAgJGh0 bWwsCisgICAgICAgICAgICAkb3V0cHV0KTsKKyAgICAgICAgICBsYXN0OworICAgICAgICB9Cisg ICAgICAgICRhZGRyID0gQWRkcmVzc0luYygkYWRkcik7CisgICAgICB9CisgICAgfQorICB9CisK KyAgaWYgKCRodG1sKSB7CisgICAgaWYgKCRsaXN0ZWQgPiAwKSB7CisgICAgICBwcmludCAkb3V0 cHV0IEh0bWxMaXN0aW5nRm9vdGVyKCk7CisgICAgICBjbG9zZSgkb3V0cHV0KTsKKyAgICAgIFJ1 bldlYigkZm5hbWUpOworICAgIH0gZWxzZSB7CisgICAgICBjbG9zZSgkb3V0cHV0KTsKKyAgICAg IHVubGluaygkZm5hbWUpOworICAgIH0KKyAgfQorfQorCitzdWIgSHRtbExpc3RpbmdIZWFkZXIg eworICByZXR1cm4gPDwnRU9GJzsKKzxET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHRp dGxlPlBwcm9mIGxpc3Rpbmc8L3RpdGxlPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KK2JvZHkg eworICBmb250LWZhbWlseTogc2Fucy1zZXJpZjsKK30KK2gxIHsKKyAgZm9udC1zaXplOiAxLjVl bTsKKyAgbWFyZ2luLWJvdHRvbTogNHB4OworfQorLmxlZ2VuZCB7CisgIGZvbnQtc2l6ZTogMS4y NWVtOworfQorLmxpbmUgeworICBjb2xvcjogI2FhYWFhYTsKK30KKy5ub3AgeworICBjb2xvcjog I2FhYWFhYTsKK30KKy51bmltcG9ydGFudCB7CisgIGNvbG9yOiAjY2NjY2NjOworfQorLmRpc2Fz bWxvYyB7CisgIGNvbG9yOiAjMDAwMDAwOworfQorLmRlYWRzcmMgeworICBjdXJzb3I6IHBvaW50 ZXI7Cit9CisuZGVhZHNyYzpob3ZlciB7CisgIGJhY2tncm91bmQtY29sb3I6ICNlZWVlZWU7Cit9 CisubGl2ZXNyYyB7CisgIGNvbG9yOiAjMDAwMGZmOworICBjdXJzb3I6IHBvaW50ZXI7Cit9Cisu bGl2ZXNyYzpob3ZlciB7CisgIGJhY2tncm91bmQtY29sb3I6ICNlZWVlZWU7Cit9CisuYXNtIHsK KyAgY29sb3I6ICMwMDg4MDA7CisgIGRpc3BsYXk6IG5vbmU7Cit9Cis8L3N0eWxlPgorPHNjcmlw dCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorZnVuY3Rpb24gamVwcm9mX3RvZ2dsZV9hc20oZSkg eworICB2YXIgdGFyZ2V0OworICBpZiAoIWUpIGUgPSB3aW5kb3cuZXZlbnQ7CisgIGlmIChlLnRh cmdldCkgdGFyZ2V0ID0gZS50YXJnZXQ7CisgIGVsc2UgaWYgKGUuc3JjRWxlbWVudCkgdGFyZ2V0 ID0gZS5zcmNFbGVtZW50OworCisgIGlmICh0YXJnZXQpIHsKKyAgICB2YXIgYXNtID0gdGFyZ2V0 Lm5leHRTaWJsaW5nOworICAgIGlmIChhc20gJiYgYXNtLmNsYXNzTmFtZSA9PSAiYXNtIikgewor ICAgICAgYXNtLnN0eWxlLmRpc3BsYXkgPSAoYXNtLnN0eWxlLmRpc3BsYXkgPT0gImJsb2NrIiA/ ICIiIDogImJsb2NrIik7CisgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CisgICAgICByZXR1cm4g ZmFsc2U7CisgICAgfQorICB9Cit9Cis8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorRU9GCit9 CisKK3N1YiBIdG1sTGlzdGluZ0Zvb3RlciB7CisgIHJldHVybiA8PCdFT0YnOworPC9ib2R5Pgor PC9odG1sPgorRU9GCit9CisKK3N1YiBIdG1sRXNjYXBlIHsKKyAgbXkgJHRleHQgPSBzaGlmdDsK KyAgJHRleHQgPX4gcy8mLyZhbXA7L2c7CisgICR0ZXh0ID1+IHMvPC8mbHQ7L2c7CisgICR0ZXh0 ID1+IHMvPi8mZ3Q7L2c7CisgIHJldHVybiAkdGV4dDsKK30KKworIyBSZXR1cm5zIHRoZSBpbmRl bnRhdGlvbiBvZiB0aGUgbGluZSwgaWYgaXQgaGFzIGFueSBub24td2hpdGVzcGFjZQorIyBjaGFy YWN0ZXJzLiAgT3RoZXJ3aXNlLCByZXR1cm5zIC0xLgorc3ViIEluZGVudGF0aW9uIHsKKyAgbXkg JGxpbmUgPSBzaGlmdDsKKyAgaWYgKG0vXihccyopXFMvKSB7CisgICAgcmV0dXJuIGxlbmd0aCgk MSk7CisgIH0gZWxzZSB7CisgICAgcmV0dXJuIC0xOworICB9Cit9CisKKyMgSWYgdGhlIHN5bWJv bCB0YWJsZSBjb250YWlucyBpbmxpbmluZyBpbmZvLCBEaXNhc3NlbWJsZSgpIG1heSB0YWcgYW4K KyMgaW5zdHJ1Y3Rpb24gd2l0aCBhIGxvY2F0aW9uIGluc2lkZSBhbiBpbmxpbmVkIGZ1bmN0aW9u LiAgQnV0IGZvcgorIyBzb3VyY2UgbGlzdGluZ3MsIHdlIHByZWZlciB0byB1c2UgdGhlIGxvY2F0 aW9uIGluIHRoZSBmdW5jdGlvbiB3ZQorIyBhcmUgbGlzdGluZy4gIFNvIHVzZSBNYXBUb1N5bWJv bHMoKSB0byBmZXRjaCBmdWxsIGxvY2F0aW9uCisjIGluZm9ybWF0aW9uIGZvciBlYWNoIGluc3Ry dWN0aW9uIGFuZCB0aGVuIHBpY2sgb3V0IHRoZSBmaXJzdAorIyBsb2NhdGlvbiBmcm9tIGEgbG9j YXRpb24gbGlzdCAobG9jYXRpb24gbGlzdCBjb250YWlucyBjYWxsZXJzIGJlZm9yZQorIyBjYWxs ZWVzIGluIGNhc2Ugb2YgaW5saW5pbmcpLgorIworIyBBZnRlciB0aGlzIHJvdXRpbmUgaGFzIHJ1 biwgZWFjaCBlbnRyeSBpbiAkaW5zdHJ1Y3Rpb25zIGNvbnRhaW5zOgorIyAgIFswXSBzdGFydCBh ZGRyZXNzCisjICAgWzFdIGZpbGVuYW1lIGZvciBmdW5jdGlvbiB3ZSBhcmUgbGlzdGluZworIyAg IFsyXSBsaW5lIG51bWJlciBmb3IgZnVuY3Rpb24gd2UgYXJlIGxpc3RpbmcKKyMgICBbM10gZGlz YXNzZW1ibHkKKyMgICBbNF0gbGltaXQgYWRkcmVzcworIyAgIFs1XSBtb3N0IHNwZWNpZmljIGZp bGVuYW1lIChtYXkgYmUgZGlmZmVyZW50IGZyb20gWzFdIGR1ZSB0byBpbmxpbmluZykKKyMgICBb Nl0gbW9zdCBzcGVjaWZpYyBsaW5lIG51bWJlciAobWF5IGJlIGRpZmZlcmVudCBmcm9tIFsyXSBk dWUgdG8gaW5saW5pbmcpCitzdWIgR2V0VG9wTGV2ZWxMaW5lTnVtYmVycyB7CisgIG15ICgkbGli LCAkb2Zmc2V0LCAkaW5zdHJ1Y3Rpb25zKSA9IEBfOworICBteSAkcGNzID0gW107CisgIGZvciAo bXkgJGkgPSAwOyAkaSA8PSAkI3skaW5zdHJ1Y3Rpb25zfTsgJGkrKykgeworICAgIHB1c2goQHsk cGNzfSwgJGluc3RydWN0aW9ucy0+WyRpXS0+WzBdKTsKKyAgfQorICBteSAkc3ltYm9scyA9IHt9 OworICBNYXBUb1N5bWJvbHMoJGxpYiwgJG9mZnNldCwgJHBjcywgJHN5bWJvbHMpOworICBmb3Ig KG15ICRpID0gMDsgJGkgPD0gJCN7JGluc3RydWN0aW9uc307ICRpKyspIHsKKyAgICBteSAkZSA9 ICRpbnN0cnVjdGlvbnMtPlskaV07CisgICAgcHVzaChAeyRlfSwgJGUtPlsxXSk7CisgICAgcHVz aChAeyRlfSwgJGUtPlsyXSk7CisgICAgbXkgJGFkZHIgPSAkZS0+WzBdOworICAgIG15ICRzeW0g PSAkc3ltYm9scy0+eyRhZGRyfTsKKyAgICBpZiAoZGVmaW5lZCgkc3ltKSkgeworICAgICAgaWYg KCQjeyRzeW19ID49IDIgJiYgJHN5bS0+WzFdID1+IG0vXiguKik6KFxkKykkLykgeworICAgICAg ICAkZS0+WzFdID0gJDE7ICAjIEZpbGUgbmFtZQorICAgICAgICAkZS0+WzJdID0gJDI7ICAjIExp bmUgbnVtYmVyCisgICAgICB9CisgICAgfQorICB9Cit9CisKKyMgUHJpbnQgc291cmNlLWxpc3Rp bmcgZm9yIG9uZSByb3V0aW5lCitzdWIgUHJpbnRTb3VyY2UgeworICBteSAkcHJvZyA9IHNoaWZ0 OworICBteSAkb2Zmc2V0ID0gc2hpZnQ7CisgIG15ICRyb3V0aW5lID0gc2hpZnQ7CisgIG15ICRm bGF0ID0gc2hpZnQ7CisgIG15ICRjdW11bGF0aXZlID0gc2hpZnQ7CisgIG15ICRzdGFydF9hZGRy ID0gc2hpZnQ7CisgIG15ICRlbmRfYWRkciA9IHNoaWZ0OworICBteSAkaHRtbCA9IHNoaWZ0Owor ICBteSAkb3V0cHV0ID0gc2hpZnQ7CisKKyAgIyBEaXNhc3NlbWJsZSBhbGwgaW5zdHJ1Y3Rpb25z IChqdXN0IHRvIGdldCBsaW5lIG51bWJlcnMpCisgIG15IEBpbnN0cnVjdGlvbnMgPSBEaXNhc3Nl bWJsZSgkcHJvZywgJG9mZnNldCwgJHN0YXJ0X2FkZHIsICRlbmRfYWRkcik7CisgIEdldFRvcExl dmVsTGluZU51bWJlcnMoJHByb2csICRvZmZzZXQsIFxAaW5zdHJ1Y3Rpb25zKTsKKworICAjIEhh Y2sgMTogYXNzdW1lIHRoYXQgdGhlIGZpcnN0IHNvdXJjZSBmaWxlIGVuY291bnRlcmVkIGluIHRo ZQorICAjIGRpc2Fzc2VtYmx5IGNvbnRhaW5zIHRoZSByb3V0aW5lCisgIG15ICRmaWxlbmFtZSA9 IHVuZGVmOworICBmb3IgKG15ICRpID0gMDsgJGkgPD0gJCNpbnN0cnVjdGlvbnM7ICRpKyspIHsK KyAgICBpZiAoJGluc3RydWN0aW9uc1skaV0tPlsyXSA+PSAwKSB7CisgICAgICAkZmlsZW5hbWUg PSAkaW5zdHJ1Y3Rpb25zWyRpXS0+WzFdOworICAgICAgbGFzdDsKKyAgICB9CisgIH0KKyAgaWYg KCFkZWZpbmVkKCRmaWxlbmFtZSkpIHsKKyAgICBwcmludCBTVERFUlIgIm5vIGZpbGVuYW1lIGZv dW5kIGluICRyb3V0aW5lXG4iOworICAgIHJldHVybiAwOworICB9CisKKyAgIyBIYWNrIDI6IGFz c3VtZSB0aGF0IHRoZSBsYXJnZXN0IGxpbmUgbnVtYmVyIGZyb20gJGZpbGVuYW1lIGlzIHRoZQor ICAjIGVuZCBvZiB0aGUgcHJvY2VkdXJlLiAgVGhpcyBpcyB0eXBpY2FsbHkgc2FmZSBzaW5jZSBp ZiBQMSBjb250YWlucworICAjIGFuIGlubGluZWQgY2FsbCB0byBQMiwgdGhlbiBQMiB1c3VhbGx5 IG9jY3VycyBlYXJsaWVyIGluIHRoZQorICAjIHNvdXJjZSBmaWxlLiAgSWYgdGhpcyBkb2VzIG5v dCB3b3JrLCB3ZSBtaWdodCBoYXZlIHRvIGNvbXB1dGUgYQorICAjIGRlbnNpdHkgcHJvZmlsZSBv ciBqdXN0IHByaW50IGFsbCByZWdpb25zIHdlIGZpbmQuCisgIG15ICRsYXN0bGluZSA9IDA7Cisg IGZvciAobXkgJGkgPSAwOyAkaSA8PSAkI2luc3RydWN0aW9uczsgJGkrKykgeworICAgIG15ICRm ID0gJGluc3RydWN0aW9uc1skaV0tPlsxXTsKKyAgICBteSAkbCA9ICRpbnN0cnVjdGlvbnNbJGld LT5bMl07CisgICAgaWYgKCgkZiBlcSAkZmlsZW5hbWUpICYmICgkbCA+ICRsYXN0bGluZSkpIHsK KyAgICAgICRsYXN0bGluZSA9ICRsOworICAgIH0KKyAgfQorCisgICMgSGFjayAzOiBhc3N1bWUg dGhlIGZpcnN0IHNvdXJjZSBsb2NhdGlvbiBmcm9tICJmaWxlbmFtZSIgaXMgdGhlIHN0YXJ0IG9m CisgICMgdGhlIHNvdXJjZSBjb2RlLgorICBteSAkZmlyc3RsaW5lID0gMTsKKyAgZm9yIChteSAk aSA9IDA7ICRpIDw9ICQjaW5zdHJ1Y3Rpb25zOyAkaSsrKSB7CisgICAgaWYgKCRpbnN0cnVjdGlv bnNbJGldLT5bMV0gZXEgJGZpbGVuYW1lKSB7CisgICAgICAkZmlyc3RsaW5lID0gJGluc3RydWN0 aW9uc1skaV0tPlsyXTsKKyAgICAgIGxhc3Q7CisgICAgfQorICB9CisKKyAgIyBIYWNrIDQ6IEV4 dGVuZCBsYXN0IGxpbmUgZm9yd2FyZCB1bnRpbCBpdHMgaW5kZW50YXRpb24gaXMgbGVzcyB0aGFu CisgICMgdGhlIGluZGVudGF0aW9uIHdlIHNhdyBvbiAkZmlyc3RsaW5lCisgIG15ICRvbGRsYXN0 bGluZSA9ICRsYXN0bGluZTsKKyAgeworICAgIGlmICghb3BlbihGSUxFLCAiPCRmaWxlbmFtZSIp KSB7CisgICAgICBwcmludCBTVERFUlIgIiRmaWxlbmFtZTogJCFcbiI7CisgICAgICByZXR1cm4g MDsKKyAgICB9CisgICAgbXkgJGwgPSAwOworICAgIG15ICRmaXJzdF9pbmRlbnRhdGlvbiA9IC0x OworICAgIHdoaWxlICg8RklMRT4pIHsKKyAgICAgIHMvXHIvL2c7ICAgICAgICAgIyB0dXJuIHdp bmRvd3MtbG9va2luZyBsaW5lcyBpbnRvIHVuaXgtbG9va2luZyBsaW5lcworICAgICAgJGwrKzsK KyAgICAgIG15ICRpbmRlbnQgPSBJbmRlbnRhdGlvbigkXyk7CisgICAgICBpZiAoJGwgPj0gJGZp cnN0bGluZSkgeworICAgICAgICBpZiAoJGZpcnN0X2luZGVudGF0aW9uIDwgMCAmJiAkaW5kZW50 ID49IDApIHsKKyAgICAgICAgICAkZmlyc3RfaW5kZW50YXRpb24gPSAkaW5kZW50OworICAgICAg ICAgIGxhc3QgaWYgKCRmaXJzdF9pbmRlbnRhdGlvbiA9PSAwKTsKKyAgICAgICAgfQorICAgICAg fQorICAgICAgaWYgKCRsID49ICRsYXN0bGluZSAmJiAkaW5kZW50ID49IDApIHsKKyAgICAgICAg aWYgKCRpbmRlbnQgPj0gJGZpcnN0X2luZGVudGF0aW9uKSB7CisgICAgICAgICAgJGxhc3RsaW5l ID0gJGwrMTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBsYXN0OworICAgICAgICB9Cisg ICAgICB9CisgICAgfQorICAgIGNsb3NlKEZJTEUpOworICB9CisKKyAgIyBBc3NpZ24gYWxsIHNh bXBsZXMgdG8gdGhlIHJhbmdlICRmaXJzdGxpbmUsJGxhc3RsaW5lLAorICAjIEhhY2sgNDogSWYg YW4gaW5zdHJ1Y3Rpb24gZG9lcyBub3Qgb2NjdXIgaW4gdGhlIHJhbmdlLCBpdHMgc2FtcGxlcwor ICAjIGFyZSBtb3ZlZCB0byB0aGUgbmV4dCBpbnN0cnVjdGlvbiB0aGF0IG9jY3VycyBpbiB0aGUg cmFuZ2UuCisgIG15ICRzYW1wbGVzMSA9IHt9OyAgICAgICAgIyBNYXAgZnJvbSBsaW5lIG51bWJl ciB0byBmbGF0IGNvdW50CisgIG15ICRzYW1wbGVzMiA9IHt9OyAgICAgICAgIyBNYXAgZnJvbSBs aW5lIG51bWJlciB0byBjdW11bGF0aXZlIGNvdW50CisgIG15ICRydW5uaW5nMSA9IDA7ICAgICAg ICAgIyBVbmFzc2lnbmVkIGZsYXQgY291bnRzCisgIG15ICRydW5uaW5nMiA9IDA7ICAgICAgICAg IyBVbmFzc2lnbmVkIGN1bXVsYXRpdmUgY291bnRzCisgIG15ICR0b3RhbDEgPSAwOyAgICAgICAg ICAgIyBUb3RhbCBmbGF0IGNvdW50cworICBteSAkdG90YWwyID0gMDsgICAgICAgICAgICMgVG90 YWwgY3VtdWxhdGl2ZSBjb3VudHMKKyAgbXkgJWRpc2FzbSA9ICgpOyAgICAgICAgICAjIE1hcCBm cm9tIGxpbmUgbnVtYmVyIHRvIGRpc2Fzc2VtYmx5CisgIG15ICRydW5uaW5nX2Rpc2FzbSA9ICIi OyAgIyBVbmFzc2lnbmVkIGRpc2Fzc2VtYmx5CisgIG15ICRza2lwX21hcmtlciA9ICItLS1cbiI7 CisgIGlmICgkaHRtbCkgeworICAgICRza2lwX21hcmtlciA9ICIiOworICAgIGZvciAobXkgJGwg PSAkZmlyc3RsaW5lOyAkbCA8PSAkbGFzdGxpbmU7ICRsKyspIHsKKyAgICAgICRkaXNhc217JGx9 ID0gIiI7CisgICAgfQorICB9CisgIG15ICRsYXN0X2Rpc19maWxlbmFtZSA9ICcnOworICBteSAk bGFzdF9kaXNfbGluZW51bSA9IC0xOworICBteSAkbGFzdF90b3VjaGVkX2xpbmUgPSAtMTsgICMg VG8gZGV0ZWN0IGdhcHMgaW4gZGlzYXNzZW1ibHkgZm9yIGEgbGluZQorICBmb3JlYWNoIG15ICRl IChAaW5zdHJ1Y3Rpb25zKSB7CisgICAgIyBBZGQgdXAgY291bnRzIGZvciBhbGwgYWRkcmVzcyB0 aGF0IGZhbGwgaW5zaWRlIHRoaXMgaW5zdHJ1Y3Rpb24KKyAgICBteSAkYzEgPSAwOworICAgIG15 ICRjMiA9IDA7CisgICAgZm9yIChteSAkYSA9ICRlLT5bMF07ICRhIGx0ICRlLT5bNF07ICRhID0g QWRkcmVzc0luYygkYSkpIHsKKyAgICAgICRjMSArPSBHZXRFbnRyeSgkZmxhdCwgJGEpOworICAg ICAgJGMyICs9IEdldEVudHJ5KCRjdW11bGF0aXZlLCAkYSk7CisgICAgfQorCisgICAgaWYgKCRo dG1sKSB7CisgICAgICBteSAkZGlzID0gc3ByaW50ZigiICAgICAgJTZzICU2cyBcdFx0JThzOiAl cyAiLAorICAgICAgICAgICAgICAgICAgICAgICAgSHRtbFByaW50TnVtYmVyKCRjMSksCisgICAg ICAgICAgICAgICAgICAgICAgICBIdG1sUHJpbnROdW1iZXIoJGMyKSwKKyAgICAgICAgICAgICAg ICAgICAgICAgIFVucGFyc2VBZGRyZXNzKCRvZmZzZXQsICRlLT5bMF0pLAorICAgICAgICAgICAg ICAgICAgICAgICAgQ2xlYW5EaXNhc3NlbWJseSgkZS0+WzNdKSk7CisKKyAgICAgICMgQXBwZW5k IHRoZSBtb3N0IHNwZWNpZmljIHNvdXJjZSBsaW5lIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGluc3Ry dWN0aW9uCisgICAgICBpZiAobGVuZ3RoKCRkaXMpIDwgODApIHsgJGRpcyAuPSAoJyAnIHggKDgw IC0gbGVuZ3RoKCRkaXMpKSkgfTsKKyAgICAgICRkaXMgPSBIdG1sRXNjYXBlKCRkaXMpOworICAg ICAgbXkgJGYgPSAkZS0+WzVdOworICAgICAgbXkgJGwgPSAkZS0+WzZdOworICAgICAgaWYgKCRm IG5lICRsYXN0X2Rpc19maWxlbmFtZSkgeworICAgICAgICAkZGlzIC49IHNwcmludGYoIjxzcGFu IGNsYXNzPWRpc2FzbWxvYz4lczolZDwvc3Bhbj4iLAorICAgICAgICAgICAgICAgICAgICAgICAg SHRtbEVzY2FwZShDbGVhbkZpbGVOYW1lKCRmKSksICRsKTsKKyAgICAgIH0gZWxzaWYgKCRsIG5l ICRsYXN0X2Rpc19saW5lbnVtKSB7CisgICAgICAgICMgRGUtZW1waGFzaXplIHRoZSB1bmNoYW5n ZWQgZmlsZSBuYW1lIHBvcnRpb24KKyAgICAgICAgJGRpcyAuPSBzcHJpbnRmKCI8c3BhbiBjbGFz cz11bmltcG9ydGFudD4lczwvc3Bhbj4iIC4KKyAgICAgICAgICAgICAgICAgICAgICAgICI8c3Bh biBjbGFzcz1kaXNhc21sb2M+OiVkPC9zcGFuPiIsCisgICAgICAgICAgICAgICAgICAgICAgICBI dG1sRXNjYXBlKENsZWFuRmlsZU5hbWUoJGYpKSwgJGwpOworICAgICAgfSBlbHNlIHsKKyAgICAg ICAgIyBEZS1lbXBoYXNpemUgdGhlIGVudGlyZSBsb2NhdGlvbgorICAgICAgICAkZGlzIC49IHNw cmludGYoIjxzcGFuIGNsYXNzPXVuaW1wb3J0YW50PiVzOiVkPC9zcGFuPiIsCisgICAgICAgICAg ICAgICAgICAgICAgICBIdG1sRXNjYXBlKENsZWFuRmlsZU5hbWUoJGYpKSwgJGwpOworICAgICAg fQorICAgICAgJGxhc3RfZGlzX2ZpbGVuYW1lID0gJGY7CisgICAgICAkbGFzdF9kaXNfbGluZW51 bSA9ICRsOworICAgICAgJHJ1bm5pbmdfZGlzYXNtIC49ICRkaXM7CisgICAgICAkcnVubmluZ19k aXNhc20gLj0gIlxuIjsKKyAgICB9CisKKyAgICAkcnVubmluZzEgKz0gJGMxOworICAgICRydW5u aW5nMiArPSAkYzI7CisgICAgJHRvdGFsMSArPSAkYzE7CisgICAgJHRvdGFsMiArPSAkYzI7Cisg ICAgbXkgJGZpbGUgPSAkZS0+WzFdOworICAgIG15ICRsaW5lID0gJGUtPlsyXTsKKyAgICBpZiAo KCRmaWxlIGVxICRmaWxlbmFtZSkgJiYKKyAgICAgICAgKCRsaW5lID49ICRmaXJzdGxpbmUpICYm CisgICAgICAgICgkbGluZSA8PSAkbGFzdGxpbmUpKSB7CisgICAgICAjIEFzc2lnbiBhbGwgYWNj dW11bGF0ZWQgc2FtcGxlcyB0byB0aGlzIGxpbmUKKyAgICAgIEFkZEVudHJ5KCRzYW1wbGVzMSwg JGxpbmUsICRydW5uaW5nMSk7CisgICAgICBBZGRFbnRyeSgkc2FtcGxlczIsICRsaW5lLCAkcnVu bmluZzIpOworICAgICAgJHJ1bm5pbmcxID0gMDsKKyAgICAgICRydW5uaW5nMiA9IDA7CisgICAg ICBpZiAoJGh0bWwpIHsKKyAgICAgICAgaWYgKCRsaW5lICE9ICRsYXN0X3RvdWNoZWRfbGluZSAm JiAkZGlzYXNteyRsaW5lfSBuZSAnJykgeworICAgICAgICAgICRkaXNhc217JGxpbmV9IC49ICJc biI7CisgICAgICAgIH0KKyAgICAgICAgJGRpc2FzbXskbGluZX0gLj0gJHJ1bm5pbmdfZGlzYXNt OworICAgICAgICAkcnVubmluZ19kaXNhc20gPSAnJzsKKyAgICAgICAgJGxhc3RfdG91Y2hlZF9s aW5lID0gJGxpbmU7CisgICAgICB9CisgICAgfQorICB9CisKKyAgIyBBc3NpZ24gYW55IGxlZnRv dmVyIHNhbXBsZXMgdG8gJGxhc3RsaW5lCisgIEFkZEVudHJ5KCRzYW1wbGVzMSwgJGxhc3RsaW5l LCAkcnVubmluZzEpOworICBBZGRFbnRyeSgkc2FtcGxlczIsICRsYXN0bGluZSwgJHJ1bm5pbmcy KTsKKyAgaWYgKCRodG1sKSB7CisgICAgaWYgKCRsYXN0bGluZSAhPSAkbGFzdF90b3VjaGVkX2xp bmUgJiYgJGRpc2FzbXskbGFzdGxpbmV9IG5lICcnKSB7CisgICAgICAkZGlzYXNteyRsYXN0bGlu ZX0gLj0gIlxuIjsKKyAgICB9CisgICAgJGRpc2FzbXskbGFzdGxpbmV9IC49ICRydW5uaW5nX2Rp c2FzbTsKKyAgfQorCisgIGlmICgkaHRtbCkgeworICAgIHByaW50ZiAkb3V0cHV0ICgKKyAgICAg ICI8aDE+JXM8L2gxPiVzXG48cHJlIG9uQ2xpY2s9XCJqZXByb2ZfdG9nZ2xlX2FzbSgpXCI+XG4i IC4KKyAgICAgICJUb3RhbDolNnMgJTZzIChmbGF0IC8gY3VtdWxhdGl2ZSAlcylcbiIsCisgICAg ICBIdG1sRXNjYXBlKFNob3J0RnVuY3Rpb25OYW1lKCRyb3V0aW5lKSksCisgICAgICBIdG1sRXNj YXBlKENsZWFuRmlsZU5hbWUoJGZpbGVuYW1lKSksCisgICAgICBVbnBhcnNlKCR0b3RhbDEpLAor ICAgICAgVW5wYXJzZSgkdG90YWwyKSwKKyAgICAgIFVuaXRzKCkpOworICB9IGVsc2UgeworICAg IHByaW50ZiAkb3V0cHV0ICgKKyAgICAgICJST1VUSU5FID09PT09PT09PT09PT09PT09PT09PT0g JXMgaW4gJXNcbiIgLgorICAgICAgIiU2cyAlNnMgVG90YWwgJXMgKGZsYXQgLyBjdW11bGF0aXZl KVxuIiwKKyAgICAgIFNob3J0RnVuY3Rpb25OYW1lKCRyb3V0aW5lKSwKKyAgICAgIENsZWFuRmls ZU5hbWUoJGZpbGVuYW1lKSwKKyAgICAgIFVucGFyc2UoJHRvdGFsMSksCisgICAgICBVbnBhcnNl KCR0b3RhbDIpLAorICAgICAgVW5pdHMoKSk7CisgIH0KKyAgaWYgKCFvcGVuKEZJTEUsICI8JGZp bGVuYW1lIikpIHsKKyAgICBwcmludCBTVERFUlIgIiRmaWxlbmFtZTogJCFcbiI7CisgICAgcmV0 dXJuIDA7CisgIH0KKyAgbXkgJGwgPSAwOworICB3aGlsZSAoPEZJTEU+KSB7CisgICAgcy9cci8v ZzsgICAgICAgICAjIHR1cm4gd2luZG93cy1sb29raW5nIGxpbmVzIGludG8gdW5peC1sb29raW5n IGxpbmVzCisgICAgJGwrKzsKKyAgICBpZiAoJGwgPj0gJGZpcnN0bGluZSAtIDUgJiYKKyAgICAg ICAgKCgkbCA8PSAkb2xkbGFzdGxpbmUgKyA1KSB8fCAoJGwgPD0gJGxhc3RsaW5lKSkpIHsKKyAg ICAgIGNob3A7CisgICAgICBteSAkdGV4dCA9ICRfOworICAgICAgaWYgKCRsID09ICRmaXJzdGxp bmUpIHsgcHJpbnQgJG91dHB1dCAkc2tpcF9tYXJrZXI7IH0KKyAgICAgIG15ICRuMSA9IEdldEVu dHJ5KCRzYW1wbGVzMSwgJGwpOworICAgICAgbXkgJG4yID0gR2V0RW50cnkoJHNhbXBsZXMyLCAk bCk7CisgICAgICBpZiAoJGh0bWwpIHsKKyAgICAgICAgIyBFbWl0IGEgc3BhbiB0aGF0IGhhcyBv bmUgb2YgdGhlIGZvbGxvd2luZyBjbGFzc2VzOgorICAgICAgICAjICAgIGxpdmVzcmMgLS0gaGFz IHNhbXBsZXMKKyAgICAgICAgIyAgICBkZWFkc3JjIC0tIGhhcyBkaXNhc3NlbWJseSwgYnV0IHdp dGggbm8gc2FtcGxlcworICAgICAgICAjICAgIG5vcCAgICAgLS0gaGFzIG5vIG1hdGNoaW5nIGRp c2FzZW1ibHkKKyAgICAgICAgIyBBbHNvIGVtaXQgYW4gb3B0aW9uYWwgc3BhbiBjb250YWluaW5n IGRpc2Fzc2VtYmx5LgorICAgICAgICBteSAkZGlzID0gJGRpc2FzbXskbH07CisgICAgICAgIG15 ICRhc20gPSAiIjsKKyAgICAgICAgaWYgKGRlZmluZWQoJGRpcykgJiYgJGRpcyBuZSAnJykgewor ICAgICAgICAgICRhc20gPSAiPHNwYW4gY2xhc3M9XCJhc21cIj4iIC4gJGRpcyAuICI8L3NwYW4+ IjsKKyAgICAgICAgfQorICAgICAgICBteSAkc291cmNlX2NsYXNzID0gKCgkbjEgKyAkbjIgPiAw KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gImxpdmVzcmMiCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgOiAoKCRhc20gbmUgIiIpID8gImRlYWRzcmMiIDogIm5vcCIpKTsKKyAg ICAgICAgcHJpbnRmICRvdXRwdXQgKAorICAgICAgICAgICI8c3BhbiBjbGFzcz1cImxpbmVcIj4l NWQ8L3NwYW4+ICIgLgorICAgICAgICAgICI8c3BhbiBjbGFzcz1cIiVzXCI+JTZzICU2cyAlczwv c3Bhbj4lc1xuIiwKKyAgICAgICAgICAkbCwgJHNvdXJjZV9jbGFzcywKKyAgICAgICAgICBIdG1s UHJpbnROdW1iZXIoJG4xKSwKKyAgICAgICAgICBIdG1sUHJpbnROdW1iZXIoJG4yKSwKKyAgICAg ICAgICBIdG1sRXNjYXBlKCR0ZXh0KSwKKyAgICAgICAgICAkYXNtKTsKKyAgICAgIH0gZWxzZSB7 CisgICAgICAgIHByaW50ZiAkb3V0cHV0KAorICAgICAgICAgICIlNnMgJTZzICU0ZDogJXNcbiIs CisgICAgICAgICAgVW5wYXJzZUFsdCgkbjEpLAorICAgICAgICAgIFVucGFyc2VBbHQoJG4yKSwK KyAgICAgICAgICAkbCwKKyAgICAgICAgICAkdGV4dCk7CisgICAgICB9CisgICAgICBpZiAoJGwg PT0gJGxhc3RsaW5lKSAgeyBwcmludCAkb3V0cHV0ICRza2lwX21hcmtlcjsgfQorICAgIH07Cisg IH0KKyAgY2xvc2UoRklMRSk7CisgIGlmICgkaHRtbCkgeworICAgIHByaW50ICRvdXRwdXQgIjwv cHJlPlxuIjsKKyAgfQorICByZXR1cm4gMTsKK30KKworIyBSZXR1cm4gdGhlIHNvdXJjZSBsaW5l IGZvciB0aGUgc3BlY2lmaWVkIGZpbGUvbGluZW51bWJlci4KKyMgUmV0dXJucyB1bmRlZiBpZiBu b3QgZm91bmQuCitzdWIgU291cmNlTGluZSB7CisgIG15ICRmaWxlID0gc2hpZnQ7CisgIG15ICRs aW5lID0gc2hpZnQ7CisKKyAgIyBMb29rIGluIGNhY2hlCisgIGlmICghZGVmaW5lZCgkbWFpbjo6 c291cmNlX2NhY2hleyRmaWxlfSkpIHsKKyAgICBpZiAoMTAwIDwgc2NhbGFyIGtleXMoJW1haW46 OnNvdXJjZV9jYWNoZSkpIHsKKyAgICAgICMgQ2xlYXIgdGhlIGNhY2hlIHdoZW4gaXQgZ2V0cyB0 b28gYmlnCisgICAgICAkbWFpbjo6c291cmNlX2NhY2hlID0gKCk7CisgICAgfQorCisgICAgIyBS ZWFkIGFsbCBsaW5lcyBmcm9tIHRoZSBmaWxlCisgICAgaWYgKCFvcGVuKEZJTEUsICI8JGZpbGUi KSkgeworICAgICAgcHJpbnQgU1RERVJSICIkZmlsZTogJCFcbiI7CisgICAgICAkbWFpbjo6c291 cmNlX2NhY2hleyRmaWxlfSA9IFtdOyAgIyBDYWNoZSB0aGUgbmVnYXRpdmUgcmVzdWx0CisgICAg ICByZXR1cm4gdW5kZWY7CisgICAgfQorICAgIG15ICRsaW5lcyA9IFtdOworICAgIHB1c2goQHsk bGluZXN9LCAiIik7ICAgICAgICAjIFNvIHdlIGNhbiB1c2UgMS1iYXNlZCBsaW5lIG51bWJlcnMg YXMgaW5kaWNlcworICAgIHdoaWxlICg8RklMRT4pIHsKKyAgICAgIHB1c2goQHskbGluZXN9LCAk Xyk7CisgICAgfQorICAgIGNsb3NlKEZJTEUpOworCisgICAgIyBTYXZlIHRoZSBsaW5lcyBpbiB0 aGUgY2FjaGUKKyAgICAkbWFpbjo6c291cmNlX2NhY2hleyRmaWxlfSA9ICRsaW5lczsKKyAgfQor CisgIG15ICRsaW5lcyA9ICRtYWluOjpzb3VyY2VfY2FjaGV7JGZpbGV9OworICBpZiAoKCRsaW5l IDwgMCkgfHwgKCRsaW5lID4gJCN7JGxpbmVzfSkpIHsKKyAgICByZXR1cm4gdW5kZWY7CisgIH0g ZWxzZSB7CisgICAgcmV0dXJuICRsaW5lcy0+WyRsaW5lXTsKKyAgfQorfQorCisjIFByaW50IGRp c2Fzc2VtYmx5IGZvciBvbmUgcm91dGluZSB3aXRoIGludGVyc3BlcnNlZCBzb3VyY2UgaWYgYXZh aWxhYmxlCitzdWIgUHJpbnREaXNhc3NlbWJsZWRGdW5jdGlvbiB7CisgIG15ICRwcm9nID0gc2hp ZnQ7CisgIG15ICRvZmZzZXQgPSBzaGlmdDsKKyAgbXkgJHJvdXRpbmUgPSBzaGlmdDsKKyAgbXkg JGZsYXQgPSBzaGlmdDsKKyAgbXkgJGN1bXVsYXRpdmUgPSBzaGlmdDsKKyAgbXkgJHN0YXJ0X2Fk ZHIgPSBzaGlmdDsKKyAgbXkgJGVuZF9hZGRyID0gc2hpZnQ7CisgIG15ICR0b3RhbCA9IHNoaWZ0 OworCisgICMgRGlzYXNzZW1ibGUgYWxsIGluc3RydWN0aW9ucworICBteSBAaW5zdHJ1Y3Rpb25z ID0gRGlzYXNzZW1ibGUoJHByb2csICRvZmZzZXQsICRzdGFydF9hZGRyLCAkZW5kX2FkZHIpOwor CisgICMgTWFrZSBhcnJheSBvZiBjb3VudHMgcGVyIGluc3RydWN0aW9uCisgIG15IEBmbGF0X2Nv dW50ID0gKCk7CisgIG15IEBjdW1fY291bnQgPSAoKTsKKyAgbXkgJGZsYXRfdG90YWwgPSAwOwor ICBteSAkY3VtX3RvdGFsID0gMDsKKyAgZm9yZWFjaCBteSAkZSAoQGluc3RydWN0aW9ucykgewor ICAgICMgQWRkIHVwIGNvdW50cyBmb3IgYWxsIGFkZHJlc3MgdGhhdCBmYWxsIGluc2lkZSB0aGlz IGluc3RydWN0aW9uCisgICAgbXkgJGMxID0gMDsKKyAgICBteSAkYzIgPSAwOworICAgIGZvciAo bXkgJGEgPSAkZS0+WzBdOyAkYSBsdCAkZS0+WzRdOyAkYSA9IEFkZHJlc3NJbmMoJGEpKSB7Cisg ICAgICAkYzEgKz0gR2V0RW50cnkoJGZsYXQsICRhKTsKKyAgICAgICRjMiArPSBHZXRFbnRyeSgk Y3VtdWxhdGl2ZSwgJGEpOworICAgIH0KKyAgICBwdXNoKEBmbGF0X2NvdW50LCAkYzEpOworICAg IHB1c2goQGN1bV9jb3VudCwgJGMyKTsKKyAgICAkZmxhdF90b3RhbCArPSAkYzE7CisgICAgJGN1 bV90b3RhbCArPSAkYzI7CisgIH0KKworICAjIFByaW50IGhlYWRlciB3aXRoIHRvdGFsIGNvdW50 cworICBwcmludGYoIlJPVVRJTkUgPT09PT09PT09PT09PT09PT09PT09PSAlc1xuIiAuCisgICAg ICAgICAiJTZzICU2cyAlcyAoZmxhdCwgY3VtdWxhdGl2ZSkgJS4xZiUlIG9mIHRvdGFsXG4iLAor ICAgICAgICAgU2hvcnRGdW5jdGlvbk5hbWUoJHJvdXRpbmUpLAorICAgICAgICAgVW5wYXJzZSgk ZmxhdF90b3RhbCksCisgICAgICAgICBVbnBhcnNlKCRjdW1fdG90YWwpLAorICAgICAgICAgVW5p dHMoKSwKKyAgICAgICAgICgkY3VtX3RvdGFsICogMTAwLjApIC8gJHRvdGFsKTsKKworICAjIFBy b2Nlc3MgaW5zdHJ1Y3Rpb25zIGluIG9yZGVyCisgIG15ICRjdXJyZW50X2ZpbGUgPSAiIjsKKyAg Zm9yIChteSAkaSA9IDA7ICRpIDw9ICQjaW5zdHJ1Y3Rpb25zOyApIHsKKyAgICBteSAkZSA9ICRp bnN0cnVjdGlvbnNbJGldOworCisgICAgIyBQcmludCB0aGUgbmV3IGZpbGUgbmFtZSB3aGVuZXZl ciB3ZSBzd2l0Y2ggZmlsZXMKKyAgICBpZiAoJGUtPlsxXSBuZSAkY3VycmVudF9maWxlKSB7Cisg ICAgICAkY3VycmVudF9maWxlID0gJGUtPlsxXTsKKyAgICAgIG15ICRmbmFtZSA9ICRjdXJyZW50 X2ZpbGU7CisgICAgICAkZm5hbWUgPX4gc3xeXC4vfHw7ICAgIyBUcmltIGxlYWRpbmcgIi4vIgor CisgICAgICAjIFNob3J0ZW4gbG9uZyBmaWxlIG5hbWVzCisgICAgICBpZiAobGVuZ3RoKCRmbmFt ZSkgPj0gNTgpIHsKKyAgICAgICAgJGZuYW1lID0gIi4uLiIgLiBzdWJzdHIoJGZuYW1lLCAtNTUp OworICAgICAgfQorICAgICAgcHJpbnRmKCItLS0tLS0tLS0tLS0tLS0tLS0tLSAlc1xuIiwgJGZu YW1lKTsKKyAgICB9CisKKyAgICAjIFRPRE86IENvbXB1dGUgcmFuZ2Ugb2YgbGluZXMgdG8gcHJp bnQgdG9nZXRoZXIgdG8gZGVhbCB3aXRoCisgICAgIyBzbWFsbCByZW9yZGVyaW5ncy4KKyAgICBt eSAkZmlyc3RfbGluZSA9ICRlLT5bMl07CisgICAgbXkgJGxhc3RfbGluZSA9ICRmaXJzdF9saW5l OworICAgIG15ICVmbGF0X3N1bSA9ICgpOworICAgIG15ICVjdW1fc3VtID0gKCk7CisgICAgZm9y IChteSAkbCA9ICRmaXJzdF9saW5lOyAkbCA8PSAkbGFzdF9saW5lOyAkbCsrKSB7CisgICAgICAk ZmxhdF9zdW17JGx9ID0gMDsKKyAgICAgICRjdW1fc3VteyRsfSA9IDA7CisgICAgfQorCisgICAg IyBGaW5kIHJ1biBvZiBpbnN0cnVjdGlvbnMgZm9yIHRoaXMgcmFuZ2Ugb2Ygc291cmNlIGxpbmVz CisgICAgbXkgJGZpcnN0X2luc3QgPSAkaTsKKyAgICB3aGlsZSAoKCRpIDw9ICQjaW5zdHJ1Y3Rp b25zKSAmJgorICAgICAgICAgICAoJGluc3RydWN0aW9uc1skaV0tPlsyXSA+PSAkZmlyc3RfbGlu ZSkgJiYKKyAgICAgICAgICAgKCRpbnN0cnVjdGlvbnNbJGldLT5bMl0gPD0gJGxhc3RfbGluZSkp IHsKKyAgICAgICRlID0gJGluc3RydWN0aW9uc1skaV07CisgICAgICAkZmxhdF9zdW17JGUtPlsy XX0gKz0gJGZsYXRfY291bnRbJGldOworICAgICAgJGN1bV9zdW17JGUtPlsyXX0gKz0gJGN1bV9j b3VudFskaV07CisgICAgICAkaSsrOworICAgIH0KKyAgICBteSAkbGFzdF9pbnN0ID0gJGkgLSAx OworCisgICAgIyBQcmludCBzb3VyY2UgbGluZXMKKyAgICBmb3IgKG15ICRsID0gJGZpcnN0X2xp bmU7ICRsIDw9ICRsYXN0X2xpbmU7ICRsKyspIHsKKyAgICAgIG15ICRsaW5lID0gU291cmNlTGlu ZSgkY3VycmVudF9maWxlLCAkbCk7CisgICAgICBpZiAoIWRlZmluZWQoJGxpbmUpKSB7CisgICAg ICAgICRsaW5lID0gIj9cbiI7CisgICAgICAgIG5leHQ7CisgICAgICB9IGVsc2UgeworICAgICAg ICAkbGluZSA9fiBzL15ccysvLzsKKyAgICAgIH0KKyAgICAgIHByaW50ZigiJTZzICU2cyAlNWQ6 ICVzIiwKKyAgICAgICAgICAgICBVbnBhcnNlQWx0KCRmbGF0X3N1bXskbH0pLAorICAgICAgICAg ICAgIFVucGFyc2VBbHQoJGN1bV9zdW17JGx9KSwKKyAgICAgICAgICAgICAkbCwKKyAgICAgICAg ICAgICAkbGluZSk7CisgICAgfQorCisgICAgIyBQcmludCBkaXNhc3NlbWJseQorICAgIGZvciAo bXkgJHggPSAkZmlyc3RfaW5zdDsgJHggPD0gJGxhc3RfaW5zdDsgJHgrKykgeworICAgICAgbXkg JGUgPSAkaW5zdHJ1Y3Rpb25zWyR4XTsKKyAgICAgIHByaW50ZigiJTZzICU2cyAgICAlOHM6ICU2 c1xuIiwKKyAgICAgICAgICAgICBVbnBhcnNlQWx0KCRmbGF0X2NvdW50WyR4XSksCisgICAgICAg ICAgICAgVW5wYXJzZUFsdCgkY3VtX2NvdW50WyR4XSksCisgICAgICAgICAgICAgVW5wYXJzZUFk ZHJlc3MoJG9mZnNldCwgJGUtPlswXSksCisgICAgICAgICAgICAgQ2xlYW5EaXNhc3NlbWJseSgk ZS0+WzNdKSk7CisgICAgfQorICB9Cit9CisKKyMgUHJpbnQgRE9UIGdyYXBoCitzdWIgUHJpbnRE b3QgeworICBteSAkcHJvZyA9IHNoaWZ0OworICBteSAkc3ltYm9scyA9IHNoaWZ0OworICBteSAk cmF3ID0gc2hpZnQ7CisgIG15ICRmbGF0ID0gc2hpZnQ7CisgIG15ICRjdW11bGF0aXZlID0gc2hp ZnQ7CisgIG15ICRvdmVyYWxsX3RvdGFsID0gc2hpZnQ7CisKKyAgIyBHZXQgdG90YWwKKyAgbXkg JGxvY2FsX3RvdGFsID0gVG90YWxQcm9maWxlKCRmbGF0KTsKKyAgbXkgJG5vZGVsaW1pdCA9IGlu dCgkbWFpbjo6b3B0X25vZGVmcmFjdGlvbiAqICRsb2NhbF90b3RhbCk7CisgIG15ICRlZGdlbGlt aXQgPSBpbnQoJG1haW46Om9wdF9lZGdlZnJhY3Rpb24gKiAkbG9jYWxfdG90YWwpOworICBteSAk bm9kZWNvdW50ID0gJG1haW46Om9wdF9ub2RlY291bnQ7CisKKyAgIyBGaW5kIG5vZGVzIHRvIGlu Y2x1ZGUKKyAgbXkgQGxpc3QgPSAoc29ydCB7IGFicyhHZXRFbnRyeSgkY3VtdWxhdGl2ZSwgJGIp KSA8PT4KKyAgICAgICAgICAgICAgICAgICAgIGFicyhHZXRFbnRyeSgkY3VtdWxhdGl2ZSwgJGEp KQorICAgICAgICAgICAgICAgICAgICAgfHwgJGEgY21wICRiIH0KKyAgICAgICAgICAgICAga2V5 cygleyRjdW11bGF0aXZlfSkpOworICBteSAkbGFzdCA9ICRub2RlY291bnQgLSAxOworICBpZiAo JGxhc3QgPiAkI2xpc3QpIHsKKyAgICAkbGFzdCA9ICQjbGlzdDsKKyAgfQorICB3aGlsZSAoKCRs YXN0ID49IDApICYmCisgICAgICAgICAoYWJzKEdldEVudHJ5KCRjdW11bGF0aXZlLCAkbGlzdFsk bGFzdF0pKSA8PSAkbm9kZWxpbWl0KSkgeworICAgICRsYXN0LS07CisgIH0KKyAgaWYgKCRsYXN0 IDwgMCkgeworICAgIHByaW50IFNUREVSUiAiTm8gbm9kZXMgdG8gcHJpbnRcbiI7CisgICAgcmV0 dXJuIDA7CisgIH0KKworICBpZiAoJG5vZGVsaW1pdCA+IDAgfHwgJGVkZ2VsaW1pdCA+IDApIHsK KyAgICBwcmludGYgU1RERVJSICgiRHJvcHBpbmcgbm9kZXMgd2l0aCA8PSAlcyAlczsgZWRnZXMg d2l0aCA8PSAlcyBhYnMoJXMpXG4iLAorICAgICAgICAgICAgICAgICAgIFVucGFyc2UoJG5vZGVs aW1pdCksIFVuaXRzKCksCisgICAgICAgICAgICAgICAgICAgVW5wYXJzZSgkZWRnZWxpbWl0KSwg VW5pdHMoKSk7CisgIH0KKworICAjIE9wZW4gRE9UIG91dHB1dCBmaWxlCisgIG15ICRvdXRwdXQ7 CisgIG15ICRlc2NhcGVkX2RvdCA9IFNoZWxsRXNjYXBlKEBET1QpOworICBteSAkZXNjYXBlZF9w czJwZGYgPSBTaGVsbEVzY2FwZShAUFMyUERGKTsKKyAgaWYgKCRtYWluOjpvcHRfZ3YpIHsKKyAg ICBteSAkZXNjYXBlZF9vdXRmaWxlID0gU2hlbGxFc2NhcGUoVGVtcE5hbWUoJG1haW46Om5leHRf dG1wZmlsZSwgInBzIikpOworICAgICRvdXRwdXQgPSAifCAkZXNjYXBlZF9kb3QgLVRwczIgPiRl c2NhcGVkX291dGZpbGUiOworICB9IGVsc2lmICgkbWFpbjo6b3B0X2V2aW5jZSkgeworICAgIG15 ICRlc2NhcGVkX291dGZpbGUgPSBTaGVsbEVzY2FwZShUZW1wTmFtZSgkbWFpbjo6bmV4dF90bXBm aWxlLCAicGRmIikpOworICAgICRvdXRwdXQgPSAifCAkZXNjYXBlZF9kb3QgLVRwczIgfCAkZXNj YXBlZF9wczJwZGYgLSAkZXNjYXBlZF9vdXRmaWxlIjsKKyAgfSBlbHNpZiAoJG1haW46Om9wdF9w cykgeworICAgICRvdXRwdXQgPSAifCAkZXNjYXBlZF9kb3QgLVRwczIiOworICB9IGVsc2lmICgk bWFpbjo6b3B0X3BkZikgeworICAgICRvdXRwdXQgPSAifCAkZXNjYXBlZF9kb3QgLVRwczIgfCAk ZXNjYXBlZF9wczJwZGYgLSAtIjsKKyAgfSBlbHNpZiAoJG1haW46Om9wdF93ZWIgfHwgJG1haW46 Om9wdF9zdmcpIHsKKyAgICAjIFdlIG5lZWQgdG8gcG9zdC1wcm9jZXNzIHRoZSBTVkcsIHNvIHdy aXRlIHRvIGEgdGVtcG9yYXJ5IGZpbGUgYWx3YXlzLgorICAgIG15ICRlc2NhcGVkX291dGZpbGUg PSBTaGVsbEVzY2FwZShUZW1wTmFtZSgkbWFpbjo6bmV4dF90bXBmaWxlLCAic3ZnIikpOworICAg ICRvdXRwdXQgPSAifCAkZXNjYXBlZF9kb3QgLVRzdmcgPiRlc2NhcGVkX291dGZpbGUiOworICB9 IGVsc2lmICgkbWFpbjo6b3B0X2dpZikgeworICAgICRvdXRwdXQgPSAifCAkZXNjYXBlZF9kb3Qg LVRnaWYiOworICB9IGVsc2UgeworICAgICRvdXRwdXQgPSAiPiZTVERPVVQiOworICB9CisgIG9w ZW4oRE9ULCAkb3V0cHV0KSB8fCBlcnJvcigiJG91dHB1dDogJCFcbiIpOworCisgICMgVGl0bGUK KyAgcHJpbnRmIERPVCAoImRpZ3JhcGggXCIlczsgJXMgJXNcIiB7XG4iLAorICAgICAgICAgICAg ICAkcHJvZywKKyAgICAgICAgICAgICAgVW5wYXJzZSgkb3ZlcmFsbF90b3RhbCksCisgICAgICAg ICAgICAgIFVuaXRzKCkpOworICBpZiAoJG1haW46Om9wdF9wZGYpIHsKKyAgICAjIFRoZSBvdXRw dXQgaXMgbW9yZSBwcmludGFibGUgaWYgd2Ugc2V0IHRoZSBwYWdlIHNpemUgZm9yIGRvdC4KKyAg ICBwcmludGYgRE9UICgic2l6ZT1cIjgsMTFcIlxuIik7CisgIH0KKyAgcHJpbnRmIERPVCAoIm5v ZGUgW3dpZHRoPTAuMzc1LGhlaWdodD0wLjI1XTtcbiIpOworCisgICMgUHJpbnQgbGVnZW5kCisg IHByaW50ZiBET1QgKCJMZWdlbmQgW3NoYXBlPWJveCxmb250c2l6ZT0yNCxzaGFwZT1wbGFpbnRl eHQsIiAuCisgICAgICAgICAgICAgICJsYWJlbD1cIiVzXFxsJXNcXGwlc1xcbCVzXFxsJXNcXGxc Il07XG4iLAorICAgICAgICAgICAgICAkcHJvZywKKyAgICAgICAgICAgICAgc3ByaW50ZigiVG90 YWwgJXM6ICVzIiwgVW5pdHMoKSwgVW5wYXJzZSgkb3ZlcmFsbF90b3RhbCkpLAorICAgICAgICAg ICAgICBzcHJpbnRmKCJGb2N1c2luZyBvbjogJXMiLCBVbnBhcnNlKCRsb2NhbF90b3RhbCkpLAor ICAgICAgICAgICAgICBzcHJpbnRmKCJEcm9wcGVkIG5vZGVzIHdpdGggPD0gJXMgYWJzKCVzKSIs CisgICAgICAgICAgICAgICAgICAgICAgVW5wYXJzZSgkbm9kZWxpbWl0KSwgVW5pdHMoKSksCisg ICAgICAgICAgICAgIHNwcmludGYoIkRyb3BwZWQgZWRnZXMgd2l0aCA8PSAlcyAlcyIsCisgICAg ICAgICAgICAgICAgICAgICAgVW5wYXJzZSgkZWRnZWxpbWl0KSwgVW5pdHMoKSkKKyAgICAgICAg ICAgICAgKTsKKworICAjIFByaW50IG5vZGVzCisgIG15ICVub2RlID0gKCk7CisgIG15ICRuZXh0 bm9kZSA9IDE7CisgIGZvcmVhY2ggbXkgJGEgKEBsaXN0WzAuLiRsYXN0XSkgeworICAgICMgUGlj ayBmb250IHNpemUKKyAgICBteSAkZiA9IEdldEVudHJ5KCRmbGF0LCAkYSk7CisgICAgbXkgJGMg PSBHZXRFbnRyeSgkY3VtdWxhdGl2ZSwgJGEpOworCisgICAgbXkgJGZzID0gODsKKyAgICBpZiAo JGxvY2FsX3RvdGFsID4gMCkgeworICAgICAgJGZzID0gOCArICg1MC4wICogc3FydChhYnMoJGYg KiAxLjAgLyAkbG9jYWxfdG90YWwpKSk7CisgICAgfQorCisgICAgJG5vZGV7JGF9ID0gJG5leHRu b2RlKys7CisgICAgbXkgJHN5bSA9ICRhOworICAgICRzeW0gPX4gcy9ccysvXFxuL2c7CisgICAg JHN5bSA9fiBzLzo6L1xcbi9nOworCisgICAgIyBFeHRyYSBjdW11bGF0aXZlIGluZm8gdG8gcHJp bnQgZm9yIG5vbi1sZWF2ZXMKKyAgICBteSAkZXh0cmEgPSAiIjsKKyAgICBpZiAoJGYgIT0gJGMp IHsKKyAgICAgICRleHRyYSA9IHNwcmludGYoIlxccm9mICVzICglcykiLAorICAgICAgICAgICAg ICAgICAgICAgICBVbnBhcnNlKCRjKSwKKyAgICAgICAgICAgICAgICAgICAgICAgUGVyY2VudCgk YywgJGxvY2FsX3RvdGFsKSk7CisgICAgfQorICAgIG15ICRzdHlsZSA9ICIiOworICAgIGlmICgk bWFpbjo6b3B0X2hlYXBjaGVjaykgeworICAgICAgaWYgKCRmID4gMCkgeworICAgICAgICAjIG1h a2UgbGVhay1jYXVzaW5nIG5vZGVzIG1vcmUgdmlzaWJsZSAoYWRkIGEgYmFja2dyb3VuZCkKKyAg ICAgICAgJHN0eWxlID0gIixzdHlsZT1maWxsZWQsZmlsbGNvbG9yPWdyYXkiCisgICAgICB9IGVs c2lmICgkZiA8IDApIHsKKyAgICAgICAgIyBtYWtlIGFudGktbGVhay1jYXVzaW5nIG5vZGVzICh3 aGljaCBhbG1vc3QgbmV2ZXIgb2NjdXIpCisgICAgICAgICMgc3RhbmQgb3V0IGFzIHdlbGwgKHRy aXBsZSBib3JkZXIpCisgICAgICAgICRzdHlsZSA9ICIscGVyaXBoZXJpZXM9MyIKKyAgICAgIH0K KyAgICB9CisKKyAgICBwcmludGYgRE9UICgiTiVkIFtsYWJlbD1cIiVzXFxuJXMgKCVzKSVzXFxy IiAuCisgICAgICAgICAgICAgICAgIlwiLHNoYXBlPWJveCxmb250c2l6ZT0lLjFmJXNdO1xuIiwK KyAgICAgICAgICAgICAgICAkbm9kZXskYX0sCisgICAgICAgICAgICAgICAgJHN5bSwKKyAgICAg ICAgICAgICAgICBVbnBhcnNlKCRmKSwKKyAgICAgICAgICAgICAgICBQZXJjZW50KCRmLCAkbG9j YWxfdG90YWwpLAorICAgICAgICAgICAgICAgICRleHRyYSwKKyAgICAgICAgICAgICAgICAkZnMs CisgICAgICAgICAgICAgICAgJHN0eWxlLAorICAgICAgICAgICAgICAgKTsKKyAgfQorCisgICMg R2V0IGVkZ2VzIGFuZCBjb3VudHMgcGVyIGVkZ2UKKyAgbXkgJWVkZ2UgPSAoKTsKKyAgbXkgJG47 CisgIG15ICRmdWxsbmFtZV90b19zaG9ydG5hbWVfbWFwID0ge307CisgIEZpbGxGdWxsbmFtZVRv U2hvcnRuYW1lTWFwKCRzeW1ib2xzLCAkZnVsbG5hbWVfdG9fc2hvcnRuYW1lX21hcCk7CisgIGZv cmVhY2ggbXkgJGsgKGtleXMoJXskcmF3fSkpIHsKKyAgICAjIFRPRE86IG9taXQgbG93ICVhZ2Ug ZWRnZXMKKyAgICAkbiA9ICRyYXctPnska307CisgICAgbXkgQHRyYW5zbGF0ZWQgPSBUcmFuc2xh dGVTdGFjaygkc3ltYm9scywgJGZ1bGxuYW1lX3RvX3Nob3J0bmFtZV9tYXAsICRrKTsKKyAgICBm b3IgKG15ICRpID0gMTsgJGkgPD0gJCN0cmFuc2xhdGVkOyAkaSsrKSB7CisgICAgICBteSAkc3Jj ID0gJHRyYW5zbGF0ZWRbJGldOworICAgICAgbXkgJGRzdCA9ICR0cmFuc2xhdGVkWyRpLTFdOwor ICAgICAgI25leHQgaWYgKCRzcmMgZXEgJGRzdCk7ICAjIEF2b2lkIHNlbGYtZWRnZXM/CisgICAg ICBpZiAoZXhpc3RzKCRub2RleyRzcmN9KSAmJiBleGlzdHMoJG5vZGV7JGRzdH0pKSB7CisgICAg ICAgIG15ICRlZGdlX2xhYmVsID0gIiRzcmNcMDAxJGRzdCI7CisgICAgICAgIGlmICghZXhpc3Rz KCRlZGdleyRlZGdlX2xhYmVsfSkpIHsKKyAgICAgICAgICAkZWRnZXskZWRnZV9sYWJlbH0gPSAw OworICAgICAgICB9CisgICAgICAgICRlZGdleyRlZGdlX2xhYmVsfSArPSAkbjsKKyAgICAgIH0K KyAgICB9CisgIH0KKworICAjIFByaW50IGVkZ2VzIChwcm9jZXNzIGluIG9yZGVyIG9mIGRlY3Jl YXNpbmcgY291bnRzKQorICBteSAlaW5kZWdyZWUgPSAoKTsgICAjIE51bWJlciBvZiBpbmNvbWlu ZyBlZGdlcyBhZGRlZCBwZXIgbm9kZSBzbyBmYXIKKyAgbXkgJW91dGRlZ3JlZSA9ICgpOyAgIyBO dW1iZXIgb2Ygb3V0Z29pbmcgZWRnZXMgYWRkZWQgcGVyIG5vZGUgc28gZmFyCisgIGZvcmVhY2gg bXkgJGUgKHNvcnQgeyAkZWRnZXskYn0gPD0+ICRlZGdleyRhfSB9IGtleXMoJWVkZ2UpKSB7Cisg ICAgbXkgQHggPSBzcGxpdCgvXDAwMS8sICRlKTsKKyAgICAkbiA9ICRlZGdleyRlfTsKKworICAg ICMgSW5pdGlhbGl6ZSBkZWdyZWUgb2Yga2VwdCBpbmNvbWluZyBhbmQgb3V0Z29pbmcgZWRnZXMg aWYgbmVjZXNzYXJ5CisgICAgbXkgJHNyYyA9ICR4WzBdOworICAgIG15ICRkc3QgPSAkeFsxXTsK KyAgICBpZiAoIWV4aXN0cygkb3V0ZGVncmVleyRzcmN9KSkgeyAkb3V0ZGVncmVleyRzcmN9ID0g MDsgfQorICAgIGlmICghZXhpc3RzKCRpbmRlZ3JlZXskZHN0fSkpIHsgJGluZGVncmVleyRkc3R9 ID0gMDsgfQorCisgICAgbXkgJGtlZXA7CisgICAgaWYgKCRpbmRlZ3JlZXskZHN0fSA9PSAwKSB7 CisgICAgICAjIEtlZXAgZWRnZSBpZiBuZWVkZWQgZm9yIHJlYWNoYWJpbGl0eQorICAgICAgJGtl ZXAgPSAxOworICAgIH0gZWxzaWYgKGFicygkbikgPD0gJGVkZ2VsaW1pdCkgeworICAgICAgIyBE cm9wIGlmIHdlIGFyZSBiZWxvdyAtLWVkZ2VmcmFjdGlvbgorICAgICAgJGtlZXAgPSAwOworICAg IH0gZWxzaWYgKCRvdXRkZWdyZWV7JHNyY30gPj0gJG1haW46Om9wdF9tYXhkZWdyZWUgfHwKKyAg ICAgICAgICAgICAkaW5kZWdyZWV7JGRzdH0gPj0gJG1haW46Om9wdF9tYXhkZWdyZWUpIHsKKyAg ICAgICMgS2VlcCBsaW1pdGVkIG51bWJlciBvZiBpbi9vdXQgZWRnZXMgcGVyIG5vZGUKKyAgICAg ICRrZWVwID0gMDsKKyAgICB9IGVsc2UgeworICAgICAgJGtlZXAgPSAxOworICAgIH0KKworICAg IGlmICgka2VlcCkgeworICAgICAgJG91dGRlZ3JlZXskc3JjfSsrOworICAgICAgJGluZGVncmVl eyRkc3R9Kys7CisKKyAgICAgICMgQ29tcHV0ZSBsaW5lIHdpZHRoIGJhc2VkIG9uIGVkZ2UgY291 bnQKKyAgICAgIG15ICRmcmFjdGlvbiA9IGFicygkbG9jYWxfdG90YWwgPyAoMyAqICgkbiAvICRs b2NhbF90b3RhbCkpIDogMCk7CisgICAgICBpZiAoJGZyYWN0aW9uID4gMSkgeyAkZnJhY3Rpb24g PSAxOyB9CisgICAgICBteSAkdyA9ICRmcmFjdGlvbiAqIDI7CisgICAgICBpZiAoJHcgPCAxICYm ICgkbWFpbjo6b3B0X3dlYiB8fCAkbWFpbjo6b3B0X3N2ZykpIHsKKyAgICAgICAgIyBTVkcgb3V0 cHV0IHRyZWF0cyBsaW5lIHdpZHRocyA8IDEgcG9vcmx5LgorICAgICAgICAkdyA9IDE7CisgICAg ICB9CisKKyAgICAgICMgRG90IHNvbWV0aW1lcyBzZWdmYXVsdHMgaWYgZ2l2ZW4gZWRnZSB3ZWln aHRzIHRoYXQgYXJlIHRvbyBsYXJnZSwgc28KKyAgICAgICMgd2UgY2FwIHRoZSB3ZWlnaHRzIGF0 IGEgbGFyZ2UgdmFsdWUKKyAgICAgIG15ICRlZGdld2VpZ2h0ID0gYWJzKCRuKSAqKiAwLjc7Cisg ICAgICBpZiAoJGVkZ2V3ZWlnaHQgPiAxMDAwMDApIHsgJGVkZ2V3ZWlnaHQgPSAxMDAwMDA7IH0K KyAgICAgICRlZGdld2VpZ2h0ID0gaW50KCRlZGdld2VpZ2h0KTsKKworICAgICAgbXkgJHN0eWxl ID0gc3ByaW50Zigic2V0bGluZXdpZHRoKCVmKSIsICR3KTsKKyAgICAgIGlmICgkeFsxXSA9fiBt L1woaW5saW5lXCkvKSB7CisgICAgICAgICRzdHlsZSAuPSAiLGRhc2hlZCI7CisgICAgICB9CisK KyAgICAgICMgVXNlIGEgc2xpZ2h0bHkgc3F1YXNoZWQgZnVuY3Rpb24gb2YgdGhlIGVkZ2UgY291 bnQgYXMgdGhlIHdlaWdodAorICAgICAgcHJpbnRmIERPVCAoIk4lcyAtPiBOJXMgW2xhYmVsPSVz LCB3ZWlnaHQ9JWQsIHN0eWxlPVwiJXNcIl07XG4iLAorICAgICAgICAgICAgICAgICAgJG5vZGV7 JHhbMF19LAorICAgICAgICAgICAgICAgICAgJG5vZGV7JHhbMV19LAorICAgICAgICAgICAgICAg ICAgVW5wYXJzZSgkbiksCisgICAgICAgICAgICAgICAgICAkZWRnZXdlaWdodCwKKyAgICAgICAg ICAgICAgICAgICRzdHlsZSk7CisgICAgfQorICB9CisKKyAgcHJpbnQgRE9UICgifVxuIik7Cisg IGNsb3NlKERPVCk7CisKKyAgaWYgKCRtYWluOjpvcHRfd2ViIHx8ICRtYWluOjpvcHRfc3ZnKSB7 CisgICAgIyBSZXdyaXRlIFNWRyB0byBiZSBtb3JlIHVzYWJsZSBpbnNpZGUgd2ViIGJyb3dzZXIu CisgICAgUmV3cml0ZVN2ZyhUZW1wTmFtZSgkbWFpbjo6bmV4dF90bXBmaWxlLCAic3ZnIikpOwor ICB9CisKKyAgcmV0dXJuIDE7Cit9CisKK3N1YiBSZXdyaXRlU3ZnIHsKKyAgbXkgJHN2Z2ZpbGUg PSBzaGlmdDsKKworICBvcGVuKFNWRywgJHN2Z2ZpbGUpIHx8IGRpZSAib3BlbiB0ZW1wIHN2Zzog JCEiOworICBteSBAc3ZnID0gPFNWRz47CisgIGNsb3NlKFNWRyk7CisgIHVubGluayAkc3ZnZmls ZTsKKyAgbXkgJHN2ZyA9IGpvaW4oJycsIEBzdmcpOworCisgICMgRG90J3MgU1ZHIG91dHB1dCBp cworICAjCisgICMgICAgPHN2ZyB3aWR0aD0iX19fIiBoZWlnaHQ9Il9fXyIKKyAgIyAgICAgdmll d0JveD0iX19fIiB4bWxucz0uLi4+CisgICMgICAgPGcgaWQ9ImdyYXBoMCIgdHJhbnNmb3JtPSIu Li4iPgorICAjICAgIC4uLgorICAjICAgIDwvZz4KKyAgIyAgICA8L3N2Zz4KKyAgIworICAjIENo YW5nZSBpdCB0bworICAjCisgICMgICAgPHN2ZyB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIgor ICAjICAgICB4bWxucz0uLi4+CisgICMgICAgJHN2Z19qYXZhc2NyaXB0CisgICMgICAgPGcgaWQ9 InZpZXdwb3J0IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLDApIj4KKyAgIyAgICA8ZyBpZD0iZ3Jh cGgwIiB0cmFuc2Zvcm09Ii4uLiI+CisgICMgICAgLi4uCisgICMgICAgPC9nPgorICAjICAgIDwv Zz4KKyAgIyAgICA8L3N2Zz4KKworICAjIEZpeCB3aWR0aCwgaGVpZ2h0OyBkcm9wIHZpZXdCb3gu CisgICRzdmcgPX4gcy8oP3MpPHN2ZyB3aWR0aD0iW14iXSsiIGhlaWdodD0iW14iXSsiKC4qPyl2 aWV3Qm94PSJbXiJdKyIvPHN2ZyB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiQxLzsKKworICAj IEluc2VydCBzY3JpcHQsIHZpZXdwb3J0IDxnPiBhYm92ZSBmaXJzdCA8Zz4KKyAgbXkgJHN2Z19q YXZhc2NyaXB0ID0gU3ZnSmF2YXNjcmlwdCgpOworICBteSAkdmlld3BvcnQgPSAiPGcgaWQ9XCJ2 aWV3cG9ydFwiIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgwLDApXCI+XG4iOworICAkc3ZnID1+IHMv PGcgaWQ9ImdyYXBoXGQiLyRzdmdfamF2YXNjcmlwdCR2aWV3cG9ydCQmLzsKKworICAjIEluc2Vy dCBmaW5hbCA8L2c+IGFib3ZlIDwvc3ZnPi4KKyAgJHN2ZyA9fiBzLyguKikoPFwvc3ZnPikvJDE8 XC9nPiQyLzsKKyAgJHN2ZyA9fiBzLzxnIGlkPSJncmFwaFxkIiguKj8pLzxnIGlkPSJ2aWV3cG9y dCIkMS87CisKKyAgaWYgKCRtYWluOjpvcHRfc3ZnKSB7CisgICAgIyAtLXN2Zzogd3JpdGUgdG8g c3RhbmRhcmQgb3V0cHV0LgorICAgIHByaW50ICRzdmc7CisgIH0gZWxzZSB7CisgICAgIyBXcml0 ZSBiYWNrIHRvIHRlbXBvcmFyeSBmaWxlLgorICAgIG9wZW4oU1ZHLCAiPiRzdmdmaWxlIikgfHwg ZGllICJvcGVuICRzdmdmaWxlOiAkISI7CisgICAgcHJpbnQgU1ZHICRzdmc7CisgICAgY2xvc2Uo U1ZHKTsKKyAgfQorfQorCitzdWIgU3ZnSmF2YXNjcmlwdCB7CisgIHJldHVybiA8PCdFT0YnOwor PHNjcmlwdCB0eXBlPSJ0ZXh0L2VjbWFzY3JpcHQiPjwhW0NEQVRBWworLy8gU1ZHUGFuCisvLyBo dHRwOi8vd3d3LmN5YmVyei5vcmcvYmxvZy8yMDA5LzEyLzA4L3N2Z3Bhbi1hLWphdmFzY3JpcHQt c3ZnLXBhbnpvb21kcmFnLWxpYnJhcnkvCisvLyBMb2NhbCBtb2RpZmljYXRpb246IGlmKHRydWUg fHwgLi4uKSBiZWxvdyB0byBmb3JjZSBwYW5uaW5nLCBuZXZlciBtb3ZpbmcuCisKKy8qKgorICog IFNWR1BhbiBsaWJyYXJ5IDEuMgorICogPT09PT09PT09PT09PT09PT09PT0KKyAqCisgKiBHaXZl biBhbiB1bmlxdWUgZXhpc3RpbmcgZWxlbWVudCB3aXRoIGlkICJ2aWV3cG9ydCIsIGluY2x1ZGlu ZyB0aGUKKyAqIHRoZSBsaWJyYXJ5IGludG8gYW55IFNWRyBhZGRzIHRoZSBmb2xsb3dpbmcgY2Fw YWJpbGl0aWVzOgorICoKKyAqICAtIE1vdXNlIHBhbm5pbmcKKyAqICAtIE1vdXNlIHpvb21pbmcg KHVzaW5nIHRoZSB3aGVlbCkKKyAqICAtIE9iamVjdCBkYXJnZ2luZworICoKKyAqIEtub3duIGlz c3VlczoKKyAqCisgKiAgLSBab29taW5nICh3aGlsZSBwYW5uaW5nKSBvbiBTYWZhcmkgaGFzIHN0 aWxsIHNvbWUgaXNzdWVzCisgKgorICogUmVsZWFzZXM6CisgKgorICogMS4yLCBTYXQgTWFyIDIw IDA4OjQyOjUwIEdNVCAyMDEwLCBaZW5nIFhpYW9odWkKKyAqCUZpeGVkIGEgYnVnIHdpdGggYnJv d3NlciBtb3VzZSBoYW5kbGVyIGludGVyYWN0aW9uCisgKgorICogMS4xLCBXZWQgRmViICAzIDE3 OjM5OjMzIEdNVCAyMDEwLCBaZW5nIFhpYW9odWkKKyAqCVVwZGF0ZWQgdGhlIHpvb20gY29kZSB0 byBzdXBwb3J0IHRoZSBtb3VzZSB3aGVlbCBvbiBTYWZhcmkvQ2hyb21lCisgKgorICogMS4wLCBB bmRyZWEgTGVvZnJlZGRpCisgKglGaXJzdCByZWxlYXNlCisgKgorICogVGhpcyBjb2RlIGlzIGxp Y2Vuc2VkIHVuZGVyIHRoZSBmb2xsb3dpbmcgQlNEIGxpY2Vuc2U6CisgKgorICogQ29weXJpZ2h0 IDIwMDktMjAxMCBBbmRyZWEgTGVvZnJlZGRpIDxhLmxlb2ZyZWRkaUBpdGNoYXJtLmNvbT4uIEFs bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlCisg KiBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1l dDoKKyAqCisgKiAgICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh aW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZgorICogICAgICAgY29u ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqICAgIDIuIFJlZGlz dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp Z2h0IG5vdGljZSwgdGhpcyBsaXN0CisgKiAgICAgICBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy aWFscworICogICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQW5kcmVhIExlb2ZyZWRkaSBgYEFTIElTJycgQU5E IEFOWSBFWFBSRVNTIE9SIElNUExJRUQKKyAqIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB TkQKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ TiBOTyBFVkVOVCBTSEFMTCBBbmRyZWEgTGVvZnJlZGRpIE9SCisgKiBDT05UUklCVVRPUlMgQkUg TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklD RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORwor ICogTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGCisgKiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKiBUaGUgdmlld3MgYW5kIGNvbmNsdXNpb25zIGNv bnRhaW5lZCBpbiB0aGUgc29mdHdhcmUgYW5kIGRvY3VtZW50YXRpb24gYXJlIHRob3NlIG9mIHRo ZQorICogYXV0aG9ycyBhbmQgc2hvdWxkIG5vdCBiZSBpbnRlcnByZXRlZCBhcyByZXByZXNlbnRp bmcgb2ZmaWNpYWwgcG9saWNpZXMsIGVpdGhlciBleHByZXNzZWQKKyAqIG9yIGltcGxpZWQsIG9m IEFuZHJlYSBMZW9mcmVkZGkuCisgKi8KKwordmFyIHJvb3QgPSBkb2N1bWVudC5kb2N1bWVudEVs ZW1lbnQ7CisKK3ZhciBzdGF0ZSA9ICdub25lJywgc3RhdGVUYXJnZXQsIHN0YXRlT3JpZ2luLCBz dGF0ZVRmOworCitzZXR1cEhhbmRsZXJzKHJvb3QpOworCisvKioKKyAqIFJlZ2lzdGVyIGhhbmRs ZXJzCisgKi8KK2Z1bmN0aW9uIHNldHVwSGFuZGxlcnMocm9vdCl7CisJc2V0QXR0cmlidXRlcyhy b290LCB7CisJCSJvbm1vdXNldXAiIDogImFkZChldnQpIiwKKwkJIm9ubW91c2Vkb3duIiA6ICJo YW5kbGVNb3VzZURvd24oZXZ0KSIsCisJCSJvbm1vdXNlbW92ZSIgOiAiaGFuZGxlTW91c2VNb3Zl KGV2dCkiLAorCQkib25tb3VzZXVwIiA6ICJoYW5kbGVNb3VzZVVwKGV2dCkiLAorCQkvLyJvbm1v dXNlb3V0IiA6ICJoYW5kbGVNb3VzZVVwKGV2dCkiLCAvLyBEZWNvbW1lbnQgdGhpcyB0byBzdG9w IHRoZSBwYW4gZnVuY3Rpb25hbGl0eSB3aGVuIGRyYWdnaW5nIG91dCBvZiB0aGUgU1ZHIGVsZW1l bnQKKwl9KTsKKworCWlmKG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5pbmRleE9m KCd3ZWJraXQnKSA+PSAwKQorCQl3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V3aGVlbCcs IGhhbmRsZU1vdXNlV2hlZWwsIGZhbHNlKTsgLy8gQ2hyb21lL1NhZmFyaQorCWVsc2UKKwkJd2lu ZG93LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTU1vdXNlU2Nyb2xsJywgaGFuZGxlTW91c2VXaGVlbCwg ZmFsc2UpOyAvLyBPdGhlcnMKKworCXZhciBnID0gc3ZnRG9jLmdldEVsZW1lbnRCeUlkKCJzdmci KTsKKwlnLndpZHRoID0gIjEwMCUiOworCWcuaGVpZ2h0ID0gIjEwMCUiOworfQorCisvKioKKyAq IEluc3RhbmNlIGFuIFNWR1BvaW50IG9iamVjdCB3aXRoIGdpdmVuIGV2ZW50IGNvb3JkaW5hdGVz LgorICovCitmdW5jdGlvbiBnZXRFdmVudFBvaW50KGV2dCkgeworCXZhciBwID0gcm9vdC5jcmVh dGVTVkdQb2ludCgpOworCisJcC54ID0gZXZ0LmNsaWVudFg7CisJcC55ID0gZXZ0LmNsaWVudFk7 CisKKwlyZXR1cm4gcDsKK30KKworLyoqCisgKiBTZXRzIHRoZSBjdXJyZW50IHRyYW5zZm9ybSBt YXRyaXggb2YgYW4gZWxlbWVudC4KKyAqLworZnVuY3Rpb24gc2V0Q1RNKGVsZW1lbnQsIG1hdHJp eCkgeworCXZhciBzID0gIm1hdHJpeCgiICsgbWF0cml4LmEgKyAiLCIgKyBtYXRyaXguYiArICIs IiArIG1hdHJpeC5jICsgIiwiICsgbWF0cml4LmQgKyAiLCIgKyBtYXRyaXguZSArICIsIiArIG1h dHJpeC5mICsgIikiOworCisJZWxlbWVudC5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsIHMpOwor fQorCisvKioKKyAqIER1bXBzIGEgbWF0cml4IHRvIGEgc3RyaW5nICh1c2VmdWwgZm9yIGRlYnVn KS4KKyAqLworZnVuY3Rpb24gZHVtcE1hdHJpeChtYXRyaXgpIHsKKwl2YXIgcyA9ICJbICIgKyBt YXRyaXguYSArICIsICIgKyBtYXRyaXguYyArICIsICIgKyBtYXRyaXguZSArICJcbiAgIiArIG1h dHJpeC5iICsgIiwgIiArIG1hdHJpeC5kICsgIiwgIiArIG1hdHJpeC5mICsgIlxuICAwLCAwLCAx IF0iOworCisJcmV0dXJuIHM7Cit9CisKKy8qKgorICogU2V0cyBhdHRyaWJ1dGVzIG9mIGFuIGVs ZW1lbnQuCisgKi8KK2Z1bmN0aW9uIHNldEF0dHJpYnV0ZXMoZWxlbWVudCwgYXR0cmlidXRlcyl7 CisJZm9yIChpIGluIGF0dHJpYnV0ZXMpCisJCWVsZW1lbnQuc2V0QXR0cmlidXRlTlMobnVsbCwg aSwgYXR0cmlidXRlc1tpXSk7Cit9CisKKy8qKgorICogSGFuZGxlIG1vdXNlIG1vdmUgZXZlbnQu CisgKi8KK2Z1bmN0aW9uIGhhbmRsZU1vdXNlV2hlZWwoZXZ0KSB7CisJaWYoZXZ0LnByZXZlbnRE ZWZhdWx0KQorCQlldnQucHJldmVudERlZmF1bHQoKTsKKworCWV2dC5yZXR1cm5WYWx1ZSA9IGZh bHNlOworCisJdmFyIHN2Z0RvYyA9IGV2dC50YXJnZXQub3duZXJEb2N1bWVudDsKKworCXZhciBk ZWx0YTsKKworCWlmKGV2dC53aGVlbERlbHRhKQorCQlkZWx0YSA9IGV2dC53aGVlbERlbHRhIC8g MzYwMDsgLy8gQ2hyb21lL1NhZmFyaQorCWVsc2UKKwkJZGVsdGEgPSBldnQuZGV0YWlsIC8gLTkw OyAvLyBNb3ppbGxhCisKKwl2YXIgeiA9IDEgKyBkZWx0YTsgLy8gWm9vbSBmYWN0b3I6IDAuOS8x LjEKKworCXZhciBnID0gc3ZnRG9jLmdldEVsZW1lbnRCeUlkKCJ2aWV3cG9ydCIpOworCisJdmFy IHAgPSBnZXRFdmVudFBvaW50KGV2dCk7CisKKwlwID0gcC5tYXRyaXhUcmFuc2Zvcm0oZy5nZXRD VE0oKS5pbnZlcnNlKCkpOworCisJLy8gQ29tcHV0ZSBuZXcgc2NhbGUgbWF0cml4IGluIGN1cnJl bnQgbW91c2UgcG9zaXRpb24KKwl2YXIgayA9IHJvb3QuY3JlYXRlU1ZHTWF0cml4KCkudHJhbnNs YXRlKHAueCwgcC55KS5zY2FsZSh6KS50cmFuc2xhdGUoLXAueCwgLXAueSk7CisKKyAgICAgICAg c2V0Q1RNKGcsIGcuZ2V0Q1RNKCkubXVsdGlwbHkoaykpOworCisJc3RhdGVUZiA9IHN0YXRlVGYu bXVsdGlwbHkoay5pbnZlcnNlKCkpOworfQorCisvKioKKyAqIEhhbmRsZSBtb3VzZSBtb3ZlIGV2 ZW50LgorICovCitmdW5jdGlvbiBoYW5kbGVNb3VzZU1vdmUoZXZ0KSB7CisJaWYoZXZ0LnByZXZl bnREZWZhdWx0KQorCQlldnQucHJldmVudERlZmF1bHQoKTsKKworCWV2dC5yZXR1cm5WYWx1ZSA9 IGZhbHNlOworCisJdmFyIHN2Z0RvYyA9IGV2dC50YXJnZXQub3duZXJEb2N1bWVudDsKKworCXZh ciBnID0gc3ZnRG9jLmdldEVsZW1lbnRCeUlkKCJ2aWV3cG9ydCIpOworCisJaWYoc3RhdGUgPT0g J3BhbicpIHsKKwkJLy8gUGFuIG1vZGUKKwkJdmFyIHAgPSBnZXRFdmVudFBvaW50KGV2dCkubWF0 cml4VHJhbnNmb3JtKHN0YXRlVGYpOworCisJCXNldENUTShnLCBzdGF0ZVRmLmludmVyc2UoKS50 cmFuc2xhdGUocC54IC0gc3RhdGVPcmlnaW4ueCwgcC55IC0gc3RhdGVPcmlnaW4ueSkpOworCX0g ZWxzZSBpZihzdGF0ZSA9PSAnbW92ZScpIHsKKwkJLy8gTW92ZSBtb2RlCisJCXZhciBwID0gZ2V0 RXZlbnRQb2ludChldnQpLm1hdHJpeFRyYW5zZm9ybShnLmdldENUTSgpLmludmVyc2UoKSk7CisK KwkJc2V0Q1RNKHN0YXRlVGFyZ2V0LCByb290LmNyZWF0ZVNWR01hdHJpeCgpLnRyYW5zbGF0ZShw LnggLSBzdGF0ZU9yaWdpbi54LCBwLnkgLSBzdGF0ZU9yaWdpbi55KS5tdWx0aXBseShnLmdldENU TSgpLmludmVyc2UoKSkubXVsdGlwbHkoc3RhdGVUYXJnZXQuZ2V0Q1RNKCkpKTsKKworCQlzdGF0 ZU9yaWdpbiA9IHA7CisJfQorfQorCisvKioKKyAqIEhhbmRsZSBjbGljayBldmVudC4KKyAqLwor ZnVuY3Rpb24gaGFuZGxlTW91c2VEb3duKGV2dCkgeworCWlmKGV2dC5wcmV2ZW50RGVmYXVsdCkK KwkJZXZ0LnByZXZlbnREZWZhdWx0KCk7CisKKwlldnQucmV0dXJuVmFsdWUgPSBmYWxzZTsKKwor CXZhciBzdmdEb2MgPSBldnQudGFyZ2V0Lm93bmVyRG9jdW1lbnQ7CisKKwl2YXIgZyA9IHN2Z0Rv Yy5nZXRFbGVtZW50QnlJZCgidmlld3BvcnQiKTsKKworCWlmKHRydWUgfHwgZXZ0LnRhcmdldC50 YWdOYW1lID09ICJzdmciKSB7CisJCS8vIFBhbiBtb2RlCisJCXN0YXRlID0gJ3Bhbic7CisKKwkJ c3RhdGVUZiA9IGcuZ2V0Q1RNKCkuaW52ZXJzZSgpOworCisJCXN0YXRlT3JpZ2luID0gZ2V0RXZl bnRQb2ludChldnQpLm1hdHJpeFRyYW5zZm9ybShzdGF0ZVRmKTsKKwl9IGVsc2UgeworCQkvLyBN b3ZlIG1vZGUKKwkJc3RhdGUgPSAnbW92ZSc7CisKKwkJc3RhdGVUYXJnZXQgPSBldnQudGFyZ2V0 OworCisJCXN0YXRlVGYgPSBnLmdldENUTSgpLmludmVyc2UoKTsKKworCQlzdGF0ZU9yaWdpbiA9 IGdldEV2ZW50UG9pbnQoZXZ0KS5tYXRyaXhUcmFuc2Zvcm0oc3RhdGVUZik7CisJfQorfQorCisv KioKKyAqIEhhbmRsZSBtb3VzZSBidXR0b24gcmVsZWFzZSBldmVudC4KKyAqLworZnVuY3Rpb24g aGFuZGxlTW91c2VVcChldnQpIHsKKwlpZihldnQucHJldmVudERlZmF1bHQpCisJCWV2dC5wcmV2 ZW50RGVmYXVsdCgpOworCisJZXZ0LnJldHVyblZhbHVlID0gZmFsc2U7CisKKwl2YXIgc3ZnRG9j ID0gZXZ0LnRhcmdldC5vd25lckRvY3VtZW50OworCisJaWYoc3RhdGUgPT0gJ3BhbicgfHwgc3Rh dGUgPT0gJ21vdmUnKSB7CisJCS8vIFF1aXQgcGFuIG1vZGUKKwkJc3RhdGUgPSAnJzsKKwl9Cit9 CisKK11dPjwvc2NyaXB0PgorRU9GCit9CisKKyMgUHJvdmlkZXMgYSBtYXAgZnJvbSBmdWxsbmFt ZSB0byBzaG9ydG5hbWUgZm9yIGNhc2VzIHdoZXJlIHRoZQorIyBzaG9ydG5hbWUgaXMgYW1iaWd1 b3VzLiAgVGhlIHN5bWxpc3QgaGFzIGJvdGggdGhlIGZ1bGxuYW1lIGFuZAorIyBzaG9ydG5hbWUg Zm9yIGFsbCBzeW1ib2xzLCB3aGljaCBpcyB1c3VhbGx5IGZpbmUsIGJ1dCBzb21ldGltZXMgLS0K KyMgc3VjaCBhcyBvdmVybG9hZGVkIGZ1bmN0aW9ucyAtLSB0d28gZGlmZmVyZW50IGZ1bGxuYW1l cyBjYW4gbWFwIHRvCisjIHRoZSBzYW1lIHNob3J0bmFtZS4gIEluIHRoYXQgY2FzZSwgd2UgdXNl IHRoZSBhZGRyZXNzIG9mIHRoZQorIyBmdW5jdGlvbiB0byBkaXNhbWJpZ3VhdGUgdGhlIHR3by4g IFRoaXMgZnVuY3Rpb24gZmlsbHMgaW4gYSBtYXAgdGhhdAorIyBtYXBzIGZ1bGxuYW1lcyB0byBt b2RpZmllZCBzaG9ydG5hbWVzIGluIHN1Y2ggY2FzZXMuICBJZiBhIGZ1bGxuYW1lCisjIGlzIG5v dCBwcmVzZW50IGluIHRoZSBtYXAsIHRoZSAnbm9ybWFsJyBzaG9ydG5hbWUgcHJvdmlkZWQgYnkg dGhlCisjIHN5bWxpc3QgaXMgdGhlIGFwcHJvcHJpYXRlIG9uZSB0byB1c2UuCitzdWIgRmlsbEZ1 bGxuYW1lVG9TaG9ydG5hbWVNYXAgeworICBteSAkc3ltYm9scyA9IHNoaWZ0OworICBteSAkZnVs bG5hbWVfdG9fc2hvcnRuYW1lX21hcCA9IHNoaWZ0OworICBteSAkc2hvcnRuYW1lc19zZWVuX29u Y2UgPSB7fTsKKyAgbXkgJHNob3J0bmFtZXNfc2Vlbl9tb3JlX3RoYW5fb25jZSA9IHt9OworCisg IGZvcmVhY2ggbXkgJHN5bWxpc3QgKHZhbHVlcygleyRzeW1ib2xzfSkpIHsKKyAgICAjIFRPRE8o Y3NpbHZlcnMpOiBkZWFsIHdpdGggaW5saW5lZCBzeW1ib2xzIHRvby4KKyAgICBteSAkc2hvcnRu YW1lID0gJHN5bWxpc3QtPlswXTsKKyAgICBteSAkZnVsbG5hbWUgPSAkc3ltbGlzdC0+WzJdOwor ICAgIGlmICgkZnVsbG5hbWUgIX4gLzxbMC05YS1mQS1GXSs+JC8pIHsgICMgZnVsbG5hbWUgZG9l c24ndCBlbmQgaW4gYW4gYWRkcmVzcworICAgICAgbmV4dDsgICAgICAgIyB0aGUgb25seSBjb2xs aXNpb25zIHdlIGNhcmUgYWJvdXQgYXJlIHdoZW4gYWRkcmVzc2VzIGRpZmZlcgorICAgIH0KKyAg ICBpZiAoZGVmaW5lZCgkc2hvcnRuYW1lc19zZWVuX29uY2UtPnskc2hvcnRuYW1lfSkgJiYKKyAg ICAgICAgJHNob3J0bmFtZXNfc2Vlbl9vbmNlLT57JHNob3J0bmFtZX0gbmUgJGZ1bGxuYW1lKSB7 CisgICAgICAkc2hvcnRuYW1lc19zZWVuX21vcmVfdGhhbl9vbmNlLT57JHNob3J0bmFtZX0gPSAx OworICAgIH0gZWxzZSB7CisgICAgICAkc2hvcnRuYW1lc19zZWVuX29uY2UtPnskc2hvcnRuYW1l fSA9ICRmdWxsbmFtZTsKKyAgICB9CisgIH0KKworICBmb3JlYWNoIG15ICRzeW1saXN0ICh2YWx1 ZXMoJXskc3ltYm9sc30pKSB7CisgICAgbXkgJHNob3J0bmFtZSA9ICRzeW1saXN0LT5bMF07Cisg ICAgbXkgJGZ1bGxuYW1lID0gJHN5bWxpc3QtPlsyXTsKKyAgICAjIFRPRE8oY3NpbHZlcnMpOiB0 YWtlIGluIGEgbGlzdCBvZiBhZGRyZXNzZXMgd2UgY2FyZSBhYm91dCwgYW5kIG9ubHkKKyAgICAj IHN0b3JlIGluIHRoZSBtYXAgaWYgJHN5bWxpc3QtPlsxXSBpcyBpbiB0aGF0IGxpc3QuICBTYXZl cyBzcGFjZS4KKyAgICBuZXh0IGlmIGRlZmluZWQoJGZ1bGxuYW1lX3RvX3Nob3J0bmFtZV9tYXAt PnskZnVsbG5hbWV9KTsKKyAgICBpZiAoZGVmaW5lZCgkc2hvcnRuYW1lc19zZWVuX21vcmVfdGhh bl9vbmNlLT57JHNob3J0bmFtZX0pKSB7CisgICAgICBpZiAoJGZ1bGxuYW1lID1+IC88MCooW14+ XSopPiQvKSB7ICAgIyBmdWxsbmFtZSBoYXMgYWRkcmVzcyBhdCBlbmQgb2YgaXQKKyAgICAgICAg JGZ1bGxuYW1lX3RvX3Nob3J0bmFtZV9tYXAtPnskZnVsbG5hbWV9ID0gIiRzaG9ydG5hbWVcQCQx IjsKKyAgICAgIH0KKyAgICB9CisgIH0KK30KKworIyBSZXR1cm4gYSBzbWFsbCBudW1iZXIgdGhh dCBpZGVudGlmaWVzIHRoZSBhcmd1bWVudC4KKyMgTXVsdGlwbGUgY2FsbHMgd2l0aCB0aGUgc2Ft ZSBhcmd1bWVudCB3aWxsIHJldHVybiB0aGUgc2FtZSBudW1iZXIuCisjIENhbGxzIHdpdGggZGlm ZmVyZW50IGFyZ3VtZW50cyB3aWxsIHJldHVybiBkaWZmZXJlbnQgbnVtYmVycy4KK3N1YiBTaG9y dElkRm9yIHsKKyAgbXkgJGtleSA9IHNoaWZ0OworICBteSAkaWQgPSAkbWFpbjo6dW5pcXVlaWR7 JGtleX07CisgIGlmICghZGVmaW5lZCgkaWQpKSB7CisgICAgJGlkID0ga2V5cyglbWFpbjo6dW5p cXVlaWQpICsgMTsKKyAgICAkbWFpbjo6dW5pcXVlaWR7JGtleX0gPSAkaWQ7CisgIH0KKyAgcmV0 dXJuICRpZDsKK30KKworIyBUcmFuc2xhdGUgYSBzdGFjayBvZiBhZGRyZXNzZXMgaW50byBhIHN0 YWNrIG9mIHN5bWJvbHMKK3N1YiBUcmFuc2xhdGVTdGFjayB7CisgIG15ICRzeW1ib2xzID0gc2hp ZnQ7CisgIG15ICRmdWxsbmFtZV90b19zaG9ydG5hbWVfbWFwID0gc2hpZnQ7CisgIG15ICRrID0g c2hpZnQ7CisKKyAgbXkgQGFkZHJzID0gc3BsaXQoL1xuLywgJGspOworICBteSBAcmVzdWx0ID0g KCk7CisgIGZvciAobXkgJGkgPSAwOyAkaSA8PSAkI2FkZHJzOyAkaSsrKSB7CisgICAgbXkgJGEg PSAkYWRkcnNbJGldOworCisgICAgIyBTa2lwIGxhcmdlIGFkZHJlc3NlcyBzaW5jZSB0aGV5IHNv bWV0aW1lcyBzaG93IHVwIGFzIGZha2UgZW50cmllcyBvbiBSSDkKKyAgICBpZiAobGVuZ3RoKCRh KSA+IDggJiYgJGEgZ3QgIjdmZmZmZmZmZmZmZmZmZmYiKSB7CisgICAgICBuZXh0OworICAgIH0K KworICAgIGlmICgkbWFpbjo6b3B0X2Rpc2FzbSB8fCAkbWFpbjo6b3B0X2xpc3QpIHsKKyAgICAg ICMgV2Ugd2FudCBqdXN0IHRoZSBhZGRyZXNzIGZvciB0aGUga2V5CisgICAgICBwdXNoKEByZXN1 bHQsICRhKTsKKyAgICAgIG5leHQ7CisgICAgfQorCisgICAgbXkgJHN5bWxpc3QgPSAkc3ltYm9s cy0+eyRhfTsKKyAgICBpZiAoIWRlZmluZWQoJHN5bWxpc3QpKSB7CisgICAgICAkc3ltbGlzdCA9 IFskYSwgIiIsICRhXTsKKyAgICB9CisKKyAgICAjIFdlIGNhbiBoYXZlIGEgc2VxdWVuY2Ugb2Yg c3ltYm9scyBmb3IgYSBwYXJ0aWN1bGFyIGVudHJ5CisgICAgIyAobW9yZSB0aGFuIG9uZSBzeW1i b2wgaW4gdGhlIGNhc2Ugb2YgaW5saW5pbmcpLiAgQ2FsbGVycworICAgICMgY29tZSBiZWZvcmUg Y2FsbGVlcyBpbiBzeW1saXN0LCBzbyB3YWxrIGJhY2t3YXJkcyBzaW5jZQorICAgICMgdGhlIHRy YW5zbGF0ZWQgc3RhY2sgc2hvdWxkIGNvbnRhaW4gY2FsbGVlcyBiZWZvcmUgY2FsbGVycy4KKyAg ICBmb3IgKG15ICRqID0gJCN7JHN5bWxpc3R9OyAkaiA+PSAyOyAkaiAtPSAzKSB7CisgICAgICBt eSAkZnVuYyA9ICRzeW1saXN0LT5bJGotMl07CisgICAgICBteSAkZmlsZWxpbmUgPSAkc3ltbGlz dC0+WyRqLTFdOworICAgICAgbXkgJGZ1bGxmdW5jID0gJHN5bWxpc3QtPlskal07CisgICAgICBp ZiAoZGVmaW5lZCgkZnVsbG5hbWVfdG9fc2hvcnRuYW1lX21hcC0+eyRmdWxsZnVuY30pKSB7Cisg ICAgICAgICRmdW5jID0gJGZ1bGxuYW1lX3RvX3Nob3J0bmFtZV9tYXAtPnskZnVsbGZ1bmN9Owor ICAgICAgfQorICAgICAgaWYgKCRqID4gMikgeworICAgICAgICAkZnVuYyA9ICIkZnVuYyAoaW5s aW5lKSI7CisgICAgICB9CisKKyAgICAgICMgRG8gbm90IG1lcmdlIG5vZGVzIGNvcnJlc3BvbmRp bmcgdG8gQ2FsbGJhY2s6OlJ1biBzaW5jZSB0aGF0CisgICAgICAjIGNhdXNlcyBjb25mdXNpbmcg Y3ljbGVzIGluIGRvdCBkaXNwbGF5LiAgSW5zdGVhZCwgd2Ugc3ludGhlc2l6ZQorICAgICAgIyBh IHVuaXF1ZSBuYW1lIGZvciB0aGlzIGZyYW1lIHBlciBjYWxsZXIuCisgICAgICBpZiAoJGZ1bmMg PX4gbS9DYWxsYmFjay4qOjpSdW4kLykgeworICAgICAgICBteSAkY2FsbGVyID0gKCRpID4gMCkg PyAkYWRkcnNbJGktMV0gOiAwOworICAgICAgICAkZnVuYyA9ICJSdW4jIiAuIFNob3J0SWRGb3Io JGNhbGxlcik7CisgICAgICB9CisKKyAgICAgIGlmICgkbWFpbjo6b3B0X2FkZHJlc3Nlcykgewor ICAgICAgICBwdXNoKEByZXN1bHQsICIkYSAkZnVuYyAkZmlsZWxpbmUiKTsKKyAgICAgIH0gZWxz aWYgKCRtYWluOjpvcHRfbGluZXMpIHsKKyAgICAgICAgaWYgKCRmdW5jIGVxICc/PycgJiYgJGZp bGVsaW5lIGVxICc/PzowJykgeworICAgICAgICAgIHB1c2goQHJlc3VsdCwgIiRhIik7CisgICAg ICAgIH0gZWxzZSB7CisgICAgICAgICAgcHVzaChAcmVzdWx0LCAiJGZ1bmMgJGZpbGVsaW5lIik7 CisgICAgICAgIH0KKyAgICAgIH0gZWxzaWYgKCRtYWluOjpvcHRfZnVuY3Rpb25zKSB7CisgICAg ICAgIGlmICgkZnVuYyBlcSAnPz8nKSB7CisgICAgICAgICAgcHVzaChAcmVzdWx0LCAiJGEiKTsK KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBwdXNoKEByZXN1bHQsICRmdW5jKTsKKyAgICAg ICAgfQorICAgICAgfSBlbHNpZiAoJG1haW46Om9wdF9maWxlcykgeworICAgICAgICBpZiAoJGZp bGVsaW5lIGVxICc/PzowJyB8fCAkZmlsZWxpbmUgZXEgJycpIHsKKyAgICAgICAgICBwdXNoKEBy ZXN1bHQsICIkYSIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIG15ICRmID0gJGZpbGVs aW5lOworICAgICAgICAgICRmID1+IHMvOlxkKyQvLzsKKyAgICAgICAgICBwdXNoKEByZXN1bHQs ICRmKTsKKyAgICAgICAgfQorICAgICAgfSBlbHNlIHsKKyAgICAgICAgcHVzaChAcmVzdWx0LCAk YSk7CisgICAgICAgIGxhc3Q7ICAjIERvIG5vdCBwcmludCBpbmxpbmVkIGluZm8KKyAgICAgIH0K KyAgICB9CisgIH0KKworICAjIHByaW50IGpvaW4oIiwiLCBAYWRkcnMpLCAiID0+ICIsIGpvaW4o IiwiLCBAcmVzdWx0KSwgIlxuIjsKKyAgcmV0dXJuIEByZXN1bHQ7Cit9CisKKyMgR2VuZXJhdGUg cGVyY2VudCBzdHJpbmcgZm9yIGEgbnVtYmVyIGFuZCBhIHRvdGFsCitzdWIgUGVyY2VudCB7Cisg IG15ICRudW0gPSBzaGlmdDsKKyAgbXkgJHRvdCA9IHNoaWZ0OworICBpZiAoJHRvdCAhPSAwKSB7 CisgICAgcmV0dXJuIHNwcmludGYoIiUuMWYlJSIsICRudW0gKiAxMDAuMCAvICR0b3QpOworICB9 IGVsc2UgeworICAgIHJldHVybiAoJG51bSA9PSAwKSA/ICJuYW4iIDogKCgkbnVtID4gMCkgPyAi K2luZiIgOiAiLWluZiIpOworICB9Cit9CisKKyMgR2VuZXJhdGUgcHJldHR5LXByaW50ZWQgZm9y bSBvZiBudW1iZXIKK3N1YiBVbnBhcnNlIHsKKyAgbXkgJG51bSA9IHNoaWZ0OworICBpZiAoJG1h aW46OnByb2ZpbGVfdHlwZSBlcSAnaGVhcCcgfHwgJG1haW46OnByb2ZpbGVfdHlwZSBlcSAnZ3Jv d3RoJykgeworICAgIGlmICgkbWFpbjo6b3B0X2ludXNlX29iamVjdHMgfHwgJG1haW46Om9wdF9h bGxvY19vYmplY3RzKSB7CisgICAgICByZXR1cm4gc3ByaW50ZigiJWQiLCAkbnVtKTsKKyAgICB9 IGVsc2UgeworICAgICAgaWYgKCRtYWluOjpvcHRfc2hvd19ieXRlcykgeworICAgICAgICByZXR1 cm4gc3ByaW50ZigiJWQiLCAkbnVtKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBz cHJpbnRmKCIlLjFmIiwgJG51bSAvIDEwNDg1NzYuMCk7CisgICAgICB9CisgICAgfQorICB9IGVs c2lmICgkbWFpbjo6cHJvZmlsZV90eXBlIGVxICdjb250ZW50aW9uJyAmJiAhJG1haW46Om9wdF9j b250ZW50aW9ucykgeworICAgIHJldHVybiBzcHJpbnRmKCIlLjNmIiwgJG51bSAvIDFlOSk7ICMg Q29udmVydCBuYW5vc2Vjb25kcyB0byBzZWNvbmRzCisgIH0gZWxzZSB7CisgICAgcmV0dXJuIHNw cmludGYoIiVkIiwgJG51bSk7CisgIH0KK30KKworIyBBbHRlcm5hdGUgcHJldHR5LXByaW50ZWQg Zm9ybTogMCBtYXBzIHRvICIuIgorc3ViIFVucGFyc2VBbHQgeworICBteSAkbnVtID0gc2hpZnQ7 CisgIGlmICgkbnVtID09IDApIHsKKyAgICByZXR1cm4gIi4iOworICB9IGVsc2UgeworICAgIHJl dHVybiBVbnBhcnNlKCRudW0pOworICB9Cit9CisKKyMgQWx0ZXJuYXRlIHByZXR0eS1wcmludGVk IGZvcm06IDAgbWFwcyB0byAiIgorc3ViIEh0bWxQcmludE51bWJlciB7CisgIG15ICRudW0gPSBz aGlmdDsKKyAgaWYgKCRudW0gPT0gMCkgeworICAgIHJldHVybiAiIjsKKyAgfSBlbHNlIHsKKyAg ICByZXR1cm4gVW5wYXJzZSgkbnVtKTsKKyAgfQorfQorCisjIFJldHVybiBvdXRwdXQgdW5pdHMK K3N1YiBVbml0cyB7CisgIGlmICgkbWFpbjo6cHJvZmlsZV90eXBlIGVxICdoZWFwJyB8fCAkbWFp bjo6cHJvZmlsZV90eXBlIGVxICdncm93dGgnKSB7CisgICAgaWYgKCRtYWluOjpvcHRfaW51c2Vf b2JqZWN0cyB8fCAkbWFpbjo6b3B0X2FsbG9jX29iamVjdHMpIHsKKyAgICAgIHJldHVybiAib2Jq ZWN0cyI7CisgICAgfSBlbHNlIHsKKyAgICAgIGlmICgkbWFpbjo6b3B0X3Nob3dfYnl0ZXMpIHsK KyAgICAgICAgcmV0dXJuICJCIjsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiAiTUIi OworICAgICAgfQorICAgIH0KKyAgfSBlbHNpZiAoJG1haW46OnByb2ZpbGVfdHlwZSBlcSAnY29u dGVudGlvbicgJiYgISRtYWluOjpvcHRfY29udGVudGlvbnMpIHsKKyAgICByZXR1cm4gInNlY29u ZHMiOworICB9IGVsc2UgeworICAgIHJldHVybiAic2FtcGxlcyI7CisgIH0KK30KKworIyMjIyMg UHJvZmlsZSBtYW5pcHVsYXRpb24gY29kZSAjIyMjIworCisjIEdlbmVyYXRlIGZsYXR0ZW5lZCBw cm9maWxlOgorIyBJZiBjb3VudCBpcyBjaGFyZ2VkIHRvIHN0YWNrIFthLGIsYyxkXSwgaW4gZ2Vu ZXJhdGVkIHByb2ZpbGUsCisjIGl0IHdpbGwgYmUgY2hhcmdlZCB0byBbYV0KK3N1YiBGbGF0UHJv ZmlsZSB7CisgIG15ICRwcm9maWxlID0gc2hpZnQ7CisgIG15ICRyZXN1bHQgPSB7fTsKKyAgZm9y ZWFjaCBteSAkayAoa2V5cygleyRwcm9maWxlfSkpIHsKKyAgICBteSAkY291bnQgPSAkcHJvZmls ZS0+eyRrfTsKKyAgICBteSBAYWRkcnMgPSBzcGxpdCgvXG4vLCAkayk7CisgICAgaWYgKCQjYWRk cnMgPj0gMCkgeworICAgICAgQWRkRW50cnkoJHJlc3VsdCwgJGFkZHJzWzBdLCAkY291bnQpOwor ICAgIH0KKyAgfQorICByZXR1cm4gJHJlc3VsdDsKK30KKworIyBHZW5lcmF0ZSBjdW11bGF0aXZl IHByb2ZpbGU6CisjIElmIGNvdW50IGlzIGNoYXJnZWQgdG8gc3RhY2sgW2EsYixjLGRdLCBpbiBn ZW5lcmF0ZWQgcHJvZmlsZSwKKyMgaXQgd2lsbCBiZSBjaGFyZ2VkIHRvIFthXSwgW2JdLCBbY10s IFtkXQorc3ViIEN1bXVsYXRpdmVQcm9maWxlIHsKKyAgbXkgJHByb2ZpbGUgPSBzaGlmdDsKKyAg bXkgJHJlc3VsdCA9IHt9OworICBmb3JlYWNoIG15ICRrIChrZXlzKCV7JHByb2ZpbGV9KSkgewor ICAgIG15ICRjb3VudCA9ICRwcm9maWxlLT57JGt9OworICAgIG15IEBhZGRycyA9IHNwbGl0KC9c bi8sICRrKTsKKyAgICBmb3JlYWNoIG15ICRhIChAYWRkcnMpIHsKKyAgICAgIEFkZEVudHJ5KCRy ZXN1bHQsICRhLCAkY291bnQpOworICAgIH0KKyAgfQorICByZXR1cm4gJHJlc3VsdDsKK30KKwor IyBJZiB0aGUgc2Vjb25kLXlvdW5nZXN0IFBDIG9uIHRoZSBzdGFjayBpcyBhbHdheXMgdGhlIHNh bWUsIHJldHVybnMKKyMgdGhhdCBwYy4gIE90aGVyd2lzZSwgcmV0dXJucyB1bmRlZi4KK3N1YiBJ c1NlY29uZFBjQWx3YXlzVGhlU2FtZSB7CisgIG15ICRwcm9maWxlID0gc2hpZnQ7CisKKyAgbXkg JHNlY29uZF9wYyA9IHVuZGVmOworICBmb3JlYWNoIG15ICRrIChrZXlzKCV7JHByb2ZpbGV9KSkg eworICAgIG15IEBhZGRycyA9IHNwbGl0KC9cbi8sICRrKTsKKyAgICBpZiAoJCNhZGRycyA8IDEp IHsKKyAgICAgIHJldHVybiB1bmRlZjsKKyAgICB9CisgICAgaWYgKG5vdCBkZWZpbmVkICRzZWNv bmRfcGMpIHsKKyAgICAgICRzZWNvbmRfcGMgPSAkYWRkcnNbMV07CisgICAgfSBlbHNlIHsKKyAg ICAgIGlmICgkc2Vjb25kX3BjIG5lICRhZGRyc1sxXSkgeworICAgICAgICByZXR1cm4gdW5kZWY7 CisgICAgICB9CisgICAgfQorICB9CisgIHJldHVybiAkc2Vjb25kX3BjOworfQorCitzdWIgRXh0 cmFjdFN5bWJvbE5hbWVJbmxpbmVTdGFjayB7CisgIG15ICRzeW1ib2xzID0gc2hpZnQ7CisgIG15 ICRhZGRyZXNzID0gc2hpZnQ7CisKKyAgbXkgQHN0YWNrID0gKCk7CisKKyAgaWYgKGV4aXN0cyAk c3ltYm9scy0+eyRhZGRyZXNzfSkgeworICAgIG15IEBsb2NhbGlubGluZXN0YWNrID0gQHskc3lt Ym9scy0+eyRhZGRyZXNzfX07CisgICAgZm9yIChteSAkaSA9ICQjbG9jYWxpbmxpbmVzdGFjazsg JGkgPiAwOyAkaS09MykgeworICAgICAgbXkgJGZpbGUgPSAkbG9jYWxpbmxpbmVzdGFja1skaS0x XTsKKyAgICAgIG15ICRmbiA9ICRsb2NhbGlubGluZXN0YWNrWyRpLTBdOworCisgICAgICBpZiAo JGZpbGUgZXEgIj8iIHx8ICRmaWxlIGVxICI6MCIpIHsKKyAgICAgICAgJGZpbGUgPSAiPz86MCI7 CisgICAgICB9CisgICAgICBpZiAoJGZuIGVxICc/PycpIHsKKyAgICAgICAgIyBJZiB3ZSBjYW4n dCBnZXQgdGhlIHN5bWJvbCBuYW1lLCBhdCBsZWFzdCB1c2UgdGhlIGZpbGUgaW5mb3JtYXRpb24u CisgICAgICAgICRmbiA9ICRmaWxlOworICAgICAgfQorICAgICAgbXkgJHN1ZmZpeCA9ICJbaW5s aW5lXSI7CisgICAgICBpZiAoJGkgPT0gMikgeworICAgICAgICAkc3VmZml4ID0gIiI7CisgICAg ICB9CisgICAgICBwdXNoIChAc3RhY2ssICRmbi4kc3VmZml4KTsKKyAgICB9CisgIH0KKyAgZWxz ZSB7CisgICAgIyBJZiB3ZSBjYW4ndCBnZXQgYSBzeW1ib2wgbmFtZSwgYXQgbGVhc3QgZmlsbCBp biB0aGUgYWRkcmVzcy4KKyAgICBwdXNoIChAc3RhY2ssICRhZGRyZXNzKTsKKyAgfQorCisgIHJl dHVybiBAc3RhY2s7Cit9CisKK3N1YiBFeHRyYWN0U3ltYm9sTG9jYXRpb24geworICBteSAkc3lt Ym9scyA9IHNoaWZ0OworICBteSAkYWRkcmVzcyA9IHNoaWZ0OworICAjICdhZGRyMmxpbmUnIG91 dHB1dHMgIj8/OjAiIGZvciB1bmtub3duIGxvY2F0aW9uczsgd2UgZG8gdGhlCisgICMgc2FtZSB0 byBiZSBjb25zaXN0ZW50LgorICBteSAkbG9jYXRpb24gPSAiPz86MDp1bmtub3duIjsKKyAgaWYg KGV4aXN0cyAkc3ltYm9scy0+eyRhZGRyZXNzfSkgeworICAgIG15ICRmaWxlID0gJHN5bWJvbHMt PnskYWRkcmVzc30tPlsxXTsKKyAgICBpZiAoJGZpbGUgZXEgIj8iKSB7CisgICAgICAkZmlsZSA9 ICI/PzowIgorICAgIH0KKyAgICAkbG9jYXRpb24gPSAkZmlsZSAuICI6IiAuICRzeW1ib2xzLT57 JGFkZHJlc3N9LT5bMF07CisgIH0KKyAgcmV0dXJuICRsb2NhdGlvbjsKK30KKworIyBFeHRyYWN0 cyBhIGdyYXBoIG9mIGNhbGxzLgorc3ViIEV4dHJhY3RDYWxscyB7CisgIG15ICRzeW1ib2xzID0g c2hpZnQ7CisgIG15ICRwcm9maWxlID0gc2hpZnQ7CisKKyAgbXkgJGNhbGxzID0ge307CisgIHdo aWxlKCBteSAoJHN0YWNrX3RyYWNlLCAkY291bnQpID0gZWFjaCAlJHByb2ZpbGUgKSB7CisgICAg bXkgQGFkZHJlc3MgPSBzcGxpdCgvXG4vLCAkc3RhY2tfdHJhY2UpOworICAgIG15ICRkZXN0aW5h dGlvbiA9IEV4dHJhY3RTeW1ib2xMb2NhdGlvbigkc3ltYm9scywgJGFkZHJlc3NbMF0pOworICAg IEFkZEVudHJ5KCRjYWxscywgJGRlc3RpbmF0aW9uLCAkY291bnQpOworICAgIGZvciAobXkgJGkg PSAxOyAkaSA8PSAkI2FkZHJlc3M7ICRpKyspIHsKKyAgICAgIG15ICRzb3VyY2UgPSBFeHRyYWN0 U3ltYm9sTG9jYXRpb24oJHN5bWJvbHMsICRhZGRyZXNzWyRpXSk7CisgICAgICBteSAkY2FsbCA9 ICIkc291cmNlIC0+ICRkZXN0aW5hdGlvbiI7CisgICAgICBBZGRFbnRyeSgkY2FsbHMsICRjYWxs LCAkY291bnQpOworICAgICAgJGRlc3RpbmF0aW9uID0gJHNvdXJjZTsKKyAgICB9CisgIH0KKwor ICByZXR1cm4gJGNhbGxzOworfQorCitzdWIgRmlsdGVyRnJhbWVzIHsKKyAgbXkgJHN5bWJvbHMg PSBzaGlmdDsKKyAgbXkgJHByb2ZpbGUgPSBzaGlmdDsKKworICBpZiAoJG1haW46Om9wdF9yZXRh aW4gZXEgJycgJiYgJG1haW46Om9wdF9leGNsdWRlIGVxICcnKSB7CisgICAgcmV0dXJuICRwcm9m aWxlOworICB9CisKKyAgbXkgJHJlc3VsdCA9IHt9OworICBmb3JlYWNoIG15ICRrIChrZXlzKCV7 JHByb2ZpbGV9KSkgeworICAgIG15ICRjb3VudCA9ICRwcm9maWxlLT57JGt9OworICAgIG15IEBh ZGRycyA9IHNwbGl0KC9cbi8sICRrKTsKKyAgICBteSBAcGF0aCA9ICgpOworICAgIGZvcmVhY2gg bXkgJGEgKEBhZGRycykgeworICAgICAgbXkgJHN5bTsKKyAgICAgIGlmIChleGlzdHMoJHN5bWJv bHMtPnskYX0pKSB7CisgICAgICAgICRzeW0gPSAkc3ltYm9scy0+eyRhfS0+WzBdOworICAgICAg fSBlbHNlIHsKKyAgICAgICAgJHN5bSA9ICRhOworICAgICAgfQorICAgICAgaWYgKCRtYWluOjpv cHRfcmV0YWluIG5lICcnICYmICRzeW0gIX4gbS8kbWFpbjo6b3B0X3JldGFpbi8pIHsKKyAgICAg ICAgbmV4dDsKKyAgICAgIH0KKyAgICAgIGlmICgkbWFpbjo6b3B0X2V4Y2x1ZGUgbmUgJycgJiYg JHN5bSA9fiBtLyRtYWluOjpvcHRfZXhjbHVkZS8pIHsKKyAgICAgICAgbmV4dDsKKyAgICAgIH0K KyAgICAgIHB1c2goQHBhdGgsICRhKTsKKyAgICB9CisgICAgaWYgKHNjYWxhcihAcGF0aCkgPiAw KSB7CisgICAgICBteSAkcmVkdWNlZF9wYXRoID0gam9pbigiXG4iLCBAcGF0aCk7CisgICAgICBB ZGRFbnRyeSgkcmVzdWx0LCAkcmVkdWNlZF9wYXRoLCAkY291bnQpOworICAgIH0KKyAgfQorCisg IHJldHVybiAkcmVzdWx0OworfQorCitzdWIgUHJpbnRDb2xsYXBzZWRTdGFja3MgeworICBteSAk c3ltYm9scyA9IHNoaWZ0OworICBteSAkcHJvZmlsZSA9IHNoaWZ0OworCisgIHdoaWxlIChteSAo JHN0YWNrX3RyYWNlLCAkY291bnQpID0gZWFjaCAlJHByb2ZpbGUpIHsKKyAgICBteSBAYWRkcmVz cyA9IHNwbGl0KC9cbi8sICRzdGFja190cmFjZSk7CisgICAgbXkgQG5hbWVzID0gcmV2ZXJzZSAo IG1hcCB7IEV4dHJhY3RTeW1ib2xOYW1lSW5saW5lU3RhY2soJHN5bWJvbHMsICRfKSB9IEBhZGRy ZXNzICk7CisgICAgcHJpbnRmKCIlcyAlZFxuIiwgam9pbigiOyIsIEBuYW1lcyksICRjb3VudCk7 CisgIH0KK30KKworc3ViIFJlbW92ZVVuaW50ZXJlc3RpbmdGcmFtZXMgeworICBteSAkc3ltYm9s cyA9IHNoaWZ0OworICBteSAkcHJvZmlsZSA9IHNoaWZ0OworCisgICMgTGlzdCBvZiBmdW5jdGlv biBuYW1lcyB0byBza2lwCisgIG15ICVza2lwID0gKCk7CisgIG15ICRza2lwX3JlZ2V4cCA9ICdO T01BVENIJzsKKyAgaWYgKCRtYWluOjpwcm9maWxlX3R5cGUgZXEgJ2hlYXAnIHx8ICRtYWluOjpw cm9maWxlX3R5cGUgZXEgJ2dyb3d0aCcpIHsKKyAgICBmb3JlYWNoIG15ICRuYW1lICgnQEpFTUFM TE9DX1BSRUZJWEBjYWxsb2MnLAorICAgICAgICAgICAgICAgICAgICAgICdjZnJlZScsCisgICAg ICAgICAgICAgICAgICAgICAgJ0BKRU1BTExPQ19QUkVGSVhAbWFsbG9jJywKKyAgICAgICAgICAg ICAgICAgICAgICAnbmV3SW1wbCcsCisgICAgICAgICAgICAgICAgICAgICAgJ3ZvaWQqIG5ld0lt cGwnLAorICAgICAgICAgICAgICAgICAgICAgICdASkVNQUxMT0NfUFJFRklYQGZyZWUnLAorICAg ICAgICAgICAgICAgICAgICAgICdASkVNQUxMT0NfUFJFRklYQG1lbWFsaWduJywKKyAgICAgICAg ICAgICAgICAgICAgICAnQEpFTUFMTE9DX1BSRUZJWEBwb3NpeF9tZW1hbGlnbicsCisgICAgICAg ICAgICAgICAgICAgICAgJ0BKRU1BTExPQ19QUkVGSVhAYWxpZ25lZF9hbGxvYycsCisgICAgICAg ICAgICAgICAgICAgICAgJ3B2YWxsb2MnLAorICAgICAgICAgICAgICAgICAgICAgICdASkVNQUxM T0NfUFJFRklYQHZhbGxvYycsCisgICAgICAgICAgICAgICAgICAgICAgJ0BKRU1BTExPQ19QUkVG SVhAcmVhbGxvYycsCisgICAgICAgICAgICAgICAgICAgICAgJ0BKRU1BTExPQ19QUkVGSVhAbWFs bG9jeCcsCisgICAgICAgICAgICAgICAgICAgICAgJ0BKRU1BTExPQ19QUkVGSVhAcmFsbG9jeCcs CisgICAgICAgICAgICAgICAgICAgICAgJ0BKRU1BTExPQ19QUkVGSVhAeGFsbG9jeCcsCisgICAg ICAgICAgICAgICAgICAgICAgJ0BKRU1BTExPQ19QUkVGSVhAZGFsbG9jeCcsCisgICAgICAgICAg ICAgICAgICAgICAgJ0BKRU1BTExPQ19QUkVGSVhAc2RhbGxvY3gnLAorICAgICAgICAgICAgICAg ICAgICAgICdASkVNQUxMT0NfUFJFRklYQHNkYWxsb2N4X25vZmxhZ3MnLAorICAgICAgICAgICAg ICAgICAgICAgICd0Y19jYWxsb2MnLAorICAgICAgICAgICAgICAgICAgICAgICd0Y19jZnJlZScs CisgICAgICAgICAgICAgICAgICAgICAgJ3RjX21hbGxvYycsCisgICAgICAgICAgICAgICAgICAg ICAgJ3RjX2ZyZWUnLAorICAgICAgICAgICAgICAgICAgICAgICd0Y19tZW1hbGlnbicsCisgICAg ICAgICAgICAgICAgICAgICAgJ3RjX3Bvc2l4X21lbWFsaWduJywKKyAgICAgICAgICAgICAgICAg ICAgICAndGNfcHZhbGxvYycsCisgICAgICAgICAgICAgICAgICAgICAgJ3RjX3ZhbGxvYycsCisg ICAgICAgICAgICAgICAgICAgICAgJ3RjX3JlYWxsb2MnLAorICAgICAgICAgICAgICAgICAgICAg ICd0Y19uZXcnLAorICAgICAgICAgICAgICAgICAgICAgICd0Y19kZWxldGUnLAorICAgICAgICAg ICAgICAgICAgICAgICd0Y19uZXdhcnJheScsCisgICAgICAgICAgICAgICAgICAgICAgJ3RjX2Rl bGV0ZWFycmF5JywKKyAgICAgICAgICAgICAgICAgICAgICAndGNfbmV3X25vdGhyb3cnLAorICAg ICAgICAgICAgICAgICAgICAgICd0Y19uZXdhcnJheV9ub3Rocm93JywKKyAgICAgICAgICAgICAg ICAgICAgICAnZG9fbWFsbG9jJywKKyAgICAgICAgICAgICAgICAgICAgICAnOjpkb19tYWxsb2Mn LCAgICMgbmV3IG5hbWUgLS0gZ290IG1vdmVkIHRvIGFuIHVubmFtZWQgbnMKKyAgICAgICAgICAg ICAgICAgICAgICAnOjpkb19tYWxsb2Nfb3JfY3BwX2FsbG9jJywKKyAgICAgICAgICAgICAgICAg ICAgICAnRG9TYW1wbGVkQWxsb2NhdGlvbicsCisgICAgICAgICAgICAgICAgICAgICAgJ3NpbXBs ZV9hbGxvYzo6YWxsb2NhdGUnLAorICAgICAgICAgICAgICAgICAgICAgICdfX21hbGxvY19hbGxv Y190ZW1wbGF0ZTo6YWxsb2NhdGUnLAorICAgICAgICAgICAgICAgICAgICAgICdfX2J1aWx0aW5f ZGVsZXRlJywKKyAgICAgICAgICAgICAgICAgICAgICAnX19idWlsdGluX25ldycsCisgICAgICAg ICAgICAgICAgICAgICAgJ19fYnVpbHRpbl92ZWNfZGVsZXRlJywKKyAgICAgICAgICAgICAgICAg ICAgICAnX19idWlsdGluX3ZlY19uZXcnLAorICAgICAgICAgICAgICAgICAgICAgICdvcGVyYXRv ciBuZXcnLAorICAgICAgICAgICAgICAgICAgICAgICdvcGVyYXRvciBuZXdbXScsCisgICAgICAg ICAgICAgICAgICAgICAgIyBUaGUgZW50cnkgdG8gb3VyIG1lbW9yeS1hbGxvY2F0aW9uIHJvdXRp bmVzIG9uIE9TIFgKKyAgICAgICAgICAgICAgICAgICAgICAnbWFsbG9jX3pvbmVfbWFsbG9jJywK KyAgICAgICAgICAgICAgICAgICAgICAnbWFsbG9jX3pvbmVfY2FsbG9jJywKKyAgICAgICAgICAg ICAgICAgICAgICAnbWFsbG9jX3pvbmVfdmFsbG9jJywKKyAgICAgICAgICAgICAgICAgICAgICAn bWFsbG9jX3pvbmVfcmVhbGxvYycsCisgICAgICAgICAgICAgICAgICAgICAgJ21hbGxvY196b25l X21lbWFsaWduJywKKyAgICAgICAgICAgICAgICAgICAgICAnbWFsbG9jX3pvbmVfZnJlZScsCisg ICAgICAgICAgICAgICAgICAgICAgIyBUaGVzZSBtYXJrIHRoZSBiZWdpbm5pbmcvZW5kIG9mIG91 ciBjdXN0b20gc2VjdGlvbnMKKyAgICAgICAgICAgICAgICAgICAgICAnX19zdGFydF9nb29nbGVf bWFsbG9jJywKKyAgICAgICAgICAgICAgICAgICAgICAnX19zdG9wX2dvb2dsZV9tYWxsb2MnLAor ICAgICAgICAgICAgICAgICAgICAgICdfX3N0YXJ0X21hbGxvY19ob29rJywKKyAgICAgICAgICAg ICAgICAgICAgICAnX19zdG9wX21hbGxvY19ob29rJykgeworICAgICAgJHNraXB7JG5hbWV9ID0g MTsKKyAgICAgICRza2lweyJfIiAuICRuYW1lfSA9IDE7ICAgIyBNYWNoIChPUyBYKSBhZGRzIGEg XyBwcmVmaXggdG8gZXZlcnl0aGluZworICAgIH0KKyAgICAjIFRPRE86IFJlbW92ZSBUQ01hbGxv YyBvbmNlIGV2ZXJ5dGhpbmcgaGFzIGJlZW4KKyAgICAjIG1vdmVkIGludG8gdGhlIHRjbWFsbG9j OjogbmFtZXNwYWNlIGFuZCB3ZSBoYXZlIGZsdXNoZWQKKyAgICAjIG9sZCBjb2RlIG91dCBvZiB0 aGUgc3lzdGVtLgorICAgICRza2lwX3JlZ2V4cCA9ICJUQ01hbGxvY3xedGNtYWxsb2M6OiI7Cisg IH0gZWxzaWYgKCRtYWluOjpwcm9maWxlX3R5cGUgZXEgJ2NvbnRlbnRpb24nKSB7CisgICAgZm9y ZWFjaCBteSAkdm5hbWUgKCdiYXNlOjpSZWNvcmRMb2NrUHJvZmlsZURhdGEnLAorICAgICAgICAg ICAgICAgICAgICAgICAnYmFzZTo6U3VibWl0TXV0ZXhQcm9maWxlRGF0YScsCisgICAgICAgICAg ICAgICAgICAgICAgICdiYXNlOjpTdWJtaXRTcGluTG9ja1Byb2ZpbGVEYXRhJywKKyAgICAgICAg ICAgICAgICAgICAgICAgJ011dGV4OjpVbmxvY2snLAorICAgICAgICAgICAgICAgICAgICAgICAn TXV0ZXg6OlVubG9ja1Nsb3cnLAorICAgICAgICAgICAgICAgICAgICAgICAnTXV0ZXg6OlJlYWRl clVubG9jaycsCisgICAgICAgICAgICAgICAgICAgICAgICdNdXRleExvY2s6On5NdXRleExvY2sn LAorICAgICAgICAgICAgICAgICAgICAgICAnU3BpbkxvY2s6OlVubG9jaycsCisgICAgICAgICAg ICAgICAgICAgICAgICdTcGluTG9jazo6U2xvd1VubG9jaycsCisgICAgICAgICAgICAgICAgICAg ICAgICdTcGluTG9ja0hvbGRlcjo6flNwaW5Mb2NrSG9sZGVyJykgeworICAgICAgJHNraXB7JHZu YW1lfSA9IDE7CisgICAgfQorICB9IGVsc2lmICgkbWFpbjo6cHJvZmlsZV90eXBlIGVxICdjcHUn KSB7CisgICAgIyBEcm9wIHNpZ25hbCBoYW5kbGVycyB1c2VkIGZvciBDUFUgcHJvZmlsZSBjb2xs ZWN0aW9uCisgICAgIyBUT0RPKGRwZW5nKTogdGhpcyBzaG91bGQgbm90IGJlIG5lY2Vzc2FyeTsg aXQncyB0YWtlbgorICAgICMgY2FyZSBvZiBieSB0aGUgZ2VuZXJhbCAybmQtcGMgbWVjaGFuaXNt IGJlbG93LgorICAgIGZvcmVhY2ggbXkgJG5hbWUgKCdQcm9maWxlRGF0YTo6QWRkJywgICAgICAg ICAgICMgaGlzdG9yaWNhbAorICAgICAgICAgICAgICAgICAgICAgICdQcm9maWxlRGF0YTo6cHJv Zl9oYW5kbGVyJywgICMgaGlzdG9yaWNhbAorICAgICAgICAgICAgICAgICAgICAgICdDcHVQcm9m aWxlcjo6cHJvZl9oYW5kbGVyJywKKyAgICAgICAgICAgICAgICAgICAgICAnX19GUkFNRV9FTkRf XycsCisgICAgICAgICAgICAgICAgICAgICAgJ19fcHRocmVhZF9zaWdoYW5kbGVyJywKKyAgICAg ICAgICAgICAgICAgICAgICAnX19yZXN0b3JlJykgeworICAgICAgJHNraXB7JG5hbWV9ID0gMTsK KyAgICB9CisgIH0gZWxzZSB7CisgICAgIyBOb3RoaW5nIHNraXBwZWQgZm9yIHVua25vd24gdHlw ZXMKKyAgfQorCisgIGlmICgkbWFpbjo6cHJvZmlsZV90eXBlIGVxICdjcHUnKSB7CisgICAgIyBJ ZiBhbGwgdGhlIHNlY29uZC15b3VuZ2VzdCBwcm9ncmFtIGNvdW50ZXJzIGFyZSB0aGUgc2FtZSwK KyAgICAjIHRoaXMgU1RST05HTFkgc3VnZ2VzdHMgdGhhdCBpdCBpcyBhbiBhcnRpZmFjdCBvZiBt ZWFzdXJlbWVudCwKKyAgICAjIGkuZS4sIHN0YWNrIGZyYW1lcyBwdXNoZWQgYnkgdGhlIENQVSBw cm9maWxlciBzaWduYWwgaGFuZGxlci4KKyAgICAjIEhlbmNlLCB3ZSBkZWxldGUgdGhlbS4KKyAg ICAjIChUaGUgdG9wbW9zdCBQQyBpcyByZWFkIGZyb20gdGhlIHNpZ25hbCBzdHJ1Y3R1cmUsIG5v dCBmcm9tCisgICAgIyB0aGUgc3RhY2ssIHNvIGl0IGRvZXMgbm90IGdldCBpbnZvbHZlZC4pCisg ICAgd2hpbGUgKG15ICRzZWNvbmRfcGMgPSBJc1NlY29uZFBjQWx3YXlzVGhlU2FtZSgkcHJvZmls ZSkpIHsKKyAgICAgIG15ICRyZXN1bHQgPSB7fTsKKyAgICAgIG15ICRmdW5jID0gJyc7CisgICAg ICBpZiAoZXhpc3RzKCRzeW1ib2xzLT57JHNlY29uZF9wY30pKSB7CisgICAgICAgICRzZWNvbmRf cGMgPSAkc3ltYm9scy0+eyRzZWNvbmRfcGN9LT5bMF07CisgICAgICB9CisgICAgICBwcmludCBT VERFUlIgIlJlbW92aW5nICRzZWNvbmRfcGMgZnJvbSBhbGwgc3RhY2sgdHJhY2VzLlxuIjsKKyAg ICAgIGZvcmVhY2ggbXkgJGsgKGtleXMoJXskcHJvZmlsZX0pKSB7CisgICAgICAgIG15ICRjb3Vu dCA9ICRwcm9maWxlLT57JGt9OworICAgICAgICBteSBAYWRkcnMgPSBzcGxpdCgvXG4vLCAkayk7 CisgICAgICAgIHNwbGljZSBAYWRkcnMsIDEsIDE7CisgICAgICAgIG15ICRyZWR1Y2VkX3BhdGgg PSBqb2luKCJcbiIsIEBhZGRycyk7CisgICAgICAgIEFkZEVudHJ5KCRyZXN1bHQsICRyZWR1Y2Vk X3BhdGgsICRjb3VudCk7CisgICAgICB9CisgICAgICAkcHJvZmlsZSA9ICRyZXN1bHQ7CisgICAg fQorICB9CisKKyAgbXkgJHJlc3VsdCA9IHt9OworICBmb3JlYWNoIG15ICRrIChrZXlzKCV7JHBy b2ZpbGV9KSkgeworICAgIG15ICRjb3VudCA9ICRwcm9maWxlLT57JGt9OworICAgIG15IEBhZGRy cyA9IHNwbGl0KC9cbi8sICRrKTsKKyAgICBteSBAcGF0aCA9ICgpOworICAgIGZvcmVhY2ggbXkg JGEgKEBhZGRycykgeworICAgICAgaWYgKGV4aXN0cygkc3ltYm9scy0+eyRhfSkpIHsKKyAgICAg ICAgbXkgJGZ1bmMgPSAkc3ltYm9scy0+eyRhfS0+WzBdOworICAgICAgICBpZiAoJHNraXB7JGZ1 bmN9IHx8ICgkZnVuYyA9fiBtLyRza2lwX3JlZ2V4cC8pKSB7CisgICAgICAgICAgIyBUaHJvdyBh d2F5IHRoZSBwb3J0aW9uIG9mIHRoZSBiYWNrdHJhY2Ugc2VlbiBzbyBmYXIsIHVuZGVyIHRoZQor ICAgICAgICAgICMgYXNzdW1wdGlvbiB0aGF0IHByZXZpb3VzIGZyYW1lcyB3ZXJlIGZvciBmdW5j dGlvbnMgaW50ZXJuYWwgdG8gdGhlCisgICAgICAgICAgIyBhbGxvY2F0b3IuCisgICAgICAgICAg QHBhdGggPSAoKTsKKyAgICAgICAgICBuZXh0OworICAgICAgICB9CisgICAgICB9CisgICAgICBw dXNoKEBwYXRoLCAkYSk7CisgICAgfQorICAgIG15ICRyZWR1Y2VkX3BhdGggPSBqb2luKCJcbiIs IEBwYXRoKTsKKyAgICBBZGRFbnRyeSgkcmVzdWx0LCAkcmVkdWNlZF9wYXRoLCAkY291bnQpOwor ICB9CisKKyAgJHJlc3VsdCA9IEZpbHRlckZyYW1lcygkc3ltYm9scywgJHJlc3VsdCk7CisKKyAg cmV0dXJuICRyZXN1bHQ7Cit9CisKKyMgUmVkdWNlIHByb2ZpbGUgdG8gZ3JhbnVsYXJpdHkgZ2l2 ZW4gYnkgdXNlcgorc3ViIFJlZHVjZVByb2ZpbGUgeworICBteSAkc3ltYm9scyA9IHNoaWZ0Owor ICBteSAkcHJvZmlsZSA9IHNoaWZ0OworICBteSAkcmVzdWx0ID0ge307CisgIG15ICRmdWxsbmFt ZV90b19zaG9ydG5hbWVfbWFwID0ge307CisgIEZpbGxGdWxsbmFtZVRvU2hvcnRuYW1lTWFwKCRz eW1ib2xzLCAkZnVsbG5hbWVfdG9fc2hvcnRuYW1lX21hcCk7CisgIGZvcmVhY2ggbXkgJGsgKGtl eXMoJXskcHJvZmlsZX0pKSB7CisgICAgbXkgJGNvdW50ID0gJHByb2ZpbGUtPnska307CisgICAg bXkgQHRyYW5zbGF0ZWQgPSBUcmFuc2xhdGVTdGFjaygkc3ltYm9scywgJGZ1bGxuYW1lX3RvX3No b3J0bmFtZV9tYXAsICRrKTsKKyAgICBteSBAcGF0aCA9ICgpOworICAgIG15ICVzZWVuID0gKCk7 CisgICAgJHNlZW57Jyd9ID0gMTsgICAgICAjIFNvIHRoYXQgZW1wdHkga2V5cyBhcmUgc2tpcHBl ZAorICAgIGZvcmVhY2ggbXkgJGUgKEB0cmFuc2xhdGVkKSB7CisgICAgICAjIFRvIGF2b2lkIGRv dWJsZS1jb3VudGluZyBkdWUgdG8gcmVjdXJzaW9uLCBza2lwIGEgc3RhY2stdHJhY2UKKyAgICAg ICMgZW50cnkgaWYgaXQgaGFzIGFscmVhZHkgYmVlbiBzZWVuCisgICAgICBpZiAoISRzZWVueyRl fSkgeworICAgICAgICAkc2VlbnskZX0gPSAxOworICAgICAgICBwdXNoKEBwYXRoLCAkZSk7Cisg ICAgICB9CisgICAgfQorICAgIG15ICRyZWR1Y2VkX3BhdGggPSBqb2luKCJcbiIsIEBwYXRoKTsK KyAgICBBZGRFbnRyeSgkcmVzdWx0LCAkcmVkdWNlZF9wYXRoLCAkY291bnQpOworICB9CisgIHJl dHVybiAkcmVzdWx0OworfQorCisjIERvZXMgdGhlIHNwZWNpZmllZCBzeW1ib2wgYXJyYXkgbWF0 Y2ggdGhlIHJlZ2V4cD8KK3N1YiBTeW1ib2xNYXRjaGVzIHsKKyAgbXkgJHN5bSA9IHNoaWZ0Owor ICBteSAkcmUgPSBzaGlmdDsKKyAgaWYgKGRlZmluZWQoJHN5bSkpIHsKKyAgICBmb3IgKG15ICRp ID0gMDsgJGkgPCAkI3skc3ltfTsgJGkgKz0gMykgeworICAgICAgaWYgKCRzeW0tPlskaV0gPX4g bS8kcmUvIHx8ICRzeW0tPlskaSsxXSA9fiBtLyRyZS8pIHsKKyAgICAgICAgcmV0dXJuIDE7Cisg ICAgICB9CisgICAgfQorICB9CisgIHJldHVybiAwOworfQorCisjIEZvY3VzIG9ubHkgb24gcGF0 aHMgaW52b2x2aW5nIHNwZWNpZmllZCByZWdleHBzCitzdWIgRm9jdXNQcm9maWxlIHsKKyAgbXkg JHN5bWJvbHMgPSBzaGlmdDsKKyAgbXkgJHByb2ZpbGUgPSBzaGlmdDsKKyAgbXkgJGZvY3VzID0g c2hpZnQ7CisgIG15ICRyZXN1bHQgPSB7fTsKKyAgZm9yZWFjaCBteSAkayAoa2V5cygleyRwcm9m aWxlfSkpIHsKKyAgICBteSAkY291bnQgPSAkcHJvZmlsZS0+eyRrfTsKKyAgICBteSBAYWRkcnMg PSBzcGxpdCgvXG4vLCAkayk7CisgICAgZm9yZWFjaCBteSAkYSAoQGFkZHJzKSB7CisgICAgICAj IFJlcGx5IGlmIGl0IG1hdGNoZXMgZWl0aGVyIHRoZSBhZGRyZXNzL3Nob3J0bmFtZS9maWxlbGlu ZQorICAgICAgaWYgKCgkYSA9fiBtLyRmb2N1cy8pIHx8IFN5bWJvbE1hdGNoZXMoJHN5bWJvbHMt PnskYX0sICRmb2N1cykpIHsKKyAgICAgICAgQWRkRW50cnkoJHJlc3VsdCwgJGssICRjb3VudCk7 CisgICAgICAgIGxhc3Q7CisgICAgICB9CisgICAgfQorICB9CisgIHJldHVybiAkcmVzdWx0Owor fQorCisjIEZvY3VzIG9ubHkgb24gcGF0aHMgbm90IGludm9sdmluZyBzcGVjaWZpZWQgcmVnZXhw cworc3ViIElnbm9yZVByb2ZpbGUgeworICBteSAkc3ltYm9scyA9IHNoaWZ0OworICBteSAkcHJv ZmlsZSA9IHNoaWZ0OworICBteSAkaWdub3JlID0gc2hpZnQ7CisgIG15ICRyZXN1bHQgPSB7fTsK KyAgZm9yZWFjaCBteSAkayAoa2V5cygleyRwcm9maWxlfSkpIHsKKyAgICBteSAkY291bnQgPSAk cHJvZmlsZS0+eyRrfTsKKyAgICBteSBAYWRkcnMgPSBzcGxpdCgvXG4vLCAkayk7CisgICAgbXkg JG1hdGNoZWQgPSAwOworICAgIGZvcmVhY2ggbXkgJGEgKEBhZGRycykgeworICAgICAgIyBSZXBs eSBpZiBpdCBtYXRjaGVzIGVpdGhlciB0aGUgYWRkcmVzcy9zaG9ydG5hbWUvZmlsZWxpbmUKKyAg ICAgIGlmICgoJGEgPX4gbS8kaWdub3JlLykgfHwgU3ltYm9sTWF0Y2hlcygkc3ltYm9scy0+eyRh fSwgJGlnbm9yZSkpIHsKKyAgICAgICAgJG1hdGNoZWQgPSAxOworICAgICAgICBsYXN0OworICAg ICAgfQorICAgIH0KKyAgICBpZiAoISRtYXRjaGVkKSB7CisgICAgICBBZGRFbnRyeSgkcmVzdWx0 LCAkaywgJGNvdW50KTsKKyAgICB9CisgIH0KKyAgcmV0dXJuICRyZXN1bHQ7Cit9CisKKyMgR2V0 IHRvdGFsIGNvdW50IGluIHByb2ZpbGUKK3N1YiBUb3RhbFByb2ZpbGUgeworICBteSAkcHJvZmls ZSA9IHNoaWZ0OworICBteSAkcmVzdWx0ID0gMDsKKyAgZm9yZWFjaCBteSAkayAoa2V5cygleyRw cm9maWxlfSkpIHsKKyAgICAkcmVzdWx0ICs9ICRwcm9maWxlLT57JGt9OworICB9CisgIHJldHVy biAkcmVzdWx0OworfQorCisjIEFkZCBBIHRvIEIKK3N1YiBBZGRQcm9maWxlIHsKKyAgbXkgJEEg PSBzaGlmdDsKKyAgbXkgJEIgPSBzaGlmdDsKKworICBteSAkUiA9IHt9OworICAjIGFkZCBhbGwg a2V5cyBpbiBBCisgIGZvcmVhY2ggbXkgJGsgKGtleXMoJXskQX0pKSB7CisgICAgbXkgJHYgPSAk QS0+eyRrfTsKKyAgICBBZGRFbnRyeSgkUiwgJGssICR2KTsKKyAgfQorICAjIGFkZCBhbGwga2V5 cyBpbiBCCisgIGZvcmVhY2ggbXkgJGsgKGtleXMoJXskQn0pKSB7CisgICAgbXkgJHYgPSAkQi0+ eyRrfTsKKyAgICBBZGRFbnRyeSgkUiwgJGssICR2KTsKKyAgfQorICByZXR1cm4gJFI7Cit9CisK KyMgTWVyZ2VzIHN5bWJvbCBtYXBzCitzdWIgTWVyZ2VTeW1ib2xzIHsKKyAgbXkgJEEgPSBzaGlm dDsKKyAgbXkgJEIgPSBzaGlmdDsKKworICBteSAkUiA9IHt9OworICBmb3JlYWNoIG15ICRrIChr ZXlzKCV7JEF9KSkgeworICAgICRSLT57JGt9ID0gJEEtPnska307CisgIH0KKyAgaWYgKGRlZmlu ZWQoJEIpKSB7CisgICAgZm9yZWFjaCBteSAkayAoa2V5cygleyRCfSkpIHsKKyAgICAgICRSLT57 JGt9ID0gJEItPnska307CisgICAgfQorICB9CisgIHJldHVybiAkUjsKK30KKworCisjIEFkZCBB IHRvIEIKK3N1YiBBZGRQY3MgeworICBteSAkQSA9IHNoaWZ0OworICBteSAkQiA9IHNoaWZ0Owor CisgIG15ICRSID0ge307CisgICMgYWRkIGFsbCBrZXlzIGluIEEKKyAgZm9yZWFjaCBteSAkayAo a2V5cygleyRBfSkpIHsKKyAgICAkUi0+eyRrfSA9IDEKKyAgfQorICAjIGFkZCBhbGwga2V5cyBp biBCCisgIGZvcmVhY2ggbXkgJGsgKGtleXMoJXskQn0pKSB7CisgICAgJFItPnska30gPSAxCisg IH0KKyAgcmV0dXJuICRSOworfQorCisjIFN1YnRyYWN0IEIgZnJvbSBBCitzdWIgU3VidHJhY3RQ cm9maWxlIHsKKyAgbXkgJEEgPSBzaGlmdDsKKyAgbXkgJEIgPSBzaGlmdDsKKworICBteSAkUiA9 IHt9OworICBmb3JlYWNoIG15ICRrIChrZXlzKCV7JEF9KSkgeworICAgIG15ICR2ID0gJEEtPnsk a30gLSBHZXRFbnRyeSgkQiwgJGspOworICAgIGlmICgkdiA8IDAgJiYgJG1haW46Om9wdF9kcm9w X25lZ2F0aXZlKSB7CisgICAgICAkdiA9IDA7CisgICAgfQorICAgIEFkZEVudHJ5KCRSLCAkaywg JHYpOworICB9CisgIGlmICghJG1haW46Om9wdF9kcm9wX25lZ2F0aXZlKSB7CisgICAgIyBUYWtl IGNhcmUgb2Ygd2hlbiBzdWJ0cmFjdGVkIHByb2ZpbGUgaGFzIG1vcmUgZW50cmllcworICAgIGZv cmVhY2ggbXkgJGsgKGtleXMoJXskQn0pKSB7CisgICAgICBpZiAoIWV4aXN0cygkQS0+eyRrfSkp IHsKKyAgICAgICAgQWRkRW50cnkoJFIsICRrLCAwIC0gJEItPnska30pOworICAgICAgfQorICAg IH0KKyAgfQorICByZXR1cm4gJFI7Cit9CisKKyMgR2V0IGVudHJ5IGZyb20gcHJvZmlsZTsgemVy byBpZiBub3QgcHJlc2VudAorc3ViIEdldEVudHJ5IHsKKyAgbXkgJHByb2ZpbGUgPSBzaGlmdDsK KyAgbXkgJGsgPSBzaGlmdDsKKyAgaWYgKGV4aXN0cygkcHJvZmlsZS0+eyRrfSkpIHsKKyAgICBy ZXR1cm4gJHByb2ZpbGUtPnska307CisgIH0gZWxzZSB7CisgICAgcmV0dXJuIDA7CisgIH0KK30K KworIyBBZGQgZW50cnkgdG8gc3BlY2lmaWVkIHByb2ZpbGUKK3N1YiBBZGRFbnRyeSB7CisgIG15 ICRwcm9maWxlID0gc2hpZnQ7CisgIG15ICRrID0gc2hpZnQ7CisgIG15ICRuID0gc2hpZnQ7Cisg IGlmICghZXhpc3RzKCRwcm9maWxlLT57JGt9KSkgeworICAgICRwcm9maWxlLT57JGt9ID0gMDsK KyAgfQorICAkcHJvZmlsZS0+eyRrfSArPSAkbjsKK30KKworIyBBZGQgYSBzdGFjayBvZiBlbnRy aWVzIHRvIHNwZWNpZmllZCBwcm9maWxlLCBhbmQgYWRkIHRoZW0gdG8gdGhlICRwY3MKKyMgbGlz dC4KK3N1YiBBZGRFbnRyaWVzIHsKKyAgbXkgJHByb2ZpbGUgPSBzaGlmdDsKKyAgbXkgJHBjcyA9 IHNoaWZ0OworICBteSAkc3RhY2sgPSBzaGlmdDsKKyAgbXkgJGNvdW50ID0gc2hpZnQ7CisgIG15 IEBrID0gKCk7CisKKyAgZm9yZWFjaCBteSAkZSAoc3BsaXQoL1xzKy8sICRzdGFjaykpIHsKKyAg ICBteSAkcGMgPSBIZXhFeHRlbmQoJGUpOworICAgICRwY3MtPnskcGN9ID0gMTsKKyAgICBwdXNo IEBrLCAkcGM7CisgIH0KKyAgQWRkRW50cnkoJHByb2ZpbGUsIChqb2luICJcbiIsIEBrKSwgJGNv dW50KTsKK30KKworIyMjIyMgQ29kZSB0byBwcm9maWxlIGEgc2VydmVyIGR5bmFtaWNhbGx5ICMj IyMjCisKK3N1YiBDaGVja1N5bWJvbFBhZ2UgeworICBteSAkdXJsID0gU3ltYm9sUGFnZVVSTCgp OworICBteSAkY29tbWFuZCA9IFNoZWxsRXNjYXBlKEBVUkxfRkVUQ0hFUiwgJHVybCk7CisgIG9w ZW4oU1lNQk9MLCAiJGNvbW1hbmQgfCIpIG9yIGVycm9yKCRjb21tYW5kKTsKKyAgbXkgJGxpbmUg PSA8U1lNQk9MPjsKKyAgJGxpbmUgPX4gcy9cci8vZzsgICAgICAgICAjIHR1cm4gd2luZG93cy1s b29raW5nIGxpbmVzIGludG8gdW5peC1sb29raW5nIGxpbmVzCisgIGNsb3NlKFNZTUJPTCk7Cisg IHVubGVzcyAoZGVmaW5lZCgkbGluZSkpIHsKKyAgICBlcnJvcigiJHVybCBkb2Vzbid0IGV4aXN0 XG4iKTsKKyAgfQorCisgIGlmICgkbGluZSA9fiAvXm51bV9zeW1ib2xzOlxzKyhcZCspJC8pIHsK KyAgICBpZiAoJDEgPT0gMCkgeworICAgICAgZXJyb3IoIlN0cmlwcGVkIGJpbmFyeS4gTm8gc3lt Ym9scyBhdmFpbGFibGUuXG4iKTsKKyAgICB9CisgIH0gZWxzZSB7CisgICAgZXJyb3IoIkZhaWxl ZCB0byBnZXQgdGhlIG51bWJlciBvZiBzeW1ib2xzIGZyb20gJHVybFxuIik7CisgIH0KK30KKwor c3ViIElzUHJvZmlsZVVSTCB7CisgIG15ICRwcm9maWxlX25hbWUgPSBzaGlmdDsKKyAgaWYgKC1m ICRwcm9maWxlX25hbWUpIHsKKyAgICBwcmludGYgU1RERVJSICJVc2luZyBsb2NhbCBmaWxlICRw cm9maWxlX25hbWUuXG4iOworICAgIHJldHVybiAwOworICB9CisgIHJldHVybiAxOworfQorCitz dWIgUGFyc2VQcm9maWxlVVJMIHsKKyAgbXkgJHByb2ZpbGVfbmFtZSA9IHNoaWZ0OworCisgIGlm ICghZGVmaW5lZCgkcHJvZmlsZV9uYW1lKSB8fCAkcHJvZmlsZV9uYW1lIGVxICIiKSB7CisgICAg cmV0dXJuICgpOworICB9CisKKyAgIyBTcGxpdCBwcm9maWxlIFVSTCAtIG1hdGNoZXMgYWxsIG5v bi1lbXB0eSBzdHJpbmdzLCBzbyBubyB0ZXN0LgorICAkcHJvZmlsZV9uYW1lID1+IG0sXihodHRw cz86Ly8pPyhbXi9dKykoLio/KSgvfCRQUk9GSUxFUyk/JCw7CisKKyAgbXkgJHByb3RvID0gJDEg fHwgImh0dHA6Ly8iOworICBteSAkaG9zdHBvcnQgPSAkMjsKKyAgbXkgJHByZWZpeCA9ICQzOwor ICBteSAkcHJvZmlsZSA9ICQ0IHx8ICIvIjsKKworICBteSAkaG9zdCA9ICRob3N0cG9ydDsKKyAg JGhvc3QgPX4gcy86LiovLzsKKworICBteSAkYmFzZXVybCA9ICIkcHJvdG8kaG9zdHBvcnQkcHJl Zml4IjsKKyAgcmV0dXJuICgkaG9zdCwgJGJhc2V1cmwsICRwcm9maWxlKTsKK30KKworIyBXZSBm ZXRjaCBzeW1ib2xzIGZyb20gdGhlIGZpcnN0IHByb2ZpbGUgYXJndW1lbnQuCitzdWIgU3ltYm9s UGFnZVVSTCB7CisgIG15ICgkaG9zdCwgJGJhc2VVUkwsICRwYXRoKSA9IFBhcnNlUHJvZmlsZVVS TCgkbWFpbjo6cGZpbGVfYXJnc1swXSk7CisgIHJldHVybiAiJGJhc2VVUkwkU1lNQk9MX1BBR0Ui OworfQorCitzdWIgRmV0Y2hQcm9ncmFtTmFtZSgpIHsKKyAgbXkgKCRob3N0LCAkYmFzZVVSTCwg JHBhdGgpID0gUGFyc2VQcm9maWxlVVJMKCRtYWluOjpwZmlsZV9hcmdzWzBdKTsKKyAgbXkgJHVy bCA9ICIkYmFzZVVSTCRQUk9HUkFNX05BTUVfUEFHRSI7CisgIG15ICRjb21tYW5kX2xpbmUgPSBT aGVsbEVzY2FwZShAVVJMX0ZFVENIRVIsICR1cmwpOworICBvcGVuKENNRExJTkUsICIkY29tbWFu ZF9saW5lIHwiKSBvciBlcnJvcigkY29tbWFuZF9saW5lKTsKKyAgbXkgJGNtZGxpbmUgPSA8Q01E TElORT47CisgICRjbWRsaW5lID1+IHMvXHIvL2c7ICAgIyB0dXJuIHdpbmRvd3MtbG9va2luZyBs aW5lcyBpbnRvIHVuaXgtbG9va2luZyBsaW5lcworICBjbG9zZShDTURMSU5FKTsKKyAgZXJyb3Io IkZhaWxlZCB0byBnZXQgcHJvZ3JhbSBuYW1lIGZyb20gJHVybFxuIikgdW5sZXNzIGRlZmluZWQo JGNtZGxpbmUpOworICAkY21kbGluZSA9fiBzL1x4MDAuKy8vOyAgIyBSZW1vdmUgYXJndlsxXSBh bmQgbGF0dGVycy4KKyAgJGNtZGxpbmUgPX4gcyFcbiEhZzsgICMgUmVtb3ZlIExGcy4KKyAgcmV0 dXJuICRjbWRsaW5lOworfQorCisjIEdlZSwgY3VybCdzIC1MICgtLWxvY2F0aW9uKSBvcHRpb24g aXNuJ3QgcmVsaWFibGUgYXQgbGVhc3QKKyMgd2l0aCBpdHMgNy4xMi4zIHZlcnNpb24uICBDdXJs IHdpbGwgZm9yZ2V0IHRvIHBvc3QgZGF0YSBpZgorIyB0aGVyZSBpcyBhIHJlZGlyZWN0aW9uLiAg VGhpcyBmdW5jdGlvbiBpcyBhIHdvcmthcm91bmQgZm9yCisjIGN1cmwuICBSZWRpcmVjdGlvbiBo YXBwZW5zIG9uIGJvcmcgaG9zdHMuCitzdWIgUmVzb2x2ZVJlZGlyZWN0aW9uRm9yQ3VybCB7Cisg IG15ICR1cmwgPSBzaGlmdDsKKyAgbXkgJGNvbW1hbmRfbGluZSA9IFNoZWxsRXNjYXBlKEBVUkxf RkVUQ0hFUiwgIi0taGVhZCIsICR1cmwpOworICBvcGVuKENNRExJTkUsICIkY29tbWFuZF9saW5l IHwiKSBvciBlcnJvcigkY29tbWFuZF9saW5lKTsKKyAgd2hpbGUgKDxDTURMSU5FPikgeworICAg IHMvXHIvL2c7ICAgICAgICAgIyB0dXJuIHdpbmRvd3MtbG9va2luZyBsaW5lcyBpbnRvIHVuaXgt bG9va2luZyBsaW5lcworICAgIGlmICgvXkxvY2F0aW9uOiAoLiopLykgeworICAgICAgJHVybCA9 ICQxOworICAgIH0KKyAgfQorICBjbG9zZShDTURMSU5FKTsKKyAgcmV0dXJuICR1cmw7Cit9CisK KyMgQWRkIGEgdGltZW91dCBmbGF0IHRvIFVSTF9GRVRDSEVSLiAgUmV0dXJucyBhIG5ldyBsaXN0 Lgorc3ViIEFkZEZldGNoVGltZW91dCB7CisgIG15ICR0aW1lb3V0ID0gc2hpZnQ7CisgIG15IEBm ZXRjaGVyID0gQF87CisgIGlmIChkZWZpbmVkKCR0aW1lb3V0KSkgeworICAgIGlmIChqb2luKCIg IiwgQGZldGNoZXIpID1+IG0vXGJjdXJsIC1zLykgeworICAgICAgcHVzaChAZmV0Y2hlciwgIi0t bWF4LXRpbWUiLCBzcHJpbnRmKCIlZCIsICR0aW1lb3V0KSk7CisgICAgfSBlbHNpZiAoam9pbigi ICIsIEBmZXRjaGVyKSA9fiBtL1xicnBjZ2V0XGIvKSB7CisgICAgICBwdXNoKEBmZXRjaGVyLCBz cHJpbnRmKCItLWRlYWRsaW5lPSVkIiwgJHRpbWVvdXQpKTsKKyAgICB9CisgIH0KKyAgcmV0dXJu IEBmZXRjaGVyOworfQorCisjIFJlYWRzIGEgc3ltYm9sIG1hcCBmcm9tIHRoZSBmaWxlIGhhbmRs ZSBuYW1lIGdpdmVuIGFzICQxLCByZXR1cm5pbmcKKyMgdGhlIHJlc3VsdGluZyBzeW1ib2wgbWFw LiAgQWxzbyBwcm9jZXNzZXMgdmFyaWFibGVzIHJlbGF0aW5nIHRvIHN5bWJvbHMuCisjIEN1cnJl bnRseSwgdGhlIG9ubHkgdmFyaWFibGUgcHJvY2Vzc2VkIGlzICdiaW5hcnk9PHZhbHVlPicgd2hp Y2ggdXBkYXRlcworIyAkbWFpbjo6cHJvZyB0byBoYXZlIHRoZSBjb3JyZWN0IHByb2dyYW0gbmFt ZS4KK3N1YiBSZWFkU3ltYm9scyB7CisgIG15ICRpbiA9IHNoaWZ0OworICBteSAkbWFwID0ge307 CisgIHdoaWxlICg8JGluPikgeworICAgIHMvXHIvL2c7ICAgICAgICAgIyB0dXJuIHdpbmRvd3Mt bG9va2luZyBsaW5lcyBpbnRvIHVuaXgtbG9va2luZyBsaW5lcworICAgICMgUmVtb3ZlcyBhbGwg dGhlIGxlYWRpbmcgemVyb2VzIGZyb20gdGhlIHN5bWJvbHMsIHNlZSBjb21tZW50IGJlbG93Lgor ICAgIGlmIChtL14weDAqKFswLTlhLWZdKylccysoLispLykgeworICAgICAgJG1hcC0+eyQxfSA9 ICQyOworICAgIH0gZWxzaWYgKG0vXi0tLS8pIHsKKyAgICAgIGxhc3Q7CisgICAgfSBlbHNpZiAo bS9eKFthLXpdW149XSopPSguKikkLyApIHsKKyAgICAgIG15ICgkdmFyaWFibGUsICR2YWx1ZSkg PSAoJDEsICQyKTsKKyAgICAgIGZvciAoJHZhcmlhYmxlLCAkdmFsdWUpIHsKKyAgICAgICAgcy9e XHMrLy87CisgICAgICAgIHMvXHMrJC8vOworICAgICAgfQorICAgICAgaWYgKCR2YXJpYWJsZSBl cSAiYmluYXJ5IikgeworICAgICAgICBpZiAoJG1haW46OnByb2cgbmUgJFVOS05PV05fQklOQVJZ ICYmICRtYWluOjpwcm9nIG5lICR2YWx1ZSkgeworICAgICAgICAgIHByaW50ZiBTVERFUlIgKCJX YXJuaW5nOiBNaXNtYXRjaGVkIGJpbmFyeSBuYW1lICclcycsIHVzaW5nICclcycuXG4iLAorICAg ICAgICAgICAgICAgICAgICAgICAgICRtYWluOjpwcm9nLCAkdmFsdWUpOworICAgICAgICB9Cisg ICAgICAgICRtYWluOjpwcm9nID0gJHZhbHVlOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgcHJp bnRmIFNUREVSUiAoIklnbm9yaW5nIHVua25vd24gdmFyaWFibGUgaW4gc3ltYm9scyBsaXN0OiAi IC4KKyAgICAgICAgICAgICInJXMnID0gJyVzJ1xuIiwgJHZhcmlhYmxlLCAkdmFsdWUpOworICAg ICAgfQorICAgIH0KKyAgfQorICByZXR1cm4gJG1hcDsKK30KKworc3ViIFVSTEVuY29kZSB7Cisg IG15ICRzdHIgPSBzaGlmdDsKKyAgJHN0ciA9fiBzLyhbXkEtWmEtejAtOVwtXy4hfionKCldKS8g c3ByaW50ZiAiJSUlMDJ4Iiwgb3JkICQxIC9lZzsKKyAgcmV0dXJuICRzdHI7Cit9CisKK3N1YiBB cHBlbmRTeW1ib2xGaWx0ZXJQYXJhbXMgeworICBteSAkdXJsID0gc2hpZnQ7CisgIG15IEBwYXJh bXMgPSAoKTsKKyAgaWYgKCRtYWluOjpvcHRfcmV0YWluIG5lICcnKSB7CisgICAgcHVzaChAcGFy YW1zLCBzcHJpbnRmKCJyZXRhaW49JXMiLCBVUkxFbmNvZGUoJG1haW46Om9wdF9yZXRhaW4pKSk7 CisgIH0KKyAgaWYgKCRtYWluOjpvcHRfZXhjbHVkZSBuZSAnJykgeworICAgIHB1c2goQHBhcmFt cywgc3ByaW50ZigiZXhjbHVkZT0lcyIsIFVSTEVuY29kZSgkbWFpbjo6b3B0X2V4Y2x1ZGUpKSk7 CisgIH0KKyAgaWYgKHNjYWxhciBAcGFyYW1zID4gMCkgeworICAgICR1cmwgPSBzcHJpbnRmKCIl cz8lcyIsICR1cmwsIGpvaW4oIiYiLCBAcGFyYW1zKSk7CisgIH0KKyAgcmV0dXJuICR1cmw7Cit9 CisKKyMgRmV0Y2hlcyBhbmQgcHJvY2Vzc2VzIHN5bWJvbHMgdG8gcHJlcGFyZSB0aGVtIGZvciB1 c2UgaW4gdGhlIHByb2ZpbGUgb3V0cHV0CisjIGNvZGUuICBJZiB0aGUgb3B0aW9uYWwgJ3N5bWJv bF9tYXAnIGFyZyBpcyBub3QgZ2l2ZW4sIGZldGNoZXMgc3ltYm9scyBmcm9tCisjICRTWU1CT0xf UEFHRSBmb3IgYWxsIFBDIHZhbHVlcyBmb3VuZCBpbiBwcm9maWxlLiAgT3RoZXJ3aXNlLCB0aGUg cmF3IHN5bWJvbHMKKyMgYXJlIGFzc3VtZWQgdG8gaGF2ZSBhbHJlYWR5IGJlZW4gZmV0Y2hlZCBp bnRvICdzeW1ib2xfbWFwJyBhbmQgYXJlIHNpbXBseQorIyBleHRyYWN0ZWQgYW5kIHByb2Nlc3Nl ZC4KK3N1YiBGZXRjaFN5bWJvbHMgeworICBteSAkcGNzZXQgPSBzaGlmdDsKKyAgbXkgJHN5bWJv bF9tYXAgPSBzaGlmdDsKKworICBteSAlc2VlbiA9ICgpOworICBteSBAcGNzID0gZ3JlcCB7ICEk c2VlbnskX30rKyB9IGtleXMoJSRwY3NldCk7ICAjIHVuaXEKKworICBpZiAoIWRlZmluZWQoJHN5 bWJvbF9tYXApKSB7CisgICAgbXkgJHBvc3RfZGF0YSA9IGpvaW4oIisiLCBzb3J0KChtYXAgeyIw eCIgLiAiJF8ifSBAcGNzKSkpOworCisgICAgb3BlbihQT1NURklMRSwgIj4kbWFpbjo6dG1wZmls ZV9zeW0iKTsKKyAgICBwcmludCBQT1NURklMRSAkcG9zdF9kYXRhOworICAgIGNsb3NlKFBPU1RG SUxFKTsKKworICAgIG15ICR1cmwgPSBTeW1ib2xQYWdlVVJMKCk7CisKKyAgICBteSAkY29tbWFu ZF9saW5lOworICAgIGlmIChqb2luKCIgIiwgQFVSTF9GRVRDSEVSKSA9fiBtL1xiY3VybCAtcy8p IHsKKyAgICAgICR1cmwgPSBSZXNvbHZlUmVkaXJlY3Rpb25Gb3JDdXJsKCR1cmwpOworICAgICAg JHVybCA9IEFwcGVuZFN5bWJvbEZpbHRlclBhcmFtcygkdXJsKTsKKyAgICAgICRjb21tYW5kX2xp bmUgPSBTaGVsbEVzY2FwZShAVVJMX0ZFVENIRVIsICItZCIsICJcQCRtYWluOjp0bXBmaWxlX3N5 bSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHVybCk7CisgICAgfSBlbHNl IHsKKyAgICAgICR1cmwgPSBBcHBlbmRTeW1ib2xGaWx0ZXJQYXJhbXMoJHVybCk7CisgICAgICAk Y29tbWFuZF9saW5lID0gKFNoZWxsRXNjYXBlKEBVUkxfRkVUQ0hFUiwgIi0tcG9zdCIsICR1cmwp CisgICAgICAgICAgICAgICAgICAgICAgIC4gIiA8ICIgLiBTaGVsbEVzY2FwZSgkbWFpbjo6dG1w ZmlsZV9zeW0pKTsKKyAgICB9CisgICAgIyBXZSB1c2UgYysrZmlsdCBpbiBjYXNlICRTWU1CT0xf UEFHRSBnaXZlcyB1cyBtYW5nbGVkIHN5bWJvbHMuCisgICAgbXkgJGVzY2FwZWRfY3BwZmlsdCA9 IFNoZWxsRXNjYXBlKCRvYmpfdG9vbF9tYXB7ImMrK2ZpbHQifSk7CisgICAgb3BlbihTWU1CT0ws ICIkY29tbWFuZF9saW5lIHwgJGVzY2FwZWRfY3BwZmlsdCB8Iikgb3IgZXJyb3IoJGNvbW1hbmRf bGluZSk7CisgICAgJHN5bWJvbF9tYXAgPSBSZWFkU3ltYm9scygqU1lNQk9Me0lPfSk7CisgICAg Y2xvc2UoU1lNQk9MKTsKKyAgfQorCisgIG15ICRzeW1ib2xzID0ge307CisgIGZvcmVhY2ggbXkg JHBjIChAcGNzKSB7CisgICAgbXkgJGZ1bGxuYW1lOworICAgICMgRm9yIDY0IGJpdHMgYmluYXJp ZXMsIHN5bWJvbHMgYXJlIGV4dHJhY3RlZCB3aXRoIDggbGVhZGluZyB6ZXJvZXMuCisgICAgIyBU aGVuIC9zeW1ib2wgcmVhZHMgdGhlIGxvbmcgc3ltYm9scyBpbiBhcyB1aW50NjQsIGFuZCBvdXRw dXRzCisgICAgIyB0aGUgcmVzdWx0IHdpdGggYSAiMHglMDhsbHgiIGZvcm1hdCB3aGljaCBnZXQg cmlkIG9mIHRoZSB6ZXJvZXMuCisgICAgIyBCeSByZW1vdmluZyBhbGwgdGhlIGxlYWRpbmcgemVy b2VzIGluIGJvdGggJHBjIGFuZCB0aGUgc3ltYm9scyBmcm9tCisgICAgIyAvc3ltYm9sLCB0aGUg c3ltYm9scyBtYXRjaCBhbmQgYXJlIHJldHJpZXZhYmxlIGZyb20gdGhlIG1hcC4KKyAgICBteSAk c2hvcnRwYyA9ICRwYzsKKyAgICAkc2hvcnRwYyA9fiBzL14wKi8vOworICAgICMgRWFjaCBsaW5l IG1heSBoYXZlIGEgbGlzdCBvZiBuYW1lcywgd2hpY2ggaW5jbHVkZXMgdGhlIGZ1bmN0aW9uCisg ICAgIyBhbmQgYWxzbyBvdGhlciBmdW5jdGlvbnMgaXQgaGFzIGlubGluZWQuICBUaGV5IGFyZSBz ZXBhcmF0ZWQgKGluCisgICAgIyBQcmludFN5bWJvbGl6ZWRQcm9maWxlKSwgYnkgLS0sIHdoaWNo IGlzIGlsbGVnYWwgaW4gZnVuY3Rpb24gbmFtZXMuCisgICAgbXkgJGZ1bGxuYW1lczsKKyAgICBp ZiAoZGVmaW5lZCgkc3ltYm9sX21hcC0+eyRzaG9ydHBjfSkpIHsKKyAgICAgICRmdWxsbmFtZXMg PSAkc3ltYm9sX21hcC0+eyRzaG9ydHBjfTsKKyAgICB9IGVsc2UgeworICAgICAgJGZ1bGxuYW1l cyA9ICIweCIgLiAkcGM7ICAjIEp1c3QgdXNlIGFkZHJlc3NlcworICAgIH0KKyAgICBteSAkc3lt ID0gW107CisgICAgJHN5bWJvbHMtPnskcGN9ID0gJHN5bTsKKyAgICBmb3JlYWNoIG15ICRmdWxs bmFtZSAoc3BsaXQoIi0tIiwgJGZ1bGxuYW1lcykpIHsKKyAgICAgIG15ICRuYW1lID0gU2hvcnRG dW5jdGlvbk5hbWUoJGZ1bGxuYW1lKTsKKyAgICAgIHB1c2goQHskc3ltfSwgJG5hbWUsICI/Iiwg JGZ1bGxuYW1lKTsKKyAgICB9CisgIH0KKyAgcmV0dXJuICRzeW1ib2xzOworfQorCitzdWIgQmFz ZU5hbWUgeworICBteSAkZmlsZV9uYW1lID0gc2hpZnQ7CisgICRmaWxlX25hbWUgPX4gcyFeLiov ISE7ICAjIFJlbW92ZSBkaXJlY3RvcnkgbmFtZQorICByZXR1cm4gJGZpbGVfbmFtZTsKK30KKwor c3ViIE1ha2VQcm9maWxlQmFzZU5hbWUgeworICBteSAoJGJpbmFyeV9uYW1lLCAkcHJvZmlsZV9u YW1lKSA9IEBfOworICBteSAoJGhvc3QsICRiYXNlVVJMLCAkcGF0aCkgPSBQYXJzZVByb2ZpbGVV UkwoJHByb2ZpbGVfbmFtZSk7CisgIG15ICRiaW5hcnlfc2hvcnRuYW1lID0gQmFzZU5hbWUoJGJp bmFyeV9uYW1lKTsKKyAgcmV0dXJuIHNwcmludGYoIiVzLiVzLiVzIiwKKyAgICAgICAgICAgICAg ICAgJGJpbmFyeV9zaG9ydG5hbWUsICRtYWluOjpvcF90aW1lLCAkaG9zdCk7Cit9CisKK3N1YiBG ZXRjaER5bmFtaWNQcm9maWxlIHsKKyAgbXkgJGJpbmFyeV9uYW1lID0gc2hpZnQ7CisgIG15ICRw cm9maWxlX25hbWUgPSBzaGlmdDsKKyAgbXkgJGZldGNoX25hbWVfb25seSA9IHNoaWZ0OworICBt eSAkZW5jb3VyYWdlX3BhdGllbmNlID0gc2hpZnQ7CisKKyAgaWYgKCFJc1Byb2ZpbGVVUkwoJHBy b2ZpbGVfbmFtZSkpIHsKKyAgICByZXR1cm4gJHByb2ZpbGVfbmFtZTsKKyAgfSBlbHNlIHsKKyAg ICBteSAoJGhvc3QsICRiYXNlVVJMLCAkcGF0aCkgPSBQYXJzZVByb2ZpbGVVUkwoJHByb2ZpbGVf bmFtZSk7CisgICAgaWYgKCRwYXRoIGVxICIiIHx8ICRwYXRoIGVxICIvIikgeworICAgICAgIyBN aXNzaW5nIHR5cGUgc3BlY2lmaWVyIGRlZmF1bHRzIHRvIGNwdS1wcm9maWxlCisgICAgICAkcGF0 aCA9ICRQUk9GSUxFX1BBR0U7CisgICAgfQorCisgICAgbXkgJHByb2ZpbGVfZmlsZSA9IE1ha2VQ cm9maWxlQmFzZU5hbWUoJGJpbmFyeV9uYW1lLCAkcHJvZmlsZV9uYW1lKTsKKworICAgIG15ICR1 cmwgPSAiJGJhc2VVUkwkcGF0aCI7CisgICAgbXkgJGZldGNoX3RpbWVvdXQgPSB1bmRlZjsKKyAg ICBpZiAoJHBhdGggPX4gbS8kUFJPRklMRV9QQUdFfCRQTVVQUk9GSUxFX1BBR0UvKSB7CisgICAg ICBpZiAoJHBhdGggPX4gbS9bP10vKSB7CisgICAgICAgICR1cmwgLj0gIiYiOworICAgICAgfSBl bHNlIHsKKyAgICAgICAgJHVybCAuPSAiPyI7CisgICAgICB9CisgICAgICAkdXJsIC49IHNwcmlu dGYoInNlY29uZHM9JWQiLCAkbWFpbjo6b3B0X3NlY29uZHMpOworICAgICAgJGZldGNoX3RpbWVv dXQgPSAkbWFpbjo6b3B0X3NlY29uZHMgKiAxLjAxICsgNjA7CisgICAgICAjIFNldCAkcHJvZmls ZV90eXBlIGZvciBjb25zdW1wdGlvbiBieSBQcmludFN5bWJvbGl6ZWRQcm9maWxlLgorICAgICAg JG1haW46OnByb2ZpbGVfdHlwZSA9ICdjcHUnOworICAgIH0gZWxzZSB7CisgICAgICAjIEZvciBu b24tQ1BVIHByb2ZpbGVzLCB3ZSBhZGQgYSB0eXBlLWV4dGVuc2lvbiB0bworICAgICAgIyB0aGUg dGFyZ2V0IHByb2ZpbGUgZmlsZSBuYW1lLgorICAgICAgbXkgJHN1ZmZpeCA9ICRwYXRoOworICAg ICAgJHN1ZmZpeCA9fiBzLC8sLixnOworICAgICAgJHByb2ZpbGVfZmlsZSAuPSAkc3VmZml4Owor ICAgICAgIyBTZXQgJHByb2ZpbGVfdHlwZSBmb3IgY29uc3VtcHRpb24gYnkgUHJpbnRTeW1ib2xp emVkUHJvZmlsZS4KKyAgICAgIGlmICgkcGF0aCA9fiBtLyRIRUFQX1BBR0UvKSB7CisgICAgICAg ICRtYWluOjpwcm9maWxlX3R5cGUgPSAnaGVhcCc7CisgICAgICB9IGVsc2lmICgkcGF0aCA9fiBt LyRHUk9XVEhfUEFHRS8pIHsKKyAgICAgICAgJG1haW46OnByb2ZpbGVfdHlwZSA9ICdncm93dGgn OworICAgICAgfSBlbHNpZiAoJHBhdGggPX4gbS8kQ09OVEVOVElPTl9QQUdFLykgeworICAgICAg ICAkbWFpbjo6cHJvZmlsZV90eXBlID0gJ2NvbnRlbnRpb24nOworICAgICAgfQorICAgIH0KKwor ICAgIG15ICRwcm9maWxlX2RpciA9ICRFTlZ7IkpFUFJPRl9UTVBESVIifSB8fCAoJEVOVntIT01F fSAuICIvamVwcm9mIik7CisgICAgaWYgKCEgLWQgJHByb2ZpbGVfZGlyKSB7CisgICAgICBta2Rp cigkcHJvZmlsZV9kaXIpCisgICAgICAgICAgfHwgZGllKCJVbmFibGUgdG8gY3JlYXRlIHByb2Zp bGUgZGlyZWN0b3J5ICRwcm9maWxlX2RpcjogJCFcbiIpOworICAgIH0KKyAgICBteSAkdG1wX3By b2ZpbGUgPSAiJHByb2ZpbGVfZGlyLy50bXAuJHByb2ZpbGVfZmlsZSI7CisgICAgbXkgJHJlYWxf cHJvZmlsZSA9ICIkcHJvZmlsZV9kaXIvJHByb2ZpbGVfZmlsZSI7CisKKyAgICBpZiAoJGZldGNo X25hbWVfb25seSA+IDApIHsKKyAgICAgIHJldHVybiAkcmVhbF9wcm9maWxlOworICAgIH0KKwor ICAgIG15IEBmZXRjaGVyID0gQWRkRmV0Y2hUaW1lb3V0KCRmZXRjaF90aW1lb3V0LCBAVVJMX0ZF VENIRVIpOworICAgIG15ICRjbWQgPSBTaGVsbEVzY2FwZShAZmV0Y2hlciwgJHVybCkgLiAiID4g IiAuIFNoZWxsRXNjYXBlKCR0bXBfcHJvZmlsZSk7CisgICAgaWYgKCRwYXRoID1+IG0vJFBST0ZJ TEVfUEFHRXwkUE1VUFJPRklMRV9QQUdFfCRDRU5TVVNQUk9GSUxFX1BBR0UvKXsKKyAgICAgIHBy aW50IFNUREVSUiAiR2F0aGVyaW5nIENQVSBwcm9maWxlIGZyb20gJHVybCBmb3IgJG1haW46Om9w dF9zZWNvbmRzIHNlY29uZHMgdG9cbiAgJHtyZWFsX3Byb2ZpbGV9XG4iOworICAgICAgaWYgKCRl bmNvdXJhZ2VfcGF0aWVuY2UpIHsKKyAgICAgICAgcHJpbnQgU1RERVJSICJCZSBwYXRpZW50Li4u XG4iOworICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICBwcmludCBTVERFUlIgIkZldGNoaW5n ICRwYXRoIHByb2ZpbGUgZnJvbSAkdXJsIHRvXG4gICR7cmVhbF9wcm9maWxlfVxuIjsKKyAgICB9 CisKKyAgICAoc3lzdGVtKCRjbWQpID09IDApIHx8IGVycm9yKCJGYWlsZWQgdG8gZ2V0IHByb2Zp bGU6ICRjbWQ6ICQhXG4iKTsKKyAgICAoc3lzdGVtKCJtdiIsICR0bXBfcHJvZmlsZSwgJHJlYWxf cHJvZmlsZSkgPT0gMCkgfHwgZXJyb3IoIlVuYWJsZSB0byByZW5hbWUgcHJvZmlsZVxuIik7Cisg ICAgcHJpbnQgU1RERVJSICJXcm90ZSBwcm9maWxlIHRvICRyZWFsX3Byb2ZpbGVcbiI7CisgICAg JG1haW46OmNvbGxlY3RlZF9wcm9maWxlID0gJHJlYWxfcHJvZmlsZTsKKyAgICByZXR1cm4gJG1h aW46OmNvbGxlY3RlZF9wcm9maWxlOworICB9Cit9CisKKyMgQ29sbGVjdCBwcm9maWxlcyBpbiBw YXJhbGxlbAorc3ViIEZldGNoRHluYW1pY1Byb2ZpbGVzIHsKKyAgbXkgJGl0ZW1zID0gc2NhbGFy KEBtYWluOjpwZmlsZV9hcmdzKTsKKyAgbXkgJGxldmVscyA9IGxvZygkaXRlbXMpIC8gbG9nKDIp OworCisgIGlmICgkaXRlbXMgPT0gMSkgeworICAgICRtYWluOjpwcm9maWxlX2ZpbGVzWzBdID0g RmV0Y2hEeW5hbWljUHJvZmlsZSgkbWFpbjo6cHJvZywgJG1haW46OnBmaWxlX2FyZ3NbMF0sIDAs IDEpOworICB9IGVsc2UgeworICAgICMgbWF0aCByb3VuZGluZyBpc3N1ZXMKKyAgICBpZiAoKDIg KiogJGxldmVscykgPCAkaXRlbXMpIHsKKyAgICAgJGxldmVscysrOworICAgIH0KKyAgICBteSAk Y291bnQgPSBzY2FsYXIoQG1haW46OnBmaWxlX2FyZ3MpOworICAgIGZvciAobXkgJGkgPSAwOyAk aSA8ICRjb3VudDsgJGkrKykgeworICAgICAgJG1haW46OnByb2ZpbGVfZmlsZXNbJGldID0gRmV0 Y2hEeW5hbWljUHJvZmlsZSgkbWFpbjo6cHJvZywgJG1haW46OnBmaWxlX2FyZ3NbJGldLCAxLCAw KTsKKyAgICB9CisgICAgcHJpbnQgU1RERVJSICJGZXRjaGluZyAkY291bnQgcHJvZmlsZXMsIEJl IHBhdGllbnQuLi5cbiI7CisgICAgRmV0Y2hEeW5hbWljUHJvZmlsZXNSZWN1cnNlKCRsZXZlbHMs IDAsIDApOworICAgICRtYWluOjpjb2xsZWN0ZWRfcHJvZmlsZSA9IGpvaW4oIiBcXFxuICAgICIs IEBtYWluOjpwcm9maWxlX2ZpbGVzKTsKKyAgfQorfQorCisjIFJlY3Vyc2l2ZWx5IGZvcmsgYSBw cm9jZXNzIHRvIGdldCBlbm91Z2ggcHJvY2Vzc2VzCisjIGNvbGxlY3RpbmcgcHJvZmlsZXMKK3N1 YiBGZXRjaER5bmFtaWNQcm9maWxlc1JlY3Vyc2UgeworICBteSAkbWF4bGV2ZWwgPSBzaGlmdDsK KyAgbXkgJGxldmVsID0gc2hpZnQ7CisgIG15ICRwb3NpdGlvbiA9IHNoaWZ0OworCisgIGlmICht eSAkcGlkID0gZm9yaygpKSB7CisgICAgJHBvc2l0aW9uID0gMCB8ICgkcG9zaXRpb24gPDwgMSk7 CisgICAgVHJ5Q29sbGVjdFByb2ZpbGUoJG1heGxldmVsLCAkbGV2ZWwsICRwb3NpdGlvbik7Cisg ICAgd2FpdDsKKyAgfSBlbHNlIHsKKyAgICAkcG9zaXRpb24gPSAxIHwgKCRwb3NpdGlvbiA8PCAx KTsKKyAgICBUcnlDb2xsZWN0UHJvZmlsZSgkbWF4bGV2ZWwsICRsZXZlbCwgJHBvc2l0aW9uKTsK KyAgICBjbGVhbnVwKCk7CisgICAgZXhpdCgwKTsKKyAgfQorfQorCisjIENvbGxlY3QgYSBzaW5n bGUgcHJvZmlsZQorc3ViIFRyeUNvbGxlY3RQcm9maWxlIHsKKyAgbXkgJG1heGxldmVsID0gc2hp ZnQ7CisgIG15ICRsZXZlbCA9IHNoaWZ0OworICBteSAkcG9zaXRpb24gPSBzaGlmdDsKKworICBp ZiAoJGxldmVsID49ICgkbWF4bGV2ZWwgLSAxKSkgeworICAgIGlmICgkcG9zaXRpb24gPCBzY2Fs YXIoQG1haW46OnBmaWxlX2FyZ3MpKSB7CisgICAgICBGZXRjaER5bmFtaWNQcm9maWxlKCRtYWlu Ojpwcm9nLCAkbWFpbjo6cGZpbGVfYXJnc1skcG9zaXRpb25dLCAwLCAwKTsKKyAgICB9CisgIH0g ZWxzZSB7CisgICAgRmV0Y2hEeW5hbWljUHJvZmlsZXNSZWN1cnNlKCRtYXhsZXZlbCwgJGxldmVs KzEsICRwb3NpdGlvbik7CisgIH0KK30KKworIyMjIyMgUGFyc2luZyBjb2RlICMjIyMjCisKKyMg UHJvdmlkZSBhIHNtYWxsIHN0cmVhbWluZy1yZWFkIG1vZHVsZSB0byBoYW5kbGUgdmVyeSBsYXJn ZQorIyBjcHUtcHJvZmlsZSBmaWxlcy4gIFN0cmVhbSBpbiBjaHVua3MgYWxvbmcgYSBzbGlkaW5n IHdpbmRvdy4KKyMgUHJvdmlkZXMgYW4gaW50ZXJmYWNlIHRvIGdldCBvbmUgJ3Nsb3QnLCBjb3Jy ZWN0bHkgaGFuZGxpbmcKKyMgZW5kaWFuLW5lc3MgZGlmZmVyZW5jZXMuICBBIHNsb3QgaXMgb25l IDMyLWJpdCBvciA2NC1iaXQgd29yZAorIyAoZGVwZW5kaW5nIG9uIHRoZSBpbnB1dCBwcm9maWxl KS4gIFdlIHRlbGwgZW5kaWFubmVzcyBhbmQgYml0LXNpemUKKyMgZm9yIHRoZSBwcm9maWxlIGJ5 IGxvb2tpbmcgYXQgdGhlIGZpcnN0IDggYnl0ZXM6IGluIGNwdSBwcm9maWxlcywKKyMgdGhlIHNl Y29uZCBzbG90IGlzIGFsd2F5cyAzICh3ZSdsbCBhY2NlcHQgYW55dGhpbmcgdGhhdCdzIG5vdCAw KS4KK0JFR0lOIHsKKyAgcGFja2FnZSBDcHVQcm9maWxlU3RyZWFtOworCisgIHN1YiBuZXcgewor ICAgIG15ICgkY2xhc3MsICRmaWxlLCAkZm5hbWUpID0gQF87CisgICAgbXkgJHNlbGYgPSB7IGZp bGUgICAgICAgID0+ICRmaWxlLAorICAgICAgICAgICAgICAgICBiYXNlICAgICAgICA9PiAwLAor ICAgICAgICAgICAgICAgICBzdHJpZGUgICAgICA9PiA1MTIgKiAxMDI0LCAgICMgbXVzdCBiZSBh IG11bHRpcGxlIG9mIGJpdHNpemUvOAorICAgICAgICAgICAgICAgICBzbG90cyAgICAgICA9PiBb XSwKKyAgICAgICAgICAgICAgICAgdW5wYWNrX2NvZGUgPT4gIiIsICAgICAgICAgICAjIE4gZm9y IGJpZy1lbmRpYW4sIFYgZm9yIGxpdHRsZQorICAgICAgICAgICAgICAgICBwZXJsX2lzXzY0Yml0 ID0+IDEsICAgICAgICAgICMgbWF0dGVycyBpZiBwcm9maWxlIGlzIDY0LWJpdAorICAgIH07Cisg ICAgYmxlc3MgJHNlbGYsICRjbGFzczsKKyAgICAjIExldCB1bml0dGVzdHMgYWRqdXN0IHRoZSBz dHJpZGUKKyAgICBpZiAoJG1haW46Om9wdF90ZXN0X3N0cmlkZSA+IDApIHsKKyAgICAgICRzZWxm LT57c3RyaWRlfSA9ICRtYWluOjpvcHRfdGVzdF9zdHJpZGU7CisgICAgfQorICAgICMgUmVhZCB0 aGUgZmlyc3QgdHdvIHNsb3RzIHRvIGZpZ3VyZSBvdXQgYml0c2l6ZSBhbmQgZW5kaWFubmVzcy4K KyAgICBteSAkc2xvdHMgPSAkc2VsZi0+e3Nsb3RzfTsKKyAgICBteSAkc3RyOworICAgIHJlYWQo JHNlbGYtPntmaWxlfSwgJHN0ciwgOCk7CisgICAgIyBTZXQgdGhlIGdsb2JhbCAkYWRkcmVzc19s ZW5ndGggYmFzZWQgb24gd2hhdCB3ZSBzZWUgaGVyZS4KKyAgICAjIDggaXMgMzItYml0ICg4IGhl eGFkZWNpbWFsIGNoYXJzKTsgMTYgaXMgNjQtYml0ICgxNiBoZXhhZGVjaW1hbCBjaGFycykuCisg ICAgJGFkZHJlc3NfbGVuZ3RoID0gKCRzdHIgZXEgKGNocigwKXg4KSkgPyAxNiA6IDg7CisgICAg aWYgKCRhZGRyZXNzX2xlbmd0aCA9PSA4KSB7CisgICAgICBpZiAoc3Vic3RyKCRzdHIsIDYsIDIp IGVxIGNocigwKXgyKSB7CisgICAgICAgICRzZWxmLT57dW5wYWNrX2NvZGV9ID0gJ1YnOyAgIyBM aXR0bGUtZW5kaWFuLgorICAgICAgfSBlbHNpZiAoc3Vic3RyKCRzdHIsIDQsIDIpIGVxIGNocigw KXgyKSB7CisgICAgICAgICRzZWxmLT57dW5wYWNrX2NvZGV9ID0gJ04nOyAgIyBCaWctZW5kaWFu CisgICAgICB9IGVsc2UgeworICAgICAgICA6OmVycm9yKCIkZm5hbWU6IGhlYWRlciBzaXplID49 IDIqKjE2XG4iKTsKKyAgICAgIH0KKyAgICAgIEAkc2xvdHMgPSB1bnBhY2soJHNlbGYtPnt1bnBh Y2tfY29kZX0gLiAiKiIsICRzdHIpOworICAgIH0gZWxzZSB7CisgICAgICAjIElmIHdlJ3JlIGEg NjQtYml0IHByb2ZpbGUsIGNoZWNrIGlmIHdlJ3JlIGEgNjQtYml0LWNhcGFibGUKKyAgICAgICMg cGVybC4gIE90aGVyd2lzZSwgZWFjaCBzbG90IHdpbGwgYmUgcmVwcmVzZW50ZWQgYXMgYSBmbG9h dAorICAgICAgIyBpbnN0ZWFkIG9mIGFuIGludDY0LCBsb3NpbmcgcHJlY2lzaW9uIGFuZCBtYWtp bmcgYWxsIHRoZQorICAgICAgIyA2NC1iaXQgYWRkcmVzc2VzIHdyb25nLiAgV2Ugd29uJ3QgY29t cGxhaW4geWV0LCBidXQgd2lsbAorICAgICAgIyBsYXRlciBpZiB3ZSBldmVyIHNlZSBhIHZhbHVl IHRoYXQgZG9lc24ndCBmaXQgaW4gMzIgYml0cy4KKyAgICAgIG15ICRoYXNfcSA9IDA7CisgICAg ICBldmFsIHsgJGhhc19xID0gcGFjaygiUSIsICIxIikgPyAxIDogMTsgfTsKKyAgICAgIGlmICgh JGhhc19xKSB7CisgICAgICAgICRzZWxmLT57cGVybF9pc182NGJpdH0gPSAwOworICAgICAgfQor ICAgICAgcmVhZCgkc2VsZi0+e2ZpbGV9LCAkc3RyLCA4KTsKKyAgICAgIGlmIChzdWJzdHIoJHN0 ciwgNCwgNCkgZXEgY2hyKDApeDQpIHsKKyAgICAgICAgIyBXZSdkIGxvdmUgdG8gdXNlICdRJywg YnV0IGl0J3MgYSkgbm90IHVuaXZlcnNhbCwgYikgbm90IGVuZGlhbi1wcm9vZi4KKyAgICAgICAg JHNlbGYtPnt1bnBhY2tfY29kZX0gPSAnVic7ICAjIExpdHRsZS1lbmRpYW4uCisgICAgICB9IGVs c2lmIChzdWJzdHIoJHN0ciwgMCwgNCkgZXEgY2hyKDApeDQpIHsKKyAgICAgICAgJHNlbGYtPnt1 bnBhY2tfY29kZX0gPSAnTic7ICAjIEJpZy1lbmRpYW4KKyAgICAgIH0gZWxzZSB7CisgICAgICAg IDo6ZXJyb3IoIiRmbmFtZTogaGVhZGVyIHNpemUgPj0gMioqMzJcbiIpOworICAgICAgfQorICAg ICAgbXkgQHBhaXIgPSB1bnBhY2soJHNlbGYtPnt1bnBhY2tfY29kZX0gLiAiKiIsICRzdHIpOwor ICAgICAgIyBTaW5jZSB3ZSBrbm93IG9uZSBvZiB0aGUgcGFpciBpcyAwLCBpdCdzIGZpbmUgdG8g anVzdCBhZGQgdGhlbS4KKyAgICAgIEAkc2xvdHMgPSAoMCwgJHBhaXJbMF0gKyAkcGFpclsxXSk7 CisgICAgfQorICAgIHJldHVybiAkc2VsZjsKKyAgfQorCisgICMgTG9hZCBtb3JlIGRhdGEgd2hl biB3ZSBhY2Nlc3Mgc2xvdHMtPmdldChYKSB3aGljaCBpcyBub3QgeWV0IGluIG1lbW9yeS4KKyAg c3ViIG92ZXJmbG93IHsKKyAgICBteSAoJHNlbGYpID0gQF87CisgICAgbXkgJHNsb3RzID0gJHNl bGYtPntzbG90c307CisgICAgJHNlbGYtPntiYXNlfSArPSAkIyRzbG90cyArIDE7ICAgIyBza2lw IG92ZXIgZGF0YSB3ZSdyZSByZXBsYWNpbmcKKyAgICBteSAkc3RyOworICAgIHJlYWQoJHNlbGYt PntmaWxlfSwgJHN0ciwgJHNlbGYtPntzdHJpZGV9KTsKKyAgICBpZiAoJGFkZHJlc3NfbGVuZ3Ro ID09IDgpIHsgICAgICAjIHRoZSAzMi1iaXQgY2FzZQorICAgICAgIyBUaGlzIGlzIHRoZSBlYXN5 IGNhc2U6IHVucGFjayBwcm92aWRlcyAzMi1iaXQgdW5wYWNraW5nIHByaW1pdGl2ZXMuCisgICAg ICBAJHNsb3RzID0gdW5wYWNrKCRzZWxmLT57dW5wYWNrX2NvZGV9IC4gIioiLCAkc3RyKTsKKyAg ICB9IGVsc2UgeworICAgICAgIyBXZSBuZWVkIHRvIHVucGFjayAzMiBiaXRzIGF0IGEgdGltZSBh bmQgY29tYmluZS4KKyAgICAgIG15IEBiMzJfdmFsdWVzID0gdW5wYWNrKCRzZWxmLT57dW5wYWNr X2NvZGV9IC4gIioiLCAkc3RyKTsKKyAgICAgIG15IEBiNjRfdmFsdWVzID0gKCk7CisgICAgICBm b3IgKG15ICRpID0gMDsgJGkgPCAkI2IzMl92YWx1ZXM7ICRpICs9IDIpIHsKKyAgICAgICAgIyBU T0RPKGNzaWx2ZXJzKTogaWYgdGhpcyBpcyBhIDMyLWJpdCBwZXJsLCB0aGUgbWF0aCBiZWxvdwor ICAgICAgICAjICAgIGNvdWxkIGVuZCB1cCBpbiBhIHRvby1sYXJnZSBpbnQsIHdoaWNoIHBlcmwg d2lsbCBwcm9tb3RlCisgICAgICAgICMgICAgdG8gYSBkb3VibGUsIGxvc2luZyBuZWNlc3Nhcnkg cHJlY2lzaW9uLiAgRGVhbCB3aXRoIHRoYXQuCisgICAgICAgICMgICAgUmlnaHQgbm93LCB3ZSBq dXN0IGRpZS4KKyAgICAgICAgbXkgKCRsbywgJGhpKSA9ICgkYjMyX3ZhbHVlc1skaV0sICRiMzJf dmFsdWVzWyRpKzFdKTsKKyAgICAgICAgaWYgKCRzZWxmLT57dW5wYWNrX2NvZGV9IGVxICdOJykg eyAgICAjIGJpZy1lbmRpYW4KKyAgICAgICAgICAoJGxvLCAkaGkpID0gKCRoaSwgJGxvKTsKKyAg ICAgICAgfQorICAgICAgICBteSAkdmFsdWUgPSAkbG8gKyAkaGkgKiAoMioqMzIpOworICAgICAg ICBpZiAoISRzZWxmLT57cGVybF9pc182NGJpdH0gJiYgICAjIGNoZWNrIHZhbHVlIGlzIGV4YWN0 bHkgcmVwcmVzZW50ZWQKKyAgICAgICAgICAgICgoJHZhbHVlICUgKDIqKjMyKSkgIT0gJGxvIHx8 IGludCgkdmFsdWUgLyAoMioqMzIpKSAhPSAkaGkpKSB7CisgICAgICAgICAgOjplcnJvcigiTmVl ZCBhIDY0LWJpdCBwZXJsIHRvIHByb2Nlc3MgdGhpcyA2NC1iaXQgcHJvZmlsZS5cbiIpOworICAg ICAgICB9CisgICAgICAgIHB1c2goQGI2NF92YWx1ZXMsICR2YWx1ZSk7CisgICAgICB9CisgICAg ICBAJHNsb3RzID0gQGI2NF92YWx1ZXM7CisgICAgfQorICB9CisKKyAgIyBBY2Nlc3MgdGhlIGkt dGggbG9uZyBpbiB0aGUgZmlsZSAobG9naWNhbGx5KSwgb3IgLTEgYXQgRU9GLgorICBzdWIgZ2V0 IHsKKyAgICBteSAoJHNlbGYsICRpZHgpID0gQF87CisgICAgbXkgJHNsb3RzID0gJHNlbGYtPntz bG90c307CisgICAgd2hpbGUgKCQjJHNsb3RzID49IDApIHsKKyAgICAgIGlmICgkaWR4IDwgJHNl bGYtPntiYXNlfSkgeworICAgICAgICAjIFRoZSBvbmx5IHRpbWUgd2UgZXhwZWN0IGEgcmVmZXJl bmNlIHRvICRzbG90c1skaSAtIHNvbWV0aGluZ10KKyAgICAgICAgIyBhZnRlciByZWZlcmVuY2lu ZyAkc2xvdHNbJGldIGlzIHJlYWRpbmcgdGhlIHZlcnkgZmlyc3QgaGVhZGVyLgorICAgICAgICAj IFNpbmNlICRzdHJpZGUgPiB8aGVhZGVyfCwgdGhhdCBzaG91bGRuJ3QgY2F1c2UgYW55IGxvb2ti YWNrCisgICAgICAgICMgZXJyb3JzLiAgQW5kIGV2ZXJ5dGhpbmcgYWZ0ZXIgdGhlIGhlYWRlciBp cyBzZXF1ZW50aWFsLgorICAgICAgICBwcmludCBTVERFUlIgIlVuZXhwZWN0ZWQgbG9vay1iYWNr IHJlYWRpbmcgQ1BVIHByb2ZpbGUiOworICAgICAgICByZXR1cm4gLTE7ICAgIyBzaHJ1ZywgZG9u J3Qga25vdyB3aGF0IGJldHRlciB0byByZXR1cm4KKyAgICAgIH0gZWxzaWYgKCRpZHggPiAkc2Vs Zi0+e2Jhc2V9ICsgJCMkc2xvdHMpIHsKKyAgICAgICAgJHNlbGYtPm92ZXJmbG93KCk7CisgICAg ICB9IGVsc2UgeworICAgICAgICByZXR1cm4gJHNsb3RzLT5bJGlkeCAtICRzZWxmLT57YmFzZX1d OworICAgICAgfQorICAgIH0KKyAgICAjIElmIHdlIGdldCBoZXJlLCAkc2xvdHMgaXMgW10sIHdo aWNoIG1lYW5zIHdlJ3ZlIHJlYWNoZWQgRU9GCisgICAgcmV0dXJuIC0xOyAgIyB1bmlxdWUgc2lu Y2Ugc2xvdHMgaXMgc3VwcG9zZWQgdG8gaG9sZCB1bnNpZ25lZCBudW1iZXJzCisgIH0KK30KKwor IyBSZWFkcyB0aGUgdG9wLCAnaGVhZGVyJyBzZWN0aW9uIG9mIGEgcHJvZmlsZSwgYW5kIHJldHVy bnMgdGhlIGxhc3QKKyMgbGluZSBvZiB0aGUgaGVhZGVyLCBjb21tb25seSBjYWxsZWQgYSAnaGVh ZGVyIGxpbmUnLiAgVGhlIGhlYWRlcgorIyBzZWN0aW9uIG9mIGEgcHJvZmlsZSBjb25zaXN0cyBv ZiB6ZXJvIG9yIG1vcmUgJ2NvbW1hbmQnIGxpbmVzIHRoYXQKKyMgYXJlIGluc3RydWN0aW9ucyB0 byBqZXByb2YsIHdoaWNoIGplcHJvZiBleGVjdXRlcyB3aGVuIHJlYWRpbmcgdGhlCisjIGhlYWRl ci4gIEFsbCAnY29tbWFuZCcgbGluZXMgc3RhcnQgd2l0aCBhICUuICBBZnRlciB0aGUgY29tbWFu ZAorIyBsaW5lcyBpcyB0aGUgJ2hlYWRlciBsaW5lJywgd2hpY2ggaXMgYSBwcm9maWxlLXNwZWNp ZmljIGxpbmUgdGhhdAorIyBpbmRpY2F0ZXMgd2hhdCB0eXBlIG9mIHByb2ZpbGUgaXQgaXMsIGFu ZCBwZXJoYXBzIG90aGVyIGdsb2JhbAorIyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcHJvZmlsZS4g IEZvciBpbnN0YW5jZSwgaGVyZSdzIGEgaGVhZGVyIGxpbmUKKyMgZm9yIGEgaGVhcCBwcm9maWxl OgorIyAgIGhlYXAgcHJvZmlsZTogICAgIDUzOiAgICAzODIzNiBbICA1NTI1OiAgMTI4NDAyOV0g QCBoZWFwcHJvZmlsZQorIyBGb3IgaGlzdG9yaWNhbCByZWFzb25zLCB0aGUgQ1BVIHByb2ZpbGUg ZG9lcyBub3QgY29udGFpbiBhIHRleHQtCisjIHJlYWRhYmxlIGhlYWRlciBsaW5lLiAgSWYgdGhl IHByb2ZpbGUgbG9va3MgbGlrZSBhIENQVSBwcm9maWxlLAorIyB0aGlzIGZ1bmN0aW9uIHJldHVy bnMgIiIuICBJZiBubyBoZWFkZXIgbGluZSBjb3VsZCBiZSBmb3VuZCwgdGhpcworIyBmdW5jdGlv biByZXR1cm5zIHVuZGVmLgorIworIyBUaGUgZm9sbG93aW5nIGNvbW1hbmRzIGFyZSByZWNvZ25p emVkOgorIyAgICV3YXJuIC0tIGVtaXQgdGhlIHJlc3Qgb2YgdGhpcyBsaW5lIHRvIHN0ZGVyciwg cHJlZml4ZWQgYnkgJ1dBUk5JTkc6JworIworIyBUaGUgaW5wdXQgZmlsZSBzaG91bGQgYmUgaW4g YmlubW9kZS4KK3N1YiBSZWFkUHJvZmlsZUhlYWRlciB7CisgIGxvY2FsICpQUk9GSUxFID0gc2hp ZnQ7CisgIG15ICRmaXJzdGNoYXIgPSAiIjsKKyAgbXkgJGxpbmUgPSAiIjsKKyAgcmVhZChQUk9G SUxFLCAkZmlyc3RjaGFyLCAxKTsKKyAgc2VlayhQUk9GSUxFLCAtMSwgMSk7ICAgICAgICAgICAg ICAgICAgICAjIHVucmVhZCB0aGUgZmlyc3RjaGFyCisgIGlmICgkZmlyc3RjaGFyICF+IC9bWzpw cmludDpdXS8pIHsgICAgICAgIyBpcyBub3QgYSB0ZXh0IGNoYXJhY3RlcgorICAgIHJldHVybiAi IjsKKyAgfQorICB3aGlsZSAoZGVmaW5lZCgkbGluZSA9IDxQUk9GSUxFPikpIHsKKyAgICAkbGlu ZSA9fiBzL1xyLy9nOyAgICMgdHVybiB3aW5kb3dzLWxvb2tpbmcgbGluZXMgaW50byB1bml4LWxv b2tpbmcgbGluZXMKKyAgICBpZiAoJGxpbmUgPX4gL14ld2FyblxzKyguKikvKSB7ICAgICAgICAj ICd3YXJuJyBjb21tYW5kCisgICAgICAjIE5vdGUgdGhpcyBtYXRjaGVzIGJvdGggJyV3YXJuIGJs YWhcbicgYW5kICcld2FyblxuJy4KKyAgICAgIHByaW50IFNUREVSUiAiV0FSTklORzogJDFcbiI7 ICAgICAgICAjIHByaW50IHRoZSByZXN0IG9mIHRoZSBsaW5lCisgICAgfSBlbHNpZiAoJGxpbmUg PX4gL14lLykgeworICAgICAgcHJpbnQgU1RERVJSICJJZ25vcmluZyB1bmtub3duIGNvbW1hbmQg ZnJvbSBwcm9maWxlIGhlYWRlcjogJGxpbmUiOworICAgIH0gZWxzZSB7CisgICAgICAjIEVuZCBv ZiBjb21tYW5kcywgbXVzdCBiZSB0aGUgaGVhZGVyIGxpbmUuCisgICAgICByZXR1cm4gJGxpbmU7 CisgICAgfQorICB9CisgIHJldHVybiB1bmRlZjsgICAgICMgZ290IHRvIEVPRiB3aXRob3V0IHNl ZWluZyBhIGhlYWRlciBsaW5lCit9CisKK3N1YiBJc1N5bWJvbGl6ZWRQcm9maWxlRmlsZSB7Cisg IG15ICRmaWxlX25hbWUgPSBzaGlmdDsKKyAgaWYgKCEoLWUgJGZpbGVfbmFtZSkgfHwgISgtciAk ZmlsZV9uYW1lKSkgeworICAgIHJldHVybiAwOworICB9CisgICMgQ2hlY2sgaWYgdGhlIGZpbGUg Y29udGFpbnMgYSBzeW1ib2wtc2VjdGlvbiBtYXJrZXIuCisgIG9wZW4oVEZJTEUsICI8JGZpbGVf bmFtZSIpOworICBiaW5tb2RlIFRGSUxFOworICBteSAkZmlyc3RsaW5lID0gUmVhZFByb2ZpbGVI ZWFkZXIoKlRGSUxFKTsKKyAgY2xvc2UoVEZJTEUpOworICBpZiAoISRmaXJzdGxpbmUpIHsKKyAg ICByZXR1cm4gMDsKKyAgfQorICAkU1lNQk9MX1BBR0UgPX4gbSxbXi9dKyQsOyAgICAjIG1hdGNo ZXMgZXZlcnl0aGluZyBhZnRlciB0aGUgbGFzdCBzbGFzaAorICBteSAkc3ltYm9sX21hcmtlciA9 ICQmOworICByZXR1cm4gJGZpcnN0bGluZSA9fiAvXi0tLSAqJHN5bWJvbF9tYXJrZXIvOworfQor CisjIFBhcnNlIHByb2ZpbGUgZ2VuZXJhdGVkIGJ5IGNvbW1vbi9wcm9maWxlci5jYyBhbmQgcmV0 dXJuIGEgcmVmZXJlbmNlCisjIHRvIGEgbWFwOgorIyAgICAgICRyZXN1bHQtPnt2ZXJzaW9ufSAg ICAgVmVyc2lvbiBudW1iZXIgb2YgcHJvZmlsZSBmaWxlCisjICAgICAgJHJlc3VsdC0+e3Blcmlv ZH0gICAgICBTYW1wbGluZyBwZXJpb2QgKGluIG1pY3Jvc2Vjb25kcykKKyMgICAgICAkcmVzdWx0 LT57cHJvZmlsZX0gICAgIFByb2ZpbGUgb2JqZWN0CisjICAgICAgJHJlc3VsdC0+e3RocmVhZHN9 ICAgICBNYXAgb2YgdGhyZWFkIElEcyB0byBwcm9maWxlIG9iamVjdHMKKyMgICAgICAkcmVzdWx0 LT57bWFwfSAgICAgICAgIE1lbW9yeSBtYXAgaW5mbyBmcm9tIHByb2ZpbGUKKyMgICAgICAkcmVz dWx0LT57cGNzfSAgICAgICAgIEhhc2ggb2YgYWxsIFBDIHZhbHVlcyBzZWVuLCBrZXkgaXMgaGV4 IGFkZHJlc3MKK3N1YiBSZWFkUHJvZmlsZSB7CisgIG15ICRwcm9nID0gc2hpZnQ7CisgIG15ICRm bmFtZSA9IHNoaWZ0OworICBteSAkcmVzdWx0OyAgICAgICAgICAgICMgcmV0dXJuIHZhbHVlCisK KyAgJENPTlRFTlRJT05fUEFHRSA9fiBtLFteL10rJCw7ICAgICMgbWF0Y2hlcyBldmVyeXRoaW5n IGFmdGVyIHRoZSBsYXN0IHNsYXNoCisgIG15ICRjb250ZW50aW9uX21hcmtlciA9ICQmOworICAk R1JPV1RIX1BBR0UgID1+IG0sW14vXSskLDsgICAgIyBtYXRjaGVzIGV2ZXJ5dGhpbmcgYWZ0ZXIg dGhlIGxhc3Qgc2xhc2gKKyAgbXkgJGdyb3d0aF9tYXJrZXIgPSAkJjsKKyAgJFNZTUJPTF9QQUdF ID1+IG0sW14vXSskLDsgICAgIyBtYXRjaGVzIGV2ZXJ5dGhpbmcgYWZ0ZXIgdGhlIGxhc3Qgc2xh c2gKKyAgbXkgJHN5bWJvbF9tYXJrZXIgPSAkJjsKKyAgJFBST0ZJTEVfUEFHRSA9fiBtLFteL10r JCw7ICAgICMgbWF0Y2hlcyBldmVyeXRoaW5nIGFmdGVyIHRoZSBsYXN0IHNsYXNoCisgIG15ICRw cm9maWxlX21hcmtlciA9ICQmOworICAkSEVBUF9QQUdFID1+IG0sW14vXSskLDsgICAgIyBtYXRj aGVzIGV2ZXJ5dGhpbmcgYWZ0ZXIgdGhlIGxhc3Qgc2xhc2gKKyAgbXkgJGhlYXBfbWFya2VyID0g JCY7CisKKyAgIyBMb29rIGF0IGZpcnN0IGxpbmUgdG8gc2VlIGlmIGl0IGlzIGEgaGVhcCBvciBh IENQVSBwcm9maWxlLgorICAjIENQVSBwcm9maWxlIG1heSBzdGFydCB3aXRoIG5vIGhlYWRlciBh dCBhbGwsIGFuZCBqdXN0IGJpbmFyeSBkYXRhCisgICMgKHN0YXJ0aW5nIHdpdGggXDBcMFwwXDAp IC0tIGluIHRoYXQgY2FzZSwgZG9uJ3QgdHJ5IHRvIHJlYWQgdGhlCisgICMgd2hvbGUgZmlyc3Rs aW5lLCBzaW5jZSBpdCBtYXkgYmUgZ2lnYWJ5dGVzKCEpIG9mIGRhdGEuCisgIG9wZW4oUFJPRklM RSwgIjwkZm5hbWUiKSB8fCBlcnJvcigiJGZuYW1lOiAkIVxuIik7CisgIGJpbm1vZGUgUFJPRklM RTsgICAgICAjIE5ldyBwZXJscyBkbyBVVEYtOCBwcm9jZXNzaW5nCisgIG15ICRoZWFkZXIgPSBS ZWFkUHJvZmlsZUhlYWRlcigqUFJPRklMRSk7CisgIGlmICghZGVmaW5lZCgkaGVhZGVyKSkgeyAg ICMgbWVhbnMgImF0IEVPRiIKKyAgICBlcnJvcigiUHJvZmlsZSBpcyBlbXB0eS5cbiIpOworICB9 CisKKyAgbXkgJHN5bWJvbHM7CisgIGlmICgkaGVhZGVyID1+IG0vXi0tLSAqJHN5bWJvbF9tYXJr ZXIvbykgeworICAgICMgVmVyaWZ5IHRoYXQgdGhlIHVzZXIgYXNrZWQgZm9yIGEgc3ltYm9saXpl ZCBwcm9maWxlCisgICAgaWYgKCEkbWFpbjo6dXNlX3N5bWJvbGl6ZWRfcHJvZmlsZSkgeworICAg ICAgIyB3ZSBoYXZlIGJvdGggYSBiaW5hcnkgYW5kIHN5bWJvbGl6ZWQgcHJvZmlsZXMsIGFib3J0 CisgICAgICBlcnJvcigiRkFUQUwgRVJST1I6IFN5bWJvbGl6ZWQgcHJvZmlsZVxuICAgJGZuYW1l XG5jYW5ub3QgYmUgdXNlZCB3aXRoICIgLgorICAgICAgICAgICAgImEgYmluYXJ5IGFyZy4gVHJ5 IGFnYWluIHdpdGhvdXQgcGFzc2luZ1xuICAgJHByb2dcbiIpOworICAgIH0KKyAgICAjIFJlYWQg dGhlIHN5bWJvbCBzZWN0aW9uIG9mIHRoZSBzeW1ib2xpemVkIHByb2ZpbGUgZmlsZS4KKyAgICAk c3ltYm9scyA9IFJlYWRTeW1ib2xzKCpQUk9GSUxFe0lPfSk7CisgICAgIyBSZWFkIHRoZSBuZXh0 IGxpbmUgdG8gZ2V0IHRoZSBoZWFkZXIgZm9yIHRoZSByZW1haW5pbmcgcHJvZmlsZS4KKyAgICAk aGVhZGVyID0gUmVhZFByb2ZpbGVIZWFkZXIoKlBST0ZJTEUpIHx8ICIiOworICB9CisKKyAgaWYg KCRoZWFkZXIgPX4gbS9eLS0tICooJGhlYXBfbWFya2VyfCRncm93dGhfbWFya2VyKS9vKSB7Cisg ICAgIyBTa2lwICItLS0gLi4uIiBsaW5lIGZvciBwcm9maWxlIHR5cGVzIHRoYXQgaGF2ZSB0aGVp ciBvd24gaGVhZGVycy4KKyAgICAkaGVhZGVyID0gUmVhZFByb2ZpbGVIZWFkZXIoKlBST0ZJTEUp IHx8ICIiOworICB9CisKKyAgJG1haW46OnByb2ZpbGVfdHlwZSA9ICcnOworCisgIGlmICgkaGVh ZGVyID1+IG0vXmhlYXAgcHJvZmlsZTouKiRncm93dGhfbWFya2VyL28pIHsKKyAgICAkbWFpbjo6 cHJvZmlsZV90eXBlID0gJ2dyb3d0aCc7CisgICAgJHJlc3VsdCA9ICBSZWFkSGVhcFByb2ZpbGUo JHByb2csICpQUk9GSUxFLCAkaGVhZGVyKTsKKyAgfSBlbHNpZiAoJGhlYWRlciA9fiBtL15oZWFw IHByb2ZpbGU6LykgeworICAgICRtYWluOjpwcm9maWxlX3R5cGUgPSAnaGVhcCc7CisgICAgJHJl c3VsdCA9ICBSZWFkSGVhcFByb2ZpbGUoJHByb2csICpQUk9GSUxFLCAkaGVhZGVyKTsKKyAgfSBl bHNpZiAoJGhlYWRlciA9fiBtL15oZWFwLykgeworICAgICRtYWluOjpwcm9maWxlX3R5cGUgPSAn aGVhcCc7CisgICAgJHJlc3VsdCA9IFJlYWRUaHJlYWRlZEhlYXBQcm9maWxlKCRwcm9nLCAkZm5h bWUsICRoZWFkZXIpOworICB9IGVsc2lmICgkaGVhZGVyID1+IG0vXi0tLSAqJGNvbnRlbnRpb25f bWFya2VyL28pIHsKKyAgICAkbWFpbjo6cHJvZmlsZV90eXBlID0gJ2NvbnRlbnRpb24nOworICAg ICRyZXN1bHQgPSBSZWFkU3luY2hQcm9maWxlKCRwcm9nLCAqUFJPRklMRSk7CisgIH0gZWxzaWYg KCRoZWFkZXIgPX4gbS9eLS0tICpTdGFja3M6LykgeworICAgIHByaW50IFNUREVSUgorICAgICAg Ik9sZCBmb3JtYXQgY29udGVudGlvbiBwcm9maWxlOiBtaXN0YWtlbmx5IHJlcG9ydHMgIiAuCisg ICAgICAiY29uZGl0aW9uIHZhcmlhYmxlIHNpZ25hbHMgYXMgbG9jayBjb250ZW50aW9ucy5cbiI7 CisgICAgJG1haW46OnByb2ZpbGVfdHlwZSA9ICdjb250ZW50aW9uJzsKKyAgICAkcmVzdWx0ID0g UmVhZFN5bmNoUHJvZmlsZSgkcHJvZywgKlBST0ZJTEUpOworICB9IGVsc2lmICgkaGVhZGVyID1+ IG0vXi0tLSAqJHByb2ZpbGVfbWFya2VyLykgeworICAgICMgdGhlIGJpbmFyeSBjcHUgcHJvZmls ZSBkYXRhIHN0YXJ0cyBpbW1lZGlhdGVseSBhZnRlciB0aGlzIGxpbmUKKyAgICAkbWFpbjo6cHJv ZmlsZV90eXBlID0gJ2NwdSc7CisgICAgJHJlc3VsdCA9IFJlYWRDUFVQcm9maWxlKCRwcm9nLCAk Zm5hbWUsICpQUk9GSUxFKTsKKyAgfSBlbHNlIHsKKyAgICBpZiAoZGVmaW5lZCgkc3ltYm9scykp IHsKKyAgICAgICMgYSBzeW1ib2xpemVkIHByb2ZpbGUgY29udGFpbnMgYSBmb3JtYXQgd2UgZG9u J3QgcmVjb2duaXplLCBiYWlsIG91dAorICAgICAgZXJyb3IoIiRmbmFtZTogQ2Fubm90IHJlY29n bml6ZSBwcm9maWxlIHNlY3Rpb24gYWZ0ZXIgc3ltYm9scy5cbiIpOworICAgIH0KKyAgICAjIG5v IGFzY2lpIGhlYWRlciBwcmVzZW50IC0tIG11c3QgYmUgYSBDUFUgcHJvZmlsZQorICAgICRtYWlu Ojpwcm9maWxlX3R5cGUgPSAnY3B1JzsKKyAgICAkcmVzdWx0ID0gUmVhZENQVVByb2ZpbGUoJHBy b2csICRmbmFtZSwgKlBST0ZJTEUpOworICB9CisKKyAgY2xvc2UoUFJPRklMRSk7CisKKyAgIyBp ZiB3ZSBnb3Qgc3ltYm9scyBhbG9uZyB3aXRoIHRoZSBwcm9maWxlLCByZXR1cm4gdGhvc2UgYXMg d2VsbAorICBpZiAoZGVmaW5lZCgkc3ltYm9scykpIHsKKyAgICAkcmVzdWx0LT57c3ltYm9sc30g PSAkc3ltYm9sczsKKyAgfQorCisgIHJldHVybiAkcmVzdWx0OworfQorCisjIFN1YnRyYWN0IG9u ZSBmcm9tIGNhbGxlciBwYyBzbyB3ZSBtYXAgYmFjayB0byBjYWxsIGluc3RyLgorIyBIb3dldmVy LCBkb24ndCBkbyB0aGlzIGlmIHdlJ3JlIHJlYWRpbmcgYSBzeW1ib2xpemVkIHByb2ZpbGUKKyMg ZmlsZSwgaW4gd2hpY2ggY2FzZSB0aGUgc3VidHJhY3Qtb25lIHdhcyBkb25lIHdoZW4gdGhlIGZp bGUKKyMgd2FzIHdyaXR0ZW4uCisjCisjIFdlIGFwcGx5IHRoZSBzYW1lIGxvZ2ljIHRvIGFsbCBy ZWFkZXJzLCB0aG91Z2ggUmVhZENQVVByb2ZpbGUgdXNlcyBhbgorIyBpbmRlcGVuZGVudCBpbXBs ZW1lbnRhdGlvbi4KK3N1YiBGaXhDYWxsZXJBZGRyZXNzZXMgeworICBteSAkc3RhY2sgPSBzaGlm dDsKKyAgIyAtLXJhdy9odHRwOiBBbHdheXMgc3VidHJhY3Qgb25lIGZyb20gcGMncywgYmVjYXVz ZSBQcmludFN5bWJvbGl6ZWRQcm9maWxlKCkKKyAgIyBkdW1wcyB1bmFkanVzdGVkIHByb2ZpbGVz LgorICB7CisgICAgJHN0YWNrID1+IC8oXHMpLzsKKyAgICBteSAkZGVsaW1pdGVyID0gJDE7Cisg ICAgbXkgQGFkZHJzID0gc3BsaXQoJyAnLCAkc3RhY2spOworICAgIG15IEBmaXhlZGFkZHJzOwor ICAgICQjZml4ZWRhZGRycyA9ICQjYWRkcnM7CisgICAgaWYgKCQjYWRkcnMgPj0gMCkgeworICAg ICAgJGZpeGVkYWRkcnNbMF0gPSAkYWRkcnNbMF07CisgICAgfQorICAgIGZvciAobXkgJGkgPSAx OyAkaSA8PSAkI2FkZHJzOyAkaSsrKSB7CisgICAgICAkZml4ZWRhZGRyc1skaV0gPSBBZGRyZXNz U3ViKCRhZGRyc1skaV0sICIweDEiKTsKKyAgICB9CisgICAgcmV0dXJuIGpvaW4gJGRlbGltaXRl ciwgQGZpeGVkYWRkcnM7CisgIH0KK30KKworIyBDUFUgcHJvZmlsZSByZWFkZXIKK3N1YiBSZWFk Q1BVUHJvZmlsZSB7CisgIG15ICRwcm9nID0gc2hpZnQ7CisgIG15ICRmbmFtZSA9IHNoaWZ0OyAg ICAgICAjIGp1c3QgdXNlZCBmb3IgbG9nZ2luZworICBsb2NhbCAqUFJPRklMRSA9IHNoaWZ0Owor ICBteSAkdmVyc2lvbjsKKyAgbXkgJHBlcmlvZDsKKyAgbXkgJGk7CisgIG15ICRwcm9maWxlID0g e307CisgIG15ICRwY3MgPSB7fTsKKworICAjIFBhcnNlIHN0cmluZyBpbnRvIGFycmF5IG9mIHNs b3RzLgorICBteSAkc2xvdHMgPSBDcHVQcm9maWxlU3RyZWFtLT5uZXcoKlBST0ZJTEUsICRmbmFt ZSk7CisKKyAgIyBSZWFkIGhlYWRlci4gIFRoZSBjdXJyZW50IGhlYWRlciB2ZXJzaW9uIGlzIGEg NS1lbGVtZW50IHN0cnVjdHVyZQorICAjIGNvbnRhaW5pbmc6CisgICMgICAwOiBoZWFkZXIgY291 bnQgKGFsd2F5cyAwKQorICAjICAgMTogaGVhZGVyICJ3b3JkcyIgKGFmdGVyIHRoaXMgb25lOiAz KQorICAjICAgMjogZm9ybWF0IHZlcnNpb24gKDApCisgICMgICAzOiBzYW1wbGluZyBwZXJpb2Qg KHVzZWMpCisgICMgICA0OiB1bnVzZWQgcGFkZGluZyAoYWx3YXlzIDApCisgIGlmICgkc2xvdHMt PmdldCgwKSAhPSAwICkgeworICAgIGVycm9yKCIkZm5hbWU6IG5vdCBhIHByb2ZpbGUgZmlsZSwg b3Igb2xkIGZvcm1hdCBwcm9maWxlIGZpbGVcbiIpOworICB9CisgICRpID0gMiArICRzbG90cy0+ Z2V0KDEpOworICAkdmVyc2lvbiA9ICRzbG90cy0+Z2V0KDIpOworICAkcGVyaW9kID0gJHNsb3Rz LT5nZXQoMyk7CisgICMgRG8gc29tZSBzYW5pdHkgY2hlY2tpbmcgb24gdGhlc2UgaGVhZGVyIHZh bHVlcy4KKyAgaWYgKCR2ZXJzaW9uID4gKDIqKjMyKSB8fCAkcGVyaW9kID4gKDIqKjMyKSB8fCAk aSA+ICgyKiozMikgfHwgJGkgPCA1KSB7CisgICAgZXJyb3IoIiRmbmFtZTogbm90IGEgcHJvZmls ZSBmaWxlLCBvciBjb3JydXB0ZWQgcHJvZmlsZSBmaWxlXG4iKTsKKyAgfQorCisgICMgUGFyc2Ug cHJvZmlsZQorICB3aGlsZSAoJHNsb3RzLT5nZXQoJGkpICE9IC0xKSB7CisgICAgbXkgJG4gPSAk c2xvdHMtPmdldCgkaSsrKTsKKyAgICBteSAkZCA9ICRzbG90cy0+Z2V0KCRpKyspOworICAgIGlm ICgkZCA+ICgyKioxNikpIHsgICMgVE9ETyhjc2lsdmVycyk6IHdoYXQncyBhIHJlYXNvbmFibGUg bWF4LXN0YWNrLWRlcHRoPworICAgICAgbXkgJGFkZHIgPSBzcHJpbnRmKCIwJW8iLCAkaSAqICgk YWRkcmVzc19sZW5ndGggPT0gOCA/IDQgOiA4KSk7CisgICAgICBwcmludCBTVERFUlIgIkF0IGlu ZGV4ICRpIChhZGRyZXNzICRhZGRyKTpcbiI7CisgICAgICBlcnJvcigiJGZuYW1lOiBzdGFjayB0 cmFjZSBkZXB0aCA+PSAyKiozMlxuIik7CisgICAgfQorICAgIGlmICgkc2xvdHMtPmdldCgkaSkg PT0gMCkgeworICAgICAgIyBFbmQgb2YgcHJvZmlsZSBkYXRhIG1hcmtlcgorICAgICAgJGkgKz0g JGQ7CisgICAgICBsYXN0OworICAgIH0KKworICAgICMgTWFrZSBrZXkgb3V0IG9mIHRoZSBzdGFj ayBlbnRyaWVzCisgICAgbXkgQGsgPSAoKTsKKyAgICBmb3IgKG15ICRqID0gMDsgJGogPCAkZDsg JGorKykgeworICAgICAgbXkgJHBjID0gJHNsb3RzLT5nZXQoJGkrJGopOworICAgICAgIyBTdWJ0 cmFjdCBvbmUgZnJvbSBjYWxsZXIgcGMgc28gd2UgbWFwIGJhY2sgdG8gY2FsbCBpbnN0ci4KKyAg ICAgICRwYy0tOworICAgICAgJHBjID0gc3ByaW50ZigiJTAqeCIsICRhZGRyZXNzX2xlbmd0aCwg JHBjKTsKKyAgICAgICRwY3MtPnskcGN9ID0gMTsKKyAgICAgIHB1c2ggQGssICRwYzsKKyAgICB9 CisKKyAgICBBZGRFbnRyeSgkcHJvZmlsZSwgKGpvaW4gIlxuIiwgQGspLCAkbik7CisgICAgJGkg Kz0gJGQ7CisgIH0KKworICAjIFBhcnNlIG1hcAorICBteSAkbWFwID0gJyc7CisgIHNlZWsoUFJP RklMRSwgJGkgKiA0LCAwKTsKKyAgcmVhZChQUk9GSUxFLCAkbWFwLCAoc3RhdCBQUk9GSUxFKVs3 XSk7CisKKyAgbXkgJHIgPSB7fTsKKyAgJHItPnt2ZXJzaW9ufSA9ICR2ZXJzaW9uOworICAkci0+ e3BlcmlvZH0gPSAkcGVyaW9kOworICAkci0+e3Byb2ZpbGV9ID0gJHByb2ZpbGU7CisgICRyLT57 bGlic30gPSBQYXJzZUxpYnJhcmllcygkcHJvZywgJG1hcCwgJHBjcyk7CisgICRyLT57cGNzfSA9 ICRwY3M7CisKKyAgcmV0dXJuICRyOworfQorCitzdWIgSGVhcFByb2ZpbGVJbmRleCB7CisgIG15 ICRpbmRleCA9IDE7CisgIGlmICgkbWFpbjo6b3B0X2ludXNlX3NwYWNlKSB7CisgICAgJGluZGV4 ID0gMTsKKyAgfSBlbHNpZiAoJG1haW46Om9wdF9pbnVzZV9vYmplY3RzKSB7CisgICAgJGluZGV4 ID0gMDsKKyAgfSBlbHNpZiAoJG1haW46Om9wdF9hbGxvY19zcGFjZSkgeworICAgICRpbmRleCA9 IDM7CisgIH0gZWxzaWYgKCRtYWluOjpvcHRfYWxsb2Nfb2JqZWN0cykgeworICAgICRpbmRleCA9 IDI7CisgIH0KKyAgcmV0dXJuICRpbmRleDsKK30KKworc3ViIFJlYWRNYXBwZWRMaWJyYXJpZXMg eworICBteSAkZmggPSBzaGlmdDsKKyAgbXkgJG1hcCA9ICIiOworICAjIFJlYWQgdGhlIC9wcm9j L3NlbGYvbWFwcyBkYXRhCisgIHdoaWxlICg8JGZoPikgeworICAgIHMvXHIvL2c7ICAgICAgICAg IyB0dXJuIHdpbmRvd3MtbG9va2luZyBsaW5lcyBpbnRvIHVuaXgtbG9va2luZyBsaW5lcworICAg ICRtYXAgLj0gJF87CisgIH0KKyAgcmV0dXJuICRtYXA7Cit9CisKK3N1YiBSZWFkTWVtb3J5TWFw IHsKKyAgbXkgJGZoID0gc2hpZnQ7CisgIG15ICRtYXAgPSAiIjsKKyAgIyBSZWFkIC9wcm9jL3Nl bGYvbWFwcyBkYXRhIGFzIGZvcm1hdHRlZCBieSBEdW1wQWRkcmVzc01hcCgpCisgIG15ICRidWls ZHZhciA9ICIiOworICB3aGlsZSAoPFBST0ZJTEU+KSB7CisgICAgcy9cci8vZzsgICAgICAgICAj IHR1cm4gd2luZG93cy1sb29raW5nIGxpbmVzIGludG8gdW5peC1sb29raW5nIGxpbmVzCisgICAg IyBQYXJzZSAiYnVpbGQ9PGRpcj4iIHNwZWNpZmljYXRpb24gaWYgc3VwcGxpZWQKKyAgICBpZiAo bS9eXHMqYnVpbGQ9KC4qKVxuLykgeworICAgICAgJGJ1aWxkdmFyID0gJDE7CisgICAgfQorCisg ICAgIyBFeHBhbmQgIiRidWlsZCIgdmFyaWFibGUgaWYgYXZhaWxhYmxlCisgICAgJF8gPX4gcy9c JGJ1aWxkXGIvJGJ1aWxkdmFyL2c7CisKKyAgICAkbWFwIC49ICRfOworICB9CisgIHJldHVybiAk bWFwOworfQorCitzdWIgQWRqdXN0U2FtcGxlcyB7CisgIG15ICgkc2FtcGxlX2FkanVzdG1lbnQs ICRzYW1wbGluZ19hbGdvcml0aG0sICRuMSwgJHMxLCAkbjIsICRzMikgPSBAXzsKKyAgaWYgKCRz YW1wbGVfYWRqdXN0bWVudCkgeworICAgIGlmICgkc2FtcGxpbmdfYWxnb3JpdGhtID09IDIpIHsK KyAgICAgICMgUmVtb3RlLWhlYXAgdmVyc2lvbiAyCisgICAgICAjIFRoZSBzYW1wbGluZyBmcmVx dWVuY3kgaXMgdGhlIHJhdGUgb2YgYSBQb2lzc29uIHByb2Nlc3MuCisgICAgICAjIFRoaXMgbWVh bnMgdGhhdCB0aGUgcHJvYmFiaWxpdHkgb2Ygc2FtcGxpbmcgYW4gYWxsb2NhdGlvbiBvZgorICAg ICAgIyBzaXplIFggd2l0aCBzYW1wbGluZyByYXRlIFkgaXMgMSAtIGV4cCgtWC9ZKQorICAgICAg aWYgKCRuMSAhPSAwKSB7CisgICAgICAgIG15ICRyYXRpbyA9ICgoJHMxKjEuMCkvJG4xKS8oJHNh bXBsZV9hZGp1c3RtZW50KTsKKyAgICAgICAgbXkgJHNjYWxlX2ZhY3RvciA9IDEvKDEgLSBleHAo LSRyYXRpbykpOworICAgICAgICAkbjEgKj0gJHNjYWxlX2ZhY3RvcjsKKyAgICAgICAgJHMxICo9 ICRzY2FsZV9mYWN0b3I7CisgICAgICB9CisgICAgICBpZiAoJG4yICE9IDApIHsKKyAgICAgICAg bXkgJHJhdGlvID0gKCgkczIqMS4wKS8kbjIpLygkc2FtcGxlX2FkanVzdG1lbnQpOworICAgICAg ICBteSAkc2NhbGVfZmFjdG9yID0gMS8oMSAtIGV4cCgtJHJhdGlvKSk7CisgICAgICAgICRuMiAq PSAkc2NhbGVfZmFjdG9yOworICAgICAgICAkczIgKj0gJHNjYWxlX2ZhY3RvcjsKKyAgICAgIH0K KyAgICB9IGVsc2UgeworICAgICAgIyBSZW1vdGUtaGVhcCB2ZXJzaW9uIDEKKyAgICAgIG15ICRy YXRpbzsKKyAgICAgICRyYXRpbyA9ICgoJHMxKjEuMCkvJG4xKS8oJHNhbXBsZV9hZGp1c3RtZW50 KTsKKyAgICAgIGlmICgkcmF0aW8gPCAxKSB7CisgICAgICAgICRuMSAvPSAkcmF0aW87CisgICAg ICAgICRzMSAvPSAkcmF0aW87CisgICAgICB9CisgICAgICAkcmF0aW8gPSAoKCRzMioxLjApLyRu MikvKCRzYW1wbGVfYWRqdXN0bWVudCk7CisgICAgICBpZiAoJHJhdGlvIDwgMSkgeworICAgICAg ICAkbjIgLz0gJHJhdGlvOworICAgICAgICAkczIgLz0gJHJhdGlvOworICAgICAgfQorICAgIH0K KyAgfQorICByZXR1cm4gKCRuMSwgJHMxLCAkbjIsICRzMik7Cit9CisKK3N1YiBSZWFkSGVhcFBy b2ZpbGUgeworICBteSAkcHJvZyA9IHNoaWZ0OworICBsb2NhbCAqUFJPRklMRSA9IHNoaWZ0Owor ICBteSAkaGVhZGVyID0gc2hpZnQ7CisKKyAgbXkgJGluZGV4ID0gSGVhcFByb2ZpbGVJbmRleCgp OworCisgICMgRmluZCB0aGUgdHlwZSBvZiB0aGlzIHByb2ZpbGUuICBUaGUgaGVhZGVyIGxpbmUg bG9va3MgbGlrZToKKyAgIyAgICBoZWFwIHByb2ZpbGU6ICAgMTI0NjogIDg4MDA3NDQgWyAgMTI0 NjogIDg4MDA3NDRdIEAgPGhlYXAtdXJsPi8yNjYwNTMKKyAgIyBUaGVyZSBhcmUgdHdvIHBhaXJz IDxjb3VudDogc2l6ZT4sIHRoZSBmaXJzdCBpbnVzZSBvYmplY3RzL3NwYWNlLCBhbmQgdGhlCisg ICMgc2Vjb25kIGFsbG9jYXRlZCBvYmplY3RzL3NwYWNlLiAgVGhpcyBpcyBmb2xsb3dlZCBvcHRp b25hbGx5IGJ5IGEgcHJvZmlsZQorICAjIHR5cGUsIGFuZCBpZiB0aGF0IGlzIHByZXNlbnQsIG9w dGlvbmFsbHkgYnkgYSBzYW1wbGluZyBmcmVxdWVuY3kuCisgICMgRm9yIHJlbW90ZSBoZWFwIHBy b2ZpbGVzICh2MSk6CisgICMgVGhlIGludGVycHJldGF0aW9uIG9mIHRoZSBzYW1wbGluZyBmcmVx dWVuY3kgaXMgdGhhdCB0aGUgcHJvZmlsZXIsIGZvcgorICAjIGVhY2ggc2FtcGxlLCBjYWxjdWxh dGVzIGEgdW5pZm9ybWx5IGRpc3RyaWJ1dGVkIHJhbmRvbSBpbnRlZ2VyIGxlc3MgdGhhbgorICAj IHRoZSBnaXZlbiB2YWx1ZSwgYW5kIHJlY29yZHMgdGhlIG5leHQgc2FtcGxlIGFmdGVyIHRoYXQg bWFueSBieXRlcyBoYXZlCisgICMgYmVlbiBhbGxvY2F0ZWQuICBUaGVyZWZvcmUsIHRoZSBleHBl Y3RlZCBzYW1wbGUgaW50ZXJ2YWwgaXMgaGFsZiBvZiB0aGUKKyAgIyBnaXZlbiBmcmVxdWVuY3ku ICBCeSBkZWZhdWx0LCBpZiBub3Qgc3BlY2lmaWVkLCB0aGUgZXhwZWN0ZWQgc2FtcGxlCisgICMg aW50ZXJ2YWwgaXMgMTI4S0IuICBPbmx5IHJlbW90ZS1oZWFwLXBhZ2UgcHJvZmlsZXMgYXJlIGFk anVzdGVkIGZvcgorICAjIHNhbXBsZSBzaXplLgorICAjIEZvciByZW1vdGUgaGVhcCBwcm9maWxl cyAodjIpOgorICAjIFRoZSBzYW1wbGluZyBmcmVxdWVuY3kgaXMgdGhlIHJhdGUgb2YgYSBQb2lz c29uIHByb2Nlc3MuIFRoaXMgbWVhbnMgdGhhdAorICAjIHRoZSBwcm9iYWJpbGl0eSBvZiBzYW1w bGluZyBhbiBhbGxvY2F0aW9uIG9mIHNpemUgWCB3aXRoIHNhbXBsaW5nIHJhdGUgWQorICAjIGlz IDEgLSBleHAoLVgvWSkKKyAgIyBGb3IgdmVyc2lvbiAyLCBhIHR5cGljYWwgaGVhZGVyIGxpbmUg bWlnaHQgbG9vayBsaWtlIHRoaXM6CisgICMgaGVhcCBwcm9maWxlOiAgIDE5MjI6IDEyNzc5MjM2 MCBbICAxOTIyOiAxMjc3OTIzNjBdIEAgPGhlYXAtdXJsPl92Mi81MjQyODgKKyAgIyB0aGUgdHJh aWxpbmcgbnVtYmVyICg1MjQyODgpIGlzIHRoZSBzYW1wbGluZyByYXRlLiAoVmVyc2lvbiAxIHNo b3dlZAorICAjIGRvdWJsZSB0aGUgJ3JhdGUnIGhlcmUpCisgIG15ICRzYW1wbGluZ19hbGdvcml0 aG0gPSAwOworICBteSAkc2FtcGxlX2FkanVzdG1lbnQgPSAwOworICBjaG9tcCgkaGVhZGVyKTsK KyAgbXkgJHR5cGUgPSAidW5rbm93biI7CisgIGlmICgkaGVhZGVyID1+IG0iXmhlYXAgcHJvZmls ZTpccyooXGQrKTpccysoXGQrKVxzK1xbXHMqKFxkKyk6XHMrKFxkKylcXShccypAXHMqKFteL10q KSgvKFxkKykpPyk/IikgeworICAgIGlmIChkZWZpbmVkKCQ2KSAmJiAoJDYgbmUgJycpKSB7Cisg ICAgICAkdHlwZSA9ICQ2OworICAgICAgbXkgJHNhbXBsZV9wZXJpb2QgPSAkODsKKyAgICAgICMg JHR5cGUgaXMgImhlYXBwcm9maWxlIiBmb3IgcHJvZmlsZXMgZ2VuZXJhdGVkIGJ5IHRoZQorICAg ICAgIyBoZWFwLXByb2ZpbGVyLCBhbmQgZWl0aGVyICJoZWFwIiBvciAiaGVhcF92MiIgZm9yIHBy b2ZpbGVzCisgICAgICAjIGdlbmVyYXRlZCBieSBzYW1wbGluZyBkaXJlY3RseSB3aXRoaW4gdGNt YWxsb2MuICBJdCBjYW4gYWxzbworICAgICAgIyBiZSAiZ3Jvd3RoIiBmb3IgaGVhcC1ncm93dGgg cHJvZmlsZXMuICBUaGUgZmlyc3QgaXMgdHlwaWNhbGx5CisgICAgICAjIGZvdW5kIGZvciBwcm9m aWxlcyBnZW5lcmF0ZWQgbG9jYWxseSwgYW5kIHRoZSBvdGhlcnMgZm9yCisgICAgICAjIHJlbW90 ZSBwcm9maWxlcy4KKyAgICAgIGlmICgoJHR5cGUgZXEgImhlYXBwcm9maWxlIikgfHwgKCR0eXBl ICF+IC9oZWFwLykgKSB7CisgICAgICAgICMgTm8gbmVlZCB0byBhZGp1c3QgZm9yIHRoZSBzYW1w bGluZyByYXRlIHdpdGggaGVhcC1wcm9maWxlci1kZXJpdmVkIGRhdGEKKyAgICAgICAgJHNhbXBs aW5nX2FsZ29yaXRobSA9IDA7CisgICAgICB9IGVsc2lmICgkdHlwZSA9fiAvX3YyLykgeworICAg ICAgICAkc2FtcGxpbmdfYWxnb3JpdGhtID0gMjsgICAgICMgdmVyc2lvbiAyIHNhbXBsaW5nCisg ICAgICAgIGlmIChkZWZpbmVkKCRzYW1wbGVfcGVyaW9kKSAmJiAoJHNhbXBsZV9wZXJpb2QgbmUg JycpKSB7CisgICAgICAgICAgJHNhbXBsZV9hZGp1c3RtZW50ID0gaW50KCRzYW1wbGVfcGVyaW9k KTsKKyAgICAgICAgfQorICAgICAgfSBlbHNlIHsKKyAgICAgICAgJHNhbXBsaW5nX2FsZ29yaXRo bSA9IDE7ICAgICAjIHZlcnNpb24gMSBzYW1wbGluZworICAgICAgICBpZiAoZGVmaW5lZCgkc2Ft cGxlX3BlcmlvZCkgJiYgKCRzYW1wbGVfcGVyaW9kIG5lICcnKSkgeworICAgICAgICAgICRzYW1w bGVfYWRqdXN0bWVudCA9IGludCgkc2FtcGxlX3BlcmlvZCkvMjsKKyAgICAgICAgfQorICAgICAg fQorICAgIH0gZWxzZSB7CisgICAgICAjIFdlIGRldGVjdCB3aGV0aGVyIG9yIG5vdCB0aGlzIGlz IGEgcmVtb3RlLWhlYXAgcHJvZmlsZSBieSBjaGVja2luZworICAgICAgIyB0aGF0IHRoZSB0b3Rh bC1hbGxvY2F0ZWQgc3RhdHMgKCRuMiwkczIpIGFyZSBleGFjdGx5IHRoZQorICAgICAgIyBzYW1l IGFzIHRoZSBpbi11c2Ugc3RhdHMgKCRuMSwkczEpLiAgSXQgaXMgcmVtb3RlbHkgY29uY2VpdmFi bGUKKyAgICAgICMgdGhhdCBhIG5vbi1yZW1vdGUtaGVhcCBwcm9maWxlIG1heSBwYXNzIHRoaXMg Y2hlY2ssIGJ1dCBpdCBpcyBoYXJkCisgICAgICAjIHRvIGltYWdpbmUgaG93IHRoYXQgY291bGQg aGFwcGVuLgorICAgICAgIyBJbiB0aGlzIGNhc2UgaXQncyBzbyBvbGQgaXQncyBndWFyYW50ZWVk IHRvIGJlIHJlbW90ZS1oZWFwIHZlcnNpb24gMS4KKyAgICAgIG15ICgkbjEsICRzMSwgJG4yLCAk czIpID0gKCQxLCAkMiwgJDMsICQ0KTsKKyAgICAgIGlmICgoJG4xID09ICRuMikgJiYgKCRzMSA9 PSAkczIpKSB7CisgICAgICAgICMgVGhpcyBpcyBsaWtlbHkgdG8gYmUgYSByZW1vdGUtaGVhcCBi YXNlZCBzYW1wbGUgcHJvZmlsZQorICAgICAgICAkc2FtcGxpbmdfYWxnb3JpdGhtID0gMTsKKyAg ICAgIH0KKyAgICB9CisgIH0KKworICBpZiAoJHNhbXBsaW5nX2FsZ29yaXRobSA+IDApIHsKKyAg ICAjIEZvciByZW1vdGUtaGVhcCBnZW5lcmF0ZWQgcHJvZmlsZXMsIGFkanVzdCB0aGUgY291bnRz IGFuZCBzaXplcyB0bworICAgICMgYWNjb3VudCBmb3IgdGhlIHNhbXBsZSByYXRlICh3ZSBzYW1w bGUgb25jZSBldmVyeSAxMjhLQiBieSBkZWZhdWx0KS4KKyAgICBpZiAoJHNhbXBsZV9hZGp1c3Rt ZW50ID09IDApIHsKKyAgICAgICMgVHVybiBvbiBwcm9maWxlIGFkanVzdG1lbnQuCisgICAgICAk c2FtcGxlX2FkanVzdG1lbnQgPSAxMjgqMTAyNDsKKyAgICAgIHByaW50IFNUREVSUiAiQWRqdXN0 aW5nIGhlYXAgcHJvZmlsZXMgZm9yIDEtaW4tMTI4S0Igc2FtcGxpbmcgcmF0ZVxuIjsKKyAgICB9 IGVsc2UgeworICAgICAgcHJpbnRmIFNUREVSUiAoIkFkanVzdGluZyBoZWFwIHByb2ZpbGVzIGZv ciAxLWluLSVkIHNhbXBsaW5nIHJhdGVcbiIsCisgICAgICAgICAgICAgICAgICAgICAkc2FtcGxl X2FkanVzdG1lbnQpOworICAgIH0KKyAgICBpZiAoJHNhbXBsaW5nX2FsZ29yaXRobSA+IDEpIHsK KyAgICAgICMgV2UgZG9uJ3QgYm90aGVyIHByaW50aW5nIGFueXRoaW5nIGZvciB0aGUgb3JpZ2lu YWwgdmVyc2lvbiAodmVyc2lvbiAxKQorICAgICAgcHJpbnRmIFNUREVSUiAiSGVhcCB2ZXJzaW9u ICRzYW1wbGluZ19hbGdvcml0aG1cbiI7CisgICAgfQorICB9CisKKyAgbXkgJHByb2ZpbGUgPSB7 fTsKKyAgbXkgJHBjcyA9IHt9OworICBteSAkbWFwID0gIiI7CisKKyAgd2hpbGUgKDxQUk9GSUxF PikgeworICAgIHMvXHIvL2c7ICAgICAgICAgIyB0dXJuIHdpbmRvd3MtbG9va2luZyBsaW5lcyBp bnRvIHVuaXgtbG9va2luZyBsaW5lcworICAgIGlmICgvXk1BUFBFRF9MSUJSQVJJRVM6Lykgewor ICAgICAgJG1hcCAuPSBSZWFkTWFwcGVkTGlicmFyaWVzKCpQUk9GSUxFKTsKKyAgICAgIGxhc3Q7 CisgICAgfQorCisgICAgaWYgKC9eLS0tIE1lbW9yeSBtYXA6LykgeworICAgICAgJG1hcCAuPSBS ZWFkTWVtb3J5TWFwKCpQUk9GSUxFKTsKKyAgICAgIGxhc3Q7CisgICAgfQorCisgICAgIyBSZWFk IGVudHJ5IG9mIHRoZSBmb3JtOgorICAgICMgIDxjb3VudDE+OiA8Ynl0ZXMxPiBbPGNvdW50Mj46 IDxieXRlczI+XSBAIGExIGEyIGEzIC4uLiBhbgorICAgIHMvXlxzKi8vOworICAgIHMvXHMqJC8v OworICAgIGlmIChtL15ccyooXGQrKTpccysoXGQrKVxzK1xbXHMqKFxkKyk6XHMrKFxkKylcXVxz K0BccysoLiopJC8pIHsKKyAgICAgIG15ICRzdGFjayA9ICQ1OworICAgICAgbXkgKCRuMSwgJHMx LCAkbjIsICRzMikgPSAoJDEsICQyLCAkMywgJDQpOworICAgICAgbXkgQGNvdW50cyA9IEFkanVz dFNhbXBsZXMoJHNhbXBsZV9hZGp1c3RtZW50LCAkc2FtcGxpbmdfYWxnb3JpdGhtLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJG4xLCAkczEsICRuMiwgJHMyKTsKKyAgICAgIEFk ZEVudHJpZXMoJHByb2ZpbGUsICRwY3MsIEZpeENhbGxlckFkZHJlc3Nlcygkc3RhY2spLCAkY291 bnRzWyRpbmRleF0pOworICAgIH0KKyAgfQorCisgIG15ICRyID0ge307CisgICRyLT57dmVyc2lv bn0gPSAiaGVhcCI7CisgICRyLT57cGVyaW9kfSA9IDE7CisgICRyLT57cHJvZmlsZX0gPSAkcHJv ZmlsZTsKKyAgJHItPntsaWJzfSA9IFBhcnNlTGlicmFyaWVzKCRwcm9nLCAkbWFwLCAkcGNzKTsK KyAgJHItPntwY3N9ID0gJHBjczsKKyAgcmV0dXJuICRyOworfQorCitzdWIgUmVhZFRocmVhZGVk SGVhcFByb2ZpbGUgeworICBteSAoJHByb2csICRmbmFtZSwgJGhlYWRlcikgPSBAXzsKKworICBt eSAkaW5kZXggPSBIZWFwUHJvZmlsZUluZGV4KCk7CisgIG15ICRzYW1wbGluZ19hbGdvcml0aG0g PSAwOworICBteSAkc2FtcGxlX2FkanVzdG1lbnQgPSAwOworICBjaG9tcCgkaGVhZGVyKTsKKyAg bXkgJHR5cGUgPSAidW5rbm93biI7CisgICMgQXNzdW1pbmcgYSB2ZXJ5IHNwZWNpZmljIHR5cGUg b2YgaGVhZGVyIGZvciBub3cuCisgIGlmICgkaGVhZGVyID1+IG0iXmhlYXBfdjIvKFxkKykiKSB7 CisgICAgJHR5cGUgPSAiX3YyIjsKKyAgICAkc2FtcGxpbmdfYWxnb3JpdGhtID0gMjsKKyAgICAk c2FtcGxlX2FkanVzdG1lbnQgPSBpbnQoJDEpOworICB9CisgIGlmICgkdHlwZSBuZSAiX3YyIiB8 fCAhZGVmaW5lZCgkc2FtcGxlX2FkanVzdG1lbnQpKSB7CisgICAgZGllICJUaHJlYWRlZCBoZWFw IHByb2ZpbGVzIHJlcXVpcmUgdjIgc2FtcGxpbmcgd2l0aCBhIHNhbXBsZSByYXRlXG4iOworICB9 CisKKyAgbXkgJHByb2ZpbGUgPSB7fTsKKyAgbXkgJHRocmVhZF9wcm9maWxlcyA9IHt9OworICBt eSAkcGNzID0ge307CisgIG15ICRtYXAgPSAiIjsKKyAgbXkgJHN0YWNrID0gIiI7CisKKyAgd2hp bGUgKDxQUk9GSUxFPikgeworICAgIHMvXHIvL2c7CisgICAgaWYgKC9eTUFQUEVEX0xJQlJBUklF UzovKSB7CisgICAgICAkbWFwIC49IFJlYWRNYXBwZWRMaWJyYXJpZXMoKlBST0ZJTEUpOworICAg ICAgbGFzdDsKKyAgICB9CisKKyAgICBpZiAoL14tLS0gTWVtb3J5IG1hcDovKSB7CisgICAgICAk bWFwIC49IFJlYWRNZW1vcnlNYXAoKlBST0ZJTEUpOworICAgICAgbGFzdDsKKyAgICB9CisKKyAg ICAjIFJlYWQgZW50cnkgb2YgdGhlIGZvcm06CisgICAgIyBAIGExIGEyIC4uLiBhbgorICAgICMg ICB0KjogPGNvdW50MT46IDxieXRlczE+IFs8Y291bnQyPjogPGJ5dGVzMj5dCisgICAgIyAgIHQx OiA8Y291bnQxPjogPGJ5dGVzMT4gWzxjb3VudDI+OiA8Ynl0ZXMyPl0KKyAgICAjICAgICAuLi4K KyAgICAjICAgdG46IDxjb3VudDE+OiA8Ynl0ZXMxPiBbPGNvdW50Mj46IDxieXRlczI+XQorICAg IHMvXlxzKi8vOworICAgIHMvXHMqJC8vOworICAgIGlmIChtL15AXHMrKC4qKSQvKSB7CisgICAg ICAkc3RhY2sgPSAkMTsKKyAgICB9IGVsc2lmIChtL15ccyoodChcKnxcZCspKTpccysoXGQrKTpc cysoXGQrKVxzK1xbXHMqKFxkKyk6XHMrKFxkKylcXSQvKSB7CisgICAgICBpZiAoJHN0YWNrIGVx ICIiKSB7CisgICAgICAgICMgU3RpbGwgaW4gdGhlIGhlYWRlciwgc28gdGhpcyBpcyBqdXN0IGEg cGVyLXRocmVhZCBzdW1tYXJ5LgorICAgICAgICBuZXh0OworICAgICAgfQorICAgICAgbXkgJHRo cmVhZCA9ICQyOworICAgICAgbXkgKCRuMSwgJHMxLCAkbjIsICRzMikgPSAoJDMsICQ0LCAkNSwg JDYpOworICAgICAgbXkgQGNvdW50cyA9IEFkanVzdFNhbXBsZXMoJHNhbXBsZV9hZGp1c3RtZW50 LCAkc2FtcGxpbmdfYWxnb3JpdGhtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg JG4xLCAkczEsICRuMiwgJHMyKTsKKyAgICAgIGlmICgkdGhyZWFkIGVxICIqIikgeworICAgICAg ICBBZGRFbnRyaWVzKCRwcm9maWxlLCAkcGNzLCBGaXhDYWxsZXJBZGRyZXNzZXMoJHN0YWNrKSwg JGNvdW50c1skaW5kZXhdKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGlmICghZXhpc3RzKCR0 aHJlYWRfcHJvZmlsZXMtPnskdGhyZWFkfSkpIHsKKyAgICAgICAgICAkdGhyZWFkX3Byb2ZpbGVz LT57JHRocmVhZH0gPSB7fTsKKyAgICAgICAgfQorICAgICAgICBBZGRFbnRyaWVzKCR0aHJlYWRf cHJvZmlsZXMtPnskdGhyZWFkfSwgJHBjcywKKyAgICAgICAgICAgICAgICAgICBGaXhDYWxsZXJB ZGRyZXNzZXMoJHN0YWNrKSwgJGNvdW50c1skaW5kZXhdKTsKKyAgICAgIH0KKyAgICB9CisgIH0K KworICBteSAkciA9IHt9OworICAkci0+e3ZlcnNpb259ID0gImhlYXAiOworICAkci0+e3Blcmlv ZH0gPSAxOworICAkci0+e3Byb2ZpbGV9ID0gJHByb2ZpbGU7CisgICRyLT57dGhyZWFkc30gPSAk dGhyZWFkX3Byb2ZpbGVzOworICAkci0+e2xpYnN9ID0gUGFyc2VMaWJyYXJpZXMoJHByb2csICRt YXAsICRwY3MpOworICAkci0+e3Bjc30gPSAkcGNzOworICByZXR1cm4gJHI7Cit9CisKK3N1YiBS ZWFkU3luY2hQcm9maWxlIHsKKyAgbXkgJHByb2cgPSBzaGlmdDsKKyAgbG9jYWwgKlBST0ZJTEUg PSBzaGlmdDsKKyAgbXkgJGhlYWRlciA9IHNoaWZ0OworCisgIG15ICRtYXAgPSAnJzsKKyAgbXkg JHByb2ZpbGUgPSB7fTsKKyAgbXkgJHBjcyA9IHt9OworICBteSAkc2FtcGxpbmdfcGVyaW9kID0g MTsKKyAgbXkgJGN5Y2xlc3Blcm5hbm9zZWMgPSAyLjg7ICAgIyBEZWZhdWx0IGFzc3VtcHRpb24g Zm9yIG9sZCBiaW5hcmllcworICBteSAkc2Vlbl9jbG9ja3JhdGUgPSAwOworICBteSAkbGluZTsK KworICBteSAkaW5kZXggPSAwOworICBpZiAoJG1haW46Om9wdF90b3RhbF9kZWxheSkgeworICAg ICRpbmRleCA9IDA7CisgIH0gZWxzaWYgKCRtYWluOjpvcHRfY29udGVudGlvbnMpIHsKKyAgICAk aW5kZXggPSAxOworICB9IGVsc2lmICgkbWFpbjo6b3B0X21lYW5fZGVsYXkpIHsKKyAgICAkaW5k ZXggPSAyOworICB9CisKKyAgd2hpbGUgKCAkbGluZSA9IDxQUk9GSUxFPiApIHsKKyAgICAkbGlu ZSA9fiBzL1xyLy9nOyAgICAgICMgdHVybiB3aW5kb3dzLWxvb2tpbmcgbGluZXMgaW50byB1bml4 LWxvb2tpbmcgbGluZXMKKyAgICBpZiAoICRsaW5lID1+IC9eXHMqKFxkKylccysoXGQrKSBcQFxz KiguKj8pXHMqJC8gKSB7CisgICAgICBteSAoJGN5Y2xlcywgJGNvdW50LCAkc3RhY2spID0gKCQx LCAkMiwgJDMpOworCisgICAgICAjIENvbnZlcnQgY3ljbGVzIHRvIG5hbm9zZWNvbmRzCisgICAg ICAkY3ljbGVzIC89ICRjeWNsZXNwZXJuYW5vc2VjOworCisgICAgICAjIEFkanVzdCBmb3Igc2Ft cGxpbmcgZG9uZSBieSBhcHBsaWNhdGlvbgorICAgICAgJGN5Y2xlcyAqPSAkc2FtcGxpbmdfcGVy aW9kOworICAgICAgJGNvdW50ICo9ICRzYW1wbGluZ19wZXJpb2Q7CisKKyAgICAgIG15IEB2YWx1 ZXMgPSAoJGN5Y2xlcywgJGNvdW50LCAkY3ljbGVzIC8gJGNvdW50KTsKKyAgICAgIEFkZEVudHJp ZXMoJHByb2ZpbGUsICRwY3MsIEZpeENhbGxlckFkZHJlc3Nlcygkc3RhY2spLCAkdmFsdWVzWyRp bmRleF0pOworCisgICAgfSBlbHNpZiAoICRsaW5lID1+IC9eKHNsb3cgcmVsZWFzZSkuKnRocmVh ZCBcZCsgIFxAXHMqKC4qPylccyokLyB8fAorICAgICAgICAgICAgICAkbGluZSA9fiAvXlxzKihc ZCspIFxAXHMqKC4qPylccyokLyApIHsKKyAgICAgIG15ICgkY3ljbGVzLCAkc3RhY2spID0gKCQx LCAkMik7CisgICAgICBpZiAoJGN5Y2xlcyAhfiAvXlxkKyQvKSB7CisgICAgICAgIG5leHQ7Cisg ICAgICB9CisKKyAgICAgICMgQ29udmVydCBjeWNsZXMgdG8gbmFub3NlY29uZHMKKyAgICAgICRj eWNsZXMgLz0gJGN5Y2xlc3Blcm5hbm9zZWM7CisKKyAgICAgICMgQWRqdXN0IGZvciBzYW1wbGlu ZyBkb25lIGJ5IGFwcGxpY2F0aW9uCisgICAgICAkY3ljbGVzICo9ICRzYW1wbGluZ19wZXJpb2Q7 CisKKyAgICAgIEFkZEVudHJpZXMoJHByb2ZpbGUsICRwY3MsIEZpeENhbGxlckFkZHJlc3Nlcygk c3RhY2spLCAkY3ljbGVzKTsKKworICAgIH0gZWxzaWYgKCAkbGluZSA9fiBtL14oW2Etel1bXj1d Kik9KC4qKSQvICkgeworICAgICAgbXkgKCR2YXJpYWJsZSwgJHZhbHVlKSA9ICgkMSwkMik7Cisg ICAgICBmb3IgKCR2YXJpYWJsZSwgJHZhbHVlKSB7CisgICAgICAgIHMvXlxzKy8vOworICAgICAg ICBzL1xzKyQvLzsKKyAgICAgIH0KKyAgICAgIGlmICgkdmFyaWFibGUgZXEgImN5Y2xlcy9zZWNv bmQiKSB7CisgICAgICAgICRjeWNsZXNwZXJuYW5vc2VjID0gJHZhbHVlIC8gMWU5OworICAgICAg ICAkc2Vlbl9jbG9ja3JhdGUgPSAxOworICAgICAgfSBlbHNpZiAoJHZhcmlhYmxlIGVxICJzYW1w bGluZyBwZXJpb2QiKSB7CisgICAgICAgICRzYW1wbGluZ19wZXJpb2QgPSAkdmFsdWU7CisgICAg ICB9IGVsc2lmICgkdmFyaWFibGUgZXEgIm1zIHNpbmNlIHJlc2V0IikgeworICAgICAgICAjIEN1 cnJlbnRseSBub3RoaW5nIGlzIGRvbmUgd2l0aCB0aGlzIHZhbHVlIGluIGplcHJvZgorICAgICAg ICAjIFNvIHdlIGp1c3Qgc2lsZW50bHkgaWdub3JlIGl0IGZvciBub3cKKyAgICAgIH0gZWxzaWYg KCR2YXJpYWJsZSBlcSAiZGlzY2FyZGVkIHNhbXBsZXMiKSB7CisgICAgICAgICMgQ3VycmVudGx5 IG5vdGhpbmcgaXMgZG9uZSB3aXRoIHRoaXMgdmFsdWUgaW4gamVwcm9mCisgICAgICAgICMgU28g d2UganVzdCBzaWxlbnRseSBpZ25vcmUgaXQgZm9yIG5vdworICAgICAgfSBlbHNlIHsKKyAgICAg ICAgcHJpbnRmIFNUREVSUiAoIklnbm9yaW5nIHVubmtub3duIHZhcmlhYmxlIGluIC9jb250ZW50 aW9uIG91dHB1dDogIiAuCisgICAgICAgICAgICAgICAgICAgICAgICInJXMnID0gJyVzJ1xuIiwk dmFyaWFibGUsJHZhbHVlKTsKKyAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgIyBNZW1vcnkg bWFwIGVudHJ5CisgICAgICAkbWFwIC49ICRsaW5lOworICAgIH0KKyAgfQorCisgIGlmICghJHNl ZW5fY2xvY2tyYXRlKSB7CisgICAgcHJpbnRmIFNUREVSUiAoIk5vIGN5Y2xlcy9zZWNvbmQgZW50 cnkgaW4gcHJvZmlsZTsgR3Vlc3NpbmcgJS4xZiBHSHpcbiIsCisgICAgICAgICAgICAgICAgICAg JGN5Y2xlc3Blcm5hbm9zZWMpOworICB9CisKKyAgbXkgJHIgPSB7fTsKKyAgJHItPnt2ZXJzaW9u fSA9IDA7CisgICRyLT57cGVyaW9kfSA9ICRzYW1wbGluZ19wZXJpb2Q7CisgICRyLT57cHJvZmls ZX0gPSAkcHJvZmlsZTsKKyAgJHItPntsaWJzfSA9IFBhcnNlTGlicmFyaWVzKCRwcm9nLCAkbWFw LCAkcGNzKTsKKyAgJHItPntwY3N9ID0gJHBjczsKKyAgcmV0dXJuICRyOworfQorCisjIEdpdmVu IGEgaGV4IHZhbHVlIGluIHRoZSBmb3JtICIweDFhYmNkIiBvciAiMWFiY2QiLCByZXR1cm4gZWl0 aGVyCisjICIwMDAxYWJjZCIgb3IgIjAwMDAwMDAwMDAwMWFiY2QiLCBkZXBlbmRpbmcgb24gdGhl IGN1cnJlbnQgKGdsb2JhbCkKKyMgYWRkcmVzcyBsZW5ndGguCitzdWIgSGV4RXh0ZW5kIHsKKyAg bXkgJGFkZHIgPSBzaGlmdDsKKworICAkYWRkciA9fiBzL14oMHgpPzAqLy87CisgIG15ICR6ZXJv c19uZWVkZWQgPSAkYWRkcmVzc19sZW5ndGggLSBsZW5ndGgoJGFkZHIpOworICBpZiAoJHplcm9z X25lZWRlZCA8IDApIHsKKyAgICBwcmludGYgU1RERVJSICJXYXJuaW5nOiBhZGRyZXNzICRhZGRy IGlzIGxvbmdlciB0aGFuIGFkZHJlc3MgbGVuZ3RoICRhZGRyZXNzX2xlbmd0aFxuIjsKKyAgICBy ZXR1cm4gJGFkZHI7CisgIH0KKyAgcmV0dXJuICgiMCIgeCAkemVyb3NfbmVlZGVkKSAuICRhZGRy OworfQorCisjIyMjIyBTeW1ib2wgZXh0cmFjdGlvbiAjIyMjIworCisjIEFnZ3Jlc3NpdmVseSBz ZWFyY2ggdGhlIGxpYl9wcmVmaXggdmFsdWVzIGZvciB0aGUgZ2l2ZW4gbGlicmFyeQorIyBJZiBh bGwgZWxzZSBmYWlscywganVzdCByZXR1cm4gdGhlIG5hbWUgb2YgdGhlIGxpYnJhcnkgdW5tb2Rp ZmllZC4KKyMgSWYgdGhlIGxpYl9wcmVmaXggaXMgIi9teS9wYXRoLC9vdGhlci9wYXRoIiBhbmQg JGZpbGUgaXMgIi9saWIvZGlyL215bGliLnNvIgorIyBpdCB3aWxsIHNlYXJjaCB0aGUgZm9sbG93 aW5nIGxvY2F0aW9ucyBpbiB0aGlzIG9yZGVyLCB1bnRpbCBpdCBmaW5kcyBhIGZpbGU6CisjICAg L215L3BhdGgvbGliL2Rpci9teWxpYi5zbworIyAgIC9vdGhlci9wYXRoL2xpYi9kaXIvbXlsaWIu c28KKyMgICAvbXkvcGF0aC9kaXIvbXlsaWIuc28KKyMgICAvb3RoZXIvcGF0aC9kaXIvbXlsaWIu c28KKyMgICAvbXkvcGF0aC9teWxpYi5zbworIyAgIC9vdGhlci9wYXRoL215bGliLnNvCisjICAg L2xpYi9kaXIvbXlsaWIuc28gICAgICAgICAgICAgIChyZXR1cm5lZCBhcyBsYXN0IHJlc29ydCkK K3N1YiBGaW5kTGlicmFyeSB7CisgIG15ICRmaWxlID0gc2hpZnQ7CisgIG15ICRzdWZmaXggPSAk ZmlsZTsKKworICAjIFNlYXJjaCBmb3IgdGhlIGxpYnJhcnkgYXMgZGVzY3JpYmVkIGFib3ZlCisg IGRvIHsKKyAgICBmb3JlYWNoIG15ICRwcmVmaXggKEBwcmVmaXhfbGlzdCkgeworICAgICAgbXkg JGZ1bGxwYXRoID0gJHByZWZpeCAuICRzdWZmaXg7CisgICAgICBpZiAoLWUgJGZ1bGxwYXRoKSB7 CisgICAgICAgIHJldHVybiAkZnVsbHBhdGg7CisgICAgICB9CisgICAgfQorICB9IHdoaWxlICgk c3VmZml4ID1+IHN8Xi9bXi9dKy98L3wpOworICByZXR1cm4gJGZpbGU7Cit9CisKKyMgUmV0dXJu IHBhdGggdG8gbGlicmFyeSB3aXRoIGRlYnVnZ2luZyBzeW1ib2xzLgorIyBGb3IgbGliYyBsaWJy YXJpZXMsIHRoZSBjb3B5IGluIC91c3IvbGliL2RlYnVnIGNvbnRhaW5zIGRlYnVnZ2luZyBzeW1i b2xzCitzdWIgRGVidWdnaW5nTGlicmFyeSB7CisgIG15ICRmaWxlID0gc2hpZnQ7CisgICAgICAK KyAgaWYgKCRmaWxlICF+IG18Xi98KSB7CisgICAgcmV0dXJuIHVuZGVmOworICB9CisgICAgICAK KyAgIyBGaW5kIGRlYnVnIHN5bWJvbCBmaWxlIGlmIGl0J3MgbmFtZWQgYWZ0ZXIgdGhlIGxpYnJh cnkncyBuYW1lLgorICAKKyAgaWYgKC1mICIvdXNyL2xpYi9kZWJ1ZyRmaWxlIikgeyAgICAgICAg ICAgICAgICAgCisgICAgaWYoJG1haW46Om9wdF9kZWJ1ZykgeyBwcmludCBTVERFUlIgImZvdW5k IGRlYnVnIGluZm8gZm9yICRmaWxlIGluIC91c3IvbGliL2RlYnVnJGZpbGVcbiI7IH0KKyAgICBy ZXR1cm4gIi91c3IvbGliL2RlYnVnJGZpbGUiOworICB9IGVsc2lmICgtZiAiL3Vzci9saWIvZGVi dWckZmlsZS5kZWJ1ZyIpIHsKKyAgICBpZigkbWFpbjo6b3B0X2RlYnVnKSB7IHByaW50IFNUREVS UiAiZm91bmQgZGVidWcgaW5mbyBmb3IgJGZpbGUgaW4gL3Vzci9saWIvZGVidWckZmlsZS5kZWJ1 Z1xuIjsgfQorICAgIHJldHVybiAiL3Vzci9saWIvZGVidWckZmlsZS5kZWJ1ZyI7IAorICB9CisK KyAgaWYoISRtYWluOjpvcHRfZGVidWdfc3ltc19ieV9pZCkgeworICAgIGlmKCRtYWluOjpvcHRf ZGVidWcpIHsgcHJpbnQgU1RERVJSICJubyBkZWJ1ZyBzeW1ib2xzIGZvdW5kIGZvciAkZmlsZVxu IiB9OworICAgIHJldHVybiB1bmRlZjsKKyAgfQorCisgICMgRmluZCBkZWJ1ZyBmaWxlIGlmIGl0 J3MgbmFtZWQgYWZ0ZXIgdGhlIGxpYnJhcnkncyBidWlsZCBJRC4KKyAgCisgIG15ICRyZWFkZWxm ID0gJyc7CisgIGlmICghJG1haW46OmdhdmVfdXBfb25fZWxmdXRpbHMpIHsKKyAgICAkcmVhZGVs ZiA9IHF4L2V1LXJlYWRlbGYgLW4gJHtmaWxlfS87CisgICAgaWYgKCQ/KSB7CisgICAgICBwcmlu dCBTVERFUlIgIkNhbm5vdCBydW4gZXUtcmVhZGVsZi4gVG8gdXNlIC0tZGVidWctc3ltcy1ieS1p ZCB5b3UgbXVzdCBiZSBvbiBMaW51eCwgd2l0aCBlbGZ1dGlscyBpbnN0YWxsZWQuXG4iOworICAg ICAgJG1haW46OmdhdmVfdXBfb25fZWxmdXRpbHMgPSAxOworICAgICAgcmV0dXJuIHVuZGVmOwor ICAgIH0KKyAgICBteSAkYnVpbGRJRCA9ICQxIGlmICRyZWFkZWxmID1+IC9CdWlsZCBJRDogKFtB LUZhLWYwLTldKykvczsKKyAgICBpZiAoZGVmaW5lZCAkYnVpbGRJRCAmJiBsZW5ndGggJGJ1aWxk SUQgPiAwKSB7CisgICAgICBteSAkc3ltYm9sRmlsZSA9ICcvdXNyL2xpYi9kZWJ1Zy8uYnVpbGQt aWQvJyAuIHN1YnN0cigkYnVpbGRJRCwgMCwgMikgLiAnLycgLiBzdWJzdHIoJGJ1aWxkSUQsIDIp IC4gJy5kZWJ1Zyc7CisgICAgICBpZiAoLWUgJHN5bWJvbEZpbGUpIHsKKyAgICAgICAgaWYoJG1h aW46Om9wdF9kZWJ1ZykgeyBwcmludCBTVERFUlIgImZvdW5kIGRlYnVnIHN5bWJvbCBmaWxlICRz eW1ib2xGaWxlIGZvciAkZmlsZVxuIiB9OworICAgICAgICByZXR1cm4gJHN5bWJvbEZpbGU7Cisg ICAgICB9IGVsc2UgeworICAgICAgICBpZigkbWFpbjo6b3B0X2RlYnVnKSB7IHByaW50IFNUREVS UiAibm8gZGVidWcgc3ltYm9sIGZpbGUgZm91bmQgZm9yICRmaWxlLCBidWlsZCBJRDogJGJ1aWxk SURcbiIgfTsKKyAgICAgICAgcmV0dXJuIHVuZGVmOworICAgICAgfQorICAgIH0KKyAgfQorCisg IGlmKCRtYWluOjpvcHRfZGVidWcpIHsgcHJpbnQgU1RERVJSICJubyBkZWJ1ZyBzeW1ib2xzIGZv dW5kIGZvciAkZmlsZSwgYnVpbGQgSUQgdW5rbm93blxuIiB9OworICByZXR1cm4gdW5kZWY7Cit9 CisKKworIyBQYXJzZSB0ZXh0IHNlY3Rpb24gaGVhZGVyIG9mIGEgbGlicmFyeSB1c2luZyBvYmpk dW1wCitzdWIgUGFyc2VUZXh0U2VjdGlvbkhlYWRlckZyb21PYmpkdW1wIHsKKyAgbXkgJGxpYiA9 IHNoaWZ0OworCisgIG15ICRzaXplID0gdW5kZWY7CisgIG15ICR2bWE7CisgIG15ICRmaWxlX29m ZnNldDsKKyAgIyBHZXQgb2JqZHVtcCBvdXRwdXQgZnJvbSB0aGUgbGlicmFyeSBmaWxlIHRvIGZp Z3VyZSBvdXQgaG93IHRvCisgICMgbWFwIGJldHdlZW4gbWFwcGVkIGFkZHJlc3NlcyBhbmQgYWRk cmVzc2VzIGluIHRoZSBsaWJyYXJ5LgorICBteSAkY21kID0gU2hlbGxFc2NhcGUoJG9ial90b29s X21hcHsib2JqZHVtcCJ9LCAiLWgiLCAkbGliKTsKKyAgb3BlbihPQkpEVU1QLCAiJGNtZCB8Iikg fHwgZXJyb3IoIiRjbWQ6ICQhXG4iKTsKKyAgd2hpbGUgKDxPQkpEVU1QPikgeworICAgIHMvXHIv L2c7ICAgICAgICAgIyB0dXJuIHdpbmRvd3MtbG9va2luZyBsaW5lcyBpbnRvIHVuaXgtbG9va2lu ZyBsaW5lcworICAgICMgSWR4IE5hbWUgICAgICAgICAgU2l6ZSAgICAgIFZNQSAgICAgICBMTUEg ICAgICAgRmlsZSBvZmYgIEFsZ24KKyAgICAjICAxMCAudGV4dCAgICAgICAgIDAwMTA0YjJjICA0 MjAxNTZmMCAgNDIwMTU2ZjAgIDAwMDE1NmYwICAyKio0CisgICAgIyBGb3IgNjQtYml0IG9iamVj dHMsIFZNQSBhbmQgTE1BIHdpbGwgYmUgMTYgaGV4IGRpZ2l0cywgc2l6ZSBhbmQgZmlsZQorICAg ICMgb2Zmc2V0IG1heSBzdGlsbCBiZSA4LiAgQnV0IEFkZHJlc3NTdWIgYmVsb3cgd2lsbCBzdGls bCBoYW5kbGUgdGhhdC4KKyAgICBteSBAeCA9IHNwbGl0OworICAgIGlmICgoJCN4ID49IDYpICYm ICgkeFsxXSBlcSAnLnRleHQnKSkgeworICAgICAgJHNpemUgPSAkeFsyXTsKKyAgICAgICR2bWEg PSAkeFszXTsKKyAgICAgICRmaWxlX29mZnNldCA9ICR4WzVdOworICAgICAgbGFzdDsKKyAgICB9 CisgIH0KKyAgY2xvc2UoT0JKRFVNUCk7CisKKyAgaWYgKCFkZWZpbmVkKCRzaXplKSkgeworICAg IHJldHVybiB1bmRlZjsKKyAgfQorCisgIG15ICRyID0ge307CisgICRyLT57c2l6ZX0gPSAkc2l6 ZTsKKyAgJHItPnt2bWF9ID0gJHZtYTsKKyAgJHItPntmaWxlX29mZnNldH0gPSAkZmlsZV9vZmZz ZXQ7CisKKyAgcmV0dXJuICRyOworfQorCisjIFBhcnNlIHRleHQgc2VjdGlvbiBoZWFkZXIgb2Yg YSBsaWJyYXJ5IHVzaW5nIG90b29sIChvbiBPUyBYKQorc3ViIFBhcnNlVGV4dFNlY3Rpb25IZWFk ZXJGcm9tT3Rvb2wgeworICBteSAkbGliID0gc2hpZnQ7CisKKyAgbXkgJHNpemUgPSB1bmRlZjsK KyAgbXkgJHZtYSA9IHVuZGVmOworICBteSAkZmlsZV9vZmZzZXQgPSB1bmRlZjsKKyAgIyBHZXQg b3Rvb2wgb3V0cHV0IGZyb20gdGhlIGxpYnJhcnkgZmlsZSB0byBmaWd1cmUgb3V0IGhvdyB0bwor ICAjIG1hcCBiZXR3ZWVuIG1hcHBlZCBhZGRyZXNzZXMgYW5kIGFkZHJlc3NlcyBpbiB0aGUgbGli cmFyeS4KKyAgbXkgJGNvbW1hbmQgPSBTaGVsbEVzY2FwZSgkb2JqX3Rvb2xfbWFweyJvdG9vbCJ9 LCAiLWwiLCAkbGliKTsKKyAgb3BlbihPVE9PTCwgIiRjb21tYW5kIHwiKSB8fCBlcnJvcigiJGNv bW1hbmQ6ICQhXG4iKTsKKyAgbXkgJGNtZCA9ICIiOworICBteSAkc2VjdG5hbWUgPSAiIjsKKyAg bXkgJHNlZ25hbWUgPSAiIjsKKyAgZm9yZWFjaCBteSAkbGluZSAoPE9UT09MPikgeworICAgICRs aW5lID1+IHMvXHIvL2c7ICAgICAgIyB0dXJuIHdpbmRvd3MtbG9va2luZyBsaW5lcyBpbnRvIHVu aXgtbG9va2luZyBsaW5lcworICAgICMgTG9hZCBjb21tYW5kIDwjPgorICAgICMgICAgICAgY21k IExDX1NFR01FTlQKKyAgICAjIFsuLi5dCisgICAgIyBTZWN0aW9uCisgICAgIyAgIHNlY3RuYW1l IF9fdGV4dAorICAgICMgICAgc2VnbmFtZSBfX1RFWFQKKyAgICAjICAgICAgIGFkZHIgMHgwMDAw MDlmOAorICAgICMgICAgICAgc2l6ZSAweDAwMDE4YjllCisgICAgIyAgICAgb2Zmc2V0IDI1NTIK KyAgICAjICAgICAgYWxpZ24gMl4yICg0KQorICAgICMgV2Ugd2lsbCBuZWVkIHRvIHN0cmlwIG9m ZiB0aGUgbGVhZGluZyAweCBmcm9tIHRoZSBoZXggYWRkcmVzc2VzLAorICAgICMgYW5kIGNvbnZl cnQgdGhlIG9mZnNldCBpbnRvIGhleC4KKyAgICBpZiAoJGxpbmUgPX4gL0xvYWQgY29tbWFuZC8p IHsKKyAgICAgICRjbWQgPSAiIjsKKyAgICAgICRzZWN0bmFtZSA9ICIiOworICAgICAgJHNlZ25h bWUgPSAiIjsKKyAgICB9IGVsc2lmICgkbGluZSA9fiAvU2VjdGlvbi8pIHsKKyAgICAgICRzZWN0 bmFtZSA9ICIiOworICAgICAgJHNlZ25hbWUgPSAiIjsKKyAgICB9IGVsc2lmICgkbGluZSA9fiAv Y21kIChcdyspLykgeworICAgICAgJGNtZCA9ICQxOworICAgIH0gZWxzaWYgKCRsaW5lID1+IC9z ZWN0bmFtZSAoXHcrKS8pIHsKKyAgICAgICRzZWN0bmFtZSA9ICQxOworICAgIH0gZWxzaWYgKCRs aW5lID1+IC9zZWduYW1lIChcdyspLykgeworICAgICAgJHNlZ25hbWUgPSAkMTsKKyAgICB9IGVs c2lmICghKCgkY21kIGVxICJMQ19TRUdNRU5UIiB8fCAkY21kIGVxICJMQ19TRUdNRU5UXzY0Iikg JiYKKyAgICAgICAgICAgICAgICRzZWN0bmFtZSBlcSAiX190ZXh0IiAmJgorICAgICAgICAgICAg ICAgJHNlZ25hbWUgZXEgIl9fVEVYVCIpKSB7CisgICAgICBuZXh0OworICAgIH0gZWxzaWYgKCRs aW5lID1+IC9cYmFkZHIgMHgoWzAtOWEtZkEtRl0rKS8pIHsKKyAgICAgICR2bWEgPSAkMTsKKyAg ICB9IGVsc2lmICgkbGluZSA9fiAvXGJzaXplIDB4KFswLTlhLWZBLUZdKykvKSB7CisgICAgICAk c2l6ZSA9ICQxOworICAgIH0gZWxzaWYgKCRsaW5lID1+IC9cYm9mZnNldCAoWzAtOV0rKS8pIHsK KyAgICAgICRmaWxlX29mZnNldCA9IHNwcmludGYoIiUwMTZ4IiwgJDEpOworICAgIH0KKyAgICBp ZiAoZGVmaW5lZCgkdm1hKSAmJiBkZWZpbmVkKCRzaXplKSAmJiBkZWZpbmVkKCRmaWxlX29mZnNl dCkpIHsKKyAgICAgIGxhc3Q7CisgICAgfQorICB9CisgIGNsb3NlKE9UT09MKTsKKworICBpZiAo IWRlZmluZWQoJHZtYSkgfHwgIWRlZmluZWQoJHNpemUpIHx8ICFkZWZpbmVkKCRmaWxlX29mZnNl dCkpIHsKKyAgICAgcmV0dXJuIHVuZGVmOworICB9CisKKyAgbXkgJHIgPSB7fTsKKyAgJHItPntz aXplfSA9ICRzaXplOworICAkci0+e3ZtYX0gPSAkdm1hOworICAkci0+e2ZpbGVfb2Zmc2V0fSA9 ICRmaWxlX29mZnNldDsKKworICByZXR1cm4gJHI7Cit9CisKK3N1YiBQYXJzZVRleHRTZWN0aW9u SGVhZGVyIHsKKyAgIyBvYmpfdG9vbF9tYXAoIm90b29sIikgaXMgb25seSBkZWZpbmVkIGlmIHdl J3JlIGluIGEgTWFjaC1PIGVudmlyb25tZW50CisgIGlmIChkZWZpbmVkKCRvYmpfdG9vbF9tYXB7 Im90b29sIn0pKSB7CisgICAgbXkgJHIgPSBQYXJzZVRleHRTZWN0aW9uSGVhZGVyRnJvbU90b29s KEBfKTsKKyAgICBpZiAoZGVmaW5lZCgkcikpeworICAgICAgcmV0dXJuICRyOworICAgIH0KKyAg fQorICAjIElmIG90b29sIGRvZXNuJ3Qgd29yaywgb3Igd2UgZG9uJ3QgaGF2ZSBpdCwgZmFsbCBi YWNrIHRvIG9iamR1bXAKKyAgcmV0dXJuIFBhcnNlVGV4dFNlY3Rpb25IZWFkZXJGcm9tT2JqZHVt cChAXyk7Cit9CisKKyMgU3BsaXQgL3Byb2MvcGlkL21hcHMgZHVtcCBpbnRvIGEgbGlzdCBvZiBs aWJyYXJpZXMKK3N1YiBQYXJzZUxpYnJhcmllcyB7CisgIHJldHVybiBpZiAkbWFpbjo6dXNlX3N5 bWJvbF9wYWdlOyAgIyBXZSBkb24ndCBuZWVkIGxpYnJhcmllcyBpbmZvLgorICBteSAkcHJvZyA9 IEN3ZDo6YWJzX3BhdGgoc2hpZnQpOworICBteSAkbWFwID0gc2hpZnQ7CisgIG15ICRwY3MgPSBz aGlmdDsKKworICBteSAkcmVzdWx0ID0gW107CisgIG15ICRoID0gIlthLWYwLTldKyI7CisgIG15 ICR6ZXJvX29mZnNldCA9IEhleEV4dGVuZCgiMCIpOworCisgIG15ICRidWlsZHZhciA9ICIiOwor ICBmb3JlYWNoIG15ICRsIChzcGxpdCgiXG4iLCAkbWFwKSkgeworICAgIGlmICgkbCA9fiBtL15c cypidWlsZD0oLiopJC8pIHsKKyAgICAgICRidWlsZHZhciA9ICQxOworICAgIH0KKworICAgIG15 ICRzdGFydDsKKyAgICBteSAkZmluaXNoOworICAgIG15ICRvZmZzZXQ7CisgICAgbXkgJGxpYjsK KyAgICBpZiAoJGwgPX4gL14oJGgpLSgkaClccysuLnguXHMrKCRoKVxzK1xTKzpcUytccytcZCtc cysoXFMrXC4oc298ZGxsfGR5bGlifGJ1bmRsZSkoKFwuXGQrKStcdyooXC5cZCspezAsM30pPykk L2kpIHsKKyAgICAgICMgRnVsbCBsaW5lIGZyb20gL3Byb2Mvc2VsZi9tYXBzLiAgRXhhbXBsZToK KyAgICAgICMgICA0MDAwMDAwMC00MDAxNTAwMCByLXhwIDAwMDAwMDAwIDAzOjAxIDEyODQ1MDcx ICAgL2xpYi9sZC0yLjMuMi5zbworICAgICAgJHN0YXJ0ID0gSGV4RXh0ZW5kKCQxKTsKKyAgICAg ICRmaW5pc2ggPSBIZXhFeHRlbmQoJDIpOworICAgICAgJG9mZnNldCA9IEhleEV4dGVuZCgkMyk7 CisgICAgICAkbGliID0gJDQ7CisgICAgICAkbGliID1+IHN8XFx8L3xnOyAgICAgIyB0dXJuIHdp bmRvd3Mtc3R5bGUgcGF0aHMgaW50byB1bml4LXN0eWxlIHBhdGhzCisgICAgfSBlbHNpZiAoJGwg PX4gL15ccyooJGgpLSgkaCk6XHMqKFxTK1wuc28oXC5cZCspKikvKSB7CisgICAgICAjIENvb2tl ZCBsaW5lIGZyb20gRHVtcEFkZHJlc3NNYXAuICBFeGFtcGxlOgorICAgICAgIyAgIDQwMDAwMDAw LTQwMDE1MDAwOiAvbGliL2xkLTIuMy4yLnNvCisgICAgICAkc3RhcnQgPSBIZXhFeHRlbmQoJDEp OworICAgICAgJGZpbmlzaCA9IEhleEV4dGVuZCgkMik7CisgICAgICAkb2Zmc2V0ID0gJHplcm9f b2Zmc2V0OworICAgICAgJGxpYiA9ICQzOworICAgIH0gZWxzaWYgKCgkbCA9fiAvXigkaCktKCRo KVxzKy4ueC5ccysoJGgpXHMrXFMrOlxTK1xzK1xkK1xzKyhcUyspJC9pKSAmJiAoJDQgZXEgJHBy b2cpKSB7CisgICAgICAjIFBJRXMgYW5kIGFkZHJlc3Mgc3BhY2UgcmFuZG9taXphdGlvbiBkbyBu b3QgcGxheSB3ZWxsIHdpdGggb3VyCisgICAgICAjIGRlZmF1bHQgYXNzdW1wdGlvbiB0aGF0IG1h aW4gZXhlY3V0YWJsZSBpcyBhdCBsb3dlc3QKKyAgICAgICMgYWRkcmVzc2VzLiBTbyB3ZSdyZSBk ZXRlY3RpbmcgbWFpbiBleGVjdXRhYmxlIGluCisgICAgICAjIC9wcm9jL3NlbGYvbWFwcyBhcyB3 ZWxsLgorICAgICAgJHN0YXJ0ID0gSGV4RXh0ZW5kKCQxKTsKKyAgICAgICRmaW5pc2ggPSBIZXhF eHRlbmQoJDIpOworICAgICAgJG9mZnNldCA9IEhleEV4dGVuZCgkMyk7CisgICAgICAkbGliID0g JDQ7CisgICAgICAkbGliID1+IHN8XFx8L3xnOyAgICAgIyB0dXJuIHdpbmRvd3Mtc3R5bGUgcGF0 aHMgaW50byB1bml4LXN0eWxlIHBhdGhzCisgICAgfQorICAgICMgRnJlZUJTRCAxMC4wIHZpcnR1 YWwgbWVtb3J5IG1hcCAvcHJvYy9jdXJwcm9jL21hcCBhcyBkZWZpbmVkIGluCisgICAgIyBmdW5j dGlvbiBwcm9jZnNfZG9wcm9jbWFwIChzeXMvZnMvcHJvY2ZzL3Byb2Nmc19tYXAuYykKKyAgICAj CisgICAgIyBFeGFtcGxlOgorICAgICMgMHg4MDA2MDAwMDAgMHg4MDA2MWEwMDAgMjYgMCAweGZm ZmZmODAwMDM1YTAwMDAgci14IDc1IDMzIDB4MTAwNCBDT1cgTkMgdm5vZGUgL2xpYmV4ZWMvbGQt ZWxmLnMKKyAgICAjIG8uMSBOQ0ggLTEKKyAgICBlbHNpZiAoJGwgPX4gL14oMHgkaClccygweCRo KVxzXGQrXHNcZCtcczB4JGhcc3IteFxzXGQrXHNcZCtcczB4XGQrXHMoQ09XfE5DTylccyhOQ3xO TkMpXHN2bm9kZVxzKFxTK1wuc28oXC5cZCspKikvKSB7CisgICAgICAkc3RhcnQgPSBIZXhFeHRl bmQoJDEpOworICAgICAgJGZpbmlzaCA9IEhleEV4dGVuZCgkMik7CisgICAgICAkb2Zmc2V0ID0g JHplcm9fb2Zmc2V0OworICAgICAgJGxpYiA9IEZpbmRMaWJyYXJ5KCQ1KTsKKworICAgIH0gZWxz ZSB7CisgICAgICBuZXh0OworICAgIH0KKworICAgICMgRXhwYW5kICIkYnVpbGQiIHZhcmlhYmxl IGlmIGF2YWlsYWJsZQorICAgICRsaWIgPX4gcy9cJGJ1aWxkXGIvJGJ1aWxkdmFyL2c7CisKKyAg ICAkbGliID0gRmluZExpYnJhcnkoJGxpYik7CisKKyAgICAjIENoZWNrIGZvciBwcmUtcmVsb2Nh dGVkIGxpYnJhcmllcywgd2hpY2ggdXNlIHByZS1yZWxvY2F0ZWQgc3ltYm9sIHRhYmxlcworICAg ICMgYW5kIHRodXMgcmVxdWlyZSBhZGp1c3RpbmcgdGhlIG9mZnNldCB0aGF0IHdlJ2xsIHVzZSB0 byB0cmFuc2xhdGUKKyAgICAjIFZNIGFkZHJlc3NlcyBpbnRvIHN5bWJvbCB0YWJsZSBhZGRyZXNz ZXMuCisgICAgIyBPbmx5IGRvIHRoaXMgaWYgd2UncmUgbm90IGdvaW5nIHRvIGZldGNoIHRoZSBz eW1ib2wgdGFibGUgZnJvbSBhCisgICAgIyBkZWJ1Z2dpbmcgY29weSBvZiB0aGUgbGlicmFyeS4K KyAgICBpZiAoIURlYnVnZ2luZ0xpYnJhcnkoJGxpYikpIHsKKyAgICAgIG15ICR0ZXh0ID0gUGFy c2VUZXh0U2VjdGlvbkhlYWRlcigkbGliKTsKKyAgICAgIGlmIChkZWZpbmVkKCR0ZXh0KSkgewor ICAgICAgICAgbXkgJHZtYV9vZmZzZXQgPSBBZGRyZXNzU3ViKCR0ZXh0LT57dm1hfSwgJHRleHQt PntmaWxlX29mZnNldH0pOworICAgICAgICAgJG9mZnNldCA9IEFkZHJlc3NBZGQoJG9mZnNldCwg JHZtYV9vZmZzZXQpOworICAgICAgfQorICAgIH0KKworICAgIGlmKCRtYWluOjpvcHRfZGVidWcp IHsgcHJpbnRmIFNUREVSUiAiJHN0YXJ0OiRmaW5pc2ggKCRvZmZzZXQpICRsaWJcbiI7IH0KKyAg ICBwdXNoKEB7JHJlc3VsdH0sIFskbGliLCAkc3RhcnQsICRmaW5pc2gsICRvZmZzZXRdKTsKKyAg fQorCisgICMgQXBwZW5kIHNwZWNpYWwgZW50cnkgZm9yIGFkZGl0aW9uYWwgbGlicmFyeSAobm90 IHJlbG9jYXRlZCkKKyAgaWYgKCRtYWluOjpvcHRfbGliIG5lICIiKSB7CisgICAgbXkgJHRleHQg PSBQYXJzZVRleHRTZWN0aW9uSGVhZGVyKCRtYWluOjpvcHRfbGliKTsKKyAgICBpZiAoZGVmaW5l ZCgkdGV4dCkpIHsKKyAgICAgICBteSAkc3RhcnQgPSAkdGV4dC0+e3ZtYX07CisgICAgICAgbXkg JGZpbmlzaCA9IEFkZHJlc3NBZGQoJHN0YXJ0LCAkdGV4dC0+e3NpemV9KTsKKworICAgICAgIHB1 c2goQHskcmVzdWx0fSwgWyRtYWluOjpvcHRfbGliLCAkc3RhcnQsICRmaW5pc2gsICRzdGFydF0p OworICAgIH0KKyAgfQorCisgICMgQXBwZW5kIHNwZWNpYWwgZW50cnkgZm9yIHRoZSBtYWluIHBy b2dyYW0uICBUaGlzIGNvdmVycworICAjIDAuLm1heF9wY192YWx1ZV9zZWVuLCBzbyB0aGF0IHdl IGFzc3VtZSBwYyB2YWx1ZXMgbm90IGZvdW5kIGluIG9uZQorICAjIG9mIHRoZSBsaWJyYXJ5IHJh bmdlcyB3aWxsIGJlIHRyZWF0ZWQgYXMgY29taW5nIGZyb20gdGhlIG1haW4KKyAgIyBwcm9ncmFt IGJpbmFyeS4KKyAgbXkgJG1pbl9wYyA9IEhleEV4dGVuZCgiMCIpOworICBteSAkbWF4X3BjID0g JG1pbl9wYzsgICAgICAgICAgIyBmaW5kIHRoZSBtYXhpbWFsIFBDIHZhbHVlIGluIGFueSBzYW1w bGUKKyAgZm9yZWFjaCBteSAkcGMgKGtleXMoJXskcGNzfSkpIHsKKyAgICBpZiAoSGV4RXh0ZW5k KCRwYykgZ3QgJG1heF9wYykgeyAkbWF4X3BjID0gSGV4RXh0ZW5kKCRwYyk7IH0KKyAgfQorICBw dXNoKEB7JHJlc3VsdH0sIFskcHJvZywgJG1pbl9wYywgJG1heF9wYywgJHplcm9fb2Zmc2V0XSk7 CisKKyAgcmV0dXJuICRyZXN1bHQ7Cit9CisKKyMgQWRkIHR3byBoZXggYWRkcmVzc2VzIG9mIGxl bmd0aCAkYWRkcmVzc19sZW5ndGguCisjIFJ1biBqZXByb2YgLS10ZXN0IGZvciB1bml0IHRlc3Qg aWYgdGhpcyBpcyBjaGFuZ2VkLgorc3ViIEFkZHJlc3NBZGQgeworICBteSAkYWRkcjEgPSBzaGlm dDsKKyAgbXkgJGFkZHIyID0gc2hpZnQ7CisgIG15ICRzdW07CisKKyAgaWYgKCRhZGRyZXNzX2xl bmd0aCA9PSA4KSB7CisgICAgIyBQZXJsIGRvZXNuJ3QgY29wZSB3aXRoIHdyYXBhcm91bmQgYXJp dGhtZXRpYywgc28gZG8gaXQgZXhwbGljaXRseToKKyAgICAkc3VtID0gKGhleCgkYWRkcjEpK2hl eCgkYWRkcjIpKSAlICgweDEwMDAwMDAwICogMTYpOworICAgIHJldHVybiBzcHJpbnRmKCIlMDh4 IiwgJHN1bSk7CisKKyAgfSBlbHNlIHsKKyAgICAjIERvIHRoZSBhZGRpdGlvbiBpbiA3LW5pYmJs ZSBjaHVua3MgdG8gdHJpdmlhbGl6ZSBjYXJyeSBoYW5kbGluZy4KKworICAgIGlmICgkbWFpbjo6 b3B0X2RlYnVnIGFuZCAkbWFpbjo6b3B0X3Rlc3QpIHsKKyAgICAgIHByaW50IFNUREVSUiAiQWRk cmVzc0FkZCAkYWRkcjEgKyAkYWRkcjIgPSAiOworICAgIH0KKworICAgIG15ICRhMSA9IHN1YnN0 cigkYWRkcjEsLTcpOworICAgICRhZGRyMSA9IHN1YnN0cigkYWRkcjEsMCwtNyk7CisgICAgbXkg JGEyID0gc3Vic3RyKCRhZGRyMiwtNyk7CisgICAgJGFkZHIyID0gc3Vic3RyKCRhZGRyMiwwLC03 KTsKKyAgICAkc3VtID0gaGV4KCRhMSkgKyBoZXgoJGEyKTsKKyAgICBteSAkYyA9IDA7CisgICAg aWYgKCRzdW0gPiAweGZmZmZmZmYpIHsKKyAgICAgICRjID0gMTsKKyAgICAgICRzdW0gLT0gMHgx MDAwMDAwMDsKKyAgICB9CisgICAgbXkgJHIgPSBzcHJpbnRmKCIlMDd4IiwgJHN1bSk7CisKKyAg ICAkYTEgPSBzdWJzdHIoJGFkZHIxLC03KTsKKyAgICAkYWRkcjEgPSBzdWJzdHIoJGFkZHIxLDAs LTcpOworICAgICRhMiA9IHN1YnN0cigkYWRkcjIsLTcpOworICAgICRhZGRyMiA9IHN1YnN0cigk YWRkcjIsMCwtNyk7CisgICAgJHN1bSA9IGhleCgkYTEpICsgaGV4KCRhMikgKyAkYzsKKyAgICAk YyA9IDA7CisgICAgaWYgKCRzdW0gPiAweGZmZmZmZmYpIHsKKyAgICAgICRjID0gMTsKKyAgICAg ICRzdW0gLT0gMHgxMDAwMDAwMDsKKyAgICB9CisgICAgJHIgPSBzcHJpbnRmKCIlMDd4IiwgJHN1 bSkgLiAkcjsKKworICAgICRzdW0gPSBoZXgoJGFkZHIxKSArIGhleCgkYWRkcjIpICsgJGM7Cisg ICAgaWYgKCRzdW0gPiAweGZmKSB7ICRzdW0gLT0gMHgxMDA7IH0KKyAgICAkciA9IHNwcmludGYo IiUwMngiLCAkc3VtKSAuICRyOworCisgICAgaWYgKCRtYWluOjpvcHRfZGVidWcgYW5kICRtYWlu OjpvcHRfdGVzdCkgeyBwcmludCBTVERFUlIgIiRyXG4iOyB9CisKKyAgICByZXR1cm4gJHI7Cisg IH0KK30KKworCisjIFN1YnRyYWN0IHR3byBoZXggYWRkcmVzc2VzIG9mIGxlbmd0aCAkYWRkcmVz c19sZW5ndGguCisjIFJ1biBqZXByb2YgLS10ZXN0IGZvciB1bml0IHRlc3QgaWYgdGhpcyBpcyBj aGFuZ2VkLgorc3ViIEFkZHJlc3NTdWIgeworICBteSAkYWRkcjEgPSBzaGlmdDsKKyAgbXkgJGFk ZHIyID0gc2hpZnQ7CisgIG15ICRkaWZmOworCisgIGlmICgkYWRkcmVzc19sZW5ndGggPT0gOCkg eworICAgICMgUGVybCBkb2Vzbid0IGNvcGUgd2l0aCB3cmFwYXJvdW5kIGFyaXRobWV0aWMsIHNv IGRvIGl0IGV4cGxpY2l0bHk6CisgICAgJGRpZmYgPSAoaGV4KCRhZGRyMSktaGV4KCRhZGRyMikp ICUgKDB4MTAwMDAwMDAgKiAxNik7CisgICAgcmV0dXJuIHNwcmludGYoIiUwOHgiLCAkZGlmZik7 CisKKyAgfSBlbHNlIHsKKyAgICAjIERvIHRoZSBhZGRpdGlvbiBpbiA3LW5pYmJsZSBjaHVua3Mg dG8gdHJpdmlhbGl6ZSBib3Jyb3cgaGFuZGxpbmcuCisgICAgIyBpZiAoJG1haW46Om9wdF9kZWJ1 ZykgeyBwcmludCBTVERFUlIgIkFkZHJlc3NTdWIgJGFkZHIxIC0gJGFkZHIyID0gIjsgfQorCisg ICAgbXkgJGExID0gaGV4KHN1YnN0cigkYWRkcjEsLTcpKTsKKyAgICAkYWRkcjEgPSBzdWJzdHIo JGFkZHIxLDAsLTcpOworICAgIG15ICRhMiA9IGhleChzdWJzdHIoJGFkZHIyLC03KSk7CisgICAg JGFkZHIyID0gc3Vic3RyKCRhZGRyMiwwLC03KTsKKyAgICBteSAkYiA9IDA7CisgICAgaWYgKCRh MiA+ICRhMSkgeworICAgICAgJGIgPSAxOworICAgICAgJGExICs9IDB4MTAwMDAwMDA7CisgICAg fQorICAgICRkaWZmID0gJGExIC0gJGEyOworICAgIG15ICRyID0gc3ByaW50ZigiJTA3eCIsICRk aWZmKTsKKworICAgICRhMSA9IGhleChzdWJzdHIoJGFkZHIxLC03KSk7CisgICAgJGFkZHIxID0g c3Vic3RyKCRhZGRyMSwwLC03KTsKKyAgICAkYTIgPSBoZXgoc3Vic3RyKCRhZGRyMiwtNykpICsg JGI7CisgICAgJGFkZHIyID0gc3Vic3RyKCRhZGRyMiwwLC03KTsKKyAgICAkYiA9IDA7CisgICAg aWYgKCRhMiA+ICRhMSkgeworICAgICAgJGIgPSAxOworICAgICAgJGExICs9IDB4MTAwMDAwMDA7 CisgICAgfQorICAgICRkaWZmID0gJGExIC0gJGEyOworICAgICRyID0gc3ByaW50ZigiJTA3eCIs ICRkaWZmKSAuICRyOworCisgICAgJGExID0gaGV4KCRhZGRyMSk7CisgICAgJGEyID0gaGV4KCRh ZGRyMikgKyAkYjsKKyAgICBpZiAoJGEyID4gJGExKSB7ICRhMSArPSAweDEwMDsgfQorICAgICRk aWZmID0gJGExIC0gJGEyOworICAgICRyID0gc3ByaW50ZigiJTAyeCIsICRkaWZmKSAuICRyOwor CisgICAgIyBpZiAoJG1haW46Om9wdF9kZWJ1ZykgeyBwcmludCBTVERFUlIgIiRyXG4iOyB9CisK KyAgICByZXR1cm4gJHI7CisgIH0KK30KKworIyBJbmNyZW1lbnQgYSBoZXggYWRkcmVzc2VzIG9m IGxlbmd0aCAkYWRkcmVzc19sZW5ndGguCisjIFJ1biBqZXByb2YgLS10ZXN0IGZvciB1bml0IHRl c3QgaWYgdGhpcyBpcyBjaGFuZ2VkLgorc3ViIEFkZHJlc3NJbmMgeworICBteSAkYWRkciA9IHNo aWZ0OworICBteSAkc3VtOworCisgIGlmICgkYWRkcmVzc19sZW5ndGggPT0gOCkgeworICAgICMg UGVybCBkb2Vzbid0IGNvcGUgd2l0aCB3cmFwYXJvdW5kIGFyaXRobWV0aWMsIHNvIGRvIGl0IGV4 cGxpY2l0bHk6CisgICAgJHN1bSA9IChoZXgoJGFkZHIpKzEpICUgKDB4MTAwMDAwMDAgKiAxNik7 CisgICAgcmV0dXJuIHNwcmludGYoIiUwOHgiLCAkc3VtKTsKKworICB9IGVsc2UgeworICAgICMg RG8gdGhlIGFkZGl0aW9uIGluIDctbmliYmxlIGNodW5rcyB0byB0cml2aWFsaXplIGNhcnJ5IGhh bmRsaW5nLgorICAgICMgV2UgYXJlIGFsd2F5cyBkb2luZyB0aGlzIHRvIHN0ZXAgdGhyb3VnaCB0 aGUgYWRkcmVzc2VzIGluIGEgZnVuY3Rpb24sCisgICAgIyBhbmQgd2lsbCBhbG1vc3QgbmV2ZXIg b3ZlcmZsb3cgdGhlIGZpcnN0IGNodW5rLCBzbyB3ZSBjaGVjayBmb3IgdGhpcworICAgICMgY2Fz ZSBhbmQgZXhpdCBlYXJseS4KKworICAgICMgaWYgKCRtYWluOjpvcHRfZGVidWcpIHsgcHJpbnQg U1RERVJSICJBZGRyZXNzSW5jICRhZGRyMSA9ICI7IH0KKworICAgIG15ICRhMSA9IHN1YnN0cigk YWRkciwtNyk7CisgICAgJGFkZHIgPSBzdWJzdHIoJGFkZHIsMCwtNyk7CisgICAgJHN1bSA9IGhl eCgkYTEpICsgMTsKKyAgICBteSAkciA9IHNwcmludGYoIiUwN3giLCAkc3VtKTsKKyAgICBpZiAo JHN1bSA8PSAweGZmZmZmZmYpIHsKKyAgICAgICRyID0gJGFkZHIgLiAkcjsKKyAgICAgICMgaWYg KCRtYWluOjpvcHRfZGVidWcpIHsgcHJpbnQgU1RERVJSICIkclxuIjsgfQorICAgICAgcmV0dXJu IEhleEV4dGVuZCgkcik7CisgICAgfSBlbHNlIHsKKyAgICAgICRyID0gIjAwMDAwMDAiOworICAg IH0KKworICAgICRhMSA9IHN1YnN0cigkYWRkciwtNyk7CisgICAgJGFkZHIgPSBzdWJzdHIoJGFk ZHIsMCwtNyk7CisgICAgJHN1bSA9IGhleCgkYTEpICsgMTsKKyAgICAkciA9IHNwcmludGYoIiUw N3giLCAkc3VtKSAuICRyOworICAgIGlmICgkc3VtIDw9IDB4ZmZmZmZmZikgeworICAgICAgJHIg PSAkYWRkciAuICRyOworICAgICAgIyBpZiAoJG1haW46Om9wdF9kZWJ1ZykgeyBwcmludCBTVERF UlIgIiRyXG4iOyB9CisgICAgICByZXR1cm4gSGV4RXh0ZW5kKCRyKTsKKyAgICB9IGVsc2Ugewor ICAgICAgJHIgPSAiMDAwMDAwMDAwMDAwMDAiOworICAgIH0KKworICAgICRzdW0gPSBoZXgoJGFk ZHIpICsgMTsKKyAgICBpZiAoJHN1bSA+IDB4ZmYpIHsgJHN1bSAtPSAweDEwMDsgfQorICAgICRy ID0gc3ByaW50ZigiJTAyeCIsICRzdW0pIC4gJHI7CisKKyAgICAjIGlmICgkbWFpbjo6b3B0X2Rl YnVnKSB7IHByaW50IFNUREVSUiAiJHJcbiI7IH0KKyAgICByZXR1cm4gJHI7CisgIH0KK30KKwor IyBFeHRyYWN0IHN5bWJvbHMgZm9yIGFsbCBQQyB2YWx1ZXMgZm91bmQgaW4gcHJvZmlsZQorc3Vi IEV4dHJhY3RTeW1ib2xzIHsKKyAgbXkgJGxpYnMgPSBzaGlmdDsKKyAgbXkgJHBjc2V0ID0gc2hp ZnQ7CisKKyAgbXkgJHN5bWJvbHMgPSB7fTsKKworICAjIE1hcCBlYWNoIFBDIHZhbHVlIHRvIHRo ZSBjb250YWluaW5nIGxpYnJhcnkuICBUbyBtYWtlIHRoaXMgZmFzdGVyLAorICAjIHdlIHNvcnQg bGlicmFyaWVzIGJ5IHRoZWlyIHN0YXJ0aW5nIHBjIHZhbHVlIChoaWdoZXN0IGZpcnN0KSwgYW5k CisgICMgYWR2YW5jZSB0aHJvdWdoIHRoZSBsaWJyYXJpZXMgYXMgd2UgYWR2YW5jZSB0aGUgcGMu ICBTb21ldGltZXMgdGhlCisgICMgYWRkcmVzc2VzIG9mIGxpYnJhcmllcyBtYXkgb3ZlcmxhcCB3 aXRoIHRoZSBhZGRyZXNzZXMgb2YgdGhlIG1haW4KKyAgIyBiaW5hcnksIHNvIHRvIG1ha2Ugc3Vy ZSB0aGUgbGlicmFyaWVzICd3aW4nLCB3ZSBpdGVyYXRlIG92ZXIgdGhlCisgICMgbGlicmFyaWVz IGluIHJldmVyc2Ugb3JkZXIgKHdoaWNoIGFzc3VtZXMgdGhlIGJpbmFyeSBkb2Vzbid0IHN0YXJ0 CisgICMgaW4gdGhlIG1pZGRsZSBvZiBhIGxpYnJhcnksIHdoaWNoIHNlZW1zIGEgZmFpciBhc3N1 bXB0aW9uKS4KKyAgbXkgQHBjcyA9IChzb3J0IHsgJGEgY21wICRiIH0ga2V5cygleyRwY3NldH0p KTsgICMgcGNzZXQgaXMgMC1leHRlbmRlZCBzdHJpbmdzCisgIGZvcmVhY2ggbXkgJGxpYiAoc29y dCB7JGItPlsxXSBjbXAgJGEtPlsxXX0gQHskbGlic30pIHsKKyAgICBteSAkbGlibmFtZSA9ICRs aWItPlswXTsKKyAgICBteSAkc3RhcnQgPSAkbGliLT5bMV07CisgICAgbXkgJGZpbmlzaCA9ICRs aWItPlsyXTsKKyAgICBteSAkb2Zmc2V0ID0gJGxpYi0+WzNdOworCisgICAgIyBVc2UgZGVidWcg bGlicmFyeSBpZiBpdCBleGlzdHMKKyAgICBteSAkZGVidWdfbGlibmFtZSA9IERlYnVnZ2luZ0xp YnJhcnkoJGxpYm5hbWUpOworICAgIGlmICgkZGVidWdfbGlibmFtZSkgeworICAgICAgICAkbGli bmFtZSA9ICRkZWJ1Z19saWJuYW1lOworICAgIH0KKworICAgICMgR2V0IGxpc3Qgb2YgcGNzIHRo YXQgYmVsb25nIGluIHRoaXMgbGlicmFyeS4KKyAgICBteSAkY29udGFpbmVkID0gW107CisgICAg bXkgKCRzdGFydF9wY19pbmRleCwgJGZpbmlzaF9wY19pbmRleCk7CisgICAgIyBGaW5kIHNtYWxs ZXN0IGZpbmlzaF9wY19pbmRleCBzdWNoIHRoYXQgJGZpbmlzaCA8ICRwY1skZmluaXNoX3BjX2lu ZGV4XS4KKyAgICBmb3IgKCRmaW5pc2hfcGNfaW5kZXggPSAkI3BjcyArIDE7ICRmaW5pc2hfcGNf aW5kZXggPiAwOworICAgICAgICAgJGZpbmlzaF9wY19pbmRleC0tKSB7CisgICAgICBsYXN0IGlm ICRwY3NbJGZpbmlzaF9wY19pbmRleCAtIDFdIGxlICRmaW5pc2g7CisgICAgfQorICAgICMgRmlu ZCBzbWFsbGVzdCBzdGFydF9wY19pbmRleCBzdWNoIHRoYXQgJHN0YXJ0IDw9ICRwY1skc3RhcnRf cGNfaW5kZXhdLgorICAgIGZvciAoJHN0YXJ0X3BjX2luZGV4ID0gJGZpbmlzaF9wY19pbmRleDsg JHN0YXJ0X3BjX2luZGV4ID4gMDsKKyAgICAgICAgICRzdGFydF9wY19pbmRleC0tKSB7CisgICAg ICBsYXN0IGlmICRwY3NbJHN0YXJ0X3BjX2luZGV4IC0gMV0gbHQgJHN0YXJ0OworICAgIH0KKyAg ICAjIFRoaXMga2VlcHMgUEMgdmFsdWVzIGhpZ2hlciB0aGFuICRwY1skZmluaXNoX3BjX2luZGV4 XSBpbiBAcGNzLAorICAgICMgaW4gY2FzZSB0aGVyZSBhcmUgb3ZlcmxhcHMgaW4gbGlicmFyaWVz IGFuZCB0aGUgbWFpbiBiaW5hcnkuCisgICAgQHskY29udGFpbmVkfSA9IHNwbGljZShAcGNzLCAk c3RhcnRfcGNfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAkZmluaXNoX3BjX2lu ZGV4IC0gJHN0YXJ0X3BjX2luZGV4KTsKKyAgICAjIE1hcCB0byBzeW1ib2xzCisgICAgTWFwVG9T eW1ib2xzKCRsaWJuYW1lLCBBZGRyZXNzU3ViKCRzdGFydCwgJG9mZnNldCksICRjb250YWluZWQs ICRzeW1ib2xzKTsKKyAgfQorCisgIHJldHVybiAkc3ltYm9sczsKK30KKworIyBNYXAgbGlzdCBv ZiBQQyB2YWx1ZXMgdG8gc3ltYm9scyBmb3IgYSBnaXZlbiBpbWFnZQorc3ViIE1hcFRvU3ltYm9s cyB7CisgIG15ICRpbWFnZSA9IHNoaWZ0OworICBteSAkb2Zmc2V0ID0gc2hpZnQ7CisgIG15ICRw Y2xpc3QgPSBzaGlmdDsKKyAgbXkgJHN5bWJvbHMgPSBzaGlmdDsKKworICBteSAkZGVidWcgPSAw OworCisgICMgSWdub3JlIGVtcHR5IGJpbmFyaWVzCisgIGlmICgkI3skcGNsaXN0fSA8IDApIHsg cmV0dXJuOyB9CisKKyAgIyBGaWd1cmUgb3V0IHRoZSBhZGRyMmxpbmUgY29tbWFuZCB0byB1c2UK KyAgbXkgJGFkZHIybGluZSA9ICRvYmpfdG9vbF9tYXB7ImFkZHIybGluZSJ9OworICBteSAkY21k ID0gU2hlbGxFc2NhcGUoJGFkZHIybGluZSwgIi1mIiwgIi1DIiwgIi1lIiwgJGltYWdlKTsKKyAg aWYgKGV4aXN0cyAkb2JqX3Rvb2xfbWFweyJhZGRyMmxpbmVfcGRiIn0pIHsKKyAgICAkYWRkcjJs aW5lID0gJG9ial90b29sX21hcHsiYWRkcjJsaW5lX3BkYiJ9OworICAgICRjbWQgPSBTaGVsbEVz Y2FwZSgkYWRkcjJsaW5lLCAiLS1kZW1hbmdsZSIsICItZiIsICItQyIsICItZSIsICRpbWFnZSk7 CisgIH0KKworICAjIElmICJhZGRyMmxpbmUiIGlzbid0IGluc3RhbGxlZCBvbiB0aGUgc3lzdGVt IGF0IGFsbCwganVzdCB1c2UKKyAgIyBubSB0byBnZXQgd2hhdCBpbmZvIHdlIGNhbiAoZnVuY3Rp b24gbmFtZXMsIGJ1dCBub3QgbGluZSBudW1iZXJzKS4KKyAgaWYgKHN5c3RlbShTaGVsbEVzY2Fw ZSgkYWRkcjJsaW5lLCAiLS1oZWxwIikgLiAiID4kZGV2X251bGwgMj4mMSIpICE9IDApIHsKKyAg ICBNYXBTeW1ib2xzV2l0aE5NKCRpbWFnZSwgJG9mZnNldCwgJHBjbGlzdCwgJHN5bWJvbHMpOwor ICAgIHJldHVybjsKKyAgfQorCisgICMgImFkZHIybGluZSAtaSIgY2FuIHByb2R1Y2UgYSB2YXJp YWJsZSBudW1iZXIgb2YgbGluZXMgcGVyIGlucHV0CisgICMgYWRkcmVzcywgd2l0aCBubyBzZXBh cmF0b3IgdGhhdCBhbGxvd3MgdXMgdG8gdGVsbCB3aGVuIGRhdGEgZm9yCisgICMgdGhlIG5leHQg YWRkcmVzcyBzdGFydHMuICBTbyB3ZSBmaW5kIHRoZSBhZGRyZXNzIGZvciBhIHNwZWNpYWwKKyAg IyBzeW1ib2wgKF9maW5pKSBhbmQgaW50ZXJsZWF2ZSB0aGlzIGFkZHJlc3MgYmV0d2VlbiBhbGwg cmVhbAorICAjIGFkZHJlc3NlcyBwYXNzZWQgdG8gYWRkcjJsaW5lLiAgVGhlIG5hbWUgb2YgdGhp cyBzcGVjaWFsIHN5bWJvbAorICAjIGNhbiB0aGVuIGJlIHVzZWQgYXMgYSBzZXBhcmF0b3IuCisg ICRzZXBfYWRkcmVzcyA9IHVuZGVmOyAgIyBNYXkgYmUgZmlsbGVkIGluIGJ5IE1hcFN5bWJvbHNX aXRoTk0oKQorICBteSAkbm1fc3ltYm9scyA9IHt9OworICBNYXBTeW1ib2xzV2l0aE5NKCRpbWFn ZSwgJG9mZnNldCwgJHBjbGlzdCwgJG5tX3N5bWJvbHMpOworICBpZiAoZGVmaW5lZCgkc2VwX2Fk ZHJlc3MpKSB7CisgICAgIyBPbmx5IGFkZCAiIC1pIiB0byBhZGRyMmxpbmUgaWYgdGhlIGJpbmFy eSBzdXBwb3J0cyBpdC4KKyAgICAjIGFkZHIybGluZSAtLWhlbHAgcmV0dXJucyAwLCBidXQgbm90 IGlmIGl0IHNlZXMgYW4gdW5rbm93biBmbGFnIGZpcnN0LgorICAgIGlmIChzeXN0ZW0oIiRjbWQg LWkgLS1oZWxwID4kZGV2X251bGwgMj4mMSIpID09IDApIHsKKyAgICAgICRjbWQgLj0gIiAtaSI7 CisgICAgfSBlbHNlIHsKKyAgICAgICRzZXBfYWRkcmVzcyA9IHVuZGVmOyAgICMgbm8gbmVlZCBm b3Igc2VwX2FkZHJlc3MgaWYgd2UgZG9uJ3Qgc3VwcG9ydCAtaQorICAgIH0KKyAgfQorCisgICMg TWFrZSBmaWxlIHdpdGggYWxsIFBDIHZhbHVlcyB3aXRoIGludGVydmVuaW5nICdzZXBfYWRkcmVz cycgc28KKyAgIyB0aGF0IHdlIGNhbiByZWxpYWJseSBkZXRlY3QgdGhlIGVuZCBvZiBpbmxpbmVk IGZ1bmN0aW9uIGxpc3QKKyAgb3BlbihBRERSRVNTRVMsICI+JG1haW46OnRtcGZpbGVfc3ltIikg fHwgZXJyb3IoIiRtYWluOjp0bXBmaWxlX3N5bTogJCFcbiIpOworICBpZiAoJGRlYnVnKSB7IHBy aW50KCItLS0tICRpbWFnZSAtLS1cbiIpOyB9CisgIGZvciAobXkgJGkgPSAwOyAkaSA8PSAkI3sk cGNsaXN0fTsgJGkrKykgeworICAgICMgYWRkcjJsaW5lIGFsd2F5cyByZWFkcyBoZXggYWRkcmVz c2VzLCBhbmQgZG9lcyBub3QgbmVlZCAnMHgnIHByZWZpeC4KKyAgICBpZiAoJGRlYnVnKSB7IHBy aW50ZiBTVERFUlIgKCIlc1xuIiwgJHBjbGlzdC0+WyRpXSk7IH0KKyAgICBwcmludGYgQUREUkVT U0VTICgiJXNcbiIsIEFkZHJlc3NTdWIoJHBjbGlzdC0+WyRpXSwgJG9mZnNldCkpOworICAgIGlm IChkZWZpbmVkKCRzZXBfYWRkcmVzcykpIHsKKyAgICAgIHByaW50ZiBBRERSRVNTRVMgKCIlc1xu IiwgJHNlcF9hZGRyZXNzKTsKKyAgICB9CisgIH0KKyAgY2xvc2UoQUREUkVTU0VTKTsKKyAgaWYg KCRkZWJ1ZykgeworICAgIHByaW50KCItLS0tXG4iKTsKKyAgICBzeXN0ZW0oImNhdCIsICRtYWlu Ojp0bXBmaWxlX3N5bSk7CisgICAgcHJpbnQoIi0tLS1cbiIpOworICAgIHN5c3RlbSgiJGNtZCA8 ICIgLiBTaGVsbEVzY2FwZSgkbWFpbjo6dG1wZmlsZV9zeW0pKTsKKyAgICBwcmludCgiLS0tLVxu Iik7CisgIH0KKworICBvcGVuKFNZTUJPTFMsICIkY21kIDwiIC4gU2hlbGxFc2NhcGUoJG1haW46 OnRtcGZpbGVfc3ltKSAuICIgfCIpCisgICAgICB8fCBlcnJvcigiJGNtZDogJCFcbiIpOworICBt eSAkY291bnQgPSAwOyAgICMgSW5kZXggaW4gcGNsaXN0CisgIHdoaWxlICg8U1lNQk9MUz4pIHsK KyAgICAjIFJlYWQgZnVsbGZ1bmN0aW9uIGFuZCBmaWxlbGluZWluZm8gZnJvbSBuZXh0IHBhaXIg b2YgbGluZXMKKyAgICBzL1xyP1xuJC8vZzsKKyAgICBteSAkZnVsbGZ1bmN0aW9uID0gJF87Cisg ICAgJF8gPSA8U1lNQk9MUz47CisgICAgcy9ccj9cbiQvL2c7CisgICAgbXkgJGZpbGVsaW5lbnVt ID0gJF87CisKKyAgICBpZiAoZGVmaW5lZCgkc2VwX2FkZHJlc3MpICYmICRmdWxsZnVuY3Rpb24g ZXEgJHNlcF9zeW1ib2wpIHsKKyAgICAgICMgVGVybWluYXRpbmcgbWFya2VyIGZvciBkYXRhIGZv ciB0aGlzIGFkZHJlc3MKKyAgICAgICRjb3VudCsrOworICAgICAgbmV4dDsKKyAgICB9CisKKyAg ICAkZmlsZWxpbmVudW0gPX4gc3xcXHwvfGc7ICMgdHVybiB3aW5kb3dzLXN0eWxlIHBhdGhzIGlu dG8gdW5peC1zdHlsZSBwYXRocworCisgICAgbXkgJHBjc3RyID0gJHBjbGlzdC0+WyRjb3VudF07 CisgICAgbXkgJGZ1bmN0aW9uID0gU2hvcnRGdW5jdGlvbk5hbWUoJGZ1bGxmdW5jdGlvbik7Cisg ICAgbXkgJG5tcyA9ICRubV9zeW1ib2xzLT57JHBjc3RyfTsKKyAgICBpZiAoZGVmaW5lZCgkbm1z KSkgeworICAgICAgaWYgKCRmdWxsZnVuY3Rpb24gZXEgJz8/JykgeworICAgICAgICAjIG5tIGZv dW5kIGEgc3ltYm9sIGZvciB1cy4KKyAgICAgICAgJGZ1bmN0aW9uID0gJG5tcy0+WzBdOworICAg ICAgICAkZnVsbGZ1bmN0aW9uID0gJG5tcy0+WzJdOworICAgICAgfSBlbHNlIHsKKwkjIE1hcFN5 bWJvbHNXaXRoTk0gdGFncyBlYWNoIHJvdXRpbmUgd2l0aCBpdHMgc3RhcnRpbmcgYWRkcmVzcywK KwkjIHVzZWZ1bCBpbiBjYXNlIHRoZSBpbWFnZSBoYXMgbXVsdGlwbGUgb2NjdXJyZW5jZXMgb2Yg dGhpcworCSMgcm91dGluZS4gIChJdCB1c2VzIGEgc3ludGF4IHRoYXQgcmVzZW1ibGVzIHRlbXBs YXRlIHBhcmFtZXRlcnMsCisJIyB0aGF0IGFyZSBhdXRvbWF0aWNhbGx5IHN0cmlwcGVkIG91dCBi eSBTaG9ydEZ1bmN0aW9uTmFtZSgpLikKKwkjIGFkZHIybGluZSBkb2VzIG5vdCBwcm92aWRlIHRo ZSBzYW1lIGluZm9ybWF0aW9uLiAgU28gd2UgY2hlY2sKKwkjIGlmIG5tIGRpc2FtYmlndWF0ZWQg b3VyIHN5bWJvbCwgYW5kIGlmIHNvIHRha2UgdGhlIGFubm90YXRlZAorCSMgKG5tKSB2ZXJzaW9u IG9mIHRoZSByb3V0aW5lLW5hbWUuICBUT0RPKGNzaWx2ZXJzKTogdGhpcyB3b24ndAorCSMgY2F0 Y2ggb3ZlcmxvYWRlZCwgaW5saW5lZCBzeW1ib2xzLCB3aGljaCBubSBkb2Vzbid0IHNlZS4KKwkj IEJldHRlciB3b3VsZCBiZSB0byBkbyBhIGNoZWNrIHNpbWlsYXIgdG8gbm0ncywgaW4gdGhpcyBm bi4KKwlpZiAoJG5tcy0+WzJdID1+IG0vXlxRJGZ1bmN0aW9uXEUvKSB7ICAjIHNhbml0eSBjaGVj ayBpdCdzIHRoZSByaWdodCBmbgorCSAgJGZ1bmN0aW9uID0gJG5tcy0+WzBdOworCSAgJGZ1bGxm dW5jdGlvbiA9ICRubXMtPlsyXTsKKwl9CisgICAgICB9CisgICAgfQorCisgICAgIyBQcmVwZW5k IHRvIGFjY3VtdWxhdGVkIHN5bWJvbHMgZm9yIHBjc3RyCisgICAgIyAoc28gdGhhdCBjYWxsZXIg Y29tZXMgYmVmb3JlIGNhbGxlZSkKKyAgICBteSAkc3ltID0gJHN5bWJvbHMtPnskcGNzdHJ9Owor ICAgIGlmICghZGVmaW5lZCgkc3ltKSkgeworICAgICAgJHN5bSA9IFtdOworICAgICAgJHN5bWJv bHMtPnskcGNzdHJ9ID0gJHN5bTsKKyAgICB9CisgICAgdW5zaGlmdChAeyRzeW19LCAkZnVuY3Rp b24sICRmaWxlbGluZW51bSwgJGZ1bGxmdW5jdGlvbik7CisgICAgaWYgKCRkZWJ1ZykgeyBwcmlu dGYgU1RERVJSICgiJXMgPT4gWyVzXVxuIiwgJHBjc3RyLCBqb2luKCIgIiwgQHskc3ltfSkpOyB9 CisgICAgaWYgKCFkZWZpbmVkKCRzZXBfYWRkcmVzcykpIHsKKyAgICAgICMgSW5saW5pbmcgaXMg b2ZmLCBzbyB0aGlzIGVudHJ5IGVuZHMgaW1tZWRpYXRlbHkKKyAgICAgICRjb3VudCsrOworICAg IH0KKyAgfQorICBjbG9zZShTWU1CT0xTKTsKK30KKworIyBVc2Ugbm0gdG8gbWFwIHRoZSBsaXN0 IG9mIHJlZmVyZW5jZWQgUENzIHRvIHN5bWJvbHMuICBSZXR1cm4gdHJ1ZSBpZmYgd2UKKyMgYXJl IGFibGUgdG8gcmVhZCBwcm9jZWR1cmUgaW5mb3JtYXRpb24gdmlhIG5tLgorc3ViIE1hcFN5bWJv bHNXaXRoTk0geworICBteSAkaW1hZ2UgPSBzaGlmdDsKKyAgbXkgJG9mZnNldCA9IHNoaWZ0Owor ICBteSAkcGNsaXN0ID0gc2hpZnQ7CisgIG15ICRzeW1ib2xzID0gc2hpZnQ7CisKKyAgIyBHZXQg bm0gb3V0cHV0IHNvcnRlZCBieSBpbmNyZWFzaW5nIGFkZHJlc3MKKyAgbXkgJHN5bWJvbF90YWJs ZSA9IEdldFByb2NlZHVyZUJvdW5kYXJpZXMoJGltYWdlLCAiLiIpOworICBpZiAoISV7JHN5bWJv bF90YWJsZX0pIHsKKyAgICByZXR1cm4gMDsKKyAgfQorICAjIFN0YXJ0IGFkZHJlc3NlcyBhcmUg YWxyZWFkeSB0aGUgcmlnaHQgbGVuZ3RoICg4IG9yIDE2IGhleCBkaWdpdHMpLgorICBteSBAbmFt ZXMgPSBzb3J0IHsgJHN5bWJvbF90YWJsZS0+eyRhfS0+WzBdIGNtcCAkc3ltYm9sX3RhYmxlLT57 JGJ9LT5bMF0gfQorICAgIGtleXMoJXskc3ltYm9sX3RhYmxlfSk7CisKKyAgaWYgKCQjbmFtZXMg PCAwKSB7CisgICAgIyBObyBzeW1ib2xzOiBqdXN0IHVzZSBhZGRyZXNzZXMKKyAgICBmb3JlYWNo IG15ICRwYyAoQHskcGNsaXN0fSkgeworICAgICAgbXkgJHBjc3RyID0gIjB4IiAuICRwYzsKKyAg ICAgICRzeW1ib2xzLT57JHBjfSA9IFskcGNzdHIsICI/IiwgJHBjc3RyXTsKKyAgICB9CisgICAg cmV0dXJuIDA7CisgIH0KKworICAjIFNvcnQgYWRkcmVzc2VzIHNvIHdlIGNhbiBkbyBhIGpvaW4g YWdhaW5zdCBubSBvdXRwdXQKKyAgbXkgJGluZGV4ID0gMDsKKyAgbXkgJGZ1bGxuYW1lID0gJG5h bWVzWzBdOworICBteSAkbmFtZSA9IFNob3J0RnVuY3Rpb25OYW1lKCRmdWxsbmFtZSk7CisgIGZv cmVhY2ggbXkgJHBjIChzb3J0IHsgJGEgY21wICRiIH0gQHskcGNsaXN0fSkgeworICAgICMgQWRq dXN0IGZvciBtYXBwZWQgb2Zmc2V0CisgICAgbXkgJG1wYyA9IEFkZHJlc3NTdWIoJHBjLCAkb2Zm c2V0KTsKKyAgICB3aGlsZSAoKCRpbmRleCA8ICQjbmFtZXMpICYmICgkbXBjIGdlICRzeW1ib2xf dGFibGUtPnskZnVsbG5hbWV9LT5bMV0pKXsKKyAgICAgICRpbmRleCsrOworICAgICAgJGZ1bGxu YW1lID0gJG5hbWVzWyRpbmRleF07CisgICAgICAkbmFtZSA9IFNob3J0RnVuY3Rpb25OYW1lKCRm dWxsbmFtZSk7CisgICAgfQorICAgIGlmICgkbXBjIGx0ICRzeW1ib2xfdGFibGUtPnskZnVsbG5h bWV9LT5bMV0pIHsKKyAgICAgICRzeW1ib2xzLT57JHBjfSA9IFskbmFtZSwgIj8iLCAkZnVsbG5h bWVdOworICAgIH0gZWxzZSB7CisgICAgICBteSAkcGNzdHIgPSAiMHgiIC4gJHBjOworICAgICAg JHN5bWJvbHMtPnskcGN9ID0gWyRwY3N0ciwgIj8iLCAkcGNzdHJdOworICAgIH0KKyAgfQorICBy ZXR1cm4gMTsKK30KKworc3ViIFNob3J0RnVuY3Rpb25OYW1lIHsKKyAgbXkgJGZ1bmN0aW9uID0g c2hpZnQ7CisgIHdoaWxlICgkZnVuY3Rpb24gPX4gcy9cKFteKCldKlwpKFxzKmNvbnN0KT8vL2cp IHsgfSAgICMgQXJndW1lbnQgdHlwZXMKKyAgd2hpbGUgKCRmdW5jdGlvbiA9fiBzLzxbXjw+XSo+ Ly9nKSAgeyB9ICAgICMgUmVtb3ZlIHRlbXBsYXRlIGFyZ3VtZW50cworICAkZnVuY3Rpb24gPX4g cy9eLipccysoXHcrOjopLyQxLzsgICAgICAgICAgIyBSZW1vdmUgbGVhZGluZyB0eXBlCisgIHJl dHVybiAkZnVuY3Rpb247Cit9CisKKyMgVHJpbSBvdmVybHkgbG9uZyBzeW1ib2xzIGZvdW5kIGlu IGRpc2Fzc2VtYmxlciBvdXRwdXQKK3N1YiBDbGVhbkRpc2Fzc2VtYmx5IHsKKyAgbXkgJGQgPSBz aGlmdDsKKyAgd2hpbGUgKCRkID1+IHMvXChbXigpJV0qXCkoXHMqY29uc3QpPy8vZykgeyB9ICMg QXJndW1lbnQgdHlwZXMsIG5vdCAoJXJheCkKKyAgd2hpbGUgKCRkID1+IHMvKFx3Kyk8W148Pl0q Pi8kMS9nKSAgeyB9ICAgICAgICMgUmVtb3ZlIHRlbXBsYXRlIGFyZ3VtZW50cworICByZXR1cm4g JGQ7Cit9CisKKyMgQ2xlYW4gZmlsZSBuYW1lIGZvciBkaXNwbGF5CitzdWIgQ2xlYW5GaWxlTmFt ZSB7CisgIG15ICgkZikgPSBAXzsKKyAgJGYgPX4gc3xeL3Byb2Mvc2VsZi9jd2QvfHw7CisgICRm ID1+IHN8XlwuL3x8OworICByZXR1cm4gJGY7Cit9CisKKyMgTWFrZSBhZGRyZXNzIHJlbGF0aXZl IHRvIHNlY3Rpb24gYW5kIGNsZWFuIHVwIGZvciBkaXNwbGF5CitzdWIgVW5wYXJzZUFkZHJlc3Mg eworICBteSAoJG9mZnNldCwgJGFkZHJlc3MpID0gQF87CisgICRhZGRyZXNzID0gQWRkcmVzc1N1 YigkYWRkcmVzcywgJG9mZnNldCk7CisgICRhZGRyZXNzID1+IHMvXjB4Ly87CisgICRhZGRyZXNz ID1+IHMvXjAqLy87CisgIHJldHVybiAkYWRkcmVzczsKK30KKworIyMjIyMgTWlzY2VsbGFuZW91 cyAjIyMjIworCisjIEZpbmQgdGhlIHJpZ2h0IHZlcnNpb25zIG9mIHRoZSBhYm92ZSBvYmplY3Qg dG9vbHMgdG8gdXNlLiAgVGhlCisjIGFyZ3VtZW50IGlzIHRoZSBwcm9ncmFtIGZpbGUgYmVpbmcg YW5hbHl6ZWQsIGFuZCBzaG91bGQgYmUgYW4gRUxGCisjIDMyLWJpdCBvciBFTEYgNjQtYml0IGV4 ZWN1dGFibGUgZmlsZS4gIFRoZSBsb2NhdGlvbiBvZiB0aGUgdG9vbHMKKyMgaXMgZGV0ZXJtaW5l ZCBieSBjb25zaWRlcmluZyB0aGUgZm9sbG93aW5nIG9wdGlvbnMgaW4gdGhpcyBvcmRlcjoKKyMg ICAxKSAtLXRvb2xzIG9wdGlvbiwgaWYgc2V0CisjICAgMikgSkVQUk9GX1RPT0xTIGVudmlyb25t ZW50IHZhcmlhYmxlLCBpZiBzZXQKKyMgICAzKSB0aGUgZW52aXJvbm1lbnQKK3N1YiBDb25maWd1 cmVPYmpUb29scyB7CisgIG15ICRwcm9nX2ZpbGUgPSBzaGlmdDsKKworICAjIENoZWNrIGZvciB0 aGUgZXhpc3RlbmNlIG9mICRwcm9nX2ZpbGUgYmVjYXVzZSAvdXNyL2Jpbi9maWxlIGRvZXMgbm90 CisgICMgcHJlZGljdGFibHkgcmV0dXJuIGVycm9yIHN0YXR1cyBpbiBwcm9kLgorICAoLWUgJHBy b2dfZmlsZSkgIHx8IGVycm9yKCIkcHJvZ19maWxlIGRvZXMgbm90IGV4aXN0LlxuIik7CisKKyAg bXkgJGZpbGVfdHlwZSA9IHVuZGVmOworICBpZiAoLWUgIi91c3IvYmluL2ZpbGUiKSB7CisgICAg IyBGb2xsb3cgc3ltbGlua3MgKGF0IGxlYXN0IGZvciBzeXN0ZW1zIHdoZXJlICJmaWxlIiBzdXBw b3J0cyB0aGF0KS4KKyAgICBteSAkZXNjYXBlZF9wcm9nX2ZpbGUgPSBTaGVsbEVzY2FwZSgkcHJv Z19maWxlKTsKKyAgICAkZmlsZV90eXBlID0gYC91c3IvYmluL2ZpbGUgLUwgJGVzY2FwZWRfcHJv Z19maWxlIDI+JGRldl9udWxsIHx8CisgICAgICAgICAgICAgICAgICAvdXNyL2Jpbi9maWxlICRl c2NhcGVkX3Byb2dfZmlsZWA7CisgIH0gZWxzaWYgKCReTyA9PSAiTVNXaW4zMiIpIHsKKyAgICAk ZmlsZV90eXBlID0gIk1TIFdpbmRvd3MiOworICB9IGVsc2UgeworICAgIHByaW50IFNUREVSUiAi V0FSTklORzogQ2FuJ3QgZGV0ZXJtaW5lIHRoZSBmaWxlIHR5cGUgb2YgJHByb2dfZmlsZSI7Cisg IH0KKworICBpZiAoJGZpbGVfdHlwZSA9fiAvNjQtYml0LykgeworICAgICMgQ2hhbmdlICRhZGRy ZXNzX2xlbmd0aCB0byAxNiBpZiB0aGUgcHJvZ3JhbSBmaWxlIGlzIEVMRiA2NC1iaXQuCisgICAg IyBXZSBjYW4ndCBkZXRlY3QgdGhpcyBmcm9tIG1hbnkgKG1vc3Q/KSBoZWFwIG9yIGxvY2sgY29u dGVudGlvbgorICAgICMgcHJvZmlsZXMsIHNpbmNlIHRoZSBhY3R1YWwgYWRkcmVzc2VzIHJlZmVy ZW5jZWQgYXJlIGdlbmVyYWxseSBpbiBsb3cKKyAgICAjIG1lbW9yeSBldmVuIGZvciA2NC1iaXQg cHJvZ3JhbXMuCisgICAgJGFkZHJlc3NfbGVuZ3RoID0gMTY7CisgIH0KKworICBpZiAoJGZpbGVf dHlwZSA9fiAvTVMgV2luZG93cy8pIHsKKyAgICAjIEZvciB3aW5kb3dzLCB3ZSBwcm92aWRlIGEg dmVyc2lvbiBvZiBubSBhbmQgYWRkcjJsaW5lIGFzIHBhcnQgb2YKKyAgICAjIHRoZSBvcGVuc291 cmNlIHJlbGVhc2UsIHdoaWNoIGlzIGNhcGFibGUgb2YgcGFyc2luZworICAgICMgV2luZG93cy1z dHlsZSBQREIgZXhlY3V0YWJsZXMuICBJdCBzaG91bGQgbGl2ZSBpbiB0aGUgcGF0aCwgb3IKKyAg ICAjIGluIHRoZSBzYW1lIGRpcmVjdG9yeSBhcyBqZXByb2YuCisgICAgJG9ial90b29sX21hcHsi bm1fcGRiIn0gPSAibm0tcGRiIjsKKyAgICAkb2JqX3Rvb2xfbWFweyJhZGRyMmxpbmVfcGRiIn0g PSAiYWRkcjJsaW5lLXBkYiI7CisgIH0KKworICBpZiAoJGZpbGVfdHlwZSA9fiAvTWFjaC1PLykg eworICAgICMgT1MgWCB1c2VzIG90b29sIHRvIGV4YW1pbmUgTWFjaC1PIGZpbGVzLCByYXRoZXIg dGhhbiBvYmpkdW1wLgorICAgICRvYmpfdG9vbF9tYXB7Im90b29sIn0gPSAib3Rvb2wiOworICAg ICRvYmpfdG9vbF9tYXB7ImFkZHIybGluZSJ9ID0gImZhbHNlIjsgICMgbm8gYWRkcjJsaW5lCisg ICAgJG9ial90b29sX21hcHsib2JqZHVtcCJ9ID0gImZhbHNlIjsgICMgbm8gb2JqZHVtcAorICB9 CisKKyAgIyBHbyBmaWxsIGluICVvYmpfdG9vbF9tYXAgd2l0aCB0aGUgcGF0aG5hbWVzIHRvIHVz ZToKKyAgZm9yZWFjaCBteSAkdG9vbCAoa2V5cyAlb2JqX3Rvb2xfbWFwKSB7CisgICAgJG9ial90 b29sX21hcHskdG9vbH0gPSBDb25maWd1cmVUb29sKCRvYmpfdG9vbF9tYXB7JHRvb2x9KTsKKyAg fQorfQorCisjIFJldHVybnMgdGhlIHBhdGggb2YgYSBjYWxsZXItc3BlY2lmaWVkIG9iamVjdCB0 b29sLiAgSWYgLS10b29scyBvcgorIyBKRVBST0ZfVE9PTFMgYXJlIHNwZWNpZmllZCwgdGhlbiBy ZXR1cm5zIHRoZSBmdWxsIHBhdGggdG8gdGhlIHRvb2wKKyMgd2l0aCB0aGF0IHByZWZpeC4gIE90 aGVyd2lzZSwgcmV0dXJucyB0aGUgcGF0aCB1bm1vZGlmaWVkICh3aGljaAorIyBtZWFucyB3ZSB3 aWxsIGxvb2sgZm9yIGl0IG9uIFBBVEgpLgorc3ViIENvbmZpZ3VyZVRvb2wgeworICBteSAkdG9v bCA9IHNoaWZ0OworICBteSAkcGF0aDsKKworICAjIC0tdG9vbHMgKG9yICRKRVBST0ZfVE9PTFMp IGlzIGEgY29tbWEgc2VwYXJhdGVkIGxpc3QsIHdoZXJlIGVhY2gKKyAgIyBpdGVtIGlzIGVpdGhl ciBhKSBhIHBhdGhuYW1lIHByZWZpeCwgb3IgYikgYSBtYXAgb2YgdGhlIGZvcm0KKyAgIyA8dG9v bD46PHBhdGg+LiAgRmlyc3Qgd2UgbG9vayBmb3IgYW4gZW50cnkgb2YgdHlwZSAoYikgZm9yIG91 cgorICAjIHRvb2wuICBJZiBvbmUgaXMgZm91bmQsIHdlIHVzZSBpdC4gIE90aGVyd2lzZSwgd2Ug Y29uc2lkZXIgYWxsIHRoZQorICAjIHBhdGhuYW1lIHByZWZpeGVzIGluIHR1cm4sIHVudGlsIG9u ZSB5aWVsZHMgYW4gZXhpc3RpbmcgZmlsZS4gIElmCisgICMgbm9uZSBkb2VzLCB3ZSB1c2UgYSBk ZWZhdWx0IHBhdGguCisgIG15ICR0b29scyA9ICRtYWluOjpvcHRfdG9vbHMgfHwgJEVOVnsiSkVQ Uk9GX1RPT0xTIn0gfHwgIiI7CisgIGlmICgkdG9vbHMgPX4gbS8oLHxeKVxRJHRvb2xcRTooW14s XSopLykgeworICAgICRwYXRoID0gJDI7CisgICAgIyBUT0RPKGNzaWx2ZXJzKTogc2FuaXR5LWNo ZWNrIHRoYXQgJHBhdGggZXhpc3RzPyAgSGFyZCBpZiBpdCdzIHJlbGF0aXZlLgorICB9IGVsc2lm ICgkdG9vbHMgbmUgJycpIHsKKyAgICBmb3JlYWNoIG15ICRwcmVmaXggKHNwbGl0KCcsJywgJHRv b2xzKSkgeworICAgICAgbmV4dCBpZiAoJHByZWZpeCA9fiAvOi8pOyAgICAjIGlnbm9yZSAidG9v bDpmdWxscGF0aCIgZW50cmllcyBpbiB0aGUgbGlzdAorICAgICAgaWYgKC14ICRwcmVmaXggLiAk dG9vbCkgeworICAgICAgICAkcGF0aCA9ICRwcmVmaXggLiAkdG9vbDsKKyAgICAgICAgbGFzdDsK KyAgICAgIH0KKyAgICB9CisgICAgaWYgKCEkcGF0aCkgeworICAgICAgZXJyb3IoIk5vICckdG9v bCcgZm91bmQgd2l0aCBwcmVmaXggc3BlY2lmaWVkIGJ5ICIgLgorICAgICAgICAgICAgIi0tdG9v bHMgKG9yIFwkSkVQUk9GX1RPT0xTKSAnJHRvb2xzJ1xuIik7CisgICAgfQorICB9IGVsc2Ugewor ICAgICMgLi4uIG90aGVyd2lzZSB1c2UgdGhlIHZlcnNpb24gdGhhdCBleGlzdHMgaW4gdGhlIHNh bWUgZGlyZWN0b3J5IGFzCisgICAgIyBqZXByb2YuICBJZiB0aGVyZSdzIG5vdGhpbmcgdGhlcmUs IHVzZSAkUEFUSC4KKyAgICAkMCA9fiBtLFteL10qJCw7ICAgICAjIHRoaXMgaXMgZXZlcnl0aGlu ZyBhZnRlciB0aGUgbGFzdCBzbGFzaAorICAgIG15ICRkaXJuYW1lID0gJGA7ICAgICMgdGhpcyBp cyBldmVyeXRoaW5nIHVwIHRvIGFuZCBpbmNsdWRpbmcgdGhlIGxhc3Qgc2xhc2gKKyAgICBpZiAo LXggIiRkaXJuYW1lJHRvb2wiKSB7CisgICAgICAkcGF0aCA9ICIkZGlybmFtZSR0b29sIjsKKyAg ICB9IGVsc2UgeworICAgICAgJHBhdGggPSAkdG9vbDsKKyAgICB9CisgIH0KKyAgaWYgKCRtYWlu OjpvcHRfZGVidWcpIHsgcHJpbnQgU1RERVJSICJVc2luZyAnJHBhdGgnIGZvciAnJHRvb2wnLlxu IjsgfQorICByZXR1cm4gJHBhdGg7Cit9CisKK3N1YiBTaGVsbEVzY2FwZSB7CisgIG15IEBlc2Nh cGVkX3dvcmRzID0gKCk7CisgIGZvcmVhY2ggbXkgJHdvcmQgKEBfKSB7CisgICAgbXkgJGVzY2Fw ZWRfd29yZCA9ICR3b3JkOworICAgIGlmICgkd29yZCA9fiBtIVteYS16QS1aMC05Ly4sXz0tXSEp IHsgICMgY2hlY2sgZm9yIGFueXRoaW5nIG5vdCBpbiB3aGl0ZWxpc3QKKyAgICAgICRlc2NhcGVk X3dvcmQgPX4gcy8nLydcXCcnLzsKKyAgICAgICRlc2NhcGVkX3dvcmQgPSAiJyRlc2NhcGVkX3dv cmQnIjsKKyAgICB9CisgICAgcHVzaChAZXNjYXBlZF93b3JkcywgJGVzY2FwZWRfd29yZCk7Cisg IH0KKyAgcmV0dXJuIGpvaW4oIiAiLCBAZXNjYXBlZF93b3Jkcyk7Cit9CisKK3N1YiBjbGVhbnVw IHsKKyAgdW5saW5rKCRtYWluOjp0bXBmaWxlX3N5bSk7CisgIHVubGluayhrZXlzICVtYWluOjp0 ZW1wbmFtZXMpOworCisgICMgV2UgbGVhdmUgYW55IGNvbGxlY3RlZCBwcm9maWxlcyBpbiAkSE9N RS9qZXByb2YgaW4gY2FzZSB0aGUgdXNlciB3YW50cworICAjIHRvIGxvb2sgYXQgdGhlbSBsYXRl ci4gIFdlIHByaW50IGEgbWVzc2FnZSBpbmZvcm1pbmcgdGhlbSBvZiB0aGlzLgorICBpZiAoKHNj YWxhcihAbWFpbjo6cHJvZmlsZV9maWxlcykgPiAwKSAmJgorICAgICAgZGVmaW5lZCgkbWFpbjo6 Y29sbGVjdGVkX3Byb2ZpbGUpKSB7CisgICAgaWYgKHNjYWxhcihAbWFpbjo6cHJvZmlsZV9maWxl cykgPT0gMSkgeworICAgICAgcHJpbnQgU1RERVJSICJEeW5hbWljYWxseSBnYXRoZXJlZCBwcm9m aWxlIGlzIGluICRtYWluOjpjb2xsZWN0ZWRfcHJvZmlsZVxuIjsKKyAgICB9CisgICAgcHJpbnQg U1RERVJSICJJZiB5b3Ugd2FudCB0byBpbnZlc3RpZ2F0ZSB0aGlzIHByb2ZpbGUgZnVydGhlciwg eW91IGNhbiBkbzpcbiI7CisgICAgcHJpbnQgU1RERVJSICJcbiI7CisgICAgcHJpbnQgU1RERVJS ICIgIGplcHJvZiBcXFxuIjsKKyAgICBwcmludCBTVERFUlIgIiAgICAkbWFpbjo6cHJvZyBcXFxu IjsKKyAgICBwcmludCBTVERFUlIgIiAgICAkbWFpbjo6Y29sbGVjdGVkX3Byb2ZpbGVcbiI7Cisg ICAgcHJpbnQgU1RERVJSICJcbiI7CisgIH0KK30KKworc3ViIHNpZ2hhbmRsZXIgeworICBjbGVh bnVwKCk7CisgIGV4aXQoMSk7Cit9CisKK3N1YiBlcnJvciB7CisgIG15ICRtc2cgPSBzaGlmdDsK KyAgcHJpbnQgU1RERVJSICRtc2c7CisgIGNsZWFudXAoKTsKKyAgZXhpdCgxKTsKK30KKworCisj IFJ1biAkbm1fY29tbWFuZCBhbmQgZ2V0IGFsbCB0aGUgcmVzdWx0aW5nIHByb2NlZHVyZSBib3Vu ZGFyaWVzIHdob3NlCisjIG5hbWVzIG1hdGNoICIkcmVnZXhwIiBhbmQgcmV0dXJucyB0aGVtIGlu IGEgaGFzaHRhYmxlIG1hcHBpbmcgZnJvbQorIyBwcm9jZWR1cmUgbmFtZSB0byBhIHR3by1lbGVt ZW50IHZlY3RvciBvZiBbc3RhcnQgYWRkcmVzcywgZW5kIGFkZHJlc3NdCitzdWIgR2V0UHJvY2Vk dXJlQm91bmRhcmllc1ZpYU5tIHsKKyAgbXkgJGVzY2FwZWRfbm1fY29tbWFuZCA9IHNoaWZ0OyAg ICAjIHNoZWxsLWVzY2FwZWQKKyAgbXkgJHJlZ2V4cCA9IHNoaWZ0OworCisgIG15ICRzeW1ib2xf dGFibGUgPSB7fTsKKyAgb3BlbihOTSwgIiRlc2NhcGVkX25tX2NvbW1hbmQgfCIpIHx8IGVycm9y KCIkZXNjYXBlZF9ubV9jb21tYW5kOiAkIVxuIik7CisgIG15ICRsYXN0X3N0YXJ0ID0gIjAiOwor ICBteSAkcm91dGluZSA9ICIiOworICB3aGlsZSAoPE5NPikgeworICAgIHMvXHIvL2c7ICAgICAg ICAgIyB0dXJuIHdpbmRvd3MtbG9va2luZyBsaW5lcyBpbnRvIHVuaXgtbG9va2luZyBsaW5lcwor ICAgIGlmIChtL15ccyooWzAtOWEtZl0rKSAoLikgKC4uKikvKSB7CisgICAgICBteSAkc3RhcnRf dmFsID0gJDE7CisgICAgICBteSAkdHlwZSA9ICQyOworICAgICAgbXkgJHRoaXNfcm91dGluZSA9 ICQzOworCisgICAgICAjIEl0J3MgcG9zc2libGUgZm9yIHR3byBzeW1ib2xzIHRvIHNoYXJlIHRo ZSBzYW1lIGFkZHJlc3MsIGlmCisgICAgICAjIG9uZSBpcyBhIHplcm8tbGVuZ3RoIHZhcmlhYmxl IChsaWtlIF9fc3RhcnRfZ29vZ2xlX21hbGxvYykgb3IKKyAgICAgICMgb25lIHN5bWJvbCBpcyBh IHdlYWsgYWxpYXMgdG8gYW5vdGhlciAobGlrZSBfX2xpYmNfbWFsbG9jKS4KKyAgICAgICMgSW4g c3VjaCBjYXNlcywgd2Ugd2FudCB0byBpZ25vcmUgYWxsIHZhbHVlcyBleGNlcHQgZm9yIHRoZQor ICAgICAgIyBhY3R1YWwgc3ltYm9sLCB3aGljaCBpbiBubS1zcGVhayBoYXMgdHlwZSAiVCIuICBU aGUgbG9naWMKKyAgICAgICMgYmVsb3cgZG9lcyB0aGlzLCB0aG91Z2ggaXQncyBhIGJpdCB0cmlj a3k6IHdoYXQgaGFwcGVucyB3aGVuCisgICAgICAjIHdlIGhhdmUgYSBzZXJpZXMgb2YgbGluZXMg d2l0aCB0aGUgc2FtZSBhZGRyZXNzLCBpcyB0aGUgZmlyc3QKKyAgICAgICMgb25lIGdldHMgcXVl dWVkIHVwIHRvIGJlIHByb2Nlc3NlZC4gIEhvd2V2ZXIsIGl0IHdvbid0CisgICAgICAjICphY3R1 YWxseSogYmUgcHJvY2Vzc2VkIHVudGlsIGxhdGVyLCB3aGVuIHdlIHJlYWQgYSBsaW5lIHdpdGgK KyAgICAgICMgYSBkaWZmZXJlbnQgYWRkcmVzcy4gIFRoYXQgbWVhbnMgdGhhdCBhcyBsb25nIGFz IHdlJ3JlIHJlYWRpbmcKKyAgICAgICMgbGluZXMgd2l0aCB0aGUgc2FtZSBhZGRyZXNzLCB3ZSBo YXZlIGEgY2hhbmNlIHRvIHJlcGxhY2UgdGhhdAorICAgICAgIyBpdGVtIGluIHRoZSBxdWV1ZSwg d2hpY2ggd2UgZG8gd2hlbmV2ZXIgd2Ugc2VlIGEgJ1QnIGVudHJ5IC0tCisgICAgICAjIHRoYXQg aXMsIGEgbGluZSB3aXRoIHR5cGUgJ1QnLiAgSWYgd2UgbmV2ZXIgc2VlIGEgJ1QnIGVudHJ5LAor ICAgICAgIyB3ZSdsbCBqdXN0IGdvIGFoZWFkIGFuZCBwcm9jZXNzIHRoZSBmaXJzdCBlbnRyeSAo d2hpY2ggbmV2ZXIKKyAgICAgICMgZ290IHRvdWNoZWQgaW4gdGhlIHF1ZXVlKSwgYW5kIGlnbm9y ZSB0aGUgb3RoZXJzLgorICAgICAgaWYgKCRzdGFydF92YWwgZXEgJGxhc3Rfc3RhcnQgJiYgJHR5 cGUgPX4gL3QvaSkgeworICAgICAgICAjIFdlIGFyZSB0aGUgJ1QnIHN5bWJvbCBhdCB0aGlzIGFk ZHJlc3MsIHJlcGxhY2UgcHJldmlvdXMgc3ltYm9sLgorICAgICAgICAkcm91dGluZSA9ICR0aGlz X3JvdXRpbmU7CisgICAgICAgIG5leHQ7CisgICAgICB9IGVsc2lmICgkc3RhcnRfdmFsIGVxICRs YXN0X3N0YXJ0KSB7CisgICAgICAgICMgV2UncmUgbm90IHRoZSAnVCcgc3ltYm9sIGF0IHRoaXMg YWRkcmVzcywgc28gaWdub3JlIHVzLgorICAgICAgICBuZXh0OworICAgICAgfQorCisgICAgICBp ZiAoJHRoaXNfcm91dGluZSBlcSAkc2VwX3N5bWJvbCkgeworICAgICAgICAkc2VwX2FkZHJlc3Mg PSBIZXhFeHRlbmQoJHN0YXJ0X3ZhbCk7CisgICAgICB9CisKKyAgICAgICMgVGFnIHRoaXMgcm91 dGluZSB3aXRoIHRoZSBzdGFydGluZyBhZGRyZXNzIGluIGNhc2UgdGhlIGltYWdlCisgICAgICAj IGhhcyBtdWx0aXBsZSBvY2N1cnJlbmNlcyBvZiB0aGlzIHJvdXRpbmUuICBXZSB1c2UgYSBzeW50 YXgKKyAgICAgICMgdGhhdCByZXNlbWJsZXMgdGVtcGxhdGUgcGFyYW1ldGVycyB0aGF0IGFyZSBh dXRvbWF0aWNhbGx5CisgICAgICAjIHN0cmlwcGVkIG91dCBieSBTaG9ydEZ1bmN0aW9uTmFtZSgp CisgICAgICAkdGhpc19yb3V0aW5lIC49ICI8JHN0YXJ0X3ZhbD4iOworCisgICAgICBpZiAoZGVm aW5lZCgkcm91dGluZSkgJiYgJHJvdXRpbmUgPX4gbS8kcmVnZXhwLykgeworICAgICAgICAkc3lt Ym9sX3RhYmxlLT57JHJvdXRpbmV9ID0gW0hleEV4dGVuZCgkbGFzdF9zdGFydCksCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSGV4RXh0ZW5kKCRzdGFydF92YWwpXTsKKyAg ICAgIH0KKyAgICAgICRsYXN0X3N0YXJ0ID0gJHN0YXJ0X3ZhbDsKKyAgICAgICRyb3V0aW5lID0g JHRoaXNfcm91dGluZTsKKyAgICB9IGVsc2lmIChtL15Mb2FkZWQgaW1hZ2UgbmFtZTogKC4rKS8p IHsKKyAgICAgICMgVGhlIHdpbjMyIG5tIHdvcmthbGlrZSBlbWl0cyBpbmZvcm1hdGlvbiBhYm91 dCB0aGUgYmluYXJ5IGl0IGlzIHVzaW5nLgorICAgICAgaWYgKCRtYWluOjpvcHRfZGVidWcpIHsg cHJpbnQgU1RERVJSICJVc2luZyBJbWFnZSAkMVxuIjsgfQorICAgIH0gZWxzaWYgKG0vXlBEQiBm aWxlIG5hbWU6ICguKykvKSB7CisgICAgICAjIFRoZSB3aW4zMiBubSB3b3JrYWxpa2UgZW1pdHMg aW5mb3JtYXRpb24gYWJvdXQgdGhlIHBkYiBpdCBpcyB1c2luZy4KKyAgICAgIGlmICgkbWFpbjo6 b3B0X2RlYnVnKSB7IHByaW50IFNUREVSUiAiVXNpbmcgUERCICQxXG4iOyB9CisgICAgfQorICB9 CisgIGNsb3NlKE5NKTsKKyAgIyBIYW5kbGUgdGhlIGxhc3QgbGluZSBpbiB0aGUgbm0gb3V0cHV0 LiAgVW5mb3J0dW5hdGVseSwgd2UgZG9uJ3Qga25vdworICAjIGhvdyBiaWcgdGhpcyBsYXN0IHN5 bWJvbCBpcywgYmVjYXVzZSB3ZSBkb24ndCBrbm93IGhvdyBiaWcgdGhlIGZpbGUKKyAgIyBpcy4g IEZvciBub3csIHdlIGp1c3QgZ2l2ZSBpdCBhIHNpemUgb2YgMC4KKyAgIyBUT0RPKGNzaWx2ZXJz KTogZG8gYmV0dGVyIGhlcmUuCisgIGlmIChkZWZpbmVkKCRyb3V0aW5lKSAmJiAkcm91dGluZSA9 fiBtLyRyZWdleHAvKSB7CisgICAgJHN5bWJvbF90YWJsZS0+eyRyb3V0aW5lfSA9IFtIZXhFeHRl bmQoJGxhc3Rfc3RhcnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSGV4RXh0 ZW5kKCRsYXN0X3N0YXJ0KV07CisgIH0KKyAgcmV0dXJuICRzeW1ib2xfdGFibGU7Cit9CisKKyMg R2V0cyB0aGUgcHJvY2VkdXJlIGJvdW5kYXJpZXMgZm9yIGFsbCByb3V0aW5lcyBpbiAiJGltYWdl IiB3aG9zZSBuYW1lcworIyBtYXRjaCAiJHJlZ2V4cCIgYW5kIHJldHVybnMgdGhlbSBpbiBhIGhh c2h0YWJsZSBtYXBwaW5nIGZyb20gcHJvY2VkdXJlCisjIG5hbWUgdG8gYSB0d28tZWxlbWVudCB2 ZWN0b3Igb2YgW3N0YXJ0IGFkZHJlc3MsIGVuZCBhZGRyZXNzXS4KKyMgV2lsbCByZXR1cm4gYW4g ZW1wdHkgbWFwIGlmIG5tIGlzIG5vdCBpbnN0YWxsZWQgb3Igbm90IHdvcmtpbmcgcHJvcGVybHku CitzdWIgR2V0UHJvY2VkdXJlQm91bmRhcmllcyB7CisgIG15ICRpbWFnZSA9IHNoaWZ0OworICBt eSAkcmVnZXhwID0gc2hpZnQ7CisKKyAgIyBJZiAkaW1hZ2UgZG9lc24ndCBzdGFydCB3aXRoIC8s IHRoZW4gcHV0IC4vIGluIGZyb250IG9mIGl0LiAgVGhpcyB3b3JrcworICAjIGFyb3VuZCBhbiBv Ym5veGlvdXMgYnVnIGluIG91ciBwcm9iaW5nIG9mIG5tIC1mIGJlaGF2aW9yLgorICAjICJubSAt ZiAkaW1hZ2UiIGlzIHN1cHBvc2VkIHRvIGZhaWwgb24gR05VIG5tLCBidXQgaWY6CisgICMKKyAg IyBhLiAkaW1hZ2Ugc3RhcnRzIHdpdGggW0JiU3NQcF0gKGZvciBleGFtcGxlLCBiaW4vZm9vL2Jh ciksIEFORAorICAjIGIuIHlvdSBoYXZlIGEub3V0IGluIHlvdXIgY3VycmVudCBkaXJlY3Rvcnkg KGEgbm90IHVuY29tbW9uIG9jY3VycmVuY2UpCisgICMKKyAgIyB0aGVuICJubSAtZiAkaW1hZ2Ui IHN1Y2NlZWRzIGJlY2F1c2UgLWYgb25seSBsb29rcyBhdCB0aGUgZmlyc3QgbGV0dGVyIG9mCisg ICMgdGhlIGFyZ3VtZW50LCB3aGljaCBsb29rcyB2YWxpZCBiZWNhdXNlIGl0J3MgW0JiU3NQcF0s IGFuZCB0aGVuIHNpbmNlCisgICMgdGhlcmUncyBubyBpbWFnZSBwcm92aWRlZCwgaXQgbG9va3Mg Zm9yIGEub3V0IGFuZCBmaW5kcyBpdC4KKyAgIworICAjIFRoaXMgcmVnZXggbWFrZXMgc3VyZSB0 aGF0ICRpbWFnZSBzdGFydHMgd2l0aCAuIG9yIC8sIGZvcmNpbmcgdGhlIC1mCisgICMgcGFyc2lu ZyB0byBmYWlsIHNpbmNlIC4gYW5kIC8gYXJlIG5vdCB2YWxpZCBmb3JtYXRzLgorICAkaW1hZ2Ug PX4gcyNeW14vXSMuLyQmIzsKKworICAjIEZvciBsaWJjIGxpYnJhcmllcywgdGhlIGNvcHkgaW4g L3Vzci9saWIvZGVidWcgY29udGFpbnMgZGVidWdnaW5nIHN5bWJvbHMKKyAgbXkgJGRlYnVnZ2lu ZyA9IERlYnVnZ2luZ0xpYnJhcnkoJGltYWdlKTsKKyAgaWYgKCRkZWJ1Z2dpbmcpIHsKKyAgICAk aW1hZ2UgPSAkZGVidWdnaW5nOworICB9CisKKyAgbXkgJG5tID0gJG9ial90b29sX21hcHsibm0i fTsKKyAgbXkgJGNwcGZpbHQgPSAkb2JqX3Rvb2xfbWFweyJjKytmaWx0In07CisKKyAgIyBubSBj YW4gZmFpbCBmb3IgdHdvIHJlYXNvbnM6IDEpICRpbWFnZSBpc24ndCBhIGRlYnVnIGxpYnJhcnk7 IDIpIG5tCisgICMgYmluYXJ5IGRvZXNuJ3Qgc3VwcG9ydCAtLWRlbWFuZ2xlLiAgSW4gYWRkaXRp b24sIGZvciBPUyBYIHdlIG5lZWQKKyAgIyB0byB1c2UgdGhlIC1mIGZsYWcgdG8gZ2V0ICdmbGF0 JyBubSBvdXRwdXQgKG90aGVyd2lzZSB3ZSBkb24ndCBzb3J0CisgICMgcHJvcGVybHkgYW5kIGdl dCBpbmNvcnJlY3QgcmVzdWx0cykuICBVbmZvcnR1bmF0ZWx5LCBHTlUgbm0gdXNlcyAtZgorICAj IGluIGFuIGluY29tcGF0aWJsZSB3YXkuICBTbyBmaXJzdCB3ZSB0ZXN0IHdoZXRoZXIgb3VyIG5t IHN1cHBvcnRzCisgICMgLS1kZW1hbmdsZSBhbmQgLWYuCisgIG15ICRkZW1hbmdsZV9mbGFnID0g IiI7CisgIG15ICRjcHBmaWx0X2ZsYWcgPSAiIjsKKyAgbXkgJHRvX2Rldm51bGwgPSAiPiRkZXZf bnVsbCAyPiYxIjsKKyAgaWYgKHN5c3RlbShTaGVsbEVzY2FwZSgkbm0sICItLWRlbWFuZ2xlIiwg JGltYWdlKSAuICR0b19kZXZudWxsKSA9PSAwKSB7CisgICAgIyBJbiB0aGlzIG1vZGUsIHdlIGRv ICJubSAtLWRlbWFuZ2xlIDxmb28+IgorICAgICRkZW1hbmdsZV9mbGFnID0gIi0tZGVtYW5nbGUi OworICAgICRjcHBmaWx0X2ZsYWcgPSAiIjsKKyAgfSBlbHNpZiAoc3lzdGVtKFNoZWxsRXNjYXBl KCRjcHBmaWx0LCAkaW1hZ2UpIC4gJHRvX2Rldm51bGwpID09IDApIHsKKyAgICAjIEluIHRoaXMg bW9kZSwgd2UgZG8gIm5tIDxmb28+IHwgYysrZmlsdCIKKyAgICAkY3BwZmlsdF9mbGFnID0gIiB8 ICIgLiBTaGVsbEVzY2FwZSgkY3BwZmlsdCk7CisgIH07CisgIG15ICRmbGF0dGVuX2ZsYWcgPSAi IjsKKyAgaWYgKHN5c3RlbShTaGVsbEVzY2FwZSgkbm0sICItZiIsICRpbWFnZSkgLiAkdG9fZGV2 bnVsbCkgPT0gMCkgeworICAgICRmbGF0dGVuX2ZsYWcgPSAiLWYiOworICB9CisKKyAgIyBGaW5h bGx5LCBpbiB0aGUgY2FzZSAkaW1hZ2llIGlzbid0IGEgZGVidWcgbGlicmFyeSwgd2UgdHJ5IGFn YWluIHdpdGgKKyAgIyAtRCB0byBhdCBsZWFzdCBnZXQgKmV4cG9ydGVkKiBzeW1ib2xzLiAgSWYg d2UgY2FuJ3QgdXNlIC0tZGVtYW5nbGUsCisgICMgd2UgdXNlIGMrK2ZpbHQgaW5zdGVhZCwgaWYg aXQgZXhpc3RzIG9uIHRoaXMgc3lzdGVtLgorICBteSBAbm1fY29tbWFuZHMgPSAoU2hlbGxFc2Nh cGUoJG5tLCAiLW4iLCAkZmxhdHRlbl9mbGFnLCAkZGVtYW5nbGVfZmxhZywKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICRpbWFnZSkgLiAiIDI+JGRldl9udWxsICRjcHBmaWx0X2Zs YWciLAorICAgICAgICAgICAgICAgICAgICAgU2hlbGxFc2NhcGUoJG5tLCAiLUQiLCAiLW4iLCAk ZmxhdHRlbl9mbGFnLCAkZGVtYW5nbGVfZmxhZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICRpbWFnZSkgLiAiIDI+JGRldl9udWxsICRjcHBmaWx0X2ZsYWciLAorICAgICAgICAg ICAgICAgICAgICAgIyA2bm0gaXMgZm9yIEdvIGJpbmFyaWVzCisgICAgICAgICAgICAgICAgICAg ICBTaGVsbEVzY2FwZSgiNm5tIiwgIiRpbWFnZSIpIC4gIiAyPiRkZXZfbnVsbCB8IHNvcnQiLAor ICAgICAgICAgICAgICAgICAgICAgKTsKKworICAjIElmIHRoZSBleGVjdXRhYmxlIGlzIGFuIE1T IFdpbmRvd3MgUERCLWZvcm1hdCBleGVjdXRhYmxlLCB3ZSdsbAorICAjIGhhdmUgc2V0IHVwIG9i al90b29sX21hcCgibm1fcGRiIikuICBJbiB0aGlzIGNhc2UsIHdlIGFjdHVhbGx5CisgICMgd2Fu dCB0byB1c2UgYm90aCB1bml4IG5tIGFuZCB3aW5kb3dzLXNwZWNpZmljIG5tX3BkYiwgc2luY2UK KyAgIyBQREItZm9ybWF0IGV4ZWN1dGFibGVzIGNhbiBhcHBhcmVudGx5IGluY2x1ZGUgZHdhcmYg Lm8gZmlsZXMuCisgIGlmIChleGlzdHMgJG9ial90b29sX21hcHsibm1fcGRiIn0pIHsKKyAgICBw dXNoKEBubV9jb21tYW5kcywKKyAgICAgICAgIFNoZWxsRXNjYXBlKCRvYmpfdG9vbF9tYXB7Im5t X3BkYiJ9LCAiLS1kZW1hbmdsZSIsICRpbWFnZSkKKyAgICAgICAgIC4gIiAyPiRkZXZfbnVsbCIp OworICB9CisKKyAgZm9yZWFjaCBteSAkbm1fY29tbWFuZCAoQG5tX2NvbW1hbmRzKSB7CisgICAg bXkgJHN5bWJvbF90YWJsZSA9IEdldFByb2NlZHVyZUJvdW5kYXJpZXNWaWFObSgkbm1fY29tbWFu ZCwgJHJlZ2V4cCk7CisgICAgcmV0dXJuICRzeW1ib2xfdGFibGUgaWYgKCV7JHN5bWJvbF90YWJs ZX0pOworICB9CisgIG15ICRzeW1ib2xfdGFibGUgPSB7fTsKKyAgcmV0dXJuICRzeW1ib2xfdGFi bGU7Cit9CisKKworIyBUaGUgdGVzdCB2ZWN0b3JzIGZvciBBZGRyZXNzQWRkL1N1Yi9JbmMgYXJl IDgtMTYtbmliYmxlIGhleCBzdHJpbmdzLgorIyBUbyBtYWtlIHRoZW0gbW9yZSByZWFkYWJsZSwg d2UgYWRkIHVuZGVyc2NvcmVzIGF0IGludGVyZXN0aW5nIHBsYWNlcy4KKyMgVGhpcyByb3V0aW5l IHJlbW92ZXMgdGhlIHVuZGVyc2NvcmVzLCBwcm9kdWNpbmcgdGhlIGNhbm9uaWNhbCByZXByZXNl bnRhdGlvbgorIyB1c2VkIGJ5IGplcHJvZiB0byByZXByZXNlbnQgYWRkcmVzc2VzLCBwYXJ0aWN1 bGFybHkgaW4gdGhlIHRlc3RlZCByb3V0aW5lcy4KK3N1YiBDYW5vbmljYWxIZXggeworICBteSAk YXJnID0gc2hpZnQ7CisgIHJldHVybiBqb2luICcnLCAoc3BsaXQgJ18nLCRhcmcpOworfQorCisK KyMgVW5pdCB0ZXN0IGZvciBBZGRyZXNzQWRkOgorc3ViIEFkZHJlc3NBZGRVbml0VGVzdCB7Cisg IG15ICR0ZXN0X2RhdGFfOCA9IHNoaWZ0OworICBteSAkdGVzdF9kYXRhXzE2ID0gc2hpZnQ7Cisg IG15ICRlcnJvcl9jb3VudCA9IDA7CisgIG15ICRmYWlsX2NvdW50ID0gMDsKKyAgbXkgJHBhc3Nf Y291bnQgPSAwOworICAjIHByaW50IFNUREVSUiAiQWRkcmVzc0FkZFVuaXRUZXN0OiAiLCAxKyQj eyR0ZXN0X2RhdGFfOH0sICIgdGVzdHNcbiI7CisKKyAgIyBGaXJzdCBhIGZldyA4LW5pYmJsZSBh ZGRyZXNzZXMuICBOb3RlIHRoYXQgdGhpcyBpbXBsZW1lbnRhdGlvbiB1c2VzCisgICMgcGxhaW4g b2xkIGFyaXRobWV0aWMsIHNvIGEgcXVpY2sgc2FuaXR5IGNoZWNrIGFsb25nIHdpdGggdmVyaWZ5 aW5nIHdoYXQKKyAgIyBoYXBwZW5zIHRvIG92ZXJmbG93ICh3ZSB3YW50IGl0IHRvIHdyYXApOgor ICAkYWRkcmVzc19sZW5ndGggPSA4OworICBmb3JlYWNoIG15ICRyb3cgKEB7JHRlc3RfZGF0YV84 fSkgeworICAgIGlmICgkbWFpbjo6b3B0X2RlYnVnIGFuZCAkbWFpbjo6b3B0X3Rlc3QpIHsgcHJp bnQgU1RERVJSICJAeyRyb3d9XG4iOyB9CisgICAgbXkgJHN1bSA9IEFkZHJlc3NBZGQgKCRyb3ct PlswXSwgJHJvdy0+WzFdKTsKKyAgICBpZiAoJHN1bSBuZSAkcm93LT5bMl0pIHsKKyAgICAgIHBy aW50ZiBTVERFUlIgIkVSUk9SOiAlcyAhPSAlcyArICVzID0gJXNcbiIsICRzdW0sCisgICAgICAg ICAgICAgJHJvdy0+WzBdLCAkcm93LT5bMV0sICRyb3ctPlsyXTsKKyAgICAgICsrJGZhaWxfY291 bnQ7CisgICAgfSBlbHNlIHsKKyAgICAgICsrJHBhc3NfY291bnQ7CisgICAgfQorICB9CisgIHBy aW50ZiBTVERFUlIgIkFkZHJlc3NBZGQgMzItYml0IHRlc3RzOiAlZCBwYXNzZXMsICVkIGZhaWx1 cmVzXG4iLAorICAgICAgICAgJHBhc3NfY291bnQsICRmYWlsX2NvdW50OworICAkZXJyb3JfY291 bnQgPSAkZmFpbF9jb3VudDsKKyAgJGZhaWxfY291bnQgPSAwOworICAkcGFzc19jb3VudCA9IDA7 CisKKyAgIyBOb3cgMTYtbmliYmxlIGFkZHJlc3Nlcy4KKyAgJGFkZHJlc3NfbGVuZ3RoID0gMTY7 CisgIGZvcmVhY2ggbXkgJHJvdyAoQHskdGVzdF9kYXRhXzE2fSkgeworICAgIGlmICgkbWFpbjo6 b3B0X2RlYnVnIGFuZCAkbWFpbjo6b3B0X3Rlc3QpIHsgcHJpbnQgU1RERVJSICJAeyRyb3d9XG4i OyB9CisgICAgbXkgJHN1bSA9IEFkZHJlc3NBZGQgKENhbm9uaWNhbEhleCgkcm93LT5bMF0pLCBD YW5vbmljYWxIZXgoJHJvdy0+WzFdKSk7CisgICAgbXkgJGV4cGVjdGVkID0gam9pbiAnJywgKHNw bGl0ICdfJywkcm93LT5bMl0pOworICAgIGlmICgkc3VtIG5lIENhbm9uaWNhbEhleCgkcm93LT5b Ml0pKSB7CisgICAgICBwcmludGYgU1RERVJSICJFUlJPUjogJXMgIT0gJXMgKyAlcyA9ICVzXG4i LCAkc3VtLAorICAgICAgICAgICAgICRyb3ctPlswXSwgJHJvdy0+WzFdLCAkcm93LT5bMl07Cisg ICAgICArKyRmYWlsX2NvdW50OworICAgIH0gZWxzZSB7CisgICAgICArKyRwYXNzX2NvdW50Owor ICAgIH0KKyAgfQorICBwcmludGYgU1RERVJSICJBZGRyZXNzQWRkIDY0LWJpdCB0ZXN0czogJWQg cGFzc2VzLCAlZCBmYWlsdXJlc1xuIiwKKyAgICAgICAgICRwYXNzX2NvdW50LCAkZmFpbF9jb3Vu dDsKKyAgJGVycm9yX2NvdW50ICs9ICRmYWlsX2NvdW50OworCisgIHJldHVybiAkZXJyb3JfY291 bnQ7Cit9CisKKworIyBVbml0IHRlc3QgZm9yIEFkZHJlc3NTdWI6CitzdWIgQWRkcmVzc1N1YlVu aXRUZXN0IHsKKyAgbXkgJHRlc3RfZGF0YV84ID0gc2hpZnQ7CisgIG15ICR0ZXN0X2RhdGFfMTYg PSBzaGlmdDsKKyAgbXkgJGVycm9yX2NvdW50ID0gMDsKKyAgbXkgJGZhaWxfY291bnQgPSAwOwor ICBteSAkcGFzc19jb3VudCA9IDA7CisgICMgcHJpbnQgU1RERVJSICJBZGRyZXNzU3ViVW5pdFRl c3Q6ICIsIDErJCN7JHRlc3RfZGF0YV84fSwgIiB0ZXN0c1xuIjsKKworICAjIEZpcnN0IGEgZmV3 IDgtbmliYmxlIGFkZHJlc3Nlcy4gIE5vdGUgdGhhdCB0aGlzIGltcGxlbWVudGF0aW9uIHVzZXMK KyAgIyBwbGFpbiBvbGQgYXJpdGhtZXRpYywgc28gYSBxdWljayBzYW5pdHkgY2hlY2sgYWxvbmcg d2l0aCB2ZXJpZnlpbmcgd2hhdAorICAjIGhhcHBlbnMgdG8gb3ZlcmZsb3cgKHdlIHdhbnQgaXQg dG8gd3JhcCk6CisgICRhZGRyZXNzX2xlbmd0aCA9IDg7CisgIGZvcmVhY2ggbXkgJHJvdyAoQHsk dGVzdF9kYXRhXzh9KSB7CisgICAgaWYgKCRtYWluOjpvcHRfZGVidWcgYW5kICRtYWluOjpvcHRf dGVzdCkgeyBwcmludCBTVERFUlIgIkB7JHJvd31cbiI7IH0KKyAgICBteSAkc3VtID0gQWRkcmVz c1N1YiAoJHJvdy0+WzBdLCAkcm93LT5bMV0pOworICAgIGlmICgkc3VtIG5lICRyb3ctPlszXSkg eworICAgICAgcHJpbnRmIFNUREVSUiAiRVJST1I6ICVzICE9ICVzIC0gJXMgPSAlc1xuIiwgJHN1 bSwKKyAgICAgICAgICAgICAkcm93LT5bMF0sICRyb3ctPlsxXSwgJHJvdy0+WzNdOworICAgICAg KyskZmFpbF9jb3VudDsKKyAgICB9IGVsc2UgeworICAgICAgKyskcGFzc19jb3VudDsKKyAgICB9 CisgIH0KKyAgcHJpbnRmIFNUREVSUiAiQWRkcmVzc1N1YiAzMi1iaXQgdGVzdHM6ICVkIHBhc3Nl cywgJWQgZmFpbHVyZXNcbiIsCisgICAgICAgICAkcGFzc19jb3VudCwgJGZhaWxfY291bnQ7Cisg ICRlcnJvcl9jb3VudCA9ICRmYWlsX2NvdW50OworICAkZmFpbF9jb3VudCA9IDA7CisgICRwYXNz X2NvdW50ID0gMDsKKworICAjIE5vdyAxNi1uaWJibGUgYWRkcmVzc2VzLgorICAkYWRkcmVzc19s ZW5ndGggPSAxNjsKKyAgZm9yZWFjaCBteSAkcm93IChAeyR0ZXN0X2RhdGFfMTZ9KSB7CisgICAg aWYgKCRtYWluOjpvcHRfZGVidWcgYW5kICRtYWluOjpvcHRfdGVzdCkgeyBwcmludCBTVERFUlIg IkB7JHJvd31cbiI7IH0KKyAgICBteSAkc3VtID0gQWRkcmVzc1N1YiAoQ2Fub25pY2FsSGV4KCRy b3ctPlswXSksIENhbm9uaWNhbEhleCgkcm93LT5bMV0pKTsKKyAgICBpZiAoJHN1bSBuZSBDYW5v bmljYWxIZXgoJHJvdy0+WzNdKSkgeworICAgICAgcHJpbnRmIFNUREVSUiAiRVJST1I6ICVzICE9 ICVzIC0gJXMgPSAlc1xuIiwgJHN1bSwKKyAgICAgICAgICAgICAkcm93LT5bMF0sICRyb3ctPlsx XSwgJHJvdy0+WzNdOworICAgICAgKyskZmFpbF9jb3VudDsKKyAgICB9IGVsc2UgeworICAgICAg KyskcGFzc19jb3VudDsKKyAgICB9CisgIH0KKyAgcHJpbnRmIFNUREVSUiAiQWRkcmVzc1N1YiA2 NC1iaXQgdGVzdHM6ICVkIHBhc3NlcywgJWQgZmFpbHVyZXNcbiIsCisgICAgICAgICAkcGFzc19j b3VudCwgJGZhaWxfY291bnQ7CisgICRlcnJvcl9jb3VudCArPSAkZmFpbF9jb3VudDsKKworICBy ZXR1cm4gJGVycm9yX2NvdW50OworfQorCisKKyMgVW5pdCB0ZXN0IGZvciBBZGRyZXNzSW5jOgor c3ViIEFkZHJlc3NJbmNVbml0VGVzdCB7CisgIG15ICR0ZXN0X2RhdGFfOCA9IHNoaWZ0OworICBt eSAkdGVzdF9kYXRhXzE2ID0gc2hpZnQ7CisgIG15ICRlcnJvcl9jb3VudCA9IDA7CisgIG15ICRm YWlsX2NvdW50ID0gMDsKKyAgbXkgJHBhc3NfY291bnQgPSAwOworICAjIHByaW50IFNUREVSUiAi QWRkcmVzc0luY1VuaXRUZXN0OiAiLCAxKyQjeyR0ZXN0X2RhdGFfOH0sICIgdGVzdHNcbiI7CisK KyAgIyBGaXJzdCBhIGZldyA4LW5pYmJsZSBhZGRyZXNzZXMuICBOb3RlIHRoYXQgdGhpcyBpbXBs ZW1lbnRhdGlvbiB1c2VzCisgICMgcGxhaW4gb2xkIGFyaXRobWV0aWMsIHNvIGEgcXVpY2sgc2Fu aXR5IGNoZWNrIGFsb25nIHdpdGggdmVyaWZ5aW5nIHdoYXQKKyAgIyBoYXBwZW5zIHRvIG92ZXJm bG93ICh3ZSB3YW50IGl0IHRvIHdyYXApOgorICAkYWRkcmVzc19sZW5ndGggPSA4OworICBmb3Jl YWNoIG15ICRyb3cgKEB7JHRlc3RfZGF0YV84fSkgeworICAgIGlmICgkbWFpbjo6b3B0X2RlYnVn IGFuZCAkbWFpbjo6b3B0X3Rlc3QpIHsgcHJpbnQgU1RERVJSICJAeyRyb3d9XG4iOyB9CisgICAg bXkgJHN1bSA9IEFkZHJlc3NJbmMgKCRyb3ctPlswXSk7CisgICAgaWYgKCRzdW0gbmUgJHJvdy0+ WzRdKSB7CisgICAgICBwcmludGYgU1RERVJSICJFUlJPUjogJXMgIT0gJXMgKyAxID0gJXNcbiIs ICRzdW0sCisgICAgICAgICAgICAgJHJvdy0+WzBdLCAkcm93LT5bNF07CisgICAgICArKyRmYWls X2NvdW50OworICAgIH0gZWxzZSB7CisgICAgICArKyRwYXNzX2NvdW50OworICAgIH0KKyAgfQor ICBwcmludGYgU1RERVJSICJBZGRyZXNzSW5jIDMyLWJpdCB0ZXN0czogJWQgcGFzc2VzLCAlZCBm YWlsdXJlc1xuIiwKKyAgICAgICAgICRwYXNzX2NvdW50LCAkZmFpbF9jb3VudDsKKyAgJGVycm9y X2NvdW50ID0gJGZhaWxfY291bnQ7CisgICRmYWlsX2NvdW50ID0gMDsKKyAgJHBhc3NfY291bnQg PSAwOworCisgICMgTm93IDE2LW5pYmJsZSBhZGRyZXNzZXMuCisgICRhZGRyZXNzX2xlbmd0aCA9 IDE2OworICBmb3JlYWNoIG15ICRyb3cgKEB7JHRlc3RfZGF0YV8xNn0pIHsKKyAgICBpZiAoJG1h aW46Om9wdF9kZWJ1ZyBhbmQgJG1haW46Om9wdF90ZXN0KSB7IHByaW50IFNUREVSUiAiQHskcm93 fVxuIjsgfQorICAgIG15ICRzdW0gPSBBZGRyZXNzSW5jIChDYW5vbmljYWxIZXgoJHJvdy0+WzBd KSk7CisgICAgaWYgKCRzdW0gbmUgQ2Fub25pY2FsSGV4KCRyb3ctPls0XSkpIHsKKyAgICAgIHBy aW50ZiBTVERFUlIgIkVSUk9SOiAlcyAhPSAlcyArIDEgPSAlc1xuIiwgJHN1bSwKKyAgICAgICAg ICAgICAkcm93LT5bMF0sICRyb3ctPls0XTsKKyAgICAgICsrJGZhaWxfY291bnQ7CisgICAgfSBl bHNlIHsKKyAgICAgICsrJHBhc3NfY291bnQ7CisgICAgfQorICB9CisgIHByaW50ZiBTVERFUlIg IkFkZHJlc3NJbmMgNjQtYml0IHRlc3RzOiAlZCBwYXNzZXMsICVkIGZhaWx1cmVzXG4iLAorICAg ICAgICAgJHBhc3NfY291bnQsICRmYWlsX2NvdW50OworICAkZXJyb3JfY291bnQgKz0gJGZhaWxf Y291bnQ7CisKKyAgcmV0dXJuICRlcnJvcl9jb3VudDsKK30KKworCisjIERyaXZlciBmb3IgdW5p dCB0ZXN0cy4KKyMgQ3VycmVudGx5IGp1c3QgdGhlIGFkZHJlc3MgYWRkL3N1YnRyYWN0L2luY3Jl bWVudCByb3V0aW5lcyBmb3IgNjQtYml0Lgorc3ViIFJ1blVuaXRUZXN0cyB7CisgIG15ICRlcnJv cl9jb3VudCA9IDA7CisKKyAgIyBUaGlzIGlzIGEgbGlzdCBvZiB0dXBsZXMgW2EsIGIsIGErYiwg YS1iLCBhKzFdCisgIG15ICR1bml0X3Rlc3RfZGF0YV84ID0gWworICAgIFtxdyhhYWFhYWFhYSA1 MDUwNTA1MCBmYWZhZmFmYSA1YTVhNWE1YSBhYWFhYWFhYildLAorICAgIFtxdyg1MDUwNTA1MCBh YWFhYWFhYSBmYWZhZmFmYSBhNWE1YTVhNiA1MDUwNTA1MSldLAorICAgIFtxdyhmZmZmZmZmZiBh YWFhYWFhYSBhYWFhYWFhOSA1NTU1NTU1NSAwMDAwMDAwMCldLAorICAgIFtxdygwMDAwMDAwMSBm ZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMiAwMDAwMDAwMildLAorICAgIFtxdygwMDAwMDAwMSBm ZmZmZmZmMCBmZmZmZmZmMSAwMDAwMDAxMSAwMDAwMDAwMildLAorICBdOworICBteSAkdW5pdF90 ZXN0X2RhdGFfMTYgPSBbCisgICAgIyBUaGUgaW1wbGVtZW50YXRpb24gaGFuZGxlcyBkYXRhIGlu IDctbmliYmxlIGNodW5rcywgc28gdGhvc2UgYXJlIHRoZQorICAgICMgaW50ZXJlc3RpbmcgYm91 bmRhcmllcy4KKyAgICBbcXcoYWFhYWFhYWEgNTA1MDUwNTAKKyAgICAgICAgMDBfMDAwMDAwZl9h ZmFmYWZhIDAwXzAwMDAwMDVfYTVhNWE1YSAwMF8wMDAwMDBhX2FhYWFhYWIpXSwKKyAgICBbcXco NTA1MDUwNTAgYWFhYWFhYWEKKyAgICAgICAgMDBfMDAwMDAwZl9hZmFmYWZhIGZmX2ZmZmZmZmFf NWE1YTVhNiAwMF8wMDAwMDA1XzA1MDUwNTEpXSwKKyAgICBbcXcoZmZmZmZmZmYgYWFhYWFhYWEK KyAgICAgICAgMDBfMDAwMDAxYV9hYWFhYWE5IDAwXzAwMDAwMDVfNTU1NTU1NSAwMF8wMDAwMDEw XzAwMDAwMDApXSwKKyAgICBbcXcoMDAwMDAwMDEgZmZmZmZmZmYKKyAgICAgICAgMDBfMDAwMDAx MF8wMDAwMDAwIGZmX2ZmZmZmZjBfMDAwMDAwMiAwMF8wMDAwMDAwXzAwMDAwMDIpXSwKKyAgICBb cXcoMDAwMDAwMDEgZmZmZmZmZjAKKyAgICAgICAgMDBfMDAwMDAwZl9mZmZmZmYxIGZmX2ZmZmZm ZjBfMDAwMDAxMSAwMF8wMDAwMDAwXzAwMDAwMDIpXSwKKworICAgIFtxdygwMF9hMDAwMDBhX2Fh YWFhYWEgNTA1MDUwNTAKKyAgICAgICAgMDBfYTAwMDAwZl9hZmFmYWZhIDAwX2EwMDAwMDVfYTVh NWE1YSAwMF9hMDAwMDBhX2FhYWFhYWIpXSwKKyAgICBbcXcoMGZfZmZmMDAwNV8wNTA1MDUwIGFh YWFhYWFhCisgICAgICAgIDBmX2ZmZjAwMGZfYWZhZmFmYSAwZl9mZmVmZmZhXzVhNWE1YTYgMGZf ZmZmMDAwNV8wNTA1MDUxKV0sCisgICAgW3F3KDAwXzAwMDAwMGZfZmZmZmZmZiAwMV84MDAwMDBh X2FhYWFhYWEKKyAgICAgICAgMDFfODAwMDAxYV9hYWFhYWE5IGZlXzgwMDAwMDVfNTU1NTU1NSAw MF8wMDAwMDEwXzAwMDAwMDApXSwKKyAgICBbcXcoMDBfMDAwMDAwMF8wMDAwMDAxIGZmX2ZmZmZm ZmZfZmZmZmZmZgorICAgICAgICAwMF8wMDAwMDAwXzAwMDAwMDAgMDBfMDAwMDAwMF8wMDAwMDAy IDAwXzAwMDAwMDBfMDAwMDAwMildLAorICAgIFtxdygwMF8wMDAwMDAwXzAwMDAwMDEgZmZfZmZm ZmZmZl9mZmZmZmYwCisgICAgICAgIGZmX2ZmZmZmZmZfZmZmZmZmMSAwMF8wMDAwMDAwXzAwMDAw MTEgMDBfMDAwMDAwMF8wMDAwMDAyKV0sCisgIF07CisKKyAgJGVycm9yX2NvdW50ICs9IEFkZHJl c3NBZGRVbml0VGVzdCgkdW5pdF90ZXN0X2RhdGFfOCwgJHVuaXRfdGVzdF9kYXRhXzE2KTsKKyAg JGVycm9yX2NvdW50ICs9IEFkZHJlc3NTdWJVbml0VGVzdCgkdW5pdF90ZXN0X2RhdGFfOCwgJHVu aXRfdGVzdF9kYXRhXzE2KTsKKyAgJGVycm9yX2NvdW50ICs9IEFkZHJlc3NJbmNVbml0VGVzdCgk dW5pdF90ZXN0X2RhdGFfOCwgJHVuaXRfdGVzdF9kYXRhXzE2KTsKKyAgaWYgKCRlcnJvcl9jb3Vu dCA+IDApIHsKKyAgICBwcmludCBTVERFUlIgJGVycm9yX2NvdW50LCAiIGVycm9yczogRkFJTEVE XG4iOworICB9IGVsc2UgeworICAgIHByaW50IFNUREVSUiAiUEFTU1xuIjsKKyAgfQorICBleGl0 ICgkZXJyb3JfY291bnQpOworfQoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxk L2plbWFsbG9jLTUuMy4wL2J1aWxkLWF1eC9jb25maWcuZ3Vlc3MgYi8zODktZHMtYmFzZS0zLjMu MC1idWlsZC9qZW1hbGxvYy01LjMuMC9idWlsZC1hdXgvY29uZmlnLmd1ZXNzCm5ldyBmaWxlIG1v ZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmY3NzI3MDIKLS0tIC9kZXYvbnVsbAorKysgYi8zODkt ZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9idWlsZC1hdXgvY29uZmlnLmd1ZXNz CkBAIC0wLDAgKzEsMTcwMSBAQAorIyEgL2Jpbi9zaAorIyBBdHRlbXB0IHRvIGd1ZXNzIGEgY2Fu b25pY2FsIHN5c3RlbSBuYW1lLgorIyAgIENvcHlyaWdodCAxOTkyLTIwMjEgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uLCBJbmMuCisKK3RpbWVzdGFtcD0nMjAyMS0wMS0wMScKKworIyBUaGlzIGZp bGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlm eSBpdAorIyB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIg dmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl ciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisjIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyMgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVj ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3 aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5z ZXMvPi4KKyMKKyMgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UsIGlmIHlvdQorIyBkaXN0cmlidXRlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEg cHJvZ3JhbSB0aGF0IGNvbnRhaW5zIGEKKyMgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVk IGJ5IEF1dG9jb25mLCB5b3UgbWF5IGluY2x1ZGUgaXQgdW5kZXIKKyMgdGhlIHNhbWUgZGlzdHJp YnV0aW9uIHRlcm1zIHRoYXQgeW91IHVzZSBmb3IgdGhlIHJlc3Qgb2YgdGhhdAorIyBwcm9ncmFt LiAgVGhpcyBFeGNlcHRpb24gaXMgYW4gYWRkaXRpb25hbCBwZXJtaXNzaW9uIHVuZGVyIHNlY3Rp b24gNworIyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMyAoIkdQ THYzIikuCisjCisjIE9yaWdpbmFsbHkgd3JpdHRlbiBieSBQZXIgQm90aG5lcjsgbWFpbnRhaW5l ZCBzaW5jZSAyMDAwIGJ5IEJlbiBFbGxpc3Rvbi4KKyMKKyMgWW91IGNhbiBnZXQgdGhlIGxhdGVz dCB2ZXJzaW9uIG9mIHRoaXMgc2NyaXB0IGZyb206CisjIGh0dHBzOi8vZ2l0LnNhdmFubmFoLmdu dS5vcmcvY2dpdC9jb25maWcuZ2l0L3BsYWluL2NvbmZpZy5ndWVzcworIworIyBQbGVhc2Ugc2Vu ZCBwYXRjaGVzIHRvIDxjb25maWctcGF0Y2hlc0BnbnUub3JnPi4KKworCittZT0kKGVjaG8gIiQw IiB8IHNlZCAtZSAncywuKi8sLCcpCisKK3VzYWdlPSJcCitVc2FnZTogJDAgW09QVElPTl0KKwor T3V0cHV0IHRoZSBjb25maWd1cmF0aW9uIG5hbWUgb2YgdGhlIHN5c3RlbSBcYCRtZScgaXMgcnVu IG9uLgorCitPcHRpb25zOgorICAtaCwgLS1oZWxwICAgICAgICAgcHJpbnQgdGhpcyBoZWxwLCB0 aGVuIGV4aXQKKyAgLXQsIC0tdGltZS1zdGFtcCAgIHByaW50IGRhdGUgb2YgbGFzdCBtb2RpZmlj YXRpb24sIHRoZW4gZXhpdAorICAtdiwgLS12ZXJzaW9uICAgICAgcHJpbnQgdmVyc2lvbiBudW1i ZXIsIHRoZW4gZXhpdAorCitSZXBvcnQgYnVncyBhbmQgcGF0Y2hlcyB0byA8Y29uZmlnLXBhdGNo ZXNAZ251Lm9yZz4uIgorCit2ZXJzaW9uPSJcCitHTlUgY29uZmlnLmd1ZXNzICgkdGltZXN0YW1w KQorCitPcmlnaW5hbGx5IHdyaXR0ZW4gYnkgUGVyIEJvdGhuZXIuCitDb3B5cmlnaHQgMTk5Mi0y MDIxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGlzIGZyZWUgc29mdHdh cmU7IHNlZSB0aGUgc291cmNlIGZvciBjb3B5aW5nIGNvbmRpdGlvbnMuICBUaGVyZSBpcyBOTwor d2FycmFudHk7IG5vdCBldmVuIGZvciBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UuIgorCitoZWxwPSIKK1RyeSBcYCRtZSAtLWhlbHAnIGZvciBtb3Jl IGluZm9ybWF0aW9uLiIKKworIyBQYXJzZSBjb21tYW5kIGxpbmUKK3doaWxlIHRlc3QgJCMgLWd0 IDAgOyBkbworICBjYXNlICQxIGluCisgICAgLS10aW1lLXN0YW1wIHwgLS10aW1lKiB8IC10ICkK KyAgICAgICBlY2hvICIkdGltZXN0YW1wIiA7IGV4aXQgOzsKKyAgICAtLXZlcnNpb24gfCAtdiAp CisgICAgICAgZWNobyAiJHZlcnNpb24iIDsgZXhpdCA7OworICAgIC0taGVscCB8IC0taCogfCAt aCApCisgICAgICAgZWNobyAiJHVzYWdlIjsgZXhpdCA7OworICAgIC0tICkgICAgICMgU3RvcCBv cHRpb24gcHJvY2Vzc2luZworICAgICAgIHNoaWZ0OyBicmVhayA7OworICAgIC0gKQkjIFVzZSBz dGRpbiBhcyBpbnB1dC4KKyAgICAgICBicmVhayA7OworICAgIC0qICkKKyAgICAgICBlY2hvICIk bWU6IGludmFsaWQgb3B0aW9uICQxJGhlbHAiID4mMgorICAgICAgIGV4aXQgMSA7OworICAgICog KQorICAgICAgIGJyZWFrIDs7CisgIGVzYWMKK2RvbmUKKworaWYgdGVzdCAkIyAhPSAwOyB0aGVu CisgIGVjaG8gIiRtZTogdG9vIG1hbnkgYXJndW1lbnRzJGhlbHAiID4mMgorICBleGl0IDEKK2Zp CisKKyMgQ0NfRk9SX0JVSUxEIC0tIGNvbXBpbGVyIHVzZWQgYnkgdGhpcyBzY3JpcHQuIE5vdGUg dGhhdCB0aGUgdXNlIG9mIGEKKyMgY29tcGlsZXIgdG8gYWlkIGluIHN5c3RlbSBkZXRlY3Rpb24g aXMgZGlzY291cmFnZWQgYXMgaXQgcmVxdWlyZXMKKyMgdGVtcG9yYXJ5IGZpbGVzIHRvIGJlIGNy ZWF0ZWQgYW5kLCBhcyB5b3UgY2FuIHNlZSBiZWxvdywgaXQgaXMgYQorIyBoZWFkYWNoZSB0byBk ZWFsIHdpdGggaW4gYSBwb3J0YWJsZSBmYXNoaW9uLgorCisjIEhpc3RvcmljYWxseSwgYENDX0ZP Ul9CVUlMRCcgdXNlZCB0byBiZSBuYW1lZCBgSE9TVF9DQycuIFdlIHN0aWxsCisjIHVzZSBgSE9T VF9DQycgaWYgZGVmaW5lZCwgYnV0IGl0IGlzIGRlcHJlY2F0ZWQuCisKKyMgUG9ydGFibGUgdG1w IGRpcmVjdG9yeSBjcmVhdGlvbiBpbnNwaXJlZCBieSB0aGUgQXV0b2NvbmYgdGVhbS4KKwordG1w PQorIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMTcyCit0cmFwICd0ZXN0IC16ICIkdG1wIiB8fCBy bSAtZnIgIiR0bXAiJyAwIDEgMiAxMyAxNQorCitzZXRfY2NfZm9yX2J1aWxkKCkgeworICAgICMg cHJldmVudCBtdWx0aXBsZSBjYWxscyBpZiAkdG1wIGlzIGFscmVhZHkgc2V0CisgICAgdGVzdCAi JHRtcCIgJiYgcmV0dXJuIDAKKyAgICA6ICIke1RNUERJUj0vdG1wfSIKKyAgICAjIHNoZWxsY2hl Y2sgZGlzYWJsZT1TQzIwMzkKKyAgICB7IHRtcD0kKCAodW1hc2sgMDc3ICYmIG1rdGVtcCAtZCAi JFRNUERJUi9jZ1hYWFhYWCIpIDI+L2Rldi9udWxsKSAmJiB0ZXN0IC1uICIkdG1wIiAmJiB0ZXN0 IC1kICIkdG1wIiA7IH0gfHwKKwl7IHRlc3QgLW4gIiRSQU5ET00iICYmIHRtcD0kVE1QRElSL2Nn JCQtJFJBTkRPTSAmJiAodW1hc2sgMDc3ICYmIG1rZGlyICIkdG1wIiAyPi9kZXYvbnVsbCkgOyB9 IHx8CisJeyB0bXA9JFRNUERJUi9jZy0kJCAmJiAodW1hc2sgMDc3ICYmIG1rZGlyICIkdG1wIiAy Pi9kZXYvbnVsbCkgJiYgZWNobyAiV2FybmluZzogY3JlYXRpbmcgaW5zZWN1cmUgdGVtcCBkaXJl Y3RvcnkiID4mMiA7IH0gfHwKKwl7IGVjaG8gIiRtZTogY2Fubm90IGNyZWF0ZSBhIHRlbXBvcmFy eSBkaXJlY3RvcnkgaW4gJFRNUERJUiIgPiYyIDsgZXhpdCAxIDsgfQorICAgIGR1bW15PSR0bXAv ZHVtbXkKKyAgICBjYXNlICR7Q0NfRk9SX0JVSUxELX0sJHtIT1NUX0NDLX0sJHtDQy19IGluCisJ LCwpICAgIGVjaG8gImludCB4OyIgPiAiJGR1bW15LmMiCisJICAgICAgIGZvciBkcml2ZXIgaW4g Y2MgZ2NjIGM4OSBjOTkgOyBkbworCQkgICBpZiAoJGRyaXZlciAtYyAtbyAiJGR1bW15Lm8iICIk ZHVtbXkuYyIpID4vZGV2L251bGwgMj4mMSA7IHRoZW4KKwkJICAgICAgIENDX0ZPUl9CVUlMRD0i JGRyaXZlciIKKwkJICAgICAgIGJyZWFrCisJCSAgIGZpCisJICAgICAgIGRvbmUKKwkgICAgICAg aWYgdGVzdCB4IiRDQ19GT1JfQlVJTEQiID0geCA7IHRoZW4KKwkJICAgQ0NfRk9SX0JVSUxEPW5v X2NvbXBpbGVyX2ZvdW5kCisJICAgICAgIGZpCisJICAgICAgIDs7CisJLCwqKSAgIENDX0ZPUl9C VUlMRD0kQ0MgOzsKKwksKiwqKSAgQ0NfRk9SX0JVSUxEPSRIT1NUX0NDIDs7CisgICAgZXNhYwor fQorCisjIFRoaXMgaXMgbmVlZGVkIHRvIGZpbmQgdW5hbWUgb24gYSBQeXJhbWlkIE9TeCB3aGVu IHJ1biBpbiB0aGUgQlNEIHVuaXZlcnNlLgorIyAoZ2hhemlAbm9jLnJ1dGdlcnMuZWR1IDE5OTQt MDgtMjQpCitpZiB0ZXN0IC1mIC8uYXR0YmluL3VuYW1lIDsgdGhlbgorCVBBVEg9JFBBVEg6Ly5h dHRiaW4gOyBleHBvcnQgUEFUSAorZmkKKworVU5BTUVfTUFDSElORT0kKCAodW5hbWUgLW0pIDI+ L2Rldi9udWxsKSB8fCBVTkFNRV9NQUNISU5FPXVua25vd24KK1VOQU1FX1JFTEVBU0U9JCggKHVu YW1lIC1yKSAyPi9kZXYvbnVsbCkgfHwgVU5BTUVfUkVMRUFTRT11bmtub3duCitVTkFNRV9TWVNU RU09JCggKHVuYW1lIC1zKSAyPi9kZXYvbnVsbCkgfHwgVU5BTUVfU1lTVEVNPXVua25vd24KK1VO QU1FX1ZFUlNJT049JCggKHVuYW1lIC12KSAyPi9kZXYvbnVsbCkgfHwgVU5BTUVfVkVSU0lPTj11 bmtub3duCisKK2Nhc2UgIiRVTkFNRV9TWVNURU0iIGluCitMaW51eHxHTlV8R05VLyopCisJTElC Qz11bmtub3duCisKKwlzZXRfY2NfZm9yX2J1aWxkCisJY2F0IDw8LUVPRiA+ICIkZHVtbXkuYyIK KwkjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKwkjaWYgZGVmaW5lZChfX1VDTElCQ19fKQorCUxJQkM9 dWNsaWJjCisJI2VsaWYgZGVmaW5lZChfX2RpZXRsaWJjX18pCisJTElCQz1kaWV0bGliYworCSNl bGlmIGRlZmluZWQoX19HTElCQ19fKQorCUxJQkM9Z251CisJI2Vsc2UKKwkjaW5jbHVkZSA8c3Rk YXJnLmg+CisJLyogRmlyc3QgaGV1cmlzdGljIHRvIGRldGVjdCBtdXNsIGxpYmMuICAqLworCSNp ZmRlZiBfX0RFRklORURfdmFfbGlzdAorCUxJQkM9bXVzbAorCSNlbmRpZgorCSNlbmRpZgorCUVP RgorCWV2YWwgIiQoJENDX0ZPUl9CVUlMRCAtRSAiJGR1bW15LmMiIDI+L2Rldi9udWxsIHwgZ3Jl cCAnXkxJQkMnIHwgc2VkICdzLCAsLGcnKSIKKworCSMgU2Vjb25kIGhldXJpc3RpYyB0byBkZXRl Y3QgbXVzbCBsaWJjLgorCWlmIFsgIiRMSUJDIiA9IHVua25vd24gXSAmJgorCSAgIGNvbW1hbmQg LXYgbGRkID4vZGV2L251bGwgJiYKKwkgICBsZGQgLS12ZXJzaW9uIDI+JjEgfCBncmVwIC1xIF5t dXNsOyB0aGVuCisJCUxJQkM9bXVzbAorCWZpCisKKwkjIElmIHRoZSBzeXN0ZW0gbGFja3MgYSBj b21waWxlciwgdGhlbiBqdXN0IHBpY2sgZ2xpYmMuCisJIyBXZSBjb3VsZCBwcm9iYWJseSB0cnkg aGFyZGVyLgorCWlmIFsgIiRMSUJDIiA9IHVua25vd24gXTsgdGhlbgorCQlMSUJDPWdudQorCWZp CisJOzsKK2VzYWMKKworIyBOb3RlOiBvcmRlciBpcyBzaWduaWZpY2FudCAtIHRoZSBjYXNlIGJy YW5jaGVzIGFyZSBub3QgZXhjbHVzaXZlLgorCitjYXNlICIkVU5BTUVfTUFDSElORTokVU5BTUVf U1lTVEVNOiRVTkFNRV9SRUxFQVNFOiRVTkFNRV9WRVJTSU9OIiBpbgorICAgICo6TmV0QlNEOio6 KikKKwkjIE5ldEJTRCAobmJzZCkgdGFyZ2V0cyBzaG91bGQgKHdoZXJlIGFwcGxpY2FibGUpIG1h dGNoIG9uZSBvcgorCSMgbW9yZSBvZiB0aGUgdHVwbGVzOiAqLSotbmV0YnNkZWxmKiwgKi0qLW5l dGJzZGFvdXQqLAorCSMgKi0qLW5ldGJzZGVjb2ZmKiBhbmQgKi0qLW5ldGJzZCouICBGb3IgdGFy Z2V0cyB0aGF0IHJlY2VudGx5CisJIyBzd2l0Y2hlZCB0byBFTEYsICotKi1uZXRic2QqIHdvdWxk IHNlbGVjdCB0aGUgb2xkCisJIyBvYmplY3QgZmlsZSBmb3JtYXQuICBUaGlzIHByb3ZpZGVzIGJv dGggZm9yd2FyZAorCSMgY29tcGF0aWJpbGl0eSBhbmQgYSBjb25zaXN0ZW50IG1lY2hhbmlzbSBm b3Igc2VsZWN0aW5nIHRoZQorCSMgb2JqZWN0IGZpbGUgZm9ybWF0LgorCSMKKwkjIE5vdGU6IE5l dEJTRCBkb2Vzbid0IHBhcnRpY3VsYXJseSBjYXJlIGFib3V0IHRoZSB2ZW5kb3IKKwkjIHBvcnRp b24gb2YgdGhlIG5hbWUuICBXZSBhbHdheXMgc2V0IGl0IHRvICJ1bmtub3duIi4KKwlzeXNjdGw9 InN5c2N0bCAtbiBody5tYWNoaW5lX2FyY2giCisJVU5BTUVfTUFDSElORV9BUkNIPSQoICh1bmFt ZSAtcCAyPi9kZXYvbnVsbCB8fCBcCisJICAgICIvc2Jpbi8kc3lzY3RsIiAyPi9kZXYvbnVsbCB8 fCBcCisJICAgICIvdXNyL3NiaW4vJHN5c2N0bCIgMj4vZGV2L251bGwgfHwgXAorCSAgICBlY2hv IHVua25vd24pKQorCWNhc2UgIiRVTkFNRV9NQUNISU5FX0FSQ0giIGluCisJICAgIGFhcmNoNjRl YikgbWFjaGluZT1hYXJjaDY0X2JlLXVua25vd24gOzsKKwkgICAgYXJtZWIpIG1hY2hpbmU9YXJt ZWItdW5rbm93biA7OworCSAgICBhcm0qKSBtYWNoaW5lPWFybS11bmtub3duIDs7CisJICAgIHNo M2VsKSBtYWNoaW5lPXNobC11bmtub3duIDs7CisJICAgIHNoM2ViKSBtYWNoaW5lPXNoLXVua25v d24gOzsKKwkgICAgc2g1ZWwpIG1hY2hpbmU9c2g1bGUtdW5rbm93biA7OworCSAgICBlYXJtdiop CisJCWFyY2g9JChlY2hvICIkVU5BTUVfTUFDSElORV9BUkNIIiB8IHNlZCAtZSAncyxeZVwoYXJt dlswLTldXCkuKiQsXDEsJykKKwkJZW5kaWFuPSQoZWNobyAiJFVOQU1FX01BQ0hJTkVfQVJDSCIg fCBzZWQgLW5lICdzLF4uKlwoZWJcKSQsXDEscCcpCisJCW1hY2hpbmU9IiR7YXJjaH0ke2VuZGlh bn0iLXVua25vd24KKwkJOzsKKwkgICAgKikgbWFjaGluZT0iJFVOQU1FX01BQ0hJTkVfQVJDSCIt dW5rbm93biA7OworCWVzYWMKKwkjIFRoZSBPcGVyYXRpbmcgU3lzdGVtIGluY2x1ZGluZyBvYmpl Y3QgZm9ybWF0LCBpZiBpdCBoYXMgc3dpdGNoZWQKKwkjIHRvIEVMRiByZWNlbnRseSAob3Igd2ls bCBpbiB0aGUgZnV0dXJlKSBhbmQgQUJJLgorCWNhc2UgIiRVTkFNRV9NQUNISU5FX0FSQ0giIGlu CisJICAgIGVhcm0qKQorCQlvcz1uZXRic2RlbGYKKwkJOzsKKwkgICAgYXJtKnxpMzg2fG02OGt8 bnMzMmt8c2gzKnxzcGFyY3x2YXgpCisJCXNldF9jY19mb3JfYnVpbGQKKwkJaWYgZWNobyBfX0VM Rl9fIHwgJENDX0ZPUl9CVUlMRCAtRSAtIDI+L2Rldi9udWxsIFwKKwkJCXwgZ3JlcCAtcSBfX0VM Rl9fCisJCXRoZW4KKwkJICAgICMgT25jZSBhbGwgdXRpbGl0aWVzIGNhbiBiZSBFQ09GRiAobmV0 YnNkZWNvZmYpIG9yIGEub3V0IChuZXRic2Rhb3V0KS4KKwkJICAgICMgUmV0dXJuIG5ldGJzZCBm b3IgZWl0aGVyLiAgRklYPworCQkgICAgb3M9bmV0YnNkCisJCWVsc2UKKwkJICAgIG9zPW5ldGJz ZGVsZgorCQlmaQorCQk7OworCSAgICAqKQorCQlvcz1uZXRic2QKKwkJOzsKKwllc2FjCisJIyBE ZXRlcm1pbmUgQUJJIHRhZ3MuCisJY2FzZSAiJFVOQU1FX01BQ0hJTkVfQVJDSCIgaW4KKwkgICAg ZWFybSopCisJCWV4cHI9J3MvXmVhcm12WzAtOV0vLWVhYmkvO3MvZWIkLy8nCisJCWFiaT0kKGVj aG8gIiRVTkFNRV9NQUNISU5FX0FSQ0giIHwgc2VkIC1lICIkZXhwciIpCisJCTs7CisJZXNhYwor CSMgVGhlIE9TIHJlbGVhc2UKKwkjIERlYmlhbiBHTlUvTmV0QlNEIG1hY2hpbmVzIGhhdmUgYSBk aWZmZXJlbnQgdXNlcmxhbmQsIGFuZAorCSMgdGh1cywgbmVlZCBhIGRpc3RpbmN0IHRyaXBsZXQu IEhvd2V2ZXIsIHRoZXkgZG8gbm90IG5lZWQKKwkjIGtlcm5lbCB2ZXJzaW9uIGluZm9ybWF0aW9u LCBzbyBpdCBjYW4gYmUgcmVwbGFjZWQgd2l0aCBhCisJIyBzdWl0YWJsZSB0YWcsIGluIHRoZSBz dHlsZSBvZiBsaW51eC1nbnUuCisJY2FzZSAiJFVOQU1FX1ZFUlNJT04iIGluCisJICAgIERlYmlh biopCisJCXJlbGVhc2U9Jy1nbnUnCisJCTs7CisJICAgICopCisJCXJlbGVhc2U9JChlY2hvICIk VU5BTUVfUkVMRUFTRSIgfCBzZWQgLWUgJ3MvWy1fXS4qLy8nIHwgY3V0IC1kLiAtZjEsMikKKwkJ OzsKKwllc2FjCisJIyBTaW5jZSBDUFVfVFlQRS1NQU5VRkFDVFVSRVItS0VSTkVMLU9QRVJBVElO R19TWVNURU06CisJIyBjb250YWlucyByZWR1bmRhbnQgaW5mb3JtYXRpb24sIHRoZSBzaG9ydGVy IGZvcm06CisJIyBDUFVfVFlQRS1NQU5VRkFDVFVSRVItT1BFUkFUSU5HX1NZU1RFTSBpcyB1c2Vk LgorCWVjaG8gIiRtYWNoaW5lLSR7b3N9JHtyZWxlYXNlfSR7YWJpLX0iCisJZXhpdCA7OworICAg ICo6Qml0cmlnOio6KikKKwlVTkFNRV9NQUNISU5FX0FSQ0g9JChhcmNoIHwgc2VkICdzL0JpdHJp Zy4vLycpCisJZWNobyAiJFVOQU1FX01BQ0hJTkVfQVJDSCItdW5rbm93bi1iaXRyaWciJFVOQU1F X1JFTEVBU0UiCisJZXhpdCA7OworICAgICo6T3BlbkJTRDoqOiopCisJVU5BTUVfTUFDSElORV9B UkNIPSQoYXJjaCB8IHNlZCAncy9PcGVuQlNELi8vJykKKwllY2hvICIkVU5BTUVfTUFDSElORV9B UkNIIi11bmtub3duLW9wZW5ic2QiJFVOQU1FX1JFTEVBU0UiCisJZXhpdCA7OworICAgICo6TGli ZXJ0eUJTRDoqOiopCisJVU5BTUVfTUFDSElORV9BUkNIPSQoYXJjaCB8IHNlZCAncy9eLipCU0Rc Li8vJykKKwllY2hvICIkVU5BTUVfTUFDSElORV9BUkNIIi11bmtub3duLWxpYmVydHlic2QiJFVO QU1FX1JFTEVBU0UiCisJZXhpdCA7OworICAgICo6TWlkbmlnaHRCU0Q6KjoqKQorCWVjaG8gIiRV TkFNRV9NQUNISU5FIi11bmtub3duLW1pZG5pZ2h0YnNkIiRVTkFNRV9SRUxFQVNFIgorCWV4aXQg OzsKKyAgICAqOmVra29CU0Q6KjoqKQorCWVjaG8gIiRVTkFNRV9NQUNISU5FIi11bmtub3duLWVr a29ic2QiJFVOQU1FX1JFTEVBU0UiCisJZXhpdCA7OworICAgICo6U29saWRCU0Q6KjoqKQorCWVj aG8gIiRVTkFNRV9NQUNISU5FIi11bmtub3duLXNvbGlkYnNkIiRVTkFNRV9SRUxFQVNFIgorCWV4 aXQgOzsKKyAgICAqOk9TMTA4Oio6KikKKwllY2hvICIkVU5BTUVfTUFDSElORSItdW5rbm93bi1v czEwOF8iJFVOQU1FX1JFTEVBU0UiCisJZXhpdCA7OworICAgIG1hY3BwYzpNaXJCU0Q6KjoqKQor CWVjaG8gcG93ZXJwYy11bmtub3duLW1pcmJzZCIkVU5BTUVfUkVMRUFTRSIKKwlleGl0IDs7Cisg ICAgKjpNaXJCU0Q6KjoqKQorCWVjaG8gIiRVTkFNRV9NQUNISU5FIi11bmtub3duLW1pcmJzZCIk VU5BTUVfUkVMRUFTRSIKKwlleGl0IDs7CisgICAgKjpTb3J0aXg6KjoqKQorCWVjaG8gIiRVTkFN RV9NQUNISU5FIi11bmtub3duLXNvcnRpeAorCWV4aXQgOzsKKyAgICAqOlR3aXp6bGVyOio6KikK KwllY2hvICIkVU5BTUVfTUFDSElORSItdW5rbm93bi10d2l6emxlcgorCWV4aXQgOzsKKyAgICAq OlJlZG94Oio6KikKKwllY2hvICIkVU5BTUVfTUFDSElORSItdW5rbm93bi1yZWRveAorCWV4aXQg OzsKKyAgICBtaXBzOk9TRjE6Ki4qKQorCWVjaG8gbWlwcy1kZWMtb3NmMQorCWV4aXQgOzsKKyAg ICBhbHBoYTpPU0YxOio6KikKKwljYXNlICRVTkFNRV9SRUxFQVNFIGluCisJKjQuMCkKKwkJVU5B TUVfUkVMRUFTRT0kKC91c3Ivc2Jpbi9zaXplciAtdiB8IGF3ayAne3ByaW50ICQzfScpCisJCTs7 CisJKjUuKikKKwkJVU5BTUVfUkVMRUFTRT0kKC91c3Ivc2Jpbi9zaXplciAtdiB8IGF3ayAne3By aW50ICQ0fScpCisJCTs7CisJZXNhYworCSMgQWNjb3JkaW5nIHRvIENvbXBhcSwgL3Vzci9zYmlu L3BzcmluZm8gaGFzIGJlZW4gYXZhaWxhYmxlIG9uCisJIyBPU0YvMSBhbmQgVHJ1NjQgc3lzdGVt cyBwcm9kdWNlZCBzaW5jZSAxOTk1LiAgSSBob3BlIHRoYXQKKwkjIGNvdmVycyBtb3N0IHN5c3Rl bXMgcnVubmluZyB0b2RheS4gIFRoaXMgY29kZSBwaXBlcyB0aGUgQ1BVCisJIyB0eXBlcyB0aHJv dWdoIGhlYWQgLW4gMSwgc28gd2Ugb25seSBkZXRlY3QgdGhlIHR5cGUgb2YgQ1BVIDAuCisJQUxQ SEFfQ1BVX1RZUEU9JCgvdXNyL3NiaW4vcHNyaW5mbyAtdiB8IHNlZCAtbiAtZSAncy9eICBUaGUg YWxwaGEgXCguKlwpIHByb2Nlc3Nvci4qJC9cMS9wJyB8IGhlYWQgLW4gMSkKKwljYXNlICIkQUxQ SEFfQ1BVX1RZUEUiIGluCisJICAgICJFVjQgKDIxMDY0KSIpCisJCVVOQU1FX01BQ0hJTkU9YWxw aGEgOzsKKwkgICAgIkVWNC41ICgyMTA2NCkiKQorCQlVTkFNRV9NQUNISU5FPWFscGhhIDs7CisJ ICAgICJMQ0E0ICgyMTA2Ni8yMTA2OCkiKQorCQlVTkFNRV9NQUNISU5FPWFscGhhIDs7CisJICAg ICJFVjUgKDIxMTY0KSIpCisJCVVOQU1FX01BQ0hJTkU9YWxwaGFldjUgOzsKKwkgICAgIkVWNS42 ICgyMTE2NEEpIikKKwkJVU5BTUVfTUFDSElORT1hbHBoYWV2NTYgOzsKKwkgICAgIkVWNS42ICgy MTE2NFBDKSIpCisJCVVOQU1FX01BQ0hJTkU9YWxwaGFwY2E1NiA7OworCSAgICAiRVY1LjcgKDIx MTY0UEMpIikKKwkJVU5BTUVfTUFDSElORT1hbHBoYXBjYTU3IDs7CisJICAgICJFVjYgKDIxMjY0 KSIpCisJCVVOQU1FX01BQ0hJTkU9YWxwaGFldjYgOzsKKwkgICAgIkVWNi43ICgyMTI2NEEpIikK KwkJVU5BTUVfTUFDSElORT1hbHBoYWV2NjcgOzsKKwkgICAgIkVWNi44Q0IgKDIxMjY0QykiKQor CQlVTkFNRV9NQUNISU5FPWFscGhhZXY2OCA7OworCSAgICAiRVY2LjhBTCAoMjEyNjRCKSIpCisJ CVVOQU1FX01BQ0hJTkU9YWxwaGFldjY4IDs7CisJICAgICJFVjYuOENYICgyMTI2NEQpIikKKwkJ VU5BTUVfTUFDSElORT1hbHBoYWV2NjggOzsKKwkgICAgIkVWNi45QSAoMjEyNjQvRVY2OUEpIikK KwkJVU5BTUVfTUFDSElORT1hbHBoYWV2NjkgOzsKKwkgICAgIkVWNyAoMjEzNjQpIikKKwkJVU5B TUVfTUFDSElORT1hbHBoYWV2NyA7OworCSAgICAiRVY3LjkgKDIxMzY0QSkiKQorCQlVTkFNRV9N QUNISU5FPWFscGhhZXY3OSA7OworCWVzYWMKKwkjIEEgUG4ubiB2ZXJzaW9uIGlzIGEgcGF0Y2hl ZCB2ZXJzaW9uLgorCSMgQSBWbi5uIHZlcnNpb24gaXMgYSByZWxlYXNlZCB2ZXJzaW9uLgorCSMg QSBUbi5uIHZlcnNpb24gaXMgYSByZWxlYXNlZCBmaWVsZCB0ZXN0IHZlcnNpb24uCisJIyBBIFhu Lm4gdmVyc2lvbiBpcyBhbiB1bnJlbGVhc2VkIGV4cGVyaW1lbnRhbCBiYXNlbGV2ZWwuCisJIyAx LjIgdXNlcyAiMS4yIiBmb3IgdW5hbWUgLXIuCisJZWNobyAiJFVOQU1FX01BQ0hJTkUiLWRlYy1v c2YiJChlY2hvICIkVU5BTUVfUkVMRUFTRSIgfCBzZWQgLWUgJ3MvXltQVlRYXS8vJyB8IHRyIEFC Q0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6KSIKKwkj IFJlc2V0IEVYSVQgdHJhcCBiZWZvcmUgZXhpdGluZyB0byBhdm9pZCBzcHVyaW91cyBub24temVy byBleGl0IGNvZGUuCisJZXhpdGNvZGU9JD8KKwl0cmFwICcnIDAKKwlleGl0ICRleGl0Y29kZSA7 OworICAgIEFtaWdhKjpVTklYX1N5c3RlbV9WOjQuMDoqKQorCWVjaG8gbTY4ay11bmtub3duLXN5 c3Y0CisJZXhpdCA7OworICAgICo6W0FhXW1pZ2FbT29dW1NzXToqOiopCisJZWNobyAiJFVOQU1F X01BQ0hJTkUiLXVua25vd24tYW1pZ2FvcworCWV4aXQgOzsKKyAgICAqOltNbV1vcnBoW09vXVtT c106KjoqKQorCWVjaG8gIiRVTkFNRV9NQUNISU5FIi11bmtub3duLW1vcnBob3MKKwlleGl0IDs7 CisgICAgKjpPUy8zOTA6KjoqKQorCWVjaG8gaTM3MC1pYm0tb3BlbmVkaXRpb24KKwlleGl0IDs7 CisgICAgKjp6L1ZNOio6KikKKwllY2hvIHMzOTAtaWJtLXp2bW9lCisJZXhpdCA7OworICAgICo6 T1M0MDA6KjoqKQorCWVjaG8gcG93ZXJwYy1pYm0tb3M0MDAKKwlleGl0IDs7CisgICAgYXJtOlJJ U0MqOjEuWzAxMl0qOip8YXJtOnJpc2NpeDoxLlswMTJdKjoqKQorCWVjaG8gYXJtLWFjb3JuLXJp c2NpeCIkVU5BTUVfUkVMRUFTRSIKKwlleGl0IDs7CisgICAgYXJtKjpyaXNjb3M6KjoqfGFybSo6 UklTQ09TOio6KikKKwllY2hvIGFybS11bmtub3duLXJpc2NvcworCWV4aXQgOzsKKyAgICBTUjI/ MDE6SEktVVgvTVBQOio6KiB8IFNSODAwMDpISS1VWC9NUFA6KjoqKQorCWVjaG8gaHBwYTEuMS1o aXRhY2hpLWhpdXhtcHAKKwlleGl0IDs7CisgICAgUHlyYW1pZCo6T1N4KjoqOiogfCBNSVMqOk9T eCo6KjoqIHwgTUlTKjpTTVBfREMtT1N4KjoqOiopCisJIyBha2VlQHdwZGlzMDMud3BhZmIuYWYu bWlsIChFYXJsZSBGLiBBa2UpIGNvbnRyaWJ1dGVkIE1JUyBhbmQgTklMRS4KKwlpZiB0ZXN0ICIk KCAoL2Jpbi91bml2ZXJzZSkgMj4vZGV2L251bGwpIiA9IGF0dCA7IHRoZW4KKwkJZWNobyBweXJh bWlkLXB5cmFtaWQtc3lzdjMKKwllbHNlCisJCWVjaG8gcHlyYW1pZC1weXJhbWlkLWJzZAorCWZp CisJZXhpdCA7OworICAgIE5JTEUqOio6KjpkY29zeCkKKwllY2hvIHB5cmFtaWQtcHlyYW1pZC1z dnI0CisJZXhpdCA7OworICAgIERSUz82MDAwOnVuaXg6NC4wOjYqKQorCWVjaG8gc3BhcmMtaWNs LW54NgorCWV4aXQgOzsKKyAgICBEUlM/NjAwMDpVTklYX1NWOjQuMio6NyogfCBEUlM/NjAwMDpp c2lzOjQuMio6NyopCisJY2FzZSAkKC91c3IvYmluL3VuYW1lIC1wKSBpbgorCSAgICBzcGFyYykg ZWNobyBzcGFyYy1pY2wtbng3OyBleGl0IDs7CisJZXNhYyA7OworICAgIHMzOTB4OlN1bk9TOio6 KikKKwllY2hvICIkVU5BTUVfTUFDSElORSItaWJtLXNvbGFyaXMyIiQoZWNobyAiJFVOQU1FX1JF TEVBU0UiIHwgc2VkIC1lICdzL1teLl0qLy8nKSIKKwlleGl0IDs7CisgICAgc3VuNEg6U3VuT1M6 NS4qOiopCisJZWNobyBzcGFyYy1oYWwtc29sYXJpczIiJChlY2hvICIkVU5BTUVfUkVMRUFTRSJ8 c2VkIC1lICdzL1teLl0qLy8nKSIKKwlleGl0IDs7CisgICAgc3VuNCo6U3VuT1M6NS4qOiogfCB0 YWRwb2xlKjpTdW5PUzo1Lio6KikKKwllY2hvIHNwYXJjLXN1bi1zb2xhcmlzMiIkKGVjaG8gIiRV TkFNRV9SRUxFQVNFIiB8IHNlZCAtZSAncy9bXi5dKi8vJykiCisJZXhpdCA7OworICAgIGk4NnBj OkF1cm9yYVVYOjUuKjoqIHwgaTg2eGVuOkF1cm9yYVVYOjUuKjoqKQorCWVjaG8gaTM4Ni1wYy1h dXJvcmF1eCIkVU5BTUVfUkVMRUFTRSIKKwlleGl0IDs7CisgICAgaTg2cGM6U3VuT1M6NS4qOiog fCBpODZ4ZW46U3VuT1M6NS4qOiopCisJc2V0X2NjX2Zvcl9idWlsZAorCVNVTl9BUkNIPWkzODYK KwkjIElmIHRoZXJlIGlzIGEgY29tcGlsZXIsIHNlZSBpZiBpdCBpcyBjb25maWd1cmVkIGZvciA2 NC1iaXQgb2JqZWN0cy4KKwkjIE5vdGUgdGhhdCB0aGUgU3VuIGNjIGRvZXMgbm90IHR1cm4gX19M UDY0X18gaW50byAxIGxpa2UgZ2NjIGRvZXMuCisJIyBUaGlzIHRlc3Qgd29ya3MgZm9yIGJvdGgg Y29tcGlsZXJzLgorCWlmIHRlc3QgIiRDQ19GT1JfQlVJTEQiICE9IG5vX2NvbXBpbGVyX2ZvdW5k OyB0aGVuCisJICAgIGlmIChlY2hvICcjaWZkZWYgX19hbWQ2NCc7IGVjaG8gSVNfNjRCSVRfQVJD SDsgZWNobyAnI2VuZGlmJykgfCBcCisJCShDQ09QVFM9IiIgJENDX0ZPUl9CVUlMRCAtRSAtIDI+ L2Rldi9udWxsKSB8IFwKKwkJZ3JlcCBJU182NEJJVF9BUkNIID4vZGV2L251bGwKKwkgICAgdGhl bgorCQlTVU5fQVJDSD14ODZfNjQKKwkgICAgZmkKKwlmaQorCWVjaG8gIiRTVU5fQVJDSCItcGMt c29sYXJpczIiJChlY2hvICIkVU5BTUVfUkVMRUFTRSJ8c2VkIC1lICdzL1teLl0qLy8nKSIKKwll eGl0IDs7CisgICAgc3VuNCo6U3VuT1M6Nio6KikKKwkjIEFjY29yZGluZyB0byBjb25maWcuc3Vi LCB0aGlzIGlzIHRoZSBwcm9wZXIgd2F5IHRvIGNhbm9uaWNhbGl6ZQorCSMgU3VuT1M2LiAgSGFy ZCB0byBndWVzcyBleGFjdGx5IHdoYXQgU3VuT1M2IHdpbGwgYmUgbGlrZSwgYnV0CisJIyBpdCdz IGxpa2VseSB0byBiZSBtb3JlIGxpa2UgU29sYXJpcyB0aGFuIFN1bk9TNC4KKwllY2hvIHNwYXJj LXN1bi1zb2xhcmlzMyIkKGVjaG8gIiRVTkFNRV9SRUxFQVNFInxzZWQgLWUgJ3MvW14uXSovLycp IgorCWV4aXQgOzsKKyAgICBzdW40KjpTdW5PUzoqOiopCisJY2FzZSAiJCgvdXNyL2Jpbi9hcmNo IC1rKSIgaW4KKwkgICAgU2VyaWVzKnxTNCopCisJCVVOQU1FX1JFTEVBU0U9JCh1bmFtZSAtdikK KwkJOzsKKwllc2FjCisJIyBKYXBhbmVzZSBMYW5ndWFnZSB2ZXJzaW9ucyBoYXZlIGEgdmVyc2lv biBudW1iZXIgbGlrZSBgNC4xLjMtSkwnLgorCWVjaG8gc3BhcmMtc3VuLXN1bm9zIiQoZWNobyAi JFVOQU1FX1JFTEVBU0UifHNlZCAtZSAncy8tL18vJykiCisJZXhpdCA7OworICAgIHN1bjMqOlN1 bk9TOio6KikKKwllY2hvIG02OGstc3VuLXN1bm9zIiRVTkFNRV9SRUxFQVNFIgorCWV4aXQgOzsK KyAgICBzdW4qOio6NC4yQlNEOiopCisJVU5BTUVfUkVMRUFTRT0kKCAoc2VkIDFxIC9ldGMvbW90 ZCB8IGF3ayAne3ByaW50IHN1YnN0cigkNSwxLDMpfScpIDI+L2Rldi9udWxsKQorCXRlc3QgIngk VU5BTUVfUkVMRUFTRSIgPSB4ICYmIFVOQU1FX1JFTEVBU0U9MworCWNhc2UgIiQoL2Jpbi9hcmNo KSIgaW4KKwkgICAgc3VuMykKKwkJZWNobyBtNjhrLXN1bi1zdW5vcyIkVU5BTUVfUkVMRUFTRSIK KwkJOzsKKwkgICAgc3VuNCkKKwkJZWNobyBzcGFyYy1zdW4tc3Vub3MiJFVOQU1FX1JFTEVBU0Ui CisJCTs7CisJZXNhYworCWV4aXQgOzsKKyAgICBhdXNocDpTdW5PUzoqOiopCisJZWNobyBzcGFy Yy1hdXNwZXgtc3Vub3MiJFVOQU1FX1JFTEVBU0UiCisJZXhpdCA7OworICAgICMgVGhlIHNpdHVh dGlvbiBmb3IgTWlOVCBpcyBhIGxpdHRsZSBjb25mdXNpbmcuICBUaGUgbWFjaGluZSBuYW1lCisg ICAgIyBjYW4gYmUgdmlydHVhbGx5IGV2ZXJ5dGhpbmcgKGV2ZXJ5dGhpbmcgd2hpY2ggaXMgbm90 CisgICAgIyAiYXRhcmlzdCIgb3IgImF0YXJpc3RlIiBhdCBsZWFzdCBzaG91bGQgaGF2ZSBhIHBy b2Nlc3NvcgorICAgICMgPiBtNjgwMDApLiAgVGhlIHN5c3RlbSBuYW1lIHJhbmdlcyBmcm9tICJN aU5UIiBvdmVyICJGcmVlTWlOVCIKKyAgICAjIHRvIHRoZSBsb3dlcmNhc2UgdmVyc2lvbiAibWlu dCIgKG9yICJmcmVlbWludCIpLiAgRmluYWxseQorICAgICMgdGhlIHN5c3RlbSBuYW1lICJUT1Mi IGRlbm90ZXMgYSBzeXN0ZW0gd2hpY2ggaXMgYWN0dWFsbHkgbm90CisgICAgIyBNaU5ULiAgQnV0 IE1pTlQgaXMgZG93bndhcmQgY29tcGF0aWJsZSB0byBUT1MsIHNvIHRoaXMgc2hvdWxkCisgICAg IyBiZSBubyBwcm9ibGVtLgorICAgIGF0YXJpc3RbZV06Kk1pTlQ6KjoqIHwgYXRhcmlzdFtlXToq bWludDoqOiogfCBhdGFyaXN0W2VdOipUT1M6KjoqKQorCWVjaG8gbTY4ay1hdGFyaS1taW50IiRV TkFNRV9SRUxFQVNFIgorCWV4aXQgOzsKKyAgICBhdGFyaSo6Kk1pTlQ6KjoqIHwgYXRhcmkqOipt aW50Oio6KiB8IGF0YXJpc3RbZV06KlRPUzoqOiopCisJZWNobyBtNjhrLWF0YXJpLW1pbnQiJFVO QU1FX1JFTEVBU0UiCisJZXhpdCA7OworICAgICpmYWxjb24qOipNaU5UOio6KiB8ICpmYWxjb24q OiptaW50Oio6KiB8ICpmYWxjb24qOipUT1M6KjoqKQorCWVjaG8gbTY4ay1hdGFyaS1taW50IiRV TkFNRV9SRUxFQVNFIgorCWV4aXQgOzsKKyAgICBtaWxhbio6Kk1pTlQ6KjoqIHwgbWlsYW4qOipt aW50Oio6KiB8ICptaWxhbio6KlRPUzoqOiopCisJZWNobyBtNjhrLW1pbGFuLW1pbnQiJFVOQU1F X1JFTEVBU0UiCisJZXhpdCA7OworICAgIGhhZGVzKjoqTWlOVDoqOiogfCBoYWRlcyo6Km1pbnQ6 KjoqIHwgKmhhZGVzKjoqVE9TOio6KikKKwllY2hvIG02OGstaGFkZXMtbWludCIkVU5BTUVfUkVM RUFTRSIKKwlleGl0IDs7CisgICAgKjoqTWlOVDoqOiogfCAqOiptaW50Oio6KiB8ICo6KlRPUzoq OiopCisJZWNobyBtNjhrLXVua25vd24tbWludCIkVU5BTUVfUkVMRUFTRSIKKwlleGl0IDs7Cisg ICAgbTY4azptYWNodGVuOio6KikKKwllY2hvIG02OGstYXBwbGUtbWFjaHRlbiIkVU5BTUVfUkVM RUFTRSIKKwlleGl0IDs7CisgICAgcG93ZXJwYzptYWNodGVuOio6KikKKwllY2hvIHBvd2VycGMt YXBwbGUtbWFjaHRlbiIkVU5BTUVfUkVMRUFTRSIKKwlleGl0IDs7CisgICAgUklTQyo6TWFjaDoq OiopCisJZWNobyBtaXBzLWRlYy1tYWNoX2JzZDQuMworCWV4aXQgOzsKKyAgICBSSVNDKjpVTFRS SVg6KjoqKQorCWVjaG8gbWlwcy1kZWMtdWx0cml4IiRVTkFNRV9SRUxFQVNFIgorCWV4aXQgOzsK KyAgICBWQVgqOlVMVFJJWCo6KjoqKQorCWVjaG8gdmF4LWRlYy11bHRyaXgiJFVOQU1FX1JFTEVB U0UiCisJZXhpdCA7OworICAgIDIwMjA6Q0xJWDoqOiogfCAyNDMwOkNMSVg6KjoqKQorCWVjaG8g Y2xpcHBlci1pbnRlcmdyYXBoLWNsaXgiJFVOQU1FX1JFTEVBU0UiCisJZXhpdCA7OworICAgIG1p cHM6KjoqOlVNSVBTIHwgbWlwczoqOio6UklTQ29zKQorCXNldF9jY19mb3JfYnVpbGQKKwlzZWQg J3MvXgkvLycgPDwgRU9GID4gIiRkdW1teS5jIgorI2lmZGVmIF9fY3BsdXNwbHVzCisjaW5jbHVk ZSA8c3RkaW8uaD4gIC8qIGZvciBwcmludGYoKSBwcm90b3R5cGUgKi8KKwlpbnQgbWFpbiAoaW50 IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkgeworI2Vsc2UKKwlpbnQgbWFpbiAoYXJnYywgYXJndikgaW50 IGFyZ2M7IGNoYXIgKmFyZ3ZbXTsgeworI2VuZGlmCisJI2lmIGRlZmluZWQgKGhvc3RfbWlwcykg JiYgZGVmaW5lZCAoTUlQU0VCKQorCSNpZiBkZWZpbmVkIChTWVNUWVBFX1NZU1YpCisJICBwcmlu dGYgKCJtaXBzLW1pcHMtcmlzY29zJXNzeXN2XFxuIiwgYXJndlsxXSk7IGV4aXQgKDApOworCSNl bmRpZgorCSNpZiBkZWZpbmVkIChTWVNUWVBFX1NWUjQpCisJICBwcmludGYgKCJtaXBzLW1pcHMt cmlzY29zJXNzdnI0XFxuIiwgYXJndlsxXSk7IGV4aXQgKDApOworCSNlbmRpZgorCSNpZiBkZWZp bmVkIChTWVNUWVBFX0JTRDQzKSB8fCBkZWZpbmVkKFNZU1RZUEVfQlNEKQorCSAgcHJpbnRmICgi bWlwcy1taXBzLXJpc2NvcyVzYnNkXFxuIiwgYXJndlsxXSk7IGV4aXQgKDApOworCSNlbmRpZgor CSNlbmRpZgorCSAgZXhpdCAoLTEpOworCX0KK0VPRgorCSRDQ19GT1JfQlVJTEQgLW8gIiRkdW1t eSIgIiRkdW1teS5jIiAmJgorCSAgZHVtbXlhcmc9JChlY2hvICIkVU5BTUVfUkVMRUFTRSIgfCBz ZWQgLW4gJ3MvXChbMC05XSpcKS4qL1wxL3AnKSAmJgorCSAgU1lTVEVNX05BTUU9JCgiJGR1bW15 IiAiJGR1bW15YXJnIikgJiYKKwkgICAgeyBlY2hvICIkU1lTVEVNX05BTUUiOyBleGl0OyB9CisJ ZWNobyBtaXBzLW1pcHMtcmlzY29zIiRVTkFNRV9SRUxFQVNFIgorCWV4aXQgOzsKKyAgICBNb3Rv cm9sYTpQb3dlck1BWF9PUzoqOiopCisJZWNobyBwb3dlcnBjLW1vdG9yb2xhLXBvd2VybWF4CisJ ZXhpdCA7OworICAgIE1vdG9yb2xhOio6NC4zOlBMOC0qKQorCWVjaG8gcG93ZXJwYy1oYXJyaXMt cG93ZXJtYXgKKwlleGl0IDs7CisgICAgTmlnaHRfSGF3azoqOio6UG93ZXJNQVhfT1MgfCBTeW5l cmd5OlBvd2VyTUFYX09TOio6KikKKwllY2hvIHBvd2VycGMtaGFycmlzLXBvd2VybWF4CisJZXhp dCA7OworICAgIE5pZ2h0X0hhd2s6UG93ZXJfVU5JWDoqOiopCisJZWNobyBwb3dlcnBjLWhhcnJp cy1wb3dlcnVuaXgKKwlleGl0IDs7CisgICAgbTg4azpDWC9VWDo3KjoqKQorCWVjaG8gbTg4ay1o YXJyaXMtY3h1eDcKKwlleGl0IDs7CisgICAgbTg4azoqOjQqOlI0KikKKwllY2hvIG04OGstbW90 b3JvbGEtc3lzdjQKKwlleGl0IDs7CisgICAgbTg4azoqOjMqOlIzKikKKwllY2hvIG04OGstbW90 b3JvbGEtc3lzdjMKKwlleGl0IDs7CisgICAgQVZpaU9OOmRndXg6KjoqKQorCSMgREcvVVggcmV0 dXJucyBBVmlpT04gZm9yIGFsbCBhcmNoaXRlY3R1cmVzCisJVU5BTUVfUFJPQ0VTU09SPSQoL3Vz ci9iaW4vdW5hbWUgLXApCisJaWYgdGVzdCAiJFVOQU1FX1BST0NFU1NPUiIgPSBtYzg4MTAwIHx8 IHRlc3QgIiRVTkFNRV9QUk9DRVNTT1IiID0gbWM4ODExMAorCXRoZW4KKwkgICAgaWYgdGVzdCAi JFRBUkdFVF9CSU5BUllfSU5URVJGQUNFInggPSBtODhrZGd1eGVsZnggfHwgXAorCSAgICAgICB0 ZXN0ICIkVEFSR0VUX0JJTkFSWV9JTlRFUkZBQ0UieCA9IHgKKwkgICAgdGhlbgorCQllY2hvIG04 OGstZGctZGd1eCIkVU5BTUVfUkVMRUFTRSIKKwkgICAgZWxzZQorCQllY2hvIG04OGstZGctZGd1 eGJjcyIkVU5BTUVfUkVMRUFTRSIKKwkgICAgZmkKKwllbHNlCisJICAgIGVjaG8gaTU4Ni1kZy1k Z3V4IiRVTkFNRV9SRUxFQVNFIgorCWZpCisJZXhpdCA7OworICAgIE04OCo6RG9scGhpbk9TOio6 KikJIyBEb2xwaGluT1MgKFNWUjMpCisJZWNobyBtODhrLWRvbHBoaW4tc3lzdjMKKwlleGl0IDs7 CisgICAgTTg4KjoqOlIzKjoqKQorCSMgRGVsdGEgODhrIHN5c3RlbSBydW5uaW5nIFNWUjMKKwll Y2hvIG04OGstbW90b3JvbGEtc3lzdjMKKwlleGl0IDs7CisgICAgWEQ4OCo6KjoqOiopICMgVGVr dHJvbml4IFhEODggc3lzdGVtIHJ1bm5pbmcgVVRla1YgKFNWUjMpCisJZWNobyBtODhrLXRla3Ry b25peC1zeXN2MworCWV4aXQgOzsKKyAgICBUZWs0M1swLTldWzAtOV06VVRlazoqOiopICMgVGVr dHJvbml4IDQzMDAgc3lzdGVtIHJ1bm5pbmcgVVRlayAoQlNEKQorCWVjaG8gbTY4ay10ZWt0cm9u aXgtYnNkCisJZXhpdCA7OworICAgICo6SVJJWCo6KjoqKQorCWVjaG8gbWlwcy1zZ2ktaXJpeCIk KGVjaG8gIiRVTkFNRV9SRUxFQVNFInxzZWQgLWUgJ3MvLS9fL2cnKSIKKwlleGl0IDs7CisgICAg Pz8/Pz8/Pz86QUlYPzpbMTJdLjE6MikgICAjIEFJWCAyLjIuMSBvciBBSVggMi4xLjEgaXMgUlQv UEMgQUlYLgorCWVjaG8gcm9tcC1pYm0tYWl4ICAgICAjIHVuYW1lIC1tIGdpdmVzIGFuIDggaGV4 LWNvZGUgQ1BVIGlkCisJZXhpdCA7OyAgICAgICAgICAgICAgICMgTm90ZSB0aGF0OiBlY2hvICIn JCh1bmFtZSAtcyknIiBnaXZlcyAnQUlYICcKKyAgICBpKjg2OkFJWDoqOiopCisJZWNobyBpMzg2 LWlibS1haXgKKwlleGl0IDs7CisgICAgaWE2NDpBSVg6KjoqKQorCWlmIHRlc3QgLXggL3Vzci9i aW4vb3NsZXZlbCA7IHRoZW4KKwkJSUJNX1JFVj0kKC91c3IvYmluL29zbGV2ZWwpCisJZWxzZQor CQlJQk1fUkVWPSIkVU5BTUVfVkVSU0lPTi4kVU5BTUVfUkVMRUFTRSIKKwlmaQorCWVjaG8gIiRV TkFNRV9NQUNISU5FIi1pYm0tYWl4IiRJQk1fUkVWIgorCWV4aXQgOzsKKyAgICAqOkFJWDoyOjMp CisJaWYgZ3JlcCBib3MzMjUgL3Vzci9pbmNsdWRlL3N0ZGlvLmggPi9kZXYvbnVsbCAyPiYxOyB0 aGVuCisJCXNldF9jY19mb3JfYnVpbGQKKwkJc2VkICdzL14JCS8vJyA8PCBFT0YgPiAiJGR1bW15 LmMiCisJCSNpbmNsdWRlIDxzeXMvc3lzdGVtY2ZnLmg+CisKKwkJbWFpbigpCisJCQl7CisJCQlp ZiAoIV9fcG93ZXJfcGMoKSkKKwkJCQlleGl0KDEpOworCQkJcHV0cygicG93ZXJwYy1pYm0tYWl4 My4yLjUiKTsKKwkJCWV4aXQoMCk7CisJCQl9CitFT0YKKwkJaWYgJENDX0ZPUl9CVUlMRCAtbyAi JGR1bW15IiAiJGR1bW15LmMiICYmIFNZU1RFTV9OQU1FPSQoIiRkdW1teSIpCisJCXRoZW4KKwkJ CWVjaG8gIiRTWVNURU1fTkFNRSIKKwkJZWxzZQorCQkJZWNobyByczYwMDAtaWJtLWFpeDMuMi41 CisJCWZpCisJZWxpZiBncmVwIGJvczMyNCAvdXNyL2luY2x1ZGUvc3RkaW8uaCA+L2Rldi9udWxs IDI+JjE7IHRoZW4KKwkJZWNobyByczYwMDAtaWJtLWFpeDMuMi40CisJZWxzZQorCQllY2hvIHJz NjAwMC1pYm0tYWl4My4yCisJZmkKKwlleGl0IDs7CisgICAgKjpBSVg6KjpbNDU2N10pCisJSUJN X0NQVV9JRD0kKC91c3Ivc2Jpbi9sc2RldiAtQyAtYyBwcm9jZXNzb3IgLVMgYXZhaWxhYmxlIHwg c2VkIDFxIHwgYXdrICd7IHByaW50ICQxIH0nKQorCWlmIC91c3Ivc2Jpbi9sc2F0dHIgLUVsICIk SUJNX0NQVV9JRCIgfCBncmVwICcgUE9XRVInID4vZGV2L251bGwgMj4mMTsgdGhlbgorCQlJQk1f QVJDSD1yczYwMDAKKwllbHNlCisJCUlCTV9BUkNIPXBvd2VycGMKKwlmaQorCWlmIHRlc3QgLXgg L3Vzci9iaW4vbHNscHAgOyB0aGVuCisJCUlCTV9SRVY9JCgvdXNyL2Jpbi9sc2xwcCAtTHFjIGJv cy5ydGUubGliYyB8CisJCQkgICBhd2sgLUY6ICd7IHByaW50ICQzIH0nIHwgc2VkIHMvWzAtOV0q JC8wLykKKwllbHNlCisJCUlCTV9SRVY9IiRVTkFNRV9WRVJTSU9OLiRVTkFNRV9SRUxFQVNFIgor CWZpCisJZWNobyAiJElCTV9BUkNIIi1pYm0tYWl4IiRJQk1fUkVWIgorCWV4aXQgOzsKKyAgICAq OkFJWDoqOiopCisJZWNobyByczYwMDAtaWJtLWFpeAorCWV4aXQgOzsKKyAgICBpYm1ydDo0LjRC U0Q6Knxyb21wLWlibTo0LjRCU0Q6KikKKwllY2hvIHJvbXAtaWJtLWJzZDQuNAorCWV4aXQgOzsK KyAgICBpYm1ydDoqQlNEOip8cm9tcC1pYm06QlNEOiopICAgICAgICAgICAgIyBjb3ZlcnMgUlQv UEMgQlNEIGFuZAorCWVjaG8gcm9tcC1pYm0tYnNkIiRVTkFNRV9SRUxFQVNFIiAgICMgNC4zIHdp dGggdW5hbWUgYWRkZWQgdG8KKwlleGl0IDs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAj IHJlcG9ydDogcm9tcC1pYm0gQlNEIDQuMworICAgICo6Qk9TWDoqOiopCisJZWNobyByczYwMDAt YnVsbC1ib3N4CisJZXhpdCA7OworICAgIERQWC8yPzAwOkIuTy5TLjoqOiopCisJZWNobyBtNjhr LWJ1bGwtc3lzdjMKKwlleGl0IDs7CisgICAgOTAwMC9bMzRdPz86NC4zYnNkOjEuKjoqKQorCWVj aG8gbTY4ay1ocC1ic2QKKwlleGl0IDs7CisgICAgaHAzMDA6NC40QlNEOio6KiB8IDkwMDAvWzM0 XT8/OjQuM2JzZDoyLio6KikKKwllY2hvIG02OGstaHAtYnNkNC40CisJZXhpdCA7OworICAgIDkw MDAvWzM0Njc4XT8/OkhQLVVYOio6KikKKwlIUFVYX1JFVj0kKGVjaG8gIiRVTkFNRV9SRUxFQVNF InxzZWQgLWUgJ3MvW14uXSouWzBCXSovLycpCisJY2FzZSAiJFVOQU1FX01BQ0hJTkUiIGluCisJ ICAgIDkwMDAvMzE/KSAgICAgICAgICAgIEhQX0FSQ0g9bTY4MDAwIDs7CisJICAgIDkwMDAvWzM0 XT8/KSAgICAgICAgIEhQX0FSQ0g9bTY4ayA7OworCSAgICA5MDAwL1s2NzhdWzAtOV1bMC05XSkK KwkJaWYgdGVzdCAteCAvdXNyL2Jpbi9nZXRjb25mOyB0aGVuCisJCSAgICBzY19jcHVfdmVyc2lv bj0kKC91c3IvYmluL2dldGNvbmYgU0NfQ1BVX1ZFUlNJT04gMj4vZGV2L251bGwpCisJCSAgICBz Y19rZXJuZWxfYml0cz0kKC91c3IvYmluL2dldGNvbmYgU0NfS0VSTkVMX0JJVFMgMj4vZGV2L251 bGwpCisJCSAgICBjYXNlICIkc2NfY3B1X3ZlcnNpb24iIGluCisJCSAgICAgIDUyMykgSFBfQVJD SD1ocHBhMS4wIDs7ICMgQ1BVX1BBX1JJU0MxXzAKKwkJICAgICAgNTI4KSBIUF9BUkNIPWhwcGEx LjEgOzsgIyBDUFVfUEFfUklTQzFfMQorCQkgICAgICA1MzIpICAgICAgICAgICAgICAgICAgICAg ICMgQ1BVX1BBX1JJU0MyXzAKKwkJCWNhc2UgIiRzY19rZXJuZWxfYml0cyIgaW4KKwkJCSAgMzIp IEhQX0FSQ0g9aHBwYTIuMG4gOzsKKwkJCSAgNjQpIEhQX0FSQ0g9aHBwYTIuMHcgOzsKKwkJCSAg JycpIEhQX0FSQ0g9aHBwYTIuMCA7OyAgICMgSFAtVVggMTAuMjAKKwkJCWVzYWMgOzsKKwkJICAg IGVzYWMKKwkJZmkKKwkJaWYgdGVzdCAiJEhQX0FSQ0giID0gIiI7IHRoZW4KKwkJICAgIHNldF9j Y19mb3JfYnVpbGQKKwkJICAgIHNlZCAncy9eCQkvLycgPDwgRU9GID4gIiRkdW1teS5jIgorCisJ CSNkZWZpbmUgX0hQVVhfU09VUkNFCisJCSNpbmNsdWRlIDxzdGRsaWIuaD4KKwkJI2luY2x1ZGUg PHVuaXN0ZC5oPgorCisJCWludCBtYWluICgpCisJCXsKKwkJI2lmIGRlZmluZWQoX1NDX0tFUk5F TF9CSVRTKQorCQkgICAgbG9uZyBiaXRzID0gc3lzY29uZihfU0NfS0VSTkVMX0JJVFMpOworCQkj ZW5kaWYKKwkJICAgIGxvbmcgY3B1ICA9IHN5c2NvbmYgKF9TQ19DUFVfVkVSU0lPTik7CisKKwkJ ICAgIHN3aXRjaCAoY3B1KQorCQkJeworCQkJY2FzZSBDUFVfUEFfUklTQzFfMDogcHV0cyAoImhw cGExLjAiKTsgYnJlYWs7CisJCQljYXNlIENQVV9QQV9SSVNDMV8xOiBwdXRzICgiaHBwYTEuMSIp OyBicmVhazsKKwkJCWNhc2UgQ1BVX1BBX1JJU0MyXzA6CisJCSNpZiBkZWZpbmVkKF9TQ19LRVJO RUxfQklUUykKKwkJCSAgICBzd2l0Y2ggKGJpdHMpCisJCQkJeworCQkJCWNhc2UgNjQ6IHB1dHMg KCJocHBhMi4wdyIpOyBicmVhazsKKwkJCQljYXNlIDMyOiBwdXRzICgiaHBwYTIuMG4iKTsgYnJl YWs7CisJCQkJZGVmYXVsdDogcHV0cyAoImhwcGEyLjAiKTsgYnJlYWs7CisJCQkJfSBicmVhazsK KwkJI2Vsc2UgIC8qICFkZWZpbmVkKF9TQ19LRVJORUxfQklUUykgKi8KKwkJCSAgICBwdXRzICgi aHBwYTIuMCIpOyBicmVhazsKKwkJI2VuZGlmCisJCQlkZWZhdWx0OiBwdXRzICgiaHBwYTEuMCIp OyBicmVhazsKKwkJCX0KKwkJICAgIGV4aXQgKDApOworCQl9CitFT0YKKwkJICAgIChDQ09QVFM9 IiIgJENDX0ZPUl9CVUlMRCAtbyAiJGR1bW15IiAiJGR1bW15LmMiIDI+L2Rldi9udWxsKSAmJiBI UF9BUkNIPSQoIiRkdW1teSIpCisJCSAgICB0ZXN0IC16ICIkSFBfQVJDSCIgJiYgSFBfQVJDSD1o cHBhCisJCWZpIDs7CisJZXNhYworCWlmIHRlc3QgIiRIUF9BUkNIIiA9IGhwcGEyLjB3CisJdGhl bgorCSAgICBzZXRfY2NfZm9yX2J1aWxkCisKKwkgICAgIyBocHBhMi4wdy1ocC1ocHV4KiBoYXMg YSA2NC1iaXQga2VybmVsIGFuZCBhIGNvbXBpbGVyIGdlbmVyYXRpbmcKKwkgICAgIyAzMi1iaXQg Y29kZS4gIGhwcGE2NC1ocC1ocHV4KiBoYXMgdGhlIHNhbWUga2VybmVsIGFuZCBhIGNvbXBpbGVy CisJICAgICMgZ2VuZXJhdGluZyA2NC1iaXQgY29kZS4gIEdOVSBhbmQgSFAgdXNlIGRpZmZlcmVu dCBub21lbmNsYXR1cmU6CisJICAgICMKKwkgICAgIyAkIENDX0ZPUl9CVUlMRD1jYyAuL2NvbmZp Zy5ndWVzcworCSAgICAjID0+IGhwcGEyLjB3LWhwLWhwdXgxMS4yMworCSAgICAjICQgQ0NfRk9S X0JVSUxEPSJjYyArREEyLjB3IiAuL2NvbmZpZy5ndWVzcworCSAgICAjID0+IGhwcGE2NC1ocC1o cHV4MTEuMjMKKworCSAgICBpZiBlY2hvIF9fTFA2NF9fIHwgKENDT1BUUz0iIiAkQ0NfRk9SX0JV SUxEIC1FIC0gMj4vZGV2L251bGwpIHwKKwkJZ3JlcCAtcSBfX0xQNjRfXworCSAgICB0aGVuCisJ CUhQX0FSQ0g9aHBwYTIuMHcKKwkgICAgZWxzZQorCQlIUF9BUkNIPWhwcGE2NAorCSAgICBmaQor CWZpCisJZWNobyAiJEhQX0FSQ0giLWhwLWhwdXgiJEhQVVhfUkVWIgorCWV4aXQgOzsKKyAgICBp YTY0OkhQLVVYOio6KikKKwlIUFVYX1JFVj0kKGVjaG8gIiRVTkFNRV9SRUxFQVNFInxzZWQgLWUg J3MvW14uXSouWzBCXSovLycpCisJZWNobyBpYTY0LWhwLWhwdXgiJEhQVVhfUkVWIgorCWV4aXQg OzsKKyAgICAzMDUwKjpISS1VWDoqOiopCisJc2V0X2NjX2Zvcl9idWlsZAorCXNlZCAncy9eCS8v JyA8PCBFT0YgPiAiJGR1bW15LmMiCisJI2luY2x1ZGUgPHVuaXN0ZC5oPgorCWludAorCW1haW4g KCkKKwl7CisJICBsb25nIGNwdSA9IHN5c2NvbmYgKF9TQ19DUFVfVkVSU0lPTik7CisJICAvKiBU aGUgb3JkZXIgbWF0dGVycywgYmVjYXVzZSBDUFVfSVNfSFBfTUM2OEsgZXJyb25lb3VzbHkgcmV0 dXJucworCSAgICAgdHJ1ZSBmb3IgQ1BVX1BBX1JJU0MxXzAuICBDUFVfSVNfUEFfUklTQyByZXR1 cm5zIGNvcnJlY3QKKwkgICAgIHJlc3VsdHMsIGhvd2V2ZXIuICAqLworCSAgaWYgKENQVV9JU19Q QV9SSVNDIChjcHUpKQorCSAgICB7CisJICAgICAgc3dpdGNoIChjcHUpCisJCXsKKwkJICBjYXNl IENQVV9QQV9SSVNDMV8wOiBwdXRzICgiaHBwYTEuMC1oaXRhY2hpLWhpdXh3ZTIiKTsgYnJlYWs7 CisJCSAgY2FzZSBDUFVfUEFfUklTQzFfMTogcHV0cyAoImhwcGExLjEtaGl0YWNoaS1oaXV4d2Uy Iik7IGJyZWFrOworCQkgIGNhc2UgQ1BVX1BBX1JJU0MyXzA6IHB1dHMgKCJocHBhMi4wLWhpdGFj aGktaGl1eHdlMiIpOyBicmVhazsKKwkJICBkZWZhdWx0OiBwdXRzICgiaHBwYS1oaXRhY2hpLWhp dXh3ZTIiKTsgYnJlYWs7CisJCX0KKwkgICAgfQorCSAgZWxzZSBpZiAoQ1BVX0lTX0hQX01DNjhL IChjcHUpKQorCSAgICBwdXRzICgibTY4ay1oaXRhY2hpLWhpdXh3ZTIiKTsKKwkgIGVsc2UgcHV0 cyAoInVua25vd24taGl0YWNoaS1oaXV4d2UyIik7CisJICBleGl0ICgwKTsKKwl9CitFT0YKKwkk Q0NfRk9SX0JVSUxEIC1vICIkZHVtbXkiICIkZHVtbXkuYyIgJiYgU1lTVEVNX05BTUU9JCgiJGR1 bW15IikgJiYKKwkJeyBlY2hvICIkU1lTVEVNX05BTUUiOyBleGl0OyB9CisJZWNobyB1bmtub3du LWhpdGFjaGktaGl1eHdlMgorCWV4aXQgOzsKKyAgICA5MDAwLzc/Pzo0LjNic2Q6KjoqIHwgOTAw MC84P1s3OV06NC4zYnNkOio6KikKKwllY2hvIGhwcGExLjEtaHAtYnNkCisJZXhpdCA7OworICAg IDkwMDAvOD8/OjQuM2JzZDoqOiopCisJZWNobyBocHBhMS4wLWhwLWJzZAorCWV4aXQgOzsKKyAg ICAqOT8/KjpNUEUvaVg6KjoqIHwgKjMwMDAqOk1QRS9pWDoqOiopCisJZWNobyBocHBhMS4wLWhw LW1wZWl4CisJZXhpdCA7OworICAgIGhwNz8/Ok9TRjE6KjoqIHwgaHA4P1s3OV06T1NGMToqOiop CisJZWNobyBocHBhMS4xLWhwLW9zZgorCWV4aXQgOzsKKyAgICBocDg/PzpPU0YxOio6KikKKwll Y2hvIGhwcGExLjAtaHAtb3NmCisJZXhpdCA7OworICAgIGkqODY6T1NGMToqOiopCisJaWYgdGVz dCAteCAvdXNyL3NiaW4vc3lzdmVyc2lvbiA7IHRoZW4KKwkgICAgZWNobyAiJFVOQU1FX01BQ0hJ TkUiLXVua25vd24tb3NmMW1rCisJZWxzZQorCSAgICBlY2hvICIkVU5BTUVfTUFDSElORSItdW5r bm93bi1vc2YxCisJZmkKKwlleGl0IDs7CisgICAgcGFyaXNjKjpMaXRlcyo6KjoqKQorCWVjaG8g aHBwYTEuMS1ocC1saXRlcworCWV4aXQgOzsKKyAgICBDMSo6Q29udmV4T1M6KjoqIHwgY29udmV4 OkNvbnZleE9TOkMxKjoqKQorCWVjaG8gYzEtY29udmV4LWJzZAorCWV4aXQgOzsKKyAgICBDMio6 Q29udmV4T1M6KjoqIHwgY29udmV4OkNvbnZleE9TOkMyKjoqKQorCWlmIGdldHN5c2luZm8gLWYg c2NhbGFyX2FjYworCXRoZW4gZWNobyBjMzItY29udmV4LWJzZAorCWVsc2UgZWNobyBjMi1jb252 ZXgtYnNkCisJZmkKKwlleGl0IDs7CisgICAgQzM0KjpDb252ZXhPUzoqOiogfCBjb252ZXg6Q29u dmV4T1M6QzM0KjoqKQorCWVjaG8gYzM0LWNvbnZleC1ic2QKKwlleGl0IDs7CisgICAgQzM4KjpD b252ZXhPUzoqOiogfCBjb252ZXg6Q29udmV4T1M6QzM4KjoqKQorCWVjaG8gYzM4LWNvbnZleC1i c2QKKwlleGl0IDs7CisgICAgQzQqOkNvbnZleE9TOio6KiB8IGNvbnZleDpDb252ZXhPUzpDNCo6 KikKKwllY2hvIGM0LWNvbnZleC1ic2QKKwlleGl0IDs7CisgICAgQ1JBWSpZLU1QOio6KjoqKQor CWVjaG8geW1wLWNyYXktdW5pY29zIiRVTkFNRV9SRUxFQVNFIiB8IHNlZCAtZSAncy9cLlteLl0q JC8uWC8nCisJZXhpdCA7OworICAgIENSQVkqW0EtWl05MDoqOio6KikKKwllY2hvICIkVU5BTUVf TUFDSElORSItY3JheS11bmljb3MiJFVOQU1FX1JFTEVBU0UiIFwKKwl8IHNlZCAtZSAncy9DUkFZ LipcKFtBLVpdOTBcKS9cMS8nIFwKKwkgICAgICAtZSB5L0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZX WFlaL2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6LyBcCisJICAgICAgLWUgJ3MvXC5bXi5dKiQv LlgvJworCWV4aXQgOzsKKyAgICBDUkFZKlRTOio6KjoqKQorCWVjaG8gdDkwLWNyYXktdW5pY29z IiRVTkFNRV9SRUxFQVNFIiB8IHNlZCAtZSAncy9cLlteLl0qJC8uWC8nCisJZXhpdCA7OworICAg IENSQVkqVDNFOio6KjoqKQorCWVjaG8gYWxwaGFldjUtY3JheS11bmljb3NtayIkVU5BTUVfUkVM RUFTRSIgfCBzZWQgLWUgJ3MvXC5bXi5dKiQvLlgvJworCWV4aXQgOzsKKyAgICBDUkFZKlNWMToq Oio6KikKKwllY2hvIHN2MS1jcmF5LXVuaWNvcyIkVU5BTUVfUkVMRUFTRSIgfCBzZWQgLWUgJ3Mv XC5bXi5dKiQvLlgvJworCWV4aXQgOzsKKyAgICAqOlVOSUNPUy9tcDoqOiopCisJZWNobyBjcmF5 bnYtY3JheS11bmljb3NtcCIkVU5BTUVfUkVMRUFTRSIgfCBzZWQgLWUgJ3MvXC5bXi5dKiQvLlgv JworCWV4aXQgOzsKKyAgICBGMzBbMDFdOlVOSVhfU3lzdGVtX1Y6KjoqIHwgRjcwMDpVTklYX1N5 c3RlbV9WOio6KikKKwlGVUpJVFNVX1BST0M9JCh1bmFtZSAtbSB8IHRyIEFCQ0RFRkdISUpLTE1O T1BRUlNUVVZXWFlaIGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6KQorCUZVSklUU1VfU1lTPSQo dW5hbWUgLXAgfCB0ciBBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiBhYmNkZWZnaGlqa2xtbm9w cXJzdHV2d3h5eiB8IHNlZCAtZSAncy9cLy8vJykKKwlGVUpJVFNVX1JFTD0kKGVjaG8gIiRVTkFN RV9SRUxFQVNFIiB8IHNlZCAtZSAncy8gL18vJykKKwllY2hvICIke0ZVSklUU1VfUFJPQ30tZnVq aXRzdS0ke0ZVSklUU1VfU1lTfSR7RlVKSVRTVV9SRUx9IgorCWV4aXQgOzsKKyAgICA1MDAwOlVO SVhfU3lzdGVtX1Y6NC4qOiopCisJRlVKSVRTVV9TWVM9JCh1bmFtZSAtcCB8IHRyIEFCQ0RFRkdI SUpLTE1OT1BRUlNUVVZXWFlaIGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IHwgc2VkIC1lICdz L1wvLy8nKQorCUZVSklUU1VfUkVMPSQoZWNobyAiJFVOQU1FX1JFTEVBU0UiIHwgdHIgQUJDREVG R0hJSktMTU5PUFFSU1RVVldYWVogYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXogfCBzZWQgLWUg J3MvIC9fLycpCisJZWNobyAic3BhcmMtZnVqaXRzdS0ke0ZVSklUU1VfU1lTfSR7RlVKSVRTVV9S RUx9IgorCWV4aXQgOzsKKyAgICBpKjg2OkJTRC8zODY6KjoqIHwgaSo4NjpCU0QvT1M6KjoqIHwg KjpBc2NlbmRcIEVtYmVkZGVkL09TOio6KikKKwllY2hvICIkVU5BTUVfTUFDSElORSItcGMtYnNk aSIkVU5BTUVfUkVMRUFTRSIKKwlleGl0IDs7CisgICAgc3BhcmMqOkJTRC9PUzoqOiopCisJZWNo byBzcGFyYy11bmtub3duLWJzZGkiJFVOQU1FX1JFTEVBU0UiCisJZXhpdCA7OworICAgICo6QlNE L09TOio6KikKKwllY2hvICIkVU5BTUVfTUFDSElORSItdW5rbm93bi1ic2RpIiRVTkFNRV9SRUxF QVNFIgorCWV4aXQgOzsKKyAgICBhcm06RnJlZUJTRDoqOiopCisJVU5BTUVfUFJPQ0VTU09SPSQo dW5hbWUgLXApCisJc2V0X2NjX2Zvcl9idWlsZAorCWlmIGVjaG8gX19BUk1fUENTX1ZGUCB8ICRD Q19GT1JfQlVJTEQgLUUgLSAyPi9kZXYvbnVsbCBcCisJICAgIHwgZ3JlcCAtcSBfX0FSTV9QQ1Nf VkZQCisJdGhlbgorCSAgICBlY2hvICIke1VOQU1FX1BST0NFU1NPUn0iLXVua25vd24tZnJlZWJz ZCIkKGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvWy0oXS4qLy8nKSItZ251ZWFiaQor CWVsc2UKKwkgICAgZWNobyAiJHtVTkFNRV9QUk9DRVNTT1J9Ii11bmtub3duLWZyZWVic2QiJChl Y2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1stKF0uKi8vJykiLWdudWVhYmloZgorCWZp CisJZXhpdCA7OworICAgICo6RnJlZUJTRDoqOiopCisJVU5BTUVfUFJPQ0VTU09SPSQoL3Vzci9i aW4vdW5hbWUgLXApCisJY2FzZSAiJFVOQU1FX1BST0NFU1NPUiIgaW4KKwkgICAgYW1kNjQpCisJ CVVOQU1FX1BST0NFU1NPUj14ODZfNjQgOzsKKwkgICAgaTM4NikKKwkJVU5BTUVfUFJPQ0VTU09S PWk1ODYgOzsKKwllc2FjCisJZWNobyAiJFVOQU1FX1BST0NFU1NPUiItdW5rbm93bi1mcmVlYnNk IiQoZWNobyAiJFVOQU1FX1JFTEVBU0UifHNlZCAtZSAncy9bLShdLiovLycpIgorCWV4aXQgOzsK KyAgICBpKjpDWUdXSU4qOiopCisJZWNobyAiJFVOQU1FX01BQ0hJTkUiLXBjLWN5Z3dpbgorCWV4 aXQgOzsKKyAgICAqOk1JTkdXNjQqOiopCisJZWNobyAiJFVOQU1FX01BQ0hJTkUiLXBjLW1pbmd3 NjQKKwlleGl0IDs7CisgICAgKjpNSU5HVyo6KikKKwllY2hvICIkVU5BTUVfTUFDSElORSItcGMt bWluZ3czMgorCWV4aXQgOzsKKyAgICAqOk1TWVMqOiopCisJZWNobyAiJFVOQU1FX01BQ0hJTkUi LXBjLW1zeXMKKwlleGl0IDs7CisgICAgaSo6UFcqOiopCisJZWNobyAiJFVOQU1FX01BQ0hJTkUi LXBjLXB3MzIKKwlleGl0IDs7CisgICAgKjpJbnRlcml4KjoqKQorCWNhc2UgIiRVTkFNRV9NQUNI SU5FIiBpbgorCSAgICB4ODYpCisJCWVjaG8gaTU4Ni1wYy1pbnRlcml4IiRVTkFNRV9SRUxFQVNF IgorCQlleGl0IDs7CisJICAgIGF1dGhlbnRpY2FtZCB8IGdlbnVpbmVpbnRlbCB8IEVNNjRUKQor CQllY2hvIHg4Nl82NC11bmtub3duLWludGVyaXgiJFVOQU1FX1JFTEVBU0UiCisJCWV4aXQgOzsK KwkgICAgSUE2NCkKKwkJZWNobyBpYTY0LXVua25vd24taW50ZXJpeCIkVU5BTUVfUkVMRUFTRSIK KwkJZXhpdCA7OworCWVzYWMgOzsKKyAgICBpKjpVV0lOKjoqKQorCWVjaG8gIiRVTkFNRV9NQUNI SU5FIi1wYy11d2luCisJZXhpdCA7OworICAgIGFtZDY0OkNZR1dJTio6KjoqIHwgeDg2XzY0OkNZ R1dJTio6KjoqKQorCWVjaG8geDg2XzY0LXBjLWN5Z3dpbgorCWV4aXQgOzsKKyAgICBwcmVwKjpT dW5PUzo1Lio6KikKKwllY2hvIHBvd2VycGNsZS11bmtub3duLXNvbGFyaXMyIiQoZWNobyAiJFVO QU1FX1JFTEVBU0UifHNlZCAtZSAncy9bXi5dKi8vJykiCisJZXhpdCA7OworICAgICo6R05VOio6 KikKKwkjIHRoZSBHTlUgc3lzdGVtCisJZWNobyAiJChlY2hvICIkVU5BTUVfTUFDSElORSJ8c2Vk IC1lICdzLFstL10uKiQsLCcpLXVua25vd24tJExJQkMkKGVjaG8gIiRVTkFNRV9SRUxFQVNFInxz ZWQgLWUgJ3MsLy4qJCwsJykiCisJZXhpdCA7OworICAgICo6R05VLyo6KjoqKQorCSMgb3RoZXIg c3lzdGVtcyB3aXRoIEdOVSBsaWJjIGFuZCB1c2VybGFuZAorCWVjaG8gIiRVTkFNRV9NQUNISU5F LXVua25vd24tJChlY2hvICIkVU5BTUVfU1lTVEVNIiB8IHNlZCAncyxeW14vXSovLCwnIHwgdHIg Ils6dXBwZXI6XSIgIls6bG93ZXI6XSIpJChlY2hvICIkVU5BTUVfUkVMRUFTRSJ8c2VkIC1lICdz L1stKF0uKi8vJyktJExJQkMiCisJZXhpdCA7OworICAgICo6TWluaXg6KjoqKQorCWVjaG8gIiRV TkFNRV9NQUNISU5FIi11bmtub3duLW1pbml4CisJZXhpdCA7OworICAgIGFhcmNoNjQ6TGludXg6 KjoqKQorCWVjaG8gIiRVTkFNRV9NQUNISU5FIi11bmtub3duLWxpbnV4LSIkTElCQyIKKwlleGl0 IDs7CisgICAgYWFyY2g2NF9iZTpMaW51eDoqOiopCisJVU5BTUVfTUFDSElORT1hYXJjaDY0X2Jl CisJZWNobyAiJFVOQU1FX01BQ0hJTkUiLXVua25vd24tbGludXgtIiRMSUJDIgorCWV4aXQgOzsK KyAgICBhbHBoYTpMaW51eDoqOiopCisJY2FzZSAkKHNlZCAtbiAnL15jcHUgbW9kZWwvcy9eLio6 IFwoLipcKS9cMS9wJyAvcHJvYy9jcHVpbmZvIDI+L2Rldi9udWxsKSBpbgorCSAgRVY1KSAgIFVO QU1FX01BQ0hJTkU9YWxwaGFldjUgOzsKKwkgIEVWNTYpICBVTkFNRV9NQUNISU5FPWFscGhhZXY1 NiA7OworCSAgUENBNTYpIFVOQU1FX01BQ0hJTkU9YWxwaGFwY2E1NiA7OworCSAgUENBNTcpIFVO QU1FX01BQ0hJTkU9YWxwaGFwY2E1NiA7OworCSAgRVY2KSAgIFVOQU1FX01BQ0hJTkU9YWxwaGFl djYgOzsKKwkgIEVWNjcpICBVTkFNRV9NQUNISU5FPWFscGhhZXY2NyA7OworCSAgRVY2OCopIFVO QU1FX01BQ0hJTkU9YWxwaGFldjY4IDs7CisJZXNhYworCW9iamR1bXAgLS1wcml2YXRlLWhlYWRl cnMgL2Jpbi9zaCB8IGdyZXAgLXEgbGQuc28uMQorCWlmIHRlc3QgIiQ/IiA9IDAgOyB0aGVuIExJ QkM9Z251bGliYzEgOyBmaQorCWVjaG8gIiRVTkFNRV9NQUNISU5FIi11bmtub3duLWxpbnV4LSIk TElCQyIKKwlleGl0IDs7CisgICAgYXJjOkxpbnV4Oio6KiB8IGFyY2ViOkxpbnV4Oio6KikKKwll Y2hvICIkVU5BTUVfTUFDSElORSItdW5rbm93bi1saW51eC0iJExJQkMiCisJZXhpdCA7OworICAg IGFybSo6TGludXg6KjoqKQorCXNldF9jY19mb3JfYnVpbGQKKwlpZiBlY2hvIF9fQVJNX0VBQklf XyB8ICRDQ19GT1JfQlVJTEQgLUUgLSAyPi9kZXYvbnVsbCBcCisJICAgIHwgZ3JlcCAtcSBfX0FS TV9FQUJJX18KKwl0aGVuCisJICAgIGVjaG8gIiRVTkFNRV9NQUNISU5FIi11bmtub3duLWxpbnV4 LSIkTElCQyIKKwllbHNlCisJICAgIGlmIGVjaG8gX19BUk1fUENTX1ZGUCB8ICRDQ19GT1JfQlVJ TEQgLUUgLSAyPi9kZXYvbnVsbCBcCisJCXwgZ3JlcCAtcSBfX0FSTV9QQ1NfVkZQCisJICAgIHRo ZW4KKwkJZWNobyAiJFVOQU1FX01BQ0hJTkUiLXVua25vd24tbGludXgtIiRMSUJDImVhYmkKKwkg ICAgZWxzZQorCQllY2hvICIkVU5BTUVfTUFDSElORSItdW5rbm93bi1saW51eC0iJExJQkMiZWFi aWhmCisJICAgIGZpCisJZmkKKwlleGl0IDs7CisgICAgYXZyMzIqOkxpbnV4Oio6KikKKwllY2hv ICIkVU5BTUVfTUFDSElORSItdW5rbm93bi1saW51eC0iJExJQkMiCisJZXhpdCA7OworICAgIGNy aXM6TGludXg6KjoqKQorCWVjaG8gIiRVTkFNRV9NQUNISU5FIi1heGlzLWxpbnV4LSIkTElCQyIK KwlleGl0IDs7CisgICAgY3Jpc3YzMjpMaW51eDoqOiopCisJZWNobyAiJFVOQU1FX01BQ0hJTkUi LWF4aXMtbGludXgtIiRMSUJDIgorCWV4aXQgOzsKKyAgICBlMms6TGludXg6KjoqKQorCWVjaG8g IiRVTkFNRV9NQUNISU5FIi11bmtub3duLWxpbnV4LSIkTElCQyIKKwlleGl0IDs7CisgICAgZnJ2 OkxpbnV4Oio6KikKKwllY2hvICIkVU5BTUVfTUFDSElORSItdW5rbm93bi1saW51eC0iJExJQkMi CisJZXhpdCA7OworICAgIGhleGFnb246TGludXg6KjoqKQorCWVjaG8gIiRVTkFNRV9NQUNISU5F Ii11bmtub3duLWxpbnV4LSIkTElCQyIKKwlleGl0IDs7CisgICAgaSo4NjpMaW51eDoqOiopCisJ ZWNobyAiJFVOQU1FX01BQ0hJTkUiLXBjLWxpbnV4LSIkTElCQyIKKwlleGl0IDs7CisgICAgaWE2 NDpMaW51eDoqOiopCisJZWNobyAiJFVOQU1FX01BQ0hJTkUiLXVua25vd24tbGludXgtIiRMSUJD IgorCWV4aXQgOzsKKyAgICBrMW9tOkxpbnV4Oio6KikKKwllY2hvICIkVU5BTUVfTUFDSElORSIt dW5rbm93bi1saW51eC0iJExJQkMiCisJZXhpdCA7OworICAgIGxvb25nYXJjaDMyOkxpbnV4Oio6 KiB8IGxvb25nYXJjaDY0OkxpbnV4Oio6KiB8IGxvb25nYXJjaHgzMjpMaW51eDoqOiopCisJZWNo byAiJFVOQU1FX01BQ0hJTkUiLXVua25vd24tbGludXgtIiRMSUJDIgorCWV4aXQgOzsKKyAgICBt MzJyKjpMaW51eDoqOiopCisJZWNobyAiJFVOQU1FX01BQ0hJTkUiLXVua25vd24tbGludXgtIiRM SUJDIgorCWV4aXQgOzsKKyAgICBtNjgqOkxpbnV4Oio6KikKKwllY2hvICIkVU5BTUVfTUFDSElO RSItdW5rbm93bi1saW51eC0iJExJQkMiCisJZXhpdCA7OworICAgIG1pcHM6TGludXg6KjoqIHwg bWlwczY0OkxpbnV4Oio6KikKKwlzZXRfY2NfZm9yX2J1aWxkCisJSVNfR0xJQkM9MAorCXRlc3Qg eCIke0xJQkN9IiA9IHhnbnUgJiYgSVNfR0xJQkM9MQorCXNlZCAncy9eCS8vJyA8PCBFT0YgPiAi JGR1bW15LmMiCisJI3VuZGVmIENQVQorCSN1bmRlZiBtaXBzCisJI3VuZGVmIG1pcHNlbAorCSN1 bmRlZiBtaXBzNjQKKwkjdW5kZWYgbWlwczY0ZWwKKwkjaWYgJHtJU19HTElCQ30gJiYgZGVmaW5l ZChfQUJJNjQpCisJTElCQ0FCST1nbnVhYmk2NAorCSNlbHNlCisJI2lmICR7SVNfR0xJQkN9ICYm IGRlZmluZWQoX0FCSU4zMikKKwlMSUJDQUJJPWdudWFiaW4zMgorCSNlbHNlCisJTElCQ0FCST0k e0xJQkN9CisJI2VuZGlmCisJI2VuZGlmCisKKwkjaWYgJHtJU19HTElCQ30gJiYgZGVmaW5lZChf X21pcHM2NCkgJiYgZGVmaW5lZChfX21pcHNfaXNhX3JldikgJiYgX19taXBzX2lzYV9yZXY+PTYK KwlDUFU9bWlwc2lzYTY0cjYKKwkjZWxzZQorCSNpZiAke0lTX0dMSUJDfSAmJiAhZGVmaW5lZChf X21pcHM2NCkgJiYgZGVmaW5lZChfX21pcHNfaXNhX3JldikgJiYgX19taXBzX2lzYV9yZXY+PTYK KwlDUFU9bWlwc2lzYTMycjYKKwkjZWxzZQorCSNpZiBkZWZpbmVkKF9fbWlwczY0KQorCUNQVT1t aXBzNjQKKwkjZWxzZQorCUNQVT1taXBzCisJI2VuZGlmCisJI2VuZGlmCisJI2VuZGlmCisKKwkj aWYgZGVmaW5lZChfX01JUFNFTF9fKSB8fCBkZWZpbmVkKF9fTUlQU0VMKSB8fCBkZWZpbmVkKF9N SVBTRUwpIHx8IGRlZmluZWQoTUlQU0VMKQorCU1JUFNfRU5ESUFOPWVsCisJI2Vsc2UKKwkjaWYg ZGVmaW5lZChfX01JUFNFQl9fKSB8fCBkZWZpbmVkKF9fTUlQU0VCKSB8fCBkZWZpbmVkKF9NSVBT RUIpIHx8IGRlZmluZWQoTUlQU0VCKQorCU1JUFNfRU5ESUFOPQorCSNlbHNlCisJTUlQU19FTkRJ QU49CisJI2VuZGlmCisJI2VuZGlmCitFT0YKKwlldmFsICIkKCRDQ19GT1JfQlVJTEQgLUUgIiRk dW1teS5jIiAyPi9kZXYvbnVsbCB8IGdyZXAgJ15DUFVcfF5NSVBTX0VORElBTlx8XkxJQkNBQkkn KSIKKwl0ZXN0ICJ4JENQVSIgIT0geCAmJiB7IGVjaG8gIiRDUFUke01JUFNfRU5ESUFOfS11bmtu b3duLWxpbnV4LSRMSUJDQUJJIjsgZXhpdDsgfQorCTs7CisgICAgbWlwczY0ZWw6TGludXg6Kjoq KQorCWVjaG8gIiRVTkFNRV9NQUNISU5FIi11bmtub3duLWxpbnV4LSIkTElCQyIKKwlleGl0IDs7 CisgICAgb3BlbnJpc2MqOkxpbnV4Oio6KikKKwllY2hvIG9yMWstdW5rbm93bi1saW51eC0iJExJ QkMiCisJZXhpdCA7OworICAgIG9yMzI6TGludXg6KjoqIHwgb3Ixayo6TGludXg6KjoqKQorCWVj aG8gIiRVTkFNRV9NQUNISU5FIi11bmtub3duLWxpbnV4LSIkTElCQyIKKwlleGl0IDs7CisgICAg cGFkcmU6TGludXg6KjoqKQorCWVjaG8gc3BhcmMtdW5rbm93bi1saW51eC0iJExJQkMiCisJZXhp dCA7OworICAgIHBhcmlzYzY0OkxpbnV4Oio6KiB8IGhwcGE2NDpMaW51eDoqOiopCisJZWNobyBo cHBhNjQtdW5rbm93bi1saW51eC0iJExJQkMiCisJZXhpdCA7OworICAgIHBhcmlzYzpMaW51eDoq OiogfCBocHBhOkxpbnV4Oio6KikKKwkjIExvb2sgZm9yIENQVSBsZXZlbAorCWNhc2UgJChncmVw ICdeY3B1W15hLXpdKjonIC9wcm9jL2NwdWluZm8gMj4vZGV2L251bGwgfCBjdXQgLWQnICcgLWYy KSBpbgorCSAgUEE3KikgZWNobyBocHBhMS4xLXVua25vd24tbGludXgtIiRMSUJDIiA7OworCSAg UEE4KikgZWNobyBocHBhMi4wLXVua25vd24tbGludXgtIiRMSUJDIiA7OworCSAgKikgICAgZWNo byBocHBhLXVua25vd24tbGludXgtIiRMSUJDIiA7OworCWVzYWMKKwlleGl0IDs7CisgICAgcHBj NjQ6TGludXg6KjoqKQorCWVjaG8gcG93ZXJwYzY0LXVua25vd24tbGludXgtIiRMSUJDIgorCWV4 aXQgOzsKKyAgICBwcGM6TGludXg6KjoqKQorCWVjaG8gcG93ZXJwYy11bmtub3duLWxpbnV4LSIk TElCQyIKKwlleGl0IDs7CisgICAgcHBjNjRsZTpMaW51eDoqOiopCisJZWNobyBwb3dlcnBjNjRs ZS11bmtub3duLWxpbnV4LSIkTElCQyIKKwlleGl0IDs7CisgICAgcHBjbGU6TGludXg6KjoqKQor CWVjaG8gcG93ZXJwY2xlLXVua25vd24tbGludXgtIiRMSUJDIgorCWV4aXQgOzsKKyAgICByaXNj djMyOkxpbnV4Oio6KiB8IHJpc2N2MzJiZTpMaW51eDoqOiogfCByaXNjdjY0OkxpbnV4Oio6KiB8 IHJpc2N2NjRiZTpMaW51eDoqOiopCisJZWNobyAiJFVOQU1FX01BQ0hJTkUiLXVua25vd24tbGlu dXgtIiRMSUJDIgorCWV4aXQgOzsKKyAgICBzMzkwOkxpbnV4Oio6KiB8IHMzOTB4OkxpbnV4Oio6 KikKKwllY2hvICIkVU5BTUVfTUFDSElORSItaWJtLWxpbnV4LSIkTElCQyIKKwlleGl0IDs7Cisg ICAgc2g2NCo6TGludXg6KjoqKQorCWVjaG8gIiRVTkFNRV9NQUNISU5FIi11bmtub3duLWxpbnV4 LSIkTElCQyIKKwlleGl0IDs7CisgICAgc2gqOkxpbnV4Oio6KikKKwllY2hvICIkVU5BTUVfTUFD SElORSItdW5rbm93bi1saW51eC0iJExJQkMiCisJZXhpdCA7OworICAgIHNwYXJjOkxpbnV4Oio6 KiB8IHNwYXJjNjQ6TGludXg6KjoqKQorCWVjaG8gIiRVTkFNRV9NQUNISU5FIi11bmtub3duLWxp bnV4LSIkTElCQyIKKwlleGl0IDs7CisgICAgdGlsZSo6TGludXg6KjoqKQorCWVjaG8gIiRVTkFN RV9NQUNISU5FIi11bmtub3duLWxpbnV4LSIkTElCQyIKKwlleGl0IDs7CisgICAgdmF4OkxpbnV4 Oio6KikKKwllY2hvICIkVU5BTUVfTUFDSElORSItZGVjLWxpbnV4LSIkTElCQyIKKwlleGl0IDs7 CisgICAgeDg2XzY0OkxpbnV4Oio6KikKKwlzZXRfY2NfZm9yX2J1aWxkCisJTElCQ0FCST0kTElC QworCWlmIHRlc3QgIiRDQ19GT1JfQlVJTEQiICE9IG5vX2NvbXBpbGVyX2ZvdW5kOyB0aGVuCisJ ICAgIGlmIChlY2hvICcjaWZkZWYgX19JTFAzMl9fJzsgZWNobyBJU19YMzI7IGVjaG8gJyNlbmRp ZicpIHwgXAorCQkoQ0NPUFRTPSIiICRDQ19GT1JfQlVJTEQgLUUgLSAyPi9kZXYvbnVsbCkgfCBc CisJCWdyZXAgSVNfWDMyID4vZGV2L251bGwKKwkgICAgdGhlbgorCQlMSUJDQUJJPSIkTElCQyJ4 MzIKKwkgICAgZmkKKwlmaQorCWVjaG8gIiRVTkFNRV9NQUNISU5FIi1wYy1saW51eC0iJExJQkNB QkkiCisJZXhpdCA7OworICAgIHh0ZW5zYSo6TGludXg6KjoqKQorCWVjaG8gIiRVTkFNRV9NQUNI SU5FIi11bmtub3duLWxpbnV4LSIkTElCQyIKKwlleGl0IDs7CisgICAgaSo4NjpEWU5JWC9wdHg6 NCo6KikKKwkjIHB0eCA0LjAgZG9lcyB1bmFtZSAtcyBjb3JyZWN0bHksIHdpdGggRFlOSVgvcHR4 IGluIHRoZXJlLgorCSMgZWFybGllciB2ZXJzaW9ucyBhcmUgbWVzc2VkIHVwIGFuZCBwdXQgdGhl IG5vZGVuYW1lIGluIGJvdGgKKwkjIHN5c25hbWUgYW5kIG5vZGVuYW1lLgorCWVjaG8gaTM4Ni1z ZXF1ZW50LXN5c3Y0CisJZXhpdCA7OworICAgIGkqODY6VU5JWF9TVjo0LjJNUDoyLiopCisJIyBV bml4d2FyZSBpcyBhbiBvZmZzaG9vdCBvZiBTVlI0LCBidXQgaXQgaGFzIGl0cyBvd24gdmVyc2lv bgorCSMgbnVtYmVyIHNlcmllcyBzdGFydGluZyB3aXRoIDIuLi4KKwkjIEkgYW0gbm90IHBvc2l0 aXZlIHRoYXQgb3RoZXIgU1ZSNCBzeXN0ZW1zIHdvbid0IG1hdGNoIHRoaXMsCisJIyBJIGp1c3Qg aGF2ZSB0byBob3BlLiAgLS0gcm1zLgorCSMgVXNlIHN5c3Y0LjJ1dy4uLiBzbyB0aGF0IHN5c3Y0 KiBtYXRjaGVzIGl0LgorCWVjaG8gIiRVTkFNRV9NQUNISU5FIi1wYy1zeXN2NC4ydXciJFVOQU1F X1ZFUlNJT04iCisJZXhpdCA7OworICAgIGkqODY6T1MvMjoqOiopCisJIyBJZiB3ZSB3ZXJlIGFi bGUgdG8gZmluZCBgdW5hbWUnLCB0aGVuIEVNWCBVbml4IGNvbXBhdGliaWxpdHkKKwkjIGlzIHBy b2JhYmx5IGluc3RhbGxlZC4KKwllY2hvICIkVU5BTUVfTUFDSElORSItcGMtb3MyLWVteAorCWV4 aXQgOzsKKyAgICBpKjg2OlhUUy0zMDA6KjpTVE9QKQorCWVjaG8gIiRVTkFNRV9NQUNISU5FIi11 bmtub3duLXN0b3AKKwlleGl0IDs7CisgICAgaSo4NjphdGhlb3M6KjoqKQorCWVjaG8gIiRVTkFN RV9NQUNISU5FIi11bmtub3duLWF0aGVvcworCWV4aXQgOzsKKyAgICBpKjg2OnN5bGxhYmxlOio6 KikKKwllY2hvICIkVU5BTUVfTUFDSElORSItcGMtc3lsbGFibGUKKwlleGl0IDs7CisgICAgaSo4 NjpMeW54T1M6Mi4qOiogfCBpKjg2Okx5bnhPUzozLlswMV0qOiogfCBpKjg2Okx5bnhPUzo0Llsw Ml0qOiopCisJZWNobyBpMzg2LXVua25vd24tbHlueG9zIiRVTkFNRV9SRUxFQVNFIgorCWV4aXQg OzsKKyAgICBpKjg2OipET1M6KjoqKQorCWVjaG8gIiRVTkFNRV9NQUNISU5FIi1wYy1tc2Rvc2Rq Z3BwCisJZXhpdCA7OworICAgIGkqODY6Kjo0Lio6KikKKwlVTkFNRV9SRUw9JChlY2hvICIkVU5B TUVfUkVMRUFTRSIgfCBzZWQgJ3MvXC9NUCQvLycpCisJaWYgZ3JlcCBOb3ZlbGwgL3Vzci9pbmNs dWRlL2xpbmsuaCA+L2Rldi9udWxsIDI+L2Rldi9udWxsOyB0aGVuCisJCWVjaG8gIiRVTkFNRV9N QUNISU5FIi11bml2ZWwtc3lzdiIkVU5BTUVfUkVMIgorCWVsc2UKKwkJZWNobyAiJFVOQU1FX01B Q0hJTkUiLXBjLXN5c3YiJFVOQU1FX1JFTCIKKwlmaQorCWV4aXQgOzsKKyAgICBpKjg2Oio6NTpb Njc4XSopCisJIyBVbml4V2FyZSA3LngsIE9wZW5VTklYIGFuZCBPcGVuU2VydmVyIDYuCisJY2Fz ZSAkKC9iaW4vdW5hbWUgLVggfCBncmVwICJeTWFjaGluZSIpIGluCisJICAgICo0ODYqKQkgICAg IFVOQU1FX01BQ0hJTkU9aTQ4NiA7OworCSAgICAqUGVudGl1bSkJICAgICBVTkFNRV9NQUNISU5F PWk1ODYgOzsKKwkgICAgKlBlbnQqfCpDZWxlcm9uKSBVTkFNRV9NQUNISU5FPWk2ODYgOzsKKwll c2FjCisJZWNobyAiJFVOQU1FX01BQ0hJTkUtdW5rbm93bi1zeXN2JHtVTkFNRV9SRUxFQVNFfSR7 VU5BTUVfU1lTVEVNfSR7VU5BTUVfVkVSU0lPTn0iCisJZXhpdCA7OworICAgIGkqODY6KjozLjI6 KikKKwlpZiB0ZXN0IC1mIC91c3Ivb3B0aW9ucy9jYi5uYW1lOyB0aGVuCisJCVVOQU1FX1JFTD0k KHNlZCAtbiAncy8uKlZlcnNpb24gLy9wJyA8L3Vzci9vcHRpb25zL2NiLm5hbWUpCisJCWVjaG8g IiRVTkFNRV9NQUNISU5FIi1wYy1pc2MiJFVOQU1FX1JFTCIKKwllbGlmIC9iaW4vdW5hbWUgLVgg Mj4vZGV2L251bGwgPi9kZXYvbnVsbCA7IHRoZW4KKwkJVU5BTUVfUkVMPSQoICgvYmluL3VuYW1l IC1YfGdyZXAgUmVsZWFzZXxzZWQgLWUgJ3MvLio9IC8vJykpCisJCSgvYmluL3VuYW1lIC1YfGdy ZXAgaTgwNDg2ID4vZGV2L251bGwpICYmIFVOQU1FX01BQ0hJTkU9aTQ4NgorCQkoL2Jpbi91bmFt ZSAtWHxncmVwICdeTWFjaGluZS4qUGVudGl1bScgPi9kZXYvbnVsbCkgXAorCQkJJiYgVU5BTUVf TUFDSElORT1pNTg2CisJCSgvYmluL3VuYW1lIC1YfGdyZXAgJ15NYWNoaW5lLipQZW50ICpJSScg Pi9kZXYvbnVsbCkgXAorCQkJJiYgVU5BTUVfTUFDSElORT1pNjg2CisJCSgvYmluL3VuYW1lIC1Y fGdyZXAgJ15NYWNoaW5lLipQZW50aXVtIFBybycgPi9kZXYvbnVsbCkgXAorCQkJJiYgVU5BTUVf TUFDSElORT1pNjg2CisJCWVjaG8gIiRVTkFNRV9NQUNISU5FIi1wYy1zY28iJFVOQU1FX1JFTCIK KwllbHNlCisJCWVjaG8gIiRVTkFNRV9NQUNISU5FIi1wYy1zeXN2MzIKKwlmaQorCWV4aXQgOzsK KyAgICBwYzoqOio6KikKKwkjIExlZnQgaGVyZSBmb3IgY29tcGF0aWJpbGl0eToKKwkjIHVuYW1l IC1tIHByaW50cyBmb3IgREpHUFAgYWx3YXlzICdwYycsIGJ1dCBpdCBwcmludHMgbm90aGluZyBh Ym91dAorCSMgdGhlIHByb2Nlc3Nvciwgc28gd2UgcGxheSBzYWZlIGJ5IGFzc3VtaW5nIGk1ODYu CisJIyBOb3RlOiB3aGF0ZXZlciB0aGlzIGlzLCBpdCBNVVNUIGJlIHRoZSBzYW1lIGFzIHdoYXQg Y29uZmlnLnN1YgorCSMgcHJpbnRzIGZvciB0aGUgImRqZ3BwIiBob3N0LCBvciBlbHNlIEdEQiBj b25maWd1cmUgd2lsbCBkZWNpZGUgdGhhdAorCSMgdGhpcyBpcyBhIGNyb3NzLWJ1aWxkLgorCWVj aG8gaTU4Ni1wYy1tc2Rvc2RqZ3BwCisJZXhpdCA7OworICAgIEludGVsOk1hY2g6Myo6KikKKwll Y2hvIGkzODYtcGMtbWFjaDMKKwlleGl0IDs7CisgICAgcGFyYWdvbjoqOio6KikKKwllY2hvIGk4 NjAtaW50ZWwtb3NmMQorCWV4aXQgOzsKKyAgICBpODYwOio6NC4qOiopICMgaTg2MC1TVlI0CisJ aWYgZ3JlcCBTdGFyZGVudCAvdXNyL2luY2x1ZGUvc3lzL3VhZG1pbi5oID4vZGV2L251bGwgMj4m MSA7IHRoZW4KKwkgIGVjaG8gaTg2MC1zdGFyZGVudC1zeXN2IiRVTkFNRV9SRUxFQVNFIiAjIFN0 YXJkZW50IFZpc3RyYSBpODYwLVNWUjQKKwllbHNlICMgQWRkIG90aGVyIGk4NjAtU1ZSNCB2ZW5k b3JzIGJlbG93IGFzIHRoZXkgYXJlIGRpc2NvdmVyZWQuCisJICBlY2hvIGk4NjAtdW5rbm93bi1z eXN2IiRVTkFNRV9SRUxFQVNFIiAgIyBVbmtub3duIGk4NjAtU1ZSNAorCWZpCisJZXhpdCA7Owor ICAgIG1pbmkqOkNUSVg6U1lTKjU6KikKKwkjICJtaW5pZnJhbWUiCisJZWNobyBtNjgwMTAtY29u dmVyZ2VudC1zeXN2CisJZXhpdCA7OworICAgIG1jNjhrOlVOSVg6U1lTVEVNNTozLjUxbSkKKwll Y2hvIG02OGstY29udmVyZ2VudC1zeXN2CisJZXhpdCA7OworICAgIE02ODA/MDpELU5JWDo1LjM6 KikKKwllY2hvIG02OGstZGlhYi1kbml4CisJZXhpdCA7OworICAgIE02OCo6KjpSM1ZbNTY3OF0q OiopCisJdGVzdCAtciAvc3lzVjY4ICYmIHsgZWNobyAnbTY4ay1tb3Rvcm9sYS1zeXN2JzsgZXhp dDsgfSA7OworICAgIDNbMzQ1XT8/Oio6NC4wOjMuMCB8IDNbMzRdPz9BOio6NC4wOjMuMCB8IDNb MzRdPz8sKjoqOjQuMDozLjAgfCAzWzM0XT8/Lyo6Kjo0LjA6My4wIHwgNDQwMDoqOjQuMDozLjAg fCA0ODUwOio6NC4wOjMuMCB8IFNLQTQwOio6NC4wOjMuMCB8IFNEUzI6Kjo0LjA6My4wIHwgU0hH MjoqOjQuMDozLjAgfCBTNzUwMSo6Kjo0LjA6My4wKQorCU9TX1JFTD0nJworCXRlc3QgLXIgL2V0 Yy8ucmVsaWQgXAorCSYmIE9TX1JFTD0uJChzZWQgLW4gJ3MvW14gXSogW14gXSogXChbMC05XVsw LTldXCkuKi9cMS9wJyA8IC9ldGMvLnJlbGlkKQorCS9iaW4vdW5hbWUgLXAgMj4vZGV2L251bGwg fCBncmVwIDg2ID4vZGV2L251bGwgXAorCSAgJiYgeyBlY2hvIGk0ODYtbmNyLXN5c3Y0LjMiJE9T X1JFTCI7IGV4aXQ7IH0KKwkvYmluL3VuYW1lIC1wIDI+L2Rldi9udWxsIHwgL2Jpbi9ncmVwIGVu dGl1bSA+L2Rldi9udWxsIFwKKwkgICYmIHsgZWNobyBpNTg2LW5jci1zeXN2NC4zIiRPU19SRUwi OyBleGl0OyB9IDs7CisgICAgM1szNF0/PzoqOjQuMDoqIHwgM1szNF0/PywqOio6NC4wOiopCisJ L2Jpbi91bmFtZSAtcCAyPi9kZXYvbnVsbCB8IGdyZXAgODYgPi9kZXYvbnVsbCBcCisJICAmJiB7 IGVjaG8gaTQ4Ni1uY3Itc3lzdjQ7IGV4aXQ7IH0gOzsKKyAgICBOQ1IqOio6NC4yOiogfCBNUFJB Uyo6Kjo0LjI6KikKKwlPU19SRUw9Jy4zJworCXRlc3QgLXIgL2V0Yy8ucmVsaWQgXAorCSAgICAm JiBPU19SRUw9LiQoc2VkIC1uICdzL1teIF0qIFteIF0qIFwoWzAtOV1bMC05XVwpLiovXDEvcCcg PCAvZXRjLy5yZWxpZCkKKwkvYmluL3VuYW1lIC1wIDI+L2Rldi9udWxsIHwgZ3JlcCA4NiA+L2Rl di9udWxsIFwKKwkgICAgJiYgeyBlY2hvIGk0ODYtbmNyLXN5c3Y0LjMiJE9TX1JFTCI7IGV4aXQ7 IH0KKwkvYmluL3VuYW1lIC1wIDI+L2Rldi9udWxsIHwgL2Jpbi9ncmVwIGVudGl1bSA+L2Rldi9u dWxsIFwKKwkgICAgJiYgeyBlY2hvIGk1ODYtbmNyLXN5c3Y0LjMiJE9TX1JFTCI7IGV4aXQ7IH0K KwkvYmluL3VuYW1lIC1wIDI+L2Rldi9udWxsIHwgL2Jpbi9ncmVwIHB0ZXJvbiA+L2Rldi9udWxs IFwKKwkgICAgJiYgeyBlY2hvIGk1ODYtbmNyLXN5c3Y0LjMiJE9TX1JFTCI7IGV4aXQ7IH0gOzsK KyAgICBtNjgqOkx5bnhPUzoyLio6KiB8IG02OCo6THlueE9TOjMuMCo6KikKKwllY2hvIG02OGst dW5rbm93bi1seW54b3MiJFVOQU1FX1JFTEVBU0UiCisJZXhpdCA7OworICAgIG1jNjgwMzA6VU5J WF9TeXN0ZW1fVjo0Lio6KikKKwllY2hvIG02OGstYXRhcmktc3lzdjQKKwlleGl0IDs7CisgICAg VFNVTkFNSTpMeW54T1M6Mi4qOiopCisJZWNobyBzcGFyYy11bmtub3duLWx5bnhvcyIkVU5BTUVf UkVMRUFTRSIKKwlleGl0IDs7CisgICAgcnM2MDAwOkx5bnhPUzoyLio6KikKKwllY2hvIHJzNjAw MC11bmtub3duLWx5bnhvcyIkVU5BTUVfUkVMRUFTRSIKKwlleGl0IDs7CisgICAgUG93ZXJQQzpM eW54T1M6Mi4qOiogfCBQb3dlclBDOkx5bnhPUzozLlswMV0qOiogfCBQb3dlclBDOkx5bnhPUzo0 LlswMl0qOiopCisJZWNobyBwb3dlcnBjLXVua25vd24tbHlueG9zIiRVTkFNRV9SRUxFQVNFIgor CWV4aXQgOzsKKyAgICBTTVtCRV1TOlVOSVhfU1Y6KjoqKQorCWVjaG8gbWlwcy1kZGUtc3lzdiIk VU5BTUVfUkVMRUFTRSIKKwlleGl0IDs7CisgICAgUk0qOlJlbGlhbnRVTklYLSo6KjoqKQorCWVj aG8gbWlwcy1zbmktc3lzdjQKKwlleGl0IDs7CisgICAgUk0qOlNJTklYLSo6KjoqKQorCWVjaG8g bWlwcy1zbmktc3lzdjQKKwlleGl0IDs7CisgICAgKjpTSU5JWC0qOio6KikKKwlpZiB1bmFtZSAt cCAyPi9kZXYvbnVsbCA+L2Rldi9udWxsIDsgdGhlbgorCQlVTkFNRV9NQUNISU5FPSQoICh1bmFt ZSAtcCkgMj4vZGV2L251bGwpCisJCWVjaG8gIiRVTkFNRV9NQUNISU5FIi1zbmktc3lzdjQKKwll bHNlCisJCWVjaG8gbnMzMmstc25pLXN5c3YKKwlmaQorCWV4aXQgOzsKKyAgICBQRU5USVVNOio6 NC4wKjoqKQkjIFVuaXN5cyBgQ2xlYXJQYXRoIEhNUCBJWCA0MDAwJyBTVlI0L01QIGVmZm9ydAor CQkJIyBzYXlzIDxSaWNoYXJkLk0uQmFydGVsQGNjTWFpbC5DZW5zdXMuR09WPgorCWVjaG8gaTU4 Ni11bmlzeXMtc3lzdjQKKwlleGl0IDs7CisgICAgKjpVTklYX1N5c3RlbV9WOjQqOkZUWCopCisJ IyBGcm9tIEdlcmFsZCBIZXdlcyA8aGV3ZXNAb3Blbm1hcmtldC5jb20+LgorCSMgSG93IGFib3V0 IGRpZmZlcmVudGlhdGluZyBiZXR3ZWVuIHN0cmF0dXMgYXJjaGl0ZWN0dXJlcz8gLWRqbQorCWVj aG8gaHBwYTEuMS1zdHJhdHVzLXN5c3Y0CisJZXhpdCA7OworICAgICo6KjoqOkZUWCopCisJIyBG cm9tIHNlYW5mQHN3ZGMuc3RyYXR1cy5jb20uCisJZWNobyBpODYwLXN0cmF0dXMtc3lzdjQKKwll eGl0IDs7CisgICAgaSo4NjpWT1M6KjoqKQorCSMgRnJvbSBQYXVsLkdyZWVuQHN0cmF0dXMuY29t LgorCWVjaG8gIiRVTkFNRV9NQUNISU5FIi1zdHJhdHVzLXZvcworCWV4aXQgOzsKKyAgICAqOlZP UzoqOiopCisJIyBGcm9tIFBhdWwuR3JlZW5Ac3RyYXR1cy5jb20uCisJZWNobyBocHBhMS4xLXN0 cmF0dXMtdm9zCisJZXhpdCA7OworICAgIG1jNjgqOkEvVVg6KjoqKQorCWVjaG8gbTY4ay1hcHBs ZS1hdXgiJFVOQU1FX1JFTEVBU0UiCisJZXhpdCA7OworICAgIG5ld3MqOk5FV1MtT1M6Nio6KikK KwllY2hvIG1pcHMtc29ueS1uZXdzb3M2CisJZXhpdCA7OworICAgIFJbMzRdMDAwOipTeXN0ZW1f Vio6KjoqIHwgUjQwMDA6VU5JWF9TWVNWOio6KiB8IFIqMDAwOlVOSVhfU1Y6KjoqKQorCWlmIHRl c3QgLWQgL3Vzci9uZWM7IHRoZW4KKwkJZWNobyBtaXBzLW5lYy1zeXN2IiRVTkFNRV9SRUxFQVNF IgorCWVsc2UKKwkJZWNobyBtaXBzLXVua25vd24tc3lzdiIkVU5BTUVfUkVMRUFTRSIKKwlmaQor CWV4aXQgOzsKKyAgICBCZUJveDpCZU9TOio6KikJIyBCZU9TIHJ1bm5pbmcgb24gaGFyZHdhcmUg bWFkZSBieSBCZSwgUFBDIG9ubHkuCisJZWNobyBwb3dlcnBjLWJlLWJlb3MKKwlleGl0IDs7Cisg ICAgQmVNYWM6QmVPUzoqOiopCSMgQmVPUyBydW5uaW5nIG9uIE1hYyBvciBNYWMgY2xvbmUsIFBQ QyBvbmx5LgorCWVjaG8gcG93ZXJwYy1hcHBsZS1iZW9zCisJZXhpdCA7OworICAgIEJlUEM6QmVP UzoqOiopCSMgQmVPUyBydW5uaW5nIG9uIEludGVsIFBDIGNvbXBhdGlibGUuCisJZWNobyBpNTg2 LXBjLWJlb3MKKwlleGl0IDs7CisgICAgQmVQQzpIYWlrdToqOiopCSMgSGFpa3UgcnVubmluZyBv biBJbnRlbCBQQyBjb21wYXRpYmxlLgorCWVjaG8gaTU4Ni1wYy1oYWlrdQorCWV4aXQgOzsKKyAg ICB4ODZfNjQ6SGFpa3U6KjoqKQorCWVjaG8geDg2XzY0LXVua25vd24taGFpa3UKKwlleGl0IDs7 CisgICAgU1gtNDpTVVBFUi1VWDoqOiopCisJZWNobyBzeDQtbmVjLXN1cGVydXgiJFVOQU1FX1JF TEVBU0UiCisJZXhpdCA7OworICAgIFNYLTU6U1VQRVItVVg6KjoqKQorCWVjaG8gc3g1LW5lYy1z dXBlcnV4IiRVTkFNRV9SRUxFQVNFIgorCWV4aXQgOzsKKyAgICBTWC02OlNVUEVSLVVYOio6KikK KwllY2hvIHN4Ni1uZWMtc3VwZXJ1eCIkVU5BTUVfUkVMRUFTRSIKKwlleGl0IDs7CisgICAgU1gt NzpTVVBFUi1VWDoqOiopCisJZWNobyBzeDctbmVjLXN1cGVydXgiJFVOQU1FX1JFTEVBU0UiCisJ ZXhpdCA7OworICAgIFNYLTg6U1VQRVItVVg6KjoqKQorCWVjaG8gc3g4LW5lYy1zdXBlcnV4IiRV TkFNRV9SRUxFQVNFIgorCWV4aXQgOzsKKyAgICBTWC04UjpTVVBFUi1VWDoqOiopCisJZWNobyBz eDhyLW5lYy1zdXBlcnV4IiRVTkFNRV9SRUxFQVNFIgorCWV4aXQgOzsKKyAgICBTWC1BQ0U6U1VQ RVItVVg6KjoqKQorCWVjaG8gc3hhY2UtbmVjLXN1cGVydXgiJFVOQU1FX1JFTEVBU0UiCisJZXhp dCA7OworICAgIFBvd2VyKjpSaGFwc29keToqOiopCisJZWNobyBwb3dlcnBjLWFwcGxlLXJoYXBz b2R5IiRVTkFNRV9SRUxFQVNFIgorCWV4aXQgOzsKKyAgICAqOlJoYXBzb2R5Oio6KikKKwllY2hv ICIkVU5BTUVfTUFDSElORSItYXBwbGUtcmhhcHNvZHkiJFVOQU1FX1JFTEVBU0UiCisJZXhpdCA7 OworICAgIGFybTY0OkRhcndpbjoqOiopCisJZWNobyBhYXJjaDY0LWFwcGxlLWRhcndpbiIkVU5B TUVfUkVMRUFTRSIKKwlleGl0IDs7CisgICAgKjpEYXJ3aW46KjoqKQorCVVOQU1FX1BST0NFU1NP Uj0kKHVuYW1lIC1wKQorCWNhc2UgJFVOQU1FX1BST0NFU1NPUiBpbgorCSAgICB1bmtub3duKSBV TkFNRV9QUk9DRVNTT1I9cG93ZXJwYyA7OworCWVzYWMKKwlpZiBjb21tYW5kIC12IHhjb2RlLXNl bGVjdCA+IC9kZXYvbnVsbCAyPiAvZGV2L251bGwgJiYgXAorCQkhIHhjb2RlLXNlbGVjdCAtLXBy aW50LXBhdGggPiAvZGV2L251bGwgMj4gL2Rldi9udWxsIDsgdGhlbgorCSAgICAjIEF2b2lkIGV4 ZWN1dGluZyBjYyBpZiB0aGVyZSBpcyBubyB0b29sY2hhaW4gaW5zdGFsbGVkIGFzCisJICAgICMg Y2Mgd2lsbCBiZSBhIHN0dWIgdGhhdCBwdXRzIHVwIGEgZ3JhcGhpY2FsIGFsZXJ0CisJICAgICMg cHJvbXB0aW5nIHRoZSB1c2VyIHRvIGluc3RhbGwgZGV2ZWxvcGVyIHRvb2xzLgorCSAgICBDQ19G T1JfQlVJTEQ9bm9fY29tcGlsZXJfZm91bmQKKwllbHNlCisJICAgIHNldF9jY19mb3JfYnVpbGQK KwlmaQorCWlmIHRlc3QgIiRDQ19GT1JfQlVJTEQiICE9IG5vX2NvbXBpbGVyX2ZvdW5kOyB0aGVu CisJICAgIGlmIChlY2hvICcjaWZkZWYgX19MUDY0X18nOyBlY2hvIElTXzY0QklUX0FSQ0g7IGVj aG8gJyNlbmRpZicpIHwgXAorCQkgICAoQ0NPUFRTPSIiICRDQ19GT1JfQlVJTEQgLUUgLSAyPi9k ZXYvbnVsbCkgfCBcCisJCSAgIGdyZXAgSVNfNjRCSVRfQVJDSCA+L2Rldi9udWxsCisJICAgIHRo ZW4KKwkJY2FzZSAkVU5BTUVfUFJPQ0VTU09SIGluCisJCSAgICBpMzg2KSBVTkFNRV9QUk9DRVNT T1I9eDg2XzY0IDs7CisJCSAgICBwb3dlcnBjKSBVTkFNRV9QUk9DRVNTT1I9cG93ZXJwYzY0IDs7 CisJCWVzYWMKKwkgICAgZmkKKwkgICAgIyBPbiAxMC40LTEwLjYgb25lIG1pZ2h0IGNvbXBpbGUg Zm9yIFBvd2VyUEMgdmlhIGdjYyAtYXJjaCBwcGMKKwkgICAgaWYgKGVjaG8gJyNpZmRlZiBfX1BP V0VSUENfXyc7IGVjaG8gSVNfUFBDOyBlY2hvICcjZW5kaWYnKSB8IFwKKwkJICAgKENDT1BUUz0i IiAkQ0NfRk9SX0JVSUxEIC1FIC0gMj4vZGV2L251bGwpIHwgXAorCQkgICBncmVwIElTX1BQQyA+ L2Rldi9udWxsCisJICAgIHRoZW4KKwkJVU5BTUVfUFJPQ0VTU09SPXBvd2VycGMKKwkgICAgZmkK KwllbGlmIHRlc3QgIiRVTkFNRV9QUk9DRVNTT1IiID0gaTM4NiA7IHRoZW4KKwkgICAgIyB1bmFt ZSAtbSByZXR1cm5zIGkzODYgb3IgeDg2XzY0CisJICAgIFVOQU1FX1BST0NFU1NPUj0kVU5BTUVf TUFDSElORQorCWZpCisJZWNobyAiJFVOQU1FX1BST0NFU1NPUiItYXBwbGUtZGFyd2luIiRVTkFN RV9SRUxFQVNFIgorCWV4aXQgOzsKKyAgICAqOnByb2NudG8qOio6KiB8ICo6UU5YOlswMTIzNDU2 Nzg5XSo6KikKKwlVTkFNRV9QUk9DRVNTT1I9JCh1bmFtZSAtcCkKKwlpZiB0ZXN0ICIkVU5BTUVf UFJPQ0VTU09SIiA9IHg4NjsgdGhlbgorCQlVTkFNRV9QUk9DRVNTT1I9aTM4NgorCQlVTkFNRV9N QUNISU5FPXBjCisJZmkKKwllY2hvICIkVU5BTUVfUFJPQ0VTU09SIi0iJFVOQU1FX01BQ0hJTkUi LW50by1xbngiJFVOQU1FX1JFTEVBU0UiCisJZXhpdCA7OworICAgICo6UU5YOio6NCopCisJZWNo byBpMzg2LXBjLXFueAorCWV4aXQgOzsKKyAgICBORU8tKjpOT05TVE9QX0tFUk5FTDoqOiopCisJ ZWNobyBuZW8tdGFuZGVtLW5zayIkVU5BTUVfUkVMRUFTRSIKKwlleGl0IDs7CisgICAgTlNFLSo6 Tk9OU1RPUF9LRVJORUw6KjoqKQorCWVjaG8gbnNlLXRhbmRlbS1uc2siJFVOQU1FX1JFTEVBU0Ui CisJZXhpdCA7OworICAgIE5TUi0qOk5PTlNUT1BfS0VSTkVMOio6KikKKwllY2hvIG5zci10YW5k ZW0tbnNrIiRVTkFNRV9SRUxFQVNFIgorCWV4aXQgOzsKKyAgICBOU1YtKjpOT05TVE9QX0tFUk5F TDoqOiopCisJZWNobyBuc3YtdGFuZGVtLW5zayIkVU5BTUVfUkVMRUFTRSIKKwlleGl0IDs7Cisg ICAgTlNYLSo6Tk9OU1RPUF9LRVJORUw6KjoqKQorCWVjaG8gbnN4LXRhbmRlbS1uc2siJFVOQU1F X1JFTEVBU0UiCisJZXhpdCA7OworICAgICo6Tm9uU3RvcC1VWDoqOiopCisJZWNobyBtaXBzLWNv bXBhcS1ub25zdG9wdXgKKwlleGl0IDs7CisgICAgQlMyMDAwOlBPU0lYKjoqOiopCisJZWNobyBi czIwMDAtc2llbWVucy1zeXN2CisJZXhpdCA7OworICAgIERTLyo6VU5JWF9TeXN0ZW1fVjoqOiop CisJZWNobyAiJFVOQU1FX01BQ0hJTkUiLSIkVU5BTUVfU1lTVEVNIi0iJFVOQU1FX1JFTEVBU0Ui CisJZXhpdCA7OworICAgICo6UGxhbjk6KjoqKQorCSMgInVuYW1lIC1tIiBpcyBub3QgY29uc2lz dGVudCwgc28gdXNlICRjcHV0eXBlIGluc3RlYWQuIDM4NgorCSMgaXMgY29udmVydGVkIHRvIGkz ODYgZm9yIGNvbnNpc3RlbmN5IHdpdGggb3RoZXIgeDg2CisJIyBvcGVyYXRpbmcgc3lzdGVtcy4K KwkjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIxNTQKKwlpZiB0ZXN0ICIkY3B1dHlwZSIgPSAzODY7 IHRoZW4KKwkgICAgVU5BTUVfTUFDSElORT1pMzg2CisJZWxzZQorCSAgICBVTkFNRV9NQUNISU5F PSIkY3B1dHlwZSIKKwlmaQorCWVjaG8gIiRVTkFNRV9NQUNISU5FIi11bmtub3duLXBsYW45CisJ ZXhpdCA7OworICAgICo6VE9QUy0xMDoqOiopCisJZWNobyBwZHAxMC11bmtub3duLXRvcHMxMAor CWV4aXQgOzsKKyAgICAqOlRFTkVYOio6KikKKwllY2hvIHBkcDEwLXVua25vd24tdGVuZXgKKwll eGl0IDs7CisgICAgS1MxMDpUT1BTLTIwOio6KiB8IEtMMTA6VE9QUy0yMDoqOiogfCBUWVBFNDpU T1BTLTIwOio6KikKKwllY2hvIHBkcDEwLWRlYy10b3BzMjAKKwlleGl0IDs7CisgICAgWEtMLTE6 VE9QUy0yMDoqOiogfCBUWVBFNTpUT1BTLTIwOio6KikKKwllY2hvIHBkcDEwLXhrbC10b3BzMjAK KwlleGl0IDs7CisgICAgKjpUT1BTLTIwOio6KikKKwllY2hvIHBkcDEwLXVua25vd24tdG9wczIw CisJZXhpdCA7OworICAgICo6SVRTOio6KikKKwllY2hvIHBkcDEwLXVua25vd24taXRzCisJZXhp dCA7OworICAgIFNFSToqOio6U0VJVVgpCisJZWNobyBtaXBzLXNlaS1zZWl1eCIkVU5BTUVfUkVM RUFTRSIKKwlleGl0IDs7CisgICAgKjpEcmFnb25GbHk6KjoqKQorCWVjaG8gIiRVTkFNRV9NQUNI SU5FIi11bmtub3duLWRyYWdvbmZseSIkKGVjaG8gIiRVTkFNRV9SRUxFQVNFInxzZWQgLWUgJ3Mv Wy0oXS4qLy8nKSIKKwlleGl0IDs7CisgICAgKjoqVk1TOio6KikKKwlVTkFNRV9NQUNISU5FPSQo ICh1bmFtZSAtcCkgMj4vZGV2L251bGwpCisJY2FzZSAiJFVOQU1FX01BQ0hJTkUiIGluCisJICAg IEEqKSBlY2hvIGFscGhhLWRlYy12bXMgOyBleGl0IDs7CisJICAgIEkqKSBlY2hvIGlhNjQtZGVj LXZtcyA7IGV4aXQgOzsKKwkgICAgViopIGVjaG8gdmF4LWRlYy12bXMgOyBleGl0IDs7CisJZXNh YyA7OworICAgICo6WEVOSVg6KjpTeXNWKQorCWVjaG8gaTM4Ni1wYy14ZW5peAorCWV4aXQgOzsK KyAgICBpKjg2OnNreW9zOio6KikKKwllY2hvICIkVU5BTUVfTUFDSElORSItcGMtc2t5b3MiJChl Y2hvICIkVU5BTUVfUkVMRUFTRSIgfCBzZWQgLWUgJ3MvIC4qJC8vJykiCisJZXhpdCA7OworICAg IGkqODY6cmRvczoqOiopCisJZWNobyAiJFVOQU1FX01BQ0hJTkUiLXBjLXJkb3MKKwlleGl0IDs7 CisgICAgaSo4NjpBUk9TOio6KikKKwllY2hvICIkVU5BTUVfTUFDSElORSItcGMtYXJvcworCWV4 aXQgOzsKKyAgICB4ODZfNjQ6Vk1rZXJuZWw6KjoqKQorCWVjaG8gIiRVTkFNRV9NQUNISU5FIi11 bmtub3duLWVzeAorCWV4aXQgOzsKKyAgICBhbWQ2NDpJc2lsb25cIE9uZUZTOio6KikKKwllY2hv IHg4Nl82NC11bmtub3duLW9uZWZzCisJZXhpdCA7OworICAgICo6VW5sZWFzaGVkOio6KikKKwll Y2hvICIkVU5BTUVfTUFDSElORSItdW5rbm93bi11bmxlYXNoZWQiJFVOQU1FX1JFTEVBU0UiCisJ ZXhpdCA7OworZXNhYworCisjIE5vIHVuYW1lIGNvbW1hbmQgb3IgdW5hbWUgb3V0cHV0IG5vdCBy ZWNvZ25pemVkLgorc2V0X2NjX2Zvcl9idWlsZAorY2F0ID4gIiRkdW1teS5jIiA8PEVPRgorI2lm ZGVmIF9TRVFVRU5UXworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy91dHNu YW1lLmg+CisjZW5kaWYKKyNpZiBkZWZpbmVkKHVsdHJpeCkgfHwgZGVmaW5lZChfdWx0cml4KSB8 fCBkZWZpbmVkKF9fdWx0cml4KSB8fCBkZWZpbmVkKF9fdWx0cml4X18pCisjaWYgZGVmaW5lZCAo dmF4KSB8fCBkZWZpbmVkIChfX3ZheCkgfHwgZGVmaW5lZCAoX192YXhfXykgfHwgZGVmaW5lZCht aXBzKSB8fCBkZWZpbmVkKF9fbWlwcykgfHwgZGVmaW5lZChfX21pcHNfXykgfHwgZGVmaW5lZChN SVBTKSB8fCBkZWZpbmVkKF9fTUlQU19fKQorI2luY2x1ZGUgPHNpZ25hbC5oPgorI2lmIGRlZmlu ZWQoX1NJWkVfVF8pIHx8IGRlZmluZWQoU0lHTE9TVCkKKyNpbmNsdWRlIDxzeXMvdXRzbmFtZS5o PgorI2VuZGlmCisjZW5kaWYKKyNlbmRpZgorbWFpbiAoKQoreworI2lmIGRlZmluZWQgKHNvbnkp CisjaWYgZGVmaW5lZCAoTUlQU0VCKQorICAvKiBCRkQgd2FudHMgImJzZCIgaW5zdGVhZCBvZiAi bmV3c29zIi4gIFBlcmhhcHMgQkZEIHNob3VsZCBiZSBjaGFuZ2VkLAorICAgICBJIGRvbid0IGtu b3cuLi4uICAqLworICBwcmludGYgKCJtaXBzLXNvbnktYnNkXG4iKTsgZXhpdCAoMCk7CisjZWxz ZQorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorICBwcmludGYgKCJtNjhrLXNvbnktbmV3c29zJXNc biIsCisjaWZkZWYgTkVXU09TNAorICAiNCIKKyNlbHNlCisgICIiCisjZW5kaWYKKyAgKTsgZXhp dCAoMCk7CisjZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoTmVYVCkKKyNpZiAhZGVmaW5l ZCAoX19BUkNISVRFQ1RVUkVfXykKKyNkZWZpbmUgX19BUkNISVRFQ1RVUkVfXyAibTY4ayIKKyNl bmRpZgorICBpbnQgdmVyc2lvbjsKKyAgdmVyc2lvbj0kKCAoaG9zdGluZm8gfCBzZWQgLW4gJ3Mv LipOZVhUIE1hY2ggXChbMC05XSpcKS4qL1wxL3AnKSAyPi9kZXYvbnVsbCk7CisgIGlmICh2ZXJz aW9uIDwgNCkKKyAgICBwcmludGYgKCIlcy1uZXh0LW5leHRzdGVwJWRcbiIsIF9fQVJDSElURUNU VVJFX18sIHZlcnNpb24pOworICBlbHNlCisgICAgcHJpbnRmICgiJXMtbmV4dC1vcGVuc3RlcCVk XG4iLCBfX0FSQ0hJVEVDVFVSRV9fLCB2ZXJzaW9uKTsKKyAgZXhpdCAoMCk7CisjZW5kaWYKKwor I2lmIGRlZmluZWQgKE1VTFRJTUFYKSB8fCBkZWZpbmVkIChuMTYpCisjaWYgZGVmaW5lZCAoVU1B WFYpCisgIHByaW50ZiAoIm5zMzJrLWVuY29yZS1zeXN2XG4iKTsgZXhpdCAoMCk7CisjZWxzZQor I2lmIGRlZmluZWQgKENNVSkKKyAgcHJpbnRmICgibnMzMmstZW5jb3JlLW1hY2hcbiIpOyBleGl0 ICgwKTsKKyNlbHNlCisgIHByaW50ZiAoIm5zMzJrLWVuY29yZS1ic2RcbiIpOyBleGl0ICgwKTsK KyNlbmRpZgorI2VuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQgKF9fMzg2QlNEX18pCisgIHBy aW50ZiAoImkzODYtcGMtYnNkXG4iKTsgZXhpdCAoMCk7CisjZW5kaWYKKworI2lmIGRlZmluZWQg KHNlcXVlbnQpCisjaWYgZGVmaW5lZCAoaTM4NikKKyAgcHJpbnRmICgiaTM4Ni1zZXF1ZW50LWR5 bml4XG4iKTsgZXhpdCAoMCk7CisjZW5kaWYKKyNpZiBkZWZpbmVkIChuczMyMDAwKQorICBwcmlu dGYgKCJuczMyay1zZXF1ZW50LWR5bml4XG4iKTsgZXhpdCAoMCk7CisjZW5kaWYKKyNlbmRpZgor CisjaWYgZGVmaW5lZCAoX1NFUVVFTlRfKQorICBzdHJ1Y3QgdXRzbmFtZSB1bjsKKworICB1bmFt ZSgmdW4pOworICBpZiAoc3RybmNtcCh1bi52ZXJzaW9uLCAiVjIiLCAyKSA9PSAwKSB7CisgICAg cHJpbnRmICgiaTM4Ni1zZXF1ZW50LXB0eDJcbiIpOyBleGl0ICgwKTsKKyAgfQorICBpZiAoc3Ry bmNtcCh1bi52ZXJzaW9uLCAiVjEiLCAyKSA9PSAwKSB7IC8qIFhYWCBpcyBWMSBjb3JyZWN0PyAq LworICAgIHByaW50ZiAoImkzODYtc2VxdWVudC1wdHgxXG4iKTsgZXhpdCAoMCk7CisgIH0KKyAg cHJpbnRmICgiaTM4Ni1zZXF1ZW50LXB0eFxuIik7IGV4aXQgKDApOworI2VuZGlmCisKKyNpZiBk ZWZpbmVkICh2YXgpCisjaWYgIWRlZmluZWQgKHVsdHJpeCkKKyNpbmNsdWRlIDxzeXMvcGFyYW0u aD4KKyNpZiBkZWZpbmVkIChCU0QpCisjaWYgQlNEID09IDQzCisgIHByaW50ZiAoInZheC1kZWMt YnNkNC4zXG4iKTsgZXhpdCAoMCk7CisjZWxzZQorI2lmIEJTRCA9PSAxOTkwMDYKKyAgcHJpbnRm ICgidmF4LWRlYy1ic2Q0LjNyZW5vXG4iKTsgZXhpdCAoMCk7CisjZWxzZQorICBwcmludGYgKCJ2 YXgtZGVjLWJzZFxuIik7IGV4aXQgKDApOworI2VuZGlmCisjZW5kaWYKKyNlbHNlCisgIHByaW50 ZiAoInZheC1kZWMtYnNkXG4iKTsgZXhpdCAoMCk7CisjZW5kaWYKKyNlbHNlCisjaWYgZGVmaW5l ZChfU0laRV9UXykgfHwgZGVmaW5lZChTSUdMT1NUKQorICBzdHJ1Y3QgdXRzbmFtZSB1bjsKKyAg dW5hbWUgKCZ1bik7CisgIHByaW50ZiAoInZheC1kZWMtdWx0cml4JXNcbiIsIHVuLnJlbGVhc2Up OyBleGl0ICgwKTsKKyNlbHNlCisgIHByaW50ZiAoInZheC1kZWMtdWx0cml4XG4iKTsgZXhpdCAo MCk7CisjZW5kaWYKKyNlbmRpZgorI2VuZGlmCisjaWYgZGVmaW5lZCh1bHRyaXgpIHx8IGRlZmlu ZWQoX3VsdHJpeCkgfHwgZGVmaW5lZChfX3VsdHJpeCkgfHwgZGVmaW5lZChfX3VsdHJpeF9fKQor I2lmIGRlZmluZWQobWlwcykgfHwgZGVmaW5lZChfX21pcHMpIHx8IGRlZmluZWQoX19taXBzX18p IHx8IGRlZmluZWQoTUlQUykgfHwgZGVmaW5lZChfX01JUFNfXykKKyNpZiBkZWZpbmVkKF9TSVpF X1RfKSB8fCBkZWZpbmVkKFNJR0xPU1QpCisgIHN0cnVjdCB1dHNuYW1lICp1bjsKKyAgdW5hbWUg KCZ1bik7CisgIHByaW50ZiAoIm1pcHMtZGVjLXVsdHJpeCVzXG4iLCB1bi5yZWxlYXNlKTsgZXhp dCAoMCk7CisjZWxzZQorICBwcmludGYgKCJtaXBzLWRlYy11bHRyaXhcbiIpOyBleGl0ICgwKTsK KyNlbmRpZgorI2VuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQgKGFsbGlhbnQpICYmIGRlZmlu ZWQgKGk4NjApCisgIHByaW50ZiAoImk4NjAtYWxsaWFudC1ic2RcbiIpOyBleGl0ICgwKTsKKyNl bmRpZgorCisgIGV4aXQgKDEpOworfQorRU9GCisKKyRDQ19GT1JfQlVJTEQgLW8gIiRkdW1teSIg IiRkdW1teS5jIiAyPi9kZXYvbnVsbCAmJiBTWVNURU1fTkFNRT0kKCRkdW1teSkgJiYKKwl7IGVj aG8gIiRTWVNURU1fTkFNRSI7IGV4aXQ7IH0KKworIyBBcG9sbG9zIHB1dCB0aGUgc3lzdGVtIHR5 cGUgaW4gdGhlIGVudmlyb25tZW50LgordGVzdCAtZCAvdXNyL2Fwb2xsbyAmJiB7IGVjaG8gIiRJ U1AtYXBvbGxvLSRTWVNUWVBFIjsgZXhpdDsgfQorCitlY2hvICIkMDogdW5hYmxlIHRvIGd1ZXNz IHN5c3RlbSB0eXBlIiA+JjIKKworY2FzZSAiJFVOQU1FX01BQ0hJTkU6JFVOQU1FX1NZU1RFTSIg aW4KKyAgICBtaXBzOkxpbnV4IHwgbWlwczY0OkxpbnV4KQorCSMgSWYgd2UgZ290IGhlcmUgb24g TUlQUyBHTlUvTGludXgsIG91dHB1dCBleHRyYSBpbmZvcm1hdGlvbi4KKwljYXQgPiYyIDw8RU9G CisKK05PVEU6IE1JUFMgR05VL0xpbnV4IHN5c3RlbXMgcmVxdWlyZSBhIEMgY29tcGlsZXIgdG8g ZnVsbHkgcmVjb2duaXplCit0aGUgc3lzdGVtIHR5cGUuIFBsZWFzZSBpbnN0YWxsIGEgQyBjb21w aWxlciBhbmQgdHJ5IGFnYWluLgorRU9GCisJOzsKK2VzYWMKKworY2F0ID4mMiA8PEVPRgorCitU aGlzIHNjcmlwdCAodmVyc2lvbiAkdGltZXN0YW1wKSwgaGFzIGZhaWxlZCB0byByZWNvZ25pemUg dGhlCitvcGVyYXRpbmcgc3lzdGVtIHlvdSBhcmUgdXNpbmcuIElmIHlvdXIgc2NyaXB0IGlzIG9s ZCwgb3ZlcndyaXRlICphbGwqCitjb3BpZXMgb2YgY29uZmlnLmd1ZXNzIGFuZCBjb25maWcuc3Vi IHdpdGggdGhlIGxhdGVzdCB2ZXJzaW9ucyBmcm9tOgorCisgIGh0dHBzOi8vZ2l0LnNhdmFubmFo LmdudS5vcmcvY2dpdC9jb25maWcuZ2l0L3BsYWluL2NvbmZpZy5ndWVzcworYW5kCisgIGh0dHBz Oi8vZ2l0LnNhdmFubmFoLmdudS5vcmcvY2dpdC9jb25maWcuZ2l0L3BsYWluL2NvbmZpZy5zdWIK K0VPRgorCit5ZWFyPSQoZWNobyAkdGltZXN0YW1wIHwgc2VkICdzLC0uKiwsJykKKyMgc2hlbGxj aGVjayBkaXNhYmxlPVNDMjAwMworaWYgdGVzdCAiJChleHByICIkKGRhdGUgKyVZKSIgLSAiJHll YXIiKSIgLWx0IDMgOyB0aGVuCisgICBjYXQgPiYyIDw8RU9GCisKK0lmICQwIGhhcyBhbHJlYWR5 IGJlZW4gdXBkYXRlZCwgc2VuZCB0aGUgZm9sbG93aW5nIGRhdGEgYW5kIGFueQoraW5mb3JtYXRp b24geW91IHRoaW5rIG1pZ2h0IGJlIHBlcnRpbmVudCB0byBjb25maWctcGF0Y2hlc0BnbnUub3Jn IHRvCitwcm92aWRlIHRoZSBuZWNlc3NhcnkgaW5mb3JtYXRpb24gdG8gaGFuZGxlIHlvdXIgc3lz dGVtLgorCitjb25maWcuZ3Vlc3MgdGltZXN0YW1wID0gJHRpbWVzdGFtcAorCit1bmFtZSAtbSA9 ICQoICh1bmFtZSAtbSkgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duKQordW5hbWUgLXIgPSAk KCAodW5hbWUgLXIpIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bikKK3VuYW1lIC1zID0gJCgg KHVuYW1lIC1zKSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd24pCit1bmFtZSAtdiA9ICQoICh1 bmFtZSAtdikgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duKQorCisvdXNyL2Jpbi91bmFtZSAt cCA9ICQoICgvdXNyL2Jpbi91bmFtZSAtcCkgMj4vZGV2L251bGwpCisvYmluL3VuYW1lIC1YICAg ICA9ICQoICgvYmluL3VuYW1lIC1YKSAyPi9kZXYvbnVsbCkKKworaG9zdGluZm8gICAgICAgICAg ICAgICA9ICQoIChob3N0aW5mbykgMj4vZGV2L251bGwpCisvYmluL3VuaXZlcnNlICAgICAgICAg ID0gJCggKC9iaW4vdW5pdmVyc2UpIDI+L2Rldi9udWxsKQorL3Vzci9iaW4vYXJjaCAtayAgICAg ICA9ICQoICgvdXNyL2Jpbi9hcmNoIC1rKSAyPi9kZXYvbnVsbCkKKy9iaW4vYXJjaCAgICAgICAg ICAgICAgPSAkKCAoL2Jpbi9hcmNoKSAyPi9kZXYvbnVsbCkKKy91c3IvYmluL29zbGV2ZWwgICAg ICAgPSAkKCAoL3Vzci9iaW4vb3NsZXZlbCkgMj4vZGV2L251bGwpCisvdXNyL2NvbnZleC9nZXRz eXNpbmZvID0gJCggKC91c3IvY29udmV4L2dldHN5c2luZm8pIDI+L2Rldi9udWxsKQorCitVTkFN RV9NQUNISU5FID0gIiRVTkFNRV9NQUNISU5FIgorVU5BTUVfUkVMRUFTRSA9ICIkVU5BTUVfUkVM RUFTRSIKK1VOQU1FX1NZU1RFTSAgPSAiJFVOQU1FX1NZU1RFTSIKK1VOQU1FX1ZFUlNJT04gPSAi JFVOQU1FX1ZFUlNJT04iCitFT0YKK2ZpCisKK2V4aXQgMQorCisjIExvY2FsIHZhcmlhYmxlczoK KyMgZXZhbDogKGFkZC1ob29rICdiZWZvcmUtc2F2ZS1ob29rICd0aW1lLXN0YW1wKQorIyB0aW1l LXN0YW1wLXN0YXJ0OiAidGltZXN0YW1wPSciCisjIHRpbWUtc3RhbXAtZm9ybWF0OiAiJTp5LSUw Mm0tJTAyZCIKKyMgdGltZS1zdGFtcC1lbmQ6ICInIgorIyBFbmQ6CgpkaWZmIC0tZ2l0IGEvMzg5 LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvYnVpbGQtYXV4L2NvbmZpZy5zdWIg Yi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9idWlsZC1hdXgvY29uZmln LnN1YgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iMGY4NDkyCi0tLSAvZGV2 L251bGwKKysrIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvYnVpbGQt YXV4L2NvbmZpZy5zdWIKQEAgLTAsMCArMSwxODU1IEBACisjISAvYmluL3NoCisjIENvbmZpZ3Vy YXRpb24gdmFsaWRhdGlvbiBzdWJyb3V0aW5lIHNjcmlwdC4KKyMgICBDb3B5cmlnaHQgMTk5Mi0y MDIxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCit0aW1lc3RhbXA9JzIwMjEtMDEt MDcnCisKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl IGl0IGFuZC9vciBtb2RpZnkgaXQKKyMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIg b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1 dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorIyBXSVRIT1VUIEFO WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNI QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg R05VCisjIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91 IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwczovL3d3 dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisjCisjIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpZiB5b3UKKyMgZGlzdHJpYnV0ZSB0aGlzIGZp bGUgYXMgcGFydCBvZiBhIHByb2dyYW0gdGhhdCBjb250YWlucyBhCisjIGNvbmZpZ3VyYXRpb24g c2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgeW91IG1heSBpbmNsdWRlIGl0IHVuZGVyCisj IHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9m IHRoYXQKKyMgcHJvZ3JhbS4gIFRoaXMgRXhjZXB0aW9uIGlzIGFuIGFkZGl0aW9uYWwgcGVybWlz c2lvbiB1bmRlciBzZWN0aW9uIDcKKyMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl LCB2ZXJzaW9uIDMgKCJHUEx2MyIpLgorCisKKyMgUGxlYXNlIHNlbmQgcGF0Y2hlcyB0byA8Y29u ZmlnLXBhdGNoZXNAZ251Lm9yZz4uCisjCisjIENvbmZpZ3VyYXRpb24gc3Vicm91dGluZSB0byB2 YWxpZGF0ZSBhbmQgY2Fub25pY2FsaXplIGEgY29uZmlndXJhdGlvbiB0eXBlLgorIyBTdXBwbHkg dGhlIHNwZWNpZmllZCBjb25maWd1cmF0aW9uIHR5cGUgYXMgYW4gYXJndW1lbnQuCisjIElmIGl0 IGlzIGludmFsaWQsIHdlIHByaW50IGFuIGVycm9yIG1lc3NhZ2Ugb24gc3RkZXJyIGFuZCBleGl0 IHdpdGggY29kZSAxLgorIyBPdGhlcndpc2UsIHdlIHByaW50IHRoZSBjYW5vbmljYWwgY29uZmln IHR5cGUgb24gc3Rkb3V0IGFuZCBzdWNjZWVkLgorCisjIFlvdSBjYW4gZ2V0IHRoZSBsYXRlc3Qg dmVyc2lvbiBvZiB0aGlzIHNjcmlwdCBmcm9tOgorIyBodHRwczovL2dpdC5zYXZhbm5haC5nbnUu b3JnL2NnaXQvY29uZmlnLmdpdC9wbGFpbi9jb25maWcuc3ViCisKKyMgVGhpcyBmaWxlIGlzIHN1 cHBvc2VkIHRvIGJlIHRoZSBzYW1lIGZvciBhbGwgR05VIHBhY2thZ2VzCisjIGFuZCByZWNvZ25p emUgYWxsIHRoZSBDUFUgdHlwZXMsIHN5c3RlbSB0eXBlcyBhbmQgYWxpYXNlcworIyB0aGF0IGFy ZSBtZWFuaW5nZnVsIHdpdGggKmFueSogR05VIHNvZnR3YXJlLgorIyBFYWNoIHBhY2thZ2UgaXMg cmVzcG9uc2libGUgZm9yIHJlcG9ydGluZyB3aGljaCB2YWxpZCBjb25maWd1cmF0aW9ucworIyBp dCBkb2VzIG5vdCBzdXBwb3J0LiAgVGhlIHVzZXIgc2hvdWxkIGJlIGFibGUgdG8gZGlzdGluZ3Vp c2gKKyMgYSBmYWlsdXJlIHRvIHN1cHBvcnQgYSB2YWxpZCBjb25maWd1cmF0aW9uIGZyb20gYSBt ZWFuaW5nbGVzcworIyBjb25maWd1cmF0aW9uLgorCisjIFRoZSBnb2FsIG9mIHRoaXMgZmlsZSBp cyB0byBtYXAgYWxsIHRoZSB2YXJpb3VzIHZhcmlhdGlvbnMgb2YgYSBnaXZlbgorIyBtYWNoaW5l IHNwZWNpZmljYXRpb24gaW50byBhIHNpbmdsZSBzcGVjaWZpY2F0aW9uIGluIHRoZSBmb3JtOgor IwlDUFVfVFlQRS1NQU5VRkFDVFVSRVItT1BFUkFUSU5HX1NZU1RFTQorIyBvciBpbiBzb21lIGNh c2VzLCB0aGUgbmV3ZXIgZm91ci1wYXJ0IGZvcm06CisjCUNQVV9UWVBFLU1BTlVGQUNUVVJFUi1L RVJORUwtT1BFUkFUSU5HX1NZU1RFTQorIyBJdCBpcyB3cm9uZyB0byBlY2hvIGFueSBvdGhlciB0 eXBlIG9mIHNwZWNpZmljYXRpb24uCisKK21lPSQoZWNobyAiJDAiIHwgc2VkIC1lICdzLC4qLyws JykKKwordXNhZ2U9IlwKK1VzYWdlOiAkMCBbT1BUSU9OXSBDUFUtTUZSLU9QU1lTIG9yIEFMSUFT CisKK0Nhbm9uaWNhbGl6ZSBhIGNvbmZpZ3VyYXRpb24gbmFtZS4KKworT3B0aW9uczoKKyAgLWgs IC0taGVscCAgICAgICAgIHByaW50IHRoaXMgaGVscCwgdGhlbiBleGl0CisgIC10LCAtLXRpbWUt c3RhbXAgICBwcmludCBkYXRlIG9mIGxhc3QgbW9kaWZpY2F0aW9uLCB0aGVuIGV4aXQKKyAgLXYs IC0tdmVyc2lvbiAgICAgIHByaW50IHZlcnNpb24gbnVtYmVyLCB0aGVuIGV4aXQKKworUmVwb3J0 IGJ1Z3MgYW5kIHBhdGNoZXMgdG8gPGNvbmZpZy1wYXRjaGVzQGdudS5vcmc+LiIKKwordmVyc2lv bj0iXAorR05VIGNvbmZpZy5zdWIgKCR0aW1lc3RhbXApCisKK0NvcHlyaWdodCAxOTkyLTIwMjEg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgaXMgZnJlZSBzb2Z0d2FyZTsg c2VlIHRoZSBzb3VyY2UgZm9yIGNvcHlpbmcgY29uZGl0aW9ucy4gIFRoZXJlIGlzIE5PCit3YXJy YW50eTsgbm90IGV2ZW4gZm9yIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIgUFVSUE9TRS4iCisKK2hlbHA9IgorVHJ5IFxgJG1lIC0taGVscCcgZm9yIG1vcmUgaW5m b3JtYXRpb24uIgorCisjIFBhcnNlIGNvbW1hbmQgbGluZQord2hpbGUgdGVzdCAkIyAtZ3QgMCA7 IGRvCisgIGNhc2UgJDEgaW4KKyAgICAtLXRpbWUtc3RhbXAgfCAtLXRpbWUqIHwgLXQgKQorICAg ICAgIGVjaG8gIiR0aW1lc3RhbXAiIDsgZXhpdCA7OworICAgIC0tdmVyc2lvbiB8IC12ICkKKyAg ICAgICBlY2hvICIkdmVyc2lvbiIgOyBleGl0IDs7CisgICAgLS1oZWxwIHwgLS1oKiB8IC1oICkK KyAgICAgICBlY2hvICIkdXNhZ2UiOyBleGl0IDs7CisgICAgLS0gKSAgICAgIyBTdG9wIG9wdGlv biBwcm9jZXNzaW5nCisgICAgICAgc2hpZnQ7IGJyZWFrIDs7CisgICAgLSApCSMgVXNlIHN0ZGlu IGFzIGlucHV0LgorICAgICAgIGJyZWFrIDs7CisgICAgLSogKQorICAgICAgIGVjaG8gIiRtZTog aW52YWxpZCBvcHRpb24gJDEkaGVscCIgPiYyCisgICAgICAgZXhpdCAxIDs7CisKKyAgICAqbG9j YWwqKQorICAgICAgICMgRmlyc3QgcGFzcyB0aHJvdWdoIGFueSBsb2NhbCBtYWNoaW5lIHR5cGVz LgorICAgICAgIGVjaG8gIiQxIgorICAgICAgIGV4aXQgOzsKKworICAgICogKQorICAgICAgIGJy ZWFrIDs7CisgIGVzYWMKK2RvbmUKKworY2FzZSAkIyBpbgorIDApIGVjaG8gIiRtZTogbWlzc2lu ZyBhcmd1bWVudCRoZWxwIiA+JjIKKyAgICBleGl0IDE7OworIDEpIDs7CisgKikgZWNobyAiJG1l OiB0b28gbWFueSBhcmd1bWVudHMkaGVscCIgPiYyCisgICAgZXhpdCAxOzsKK2VzYWMKKworIyBT cGxpdCBmaWVsZHMgb2YgY29uZmlndXJhdGlvbiB0eXBlCisjIHNoZWxsY2hlY2sgZGlzYWJsZT1T QzIxNjIKK0lGUz0iLSIgcmVhZCBmaWVsZDEgZmllbGQyIGZpZWxkMyBmaWVsZDQgPDxFT0YKKyQx CitFT0YKKworIyBTZXBhcmF0ZSBpbnRvIGxvZ2ljYWwgY29tcG9uZW50cyBmb3IgZnVydGhlciB2 YWxpZGF0aW9uCitjYXNlICQxIGluCisJKi0qLSotKi0qKQorCQllY2hvIEludmFsaWQgY29uZmln dXJhdGlvbiBcYCIkMSJcJzogbW9yZSB0aGFuIGZvdXIgY29tcG9uZW50cyA+JjIKKwkJZXhpdCAx CisJCTs7CisJKi0qLSotKikKKwkJYmFzaWNfbWFjaGluZT0kZmllbGQxLSRmaWVsZDIKKwkJYmFz aWNfb3M9JGZpZWxkMy0kZmllbGQ0CisJCTs7CisJKi0qLSopCisJCSMgQW1iaWd1b3VzIHdoZXRo ZXIgQ09NUEFOWSBpcyBwcmVzZW50LCBvciBza2lwcGVkIGFuZCBLRVJORUwtT1MgaXMgdHdvCisJ CSMgcGFydHMKKwkJbWF5YmVfb3M9JGZpZWxkMi0kZmllbGQzCisJCWNhc2UgJG1heWJlX29zIGlu CisJCQludG8tcW54KiB8IGxpbnV4LSogfCB1Y2xpbnV4LXVjbGliYyogXAorCQkJfCB1Y2xpbnV4 LWdudSogfCBrZnJlZWJzZCotZ251KiB8IGtuZXRic2QqLWdudSogfCBuZXRic2QqLWdudSogXAor CQkJfCBuZXRic2QqLWVhYmkqIHwga29wZW5zb2xhcmlzKi1nbnUqIHwgY2xvdWRhYmkqLWVhYmkq IFwKKwkJCXwgc3Rvcm0tY2hhb3MqIHwgb3MyLWVteCogfCBydG1rLW5vdmEqKQorCQkJCWJhc2lj X21hY2hpbmU9JGZpZWxkMQorCQkJCWJhc2ljX29zPSRtYXliZV9vcworCQkJCTs7CisJCQlhbmRy b2lkLWxpbnV4KQorCQkJCWJhc2ljX21hY2hpbmU9JGZpZWxkMS11bmtub3duCisJCQkJYmFzaWNf b3M9bGludXgtYW5kcm9pZAorCQkJCTs7CisJCQkqKQorCQkJCWJhc2ljX21hY2hpbmU9JGZpZWxk MS0kZmllbGQyCisJCQkJYmFzaWNfb3M9JGZpZWxkMworCQkJCTs7CisJCWVzYWMKKwkJOzsKKwkq LSopCisJCSMgQSBsb25lIGNvbmZpZyB3ZSBoYXBwZW4gdG8gbWF0Y2ggbm90IGZpdHRpbmcgYW55 IHBhdHRlcm4KKwkJY2FzZSAkZmllbGQxLSRmaWVsZDIgaW4KKwkJCWRlY3N0YXRpb24tMzEwMCkK KwkJCQliYXNpY19tYWNoaW5lPW1pcHMtZGVjCisJCQkJYmFzaWNfb3M9CisJCQkJOzsKKwkJCSot KikKKwkJCQkjIFNlY29uZCBjb21wb25lbnQgaXMgdXN1YWxseSwgYnV0IG5vdCBhbHdheXMgdGhl IE9TCisJCQkJY2FzZSAkZmllbGQyIGluCisJCQkJCSMgUHJldmVudCBmb2xsb3dpbmcgY2xhdXNl IGZyb20gaGFuZGxpbmcgdGhpcyB2YWxpZCBvcworCQkJCQlzdW4qb3MqKQorCQkJCQkJYmFzaWNf bWFjaGluZT0kZmllbGQxCisJCQkJCQliYXNpY19vcz0kZmllbGQyCisJCQkJCQk7OworCQkJCQkj IE1hbnVmYWN0dXJlcnMKKwkJCQkJZGVjKiB8IG1pcHMqIHwgc2VxdWVudCogfCBlbmNvcmUqIHwg cGM1MzMqIHwgc2dpKiB8IHNvbnkqIFwKKwkJCQkJfCBhdHQqIHwgNzMwMCogfCAzMzAwKiB8IGRl bHRhKiB8IG1vdG9yb2xhKiB8IHN1blsyMzRdKiBcCisJCQkJCXwgdW5pY29tKiB8IGlibSogfCBu ZXh0IHwgaHAgfCBpc2kqIHwgYXBvbGxvIHwgYWx0b3MqIFwKKwkJCQkJfCBjb252ZXJnZW50KiB8 IG5jciogfCBuZXdzIHwgMzIqIHwgMzYwMCogfCAzMTAwKiBcCisJCQkJCXwgaGl0YWNoaSogfCBj WzEyM10qIHwgY29udmV4KiB8IHN1biB8IGNyZHMgfCBvbXJvbiogfCBkZyBcCisJCQkJCXwgdWx0 cmEgfCB0dGkqIHwgaGFycmlzIHwgZG9scGhpbiB8IGhpZ2hsZXZlbCB8IGdvdWxkIFwKKwkJCQkJ fCBjYm0gfCBucyB8IG1hc3Njb21wIHwgYXBwbGUgfCBheGlzIHwga251dGggfCBjcmF5IFwKKwkJ CQkJfCBtaWNyb2JsYXplKiB8IHNpbSB8IGNpc2NvIFwKKwkJCQkJfCBva2kgfCB3ZWMgfCB3cnMg fCB3aW5ib25kKQorCQkJCQkJYmFzaWNfbWFjaGluZT0kZmllbGQxLSRmaWVsZDIKKwkJCQkJCWJh c2ljX29zPQorCQkJCQkJOzsKKwkJCQkJKikKKwkJCQkJCWJhc2ljX21hY2hpbmU9JGZpZWxkMQor CQkJCQkJYmFzaWNfb3M9JGZpZWxkMgorCQkJCQkJOzsKKwkJCQllc2FjCisJCQk7OworCQllc2Fj CisJCTs7CisJKikKKwkJIyBDb252ZXJ0IHNpbmdsZS1jb21wb25lbnQgc2hvcnQtaGFuZHMgbm90 IHZhbGlkIGFzIHBhcnQgb2YKKwkJIyBtdWx0aS1jb21wb25lbnQgY29uZmlndXJhdGlvbnMuCisJ CWNhc2UgJGZpZWxkMSBpbgorCQkJMzg2YnNkKQorCQkJCWJhc2ljX21hY2hpbmU9aTM4Ni1wYwor CQkJCWJhc2ljX29zPWJzZAorCQkJCTs7CisJCQlhMjlraGlmKQorCQkJCWJhc2ljX21hY2hpbmU9 YTI5ay1hbWQKKwkJCQliYXNpY19vcz11ZGkKKwkJCQk7OworCQkJYWRvYmU2OGspCisJCQkJYmFz aWNfbWFjaGluZT1tNjgwMTAtYWRvYmUKKwkJCQliYXNpY19vcz1zY291dAorCQkJCTs7CisJCQlh bGxpYW50KQorCQkJCWJhc2ljX21hY2hpbmU9Zng4MC1hbGxpYW50CisJCQkJYmFzaWNfb3M9CisJ CQkJOzsKKwkJCWFsdG9zIHwgYWx0b3MzMDY4KQorCQkJCWJhc2ljX21hY2hpbmU9bTY4ay1hbHRv cworCQkJCWJhc2ljX29zPQorCQkJCTs7CisJCQlhbTI5aykKKwkJCQliYXNpY19tYWNoaW5lPWEy OWstbm9uZQorCQkJCWJhc2ljX29zPWJzZAorCQkJCTs7CisJCQlhbWRhaGwpCisJCQkJYmFzaWNf bWFjaGluZT01ODAtYW1kYWhsCisJCQkJYmFzaWNfb3M9c3lzdgorCQkJCTs7CisJCQlhbWlnYSkK KwkJCQliYXNpY19tYWNoaW5lPW02OGstdW5rbm93bgorCQkJCWJhc2ljX29zPQorCQkJCTs7CisJ CQlhbWlnYW9zIHwgYW1pZ2Fkb3MpCisJCQkJYmFzaWNfbWFjaGluZT1tNjhrLXVua25vd24KKwkJ CQliYXNpY19vcz1hbWlnYW9zCisJCQkJOzsKKwkJCWFtaWdhdW5peCB8IGFtaXgpCisJCQkJYmFz aWNfbWFjaGluZT1tNjhrLXVua25vd24KKwkJCQliYXNpY19vcz1zeXN2NAorCQkJCTs7CisJCQlh cG9sbG82OCkKKwkJCQliYXNpY19tYWNoaW5lPW02OGstYXBvbGxvCisJCQkJYmFzaWNfb3M9c3lz dgorCQkJCTs7CisJCQlhcG9sbG82OGJzZCkKKwkJCQliYXNpY19tYWNoaW5lPW02OGstYXBvbGxv CisJCQkJYmFzaWNfb3M9YnNkCisJCQkJOzsKKwkJCWFyb3MpCisJCQkJYmFzaWNfbWFjaGluZT1p Mzg2LXBjCisJCQkJYmFzaWNfb3M9YXJvcworCQkJCTs7CisJCQlhdXgpCisJCQkJYmFzaWNfbWFj aGluZT1tNjhrLWFwcGxlCisJCQkJYmFzaWNfb3M9YXV4CisJCQkJOzsKKwkJCWJhbGFuY2UpCisJ CQkJYmFzaWNfbWFjaGluZT1uczMyay1zZXF1ZW50CisJCQkJYmFzaWNfb3M9ZHluaXgKKwkJCQk7 OworCQkJYmxhY2tmaW4pCisJCQkJYmFzaWNfbWFjaGluZT1iZmluLXVua25vd24KKwkJCQliYXNp Y19vcz1saW51eAorCQkJCTs7CisJCQljZWdjYykKKwkJCQliYXNpY19tYWNoaW5lPWFybS11bmtu b3duCisJCQkJYmFzaWNfb3M9Y2VnY2MKKwkJCQk7OworCQkJY29udmV4LWMxKQorCQkJCWJhc2lj X21hY2hpbmU9YzEtY29udmV4CisJCQkJYmFzaWNfb3M9YnNkCisJCQkJOzsKKwkJCWNvbnZleC1j MikKKwkJCQliYXNpY19tYWNoaW5lPWMyLWNvbnZleAorCQkJCWJhc2ljX29zPWJzZAorCQkJCTs7 CisJCQljb252ZXgtYzMyKQorCQkJCWJhc2ljX21hY2hpbmU9YzMyLWNvbnZleAorCQkJCWJhc2lj X29zPWJzZAorCQkJCTs7CisJCQljb252ZXgtYzM0KQorCQkJCWJhc2ljX21hY2hpbmU9YzM0LWNv bnZleAorCQkJCWJhc2ljX29zPWJzZAorCQkJCTs7CisJCQljb252ZXgtYzM4KQorCQkJCWJhc2lj X21hY2hpbmU9YzM4LWNvbnZleAorCQkJCWJhc2ljX29zPWJzZAorCQkJCTs7CisJCQljcmF5KQor CQkJCWJhc2ljX21hY2hpbmU9ajkwLWNyYXkKKwkJCQliYXNpY19vcz11bmljb3MKKwkJCQk7Owor CQkJY3JkcyB8IHVub3MpCisJCQkJYmFzaWNfbWFjaGluZT1tNjhrLWNyZHMKKwkJCQliYXNpY19v cz0KKwkJCQk7OworCQkJZGEzMCkKKwkJCQliYXNpY19tYWNoaW5lPW02OGstZGEzMAorCQkJCWJh c2ljX29zPQorCQkJCTs7CisJCQlkZWNzdGF0aW9uIHwgcG1heCB8IHBtaW4gfCBkZWMzMTAwIHwg ZGVjc3RhdG4pCisJCQkJYmFzaWNfbWFjaGluZT1taXBzLWRlYworCQkJCWJhc2ljX29zPQorCQkJ CTs7CisJCQlkZWx0YTg4KQorCQkJCWJhc2ljX21hY2hpbmU9bTg4ay1tb3Rvcm9sYQorCQkJCWJh c2ljX29zPXN5c3YzCisJCQkJOzsKKwkJCWRpY29zKQorCQkJCWJhc2ljX21hY2hpbmU9aTY4Ni1w YworCQkJCWJhc2ljX29zPWRpY29zCisJCQkJOzsKKwkJCWRqZ3BwKQorCQkJCWJhc2ljX21hY2hp bmU9aTU4Ni1wYworCQkJCWJhc2ljX29zPW1zZG9zZGpncHAKKwkJCQk7OworCQkJZWJtb24yOWsp CisJCQkJYmFzaWNfbWFjaGluZT1hMjlrLWFtZAorCQkJCWJhc2ljX29zPWVibW9uCisJCQkJOzsK KwkJCWVzMTgwMCB8IE9TRTY4ayB8IG9zZTY4ayB8IG9zZSB8IE9TRSkKKwkJCQliYXNpY19tYWNo aW5lPW02OGstZXJpY3Nzb24KKwkJCQliYXNpY19vcz1vc2UKKwkJCQk7OworCQkJZ21pY3JvKQor CQkJCWJhc2ljX21hY2hpbmU9dHJvbi1nbWljcm8KKwkJCQliYXNpY19vcz1zeXN2CisJCQkJOzsK KwkJCWdvMzIpCisJCQkJYmFzaWNfbWFjaGluZT1pMzg2LXBjCisJCQkJYmFzaWNfb3M9Z28zMgor CQkJCTs7CisJCQloODMwMGhtcykKKwkJCQliYXNpY19tYWNoaW5lPWg4MzAwLWhpdGFjaGkKKwkJ CQliYXNpY19vcz1obXMKKwkJCQk7OworCQkJaDgzMDB4cmF5KQorCQkJCWJhc2ljX21hY2hpbmU9 aDgzMDAtaGl0YWNoaQorCQkJCWJhc2ljX29zPXhyYXkKKwkJCQk7OworCQkJaDg1MDBobXMpCisJ CQkJYmFzaWNfbWFjaGluZT1oODUwMC1oaXRhY2hpCisJCQkJYmFzaWNfb3M9aG1zCisJCQkJOzsK KwkJCWhhcnJpcykKKwkJCQliYXNpY19tYWNoaW5lPW04OGstaGFycmlzCisJCQkJYmFzaWNfb3M9 c3lzdjMKKwkJCQk7OworCQkJaHAzMDAgfCBocDMwMGhwdXgpCisJCQkJYmFzaWNfbWFjaGluZT1t NjhrLWhwCisJCQkJYmFzaWNfb3M9aHB1eAorCQkJCTs7CisJCQlocDMwMGJzZCkKKwkJCQliYXNp Y19tYWNoaW5lPW02OGstaHAKKwkJCQliYXNpY19vcz1ic2QKKwkJCQk7OworCQkJaHBwYW9zZikK KwkJCQliYXNpY19tYWNoaW5lPWhwcGExLjEtaHAKKwkJCQliYXNpY19vcz1vc2YKKwkJCQk7Owor CQkJaHBwcm8pCisJCQkJYmFzaWNfbWFjaGluZT1ocHBhMS4xLWhwCisJCQkJYmFzaWNfb3M9cHJv ZWxmCisJCQkJOzsKKwkJCWkzODZtYWNoKQorCQkJCWJhc2ljX21hY2hpbmU9aTM4Ni1tYWNoCisJ CQkJYmFzaWNfb3M9bWFjaAorCQkJCTs7CisJCQlpc2k2OCB8IGlzaSkKKwkJCQliYXNpY19tYWNo aW5lPW02OGstaXNpCisJCQkJYmFzaWNfb3M9c3lzdgorCQkJCTs7CisJCQltNjhrbm9tbXUpCisJ CQkJYmFzaWNfbWFjaGluZT1tNjhrLXVua25vd24KKwkJCQliYXNpY19vcz1saW51eAorCQkJCTs7 CisJCQltYWdudW0gfCBtMzIzMCkKKwkJCQliYXNpY19tYWNoaW5lPW1pcHMtbWlwcworCQkJCWJh c2ljX29zPXN5c3YKKwkJCQk7OworCQkJbWVybGluKQorCQkJCWJhc2ljX21hY2hpbmU9bnMzMmst dXRlaworCQkJCWJhc2ljX29zPXN5c3YKKwkJCQk7OworCQkJbWluZ3c2NCkKKwkJCQliYXNpY19t YWNoaW5lPXg4Nl82NC1wYworCQkJCWJhc2ljX29zPW1pbmd3NjQKKwkJCQk7OworCQkJbWluZ3cz MikKKwkJCQliYXNpY19tYWNoaW5lPWk2ODYtcGMKKwkJCQliYXNpY19vcz1taW5ndzMyCisJCQkJ OzsKKwkJCW1pbmd3MzJjZSkKKwkJCQliYXNpY19tYWNoaW5lPWFybS11bmtub3duCisJCQkJYmFz aWNfb3M9bWluZ3czMmNlCisJCQkJOzsKKwkJCW1vbml0b3IpCisJCQkJYmFzaWNfbWFjaGluZT1t NjhrLXJvbTY4aworCQkJCWJhc2ljX29zPWNvZmYKKwkJCQk7OworCQkJbW9ycGhvcykKKwkJCQli YXNpY19tYWNoaW5lPXBvd2VycGMtdW5rbm93bgorCQkJCWJhc2ljX29zPW1vcnBob3MKKwkJCQk7 OworCQkJbW94aWVib3gpCisJCQkJYmFzaWNfbWFjaGluZT1tb3hpZS11bmtub3duCisJCQkJYmFz aWNfb3M9bW94aWVib3gKKwkJCQk7OworCQkJbXNkb3MpCisJCQkJYmFzaWNfbWFjaGluZT1pMzg2 LXBjCisJCQkJYmFzaWNfb3M9bXNkb3MKKwkJCQk7OworCQkJbXN5cykKKwkJCQliYXNpY19tYWNo aW5lPWk2ODYtcGMKKwkJCQliYXNpY19vcz1tc3lzCisJCQkJOzsKKwkJCW12cykKKwkJCQliYXNp Y19tYWNoaW5lPWkzNzAtaWJtCisJCQkJYmFzaWNfb3M9bXZzCisJCQkJOzsKKwkJCW5hY2wpCisJ CQkJYmFzaWNfbWFjaGluZT1sZTMyLXVua25vd24KKwkJCQliYXNpY19vcz1uYWNsCisJCQkJOzsK KwkJCW5jcjMwMDApCisJCQkJYmFzaWNfbWFjaGluZT1pNDg2LW5jcgorCQkJCWJhc2ljX29zPXN5 c3Y0CisJCQkJOzsKKwkJCW5ldGJzZDM4NikKKwkJCQliYXNpY19tYWNoaW5lPWkzODYtcGMKKwkJ CQliYXNpY19vcz1uZXRic2QKKwkJCQk7OworCQkJbmV0d2luZGVyKQorCQkJCWJhc2ljX21hY2hp bmU9YXJtdjRsLXJlYmVsCisJCQkJYmFzaWNfb3M9bGludXgKKwkJCQk7OworCQkJbmV3cyB8IG5l d3M3MDAgfCBuZXdzODAwIHwgbmV3czkwMCkKKwkJCQliYXNpY19tYWNoaW5lPW02OGstc29ueQor CQkJCWJhc2ljX29zPW5ld3NvcworCQkJCTs7CisJCQluZXdzMTAwMCkKKwkJCQliYXNpY19tYWNo aW5lPW02ODAzMC1zb255CisJCQkJYmFzaWNfb3M9bmV3c29zCisJCQkJOzsKKwkJCW5lY3Y3MCkK KwkJCQliYXNpY19tYWNoaW5lPXY3MC1uZWMKKwkJCQliYXNpY19vcz1zeXN2CisJCQkJOzsKKwkJ CW5oMzAwMCkKKwkJCQliYXNpY19tYWNoaW5lPW02OGstaGFycmlzCisJCQkJYmFzaWNfb3M9Y3h1 eAorCQkJCTs7CisJCQluaFs0NV0wMDApCisJCQkJYmFzaWNfbWFjaGluZT1tODhrLWhhcnJpcwor CQkJCWJhc2ljX29zPWN4dXgKKwkJCQk7OworCQkJbmluZHk5NjApCisJCQkJYmFzaWNfbWFjaGlu ZT1pOTYwLWludGVsCisJCQkJYmFzaWNfb3M9bmluZHkKKwkJCQk7OworCQkJbW9uOTYwKQorCQkJ CWJhc2ljX21hY2hpbmU9aTk2MC1pbnRlbAorCQkJCWJhc2ljX29zPW1vbjk2MAorCQkJCTs7CisJ CQlub25zdG9wdXgpCisJCQkJYmFzaWNfbWFjaGluZT1taXBzLWNvbXBhcQorCQkJCWJhc2ljX29z PW5vbnN0b3B1eAorCQkJCTs7CisJCQlvczQwMCkKKwkJCQliYXNpY19tYWNoaW5lPXBvd2VycGMt aWJtCisJCQkJYmFzaWNfb3M9b3M0MDAKKwkJCQk7OworCQkJT1NFNjgwMDAgfCBvc2U2ODAwMCkK KwkJCQliYXNpY19tYWNoaW5lPW02ODAwMC1lcmljc3NvbgorCQkJCWJhc2ljX29zPW9zZQorCQkJ CTs7CisJCQlvczY4aykKKwkJCQliYXNpY19tYWNoaW5lPW02OGstbm9uZQorCQkJCWJhc2ljX29z PW9zNjhrCisJCQkJOzsKKwkJCXBhcmFnb24pCisJCQkJYmFzaWNfbWFjaGluZT1pODYwLWludGVs CisJCQkJYmFzaWNfb3M9b3NmCisJCQkJOzsKKwkJCXBhcmlzYykKKwkJCQliYXNpY19tYWNoaW5l PWhwcGEtdW5rbm93bgorCQkJCWJhc2ljX29zPWxpbnV4CisJCQkJOzsKKwkJCXBzcCkKKwkJCQli YXNpY19tYWNoaW5lPW1pcHNhbGxlZ3JleGVsLXNvbnkKKwkJCQliYXNpY19vcz1wc3AKKwkJCQk7 OworCQkJcHczMikKKwkJCQliYXNpY19tYWNoaW5lPWk1ODYtdW5rbm93bgorCQkJCWJhc2ljX29z PXB3MzIKKwkJCQk7OworCQkJcmRvcyB8IHJkb3M2NCkKKwkJCQliYXNpY19tYWNoaW5lPXg4Nl82 NC1wYworCQkJCWJhc2ljX29zPXJkb3MKKwkJCQk7OworCQkJcmRvczMyKQorCQkJCWJhc2ljX21h Y2hpbmU9aTM4Ni1wYworCQkJCWJhc2ljX29zPXJkb3MKKwkJCQk7OworCQkJcm9tNjhrKQorCQkJ CWJhc2ljX21hY2hpbmU9bTY4ay1yb202OGsKKwkJCQliYXNpY19vcz1jb2ZmCisJCQkJOzsKKwkJ CXNhMjkyMDApCisJCQkJYmFzaWNfbWFjaGluZT1hMjlrLWFtZAorCQkJCWJhc2ljX29zPXVkaQor CQkJCTs7CisJCQlzZWkpCisJCQkJYmFzaWNfbWFjaGluZT1taXBzLXNlaQorCQkJCWJhc2ljX29z PXNlaXV4CisJCQkJOzsKKwkJCXNlcXVlbnQpCisJCQkJYmFzaWNfbWFjaGluZT1pMzg2LXNlcXVl bnQKKwkJCQliYXNpY19vcz0KKwkJCQk7OworCQkJc3BzNykKKwkJCQliYXNpY19tYWNoaW5lPW02 OGstYnVsbAorCQkJCWJhc2ljX29zPXN5c3YyCisJCQkJOzsKKwkJCXN0MjAwMCkKKwkJCQliYXNp Y19tYWNoaW5lPW02OGstdGFuZGVtCisJCQkJYmFzaWNfb3M9CisJCQkJOzsKKwkJCXN0cmF0dXMp CisJCQkJYmFzaWNfbWFjaGluZT1pODYwLXN0cmF0dXMKKwkJCQliYXNpY19vcz1zeXN2NAorCQkJ CTs7CisJCQlzdW4yKQorCQkJCWJhc2ljX21hY2hpbmU9bTY4MDAwLXN1bgorCQkJCWJhc2ljX29z PQorCQkJCTs7CisJCQlzdW4yb3MzKQorCQkJCWJhc2ljX21hY2hpbmU9bTY4MDAwLXN1bgorCQkJ CWJhc2ljX29zPXN1bm9zMworCQkJCTs7CisJCQlzdW4yb3M0KQorCQkJCWJhc2ljX21hY2hpbmU9 bTY4MDAwLXN1bgorCQkJCWJhc2ljX29zPXN1bm9zNAorCQkJCTs7CisJCQlzdW4zKQorCQkJCWJh c2ljX21hY2hpbmU9bTY4ay1zdW4KKwkJCQliYXNpY19vcz0KKwkJCQk7OworCQkJc3VuM29zMykK KwkJCQliYXNpY19tYWNoaW5lPW02OGstc3VuCisJCQkJYmFzaWNfb3M9c3Vub3MzCisJCQkJOzsK KwkJCXN1bjNvczQpCisJCQkJYmFzaWNfbWFjaGluZT1tNjhrLXN1bgorCQkJCWJhc2ljX29zPXN1 bm9zNAorCQkJCTs7CisJCQlzdW40KQorCQkJCWJhc2ljX21hY2hpbmU9c3BhcmMtc3VuCisJCQkJ YmFzaWNfb3M9CisJCQkJOzsKKwkJCXN1bjRvczMpCisJCQkJYmFzaWNfbWFjaGluZT1zcGFyYy1z dW4KKwkJCQliYXNpY19vcz1zdW5vczMKKwkJCQk7OworCQkJc3VuNG9zNCkKKwkJCQliYXNpY19t YWNoaW5lPXNwYXJjLXN1bgorCQkJCWJhc2ljX29zPXN1bm9zNAorCQkJCTs7CisJCQlzdW40c29s MikKKwkJCQliYXNpY19tYWNoaW5lPXNwYXJjLXN1bgorCQkJCWJhc2ljX29zPXNvbGFyaXMyCisJ CQkJOzsKKwkJCXN1bjM4NiB8IHN1bjM4NmkgfCByb2FkcnVubmVyKQorCQkJCWJhc2ljX21hY2hp bmU9aTM4Ni1zdW4KKwkJCQliYXNpY19vcz0KKwkJCQk7OworCQkJc3YxKQorCQkJCWJhc2ljX21h Y2hpbmU9c3YxLWNyYXkKKwkJCQliYXNpY19vcz11bmljb3MKKwkJCQk7OworCQkJc3ltbWV0cnkp CisJCQkJYmFzaWNfbWFjaGluZT1pMzg2LXNlcXVlbnQKKwkJCQliYXNpY19vcz1keW5peAorCQkJ CTs7CisJCQl0M2UpCisJCQkJYmFzaWNfbWFjaGluZT1hbHBoYWV2NS1jcmF5CisJCQkJYmFzaWNf b3M9dW5pY29zCisJCQkJOzsKKwkJCXQ5MCkKKwkJCQliYXNpY19tYWNoaW5lPXQ5MC1jcmF5CisJ CQkJYmFzaWNfb3M9dW5pY29zCisJCQkJOzsKKwkJCXRvYWQxKQorCQkJCWJhc2ljX21hY2hpbmU9 cGRwMTAteGtsCisJCQkJYmFzaWNfb3M9dG9wczIwCisJCQkJOzsKKwkJCXRwZikKKwkJCQliYXNp Y19tYWNoaW5lPXMzOTB4LWlibQorCQkJCWJhc2ljX29zPXRwZgorCQkJCTs7CisJCQl1ZGkyOWsp CisJCQkJYmFzaWNfbWFjaGluZT1hMjlrLWFtZAorCQkJCWJhc2ljX29zPXVkaQorCQkJCTs7CisJ CQl1bHRyYTMpCisJCQkJYmFzaWNfbWFjaGluZT1hMjlrLW55dQorCQkJCWJhc2ljX29zPXN5bTEK KwkJCQk7OworCQkJdjgxMCB8IG5lY3Y4MTApCisJCQkJYmFzaWNfbWFjaGluZT12ODEwLW5lYwor CQkJCWJhc2ljX29zPW5vbmUKKwkJCQk7OworCQkJdmF4dikKKwkJCQliYXNpY19tYWNoaW5lPXZh eC1kZWMKKwkJCQliYXNpY19vcz1zeXN2CisJCQkJOzsKKwkJCXZtcykKKwkJCQliYXNpY19tYWNo aW5lPXZheC1kZWMKKwkJCQliYXNpY19vcz12bXMKKwkJCQk7OworCQkJdnN0YSkKKwkJCQliYXNp Y19tYWNoaW5lPWkzODYtcGMKKwkJCQliYXNpY19vcz12c3RhCisJCQkJOzsKKwkJCXZ4d29ya3M5 NjApCisJCQkJYmFzaWNfbWFjaGluZT1pOTYwLXdycworCQkJCWJhc2ljX29zPXZ4d29ya3MKKwkJ CQk7OworCQkJdnh3b3JrczY4KQorCQkJCWJhc2ljX21hY2hpbmU9bTY4ay13cnMKKwkJCQliYXNp Y19vcz12eHdvcmtzCisJCQkJOzsKKwkJCXZ4d29ya3MyOWspCisJCQkJYmFzaWNfbWFjaGluZT1h MjlrLXdycworCQkJCWJhc2ljX29zPXZ4d29ya3MKKwkJCQk7OworCQkJeGJveCkKKwkJCQliYXNp Y19tYWNoaW5lPWk2ODYtcGMKKwkJCQliYXNpY19vcz1taW5ndzMyCisJCQkJOzsKKwkJCXltcCkK KwkJCQliYXNpY19tYWNoaW5lPXltcC1jcmF5CisJCQkJYmFzaWNfb3M9dW5pY29zCisJCQkJOzsK KwkJCSopCisJCQkJYmFzaWNfbWFjaGluZT0kMQorCQkJCWJhc2ljX29zPQorCQkJCTs7CisJCWVz YWMKKwkJOzsKK2VzYWMKKworIyBEZWNvZGUgMS1jb21wb25lbnQgb3IgYWQtaG9jIGJhc2ljIG1h Y2hpbmVzCitjYXNlICRiYXNpY19tYWNoaW5lIGluCisJIyBIZXJlIHdlIGhhbmRsZSB0aGUgZGVm YXVsdCBtYW51ZmFjdHVyZXIgb2YgY2VydGFpbiBDUFUgdHlwZXMuICBJdCBpcyBpbgorCSMgc29t ZSBjYXNlcyB0aGUgb25seSBtYW51ZmFjdHVyZXIsIGluIG90aGVycywgaXQgaXMgdGhlIG1vc3Qg cG9wdWxhci4KKwl3ODlrKQorCQljcHU9aHBwYTEuMQorCQl2ZW5kb3I9d2luYm9uZAorCQk7Owor CW9wNTBuKQorCQljcHU9aHBwYTEuMQorCQl2ZW5kb3I9b2tpCisJCTs7CisJb3A2MGMpCisJCWNw dT1ocHBhMS4xCisJCXZlbmRvcj1va2kKKwkJOzsKKwlpYm0qKQorCQljcHU9aTM3MAorCQl2ZW5k b3I9aWJtCisJCTs7CisJb3Jpb24xMDUpCisJCWNwdT1jbGlwcGVyCisJCXZlbmRvcj1oaWdobGV2 ZWwKKwkJOzsKKwltYWMgfCBtcHcgfCBtYWMtbXB3KQorCQljcHU9bTY4aworCQl2ZW5kb3I9YXBw bGUKKwkJOzsKKwlwbWFjIHwgcG1hYy1tcHcpCisJCWNwdT1wb3dlcnBjCisJCXZlbmRvcj1hcHBs ZQorCQk7OworCisJIyBSZWNvZ25pemUgdGhlIHZhcmlvdXMgbWFjaGluZSBuYW1lcyBhbmQgYWxp YXNlcyB3aGljaCBzdGFuZAorCSMgZm9yIGEgQ1BVIHR5cGUgYW5kIGEgY29tcGFueSBhbmQgc29t ZXRpbWVzIGV2ZW4gYW4gT1MuCisJM2IxIHwgNzMwMCB8IDczMDAtYXR0IHwgYXR0LTczMDAgfCBw YzczMDAgfCBzYWZhcmkgfCB1bml4cGMpCisJCWNwdT1tNjgwMDAKKwkJdmVuZG9yPWF0dAorCQk7 OworCTNiKikKKwkJY3B1PXdlMzJrCisJCXZlbmRvcj1hdHQKKwkJOzsKKwlibHVlZ2VuZSopCisJ CWNwdT1wb3dlcnBjCisJCXZlbmRvcj1pYm0KKwkJYmFzaWNfb3M9Y25rCisJCTs7CisJZGVjc3lz dGVtMTAqIHwgZGVjMTAqKQorCQljcHU9cGRwMTAKKwkJdmVuZG9yPWRlYworCQliYXNpY19vcz10 b3BzMTAKKwkJOzsKKwlkZWNzeXN0ZW0yMCogfCBkZWMyMCopCisJCWNwdT1wZHAxMAorCQl2ZW5k b3I9ZGVjCisJCWJhc2ljX29zPXRvcHMyMAorCQk7OworCWRlbHRhIHwgMzMwMCB8IG1vdG9yb2xh LTMzMDAgfCBtb3Rvcm9sYS1kZWx0YSBcCisJICAgICAgfCAzMzAwLW1vdG9yb2xhIHwgZGVsdGEt bW90b3JvbGEpCisJCWNwdT1tNjhrCisJCXZlbmRvcj1tb3Rvcm9sYQorCQk7OworCWRweDIqKQor CQljcHU9bTY4aworCQl2ZW5kb3I9YnVsbAorCQliYXNpY19vcz1zeXN2MworCQk7OworCWVuY29y ZSB8IHVtYXggfCBtbWF4KQorCQljcHU9bnMzMmsKKwkJdmVuZG9yPWVuY29yZQorCQk7OworCWVs eHNpKQorCQljcHU9ZWx4c2kKKwkJdmVuZG9yPWVseHNpCisJCWJhc2ljX29zPSR7YmFzaWNfb3M6 LWJzZH0KKwkJOzsKKwlmeDI4MDApCisJCWNwdT1pODYwCisJCXZlbmRvcj1hbGxpYW50CisJCTs7 CisJZ2VuaXgpCisJCWNwdT1uczMyaworCQl2ZW5kb3I9bnMKKwkJOzsKKwloMzA1MHIqIHwgaGl1 eCopCisJCWNwdT1ocHBhMS4xCisJCXZlbmRvcj1oaXRhY2hpCisJCWJhc2ljX29zPWhpdXh3ZTIK KwkJOzsKKwlocDNrOVswLTldWzAtOV0gfCBocDlbMC05XVswLTldKQorCQljcHU9aHBwYTEuMAor CQl2ZW5kb3I9aHAKKwkJOzsKKwlocDlrMlswLTldWzAtOV0gfCBocDlrMzFbMC05XSkKKwkJY3B1 PW02ODAwMAorCQl2ZW5kb3I9aHAKKwkJOzsKKwlocDlrM1syLTldWzAtOV0pCisJCWNwdT1tNjhr CisJCXZlbmRvcj1ocAorCQk7OworCWhwOWs2WzAtOV1bMC05XSB8IGhwNlswLTldWzAtOV0pCisJ CWNwdT1ocHBhMS4wCisJCXZlbmRvcj1ocAorCQk7OworCWhwOWs3WzAtNzldWzAtOV0gfCBocDdb MC03OV1bMC05XSkKKwkJY3B1PWhwcGExLjEKKwkJdmVuZG9yPWhwCisJCTs7CisJaHA5azc4WzAt OV0gfCBocDc4WzAtOV0pCisJCSMgRklYTUU6IHJlYWxseSBocHBhMi4wLWhwCisJCWNwdT1ocHBh MS4xCisJCXZlbmRvcj1ocAorCQk7OworCWhwOWs4WzY3XTEgfCBocDhbNjddMSB8IGhwOWs4MFsy NF0gfCBocDgwWzI0XSB8IGhwOWs4Wzc4XTkgfCBocDhbNzhdOSB8IGhwOWs4OTMgfCBocDg5MykK KwkJIyBGSVhNRTogcmVhbGx5IGhwcGEyLjAtaHAKKwkJY3B1PWhwcGExLjEKKwkJdmVuZG9yPWhw CisJCTs7CisJaHA5azhbMC05XVsxMzY3OV0gfCBocDhbMC05XVsxMzY3OV0pCisJCWNwdT1ocHBh MS4xCisJCXZlbmRvcj1ocAorCQk7OworCWhwOWs4WzAtOV1bMC05XSB8IGhwOFswLTldWzAtOV0p CisJCWNwdT1ocHBhMS4wCisJCXZlbmRvcj1ocAorCQk7OworCWkqODZ2MzIpCisJCWNwdT0kKGVj aG8gIiQxIiB8IHNlZCAtZSAncy84Ni4qLzg2LycpCisJCXZlbmRvcj1wYworCQliYXNpY19vcz1z eXN2MzIKKwkJOzsKKwlpKjg2djQqKQorCQljcHU9JChlY2hvICIkMSIgfCBzZWQgLWUgJ3MvODYu Ki84Ni8nKQorCQl2ZW5kb3I9cGMKKwkJYmFzaWNfb3M9c3lzdjQKKwkJOzsKKwlpKjg2dikKKwkJ Y3B1PSQoZWNobyAiJDEiIHwgc2VkIC1lICdzLzg2LiovODYvJykKKwkJdmVuZG9yPXBjCisJCWJh c2ljX29zPXN5c3YKKwkJOzsKKwlpKjg2c29sMikKKwkJY3B1PSQoZWNobyAiJDEiIHwgc2VkIC1l ICdzLzg2LiovODYvJykKKwkJdmVuZG9yPXBjCisJCWJhc2ljX29zPXNvbGFyaXMyCisJCTs7CisJ ajkwIHwgajkwLWNyYXkpCisJCWNwdT1qOTAKKwkJdmVuZG9yPWNyYXkKKwkJYmFzaWNfb3M9JHti YXNpY19vczotdW5pY29zfQorCQk7OworCWlyaXMgfCBpcmlzNGQpCisJCWNwdT1taXBzCisJCXZl bmRvcj1zZ2kKKwkJY2FzZSAkYmFzaWNfb3MgaW4KKwkJICAgIGlyaXgqKQorCQkJOzsKKwkJICAg ICopCisJCQliYXNpY19vcz1pcml4NAorCQkJOzsKKwkJZXNhYworCQk7OworCW1pbmlmcmFtZSkK KwkJY3B1PW02ODAwMAorCQl2ZW5kb3I9Y29udmVyZ2VudAorCQk7OworCSptaW50IHwgbWludFsw LTldKiB8ICpNaU5UIHwgKk1pTlRbMC05XSopCisJCWNwdT1tNjhrCisJCXZlbmRvcj1hdGFyaQor CQliYXNpY19vcz1taW50CisJCTs7CisJbmV3cy0zNjAwIHwgcmlzYy1uZXdzKQorCQljcHU9bWlw cworCQl2ZW5kb3I9c29ueQorCQliYXNpY19vcz1uZXdzb3MKKwkJOzsKKwluZXh0IHwgbSotbmV4 dCkKKwkJY3B1PW02OGsKKwkJdmVuZG9yPW5leHQKKwkJY2FzZSAkYmFzaWNfb3MgaW4KKwkJICAg IG9wZW5zdGVwKikKKwkJICAgICAgICA7OworCQkgICAgbmV4dHN0ZXAqKQorCQkJOzsKKwkJICAg IG5zMiopCisJCSAgICAgIGJhc2ljX29zPW5leHRzdGVwMgorCQkJOzsKKwkJICAgICopCisJCSAg ICAgIGJhc2ljX29zPW5leHRzdGVwMworCQkJOzsKKwkJZXNhYworCQk7OworCW5wMSkKKwkJY3B1 PW5wMQorCQl2ZW5kb3I9Z291bGQKKwkJOzsKKwlvcDUwbi0qIHwgb3A2MGMtKikKKwkJY3B1PWhw cGExLjEKKwkJdmVuZG9yPW9raQorCQliYXNpY19vcz1wcm9lbGYKKwkJOzsKKwlwYS1oaXRhY2hp KQorCQljcHU9aHBwYTEuMQorCQl2ZW5kb3I9aGl0YWNoaQorCQliYXNpY19vcz1oaXV4d2UyCisJ CTs7CisJcGJkKQorCQljcHU9c3BhcmMKKwkJdmVuZG9yPXR0aQorCQk7OworCXBiYikKKwkJY3B1 PW02OGsKKwkJdmVuZG9yPXR0aQorCQk7OworCXBjNTMyKQorCQljcHU9bnMzMmsKKwkJdmVuZG9y PXBjNTMyCisJCTs7CisJcG4pCisJCWNwdT1wbgorCQl2ZW5kb3I9Z291bGQKKwkJOzsKKwlwb3dl cikKKwkJY3B1PXBvd2VyCisJCXZlbmRvcj1pYm0KKwkJOzsKKwlwczIpCisJCWNwdT1pMzg2CisJ CXZlbmRvcj1pYm0KKwkJOzsKKwlybVs0Nl0wMCkKKwkJY3B1PW1pcHMKKwkJdmVuZG9yPXNpZW1l bnMKKwkJOzsKKwlydHBjIHwgcnRwYy0qKQorCQljcHU9cm9tcAorCQl2ZW5kb3I9aWJtCisJCTs7 CisJc2RlKQorCQljcHU9bWlwc2lzYTMyCisJCXZlbmRvcj1zZGUKKwkJYmFzaWNfb3M9JHtiYXNp Y19vczotZWxmfQorCQk7OworCXNpbXNvLXdycykKKwkJY3B1PXNwYXJjbGl0ZQorCQl2ZW5kb3I9 d3JzCisJCWJhc2ljX29zPXZ4d29ya3MKKwkJOzsKKwl0b3dlciB8IHRvd2VyLTMyKQorCQljcHU9 bTY4aworCQl2ZW5kb3I9bmNyCisJCTs7CisJdnBwKnx2eHx2eC0qKQorCQljcHU9ZjMwMQorCQl2 ZW5kb3I9ZnVqaXRzdQorCQk7OworCXc2NSkKKwkJY3B1PXc2NQorCQl2ZW5kb3I9d2RjCisJCTs7 CisJdzg5ay0qKQorCQljcHU9aHBwYTEuMQorCQl2ZW5kb3I9d2luYm9uZAorCQliYXNpY19vcz1w cm9lbGYKKwkJOzsKKwlub25lKQorCQljcHU9bm9uZQorCQl2ZW5kb3I9bm9uZQorCQk7OworCWxl b258bGVvblszLTldKQorCQljcHU9c3BhcmMKKwkJdmVuZG9yPSRiYXNpY19tYWNoaW5lCisJCTs7 CisJbGVvbi0qfGxlb25bMy05XS0qKQorCQljcHU9c3BhcmMKKwkJdmVuZG9yPSQoZWNobyAiJGJh c2ljX21hY2hpbmUiIHwgc2VkICdzLy0uKi8vJykKKwkJOzsKKworCSotKikKKwkJIyBzaGVsbGNo ZWNrIGRpc2FibGU9U0MyMTYyCisJCUlGUz0iLSIgcmVhZCBjcHUgdmVuZG9yIDw8RU9GCiskYmFz aWNfbWFjaGluZQorRU9GCisJCTs7CisJIyBXZSB1c2UgYHBjJyByYXRoZXIgdGhhbiBgdW5rbm93 bicKKwkjIGJlY2F1c2UgKDEpIHRoYXQncyB3aGF0IHRoZXkgbm9ybWFsbHkgYXJlLCBhbmQKKwkj ICgyKSB0aGUgd29yZCAidW5rbm93biIgdGVuZHMgdG8gY29uZnVzZSBiZWdpbm5pbmcgdXNlcnMu CisJaSo4NiB8IHg4Nl82NCkKKwkJY3B1PSRiYXNpY19tYWNoaW5lCisJCXZlbmRvcj1wYworCQk7 OworCSMgVGhlc2UgcnVsZXMgYXJlIGR1cGxpY2F0ZWQgZnJvbSBiZWxvdyBmb3Igc2FrZSBvZiB0 aGUgc3BlY2lhbCBjYXNlIGFib3ZlOworCSMgaS5lLiB0aGluZ3MgdGhhdCBub3JtYWxpemVkIHRv IHg4NiBhcmNoZXMgc2hvdWxkIGFsc28gZGVmYXVsdCB0byAicGMiCisJcGM5OCkKKwkJY3B1PWkz ODYKKwkJdmVuZG9yPXBjCisJCTs7CisJeDY0IHwgYW1kNjQpCisJCWNwdT14ODZfNjQKKwkJdmVu ZG9yPXBjCisJCTs7CisJIyBSZWNvZ25pemUgdGhlIGJhc2ljIENQVSB0eXBlcyB3aXRob3V0IGNv bXBhbnkgbmFtZS4KKwkqKQorCQljcHU9JGJhc2ljX21hY2hpbmUKKwkJdmVuZG9yPXVua25vd24K KwkJOzsKK2VzYWMKKwordW5zZXQgLXYgYmFzaWNfbWFjaGluZQorCisjIERlY29kZSBiYXNpYyBt YWNoaW5lcyBpbiB0aGUgZnVsbCBhbmQgcHJvcGVyIENQVS1Db21wYW55IGZvcm0uCitjYXNlICRj cHUtJHZlbmRvciBpbgorCSMgSGVyZSB3ZSBoYW5kbGUgdGhlIGRlZmF1bHQgbWFudWZhY3R1cmVy IG9mIGNlcnRhaW4gQ1BVIHR5cGVzIGluIGNhbm9uaWNhbCBmb3JtLiBJdCBpcyBpbgorCSMgc29t ZSBjYXNlcyB0aGUgb25seSBtYW51ZmFjdHVyZXIsIGluIG90aGVycywgaXQgaXMgdGhlIG1vc3Qg cG9wdWxhci4KKwljcmF5bnYtdW5rbm93bikKKwkJdmVuZG9yPWNyYXkKKwkJYmFzaWNfb3M9JHti YXNpY19vczotdW5pY29zbXB9CisJCTs7CisJYzkwLXVua25vd24gfCBjOTAtY3JheSkKKwkJdmVu ZG9yPWNyYXkKKwkJYmFzaWNfb3M9JHtCYXNpY19vczotdW5pY29zfQorCQk7OworCWZ4ODAtdW5r bm93bikKKwkJdmVuZG9yPWFsbGlhbnQKKwkJOzsKKwlyb21wLXVua25vd24pCisJCXZlbmRvcj1p Ym0KKwkJOzsKKwltbWl4LXVua25vd24pCisJCXZlbmRvcj1rbnV0aAorCQk7OworCW1pY3JvYmxh emUtdW5rbm93biB8IG1pY3JvYmxhemVlbC11bmtub3duKQorCQl2ZW5kb3I9eGlsaW54CisJCTs7 CisJcnM2MDAwLXVua25vd24pCisJCXZlbmRvcj1pYm0KKwkJOzsKKwl2YXgtdW5rbm93bikKKwkJ dmVuZG9yPWRlYworCQk7OworCXBkcDExLXVua25vd24pCisJCXZlbmRvcj1kZWMKKwkJOzsKKwl3 ZTMyay11bmtub3duKQorCQl2ZW5kb3I9YXR0CisJCTs7CisJY3lkcmEtdW5rbm93bikKKwkJdmVu ZG9yPWN5ZHJvbWUKKwkJOzsKKwlpMzcwLWlibSopCisJCXZlbmRvcj1pYm0KKwkJOzsKKwlvcmlv bi11bmtub3duKQorCQl2ZW5kb3I9aGlnaGxldmVsCisJCTs7CisJeHBzLXVua25vd24gfCB4cHMx MDAtdW5rbm93bikKKwkJY3B1PXhwczEwMAorCQl2ZW5kb3I9aG9uZXl3ZWxsCisJCTs7CisKKwkj IEhlcmUgd2Ugbm9ybWFsaXplIENQVSB0eXBlcyB3aXRoIGEgbWlzc2luZyBvciBtYXRjaGluZyB2 ZW5kb3IKKwlkcHgyMC11bmtub3duIHwgZHB4MjAtYnVsbCkKKwkJY3B1PXJzNjAwMAorCQl2ZW5k b3I9YnVsbAorCQliYXNpY19vcz0ke2Jhc2ljX29zOi1ib3N4fQorCQk7OworCisJIyBIZXJlIHdl IG5vcm1hbGl6ZSBDUFUgdHlwZXMgaXJyZXNwZWN0aXZlIG9mIHRoZSB2ZW5kb3IKKwlhbWQ2NC0q KQorCQljcHU9eDg2XzY0CisJCTs7CisJYmxhY2tmaW4tKikKKwkJY3B1PWJmaW4KKwkJYmFzaWNf b3M9bGludXgKKwkJOzsKKwljNTR4LSopCisJCWNwdT10aWM1NHgKKwkJOzsKKwljNTV4LSopCisJ CWNwdT10aWM1NXgKKwkJOzsKKwljNngtKikKKwkJY3B1PXRpYzZ4CisJCTs7CisJZTUwMHZbMTJd LSopCisJCWNwdT1wb3dlcnBjCisJCWJhc2ljX29zPSR7YmFzaWNfb3N9InNwZSIKKwkJOzsKKwlt aXBzMyotKikKKwkJY3B1PW1pcHM2NAorCQk7OworCW1zMS0qKQorCQljcHU9bXQKKwkJOzsKKwlt Njhrbm9tbXUtKikKKwkJY3B1PW02OGsKKwkJYmFzaWNfb3M9bGludXgKKwkJOzsKKwltOXMxMnot KiB8IG02OGhjczEyei0qIHwgaGNzMTJ6LSogfCBzMTJ6LSopCisJCWNwdT1zMTJ6CisJCTs7CisJ b3BlbnJpc2MtKikKKwkJY3B1PW9yMzIKKwkJOzsKKwlwYXJpc2MtKikKKwkJY3B1PWhwcGEKKwkJ YmFzaWNfb3M9bGludXgKKwkJOzsKKwlwZW50aXVtLSogfCBwNS0qIHwgazUtKiB8IGs2LSogfCBu ZXhnZW4tKiB8IHZpYWMzLSopCisJCWNwdT1pNTg2CisJCTs7CisJcGVudGl1bXByby0qIHwgcDYt KiB8IDZ4ODYtKiB8IGF0aGxvbi0qIHwgYXRoYWxvbl8qLSopCisJCWNwdT1pNjg2CisJCTs7CisJ cGVudGl1bWlpLSogfCBwZW50aXVtMi0qIHwgcGVudGl1bWlpaS0qIHwgcGVudGl1bTMtKikKKwkJ Y3B1PWk2ODYKKwkJOzsKKwlwZW50aXVtNC0qKQorCQljcHU9aTc4NgorCQk7OworCXBjOTgtKikK KwkJY3B1PWkzODYKKwkJOzsKKwlwcGMtKiB8IHBwY2JlLSopCisJCWNwdT1wb3dlcnBjCisJCTs7 CisJcHBjbGUtKiB8IHBvd2VycGNsaXR0bGUtKikKKwkJY3B1PXBvd2VycGNsZQorCQk7OworCXBw YzY0LSopCisJCWNwdT1wb3dlcnBjNjQKKwkJOzsKKwlwcGM2NGxlLSogfCBwb3dlcnBjNjRsaXR0 bGUtKikKKwkJY3B1PXBvd2VycGM2NGxlCisJCTs7CisJc2IxLSopCisJCWNwdT1taXBzaXNhNjRz YjEKKwkJOzsKKwlzYjFlbC0qKQorCQljcHU9bWlwc2lzYTY0c2IxZWwKKwkJOzsKKwlzaDVlW2xi XS0qKQorCQljcHU9JChlY2hvICIkY3B1IiB8IHNlZCAncy9eXChzaC5cKWVcKC5cKSQvXDFcMmUv JykKKwkJOzsKKwlzcHVyLSopCisJCWNwdT1zcHVyCisJCTs7CisJc3Ryb25nYXJtLSogfCB0aHVt Yi0qKQorCQljcHU9YXJtCisJCTs7CisJdHgzOS0qKQorCQljcHU9bWlwc3R4MzkKKwkJOzsKKwl0 eDM5ZWwtKikKKwkJY3B1PW1pcHN0eDM5ZWwKKwkJOzsKKwl4NjQtKikKKwkJY3B1PXg4Nl82NAor CQk7OworCXhzY2FsZS0qIHwgeHNjYWxlZVtibF0tKikKKwkJY3B1PSQoZWNobyAiJGNwdSIgfCBz ZWQgJ3MvXnhzY2FsZS9hcm0vJykKKwkJOzsKKwlhcm02NC0qKQorCQljcHU9YWFyY2g2NAorCQk7 OworCisJIyBSZWNvZ25pemUgdGhlIGNhbm9uaWNhbCBDUFUgVHlwZXMgdGhhdCBsaW1pdCBhbmQv b3IgbW9kaWZ5IHRoZQorCSMgY29tcGFueSBuYW1lcyB0aGV5IGFyZSBwYWlyZWQgd2l0aC4KKwlj cjE2LSopCisJCWJhc2ljX29zPSR7YmFzaWNfb3M6LWVsZn0KKwkJOzsKKwljcmlzdjMyLSogfCBl dHJheGZzKi0qKQorCQljcHU9Y3Jpc3YzMgorCQl2ZW5kb3I9YXhpcworCQk7OworCWNyaXMtKiB8 IGV0cmF4Ki0qKQorCQljcHU9Y3JpcworCQl2ZW5kb3I9YXhpcworCQk7OworCWNyeC0qKQorCQli YXNpY19vcz0ke2Jhc2ljX29zOi1lbGZ9CisJCTs7CisJbmVvLXRhbmRlbSkKKwkJY3B1PW5lbwor CQl2ZW5kb3I9dGFuZGVtCisJCTs7CisJbnNlLXRhbmRlbSkKKwkJY3B1PW5zZQorCQl2ZW5kb3I9 dGFuZGVtCisJCTs7CisJbnNyLXRhbmRlbSkKKwkJY3B1PW5zcgorCQl2ZW5kb3I9dGFuZGVtCisJ CTs7CisJbnN2LXRhbmRlbSkKKwkJY3B1PW5zdgorCQl2ZW5kb3I9dGFuZGVtCisJCTs7CisJbnN4 LXRhbmRlbSkKKwkJY3B1PW5zeAorCQl2ZW5kb3I9dGFuZGVtCisJCTs7CisJbWlwc2FsbGVncmV4 ZWwtc29ueSkKKwkJY3B1PW1pcHNhbGxlZ3JleGVsCisJCXZlbmRvcj1zb255CisJCTs7CisJdGls ZSotKikKKwkJYmFzaWNfb3M9JHtiYXNpY19vczotbGludXgtZ251fQorCQk7OworCisJKikKKwkJ IyBSZWNvZ25pemUgdGhlIGNhbm9uaWNhbCBDUFUgdHlwZXMgdGhhdCBhcmUgYWxsb3dlZCB3aXRo IGFueQorCQkjIGNvbXBhbnkgbmFtZS4KKwkJY2FzZSAkY3B1IGluCisJCQkxNzUwYSB8IDU4MCBc CisJCQl8IGEyOWsgXAorCQkJfCBhYXJjaDY0IHwgYWFyY2g2NF9iZSBcCisJCQl8IGFiYWN1cyBc CisJCQl8IGFscGhhIHwgYWxwaGFldls0LThdIHwgYWxwaGFldjU2IHwgYWxwaGFldjZbNzhdIFwK KwkJCXwgYWxwaGE2NCB8IGFscGhhNjRldls0LThdIHwgYWxwaGE2NGV2NTYgfCBhbHBoYTY0ZXY2 Wzc4XSBcCisJCQl8IGFscGhhcGNhNVs2N10gfCBhbHBoYTY0cGNhNVs2N10gXAorCQkJfCBhbTMz XzIuMCBcCisJCQl8IGFtZGdjbiBcCisJCQl8IGFyYyB8IGFyY2ViIFwKKwkJCXwgYXJtIHwgYXJt W2xiXWUgfCBhcm1lW2xiXSB8IGFybXYqIFwKKwkJCXwgYXZyIHwgYXZyMzIgXAorCQkJfCBhc21q cyBcCisJCQl8IGJhIFwKKwkJCXwgYmUzMiB8IGJlNjQgXAorCQkJfCBiZmluIHwgYnBmIHwgYnMy MDAwIFwKKwkJCXwgY1sxMjNdKiB8IGMzMCB8IFtjanRdOTAgfCBjNHggXAorCQkJfCBjODA1MSB8 IGNsaXBwZXIgfCBjcmF5bnYgfCBjc2t5IHwgY3lkcmEgXAorCQkJfCBkMTB2IHwgZDMwdiB8IGRs eCB8IGRzcDE2eHggXAorCQkJfCBlMmsgfCBlbHhzaSB8IGVwaXBoYW55IFwKKwkJCXwgZjMwWzAx XSB8IGY3MDAgfCBmaWRvIHwgZnIzMCB8IGZydiB8IGZ0MzIgfCBmeDgwIFwKKwkJCXwgaDgzMDAg fCBoODUwMCBcCisJCQl8IGhwcGEgfCBocHBhMS5bMDFdIHwgaHBwYTIuMCB8IGhwcGEyLjBbbndd IHwgaHBwYTY0IFwKKwkJCXwgaGV4YWdvbiBcCisJCQl8IGkzNzAgfCBpKjg2IHwgaTg2MCB8IGk5 NjAgfCBpYTE2IHwgaWE2NCBcCisJCQl8IGlwMmsgfCBpcTIwMDAgXAorCQkJfCBrMW9tIFwKKwkJ CXwgbGUzMiB8IGxlNjQgXAorCQkJfCBsbTMyIFwKKwkJCXwgbG9vbmdhcmNoMzIgfCBsb29uZ2Fy Y2g2NCB8IGxvb25nYXJjaHgzMiBcCisJCQl8IG0zMmMgfCBtMzJyIHwgbTMycmxlIFwKKwkJCXwg bTUyMDAgfCBtNjgwMDAgfCBtNjgwWzAxMjM0Nl0wIHwgbTY4MzYwIHwgbTY4Mz8yIHwgbTY4ayBc CisJCQl8IG02ODExIHwgbTY4aGMxMSB8IG02ODEyIHwgbTY4aGMxMiB8IG02OGhjczEyeCBcCisJ CQl8IG04ODExMCB8IG04OGsgfCBtYXhxIHwgbWIgfCBtY29yZSB8IG1lcCB8IG1ldGFnIFwKKwkJ CXwgbWljcm9ibGF6ZSB8IG1pY3JvYmxhemVlbCBcCisJCQl8IG1pcHMgfCBtaXBzYmUgfCBtaXBz ZWIgfCBtaXBzZWwgfCBtaXBzbGUgXAorCQkJfCBtaXBzMTYgXAorCQkJfCBtaXBzNjQgfCBtaXBz NjRlYiB8IG1pcHM2NGVsIFwKKwkJCXwgbWlwczY0b2N0ZW9uIHwgbWlwczY0b2N0ZW9uZWwgXAor CQkJfCBtaXBzNjRvcmlvbiB8IG1pcHM2NG9yaW9uZWwgXAorCQkJfCBtaXBzNjRyNTkwMCB8IG1p cHM2NHI1OTAwZWwgXAorCQkJfCBtaXBzNjR2ciB8IG1pcHM2NHZyZWwgXAorCQkJfCBtaXBzNjR2 cjQxMDAgfCBtaXBzNjR2cjQxMDBlbCBcCisJCQl8IG1pcHM2NHZyNDMwMCB8IG1pcHM2NHZyNDMw MGVsIFwKKwkJCXwgbWlwczY0dnI1MDAwIHwgbWlwczY0dnI1MDAwZWwgXAorCQkJfCBtaXBzNjR2 cjU5MDAgfCBtaXBzNjR2cjU5MDBlbCBcCisJCQl8IG1pcHNpc2EzMiB8IG1pcHNpc2EzMmVsIFwK KwkJCXwgbWlwc2lzYTMycjIgfCBtaXBzaXNhMzJyMmVsIFwKKwkJCXwgbWlwc2lzYTMycjYgfCBt aXBzaXNhMzJyNmVsIFwKKwkJCXwgbWlwc2lzYTY0IHwgbWlwc2lzYTY0ZWwgXAorCQkJfCBtaXBz aXNhNjRyMiB8IG1pcHNpc2E2NHIyZWwgXAorCQkJfCBtaXBzaXNhNjRyNiB8IG1pcHNpc2E2NHI2 ZWwgXAorCQkJfCBtaXBzaXNhNjRzYjEgfCBtaXBzaXNhNjRzYjFlbCBcCisJCQl8IG1pcHNpc2E2 NHNyNzFrIHwgbWlwc2lzYTY0c3I3MWtlbCBcCisJCQl8IG1pcHNyNTkwMCB8IG1pcHNyNTkwMGVs IFwKKwkJCXwgbWlwc3R4MzkgfCBtaXBzdHgzOWVsIFwKKwkJCXwgbW1peCBcCisJCQl8IG1uMTAy MDAgfCBtbjEwMzAwIFwKKwkJCXwgbW94aWUgXAorCQkJfCBtdCBcCisJCQl8IG1zcDQzMCBcCisJ CQl8IG5kczMyIHwgbmRzMzJsZSB8IG5kczMyYmUgXAorCQkJfCBuZnAgXAorCQkJfCBuaW9zIHwg bmlvczIgfCBuaW9zMmViIHwgbmlvczJlbCBcCisJCQl8IG5vbmUgfCBucDEgfCBuczE2ayB8IG5z MzJrIHwgbnZwdHggXAorCQkJfCBvcGVuOCBcCisJCQl8IG9yMWsqIFwKKwkJCXwgb3IzMiBcCisJ CQl8IG9yaW9uIFwKKwkJCXwgcGljb2NoaXAgXAorCQkJfCBwZHAxMCB8IHBkcDExIHwgcGogfCBw amwgfCBwbiB8IHBvd2VyIFwKKwkJCXwgcG93ZXJwYyB8IHBvd2VycGM2NCB8IHBvd2VycGM2NGxl IHwgcG93ZXJwY2xlIHwgcG93ZXJwY3NwZSBcCisJCQl8IHBydSBcCisJCQl8IHB5cmFtaWQgXAor CQkJfCByaXNjdiB8IHJpc2N2MzIgfCByaXNjdjMyYmUgfCByaXNjdjY0IHwgcmlzY3Y2NGJlIFwK KwkJCXwgcmw3OCB8IHJvbXAgfCByczYwMDAgfCByeCBcCisJCQl8IHMzOTAgfCBzMzkweCBcCisJ CQl8IHNjb3JlIFwKKwkJCXwgc2ggfCBzaGwgXAorCQkJfCBzaFsxMjM0XSB8IHNoWzI0XWEgfCBz aFsyNF1hZVtsYl0gfCBzaFsyM11lIHwgc2hlW2xiXSB8IHNoW2xiXWUgXAorCQkJfCBzaFsxMjM0 XWVbbGJdIHwgIHNoWzEyMzQ1XVtsYl1lIHwgc2hbMjNdZWxlIHwgc2g2NCB8IHNoNjRsZSBcCisJ CQl8IHNwYXJjIHwgc3BhcmM2NCB8IHNwYXJjNjRiIHwgc3BhcmM2NHYgfCBzcGFyYzg2eCB8IHNw YXJjbGV0IFwKKwkJCXwgc3BhcmNsaXRlIFwKKwkJCXwgc3BhcmN2OCB8IHNwYXJjdjkgfCBzcGFy Y3Y5YiB8IHNwYXJjdjl2IHwgc3YxIHwgc3gqIFwKKwkJCXwgc3B1IFwKKwkJCXwgdGFob2UgXAor CQkJfCB0aHVtYnY3KiBcCisJCQl8IHRpYzMwIHwgdGljNHggfCB0aWM1NHggfCB0aWM1NXggfCB0 aWM2eCB8IHRpYzgwIFwKKwkJCXwgdHJvbiBcCisJCQl8IHViaWNvbTMyIFwKKwkJCXwgdjcwIHwg djg1MCB8IHY4NTBlIHwgdjg1MGUxIHwgdjg1MGVzIHwgdjg1MGUyIHwgdjg1MGUydjMgXAorCQkJ fCB2YXggXAorCQkJfCB2aXNpdW0gXAorCQkJfCB3NjUgXAorCQkJfCB3YXNtMzIgfCB3YXNtNjQg XAorCQkJfCB3ZTMyayBcCisJCQl8IHg4NiB8IHg4Nl82NCB8IHhjMTZ4IHwgeGdhdGUgfCB4cHMx MDAgXAorCQkJfCB4c3Rvcm15MTYgfCB4dGVuc2EqIFwKKwkJCXwgeW1wIFwKKwkJCXwgejhrIHwg ejgwKQorCQkJCTs7CisKKwkJCSopCisJCQkJZWNobyBJbnZhbGlkIGNvbmZpZ3VyYXRpb24gXGAi JDEiXCc6IG1hY2hpbmUgXGAiJGNwdS0kdmVuZG9yIlwnIG5vdCByZWNvZ25pemVkIDE+JjIKKwkJ CQlleGl0IDEKKwkJCQk7OworCQllc2FjCisJCTs7Citlc2FjCisKKyMgSGVyZSB3ZSBjYW5vbmlj YWxpemUgY2VydGFpbiBhbGlhc2VzIGZvciBtYW51ZmFjdHVyZXJzLgorY2FzZSAkdmVuZG9yIGlu CisJZGlnaXRhbCopCisJCXZlbmRvcj1kZWMKKwkJOzsKKwljb21tb2RvcmUqKQorCQl2ZW5kb3I9 Y2JtCisJCTs7CisJKikKKwkJOzsKK2VzYWMKKworIyBEZWNvZGUgbWFudWZhY3R1cmVyLXNwZWNp ZmljIGFsaWFzZXMgZm9yIGNlcnRhaW4gb3BlcmF0aW5nIHN5c3RlbXMuCisKK2lmIHRlc3QgeCRi YXNpY19vcyAhPSB4Cit0aGVuCisKKyMgRmlyc3QgcmVjb2duaXplIHNvbWUgYWQtaG9jIGNhZXMs IG9yIHBlcmhhcHMgc3BsaXQga2VybmVsLW9zLCBvciBlbHNlIGp1c3QKKyMgc2V0IG9zLgorY2Fz ZSAkYmFzaWNfb3MgaW4KKwlnbnUvbGludXgqKQorCQlrZXJuZWw9bGludXgKKwkJb3M9JChlY2hv ICRiYXNpY19vcyB8IHNlZCAtZSAnc3xnbnUvbGludXh8Z251fCcpCisJCTs7CisJb3MyLWVteCkK KwkJa2VybmVsPW9zMgorCQlvcz0kKGVjaG8gJGJhc2ljX29zIHwgc2VkIC1lICdzfG9zMi1lbXh8 ZW14fCcpCisJCTs7CisJbnRvLXFueCopCisJCWtlcm5lbD1udG8KKwkJb3M9JChlY2hvICRiYXNp Y19vcyB8IHNlZCAtZSAnc3xudG8tcW54fHFueHwnKQorCQk7OworCSotKikKKwkJIyBzaGVsbGNo ZWNrIGRpc2FibGU9U0MyMTYyCisJCUlGUz0iLSIgcmVhZCBrZXJuZWwgb3MgPDxFT0YKKyRiYXNp Y19vcworRU9GCisJCTs7CisJIyBEZWZhdWx0IE9TIHdoZW4ganVzdCBrZXJuZWwgd2FzIHNwZWNp ZmllZAorCW50byopCisJCWtlcm5lbD1udG8KKwkJb3M9JChlY2hvICRiYXNpY19vcyB8IHNlZCAt ZSAnc3xudG98cW54fCcpCisJCTs7CisJbGludXgqKQorCQlrZXJuZWw9bGludXgKKwkJb3M9JChl Y2hvICRiYXNpY19vcyB8IHNlZCAtZSAnc3xsaW51eHxnbnV8JykKKwkJOzsKKwkqKQorCQlrZXJu ZWw9CisJCW9zPSRiYXNpY19vcworCQk7OworZXNhYworCisjIE5vdywgbm9ybWFsaXplIHRoZSBP UyAoa25vd2luZyB3ZSBqdXN0IGhhdmUgb25lIGNvbXBvbmVudCwgaXQncyBub3QgYSBrZXJuZWws CisjIGV0Yy4pCitjYXNlICRvcyBpbgorCSMgRmlyc3QgbWF0Y2ggc29tZSBzeXN0ZW0gdHlwZSBh bGlhc2VzIHRoYXQgbWlnaHQgZ2V0IGNvbmZ1c2VkCisJIyB3aXRoIHZhbGlkIHN5c3RlbSB0eXBl cy4KKwkjIHNvbGFyaXMqIGlzIGEgYmFzaWMgc3lzdGVtIHR5cGUsIHdpdGggdGhpcyBvbmUgZXhj ZXB0aW9uLgorCWF1cm9yYXV4KQorCQlvcz1hdXJvcmF1eAorCQk7OworCWJsdWVnZW5lKikKKwkJ b3M9Y25rCisJCTs7CisJc29sYXJpczEgfCBzb2xhcmlzMS4qKQorCQlvcz0kKGVjaG8gJG9zIHwg c2VkIC1lICdzfHNvbGFyaXMxfHN1bm9zNHwnKQorCQk7OworCXNvbGFyaXMpCisJCW9zPXNvbGFy aXMyCisJCTs7CisJdW5peHdhcmUqKQorCQlvcz1zeXN2NC4ydXcKKwkJOzsKKwkjIGVzMTgwMCBp cyBoZXJlIHRvIGF2b2lkIGJlaW5nIG1hdGNoZWQgYnkgZXMqIChhIGRpZmZlcmVudCBPUykKKwll czE4MDAqKQorCQlvcz1vc2UKKwkJOzsKKwkjIFNvbWUgdmVyc2lvbiBudW1iZXJzIG5lZWQgbW9k aWZpY2F0aW9uCisJY2hvcnVzb3MqKQorCQlvcz1jaG9ydXNvcworCQk7OworCWlzYykKKwkJb3M9 aXNjMi4yCisJCTs7CisJc2NvNikKKwkJb3M9c2NvNXY2CisJCTs7CisJc2NvNSkKKwkJb3M9c2Nv My4ydjUKKwkJOzsKKwlzY280KQorCQlvcz1zY28zLjJ2NAorCQk7OworCXNjbzMuMi5bNC05XSop CisJCW9zPSQoZWNobyAkb3MgfCBzZWQgLWUgJ3Mvc2NvMy4yLi9zY28zLjJ2LycpCisJCTs7CisJ c2NvKnYqIHwgc2NvdXQpCisJCSMgRG9uJ3QgbWF0Y2ggYmVsb3cKKwkJOzsKKwlzY28qKQorCQlv cz1zY28zLjJ2MgorCQk7OworCXBzb3MqKQorCQlvcz1wc29zCisJCTs7CisJcW54KikKKwkJb3M9 cW54CisJCTs7CisJaGl1eCopCisJCW9zPWhpdXh3ZTIKKwkJOzsKKwlseW54KjE3OCkKKwkJb3M9 bHlueG9zMTc4CisJCTs7CisJbHlueCo1KQorCQlvcz1seW54b3M1CisJCTs7CisJbHlueG9zKikK KwkJIyBkb24ndCBnZXQgY2F1Z2h0IHVwIGluIG5leHQgd2lsZGNhcmQKKwkJOzsKKwlseW54KikK KwkJb3M9bHlueG9zCisJCTs7CisJbWFjWzAtOV0qKQorCQlvcz0kKGVjaG8gIiRvcyIgfCBzZWQg LWUgJ3N8bWFjfG1hY29zfCcpCisJCTs7CisJb3BlbmVkKikKKwkJb3M9b3BlbmVkaXRpb24KKwkJ OzsKKwlvczQwMCopCisJCW9zPW9zNDAwCisJCTs7CisJc3Vub3M1KikKKwkJb3M9JChlY2hvICIk b3MiIHwgc2VkIC1lICdzfHN1bm9zNXxzb2xhcmlzMnwnKQorCQk7OworCXN1bm9zNiopCisJCW9z PSQoZWNobyAiJG9zIiB8IHNlZCAtZSAnc3xzdW5vczZ8c29sYXJpczN8JykKKwkJOzsKKwl3aW5j ZSopCisJCW9zPXdpbmNlCisJCTs7CisJdXRlayopCisJCW9zPWJzZAorCQk7OworCWR5bml4KikK KwkJb3M9YnNkCisJCTs7CisJYWNpcyopCisJCW9zPWFvcworCQk7OworCWF0aGVvcyopCisJCW9z PWF0aGVvcworCQk7OworCXN5bGxhYmxlKikKKwkJb3M9c3lsbGFibGUKKwkJOzsKKwkzODZic2Qp CisJCW9zPWJzZAorCQk7OworCWN0aXgqIHwgdXRzKikKKwkJb3M9c3lzdgorCQk7OworCW5vdmEq KQorCQlvcz1ydG1rLW5vdmEKKwkJOzsKKwluczIpCisJCW9zPW5leHRzdGVwMgorCQk7OworCSMg UHJlc2VydmUgdGhlIHZlcnNpb24gbnVtYmVyIG9mIHNpbml4NS4KKwlzaW5peDUuKikKKwkJb3M9 JChlY2hvICRvcyB8IHNlZCAtZSAnc3xzaW5peHxzeXN2fCcpCisJCTs7CisJc2luaXgqKQorCQlv cz1zeXN2NAorCQk7OworCXRwZiopCisJCW9zPXRwZgorCQk7OworCXRyaXRvbiopCisJCW9zPXN5 c3YzCisJCTs7CisJb3NzKikKKwkJb3M9c3lzdjMKKwkJOzsKKwlzdnI0KikKKwkJb3M9c3lzdjQK KwkJOzsKKwlzdnIzKQorCQlvcz1zeXN2MworCQk7OworCXN5c3ZyNCkKKwkJb3M9c3lzdjQKKwkJ OzsKKwlvc2UqKQorCQlvcz1vc2UKKwkJOzsKKwkqbWludCB8IG1pbnRbMC05XSogfCAqTWlOVCB8 IE1pTlRbMC05XSopCisJCW9zPW1pbnQKKwkJOzsKKwlkaWNvcyopCisJCW9zPWRpY29zCisJCTs7 CisJcGlrZW9zKikKKwkJIyBVbnRpbCByZWFsIG5lZWQgb2YgT1Mgc3BlY2lmaWMgc3VwcG9ydCBm b3IKKwkJIyBwYXJ0aWN1bGFyIGZlYXR1cmVzIGNvbWVzIHVwLCBiYXJlIG1ldGFsCisJCSMgY29u ZmlndXJhdGlvbnMgYXJlIHF1aXRlIGZ1bmN0aW9uYWwuCisJCWNhc2UgJGNwdSBpbgorCQkgICAg YXJtKikKKwkJCW9zPWVhYmkKKwkJCTs7CisJCSAgICAqKQorCQkJb3M9ZWxmCisJCQk7OworCQll c2FjCisJCTs7CisJKikKKwkJIyBObyBub3JtYWxpemF0aW9uLCBidXQgbm90IG5lY2Vzc2FyaWx5 IGFjY2VwdGVkLCB0aGF0IGNvbWVzIGJlbG93LgorCQk7OworZXNhYworCitlbHNlCisKKyMgSGVy ZSB3ZSBoYW5kbGUgdGhlIGRlZmF1bHQgb3BlcmF0aW5nIHN5c3RlbXMgdGhhdCBjb21lIHdpdGgg dmFyaW91cyBtYWNoaW5lcy4KKyMgVGhlIHZhbHVlIHNob3VsZCBiZSB3aGF0IHRoZSB2ZW5kb3Ig Y3VycmVudGx5IHNoaXBzIG91dCB0aGUgZG9vciB3aXRoIHRoZWlyCisjIG1hY2hpbmUgb3IgcHV0 IGFub3RoZXIgd2F5LCB0aGUgbW9zdCBwb3B1bGFyIG9zIHByb3ZpZGVkIHdpdGggdGhlIG1hY2hp bmUuCisKKyMgTm90ZSB0aGF0IGlmIHlvdSdyZSBnb2luZyB0byB0cnkgdG8gbWF0Y2ggIi1NQU5V RkFDVFVSRVIiIGhlcmUgKHNheSwKKyMgIi1zdW4iKSwgdGhlbiB5b3UgaGF2ZSB0byB0ZWxsIHRo ZSBjYXNlIHN0YXRlbWVudCB1cCB0b3dhcmRzIHRoZSB0b3AKKyMgdGhhdCBNQU5VRkFDVFVSRVIg aXNuJ3QgYW4gb3BlcmF0aW5nIHN5c3RlbS4gIE90aGVyd2lzZSwgY29kZSBhYm92ZQorIyB3aWxs IHNpZ25hbCBhbiBlcnJvciBzYXlpbmcgdGhhdCBNQU5VRkFDVFVSRVIgaXNuJ3QgYW4gb3BlcmF0 aW5nCisjIHN5c3RlbSwgYW5kIHdlJ2xsIG5ldmVyIGdldCB0byB0aGlzIHBvaW50LgorCitrZXJu ZWw9CitjYXNlICRjcHUtJHZlbmRvciBpbgorCXNjb3JlLSopCisJCW9zPWVsZgorCQk7OworCXNw dS0qKQorCQlvcz1lbGYKKwkJOzsKKwkqLWFjb3JuKQorCQlvcz1yaXNjaXgxLjIKKwkJOzsKKwlh cm0qLXJlYmVsKQorCQlrZXJuZWw9bGludXgKKwkJb3M9Z251CisJCTs7CisJYXJtKi1zZW1pKQor CQlvcz1hb3V0CisJCTs7CisJYzR4LSogfCB0aWM0eC0qKQorCQlvcz1jb2ZmCisJCTs7CisJYzgw NTEtKikKKwkJb3M9ZWxmCisJCTs7CisJY2xpcHBlci1pbnRlcmdyYXBoKQorCQlvcz1jbGl4CisJ CTs7CisJaGV4YWdvbi0qKQorCQlvcz1lbGYKKwkJOzsKKwl0aWM1NHgtKikKKwkJb3M9Y29mZgor CQk7OworCXRpYzU1eC0qKQorCQlvcz1jb2ZmCisJCTs7CisJdGljNngtKikKKwkJb3M9Y29mZgor CQk7OworCSMgVGhpcyBtdXN0IGNvbWUgYmVmb3JlIHRoZSAqLWRlYyBlbnRyeS4KKwlwZHAxMC0q KQorCQlvcz10b3BzMjAKKwkJOzsKKwlwZHAxMS0qKQorCQlvcz1ub25lCisJCTs7CisJKi1kZWMg fCB2YXgtKikKKwkJb3M9dWx0cml4NC4yCisJCTs7CisJbTY4Ki1hcG9sbG8pCisJCW9zPWRvbWFp bgorCQk7OworCWkzODYtc3VuKQorCQlvcz1zdW5vczQuMC4yCisJCTs7CisJbTY4MDAwLXN1bikK KwkJb3M9c3Vub3MzCisJCTs7CisJbTY4Ki1jaXNjbykKKwkJb3M9YW91dAorCQk7OworCW1lcC0q KQorCQlvcz1lbGYKKwkJOzsKKwltaXBzKi1jaXNjbykKKwkJb3M9ZWxmCisJCTs7CisJbWlwcyot KikKKwkJb3M9ZWxmCisJCTs7CisJb3IzMi0qKQorCQlvcz1jb2ZmCisJCTs7CisJKi10dGkpCSMg bXVzdCBiZSBiZWZvcmUgc3BhcmMgZW50cnkgb3Igd2UgZ2V0IHRoZSB3cm9uZyBvcy4KKwkJb3M9 c3lzdjMKKwkJOzsKKwlzcGFyYy0qIHwgKi1zdW4pCisJCW9zPXN1bm9zNC4xLjEKKwkJOzsKKwlw cnUtKikKKwkJb3M9ZWxmCisJCTs7CisJKi1iZSkKKwkJb3M9YmVvcworCQk7OworCSotaWJtKQor CQlvcz1haXgKKwkJOzsKKwkqLWtudXRoKQorCQlvcz1tbWl4d2FyZQorCQk7OworCSotd2VjKQor CQlvcz1wcm9lbGYKKwkJOzsKKwkqLXdpbmJvbmQpCisJCW9zPXByb2VsZgorCQk7OworCSotb2tp KQorCQlvcz1wcm9lbGYKKwkJOzsKKwkqLWhwKQorCQlvcz1ocHV4CisJCTs7CisJKi1oaXRhY2hp KQorCQlvcz1oaXV4CisJCTs7CisJaTg2MC0qIHwgKi1hdHQgfCAqLW5jciB8ICotYWx0b3MgfCAq LW1vdG9yb2xhIHwgKi1jb252ZXJnZW50KQorCQlvcz1zeXN2CisJCTs7CisJKi1jYm0pCisJCW9z PWFtaWdhb3MKKwkJOzsKKwkqLWRnKQorCQlvcz1kZ3V4CisJCTs7CisJKi1kb2xwaGluKQorCQlv cz1zeXN2MworCQk7OworCW02OGstY2N1cikKKwkJb3M9cnR1CisJCTs7CisJbTg4ay1vbXJvbiop CisJCW9zPWx1bmEKKwkJOzsKKwkqLW5leHQpCisJCW9zPW5leHRzdGVwCisJCTs7CisJKi1zZXF1 ZW50KQorCQlvcz1wdHgKKwkJOzsKKwkqLWNyZHMpCisJCW9zPXVub3MKKwkJOzsKKwkqLW5zKQor CQlvcz1nZW5peAorCQk7OworCWkzNzAtKikKKwkJb3M9bXZzCisJCTs7CisJKi1nb3VsZCkKKwkJ b3M9c3lzdgorCQk7OworCSotaGlnaGxldmVsKQorCQlvcz1ic2QKKwkJOzsKKwkqLWVuY29yZSkK KwkJb3M9YnNkCisJCTs7CisJKi1zZ2kpCisJCW9zPWlyaXgKKwkJOzsKKwkqLXNpZW1lbnMpCisJ CW9zPXN5c3Y0CisJCTs7CisJKi1tYXNzY29tcCkKKwkJb3M9cnR1CisJCTs7CisJZjMwWzAxXS1m dWppdHN1IHwgZjcwMC1mdWppdHN1KQorCQlvcz11eHB2CisJCTs7CisJKi1yb202OGspCisJCW9z PWNvZmYKKwkJOzsKKwkqLSpidWcpCisJCW9zPWNvZmYKKwkJOzsKKwkqLWFwcGxlKQorCQlvcz1t YWNvcworCQk7OworCSotYXRhcmkqKQorCQlvcz1taW50CisJCTs7CisJKi13cnMpCisJCW9zPXZ4 d29ya3MKKwkJOzsKKwkqKQorCQlvcz1ub25lCisJCTs7Citlc2FjCisKK2ZpCisKKyMgTm93LCB2 YWxpZGF0ZSBvdXIgKHBvdGVudGlhbGx5IGZpeGVkLXVwKSBPUy4KK2Nhc2UgJG9zIGluCisJIyBT b21ldGltZXMgd2UgZG8gImtlcm5lbC1hYmkiLCBzbyB0aG9zZSBuZWVkIHRvIGNvdW50IGFzIE9T ZXMuCisJbXVzbCogfCBuZXdsaWIqIHwgdWNsaWJjKikKKwkJOzsKKwkjIExpa2V3aXNlIGZvciAi a2VybmVsLWxpYmMiCisJZWFiaSogfCBnbnVlYWJpKikKKwkJOzsKKwkjIE5vdyBhY2NlcHQgdGhl IGJhc2ljIHN5c3RlbSB0eXBlcy4KKwkjIFRoZSBwb3J0YWJsZSBzeXN0ZW1zIGNvbWVzIGZpcnN0 LgorCSMgRWFjaCBhbHRlcm5hdGl2ZSBNVVNUIGVuZCBpbiBhICogdG8gbWF0Y2ggYSB2ZXJzaW9u IG51bWJlci4KKwlnbnUqIHwgYW5kcm9pZCogfCBic2QqIHwgbWFjaCogfCBtaW5peCogfCBnZW5p eCogfCB1bHRyaXgqIHwgaXJpeCogXAorCSAgICAgfCAqdm1zKiB8IGVzaXgqIHwgYWl4KiB8IGNu ayogfCBzdW5vcyB8IHN1bm9zWzM0XSogXAorCSAgICAgfCBocHV4KiB8IHVub3MqIHwgb3NmKiB8 IGx1bmEqIHwgZGd1eCogfCBhdXJvcmF1eCogfCBzb2xhcmlzKiBcCisJICAgICB8IHN5bSogfCAg cGxhbjkqIHwgcHNwKiB8IHNpbSogfCB4cmF5KiB8IG9zNjhrKiB8IHY4OHIqIFwKKwkgICAgIHwg aGl1eCogfCBhYnVnIHwgbmFjbCogfCBuZXR3YXJlKiB8IHdpbmRvd3MqIFwKKwkgICAgIHwgb3M5 KiB8IG1hY29zKiB8IG9zeCogfCBpb3MqIFwKKwkgICAgIHwgbXB3KiB8IG1hZ2ljKiB8IG1taXh3 YXJlKiB8IG1vbjk2MCogfCBsbmV3cyogXAorCSAgICAgfCBhbWlnYW9zKiB8IGFtaWdhZG9zKiB8 IG1zZG9zKiB8IG5ld3NvcyogfCB1bmljb3MqIHwgYW9mKiBcCisJICAgICB8IGFvcyogfCBhcm9z KiB8IGNsb3VkYWJpKiB8IHNvcnRpeCogfCB0d2l6emxlciogXAorCSAgICAgfCBuaW5keSogfCB2 eHNpbSogfCB2eHdvcmtzKiB8IGVibW9uKiB8IGhtcyogfCBtdnMqIFwKKwkgICAgIHwgY2xpeCog fCByaXNjb3MqIHwgdW5pcGx1cyogfCBpcmlzKiB8IGlzYyogfCBydHUqIHwgeGVuaXgqIFwKKwkg ICAgIHwgbWlyYnNkKiB8IG5ldGJzZCogfCBkaWNvcyogfCBvcGVuZWRpdGlvbiogfCBvc2UqIFwK KwkgICAgIHwgYml0cmlnKiB8IG9wZW5ic2QqIHwgc29saWRic2QqIHwgbGliZXJ0eWJzZCogfCBv czEwOCogXAorCSAgICAgfCBla2tvYnNkKiB8IGZyZWVic2QqIHwgcmlzY2l4KiB8IGx5bnhvcyog fCBvczQwMCogXAorCSAgICAgfCBib3N4KiB8IG5leHRzdGVwKiB8IGN4dXgqIHwgYW91dCogfCBl bGYqIHwgb2FiaSogXAorCSAgICAgfCBwdHgqIHwgY29mZiogfCBlY29mZiogfCB3aW5udCogfCBk b21haW4qIHwgdnN0YSogXAorCSAgICAgfCB1ZGkqIHwgbGl0ZXMqIHwgaWVlZSogfCBnbzMyKiB8 IGF1eCogfCBoY29zKiBcCisJICAgICB8IGNob3J1c3JkYiogfCBjZWdjYyogfCBnbGlkaXgqIFwK KwkgICAgIHwgY3lnd2luKiB8IG1zeXMqIHwgcGUqIHwgbW9zcyogfCBwcm9lbGYqIHwgcnRlbXMq IFwKKwkgICAgIHwgbWlkaXBpeCogfCBtaW5ndzMyKiB8IG1pbmd3NjQqIHwgbWludCogXAorCSAg ICAgfCB1eHB2KiB8IGJlb3MqIHwgbXBlaXgqIHwgdWRrKiB8IG1veGllYm94KiBcCisJICAgICB8 IGludGVyaXgqIHwgdXdpbiogfCBta3MqIHwgcmhhcHNvZHkqIHwgZGFyd2luKiBcCisJICAgICB8 IG9wZW5zdGVwKiB8IG9za2l0KiB8IGNvbml4KiB8IHB3MzIqIHwgbm9uc3RvcHV4KiBcCisJICAg ICB8IHN0b3JtLWNoYW9zKiB8IHRvcHMxMCogfCB0ZW5leCogfCB0b3BzMjAqIHwgaXRzKiBcCisJ ICAgICB8IG9zMiogfCB2b3MqIHwgcGFsbW9zKiB8IHVjbGludXgqIHwgbnVjbGV1cyogfCBtb3Jw aG9zKiBcCisJICAgICB8IHNjb3V0KiB8IHN1cGVydXgqIHwgc3lzdiogfCBydG1rKiB8IHRwZiog fCB3aW5kaXNzKiBcCisJICAgICB8IHBvd2VybWF4KiB8IGRuaXgqIHwgbng2IHwgbng3IHwgc2Vp KiB8IGRyYWdvbmZseSogXAorCSAgICAgfCBza3lvcyogfCBoYWlrdSogfCByZG9zKiB8IHRvcHBl cnMqIHwgZHJvcHMqIHwgZXMqIFwKKwkgICAgIHwgb25lZnMqIHwgdGlydG9zKiB8IHBob2VuaXgq IHwgZnVjaHNpYSogfCByZWRveCogfCBibWUqIFwKKwkgICAgIHwgbWlkbmlnaHRic2QqIHwgYW1k aHNhKiB8IHVubGVhc2hlZCogfCBlbXNjcmlwdGVuKiB8IHdhc2kqIFwKKwkgICAgIHwgbnNrKiB8 IHBvd2VydW5peCogfCBnZW5vZGUqIHwgenZtb2UqIHwgcW54KiB8IGVteCopCisJCTs7CisJIyBU aGlzIG9uZSBpcyBleHRyYSBzdHJpY3Qgd2l0aCBhbGxvd2VkIHZlcnNpb25zCisJc2NvMy4ydjIg fCBzY28zLjJ2WzQtOV0qIHwgc2NvNXY2KikKKwkJIyBEb24ndCBmb3JnZXQgdmVyc2lvbiBpZiBp dCBpcyAzLjJ2NCBvciBuZXdlci4KKwkJOzsKKwlub25lKQorCQk7OworCSopCisJCWVjaG8gSW52 YWxpZCBjb25maWd1cmF0aW9uIFxgIiQxIlwnOiBPUyBcYCIkb3MiXCcgbm90IHJlY29nbml6ZWQg MT4mMgorCQlleGl0IDEKKwkJOzsKK2VzYWMKKworIyBBcyBhIGZpbmFsIHN0ZXAgZm9yIE9TLXJl bGF0ZWQgdGhpbmdzLCB2YWxpZGF0ZSB0aGUgT1Mta2VybmVsIGNvbWJpbmF0aW9uCisjIChnaXZl biBhIHZhbGlkIE9TKSwgaWYgdGhlcmUgaXMgYSBrZXJuZWwuCitjYXNlICRrZXJuZWwtJG9zIGlu CisJbGludXgtZ251KiB8IGxpbnV4LWRpZXRsaWJjKiB8IGxpbnV4LWFuZHJvaWQqIHwgbGludXgt bmV3bGliKiB8IGxpbnV4LW11c2wqIHwgbGludXgtdWNsaWJjKiApCisJCTs7CisJdWNsaW51eC11 Y2xpYmMqICkKKwkJOzsKKwktZGlldGxpYmMqIHwgLW5ld2xpYiogfCAtbXVzbCogfCAtdWNsaWJj KiApCisJCSMgVGhlc2UgYXJlIGp1c3QgbGliYyBpbXBsZW1lbnRhdGlvbnMsIG5vdCBhY3R1YWwg T1NlcywgYW5kIHRodXMKKwkJIyByZXF1aXJlIGEga2VybmVsLgorCQllY2hvICJJbnZhbGlkIGNv bmZpZ3VyYXRpb24gXGAkMSc6IGxpYmMgXGAkb3MnIG5lZWRzIGV4cGxpY2l0IGtlcm5lbC4iIDE+ JjIKKwkJZXhpdCAxCisJCTs7CisJa2ZyZWVic2QqLWdudSogfCBrb3BlbnNvbGFyaXMqLWdudSop CisJCTs7CisJbnRvLXFueCopCisJCTs7CisJb3MyLWVteCkKKwkJOzsKKwkqLWVhYmkqIHwgKi1n bnVlYWJpKikKKwkJOzsKKwktKikKKwkJIyBCbGFuayBrZXJuZWwgd2l0aCByZWFsIE9TIGlzIGFs d2F5cyBmaW5lLgorCQk7OworCSotKikKKwkJZWNobyAiSW52YWxpZCBjb25maWd1cmF0aW9uIFxg JDEnOiBLZXJuZWwgXGAka2VybmVsJyBub3Qga25vd24gdG8gd29yayB3aXRoIE9TIFxgJG9zJy4i IDE+JjIKKwkJZXhpdCAxCisJCTs7Citlc2FjCisKKyMgSGVyZSB3ZSBoYW5kbGUgdGhlIGNhc2Ug d2hlcmUgd2Uga25vdyB0aGUgb3MsIGFuZCB0aGUgQ1BVIHR5cGUsIGJ1dCBub3QgdGhlCisjIG1h bnVmYWN0dXJlci4gIFdlIHBpY2sgdGhlIGxvZ2ljYWwgbWFudWZhY3R1cmVyLgorY2FzZSAkdmVu ZG9yIGluCisJdW5rbm93bikKKwkJY2FzZSAkY3B1LSRvcyBpbgorCQkJKi1yaXNjaXgqKQorCQkJ CXZlbmRvcj1hY29ybgorCQkJCTs7CisJCQkqLXN1bm9zKikKKwkJCQl2ZW5kb3I9c3VuCisJCQkJ OzsKKwkJCSotY25rKiB8ICotYWl4KikKKwkJCQl2ZW5kb3I9aWJtCisJCQkJOzsKKwkJCSotYmVv cyopCisJCQkJdmVuZG9yPWJlCisJCQkJOzsKKwkJCSotaHB1eCopCisJCQkJdmVuZG9yPWhwCisJ CQkJOzsKKwkJCSotbXBlaXgqKQorCQkJCXZlbmRvcj1ocAorCQkJCTs7CisJCQkqLWhpdXgqKQor CQkJCXZlbmRvcj1oaXRhY2hpCisJCQkJOzsKKwkJCSotdW5vcyopCisJCQkJdmVuZG9yPWNyZHMK KwkJCQk7OworCQkJKi1kZ3V4KikKKwkJCQl2ZW5kb3I9ZGcKKwkJCQk7OworCQkJKi1sdW5hKikK KwkJCQl2ZW5kb3I9b21yb24KKwkJCQk7OworCQkJKi1nZW5peCopCisJCQkJdmVuZG9yPW5zCisJ CQkJOzsKKwkJCSotY2xpeCopCisJCQkJdmVuZG9yPWludGVyZ3JhcGgKKwkJCQk7OworCQkJKi1t dnMqIHwgKi1vcGVuZWQqKQorCQkJCXZlbmRvcj1pYm0KKwkJCQk7OworCQkJKi1vczQwMCopCisJ CQkJdmVuZG9yPWlibQorCQkJCTs7CisJCQlzMzkwLSogfCBzMzkweC0qKQorCQkJCXZlbmRvcj1p Ym0KKwkJCQk7OworCQkJKi1wdHgqKQorCQkJCXZlbmRvcj1zZXF1ZW50CisJCQkJOzsKKwkJCSot dHBmKikKKwkJCQl2ZW5kb3I9aWJtCisJCQkJOzsKKwkJCSotdnhzaW0qIHwgKi12eHdvcmtzKiB8 ICotd2luZGlzcyopCisJCQkJdmVuZG9yPXdycworCQkJCTs7CisJCQkqLWF1eCopCisJCQkJdmVu ZG9yPWFwcGxlCisJCQkJOzsKKwkJCSotaG1zKikKKwkJCQl2ZW5kb3I9aGl0YWNoaQorCQkJCTs7 CisJCQkqLW1wdyogfCAqLW1hY29zKikKKwkJCQl2ZW5kb3I9YXBwbGUKKwkJCQk7OworCQkJKi0q bWludCB8ICotbWludFswLTldKiB8ICotKk1pTlQgfCAqLU1pTlRbMC05XSopCisJCQkJdmVuZG9y PWF0YXJpCisJCQkJOzsKKwkJCSotdm9zKikKKwkJCQl2ZW5kb3I9c3RyYXR1cworCQkJCTs7CisJ CWVzYWMKKwkJOzsKK2VzYWMKKworZWNobyAiJGNwdS0kdmVuZG9yLSR7a2VybmVsOiska2VybmVs LX0kb3MiCitleGl0CisKKyMgTG9jYWwgdmFyaWFibGVzOgorIyBldmFsOiAoYWRkLWhvb2sgJ2Jl Zm9yZS1zYXZlLWhvb2sgJ3RpbWUtc3RhbXApCisjIHRpbWUtc3RhbXAtc3RhcnQ6ICJ0aW1lc3Rh bXA9JyIKKyMgdGltZS1zdGFtcC1mb3JtYXQ6ICIlOnktJTAybS0lMDJkIgorIyB0aW1lLXN0YW1w LWVuZDogIiciCisjIEVuZDoKCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9q ZW1hbGxvYy01LjMuMC9idWlsZC1hdXgvaW5zdGFsbC1zaCBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1 aWxkL2plbWFsbG9jLTUuMy4wL2J1aWxkLWF1eC9pbnN0YWxsLXNoCm5ldyBmaWxlIG1vZGUgMTAw NzU1CmluZGV4IDAwMDAwMDAuLmViYzY2OTEKLS0tIC9kZXYvbnVsbAorKysgYi8zODktZHMtYmFz ZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9idWlsZC1hdXgvaW5zdGFsbC1zaApAQCAtMCww ICsxLDI1MCBAQAorIyEgL2Jpbi9zaAorIworIyBpbnN0YWxsIC0gaW5zdGFsbCBhIHByb2dyYW0s IHNjcmlwdCwgb3IgZGF0YWZpbGUKKyMgVGhpcyBjb21lcyBmcm9tIFgxMVI1IChtaXQvdXRpbC9z Y3JpcHRzL2luc3RhbGwuc2gpLgorIworIyBDb3B5cmlnaHQgMTk5MSBieSB0aGUgTWFzc2FjaHVz ZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neQorIworIyBQZXJtaXNzaW9uIHRvIHVzZSwgY29w eSwgbW9kaWZ5LCBkaXN0cmlidXRlLCBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlIGFuZCBpdHMKKyMg ZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBm ZWUsIHByb3ZpZGVkIHRoYXQKKyMgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGlu IGFsbCBjb3BpZXMgYW5kIHRoYXQgYm90aCB0aGF0CisjIGNvcHlyaWdodCBub3RpY2UgYW5kIHRo aXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcKKyMgZG9jdW1lbnRhdGlv biwgYW5kIHRoYXQgdGhlIG5hbWUgb2YgTS5JLlQuIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5n IG9yCisjIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdh cmUgd2l0aG91dCBzcGVjaWZpYywKKyMgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLiAgTS5JLlQu IG1ha2VzIG5vIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUKKyMgc3VpdGFiaWxpdHkgb2YgdGhp cyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiCisjIHdp dGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorIworIyBDYWxsaW5nIHRoaXMgc2Ny aXB0IGluc3RhbGwtc2ggaXMgcHJlZmVycmVkIG92ZXIgaW5zdGFsbC5zaCwgdG8gcHJldmVudAor IyBgbWFrZScgaW1wbGljaXQgcnVsZXMgZnJvbSBjcmVhdGluZyBhIGZpbGUgY2FsbGVkIGluc3Rh bGwgZnJvbSBpdAorIyB3aGVuIHRoZXJlIGlzIG5vIE1ha2VmaWxlLgorIworIyBUaGlzIHNjcmlw dCBpcyBjb21wYXRpYmxlIHdpdGggdGhlIEJTRCBpbnN0YWxsIHNjcmlwdCwgYnV0IHdhcyB3cml0 dGVuCisjIGZyb20gc2NyYXRjaC4gIEl0IGNhbiBvbmx5IGluc3RhbGwgb25lIGZpbGUgYXQgYSB0 aW1lLCBhIHJlc3RyaWN0aW9uCisjIHNoYXJlZCB3aXRoIG1hbnkgT1MncyBpbnN0YWxsIHByb2dy YW1zLgorCisKKyMgc2V0IERPSVRQUk9HIHRvIGVjaG8gdG8gdGVzdCB0aGlzIHNjcmlwdAorCisj IERvbid0IHVzZSA6LSBzaW5jZSA0LjNCU0QgYW5kIGVhcmxpZXIgc2hlbGxzIGRvbid0IGxpa2Ug aXQuCitkb2l0PSIke0RPSVRQUk9HLX0iCisKKworIyBwdXQgaW4gYWJzb2x1dGUgcGF0aHMgaWYg eW91IGRvbid0IGhhdmUgdGhlbSBpbiB5b3VyIHBhdGg7IG9yIHVzZSBlbnYuIHZhcnMuCisKK212 cHJvZz0iJHtNVlBST0ctbXZ9IgorY3Bwcm9nPSIke0NQUFJPRy1jcH0iCitjaG1vZHByb2c9IiR7 Q0hNT0RQUk9HLWNobW9kfSIKK2Nob3ducHJvZz0iJHtDSE9XTlBST0ctY2hvd259IgorY2hncnBw cm9nPSIke0NIR1JQUFJPRy1jaGdycH0iCitzdHJpcHByb2c9IiR7U1RSSVBQUk9HLXN0cmlwfSIK K3JtcHJvZz0iJHtSTVBST0ctcm19IgorbWtkaXJwcm9nPSIke01LRElSUFJPRy1ta2Rpcn0iCisK K3RyYW5zZm9ybWJhc2VuYW1lPSIiCit0cmFuc2Zvcm1fYXJnPSIiCitpbnN0Y21kPSIkbXZwcm9n IgorY2htb2RjbWQ9IiRjaG1vZHByb2cgMDc1NSIKK2Nob3duY21kPSIiCitjaGdycGNtZD0iIgor c3RyaXBjbWQ9IiIKK3JtY21kPSIkcm1wcm9nIC1mIgorbXZjbWQ9IiRtdnByb2ciCitzcmM9IiIK K2RzdD0iIgorZGlyX2FyZz0iIgorCit3aGlsZSBbIHgiJDEiICE9IHggXTsgZG8KKyAgICBjYXNl ICQxIGluCisJLWMpIGluc3RjbWQ9IiRjcHByb2ciCisJICAgIHNoaWZ0CisJICAgIGNvbnRpbnVl OzsKKworCS1kKSBkaXJfYXJnPXRydWUKKwkgICAgc2hpZnQKKwkgICAgY29udGludWU7OworCisJ LW0pIGNobW9kY21kPSIkY2htb2Rwcm9nICQyIgorCSAgICBzaGlmdAorCSAgICBzaGlmdAorCSAg ICBjb250aW51ZTs7CisKKwktbykgY2hvd25jbWQ9IiRjaG93bnByb2cgJDIiCisJICAgIHNoaWZ0 CisJICAgIHNoaWZ0CisJICAgIGNvbnRpbnVlOzsKKworCS1nKSBjaGdycGNtZD0iJGNoZ3JwcHJv ZyAkMiIKKwkgICAgc2hpZnQKKwkgICAgc2hpZnQKKwkgICAgY29udGludWU7OworCisJLXMpIHN0 cmlwY21kPSIkc3RyaXBwcm9nIgorCSAgICBzaGlmdAorCSAgICBjb250aW51ZTs7CisKKwktdD0q KSB0cmFuc2Zvcm1hcmc9YGVjaG8gJDEgfCBzZWQgJ3MvLXQ9Ly8nYAorCSAgICBzaGlmdAorCSAg ICBjb250aW51ZTs7CisKKwktYj0qKSB0cmFuc2Zvcm1iYXNlbmFtZT1gZWNobyAkMSB8IHNlZCAn cy8tYj0vLydgCisJICAgIHNoaWZ0CisJICAgIGNvbnRpbnVlOzsKKworCSopICBpZiBbIHgiJHNy YyIgPSB4IF0KKwkgICAgdGhlbgorCQlzcmM9JDEKKwkgICAgZWxzZQorCQkjIHRoaXMgY29sb24g aXMgdG8gd29yayBhcm91bmQgYSAzODZCU0QgL2Jpbi9zaCBidWcKKwkJOgorCQlkc3Q9JDEKKwkg ICAgZmkKKwkgICAgc2hpZnQKKwkgICAgY29udGludWU7OworICAgIGVzYWMKK2RvbmUKKworaWYg WyB4IiRzcmMiID0geCBdCit0aGVuCisJZWNobyAiaW5zdGFsbDoJbm8gaW5wdXQgZmlsZSBzcGVj aWZpZWQiCisJZXhpdCAxCitlbHNlCisJdHJ1ZQorZmkKKworaWYgWyB4IiRkaXJfYXJnIiAhPSB4 IF07IHRoZW4KKwlkc3Q9JHNyYworCXNyYz0iIgorCQorCWlmIFsgLWQgJGRzdCBdOyB0aGVuCisJ CWluc3RjbWQ9OgorCWVsc2UKKwkJaW5zdGNtZD1ta2RpcgorCWZpCitlbHNlCisKKyMgV2FpdGlu ZyBmb3IgdGhpcyB0byBiZSBkZXRlY3RlZCBieSB0aGUgIiRpbnN0Y21kICRzcmMgJGRzdHRtcCIg Y29tbWFuZAorIyBtaWdodCBjYXVzZSBkaXJlY3RvcmllcyB0byBiZSBjcmVhdGVkLCB3aGljaCB3 b3VsZCBiZSBlc3BlY2lhbGx5IGJhZCAKKyMgaWYgJHNyYyAoYW5kIHRodXMgJGRzdHRtcCkgY29u dGFpbnMgJyonLgorCisJaWYgWyAtZiAkc3JjIC1vIC1kICRzcmMgXQorCXRoZW4KKwkJdHJ1ZQor CWVsc2UKKwkJZWNobyAiaW5zdGFsbDogICRzcmMgZG9lcyBub3QgZXhpc3QiCisJCWV4aXQgMQor CWZpCisJCisJaWYgWyB4IiRkc3QiID0geCBdCisJdGhlbgorCQllY2hvICJpbnN0YWxsOglubyBk ZXN0aW5hdGlvbiBzcGVjaWZpZWQiCisJCWV4aXQgMQorCWVsc2UKKwkJdHJ1ZQorCWZpCisKKyMg SWYgZGVzdGluYXRpb24gaXMgYSBkaXJlY3RvcnksIGFwcGVuZCB0aGUgaW5wdXQgZmlsZW5hbWU7 IGlmIHlvdXIgc3lzdGVtCisjIGRvZXMgbm90IGxpa2UgZG91YmxlIHNsYXNoZXMgaW4gZmlsZW5h bWVzLCB5b3UgbWF5IG5lZWQgdG8gYWRkIHNvbWUgbG9naWMKKworCWlmIFsgLWQgJGRzdCBdCisJ dGhlbgorCQlkc3Q9IiRkc3QiL2BiYXNlbmFtZSAkc3JjYAorCWVsc2UKKwkJdHJ1ZQorCWZpCitm aQorCisjIyB0aGlzIHNlZCBjb21tYW5kIGVtdWxhdGVzIHRoZSBkaXJuYW1lIGNvbW1hbmQKK2Rz dGRpcj1gZWNobyAkZHN0IHwgc2VkIC1lICdzLFteL10qJCwsO3MsLyQsLDtzLF4kLC4sJ2AKKwor IyBNYWtlIHN1cmUgdGhhdCB0aGUgZGVzdGluYXRpb24gZGlyZWN0b3J5IGV4aXN0cy4KKyMgIHRo aXMgcGFydCBpcyB0YWtlbiBmcm9tIE5vYWggRnJpZWRtYW4ncyBta2luc3RhbGxkaXJzIHNjcmlw dAorCisjIFNraXAgbG90cyBvZiBzdGF0IGNhbGxzIGluIHRoZSB1c3VhbCBjYXNlLgoraWYgWyAh IC1kICIkZHN0ZGlyIiBdOyB0aGVuCitkZWZhdWx0SUZTPScJCisnCitJRlM9IiR7SUZTLSR7ZGVm YXVsdElGU319IgorCitvSUZTPSIke0lGU30iCisjIFNvbWUgc2gncyBjYW4ndCBoYW5kbGUgSUZT PS8gZm9yIHNvbWUgcmVhc29uLgorSUZTPSclJworc2V0IC0gYGVjaG8gJHtkc3RkaXJ9IHwgc2Vk IC1lICdzQC9AJUBnJyAtZSAnc0BeJUAvQCdgCitJRlM9IiR7b0lGU30iCisKK3BhdGhjb21wPScn CisKK3doaWxlIFsgJCMgLW5lIDAgXSA7IGRvCisJcGF0aGNvbXA9IiR7cGF0aGNvbXB9JHsxfSIK KwlzaGlmdAorCisJaWYgWyAhIC1kICIke3BhdGhjb21wfSIgXSA7CisgICAgICAgIHRoZW4KKwkJ JG1rZGlycHJvZyAiJHtwYXRoY29tcH0iCisJZWxzZQorCQl0cnVlCisJZmkKKworCXBhdGhjb21w PSIke3BhdGhjb21wfS8iCitkb25lCitmaQorCitpZiBbIHgiJGRpcl9hcmciICE9IHggXQordGhl bgorCSRkb2l0ICRpbnN0Y21kICRkc3QgJiYKKworCWlmIFsgeCIkY2hvd25jbWQiICE9IHggXTsg dGhlbiAkZG9pdCAkY2hvd25jbWQgJGRzdDsgZWxzZSB0cnVlIDsgZmkgJiYKKwlpZiBbIHgiJGNo Z3JwY21kIiAhPSB4IF07IHRoZW4gJGRvaXQgJGNoZ3JwY21kICRkc3Q7IGVsc2UgdHJ1ZSA7IGZp ICYmCisJaWYgWyB4IiRzdHJpcGNtZCIgIT0geCBdOyB0aGVuICRkb2l0ICRzdHJpcGNtZCAkZHN0 OyBlbHNlIHRydWUgOyBmaSAmJgorCWlmIFsgeCIkY2htb2RjbWQiICE9IHggXTsgdGhlbiAkZG9p dCAkY2htb2RjbWQgJGRzdDsgZWxzZSB0cnVlIDsgZmkKK2Vsc2UKKworIyBJZiB3ZSdyZSBnb2lu ZyB0byByZW5hbWUgdGhlIGZpbmFsIGV4ZWN1dGFibGUsIGRldGVybWluZSB0aGUgbmFtZSBub3cu CisKKwlpZiBbIHgiJHRyYW5zZm9ybWFyZyIgPSB4IF0gCisJdGhlbgorCQlkc3RmaWxlPWBiYXNl bmFtZSAkZHN0YAorCWVsc2UKKwkJZHN0ZmlsZT1gYmFzZW5hbWUgJGRzdCAkdHJhbnNmb3JtYmFz ZW5hbWUgfCAKKwkJCXNlZCAkdHJhbnNmb3JtYXJnYCR0cmFuc2Zvcm1iYXNlbmFtZQorCWZpCisK KyMgZG9uJ3QgYWxsb3cgdGhlIHNlZCBjb21tYW5kIHRvIGNvbXBsZXRlbHkgZWxpbWluYXRlIHRo ZSBmaWxlbmFtZQorCisJaWYgWyB4IiRkc3RmaWxlIiA9IHggXSAKKwl0aGVuCisJCWRzdGZpbGU9 YGJhc2VuYW1lICRkc3RgCisJZWxzZQorCQl0cnVlCisJZmkKKworIyBNYWtlIGEgdGVtcCBmaWxl IG5hbWUgaW4gdGhlIHByb3BlciBkaXJlY3RvcnkuCisKKwlkc3R0bXA9JGRzdGRpci8jaW5zdC4k JCMKKworIyBNb3ZlIG9yIGNvcHkgdGhlIGZpbGUgbmFtZSB0byB0aGUgdGVtcCBuYW1lCisKKwkk ZG9pdCAkaW5zdGNtZCAkc3JjICRkc3R0bXAgJiYKKworCXRyYXAgInJtIC1mICR7ZHN0dG1wfSIg MCAmJgorCisjIGFuZCBzZXQgYW55IG9wdGlvbnM7IGRvIGNobW9kIGxhc3QgdG8gcHJlc2VydmUg c2V0dWlkIGJpdHMKKworIyBJZiBhbnkgb2YgdGhlc2UgZmFpbCwgd2UgYWJvcnQgdGhlIHdob2xl IHRoaW5nLiAgSWYgd2Ugd2FudCB0bworIyBpZ25vcmUgZXJyb3JzIGZyb20gYW55IG9mIHRoZXNl LCBqdXN0IG1ha2Ugc3VyZSBub3QgdG8gaWdub3JlCisjIGVycm9ycyBmcm9tIHRoZSBhYm92ZSAi JGRvaXQgJGluc3RjbWQgJHNyYyAkZHN0dG1wIiBjb21tYW5kLgorCisJaWYgWyB4IiRjaG93bmNt ZCIgIT0geCBdOyB0aGVuICRkb2l0ICRjaG93bmNtZCAkZHN0dG1wOyBlbHNlIHRydWU7ZmkgJiYK KwlpZiBbIHgiJGNoZ3JwY21kIiAhPSB4IF07IHRoZW4gJGRvaXQgJGNoZ3JwY21kICRkc3R0bXA7 IGVsc2UgdHJ1ZTtmaSAmJgorCWlmIFsgeCIkc3RyaXBjbWQiICE9IHggXTsgdGhlbiAkZG9pdCAk c3RyaXBjbWQgJGRzdHRtcDsgZWxzZSB0cnVlO2ZpICYmCisJaWYgWyB4IiRjaG1vZGNtZCIgIT0g eCBdOyB0aGVuICRkb2l0ICRjaG1vZGNtZCAkZHN0dG1wOyBlbHNlIHRydWU7ZmkgJiYKKworIyBO b3cgcmVuYW1lIHRoZSBmaWxlIHRvIHRoZSByZWFsIGRlc3RpbmF0aW9uLgorCisJJGRvaXQgJHJt Y21kIC1mICRkc3RkaXIvJGRzdGZpbGUgJiYKKwkkZG9pdCAkbXZjbWQgJGRzdHRtcCAkZHN0ZGly LyRkc3RmaWxlIAorCitmaSAmJgorCisKK2V4aXQgMAoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNl LTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2NvbmZpZy5zdGFtcC5pbiBiLzM4OS1kcy1iYXNl LTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2NvbmZpZy5zdGFtcC5pbgpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvMzg5LWRz LWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvY29uZmlnLnN0YW1wLmluCgpkaWZmIC0t Z2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvY29uZmlndXJlLmFj IGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvY29uZmlndXJlLmFjCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2ZDI1ZjMKLS0tIC9kZXYvbnVsbAor KysgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9jb25maWd1cmUuYWMK QEAgLTAsMCArMSwyNjY5IEBACitkbmwgUHJvY2VzcyB0aGlzIGZpbGUgd2l0aCBhdXRvY29uZiB0 byBwcm9kdWNlIGEgY29uZmlndXJlIHNjcmlwdC4KK0FDX1BSRVJFUSgyLjY4KQorQUNfSU5JVChb TWFrZWZpbGUuaW5dKQorCitBQ19DT05GSUdfQVVYX0RJUihbYnVpbGQtYXV4XSkKKworZG5sID09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KK2RubCBDdXN0b20gbWFjcm8gZGVmaW5pdGlvbnMuCisKK2RubCBK RV9DT05DQVRfVlZWKHIsIGEsIGIpCitkbmwKK2RubCBTZXQgJHIgdG8gdGhlIGNvbmNhdGVuYXRp b24gb2YgJGEgYW5kICRiLCB3aXRoIGEgc3BhY2Ugc2VwYXJhdGluZyB0aGVtIGlmZgorZG5sIGJv dGggJGEgYW5kICRiIGFyZSBub24tZW1wdHkuCitBQ19ERUZVTihbSkVfQ09OQ0FUX1ZWVl0sCitp ZiB0ZXN0ICJ4WyRdeyQyfSIgPSAieCIgLW8gInhbJF17JDN9IiA9ICJ4IiA7IHRoZW4KKyAgJDE9 IlskXXskMn1bJF17JDN9IgorZWxzZQorICAkMT0iWyRdeyQyfSBbJF17JDN9IgorZmkKKykKKwor ZG5sIEpFX0FQUEVORF9WUyhhLCBiKQorZG5sCitkbmwgU2V0ICRhIHRvIHRoZSBjb25jYXRlbmF0 aW9uIG9mICRhIGFuZCBiLCB3aXRoIGEgc3BhY2Ugc2VwYXJhdGluZyB0aGVtIGlmZgorZG5sIGJv dGggJGEgYW5kIGIgYXJlIG5vbi1lbXB0eS4KK0FDX0RFRlVOKFtKRV9BUFBFTkRfVlNdLAorICBU X0FQUEVORF9WPSQyCisgIEpFX0NPTkNBVF9WVlYoJDEsICQxLCBUX0FQUEVORF9WKQorKQorCitD T05GSUdVUkVfQ0ZMQUdTPQorU1BFQ0lGSUVEX0NGTEFHUz0iJHtDRkxBR1N9IgorZG5sIEpFX0NG TEFHU19BREQoY2ZsYWcpCitkbmwKK2RubCBDRkxBR1MgaXMgdGhlIGNvbmNhdGVuYXRpb24gb2Yg Q09ORklHVVJFX0NGTEFHUyBhbmQgU1BFQ0lGSUVEX0NGTEFHUworZG5sIChpZ25vcmluZyBFWFRS QV9DRkxBR1MsIHdoaWNoIGRvZXMgbm90IGltcGFjdCBjb25maWd1cmUgdGVzdHMuICBUaGlzIG1h Y3JvCitkbmwgYXBwZW5kcyB0byBDT05GSUdVUkVfQ0ZMQUdTIGFuZCByZWdlbmVyYXRlcyBDRkxB R1MuCitBQ19ERUZVTihbSkVfQ0ZMQUdTX0FERF0sCitbCitBQ19NU0dfQ0hFQ0tJTkcoW3doZXRo ZXIgY29tcGlsZXIgc3VwcG9ydHMgJDFdKQorVF9DT05GSUdVUkVfQ0ZMQUdTPSIke0NPTkZJR1VS RV9DRkxBR1N9IgorSkVfQVBQRU5EX1ZTKENPTkZJR1VSRV9DRkxBR1MsICQxKQorSkVfQ09OQ0FU X1ZWVihDRkxBR1MsIENPTkZJR1VSRV9DRkxBR1MsIFNQRUNJRklFRF9DRkxBR1MpCitBQ19DT01Q SUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKAorW1sKK11dLCBbWworICAgIHJldHVybiAwOwor XV0pXSwKKyAgICAgICAgICAgICAgW2plX2N2X2NmbGFnc19hZGRlZD0kMV0KKyAgICAgICAgICAg ICAgQUNfTVNHX1JFU1VMVChbeWVzXSksCisgICAgICAgICAgICAgIFtqZV9jdl9jZmxhZ3NfYWRk ZWQ9XQorICAgICAgICAgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICAgICAgICAgIFtD T05GSUdVUkVfQ0ZMQUdTPSIke1RfQ09ORklHVVJFX0NGTEFHU30iXQorKQorSkVfQ09OQ0FUX1ZW VihDRkxBR1MsIENPTkZJR1VSRV9DRkxBR1MsIFNQRUNJRklFRF9DRkxBR1MpCitdKQorCitkbmwg SkVfQ0ZMQUdTX1NBVkUoKQorZG5sIEpFX0NGTEFHU19SRVNUT1JFKCkKK2RubAorZG5sIFNhdmUv cmVzdG9yZSBDRkxBR1MuICBOZXN0aW5nIGlzIG5vdCBzdXBwb3J0ZWQuCitBQ19ERUZVTihbSkVf Q0ZMQUdTX1NBVkVdLAorU0FWRURfQ09ORklHVVJFX0NGTEFHUz0iJHtDT05GSUdVUkVfQ0ZMQUdT fSIKKykKK0FDX0RFRlVOKFtKRV9DRkxBR1NfUkVTVE9SRV0sCitDT05GSUdVUkVfQ0ZMQUdTPSIk e1NBVkVEX0NPTkZJR1VSRV9DRkxBR1N9IgorSkVfQ09OQ0FUX1ZWVihDRkxBR1MsIENPTkZJR1VS RV9DRkxBR1MsIFNQRUNJRklFRF9DRkxBR1MpCispCisKK0NPTkZJR1VSRV9DWFhGTEFHUz0KK1NQ RUNJRklFRF9DWFhGTEFHUz0iJHtDWFhGTEFHU30iCitkbmwgSkVfQ1hYRkxBR1NfQUREKGN4eGZs YWcpCitBQ19ERUZVTihbSkVfQ1hYRkxBR1NfQUREXSwKK1sKK0FDX01TR19DSEVDS0lORyhbd2hl dGhlciBjb21waWxlciBzdXBwb3J0cyAkMV0pCitUX0NPTkZJR1VSRV9DWFhGTEFHUz0iJHtDT05G SUdVUkVfQ1hYRkxBR1N9IgorSkVfQVBQRU5EX1ZTKENPTkZJR1VSRV9DWFhGTEFHUywgJDEpCitK RV9DT05DQVRfVlZWKENYWEZMQUdTLCBDT05GSUdVUkVfQ1hYRkxBR1MsIFNQRUNJRklFRF9DWFhG TEFHUykKK0FDX0xBTkdfUFVTSChbQysrXSkKK0FDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BS T0dSQU0oCitbWworXV0sIFtbCisgICAgcmV0dXJuIDA7CitdXSldLAorICAgICAgICAgICAgICBb amVfY3ZfY3h4ZmxhZ3NfYWRkZWQ9JDFdCisgICAgICAgICAgICAgIEFDX01TR19SRVNVTFQoW3ll c10pLAorICAgICAgICAgICAgICBbamVfY3ZfY3h4ZmxhZ3NfYWRkZWQ9XQorICAgICAgICAgICAg ICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICAgICAgICAgIFtDT05GSUdVUkVfQ1hYRkxBR1M9 IiR7VF9DT05GSUdVUkVfQ1hYRkxBR1N9Il0KKykKK0FDX0xBTkdfUE9QKFtDKytdKQorSkVfQ09O Q0FUX1ZWVihDWFhGTEFHUywgQ09ORklHVVJFX0NYWEZMQUdTLCBTUEVDSUZJRURfQ1hYRkxBR1Mp CitdKQorCitkbmwgSkVfQ09NUElMQUJMRShsYWJlbCwgaGNvZGUsIG1jb2RlLCBydmFyKQorZG5s CitkbmwgVXNlIEFDX0xJTktfSUZFTFNFKCkgcmF0aGVyIHRoYW4gQUNfQ09NUElMRV9JRkVMU0Uo KSBzbyB0aGF0IGxpbmtlciBlcnJvcnMKK2RubCBjYXVzZSBmYWlsdXJlLgorQUNfREVGVU4oW0pF X0NPTVBJTEFCTEVdLAorWworQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgJDEgaXMgY29tcGlsYWJs ZV0sCisgICAgICAgICAgICAgICBbJDRdLAorICAgICAgICAgICAgICAgW0FDX0xJTktfSUZFTFNF KFtBQ19MQU5HX1BST0dSQU0oWyQyXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFskM10pXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBb JDQ9eWVzXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJDQ9bm9dKV0pCitdKQor CitkbmwgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQorCitDT05GSUc9YGVjaG8gJHthY19jb25maWd1cmVf YXJnc30gfCBzZWQgLWUgJ3MjJyInIidcKFteIF0qXCknIiciJyNcMSNnJ2AKK0FDX1NVQlNUKFtD T05GSUddKQorCitkbmwgTGlicmFyeSByZXZpc2lvbi4KK3Jldj0yCitBQ19TVUJTVChbcmV2XSkK Kworc3Jjcm9vdD0kc3JjZGlyCitpZiB0ZXN0ICJ4JHtzcmNyb290fSIgPSAieC4iIDsgdGhlbgor ICBzcmNyb290PSIiCitlbHNlCisgIHNyY3Jvb3Q9IiR7c3Jjcm9vdH0vIgorZmkKK0FDX1NVQlNU KFtzcmNyb290XSkKK2Fic19zcmNyb290PSJgY2QgXCIke3NyY2Rpcn1cIjsgcHdkYC8iCitBQ19T VUJTVChbYWJzX3NyY3Jvb3RdKQorCitvYmpyb290PSIiCitBQ19TVUJTVChbb2Jqcm9vdF0pCith YnNfb2Jqcm9vdD0iYHB3ZGAvIgorQUNfU1VCU1QoW2Fic19vYmpyb290XSkKKworZG5sIE11bmdl IGluc3RhbGwgcGF0aCB2YXJpYWJsZXMuCitjYXNlICIkcHJlZml4IiBpbgorICAgKlwgKiApIEFD X01TR19FUlJPUihbUHJlZml4IHNob3VsZCBub3QgY29udGFpbiBzcGFjZXNdKSA7OworICAgIk5P TkUiICkgcHJlZml4PSIvdXNyL2xvY2FsIiA7OworZXNhYworY2FzZSAiJGV4ZWNfcHJlZml4IiBp bgorICAgKlwgKiApIEFDX01TR19FUlJPUihbRXhlYyBwcmVmaXggc2hvdWxkIG5vdCBjb250YWlu IHNwYWNlc10pIDs7CisgICAiTk9ORSIgKSBleGVjX3ByZWZpeD0kcHJlZml4IDs7Citlc2FjCitQ UkVGSVg9JHByZWZpeAorQUNfU1VCU1QoW1BSRUZJWF0pCitCSU5ESVI9YGV2YWwgZWNobyAkYmlu ZGlyYAorQklORElSPWBldmFsIGVjaG8gJEJJTkRJUmAKK0FDX1NVQlNUKFtCSU5ESVJdKQorSU5D TFVERURJUj1gZXZhbCBlY2hvICRpbmNsdWRlZGlyYAorSU5DTFVERURJUj1gZXZhbCBlY2hvICRJ TkNMVURFRElSYAorQUNfU1VCU1QoW0lOQ0xVREVESVJdKQorTElCRElSPWBldmFsIGVjaG8gJGxp YmRpcmAKK0xJQkRJUj1gZXZhbCBlY2hvICRMSUJESVJgCitBQ19TVUJTVChbTElCRElSXSkKK0RB VEFESVI9YGV2YWwgZWNobyAkZGF0YWRpcmAKK0RBVEFESVI9YGV2YWwgZWNobyAkREFUQURJUmAK K0FDX1NVQlNUKFtEQVRBRElSXSkKK01BTkRJUj1gZXZhbCBlY2hvICRtYW5kaXJgCitNQU5ESVI9 YGV2YWwgZWNobyAkTUFORElSYAorQUNfU1VCU1QoW01BTkRJUl0pCisKK2RubCBTdXBwb3J0IGZv ciBidWlsZGluZyBkb2N1bWVudGF0aW9uLgorQUNfUEFUSF9QUk9HKFtYU0xUUFJPQ10sIFt4c2x0 cHJvY10sIFtmYWxzZV0sIFskUEFUSF0pCitpZiB0ZXN0IC1kICIvdXNyL3NoYXJlL3htbC9kb2Ni b29rL3N0eWxlc2hlZXQvZG9jYm9vay14c2wiIDsgdGhlbgorICBERUZBVUxUX1hTTFJPT1Q9Ii91 c3Ivc2hhcmUveG1sL2RvY2Jvb2svc3R5bGVzaGVldC9kb2Nib29rLXhzbCIKK2VsaWYgdGVzdCAt ZCAiL3Vzci9zaGFyZS9zZ21sL2RvY2Jvb2sveHNsLXN0eWxlc2hlZXRzIiA7IHRoZW4KKyAgREVG QVVMVF9YU0xST09UPSIvdXNyL3NoYXJlL3NnbWwvZG9jYm9vay94c2wtc3R5bGVzaGVldHMiCitl bHNlCisgIGRubCBEb2N1bWVudGF0aW9uIGJ1aWxkaW5nIHdpbGwgZmFpbCBpZiB0aGlzIGRlZmF1 bHQgZ2V0cyB1c2VkLgorICBERUZBVUxUX1hTTFJPT1Q9IiIKK2ZpCitBQ19BUkdfV0lUSChbeHNs cm9vdF0sCisgIFtBU19IRUxQX1NUUklORyhbLS13aXRoLXhzbHJvb3Q9PHBhdGg+XSwgW1hTTCBz dHlsZXNoZWV0IHJvb3QgcGF0aF0pXSwgWworaWYgdGVzdCAieCR3aXRoX3hzbHJvb3QiID0gInhu byIgOyB0aGVuCisgIFhTTFJPT1Q9IiR7REVGQVVMVF9YU0xST09UfSIKK2Vsc2UKKyAgWFNMUk9P VD0iJHt3aXRoX3hzbHJvb3R9IgorZmkKK10sCisgIFhTTFJPT1Q9IiR7REVGQVVMVF9YU0xST09U fSIKKykKK2lmIHRlc3QgIngkWFNMVFBST0MiID0gInhmYWxzZSIgOyB0aGVuCisgIFhTTFJPT1Q9 IiIKK2ZpCitBQ19TVUJTVChbWFNMUk9PVF0pCisKK2RubCBJZiBDRkxBR1MgaXNuJ3QgZGVmaW5l ZCwgc2V0IENGTEFHUyB0byBzb21ldGhpbmcgcmVhc29uYWJsZS4gIE90aGVyd2lzZSwKK2RubCBq dXN0IHByZXZlbnQgYXV0b2NvbmYgZnJvbSBtb2xlc3RpbmcgQ0ZMQUdTLgorQ0ZMQUdTPSRDRkxB R1MKK0FDX1BST0dfQ0MKKworaWYgdGVzdCAieCRHQ0MiICE9ICJ4eWVzIiA7IHRoZW4KKyAgQUNf Q0FDSEVfQ0hFQ0soW3doZXRoZXIgY29tcGlsZXIgaXMgTVNWQ10sCisgICAgICAgICAgICAgICAg IFtqZV9jdl9tc3ZjXSwKKyAgICAgICAgICAgICAgICAgW0FDX0NPTVBJTEVfSUZFTFNFKFtBQ19M QU5HX1BST0dSQU0oW10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFsKKyNpZm5kZWYgX01TQ19WRVIKKyAgaW50IGZhaWxbLTFdOworI2VuZGlm CitdKV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2plX2N2X21zdmM9eWVzXSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbamVfY3ZfbXN2Yz1ub10pXSkKK2ZpCisK K2RubCBjaGVjayBpZiBhIGNyYXkgcHJnZW52IHdyYXBwZXIgY29tcGlsZXIgaXMgYmVpbmcgdXNl ZAoramVfY3ZfY3JheV9wcmdlbnZfd3JhcHBlcj0iIgoraWYgdGVzdCAieCR7UEVfRU5WfSIgIT0g IngiIDsgdGhlbgorICBjYXNlICIke0NDfSIgaW4KKyAgICBDQ3xjYykKKwlqZV9jdl9jcmF5X3By Z2Vudl93cmFwcGVyPSJ5ZXMiCisJOzsKKyAgICAqKQorICAgICAgIDs7CisgIGVzYWMKK2ZpCisK K0FDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIGNvbXBpbGVyIGlzIGNyYXldLAorICAgICAgICAgICAg ICBbamVfY3ZfY3JheV0sCisgICAgICAgICAgICAgIFtBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFO R19QUk9HUkFNKFtdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBbCisjaWZuZGVmIF9DUkFZQworICBpbnQgZmFpbFstMV07CisjZW5kaWYKK10pXSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbamVfY3ZfY3JheT15ZXNdLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFtqZV9jdl9jcmF5PW5vXSldKQorCitpZiB0ZXN0ICJ4JHtqZV9j dl9jcmF5fSIgPSAieHllcyIgOyB0aGVuCisgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIGNyYXkg Y29tcGlsZXIgdmVyc2lvbiBpcyA4LjRdLAorICAgICAgICAgICAgICAgIFtqZV9jdl9jcmF5Xzg0 XSwKKyAgICAgICAgICAgICAgICBbQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShb XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFsKKyNpZiAhKF9SRUxFQVNFX01BSk9SID09IDggJiYgX1JFTEVBU0VfTUlOT1IgPT0gNCkKKyAg aW50IGZhaWxbLTFdOworI2VuZGlmCitdKV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBbamVfY3ZfY3JheV84ND15ZXNdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2pl X2N2X2NyYXlfODQ9bm9dKV0pCitmaQorCitpZiB0ZXN0ICJ4JEdDQyIgPSAieHllcyIgOyB0aGVu CisgIEpFX0NGTEFHU19BREQoWy1zdGQ9Z251MTFdKQorICBpZiB0ZXN0ICJ4JGplX2N2X2NmbGFn c19hZGRlZCIgPSAieC1zdGQ9Z251MTEiIDsgdGhlbgorICAgIEFDX0RFRklORV9VTlFVT1RFRChb SkVNQUxMT0NfSEFTX1JFU1RSSUNUXSwgWyBdLCBbIF0pCisgIGVsc2UKKyAgICBKRV9DRkxBR1Nf QUREKFstc3RkPWdudTk5XSkKKyAgICBpZiB0ZXN0ICJ4JGplX2N2X2NmbGFnc19hZGRlZCIgPSAi eC1zdGQ9Z251OTkiIDsgdGhlbgorICAgICAgQUNfREVGSU5FX1VOUVVPVEVEKFtKRU1BTExPQ19I QVNfUkVTVFJJQ1RdLCBbIF0sIFsgXSkKKyAgICBmaQorICBmaQorICBKRV9DRkxBR1NfQUREKFst V2Vycm9yPXVua25vd24td2FybmluZy1vcHRpb25dKQorICBKRV9DRkxBR1NfQUREKFstV2FsbF0p CisgIEpFX0NGTEFHU19BREQoWy1XZXh0cmFdKQorICBKRV9DRkxBR1NfQUREKFstV3Nob3J0ZW4t NjQtdG8tMzJdKQorICBKRV9DRkxBR1NfQUREKFstV3NpZ24tY29tcGFyZV0pCisgIEpFX0NGTEFH U19BREQoWy1XdW5kZWZdKQorICBKRV9DRkxBR1NfQUREKFstV25vLWZvcm1hdC16ZXJvLWxlbmd0 aF0pCisgIEpFX0NGTEFHU19BREQoWy1XcG9pbnRlci1hcml0aF0pCisgIGRubCBUaGlzIHdhcm5p bmcgdHJpZ2dlcnMgb24gdGhlIHVzZSBvZiB0aGUgdW5pdmVyc2FsIHplcm8gaW5pdGlhbGl6ZXIs IHdoaWNoCisgIGRubCBpcyBhIHZlcnkgaGFuZHkgaWRpb20gZm9yIHRoaW5ncyBsaWtlIHRoZSB0 Y2FjaGUgc3RhdGljIGluaXRpYWxpemVyICh3aGljaAorICBkbmwgaGFzIGxvdHMgb2YgbmVzdGVk IHN0cnVjdHMpLiAgU2VlIHRoZSBkaXNjdXNzaW9uIGF0LgorICBkbmwgaHR0cHM6Ly9nY2MuZ251 Lm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9NTMxMTkKKyAgSkVfQ0ZMQUdTX0FERChbLVdu by1taXNzaW5nLWJyYWNlc10pCisgIGRubCBUaGlzIG9uZSB0b28uCisgIEpFX0NGTEFHU19BREQo Wy1Xbm8tbWlzc2luZy1maWVsZC1pbml0aWFsaXplcnNdKQorICBKRV9DRkxBR1NfQUREKFstV25v LW1pc3NpbmctYXR0cmlidXRlc10pCisgIEpFX0NGTEFHU19BREQoWy1waXBlXSkKKyAgSkVfQ0ZM QUdTX0FERChbLWczXSkKK2VsaWYgdGVzdCAieCRqZV9jdl9tc3ZjIiA9ICJ4eWVzIiA7IHRoZW4K KyAgQ0M9IiRDQyAtbm9sb2dvIgorICBKRV9DRkxBR1NfQUREKFstWmldKQorICBKRV9DRkxBR1Nf QUREKFstTVRdKQorICBKRV9DRkxBR1NfQUREKFstVzNdKQorICBKRV9DRkxBR1NfQUREKFstRlNd KQorICBKRV9BUFBFTkRfVlMoQ1BQRkxBR1MsIC1JJHtzcmNkaXJ9L2luY2x1ZGUvbXN2Y19jb21w YXQpCitmaQoraWYgdGVzdCAieCRqZV9jdl9jcmF5IiA9ICJ4eWVzIiA7IHRoZW4KKyAgZG5sIGNy YXkgY29tcGlsZXIgOC40IGhhcyBhbiBpbmxpbmluZyBidWcKKyAgaWYgdGVzdCAieCRqZV9jdl9j cmF5Xzg0IiA9ICJ4eWVzIiA7IHRoZW4KKyAgICBKRV9DRkxBR1NfQUREKFstaGlwYTJdKQorICAg IEpFX0NGTEFHU19BREQoWy1obm9nbnVdKQorICBmaQorICBkbmwgaWdub3JlIHVucmVhY2hhYmxl IGNvZGUgd2FybmluZworICBKRV9DRkxBR1NfQUREKFstaG5vbWVzc2FnZT0xMjhdKQorICBkbmwg aWdub3JlIHJlZGVmaW5pdGlvbiBvZiAibWFsbG9jIiwgImZyZWUiLCBldGMgd2FybmluZworICBK RV9DRkxBR1NfQUREKFstaG5vbWVzc2FnZT0xMzU3XSkKK2ZpCitBQ19TVUJTVChbQ09ORklHVVJF X0NGTEFHU10pCitBQ19TVUJTVChbU1BFQ0lGSUVEX0NGTEFHU10pCitBQ19TVUJTVChbRVhUUkFf Q0ZMQUdTXSkKK0FDX1BST0dfQ1BQCisKK0FDX0FSR19FTkFCTEUoW2N4eF0sCisgIFtBU19IRUxQ X1NUUklORyhbLS1kaXNhYmxlLWN4eF0sIFtEaXNhYmxlIEMrKyBpbnRlZ3JhdGlvbl0pXSwKK2lm IHRlc3QgIngkZW5hYmxlX2N4eCIgPSAieG5vIiA7IHRoZW4KKyAgZW5hYmxlX2N4eD0iMCIKK2Vs c2UKKyAgZW5hYmxlX2N4eD0iMSIKK2ZpCissCitlbmFibGVfY3h4PSIxIgorKQoraWYgdGVzdCAi eCRlbmFibGVfY3h4IiA9ICJ4MSIgOyB0aGVuCisgIGRubCBSZXF1aXJlIGF0IGxlYXN0IGMrKzE0 LCB3aGljaCBpcyB0aGUgZmlyc3QgdmVyc2lvbiB0byBzdXBwb3J0IHNpemVkCisgIGRubCBkZWFs bG9jYXRpb24uICBDKysgc3VwcG9ydCBpcyBub3QgY29tcGlsZWQgb3RoZXJ3aXNlLgorICBtNF9p bmNsdWRlKFttNC9heF9jeHhfY29tcGlsZV9zdGRjeHgubTRdKQorICBBWF9DWFhfQ09NUElMRV9T VERDWFgoWzE3XSwgW25vZXh0XSwgW29wdGlvbmFsXSkKKyAgaWYgdGVzdCAieCR7SEFWRV9DWFgx N30iICE9ICJ4MSI7IHRoZW4KKyAgICBBWF9DWFhfQ09NUElMRV9TVERDWFgoWzE0XSwgW25vZXh0 XSwgW29wdGlvbmFsXSkKKyAgZmkKKyAgaWYgdGVzdCAieCR7SEFWRV9DWFgxNH0iID0gIngxIiAt byAieCR7SEFWRV9DWFgxN30iID0gIngxIjsgdGhlbgorICAgIEpFX0NYWEZMQUdTX0FERChbLVdh bGxdKQorICAgIEpFX0NYWEZMQUdTX0FERChbLVdleHRyYV0pCisgICAgSkVfQ1hYRkxBR1NfQURE KFstZzNdKQorCisgICAgU0FWRURfTElCUz0iJHtMSUJTfSIKKyAgICBKRV9BUFBFTkRfVlMoTElC UywgLWxzdGRjKyspCisgICAgSkVfQ09NUElMQUJMRShbbGlic3RkYysrIGxpbmthZ2VdLCBbCisj aW5jbHVkZSA8c3RkbGliLmg+CitdLCBbWworCWludCAqYXJyID0gKGludCAqKW1hbGxvYyhzaXpl b2YoaW50KSAqIDQyKTsKKwlpZiAoYXJyID09IE5VTEwpCisJCXJldHVybiAxOworXV0sIFtqZV9j dl9saWJzdGRjeHhdKQorICAgIGlmIHRlc3QgIngke2plX2N2X2xpYnN0ZGN4eH0iID0gInhubyIg OyB0aGVuCisgICAgICBMSUJTPSIke1NBVkVEX0xJQlN9IgorICAgIGZpCisgIGVsc2UKKyAgICBl bmFibGVfY3h4PSIwIgorICBmaQorZmkKK2lmIHRlc3QgIngkZW5hYmxlX2N4eCIgPSAieDEiOyB0 aGVuCisgIEFDX0RFRklORShbSkVNQUxMT0NfRU5BQkxFX0NYWF0sIFsgXSwgWyBdKQorZmkKK0FD X1NVQlNUKFtlbmFibGVfY3h4XSkKK0FDX1NVQlNUKFtDT05GSUdVUkVfQ1hYRkxBR1NdKQorQUNf U1VCU1QoW1NQRUNJRklFRF9DWFhGTEFHU10pCitBQ19TVUJTVChbRVhUUkFfQ1hYRkxBR1NdKQor CitBQ19DX0JJR0VORElBTihbYWNfY3ZfYmlnX2VuZGlhbj0xXSwgW2FjX2N2X2JpZ19lbmRpYW49 MF0pCitpZiB0ZXN0ICJ4JHthY19jdl9iaWdfZW5kaWFufSIgPSAieDEiIDsgdGhlbgorICBBQ19E RUZJTkVfVU5RVU9URUQoW0pFTUFMTE9DX0JJR19FTkRJQU5dLCBbIF0sIFsgXSkKK2ZpCisKK2lm IHRlc3QgIngke2plX2N2X21zdmN9IiA9ICJ4eWVzIiAtYSAieCR7YWNfY3ZfaGVhZGVyX2ludHR5 cGVzX2h9IiA9ICJ4bm8iOyB0aGVuCisgIEpFX0FQUEVORF9WUyhDUFBGTEFHUywgLUkke3NyY2Rp cn0vaW5jbHVkZS9tc3ZjX2NvbXBhdC9DOTkpCitmaQorCitpZiB0ZXN0ICJ4JHtqZV9jdl9tc3Zj fSIgPSAieHllcyIgOyB0aGVuCisgIExHX1NJWkVPRl9QVFI9TEdfU0laRU9GX1BUUl9XSU4KKyAg QUNfTVNHX1JFU1VMVChbVXNpbmcgYSBwcmVkZWZpbmVkIHZhbHVlIGZvciBzaXplb2Yodm9pZCAq KTogNCBmb3IgMzItYml0LCA4IGZvciA2NC1iaXRdKQorZWxzZQorICBBQ19DSEVDS19TSVpFT0Yo W3ZvaWQgKl0pCisgIGlmIHRlc3QgIngke2FjX2N2X3NpemVvZl92b2lkX3B9IiA9ICJ4OCIgOyB0 aGVuCisgICAgTEdfU0laRU9GX1BUUj0zCisgIGVsaWYgdGVzdCAieCR7YWNfY3Zfc2l6ZW9mX3Zv aWRfcH0iID0gIng0IiA7IHRoZW4KKyAgICBMR19TSVpFT0ZfUFRSPTIKKyAgZWxzZQorICAgIEFD X01TR19FUlJPUihbVW5zdXBwb3J0ZWQgcG9pbnRlciBzaXplOiAke2FjX2N2X3NpemVvZl92b2lk X3B9XSkKKyAgZmkKK2ZpCitBQ19ERUZJTkVfVU5RVU9URUQoW0xHX1NJWkVPRl9QVFJdLCBbJExH X1NJWkVPRl9QVFJdLCBbIF0pCisKK0FDX0NIRUNLX1NJWkVPRihbaW50XSkKK2lmIHRlc3QgIngk e2FjX2N2X3NpemVvZl9pbnR9IiA9ICJ4OCIgOyB0aGVuCisgIExHX1NJWkVPRl9JTlQ9MworZWxp ZiB0ZXN0ICJ4JHthY19jdl9zaXplb2ZfaW50fSIgPSAieDQiIDsgdGhlbgorICBMR19TSVpFT0Zf SU5UPTIKK2Vsc2UKKyAgQUNfTVNHX0VSUk9SKFtVbnN1cHBvcnRlZCBpbnQgc2l6ZTogJHthY19j dl9zaXplb2ZfaW50fV0pCitmaQorQUNfREVGSU5FX1VOUVVPVEVEKFtMR19TSVpFT0ZfSU5UXSwg WyRMR19TSVpFT0ZfSU5UXSwgWyBdKQorCitBQ19DSEVDS19TSVpFT0YoW2xvbmddKQoraWYgdGVz dCAieCR7YWNfY3Zfc2l6ZW9mX2xvbmd9IiA9ICJ4OCIgOyB0aGVuCisgIExHX1NJWkVPRl9MT05H PTMKK2VsaWYgdGVzdCAieCR7YWNfY3Zfc2l6ZW9mX2xvbmd9IiA9ICJ4NCIgOyB0aGVuCisgIExH X1NJWkVPRl9MT05HPTIKK2Vsc2UKKyAgQUNfTVNHX0VSUk9SKFtVbnN1cHBvcnRlZCBsb25nIHNp emU6ICR7YWNfY3Zfc2l6ZW9mX2xvbmd9XSkKK2ZpCitBQ19ERUZJTkVfVU5RVU9URUQoW0xHX1NJ WkVPRl9MT05HXSwgWyRMR19TSVpFT0ZfTE9OR10sIFsgXSkKKworQUNfQ0hFQ0tfU0laRU9GKFts b25nIGxvbmddKQoraWYgdGVzdCAieCR7YWNfY3Zfc2l6ZW9mX2xvbmdfbG9uZ30iID0gIng4IiA7 IHRoZW4KKyAgTEdfU0laRU9GX0xPTkdfTE9ORz0zCitlbGlmIHRlc3QgIngke2FjX2N2X3NpemVv Zl9sb25nX2xvbmd9IiA9ICJ4NCIgOyB0aGVuCisgIExHX1NJWkVPRl9MT05HX0xPTkc9MgorZWxz ZQorICBBQ19NU0dfRVJST1IoW1Vuc3VwcG9ydGVkIGxvbmcgbG9uZyBzaXplOiAke2FjX2N2X3Np emVvZl9sb25nX2xvbmd9XSkKK2ZpCitBQ19ERUZJTkVfVU5RVU9URUQoW0xHX1NJWkVPRl9MT05H X0xPTkddLCBbJExHX1NJWkVPRl9MT05HX0xPTkddLCBbIF0pCisKK0FDX0NIRUNLX1NJWkVPRihb aW50bWF4X3RdKQoraWYgdGVzdCAieCR7YWNfY3Zfc2l6ZW9mX2ludG1heF90fSIgPSAieDE2IiA7 IHRoZW4KKyAgTEdfU0laRU9GX0lOVE1BWF9UPTQKK2VsaWYgdGVzdCAieCR7YWNfY3Zfc2l6ZW9m X2ludG1heF90fSIgPSAieDgiIDsgdGhlbgorICBMR19TSVpFT0ZfSU5UTUFYX1Q9MworZWxpZiB0 ZXN0ICJ4JHthY19jdl9zaXplb2ZfaW50bWF4X3R9IiA9ICJ4NCIgOyB0aGVuCisgIExHX1NJWkVP Rl9JTlRNQVhfVD0yCitlbHNlCisgIEFDX01TR19FUlJPUihbVW5zdXBwb3J0ZWQgaW50bWF4X3Qg c2l6ZTogJHthY19jdl9zaXplb2ZfaW50bWF4X3R9XSkKK2ZpCitBQ19ERUZJTkVfVU5RVU9URUQo W0xHX1NJWkVPRl9JTlRNQVhfVF0sIFskTEdfU0laRU9GX0lOVE1BWF9UXSwgWyBdKQorCitBQ19D QU5PTklDQUxfSE9TVAorZG5sIENQVS1zcGVjaWZpYyBzZXR0aW5ncy4KK0NQVV9TUElOV0FJVD0i IgorY2FzZSAiJHtob3N0X2NwdX0iIGluCisgIGk2ODZ8eDg2XzY0KQorCUhBVkVfQ1BVX1NQSU5X QUlUPTEKKwlpZiB0ZXN0ICJ4JHtqZV9jdl9tc3ZjfSIgPSAieHllcyIgOyB0aGVuCisJICAgIEFD X0NBQ0hFX1ZBTChbamVfY3ZfcGF1c2VfbXN2Y10sCisJICAgICAgW0pFX0NPTVBJTEFCTEUoW3Bh dXNlIGluc3RydWN0aW9uIE1TVkNdLCBbXSwKKwkJCQkJW1tfbW1fcGF1c2UoKTsgcmV0dXJuIDA7 XV0sCisJCQkJCVtqZV9jdl9wYXVzZV9tc3ZjXSldKQorCSAgICBpZiB0ZXN0ICJ4JHtqZV9jdl9w YXVzZV9tc3ZjfSIgPSAieHllcyIgOyB0aGVuCisJCUNQVV9TUElOV0FJVD0nX21tX3BhdXNlKCkn CisJICAgIGZpCisJZWxzZQorCSAgICBBQ19DQUNIRV9WQUwoW2plX2N2X3BhdXNlXSwKKwkgICAg ICBbSkVfQ09NUElMQUJMRShbcGF1c2UgaW5zdHJ1Y3Rpb25dLCBbXSwKKwkJCQkJW1tfX2FzbV9f IHZvbGF0aWxlKCJwYXVzZSIpOyByZXR1cm4gMDtdXSwKKwkJCQkJW2plX2N2X3BhdXNlXSldKQor CSAgICBpZiB0ZXN0ICJ4JHtqZV9jdl9wYXVzZX0iID0gInh5ZXMiIDsgdGhlbgorCQlDUFVfU1BJ TldBSVQ9J19fYXNtX18gdm9sYXRpbGUoInBhdXNlIiknCisJICAgIGZpCisJZmkKKwk7OworICBh YXJjaDY0fGFybSopCisJSEFWRV9DUFVfU1BJTldBSVQ9MQorCWRubCBpc2IgaXMgYSBiZXR0ZXIg ZXF1aXZhbGVudCB0byB0aGUgcGF1c2UgaW5zdHJ1Y3Rpb24gb24geDg2LgorCUFDX0NBQ0hFX1ZB TChbamVfY3ZfaXNiXSwKKwkgIFtKRV9DT01QSUxBQkxFKFtpc2IgaW5zdHJ1Y3Rpb25dLCBbXSwK KwkJCVtbX19hc21fXyB2b2xhdGlsZSgiaXNiIik7IHJldHVybiAwO11dLAorCQkJW2plX2N2X2lz Yl0pXSkKKwlpZiB0ZXN0ICJ4JHtqZV9jdl9pc2J9IiA9ICJ4eWVzIiA7IHRoZW4KKwkgICAgQ1BV X1NQSU5XQUlUPSdfX2FzbV9fIHZvbGF0aWxlKCJpc2IiKScKKwlmaQorCTs7CisgICopCisJSEFW RV9DUFVfU1BJTldBSVQ9MAorCTs7Citlc2FjCitBQ19ERUZJTkVfVU5RVU9URUQoW0hBVkVfQ1BV X1NQSU5XQUlUXSwgWyRIQVZFX0NQVV9TUElOV0FJVF0sIFsgXSkKK0FDX0RFRklORV9VTlFVT1RF RChbQ1BVX1NQSU5XQUlUXSwgWyRDUFVfU1BJTldBSVRdLCBbIF0pCisKK0FDX0FSR19XSVRIKFts Z192YWRkcl0sCisgIFtBU19IRUxQX1NUUklORyhbLS13aXRoLWxnLXZhZGRyPTxsZy12YWRkcj5d LCBbTnVtYmVyIG9mIHNpZ25pZmljYW50IHZpcnR1YWwgYWRkcmVzcyBiaXRzXSldLAorICBbTEdf VkFERFI9IiR3aXRoX2xnX3ZhZGRyIl0sIFtMR19WQUREUj0iZGV0ZWN0Il0pCisKK2Nhc2UgIiR7 aG9zdF9jcHV9IiBpbgorICBhYXJjaDY0KQorICAgIGlmIHRlc3QgIngkTEdfVkFERFIiID0gInhk ZXRlY3QiOyB0aGVuCisgICAgICBBQ19NU0dfQ0hFQ0tJTkcoW251bWJlciBvZiBzaWduaWZpY2Fu dCB2aXJ0dWFsIGFkZHJlc3MgYml0c10pCisgICAgICBpZiB0ZXN0ICJ4JHtMR19TSVpFT0ZfUFRS fSIgPSAieDIiIDsgdGhlbgorICAgICAgICAjYWFyY2g2NCBJTFAzMgorICAgICAgICBMR19WQURE Uj0zMgorICAgICAgZWxzZQorICAgICAgICAjYWFyY2g2NCBMUDY0CisgICAgICAgIExHX1ZBRERS PTQ4CisgICAgICBmaQorICAgICAgQUNfTVNHX1JFU1VMVChbJExHX1ZBRERSXSkKKyAgICBmaQor ICAgIDs7CisgIHg4Nl82NCkKKyAgICBpZiB0ZXN0ICJ4JExHX1ZBRERSIiA9ICJ4ZGV0ZWN0Ijsg dGhlbgorICAgICAgQUNfQ0FDSEVfQ0hFQ0soW251bWJlciBvZiBzaWduaWZpY2FudCB2aXJ0dWFs IGFkZHJlc3MgYml0c10sCisgICAgICAgICAgICAgICAgICAgICBbamVfY3ZfbGdfdmFkZHJdLAor ICAgICAgICAgICAgICAgICAgICAgQUNfUlVOX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKAorW1sK KyNpbmNsdWRlIDxzdGRpby5oPgorI2lmZGVmIF9XSU4zMgorI2luY2x1ZGUgPGxpbWl0cy5oPgor I2luY2x1ZGUgPGludHJpbi5oPgordHlwZWRlZiB1bnNpZ25lZCBfX2ludDMyIHVpbnQzMl90Owor I2Vsc2UKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNlbmRpZgorXV0sIFtbCisJdWludDMyX3Qgcltb NF1dOworCXVpbnQzMl90IGVheF9pbiA9IDB4ODAwMDAwMDhVOworI2lmZGVmIF9XSU4zMgorCV9f Y3B1aWQoKGludCAqKXIsIChpbnQpZWF4X2luKTsKKyNlbHNlCisJYXNtIHZvbGF0aWxlICgiY3B1 aWQiCisJICAgIDogIj1hIiAocltbMF1dKSwgIj1iIiAocltbMV1dKSwgIj1jIiAocltbMl1dKSwg Ij1kIiAocltbM11dKQorCSAgICA6ICJhIiAoZWF4X2luKSwgImMiICgwKQorCSk7CisjZW5kaWYK Kwl1aW50MzJfdCBlYXhfb3V0ID0gcltbMF1dOworCXVpbnQzMl90IHZhZGRyID0gKChlYXhfb3V0 ICYgMHgwMDAwZmYwMFUpID4+IDgpOworCUZJTEUgKmYgPSBmb3BlbigiY29uZnRlc3Qub3V0Iiwg InciKTsKKwlpZiAoZiA9PSBOVUxMKSB7CisJCXJldHVybiAxOworCX0KKwlpZiAodmFkZHIgPiAo c2l6ZW9mKHZvaWQgKikgPDwgMykpIHsKKwkJdmFkZHIgPSBzaXplb2Yodm9pZCAqKSA8PCAzOwor CX0KKwlmcHJpbnRmKGYsICIldSIsIHZhZGRyKTsKKwlmY2xvc2UoZik7CisJcmV0dXJuIDA7Citd XSldLAorICAgICAgICAgICAgICAgICAgIFtqZV9jdl9sZ192YWRkcj1gY2F0IGNvbmZ0ZXN0Lm91 dGBdLAorICAgICAgICAgICAgICAgICAgIFtqZV9jdl9sZ192YWRkcj1lcnJvcl0sCisgICAgICAg ICAgICAgICAgICAgW2plX2N2X2xnX3ZhZGRyPTU3XSkpCisgICAgICBpZiB0ZXN0ICJ4JHtqZV9j dl9sZ192YWRkcn0iICE9ICJ4IiA7IHRoZW4KKyAgICAgICAgTEdfVkFERFI9IiR7amVfY3ZfbGdf dmFkZHJ9IgorICAgICAgZmkKKyAgICAgIGlmIHRlc3QgIngke0xHX1ZBRERSfSIgIT0gInhlcnJv ciIgOyB0aGVuCisgICAgICAgIEFDX0RFRklORV9VTlFVT1RFRChbTEdfVkFERFJdLCBbJExHX1ZB RERSXSwgWyBdKQorICAgICAgZWxzZQorICAgICAgICBBQ19NU0dfRVJST1IoW2Nhbm5vdCBkZXRl cm1pbmUgbnVtYmVyIG9mIHNpZ25pZmljYW50IHZpcnR1YWwgYWRkcmVzcyBiaXRzXSkKKyAgICAg IGZpCisgICAgZmkKKyAgICA7OworICAqKQorICAgIGlmIHRlc3QgIngkTEdfVkFERFIiID0gInhk ZXRlY3QiOyB0aGVuCisgICAgICBBQ19NU0dfQ0hFQ0tJTkcoW251bWJlciBvZiBzaWduaWZpY2Fu dCB2aXJ0dWFsIGFkZHJlc3MgYml0c10pCisgICAgICBpZiB0ZXN0ICJ4JHtMR19TSVpFT0ZfUFRS fSIgPSAieDMiIDsgdGhlbgorICAgICAgICBMR19WQUREUj02NAorICAgICAgZWxpZiB0ZXN0ICJ4 JHtMR19TSVpFT0ZfUFRSfSIgPSAieDIiIDsgdGhlbgorICAgICAgICBMR19WQUREUj0zMgorICAg ICAgZWxpZiB0ZXN0ICJ4JHtMR19TSVpFT0ZfUFRSfSIgPSAieExHX1NJWkVPRl9QVFJfV0lOIiA7 IHRoZW4KKyAgICAgICAgTEdfVkFERFI9IigxVSA8PCAoTEdfU0laRU9GX1BUUl9XSU4rMykpIgor ICAgICAgZWxzZQorICAgICAgICBBQ19NU0dfRVJST1IoW1Vuc3VwcG9ydGVkIGxnKHBvaW50ZXIg c2l6ZSk6ICR7TEdfU0laRU9GX1BUUn1dKQorICAgICAgZmkKKyAgICAgIEFDX01TR19SRVNVTFQo WyRMR19WQUREUl0pCisgICAgZmkKKyAgICA7OworZXNhYworQUNfREVGSU5FX1VOUVVPVEVEKFtM R19WQUREUl0sIFskTEdfVkFERFJdLCBbIF0pCisKK0xEX1BSRUxPQURfVkFSPSJMRF9QUkVMT0FE Igorc289InNvIgoraW1wb3J0bGliPSIke3NvfSIKK289IiRhY19vYmpleHQiCithPSJhIgorZXhl PSIkYWNfZXhlZXh0IgorbGlicHJlZml4PSJsaWIiCitsaW5rX3dob2xlX2FyY2hpdmU9IjAiCitE U09fTERGTEFHUz0nLXNoYXJlZCAtV2wsLXNvbmFtZSwkKEBGKScKK1JQQVRIPSctV2wsLXJwYXRo LCQoMSknCitTT1JFVj0iJHtzb30uJHtyZXZ9IgorUElDX0NGTEFHUz0nLWZQSUMgLURQSUMnCitD VEFSR0VUPSctbyAkQCcKK0xEVEFSR0VUPSctbyAkQCcKK1RFU1RfTERfTU9ERT0KK0VYVFJBX0xE RkxBR1M9CitBUkZMQUdTPSdjcnVzJworQVJPVVQ9JyAkQCcKK0NDX01NPTEKKworaWYgdGVzdCAi eCRqZV9jdl9jcmF5X3ByZ2Vudl93cmFwcGVyIiA9ICJ4eWVzIiA7IHRoZW4KKyAgVEVTVF9MRF9N T0RFPSctZHluYW1pYycKK2ZpCisKK2lmIHRlc3QgIngke2plX2N2X2NyYXl9IiA9ICJ4eWVzIiA7 IHRoZW4KKyAgQ0NfTU09CitmaQorCitBTl9NQUtFVkFSKFtBUl0sIFtBQ19QUk9HX0FSXSkKK0FO X1BST0dSQU0oW2FyXSwgW0FDX1BST0dfQVJdKQorQUNfREVGVU4oW0FDX1BST0dfQVJdLCBbQUNf Q0hFQ0tfVE9PTChBUiwgYXIsIDopXSkKK0FDX1BST0dfQVIKKworQU5fTUFLRVZBUihbTk1dLCBb QUNfUFJPR19OTV0pCitBTl9QUk9HUkFNKFtubV0sIFtBQ19QUk9HX05NXSkKK0FDX0RFRlVOKFtB Q19QUk9HX05NXSwgW0FDX0NIRUNLX1RPT0woTk0sIG5tLCA6KV0pCitBQ19QUk9HX05NCisKK0FD X1BST0dfQVdLCisKK2RubCA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitkbmwgamVtYWxsb2MgdmVyc2lv bi4KK2RubAorCitBQ19BUkdfV0lUSChbdmVyc2lvbl0sCisgIFtBU19IRUxQX1NUUklORyhbLS13 aXRoLXZlcnNpb249PG1ham9yPi48bWlub3I+LjxidWdmaXg+LTxucmV2Pi1nPGdpZD5dLAorICAg W1ZlcnNpb24gc3RyaW5nXSldLAorICBbCisgICAgZWNobyAiJHt3aXRoX3ZlcnNpb259IiB8IGdy ZXAgWydeWzAtOV1cK1wuWzAtOV1cK1wuWzAtOV1cKy1bMC05XVwrLWdbMC05YS1mXVwrJCddIDI+ JjEgMT4vZGV2L251bGwKKyAgICBpZiB0ZXN0ICQ/IC1lcSAwIDsgdGhlbgorICAgICAgZWNobyAi JHdpdGhfdmVyc2lvbiIgPiAiJHtvYmpyb290fVZFUlNJT04iCisgICAgZWxzZQorICAgICAgZWNo byAiJHt3aXRoX3ZlcnNpb259IiB8IGdyZXAgWydeVkVSU0lPTiQnXSAyPiYxIDE+L2Rldi9udWxs CisgICAgICBpZiB0ZXN0ICQ/IC1uZSAwIDsgdGhlbgorICAgICAgICBBQ19NU0dfRVJST1IoWyR7 d2l0aF92ZXJzaW9ufSBkb2VzIG5vdCBtYXRjaCA8bWFqb3I+LjxtaW5vcj4uPGJ1Z2ZpeD4tPG5y ZXY+LWc8Z2lkPiBvciBWRVJTSU9OXSkKKyAgICAgIGZpCisgICAgZmkKKyAgXSwgWworICAgIGRu bCBTZXQgVkVSU0lPTiBpZiBzb3VyY2UgZGlyZWN0b3J5IGlzIGluc2lkZSBhIGdpdCByZXBvc2l0 b3J5LgorICAgIGlmIHRlc3QgInhgdGVzdCAhIFwiJHtzcmNyb290fVwiICYmIGNkIFwiJHtzcmNy b290fVwiOyBnaXQgcmV2LXBhcnNlIC0taXMtaW5zaWRlLXdvcmstdHJlZSAyPi9kZXYvbnVsbGAi ID0gInh0cnVlIiA7IHRoZW4KKyAgICAgIGRubCBQYXR0ZXJuIGdsb2JzIGFyZW4ndCBwb3dlcmZ1 bCBlbm91Z2ggdG8gbWF0Y2ggYm90aCBzaW5nbGUtIGFuZAorICAgICAgZG5sIGRvdWJsZS1kaWdp dCB2ZXJzaW9uIG51bWJlcnMsIHNvIGl0ZXJhdGUgb3ZlciBwYXR0ZXJucyB0byBzdXBwb3J0IHVw CisgICAgICBkbmwgdG8gdmVyc2lvbiA5OS45OS45OSB3aXRob3V0IGFueSBhY2NpZGVudGFsIG1h dGNoZXMuCisgICAgICBmb3IgcGF0dGVybiBpbiBbJ1swLTldLlswLTldLlswLTldJyAnWzAtOV0u WzAtOV0uWzAtOV1bMC05XScgXAorICAgICAgICAgICAgICAgICAgICAgJ1swLTldLlswLTldWzAt OV0uWzAtOV0nICdbMC05XS5bMC05XVswLTldLlswLTldWzAtOV0nIFwKKyAgICAgICAgICAgICAg ICAgICAgICdbMC05XVswLTldLlswLTldLlswLTldJyAnWzAtOV1bMC05XS5bMC05XS5bMC05XVsw LTldJyBcCisgICAgICAgICAgICAgICAgICAgICAnWzAtOV1bMC05XS5bMC05XVswLTldLlswLTld JyBcCisgICAgICAgICAgICAgICAgICAgICAnWzAtOV1bMC05XS5bMC05XVswLTldLlswLTldWzAt OV0nXTsgZG8KKyAgICAgICAgKHRlc3QgISAiJHtzcmNyb290fSIgJiYgY2QgIiR7c3Jjcm9vdH0i OyBnaXQgZGVzY3JpYmUgLS1sb25nIC0tYWJicmV2PTQwIC0tbWF0Y2g9IiR7cGF0dGVybn0iKSA+ ICIke29ianJvb3R9VkVSU0lPTi50bXAiIDI+L2Rldi9udWxsCisgICAgICAgIGlmIHRlc3QgJD8g LWVxIDAgOyB0aGVuCisgICAgICAgICAgbXYgIiR7b2Jqcm9vdH1WRVJTSU9OLnRtcCIgIiR7b2Jq cm9vdH1WRVJTSU9OIgorICAgICAgICAgIGJyZWFrCisgICAgICAgIGZpCisgICAgICBkb25lCisg ICAgZmkKKyAgICBybSAtZiAiJHtvYmpyb290fVZFUlNJT04udG1wIgorICBdKQorCitpZiB0ZXN0 ICEgLWUgIiR7b2Jqcm9vdH1WRVJTSU9OIiA7IHRoZW4KKyAgaWYgdGVzdCAhIC1lICIke3NyY3Jv b3R9VkVSU0lPTiIgOyB0aGVuCisgICAgQUNfTVNHX1JFU1VMVCgKKyAgICAgIFtNaXNzaW5nIFZF UlNJT04gZmlsZSwgYW5kIHVuYWJsZSB0byBnZW5lcmF0ZSBpdDsgY3JlYXRpbmcgYm9ndXMgVkVS U0lPTl0pCisgICAgZWNobyAiMC4wLjAtMC1nMDAwMDAwbWlzc2luZ192ZXJzaW9uX3RyeV9naXRf ZmV0Y2hfdGFncyIgPiAiJHtvYmpyb290fVZFUlNJT04iCisgIGVsc2UKKyAgICBjcCAke3NyY3Jv b3R9VkVSU0lPTiAke29ianJvb3R9VkVSU0lPTgorICBmaQorZmkKK2plbWFsbG9jX3ZlcnNpb249 YGNhdCAiJHtvYmpyb290fVZFUlNJT04iYAoramVtYWxsb2NfdmVyc2lvbl9tYWpvcj1gZWNobyAk e2plbWFsbG9jX3ZlcnNpb259IHwgdHIgIi5nLSIgIiAiIHwgYXdrICd7cHJpbnQgWyRdMX0nYAor amVtYWxsb2NfdmVyc2lvbl9taW5vcj1gZWNobyAke2plbWFsbG9jX3ZlcnNpb259IHwgdHIgIi5n LSIgIiAiIHwgYXdrICd7cHJpbnQgWyRdMn0nYAoramVtYWxsb2NfdmVyc2lvbl9idWdmaXg9YGVj aG8gJHtqZW1hbGxvY192ZXJzaW9ufSB8IHRyICIuZy0iICIgIiB8IGF3ayAne3ByaW50IFskXTN9 J2AKK2plbWFsbG9jX3ZlcnNpb25fbnJldj1gZWNobyAke2plbWFsbG9jX3ZlcnNpb259IHwgdHIg Ii5nLSIgIiAiIHwgYXdrICd7cHJpbnQgWyRdNH0nYAoramVtYWxsb2NfdmVyc2lvbl9naWQ9YGVj aG8gJHtqZW1hbGxvY192ZXJzaW9ufSB8IHRyICIuZy0iICIgIiB8IGF3ayAne3ByaW50IFskXTV9 J2AKK0FDX1NVQlNUKFtqZW1hbGxvY192ZXJzaW9uXSkKK0FDX1NVQlNUKFtqZW1hbGxvY192ZXJz aW9uX21ham9yXSkKK0FDX1NVQlNUKFtqZW1hbGxvY192ZXJzaW9uX21pbm9yXSkKK0FDX1NVQlNU KFtqZW1hbGxvY192ZXJzaW9uX2J1Z2ZpeF0pCitBQ19TVUJTVChbamVtYWxsb2NfdmVyc2lvbl9u cmV2XSkKK0FDX1NVQlNUKFtqZW1hbGxvY192ZXJzaW9uX2dpZF0pCisKK2RubCBQbGF0Zm9ybS1z cGVjaWZpYyBzZXR0aW5ncy4gIGFiaSBhbmQgUlBBVEggY2FuIHByb2JhYmx5IGJlIGRldGVybWlu ZWQKK2RubCBwcm9ncmFtbWF0aWNhbGx5LCBidXQgZG9pbmcgc28gaXMgZXJyb3ItcHJvbmUsIHdo aWNoIG1ha2VzIGl0IGdlbmVyYWxseQorZG5sIG5vdCB3b3J0aCB0aGUgdHJvdWJsZS4KK2RubAor ZG5sIERlZmluZSBjcHAgbWFjcm9zIGluIENQUEZMQUdTLCByYXRoZXIgdGhhbiBkb2luZyBBQ19E RUZJTkUobWFjcm8pLCBzaW5jZSB0aGUKK2RubCBkZWZpbml0aW9ucyBuZWVkIHRvIGJlIHNlZW4g YmVmb3JlIGFueSBoZWFkZXJzIGFyZSBpbmNsdWRlZCwgd2hpY2ggaXMgYSBwYWluCitkbmwgdG8g bWFrZSBoYXBwZW4gb3RoZXJ3aXNlLgorZGVmYXVsdF9yZXRhaW49IjAiCit6ZXJvX3JlYWxsb2Nf ZGVmYXVsdF9mcmVlPSIwIgorbWFwc19jb2FsZXNjZT0iMSIKK0RVTVBfU1lNUz0iJHtOTX0gLWEi CitTWU1fUFJFRklYPSIiCitjYXNlICIke2hvc3R9IiBpbgorICAqLSotZGFyd2luKiB8ICotKi1p b3MqKQorCWFiaT0ibWFjaG8iCisJUlBBVEg9IiIKKwlMRF9QUkVMT0FEX1ZBUj0iRFlMRF9JTlNF UlRfTElCUkFSSUVTIgorCXNvPSJkeWxpYiIKKwlpbXBvcnRsaWI9IiR7c299IgorCWZvcmNlX3Rs cz0iMCIKKwlEU09fTERGTEFHUz0nLXNoYXJlZCAtV2wsLWluc3RhbGxfbmFtZSwkKExJQkRJUikv JChARiknCisJU09SRVY9IiR7cmV2fS4ke3NvfSIKKwlzYnJrX2RlcHJlY2F0ZWQ9IjEiCisJU1lN X1BSRUZJWD0iXyIKKwk7OworICAqLSotZnJlZWJzZCopCisJSkVfQVBQRU5EX1ZTKENQUEZMQUdT LCAtRF9CU0RfU09VUkNFKQorCWFiaT0iZWxmIgorCUFDX0RFRklORShbSkVNQUxMT0NfU1lTQ1RM X1ZNX09WRVJDT01NSVRdLCBbIF0sIFsgXSkKKwlmb3JjZV9sYXp5X2xvY2s9IjEiCisJOzsKKyAg Ki0qLWRyYWdvbmZseSopCisJYWJpPSJlbGYiCisJOzsKKyAgKi0qLW9wZW5ic2QqKQorCWFiaT0i ZWxmIgorCWZvcmNlX3Rscz0iMCIKKwk7OworICAqLSotYml0cmlnKikKKwlhYmk9ImVsZiIKKwk7 OworICAqLSotbGludXgtYW5kcm9pZCopCisJZG5sIHN5c2NhbGwoMikgYW5kIHNlY3VyZV9nZXRl bnYoMykgYXJlIGV4cG9zZWQgYnkgX0dOVV9TT1VSQ0UuCisJSkVfQVBQRU5EX1ZTKENQUEZMQUdT LCAtRF9HTlVfU09VUkNFKQorCWFiaT0iZWxmIgorCWdsaWJjPSIwIgorCUFDX0RFRklORShbSkVN QUxMT0NfUFVSR0VfTUFEVklTRV9ET05UTkVFRF9aRVJPU10sIFsgXSwgWyBdKQorCUFDX0RFRklO RShbSkVNQUxMT0NfSEFTX0FMTE9DQV9IXSwgWyBdLCBbIF0pCisJQUNfREVGSU5FKFtKRU1BTExP Q19QUk9DX1NZU19WTV9PVkVSQ09NTUlUX01FTU9SWV0sIFsgXSwgWyBdKQorCUFDX0RFRklORShb SkVNQUxMT0NfVEhSRUFERURfSU5JVF0sIFsgXSwgWyBdKQorCUFDX0RFRklORShbSkVNQUxMT0Nf QzExX0FUT01JQ1NdLCBbIF0sIFsgXSkKKwlmb3JjZV90bHM9IjAiCisJaWYgdGVzdCAiJHtMR19T SVpFT0ZfUFRSfSIgPSAiMyI7IHRoZW4KKwkgIGRlZmF1bHRfcmV0YWluPSIxIgorCWZpCisJemVy b19yZWFsbG9jX2RlZmF1bHRfZnJlZT0iMSIKKwk7OworICAqLSotbGludXgqKQorCWRubCBzeXNj YWxsKDIpIGFuZCBzZWN1cmVfZ2V0ZW52KDMpIGFyZSBleHBvc2VkIGJ5IF9HTlVfU09VUkNFLgor CUpFX0FQUEVORF9WUyhDUFBGTEFHUywgLURfR05VX1NPVVJDRSkKKwlhYmk9ImVsZiIKKwlnbGli Yz0iMSIKKwlBQ19ERUZJTkUoW0pFTUFMTE9DX1BVUkdFX01BRFZJU0VfRE9OVE5FRURfWkVST1Nd LCBbIF0sIFsgXSkKKwlBQ19ERUZJTkUoW0pFTUFMTE9DX0hBU19BTExPQ0FfSF0sIFsgXSwgWyBd KQorCUFDX0RFRklORShbSkVNQUxMT0NfUFJPQ19TWVNfVk1fT1ZFUkNPTU1JVF9NRU1PUlldLCBb IF0sIFsgXSkKKwlBQ19ERUZJTkUoW0pFTUFMTE9DX1RIUkVBREVEX0lOSVRdLCBbIF0sIFsgXSkK KwlBQ19ERUZJTkUoW0pFTUFMTE9DX1VTRV9DWFhfVEhST1ddLCBbIF0sIFsgXSkKKwlpZiB0ZXN0 ICIke0xHX1NJWkVPRl9QVFJ9IiA9ICIzIjsgdGhlbgorCSAgZGVmYXVsdF9yZXRhaW49IjEiCisJ ZmkKKwl6ZXJvX3JlYWxsb2NfZGVmYXVsdF9mcmVlPSIxIgorCTs7CisgICotKi1rZnJlZWJzZCop CisJZG5sIHN5c2NhbGwoMikgYW5kIHNlY3VyZV9nZXRlbnYoMykgYXJlIGV4cG9zZWQgYnkgX0dO VV9TT1VSQ0UuCisJSkVfQVBQRU5EX1ZTKENQUEZMQUdTLCAtRF9HTlVfU09VUkNFKQorCWFiaT0i ZWxmIgorCUFDX0RFRklORShbSkVNQUxMT0NfSEFTX0FMTE9DQV9IXSwgWyBdLCBbIF0pCisJQUNf REVGSU5FKFtKRU1BTExPQ19TWVNDVExfVk1fT1ZFUkNPTU1JVF0sIFsgXSwgWyBdKQorCUFDX0RF RklORShbSkVNQUxMT0NfVEhSRUFERURfSU5JVF0sIFsgXSwgWyBdKQorCUFDX0RFRklORShbSkVN QUxMT0NfVVNFX0NYWF9USFJPV10sIFsgXSwgWyBdKQorCTs7CisgICotKi1uZXRic2QqKQorCUFD X01TR19DSEVDS0lORyhbQUJJXSkKKyAgICAgICAgQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdf UFJPR1JBTSgKK1tbI2lmZGVmIF9fRUxGX18KKy8qIEVMRiAqLworI2Vsc2UKKyNlcnJvciBhb3V0 CisjZW5kaWYKK11dKV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgIFthYmk9ImVsZiJdLAor ICAgICAgICAgICAgICAgICAgICAgICAgICBbYWJpPSJhb3V0Il0pCisJQUNfTVNHX1JFU1VMVChb JGFiaV0pCisJOzsKKyAgKi0qLXNvbGFyaXMyKikKKwlhYmk9ImVsZiIKKwlSUEFUSD0nLVdsLC1S LCQoMSknCisJZG5sIFNvbGFyaXMgbmVlZHMgdGhpcyBmb3Igc2lnd2FpdCgpLgorCUpFX0FQUEVO RF9WUyhDUFBGTEFHUywgLURfUE9TSVhfUFRIUkVBRF9TRU1BTlRJQ1MpCisJSkVfQVBQRU5EX1ZT KExJQlMsIC1scG9zaXg0IC1sc29ja2V0IC1sbnNsKQorCTs7CisgICotaWJtLWFpeCopCisJaWYg dGVzdCAiJHtMR19TSVpFT0ZfUFRSfSIgPSAiMyI7IHRoZW4KKwkgIGRubCA2NGJpdCBBSVgKKwkg IExEX1BSRUxPQURfVkFSPSJMRFJfUFJFTE9BRDY0IgorCWVsc2UKKwkgIGRubCAzMmJpdCBBSVgK KwkgIExEX1BSRUxPQURfVkFSPSJMRFJfUFJFTE9BRCIKKwlmaQorCWFiaT0ieGNvZmYiCisJOzsK KyAgKi0qLW1pbmd3KiB8ICotKi1jeWd3aW4qKQorCWFiaT0icGVjb2ZmIgorCWZvcmNlX3Rscz0i MCIKKwltYXBzX2NvYWxlc2NlPSIwIgorCVJQQVRIPSIiCisJc289ImRsbCIKKwlpZiB0ZXN0ICJ4 JGplX2N2X21zdmMiID0gInh5ZXMiIDsgdGhlbgorCSAgaW1wb3J0bGliPSJsaWIiCisJICBEU09f TERGTEFHUz0iLUxEIgorCSAgRVhUUkFfTERGTEFHUz0iLWxpbmsgLURFQlVHIgorCSAgQ1RBUkdF VD0nLUZvJEAnCisJICBMRFRBUkdFVD0nLUZlJEAnCisJICBBUj0nbGliJworCSAgQVJGTEFHUz0n LW5vbG9nbyAtb3V0OicKKwkgIEFST1VUPSckQCcKKwkgIENDX01NPQorICAgICAgICBlbHNlCisJ ICBpbXBvcnRsaWI9IiR7c299IgorCSAgRFNPX0xERkxBR1M9Ii1zaGFyZWQiCisJICBsaW5rX3do b2xlX2FyY2hpdmU9IjEiCisJZmkKKwljYXNlICIke2hvc3R9IiBpbgorCSAgKi0qLWN5Z3dpbiop CisJICAgIERVTVBfU1lNUz0iZHVtcGJpbiAvU1lNQk9MUyIKKwkgICAgOzsKKwkgICopCisJICAg IDs7CisJZXNhYworCWE9ImxpYiIKKwlsaWJwcmVmaXg9IiIKKwlTT1JFVj0iJHtzb30iCisJUElD X0NGTEFHUz0iIgorCWlmIHRlc3QgIiR7TEdfU0laRU9GX1BUUn0iID0gIjMiOyB0aGVuCisJICBk ZWZhdWx0X3JldGFpbj0iMSIKKwlmaQorCXplcm9fcmVhbGxvY19kZWZhdWx0X2ZyZWU9IjEiCisJ OzsKKyAgKi0qLW50by1xbngpCisJYWJpPSJlbGYiCisgIGZvcmNlX3Rscz0iMCIKKyAgQUNfREVG SU5FKFtKRU1BTExPQ19IQVNfQUxMT0NBX0hdLCBbIF0sIFsgXSkKKwk7OworICAqKQorCUFDX01T R19SRVNVTFQoW1Vuc3VwcG9ydGVkIG9wZXJhdGluZyBzeXN0ZW06ICR7aG9zdH1dKQorCWFiaT0i ZWxmIgorCTs7Citlc2FjCisKK0pFTUFMTE9DX1VTQUJMRV9TSVpFX0NPTlNUPWNvbnN0CitBQ19D SEVDS19IRUFERVJTKFttYWxsb2MuaF0sIFsKKyAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIG1h bGxvY191c2FibGVfc2l6ZSBkZWZpbml0aW9uIGNhbiB1c2UgY29uc3QgYXJndW1lbnRdKQorICBB Q19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKAorICAgIFsjaW5jbHVkZSA8bWFsbG9j Lmg+CisgICAgICNpbmNsdWRlIDxzdGRkZWYuaD4KKyAgICBzaXplX3QgbWFsbG9jX3VzYWJsZV9z aXplKGNvbnN0IHZvaWQgKnB0cik7CisgICAgXSwKKyAgICBbXSldLFsKKyAgICAgICAgICAgICAg ICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgICAgXSxbCisgICAgICAgICAgICAgICAgSkVN QUxMT0NfVVNBQkxFX1NJWkVfQ09OU1Q9CisgICAgICAgICAgICAgICAgQUNfTVNHX1JFU1VMVChb bm9dKQorICAgICAgICAgXSkKK10pCitBQ19ERUZJTkVfVU5RVU9URUQoW0pFTUFMTE9DX1VTQUJM RV9TSVpFX0NPTlNUXSwgWyRKRU1BTExPQ19VU0FCTEVfU0laRV9DT05TVF0sIFsgXSkKK0FDX1NV QlNUKFthYmldKQorQUNfU1VCU1QoW1JQQVRIXSkKK0FDX1NVQlNUKFtMRF9QUkVMT0FEX1ZBUl0p CitBQ19TVUJTVChbc29dKQorQUNfU1VCU1QoW2ltcG9ydGxpYl0pCitBQ19TVUJTVChbb10pCitB Q19TVUJTVChbYV0pCitBQ19TVUJTVChbZXhlXSkKK0FDX1NVQlNUKFtsaWJwcmVmaXhdKQorQUNf U1VCU1QoW2xpbmtfd2hvbGVfYXJjaGl2ZV0pCitBQ19TVUJTVChbRFNPX0xERkxBR1NdKQorQUNf U1VCU1QoW0VYVFJBX0xERkxBR1NdKQorQUNfU1VCU1QoW1NPUkVWXSkKK0FDX1NVQlNUKFtQSUNf Q0ZMQUdTXSkKK0FDX1NVQlNUKFtDVEFSR0VUXSkKK0FDX1NVQlNUKFtMRFRBUkdFVF0pCitBQ19T VUJTVChbVEVTVF9MRF9NT0RFXSkKK0FDX1NVQlNUKFtNS0xJQl0pCitBQ19TVUJTVChbQVJGTEFH U10pCitBQ19TVUJTVChbQVJPVVRdKQorQUNfU1VCU1QoW0RVTVBfU1lNU10pCitBQ19TVUJTVChb Q0NfTU1dKQorCitkbmwgRGV0ZXJtaW5lIHdoZXRoZXIgbGlibSBtdXN0IGJlIGxpbmtlZCB0byB1 c2UgZS5nLiBsb2coMykuCitBQ19TRUFSQ0hfTElCUyhbbG9nXSwgW21dLCAsIFtBQ19NU0dfRVJS T1IoW01pc3NpbmcgbWF0aCBmdW5jdGlvbnNdKV0pCitpZiB0ZXN0ICJ4JGFjX2N2X3NlYXJjaF9s b2ciICE9ICJ4bm9uZSByZXF1aXJlZCIgOyB0aGVuCisgIExNPSIkYWNfY3Zfc2VhcmNoX2xvZyIK K2Vsc2UKKyAgTE09CitmaQorQUNfU1VCU1QoTE0pCisKK0pFX0NPTVBJTEFCTEUoW19fYXR0cmli dXRlX18gc3ludGF4XSwKKyAgICAgICAgICAgICAgW3N0YXRpYyBfX2F0dHJpYnV0ZV9fKCh1bnVz ZWQpKSB2b2lkIGZvbyh2b2lkKXt9XSwKKyAgICAgICAgICAgICAgW10sCisgICAgICAgICAgICAg IFtqZV9jdl9hdHRyaWJ1dGVdKQoraWYgdGVzdCAieCR7amVfY3ZfYXR0cmlidXRlfSIgPSAieHll cyIgOyB0aGVuCisgIEFDX0RFRklORShbSkVNQUxMT0NfSEFWRV9BVFRSXSwgWyBdLCBbIF0pCisg IGlmIHRlc3QgIngke0dDQ30iID0gInh5ZXMiIC1hICJ4JHthYml9IiA9ICJ4ZWxmIjsgdGhlbgor ICAgIEpFX0NGTEFHU19BREQoWy1mdmlzaWJpbGl0eT1oaWRkZW5dKQorICAgIEpFX0NYWEZMQUdT X0FERChbLWZ2aXNpYmlsaXR5PWhpZGRlbl0pCisgIGZpCitmaQorZG5sIENoZWNrIGZvciB0bHNf bW9kZWwgYXR0cmlidXRlIHN1cHBvcnQgKGNsYW5nIDMuMCBzdGlsbCBsYWNrcyBzdXBwb3J0KS4K K0pFX0NGTEFHU19TQVZFKCkKK0pFX0NGTEFHU19BREQoWy1XZXJyb3JdKQorSkVfQ0ZMQUdTX0FE RChbLWhlcnJvcl9vbl93YXJuaW5nXSkKK0pFX0NPTVBJTEFCTEUoW3Rsc19tb2RlbCBhdHRyaWJ1 dGVdLCBbXSwKKyAgICAgICAgICAgICAgW3N0YXRpYyBfX3RocmVhZCBpbnQKKyAgICAgICAgICAg ICAgIF9fYXR0cmlidXRlX18oKHRsc19tb2RlbCgiaW5pdGlhbC1leGVjIiksIHVudXNlZCkpIGZv bzsKKyAgICAgICAgICAgICAgIGZvbyA9IDA7XSwKKyAgICAgICAgICAgICAgW2plX2N2X3Rsc19t b2RlbF0pCitKRV9DRkxBR1NfUkVTVE9SRSgpCitkbmwgKFNldHRpbmcgb2YgSkVNQUxMT0NfVExT X01PREVMIGlzIGRvbmUgbGF0ZXIsIGFmdGVyIHdlJ3ZlIGNoZWNrZWQgZm9yCitkbmwgLS1kaXNh YmxlLWluaXRpYWwtZXhlYy10bHMpCisKK2RubCBDaGVjayBmb3IgYWxsb2Nfc2l6ZSBhdHRyaWJ1 dGUgc3VwcG9ydC4KK0pFX0NGTEFHU19TQVZFKCkKK0pFX0NGTEFHU19BREQoWy1XZXJyb3JdKQor SkVfQ0ZMQUdTX0FERChbLWhlcnJvcl9vbl93YXJuaW5nXSkKK0pFX0NPTVBJTEFCTEUoW2FsbG9j X3NpemUgYXR0cmlidXRlXSwgWyNpbmNsdWRlIDxzdGRsaWIuaD5dLAorICAgICAgICAgICAgICBb dm9pZCAqZm9vKHNpemVfdCBzaXplKSBfX2F0dHJpYnV0ZV9fKChhbGxvY19zaXplKDEpKSk7XSwK KyAgICAgICAgICAgICAgW2plX2N2X2FsbG9jX3NpemVdKQorSkVfQ0ZMQUdTX1JFU1RPUkUoKQor aWYgdGVzdCAieCR7amVfY3ZfYWxsb2Nfc2l6ZX0iID0gInh5ZXMiIDsgdGhlbgorICBBQ19ERUZJ TkUoW0pFTUFMTE9DX0hBVkVfQVRUUl9BTExPQ19TSVpFXSwgWyBdLCBbIF0pCitmaQorZG5sIENo ZWNrIGZvciBmb3JtYXQoZ251X3ByaW50ZiwgLi4uKSBhdHRyaWJ1dGUgc3VwcG9ydC4KK0pFX0NG TEFHU19TQVZFKCkKK0pFX0NGTEFHU19BREQoWy1XZXJyb3JdKQorSkVfQ0ZMQUdTX0FERChbLWhl cnJvcl9vbl93YXJuaW5nXSkKK0pFX0NPTVBJTEFCTEUoW2Zvcm1hdChnbnVfcHJpbnRmLCAuLi4p IGF0dHJpYnV0ZV0sIFsjaW5jbHVkZSA8c3RkbGliLmg+XSwKKyAgICAgICAgICAgICAgW3ZvaWQg KmZvbyhjb25zdCBjaGFyICpmb3JtYXQsIC4uLikgX19hdHRyaWJ1dGVfXygoZm9ybWF0KGdudV9w cmludGYsIDEsIDIpKSk7XSwKKyAgICAgICAgICAgICAgW2plX2N2X2Zvcm1hdF9nbnVfcHJpbnRm XSkKK0pFX0NGTEFHU19SRVNUT1JFKCkKK2lmIHRlc3QgIngke2plX2N2X2Zvcm1hdF9nbnVfcHJp bnRmfSIgPSAieHllcyIgOyB0aGVuCisgIEFDX0RFRklORShbSkVNQUxMT0NfSEFWRV9BVFRSX0ZP Uk1BVF9HTlVfUFJJTlRGXSwgWyBdLCBbIF0pCitmaQorZG5sIENoZWNrIGZvciBmb3JtYXQocHJp bnRmLCAuLi4pIGF0dHJpYnV0ZSBzdXBwb3J0LgorSkVfQ0ZMQUdTX1NBVkUoKQorSkVfQ0ZMQUdT X0FERChbLVdlcnJvcl0pCitKRV9DRkxBR1NfQUREKFstaGVycm9yX29uX3dhcm5pbmddKQorSkVf Q09NUElMQUJMRShbZm9ybWF0KHByaW50ZiwgLi4uKSBhdHRyaWJ1dGVdLCBbI2luY2x1ZGUgPHN0 ZGxpYi5oPl0sCisgICAgICAgICAgICAgIFt2b2lkICpmb28oY29uc3QgY2hhciAqZm9ybWF0LCAu Li4pIF9fYXR0cmlidXRlX18oKGZvcm1hdChwcmludGYsIDEsIDIpKSk7XSwKKyAgICAgICAgICAg ICAgW2plX2N2X2Zvcm1hdF9wcmludGZdKQorSkVfQ0ZMQUdTX1JFU1RPUkUoKQoraWYgdGVzdCAi eCR7amVfY3ZfZm9ybWF0X3ByaW50Zn0iID0gInh5ZXMiIDsgdGhlbgorICBBQ19ERUZJTkUoW0pF TUFMTE9DX0hBVkVfQVRUUl9GT1JNQVRfUFJJTlRGXSwgWyBdLCBbIF0pCitmaQorCitkbmwgQ2hl Y2sgZm9yIGZvcm1hdF9hcmcoLi4uKSBhdHRyaWJ1dGUgc3VwcG9ydC4KK0pFX0NGTEFHU19TQVZF KCkKK0pFX0NGTEFHU19BREQoWy1XZXJyb3JdKQorSkVfQ0ZMQUdTX0FERChbLWhlcnJvcl9vbl93 YXJuaW5nXSkKK0pFX0NPTVBJTEFCTEUoW2Zvcm1hdChwcmludGYsIC4uLikgYXR0cmlidXRlXSwg WyNpbmNsdWRlIDxzdGRsaWIuaD5dLAorICAgICAgICAgICAgICBbY29uc3QgY2hhciAqIF9fYXR0 cmlidXRlX18oKF9fZm9ybWF0X2FyZ19fKDEpKSkgZm9vKGNvbnN0IGNoYXIgKmZvcm1hdCk7XSwK KyAgICAgICAgICAgICAgW2plX2N2X2Zvcm1hdF9hcmddKQorSkVfQ0ZMQUdTX1JFU1RPUkUoKQor aWYgdGVzdCAieCR7amVfY3ZfZm9ybWF0X2FyZ30iID0gInh5ZXMiIDsgdGhlbgorICBBQ19ERUZJ TkUoW0pFTUFMTE9DX0hBVkVfQVRUUl9GT1JNQVRfQVJHXSwgWyBdLCBbIF0pCitmaQorCitkbmwg Q2hlY2sgZm9yIGZhbGx0aHJvdWdoIGF0dHJpYnV0ZSBzdXBwb3J0LgorSkVfQ0ZMQUdTX1NBVkUo KQorSkVfQ0ZMQUdTX0FERChbLVdpbXBsaWNpdC1mYWxsdGhyb3VnaF0pCitKRV9DT01QSUxBQkxF KFtmYWxsdGhyb3VnaCBhdHRyaWJ1dGVdLAorICAgICAgICAgICAgICBbI2lmICFfX2hhc19hdHRy aWJ1dGUoZmFsbHRocm91Z2gpCisgICAgICAgICAgICAgICAjZXJyb3IgImZvbyIKKyAgICAgICAg ICAgICAgICNlbmRpZl0sCisgICAgICAgICAgICAgIFtpbnQgeCA9IDA7CisgICAgICAgICAgICAg ICBzd2l0Y2ggKHgpIHsKKyAgICAgICAgICAgICAgIGNhc2UgMDogX19hdHRyaWJ1dGVfXygoX19m YWxsdGhyb3VnaF9fKSk7CisgICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiAxOworICAgICAg ICAgICAgICAgfV0sCisgICAgICAgICAgICAgIFtqZV9jdl9mYWxsdGhyb3VnaF0pCitKRV9DRkxB R1NfUkVTVE9SRSgpCitpZiB0ZXN0ICJ4JHtqZV9jdl9mYWxsdGhyb3VnaH0iID0gInh5ZXMiIDsg dGhlbgorICBBQ19ERUZJTkUoW0pFTUFMTE9DX0hBVkVfQVRUUl9GQUxMVEhST1VHSF0sIFsgXSwg WyBdKQorICBKRV9DRkxBR1NfQUREKFstV2ltcGxpY2l0LWZhbGx0aHJvdWdoXSkKKyAgSkVfQ1hY RkxBR1NfQUREKFstV2ltcGxpY2l0LWZhbGx0aHJvdWdoXSkKK2ZpCisKK2RubCBDaGVjayBmb3Ig Y29sZCBhdHRyaWJ1dGUgc3VwcG9ydC4KK0pFX0NGTEFHU19TQVZFKCkKK0pFX0NGTEFHU19BREQo Wy1XZXJyb3JdKQorSkVfQ0ZMQUdTX0FERChbLWhlcnJvcl9vbl93YXJuaW5nXSkKK0pFX0NPTVBJ TEFCTEUoW2NvbGQgYXR0cmlidXRlXSwgW10sCisgICAgICAgICAgICAgIFtfX2F0dHJpYnV0ZV9f KChfX2NvbGRfXykpIHZvaWQgZm9vKCk7XSwKKyAgICAgICAgICAgICAgW2plX2N2X2NvbGRdKQor SkVfQ0ZMQUdTX1JFU1RPUkUoKQoraWYgdGVzdCAieCR7amVfY3ZfY29sZH0iID0gInh5ZXMiIDsg dGhlbgorICBBQ19ERUZJTkUoW0pFTUFMTE9DX0hBVkVfQVRUUl9DT0xEXSwgWyBdLCBbIF0pCitm aQorCitkbmwgQ2hlY2sgZm9yIFZNX01BS0VfVEFHIGZvciBtbWFwIHN1cHBvcnQuCitKRV9DT01Q SUxBQkxFKFt2bV9tYWtlX3RhZ10sCisJICAgICAgWyNpbmNsdWRlIDxzeXMvbW1hbi5oPgorCSAg ICAgICAjaW5jbHVkZSA8bWFjaC92bV9zdGF0aXN0aWNzLmg+XSwKKwkgICAgICBbdm9pZCAqcDsK KwkgICAgICAgcCA9IG1tYXAoMCwgMTYsIFBST1RfUkVBRCwgTUFQX0FOT058TUFQX1BSSVZBVEUs IFZNX01BS0VfVEFHKDEpLCAwKTsKKwkgICAgICAgbXVubWFwKHAsIDE2KTtdLAorCSAgICAgIFtq ZV9jdl92bV9tYWtlX3RhZ10pCitpZiB0ZXN0ICJ4JHtqZV9jdl92bV9tYWtlX3RhZ30iID0gInh5 ZXMiIDsgdGhlbgorICBBQ19ERUZJTkUoW0pFTUFMTE9DX0hBVkVfVk1fTUFLRV9UQUddLCBbIF0s IFsgXSkKK2ZpCisKK2RubCBTdXBwb3J0IG9wdGlvbmFsIGFkZGl0aW9ucyB0byBycGF0aC4KK0FD X0FSR19XSVRIKFtycGF0aF0sCisgIFtBU19IRUxQX1NUUklORyhbLS13aXRoLXJwYXRoPTxycGF0 aD5dLCBbQ29sb24tc2VwYXJhdGVkIHJwYXRoIChFTEYgc3lzdGVtcyBvbmx5KV0pXSwKK2lmIHRl c3QgIngkd2l0aF9ycGF0aCIgPSAieG5vIiA7IHRoZW4KKyAgUlBBVEhfRVhUUkE9CitlbHNlCisg IFJQQVRIX0VYVFJBPSJgZWNobyAkd2l0aF9ycGF0aCB8IHRyIFwiOlwiIFwiIFwiYCIKK2ZpLAor ICBSUEFUSF9FWFRSQT0KKykKK0FDX1NVQlNUKFtSUEFUSF9FWFRSQV0pCisKK2RubCBEaXNhYmxl IHJ1bGVzIHRoYXQgZG8gYXV0b21hdGljIHJlZ2VuZXJhdGlvbiBvZiBjb25maWd1cmUgb3V0cHV0 IGJ5IGRlZmF1bHQuCitBQ19BUkdfRU5BQkxFKFthdXRvZ2VuXSwKKyAgW0FTX0hFTFBfU1RSSU5H KFstLWVuYWJsZS1hdXRvZ2VuXSwgW0F1dG9tYXRpY2FsbHkgcmVnZW5lcmF0ZSBjb25maWd1cmUg b3V0cHV0XSldLAoraWYgdGVzdCAieCRlbmFibGVfYXV0b2dlbiIgPSAieG5vIiA7IHRoZW4KKyAg ZW5hYmxlX2F1dG9nZW49IjAiCitlbHNlCisgIGVuYWJsZV9hdXRvZ2VuPSIxIgorZmkKKywKK2Vu YWJsZV9hdXRvZ2VuPSIwIgorKQorQUNfU1VCU1QoW2VuYWJsZV9hdXRvZ2VuXSkKKworQUNfUFJP R19JTlNUQUxMCitBQ19QUk9HX1JBTkxJQgorQUNfUEFUSF9QUk9HKFtMRF0sIFtsZF0sIFtmYWxz ZV0sIFskUEFUSF0pCitBQ19QQVRIX1BST0coW0FVVE9DT05GXSwgW2F1dG9jb25mXSwgW2ZhbHNl XSwgWyRQQVRIXSkKKworZG5sIEVuYWJsZSBkb2N1bWVudGF0aW9uCitBQ19BUkdfRU5BQkxFKFtk b2NdLAorCSAgICAgIFtBU19IRUxQX1NUUklORyhbLS1lbmFibGUtZG9jXSwgW0J1aWxkIGRvY3Vt ZW50YXRpb25dKV0sCitpZiB0ZXN0ICJ4JGVuYWJsZV9kb2MiID0gInhubyIgOyB0aGVuCisgIGVu YWJsZV9kb2M9IjAiCitlbHNlCisgIGVuYWJsZV9kb2M9IjEiCitmaQorLAorZW5hYmxlX2RvYz0i MSIKKykKK0FDX1NVQlNUKFtlbmFibGVfZG9jXSkKKworZG5sIEVuYWJsZSBzaGFyZWQgbGlicwor QUNfQVJHX0VOQUJMRShbc2hhcmVkXSwKKyAgW0FTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1zaGFy ZWRdLCBbQnVpbGQgc2hhcmVkIGxpYmFyaWVzXSldLAoraWYgdGVzdCAieCRlbmFibGVfc2hhcmVk IiA9ICJ4bm8iIDsgdGhlbgorICBlbmFibGVfc2hhcmVkPSIwIgorZWxzZQorICBlbmFibGVfc2hh cmVkPSIxIgorZmkKKywKK2VuYWJsZV9zaGFyZWQ9IjEiCispCitBQ19TVUJTVChbZW5hYmxlX3No YXJlZF0pCisKK2RubCBFbmFibGUgc3RhdGljIGxpYnMKK0FDX0FSR19FTkFCTEUoW3N0YXRpY10s CisgIFtBU19IRUxQX1NUUklORyhbLS1lbmFibGUtc3RhdGljXSwgW0J1aWxkIHN0YXRpYyBsaWJh cmllc10pXSwKK2lmIHRlc3QgIngkZW5hYmxlX3N0YXRpYyIgPSAieG5vIiA7IHRoZW4KKyAgZW5h YmxlX3N0YXRpYz0iMCIKK2Vsc2UKKyAgZW5hYmxlX3N0YXRpYz0iMSIKK2ZpCissCitlbmFibGVf c3RhdGljPSIxIgorKQorQUNfU1VCU1QoW2VuYWJsZV9zdGF0aWNdKQorCitpZiB0ZXN0ICIkZW5h YmxlX3NoYXJlZCRlbmFibGVfc3RhdGljIiA9ICIwMCIgOyB0aGVuCisgIEFDX01TR19FUlJPUihb UGxlYXNlIGVuYWJsZSBvbmUgb2Ygc2hhcmVkIG9yIHN0YXRpYyBidWlsZHNdKQorZmkKKworZG5s IFBlcmZvcm0gbm8gbmFtZSBtYW5nbGluZyBieSBkZWZhdWx0LgorQUNfQVJHX1dJVEgoW21hbmds aW5nXSwKKyAgW0FTX0hFTFBfU1RSSU5HKFstLXdpdGgtbWFuZ2xpbmc9PG1hcD5dLCBbTWFuZ2xl IHN5bWJvbHMgaW4gPG1hcD5dKV0sCisgIFttYW5nbGluZ19tYXA9IiR3aXRoX21hbmdsaW5nIl0s IFttYW5nbGluZ19tYXA9IiJdKQorCitkbmwgRG8gbm90IHByZWZpeCBwdWJsaWMgQVBJcyBieSBk ZWZhdWx0LgorQUNfQVJHX1dJVEgoW2plbWFsbG9jX3ByZWZpeF0sCisgIFtBU19IRUxQX1NUUklO RyhbLS13aXRoLWplbWFsbG9jLXByZWZpeD08cHJlZml4Pl0sIFtQcmVmaXggdG8gcHJlcGVuZCB0 byBhbGwgcHVibGljIEFQSXNdKV0sCisgIFtKRU1BTExPQ19QUkVGSVg9IiR3aXRoX2plbWFsbG9j X3ByZWZpeCJdLAorICBbaWYgdGVzdCAieCRhYmkiICE9ICJ4bWFjaG8iIC1hICJ4JGFiaSIgIT0g InhwZWNvZmYiOyB0aGVuCisgIEpFTUFMTE9DX1BSRUZJWD0iIgorZWxzZQorICBKRU1BTExPQ19Q UkVGSVg9ImplXyIKK2ZpXQorKQoraWYgdGVzdCAieCRKRU1BTExPQ19QUkVGSVgiID0gIngiIDsg dGhlbgorICBBQ19ERUZJTkUoW0pFTUFMTE9DX0lTX01BTExPQ10sIFsgXSwgWyBdKQorZWxzZQor ICBKRU1BTExPQ19DUFJFRklYPWBlY2hvICR7SkVNQUxMT0NfUFJFRklYfSB8IHRyICJhLXoiICJB LVoiYAorICBBQ19ERUZJTkVfVU5RVU9URUQoW0pFTUFMTE9DX1BSRUZJWF0sIFsiJEpFTUFMTE9D X1BSRUZJWCJdLCBbIF0pCisgIEFDX0RFRklORV9VTlFVT1RFRChbSkVNQUxMT0NfQ1BSRUZJWF0s IFsiJEpFTUFMTE9DX0NQUkVGSVgiXSwgWyBdKQorZmkKK0FDX1NVQlNUKFtKRU1BTExPQ19QUkVG SVhdKQorQUNfU1VCU1QoW0pFTUFMTE9DX0NQUkVGSVhdKQorCitBQ19BUkdfV0lUSChbZXhwb3J0 XSwKKyAgW0FTX0hFTFBfU1RSSU5HKFstLXdpdGhvdXQtZXhwb3J0XSwgW2Rpc2FibGUgZXhwb3J0 aW5nIGplbWFsbG9jIHB1YmxpYyBBUElzXSldLAorICBbaWYgdGVzdCAieCR3aXRoX2V4cG9ydCIg PSAieG5vIjsgdGhlbgorICBBQ19ERUZJTkUoW0pFTUFMTE9DX0VYUE9SVF0sW10sIFsgXSkKK2Zp XQorKQorCitwdWJsaWNfc3ltcz0iYWxpZ25lZF9hbGxvYyBjYWxsb2MgZGFsbG9jeCBmcmVlIG1h bGxjdGwgbWFsbGN0bGJ5bWliIG1hbGxjdGxuYW1ldG9taWIgbWFsbG9jIG1hbGxvY19jb25mIG1h bGxvY19jb25mXzJfY29uZl9oYXJkZXIgbWFsbG9jX21lc3NhZ2UgbWFsbG9jX3N0YXRzX3ByaW50 IG1hbGxvY191c2FibGVfc2l6ZSBtYWxsb2N4IHNtYWxsb2N4XyR7amVtYWxsb2NfdmVyc2lvbl9n aWR9IG5hbGxvY3ggcG9zaXhfbWVtYWxpZ24gcmFsbG9jeCByZWFsbG9jIHNhbGxvY3ggc2RhbGxv Y3ggeGFsbG9jeCIKK2RubCBDaGVjayBmb3IgYWRkaXRpb25hbCBwbGF0Zm9ybS1zcGVjaWZpYyBw dWJsaWMgQVBJIGZ1bmN0aW9ucy4KK0FDX0NIRUNLX0ZVTkMoW21lbWFsaWduXSwKKwkgICAgICBb QUNfREVGSU5FKFtKRU1BTExPQ19PVkVSUklERV9NRU1BTElHTl0sIFsgXSwgWyBdKQorCSAgICAg ICBwdWJsaWNfc3ltcz0iJHtwdWJsaWNfc3ltc30gbWVtYWxpZ24iXSkKK0FDX0NIRUNLX0ZVTkMo W3ZhbGxvY10sCisJICAgICAgW0FDX0RFRklORShbSkVNQUxMT0NfT1ZFUlJJREVfVkFMTE9DXSwg WyBdLCBbIF0pCisJICAgICAgIHB1YmxpY19zeW1zPSIke3B1YmxpY19zeW1zfSB2YWxsb2MiXSkK K0FDX0NIRUNLX0ZVTkMoW21hbGxvY19zaXplXSwKKwkgICAgICBbQUNfREVGSU5FKFtKRU1BTExP Q19IQVZFX01BTExPQ19TSVpFXSwgWyBdLCBbIF0pCisJICAgICAgIHB1YmxpY19zeW1zPSIke3B1 YmxpY19zeW1zfSBtYWxsb2Nfc2l6ZSJdKQorCitkbmwgQ2hlY2sgZm9yIGFsbG9jYXRvci1yZWxh dGVkIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSB3cmFwcGVkLgord3JhcF9zeW1zPQoraWYgdGVz dCAieCR7SkVNQUxMT0NfUFJFRklYfSIgPSAieCIgOyB0aGVuCisgIEFDX0NIRUNLX0ZVTkMoW19f bGliY19jYWxsb2NdLAorCQlbQUNfREVGSU5FKFtKRU1BTExPQ19PVkVSUklERV9fX0xJQkNfQ0FM TE9DXSwgWyBdLCBbIF0pCisJCSB3cmFwX3N5bXM9IiR7d3JhcF9zeW1zfSBfX2xpYmNfY2FsbG9j Il0pCisgIEFDX0NIRUNLX0ZVTkMoW19fbGliY19mcmVlXSwKKwkJW0FDX0RFRklORShbSkVNQUxM T0NfT1ZFUlJJREVfX19MSUJDX0ZSRUVdLCBbIF0sIFsgXSkKKwkJIHdyYXBfc3ltcz0iJHt3cmFw X3N5bXN9IF9fbGliY19mcmVlIl0pCisgIEFDX0NIRUNLX0ZVTkMoW19fbGliY19tYWxsb2NdLAor CQlbQUNfREVGSU5FKFtKRU1BTExPQ19PVkVSUklERV9fX0xJQkNfTUFMTE9DXSwgWyBdLCBbIF0p CisJCSB3cmFwX3N5bXM9IiR7d3JhcF9zeW1zfSBfX2xpYmNfbWFsbG9jIl0pCisgIEFDX0NIRUNL X0ZVTkMoW19fbGliY19tZW1hbGlnbl0sCisJCVtBQ19ERUZJTkUoW0pFTUFMTE9DX09WRVJSSURF X19fTElCQ19NRU1BTElHTl0sIFsgXSwgWyBdKQorCQkgd3JhcF9zeW1zPSIke3dyYXBfc3ltc30g X19saWJjX21lbWFsaWduIl0pCisgIEFDX0NIRUNLX0ZVTkMoW19fbGliY19yZWFsbG9jXSwKKwkJ W0FDX0RFRklORShbSkVNQUxMT0NfT1ZFUlJJREVfX19MSUJDX1JFQUxMT0NdLCBbIF0sIFsgXSkK KwkJIHdyYXBfc3ltcz0iJHt3cmFwX3N5bXN9IF9fbGliY19yZWFsbG9jIl0pCisgIEFDX0NIRUNL X0ZVTkMoW19fbGliY192YWxsb2NdLAorCQlbQUNfREVGSU5FKFtKRU1BTExPQ19PVkVSUklERV9f X0xJQkNfVkFMTE9DXSwgWyBdLCBbIF0pCisJCSB3cmFwX3N5bXM9IiR7d3JhcF9zeW1zfSBfX2xp YmNfdmFsbG9jIl0pCisgIEFDX0NIRUNLX0ZVTkMoW19fcG9zaXhfbWVtYWxpZ25dLAorCQlbQUNf REVGSU5FKFtKRU1BTExPQ19PVkVSUklERV9fX1BPU0lYX01FTUFMSUdOXSwgWyBdLCBbIF0pCisJ CSB3cmFwX3N5bXM9IiR7d3JhcF9zeW1zfSBfX3Bvc2l4X21lbWFsaWduIl0pCitmaQorCitjYXNl ICIke2hvc3R9IiBpbgorICAqLSotbWluZ3cqIHwgKi0qLWN5Z3dpbiopCisgICAgd3JhcF9zeW1z PSIke3dyYXBfc3ltc30gdGxzX2NhbGxiYWNrIgorICAgIDs7CisgICopCisgICAgOzsKK2VzYWMK KworZG5sIE1hbmdsZSBsaWJyYXJ5LXByaXZhdGUgQVBJcy4KK0FDX0FSR19XSVRIKFtwcml2YXRl X25hbWVzcGFjZV0sCisgIFtBU19IRUxQX1NUUklORyhbLS13aXRoLXByaXZhdGUtbmFtZXNwYWNl PTxwcmVmaXg+XSwgW1ByZWZpeCB0byBwcmVwZW5kIHRvIGFsbCBsaWJyYXJ5LXByaXZhdGUgQVBJ c10pXSwKKyAgW0pFTUFMTE9DX1BSSVZBVEVfTkFNRVNQQUNFPSIke3dpdGhfcHJpdmF0ZV9uYW1l c3BhY2V9amVfIl0sCisgIFtKRU1BTExPQ19QUklWQVRFX05BTUVTUEFDRT0iamVfIl0KKykKK0FD X0RFRklORV9VTlFVT1RFRChbSkVNQUxMT0NfUFJJVkFURV9OQU1FU1BBQ0VdLCBbJEpFTUFMTE9D X1BSSVZBVEVfTkFNRVNQQUNFXSwgWyBdKQorcHJpdmF0ZV9uYW1lc3BhY2U9IiRKRU1BTExPQ19Q UklWQVRFX05BTUVTUEFDRSIKK0FDX1NVQlNUKFtwcml2YXRlX25hbWVzcGFjZV0pCisKK2RubCBE byBub3QgYWRkIHN1ZmZpeCB0byBpbnN0YWxsZWQgZmlsZXMgYnkgZGVmYXVsdC4KK0FDX0FSR19X SVRIKFtpbnN0YWxsX3N1ZmZpeF0sCisgIFtBU19IRUxQX1NUUklORyhbLS13aXRoLWluc3RhbGwt c3VmZml4PTxzdWZmaXg+XSwgW1N1ZmZpeCB0byBhcHBlbmQgdG8gYWxsIGluc3RhbGxlZCBmaWxl c10pXSwKKyAgW2Nhc2UgIiR3aXRoX2luc3RhbGxfc3VmZml4IiBpbgorICAgKlwgKiApIEFDX01T R19FUlJPUihbSW5zdGFsbCBzdWZmaXggc2hvdWxkIG5vdCBjb250YWluIHNwYWNlc10pIDs7Cisg ICAqICkgSU5TVEFMTF9TVUZGSVg9IiR3aXRoX2luc3RhbGxfc3VmZml4IiA7OworZXNhY10sCisg IFtJTlNUQUxMX1NVRkZJWD1dCispCitpbnN0YWxsX3N1ZmZpeD0iJElOU1RBTExfU1VGRklYIgor QUNfU1VCU1QoW2luc3RhbGxfc3VmZml4XSkKKworZG5sIFNwZWNpZnkgZGVmYXVsdCBtYWxsb2Nf Y29uZi4KK0FDX0FSR19XSVRIKFttYWxsb2NfY29uZl0sCisgIFtBU19IRUxQX1NUUklORyhbLS13 aXRoLW1hbGxvYy1jb25mPTxtYWxsb2NfY29uZj5dLCBbY29uZmlnLm1hbGxvY19jb25mIG9wdGlv bnMgc3RyaW5nXSldLAorICBbSkVNQUxMT0NfQ09ORklHX01BTExPQ19DT05GPSIkd2l0aF9tYWxs b2NfY29uZiJdLAorICBbSkVNQUxMT0NfQ09ORklHX01BTExPQ19DT05GPSIiXQorKQorY29uZmln X21hbGxvY19jb25mPSIkSkVNQUxMT0NfQ09ORklHX01BTExPQ19DT05GIgorQUNfREVGSU5FX1VO UVVPVEVEKFtKRU1BTExPQ19DT05GSUdfTUFMTE9DX0NPTkZdLCBbIiRjb25maWdfbWFsbG9jX2Nv bmYiXSwgWyBdKQorCitkbmwgU3Vic3RpdHV0ZSBAamVfQCBpbiBqZW1hbGxvY19wcm90b3MuaC5p biwgcHJpbWFyaWx5IHRvIG1ha2UgZ2VuZXJhdGlvbiBvZgorZG5sIGplbWFsbG9jX3Byb3Rvc19q ZXQuaCBlYXN5LgoramVfPSJqZV8iCitBQ19TVUJTVChbamVfXSkKKworY2Znb3V0cHV0c19pbj0i TWFrZWZpbGUuaW4iCitjZmdvdXRwdXRzX2luPSIke2NmZ291dHB1dHNfaW59IGplbWFsbG9jLnBj LmluIgorY2Znb3V0cHV0c19pbj0iJHtjZmdvdXRwdXRzX2lufSBkb2MvaHRtbC54c2wuaW4iCitj ZmdvdXRwdXRzX2luPSIke2NmZ291dHB1dHNfaW59IGRvYy9tYW5wYWdlcy54c2wuaW4iCitjZmdv dXRwdXRzX2luPSIke2NmZ291dHB1dHNfaW59IGRvYy9qZW1hbGxvYy54bWwuaW4iCitjZmdvdXRw dXRzX2luPSIke2NmZ291dHB1dHNfaW59IGluY2x1ZGUvamVtYWxsb2MvamVtYWxsb2NfbWFjcm9z LmguaW4iCitjZmdvdXRwdXRzX2luPSIke2NmZ291dHB1dHNfaW59IGluY2x1ZGUvamVtYWxsb2Mv amVtYWxsb2NfcHJvdG9zLmguaW4iCitjZmdvdXRwdXRzX2luPSIke2NmZ291dHB1dHNfaW59IGlu Y2x1ZGUvamVtYWxsb2MvamVtYWxsb2NfdHlwZWRlZnMuaC5pbiIKK2NmZ291dHB1dHNfaW49IiR7 Y2Znb3V0cHV0c19pbn0gaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9qZW1hbGxvY19wcmVhbWJs ZS5oLmluIgorY2Znb3V0cHV0c19pbj0iJHtjZmdvdXRwdXRzX2lufSB0ZXN0L3Rlc3Quc2guaW4i CitjZmdvdXRwdXRzX2luPSIke2NmZ291dHB1dHNfaW59IHRlc3QvaW5jbHVkZS90ZXN0L2plbWFs bG9jX3Rlc3QuaC5pbiIKKworY2Znb3V0cHV0c19vdXQ9Ik1ha2VmaWxlIgorY2Znb3V0cHV0c19v dXQ9IiR7Y2Znb3V0cHV0c19vdXR9IGplbWFsbG9jLnBjIgorY2Znb3V0cHV0c19vdXQ9IiR7Y2Zn b3V0cHV0c19vdXR9IGRvYy9odG1sLnhzbCIKK2NmZ291dHB1dHNfb3V0PSIke2NmZ291dHB1dHNf b3V0fSBkb2MvbWFucGFnZXMueHNsIgorY2Znb3V0cHV0c19vdXQ9IiR7Y2Znb3V0cHV0c19vdXR9 IGRvYy9qZW1hbGxvYy54bWwiCitjZmdvdXRwdXRzX291dD0iJHtjZmdvdXRwdXRzX291dH0gaW5j bHVkZS9qZW1hbGxvYy9qZW1hbGxvY19tYWNyb3MuaCIKK2NmZ291dHB1dHNfb3V0PSIke2NmZ291 dHB1dHNfb3V0fSBpbmNsdWRlL2plbWFsbG9jL2plbWFsbG9jX3Byb3Rvcy5oIgorY2Znb3V0cHV0 c19vdXQ9IiR7Y2Znb3V0cHV0c19vdXR9IGluY2x1ZGUvamVtYWxsb2MvamVtYWxsb2NfdHlwZWRl ZnMuaCIKK2NmZ291dHB1dHNfb3V0PSIke2NmZ291dHB1dHNfb3V0fSBpbmNsdWRlL2plbWFsbG9j L2ludGVybmFsL2plbWFsbG9jX3ByZWFtYmxlLmgiCitjZmdvdXRwdXRzX291dD0iJHtjZmdvdXRw dXRzX291dH0gdGVzdC90ZXN0LnNoIgorY2Znb3V0cHV0c19vdXQ9IiR7Y2Znb3V0cHV0c19vdXR9 IHRlc3QvaW5jbHVkZS90ZXN0L2plbWFsbG9jX3Rlc3QuaCIKKworY2Znb3V0cHV0c190dXA9Ik1h a2VmaWxlIgorY2Znb3V0cHV0c190dXA9IiR7Y2Znb3V0cHV0c190dXB9IGplbWFsbG9jLnBjOmpl bWFsbG9jLnBjLmluIgorY2Znb3V0cHV0c190dXA9IiR7Y2Znb3V0cHV0c190dXB9IGRvYy9odG1s LnhzbDpkb2MvaHRtbC54c2wuaW4iCitjZmdvdXRwdXRzX3R1cD0iJHtjZmdvdXRwdXRzX3R1cH0g ZG9jL21hbnBhZ2VzLnhzbDpkb2MvbWFucGFnZXMueHNsLmluIgorY2Znb3V0cHV0c190dXA9IiR7 Y2Znb3V0cHV0c190dXB9IGRvYy9qZW1hbGxvYy54bWw6ZG9jL2plbWFsbG9jLnhtbC5pbiIKK2Nm Z291dHB1dHNfdHVwPSIke2NmZ291dHB1dHNfdHVwfSBpbmNsdWRlL2plbWFsbG9jL2plbWFsbG9j X21hY3Jvcy5oOmluY2x1ZGUvamVtYWxsb2MvamVtYWxsb2NfbWFjcm9zLmguaW4iCitjZmdvdXRw dXRzX3R1cD0iJHtjZmdvdXRwdXRzX3R1cH0gaW5jbHVkZS9qZW1hbGxvYy9qZW1hbGxvY19wcm90 b3MuaDppbmNsdWRlL2plbWFsbG9jL2plbWFsbG9jX3Byb3Rvcy5oLmluIgorY2Znb3V0cHV0c190 dXA9IiR7Y2Znb3V0cHV0c190dXB9IGluY2x1ZGUvamVtYWxsb2MvamVtYWxsb2NfdHlwZWRlZnMu aDppbmNsdWRlL2plbWFsbG9jL2plbWFsbG9jX3R5cGVkZWZzLmguaW4iCitjZmdvdXRwdXRzX3R1 cD0iJHtjZmdvdXRwdXRzX3R1cH0gaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9qZW1hbGxvY19w cmVhbWJsZS5oIgorY2Znb3V0cHV0c190dXA9IiR7Y2Znb3V0cHV0c190dXB9IHRlc3QvdGVzdC5z aDp0ZXN0L3Rlc3Quc2guaW4iCitjZmdvdXRwdXRzX3R1cD0iJHtjZmdvdXRwdXRzX3R1cH0gdGVz dC9pbmNsdWRlL3Rlc3QvamVtYWxsb2NfdGVzdC5oOnRlc3QvaW5jbHVkZS90ZXN0L2plbWFsbG9j X3Rlc3QuaC5pbiIKKworY2ZnaGRyc19pbj0iaW5jbHVkZS9qZW1hbGxvYy9qZW1hbGxvY19kZWZz LmguaW4iCitjZmdoZHJzX2luPSIke2NmZ2hkcnNfaW59IGluY2x1ZGUvamVtYWxsb2MvaW50ZXJu YWwvamVtYWxsb2NfaW50ZXJuYWxfZGVmcy5oLmluIgorY2ZnaGRyc19pbj0iJHtjZmdoZHJzX2lu fSBpbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL3ByaXZhdGVfc3ltYm9scy5zaCIKK2NmZ2hkcnNf aW49IiR7Y2ZnaGRyc19pbn0gaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9wcml2YXRlX25hbWVz cGFjZS5zaCIKK2NmZ2hkcnNfaW49IiR7Y2ZnaGRyc19pbn0gaW5jbHVkZS9qZW1hbGxvYy9pbnRl cm5hbC9wdWJsaWNfbmFtZXNwYWNlLnNoIgorY2ZnaGRyc19pbj0iJHtjZmdoZHJzX2lufSBpbmNs dWRlL2plbWFsbG9jL2ludGVybmFsL3B1YmxpY191bm5hbWVzcGFjZS5zaCIKK2NmZ2hkcnNfaW49 IiR7Y2ZnaGRyc19pbn0gaW5jbHVkZS9qZW1hbGxvYy9qZW1hbGxvY19yZW5hbWUuc2giCitjZmdo ZHJzX2luPSIke2NmZ2hkcnNfaW59IGluY2x1ZGUvamVtYWxsb2MvamVtYWxsb2NfbWFuZ2xlLnNo IgorY2ZnaGRyc19pbj0iJHtjZmdoZHJzX2lufSBpbmNsdWRlL2plbWFsbG9jL2plbWFsbG9jLnNo IgorY2ZnaGRyc19pbj0iJHtjZmdoZHJzX2lufSB0ZXN0L2luY2x1ZGUvdGVzdC9qZW1hbGxvY190 ZXN0X2RlZnMuaC5pbiIKKworY2ZnaGRyc19vdXQ9ImluY2x1ZGUvamVtYWxsb2MvamVtYWxsb2Nf ZGVmcy5oIgorY2ZnaGRyc19vdXQ9IiR7Y2ZnaGRyc19vdXR9IGluY2x1ZGUvamVtYWxsb2MvamVt YWxsb2Mke2luc3RhbGxfc3VmZml4fS5oIgorY2ZnaGRyc19vdXQ9IiR7Y2ZnaGRyc19vdXR9IGlu Y2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvcHJpdmF0ZV9zeW1ib2xzLmF3ayIKK2NmZ2hkcnNfb3V0 PSIke2NmZ2hkcnNfb3V0fSBpbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL3ByaXZhdGVfc3ltYm9s c19qZXQuYXdrIgorY2ZnaGRyc19vdXQ9IiR7Y2ZnaGRyc19vdXR9IGluY2x1ZGUvamVtYWxsb2Mv aW50ZXJuYWwvcHVibGljX3N5bWJvbHMudHh0IgorY2ZnaGRyc19vdXQ9IiR7Y2ZnaGRyc19vdXR9 IGluY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvcHVibGljX25hbWVzcGFjZS5oIgorY2ZnaGRyc19v dXQ9IiR7Y2ZnaGRyc19vdXR9IGluY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvcHVibGljX3VubmFt ZXNwYWNlLmgiCitjZmdoZHJzX291dD0iJHtjZmdoZHJzX291dH0gaW5jbHVkZS9qZW1hbGxvYy9q ZW1hbGxvY19wcm90b3NfamV0LmgiCitjZmdoZHJzX291dD0iJHtjZmdoZHJzX291dH0gaW5jbHVk ZS9qZW1hbGxvYy9qZW1hbGxvY19yZW5hbWUuaCIKK2NmZ2hkcnNfb3V0PSIke2NmZ2hkcnNfb3V0 fSBpbmNsdWRlL2plbWFsbG9jL2plbWFsbG9jX21hbmdsZS5oIgorY2ZnaGRyc19vdXQ9IiR7Y2Zn aGRyc19vdXR9IGluY2x1ZGUvamVtYWxsb2MvamVtYWxsb2NfbWFuZ2xlX2pldC5oIgorY2ZnaGRy c19vdXQ9IiR7Y2ZnaGRyc19vdXR9IGluY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvamVtYWxsb2Nf aW50ZXJuYWxfZGVmcy5oIgorY2ZnaGRyc19vdXQ9IiR7Y2ZnaGRyc19vdXR9IHRlc3QvaW5jbHVk ZS90ZXN0L2plbWFsbG9jX3Rlc3RfZGVmcy5oIgorCitjZmdoZHJzX3R1cD0iaW5jbHVkZS9qZW1h bGxvYy9qZW1hbGxvY19kZWZzLmg6aW5jbHVkZS9qZW1hbGxvYy9qZW1hbGxvY19kZWZzLmguaW4i CitjZmdoZHJzX3R1cD0iJHtjZmdoZHJzX3R1cH0gaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9q ZW1hbGxvY19pbnRlcm5hbF9kZWZzLmg6aW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9qZW1hbGxv Y19pbnRlcm5hbF9kZWZzLmguaW4iCitjZmdoZHJzX3R1cD0iJHtjZmdoZHJzX3R1cH0gdGVzdC9p bmNsdWRlL3Rlc3QvamVtYWxsb2NfdGVzdF9kZWZzLmg6dGVzdC9pbmNsdWRlL3Rlc3QvamVtYWxs b2NfdGVzdF9kZWZzLmguaW4iCisKK2RubCA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitkbmwgamVtYWxs b2MgYnVpbGQgb3B0aW9ucy4KK2RubAorCitkbmwgRG8gbm90IGNvbXBpbGUgd2l0aCBkZWJ1Z2dp bmcgYnkgZGVmYXVsdC4KK0FDX0FSR19FTkFCTEUoW2RlYnVnXSwKKyAgW0FTX0hFTFBfU1RSSU5H KFstLWVuYWJsZS1kZWJ1Z10sCisgICAgICAgICAgICAgICAgICBbQnVpbGQgZGVidWdnaW5nIGNv ZGVdKV0sCitbaWYgdGVzdCAieCRlbmFibGVfZGVidWciID0gInhubyIgOyB0aGVuCisgIGVuYWJs ZV9kZWJ1Zz0iMCIKK2Vsc2UKKyAgZW5hYmxlX2RlYnVnPSIxIgorZmkKK10sCitbZW5hYmxlX2Rl YnVnPSIwIl0KKykKK2lmIHRlc3QgIngkZW5hYmxlX2RlYnVnIiA9ICJ4MSIgOyB0aGVuCisgIEFD X0RFRklORShbSkVNQUxMT0NfREVCVUddLCBbIF0sIFsgXSkKK2ZpCitBQ19TVUJTVChbZW5hYmxl X2RlYnVnXSkKKworZG5sIE9ubHkgb3B0aW1pemUgaWYgbm90IGRlYnVnZ2luZy4KK2lmIHRlc3Qg IngkZW5hYmxlX2RlYnVnIiA9ICJ4MCIgOyB0aGVuCisgIGlmIHRlc3QgIngkR0NDIiA9ICJ4eWVz IiA7IHRoZW4KKyAgICBKRV9DRkxBR1NfQUREKFstTzNdKQorICAgIEpFX0NYWEZMQUdTX0FERChb LU8zXSkKKyAgICBKRV9DRkxBR1NfQUREKFstZnVucm9sbC1sb29wc10pCisgIGVsaWYgdGVzdCAi eCRqZV9jdl9tc3ZjIiA9ICJ4eWVzIiA7IHRoZW4KKyAgICBKRV9DRkxBR1NfQUREKFstTzJdKQor ICAgIEpFX0NYWEZMQUdTX0FERChbLU8yXSkKKyAgZWxzZQorICAgIEpFX0NGTEFHU19BREQoWy1P XSkKKyAgICBKRV9DWFhGTEFHU19BREQoWy1PXSkKKyAgZmkKK2ZpCisKK2RubCBFbmFibGUgc3Rh dGlzdGljcyBjYWxjdWxhdGlvbiBieSBkZWZhdWx0LgorQUNfQVJHX0VOQUJMRShbc3RhdHNdLAor ICBbQVNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS1zdGF0c10sCisgICAgICAgICAgICAgICAgICBb RGlzYWJsZSBzdGF0aXN0aWNzIGNhbGN1bGF0aW9uL3JlcG9ydGluZ10pXSwKK1tpZiB0ZXN0ICJ4 JGVuYWJsZV9zdGF0cyIgPSAieG5vIiA7IHRoZW4KKyAgZW5hYmxlX3N0YXRzPSIwIgorZWxzZQor ICBlbmFibGVfc3RhdHM9IjEiCitmaQorXSwKK1tlbmFibGVfc3RhdHM9IjEiXQorKQoraWYgdGVz dCAieCRlbmFibGVfc3RhdHMiID0gIngxIiA7IHRoZW4KKyAgQUNfREVGSU5FKFtKRU1BTExPQ19T VEFUU10sIFsgXSwgWyBdKQorZmkKK0FDX1NVQlNUKFtlbmFibGVfc3RhdHNdKQorCitkbmwgRG8g bm90IGVuYWJsZSBzbWFsbG9jeCBieSBkZWZhdWx0LgorQUNfQVJHX0VOQUJMRShbZXhwZXJpbWVu dGFsX3NtYWxsb2N4XSwKKyAgW0FTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1leHBlcmltZW50YWwt c21hbGxvY3hdLCBbRW5hYmxlIGV4cGVyaW1lbnRhbCBzbWFsbG9jeCBBUEldKV0sCitbaWYgdGVz dCAieCRlbmFibGVfZXhwZXJpbWVudGFsX3NtYWxsb2N4IiA9ICJ4bm8iIDsgdGhlbgorZW5hYmxl X2V4cGVyaW1lbnRhbF9zbWFsbG9jeD0iMCIKK2Vsc2UKK2VuYWJsZV9leHBlcmltZW50YWxfc21h bGxvY3g9IjEiCitmaQorXSwKK1tlbmFibGVfZXhwZXJpbWVudGFsX3NtYWxsb2N4PSIwIl0KKykK K2lmIHRlc3QgIngkZW5hYmxlX2V4cGVyaW1lbnRhbF9zbWFsbG9jeCIgPSAieDEiIDsgdGhlbgor ICBBQ19ERUZJTkUoW0pFTUFMTE9DX0VYUEVSSU1FTlRBTF9TTUFMTE9DWF9BUEldLCBbIF0sIFsg XSkKK2ZpCitBQ19TVUJTVChbZW5hYmxlX2V4cGVyaW1lbnRhbF9zbWFsbG9jeF0pCisKK2RubCBE byBub3QgZW5hYmxlIHByb2ZpbGluZyBieSBkZWZhdWx0LgorQUNfQVJHX0VOQUJMRShbcHJvZl0s CisgIFtBU19IRUxQX1NUUklORyhbLS1lbmFibGUtcHJvZl0sIFtFbmFibGUgYWxsb2NhdGlvbiBw cm9maWxpbmddKV0sCitbaWYgdGVzdCAieCRlbmFibGVfcHJvZiIgPSAieG5vIiA7IHRoZW4KKyAg ZW5hYmxlX3Byb2Y9IjAiCitlbHNlCisgIGVuYWJsZV9wcm9mPSIxIgorZmkKK10sCitbZW5hYmxl X3Byb2Y9IjAiXQorKQoraWYgdGVzdCAieCRlbmFibGVfcHJvZiIgPSAieDEiIDsgdGhlbgorICBi YWNrdHJhY2VfbWV0aG9kPSIiCitlbHNlCisgIGJhY2t0cmFjZV9tZXRob2Q9Ik4vQSIKK2ZpCisK K0FDX0FSR19FTkFCTEUoW3Byb2YtbGlidW53aW5kXSwKKyAgW0FTX0hFTFBfU1RSSU5HKFstLWVu YWJsZS1wcm9mLWxpYnVud2luZF0sIFtVc2UgbGlidW53aW5kIGZvciBiYWNrdHJhY2luZ10pXSwK K1tpZiB0ZXN0ICJ4JGVuYWJsZV9wcm9mX2xpYnVud2luZCIgPSAieG5vIiA7IHRoZW4KKyAgZW5h YmxlX3Byb2ZfbGlidW53aW5kPSIwIgorZWxzZQorICBlbmFibGVfcHJvZl9saWJ1bndpbmQ9IjEi CisgIGlmIHRlc3QgIngkZW5hYmxlX3Byb2YiID0gIngwIiA7IHRoZW4KKyAgICBBQ19NU0dfRVJS T1IoWy0tZW5hYmxlLXByb2YtbGlidW53aW5kIHNob3VsZCBvbmx5IGJlIHVzZWQgd2l0aCAtLWVu YWJsZS1wcm9mXSkKKyAgZmkKK2ZpCitdLAorW2VuYWJsZV9wcm9mX2xpYnVud2luZD0iMCJdCisp CitBQ19BUkdfV0lUSChbc3RhdGljX2xpYnVud2luZF0sCisgIFtBU19IRUxQX1NUUklORyhbLS13 aXRoLXN0YXRpYy1saWJ1bndpbmQ9PGxpYnVud2luZC5hPl0sCisgIFtQYXRoIHRvIHN0YXRpYyBs aWJ1bndpbmQgbGlicmFyeTsgdXNlIHJhdGhlciB0aGFuIGR5bmFtaWNhbGx5IGxpbmtpbmddKV0s CitpZiB0ZXN0ICJ4JHdpdGhfc3RhdGljX2xpYnVud2luZCIgPSAieG5vIiA7IHRoZW4KKyAgTFVO V0lORD0iLWx1bndpbmQiCitlbHNlCisgIGlmIHRlc3QgISAtZiAiJHdpdGhfc3RhdGljX2xpYnVu d2luZCIgOyB0aGVuCisgICAgQUNfTVNHX0VSUk9SKFtTdGF0aWMgbGlidW53aW5kIG5vdCBmb3Vu ZDogJHdpdGhfc3RhdGljX2xpYnVud2luZF0pCisgIGZpCisgIExVTldJTkQ9IiR3aXRoX3N0YXRp Y19saWJ1bndpbmQiCitmaSwKKyAgTFVOV0lORD0iLWx1bndpbmQiCispCitpZiB0ZXN0ICJ4JGJh Y2t0cmFjZV9tZXRob2QiID0gIngiIC1hICJ4JGVuYWJsZV9wcm9mX2xpYnVud2luZCIgPSAieDEi IDsgdGhlbgorICBBQ19DSEVDS19IRUFERVJTKFtsaWJ1bndpbmQuaF0sICwgW2VuYWJsZV9wcm9m X2xpYnVud2luZD0iMCJdKQorICBpZiB0ZXN0ICJ4JExVTldJTkQiID0gIngtbHVud2luZCIgOyB0 aGVuCisgICAgQUNfQ0hFQ0tfTElCKFt1bndpbmRdLCBbdW53X2JhY2t0cmFjZV0sIFtKRV9BUFBF TkRfVlMoTElCUywgJExVTldJTkQpXSwKKyAgICAgICAgICAgICAgICAgW2VuYWJsZV9wcm9mX2xp YnVud2luZD0iMCJdKQorICBlbHNlCisgICAgSkVfQVBQRU5EX1ZTKExJQlMsICRMVU5XSU5EKQor ICBmaQorICBpZiB0ZXN0ICJ4JHtlbmFibGVfcHJvZl9saWJ1bndpbmR9IiA9ICJ4MSIgOyB0aGVu CisgICAgYmFja3RyYWNlX21ldGhvZD0ibGlidW53aW5kIgorICAgIEFDX0RFRklORShbSkVNQUxM T0NfUFJPRl9MSUJVTldJTkRdLCBbIF0sIFsgXSkKKyAgZmkKK2ZpCisKK0FDX0FSR19FTkFCTEUo W3Byb2YtbGliZ2NjXSwKKyAgW0FTX0hFTFBfU1RSSU5HKFstLWRpc2FibGUtcHJvZi1saWJnY2Nd LAorICBbRG8gbm90IHVzZSBsaWJnY2MgZm9yIGJhY2t0cmFjaW5nXSldLAorW2lmIHRlc3QgIngk ZW5hYmxlX3Byb2ZfbGliZ2NjIiA9ICJ4bm8iIDsgdGhlbgorICBlbmFibGVfcHJvZl9saWJnY2M9 IjAiCitlbHNlCisgIGVuYWJsZV9wcm9mX2xpYmdjYz0iMSIKK2ZpCitdLAorW2VuYWJsZV9wcm9m X2xpYmdjYz0iMSJdCispCitpZiB0ZXN0ICJ4JGJhY2t0cmFjZV9tZXRob2QiID0gIngiIC1hICJ4 JGVuYWJsZV9wcm9mX2xpYmdjYyIgPSAieDEiIFwKKyAgICAgLWEgIngkR0NDIiA9ICJ4eWVzIiA7 IHRoZW4KKyAgQUNfQ0hFQ0tfSEVBREVSUyhbdW53aW5kLmhdLCAsIFtlbmFibGVfcHJvZl9saWJn Y2M9IjAiXSkKKyAgaWYgdGVzdCAieCR7ZW5hYmxlX3Byb2ZfbGliZ2NjfSIgPSAieDEiIDsgdGhl bgorICAgIEFDX0NIRUNLX0xJQihbZ2NjXSwgW19VbndpbmRfQmFja3RyYWNlXSwgW0pFX0FQUEVO RF9WUyhMSUJTLCAtbGdjYyldLCBbZW5hYmxlX3Byb2ZfbGliZ2NjPSIwIl0pCisgIGZpCisgIGlm IHRlc3QgIngke2VuYWJsZV9wcm9mX2xpYmdjY30iID0gIngxIiA7IHRoZW4KKyAgICBiYWNrdHJh Y2VfbWV0aG9kPSJsaWJnY2MiCisgICAgQUNfREVGSU5FKFtKRU1BTExPQ19QUk9GX0xJQkdDQ10s IFsgXSwgWyBdKQorICBmaQorZWxzZQorICBlbmFibGVfcHJvZl9saWJnY2M9IjAiCitmaQorCitB Q19BUkdfRU5BQkxFKFtwcm9mLWdjY10sCisgIFtBU19IRUxQX1NUUklORyhbLS1kaXNhYmxlLXBy b2YtZ2NjXSwKKyAgW0RvIG5vdCB1c2UgZ2NjIGludHJpbnNpY3MgZm9yIGJhY2t0cmFjaW5nXSld LAorW2lmIHRlc3QgIngkZW5hYmxlX3Byb2ZfZ2NjIiA9ICJ4bm8iIDsgdGhlbgorICBlbmFibGVf cHJvZl9nY2M9IjAiCitlbHNlCisgIGVuYWJsZV9wcm9mX2djYz0iMSIKK2ZpCitdLAorW2VuYWJs ZV9wcm9mX2djYz0iMSJdCispCitpZiB0ZXN0ICJ4JGJhY2t0cmFjZV9tZXRob2QiID0gIngiIC1h ICJ4JGVuYWJsZV9wcm9mX2djYyIgPSAieDEiIFwKKyAgICAgLWEgIngkR0NDIiA9ICJ4eWVzIiA7 IHRoZW4KKyAgSkVfQ0ZMQUdTX0FERChbLWZuby1vbWl0LWZyYW1lLXBvaW50ZXJdKQorICBiYWNr dHJhY2VfbWV0aG9kPSJnY2MgaW50cmluc2ljcyIKKyAgQUNfREVGSU5FKFtKRU1BTExPQ19QUk9G X0dDQ10sIFsgXSwgWyBdKQorZWxzZQorICBlbmFibGVfcHJvZl9nY2M9IjAiCitmaQorCitpZiB0 ZXN0ICJ4JGJhY2t0cmFjZV9tZXRob2QiID0gIngiIDsgdGhlbgorICBiYWNrdHJhY2VfbWV0aG9k PSJub25lIChkaXNhYmxpbmcgcHJvZmlsaW5nKSIKKyAgZW5hYmxlX3Byb2Y9IjAiCitmaQorQUNf TVNHX0NIRUNLSU5HKFtjb25maWd1cmVkIGJhY2t0cmFjaW5nIG1ldGhvZF0pCitBQ19NU0dfUkVT VUxUKFskYmFja3RyYWNlX21ldGhvZF0pCitpZiB0ZXN0ICJ4JGVuYWJsZV9wcm9mIiA9ICJ4MSIg OyB0aGVuCisgIGRubCBIZWFwIHByb2ZpbGluZyB1c2VzIHRoZSBsb2coMykgZnVuY3Rpb24uCisg IEpFX0FQUEVORF9WUyhMSUJTLCAkTE0pCisKKyAgQUNfREVGSU5FKFtKRU1BTExPQ19QUk9GXSwg WyBdLCBbIF0pCitmaQorQUNfU1VCU1QoW2VuYWJsZV9wcm9mXSkKKworZG5sIEluZGljYXRlIHdo ZXRoZXIgYWRqYWNlbnQgdmlydHVhbCBtZW1vcnkgbWFwcGluZ3MgYXV0b21hdGljYWxseSBjb2Fs ZXNjZQorZG5sIChhbmQgZnJhZ21lbnQgb24gZGVtYW5kKS4KK2lmIHRlc3QgIngke21hcHNfY29h bGVzY2V9IiA9ICJ4MSIgOyB0aGVuCisgIEFDX0RFRklORShbSkVNQUxMT0NfTUFQU19DT0FMRVND RV0sIFsgXSwgWyBdKQorZmkKKworZG5sIEluZGljYXRlIHdoZXRoZXIgdG8gcmV0YWluIG1lbW9y eSAocmF0aGVyIHRoYW4gdXNpbmcgbXVubWFwKCkpIGJ5IGRlZmF1bHQuCitpZiB0ZXN0ICJ4JGRl ZmF1bHRfcmV0YWluIiA9ICJ4MSIgOyB0aGVuCisgIEFDX0RFRklORShbSkVNQUxMT0NfUkVUQUlO XSwgWyBdLCBbIF0pCitmaQorCitkbmwgSW5kaWNhdGUgd2hldGhlciByZWFsbG9jKHB0ciwgMCkg ZGVmYXVsdHMgdG8gdGhlICJhbGxvYyIgYmVoYXZpb3IuCitpZiB0ZXN0ICJ4JHplcm9fcmVhbGxv Y19kZWZhdWx0X2ZyZWUiID0gIngxIiA7IHRoZW4KKyAgQUNfREVGSU5FKFtKRU1BTExPQ19aRVJP X1JFQUxMT0NfREVGQVVMVF9GUkVFXSwgWyBdLCBbIF0pCitmaQorCitkbmwgRW5hYmxlIGFsbG9j YXRpb24gZnJvbSBEU1MgaWYgc3VwcG9ydGVkIGJ5IHRoZSBPUy4KK2hhdmVfZHNzPSIxIgorZG5s IENoZWNrIHdoZXRoZXIgdGhlIEJTRC9TVVN2MSBzYnJrKCkgZXhpc3RzLiAgSWYgbm90LCBkaXNh YmxlIERTUyBzdXBwb3J0LgorQUNfQ0hFQ0tfRlVOQyhbc2Jya10sIFtoYXZlX3Nicms9IjEiXSwg W2hhdmVfc2Jyaz0iMCJdKQoraWYgdGVzdCAieCRoYXZlX3NicmsiID0gIngxIiA7IHRoZW4KKyAg aWYgdGVzdCAieCRzYnJrX2RlcHJlY2F0ZWQiID0gIngxIiA7IHRoZW4KKyAgICBBQ19NU0dfUkVT VUxUKFtEaXNhYmxpbmcgZHNzIGFsbG9jYXRpb24gYmVjYXVzZSBzYnJrIGlzIGRlcHJlY2F0ZWRd KQorICAgIGhhdmVfZHNzPSIwIgorICBmaQorZWxzZQorICBoYXZlX2Rzcz0iMCIKK2ZpCisKK2lm IHRlc3QgIngkaGF2ZV9kc3MiID0gIngxIiA7IHRoZW4KKyAgQUNfREVGSU5FKFtKRU1BTExPQ19E U1NdLCBbIF0sIFsgXSkKK2ZpCisKK2RubCBTdXBwb3J0IHRoZSBqdW5rL3plcm8gZmlsbGluZyBv cHRpb24gYnkgZGVmYXVsdC4KK0FDX0FSR19FTkFCTEUoW2ZpbGxdLAorICBbQVNfSEVMUF9TVFJJ TkcoWy0tZGlzYWJsZS1maWxsXSwgW0Rpc2FibGUgc3VwcG9ydCBmb3IganVuay96ZXJvIGZpbGxp bmddKV0sCitbaWYgdGVzdCAieCRlbmFibGVfZmlsbCIgPSAieG5vIiA7IHRoZW4KKyAgZW5hYmxl X2ZpbGw9IjAiCitlbHNlCisgIGVuYWJsZV9maWxsPSIxIgorZmkKK10sCitbZW5hYmxlX2ZpbGw9 IjEiXQorKQoraWYgdGVzdCAieCRlbmFibGVfZmlsbCIgPSAieDEiIDsgdGhlbgorICBBQ19ERUZJ TkUoW0pFTUFMTE9DX0ZJTExdLCBbIF0sIFsgXSkKK2ZpCitBQ19TVUJTVChbZW5hYmxlX2ZpbGxd KQorCitkbmwgRGlzYWJsZSB1dHJhY2UoMiktYmFzZWQgdHJhY2luZyBieSBkZWZhdWx0LgorQUNf QVJHX0VOQUJMRShbdXRyYWNlXSwKKyAgW0FTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS11dHJhY2Vd LCBbRW5hYmxlIHV0cmFjZSgyKS1iYXNlZCB0cmFjaW5nXSldLAorW2lmIHRlc3QgIngkZW5hYmxl X3V0cmFjZSIgPSAieG5vIiA7IHRoZW4KKyAgZW5hYmxlX3V0cmFjZT0iMCIKK2Vsc2UKKyAgZW5h YmxlX3V0cmFjZT0iMSIKK2ZpCitdLAorW2VuYWJsZV91dHJhY2U9IjAiXQorKQorSkVfQ09NUElM QUJMRShbdXRyYWNlKDIpXSwgWworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5 cy9wYXJhbS5oPgorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjaW5jbHVkZSA8c3lzL3Vpby5oPgor I2luY2x1ZGUgPHN5cy9rdHJhY2UuaD4KK10sIFsKKwl1dHJhY2UoKHZvaWQgKikwLCAwKTsKK10s IFtqZV9jdl91dHJhY2VdKQoraWYgdGVzdCAieCR7amVfY3ZfdXRyYWNlfSIgPSAieG5vIiA7IHRo ZW4KKyAgSkVfQ09NUElMQUJMRShbdXRyYWNlKDIpIHdpdGggbGFiZWxdLCBbCisgICNpbmNsdWRl IDxzeXMvdHlwZXMuaD4KKyAgI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorICAjaW5jbHVkZSA8c3lz L3RpbWUuaD4KKyAgI2luY2x1ZGUgPHN5cy91aW8uaD4KKyAgI2luY2x1ZGUgPHN5cy9rdHJhY2Uu aD4KKyAgXSwgWworCSAgdXRyYWNlKCh2b2lkICopMCwgKHZvaWQgKikwLCAwKTsKKyAgXSwgW2pl X2N2X3V0cmFjZV9sYWJlbF0pCisgIGlmIHRlc3QgIngke2plX2N2X3V0cmFjZV9sYWJlbH0iID0g InhubyI7IHRoZW4KKyAgICBlbmFibGVfdXRyYWNlPSIwIgorICBmaQorICBpZiB0ZXN0ICJ4JGVu YWJsZV91dHJhY2UiID0gIngxIiA7IHRoZW4KKyAgICBBQ19ERUZJTkUoW0pFTUFMTE9DX1VUUkFD RV9MQUJFTF0sIFsgXSwgWyBdKQorICBmaQorZWxzZQorICBpZiB0ZXN0ICJ4JGVuYWJsZV91dHJh Y2UiID0gIngxIiA7IHRoZW4KKyAgICBBQ19ERUZJTkUoW0pFTUFMTE9DX1VUUkFDRV0sIFsgXSwg WyBdKQorICBmaQorZmkKK0FDX1NVQlNUKFtlbmFibGVfdXRyYWNlXSkKKworZG5sIERvIG5vdCBz dXBwb3J0IHRoZSB4bWFsbG9jIG9wdGlvbiBieSBkZWZhdWx0LgorQUNfQVJHX0VOQUJMRShbeG1h bGxvY10sCisgIFtBU19IRUxQX1NUUklORyhbLS1lbmFibGUteG1hbGxvY10sIFtTdXBwb3J0IHht YWxsb2Mgb3B0aW9uXSldLAorW2lmIHRlc3QgIngkZW5hYmxlX3htYWxsb2MiID0gInhubyIgOyB0 aGVuCisgIGVuYWJsZV94bWFsbG9jPSIwIgorZWxzZQorICBlbmFibGVfeG1hbGxvYz0iMSIKK2Zp CitdLAorW2VuYWJsZV94bWFsbG9jPSIwIl0KKykKK2lmIHRlc3QgIngkZW5hYmxlX3htYWxsb2Mi ID0gIngxIiA7IHRoZW4KKyAgQUNfREVGSU5FKFtKRU1BTExPQ19YTUFMTE9DXSwgWyBdLCBbIF0p CitmaQorQUNfU1VCU1QoW2VuYWJsZV94bWFsbG9jXSkKKworZG5sIFN1cHBvcnQgY2FjaGUtb2Js aXZpb3VzIGFsbG9jYXRpb24gYWxpZ25tZW50IGJ5IGRlZmF1bHQuCitBQ19BUkdfRU5BQkxFKFtj YWNoZS1vYmxpdmlvdXNdLAorICBbQVNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS1jYWNoZS1vYmxp dmlvdXNdLAorICAgICAgICAgICAgICAgICAgW0Rpc2FibGUgc3VwcG9ydCBmb3IgY2FjaGUtb2Js aXZpb3VzIGFsbG9jYXRpb24gYWxpZ25tZW50XSldLAorW2lmIHRlc3QgIngkZW5hYmxlX2NhY2hl X29ibGl2aW91cyIgPSAieG5vIiA7IHRoZW4KKyAgZW5hYmxlX2NhY2hlX29ibGl2aW91cz0iMCIK K2Vsc2UKKyAgZW5hYmxlX2NhY2hlX29ibGl2aW91cz0iMSIKK2ZpCitdLAorW2VuYWJsZV9jYWNo ZV9vYmxpdmlvdXM9IjEiXQorKQoraWYgdGVzdCAieCRlbmFibGVfY2FjaGVfb2JsaXZpb3VzIiA9 ICJ4MSIgOyB0aGVuCisgIEFDX0RFRklORShbSkVNQUxMT0NfQ0FDSEVfT0JMSVZJT1VTXSwgWyBd LCBbIF0pCitmaQorQUNfU1VCU1QoW2VuYWJsZV9jYWNoZV9vYmxpdmlvdXNdKQorCitkbmwgRG8g bm90IGxvZyBieSBkZWZhdWx0LgorQUNfQVJHX0VOQUJMRShbbG9nXSwKKyAgW0FTX0hFTFBfU1RS SU5HKFstLWVuYWJsZS1sb2ddLCBbU3VwcG9ydCBkZWJ1ZyBsb2dnaW5nXSldLAorW2lmIHRlc3Qg IngkZW5hYmxlX2xvZyIgPSAieG5vIiA7IHRoZW4KKyAgZW5hYmxlX2xvZz0iMCIKK2Vsc2UKKyAg ZW5hYmxlX2xvZz0iMSIKK2ZpCitdLAorW2VuYWJsZV9sb2c9IjAiXQorKQoraWYgdGVzdCAieCRl bmFibGVfbG9nIiA9ICJ4MSIgOyB0aGVuCisgIEFDX0RFRklORShbSkVNQUxMT0NfTE9HXSwgWyBd LCBbIF0pCitmaQorQUNfU1VCU1QoW2VuYWJsZV9sb2ddKQorCitkbmwgRG8gbm90IHVzZSByZWFk bGlua2F0IGJ5IGRlZmF1bHQKK0FDX0FSR19FTkFCTEUoW3JlYWRsaW5rYXRdLAorICBbQVNfSEVM UF9TVFJJTkcoWy0tZW5hYmxlLXJlYWRsaW5rYXRdLCBbVXNlIHJlYWRsaW5rYXQgb3ZlciByZWFk bGlua10pXSwKK1tpZiB0ZXN0ICJ4JGVuYWJsZV9yZWFkbGlua2F0IiA9ICJ4bm8iIDsgdGhlbgor ICBlbmFibGVfcmVhZGxpbmthdD0iMCIKK2Vsc2UKKyAgZW5hYmxlX3JlYWRsaW5rYXQ9IjEiCitm aQorXSwKK1tlbmFibGVfcmVhZGxpbmthdD0iMCJdCispCitpZiB0ZXN0ICJ4JGVuYWJsZV9yZWFk bGlua2F0IiA9ICJ4MSIgOyB0aGVuCisgIEFDX0RFRklORShbSkVNQUxMT0NfUkVBRExJTktBVF0s IFsgXSwgWyBdKQorZmkKK0FDX1NVQlNUKFtlbmFibGVfcmVhZGxpbmthdF0pCisKK2RubCBBdm9p ZCBleHRyYSBzYWZldHkgY2hlY2tzIGJ5IGRlZmF1bHQKK0FDX0FSR19FTkFCTEUoW29wdC1zYWZl dHktY2hlY2tzXSwKKyAgW0FTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1vcHQtc2FmZXR5LWNoZWNr c10sCisgIFtQZXJmb3JtIGNlcnRhaW4gbG93LW92ZXJoZWFkIGNoZWNrcywgZXZlbiBpbiBvcHQg bW9kZV0pXSwKK1tpZiB0ZXN0ICJ4JGVuYWJsZV9vcHRfc2FmZXR5X2NoZWNrcyIgPSAieG5vIiA7 IHRoZW4KKyAgZW5hYmxlX29wdF9zYWZldHlfY2hlY2tzPSIwIgorZWxzZQorICBlbmFibGVfb3B0 X3NhZmV0eV9jaGVja3M9IjEiCitmaQorXSwKK1tlbmFibGVfb3B0X3NhZmV0eV9jaGVja3M9IjAi XQorKQoraWYgdGVzdCAieCRlbmFibGVfb3B0X3NhZmV0eV9jaGVja3MiID0gIngxIiA7IHRoZW4K KyAgQUNfREVGSU5FKFtKRU1BTExPQ19PUFRfU0FGRVRZX0NIRUNLU10sIFsgXSwgWyBdKQorZmkK K0FDX1NVQlNUKFtlbmFibGVfb3B0X3NhZmV0eV9jaGVja3NdKQorCitkbmwgTG9vayBmb3Igc2l6 ZWQtZGVhbGxvY2F0aW9uIGJ1Z3Mgd2hpbGUgb3RoZXJ3aXNlIGJlaW5nIGluIG9wdCBtb2RlLgor QUNfQVJHX0VOQUJMRShbb3B0LXNpemUtY2hlY2tzXSwKKyAgW0FTX0hFTFBfU1RSSU5HKFstLWVu YWJsZS1vcHQtc2l6ZS1jaGVja3NdLAorICBbUGVyZm9ybSBzaXplZC1kZWFsbG9jYXRpb24gYXJn dW1lbnQgY2hlY2tzLCBldmVuIGluIG9wdCBtb2RlXSldLAorW2lmIHRlc3QgIngkZW5hYmxlX29w dF9zaXplX2NoZWNrcyIgPSAieG5vIiA7IHRoZW4KKyAgZW5hYmxlX29wdF9zaXplX2NoZWNrcz0i MCIKK2Vsc2UKKyAgZW5hYmxlX29wdF9zaXplX2NoZWNrcz0iMSIKK2ZpCitdLAorW2VuYWJsZV9v cHRfc2l6ZV9jaGVja3M9IjAiXQorKQoraWYgdGVzdCAieCRlbmFibGVfb3B0X3NpemVfY2hlY2tz IiA9ICJ4MSIgOyB0aGVuCisgIEFDX0RFRklORShbSkVNQUxMT0NfT1BUX1NJWkVfQ0hFQ0tTXSwg WyBdLCBbIF0pCitmaQorQUNfU1VCU1QoW2VuYWJsZV9vcHRfc2l6ZV9jaGVja3NdKQorCitkbmwg RG8gbm90IGNoZWNrIGZvciB1c2UtYWZ0ZXItZnJlZSBieSBkZWZhdWx0LgorQUNfQVJHX0VOQUJM RShbdWFmLWRldGVjdGlvbl0sCisgIFtBU19IRUxQX1NUUklORyhbLS1lbmFibGUtdWFmLWRldGVj dGlvbl0sCisgIFtBbGxvdyBzYW1wbGVkIGp1bmstZmlsbGluZyBvbiBkZWFsbG9jYXRpb24gdG8g ZGV0ZWN0IHVzZS1hZnRlci1mcmVlXSldLAorW2lmIHRlc3QgIngkZW5hYmxlX3VhZl9kZXRlY3Rp b24iID0gInhubyIgOyB0aGVuCisgIGVuYWJsZV91YWZfZGV0ZWN0aW9uPSIwIgorZWxzZQorICBl bmFibGVfdWFmX2RldGVjdGlvbj0iMSIKK2ZpCitdLAorW2VuYWJsZV91YWZfZGV0ZWN0aW9uPSIw Il0KKykKK2lmIHRlc3QgIngkZW5hYmxlX3VhZl9kZXRlY3Rpb24iID0gIngxIiA7IHRoZW4KKyAg QUNfREVGSU5FKFtKRU1BTExPQ19VQUZfREVURUNUSU9OXSwgWyBdKQorZmkKK0FDX1NVQlNUKFtl bmFibGVfdWFmX2RldGVjdGlvbl0pCisKK0pFX0NPTVBJTEFCTEUoW2EgcHJvZ3JhbSB1c2luZyBf X2J1aWx0aW5fdW5yZWFjaGFibGVdLCBbCit2b2lkIGZvbyAodm9pZCkgeworICBfX2J1aWx0aW5f dW5yZWFjaGFibGUoKTsKK30KK10sIFsKKwl7CisJCWZvbygpOworCX0KK10sIFtqZV9jdl9nY2Nf YnVpbHRpbl91bnJlYWNoYWJsZV0pCitpZiB0ZXN0ICJ4JHtqZV9jdl9nY2NfYnVpbHRpbl91bnJl YWNoYWJsZX0iID0gInh5ZXMiIDsgdGhlbgorICBBQ19ERUZJTkUoW0pFTUFMTE9DX0lOVEVSTkFM X1VOUkVBQ0hBQkxFXSwgW19fYnVpbHRpbl91bnJlYWNoYWJsZV0sIFsgXSkKK2Vsc2UKKyAgQUNf REVGSU5FKFtKRU1BTExPQ19JTlRFUk5BTF9VTlJFQUNIQUJMRV0sIFthYm9ydF0sIFsgXSkKK2Zp CisKK2RubCA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09CitkbmwgQ2hlY2sgZm9yICBfX2J1aWx0aW5fZmZz bCgpLCB0aGVuIGZmc2woMyksIGFuZCBmYWlsIGlmIG5laXRoZXIgYXJlIGZvdW5kLgorZG5sIE9u ZSBvZiB0aG9zZSB0d28gZnVuY3Rpb25zIHNob3VsZCAodGhlb3JldGljYWxseSkgZXhpc3Qgb24g YWxsIHBsYXRmb3JtcworZG5sIHRoYXQgamVtYWxsb2MgY3VycmVudGx5IGhhcyBhIGNoYW5jZSBv ZiBmdW5jdGlvbmluZyBvbiB3aXRob3V0IG1vZGlmaWNhdGlvbi4KK2RubCBXZSBhZGRpdGlvbmFs bHkgYXNzdW1lIGZmc1tsbF0oKSBvciBfX2J1aWx0aW5fZmZzW2xsXSgpIGFyZSBkZWZpbmVkIGlm CitkbmwgZmZzbCgpIG9yIF9fYnVpbHRpbl9mZnNsKCkgYXJlIGRlZmluZWQsIHJlc3BlY3RpdmVs eS4KK0pFX0NPTVBJTEFCTEUoW2EgcHJvZ3JhbSB1c2luZyBfX2J1aWx0aW5fZmZzbF0sIFsKKyNp bmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZ3MuaD4KKyNpbmNsdWRlIDxzdHJpbmcu aD4KK10sIFsKKwl7CisJCWludCBydiA9IF9fYnVpbHRpbl9mZnNsKDB4MDgpOworCQlwcmludGYo IiVkXG4iLCBydik7CisJfQorXSwgW2plX2N2X2djY19idWlsdGluX2Zmc2xdKQoraWYgdGVzdCAi eCR7amVfY3ZfZ2NjX2J1aWx0aW5fZmZzbH0iID0gInh5ZXMiIDsgdGhlbgorICBBQ19ERUZJTkUo W0pFTUFMTE9DX0lOVEVSTkFMX0ZGU0xMXSwgW19fYnVpbHRpbl9mZnNsbF0sIFsgXSkKKyAgQUNf REVGSU5FKFtKRU1BTExPQ19JTlRFUk5BTF9GRlNMXSwgW19fYnVpbHRpbl9mZnNsXSwgWyBdKQor ICBBQ19ERUZJTkUoW0pFTUFMTE9DX0lOVEVSTkFMX0ZGU10sIFtfX2J1aWx0aW5fZmZzXSwgWyBd KQorZWxzZQorICBKRV9DT01QSUxBQkxFKFthIHByb2dyYW0gdXNpbmcgZmZzbF0sIFsKKyAgI2lu Y2x1ZGUgPHN0ZGlvLmg+CisgICNpbmNsdWRlIDxzdHJpbmdzLmg+CisgICNpbmNsdWRlIDxzdHJp bmcuaD4KKyAgXSwgWworCXsKKwkJaW50IHJ2ID0gZmZzbCgweDA4KTsKKwkJcHJpbnRmKCIlZFxu IiwgcnYpOworCX0KKyAgXSwgW2plX2N2X2Z1bmN0aW9uX2Zmc2xdKQorICBpZiB0ZXN0ICJ4JHtq ZV9jdl9mdW5jdGlvbl9mZnNsfSIgPSAieHllcyIgOyB0aGVuCisgICAgQUNfREVGSU5FKFtKRU1B TExPQ19JTlRFUk5BTF9GRlNMTF0sIFtmZnNsbF0sIFsgXSkKKyAgICBBQ19ERUZJTkUoW0pFTUFM TE9DX0lOVEVSTkFMX0ZGU0xdLCBbZmZzbF0sIFsgXSkKKyAgICBBQ19ERUZJTkUoW0pFTUFMTE9D X0lOVEVSTkFMX0ZGU10sIFtmZnNdLCBbIF0pCisgIGVsc2UKKyAgICBBQ19NU0dfRVJST1IoW0Nh bm5vdCBidWlsZCB3aXRob3V0IGZmc2woMykgb3IgX19idWlsdGluX2Zmc2woKV0pCisgIGZpCitm aQorCitKRV9DT01QSUxBQkxFKFthIHByb2dyYW0gdXNpbmcgX19idWlsdGluX3BvcGNvdW50bF0s IFsKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZ3MuaD4KKyNpbmNsdWRlIDxz dHJpbmcuaD4KK10sIFsKKwl7CisJCWludCBydiA9IF9fYnVpbHRpbl9wb3Bjb3VudGwoMHgwOCk7 CisJCXByaW50ZigiJWRcbiIsIHJ2KTsKKwl9CitdLCBbamVfY3ZfZ2NjX2J1aWx0aW5fcG9wY291 bnRsXSkKK2lmIHRlc3QgIngke2plX2N2X2djY19idWlsdGluX3BvcGNvdW50bH0iID0gInh5ZXMi IDsgdGhlbgorICBBQ19ERUZJTkUoW0pFTUFMTE9DX0lOVEVSTkFMX1BPUENPVU5UXSwgW19fYnVp bHRpbl9wb3Bjb3VudF0sIFsgXSkKKyAgQUNfREVGSU5FKFtKRU1BTExPQ19JTlRFUk5BTF9QT1BD T1VOVExdLCBbX19idWlsdGluX3BvcGNvdW50bF0sIFsgXSkKKyAgQUNfREVGSU5FKFtKRU1BTExP Q19JTlRFUk5BTF9QT1BDT1VOVExMXSwgW19fYnVpbHRpbl9wb3Bjb3VudGxsXSwgWyBdKQorZmkK KworQUNfQVJHX1dJVEgoW2xnX3F1YW50dW1dLAorICBbQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1s Zy1xdWFudHVtPTxsZy1xdWFudHVtPl0sCisgICBbQmFzZSAyIGxvZyBvZiBtaW5pbXVtIGFsbG9j YXRpb24gYWxpZ25tZW50XSldKQoraWYgdGVzdCAieCR3aXRoX2xnX3F1YW50dW0iICE9ICJ4IiA7 IHRoZW4KKyAgQUNfREVGSU5FX1VOUVVPVEVEKFtMR19RVUFOVFVNXSwgWyR3aXRoX2xnX3F1YW50 dW1dLCBbIF0pCitmaQorCitBQ19BUkdfV0lUSChbbGdfc2xhYl9tYXhyZWdzXSwKKyAgW0FTX0hF TFBfU1RSSU5HKFstLXdpdGgtbGctc2xhYi1tYXhyZWdzPTxsZy1zbGFiLW1heHJlZ3M+XSwKKyAg IFtCYXNlIDIgbG9nIG9mIG1heGltdW0gbnVtYmVyIG9mIHJlZ2lvbnMgaW4gYSBzbGFiICh1c2Vk IHdpdGggbWFsbG9jX2NvbmYgc2xhYl9zaXplcyldKV0sCisgIFtDT05GSUdfTEdfU0xBQl9NQVhS RUdTPSJ3aXRoX2xnX3NsYWJfbWF4cmVncyJdLAorICBbQ09ORklHX0xHX1NMQUJfTUFYUkVHUz0i Il0pCitpZiB0ZXN0ICJ4JHdpdGhfbGdfc2xhYl9tYXhyZWdzIiAhPSAieCIgOyB0aGVuCisgIEFD X0RFRklORV9VTlFVT1RFRChbQ09ORklHX0xHX1NMQUJfTUFYUkVHU10sIFskd2l0aF9sZ19zbGFi X21heHJlZ3NdLCBbIF0pCitmaQorCitBQ19BUkdfV0lUSChbbGdfcGFnZV0sCisgIFtBU19IRUxQ X1NUUklORyhbLS13aXRoLWxnLXBhZ2U9PGxnLXBhZ2U+XSwgW0Jhc2UgMiBsb2cgb2Ygc3lzdGVt IHBhZ2Ugc2l6ZV0pXSwKKyAgW0xHX1BBR0U9IiR3aXRoX2xnX3BhZ2UiXSwgW0xHX1BBR0U9ImRl dGVjdCJdKQorY2FzZSAiJHtob3N0fSIgaW4KKyAgYWFyY2g2NC1hcHBsZS1kYXJ3aW4qKQorICAg ICAgZG5sIFdoZW4gY3Jvc3MtY29tcGlsZSBmb3IgQXBwbGUgTTEgYW5kIG5vIHBhZ2Ugc2l6ZSBz cGVjaWZpZWQsIHVzZSB0aGUKKyAgICAgIGRubCBkZWZhdWx0IGFuZCBza2lwIGRldGVjdGluZyB0 aGUgcGFnZSBzaXplICh3aGljaCBpcyBsaWtlbHkgaW5jb3JyZWN0KS4KKyAgICAgIGlmIHRlc3Qg Ingke2hvc3R9IiAhPSAieCR7YnVpbGR9IiAtYSAieCRMR19QQUdFIiA9ICJ4ZGV0ZWN0IjsgdGhl bgorICAgICAgICBMR19QQUdFPTE0CisgICAgICBmaQorICAgICAgOzsKK2VzYWMKK2lmIHRlc3Qg IngkTEdfUEFHRSIgPSAieGRldGVjdCI7IHRoZW4KKyAgQUNfQ0FDSEVfQ0hFQ0soW0xHX1BBR0Vd LAorICAgICAgICAgICAgICAgW2plX2N2X2xnX3BhZ2VdLAorICAgICAgICAgICAgICAgQUNfUlVO X0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKAorW1sKKyNpbmNsdWRlIDxzdHJpbmdzLmg+CisjaWZk ZWYgX1dJTjMyCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2Vsc2UKKyNpbmNsdWRlIDx1bmlzdGQu aD4KKyNlbmRpZgorI2luY2x1ZGUgPHN0ZGlvLmg+CitdXSwKK1tbCisgICAgaW50IHJlc3VsdDsK KyAgICBGSUxFICpmOworCisjaWZkZWYgX1dJTjMyCisgICAgU1lTVEVNX0lORk8gc2k7CisgICAg R2V0U3lzdGVtSW5mbygmc2kpOworICAgIHJlc3VsdCA9IHNpLmR3UGFnZVNpemU7CisjZWxzZQor ICAgIHJlc3VsdCA9IHN5c2NvbmYoX1NDX1BBR0VTSVpFKTsKKyNlbmRpZgorICAgIGlmIChyZXN1 bHQgPT0gLTEpIHsKKwlyZXR1cm4gMTsKKyAgICB9CisgICAgcmVzdWx0ID0gSkVNQUxMT0NfSU5U RVJOQUxfRkZTTChyZXN1bHQpIC0gMTsKKworICAgIGYgPSBmb3BlbigiY29uZnRlc3Qub3V0Iiwg InciKTsKKyAgICBpZiAoZiA9PSBOVUxMKSB7CisJcmV0dXJuIDE7CisgICAgfQorICAgIGZwcmlu dGYoZiwgIiVkIiwgcmVzdWx0KTsKKyAgICBmY2xvc2UoZik7CisKKyAgICByZXR1cm4gMDsKK11d KV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtqZV9jdl9sZ19wYWdlPWBjYXQgY29u ZnRlc3Qub3V0YF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtqZV9jdl9sZ19wYWdl PXVuZGVmaW5lZF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtqZV9jdl9sZ19wYWdl PTEyXSkpCitmaQoraWYgdGVzdCAieCR7amVfY3ZfbGdfcGFnZX0iICE9ICJ4IiA7IHRoZW4KKyAg TEdfUEFHRT0iJHtqZV9jdl9sZ19wYWdlfSIKK2ZpCitpZiB0ZXN0ICJ4JHtMR19QQUdFfSIgIT0g Inh1bmRlZmluZWQiIDsgdGhlbgorICAgQUNfREVGSU5FX1VOUVVPVEVEKFtMR19QQUdFXSwgWyRM R19QQUdFXSwgWyBdKQorZWxzZQorICAgQUNfTVNHX0VSUk9SKFtjYW5ub3QgZGV0ZXJtaW5lIHZh bHVlIGZvciBMR19QQUdFXSkKK2ZpCisKK0FDX0FSR19XSVRIKFtsZ19odWdlcGFnZV0sCisgIFtB U19IRUxQX1NUUklORyhbLS13aXRoLWxnLWh1Z2VwYWdlPTxsZy1odWdlcGFnZT5dLAorICAgW0Jh c2UgMiBsb2cgb2Ygc3lzdGVtIGh1Z2UgcGFnZSBzaXplXSldLAorICBbamVfY3ZfbGdfaHVnZXBh Z2U9IiR7d2l0aF9sZ19odWdlcGFnZX0iXSwKKyAgW2plX2N2X2xnX2h1Z2VwYWdlPSIiXSkKK2lm IHRlc3QgIngke2plX2N2X2xnX2h1Z2VwYWdlfSIgPSAieCIgOyB0aGVuCisgIGRubCBMb29rIGlu IC9wcm9jL21lbWluZm8gKExpbnV4LXNwZWNpZmljKSBmb3IgaW5mb3JtYXRpb24gb24gdGhlIGRl ZmF1bHQgaHVnZQorICBkbmwgcGFnZSBzaXplLCBpZiBhbnkuICBUaGUgcmVsZXZhbnQgbGluZSBs b29rcyBsaWtlOgorICBkbmwKKyAgZG5sICAgSHVnZXBhZ2VzaXplOiAgICAgICAyMDQ4IGtCCisg IGlmIHRlc3QgLWUgIi9wcm9jL21lbWluZm8iIDsgdGhlbgorICAgIGhwc2s9W2BjYXQgL3Byb2Mv bWVtaW5mbyAyPi9kZXYvbnVsbCB8IFwKKyAgICAgICAgICBncmVwIC1lICdeSHVnZXBhZ2VzaXpl OltbOnNwYWNlOl1dXCtbMC05XVwrW1s6c3BhY2U6XV1rQiQnIHwgXAorICAgICAgICAgIGF3ayAn e3ByaW50ICQyfSdgXQorICAgIGlmIHRlc3QgIngke2hwc2t9IiAhPSAieCIgOyB0aGVuCisgICAg ICBqZV9jdl9sZ19odWdlcGFnZT0xMAorICAgICAgd2hpbGUgdGVzdCAiJHtocHNrfSIgLWd0IDEg OyBkbworICAgICAgICBocHNrPSIkKChocHNrIC8gMikpIgorICAgICAgICBqZV9jdl9sZ19odWdl cGFnZT0iJCgoamVfY3ZfbGdfaHVnZXBhZ2UgKyAxKSkiCisgICAgICBkb25lCisgICAgZmkKKyAg ZmkKKworICBkbmwgU2V0IGRlZmF1bHQgaWYgdW5hYmxlIHRvIGF1dG9tYXRpY2FsbHkgY29uZmln dXJlLgorICBpZiB0ZXN0ICJ4JHtqZV9jdl9sZ19odWdlcGFnZX0iID0gIngiIDsgdGhlbgorICAg IGplX2N2X2xnX2h1Z2VwYWdlPTIxCisgIGZpCitmaQoraWYgdGVzdCAieCR7TEdfUEFHRX0iICE9 ICJ4dW5kZWZpbmVkIiAtYSBcCisgICAgICAgICIke2plX2N2X2xnX2h1Z2VwYWdlfSIgLWx0ICIk e0xHX1BBR0V9IiA7IHRoZW4KKyAgQUNfTVNHX0VSUk9SKFtIdWdlIHBhZ2Ugc2l6ZSAoMl4ke2pl X2N2X2xnX2h1Z2VwYWdlfSkgbXVzdCBiZSBhdCBsZWFzdCBwYWdlIHNpemUgKDJeJHtMR19QQUdF fSldKQorZmkKK0FDX0RFRklORV9VTlFVT1RFRChbTEdfSFVHRVBBR0VdLCBbJHtqZV9jdl9sZ19o dWdlcGFnZX1dLCBbIF0pCisKK2RubCA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitkbmwgRW5hYmxlIGxp YmRsIGJ5IGRlZmF1bHQuCitBQ19BUkdfRU5BQkxFKFtsaWJkbF0sCisgIFtBU19IRUxQX1NUUklO RyhbLS1kaXNhYmxlLWxpYmRsXSwKKyAgW0RvIG5vdCB1c2UgbGliZGxdKV0sCitbaWYgdGVzdCAi eCRlbmFibGVfbGliZGwiID0gInhubyIgOyB0aGVuCisgIGVuYWJsZV9saWJkbD0iMCIKK2Vsc2UK KyAgZW5hYmxlX2xpYmRsPSIxIgorZmkKK10sCitbZW5hYmxlX2xpYmRsPSIxIl0KKykKK0FDX1NV QlNUKFtsaWJkbF0pCisKK2RubCA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitkbmwgQ29uZmlndXJlIHB0 aHJlYWRzLgorCitpZiB0ZXN0ICJ4JGFiaSIgIT0gInhwZWNvZmYiIDsgdGhlbgorICBBQ19ERUZJ TkUoW0pFTUFMTE9DX0hBVkVfUFRIUkVBRF0sIFsgXSwgWyBdKQorICBBQ19DSEVDS19IRUFERVJT KFtwdGhyZWFkLmhdLCAsIFtBQ19NU0dfRVJST1IoW3B0aHJlYWQuaCBpcyBtaXNzaW5nXSldKQor ICBkbmwgU29tZSBzeXN0ZW1zIG1heSBlbWJlZCBwdGhyZWFkcyBmdW5jdGlvbmFsaXR5IGluIGxp YmM7IGNoZWNrIGZvciBsaWJwdGhyZWFkCisgIGRubCBmaXJzdCwgYnV0IHRyeSBsaWJjIHRvbyBi ZWZvcmUgZmFpbGluZy4KKyAgQUNfQ0hFQ0tfTElCKFtwdGhyZWFkXSwgW3B0aHJlYWRfY3JlYXRl XSwgW0pFX0FQUEVORF9WUyhMSUJTLCAtcHRocmVhZCldLAorICAgICAgICAgICAgICAgW0FDX1NF QVJDSF9MSUJTKFtwdGhyZWFkX2NyZWF0ZV0sICwgLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEFDX01TR19FUlJPUihbbGlicHRocmVhZCBpcyBtaXNzaW5nXSkpXSkKKyAgd3JhcF9z eW1zPSIke3dyYXBfc3ltc30gcHRocmVhZF9jcmVhdGUiCisgIGhhdmVfcHRocmVhZD0iMSIKKwor ZG5sIENoZWNrIGlmIHdlIGhhdmUgZGxzeW0gc3VwcG9ydC4KKyAgaWYgdGVzdCAieCRlbmFibGVf bGliZGwiID0gIngxIiA7IHRoZW4KKyAgICBoYXZlX2Rsc3ltPSIxIgorICAgIEFDX0NIRUNLX0hF QURFUlMoW2RsZmNuLmhdLAorICAgICAgQUNfQ0hFQ0tfRlVOQyhbZGxzeW1dLCBbXSwKKyAgICAg ICAgW0FDX0NIRUNLX0xJQihbZGxdLCBbZGxzeW1dLCBbTElCUz0iJExJQlMgLWxkbCJdLCBbaGF2 ZV9kbHN5bT0iMCJdKV0pLAorICAgICAgW2hhdmVfZGxzeW09IjAiXSkKKyAgICBpZiB0ZXN0ICJ4 JGhhdmVfZGxzeW0iID0gIngxIiA7IHRoZW4KKyAgICAgIEFDX0RFRklORShbSkVNQUxMT0NfSEFW RV9ETFNZTV0sIFsgXSwgWyBdKQorICAgIGZpCisgIGVsc2UKKyAgICBoYXZlX2Rsc3ltPSIwIgor ICBmaQorCisgIEpFX0NPTVBJTEFCTEUoW3B0aHJlYWRfYXRmb3JrKDMpXSwgWworI2luY2x1ZGUg PHB0aHJlYWQuaD4KK10sIFsKKyAgcHRocmVhZF9hdGZvcmsoKHZvaWQgKikwLCAodm9pZCAqKTAs ICh2b2lkICopMCk7CitdLCBbamVfY3ZfcHRocmVhZF9hdGZvcmtdKQorICBpZiB0ZXN0ICJ4JHtq ZV9jdl9wdGhyZWFkX2F0Zm9ya30iID0gInh5ZXMiIDsgdGhlbgorICAgIEFDX0RFRklORShbSkVN QUxMT0NfSEFWRV9QVEhSRUFEX0FURk9SS10sIFsgXSwgWyBdKQorICBmaQorICBkbmwgQ2hlY2sg aWYgcHRocmVhZF9zZXRuYW1lX25wIGlzIGF2YWlsYWJsZSB3aXRoIHRoZSBleHBlY3RlZCBBUEku CisgIEpFX0NPTVBJTEFCTEUoW3B0aHJlYWRfc2V0bmFtZV9ucCgzKV0sIFsKKyNpbmNsdWRlIDxw dGhyZWFkLmg+CitdLCBbCisgIHB0aHJlYWRfc2V0bmFtZV9ucChwdGhyZWFkX3NlbGYoKSwgInNl dG5hbWVfdGVzdCIpOworXSwgW2plX2N2X3B0aHJlYWRfc2V0bmFtZV9ucF0pCisgIGlmIHRlc3Qg Ingke2plX2N2X3B0aHJlYWRfc2V0bmFtZV9ucH0iID0gInh5ZXMiIDsgdGhlbgorICAgIEFDX0RF RklORShbSkVNQUxMT0NfSEFWRV9QVEhSRUFEX1NFVE5BTUVfTlBdLCBbIF0sIFsgXSkKKyAgZmkK KyAgZG5sIENoZWNrIGlmIHB0aHJlYWRfZ2V0bmFtZV9ucCBpcyBub3QgbmVjZXNzYXJpbHkgcHJl c2VudCBkZXNwaXRlCisgIGRubCB0aGUgcHRocmVhZF9zZXRuYW1lX25wIGNvdW50ZXJwYXJ0Cisg IEpFX0NPTVBJTEFCTEUoW3B0aHJlYWRfZ2V0bmFtZV9ucCgzKV0sIFsKKyNpbmNsdWRlIDxwdGhy ZWFkLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CitdLCBbCisgIHsKKyAgCWNoYXIgKm5hbWUgPSBt YWxsb2MoMTYpOworICAJcHRocmVhZF9nZXRuYW1lX25wKHB0aHJlYWRfc2VsZigpLCBuYW1lLCAx Nik7CisJZnJlZShuYW1lKTsKKyAgfQorXSwgW2plX2N2X3B0aHJlYWRfZ2V0bmFtZV9ucF0pCisg IGlmIHRlc3QgIngke2plX2N2X3B0aHJlYWRfZ2V0bmFtZV9ucH0iID0gInh5ZXMiIDsgdGhlbgor ICAgIEFDX0RFRklORShbSkVNQUxMT0NfSEFWRV9QVEhSRUFEX0dFVE5BTUVfTlBdLCBbIF0sIFsg XSkKKyAgZmkKKyAgZG5sIENoZWNrIGlmIHB0aHJlYWRfZ2V0X25hbWVfbnAgaXMgbm90IG5lY2Vz c2FyaWx5IHByZXNlbnQgZGVzcGl0ZQorICBkbmwgdGhlIHB0aHJlYWRfc2V0X25hbWVfbnAgY291 bnRlcnBhcnQKKyAgSkVfQ09NUElMQUJMRShbcHRocmVhZF9nZXRfbmFtZV9ucCgzKV0sIFsKKyNp bmNsdWRlIDxwdGhyZWFkLmg+CisjaW5jbHVkZSA8cHRocmVhZF9ucC5oPgorI2luY2x1ZGUgPHN0 ZGxpYi5oPgorXSwgWworICB7CisgIAljaGFyICpuYW1lID0gbWFsbG9jKDE2KTsKKyAgCXB0aHJl YWRfZ2V0X25hbWVfbnAocHRocmVhZF9zZWxmKCksIG5hbWUsIDE2KTsKKwlmcmVlKG5hbWUpOwor ICB9CitdLCBbamVfY3ZfcHRocmVhZF9nZXRfbmFtZV9ucF0pCisgIGlmIHRlc3QgIngke2plX2N2 X3B0aHJlYWRfZ2V0X25hbWVfbnB9IiA9ICJ4eWVzIiA7IHRoZW4KKyAgICBBQ19ERUZJTkUoW0pF TUFMTE9DX0hBVkVfUFRIUkVBRF9HRVRfTkFNRV9OUF0sIFsgXSwgWyBdKQorICBmaQorZmkKKwor SkVfQVBQRU5EX1ZTKENQUEZMQUdTLCAtRF9SRUVOVFJBTlQpCisKK2RubCBDaGVjayB3aGV0aGVy IGNsb2NrX2dldHRpbWUoMikgaXMgaW4gbGliYyBvciBsaWJydC4KK0FDX1NFQVJDSF9MSUJTKFtj bG9ja19nZXR0aW1lXSwgW3J0XSkKKworZG5sIENyYXkgd3JhcHBlciBjb21waWxlciBvZnRlbiBh ZGRzIGAtbHJ0YCB3aGVuIHVzaW5nIGAtc3RhdGljYC4gQ2hlY2sgd2l0aAorZG5sIGAtZHluYW1p Y2AgYXMgd2VsbCBpbiBjYXNlIGEgdXNlciB0cmllcyB0byBkeW5hbWljYWxseSBsaW5rIGluIGpl bWFsbG9jCitpZiB0ZXN0ICJ4JGplX2N2X2NyYXlfcHJnZW52X3dyYXBwZXIiID0gInh5ZXMiIDsg dGhlbgorICBpZiB0ZXN0ICIkYWNfY3Zfc2VhcmNoX2Nsb2NrX2dldHRpbWUiICE9ICItbHJ0Ijsg dGhlbgorICAgIEpFX0NGTEFHU19TQVZFKCkKKworICAgIHVuc2V0IGFjX2N2X3NlYXJjaF9jbG9j a19nZXR0aW1lCisgICAgSkVfQ0ZMQUdTX0FERChbLWR5bmFtaWNdKQorICAgIEFDX1NFQVJDSF9M SUJTKFtjbG9ja19nZXR0aW1lXSwgW3J0XSkKKworICAgIEpFX0NGTEFHU19SRVNUT1JFKCkKKyAg ZmkKK2ZpCisKK2RubCBjaGVjayBmb3IgQ0xPQ0tfTU9OT1RPTklDX0NPQVJTRSAoTGludXgtc3Bl Y2lmaWMpLgorSkVfQ09NUElMQUJMRShbY2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUNfQ09B UlNFLCAuLi4pXSwgWworI2luY2x1ZGUgPHRpbWUuaD4KK10sIFsKKwlzdHJ1Y3QgdGltZXNwZWMg dHM7CisKKwljbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQ19DT0FSU0UsICZ0cyk7CitdLCBb amVfY3ZfY2xvY2tfbW9ub3RvbmljX2NvYXJzZV0pCitpZiB0ZXN0ICJ4JHtqZV9jdl9jbG9ja19t b25vdG9uaWNfY29hcnNlfSIgPSAieHllcyIgOyB0aGVuCisgIEFDX0RFRklORShbSkVNQUxMT0Nf SEFWRV9DTE9DS19NT05PVE9OSUNfQ09BUlNFXSwgWyBdLCBbIF0pCitmaQorCitkbmwgY2hlY2sg Zm9yIENMT0NLX01PTk9UT05JQy4KK0pFX0NPTVBJTEFCTEUoW2Nsb2NrX2dldHRpbWUoQ0xPQ0tf TU9OT1RPTklDLCAuLi4pXSwgWworI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHRpbWUu aD4KK10sIFsKKwlzdHJ1Y3QgdGltZXNwZWMgdHM7CisKKwljbG9ja19nZXR0aW1lKENMT0NLX01P Tk9UT05JQywgJnRzKTsKKyNpZiAhZGVmaW5lZChfUE9TSVhfTU9OT1RPTklDX0NMT0NLKSB8fCBf UE9TSVhfTU9OT1RPTklDX0NMT0NLIDwgMAorIyAgZXJyb3IgX1BPU0lYX01PTk9UT05JQ19DTE9D SyBtaXNzaW5nL2ludmFsaWQKKyNlbmRpZgorXSwgW2plX2N2X2Nsb2NrX21vbm90b25pY10pCitp ZiB0ZXN0ICJ4JHtqZV9jdl9jbG9ja19tb25vdG9uaWN9IiA9ICJ4eWVzIiA7IHRoZW4KKyAgQUNf REVGSU5FKFtKRU1BTExPQ19IQVZFX0NMT0NLX01PTk9UT05JQ10sIFsgXSwgWyBdKQorZmkKKwor ZG5sIENoZWNrIGZvciBtYWNoX2Fic29sdXRlX3RpbWUoKS4KK0pFX0NPTVBJTEFCTEUoW21hY2hf YWJzb2x1dGVfdGltZSgpXSwgWworI2luY2x1ZGUgPG1hY2gvbWFjaF90aW1lLmg+CitdLCBbCisJ bWFjaF9hYnNvbHV0ZV90aW1lKCk7CitdLCBbamVfY3ZfbWFjaF9hYnNvbHV0ZV90aW1lXSkKK2lm IHRlc3QgIngke2plX2N2X21hY2hfYWJzb2x1dGVfdGltZX0iID0gInh5ZXMiIDsgdGhlbgorICBB Q19ERUZJTkUoW0pFTUFMTE9DX0hBVkVfTUFDSF9BQlNPTFVURV9USU1FXSwgWyBdLCBbIF0pCitm aQorCitkbmwgY2hlY2sgZm9yIENMT0NLX1JFQUxUSU1FIChhbHdheXMgc2hvdWxkIGJlIGF2YWls YWJsZSBvbiBMaW51eCkKK0pFX0NPTVBJTEFCTEUoW2Nsb2NrX2dldHRpbWUoQ0xPQ0tfUkVBTFRJ TUUsIC4uLildLCBbCisjaW5jbHVkZSA8dGltZS5oPgorXSwgWworCXN0cnVjdCB0aW1lc3BlYyB0 czsKKworCWNsb2NrX2dldHRpbWUoQ0xPQ0tfUkVBTFRJTUUsICZ0cyk7CitdLCBbamVfY3ZfY2xv Y2tfcmVhbHRpbWVdKQoraWYgdGVzdCAieCR7amVfY3ZfY2xvY2tfcmVhbHRpbWV9IiA9ICJ4eWVz IiA7IHRoZW4KKyAgQUNfREVGSU5FKFtKRU1BTExPQ19IQVZFX0NMT0NLX1JFQUxUSU1FXSwgWyBd LCBbIF0pCitmaQorCitkbmwgVXNlIHN5c2NhbGwoMikgKGlmIGF2YWlsYWJsZSkgYnkgZGVmYXVs dC4KK0FDX0FSR19FTkFCTEUoW3N5c2NhbGxdLAorICBbQVNfSEVMUF9TVFJJTkcoWy0tZGlzYWJs ZS1zeXNjYWxsXSwgW0Rpc2FibGUgdXNlIG9mIHN5c2NhbGwoMildKV0sCitbaWYgdGVzdCAieCRl bmFibGVfc3lzY2FsbCIgPSAieG5vIiA7IHRoZW4KKyAgZW5hYmxlX3N5c2NhbGw9IjAiCitlbHNl CisgIGVuYWJsZV9zeXNjYWxsPSIxIgorZmkKK10sCitbZW5hYmxlX3N5c2NhbGw9IjEiXQorKQor aWYgdGVzdCAieCRlbmFibGVfc3lzY2FsbCIgPSAieDEiIDsgdGhlbgorICBkbmwgQ2hlY2sgaWYg c3lzY2FsbCgyKSBpcyB1c2FibGUuICBUcmVhdCB3YXJuaW5ncyBhcyBlcnJvcnMsIHNvIHRoYXQg ZS5nLiBPUworICBkbmwgWCAxMC4xMidzIGRlcHJlY2F0aW9uIHdhcm5pbmcgcHJldmVudHMgdXNl LgorICBKRV9DRkxBR1NfU0FWRSgpCisgIEpFX0NGTEFHU19BREQoWy1XZXJyb3JdKQorICBKRV9D T01QSUxBQkxFKFtzeXNjYWxsKDIpXSwgWworI2luY2x1ZGUgPHN5cy9zeXNjYWxsLmg+CisjaW5j bHVkZSA8dW5pc3RkLmg+CitdLCBbCisJc3lzY2FsbChTWVNfd3JpdGUsIDIsICJoZWxsbyIsIDUp OworXSwKKyAgICAgICAgICAgICAgICBbamVfY3Zfc3lzY2FsbF0pCisgIEpFX0NGTEFHU19SRVNU T1JFKCkKKyAgaWYgdGVzdCAieCRqZV9jdl9zeXNjYWxsIiA9ICJ4eWVzIiA7IHRoZW4KKyAgICBB Q19ERUZJTkUoW0pFTUFMTE9DX1VTRV9TWVNDQUxMXSwgWyBdLCBbIF0pCisgIGZpCitmaQorCitk bmwgQ2hlY2sgaWYgdGhlIEdOVS1zcGVjaWZpYyBzZWN1cmVfZ2V0ZW52IGZ1bmN0aW9uIGV4aXN0 cy4KK0FDX0NIRUNLX0ZVTkMoW3NlY3VyZV9nZXRlbnZdLAorICAgICAgICAgICAgICBbaGF2ZV9z ZWN1cmVfZ2V0ZW52PSIxIl0sCisgICAgICAgICAgICAgIFtoYXZlX3NlY3VyZV9nZXRlbnY9IjAi XQorICAgICAgICAgICAgICkKK2lmIHRlc3QgIngkaGF2ZV9zZWN1cmVfZ2V0ZW52IiA9ICJ4MSIg OyB0aGVuCisgIEFDX0RFRklORShbSkVNQUxMT0NfSEFWRV9TRUNVUkVfR0VURU5WXSwgWyBdLCBb IF0pCitmaQorCitkbmwgQ2hlY2sgaWYgdGhlIEdOVS1zcGVjaWZpYyBzY2hlZF9nZXRjcHUgZnVu Y3Rpb24gZXhpc3RzLgorQUNfQ0hFQ0tfRlVOQyhbc2NoZWRfZ2V0Y3B1XSwKKyAgICAgICAgICAg ICAgW2hhdmVfc2NoZWRfZ2V0Y3B1PSIxIl0sCisgICAgICAgICAgICAgIFtoYXZlX3NjaGVkX2dl dGNwdT0iMCJdCisgICAgICAgICAgICAgKQoraWYgdGVzdCAieCRoYXZlX3NjaGVkX2dldGNwdSIg PSAieDEiIDsgdGhlbgorICBBQ19ERUZJTkUoW0pFTUFMTE9DX0hBVkVfU0NIRURfR0VUQ1BVXSwg WyBdLCBbIF0pCitmaQorCitkbmwgQ2hlY2sgaWYgdGhlIEdOVS1zcGVjaWZpYyBzY2hlZF9zZXRh ZmZpbml0eSBmdW5jdGlvbiBleGlzdHMuCitBQ19DSEVDS19GVU5DKFtzY2hlZF9zZXRhZmZpbml0 eV0sCisgICAgICAgICAgICAgIFtoYXZlX3NjaGVkX3NldGFmZmluaXR5PSIxIl0sCisgICAgICAg ICAgICAgIFtoYXZlX3NjaGVkX3NldGFmZmluaXR5PSIwIl0KKyAgICAgICAgICAgICApCitpZiB0 ZXN0ICJ4JGhhdmVfc2NoZWRfc2V0YWZmaW5pdHkiID0gIngxIiA7IHRoZW4KKyAgQUNfREVGSU5F KFtKRU1BTExPQ19IQVZFX1NDSEVEX1NFVEFGRklOSVRZXSwgWyBdLCBbIF0pCitmaQorCitkbmwg Q2hlY2sgaWYgdGhlIFNvbGFyaXMvQlNEIGlzc2V0dWdpZCBmdW5jdGlvbiBleGlzdHMuCitBQ19D SEVDS19GVU5DKFtpc3NldHVnaWRdLAorICAgICAgICAgICAgICBbaGF2ZV9pc3NldHVnaWQ9IjEi XSwKKyAgICAgICAgICAgICAgW2hhdmVfaXNzZXR1Z2lkPSIwIl0KKyAgICAgICAgICAgICApCitp ZiB0ZXN0ICJ4JGhhdmVfaXNzZXR1Z2lkIiA9ICJ4MSIgOyB0aGVuCisgIEFDX0RFRklORShbSkVN QUxMT0NfSEFWRV9JU1NFVFVHSURdLCBbIF0sIFsgXSkKK2ZpCisKK2RubCBDaGVjayB3aGV0aGVy IHRoZSBCU0Qtc3BlY2lmaWMgX21hbGxvY190aHJlYWRfY2xlYW51cCgpIGV4aXN0cy4gIElmIHNv LCB1c2UKK2RubCBpdCByYXRoZXIgdGhhbiBwdGhyZWFkcyBUU0QgY2xlYW51cCBmdW5jdGlvbnMg dG8gc3VwcG9ydCBjbGVhbnVwIGR1cmluZworZG5sIHRocmVhZCBleGl0LCBpbiBvcmRlciB0byBh dm9pZCBwdGhyZWFkcyBsaWJyYXJ5IHJlY3Vyc2lvbiBkdXJpbmcKK2RubCBib290c3RyYXBwaW5n LgorQUNfQ0hFQ0tfRlVOQyhbX21hbGxvY190aHJlYWRfY2xlYW51cF0sCisgICAgICAgICAgICAg IFtoYXZlX19tYWxsb2NfdGhyZWFkX2NsZWFudXA9IjEiXSwKKyAgICAgICAgICAgICAgW2hhdmVf X21hbGxvY190aHJlYWRfY2xlYW51cD0iMCJdCisgICAgICAgICAgICAgKQoraWYgdGVzdCAieCRo YXZlX19tYWxsb2NfdGhyZWFkX2NsZWFudXAiID0gIngxIiA7IHRoZW4KKyAgQUNfREVGSU5FKFtK RU1BTExPQ19NQUxMT0NfVEhSRUFEX0NMRUFOVVBdLCBbIF0sIFsgXSkKKyAgd3JhcF9zeW1zPSIk e3dyYXBfc3ltc30gX21hbGxvY190aHJlYWRfY2xlYW51cCBfbWFsbG9jX3RzZF9jbGVhbnVwX3Jl Z2lzdGVyIgorICBmb3JjZV90bHM9IjEiCitmaQorCitkbmwgQ2hlY2sgd2hldGhlciB0aGUgQlNE LXNwZWNpZmljIF9wdGhyZWFkX211dGV4X2luaXRfY2FsbG9jX2NiKCkgZXhpc3RzLiAgSWYKK2Ru bCBzbywgbXV0ZXggaW5pdGlhbGl6YXRpb24gY2F1c2VzIGFsbG9jYXRpb24sIGFuZCB3ZSBuZWVk IHRvIGltcGxlbWVudCB0aGlzCitkbmwgY2FsbGJhY2sgZnVuY3Rpb24gaW4gb3JkZXIgdG8gcHJl dmVudCByZWN1cnNpdmUgYWxsb2NhdGlvbi4KK0FDX0NIRUNLX0ZVTkMoW19wdGhyZWFkX211dGV4 X2luaXRfY2FsbG9jX2NiXSwKKyAgICAgICAgICAgICAgW2hhdmVfX3B0aHJlYWRfbXV0ZXhfaW5p dF9jYWxsb2NfY2I9IjEiXSwKKyAgICAgICAgICAgICAgW2hhdmVfX3B0aHJlYWRfbXV0ZXhfaW5p dF9jYWxsb2NfY2I9IjAiXQorICAgICAgICAgICAgICkKK2lmIHRlc3QgIngkaGF2ZV9fcHRocmVh ZF9tdXRleF9pbml0X2NhbGxvY19jYiIgPSAieDEiIDsgdGhlbgorICBBQ19ERUZJTkUoW0pFTUFM TE9DX01VVEVYX0lOSVRfQ0JdLCBbIF0sIFsgXSkKKyAgd3JhcF9zeW1zPSIke3dyYXBfc3ltc30g X21hbGxvY19wcmVmb3JrIF9tYWxsb2NfcG9zdGZvcmsiCitmaQorCitBQ19DSEVDS19GVU5DKFtt ZW1jbnRsXSwKKwkgICAgICBbaGF2ZV9tZW1jbnRsPSIxIl0sCisJICAgICAgW2hhdmVfbWVtY250 bD0iMCJdLAorCSAgICAgICkKK2lmIHRlc3QgIngkaGF2ZV9tZW1jbnRsIiA9ICJ4MSIgOyB0aGVu CisgIEFDX0RFRklORShbSkVNQUxMT0NfSEFWRV9NRU1DTlRMXSwgWyBdLCBbIF0pCitmaQorCitk bmwgRGlzYWJsZSBsYXp5IGxvY2tpbmcgYnkgZGVmYXVsdC4KK0FDX0FSR19FTkFCTEUoW2xhenlf bG9ja10sCisgIFtBU19IRUxQX1NUUklORyhbLS1lbmFibGUtbGF6eS1sb2NrXSwKKyAgW0VuYWJs ZSBsYXp5IGxvY2tpbmcgKG9ubHkgbG9jayB3aGVuIG11bHRpLXRocmVhZGVkKV0pXSwKK1tpZiB0 ZXN0ICJ4JGVuYWJsZV9sYXp5X2xvY2siID0gInhubyIgOyB0aGVuCisgIGVuYWJsZV9sYXp5X2xv Y2s9IjAiCitlbHNlCisgIGVuYWJsZV9sYXp5X2xvY2s9IjEiCitmaQorXSwKK1tlbmFibGVfbGF6 eV9sb2NrPSIiXQorKQoraWYgdGVzdCAieCR7ZW5hYmxlX2xhenlfbG9ja30iID0gIngiIDsgdGhl bgorICBpZiB0ZXN0ICJ4JHtmb3JjZV9sYXp5X2xvY2t9IiA9ICJ4MSIgOyB0aGVuCisgICAgQUNf TVNHX1JFU1VMVChbRm9yY2luZyBsYXp5LWxvY2sgdG8gYXZvaWQgYWxsb2NhdG9yL3RocmVhZGlu ZyBib290c3RyYXAgaXNzdWVzXSkKKyAgICBlbmFibGVfbGF6eV9sb2NrPSIxIgorICBlbHNlCisg ICAgZW5hYmxlX2xhenlfbG9jaz0iMCIKKyAgZmkKK2ZpCitpZiB0ZXN0ICJ4JHtlbmFibGVfbGF6 eV9sb2NrfSIgPSAieDEiIC1hICJ4JHthYml9IiA9ICJ4cGVjb2ZmIiA7IHRoZW4KKyAgQUNfTVNH X1JFU1VMVChbRm9yY2luZyBubyBsYXp5LWxvY2sgYmVjYXVzZSB0aHJlYWQgY3JlYXRpb24gbW9u aXRvcmluZyBpcyB1bmltcGxlbWVudGVkXSkKKyAgZW5hYmxlX2xhenlfbG9jaz0iMCIKK2ZpCitp ZiB0ZXN0ICJ4JGVuYWJsZV9sYXp5X2xvY2siID0gIngxIiA7IHRoZW4KKyAgaWYgdGVzdCAieCRo YXZlX2Rsc3ltIiA9ICJ4MSIgOyB0aGVuCisgICAgQUNfREVGSU5FKFtKRU1BTExPQ19MQVpZX0xP Q0tdLCBbIF0sIFsgXSkKKyAgZWxzZQorICAgIEFDX01TR19FUlJPUihbTWlzc2luZyBkbHN5bSBz dXBwb3J0OiBsYXp5LWxvY2sgY2Fubm90IGJlIGVuYWJsZWQuXSkKKyAgZmkKK2ZpCitBQ19TVUJT VChbZW5hYmxlX2xhenlfbG9ja10pCisKK2RubCBBdXRvbWF0aWNhbGx5IGNvbmZpZ3VyZSBUTFMu CitpZiB0ZXN0ICJ4JHtmb3JjZV90bHN9IiA9ICJ4MSIgOyB0aGVuCisgIGVuYWJsZV90bHM9IjEi CitlbGlmIHRlc3QgIngke2ZvcmNlX3Rsc30iID0gIngwIiA7IHRoZW4KKyAgZW5hYmxlX3Rscz0i MCIKK2Vsc2UKKyAgZW5hYmxlX3Rscz0iMSIKK2ZpCitpZiB0ZXN0ICJ4JHtlbmFibGVfdGxzfSIg PSAieDEiIDsgdGhlbgorQUNfTVNHX0NIRUNLSU5HKFtmb3IgVExTXSkKK0FDX0NPTVBJTEVfSUZF TFNFKFtBQ19MQU5HX1BST0dSQU0oCitbWworICAgIF9fdGhyZWFkIGludCB4OworXV0sIFtbCisg ICAgeCA9IDQyOworCisgICAgcmV0dXJuIDA7CitdXSldLAorICAgICAgICAgICAgICBBQ19NU0df UkVTVUxUKFt5ZXNdKSwKKyAgICAgICAgICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAg ICAgICAgICBlbmFibGVfdGxzPSIwIikKK2Vsc2UKKyAgZW5hYmxlX3Rscz0iMCIKK2ZpCitBQ19T VUJTVChbZW5hYmxlX3Rsc10pCitpZiB0ZXN0ICJ4JHtlbmFibGVfdGxzfSIgPSAieDEiIDsgdGhl bgorICBBQ19ERUZJTkVfVU5RVU9URUQoW0pFTUFMTE9DX1RMU10sIFsgXSwgWyBdKQorZmkKKwor ZG5sID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KK2RubCBDaGVjayBmb3IgQzExIGF0b21pY3MuCisKK0pF X0NPTVBJTEFCTEUoW0MxMSBhdG9taWNzXSwgWworI2luY2x1ZGUgPHN0ZGludC5oPgorI2lmIChf X1NURENfVkVSU0lPTl9fID49IDIwMTExMkwpICYmICFkZWZpbmVkKF9fU1REQ19OT19BVE9NSUNT X18pCisjaW5jbHVkZSA8c3RkYXRvbWljLmg+CisjZWxzZQorI2Vycm9yIEF0b21pY3Mgbm90IGF2 YWlsYWJsZQorI2VuZGlmCitdLCBbCisgICAgdWludDY0X3QgKnAgPSAodWludDY0X3QgKikwOwor ICAgIHVpbnQ2NF90IHggPSAxOworICAgIHZvbGF0aWxlIGF0b21pY191aW50X2xlYXN0NjRfdCAq YSA9ICh2b2xhdGlsZSBhdG9taWNfdWludF9sZWFzdDY0X3QgKilwOworICAgIHVpbnQ2NF90IHIg PSBhdG9taWNfZmV0Y2hfYWRkKGEsIHgpICsgeDsKKyAgICByZXR1cm4gciA9PSAwOworXSwgW2pl X2N2X2MxMV9hdG9taWNzXSkKK2lmIHRlc3QgIngke2plX2N2X2MxMV9hdG9taWNzfSIgPSAieHll cyIgOyB0aGVuCisgIEFDX0RFRklORShbSkVNQUxMT0NfQzExX0FUT01JQ1NdLCBbIF0sIFsgXSkK K2ZpCisKK2RubCA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitkbmwgQ2hlY2sgZm9yIEdDQy1zdHlsZSBf X2F0b21pYyBhdG9taWNzLgorCitKRV9DT01QSUxBQkxFKFtHQ0MgX19hdG9taWMgYXRvbWljc10s IFsKK10sIFsKKyAgICBpbnQgeCA9IDA7CisgICAgaW50IHZhbCA9IDE7CisgICAgaW50IHkgPSBf X2F0b21pY19mZXRjaF9hZGQoJngsIHZhbCwgX19BVE9NSUNfUkVMQVhFRCk7CisgICAgaW50IGFm dGVyX2FkZCA9IHg7CisgICAgcmV0dXJuIGFmdGVyX2FkZCA9PSAxOworXSwgW2plX2N2X2djY19h dG9taWNfYXRvbWljc10pCitpZiB0ZXN0ICJ4JHtqZV9jdl9nY2NfYXRvbWljX2F0b21pY3N9IiA9 ICJ4eWVzIiA7IHRoZW4KKyAgQUNfREVGSU5FKFtKRU1BTExPQ19HQ0NfQVRPTUlDX0FUT01JQ1Nd LCBbIF0sIFsgXSkKKworICBkbmwgY2hlY2sgZm9yIDgtYml0IGF0b21pYyBzdXBwb3J0CisgIEpF X0NPTVBJTEFCTEUoW0dDQyA4LWJpdCBfX2F0b21pYyBhdG9taWNzXSwgWworICBdLCBbCisgICAg ICB1bnNpZ25lZCBjaGFyIHggPSAwOworICAgICAgaW50IHZhbCA9IDE7CisgICAgICBpbnQgeSA9 IF9fYXRvbWljX2ZldGNoX2FkZCgmeCwgdmFsLCBfX0FUT01JQ19SRUxBWEVEKTsKKyAgICAgIGlu dCBhZnRlcl9hZGQgPSAoaW50KXg7CisgICAgICByZXR1cm4gYWZ0ZXJfYWRkID09IDE7CisgIF0s IFtqZV9jdl9nY2NfdThfYXRvbWljX2F0b21pY3NdKQorICBpZiB0ZXN0ICJ4JHtqZV9jdl9nY2Nf dThfYXRvbWljX2F0b21pY3N9IiA9ICJ4eWVzIiA7IHRoZW4KKyAgICBBQ19ERUZJTkUoW0pFTUFM TE9DX0dDQ19VOF9BVE9NSUNfQVRPTUlDU10sIFsgXSwgWyBdKQorICBmaQorZmkKKworZG5sID09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KK2RubCBDaGVjayBmb3IgR0NDLXN0eWxlIF9fc3luYyBhdG9taWNz LgorCitKRV9DT01QSUxBQkxFKFtHQ0MgX19zeW5jIGF0b21pY3NdLCBbCitdLCBbCisgICAgaW50 IHggPSAwOworICAgIGludCBiZWZvcmVfYWRkID0gX19zeW5jX2ZldGNoX2FuZF9hZGQoJngsIDEp OworICAgIGludCBhZnRlcl9hZGQgPSB4OworICAgIHJldHVybiAoYmVmb3JlX2FkZCA9PSAwKSAm JiAoYWZ0ZXJfYWRkID09IDEpOworXSwgW2plX2N2X2djY19zeW5jX2F0b21pY3NdKQoraWYgdGVz dCAieCR7amVfY3ZfZ2NjX3N5bmNfYXRvbWljc30iID0gInh5ZXMiIDsgdGhlbgorICBBQ19ERUZJ TkUoW0pFTUFMTE9DX0dDQ19TWU5DX0FUT01JQ1NdLCBbIF0sIFsgXSkKKworICBkbmwgY2hlY2sg Zm9yIDgtYml0IGF0b21pYyBzdXBwb3J0CisgIEpFX0NPTVBJTEFCTEUoW0dDQyA4LWJpdCBfX3N5 bmMgYXRvbWljc10sIFsKKyAgXSwgWworICAgICAgdW5zaWduZWQgY2hhciB4ID0gMDsKKyAgICAg IGludCBiZWZvcmVfYWRkID0gX19zeW5jX2ZldGNoX2FuZF9hZGQoJngsIDEpOworICAgICAgaW50 IGFmdGVyX2FkZCA9IChpbnQpeDsKKyAgICAgIHJldHVybiAoYmVmb3JlX2FkZCA9PSAwKSAmJiAo YWZ0ZXJfYWRkID09IDEpOworICBdLCBbamVfY3ZfZ2NjX3U4X3N5bmNfYXRvbWljc10pCisgIGlm IHRlc3QgIngke2plX2N2X2djY191OF9zeW5jX2F0b21pY3N9IiA9ICJ4eWVzIiA7IHRoZW4KKyAg ICBBQ19ERUZJTkUoW0pFTUFMTE9DX0dDQ19VOF9TWU5DX0FUT01JQ1NdLCBbIF0sIFsgXSkKKyAg ZmkKK2ZpCisKK2RubCA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitkbmwgQ2hlY2sgZm9yIGF0b21pYygz KSBvcGVyYXRpb25zIGFzIHByb3ZpZGVkIG9uIERhcndpbi4KK2RubCBXZSBuZWVkIHRoaXMgbm90 IGZvciB0aGUgYXRvbWljIG9wZXJhdGlvbnMgKHdoaWNoIGFyZSBwcm92aWRlZCBhYm92ZSksIGJ1 dAorZG5sIHJhdGhlciBmb3IgdGhlIE9TX3VuZmFpcl9sb2NrIHR5cGUgaXQgZXhwb3Nlcy4KKwor SkVfQ09NUElMQUJMRShbRGFyd2luIE9TQXRvbWljKigpXSwgWworI2luY2x1ZGUgPGxpYmtlcm4v T1NBdG9taWMuaD4KKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgorXSwgWworCXsKKwkJaW50MzJfdCB4 MzIgPSAwOworCQl2b2xhdGlsZSBpbnQzMl90ICp4MzJwID0gJngzMjsKKwkJT1NBdG9taWNBZGQz MigxLCB4MzJwKTsKKwl9CisJeworCQlpbnQ2NF90IHg2NCA9IDA7CisJCXZvbGF0aWxlIGludDY0 X3QgKng2NHAgPSAmeDY0OworCQlPU0F0b21pY0FkZDY0KDEsIHg2NHApOworCX0KK10sIFtqZV9j dl9vc2F0b21pY10pCitpZiB0ZXN0ICJ4JHtqZV9jdl9vc2F0b21pY30iID0gInh5ZXMiIDsgdGhl bgorICBBQ19ERUZJTkUoW0pFTUFMTE9DX09TQVRPTUlDXSwgWyBdLCBbIF0pCitmaQorCitkbmwg PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQorZG5sIENoZWNrIGZvciBtYWR2aXNlKDIpLgorCitKRV9DT01Q SUxBQkxFKFttYWR2aXNlKDIpXSwgWworI2luY2x1ZGUgPHN5cy9tbWFuLmg+CitdLCBbCisJbWFk dmlzZSgodm9pZCAqKTAsIDAsIDApOworXSwgW2plX2N2X21hZHZpc2VdKQoraWYgdGVzdCAieCR7 amVfY3ZfbWFkdmlzZX0iID0gInh5ZXMiIDsgdGhlbgorICBBQ19ERUZJTkUoW0pFTUFMTE9DX0hB VkVfTUFEVklTRV0sIFsgXSwgWyBdKQorCisgIGRubCBDaGVjayBmb3IgbWFkdmlzZSguLi4sIE1B RFZfRlJFRSkuCisgIEpFX0NPTVBJTEFCTEUoW21hZHZpc2UoLi4uLCBNQURWX0ZSRUUpXSwgWwor I2luY2x1ZGUgPHN5cy9tbWFuLmg+CitdLCBbCisJbWFkdmlzZSgodm9pZCAqKTAsIDAsIE1BRFZf RlJFRSk7CitdLCBbamVfY3ZfbWFkdl9mcmVlXSkKKyAgaWYgdGVzdCAieCR7amVfY3ZfbWFkdl9m cmVlfSIgPSAieHllcyIgOyB0aGVuCisgICAgQUNfREVGSU5FKFtKRU1BTExPQ19QVVJHRV9NQURW SVNFX0ZSRUVdLCBbIF0sIFsgXSkKKyAgZWxpZiB0ZXN0ICJ4JHtqZV9jdl9tYWR2aXNlfSIgPSAi eHllcyIgOyB0aGVuCisgICAgY2FzZSAiJHtob3N0X2NwdX0iIGluIGk2ODZ8eDg2XzY0KQorICAg ICAgICBjYXNlICIke2hvc3R9IiBpbiAqLSotbGludXgqKQorICAgICAgICAgICAgQUNfREVGSU5F KFtKRU1BTExPQ19QVVJHRV9NQURWSVNFX0ZSRUVdLCBbIF0sIFsgXSkKKyAgICAgICAgICAgIEFD X0RFRklORShbSkVNQUxMT0NfREVGSU5FX01BRFZJU0VfRlJFRV0sIFsgXSwgWyBdKQorCSAgICA7 OworICAgICAgICBlc2FjCisgICAgICAgIDs7CisgICAgZXNhYworICBmaQorCisgIGRubCBDaGVj ayBmb3IgbWFkdmlzZSguLi4sIE1BRFZfRE9OVE5FRUQpLgorICBKRV9DT01QSUxBQkxFKFttYWR2 aXNlKC4uLiwgTUFEVl9ET05UTkVFRCldLCBbCisjaW5jbHVkZSA8c3lzL21tYW4uaD4KK10sIFsK KwltYWR2aXNlKCh2b2lkICopMCwgMCwgTUFEVl9ET05UTkVFRCk7CitdLCBbamVfY3ZfbWFkdl9k b250bmVlZF0pCisgIGlmIHRlc3QgIngke2plX2N2X21hZHZfZG9udG5lZWR9IiA9ICJ4eWVzIiA7 IHRoZW4KKyAgICBBQ19ERUZJTkUoW0pFTUFMTE9DX1BVUkdFX01BRFZJU0VfRE9OVE5FRURdLCBb IF0sIFsgXSkKKyAgZmkKKworICBkbmwgQ2hlY2sgZm9yIG1hZHZpc2UoLi4uLCBNQURWX0RPW05U XURVTVApLgorICBKRV9DT01QSUxBQkxFKFttYWR2aXNlKC4uLiwgTUFEVl9ET1tbTlRdXURVTVAp XSwgWworI2luY2x1ZGUgPHN5cy9tbWFuLmg+CitdLCBbCisJbWFkdmlzZSgodm9pZCAqKTAsIDAs IE1BRFZfRE9OVERVTVApOworCW1hZHZpc2UoKHZvaWQgKikwLCAwLCBNQURWX0RPRFVNUCk7Citd LCBbamVfY3ZfbWFkdl9kb250ZHVtcF0pCisgIGlmIHRlc3QgIngke2plX2N2X21hZHZfZG9udGR1 bXB9IiA9ICJ4eWVzIiA7IHRoZW4KKyAgICBBQ19ERUZJTkUoW0pFTUFMTE9DX01BRFZJU0VfRE9O VERVTVBdLCBbIF0sIFsgXSkKKyAgZmkKKworICBkbmwgQ2hlY2sgZm9yIG1hZHZpc2UoLi4uLCBN QURWX1tOT11IVUdFUEFHRSkuCisgIEpFX0NPTVBJTEFCTEUoW21hZHZpc2UoLi4uLCBNQURWX1tb Tk9dXUhVR0VQQUdFKV0sIFsKKyNpbmNsdWRlIDxzeXMvbW1hbi5oPgorXSwgWworCW1hZHZpc2Uo KHZvaWQgKikwLCAwLCBNQURWX0hVR0VQQUdFKTsKKwltYWR2aXNlKCh2b2lkICopMCwgMCwgTUFE Vl9OT0hVR0VQQUdFKTsKK10sIFtqZV9jdl90aHBdKQorICBkbmwgQ2hlY2sgZm9yIG1hZHZpc2Uo Li4uLCBNQURWX1tOT11DT1JFKS4KKyAgSkVfQ09NUElMQUJMRShbbWFkdmlzZSguLi4sIE1BRFZf W1tOT11dQ09SRSldLCBbCisjaW5jbHVkZSA8c3lzL21tYW4uaD4KK10sIFsKKwltYWR2aXNlKCh2 b2lkICopMCwgMCwgTUFEVl9OT0NPUkUpOworCW1hZHZpc2UoKHZvaWQgKikwLCAwLCBNQURWX0NP UkUpOworXSwgW2plX2N2X21hZHZfbm9jb3JlXSkKKyAgaWYgdGVzdCAieCR7amVfY3ZfbWFkdl9u b2NvcmV9IiA9ICJ4eWVzIiA7IHRoZW4KKyAgICBBQ19ERUZJTkUoW0pFTUFMTE9DX01BRFZJU0Vf Tk9DT1JFXSwgWyBdLCBbIF0pCisgIGZpCitjYXNlICIke2hvc3RfY3B1fSIgaW4KKyAgYXJtKikK KyAgICA7OworICAqKQorICBpZiB0ZXN0ICJ4JHtqZV9jdl90aHB9IiA9ICJ4eWVzIiA7IHRoZW4K KyAgICBBQ19ERUZJTkUoW0pFTUFMTE9DX0hBVkVfTUFEVklTRV9IVUdFXSwgWyBdLCBbIF0pCisg IGZpCisgIDs7Citlc2FjCitlbHNlCisgIGRubCBDaGVjayBmb3IgcG9zaXhfbWFkdmlzZS4KKyAg SkVfQ09NUElMQUJMRShbcG9zaXhfbWFkdmlzZV0sIFsKKyAgI2luY2x1ZGUgPHN5cy9tbWFuLmg+ CisgIF0sIFsKKyAgICBwb3NpeF9tYWR2aXNlKCh2b2lkICopMCwgMCwgMCk7CisgIF0sIFtqZV9j dl9wb3NpeF9tYWR2aXNlXSkKKyAgaWYgdGVzdCAieCR7amVfY3ZfcG9zaXhfbWFkdmlzZX0iID0g Inh5ZXMiIDsgdGhlbgorICAgIEFDX0RFRklORShbSkVNQUxMT0NfSEFWRV9QT1NJWF9NQURWSVNF XSwgWyBdLCBbIF0pCisKKyAgICBkbmwgQ2hlY2sgZm9yIHBvc2l4X21hZHZpc2UoLi4uLCBQT1NJ WF9NQURWX0RPTlRORUVEKS4KKyAgICBKRV9DT01QSUxBQkxFKFtwb3NpeF9tYWR2aXNlKC4uLiwg UE9TSVhfTUFEVl9ET05UTkVFRCldLCBbCisgICNpbmNsdWRlIDxzeXMvbW1hbi5oPgorICBdLCBb CisgICAgcG9zaXhfbWFkdmlzZSgodm9pZCAqKTAsIDAsIFBPU0lYX01BRFZfRE9OVE5FRUQpOwor ICBdLCBbamVfY3ZfcG9zaXhfbWFkdl9kb250bmVlZF0pCisgICAgaWYgdGVzdCAieCR7amVfY3Zf cG9zaXhfbWFkdl9kb250bmVlZH0iID0gInh5ZXMiIDsgdGhlbgorICAgICAgQUNfREVGSU5FKFtK RU1BTExPQ19QVVJHRV9QT1NJWF9NQURWSVNFX0RPTlRORUVEXSwgWyBdLCBbIF0pCisgICAgZmkK KyAgZmkKK2ZpCisKK2RubCA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitkbmwgQ2hlY2sgZm9yIG1wcm90 ZWN0KDIpLgorCitKRV9DT01QSUxBQkxFKFttcHJvdGVjdCgyKV0sIFsKKyNpbmNsdWRlIDxzeXMv bW1hbi5oPgorXSwgWworCW1wcm90ZWN0KCh2b2lkICopMCwgMCwgUFJPVF9OT05FKTsKK10sIFtq ZV9jdl9tcHJvdGVjdF0pCitpZiB0ZXN0ICJ4JHtqZV9jdl9tcHJvdGVjdH0iID0gInh5ZXMiIDsg dGhlbgorICBBQ19ERUZJTkUoW0pFTUFMTE9DX0hBVkVfTVBST1RFQ1RdLCBbIF0sIFsgXSkKK2Zp CisKK2RubCA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09CitkbmwgQ2hlY2sgZm9yIF9fYnVpbHRpbl9jbHoo KSwgX19idWlsdGluX2NsemwoKSwgYW5kIF9fYnVpbHRpbl9jbHpsbCgpLgorCitBQ19DQUNIRV9D SEVDSyhbZm9yIF9fYnVpbHRpbl9jbHpdLAorICAgICAgICAgICAgICAgW2plX2N2X2J1aWx0aW5f Y2x6XSwKKyAgICAgICAgICAgICAgIFtBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtd LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWworICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCB4 ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaW50IHkgPSBfX2J1aWx0aW5fY2x6KHgpOworICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHggPSAwOworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgeSA9IF9fYnVpbHRp bl9jbHpsKHgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1 bnNpZ25lZCBsb25nIGxvbmcgeCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGludCB5ID0gX19idWlsdGluX2NsemxsKHgpOworICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSldLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFtqZV9jdl9idWlsdGluX2Nsej15ZXNdLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFtqZV9jdl9idWlsdGluX2Nsej1ub10pXSkKKworaWYgdGVzdCAi eCR7amVfY3ZfYnVpbHRpbl9jbHp9IiA9ICJ4eWVzIiA7IHRoZW4KKyAgQUNfREVGSU5FKFtKRU1B TExPQ19IQVZFX0JVSUxUSU5fQ0xaXSwgWyBdLCBbIF0pCitmaQorCitkbmwgPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQorZG5sIENoZWNrIGZvciBvc191bmZhaXJfbG9jayBvcGVyYXRpb25zIGFzIHByb3Zp ZGVkIG9uIERhcndpbi4KKworSkVfQ09NUElMQUJMRShbRGFyd2luIG9zX3VuZmFpcl9sb2NrXyoo KV0sIFsKKyNpbmNsdWRlIDxvcy9sb2NrLmg+CisjaW5jbHVkZSA8QXZhaWxhYmlsaXR5TWFjcm9z Lmg+CitdLCBbCisJI2lmIE1BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEIDwgMTAxMjAwCisJ I2Vycm9yICJvc191bmZhaXJfbG9jayBpcyBub3Qgc3VwcG9ydGVkIgorCSNlbHNlCisJb3NfdW5m YWlyX2xvY2sgbG9jayA9IE9TX1VORkFJUl9MT0NLX0lOSVQ7CisJb3NfdW5mYWlyX2xvY2tfbG9j aygmbG9jayk7CisJb3NfdW5mYWlyX2xvY2tfdW5sb2NrKCZsb2NrKTsKKwkjZW5kaWYKK10sIFtq ZV9jdl9vc191bmZhaXJfbG9ja10pCitpZiB0ZXN0ICJ4JHtqZV9jdl9vc191bmZhaXJfbG9ja30i ID0gInh5ZXMiIDsgdGhlbgorICBBQ19ERUZJTkUoW0pFTUFMTE9DX09TX1VORkFJUl9MT0NLXSwg WyBdLCBbIF0pCitmaQorCitkbmwgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorZG5sIERhcndpbi1yZWxh dGVkIGNvbmZpZ3VyYXRpb24uCisKK0FDX0FSR19FTkFCTEUoW3pvbmUtYWxsb2NhdG9yXSwKKyAg W0FTX0hFTFBfU1RSSU5HKFstLWRpc2FibGUtem9uZS1hbGxvY2F0b3JdLAorICAgICAgICAgICAg ICAgICAgW0Rpc2FibGUgem9uZSBhbGxvY2F0b3IgZm9yIERhcndpbl0pXSwKK1tpZiB0ZXN0ICJ4 JGVuYWJsZV96b25lX2FsbG9jYXRvciIgPSAieG5vIiA7IHRoZW4KKyAgZW5hYmxlX3pvbmVfYWxs b2NhdG9yPSIwIgorZWxzZQorICBlbmFibGVfem9uZV9hbGxvY2F0b3I9IjEiCitmaQorXSwKK1tp ZiB0ZXN0ICJ4JHthYml9IiA9ICJ4bWFjaG8iOyB0aGVuCisgIGVuYWJsZV96b25lX2FsbG9jYXRv cj0iMSIKK2ZpCitdCispCitBQ19TVUJTVChbZW5hYmxlX3pvbmVfYWxsb2NhdG9yXSkKKworaWYg dGVzdCAieCR7ZW5hYmxlX3pvbmVfYWxsb2NhdG9yfSIgPSAieDEiIDsgdGhlbgorICBpZiB0ZXN0 ICJ4JHthYml9IiAhPSAieG1hY2hvIjsgdGhlbgorICAgIEFDX01TR19FUlJPUihbLS1lbmFibGUt em9uZS1hbGxvY2F0b3IgaXMgb25seSBzdXBwb3J0ZWQgb24gRGFyd2luXSkKKyAgZmkKKyAgQUNf REVGSU5FKFtKRU1BTExPQ19aT05FXSwgWyBdLCBbIF0pCitmaQorCitkbmwgPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQorZG5sIFVzZSBpbml0aWFsLWV4ZWMgVExTIGJ5IGRlZmF1bHQuCitBQ19BUkdfRU5B QkxFKFtpbml0aWFsLWV4ZWMtdGxzXSwKKyAgW0FTX0hFTFBfU1RSSU5HKFstLWRpc2FibGUtaW5p dGlhbC1leGVjLXRsc10sCisgICAgICAgICAgICAgICAgICBbRGlzYWJsZSB0aGUgaW5pdGlhbC1l eGVjIHRscyBtb2RlbF0pXSwKK1tpZiB0ZXN0ICJ4JGVuYWJsZV9pbml0aWFsX2V4ZWNfdGxzIiA9 ICJ4bm8iIDsgdGhlbgorICBlbmFibGVfaW5pdGlhbF9leGVjX3Rscz0iMCIKK2Vsc2UKKyAgZW5h YmxlX2luaXRpYWxfZXhlY190bHM9IjEiCitmaQorXSwKK1tlbmFibGVfaW5pdGlhbF9leGVjX3Rs cz0iMSJdCispCitBQ19TVUJTVChbZW5hYmxlX2luaXRpYWxfZXhlY190bHNdKQorCitpZiB0ZXN0 ICJ4JHtqZV9jdl90bHNfbW9kZWx9IiA9ICJ4eWVzIiAtYSBcCisgICAgICAgIngke2VuYWJsZV9p bml0aWFsX2V4ZWNfdGxzfSIgPSAieDEiIDsgdGhlbgorICBBQ19ERUZJTkUoW0pFTUFMTE9DX1RM U19NT0RFTF0sCisgICAgICAgICAgICBbX19hdHRyaWJ1dGVfXygodGxzX21vZGVsKCJpbml0aWFs LWV4ZWMiKSkpXSwgCisgICAgICAgICAgICBbIF0pCitlbHNlCisgIEFDX0RFRklORShbSkVNQUxM T0NfVExTX01PREVMXSwgWyBdLCBbIF0pCitmaQorCitkbmwgPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQor ZG5sIEVuYWJsZSBiYWNrZ3JvdW5kIHRocmVhZHMgaWYgcG9zc2libGUuCisKK2lmIHRlc3QgIngk e2hhdmVfcHRocmVhZH0iID0gIngxIiAtYSAieCR7amVfY3Zfb3NfdW5mYWlyX2xvY2t9IiAhPSAi eHllcyIgLWEgXAorICAgICAgICJ4JHthYml9IiAhPSAieG1hY2hvIiA7IHRoZW4KKyAgQUNfREVG SU5FKFtKRU1BTExPQ19CQUNLR1JPVU5EX1RIUkVBRF0sIFsgXSwgWyBdKQorZmkKKworZG5sID09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KK2RubCBDaGVjayBmb3IgZ2xpYmMgbWFsbG9jIGhvb2tzCisKK2lm IHRlc3QgIngkZ2xpYmMiID0gIngxIiA7IHRoZW4KKyAgSkVfQ09NUElMQUJMRShbZ2xpYmMgbWFs bG9jIGhvb2tdLCBbCisgICNpbmNsdWRlIDxzdGRkZWYuaD4KKworICBleHRlcm4gdm9pZCAoKiBf X2ZyZWVfaG9vaykodm9pZCAqcHRyKTsKKyAgZXh0ZXJuIHZvaWQgKigqIF9fbWFsbG9jX2hvb2sp KHNpemVfdCBzaXplKTsKKyAgZXh0ZXJuIHZvaWQgKigqIF9fcmVhbGxvY19ob29rKSh2b2lkICpw dHIsIHNpemVfdCBzaXplKTsKK10sIFsKKyAgICB2b2lkICpwdHIgPSAwTDsKKyAgICBpZiAoX19t YWxsb2NfaG9vaykgcHRyID0gX19tYWxsb2NfaG9vaygxKTsKKyAgICBpZiAoX19yZWFsbG9jX2hv b2spIHB0ciA9IF9fcmVhbGxvY19ob29rKHB0ciwgMik7CisgICAgaWYgKF9fZnJlZV9ob29rICYm IHB0cikgX19mcmVlX2hvb2socHRyKTsKK10sIFtqZV9jdl9nbGliY19tYWxsb2NfaG9va10pCisg IGlmIHRlc3QgIngke2plX2N2X2dsaWJjX21hbGxvY19ob29rfSIgPSAieHllcyIgOyB0aGVuCisg ICAgaWYgdGVzdCAieCR7SkVNQUxMT0NfUFJFRklYfSIgPSAieCIgOyB0aGVuCisgICAgICBBQ19E RUZJTkUoW0pFTUFMTE9DX0dMSUJDX01BTExPQ19IT09LXSwgWyBdLCBbIF0pCisgICAgICB3cmFw X3N5bXM9IiR7d3JhcF9zeW1zfSBfX2ZyZWVfaG9vayBfX21hbGxvY19ob29rIF9fcmVhbGxvY19o b29rIgorICAgIGZpCisgIGZpCisKKyAgSkVfQ09NUElMQUJMRShbZ2xpYmMgbWVtYWxpZ24gaG9v a10sIFsKKyAgI2luY2x1ZGUgPHN0ZGRlZi5oPgorCisgIGV4dGVybiB2b2lkICooKiBfX21lbWFs aWduX2hvb2spKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKTsKK10sIFsKKyAgICB2b2lk ICpwdHIgPSAwTDsKKyAgICBpZiAoX19tZW1hbGlnbl9ob29rKSBwdHIgPSBfX21lbWFsaWduX2hv b2soMTYsIDcpOworXSwgW2plX2N2X2dsaWJjX21lbWFsaWduX2hvb2tdKQorICBpZiB0ZXN0ICJ4 JHtqZV9jdl9nbGliY19tZW1hbGlnbl9ob29rfSIgPSAieHllcyIgOyB0aGVuCisgICAgaWYgdGVz dCAieCR7SkVNQUxMT0NfUFJFRklYfSIgPSAieCIgOyB0aGVuCisgICAgICBBQ19ERUZJTkUoW0pF TUFMTE9DX0dMSUJDX01FTUFMSUdOX0hPT0tdLCBbIF0sIFsgXSkKKyAgICAgIHdyYXBfc3ltcz0i JHt3cmFwX3N5bXN9IF9fbWVtYWxpZ25faG9vayIKKyAgICBmaQorICBmaQorZmkKKworSkVfQ09N UElMQUJMRShbcHRocmVhZHMgYWRhcHRpdmUgbXV0ZXhlc10sIFsKKyNpbmNsdWRlIDxwdGhyZWFk Lmg+CitdLCBbCisgIHB0aHJlYWRfbXV0ZXhhdHRyX3QgYXR0cjsKKyAgcHRocmVhZF9tdXRleGF0 dHJfaW5pdCgmYXR0cik7CisgIHB0aHJlYWRfbXV0ZXhhdHRyX3NldHR5cGUoJmF0dHIsIFBUSFJF QURfTVVURVhfQURBUFRJVkVfTlApOworICBwdGhyZWFkX211dGV4YXR0cl9kZXN0cm95KCZhdHRy KTsKK10sIFtqZV9jdl9wdGhyZWFkX211dGV4X2FkYXB0aXZlX25wXSkKK2lmIHRlc3QgIngke2pl X2N2X3B0aHJlYWRfbXV0ZXhfYWRhcHRpdmVfbnB9IiA9ICJ4eWVzIiA7IHRoZW4KKyAgQUNfREVG SU5FKFtKRU1BTExPQ19IQVZFX1BUSFJFQURfTVVURVhfQURBUFRJVkVfTlBdLCBbIF0sIFsgXSkK K2ZpCisKK0pFX0NGTEFHU19TQVZFKCkKK0pFX0NGTEFHU19BREQoWy1EX0dOVV9TT1VSQ0VdKQor SkVfQ0ZMQUdTX0FERChbLVdlcnJvcl0pCitKRV9DRkxBR1NfQUREKFstaGVycm9yX29uX3dhcm5p bmddKQorSkVfQ09NUElMQUJMRShbc3RyZXJyb3JfciByZXR1cm5zIGNoYXIgd2l0aCBnbnUgc291 cmNlXSwgWworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRl IDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KK10sIFsKKyAgY2hhciAqYnVmZmVyID0g KGNoYXIgKikgbWFsbG9jKDEwMCk7CisgIGNoYXIgKmVycm9yID0gc3RyZXJyb3JfcihFSU5WQUws IGJ1ZmZlciwgMTAwKTsKKyAgcHJpbnRmKCIlc1xuIiwgZXJyb3IpOworXSwgW2plX2N2X3N0cmVy cm9yX3JfcmV0dXJuc19jaGFyX3dpdGhfZ251X3NvdXJjZV0pCitKRV9DRkxBR1NfUkVTVE9SRSgp CitpZiB0ZXN0ICJ4JHtqZV9jdl9zdHJlcnJvcl9yX3JldHVybnNfY2hhcl93aXRoX2dudV9zb3Vy Y2V9IiA9ICJ4eWVzIiA7IHRoZW4KKyAgQUNfREVGSU5FKFtKRU1BTExPQ19TVFJFUlJPUl9SX1JF VFVSTlNfQ0hBUl9XSVRIX0dOVV9TT1VSQ0VdLCBbIF0sIFsgXSkKK2ZpCisKK2RubCA9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09CitkbmwgQ2hlY2sgZm9yIHR5cGVkZWZzLCBzdHJ1Y3R1cmVzLCBhbmQgY29t cGlsZXIgY2hhcmFjdGVyaXN0aWNzLgorQUNfSEVBREVSX1NUREJPT0wKKworZG5sID09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KK2RubCBEZWZpbmUgY29tbWFuZHMgdGhhdCBnZW5lcmF0ZSBvdXRwdXQgZmls ZXMuCisKK0FDX0NPTkZJR19DT01NQU5EUyhbaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9wdWJs aWNfc3ltYm9scy50eHRdLCBbCisgIGY9IiR7b2Jqcm9vdH1pbmNsdWRlL2plbWFsbG9jL2ludGVy bmFsL3B1YmxpY19zeW1ib2xzLnR4dCIKKyAgbWtkaXIgLXAgIiR7b2Jqcm9vdH1pbmNsdWRlL2pl bWFsbG9jL2ludGVybmFsIgorICBjcCAvZGV2L251bGwgIiR7Zn0iCisgIGZvciBubSBpbiBgZWNo byAke21hbmdsaW5nX21hcH0gfHRyICcsJyAnICdgIDsgZG8KKyAgICBuPWBlY2hvICR7bm19IHx0 ciAnOicgJyAnIHxhd2sgJ3twcmludCAkW10xfSdgCisgICAgbT1gZWNobyAke25tfSB8dHIgJzon ICcgJyB8YXdrICd7cHJpbnQgJFtdMn0nYAorICAgIGVjaG8gIiR7bn06JHttfSIgPj4gIiR7Zn0i CisgICAgZG5sIFJlbW92ZSBuYW1lIGZyb20gcHVibGljX3N5bXMgc28gdGhhdCBpdCBpc24ndCBy ZWRlZmluZWQgbGF0ZXIuCisgICAgcHVibGljX3N5bXM9YGZvciBzeW0gaW4gJHtwdWJsaWNfc3lt c307IGRvIGVjaG8gIiR7c3ltfSI7IGRvbmUgfGdyZXAgLXYgIl4ke259XCQiIHx0ciAnXG4nICcg J2AKKyAgZG9uZQorICBmb3Igc3ltIGluICR7cHVibGljX3N5bXN9IDsgZG8KKyAgICBuPSIke3N5 bX0iCisgICAgbT0iJHtKRU1BTExPQ19QUkVGSVh9JHtzeW19IgorICAgIGVjaG8gIiR7bn06JHtt fSIgPj4gIiR7Zn0iCisgIGRvbmUKK10sIFsKKyAgc3JjZGlyPSIke3NyY2Rpcn0iCisgIG9ianJv b3Q9IiR7b2Jqcm9vdH0iCisgIG1hbmdsaW5nX21hcD0iJHttYW5nbGluZ19tYXB9IgorICBwdWJs aWNfc3ltcz0iJHtwdWJsaWNfc3ltc30iCisgIEpFTUFMTE9DX1BSRUZJWD0iJHtKRU1BTExPQ19Q UkVGSVh9IgorXSkKK0FDX0NPTkZJR19DT01NQU5EUyhbaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5h bC9wcml2YXRlX3N5bWJvbHMuYXdrXSwgWworICBmPSIke29ianJvb3R9aW5jbHVkZS9qZW1hbGxv Yy9pbnRlcm5hbC9wcml2YXRlX3N5bWJvbHMuYXdrIgorICBta2RpciAtcCAiJHtvYmpyb290fWlu Y2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwiCisgIGV4cG9ydF9zeW1zPWBmb3Igc3ltIGluICR7cHVi bGljX3N5bXN9OyBkbyBlY2hvICIke0pFTUFMTE9DX1BSRUZJWH0ke3N5bX0iOyBkb25lOyBmb3Ig c3ltIGluICR7d3JhcF9zeW1zfTsgZG8gZWNobyAiJHtzeW19IjsgZG9uZTtgCisgICIke3NyY2Rp cn0vaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9wcml2YXRlX3N5bWJvbHMuc2giICIke1NZTV9Q UkVGSVh9IiAke2V4cG9ydF9zeW1zfSA+ICIke29ianJvb3R9aW5jbHVkZS9qZW1hbGxvYy9pbnRl cm5hbC9wcml2YXRlX3N5bWJvbHMuYXdrIgorXSwgWworICBzcmNkaXI9IiR7c3JjZGlyfSIKKyAg b2Jqcm9vdD0iJHtvYmpyb290fSIKKyAgcHVibGljX3N5bXM9IiR7cHVibGljX3N5bXN9IgorICB3 cmFwX3N5bXM9IiR7d3JhcF9zeW1zfSIKKyAgU1lNX1BSRUZJWD0iJHtTWU1fUFJFRklYfSIKKyAg SkVNQUxMT0NfUFJFRklYPSIke0pFTUFMTE9DX1BSRUZJWH0iCitdKQorQUNfQ09ORklHX0NPTU1B TkRTKFtpbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL3ByaXZhdGVfc3ltYm9sc19qZXQuYXdrXSwg WworICBmPSIke29ianJvb3R9aW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9wcml2YXRlX3N5bWJv bHNfamV0LmF3ayIKKyAgbWtkaXIgLXAgIiR7b2Jqcm9vdH1pbmNsdWRlL2plbWFsbG9jL2ludGVy bmFsIgorICBleHBvcnRfc3ltcz1gZm9yIHN5bSBpbiAke3B1YmxpY19zeW1zfTsgZG8gZWNobyAi amV0XyR7c3ltfSI7IGRvbmU7IGZvciBzeW0gaW4gJHt3cmFwX3N5bXN9OyBkbyBlY2hvICIke3N5 bX0iOyBkb25lO2AKKyAgIiR7c3JjZGlyfS9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL3ByaXZh dGVfc3ltYm9scy5zaCIgIiR7U1lNX1BSRUZJWH0iICR7ZXhwb3J0X3N5bXN9ID4gIiR7b2Jqcm9v dH1pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL3ByaXZhdGVfc3ltYm9sc19qZXQuYXdrIgorXSwg WworICBzcmNkaXI9IiR7c3JjZGlyfSIKKyAgb2Jqcm9vdD0iJHtvYmpyb290fSIKKyAgcHVibGlj X3N5bXM9IiR7cHVibGljX3N5bXN9IgorICB3cmFwX3N5bXM9IiR7d3JhcF9zeW1zfSIKKyAgU1lN X1BSRUZJWD0iJHtTWU1fUFJFRklYfSIKK10pCitBQ19DT05GSUdfQ09NTUFORFMoW2luY2x1ZGUv amVtYWxsb2MvaW50ZXJuYWwvcHVibGljX25hbWVzcGFjZS5oXSwgWworICBta2RpciAtcCAiJHtv Ympyb290fWluY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwiCisgICIke3NyY2Rpcn0vaW5jbHVkZS9q ZW1hbGxvYy9pbnRlcm5hbC9wdWJsaWNfbmFtZXNwYWNlLnNoIiAiJHtvYmpyb290fWluY2x1ZGUv amVtYWxsb2MvaW50ZXJuYWwvcHVibGljX3N5bWJvbHMudHh0IiA+ICIke29ianJvb3R9aW5jbHVk ZS9qZW1hbGxvYy9pbnRlcm5hbC9wdWJsaWNfbmFtZXNwYWNlLmgiCitdLCBbCisgIHNyY2Rpcj0i JHtzcmNkaXJ9IgorICBvYmpyb290PSIke29ianJvb3R9IgorXSkKK0FDX0NPTkZJR19DT01NQU5E UyhbaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9wdWJsaWNfdW5uYW1lc3BhY2UuaF0sIFsKKyAg bWtkaXIgLXAgIiR7b2Jqcm9vdH1pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsIgorICAiJHtzcmNk aXJ9L2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvcHVibGljX3VubmFtZXNwYWNlLnNoIiAiJHtv Ympyb290fWluY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvcHVibGljX3N5bWJvbHMudHh0IiA+ICIk e29ianJvb3R9aW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9wdWJsaWNfdW5uYW1lc3BhY2UuaCIK K10sIFsKKyAgc3JjZGlyPSIke3NyY2Rpcn0iCisgIG9ianJvb3Q9IiR7b2Jqcm9vdH0iCitdKQor QUNfQ09ORklHX0NPTU1BTkRTKFtpbmNsdWRlL2plbWFsbG9jL2plbWFsbG9jX3Byb3Rvc19qZXQu aF0sIFsKKyAgbWtkaXIgLXAgIiR7b2Jqcm9vdH1pbmNsdWRlL2plbWFsbG9jIgorICBjYXQgIiR7 c3JjZGlyfS9pbmNsdWRlL2plbWFsbG9jL2plbWFsbG9jX3Byb3Rvcy5oLmluIiB8IHNlZCAtZSAn cy9AamVfQC9qZXRfL2cnID4gIiR7b2Jqcm9vdH1pbmNsdWRlL2plbWFsbG9jL2plbWFsbG9jX3By b3Rvc19qZXQuaCIKK10sIFsKKyAgc3JjZGlyPSIke3NyY2Rpcn0iCisgIG9ianJvb3Q9IiR7b2Jq cm9vdH0iCitdKQorQUNfQ09ORklHX0NPTU1BTkRTKFtpbmNsdWRlL2plbWFsbG9jL2plbWFsbG9j X3JlbmFtZS5oXSwgWworICBta2RpciAtcCAiJHtvYmpyb290fWluY2x1ZGUvamVtYWxsb2MiCisg ICIke3NyY2Rpcn0vaW5jbHVkZS9qZW1hbGxvYy9qZW1hbGxvY19yZW5hbWUuc2giICIke29ianJv b3R9aW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9wdWJsaWNfc3ltYm9scy50eHQiID4gIiR7b2Jq cm9vdH1pbmNsdWRlL2plbWFsbG9jL2plbWFsbG9jX3JlbmFtZS5oIgorXSwgWworICBzcmNkaXI9 IiR7c3JjZGlyfSIKKyAgb2Jqcm9vdD0iJHtvYmpyb290fSIKK10pCitBQ19DT05GSUdfQ09NTUFO RFMoW2luY2x1ZGUvamVtYWxsb2MvamVtYWxsb2NfbWFuZ2xlLmhdLCBbCisgIG1rZGlyIC1wICIk e29ianJvb3R9aW5jbHVkZS9qZW1hbGxvYyIKKyAgIiR7c3JjZGlyfS9pbmNsdWRlL2plbWFsbG9j L2plbWFsbG9jX21hbmdsZS5zaCIgIiR7b2Jqcm9vdH1pbmNsdWRlL2plbWFsbG9jL2ludGVybmFs L3B1YmxpY19zeW1ib2xzLnR4dCIgamVfID4gIiR7b2Jqcm9vdH1pbmNsdWRlL2plbWFsbG9jL2pl bWFsbG9jX21hbmdsZS5oIgorXSwgWworICBzcmNkaXI9IiR7c3JjZGlyfSIKKyAgb2Jqcm9vdD0i JHtvYmpyb290fSIKK10pCitBQ19DT05GSUdfQ09NTUFORFMoW2luY2x1ZGUvamVtYWxsb2MvamVt YWxsb2NfbWFuZ2xlX2pldC5oXSwgWworICBta2RpciAtcCAiJHtvYmpyb290fWluY2x1ZGUvamVt YWxsb2MiCisgICIke3NyY2Rpcn0vaW5jbHVkZS9qZW1hbGxvYy9qZW1hbGxvY19tYW5nbGUuc2gi ICIke29ianJvb3R9aW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9wdWJsaWNfc3ltYm9scy50eHQi IGpldF8gPiAiJHtvYmpyb290fWluY2x1ZGUvamVtYWxsb2MvamVtYWxsb2NfbWFuZ2xlX2pldC5o IgorXSwgWworICBzcmNkaXI9IiR7c3JjZGlyfSIKKyAgb2Jqcm9vdD0iJHtvYmpyb290fSIKK10p CitBQ19DT05GSUdfQ09NTUFORFMoW2luY2x1ZGUvamVtYWxsb2MvamVtYWxsb2MuaF0sIFsKKyAg bWtkaXIgLXAgIiR7b2Jqcm9vdH1pbmNsdWRlL2plbWFsbG9jIgorICAiJHtzcmNkaXJ9L2luY2x1 ZGUvamVtYWxsb2MvamVtYWxsb2Muc2giICIke29ianJvb3R9IiA+ICIke29ianJvb3R9aW5jbHVk ZS9qZW1hbGxvYy9qZW1hbGxvYyR7aW5zdGFsbF9zdWZmaXh9LmgiCitdLCBbCisgIHNyY2Rpcj0i JHtzcmNkaXJ9IgorICBvYmpyb290PSIke29ianJvb3R9IgorICBpbnN0YWxsX3N1ZmZpeD0iJHtp bnN0YWxsX3N1ZmZpeH0iCitdKQorCitkbmwgUHJvY2VzcyAuaW4gZmlsZXMuCitBQ19TVUJTVChb Y2ZnaGRyc19pbl0pCitBQ19TVUJTVChbY2ZnaGRyc19vdXRdKQorQUNfQ09ORklHX0hFQURFUlMo WyRjZmdoZHJzX3R1cF0pCisKK2RubCA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitkbmwgR2VuZXJhdGUg b3V0cHV0cy4KKworQUNfQ09ORklHX0ZJTEVTKFskY2Znb3V0cHV0c190dXAgY29uZmlnLnN0YW1w IGJpbi9qZW1hbGxvYy1jb25maWcgYmluL2plbWFsbG9jLnNoIGJpbi9qZXByb2ZdKQorQUNfU1VC U1QoW2NmZ291dHB1dHNfaW5dKQorQUNfU1VCU1QoW2NmZ291dHB1dHNfb3V0XSkKK0FDX09VVFBV VAorCitkbmwgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorZG5sIFByaW50IG91dCB0aGUgcmVzdWx0cyBv ZiBjb25maWd1cmF0aW9uLgorQUNfTVNHX1JFU1VMVChbPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PV0p CitBQ19NU0dfUkVTVUxUKFtqZW1hbGxvYyB2ZXJzaW9uICAgOiAke2plbWFsbG9jX3ZlcnNpb259 XSkKK0FDX01TR19SRVNVTFQoW2xpYnJhcnkgcmV2aXNpb24gICA6ICR7cmV2fV0pCitBQ19NU0df UkVTVUxUKFtdKQorQUNfTVNHX1JFU1VMVChbQ09ORklHICAgICAgICAgICAgIDogJHtDT05GSUd9 XSkKK0FDX01TR19SRVNVTFQoW0NDICAgICAgICAgICAgICAgICA6ICR7Q0N9XSkKK0FDX01TR19S RVNVTFQoW0NPTkZJR1VSRV9DRkxBR1MgICA6ICR7Q09ORklHVVJFX0NGTEFHU31dKQorQUNfTVNH X1JFU1VMVChbU1BFQ0lGSUVEX0NGTEFHUyAgIDogJHtTUEVDSUZJRURfQ0ZMQUdTfV0pCitBQ19N U0dfUkVTVUxUKFtFWFRSQV9DRkxBR1MgICAgICAgOiAke0VYVFJBX0NGTEFHU31dKQorQUNfTVNH X1JFU1VMVChbQ1BQRkxBR1MgICAgICAgICAgIDogJHtDUFBGTEFHU31dKQorQUNfTVNHX1JFU1VM VChbQ1hYICAgICAgICAgICAgICAgIDogJHtDWFh9XSkKK0FDX01TR19SRVNVTFQoW0NPTkZJR1VS RV9DWFhGTEFHUyA6ICR7Q09ORklHVVJFX0NYWEZMQUdTfV0pCitBQ19NU0dfUkVTVUxUKFtTUEVD SUZJRURfQ1hYRkxBR1MgOiAke1NQRUNJRklFRF9DWFhGTEFHU31dKQorQUNfTVNHX1JFU1VMVChb RVhUUkFfQ1hYRkxBR1MgICAgIDogJHtFWFRSQV9DWFhGTEFHU31dKQorQUNfTVNHX1JFU1VMVChb TERGTEFHUyAgICAgICAgICAgIDogJHtMREZMQUdTfV0pCitBQ19NU0dfUkVTVUxUKFtFWFRSQV9M REZMQUdTICAgICAgOiAke0VYVFJBX0xERkxBR1N9XSkKK0FDX01TR19SRVNVTFQoW0RTT19MREZM QUdTICAgICAgICA6ICR7RFNPX0xERkxBR1N9XSkKK0FDX01TR19SRVNVTFQoW0xJQlMgICAgICAg ICAgICAgICA6ICR7TElCU31dKQorQUNfTVNHX1JFU1VMVChbUlBBVEhfRVhUUkEgICAgICAgIDog JHtSUEFUSF9FWFRSQX1dKQorQUNfTVNHX1JFU1VMVChbXSkKK0FDX01TR19SRVNVTFQoW1hTTFRQ Uk9DICAgICAgICAgICA6ICR7WFNMVFBST0N9XSkKK0FDX01TR19SRVNVTFQoW1hTTFJPT1QgICAg ICAgICAgICA6ICR7WFNMUk9PVH1dKQorQUNfTVNHX1JFU1VMVChbXSkKK0FDX01TR19SRVNVTFQo W1BSRUZJWCAgICAgICAgICAgICA6ICR7UFJFRklYfV0pCitBQ19NU0dfUkVTVUxUKFtCSU5ESVIg ICAgICAgICAgICAgOiAke0JJTkRJUn1dKQorQUNfTVNHX1JFU1VMVChbREFUQURJUiAgICAgICAg ICAgIDogJHtEQVRBRElSfV0pCitBQ19NU0dfUkVTVUxUKFtJTkNMVURFRElSICAgICAgICAgOiAk e0lOQ0xVREVESVJ9XSkKK0FDX01TR19SRVNVTFQoW0xJQkRJUiAgICAgICAgICAgICA6ICR7TElC RElSfV0pCitBQ19NU0dfUkVTVUxUKFtNQU5ESVIgICAgICAgICAgICAgOiAke01BTkRJUn1dKQor QUNfTVNHX1JFU1VMVChbXSkKK0FDX01TR19SRVNVTFQoW3NyY3Jvb3QgICAgICAgICAgICA6ICR7 c3Jjcm9vdH1dKQorQUNfTVNHX1JFU1VMVChbYWJzX3NyY3Jvb3QgICAgICAgIDogJHthYnNfc3Jj cm9vdH1dKQorQUNfTVNHX1JFU1VMVChbb2Jqcm9vdCAgICAgICAgICAgIDogJHtvYmpyb290fV0p CitBQ19NU0dfUkVTVUxUKFthYnNfb2Jqcm9vdCAgICAgICAgOiAke2Fic19vYmpyb290fV0pCitB Q19NU0dfUkVTVUxUKFtdKQorQUNfTVNHX1JFU1VMVChbSkVNQUxMT0NfUFJFRklYICAgIDogJHtK RU1BTExPQ19QUkVGSVh9XSkKK0FDX01TR19SRVNVTFQoW0pFTUFMTE9DX1BSSVZBVEVfTkFNRVNQ QUNFXSkKK0FDX01TR19SRVNVTFQoWyAgICAgICAgICAgICAgICAgICA6ICR7SkVNQUxMT0NfUFJJ VkFURV9OQU1FU1BBQ0V9XSkKK0FDX01TR19SRVNVTFQoW2luc3RhbGxfc3VmZml4ICAgICA6ICR7 aW5zdGFsbF9zdWZmaXh9XSkKK0FDX01TR19SRVNVTFQoW21hbGxvY19jb25mICAgICAgICA6ICR7 Y29uZmlnX21hbGxvY19jb25mfV0pCitBQ19NU0dfUkVTVUxUKFtkb2N1bWVudGF0aW9uICAgICAg OiAke2VuYWJsZV9kb2N9XSkKK0FDX01TR19SRVNVTFQoW3NoYXJlZCBsaWJzICAgICAgICA6ICR7 ZW5hYmxlX3NoYXJlZH1dKQorQUNfTVNHX1JFU1VMVChbc3RhdGljIGxpYnMgICAgICAgIDogJHtl bmFibGVfc3RhdGljfV0pCitBQ19NU0dfUkVTVUxUKFthdXRvZ2VuICAgICAgICAgICAgOiAke2Vu YWJsZV9hdXRvZ2VufV0pCitBQ19NU0dfUkVTVUxUKFtkZWJ1ZyAgICAgICAgICAgICAgOiAke2Vu YWJsZV9kZWJ1Z31dKQorQUNfTVNHX1JFU1VMVChbc3RhdHMgICAgICAgICAgICAgIDogJHtlbmFi bGVfc3RhdHN9XSkKK0FDX01TR19SRVNVTFQoW2V4cGVyaW1lbnRhbF9zbWFsbG9jeCA6ICR7ZW5h YmxlX2V4cGVyaW1lbnRhbF9zbWFsbG9jeH1dKQorQUNfTVNHX1JFU1VMVChbcHJvZiAgICAgICAg ICAgICAgIDogJHtlbmFibGVfcHJvZn1dKQorQUNfTVNHX1JFU1VMVChbcHJvZi1saWJ1bndpbmQg ICAgIDogJHtlbmFibGVfcHJvZl9saWJ1bndpbmR9XSkKK0FDX01TR19SRVNVTFQoW3Byb2YtbGli Z2NjICAgICAgICA6ICR7ZW5hYmxlX3Byb2ZfbGliZ2NjfV0pCitBQ19NU0dfUkVTVUxUKFtwcm9m LWdjYyAgICAgICAgICAgOiAke2VuYWJsZV9wcm9mX2djY31dKQorQUNfTVNHX1JFU1VMVChbZmls bCAgICAgICAgICAgICAgIDogJHtlbmFibGVfZmlsbH1dKQorQUNfTVNHX1JFU1VMVChbdXRyYWNl ICAgICAgICAgICAgIDogJHtlbmFibGVfdXRyYWNlfV0pCitBQ19NU0dfUkVTVUxUKFt4bWFsbG9j ICAgICAgICAgICAgOiAke2VuYWJsZV94bWFsbG9jfV0pCitBQ19NU0dfUkVTVUxUKFtsb2cgICAg ICAgICAgICAgICAgOiAke2VuYWJsZV9sb2d9XSkKK0FDX01TR19SRVNVTFQoW2xhenlfbG9jayAg ICAgICAgICA6ICR7ZW5hYmxlX2xhenlfbG9ja31dKQorQUNfTVNHX1JFU1VMVChbY2FjaGUtb2Js aXZpb3VzICAgIDogJHtlbmFibGVfY2FjaGVfb2JsaXZpb3VzfV0pCitBQ19NU0dfUkVTVUxUKFtj eHggICAgICAgICAgICAgICAgOiAke2VuYWJsZV9jeHh9XSkKK0FDX01TR19SRVNVTFQoWz09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT1dKQoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxk L2plbWFsbG9jLTUuMy4wL2RvYy9odG1sLnhzbC5pbiBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxk L2plbWFsbG9jLTUuMy4wL2RvYy9odG1sLnhzbC5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwLi5lYzRmYTY1Ci0tLSAvZGV2L251bGwKKysrIGIvMzg5LWRzLWJhc2UtMy4zLjAt YnVpbGQvamVtYWxsb2MtNS4zLjAvZG9jL2h0bWwueHNsLmluCkBAIC0wLDAgKzEsNSBAQAorPHhz bDpzdHlsZXNoZWV0IHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNm b3JtIiB2ZXJzaW9uPSIxLjAiPgorICA8eHNsOmltcG9ydCBocmVmPSJAWFNMUk9PVEAvaHRtbC9k b2Nib29rLnhzbCIvPgorICA8eHNsOmltcG9ydCBocmVmPSJAYWJzX3NyY3Jvb3RAZG9jL3N0eWxl c2hlZXQueHNsIi8+CisgIDx4c2w6b3V0cHV0IG1ldGhvZD0ieG1sIiBlbmNvZGluZz0idXRmLTgi Lz4KKzwveHNsOnN0eWxlc2hlZXQ+CgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVp bGQvamVtYWxsb2MtNS4zLjAvZG9jL2plbWFsbG9jLnhtbC5pbiBiLzM4OS1kcy1iYXNlLTMuMy4w LWJ1aWxkL2plbWFsbG9jLTUuMy4wL2RvYy9qZW1hbGxvYy54bWwuaW4KbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMC4uZTI4ZThmMwotLS0gL2Rldi9udWxsCisrKyBiLzM4OS1kcy1i YXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2RvYy9qZW1hbGxvYy54bWwuaW4KQEAgLTAs MCArMSwzNzYzIEBACis8P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdVVEYtOCc/PgorPD94 bWwtc3R5bGVzaGVldCB0eXBlPSJ0ZXh0L3hzbCIKKyAgICAgICAgaHJlZj0iaHR0cDovL2RvY2Jv b2suc291cmNlZm9yZ2UubmV0L3JlbGVhc2UveHNsL2N1cnJlbnQvbWFucGFnZXMvZG9jYm9vay54 c2wiPz4KKzwhRE9DVFlQRSByZWZlbnRyeSBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBY TUwgVjQuNC8vRU4iCisgICAgICAgICJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sv eG1sLzQuNC9kb2Nib29reC5kdGQiIFsKK10+CisKKzxyZWZlbnRyeT4KKyAgPHJlZmVudHJ5aW5m bz4KKyAgICA8dGl0bGU+VXNlciBNYW51YWw8L3RpdGxlPgorICAgIDxwcm9kdWN0bmFtZT5qZW1h bGxvYzwvcHJvZHVjdG5hbWU+CisgICAgPHJlbGVhc2VpbmZvIHJvbGU9InZlcnNpb24iPkBqZW1h bGxvY192ZXJzaW9uQDwvcmVsZWFzZWluZm8+CisgICAgPGF1dGhvcmdyb3VwPgorICAgICAgPGF1 dGhvcj4KKyAgICAgICAgPGZpcnN0bmFtZT5KYXNvbjwvZmlyc3RuYW1lPgorICAgICAgICA8c3Vy bmFtZT5FdmFuczwvc3VybmFtZT4KKyAgICAgICAgPHBlcnNvbmJsdXJiPkF1dGhvcjwvcGVyc29u Ymx1cmI+CisgICAgICA8L2F1dGhvcj4KKyAgICA8L2F1dGhvcmdyb3VwPgorICA8L3JlZmVudHJ5 aW5mbz4KKyAgPHJlZm1ldGE+CisgICAgPHJlZmVudHJ5dGl0bGU+SkVNQUxMT0M8L3JlZmVudHJ5 dGl0bGU+CisgICAgPG1hbnZvbG51bT4zPC9tYW52b2xudW0+CisgIDwvcmVmbWV0YT4KKyAgPHJl Zm5hbWVkaXY+CisgICAgPHJlZmRlc2NyaXB0b3I+amVtYWxsb2M8L3JlZmRlc2NyaXB0b3I+Cisg ICAgPHJlZm5hbWU+amVtYWxsb2M8L3JlZm5hbWU+CisgICAgPCEtLSBFYWNoIHJlZm5hbWUgY2F1 c2VzIGEgbWFuIHBhZ2UgZmlsZSB0byBiZSBjcmVhdGVkLiAgT25seSBpZiB0aGlzIHdlcmUKKyAg ICAgICAgIHRoZSBzeXN0ZW0gbWFsbG9jKDMpIGltcGxlbWVudGF0aW9uIHdvdWxkIHRoZXNlIGZp bGVzIGJlIGFwcHJvcHJpYXRlLgorICAgIDxyZWZuYW1lPm1hbGxvYzwvcmVmbmFtZT4KKyAgICA8 cmVmbmFtZT5jYWxsb2M8L3JlZm5hbWU+CisgICAgPHJlZm5hbWU+cG9zaXhfbWVtYWxpZ248L3Jl Zm5hbWU+CisgICAgPHJlZm5hbWU+YWxpZ25lZF9hbGxvYzwvcmVmbmFtZT4KKyAgICA8cmVmbmFt ZT5yZWFsbG9jPC9yZWZuYW1lPgorICAgIDxyZWZuYW1lPmZyZWU8L3JlZm5hbWU+CisgICAgPHJl Zm5hbWU+bWFsbG9jeDwvcmVmbmFtZT4KKyAgICA8cmVmbmFtZT5yYWxsb2N4PC9yZWZuYW1lPgor ICAgIDxyZWZuYW1lPnhhbGxvY3g8L3JlZm5hbWU+CisgICAgPHJlZm5hbWU+c2FsbG9jeDwvcmVm bmFtZT4KKyAgICA8cmVmbmFtZT5kYWxsb2N4PC9yZWZuYW1lPgorICAgIDxyZWZuYW1lPnNkYWxs b2N4PC9yZWZuYW1lPgorICAgIDxyZWZuYW1lPm5hbGxvY3g8L3JlZm5hbWU+CisgICAgPHJlZm5h bWU+bWFsbGN0bDwvcmVmbmFtZT4KKyAgICA8cmVmbmFtZT5tYWxsY3RsbmFtZXRvbWliPC9yZWZu YW1lPgorICAgIDxyZWZuYW1lPm1hbGxjdGxieW1pYjwvcmVmbmFtZT4KKyAgICA8cmVmbmFtZT5t YWxsb2Nfc3RhdHNfcHJpbnQ8L3JlZm5hbWU+CisgICAgPHJlZm5hbWU+bWFsbG9jX3VzYWJsZV9z aXplPC9yZWZuYW1lPgorICAgIC0tPgorICAgIDxyZWZwdXJwb3NlPmdlbmVyYWwgcHVycG9zZSBt ZW1vcnkgYWxsb2NhdGlvbiBmdW5jdGlvbnM8L3JlZnB1cnBvc2U+CisgIDwvcmVmbmFtZWRpdj4K KyAgPHJlZnNlY3QxIGlkPSJsaWJyYXJ5Ij4KKyAgICA8dGl0bGU+TElCUkFSWTwvdGl0bGU+Cisg ICAgPHBhcmE+VGhpcyBtYW51YWwgZGVzY3JpYmVzIGplbWFsbG9jIEBqZW1hbGxvY192ZXJzaW9u QC4gIE1vcmUgaW5mb3JtYXRpb24KKyAgICBjYW4gYmUgZm91bmQgYXQgdGhlIDx1bGluaworICAg IHVybD0iaHR0cDovL2plbWFsbG9jLm5ldC8iPmplbWFsbG9jIHdlYnNpdGU8L3VsaW5rPi48L3Bh cmE+CisgIDwvcmVmc2VjdDE+CisgIDxyZWZzeW5vcHNpc2Rpdj4KKyAgICA8dGl0bGU+U1lOT1BT SVM8L3RpdGxlPgorICAgIDxmdW5jc3lub3BzaXM+CisgICAgICA8ZnVuY3N5bm9wc2lzaW5mbz4j aW5jbHVkZSAmbHQ7PGZpbGVuYW1lIGNsYXNzPSJoZWFkZXJmaWxlIj5qZW1hbGxvYy9qZW1hbGxv Yy5oPC9maWxlbmFtZT4mZ3Q7PC9mdW5jc3lub3BzaXNpbmZvPgorICAgICAgPHJlZnNlY3QyPgor ICAgICAgICA8dGl0bGU+U3RhbmRhcmQgQVBJPC90aXRsZT4KKyAgICAgICAgPGZ1bmNwcm90b3R5 cGU+CisgICAgICAgICAgPGZ1bmNkZWY+dm9pZCAqPGZ1bmN0aW9uPm1hbGxvYzwvZnVuY3Rpb24+ PC9mdW5jZGVmPgorICAgICAgICAgIDxwYXJhbWRlZj5zaXplX3QgPHBhcmFtZXRlcj5zaXplPC9w YXJhbWV0ZXI+PC9wYXJhbWRlZj4KKyAgICAgICAgPC9mdW5jcHJvdG90eXBlPgorICAgICAgICA8 ZnVuY3Byb3RvdHlwZT4KKyAgICAgICAgICA8ZnVuY2RlZj52b2lkICo8ZnVuY3Rpb24+Y2FsbG9j PC9mdW5jdGlvbj48L2Z1bmNkZWY+CisgICAgICAgICAgPHBhcmFtZGVmPnNpemVfdCA8cGFyYW1l dGVyPm51bWJlcjwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisgICAgICAgICAgPHBhcmFtZGVmPnNp emVfdCA8cGFyYW1ldGVyPnNpemU8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorICAgICAgICA8L2Z1 bmNwcm90b3R5cGU+CisgICAgICAgIDxmdW5jcHJvdG90eXBlPgorICAgICAgICAgIDxmdW5jZGVm PmludCA8ZnVuY3Rpb24+cG9zaXhfbWVtYWxpZ248L2Z1bmN0aW9uPjwvZnVuY2RlZj4KKyAgICAg ICAgICA8cGFyYW1kZWY+dm9pZCAqKjxwYXJhbWV0ZXI+cHRyPC9wYXJhbWV0ZXI+PC9wYXJhbWRl Zj4KKyAgICAgICAgICA8cGFyYW1kZWY+c2l6ZV90IDxwYXJhbWV0ZXI+YWxpZ25tZW50PC9wYXJh bWV0ZXI+PC9wYXJhbWRlZj4KKyAgICAgICAgICA8cGFyYW1kZWY+c2l6ZV90IDxwYXJhbWV0ZXI+ c2l6ZTwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisgICAgICAgIDwvZnVuY3Byb3RvdHlwZT4KKyAg ICAgICAgPGZ1bmNwcm90b3R5cGU+CisgICAgICAgICAgPGZ1bmNkZWY+dm9pZCAqPGZ1bmN0aW9u PmFsaWduZWRfYWxsb2M8L2Z1bmN0aW9uPjwvZnVuY2RlZj4KKyAgICAgICAgICA8cGFyYW1kZWY+ c2l6ZV90IDxwYXJhbWV0ZXI+YWxpZ25tZW50PC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKyAgICAg ICAgICA8cGFyYW1kZWY+c2l6ZV90IDxwYXJhbWV0ZXI+c2l6ZTwvcGFyYW1ldGVyPjwvcGFyYW1k ZWY+CisgICAgICAgIDwvZnVuY3Byb3RvdHlwZT4KKyAgICAgICAgPGZ1bmNwcm90b3R5cGU+Cisg ICAgICAgICAgPGZ1bmNkZWY+dm9pZCAqPGZ1bmN0aW9uPnJlYWxsb2M8L2Z1bmN0aW9uPjwvZnVu Y2RlZj4KKyAgICAgICAgICA8cGFyYW1kZWY+dm9pZCAqPHBhcmFtZXRlcj5wdHI8L3BhcmFtZXRl cj48L3BhcmFtZGVmPgorICAgICAgICAgIDxwYXJhbWRlZj5zaXplX3QgPHBhcmFtZXRlcj5zaXpl PC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKyAgICAgICAgPC9mdW5jcHJvdG90eXBlPgorICAgICAg ICA8ZnVuY3Byb3RvdHlwZT4KKyAgICAgICAgICA8ZnVuY2RlZj52b2lkIDxmdW5jdGlvbj5mcmVl PC9mdW5jdGlvbj48L2Z1bmNkZWY+CisgICAgICAgICAgPHBhcmFtZGVmPnZvaWQgKjxwYXJhbWV0 ZXI+cHRyPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKyAgICAgICAgPC9mdW5jcHJvdG90eXBlPgor ICAgICAgPC9yZWZzZWN0Mj4KKyAgICAgIDxyZWZzZWN0Mj4KKyAgICAgICAgPHRpdGxlPk5vbi1z dGFuZGFyZCBBUEk8L3RpdGxlPgorICAgICAgICA8ZnVuY3Byb3RvdHlwZT4KKyAgICAgICAgICA8 ZnVuY2RlZj52b2lkICo8ZnVuY3Rpb24+bWFsbG9jeDwvZnVuY3Rpb24+PC9mdW5jZGVmPgorICAg ICAgICAgIDxwYXJhbWRlZj5zaXplX3QgPHBhcmFtZXRlcj5zaXplPC9wYXJhbWV0ZXI+PC9wYXJh bWRlZj4KKyAgICAgICAgICA8cGFyYW1kZWY+aW50IDxwYXJhbWV0ZXI+ZmxhZ3M8L3BhcmFtZXRl cj48L3BhcmFtZGVmPgorICAgICAgICA8L2Z1bmNwcm90b3R5cGU+CisgICAgICAgIDxmdW5jcHJv dG90eXBlPgorICAgICAgICAgIDxmdW5jZGVmPnZvaWQgKjxmdW5jdGlvbj5yYWxsb2N4PC9mdW5j dGlvbj48L2Z1bmNkZWY+CisgICAgICAgICAgPHBhcmFtZGVmPnZvaWQgKjxwYXJhbWV0ZXI+cHRy PC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKyAgICAgICAgICA8cGFyYW1kZWY+c2l6ZV90IDxwYXJh bWV0ZXI+c2l6ZTwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisgICAgICAgICAgPHBhcmFtZGVmPmlu dCA8cGFyYW1ldGVyPmZsYWdzPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKyAgICAgICAgPC9mdW5j cHJvdG90eXBlPgorICAgICAgICA8ZnVuY3Byb3RvdHlwZT4KKyAgICAgICAgICA8ZnVuY2RlZj5z aXplX3QgPGZ1bmN0aW9uPnhhbGxvY3g8L2Z1bmN0aW9uPjwvZnVuY2RlZj4KKyAgICAgICAgICA8 cGFyYW1kZWY+dm9pZCAqPHBhcmFtZXRlcj5wdHI8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorICAg ICAgICAgIDxwYXJhbWRlZj5zaXplX3QgPHBhcmFtZXRlcj5zaXplPC9wYXJhbWV0ZXI+PC9wYXJh bWRlZj4KKyAgICAgICAgICA8cGFyYW1kZWY+c2l6ZV90IDxwYXJhbWV0ZXI+ZXh0cmE8L3BhcmFt ZXRlcj48L3BhcmFtZGVmPgorICAgICAgICAgIDxwYXJhbWRlZj5pbnQgPHBhcmFtZXRlcj5mbGFn czwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisgICAgICAgIDwvZnVuY3Byb3RvdHlwZT4KKyAgICAg ICAgPGZ1bmNwcm90b3R5cGU+CisgICAgICAgICAgPGZ1bmNkZWY+c2l6ZV90IDxmdW5jdGlvbj5z YWxsb2N4PC9mdW5jdGlvbj48L2Z1bmNkZWY+CisgICAgICAgICAgPHBhcmFtZGVmPnZvaWQgKjxw YXJhbWV0ZXI+cHRyPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKyAgICAgICAgICA8cGFyYW1kZWY+ aW50IDxwYXJhbWV0ZXI+ZmxhZ3M8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorICAgICAgICA8L2Z1 bmNwcm90b3R5cGU+CisgICAgICAgIDxmdW5jcHJvdG90eXBlPgorICAgICAgICAgIDxmdW5jZGVm PnZvaWQgPGZ1bmN0aW9uPmRhbGxvY3g8L2Z1bmN0aW9uPjwvZnVuY2RlZj4KKyAgICAgICAgICA8 cGFyYW1kZWY+dm9pZCAqPHBhcmFtZXRlcj5wdHI8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorICAg ICAgICAgIDxwYXJhbWRlZj5pbnQgPHBhcmFtZXRlcj5mbGFnczwvcGFyYW1ldGVyPjwvcGFyYW1k ZWY+CisgICAgICAgIDwvZnVuY3Byb3RvdHlwZT4KKyAgICAgICAgPGZ1bmNwcm90b3R5cGU+Cisg ICAgICAgICAgPGZ1bmNkZWY+dm9pZCA8ZnVuY3Rpb24+c2RhbGxvY3g8L2Z1bmN0aW9uPjwvZnVu Y2RlZj4KKyAgICAgICAgICA8cGFyYW1kZWY+dm9pZCAqPHBhcmFtZXRlcj5wdHI8L3BhcmFtZXRl cj48L3BhcmFtZGVmPgorICAgICAgICAgIDxwYXJhbWRlZj5zaXplX3QgPHBhcmFtZXRlcj5zaXpl PC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKyAgICAgICAgICA8cGFyYW1kZWY+aW50IDxwYXJhbWV0 ZXI+ZmxhZ3M8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorICAgICAgICA8L2Z1bmNwcm90b3R5cGU+ CisgICAgICAgIDxmdW5jcHJvdG90eXBlPgorICAgICAgICAgIDxmdW5jZGVmPnNpemVfdCA8ZnVu Y3Rpb24+bmFsbG9jeDwvZnVuY3Rpb24+PC9mdW5jZGVmPgorICAgICAgICAgIDxwYXJhbWRlZj5z aXplX3QgPHBhcmFtZXRlcj5zaXplPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKyAgICAgICAgICA8 cGFyYW1kZWY+aW50IDxwYXJhbWV0ZXI+ZmxhZ3M8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorICAg ICAgICA8L2Z1bmNwcm90b3R5cGU+CisgICAgICAgIDxmdW5jcHJvdG90eXBlPgorICAgICAgICAg IDxmdW5jZGVmPmludCA8ZnVuY3Rpb24+bWFsbGN0bDwvZnVuY3Rpb24+PC9mdW5jZGVmPgorICAg ICAgICAgIDxwYXJhbWRlZj5jb25zdCBjaGFyICo8cGFyYW1ldGVyPm5hbWU8L3BhcmFtZXRlcj48 L3BhcmFtZGVmPgorICAgICAgICAgIDxwYXJhbWRlZj52b2lkICo8cGFyYW1ldGVyPm9sZHA8L3Bh cmFtZXRlcj48L3BhcmFtZGVmPgorICAgICAgICAgIDxwYXJhbWRlZj5zaXplX3QgKjxwYXJhbWV0 ZXI+b2xkbGVucDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisgICAgICAgICAgPHBhcmFtZGVmPnZv aWQgKjxwYXJhbWV0ZXI+bmV3cDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisgICAgICAgICAgPHBh cmFtZGVmPnNpemVfdCA8cGFyYW1ldGVyPm5ld2xlbjwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+Cisg ICAgICAgIDwvZnVuY3Byb3RvdHlwZT4KKyAgICAgICAgPGZ1bmNwcm90b3R5cGU+CisgICAgICAg ICAgPGZ1bmNkZWY+aW50IDxmdW5jdGlvbj5tYWxsY3RsbmFtZXRvbWliPC9mdW5jdGlvbj48L2Z1 bmNkZWY+CisgICAgICAgICAgPHBhcmFtZGVmPmNvbnN0IGNoYXIgKjxwYXJhbWV0ZXI+bmFtZTwv cGFyYW1ldGVyPjwvcGFyYW1kZWY+CisgICAgICAgICAgPHBhcmFtZGVmPnNpemVfdCAqPHBhcmFt ZXRlcj5taWJwPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKyAgICAgICAgICA8cGFyYW1kZWY+c2l6 ZV90ICo8cGFyYW1ldGVyPm1pYmxlbnA8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorICAgICAgICA8 L2Z1bmNwcm90b3R5cGU+CisgICAgICAgIDxmdW5jcHJvdG90eXBlPgorICAgICAgICAgIDxmdW5j ZGVmPmludCA8ZnVuY3Rpb24+bWFsbGN0bGJ5bWliPC9mdW5jdGlvbj48L2Z1bmNkZWY+CisgICAg ICAgICAgPHBhcmFtZGVmPmNvbnN0IHNpemVfdCAqPHBhcmFtZXRlcj5taWI8L3BhcmFtZXRlcj48 L3BhcmFtZGVmPgorICAgICAgICAgIDxwYXJhbWRlZj5zaXplX3QgPHBhcmFtZXRlcj5taWJsZW48 L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorICAgICAgICAgIDxwYXJhbWRlZj52b2lkICo8cGFyYW1l dGVyPm9sZHA8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorICAgICAgICAgIDxwYXJhbWRlZj5zaXpl X3QgKjxwYXJhbWV0ZXI+b2xkbGVucDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisgICAgICAgICAg PHBhcmFtZGVmPnZvaWQgKjxwYXJhbWV0ZXI+bmV3cDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+Cisg ICAgICAgICAgPHBhcmFtZGVmPnNpemVfdCA8cGFyYW1ldGVyPm5ld2xlbjwvcGFyYW1ldGVyPjwv cGFyYW1kZWY+CisgICAgICAgIDwvZnVuY3Byb3RvdHlwZT4KKyAgICAgICAgPGZ1bmNwcm90b3R5 cGU+CisgICAgICAgICAgPGZ1bmNkZWY+dm9pZCA8ZnVuY3Rpb24+bWFsbG9jX3N0YXRzX3ByaW50 PC9mdW5jdGlvbj48L2Z1bmNkZWY+CisgICAgICAgICAgPHBhcmFtZGVmPnZvaWQgPHBhcmFtZXRl cj4oKndyaXRlX2NiKTwvcGFyYW1ldGVyPgorICAgICAgICAgICAgPGZ1bmNwYXJhbXM+dm9pZCAq LCBjb25zdCBjaGFyICo8L2Z1bmNwYXJhbXM+CisgICAgICAgICAgPC9wYXJhbWRlZj4KKyAgICAg ICAgICA8cGFyYW1kZWY+dm9pZCAqPHBhcmFtZXRlcj5jYm9wYXF1ZTwvcGFyYW1ldGVyPjwvcGFy YW1kZWY+CisgICAgICAgICAgPHBhcmFtZGVmPmNvbnN0IGNoYXIgKjxwYXJhbWV0ZXI+b3B0czwv cGFyYW1ldGVyPjwvcGFyYW1kZWY+CisgICAgICAgIDwvZnVuY3Byb3RvdHlwZT4KKyAgICAgICAg PGZ1bmNwcm90b3R5cGU+CisgICAgICAgICAgPGZ1bmNkZWY+c2l6ZV90IDxmdW5jdGlvbj5tYWxs b2NfdXNhYmxlX3NpemU8L2Z1bmN0aW9uPjwvZnVuY2RlZj4KKyAgICAgICAgICA8cGFyYW1kZWY+ Y29uc3Qgdm9pZCAqPHBhcmFtZXRlcj5wdHI8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorICAgICAg ICA8L2Z1bmNwcm90b3R5cGU+CisgICAgICAgIDxmdW5jcHJvdG90eXBlPgorICAgICAgICAgIDxm dW5jZGVmPnZvaWQgPGZ1bmN0aW9uPigqbWFsbG9jX21lc3NhZ2UpPC9mdW5jdGlvbj48L2Z1bmNk ZWY+CisgICAgICAgICAgPHBhcmFtZGVmPnZvaWQgKjxwYXJhbWV0ZXI+Y2JvcGFxdWU8L3BhcmFt ZXRlcj48L3BhcmFtZGVmPgorICAgICAgICAgIDxwYXJhbWRlZj5jb25zdCBjaGFyICo8cGFyYW1l dGVyPnM8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorICAgICAgICA8L2Z1bmNwcm90b3R5cGU+Cisg ICAgICAgIDxwYXJhPjx0eXBlPmNvbnN0IGNoYXIgKjwvdHlwZT48dmFybmFtZT5tYWxsb2NfY29u ZjwvdmFybmFtZT47PC9wYXJhPgorICAgICAgPC9yZWZzZWN0Mj4KKyAgICA8L2Z1bmNzeW5vcHNp cz4KKyAgPC9yZWZzeW5vcHNpc2Rpdj4KKyAgPHJlZnNlY3QxIGlkPSJkZXNjcmlwdGlvbiI+Cisg ICAgPHRpdGxlPkRFU0NSSVBUSU9OPC90aXRsZT4KKyAgICA8cmVmc2VjdDI+CisgICAgICA8dGl0 bGU+U3RhbmRhcmQgQVBJPC90aXRsZT4KKworICAgICAgPHBhcmE+VGhlIDxmdW5jdGlvbj5tYWxs b2MoKTwvZnVuY3Rpb24+IGZ1bmN0aW9uIGFsbG9jYXRlcworICAgICAgPHBhcmFtZXRlcj5zaXpl PC9wYXJhbWV0ZXI+IGJ5dGVzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiAgVGhlIGFsbG9jYXRl ZAorICAgICAgc3BhY2UgaXMgc3VpdGFibHkgYWxpZ25lZCAoYWZ0ZXIgcG9zc2libGUgcG9pbnRl ciBjb2VyY2lvbikgZm9yIHN0b3JhZ2UKKyAgICAgIG9mIGFueSB0eXBlIG9mIG9iamVjdC48L3Bh cmE+CisKKyAgICAgIDxwYXJhPlRoZSA8ZnVuY3Rpb24+Y2FsbG9jKCk8L2Z1bmN0aW9uPiBmdW5j dGlvbiBhbGxvY2F0ZXMKKyAgICAgIHNwYWNlIGZvciA8cGFyYW1ldGVyPm51bWJlcjwvcGFyYW1l dGVyPiBvYmplY3RzLCBlYWNoCisgICAgICA8cGFyYW1ldGVyPnNpemU8L3BhcmFtZXRlcj4gYnl0 ZXMgaW4gbGVuZ3RoLiAgVGhlIHJlc3VsdCBpcyBpZGVudGljYWwgdG8KKyAgICAgIGNhbGxpbmcg PGZ1bmN0aW9uPm1hbGxvYygpPC9mdW5jdGlvbj4gd2l0aCBhbiBhcmd1bWVudCBvZgorICAgICAg PHBhcmFtZXRlcj5udW1iZXI8L3BhcmFtZXRlcj4gKiA8cGFyYW1ldGVyPnNpemU8L3BhcmFtZXRl cj4sIHdpdGggdGhlCisgICAgICBleGNlcHRpb24gdGhhdCB0aGUgYWxsb2NhdGVkIG1lbW9yeSBp cyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIHplcm8KKyAgICAgIGJ5dGVzLjwvcGFyYT4KKwor ICAgICAgPHBhcmE+VGhlIDxmdW5jdGlvbj5wb3NpeF9tZW1hbGlnbigpPC9mdW5jdGlvbj4gZnVu Y3Rpb24KKyAgICAgIGFsbG9jYXRlcyA8cGFyYW1ldGVyPnNpemU8L3BhcmFtZXRlcj4gYnl0ZXMg b2YgbWVtb3J5IHN1Y2ggdGhhdCB0aGUKKyAgICAgIGFsbG9jYXRpb24ncyBiYXNlIGFkZHJlc3Mg aXMgYSBtdWx0aXBsZSBvZgorICAgICAgPHBhcmFtZXRlcj5hbGlnbm1lbnQ8L3BhcmFtZXRlcj4s IGFuZCByZXR1cm5zIHRoZSBhbGxvY2F0aW9uIGluIHRoZSB2YWx1ZQorICAgICAgcG9pbnRlZCB0 byBieSA8cGFyYW1ldGVyPnB0cjwvcGFyYW1ldGVyPi4gIFRoZSByZXF1ZXN0ZWQKKyAgICAgIDxw YXJhbWV0ZXI+YWxpZ25tZW50PC9wYXJhbWV0ZXI+IG11c3QgYmUgYSBwb3dlciBvZiAyIGF0IGxl YXN0IGFzIGxhcmdlIGFzCisgICAgICA8Y29kZSBsYW5ndWFnZT0iQyI+c2l6ZW9mKDx0eXBlPnZv aWQgKjwvdHlwZT4pPC9jb2RlPi48L3BhcmE+CisKKyAgICAgIDxwYXJhPlRoZSA8ZnVuY3Rpb24+ YWxpZ25lZF9hbGxvYygpPC9mdW5jdGlvbj4gZnVuY3Rpb24KKyAgICAgIGFsbG9jYXRlcyA8cGFy YW1ldGVyPnNpemU8L3BhcmFtZXRlcj4gYnl0ZXMgb2YgbWVtb3J5IHN1Y2ggdGhhdCB0aGUKKyAg ICAgIGFsbG9jYXRpb24ncyBiYXNlIGFkZHJlc3MgaXMgYSBtdWx0aXBsZSBvZgorICAgICAgPHBh cmFtZXRlcj5hbGlnbm1lbnQ8L3BhcmFtZXRlcj4uICBUaGUgcmVxdWVzdGVkCisgICAgICA8cGFy YW1ldGVyPmFsaWdubWVudDwvcGFyYW1ldGVyPiBtdXN0IGJlIGEgcG93ZXIgb2YgMi4gIEJlaGF2 aW9yIGlzCisgICAgICB1bmRlZmluZWQgaWYgPHBhcmFtZXRlcj5zaXplPC9wYXJhbWV0ZXI+IGlz IG5vdCBhbiBpbnRlZ3JhbCBtdWx0aXBsZSBvZgorICAgICAgPHBhcmFtZXRlcj5hbGlnbm1lbnQ8 L3BhcmFtZXRlcj4uPC9wYXJhPgorCisgICAgICA8cGFyYT5UaGUgPGZ1bmN0aW9uPnJlYWxsb2Mo KTwvZnVuY3Rpb24+IGZ1bmN0aW9uIGNoYW5nZXMgdGhlCisgICAgICBzaXplIG9mIHRoZSBwcmV2 aW91c2x5IGFsbG9jYXRlZCBtZW1vcnkgcmVmZXJlbmNlZCBieQorICAgICAgPHBhcmFtZXRlcj5w dHI8L3BhcmFtZXRlcj4gdG8gPHBhcmFtZXRlcj5zaXplPC9wYXJhbWV0ZXI+IGJ5dGVzLiAgVGhl CisgICAgICBjb250ZW50cyBvZiB0aGUgbWVtb3J5IGFyZSB1bmNoYW5nZWQgdXAgdG8gdGhlIGxl c3NlciBvZiB0aGUgbmV3IGFuZCBvbGQKKyAgICAgIHNpemVzLiAgSWYgdGhlIG5ldyBzaXplIGlz IGxhcmdlciwgdGhlIGNvbnRlbnRzIG9mIHRoZSBuZXdseSBhbGxvY2F0ZWQKKyAgICAgIHBvcnRp b24gb2YgdGhlIG1lbW9yeSBhcmUgdW5kZWZpbmVkLiAgVXBvbiBzdWNjZXNzLCB0aGUgbWVtb3J5 IHJlZmVyZW5jZWQKKyAgICAgIGJ5IDxwYXJhbWV0ZXI+cHRyPC9wYXJhbWV0ZXI+IGlzIGZyZWVk IGFuZCBhIHBvaW50ZXIgdG8gdGhlIG5ld2x5CisgICAgICBhbGxvY2F0ZWQgbWVtb3J5IGlzIHJl dHVybmVkLiAgTm90ZSB0aGF0CisgICAgICA8ZnVuY3Rpb24+cmVhbGxvYygpPC9mdW5jdGlvbj4g bWF5IG1vdmUgdGhlIG1lbW9yeSBhbGxvY2F0aW9uLAorICAgICAgcmVzdWx0aW5nIGluIGEgZGlm ZmVyZW50IHJldHVybiB2YWx1ZSB0aGFuIDxwYXJhbWV0ZXI+cHRyPC9wYXJhbWV0ZXI+LgorICAg ICAgSWYgPHBhcmFtZXRlcj5wdHI8L3BhcmFtZXRlcj4gaXMgPGNvbnN0YW50Pk5VTEw8L2NvbnN0 YW50PiwgdGhlCisgICAgICA8ZnVuY3Rpb24+cmVhbGxvYygpPC9mdW5jdGlvbj4gZnVuY3Rpb24g YmVoYXZlcyBpZGVudGljYWxseSB0bworICAgICAgPGZ1bmN0aW9uPm1hbGxvYygpPC9mdW5jdGlv bj4gZm9yIHRoZSBzcGVjaWZpZWQgc2l6ZS48L3BhcmE+CisKKyAgICAgIDxwYXJhPlRoZSA8ZnVu Y3Rpb24+ZnJlZSgpPC9mdW5jdGlvbj4gZnVuY3Rpb24gY2F1c2VzIHRoZQorICAgICAgYWxsb2Nh dGVkIG1lbW9yeSByZWZlcmVuY2VkIGJ5IDxwYXJhbWV0ZXI+cHRyPC9wYXJhbWV0ZXI+IHRvIGJl IG1hZGUKKyAgICAgIGF2YWlsYWJsZSBmb3IgZnV0dXJlIGFsbG9jYXRpb25zLiAgSWYgPHBhcmFt ZXRlcj5wdHI8L3BhcmFtZXRlcj4gaXMKKyAgICAgIDxjb25zdGFudD5OVUxMPC9jb25zdGFudD4s IG5vIGFjdGlvbiBvY2N1cnMuPC9wYXJhPgorICAgIDwvcmVmc2VjdDI+CisgICAgPHJlZnNlY3Qy PgorICAgICAgPHRpdGxlPk5vbi1zdGFuZGFyZCBBUEk8L3RpdGxlPgorICAgICAgPHBhcmE+VGhl IDxmdW5jdGlvbj5tYWxsb2N4KCk8L2Z1bmN0aW9uPiwKKyAgICAgIDxmdW5jdGlvbj5yYWxsb2N4 KCk8L2Z1bmN0aW9uPiwKKyAgICAgIDxmdW5jdGlvbj54YWxsb2N4KCk8L2Z1bmN0aW9uPiwKKyAg ICAgIDxmdW5jdGlvbj5zYWxsb2N4KCk8L2Z1bmN0aW9uPiwKKyAgICAgIDxmdW5jdGlvbj5kYWxs b2N4KCk8L2Z1bmN0aW9uPiwKKyAgICAgIDxmdW5jdGlvbj5zZGFsbG9jeCgpPC9mdW5jdGlvbj4s IGFuZAorICAgICAgPGZ1bmN0aW9uPm5hbGxvY3goKTwvZnVuY3Rpb24+IGZ1bmN0aW9ucyBhbGwg aGF2ZSBhCisgICAgICA8cGFyYW1ldGVyPmZsYWdzPC9wYXJhbWV0ZXI+IGFyZ3VtZW50IHRoYXQg Y2FuIGJlIHVzZWQgdG8gc3BlY2lmeQorICAgICAgb3B0aW9ucy4gIFRoZSBmdW5jdGlvbnMgb25s eSBjaGVjayB0aGUgb3B0aW9ucyB0aGF0IGFyZSBjb250ZXh0dWFsbHkKKyAgICAgIHJlbGV2YW50 LiAgVXNlIGJpdHdpc2Ugb3IgKDxjb2RlIGxhbmd1YWdlPSJDIj58PC9jb2RlPikgb3BlcmF0aW9u cyB0bworICAgICAgc3BlY2lmeSBvbmUgb3IgbW9yZSBvZiB0aGUgZm9sbG93aW5nOgorICAgICAg ICA8dmFyaWFibGVsaXN0PgorICAgICAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9Ik1BTExPQ1hfTEdf QUxJR04iPgorICAgICAgICAgICAgPHRlcm0+PGNvbnN0YW50Pk1BTExPQ1hfTEdfQUxJR04oPHBh cmFtZXRlcj5sYTwvcGFyYW1ldGVyPikKKyAgICAgICAgICAgIDwvY29uc3RhbnQ+PC90ZXJtPgor CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+QWxpZ24gdGhlIG1lbW9yeSBhbGxvY2F0aW9u IHRvIHN0YXJ0IGF0IGFuIGFkZHJlc3MKKyAgICAgICAgICAgIHRoYXQgaXMgYSBtdWx0aXBsZSBv ZiA8Y29kZSBsYW5ndWFnZT0iQyI+KDEgJmx0OyZsdDsKKyAgICAgICAgICAgIDxwYXJhbWV0ZXI+ bGE8L3BhcmFtZXRlcj4pPC9jb2RlPi4gIFRoaXMgbWFjcm8gZG9lcyBub3QgdmFsaWRhdGUKKyAg ICAgICAgICAgIHRoYXQgPHBhcmFtZXRlcj5sYTwvcGFyYW1ldGVyPiBpcyB3aXRoaW4gdGhlIHZh bGlkCisgICAgICAgICAgICByYW5nZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICA8L3Zh cmxpc3RlbnRyeT4KKyAgICAgICAgICA8dmFybGlzdGVudHJ5IGlkPSJNQUxMT0NYX0FMSUdOIj4K KyAgICAgICAgICAgIDx0ZXJtPjxjb25zdGFudD5NQUxMT0NYX0FMSUdOKDxwYXJhbWV0ZXI+YTwv cGFyYW1ldGVyPikKKyAgICAgICAgICAgIDwvY29uc3RhbnQ+PC90ZXJtPgorCisgICAgICAgICAg ICA8bGlzdGl0ZW0+PHBhcmE+QWxpZ24gdGhlIG1lbW9yeSBhbGxvY2F0aW9uIHRvIHN0YXJ0IGF0 IGFuIGFkZHJlc3MKKyAgICAgICAgICAgIHRoYXQgaXMgYSBtdWx0aXBsZSBvZiA8cGFyYW1ldGVy PmE8L3BhcmFtZXRlcj4sIHdoZXJlCisgICAgICAgICAgICA8cGFyYW1ldGVyPmE8L3BhcmFtZXRl cj4gaXMgYSBwb3dlciBvZiB0d28uICBUaGlzIG1hY3JvIGRvZXMgbm90CisgICAgICAgICAgICB2 YWxpZGF0ZSB0aGF0IDxwYXJhbWV0ZXI+YTwvcGFyYW1ldGVyPiBpcyBhIHBvd2VyIG9mIDIuCisg ICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4K KyAgICAgICAgICA8dmFybGlzdGVudHJ5IGlkPSJNQUxMT0NYX1pFUk8iPgorICAgICAgICAgICAg PHRlcm0+PGNvbnN0YW50Pk1BTExPQ1hfWkVSTzwvY29uc3RhbnQ+PC90ZXJtPgorCisgICAgICAg ICAgICA8bGlzdGl0ZW0+PHBhcmE+SW5pdGlhbGl6ZSBuZXdseSBhbGxvY2F0ZWQgbWVtb3J5IHRv IGNvbnRhaW4gemVybworICAgICAgICAgICAgYnl0ZXMuICBJbiB0aGUgZ3Jvd2luZyByZWFsbG9j YXRpb24gY2FzZSwgdGhlIHJlYWwgc2l6ZSBwcmlvciB0bworICAgICAgICAgICAgcmVhbGxvY2F0 aW9uIGRlZmluZXMgdGhlIGJvdW5kYXJ5IGJldHdlZW4gdW50b3VjaGVkIGJ5dGVzIGFuZCB0aG9z ZQorICAgICAgICAgICAgdGhhdCBhcmUgaW5pdGlhbGl6ZWQgdG8gY29udGFpbiB6ZXJvIGJ5dGVz LiAgSWYgdGhpcyBtYWNybyBpcworICAgICAgICAgICAgYWJzZW50LCBuZXdseSBhbGxvY2F0ZWQg bWVtb3J5IGlzIHVuaW5pdGlhbGl6ZWQuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgPC92 YXJsaXN0ZW50cnk+CisgICAgICAgICAgPHZhcmxpc3RlbnRyeSBpZD0iTUFMTE9DWF9UQ0FDSEUi PgorICAgICAgICAgICAgPHRlcm0+PGNvbnN0YW50Pk1BTExPQ1hfVENBQ0hFKDxwYXJhbWV0ZXI+ dGM8L3BhcmFtZXRlcj4pCisgICAgICAgICAgICA8L2NvbnN0YW50PjwvdGVybT4KKworICAgICAg ICAgICAgPGxpc3RpdGVtPjxwYXJhPlVzZSB0aGUgdGhyZWFkLXNwZWNpZmljIGNhY2hlICh0Y2Fj aGUpIHNwZWNpZmllZCBieQorICAgICAgICAgICAgdGhlIGlkZW50aWZpZXIgPHBhcmFtZXRlcj50 YzwvcGFyYW1ldGVyPiwgd2hpY2ggbXVzdCBoYXZlIGJlZW4KKyAgICAgICAgICAgIGFjcXVpcmVk IHZpYSB0aGUgPGxpbmsKKyAgICAgICAgICAgIGxpbmtlbmQ9InRjYWNoZS5jcmVhdGUiPjxtYWxs Y3RsPnRjYWNoZS5jcmVhdGU8L21hbGxjdGw+PC9saW5rPgorICAgICAgICAgICAgbWFsbGN0bC4g IFRoaXMgbWFjcm8gZG9lcyBub3QgdmFsaWRhdGUgdGhhdAorICAgICAgICAgICAgPHBhcmFtZXRl cj50YzwvcGFyYW1ldGVyPiBzcGVjaWZpZXMgYSB2YWxpZAorICAgICAgICAgICAgaWRlbnRpZmll ci48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgICAg ICA8dmFybGlzdGVudHJ5IGlkPSJNQUxMT0NfVENBQ0hFX05PTkUiPgorICAgICAgICAgICAgPHRl cm0+PGNvbnN0YW50Pk1BTExPQ1hfVENBQ0hFX05PTkU8L2NvbnN0YW50PjwvdGVybT4KKworICAg ICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkRvIG5vdCB1c2UgYSB0aHJlYWQtc3BlY2lmaWMgY2Fj aGUgKHRjYWNoZSkuICBVbmxlc3MKKyAgICAgICAgICAgIDxjb25zdGFudD5NQUxMT0NYX1RDQUNI RSg8cGFyYW1ldGVyPnRjPC9wYXJhbWV0ZXI+KTwvY29uc3RhbnQ+IG9yCisgICAgICAgICAgICA8 Y29uc3RhbnQ+TUFMTE9DWF9UQ0FDSEVfTk9ORTwvY29uc3RhbnQ+IGlzIHNwZWNpZmllZCwgYW4K KyAgICAgICAgICAgIGF1dG9tYXRpY2FsbHkgbWFuYWdlZCB0Y2FjaGUgd2lsbCBiZSB1c2VkIHVu ZGVyIG1hbnkgY2lyY3Vtc3RhbmNlcy4KKyAgICAgICAgICAgIFRoaXMgbWFjcm8gY2Fubm90IGJl IHVzZWQgaW4gdGhlIHNhbWUgPHBhcmFtZXRlcj5mbGFnczwvcGFyYW1ldGVyPgorICAgICAgICAg ICAgYXJndW1lbnQgYXMKKyAgICAgICAgICAgIDxjb25zdGFudD5NQUxMT0NYX1RDQUNIRSg8cGFy YW1ldGVyPnRjPC9wYXJhbWV0ZXI+KTwvY29uc3RhbnQ+LjwvcGFyYT48L2xpc3RpdGVtPgorICAg ICAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9Ik1BTExP Q1hfQVJFTkEiPgorICAgICAgICAgICAgPHRlcm0+PGNvbnN0YW50Pk1BTExPQ1hfQVJFTkEoPHBh cmFtZXRlcj5hPC9wYXJhbWV0ZXI+KQorICAgICAgICAgICAgPC9jb25zdGFudD48L3Rlcm0+CisK KyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Vc2UgdGhlIGFyZW5hIHNwZWNpZmllZCBieSB0 aGUgaW5kZXgKKyAgICAgICAgICAgIDxwYXJhbWV0ZXI+YTwvcGFyYW1ldGVyPi4gIFRoaXMgbWFj cm8gaGFzIG5vIGVmZmVjdCBmb3IgcmVnaW9ucyB0aGF0CisgICAgICAgICAgICB3ZXJlIGFsbG9j YXRlZCB2aWEgYW4gYXJlbmEgb3RoZXIgdGhhbiB0aGUgb25lIHNwZWNpZmllZC4gIFRoaXMKKyAg ICAgICAgICAgIG1hY3JvIGRvZXMgbm90IHZhbGlkYXRlIHRoYXQgPHBhcmFtZXRlcj5hPC9wYXJh bWV0ZXI+IHNwZWNpZmllcyBhbgorICAgICAgICAgICAgYXJlbmEgaW5kZXggaW4gdGhlIHZhbGlk IHJhbmdlLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgorICAg ICAgICA8L3ZhcmlhYmxlbGlzdD4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+VGhlIDxm dW5jdGlvbj5tYWxsb2N4KCk8L2Z1bmN0aW9uPiBmdW5jdGlvbiBhbGxvY2F0ZXMgYXQKKyAgICAg IGxlYXN0IDxwYXJhbWV0ZXI+c2l6ZTwvcGFyYW1ldGVyPiBieXRlcyBvZiBtZW1vcnksIGFuZCBy ZXR1cm5zIGEgcG9pbnRlcgorICAgICAgdG8gdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgYWxsb2Nh dGlvbi4gIEJlaGF2aW9yIGlzIHVuZGVmaW5lZCBpZgorICAgICAgPHBhcmFtZXRlcj5zaXplPC9w YXJhbWV0ZXI+IGlzIDxjb25zdGFudD4wPC9jb25zdGFudD4uPC9wYXJhPgorCisgICAgICA8cGFy YT5UaGUgPGZ1bmN0aW9uPnJhbGxvY3goKTwvZnVuY3Rpb24+IGZ1bmN0aW9uIHJlc2l6ZXMgdGhl CisgICAgICBhbGxvY2F0aW9uIGF0IDxwYXJhbWV0ZXI+cHRyPC9wYXJhbWV0ZXI+IHRvIGJlIGF0 IGxlYXN0CisgICAgICA8cGFyYW1ldGVyPnNpemU8L3BhcmFtZXRlcj4gYnl0ZXMsIGFuZCByZXR1 cm5zIGEgcG9pbnRlciB0byB0aGUgYmFzZQorICAgICAgYWRkcmVzcyBvZiB0aGUgcmVzdWx0aW5n IGFsbG9jYXRpb24sIHdoaWNoIG1heSBvciBtYXkgbm90IGhhdmUgbW92ZWQgZnJvbQorICAgICAg aXRzIG9yaWdpbmFsIGxvY2F0aW9uLiAgQmVoYXZpb3IgaXMgdW5kZWZpbmVkIGlmCisgICAgICA8 cGFyYW1ldGVyPnNpemU8L3BhcmFtZXRlcj4gaXMgPGNvbnN0YW50PjA8L2NvbnN0YW50Pi48L3Bh cmE+CisKKyAgICAgIDxwYXJhPlRoZSA8ZnVuY3Rpb24+eGFsbG9jeCgpPC9mdW5jdGlvbj4gZnVu Y3Rpb24gcmVzaXplcyB0aGUKKyAgICAgIGFsbG9jYXRpb24gYXQgPHBhcmFtZXRlcj5wdHI8L3Bh cmFtZXRlcj4gaW4gcGxhY2UgdG8gYmUgYXQgbGVhc3QKKyAgICAgIDxwYXJhbWV0ZXI+c2l6ZTwv cGFyYW1ldGVyPiBieXRlcywgYW5kIHJldHVybnMgdGhlIHJlYWwgc2l6ZSBvZiB0aGUKKyAgICAg IGFsbG9jYXRpb24uICBJZiA8cGFyYW1ldGVyPmV4dHJhPC9wYXJhbWV0ZXI+IGlzIG5vbi16ZXJv LCBhbiBhdHRlbXB0IGlzCisgICAgICBtYWRlIHRvIHJlc2l6ZSB0aGUgYWxsb2NhdGlvbiB0byBi ZSBhdCBsZWFzdCA8Y29kZQorICAgICAgbGFuZ3VhZ2U9IkMiPig8cGFyYW1ldGVyPnNpemU8L3Bh cmFtZXRlcj4gKworICAgICAgPHBhcmFtZXRlcj5leHRyYTwvcGFyYW1ldGVyPik8L2NvZGU+IGJ5 dGVzLCB0aG91Z2ggaW5hYmlsaXR5IHRvIGFsbG9jYXRlCisgICAgICB0aGUgZXh0cmEgYnl0ZShz KSB3aWxsIG5vdCBieSBpdHNlbGYgcmVzdWx0IGluIGZhaWx1cmUgdG8gcmVzaXplLgorICAgICAg QmVoYXZpb3IgaXMgdW5kZWZpbmVkIGlmIDxwYXJhbWV0ZXI+c2l6ZTwvcGFyYW1ldGVyPiBpcwor ICAgICAgPGNvbnN0YW50PjA8L2NvbnN0YW50Piwgb3IgaWYgPGNvZGUKKyAgICAgIGxhbmd1YWdl PSJDIj4oPHBhcmFtZXRlcj5zaXplPC9wYXJhbWV0ZXI+ICsgPHBhcmFtZXRlcj5leHRyYTwvcGFy YW1ldGVyPgorICAgICAgJmd0OyA8Y29uc3RhbnQ+U0laRV9UX01BWDwvY29uc3RhbnQ+KTwvY29k ZT4uPC9wYXJhPgorCisgICAgICA8cGFyYT5UaGUgPGZ1bmN0aW9uPnNhbGxvY3goKTwvZnVuY3Rp b24+IGZ1bmN0aW9uIHJldHVybnMgdGhlCisgICAgICByZWFsIHNpemUgb2YgdGhlIGFsbG9jYXRp b24gYXQgPHBhcmFtZXRlcj5wdHI8L3BhcmFtZXRlcj4uPC9wYXJhPgorCisgICAgICA8cGFyYT5U aGUgPGZ1bmN0aW9uPmRhbGxvY3goKTwvZnVuY3Rpb24+IGZ1bmN0aW9uIGNhdXNlcyB0aGUKKyAg ICAgIG1lbW9yeSByZWZlcmVuY2VkIGJ5IDxwYXJhbWV0ZXI+cHRyPC9wYXJhbWV0ZXI+IHRvIGJl IG1hZGUgYXZhaWxhYmxlIGZvcgorICAgICAgZnV0dXJlIGFsbG9jYXRpb25zLjwvcGFyYT4KKwor ICAgICAgPHBhcmE+VGhlIDxmdW5jdGlvbj5zZGFsbG9jeCgpPC9mdW5jdGlvbj4gZnVuY3Rpb24g aXMgYW4KKyAgICAgIGV4dGVuc2lvbiBvZiA8ZnVuY3Rpb24+ZGFsbG9jeCgpPC9mdW5jdGlvbj4g d2l0aCBhCisgICAgICA8cGFyYW1ldGVyPnNpemU8L3BhcmFtZXRlcj4gcGFyYW1ldGVyIHRvIGFs bG93IHRoZSBjYWxsZXIgdG8gcGFzcyBpbiB0aGUKKyAgICAgIGFsbG9jYXRpb24gc2l6ZSBhcyBh biBvcHRpbWl6YXRpb24uICBUaGUgbWluaW11bSB2YWxpZCBpbnB1dCBzaXplIGlzIHRoZQorICAg ICAgb3JpZ2luYWwgcmVxdWVzdGVkIHNpemUgb2YgdGhlIGFsbG9jYXRpb24sIGFuZCB0aGUgbWF4 aW11bSB2YWxpZCBpbnB1dAorICAgICAgc2l6ZSBpcyB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZSBy ZXR1cm5lZCBieQorICAgICAgPGZ1bmN0aW9uPm5hbGxvY3goKTwvZnVuY3Rpb24+IG9yCisgICAg ICA8ZnVuY3Rpb24+c2FsbG9jeCgpPC9mdW5jdGlvbj4uPC9wYXJhPgorCisgICAgICA8cGFyYT5U aGUgPGZ1bmN0aW9uPm5hbGxvY3goKTwvZnVuY3Rpb24+IGZ1bmN0aW9uIGFsbG9jYXRlcyBubwor ICAgICAgbWVtb3J5LCBidXQgaXQgcGVyZm9ybXMgdGhlIHNhbWUgc2l6ZSBjb21wdXRhdGlvbiBh cyB0aGUKKyAgICAgIDxmdW5jdGlvbj5tYWxsb2N4KCk8L2Z1bmN0aW9uPiBmdW5jdGlvbiwgYW5k IHJldHVybnMgdGhlIHJlYWwKKyAgICAgIHNpemUgb2YgdGhlIGFsbG9jYXRpb24gdGhhdCB3b3Vs ZCByZXN1bHQgZnJvbSB0aGUgZXF1aXZhbGVudAorICAgICAgPGZ1bmN0aW9uPm1hbGxvY3goKTwv ZnVuY3Rpb24+IGZ1bmN0aW9uIGNhbGwsIG9yCisgICAgICA8Y29uc3RhbnQ+MDwvY29uc3RhbnQ+ IGlmIHRoZSBpbnB1dHMgZXhjZWVkIHRoZSBtYXhpbXVtIHN1cHBvcnRlZCBzaXplCisgICAgICBj bGFzcyBhbmQvb3IgYWxpZ25tZW50LiAgQmVoYXZpb3IgaXMgdW5kZWZpbmVkIGlmCisgICAgICA8 cGFyYW1ldGVyPnNpemU8L3BhcmFtZXRlcj4gaXMgPGNvbnN0YW50PjA8L2NvbnN0YW50Pi48L3Bh cmE+CisKKyAgICAgIDxwYXJhPlRoZSA8ZnVuY3Rpb24+bWFsbGN0bCgpPC9mdW5jdGlvbj4gZnVu Y3Rpb24gcHJvdmlkZXMgYQorICAgICAgZ2VuZXJhbCBpbnRlcmZhY2UgZm9yIGludHJvc3BlY3Rp bmcgdGhlIG1lbW9yeSBhbGxvY2F0b3IsIGFzIHdlbGwgYXMKKyAgICAgIHNldHRpbmcgbW9kaWZp YWJsZSBwYXJhbWV0ZXJzIGFuZCB0cmlnZ2VyaW5nIGFjdGlvbnMuICBUaGUKKyAgICAgIHBlcmlv ZC1zZXBhcmF0ZWQgPHBhcmFtZXRlcj5uYW1lPC9wYXJhbWV0ZXI+IGFyZ3VtZW50IHNwZWNpZmll cyBhCisgICAgICBsb2NhdGlvbiBpbiBhIHRyZWUtc3RydWN0dXJlZCBuYW1lc3BhY2U7IHNlZSB0 aGUgPHhyZWYKKyAgICAgIGxpbmtlbmQ9Im1hbGxjdGxfbmFtZXNwYWNlIiB4cmVmc3R5bGU9InRl bXBsYXRlOiV0Ii8+IHNlY3Rpb24gZm9yCisgICAgICBkb2N1bWVudGF0aW9uIG9uIHRoZSB0cmVl IGNvbnRlbnRzLiAgVG8gcmVhZCBhIHZhbHVlLCBwYXNzIGEgcG9pbnRlciB2aWEKKyAgICAgIDxw YXJhbWV0ZXI+b2xkcDwvcGFyYW1ldGVyPiB0byBhZGVxdWF0ZSBzcGFjZSB0byBjb250YWluIHRo ZSB2YWx1ZSwgYW5kIGEKKyAgICAgIHBvaW50ZXIgdG8gaXRzIGxlbmd0aCB2aWEgPHBhcmFtZXRl cj5vbGRsZW5wPC9wYXJhbWV0ZXI+OyBvdGhlcndpc2UgcGFzcworICAgICAgPGNvbnN0YW50Pk5V TEw8L2NvbnN0YW50PiBhbmQgPGNvbnN0YW50Pk5VTEw8L2NvbnN0YW50Pi4gIFNpbWlsYXJseSwg dG8KKyAgICAgIHdyaXRlIGEgdmFsdWUsIHBhc3MgYSBwb2ludGVyIHRvIHRoZSB2YWx1ZSB2aWEK KyAgICAgIDxwYXJhbWV0ZXI+bmV3cDwvcGFyYW1ldGVyPiwgYW5kIGl0cyBsZW5ndGggdmlhCisg ICAgICA8cGFyYW1ldGVyPm5ld2xlbjwvcGFyYW1ldGVyPjsgb3RoZXJ3aXNlIHBhc3MgPGNvbnN0 YW50Pk5VTEw8L2NvbnN0YW50PgorICAgICAgYW5kIDxjb25zdGFudD4wPC9jb25zdGFudD4uPC9w YXJhPgorCisgICAgICA8cGFyYT5UaGUgPGZ1bmN0aW9uPm1hbGxjdGxuYW1ldG9taWIoKTwvZnVu Y3Rpb24+IGZ1bmN0aW9uCisgICAgICBwcm92aWRlcyBhIHdheSB0byBhdm9pZCByZXBlYXRlZCBu YW1lIGxvb2t1cHMgZm9yIGFwcGxpY2F0aW9ucyB0aGF0CisgICAgICByZXBlYXRlZGx5IHF1ZXJ5 IHRoZSBzYW1lIHBvcnRpb24gb2YgdGhlIG5hbWVzcGFjZSwgYnkgdHJhbnNsYXRpbmcgYSBuYW1l CisgICAgICB0byBhIDxxdW90ZT5NYW5hZ2VtZW50IEluZm9ybWF0aW9uIEJhc2U8L3F1b3RlPiAo TUlCKSB0aGF0IGNhbiBiZSBwYXNzZWQKKyAgICAgIHJlcGVhdGVkbHkgdG8gPGZ1bmN0aW9uPm1h bGxjdGxieW1pYigpPC9mdW5jdGlvbj4uICBVcG9uCisgICAgICBzdWNjZXNzZnVsIHJldHVybiBm cm9tIDxmdW5jdGlvbj5tYWxsY3RsbmFtZXRvbWliKCk8L2Z1bmN0aW9uPiwKKyAgICAgIDxwYXJh bWV0ZXI+bWlicDwvcGFyYW1ldGVyPiBjb250YWlucyBhbiBhcnJheSBvZgorICAgICAgPHBhcmFt ZXRlcj4qbWlibGVucDwvcGFyYW1ldGVyPiBpbnRlZ2Vycywgd2hlcmUKKyAgICAgIDxwYXJhbWV0 ZXI+Km1pYmxlbnA8L3BhcmFtZXRlcj4gaXMgdGhlIGxlc3NlciBvZiB0aGUgbnVtYmVyIG9mIGNv bXBvbmVudHMKKyAgICAgIGluIDxwYXJhbWV0ZXI+bmFtZTwvcGFyYW1ldGVyPiBhbmQgdGhlIGlu cHV0IHZhbHVlIG9mCisgICAgICA8cGFyYW1ldGVyPiptaWJsZW5wPC9wYXJhbWV0ZXI+LiAgVGh1 cyBpdCBpcyBwb3NzaWJsZSB0byBwYXNzIGEKKyAgICAgIDxwYXJhbWV0ZXI+Km1pYmxlbnA8L3Bh cmFtZXRlcj4gdGhhdCBpcyBzbWFsbGVyIHRoYW4gdGhlIG51bWJlciBvZgorICAgICAgcGVyaW9k LXNlcGFyYXRlZCBuYW1lIGNvbXBvbmVudHMsIHdoaWNoIHJlc3VsdHMgaW4gYSBwYXJ0aWFsIE1J QiB0aGF0IGNhbgorICAgICAgYmUgdXNlZCBhcyB0aGUgYmFzaXMgZm9yIGNvbnN0cnVjdGluZyBh IGNvbXBsZXRlIE1JQi4gIEZvciBuYW1lCisgICAgICBjb21wb25lbnRzIHRoYXQgYXJlIGludGVn ZXJzIChlLmcuIHRoZSAyIGluCisgICAgICA8bGluaworICAgICAgbGlua2VuZD0iYXJlbmFzLmJp bi5pLnNpemUiPjxtYWxsY3RsPmFyZW5hcy5iaW4uMi5zaXplPC9tYWxsY3RsPjwvbGluaz4pLAor ICAgICAgdGhlIGNvcnJlc3BvbmRpbmcgTUlCIGNvbXBvbmVudCB3aWxsIGFsd2F5cyBiZSB0aGF0 IGludGVnZXIuICBUaGVyZWZvcmUsCisgICAgICBpdCBpcyBsZWdpdGltYXRlIHRvIGNvbnN0cnVj dCBjb2RlIGxpa2UgdGhlIGZvbGxvd2luZzogPHByb2dyYW1saXN0aW5nCisgICAgICBsYW5ndWFn ZT0iQyI+PCFbQ0RBVEFbCit1bnNpZ25lZCBuYmlucywgaTsKK3NpemVfdCBtaWJbNF07CitzaXpl X3QgbGVuLCBtaWJsZW47CisKK2xlbiA9IHNpemVvZihuYmlucyk7CittYWxsY3RsKCJhcmVuYXMu bmJpbnMiLCAmbmJpbnMsICZsZW4sIE5VTEwsIDApOworCittaWJsZW4gPSA0OworbWFsbGN0bG5h bWV0b21pYigiYXJlbmFzLmJpbi4wLnNpemUiLCBtaWIsICZtaWJsZW4pOworZm9yIChpID0gMDsg aSA8IG5iaW5zOyBpKyspIHsKKwlzaXplX3QgYmluX3NpemU7CisKKwltaWJbMl0gPSBpOworCWxl biA9IHNpemVvZihiaW5fc2l6ZSk7CisJbWFsbGN0bGJ5bWliKG1pYiwgbWlibGVuLCAodm9pZCAq KSZiaW5fc2l6ZSwgJmxlbiwgTlVMTCwgMCk7CisJLyogRG8gc29tZXRoaW5nIHdpdGggYmluX3Np emUuLi4gKi8KK31dXT48L3Byb2dyYW1saXN0aW5nPjwvcGFyYT4KKworICAgICAgPHZhcmxpc3Rl bnRyeSBpZD0ibWFsbG9jX3N0YXRzX3ByaW50X29wdHMiPgorICAgICAgPC92YXJsaXN0ZW50cnk+ CisgICAgICA8cGFyYT5UaGUgPGZ1bmN0aW9uPm1hbGxvY19zdGF0c19wcmludCgpPC9mdW5jdGlv bj4gZnVuY3Rpb24gd3JpdGVzCisgICAgICBzdW1tYXJ5IHN0YXRpc3RpY3MgdmlhIHRoZSA8cGFy YW1ldGVyPndyaXRlX2NiPC9wYXJhbWV0ZXI+IGNhbGxiYWNrCisgICAgICBmdW5jdGlvbiBwb2lu dGVyIGFuZCA8cGFyYW1ldGVyPmNib3BhcXVlPC9wYXJhbWV0ZXI+IGRhdGEgcGFzc2VkIHRvCisg ICAgICA8cGFyYW1ldGVyPndyaXRlX2NiPC9wYXJhbWV0ZXI+LCBvciA8ZnVuY3Rpb24+bWFsbG9j X21lc3NhZ2UoKTwvZnVuY3Rpb24+CisgICAgICBpZiA8cGFyYW1ldGVyPndyaXRlX2NiPC9wYXJh bWV0ZXI+IGlzIDxjb25zdGFudD5OVUxMPC9jb25zdGFudD4uICBUaGUKKyAgICAgIHN0YXRpc3Rp Y3MgYXJlIHByZXNlbnRlZCBpbiBodW1hbi1yZWFkYWJsZSBmb3JtIHVubGVzcyA8cXVvdGU+Sjwv cXVvdGU+IGlzCisgICAgICBzcGVjaWZpZWQgYXMgYSBjaGFyYWN0ZXIgd2l0aGluIHRoZSA8cGFy YW1ldGVyPm9wdHM8L3BhcmFtZXRlcj4gc3RyaW5nLCBpbgorICAgICAgd2hpY2ggY2FzZSB0aGUg c3RhdGlzdGljcyBhcmUgcHJlc2VudGVkIGluIDx1bGluaworICAgICAgdXJsPSJodHRwOi8vd3d3 Lmpzb24ub3JnLyI+SlNPTiBmb3JtYXQ8L3VsaW5rPi4gIFRoaXMgZnVuY3Rpb24gY2FuIGJlCisg ICAgICBjYWxsZWQgcmVwZWF0ZWRseS4gIEdlbmVyYWwgaW5mb3JtYXRpb24gdGhhdCBuZXZlciBj aGFuZ2VzIGR1cmluZworICAgICAgZXhlY3V0aW9uIGNhbiBiZSBvbWl0dGVkIGJ5IHNwZWNpZnlp bmcgPHF1b3RlPmc8L3F1b3RlPiBhcyBhIGNoYXJhY3RlcgorICAgICAgd2l0aGluIHRoZSA8cGFy YW1ldGVyPm9wdHM8L3BhcmFtZXRlcj4gc3RyaW5nLiAgTm90ZSB0aGF0CisgICAgICA8ZnVuY3Rp b24+bWFsbG9jX3N0YXRzX3ByaW50KCk8L2Z1bmN0aW9uPiB1c2VzIHRoZQorICAgICAgPGZ1bmN0 aW9uPm1hbGxjdGwqKCk8L2Z1bmN0aW9uPiBmdW5jdGlvbnMgaW50ZXJuYWxseSwgc28gaW5jb25z aXN0ZW50CisgICAgICBzdGF0aXN0aWNzIGNhbiBiZSByZXBvcnRlZCBpZiBtdWx0aXBsZSB0aHJl YWRzIHVzZSB0aGVzZSBmdW5jdGlvbnMKKyAgICAgIHNpbXVsdGFuZW91c2x5LiAgSWYgPG9wdGlv bj4tLWVuYWJsZS1zdGF0czwvb3B0aW9uPiBpcyBzcGVjaWZpZWQgZHVyaW5nCisgICAgICBjb25m aWd1cmF0aW9uLCA8cXVvdGU+bTwvcXVvdGU+LCA8cXVvdGU+ZDwvcXVvdGU+LCBhbmQgPHF1b3Rl PmE8L3F1b3RlPgorICAgICAgY2FuIGJlIHNwZWNpZmllZCB0byBvbWl0IG1lcmdlZCBhcmVuYSwg ZGVzdHJveWVkIG1lcmdlZCBhcmVuYSwgYW5kIHBlcgorICAgICAgYXJlbmEgc3RhdGlzdGljcywg cmVzcGVjdGl2ZWx5OyA8cXVvdGU+YjwvcXVvdGU+IGFuZCA8cXVvdGU+bDwvcXVvdGU+IGNhbgor ICAgICAgYmUgc3BlY2lmaWVkIHRvIG9taXQgcGVyIHNpemUgY2xhc3Mgc3RhdGlzdGljcyBmb3Ig YmlucyBhbmQgbGFyZ2Ugb2JqZWN0cywKKyAgICAgIHJlc3BlY3RpdmVseTsgPHF1b3RlPng8L3F1 b3RlPiBjYW4gYmUgc3BlY2lmaWVkIHRvIG9taXQgYWxsIG11dGV4CisgICAgICBzdGF0aXN0aWNz OyA8cXVvdGU+ZTwvcXVvdGU+IGNhbiBiZSB1c2VkIHRvIG9taXQgZXh0ZW50IHN0YXRpc3RpY3Mu CisgICAgICBVbnJlY29nbml6ZWQgY2hhcmFjdGVycyBhcmUgc2lsZW50bHkgaWdub3JlZC4gIE5v dGUgdGhhdCB0aHJlYWQgY2FjaGluZworICAgICAgbWF5IHByZXZlbnQgc29tZSBzdGF0aXN0aWNz IGZyb20gYmVpbmcgY29tcGxldGVseSB1cCB0byBkYXRlLCBzaW5jZSBleHRyYQorICAgICAgbG9j a2luZyB3b3VsZCBiZSByZXF1aXJlZCB0byBtZXJnZSBjb3VudGVycyB0aGF0IHRyYWNrIHRocmVh ZCBjYWNoZQorICAgICAgb3BlcmF0aW9ucy48L3BhcmE+CisKKyAgICAgIDxwYXJhPlRoZSA8ZnVu Y3Rpb24+bWFsbG9jX3VzYWJsZV9zaXplKCk8L2Z1bmN0aW9uPiBmdW5jdGlvbgorICAgICAgcmV0 dXJucyB0aGUgdXNhYmxlIHNpemUgb2YgdGhlIGFsbG9jYXRpb24gcG9pbnRlZCB0byBieQorICAg ICAgPHBhcmFtZXRlcj5wdHI8L3BhcmFtZXRlcj4uICBUaGUgcmV0dXJuIHZhbHVlIG1heSBiZSBs YXJnZXIgdGhhbiB0aGUgc2l6ZQorICAgICAgdGhhdCB3YXMgcmVxdWVzdGVkIGR1cmluZyBhbGxv Y2F0aW9uLiAgVGhlCisgICAgICA8ZnVuY3Rpb24+bWFsbG9jX3VzYWJsZV9zaXplKCk8L2Z1bmN0 aW9uPiBmdW5jdGlvbiBpcyBub3QgYQorICAgICAgbWVjaGFuaXNtIGZvciBpbi1wbGFjZSA8ZnVu Y3Rpb24+cmVhbGxvYygpPC9mdW5jdGlvbj47IHJhdGhlcgorICAgICAgaXQgaXMgcHJvdmlkZWQg c29sZWx5IGFzIGEgdG9vbCBmb3IgaW50cm9zcGVjdGlvbiBwdXJwb3Nlcy4gIEFueQorICAgICAg ZGlzY3JlcGFuY3kgYmV0d2VlbiB0aGUgcmVxdWVzdGVkIGFsbG9jYXRpb24gc2l6ZSBhbmQgdGhl IHNpemUgcmVwb3J0ZWQKKyAgICAgIGJ5IDxmdW5jdGlvbj5tYWxsb2NfdXNhYmxlX3NpemUoKTwv ZnVuY3Rpb24+IHNob3VsZCBub3QgYmUKKyAgICAgIGRlcGVuZGVkIG9uLCBzaW5jZSBzdWNoIGJl aGF2aW9yIGlzIGVudGlyZWx5IGltcGxlbWVudGF0aW9uLWRlcGVuZGVudC4KKyAgICAgIDwvcGFy YT4KKyAgICA8L3JlZnNlY3QyPgorICA8L3JlZnNlY3QxPgorICA8cmVmc2VjdDEgaWQ9InR1bmlu ZyI+CisgICAgPHRpdGxlPlRVTklORzwvdGl0bGU+CisgICAgPHBhcmE+T25jZSwgd2hlbiB0aGUg Zmlyc3QgY2FsbCBpcyBtYWRlIHRvIG9uZSBvZiB0aGUgbWVtb3J5IGFsbG9jYXRpb24KKyAgICBy b3V0aW5lcywgdGhlIGFsbG9jYXRvciBpbml0aWFsaXplcyBpdHMgaW50ZXJuYWxzIGJhc2VkIGlu IHBhcnQgb24gdmFyaW91cworICAgIG9wdGlvbnMgdGhhdCBjYW4gYmUgc3BlY2lmaWVkIGF0IGNv bXBpbGUtIG9yIHJ1bi10aW1lLjwvcGFyYT4KKworICAgIDxwYXJhPlRoZSBzdHJpbmcgc3BlY2lm aWVkIHZpYSA8b3B0aW9uPi0td2l0aC1tYWxsb2MtY29uZjwvb3B0aW9uPiwgdGhlCisgICAgc3Ry aW5nIHBvaW50ZWQgdG8gYnkgdGhlIGdsb2JhbCB2YXJpYWJsZSA8dmFybmFtZT5tYWxsb2NfY29u ZjwvdmFybmFtZT4sIHRoZQorICAgIDxxdW90ZT5uYW1lPC9xdW90ZT4gb2YgdGhlIGZpbGUgcmVm ZXJlbmNlZCBieSB0aGUgc3ltYm9saWMgbGluayBuYW1lZAorICAgIDxmaWxlbmFtZSBjbGFzcz0i c3ltbGluayI+L2V0Yy9tYWxsb2MuY29uZjwvZmlsZW5hbWU+LCBhbmQgdGhlIHZhbHVlIG9mIHRo ZQorICAgIGVudmlyb25tZW50IHZhcmlhYmxlIDxlbnZhcj5NQUxMT0NfQ09ORjwvZW52YXI+LCB3 aWxsIGJlIGludGVycHJldGVkLCBpbgorICAgIHRoYXQgb3JkZXIsIGZyb20gbGVmdCB0byByaWdo dCBhcyBvcHRpb25zLiAgTm90ZSB0aGF0CisgICAgPHZhcm5hbWU+bWFsbG9jX2NvbmY8L3Zhcm5h bWU+IG1heSBiZSByZWFkIGJlZm9yZQorICAgIDxmdW5jdGlvbj5tYWluKCk8L2Z1bmN0aW9uPiBp cyBlbnRlcmVkLCBzbyB0aGUgZGVjbGFyYXRpb24gb2YKKyAgICA8dmFybmFtZT5tYWxsb2NfY29u ZjwvdmFybmFtZT4gc2hvdWxkIHNwZWNpZnkgYW4gaW5pdGlhbGl6ZXIgdGhhdCBjb250YWlucwor ICAgIHRoZSBmaW5hbCB2YWx1ZSB0byBiZSByZWFkIGJ5IGplbWFsbG9jLiAgPG9wdGlvbj4tLXdp dGgtbWFsbG9jLWNvbmY8L29wdGlvbj4KKyAgICBhbmQgPHZhcm5hbWU+bWFsbG9jX2NvbmY8L3Zh cm5hbWU+IGFyZSBjb21waWxlLXRpbWUgbWVjaGFuaXNtcywgd2hlcmVhcworICAgIDxmaWxlbmFt ZSBjbGFzcz0ic3ltbGluayI+L2V0Yy9tYWxsb2MuY29uZjwvZmlsZW5hbWU+IGFuZAorICAgIDxl bnZhcj5NQUxMT0NfQ09ORjwvZW52YXI+IGNhbiBiZSBzYWZlbHkgc2V0IGFueSB0aW1lIHByaW9y IHRvIHByb2dyYW0KKyAgICBpbnZvY2F0aW9uLjwvcGFyYT4KKworICAgIDxwYXJhPkFuIG9wdGlv bnMgc3RyaW5nIGlzIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2Ygb3B0aW9uOnZhbHVlIHBhaXJz LgorICAgIFRoZXJlIGlzIG9uZSBrZXkgY29ycmVzcG9uZGluZyB0byBlYWNoIDxsaW5rCisgICAg bGlua2VuZD0ib3B0LmFib3J0Ij48bWFsbGN0bD5vcHQuKjwvbWFsbGN0bD48L2xpbms+IG1hbGxj dGwgKHNlZSB0aGUgPHhyZWYKKyAgICBsaW5rZW5kPSJtYWxsY3RsX25hbWVzcGFjZSIgeHJlZnN0 eWxlPSJ0ZW1wbGF0ZToldCIvPiBzZWN0aW9uIGZvciBvcHRpb25zCisgICAgZG9jdW1lbnRhdGlv bikuICBGb3IgZXhhbXBsZSwgPGxpdGVyYWw+YWJvcnQ6dHJ1ZSxuYXJlbmFzOjE8L2xpdGVyYWw+ IHNldHMKKyAgICB0aGUgPGxpbmsgbGlua2VuZD0ib3B0LmFib3J0Ij48bWFsbGN0bD5vcHQuYWJv cnQ8L21hbGxjdGw+PC9saW5rPiBhbmQgPGxpbmsKKyAgICBsaW5rZW5kPSJvcHQubmFyZW5hcyI+ PG1hbGxjdGw+b3B0Lm5hcmVuYXM8L21hbGxjdGw+PC9saW5rPiBvcHRpb25zLiAgU29tZQorICAg IG9wdGlvbnMgaGF2ZSBib29sZWFuIHZhbHVlcyAodHJ1ZS9mYWxzZSksIG90aGVycyBoYXZlIGlu dGVnZXIgdmFsdWVzIChiYXNlCisgICAgOCwgMTAsIG9yIDE2LCBkZXBlbmRpbmcgb24gcHJlZml4 KSwgYW5kIHlldCBvdGhlcnMgaGF2ZSByYXcgc3RyaW5nCisgICAgdmFsdWVzLjwvcGFyYT4KKyAg PC9yZWZzZWN0MT4KKyAgPHJlZnNlY3QxIGlkPSJpbXBsZW1lbnRhdGlvbl9ub3RlcyI+CisgICAg PHRpdGxlPklNUExFTUVOVEFUSU9OIE5PVEVTPC90aXRsZT4KKyAgICA8cGFyYT5UcmFkaXRpb25h bGx5LCBhbGxvY2F0b3JzIGhhdmUgdXNlZAorICAgIDxjaXRlcmVmZW50cnk+PHJlZmVudHJ5dGl0 bGU+c2JyazwvcmVmZW50cnl0aXRsZT4KKyAgICA8bWFudm9sbnVtPjI8L21hbnZvbG51bT48L2Np dGVyZWZlbnRyeT4gdG8gb2J0YWluIG1lbW9yeSwgd2hpY2ggaXMKKyAgICBzdWJvcHRpbWFsIGZv ciBzZXZlcmFsIHJlYXNvbnMsIGluY2x1ZGluZyByYWNlIGNvbmRpdGlvbnMsIGluY3JlYXNlZAor ICAgIGZyYWdtZW50YXRpb24sIGFuZCBhcnRpZmljaWFsIGxpbWl0YXRpb25zIG9uIG1heGltdW0g dXNhYmxlIG1lbW9yeS4gIElmCisgICAgPGNpdGVyZWZlbnRyeT48cmVmZW50cnl0aXRsZT5zYnJr PC9yZWZlbnRyeXRpdGxlPgorICAgIDxtYW52b2xudW0+MjwvbWFudm9sbnVtPjwvY2l0ZXJlZmVu dHJ5PiBpcyBzdXBwb3J0ZWQgYnkgdGhlIG9wZXJhdGluZworICAgIHN5c3RlbSwgdGhpcyBhbGxv Y2F0b3IgdXNlcyBib3RoCisgICAgPGNpdGVyZWZlbnRyeT48cmVmZW50cnl0aXRsZT5tbWFwPC9y ZWZlbnRyeXRpdGxlPgorICAgIDxtYW52b2xudW0+MjwvbWFudm9sbnVtPjwvY2l0ZXJlZmVudHJ5 PiBhbmQKKyAgICA8Y2l0ZXJlZmVudHJ5PjxyZWZlbnRyeXRpdGxlPnNicms8L3JlZmVudHJ5dGl0 bGU+CisgICAgPG1hbnZvbG51bT4yPC9tYW52b2xudW0+PC9jaXRlcmVmZW50cnk+LCBpbiB0aGF0 IG9yZGVyIG9mIHByZWZlcmVuY2U7CisgICAgb3RoZXJ3aXNlIG9ubHkgPGNpdGVyZWZlbnRyeT48 cmVmZW50cnl0aXRsZT5tbWFwPC9yZWZlbnRyeXRpdGxlPgorICAgIDxtYW52b2xudW0+MjwvbWFu dm9sbnVtPjwvY2l0ZXJlZmVudHJ5PiBpcyB1c2VkLjwvcGFyYT4KKworICAgIDxwYXJhPlRoaXMg YWxsb2NhdG9yIHVzZXMgbXVsdGlwbGUgYXJlbmFzIGluIG9yZGVyIHRvIHJlZHVjZSBsb2NrCisg ICAgY29udGVudGlvbiBmb3IgdGhyZWFkZWQgcHJvZ3JhbXMgb24gbXVsdGktcHJvY2Vzc29yIHN5 c3RlbXMuICBUaGlzIHdvcmtzCisgICAgd2VsbCB3aXRoIHJlZ2FyZCB0byB0aHJlYWRpbmcgc2Nh bGFiaWxpdHksIGJ1dCBpbmN1cnMgc29tZSBjb3N0cy4gIFRoZXJlIGlzCisgICAgYSBzbWFsbCBm aXhlZCBwZXItYXJlbmEgb3ZlcmhlYWQsIGFuZCBhZGRpdGlvbmFsbHksIGFyZW5hcyBtYW5hZ2Ug bWVtb3J5CisgICAgY29tcGxldGVseSBpbmRlcGVuZGVudGx5IG9mIGVhY2ggb3RoZXIsIHdoaWNo IG1lYW5zIGEgc21hbGwgZml4ZWQgaW5jcmVhc2UKKyAgICBpbiBvdmVyYWxsIG1lbW9yeSBmcmFn bWVudGF0aW9uLiAgVGhlc2Ugb3ZlcmhlYWRzIGFyZSBub3QgZ2VuZXJhbGx5IGFuCisgICAgaXNz dWUsIGdpdmVuIHRoZSBudW1iZXIgb2YgYXJlbmFzIG5vcm1hbGx5IHVzZWQuICBOb3RlIHRoYXQg dXNpbmcKKyAgICBzdWJzdGFudGlhbGx5IG1vcmUgYXJlbmFzIHRoYW4gdGhlIGRlZmF1bHQgaXMg bm90IGxpa2VseSB0byBpbXByb3ZlCisgICAgcGVyZm9ybWFuY2UsIG1haW5seSBkdWUgdG8gcmVk dWNlZCBjYWNoZSBwZXJmb3JtYW5jZS4gIEhvd2V2ZXIsIGl0IG1heSBtYWtlCisgICAgc2Vuc2Ug dG8gcmVkdWNlIHRoZSBudW1iZXIgb2YgYXJlbmFzIGlmIGFuIGFwcGxpY2F0aW9uIGRvZXMgbm90 IG1ha2UgbXVjaAorICAgIHVzZSBvZiB0aGUgYWxsb2NhdGlvbiBmdW5jdGlvbnMuPC9wYXJhPgor CisgICAgPHBhcmE+SW4gYWRkaXRpb24gdG8gbXVsdGlwbGUgYXJlbmFzLCB0aGlzIGFsbG9jYXRv ciBzdXBwb3J0cworICAgIHRocmVhZC1zcGVjaWZpYyBjYWNoaW5nLCBpbiBvcmRlciB0byBtYWtl IGl0IHBvc3NpYmxlIHRvIGNvbXBsZXRlbHkgYXZvaWQKKyAgICBzeW5jaHJvbml6YXRpb24gZm9y IG1vc3QgYWxsb2NhdGlvbiByZXF1ZXN0cy4gIFN1Y2ggY2FjaGluZyBhbGxvd3MgdmVyeSBmYXN0 CisgICAgYWxsb2NhdGlvbiBpbiB0aGUgY29tbW9uIGNhc2UsIGJ1dCBpdCBpbmNyZWFzZXMgbWVt b3J5IHVzYWdlIGFuZAorICAgIGZyYWdtZW50YXRpb24sIHNpbmNlIGEgYm91bmRlZCBudW1iZXIg b2Ygb2JqZWN0cyBjYW4gcmVtYWluIGFsbG9jYXRlZCBpbgorICAgIGVhY2ggdGhyZWFkIGNhY2hl LjwvcGFyYT4KKworICAgIDxwYXJhPk1lbW9yeSBpcyBjb25jZXB0dWFsbHkgYnJva2VuIGludG8g ZXh0ZW50cy4gIEV4dGVudHMgYXJlIGFsd2F5cworICAgIGFsaWduZWQgdG8gbXVsdGlwbGVzIG9m IHRoZSBwYWdlIHNpemUuICBUaGlzIGFsaWdubWVudCBtYWtlcyBpdCBwb3NzaWJsZSB0bworICAg IGZpbmQgbWV0YWRhdGEgZm9yIHVzZXIgb2JqZWN0cyBxdWlja2x5LiAgVXNlciBvYmplY3RzIGFy ZSBicm9rZW4gaW50byB0d28KKyAgICBjYXRlZ29yaWVzIGFjY29yZGluZyB0byBzaXplOiBzbWFs bCBhbmQgbGFyZ2UuICBDb250aWd1b3VzIHNtYWxsIG9iamVjdHMKKyAgICBjb21wcmlzZSBhIHNs YWIsIHdoaWNoIHJlc2lkZXMgd2l0aGluIGEgc2luZ2xlIGV4dGVudCwgd2hlcmVhcyBsYXJnZSBv YmplY3RzCisgICAgZWFjaCBoYXZlIHRoZWlyIG93biBleHRlbnRzIGJhY2tpbmcgdGhlbS48L3Bh cmE+CisKKyAgICA8cGFyYT5TbWFsbCBvYmplY3RzIGFyZSBtYW5hZ2VkIGluIGdyb3VwcyBieSBz bGFicy4gIEVhY2ggc2xhYiBtYWludGFpbnMKKyAgICBhIGJpdG1hcCB0byB0cmFjayB3aGljaCBy ZWdpb25zIGFyZSBpbiB1c2UuICBBbGxvY2F0aW9uIHJlcXVlc3RzIHRoYXQgYXJlIG5vCisgICAg bW9yZSB0aGFuIGhhbGYgdGhlIHF1YW50dW0gKDggb3IgMTYsIGRlcGVuZGluZyBvbiBhcmNoaXRl Y3R1cmUpIGFyZSByb3VuZGVkCisgICAgdXAgdG8gdGhlIG5lYXJlc3QgcG93ZXIgb2YgdHdvIHRo YXQgaXMgYXQgbGVhc3QgPGNvZGUKKyAgICBsYW5ndWFnZT0iQyI+c2l6ZW9mKDx0eXBlPmRvdWJs ZTwvdHlwZT4pPC9jb2RlPi4gIEFsbCBvdGhlciBvYmplY3Qgc2l6ZQorICAgIGNsYXNzZXMgYXJl IG11bHRpcGxlcyBvZiB0aGUgcXVhbnR1bSwgc3BhY2VkIHN1Y2ggdGhhdCB0aGVyZSBhcmUgZm91 ciBzaXplCisgICAgY2xhc3NlcyBmb3IgZWFjaCBkb3VibGluZyBpbiBzaXplLCB3aGljaCBsaW1p dHMgaW50ZXJuYWwgZnJhZ21lbnRhdGlvbiB0bworICAgIGFwcHJveGltYXRlbHkgMjAlIGZvciBh bGwgYnV0IHRoZSBzbWFsbGVzdCBzaXplIGNsYXNzZXMuICBTbWFsbCBzaXplIGNsYXNzZXMKKyAg ICBhcmUgc21hbGxlciB0aGFuIGZvdXIgdGltZXMgdGhlIHBhZ2Ugc2l6ZSwgYW5kIGxhcmdlIHNp emUgY2xhc3NlcyBleHRlbmQKKyAgICBmcm9tIGZvdXIgdGltZXMgdGhlIHBhZ2Ugc2l6ZSB1cCB0 byB0aGUgbGFyZ2VzdCBzaXplIGNsYXNzIHRoYXQgZG9lcyBub3QKKyAgICBleGNlZWQgPGNvbnN0 YW50PlBUUkRJRkZfTUFYPC9jb25zdGFudD4uPC9wYXJhPgorCisgICAgPHBhcmE+QWxsb2NhdGlv bnMgYXJlIHBhY2tlZCB0aWdodGx5IHRvZ2V0aGVyLCB3aGljaCBjYW4gYmUgYW4gaXNzdWUgZm9y CisgICAgbXVsdGktdGhyZWFkZWQgYXBwbGljYXRpb25zLiAgSWYgeW91IG5lZWQgdG8gYXNzdXJl IHRoYXQgYWxsb2NhdGlvbnMgZG8gbm90CisgICAgc3VmZmVyIGZyb20gY2FjaGVsaW5lIHNoYXJp bmcsIHJvdW5kIHlvdXIgYWxsb2NhdGlvbiByZXF1ZXN0cyB1cCB0byB0aGUKKyAgICBuZWFyZXN0 IG11bHRpcGxlIG9mIHRoZSBjYWNoZWxpbmUgc2l6ZSwgb3Igc3BlY2lmeSBjYWNoZWxpbmUgYWxp Z25tZW50IHdoZW4KKyAgICBhbGxvY2F0aW5nLjwvcGFyYT4KKworICAgIDxwYXJhPlRoZSA8ZnVu Y3Rpb24+cmVhbGxvYygpPC9mdW5jdGlvbj4sCisgICAgPGZ1bmN0aW9uPnJhbGxvY3goKTwvZnVu Y3Rpb24+LCBhbmQKKyAgICA8ZnVuY3Rpb24+eGFsbG9jeCgpPC9mdW5jdGlvbj4gZnVuY3Rpb25z IG1heSByZXNpemUgYWxsb2NhdGlvbnMKKyAgICB3aXRob3V0IG1vdmluZyB0aGVtIHVuZGVyIGxp bWl0ZWQgY2lyY3Vtc3RhbmNlcy4gIFVubGlrZSB0aGUKKyAgICA8ZnVuY3Rpb24+KmFsbG9jeCgp PC9mdW5jdGlvbj4gQVBJLCB0aGUgc3RhbmRhcmQgQVBJIGRvZXMgbm90CisgICAgb2ZmaWNpYWxs eSByb3VuZCB1cCB0aGUgdXNhYmxlIHNpemUgb2YgYW4gYWxsb2NhdGlvbiB0byB0aGUgbmVhcmVz dCBzaXplCisgICAgY2xhc3MsIHNvIHRlY2huaWNhbGx5IGl0IGlzIG5lY2Vzc2FyeSB0byBjYWxs CisgICAgPGZ1bmN0aW9uPnJlYWxsb2MoKTwvZnVuY3Rpb24+IHRvIGdyb3cgZS5nLiBhIDktYnl0 ZSBhbGxvY2F0aW9uIHRvCisgICAgMTYgYnl0ZXMsIG9yIHNocmluayBhIDE2LWJ5dGUgYWxsb2Nh dGlvbiB0byA5IGJ5dGVzLiAgR3Jvd3RoIGFuZCBzaHJpbmthZ2UKKyAgICB0cml2aWFsbHkgc3Vj Y2VlZHMgaW4gcGxhY2UgYXMgbG9uZyBhcyB0aGUgcHJlLXNpemUgYW5kIHBvc3Qtc2l6ZSBib3Ro IHJvdW5kCisgICAgdXAgdG8gdGhlIHNhbWUgc2l6ZSBjbGFzcy4gIE5vIG90aGVyIEFQSSBndWFy YW50ZWVzIGFyZSBtYWRlIHJlZ2FyZGluZworICAgIGluLXBsYWNlIHJlc2l6aW5nLCBidXQgdGhl IGN1cnJlbnQgaW1wbGVtZW50YXRpb24gYWxzbyB0cmllcyB0byByZXNpemUgbGFyZ2UKKyAgICBh bGxvY2F0aW9ucyBpbiBwbGFjZSwgYXMgbG9uZyBhcyB0aGUgcHJlLXNpemUgYW5kIHBvc3Qtc2l6 ZSBhcmUgYm90aCBsYXJnZS4KKyAgICBGb3Igc2hyaW5rYWdlIHRvIHN1Y2NlZWQsIHRoZSBleHRl bnQgYWxsb2NhdG9yIG11c3Qgc3VwcG9ydCBzcGxpdHRpbmcgKHNlZQorICAgIDxsaW5rCisgICAg bGlua2VuZD0iYXJlbmEuaS5leHRlbnRfaG9va3MiPjxtYWxsY3RsPmFyZW5hLiZsdDtpJmd0Oy5l eHRlbnRfaG9va3M8L21hbGxjdGw+PC9saW5rPikuCisgICAgR3Jvd3RoIG9ubHkgc3VjY2VlZHMg aWYgdGhlIHRyYWlsaW5nIG1lbW9yeSBpcyBjdXJyZW50bHkgYXZhaWxhYmxlLCBhbmQgdGhlCisg ICAgZXh0ZW50IGFsbG9jYXRvciBzdXBwb3J0cyBtZXJnaW5nLjwvcGFyYT4KKworICAgIDxwYXJh PkFzc3VtaW5nIDQgS2lCIHBhZ2VzIGFuZCBhIDE2LWJ5dGUgcXVhbnR1bSBvbiBhIDY0LWJpdCBz eXN0ZW0sIHRoZQorICAgIHNpemUgY2xhc3NlcyBpbiBlYWNoIGNhdGVnb3J5IGFyZSBhcyBzaG93 biBpbiA8eHJlZiBsaW5rZW5kPSJzaXplX2NsYXNzZXMiCisgICAgeHJlZnN0eWxlPSJ0ZW1wbGF0 ZTpUYWJsZSAlbiIvPi48L3BhcmE+CisKKyAgICA8dGFibGUgeG1sOmlkPSJzaXplX2NsYXNzZXMi IGZyYW1lPSJhbGwiPgorICAgICAgPHRpdGxlPlNpemUgY2xhc3NlczwvdGl0bGU+CisgICAgICA8 dGdyb3VwIGNvbHM9IjMiIGNvbHNlcD0iMSIgcm93c2VwPSIxIj4KKyAgICAgIDxjb2xzcGVjIGNv bG5hbWU9ImMxIiBhbGlnbj0ibGVmdCIvPgorICAgICAgPGNvbHNwZWMgY29sbmFtZT0iYzIiIGFs aWduPSJyaWdodCIvPgorICAgICAgPGNvbHNwZWMgY29sbmFtZT0iYzMiIGFsaWduPSJsZWZ0Ii8+ CisgICAgICA8dGhlYWQ+CisgICAgICAgIDxyb3c+CisgICAgICAgICAgPGVudHJ5PkNhdGVnb3J5 PC9lbnRyeT4KKyAgICAgICAgICA8ZW50cnk+U3BhY2luZzwvZW50cnk+CisgICAgICAgICAgPGVu dHJ5PlNpemU8L2VudHJ5PgorICAgICAgICA8L3Jvdz4KKyAgICAgIDwvdGhlYWQ+CisgICAgICA8 dGJvZHk+CisgICAgICAgIDxyb3c+CisgICAgICAgICAgPGVudHJ5IG1vcmVyb3dzPSI4Ij5TbWFs bDwvZW50cnk+CisgICAgICAgICAgPGVudHJ5PmxnPC9lbnRyeT4KKyAgICAgICAgICA8ZW50cnk+ WzhdPC9lbnRyeT4KKyAgICAgICAgPC9yb3c+CisgICAgICAgIDxyb3c+CisgICAgICAgICAgPGVu dHJ5PjE2PC9lbnRyeT4KKyAgICAgICAgICA8ZW50cnk+WzE2LCAzMiwgNDgsIDY0LCA4MCwgOTYs IDExMiwgMTI4XTwvZW50cnk+CisgICAgICAgIDwvcm93PgorICAgICAgICA8cm93PgorICAgICAg ICAgIDxlbnRyeT4zMjwvZW50cnk+CisgICAgICAgICAgPGVudHJ5PlsxNjAsIDE5MiwgMjI0LCAy NTZdPC9lbnRyeT4KKyAgICAgICAgPC9yb3c+CisgICAgICAgIDxyb3c+CisgICAgICAgICAgPGVu dHJ5PjY0PC9lbnRyeT4KKyAgICAgICAgICA8ZW50cnk+WzMyMCwgMzg0LCA0NDgsIDUxMl08L2Vu dHJ5PgorICAgICAgICA8L3Jvdz4KKyAgICAgICAgPHJvdz4KKyAgICAgICAgICA8ZW50cnk+MTI4 PC9lbnRyeT4KKyAgICAgICAgICA8ZW50cnk+WzY0MCwgNzY4LCA4OTYsIDEwMjRdPC9lbnRyeT4K KyAgICAgICAgPC9yb3c+CisgICAgICAgIDxyb3c+CisgICAgICAgICAgPGVudHJ5PjI1NjwvZW50 cnk+CisgICAgICAgICAgPGVudHJ5PlsxMjgwLCAxNTM2LCAxNzkyLCAyMDQ4XTwvZW50cnk+Cisg ICAgICAgIDwvcm93PgorICAgICAgICA8cm93PgorICAgICAgICAgIDxlbnRyeT41MTI8L2VudHJ5 PgorICAgICAgICAgIDxlbnRyeT5bMjU2MCwgMzA3MiwgMzU4NCwgNDA5Nl08L2VudHJ5PgorICAg ICAgICA8L3Jvdz4KKyAgICAgICAgPHJvdz4KKyAgICAgICAgICA8ZW50cnk+MSBLaUI8L2VudHJ5 PgorICAgICAgICAgIDxlbnRyeT5bNSBLaUIsIDYgS2lCLCA3IEtpQiwgOCBLaUJdPC9lbnRyeT4K KyAgICAgICAgPC9yb3c+CisgICAgICAgIDxyb3c+CisgICAgICAgICAgPGVudHJ5PjIgS2lCPC9l bnRyeT4KKyAgICAgICAgICA8ZW50cnk+WzEwIEtpQiwgMTIgS2lCLCAxNCBLaUJdPC9lbnRyeT4K KyAgICAgICAgPC9yb3c+CisgICAgICAgIDxyb3c+CisgICAgICAgICAgPGVudHJ5IG1vcmVyb3dz PSIxNSI+TGFyZ2U8L2VudHJ5PgorICAgICAgICAgIDxlbnRyeT4yIEtpQjwvZW50cnk+CisgICAg ICAgICAgPGVudHJ5PlsxNiBLaUJdPC9lbnRyeT4KKyAgICAgICAgPC9yb3c+CisgICAgICAgIDxy b3c+CisgICAgICAgICAgPGVudHJ5PjQgS2lCPC9lbnRyeT4KKyAgICAgICAgICA8ZW50cnk+WzIw IEtpQiwgMjQgS2lCLCAyOCBLaUIsIDMyIEtpQl08L2VudHJ5PgorICAgICAgICA8L3Jvdz4KKyAg ICAgICAgPHJvdz4KKyAgICAgICAgICA8ZW50cnk+OCBLaUI8L2VudHJ5PgorICAgICAgICAgIDxl bnRyeT5bNDAgS2lCLCA0OCBLaUIsIDU2IEtpQiwgNjQgS2lCXTwvZW50cnk+CisgICAgICAgIDwv cm93PgorICAgICAgICA8cm93PgorICAgICAgICAgIDxlbnRyeT4xNiBLaUI8L2VudHJ5PgorICAg ICAgICAgIDxlbnRyeT5bODAgS2lCLCA5NiBLaUIsIDExMiBLaUIsIDEyOCBLaUJdPC9lbnRyeT4K KyAgICAgICAgPC9yb3c+CisgICAgICAgIDxyb3c+CisgICAgICAgICAgPGVudHJ5PjMyIEtpQjwv ZW50cnk+CisgICAgICAgICAgPGVudHJ5PlsxNjAgS2lCLCAxOTIgS2lCLCAyMjQgS2lCLCAyNTYg S2lCXTwvZW50cnk+CisgICAgICAgIDwvcm93PgorICAgICAgICA8cm93PgorICAgICAgICAgIDxl bnRyeT42NCBLaUI8L2VudHJ5PgorICAgICAgICAgIDxlbnRyeT5bMzIwIEtpQiwgMzg0IEtpQiwg NDQ4IEtpQiwgNTEyIEtpQl08L2VudHJ5PgorICAgICAgICA8L3Jvdz4KKyAgICAgICAgPHJvdz4K KyAgICAgICAgICA8ZW50cnk+MTI4IEtpQjwvZW50cnk+CisgICAgICAgICAgPGVudHJ5Pls2NDAg S2lCLCA3NjggS2lCLCA4OTYgS2lCLCAxIE1pQl08L2VudHJ5PgorICAgICAgICA8L3Jvdz4KKyAg ICAgICAgPHJvdz4KKyAgICAgICAgICA8ZW50cnk+MjU2IEtpQjwvZW50cnk+CisgICAgICAgICAg PGVudHJ5PlsxMjgwIEtpQiwgMTUzNiBLaUIsIDE3OTIgS2lCLCAyIE1pQl08L2VudHJ5PgorICAg ICAgICA8L3Jvdz4KKyAgICAgICAgPHJvdz4KKyAgICAgICAgICA8ZW50cnk+NTEyIEtpQjwvZW50 cnk+CisgICAgICAgICAgPGVudHJ5PlsyNTYwIEtpQiwgMyBNaUIsIDM1ODQgS2lCLCA0IE1pQl08 L2VudHJ5PgorICAgICAgICA8L3Jvdz4KKyAgICAgICAgPHJvdz4KKyAgICAgICAgICA8ZW50cnk+ MSBNaUI8L2VudHJ5PgorICAgICAgICAgIDxlbnRyeT5bNSBNaUIsIDYgTWlCLCA3IE1pQiwgOCBN aUJdPC9lbnRyeT4KKyAgICAgICAgPC9yb3c+CisgICAgICAgIDxyb3c+CisgICAgICAgICAgPGVu dHJ5PjIgTWlCPC9lbnRyeT4KKyAgICAgICAgICA8ZW50cnk+WzEwIE1pQiwgMTIgTWlCLCAxNCBN aUIsIDE2IE1pQl08L2VudHJ5PgorICAgICAgICA8L3Jvdz4KKyAgICAgICAgPHJvdz4KKyAgICAg ICAgICA8ZW50cnk+NCBNaUI8L2VudHJ5PgorICAgICAgICAgIDxlbnRyeT5bMjAgTWlCLCAyNCBN aUIsIDI4IE1pQiwgMzIgTWlCXTwvZW50cnk+CisgICAgICAgIDwvcm93PgorICAgICAgICA8cm93 PgorICAgICAgICAgIDxlbnRyeT44IE1pQjwvZW50cnk+CisgICAgICAgICAgPGVudHJ5Pls0MCBN aUIsIDQ4IE1pQiwgNTYgTWlCLCA2NCBNaUJdPC9lbnRyeT4KKyAgICAgICAgPC9yb3c+CisgICAg ICAgIDxyb3c+CisgICAgICAgICAgPGVudHJ5Pi4uLjwvZW50cnk+CisgICAgICAgICAgPGVudHJ5 Pi4uLjwvZW50cnk+CisgICAgICAgIDwvcm93PgorICAgICAgICA8cm93PgorICAgICAgICAgIDxl bnRyeT41MTIgUGlCPC9lbnRyeT4KKyAgICAgICAgICA8ZW50cnk+WzI1NjAgUGlCLCAzIEVpQiwg MzU4NCBQaUIsIDQgRWlCXTwvZW50cnk+CisgICAgICAgIDwvcm93PgorICAgICAgICA8cm93Pgor ICAgICAgICAgIDxlbnRyeT4xIEVpQjwvZW50cnk+CisgICAgICAgICAgPGVudHJ5Pls1IEVpQiwg NiBFaUIsIDcgRWlCXTwvZW50cnk+CisgICAgICAgIDwvcm93PgorICAgICAgPC90Ym9keT4KKyAg ICAgIDwvdGdyb3VwPgorICAgIDwvdGFibGU+CisgIDwvcmVmc2VjdDE+CisgIDxyZWZzZWN0MSBp ZD0ibWFsbGN0bF9uYW1lc3BhY2UiPgorICAgIDx0aXRsZT5NQUxMQ1RMIE5BTUVTUEFDRTwvdGl0 bGU+CisgICAgPHBhcmE+VGhlIGZvbGxvd2luZyBuYW1lcyBhcmUgZGVmaW5lZCBpbiB0aGUgbmFt ZXNwYWNlIGFjY2Vzc2libGUgdmlhIHRoZQorICAgIDxmdW5jdGlvbj5tYWxsY3RsKigpPC9mdW5j dGlvbj4gZnVuY3Rpb25zLiAgVmFsdWUgdHlwZXMgYXJlIHNwZWNpZmllZCBpbgorICAgIHBhcmVu dGhlc2VzLCB0aGVpciByZWFkYWJsZS93cml0YWJsZSBzdGF0dXNlcyBhcmUgZW5jb2RlZCBhcwor ICAgIDxsaXRlcmFsPnJ3PC9saXRlcmFsPiwgPGxpdGVyYWw+ci08L2xpdGVyYWw+LCA8bGl0ZXJh bD4tdzwvbGl0ZXJhbD4sIG9yCisgICAgPGxpdGVyYWw+LS08L2xpdGVyYWw+LCBhbmQgcmVxdWly ZWQgYnVpbGQgY29uZmlndXJhdGlvbiBmbGFncyBmb2xsb3csIGlmCisgICAgYW55LiAgQSBuYW1l IGVsZW1lbnQgZW5jb2RlZCBhcyA8bGl0ZXJhbD4mbHQ7aSZndDs8L2xpdGVyYWw+IG9yCisgICAg PGxpdGVyYWw+Jmx0O2omZ3Q7PC9saXRlcmFsPiBpbmRpY2F0ZXMgYW4gaW50ZWdlciBjb21wb25l bnQsIHdoZXJlIHRoZQorICAgIGludGVnZXIgdmFyaWVzIGZyb20gMCB0byBzb21lIHVwcGVyIHZh bHVlIHRoYXQgbXVzdCBiZSBkZXRlcm1pbmVkIHZpYQorICAgIGludHJvc3BlY3Rpb24uICBJbiB0 aGUgY2FzZSBvZiA8bWFsbGN0bD5zdGF0cy5hcmVuYXMuJmx0O2kmZ3Q7Lio8L21hbGxjdGw+Cisg ICAgYW5kIDxtYWxsY3RsPmFyZW5hLiZsdDtpJmd0Oy57aW5pdGlhbGl6ZWQscHVyZ2UsZGVjYXks ZHNzfTwvbWFsbGN0bD4sCisgICAgPGxpdGVyYWw+Jmx0O2kmZ3Q7PC9saXRlcmFsPiBlcXVhbCB0 bworICAgIDxjb25zdGFudD5NQUxMQ1RMX0FSRU5BU19BTEw8L2NvbnN0YW50PiBjYW4gYmUgdXNl ZCB0byBvcGVyYXRlIG9uIGFsbCBhcmVuYXMKKyAgICBvciBhY2Nlc3MgdGhlIHN1bW1hdGlvbiBv ZiBzdGF0aXN0aWNzIGZyb20gYWxsIGFyZW5hczsgc2ltaWxhcmx5CisgICAgPGxpdGVyYWw+Jmx0 O2kmZ3Q7PC9saXRlcmFsPiBlcXVhbCB0bworICAgIDxjb25zdGFudD5NQUxMQ1RMX0FSRU5BU19E RVNUUk9ZRUQ8L2NvbnN0YW50PiBjYW4gYmUgdXNlZCB0byBhY2Nlc3MgdGhlCisgICAgc3VtbWF0 aW9uIG9mIHN0YXRpc3RpY3MgZnJvbSBhbGwgZGVzdHJveWVkIGFyZW5hcy4gIFRoZXNlIGNvbnN0 YW50cyBjYW4gYmUKKyAgICB1dGlsaXplZCBlaXRoZXIgdmlhIDxmdW5jdGlvbj5tYWxsY3RsbmFt ZXRvbWliKCk8L2Z1bmN0aW9uPiBmb2xsb3dlZCBieQorICAgIDxmdW5jdGlvbj5tYWxsY3RsYnlt aWIoKTwvZnVuY3Rpb24+LCBvciB2aWEgY29kZSBzdWNoIGFzIHRoZSBmb2xsb3dpbmc6CisgICAg PHByb2dyYW1saXN0aW5nIGxhbmd1YWdlPSJDIj48IVtDREFUQVsKKyNkZWZpbmUgU1RSSU5HSUZZ X0hFTFBFUih4KSAjeAorI2RlZmluZSBTVFJJTkdJRlkoeCkgU1RSSU5HSUZZX0hFTFBFUih4KQor CittYWxsY3RsKCJhcmVuYS4iIFNUUklOR0lGWShNQUxMQ1RMX0FSRU5BU19BTEwpICIuZGVjYXki LAorICAgIE5VTEwsIE5VTEwsIE5VTEwsIDApO11dPjwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgVGFr ZSBzcGVjaWFsIG5vdGUgb2YgdGhlIDxsaW5rCisgICAgbGlua2VuZD0iZXBvY2giPjxtYWxsY3Rs PmVwb2NoPC9tYWxsY3RsPjwvbGluaz4gbWFsbGN0bCwgd2hpY2ggY29udHJvbHMKKyAgICByZWZy ZXNoaW5nIG9mIGNhY2hlZCBkeW5hbWljIHN0YXRpc3RpY3MuPC9wYXJhPgorCisgICAgPHZhcmlh YmxlbGlzdD4KKyAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9InZlcnNpb24iPgorICAgICAgICA8dGVy bT4KKyAgICAgICAgICA8bWFsbGN0bD52ZXJzaW9uPC9tYWxsY3RsPgorICAgICAgICAgICg8dHlw ZT5jb25zdCBjaGFyICo8L3R5cGU+KQorICAgICAgICAgIDxsaXRlcmFsPnItPC9saXRlcmFsPgor ICAgICAgICA8L3Rlcm0+CisgICAgICAgIDxsaXN0aXRlbT48cGFyYT5SZXR1cm4gdGhlIGplbWFs bG9jIHZlcnNpb24gc3RyaW5nLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50 cnk+CisKKyAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9ImVwb2NoIj4KKyAgICAgICAgPHRlcm0+Cisg ICAgICAgICAgPG1hbGxjdGw+ZXBvY2g8L21hbGxjdGw+CisgICAgICAgICAgKDx0eXBlPnVpbnQ2 NF90PC90eXBlPikKKyAgICAgICAgICA8bGl0ZXJhbD5ydzwvbGl0ZXJhbD4KKyAgICAgICAgPC90 ZXJtPgorICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+SWYgYSB2YWx1ZSBpcyBwYXNzZWQgaW4sIHJl ZnJlc2ggdGhlIGRhdGEgZnJvbSB3aGljaAorICAgICAgICB0aGUgPGZ1bmN0aW9uPm1hbGxjdGwq KCk8L2Z1bmN0aW9uPiBmdW5jdGlvbnMgcmVwb3J0IHZhbHVlcywKKyAgICAgICAgYW5kIGluY3Jl bWVudCB0aGUgZXBvY2guICBSZXR1cm4gdGhlIGN1cnJlbnQgZXBvY2guICBUaGlzIGlzIHVzZWZ1 bCBmb3IKKyAgICAgICAgZGV0ZWN0aW5nIHdoZXRoZXIgYW5vdGhlciB0aHJlYWQgY2F1c2VkIGEg cmVmcmVzaC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAg ICA8dmFybGlzdGVudHJ5IGlkPSJiYWNrZ3JvdW5kX3RocmVhZCI+CisgICAgICAgIDx0ZXJtPgor ICAgICAgICAgIDxtYWxsY3RsPmJhY2tncm91bmRfdGhyZWFkPC9tYWxsY3RsPgorICAgICAgICAg ICg8dHlwZT5ib29sPC90eXBlPikKKyAgICAgICAgICA8bGl0ZXJhbD5ydzwvbGl0ZXJhbD4KKyAg ICAgICAgPC90ZXJtPgorICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RW5hYmxlL2Rpc2FibGUgaW50 ZXJuYWwgYmFja2dyb3VuZCB3b3JrZXIgdGhyZWFkcy4gIFdoZW4KKyAgICAgICAgc2V0IHRvIHRy dWUsIGJhY2tncm91bmQgdGhyZWFkcyBhcmUgY3JlYXRlZCBvbiBkZW1hbmQgKHRoZSBudW1iZXIg b2YKKyAgICAgICAgYmFja2dyb3VuZCB0aHJlYWRzIHdpbGwgYmUgbm8gbW9yZSB0aGFuIHRoZSBu dW1iZXIgb2YgQ1BVcyBvciBhY3RpdmUKKyAgICAgICAgYXJlbmFzKS4gIFRocmVhZHMgcnVuIHBl cmlvZGljYWxseSwgYW5kIGhhbmRsZSA8bGluaworICAgICAgICBsaW5rZW5kPSJhcmVuYS5pLmRl Y2F5Ij5wdXJnaW5nPC9saW5rPiBhc3luY2hyb25vdXNseS4gIFdoZW4gc3dpdGNoaW5nCisgICAg ICAgIG9mZiwgYmFja2dyb3VuZCB0aHJlYWRzIGFyZSB0ZXJtaW5hdGVkIHN5bmNocm9ub3VzbHku ICBOb3RlIHRoYXQgYWZ0ZXIKKyAgICAgICAgPGNpdGVyZWZlbnRyeT48cmVmZW50cnl0aXRsZT5m b3JrPC9yZWZlbnRyeXRpdGxlPjxtYW52b2xudW0+MjwvbWFudm9sbnVtPjwvY2l0ZXJlZmVudHJ5 PgorICAgICAgICBmdW5jdGlvbiwgdGhlIHN0YXRlIGluIHRoZSBjaGlsZCBwcm9jZXNzIHdpbGwg YmUgZGlzYWJsZWQgcmVnYXJkbGVzcworICAgICAgICB0aGUgc3RhdGUgaW4gcGFyZW50IHByb2Nl c3MuIFNlZSA8bGluaworICAgICAgICBsaW5rZW5kPSJzdGF0cy5iYWNrZ3JvdW5kX3RocmVhZC5u dW1fdGhyZWFkcyI+PG1hbGxjdGw+c3RhdHMuYmFja2dyb3VuZF90aHJlYWQ8L21hbGxjdGw+PC9s aW5rPgorICAgICAgICBmb3IgcmVsYXRlZCBzdGF0cy4gIDxsaW5rCisgICAgICAgIGxpbmtlbmQ9 Im9wdC5iYWNrZ3JvdW5kX3RocmVhZCI+PG1hbGxjdGw+b3B0LmJhY2tncm91bmRfdGhyZWFkPC9t YWxsY3RsPjwvbGluaz4KKyAgICAgICAgY2FuIGJlIHVzZWQgdG8gc2V0IHRoZSBkZWZhdWx0IG9w dGlvbi4gIFRoaXMgb3B0aW9uIGlzIG9ubHkgYXZhaWxhYmxlIG9uCisgICAgICAgIHNlbGVjdGVk IHB0aHJlYWQtYmFzZWQgcGxhdGZvcm1zLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgPC92YXJs aXN0ZW50cnk+CisKKyAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9Im1heF9iYWNrZ3JvdW5kX3RocmVh ZHMiPgorICAgICAgICA8dGVybT4KKyAgICAgICAgICA8bWFsbGN0bD5tYXhfYmFja2dyb3VuZF90 aHJlYWRzPC9tYWxsY3RsPgorICAgICAgICAgICg8dHlwZT5zaXplX3Q8L3R5cGU+KQorICAgICAg ICAgIDxsaXRlcmFsPnJ3PC9saXRlcmFsPgorICAgICAgICA8L3Rlcm0+CisgICAgICAgIDxsaXN0 aXRlbT48cGFyYT5NYXhpbXVtIG51bWJlciBvZiBiYWNrZ3JvdW5kIHdvcmtlciB0aHJlYWRzIHRo YXQgd2lsbAorICAgICAgICBiZSBjcmVhdGVkLiAgVGhpcyB2YWx1ZSBpcyBjYXBwZWQgYXQgPGxp bmsKKyAgICAgICAgbGlua2VuZD0ib3B0Lm1heF9iYWNrZ3JvdW5kX3RocmVhZHMiPjxtYWxsY3Rs Pm9wdC5tYXhfYmFja2dyb3VuZF90aHJlYWRzPC9tYWxsY3RsPjwvbGluaz4gYXQKKyAgICAgICAg c3RhcnR1cC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAg ICA8dmFybGlzdGVudHJ5IGlkPSJjb25maWcuY2FjaGVfb2JsaXZpb3VzIj4KKyAgICAgICAgPHRl cm0+CisgICAgICAgICAgPG1hbGxjdGw+Y29uZmlnLmNhY2hlX29ibGl2aW91czwvbWFsbGN0bD4K KyAgICAgICAgICAoPHR5cGU+Ym9vbDwvdHlwZT4pCisgICAgICAgICAgPGxpdGVyYWw+ci08L2xp dGVyYWw+CisgICAgICAgIDwvdGVybT4KKyAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxvcHRpb24+ LS1lbmFibGUtY2FjaGUtb2JsaXZpb3VzPC9vcHRpb24+IHdhcyBzcGVjaWZpZWQKKyAgICAgICAg ZHVyaW5nIGJ1aWxkIGNvbmZpZ3VyYXRpb24uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICA8L3Zh cmxpc3RlbnRyeT4KKworICAgICAgPHZhcmxpc3RlbnRyeSBpZD0iY29uZmlnLmRlYnVnIj4KKyAg ICAgICAgPHRlcm0+CisgICAgICAgICAgPG1hbGxjdGw+Y29uZmlnLmRlYnVnPC9tYWxsY3RsPgor ICAgICAgICAgICg8dHlwZT5ib29sPC90eXBlPikKKyAgICAgICAgICA8bGl0ZXJhbD5yLTwvbGl0 ZXJhbD4KKyAgICAgICAgPC90ZXJtPgorICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PG9wdGlvbj4t LWVuYWJsZS1kZWJ1Zzwvb3B0aW9uPiB3YXMgc3BlY2lmaWVkIGR1cmluZworICAgICAgICBidWls ZCBjb25maWd1cmF0aW9uLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+ CisKKyAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9ImNvbmZpZy5maWxsIj4KKyAgICAgICAgPHRlcm0+ CisgICAgICAgICAgPG1hbGxjdGw+Y29uZmlnLmZpbGw8L21hbGxjdGw+CisgICAgICAgICAgKDx0 eXBlPmJvb2w8L3R5cGU+KQorICAgICAgICAgIDxsaXRlcmFsPnItPC9saXRlcmFsPgorICAgICAg ICA8L3Rlcm0+CisgICAgICAgIDxsaXN0aXRlbT48cGFyYT48b3B0aW9uPi0tZW5hYmxlLWZpbGw8 L29wdGlvbj4gd2FzIHNwZWNpZmllZCBkdXJpbmcKKyAgICAgICAgYnVpbGQgY29uZmlndXJhdGlv bi48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAgICA8dmFy bGlzdGVudHJ5IGlkPSJjb25maWcubGF6eV9sb2NrIj4KKyAgICAgICAgPHRlcm0+CisgICAgICAg ICAgPG1hbGxjdGw+Y29uZmlnLmxhenlfbG9jazwvbWFsbGN0bD4KKyAgICAgICAgICAoPHR5cGU+ Ym9vbDwvdHlwZT4pCisgICAgICAgICAgPGxpdGVyYWw+ci08L2xpdGVyYWw+CisgICAgICAgIDwv dGVybT4KKyAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxvcHRpb24+LS1lbmFibGUtbGF6eS1sb2Nr PC9vcHRpb24+IHdhcyBzcGVjaWZpZWQKKyAgICAgICAgZHVyaW5nIGJ1aWxkIGNvbmZpZ3VyYXRp b24uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgICAgPHZh cmxpc3RlbnRyeSBpZD0iY29uZmlnLm1hbGxvY19jb25mIj4KKyAgICAgICAgPHRlcm0+CisgICAg ICAgICAgPG1hbGxjdGw+Y29uZmlnLm1hbGxvY19jb25mPC9tYWxsY3RsPgorICAgICAgICAgICg8 dHlwZT5jb25zdCBjaGFyICo8L3R5cGU+KQorICAgICAgICAgIDxsaXRlcmFsPnItPC9saXRlcmFs PgorICAgICAgICA8L3Rlcm0+CisgICAgICAgIDxsaXN0aXRlbT48cGFyYT5FbWJlZGRlZCBjb25m aWd1cmUtdGltZS1zcGVjaWZpZWQgcnVuLXRpbWUgb3B0aW9ucworICAgICAgICBzdHJpbmcsIGVt cHR5IHVubGVzcyA8b3B0aW9uPi0td2l0aC1tYWxsb2MtY29uZjwvb3B0aW9uPiB3YXMgc3BlY2lm aWVkCisgICAgICAgIGR1cmluZyBidWlsZCBjb25maWd1cmF0aW9uLjwvcGFyYT48L2xpc3RpdGVt PgorICAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9ImNvbmZp Zy5wcm9mIj4KKyAgICAgICAgPHRlcm0+CisgICAgICAgICAgPG1hbGxjdGw+Y29uZmlnLnByb2Y8 L21hbGxjdGw+CisgICAgICAgICAgKDx0eXBlPmJvb2w8L3R5cGU+KQorICAgICAgICAgIDxsaXRl cmFsPnItPC9saXRlcmFsPgorICAgICAgICA8L3Rlcm0+CisgICAgICAgIDxsaXN0aXRlbT48cGFy YT48b3B0aW9uPi0tZW5hYmxlLXByb2Y8L29wdGlvbj4gd2FzIHNwZWNpZmllZCBkdXJpbmcKKyAg ICAgICAgYnVpbGQgY29uZmlndXJhdGlvbi48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgIDwvdmFy bGlzdGVudHJ5PgorCisgICAgICA8dmFybGlzdGVudHJ5IGlkPSJjb25maWcucHJvZl9saWJnY2Mi PgorICAgICAgICA8dGVybT4KKyAgICAgICAgICA8bWFsbGN0bD5jb25maWcucHJvZl9saWJnY2M8 L21hbGxjdGw+CisgICAgICAgICAgKDx0eXBlPmJvb2w8L3R5cGU+KQorICAgICAgICAgIDxsaXRl cmFsPnItPC9saXRlcmFsPgorICAgICAgICA8L3Rlcm0+CisgICAgICAgIDxsaXN0aXRlbT48cGFy YT48b3B0aW9uPi0tZGlzYWJsZS1wcm9mLWxpYmdjYzwvb3B0aW9uPiB3YXMgbm90CisgICAgICAg IHNwZWNpZmllZCBkdXJpbmcgYnVpbGQgY29uZmlndXJhdGlvbi48L3BhcmE+PC9saXN0aXRlbT4K KyAgICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAgICA8dmFybGlzdGVudHJ5IGlkPSJjb25maWcu cHJvZl9saWJ1bndpbmQiPgorICAgICAgICA8dGVybT4KKyAgICAgICAgICA8bWFsbGN0bD5jb25m aWcucHJvZl9saWJ1bndpbmQ8L21hbGxjdGw+CisgICAgICAgICAgKDx0eXBlPmJvb2w8L3R5cGU+ KQorICAgICAgICAgIDxsaXRlcmFsPnItPC9saXRlcmFsPgorICAgICAgICA8L3Rlcm0+CisgICAg ICAgIDxsaXN0aXRlbT48cGFyYT48b3B0aW9uPi0tZW5hYmxlLXByb2YtbGlidW53aW5kPC9vcHRp b24+IHdhcyBzcGVjaWZpZWQKKyAgICAgICAgZHVyaW5nIGJ1aWxkIGNvbmZpZ3VyYXRpb24uPC9w YXJhPjwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgICAgPHZhcmxpc3Rl bnRyeSBpZD0iY29uZmlnLnN0YXRzIj4KKyAgICAgICAgPHRlcm0+CisgICAgICAgICAgPG1hbGxj dGw+Y29uZmlnLnN0YXRzPC9tYWxsY3RsPgorICAgICAgICAgICg8dHlwZT5ib29sPC90eXBlPikK KyAgICAgICAgICA8bGl0ZXJhbD5yLTwvbGl0ZXJhbD4KKyAgICAgICAgPC90ZXJtPgorICAgICAg ICA8bGlzdGl0ZW0+PHBhcmE+PG9wdGlvbj4tLWVuYWJsZS1zdGF0czwvb3B0aW9uPiB3YXMgc3Bl Y2lmaWVkIGR1cmluZworICAgICAgICBidWlsZCBjb25maWd1cmF0aW9uLjwvcGFyYT48L2xpc3Rp dGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisKKworICAgICAgPHZhcmxpc3RlbnRyeSBpZD0i Y29uZmlnLnV0cmFjZSI+CisgICAgICAgIDx0ZXJtPgorICAgICAgICAgIDxtYWxsY3RsPmNvbmZp Zy51dHJhY2U8L21hbGxjdGw+CisgICAgICAgICAgKDx0eXBlPmJvb2w8L3R5cGU+KQorICAgICAg ICAgIDxsaXRlcmFsPnItPC9saXRlcmFsPgorICAgICAgICA8L3Rlcm0+CisgICAgICAgIDxsaXN0 aXRlbT48cGFyYT48b3B0aW9uPi0tZW5hYmxlLXV0cmFjZTwvb3B0aW9uPiB3YXMgc3BlY2lmaWVk IGR1cmluZworICAgICAgICBidWlsZCBjb25maWd1cmF0aW9uLjwvcGFyYT48L2xpc3RpdGVtPgor ICAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9ImNvbmZpZy54 bWFsbG9jIj4KKyAgICAgICAgPHRlcm0+CisgICAgICAgICAgPG1hbGxjdGw+Y29uZmlnLnhtYWxs b2M8L21hbGxjdGw+CisgICAgICAgICAgKDx0eXBlPmJvb2w8L3R5cGU+KQorICAgICAgICAgIDxs aXRlcmFsPnItPC9saXRlcmFsPgorICAgICAgICA8L3Rlcm0+CisgICAgICAgIDxsaXN0aXRlbT48 cGFyYT48b3B0aW9uPi0tZW5hYmxlLXhtYWxsb2M8L29wdGlvbj4gd2FzIHNwZWNpZmllZCBkdXJp bmcKKyAgICAgICAgYnVpbGQgY29uZmlndXJhdGlvbi48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAg IDwvdmFybGlzdGVudHJ5PgorCisgICAgICA8dmFybGlzdGVudHJ5IGlkPSJvcHQuYWJvcnQiPgor ICAgICAgICA8dGVybT4KKyAgICAgICAgICA8bWFsbGN0bD5vcHQuYWJvcnQ8L21hbGxjdGw+Cisg ICAgICAgICAgKDx0eXBlPmJvb2w8L3R5cGU+KQorICAgICAgICAgIDxsaXRlcmFsPnItPC9saXRl cmFsPgorICAgICAgICA8L3Rlcm0+CisgICAgICAgIDxsaXN0aXRlbT48cGFyYT5BYm9ydC1vbi13 YXJuaW5nIGVuYWJsZWQvZGlzYWJsZWQuICBJZiB0cnVlLCBtb3N0CisgICAgICAgIHdhcm5pbmdz IGFyZSBmYXRhbC4gIE5vdGUgdGhhdCBydW50aW1lIG9wdGlvbiB3YXJuaW5ncyBhcmUgbm90IGlu Y2x1ZGVkCisgICAgICAgIChzZWUgPGxpbmsKKyAgICAgICAgbGlua2VuZD0ib3B0LmFib3J0X2Nv bmYiPjxtYWxsY3RsPm9wdC5hYm9ydF9jb25mPC9tYWxsY3RsPjwvbGluaz4gZm9yCisgICAgICAg IHRoYXQpLiBUaGUgcHJvY2VzcyB3aWxsIGNhbGwKKyAgICAgICAgPGNpdGVyZWZlbnRyeT48cmVm ZW50cnl0aXRsZT5hYm9ydDwvcmVmZW50cnl0aXRsZT4KKyAgICAgICAgPG1hbnZvbG51bT4zPC9t YW52b2xudW0+PC9jaXRlcmVmZW50cnk+IGluIHRoZXNlIGNhc2VzLiAgVGhpcyBvcHRpb24gaXMK KyAgICAgICAgZGlzYWJsZWQgYnkgZGVmYXVsdCB1bmxlc3MgPG9wdGlvbj4tLWVuYWJsZS1kZWJ1 Zzwvb3B0aW9uPiBpcworICAgICAgICBzcGVjaWZpZWQgZHVyaW5nIGNvbmZpZ3VyYXRpb24sIGlu IHdoaWNoIGNhc2UgaXQgaXMgZW5hYmxlZCBieSBkZWZhdWx0LgorICAgICAgICA8L3BhcmE+PC9s aXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAgICA8dmFybGlzdGVudHJ5IGlk PSJvcHQuY29uZmlybV9jb25mIj4KKyAgICAgICAgPHRlcm0+CisgICAgICAgICAgPG1hbGxjdGw+ b3B0LmNvbmZpcm1fY29uZjwvbWFsbGN0bD4KKyAgICAgICAgICAoPHR5cGU+Ym9vbDwvdHlwZT4p CisgICAgICAgICAgPGxpdGVyYWw+ci08L2xpdGVyYWw+CisgICAgICAgIDwvdGVybT4KKwk8bGlz dGl0ZW0+PHBhcmE+Q29uZmlybS1ydW50aW1lLW9wdGlvbnMtd2hlbi1wcm9ncmFtLXN0YXJ0cwor CWVuYWJsZWQvZGlzYWJsZWQuICBJZiB0cnVlLCB0aGUgc3RyaW5nIHNwZWNpZmllZCB2aWEKKwk8 b3B0aW9uPi0td2l0aC1tYWxsb2MtY29uZjwvb3B0aW9uPiwgdGhlIHN0cmluZyBwb2ludGVkIHRv IGJ5IHRoZQorCWdsb2JhbCB2YXJpYWJsZSA8dmFybmFtZT5tYWxsb2NfY29uZjwvdmFybmFtZT4s IHRoZSA8cXVvdGU+bmFtZTwvcXVvdGU+CisJb2YgdGhlIGZpbGUgcmVmZXJlbmNlZCBieSB0aGUg c3ltYm9saWMgbGluayBuYW1lZAorCTxmaWxlbmFtZSBjbGFzcz0ic3ltbGluayI+L2V0Yy9tYWxs b2MuY29uZjwvZmlsZW5hbWU+LCBhbmQgdGhlIHZhbHVlIG9mCisJdGhlIGVudmlyb25tZW50IHZh cmlhYmxlIDxlbnZhcj5NQUxMT0NfQ09ORjwvZW52YXI+LCB3aWxsIGJlIHByaW50ZWQgaW4KKwlv cmRlci4gIFRoZW4sIGVhY2ggb3B0aW9uIGJlaW5nIHNldCB3aWxsIGJlIGluZGl2aWR1YWxseSBw cmludGVkLiAgVGhpcworCW9wdGlvbiBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LjwvcGFyYT48L2xp c3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9 Im9wdC5hYm9ydF9jb25mIj4KKyAgICAgICAgPHRlcm0+CisgICAgICAgICAgPG1hbGxjdGw+b3B0 LmFib3J0X2NvbmY8L21hbGxjdGw+CisgICAgICAgICAgKDx0eXBlPmJvb2w8L3R5cGU+KQorICAg ICAgICAgIDxsaXRlcmFsPnItPC9saXRlcmFsPgorICAgICAgICA8L3Rlcm0+CisgICAgICAgIDxs aXN0aXRlbT48cGFyYT5BYm9ydC1vbi1pbnZhbGlkLWNvbmZpZ3VyYXRpb24gZW5hYmxlZC9kaXNh YmxlZC4gIElmCisgICAgICAgIHRydWUsIGludmFsaWQgcnVudGltZSBvcHRpb25zIGFyZSBmYXRh bC4gIFRoZSBwcm9jZXNzIHdpbGwgY2FsbAorICAgICAgICA8Y2l0ZXJlZmVudHJ5PjxyZWZlbnRy eXRpdGxlPmFib3J0PC9yZWZlbnRyeXRpdGxlPgorICAgICAgICA8bWFudm9sbnVtPjM8L21hbnZv bG51bT48L2NpdGVyZWZlbnRyeT4gaW4gdGhlc2UgY2FzZXMuICBUaGlzIG9wdGlvbiBpcworICAg ICAgICBkaXNhYmxlZCBieSBkZWZhdWx0IHVubGVzcyA8b3B0aW9uPi0tZW5hYmxlLWRlYnVnPC9v cHRpb24+IGlzCisgICAgICAgIHNwZWNpZmllZCBkdXJpbmcgY29uZmlndXJhdGlvbiwgaW4gd2hp Y2ggY2FzZSBpdCBpcyBlbmFibGVkIGJ5IGRlZmF1bHQuCisgICAgICAgIDwvcGFyYT48L2xpc3Rp dGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9Im9w dC5jYWNoZV9vYmxpdmlvdXMiPgorICAgICAgICA8dGVybT4KKyAgICAgICAgICA8bWFsbGN0bD5v cHQuY2FjaGVfb2JsaXZpb3VzPC9tYWxsY3RsPgorICAgICAgICAgICg8dHlwZT5ib29sPC90eXBl PikKKyAgICAgICAgICA8bGl0ZXJhbD5yLTwvbGl0ZXJhbD4KKyAgICAgICAgPC90ZXJtPgorICAg ICAgICA8bGlzdGl0ZW0+PHBhcmE+RW5hYmxlIC8gRGlzYWJsZSBjYWNoZS1vYmxpdmlvdXMgbGFy Z2UgYWxsb2NhdGlvbgorICAgICAgICBhbGlnbm1lbnQsIGZvciBsYXJnZSByZXF1ZXN0cyB3aXRo IG5vIGFsaWdubWVudCBjb25zdHJhaW50cy4gIElmIHRoaXMKKyAgICAgICAgZmVhdHVyZSBpcyBk aXNhYmxlZCwgYWxsIGxhcmdlIGFsbG9jYXRpb25zIGFyZSBwYWdlLWFsaWduZWQgYXMgYW4KKyAg ICAgICAgaW1wbGVtZW50YXRpb24gYXJ0aWZhY3QsIHdoaWNoIGNhbiBzZXZlcmVseSBoYXJtIENQ VSBjYWNoZSB1dGlsaXphdGlvbi4KKyAgICAgICAgSG93ZXZlciwgdGhlIGNhY2hlLW9ibGl2aW91 cyBsYXlvdXQgY29tZXMgYXQgdGhlIGNvc3Qgb2Ygb25lIGV4dHJhIHBhZ2UKKyAgICAgICAgcGVy IGxhcmdlIGFsbG9jYXRpb24sIHdoaWNoIGluIHRoZSBtb3N0IGV4dHJlbWUgY2FzZSBpbmNyZWFz ZXMgcGh5c2ljYWwKKyAgICAgICAgbWVtb3J5IHVzYWdlIGZvciB0aGUgMTYgS2lCIHNpemUgY2xh c3MgdG8gMjAgS2lCLiBUaGlzIG9wdGlvbiBpcyBlbmFibGVkCisgICAgICAgIGJ5IGRlZmF1bHQu PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgICAgPHZhcmxp c3RlbnRyeSBpZD0ib3B0Lm1ldGFkYXRhX3RocCI+CisgICAgICAgIDx0ZXJtPgorICAgICAgICAg IDxtYWxsY3RsPm9wdC5tZXRhZGF0YV90aHA8L21hbGxjdGw+CisgICAgICAgICAgKDx0eXBlPmNv bnN0IGNoYXIgKjwvdHlwZT4pCisgICAgICAgICAgPGxpdGVyYWw+ci08L2xpdGVyYWw+CisgICAg ICAgIDwvdGVybT4KKyAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNvbnRyb2xzIHdoZXRoZXIgdG8g YWxsb3cgamVtYWxsb2MgdG8gdXNlIHRyYW5zcGFyZW50CisgICAgICAgIGh1Z2UgcGFnZSAoVEhQ KSBmb3IgaW50ZXJuYWwgbWV0YWRhdGEgKHNlZSA8bGluaworICAgICAgICBsaW5rZW5kPSJzdGF0 cy5tZXRhZGF0YSI+c3RhdHMubWV0YWRhdGE8L2xpbms+KS4gIDxxdW90ZT5hbHdheXM8L3F1b3Rl PgorICAgICAgICBhbGxvd3Mgc3VjaCB1c2FnZS4gIDxxdW90ZT5hdXRvPC9xdW90ZT4gdXNlcyBu byBUSFAgaW5pdGlhbGx5LCBidXQgbWF5CisgICAgICAgIGJlZ2luIHRvIGRvIHNvIHdoZW4gbWV0 YWRhdGEgdXNhZ2UgcmVhY2hlcyBjZXJ0YWluIGxldmVsLiAgVGhlIGRlZmF1bHQKKyAgICAgICAg aXMgPHF1b3RlPmRpc2FibGVkPC9xdW90ZT4uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICA8L3Zh cmxpc3RlbnRyeT4KKworICAgICAgPHZhcmxpc3RlbnRyeSBpZD0ib3B0LnRydXN0X21hZHZpc2Ui PgorICAgICAgICA8dGVybT4KKyAgICAgICAgICA8bWFsbGN0bD5vcHQudHJ1c3RfbWFkdmlzZTwv bWFsbGN0bD4KKyAgICAgICAgICAoPHR5cGU+Ym9vbDwvdHlwZT4pCisgICAgICAgICAgPGxpdGVy YWw+ci08L2xpdGVyYWw+CisgICAgICAgIDwvdGVybT4KKyAgICAgICAgPGxpc3RpdGVtPjxwYXJh PklmIHRydWUsIGRvIG5vdCBwZXJmb3JtIHJ1bnRpbWUgY2hlY2sgZm9yIE1BRFZfRE9OVE5FRUQs CisgICAgICAgIHRvIGNoZWNrIHRoYXQgaXQgYWN0dWFsbHkgemVyb3MgcGFnZXMuICBUaGUgZGVm YXVsdCBpcyBkaXNhYmxlZCBvbiBMaW51eAorICAgICAgICBhbmQgZW5hYmxlZCBlbHNld2hlcmUu PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgICAgPHZhcmxp c3RlbnRyeSBpZD0ib3B0LnJldGFpbiI+CisgICAgICAgIDx0ZXJtPgorICAgICAgICAgIDxtYWxs Y3RsPm9wdC5yZXRhaW48L21hbGxjdGw+CisgICAgICAgICAgKDx0eXBlPmJvb2w8L3R5cGU+KQor ICAgICAgICAgIDxsaXRlcmFsPnItPC9saXRlcmFsPgorICAgICAgICA8L3Rlcm0+CisgICAgICAg IDxsaXN0aXRlbT48cGFyYT5JZiB0cnVlLCByZXRhaW4gdW51c2VkIHZpcnR1YWwgbWVtb3J5IGZv ciBsYXRlciByZXVzZQorICAgICAgICByYXRoZXIgdGhhbiBkaXNjYXJkaW5nIGl0IGJ5IGNhbGxp bmcKKyAgICAgICAgPGNpdGVyZWZlbnRyeT48cmVmZW50cnl0aXRsZT5tdW5tYXA8L3JlZmVudHJ5 dGl0bGU+CisgICAgICAgIDxtYW52b2xudW0+MjwvbWFudm9sbnVtPjwvY2l0ZXJlZmVudHJ5PiBv ciBlcXVpdmFsZW50IChzZWUgPGxpbmsKKyAgICAgICAgbGlua2VuZD0ic3RhdHMucmV0YWluZWQi PnN0YXRzLnJldGFpbmVkPC9saW5rPiBmb3IgcmVsYXRlZCBkZXRhaWxzKS4KKyAgICAgICAgSXQg YWxzbyBtYWtlcyBqZW1hbGxvYyB1c2UgPGNpdGVyZWZlbnRyeT4KKyAgICAgICAgPHJlZmVudHJ5 dGl0bGU+bW1hcDwvcmVmZW50cnl0aXRsZT48bWFudm9sbnVtPjI8L21hbnZvbG51bT4KKyAgICAg ICAgPC9jaXRlcmVmZW50cnk+IG9yIGVxdWl2YWxlbnQgaW4gYSBtb3JlIGdyZWVkeSB3YXksIG1h cHBpbmcgbGFyZ2VyCisgICAgICAgIGNodW5rcyBpbiBvbmUgZ28uICBUaGlzIG9wdGlvbiBpcyBk aXNhYmxlZCBieSBkZWZhdWx0IHVubGVzcyBkaXNjYXJkaW5nCisgICAgICAgIHZpcnR1YWwgbWVt b3J5IGlzIGtub3duIHRvIHRyaWdnZXIgcGxhdGZvcm0tc3BlY2lmaWMgcGVyZm9ybWFuY2UKKyAg ICAgICAgcHJvYmxlbXMsIG5hbWVseSAxKSBmb3IgWzY0LWJpdF0gTGludXgsIHdoaWNoIGhhcyBh IHF1aXJrIGluIGl0cyB2aXJ0dWFsCisgICAgICAgIG1lbW9yeSBhbGxvY2F0aW9uIGFsZ29yaXRo bSB0aGF0IGNhdXNlcyBzZW1pLXBlcm1hbmVudCBWTSBtYXAgaG9sZXMKKyAgICAgICAgdW5kZXIg bm9ybWFsIGplbWFsbG9jIG9wZXJhdGlvbjsgYW5kIDIpIGZvciBbNjQtYml0XSBXaW5kb3dzLCB3 aGljaAorICAgICAgICBkaXNhbGxvd3Mgc3BsaXQgLyBtZXJnZWQgcmVnaW9ucyB3aXRoCisgICAg ICAgIDxwYXJhbWV0ZXI+PGNvbnN0YW50Pk1FTV9SRUxFQVNFPC9jb25zdGFudD48L3BhcmFtZXRl cj4uICBBbHRob3VnaCB0aGUKKyAgICAgICAgc2FtZSBpc3N1ZXMgbWF5IHByZXNlbnQgb24gMzIt Yml0IHBsYXRmb3JtcyBhcyB3ZWxsLCByZXRhaW5pbmcgdmlydHVhbAorICAgICAgICBtZW1vcnkg Zm9yIDMyLWJpdCBMaW51eCBhbmQgV2luZG93cyBpcyBkaXNhYmxlZCBieSBkZWZhdWx0IGR1ZSB0 byB0aGUKKyAgICAgICAgcHJhY3RpY2FsIHBvc3NpYmlsaXR5IG9mIGFkZHJlc3Mgc3BhY2UgZXho YXVzdGlvbi4gIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAg ICAgIDx2YXJsaXN0ZW50cnkgaWQ9Im9wdC5kc3MiPgorICAgICAgICA8dGVybT4KKyAgICAgICAg ICA8bWFsbGN0bD5vcHQuZHNzPC9tYWxsY3RsPgorICAgICAgICAgICg8dHlwZT5jb25zdCBjaGFy ICo8L3R5cGU+KQorICAgICAgICAgIDxsaXRlcmFsPnItPC9saXRlcmFsPgorICAgICAgICA8L3Rl cm0+CisgICAgICAgIDxsaXN0aXRlbT48cGFyYT5kc3MgKDxjaXRlcmVmZW50cnk+PHJlZmVudHJ5 dGl0bGU+c2JyazwvcmVmZW50cnl0aXRsZT4KKyAgICAgICAgPG1hbnZvbG51bT4yPC9tYW52b2xu dW0+PC9jaXRlcmVmZW50cnk+KSBhbGxvY2F0aW9uIHByZWNlZGVuY2UgYXMKKyAgICAgICAgcmVs YXRlZCB0byA8Y2l0ZXJlZmVudHJ5PjxyZWZlbnRyeXRpdGxlPm1tYXA8L3JlZmVudHJ5dGl0bGU+ CisgICAgICAgIDxtYW52b2xudW0+MjwvbWFudm9sbnVtPjwvY2l0ZXJlZmVudHJ5PiBhbGxvY2F0 aW9uLiAgVGhlIGZvbGxvd2luZworICAgICAgICBzZXR0aW5ncyBhcmUgc3VwcG9ydGVkIGlmCisg ICAgICAgIDxjaXRlcmVmZW50cnk+PHJlZmVudHJ5dGl0bGU+c2JyazwvcmVmZW50cnl0aXRsZT4K KyAgICAgICAgPG1hbnZvbG51bT4yPC9tYW52b2xudW0+PC9jaXRlcmVmZW50cnk+IGlzIHN1cHBv cnRlZCBieSB0aGUgb3BlcmF0aW5nCisgICAgICAgIHN5c3RlbTogPHF1b3RlPmRpc2FibGVkPC9x dW90ZT4sIDxxdW90ZT5wcmltYXJ5PC9xdW90ZT4sIGFuZAorICAgICAgICA8cXVvdGU+c2Vjb25k YXJ5PC9xdW90ZT47IG90aGVyd2lzZSBvbmx5IDxxdW90ZT5kaXNhYmxlZDwvcXVvdGU+IGlzCisg ICAgICAgIHN1cHBvcnRlZC4gIFRoZSBkZWZhdWx0IGlzIDxxdW90ZT5zZWNvbmRhcnk8L3F1b3Rl PiBpZgorICAgICAgICA8Y2l0ZXJlZmVudHJ5PjxyZWZlbnRyeXRpdGxlPnNicms8L3JlZmVudHJ5 dGl0bGU+CisgICAgICAgIDxtYW52b2xudW0+MjwvbWFudm9sbnVtPjwvY2l0ZXJlZmVudHJ5PiBp cyBzdXBwb3J0ZWQgYnkgdGhlIG9wZXJhdGluZworICAgICAgICBzeXN0ZW07IDxxdW90ZT5kaXNh YmxlZDwvcXVvdGU+IG90aGVyd2lzZS4KKyAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAg ICA8L3Zhcmxpc3RlbnRyeT4KKworICAgICAgPHZhcmxpc3RlbnRyeSBpZD0ib3B0Lm5hcmVuYXMi PgorICAgICAgICA8dGVybT4KKyAgICAgICAgICA8bWFsbGN0bD5vcHQubmFyZW5hczwvbWFsbGN0 bD4KKyAgICAgICAgICAoPHR5cGU+dW5zaWduZWQ8L3R5cGU+KQorICAgICAgICAgIDxsaXRlcmFs PnItPC9saXRlcmFsPgorICAgICAgICA8L3Rlcm0+CisgICAgICAgIDxsaXN0aXRlbT48cGFyYT5N YXhpbXVtIG51bWJlciBvZiBhcmVuYXMgdG8gdXNlIGZvciBhdXRvbWF0aWMKKyAgICAgICAgbXVs dGlwbGV4aW5nIG9mIHRocmVhZHMgYW5kIGFyZW5hcy4gIFRoZSBkZWZhdWx0IGlzIGZvdXIgdGlt ZXMgdGhlCisgICAgICAgIG51bWJlciBvZiBDUFVzLCBvciBvbmUgaWYgdGhlcmUgaXMgYSBzaW5n bGUgQ1BVLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAg IDx2YXJsaXN0ZW50cnkgaWQ9Im9wdC5vdmVyc2l6ZV90aHJlc2hvbGQiPgorICAgICAgICA8dGVy bT4KKyAgICAgICAgICA8bWFsbGN0bD5vcHQub3ZlcnNpemVfdGhyZXNob2xkPC9tYWxsY3RsPgor ICAgICAgICAgICg8dHlwZT5zaXplX3Q8L3R5cGU+KQorICAgICAgICAgIDxsaXRlcmFsPnItPC9s aXRlcmFsPgorICAgICAgICA8L3Rlcm0+CisgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaGUgdGhy ZXNob2xkIGluIGJ5dGVzIG9mIHdoaWNoIHJlcXVlc3RzIGFyZSBjb25zaWRlcmVkCisgICAgICAg IG92ZXJzaXplLiAgQWxsb2NhdGlvbiByZXF1ZXN0cyB3aXRoIGdyZWF0ZXIgc2l6ZXMgYXJlIGZ1 bGZpbGxlZCBmcm9tIGEKKyAgICAgICAgZGVkaWNhdGVkIGFyZW5hIChhdXRvbWF0aWNhbGx5IG1h bmFnZWQsIGhvd2V2ZXIgbm90IHdpdGhpbgorICAgICAgICA8bGl0ZXJhbD5uYXJlbmFzPC9saXRl cmFsPiksIGluIG9yZGVyIHRvIHJlZHVjZSBmcmFnbWVudGF0aW9uIGJ5IG5vdAorICAgICAgICBt aXhpbmcgaHVnZSBhbGxvY2F0aW9ucyB3aXRoIHNtYWxsIG9uZXMuICBJbiBhZGRpdGlvbiwgdGhl IGRlY2F5IEFQSQorICAgICAgICBndWFyYW50ZWVzIG9uIHRoZSBleHRlbnRzIGdyZWF0ZXIgdGhh biB0aGUgc3BlY2lmaWVkIHRocmVzaG9sZCBtYXkgYmUKKyAgICAgICAgb3ZlcnJpZGRlbi4gIE5v dGUgdGhhdCByZXF1ZXN0cyB3aXRoIGFyZW5hIGluZGV4IHNwZWNpZmllZCB2aWEKKyAgICAgICAg PGNvbnN0YW50Pk1BTExPQ1hfQVJFTkE8L2NvbnN0YW50Piwgb3IgdGhyZWFkcyBhc3NvY2lhdGVk IHdpdGggZXhwbGljaXQKKyAgICAgICAgYXJlbmFzIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQuICBU aGUgZGVmYXVsdCB0aHJlc2hvbGQgaXMgOE1pQi4gIFZhbHVlcworICAgICAgICBub3Qgd2l0aGlu IGxhcmdlIHNpemUgY2xhc3NlcyBkaXNhYmxlcyB0aGlzIGZlYXR1cmUuPC9wYXJhPjwvbGlzdGl0 ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgICAgPHZhcmxpc3RlbnRyeSBpZD0ib3B0 LnBlcmNwdV9hcmVuYSI+CisgICAgICAgIDx0ZXJtPgorICAgICAgICAgIDxtYWxsY3RsPm9wdC5w ZXJjcHVfYXJlbmE8L21hbGxjdGw+CisgICAgICAgICAgKDx0eXBlPmNvbnN0IGNoYXIgKjwvdHlw ZT4pCisgICAgICAgICAgPGxpdGVyYWw+ci08L2xpdGVyYWw+CisgICAgICAgIDwvdGVybT4KKyAg ICAgICAgPGxpc3RpdGVtPjxwYXJhPlBlciBDUFUgYXJlbmEgbW9kZS4gIFVzZSB0aGUgPHF1b3Rl PnBlcmNwdTwvcXVvdGU+CisgICAgICAgIHNldHRpbmcgdG8gZW5hYmxlIHRoaXMgZmVhdHVyZSwg d2hpY2ggdXNlcyBudW1iZXIgb2YgQ1BVcyB0byBkZXRlcm1pbmUKKyAgICAgICAgbnVtYmVyIG9m IGFyZW5hcywgYW5kIGJpbmQgdGhyZWFkcyB0byBhcmVuYXMgZHluYW1pY2FsbHkgYmFzZWQgb24g dGhlCisgICAgICAgIENQVSB0aGUgdGhyZWFkIHJ1bnMgb24gY3VycmVudGx5LiAgPHF1b3RlPnBo eWNwdTwvcXVvdGU+IHNldHRpbmcgdXNlcworICAgICAgICBvbmUgYXJlbmEgcGVyIHBoeXNpY2Fs IENQVSwgd2hpY2ggbWVhbnMgdGhlIHR3byBoeXBlciB0aHJlYWRzIG9uIHRoZQorICAgICAgICBz YW1lIENQVSBzaGFyZSBvbmUgYXJlbmEuICBOb3RlIHRoYXQgbm8gcnVudGltZSBjaGVja2luZyBy ZWdhcmRpbmcgdGhlCisgICAgICAgIGF2YWlsYWJpbGl0eSBvZiBoeXBlciB0aHJlYWRpbmcgaXMg ZG9uZSBhdCB0aGUgbW9tZW50LiAgV2hlbiBzZXQgdG8KKyAgICAgICAgPHF1b3RlPmRpc2FibGVk PC9xdW90ZT4sIG5hcmVuYXMgYW5kIHRocmVhZCB0byBhcmVuYSBhc3NvY2lhdGlvbiB3aWxsCisg ICAgICAgIG5vdCBiZSBpbXBhY3RlZCBieSB0aGlzIG9wdGlvbi4gIFRoZSBkZWZhdWx0IGlzIDxx dW90ZT5kaXNhYmxlZDwvcXVvdGU+LgorICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAg IDwvdmFybGlzdGVudHJ5PgorCisgICAgICA8dmFybGlzdGVudHJ5IGlkPSJvcHQuYmFja2dyb3Vu ZF90aHJlYWQiPgorICAgICAgICA8dGVybT4KKyAgICAgICAgICA8bWFsbGN0bD5vcHQuYmFja2dy b3VuZF90aHJlYWQ8L21hbGxjdGw+CisgICAgICAgICAgKDx0eXBlPmJvb2w8L3R5cGU+KQorICAg ICAgICAgIDxsaXRlcmFsPnItPC9saXRlcmFsPgorICAgICAgICA8L3Rlcm0+CisgICAgICAgIDxs aXN0aXRlbT48cGFyYT5JbnRlcm5hbCBiYWNrZ3JvdW5kIHdvcmtlciB0aHJlYWRzIGVuYWJsZWQv ZGlzYWJsZWQuCisgICAgICAgIEJlY2F1c2Ugb2YgcG90ZW50aWFsIGNpcmN1bGFyIGRlcGVuZGVu Y2llcywgZW5hYmxpbmcgYmFja2dyb3VuZCB0aHJlYWQKKyAgICAgICAgdXNpbmcgdGhpcyBvcHRp b24gbWF5IGNhdXNlIGNyYXNoIG9yIGRlYWRsb2NrIGR1cmluZyBpbml0aWFsaXphdGlvbi4gRm9y CisgICAgICAgIGEgcmVsaWFibGUgd2F5IHRvIHVzZSB0aGlzIGZlYXR1cmUsIHNlZSA8bGluawor ICAgICAgICBsaW5rZW5kPSJiYWNrZ3JvdW5kX3RocmVhZCI+YmFja2dyb3VuZF90aHJlYWQ8L2xp bms+IGZvciBkeW5hbWljIGNvbnRyb2wKKyAgICAgICAgb3B0aW9ucyBhbmQgZGV0YWlscy4gIFRo aXMgb3B0aW9uIGlzIGRpc2FibGVkIGJ5CisgICAgICAgIGRlZmF1bHQuPC9wYXJhPjwvbGlzdGl0 ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgICAgPHZhcmxpc3RlbnRyeSBpZD0ib3B0 Lm1heF9iYWNrZ3JvdW5kX3RocmVhZHMiPgorICAgICAgICA8dGVybT4KKyAgICAgICAgICA8bWFs bGN0bD5vcHQubWF4X2JhY2tncm91bmRfdGhyZWFkczwvbWFsbGN0bD4KKyAgICAgICAgICAoPHR5 cGU+c2l6ZV90PC90eXBlPikKKyAgICAgICAgICA8bGl0ZXJhbD5yLTwvbGl0ZXJhbD4KKyAgICAg ICAgPC90ZXJtPgorICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+TWF4aW11bSBudW1iZXIgb2YgYmFj a2dyb3VuZCB0aHJlYWRzIHRoYXQgd2lsbCBiZSBjcmVhdGVkCisgICAgICAgIGlmIDxsaW5rIGxp bmtlbmQ9ImJhY2tncm91bmRfdGhyZWFkIj5iYWNrZ3JvdW5kX3RocmVhZDwvbGluaz4gaXMgc2V0 LgorICAgICAgICBEZWZhdWx0cyB0byBudW1iZXIgb2YgY3B1cy48L3BhcmE+PC9saXN0aXRlbT4K KyAgICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAgICA8dmFybGlzdGVudHJ5IGlkPSJvcHQuZGly dHlfZGVjYXlfbXMiPgorICAgICAgICA8dGVybT4KKyAgICAgICAgICA8bWFsbGN0bD5vcHQuZGly dHlfZGVjYXlfbXM8L21hbGxjdGw+CisgICAgICAgICAgKDx0eXBlPnNzaXplX3Q8L3R5cGU+KQor ICAgICAgICAgIDxsaXRlcmFsPnItPC9saXRlcmFsPgorICAgICAgICA8L3Rlcm0+CisgICAgICAg IDxsaXN0aXRlbT48cGFyYT5BcHByb3hpbWF0ZSB0aW1lIGluIG1pbGxpc2Vjb25kcyBmcm9tIHRo ZSBjcmVhdGlvbiBvZiBhCisgICAgICAgIHNldCBvZiB1bnVzZWQgZGlydHkgcGFnZXMgdW50aWwg YW4gZXF1aXZhbGVudCBzZXQgb2YgdW51c2VkIGRpcnR5IHBhZ2VzCisgICAgICAgIGlzIHB1cmdl ZCAoaS5lLiBjb252ZXJ0ZWQgdG8gbXV6enkgdmlhIGUuZy4KKyAgICAgICAgPGZ1bmN0aW9uPm1h ZHZpc2UoPHBhcmFtZXRlcj4uLi48L3BhcmFtZXRlcj48cGFyYW1ldGVyPjxjb25zdGFudD5NQURW X0ZSRUU8L2NvbnN0YW50PjwvcGFyYW1ldGVyPik8L2Z1bmN0aW9uPgorICAgICAgICBpZiBzdXBw b3J0ZWQgYnkgdGhlIG9wZXJhdGluZyBzeXN0ZW0sIG9yIGNvbnZlcnRlZCB0byBjbGVhbiBvdGhl cndpc2UpCisgICAgICAgIGFuZC9vciByZXVzZWQuICBEaXJ0eSBwYWdlcyBhcmUgZGVmaW5lZCBh cyBwcmV2aW91c2x5IGhhdmluZyBiZWVuCisgICAgICAgIHBvdGVudGlhbGx5IHdyaXR0ZW4gdG8g YnkgdGhlIGFwcGxpY2F0aW9uLCBhbmQgdGhlcmVmb3JlIGNvbnN1bWluZworICAgICAgICBwaHlz aWNhbCBtZW1vcnksIHlldCBoYXZpbmcgbm8gY3VycmVudCB1c2UuICBUaGUgcGFnZXMgYXJlIGlu Y3JlbWVudGFsbHkKKyAgICAgICAgcHVyZ2VkIGFjY29yZGluZyB0byBhIHNpZ21vaWRhbCBkZWNh eSBjdXJ2ZSB0aGF0IHN0YXJ0cyBhbmQgZW5kcyB3aXRoCisgICAgICAgIHplcm8gcHVyZ2UgcmF0 ZS4gIEEgZGVjYXkgdGltZSBvZiAwIGNhdXNlcyBhbGwgdW51c2VkIGRpcnR5IHBhZ2VzIHRvIGJl CisgICAgICAgIHB1cmdlZCBpbW1lZGlhdGVseSB1cG9uIGNyZWF0aW9uLiAgQSBkZWNheSB0aW1l IG9mIC0xIGRpc2FibGVzIHB1cmdpbmcuCisgICAgICAgIFRoZSBkZWZhdWx0IGRlY2F5IHRpbWUg aXMgMTAgc2Vjb25kcy4gIFNlZSA8bGluaworICAgICAgICBsaW5rZW5kPSJhcmVuYXMuZGlydHlf ZGVjYXlfbXMiPjxtYWxsY3RsPmFyZW5hcy5kaXJ0eV9kZWNheV9tczwvbWFsbGN0bD48L2xpbms+ CisgICAgICAgIGFuZCA8bGluaworICAgICAgICBsaW5rZW5kPSJhcmVuYS5pLmRpcnR5X2RlY2F5 X21zIj48bWFsbGN0bD5hcmVuYS4mbHQ7aSZndDsuZGlydHlfZGVjYXlfbXM8L21hbGxjdGw+PC9s aW5rPgorICAgICAgICBmb3IgcmVsYXRlZCBkeW5hbWljIGNvbnRyb2wgb3B0aW9ucy4gIFNlZSA8 bGluaworICAgICAgICBsaW5rZW5kPSJvcHQubXV6enlfZGVjYXlfbXMiPjxtYWxsY3RsPm9wdC5t dXp6eV9kZWNheV9tczwvbWFsbGN0bD48L2xpbms+CisgICAgICAgIGZvciBhIGRlc2NyaXB0aW9u IG9mIG11enp5IHBhZ2VzLmZvciBhIGRlc2NyaXB0aW9uIG9mIG11enp5IHBhZ2VzLiAgTm90ZQor ICAgICAgICB0aGF0IHdoZW4gdGhlIDxsaW5rCisgICAgICAgIGxpbmtlbmQ9Im9wdC5vdmVyc2l6 ZV90aHJlc2hvbGQiPjxtYWxsY3RsPm92ZXJzaXplX3RocmVzaG9sZDwvbWFsbGN0bD48L2xpbms+ CisgICAgICAgIGZlYXR1cmUgaXMgZW5hYmxlZCwgdGhlIGFyZW5hcyByZXNlcnZlZCBmb3Igb3Zl cnNpemUgcmVxdWVzdHMgbWF5IGhhdmUKKyAgICAgICAgaXRzIG93biBkZWZhdWx0IGRlY2F5IHNl dHRpbmdzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAg IDx2YXJsaXN0ZW50cnkgaWQ9Im9wdC5tdXp6eV9kZWNheV9tcyI+CisgICAgICAgIDx0ZXJtPgor ICAgICAgICAgIDxtYWxsY3RsPm9wdC5tdXp6eV9kZWNheV9tczwvbWFsbGN0bD4KKyAgICAgICAg ICAoPHR5cGU+c3NpemVfdDwvdHlwZT4pCisgICAgICAgICAgPGxpdGVyYWw+ci08L2xpdGVyYWw+ CisgICAgICAgIDwvdGVybT4KKyAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkFwcHJveGltYXRlIHRp bWUgaW4gbWlsbGlzZWNvbmRzIGZyb20gdGhlIGNyZWF0aW9uIG9mIGEKKyAgICAgICAgc2V0IG9m IHVudXNlZCBtdXp6eSBwYWdlcyB1bnRpbCBhbiBlcXVpdmFsZW50IHNldCBvZiB1bnVzZWQgbXV6 enkgcGFnZXMKKyAgICAgICAgaXMgcHVyZ2VkIChpLmUuIGNvbnZlcnRlZCB0byBjbGVhbikgYW5k L29yIHJldXNlZC4gIE11enp5IHBhZ2VzIGFyZQorICAgICAgICBkZWZpbmVkIGFzIHByZXZpb3Vz bHkgaGF2aW5nIGJlZW4gdW51c2VkIGRpcnR5IHBhZ2VzIHRoYXQgd2VyZQorICAgICAgICBzdWJz ZXF1ZW50bHkgcHVyZ2VkIGluIGEgbWFubmVyIHRoYXQgbGVmdCB0aGVtIHN1YmplY3QgdG8gdGhl CisgICAgICAgIHJlY2xhbWF0aW9uIHdoaW1zIG9mIHRoZSBvcGVyYXRpbmcgc3lzdGVtIChlLmcu CisgICAgICAgIDxmdW5jdGlvbj5tYWR2aXNlKDxwYXJhbWV0ZXI+Li4uPC9wYXJhbWV0ZXI+PHBh cmFtZXRlcj48Y29uc3RhbnQ+TUFEVl9GUkVFPC9jb25zdGFudD48L3BhcmFtZXRlcj4pPC9mdW5j dGlvbj4pLAorICAgICAgICBhbmQgdGhlcmVmb3JlIGluIGFuIGluZGV0ZXJtaW5hdGUgc3RhdGUu ICBUaGUgcGFnZXMgYXJlIGluY3JlbWVudGFsbHkKKyAgICAgICAgcHVyZ2VkIGFjY29yZGluZyB0 byBhIHNpZ21vaWRhbCBkZWNheSBjdXJ2ZSB0aGF0IHN0YXJ0cyBhbmQgZW5kcyB3aXRoCisgICAg ICAgIHplcm8gcHVyZ2UgcmF0ZS4gIEEgZGVjYXkgdGltZSBvZiAwIGNhdXNlcyBhbGwgdW51c2Vk IG11enp5IHBhZ2VzIHRvIGJlCisgICAgICAgIHB1cmdlZCBpbW1lZGlhdGVseSB1cG9uIGNyZWF0 aW9uLiAgQSBkZWNheSB0aW1lIG9mIC0xIGRpc2FibGVzIHB1cmdpbmcuCisgICAgICAgIFRoZSBk ZWZhdWx0IGRlY2F5IHRpbWUgaXMgMTAgc2Vjb25kcy4gIFNlZSA8bGluaworICAgICAgICBsaW5r ZW5kPSJhcmVuYXMubXV6enlfZGVjYXlfbXMiPjxtYWxsY3RsPmFyZW5hcy5tdXp6eV9kZWNheV9t czwvbWFsbGN0bD48L2xpbms+CisgICAgICAgIGFuZCA8bGluaworICAgICAgICBsaW5rZW5kPSJh cmVuYS5pLm11enp5X2RlY2F5X21zIj48bWFsbGN0bD5hcmVuYS4mbHQ7aSZndDsubXV6enlfZGVj YXlfbXM8L21hbGxjdGw+PC9saW5rPgorICAgICAgICBmb3IgcmVsYXRlZCBkeW5hbWljIGNvbnRy b2wgb3B0aW9ucy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorCisg ICAgICA8dmFybGlzdGVudHJ5IGlkPSJvcHQubGdfZXh0ZW50X21heF9hY3RpdmVfZml0Ij4KKyAg ICAgICAgPHRlcm0+CisgICAgICAgICAgPG1hbGxjdGw+b3B0LmxnX2V4dGVudF9tYXhfYWN0aXZl X2ZpdDwvbWFsbGN0bD4KKyAgICAgICAgICAoPHR5cGU+c2l6ZV90PC90eXBlPikKKyAgICAgICAg ICA8bGl0ZXJhbD5yLTwvbGl0ZXJhbD4KKyAgICAgICAgPC90ZXJtPgorICAgICAgICA8bGlzdGl0 ZW0+PHBhcmE+V2hlbiByZXVzaW5nIGRpcnR5IGV4dGVudHMsIHRoaXMgZGV0ZXJtaW5lcyB0aGUg KGxvZworICAgICAgICBiYXNlIDIgb2YgdGhlKSBtYXhpbXVtIHJhdGlvIGJldHdlZW4gdGhlIHNp emUgb2YgdGhlIGFjdGl2ZSBleHRlbnQKKyAgICAgICAgc2VsZWN0ZWQgKHRvIHNwbGl0IG9mZiBm cm9tKSBhbmQgdGhlIHNpemUgb2YgdGhlIHJlcXVlc3RlZCBhbGxvY2F0aW9uLgorICAgICAgICBU aGlzIHByZXZlbnRzIHRoZSBzcGxpdHRpbmcgb2YgbGFyZ2UgYWN0aXZlIGV4dGVudHMgZm9yIHNt YWxsZXIKKyAgICAgICAgYWxsb2NhdGlvbnMsIHdoaWNoIGNhbiByZWR1Y2UgZnJhZ21lbnRhdGlv biBvdmVyIHRoZSBsb25nIHJ1bgorICAgICAgICAoZXNwZWNpYWxseSBmb3Igbm9uLWFjdGl2ZSBl eHRlbnRzKS4gIExvd2VyIHZhbHVlIG1heSByZWR1Y2UKKyAgICAgICAgZnJhZ21lbnRhdGlvbiwg YXQgdGhlIGNvc3Qgb2YgZXh0cmEgYWN0aXZlIGV4dGVudHMuICBUaGUgZGVmYXVsdCB2YWx1ZQor ICAgICAgICBpcyA2LCB3aGljaCBnaXZlcyBhIG1heGltdW0gcmF0aW8gb2YgNjQgKDJeNikuPC9w YXJhPjwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgICAgPHZhcmxpc3Rl bnRyeSBpZD0ib3B0LnN0YXRzX3ByaW50Ij4KKyAgICAgICAgPHRlcm0+CisgICAgICAgICAgPG1h bGxjdGw+b3B0LnN0YXRzX3ByaW50PC9tYWxsY3RsPgorICAgICAgICAgICg8dHlwZT5ib29sPC90 eXBlPikKKyAgICAgICAgICA8bGl0ZXJhbD5yLTwvbGl0ZXJhbD4KKyAgICAgICAgPC90ZXJtPgor ICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RW5hYmxlL2Rpc2FibGUgc3RhdGlzdGljcyBwcmludGlu ZyBhdCBleGl0LiAgSWYKKyAgICAgICAgZW5hYmxlZCwgdGhlIDxmdW5jdGlvbj5tYWxsb2Nfc3Rh dHNfcHJpbnQoKTwvZnVuY3Rpb24+CisgICAgICAgIGZ1bmN0aW9uIGlzIGNhbGxlZCBhdCBwcm9n cmFtIGV4aXQgdmlhIGFuCisgICAgICAgIDxjaXRlcmVmZW50cnk+PHJlZmVudHJ5dGl0bGU+YXRl eGl0PC9yZWZlbnRyeXRpdGxlPgorICAgICAgICA8bWFudm9sbnVtPjM8L21hbnZvbG51bT48L2Np dGVyZWZlbnRyeT4gZnVuY3Rpb24uICA8bGluaworICAgICAgICBsaW5rZW5kPSJvcHQuc3RhdHNf cHJpbnRfb3B0cyI+PG1hbGxjdGw+b3B0LnN0YXRzX3ByaW50X29wdHM8L21hbGxjdGw+PC9saW5r PgorICAgICAgICBjYW4gYmUgY29tYmluZWQgdG8gc3BlY2lmeSBvdXRwdXQgb3B0aW9ucy4gSWYK KyAgICAgICAgPG9wdGlvbj4tLWVuYWJsZS1zdGF0czwvb3B0aW9uPiBpcyBzcGVjaWZpZWQgZHVy aW5nIGNvbmZpZ3VyYXRpb24sIHRoaXMKKyAgICAgICAgaGFzIHRoZSBwb3RlbnRpYWwgdG8gY2F1 c2UgZGVhZGxvY2sgZm9yIGEgbXVsdGktdGhyZWFkZWQgcHJvY2VzcyB0aGF0CisgICAgICAgIGV4 aXRzIHdoaWxlIG9uZSBvciBtb3JlIHRocmVhZHMgYXJlIGV4ZWN1dGluZyBpbiB0aGUgbWVtb3J5 IGFsbG9jYXRpb24KKyAgICAgICAgZnVuY3Rpb25zLiAgRnVydGhlcm1vcmUsIDxmdW5jdGlvbj5h dGV4aXQoKTwvZnVuY3Rpb24+IG1heQorICAgICAgICBhbGxvY2F0ZSBtZW1vcnkgZHVyaW5nIGFw cGxpY2F0aW9uIGluaXRpYWxpemF0aW9uIGFuZCB0aGVuIGRlYWRsb2NrCisgICAgICAgIGludGVy bmFsbHkgd2hlbiBqZW1hbGxvYyBpbiB0dXJuIGNhbGxzCisgICAgICAgIDxmdW5jdGlvbj5hdGV4 aXQoKTwvZnVuY3Rpb24+LCBzbyB0aGlzIG9wdGlvbiBpcyBub3QKKyAgICAgICAgdW5pdmVyc2Fs bHkgdXNhYmxlICh0aG91Z2ggdGhlIGFwcGxpY2F0aW9uIGNhbiByZWdpc3RlciBpdHMgb3duCisg ICAgICAgIDxmdW5jdGlvbj5hdGV4aXQoKTwvZnVuY3Rpb24+IGZ1bmN0aW9uIHdpdGggZXF1aXZh bGVudAorICAgICAgICBmdW5jdGlvbmFsaXR5KS4gIFRoZXJlZm9yZSwgdGhpcyBvcHRpb24gc2hv dWxkIG9ubHkgYmUgdXNlZCB3aXRoIGNhcmU7CisgICAgICAgIGl0IGlzIHByaW1hcmlseSBpbnRl bmRlZCBhcyBhIHBlcmZvcm1hbmNlIHR1bmluZyBhaWQgZHVyaW5nIGFwcGxpY2F0aW9uCisgICAg ICAgIGRldmVsb3BtZW50LiAgVGhpcyBvcHRpb24gaXMgZGlzYWJsZWQgYnkgZGVmYXVsdC48L3Bh cmE+PC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAgICA8dmFybGlzdGVu dHJ5IGlkPSJvcHQuc3RhdHNfcHJpbnRfb3B0cyI+CisgICAgICAgIDx0ZXJtPgorICAgICAgICAg IDxtYWxsY3RsPm9wdC5zdGF0c19wcmludF9vcHRzPC9tYWxsY3RsPgorICAgICAgICAgICg8dHlw ZT5jb25zdCBjaGFyICo8L3R5cGU+KQorICAgICAgICAgIDxsaXRlcmFsPnItPC9saXRlcmFsPgor ICAgICAgICA8L3Rlcm0+CisgICAgICAgIDxsaXN0aXRlbT48cGFyYT5PcHRpb25zICh0aGUgPHBh cmFtZXRlcj5vcHRzPC9wYXJhbWV0ZXI+IHN0cmluZykgdG8gcGFzcworICAgICAgICB0byB0aGUg PGZ1bmN0aW9uPm1hbGxvY19zdGF0c19wcmludCgpPC9mdW5jdGlvbj4gYXQgZXhpdCAoZW5hYmxl ZAorICAgICAgICB0aHJvdWdoIDxsaW5rCisgICAgICAgIGxpbmtlbmQ9Im9wdC5zdGF0c19wcmlu dCI+PG1hbGxjdGw+b3B0LnN0YXRzX3ByaW50PC9tYWxsY3RsPjwvbGluaz4pLiBTZWUKKyAgICAg ICAgYXZhaWxhYmxlIG9wdGlvbnMgaW4gPGxpbmsKKyAgICAgICAgbGlua2VuZD0ibWFsbG9jX3N0 YXRzX3ByaW50X29wdHMiPjxmdW5jdGlvbj5tYWxsb2Nfc3RhdHNfcHJpbnQoKTwvZnVuY3Rpb24+ PC9saW5rPi4KKyAgICAgICAgSGFzIG5vIGVmZmVjdCB1bmxlc3MgPGxpbmsKKyAgICAgICAgbGlu a2VuZD0ib3B0LnN0YXRzX3ByaW50Ij48bWFsbGN0bD5vcHQuc3RhdHNfcHJpbnQ8L21hbGxjdGw+ PC9saW5rPiBpcworICAgICAgICBlbmFibGVkLiAgVGhlIGRlZmF1bHQgaXMgPHF1b3RlPjwvcXVv dGU+LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAgIDx2 YXJsaXN0ZW50cnkgaWQ9Im9wdC5zdGF0c19pbnRlcnZhbCI+CisgICAgICAgIDx0ZXJtPgorICAg ICAgICAgIDxtYWxsY3RsPm9wdC5zdGF0c19pbnRlcnZhbDwvbWFsbGN0bD4KKyAgICAgICAgICAo PHR5cGU+aW50NjRfdDwvdHlwZT4pCisgICAgICAgICAgPGxpdGVyYWw+ci08L2xpdGVyYWw+Cisg ICAgICAgIDwvdGVybT4KKyAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkF2ZXJhZ2UgaW50ZXJ2YWwg YmV0d2VlbiBzdGF0aXN0aWNzIG91dHB1dHMsIGFzIG1lYXN1cmVkCisgICAgICAgIGluIGJ5dGVz IG9mIGFsbG9jYXRpb24gYWN0aXZpdHkuICBUaGUgYWN0dWFsIGludGVydmFsIG1heSBiZSBzcG9y YWRpYworICAgICAgICBiZWNhdXNlIGRlY2VudHJhbGl6ZWQgZXZlbnQgY291bnRlcnMgYXJlIHVz ZWQgdG8gYXZvaWQgc3luY2hyb25pemF0aW9uCisgICAgICAgIGJvdHRsZW5lY2tzLiAgVGhlIG91 dHB1dCBtYXkgYmUgdHJpZ2dlcmVkIG9uIGFueSB0aHJlYWQsIHdoaWNoIHRoZW4KKyAgICAgICAg Y2FsbHMgPGZ1bmN0aW9uPm1hbGxvY19zdGF0c19wcmludCgpPC9mdW5jdGlvbj4uICA8bGluawor ICAgICAgICBsaW5rZW5kPSJvcHQuc3RhdHNfaW50ZXJ2YWxfb3B0cyI+PG1hbGxjdGw+b3B0LnN0 YXRzX2ludGVydmFsX29wdHM8L21hbGxjdGw+PC9saW5rPgorICAgICAgICBjYW4gYmUgY29tYmlu ZWQgdG8gc3BlY2lmeSBvdXRwdXQgb3B0aW9ucy4gIEJ5IGRlZmF1bHQsCisgICAgICAgIGludGVy dmFsLXRyaWdnZXJlZCBzdGF0cyBvdXRwdXQgaXMgZGlzYWJsZWQgKGVuY29kZWQgYXMKKyAgICAg ICAgLTEpLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAg IDx2YXJsaXN0ZW50cnkgaWQ9Im9wdC5zdGF0c19pbnRlcnZhbF9vcHRzIj4KKyAgICAgICAgPHRl cm0+CisgICAgICAgICAgPG1hbGxjdGw+b3B0LnN0YXRzX2ludGVydmFsX29wdHM8L21hbGxjdGw+ CisgICAgICAgICAgKDx0eXBlPmNvbnN0IGNoYXIgKjwvdHlwZT4pCisgICAgICAgICAgPGxpdGVy YWw+ci08L2xpdGVyYWw+CisgICAgICAgIDwvdGVybT4KKyAgICAgICAgPGxpc3RpdGVtPjxwYXJh Pk9wdGlvbnMgKHRoZSA8cGFyYW1ldGVyPm9wdHM8L3BhcmFtZXRlcj4gc3RyaW5nKSB0byBwYXNz CisgICAgICAgIHRvIHRoZSA8ZnVuY3Rpb24+bWFsbG9jX3N0YXRzX3ByaW50KCk8L2Z1bmN0aW9u PiBmb3IgaW50ZXJ2YWwgYmFzZWQKKwlzdGF0aXN0aWNzIHByaW50aW5nIChlbmFibGVkCisgICAg ICAgIHRocm91Z2ggPGxpbmsKKyAgICAgICAgbGlua2VuZD0ib3B0LnN0YXRzX2ludGVydmFsIj48 bWFsbGN0bD5vcHQuc3RhdHNfaW50ZXJ2YWw8L21hbGxjdGw+PC9saW5rPikuIFNlZQorICAgICAg ICBhdmFpbGFibGUgb3B0aW9ucyBpbiA8bGluaworICAgICAgICBsaW5rZW5kPSJtYWxsb2Nfc3Rh dHNfcHJpbnRfb3B0cyI+PGZ1bmN0aW9uPm1hbGxvY19zdGF0c19wcmludCgpPC9mdW5jdGlvbj48 L2xpbms+LgorICAgICAgICBIYXMgbm8gZWZmZWN0IHVubGVzcyA8bGluaworICAgICAgICBsaW5r ZW5kPSJvcHQuc3RhdHNfaW50ZXJ2YWwiPjxtYWxsY3RsPm9wdC5zdGF0c19pbnRlcnZhbDwvbWFs bGN0bD48L2xpbms+IGlzCisgICAgICAgIGVuYWJsZWQuICBUaGUgZGVmYXVsdCBpcyA8cXVvdGU+ PC9xdW90ZT4uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAg ICAgPHZhcmxpc3RlbnRyeSBpZD0ib3B0Lmp1bmsiPgorICAgICAgICA8dGVybT4KKyAgICAgICAg ICA8bWFsbGN0bD5vcHQuanVuazwvbWFsbGN0bD4KKyAgICAgICAgICAoPHR5cGU+Y29uc3QgY2hh ciAqPC90eXBlPikKKyAgICAgICAgICA8bGl0ZXJhbD5yLTwvbGl0ZXJhbD4KKyAgICAgICAgICBb PG9wdGlvbj4tLWVuYWJsZS1maWxsPC9vcHRpb24+XQorICAgICAgICA8L3Rlcm0+CisgICAgICAg IDxsaXN0aXRlbT48cGFyYT5KdW5rIGZpbGxpbmcuICBJZiBzZXQgdG8gPHF1b3RlPmFsbG9jPC9x dW90ZT4sIGVhY2ggYnl0ZQorICAgICAgICBvZiB1bmluaXRpYWxpemVkIGFsbG9jYXRlZCBtZW1v cnkgd2lsbCBiZSBpbml0aWFsaXplZCB0bworICAgICAgICA8bGl0ZXJhbD4weGE1PC9saXRlcmFs Pi4gIElmIHNldCB0byA8cXVvdGU+ZnJlZTwvcXVvdGU+LCBhbGwgZGVhbGxvY2F0ZWQKKyAgICAg ICAgbWVtb3J5IHdpbGwgYmUgaW5pdGlhbGl6ZWQgdG8gPGxpdGVyYWw+MHg1YTwvbGl0ZXJhbD4u ICBJZiBzZXQgdG8KKyAgICAgICAgPHF1b3RlPnRydWU8L3F1b3RlPiwgYm90aCBhbGxvY2F0ZWQg YW5kIGRlYWxsb2NhdGVkIG1lbW9yeSB3aWxsIGJlCisgICAgICAgIGluaXRpYWxpemVkLCBhbmQg aWYgc2V0IHRvIDxxdW90ZT5mYWxzZTwvcXVvdGU+LCBqdW5rIGZpbGxpbmcgYmUKKyAgICAgICAg ZGlzYWJsZWQgZW50aXJlbHkuICBUaGlzIGlzIGludGVuZGVkIGZvciBkZWJ1Z2dpbmcgYW5kIHdp bGwgaW1wYWN0CisgICAgICAgIHBlcmZvcm1hbmNlIG5lZ2F0aXZlbHkuICBUaGlzIG9wdGlvbiBp cyA8cXVvdGU+ZmFsc2U8L3F1b3RlPiBieSBkZWZhdWx0CisgICAgICAgIHVubGVzcyA8b3B0aW9u Pi0tZW5hYmxlLWRlYnVnPC9vcHRpb24+IGlzIHNwZWNpZmllZCBkdXJpbmcKKyAgICAgICAgY29u ZmlndXJhdGlvbiwgaW4gd2hpY2ggY2FzZSBpdCBpcyA8cXVvdGU+dHJ1ZTwvcXVvdGU+IGJ5Cisg ICAgICAgIGRlZmF1bHQuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4K KworICAgICAgPHZhcmxpc3RlbnRyeSBpZD0ib3B0Lnplcm8iPgorICAgICAgICA8dGVybT4KKyAg ICAgICAgICA8bWFsbGN0bD5vcHQuemVybzwvbWFsbGN0bD4KKyAgICAgICAgICAoPHR5cGU+Ym9v bDwvdHlwZT4pCisgICAgICAgICAgPGxpdGVyYWw+ci08L2xpdGVyYWw+CisgICAgICAgICAgWzxv cHRpb24+LS1lbmFibGUtZmlsbDwvb3B0aW9uPl0KKyAgICAgICAgPC90ZXJtPgorICAgICAgICA8 bGlzdGl0ZW0+PHBhcmE+WmVybyBmaWxsaW5nIGVuYWJsZWQvZGlzYWJsZWQuICBJZiBlbmFibGVk LCBlYWNoIGJ5dGUKKyAgICAgICAgb2YgdW5pbml0aWFsaXplZCBhbGxvY2F0ZWQgbWVtb3J5IHdp bGwgYmUgaW5pdGlhbGl6ZWQgdG8gMC4gIE5vdGUgdGhhdAorICAgICAgICB0aGlzIGluaXRpYWxp emF0aW9uIG9ubHkgaGFwcGVucyBvbmNlIGZvciBlYWNoIGJ5dGUsIHNvCisgICAgICAgIDxmdW5j dGlvbj5yZWFsbG9jKCk8L2Z1bmN0aW9uPiBhbmQKKyAgICAgICAgPGZ1bmN0aW9uPnJhbGxvY3go KTwvZnVuY3Rpb24+IGNhbGxzIGRvIG5vdCB6ZXJvIG1lbW9yeSB0aGF0CisgICAgICAgIHdhcyBw cmV2aW91c2x5IGFsbG9jYXRlZC4gIFRoaXMgaXMgaW50ZW5kZWQgZm9yIGRlYnVnZ2luZyBhbmQg d2lsbAorICAgICAgICBpbXBhY3QgcGVyZm9ybWFuY2UgbmVnYXRpdmVseS4gIFRoaXMgb3B0aW9u IGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQuCisgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAg ICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9Im9wdC51dHJhY2Ui PgorICAgICAgICA8dGVybT4KKyAgICAgICAgICA8bWFsbGN0bD5vcHQudXRyYWNlPC9tYWxsY3Rs PgorICAgICAgICAgICg8dHlwZT5ib29sPC90eXBlPikKKyAgICAgICAgICA8bGl0ZXJhbD5yLTwv bGl0ZXJhbD4KKyAgICAgICAgICBbPG9wdGlvbj4tLWVuYWJsZS11dHJhY2U8L29wdGlvbj5dCisg ICAgICAgIDwvdGVybT4KKyAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkFsbG9jYXRpb24gdHJhY2lu ZyBiYXNlZCBvbgorICAgICAgICA8Y2l0ZXJlZmVudHJ5PjxyZWZlbnRyeXRpdGxlPnV0cmFjZTwv cmVmZW50cnl0aXRsZT4KKyAgICAgICAgPG1hbnZvbG51bT4yPC9tYW52b2xudW0+PC9jaXRlcmVm ZW50cnk+IGVuYWJsZWQvZGlzYWJsZWQuICBUaGlzIG9wdGlvbgorICAgICAgICBpcyBkaXNhYmxl ZCBieSBkZWZhdWx0LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisK KyAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9Im9wdC54bWFsbG9jIj4KKyAgICAgICAgPHRlcm0+Cisg ICAgICAgICAgPG1hbGxjdGw+b3B0LnhtYWxsb2M8L21hbGxjdGw+CisgICAgICAgICAgKDx0eXBl PmJvb2w8L3R5cGU+KQorICAgICAgICAgIDxsaXRlcmFsPnItPC9saXRlcmFsPgorICAgICAgICAg IFs8b3B0aW9uPi0tZW5hYmxlLXhtYWxsb2M8L29wdGlvbj5dCisgICAgICAgIDwvdGVybT4KKyAg ICAgICAgPGxpc3RpdGVtPjxwYXJhPkFib3J0LW9uLW91dC1vZi1tZW1vcnkgZW5hYmxlZC9kaXNh YmxlZC4gIElmIGVuYWJsZWQsCisgICAgICAgIHJhdGhlciB0aGFuIHJldHVybmluZyBmYWlsdXJl IGZvciBhbnkgYWxsb2NhdGlvbiBmdW5jdGlvbiwgZGlzcGxheSBhCisgICAgICAgIGRpYWdub3N0 aWMgbWVzc2FnZSBvbiA8Y29uc3RhbnQ+U1RERVJSX0ZJTEVOTzwvY29uc3RhbnQ+IGFuZCBjYXVz ZSB0aGUKKyAgICAgICAgcHJvZ3JhbSB0byBkcm9wIGNvcmUgKHVzaW5nCisgICAgICAgIDxjaXRl cmVmZW50cnk+PHJlZmVudHJ5dGl0bGU+YWJvcnQ8L3JlZmVudHJ5dGl0bGU+CisgICAgICAgIDxt YW52b2xudW0+MzwvbWFudm9sbnVtPjwvY2l0ZXJlZmVudHJ5PikuICBJZiBhbiBhcHBsaWNhdGlv biBpcworICAgICAgICBkZXNpZ25lZCB0byBkZXBlbmQgb24gdGhpcyBiZWhhdmlvciwgc2V0IHRo ZSBvcHRpb24gYXQgY29tcGlsZSB0aW1lIGJ5CisgICAgICAgIGluY2x1ZGluZyB0aGUgZm9sbG93 aW5nIGluIHRoZSBzb3VyY2UgY29kZToKKyAgICAgICAgPHByb2dyYW1saXN0aW5nIGxhbmd1YWdl PSJDIj48IVtDREFUQVsKK21hbGxvY19jb25mID0gInhtYWxsb2M6dHJ1ZSI7XV0+PC9wcm9ncmFt bGlzdGluZz4KKyAgICAgICAgVGhpcyBvcHRpb24gaXMgZGlzYWJsZWQgYnkgZGVmYXVsdC48L3Bh cmE+PC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAgICA8dmFybGlzdGVu dHJ5IGlkPSJvcHQudGNhY2hlIj4KKyAgICAgICAgPHRlcm0+CisgICAgICAgICAgPG1hbGxjdGw+ b3B0LnRjYWNoZTwvbWFsbGN0bD4KKyAgICAgICAgICAoPHR5cGU+Ym9vbDwvdHlwZT4pCisgICAg ICAgICAgPGxpdGVyYWw+ci08L2xpdGVyYWw+CisgICAgICAgIDwvdGVybT4KKyAgICAgICAgPGxp c3RpdGVtPjxwYXJhPlRocmVhZC1zcGVjaWZpYyBjYWNoaW5nICh0Y2FjaGUpIGVuYWJsZWQvZGlz YWJsZWQuICBXaGVuCisgICAgICAgIHRoZXJlIGFyZSBtdWx0aXBsZSB0aHJlYWRzLCBlYWNoIHRo cmVhZCB1c2VzIGEgdGNhY2hlIGZvciBvYmplY3RzIHVwIHRvCisgICAgICAgIGEgY2VydGFpbiBz aXplLiAgVGhyZWFkLXNwZWNpZmljIGNhY2hpbmcgYWxsb3dzIG1hbnkgYWxsb2NhdGlvbnMgdG8g YmUKKyAgICAgICAgc2F0aXNmaWVkIHdpdGhvdXQgcGVyZm9ybWluZyBhbnkgdGhyZWFkIHN5bmNo cm9uaXphdGlvbiwgYXQgdGhlIGNvc3Qgb2YKKyAgICAgICAgaW5jcmVhc2VkIG1lbW9yeSB1c2Uu ICBTZWUgdGhlIDxsaW5rCisgICAgICAgIGxpbmtlbmQ9Im9wdC50Y2FjaGVfbWF4Ij48bWFsbGN0 bD5vcHQudGNhY2hlX21heDwvbWFsbGN0bD48L2xpbms+CisgICAgICAgIG9wdGlvbiBmb3IgcmVs YXRlZCB0dW5pbmcgaW5mb3JtYXRpb24uICBUaGlzIG9wdGlvbiBpcyBlbmFibGVkIGJ5CisgICAg ICAgIGRlZmF1bHQuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKwor ICAgICAgPHZhcmxpc3RlbnRyeSBpZD0ib3B0LnRjYWNoZV9tYXgiPgorICAgICAgICA8dGVybT4K KyAgICAgICAgICA8bWFsbGN0bD5vcHQudGNhY2hlX21heDwvbWFsbGN0bD4KKyAgICAgICAgICAo PHR5cGU+c2l6ZV90PC90eXBlPikKKyAgICAgICAgICA8bGl0ZXJhbD5yLTwvbGl0ZXJhbD4KKyAg ICAgICAgPC90ZXJtPgorICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+TWF4aW11bSBzaXplIGNsYXNz IHRvIGNhY2hlIGluIHRoZSB0aHJlYWQtc3BlY2lmaWMgY2FjaGUKKyAgICAgICAgKHRjYWNoZSku ICBBdCBhIG1pbmltdW0sIHRoZSBmaXJzdCBzaXplIGNsYXNzIGlzIGNhY2hlZDsgYW5kIGF0IGEK KyAgICAgICAgbWF4aW11bSwgc2l6ZSBjbGFzc2VzIHVwIHRvIDggTWlCIGNhbiBiZSBjYWNoZWQu ICBUaGUgZGVmYXVsdCBtYXhpbXVtIGlzCisgICAgICAgIDMyIEtpQiAoMl4xNSkuICBBcyBhIGNv bnZlbmllbmNlLCB0aGlzIG1heSBhbHNvIGJlIHNldCBieSBzcGVjaWZ5aW5nCisgICAgICAgIGxn X3RjYWNoZV9tYXgsIHdoaWNoIHdpbGwgYmUgdGFrZW4gdG8gYmUgdGhlIGJhc2UtMiBsb2dhcml0 aG0gb2YgdGhlCisgICAgICAgIHNldHRpbmcgb2YgdGNhY2hlX21heC48L3BhcmE+PC9saXN0aXRl bT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAgICA8dmFybGlzdGVudHJ5IGlkPSJvcHQu dGhwIj4KKyAgICAgICAgPHRlcm0+CisgICAgICAgICAgPG1hbGxjdGw+b3B0LnRocDwvbWFsbGN0 bD4KKyAgICAgICAgICAoPHR5cGU+Y29uc3QgY2hhciAqPC90eXBlPikKKyAgICAgICAgICA8bGl0 ZXJhbD5yLTwvbGl0ZXJhbD4KKyAgICAgICAgPC90ZXJtPgorICAgICAgICA8bGlzdGl0ZW0+PHBh cmE+VHJhbnNwYXJlbnQgaHVnZXBhZ2UgKFRIUCkgbW9kZS4gU2V0dGluZ3MgImFsd2F5cyIsCisg ICAgICAgICJuZXZlciIgYW5kICJkZWZhdWx0IiBhcmUgYXZhaWxhYmxlIGlmIFRIUCBpcyBzdXBw b3J0ZWQgYnkgdGhlIG9wZXJhdGluZworICAgICAgICBzeXN0ZW0uICBUaGUgImFsd2F5cyIgc2V0 dGluZyBlbmFibGVzIHRyYW5zcGFyZW50IGh1Z2VwYWdlIGZvciBhbGwgdXNlcgorICAgICAgICBt ZW1vcnkgbWFwcGluZ3Mgd2l0aAorICAgICAgICA8cGFyYW1ldGVyPjxjb25zdGFudD5NQURWX0hV R0VQQUdFPC9jb25zdGFudD48L3BhcmFtZXRlcj47ICJuZXZlciIKKyAgICAgICAgZW5zdXJlcyBu byB0cmFuc3BhcmVudCBodWdlcGFnZSB3aXRoCisgICAgICAgIDxwYXJhbWV0ZXI+PGNvbnN0YW50 Pk1BRFZfTk9IVUdFUEFHRTwvY29uc3RhbnQ+PC9wYXJhbWV0ZXI+OyB0aGUgZGVmYXVsdAorICAg ICAgICBzZXR0aW5nICJkZWZhdWx0IiBtYWtlcyBubyBjaGFuZ2VzLiAgTm90ZSB0aGF0OiB0aGlz IG9wdGlvbiBkb2VzIG5vdAorICAgICAgICBhZmZlY3QgVEhQIGZvciBqZW1hbGxvYyBpbnRlcm5h bCBtZXRhZGF0YSAoc2VlIDxsaW5rCisgICAgICAgIGxpbmtlbmQ9Im9wdC5tZXRhZGF0YV90aHAi PjxtYWxsY3RsPm9wdC5tZXRhZGF0YV90aHA8L21hbGxjdGw+PC9saW5rPik7CisgICAgICAgIGlu IGFkZGl0aW9uLCBmb3IgYXJlbmFzIHdpdGggY3VzdG9taXplZCA8bGluaworICAgICAgICBsaW5r ZW5kPSJhcmVuYS5pLmV4dGVudF9ob29rcyI+PG1hbGxjdGw+ZXh0ZW50X2hvb2tzPC9tYWxsY3Rs PjwvbGluaz4sCisgICAgICAgIHRoaXMgb3B0aW9uIGlzIGJ5cGFzc2VkIGFzIGl0IGlzIGltcGxl bWVudGVkIGFzIHBhcnQgb2YgdGhlIGRlZmF1bHQKKyAgICAgICAgZXh0ZW50IGhvb2tzLjwvcGFy YT48L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAgIDx2YXJsaXN0ZW50 cnkgaWQ9Im9wdC5wcm9mIj4KKyAgICAgICAgPHRlcm0+CisgICAgICAgICAgPG1hbGxjdGw+b3B0 LnByb2Y8L21hbGxjdGw+CisgICAgICAgICAgKDx0eXBlPmJvb2w8L3R5cGU+KQorICAgICAgICAg IDxsaXRlcmFsPnItPC9saXRlcmFsPgorICAgICAgICAgIFs8b3B0aW9uPi0tZW5hYmxlLXByb2Y8 L29wdGlvbj5dCisgICAgICAgIDwvdGVybT4KKyAgICAgICAgPGxpc3RpdGVtPjxwYXJhPk1lbW9y eSBwcm9maWxpbmcgZW5hYmxlZC9kaXNhYmxlZC4gIElmIGVuYWJsZWQsIHByb2ZpbGUKKyAgICAg ICAgbWVtb3J5IGFsbG9jYXRpb24gYWN0aXZpdHkuICBTZWUgdGhlIDxsaW5rCisgICAgICAgIGxp bmtlbmQ9Im9wdC5wcm9mX2FjdGl2ZSI+PG1hbGxjdGw+b3B0LnByb2ZfYWN0aXZlPC9tYWxsY3Rs PjwvbGluaz4KKyAgICAgICAgb3B0aW9uIGZvciBvbi10aGUtZmx5IGFjdGl2YXRpb24vZGVhY3Rp dmF0aW9uLiAgU2VlIHRoZSA8bGluaworICAgICAgICBsaW5rZW5kPSJvcHQubGdfcHJvZl9zYW1w bGUiPjxtYWxsY3RsPm9wdC5sZ19wcm9mX3NhbXBsZTwvbWFsbGN0bD48L2xpbms+CisgICAgICAg IG9wdGlvbiBmb3IgcHJvYmFiaWxpc3RpYyBzYW1wbGluZyBjb250cm9sLiAgU2VlIHRoZSA8bGlu aworICAgICAgICBsaW5rZW5kPSJvcHQucHJvZl9hY2N1bSI+PG1hbGxjdGw+b3B0LnByb2ZfYWNj dW08L21hbGxjdGw+PC9saW5rPgorICAgICAgICBvcHRpb24gZm9yIGNvbnRyb2wgb2YgY3VtdWxh dGl2ZSBzYW1wbGUgcmVwb3J0aW5nLiAgU2VlIHRoZSA8bGluaworICAgICAgICBsaW5rZW5kPSJv cHQubGdfcHJvZl9pbnRlcnZhbCI+PG1hbGxjdGw+b3B0LmxnX3Byb2ZfaW50ZXJ2YWw8L21hbGxj dGw+PC9saW5rPgorICAgICAgICBvcHRpb24gZm9yIGluZm9ybWF0aW9uIG9uIGludGVydmFsLXRy aWdnZXJlZCBwcm9maWxlIGR1bXBpbmcsIHRoZSA8bGluaworICAgICAgICBsaW5rZW5kPSJvcHQu cHJvZl9nZHVtcCI+PG1hbGxjdGw+b3B0LnByb2ZfZ2R1bXA8L21hbGxjdGw+PC9saW5rPgorICAg ICAgICBvcHRpb24gZm9yIGluZm9ybWF0aW9uIG9uIGhpZ2gtd2F0ZXItdHJpZ2dlcmVkIHByb2Zp bGUgZHVtcGluZywgYW5kIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSJvcHQucHJvZl9maW5h bCI+PG1hbGxjdGw+b3B0LnByb2ZfZmluYWw8L21hbGxjdGw+PC9saW5rPgorICAgICAgICBvcHRp b24gZm9yIGZpbmFsIHByb2ZpbGUgZHVtcGluZy4gIFByb2ZpbGUgb3V0cHV0IGlzIGNvbXBhdGli bGUgd2l0aAorICAgICAgICB0aGUgPGNvbW1hbmQ+amVwcm9mPC9jb21tYW5kPiBjb21tYW5kLCB3 aGljaCBpcyBiYXNlZCBvbiB0aGUKKyAgICAgICAgPGNvbW1hbmQ+cHByb2Y8L2NvbW1hbmQ+IHRo YXQgaXMgZGV2ZWxvcGVkIGFzIHBhcnQgb2YgdGhlIDx1bGluaworICAgICAgICB1cmw9Imh0dHA6 Ly9jb2RlLmdvb2dsZS5jb20vcC9ncGVyZnRvb2xzLyI+Z3BlcmZ0b29scworICAgICAgICBwYWNr YWdlPC91bGluaz4uICBTZWUgPGxpbmsgbGlua2VuZD0iaGVhcF9wcm9maWxlX2Zvcm1hdCI+SEVB UCBQUk9GSUxFCisgICAgICAgIEZPUk1BVDwvbGluaz4gZm9yIGhlYXAgcHJvZmlsZSBmb3JtYXQg ZG9jdW1lbnRhdGlvbi48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5Pgor CisgICAgICA8dmFybGlzdGVudHJ5IGlkPSJvcHQucHJvZl9wcmVmaXgiPgorICAgICAgICA8dGVy bT4KKyAgICAgICAgICA8bWFsbGN0bD5vcHQucHJvZl9wcmVmaXg8L21hbGxjdGw+CisgICAgICAg ICAgKDx0eXBlPmNvbnN0IGNoYXIgKjwvdHlwZT4pCisgICAgICAgICAgPGxpdGVyYWw+ci08L2xp dGVyYWw+CisgICAgICAgICAgWzxvcHRpb24+LS1lbmFibGUtcHJvZjwvb3B0aW9uPl0KKyAgICAg ICAgPC90ZXJtPgorICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RmlsZW5hbWUgcHJlZml4IGZvciBw cm9maWxlIGR1bXBzLiAgSWYgdGhlIHByZWZpeCBpcworICAgICAgICBzZXQgdG8gdGhlIGVtcHR5 IHN0cmluZywgbm8gYXV0b21hdGljIGR1bXBzIHdpbGwgb2NjdXI7IHRoaXMgaXMKKyAgICAgICAg cHJpbWFyaWx5IHVzZWZ1bCBmb3IgZGlzYWJsaW5nIHRoZSBhdXRvbWF0aWMgZmluYWwgaGVhcCBk dW1wICh3aGljaAorICAgICAgICBhbHNvIGRpc2FibGVzIGxlYWsgcmVwb3J0aW5nLCBpZiBlbmFi bGVkKS4gIFRoZSBkZWZhdWx0IHByZWZpeCBpcworICAgICAgICA8ZmlsZW5hbWU+amVwcm9mPC9m aWxlbmFtZT4uICBUaGlzIHByZWZpeCB2YWx1ZSBjYW4gYmUgb3ZlcnJpZGRlbiBieQorICAgICAg ICA8bGluayBsaW5rZW5kPSJwcm9mLnByZWZpeCI+PG1hbGxjdGw+cHJvZi5wcmVmaXg8L21hbGxj dGw+PC9saW5rPi4KKyAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3Rl bnRyeT4KKworICAgICAgPHZhcmxpc3RlbnRyeSBpZD0ib3B0LnByb2ZfYWN0aXZlIj4KKyAgICAg ICAgPHRlcm0+CisgICAgICAgICAgPG1hbGxjdGw+b3B0LnByb2ZfYWN0aXZlPC9tYWxsY3RsPgor ICAgICAgICAgICg8dHlwZT5ib29sPC90eXBlPikKKyAgICAgICAgICA8bGl0ZXJhbD5yLTwvbGl0 ZXJhbD4KKyAgICAgICAgICBbPG9wdGlvbj4tLWVuYWJsZS1wcm9mPC9vcHRpb24+XQorICAgICAg ICA8L3Rlcm0+CisgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Qcm9maWxpbmcgYWN0aXZhdGVkL2Rl YWN0aXZhdGVkLiAgVGhpcyBpcyBhIHNlY29uZGFyeQorICAgICAgICBjb250cm9sIG1lY2hhbmlz bSB0aGF0IG1ha2VzIGl0IHBvc3NpYmxlIHRvIHN0YXJ0IHRoZSBhcHBsaWNhdGlvbiB3aXRoCisg ICAgICAgIHByb2ZpbGluZyBlbmFibGVkIChzZWUgdGhlIDxsaW5rCisgICAgICAgIGxpbmtlbmQ9 Im9wdC5wcm9mIj48bWFsbGN0bD5vcHQucHJvZjwvbWFsbGN0bD48L2xpbms+IG9wdGlvbikgYnV0 CisgICAgICAgIGluYWN0aXZlLCB0aGVuIHRvZ2dsZSBwcm9maWxpbmcgYXQgYW55IHRpbWUgZHVy aW5nIHByb2dyYW0gZXhlY3V0aW9uCisgICAgICAgIHdpdGggdGhlIDxsaW5rCisgICAgICAgIGxp bmtlbmQ9InByb2YuYWN0aXZlIj48bWFsbGN0bD5wcm9mLmFjdGl2ZTwvbWFsbGN0bD48L2xpbms+ IG1hbGxjdGwuCisgICAgICAgIFRoaXMgb3B0aW9uIGlzIGVuYWJsZWQgYnkgZGVmYXVsdC48L3Bh cmE+PC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAgICA8dmFybGlzdGVu dHJ5IGlkPSJvcHQucHJvZl90aHJlYWRfYWN0aXZlX2luaXQiPgorICAgICAgICA8dGVybT4KKyAg ICAgICAgICA8bWFsbGN0bD5vcHQucHJvZl90aHJlYWRfYWN0aXZlX2luaXQ8L21hbGxjdGw+Cisg ICAgICAgICAgKDx0eXBlPmJvb2w8L3R5cGU+KQorICAgICAgICAgIDxsaXRlcmFsPnItPC9saXRl cmFsPgorICAgICAgICAgIFs8b3B0aW9uPi0tZW5hYmxlLXByb2Y8L29wdGlvbj5dCisgICAgICAg IDwvdGVybT4KKyAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkluaXRpYWwgc2V0dGluZyBmb3IgPGxp bmsKKyAgICAgICAgbGlua2VuZD0idGhyZWFkLnByb2YuYWN0aXZlIj48bWFsbGN0bD50aHJlYWQu cHJvZi5hY3RpdmU8L21hbGxjdGw+PC9saW5rPgorICAgICAgICBpbiBuZXdseSBjcmVhdGVkIHRo cmVhZHMuICBUaGUgaW5pdGlhbCBzZXR0aW5nIGZvciBuZXdseSBjcmVhdGVkIHRocmVhZHMKKyAg ICAgICAgY2FuIGFsc28gYmUgY2hhbmdlZCBkdXJpbmcgZXhlY3V0aW9uIHZpYSB0aGUgPGxpbmsK KyAgICAgICAgbGlua2VuZD0icHJvZi50aHJlYWRfYWN0aXZlX2luaXQiPjxtYWxsY3RsPnByb2Yu dGhyZWFkX2FjdGl2ZV9pbml0PC9tYWxsY3RsPjwvbGluaz4KKyAgICAgICAgbWFsbGN0bC4gIFRo aXMgb3B0aW9uIGlzIGVuYWJsZWQgYnkgZGVmYXVsdC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAg IDwvdmFybGlzdGVudHJ5PgorCisgICAgICA8dmFybGlzdGVudHJ5IGlkPSJvcHQubGdfcHJvZl9z YW1wbGUiPgorICAgICAgICA8dGVybT4KKyAgICAgICAgICA8bWFsbGN0bD5vcHQubGdfcHJvZl9z YW1wbGU8L21hbGxjdGw+CisgICAgICAgICAgKDx0eXBlPnNpemVfdDwvdHlwZT4pCisgICAgICAg ICAgPGxpdGVyYWw+ci08L2xpdGVyYWw+CisgICAgICAgICAgWzxvcHRpb24+LS1lbmFibGUtcHJv Zjwvb3B0aW9uPl0KKyAgICAgICAgPC90ZXJtPgorICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+QXZl cmFnZSBpbnRlcnZhbCAobG9nIGJhc2UgMikgYmV0d2VlbiBhbGxvY2F0aW9uCisgICAgICAgIHNh bXBsZXMsIGFzIG1lYXN1cmVkIGluIGJ5dGVzIG9mIGFsbG9jYXRpb24gYWN0aXZpdHkuICBJbmNy ZWFzaW5nIHRoZQorICAgICAgICBzYW1wbGluZyBpbnRlcnZhbCBkZWNyZWFzZXMgcHJvZmlsZSBm aWRlbGl0eSwgYnV0IGFsc28gZGVjcmVhc2VzIHRoZQorICAgICAgICBjb21wdXRhdGlvbmFsIG92 ZXJoZWFkLiAgVGhlIGRlZmF1bHQgc2FtcGxlIGludGVydmFsIGlzIDUxMiBLaUIgKDJeMTkKKyAg ICAgICAgQikuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAg ICAgPHZhcmxpc3RlbnRyeSBpZD0ib3B0LnByb2ZfYWNjdW0iPgorICAgICAgICA8dGVybT4KKyAg ICAgICAgICA8bWFsbGN0bD5vcHQucHJvZl9hY2N1bTwvbWFsbGN0bD4KKyAgICAgICAgICAoPHR5 cGU+Ym9vbDwvdHlwZT4pCisgICAgICAgICAgPGxpdGVyYWw+ci08L2xpdGVyYWw+CisgICAgICAg ICAgWzxvcHRpb24+LS1lbmFibGUtcHJvZjwvb3B0aW9uPl0KKyAgICAgICAgPC90ZXJtPgorICAg ICAgICA8bGlzdGl0ZW0+PHBhcmE+UmVwb3J0aW5nIG9mIGN1bXVsYXRpdmUgb2JqZWN0L2J5dGUg Y291bnRzIGluIHByb2ZpbGUKKyAgICAgICAgZHVtcHMgZW5hYmxlZC9kaXNhYmxlZC4gIElmIHRo aXMgb3B0aW9uIGlzIGVuYWJsZWQsIGV2ZXJ5IHVuaXF1ZQorICAgICAgICBiYWNrdHJhY2UgbXVz dCBiZSBzdG9yZWQgZm9yIHRoZSBkdXJhdGlvbiBvZiBleGVjdXRpb24uICBEZXBlbmRpbmcgb24K KyAgICAgICAgdGhlIGFwcGxpY2F0aW9uLCB0aGlzIGNhbiBpbXBvc2UgYSBsYXJnZSBtZW1vcnkg b3ZlcmhlYWQsIGFuZCB0aGUKKyAgICAgICAgY3VtdWxhdGl2ZSBjb3VudHMgYXJlIG5vdCBhbHdh eXMgb2YgaW50ZXJlc3QuICBUaGlzIG9wdGlvbiBpcyBkaXNhYmxlZAorICAgICAgICBieSBkZWZh dWx0LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAgIDx2 YXJsaXN0ZW50cnkgaWQ9Im9wdC5sZ19wcm9mX2ludGVydmFsIj4KKyAgICAgICAgPHRlcm0+Cisg ICAgICAgICAgPG1hbGxjdGw+b3B0LmxnX3Byb2ZfaW50ZXJ2YWw8L21hbGxjdGw+CisgICAgICAg ICAgKDx0eXBlPnNzaXplX3Q8L3R5cGU+KQorICAgICAgICAgIDxsaXRlcmFsPnItPC9saXRlcmFs PgorICAgICAgICAgIFs8b3B0aW9uPi0tZW5hYmxlLXByb2Y8L29wdGlvbj5dCisgICAgICAgIDwv dGVybT4KKyAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkF2ZXJhZ2UgaW50ZXJ2YWwgKGxvZyBiYXNl IDIpIGJldHdlZW4gbWVtb3J5IHByb2ZpbGUKKyAgICAgICAgZHVtcHMsIGFzIG1lYXN1cmVkIGlu IGJ5dGVzIG9mIGFsbG9jYXRpb24gYWN0aXZpdHkuICBUaGUgYWN0dWFsCisgICAgICAgIGludGVy dmFsIGJldHdlZW4gZHVtcHMgbWF5IGJlIHNwb3JhZGljIGJlY2F1c2UgZGVjZW50cmFsaXplZCBh bGxvY2F0aW9uCisgICAgICAgIGNvdW50ZXJzIGFyZSB1c2VkIHRvIGF2b2lkIHN5bmNocm9uaXph dGlvbiBib3R0bGVuZWNrcy4gIFByb2ZpbGVzIGFyZQorICAgICAgICBkdW1wZWQgdG8gZmlsZXMg bmFtZWQgYWNjb3JkaW5nIHRvIHRoZSBwYXR0ZXJuCisgICAgICAgIDxmaWxlbmFtZT4mbHQ7cHJl Zml4Jmd0Oy4mbHQ7cGlkJmd0Oy4mbHQ7c2VxJmd0Oy5pJmx0O2lzZXEmZ3Q7LmhlYXA8L2ZpbGVu YW1lPiwKKyAgICAgICAgd2hlcmUgPGxpdGVyYWw+Jmx0O3ByZWZpeCZndDs8L2xpdGVyYWw+IGlz IGNvbnRyb2xsZWQgYnkgdGhlCisgICAgICAgIDxsaW5rCisgICAgICAgIGxpbmtlbmQ9Im9wdC5w cm9mX3ByZWZpeCI+PG1hbGxjdGw+b3B0LnByb2ZfcHJlZml4PC9tYWxsY3RsPjwvbGluaz4gYW5k CisgICAgICAgIDxsaW5rIGxpbmtlbmQ9InByb2YucHJlZml4Ij48bWFsbGN0bD5wcm9mLnByZWZp eDwvbWFsbGN0bD48L2xpbms+CisgICAgICAgIG9wdGlvbnMuICBCeSBkZWZhdWx0LCBpbnRlcnZh bC10cmlnZ2VyZWQgcHJvZmlsZSBkdW1waW5nIGlzIGRpc2FibGVkCisgICAgICAgIChlbmNvZGVk IGFzIC0xKS4KKyAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRy eT4KKworICAgICAgPHZhcmxpc3RlbnRyeSBpZD0ib3B0LnByb2ZfZ2R1bXAiPgorICAgICAgICA8 dGVybT4KKyAgICAgICAgICA8bWFsbGN0bD5vcHQucHJvZl9nZHVtcDwvbWFsbGN0bD4KKyAgICAg ICAgICAoPHR5cGU+Ym9vbDwvdHlwZT4pCisgICAgICAgICAgPGxpdGVyYWw+ci08L2xpdGVyYWw+ CisgICAgICAgICAgWzxvcHRpb24+LS1lbmFibGUtcHJvZjwvb3B0aW9uPl0KKyAgICAgICAgPC90 ZXJtPgorICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+U2V0IHRoZSBpbml0aWFsIHN0YXRlIG9mIDxs aW5rCisgICAgICAgIGxpbmtlbmQ9InByb2YuZ2R1bXAiPjxtYWxsY3RsPnByb2YuZ2R1bXA8L21h bGxjdGw+PC9saW5rPiwgd2hpY2ggd2hlbgorICAgICAgICBlbmFibGVkIHRyaWdnZXJzIGEgbWVt b3J5IHByb2ZpbGUgZHVtcCBldmVyeSB0aW1lIHRoZSB0b3RhbCB2aXJ0dWFsCisgICAgICAgIG1l bW9yeSBleGNlZWRzIHRoZSBwcmV2aW91cyBtYXhpbXVtLiAgVGhpcyBvcHRpb24gaXMgZGlzYWJs ZWQgYnkKKyAgICAgICAgZGVmYXVsdC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlz dGVudHJ5PgorCisgICAgICA8dmFybGlzdGVudHJ5IGlkPSJvcHQucHJvZl9maW5hbCI+CisgICAg ICAgIDx0ZXJtPgorICAgICAgICAgIDxtYWxsY3RsPm9wdC5wcm9mX2ZpbmFsPC9tYWxsY3RsPgor ICAgICAgICAgICg8dHlwZT5ib29sPC90eXBlPikKKyAgICAgICAgICA8bGl0ZXJhbD5yLTwvbGl0 ZXJhbD4KKyAgICAgICAgICBbPG9wdGlvbj4tLWVuYWJsZS1wcm9mPC9vcHRpb24+XQorICAgICAg ICA8L3Rlcm0+CisgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Vc2UgYW4KKyAgICAgICAgPGNpdGVy ZWZlbnRyeT48cmVmZW50cnl0aXRsZT5hdGV4aXQ8L3JlZmVudHJ5dGl0bGU+CisgICAgICAgIDxt YW52b2xudW0+MzwvbWFudm9sbnVtPjwvY2l0ZXJlZmVudHJ5PiBmdW5jdGlvbiB0byBkdW1wIGZp bmFsIG1lbW9yeQorICAgICAgICB1c2FnZSB0byBhIGZpbGUgbmFtZWQgYWNjb3JkaW5nIHRvIHRo ZSBwYXR0ZXJuCisgICAgICAgIDxmaWxlbmFtZT4mbHQ7cHJlZml4Jmd0Oy4mbHQ7cGlkJmd0Oy4m bHQ7c2VxJmd0Oy5mLmhlYXA8L2ZpbGVuYW1lPiwKKyAgICAgICAgd2hlcmUgPGxpdGVyYWw+Jmx0 O3ByZWZpeCZndDs8L2xpdGVyYWw+IGlzIGNvbnRyb2xsZWQgYnkgdGhlIDxsaW5rCisgICAgICAg IGxpbmtlbmQ9Im9wdC5wcm9mX3ByZWZpeCI+PG1hbGxjdGw+b3B0LnByb2ZfcHJlZml4PC9tYWxs Y3RsPjwvbGluaz4gYW5kCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9InByb2YucHJlZml4Ij48bWFs bGN0bD5wcm9mLnByZWZpeDwvbWFsbGN0bD48L2xpbms+CisgICAgICAgIG9wdGlvbnMuICBOb3Rl IHRoYXQgPGZ1bmN0aW9uPmF0ZXhpdCgpPC9mdW5jdGlvbj4gbWF5IGFsbG9jYXRlCisgICAgICAg IG1lbW9yeSBkdXJpbmcgYXBwbGljYXRpb24gaW5pdGlhbGl6YXRpb24gYW5kIHRoZW4gZGVhZGxv Y2sgaW50ZXJuYWxseQorICAgICAgICB3aGVuIGplbWFsbG9jIGluIHR1cm4gY2FsbHMgPGZ1bmN0 aW9uPmF0ZXhpdCgpPC9mdW5jdGlvbj4sIHNvCisgICAgICAgIHRoaXMgb3B0aW9uIGlzIG5vdCB1 bml2ZXJzYWxseSB1c2FibGUgKHRob3VnaCB0aGUgYXBwbGljYXRpb24gY2FuCisgICAgICAgIHJl Z2lzdGVyIGl0cyBvd24gPGZ1bmN0aW9uPmF0ZXhpdCgpPC9mdW5jdGlvbj4gZnVuY3Rpb24gd2l0 aAorICAgICAgICBlcXVpdmFsZW50IGZ1bmN0aW9uYWxpdHkpLiAgVGhpcyBvcHRpb24gaXMgZGlz YWJsZWQgYnkKKyAgICAgICAgZGVmYXVsdC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgIDwvdmFy bGlzdGVudHJ5PgorCisgICAgICA8dmFybGlzdGVudHJ5IGlkPSJvcHQucHJvZl9sZWFrIj4KKyAg ICAgICAgPHRlcm0+CisgICAgICAgICAgPG1hbGxjdGw+b3B0LnByb2ZfbGVhazwvbWFsbGN0bD4K KyAgICAgICAgICAoPHR5cGU+Ym9vbDwvdHlwZT4pCisgICAgICAgICAgPGxpdGVyYWw+ci08L2xp dGVyYWw+CisgICAgICAgICAgWzxvcHRpb24+LS1lbmFibGUtcHJvZjwvb3B0aW9uPl0KKyAgICAg ICAgPC90ZXJtPgorICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+TGVhayByZXBvcnRpbmcgZW5hYmxl ZC9kaXNhYmxlZC4gIElmIGVuYWJsZWQsIHVzZSBhbgorICAgICAgICA8Y2l0ZXJlZmVudHJ5Pjxy ZWZlbnRyeXRpdGxlPmF0ZXhpdDwvcmVmZW50cnl0aXRsZT4KKyAgICAgICAgPG1hbnZvbG51bT4z PC9tYW52b2xudW0+PC9jaXRlcmVmZW50cnk+IGZ1bmN0aW9uIHRvIHJlcG9ydCBtZW1vcnkgbGVh a3MKKyAgICAgICAgZGV0ZWN0ZWQgYnkgYWxsb2NhdGlvbiBzYW1wbGluZy4gIFNlZSB0aGUKKyAg ICAgICAgPGxpbmsgbGlua2VuZD0ib3B0LnByb2YiPjxtYWxsY3RsPm9wdC5wcm9mPC9tYWxsY3Rs PjwvbGluaz4gb3B0aW9uIGZvcgorICAgICAgICBpbmZvcm1hdGlvbiBvbiBhbmFseXppbmcgaGVh cCBwcm9maWxlIG91dHB1dC4gIFdvcmtzIG9ubHkgd2hlbiBjb21iaW5lZAorICAgICAgICB3aXRo IDxsaW5rIGxpbmtlbmQ9Im9wdC5wcm9mX2ZpbmFsIj48bWFsbGN0bD5vcHQucHJvZl9maW5hbDwv bWFsbGN0bD4KKyAgICAgICAgPC9saW5rPiwgb3RoZXJ3aXNlIGRvZXMgbm90aGluZy4gIFRoaXMg b3B0aW9uIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQuCisgICAgICAgIDwvcGFyYT48L2xpc3RpdGVt PgorICAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9Im9wdC5w cm9mX2xlYWtfZXJyb3IiPgorICAgICAgICA8dGVybT4KKyAgICAgICAgICA8bWFsbGN0bD5vcHQu cHJvZl9sZWFrX2Vycm9yPC9tYWxsY3RsPgorICAgICAgICAgICg8dHlwZT5ib29sPC90eXBlPikK KyAgICAgICAgICA8bGl0ZXJhbD5yLTwvbGl0ZXJhbD4KKyAgICAgICAgICBbPG9wdGlvbj4tLWVu YWJsZS1wcm9mPC9vcHRpb24+XQorICAgICAgICA8L3Rlcm0+CisgICAgICAgIDxsaXN0aXRlbT48 cGFyYT5TaW1pbGFyIHRvIDxsaW5rIGxpbmtlbmQ9Im9wdC5wcm9mX2xlYWsiPjxtYWxsY3RsPgor ICAgICAgICBvcHQucHJvZl9sZWFrPC9tYWxsY3RsPjwvbGluaz4sIGJ1dCBtYWtlcyB0aGUgcHJv Y2VzcyBleGl0IHdpdGggZXJyb3IKKyAgICAgICAgY29kZSAxIGlmIGEgbWVtb3J5IGxlYWsgaXMg ZGV0ZWN0ZWQuICBUaGlzIG9wdGlvbiBzdXBlcnNlZGVzCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9 Im9wdC5wcm9mX2xlYWsiPjxtYWxsY3RsPm9wdC5wcm9mX2xlYWs8L21hbGxjdGw+PC9saW5rPiwK KyAgICAgICAgbWVhbmluZyB0aGF0IGlmIGJvdGggYXJlIHNwZWNpZmllZCwgdGhpcyBvcHRpb24g dGFrZXMgcHJlY2VkZW5jZS4gIFdoZW4KKyAgICAgICAgZW5hYmxlZCwgYWxzbyBlbmFibGVzIDxs aW5rIGxpbmtlbmQ9Im9wdC5wcm9mX2xlYWsiPjxtYWxsY3RsPgorICAgICAgICBvcHQucHJvZl9s ZWFrPC9tYWxsY3RsPjwvbGluaz4uICBXb3JrcyBvbmx5IHdoZW4gY29tYmluZWQgd2l0aAorICAg ICAgICA8bGluayBsaW5rZW5kPSJvcHQucHJvZl9maW5hbCI+PG1hbGxjdGw+b3B0LnByb2ZfZmlu YWw8L21hbGxjdGw+PC9saW5rPiwKKyAgICAgICAgb3RoZXJ3aXNlIGRvZXMgbm90aGluZy4gIFRo aXMgb3B0aW9uIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQuCisgICAgICAgIDwvcGFyYT48L2xpc3Rp dGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9Im9w dC56ZXJvX3JlYWxsb2MiPgorICAgICAgICA8dGVybT4KKyAgICAgICAgICA8bWFsbGN0bD5vcHQu emVyb19yZWFsbG9jPC9tYWxsY3RsPgorICAgICAgICAgICg8dHlwZT5jb25zdCBjaGFyICo8L3R5 cGU+KQorICAgICAgICAgIDxsaXRlcmFsPnItPC9saXRlcmFsPgorICAgICAgICA8L3Rlcm0+Cisg ICAgICAgIDxsaXN0aXRlbT48cGFyYT4gRGV0ZXJtaW5lcyB0aGUgYmVoYXZpb3Igb2YKKyAgICAg ICAgPGZ1bmN0aW9uPnJlYWxsb2MoKTwvZnVuY3Rpb24+IHdoZW4gcGFzc2VkIGEgdmFsdWUgb2Yg emVybyBmb3IgdGhlIG5ldworICAgICAgICBzaXplLiAgPHF1b3RlPmFsbG9jPC9xdW90ZT4gdHJl YXRzIHRoaXMgYXMgYW4gYWxsb2NhdGlvbiBvZiBzaXplIHplcm8KKyAgICAgICAgKGFuZCByZXR1 cm5zIGEgbm9uLW51bGwgcmVzdWx0IGV4Y2VwdCBpbiBjYXNlIG9mIHJlc291cmNlIGV4aGF1c3Rp b24pLgorICAgICAgICA8cXVvdGU+ZnJlZTwvcXVvdGU+IHRyZWF0cyB0aGlzIGFzIGEgZGVhbGxv Y2F0aW9uIG9mIHRoZSBwb2ludGVyLCBhbmQKKyAgICAgICAgcmV0dXJucyA8Y29uc3RhbnQ+TlVM TDwvY29uc3RhbnQ+IHdpdGhvdXQgc2V0dGluZworICAgICAgICA8dmFybmFtZT5lcnJubzwvdmFy bmFtZT4uICA8cXVvdGU+YWJvcnQ8L3F1b3RlPiBhYm9ydHMgdGhlIHByb2Nlc3MgaWYKKyAgICAg ICAgemVybyBpcyBwYXNzZWQuICBUaGUgZGVmYXVsdCBpcyA8cXVvdGU+ZnJlZTwvcXVvdGU+IG9u IExpbnV4IGFuZAorICAgICAgICBXaW5kb3dzLCBhbmQgPHF1b3RlPmFsbG9jPC9xdW90ZT4gZWxz ZXdoZXJlLjwvcGFyYT4KKworCTxwYXJhPlRoZXJlIGlzIGNvbnNpZGVyYWJsZSBkaXZlcmdlbmNl IG9mIGJlaGF2aW9ycyBhY3Jvc3MKKwlpbXBsZW1lbnRhdGlvbnMgaW4gaGFuZGxpbmcgdGhpcyBj YXNlLiBNYW55IGhhdmUgdGhlIGJlaGF2aW9yIG9mCisJPHF1b3RlPmZyZWU8L3F1b3RlPi4gVGhp cyBjYW4gaW50cm9kdWNlIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcywgc2luY2UKKwlhIDxjb25z dGFudD5OVUxMPC9jb25zdGFudD4gcmV0dXJuIHZhbHVlIGluZGljYXRlcyBmYWlsdXJlLCBhbmQg dGhlCisJY29udGludWVkIHZhbGlkaXR5IG9mIHRoZSBwYXNzZWQtaW4gcG9pbnRlciAocGVyIFBP U0lYIGFuZCBDMTEpLgorCTxxdW90ZT5hbGxvYzwvcXVvdGU+IGlzIHNhZmUsIGJ1dCBjYW4gY2F1 c2UgbGVha3MgaW4gcHJvZ3JhbXMgdGhhdAorCWV4cGVjdCB0aGUgY29tbW9uIGJlaGF2aW9yLiAg UHJvZ3JhbXMgaW50ZW5kZWQgdG8gYmUgcG9ydGFibGUgYW5kCisJbGVhay1mcmVlIGNhbm5vdCBh c3N1bWUgZWl0aGVyIGJlaGF2aW9yLCBhbmQgbXVzdCB0aGVyZWZvcmUgbmV2ZXIgY2FsbAorCXJl YWxsb2Mgd2l0aCBhIHNpemUgb2YgMC4gIFRoZSA8cXVvdGU+YWJvcnQ8L3F1b3RlPiBvcHRpb24g ZW5hYmxlcyB0aGVzZQorCXRlc3RpbmcgdGhpcyBiZWhhdmlvci48L3BhcmE+PC9saXN0aXRlbT4K KyAgICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAgICA8dmFybGlzdGVudHJ5IGlkPSJ0aHJlYWQu YXJlbmEiPgorICAgICAgICA8dGVybT4KKyAgICAgICAgICA8bWFsbGN0bD50aHJlYWQuYXJlbmE8 L21hbGxjdGw+CisgICAgICAgICAgKDx0eXBlPnVuc2lnbmVkPC90eXBlPikKKyAgICAgICAgICA8 bGl0ZXJhbD5ydzwvbGl0ZXJhbD4KKyAgICAgICAgPC90ZXJtPgorICAgICAgICA8bGlzdGl0ZW0+ PHBhcmE+R2V0IG9yIHNldCB0aGUgYXJlbmEgYXNzb2NpYXRlZCB3aXRoIHRoZSBjYWxsaW5nCisg ICAgICAgIHRocmVhZC4gIElmIHRoZSBzcGVjaWZpZWQgYXJlbmEgd2FzIG5vdCBpbml0aWFsaXpl ZCBiZWZvcmVoYW5kIChzZWUgdGhlCisgICAgICAgIDxsaW5rCisgICAgICAgIGxpbmtlbmQ9ImFy ZW5hLmkuaW5pdGlhbGl6ZWQiPjxtYWxsY3RsPmFyZW5hLmkuaW5pdGlhbGl6ZWQ8L21hbGxjdGw+ PC9saW5rPgorICAgICAgICBtYWxsY3RsKSwgaXQgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGluaXRp YWxpemVkIGFzIGEgc2lkZSBlZmZlY3Qgb2YKKyAgICAgICAgY2FsbGluZyB0aGlzIGludGVyZmFj ZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAgICA8dmFy bGlzdGVudHJ5IGlkPSJ0aHJlYWQuYWxsb2NhdGVkIj4KKyAgICAgICAgPHRlcm0+CisgICAgICAg ICAgPG1hbGxjdGw+dGhyZWFkLmFsbG9jYXRlZDwvbWFsbGN0bD4KKyAgICAgICAgICAoPHR5cGU+ dWludDY0X3Q8L3R5cGU+KQorICAgICAgICAgIDxsaXRlcmFsPnItPC9saXRlcmFsPgorICAgICAg ICAgIFs8b3B0aW9uPi0tZW5hYmxlLXN0YXRzPC9vcHRpb24+XQorICAgICAgICA8L3Rlcm0+Cisg ICAgICAgIDxsaXN0aXRlbT48cGFyYT5HZXQgdGhlIHRvdGFsIG51bWJlciBvZiBieXRlcyBldmVy IGFsbG9jYXRlZCBieSB0aGUKKyAgICAgICAgY2FsbGluZyB0aHJlYWQuICBUaGlzIGNvdW50ZXIg aGFzIHRoZSBwb3RlbnRpYWwgdG8gd3JhcCBhcm91bmQ7IGl0IGlzCisgICAgICAgIHVwIHRvIHRo ZSBhcHBsaWNhdGlvbiB0byBhcHByb3ByaWF0ZWx5IGludGVycHJldCB0aGUgY291bnRlciBpbiBz dWNoCisgICAgICAgIGNhc2VzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50 cnk+CisKKyAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9InRocmVhZC5hbGxvY2F0ZWRwIj4KKyAgICAg ICAgPHRlcm0+CisgICAgICAgICAgPG1hbGxjdGw+dGhyZWFkLmFsbG9jYXRlZHA8L21hbGxjdGw+ CisgICAgICAgICAgKDx0eXBlPnVpbnQ2NF90ICo8L3R5cGU+KQorICAgICAgICAgIDxsaXRlcmFs PnItPC9saXRlcmFsPgorICAgICAgICAgIFs8b3B0aW9uPi0tZW5hYmxlLXN0YXRzPC9vcHRpb24+ XQorICAgICAgICA8L3Rlcm0+CisgICAgICAgIDxsaXN0aXRlbT48cGFyYT5HZXQgYSBwb2ludGVy IHRvIHRoZSB0aGUgdmFsdWUgdGhhdCBpcyByZXR1cm5lZCBieSB0aGUKKyAgICAgICAgPGxpbmsK KyAgICAgICAgbGlua2VuZD0idGhyZWFkLmFsbG9jYXRlZCI+PG1hbGxjdGw+dGhyZWFkLmFsbG9j YXRlZDwvbWFsbGN0bD48L2xpbms+CisgICAgICAgIG1hbGxjdGwuICBUaGlzIGlzIHVzZWZ1bCBm b3IgYXZvaWRpbmcgdGhlIG92ZXJoZWFkIG9mIHJlcGVhdGVkCisgICAgICAgIDxmdW5jdGlvbj5t YWxsY3RsKigpPC9mdW5jdGlvbj4gY2FsbHMuICBOb3RlIHRoYXQgdGhlIHVuZGVybHlpbmcgY291 bnRlcgorICAgICAgICBzaG91bGQgbm90IGJlIG1vZGlmaWVkIGJ5IHRoZSBhcHBsaWNhdGlvbi48 L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAgICA8dmFybGlz dGVudHJ5IGlkPSJ0aHJlYWQuZGVhbGxvY2F0ZWQiPgorICAgICAgICA8dGVybT4KKyAgICAgICAg ICA8bWFsbGN0bD50aHJlYWQuZGVhbGxvY2F0ZWQ8L21hbGxjdGw+CisgICAgICAgICAgKDx0eXBl PnVpbnQ2NF90PC90eXBlPikKKyAgICAgICAgICA8bGl0ZXJhbD5yLTwvbGl0ZXJhbD4KKyAgICAg ICAgICBbPG9wdGlvbj4tLWVuYWJsZS1zdGF0czwvb3B0aW9uPl0KKyAgICAgICAgPC90ZXJtPgor ICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+R2V0IHRoZSB0b3RhbCBudW1iZXIgb2YgYnl0ZXMgZXZl ciBkZWFsbG9jYXRlZCBieSB0aGUKKyAgICAgICAgY2FsbGluZyB0aHJlYWQuICBUaGlzIGNvdW50 ZXIgaGFzIHRoZSBwb3RlbnRpYWwgdG8gd3JhcCBhcm91bmQ7IGl0IGlzCisgICAgICAgIHVwIHRv IHRoZSBhcHBsaWNhdGlvbiB0byBhcHByb3ByaWF0ZWx5IGludGVycHJldCB0aGUgY291bnRlciBp biBzdWNoCisgICAgICAgIGNhc2VzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0 ZW50cnk+CisKKyAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9InRocmVhZC5kZWFsbG9jYXRlZHAiPgor ICAgICAgICA8dGVybT4KKyAgICAgICAgICA8bWFsbGN0bD50aHJlYWQuZGVhbGxvY2F0ZWRwPC9t YWxsY3RsPgorICAgICAgICAgICg8dHlwZT51aW50NjRfdCAqPC90eXBlPikKKyAgICAgICAgICA8 bGl0ZXJhbD5yLTwvbGl0ZXJhbD4KKyAgICAgICAgICBbPG9wdGlvbj4tLWVuYWJsZS1zdGF0czwv b3B0aW9uPl0KKyAgICAgICAgPC90ZXJtPgorICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+R2V0IGEg cG9pbnRlciB0byB0aGUgdGhlIHZhbHVlIHRoYXQgaXMgcmV0dXJuZWQgYnkgdGhlCisgICAgICAg IDxsaW5rCisgICAgICAgIGxpbmtlbmQ9InRocmVhZC5kZWFsbG9jYXRlZCI+PG1hbGxjdGw+dGhy ZWFkLmRlYWxsb2NhdGVkPC9tYWxsY3RsPjwvbGluaz4KKyAgICAgICAgbWFsbGN0bC4gIFRoaXMg aXMgdXNlZnVsIGZvciBhdm9pZGluZyB0aGUgb3ZlcmhlYWQgb2YgcmVwZWF0ZWQKKyAgICAgICAg PGZ1bmN0aW9uPm1hbGxjdGwqKCk8L2Z1bmN0aW9uPiBjYWxscy4gIE5vdGUgdGhhdCB0aGUgdW5k ZXJseWluZyBjb3VudGVyCisgICAgICAgIHNob3VsZCBub3QgYmUgbW9kaWZpZWQgYnkgdGhlIGFw cGxpY2F0aW9uLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAg ICAgIDx2YXJsaXN0ZW50cnkgaWQ9InRocmVhZC5wZWFrLnJlYWQiPgorICAgICAgICA8dGVybT4K KyAgICAgICAgICA8bWFsbGN0bD50aHJlYWQucGVhay5yZWFkPC9tYWxsY3RsPgorICAgICAgICAg ICg8dHlwZT51aW50NjRfdDwvdHlwZT4pCisgICAgICAgICAgPGxpdGVyYWw+ci08L2xpdGVyYWw+ CisgICAgICAgICAgWzxvcHRpb24+LS1lbmFibGUtc3RhdHM8L29wdGlvbj5dCisgICAgICAgIDwv dGVybT4KKyAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkdldCBhbiBhcHByb3hpbWF0aW9uIG9mIHRo ZSBtYXhpbXVtIHZhbHVlIG9mIHRoZQorICAgICAgICBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIG51 bWJlciBvZiBieXRlcyBhbGxvY2F0ZWQgYW5kIHRoZSBudW1iZXIgb2YgYnl0ZXMKKyAgICAgICAg ZGVhbGxvY2F0ZWQgYnkgdGhlIGNhbGxpbmcgdGhyZWFkIHNpbmNlIHRoZSBsYXN0IGNhbGwgdG8g PGxpbmsKKyAgICAgICAgbGlua2VuZD0idGhyZWFkLnBlYWsucmVzZXQiPjxtYWxsY3RsPnRocmVh ZC5wZWFrLnJlc2V0PC9tYWxsY3RsPjwvbGluaz4sCisgICAgICAgIG9yIHNpbmNlIHRoZSB0aHJl YWQncyBjcmVhdGlvbiBpZiBpdCBoYXMgbm90IGNhbGxlZCA8bGluaworICAgICAgICBsaW5rZW5k PSJ0aHJlYWQucGVhay5yZXNldCI+PG1hbGxjdGw+dGhyZWFkLnBlYWsucmVzZXQ8L21hbGxjdGw+ PC9saW5rPi4KKyAgICAgICAgTm8gZ3VhcmFudGVlcyBhcmUgbWFkZSBhYm91dCB0aGUgcXVhbGl0 eSBvZiB0aGUgYXBwcm94aW1hdGlvbiwgYnV0CisgICAgICAgIGplbWFsbG9jIGN1cnJlbnRseSBl bmRlYXZvcnMgdG8gbWFpbnRhaW4gYWNjdXJhY3kgdG8gd2l0aGluIG9uZSBodW5kcmVkCisgICAg ICAgIGtpbG9ieXRlcy4KKyAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxp c3RlbnRyeT4KKworICAgICAgPHZhcmxpc3RlbnRyeSBpZD0idGhyZWFkLnBlYWsucmVzZXQiPgor ICAgICAgICA8dGVybT4KKyAgICAgICAgICA8bWFsbGN0bD50aHJlYWQucGVhay5yZXNldDwvbWFs bGN0bD4KKyAgICAgICAgICAoPHR5cGU+dm9pZDwvdHlwZT4pCisgICAgICAgICAgPGxpdGVyYWw+ LS08L2xpdGVyYWw+CisgICAgICAgICAgWzxvcHRpb24+LS1lbmFibGUtc3RhdHM8L29wdGlvbj5d CisgICAgICAgIDwvdGVybT4KKyAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlJlc2V0cyB0aGUgY291 bnRlciBmb3IgbmV0IGJ5dGVzIGFsbG9jYXRlZCBpbiB0aGUgY2FsbGluZworICAgICAgICB0aHJl YWQgdG8gemVyby4gVGhpcyBhZmZlY3RzIHN1YnNlcXVlbnQgY2FsbHMgdG8gPGxpbmsKKyAgICAg ICAgbGlua2VuZD0idGhyZWFkLnBlYWsucmVhZCI+PG1hbGxjdGw+dGhyZWFkLnBlYWsucmVhZDwv bWFsbGN0bD48L2xpbms+LAorICAgICAgICBidXQgbm90IHRoZSB2YWx1ZXMgcmV0dXJuZWQgYnkg PGxpbmsKKyAgICAgICAgbGlua2VuZD0idGhyZWFkLmFsbG9jYXRlZCI+PG1hbGxjdGw+dGhyZWFk LmFsbG9jYXRlZDwvbWFsbGN0bD48L2xpbms+CisgICAgICAgIG9yIDxsaW5rCisgICAgICAgIGxp bmtlbmQ9InRocmVhZC5kZWFsbG9jYXRlZCI+PG1hbGxjdGw+dGhyZWFkLmRlYWxsb2NhdGVkPC9t YWxsY3RsPjwvbGluaz4uCisgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgPC92YXJs aXN0ZW50cnk+CisKKyAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9InRocmVhZC50Y2FjaGUuZW5hYmxl ZCI+CisgICAgICAgIDx0ZXJtPgorICAgICAgICAgIDxtYWxsY3RsPnRocmVhZC50Y2FjaGUuZW5h YmxlZDwvbWFsbGN0bD4KKyAgICAgICAgICAoPHR5cGU+Ym9vbDwvdHlwZT4pCisgICAgICAgICAg PGxpdGVyYWw+cnc8L2xpdGVyYWw+CisgICAgICAgIDwvdGVybT4KKyAgICAgICAgPGxpc3RpdGVt PjxwYXJhPkVuYWJsZS9kaXNhYmxlIGNhbGxpbmcgdGhyZWFkJ3MgdGNhY2hlLiAgVGhlIHRjYWNo ZSBpcworICAgICAgICBpbXBsaWNpdGx5IGZsdXNoZWQgYXMgYSBzaWRlIGVmZmVjdCBvZiBiZWNv bWluZworICAgICAgICBkaXNhYmxlZCAoc2VlIDxsaW5rCisgICAgICAgIGxpbmtlbmQ9InRocmVh ZC50Y2FjaGUuZmx1c2giPjxtYWxsY3RsPnRocmVhZC50Y2FjaGUuZmx1c2g8L21hbGxjdGw+PC9s aW5rPikuCisgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+ CisKKyAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9InRocmVhZC50Y2FjaGUuZmx1c2giPgorICAgICAg ICA8dGVybT4KKyAgICAgICAgICA8bWFsbGN0bD50aHJlYWQudGNhY2hlLmZsdXNoPC9tYWxsY3Rs PgorICAgICAgICAgICg8dHlwZT52b2lkPC90eXBlPikKKyAgICAgICAgICA8bGl0ZXJhbD4tLTwv bGl0ZXJhbD4KKyAgICAgICAgPC90ZXJtPgorICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Rmx1c2gg Y2FsbGluZyB0aHJlYWQncyB0aHJlYWQtc3BlY2lmaWMgY2FjaGUgKHRjYWNoZSkuCisgICAgICAg IFRoaXMgaW50ZXJmYWNlIHJlbGVhc2VzIGFsbCBjYWNoZWQgb2JqZWN0cyBhbmQgaW50ZXJuYWwg ZGF0YSBzdHJ1Y3R1cmVzCisgICAgICAgIGFzc29jaWF0ZWQgd2l0aCB0aGUgY2FsbGluZyB0aHJl YWQncyB0Y2FjaGUuICBPcmRpbmFyaWx5LCB0aGlzIGludGVyZmFjZQorICAgICAgICBuZWVkIG5v dCBiZSBjYWxsZWQsIHNpbmNlIGF1dG9tYXRpYyBwZXJpb2RpYyBpbmNyZW1lbnRhbCBnYXJiYWdl CisgICAgICAgIGNvbGxlY3Rpb24gb2NjdXJzLCBhbmQgdGhlIHRocmVhZCBjYWNoZSBpcyBhdXRv bWF0aWNhbGx5IGRpc2NhcmRlZCB3aGVuCisgICAgICAgIGEgdGhyZWFkIGV4aXRzLiAgSG93ZXZl ciwgZ2FyYmFnZSBjb2xsZWN0aW9uIGlzIHRyaWdnZXJlZCBieSBhbGxvY2F0aW9uCisgICAgICAg IGFjdGl2aXR5LCBzbyBpdCBpcyBwb3NzaWJsZSBmb3IgYSB0aHJlYWQgdGhhdCBzdG9wcworICAg ICAgICBhbGxvY2F0aW5nL2RlYWxsb2NhdGluZyB0byByZXRhaW4gaXRzIGNhY2hlIGluZGVmaW5p dGVseSwgaW4gd2hpY2ggY2FzZQorICAgICAgICB0aGUgZGV2ZWxvcGVyIG1heSBmaW5kIG1hbnVh bCBmbHVzaGluZyB1c2VmdWwuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRy eT4KKworICAgICAgPHZhcmxpc3RlbnRyeSBpZD0idGhyZWFkLnByb2YubmFtZSI+CisgICAgICAg IDx0ZXJtPgorICAgICAgICAgIDxtYWxsY3RsPnRocmVhZC5wcm9mLm5hbWU8L21hbGxjdGw+Cisg ICAgICAgICAgKDx0eXBlPmNvbnN0IGNoYXIgKjwvdHlwZT4pCisgICAgICAgICAgPGxpdGVyYWw+ ci08L2xpdGVyYWw+IG9yCisgICAgICAgICAgPGxpdGVyYWw+LXc8L2xpdGVyYWw+CisgICAgICAg ICAgWzxvcHRpb24+LS1lbmFibGUtcHJvZjwvb3B0aW9uPl0KKyAgICAgICAgPC90ZXJtPgorICAg ICAgICA8bGlzdGl0ZW0+PHBhcmE+R2V0L3NldCB0aGUgZGVzY3JpcHRpdmUgbmFtZSBhc3NvY2lh dGVkIHdpdGggdGhlIGNhbGxpbmcKKyAgICAgICAgdGhyZWFkIGluIG1lbW9yeSBwcm9maWxlIGR1 bXBzLiAgQW4gaW50ZXJuYWwgY29weSBvZiB0aGUgbmFtZSBzdHJpbmcgaXMKKyAgICAgICAgY3Jl YXRlZCwgc28gdGhlIGlucHV0IHN0cmluZyBuZWVkIG5vdCBiZSBtYWludGFpbmVkIGFmdGVyIHRo aXMgaW50ZXJmYWNlCisgICAgICAgIGNvbXBsZXRlcyBleGVjdXRpb24uICBUaGUgb3V0cHV0IHN0 cmluZyBvZiB0aGlzIGludGVyZmFjZSBzaG91bGQgYmUKKyAgICAgICAgY29waWVkIGZvciBub24t ZXBoZW1lcmFsIHVzZXMsIGJlY2F1c2UgbXVsdGlwbGUgaW1wbGVtZW50YXRpb24gZGV0YWlscwor ICAgICAgICBjYW4gY2F1c2UgYXN5bmNocm9ub3VzIHN0cmluZyBkZWFsbG9jYXRpb24uICBGdXJ0 aGVybW9yZSwgZWFjaAorICAgICAgICBpbnZvY2F0aW9uIG9mIHRoaXMgaW50ZXJmYWNlIGNhbiBv bmx5IHJlYWQgb3Igd3JpdGU7IHNpbXVsdGFuZW91cworICAgICAgICByZWFkL3dyaXRlIGlzIG5v dCBzdXBwb3J0ZWQgZHVlIHRvIHN0cmluZyBsaWZldGltZSBsaW1pdGF0aW9ucy4gIFRoZQorICAg ICAgICBuYW1lIHN0cmluZyBtdXN0IGJlIG5pbC10ZXJtaW5hdGVkIGFuZCBjb21wcmlzZWQgb25s eSBvZiBjaGFyYWN0ZXJzIGluCisgICAgICAgIHRoZSBzZXRzIHJlY29nbml6ZWQKKyAgICAgICAg YnkgPGNpdGVyZWZlbnRyeT48cmVmZW50cnl0aXRsZT5pc2dyYXBoPC9yZWZlbnRyeXRpdGxlPgor ICAgICAgICA8bWFudm9sbnVtPjM8L21hbnZvbG51bT48L2NpdGVyZWZlbnRyeT4gYW5kCisgICAg ICAgIDxjaXRlcmVmZW50cnk+PHJlZmVudHJ5dGl0bGU+aXNibGFuazwvcmVmZW50cnl0aXRsZT4K KyAgICAgICAgPG1hbnZvbG51bT4zPC9tYW52b2xudW0+PC9jaXRlcmVmZW50cnk+LjwvcGFyYT48 L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAgIDx2YXJsaXN0ZW50cnkg aWQ9InRocmVhZC5wcm9mLmFjdGl2ZSI+CisgICAgICAgIDx0ZXJtPgorICAgICAgICAgIDxtYWxs Y3RsPnRocmVhZC5wcm9mLmFjdGl2ZTwvbWFsbGN0bD4KKyAgICAgICAgICAoPHR5cGU+Ym9vbDwv dHlwZT4pCisgICAgICAgICAgPGxpdGVyYWw+cnc8L2xpdGVyYWw+CisgICAgICAgICAgWzxvcHRp b24+LS1lbmFibGUtcHJvZjwvb3B0aW9uPl0KKyAgICAgICAgPC90ZXJtPgorICAgICAgICA8bGlz dGl0ZW0+PHBhcmE+Q29udHJvbCB3aGV0aGVyIHNhbXBsaW5nIGlzIGN1cnJlbnRseSBhY3RpdmUg Zm9yIHRoZQorICAgICAgICBjYWxsaW5nIHRocmVhZC4gIFRoaXMgaXMgYW4gYWN0aXZhdGlvbiBt ZWNoYW5pc20gaW4gYWRkaXRpb24gdG8gPGxpbmsKKyAgICAgICAgbGlua2VuZD0icHJvZi5hY3Rp dmUiPjxtYWxsY3RsPnByb2YuYWN0aXZlPC9tYWxsY3RsPjwvbGluaz47IGJvdGggbXVzdAorICAg ICAgICBiZSBhY3RpdmUgZm9yIHRoZSBjYWxsaW5nIHRocmVhZCB0byBzYW1wbGUuICBUaGlzIGZs YWcgaXMgZW5hYmxlZCBieQorICAgICAgICBkZWZhdWx0LjwvcGFyYT48L2xpc3RpdGVtPgorICAg ICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9InRocmVhZC5pZGxl Ij4KKyAgICAgICAgPHRlcm0+CisgICAgICAgICAgPG1hbGxjdGw+dGhyZWFkLmlkbGU8L21hbGxj dGw+CisgICAgICAgICAgKDx0eXBlPnZvaWQ8L3R5cGU+KQorICAgICAgICAgIDxsaXRlcmFsPi0t PC9saXRlcmFsPgorICAgICAgICA8L3Rlcm0+CisgICAgICAgIDxsaXN0aXRlbT48cGFyYT5IaW50 cyB0byBqZW1hbGxvYyB0aGF0IHRoZSBjYWxsaW5nIHRocmVhZCB3aWxsIGJlIGlkbGUKKwlmb3Ig c29tZSBub250cml2aWFsIHBlcmlvZCBvZiB0aW1lIChzYXksIG9uIHRoZSBvcmRlciBvZiBzZWNv bmRzKSwgYW5kCisJdGhhdCBkb2luZyBzb21lIGNsZWFudXAgb3BlcmF0aW9ucyBtYXkgYmUgYmVu ZWZpY2lhbC4gIFRoZXJlIGFyZSBubworCWd1YXJhbnRlZXMgYXMgdG8gd2hhdCBzcGVjaWZpYyBv cGVyYXRpb25zIHdpbGwgYmUgcGVyZm9ybWVkOyBjdXJyZW50bHkKKwl0aGlzIGZsdXNoZXMgdGhl IGNhbGxlcidzIHRjYWNoZSBhbmQgbWF5IChhY2NvcmRpbmcgdG8gc29tZSBoZXVyaXN0aWMpCisJ cHVyZ2UgaXRzIGFzc29jaWF0ZWQgYXJlbmEuPC9wYXJhPgorCTxwYXJhPlRoaXMgaXMgbm90IGlu dGVuZGVkIHRvIGJlIGEgZ2VuZXJhbC1wdXJwb3NlIGJhY2tncm91bmQgYWN0aXZpdHkKKwltZWNo YW5pc20sIGFuZCB0aHJlYWRzIHNob3VsZCBub3Qgd2FrZSB1cCBtdWx0aXBsZSB0aW1lcyBzb2xl bHkgdG8gY2FsbAorCWl0LiAgUmF0aGVyLCBhIHRocmVhZCB3YWl0aW5nIGZvciBhIHRhc2sgc2hv dWxkIGRvIGEgdGltZWQgd2FpdCBmaXJzdCwKKwljYWxsIDxsaW5rIGxpbmtlbmQ9InRocmVhZC5p ZGxlIj48bWFsbGN0bD50aHJlYWQuaWRsZTwvbWFsbGN0bD48L2xpbms+CisJaWYgbm8gdGFzayBh cHBlYXJzIGluIHRoZSB0aW1lb3V0IGludGVydmFsLCBhbmQgdGhlbiBkbyBhbiB1bnRpbWVkIHdh aXQuCisJRm9yIHN1Y2ggYSBiYWNrZ3JvdW5kIGFjdGl2aXR5IG1lY2hhbmlzbSwgc2VlCisJPGxp bmsgbGlua2VuZD0iYmFja2dyb3VuZF90aHJlYWQiPjxtYWxsY3RsPmJhY2tncm91bmRfdGhyZWFk PC9tYWxsY3RsPjwvbGluaz4uCisJPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3Rl bnRyeT4KKworICAgICAgPHZhcmxpc3RlbnRyeSBpZD0idGNhY2hlLmNyZWF0ZSI+CisgICAgICAg IDx0ZXJtPgorICAgICAgICAgIDxtYWxsY3RsPnRjYWNoZS5jcmVhdGU8L21hbGxjdGw+CisgICAg ICAgICAgKDx0eXBlPnVuc2lnbmVkPC90eXBlPikKKyAgICAgICAgICA8bGl0ZXJhbD5yLTwvbGl0 ZXJhbD4KKyAgICAgICAgPC90ZXJtPgorICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Q3JlYXRlIGFu IGV4cGxpY2l0IHRocmVhZC1zcGVjaWZpYyBjYWNoZSAodGNhY2hlKSBhbmQKKyAgICAgICAgcmV0 dXJuIGFuIGlkZW50aWZpZXIgdGhhdCBjYW4gYmUgcGFzc2VkIHRvIHRoZSA8bGluaworICAgICAg ICBsaW5rZW5kPSJNQUxMT0NYX1RDQUNIRSI+PGNvbnN0YW50Pk1BTExPQ1hfVENBQ0hFKDxwYXJh bWV0ZXI+dGM8L3BhcmFtZXRlcj4pPC9jb25zdGFudD48L2xpbms+CisgICAgICAgIG1hY3JvIHRv IGV4cGxpY2l0bHkgdXNlIHRoZSBzcGVjaWZpZWQgY2FjaGUgcmF0aGVyIHRoYW4gdGhlCisgICAg ICAgIGF1dG9tYXRpY2FsbHkgbWFuYWdlZCBvbmUgdGhhdCBpcyB1c2VkIGJ5IGRlZmF1bHQuICBF YWNoIGV4cGxpY2l0IGNhY2hlCisgICAgICAgIGNhbiBiZSB1c2VkIGJ5IG9ubHkgb25lIHRocmVh ZCBhdCBhIHRpbWU7IHRoZSBhcHBsaWNhdGlvbiBtdXN0IGFzc3VyZQorICAgICAgICB0aGF0IHRo aXMgY29uc3RyYWludCBob2xkcy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPklm IHRoZSBhbW91bnQgb2Ygc3BhY2Ugc3VwcGxpZWQgZm9yIHN0b3JpbmcgdGhlIHRocmVhZC1zcGVj aWZpYworICAgICAgICBjYWNoZSBpZGVudGlmaWVyIGRvZXMgbm90IGVxdWFsCisgICAgICAgIDxj b2RlIGxhbmd1YWdlPSJDIj5zaXplb2YoPHR5cGU+dW5zaWduZWQ8L3R5cGU+KTwvY29kZT4sIG5v CisgICAgICAgIHRocmVhZC1zcGVjaWZpYyBjYWNoZSB3aWxsIGJlIGNyZWF0ZWQsIG5vIGRhdGEg d2lsbCBiZSB3cml0dGVuIHRvIHRoZQorICAgICAgICBzcGFjZSBwb2ludGVkIGJ5IDxwYXJhbWV0 ZXI+b2xkcDwvcGFyYW1ldGVyPiwgYW5kCisgICAgICAgIDxwYXJhbWV0ZXI+Km9sZGxlbnA8L3Bh cmFtZXRlcj4gd2lsbCBiZSBzZXQgdG8gMC4KKyAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisK KyAgICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAgICA8dmFybGlzdGVudHJ5IGlkPSJ0Y2FjaGUu Zmx1c2giPgorICAgICAgICA8dGVybT4KKyAgICAgICAgICA8bWFsbGN0bD50Y2FjaGUuZmx1c2g8 L21hbGxjdGw+CisgICAgICAgICAgKDx0eXBlPnVuc2lnbmVkPC90eXBlPikKKyAgICAgICAgICA8 bGl0ZXJhbD4tdzwvbGl0ZXJhbD4KKyAgICAgICAgPC90ZXJtPgorICAgICAgICA8bGlzdGl0ZW0+ PHBhcmE+Rmx1c2ggdGhlIHNwZWNpZmllZCB0aHJlYWQtc3BlY2lmaWMgY2FjaGUgKHRjYWNoZSku ICBUaGUKKyAgICAgICAgc2FtZSBjb25zaWRlcmF0aW9ucyBhcHBseSB0byB0aGlzIGludGVyZmFj ZSBhcyB0byA8bGluaworICAgICAgICBsaW5rZW5kPSJ0aHJlYWQudGNhY2hlLmZsdXNoIj48bWFs bGN0bD50aHJlYWQudGNhY2hlLmZsdXNoPC9tYWxsY3RsPjwvbGluaz4sCisgICAgICAgIGV4Y2Vw dCB0aGF0IHRoZSB0Y2FjaGUgd2lsbCBuZXZlciBiZSBhdXRvbWF0aWNhbGx5IGRpc2NhcmRlZC4K KyAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAg ICAgPHZhcmxpc3RlbnRyeSBpZD0idGNhY2hlLmRlc3Ryb3kiPgorICAgICAgICA8dGVybT4KKyAg ICAgICAgICA8bWFsbGN0bD50Y2FjaGUuZGVzdHJveTwvbWFsbGN0bD4KKyAgICAgICAgICAoPHR5 cGU+dW5zaWduZWQ8L3R5cGU+KQorICAgICAgICAgIDxsaXRlcmFsPi13PC9saXRlcmFsPgorICAg ICAgICA8L3Rlcm0+CisgICAgICAgIDxsaXN0aXRlbT48cGFyYT5GbHVzaCB0aGUgc3BlY2lmaWVk IHRocmVhZC1zcGVjaWZpYyBjYWNoZSAodGNhY2hlKSBhbmQKKyAgICAgICAgbWFrZSB0aGUgaWRl bnRpZmllciBhdmFpbGFibGUgZm9yIHVzZSBkdXJpbmcgYSBmdXR1cmUgdGNhY2hlIGNyZWF0aW9u LgorICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorCisg ICAgICA8dmFybGlzdGVudHJ5IGlkPSJhcmVuYS5pLmluaXRpYWxpemVkIj4KKyAgICAgICAgPHRl cm0+CisgICAgICAgICAgPG1hbGxjdGw+YXJlbmEuJmx0O2kmZ3Q7LmluaXRpYWxpemVkPC9tYWxs Y3RsPgorICAgICAgICAgICg8dHlwZT5ib29sPC90eXBlPikKKyAgICAgICAgICA8bGl0ZXJhbD5y LTwvbGl0ZXJhbD4KKyAgICAgICAgPC90ZXJtPgorICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+R2V0 IHdoZXRoZXIgdGhlIHNwZWNpZmllZCBhcmVuYSdzIHN0YXRpc3RpY3MgYXJlCisgICAgICAgIGlu aXRpYWxpemVkIChpLmUuIHRoZSBhcmVuYSB3YXMgaW5pdGlhbGl6ZWQgcHJpb3IgdG8gdGhlIGN1 cnJlbnQgZXBvY2gpLgorICAgICAgICBUaGlzIGludGVyZmFjZSBjYW4gYWxzbyBiZSBub21pbmFs bHkgdXNlZCB0byBxdWVyeSB3aGV0aGVyIHRoZSBtZXJnZWQKKyAgICAgICAgc3RhdGlzdGljcyBj b3JyZXNwb25kaW5nIHRvIDxjb25zdGFudD5NQUxMQ1RMX0FSRU5BU19BTEw8L2NvbnN0YW50PiBh cmUKKyAgICAgICAgaW5pdGlhbGl6ZWQgKGFsd2F5cyB0cnVlKS48L3BhcmE+PC9saXN0aXRlbT4K KyAgICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAgICA8dmFybGlzdGVudHJ5IGlkPSJhcmVuYS5p LmRlY2F5Ij4KKyAgICAgICAgPHRlcm0+CisgICAgICAgICAgPG1hbGxjdGw+YXJlbmEuJmx0O2km Z3Q7LmRlY2F5PC9tYWxsY3RsPgorICAgICAgICAgICg8dHlwZT52b2lkPC90eXBlPikKKyAgICAg ICAgICA8bGl0ZXJhbD4tLTwvbGl0ZXJhbD4KKyAgICAgICAgPC90ZXJtPgorICAgICAgICA8bGlz dGl0ZW0+PHBhcmE+VHJpZ2dlciBkZWNheS1iYXNlZCBwdXJnaW5nIG9mIHVudXNlZCBkaXJ0eS9t dXp6eSBwYWdlcworICAgICAgICBmb3IgYXJlbmEgJmx0O2kmZ3Q7LCBvciBmb3IgYWxsIGFyZW5h cyBpZiAmbHQ7aSZndDsgZXF1YWxzCisgICAgICAgIDxjb25zdGFudD5NQUxMQ1RMX0FSRU5BU19B TEw8L2NvbnN0YW50Pi4gIFRoZSBwcm9wb3J0aW9uIG9mIHVudXNlZAorICAgICAgICBkaXJ0eS9t dXp6eSBwYWdlcyB0byBiZSBwdXJnZWQgZGVwZW5kcyBvbiB0aGUgY3VycmVudCB0aW1lOyBzZWUg PGxpbmsKKyAgICAgICAgbGlua2VuZD0ib3B0LmRpcnR5X2RlY2F5X21zIj48bWFsbGN0bD5vcHQu ZGlydHlfZGVjYXlfbXM8L21hbGxjdGw+PC9saW5rPgorICAgICAgICBhbmQgPGxpbmsKKyAgICAg ICAgbGlua2VuZD0ib3B0Lm11enp5X2RlY2F5X21zIj48bWFsbGN0bD5vcHQubXV6eV9kZWNheV9t czwvbWFsbGN0bD48L2xpbms+CisgICAgICAgIGZvciBkZXRhaWxzLjwvcGFyYT48L2xpc3RpdGVt PgorICAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9ImFyZW5h LmkucHVyZ2UiPgorICAgICAgICA8dGVybT4KKyAgICAgICAgICA8bWFsbGN0bD5hcmVuYS4mbHQ7 aSZndDsucHVyZ2U8L21hbGxjdGw+CisgICAgICAgICAgKDx0eXBlPnZvaWQ8L3R5cGU+KQorICAg ICAgICAgIDxsaXRlcmFsPi0tPC9saXRlcmFsPgorICAgICAgICA8L3Rlcm0+CisgICAgICAgIDxs aXN0aXRlbT48cGFyYT5QdXJnZSBhbGwgdW51c2VkIGRpcnR5IHBhZ2VzIGZvciBhcmVuYSAmbHQ7 aSZndDssIG9yIGZvcgorICAgICAgICBhbGwgYXJlbmFzIGlmICZsdDtpJmd0OyBlcXVhbHMgPGNv bnN0YW50Pk1BTExDVExfQVJFTkFTX0FMTDwvY29uc3RhbnQ+LgorICAgICAgICA8L3BhcmE+PC9s aXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAgICA8dmFybGlzdGVudHJ5IGlk PSJhcmVuYS5pLnJlc2V0Ij4KKyAgICAgICAgPHRlcm0+CisgICAgICAgICAgPG1hbGxjdGw+YXJl bmEuJmx0O2kmZ3Q7LnJlc2V0PC9tYWxsY3RsPgorICAgICAgICAgICg8dHlwZT52b2lkPC90eXBl PikKKyAgICAgICAgICA8bGl0ZXJhbD4tLTwvbGl0ZXJhbD4KKyAgICAgICAgPC90ZXJtPgorICAg ICAgICA8bGlzdGl0ZW0+PHBhcmE+RGlzY2FyZCBhbGwgb2YgdGhlIGFyZW5hJ3MgZXh0YW50IGFs bG9jYXRpb25zLiAgVGhpcworICAgICAgICBpbnRlcmZhY2UgY2FuIG9ubHkgYmUgdXNlZCB3aXRo IGFyZW5hcyBleHBsaWNpdGx5IGNyZWF0ZWQgdmlhIDxsaW5rCisgICAgICAgIGxpbmtlbmQ9ImFy ZW5hcy5jcmVhdGUiPjxtYWxsY3RsPmFyZW5hcy5jcmVhdGU8L21hbGxjdGw+PC9saW5rPi4gIE5v bmUKKyAgICAgICAgb2YgdGhlIGFyZW5hJ3MgZGlzY2FyZGVkL2NhY2hlZCBhbGxvY2F0aW9ucyBt YXkgYWNjZXNzZWQgYWZ0ZXJ3YXJkLiAgQXMKKyAgICAgICAgcGFydCBvZiB0aGlzIHJlcXVpcmVt ZW50LCBhbGwgdGhyZWFkIGNhY2hlcyB3aGljaCB3ZXJlIHVzZWQgdG8KKyAgICAgICAgYWxsb2Nh dGUvZGVhbGxvY2F0ZSBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBhcmVuYSBtdXN0IGJlIGZsdXNo ZWQKKyAgICAgICAgYmVmb3JlaGFuZC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlz dGVudHJ5PgorCisgICAgICA8dmFybGlzdGVudHJ5IGlkPSJhcmVuYS5pLmRlc3Ryb3kiPgorICAg ICAgICA8dGVybT4KKyAgICAgICAgICA8bWFsbGN0bD5hcmVuYS4mbHQ7aSZndDsuZGVzdHJveTwv bWFsbGN0bD4KKyAgICAgICAgICAoPHR5cGU+dm9pZDwvdHlwZT4pCisgICAgICAgICAgPGxpdGVy YWw+LS08L2xpdGVyYWw+CisgICAgICAgIDwvdGVybT4KKyAgICAgICAgPGxpc3RpdGVtPjxwYXJh PkRlc3Ryb3kgdGhlIGFyZW5hLiAgRGlzY2FyZCBhbGwgb2YgdGhlIGFyZW5hJ3MgZXh0YW50Cisg ICAgICAgIGFsbG9jYXRpb25zIHVzaW5nIHRoZSBzYW1lIG1lY2hhbmlzbSBhcyBmb3IgPGxpbmsK KyAgICAgICAgbGlua2VuZD0iYXJlbmEuaS5yZXNldCI+PG1hbGxjdGw+YXJlbmEuJmx0O2kmZ3Q7 LnJlc2V0PC9tYWxsY3RsPjwvbGluaz4KKyAgICAgICAgKHdpdGggYWxsIHRoZSBzYW1lIGNvbnN0 cmFpbnRzIGFuZCBzaWRlIGVmZmVjdHMpLCBtZXJnZSB0aGUgYXJlbmEgc3RhdHMKKyAgICAgICAg aW50byB0aG9zZSBhY2Nlc3NpYmxlIGF0IGFyZW5hIGluZGV4CisgICAgICAgIDxjb25zdGFudD5N QUxMQ1RMX0FSRU5BU19ERVNUUk9ZRUQ8L2NvbnN0YW50PiwgYW5kIHRoZW4gY29tcGxldGVseQor ICAgICAgICBkaXNjYXJkIGFsbCBtZXRhZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhlIGFyZW5hLiAg RnV0dXJlIGNhbGxzIHRvIDxsaW5rCisgICAgICAgIGxpbmtlbmQ9ImFyZW5hcy5jcmVhdGUiPjxt YWxsY3RsPmFyZW5hcy5jcmVhdGU8L21hbGxjdGw+PC9saW5rPiBtYXkKKyAgICAgICAgcmVjeWNs ZSB0aGUgYXJlbmEgaW5kZXguICBEZXN0cnVjdGlvbiB3aWxsIGZhaWwgaWYgYW55IHRocmVhZHMg YXJlCisgICAgICAgIGN1cnJlbnRseSBhc3NvY2lhdGVkIHdpdGggdGhlIGFyZW5hIGFzIGEgcmVz dWx0IG9mIGNhbGxzIHRvIDxsaW5rCisgICAgICAgIGxpbmtlbmQ9InRocmVhZC5hcmVuYSI+PG1h bGxjdGw+dGhyZWFkLmFyZW5hPC9tYWxsY3RsPjwvbGluaz4uPC9wYXJhPjwvbGlzdGl0ZW0+Cisg ICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgICAgPHZhcmxpc3RlbnRyeSBpZD0iYXJlbmEuaS5k c3MiPgorICAgICAgICA8dGVybT4KKyAgICAgICAgICA8bWFsbGN0bD5hcmVuYS4mbHQ7aSZndDsu ZHNzPC9tYWxsY3RsPgorICAgICAgICAgICg8dHlwZT5jb25zdCBjaGFyICo8L3R5cGU+KQorICAg ICAgICAgIDxsaXRlcmFsPnJ3PC9saXRlcmFsPgorICAgICAgICA8L3Rlcm0+CisgICAgICAgIDxs aXN0aXRlbT48cGFyYT5TZXQgdGhlIHByZWNlZGVuY2Ugb2YgZHNzIGFsbG9jYXRpb24gYXMgcmVs YXRlZCB0byBtbWFwCisgICAgICAgIGFsbG9jYXRpb24gZm9yIGFyZW5hICZsdDtpJmd0Oywgb3Ig Zm9yIGFsbCBhcmVuYXMgaWYgJmx0O2kmZ3Q7IGVxdWFscworICAgICAgICA8Y29uc3RhbnQ+TUFM TENUTF9BUkVOQVNfQUxMPC9jb25zdGFudD4uICBTZWUgPGxpbmsKKyAgICAgICAgbGlua2VuZD0i b3B0LmRzcyI+PG1hbGxjdGw+b3B0LmRzczwvbWFsbGN0bD48L2xpbms+IGZvciBzdXBwb3J0ZWQK KyAgICAgICAgc2V0dGluZ3MuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRy eT4KKworICAgICAgPHZhcmxpc3RlbnRyeSBpZD0iYXJlbmEuaS5kaXJ0eV9kZWNheV9tcyI+Cisg ICAgICAgIDx0ZXJtPgorICAgICAgICAgIDxtYWxsY3RsPmFyZW5hLiZsdDtpJmd0Oy5kaXJ0eV9k ZWNheV9tczwvbWFsbGN0bD4KKyAgICAgICAgICAoPHR5cGU+c3NpemVfdDwvdHlwZT4pCisgICAg ICAgICAgPGxpdGVyYWw+cnc8L2xpdGVyYWw+CisgICAgICAgIDwvdGVybT4KKyAgICAgICAgPGxp c3RpdGVtPjxwYXJhPkN1cnJlbnQgcGVyLWFyZW5hIGFwcHJveGltYXRlIHRpbWUgaW4gbWlsbGlz ZWNvbmRzIGZyb20KKyAgICAgICAgdGhlIGNyZWF0aW9uIG9mIGEgc2V0IG9mIHVudXNlZCBkaXJ0 eSBwYWdlcyB1bnRpbCBhbiBlcXVpdmFsZW50IHNldCBvZgorICAgICAgICB1bnVzZWQgZGlydHkg cGFnZXMgaXMgcHVyZ2VkIGFuZC9vciByZXVzZWQuICBFYWNoIHRpbWUgdGhpcyBpbnRlcmZhY2Ug aXMKKyAgICAgICAgc2V0LCBhbGwgY3VycmVudGx5IHVudXNlZCBkaXJ0eSBwYWdlcyBhcmUgY29u c2lkZXJlZCB0byBoYXZlIGZ1bGx5CisgICAgICAgIGRlY2F5ZWQsIHdoaWNoIGNhdXNlcyBpbW1l ZGlhdGUgcHVyZ2luZyBvZiBhbGwgdW51c2VkIGRpcnR5IHBhZ2VzIHVubGVzcworICAgICAgICB0 aGUgZGVjYXkgdGltZSBpcyBzZXQgdG8gLTEgKGkuZS4gcHVyZ2luZyBkaXNhYmxlZCkuICBTZWUg PGxpbmsKKyAgICAgICAgbGlua2VuZD0ib3B0LmRpcnR5X2RlY2F5X21zIj48bWFsbGN0bD5vcHQu ZGlydHlfZGVjYXlfbXM8L21hbGxjdGw+PC9saW5rPgorICAgICAgICBmb3IgYWRkaXRpb25hbCBp bmZvcm1hdGlvbi48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorCisg ICAgICA8dmFybGlzdGVudHJ5IGlkPSJhcmVuYS5pLm11enp5X2RlY2F5X21zIj4KKyAgICAgICAg PHRlcm0+CisgICAgICAgICAgPG1hbGxjdGw+YXJlbmEuJmx0O2kmZ3Q7Lm11enp5X2RlY2F5X21z PC9tYWxsY3RsPgorICAgICAgICAgICg8dHlwZT5zc2l6ZV90PC90eXBlPikKKyAgICAgICAgICA8 bGl0ZXJhbD5ydzwvbGl0ZXJhbD4KKyAgICAgICAgPC90ZXJtPgorICAgICAgICA8bGlzdGl0ZW0+ PHBhcmE+Q3VycmVudCBwZXItYXJlbmEgYXBwcm94aW1hdGUgdGltZSBpbiBtaWxsaXNlY29uZHMg ZnJvbQorICAgICAgICB0aGUgY3JlYXRpb24gb2YgYSBzZXQgb2YgdW51c2VkIG11enp5IHBhZ2Vz IHVudGlsIGFuIGVxdWl2YWxlbnQgc2V0IG9mCisgICAgICAgIHVudXNlZCBtdXp6eSBwYWdlcyBp cyBwdXJnZWQgYW5kL29yIHJldXNlZC4gIEVhY2ggdGltZSB0aGlzIGludGVyZmFjZSBpcworICAg ICAgICBzZXQsIGFsbCBjdXJyZW50bHkgdW51c2VkIG11enp5IHBhZ2VzIGFyZSBjb25zaWRlcmVk IHRvIGhhdmUgZnVsbHkKKyAgICAgICAgZGVjYXllZCwgd2hpY2ggY2F1c2VzIGltbWVkaWF0ZSBw dXJnaW5nIG9mIGFsbCB1bnVzZWQgbXV6enkgcGFnZXMgdW5sZXNzCisgICAgICAgIHRoZSBkZWNh eSB0aW1lIGlzIHNldCB0byAtMSAoaS5lLiBwdXJnaW5nIGRpc2FibGVkKS4gIFNlZSA8bGluawor ICAgICAgICBsaW5rZW5kPSJvcHQubXV6enlfZGVjYXlfbXMiPjxtYWxsY3RsPm9wdC5tdXp6eV9k ZWNheV9tczwvbWFsbGN0bD48L2xpbms+CisgICAgICAgIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0 aW9uLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAgIDx2 YXJsaXN0ZW50cnkgaWQ9ImFyZW5hLmkucmV0YWluX2dyb3dfbGltaXQiPgorICAgICAgICA8dGVy bT4KKyAgICAgICAgICA8bWFsbGN0bD5hcmVuYS4mbHQ7aSZndDsucmV0YWluX2dyb3dfbGltaXQ8 L21hbGxjdGw+CisgICAgICAgICAgKDx0eXBlPnNpemVfdDwvdHlwZT4pCisgICAgICAgICAgPGxp dGVyYWw+cnc8L2xpdGVyYWw+CisgICAgICAgIDwvdGVybT4KKyAgICAgICAgPGxpc3RpdGVtPjxw YXJhPk1heGltdW0gc2l6ZSB0byBncm93IHJldGFpbmVkIHJlZ2lvbiAob25seSByZWxldmFudCB3 aGVuCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9Im9wdC5yZXRhaW4iPjxtYWxsY3RsPm9wdC5yZXRh aW48L21hbGxjdGw+PC9saW5rPiBpcworICAgICAgICBlbmFibGVkKS4gIFRoaXMgY29udHJvbHMg dGhlIG1heGltdW0gaW5jcmVtZW50IHRvIGV4cGFuZCB2aXJ0dWFsIG1lbW9yeSwKKyAgICAgICAg b3IgYWxsb2NhdGlvbiB0aHJvdWdoIDxsaW5rCisgICAgICAgIGxpbmtlbmQ9ImFyZW5hLmkuZXh0 ZW50X2hvb2tzIj48bWFsbGN0bD5hcmVuYS4mbHQ7aSZndDtleHRlbnRfaG9va3M8L21hbGxjdGw+ PC9saW5rPi4KKyAgICAgICAgSW4gcGFydGljdWxhciwgaWYgY3VzdG9taXplZCBleHRlbnQgaG9v a3MgcmVzZXJ2ZSBwaHlzaWNhbCBtZW1vcnkKKyAgICAgICAgKGUuZy4gMUcgaHVnZSBwYWdlcyks IHRoaXMgaXMgdXNlZnVsIHRvIGNvbnRyb2wgdGhlIGFsbG9jYXRpb24gaG9vaydzCisgICAgICAg IGlucHV0IHNpemUuICBUaGUgZGVmYXVsdCBpcyBubyBsaW1pdC48L3BhcmE+PC9saXN0aXRlbT4K KyAgICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAgICA8dmFybGlzdGVudHJ5IGlkPSJhcmVuYS5p LmV4dGVudF9ob29rcyI+CisgICAgICAgIDx0ZXJtPgorICAgICAgICAgIDxtYWxsY3RsPmFyZW5h LiZsdDtpJmd0Oy5leHRlbnRfaG9va3M8L21hbGxjdGw+CisgICAgICAgICAgKDx0eXBlPmV4dGVu dF9ob29rc190ICo8L3R5cGU+KQorICAgICAgICAgIDxsaXRlcmFsPnJ3PC9saXRlcmFsPgorICAg ICAgICA8L3Rlcm0+CisgICAgICAgIDxsaXN0aXRlbT48cGFyYT5HZXQgb3Igc2V0IHRoZSBleHRl bnQgbWFuYWdlbWVudCBob29rIGZ1bmN0aW9ucyBmb3IKKyAgICAgICAgYXJlbmEgJmx0O2kmZ3Q7 LiAgVGhlIGZ1bmN0aW9ucyBtdXN0IGJlIGNhcGFibGUgb2Ygb3BlcmF0aW5nIG9uIGFsbAorICAg ICAgICBleHRhbnQgZXh0ZW50cyBhc3NvY2lhdGVkIHdpdGggYXJlbmEgJmx0O2kmZ3Q7LCB1c3Vh bGx5IGJ5IHBhc3NpbmcKKyAgICAgICAgdW5rbm93biBleHRlbnRzIHRvIHRoZSByZXBsYWNlZCBm dW5jdGlvbnMuICBJbiBwcmFjdGljZSwgaXQgaXMgZmVhc2libGUKKyAgICAgICAgdG8gY29udHJv bCBhbGxvY2F0aW9uIGZvciBhcmVuYXMgZXhwbGljaXRseSBjcmVhdGVkIHZpYSA8bGluaworICAg ICAgICBsaW5rZW5kPSJhcmVuYXMuY3JlYXRlIj48bWFsbGN0bD5hcmVuYXMuY3JlYXRlPC9tYWxs Y3RsPjwvbGluaz4gc3VjaAorICAgICAgICB0aGF0IGFsbCBleHRlbnRzIG9yaWdpbmF0ZSBmcm9t IGFuIGFwcGxpY2F0aW9uLXN1cHBsaWVkIGV4dGVudCBhbGxvY2F0b3IKKyAgICAgICAgKGJ5IHNw ZWNpZnlpbmcgdGhlIGN1c3RvbSBleHRlbnQgaG9vayBmdW5jdGlvbnMgZHVyaW5nIGFyZW5hIGNy ZWF0aW9uKS4KKyAgICAgICAgSG93ZXZlciwgdGhlIEFQSSBndWFyYW50ZWVzIGZvciB0aGUgYXV0 b21hdGljYWxseSBjcmVhdGVkIGFyZW5hcyBtYXkgYmUKKyAgICAgICAgcmVsYXhlZCAtLSBob29r cyBzZXQgdGhlcmUgbWF5IGJlIGNhbGxlZCBpbiBhICJiZXN0IGVmZm9ydCIgZmFzaGlvbjsgaW4K KyAgICAgICAgYWRkaXRpb24gdGhlcmUgbWF5IGJlIGV4dGVudHMgY3JlYXRlZCBwcmlvciB0byB0 aGUgYXBwbGljYXRpb24gaGF2aW5nIGFuCisgICAgICAgIG9wcG9ydHVuaXR5IHRvIHRha2Ugb3Zl ciBleHRlbnQgYWxsb2NhdGlvbi48L3BhcmE+CisKKyAgICAgICAgPHByb2dyYW1saXN0aW5nIGxh bmd1YWdlPSJDIj48IVtDREFUQVsKK3R5cGVkZWYgZXh0ZW50X2hvb2tzX3MgZXh0ZW50X2hvb2tz X3Q7CitzdHJ1Y3QgZXh0ZW50X2hvb2tzX3MgeworCWV4dGVudF9hbGxvY190CQkqYWxsb2M7CisJ ZXh0ZW50X2RhbGxvY190CQkqZGFsbG9jOworCWV4dGVudF9kZXN0cm95X3QJKmRlc3Ryb3k7CisJ ZXh0ZW50X2NvbW1pdF90CQkqY29tbWl0OworCWV4dGVudF9kZWNvbW1pdF90CSpkZWNvbW1pdDsK KwlleHRlbnRfcHVyZ2VfdAkJKnB1cmdlX2xhenk7CisJZXh0ZW50X3B1cmdlX3QJCSpwdXJnZV9m b3JjZWQ7CisJZXh0ZW50X3NwbGl0X3QJCSpzcGxpdDsKKwlleHRlbnRfbWVyZ2VfdAkJKm1lcmdl OworfTtdXT48L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8cGFyYT5UaGUgPHR5cGU+ZXh0ZW50 X2hvb2tzX3Q8L3R5cGU+IHN0cnVjdHVyZSBjb21wcmlzZXMgZnVuY3Rpb24KKyAgICAgICAgcG9p bnRlcnMgd2hpY2ggYXJlIGRlc2NyaWJlZCBpbmRpdmlkdWFsbHkgYmVsb3cuICBqZW1hbGxvYyB1 c2VzIHRoZXNlCisgICAgICAgIGZ1bmN0aW9ucyB0byBtYW5hZ2UgZXh0ZW50IGxpZmV0aW1lLCB3 aGljaCBzdGFydHMgb2ZmIHdpdGggYWxsb2NhdGlvbiBvZgorICAgICAgICBtYXBwZWQgY29tbWl0 dGVkIG1lbW9yeSwgaW4gdGhlIHNpbXBsZXN0IGNhc2UgZm9sbG93ZWQgYnkgZGVhbGxvY2F0aW9u LgorICAgICAgICBIb3dldmVyLCB0aGVyZSBhcmUgcGVyZm9ybWFuY2UgYW5kIHBsYXRmb3JtIHJl YXNvbnMgdG8gcmV0YWluIGV4dGVudHMKKyAgICAgICAgZm9yIGxhdGVyIHJldXNlLiAgQ2xlYW51 cCBhdHRlbXB0cyBjYXNjYWRlIGZyb20gZGVhbGxvY2F0aW9uIHRvIGRlY29tbWl0CisgICAgICAg IHRvIGZvcmNlZCBwdXJnaW5nIHRvIGxhenkgcHVyZ2luZywgd2hpY2ggZ2l2ZXMgdGhlIGV4dGVu dCBtYW5hZ2VtZW50CisgICAgICAgIGZ1bmN0aW9ucyBvcHBvcnR1bml0aWVzIHRvIHJlamVjdCB0 aGUgbW9zdCBwZXJtYW5lbnQgY2xlYW51cCBvcGVyYXRpb25zCisgICAgICAgIGluIGZhdm9yIG9m IGxlc3MgcGVybWFuZW50IChhbmQgb2Z0ZW4gbGVzcyBjb3N0bHkpIG9wZXJhdGlvbnMuICBBbGwK KyAgICAgICAgb3BlcmF0aW9ucyBleGNlcHQgYWxsb2NhdGlvbiBjYW4gYmUgdW5pdmVyc2FsbHkg b3B0ZWQgb3V0IG9mIGJ5IHNldHRpbmcKKyAgICAgICAgdGhlIGhvb2sgcG9pbnRlcnMgdG8gPGNv bnN0YW50Pk5VTEw8L2NvbnN0YW50Piwgb3Igc2VsZWN0aXZlbHkgb3B0ZWQgb3V0CisgICAgICAg IG9mIGJ5IHJldHVybmluZyBmYWlsdXJlLiAgTm90ZSB0aGF0IG9uY2UgdGhlIGV4dGVudCBob29r IGlzIHNldCwgdGhlCisgICAgICAgIHN0cnVjdHVyZSBpcyBhY2Nlc3NlZCBkaXJlY3RseSBieSB0 aGUgYXNzb2NpYXRlZCBhcmVuYXMsIHNvIGl0IG11c3QKKyAgICAgICAgcmVtYWluIHZhbGlkIGZv ciB0aGUgZW50aXJlIGxpZmV0aW1lIG9mIHRoZSBhcmVuYXMuPC9wYXJhPgorCisgICAgICAgIDxm dW5jc3lub3BzaXM+PGZ1bmNwcm90b3R5cGU+CisgICAgICAgICAgPGZ1bmNkZWY+dHlwZWRlZiB2 b2lkICo8ZnVuY3Rpb24+KGV4dGVudF9hbGxvY190KTwvZnVuY3Rpb24+PC9mdW5jZGVmPgorICAg ICAgICAgIDxwYXJhbWRlZj5leHRlbnRfaG9va3NfdCAqPHBhcmFtZXRlcj5leHRlbnRfaG9va3M8 L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorICAgICAgICAgIDxwYXJhbWRlZj52b2lkICo8cGFyYW1l dGVyPm5ld19hZGRyPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKyAgICAgICAgICA8cGFyYW1kZWY+ c2l6ZV90IDxwYXJhbWV0ZXI+c2l6ZTwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisgICAgICAgICAg PHBhcmFtZGVmPnNpemVfdCA8cGFyYW1ldGVyPmFsaWdubWVudDwvcGFyYW1ldGVyPjwvcGFyYW1k ZWY+CisgICAgICAgICAgPHBhcmFtZGVmPmJvb2wgKjxwYXJhbWV0ZXI+emVybzwvcGFyYW1ldGVy PjwvcGFyYW1kZWY+CisgICAgICAgICAgPHBhcmFtZGVmPmJvb2wgKjxwYXJhbWV0ZXI+Y29tbWl0 PC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKyAgICAgICAgICA8cGFyYW1kZWY+dW5zaWduZWQgPHBh cmFtZXRlcj5hcmVuYV9pbmQ8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorICAgICAgICA8L2Z1bmNw cm90b3R5cGU+PC9mdW5jc3lub3BzaXM+CisgICAgICAgIDxsaXRlcmFsbGF5b3V0PjwvbGl0ZXJh bGxheW91dD4KKyAgICAgICAgPHBhcmE+QW4gZXh0ZW50IGFsbG9jYXRpb24gZnVuY3Rpb24gY29u Zm9ybXMgdG8gdGhlCisgICAgICAgIDx0eXBlPmV4dGVudF9hbGxvY190PC90eXBlPiB0eXBlIGFu ZCB1cG9uIHN1Y2Nlc3MgcmV0dXJucyBhIHBvaW50ZXIgdG8KKyAgICAgICAgPHBhcmFtZXRlcj5z aXplPC9wYXJhbWV0ZXI+IGJ5dGVzIG9mIG1hcHBlZCBtZW1vcnkgb24gYmVoYWxmIG9mIGFyZW5h CisgICAgICAgIDxwYXJhbWV0ZXI+YXJlbmFfaW5kPC9wYXJhbWV0ZXI+IHN1Y2ggdGhhdCB0aGUg ZXh0ZW50J3MgYmFzZSBhZGRyZXNzIGlzCisgICAgICAgIGEgbXVsdGlwbGUgb2YgPHBhcmFtZXRl cj5hbGlnbm1lbnQ8L3BhcmFtZXRlcj4sIGFzIHdlbGwgYXMgc2V0dGluZworICAgICAgICA8cGFy YW1ldGVyPip6ZXJvPC9wYXJhbWV0ZXI+IHRvIGluZGljYXRlIHdoZXRoZXIgdGhlIGV4dGVudCBp cyB6ZXJvZWQKKyAgICAgICAgYW5kIDxwYXJhbWV0ZXI+KmNvbW1pdDwvcGFyYW1ldGVyPiB0byBp bmRpY2F0ZSB3aGV0aGVyIHRoZSBleHRlbnQgaXMKKyAgICAgICAgY29tbWl0dGVkLiAgVXBvbiBl cnJvciB0aGUgZnVuY3Rpb24gcmV0dXJucyA8Y29uc3RhbnQ+TlVMTDwvY29uc3RhbnQ+CisgICAg ICAgIGFuZCBsZWF2ZXMgPHBhcmFtZXRlcj4qemVybzwvcGFyYW1ldGVyPiBhbmQKKyAgICAgICAg PHBhcmFtZXRlcj4qY29tbWl0PC9wYXJhbWV0ZXI+IHVubW9kaWZpZWQuICBUaGUKKyAgICAgICAg PHBhcmFtZXRlcj5zaXplPC9wYXJhbWV0ZXI+IHBhcmFtZXRlciBpcyBhbHdheXMgYSBtdWx0aXBs ZSBvZiB0aGUgcGFnZQorICAgICAgICBzaXplLiAgVGhlIDxwYXJhbWV0ZXI+YWxpZ25tZW50PC9w YXJhbWV0ZXI+IHBhcmFtZXRlciBpcyBhbHdheXMgYSBwb3dlcgorICAgICAgICBvZiB0d28gYXQg bGVhc3QgYXMgbGFyZ2UgYXMgdGhlIHBhZ2Ugc2l6ZS4gIFplcm9pbmcgaXMgbWFuZGF0b3J5IGlm CisgICAgICAgIDxwYXJhbWV0ZXI+Knplcm88L3BhcmFtZXRlcj4gaXMgdHJ1ZSB1cG9uIGZ1bmN0 aW9uIGVudHJ5LiAgQ29tbWl0dGluZyBpcworICAgICAgICBtYW5kYXRvcnkgaWYgPHBhcmFtZXRl cj4qY29tbWl0PC9wYXJhbWV0ZXI+IGlzIHRydWUgdXBvbiBmdW5jdGlvbiBlbnRyeS4KKyAgICAg ICAgSWYgPHBhcmFtZXRlcj5uZXdfYWRkcjwvcGFyYW1ldGVyPiBpcyBub3QgPGNvbnN0YW50Pk5V TEw8L2NvbnN0YW50PiwgdGhlCisgICAgICAgIHJldHVybmVkIHBvaW50ZXIgbXVzdCBiZSA8cGFy YW1ldGVyPm5ld19hZGRyPC9wYXJhbWV0ZXI+IG9uIHN1Y2Nlc3Mgb3IKKyAgICAgICAgPGNvbnN0 YW50Pk5VTEw8L2NvbnN0YW50PiBvbiBlcnJvci4gIENvbW1pdHRlZCBtZW1vcnkgbWF5IGJlIGNv bW1pdHRlZAorICAgICAgICBpbiBhYnNvbHV0ZSB0ZXJtcyBhcyBvbiBhIHN5c3RlbSB0aGF0IGRv ZXMgbm90IG92ZXJjb21taXQsIG9yIGluCisgICAgICAgIGltcGxpY2l0IHRlcm1zIGFzIG9uIGEg c3lzdGVtIHRoYXQgb3ZlcmNvbW1pdHMgYW5kIHNhdGlzZmllcyBwaHlzaWNhbAorICAgICAgICBt ZW1vcnkgbmVlZHMgb24gZGVtYW5kIHZpYSBzb2Z0IHBhZ2UgZmF1bHRzLiAgTm90ZSB0aGF0IHJl cGxhY2luZyB0aGUKKyAgICAgICAgZGVmYXVsdCBleHRlbnQgYWxsb2NhdGlvbiBmdW5jdGlvbiBt YWtlcyB0aGUgYXJlbmEncyA8bGluaworICAgICAgICBsaW5rZW5kPSJhcmVuYS5pLmRzcyI+PG1h bGxjdGw+YXJlbmEuJmx0O2kmZ3Q7LmRzczwvbWFsbGN0bD48L2xpbms+CisgICAgICAgIHNldHRp bmcgaXJyZWxldmFudC48L3BhcmE+CisKKyAgICAgICAgPGZ1bmNzeW5vcHNpcz48ZnVuY3Byb3Rv dHlwZT4KKyAgICAgICAgICA8ZnVuY2RlZj50eXBlZGVmIGJvb2wgPGZ1bmN0aW9uPihleHRlbnRf ZGFsbG9jX3QpPC9mdW5jdGlvbj48L2Z1bmNkZWY+CisgICAgICAgICAgPHBhcmFtZGVmPmV4dGVu dF9ob29rc190ICo8cGFyYW1ldGVyPmV4dGVudF9ob29rczwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+ CisgICAgICAgICAgPHBhcmFtZGVmPnZvaWQgKjxwYXJhbWV0ZXI+YWRkcjwvcGFyYW1ldGVyPjwv cGFyYW1kZWY+CisgICAgICAgICAgPHBhcmFtZGVmPnNpemVfdCA8cGFyYW1ldGVyPnNpemU8L3Bh cmFtZXRlcj48L3BhcmFtZGVmPgorICAgICAgICAgIDxwYXJhbWRlZj5ib29sIDxwYXJhbWV0ZXI+ Y29tbWl0dGVkPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKyAgICAgICAgICA8cGFyYW1kZWY+dW5z aWduZWQgPHBhcmFtZXRlcj5hcmVuYV9pbmQ8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorICAgICAg ICA8L2Z1bmNwcm90b3R5cGU+PC9mdW5jc3lub3BzaXM+CisgICAgICAgIDxsaXRlcmFsbGF5b3V0 PjwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgPHBhcmE+CisgICAgICAgIEFuIGV4dGVudCBkZWFs bG9jYXRpb24gZnVuY3Rpb24gY29uZm9ybXMgdG8gdGhlCisgICAgICAgIDx0eXBlPmV4dGVudF9k YWxsb2NfdDwvdHlwZT4gdHlwZSBhbmQgZGVhbGxvY2F0ZXMgYW4gZXh0ZW50IGF0IGdpdmVuCisg ICAgICAgIDxwYXJhbWV0ZXI+YWRkcjwvcGFyYW1ldGVyPiBhbmQgPHBhcmFtZXRlcj5zaXplPC9w YXJhbWV0ZXI+IHdpdGgKKyAgICAgICAgPHBhcmFtZXRlcj5jb21taXR0ZWQ8L3BhcmFtZXRlcj4v ZGVjb21taXRlZCBtZW1vcnkgYXMgaW5kaWNhdGVkLCBvbgorICAgICAgICBiZWhhbGYgb2YgYXJl bmEgPHBhcmFtZXRlcj5hcmVuYV9pbmQ8L3BhcmFtZXRlcj4sIHJldHVybmluZyBmYWxzZSB1cG9u CisgICAgICAgIHN1Y2Nlc3MuICBJZiB0aGUgZnVuY3Rpb24gcmV0dXJucyB0cnVlLCB0aGlzIGlu ZGljYXRlcyBvcHQtb3V0IGZyb20KKyAgICAgICAgZGVhbGxvY2F0aW9uOyB0aGUgdmlydHVhbCBt ZW1vcnkgbWFwcGluZyBhc3NvY2lhdGVkIHdpdGggdGhlIGV4dGVudAorICAgICAgICByZW1haW5z IG1hcHBlZCwgaW4gdGhlIHNhbWUgY29tbWl0IHN0YXRlLCBhbmQgYXZhaWxhYmxlIGZvciBmdXR1 cmUgdXNlLAorICAgICAgICBpbiB3aGljaCBjYXNlIGl0IHdpbGwgYmUgYXV0b21hdGljYWxseSBy ZXRhaW5lZCBmb3IgbGF0ZXIgcmV1c2UuPC9wYXJhPgorCisgICAgICAgIDxmdW5jc3lub3BzaXM+ PGZ1bmNwcm90b3R5cGU+CisgICAgICAgICAgPGZ1bmNkZWY+dHlwZWRlZiB2b2lkIDxmdW5jdGlv bj4oZXh0ZW50X2Rlc3Ryb3lfdCk8L2Z1bmN0aW9uPjwvZnVuY2RlZj4KKyAgICAgICAgICA8cGFy YW1kZWY+ZXh0ZW50X2hvb2tzX3QgKjxwYXJhbWV0ZXI+ZXh0ZW50X2hvb2tzPC9wYXJhbWV0ZXI+ PC9wYXJhbWRlZj4KKyAgICAgICAgICA8cGFyYW1kZWY+dm9pZCAqPHBhcmFtZXRlcj5hZGRyPC9w YXJhbWV0ZXI+PC9wYXJhbWRlZj4KKyAgICAgICAgICA8cGFyYW1kZWY+c2l6ZV90IDxwYXJhbWV0 ZXI+c2l6ZTwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisgICAgICAgICAgPHBhcmFtZGVmPmJvb2wg PHBhcmFtZXRlcj5jb21taXR0ZWQ8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorICAgICAgICAgIDxw YXJhbWRlZj51bnNpZ25lZCA8cGFyYW1ldGVyPmFyZW5hX2luZDwvcGFyYW1ldGVyPjwvcGFyYW1k ZWY+CisgICAgICAgIDwvZnVuY3Byb3RvdHlwZT48L2Z1bmNzeW5vcHNpcz4KKyAgICAgICAgPGxp dGVyYWxsYXlvdXQ+PC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8cGFyYT4KKyAgICAgICAgQW4g ZXh0ZW50IGRlc3RydWN0aW9uIGZ1bmN0aW9uIGNvbmZvcm1zIHRvIHRoZQorICAgICAgICA8dHlw ZT5leHRlbnRfZGVzdHJveV90PC90eXBlPiB0eXBlIGFuZCB1bmNvbmRpdGlvbmFsbHkgZGVzdHJv eXMgYW4KKyAgICAgICAgZXh0ZW50IGF0IGdpdmVuIDxwYXJhbWV0ZXI+YWRkcjwvcGFyYW1ldGVy PiBhbmQKKyAgICAgICAgPHBhcmFtZXRlcj5zaXplPC9wYXJhbWV0ZXI+IHdpdGgKKyAgICAgICAg PHBhcmFtZXRlcj5jb21taXR0ZWQ8L3BhcmFtZXRlcj4vZGVjb21taXRlZCBtZW1vcnkgYXMgaW5k aWNhdGVkLCBvbgorICAgICAgICBiZWhhbGYgb2YgYXJlbmEgPHBhcmFtZXRlcj5hcmVuYV9pbmQ8 L3BhcmFtZXRlcj4uICBUaGlzIGZ1bmN0aW9uIG1heSBiZQorICAgICAgICBjYWxsZWQgdG8gZGVz dHJveSByZXRhaW5lZCBleHRlbnRzIGR1cmluZyBhcmVuYSBkZXN0cnVjdGlvbiAoc2VlIDxsaW5r CisgICAgICAgIGxpbmtlbmQ9ImFyZW5hLmkuZGVzdHJveSI+PG1hbGxjdGw+YXJlbmEuJmx0O2km Z3Q7LmRlc3Ryb3k8L21hbGxjdGw+PC9saW5rPikuPC9wYXJhPgorCisgICAgICAgIDxmdW5jc3lu b3BzaXM+PGZ1bmNwcm90b3R5cGU+CisgICAgICAgICAgPGZ1bmNkZWY+dHlwZWRlZiBib29sIDxm dW5jdGlvbj4oZXh0ZW50X2NvbW1pdF90KTwvZnVuY3Rpb24+PC9mdW5jZGVmPgorICAgICAgICAg IDxwYXJhbWRlZj5leHRlbnRfaG9va3NfdCAqPHBhcmFtZXRlcj5leHRlbnRfaG9va3M8L3BhcmFt ZXRlcj48L3BhcmFtZGVmPgorICAgICAgICAgIDxwYXJhbWRlZj52b2lkICo8cGFyYW1ldGVyPmFk ZHI8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorICAgICAgICAgIDxwYXJhbWRlZj5zaXplX3QgPHBh cmFtZXRlcj5zaXplPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKyAgICAgICAgICA8cGFyYW1kZWY+ c2l6ZV90IDxwYXJhbWV0ZXI+b2Zmc2V0PC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKyAgICAgICAg ICA8cGFyYW1kZWY+c2l6ZV90IDxwYXJhbWV0ZXI+bGVuZ3RoPC9wYXJhbWV0ZXI+PC9wYXJhbWRl Zj4KKyAgICAgICAgICA8cGFyYW1kZWY+dW5zaWduZWQgPHBhcmFtZXRlcj5hcmVuYV9pbmQ8L3Bh cmFtZXRlcj48L3BhcmFtZGVmPgorICAgICAgICA8L2Z1bmNwcm90b3R5cGU+PC9mdW5jc3lub3Bz aXM+CisgICAgICAgIDxsaXRlcmFsbGF5b3V0PjwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgPHBh cmE+QW4gZXh0ZW50IGNvbW1pdCBmdW5jdGlvbiBjb25mb3JtcyB0byB0aGUKKyAgICAgICAgPHR5 cGU+ZXh0ZW50X2NvbW1pdF90PC90eXBlPiB0eXBlIGFuZCBjb21taXRzIHplcm9lZCBwaHlzaWNh bCBtZW1vcnkgdG8KKyAgICAgICAgYmFjayBwYWdlcyB3aXRoaW4gYW4gZXh0ZW50IGF0IGdpdmVu IDxwYXJhbWV0ZXI+YWRkcjwvcGFyYW1ldGVyPiBhbmQKKyAgICAgICAgPHBhcmFtZXRlcj5zaXpl PC9wYXJhbWV0ZXI+IGF0IDxwYXJhbWV0ZXI+b2Zmc2V0PC9wYXJhbWV0ZXI+IGJ5dGVzLAorICAg ICAgICBleHRlbmRpbmcgZm9yIDxwYXJhbWV0ZXI+bGVuZ3RoPC9wYXJhbWV0ZXI+IG9uIGJlaGFs ZiBvZiBhcmVuYQorICAgICAgICA8cGFyYW1ldGVyPmFyZW5hX2luZDwvcGFyYW1ldGVyPiwgcmV0 dXJuaW5nIGZhbHNlIHVwb24gc3VjY2Vzcy4KKyAgICAgICAgQ29tbWl0dGVkIG1lbW9yeSBtYXkg YmUgY29tbWl0dGVkIGluIGFic29sdXRlIHRlcm1zIGFzIG9uIGEgc3lzdGVtIHRoYXQKKyAgICAg ICAgZG9lcyBub3Qgb3ZlcmNvbW1pdCwgb3IgaW4gaW1wbGljaXQgdGVybXMgYXMgb24gYSBzeXN0 ZW0gdGhhdAorICAgICAgICBvdmVyY29tbWl0cyBhbmQgc2F0aXNmaWVzIHBoeXNpY2FsIG1lbW9y eSBuZWVkcyBvbiBkZW1hbmQgdmlhIHNvZnQgcGFnZQorICAgICAgICBmYXVsdHMuIElmIHRoZSBm dW5jdGlvbiByZXR1cm5zIHRydWUsIHRoaXMgaW5kaWNhdGVzIGluc3VmZmljaWVudAorICAgICAg ICBwaHlzaWNhbCBtZW1vcnkgdG8gc2F0aXNmeSB0aGUgcmVxdWVzdC48L3BhcmE+CisKKyAgICAg ICAgPGZ1bmNzeW5vcHNpcz48ZnVuY3Byb3RvdHlwZT4KKyAgICAgICAgICA8ZnVuY2RlZj50eXBl ZGVmIGJvb2wgPGZ1bmN0aW9uPihleHRlbnRfZGVjb21taXRfdCk8L2Z1bmN0aW9uPjwvZnVuY2Rl Zj4KKyAgICAgICAgICA8cGFyYW1kZWY+ZXh0ZW50X2hvb2tzX3QgKjxwYXJhbWV0ZXI+ZXh0ZW50 X2hvb2tzPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKyAgICAgICAgICA8cGFyYW1kZWY+dm9pZCAq PHBhcmFtZXRlcj5hZGRyPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKyAgICAgICAgICA8cGFyYW1k ZWY+c2l6ZV90IDxwYXJhbWV0ZXI+c2l6ZTwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisgICAgICAg ICAgPHBhcmFtZGVmPnNpemVfdCA8cGFyYW1ldGVyPm9mZnNldDwvcGFyYW1ldGVyPjwvcGFyYW1k ZWY+CisgICAgICAgICAgPHBhcmFtZGVmPnNpemVfdCA8cGFyYW1ldGVyPmxlbmd0aDwvcGFyYW1l dGVyPjwvcGFyYW1kZWY+CisgICAgICAgICAgPHBhcmFtZGVmPnVuc2lnbmVkIDxwYXJhbWV0ZXI+ YXJlbmFfaW5kPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKyAgICAgICAgPC9mdW5jcHJvdG90eXBl PjwvZnVuY3N5bm9wc2lzPgorICAgICAgICA8bGl0ZXJhbGxheW91dD48L2xpdGVyYWxsYXlvdXQ+ CisgICAgICAgIDxwYXJhPkFuIGV4dGVudCBkZWNvbW1pdCBmdW5jdGlvbiBjb25mb3JtcyB0byB0 aGUKKyAgICAgICAgPHR5cGU+ZXh0ZW50X2RlY29tbWl0X3Q8L3R5cGU+IHR5cGUgYW5kIGRlY29t bWl0cyBhbnkgcGh5c2ljYWwgbWVtb3J5CisgICAgICAgIHRoYXQgaXMgYmFja2luZyBwYWdlcyB3 aXRoaW4gYW4gZXh0ZW50IGF0IGdpdmVuCisgICAgICAgIDxwYXJhbWV0ZXI+YWRkcjwvcGFyYW1l dGVyPiBhbmQgPHBhcmFtZXRlcj5zaXplPC9wYXJhbWV0ZXI+IGF0CisgICAgICAgIDxwYXJhbWV0 ZXI+b2Zmc2V0PC9wYXJhbWV0ZXI+IGJ5dGVzLCBleHRlbmRpbmcgZm9yCisgICAgICAgIDxwYXJh bWV0ZXI+bGVuZ3RoPC9wYXJhbWV0ZXI+IG9uIGJlaGFsZiBvZiBhcmVuYQorICAgICAgICA8cGFy YW1ldGVyPmFyZW5hX2luZDwvcGFyYW1ldGVyPiwgcmV0dXJuaW5nIGZhbHNlIHVwb24gc3VjY2Vz cywgaW4gd2hpY2gKKyAgICAgICAgY2FzZSB0aGUgcGFnZXMgd2lsbCBiZSBjb21taXR0ZWQgdmlh IHRoZSBleHRlbnQgY29tbWl0IGZ1bmN0aW9uIGJlZm9yZQorICAgICAgICBiZWluZyByZXVzZWQu ICBJZiB0aGUgZnVuY3Rpb24gcmV0dXJucyB0cnVlLCB0aGlzIGluZGljYXRlcyBvcHQtb3V0IGZy b20KKyAgICAgICAgZGVjb21taXQ7IHRoZSBtZW1vcnkgcmVtYWlucyBjb21taXR0ZWQgYW5kIGF2 YWlsYWJsZSBmb3IgZnV0dXJlIHVzZSwgaW4KKyAgICAgICAgd2hpY2ggY2FzZSBpdCB3aWxsIGJl IGF1dG9tYXRpY2FsbHkgcmV0YWluZWQgZm9yIGxhdGVyIHJldXNlLjwvcGFyYT4KKworICAgICAg ICA8ZnVuY3N5bm9wc2lzPjxmdW5jcHJvdG90eXBlPgorICAgICAgICAgIDxmdW5jZGVmPnR5cGVk ZWYgYm9vbCA8ZnVuY3Rpb24+KGV4dGVudF9wdXJnZV90KTwvZnVuY3Rpb24+PC9mdW5jZGVmPgor ICAgICAgICAgIDxwYXJhbWRlZj5leHRlbnRfaG9va3NfdCAqPHBhcmFtZXRlcj5leHRlbnRfaG9v a3M8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorICAgICAgICAgIDxwYXJhbWRlZj52b2lkICo8cGFy YW1ldGVyPmFkZHI8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorICAgICAgICAgIDxwYXJhbWRlZj5z aXplX3QgPHBhcmFtZXRlcj5zaXplPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKyAgICAgICAgICA8 cGFyYW1kZWY+c2l6ZV90IDxwYXJhbWV0ZXI+b2Zmc2V0PC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4K KyAgICAgICAgICA8cGFyYW1kZWY+c2l6ZV90IDxwYXJhbWV0ZXI+bGVuZ3RoPC9wYXJhbWV0ZXI+ PC9wYXJhbWRlZj4KKyAgICAgICAgICA8cGFyYW1kZWY+dW5zaWduZWQgPHBhcmFtZXRlcj5hcmVu YV9pbmQ8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorICAgICAgICA8L2Z1bmNwcm90b3R5cGU+PC9m dW5jc3lub3BzaXM+CisgICAgICAgIDxsaXRlcmFsbGF5b3V0PjwvbGl0ZXJhbGxheW91dD4KKyAg ICAgICAgPHBhcmE+QW4gZXh0ZW50IHB1cmdlIGZ1bmN0aW9uIGNvbmZvcm1zIHRvIHRoZQorICAg ICAgICA8dHlwZT5leHRlbnRfcHVyZ2VfdDwvdHlwZT4gdHlwZSBhbmQgZGlzY2FyZHMgcGh5c2lj YWwgcGFnZXMKKyAgICAgICAgd2l0aGluIHRoZSB2aXJ0dWFsIG1lbW9yeSBtYXBwaW5nIGFzc29j aWF0ZWQgd2l0aCBhbiBleHRlbnQgYXQgZ2l2ZW4KKyAgICAgICAgPHBhcmFtZXRlcj5hZGRyPC9w YXJhbWV0ZXI+IGFuZCA8cGFyYW1ldGVyPnNpemU8L3BhcmFtZXRlcj4gYXQKKyAgICAgICAgPHBh cmFtZXRlcj5vZmZzZXQ8L3BhcmFtZXRlcj4gYnl0ZXMsIGV4dGVuZGluZyBmb3IKKyAgICAgICAg PHBhcmFtZXRlcj5sZW5ndGg8L3BhcmFtZXRlcj4gb24gYmVoYWxmIG9mIGFyZW5hCisgICAgICAg IDxwYXJhbWV0ZXI+YXJlbmFfaW5kPC9wYXJhbWV0ZXI+LiAgQSBsYXp5IGV4dGVudCBwdXJnZSBm dW5jdGlvbiAoZS5nLgorICAgICAgICBpbXBsZW1lbnRlZCB2aWEKKyAgICAgICAgPGZ1bmN0aW9u Pm1hZHZpc2UoPHBhcmFtZXRlcj4uLi48L3BhcmFtZXRlcj48cGFyYW1ldGVyPjxjb25zdGFudD5N QURWX0ZSRUU8L2NvbnN0YW50PjwvcGFyYW1ldGVyPik8L2Z1bmN0aW9uPikKKyAgICAgICAgY2Fu IGRlbGF5IHB1cmdpbmcgaW5kZWZpbml0ZWx5IGFuZCBsZWF2ZSB0aGUgcGFnZXMgd2l0aGluIHRo ZSBwdXJnZWQKKyAgICAgICAgdmlydHVhbCBtZW1vcnkgcmFuZ2UgaW4gYW4gaW5kZXRlcm1pbml0 ZSBzdGF0ZSwgd2hlcmVhcyBhIGZvcmNlZCBleHRlbnQKKyAgICAgICAgcHVyZ2UgZnVuY3Rpb24g aW1tZWRpYXRlbHkgcHVyZ2VzLCBhbmQgdGhlIHBhZ2VzIHdpdGhpbiB0aGUgdmlydHVhbAorICAg ICAgICBtZW1vcnkgcmFuZ2Ugd2lsbCBiZSB6ZXJvLWZpbGxlZCB0aGUgbmV4dCB0aW1lIHRoZXkg YXJlIGFjY2Vzc2VkLiAgSWYKKyAgICAgICAgdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSwgdGhp cyBpbmRpY2F0ZXMgZmFpbHVyZSB0byBwdXJnZS48L3BhcmE+CisKKyAgICAgICAgPGZ1bmNzeW5v cHNpcz48ZnVuY3Byb3RvdHlwZT4KKyAgICAgICAgICA8ZnVuY2RlZj50eXBlZGVmIGJvb2wgPGZ1 bmN0aW9uPihleHRlbnRfc3BsaXRfdCk8L2Z1bmN0aW9uPjwvZnVuY2RlZj4KKyAgICAgICAgICA8 cGFyYW1kZWY+ZXh0ZW50X2hvb2tzX3QgKjxwYXJhbWV0ZXI+ZXh0ZW50X2hvb2tzPC9wYXJhbWV0 ZXI+PC9wYXJhbWRlZj4KKyAgICAgICAgICA8cGFyYW1kZWY+dm9pZCAqPHBhcmFtZXRlcj5hZGRy PC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKyAgICAgICAgICA8cGFyYW1kZWY+c2l6ZV90IDxwYXJh bWV0ZXI+c2l6ZTwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisgICAgICAgICAgPHBhcmFtZGVmPnNp emVfdCA8cGFyYW1ldGVyPnNpemVfYTwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisgICAgICAgICAg PHBhcmFtZGVmPnNpemVfdCA8cGFyYW1ldGVyPnNpemVfYjwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+ CisgICAgICAgICAgPHBhcmFtZGVmPmJvb2wgPHBhcmFtZXRlcj5jb21taXR0ZWQ8L3BhcmFtZXRl cj48L3BhcmFtZGVmPgorICAgICAgICAgIDxwYXJhbWRlZj51bnNpZ25lZCA8cGFyYW1ldGVyPmFy ZW5hX2luZDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisgICAgICAgIDwvZnVuY3Byb3RvdHlwZT48 L2Z1bmNzeW5vcHNpcz4KKyAgICAgICAgPGxpdGVyYWxsYXlvdXQ+PC9saXRlcmFsbGF5b3V0Pgor ICAgICAgICA8cGFyYT5BbiBleHRlbnQgc3BsaXQgZnVuY3Rpb24gY29uZm9ybXMgdG8gdGhlCisg ICAgICAgIDx0eXBlPmV4dGVudF9zcGxpdF90PC90eXBlPiB0eXBlIGFuZCBvcHRpb25hbGx5IHNw bGl0cyBhbiBleHRlbnQgYXQKKyAgICAgICAgZ2l2ZW4gPHBhcmFtZXRlcj5hZGRyPC9wYXJhbWV0 ZXI+IGFuZCA8cGFyYW1ldGVyPnNpemU8L3BhcmFtZXRlcj4gaW50bworICAgICAgICB0d28gYWRq YWNlbnQgZXh0ZW50cywgdGhlIGZpcnN0IG9mIDxwYXJhbWV0ZXI+c2l6ZV9hPC9wYXJhbWV0ZXI+ IGJ5dGVzLAorICAgICAgICBhbmQgdGhlIHNlY29uZCBvZiA8cGFyYW1ldGVyPnNpemVfYjwvcGFy YW1ldGVyPiBieXRlcywgb3BlcmF0aW5nIG9uCisgICAgICAgIDxwYXJhbWV0ZXI+Y29tbWl0dGVk PC9wYXJhbWV0ZXI+L2RlY29tbWl0dGVkIG1lbW9yeSBhcyBpbmRpY2F0ZWQsIG9uCisgICAgICAg IGJlaGFsZiBvZiBhcmVuYSA8cGFyYW1ldGVyPmFyZW5hX2luZDwvcGFyYW1ldGVyPiwgcmV0dXJu aW5nIGZhbHNlIHVwb24KKyAgICAgICAgc3VjY2Vzcy4gIElmIHRoZSBmdW5jdGlvbiByZXR1cm5z IHRydWUsIHRoaXMgaW5kaWNhdGVzIHRoYXQgdGhlIGV4dGVudAorICAgICAgICByZW1haW5zIHVu c3BsaXQgYW5kIHRoZXJlZm9yZSBzaG91bGQgY29udGludWUgdG8gYmUgb3BlcmF0ZWQgb24gYXMg YQorICAgICAgICB3aG9sZS48L3BhcmE+CisKKyAgICAgICAgPGZ1bmNzeW5vcHNpcz48ZnVuY3By b3RvdHlwZT4KKyAgICAgICAgICA8ZnVuY2RlZj50eXBlZGVmIGJvb2wgPGZ1bmN0aW9uPihleHRl bnRfbWVyZ2VfdCk8L2Z1bmN0aW9uPjwvZnVuY2RlZj4KKyAgICAgICAgICA8cGFyYW1kZWY+ZXh0 ZW50X2hvb2tzX3QgKjxwYXJhbWV0ZXI+ZXh0ZW50X2hvb2tzPC9wYXJhbWV0ZXI+PC9wYXJhbWRl Zj4KKyAgICAgICAgICA8cGFyYW1kZWY+dm9pZCAqPHBhcmFtZXRlcj5hZGRyX2E8L3BhcmFtZXRl cj48L3BhcmFtZGVmPgorICAgICAgICAgIDxwYXJhbWRlZj5zaXplX3QgPHBhcmFtZXRlcj5zaXpl X2E8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorICAgICAgICAgIDxwYXJhbWRlZj52b2lkICo8cGFy YW1ldGVyPmFkZHJfYjwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisgICAgICAgICAgPHBhcmFtZGVm PnNpemVfdCA8cGFyYW1ldGVyPnNpemVfYjwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisgICAgICAg ICAgPHBhcmFtZGVmPmJvb2wgPHBhcmFtZXRlcj5jb21taXR0ZWQ8L3BhcmFtZXRlcj48L3BhcmFt ZGVmPgorICAgICAgICAgIDxwYXJhbWRlZj51bnNpZ25lZCA8cGFyYW1ldGVyPmFyZW5hX2luZDwv cGFyYW1ldGVyPjwvcGFyYW1kZWY+CisgICAgICAgIDwvZnVuY3Byb3RvdHlwZT48L2Z1bmNzeW5v cHNpcz4KKyAgICAgICAgPGxpdGVyYWxsYXlvdXQ+PC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8 cGFyYT5BbiBleHRlbnQgbWVyZ2UgZnVuY3Rpb24gY29uZm9ybXMgdG8gdGhlCisgICAgICAgIDx0 eXBlPmV4dGVudF9tZXJnZV90PC90eXBlPiB0eXBlIGFuZCBvcHRpb25hbGx5IG1lcmdlcyBhZGph Y2VudCBleHRlbnRzLAorICAgICAgICBhdCBnaXZlbiA8cGFyYW1ldGVyPmFkZHJfYTwvcGFyYW1l dGVyPiBhbmQgPHBhcmFtZXRlcj5zaXplX2E8L3BhcmFtZXRlcj4KKyAgICAgICAgd2l0aCBnaXZl biA8cGFyYW1ldGVyPmFkZHJfYjwvcGFyYW1ldGVyPiBhbmQKKyAgICAgICAgPHBhcmFtZXRlcj5z aXplX2I8L3BhcmFtZXRlcj4gaW50byBvbmUgY29udGlndW91cyBleHRlbnQsIG9wZXJhdGluZyBv bgorICAgICAgICA8cGFyYW1ldGVyPmNvbW1pdHRlZDwvcGFyYW1ldGVyPi9kZWNvbW1pdHRlZCBt ZW1vcnkgYXMgaW5kaWNhdGVkLCBvbgorICAgICAgICBiZWhhbGYgb2YgYXJlbmEgPHBhcmFtZXRl cj5hcmVuYV9pbmQ8L3BhcmFtZXRlcj4sIHJldHVybmluZyBmYWxzZSB1cG9uCisgICAgICAgIHN1 Y2Nlc3MuICBJZiB0aGUgZnVuY3Rpb24gcmV0dXJucyB0cnVlLCB0aGlzIGluZGljYXRlcyB0aGF0 IHRoZSBleHRlbnRzCisgICAgICAgIHJlbWFpbiBkaXN0aW5jdCBtYXBwaW5ncyBhbmQgdGhlcmVm b3JlIHNob3VsZCBjb250aW51ZSB0byBiZSBvcGVyYXRlZCBvbgorICAgICAgICBpbmRlcGVuZGVu dGx5LjwvcGFyYT4KKyAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5Pgor CisgICAgICA8dmFybGlzdGVudHJ5IGlkPSJhcmVuYXMubmFyZW5hcyI+CisgICAgICAgIDx0ZXJt PgorICAgICAgICAgIDxtYWxsY3RsPmFyZW5hcy5uYXJlbmFzPC9tYWxsY3RsPgorICAgICAgICAg ICg8dHlwZT51bnNpZ25lZDwvdHlwZT4pCisgICAgICAgICAgPGxpdGVyYWw+ci08L2xpdGVyYWw+ CisgICAgICAgIDwvdGVybT4KKyAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkN1cnJlbnQgbGltaXQg b24gbnVtYmVyIG9mIGFyZW5hcy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVu dHJ5PgorCisgICAgICA8dmFybGlzdGVudHJ5IGlkPSJhcmVuYXMuZGlydHlfZGVjYXlfbXMiPgor ICAgICAgICA8dGVybT4KKyAgICAgICAgICA8bWFsbGN0bD5hcmVuYXMuZGlydHlfZGVjYXlfbXM8 L21hbGxjdGw+CisgICAgICAgICAgKDx0eXBlPnNzaXplX3Q8L3R5cGU+KQorICAgICAgICAgIDxs aXRlcmFsPnJ3PC9saXRlcmFsPgorICAgICAgICA8L3Rlcm0+CisgICAgICAgIDxsaXN0aXRlbT48 cGFyYT5DdXJyZW50IGRlZmF1bHQgcGVyLWFyZW5hIGFwcHJveGltYXRlIHRpbWUgaW4KKyAgICAg ICAgbWlsbGlzZWNvbmRzIGZyb20gdGhlIGNyZWF0aW9uIG9mIGEgc2V0IG9mIHVudXNlZCBkaXJ0 eSBwYWdlcyB1bnRpbCBhbgorICAgICAgICBlcXVpdmFsZW50IHNldCBvZiB1bnVzZWQgZGlydHkg cGFnZXMgaXMgcHVyZ2VkIGFuZC9vciByZXVzZWQsIHVzZWQgdG8KKyAgICAgICAgaW5pdGlhbGl6 ZSA8bGluaworICAgICAgICBsaW5rZW5kPSJhcmVuYS5pLmRpcnR5X2RlY2F5X21zIj48bWFsbGN0 bD5hcmVuYS4mbHQ7aSZndDsuZGlydHlfZGVjYXlfbXM8L21hbGxjdGw+PC9saW5rPgorICAgICAg ICBkdXJpbmcgYXJlbmEgY3JlYXRpb24uICBTZWUgPGxpbmsKKyAgICAgICAgbGlua2VuZD0ib3B0 LmRpcnR5X2RlY2F5X21zIj48bWFsbGN0bD5vcHQuZGlydHlfZGVjYXlfbXM8L21hbGxjdGw+PC9s aW5rPgorICAgICAgICBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi48L3BhcmE+PC9saXN0aXRl bT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAgICA8dmFybGlzdGVudHJ5IGlkPSJhcmVu YXMubXV6enlfZGVjYXlfbXMiPgorICAgICAgICA8dGVybT4KKyAgICAgICAgICA8bWFsbGN0bD5h cmVuYXMubXV6enlfZGVjYXlfbXM8L21hbGxjdGw+CisgICAgICAgICAgKDx0eXBlPnNzaXplX3Q8 L3R5cGU+KQorICAgICAgICAgIDxsaXRlcmFsPnJ3PC9saXRlcmFsPgorICAgICAgICA8L3Rlcm0+ CisgICAgICAgIDxsaXN0aXRlbT48cGFyYT5DdXJyZW50IGRlZmF1bHQgcGVyLWFyZW5hIGFwcHJv eGltYXRlIHRpbWUgaW4KKyAgICAgICAgbWlsbGlzZWNvbmRzIGZyb20gdGhlIGNyZWF0aW9uIG9m IGEgc2V0IG9mIHVudXNlZCBtdXp6eSBwYWdlcyB1bnRpbCBhbgorICAgICAgICBlcXVpdmFsZW50 IHNldCBvZiB1bnVzZWQgbXV6enkgcGFnZXMgaXMgcHVyZ2VkIGFuZC9vciByZXVzZWQsIHVzZWQg dG8KKyAgICAgICAgaW5pdGlhbGl6ZSA8bGluaworICAgICAgICBsaW5rZW5kPSJhcmVuYS5pLm11 enp5X2RlY2F5X21zIj48bWFsbGN0bD5hcmVuYS4mbHQ7aSZndDsubXV6enlfZGVjYXlfbXM8L21h bGxjdGw+PC9saW5rPgorICAgICAgICBkdXJpbmcgYXJlbmEgY3JlYXRpb24uICBTZWUgPGxpbmsK KyAgICAgICAgbGlua2VuZD0ib3B0Lm11enp5X2RlY2F5X21zIj48bWFsbGN0bD5vcHQubXV6enlf ZGVjYXlfbXM8L21hbGxjdGw+PC9saW5rPgorICAgICAgICBmb3IgYWRkaXRpb25hbCBpbmZvcm1h dGlvbi48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAgICA8 dmFybGlzdGVudHJ5IGlkPSJhcmVuYXMucXVhbnR1bSI+CisgICAgICAgIDx0ZXJtPgorICAgICAg ICAgIDxtYWxsY3RsPmFyZW5hcy5xdWFudHVtPC9tYWxsY3RsPgorICAgICAgICAgICg8dHlwZT5z aXplX3Q8L3R5cGU+KQorICAgICAgICAgIDxsaXRlcmFsPnItPC9saXRlcmFsPgorICAgICAgICA8 L3Rlcm0+CisgICAgICAgIDxsaXN0aXRlbT48cGFyYT5RdWFudHVtIHNpemUuPC9wYXJhPjwvbGlz dGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgICAgPHZhcmxpc3RlbnRyeSBpZD0i YXJlbmFzLnBhZ2UiPgorICAgICAgICA8dGVybT4KKyAgICAgICAgICA8bWFsbGN0bD5hcmVuYXMu cGFnZTwvbWFsbGN0bD4KKyAgICAgICAgICAoPHR5cGU+c2l6ZV90PC90eXBlPikKKyAgICAgICAg ICA8bGl0ZXJhbD5yLTwvbGl0ZXJhbD4KKyAgICAgICAgPC90ZXJtPgorICAgICAgICA8bGlzdGl0 ZW0+PHBhcmE+UGFnZSBzaXplLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50 cnk+CisKKyAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9ImFyZW5hcy50Y2FjaGVfbWF4Ij4KKyAgICAg ICAgPHRlcm0+CisgICAgICAgICAgPG1hbGxjdGw+YXJlbmFzLnRjYWNoZV9tYXg8L21hbGxjdGw+ CisgICAgICAgICAgKDx0eXBlPnNpemVfdDwvdHlwZT4pCisgICAgICAgICAgPGxpdGVyYWw+ci08 L2xpdGVyYWw+CisgICAgICAgIDwvdGVybT4KKyAgICAgICAgPGxpc3RpdGVtPjxwYXJhPk1heGlt dW0gdGhyZWFkLWNhY2hlZCBzaXplIGNsYXNzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgPC92 YXJsaXN0ZW50cnk+CisKKyAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9ImFyZW5hcy5uYmlucyI+Cisg ICAgICAgIDx0ZXJtPgorICAgICAgICAgIDxtYWxsY3RsPmFyZW5hcy5uYmluczwvbWFsbGN0bD4K KyAgICAgICAgICAoPHR5cGU+dW5zaWduZWQ8L3R5cGU+KQorICAgICAgICAgIDxsaXRlcmFsPnIt PC9saXRlcmFsPgorICAgICAgICA8L3Rlcm0+CisgICAgICAgIDxsaXN0aXRlbT48cGFyYT5OdW1i ZXIgb2YgYmluIHNpemUgY2xhc3Nlcy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlz dGVudHJ5PgorCisgICAgICA8dmFybGlzdGVudHJ5IGlkPSJhcmVuYXMubmhiaW5zIj4KKyAgICAg ICAgPHRlcm0+CisgICAgICAgICAgPG1hbGxjdGw+YXJlbmFzLm5oYmluczwvbWFsbGN0bD4KKyAg ICAgICAgICAoPHR5cGU+dW5zaWduZWQ8L3R5cGU+KQorICAgICAgICAgIDxsaXRlcmFsPnItPC9s aXRlcmFsPgorICAgICAgICA8L3Rlcm0+CisgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Ub3RhbCBu dW1iZXIgb2YgdGhyZWFkIGNhY2hlIGJpbiBzaXplCisgICAgICAgIGNsYXNzZXMuPC9wYXJhPjwv bGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgICAgPHZhcmxpc3RlbnRyeSBp ZD0iYXJlbmFzLmJpbi5pLnNpemUiPgorICAgICAgICA8dGVybT4KKyAgICAgICAgICA8bWFsbGN0 bD5hcmVuYXMuYmluLiZsdDtpJmd0Oy5zaXplPC9tYWxsY3RsPgorICAgICAgICAgICg8dHlwZT5z aXplX3Q8L3R5cGU+KQorICAgICAgICAgIDxsaXRlcmFsPnItPC9saXRlcmFsPgorICAgICAgICA8 L3Rlcm0+CisgICAgICAgIDxsaXN0aXRlbT48cGFyYT5NYXhpbXVtIHNpemUgc3VwcG9ydGVkIGJ5 IHNpemUgY2xhc3MuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKwor ICAgICAgPHZhcmxpc3RlbnRyeSBpZD0iYXJlbmFzLmJpbi5pLm5yZWdzIj4KKyAgICAgICAgPHRl cm0+CisgICAgICAgICAgPG1hbGxjdGw+YXJlbmFzLmJpbi4mbHQ7aSZndDsubnJlZ3M8L21hbGxj dGw+CisgICAgICAgICAgKDx0eXBlPnVpbnQzMl90PC90eXBlPikKKyAgICAgICAgICA8bGl0ZXJh bD5yLTwvbGl0ZXJhbD4KKyAgICAgICAgPC90ZXJtPgorICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+ TnVtYmVyIG9mIHJlZ2lvbnMgcGVyIHNsYWIuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICA8L3Zh cmxpc3RlbnRyeT4KKworICAgICAgPHZhcmxpc3RlbnRyeSBpZD0iYXJlbmFzLmJpbi5pLnNsYWJf c2l6ZSI+CisgICAgICAgIDx0ZXJtPgorICAgICAgICAgIDxtYWxsY3RsPmFyZW5hcy5iaW4uJmx0 O2kmZ3Q7LnNsYWJfc2l6ZTwvbWFsbGN0bD4KKyAgICAgICAgICAoPHR5cGU+c2l6ZV90PC90eXBl PikKKyAgICAgICAgICA8bGl0ZXJhbD5yLTwvbGl0ZXJhbD4KKyAgICAgICAgPC90ZXJtPgorICAg ICAgICA8bGlzdGl0ZW0+PHBhcmE+TnVtYmVyIG9mIGJ5dGVzIHBlciBzbGFiLjwvcGFyYT48L2xp c3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9 ImFyZW5hcy5ubGV4dGVudHMiPgorICAgICAgICA8dGVybT4KKyAgICAgICAgICA8bWFsbGN0bD5h cmVuYXMubmxleHRlbnRzPC9tYWxsY3RsPgorICAgICAgICAgICg8dHlwZT51bnNpZ25lZDwvdHlw ZT4pCisgICAgICAgICAgPGxpdGVyYWw+ci08L2xpdGVyYWw+CisgICAgICAgIDwvdGVybT4KKyAg ICAgICAgPGxpc3RpdGVtPjxwYXJhPlRvdGFsIG51bWJlciBvZiBsYXJnZSBzaXplIGNsYXNzZXMu PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgICAgPHZhcmxp c3RlbnRyeSBpZD0iYXJlbmFzLmxleHRlbnQuaS5zaXplIj4KKyAgICAgICAgPHRlcm0+CisgICAg ICAgICAgPG1hbGxjdGw+YXJlbmFzLmxleHRlbnQuJmx0O2kmZ3Q7LnNpemU8L21hbGxjdGw+Cisg ICAgICAgICAgKDx0eXBlPnNpemVfdDwvdHlwZT4pCisgICAgICAgICAgPGxpdGVyYWw+ci08L2xp dGVyYWw+CisgICAgICAgIDwvdGVybT4KKyAgICAgICAgPGxpc3RpdGVtPjxwYXJhPk1heGltdW0g c2l6ZSBzdXBwb3J0ZWQgYnkgdGhpcyBsYXJnZSBzaXplCisgICAgICAgIGNsYXNzLjwvcGFyYT48 L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAgIDx2YXJsaXN0ZW50cnkg aWQ9ImFyZW5hcy5jcmVhdGUiPgorICAgICAgICA8dGVybT4KKyAgICAgICAgICA8bWFsbGN0bD5h cmVuYXMuY3JlYXRlPC9tYWxsY3RsPgorICAgICAgICAgICg8dHlwZT51bnNpZ25lZDwvdHlwZT4s IDx0eXBlPmV4dGVudF9ob29rc190ICo8L3R5cGU+KQorICAgICAgICAgIDxsaXRlcmFsPnJ3PC9s aXRlcmFsPgorICAgICAgICA8L3Rlcm0+CisgICAgICAgIDxsaXN0aXRlbT48cGFyYT5FeHBsaWNp dGx5IGNyZWF0ZSBhIG5ldyBhcmVuYSBvdXRzaWRlIHRoZSByYW5nZSBvZgorICAgICAgICBhdXRv bWF0aWNhbGx5IG1hbmFnZWQgYXJlbmFzLCB3aXRoIG9wdGlvbmFsbHkgc3BlY2lmaWVkIGV4dGVu dCBob29rcywKKyAgICAgICAgYW5kIHJldHVybiB0aGUgbmV3IGFyZW5hIGluZGV4LjwvcGFyYT4K KworICAgICAgICA8cGFyYT5JZiB0aGUgYW1vdW50IG9mIHNwYWNlIHN1cHBsaWVkIGZvciBzdG9y aW5nIHRoZSBhcmVuYSBpbmRleCBkb2VzCisgICAgICAgIG5vdCBlcXVhbCA8Y29kZSBsYW5ndWFn ZT0iQyI+c2l6ZW9mKDx0eXBlPnVuc2lnbmVkPC90eXBlPik8L2NvZGU+LCBubworICAgICAgICBh cmVuYSB3aWxsIGJlIGNyZWF0ZWQsIG5vIGRhdGEgd2lsbCBiZSB3cml0dGVuIHRvIHRoZSBzcGFj ZSBwb2ludGVkIGJ5CisgICAgICAgIDxwYXJhbWV0ZXI+b2xkcDwvcGFyYW1ldGVyPiwgYW5kIDxw YXJhbWV0ZXI+Km9sZGxlbnA8L3BhcmFtZXRlcj4gd2lsbAorICAgICAgICBiZSBzZXQgdG8gMC4K KyAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAg ICAgPHZhcmxpc3RlbnRyeSBpZD0iYXJlbmFzLmxvb2t1cCI+CisgICAgICAgIDx0ZXJtPgorICAg ICAgICAgIDxtYWxsY3RsPmFyZW5hcy5sb29rdXA8L21hbGxjdGw+CisgICAgICAgICAgKDx0eXBl PnVuc2lnbmVkPC90eXBlPiwgPHR5cGU+dm9pZCo8L3R5cGU+KQorICAgICAgICAgIDxsaXRlcmFs PnJ3PC9saXRlcmFsPgorICAgICAgICA8L3Rlcm0+CisgICAgICAgIDxsaXN0aXRlbT48cGFyYT5J bmRleCBvZiB0aGUgYXJlbmEgdG8gd2hpY2ggYW4gYWxsb2NhdGlvbiBiZWxvbmdzIHRvLjwvcGFy YT48L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAgIDx2YXJsaXN0ZW50 cnkgaWQ9InByb2YudGhyZWFkX2FjdGl2ZV9pbml0Ij4KKyAgICAgICAgPHRlcm0+CisgICAgICAg ICAgPG1hbGxjdGw+cHJvZi50aHJlYWRfYWN0aXZlX2luaXQ8L21hbGxjdGw+CisgICAgICAgICAg KDx0eXBlPmJvb2w8L3R5cGU+KQorICAgICAgICAgIDxsaXRlcmFsPnJ3PC9saXRlcmFsPgorICAg ICAgICAgIFs8b3B0aW9uPi0tZW5hYmxlLXByb2Y8L29wdGlvbj5dCisgICAgICAgIDwvdGVybT4K KyAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNvbnRyb2wgdGhlIGluaXRpYWwgc2V0dGluZyBmb3Ig PGxpbmsKKyAgICAgICAgbGlua2VuZD0idGhyZWFkLnByb2YuYWN0aXZlIj48bWFsbGN0bD50aHJl YWQucHJvZi5hY3RpdmU8L21hbGxjdGw+PC9saW5rPgorICAgICAgICBpbiBuZXdseSBjcmVhdGVk IHRocmVhZHMuICBTZWUgdGhlIDxsaW5rCisgICAgICAgIGxpbmtlbmQ9Im9wdC5wcm9mX3RocmVh ZF9hY3RpdmVfaW5pdCI+PG1hbGxjdGw+b3B0LnByb2ZfdGhyZWFkX2FjdGl2ZV9pbml0PC9tYWxs Y3RsPjwvbGluaz4KKyAgICAgICAgb3B0aW9uIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLjwv cGFyYT48L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAgIDx2YXJsaXN0 ZW50cnkgaWQ9InByb2YuYWN0aXZlIj4KKyAgICAgICAgPHRlcm0+CisgICAgICAgICAgPG1hbGxj dGw+cHJvZi5hY3RpdmU8L21hbGxjdGw+CisgICAgICAgICAgKDx0eXBlPmJvb2w8L3R5cGU+KQor ICAgICAgICAgIDxsaXRlcmFsPnJ3PC9saXRlcmFsPgorICAgICAgICAgIFs8b3B0aW9uPi0tZW5h YmxlLXByb2Y8L29wdGlvbj5dCisgICAgICAgIDwvdGVybT4KKyAgICAgICAgPGxpc3RpdGVtPjxw YXJhPkNvbnRyb2wgd2hldGhlciBzYW1wbGluZyBpcyBjdXJyZW50bHkgYWN0aXZlLiAgU2VlIHRo ZQorICAgICAgICA8bGluaworICAgICAgICBsaW5rZW5kPSJvcHQucHJvZl9hY3RpdmUiPjxtYWxs Y3RsPm9wdC5wcm9mX2FjdGl2ZTwvbWFsbGN0bD48L2xpbms+CisgICAgICAgIG9wdGlvbiBmb3Ig YWRkaXRpb25hbCBpbmZvcm1hdGlvbiwgYXMgd2VsbCBhcyB0aGUgaW50ZXJyZWxhdGVkIDxsaW5r CisgICAgICAgIGxpbmtlbmQ9InRocmVhZC5wcm9mLmFjdGl2ZSI+PG1hbGxjdGw+dGhyZWFkLnBy b2YuYWN0aXZlPC9tYWxsY3RsPjwvbGluaz4KKyAgICAgICAgbWFsbGN0bC48L3BhcmE+PC9saXN0 aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAgICA8dmFybGlzdGVudHJ5IGlkPSJw cm9mLmR1bXAiPgorICAgICAgICA8dGVybT4KKyAgICAgICAgICA8bWFsbGN0bD5wcm9mLmR1bXA8 L21hbGxjdGw+CisgICAgICAgICAgKDx0eXBlPmNvbnN0IGNoYXIgKjwvdHlwZT4pCisgICAgICAg ICAgPGxpdGVyYWw+LXc8L2xpdGVyYWw+CisgICAgICAgICAgWzxvcHRpb24+LS1lbmFibGUtcHJv Zjwvb3B0aW9uPl0KKyAgICAgICAgPC90ZXJtPgorICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RHVt cCBhIG1lbW9yeSBwcm9maWxlIHRvIHRoZSBzcGVjaWZpZWQgZmlsZSwgb3IgaWYgTlVMTAorICAg ICAgICBpcyBzcGVjaWZpZWQsIHRvIGEgZmlsZSBhY2NvcmRpbmcgdG8gdGhlIHBhdHRlcm4KKyAg ICAgICAgPGZpbGVuYW1lPiZsdDtwcmVmaXgmZ3Q7LiZsdDtwaWQmZ3Q7LiZsdDtzZXEmZ3Q7Lm0m bHQ7bXNlcSZndDsuaGVhcDwvZmlsZW5hbWU+LAorICAgICAgICB3aGVyZSA8bGl0ZXJhbD4mbHQ7 cHJlZml4Jmd0OzwvbGl0ZXJhbD4gaXMgY29udHJvbGxlZCBieSB0aGUKKyAgICAgICAgPGxpbmsg bGlua2VuZD0ib3B0LnByb2ZfcHJlZml4Ij48bWFsbGN0bD5vcHQucHJvZl9wcmVmaXg8L21hbGxj dGw+PC9saW5rPgorICAgICAgICBhbmQgPGxpbmsgbGlua2VuZD0icHJvZi5wcmVmaXgiPjxtYWxs Y3RsPnByb2YucHJlZml4PC9tYWxsY3RsPjwvbGluaz4KKyAgICAgICAgb3B0aW9ucy48L3BhcmE+ PC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAgICA8dmFybGlzdGVudHJ5 IGlkPSJwcm9mLnByZWZpeCI+CisgICAgICAgIDx0ZXJtPgorICAgICAgICAgIDxtYWxsY3RsPnBy b2YucHJlZml4PC9tYWxsY3RsPgorICAgICAgICAgICg8dHlwZT5jb25zdCBjaGFyICo8L3R5cGU+ KQorICAgICAgICAgIDxsaXRlcmFsPi13PC9saXRlcmFsPgorICAgICAgICAgIFs8b3B0aW9uPi0t ZW5hYmxlLXByb2Y8L29wdGlvbj5dCisgICAgICAgIDwvdGVybT4KKyAgICAgICAgPGxpc3RpdGVt PjxwYXJhPlNldCB0aGUgZmlsZW5hbWUgcHJlZml4IGZvciBwcm9maWxlIGR1bXBzLiBTZWUKKyAg ICAgICAgPGxpbmsKKyAgICAgICAgbGlua2VuZD0ib3B0LnByb2ZfcHJlZml4Ij48bWFsbGN0bD5v cHQucHJvZl9wcmVmaXg8L21hbGxjdGw+PC9saW5rPgorICAgICAgICBmb3IgdGhlIGRlZmF1bHQg c2V0dGluZy4gIFRoaXMgY2FuIGJlIHVzZWZ1bCB0byBkaWZmZXJlbnRpYXRlIHByb2ZpbGUKKyAg ICAgICAgZHVtcHMgc3VjaCBhcyBmcm9tIGZvcmtlZCBwcm9jZXNzZXMuCisgICAgICAgIDwvcGFy YT48L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAgIDx2YXJsaXN0ZW50 cnkgaWQ9InByb2YuZ2R1bXAiPgorICAgICAgICA8dGVybT4KKyAgICAgICAgICA8bWFsbGN0bD5w cm9mLmdkdW1wPC9tYWxsY3RsPgorICAgICAgICAgICg8dHlwZT5ib29sPC90eXBlPikKKyAgICAg ICAgICA8bGl0ZXJhbD5ydzwvbGl0ZXJhbD4KKyAgICAgICAgICBbPG9wdGlvbj4tLWVuYWJsZS1w cm9mPC9vcHRpb24+XQorICAgICAgICA8L3Rlcm0+CisgICAgICAgIDxsaXN0aXRlbT48cGFyYT5X aGVuIGVuYWJsZWQsIHRyaWdnZXIgYSBtZW1vcnkgcHJvZmlsZSBkdW1wIGV2ZXJ5IHRpbWUKKyAg ICAgICAgdGhlIHRvdGFsIHZpcnR1YWwgbWVtb3J5IGV4Y2VlZHMgdGhlIHByZXZpb3VzIG1heGlt dW0uICBQcm9maWxlcyBhcmUKKyAgICAgICAgZHVtcGVkIHRvIGZpbGVzIG5hbWVkIGFjY29yZGlu ZyB0byB0aGUgcGF0dGVybgorICAgICAgICA8ZmlsZW5hbWU+Jmx0O3ByZWZpeCZndDsuJmx0O3Bp ZCZndDsuJmx0O3NlcSZndDsudSZsdDt1c2VxJmd0Oy5oZWFwPC9maWxlbmFtZT4sCisgICAgICAg IHdoZXJlIDxsaXRlcmFsPiZsdDtwcmVmaXgmZ3Q7PC9saXRlcmFsPiBpcyBjb250cm9sbGVkIGJ5 IHRoZSA8bGluaworICAgICAgICBsaW5rZW5kPSJvcHQucHJvZl9wcmVmaXgiPjxtYWxsY3RsPm9w dC5wcm9mX3ByZWZpeDwvbWFsbGN0bD48L2xpbms+IGFuZAorICAgICAgICA8bGluayBsaW5rZW5k PSJwcm9mLnByZWZpeCI+PG1hbGxjdGw+cHJvZi5wcmVmaXg8L21hbGxjdGw+PC9saW5rPgorICAg ICAgICBvcHRpb25zLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisK KyAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9InByb2YucmVzZXQiPgorICAgICAgICA8dGVybT4KKyAg ICAgICAgICA8bWFsbGN0bD5wcm9mLnJlc2V0PC9tYWxsY3RsPgorICAgICAgICAgICg8dHlwZT5z aXplX3Q8L3R5cGU+KQorICAgICAgICAgIDxsaXRlcmFsPi13PC9saXRlcmFsPgorICAgICAgICAg IFs8b3B0aW9uPi0tZW5hYmxlLXByb2Y8L29wdGlvbj5dCisgICAgICAgIDwvdGVybT4KKyAgICAg ICAgPGxpc3RpdGVtPjxwYXJhPlJlc2V0IGFsbCBtZW1vcnkgcHJvZmlsZSBzdGF0aXN0aWNzLCBh bmQgb3B0aW9uYWxseQorICAgICAgICB1cGRhdGUgdGhlIHNhbXBsZSByYXRlIChzZWUgPGxpbmsK KyAgICAgICAgbGlua2VuZD0ib3B0LmxnX3Byb2Zfc2FtcGxlIj48bWFsbGN0bD5vcHQubGdfcHJv Zl9zYW1wbGU8L21hbGxjdGw+PC9saW5rPgorICAgICAgICBhbmQgPGxpbmsKKyAgICAgICAgbGlu a2VuZD0icHJvZi5sZ19zYW1wbGUiPjxtYWxsY3RsPnByb2YubGdfc2FtcGxlPC9tYWxsY3RsPjwv bGluaz4pLgorICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5 PgorCisgICAgICA8dmFybGlzdGVudHJ5IGlkPSJwcm9mLmxnX3NhbXBsZSI+CisgICAgICAgIDx0 ZXJtPgorICAgICAgICAgIDxtYWxsY3RsPnByb2YubGdfc2FtcGxlPC9tYWxsY3RsPgorICAgICAg ICAgICg8dHlwZT5zaXplX3Q8L3R5cGU+KQorICAgICAgICAgIDxsaXRlcmFsPnItPC9saXRlcmFs PgorICAgICAgICAgIFs8b3B0aW9uPi0tZW5hYmxlLXByb2Y8L29wdGlvbj5dCisgICAgICAgIDwv dGVybT4KKyAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkdldCB0aGUgY3VycmVudCBzYW1wbGUgcmF0 ZSAoc2VlIDxsaW5rCisgICAgICAgIGxpbmtlbmQ9Im9wdC5sZ19wcm9mX3NhbXBsZSI+PG1hbGxj dGw+b3B0LmxnX3Byb2Zfc2FtcGxlPC9tYWxsY3RsPjwvbGluaz4pLgorICAgICAgICA8L3BhcmE+ PC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAgICA8dmFybGlzdGVudHJ5 IGlkPSJwcm9mLmludGVydmFsIj4KKyAgICAgICAgPHRlcm0+CisgICAgICAgICAgPG1hbGxjdGw+ cHJvZi5pbnRlcnZhbDwvbWFsbGN0bD4KKyAgICAgICAgICAoPHR5cGU+dWludDY0X3Q8L3R5cGU+ KQorICAgICAgICAgIDxsaXRlcmFsPnItPC9saXRlcmFsPgorICAgICAgICAgIFs8b3B0aW9uPi0t ZW5hYmxlLXByb2Y8L29wdGlvbj5dCisgICAgICAgIDwvdGVybT4KKyAgICAgICAgPGxpc3RpdGVt PjxwYXJhPkF2ZXJhZ2UgbnVtYmVyIG9mIGJ5dGVzIGFsbG9jYXRlZCBiZXR3ZWVuCisgICAgICAg IGludGVydmFsLWJhc2VkIHByb2ZpbGUgZHVtcHMuICBTZWUgdGhlCisgICAgICAgIDxsaW5rCisg ICAgICAgIGxpbmtlbmQ9Im9wdC5sZ19wcm9mX2ludGVydmFsIj48bWFsbGN0bD5vcHQubGdfcHJv Zl9pbnRlcnZhbDwvbWFsbGN0bD48L2xpbms+CisgICAgICAgIG9wdGlvbiBmb3IgYWRkaXRpb25h bCBpbmZvcm1hdGlvbi48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5Pgor CisgICAgICA8dmFybGlzdGVudHJ5IGlkPSJzdGF0cy5hbGxvY2F0ZWQiPgorICAgICAgICA8dGVy bT4KKyAgICAgICAgICA8bWFsbGN0bD5zdGF0cy5hbGxvY2F0ZWQ8L21hbGxjdGw+CisgICAgICAg ICAgKDx0eXBlPnNpemVfdDwvdHlwZT4pCisgICAgICAgICAgPGxpdGVyYWw+ci08L2xpdGVyYWw+ CisgICAgICAgICAgWzxvcHRpb24+LS1lbmFibGUtc3RhdHM8L29wdGlvbj5dCisgICAgICAgIDwv dGVybT4KKyAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRvdGFsIG51bWJlciBvZiBieXRlcyBhbGxv Y2F0ZWQgYnkgdGhlCisgICAgICAgIGFwcGxpY2F0aW9uLjwvcGFyYT48L2xpc3RpdGVtPgorICAg ICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9InN0YXRzLmFjdGl2 ZSI+CisgICAgICAgIDx0ZXJtPgorICAgICAgICAgIDxtYWxsY3RsPnN0YXRzLmFjdGl2ZTwvbWFs bGN0bD4KKyAgICAgICAgICAoPHR5cGU+c2l6ZV90PC90eXBlPikKKyAgICAgICAgICA8bGl0ZXJh bD5yLTwvbGl0ZXJhbD4KKyAgICAgICAgICBbPG9wdGlvbj4tLWVuYWJsZS1zdGF0czwvb3B0aW9u Pl0KKyAgICAgICAgPC90ZXJtPgorICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VG90YWwgbnVtYmVy IG9mIGJ5dGVzIGluIGFjdGl2ZSBwYWdlcyBhbGxvY2F0ZWQgYnkgdGhlCisgICAgICAgIGFwcGxp Y2F0aW9uLiAgVGhpcyBpcyBhIG11bHRpcGxlIG9mIHRoZSBwYWdlIHNpemUsIGFuZCBncmVhdGVy IHRoYW4gb3IKKyAgICAgICAgZXF1YWwgdG8gPGxpbmsKKyAgICAgICAgbGlua2VuZD0ic3RhdHMu YWxsb2NhdGVkIj48bWFsbGN0bD5zdGF0cy5hbGxvY2F0ZWQ8L21hbGxjdGw+PC9saW5rPi4KKyAg ICAgICAgVGhpcyBkb2VzIG5vdCBpbmNsdWRlIDxsaW5rIGxpbmtlbmQ9InN0YXRzLmFyZW5hcy5p LnBkaXJ0eSI+CisgICAgICAgIDxtYWxsY3RsPnN0YXRzLmFyZW5hcy4mbHQ7aSZndDsucGRpcnR5 PC9tYWxsY3RsPjwvbGluaz4sCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9InN0YXRzLmFyZW5hcy5p LnBtdXp6eSI+CisgICAgICAgIDxtYWxsY3RsPnN0YXRzLmFyZW5hcy4mbHQ7aSZndDsucG11enp5 PC9tYWxsY3RsPjwvbGluaz4sIG5vciBwYWdlcworICAgICAgICBlbnRpcmVseSBkZXZvdGVkIHRv IGFsbG9jYXRvciBtZXRhZGF0YS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVu dHJ5PgorCisgICAgICA8dmFybGlzdGVudHJ5IGlkPSJzdGF0cy5tZXRhZGF0YSI+CisgICAgICAg IDx0ZXJtPgorICAgICAgICAgIDxtYWxsY3RsPnN0YXRzLm1ldGFkYXRhPC9tYWxsY3RsPgorICAg ICAgICAgICg8dHlwZT5zaXplX3Q8L3R5cGU+KQorICAgICAgICAgIDxsaXRlcmFsPnItPC9saXRl cmFsPgorICAgICAgICAgIFs8b3B0aW9uPi0tZW5hYmxlLXN0YXRzPC9vcHRpb24+XQorICAgICAg ICA8L3Rlcm0+CisgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Ub3RhbCBudW1iZXIgb2YgYnl0ZXMg ZGVkaWNhdGVkIHRvIG1ldGFkYXRhLCB3aGljaAorICAgICAgICBjb21wcmlzZSBiYXNlIGFsbG9j YXRpb25zIHVzZWQgZm9yIGJvb3RzdHJhcC1zZW5zaXRpdmUgYWxsb2NhdG9yCisgICAgICAgIG1l dGFkYXRhIHN0cnVjdHVyZXMgKHNlZSA8bGluaworICAgICAgICBsaW5rZW5kPSJzdGF0cy5hcmVu YXMuaS5iYXNlIj48bWFsbGN0bD5zdGF0cy5hcmVuYXMuJmx0O2kmZ3Q7LmJhc2U8L21hbGxjdGw+ PC9saW5rPikKKyAgICAgICAgYW5kIGludGVybmFsIGFsbG9jYXRpb25zIChzZWUgPGxpbmsKKyAg ICAgICAgbGlua2VuZD0ic3RhdHMuYXJlbmFzLmkuaW50ZXJuYWwiPjxtYWxsY3RsPnN0YXRzLmFy ZW5hcy4mbHQ7aSZndDsuaW50ZXJuYWw8L21hbGxjdGw+PC9saW5rPikuCisgICAgICAgIFRyYW5z cGFyZW50IGh1Z2UgcGFnZSAoZW5hYmxlZCB3aXRoIDxsaW5rCisgICAgICAgIGxpbmtlbmQ9Im9w dC5tZXRhZGF0YV90aHAiPm9wdC5tZXRhZGF0YV90aHA8L2xpbms+KSB1c2FnZSBpcyBub3QKKyAg ICAgICAgY29uc2lkZXJlZC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5 PgorCisgICAgICA8dmFybGlzdGVudHJ5IGlkPSJzdGF0cy5tZXRhZGF0YV90aHAiPgorICAgICAg ICA8dGVybT4KKyAgICAgICAgICA8bWFsbGN0bD5zdGF0cy5tZXRhZGF0YV90aHA8L21hbGxjdGw+ CisgICAgICAgICAgKDx0eXBlPnNpemVfdDwvdHlwZT4pCisgICAgICAgICAgPGxpdGVyYWw+ci08 L2xpdGVyYWw+CisgICAgICAgICAgWzxvcHRpb24+LS1lbmFibGUtc3RhdHM8L29wdGlvbj5dCisg ICAgICAgIDwvdGVybT4KKyAgICAgICAgPGxpc3RpdGVtPjxwYXJhPk51bWJlciBvZiB0cmFuc3Bh cmVudCBodWdlIHBhZ2VzIChUSFApIHVzZWQgZm9yCisgICAgICAgIG1ldGFkYXRhLiAgU2VlIDxs aW5rCisgICAgICAgIGxpbmtlbmQ9InN0YXRzLm1ldGFkYXRhIj48bWFsbGN0bD5zdGF0cy5tZXRh ZGF0YTwvbWFsbGN0bD48L2xpbms+IGFuZAorICAgICAgICA8bGluayBsaW5rZW5kPSJvcHQubWV0 YWRhdGFfdGhwIj5vcHQubWV0YWRhdGFfdGhwPC9saW5rPikgZm9yCisgICAgICAgIGRldGFpbHMu PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgICAgPHZhcmxp c3RlbnRyeSBpZD0ic3RhdHMucmVzaWRlbnQiPgorICAgICAgICA8dGVybT4KKyAgICAgICAgICA8 bWFsbGN0bD5zdGF0cy5yZXNpZGVudDwvbWFsbGN0bD4KKyAgICAgICAgICAoPHR5cGU+c2l6ZV90 PC90eXBlPikKKyAgICAgICAgICA8bGl0ZXJhbD5yLTwvbGl0ZXJhbD4KKyAgICAgICAgICBbPG9w dGlvbj4tLWVuYWJsZS1zdGF0czwvb3B0aW9uPl0KKyAgICAgICAgPC90ZXJtPgorICAgICAgICA8 bGlzdGl0ZW0+PHBhcmE+TWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgaW4gcGh5c2ljYWxseSByZXNp ZGVudCBkYXRhCisgICAgICAgIHBhZ2VzIG1hcHBlZCBieSB0aGUgYWxsb2NhdG9yLCBjb21wcmlz aW5nIGFsbCBwYWdlcyBkZWRpY2F0ZWQgdG8KKyAgICAgICAgYWxsb2NhdG9yIG1ldGFkYXRhLCBw YWdlcyBiYWNraW5nIGFjdGl2ZSBhbGxvY2F0aW9ucywgYW5kIHVudXNlZCBkaXJ0eQorICAgICAg ICBwYWdlcy4gIFRoaXMgaXMgYSBtYXhpbXVtIHJhdGhlciB0aGFuIHByZWNpc2UgYmVjYXVzZSBw YWdlcyBtYXkgbm90CisgICAgICAgIGFjdHVhbGx5IGJlIHBoeXNpY2FsbHkgcmVzaWRlbnQgaWYg dGhleSBjb3JyZXNwb25kIHRvIGRlbWFuZC16ZXJvZWQKKyAgICAgICAgdmlydHVhbCBtZW1vcnkg dGhhdCBoYXMgbm90IHlldCBiZWVuIHRvdWNoZWQuICBUaGlzIGlzIGEgbXVsdGlwbGUgb2YgdGhl CisgICAgICAgIHBhZ2Ugc2l6ZSwgYW5kIGlzIGxhcmdlciB0aGFuIDxsaW5rCisgICAgICAgIGxp bmtlbmQ9InN0YXRzLmFjdGl2ZSI+PG1hbGxjdGw+c3RhdHMuYWN0aXZlPC9tYWxsY3RsPjwvbGlu az4uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgICAgPHZh cmxpc3RlbnRyeSBpZD0ic3RhdHMubWFwcGVkIj4KKyAgICAgICAgPHRlcm0+CisgICAgICAgICAg PG1hbGxjdGw+c3RhdHMubWFwcGVkPC9tYWxsY3RsPgorICAgICAgICAgICg8dHlwZT5zaXplX3Q8 L3R5cGU+KQorICAgICAgICAgIDxsaXRlcmFsPnItPC9saXRlcmFsPgorICAgICAgICAgIFs8b3B0 aW9uPi0tZW5hYmxlLXN0YXRzPC9vcHRpb24+XQorICAgICAgICA8L3Rlcm0+CisgICAgICAgIDxs aXN0aXRlbT48cGFyYT5Ub3RhbCBudW1iZXIgb2YgYnl0ZXMgaW4gYWN0aXZlIGV4dGVudHMgbWFw cGVkIGJ5IHRoZQorICAgICAgICBhbGxvY2F0b3IuICBUaGlzIGlzIGxhcmdlciB0aGFuIDxsaW5r CisgICAgICAgIGxpbmtlbmQ9InN0YXRzLmFjdGl2ZSI+PG1hbGxjdGw+c3RhdHMuYWN0aXZlPC9t YWxsY3RsPjwvbGluaz4uICBUaGlzCisgICAgICAgIGRvZXMgbm90IGluY2x1ZGUgaW5hY3RpdmUg ZXh0ZW50cywgZXZlbiB0aG9zZSB0aGF0IGNvbnRhaW4gdW51c2VkIGRpcnR5CisgICAgICAgIHBh Z2VzLCB3aGljaCBtZWFucyB0aGF0IHRoZXJlIGlzIG5vIHN0cmljdCBvcmRlcmluZyBiZXR3ZWVu IHRoaXMgYW5kCisgICAgICAgIDxsaW5rCisgICAgICAgIGxpbmtlbmQ9InN0YXRzLnJlc2lkZW50 Ij48bWFsbGN0bD5zdGF0cy5yZXNpZGVudDwvbWFsbGN0bD48L2xpbms+LjwvcGFyYT48L2xpc3Rp dGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9InN0 YXRzLnJldGFpbmVkIj4KKyAgICAgICAgPHRlcm0+CisgICAgICAgICAgPG1hbGxjdGw+c3RhdHMu cmV0YWluZWQ8L21hbGxjdGw+CisgICAgICAgICAgKDx0eXBlPnNpemVfdDwvdHlwZT4pCisgICAg ICAgICAgPGxpdGVyYWw+ci08L2xpdGVyYWw+CisgICAgICAgICAgWzxvcHRpb24+LS1lbmFibGUt c3RhdHM8L29wdGlvbj5dCisgICAgICAgIDwvdGVybT4KKyAgICAgICAgPGxpc3RpdGVtPjxwYXJh PlRvdGFsIG51bWJlciBvZiBieXRlcyBpbiB2aXJ0dWFsIG1lbW9yeSBtYXBwaW5ncyB0aGF0Cisg ICAgICAgIHdlcmUgcmV0YWluZWQgcmF0aGVyIHRoYW4gYmVpbmcgcmV0dXJuZWQgdG8gdGhlIG9w ZXJhdGluZyBzeXN0ZW0gdmlhCisgICAgICAgIGUuZy4gPGNpdGVyZWZlbnRyeT48cmVmZW50cnl0 aXRsZT5tdW5tYXA8L3JlZmVudHJ5dGl0bGU+CisgICAgICAgIDxtYW52b2xudW0+MjwvbWFudm9s bnVtPjwvY2l0ZXJlZmVudHJ5PiBvciBzaW1pbGFyLiAgUmV0YWluZWQgdmlydHVhbAorICAgICAg ICBtZW1vcnkgaXMgdHlwaWNhbGx5IHVudG91Y2hlZCwgZGVjb21taXR0ZWQsIG9yIHB1cmdlZCwg c28gaXQgaGFzIG5vCisgICAgICAgIHN0cm9uZ2x5IGFzc29jaWF0ZWQgcGh5c2ljYWwgbWVtb3J5 IChzZWUgPGxpbmsKKyAgICAgICAgbGlua2VuZD0iYXJlbmEuaS5leHRlbnRfaG9va3MiPmV4dGVu dCBob29rczwvbGluaz4gZm9yIGRldGFpbHMpLgorICAgICAgICBSZXRhaW5lZCBtZW1vcnkgaXMg ZXhjbHVkZWQgZnJvbSBtYXBwZWQgbWVtb3J5IHN0YXRpc3RpY3MsIGUuZy4gPGxpbmsKKyAgICAg ICAgbGlua2VuZD0ic3RhdHMubWFwcGVkIj48bWFsbGN0bD5zdGF0cy5tYXBwZWQ8L21hbGxjdGw+ PC9saW5rPi4KKyAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRy eT4KKworICAgICAgPHZhcmxpc3RlbnRyeSBpZD0ic3RhdHMuemVyb19yZWFsbG9jcyI+CisgICAg ICAgIDx0ZXJtPgorICAgICAgICAgIDxtYWxsY3RsPnN0YXRzLnplcm9fcmVhbGxvY3M8L21hbGxj dGw+CisgICAgICAgICAgKDx0eXBlPnNpemVfdDwvdHlwZT4pCisgICAgICAgICAgPGxpdGVyYWw+ ci08L2xpdGVyYWw+CisgICAgICAgICAgWzxvcHRpb24+LS1lbmFibGUtc3RhdHM8L29wdGlvbj5d CisgICAgICAgIDwvdGVybT4KKyAgICAgICAgPGxpc3RpdGVtPjxwYXJhPk51bWJlciBvZiB0aW1l cyB0aGF0IHRoZSA8ZnVuY3Rpb24+cmVhbGxvYygpPC9mdW5jdGlvbj4KKyAgICAgICAgd2FzIGNh bGxlZCB3aXRoIGEgbm9uLTxjb25zdGFudD5OVUxMPC9jb25zdGFudD4gcG9pbnRlciBhcmd1bWVu dCBhbmQgYQorICAgICAgICA8Y29uc3RhbnQ+MDwvY29uc3RhbnQ+IHNpemUgYXJndW1lbnQuICBU aGlzIGlzIGEgZnVuZGFtZW50YWxseSB1bnNhZmUKKyAgICAgICAgcGF0dGVybiBpbiBwb3J0YWJs ZSBwcm9ncmFtczsgc2VlIDxsaW5rIGxpbmtlbmQ9Im9wdC56ZXJvX3JlYWxsb2MiPgorICAgICAg ICA8bWFsbGN0bD5vcHQuemVyb19yZWFsbG9jPC9tYWxsY3RsPjwvbGluaz4gZm9yIGRldGFpbHMu CisgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAg ICAgIDx2YXJsaXN0ZW50cnkgaWQ9InN0YXRzLmJhY2tncm91bmRfdGhyZWFkLm51bV90aHJlYWRz Ij4KKyAgICAgICAgPHRlcm0+CisgICAgICAgICAgPG1hbGxjdGw+c3RhdHMuYmFja2dyb3VuZF90 aHJlYWQubnVtX3RocmVhZHM8L21hbGxjdGw+CisgICAgICAgICAgKDx0eXBlPnNpemVfdDwvdHlw ZT4pCisgICAgICAgICAgPGxpdGVyYWw+ci08L2xpdGVyYWw+CisgICAgICAgICAgWzxvcHRpb24+ LS1lbmFibGUtc3RhdHM8L29wdGlvbj5dCisgICAgICAgIDwvdGVybT4KKyAgICAgICAgPGxpc3Rp dGVtPjxwYXJhPiBOdW1iZXIgb2YgPGxpbmsgbGlua2VuZD0iYmFja2dyb3VuZF90aHJlYWQiPmJh Y2tncm91bmQKKyAgICAgICAgdGhyZWFkczwvbGluaz4gcnVubmluZyBjdXJyZW50bHkuPC9wYXJh PjwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgICAgPHZhcmxpc3RlbnRy eSBpZD0ic3RhdHMuYmFja2dyb3VuZF90aHJlYWQubnVtX3J1bnMiPgorICAgICAgICA8dGVybT4K KyAgICAgICAgICA8bWFsbGN0bD5zdGF0cy5iYWNrZ3JvdW5kX3RocmVhZC5udW1fcnVuczwvbWFs bGN0bD4KKyAgICAgICAgICAoPHR5cGU+dWludDY0X3Q8L3R5cGU+KQorICAgICAgICAgIDxsaXRl cmFsPnItPC9saXRlcmFsPgorICAgICAgICAgIFs8b3B0aW9uPi0tZW5hYmxlLXN0YXRzPC9vcHRp b24+XQorICAgICAgICA8L3Rlcm0+CisgICAgICAgIDxsaXN0aXRlbT48cGFyYT4gVG90YWwgbnVt YmVyIG9mIHJ1bnMgZnJvbSBhbGwgPGxpbmsKKyAgICAgICAgbGlua2VuZD0iYmFja2dyb3VuZF90 aHJlYWQiPmJhY2tncm91bmQgdGhyZWFkczwvbGluaz4uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAg ICA8L3Zhcmxpc3RlbnRyeT4KKworICAgICAgPHZhcmxpc3RlbnRyeSBpZD0ic3RhdHMuYmFja2dy b3VuZF90aHJlYWQucnVuX2ludGVydmFsIj4KKyAgICAgICAgPHRlcm0+CisgICAgICAgICAgPG1h bGxjdGw+c3RhdHMuYmFja2dyb3VuZF90aHJlYWQucnVuX2ludGVydmFsPC9tYWxsY3RsPgorICAg ICAgICAgICg8dHlwZT51aW50NjRfdDwvdHlwZT4pCisgICAgICAgICAgPGxpdGVyYWw+ci08L2xp dGVyYWw+CisgICAgICAgICAgWzxvcHRpb24+LS1lbmFibGUtc3RhdHM8L29wdGlvbj5dCisgICAg ICAgIDwvdGVybT4KKyAgICAgICAgPGxpc3RpdGVtPjxwYXJhPiBBdmVyYWdlIHJ1biBpbnRlcnZh bCBpbiBuYW5vc2Vjb25kcyBvZiA8bGluaworICAgICAgICBsaW5rZW5kPSJiYWNrZ3JvdW5kX3Ro cmVhZCI+YmFja2dyb3VuZCB0aHJlYWRzPC9saW5rPi48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAg IDwvdmFybGlzdGVudHJ5PgorCisgICAgICA8dmFybGlzdGVudHJ5IGlkPSJzdGF0cy5tdXRleGVz LmN0bCI+CisgICAgICAgIDx0ZXJtPgorICAgICAgICAgIDxtYWxsY3RsPnN0YXRzLm11dGV4ZXMu Y3RsLntjb3VudGVyfTs8L21hbGxjdGw+CisgICAgICAgICAgKDx0eXBlPmNvdW50ZXIgc3BlY2lm aWMgdHlwZTwvdHlwZT4pCisgICAgICAgICAgPGxpdGVyYWw+ci08L2xpdGVyYWw+CisgICAgICAg ICAgWzxvcHRpb24+LS1lbmFibGUtc3RhdHM8L29wdGlvbj5dCisgICAgICAgIDwvdGVybT4KKyAg ICAgICAgPGxpc3RpdGVtPjxwYXJhPlN0YXRpc3RpY3Mgb24gPHZhcm5hbWU+Y3RsPC92YXJuYW1l PiBtdXRleCAoZ2xvYmFsCisgICAgICAgIHNjb3BlOyBtYWxsY3RsIHJlbGF0ZWQpLiAgPG1hbGxj dGw+e2NvdW50ZXJ9PC9tYWxsY3RsPiBpcyBvbmUgb2YgdGhlCisgICAgICAgIGNvdW50ZXJzIGJl bG93OjwvcGFyYT4KKyAgICAgICAgPHZhcmxpc3RlbnRyeSBpZD0ibXV0ZXhfY291bnRlcnMiPgor ICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48dmFybmFtZT5udW1fb3BzPC92YXJuYW1lPiAoPHR5 cGU+dWludDY0X3Q8L3R5cGU+KToKKyAgICAgICAgICBUb3RhbCBudW1iZXIgb2YgbG9jayBhY3F1 aXNpdGlvbiBvcGVyYXRpb25zIG9uIHRoaXMgbXV0ZXguPC9wYXJhPgorCisJICA8cGFyYT48dmFy bmFtZT5udW1fc3Bpbl9hY3E8L3Zhcm5hbWU+ICg8dHlwZT51aW50NjRfdDwvdHlwZT4pOiBOdW1i ZXIKKwkgIG9mIHRpbWVzIHRoZSBtdXRleCB3YXMgc3Bpbi1hY3F1aXJlZC4gIFdoZW4gdGhlIG11 dGV4IGlzIGN1cnJlbnRseQorCSAgbG9ja2VkIGFuZCBjYW5ub3QgYmUgYWNxdWlyZWQgaW1tZWRp YXRlbHksIGEgc2hvcnQgcGVyaW9kIG9mCisJICBzcGluLXJldHJ5IHdpdGhpbiBqZW1hbGxvYyB3 aWxsIGJlIHBlcmZvcm1lZC4gIEFjcXVpcmVkIHRocm91Z2ggc3BpbgorCSAgZ2VuZXJhbGx5IG1l YW5zIHRoZSBjb250ZW50aW9uIHdhcyBsaWdodHdlaWdodCBhbmQgbm90IGNhdXNpbmcgY29udGV4 dAorCSAgc3dpdGNoZXMuPC9wYXJhPgorCisJICA8cGFyYT48dmFybmFtZT5udW1fd2FpdDwvdmFy bmFtZT4gKDx0eXBlPnVpbnQ2NF90PC90eXBlPik6IE51bWJlciBvZgorCSAgdGltZXMgdGhlIG11 dGV4IHdhcyB3YWl0LWFjcXVpcmVkLCB3aGljaCBtZWFucyB0aGUgbXV0ZXggY29udGVudGlvbgor CSAgd2FzIG5vdCBzb2x2ZWQgYnkgc3Bpbi1yZXRyeSwgYW5kIGJsb2NraW5nIG9wZXJhdGlvbiB3 YXMgbGlrZWx5CisJICBpbnZvbHZlZCBpbiBvcmRlciB0byBhY3F1aXJlIHRoZSBtdXRleC4gIFRo aXMgZXZlbnQgZ2VuZXJhbGx5IGltcGxpZXMKKwkgIGhpZ2hlciBjb3N0IC8gbG9uZ2VyIGRlbGF5 LCBhbmQgc2hvdWxkIGJlIGludmVzdGlnYXRlZCBpZiBpdCBoYXBwZW5zCisJICBvZnRlbi48L3Bh cmE+CisKKwkgIDxwYXJhPjx2YXJuYW1lPm1heF93YWl0X3RpbWU8L3Zhcm5hbWU+ICg8dHlwZT51 aW50NjRfdDwvdHlwZT4pOgorCSAgTWF4aW11bSBsZW5ndGggb2YgdGltZSBpbiBuYW5vc2Vjb25k cyBzcGVudCBvbiBhIHNpbmdsZSB3YWl0LWFjcXVpcmVkCisJICBsb2NrIG9wZXJhdGlvbi4gIE5v dGUgdGhhdCB0byBhdm9pZCBwcm9maWxpbmcgb3ZlcmhlYWQgb24gdGhlIGNvbW1vbgorCSAgcGF0 aCwgdGhpcyBkb2VzIG5vdCBjb25zaWRlciBzcGluLWFjcXVpcmVkIGNhc2VzLjwvcGFyYT4KKwor CSAgPHBhcmE+PHZhcm5hbWU+dG90YWxfd2FpdF90aW1lPC92YXJuYW1lPiAoPHR5cGU+dWludDY0 X3Q8L3R5cGU+KToKKwkgIEN1bXVsYXRpdmUgdGltZSBpbiBuYW5vc2Vjb25kcyBzcGVudCBvbiB3 YWl0LWFjcXVpcmVkIGxvY2sgb3BlcmF0aW9ucy4KKwkgIFNpbWlsYXJseSwgc3Bpbi1hY3F1aXJl ZCBjYXNlcyBhcmUgbm90IGNvbnNpZGVyZWQuPC9wYXJhPgorCisJICA8cGFyYT48dmFybmFtZT5t YXhfbnVtX3RoZHM8L3Zhcm5hbWU+ICg8dHlwZT51aW50MzJfdDwvdHlwZT4pOiBNYXhpbXVtCisJ ICBudW1iZXIgb2YgdGhyZWFkcyB3YWl0aW5nIG9uIHRoaXMgbXV0ZXggc2ltdWx0YW5lb3VzbHku ICBTaW1pbGFybHksCisJICBzcGluLWFjcXVpcmVkIGNhc2VzIGFyZSBub3QgY29uc2lkZXJlZC48 L3BhcmE+CisKKwkgIDxwYXJhPjx2YXJuYW1lPm51bV9vd25lcl9zd2l0Y2g8L3Zhcm5hbWU+ICg8 dHlwZT51aW50NjRfdDwvdHlwZT4pOgorCSAgTnVtYmVyIG9mIHRpbWVzIHRoZSBjdXJyZW50IG11 dGV4IG93bmVyIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBwcmV2aW91cworCSAgb25lLiAgVGhpcyBl dmVudCBkb2VzIG5vdCBnZW5lcmFsbHkgaW1wbHkgYW4gaXNzdWU7IHJhdGhlciBpdCBpcyBhbgor CSAgaW5kaWNhdG9yIG9mIGhvdyBvZnRlbiB0aGUgcHJvdGVjdGVkIGRhdGEgYXJlIGFjY2Vzc2Vk IGJ5IGRpZmZlcmVudAorCSAgdGhyZWFkcy4KKwkgIDwvcGFyYT4KKwkgIDwvbGlzdGl0ZW0+CisJ PC92YXJsaXN0ZW50cnk+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorCisg ICAgICA8dmFybGlzdGVudHJ5IGlkPSJzdGF0cy5tdXRleGVzLmJhY2tncm91bmRfdGhyZWFkIj4K KyAgICAgICAgPHRlcm0+CisgICAgICAgICAgPG1hbGxjdGw+c3RhdHMubXV0ZXhlcy5iYWNrZ3Jv dW5kX3RocmVhZC57Y291bnRlcn08L21hbGxjdGw+CisJICAoPHR5cGU+Y291bnRlciBzcGVjaWZp YyB0eXBlPC90eXBlPikgPGxpdGVyYWw+ci08L2xpdGVyYWw+CisgICAgICAgICAgWzxvcHRpb24+ LS1lbmFibGUtc3RhdHM8L29wdGlvbj5dCisgICAgICAgIDwvdGVybT4KKyAgICAgICAgPGxpc3Rp dGVtPjxwYXJhPlN0YXRpc3RpY3Mgb24gPHZhcm5hbWU+YmFja2dyb3VuZF90aHJlYWQ8L3Zhcm5h bWU+IG11dGV4CisgICAgICAgIChnbG9iYWwgc2NvcGU7IDxsaW5rCisgICAgICAgIGxpbmtlbmQ9 ImJhY2tncm91bmRfdGhyZWFkIj48bWFsbGN0bD5iYWNrZ3JvdW5kX3RocmVhZDwvbWFsbGN0bD48 L2xpbms+CisgICAgICAgIHJlbGF0ZWQpLiAgPG1hbGxjdGw+e2NvdW50ZXJ9PC9tYWxsY3RsPiBp cyBvbmUgb2YgdGhlIGNvdW50ZXJzIGluIDxsaW5rCisgICAgICAgIGxpbmtlbmQ9Im11dGV4X2Nv dW50ZXJzIj5tdXRleCBwcm9maWxpbmcKKyAgICAgICAgY291bnRlcnM8L2xpbms+LjwvcGFyYT48 L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAgIDx2YXJsaXN0ZW50cnkg aWQ9InN0YXRzLm11dGV4ZXMucHJvZiI+CisgICAgICAgIDx0ZXJtPgorICAgICAgICAgIDxtYWxs Y3RsPnN0YXRzLm11dGV4ZXMucHJvZi57Y291bnRlcn08L21hbGxjdGw+CisJICAoPHR5cGU+Y291 bnRlciBzcGVjaWZpYyB0eXBlPC90eXBlPikgPGxpdGVyYWw+ci08L2xpdGVyYWw+CisgICAgICAg ICAgWzxvcHRpb24+LS1lbmFibGUtc3RhdHM8L29wdGlvbj5dCisgICAgICAgIDwvdGVybT4KKyAg ICAgICAgPGxpc3RpdGVtPjxwYXJhPlN0YXRpc3RpY3Mgb24gPHZhcm5hbWU+cHJvZjwvdmFybmFt ZT4gbXV0ZXggKGdsb2JhbAorICAgICAgICBzY29wZTsgcHJvZmlsaW5nIHJlbGF0ZWQpLiAgPG1h bGxjdGw+e2NvdW50ZXJ9PC9tYWxsY3RsPiBpcyBvbmUgb2YgdGhlCisgICAgICAgIGNvdW50ZXJz IGluIDxsaW5rIGxpbmtlbmQ9Im11dGV4X2NvdW50ZXJzIj5tdXRleCBwcm9maWxpbmcKKyAgICAg ICAgY291bnRlcnM8L2xpbms+LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50 cnk+CisKKyAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9InN0YXRzLm11dGV4ZXMucHJvZl90aGRzX2Rh dGEiPgorICAgICAgICA8dGVybT4KKyAgICAgICAgICA8bWFsbGN0bD5zdGF0cy5tdXRleGVzLnBy b2ZfdGhkc19kYXRhLntjb3VudGVyfTwvbWFsbGN0bD4KKwkgICg8dHlwZT5jb3VudGVyIHNwZWNp ZmljIHR5cGU8L3R5cGU+KSA8bGl0ZXJhbD5yLTwvbGl0ZXJhbD4KKyAgICAgICAgICBbPG9wdGlv bj4tLWVuYWJsZS1zdGF0czwvb3B0aW9uPl0KKyAgICAgICAgPC90ZXJtPgorCTxsaXN0aXRlbT48 cGFyYT5TdGF0aXN0aWNzIG9uIDx2YXJuYW1lPnByb2Y8L3Zhcm5hbWU+IHRocmVhZHMgZGF0YSBt dXRleAorCShnbG9iYWwgc2NvcGU7IHByb2ZpbGluZyByZWxhdGVkKS4gIDxtYWxsY3RsPntjb3Vu dGVyfTwvbWFsbGN0bD4gaXMgb25lCisJb2YgdGhlIGNvdW50ZXJzIGluIDxsaW5rIGxpbmtlbmQ9 Im11dGV4X2NvdW50ZXJzIj5tdXRleCBwcm9maWxpbmcKKyAgICAgICAgY291bnRlcnM8L2xpbms+ LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAgIDx2YXJs aXN0ZW50cnkgaWQ9InN0YXRzLm11dGV4ZXMucHJvZl9kdW1wIj4KKyAgICAgICAgPHRlcm0+Cisg ICAgICAgICAgPG1hbGxjdGw+c3RhdHMubXV0ZXhlcy5wcm9mX2R1bXAue2NvdW50ZXJ9PC9tYWxs Y3RsPgorCSAgKDx0eXBlPmNvdW50ZXIgc3BlY2lmaWMgdHlwZTwvdHlwZT4pIDxsaXRlcmFsPnIt PC9saXRlcmFsPgorICAgICAgICAgIFs8b3B0aW9uPi0tZW5hYmxlLXN0YXRzPC9vcHRpb24+XQor ICAgICAgICA8L3Rlcm0+CisJPGxpc3RpdGVtPjxwYXJhPlN0YXRpc3RpY3Mgb24gPHZhcm5hbWU+ cHJvZjwvdmFybmFtZT4gZHVtcGluZyBtdXRleAorCShnbG9iYWwgc2NvcGU7IHByb2ZpbGluZyBy ZWxhdGVkKS4gIDxtYWxsY3RsPntjb3VudGVyfTwvbWFsbGN0bD4gaXMgb25lCisJb2YgdGhlIGNv dW50ZXJzIGluIDxsaW5rIGxpbmtlbmQ9Im11dGV4X2NvdW50ZXJzIj5tdXRleCBwcm9maWxpbmcK KyAgICAgICAgY291bnRlcnM8L2xpbms+LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgPC92YXJs aXN0ZW50cnk+CisKKyAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9InN0YXRzLm11dGV4ZXMucmVzZXQi PgorICAgICAgICA8dGVybT4KKyAgICAgICAgICA8bWFsbGN0bD5zdGF0cy5tdXRleGVzLnJlc2V0 PC9tYWxsY3RsPgorCSAgKDx0eXBlPnZvaWQ8L3R5cGU+KSA8bGl0ZXJhbD4tLTwvbGl0ZXJhbD4K KyAgICAgICAgICBbPG9wdGlvbj4tLWVuYWJsZS1zdGF0czwvb3B0aW9uPl0KKyAgICAgICAgPC90 ZXJtPgorICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+UmVzZXQgYWxsIG11dGV4IHByb2ZpbGUgc3Rh dGlzdGljcywgaW5jbHVkaW5nIGdsb2JhbAorICAgICAgICBtdXRleGVzLCBhcmVuYSBtdXRleGVz IGFuZCBiaW4gbXV0ZXhlcy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5 PgorCisgICAgICA8dmFybGlzdGVudHJ5IGlkPSJzdGF0cy5hcmVuYXMuaS5kc3MiPgorICAgICAg ICA8dGVybT4KKyAgICAgICAgICA8bWFsbGN0bD5zdGF0cy5hcmVuYXMuJmx0O2kmZ3Q7LmRzczwv bWFsbGN0bD4KKyAgICAgICAgICAoPHR5cGU+Y29uc3QgY2hhciAqPC90eXBlPikKKyAgICAgICAg ICA8bGl0ZXJhbD5yLTwvbGl0ZXJhbD4KKyAgICAgICAgPC90ZXJtPgorICAgICAgICA8bGlzdGl0 ZW0+PHBhcmE+ZHNzICg8Y2l0ZXJlZmVudHJ5PjxyZWZlbnRyeXRpdGxlPnNicms8L3JlZmVudHJ5 dGl0bGU+CisgICAgICAgIDxtYW52b2xudW0+MjwvbWFudm9sbnVtPjwvY2l0ZXJlZmVudHJ5Pikg YWxsb2NhdGlvbiBwcmVjZWRlbmNlIGFzCisgICAgICAgIHJlbGF0ZWQgdG8gPGNpdGVyZWZlbnRy eT48cmVmZW50cnl0aXRsZT5tbWFwPC9yZWZlbnRyeXRpdGxlPgorICAgICAgICA8bWFudm9sbnVt PjI8L21hbnZvbG51bT48L2NpdGVyZWZlbnRyeT4gYWxsb2NhdGlvbi4gIFNlZSA8bGluaworICAg ICAgICBsaW5rZW5kPSJvcHQuZHNzIj48bWFsbGN0bD5vcHQuZHNzPC9tYWxsY3RsPjwvbGluaz4g Zm9yIGRldGFpbHMuCisgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0 ZW50cnk+CisKKyAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9InN0YXRzLmFyZW5hcy5pLmRpcnR5X2Rl Y2F5X21zIj4KKyAgICAgICAgPHRlcm0+CisgICAgICAgICAgPG1hbGxjdGw+c3RhdHMuYXJlbmFz LiZsdDtpJmd0Oy5kaXJ0eV9kZWNheV9tczwvbWFsbGN0bD4KKyAgICAgICAgICAoPHR5cGU+c3Np emVfdDwvdHlwZT4pCisgICAgICAgICAgPGxpdGVyYWw+ci08L2xpdGVyYWw+CisgICAgICAgIDwv dGVybT4KKyAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkFwcHJveGltYXRlIHRpbWUgaW4gbWlsbGlz ZWNvbmRzIGZyb20gdGhlIGNyZWF0aW9uIG9mIGEKKyAgICAgICAgc2V0IG9mIHVudXNlZCBkaXJ0 eSBwYWdlcyB1bnRpbCBhbiBlcXVpdmFsZW50IHNldCBvZiB1bnVzZWQgZGlydHkgcGFnZXMKKyAg ICAgICAgaXMgcHVyZ2VkIGFuZC9vciByZXVzZWQuICBTZWUgPGxpbmsKKyAgICAgICAgbGlua2Vu ZD0ib3B0LmRpcnR5X2RlY2F5X21zIj48bWFsbGN0bD5vcHQuZGlydHlfZGVjYXlfbXM8L21hbGxj dGw+PC9saW5rPgorICAgICAgICBmb3IgZGV0YWlscy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAg IDwvdmFybGlzdGVudHJ5PgorCisgICAgICA8dmFybGlzdGVudHJ5IGlkPSJzdGF0cy5hcmVuYXMu aS5tdXp6eV9kZWNheV9tcyI+CisgICAgICAgIDx0ZXJtPgorICAgICAgICAgIDxtYWxsY3RsPnN0 YXRzLmFyZW5hcy4mbHQ7aSZndDsubXV6enlfZGVjYXlfbXM8L21hbGxjdGw+CisgICAgICAgICAg KDx0eXBlPnNzaXplX3Q8L3R5cGU+KQorICAgICAgICAgIDxsaXRlcmFsPnItPC9saXRlcmFsPgor ICAgICAgICA8L3Rlcm0+CisgICAgICAgIDxsaXN0aXRlbT48cGFyYT5BcHByb3hpbWF0ZSB0aW1l IGluIG1pbGxpc2Vjb25kcyBmcm9tIHRoZSBjcmVhdGlvbiBvZiBhCisgICAgICAgIHNldCBvZiB1 bnVzZWQgbXV6enkgcGFnZXMgdW50aWwgYW4gZXF1aXZhbGVudCBzZXQgb2YgdW51c2VkIG11enp5 IHBhZ2VzCisgICAgICAgIGlzIHB1cmdlZCBhbmQvb3IgcmV1c2VkLiAgU2VlIDxsaW5rCisgICAg ICAgIGxpbmtlbmQ9Im9wdC5tdXp6eV9kZWNheV9tcyI+PG1hbGxjdGw+b3B0Lm11enp5X2RlY2F5 X21zPC9tYWxsY3RsPjwvbGluaz4KKyAgICAgICAgZm9yIGRldGFpbHMuPC9wYXJhPjwvbGlzdGl0 ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgICAgPHZhcmxpc3RlbnRyeSBpZD0ic3Rh dHMuYXJlbmFzLmkubnRocmVhZHMiPgorICAgICAgICA8dGVybT4KKyAgICAgICAgICA8bWFsbGN0 bD5zdGF0cy5hcmVuYXMuJmx0O2kmZ3Q7Lm50aHJlYWRzPC9tYWxsY3RsPgorICAgICAgICAgICg8 dHlwZT51bnNpZ25lZDwvdHlwZT4pCisgICAgICAgICAgPGxpdGVyYWw+ci08L2xpdGVyYWw+Cisg ICAgICAgIDwvdGVybT4KKyAgICAgICAgPGxpc3RpdGVtPjxwYXJhPk51bWJlciBvZiB0aHJlYWRz IGN1cnJlbnRseSBhc3NpZ25lZCB0bworICAgICAgICBhcmVuYS48L3BhcmE+PC9saXN0aXRlbT4K KyAgICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAgICA8dmFybGlzdGVudHJ5IGlkPSJzdGF0cy5h cmVuYXMuaS51cHRpbWUiPgorICAgICAgICA8dGVybT4KKyAgICAgICAgICA8bWFsbGN0bD5zdGF0 cy5hcmVuYXMuJmx0O2kmZ3Q7LnVwdGltZTwvbWFsbGN0bD4KKyAgICAgICAgICAoPHR5cGU+dWlu dDY0X3Q8L3R5cGU+KQorICAgICAgICAgIDxsaXRlcmFsPnItPC9saXRlcmFsPgorICAgICAgICA8 L3Rlcm0+CisgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaW1lIGVsYXBzZWQgKGluIG5hbm9zZWNv bmRzKSBzaW5jZSB0aGUgYXJlbmEgd2FzCisgICAgICAgIGNyZWF0ZWQuICBJZiAmbHQ7aSZndDsg ZXF1YWxzIDxjb25zdGFudD4wPC9jb25zdGFudD4gb3IKKyAgICAgICAgPGNvbnN0YW50Pk1BTExD VExfQVJFTkFTX0FMTDwvY29uc3RhbnQ+LCB0aGlzIGlzIHRoZSB1cHRpbWUgc2luY2UgbWFsbG9j CisgICAgICAgIGluaXRpYWxpemF0aW9uLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgPC92YXJs aXN0ZW50cnk+CisKKyAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9InN0YXRzLmFyZW5hcy5pLnBhY3Rp dmUiPgorICAgICAgICA8dGVybT4KKyAgICAgICAgICA8bWFsbGN0bD5zdGF0cy5hcmVuYXMuJmx0 O2kmZ3Q7LnBhY3RpdmU8L21hbGxjdGw+CisgICAgICAgICAgKDx0eXBlPnNpemVfdDwvdHlwZT4p CisgICAgICAgICAgPGxpdGVyYWw+ci08L2xpdGVyYWw+CisgICAgICAgIDwvdGVybT4KKyAgICAg ICAgPGxpc3RpdGVtPjxwYXJhPk51bWJlciBvZiBwYWdlcyBpbiBhY3RpdmUgZXh0ZW50cy48L3Bh cmE+PC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAgICA8dmFybGlzdGVu dHJ5IGlkPSJzdGF0cy5hcmVuYXMuaS5wZGlydHkiPgorICAgICAgICA8dGVybT4KKyAgICAgICAg ICA8bWFsbGN0bD5zdGF0cy5hcmVuYXMuJmx0O2kmZ3Q7LnBkaXJ0eTwvbWFsbGN0bD4KKyAgICAg ICAgICAoPHR5cGU+c2l6ZV90PC90eXBlPikKKyAgICAgICAgICA8bGl0ZXJhbD5yLTwvbGl0ZXJh bD4KKyAgICAgICAgPC90ZXJtPgorICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+TnVtYmVyIG9mIHBh Z2VzIHdpdGhpbiB1bnVzZWQgZXh0ZW50cyB0aGF0IGFyZQorICAgICAgICBwb3RlbnRpYWxseSBk aXJ0eSwgYW5kIGZvciB3aGljaCA8ZnVuY3Rpb24+bWFkdmlzZSgpPC9mdW5jdGlvbj4gb3IKKyAg ICAgICAgc2ltaWxhciBoYXMgbm90IGJlZW4gY2FsbGVkLiAgU2VlIDxsaW5rCisgICAgICAgIGxp bmtlbmQ9Im9wdC5kaXJ0eV9kZWNheV9tcyI+PG1hbGxjdGw+b3B0LmRpcnR5X2RlY2F5X21zPC9t YWxsY3RsPjwvbGluaz4KKyAgICAgICAgZm9yIGEgZGVzY3JpcHRpb24gb2YgZGlydHkgcGFnZXMu PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgICAgPHZhcmxp c3RlbnRyeSBpZD0ic3RhdHMuYXJlbmFzLmkucG11enp5Ij4KKyAgICAgICAgPHRlcm0+CisgICAg ICAgICAgPG1hbGxjdGw+c3RhdHMuYXJlbmFzLiZsdDtpJmd0Oy5wbXV6enk8L21hbGxjdGw+Cisg ICAgICAgICAgKDx0eXBlPnNpemVfdDwvdHlwZT4pCisgICAgICAgICAgPGxpdGVyYWw+ci08L2xp dGVyYWw+CisgICAgICAgIDwvdGVybT4KKyAgICAgICAgPGxpc3RpdGVtPjxwYXJhPk51bWJlciBv ZiBwYWdlcyB3aXRoaW4gdW51c2VkIGV4dGVudHMgdGhhdCBhcmUgbXV6enkuCisgICAgICAgIFNl ZSA8bGluaworICAgICAgICBsaW5rZW5kPSJvcHQubXV6enlfZGVjYXlfbXMiPjxtYWxsY3RsPm9w dC5tdXp6eV9kZWNheV9tczwvbWFsbGN0bD48L2xpbms+CisgICAgICAgIGZvciBhIGRlc2NyaXB0 aW9uIG9mIG11enp5IHBhZ2VzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50 cnk+CisKKyAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9InN0YXRzLmFyZW5hcy5pLm1hcHBlZCI+Cisg ICAgICAgIDx0ZXJtPgorICAgICAgICAgIDxtYWxsY3RsPnN0YXRzLmFyZW5hcy4mbHQ7aSZndDsu bWFwcGVkPC9tYWxsY3RsPgorICAgICAgICAgICg8dHlwZT5zaXplX3Q8L3R5cGU+KQorICAgICAg ICAgIDxsaXRlcmFsPnItPC9saXRlcmFsPgorICAgICAgICAgIFs8b3B0aW9uPi0tZW5hYmxlLXN0 YXRzPC9vcHRpb24+XQorICAgICAgICA8L3Rlcm0+CisgICAgICAgIDxsaXN0aXRlbT48cGFyYT5O dW1iZXIgb2YgbWFwcGVkIGJ5dGVzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0 ZW50cnk+CisKKyAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9InN0YXRzLmFyZW5hcy5pLnJldGFpbmVk Ij4KKyAgICAgICAgPHRlcm0+CisgICAgICAgICAgPG1hbGxjdGw+c3RhdHMuYXJlbmFzLiZsdDtp Jmd0Oy5yZXRhaW5lZDwvbWFsbGN0bD4KKyAgICAgICAgICAoPHR5cGU+c2l6ZV90PC90eXBlPikK KyAgICAgICAgICA8bGl0ZXJhbD5yLTwvbGl0ZXJhbD4KKyAgICAgICAgICBbPG9wdGlvbj4tLWVu YWJsZS1zdGF0czwvb3B0aW9uPl0KKyAgICAgICAgPC90ZXJtPgorICAgICAgICA8bGlzdGl0ZW0+ PHBhcmE+TnVtYmVyIG9mIHJldGFpbmVkIGJ5dGVzLiAgU2VlIDxsaW5rCisgICAgICAgIGxpbmtl bmQ9InN0YXRzLnJldGFpbmVkIj48bWFsbGN0bD5zdGF0cy5yZXRhaW5lZDwvbWFsbGN0bD48L2xp bms+IGZvcgorICAgICAgICBkZXRhaWxzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgPC92YXJs aXN0ZW50cnk+CisKKyAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9InN0YXRzLmFyZW5hcy5pLmV4dGVu dF9hdmFpbCI+CisgICAgICAgIDx0ZXJtPgorICAgICAgICAgIDxtYWxsY3RsPnN0YXRzLmFyZW5h cy4mbHQ7aSZndDsuZXh0ZW50X2F2YWlsPC9tYWxsY3RsPgorICAgICAgICAgICg8dHlwZT5zaXpl X3Q8L3R5cGU+KQorICAgICAgICAgIDxsaXRlcmFsPnItPC9saXRlcmFsPgorICAgICAgICAgIFs8 b3B0aW9uPi0tZW5hYmxlLXN0YXRzPC9vcHRpb24+XQorICAgICAgICA8L3Rlcm0+CisgICAgICAg IDxsaXN0aXRlbT48cGFyYT5OdW1iZXIgb2YgYWxsb2NhdGVkIChidXQgdW51c2VkKSBleHRlbnQg c3RydWN0cyBpbiB0aGlzCisJYXJlbmEuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxp c3RlbnRyeT4KKworICAgICAgPHZhcmxpc3RlbnRyeSBpZD0ic3RhdHMuYXJlbmFzLmkuYmFzZSI+ CisgICAgICAgIDx0ZXJtPgorICAgICAgICAgIDxtYWxsY3RsPnN0YXRzLmFyZW5hcy4mbHQ7aSZn dDsuYmFzZTwvbWFsbGN0bD4KKyAgICAgICAgICAoPHR5cGU+c2l6ZV90PC90eXBlPikKKyAgICAg ICAgICA8bGl0ZXJhbD5yLTwvbGl0ZXJhbD4KKyAgICAgICAgICBbPG9wdGlvbj4tLWVuYWJsZS1z dGF0czwvb3B0aW9uPl0KKyAgICAgICAgPC90ZXJtPgorICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+ CisgICAgICAgIE51bWJlciBvZiBieXRlcyBkZWRpY2F0ZWQgdG8gYm9vdHN0cmFwLXNlbnNpdGl2 ZSBhbGxvY2F0b3IgbWV0YWRhdGEKKyAgICAgICAgc3RydWN0dXJlcy48L3BhcmE+PC9saXN0aXRl bT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAgICA8dmFybGlzdGVudHJ5IGlkPSJzdGF0 cy5hcmVuYXMuaS5pbnRlcm5hbCI+CisgICAgICAgIDx0ZXJtPgorICAgICAgICAgIDxtYWxsY3Rs PnN0YXRzLmFyZW5hcy4mbHQ7aSZndDsuaW50ZXJuYWw8L21hbGxjdGw+CisgICAgICAgICAgKDx0 eXBlPnNpemVfdDwvdHlwZT4pCisgICAgICAgICAgPGxpdGVyYWw+ci08L2xpdGVyYWw+CisgICAg ICAgICAgWzxvcHRpb24+LS1lbmFibGUtc3RhdHM8L29wdGlvbj5dCisgICAgICAgIDwvdGVybT4K KyAgICAgICAgPGxpc3RpdGVtPjxwYXJhPk51bWJlciBvZiBieXRlcyBkZWRpY2F0ZWQgdG8gaW50 ZXJuYWwgYWxsb2NhdGlvbnMuCisgICAgICAgIEludGVybmFsIGFsbG9jYXRpb25zIGRpZmZlciBm cm9tIGFwcGxpY2F0aW9uLW9yaWdpbmF0ZWQgYWxsb2NhdGlvbnMgaW4KKyAgICAgICAgdGhhdCB0 aGV5IGFyZSBmb3IgaW50ZXJuYWwgdXNlLCBhbmQgdGhhdCB0aGV5IGFyZSBvbWl0dGVkIGZyb20g aGVhcAorICAgICAgICBwcm9maWxlcy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlz dGVudHJ5PgorCisgICAgICA8dmFybGlzdGVudHJ5IGlkPSJzdGF0cy5hcmVuYXMuaS5tZXRhZGF0 YV90aHAiPgorICAgICAgICA8dGVybT4KKyAgICAgICAgICA8bWFsbGN0bD5zdGF0cy5hcmVuYXMu Jmx0O2kmZ3Q7Lm1ldGFkYXRhX3RocDwvbWFsbGN0bD4KKyAgICAgICAgICAoPHR5cGU+c2l6ZV90 PC90eXBlPikKKyAgICAgICAgICA8bGl0ZXJhbD5yLTwvbGl0ZXJhbD4KKyAgICAgICAgICBbPG9w dGlvbj4tLWVuYWJsZS1zdGF0czwvb3B0aW9uPl0KKyAgICAgICAgPC90ZXJtPgorICAgICAgICA8 bGlzdGl0ZW0+PHBhcmE+TnVtYmVyIG9mIHRyYW5zcGFyZW50IGh1Z2UgcGFnZXMgKFRIUCkgdXNl ZCBmb3IKKyAgICAgICAgbWV0YWRhdGEuICBTZWUgPGxpbmsgbGlua2VuZD0ib3B0Lm1ldGFkYXRh X3RocCI+b3B0Lm1ldGFkYXRhX3RocDwvbGluaz4KKyAgICAgICAgZm9yIGRldGFpbHMuPC9wYXJh PjwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgICAgPHZhcmxpc3RlbnRy eSBpZD0ic3RhdHMuYXJlbmFzLmkucmVzaWRlbnQiPgorICAgICAgICA8dGVybT4KKyAgICAgICAg ICA8bWFsbGN0bD5zdGF0cy5hcmVuYXMuJmx0O2kmZ3Q7LnJlc2lkZW50PC9tYWxsY3RsPgorICAg ICAgICAgICg8dHlwZT5zaXplX3Q8L3R5cGU+KQorICAgICAgICAgIDxsaXRlcmFsPnItPC9saXRl cmFsPgorICAgICAgICAgIFs8b3B0aW9uPi0tZW5hYmxlLXN0YXRzPC9vcHRpb24+XQorICAgICAg ICA8L3Rlcm0+CisgICAgICAgIDxsaXN0aXRlbT48cGFyYT5NYXhpbXVtIG51bWJlciBvZiBieXRl cyBpbiBwaHlzaWNhbGx5IHJlc2lkZW50IGRhdGEKKyAgICAgICAgcGFnZXMgbWFwcGVkIGJ5IHRo ZSBhcmVuYSwgY29tcHJpc2luZyBhbGwgcGFnZXMgZGVkaWNhdGVkIHRvIGFsbG9jYXRvcgorICAg ICAgICBtZXRhZGF0YSwgcGFnZXMgYmFja2luZyBhY3RpdmUgYWxsb2NhdGlvbnMsIGFuZCB1bnVz ZWQgZGlydHkgcGFnZXMuCisgICAgICAgIFRoaXMgaXMgYSBtYXhpbXVtIHJhdGhlciB0aGFuIHBy ZWNpc2UgYmVjYXVzZSBwYWdlcyBtYXkgbm90IGFjdHVhbGx5IGJlCisgICAgICAgIHBoeXNpY2Fs bHkgcmVzaWRlbnQgaWYgdGhleSBjb3JyZXNwb25kIHRvIGRlbWFuZC16ZXJvZWQgdmlydHVhbCBt ZW1vcnkKKyAgICAgICAgdGhhdCBoYXMgbm90IHlldCBiZWVuIHRvdWNoZWQuICBUaGlzIGlzIGEg bXVsdGlwbGUgb2YgdGhlIHBhZ2UKKyAgICAgICAgc2l6ZS48L3BhcmE+PC9saXN0aXRlbT4KKyAg ICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAgICA8dmFybGlzdGVudHJ5IGlkPSJzdGF0cy5hcmVu YXMuaS5kaXJ0eV9ucHVyZ2UiPgorICAgICAgICA8dGVybT4KKyAgICAgICAgICA8bWFsbGN0bD5z dGF0cy5hcmVuYXMuJmx0O2kmZ3Q7LmRpcnR5X25wdXJnZTwvbWFsbGN0bD4KKyAgICAgICAgICAo PHR5cGU+dWludDY0X3Q8L3R5cGU+KQorICAgICAgICAgIDxsaXRlcmFsPnItPC9saXRlcmFsPgor ICAgICAgICAgIFs8b3B0aW9uPi0tZW5hYmxlLXN0YXRzPC9vcHRpb24+XQorICAgICAgICA8L3Rl cm0+CisgICAgICAgIDxsaXN0aXRlbT48cGFyYT5OdW1iZXIgb2YgZGlydHkgcGFnZSBwdXJnZSBz d2VlcHMgcGVyZm9ybWVkLgorICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgIDwvdmFy bGlzdGVudHJ5PgorCisgICAgICA8dmFybGlzdGVudHJ5IGlkPSJzdGF0cy5hcmVuYXMuaS5kaXJ0 eV9ubWFkdmlzZSI+CisgICAgICAgIDx0ZXJtPgorICAgICAgICAgIDxtYWxsY3RsPnN0YXRzLmFy ZW5hcy4mbHQ7aSZndDsuZGlydHlfbm1hZHZpc2U8L21hbGxjdGw+CisgICAgICAgICAgKDx0eXBl PnVpbnQ2NF90PC90eXBlPikKKyAgICAgICAgICA8bGl0ZXJhbD5yLTwvbGl0ZXJhbD4KKyAgICAg ICAgICBbPG9wdGlvbj4tLWVuYWJsZS1zdGF0czwvb3B0aW9uPl0KKyAgICAgICAgPC90ZXJtPgor ICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+TnVtYmVyIG9mIDxmdW5jdGlvbj5tYWR2aXNlKCk8L2Z1 bmN0aW9uPiBvciBzaW1pbGFyCisgICAgICAgIGNhbGxzIG1hZGUgdG8gcHVyZ2UgZGlydHkgcGFn ZXMuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgICAgPHZh cmxpc3RlbnRyeSBpZD0ic3RhdHMuYXJlbmFzLmkuZGlydHlfcHVyZ2VkIj4KKyAgICAgICAgPHRl cm0+CisgICAgICAgICAgPG1hbGxjdGw+c3RhdHMuYXJlbmFzLiZsdDtpJmd0Oy5kaXJ0eV9wdXJn ZWQ8L21hbGxjdGw+CisgICAgICAgICAgKDx0eXBlPnVpbnQ2NF90PC90eXBlPikKKyAgICAgICAg ICA8bGl0ZXJhbD5yLTwvbGl0ZXJhbD4KKyAgICAgICAgICBbPG9wdGlvbj4tLWVuYWJsZS1zdGF0 czwvb3B0aW9uPl0KKyAgICAgICAgPC90ZXJtPgorICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+TnVt YmVyIG9mIGRpcnR5IHBhZ2VzIHB1cmdlZC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgIDwvdmFy bGlzdGVudHJ5PgorCisgICAgICA8dmFybGlzdGVudHJ5IGlkPSJzdGF0cy5hcmVuYXMuaS5tdXp6 eV9ucHVyZ2UiPgorICAgICAgICA8dGVybT4KKyAgICAgICAgICA8bWFsbGN0bD5zdGF0cy5hcmVu YXMuJmx0O2kmZ3Q7Lm11enp5X25wdXJnZTwvbWFsbGN0bD4KKyAgICAgICAgICAoPHR5cGU+dWlu dDY0X3Q8L3R5cGU+KQorICAgICAgICAgIDxsaXRlcmFsPnItPC9saXRlcmFsPgorICAgICAgICAg IFs8b3B0aW9uPi0tZW5hYmxlLXN0YXRzPC9vcHRpb24+XQorICAgICAgICA8L3Rlcm0+CisgICAg ICAgIDxsaXN0aXRlbT48cGFyYT5OdW1iZXIgb2YgbXV6enkgcGFnZSBwdXJnZSBzd2VlcHMgcGVy Zm9ybWVkLgorICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5 PgorCisgICAgICA8dmFybGlzdGVudHJ5IGlkPSJzdGF0cy5hcmVuYXMuaS5tdXp6eV9ubWFkdmlz ZSI+CisgICAgICAgIDx0ZXJtPgorICAgICAgICAgIDxtYWxsY3RsPnN0YXRzLmFyZW5hcy4mbHQ7 aSZndDsubXV6enlfbm1hZHZpc2U8L21hbGxjdGw+CisgICAgICAgICAgKDx0eXBlPnVpbnQ2NF90 PC90eXBlPikKKyAgICAgICAgICA8bGl0ZXJhbD5yLTwvbGl0ZXJhbD4KKyAgICAgICAgICBbPG9w dGlvbj4tLWVuYWJsZS1zdGF0czwvb3B0aW9uPl0KKyAgICAgICAgPC90ZXJtPgorICAgICAgICA8 bGlzdGl0ZW0+PHBhcmE+TnVtYmVyIG9mIDxmdW5jdGlvbj5tYWR2aXNlKCk8L2Z1bmN0aW9uPiBv ciBzaW1pbGFyCisgICAgICAgIGNhbGxzIG1hZGUgdG8gcHVyZ2UgbXV6enkgcGFnZXMuPC9wYXJh PjwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgICAgPHZhcmxpc3RlbnRy eSBpZD0ic3RhdHMuYXJlbmFzLmkubXV6enlfcHVyZ2VkIj4KKyAgICAgICAgPHRlcm0+CisgICAg ICAgICAgPG1hbGxjdGw+c3RhdHMuYXJlbmFzLiZsdDtpJmd0Oy5tdXp6eV9wdXJnZWQ8L21hbGxj dGw+CisgICAgICAgICAgKDx0eXBlPnVpbnQ2NF90PC90eXBlPikKKyAgICAgICAgICA8bGl0ZXJh bD5yLTwvbGl0ZXJhbD4KKyAgICAgICAgICBbPG9wdGlvbj4tLWVuYWJsZS1zdGF0czwvb3B0aW9u Pl0KKyAgICAgICAgPC90ZXJtPgorICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+TnVtYmVyIG9mIG11 enp5IHBhZ2VzIHB1cmdlZC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5 PgorCisgICAgICA8dmFybGlzdGVudHJ5IGlkPSJzdGF0cy5hcmVuYXMuaS5zbWFsbC5hbGxvY2F0 ZWQiPgorICAgICAgICA8dGVybT4KKyAgICAgICAgICA8bWFsbGN0bD5zdGF0cy5hcmVuYXMuJmx0 O2kmZ3Q7LnNtYWxsLmFsbG9jYXRlZDwvbWFsbGN0bD4KKyAgICAgICAgICAoPHR5cGU+c2l6ZV90 PC90eXBlPikKKyAgICAgICAgICA8bGl0ZXJhbD5yLTwvbGl0ZXJhbD4KKyAgICAgICAgICBbPG9w dGlvbj4tLWVuYWJsZS1zdGF0czwvb3B0aW9uPl0KKyAgICAgICAgPC90ZXJtPgorICAgICAgICA8 bGlzdGl0ZW0+PHBhcmE+TnVtYmVyIG9mIGJ5dGVzIGN1cnJlbnRseSBhbGxvY2F0ZWQgYnkgc21h bGwgb2JqZWN0cy4KKyAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3Rl bnRyeT4KKworICAgICAgPHZhcmxpc3RlbnRyeSBpZD0ic3RhdHMuYXJlbmFzLmkuc21hbGwubm1h bGxvYyI+CisgICAgICAgIDx0ZXJtPgorICAgICAgICAgIDxtYWxsY3RsPnN0YXRzLmFyZW5hcy4m bHQ7aSZndDsuc21hbGwubm1hbGxvYzwvbWFsbGN0bD4KKyAgICAgICAgICAoPHR5cGU+dWludDY0 X3Q8L3R5cGU+KQorICAgICAgICAgIDxsaXRlcmFsPnItPC9saXRlcmFsPgorICAgICAgICAgIFs8 b3B0aW9uPi0tZW5hYmxlLXN0YXRzPC9vcHRpb24+XQorICAgICAgICA8L3Rlcm0+CisgICAgICAg IDxsaXN0aXRlbT48cGFyYT5DdW11bGF0aXZlIG51bWJlciBvZiB0aW1lcyBhIHNtYWxsIGFsbG9j YXRpb24gd2FzCisgICAgICAgIHJlcXVlc3RlZCBmcm9tIHRoZSBhcmVuYSdzIGJpbnMsIHdoZXRo ZXIgdG8gZmlsbCB0aGUgcmVsZXZhbnQgdGNhY2hlIGlmCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9 Im9wdC50Y2FjaGUiPjxtYWxsY3RsPm9wdC50Y2FjaGU8L21hbGxjdGw+PC9saW5rPiBpcworICAg ICAgICBlbmFibGVkLCBvciB0byBkaXJlY3RseSBzYXRpc2Z5IGFuIGFsbG9jYXRpb24gcmVxdWVz dAorICAgICAgICBvdGhlcndpc2UuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3Rl bnRyeT4KKworICAgICAgPHZhcmxpc3RlbnRyeSBpZD0ic3RhdHMuYXJlbmFzLmkuc21hbGwubmRh bGxvYyI+CisgICAgICAgIDx0ZXJtPgorICAgICAgICAgIDxtYWxsY3RsPnN0YXRzLmFyZW5hcy4m bHQ7aSZndDsuc21hbGwubmRhbGxvYzwvbWFsbGN0bD4KKyAgICAgICAgICAoPHR5cGU+dWludDY0 X3Q8L3R5cGU+KQorICAgICAgICAgIDxsaXRlcmFsPnItPC9saXRlcmFsPgorICAgICAgICAgIFs8 b3B0aW9uPi0tZW5hYmxlLXN0YXRzPC9vcHRpb24+XQorICAgICAgICA8L3Rlcm0+CisgICAgICAg IDxsaXN0aXRlbT48cGFyYT5DdW11bGF0aXZlIG51bWJlciBvZiB0aW1lcyBhIHNtYWxsIGFsbG9j YXRpb24gd2FzCisgICAgICAgIHJldHVybmVkIHRvIHRoZSBhcmVuYSdzIGJpbnMsIHdoZXRoZXIg dG8gZmx1c2ggdGhlIHJlbGV2YW50IHRjYWNoZSBpZgorICAgICAgICA8bGluayBsaW5rZW5kPSJv cHQudGNhY2hlIj48bWFsbGN0bD5vcHQudGNhY2hlPC9tYWxsY3RsPjwvbGluaz4gaXMKKyAgICAg ICAgZW5hYmxlZCwgb3IgdG8gZGlyZWN0bHkgZGVhbGxvY2F0ZSBhbiBhbGxvY2F0aW9uCisgICAg ICAgIG90aGVyd2lzZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5Pgor CisgICAgICA8dmFybGlzdGVudHJ5IGlkPSJzdGF0cy5hcmVuYXMuaS5zbWFsbC5ucmVxdWVzdHMi PgorICAgICAgICA8dGVybT4KKyAgICAgICAgICA8bWFsbGN0bD5zdGF0cy5hcmVuYXMuJmx0O2km Z3Q7LnNtYWxsLm5yZXF1ZXN0czwvbWFsbGN0bD4KKyAgICAgICAgICAoPHR5cGU+dWludDY0X3Q8 L3R5cGU+KQorICAgICAgICAgIDxsaXRlcmFsPnItPC9saXRlcmFsPgorICAgICAgICAgIFs8b3B0 aW9uPi0tZW5hYmxlLXN0YXRzPC9vcHRpb24+XQorICAgICAgICA8L3Rlcm0+CisgICAgICAgIDxs aXN0aXRlbT48cGFyYT5DdW11bGF0aXZlIG51bWJlciBvZiBhbGxvY2F0aW9uIHJlcXVlc3RzIHNh dGlzZmllZCBieQorICAgICAgICBhbGwgYmluIHNpemUgY2xhc3Nlcy48L3BhcmE+PC9saXN0aXRl bT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAgICA8dmFybGlzdGVudHJ5IGlkPSJzdGF0 cy5hcmVuYXMuaS5zbWFsbC5uZmlsbHMiPgorICAgICAgICA8dGVybT4KKyAgICAgICAgICA8bWFs bGN0bD5zdGF0cy5hcmVuYXMuJmx0O2kmZ3Q7LnNtYWxsLm5maWxsczwvbWFsbGN0bD4KKyAgICAg ICAgICAoPHR5cGU+dWludDY0X3Q8L3R5cGU+KQorICAgICAgICAgIDxsaXRlcmFsPnItPC9saXRl cmFsPgorICAgICAgICAgIFs8b3B0aW9uPi0tZW5hYmxlLXN0YXRzPC9vcHRpb24+XQorICAgICAg ICA8L3Rlcm0+CisgICAgICAgIDxsaXN0aXRlbT48cGFyYT5DdW11bGF0aXZlIG51bWJlciBvZiB0 Y2FjaGUgZmlsbHMgYnkgYWxsIHNtYWxsIHNpemUKKwljbGFzc2VzLjwvcGFyYT48L2xpc3RpdGVt PgorICAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9InN0YXRz LmFyZW5hcy5pLnNtYWxsLm5mbHVzaGVzIj4KKyAgICAgICAgPHRlcm0+CisgICAgICAgICAgPG1h bGxjdGw+c3RhdHMuYXJlbmFzLiZsdDtpJmd0Oy5zbWFsbC5uZmx1c2hlczwvbWFsbGN0bD4KKyAg ICAgICAgICAoPHR5cGU+dWludDY0X3Q8L3R5cGU+KQorICAgICAgICAgIDxsaXRlcmFsPnItPC9s aXRlcmFsPgorICAgICAgICAgIFs8b3B0aW9uPi0tZW5hYmxlLXN0YXRzPC9vcHRpb24+XQorICAg ICAgICA8L3Rlcm0+CisgICAgICAgIDxsaXN0aXRlbT48cGFyYT5DdW11bGF0aXZlIG51bWJlciBv ZiB0Y2FjaGUgZmx1c2hlcyBieSBhbGwgc21hbGwgc2l6ZQorICAgICAgICBjbGFzc2VzLjwvcGFy YT48L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAgIDx2YXJsaXN0ZW50 cnkgaWQ9InN0YXRzLmFyZW5hcy5pLmxhcmdlLmFsbG9jYXRlZCI+CisgICAgICAgIDx0ZXJtPgor ICAgICAgICAgIDxtYWxsY3RsPnN0YXRzLmFyZW5hcy4mbHQ7aSZndDsubGFyZ2UuYWxsb2NhdGVk PC9tYWxsY3RsPgorICAgICAgICAgICg8dHlwZT5zaXplX3Q8L3R5cGU+KQorICAgICAgICAgIDxs aXRlcmFsPnItPC9saXRlcmFsPgorICAgICAgICAgIFs8b3B0aW9uPi0tZW5hYmxlLXN0YXRzPC9v cHRpb24+XQorICAgICAgICA8L3Rlcm0+CisgICAgICAgIDxsaXN0aXRlbT48cGFyYT5OdW1iZXIg b2YgYnl0ZXMgY3VycmVudGx5IGFsbG9jYXRlZCBieSBsYXJnZSBvYmplY3RzLgorICAgICAgICA8 L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAgICA8dmFybGlz dGVudHJ5IGlkPSJzdGF0cy5hcmVuYXMuaS5sYXJnZS5ubWFsbG9jIj4KKyAgICAgICAgPHRlcm0+ CisgICAgICAgICAgPG1hbGxjdGw+c3RhdHMuYXJlbmFzLiZsdDtpJmd0Oy5sYXJnZS5ubWFsbG9j PC9tYWxsY3RsPgorICAgICAgICAgICg8dHlwZT51aW50NjRfdDwvdHlwZT4pCisgICAgICAgICAg PGxpdGVyYWw+ci08L2xpdGVyYWw+CisgICAgICAgICAgWzxvcHRpb24+LS1lbmFibGUtc3RhdHM8 L29wdGlvbj5dCisgICAgICAgIDwvdGVybT4KKyAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkN1bXVs YXRpdmUgbnVtYmVyIG9mIHRpbWVzIGEgbGFyZ2UgZXh0ZW50IHdhcyBhbGxvY2F0ZWQKKyAgICAg ICAgZnJvbSB0aGUgYXJlbmEsIHdoZXRoZXIgdG8gZmlsbCB0aGUgcmVsZXZhbnQgdGNhY2hlIGlm IDxsaW5rCisgICAgICAgIGxpbmtlbmQ9Im9wdC50Y2FjaGUiPjxtYWxsY3RsPm9wdC50Y2FjaGU8 L21hbGxjdGw+PC9saW5rPiBpcyBlbmFibGVkIGFuZAorICAgICAgICB0aGUgc2l6ZSBjbGFzcyBp cyB3aXRoaW4gdGhlIHJhbmdlIGJlaW5nIGNhY2hlZCwgb3IgdG8gZGlyZWN0bHkgc2F0aXNmeQor ICAgICAgICBhbiBhbGxvY2F0aW9uIHJlcXVlc3Qgb3RoZXJ3aXNlLjwvcGFyYT48L2xpc3RpdGVt PgorICAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9InN0YXRz LmFyZW5hcy5pLmxhcmdlLm5kYWxsb2MiPgorICAgICAgICA8dGVybT4KKyAgICAgICAgICA8bWFs bGN0bD5zdGF0cy5hcmVuYXMuJmx0O2kmZ3Q7LmxhcmdlLm5kYWxsb2M8L21hbGxjdGw+CisgICAg ICAgICAgKDx0eXBlPnVpbnQ2NF90PC90eXBlPikKKyAgICAgICAgICA8bGl0ZXJhbD5yLTwvbGl0 ZXJhbD4KKyAgICAgICAgICBbPG9wdGlvbj4tLWVuYWJsZS1zdGF0czwvb3B0aW9uPl0KKyAgICAg ICAgPC90ZXJtPgorICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Q3VtdWxhdGl2ZSBudW1iZXIgb2Yg dGltZXMgYSBsYXJnZSBleHRlbnQgd2FzIHJldHVybmVkCisgICAgICAgIHRvIHRoZSBhcmVuYSwg d2hldGhlciB0byBmbHVzaCB0aGUgcmVsZXZhbnQgdGNhY2hlIGlmIDxsaW5rCisgICAgICAgIGxp bmtlbmQ9Im9wdC50Y2FjaGUiPjxtYWxsY3RsPm9wdC50Y2FjaGU8L21hbGxjdGw+PC9saW5rPiBp cyBlbmFibGVkIGFuZAorICAgICAgICB0aGUgc2l6ZSBjbGFzcyBpcyB3aXRoaW4gdGhlIHJhbmdl IGJlaW5nIGNhY2hlZCwgb3IgdG8gZGlyZWN0bHkKKyAgICAgICAgZGVhbGxvY2F0ZSBhbiBhbGxv Y2F0aW9uIG90aGVyd2lzZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5 PgorCisgICAgICA8dmFybGlzdGVudHJ5IGlkPSJzdGF0cy5hcmVuYXMuaS5sYXJnZS5ucmVxdWVz dHMiPgorICAgICAgICA8dGVybT4KKyAgICAgICAgICA8bWFsbGN0bD5zdGF0cy5hcmVuYXMuJmx0 O2kmZ3Q7LmxhcmdlLm5yZXF1ZXN0czwvbWFsbGN0bD4KKyAgICAgICAgICAoPHR5cGU+dWludDY0 X3Q8L3R5cGU+KQorICAgICAgICAgIDxsaXRlcmFsPnItPC9saXRlcmFsPgorICAgICAgICAgIFs8 b3B0aW9uPi0tZW5hYmxlLXN0YXRzPC9vcHRpb24+XQorICAgICAgICA8L3Rlcm0+CisgICAgICAg IDxsaXN0aXRlbT48cGFyYT5DdW11bGF0aXZlIG51bWJlciBvZiBhbGxvY2F0aW9uIHJlcXVlc3Rz IHNhdGlzZmllZCBieQorICAgICAgICBhbGwgbGFyZ2Ugc2l6ZSBjbGFzc2VzLjwvcGFyYT48L2xp c3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9 InN0YXRzLmFyZW5hcy5pLmxhcmdlLm5maWxscyI+CisgICAgICAgIDx0ZXJtPgorICAgICAgICAg IDxtYWxsY3RsPnN0YXRzLmFyZW5hcy4mbHQ7aSZndDsubGFyZ2UubmZpbGxzPC9tYWxsY3RsPgor ICAgICAgICAgICg8dHlwZT51aW50NjRfdDwvdHlwZT4pCisgICAgICAgICAgPGxpdGVyYWw+ci08 L2xpdGVyYWw+CisgICAgICAgICAgWzxvcHRpb24+LS1lbmFibGUtc3RhdHM8L29wdGlvbj5dCisg ICAgICAgIDwvdGVybT4KKyAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkN1bXVsYXRpdmUgbnVtYmVy IG9mIHRjYWNoZSBmaWxscyBieSBhbGwgbGFyZ2Ugc2l6ZQorCWNsYXNzZXMuPC9wYXJhPjwvbGlz dGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgICAgPHZhcmxpc3RlbnRyeSBpZD0i c3RhdHMuYXJlbmFzLmkubGFyZ2UubmZsdXNoZXMiPgorICAgICAgICA8dGVybT4KKyAgICAgICAg ICA8bWFsbGN0bD5zdGF0cy5hcmVuYXMuJmx0O2kmZ3Q7LmxhcmdlLm5mbHVzaGVzPC9tYWxsY3Rs PgorICAgICAgICAgICg8dHlwZT51aW50NjRfdDwvdHlwZT4pCisgICAgICAgICAgPGxpdGVyYWw+ ci08L2xpdGVyYWw+CisgICAgICAgICAgWzxvcHRpb24+LS1lbmFibGUtc3RhdHM8L29wdGlvbj5d CisgICAgICAgIDwvdGVybT4KKyAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkN1bXVsYXRpdmUgbnVt YmVyIG9mIHRjYWNoZSBmbHVzaGVzIGJ5IGFsbCBsYXJnZSBzaXplCisgICAgICAgIGNsYXNzZXMu PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgICAgPHZhcmxp c3RlbnRyeSBpZD0ic3RhdHMuYXJlbmFzLmkuYmlucy5qLm5tYWxsb2MiPgorICAgICAgICA8dGVy bT4KKyAgICAgICAgICA8bWFsbGN0bD5zdGF0cy5hcmVuYXMuJmx0O2kmZ3Q7LmJpbnMuJmx0O2om Z3Q7Lm5tYWxsb2M8L21hbGxjdGw+CisgICAgICAgICAgKDx0eXBlPnVpbnQ2NF90PC90eXBlPikK KyAgICAgICAgICA8bGl0ZXJhbD5yLTwvbGl0ZXJhbD4KKyAgICAgICAgICBbPG9wdGlvbj4tLWVu YWJsZS1zdGF0czwvb3B0aW9uPl0KKyAgICAgICAgPC90ZXJtPgorICAgICAgICA8bGlzdGl0ZW0+ PHBhcmE+Q3VtdWxhdGl2ZSBudW1iZXIgb2YgdGltZXMgYSBiaW4gcmVnaW9uIG9mIHRoZQorICAg ICAgICBjb3JyZXNwb25kaW5nIHNpemUgY2xhc3Mgd2FzIGFsbG9jYXRlZCBmcm9tIHRoZSBhcmVu YSwgd2hldGhlciB0byBmaWxsCisgICAgICAgIHRoZSByZWxldmFudCB0Y2FjaGUgaWYgPGxpbmsK KyAgICAgICAgbGlua2VuZD0ib3B0LnRjYWNoZSI+PG1hbGxjdGw+b3B0LnRjYWNoZTwvbWFsbGN0 bD48L2xpbms+IGlzIGVuYWJsZWQsIG9yCisgICAgICAgIHRvIGRpcmVjdGx5IHNhdGlzZnkgYW4g YWxsb2NhdGlvbiByZXF1ZXN0IG90aGVyd2lzZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgIDwv dmFybGlzdGVudHJ5PgorCisgICAgICA8dmFybGlzdGVudHJ5IGlkPSJzdGF0cy5hcmVuYXMuaS5i aW5zLmoubmRhbGxvYyI+CisgICAgICAgIDx0ZXJtPgorICAgICAgICAgIDxtYWxsY3RsPnN0YXRz LmFyZW5hcy4mbHQ7aSZndDsuYmlucy4mbHQ7aiZndDsubmRhbGxvYzwvbWFsbGN0bD4KKyAgICAg ICAgICAoPHR5cGU+dWludDY0X3Q8L3R5cGU+KQorICAgICAgICAgIDxsaXRlcmFsPnItPC9saXRl cmFsPgorICAgICAgICAgIFs8b3B0aW9uPi0tZW5hYmxlLXN0YXRzPC9vcHRpb24+XQorICAgICAg ICA8L3Rlcm0+CisgICAgICAgIDxsaXN0aXRlbT48cGFyYT5DdW11bGF0aXZlIG51bWJlciBvZiB0 aW1lcyBhIGJpbiByZWdpb24gb2YgdGhlCisgICAgICAgIGNvcnJlc3BvbmRpbmcgc2l6ZSBjbGFz cyB3YXMgcmV0dXJuZWQgdG8gdGhlIGFyZW5hLCB3aGV0aGVyIHRvIGZsdXNoIHRoZQorICAgICAg ICByZWxldmFudCB0Y2FjaGUgaWYgPGxpbmsKKyAgICAgICAgbGlua2VuZD0ib3B0LnRjYWNoZSI+ PG1hbGxjdGw+b3B0LnRjYWNoZTwvbWFsbGN0bD48L2xpbms+IGlzIGVuYWJsZWQsIG9yCisgICAg ICAgIHRvIGRpcmVjdGx5IGRlYWxsb2NhdGUgYW4gYWxsb2NhdGlvbiBvdGhlcndpc2UuPC9wYXJh PjwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgICAgPHZhcmxpc3RlbnRy eSBpZD0ic3RhdHMuYXJlbmFzLmkuYmlucy5qLm5yZXF1ZXN0cyI+CisgICAgICAgIDx0ZXJtPgor ICAgICAgICAgIDxtYWxsY3RsPnN0YXRzLmFyZW5hcy4mbHQ7aSZndDsuYmlucy4mbHQ7aiZndDsu bnJlcXVlc3RzPC9tYWxsY3RsPgorICAgICAgICAgICg8dHlwZT51aW50NjRfdDwvdHlwZT4pCisg ICAgICAgICAgPGxpdGVyYWw+ci08L2xpdGVyYWw+CisgICAgICAgICAgWzxvcHRpb24+LS1lbmFi bGUtc3RhdHM8L29wdGlvbj5dCisgICAgICAgIDwvdGVybT4KKyAgICAgICAgPGxpc3RpdGVtPjxw YXJhPkN1bXVsYXRpdmUgbnVtYmVyIG9mIGFsbG9jYXRpb24gcmVxdWVzdHMgc2F0aXNmaWVkIGJ5 CisgICAgICAgIGJpbiByZWdpb25zIG9mIHRoZSBjb3JyZXNwb25kaW5nIHNpemUgY2xhc3MuPC9w YXJhPjwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgICAgPHZhcmxpc3Rl bnRyeSBpZD0ic3RhdHMuYXJlbmFzLmkuYmlucy5qLmN1cnJlZ3MiPgorICAgICAgICA8dGVybT4K KyAgICAgICAgICA8bWFsbGN0bD5zdGF0cy5hcmVuYXMuJmx0O2kmZ3Q7LmJpbnMuJmx0O2omZ3Q7 LmN1cnJlZ3M8L21hbGxjdGw+CisgICAgICAgICAgKDx0eXBlPnNpemVfdDwvdHlwZT4pCisgICAg ICAgICAgPGxpdGVyYWw+ci08L2xpdGVyYWw+CisgICAgICAgICAgWzxvcHRpb24+LS1lbmFibGUt c3RhdHM8L29wdGlvbj5dCisgICAgICAgIDwvdGVybT4KKyAgICAgICAgPGxpc3RpdGVtPjxwYXJh PkN1cnJlbnQgbnVtYmVyIG9mIHJlZ2lvbnMgZm9yIHRoaXMgc2l6ZQorICAgICAgICBjbGFzcy48 L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAgICA8dmFybGlz dGVudHJ5IGlkPSJzdGF0cy5hcmVuYXMuaS5iaW5zLmoubmZpbGxzIj4KKyAgICAgICAgPHRlcm0+ CisgICAgICAgICAgPG1hbGxjdGw+c3RhdHMuYXJlbmFzLiZsdDtpJmd0Oy5iaW5zLiZsdDtqJmd0 Oy5uZmlsbHM8L21hbGxjdGw+CisgICAgICAgICAgKDx0eXBlPnVpbnQ2NF90PC90eXBlPikKKyAg ICAgICAgICA8bGl0ZXJhbD5yLTwvbGl0ZXJhbD4KKyAgICAgICAgPC90ZXJtPgorICAgICAgICA8 bGlzdGl0ZW0+PHBhcmE+Q3VtdWxhdGl2ZSBudW1iZXIgb2YgdGNhY2hlIGZpbGxzLjwvcGFyYT48 L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAgIDx2YXJsaXN0ZW50cnkg aWQ9InN0YXRzLmFyZW5hcy5pLmJpbnMuai5uZmx1c2hlcyI+CisgICAgICAgIDx0ZXJtPgorICAg ICAgICAgIDxtYWxsY3RsPnN0YXRzLmFyZW5hcy4mbHQ7aSZndDsuYmlucy4mbHQ7aiZndDsubmZs dXNoZXM8L21hbGxjdGw+CisgICAgICAgICAgKDx0eXBlPnVpbnQ2NF90PC90eXBlPikKKyAgICAg ICAgICA8bGl0ZXJhbD5yLTwvbGl0ZXJhbD4KKyAgICAgICAgPC90ZXJtPgorICAgICAgICA8bGlz dGl0ZW0+PHBhcmE+Q3VtdWxhdGl2ZSBudW1iZXIgb2YgdGNhY2hlIGZsdXNoZXMuPC9wYXJhPjwv bGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgICAgPHZhcmxpc3RlbnRyeSBp ZD0ic3RhdHMuYXJlbmFzLmkuYmlucy5qLm5zbGFicyI+CisgICAgICAgIDx0ZXJtPgorICAgICAg ICAgIDxtYWxsY3RsPnN0YXRzLmFyZW5hcy4mbHQ7aSZndDsuYmlucy4mbHQ7aiZndDsubnNsYWJz PC9tYWxsY3RsPgorICAgICAgICAgICg8dHlwZT51aW50NjRfdDwvdHlwZT4pCisgICAgICAgICAg PGxpdGVyYWw+ci08L2xpdGVyYWw+CisgICAgICAgICAgWzxvcHRpb24+LS1lbmFibGUtc3RhdHM8 L29wdGlvbj5dCisgICAgICAgIDwvdGVybT4KKyAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkN1bXVs YXRpdmUgbnVtYmVyIG9mIHNsYWJzIGNyZWF0ZWQuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICA8 L3Zhcmxpc3RlbnRyeT4KKworICAgICAgPHZhcmxpc3RlbnRyeSBpZD0ic3RhdHMuYXJlbmFzLmku Ymlucy5qLm5yZXNsYWJzIj4KKyAgICAgICAgPHRlcm0+CisgICAgICAgICAgPG1hbGxjdGw+c3Rh dHMuYXJlbmFzLiZsdDtpJmd0Oy5iaW5zLiZsdDtqJmd0Oy5ucmVzbGFiczwvbWFsbGN0bD4KKyAg ICAgICAgICAoPHR5cGU+dWludDY0X3Q8L3R5cGU+KQorICAgICAgICAgIDxsaXRlcmFsPnItPC9s aXRlcmFsPgorICAgICAgICAgIFs8b3B0aW9uPi0tZW5hYmxlLXN0YXRzPC9vcHRpb24+XQorICAg ICAgICA8L3Rlcm0+CisgICAgICAgIDxsaXN0aXRlbT48cGFyYT5DdW11bGF0aXZlIG51bWJlciBv ZiB0aW1lcyB0aGUgY3VycmVudCBzbGFiIGZyb20gd2hpY2gKKyAgICAgICAgdG8gYWxsb2NhdGUg Y2hhbmdlZC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAg ICA8dmFybGlzdGVudHJ5IGlkPSJzdGF0cy5hcmVuYXMuaS5iaW5zLmouY3Vyc2xhYnMiPgorICAg ICAgICA8dGVybT4KKyAgICAgICAgICA8bWFsbGN0bD5zdGF0cy5hcmVuYXMuJmx0O2kmZ3Q7LmJp bnMuJmx0O2omZ3Q7LmN1cnNsYWJzPC9tYWxsY3RsPgorICAgICAgICAgICg8dHlwZT5zaXplX3Q8 L3R5cGU+KQorICAgICAgICAgIDxsaXRlcmFsPnItPC9saXRlcmFsPgorICAgICAgICAgIFs8b3B0 aW9uPi0tZW5hYmxlLXN0YXRzPC9vcHRpb24+XQorICAgICAgICA8L3Rlcm0+CisgICAgICAgIDxs aXN0aXRlbT48cGFyYT5DdXJyZW50IG51bWJlciBvZiBzbGFicy48L3BhcmE+PC9saXN0aXRlbT4K KyAgICAgIDwvdmFybGlzdGVudHJ5PgorCisKKyAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9InN0YXRz LmFyZW5hcy5pLmJpbnMuai5ub25mdWxsX3NsYWJzIj4KKyAgICAgICAgPHRlcm0+CisgICAgICAg ICAgPG1hbGxjdGw+c3RhdHMuYXJlbmFzLiZsdDtpJmd0Oy5iaW5zLiZsdDtqJmd0Oy5ub25mdWxs X3NsYWJzPC9tYWxsY3RsPgorICAgICAgICAgICg8dHlwZT5zaXplX3Q8L3R5cGU+KQorICAgICAg ICAgIDxsaXRlcmFsPnItPC9saXRlcmFsPgorICAgICAgICAgIFs8b3B0aW9uPi0tZW5hYmxlLXN0 YXRzPC9vcHRpb24+XQorICAgICAgICA8L3Rlcm0+CisgICAgICAgIDxsaXN0aXRlbT48cGFyYT5D dXJyZW50IG51bWJlciBvZiBub25mdWxsIHNsYWJzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAg PC92YXJsaXN0ZW50cnk+CisKKyAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9InN0YXRzLmFyZW5hcy5p LmJpbnMubXV0ZXgiPgorICAgICAgICA8dGVybT4KKyAgICAgICAgICA8bWFsbGN0bD5zdGF0cy5h cmVuYXMuJmx0O2kmZ3Q7LmJpbnMuJmx0O2omZ3Q7Lm11dGV4Lntjb3VudGVyfTwvbWFsbGN0bD4K KyAgICAgICAgICAoPHR5cGU+Y291bnRlciBzcGVjaWZpYyB0eXBlPC90eXBlPikgPGxpdGVyYWw+ ci08L2xpdGVyYWw+CisgICAgICAgICAgWzxvcHRpb24+LS1lbmFibGUtc3RhdHM8L29wdGlvbj5d CisgICAgICAgIDwvdGVybT4KKyAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlN0YXRpc3RpY3Mgb24K KyAgICAgICAgPHZhcm5hbWU+YXJlbmEuJmx0O2kmZ3Q7LmJpbnMuJmx0O2omZ3Q7PC92YXJuYW1l PiBtdXRleCAoYXJlbmEgYmluCisgICAgICAgIHNjb3BlOyBiaW4gb3BlcmF0aW9uIHJlbGF0ZWQp LiAgPG1hbGxjdGw+e2NvdW50ZXJ9PC9tYWxsY3RsPiBpcyBvbmUgb2YKKyAgICAgICAgdGhlIGNv dW50ZXJzIGluIDxsaW5rIGxpbmtlbmQ9Im11dGV4X2NvdW50ZXJzIj5tdXRleCBwcm9maWxpbmcK KyAgICAgICAgY291bnRlcnM8L2xpbms+LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgPC92YXJs aXN0ZW50cnk+CisKKyAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9InN0YXRzLmFyZW5hcy5pLmV4dGVu dHMubiI+CisgICAgICAgIDx0ZXJtPgorICAgICAgICAgIDxtYWxsY3RsPnN0YXRzLmFyZW5hcy4m bHQ7aSZndDsuZXh0ZW50cy4mbHQ7aiZndDsubntleHRlbnRfdHlwZX08L21hbGxjdGw+CisgICAg ICAgICAgKDx0eXBlPnNpemVfdDwvdHlwZT4pCisgICAgICAgICAgPGxpdGVyYWw+ci08L2xpdGVy YWw+CisgICAgICAgICAgWzxvcHRpb24+LS1lbmFibGUtc3RhdHM8L29wdGlvbj5dCisgICAgICAg IDwvdGVybT4KKyAgICAgICAgPGxpc3RpdGVtPjxwYXJhPiBOdW1iZXIgb2YgZXh0ZW50cyBvZiB0 aGUgZ2l2ZW4gdHlwZSBpbiB0aGlzIGFyZW5hIGluCisJdGhlIGJ1Y2tldCBjb3JyZXNwb25kaW5n IHRvIHBhZ2Ugc2l6ZSBpbmRleCAmbHQ7aiZndDsuIFRoZSBleHRlbnQgdHlwZQorCWlzIG9uZSBv ZiBkaXJ0eSwgbXV6enksIG9yIHJldGFpbmVkLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgPC92 YXJsaXN0ZW50cnk+CisKKyAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9InN0YXRzLmFyZW5hcy5pLmV4 dGVudHMuYnl0ZXMiPgorICAgICAgICA8dGVybT4KKyAgICAgICAgICA8bWFsbGN0bD5zdGF0cy5h cmVuYXMuJmx0O2kmZ3Q7LmV4dGVudHMuJmx0O2omZ3Q7LntleHRlbnRfdHlwZX1fYnl0ZXM8L21h bGxjdGw+CisgICAgICAgICAgKDx0eXBlPnNpemVfdDwvdHlwZT4pCisgICAgICAgICAgPGxpdGVy YWw+ci08L2xpdGVyYWw+CisgICAgICAgICAgWzxvcHRpb24+LS1lbmFibGUtc3RhdHM8L29wdGlv bj5dCisgICAgICAgIDwvdGVybT4KKwk8bGlzdGl0ZW0+PHBhcmE+IFN1bSBvZiB0aGUgYnl0ZXMg bWFuYWdlZCBieSBleHRlbnRzIG9mIHRoZSBnaXZlbiB0eXBlCisJaW4gdGhpcyBhcmVuYSBpbiB0 aGUgYnVja2V0IGNvcnJlc3BvbmRpbmcgdG8gcGFnZSBzaXplIGluZGV4ICZsdDtqJmd0Oy4KKwlU aGUgZXh0ZW50IHR5cGUgaXMgb25lIG9mIGRpcnR5LCBtdXp6eSwgb3IgcmV0YWluZWQuPC9wYXJh PjwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgICAgPHZhcmxpc3RlbnRy eSBpZD0ic3RhdHMuYXJlbmFzLmkubGV4dGVudHMuai5ubWFsbG9jIj4KKyAgICAgICAgPHRlcm0+ CisgICAgICAgICAgPG1hbGxjdGw+c3RhdHMuYXJlbmFzLiZsdDtpJmd0Oy5sZXh0ZW50cy4mbHQ7 aiZndDsubm1hbGxvYzwvbWFsbGN0bD4KKyAgICAgICAgICAoPHR5cGU+dWludDY0X3Q8L3R5cGU+ KQorICAgICAgICAgIDxsaXRlcmFsPnItPC9saXRlcmFsPgorICAgICAgICAgIFs8b3B0aW9uPi0t ZW5hYmxlLXN0YXRzPC9vcHRpb24+XQorICAgICAgICA8L3Rlcm0+CisgICAgICAgIDxsaXN0aXRl bT48cGFyYT5DdW11bGF0aXZlIG51bWJlciBvZiB0aW1lcyBhIGxhcmdlIGV4dGVudCBvZiB0aGUK KyAgICAgICAgY29ycmVzcG9uZGluZyBzaXplIGNsYXNzIHdhcyBhbGxvY2F0ZWQgZnJvbSB0aGUg YXJlbmEsIHdoZXRoZXIgdG8gZmlsbAorICAgICAgICB0aGUgcmVsZXZhbnQgdGNhY2hlIGlmIDxs aW5rCisgICAgICAgIGxpbmtlbmQ9Im9wdC50Y2FjaGUiPjxtYWxsY3RsPm9wdC50Y2FjaGU8L21h bGxjdGw+PC9saW5rPiBpcyBlbmFibGVkIGFuZAorICAgICAgICB0aGUgc2l6ZSBjbGFzcyBpcyB3 aXRoaW4gdGhlIHJhbmdlIGJlaW5nIGNhY2hlZCwgb3IgdG8gZGlyZWN0bHkgc2F0aXNmeQorICAg ICAgICBhbiBhbGxvY2F0aW9uIHJlcXVlc3Qgb3RoZXJ3aXNlLjwvcGFyYT48L2xpc3RpdGVtPgor ICAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9InN0YXRzLmFy ZW5hcy5pLmxleHRlbnRzLmoubmRhbGxvYyI+CisgICAgICAgIDx0ZXJtPgorICAgICAgICAgIDxt YWxsY3RsPnN0YXRzLmFyZW5hcy4mbHQ7aSZndDsubGV4dGVudHMuJmx0O2omZ3Q7Lm5kYWxsb2M8 L21hbGxjdGw+CisgICAgICAgICAgKDx0eXBlPnVpbnQ2NF90PC90eXBlPikKKyAgICAgICAgICA8 bGl0ZXJhbD5yLTwvbGl0ZXJhbD4KKyAgICAgICAgICBbPG9wdGlvbj4tLWVuYWJsZS1zdGF0czwv b3B0aW9uPl0KKyAgICAgICAgPC90ZXJtPgorICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Q3VtdWxh dGl2ZSBudW1iZXIgb2YgdGltZXMgYSBsYXJnZSBleHRlbnQgb2YgdGhlCisgICAgICAgIGNvcnJl c3BvbmRpbmcgc2l6ZSBjbGFzcyB3YXMgcmV0dXJuZWQgdG8gdGhlIGFyZW5hLCB3aGV0aGVyIHRv IGZsdXNoIHRoZQorICAgICAgICByZWxldmFudCB0Y2FjaGUgaWYgPGxpbmsKKyAgICAgICAgbGlu a2VuZD0ib3B0LnRjYWNoZSI+PG1hbGxjdGw+b3B0LnRjYWNoZTwvbWFsbGN0bD48L2xpbms+IGlz IGVuYWJsZWQgYW5kCisgICAgICAgIHRoZSBzaXplIGNsYXNzIGlzIHdpdGhpbiB0aGUgcmFuZ2Ug YmVpbmcgY2FjaGVkLCBvciB0byBkaXJlY3RseQorICAgICAgICBkZWFsbG9jYXRlIGFuIGFsbG9j YXRpb24gb3RoZXJ3aXNlLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+ CisKKyAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9InN0YXRzLmFyZW5hcy5pLmxleHRlbnRzLmoubnJl cXVlc3RzIj4KKyAgICAgICAgPHRlcm0+CisgICAgICAgICAgPG1hbGxjdGw+c3RhdHMuYXJlbmFz LiZsdDtpJmd0Oy5sZXh0ZW50cy4mbHQ7aiZndDsubnJlcXVlc3RzPC9tYWxsY3RsPgorICAgICAg ICAgICg8dHlwZT51aW50NjRfdDwvdHlwZT4pCisgICAgICAgICAgPGxpdGVyYWw+ci08L2xpdGVy YWw+CisgICAgICAgICAgWzxvcHRpb24+LS1lbmFibGUtc3RhdHM8L29wdGlvbj5dCisgICAgICAg IDwvdGVybT4KKyAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkN1bXVsYXRpdmUgbnVtYmVyIG9mIGFs bG9jYXRpb24gcmVxdWVzdHMgc2F0aXNmaWVkIGJ5CisgICAgICAgIGxhcmdlIGV4dGVudHMgb2Yg dGhlIGNvcnJlc3BvbmRpbmcgc2l6ZSBjbGFzcy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgIDwv dmFybGlzdGVudHJ5PgorCisgICAgICA8dmFybGlzdGVudHJ5IGlkPSJzdGF0cy5hcmVuYXMuaS5s ZXh0ZW50cy5qLmN1cmxleHRlbnRzIj4KKyAgICAgICAgPHRlcm0+CisgICAgICAgICAgPG1hbGxj dGw+c3RhdHMuYXJlbmFzLiZsdDtpJmd0Oy5sZXh0ZW50cy4mbHQ7aiZndDsuY3VybGV4dGVudHM8 L21hbGxjdGw+CisgICAgICAgICAgKDx0eXBlPnNpemVfdDwvdHlwZT4pCisgICAgICAgICAgPGxp dGVyYWw+ci08L2xpdGVyYWw+CisgICAgICAgICAgWzxvcHRpb24+LS1lbmFibGUtc3RhdHM8L29w dGlvbj5dCisgICAgICAgIDwvdGVybT4KKyAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkN1cnJlbnQg bnVtYmVyIG9mIGxhcmdlIGFsbG9jYXRpb25zIGZvciB0aGlzIHNpemUgY2xhc3MuCisgICAgICAg IDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAgIDx2YXJs aXN0ZW50cnkgaWQ9InN0YXRzLmFyZW5hcy5pLm11dGV4ZXMubGFyZ2UiPgorICAgICAgICA8dGVy bT4KKyAgICAgICAgICA8bWFsbGN0bD5zdGF0cy5hcmVuYXMuJmx0O2kmZ3Q7Lm11dGV4ZXMubGFy Z2Uue2NvdW50ZXJ9PC9tYWxsY3RsPgorICAgICAgICAgICg8dHlwZT5jb3VudGVyIHNwZWNpZmlj IHR5cGU8L3R5cGU+KSA8bGl0ZXJhbD5yLTwvbGl0ZXJhbD4KKyAgICAgICAgICBbPG9wdGlvbj4t LWVuYWJsZS1zdGF0czwvb3B0aW9uPl0KKyAgICAgICAgPC90ZXJtPgorICAgICAgICA8bGlzdGl0 ZW0+PHBhcmE+U3RhdGlzdGljcyBvbiA8dmFybmFtZT5hcmVuYS4mbHQ7aSZndDsubGFyZ2U8L3Zh cm5hbWU+CisgICAgICAgIG11dGV4IChhcmVuYSBzY29wZTsgbGFyZ2UgYWxsb2NhdGlvbiByZWxh dGVkKS4KKyAgICAgICAgPG1hbGxjdGw+e2NvdW50ZXJ9PC9tYWxsY3RsPiBpcyBvbmUgb2YgdGhl IGNvdW50ZXJzIGluIDxsaW5rCisgICAgICAgIGxpbmtlbmQ9Im11dGV4X2NvdW50ZXJzIj5tdXRl eCBwcm9maWxpbmcKKyAgICAgICAgY291bnRlcnM8L2xpbms+LjwvcGFyYT48L2xpc3RpdGVtPgor ICAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9InN0YXRzLmFy ZW5hcy5pLm11dGV4ZXMuZXh0ZW50X2F2YWlsIj4KKyAgICAgICAgPHRlcm0+CisgICAgICAgICAg PG1hbGxjdGw+c3RhdHMuYXJlbmFzLiZsdDtpJmd0Oy5tdXRleGVzLmV4dGVudF9hdmFpbC57Y291 bnRlcn08L21hbGxjdGw+CisgICAgICAgICAgKDx0eXBlPmNvdW50ZXIgc3BlY2lmaWMgdHlwZTwv dHlwZT4pIDxsaXRlcmFsPnItPC9saXRlcmFsPgorICAgICAgICAgIFs8b3B0aW9uPi0tZW5hYmxl LXN0YXRzPC9vcHRpb24+XQorICAgICAgICA8L3Rlcm0+CisgICAgICAgIDxsaXN0aXRlbT48cGFy YT5TdGF0aXN0aWNzIG9uIDx2YXJuYW1lPmFyZW5hLiZsdDtpJmd0Oy5leHRlbnRfYXZhaWwKKyAg ICAgICAgPC92YXJuYW1lPiBtdXRleCAoYXJlbmEgc2NvcGU7IGV4dGVudCBhdmFpbCByZWxhdGVk KS4KKyAgICAgICAgPG1hbGxjdGw+e2NvdW50ZXJ9PC9tYWxsY3RsPiBpcyBvbmUgb2YgdGhlIGNv dW50ZXJzIGluIDxsaW5rCisgICAgICAgIGxpbmtlbmQ9Im11dGV4X2NvdW50ZXJzIj5tdXRleCBw cm9maWxpbmcKKyAgICAgICAgY291bnRlcnM8L2xpbms+LjwvcGFyYT48L2xpc3RpdGVtPgorICAg ICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9InN0YXRzLmFyZW5h cy5pLm11dGV4ZXMuZXh0ZW50c19kaXJ0eSI+CisgICAgICAgIDx0ZXJtPgorICAgICAgICAgIDxt YWxsY3RsPnN0YXRzLmFyZW5hcy4mbHQ7aSZndDsubXV0ZXhlcy5leHRlbnRzX2RpcnR5Lntjb3Vu dGVyfTwvbWFsbGN0bD4KKyAgICAgICAgICAoPHR5cGU+Y291bnRlciBzcGVjaWZpYyB0eXBlPC90 eXBlPikgPGxpdGVyYWw+ci08L2xpdGVyYWw+CisgICAgICAgICAgWzxvcHRpb24+LS1lbmFibGUt c3RhdHM8L29wdGlvbj5dCisgICAgICAgIDwvdGVybT4KKyAgICAgICAgPGxpc3RpdGVtPjxwYXJh PlN0YXRpc3RpY3Mgb24gPHZhcm5hbWU+YXJlbmEuJmx0O2kmZ3Q7LmV4dGVudHNfZGlydHkKKyAg ICAgICAgPC92YXJuYW1lPiBtdXRleCAoYXJlbmEgc2NvcGU7IGRpcnR5IGV4dGVudHMgcmVsYXRl ZCkuCisgICAgICAgIDxtYWxsY3RsPntjb3VudGVyfTwvbWFsbGN0bD4gaXMgb25lIG9mIHRoZSBj b3VudGVycyBpbiA8bGluaworICAgICAgICBsaW5rZW5kPSJtdXRleF9jb3VudGVycyI+bXV0ZXgg cHJvZmlsaW5nCisgICAgICAgIGNvdW50ZXJzPC9saW5rPi48L3BhcmE+PC9saXN0aXRlbT4KKyAg ICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAgICA8dmFybGlzdGVudHJ5IGlkPSJzdGF0cy5hcmVu YXMuaS5tdXRleGVzLmV4dGVudHNfbXV6enkiPgorICAgICAgICA8dGVybT4KKyAgICAgICAgICA8 bWFsbGN0bD5zdGF0cy5hcmVuYXMuJmx0O2kmZ3Q7Lm11dGV4ZXMuZXh0ZW50c19tdXp6eS57Y291 bnRlcn08L21hbGxjdGw+CisgICAgICAgICAgKDx0eXBlPmNvdW50ZXIgc3BlY2lmaWMgdHlwZTwv dHlwZT4pIDxsaXRlcmFsPnItPC9saXRlcmFsPgorICAgICAgICAgIFs8b3B0aW9uPi0tZW5hYmxl LXN0YXRzPC9vcHRpb24+XQorICAgICAgICA8L3Rlcm0+CisgICAgICAgIDxsaXN0aXRlbT48cGFy YT5TdGF0aXN0aWNzIG9uIDx2YXJuYW1lPmFyZW5hLiZsdDtpJmd0Oy5leHRlbnRzX211enp5Cisg ICAgICAgIDwvdmFybmFtZT4gbXV0ZXggKGFyZW5hIHNjb3BlOyBtdXp6eSBleHRlbnRzIHJlbGF0 ZWQpLgorICAgICAgICA8bWFsbGN0bD57Y291bnRlcn08L21hbGxjdGw+IGlzIG9uZSBvZiB0aGUg Y291bnRlcnMgaW4gPGxpbmsKKyAgICAgICAgbGlua2VuZD0ibXV0ZXhfY291bnRlcnMiPm11dGV4 IHByb2ZpbGluZworICAgICAgICBjb3VudGVyczwvbGluaz4uPC9wYXJhPjwvbGlzdGl0ZW0+Cisg ICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgICAgPHZhcmxpc3RlbnRyeSBpZD0ic3RhdHMuYXJl bmFzLmkubXV0ZXhlcy5leHRlbnRzX3JldGFpbmVkIj4KKyAgICAgICAgPHRlcm0+CisgICAgICAg ICAgPG1hbGxjdGw+c3RhdHMuYXJlbmFzLiZsdDtpJmd0Oy5tdXRleGVzLmV4dGVudHNfcmV0YWlu ZWQue2NvdW50ZXJ9PC9tYWxsY3RsPgorICAgICAgICAgICg8dHlwZT5jb3VudGVyIHNwZWNpZmlj IHR5cGU8L3R5cGU+KSA8bGl0ZXJhbD5yLTwvbGl0ZXJhbD4KKyAgICAgICAgICBbPG9wdGlvbj4t LWVuYWJsZS1zdGF0czwvb3B0aW9uPl0KKyAgICAgICAgPC90ZXJtPgorICAgICAgICA8bGlzdGl0 ZW0+PHBhcmE+U3RhdGlzdGljcyBvbiA8dmFybmFtZT5hcmVuYS4mbHQ7aSZndDsuZXh0ZW50c19y ZXRhaW5lZAorICAgICAgICA8L3Zhcm5hbWU+IG11dGV4IChhcmVuYSBzY29wZTsgcmV0YWluZWQg ZXh0ZW50cyByZWxhdGVkKS4KKyAgICAgICAgPG1hbGxjdGw+e2NvdW50ZXJ9PC9tYWxsY3RsPiBp cyBvbmUgb2YgdGhlIGNvdW50ZXJzIGluIDxsaW5rCisgICAgICAgIGxpbmtlbmQ9Im11dGV4X2Nv dW50ZXJzIj5tdXRleCBwcm9maWxpbmcKKyAgICAgICAgY291bnRlcnM8L2xpbms+LjwvcGFyYT48 L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAgIDx2YXJsaXN0ZW50cnkg aWQ9InN0YXRzLmFyZW5hcy5pLm11dGV4ZXMuZGVjYXlfZGlydHkiPgorICAgICAgICA8dGVybT4K KyAgICAgICAgICA8bWFsbGN0bD5zdGF0cy5hcmVuYXMuJmx0O2kmZ3Q7Lm11dGV4ZXMuZGVjYXlf ZGlydHkue2NvdW50ZXJ9PC9tYWxsY3RsPgorICAgICAgICAgICg8dHlwZT5jb3VudGVyIHNwZWNp ZmljIHR5cGU8L3R5cGU+KSA8bGl0ZXJhbD5yLTwvbGl0ZXJhbD4KKyAgICAgICAgICBbPG9wdGlv bj4tLWVuYWJsZS1zdGF0czwvb3B0aW9uPl0KKyAgICAgICAgPC90ZXJtPgorICAgICAgICA8bGlz dGl0ZW0+PHBhcmE+U3RhdGlzdGljcyBvbiA8dmFybmFtZT5hcmVuYS4mbHQ7aSZndDsuZGVjYXlf ZGlydHkKKyAgICAgICAgPC92YXJuYW1lPiBtdXRleCAoYXJlbmEgc2NvcGU7IGRlY2F5IGZvciBk aXJ0eSBwYWdlcyByZWxhdGVkKS4KKyAgICAgICAgPG1hbGxjdGw+e2NvdW50ZXJ9PC9tYWxsY3Rs PiBpcyBvbmUgb2YgdGhlIGNvdW50ZXJzIGluIDxsaW5rCisgICAgICAgIGxpbmtlbmQ9Im11dGV4 X2NvdW50ZXJzIj5tdXRleCBwcm9maWxpbmcKKyAgICAgICAgY291bnRlcnM8L2xpbms+LjwvcGFy YT48L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAgIDx2YXJsaXN0ZW50 cnkgaWQ9InN0YXRzLmFyZW5hcy5pLm11dGV4ZXMuZGVjYXlfbXV6enkiPgorICAgICAgICA8dGVy bT4KKyAgICAgICAgICA8bWFsbGN0bD5zdGF0cy5hcmVuYXMuJmx0O2kmZ3Q7Lm11dGV4ZXMuZGVj YXlfbXV6enkue2NvdW50ZXJ9PC9tYWxsY3RsPgorICAgICAgICAgICg8dHlwZT5jb3VudGVyIHNw ZWNpZmljIHR5cGU8L3R5cGU+KSA8bGl0ZXJhbD5yLTwvbGl0ZXJhbD4KKyAgICAgICAgICBbPG9w dGlvbj4tLWVuYWJsZS1zdGF0czwvb3B0aW9uPl0KKyAgICAgICAgPC90ZXJtPgorICAgICAgICA8 bGlzdGl0ZW0+PHBhcmE+U3RhdGlzdGljcyBvbiA8dmFybmFtZT5hcmVuYS4mbHQ7aSZndDsuZGVj YXlfbXV6enkKKyAgICAgICAgPC92YXJuYW1lPiBtdXRleCAoYXJlbmEgc2NvcGU7IGRlY2F5IGZv ciBtdXp6eSBwYWdlcyByZWxhdGVkKS4KKyAgICAgICAgPG1hbGxjdGw+e2NvdW50ZXJ9PC9tYWxs Y3RsPiBpcyBvbmUgb2YgdGhlIGNvdW50ZXJzIGluIDxsaW5rCisgICAgICAgIGxpbmtlbmQ9Im11 dGV4X2NvdW50ZXJzIj5tdXRleCBwcm9maWxpbmcKKyAgICAgICAgY291bnRlcnM8L2xpbms+Ljwv cGFyYT48L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAgIDx2YXJsaXN0 ZW50cnkgaWQ9InN0YXRzLmFyZW5hcy5pLm11dGV4ZXMuYmFzZSI+CisgICAgICAgIDx0ZXJtPgor ICAgICAgICAgIDxtYWxsY3RsPnN0YXRzLmFyZW5hcy4mbHQ7aSZndDsubXV0ZXhlcy5iYXNlLntj b3VudGVyfTwvbWFsbGN0bD4KKyAgICAgICAgICAoPHR5cGU+Y291bnRlciBzcGVjaWZpYyB0eXBl PC90eXBlPikgPGxpdGVyYWw+ci08L2xpdGVyYWw+CisgICAgICAgICAgWzxvcHRpb24+LS1lbmFi bGUtc3RhdHM8L29wdGlvbj5dCisgICAgICAgIDwvdGVybT4KKyAgICAgICAgPGxpc3RpdGVtPjxw YXJhPlN0YXRpc3RpY3Mgb24gPHZhcm5hbWU+YXJlbmEuJmx0O2kmZ3Q7LmJhc2U8L3Zhcm5hbWU+ CisgICAgICAgIG11dGV4IChhcmVuYSBzY29wZTsgYmFzZSBhbGxvY2F0b3IgcmVsYXRlZCkuCisg ICAgICAgIDxtYWxsY3RsPntjb3VudGVyfTwvbWFsbGN0bD4gaXMgb25lIG9mIHRoZSBjb3VudGVy cyBpbiA8bGluaworICAgICAgICBsaW5rZW5kPSJtdXRleF9jb3VudGVycyI+bXV0ZXggcHJvZmls aW5nCisgICAgICAgIGNvdW50ZXJzPC9saW5rPi48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgIDwv dmFybGlzdGVudHJ5PgorCisgICAgICA8dmFybGlzdGVudHJ5IGlkPSJzdGF0cy5hcmVuYXMuaS5t dXRleGVzLnRjYWNoZV9saXN0Ij4KKyAgICAgICAgPHRlcm0+CisgICAgICAgICAgPG1hbGxjdGw+ c3RhdHMuYXJlbmFzLiZsdDtpJmd0Oy5tdXRleGVzLnRjYWNoZV9saXN0Lntjb3VudGVyfTwvbWFs bGN0bD4KKyAgICAgICAgICAoPHR5cGU+Y291bnRlciBzcGVjaWZpYyB0eXBlPC90eXBlPikgPGxp dGVyYWw+ci08L2xpdGVyYWw+CisgICAgICAgICAgWzxvcHRpb24+LS1lbmFibGUtc3RhdHM8L29w dGlvbj5dCisgICAgICAgIDwvdGVybT4KKyAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlN0YXRpc3Rp Y3Mgb24KKyAgICAgICAgPHZhcm5hbWU+YXJlbmEuJmx0O2kmZ3Q7LnRjYWNoZV9saXN0PC92YXJu YW1lPiBtdXRleCAoYXJlbmEgc2NvcGU7CisgICAgICAgIHRjYWNoZSB0byBhcmVuYSBhc3NvY2lh dGlvbiByZWxhdGVkKS4gIFRoaXMgbXV0ZXggaXMgZXhwZWN0ZWQgdG8gYmUKKyAgICAgICAgYWNj ZXNzZWQgbGVzcyBvZnRlbi4gIDxtYWxsY3RsPntjb3VudGVyfTwvbWFsbGN0bD4gaXMgb25lIG9m IHRoZQorICAgICAgICBjb3VudGVycyBpbiA8bGluayBsaW5rZW5kPSJtdXRleF9jb3VudGVycyI+ bXV0ZXggcHJvZmlsaW5nCisgICAgICAgIGNvdW50ZXJzPC9saW5rPi48L3BhcmE+PC9saXN0aXRl bT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAgPC92YXJpYWJsZWxpc3Q+CisgIDwvcmVm c2VjdDE+CisgIDxyZWZzZWN0MSBpZD0iaGVhcF9wcm9maWxlX2Zvcm1hdCI+CisgICAgPHRpdGxl PkhFQVAgUFJPRklMRSBGT1JNQVQ8L3RpdGxlPgorICAgIDxwYXJhPkFsdGhvdWdoIHRoZSBoZWFw IHByb2ZpbGluZyBmdW5jdGlvbmFsaXR5IHdhcyBvcmlnaW5hbGx5IGRlc2lnbmVkIHRvCisgICAg YmUgY29tcGF0aWJsZSB3aXRoIHRoZQorICAgIDxjb21tYW5kPnBwcm9mPC9jb21tYW5kPiBjb21t YW5kIHRoYXQgaXMgZGV2ZWxvcGVkIGFzIHBhcnQgb2YgdGhlIDx1bGluaworICAgIHVybD0iaHR0 cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2dwZXJmdG9vbHMvIj5ncGVyZnRvb2xzCisgICAgcGFja2Fn ZTwvdWxpbms+LCB0aGUgYWRkaXRpb24gb2YgcGVyIHRocmVhZCBoZWFwIHByb2ZpbGluZyBmdW5j dGlvbmFsaXR5CisgICAgcmVxdWlyZWQgYSBkaWZmZXJlbnQgaGVhcCBwcm9maWxlIGZvcm1hdC4g IFRoZSA8Y29tbWFuZD5qZXByb2Y8L2NvbW1hbmQ+CisgICAgY29tbWFuZCBpcyBkZXJpdmVkIGZy b20gPGNvbW1hbmQ+cHByb2Y8L2NvbW1hbmQ+LCB3aXRoIGVuaGFuY2VtZW50cyB0bworICAgIHN1 cHBvcnQgdGhlIGhlYXAgcHJvZmlsZSBmb3JtYXQgZGVzY3JpYmVkIGhlcmUuPC9wYXJhPgorCisg ICAgPHBhcmE+SW4gdGhlIGZvbGxvd2luZyBoeXBvdGhldGljYWwgaGVhcCBwcm9maWxlLCA8Y29u c3RhbnQ+Wy4uLl08L2NvbnN0YW50PgorICAgIGluZGljYXRlcyBlbGlzaW9uIGZvciB0aGUgc2Fr ZSBvZiBjb21wYWN0bmVzcy4gIDxwcm9ncmFtbGlzdGluZz48IVtDREFUQVsKK2hlYXBfdjIvNTI0 Mjg4CisgIHQqOiAyODEwNjogNTY2Mzc1MTIgWzA6IDBdCisgIFsuLi5dCisgIHQzOiAzNTI6IDE2 Nzc3MzQ0IFswOiAwXQorICBbLi4uXQorICB0OTk6IDE3NzU0OiAyOTM0MTY0MCBbMDogMF0KKyAg Wy4uLl0KK0AgMHg1Zjg2ZGE4IDB4NWY1YTFkYyBbLi4uXSAweDI5ZTRkNGUgMHhhMjAwMzE2IDB4 YWJiMjk4OCBbLi4uXQorICB0KjogMTM6IDY2ODggWzA6IDBdCisgIHQzOiAxMjogNjQ5NiBbMDog MF0KKyAgdDk5OiAxOiAxOTIgWzA6IDBdCitbLi4uXQorCitNQVBQRURfTElCUkFSSUVTOgorWy4u Ll1dXT48L3Byb2dyYW1saXN0aW5nPiBUaGUgZm9sbG93aW5nIG1hdGNoZXMgdGhlIGFib3ZlIGhl YXAgcHJvZmlsZSwgYnV0IG1vc3QKK3Rva2VucyBhcmUgcmVwbGFjZWQgd2l0aCA8Y29uc3RhbnQ+ Jmx0O2Rlc2NyaXB0aW9uJmd0OzwvY29uc3RhbnQ+IHRvIGluZGljYXRlCitkZXNjcmlwdGlvbnMg b2YgdGhlIGNvcnJlc3BvbmRpbmcgZmllbGRzLiAgPHByb2dyYW1saXN0aW5nPjwhW0NEQVRBWwor PGhlYXBfcHJvZmlsZV9mb3JtYXRfdmVyc2lvbj4vPG1lYW5fc2FtcGxlX2ludGVydmFsPgorICA8 YWdncmVnYXRlPjogPGN1cm9ianM+OiA8Y3VyYnl0ZXM+IFs8Y3Vtb2Jqcz46IDxjdW1ieXRlcz5d CisgIFsuLi5dCisgIDx0aHJlYWRfM19hZ2dyZWdhdGU+OiA8Y3Vyb2Jqcz46IDxjdXJieXRlcz4g WzxjdW1vYmpzPjogPGN1bWJ5dGVzPl0KKyAgWy4uLl0KKyAgPHRocmVhZF85OV9hZ2dyZWdhdGU+ OiA8Y3Vyb2Jqcz46IDxjdXJieXRlcz4gWzxjdW1vYmpzPjogPGN1bWJ5dGVzPl0KKyAgWy4uLl0K K0AgPHRvcF9mcmFtZT4gPGZyYW1lPiBbLi4uXSA8ZnJhbWU+IDxmcmFtZT4gPGZyYW1lPiBbLi4u XQorICA8YmFja3RyYWNlX2FnZ3JlZ2F0ZT46IDxjdXJvYmpzPjogPGN1cmJ5dGVzPiBbPGN1bW9i anM+OiA8Y3VtYnl0ZXM+XQorICA8YmFja3RyYWNlX3RocmVhZF8zPjogPGN1cm9ianM+OiA8Y3Vy Ynl0ZXM+IFs8Y3Vtb2Jqcz46IDxjdW1ieXRlcz5dCisgIDxiYWNrdHJhY2VfdGhyZWFkXzk5Pjog PGN1cm9ianM+OiA8Y3VyYnl0ZXM+IFs8Y3Vtb2Jqcz46IDxjdW1ieXRlcz5dCitbLi4uXQorCitN QVBQRURfTElCUkFSSUVTOgorPC9wcm9jLzxwaWQ+L21hcHM+XV0+PC9wcm9ncmFtbGlzdGluZz48 L3BhcmE+CisgIDwvcmVmc2VjdDE+CisKKyAgPHJlZnNlY3QxIGlkPSJkZWJ1Z2dpbmdfbWFsbG9j X3Byb2JsZW1zIj4KKyAgICA8dGl0bGU+REVCVUdHSU5HIE1BTExPQyBQUk9CTEVNUzwvdGl0bGU+ CisgICAgPHBhcmE+V2hlbiBkZWJ1Z2dpbmcsIGl0IGlzIGEgZ29vZCBpZGVhIHRvIGNvbmZpZ3Vy ZS9idWlsZCBqZW1hbGxvYyB3aXRoCisgICAgdGhlIDxvcHRpb24+LS1lbmFibGUtZGVidWc8L29w dGlvbj4gYW5kIDxvcHRpb24+LS1lbmFibGUtZmlsbDwvb3B0aW9uPgorICAgIG9wdGlvbnMsIGFu ZCByZWNvbXBpbGUgdGhlIHByb2dyYW0gd2l0aCBzdWl0YWJsZSBvcHRpb25zIGFuZCBzeW1ib2xz IGZvcgorICAgIGRlYnVnZ2VyIHN1cHBvcnQuICBXaGVuIHNvIGNvbmZpZ3VyZWQsIGplbWFsbG9j IGluY29ycG9yYXRlcyBhIHdpZGUgdmFyaWV0eQorICAgIG9mIHJ1bi10aW1lIGFzc2VydGlvbnMg dGhhdCBjYXRjaCBhcHBsaWNhdGlvbiBlcnJvcnMgc3VjaCBhcyBkb3VibGUtZnJlZSwKKyAgICB3 cml0ZS1hZnRlci1mcmVlLCBldGMuPC9wYXJhPgorCisgICAgPHBhcmE+UHJvZ3JhbXMgb2Z0ZW4g YWNjaWRlbnRhbGx5IGRlcGVuZCBvbiA8cXVvdGU+dW5pbml0aWFsaXplZDwvcXVvdGU+CisgICAg bWVtb3J5IGFjdHVhbGx5IGJlaW5nIGZpbGxlZCB3aXRoIHplcm8gYnl0ZXMuICBKdW5rIGZpbGxp bmcKKyAgICAoc2VlIHRoZSA8bGluayBsaW5rZW5kPSJvcHQuanVuayI+PG1hbGxjdGw+b3B0Lmp1 bms8L21hbGxjdGw+PC9saW5rPgorICAgIG9wdGlvbikgdGVuZHMgdG8gZXhwb3NlIHN1Y2ggYnVn cyBpbiB0aGUgZm9ybSBvZiBvYnZpb3VzbHkgaW5jb3JyZWN0CisgICAgcmVzdWx0cyBhbmQvb3Ig Y29yZWR1bXBzLiAgQ29udmVyc2VseSwgemVybworICAgIGZpbGxpbmcgKHNlZSB0aGUgPGxpbmsK KyAgICBsaW5rZW5kPSJvcHQuemVybyI+PG1hbGxjdGw+b3B0Lnplcm88L21hbGxjdGw+PC9saW5r PiBvcHRpb24pIGVsaW1pbmF0ZXMKKyAgICB0aGUgc3ltcHRvbXMgb2Ygc3VjaCBidWdzLiAgQmV0 d2VlbiB0aGVzZSB0d28gb3B0aW9ucywgaXQgaXMgdXN1YWxseQorICAgIHBvc3NpYmxlIHRvIHF1 aWNrbHkgZGV0ZWN0LCBkaWFnbm9zZSwgYW5kIGVsaW1pbmF0ZSBzdWNoIGJ1Z3MuPC9wYXJhPgor CisgICAgPHBhcmE+VGhpcyBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdCBwcm92aWRlIG11Y2ggZGV0 YWlsIGFib3V0IHRoZSBwcm9ibGVtcworICAgIGl0IGRldGVjdHMsIGJlY2F1c2UgdGhlIHBlcmZv cm1hbmNlIGltcGFjdCBmb3Igc3RvcmluZyBzdWNoIGluZm9ybWF0aW9uCisgICAgd291bGQgYmUg cHJvaGliaXRpdmUuPC9wYXJhPgorICA8L3JlZnNlY3QxPgorICA8cmVmc2VjdDEgaWQ9ImRpYWdu b3N0aWNfbWVzc2FnZXMiPgorICAgIDx0aXRsZT5ESUFHTk9TVElDIE1FU1NBR0VTPC90aXRsZT4K KyAgICA8cGFyYT5JZiBhbnkgb2YgdGhlIG1lbW9yeSBhbGxvY2F0aW9uL2RlYWxsb2NhdGlvbiBm dW5jdGlvbnMgZGV0ZWN0IGFuCisgICAgZXJyb3Igb3Igd2FybmluZyBjb25kaXRpb24sIGEgbWVz c2FnZSB3aWxsIGJlIHByaW50ZWQgdG8gZmlsZSBkZXNjcmlwdG9yCisgICAgPGNvbnN0YW50PlNU REVSUl9GSUxFTk88L2NvbnN0YW50Pi4gIEVycm9ycyB3aWxsIHJlc3VsdCBpbiB0aGUgcHJvY2Vz cworICAgIGR1bXBpbmcgY29yZS4gIElmIHRoZSA8bGluaworICAgIGxpbmtlbmQ9Im9wdC5hYm9y dCI+PG1hbGxjdGw+b3B0LmFib3J0PC9tYWxsY3RsPjwvbGluaz4gb3B0aW9uIGlzIHNldCwgbW9z dAorICAgIHdhcm5pbmdzIGFyZSB0cmVhdGVkIGFzIGVycm9ycy48L3BhcmE+CisKKyAgICA8cGFy YT5UaGUgPHZhcm5hbWU+bWFsbG9jX21lc3NhZ2U8L3Zhcm5hbWU+IHZhcmlhYmxlIGFsbG93cyB0 aGUgcHJvZ3JhbW1lcgorICAgIHRvIG92ZXJyaWRlIHRoZSBmdW5jdGlvbiB3aGljaCBlbWl0cyB0 aGUgdGV4dCBzdHJpbmdzIGZvcm1pbmcgdGhlIGVycm9ycworICAgIGFuZCB3YXJuaW5ncyBpZiBm b3Igc29tZSByZWFzb24gdGhlIDxjb25zdGFudD5TVERFUlJfRklMRU5PPC9jb25zdGFudD4gZmls ZQorICAgIGRlc2NyaXB0b3IgaXMgbm90IHN1aXRhYmxlIGZvciB0aGlzLgorICAgIDxmdW5jdGlv bj5tYWxsb2NfbWVzc2FnZSgpPC9mdW5jdGlvbj4gdGFrZXMgdGhlCisgICAgPHBhcmFtZXRlcj5j Ym9wYXF1ZTwvcGFyYW1ldGVyPiBwb2ludGVyIGFyZ3VtZW50IHRoYXQgaXMKKyAgICA8Y29uc3Rh bnQ+TlVMTDwvY29uc3RhbnQ+IHVubGVzcyBvdmVycmlkZGVuIGJ5IHRoZSBhcmd1bWVudHMgaW4g YSBjYWxsIHRvCisgICAgPGZ1bmN0aW9uPm1hbGxvY19zdGF0c19wcmludCgpPC9mdW5jdGlvbj4s IGZvbGxvd2VkIGJ5IGEgc3RyaW5nCisgICAgcG9pbnRlci4gIFBsZWFzZSBub3RlIHRoYXQgZG9p bmcgYW55dGhpbmcgd2hpY2ggdHJpZXMgdG8gYWxsb2NhdGUgbWVtb3J5IGluCisgICAgdGhpcyBm dW5jdGlvbiBpcyBsaWtlbHkgdG8gcmVzdWx0IGluIGEgY3Jhc2ggb3IgZGVhZGxvY2suPC9wYXJh PgorCisgICAgPHBhcmE+QWxsIG1lc3NhZ2VzIGFyZSBwcmVmaXhlZCBieQorICAgIDxxdW90ZT48 Y29tcHV0ZXJvdXRwdXQ+Jmx0O2plbWFsbG9jJmd0OzogPC9jb21wdXRlcm91dHB1dD48L3F1b3Rl Pi48L3BhcmE+CisgIDwvcmVmc2VjdDE+CisgIDxyZWZzZWN0MSBpZD0icmV0dXJuX3ZhbHVlcyI+ CisgICAgPHRpdGxlPlJFVFVSTiBWQUxVRVM8L3RpdGxlPgorICAgIDxyZWZzZWN0Mj4KKyAgICAg IDx0aXRsZT5TdGFuZGFyZCBBUEk8L3RpdGxlPgorICAgICAgPHBhcmE+VGhlIDxmdW5jdGlvbj5t YWxsb2MoKTwvZnVuY3Rpb24+IGFuZAorICAgICAgPGZ1bmN0aW9uPmNhbGxvYygpPC9mdW5jdGlv bj4gZnVuY3Rpb25zIHJldHVybiBhIHBvaW50ZXIgdG8gdGhlCisgICAgICBhbGxvY2F0ZWQgbWVt b3J5IGlmIHN1Y2Nlc3NmdWw7IG90aGVyd2lzZSBhIDxjb25zdGFudD5OVUxMPC9jb25zdGFudD4K KyAgICAgIHBvaW50ZXIgaXMgcmV0dXJuZWQgYW5kIDx2YXJuYW1lPmVycm5vPC92YXJuYW1lPiBp cyBzZXQgdG8KKyAgICAgIDxlcnJvcm5hbWU+RU5PTUVNPC9lcnJvcm5hbWU+LjwvcGFyYT4KKwor ICAgICAgPHBhcmE+VGhlIDxmdW5jdGlvbj5wb3NpeF9tZW1hbGlnbigpPC9mdW5jdGlvbj4gZnVu Y3Rpb24KKyAgICAgIHJldHVybnMgdGhlIHZhbHVlIDAgaWYgc3VjY2Vzc2Z1bDsgb3RoZXJ3aXNl IGl0IHJldHVybnMgYW4gZXJyb3IgdmFsdWUuCisgICAgICBUaGUgPGZ1bmN0aW9uPnBvc2l4X21l bWFsaWduKCk8L2Z1bmN0aW9uPiBmdW5jdGlvbiB3aWxsIGZhaWwKKyAgICAgIGlmOgorICAgICAg ICA8dmFyaWFibGVsaXN0PgorICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICAgICA8 dGVybT48ZXJyb3JuYW1lPkVJTlZBTDwvZXJyb3JuYW1lPjwvdGVybT4KKworICAgICAgICAgICAg PGxpc3RpdGVtPjxwYXJhPlRoZSA8cGFyYW1ldGVyPmFsaWdubWVudDwvcGFyYW1ldGVyPiBwYXJh bWV0ZXIgaXMKKyAgICAgICAgICAgIG5vdCBhIHBvd2VyIG9mIDIgYXQgbGVhc3QgYXMgbGFyZ2Ug YXMKKyAgICAgICAgICAgIDxjb2RlIGxhbmd1YWdlPSJDIj5zaXplb2YoPHR5cGU+dm9pZCAqPC90 eXBlPik8L2NvZGU+LgorICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAg PC92YXJsaXN0ZW50cnk+CisgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgIDx0 ZXJtPjxlcnJvcm5hbWU+RU5PTUVNPC9lcnJvcm5hbWU+PC90ZXJtPgorCisgICAgICAgICAgICA8 bGlzdGl0ZW0+PHBhcmE+TWVtb3J5IGFsbG9jYXRpb24gZXJyb3IuPC9wYXJhPjwvbGlzdGl0ZW0+ CisgICAgICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICAgIDwvdmFyaWFibGVsaXN0PgorICAg ICAgPC9wYXJhPgorCisgICAgICA8cGFyYT5UaGUgPGZ1bmN0aW9uPmFsaWduZWRfYWxsb2MoKTwv ZnVuY3Rpb24+IGZ1bmN0aW9uIHJldHVybnMKKyAgICAgIGEgcG9pbnRlciB0byB0aGUgYWxsb2Nh dGVkIG1lbW9yeSBpZiBzdWNjZXNzZnVsOyBvdGhlcndpc2UgYQorICAgICAgPGNvbnN0YW50Pk5V TEw8L2NvbnN0YW50PiBwb2ludGVyIGlzIHJldHVybmVkIGFuZAorICAgICAgPHZhcm5hbWU+ZXJy bm88L3Zhcm5hbWU+IGlzIHNldC4gIFRoZQorICAgICAgPGZ1bmN0aW9uPmFsaWduZWRfYWxsb2Mo KTwvZnVuY3Rpb24+IGZ1bmN0aW9uIHdpbGwgZmFpbCBpZjoKKyAgICAgICAgPHZhcmlhYmxlbGlz dD4KKyAgICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgICAgPHRlcm0+PGVycm9ybmFt ZT5FSU5WQUw8L2Vycm9ybmFtZT48L3Rlcm0+CisKKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFy YT5UaGUgPHBhcmFtZXRlcj5hbGlnbm1lbnQ8L3BhcmFtZXRlcj4gcGFyYW1ldGVyIGlzCisgICAg ICAgICAgICBub3QgYSBwb3dlciBvZiAyLgorICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+ CisgICAgICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAg ICAgICAgICAgIDx0ZXJtPjxlcnJvcm5hbWU+RU5PTUVNPC9lcnJvcm5hbWU+PC90ZXJtPgorCisg ICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+TWVtb3J5IGFsbG9jYXRpb24gZXJyb3IuPC9wYXJh PjwvbGlzdGl0ZW0+CisgICAgICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICAgIDwvdmFyaWFi bGVsaXN0PgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT5UaGUgPGZ1bmN0aW9uPnJlYWxs b2MoKTwvZnVuY3Rpb24+IGZ1bmN0aW9uIHJldHVybnMgYQorICAgICAgcG9pbnRlciwgcG9zc2li bHkgaWRlbnRpY2FsIHRvIDxwYXJhbWV0ZXI+cHRyPC9wYXJhbWV0ZXI+LCB0byB0aGUKKyAgICAg IGFsbG9jYXRlZCBtZW1vcnkgaWYgc3VjY2Vzc2Z1bDsgb3RoZXJ3aXNlIGEgPGNvbnN0YW50Pk5V TEw8L2NvbnN0YW50PgorICAgICAgcG9pbnRlciBpcyByZXR1cm5lZCwgYW5kIDx2YXJuYW1lPmVy cm5vPC92YXJuYW1lPiBpcyBzZXQgdG8KKyAgICAgIDxlcnJvcm5hbWU+RU5PTUVNPC9lcnJvcm5h bWU+IGlmIHRoZSBlcnJvciB3YXMgdGhlIHJlc3VsdCBvZiBhbgorICAgICAgYWxsb2NhdGlvbiBm YWlsdXJlLiAgVGhlIDxmdW5jdGlvbj5yZWFsbG9jKCk8L2Z1bmN0aW9uPgorICAgICAgZnVuY3Rp b24gYWx3YXlzIGxlYXZlcyB0aGUgb3JpZ2luYWwgYnVmZmVyIGludGFjdCB3aGVuIGFuIGVycm9y IG9jY3Vycy4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+VGhlIDxmdW5jdGlvbj5mcmVl KCk8L2Z1bmN0aW9uPiBmdW5jdGlvbiByZXR1cm5zIG5vCisgICAgICB2YWx1ZS48L3BhcmE+Cisg ICAgPC9yZWZzZWN0Mj4KKyAgICA8cmVmc2VjdDI+CisgICAgICA8dGl0bGU+Tm9uLXN0YW5kYXJk IEFQSTwvdGl0bGU+CisgICAgICA8cGFyYT5UaGUgPGZ1bmN0aW9uPm1hbGxvY3goKTwvZnVuY3Rp b24+IGFuZAorICAgICAgPGZ1bmN0aW9uPnJhbGxvY3goKTwvZnVuY3Rpb24+IGZ1bmN0aW9ucyBy ZXR1cm4gYSBwb2ludGVyIHRvCisgICAgICB0aGUgYWxsb2NhdGVkIG1lbW9yeSBpZiBzdWNjZXNz ZnVsOyBvdGhlcndpc2UgYSA8Y29uc3RhbnQ+TlVMTDwvY29uc3RhbnQ+CisgICAgICBwb2ludGVy IGlzIHJldHVybmVkIHRvIGluZGljYXRlIGluc3VmZmljaWVudCBjb250aWd1b3VzIG1lbW9yeSB3 YXMKKyAgICAgIGF2YWlsYWJsZSB0byBzZXJ2aWNlIHRoZSBhbGxvY2F0aW9uIHJlcXVlc3QuICA8 L3BhcmE+CisKKyAgICAgIDxwYXJhPlRoZSA8ZnVuY3Rpb24+eGFsbG9jeCgpPC9mdW5jdGlvbj4g ZnVuY3Rpb24gcmV0dXJucyB0aGUKKyAgICAgIHJlYWwgc2l6ZSBvZiB0aGUgcmVzdWx0aW5nIHJl c2l6ZWQgYWxsb2NhdGlvbiBwb2ludGVkIHRvIGJ5CisgICAgICA8cGFyYW1ldGVyPnB0cjwvcGFy YW1ldGVyPiwgd2hpY2ggaXMgYSB2YWx1ZSBsZXNzIHRoYW4KKyAgICAgIDxwYXJhbWV0ZXI+c2l6 ZTwvcGFyYW1ldGVyPiBpZiB0aGUgYWxsb2NhdGlvbiBjb3VsZCBub3QgYmUgYWRlcXVhdGVseQor ICAgICAgZ3Jvd24gaW4gcGxhY2UuICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPlRoZSA8ZnVuY3Rp b24+c2FsbG9jeCgpPC9mdW5jdGlvbj4gZnVuY3Rpb24gcmV0dXJucyB0aGUKKyAgICAgIHJlYWwg c2l6ZSBvZiB0aGUgYWxsb2NhdGlvbiBwb2ludGVkIHRvIGJ5IDxwYXJhbWV0ZXI+cHRyPC9wYXJh bWV0ZXI+LgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT5UaGUgPGZ1bmN0aW9uPm5hbGxv Y3goKTwvZnVuY3Rpb24+IHJldHVybnMgdGhlIHJlYWwgc2l6ZQorICAgICAgdGhhdCB3b3VsZCBy ZXN1bHQgZnJvbSBhIHN1Y2Nlc3NmdWwgZXF1aXZhbGVudAorICAgICAgPGZ1bmN0aW9uPm1hbGxv Y3goKTwvZnVuY3Rpb24+IGZ1bmN0aW9uIGNhbGwsIG9yIHplcm8gaWYKKyAgICAgIGluc3VmZmlj aWVudCBtZW1vcnkgaXMgYXZhaWxhYmxlIHRvIHBlcmZvcm0gdGhlIHNpemUgY29tcHV0YXRpb24u ICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPlRoZSA8ZnVuY3Rpb24+bWFsbGN0bCgpPC9mdW5jdGlv bj4sCisgICAgICA8ZnVuY3Rpb24+bWFsbGN0bG5hbWV0b21pYigpPC9mdW5jdGlvbj4sIGFuZAor ICAgICAgPGZ1bmN0aW9uPm1hbGxjdGxieW1pYigpPC9mdW5jdGlvbj4gZnVuY3Rpb25zIHJldHVy biAwIG9uCisgICAgICBzdWNjZXNzOyBvdGhlcndpc2UgdGhleSByZXR1cm4gYW4gZXJyb3IgdmFs dWUuICBUaGUgZnVuY3Rpb25zIHdpbGwgZmFpbAorICAgICAgaWY6CisgICAgICAgIDx2YXJpYWJs ZWxpc3Q+CisgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgIDx0ZXJtPjxlcnJv cm5hbWU+RUlOVkFMPC9lcnJvcm5hbWU+PC90ZXJtPgorCisgICAgICAgICAgICA8bGlzdGl0ZW0+ PHBhcmE+PHBhcmFtZXRlcj5uZXdwPC9wYXJhbWV0ZXI+IGlzIG5vdAorICAgICAgICAgICAgPGNv bnN0YW50Pk5VTEw8L2NvbnN0YW50PiwgYW5kIDxwYXJhbWV0ZXI+bmV3bGVuPC9wYXJhbWV0ZXI+ IGlzIHRvbworICAgICAgICAgICAgbGFyZ2Ugb3IgdG9vIHNtYWxsLiAgQWx0ZXJuYXRpdmVseSwg PHBhcmFtZXRlcj4qb2xkbGVucDwvcGFyYW1ldGVyPgorICAgICAgICAgICAgaXMgdG9vIGxhcmdl IG9yIHRvbyBzbWFsbDsgd2hlbiBpdCBoYXBwZW5zLCBleGNlcHQgZm9yIGEgdmVyeSBmZXcKKyAg ICAgICAgICAgIGNhc2VzIGV4cGxpY2l0bHkgZG9jdW1lbnRlZCBvdGhlcndpc2UsIGFzIG11Y2gg ZGF0YSBhcyBwb3NzaWJsZQorICAgICAgICAgICAgYXJlIHJlYWQgZGVzcGl0ZSB0aGUgZXJyb3Is IHdpdGggdGhlIGFtb3VudCBvZiBkYXRhIHJlYWQgYmVpbmcKKyAgICAgICAgICAgIHJlY29yZGVk IGluIDxwYXJhbWV0ZXI+Km9sZGxlbnA8L3BhcmFtZXRlcj4uPC9wYXJhPjwvbGlzdGl0ZW0+Cisg ICAgICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAg ICAgICAgIDx0ZXJtPjxlcnJvcm5hbWU+RU5PRU5UPC9lcnJvcm5hbWU+PC90ZXJtPgorCisgICAg ICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PHBhcmFtZXRlcj5uYW1lPC9wYXJhbWV0ZXI+IG9yCisg ICAgICAgICAgICA8cGFyYW1ldGVyPm1pYjwvcGFyYW1ldGVyPiBzcGVjaWZpZXMgYW4gdW5rbm93 bi9pbnZhbGlkCisgICAgICAgICAgICB2YWx1ZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAg ICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgICAg PHRlcm0+PGVycm9ybmFtZT5FUEVSTTwvZXJyb3JuYW1lPjwvdGVybT4KKworICAgICAgICAgICAg PGxpc3RpdGVtPjxwYXJhPkF0dGVtcHQgdG8gcmVhZCBvciB3cml0ZSB2b2lkIHZhbHVlLCBvciBh dHRlbXB0IHRvCisgICAgICAgICAgICB3cml0ZSByZWFkLW9ubHkgdmFsdWUuPC9wYXJhPjwvbGlz dGl0ZW0+CisgICAgICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICAgICAgPHZhcmxpc3RlbnRy eT4KKyAgICAgICAgICAgIDx0ZXJtPjxlcnJvcm5hbWU+RUFHQUlOPC9lcnJvcm5hbWU+PC90ZXJt PgorCisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+QSBtZW1vcnkgYWxsb2NhdGlvbiBmYWls dXJlCisgICAgICAgICAgICBvY2N1cnJlZC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICA8 L3Zhcmxpc3RlbnRyeT4KKyAgICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgICAgPHRl cm0+PGVycm9ybmFtZT5FRkFVTFQ8L2Vycm9ybmFtZT48L3Rlcm0+CisKKyAgICAgICAgICAgIDxs aXN0aXRlbT48cGFyYT5BbiBpbnRlcmZhY2Ugd2l0aCBzaWRlIGVmZmVjdHMgZmFpbGVkIGluIHNv bWUgd2F5CisgICAgICAgICAgICBub3QgZGlyZWN0bHkgcmVsYXRlZCB0byA8ZnVuY3Rpb24+bWFs bGN0bCooKTwvZnVuY3Rpb24+CisgICAgICAgICAgICByZWFkL3dyaXRlIHByb2Nlc3NpbmcuPC9w YXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICAgIDwvdmFy aWFibGVsaXN0PgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT5UaGUgPGZ1bmN0aW9uPm1h bGxvY191c2FibGVfc2l6ZSgpPC9mdW5jdGlvbj4gZnVuY3Rpb24KKyAgICAgIHJldHVybnMgdGhl IHVzYWJsZSBzaXplIG9mIHRoZSBhbGxvY2F0aW9uIHBvaW50ZWQgdG8gYnkKKyAgICAgIDxwYXJh bWV0ZXI+cHRyPC9wYXJhbWV0ZXI+LiAgPC9wYXJhPgorICAgIDwvcmVmc2VjdDI+CisgIDwvcmVm c2VjdDE+CisgIDxyZWZzZWN0MSBpZD0iZW52aXJvbm1lbnQiPgorICAgIDx0aXRsZT5FTlZJUk9O TUVOVDwvdGl0bGU+CisgICAgPHBhcmE+VGhlIGZvbGxvd2luZyBlbnZpcm9ubWVudCB2YXJpYWJs ZSBhZmZlY3RzIHRoZSBleGVjdXRpb24gb2YgdGhlCisgICAgYWxsb2NhdGlvbiBmdW5jdGlvbnM6 CisgICAgICA8dmFyaWFibGVsaXN0PgorICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAg IDx0ZXJtPjxlbnZhcj5NQUxMT0NfQ09ORjwvZW52YXI+PC90ZXJtPgorCisgICAgICAgICAgPGxp c3RpdGVtPjxwYXJhPklmIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZQorICAgICAgICAgIDxlbnZh cj5NQUxMT0NfQ09ORjwvZW52YXI+IGlzIHNldCwgdGhlIGNoYXJhY3RlcnMgaXQgY29udGFpbnMK KyAgICAgICAgICB3aWxsIGJlIGludGVycHJldGVkIGFzIG9wdGlvbnMuPC9wYXJhPjwvbGlzdGl0 ZW0+CisgICAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPC92YXJpYWJsZWxpc3Q+CisgICAg PC9wYXJhPgorICA8L3JlZnNlY3QxPgorICA8cmVmc2VjdDEgaWQ9ImV4YW1wbGVzIj4KKyAgICA8 dGl0bGU+RVhBTVBMRVM8L3RpdGxlPgorICAgIDxwYXJhPlRvIGR1bXAgY29yZSB3aGVuZXZlciBh IHByb2JsZW0gb2NjdXJzOgorICAgICAgPHNjcmVlbj5sbiAtcyAnYWJvcnQ6dHJ1ZScgL2V0Yy9t YWxsb2MuY29uZjwvc2NyZWVuPgorICAgIDwvcGFyYT4KKyAgICA8cGFyYT5UbyBzcGVjaWZ5IGlu IHRoZSBzb3VyY2UgdGhhdCBvbmx5IG9uZSBhcmVuYSBzaG91bGQgYmUgYXV0b21hdGljYWxseQor ICAgIGNyZWF0ZWQ6CisgICAgICA8cHJvZ3JhbWxpc3RpbmcgbGFuZ3VhZ2U9IkMiPjwhW0NEQVRB WworbWFsbG9jX2NvbmYgPSAibmFyZW5hczoxIjtdXT48L3Byb2dyYW1saXN0aW5nPjwvcGFyYT4K KyAgPC9yZWZzZWN0MT4KKyAgPHJlZnNlY3QxIGlkPSJzZWVfYWxzbyI+CisgICAgPHRpdGxlPlNF RSBBTFNPPC90aXRsZT4KKyAgICA8cGFyYT48Y2l0ZXJlZmVudHJ5PjxyZWZlbnRyeXRpdGxlPm1h ZHZpc2U8L3JlZmVudHJ5dGl0bGU+CisgICAgPG1hbnZvbG51bT4yPC9tYW52b2xudW0+PC9jaXRl cmVmZW50cnk+LAorICAgIDxjaXRlcmVmZW50cnk+PHJlZmVudHJ5dGl0bGU+bW1hcDwvcmVmZW50 cnl0aXRsZT4KKyAgICA8bWFudm9sbnVtPjI8L21hbnZvbG51bT48L2NpdGVyZWZlbnRyeT4sCisg ICAgPGNpdGVyZWZlbnRyeT48cmVmZW50cnl0aXRsZT5zYnJrPC9yZWZlbnRyeXRpdGxlPgorICAg IDxtYW52b2xudW0+MjwvbWFudm9sbnVtPjwvY2l0ZXJlZmVudHJ5PiwKKyAgICA8Y2l0ZXJlZmVu dHJ5PjxyZWZlbnRyeXRpdGxlPnV0cmFjZTwvcmVmZW50cnl0aXRsZT4KKyAgICA8bWFudm9sbnVt PjI8L21hbnZvbG51bT48L2NpdGVyZWZlbnRyeT4sCisgICAgPGNpdGVyZWZlbnRyeT48cmVmZW50 cnl0aXRsZT5hbGxvY2E8L3JlZmVudHJ5dGl0bGU+CisgICAgPG1hbnZvbG51bT4zPC9tYW52b2xu dW0+PC9jaXRlcmVmZW50cnk+LAorICAgIDxjaXRlcmVmZW50cnk+PHJlZmVudHJ5dGl0bGU+YXRl eGl0PC9yZWZlbnRyeXRpdGxlPgorICAgIDxtYW52b2xudW0+MzwvbWFudm9sbnVtPjwvY2l0ZXJl ZmVudHJ5PiwKKyAgICA8Y2l0ZXJlZmVudHJ5PjxyZWZlbnRyeXRpdGxlPmdldHBhZ2VzaXplPC9y ZWZlbnRyeXRpdGxlPgorICAgIDxtYW52b2xudW0+MzwvbWFudm9sbnVtPjwvY2l0ZXJlZmVudHJ5 PjwvcGFyYT4KKyAgPC9yZWZzZWN0MT4KKyAgPHJlZnNlY3QxIGlkPSJzdGFuZGFyZHMiPgorICAg IDx0aXRsZT5TVEFOREFSRFM8L3RpdGxlPgorICAgIDxwYXJhPlRoZSA8ZnVuY3Rpb24+bWFsbG9j KCk8L2Z1bmN0aW9uPiwKKyAgICA8ZnVuY3Rpb24+Y2FsbG9jKCk8L2Z1bmN0aW9uPiwKKyAgICA8 ZnVuY3Rpb24+cmVhbGxvYygpPC9mdW5jdGlvbj4sIGFuZAorICAgIDxmdW5jdGlvbj5mcmVlKCk8 L2Z1bmN0aW9uPiBmdW5jdGlvbnMgY29uZm9ybSB0byBJU08vSUVDCisgICAgOTg5OToxOTkwICg8 cXVvdGU+SVNPIEM5MDwvcXVvdGU+KS48L3BhcmE+CisKKyAgICA8cGFyYT5UaGUgPGZ1bmN0aW9u PnBvc2l4X21lbWFsaWduKCk8L2Z1bmN0aW9uPiBmdW5jdGlvbiBjb25mb3JtcworICAgIHRvIElF RUUgU3RkIDEwMDMuMS0yMDAxICg8cXVvdGU+UE9TSVguMTwvcXVvdGU+KS48L3BhcmE+CisgIDwv cmVmc2VjdDE+Cis8L3JlZmVudHJ5PgoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1 aWxkL2plbWFsbG9jLTUuMy4wL2RvYy9tYW5wYWdlcy54c2wuaW4gYi8zODktZHMtYmFzZS0zLjMu MC1idWlsZC9qZW1hbGxvYy01LjMuMC9kb2MvbWFucGFnZXMueHNsLmluCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4YjI2MjYKLS0tIC9kZXYvbnVsbAorKysgYi8zODktZHMt YmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9kb2MvbWFucGFnZXMueHNsLmluCkBAIC0w LDAgKzEsNCBAQAorPHhzbDpzdHlsZXNoZWV0IHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcv MTk5OS9YU0wvVHJhbnNmb3JtIiB2ZXJzaW9uPSIxLjAiPgorICA8eHNsOmltcG9ydCBocmVmPSJA WFNMUk9PVEAvbWFucGFnZXMvZG9jYm9vay54c2wiLz4KKyAgPHhzbDppbXBvcnQgaHJlZj0iQGFi c19zcmNyb290QGRvYy9zdHlsZXNoZWV0LnhzbCIvPgorPC94c2w6c3R5bGVzaGVldD4KCmRpZmYg LS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9kb2Mvc3R5bGVz aGVldC54c2wgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9kb2Mvc3R5 bGVzaGVldC54c2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjE5MzY1ZAot LS0gL2Rldi9udWxsCisrKyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4w L2RvYy9zdHlsZXNoZWV0LnhzbApAQCAtMCwwICsxLDEwIEBACis8eHNsOnN0eWxlc2hlZXQgeG1s bnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iIHZlcnNpb249IjEu MCI+CisgIDx4c2w6cGFyYW0gbmFtZT0iZnVuY3N5bm9wc2lzLnN0eWxlIj5hbnNpPC94c2w6cGFy YW0+CisgIDx4c2w6cGFyYW0gbmFtZT0iZnVuY3Rpb24ucGFyZW5zIiBzZWxlY3Q9IjAiLz4KKyAg PHhzbDp0ZW1wbGF0ZSBtYXRjaD0iZnVuY3Rpb24iPgorICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBu YW1lPSJpbmxpbmUubW9ub3NlcSIvPgorICA8L3hzbDp0ZW1wbGF0ZT4KKyAgPHhzbDp0ZW1wbGF0 ZSBtYXRjaD0ibWFsbGN0bCI+CisgICAgPHF1b3RlPjx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJp bmxpbmUubW9ub3NlcSIvPjwvcXVvdGU+CisgIDwveHNsOnRlbXBsYXRlPgorPC94c2w6c3R5bGVz aGVldD4KCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMu MC9kb2NfaW50ZXJuYWwvUFJPRklMSU5HX0lOVEVSTkFMUy5tZCBiLzM4OS1kcy1iYXNlLTMuMy4w LWJ1aWxkL2plbWFsbG9jLTUuMy4wL2RvY19pbnRlcm5hbC9QUk9GSUxJTkdfSU5URVJOQUxTLm1k Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhOWYzMWMKLS0tIC9kZXYvbnVs bAorKysgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9kb2NfaW50ZXJu YWwvUFJPRklMSU5HX0lOVEVSTkFMUy5tZApAQCAtMCwwICsxLDEyNyBAQAorIyBqZW1hbGxvYyBw cm9maWxpbmcKK1RoaXMgZGVzY3JpYmVzIHRoZSBtYXRoZW1hdGljYWwgYmFzaXMgYmVoaW5kIGpl bWFsbG9jJ3MgcHJvZmlsaW5nIGltcGxlbWVudGF0aW9uLCBhcyB3ZWxsIGFzIHRoZSBpbXBsZW1l bnRhdGlvbiB0cmlja3MgdGhhdCBtYWtlIGl0IGVmZmVjdGl2ZS4gSGlzdG9yaWNhbGx5LCB0aGUg amVtYWxsb2MgcHJvZmlsaW5nIGRlc2lnbiBzaW1wbHkgY29waWVkIHRjbWFsbG9jJ3MuIFRoZSBp bXBsZW1lbnRhdGlvbiBoYXMgc2luY2UgZGl2ZXJnZWQsIGR1ZSB0byBib3RoIHRoZSBkZXNpcmUg dG8gcmVjb3JkIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24sIGFuZCB0byBjb3JyZWN0IHNvbWUgYmlh c2luZyBidWdzLgorCitOb3RlOiB0aGlzIGRvY3VtZW50IGlzIG1hcmtkb3duIHdpdGggZW1iZWRk ZWQgTGFUZVg7IGRpZmZlcmVudCBtYXJrZG93biByZW5kZXJlcnMgbWF5IG5vdCBwcm9kdWNlIHRo ZSBleHBlY3RlZCBvdXRwdXQuICBWaWV3aW5nIHdpdGggYHBhbmRvYyAtcyBQUk9GSUxJTkdfSU5U RVJOQUxTLm1kIC1vIFBST0ZJTElOR19JTlRFUk5BTFMucGRmYCBpcyByZWNvbW1lbmRlZC4KKwor IyMgU29tZSB0cmlja3MgaW4gb3VyIGltcGxlbWVudGF0aW9uIHRvb2xiYWcKKworIyMjIFNhbXBs aW5nCitSZWNvcmRpbmcgb3VyIG1ldGFkYXRhIGlzIHF1aXRlIGV4cGVuc2l2ZTsgd2UgbmVlZCB0 byB3YWxrIHVwIHRoZSBzdGFjayB0byBnZXQgYSBzdGFjayB0cmFjZS4gT24gdG9wIG9mIHRoYXQs IHdlIG5lZWQgdG8gYWxsb2NhdGUgc3RvcmFnZSB0byByZWNvcmQgdGhhdCBzdGFjayB0cmFjZSwg YW5kIHN0aWNrIGl0IHNvbWV3aGVyZSB3aGVyZSBhIHByb2ZpbGUtZHVtcGluZyBjYWxsIGNhbiBm aW5kIGl0LiBUaGF0IGNhbGwgbWlnaHQgaGFwcGVuIG9uIGFub3RoZXIgdGhyZWFkLCBzbyB3ZSds bCBwcm9iYWJseSBuZWVkIHRvIHRha2UgYSBsb2NrIHRvIGRvIHNvLiBUaGVzZSBjb3N0cyBhcmUg cXVpdGUgbGFyZ2UgY29tcGFyZWQgdG8gdGhlIGF2ZXJhZ2UgY29zdCBvZiBhbiBhbGxvY2F0aW9u LiBUbyBtYW5hZ2UgdGhpcywgd2UnbGwgb25seSBzYW1wbGUgc29tZSBmcmFjdGlvbiBvZiBhbGxv Y2F0aW9ucy4gVGhpcyB3aWxsIG1pc3Mgc29tZSBvZiB0aGVtLCBzbyBvdXIgZGF0YSB3aWxsIGJl IGluY29tcGxldGUsIGJ1dCB3ZSdsbCB0cnkgdG8gbWFrZSB1cCBmb3IgaXQuIFdlIGNhbiB0dW5l IG91ciBzYW1wbGluZyByYXRlIHRvIGJhbGFuY2UgYWNjdXJhY3kgYW5kIHBlcmZvcm1hbmNlLgor CisjIyMgRmFzdCBCZXJub3VsbGkgc2FtcGxpbmcKK0NvbXBhcmVkIHRvIG91ciBmYXN0IHBhdGhz LCBldmVuIGEgYGNvaW5mbGlwKHApYCBmdW5jdGlvbiBjYW4gYmUgcXVpdGUgZXhwZW5zaXZlLiBI YXZpbmcgdG8gZG8gYSByYW5kb20tbnVtYmVyIGdlbmVyYXRpb24gYW5kIHNvbWUgZmxvYXRpbmcg cG9pbnQgb3BlcmF0aW9ucyB3b3VsZCBiZSBhIHNpemVhYmxlIHJlbGF0aXZlIGNvc3QuIEhvd2V2 ZXIgKGFzIHBvaW50ZWQgb3V0IGluIFtbVml0dGVyLCAxOTg3XShodHRwczovL2RsLmFjbS5vcmcv ZG9pLzEwLjExNDUvMjMwMDIuMjMwMDMpXSksIGlmIHdlIGNhbiBvcmNoZXN0cmF0ZSBvdXIgYWxn b3JpdGhtIHNvIHRoYXQgbWFueSBvZiBvdXIgYGNvaW5mbGlwYCBjYWxscyBzaGFyZSB0aGVpciBw YXJhbWV0ZXIgdmFsdWUsIHdlIGNhbiBkbyBiZXR0ZXIuIFdlIGNhbiBzYW1wbGUgZnJvbSB0aGUg Z2VvbWV0cmljIGRpc3RyaWJ1dGlvbiwgYW5kIGluaXRpYWxpemUgYSBjb3VudGVyIHdpdGggdGhl IHJlc3VsdC4gV2hlbiB0aGUgY291bnRlciBoaXRzIDAsIHRoZSBgY29pbmZsaXBgIGZ1bmN0aW9u IHJldHVybnMgdHJ1ZSAoYW5kIHJlaW5pdGlhbGl6ZXMgaXRzIGludGVybmFsIGNvdW50ZXIpLgor VGhpcyBjYW4gbGV0IHVzIGRvIGEgcmFuZG9tLW51bWJlciBnZW5lcmF0aW9uIG9uY2UgcGVyIChs b2dpY2FsKSBjb2luZmxpcCB0aGF0IGNvbWVzIHVwIGhlYWRzLCByYXRoZXIgdGhhbiBvbmNlIHBl ciAobG9naWNhbCkgY29pbmZsaXAuIFNpbmNlIHdlIGV4cGVjdCB0byBzYW1wbGUgcmVsYXRpdmVs eSByYXJlbHksIHRoaXMgY2FuIGJlIGEgbGFyZ2Ugd2luLgorCisjIyMgRmFzdC1wYXRoIC8gc2xv dy1wYXRoIHRoaW5raW5nCitNb3N0IHByb2dyYW1zIGhhdmUgYSBza2V3ZWQgZGlzdHJpYnV0aW9u IG9mIGFsbG9jYXRpb25zLiBTbWFsbGVyIGFsbG9jYXRpb25zIGFyZSBtdWNoIG1vcmUgZnJlcXVl bnQgdGhhbiBsYXJnZSBvbmVzLCBidXQgc2hvcnRlciBsaXZlZCBhbmQgbGVzcyBjb21tb24gYXMg YSBmcmFjdGlvbiBvZiBwcm9ncmFtIG1lbW9yeS4gIlNtYWxsIiBhbmQgImxhcmdlIiBhcmUgbmVj ZXNzYXJpbHkgc29ydCBvZiBmdXp6eSB0ZXJtcywgYnV0IGlmIHdlIGRlZmluZSAic21hbGwiIGFz ICJhbGxvY2F0aW9ucyBqZW1hbGxvYyBwdXRzIGludG8gc2xhYnMiIGFuZCAibGFyZ2UiIGFzIHRo ZSBvdGhlcnMsIHRoZW4gaXQncyBub3QgdW5jb21tb24gZm9yIHNtYWxsIGFsbG9jYXRpb25zIHRv IGJlIGh1bmRyZWRzIG9mIHRpbWVzIG1vcmUgZnJlcXVlbnQgdGhhbiBsYXJnZSBvbmVzLCBidXQg dGFrZSB1cCBhcm91bmQgaGFsZiB0aGUgYW1vdW50IG9mIGhlYXAgc3BhY2UgYXMgbGFyZ2Ugb25l cy4gTW9yZW92ZXIsIHNtYWxsIGFsbG9jYXRpb25zIHRlbmQgdG8gYmUgbXVjaCBjaGVhcGVyIHRo YW4gbGFyZ2Ugb25lcyAob2Z0ZW4gYnkgYSBmYWN0b3Igb2YgMjAtMzApOiB0aGV5J3JlIG1vcmUg bGlrZWx5IHRvIGhpdCBpbiB0aHJlYWQgY2FjaGVzLCBsZXNzIGxpa2VseSB0byBoYXZlIHRvIGRv IGFuIG1tYXAsIGFuZCBjaGVhcGVyIHRvIGZpbGwgKGJ5IHRoZSB1c2VyKSBvbmNlIHRoZSBhbGxv Y2F0aW9uIGhhcyBiZWVuIHJldHVybmVkLgorCisjIyBBbiB1bmJpYXNlZCBlc3RpbWF0b3Igb2Yg c3BhY2UgY29uc3VtcHRpb24gZnJvbSAoYWxtb3N0KSBhcmJpdHJhcnkgc2FtcGxpbmcgc3RyYXRl Z2llcworU3VwcG9zZSB3ZSBoYXZlIGEgc2FtcGxpbmcgc3RyYXRlZ3kgdGhhdCBtZWV0cyB0aGUg Zm9sbG93aW5nIGNyaXRlcmlhOgorCisgIC0gT25lIGFsbG9jYXRpb24gYmVpbmcgc2FtcGxlZCBp cyBpbmRlcGVuZGVudCBvZiBvdGhlciBhbGxvY2F0aW9ucyBiZWluZyBzYW1wbGVkLgorICAtIEVh Y2ggYWxsb2NhdGlvbiBoYXMgYSBub24temVybyBwcm9iYWJpbGl0eSBvZiBiZWluZyBzYW1wbGVk LgorCitXZSBjYW4gdGhlbiBlc3RpbWF0ZSB0aGUgYnl0ZXMgaW4gbGl2ZSBhbGxvY2F0aW9ucyB0 aHJvdWdoIHNvbWUgcGFydGljdWxhciBzdGFjayB0cmFjZSBhczoKKworJCQgXHN1bV9pIFNfaSBJ X2kgXGZyYWN7MX17XG1hdGhybXtFfVtJX2ldfSAkJAorCit3aGVyZSB0aGUgc3VtIHJhbmdlcyBv dmVyIHNvbWUgaW5kZXggdmFyaWFibGUgb2YgbGl2ZSBhbGxvY2F0aW9ucyBmcm9tIHRoYXQgc3Rh Y2ssICRTX2kkIGlzIHRoZSBzaXplIG9mIHRoZSAkaSQndGggYWxsb2NhdGlvbiwgYW5kICRJX2kk IGlzIGFuIGluZGljYXRvciByYW5kb20gdmFyaWFibGUgZm9yIHdoZXRoZXIgb3Igbm90IHRoZSAk aSd0aCQgYWxsb2NhdGlvbiBpcyBzYW1wbGVkLiAkU19pJCBhbmQgJFxtYXRocm17RX1bSV9pXSQg YXJlIGNvbnN0YW50cyAodGhlIHByb2dyYW0gYWxsb2NhdGlvbnMgYXJlIGZpeGVkOyB0aGUgcmFu ZG9tIHZhcmlhYmxlcyBhcmUgdGhlIHNhbXBsaW5nIGRlY2lzaW9ucyksIHNvIHRha2luZyB0aGUg ZXhwZWN0YXRpb24gd2UgZ2V0CisKKyQkIFxzdW1faSBTX2kgXG1hdGhybXtFfVtJX2ldIFxmcmFj ezF9e1xtYXRocm17RX1bSV9pXX0uJCQKKworVGhpcyBpcyBvZiBjb3Vyc2UgJFxzdW1faSBTX2kk LCBhcyB3ZSB3YW50IChhbmQsIGEgc2ltaWxhciBjYWxjdWxhdGlvbiBjb3VsZCBiZSBkb25lIGZv ciBhbGxvY2F0aW9uIGNvdW50cyBhcyB3ZWxsKS4KK1RoaXMgaXMgYSBmYWlybHkgZ2VuZXJhbCBz dHJhdGVneTsgbm90ZSB0aGF0IHdoaWxlIHdlIHJlcXVpcmUgdGhhdCBzYW1wbGluZyBkZWNpc2lv bnMgYmUgaW5kZXBlbmRlbnQgb2Ygb25lIGFub3RoZXIncyBvdXRjb21lcywgdGhleSBkb24ndCBo YXZlIHRvIGJlIGluZGVwZW5kZW50IG9mIHByZXZpb3VzIGFsbG9jYXRpb25zLCB0b3RhbCBieXRl cyBhbGxvY2F0ZWQsIGV0Yy4gWW91IGNhbiBpbWFnaW5lIHN0cmF0ZWdpZXMgdGhhdDoKKworICAt IFNhbXBsZSBhbGxvY2F0aW9ucyBhdCBwcm9ncmFtIHN0YXJ0dXAgYXQgYSBoaWdoZXIgcmF0ZSB0 aGFuIHN1YnNlcXVlbnQgYWxsb2NhdGlvbnMKKyAgLSBTYW1wbGUgZXZlbi1pbmRleGVkIGFsbG9j YXRpb25zIG1vcmUgZnJlcXVlbnRseSB0aGFuIG9kZC1pbmRleGVkIG9uZXMgKHNvIGxvbmcgYXMg bm8gYWxsb2NhdGlvbiBoYXMgemVybyBzYW1wbGluZyBwcm9iYWJpbGl0eSkKKyAgLSBMZXQgdGhy ZWFkcyBkZWNsYXJlIHRoZW1zZWx2ZXMgYXMgaGlnaC1zYW1wbGluZy1wcmlvcml0eSwgYW5kIHNh bXBsZSB0aGVpciBhbGxvY2F0aW9ucyBhdCBhbiBpbmNyZWFzZWQgcmF0ZS4KKworVGhlc2UgY2Fu IGFsbCBiZSBmaXQgaW50byB0aGlzIGZyYW1ld29yayB0byBnaXZlIGFuIHVuYmlhc2VkIGVzdGlt YXRvci4KKworIyMgRXZhbHVhdGluZyBzYW1wbGluZyBzdHJhdGVnaWVzCitOb3QgYWxsIHN0cmF0 ZWdpZXMgZm9yIHBpY2tpbmcgYWxsb2NhdGlvbnMgdG8gc2FtcGxlIGFyZSBlcXVhbGx5IGdvb2Qs IG9mIGNvdXJzZS4gQW1vbmcgdW5iaWFzZWQgZXN0aW1hdG9ycywgdGhlIGxvd2VyIHRoZSB2YXJp YW5jZSwgdGhlIGxvd2VyIHRoZSBtZWFuIHNxdWFyZWQgZXJyb3IuIFVzaW5nIHRoZSBlc3RpbWF0 b3IgYWJvdmUsIHRoZSB2YXJpYW5jZSBpczoKKworJCQKK1xiZWdpbnthbGlnbmVkfQorJiBcbWF0 aHJte1Zhcn1bXHN1bV9pIFNfaSBJX2kgXGZyYWN7MX17XG1hdGhybXtFfVtJX2ldfV0gIFxcCis9 JiBcc3VtX2kgXG1hdGhybXtWYXJ9W1NfaSBJX2kgXGZyYWN7MX17XG1hdGhybXtFfVtJX2ldfV0g XFwKKz0mIFxzdW1faSBcZnJhY3tTX2leMn17XG1hdGhybXtFfVtJX2ldXjJ9IFxtYXRocm17VmFy fVtJX2ldIFxcCis9JiBcc3VtX2kgXGZyYWN7U19pXjJ9e1xtYXRocm17RX1bSV9pXV4yfSBcbWF0 aHJte1Zhcn1bSV9pXSBcXAorPSYgXHN1bV9pIFxmcmFje1NfaV4yfXtcbWF0aHJte0V9W0lfaV1e Mn0gXG1hdGhybXtFfVtJX2ldKDEgLSBcbWF0aHJte0V9W0lfaV0pIFxcCis9JiBcc3VtX2kgU19p XjIgXGZyYWN7MSAtIFxtYXRocm17RX1bSV9pXX17XG1hdGhybXtFfVtJX2ldfS4KK1xlbmR7YWxp Z25lZH0KKyQkCisKK1dlIGNhbiB1c2UgdGhpcyBmb3JtdWxhIHRvIGNvbXBhcmUgdmFyaW91cyBz dHJhdGVneSBjaG9pY2VzLiBBbGwgZWxzZSBiZWluZyBlcXVhbCwgbG93ZXItdmFyaWFuY2Ugc3Ry YXRlZ2llcyBhcmUgYmV0dGVyLgorCisjIyBQb3NzaWJsZSBzYW1wbGluZyBzdHJhdGVnaWVzCitC ZWNhdXNlIG9mIHRoZSBkZXNpcmUgdG8gYXZvaWQgdGhlIGZhc3QtcGF0aCBjb3N0cywgd2UnZCBs aWtlIHRvIHVzZSBvdXIgQmVybm91bGxpIHRyaWNrIGlmIHBvc3NpYmxlLiBUaGVyZSBhcmUgdHdv IG9idmlvdXMgY291bnRlcnMgdG8gdXNlOiBhIGNvaW5mbGlwIHBlciBhbGxvY2F0aW9uLCBhbmQg YSBjb2luZmxpcCBwZXIgYnl0ZSBhbGxvY2F0ZWQuCisKKyMjIyBCZXJub3VsbGkgc2FtcGxpbmcg cGVyLWFsbG9jYXRpb24KK0FuIG9idmlvdXMgc3RyYXRlZ3kgaXMgdG8gcGljayBzb21lIGxhcmdl ICROJCwgYW5kIGdpdmUgZWFjaCBhbGxvY2F0aW9uIGEgJDEvTiQgY2hhbmNlIG9mIGJlaW5nIHNh bXBsZWQuIFRoaXMgd291bGQgbGV0IHVzIHVzZSBvdXIgQmVybm91bGxpLXZpYS1HZW9tZXRyaWMg dHJpY2suIFVzaW5nIHRoZSBmb3JtdWxhIGZyb20gYWJvdmUsIHdlIGNhbiBjb21wdXRlIHRoZSB2 YXJpYW5jZSBhczoKKworJCQgXHN1bV9pIFNfaV4yIFxmcmFjezEgLSBcZnJhY3sxfXtOfX17XGZy YWN7MX17Tn19ICA9IChOLTEpIFxzdW1faSBTX2leMi4kJAorCitUaGF0IGlzLCBhbiBhbGxvY2F0 aW9uIG9mIHNpemUgJFokIGNvbnRyaWJ1dGVzIGEgdGVybSBvZiAkKE4tMSlaXjIkIHRvIHRoZSB2 YXJpYW5jZS4KKworIyMjIEJlcm5vdWxsaSBzYW1wbGluZyBwZXItYnl0ZQorQW5vdGhlciBvcHRp b24gd2UgaGF2ZSBpcyB0byBwaWNrIHNvbWUgcmF0ZSAkUiQsIGFuZCBnaXZlIGVhY2ggYnl0ZSBh ICQxL1IkIGNoYW5jZSBvZiBiZWluZyBwaWNrZWQgZm9yIHNhbXBsaW5nIChhdCB3aGljaCBwb2lu dCB3ZSB3b3VsZCBzYW1wbGUgaXRzIGNvbnRhaW5lZCBhbGxvY2F0aW9uKS4gVGhlIGNoYW5jZSBv ZiBhbiBhbGxvY2F0aW9uIG9mIHNpemUgJFokIGJlaW5nIHNhbXBsZWQsIHRoZW4sIGlzCisKKyQk MS0oMS1cZnJhY3sxfXtSfSlee1p9JCQKKworYW5kIGFuIGFsbG9jYXRpb24gb2Ygc2l6ZSAkWiQg Y29udHJpYnV0ZXMgYSB0ZXJtIG9mCisKKyQkWl4yIFxmcmFjeygxLVxmcmFjezF9e1J9KV57Wn19 ezEtKDEtXGZyYWN7MX17Un0pXntafX0uJCQKKworSW4gcHJhY3RpY2FsIHNldHRpbmdzLCAkUiQg aXMgbGFyZ2UsIGFuZCBzbyB0aGlzIGlzIHdlbGwtYXBwcm94aW1hdGVkIGJ5CisKKyQkWl4yIFxm cmFje2Veey1aL1J9fXsxIC0gZV57LVovUn19IC4kJAorCitKdXN0IHRvIGdldCBhIHNlbnNlIG9m IHRoZSBkeW5hbWljcyBoZXJlLCBsZXQncyBsb29rIGF0IHRoZSBiZWhhdmlvciBmb3IgdmFyaW91 cyB2YWx1ZXMgb2YgJFokLiBXaGVuICRaJCBpcyBzbWFsbCByZWxhdGl2ZSB0byAkUiQsIHdlIGNh biB1c2UgJGVeeiBcYXBwcm94IDEgKyB4JCwgYW5kIGNvbmNsdWRlIHRoYXQgdGhlIHZhcmlhbmNl IGNvbnRyaWJ1dGVkIGJ5IGEgc21hbGwtJFokIGFsbG9jYXRpb24gaXMgYXJvdW5kCisKKyQkWl4y IFxmcmFjezEtWi9SfXtaL1J9IFxhcHByb3ggUlouJCQKKworV2hlbiAkWiQgaXMgY29tcGFyYWJs ZSB0byAkUiQsIHRoZSB2YXJpYW5jZSB0ZXJtIGlzIG5lYXIgJFpeMiQgKHdlIGhhdmUgJFxmcmFj e2Veey1aL1J9fXsxIC0gZV57LVovUn19ID0gMSQgd2hlbiAkWi9SID0gXGxuIDIgXGFwcHJveCAw LjY5MyQpLiBXaGVuICRaJCBpcyBsYXJnZSByZWxhdGl2ZSB0byAkUiQsIHRoZSB2YXJpYW5jZSB0 ZXJtIGdvZXMgdG8gemVyby4KKworIyMgUGlja2luZyBhIHNhbXBsaW5nIHN0cmF0ZWd5CitUaGUg ZmFzdC1wYXRoL3Nsb3ctcGF0aCBkeW5hbWljcyBvZiBhbGxvY2F0aW9uIHBhdHRlcm5zIHBvaW50 IHVzIHRvd2FyZHMgdGhlIHBlci1ieXRlIHNhbXBsaW5nIGFwcHJvYWNoOgorCisgIC0gVGhlIHF1 YWRyYXRpYyBpbmNyZWFzZSBpbiB2YXJpYW5jZSBwZXIgYWxsb2NhdGlvbiBpbiB0aGUgZmlyc3Qg YXBwcm9hY2ggaXMgcXVpdGUgY29zdGx5IHdoZW4gaGVhcHMgaGF2ZSBhIG5vbi1uZWdsaWdpYmxl IHBvcnRpb24gb2YgdGhlaXIgYnl0ZXMgaW4gdGhvc2UgYWxsb2NhdGlvbnMsIHdoaWNoIGlzIHBy YWN0aWNhbGx5IG9mdGVuIHRoZSBjYXNlLgorICAtIFRoZSBCZXJub3VsbGktcGVyLWJ5dGUgYXBw cm9hY2ggc2hpZnRzIG1vcmUgb2YgaXRzIHNhbXBsZXMgdG93YXJkcyBsYXJnZSBhbGxvY2F0aW9u cywgd2hpY2ggYXJlIGFscmVhZHkgYSBzbG93LXBhdGguCisgIC0gV2UgZHJpdmUgc2V2ZXJhbCB0 aWNrZXJzIChlLmcuIHRjYWNoZSBnYykgYnkgYnl0ZXMgYWxsb2NhdGVkLCBhbmQgcmVwb3J0IGJ5 dGVzLWFsbG9jYXRlZCBhcyBhIHVzZXItdmlzaWJsZSBzdGF0aXN0aWMsIHNvIHdlIGhhdmUgdG8g ZG8gYWxsIHRoZSBuZWNlc3NhcnkgYm9va2tlZXBpbmcgYW55d2F5cy4KKworSW5kZWVkLCB0aGlz IGlzIHRoZSBhcHByb2FjaCB3ZSB1c2UgaW4gamVtYWxsb2MuIE91ciBoZWFwIGR1bXBzIHJlY29y ZCB0aGUgc2l6ZSBvZiB0aGUgYWxsb2NhdGlvbiBhbmQgdGhlIHNhbXBsaW5nIHJhdGUgJFIkLCBh bmQgamVwcm9mIHVuYmlhc2VzIGJ5IGRpdmlkaW5nIGJ5ICQxIC0gZV57LVovUn0kLiAgVGhlIGZy YW1ld29yayBhYm92ZSB3b3VsZCBzdWdnZXN0IGRpdmlkaW5nIGJ5ICQxLSgxLTEvUileWiQ7IGlu c3RlYWQsIHdlIHVzZSB0aGUgZmFjdCB0aGF0ICRSJCBpcyBsYXJnZSBpbiBwcmFjdGljYWwgc2l0 dWF0aW9ucywgYW5kIHNvICRlXnstWi9SfSQgaXMgYSBnb29kIGFwcHJveGltYXRpb24gKGFuZCBm YXN0ZXIgdG8gY29tcHV0ZSkuICAoRXF1aXZhbGVudGx5LCB3ZSBtYXkgYWxzbyBzZWUgdGhpcyBh cyB0aGUgZmFjdG9yIHRoYXQgZmFsbHMgb3V0IGZyb20gdmlld2luZyBzYW1wbGluZyBhcyBhIFBv aXNzb24gcHJvY2VzcyBkaXJlY3RseSkuCisKKyMjIENvbnNlcXVlbmNlcyBmb3IgaGVhcCBkdW1w IGNvbnN1bWVycworVXNpbmcgdGhpcyBhcHByb2FjaCBtZWFucyB0aGF0IHRoZXJlIGFyZSBhIGZl dyB0aGluZ3MgdXNlcnMgbmVlZCB0byBiZSBhd2FyZSBvZi4KKworIyMjIFN0YWNrIGNvdW50cyBh cmUgbm90IHByb3BvcnRpb25hbCB0byBhbGxvY2F0aW9uIGZyZXF1ZW5jaWVzCitJZiBvbmUgc3Rh Y2sgYXBwZWFycyB0d2ljZSBhcyBvZnRlbiBhcyBhbm90aGVyLCB0aGlzIGJ5IGl0c2VsZiBkb2Vz IG5vdCBpbXBseSB0aGF0IGl0IGFsbG9jYXRlcyB0d2ljZSBhcyBvZnRlbi4gQ29uc2lkZXIgdGhl IGNhc2UgaW4gd2hpY2ggdGhlcmUgYXJlIG9ubHkgdHdvIHR5cGVzIG9mIGFsbG9jYXRpbmcgY2Fs bCBzdGFja3MgaW4gYSBwcm9ncmFtLiBTdGFjayBBIGFsbG9jYXRlcyA4IGJ5dGVzLCBhbmQgb2Nj dXJzIGEgbWlsbGlvbiB0aW1lcyBpbiBhIHByb2dyYW0uIFN0YWNrIEIgYWxsb2NhdGVzIDggTUIs IGFuZCBvY2N1cnMganVzdCBvbmNlIGluIGEgcHJvZ3JhbS4gSWYgb3VyIHNhbXBsaW5nIHJhdGUg JFIkIGlzIGFib3V0IDFNQiwgd2UgZXhwZWN0IHN0YWNrIEEgdG8gc2hvdyB1cCBhYm91dCA4IHRp bWVzLCBhbmQgc3RhY2sgQiB0byBzaG93IHVwIG9uY2UuIFN0YWNrIEEgaXNuJ3QgOCB0aW1lcyBt b3JlIGZyZXF1ZW50IHRoYW4gc3RhY2sgQiwgdGhvdWdoOyBpdCdzIGEgbWlsbGlvbiB0aW1lcyBt b3JlIGZyZXF1ZW50LgorCisjIyMgQWdncmVnYXRpb24gbXVzdCBiZSBkb25lIGFmdGVyIHVuYmlh c2luZyBzYW1wbGVzCitTb21lIHRvb2xzIG1hbnVhbGx5IHBhcnNlIGhlYXAgZHVtcCBvdXRwdXQs IGFuZCBhZ2dyZWdhdGUgYWNyb3NzIHN0YWNrcyAob3IgYWNyb3NzIHByb2dyYW0gcnVucykgdG8g cHJvdmlkZSB3aWRlci1zY2FsZSBkYXRhIGFuYWx5c2VzLiBXaGVuIGRvaW5nIHRoaXMgYWdncmVn YXRpb24sIHRob3VnaCwgaXQncyBpbXBvcnRhbnQgdG8gdW5iaWFzLWFuZC10aGVuLXN1bSwgcmF0 aGVyIHRoYW4gc3VtLWFuZC10aGVuLXVuYmlhcy4gUmV1c2luZyBvdXIgZXhhbXBsZSBmcm9tIHRo ZSBwcmV2aW91cyBzZWN0aW9uOiBzdXBwb3NlIHdlIGNvbGxlY3QgaGVhcCBkdW1wcyBvZiB0aGUg cHJvZ3JhbSBmcm9tIGEgbWlsbGlvbiBtYWNoaW5lcy4gV2UgdGhlbiBoYXZlIDggbWlsbGlvbiBv Y2N1cnMgb2Ygc3RhY2sgQSAoZWFjaCBvZiA4IGJ5dGVzKSwgYW5kIGEgbWlsbGlvbiBvY2N1cnJl bmNlcyBvZiBzdGFjayBCIChlYWNoIG9mIDggTUIpLiBJZiB3ZSBzdW0gZmlyc3QsIHdlJ2xsIGF0 dHJpYnV0ZSA2NCBNQiB0byBzdGFjayBBLCBhbmQgOCBUQiB0byBzdGFjayBCLiBVbmJpYXNpbmcg Y2hhbmdlcyB0aGVzZSBudW1iZXJzIGJ5IGFuIGluZmluaXRlc2ltYWwgYW1vdW50LCBzbyB0aGF0 IHN1bS10aGVuLXVuYmlhcyBkcmFtYXRpY2FsbHkgdW5kZXJyZXBvcnRzIHRoZSBhbW91bnQgb2Yg bWVtb3J5IGFsbG9jYXRlZCBieSBzdGFjayBBLgorCisjIyBBbiBhdmVudWUgZm9yIGZ1dHVyZSBl eHBsb3JhdGlvbgorV2hpbGUgdGhlIGZyYW1ld29yayB3ZSBsYWlkIG91dCBhYm92ZSBpcyBwcmV0 dHkgZ2VuZXJhbCwgYXMgYW4gZW5naW5lZXJpbmcgZGVjaXNpb24gd2UncmUgb25seSBpbnRlcmVz dGVkIGluIGZhaXJseSBzaW1wbGUgYXBwcm9hY2hlcyAoaS5lLiBvbmVzIGZvciB3aGljaCB0aGUg Y2hhbmNlIG9mIGFuIGFsbG9jYXRpb24gYmVpbmcgc2FtcGxlZCBkZXBlbmRzIG9ubHkgb24gaXRz IHNpemUpLiBPdXIgam9iIGlzIHRoZW46IGZvciBlYWNoIHNpemUgY2xhc3MgJFokLCBwaWNrIGEg cHJvYmFiaWxpdHkgJHBfWiQgdGhhdCBhbiBhbGxvY2F0aW9uIG9mIHRoYXQgc2l6ZSB3aWxsIGJl IHNhbXBsZWQuIFdlIG1hZGUgc29tZSBoYW5kd2F2ZS15IHJlZmVyZW5jZXMgdG8gc3RhdGlzdGlj YWwgZGlzdHJpYnV0aW9ucyB0byBqdXN0aWZ5IG91ciBjaG9pY2VzLCBidXQgdGhlcmUncyBubyBy ZWFzb24gd2UgbmVlZCB0byBwaWNrIHRoZW0gdGhhdCB3YXkuIEFueSBzZXQgb2Ygbm9uLXplcm8g cHJvYmFiaWxpdGllcyBpcyBhIHZhbGlkIGNob2ljZS4KK1RoZSByZWFsIGxpbWl0aW5nIGZhY3Rv ciBpbiBvdXIgYWJpbGl0eSB0byByZWR1Y2UgZXN0aW1hdG9yIHZhcmlhbmNlIGlzIHRoYXQgZmFj dCB0aGF0IHNhbXBsaW5nIGlzIGV4cGVuc2l2ZTsgd2Ugd2FudCB0byBtYWtlIHN1cmUgd2Ugb25s eSBkbyBpdCBvbiBhIHNtYWxsIGZyYWN0aW9uIG9mIGFsbG9jYXRpb25zLiBPdXIgZ29hbCwgdGhl biwgaXMgdG8gcGljayB0aGUgJHBfWiQgdG8gbWluaW1pemUgdmFyaWFuY2UgZ2l2ZW4gc29tZSBt YXhpbXVtIHNhbXBsaW5nIHJhdGUgJFAkLiBJZiB3ZSBkZWZpbmUgJGFfWiQgdG8gYmUgdGhlIGZy YWN0aW9uIG9mIGFsbG9jYXRpb25zIG9mIHNpemUgJFokLCBhbmQgJGxfWiQgdG8gYmUgdGhlIGZy YWN0aW9uIG9mIGFsbG9jYXRpb25zIG9mIHNpemUgJFokIHN0aWxsIGFsaXZlIGF0IHRoZSB0aW1l IG9mIGEgaGVhcCBkdW1wLCB0aGVuIHdlIGNhbiBwaHJhc2UgdGhpcyBhcyBhbiBvcHRpbWl6YXRp b24gcHJvYmxlbSBvdmVyIHRoZSBjaG9pY2VzIG9mICRwX1okOgorCitNaW5pbWl6ZQorCiskJCBc c3VtX1ogWl4yIGxfWiBcZnJhY3sxLXBfWn17cF9afSAkJAorCitzdWJqZWN0IHRvCisKKyQkIFxz dW1fWiBhX1ogcF9aIFxsZXEgUCAkJAorCitJZ25vcmluZyBhIHRlcm0gdGhhdCBkb2Vzbid0IGRl cGVuZCBvbiAkcF9aJCwgdGhlIG9iamVjdGl2ZSBpcyBtaW5pbWl6ZWQgd2hlbmV2ZXIKKworJCQg XHN1bV9aIFpeMiBsX1ogXGZyYWN7MX17cF9afSAkJAorCitpcy4gRm9yIGEgcGFydGljdWxhciBw cm9ncmFtLCAkbF9aJCBhbmQgJGFfWiQgYXJlIGp1c3QgbnVtYmVycyB0aGF0IGNhbiBiZSBvYnRh aW5lZCAoZXhhY3RseSkgZnJvbSBleGlzdGluZyBzdGF0cyBpbnRyb3NwZWN0aW9uIGZhY2lsaXRp ZXMsIGFuZCB3ZSBoYXZlIGEgZmFpcmx5IHRyYWN0YWJsZSBjb252ZXggb3B0aW1pemF0aW9uIHBy b2JsZW0gKGl0IGNhbiBiZSBmcmFtZWQgYXMgYSBzZWNvbmQtb3JkZXIgY29uZSBwcm9ncmFtKS4g SXQgd291bGQgYmUgaW50ZXJlc3RpbmcgdG8gZXZhbHVhdGUsIGZvciB2YXJpb3VzIGNvbW1vbiBh bGxvY2F0aW9uIHBhdHRlcm5zLCBob3cgd2VsbCBvdXIgY3VycmVudCBzdHJhdGVneSBhZGFwdHMu IERvIG91ciBhY3R1YWwgY2hvaWNlcyBmb3IgJHBfWiQgY2xvc2VseSBjb3JyZXNwb25kIHRvIHRo ZSBvcHRpbWFsIG9uZXM/IEhvdyBjbG9zZSBpcyB0aGUgdmFyaWFuY2Ugb2Ygb3VyIGNob2ljZXMg dG8gdGhlIHZhcmlhbmNlIG9mIHRoZSBvcHRpbWFsIHN0cmF0ZWd5PworWW91IGNhbiBpbWFnaW5l IGFuIGltcGxlbWVudGF0aW9uIHRoYXQgYWN0dWFsbHkgZ29lcyBhbGwgdGhlIHdheSwgYW5kIG1h a2VzICRwX1okIHNlbGVjdGlvbnMgYSB0dW5pbmcgcGFyYW1ldGVyLiBJIGRvbid0IHRoaW5rIHRo aXMgaXMgYSBnb29kIHVzZSBvZiBkZXZlbG9wbWVudCB0aW1lIGZvciB0aGUgZm9yZXNlZWFibGUg ZnV0dXJlOyBidXQgSSBkbyB3b25kZXIgYWJvdXQgdGhlIGFuc3dlcnMgdG8gc29tZSBvZiB0aGVz ZSBxdWVzdGlvbnMuCisKKyMjIEltcGxlbWVudGF0aW9uIHJlYWxpdGllcworCitUaGUgbmljZSBz dG9yeSBhYm92ZSBpcyBhdCBsZWFzdCBwYXJ0aWFsbHkgYSBsaWUuIEluaXRpYWxseSwgamVwcm9m IChjb3B5aW5nIGl0cyBsb2dpYyBmcm9tIHBwcm9mKSAgaGFkIHRoZSBzdW0tdGhlbi11bmJpYXMg ZXJyb3IgZGVzY3JpYmVkIGFib3ZlLiAgVGhlIGN1cnJlbnQgdmVyc2lvbiBvZiBqZW1hbGxvYyBk b2VzIHRoZSB1bmJpYXNpbmcgc3RlcCBvbiBhIHBlci1hbGxvY2F0aW9uIGJhc2lzIGludGVybmFs bHksIHNvIHRoYXQgd2UncmUgYWx3YXlzIHRyYWNraW5nIHdoYXQgdGhlIHVuYmlhc2VkIG51bWJl cnMgInNob3VsZCIgYmUuICBUaGUgcHJvYmxlbSBpcywgYWN0dWFsbHkgc3VyZmFjaW5nIHRob3Nl IHVuYmlhc2VkIG51bWJlcnMgd291bGQgcmVxdWlyZSBhIGJyZWFraW5nIGNoYW5nZSB0byBqZXBy b2YgKGFuZCB0aGUgdmFyaW91cyBhbHJlYWR5LWRlcGxveWVkIHRvb2xzIHRoYXQgaGF2ZSBjb3Bp ZWQgaXRzIGxvZ2ljKS4gSW5zdGVhZCwgd2UgdXNlIGEgbGl0dGxlIGJpdCBtb3JlIHRyaWNrZXJ5 LiBTaW5jZSB3ZSBrbm93IGF0IGR1bXAgdGltZSB0aGUgbnVtYmVycyB3ZSB3YW50IGplcHJvZiB0 byByZXBvcnQsIHdlIHNpbXBseSBjaG9vc2UgdGhlIHZhbHVlcyB3ZSdsbCBvdXRwdXQgc28gdGhh dCB0aGUgamVwcm9mIG51bWJlcnMgd2lsbCBtYXRjaCB0aGUgdHJ1ZSBudW1iZXJzLiAgVGhlIG1h dGggaXMgZGVzY3JpYmVkIGluIGBzcmMvcHJvZl9kYXRhLmNgICh3aGVyZSB0aGUgb25seSBjbGV2 ZXJuZXNzIGlzIGEgY2hhbmdlIG9mIHZhcmlhYmxlcyB0aGF0IGxldHMgdGhlIGV4cG9uZW50aWFs cyBmYWxsIG91dCkuCisKK1RoaXMgaGFzIHRoZSBlZmZlY3Qgb2YgbWFraW5nIHRoZSBvdXRwdXQg b2YgamVwcm9mIChhbmQgcmVsYXRlZCB0b29scykgY29ycmVjdCwgd2hpbGUgbWFraW5nIGl0cyBp bnB1dHMgaW5jb3JyZWN0LiAgVGhpcyBjYW4gYmUgYW5ub3lpbmcgdG8gaHVtYW4gcmVhZGVycyBv ZiByYXcgcHJvZmlsaW5nIGR1bXAgb3V0cHV0LgoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMu My4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2RvY19pbnRlcm5hbC9qZW1hbGxvYy5zdmcgYi8zODkt ZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9kb2NfaW50ZXJuYWwvamVtYWxsb2Mu c3ZnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlNzczMjcKLS0tIC9kZXYv bnVsbAorKysgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9kb2NfaW50 ZXJuYWwvamVtYWxsb2Muc3ZnCkBAIC0wLDAgKzEgQEAKKzxzdmcgaWQ9IkxheWVyXzMiIGRhdGEt bmFtZT0iTGF5ZXIgMyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4 bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmlld0JveD0iMCAwIDQ5OSAxODQu MjciPjxkZWZzPjxzdHlsZT4uY2xzLTEsLmNscy0ze2ZpbGw6bm9uZTt9LmNscy0ye2NsaXAtcGF0 aDp1cmwoI2NsaXAtcGF0aCk7fS5jbHMtM3tzdHJva2U6IzI2MjI2MjtzdHJva2UtbGluZWNhcDpy b3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLXdpZHRoOjRweDt9PC9zdHlsZT48Y2xp cFBhdGggaWQ9ImNsaXAtcGF0aCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTEwMC42NiAtMjU5Ljg3 KSI+PHBhdGggY2xhc3M9ImNscy0xIiBkPSJNMTQ0LjU3LDM5NmMwLDE4LjItOS4zNywyNy44My0z Ny4zMywyMy41NVY0MDAuMWMxMS4xMSwyLjE0LDEyLjE4LS4yNywxMi4xOC0xMS41VjMyNC4xMWgy NVptLTEyLjcxLTc4LjY2Yy05LDAtMTUuNTItMS40OC0xNS41Mi0xMi43MVMxMjIuOSwyOTIsMTMx Ljg2LDI5MnMxNS41MiwxLjIsMTUuNTIsMTIuNThDMTQ3LjM4LDMxNS41NSwxNDEsMzE3LjI5LDEz MS44NiwzMTcuMjlabTUwLjU3LDc2LjM5Yy0zMC42NCwwLTM1Ljg1LTE4Ljg2LTM1Ljg1LTM1LjU5 czUuNjEtMzUuMzIsMzUuNzItMzUuMzJjMzUuMzIsMCwzMy40NCwyOCwzMy40NCw0MC42N0gxNzAu MTJjLjU0LDkuNSw0LDE0LjA1LDExLjM3LDE0LjA1LDYuODMsMCw5LjY0LTMuMzQsMTAtNy44OWwy NC43NS4xM0MyMTUuNDgsMzgzLjM4LDIwNS44NCwzOTMuNjgsMTgyLjQzLDM5My42OFptLTEuNDct NTVjLTYuNjksMC0xMCwyLjgxLTEwLjg0LDEyaDIxLjQxQzE5MC43MywzNDEuOSwxODguMTgsMzM4 LjY5LDE4MSwzMzguNjlabTExMi43OCw1My42NVYzNTEuNGMwLTQuMTUtMS4zMy04LjE2LTYtOC4x Ni01LDAtNiwzLjc1LTYsOC4xNnY0MC45NEgyNTYuNDJWMzUxLjRjMC00LjE1LS44MS04LjE2LTUu ODktOC4xNnMtNi4yOSwzLjc1LTYuMjksOC4xNnY0MC45NEgyMTkuMDlWMzI0LjExaDE0bDQuMTUs OGMyLjY3LTQuNjksMTAuNTYtOS4zNywxOC44Ni05LjM3LDcuMzYsMCwxNi4xOSwyLjE0LDIxLDku MSwzLjQ4LTUuMjIsMTEuMTEtOS4xLDIwLjIxLTkuMSwxOS4xMywwLDIxLjU0LDExLjM3LDIxLjU0 LDI3LjE2djQyLjQxWm04My4wOSwwTDM3Mi40MSwzODNjLTUuNDgsNy4yMi0xMy4xMSwxMC43LTI0 LjM1LDEwLjctMTQuODUsMC0yNi43NS02LTI2Ljc1LTE5LjkzLDAtMTUuMjYsMTIuNDQtMjAuODgs NDQuMjgtMjMsMC05LjUtMS42MS0xMi41Ny04LjgzLTEyLjU3LTYuNjksMC04LjU2LDMuNDgtOC41 Niw5LjlIMzIzLjQ1YzAtMTIuODUsNi44Mi0yNS4yOSwzMi42NC0yNS4yOSwzMCwwLDM0LjY1LDE0 LjQ1LDM0LjY1LDMxLjE3djM4LjRabS0yMS41NC0yOC42M2MtNi4yOS45NC04LjMsNC4yOC04LjMs Ny4zNiwwLDQuMjgsMi40MSw2LjY5LDguMyw2LjY5czEwLjE3LTQuODIsMTAuMTctMTUuMTJaTTM5 NiwzOTIuMzRWMjk3Ljc1aDI0Ljc1djk0LjU5Wm0zMC43NywwVjI5Ny43NWgyNC43NXY5NC41OVpt NjIuMjEsMS4zNGMtMjguMDksMC0zNC4xMS0xOC42LTM0LjExLTM1LjMyczYuMjktMzUuNTksMzQu MzgtMzUuNTljMjcuNywwLDM0LjEyLDE5LDM0LjEyLDM1LjU5QzUyMy4zMywzNzUuMjIsNTE2Ljkx LDM5My42OCw0ODguOTQsMzkzLjY4Wm0uMjctNTAuODRjLTcuODksMC0xMS4zNyw0LjgyLTExLjM3 LDE1LjUyczMuNjEsMTUuMzksMTEuMSwxNS4zOWM3LjksMCwxMS4zOC00LjQyLDExLjM4LTE1LjM5 QzUwMC4zMiwzNDcuNzksNDk3LjI0LDM0Mi44NCw0ODkuMjEsMzQyLjg0Wm02OS4xNyw1MC44NGMt MjguOSwwLTM0LjUyLTE4LjYtMzQuNTItMzUuMzJzNS43Ni0zNS41OSwzNC4xMi0zNS41OWMyMS4x NCwwLDM0LjUyLDEwLjg0LDM0LjUyLDMxLjE3SDU2OC40MmMwLTkuMjMtNS40OS0xMS4yMy0xMC4x Ny0xMS4yMy03LDAtMTEuMTEsNC41NC0xMS4xMSwxNS4zOHM0LDE1LjUyLDExLjExLDE1LjUyYzQu ODEsMCwxMC0yLjQxLDEwLTEwLjU3SDU5Mi41QzU5Mi41LDM4My4zOCw1NzksMzkzLjY4LDU1OC4z OCwzOTMuNjhaIi8+PC9jbGlwUGF0aD48L2RlZnM+PHRpdGxlPmplbWFsbG9jIEZpbmFsIExvZ288 L3RpdGxlPjxnIGNsYXNzPSJjbHMtMiI+PGxpbmUgY2xhc3M9ImNscy0zIiB4MT0iMzQ1IiB5MT0i MTgyLjI3IiB4Mj0iMzQ1IiB5Mj0iMiIvPjxsaW5lIGNsYXNzPSJjbHMtMyIgeDE9IjIyNSIgeTE9 IjE4Mi4yNyIgeDI9IjIyNSIgeTI9IjIiLz48bGluZSBjbGFzcz0iY2xzLTMiIHgxPSIxMDUiIHkx PSIxODIuMjciIHgyPSIxMDUiIHkyPSIyIi8+PGxpbmUgY2xhc3M9ImNscy0zIiB4MT0iNDMiIHkx PSIxODIuMjciIHgyPSI0MyIgeTI9IjIiLz48bGluZSBjbGFzcz0iY2xzLTMiIHgxPSI0NzUiIHkx PSIxODIuMjciIHgyPSI0NzUiIHkyPSIyIi8+PGxpbmUgY2xhc3M9ImNscy0zIiB4MT0iMTk1IiB5 MT0iMTgyLjI3IiB4Mj0iMTk1IiB5Mj0iMiIvPjxsaW5lIGNsYXNzPSJjbHMtMyIgeDE9Ijc1IiB5 MT0iMTgyLjI3IiB4Mj0iNzUiIHkyPSIyIi8+PGxpbmUgY2xhc3M9ImNscy0zIiB4MT0iMzM3IiB5 MT0iMTgyLjI3IiB4Mj0iMzM3IiB5Mj0iMiIvPjxsaW5lIGNsYXNzPSJjbHMtMyIgeDE9IjIxNSIg eTE9IjE4Mi4yNyIgeDI9IjIxNSIgeTI9IjIiLz48bGluZSBjbGFzcz0iY2xzLTMiIHgxPSI5NSIg eTE9IjE4Mi4yNyIgeDI9Ijk1IiB5Mj0iMiIvPjxsaW5lIGNsYXNzPSJjbHMtMyIgeDE9IjQxNSIg eTE9IjE4Mi4yNyIgeDI9IjQxNSIgeTI9IjIiLz48bGluZSBjbGFzcz0iY2xzLTMiIHgxPSIzODUi IHkxPSIxODIuMjciIHgyPSIzODUiIHkyPSIyIi8+PGxpbmUgY2xhc3M9ImNscy0zIiB4MT0iMTgz IiB5MT0iMTgyLjI3IiB4Mj0iMTgzIiB5Mj0iMiIvPjxsaW5lIGNsYXNzPSJjbHMtMyIgeDE9IjY1 IiB5MT0iMTgyLjI3IiB4Mj0iNjUiIHkyPSIyIi8+PGxpbmUgY2xhc3M9ImNscy0zIiB4MT0iMTcz IiB5MT0iMTgyLjI3IiB4Mj0iMTczIiB5Mj0iMiIvPjxsaW5lIGNsYXNzPSJjbHMtMyIgeDE9IjE0 NSIgeTE9IjE4Mi4yNyIgeDI9IjE0NSIgeTI9IjIiLz48bGluZSBjbGFzcz0iY2xzLTMiIHgxPSIx NjMiIHkxPSIxODIuMjciIHgyPSIxNjMiIHkyPSIyIi8+PGxpbmUgY2xhc3M9ImNscy0zIiB4MT0i NDYwIiB5MT0iMTgyLjI3IiB4Mj0iNDYwIiB5Mj0iMiIvPjxsaW5lIGNsYXNzPSJjbHMtMyIgeDE9 IjI4MSIgeTE9IjE4Mi4yNyIgeDI9IjI4MSIgeTI9IjIiLz48bGluZSBjbGFzcz0iY2xzLTMiIHgx PSIzMTMiIHkxPSIxODIuMjciIHgyPSIzMTMiIHkyPSIyIi8+PGxpbmUgY2xhc3M9ImNscy0zIiB4 MT0iMjUyIiB5MT0iMTgyLjI3IiB4Mj0iMjUyIiB5Mj0iMiIvPjxsaW5lIGNsYXNzPSJjbHMtMyIg eDE9IjQ1MCIgeTE9IjE4Mi4yNyIgeDI9IjQ1MCIgeTI9IjIiLz48bGluZSBjbGFzcz0iY2xzLTMi IHgxPSIyNzEiIHkxPSIxODIuMjciIHgyPSIyNzEiIHkyPSIyIi8+PGxpbmUgY2xhc3M9ImNscy0z IiB4MT0iMzMyIiB5MT0iMTgyLjI3IiB4Mj0iMzMyIiB5Mj0iMiIvPjxsaW5lIGNsYXNzPSJjbHMt MyIgeDE9IjIwMyIgeTE9IjE4Mi4yNyIgeDI9IjIwMyIgeTI9IjIiLz48bGluZSBjbGFzcz0iY2xz LTMiIHgxPSIxMyIgeTE9IjE4Mi4yNyIgeDI9IjEzIiB5Mj0iMiIvPjxsaW5lIGNsYXNzPSJjbHMt MyIgeDE9IjM3MyIgeTE9IjE4Mi4yNyIgeDI9IjM3MyIgeTI9IjIiLz48bGluZSBjbGFzcz0iY2xz LTMiIHgxPSIzNTQiIHkxPSIxODIuMjciIHgyPSIzNTQiIHkyPSIyIi8+PGxpbmUgY2xhc3M9ImNs cy0zIiB4MT0iMjM1IiB5MT0iMTgyLjI3IiB4Mj0iMjM1IiB5Mj0iMiIvPjxsaW5lIGNsYXNzPSJj bHMtMyIgeDE9IjExNSIgeTE9IjE4Mi4yNyIgeDI9IjExNSIgeTI9IjIiLz48bGluZSBjbGFzcz0i Y2xzLTMiIHgxPSI1MyIgeTE9IjE4Mi4yNyIgeDI9IjUzIiB5Mj0iMiIvPjxsaW5lIGNsYXNzPSJj bHMtMyIgeDE9IjQ4NCIgeTE9IjE4Mi4yNyIgeDI9IjQ4NCIgeTI9IjIiLz48bGluZSBjbGFzcz0i Y2xzLTMiIHgxPSI0MDUiIHkxPSIxODIuMjciIHgyPSI0MDUiIHkyPSIyIi8+PGxpbmUgY2xhc3M9 ImNscy0zIiB4MT0iODUiIHkxPSIxODIuMjciIHgyPSI4NSIgeTI9IjIiLz48bGluZSBjbGFzcz0i Y2xzLTMiIHgxPSIyMjUiIHkxPSIxODIuMjciIHgyPSIyMjUiIHkyPSIyIi8+PGxpbmUgY2xhc3M9 ImNscy0zIiB4MT0iMTA1IiB5MT0iMTgyLjI3IiB4Mj0iMTA1IiB5Mj0iMiIvPjxsaW5lIGNsYXNz PSJjbHMtMyIgeDE9IjQzIiB5MT0iMTgyLjI3IiB4Mj0iNDMiIHkyPSIyIi8+PGxpbmUgY2xhc3M9 ImNscy0zIiB4MT0iNDM1IiB5MT0iMTgyLjI3IiB4Mj0iNDM1IiB5Mj0iMiIvPjxsaW5lIGNsYXNz PSJjbHMtMyIgeDE9IjEyMyIgeTE9IjE4Mi4yNyIgeDI9IjEyMyIgeTI9IjIiLz48bGluZSBjbGFz cz0iY2xzLTMiIHgxPSI3NSIgeTE9IjE4Mi4yNyIgeDI9Ijc1IiB5Mj0iMiIvPjxsaW5lIGNsYXNz PSJjbHMtMyIgeDE9IjE4MyIgeTE9IjE4Mi4yNyIgeDI9IjE4MyIgeTI9IjIiLz48bGluZSBjbGFz cz0iY2xzLTMiIHgxPSIxNTUiIHkxPSIxODIuMjciIHgyPSIxNTUiIHkyPSIyIi8+PGxpbmUgY2xh c3M9ImNscy0zIiB4MT0iMTczIiB5MT0iMTgyLjI3IiB4Mj0iMTczIiB5Mj0iMiIvPjxsaW5lIGNs YXNzPSJjbHMtMyIgeDE9IjE0NSIgeTE9IjE4Mi4yNyIgeDI9IjE0NSIgeTI9IjIiLz48bGluZSBj bGFzcz0iY2xzLTMiIHgxPSI0NzAiIHkxPSIxODIuMjciIHgyPSI0NzAiIHkyPSIyIi8+PGxpbmUg Y2xhc3M9ImNscy0zIiB4MT0iMjkyIiB5MT0iMTgyLjI3IiB4Mj0iMjkyIiB5Mj0iMiIvPjxsaW5l IGNsYXNzPSJjbHMtMyIgeDE9IjI2MiIgeTE9IjE4Mi4yNyIgeDI9IjI2MiIgeTI9IjIiLz48bGlu ZSBjbGFzcz0iY2xzLTMiIHgxPSI0NjAiIHkxPSIxODIuMjciIHgyPSI0NjAiIHkyPSIyIi8+PGxp bmUgY2xhc3M9ImNscy0zIiB4MT0iMjgxIiB5MT0iMTgyLjI3IiB4Mj0iMjgxIiB5Mj0iMiIvPjxs aW5lIGNsYXNzPSJjbHMtMyIgeDE9IjMxMyIgeTE9IjE4Mi4yNyIgeDI9IjMxMyIgeTI9IjIiLz48 bGluZSBjbGFzcz0iY2xzLTMiIHgxPSIyNDMiIHkxPSIxODIuMjciIHgyPSIyNDMiIHkyPSIyIi8+ PGxpbmUgY2xhc3M9ImNscy0zIiB4MT0iMjIiIHkxPSIxODIuMjciIHgyPSIyMiIgeTI9IjIiLz48 bGluZSBjbGFzcz0iY2xzLTMiIHgxPSIzODMiIHkxPSIxODIuMjciIHgyPSIzODMiIHkyPSIyIi8+ PGxpbmUgY2xhc3M9ImNscy0zIiB4MT0iNSIgeTE9IjE4Mi4yNyIgeDI9IjUiIHkyPSIyIi8+PGxp bmUgY2xhc3M9ImNscy0zIiB4MT0iMTMzIiB5MT0iMTgyLjI3IiB4Mj0iMTMzIiB5Mj0iMiIvPjxs aW5lIGNsYXNzPSJjbHMtMyIgeDE9IjM2MiIgeTE9IjE4Mi4yNyIgeDI9IjM2MiIgeTI9IjIiLz48 bGluZSBjbGFzcz0iY2xzLTMiIHgxPSIyODgiIHkxPSIxODIuMjciIHgyPSIyODgiIHkyPSIyIi8+ PGxpbmUgY2xhc3M9ImNscy0zIiB4MT0iMjk4IiB5MT0iMTgyLjI3IiB4Mj0iMjk4IiB5Mj0iMiIv PjxsaW5lIGNsYXNzPSJjbHMtMyIgeDE9IjQyMyIgeTE9IjE4Mi4yNyIgeDI9IjQyMyIgeTI9IjIi Lz48bGluZSBjbGFzcz0iY2xzLTMiIHgxPSIzNjkiIHkxPSIxODIuMjciIHgyPSIzNjkiIHkyPSIy Ii8+PGxpbmUgY2xhc3M9ImNscy0zIiB4MT0iNDkwIiB5MT0iMTgyLjI3IiB4Mj0iNDkwIiB5Mj0i MiIvPjxsaW5lIGNsYXNzPSJjbHMtMyIgeDE9IjIiIHkxPSIxODIuMjciIHgyPSIyIiB5Mj0iMiIv PjxsaW5lIGNsYXNzPSJjbHMtMyIgeDE9IjQ5MyIgeTE9IjE4Mi4yNyIgeDI9IjQ5MyIgeTI9IjIi Lz48bGluZSBjbGFzcz0iY2xzLTMiIHgxPSIyMjUiIHkxPSIxODIuMjciIHgyPSIyMjUiIHkyPSIy Ii8+PGxpbmUgY2xhc3M9ImNscy0zIiB4MT0iMTA1IiB5MT0iMTgyLjI3IiB4Mj0iMTA1IiB5Mj0i MiIvPjxsaW5lIGNsYXNzPSJjbHMtMyIgeDE9IjQzIiB5MT0iMTgyLjI3IiB4Mj0iNDMiIHkyPSIy Ii8+PGxpbmUgY2xhc3M9ImNscy0zIiB4MT0iNDc1IiB5MT0iMTgyLjI3IiB4Mj0iNDc1IiB5Mj0i MiIvPjxsaW5lIGNsYXNzPSJjbHMtMyIgeDE9IjE5NSIgeTE9IjE4Mi4yNyIgeDI9IjE5NSIgeTI9 IjIiLz48bGluZSBjbGFzcz0iY2xzLTMiIHgxPSI3NSIgeTE9IjE4Mi4yNyIgeDI9Ijc1IiB5Mj0i MiIvPjxsaW5lIGNsYXNzPSJjbHMtMyIgeDE9IjMzNyIgeTE9IjE4Mi4yNyIgeDI9IjMzNyIgeTI9 IjIiLz48bGluZSBjbGFzcz0iY2xzLTMiIHgxPSIyMTUiIHkxPSIxODIuMjciIHgyPSIyMTUiIHky PSIyIi8+PGxpbmUgY2xhc3M9ImNscy0zIiB4MT0iOTUiIHkxPSIxODIuMjciIHgyPSI5NSIgeTI9 IjIiLz48bGluZSBjbGFzcz0iY2xzLTMiIHgxPSI0MTUiIHkxPSIxODIuMjciIHgyPSI0MTUiIHky PSIyIi8+PGxpbmUgY2xhc3M9ImNscy0zIiB4MT0iMzg1IiB5MT0iMTgyLjI3IiB4Mj0iMzg1IiB5 Mj0iMiIvPjxsaW5lIGNsYXNzPSJjbHMtMyIgeDE9IjE4MyIgeTE9IjE4Mi4yNyIgeDI9IjE4MyIg eTI9IjIiLz48bGluZSBjbGFzcz0iY2xzLTMiIHgxPSI2NSIgeTE9IjE4Mi4yNyIgeDI9IjY1IiB5 Mj0iMiIvPjxsaW5lIGNsYXNzPSJjbHMtMyIgeDE9IjE3MyIgeTE9IjE4Mi4yNyIgeDI9IjE3MyIg eTI9IjIiLz48bGluZSBjbGFzcz0iY2xzLTMiIHgxPSIxNDUiIHkxPSIxODIuMjciIHgyPSIxNDUi IHkyPSIyIi8+PGxpbmUgY2xhc3M9ImNscy0zIiB4MT0iMTYzIiB5MT0iMTgyLjI3IiB4Mj0iMTYz IiB5Mj0iMiIvPjxsaW5lIGNsYXNzPSJjbHMtMyIgeDE9IjQ2MCIgeTE9IjE4Mi4yNyIgeDI9IjQ2 MCIgeTI9IjIiLz48bGluZSBjbGFzcz0iY2xzLTMiIHgxPSIyODEiIHkxPSIxODIuMjciIHgyPSIy ODEiIHkyPSIyIi8+PGxpbmUgY2xhc3M9ImNscy0zIiB4MT0iMzEzIiB5MT0iMTgyLjI3IiB4Mj0i MzEzIiB5Mj0iMiIvPjxsaW5lIGNsYXNzPSJjbHMtMyIgeDE9IjI1MiIgeTE9IjE4Mi4yNyIgeDI9 IjI1MiIgeTI9IjIiLz48bGluZSBjbGFzcz0iY2xzLTMiIHgxPSI0NTAiIHkxPSIxODIuMjciIHgy PSI0NTAiIHkyPSIyIi8+PGxpbmUgY2xhc3M9ImNscy0zIiB4MT0iMjcxIiB5MT0iMTgyLjI3IiB4 Mj0iMjcxIiB5Mj0iMiIvPjxsaW5lIGNsYXNzPSJjbHMtMyIgeDE9IjMwNiIgeTE9IjE4Mi4yNyIg eDI9IjMwNiIgeTI9IjIiLz48bGluZSBjbGFzcz0iY2xzLTMiIHgxPSIyMDMiIHkxPSIxODIuMjci IHgyPSIyMDMiIHkyPSIyIi8+PGxpbmUgY2xhc3M9ImNscy0zIiB4MT0iMTMiIHkxPSIxODIuMjci IHgyPSIxMyIgeTI9IjIiLz48bGluZSBjbGFzcz0iY2xzLTMiIHgxPSIzNzMiIHkxPSIxODIuMjci IHgyPSIzNzMiIHkyPSIyIi8+PGxpbmUgY2xhc3M9ImNscy0zIiB4MT0iMzU0IiB5MT0iMTgyLjI3 IiB4Mj0iMzU0IiB5Mj0iMiIvPjxsaW5lIGNsYXNzPSJjbHMtMyIgeDE9IjIzNSIgeTE9IjE4Mi4y NyIgeDI9IjIzNSIgeTI9IjIiLz48bGluZSBjbGFzcz0iY2xzLTMiIHgxPSIxMTUiIHkxPSIxODIu MjciIHgyPSIxMTUiIHkyPSIyIi8+PGxpbmUgY2xhc3M9ImNscy0zIiB4MT0iNTMiIHkxPSIxODIu MjciIHgyPSI1MyIgeTI9IjIiLz48bGluZSBjbGFzcz0iY2xzLTMiIHgxPSI0ODQiIHkxPSIxODIu MjciIHgyPSI0ODQiIHkyPSIyIi8+PGxpbmUgY2xhc3M9ImNscy0zIiB4MT0iNDA1IiB5MT0iMTgy LjI3IiB4Mj0iNDA1IiB5Mj0iMiIvPjxsaW5lIGNsYXNzPSJjbHMtMyIgeDE9Ijg1IiB5MT0iMTgy LjI3IiB4Mj0iODUiIHkyPSIyIi8+PGxpbmUgY2xhc3M9ImNscy0zIiB4MT0iMjI1IiB5MT0iMTgy LjI3IiB4Mj0iMjI1IiB5Mj0iMiIvPjxsaW5lIGNsYXNzPSJjbHMtMyIgeDE9IjEwNSIgeTE9IjE4 Mi4yNyIgeDI9IjEwNSIgeTI9IjIiLz48bGluZSBjbGFzcz0iY2xzLTMiIHgxPSI0MyIgeTE9IjE4 Mi4yNyIgeDI9IjQzIiB5Mj0iMiIvPjxsaW5lIGNsYXNzPSJjbHMtMyIgeDE9IjQzNSIgeTE9IjE4 Mi4yNyIgeDI9IjQzNSIgeTI9IjIiLz48bGluZSBjbGFzcz0iY2xzLTMiIHgxPSIxMjMiIHkxPSIx ODIuMjciIHgyPSIxMjMiIHkyPSIyIi8+PGxpbmUgY2xhc3M9ImNscy0zIiB4MT0iNzUiIHkxPSIx ODIuMjciIHgyPSI3NSIgeTI9IjIiLz48bGluZSBjbGFzcz0iY2xzLTMiIHgxPSIxODMiIHkxPSIx ODIuMjciIHgyPSIxODMiIHkyPSIyIi8+PGxpbmUgY2xhc3M9ImNscy0zIiB4MT0iMTU1IiB5MT0i MTgyLjI3IiB4Mj0iMTU1IiB5Mj0iMiIvPjxsaW5lIGNsYXNzPSJjbHMtMyIgeDE9IjE3MyIgeTE9 IjE4Mi4yNyIgeDI9IjE3MyIgeTI9IjIiLz48bGluZSBjbGFzcz0iY2xzLTMiIHgxPSIxNDUiIHkx PSIxODIuMjciIHgyPSIxNDUiIHkyPSIyIi8+PGxpbmUgY2xhc3M9ImNscy0zIiB4MT0iNDcwIiB5 MT0iMTgyLjI3IiB4Mj0iNDcwIiB5Mj0iMiIvPjxsaW5lIGNsYXNzPSJjbHMtMyIgeDE9IjI5MiIg eTE9IjE4Mi4yNyIgeDI9IjI5MiIgeTI9IjIiLz48bGluZSBjbGFzcz0iY2xzLTMiIHgxPSIyNjIi IHkxPSIxODIuMjciIHgyPSIyNjIiIHkyPSIyIi8+PGxpbmUgY2xhc3M9ImNscy0zIiB4MT0iNDYw IiB5MT0iMTgyLjI3IiB4Mj0iNDYwIiB5Mj0iMiIvPjxsaW5lIGNsYXNzPSJjbHMtMyIgeDE9IjI4 MSIgeTE9IjE4Mi4yNyIgeDI9IjI4MSIgeTI9IjIiLz48bGluZSBjbGFzcz0iY2xzLTMiIHgxPSIz MjgiIHkxPSIxODIuMjciIHgyPSIzMjgiIHkyPSIyIi8+PGxpbmUgY2xhc3M9ImNscy0zIiB4MT0i MjQzIiB5MT0iMTgyLjI3IiB4Mj0iMjQzIiB5Mj0iMiIvPjxsaW5lIGNsYXNzPSJjbHMtMyIgeDE9 IjIyIiB5MT0iMTgyLjI3IiB4Mj0iMjIiIHkyPSIyIi8+PGxpbmUgY2xhc3M9ImNscy0zIiB4MT0i MzgzIiB5MT0iMTgyLjI3IiB4Mj0iMzgzIiB5Mj0iMiIvPjxsaW5lIGNsYXNzPSJjbHMtMyIgeDE9 IjUiIHkxPSIxODIuMjciIHgyPSI1IiB5Mj0iMiIvPjxsaW5lIGNsYXNzPSJjbHMtMyIgeDE9IjMy IiB5MT0iMTgyLjI3IiB4Mj0iMzIiIHkyPSIyIi8+PGxpbmUgY2xhc3M9ImNscy0zIiB4MT0iMTMz IiB5MT0iMTgyLjI3IiB4Mj0iMTMzIiB5Mj0iMiIvPjxsaW5lIGNsYXNzPSJjbHMtMyIgeDE9IjM2 MiIgeTE9IjE4Mi4yNyIgeDI9IjM2MiIgeTI9IjIiLz48bGluZSBjbGFzcz0iY2xzLTMiIHgxPSIy ODgiIHkxPSIxODIuMjciIHgyPSIyODgiIHkyPSIyIi8+PGxpbmUgY2xhc3M9ImNscy0zIiB4MT0i Mjk4IiB5MT0iMTgyLjI3IiB4Mj0iMjk4IiB5Mj0iMiIvPjxsaW5lIGNsYXNzPSJjbHMtMyIgeDE9 IjQyMyIgeTE9IjE4Mi4yNyIgeDI9IjQyMyIgeTI9IjIiLz48bGluZSBjbGFzcz0iY2xzLTMiIHgx PSIzNjkiIHkxPSIxODIuMjciIHgyPSIzNjkiIHkyPSIyIi8+PGxpbmUgY2xhc3M9ImNscy0zIiB4 MT0iNDkwIiB5MT0iMTgyLjI3IiB4Mj0iNDkwIiB5Mj0iMiIvPjxsaW5lIGNsYXNzPSJjbHMtMyIg eDE9IjIiIHkxPSIxODIuMjciIHgyPSIyIiB5Mj0iMiIvPjxsaW5lIGNsYXNzPSJjbHMtMyIgeDE9 IjQ5MyIgeTE9IjE4Mi4yNyIgeDI9IjQ5MyIgeTI9IjIiLz48bGluZSBjbGFzcz0iY2xzLTMiIHgx PSIzNDkiIHkxPSIxODIuMjciIHgyPSIzNDkiIHkyPSIyIi8+PGxpbmUgY2xhc3M9ImNscy0zIiB4 MT0iMjI5IiB5MT0iMTgyLjI3IiB4Mj0iMjI5IiB5Mj0iMiIvPjxsaW5lIGNsYXNzPSJjbHMtMyIg eDE9IjEwOSIgeTE9IjE4Mi4yNyIgeDI9IjEwOSIgeTI9IjIiLz48bGluZSBjbGFzcz0iY2xzLTMi IHgxPSI0NyIgeTE9IjE4Mi4yNyIgeDI9IjQ3IiB5Mj0iMiIvPjxsaW5lIGNsYXNzPSJjbHMtMyIg eDE9IjQ3OSIgeTE9IjE4Mi4yNyIgeDI9IjQ3OSIgeTI9IjIiLz48bGluZSBjbGFzcz0iY2xzLTMi IHgxPSIzOTkiIHkxPSIxODIuMjciIHgyPSIzOTkiIHkyPSIyIi8+PGxpbmUgY2xhc3M9ImNscy0z IiB4MT0iMTk5IiB5MT0iMTgyLjI3IiB4Mj0iMTk5IiB5Mj0iMiIvPjxsaW5lIGNsYXNzPSJjbHMt MyIgeDE9Ijc5IiB5MT0iMTgyLjI3IiB4Mj0iNzkiIHkyPSIyIi8+PGxpbmUgY2xhc3M9ImNscy0z IiB4MT0iMzQxIiB5MT0iMTgyLjI3IiB4Mj0iMzQxIiB5Mj0iMiIvPjxsaW5lIGNsYXNzPSJjbHMt MyIgeDE9IjIxOSIgeTE9IjE4Mi4yNyIgeDI9IjIxOSIgeTI9IjIiLz48bGluZSBjbGFzcz0iY2xz LTMiIHgxPSI5OSIgeTE9IjE4Mi4yNyIgeDI9Ijk5IiB5Mj0iMiIvPjxsaW5lIGNsYXNzPSJjbHMt MyIgeDE9IjQxIiB5MT0iMTgyLjI3IiB4Mj0iNDEiIHkyPSIyIi8+PGxpbmUgY2xhc3M9ImNscy0z IiB4MT0iNDE5IiB5MT0iMTgyLjI3IiB4Mj0iNDE5IiB5Mj0iMiIvPjxsaW5lIGNsYXNzPSJjbHMt MyIgeDE9IjM4OSIgeTE9IjE4Mi4yNyIgeDI9IjM4OSIgeTI9IjIiLz48bGluZSBjbGFzcz0iY2xz LTMiIHgxPSIxODciIHkxPSIxODIuMjciIHgyPSIxODciIHkyPSIyIi8+PGxpbmUgY2xhc3M9ImNs cy0zIiB4MT0iNjkiIHkxPSIxODIuMjciIHgyPSI2OSIgeTI9IjIiLz48bGluZSBjbGFzcz0iY2xz LTMiIHgxPSIxNzciIHkxPSIxODIuMjciIHgyPSIxNzciIHkyPSIyIi8+PGxpbmUgY2xhc3M9ImNs cy0zIiB4MT0iMTQ5IiB5MT0iMTgyLjI3IiB4Mj0iMTQ5IiB5Mj0iMiIvPjxsaW5lIGNsYXNzPSJj bHMtMyIgeDE9IjQ2NCIgeTE9IjE4Mi4yNyIgeDI9IjQ2NCIgeTI9IjIiLz48bGluZSBjbGFzcz0i Y2xzLTMiIHgxPSIyODUiIHkxPSIxODIuMjciIHgyPSIyODUiIHkyPSIyIi8+PGxpbmUgY2xhc3M9 ImNscy0zIiB4MT0iMzE3IiB5MT0iMTgyLjI3IiB4Mj0iMzE3IiB5Mj0iMiIvPjxsaW5lIGNsYXNz PSJjbHMtMyIgeDE9IjQ1NCIgeTE9IjE4Mi4yNyIgeDI9IjQ1NCIgeTI9IjIiLz48bGluZSBjbGFz cz0iY2xzLTMiIHgxPSIyNzUiIHkxPSIxODIuMjciIHgyPSIyNzUiIHkyPSIyIi8+PGxpbmUgY2xh c3M9ImNscy0zIiB4MT0iMzA4IiB5MT0iMTgyLjI3IiB4Mj0iMzA4IiB5Mj0iMiIvPjxsaW5lIGNs YXNzPSJjbHMtMyIgeDE9IjIwNyIgeTE9IjE4Mi4yNyIgeDI9IjIwNyIgeTI9IjIiLz48bGluZSBj bGFzcz0iY2xzLTMiIHgxPSIxNyIgeTE9IjE4Mi4yNyIgeDI9IjE3IiB5Mj0iMiIvPjxsaW5lIGNs YXNzPSJjbHMtMyIgeDE9IjM3NyIgeTE9IjE4Mi4yNyIgeDI9IjM3NyIgeTI9IjIiLz48bGluZSBj bGFzcz0iY2xzLTMiIHgxPSIzNTgiIHkxPSIxODIuMjciIHgyPSIzNTgiIHkyPSIyIi8+PGxpbmUg Y2xhc3M9ImNscy0zIiB4MT0iMjM4IiB5MT0iMTgyLjI3IiB4Mj0iMjM4IiB5Mj0iMiIvPjxsaW5l IGNsYXNzPSJjbHMtMyIgeDE9IjExOSIgeTE9IjE4Mi4yNyIgeDI9IjExOSIgeTI9IjIiLz48bGlu ZSBjbGFzcz0iY2xzLTMiIHgxPSI0ODgiIHkxPSIxODIuMjciIHgyPSI0ODgiIHkyPSIyIi8+PGxp bmUgY2xhc3M9ImNscy0zIiB4MT0iNDA5IiB5MT0iMTgyLjI3IiB4Mj0iNDA5IiB5Mj0iMiIvPjxs aW5lIGNsYXNzPSJjbHMtMyIgeDE9IjIyOSIgeTE9IjE4Mi4yNyIgeDI9IjIyOSIgeTI9IjIiLz48 bGluZSBjbGFzcz0iY2xzLTMiIHgxPSIxMDkiIHkxPSIxODIuMjciIHgyPSIxMDkiIHkyPSIyIi8+ PGxpbmUgY2xhc3M9ImNscy0zIiB4MT0iNDciIHkxPSIxODIuMjciIHgyPSI0NyIgeTI9IjIiLz48 bGluZSBjbGFzcz0iY2xzLTMiIHgxPSI0MzkiIHkxPSIxODIuMjciIHgyPSI0MzkiIHkyPSIyIi8+ PGxpbmUgY2xhc3M9ImNscy0zIiB4MT0iMzk5IiB5MT0iMTgyLjI3IiB4Mj0iMzk5IiB5Mj0iMiIv PjxsaW5lIGNsYXNzPSJjbHMtMyIgeDE9IjEyNyIgeTE9IjE4Mi4yNyIgeDI9IjEyNyIgeTI9IjIi Lz48bGluZSBjbGFzcz0iY2xzLTMiIHgxPSI3OSIgeTE9IjE4Mi4yNyIgeDI9Ijc5IiB5Mj0iMiIv PjxsaW5lIGNsYXNzPSJjbHMtMyIgeDE9IjE4NyIgeTE9IjE4Mi4yNyIgeDI9IjE4NyIgeTI9IjIi Lz48bGluZSBjbGFzcz0iY2xzLTMiIHgxPSIxNTkiIHkxPSIxODIuMjciIHgyPSIxNTkiIHkyPSIy Ii8+PGxpbmUgY2xhc3M9ImNscy0zIiB4MT0iMTc3IiB5MT0iMTgyLjI3IiB4Mj0iMTc3IiB5Mj0i MiIvPjxsaW5lIGNsYXNzPSJjbHMtMyIgeDE9IjE0OSIgeTE9IjE4Mi4yNyIgeDI9IjE0OSIgeTI9 IjIiLz48bGluZSBjbGFzcz0iY2xzLTMiIHgxPSI0NzQiIHkxPSIxODIuMjciIHgyPSI0NzQiIHky PSIyIi8+PGxpbmUgY2xhc3M9ImNscy0zIiB4MT0iMjY2IiB5MT0iMTgyLjI3IiB4Mj0iMjY2IiB5 Mj0iMiIvPjxsaW5lIGNsYXNzPSJjbHMtMyIgeDE9IjQ2NCIgeTE9IjE4Mi4yNyIgeDI9IjQ2NCIg eTI9IjIiLz48bGluZSBjbGFzcz0iY2xzLTMiIHgxPSIyODUiIHkxPSIxODIuMjciIHgyPSIyODUi IHkyPSIyIi8+PGxpbmUgY2xhc3M9ImNscy0zIiB4MT0iMzE3IiB5MT0iMTgyLjI3IiB4Mj0iMzE3 IiB5Mj0iMiIvPjxsaW5lIGNsYXNzPSJjbHMtMyIgeDE9IjI0NyIgeTE9IjE4Mi4yNyIgeDI9IjI0 NyIgeTI9IjIiLz48bGluZSBjbGFzcz0iY2xzLTMiIHgxPSIyNiIgeTE9IjE4Mi4yNyIgeDI9IjI2 IiB5Mj0iMiIvPjxsaW5lIGNsYXNzPSJjbHMtMyIgeDE9IjM4NyIgeTE9IjE4Mi4yNyIgeDI9IjM4 NyIgeTI9IjIiLz48bGluZSBjbGFzcz0iY2xzLTMiIHgxPSI5IiB5MT0iMTgyLjI3IiB4Mj0iOSIg eTI9IjIiLz48bGluZSBjbGFzcz0iY2xzLTMiIHgxPSIxMzciIHkxPSIxODIuMjciIHgyPSIxMzci IHkyPSIyIi8+PGxpbmUgY2xhc3M9ImNscy0zIiB4MT0iMjkyIiB5MT0iMTgyLjI3IiB4Mj0iMjky IiB5Mj0iMiIvPjxsaW5lIGNsYXNzPSJjbHMtMyIgeDE9IjM3MyIgeTE9IjE4Mi4yNyIgeDI9IjM3 MyIgeTI9IjIiLz48bGluZSBjbGFzcz0iY2xzLTMiIHgxPSI1NiIgeTE9IjE4Mi4yNyIgeDI9IjU2 IiB5Mj0iMiIvPjxsaW5lIGNsYXNzPSJjbHMtMyIgeDE9IjQ5NCIgeTE9IjE4Mi4yNyIgeDI9IjQ5 NCIgeTI9IjIiLz48bGluZSBjbGFzcz0iY2xzLTMiIHgxPSI0OTciIHkxPSIxODIuMjciIHgyPSI0 OTciIHkyPSIyIi8+PGxpbmUgY2xhc3M9ImNscy0zIiB4MT0iMzQ5IiB5MT0iMTgyLjI3IiB4Mj0i MzQ5IiB5Mj0iMiIvPjxsaW5lIGNsYXNzPSJjbHMtMyIgeDE9IjIyOSIgeTE9IjE4Mi4yNyIgeDI9 IjIyOSIgeTI9IjIiLz48bGluZSBjbGFzcz0iY2xzLTMiIHgxPSIxMDkiIHkxPSIxODIuMjciIHgy PSIxMDkiIHkyPSIyIi8+PGxpbmUgY2xhc3M9ImNscy0zIiB4MT0iNDciIHkxPSIxODIuMjciIHgy PSI0NyIgeTI9IjIiLz48bGluZSBjbGFzcz0iY2xzLTMiIHgxPSI0NzkiIHkxPSIxODIuMjciIHgy PSI0NzkiIHkyPSIyIi8+PGxpbmUgY2xhc3M9ImNscy0zIiB4MT0iMzk5IiB5MT0iMTgyLjI3IiB4 Mj0iMzk5IiB5Mj0iMiIvPjxsaW5lIGNsYXNzPSJjbHMtMyIgeDE9IjE5OSIgeTE9IjE4Mi4yNyIg eDI9IjE5OSIgeTI9IjIiLz48bGluZSBjbGFzcz0iY2xzLTMiIHgxPSI3OSIgeTE9IjE4Mi4yNyIg eDI9Ijc5IiB5Mj0iMiIvPjxsaW5lIGNsYXNzPSJjbHMtMyIgeDE9IjM0MSIgeTE9IjE4Mi4yNyIg eDI9IjM0MSIgeTI9IjIiLz48bGluZSBjbGFzcz0iY2xzLTMiIHgxPSIyMTkiIHkxPSIxODIuMjci IHgyPSIyMTkiIHkyPSIyIi8+PGxpbmUgY2xhc3M9ImNscy0zIiB4MT0iOTkiIHkxPSIxODIuMjci IHgyPSI5OSIgeTI9IjIiLz48bGluZSBjbGFzcz0iY2xzLTMiIHgxPSI0MSIgeTE9IjE4Mi4yNyIg eDI9IjQxIiB5Mj0iMiIvPjxsaW5lIGNsYXNzPSJjbHMtMyIgeDE9IjQxOSIgeTE9IjE4Mi4yNyIg eDI9IjQxOSIgeTI9IjIiLz48bGluZSBjbGFzcz0iY2xzLTMiIHgxPSIzODkiIHkxPSIxODIuMjci IHgyPSIzODkiIHkyPSIyIi8+PGxpbmUgY2xhc3M9ImNscy0zIiB4MT0iMTg3IiB5MT0iMTgyLjI3 IiB4Mj0iMTg3IiB5Mj0iMiIvPjxsaW5lIGNsYXNzPSJjbHMtMyIgeDE9IjY5IiB5MT0iMTgyLjI3 IiB4Mj0iNjkiIHkyPSIyIi8+PGxpbmUgY2xhc3M9ImNscy0zIiB4MT0iMTc3IiB5MT0iMTgyLjI3 IiB4Mj0iMTc3IiB5Mj0iMiIvPjxsaW5lIGNsYXNzPSJjbHMtMyIgeDE9IjE0OSIgeTE9IjE4Mi4y NyIgeDI9IjE0OSIgeTI9IjIiLz48bGluZSBjbGFzcz0iY2xzLTMiIHgxPSIxNDEiIHkxPSIxODIu MjciIHgyPSIxNDEiIHkyPSIyIi8+PGxpbmUgY2xhc3M9ImNscy0zIiB4MT0iNDY0IiB5MT0iMTgy LjI3IiB4Mj0iNDY0IiB5Mj0iMiIvPjxsaW5lIGNsYXNzPSJjbHMtMyIgeDE9IjI4NSIgeTE9IjE4 Mi4yNyIgeDI9IjI4NSIgeTI9IjIiLz48bGluZSBjbGFzcz0iY2xzLTMiIHgxPSIzMTciIHkxPSIx ODIuMjciIHgyPSIzMTciIHkyPSIyIi8+PGxpbmUgY2xhc3M9ImNscy0zIiB4MT0iNDU0IiB5MT0i MTgyLjI3IiB4Mj0iNDU0IiB5Mj0iMiIvPjxsaW5lIGNsYXNzPSJjbHMtMyIgeDE9IjI3NSIgeTE9 IjE4Mi4yNyIgeDI9IjI3NSIgeTI9IjIiLz48bGluZSBjbGFzcz0iY2xzLTMiIHgxPSIzMDgiIHkx PSIxODIuMjciIHgyPSIzMDgiIHkyPSIyIi8+PGxpbmUgY2xhc3M9ImNscy0zIiB4MT0iMjA3IiB5 MT0iMTgyLjI3IiB4Mj0iMjA3IiB5Mj0iMiIvPjxsaW5lIGNsYXNzPSJjbHMtMyIgeDE9IjE3IiB5 MT0iMTgyLjI3IiB4Mj0iMTciIHkyPSIyIi8+PGxpbmUgY2xhc3M9ImNscy0zIiB4MT0iMzc3IiB5 MT0iMTgyLjI3IiB4Mj0iMzc3IiB5Mj0iMiIvPjxsaW5lIGNsYXNzPSJjbHMtMyIgeDE9IjExOSIg eTE9IjE4Mi4yNyIgeDI9IjExOSIgeTI9IjIiLz48bGluZSBjbGFzcz0iY2xzLTMiIHgxPSI0ODgi IHkxPSIxODIuMjciIHgyPSI0ODgiIHkyPSIyIi8+PGxpbmUgY2xhc3M9ImNscy0zIiB4MT0iNDA5 IiB5MT0iMTgyLjI3IiB4Mj0iNDA5IiB5Mj0iMiIvPjxsaW5lIGNsYXNzPSJjbHMtMyIgeDE9IjIy OSIgeTE9IjE4Mi4yNyIgeDI9IjIyOSIgeTI9IjIiLz48bGluZSBjbGFzcz0iY2xzLTMiIHgxPSIx MDkiIHkxPSIxODIuMjciIHgyPSIxMDkiIHkyPSIyIi8+PGxpbmUgY2xhc3M9ImNscy0zIiB4MT0i NDciIHkxPSIxODIuMjciIHgyPSI0NyIgeTI9IjIiLz48bGluZSBjbGFzcz0iY2xzLTMiIHgxPSI0 MzkiIHkxPSIxODIuMjciIHgyPSI0MzkiIHkyPSIyIi8+PGxpbmUgY2xhc3M9ImNscy0zIiB4MT0i Mzk5IiB5MT0iMTgyLjI3IiB4Mj0iMzk5IiB5Mj0iMiIvPjxsaW5lIGNsYXNzPSJjbHMtMyIgeDE9 IjEyNyIgeTE9IjE4Mi4yNyIgeDI9IjEyNyIgeTI9IjIiLz48bGluZSBjbGFzcz0iY2xzLTMiIHgx PSI3OSIgeTE9IjE4Mi4yNyIgeDI9Ijc5IiB5Mj0iMiIvPjxsaW5lIGNsYXNzPSJjbHMtMyIgeDE9 IjE4NyIgeTE9IjE4Mi4yNyIgeDI9IjE4NyIgeTI9IjIiLz48bGluZSBjbGFzcz0iY2xzLTMiIHgx PSIxNTkiIHkxPSIxODIuMjciIHgyPSIxNTkiIHkyPSIyIi8+PGxpbmUgY2xhc3M9ImNscy0zIiB4 MT0iMTc3IiB5MT0iMTgyLjI3IiB4Mj0iMTc3IiB5Mj0iMiIvPjxsaW5lIGNsYXNzPSJjbHMtMyIg eDE9IjE0OSIgeTE9IjE4Mi4yNyIgeDI9IjE0OSIgeTI9IjIiLz48bGluZSBjbGFzcz0iY2xzLTMi IHgxPSI0NzQiIHkxPSIxODIuMjciIHgyPSI0NzQiIHkyPSIyIi8+PGxpbmUgY2xhc3M9ImNscy0z IiB4MT0iMjk1IiB5MT0iMTgyLjI3IiB4Mj0iMjk1IiB5Mj0iMiIvPjxsaW5lIGNsYXNzPSJjbHMt MyIgeDE9IjI2NiIgeTE9IjE4Mi4yNyIgeDI9IjI2NiIgeTI9IjIiLz48bGluZSBjbGFzcz0iY2xz LTMiIHgxPSI0NjQiIHkxPSIxODIuMjciIHgyPSI0NjQiIHkyPSIyIi8+PGxpbmUgY2xhc3M9ImNs cy0zIiB4MT0iMjg1IiB5MT0iMTgyLjI3IiB4Mj0iMjg1IiB5Mj0iMiIvPjxsaW5lIGNsYXNzPSJj bHMtMyIgeDE9IjMxNyIgeTE9IjE4Mi4yNyIgeDI9IjMxNyIgeTI9IjIiLz48bGluZSBjbGFzcz0i Y2xzLTMiIHgxPSIyNDciIHkxPSIxODIuMjciIHgyPSIyNDciIHkyPSIyIi8+PGxpbmUgY2xhc3M9 ImNscy0zIiB4MT0iNTgiIHkxPSIxODIuMjciIHgyPSI1OCIgeTI9IjIiLz48bGluZSBjbGFzcz0i Y2xzLTMiIHgxPSIzODciIHkxPSIxODIuMjciIHgyPSIzODciIHkyPSIyIi8+PGxpbmUgY2xhc3M9 ImNscy0zIiB4MT0iOSIgeTE9IjE4Mi4yNyIgeDI9IjkiIHkyPSIyIi8+PGxpbmUgY2xhc3M9ImNs cy0zIiB4MT0iMjkyIiB5MT0iMTgyLjI3IiB4Mj0iMjkyIiB5Mj0iMiIvPjxsaW5lIGNsYXNzPSJj bHMtMyIgeDE9IjMwMSIgeTE9IjE4Mi4yNyIgeDI9IjMwMSIgeTI9IjIiLz48bGluZSBjbGFzcz0i Y2xzLTMiIHgxPSI0MjgiIHkxPSIxODIuMjciIHgyPSI0MjgiIHkyPSIyIi8+PGxpbmUgY2xhc3M9 ImNscy0zIiB4MT0iMzczIiB5MT0iMTgyLjI3IiB4Mj0iMzczIiB5Mj0iMiIvPjxsaW5lIGNsYXNz PSJjbHMtMyIgeDE9IjU2IiB5MT0iMTgyLjI3IiB4Mj0iNTYiIHkyPSIyIi8+PGxpbmUgY2xhc3M9 ImNscy0zIiB4MT0iNDk0IiB5MT0iMTgyLjI3IiB4Mj0iNDk0IiB5Mj0iMiIvPjxsaW5lIGNsYXNz PSJjbHMtMyIgeDE9IjQ5NyIgeTE9IjE4Mi4yNyIgeDI9IjQ5NyIgeTI9IjIiLz48L2c+PC9zdmc+ ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMu My4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvYWN0aXZp dHlfY2FsbGJhY2suaCBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2lu Y2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvYWN0aXZpdHlfY2FsbGJhY2suaApuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzJlODRlCi0tLSAvZGV2L251bGwKKysrIGIvMzg5LWRz LWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5h bC9hY3Rpdml0eV9jYWxsYmFjay5oCkBAIC0wLDAgKzEsMjMgQEAKKyNpZm5kZWYgSkVNQUxMT0Nf SU5URVJOQUxfQUNUSVZJVFlfQ0FMTEJBQ0tfSAorI2RlZmluZSBKRU1BTExPQ19JTlRFUk5BTF9B Q1RJVklUWV9DQUxMQkFDS19ICisKKy8qCisgKiBUaGUgY2FsbGJhY2sgdG8gYmUgZXhlY3V0ZWQg InBlcmlvZGljYWxseSIsIGluIHJlc3BvbnNlIHRvIHNvbWUgYW1vdW50IG9mCisgKiBhbGxvY2F0 b3IgYWN0aXZpdHkuCisgKgorICogVGhpcyBjYWxsYmFjayBuZWVkIG5vdCBiZSBjb21wdXRpbmcg YW55IHNvcnQgb2YgcGVhayAoYWx0aG91Z2ggdGhhdCdzIHRoZQorICogaW50ZW5kZWQgZmlyc3Qg dXNlIGNhc2UpLCBidXQgd2UgZHJpdmUgaXQgZnJvbSB0aGUgcGVhayBjb3VudGVyLCBzbyBpdCdz CisgKiBrZWVwcyB0aGluZ3MgdGlkeSB0byBrZWVwIGl0IGhlcmUuCisgKgorICogVGhlIGNhbGxz IHRvIHRoaXMgdGh1bmsgZ2V0IGRyaXZlbiBieSB0aGUgcGVha19ldmVudCBtb2R1bGUuCisgKi8K KyNkZWZpbmUgQUNUSVZJVFlfQ0FMTEJBQ0tfVEhVTktfSU5JVElBTElaRVIge05VTEwsIE5VTEx9 Cit0eXBlZGVmIHZvaWQgKCphY3Rpdml0eV9jYWxsYmFja190KSh2b2lkICp1Y3R4LCB1aW50NjRf dCBhbGxvY2F0ZWQsCisgICAgdWludDY0X3QgZGVhbGxvY2F0ZWQpOwordHlwZWRlZiBzdHJ1Y3Qg YWN0aXZpdHlfY2FsbGJhY2tfdGh1bmtfcyBhY3Rpdml0eV9jYWxsYmFja190aHVua190Oworc3Ry dWN0IGFjdGl2aXR5X2NhbGxiYWNrX3RodW5rX3MgeworCWFjdGl2aXR5X2NhbGxiYWNrX3QgY2Fs bGJhY2s7CisJdm9pZCAqdWN0eDsKK307CisKKyNlbmRpZiAvKiBKRU1BTExPQ19JTlRFUk5BTF9B Q1RJVklUWV9DQUxMQkFDS19IICovCgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVp bGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9hcmVuYV9leHRlcm5z LmggYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFs bG9jL2ludGVybmFsL2FyZW5hX2V4dGVybnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwLi5lNmZjZWFhCi0tLSAvZGV2L251bGwKKysrIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVp bGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9hcmVuYV9leHRlcm5z LmgKQEAgLTAsMCArMSwxMjEgQEAKKyNpZm5kZWYgSkVNQUxMT0NfSU5URVJOQUxfQVJFTkFfRVhU RVJOU19ICisjZGVmaW5lIEpFTUFMTE9DX0lOVEVSTkFMX0FSRU5BX0VYVEVSTlNfSAorCisjaW5j bHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvYmluLmgiCisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJu YWwvZGl2LmgiCisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvZXh0ZW50X2Rzcy5oIgorI2lu Y2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2hvb2suaCIKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRl cm5hbC9wYWdlcy5oIgorI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL3N0YXRzLmgiCisKKy8q CisgKiBXaGVuIHRoZSBhbW91bnQgb2YgcGFnZXMgdG8gYmUgcHVyZ2VkIGV4Y2VlZHMgdGhpcyBh bW91bnQsIGRlZmVycmVkIHB1cmdlCisgKiBzaG91bGQgaGFwcGVuLgorICovCisjZGVmaW5lIEFS RU5BX0RFRkVSUkVEX1BVUkdFX05QQUdFU19USFJFU0hPTEQgVUlOVDY0X0MoMTAyNCkKKworZXh0 ZXJuIHNzaXplX3Qgb3B0X2RpcnR5X2RlY2F5X21zOworZXh0ZXJuIHNzaXplX3Qgb3B0X211enp5 X2RlY2F5X21zOworCitleHRlcm4gcGVyY3B1X2FyZW5hX21vZGVfdCBvcHRfcGVyY3B1X2FyZW5h OworZXh0ZXJuIGNvbnN0IGNoYXIgKnBlcmNwdV9hcmVuYV9tb2RlX25hbWVzW107CisKK2V4dGVy biBkaXZfaW5mb190IGFyZW5hX2JpbmluZF9kaXZfaW5mb1tTQ19OQklOU107CisKK2V4dGVybiBt YWxsb2NfbXV0ZXhfdCBhcmVuYXNfbG9jazsKK2V4dGVybiBlbWFwX3QgYXJlbmFfZW1hcF9nbG9i YWw7CisKK2V4dGVybiBzaXplX3Qgb3B0X292ZXJzaXplX3RocmVzaG9sZDsKK2V4dGVybiBzaXpl X3Qgb3ZlcnNpemVfdGhyZXNob2xkOworCisvKgorICogYXJlbmFfYmluX29mZnNldHNbYmluaW5k XSBpcyB0aGUgb2Zmc2V0IG9mIHRoZSBmaXJzdCBiaW4gc2hhcmQgZm9yIHNpemUgY2xhc3MKKyAq IGJpbmluZC4KKyAqLworZXh0ZXJuIHVpbnQzMl90IGFyZW5hX2Jpbl9vZmZzZXRzW1NDX05CSU5T XTsKKwordm9pZCBhcmVuYV9iYXNpY19zdGF0c19tZXJnZSh0c2RuX3QgKnRzZG4sIGFyZW5hX3Qg KmFyZW5hLAorICAgIHVuc2lnbmVkICpudGhyZWFkcywgY29uc3QgY2hhciAqKmRzcywgc3NpemVf dCAqZGlydHlfZGVjYXlfbXMsCisgICAgc3NpemVfdCAqbXV6enlfZGVjYXlfbXMsIHNpemVfdCAq bmFjdGl2ZSwgc2l6ZV90ICpuZGlydHksIHNpemVfdCAqbm11enp5KTsKK3ZvaWQgYXJlbmFfc3Rh dHNfbWVyZ2UodHNkbl90ICp0c2RuLCBhcmVuYV90ICphcmVuYSwgdW5zaWduZWQgKm50aHJlYWRz LAorICAgIGNvbnN0IGNoYXIgKipkc3MsIHNzaXplX3QgKmRpcnR5X2RlY2F5X21zLCBzc2l6ZV90 ICptdXp6eV9kZWNheV9tcywKKyAgICBzaXplX3QgKm5hY3RpdmUsIHNpemVfdCAqbmRpcnR5LCBz aXplX3QgKm5tdXp6eSwgYXJlbmFfc3RhdHNfdCAqYXN0YXRzLAorICAgIGJpbl9zdGF0c19kYXRh X3QgKmJzdGF0cywgYXJlbmFfc3RhdHNfbGFyZ2VfdCAqbHN0YXRzLAorICAgIHBhY19lc3RhdHNf dCAqZXN0YXRzLCBocGFfc2hhcmRfc3RhdHNfdCAqaHBhc3RhdHMsIHNlY19zdGF0c190ICpzZWNz dGF0cyk7Cit2b2lkIGFyZW5hX2hhbmRsZV9kZWZlcnJlZF93b3JrKHRzZG5fdCAqdHNkbiwgYXJl bmFfdCAqYXJlbmEpOworZWRhdGFfdCAqYXJlbmFfZXh0ZW50X2FsbG9jX2xhcmdlKHRzZG5fdCAq dHNkbiwgYXJlbmFfdCAqYXJlbmEsCisgICAgc2l6ZV90IHVzaXplLCBzaXplX3QgYWxpZ25tZW50 LCBib29sIHplcm8pOwordm9pZCBhcmVuYV9leHRlbnRfZGFsbG9jX2xhcmdlX3ByZXAodHNkbl90 ICp0c2RuLCBhcmVuYV90ICphcmVuYSwKKyAgICBlZGF0YV90ICplZGF0YSk7Cit2b2lkIGFyZW5h X2V4dGVudF9yYWxsb2NfbGFyZ2Vfc2hyaW5rKHRzZG5fdCAqdHNkbiwgYXJlbmFfdCAqYXJlbmEs CisgICAgZWRhdGFfdCAqZWRhdGEsIHNpemVfdCBvbGRzaXplKTsKK3ZvaWQgYXJlbmFfZXh0ZW50 X3JhbGxvY19sYXJnZV9leHBhbmQodHNkbl90ICp0c2RuLCBhcmVuYV90ICphcmVuYSwKKyAgICBl ZGF0YV90ICplZGF0YSwgc2l6ZV90IG9sZHNpemUpOworYm9vbCBhcmVuYV9kZWNheV9tc19zZXQo dHNkbl90ICp0c2RuLCBhcmVuYV90ICphcmVuYSwgZXh0ZW50X3N0YXRlX3Qgc3RhdGUsCisgICAg c3NpemVfdCBkZWNheV9tcyk7Citzc2l6ZV90IGFyZW5hX2RlY2F5X21zX2dldChhcmVuYV90ICph cmVuYSwgZXh0ZW50X3N0YXRlX3Qgc3RhdGUpOwordm9pZCBhcmVuYV9kZWNheSh0c2RuX3QgKnRz ZG4sIGFyZW5hX3QgKmFyZW5hLCBib29sIGlzX2JhY2tncm91bmRfdGhyZWFkLAorICAgIGJvb2wg YWxsKTsKK3VpbnQ2NF90IGFyZW5hX3RpbWVfdW50aWxfZGVmZXJyZWQodHNkbl90ICp0c2RuLCBh cmVuYV90ICphcmVuYSk7Cit2b2lkIGFyZW5hX2RvX2RlZmVycmVkX3dvcmsodHNkbl90ICp0c2Ru LCBhcmVuYV90ICphcmVuYSk7Cit2b2lkIGFyZW5hX3Jlc2V0KHRzZF90ICp0c2QsIGFyZW5hX3Qg KmFyZW5hKTsKK3ZvaWQgYXJlbmFfZGVzdHJveSh0c2RfdCAqdHNkLCBhcmVuYV90ICphcmVuYSk7 Cit2b2lkIGFyZW5hX2NhY2hlX2Jpbl9maWxsX3NtYWxsKHRzZG5fdCAqdHNkbiwgYXJlbmFfdCAq YXJlbmEsCisgICAgY2FjaGVfYmluX3QgKmNhY2hlX2JpbiwgY2FjaGVfYmluX2luZm9fdCAqY2Fj aGVfYmluX2luZm8sIHN6aW5kX3QgYmluaW5kLAorICAgIGNvbnN0IHVuc2lnbmVkIG5maWxsKTsK Kwordm9pZCAqYXJlbmFfbWFsbG9jX2hhcmQodHNkbl90ICp0c2RuLCBhcmVuYV90ICphcmVuYSwg c2l6ZV90IHNpemUsCisgICAgc3ppbmRfdCBpbmQsIGJvb2wgemVybyk7Cit2b2lkICphcmVuYV9w YWxsb2ModHNkbl90ICp0c2RuLCBhcmVuYV90ICphcmVuYSwgc2l6ZV90IHVzaXplLAorICAgIHNp emVfdCBhbGlnbm1lbnQsIGJvb2wgemVybywgdGNhY2hlX3QgKnRjYWNoZSk7Cit2b2lkIGFyZW5h X3Byb2ZfcHJvbW90ZSh0c2RuX3QgKnRzZG4sIHZvaWQgKnB0ciwgc2l6ZV90IHVzaXplKTsKK3Zv aWQgYXJlbmFfZGFsbG9jX3Byb21vdGVkKHRzZG5fdCAqdHNkbiwgdm9pZCAqcHRyLCB0Y2FjaGVf dCAqdGNhY2hlLAorICAgIGJvb2wgc2xvd19wYXRoKTsKK3ZvaWQgYXJlbmFfc2xhYl9kYWxsb2Mo dHNkbl90ICp0c2RuLCBhcmVuYV90ICphcmVuYSwgZWRhdGFfdCAqc2xhYik7CisKK3ZvaWQgYXJl bmFfZGFsbG9jX2Jpbl9sb2NrZWRfaGFuZGxlX25ld2x5X2VtcHR5KHRzZG5fdCAqdHNkbiwgYXJl bmFfdCAqYXJlbmEsCisgICAgZWRhdGFfdCAqc2xhYiwgYmluX3QgKmJpbik7Cit2b2lkIGFyZW5h X2RhbGxvY19iaW5fbG9ja2VkX2hhbmRsZV9uZXdseV9ub25lbXB0eSh0c2RuX3QgKnRzZG4sIGFy ZW5hX3QgKmFyZW5hLAorICAgIGVkYXRhX3QgKnNsYWIsIGJpbl90ICpiaW4pOwordm9pZCBhcmVu YV9kYWxsb2Nfc21hbGwodHNkbl90ICp0c2RuLCB2b2lkICpwdHIpOworYm9vbCBhcmVuYV9yYWxs b2Nfbm9fbW92ZSh0c2RuX3QgKnRzZG4sIHZvaWQgKnB0ciwgc2l6ZV90IG9sZHNpemUsIHNpemVf dCBzaXplLAorICAgIHNpemVfdCBleHRyYSwgYm9vbCB6ZXJvLCBzaXplX3QgKm5ld3NpemUpOwor dm9pZCAqYXJlbmFfcmFsbG9jKHRzZG5fdCAqdHNkbiwgYXJlbmFfdCAqYXJlbmEsIHZvaWQgKnB0 ciwgc2l6ZV90IG9sZHNpemUsCisgICAgc2l6ZV90IHNpemUsIHNpemVfdCBhbGlnbm1lbnQsIGJv b2wgemVybywgdGNhY2hlX3QgKnRjYWNoZSwKKyAgICBob29rX3JhbGxvY19hcmdzX3QgKmhvb2tf YXJncyk7Citkc3NfcHJlY190IGFyZW5hX2Rzc19wcmVjX2dldChhcmVuYV90ICphcmVuYSk7Citl aG9va3NfdCAqYXJlbmFfZ2V0X2Vob29rcyhhcmVuYV90ICphcmVuYSk7CitleHRlbnRfaG9va3Nf dCAqYXJlbmFfc2V0X2V4dGVudF9ob29rcyh0c2RfdCAqdHNkLCBhcmVuYV90ICphcmVuYSwKKyAg ICBleHRlbnRfaG9va3NfdCAqZXh0ZW50X2hvb2tzKTsKK2Jvb2wgYXJlbmFfZHNzX3ByZWNfc2V0 KGFyZW5hX3QgKmFyZW5hLCBkc3NfcHJlY190IGRzc19wcmVjKTsKK3NzaXplX3QgYXJlbmFfZGly dHlfZGVjYXlfbXNfZGVmYXVsdF9nZXQodm9pZCk7Citib29sIGFyZW5hX2RpcnR5X2RlY2F5X21z X2RlZmF1bHRfc2V0KHNzaXplX3QgZGVjYXlfbXMpOworc3NpemVfdCBhcmVuYV9tdXp6eV9kZWNh eV9tc19kZWZhdWx0X2dldCh2b2lkKTsKK2Jvb2wgYXJlbmFfbXV6enlfZGVjYXlfbXNfZGVmYXVs dF9zZXQoc3NpemVfdCBkZWNheV9tcyk7Citib29sIGFyZW5hX3JldGFpbl9ncm93X2xpbWl0X2dl dF9zZXQodHNkX3QgKnRzZCwgYXJlbmFfdCAqYXJlbmEsCisgICAgc2l6ZV90ICpvbGRfbGltaXQs IHNpemVfdCAqbmV3X2xpbWl0KTsKK3Vuc2lnbmVkIGFyZW5hX250aHJlYWRzX2dldChhcmVuYV90 ICphcmVuYSwgYm9vbCBpbnRlcm5hbCk7Cit2b2lkIGFyZW5hX250aHJlYWRzX2luYyhhcmVuYV90 ICphcmVuYSwgYm9vbCBpbnRlcm5hbCk7Cit2b2lkIGFyZW5hX250aHJlYWRzX2RlYyhhcmVuYV90 ICphcmVuYSwgYm9vbCBpbnRlcm5hbCk7CithcmVuYV90ICphcmVuYV9uZXcodHNkbl90ICp0c2Ru LCB1bnNpZ25lZCBpbmQsIGNvbnN0IGFyZW5hX2NvbmZpZ190ICpjb25maWcpOworYm9vbCBhcmVu YV9pbml0X2h1Z2Uodm9pZCk7Citib29sIGFyZW5hX2lzX2h1Z2UodW5zaWduZWQgYXJlbmFfaW5k KTsKK2FyZW5hX3QgKmFyZW5hX2Nob29zZV9odWdlKHRzZF90ICp0c2QpOworYmluX3QgKmFyZW5h X2Jpbl9jaG9vc2UodHNkbl90ICp0c2RuLCBhcmVuYV90ICphcmVuYSwgc3ppbmRfdCBiaW5pbmQs CisgICAgdW5zaWduZWQgKmJpbnNoYXJkKTsKK3NpemVfdCBhcmVuYV9maWxsX3NtYWxsX2ZyZXNo KHRzZG5fdCAqdHNkbiwgYXJlbmFfdCAqYXJlbmEsIHN6aW5kX3QgYmluaW5kLAorICAgIHZvaWQg KipwdHJzLCBzaXplX3QgbmZpbGwsIGJvb2wgemVybyk7Citib29sIGFyZW5hX2Jvb3Qoc2NfZGF0 YV90ICpzY19kYXRhLCBiYXNlX3QgKmJhc2UsIGJvb2wgaHBhKTsKK3ZvaWQgYXJlbmFfcHJlZm9y azAodHNkbl90ICp0c2RuLCBhcmVuYV90ICphcmVuYSk7Cit2b2lkIGFyZW5hX3ByZWZvcmsxKHRz ZG5fdCAqdHNkbiwgYXJlbmFfdCAqYXJlbmEpOwordm9pZCBhcmVuYV9wcmVmb3JrMih0c2RuX3Qg KnRzZG4sIGFyZW5hX3QgKmFyZW5hKTsKK3ZvaWQgYXJlbmFfcHJlZm9yazModHNkbl90ICp0c2Ru LCBhcmVuYV90ICphcmVuYSk7Cit2b2lkIGFyZW5hX3ByZWZvcms0KHRzZG5fdCAqdHNkbiwgYXJl bmFfdCAqYXJlbmEpOwordm9pZCBhcmVuYV9wcmVmb3JrNSh0c2RuX3QgKnRzZG4sIGFyZW5hX3Qg KmFyZW5hKTsKK3ZvaWQgYXJlbmFfcHJlZm9yazYodHNkbl90ICp0c2RuLCBhcmVuYV90ICphcmVu YSk7Cit2b2lkIGFyZW5hX3ByZWZvcms3KHRzZG5fdCAqdHNkbiwgYXJlbmFfdCAqYXJlbmEpOwor dm9pZCBhcmVuYV9wcmVmb3JrOCh0c2RuX3QgKnRzZG4sIGFyZW5hX3QgKmFyZW5hKTsKK3ZvaWQg YXJlbmFfcG9zdGZvcmtfcGFyZW50KHRzZG5fdCAqdHNkbiwgYXJlbmFfdCAqYXJlbmEpOwordm9p ZCBhcmVuYV9wb3N0Zm9ya19jaGlsZCh0c2RuX3QgKnRzZG4sIGFyZW5hX3QgKmFyZW5hKTsKKwor I2VuZGlmIC8qIEpFTUFMTE9DX0lOVEVSTkFMX0FSRU5BX0VYVEVSTlNfSCAqLwoKZGlmZiAtLWdp dCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxs b2MvaW50ZXJuYWwvYXJlbmFfaW5saW5lc19hLmggYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9q ZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL2FyZW5hX2lubGluZXNfYS5o Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1NjgzNTgKLS0tIC9kZXYvbnVs bAorKysgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2pl bWFsbG9jL2ludGVybmFsL2FyZW5hX2lubGluZXNfYS5oCkBAIC0wLDAgKzEsMjQgQEAKKyNpZm5k ZWYgSkVNQUxMT0NfSU5URVJOQUxfQVJFTkFfSU5MSU5FU19BX0gKKyNkZWZpbmUgSkVNQUxMT0Nf SU5URVJOQUxfQVJFTkFfSU5MSU5FU19BX0gKKworc3RhdGljIGlubGluZSB1bnNpZ25lZAorYXJl bmFfaW5kX2dldChjb25zdCBhcmVuYV90ICphcmVuYSkgeworCXJldHVybiBhcmVuYS0+aW5kOwor fQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2FyZW5hX2ludGVybmFsX2FkZChhcmVuYV90ICphcmVu YSwgc2l6ZV90IHNpemUpIHsKKwlhdG9taWNfZmV0Y2hfYWRkX3p1KCZhcmVuYS0+c3RhdHMuaW50 ZXJuYWwsIHNpemUsIEFUT01JQ19SRUxBWEVEKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCith cmVuYV9pbnRlcm5hbF9zdWIoYXJlbmFfdCAqYXJlbmEsIHNpemVfdCBzaXplKSB7CisJYXRvbWlj X2ZldGNoX3N1Yl96dSgmYXJlbmEtPnN0YXRzLmludGVybmFsLCBzaXplLCBBVE9NSUNfUkVMQVhF RCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc2l6ZV90CithcmVuYV9pbnRlcm5hbF9nZXQoYXJlbmFf dCAqYXJlbmEpIHsKKwlyZXR1cm4gYXRvbWljX2xvYWRfenUoJmFyZW5hLT5zdGF0cy5pbnRlcm5h bCwgQVRPTUlDX1JFTEFYRUQpOworfQorCisjZW5kaWYgLyogSkVNQUxMT0NfSU5URVJOQUxfQVJF TkFfSU5MSU5FU19BX0ggKi8KCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9q ZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL2FyZW5hX2lubGluZXNfYi5o IGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxv Yy9pbnRlcm5hbC9hcmVuYV9pbmxpbmVzX2IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwLi5mYTgxNTM3Ci0tLSAvZGV2L251bGwKKysrIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVp bGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9hcmVuYV9pbmxpbmVz X2IuaApAQCAtMCwwICsxLDU1MCBAQAorI2lmbmRlZiBKRU1BTExPQ19JTlRFUk5BTF9BUkVOQV9J TkxJTkVTX0JfSAorI2RlZmluZSBKRU1BTExPQ19JTlRFUk5BTF9BUkVOQV9JTkxJTkVTX0JfSAor CisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvZGl2LmgiCisjaW5jbHVkZSAiamVtYWxsb2Mv aW50ZXJuYWwvZW1hcC5oIgorI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2plbWFsbG9jX2lu dGVybmFsX3R5cGVzLmgiCisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvbXV0ZXguaCIKKyNp bmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9ydHJlZS5oIgorI2luY2x1ZGUgImplbWFsbG9jL2lu dGVybmFsL3NhZmV0eV9jaGVjay5oIgorI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL3NjLmgi CisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvc3ouaCIKKyNpbmNsdWRlICJqZW1hbGxvYy9p bnRlcm5hbC90aWNrZXIuaCIKKworc3RhdGljIGlubGluZSBhcmVuYV90ICoKK2FyZW5hX2dldF9m cm9tX2VkYXRhKGVkYXRhX3QgKmVkYXRhKSB7CisJcmV0dXJuIChhcmVuYV90ICopYXRvbWljX2xv YWRfcCgmYXJlbmFzW2VkYXRhX2FyZW5hX2luZF9nZXQoZWRhdGEpXSwKKwkgICAgQVRPTUlDX1JF TEFYRUQpOworfQorCitKRU1BTExPQ19BTFdBWVNfSU5MSU5FIGFyZW5hX3QgKgorYXJlbmFfY2hv b3NlX21heWJlX2h1Z2UodHNkX3QgKnRzZCwgYXJlbmFfdCAqYXJlbmEsIHNpemVfdCBzaXplKSB7 CisJaWYgKGFyZW5hICE9IE5VTEwpIHsKKwkJcmV0dXJuIGFyZW5hOworCX0KKworCS8qCisJICog Rm9yIGh1Z2UgYWxsb2NhdGlvbnMsIHVzZSB0aGUgZGVkaWNhdGVkIGh1Z2UgYXJlbmEgaWYgYm90 aCBhcmUgdHJ1ZToKKwkgKiAxKSBpcyB1c2luZyBhdXRvIGFyZW5hIHNlbGVjdGlvbiAoaS5lLiBh cmVuYSA9PSBOVUxMKSwgYW5kIDIpIHRoZQorCSAqIHRocmVhZCBpcyBub3QgYXNzaWduZWQgdG8g YSBtYW51YWwgYXJlbmEuCisJICovCisJaWYgKHVubGlrZWx5KHNpemUgPj0gb3ZlcnNpemVfdGhy ZXNob2xkKSkgeworCQlhcmVuYV90ICp0c2RfYXJlbmEgPSB0c2RfYXJlbmFfZ2V0KHRzZCk7CisJ CWlmICh0c2RfYXJlbmEgPT0gTlVMTCB8fCBhcmVuYV9pc19hdXRvKHRzZF9hcmVuYSkpIHsKKwkJ CXJldHVybiBhcmVuYV9jaG9vc2VfaHVnZSh0c2QpOworCQl9CisJfQorCisJcmV0dXJuIGFyZW5h X2Nob29zZSh0c2QsIE5VTEwpOworfQorCitKRU1BTExPQ19BTFdBWVNfSU5MSU5FIHZvaWQKK2Fy ZW5hX3Byb2ZfaW5mb19nZXQodHNkX3QgKnRzZCwgY29uc3Qgdm9pZCAqcHRyLCBlbWFwX2FsbG9j X2N0eF90ICphbGxvY19jdHgsCisgICAgcHJvZl9pbmZvX3QgKnByb2ZfaW5mbywgYm9vbCByZXNl dF9yZWNlbnQpIHsKKwljYXNzZXJ0KGNvbmZpZ19wcm9mKTsKKwlhc3NlcnQocHRyICE9IE5VTEwp OworCWFzc2VydChwcm9mX2luZm8gIT0gTlVMTCk7CisKKwllZGF0YV90ICplZGF0YSA9IE5VTEw7 CisJYm9vbCBpc19zbGFiOworCisJLyogU3RhdGljIGNoZWNrLiAqLworCWlmIChhbGxvY19jdHgg PT0gTlVMTCkgeworCQllZGF0YSA9IGVtYXBfZWRhdGFfbG9va3VwKHRzZF90c2RuKHRzZCksICZh cmVuYV9lbWFwX2dsb2JhbCwKKwkJICAgIHB0cik7CisJCWlzX3NsYWIgPSBlZGF0YV9zbGFiX2dl dChlZGF0YSk7CisJfSBlbHNlIGlmICh1bmxpa2VseSghKGlzX3NsYWIgPSBhbGxvY19jdHgtPnNs YWIpKSkgeworCQllZGF0YSA9IGVtYXBfZWRhdGFfbG9va3VwKHRzZF90c2RuKHRzZCksICZhcmVu YV9lbWFwX2dsb2JhbCwKKwkJICAgIHB0cik7CisJfQorCisJaWYgKHVubGlrZWx5KCFpc19zbGFi KSkgeworCQkvKiBlZGF0YSBtdXN0IGhhdmUgYmVlbiBpbml0aWFsaXplZCBhdCB0aGlzIHBvaW50 LiAqLworCQlhc3NlcnQoZWRhdGEgIT0gTlVMTCk7CisJCWxhcmdlX3Byb2ZfaW5mb19nZXQodHNk LCBlZGF0YSwgcHJvZl9pbmZvLCByZXNldF9yZWNlbnQpOworCX0gZWxzZSB7CisJCXByb2ZfaW5m by0+YWxsb2NfdGN0eCA9IChwcm9mX3RjdHhfdCAqKSh1aW50cHRyX3QpMVU7CisJCS8qCisJCSAq IE5vIG5lZWQgdG8gc2V0IG90aGVyIGZpZWxkcyBpbiBwcm9mX2luZm87IHRoZXkgd2lsbCBuZXZl ciBiZQorCQkgKiBhY2Nlc3NlZCBpZiAodWludHB0cl90KWFsbG9jX3RjdHggPT0gKHVpbnRwdHJf dCkxVS4KKwkJICovCisJfQorfQorCitKRU1BTExPQ19BTFdBWVNfSU5MSU5FIHZvaWQKK2FyZW5h X3Byb2ZfdGN0eF9yZXNldCh0c2RfdCAqdHNkLCBjb25zdCB2b2lkICpwdHIsCisgICAgZW1hcF9h bGxvY19jdHhfdCAqYWxsb2NfY3R4KSB7CisJY2Fzc2VydChjb25maWdfcHJvZik7CisJYXNzZXJ0 KHB0ciAhPSBOVUxMKTsKKworCS8qIFN0YXRpYyBjaGVjay4gKi8KKwlpZiAoYWxsb2NfY3R4ID09 IE5VTEwpIHsKKwkJZWRhdGFfdCAqZWRhdGEgPSBlbWFwX2VkYXRhX2xvb2t1cCh0c2RfdHNkbih0 c2QpLAorCQkgICAgJmFyZW5hX2VtYXBfZ2xvYmFsLCBwdHIpOworCQlpZiAodW5saWtlbHkoIWVk YXRhX3NsYWJfZ2V0KGVkYXRhKSkpIHsKKwkJCWxhcmdlX3Byb2ZfdGN0eF9yZXNldChlZGF0YSk7 CisJCX0KKwl9IGVsc2UgeworCQlpZiAodW5saWtlbHkoIWFsbG9jX2N0eC0+c2xhYikpIHsKKwkJ CWVkYXRhX3QgKmVkYXRhID0gZW1hcF9lZGF0YV9sb29rdXAodHNkX3RzZG4odHNkKSwKKwkJCSAg ICAmYXJlbmFfZW1hcF9nbG9iYWwsIHB0cik7CisJCQlsYXJnZV9wcm9mX3RjdHhfcmVzZXQoZWRh dGEpOworCQl9CisJfQorfQorCitKRU1BTExPQ19BTFdBWVNfSU5MSU5FIHZvaWQKK2FyZW5hX3By b2ZfdGN0eF9yZXNldF9zYW1wbGVkKHRzZF90ICp0c2QsIGNvbnN0IHZvaWQgKnB0cikgeworCWNh c3NlcnQoY29uZmlnX3Byb2YpOworCWFzc2VydChwdHIgIT0gTlVMTCk7CisKKwllZGF0YV90ICpl ZGF0YSA9IGVtYXBfZWRhdGFfbG9va3VwKHRzZF90c2RuKHRzZCksICZhcmVuYV9lbWFwX2dsb2Jh bCwKKwkgICAgcHRyKTsKKwlhc3NlcnQoIWVkYXRhX3NsYWJfZ2V0KGVkYXRhKSk7CisKKwlsYXJn ZV9wcm9mX3RjdHhfcmVzZXQoZWRhdGEpOworfQorCitKRU1BTExPQ19BTFdBWVNfSU5MSU5FIHZv aWQKK2FyZW5hX3Byb2ZfaW5mb19zZXQodHNkX3QgKnRzZCwgZWRhdGFfdCAqZWRhdGEsIHByb2Zf dGN0eF90ICp0Y3R4LAorICAgIHNpemVfdCBzaXplKSB7CisJY2Fzc2VydChjb25maWdfcHJvZik7 CisKKwlhc3NlcnQoIWVkYXRhX3NsYWJfZ2V0KGVkYXRhKSk7CisJbGFyZ2VfcHJvZl9pbmZvX3Nl dChlZGF0YSwgdGN0eCwgc2l6ZSk7Cit9CisKK0pFTUFMTE9DX0FMV0FZU19JTkxJTkUgdm9pZAor YXJlbmFfZGVjYXlfdGlja3ModHNkbl90ICp0c2RuLCBhcmVuYV90ICphcmVuYSwgdW5zaWduZWQg bnRpY2tzKSB7CisJaWYgKHVubGlrZWx5KHRzZG5fbnVsbCh0c2RuKSkpIHsKKwkJcmV0dXJuOwor CX0KKwl0c2RfdCAqdHNkID0gdHNkbl90c2QodHNkbik7CisJLyoKKwkgKiBXZSB1c2UgdGhlIHRp Y2tlcl9nZW9tX3QgdG8gYXZvaWQgaGF2aW5nIHBlci1hcmVuYSBzdGF0ZSBpbiB0aGUgdHNkLgor CSAqIEluc3RlYWQgb2YgaGF2aW5nIGEgY291bnRkb3duLXVudGlsLWRlY2F5IHRpbWVyIHJ1bm5p bmcgZm9yIGV2ZXJ5CisJICogYXJlbmEgaW4gZXZlcnkgdGhyZWFkLCB3ZSBmbGlwIGEgY29pbiBv bmNlIHBlciB0aWNrLCB3aG9zZQorCSAqIHByb2JhYmlsaXR5IG9mIGNvbWluZyB1cCBoZWFkcyBp cyAxL250aWNrczsgdGhpcyBpcyBlZmZlY3RpdmVseSB0aGUKKwkgKiBvcGVyYXRpb24gb2YgdGhl IHRpY2tlcl9nZW9tX3QuICBFYWNoIGFyZW5hIGhhcyB0aGUgc2FtZSBjaGFuY2Ugb2YgYQorCSAq IGNvaW5mbGlwIGNvbWluZyB1cCBoZWFkcyAoMS9BUkVOQV9ERUNBWV9OVElDS1NfUEVSX1VQREFU RSksIHNvIHdlIGNhbgorCSAqIHVzZSBhIHNpbmdsZSB0aWNrZXIgZm9yIGFsbCBvZiB0aGVtLgor CSAqLworCXRpY2tlcl9nZW9tX3QgKmRlY2F5X3RpY2tlciA9IHRzZF9hcmVuYV9kZWNheV90aWNr ZXJwX2dldCh0c2QpOworCXVpbnQ2NF90ICpwcm5nX3N0YXRlID0gdHNkX3Bybmdfc3RhdGVwX2dl dCh0c2QpOworCWlmICh1bmxpa2VseSh0aWNrZXJfZ2VvbV90aWNrcyhkZWNheV90aWNrZXIsIHBy bmdfc3RhdGUsIG50aWNrcykpKSB7CisJCWFyZW5hX2RlY2F5KHRzZG4sIGFyZW5hLCBmYWxzZSwg ZmFsc2UpOworCX0KK30KKworSkVNQUxMT0NfQUxXQVlTX0lOTElORSB2b2lkCithcmVuYV9kZWNh eV90aWNrKHRzZG5fdCAqdHNkbiwgYXJlbmFfdCAqYXJlbmEpIHsKKwlhcmVuYV9kZWNheV90aWNr cyh0c2RuLCBhcmVuYSwgMSk7Cit9CisKK0pFTUFMTE9DX0FMV0FZU19JTkxJTkUgdm9pZCAqCith cmVuYV9tYWxsb2ModHNkbl90ICp0c2RuLCBhcmVuYV90ICphcmVuYSwgc2l6ZV90IHNpemUsIHN6 aW5kX3QgaW5kLCBib29sIHplcm8sCisgICAgdGNhY2hlX3QgKnRjYWNoZSwgYm9vbCBzbG93X3Bh dGgpIHsKKwlhc3NlcnQoIXRzZG5fbnVsbCh0c2RuKSB8fCB0Y2FjaGUgPT0gTlVMTCk7CisKKwlp ZiAobGlrZWx5KHRjYWNoZSAhPSBOVUxMKSkgeworCQlpZiAobGlrZWx5KHNpemUgPD0gU0NfU01B TExfTUFYQ0xBU1MpKSB7CisJCQlyZXR1cm4gdGNhY2hlX2FsbG9jX3NtYWxsKHRzZG5fdHNkKHRz ZG4pLCBhcmVuYSwKKwkJCSAgICB0Y2FjaGUsIHNpemUsIGluZCwgemVybywgc2xvd19wYXRoKTsK KwkJfQorCQlpZiAobGlrZWx5KHNpemUgPD0gdGNhY2hlX21heGNsYXNzKSkgeworCQkJcmV0dXJu IHRjYWNoZV9hbGxvY19sYXJnZSh0c2RuX3RzZCh0c2RuKSwgYXJlbmEsCisJCQkgICAgdGNhY2hl LCBzaXplLCBpbmQsIHplcm8sIHNsb3dfcGF0aCk7CisJCX0KKwkJLyogKHNpemUgPiB0Y2FjaGVf bWF4Y2xhc3MpIGNhc2UgZmFsbHMgdGhyb3VnaC4gKi8KKwkJYXNzZXJ0KHNpemUgPiB0Y2FjaGVf bWF4Y2xhc3MpOworCX0KKworCXJldHVybiBhcmVuYV9tYWxsb2NfaGFyZCh0c2RuLCBhcmVuYSwg c2l6ZSwgaW5kLCB6ZXJvKTsKK30KKworSkVNQUxMT0NfQUxXQVlTX0lOTElORSBhcmVuYV90ICoK K2FyZW5hX2FhbGxvYyh0c2RuX3QgKnRzZG4sIGNvbnN0IHZvaWQgKnB0cikgeworCWVkYXRhX3Qg KmVkYXRhID0gZW1hcF9lZGF0YV9sb29rdXAodHNkbiwgJmFyZW5hX2VtYXBfZ2xvYmFsLCBwdHIp OworCXVuc2lnbmVkIGFyZW5hX2luZCA9IGVkYXRhX2FyZW5hX2luZF9nZXQoZWRhdGEpOworCXJl dHVybiAoYXJlbmFfdCAqKWF0b21pY19sb2FkX3AoJmFyZW5hc1thcmVuYV9pbmRdLCBBVE9NSUNf UkVMQVhFRCk7Cit9CisKK0pFTUFMTE9DX0FMV0FZU19JTkxJTkUgc2l6ZV90CithcmVuYV9zYWxs b2ModHNkbl90ICp0c2RuLCBjb25zdCB2b2lkICpwdHIpIHsKKwlhc3NlcnQocHRyICE9IE5VTEwp OworCWVtYXBfYWxsb2NfY3R4X3QgYWxsb2NfY3R4OworCWVtYXBfYWxsb2NfY3R4X2xvb2t1cCh0 c2RuLCAmYXJlbmFfZW1hcF9nbG9iYWwsIHB0ciwgJmFsbG9jX2N0eCk7CisJYXNzZXJ0KGFsbG9j X2N0eC5zemluZCAhPSBTQ19OU0laRVMpOworCisJcmV0dXJuIHN6X2luZGV4MnNpemUoYWxsb2Nf Y3R4LnN6aW5kKTsKK30KKworSkVNQUxMT0NfQUxXQVlTX0lOTElORSBzaXplX3QKK2FyZW5hX3Zz YWxsb2ModHNkbl90ICp0c2RuLCBjb25zdCB2b2lkICpwdHIpIHsKKwkvKgorCSAqIFJldHVybiAw IGlmIHB0ciBpcyBub3Qgd2l0aGluIGFuIGV4dGVudCBtYW5hZ2VkIGJ5IGplbWFsbG9jLiAgVGhp cworCSAqIGZ1bmN0aW9uIGhhcyB0d28gZXh0cmEgY29zdHMgcmVsYXRpdmUgdG8gaXNhbGxvYygp OgorCSAqIC0gVGhlIHJ0cmVlIGNhbGxzIGNhbm5vdCBjbGFpbSB0byBiZSBkZXBlbmRlbnQgbG9v a3Vwcywgd2hpY2ggaW5kdWNlcworCSAqICAgcnRyZWUgbG9va3VwIGxvYWQgZGVwZW5kZW5jaWVz LgorCSAqIC0gVGhlIGxvb2t1cCBtYXkgZmFpbCwgc28gdGhlcmUgaXMgYW4gZXh0cmEgYnJhbmNo IHRvIGNoZWNrIGZvcgorCSAqICAgZmFpbHVyZS4KKwkgKi8KKworCWVtYXBfZnVsbF9hbGxvY19j dHhfdCBmdWxsX2FsbG9jX2N0eDsKKwlib29sIG1pc3NpbmcgPSBlbWFwX2Z1bGxfYWxsb2NfY3R4 X3RyeV9sb29rdXAodHNkbiwgJmFyZW5hX2VtYXBfZ2xvYmFsLAorCSAgICBwdHIsICZmdWxsX2Fs bG9jX2N0eCk7CisJaWYgKG1pc3NpbmcpIHsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKGZ1bGxf YWxsb2NfY3R4LmVkYXRhID09IE5VTEwpIHsKKwkJcmV0dXJuIDA7CisJfQorCWFzc2VydChlZGF0 YV9zdGF0ZV9nZXQoZnVsbF9hbGxvY19jdHguZWRhdGEpID09IGV4dGVudF9zdGF0ZV9hY3RpdmUp OworCS8qIE9ubHkgc2xhYiBtZW1iZXJzIHNob3VsZCBiZSBsb29rZWQgdXAgdmlhIGludGVyaW9y IHBvaW50ZXJzLiAqLworCWFzc2VydChlZGF0YV9hZGRyX2dldChmdWxsX2FsbG9jX2N0eC5lZGF0 YSkgPT0gcHRyCisJICAgIHx8IGVkYXRhX3NsYWJfZ2V0KGZ1bGxfYWxsb2NfY3R4LmVkYXRhKSk7 CisKKwlhc3NlcnQoZnVsbF9hbGxvY19jdHguc3ppbmQgIT0gU0NfTlNJWkVTKTsKKworCXJldHVy biBzel9pbmRleDJzaXplKGZ1bGxfYWxsb2NfY3R4LnN6aW5kKTsKK30KKworSkVNQUxMT0NfQUxX QVlTX0lOTElORSBib29sCitsYXJnZV9kYWxsb2Nfc2FmZXR5X2NoZWNrcyhlZGF0YV90ICplZGF0 YSwgdm9pZCAqcHRyLCBzemluZF90IHN6aW5kKSB7CisJaWYgKCFjb25maWdfb3B0X3NhZmV0eV9j aGVja3MpIHsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCS8qCisJICogRWFnZXJseSBkZXRlY3Qg ZG91YmxlIGZyZWUgYW5kIHNpemVkIGRlYWxsb2MgYnVncyBmb3IgbGFyZ2Ugc2l6ZXMuCisJICog VGhlIGNvc3QgaXMgbG93IGVub3VnaCAoYXMgZWRhdGEgd2lsbCBiZSBhY2Nlc3NlZCBhbnl3YXkp IHRvIGJlCisJICogZW5hYmxlZCBhbGwgdGhlIHRpbWUuCisJICovCisJaWYgKHVubGlrZWx5KGVk YXRhID09IE5VTEwgfHwKKwkgICAgZWRhdGFfc3RhdGVfZ2V0KGVkYXRhKSAhPSBleHRlbnRfc3Rh dGVfYWN0aXZlKSkgeworCQlzYWZldHlfY2hlY2tfZmFpbCgiSW52YWxpZCBkZWFsbG9jYXRpb24g ZGV0ZWN0ZWQ6ICIKKwkJICAgICJwYWdlcyBiZWluZyBmcmVlZCAoJXApIG5vdCBjdXJyZW50bHkg YWN0aXZlLCAiCisJCSAgICAicG9zc2libHkgY2F1c2VkIGJ5IGRvdWJsZSBmcmVlIGJ1Z3MuIiwK KwkJICAgICh1aW50cHRyX3QpZWRhdGFfYWRkcl9nZXQoZWRhdGEpKTsKKwkJcmV0dXJuIHRydWU7 CisJfQorCXNpemVfdCBpbnB1dF9zaXplID0gc3pfaW5kZXgyc2l6ZShzemluZCk7CisJaWYgKHVu bGlrZWx5KGlucHV0X3NpemUgIT0gZWRhdGFfdXNpemVfZ2V0KGVkYXRhKSkpIHsKKwkJc2FmZXR5 X2NoZWNrX2ZhaWxfc2l6ZWRfZGVhbGxvYygvKiBjdXJyZW50X2RlYWxsb2MgKi8gdHJ1ZSwgcHRy LAorCQkgICAgLyogdHJ1ZV9zaXplICovIGVkYXRhX3VzaXplX2dldChlZGF0YSksIGlucHV0X3Np emUpOworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBp bmxpbmUgdm9pZAorYXJlbmFfZGFsbG9jX2xhcmdlX25vX3RjYWNoZSh0c2RuX3QgKnRzZG4sIHZv aWQgKnB0ciwgc3ppbmRfdCBzemluZCkgeworCWlmIChjb25maWdfcHJvZiAmJiB1bmxpa2VseShz emluZCA8IFNDX05CSU5TKSkgeworCQlhcmVuYV9kYWxsb2NfcHJvbW90ZWQodHNkbiwgcHRyLCBO VUxMLCB0cnVlKTsKKwl9IGVsc2UgeworCQllZGF0YV90ICplZGF0YSA9IGVtYXBfZWRhdGFfbG9v a3VwKHRzZG4sICZhcmVuYV9lbWFwX2dsb2JhbCwKKwkJICAgIHB0cik7CisJCWlmIChsYXJnZV9k YWxsb2Nfc2FmZXR5X2NoZWNrcyhlZGF0YSwgcHRyLCBzemluZCkpIHsKKwkJCS8qIFNlZSB0aGUg Y29tbWVudCBpbiBpc2ZyZWUuICovCisJCQlyZXR1cm47CisJCX0KKwkJbGFyZ2VfZGFsbG9jKHRz ZG4sIGVkYXRhKTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorYXJlbmFfZGFsbG9jX25v X3RjYWNoZSh0c2RuX3QgKnRzZG4sIHZvaWQgKnB0cikgeworCWFzc2VydChwdHIgIT0gTlVMTCk7 CisKKwllbWFwX2FsbG9jX2N0eF90IGFsbG9jX2N0eDsKKwllbWFwX2FsbG9jX2N0eF9sb29rdXAo dHNkbiwgJmFyZW5hX2VtYXBfZ2xvYmFsLCBwdHIsICZhbGxvY19jdHgpOworCisJaWYgKGNvbmZp Z19kZWJ1ZykgeworCQllZGF0YV90ICplZGF0YSA9IGVtYXBfZWRhdGFfbG9va3VwKHRzZG4sICZh cmVuYV9lbWFwX2dsb2JhbCwKKwkJICAgIHB0cik7CisJCWFzc2VydChhbGxvY19jdHguc3ppbmQg PT0gZWRhdGFfc3ppbmRfZ2V0KGVkYXRhKSk7CisJCWFzc2VydChhbGxvY19jdHguc3ppbmQgPCBT Q19OU0laRVMpOworCQlhc3NlcnQoYWxsb2NfY3R4LnNsYWIgPT0gZWRhdGFfc2xhYl9nZXQoZWRh dGEpKTsKKwl9CisKKwlpZiAobGlrZWx5KGFsbG9jX2N0eC5zbGFiKSkgeworCQkvKiBTbWFsbCBh bGxvY2F0aW9uLiAqLworCQlhcmVuYV9kYWxsb2Nfc21hbGwodHNkbiwgcHRyKTsKKwl9IGVsc2Ug eworCQlhcmVuYV9kYWxsb2NfbGFyZ2Vfbm9fdGNhY2hlKHRzZG4sIHB0ciwgYWxsb2NfY3R4LnN6 aW5kKTsKKwl9Cit9CisKK0pFTUFMTE9DX0FMV0FZU19JTkxJTkUgdm9pZAorYXJlbmFfZGFsbG9j X2xhcmdlKHRzZG5fdCAqdHNkbiwgdm9pZCAqcHRyLCB0Y2FjaGVfdCAqdGNhY2hlLCBzemluZF90 IHN6aW5kLAorICAgIGJvb2wgc2xvd19wYXRoKSB7CisJaWYgKHN6aW5kIDwgbmhiaW5zKSB7CisJ CWlmIChjb25maWdfcHJvZiAmJiB1bmxpa2VseShzemluZCA8IFNDX05CSU5TKSkgeworCQkJYXJl bmFfZGFsbG9jX3Byb21vdGVkKHRzZG4sIHB0ciwgdGNhY2hlLCBzbG93X3BhdGgpOworCQl9IGVs c2UgeworCQkJdGNhY2hlX2RhbGxvY19sYXJnZSh0c2RuX3RzZCh0c2RuKSwgdGNhY2hlLCBwdHIs IHN6aW5kLAorCQkJICAgIHNsb3dfcGF0aCk7CisJCX0KKwl9IGVsc2UgeworCQllZGF0YV90ICpl ZGF0YSA9IGVtYXBfZWRhdGFfbG9va3VwKHRzZG4sICZhcmVuYV9lbWFwX2dsb2JhbCwKKwkJICAg IHB0cik7CisJCWlmIChsYXJnZV9kYWxsb2Nfc2FmZXR5X2NoZWNrcyhlZGF0YSwgcHRyLCBzemlu ZCkpIHsKKwkJCS8qIFNlZSB0aGUgY29tbWVudCBpbiBpc2ZyZWUuICovCisJCQlyZXR1cm47CisJ CX0KKwkJbGFyZ2VfZGFsbG9jKHRzZG4sIGVkYXRhKTsKKwl9Cit9CisKK0pFTUFMTE9DX0FMV0FZ U19JTkxJTkUgdm9pZAorYXJlbmFfZGFsbG9jKHRzZG5fdCAqdHNkbiwgdm9pZCAqcHRyLCB0Y2Fj aGVfdCAqdGNhY2hlLAorICAgIGVtYXBfYWxsb2NfY3R4X3QgKmNhbGxlcl9hbGxvY19jdHgsIGJv b2wgc2xvd19wYXRoKSB7CisJYXNzZXJ0KCF0c2RuX251bGwodHNkbikgfHwgdGNhY2hlID09IE5V TEwpOworCWFzc2VydChwdHIgIT0gTlVMTCk7CisKKwlpZiAodW5saWtlbHkodGNhY2hlID09IE5V TEwpKSB7CisJCWFyZW5hX2RhbGxvY19ub190Y2FjaGUodHNkbiwgcHRyKTsKKwkJcmV0dXJuOwor CX0KKworCWVtYXBfYWxsb2NfY3R4X3QgYWxsb2NfY3R4OworCWlmIChjYWxsZXJfYWxsb2NfY3R4 ICE9IE5VTEwpIHsKKwkJYWxsb2NfY3R4ID0gKmNhbGxlcl9hbGxvY19jdHg7CisJfSBlbHNlIHsK KwkJdXRpbF9hc3N1bWUoIXRzZG5fbnVsbCh0c2RuKSk7CisJCWVtYXBfYWxsb2NfY3R4X2xvb2t1 cCh0c2RuLCAmYXJlbmFfZW1hcF9nbG9iYWwsIHB0ciwKKwkJICAgICZhbGxvY19jdHgpOworCX0K KworCWlmIChjb25maWdfZGVidWcpIHsKKwkJZWRhdGFfdCAqZWRhdGEgPSBlbWFwX2VkYXRhX2xv b2t1cCh0c2RuLCAmYXJlbmFfZW1hcF9nbG9iYWwsCisJCSAgICBwdHIpOworCQlhc3NlcnQoYWxs b2NfY3R4LnN6aW5kID09IGVkYXRhX3N6aW5kX2dldChlZGF0YSkpOworCQlhc3NlcnQoYWxsb2Nf Y3R4LnN6aW5kIDwgU0NfTlNJWkVTKTsKKwkJYXNzZXJ0KGFsbG9jX2N0eC5zbGFiID09IGVkYXRh X3NsYWJfZ2V0KGVkYXRhKSk7CisJfQorCisJaWYgKGxpa2VseShhbGxvY19jdHguc2xhYikpIHsK KwkJLyogU21hbGwgYWxsb2NhdGlvbi4gKi8KKwkJdGNhY2hlX2RhbGxvY19zbWFsbCh0c2RuX3Rz ZCh0c2RuKSwgdGNhY2hlLCBwdHIsCisJCSAgICBhbGxvY19jdHguc3ppbmQsIHNsb3dfcGF0aCk7 CisJfSBlbHNlIHsKKwkJYXJlbmFfZGFsbG9jX2xhcmdlKHRzZG4sIHB0ciwgdGNhY2hlLCBhbGxv Y19jdHguc3ppbmQsCisJCSAgICBzbG93X3BhdGgpOworCX0KK30KKworc3RhdGljIGlubGluZSB2 b2lkCithcmVuYV9zZGFsbG9jX25vX3RjYWNoZSh0c2RuX3QgKnRzZG4sIHZvaWQgKnB0ciwgc2l6 ZV90IHNpemUpIHsKKwlhc3NlcnQocHRyICE9IE5VTEwpOworCWFzc2VydChzaXplIDw9IFNDX0xB UkdFX01BWENMQVNTKTsKKworCWVtYXBfYWxsb2NfY3R4X3QgYWxsb2NfY3R4OworCWlmICghY29u ZmlnX3Byb2YgfHwgIW9wdF9wcm9mKSB7CisJCS8qCisJCSAqIFRoZXJlIGlzIG5vIHJpc2sgb2Yg YmVpbmcgY29uZnVzZWQgYnkgYSBwcm9tb3RlZCBzYW1wbGVkCisJCSAqIG9iamVjdCwgc28gYmFz ZSBzemluZCBhbmQgc2xhYiBvbiB0aGUgZ2l2ZW4gc2l6ZS4KKwkJICovCisJCWFsbG9jX2N0eC5z emluZCA9IHN6X3NpemUyaW5kZXgoc2l6ZSk7CisJCWFsbG9jX2N0eC5zbGFiID0gKGFsbG9jX2N0 eC5zemluZCA8IFNDX05CSU5TKTsKKwl9CisKKwlpZiAoKGNvbmZpZ19wcm9mICYmIG9wdF9wcm9m KSB8fCBjb25maWdfZGVidWcpIHsKKwkJZW1hcF9hbGxvY19jdHhfbG9va3VwKHRzZG4sICZhcmVu YV9lbWFwX2dsb2JhbCwgcHRyLAorCQkgICAgJmFsbG9jX2N0eCk7CisKKwkJYXNzZXJ0KGFsbG9j X2N0eC5zemluZCA9PSBzel9zaXplMmluZGV4KHNpemUpKTsKKwkJYXNzZXJ0KChjb25maWdfcHJv ZiAmJiBvcHRfcHJvZikKKwkJICAgIHx8IGFsbG9jX2N0eC5zbGFiID09IChhbGxvY19jdHguc3pp bmQgPCBTQ19OQklOUykpOworCisJCWlmIChjb25maWdfZGVidWcpIHsKKwkJCWVkYXRhX3QgKmVk YXRhID0gZW1hcF9lZGF0YV9sb29rdXAodHNkbiwKKwkJCSAgICAmYXJlbmFfZW1hcF9nbG9iYWws IHB0cik7CisJCQlhc3NlcnQoYWxsb2NfY3R4LnN6aW5kID09IGVkYXRhX3N6aW5kX2dldChlZGF0 YSkpOworCQkJYXNzZXJ0KGFsbG9jX2N0eC5zbGFiID09IGVkYXRhX3NsYWJfZ2V0KGVkYXRhKSk7 CisJCX0KKwl9CisKKwlpZiAobGlrZWx5KGFsbG9jX2N0eC5zbGFiKSkgeworCQkvKiBTbWFsbCBh bGxvY2F0aW9uLiAqLworCQlhcmVuYV9kYWxsb2Nfc21hbGwodHNkbiwgcHRyKTsKKwl9IGVsc2Ug eworCQlhcmVuYV9kYWxsb2NfbGFyZ2Vfbm9fdGNhY2hlKHRzZG4sIHB0ciwgYWxsb2NfY3R4LnN6 aW5kKTsKKwl9Cit9CisKK0pFTUFMTE9DX0FMV0FZU19JTkxJTkUgdm9pZAorYXJlbmFfc2RhbGxv Yyh0c2RuX3QgKnRzZG4sIHZvaWQgKnB0ciwgc2l6ZV90IHNpemUsIHRjYWNoZV90ICp0Y2FjaGUs CisgICAgZW1hcF9hbGxvY19jdHhfdCAqY2FsbGVyX2FsbG9jX2N0eCwgYm9vbCBzbG93X3BhdGgp IHsKKwlhc3NlcnQoIXRzZG5fbnVsbCh0c2RuKSB8fCB0Y2FjaGUgPT0gTlVMTCk7CisJYXNzZXJ0 KHB0ciAhPSBOVUxMKTsKKwlhc3NlcnQoc2l6ZSA8PSBTQ19MQVJHRV9NQVhDTEFTUyk7CisKKwlp ZiAodW5saWtlbHkodGNhY2hlID09IE5VTEwpKSB7CisJCWFyZW5hX3NkYWxsb2Nfbm9fdGNhY2hl KHRzZG4sIHB0ciwgc2l6ZSk7CisJCXJldHVybjsKKwl9CisKKwllbWFwX2FsbG9jX2N0eF90IGFs bG9jX2N0eDsKKwlpZiAoY29uZmlnX3Byb2YgJiYgb3B0X3Byb2YpIHsKKwkJaWYgKGNhbGxlcl9h bGxvY19jdHggPT0gTlVMTCkgeworCQkJLyogVW5jb21tb24gY2FzZSBhbmQgc2hvdWxkIGJlIGEg c3RhdGljIGNoZWNrLiAqLworCQkJZW1hcF9hbGxvY19jdHhfbG9va3VwKHRzZG4sICZhcmVuYV9l bWFwX2dsb2JhbCwgcHRyLAorCQkJICAgICZhbGxvY19jdHgpOworCQkJYXNzZXJ0KGFsbG9jX2N0 eC5zemluZCA9PSBzel9zaXplMmluZGV4KHNpemUpKTsKKwkJfSBlbHNlIHsKKwkJCWFsbG9jX2N0 eCA9ICpjYWxsZXJfYWxsb2NfY3R4OworCQl9CisJfSBlbHNlIHsKKwkJLyoKKwkJICogVGhlcmUg aXMgbm8gcmlzayBvZiBiZWluZyBjb25mdXNlZCBieSBhIHByb21vdGVkIHNhbXBsZWQKKwkJICog b2JqZWN0LCBzbyBiYXNlIHN6aW5kIGFuZCBzbGFiIG9uIHRoZSBnaXZlbiBzaXplLgorCQkgKi8K KwkJYWxsb2NfY3R4LnN6aW5kID0gc3pfc2l6ZTJpbmRleChzaXplKTsKKwkJYWxsb2NfY3R4LnNs YWIgPSAoYWxsb2NfY3R4LnN6aW5kIDwgU0NfTkJJTlMpOworCX0KKworCWlmIChjb25maWdfZGVi dWcpIHsKKwkJZWRhdGFfdCAqZWRhdGEgPSBlbWFwX2VkYXRhX2xvb2t1cCh0c2RuLCAmYXJlbmFf ZW1hcF9nbG9iYWwsCisJCSAgICBwdHIpOworCQlhc3NlcnQoYWxsb2NfY3R4LnN6aW5kID09IGVk YXRhX3N6aW5kX2dldChlZGF0YSkpOworCQlhc3NlcnQoYWxsb2NfY3R4LnNsYWIgPT0gZWRhdGFf c2xhYl9nZXQoZWRhdGEpKTsKKwl9CisKKwlpZiAobGlrZWx5KGFsbG9jX2N0eC5zbGFiKSkgewor CQkvKiBTbWFsbCBhbGxvY2F0aW9uLiAqLworCQl0Y2FjaGVfZGFsbG9jX3NtYWxsKHRzZG5fdHNk KHRzZG4pLCB0Y2FjaGUsIHB0ciwKKwkJICAgIGFsbG9jX2N0eC5zemluZCwgc2xvd19wYXRoKTsK Kwl9IGVsc2UgeworCQlhcmVuYV9kYWxsb2NfbGFyZ2UodHNkbiwgcHRyLCB0Y2FjaGUsIGFsbG9j X2N0eC5zemluZCwKKwkJICAgIHNsb3dfcGF0aCk7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZv aWQKK2FyZW5hX2NhY2hlX29ibGl2aW91c19yYW5kb21pemUodHNkbl90ICp0c2RuLCBhcmVuYV90 ICphcmVuYSwgZWRhdGFfdCAqZWRhdGEsCisgICAgc2l6ZV90IGFsaWdubWVudCkgeworCWFzc2Vy dChlZGF0YV9iYXNlX2dldChlZGF0YSkgPT0gZWRhdGFfYWRkcl9nZXQoZWRhdGEpKTsKKworCWlm IChhbGlnbm1lbnQgPCBQQUdFKSB7CisJCXVuc2lnbmVkIGxnX3JhbmdlID0gTEdfUEFHRSAtCisJ CSAgICBsZ19mbG9vcihDQUNIRUxJTkVfQ0VJTElORyhhbGlnbm1lbnQpKTsKKwkJc2l6ZV90IHI7 CisJCWlmICghdHNkbl9udWxsKHRzZG4pKSB7CisJCQl0c2RfdCAqdHNkID0gdHNkbl90c2QodHNk bik7CisJCQlyID0gKHNpemVfdClwcm5nX2xnX3JhbmdlX3U2NCgKKwkJCSAgICB0c2RfcHJuZ19z dGF0ZXBfZ2V0KHRzZCksIGxnX3JhbmdlKTsKKwkJfSBlbHNlIHsKKwkJCXVpbnQ2NF90IHN0YWNr X3ZhbHVlID0gKHVpbnQ2NF90KSh1aW50cHRyX3QpJnI7CisJCQlyID0gKHNpemVfdClwcm5nX2xn X3JhbmdlX3U2NCgmc3RhY2tfdmFsdWUsIGxnX3JhbmdlKTsKKwkJfQorCQl1aW50cHRyX3QgcmFu ZG9tX29mZnNldCA9ICgodWludHB0cl90KXIpIDw8IChMR19QQUdFIC0KKwkJICAgIGxnX3Jhbmdl KTsKKwkJZWRhdGEtPmVfYWRkciA9ICh2b2lkICopKCh1aW50cHRyX3QpZWRhdGEtPmVfYWRkciAr CisJCSAgICByYW5kb21fb2Zmc2V0KTsKKwkJYXNzZXJ0KEFMSUdOTUVOVF9BRERSMkJBU0UoZWRh dGEtPmVfYWRkciwgYWxpZ25tZW50KSA9PQorCQkgICAgZWRhdGEtPmVfYWRkcik7CisJfQorfQor CisvKgorICogVGhlIGRhbGxvYyBiaW4gaW5mbyBjb250YWlucyBqdXN0IHRoZSBpbmZvcm1hdGlv biB0aGF0IHRoZSBjb21tb24gcGF0aHMgbmVlZAorICogZHVyaW5nIHRjYWNoZSBmbHVzaGVzLiAg QnkgZm9yY2UtaW5saW5pbmcgdGhlc2UgcGF0aHMsIGFuZCB1c2luZyBsb2NhbCBjb3BpZXMKKyAq IG9mIGRhdGEgKHNvIHRoYXQgdGhlIGNvbXBpbGVyIGtub3dzIGl0J3MgY29uc3RhbnQpLCB3ZSBh dm9pZCBhIHdob2xlIGJ1bmNoIG9mCisgKiByZWR1bmRhbnQgbG9hZHMgYW5kIHN0b3JlcyBieSBs ZWF2aW5nIHRoaXMgaW5mb3JtYXRpb24gaW4gcmVnaXN0ZXJzLgorICovCit0eXBlZGVmIHN0cnVj dCBhcmVuYV9kYWxsb2NfYmluX2xvY2tlZF9pbmZvX3MgYXJlbmFfZGFsbG9jX2Jpbl9sb2NrZWRf aW5mb190Oworc3RydWN0IGFyZW5hX2RhbGxvY19iaW5fbG9ja2VkX2luZm9fcyB7CisJZGl2X2lu Zm9fdCBkaXZfaW5mbzsKKwl1aW50MzJfdCBucmVnczsKKwl1aW50NjRfdCBuZGFsbG9jOworfTsK KworSkVNQUxMT0NfQUxXQVlTX0lOTElORSBzaXplX3QKK2FyZW5hX3NsYWJfcmVnaW5kKGFyZW5h X2RhbGxvY19iaW5fbG9ja2VkX2luZm9fdCAqaW5mbywgc3ppbmRfdCBiaW5pbmQsCisgICAgZWRh dGFfdCAqc2xhYiwgY29uc3Qgdm9pZCAqcHRyKSB7CisJc2l6ZV90IGRpZmYsIHJlZ2luZDsKKwor CS8qIEZyZWVpbmcgYSBwb2ludGVyIG91dHNpZGUgdGhlIHNsYWIgY2FuIGNhdXNlIGFzc2VydGlv biBmYWlsdXJlLiAqLworCWFzc2VydCgodWludHB0cl90KXB0ciA+PSAodWludHB0cl90KWVkYXRh X2FkZHJfZ2V0KHNsYWIpKTsKKwlhc3NlcnQoKHVpbnRwdHJfdClwdHIgPCAodWludHB0cl90KWVk YXRhX3Bhc3RfZ2V0KHNsYWIpKTsKKwkvKiBGcmVlaW5nIGFuIGludGVyaW9yIHBvaW50ZXIgY2Fu IGNhdXNlIGFzc2VydGlvbiBmYWlsdXJlLiAqLworCWFzc2VydCgoKHVpbnRwdHJfdClwdHIgLSAo dWludHB0cl90KWVkYXRhX2FkZHJfZ2V0KHNsYWIpKSAlCisJICAgICh1aW50cHRyX3QpYmluX2lu Zm9zW2JpbmluZF0ucmVnX3NpemUgPT0gMCk7CisKKwlkaWZmID0gKHNpemVfdCkoKHVpbnRwdHJf dClwdHIgLSAodWludHB0cl90KWVkYXRhX2FkZHJfZ2V0KHNsYWIpKTsKKworCS8qIEF2b2lkIGRv aW5nIGRpdmlzaW9uIHdpdGggYSB2YXJpYWJsZSBkaXZpc29yLiAqLworCXJlZ2luZCA9IGRpdl9j b21wdXRlKCZpbmZvLT5kaXZfaW5mbywgZGlmZik7CisKKwlhc3NlcnQocmVnaW5kIDwgYmluX2lu Zm9zW2JpbmluZF0ubnJlZ3MpOworCisJcmV0dXJuIHJlZ2luZDsKK30KKworSkVNQUxMT0NfQUxX QVlTX0lOTElORSB2b2lkCithcmVuYV9kYWxsb2NfYmluX2xvY2tlZF9iZWdpbihhcmVuYV9kYWxs b2NfYmluX2xvY2tlZF9pbmZvX3QgKmluZm8sCisgICAgc3ppbmRfdCBiaW5pbmQpIHsKKwlpbmZv LT5kaXZfaW5mbyA9IGFyZW5hX2JpbmluZF9kaXZfaW5mb1tiaW5pbmRdOworCWluZm8tPm5yZWdz ID0gYmluX2luZm9zW2JpbmluZF0ubnJlZ3M7CisJaW5mby0+bmRhbGxvYyA9IDA7Cit9CisKKy8q CisgKiBEb2VzIHRoZSBkZWFsbG9jYXRpb24gd29yayBhc3NvY2lhdGVkIHdpdGggZnJlZWluZyBh IHNpbmdsZSBwb2ludGVyIChhCisgKiAic3RlcCIpIGluIGJldHdlZW4gYSBhcmVuYV9kYWxsb2Nf YmluX2xvY2tlZCBiZWdpbiBhbmQgZW5kIGNhbGwuCisgKgorICogUmV0dXJucyB0cnVlIGlmIGFy ZW5hX3NsYWJfZGFsbG9jIG11c3QgYmUgY2FsbGVkIG9uIHNsYWIuICBEb2Vzbid0IGRvCisgKiBz dGF0cyB1cGRhdGVzLCB3aGljaCBoYXBwZW4gZHVyaW5nIGZpbmlzaCAodGhpcyBsZXRzIHJ1bm5p bmcgY291bnRzIGdldCBsZWZ0CisgKiBpbiBhIHJlZ2lzdGVyKS4KKyAqLworSkVNQUxMT0NfQUxX QVlTX0lOTElORSBib29sCithcmVuYV9kYWxsb2NfYmluX2xvY2tlZF9zdGVwKHRzZG5fdCAqdHNk biwgYXJlbmFfdCAqYXJlbmEsIGJpbl90ICpiaW4sCisgICAgYXJlbmFfZGFsbG9jX2Jpbl9sb2Nr ZWRfaW5mb190ICppbmZvLCBzemluZF90IGJpbmluZCwgZWRhdGFfdCAqc2xhYiwKKyAgICB2b2lk ICpwdHIpIHsKKwljb25zdCBiaW5faW5mb190ICpiaW5faW5mbyA9ICZiaW5faW5mb3NbYmluaW5k XTsKKwlzaXplX3QgcmVnaW5kID0gYXJlbmFfc2xhYl9yZWdpbmQoaW5mbywgYmluaW5kLCBzbGFi LCBwdHIpOworCXNsYWJfZGF0YV90ICpzbGFiX2RhdGEgPSBlZGF0YV9zbGFiX2RhdGFfZ2V0KHNs YWIpOworCisJYXNzZXJ0KGVkYXRhX25mcmVlX2dldChzbGFiKSA8IGJpbl9pbmZvLT5ucmVncyk7 CisJLyogRnJlZWluZyBhbiB1bmFsbG9jYXRlZCBwb2ludGVyIGNhbiBjYXVzZSBhc3NlcnRpb24g ZmFpbHVyZS4gKi8KKwlhc3NlcnQoYml0bWFwX2dldChzbGFiX2RhdGEtPmJpdG1hcCwgJmJpbl9p bmZvLT5iaXRtYXBfaW5mbywgcmVnaW5kKSk7CisKKwliaXRtYXBfdW5zZXQoc2xhYl9kYXRhLT5i aXRtYXAsICZiaW5faW5mby0+Yml0bWFwX2luZm8sIHJlZ2luZCk7CisJZWRhdGFfbmZyZWVfaW5j KHNsYWIpOworCisJaWYgKGNvbmZpZ19zdGF0cykgeworCQlpbmZvLT5uZGFsbG9jKys7CisJfQor CisJdW5zaWduZWQgbmZyZWUgPSBlZGF0YV9uZnJlZV9nZXQoc2xhYik7CisJaWYgKG5mcmVlID09 IGJpbl9pbmZvLT5ucmVncykgeworCQlhcmVuYV9kYWxsb2NfYmluX2xvY2tlZF9oYW5kbGVfbmV3 bHlfZW1wdHkodHNkbiwgYXJlbmEsIHNsYWIsCisJCSAgICBiaW4pOworCQlyZXR1cm4gdHJ1ZTsK Kwl9IGVsc2UgaWYgKG5mcmVlID09IDEgJiYgc2xhYiAhPSBiaW4tPnNsYWJjdXIpIHsKKwkJYXJl bmFfZGFsbG9jX2Jpbl9sb2NrZWRfaGFuZGxlX25ld2x5X25vbmVtcHR5KHRzZG4sIGFyZW5hLCBz bGFiLAorCQkgICAgYmluKTsKKwl9CisJcmV0dXJuIGZhbHNlOworfQorCitKRU1BTExPQ19BTFdB WVNfSU5MSU5FIHZvaWQKK2FyZW5hX2RhbGxvY19iaW5fbG9ja2VkX2ZpbmlzaCh0c2RuX3QgKnRz ZG4sIGFyZW5hX3QgKmFyZW5hLCBiaW5fdCAqYmluLAorICAgIGFyZW5hX2RhbGxvY19iaW5fbG9j a2VkX2luZm9fdCAqaW5mbykgeworCWlmIChjb25maWdfc3RhdHMpIHsKKwkJYmluLT5zdGF0cy5u ZGFsbG9jICs9IGluZm8tPm5kYWxsb2M7CisJCWFzc2VydChiaW4tPnN0YXRzLmN1cnJlZ3MgPj0g KHNpemVfdClpbmZvLT5uZGFsbG9jKTsKKwkJYmluLT5zdGF0cy5jdXJyZWdzIC09IChzaXplX3Qp aW5mby0+bmRhbGxvYzsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgYmluX3QgKgorYXJlbmFfZ2V0 X2JpbihhcmVuYV90ICphcmVuYSwgc3ppbmRfdCBiaW5pbmQsIHVuc2lnbmVkIGJpbnNoYXJkKSB7 CisJYmluX3QgKnNoYXJkMCA9IChiaW5fdCAqKSgodWludHB0cl90KWFyZW5hICsgYXJlbmFfYmlu X29mZnNldHNbYmluaW5kXSk7CisJcmV0dXJuIHNoYXJkMCArIGJpbnNoYXJkOworfQorCisjZW5k aWYgLyogSkVNQUxMT0NfSU5URVJOQUxfQVJFTkFfSU5MSU5FU19CX0ggKi8KCmRpZmYgLS1naXQg YS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9j L2ludGVybmFsL2FyZW5hX3N0YXRzLmggYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxv Yy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL2FyZW5hX3N0YXRzLmgKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTVmMWQzNAotLS0gL2Rldi9udWxsCisrKyBiLzM4 OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50 ZXJuYWwvYXJlbmFfc3RhdHMuaApAQCAtMCwwICsxLDExNCBAQAorI2lmbmRlZiBKRU1BTExPQ19J TlRFUk5BTF9BUkVOQV9TVEFUU19ICisjZGVmaW5lIEpFTUFMTE9DX0lOVEVSTkFMX0FSRU5BX1NU QVRTX0gKKworI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2F0b21pYy5oIgorI2luY2x1ZGUg ImplbWFsbG9jL2ludGVybmFsL2xvY2tlZGludC5oIgorI2luY2x1ZGUgImplbWFsbG9jL2ludGVy bmFsL211dGV4LmgiCisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvbXV0ZXhfcHJvZi5oIgor I2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL3BhLmgiCisjaW5jbHVkZSAiamVtYWxsb2MvaW50 ZXJuYWwvc2MuaCIKKworSkVNQUxMT0NfRElBR05PU1RJQ19ESVNBQkxFX1NQVVJJT1VTCisKK3R5 cGVkZWYgc3RydWN0IGFyZW5hX3N0YXRzX2xhcmdlX3MgYXJlbmFfc3RhdHNfbGFyZ2VfdDsKK3N0 cnVjdCBhcmVuYV9zdGF0c19sYXJnZV9zIHsKKwkvKgorCSAqIFRvdGFsIG51bWJlciBvZiBhbGxv Y2F0aW9uL2RlYWxsb2NhdGlvbiByZXF1ZXN0cyBzZXJ2ZWQgZGlyZWN0bHkgYnkKKwkgKiB0aGUg YXJlbmEuCisJICovCisJbG9ja2VkX3U2NF90CW5tYWxsb2M7CisJbG9ja2VkX3U2NF90CW5kYWxs b2M7CisKKwkvKgorCSAqIE51bWJlciBvZiBhbGxvY2F0aW9uIHJlcXVlc3RzIHRoYXQgY29ycmVz cG9uZCB0byB0aGlzIHNpemUgY2xhc3MuCisJICogVGhpcyBpbmNsdWRlcyByZXF1ZXN0cyBzZXJ2 ZWQgYnkgdGNhY2hlLCB0aG91Z2ggdGNhY2hlIG9ubHkKKwkgKiBwZXJpb2RpY2FsbHkgbWVyZ2Vz IGludG8gdGhpcyBjb3VudGVyLgorCSAqLworCWxvY2tlZF91NjRfdAlucmVxdWVzdHM7IC8qIFBh cnRpYWxseSBkZXJpdmVkLiAqLworCS8qCisJICogTnVtYmVyIG9mIHRjYWNoZSBmaWxscyAvIGZs dXNoZXMgZm9yIGxhcmdlIChzaW1pbGFybHksIHBlcmlvZGljYWxseQorCSAqIG1lcmdlZCkuICBO b3RlIHRoYXQgdGhlcmUgaXMgbm8gbGFyZ2UgdGNhY2hlIGJhdGNoLWZpbGwgY3VycmVudGx5CisJ ICogKGkuZS4gb25seSBmaWxsIDEgYXQgYSB0aW1lKTsgaG93ZXZlciBmbHVzaCBtYXkgYmUgYmF0 Y2hlZC4KKwkgKi8KKwlsb2NrZWRfdTY0X3QJbmZpbGxzOyAvKiBQYXJ0aWFsbHkgZGVyaXZlZC4g Ki8KKwlsb2NrZWRfdTY0X3QJbmZsdXNoZXM7IC8qIFBhcnRpYWxseSBkZXJpdmVkLiAqLworCisJ LyogQ3VycmVudCBudW1iZXIgb2YgYWxsb2NhdGlvbnMgb2YgdGhpcyBzaXplIGNsYXNzLiAqLwor CXNpemVfdAkJY3VybGV4dGVudHM7IC8qIERlcml2ZWQuICovCit9OworCisvKgorICogQXJlbmEg c3RhdHMuICBOb3RlIHRoYXQgZmllbGRzIG1hcmtlZCAiZGVyaXZlZCIgYXJlIG5vdCBkaXJlY3Rs eSBtYWludGFpbmVkCisgKiB3aXRoaW4gdGhlIGFyZW5hIGNvZGU7IHJhdGhlciB0aGVpciB2YWx1 ZXMgYXJlIGRlcml2ZWQgZHVyaW5nIHN0YXRzIG1lcmdlCisgKiByZXF1ZXN0cy4KKyAqLwordHlw ZWRlZiBzdHJ1Y3QgYXJlbmFfc3RhdHNfcyBhcmVuYV9zdGF0c190Oworc3RydWN0IGFyZW5hX3N0 YXRzX3MgeworCUxPQ0tFRElOVF9NVFhfREVDTEFSRShtdHgpCisKKwkvKgorCSAqIHJlc2lkZW50 IGluY2x1ZGVzIHRoZSBiYXNlIHN0YXRzIC0tIHRoYXQncyB3aHkgaXQgbGl2ZXMgaGVyZSBhbmQg bm90CisJICogaW4gcGFfc2hhcmRfc3RhdHNfdC4KKwkgKi8KKwlzaXplX3QJCQliYXNlOyAvKiBE ZXJpdmVkLiAqLworCXNpemVfdAkJCXJlc2lkZW50OyAvKiBEZXJpdmVkLiAqLworCXNpemVfdAkJ CW1ldGFkYXRhX3RocDsgLyogRGVyaXZlZC4gKi8KKwlzaXplX3QJCQltYXBwZWQ7IC8qIERlcml2 ZWQuICovCisKKwlhdG9taWNfenVfdAkJaW50ZXJuYWw7CisKKwlzaXplX3QJCQlhbGxvY2F0ZWRf bGFyZ2U7IC8qIERlcml2ZWQuICovCisJdWludDY0X3QJCW5tYWxsb2NfbGFyZ2U7IC8qIERlcml2 ZWQuICovCisJdWludDY0X3QJCW5kYWxsb2NfbGFyZ2U7IC8qIERlcml2ZWQuICovCisJdWludDY0 X3QJCW5maWxsc19sYXJnZTsgLyogRGVyaXZlZC4gKi8KKwl1aW50NjRfdAkJbmZsdXNoZXNfbGFy Z2U7IC8qIERlcml2ZWQuICovCisJdWludDY0X3QJCW5yZXF1ZXN0c19sYXJnZTsgLyogRGVyaXZl ZC4gKi8KKworCS8qCisJICogVGhlIHN0YXRzIGxvZ2ljYWxseSBvd25lZCBieSB0aGUgcGFfc2hh cmQgaW4gdGhlIHNhbWUgYXJlbmEuICBUaGlzCisJICogbGl2ZXMgaGVyZSBvbmx5IGJlY2F1c2Ug aXQncyBjb252ZW5pZW50IGZvciB0aGUgcHVycG9zZXMgb2YgdGhlIGN0bAorCSAqIG1vZHVsZSAt LSBpdCBvbmx5IGtub3dzIGFib3V0IHRoZSBzaW5nbGUgYXJlbmFfc3RhdHMuCisJICovCisJcGFf c2hhcmRfc3RhdHNfdAlwYV9zaGFyZF9zdGF0czsKKworCS8qIE51bWJlciBvZiBieXRlcyBjYWNo ZWQgaW4gdGNhY2hlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGFyZW5hLiAqLworCXNpemVfdAkJCXRj YWNoZV9ieXRlczsgLyogRGVyaXZlZC4gKi8KKwlzaXplX3QJCQl0Y2FjaGVfc3Rhc2hlZF9ieXRl czsgLyogRGVyaXZlZC4gKi8KKworCW11dGV4X3Byb2ZfZGF0YV90IG11dGV4X3Byb2ZfZGF0YVtt dXRleF9wcm9mX251bV9hcmVuYV9tdXRleGVzXTsKKworCS8qIE9uZSBlbGVtZW50IGZvciBlYWNo IGxhcmdlIHNpemUgY2xhc3MuICovCisJYXJlbmFfc3RhdHNfbGFyZ2VfdAlsc3RhdHNbU0NfTlNJ WkVTIC0gU0NfTkJJTlNdOworCisJLyogQXJlbmEgdXB0aW1lLiAqLworCW5zdGltZV90CQl1cHRp bWU7Cit9OworCitzdGF0aWMgaW5saW5lIGJvb2wKK2FyZW5hX3N0YXRzX2luaXQodHNkbl90ICp0 c2RuLCBhcmVuYV9zdGF0c190ICphcmVuYV9zdGF0cykgeworCWlmIChjb25maWdfZGVidWcpIHsK KwkJZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplb2YoYXJlbmFfc3RhdHNfdCk7IGkrKykgewor CQkJYXNzZXJ0KCgoY2hhciAqKWFyZW5hX3N0YXRzKVtpXSA9PSAwKTsKKwkJfQorCX0KKwlpZiAo TE9DS0VESU5UX01UWF9JTklUKGFyZW5hX3N0YXRzLT5tdHgsICJhcmVuYV9zdGF0cyIsCisJICAg IFdJVE5FU1NfUkFOS19BUkVOQV9TVEFUUywgbWFsbG9jX211dGV4X3JhbmtfZXhjbHVzaXZlKSkg eworCQlyZXR1cm4gdHJ1ZTsKKwl9CisJLyogTWVtb3J5IGlzIHplcm9lZCwgc28gdGhlcmUgaXMg bm8gbmVlZCB0byBjbGVhciBzdGF0cy4gKi8KKwlyZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBp bmxpbmUgdm9pZAorYXJlbmFfc3RhdHNfbGFyZ2VfZmx1c2hfbnJlcXVlc3RzX2FkZCh0c2RuX3Qg KnRzZG4sIGFyZW5hX3N0YXRzX3QgKmFyZW5hX3N0YXRzLAorICAgIHN6aW5kX3Qgc3ppbmQsIHVp bnQ2NF90IG5yZXF1ZXN0cykgeworCUxPQ0tFRElOVF9NVFhfTE9DSyh0c2RuLCBhcmVuYV9zdGF0 cy0+bXR4KTsKKwlhcmVuYV9zdGF0c19sYXJnZV90ICpsc3RhdHMgPSAmYXJlbmFfc3RhdHMtPmxz dGF0c1tzemluZCAtIFNDX05CSU5TXTsKKwlsb2NrZWRfaW5jX3U2NCh0c2RuLCBMT0NLRURJTlRf TVRYKGFyZW5hX3N0YXRzLT5tdHgpLAorCSAgICAmbHN0YXRzLT5ucmVxdWVzdHMsIG5yZXF1ZXN0 cyk7CisJbG9ja2VkX2luY191NjQodHNkbiwgTE9DS0VESU5UX01UWChhcmVuYV9zdGF0cy0+bXR4 KSwKKwkgICAgJmxzdGF0cy0+bmZsdXNoZXMsIDEpOworCUxPQ0tFRElOVF9NVFhfVU5MT0NLKHRz ZG4sIGFyZW5hX3N0YXRzLT5tdHgpOworfQorCisjZW5kaWYgLyogSkVNQUxMT0NfSU5URVJOQUxf QVJFTkFfU1RBVFNfSCAqLwoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2pl bWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvYXJlbmFfc3RydWN0cy5oIGIv Mzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9p bnRlcm5hbC9hcmVuYV9zdHJ1Y3RzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MC4uZTJhNWE0MAotLS0gL2Rldi9udWxsCisrKyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2pl bWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvYXJlbmFfc3RydWN0cy5oCkBA IC0wLDAgKzEsMTAxIEBACisjaWZuZGVmIEpFTUFMTE9DX0lOVEVSTkFMX0FSRU5BX1NUUlVDVFNf SAorI2RlZmluZSBKRU1BTExPQ19JTlRFUk5BTF9BUkVOQV9TVFJVQ1RTX0gKKworI2luY2x1ZGUg ImplbWFsbG9jL2ludGVybmFsL2FyZW5hX3N0YXRzLmgiCisjaW5jbHVkZSAiamVtYWxsb2MvaW50 ZXJuYWwvYXRvbWljLmgiCisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvYmluLmgiCisjaW5j bHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvYml0bWFwLmgiCisjaW5jbHVkZSAiamVtYWxsb2MvaW50 ZXJuYWwvY291bnRlci5oIgorI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2VjYWNoZS5oIgor I2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2VkYXRhX2NhY2hlLmgiCisjaW5jbHVkZSAiamVt YWxsb2MvaW50ZXJuYWwvZXh0ZW50X2Rzcy5oIgorI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFs L2plbWFsbG9jX2ludGVybmFsX3R5cGVzLmgiCisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwv bXV0ZXguaCIKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9uc3RpbWUuaCIKKyNpbmNsdWRl ICJqZW1hbGxvYy9pbnRlcm5hbC9wYS5oIgorI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL3Fs LmgiCisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvc2MuaCIKKyNpbmNsdWRlICJqZW1hbGxv Yy9pbnRlcm5hbC90aWNrZXIuaCIKKworc3RydWN0IGFyZW5hX3MgeworCS8qCisJICogTnVtYmVy IG9mIHRocmVhZHMgY3VycmVudGx5IGFzc2lnbmVkIHRvIHRoaXMgYXJlbmEuICBFYWNoIHRocmVh ZCBoYXMKKwkgKiB0d28gZGlzdGluY3QgYXNzaWdubWVudHMsIG9uZSBmb3IgYXBwbGljYXRpb24t c2VydmluZyBhbGxvY2F0aW9uLCBhbmQKKwkgKiB0aGUgb3RoZXIgZm9yIGludGVybmFsIG1ldGFk YXRhIGFsbG9jYXRpb24uICBJbnRlcm5hbCBtZXRhZGF0YSBtdXN0CisJICogbm90IGJlIGFsbG9j YXRlZCBmcm9tIGFyZW5hcyBleHBsaWNpdGx5IGNyZWF0ZWQgdmlhIHRoZSBhcmVuYXMuY3JlYXRl CisJICogbWFsbGN0bCwgYmVjYXVzZSB0aGUgYXJlbmEuPGk+LnJlc2V0IG1hbGxjdGwgaW5kaXNj cmltaW5hdGVseQorCSAqIGRpc2NhcmRzIGFsbCBhbGxvY2F0aW9ucyBmb3IgdGhlIGFmZmVjdGVk IGFyZW5hLgorCSAqCisJICogICAwOiBBcHBsaWNhdGlvbiBhbGxvY2F0aW9uLgorCSAqICAgMTog SW50ZXJuYWwgbWV0YWRhdGEgYWxsb2NhdGlvbi4KKwkgKgorCSAqIFN5bmNocm9uaXphdGlvbjog YXRvbWljLgorCSAqLworCWF0b21pY191X3QJCW50aHJlYWRzWzJdOworCisJLyogTmV4dCBiaW4g c2hhcmQgZm9yIGJpbmRpbmcgbmV3IHRocmVhZHMuIFN5bmNocm9uaXphdGlvbjogYXRvbWljLiAq LworCWF0b21pY191X3QJCWJpbnNoYXJkX25leHQ7CisKKwkvKgorCSAqIFdoZW4gcGVyY3B1X2Fy ZW5hIGlzIGVuYWJsZWQsIHRvIGFtb3J0aXplIHRoZSBjb3N0IG9mIHJlYWRpbmcgLworCSAqIHVw ZGF0aW5nIHRoZSBjdXJyZW50IENQVSBpZCwgdHJhY2sgdGhlIG1vc3QgcmVjZW50IHRocmVhZCBh Y2Nlc3NpbmcKKwkgKiB0aGlzIGFyZW5hLCBhbmQgb25seSByZWFkIENQVSBpZiB0aGVyZSBpcyBh IG1pc21hdGNoLgorCSAqLworCXRzZG5fdAkJKmxhc3RfdGhkOworCisJLyogU3luY2hyb25pemF0 aW9uOiBpbnRlcm5hbC4gKi8KKwlhcmVuYV9zdGF0c190CQlzdGF0czsKKworCS8qCisJICogTGlz dHMgb2YgdGNhY2hlcyBhbmQgY2FjaGVfYmluX2FycmF5X2Rlc2NyaXB0b3JzIGZvciBleHRhbnQg dGhyZWFkcworCSAqIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGFyZW5hLiAgU3RhdHMgZnJvbSB0aGVz ZSBhcmUgbWVyZ2VkCisJICogaW5jcmVtZW50YWxseSwgYW5kIGF0IGV4aXQgaWYgb3B0X3N0YXRz X3ByaW50IGlzIGVuYWJsZWQuCisJICoKKwkgKiBTeW5jaHJvbml6YXRpb246IHRjYWNoZV9xbF9t dHguCisJICovCisJcWxfaGVhZCh0Y2FjaGVfc2xvd190KQkJCXRjYWNoZV9xbDsKKwlxbF9oZWFk KGNhY2hlX2Jpbl9hcnJheV9kZXNjcmlwdG9yX3QpCWNhY2hlX2Jpbl9hcnJheV9kZXNjcmlwdG9y X3FsOworCW1hbGxvY19tdXRleF90CQkJCXRjYWNoZV9xbF9tdHg7CisKKwkvKgorCSAqIFJlcHJl c2VudHMgYSBkc3NfcHJlY190LCBidXQgYXRvbWljYWxseS4KKwkgKgorCSAqIFN5bmNocm9uaXph dGlvbjogYXRvbWljLgorCSAqLworCWF0b21pY191X3QJCWRzc19wcmVjOworCisJLyoKKwkgKiBF eHRhbnQgbGFyZ2UgYWxsb2NhdGlvbnMuCisJICoKKwkgKiBTeW5jaHJvbml6YXRpb246IGxhcmdl X210eC4KKwkgKi8KKwllZGF0YV9saXN0X2FjdGl2ZV90CWxhcmdlOworCS8qIFN5bmNocm9uaXpl cyBhbGwgbGFyZ2UgYWxsb2NhdGlvbi91cGRhdGUvZGVhbGxvY2F0aW9uLiAqLworCW1hbGxvY19t dXRleF90CQlsYXJnZV9tdHg7CisKKwkvKiBUaGUgcGFnZS1sZXZlbCBhbGxvY2F0b3Igc2hhcmQg dGhpcyBhcmVuYSB1c2VzLiAqLworCXBhX3NoYXJkX3QJCXBhX3NoYXJkOworCisJLyoKKwkgKiBB IGNhY2hlZCBjb3B5IG9mIGJhc2UtPmluZC4gIFRoaXMgY2FuIGdldCBhY2Nlc3NlZCBvbiBob3Qg cGF0aHM7CisJICogbG9va2luZyBpdCB1cCBpbiBiYXNlIHJlcXVpcmVzIGFuIGV4dHJhIHBvaW50 ZXIgaG9wIC8gY2FjaGUgbWlzcy4KKwkgKi8KKwl1bnNpZ25lZCBpbmQ7CisKKwkvKgorCSAqIEJh c2UgYWxsb2NhdG9yLCBmcm9tIHdoaWNoIGFyZW5hIG1ldGFkYXRhIGFyZSBhbGxvY2F0ZWQuCisJ ICoKKwkgKiBTeW5jaHJvbml6YXRpb246IGludGVybmFsLgorCSAqLworCWJhc2VfdAkJCSpiYXNl OworCS8qIFVzZWQgdG8gZGV0ZXJtaW5lIHVwdGltZS4gIFJlYWQtb25seSBhZnRlciBpbml0aWFs aXphdGlvbi4gKi8KKwluc3RpbWVfdAkJY3JlYXRlX3RpbWU7CisKKwkvKgorCSAqIFRoZSBhcmVu YSBpcyBhbGxvY2F0ZWQgYWxvbmdzaWRlIGl0cyBiaW5zOyByZWFsbHkgdGhpcyBpcyBhCisJICog ZHluYW1pY2FsbHkgc2l6ZWQgYXJyYXkgZGV0ZXJtaW5lZCBieSB0aGUgYmluc2hhcmQgc2V0dGlu Z3MuCisJICovCisJYmluX3QJCQliaW5zWzBdOworfTsKKworI2VuZGlmIC8qIEpFTUFMTE9DX0lO VEVSTkFMX0FSRU5BX1NUUlVDVFNfSCAqLwoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4w LWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvYXJlbmFfdHlw ZXMuaCBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVt YWxsb2MvaW50ZXJuYWwvYXJlbmFfdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwLi5kMGUxMjkxCi0tLSAvZGV2L251bGwKKysrIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVp bGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9hcmVuYV90eXBlcy5o CkBAIC0wLDAgKzEsNTggQEAKKyNpZm5kZWYgSkVNQUxMT0NfSU5URVJOQUxfQVJFTkFfVFlQRVNf SAorI2RlZmluZSBKRU1BTExPQ19JTlRFUk5BTF9BUkVOQV9UWVBFU19ICisKKyNpbmNsdWRlICJq ZW1hbGxvYy9pbnRlcm5hbC9zYy5oIgorCisvKiBEZWZhdWx0IGRlY2F5IHRpbWVzIGluIG1pbGxp c2Vjb25kcy4gKi8KKyNkZWZpbmUgRElSVFlfREVDQVlfTVNfREVGQVVMVAlaRCgxMCAqIDEwMDAp CisjZGVmaW5lIE1VWlpZX0RFQ0FZX01TX0RFRkFVTFQJKDApCisvKiBOdW1iZXIgb2YgZXZlbnQg dGlja3MgYmV0d2VlbiB0aW1lIGNoZWNrcy4gKi8KKyNkZWZpbmUgQVJFTkFfREVDQVlfTlRJQ0tT X1BFUl9VUERBVEUJMTAwMAorCit0eXBlZGVmIHN0cnVjdCBhcmVuYV9kZWNheV9zIGFyZW5hX2Rl Y2F5X3Q7Cit0eXBlZGVmIHN0cnVjdCBhcmVuYV9zIGFyZW5hX3Q7CisKK3R5cGVkZWYgZW51bSB7 CisJcGVyY3B1X2FyZW5hX21vZGVfbmFtZXNfYmFzZSAgID0gMCwgLyogVXNlZCBmb3Igb3B0aW9u cyBwcm9jZXNzaW5nLiAqLworCisJLyoKKwkgKiAqX3VuaW5pdCBhcmUgdXNlZCBvbmx5IGR1cmlu ZyBib290c3RyYXBwaW5nLCBhbmQgbXVzdCBjb3JyZXNwb25kCisJICogdG8gaW5pdGlhbGl6ZWQg dmFyaWFudCBwbHVzIHBlcmNwdV9hcmVuYV9tb2RlX2VuYWJsZWRfYmFzZS4KKwkgKi8KKwlwZXJj cHVfYXJlbmFfdW5pbml0ICAgICAgICAgICAgPSAwLAorCXBlcl9waHljcHVfYXJlbmFfdW5pbml0 ICAgICAgICA9IDEsCisKKwkvKiBBbGwgbm9uLWRpc2FibGVkIG1vZGVzIG11c3QgY29tZSBhZnRl ciBwZXJjcHVfYXJlbmFfZGlzYWJsZWQuICovCisJcGVyY3B1X2FyZW5hX2Rpc2FibGVkICAgICAg ICAgID0gMiwKKworCXBlcmNwdV9hcmVuYV9tb2RlX25hbWVzX2xpbWl0ICA9IDMsIC8qIFVzZWQg Zm9yIG9wdGlvbnMgcHJvY2Vzc2luZy4gKi8KKwlwZXJjcHVfYXJlbmFfbW9kZV9lbmFibGVkX2Jh c2UgPSAzLAorCisJcGVyY3B1X2FyZW5hICAgICAgICAgICAgICAgICAgID0gMywKKwlwZXJfcGh5 Y3B1X2FyZW5hICAgICAgICAgICAgICAgPSA0ICAvKiBIeXBlciB0aHJlYWRzIHNoYXJlIGFyZW5h LiAqLworfSBwZXJjcHVfYXJlbmFfbW9kZV90OworCisjZGVmaW5lIFBFUkNQVV9BUkVOQV9FTkFC TEVEKG0pCSgobSkgPj0gcGVyY3B1X2FyZW5hX21vZGVfZW5hYmxlZF9iYXNlKQorI2RlZmluZSBQ RVJDUFVfQVJFTkFfREVGQVVMVAlwZXJjcHVfYXJlbmFfZGlzYWJsZWQKKworLyoKKyAqIFdoZW4g YWxsb2NhdGlvbl9zaXplID49IG92ZXJzaXplX3RocmVzaG9sZCwgdXNlIHRoZSBkZWRpY2F0ZWQg aHVnZSBhcmVuYQorICogKHVubGVzcyBoYXZlIGV4cGxpY2l0bHkgc3BpY2lmaWVkIGFyZW5hIGlu ZGV4KS4gIDAgZGlzYWJsZXMgdGhlIGZlYXR1cmUuCisgKi8KKyNkZWZpbmUgT1ZFUlNJWkVfVEhS RVNIT0xEX0RFRkFVTFQgKDggPDwgMjApCisKK3N0cnVjdCBhcmVuYV9jb25maWdfcyB7CisJLyog ZXh0ZW50IGhvb2tzIHRvIGJlIHVzZWQgZm9yIHRoZSBhcmVuYSAqLworCWV4dGVudF9ob29rc190 ICpleHRlbnRfaG9va3M7CisKKwkvKgorCSAqIFVzZSBleHRlbnQgaG9va3MgZm9yIG1ldGFkYXRh IChiYXNlKSBhbGxvY2F0aW9ucyB3aGVuIHRydWUuCisJICovCisJYm9vbCBtZXRhZGF0YV91c2Vf aG9va3M7Cit9OworCit0eXBlZGVmIHN0cnVjdCBhcmVuYV9jb25maWdfcyBhcmVuYV9jb25maWdf dDsKKworZXh0ZXJuIGNvbnN0IGFyZW5hX2NvbmZpZ190IGFyZW5hX2NvbmZpZ19kZWZhdWx0Owor CisjZW5kaWYgLyogSkVNQUxMT0NfSU5URVJOQUxfQVJFTkFfVFlQRVNfSCAqLwoKZGlmZiAtLWdp dCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxs b2MvaW50ZXJuYWwvYXNzZXJ0LmggYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01 LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL2Fzc2VydC5oCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAuLmJlNGQ0NWIKLS0tIC9kZXYvbnVsbAorKysgYi8zODktZHMtYmFz ZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL2Fz c2VydC5oCkBAIC0wLDAgKzEsNTYgQEAKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9tYWxs b2NfaW8uaCIKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC91dGlsLmgiCisKKy8qCisgKiBE ZWZpbmUgYSBjdXN0b20gYXNzZXJ0KCkgaW4gb3JkZXIgdG8gcmVkdWNlIHRoZSBjaGFuY2VzIG9m IGRlYWRsb2NrIGR1cmluZworICogYXNzZXJ0aW9uIGZhaWx1cmUuCisgKi8KKyNpZm5kZWYgYXNz ZXJ0CisjZGVmaW5lIGFzc2VydChlKSBkbyB7CQkJCQkJCVwKKwlpZiAodW5saWtlbHkoY29uZmln X2RlYnVnICYmICEoZSkpKSB7CQkJCVwKKwkJbWFsbG9jX3ByaW50ZigJCQkJCQlcCisJCSAgICAi PGplbWFsbG9jPjogJXM6JWQ6IEZhaWxlZCBhc3NlcnRpb246IFwiJXNcIlxuIiwJXAorCQkgICAg X19GSUxFX18sIF9fTElORV9fLCAjZSk7CQkJCVwKKwkJYWJvcnQoKTsJCQkJCQlcCisJfQkJCQkJ CQkJXAorfSB3aGlsZSAoMCkKKyNlbmRpZgorCisjaWZuZGVmIG5vdF9yZWFjaGVkCisjZGVmaW5l IG5vdF9yZWFjaGVkKCkgZG8gewkJCQkJCVwKKwlpZiAoY29uZmlnX2RlYnVnKSB7CQkJCQkJXAor CQltYWxsb2NfcHJpbnRmKAkJCQkJCVwKKwkJICAgICI8amVtYWxsb2M+OiAlczolZDogVW5yZWFj aGFibGUgY29kZSByZWFjaGVkXG4iLAlcCisJCSAgICBfX0ZJTEVfXywgX19MSU5FX18pOwkJCQlc CisJCWFib3J0KCk7CQkJCQkJXAorCX0JCQkJCQkJCVwKKwl1bnJlYWNoYWJsZSgpOwkJCQkJCQlc Cit9IHdoaWxlICgwKQorI2VuZGlmCisKKyNpZm5kZWYgbm90X2ltcGxlbWVudGVkCisjZGVmaW5l IG5vdF9pbXBsZW1lbnRlZCgpIGRvIHsJCQkJCQlcCisJaWYgKGNvbmZpZ19kZWJ1ZykgewkJCQkJ CVwKKwkJbWFsbG9jX3ByaW50ZigiPGplbWFsbG9jPjogJXM6JWQ6IE5vdCBpbXBsZW1lbnRlZFxu IiwJXAorCQkgICAgX19GSUxFX18sIF9fTElORV9fKTsJCQkJXAorCQlhYm9ydCgpOwkJCQkJCVwK Kwl9CQkJCQkJCQlcCit9IHdoaWxlICgwKQorI2VuZGlmCisKKyNpZm5kZWYgYXNzZXJ0X25vdF9p bXBsZW1lbnRlZAorI2RlZmluZSBhc3NlcnRfbm90X2ltcGxlbWVudGVkKGUpIGRvIHsJCQkJCVwK KwlpZiAodW5saWtlbHkoY29uZmlnX2RlYnVnICYmICEoZSkpKSB7CQkJCVwKKwkJbm90X2ltcGxl bWVudGVkKCk7CQkJCQlcCisJfQkJCQkJCQkJXAorfSB3aGlsZSAoMCkKKyNlbmRpZgorCisvKiBV c2UgdG8gYXNzZXJ0IGEgcGFydGljdWxhciBjb25maWd1cmF0aW9uLCBlLmcuLCBjYXNzZXJ0KGNv bmZpZ19kZWJ1ZykuICovCisjaWZuZGVmIGNhc3NlcnQKKyNkZWZpbmUgY2Fzc2VydChjKSBkbyB7 CQkJCQkJCVwKKwlpZiAodW5saWtlbHkoIShjKSkpIHsJCQkJCQlcCisJCW5vdF9yZWFjaGVkKCk7 CQkJCQkJXAorCX0JCQkJCQkJCVwKK30gd2hpbGUgKDApCisjZW5kaWYKCmRpZmYgLS1naXQgYS8z ODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2lu dGVybmFsL2F0b21pYy5oIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAv aW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9hdG9taWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwLi5jMGY3MzEyCi0tLSAvZGV2L251bGwKKysrIGIvMzg5LWRzLWJhc2UtMy4z LjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9hdG9taWMu aApAQCAtMCwwICsxLDEwNyBAQAorI2lmbmRlZiBKRU1BTExPQ19JTlRFUk5BTF9BVE9NSUNfSAor I2RlZmluZSBKRU1BTExPQ19JTlRFUk5BTF9BVE9NSUNfSAorCisjZGVmaW5lIEFUT01JQ19JTkxJ TkUgSkVNQUxMT0NfQUxXQVlTX0lOTElORQorCisjZGVmaW5lIEpFTUFMTE9DX1U4X0FUT01JQ1MK KyNpZiBkZWZpbmVkKEpFTUFMTE9DX0dDQ19BVE9NSUNfQVRPTUlDUykKKyMgIGluY2x1ZGUgImpl bWFsbG9jL2ludGVybmFsL2F0b21pY19nY2NfYXRvbWljLmgiCisjICBpZiAhZGVmaW5lZChKRU1B TExPQ19HQ0NfVThfQVRPTUlDX0FUT01JQ1MpCisjICAgIHVuZGVmIEpFTUFMTE9DX1U4X0FUT01J Q1MKKyMgIGVuZGlmCisjZWxpZiBkZWZpbmVkKEpFTUFMTE9DX0dDQ19TWU5DX0FUT01JQ1MpCisj ICBpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9hdG9taWNfZ2NjX3N5bmMuaCIKKyMgIGlmICFk ZWZpbmVkKEpFTUFMTE9DX0dDQ19VOF9TWU5DX0FUT01JQ1MpCisjICAgIHVuZGVmIEpFTUFMTE9D X1U4X0FUT01JQ1MKKyMgIGVuZGlmCisjZWxpZiBkZWZpbmVkKF9NU0NfVkVSKQorIyAgaW5jbHVk ZSAiamVtYWxsb2MvaW50ZXJuYWwvYXRvbWljX21zdmMuaCIKKyNlbGlmIGRlZmluZWQoSkVNQUxM T0NfQzExX0FUT01JQ1MpCisjICBpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9hdG9taWNfYzEx LmgiCisjZWxzZQorIyAgZXJyb3IgIkRvbid0IGhhdmUgYXRvbWljcyBpbXBsZW1lbnRlZCBvbiB0 aGlzIHBsYXRmb3JtLiIKKyNlbmRpZgorCisvKgorICogVGhpcyBoZWFkZXIgZ2l2ZXMgbW9yZSBv ciBsZXNzIGEgYmFja3BvcnQgb2YgQzExIGF0b21pY3MuIFRoZSB1c2VyIGNhbiB3cml0ZQorICog SkVNQUxMT0NfR0VORVJBVEVfQVRPTUlDUyh0eXBlLCBzaG9ydF90eXBlLCBsZ19zaXplb2ZfdHlw ZSk7IHRvIGdlbmVyYXRlCisgKiBjb3VudGVycGFydHMgb2YgdGhlIEMxMSBhdG9taWMgZnVuY3Rp b25zIGZvciB0eXBlLCBhcyBzbzoKKyAqICAgSkVNQUxMT0NfR0VORVJBVEVfQVRPTUlDUyhpbnQg KiwgcGksIDMpOworICogYW5kIHRoZW4gd3JpdGUgdGhpbmdzIGxpa2U6CisgKiAgIGludCAqc29t ZV9wdHI7CisgKiAgIGF0b21pY19waV90IGF0b21pY19wdHJfdG9faW50OworICogICBhdG9taWNf c3RvcmVfcGkoJmF0b21pY19wdHJfdG9faW50LCBzb21lX3B0ciwgQVRPTUlDX1JFTEFYRUQpOwor ICogICBpbnQgKnByZXZfdmFsdWUgPSBhdG9taWNfZXhjaGFuZ2VfcGkoJnB0cl90b19pbnQsIE5V TEwsIEFUT01JQ19BQ1FfUkVMKTsKKyAqICAgYXNzZXJ0KHNvbWVfcHRyID09IHByZXZfdmFsdWUp OworICogYW5kIGV4cGVjdCB0aGluZ3MgdG8gd29yayBpbiB0aGUgb2J2aW91cyB3YXkuCisgKgor ICogQWxzbyBpbmNsdWRlZCAod2l0aCBuYW1pbmcgZGlmZmVyZW5jZXMgdG8gYXZvaWQgY29uZmxp Y3RzIHdpdGggdGhlIHN0YW5kYXJkCisgKiBsaWJyYXJ5KToKKyAqICAgYXRvbWljX2ZlbmNlKGF0 b21pY19tZW1vcnlfb3JkZXJfdCkgKG1pbWljcyBDMTEncyBhdG9taWNfdGhyZWFkX2ZlbmNlKS4K KyAqICAgQVRPTUlDX0lOSVQgKG1pbWljcyBDMTEncyBBVE9NSUNfVkFSX0lOSVQpLgorICovCisK Ky8qCisgKiBQdXJlIGNvbnZlbmllbmNlLCBzbyB0aGF0IHdlIGRvbid0IGhhdmUgdG8gdHlwZSAi YXRvbWljX21lbW9yeV9vcmRlcl8iCisgKiBxdWl0ZSBzbyBvZnRlbi4KKyAqLworI2RlZmluZSBB VE9NSUNfUkVMQVhFRCBhdG9taWNfbWVtb3J5X29yZGVyX3JlbGF4ZWQKKyNkZWZpbmUgQVRPTUlD X0FDUVVJUkUgYXRvbWljX21lbW9yeV9vcmRlcl9hY3F1aXJlCisjZGVmaW5lIEFUT01JQ19SRUxF QVNFIGF0b21pY19tZW1vcnlfb3JkZXJfcmVsZWFzZQorI2RlZmluZSBBVE9NSUNfQUNRX1JFTCBh dG9taWNfbWVtb3J5X29yZGVyX2FjcV9yZWwKKyNkZWZpbmUgQVRPTUlDX1NFUV9DU1QgYXRvbWlj X21lbW9yeV9vcmRlcl9zZXFfY3N0CisKKy8qCisgKiBBbm90aGVyIGNvbnZlbmllbmNlIC0tIHNp bXBsZSBhdG9taWMgaGVscGVyIGZ1bmN0aW9ucy4KKyAqLworI2RlZmluZSBKRU1BTExPQ19HRU5F UkFURV9FWFBBTkRFRF9JTlRfQVRPTUlDUyh0eXBlLCBzaG9ydF90eXBlLAlcCisgICAgbGdfc2l6 ZSkJCQkJCQkJCVwKKyAgICBKRU1BTExPQ19HRU5FUkFURV9JTlRfQVRPTUlDUyh0eXBlLCBzaG9y dF90eXBlLCBsZ19zaXplKQkJXAorICAgIEFUT01JQ19JTkxJTkUgdm9pZAkJCQkJCQlcCisgICAg YXRvbWljX2xvYWRfYWRkX3N0b3JlXyMjc2hvcnRfdHlwZShhdG9taWNfIyNzaG9ydF90eXBlIyNf dCAqYSwJXAorCXR5cGUgaW5jKSB7CQkJCQkJCVwKKwkgICAgdHlwZSBvbGR2YWwgPSBhdG9taWNf bG9hZF8jI3Nob3J0X3R5cGUoYSwgQVRPTUlDX1JFTEFYRUQpOwlcCisJICAgIHR5cGUgbmV3dmFs ID0gb2xkdmFsICsgaW5jOwkJCQkJXAorCSAgICBhdG9taWNfc3RvcmVfIyNzaG9ydF90eXBlKGEs IG5ld3ZhbCwgQVRPTUlDX1JFTEFYRUQpOwlcCisJfQkJCQkJCQkJXAorICAgIEFUT01JQ19JTkxJ TkUgdm9pZAkJCQkJCQlcCisgICAgYXRvbWljX2xvYWRfc3ViX3N0b3JlXyMjc2hvcnRfdHlwZShh dG9taWNfIyNzaG9ydF90eXBlIyNfdCAqYSwJXAorCXR5cGUgaW5jKSB7CQkJCQkJCVwKKwkgICAg dHlwZSBvbGR2YWwgPSBhdG9taWNfbG9hZF8jI3Nob3J0X3R5cGUoYSwgQVRPTUlDX1JFTEFYRUQp OwlcCisJICAgIHR5cGUgbmV3dmFsID0gb2xkdmFsIC0gaW5jOwkJCQkJXAorCSAgICBhdG9taWNf c3RvcmVfIyNzaG9ydF90eXBlKGEsIG5ld3ZhbCwgQVRPTUlDX1JFTEFYRUQpOwlcCisJfQorCisv KgorICogTm90IGFsbCBwbGF0Zm9ybXMgaGF2ZSA2NC1iaXQgYXRvbWljcy4gIElmIHdlIGRvLCB0 aGlzICNkZWZpbmUgZXhwb3NlcyB0aGF0CisgKiBmYWN0LgorICovCisjaWYgKExHX1NJWkVPRl9Q VFIgPT0gMyB8fCBMR19TSVpFT0ZfSU5UID09IDMpCisjICBkZWZpbmUgSkVNQUxMT0NfQVRPTUlD X1U2NAorI2VuZGlmCisKK0pFTUFMTE9DX0dFTkVSQVRFX0FUT01JQ1Modm9pZCAqLCBwLCBMR19T SVpFT0ZfUFRSKQorCisvKgorICogVGhlcmUncyBubyBhY3R1YWwgZ3VhcmFudGVlIHRoYXQgc2l6 ZW9mKGJvb2wpID09IDEsIGJ1dCBpdCdzIHRydWUgb24gdGhlIG9ubHkKKyAqIHBsYXRmb3JtIHRo YXQgYWN0dWFsbHkgbmVlZHMgdG8ga25vdyB0aGUgc2l6ZSwgTVNWQy4KKyAqLworSkVNQUxMT0Nf R0VORVJBVEVfQVRPTUlDUyhib29sLCBiLCAwKQorCitKRU1BTExPQ19HRU5FUkFURV9FWFBBTkRF RF9JTlRfQVRPTUlDUyh1bnNpZ25lZCwgdSwgTEdfU0laRU9GX0lOVCkKKworSkVNQUxMT0NfR0VO RVJBVEVfRVhQQU5ERURfSU5UX0FUT01JQ1Moc2l6ZV90LCB6dSwgTEdfU0laRU9GX1BUUikKKwor SkVNQUxMT0NfR0VORVJBVEVfRVhQQU5ERURfSU5UX0FUT01JQ1Moc3NpemVfdCwgemQsIExHX1NJ WkVPRl9QVFIpCisKK0pFTUFMTE9DX0dFTkVSQVRFX0VYUEFOREVEX0lOVF9BVE9NSUNTKHVpbnQ4 X3QsIHU4LCAwKQorCitKRU1BTExPQ19HRU5FUkFURV9FWFBBTkRFRF9JTlRfQVRPTUlDUyh1aW50 MzJfdCwgdTMyLCAyKQorCisjaWZkZWYgSkVNQUxMT0NfQVRPTUlDX1U2NAorSkVNQUxMT0NfR0VO RVJBVEVfRVhQQU5ERURfSU5UX0FUT01JQ1ModWludDY0X3QsIHU2NCwgMykKKyNlbmRpZgorCisj dW5kZWYgQVRPTUlDX0lOTElORQorCisjZW5kaWYgLyogSkVNQUxMT0NfSU5URVJOQUxfQVRPTUlD X0ggKi8KCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMu MC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL2F0b21pY19jMTEuaCBiLzM4OS1kcy1iYXNlLTMu My4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvYXRvbWlj X2MxMS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1ZjkzMTMKLS0tIC9k ZXYvbnVsbAorKysgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNs dWRlL2plbWFsbG9jL2ludGVybmFsL2F0b21pY19jMTEuaApAQCAtMCwwICsxLDk3IEBACisjaWZu ZGVmIEpFTUFMTE9DX0lOVEVSTkFMX0FUT01JQ19DMTFfSAorI2RlZmluZSBKRU1BTExPQ19JTlRF Uk5BTF9BVE9NSUNfQzExX0gKKworI2luY2x1ZGUgPHN0ZGF0b21pYy5oPgorCisjZGVmaW5lIEFU T01JQ19JTklUKC4uLikgQVRPTUlDX1ZBUl9JTklUKF9fVkFfQVJHU19fKQorCisjZGVmaW5lIGF0 b21pY19tZW1vcnlfb3JkZXJfdCBtZW1vcnlfb3JkZXIKKyNkZWZpbmUgYXRvbWljX21lbW9yeV9v cmRlcl9yZWxheGVkIG1lbW9yeV9vcmRlcl9yZWxheGVkCisjZGVmaW5lIGF0b21pY19tZW1vcnlf b3JkZXJfYWNxdWlyZSBtZW1vcnlfb3JkZXJfYWNxdWlyZQorI2RlZmluZSBhdG9taWNfbWVtb3J5 X29yZGVyX3JlbGVhc2UgbWVtb3J5X29yZGVyX3JlbGVhc2UKKyNkZWZpbmUgYXRvbWljX21lbW9y eV9vcmRlcl9hY3FfcmVsIG1lbW9yeV9vcmRlcl9hY3FfcmVsCisjZGVmaW5lIGF0b21pY19tZW1v cnlfb3JkZXJfc2VxX2NzdCBtZW1vcnlfb3JkZXJfc2VxX2NzdAorCisjZGVmaW5lIGF0b21pY19m ZW5jZSBhdG9taWNfdGhyZWFkX2ZlbmNlCisKKyNkZWZpbmUgSkVNQUxMT0NfR0VORVJBVEVfQVRP TUlDUyh0eXBlLCBzaG9ydF90eXBlLAkJCVwKKyAgICAvKiB1bnVzZWQgKi8gbGdfc2l6ZSkJCQkJ CQlcCit0eXBlZGVmIF9BdG9taWModHlwZSkgYXRvbWljXyMjc2hvcnRfdHlwZSMjX3Q7CQkJCVwK KwkJCQkJCQkJCVwKK0FUT01JQ19JTkxJTkUgdHlwZQkJCQkJCQlcCithdG9taWNfbG9hZF8jI3No b3J0X3R5cGUoY29uc3QgYXRvbWljXyMjc2hvcnRfdHlwZSMjX3QgKmEsCQlcCisgICAgYXRvbWlj X21lbW9yeV9vcmRlcl90IG1vKSB7CQkJCQkJXAorCS8qCQkJCQkJCQlcCisJICogQSBzdHJpY3Qg aW50ZXJwcmV0YXRpb24gb2YgdGhlIEMgc3RhbmRhcmQgcHJldmVudHMJCVwKKwkgKiBhdG9taWNf bG9hZCBmcm9tIHRha2luZyBhIGNvbnN0IGFyZ3VtZW50LCBidXQgaXQncwkJXAorCSAqIGNvbnZl bmllbnQgZm9yIG91ciBwdXJwb3Nlcy4gVGhpcyBjYXN0IGlzIGEgd29ya2Fyb3VuZC4JXAorCSAq LwkJCQkJCQkJXAorCWF0b21pY18jI3Nob3J0X3R5cGUjI190KiBhX25vbmNvbnN0ID0JCQkJXAor CSAgICAoYXRvbWljXyMjc2hvcnRfdHlwZSMjX3QqKWE7CQkJCVwKKwlyZXR1cm4gYXRvbWljX2xv YWRfZXhwbGljaXQoYV9ub25jb25zdCwgbW8pOwkJCVwKK30JCQkJCQkJCQlcCisJCQkJCQkJCQlc CitBVE9NSUNfSU5MSU5FIHZvaWQJCQkJCQkJXAorYXRvbWljX3N0b3JlXyMjc2hvcnRfdHlwZShh dG9taWNfIyNzaG9ydF90eXBlIyNfdCAqYSwJCQlcCisgICAgdHlwZSB2YWwsIGF0b21pY19tZW1v cnlfb3JkZXJfdCBtbykgewkJCQlcCisJYXRvbWljX3N0b3JlX2V4cGxpY2l0KGEsIHZhbCwgbW8p OwkJCQlcCit9CQkJCQkJCQkJXAorCQkJCQkJCQkJXAorQVRPTUlDX0lOTElORSB0eXBlCQkJCQkJ CVwKK2F0b21pY19leGNoYW5nZV8jI3Nob3J0X3R5cGUoYXRvbWljXyMjc2hvcnRfdHlwZSMjX3Qg KmEsIHR5cGUgdmFsLAlcCisgICAgYXRvbWljX21lbW9yeV9vcmRlcl90IG1vKSB7CQkJCQkJXAor CXJldHVybiBhdG9taWNfZXhjaGFuZ2VfZXhwbGljaXQoYSwgdmFsLCBtbyk7CQkJXAorfQkJCQkJ CQkJCVwKKwkJCQkJCQkJCVwKK0FUT01JQ19JTkxJTkUgYm9vbAkJCQkJCQlcCithdG9taWNfY29t cGFyZV9leGNoYW5nZV93ZWFrXyMjc2hvcnRfdHlwZShhdG9taWNfIyNzaG9ydF90eXBlIyNfdCAq YSwJXAorICAgIHR5cGUgKmV4cGVjdGVkLCB0eXBlIGRlc2lyZWQsIGF0b21pY19tZW1vcnlfb3Jk ZXJfdCBzdWNjZXNzX21vLAlcCisgICAgYXRvbWljX21lbW9yeV9vcmRlcl90IGZhaWx1cmVfbW8p IHsJCQkJCVwKKwlyZXR1cm4gYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfd2Vha19leHBsaWNpdChh LCBleHBlY3RlZCwJXAorCSAgICBkZXNpcmVkLCBzdWNjZXNzX21vLCBmYWlsdXJlX21vKTsJCQkJ XAorfQkJCQkJCQkJCVwKKwkJCQkJCQkJCVwKK0FUT01JQ19JTkxJTkUgYm9vbAkJCQkJCQlcCith dG9taWNfY29tcGFyZV9leGNoYW5nZV9zdHJvbmdfIyNzaG9ydF90eXBlKGF0b21pY18jI3Nob3J0 X3R5cGUjI190ICphLAlcCisgICAgdHlwZSAqZXhwZWN0ZWQsIHR5cGUgZGVzaXJlZCwgYXRvbWlj X21lbW9yeV9vcmRlcl90IHN1Y2Nlc3NfbW8sCVwKKyAgICBhdG9taWNfbWVtb3J5X29yZGVyX3Qg ZmFpbHVyZV9tbykgewkJCQkJXAorCXJldHVybiBhdG9taWNfY29tcGFyZV9leGNoYW5nZV9zdHJv bmdfZXhwbGljaXQoYSwgZXhwZWN0ZWQsCVwKKwkgICAgZGVzaXJlZCwgc3VjY2Vzc19tbywgZmFp bHVyZV9tbyk7CQkJCVwKK30KKworLyoKKyAqIEludGVncmFsIHR5cGVzIGhhdmUgc29tZSBzcGVj aWFsIG9wZXJhdGlvbnMgYXZhaWxhYmxlIHRoYXQgbm9uLWludGVncmFsIG9uZXMKKyAqIGxhY2su CisgKi8KKyNkZWZpbmUgSkVNQUxMT0NfR0VORVJBVEVfSU5UX0FUT01JQ1ModHlwZSwgc2hvcnRf dHlwZSwgCQlcCisgICAgLyogdW51c2VkICovIGxnX3NpemUpCQkJCQkJXAorSkVNQUxMT0NfR0VO RVJBVEVfQVRPTUlDUyh0eXBlLCBzaG9ydF90eXBlLCAvKiB1bnVzZWQgKi8gbGdfc2l6ZSkJXAor CQkJCQkJCQkJXAorQVRPTUlDX0lOTElORSB0eXBlCQkJCQkJCVwKK2F0b21pY19mZXRjaF9hZGRf IyNzaG9ydF90eXBlKGF0b21pY18jI3Nob3J0X3R5cGUjI190ICphLAkJXAorICAgIHR5cGUgdmFs LCBhdG9taWNfbWVtb3J5X29yZGVyX3QgbW8pIHsJCQkJXAorCXJldHVybiBhdG9taWNfZmV0Y2hf YWRkX2V4cGxpY2l0KGEsIHZhbCwgbW8pOwkJCVwKK30JCQkJCQkJCQlcCisJCQkJCQkJCQlcCitB VE9NSUNfSU5MSU5FIHR5cGUJCQkJCQkJXAorYXRvbWljX2ZldGNoX3N1Yl8jI3Nob3J0X3R5cGUo YXRvbWljXyMjc2hvcnRfdHlwZSMjX3QgKmEsCQlcCisgICAgdHlwZSB2YWwsIGF0b21pY19tZW1v cnlfb3JkZXJfdCBtbykgewkJCQlcCisJcmV0dXJuIGF0b21pY19mZXRjaF9zdWJfZXhwbGljaXQo YSwgdmFsLCBtbyk7CQkJXAorfQkJCQkJCQkJCVwKK0FUT01JQ19JTkxJTkUgdHlwZQkJCQkJCQlc CithdG9taWNfZmV0Y2hfYW5kXyMjc2hvcnRfdHlwZShhdG9taWNfIyNzaG9ydF90eXBlIyNfdCAq YSwJCVwKKyAgICB0eXBlIHZhbCwgYXRvbWljX21lbW9yeV9vcmRlcl90IG1vKSB7CQkJCVwKKwly ZXR1cm4gYXRvbWljX2ZldGNoX2FuZF9leHBsaWNpdChhLCB2YWwsIG1vKTsJCQlcCit9CQkJCQkJ CQkJXAorQVRPTUlDX0lOTElORSB0eXBlCQkJCQkJCVwKK2F0b21pY19mZXRjaF9vcl8jI3Nob3J0 X3R5cGUoYXRvbWljXyMjc2hvcnRfdHlwZSMjX3QgKmEsCQlcCisgICAgdHlwZSB2YWwsIGF0b21p Y19tZW1vcnlfb3JkZXJfdCBtbykgewkJCQlcCisJcmV0dXJuIGF0b21pY19mZXRjaF9vcl9leHBs aWNpdChhLCB2YWwsIG1vKTsJCQlcCit9CQkJCQkJCQkJXAorQVRPTUlDX0lOTElORSB0eXBlCQkJ CQkJCVwKK2F0b21pY19mZXRjaF94b3JfIyNzaG9ydF90eXBlKGF0b21pY18jI3Nob3J0X3R5cGUj I190ICphLAkJXAorICAgIHR5cGUgdmFsLCBhdG9taWNfbWVtb3J5X29yZGVyX3QgbW8pIHsJCQkJ XAorCXJldHVybiBhdG9taWNfZmV0Y2hfeG9yX2V4cGxpY2l0KGEsIHZhbCwgbW8pOwkJCVwKK30K KworI2VuZGlmIC8qIEpFTUFMTE9DX0lOVEVSTkFMX0FUT01JQ19DMTFfSCAqLwoKZGlmZiAtLWdp dCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxs b2MvaW50ZXJuYWwvYXRvbWljX2djY19hdG9taWMuaCBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxk L2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvYXRvbWljX2djY19hdG9t aWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzE1MTVlCi0tLSAvZGV2 L251bGwKKysrIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVk ZS9qZW1hbGxvYy9pbnRlcm5hbC9hdG9taWNfZ2NjX2F0b21pYy5oCkBAIC0wLDAgKzEsMTI5IEBA CisjaWZuZGVmIEpFTUFMTE9DX0lOVEVSTkFMX0FUT01JQ19HQ0NfQVRPTUlDX0gKKyNkZWZpbmUg SkVNQUxMT0NfSU5URVJOQUxfQVRPTUlDX0dDQ19BVE9NSUNfSAorCisjaW5jbHVkZSAiamVtYWxs b2MvaW50ZXJuYWwvYXNzZXJ0LmgiCisKKyNkZWZpbmUgQVRPTUlDX0lOSVQoLi4uKSB7X19WQV9B UkdTX199CisKK3R5cGVkZWYgZW51bSB7CisJYXRvbWljX21lbW9yeV9vcmRlcl9yZWxheGVkLAor CWF0b21pY19tZW1vcnlfb3JkZXJfYWNxdWlyZSwKKwlhdG9taWNfbWVtb3J5X29yZGVyX3JlbGVh c2UsCisJYXRvbWljX21lbW9yeV9vcmRlcl9hY3FfcmVsLAorCWF0b21pY19tZW1vcnlfb3JkZXJf c2VxX2NzdAorfSBhdG9taWNfbWVtb3J5X29yZGVyX3Q7CisKK0FUT01JQ19JTkxJTkUgaW50Cith dG9taWNfZW51bV90b19idWlsdGluKGF0b21pY19tZW1vcnlfb3JkZXJfdCBtbykgeworCXN3aXRj aCAobW8pIHsKKwljYXNlIGF0b21pY19tZW1vcnlfb3JkZXJfcmVsYXhlZDoKKwkJcmV0dXJuIF9f QVRPTUlDX1JFTEFYRUQ7CisJY2FzZSBhdG9taWNfbWVtb3J5X29yZGVyX2FjcXVpcmU6CisJCXJl dHVybiBfX0FUT01JQ19BQ1FVSVJFOworCWNhc2UgYXRvbWljX21lbW9yeV9vcmRlcl9yZWxlYXNl OgorCQlyZXR1cm4gX19BVE9NSUNfUkVMRUFTRTsKKwljYXNlIGF0b21pY19tZW1vcnlfb3JkZXJf YWNxX3JlbDoKKwkJcmV0dXJuIF9fQVRPTUlDX0FDUV9SRUw7CisJY2FzZSBhdG9taWNfbWVtb3J5 X29yZGVyX3NlcV9jc3Q6CisJCXJldHVybiBfX0FUT01JQ19TRVFfQ1NUOworCX0KKwkvKiBDYW4n dCBoYXBwZW47IHRoZSBzd2l0Y2ggaXMgZXhoYXVzdGl2ZS4gKi8KKwlub3RfcmVhY2hlZCgpOwor fQorCitBVE9NSUNfSU5MSU5FIHZvaWQKK2F0b21pY19mZW5jZShhdG9taWNfbWVtb3J5X29yZGVy X3QgbW8pIHsKKwlfX2F0b21pY190aHJlYWRfZmVuY2UoYXRvbWljX2VudW1fdG9fYnVpbHRpbiht bykpOworfQorCisjZGVmaW5lIEpFTUFMTE9DX0dFTkVSQVRFX0FUT01JQ1ModHlwZSwgc2hvcnRf dHlwZSwJCQlcCisgICAgLyogdW51c2VkICovIGxnX3NpemUpCQkJCQkJXAordHlwZWRlZiBzdHJ1 Y3QgewkJCQkJCQlcCisJdHlwZSByZXByOwkJCQkJCQlcCit9IGF0b21pY18jI3Nob3J0X3R5cGUj I190OwkJCQkJCVwKKwkJCQkJCQkJCVwKK0FUT01JQ19JTkxJTkUgdHlwZQkJCQkJCQlcCithdG9t aWNfbG9hZF8jI3Nob3J0X3R5cGUoY29uc3QgYXRvbWljXyMjc2hvcnRfdHlwZSMjX3QgKmEsCQlc CisgICAgYXRvbWljX21lbW9yeV9vcmRlcl90IG1vKSB7CQkJCQkJXAorCXR5cGUgcmVzdWx0OwkJ CQkJCQlcCisJX19hdG9taWNfbG9hZCgmYS0+cmVwciwgJnJlc3VsdCwgYXRvbWljX2VudW1fdG9f YnVpbHRpbihtbykpOwlcCisJcmV0dXJuIHJlc3VsdDsJCQkJCQkJXAorfQkJCQkJCQkJCVwKKwkJ CQkJCQkJCVwKK0FUT01JQ19JTkxJTkUgdm9pZAkJCQkJCQlcCithdG9taWNfc3RvcmVfIyNzaG9y dF90eXBlKGF0b21pY18jI3Nob3J0X3R5cGUjI190ICphLCB0eXBlIHZhbCwJCVwKKyAgICBhdG9t aWNfbWVtb3J5X29yZGVyX3QgbW8pIHsJCQkJCQlcCisJX19hdG9taWNfc3RvcmUoJmEtPnJlcHIs ICZ2YWwsIGF0b21pY19lbnVtX3RvX2J1aWx0aW4obW8pKTsJXAorfQkJCQkJCQkJCVwKKwkJCQkJ CQkJCVwKK0FUT01JQ19JTkxJTkUgdHlwZQkJCQkJCQlcCithdG9taWNfZXhjaGFuZ2VfIyNzaG9y dF90eXBlKGF0b21pY18jI3Nob3J0X3R5cGUjI190ICphLCB0eXBlIHZhbCwJXAorICAgIGF0b21p Y19tZW1vcnlfb3JkZXJfdCBtbykgewkJCQkJCVwKKwl0eXBlIHJlc3VsdDsJCQkJCQkJXAorCV9f YXRvbWljX2V4Y2hhbmdlKCZhLT5yZXByLCAmdmFsLCAmcmVzdWx0LAkJCVwKKwkgICAgYXRvbWlj X2VudW1fdG9fYnVpbHRpbihtbykpOwkJCQlcCisJcmV0dXJuIHJlc3VsdDsJCQkJCQkJXAorfQkJ CQkJCQkJCVwKKwkJCQkJCQkJCVwKK0FUT01JQ19JTkxJTkUgYm9vbAkJCQkJCQlcCithdG9taWNf Y29tcGFyZV9leGNoYW5nZV93ZWFrXyMjc2hvcnRfdHlwZShhdG9taWNfIyNzaG9ydF90eXBlIyNf dCAqYSwJXAorICAgIFVOVVNFRCB0eXBlICpleHBlY3RlZCwgdHlwZSBkZXNpcmVkLAkJCQlcCisg ICAgYXRvbWljX21lbW9yeV9vcmRlcl90IHN1Y2Nlc3NfbW8sCQkJCQlcCisgICAgYXRvbWljX21l bW9yeV9vcmRlcl90IGZhaWx1cmVfbW8pIHsJCQkJCVwKKwlyZXR1cm4gX19hdG9taWNfY29tcGFy ZV9leGNoYW5nZSgmYS0+cmVwciwgZXhwZWN0ZWQsICZkZXNpcmVkLAlcCisJICAgIHRydWUsIGF0 b21pY19lbnVtX3RvX2J1aWx0aW4oc3VjY2Vzc19tbyksCQkJXAorCSAgICBhdG9taWNfZW51bV90 b19idWlsdGluKGZhaWx1cmVfbW8pKTsJCQlcCit9CQkJCQkJCQkJXAorCQkJCQkJCQkJXAorQVRP TUlDX0lOTElORSBib29sCQkJCQkJCVwKK2F0b21pY19jb21wYXJlX2V4Y2hhbmdlX3N0cm9uZ18j I3Nob3J0X3R5cGUoYXRvbWljXyMjc2hvcnRfdHlwZSMjX3QgKmEsCVwKKyAgICBVTlVTRUQgdHlw ZSAqZXhwZWN0ZWQsIHR5cGUgZGVzaXJlZCwJCQkJXAorICAgIGF0b21pY19tZW1vcnlfb3JkZXJf dCBzdWNjZXNzX21vLAkJCQkJXAorICAgIGF0b21pY19tZW1vcnlfb3JkZXJfdCBmYWlsdXJlX21v KSB7CQkJCQlcCisJcmV0dXJuIF9fYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2UoJmEtPnJlcHIsIGV4 cGVjdGVkLCAmZGVzaXJlZCwJXAorCSAgICBmYWxzZSwJCQkJCQkJXAorCSAgICBhdG9taWNfZW51 bV90b19idWlsdGluKHN1Y2Nlc3NfbW8pLAkJCQlcCisJICAgIGF0b21pY19lbnVtX3RvX2J1aWx0 aW4oZmFpbHVyZV9tbykpOwkJCVwKK30KKworCisjZGVmaW5lIEpFTUFMTE9DX0dFTkVSQVRFX0lO VF9BVE9NSUNTKHR5cGUsIHNob3J0X3R5cGUsCQkJXAorICAgIC8qIHVudXNlZCAqLyBsZ19zaXpl KQkJCQkJCVwKK0pFTUFMTE9DX0dFTkVSQVRFX0FUT01JQ1ModHlwZSwgc2hvcnRfdHlwZSwgLyog dW51c2VkICovIGxnX3NpemUpCVwKKwkJCQkJCQkJCVwKK0FUT01JQ19JTkxJTkUgdHlwZQkJCQkJ CQlcCithdG9taWNfZmV0Y2hfYWRkXyMjc2hvcnRfdHlwZShhdG9taWNfIyNzaG9ydF90eXBlIyNf dCAqYSwgdHlwZSB2YWwsCVwKKyAgICBhdG9taWNfbWVtb3J5X29yZGVyX3QgbW8pIHsJCQkJCQlc CisJcmV0dXJuIF9fYXRvbWljX2ZldGNoX2FkZCgmYS0+cmVwciwgdmFsLAkJCVwKKwkgICAgYXRv bWljX2VudW1fdG9fYnVpbHRpbihtbykpOwkJCQlcCit9CQkJCQkJCQkJXAorCQkJCQkJCQkJXAor QVRPTUlDX0lOTElORSB0eXBlCQkJCQkJCVwKK2F0b21pY19mZXRjaF9zdWJfIyNzaG9ydF90eXBl KGF0b21pY18jI3Nob3J0X3R5cGUjI190ICphLCB0eXBlIHZhbCwJXAorICAgIGF0b21pY19tZW1v cnlfb3JkZXJfdCBtbykgewkJCQkJCVwKKwlyZXR1cm4gX19hdG9taWNfZmV0Y2hfc3ViKCZhLT5y ZXByLCB2YWwsCQkJXAorCSAgICBhdG9taWNfZW51bV90b19idWlsdGluKG1vKSk7CQkJCVwKK30J CQkJCQkJCQlcCisJCQkJCQkJCQlcCitBVE9NSUNfSU5MSU5FIHR5cGUJCQkJCQkJXAorYXRvbWlj X2ZldGNoX2FuZF8jI3Nob3J0X3R5cGUoYXRvbWljXyMjc2hvcnRfdHlwZSMjX3QgKmEsIHR5cGUg dmFsLAlcCisgICAgYXRvbWljX21lbW9yeV9vcmRlcl90IG1vKSB7CQkJCQkJXAorCXJldHVybiBf X2F0b21pY19mZXRjaF9hbmQoJmEtPnJlcHIsIHZhbCwJCQlcCisJICAgIGF0b21pY19lbnVtX3Rv X2J1aWx0aW4obW8pKTsJCQkJXAorfQkJCQkJCQkJCVwKKwkJCQkJCQkJCVwKK0FUT01JQ19JTkxJ TkUgdHlwZQkJCQkJCQlcCithdG9taWNfZmV0Y2hfb3JfIyNzaG9ydF90eXBlKGF0b21pY18jI3No b3J0X3R5cGUjI190ICphLCB0eXBlIHZhbCwJXAorICAgIGF0b21pY19tZW1vcnlfb3JkZXJfdCBt bykgewkJCQkJCVwKKwlyZXR1cm4gX19hdG9taWNfZmV0Y2hfb3IoJmEtPnJlcHIsIHZhbCwJCQkJ XAorCSAgICBhdG9taWNfZW51bV90b19idWlsdGluKG1vKSk7CQkJCVwKK30JCQkJCQkJCQlcCisJ CQkJCQkJCQlcCitBVE9NSUNfSU5MSU5FIHR5cGUJCQkJCQkJXAorYXRvbWljX2ZldGNoX3hvcl8j I3Nob3J0X3R5cGUoYXRvbWljXyMjc2hvcnRfdHlwZSMjX3QgKmEsIHR5cGUgdmFsLAlcCisgICAg YXRvbWljX21lbW9yeV9vcmRlcl90IG1vKSB7CQkJCQkJXAorCXJldHVybiBfX2F0b21pY19mZXRj aF94b3IoJmEtPnJlcHIsIHZhbCwJCQlcCisJICAgIGF0b21pY19lbnVtX3RvX2J1aWx0aW4obW8p KTsJCQkJXAorfQorCisjZW5kaWYgLyogSkVNQUxMT0NfSU5URVJOQUxfQVRPTUlDX0dDQ19BVE9N SUNfSCAqLwoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUu My4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvYXRvbWljX2djY19zeW5jLmggYi8zODktZHMt YmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFs L2F0b21pY19nY2Nfc3luYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUw MmI3Y2IKLS0tIC9kZXYvbnVsbAorKysgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxv Yy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL2F0b21pY19nY2Nfc3luYy5oCkBAIC0w LDAgKzEsMTk1IEBACisjaWZuZGVmIEpFTUFMTE9DX0lOVEVSTkFMX0FUT01JQ19HQ0NfU1lOQ19I CisjZGVmaW5lIEpFTUFMTE9DX0lOVEVSTkFMX0FUT01JQ19HQ0NfU1lOQ19ICisKKyNkZWZpbmUg QVRPTUlDX0lOSVQoLi4uKSB7X19WQV9BUkdTX199CisKK3R5cGVkZWYgZW51bSB7CisJYXRvbWlj X21lbW9yeV9vcmRlcl9yZWxheGVkLAorCWF0b21pY19tZW1vcnlfb3JkZXJfYWNxdWlyZSwKKwlh dG9taWNfbWVtb3J5X29yZGVyX3JlbGVhc2UsCisJYXRvbWljX21lbW9yeV9vcmRlcl9hY3FfcmVs LAorCWF0b21pY19tZW1vcnlfb3JkZXJfc2VxX2NzdAorfSBhdG9taWNfbWVtb3J5X29yZGVyX3Q7 CisKK0FUT01JQ19JTkxJTkUgdm9pZAorYXRvbWljX2ZlbmNlKGF0b21pY19tZW1vcnlfb3JkZXJf dCBtbykgeworCS8qIEVhc3kgY2FzZXMgZmlyc3Q6IG5vIGJhcnJpZXIsIGFuZCBmdWxsIGJhcnJp ZXIuICovCisJaWYgKG1vID09IGF0b21pY19tZW1vcnlfb3JkZXJfcmVsYXhlZCkgeworCQlhc20g dm9sYXRpbGUoIiIgOjo6ICJtZW1vcnkiKTsKKwkJcmV0dXJuOworCX0KKwlpZiAobW8gPT0gYXRv bWljX21lbW9yeV9vcmRlcl9zZXFfY3N0KSB7CisJCWFzbSB2b2xhdGlsZSgiIiA6OjogIm1lbW9y eSIpOworCQlfX3N5bmNfc3luY2hyb25pemUoKTsKKwkJYXNtIHZvbGF0aWxlKCIiIDo6OiAibWVt b3J5Iik7CisJCXJldHVybjsKKwl9CisJYXNtIHZvbGF0aWxlKCIiIDo6OiAibWVtb3J5Iik7Cisj ICBpZiBkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pCisJLyogVGhpcyBp cyBpbXBsaWNpdCBvbiB4ODYuICovCisjICBlbGlmIGRlZmluZWQoX19wcGM2NF9fKQorCWFzbSB2 b2xhdGlsZSgibHdzeW5jIik7CisjICBlbGlmIGRlZmluZWQoX19wcGNfXykKKwlhc20gdm9sYXRp bGUoInN5bmMiKTsKKyMgIGVsaWYgZGVmaW5lZChfX3NwYXJjX18pICYmIGRlZmluZWQoX19hcmNo NjRfXykKKwlpZiAobW8gPT0gYXRvbWljX21lbW9yeV9vcmRlcl9hY3F1aXJlKSB7CisJCWFzbSB2 b2xhdGlsZSgibWVtYmFyICNMb2FkTG9hZCB8ICNMb2FkU3RvcmUiKTsKKwl9IGVsc2UgaWYgKG1v ID09IGF0b21pY19tZW1vcnlfb3JkZXJfcmVsZWFzZSkgeworCQlhc20gdm9sYXRpbGUoIm1lbWJh ciAjTG9hZFN0b3JlIHwgI1N0b3JlU3RvcmUiKTsKKwl9IGVsc2UgeworCQlhc20gdm9sYXRpbGUo Im1lbWJhciAjTG9hZExvYWQgfCAjTG9hZFN0b3JlIHwgI1N0b3JlU3RvcmUiKTsKKwl9CisjICBl bHNlCisJX19zeW5jX3N5bmNocm9uaXplKCk7CisjICBlbmRpZgorCWFzbSB2b2xhdGlsZSgiIiA6 OjogIm1lbW9yeSIpOworfQorCisvKgorICogQSBjb3JyZWN0IGltcGxlbWVudGF0aW9uIG9mIHNl cV9jc3QgbG9hZHMgYW5kIHN0b3JlcyBvbiB3ZWFrbHkgb3JkZXJlZAorICogYXJjaGl0ZWN0dXJl cyBjb3VsZCBkbyBlaXRoZXIgb2YgdGhlIGZvbGxvd2luZzoKKyAqICAgMS4gc3RvcmUoKSBpcyB3 ZWFrLWZlbmNlIC0+IHN0b3JlIC0+IHN0cm9uZyBmZW5jZSwgbG9hZCgpIGlzIGxvYWQgLT4KKyAq ICAgICAgc3Ryb25nLWZlbmNlLgorICogICAyLiBzdG9yZSgpIGlzIHN0cm9uZy1mZW5jZSAtPiBz dG9yZSwgbG9hZCgpIGlzIHN0cm9uZy1mZW5jZSAtPiBsb2FkIC0+CisgKiAgICAgIHdlYWstZmVu Y2UuCisgKiBUaGUgdHJpY2t5IHRoaW5nIGlzLCBsb2FkKCkgYW5kIHN0b3JlKCkgYWJvdmUgY2Fu IGJlIHRoZSBsb2FkIG9yIHN0b3JlCisgKiBwb3J0aW9ucyBvZiBhIGdjYyBfX3N5bmMgYnVpbHRp biwgc28gd2UgaGF2ZSB0byBmb2xsb3cgR0NDJ3MgbGVhZCwgd2hpY2gKKyAqIG1lYW5zIGdvaW5n IHdpdGggc3RyYXRlZ3kgMi4KKyAqIE9uIHN0cm9uZ2x5IG9yZGVyZWQgYXJjaGl0ZWN0dXJlcywg dGhlIG5hdHVyYWwgc3RyYXRlZ3kgaXMgdG8gc3RpY2sgYSBzdHJvbmcKKyAqIGZlbmNlIGFmdGVy IHNlcV9jc3Qgc3RvcmVzLCBhbmQgaGF2ZSBuYWtlZCBsb2Fkcy4gIFNvIHdlIHdhbnQgdGhlIHN0 cm9uZworICogZmVuY2VzIGluIGRpZmZlcmVudCBwbGFjZXMgb24gZGlmZmVyZW50IGFyY2hpdGVj dHVyZXMuCisgKiBhdG9taWNfcHJlX3NjX2xvYWRfZmVuY2UgYW5kIGF0b21pY19wb3N0X3NjX3N0 b3JlX2ZlbmNlIGFsbG93IHVzIHRvCisgKiBhY2NvbXBsaXNoIHRoaXMuCisgKi8KKworQVRPTUlD X0lOTElORSB2b2lkCithdG9taWNfcHJlX3NjX2xvYWRfZmVuY2UoKSB7CisjICBpZiBkZWZpbmVk KF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pIHx8CQkJXAorICAgIChkZWZpbmVkKF9f c3BhcmNfXykgJiYgZGVmaW5lZChfX2FyY2g2NF9fKSkKKwlhdG9taWNfZmVuY2UoYXRvbWljX21l bW9yeV9vcmRlcl9yZWxheGVkKTsKKyMgIGVsc2UKKwlhdG9taWNfZmVuY2UoYXRvbWljX21lbW9y eV9vcmRlcl9zZXFfY3N0KTsKKyMgIGVuZGlmCit9CisKK0FUT01JQ19JTkxJTkUgdm9pZAorYXRv bWljX3Bvc3Rfc2Nfc3RvcmVfZmVuY2UoKSB7CisjICBpZiBkZWZpbmVkKF9faTM4Nl9fKSB8fCBk ZWZpbmVkKF9feDg2XzY0X18pIHx8CQkJXAorICAgIChkZWZpbmVkKF9fc3BhcmNfXykgJiYgZGVm aW5lZChfX2FyY2g2NF9fKSkKKwlhdG9taWNfZmVuY2UoYXRvbWljX21lbW9yeV9vcmRlcl9zZXFf Y3N0KTsKKyMgIGVsc2UKKwlhdG9taWNfZmVuY2UoYXRvbWljX21lbW9yeV9vcmRlcl9yZWxheGVk KTsKKyMgIGVuZGlmCisKK30KKworI2RlZmluZSBKRU1BTExPQ19HRU5FUkFURV9BVE9NSUNTKHR5 cGUsIHNob3J0X3R5cGUsCQkJXAorICAgIC8qIHVudXNlZCAqLyBsZ19zaXplKQkJCQkJCVwKK3R5 cGVkZWYgc3RydWN0IHsJCQkJCQkJXAorCXR5cGUgdm9sYXRpbGUgcmVwcjsJCQkJCQlcCit9IGF0 b21pY18jI3Nob3J0X3R5cGUjI190OwkJCQkJCVwKKwkJCQkJCQkJCVwKK0FUT01JQ19JTkxJTkUg dHlwZQkJCQkJCQlcCithdG9taWNfbG9hZF8jI3Nob3J0X3R5cGUoY29uc3QgYXRvbWljXyMjc2hv cnRfdHlwZSMjX3QgKmEsCQlcCisgICAgYXRvbWljX21lbW9yeV9vcmRlcl90IG1vKSB7CQkJCQkJ XAorCWlmIChtbyA9PSBhdG9taWNfbWVtb3J5X29yZGVyX3NlcV9jc3QpIHsJCQlcCisJCWF0b21p Y19wcmVfc2NfbG9hZF9mZW5jZSgpOwkJCQlcCisJfQkJCQkJCQkJXAorCXR5cGUgcmVzdWx0ID0g YS0+cmVwcjsJCQkJCQlcCisJaWYgKG1vICE9IGF0b21pY19tZW1vcnlfb3JkZXJfcmVsYXhlZCkg ewkJCVwKKwkJYXRvbWljX2ZlbmNlKGF0b21pY19tZW1vcnlfb3JkZXJfYWNxdWlyZSk7CQlcCisJ fQkJCQkJCQkJXAorCXJldHVybiByZXN1bHQ7CQkJCQkJCVwKK30JCQkJCQkJCQlcCisJCQkJCQkJ CQlcCitBVE9NSUNfSU5MSU5FIHZvaWQJCQkJCQkJXAorYXRvbWljX3N0b3JlXyMjc2hvcnRfdHlw ZShhdG9taWNfIyNzaG9ydF90eXBlIyNfdCAqYSwJCQlcCisgICAgdHlwZSB2YWwsIGF0b21pY19t ZW1vcnlfb3JkZXJfdCBtbykgewkJCQlcCisJaWYgKG1vICE9IGF0b21pY19tZW1vcnlfb3JkZXJf cmVsYXhlZCkgewkJCVwKKwkJYXRvbWljX2ZlbmNlKGF0b21pY19tZW1vcnlfb3JkZXJfcmVsZWFz ZSk7CQlcCisJfQkJCQkJCQkJXAorCWEtPnJlcHIgPSB2YWw7CQkJCQkJCVwKKwlpZiAobW8gPT0g YXRvbWljX21lbW9yeV9vcmRlcl9zZXFfY3N0KSB7CQkJXAorCQlhdG9taWNfcG9zdF9zY19zdG9y ZV9mZW5jZSgpOwkJCQlcCisJfQkJCQkJCQkJXAorfQkJCQkJCQkJCVwKKwkJCQkJCQkJCVwKK0FU T01JQ19JTkxJTkUgdHlwZQkJCQkJCQlcCithdG9taWNfZXhjaGFuZ2VfIyNzaG9ydF90eXBlKGF0 b21pY18jI3Nob3J0X3R5cGUjI190ICphLCB0eXBlIHZhbCwgXAorICAgIGF0b21pY19tZW1vcnlf b3JkZXJfdCBtbykgeyAgICAgICAgICAgICAgICAgIAkJCQkJIFwKKwkvKgkJCQkJCQkJXAorCSAq IEJlY2F1c2Ugb2YgRnJlZUJTRCwgd2UgY2FyZSBhYm91dCBnY2MgNC4yLCB3aGljaCBkb2Vzbid0 IGhhdmVcCisJICogYW4gYXRvbWljIGV4Y2hhbmdlIGJ1aWx0aW4uICBXZSBmYWtlIGl0IHdpdGgg YSBDQVMgbG9vcC4JXAorCSAqLwkJCQkJCQkJXAorCXdoaWxlICh0cnVlKSB7CQkJCQkJCVwKKwkJ dHlwZSBvbGQgPSBhLT5yZXByOwkJCQkJXAorCQlpZiAoX19zeW5jX2Jvb2xfY29tcGFyZV9hbmRf c3dhcCgmYS0+cmVwciwgb2xkLCB2YWwpKSB7CVwKKwkJCXJldHVybiBvbGQ7CQkJCQlcCisJCX0J CQkJCQkJXAorCX0JCQkJCQkJCVwKK30JCQkJCQkJCQlcCisJCQkJCQkJCQlcCitBVE9NSUNfSU5M SU5FIGJvb2wJCQkJCQkJXAorYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfd2Vha18jI3Nob3J0X3R5 cGUoYXRvbWljXyMjc2hvcnRfdHlwZSMjX3QgKmEsCVwKKyAgICB0eXBlICpleHBlY3RlZCwgdHlw ZSBkZXNpcmVkLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgYXRv bWljX21lbW9yeV9vcmRlcl90IHN1Y2Nlc3NfbW8sICAgICAgICAgICAgICAgICAgICAgICAgICBc CisgICAgYXRvbWljX21lbW9yeV9vcmRlcl90IGZhaWx1cmVfbW8pIHsJCQkJICAgICAgICAgICAg ICAgIFwKKwl0eXBlIHByZXYgPSBfX3N5bmNfdmFsX2NvbXBhcmVfYW5kX3N3YXAoJmEtPnJlcHIs ICpleHBlY3RlZCwJXAorCSAgICBkZXNpcmVkKTsJCQkJCQkJXAorCWlmIChwcmV2ID09ICpleHBl Y3RlZCkgewkJCQkJXAorCQlyZXR1cm4gdHJ1ZTsJCQkJCQlcCisJfSBlbHNlIHsJCQkJCQkJXAor CQkqZXhwZWN0ZWQgPSBwcmV2OwkJCQkJXAorCQlyZXR1cm4gZmFsc2U7CQkJCQkJXAorCX0JCQkJ CQkJCVwKK30JCQkJCQkJCQlcCitBVE9NSUNfSU5MSU5FIGJvb2wJCQkJCQkJXAorYXRvbWljX2Nv bXBhcmVfZXhjaGFuZ2Vfc3Ryb25nXyMjc2hvcnRfdHlwZShhdG9taWNfIyNzaG9ydF90eXBlIyNf dCAqYSwJXAorICAgIHR5cGUgKmV4cGVjdGVkLCB0eXBlIGRlc2lyZWQsICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGF0b21pY19tZW1vcnlfb3JkZXJfdCBzdWNj ZXNzX21vLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgYXRvbWljX21lbW9yeV9v cmRlcl90IGZhaWx1cmVfbW8pIHsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwl0eXBlIHBy ZXYgPSBfX3N5bmNfdmFsX2NvbXBhcmVfYW5kX3N3YXAoJmEtPnJlcHIsICpleHBlY3RlZCwJXAor CSAgICBkZXNpcmVkKTsJCQkJCQkJXAorCWlmIChwcmV2ID09ICpleHBlY3RlZCkgewkJCQkJXAor CQlyZXR1cm4gdHJ1ZTsJCQkJCQlcCisJfSBlbHNlIHsJCQkJCQkJXAorCQkqZXhwZWN0ZWQgPSBw cmV2OwkJCQkJXAorCQlyZXR1cm4gZmFsc2U7CQkJCQkJXAorCX0JCQkJCQkJCVwKK30KKworI2Rl ZmluZSBKRU1BTExPQ19HRU5FUkFURV9JTlRfQVRPTUlDUyh0eXBlLCBzaG9ydF90eXBlLAkJCVwK KyAgICAvKiB1bnVzZWQgKi8gbGdfc2l6ZSkJCQkJCQlcCitKRU1BTExPQ19HRU5FUkFURV9BVE9N SUNTKHR5cGUsIHNob3J0X3R5cGUsIC8qIHVudXNlZCAqLyBsZ19zaXplKQlcCisJCQkJCQkJCQlc CitBVE9NSUNfSU5MSU5FIHR5cGUJCQkJCQkJXAorYXRvbWljX2ZldGNoX2FkZF8jI3Nob3J0X3R5 cGUoYXRvbWljXyMjc2hvcnRfdHlwZSMjX3QgKmEsIHR5cGUgdmFsLAlcCisgICAgYXRvbWljX21l bW9yeV9vcmRlcl90IG1vKSB7CQkJCQkJXAorCXJldHVybiBfX3N5bmNfZmV0Y2hfYW5kX2FkZCgm YS0+cmVwciwgdmFsKTsJCQlcCit9CQkJCQkJCQkJXAorCQkJCQkJCQkJXAorQVRPTUlDX0lOTElO RSB0eXBlCQkJCQkJCVwKK2F0b21pY19mZXRjaF9zdWJfIyNzaG9ydF90eXBlKGF0b21pY18jI3No b3J0X3R5cGUjI190ICphLCB0eXBlIHZhbCwJXAorICAgIGF0b21pY19tZW1vcnlfb3JkZXJfdCBt bykgewkJCQkJCVwKKwlyZXR1cm4gX19zeW5jX2ZldGNoX2FuZF9zdWIoJmEtPnJlcHIsIHZhbCk7 CQkJXAorfQkJCQkJCQkJCVwKKwkJCQkJCQkJCVwKK0FUT01JQ19JTkxJTkUgdHlwZQkJCQkJCQlc CithdG9taWNfZmV0Y2hfYW5kXyMjc2hvcnRfdHlwZShhdG9taWNfIyNzaG9ydF90eXBlIyNfdCAq YSwgdHlwZSB2YWwsCVwKKyAgICBhdG9taWNfbWVtb3J5X29yZGVyX3QgbW8pIHsJCQkJCQlcCisJ cmV0dXJuIF9fc3luY19mZXRjaF9hbmRfYW5kKCZhLT5yZXByLCB2YWwpOwkJCVwKK30JCQkJCQkJ CQlcCisJCQkJCQkJCQlcCitBVE9NSUNfSU5MSU5FIHR5cGUJCQkJCQkJXAorYXRvbWljX2ZldGNo X29yXyMjc2hvcnRfdHlwZShhdG9taWNfIyNzaG9ydF90eXBlIyNfdCAqYSwgdHlwZSB2YWwsCVwK KyAgICBhdG9taWNfbWVtb3J5X29yZGVyX3QgbW8pIHsJCQkJCQlcCisJcmV0dXJuIF9fc3luY19m ZXRjaF9hbmRfb3IoJmEtPnJlcHIsIHZhbCk7CQkJXAorfQkJCQkJCQkJCVwKKwkJCQkJCQkJCVwK K0FUT01JQ19JTkxJTkUgdHlwZQkJCQkJCQlcCithdG9taWNfZmV0Y2hfeG9yXyMjc2hvcnRfdHlw ZShhdG9taWNfIyNzaG9ydF90eXBlIyNfdCAqYSwgdHlwZSB2YWwsCVwKKyAgICBhdG9taWNfbWVt b3J5X29yZGVyX3QgbW8pIHsJCQkJCQlcCisJcmV0dXJuIF9fc3luY19mZXRjaF9hbmRfeG9yKCZh LT5yZXByLCB2YWwpOwkJCVwKK30KKworI2VuZGlmIC8qIEpFTUFMTE9DX0lOVEVSTkFMX0FUT01J Q19HQ0NfU1lOQ19IICovCgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVt YWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9hdG9taWNfbXN2Yy5oIGIvMzg5 LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRl cm5hbC9hdG9taWNfbXN2Yy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3 MDU3Y2UKLS0tIC9kZXYvbnVsbAorKysgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxv Yy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL2F0b21pY19tc3ZjLmgKQEAgLTAsMCAr MSwxNTggQEAKKyNpZm5kZWYgSkVNQUxMT0NfSU5URVJOQUxfQVRPTUlDX01TVkNfSAorI2RlZmlu ZSBKRU1BTExPQ19JTlRFUk5BTF9BVE9NSUNfTVNWQ19ICisKKyNkZWZpbmUgQVRPTUlDX0lOSVQo Li4uKSB7X19WQV9BUkdTX199CisKK3R5cGVkZWYgZW51bSB7CisJYXRvbWljX21lbW9yeV9vcmRl cl9yZWxheGVkLAorCWF0b21pY19tZW1vcnlfb3JkZXJfYWNxdWlyZSwKKwlhdG9taWNfbWVtb3J5 X29yZGVyX3JlbGVhc2UsCisJYXRvbWljX21lbW9yeV9vcmRlcl9hY3FfcmVsLAorCWF0b21pY19t ZW1vcnlfb3JkZXJfc2VxX2NzdAorfSBhdG9taWNfbWVtb3J5X29yZGVyX3Q7CisKK3R5cGVkZWYg Y2hhciBhdG9taWNfcmVwcl8wX3Q7Cit0eXBlZGVmIHNob3J0IGF0b21pY19yZXByXzFfdDsKK3R5 cGVkZWYgbG9uZyBhdG9taWNfcmVwcl8yX3Q7Cit0eXBlZGVmIF9faW50NjQgYXRvbWljX3JlcHJf M190OworCitBVE9NSUNfSU5MSU5FIHZvaWQKK2F0b21pY19mZW5jZShhdG9taWNfbWVtb3J5X29y ZGVyX3QgbW8pIHsKKwlfUmVhZFdyaXRlQmFycmllcigpOworIyAgaWYgZGVmaW5lZChfTV9BUk0p IHx8IGRlZmluZWQoX01fQVJNNjQpCisJLyogQVJNIG5lZWRzIGEgYmFycmllciBmb3IgZXZlcnl0 aGluZyBidXQgcmVsYXhlZC4gKi8KKwlpZiAobW8gIT0gYXRvbWljX21lbW9yeV9vcmRlcl9yZWxh eGVkKSB7CisJCU1lbW9yeUJhcnJpZXIoKTsKKwl9CisjICBlbGlmIGRlZmluZWQoX01fSVg4Nikg fHwgZGVmaW5lZCAoX01fWDY0KQorCS8qIHg4NiBuZWVkcyBhIGJhcnJpZXIgb25seSBmb3Igc2Vx X2NzdC4gKi8KKwlpZiAobW8gPT0gYXRvbWljX21lbW9yeV9vcmRlcl9zZXFfY3N0KSB7CisJCU1l bW9yeUJhcnJpZXIoKTsKKwl9CisjICBlbHNlCisjICBlcnJvciAiRG9uJ3Qga25vdyBob3cgdG8g Y3JlYXRlIGF0b21pY3MgZm9yIHRoaXMgcGxhdGZvcm0gZm9yIE1TVkMuIgorIyAgZW5kaWYKKwlf UmVhZFdyaXRlQmFycmllcigpOworfQorCisjZGVmaW5lIEFUT01JQ19JTlRFUkxPQ0tFRF9SRVBS KGxnX3NpemUpIGF0b21pY19yZXByXyAjIyBsZ19zaXplICMjIF90CisKKyNkZWZpbmUgQVRPTUlD X0NPTkNBVChhLCBiKSBBVE9NSUNfUkFXX0NPTkNBVChhLCBiKQorI2RlZmluZSBBVE9NSUNfUkFX X0NPTkNBVChhLCBiKSBhICMjIGIKKworI2RlZmluZSBBVE9NSUNfSU5URVJMT0NLRURfTkFNRShi YXNlX25hbWUsIGxnX3NpemUpIEFUT01JQ19DT05DQVQoCVwKKyAgICBiYXNlX25hbWUsIEFUT01J Q19JTlRFUkxPQ0tFRF9TVUZGSVgobGdfc2l6ZSkpCisKKyNkZWZpbmUgQVRPTUlDX0lOVEVSTE9D S0VEX1NVRkZJWChsZ19zaXplKQkJCQlcCisgICAgQVRPTUlDX0NPTkNBVChBVE9NSUNfSU5URVJM T0NLRURfU1VGRklYXywgbGdfc2l6ZSkKKworI2RlZmluZSBBVE9NSUNfSU5URVJMT0NLRURfU1VG RklYXzAgOAorI2RlZmluZSBBVE9NSUNfSU5URVJMT0NLRURfU1VGRklYXzEgMTYKKyNkZWZpbmUg QVRPTUlDX0lOVEVSTE9DS0VEX1NVRkZJWF8yCisjZGVmaW5lIEFUT01JQ19JTlRFUkxPQ0tFRF9T VUZGSVhfMyA2NAorCisjZGVmaW5lIEpFTUFMTE9DX0dFTkVSQVRFX0FUT01JQ1ModHlwZSwgc2hv cnRfdHlwZSwgbGdfc2l6ZSkJCVwKK3R5cGVkZWYgc3RydWN0IHsJCQkJCQkJXAorCUFUT01JQ19J TlRFUkxPQ0tFRF9SRVBSKGxnX3NpemUpIHJlcHI7CQkJCVwKK30gYXRvbWljXyMjc2hvcnRfdHlw ZSMjX3Q7CQkJCQkJXAorCQkJCQkJCQkJXAorQVRPTUlDX0lOTElORSB0eXBlCQkJCQkJCVwKK2F0 b21pY19sb2FkXyMjc2hvcnRfdHlwZShjb25zdCBhdG9taWNfIyNzaG9ydF90eXBlIyNfdCAqYSwJ CVwKKyAgICBhdG9taWNfbWVtb3J5X29yZGVyX3QgbW8pIHsJCQkJCQlcCisJQVRPTUlDX0lOVEVS TE9DS0VEX1JFUFIobGdfc2l6ZSkgcmV0ID0gYS0+cmVwcjsJCQlcCisJaWYgKG1vICE9IGF0b21p Y19tZW1vcnlfb3JkZXJfcmVsYXhlZCkgewkJCVwKKwkJYXRvbWljX2ZlbmNlKGF0b21pY19tZW1v cnlfb3JkZXJfYWNxdWlyZSk7CQlcCisJfQkJCQkJCQkJXAorCXJldHVybiAodHlwZSkgcmV0OwkJ CQkJCVwKK30JCQkJCQkJCQlcCisJCQkJCQkJCQlcCitBVE9NSUNfSU5MSU5FIHZvaWQJCQkJCQkJ XAorYXRvbWljX3N0b3JlXyMjc2hvcnRfdHlwZShhdG9taWNfIyNzaG9ydF90eXBlIyNfdCAqYSwJ CQlcCisgICAgdHlwZSB2YWwsIGF0b21pY19tZW1vcnlfb3JkZXJfdCBtbykgewkJCQlcCisJaWYg KG1vICE9IGF0b21pY19tZW1vcnlfb3JkZXJfcmVsYXhlZCkgewkJCVwKKwkJYXRvbWljX2ZlbmNl KGF0b21pY19tZW1vcnlfb3JkZXJfcmVsZWFzZSk7CQlcCisJfQkJCQkJCQkJXAorCWEtPnJlcHIg PSAoQVRPTUlDX0lOVEVSTE9DS0VEX1JFUFIobGdfc2l6ZSkpIHZhbDsJCVwKKwlpZiAobW8gPT0g YXRvbWljX21lbW9yeV9vcmRlcl9zZXFfY3N0KSB7CQkJXAorCQlhdG9taWNfZmVuY2UoYXRvbWlj X21lbW9yeV9vcmRlcl9zZXFfY3N0KTsJCVwKKwl9CQkJCQkJCQlcCit9CQkJCQkJCQkJXAorCQkJ CQkJCQkJXAorQVRPTUlDX0lOTElORSB0eXBlCQkJCQkJCVwKK2F0b21pY19leGNoYW5nZV8jI3No b3J0X3R5cGUoYXRvbWljXyMjc2hvcnRfdHlwZSMjX3QgKmEsIHR5cGUgdmFsLAlcCisgICAgYXRv bWljX21lbW9yeV9vcmRlcl90IG1vKSB7CQkJCQkJXAorCXJldHVybiAodHlwZSlBVE9NSUNfSU5U RVJMT0NLRURfTkFNRShfSW50ZXJsb2NrZWRFeGNoYW5nZSwJXAorCSAgICBsZ19zaXplKSgmYS0+ cmVwciwgKEFUT01JQ19JTlRFUkxPQ0tFRF9SRVBSKGxnX3NpemUpKXZhbCk7CVwKK30JCQkJCQkJ CQlcCisJCQkJCQkJCQlcCitBVE9NSUNfSU5MSU5FIGJvb2wJCQkJCQkJXAorYXRvbWljX2NvbXBh cmVfZXhjaGFuZ2Vfd2Vha18jI3Nob3J0X3R5cGUoYXRvbWljXyMjc2hvcnRfdHlwZSMjX3QgKmEs CVwKKyAgICB0eXBlICpleHBlY3RlZCwgdHlwZSBkZXNpcmVkLCBhdG9taWNfbWVtb3J5X29yZGVy X3Qgc3VjY2Vzc19tbywJXAorICAgIGF0b21pY19tZW1vcnlfb3JkZXJfdCBmYWlsdXJlX21vKSB7 CQkJCQlcCisJQVRPTUlDX0lOVEVSTE9DS0VEX1JFUFIobGdfc2l6ZSkgZSA9CQkJCVwKKwkgICAg KEFUT01JQ19JTlRFUkxPQ0tFRF9SRVBSKGxnX3NpemUpKSpleHBlY3RlZDsJCVwKKwlBVE9NSUNf SU5URVJMT0NLRURfUkVQUihsZ19zaXplKSBkID0JCQkJXAorCSAgICAoQVRPTUlDX0lOVEVSTE9D S0VEX1JFUFIobGdfc2l6ZSkpZGVzaXJlZDsJCQlcCisJQVRPTUlDX0lOVEVSTE9DS0VEX1JFUFIo bGdfc2l6ZSkgb2xkID0JCQkJXAorCSAgICBBVE9NSUNfSU5URVJMT0NLRURfTkFNRShfSW50ZXJs b2NrZWRDb21wYXJlRXhjaGFuZ2UsIAlcCisJCWxnX3NpemUpKCZhLT5yZXByLCBkLCBlKTsJCQkJ XAorCWlmIChvbGQgPT0gZSkgewkJCQkJCQlcCisJCXJldHVybiB0cnVlOwkJCQkJCVwKKwl9IGVs c2UgewkJCQkJCQlcCisJCSpleHBlY3RlZCA9ICh0eXBlKW9sZDsJCQkJCVwKKwkJcmV0dXJuIGZh bHNlOwkJCQkJCVwKKwl9CQkJCQkJCQlcCit9CQkJCQkJCQkJXAorCQkJCQkJCQkJXAorQVRPTUlD X0lOTElORSBib29sCQkJCQkJCVwKK2F0b21pY19jb21wYXJlX2V4Y2hhbmdlX3N0cm9uZ18jI3No b3J0X3R5cGUoYXRvbWljXyMjc2hvcnRfdHlwZSMjX3QgKmEsCVwKKyAgICB0eXBlICpleHBlY3Rl ZCwgdHlwZSBkZXNpcmVkLCBhdG9taWNfbWVtb3J5X29yZGVyX3Qgc3VjY2Vzc19tbywJXAorICAg IGF0b21pY19tZW1vcnlfb3JkZXJfdCBmYWlsdXJlX21vKSB7CQkJCQlcCisJLyogV2UgaW1wbGVt ZW50IHRoZSB3ZWFrIHZlcnNpb24gd2l0aCBzdHJvbmcgc2VtYW50aWNzLiAqLwlcCisJcmV0dXJu IGF0b21pY19jb21wYXJlX2V4Y2hhbmdlX3dlYWtfIyNzaG9ydF90eXBlKGEsIGV4cGVjdGVkLAlc CisJICAgIGRlc2lyZWQsIHN1Y2Nlc3NfbW8sIGZhaWx1cmVfbW8pOwkJCQlcCit9CisKKworI2Rl ZmluZSBKRU1BTExPQ19HRU5FUkFURV9JTlRfQVRPTUlDUyh0eXBlLCBzaG9ydF90eXBlLCBsZ19z aXplKQlcCitKRU1BTExPQ19HRU5FUkFURV9BVE9NSUNTKHR5cGUsIHNob3J0X3R5cGUsIGxnX3Np emUpCQkJXAorCQkJCQkJCQkJXAorQVRPTUlDX0lOTElORSB0eXBlCQkJCQkJCVwKK2F0b21pY19m ZXRjaF9hZGRfIyNzaG9ydF90eXBlKGF0b21pY18jI3Nob3J0X3R5cGUjI190ICphLAkJXAorICAg IHR5cGUgdmFsLCBhdG9taWNfbWVtb3J5X29yZGVyX3QgbW8pIHsJCQkJXAorCXJldHVybiAodHlw ZSlBVE9NSUNfSU5URVJMT0NLRURfTkFNRShfSW50ZXJsb2NrZWRFeGNoYW5nZUFkZCwJXAorCSAg ICBsZ19zaXplKSgmYS0+cmVwciwgKEFUT01JQ19JTlRFUkxPQ0tFRF9SRVBSKGxnX3NpemUpKXZh bCk7CVwKK30JCQkJCQkJCQlcCisJCQkJCQkJCQlcCitBVE9NSUNfSU5MSU5FIHR5cGUJCQkJCQkJ XAorYXRvbWljX2ZldGNoX3N1Yl8jI3Nob3J0X3R5cGUoYXRvbWljXyMjc2hvcnRfdHlwZSMjX3Qg KmEsCQlcCisgICAgdHlwZSB2YWwsIGF0b21pY19tZW1vcnlfb3JkZXJfdCBtbykgewkJCQlcCisJ LyoJCQkJCQkJCVwKKwkgKiBNU1ZDIHdhcm5zIG9uIG5lZ2F0aW9uIG9mIHVuc2lnbmVkIG9wZXJh bmRzLCBidXQgZm9yIHVzIGl0CVwKKwkgKiBnaXZlcyBleGFjdGx5IHRoZSByaWdodCBzZW1hbnRp Y3MgKE1BWF9UWVBFICsgMSAtIG9wZXJhbmQpLglcCisJICovCQkJCQkJCQlcCisJX19wcmFnbWEo d2FybmluZyhwdXNoKSkJCQkJCQlcCisJX19wcmFnbWEod2FybmluZyhkaXNhYmxlOiA0MTQ2KSkJ CQkJXAorCXJldHVybiBhdG9taWNfZmV0Y2hfYWRkXyMjc2hvcnRfdHlwZShhLCAtdmFsLCBtbyk7 CQlcCisJX19wcmFnbWEod2FybmluZyhwb3ApKQkJCQkJCVwKK30JCQkJCQkJCQlcCitBVE9NSUNf SU5MSU5FIHR5cGUJCQkJCQkJXAorYXRvbWljX2ZldGNoX2FuZF8jI3Nob3J0X3R5cGUoYXRvbWlj XyMjc2hvcnRfdHlwZSMjX3QgKmEsCQlcCisgICAgdHlwZSB2YWwsIGF0b21pY19tZW1vcnlfb3Jk ZXJfdCBtbykgewkJCQlcCisJcmV0dXJuICh0eXBlKUFUT01JQ19JTlRFUkxPQ0tFRF9OQU1FKF9J bnRlcmxvY2tlZEFuZCwgbGdfc2l6ZSkoCVwKKwkgICAgJmEtPnJlcHIsIChBVE9NSUNfSU5URVJM T0NLRURfUkVQUihsZ19zaXplKSl2YWwpOwkJXAorfQkJCQkJCQkJCVwKK0FUT01JQ19JTkxJTkUg dHlwZQkJCQkJCQlcCithdG9taWNfZmV0Y2hfb3JfIyNzaG9ydF90eXBlKGF0b21pY18jI3Nob3J0 X3R5cGUjI190ICphLAkJXAorICAgIHR5cGUgdmFsLCBhdG9taWNfbWVtb3J5X29yZGVyX3QgbW8p IHsJCQkJXAorCXJldHVybiAodHlwZSlBVE9NSUNfSU5URVJMT0NLRURfTkFNRShfSW50ZXJsb2Nr ZWRPciwgbGdfc2l6ZSkoCVwKKwkgICAgJmEtPnJlcHIsIChBVE9NSUNfSU5URVJMT0NLRURfUkVQ UihsZ19zaXplKSl2YWwpOwkJXAorfQkJCQkJCQkJCVwKK0FUT01JQ19JTkxJTkUgdHlwZQkJCQkJ CQlcCithdG9taWNfZmV0Y2hfeG9yXyMjc2hvcnRfdHlwZShhdG9taWNfIyNzaG9ydF90eXBlIyNf dCAqYSwJCVwKKyAgICB0eXBlIHZhbCwgYXRvbWljX21lbW9yeV9vcmRlcl90IG1vKSB7CQkJCVwK KwlyZXR1cm4gKHR5cGUpQVRPTUlDX0lOVEVSTE9DS0VEX05BTUUoX0ludGVybG9ja2VkWG9yLCBs Z19zaXplKSgJXAorCSAgICAmYS0+cmVwciwgKEFUT01JQ19JTlRFUkxPQ0tFRF9SRVBSKGxnX3Np emUpKXZhbCk7CQlcCit9CisKKyNlbmRpZiAvKiBKRU1BTExPQ19JTlRFUk5BTF9BVE9NSUNfTVNW Q19IICovCgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4z LjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9iYWNrZ3JvdW5kX3RocmVhZF9leHRlcm5zLmgg Yi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9j L2ludGVybmFsL2JhY2tncm91bmRfdGhyZWFkX2V4dGVybnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwLi42YWUzYzhkCi0tLSAvZGV2L251bGwKKysrIGIvMzg5LWRzLWJhc2Ut My4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9iYWNr Z3JvdW5kX3RocmVhZF9leHRlcm5zLmgKQEAgLTAsMCArMSwzMyBAQAorI2lmbmRlZiBKRU1BTExP Q19JTlRFUk5BTF9CQUNLR1JPVU5EX1RIUkVBRF9FWFRFUk5TX0gKKyNkZWZpbmUgSkVNQUxMT0Nf SU5URVJOQUxfQkFDS0dST1VORF9USFJFQURfRVhURVJOU19ICisKK2V4dGVybiBib29sIG9wdF9i YWNrZ3JvdW5kX3RocmVhZDsKK2V4dGVybiBzaXplX3Qgb3B0X21heF9iYWNrZ3JvdW5kX3RocmVh ZHM7CitleHRlcm4gbWFsbG9jX211dGV4X3QgYmFja2dyb3VuZF90aHJlYWRfbG9jazsKK2V4dGVy biBhdG9taWNfYl90IGJhY2tncm91bmRfdGhyZWFkX2VuYWJsZWRfc3RhdGU7CitleHRlcm4gc2l6 ZV90IG5fYmFja2dyb3VuZF90aHJlYWRzOworZXh0ZXJuIHNpemVfdCBtYXhfYmFja2dyb3VuZF90 aHJlYWRzOworZXh0ZXJuIGJhY2tncm91bmRfdGhyZWFkX2luZm9fdCAqYmFja2dyb3VuZF90aHJl YWRfaW5mbzsKKworYm9vbCBiYWNrZ3JvdW5kX3RocmVhZF9jcmVhdGUodHNkX3QgKnRzZCwgdW5z aWduZWQgYXJlbmFfaW5kKTsKK2Jvb2wgYmFja2dyb3VuZF90aHJlYWRzX2VuYWJsZSh0c2RfdCAq dHNkKTsKK2Jvb2wgYmFja2dyb3VuZF90aHJlYWRzX2Rpc2FibGUodHNkX3QgKnRzZCk7Citib29s IGJhY2tncm91bmRfdGhyZWFkX2lzX3N0YXJ0ZWQoYmFja2dyb3VuZF90aHJlYWRfaW5mb190KiBp bmZvKTsKK3ZvaWQgYmFja2dyb3VuZF90aHJlYWRfd2FrZXVwX2Vhcmx5KGJhY2tncm91bmRfdGhy ZWFkX2luZm9fdCAqaW5mbywKKyAgICBuc3RpbWVfdCAqcmVtYWluaW5nX3NsZWVwKTsKK3ZvaWQg YmFja2dyb3VuZF90aHJlYWRfcHJlZm9yazAodHNkbl90ICp0c2RuKTsKK3ZvaWQgYmFja2dyb3Vu ZF90aHJlYWRfcHJlZm9yazEodHNkbl90ICp0c2RuKTsKK3ZvaWQgYmFja2dyb3VuZF90aHJlYWRf cG9zdGZvcmtfcGFyZW50KHRzZG5fdCAqdHNkbik7Cit2b2lkIGJhY2tncm91bmRfdGhyZWFkX3Bv c3Rmb3JrX2NoaWxkKHRzZG5fdCAqdHNkbik7Citib29sIGJhY2tncm91bmRfdGhyZWFkX3N0YXRz X3JlYWQodHNkbl90ICp0c2RuLAorICAgIGJhY2tncm91bmRfdGhyZWFkX3N0YXRzX3QgKnN0YXRz KTsKK3ZvaWQgYmFja2dyb3VuZF90aHJlYWRfY3RsX2luaXQodHNkbl90ICp0c2RuKTsKKworI2lm ZGVmIEpFTUFMTE9DX1BUSFJFQURfQ1JFQVRFX1dSQVBQRVIKK2V4dGVybiBpbnQgcHRocmVhZF9j cmVhdGVfd3JhcHBlcihwdGhyZWFkX3QgKl9fcmVzdHJpY3QsIGNvbnN0IHB0aHJlYWRfYXR0cl90 ICosCisgICAgdm9pZCAqKCopKHZvaWQgKiksIHZvaWQgKl9fcmVzdHJpY3QpOworI2VuZGlmCiti b29sIGJhY2tncm91bmRfdGhyZWFkX2Jvb3QwKHZvaWQpOworYm9vbCBiYWNrZ3JvdW5kX3RocmVh ZF9ib290MSh0c2RuX3QgKnRzZG4sIGJhc2VfdCAqYmFzZSk7CisKKyNlbmRpZiAvKiBKRU1BTExP Q19JTlRFUk5BTF9CQUNLR1JPVU5EX1RIUkVBRF9FWFRFUk5TX0ggKi8KCmRpZmYgLS1naXQgYS8z ODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2lu dGVybmFsL2JhY2tncm91bmRfdGhyZWFkX2lubGluZXMuaCBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1 aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvYmFja2dyb3VuZF90 aHJlYWRfaW5saW5lcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyYzVm ZWIKLS0tIC9kZXYvbnVsbAorKysgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01 LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL2JhY2tncm91bmRfdGhyZWFkX2lubGluZXMu aApAQCAtMCwwICsxLDQ4IEBACisjaWZuZGVmIEpFTUFMTE9DX0lOVEVSTkFMX0JBQ0tHUk9VTkRf VEhSRUFEX0lOTElORVNfSAorI2RlZmluZSBKRU1BTExPQ19JTlRFUk5BTF9CQUNLR1JPVU5EX1RI UkVBRF9JTkxJTkVTX0gKKworSkVNQUxMT0NfQUxXQVlTX0lOTElORSBib29sCitiYWNrZ3JvdW5k X3RocmVhZF9lbmFibGVkKHZvaWQpIHsKKwlyZXR1cm4gYXRvbWljX2xvYWRfYigmYmFja2dyb3Vu ZF90aHJlYWRfZW5hYmxlZF9zdGF0ZSwgQVRPTUlDX1JFTEFYRUQpOworfQorCitKRU1BTExPQ19B TFdBWVNfSU5MSU5FIHZvaWQKK2JhY2tncm91bmRfdGhyZWFkX2VuYWJsZWRfc2V0KHRzZG5fdCAq dHNkbiwgYm9vbCBzdGF0ZSkgeworCW1hbGxvY19tdXRleF9hc3NlcnRfb3duZXIodHNkbiwgJmJh Y2tncm91bmRfdGhyZWFkX2xvY2spOworCWF0b21pY19zdG9yZV9iKCZiYWNrZ3JvdW5kX3RocmVh ZF9lbmFibGVkX3N0YXRlLCBzdGF0ZSwgQVRPTUlDX1JFTEFYRUQpOworfQorCitKRU1BTExPQ19B TFdBWVNfSU5MSU5FIGJhY2tncm91bmRfdGhyZWFkX2luZm9fdCAqCithcmVuYV9iYWNrZ3JvdW5k X3RocmVhZF9pbmZvX2dldChhcmVuYV90ICphcmVuYSkgeworCXVuc2lnbmVkIGFyZW5hX2luZCA9 IGFyZW5hX2luZF9nZXQoYXJlbmEpOworCXJldHVybiAmYmFja2dyb3VuZF90aHJlYWRfaW5mb1th cmVuYV9pbmQgJSBtYXhfYmFja2dyb3VuZF90aHJlYWRzXTsKK30KKworSkVNQUxMT0NfQUxXQVlT X0lOTElORSBiYWNrZ3JvdW5kX3RocmVhZF9pbmZvX3QgKgorYmFja2dyb3VuZF90aHJlYWRfaW5m b19nZXQoc2l6ZV90IGluZCkgeworCXJldHVybiAmYmFja2dyb3VuZF90aHJlYWRfaW5mb1tpbmQg JSBtYXhfYmFja2dyb3VuZF90aHJlYWRzXTsKK30KKworSkVNQUxMT0NfQUxXQVlTX0lOTElORSB1 aW50NjRfdAorYmFja2dyb3VuZF90aHJlYWRfd2FrZXVwX3RpbWVfZ2V0KGJhY2tncm91bmRfdGhy ZWFkX2luZm9fdCAqaW5mbykgeworCXVpbnQ2NF90IG5leHRfd2FrZXVwID0gbnN0aW1lX25zKCZp bmZvLT5uZXh0X3dha2V1cCk7CisJYXNzZXJ0KGF0b21pY19sb2FkX2IoJmluZm8tPmluZGVmaW5p dGVfc2xlZXAsIEFUT01JQ19BQ1FVSVJFKSA9PQorCSAgICAobmV4dF93YWtldXAgPT0gQkFDS0dS T1VORF9USFJFQURfSU5ERUZJTklURV9TTEVFUCkpOworCXJldHVybiBuZXh0X3dha2V1cDsKK30K KworSkVNQUxMT0NfQUxXQVlTX0lOTElORSB2b2lkCitiYWNrZ3JvdW5kX3RocmVhZF93YWtldXBf dGltZV9zZXQodHNkbl90ICp0c2RuLCBiYWNrZ3JvdW5kX3RocmVhZF9pbmZvX3QgKmluZm8sCisg ICAgdWludDY0X3Qgd2FrZXVwX3RpbWUpIHsKKwltYWxsb2NfbXV0ZXhfYXNzZXJ0X293bmVyKHRz ZG4sICZpbmZvLT5tdHgpOworCWF0b21pY19zdG9yZV9iKCZpbmZvLT5pbmRlZmluaXRlX3NsZWVw LAorCSAgICB3YWtldXBfdGltZSA9PSBCQUNLR1JPVU5EX1RIUkVBRF9JTkRFRklOSVRFX1NMRUVQ LCBBVE9NSUNfUkVMRUFTRSk7CisJbnN0aW1lX2luaXQoJmluZm8tPm5leHRfd2FrZXVwLCB3YWtl dXBfdGltZSk7Cit9CisKK0pFTUFMTE9DX0FMV0FZU19JTkxJTkUgYm9vbAorYmFja2dyb3VuZF90 aHJlYWRfaW5kZWZpbml0ZV9zbGVlcChiYWNrZ3JvdW5kX3RocmVhZF9pbmZvX3QgKmluZm8pIHsK KwlyZXR1cm4gYXRvbWljX2xvYWRfYigmaW5mby0+aW5kZWZpbml0ZV9zbGVlcCwgQVRPTUlDX0FD UVVJUkUpOworfQorCisjZW5kaWYgLyogSkVNQUxMT0NfSU5URVJOQUxfQkFDS0dST1VORF9USFJF QURfSU5MSU5FU19IICovCgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVt YWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9iYWNrZ3JvdW5kX3RocmVhZF9z dHJ1Y3RzLmggYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRl L2plbWFsbG9jL2ludGVybmFsL2JhY2tncm91bmRfdGhyZWFkX3N0cnVjdHMuaApuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44M2E5MTk4Ci0tLSAvZGV2L251bGwKKysrIGIvMzg5 LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRl cm5hbC9iYWNrZ3JvdW5kX3RocmVhZF9zdHJ1Y3RzLmgKQEAgLTAsMCArMSw2NiBAQAorI2lmbmRl ZiBKRU1BTExPQ19JTlRFUk5BTF9CQUNLR1JPVU5EX1RIUkVBRF9TVFJVQ1RTX0gKKyNkZWZpbmUg SkVNQUxMT0NfSU5URVJOQUxfQkFDS0dST1VORF9USFJFQURfU1RSVUNUU19ICisKKy8qIFRoaXMg ZmlsZSByZWFsbHkgY29tYmluZXMgInN0cnVjdHMiIGFuZCAidHlwZXMiLCBidXQgb25seSB0cmFu c2l0aW9uYWxseS4gKi8KKworI2lmIGRlZmluZWQoSkVNQUxMT0NfQkFDS0dST1VORF9USFJFQUQp IHx8IGRlZmluZWQoSkVNQUxMT0NfTEFaWV9MT0NLKQorIyAgZGVmaW5lIEpFTUFMTE9DX1BUSFJF QURfQ1JFQVRFX1dSQVBQRVIKKyNlbmRpZgorCisjZGVmaW5lIEJBQ0tHUk9VTkRfVEhSRUFEX0lO REVGSU5JVEVfU0xFRVAgVUlOVDY0X01BWAorI2RlZmluZSBNQVhfQkFDS0dST1VORF9USFJFQURf TElNSVQgTUFMTE9DWF9BUkVOQV9MSU1JVAorI2RlZmluZSBERUZBVUxUX05VTV9CQUNLR1JPVU5E X1RIUkVBRCA0CisKKy8qCisgKiBUaGVzZSBleGlzdCBvbmx5IGFzIGEgdHJhbnNpdGlvbmFsIHN0 YXRlLiAgRXZlbnR1YWxseSwgZGVmZXJyYWwgc2hvdWxkIGJlCisgKiBwYXJ0IG9mIHRoZSBQQUks IGFuZCBlYWNoIGltcGxlbWVudGF0aW9uIGNhbiBpbmRpY2F0ZSB3YWl0IHRpbWVzIHdpdGggbW9y ZQorICogc3BlY2lmaWNpdHkuCisgKi8KKyNkZWZpbmUgQkFDS0dST1VORF9USFJFQURfSFBBX0lO VEVSVkFMX01BWF9VTklOSVRJQUxJWkVEICgtMikKKyNkZWZpbmUgQkFDS0dST1VORF9USFJFQURf SFBBX0lOVEVSVkFMX01BWF9ERUZBVUxUX1dIRU5fRU5BQkxFRCA1MDAwCisKKyNkZWZpbmUgQkFD S0dST1VORF9USFJFQURfREVGRVJSRURfTUlOIFVJTlQ2NF9DKDApCisjZGVmaW5lIEJBQ0tHUk9V TkRfVEhSRUFEX0RFRkVSUkVEX01BWCBVSU5UNjRfTUFYCisKK3R5cGVkZWYgZW51bSB7CisJYmFj a2dyb3VuZF90aHJlYWRfc3RvcHBlZCwKKwliYWNrZ3JvdW5kX3RocmVhZF9zdGFydGVkLAorCS8q IFRocmVhZCB3YWl0cyBvbiB0aGUgZ2xvYmFsIGxvY2sgd2hlbiBwYXVzZWQgKGZvciBhcmVuYV9y ZXNldCkuICovCisJYmFja2dyb3VuZF90aHJlYWRfcGF1c2VkLAorfSBiYWNrZ3JvdW5kX3RocmVh ZF9zdGF0ZV90OworCitzdHJ1Y3QgYmFja2dyb3VuZF90aHJlYWRfaW5mb19zIHsKKyNpZmRlZiBK RU1BTExPQ19CQUNLR1JPVU5EX1RIUkVBRAorCS8qIEJhY2tncm91bmQgdGhyZWFkIGlzIHB0aHJl YWQgc3BlY2lmaWMuICovCisJcHRocmVhZF90CQl0aHJlYWQ7CisJcHRocmVhZF9jb25kX3QJCWNv bmQ7CisjZW5kaWYKKwltYWxsb2NfbXV0ZXhfdAkJbXR4OworCWJhY2tncm91bmRfdGhyZWFkX3N0 YXRlX3QJc3RhdGU7CisJLyogV2hlbiB0cnVlLCBpdCBtZWFucyBubyB3YWtldXAgc2NoZWR1bGVk LiAqLworCWF0b21pY19iX3QJCWluZGVmaW5pdGVfc2xlZXA7CisJLyogTmV4dCBzY2hlZHVsZWQg d2FrZXVwIHRpbWUgKGFic29sdXRlIHRpbWUgaW4gbnMpLiAqLworCW5zdGltZV90CQluZXh0X3dh a2V1cDsKKwkvKgorCSAqICBTaW5jZSB0aGUgbGFzdCBiYWNrZ3JvdW5kIHRocmVhZCBydW4sIG5l d2x5IGFkZGVkIG51bWJlciBvZiBwYWdlcworCSAqICB0aGF0IG5lZWQgdG8gYmUgcHVyZ2VkIGJ5 IHRoZSBuZXh0IHdha2V1cC4gIFRoaXMgaXMgYWRqdXN0ZWQgb24KKwkgKiAgZXBvY2ggYWR2YW5j ZSwgYW5kIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgd2Ugc2hvdWxkIHNpZ25hbCB0aGUK KwkgKiAgYmFja2dyb3VuZCB0aHJlYWQgdG8gd2FrZSB1cCBlYXJsaWVyLgorCSAqLworCXNpemVf dAkJCW5wYWdlc190b19wdXJnZV9uZXc7CisJLyogU3RhdHM6IHRvdGFsIG51bWJlciBvZiBydW5z IHNpbmNlIHN0YXJ0ZWQuICovCisJdWludDY0X3QJCXRvdF9uX3J1bnM7CisJLyogU3RhdHM6IHRv dGFsIHNsZWVwIHRpbWUgc2luY2Ugc3RhcnRlZC4gKi8KKwluc3RpbWVfdAkJdG90X3NsZWVwX3Rp bWU7Cit9OwordHlwZWRlZiBzdHJ1Y3QgYmFja2dyb3VuZF90aHJlYWRfaW5mb19zIGJhY2tncm91 bmRfdGhyZWFkX2luZm9fdDsKKworc3RydWN0IGJhY2tncm91bmRfdGhyZWFkX3N0YXRzX3Mgewor CXNpemVfdCBudW1fdGhyZWFkczsKKwl1aW50NjRfdCBudW1fcnVuczsKKwluc3RpbWVfdCBydW5f aW50ZXJ2YWw7CisJbXV0ZXhfcHJvZl9kYXRhX3QgbWF4X2NvdW50ZXJfcGVyX2JnX3RoZDsKK307 Cit0eXBlZGVmIHN0cnVjdCBiYWNrZ3JvdW5kX3RocmVhZF9zdGF0c19zIGJhY2tncm91bmRfdGhy ZWFkX3N0YXRzX3Q7CisKKyNlbmRpZiAvKiBKRU1BTExPQ19JTlRFUk5BTF9CQUNLR1JPVU5EX1RI UkVBRF9TVFJVQ1RTX0ggKi8KCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9q ZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL2Jhc2UuaCBiLzM4OS1kcy1i YXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwv YmFzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliMmM5ZmIKLS0tIC9k ZXYvbnVsbAorKysgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNs dWRlL2plbWFsbG9jL2ludGVybmFsL2Jhc2UuaApAQCAtMCwwICsxLDExMCBAQAorI2lmbmRlZiBK RU1BTExPQ19JTlRFUk5BTF9CQVNFX0gKKyNkZWZpbmUgSkVNQUxMT0NfSU5URVJOQUxfQkFTRV9I CisKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9lZGF0YS5oIgorI2luY2x1ZGUgImplbWFs bG9jL2ludGVybmFsL2Vob29rcy5oIgorI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL211dGV4 LmgiCisKK2VudW0gbWV0YWRhdGFfdGhwX21vZGVfZSB7CisJbWV0YWRhdGFfdGhwX2Rpc2FibGVk ICAgPSAwLAorCS8qCisJICogTGF6aWx5IGVuYWJsZSBodWdlcGFnZSBmb3IgbWV0YWRhdGEuIFRv IGF2b2lkIGhpZ2ggUlNTIGNhdXNlZCBieSBUSFAKKwkgKiArIGxvdyB1c2FnZSBhcmVuYSAoaS5l LiBUSFAgYmVjb21lcyBhIHNpZ25pZmljYW50IHBlcmNlbnRhZ2UpLCB0aGUKKwkgKiAiYXV0byIg b3B0aW9uIG9ubHkgc3RhcnRzIHVzaW5nIFRIUCBhZnRlciBhIGJhc2UgYWxsb2NhdG9yIHVzZWQg dXAKKwkgKiB0aGUgZmlyc3QgVEhQIHJlZ2lvbi4gIFN0YXJ0aW5nIGZyb20gdGhlIHNlY29uZCBo dWdlcGFnZSAoaW4gYSBzaW5nbGUKKwkgKiBhcmVuYSksICJhdXRvIiBiZWhhdmVzIHRoZSBzYW1l IGFzICJhbHdheXMiLCBpLmUuIG1hZHZpc2UgaHVnZXBhZ2UKKwkgKiByaWdodCBhd2F5LgorCSAq LworCW1ldGFkYXRhX3RocF9hdXRvICAgICAgID0gMSwKKwltZXRhZGF0YV90aHBfYWx3YXlzICAg ICA9IDIsCisJbWV0YWRhdGFfdGhwX21vZGVfbGltaXQgPSAzCit9OwordHlwZWRlZiBlbnVtIG1l dGFkYXRhX3RocF9tb2RlX2UgbWV0YWRhdGFfdGhwX21vZGVfdDsKKworI2RlZmluZSBNRVRBREFU QV9USFBfREVGQVVMVCBtZXRhZGF0YV90aHBfZGlzYWJsZWQKK2V4dGVybiBtZXRhZGF0YV90aHBf bW9kZV90IG9wdF9tZXRhZGF0YV90aHA7CitleHRlcm4gY29uc3QgY2hhciAqbWV0YWRhdGFfdGhw X21vZGVfbmFtZXNbXTsKKworCisvKiBFbWJlZGRlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGV2ZXJ5 IGJsb2NrIG9mIGJhc2UtbWFuYWdlZCB2aXJ0dWFsIG1lbW9yeS4gKi8KK3R5cGVkZWYgc3RydWN0 IGJhc2VfYmxvY2tfcyBiYXNlX2Jsb2NrX3Q7CitzdHJ1Y3QgYmFzZV9ibG9ja19zIHsKKwkvKiBU b3RhbCBzaXplIG9mIGJsb2NrJ3MgdmlydHVhbCBtZW1vcnkgbWFwcGluZy4gKi8KKwlzaXplX3Qg c2l6ZTsKKworCS8qIE5leHQgYmxvY2sgaW4gbGlzdCBvZiBiYXNlJ3MgYmxvY2tzLiAqLworCWJh c2VfYmxvY2tfdCAqbmV4dDsKKworCS8qIFRyYWNrcyB1bnVzZWQgdHJhaWxpbmcgc3BhY2UuICov CisJZWRhdGFfdCBlZGF0YTsKK307CisKK3R5cGVkZWYgc3RydWN0IGJhc2VfcyBiYXNlX3Q7Citz dHJ1Y3QgYmFzZV9zIHsKKwkvKgorCSAqIFVzZXItY29uZmlndXJhYmxlIGV4dGVudCBob29rIGZ1 bmN0aW9ucy4KKwkgKi8KKwllaG9va3NfdCBlaG9va3M7CisKKwkvKgorCSAqIFVzZXItY29uZmln dXJhYmxlIGV4dGVudCBob29rIGZ1bmN0aW9ucyBmb3IgbWV0YWRhdGEgYWxsb2NhdGlvbnMuCisJ ICovCisJZWhvb2tzX3QgZWhvb2tzX2Jhc2U7CisKKwkvKiBQcm90ZWN0cyBiYXNlX2FsbG9jKCkg YW5kIGJhc2Vfc3RhdHNfZ2V0KCkgb3BlcmF0aW9ucy4gKi8KKwltYWxsb2NfbXV0ZXhfdCBtdHg7 CisKKwkvKiBVc2luZyBUSFAgd2hlbiB0cnVlIChtZXRhZGF0YV90aHAgYXV0byBtb2RlKS4gKi8K Kwlib29sIGF1dG9fdGhwX3N3aXRjaGVkOworCS8qCisJICogTW9zdCByZWNlbnQgc2l6ZSBjbGFz cyBpbiB0aGUgc2VyaWVzIG9mIGluY3JlYXNpbmdseSBsYXJnZSBiYXNlCisJICogZXh0ZW50cy4g IExvZ2FyaXRobWljIHNwYWNpbmcgYmV0d2VlbiBzdWJzZXF1ZW50IGFsbG9jYXRpb25zIGVuc3Vy ZXMKKwkgKiB0aGF0IHRoZSB0b3RhbCBudW1iZXIgb2YgZGlzdGluY3QgbWFwcGluZ3MgcmVtYWlu cyBzbWFsbC4KKwkgKi8KKwlwc3ppbmRfdCBwaW5kX2xhc3Q7CisKKwkvKiBTZXJpYWwgbnVtYmVy IGdlbmVyYXRpb24gc3RhdGUuICovCisJc2l6ZV90IGV4dGVudF9zbl9uZXh0OworCisJLyogQ2hh aW4gb2YgYWxsIGJsb2NrcyBhc3NvY2lhdGVkIHdpdGggYmFzZS4gKi8KKwliYXNlX2Jsb2NrX3Qg KmJsb2NrczsKKworCS8qIEhlYXAgb2YgZXh0ZW50cyB0aGF0IHRyYWNrIHVudXNlZCB0cmFpbGlu ZyBzcGFjZSB3aXRoaW4gYmxvY2tzLiAqLworCWVkYXRhX2hlYXBfdCBhdmFpbFtTQ19OU0laRVNd OworCisJLyogU3RhdHMsIG9ubHkgbWFpbnRhaW5lZCBpZiBjb25maWdfc3RhdHMuICovCisJc2l6 ZV90IGFsbG9jYXRlZDsKKwlzaXplX3QgcmVzaWRlbnQ7CisJc2l6ZV90IG1hcHBlZDsKKwkvKiBO dW1iZXIgb2YgVEhQIHJlZ2lvbnMgdG91Y2hlZC4gKi8KKwlzaXplX3Qgbl90aHA7Cit9OworCitz dGF0aWMgaW5saW5lIHVuc2lnbmVkCitiYXNlX2luZF9nZXQoY29uc3QgYmFzZV90ICpiYXNlKSB7 CisJcmV0dXJuIGVob29rc19pbmRfZ2V0KCZiYXNlLT5laG9va3MpOworfQorCitzdGF0aWMgaW5s aW5lIGJvb2wKK21ldGFkYXRhX3RocF9lbmFibGVkKHZvaWQpIHsKKwlyZXR1cm4gKG9wdF9tZXRh ZGF0YV90aHAgIT0gbWV0YWRhdGFfdGhwX2Rpc2FibGVkKTsKK30KKworYmFzZV90ICpiMGdldCh2 b2lkKTsKK2Jhc2VfdCAqYmFzZV9uZXcodHNkbl90ICp0c2RuLCB1bnNpZ25lZCBpbmQsCisgICAg Y29uc3QgZXh0ZW50X2hvb2tzX3QgKmV4dGVudF9ob29rcywgYm9vbCBtZXRhZGF0YV91c2VfaG9v a3MpOwordm9pZCBiYXNlX2RlbGV0ZSh0c2RuX3QgKnRzZG4sIGJhc2VfdCAqYmFzZSk7CitlaG9v a3NfdCAqYmFzZV9laG9va3NfZ2V0KGJhc2VfdCAqYmFzZSk7CitlaG9va3NfdCAqYmFzZV9laG9v a3NfZ2V0X2Zvcl9tZXRhZGF0YShiYXNlX3QgKmJhc2UpOworZXh0ZW50X2hvb2tzX3QgKmJhc2Vf ZXh0ZW50X2hvb2tzX3NldChiYXNlX3QgKmJhc2UsCisgICAgZXh0ZW50X2hvb2tzX3QgKmV4dGVu dF9ob29rcyk7Cit2b2lkICpiYXNlX2FsbG9jKHRzZG5fdCAqdHNkbiwgYmFzZV90ICpiYXNlLCBz aXplX3Qgc2l6ZSwgc2l6ZV90IGFsaWdubWVudCk7CitlZGF0YV90ICpiYXNlX2FsbG9jX2VkYXRh KHRzZG5fdCAqdHNkbiwgYmFzZV90ICpiYXNlKTsKK3ZvaWQgYmFzZV9zdGF0c19nZXQodHNkbl90 ICp0c2RuLCBiYXNlX3QgKmJhc2UsIHNpemVfdCAqYWxsb2NhdGVkLAorICAgIHNpemVfdCAqcmVz aWRlbnQsIHNpemVfdCAqbWFwcGVkLCBzaXplX3QgKm5fdGhwKTsKK3ZvaWQgYmFzZV9wcmVmb3Jr KHRzZG5fdCAqdHNkbiwgYmFzZV90ICpiYXNlKTsKK3ZvaWQgYmFzZV9wb3N0Zm9ya19wYXJlbnQo dHNkbl90ICp0c2RuLCBiYXNlX3QgKmJhc2UpOwordm9pZCBiYXNlX3Bvc3Rmb3JrX2NoaWxkKHRz ZG5fdCAqdHNkbiwgYmFzZV90ICpiYXNlKTsKK2Jvb2wgYmFzZV9ib290KHRzZG5fdCAqdHNkbik7 CisKKyNlbmRpZiAvKiBKRU1BTExPQ19JTlRFUk5BTF9CQVNFX0ggKi8KCmRpZmYgLS1naXQgYS8z ODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2lu dGVybmFsL2Jpbi5oIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5j bHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9iaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwLi42M2Y5NzM5Ci0tLSAvZGV2L251bGwKKysrIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVp bGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9iaW4uaApAQCAtMCww ICsxLDgyIEBACisjaWZuZGVmIEpFTUFMTE9DX0lOVEVSTkFMX0JJTl9ICisjZGVmaW5lIEpFTUFM TE9DX0lOVEVSTkFMX0JJTl9ICisKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9iaW5fc3Rh dHMuaCIKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9iaW5fdHlwZXMuaCIKKyNpbmNsdWRl ICJqZW1hbGxvYy9pbnRlcm5hbC9lZGF0YS5oIgorI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFs L211dGV4LmgiCisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvc2MuaCIKKworLyoKKyAqIEEg YmluIGNvbnRhaW5zIGEgc2V0IG9mIGV4dGVudHMgdGhhdCBhcmUgY3VycmVudGx5IGJlaW5nIHVz ZWQgZm9yIHNsYWIKKyAqIGFsbG9jYXRpb25zLgorICovCit0eXBlZGVmIHN0cnVjdCBiaW5fcyBi aW5fdDsKK3N0cnVjdCBiaW5fcyB7CisJLyogQWxsIG9wZXJhdGlvbnMgb24gYmluX3QgZmllbGRz IHJlcXVpcmUgbG9jayBvd25lcnNoaXAuICovCisJbWFsbG9jX211dGV4X3QJCWxvY2s7CisKKwkv KgorCSAqIEJpbiBzdGF0aXN0aWNzLiAgVGhlc2UgZ2V0IHRvdWNoZWQgZXZlcnkgdGltZSB0aGUg bG9jayBpcyBhY3F1aXJlZCwKKwkgKiBzbyBwdXQgdGhlbSBjbG9zZSBieSBpbiB0aGUgaG9wZXMg b2YgZ2V0dGluZyBzb21lIGNhY2hlIGxvY2FsaXR5LgorCSAqLworCWJpbl9zdGF0c190CXN0YXRz OworCisJLyoKKwkgKiBDdXJyZW50IHNsYWIgYmVpbmcgdXNlZCB0byBzZXJ2aWNlIGFsbG9jYXRp b25zIG9mIHRoaXMgYmluJ3Mgc2l6ZQorCSAqIGNsYXNzLiAgc2xhYmN1ciBpcyBpbmRlcGVuZGVu dCBvZiBzbGFic197bm9uZnVsbCxmdWxsfTsgd2hlbmV2ZXIKKwkgKiBzbGFiY3VyIGlzIHJlYXNz aWduZWQsIHRoZSBwcmV2aW91cyBzbGFiIG11c3QgYmUgZGVhbGxvY2F0ZWQgb3IKKwkgKiBpbnNl cnRlZCBpbnRvIHNsYWJzX3tub25mdWxsLGZ1bGx9LgorCSAqLworCWVkYXRhX3QJCQkqc2xhYmN1 cjsKKworCS8qCisJICogSGVhcCBvZiBub24tZnVsbCBzbGFicy4gIFRoaXMgaGVhcCBpcyB1c2Vk IHRvIGFzc3VyZSB0aGF0IG5ldworCSAqIGFsbG9jYXRpb25zIGNvbWUgZnJvbSB0aGUgbm9uLWZ1 bGwgc2xhYiB0aGF0IGlzIG9sZGVzdC9sb3dlc3QgaW4KKwkgKiBtZW1vcnkuCisJICovCisJZWRh dGFfaGVhcF90CQlzbGFic19ub25mdWxsOworCisJLyogTGlzdCB1c2VkIHRvIHRyYWNrIGZ1bGwg c2xhYnMuICovCisJZWRhdGFfbGlzdF9hY3RpdmVfdAlzbGFic19mdWxsOworfTsKKworLyogQSBz ZXQgb2Ygc2hhcmRlZCBiaW5zIG9mIHRoZSBzYW1lIHNpemUgY2xhc3MuICovCit0eXBlZGVmIHN0 cnVjdCBiaW5zX3MgYmluc190Oworc3RydWN0IGJpbnNfcyB7CisJLyogU2hhcmRlZCBiaW5zLiAg RHluYW1pY2FsbHkgc2l6ZWQuICovCisJYmluX3QgKmJpbl9zaGFyZHM7Cit9OworCit2b2lkIGJp bl9zaGFyZF9zaXplc19ib290KHVuc2lnbmVkIGJpbl9zaGFyZHNbU0NfTkJJTlNdKTsKK2Jvb2wg YmluX3VwZGF0ZV9zaGFyZF9zaXplKHVuc2lnbmVkIGJpbl9zaGFyZHNbU0NfTkJJTlNdLCBzaXpl X3Qgc3RhcnRfc2l6ZSwKKyAgICBzaXplX3QgZW5kX3NpemUsIHNpemVfdCBuc2hhcmRzKTsKKwor LyogSW5pdGlhbGl6ZXMgYSBiaW4gdG8gZW1wdHkuICBSZXR1cm5zIHRydWUgb24gZXJyb3IuICov Citib29sIGJpbl9pbml0KGJpbl90ICpiaW4pOworCisvKiBGb3JraW5nLiAqLwordm9pZCBiaW5f cHJlZm9yayh0c2RuX3QgKnRzZG4sIGJpbl90ICpiaW4pOwordm9pZCBiaW5fcG9zdGZvcmtfcGFy ZW50KHRzZG5fdCAqdHNkbiwgYmluX3QgKmJpbik7Cit2b2lkIGJpbl9wb3N0Zm9ya19jaGlsZCh0 c2RuX3QgKnRzZG4sIGJpbl90ICpiaW4pOworCisvKiBTdGF0cy4gKi8KK3N0YXRpYyBpbmxpbmUg dm9pZAorYmluX3N0YXRzX21lcmdlKHRzZG5fdCAqdHNkbiwgYmluX3N0YXRzX2RhdGFfdCAqZHN0 X2Jpbl9zdGF0cywgYmluX3QgKmJpbikgeworCW1hbGxvY19tdXRleF9sb2NrKHRzZG4sICZiaW4t PmxvY2spOworCW1hbGxvY19tdXRleF9wcm9mX2FjY3VtKHRzZG4sICZkc3RfYmluX3N0YXRzLT5t dXRleF9kYXRhLCAmYmluLT5sb2NrKTsKKwliaW5fc3RhdHNfdCAqc3RhdHMgPSAmZHN0X2Jpbl9z dGF0cy0+c3RhdHNfZGF0YTsKKwlzdGF0cy0+bm1hbGxvYyArPSBiaW4tPnN0YXRzLm5tYWxsb2M7 CisJc3RhdHMtPm5kYWxsb2MgKz0gYmluLT5zdGF0cy5uZGFsbG9jOworCXN0YXRzLT5ucmVxdWVz dHMgKz0gYmluLT5zdGF0cy5ucmVxdWVzdHM7CisJc3RhdHMtPmN1cnJlZ3MgKz0gYmluLT5zdGF0 cy5jdXJyZWdzOworCXN0YXRzLT5uZmlsbHMgKz0gYmluLT5zdGF0cy5uZmlsbHM7CisJc3RhdHMt Pm5mbHVzaGVzICs9IGJpbi0+c3RhdHMubmZsdXNoZXM7CisJc3RhdHMtPm5zbGFicyArPSBiaW4t PnN0YXRzLm5zbGFiczsKKwlzdGF0cy0+cmVzbGFicyArPSBiaW4tPnN0YXRzLnJlc2xhYnM7CisJ c3RhdHMtPmN1cnNsYWJzICs9IGJpbi0+c3RhdHMuY3Vyc2xhYnM7CisJc3RhdHMtPm5vbmZ1bGxf c2xhYnMgKz0gYmluLT5zdGF0cy5ub25mdWxsX3NsYWJzOworCW1hbGxvY19tdXRleF91bmxvY2so dHNkbiwgJmJpbi0+bG9jayk7Cit9CisKKyNlbmRpZiAvKiBKRU1BTExPQ19JTlRFUk5BTF9CSU5f SCAqLwoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4w L2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvYmluX2luZm8uaCBiLzM4OS1kcy1iYXNlLTMuMy4w LWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvYmluX2luZm8u aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZmU2NWM4Ci0tLSAvZGV2L251 bGwKKysrIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9q ZW1hbGxvYy9pbnRlcm5hbC9iaW5faW5mby5oCkBAIC0wLDAgKzEsNTAgQEAKKyNpZm5kZWYgSkVN QUxMT0NfSU5URVJOQUxfQklOX0lORk9fSAorI2RlZmluZSBKRU1BTExPQ19JTlRFUk5BTF9CSU5f SU5GT19ICisKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9iaXRtYXAuaCIKKworLyoKKyAq IFJlYWQtb25seSBpbmZvcm1hdGlvbiBhc3NvY2lhdGVkIHdpdGggZWFjaCBlbGVtZW50IG9mIGFy ZW5hX3QncyBiaW5zIGFycmF5CisgKiBpcyBzdG9yZWQgc2VwYXJhdGVseSwgcGFydGx5IHRvIHJl ZHVjZSBtZW1vcnkgdXNhZ2UgKG9ubHkgb25lIGNvcHksIHJhdGhlcgorICogdGhhbiBvbmUgcGVy IGFyZW5hKSwgYnV0IG1haW5seSB0byBhdm9pZCBmYWxzZSBjYWNoZWxpbmUgc2hhcmluZy4KKyAq CisgKiBFYWNoIHNsYWIgaGFzIHRoZSBmb2xsb3dpbmcgbGF5b3V0OgorICoKKyAqICAgLy0tLS0t LS0tLS0tLS0tLS0tLS0tXAorICogICB8IHJlZ2lvbiAwICAgICAgICAgICB8CisgKiAgIHwtLS0t LS0tLS0tLS0tLS0tLS0tLXwKKyAqICAgfCByZWdpb24gMSAgICAgICAgICAgfAorICogICB8LS0t LS0tLS0tLS0tLS0tLS0tLS18CisgKiAgIHwgLi4uICAgICAgICAgICAgICAgIHwKKyAqICAgfCAu Li4gICAgICAgICAgICAgICAgfAorICogICB8IC4uLiAgICAgICAgICAgICAgICB8CisgKiAgIHwt LS0tLS0tLS0tLS0tLS0tLS0tLXwKKyAqICAgfCByZWdpb24gbnJlZ3MtMSAgICAgfAorICogICBc LS0tLS0tLS0tLS0tLS0tLS0tLS0vCisgKi8KK3R5cGVkZWYgc3RydWN0IGJpbl9pbmZvX3MgYmlu X2luZm9fdDsKK3N0cnVjdCBiaW5faW5mb19zIHsKKwkvKiBTaXplIG9mIHJlZ2lvbnMgaW4gYSBz bGFiIGZvciB0aGlzIGJpbidzIHNpemUgY2xhc3MuICovCisJc2l6ZV90CQkJcmVnX3NpemU7CisK KwkvKiBUb3RhbCBzaXplIG9mIGEgc2xhYiBmb3IgdGhpcyBiaW4ncyBzaXplIGNsYXNzLiAqLwor CXNpemVfdAkJCXNsYWJfc2l6ZTsKKworCS8qIFRvdGFsIG51bWJlciBvZiByZWdpb25zIGluIGEg c2xhYiBmb3IgdGhpcyBiaW4ncyBzaXplIGNsYXNzLiAqLworCXVpbnQzMl90CQlucmVnczsKKwor CS8qIE51bWJlciBvZiBzaGFyZGVkIGJpbnMgaW4gZWFjaCBhcmVuYSBmb3IgdGhpcyBzaXplIGNs YXNzLiAqLworCXVpbnQzMl90CQluX3NoYXJkczsKKworCS8qCisJICogTWV0YWRhdGEgdXNlZCB0 byBtYW5pcHVsYXRlIGJpdG1hcHMgZm9yIHNsYWJzIGFzc29jaWF0ZWQgd2l0aCB0aGlzCisJICog YmluLgorCSAqLworCWJpdG1hcF9pbmZvX3QJCWJpdG1hcF9pbmZvOworfTsKKworZXh0ZXJuIGJp bl9pbmZvX3QgYmluX2luZm9zW1NDX05CSU5TXTsKKwordm9pZCBiaW5faW5mb19ib290KHNjX2Rh dGFfdCAqc2NfZGF0YSwgdW5zaWduZWQgYmluX3NoYXJkX3NpemVzW1NDX05CSU5TXSk7CisKKyNl bmRpZiAvKiBKRU1BTExPQ19JTlRFUk5BTF9CSU5fSU5GT19IICovCgpkaWZmIC0tZ2l0IGEvMzg5 LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRl cm5hbC9iaW5fc3RhdHMuaCBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4w L2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvYmluX3N0YXRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMC4uMGI5OTI5NwotLS0gL2Rldi9udWxsCisrKyBiLzM4OS1kcy1iYXNl LTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvYmlu X3N0YXRzLmgKQEAgLTAsMCArMSw1NyBAQAorI2lmbmRlZiBKRU1BTExPQ19JTlRFUk5BTF9CSU5f U1RBVFNfSAorI2RlZmluZSBKRU1BTExPQ19JTlRFUk5BTF9CSU5fU1RBVFNfSAorCisjaW5jbHVk ZSAiamVtYWxsb2MvaW50ZXJuYWwvbXV0ZXhfcHJvZi5oIgorCit0eXBlZGVmIHN0cnVjdCBiaW5f c3RhdHNfcyBiaW5fc3RhdHNfdDsKK3N0cnVjdCBiaW5fc3RhdHNfcyB7CisJLyoKKwkgKiBUb3Rh bCBudW1iZXIgb2YgYWxsb2NhdGlvbi9kZWFsbG9jYXRpb24gcmVxdWVzdHMgc2VydmVkIGRpcmVj dGx5IGJ5CisJICogdGhlIGJpbi4gIE5vdGUgdGhhdCB0Y2FjaGUgbWF5IGFsbG9jYXRlIGFuIG9i amVjdCwgdGhlbiByZWN5Y2xlIGl0CisJICogbWFueSB0aW1lcywgcmVzdWx0aW5nIG1hbnkgaW5j cmVtZW50cyB0byBucmVxdWVzdHMsIGJ1dCBvbmx5IG9uZQorCSAqIGVhY2ggdG8gbm1hbGxvYyBh bmQgbmRhbGxvYy4KKwkgKi8KKwl1aW50NjRfdAlubWFsbG9jOworCXVpbnQ2NF90CW5kYWxsb2M7 CisKKwkvKgorCSAqIE51bWJlciBvZiBhbGxvY2F0aW9uIHJlcXVlc3RzIHRoYXQgY29ycmVzcG9u ZCB0byB0aGUgc2l6ZSBvZiB0aGlzCisJICogYmluLiAgVGhpcyBpbmNsdWRlcyByZXF1ZXN0cyBz ZXJ2ZWQgYnkgdGNhY2hlLCB0aG91Z2ggdGNhY2hlIG9ubHkKKwkgKiBwZXJpb2RpY2FsbHkgbWVy Z2VzIGludG8gdGhpcyBjb3VudGVyLgorCSAqLworCXVpbnQ2NF90CW5yZXF1ZXN0czsKKworCS8q CisJICogQ3VycmVudCBudW1iZXIgb2YgcmVnaW9ucyBvZiB0aGlzIHNpemUgY2xhc3MsIGluY2x1 ZGluZyByZWdpb25zCisJICogY3VycmVudGx5IGNhY2hlZCBieSB0Y2FjaGUuCisJICovCisJc2l6 ZV90CQljdXJyZWdzOworCisJLyogTnVtYmVyIG9mIHRjYWNoZSBmaWxscyBmcm9tIHRoaXMgYmlu LiAqLworCXVpbnQ2NF90CW5maWxsczsKKworCS8qIE51bWJlciBvZiB0Y2FjaGUgZmx1c2hlcyB0 byB0aGlzIGJpbi4gKi8KKwl1aW50NjRfdAluZmx1c2hlczsKKworCS8qIFRvdGFsIG51bWJlciBv ZiBzbGFicyBjcmVhdGVkIGZvciB0aGlzIGJpbidzIHNpemUgY2xhc3MuICovCisJdWludDY0X3QJ bnNsYWJzOworCisJLyoKKwkgKiBUb3RhbCBudW1iZXIgb2Ygc2xhYnMgcmV1c2VkIGJ5IGV4dHJh Y3RpbmcgdGhlbSBmcm9tIHRoZSBzbGFicyBoZWFwCisJICogZm9yIHRoaXMgYmluJ3Mgc2l6ZSBj bGFzcy4KKwkgKi8KKwl1aW50NjRfdAlyZXNsYWJzOworCisJLyogQ3VycmVudCBudW1iZXIgb2Yg c2xhYnMgaW4gdGhpcyBiaW4uICovCisJc2l6ZV90CQljdXJzbGFiczsKKworCS8qIEN1cnJlbnQg c2l6ZSBvZiBub25mdWxsIHNsYWJzIGhlYXAgaW4gdGhpcyBiaW4uICovCisJc2l6ZV90CQlub25m dWxsX3NsYWJzOworfTsKKwordHlwZWRlZiBzdHJ1Y3QgYmluX3N0YXRzX2RhdGFfcyBiaW5fc3Rh dHNfZGF0YV90Oworc3RydWN0IGJpbl9zdGF0c19kYXRhX3MgeworCWJpbl9zdGF0c190IHN0YXRz X2RhdGE7CisJbXV0ZXhfcHJvZl9kYXRhX3QgbXV0ZXhfZGF0YTsKK307CisjZW5kaWYgLyogSkVN QUxMT0NfSU5URVJOQUxfQklOX1NUQVRTX0ggKi8KCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0z LjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL2Jpbl90 eXBlcy5oIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9q ZW1hbGxvYy9pbnRlcm5hbC9iaW5fdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwLi45NDVlODMyCi0tLSAvZGV2L251bGwKKysrIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVp bGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9iaW5fdHlwZXMuaApA QCAtMCwwICsxLDE3IEBACisjaWZuZGVmIEpFTUFMTE9DX0lOVEVSTkFMX0JJTl9UWVBFU19ICisj ZGVmaW5lIEpFTUFMTE9DX0lOVEVSTkFMX0JJTl9UWVBFU19ICisKKyNpbmNsdWRlICJqZW1hbGxv Yy9pbnRlcm5hbC9zYy5oIgorCisjZGVmaW5lIEJJTl9TSEFSRFNfTUFYICgxIDw8IEVEQVRBX0JJ VFNfQklOU0hBUkRfV0lEVEgpCisjZGVmaW5lIE5fQklOX1NIQVJEU19ERUZBVUxUIDEKKworLyog VXNlZCBpbiBUU0Qgc3RhdGljIGluaXRpYWxpemVyIG9ubHkuIFJlYWwgaW5pdCBpbiBhcmVuYV9i aW5kKCkuICovCisjZGVmaW5lIFRTRF9CSU5TSEFSRFNfWkVST19JTklUSUFMSVpFUiB7e1VJTlQ4 X01BWH19CisKK3R5cGVkZWYgc3RydWN0IHRzZF9iaW5zaGFyZHNfcyB0c2RfYmluc2hhcmRzX3Q7 CitzdHJ1Y3QgdHNkX2JpbnNoYXJkc19zIHsKKwl1aW50OF90IGJpbnNoYXJkW1NDX05CSU5TXTsK K307CisKKyNlbmRpZiAvKiBKRU1BTExPQ19JTlRFUk5BTF9CSU5fVFlQRVNfSCAqLwoKZGlmZiAt LWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVt YWxsb2MvaW50ZXJuYWwvYml0X3V0aWwuaCBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFs bG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvYml0X3V0aWwuaApuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYWM1OTE0Ci0tLSAvZGV2L251bGwKKysrIGIvMzg5 LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRl cm5hbC9iaXRfdXRpbC5oCkBAIC0wLDAgKzEsNDIyIEBACisjaWZuZGVmIEpFTUFMTE9DX0lOVEVS TkFMX0JJVF9VVElMX0gKKyNkZWZpbmUgSkVNQUxMT0NfSU5URVJOQUxfQklUX1VUSUxfSAorCisj aW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvYXNzZXJ0LmgiCisKKy8qIFNhbml0eSBjaGVjay4g Ki8KKyNpZiAhZGVmaW5lZChKRU1BTExPQ19JTlRFUk5BTF9GRlNMTCkgfHwgIWRlZmluZWQoSkVN QUxMT0NfSU5URVJOQUxfRkZTTCkgXAorICAgIHx8ICFkZWZpbmVkKEpFTUFMTE9DX0lOVEVSTkFM X0ZGUykKKyMgIGVycm9yIEpFTUFMTE9DX0lOVEVSTkFMX0ZGU3ssTCxMTH0gc2hvdWxkIGhhdmUg YmVlbiBkZWZpbmVkIGJ5IGNvbmZpZ3VyZQorI2VuZGlmCisKKy8qCisgKiBVbmxpa2UgdGhlIGJ1 aWx0aW5zIGFuZCBwb3NpeCBmZnMgZnVuY3Rpb25zLCBvdXIgZmZzIHJlcXVpcmVzIGEgbm9uLXpl cm8KKyAqIGlucHV0LCBhbmQgcmV0dXJucyB0aGUgcG9zaXRpb24gb2YgdGhlIGxvd2VzdCBiaXQg c2V0IChhcyBvcHBvc2VkIHRvIHRoZQorICogcG9zaXggdmVyc2lvbnMsIHdoaWNoIHJldHVybiAx IGxhcmdlciB0aGFuIHRoYXQgcG9zaXRpb24gYW5kIHVzZSBhIHJldHVybgorICogdmFsdWUgb2Yg emVybyBhcyBhIHNlbnRpbmVsLiAgVGhpcyB0ZW5kcyB0byBzaW1wbGlmeSBsb2dpYyBpbiBjYWxs ZXJzLCBhbmQKKyAqIGFsbG93cyBmb3IgY29uc2lzdGVuY3kgd2l0aCB0aGUgYnVpbHRpbnMgd2Ug YnVpbGQgZmxzIG9uIHRvcCBvZi4KKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZAorZmZzX2xs dSh1bnNpZ25lZCBsb25nIGxvbmcgeCkgeworCXV0aWxfYXNzdW1lKHggIT0gMCk7CisJcmV0dXJu IEpFTUFMTE9DX0lOVEVSTkFMX0ZGU0xMKHgpIC0gMTsKK30KKworc3RhdGljIGlubGluZSB1bnNp Z25lZAorZmZzX2x1KHVuc2lnbmVkIGxvbmcgeCkgeworCXV0aWxfYXNzdW1lKHggIT0gMCk7CisJ cmV0dXJuIEpFTUFMTE9DX0lOVEVSTkFMX0ZGU0woeCkgLSAxOworfQorCitzdGF0aWMgaW5saW5l IHVuc2lnbmVkCitmZnNfdSh1bnNpZ25lZCB4KSB7CisJdXRpbF9hc3N1bWUoeCAhPSAwKTsKKwly ZXR1cm4gSkVNQUxMT0NfSU5URVJOQUxfRkZTKHgpIC0gMTsKK30KKworI2RlZmluZSBET19GTFNf U0xPVyh4LCBzdWZmaXgpIGRvIHsJCQkJCVwKKwl1dGlsX2Fzc3VtZSh4ICE9IDApOwkJCQkJCVwK Kwl4IHw9ICh4ID4+IDEpOwkJCQkJCQlcCisJeCB8PSAoeCA+PiAyKTsJCQkJCQkJXAorCXggfD0g KHggPj4gNCk7CQkJCQkJCVwKKwl4IHw9ICh4ID4+IDgpOwkJCQkJCQlcCisJeCB8PSAoeCA+PiAx Nik7CQkJCQkJCVwKKwlpZiAoc2l6ZW9mKHgpID4gNCkgewkJCQkJCVwKKwkJLyoJCQkJCQkJXAor CQkgKiBJZiBzaXplb2YoeCkgaXMgNCwgdGhlbiB0aGUgZXhwcmVzc2lvbiAieCA+PiAzMiIJXAor CQkgKiB3aWxsIGdlbmVyYXRlIGNvbXBpbGVyIHdhcm5pbmdzIGV2ZW4gaWYgdGhlIGNvZGUJXAor CQkgKiBuZXZlciBleGVjdXRlcy4gIFRoaXMgY2lyY3VtdmVudHMgdGhlIHdhcm5pbmcsIGFuZAlc CisJCSAqIGdldHMgY29tcGlsZWQgb3V0IGluIG9wdGltaXplZCBidWlsZHMuCQlcCisJCSAqLwkJ CQkJCQlcCisJCWludCBjb25zdGFudF8zMiA9IHNpemVvZih4KSAqIDQ7CQkJXAorCQl4IHw9ICh4 ID4+IGNvbnN0YW50XzMyKTsJCQkJXAorCX0JCQkJCQkJCVwKKwl4Kys7CQkJCQkJCQlcCisJaWYg KHggPT0gMCkgewkJCQkJCQlcCisJCXJldHVybiA4ICogc2l6ZW9mKHgpIC0gMTsJCQkJXAorCX0J CQkJCQkJCVwKKwlyZXR1cm4gZmZzXyMjc3VmZml4KHgpIC0gMTsJCQkJCVwKK30gd2hpbGUoMCkK Kworc3RhdGljIGlubGluZSB1bnNpZ25lZAorZmxzX2xsdV9zbG93KHVuc2lnbmVkIGxvbmcgbG9u ZyB4KSB7CisJRE9fRkxTX1NMT1coeCwgbGx1KTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25l ZAorZmxzX2x1X3Nsb3codW5zaWduZWQgbG9uZyB4KSB7CisJRE9fRkxTX1NMT1coeCwgbHUpOwor fQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkCitmbHNfdV9zbG93KHVuc2lnbmVkIHgpIHsKKwlE T19GTFNfU0xPVyh4LCB1KTsKK30KKworI3VuZGVmIERPX0ZMU19TTE9XCisKKyNpZmRlZiBKRU1B TExPQ19IQVZFX0JVSUxUSU5fQ0xaCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkCitmbHNfbGx1KHVu c2lnbmVkIGxvbmcgbG9uZyB4KSB7CisJdXRpbF9hc3N1bWUoeCAhPSAwKTsKKwkvKgorCSAqIE5v dGUgdGhhdCB0aGUgeG9yIGhlcmUgaXMgbW9yZSBuYXR1cmFsbHkgd3JpdHRlbiBhcyBzdWJ0cmFj dGlvbjsgdGhlCisJICogbGFzdCBiaXQgc2V0IGlzIHRoZSBudW1iZXIgb2YgYml0cyBpbiB0aGUg dHlwZSBtaW51cyB0aGUgbnVtYmVyIG9mCisJICogbGVhZGluZyB6ZXJvIGJpdHMuICBCdXQgR0ND IGltcGxlbWVudHMgdGhhdCBhczoKKwkgKiAgICBic3IgICAgIGVkaSwgZWRpCisJICogICAgbW92 ICAgICBlYXgsIDMxCisJICogICAgeG9yICAgICBlZGksIDMxCisJICogICAgc3ViICAgICBlYXgs IGVkaQorCSAqIElmIHdlIHdyaXRlIGl0IGFzIHhvciBpbnN0ZWFkLCB0aGVuIHdlIGdldAorCSAq ICAgIGJzciAgICAgZWF4LCBlZGkKKwkgKiBhcyBkZXNpcmVkLgorCSAqLworCXJldHVybiAoOCAq IHNpemVvZih4KSAtIDEpIF4gX19idWlsdGluX2NsemxsKHgpOworfQorCitzdGF0aWMgaW5saW5l IHVuc2lnbmVkCitmbHNfbHUodW5zaWduZWQgbG9uZyB4KSB7CisJdXRpbF9hc3N1bWUoeCAhPSAw KTsKKwlyZXR1cm4gKDggKiBzaXplb2YoeCkgLSAxKSBeIF9fYnVpbHRpbl9jbHpsKHgpOworfQor CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkCitmbHNfdSh1bnNpZ25lZCB4KSB7CisJdXRpbF9hc3N1 bWUoeCAhPSAwKTsKKwlyZXR1cm4gKDggKiBzaXplb2YoeCkgLSAxKSBeIF9fYnVpbHRpbl9jbHoo eCk7Cit9CisjZWxpZiBkZWZpbmVkKF9NU0NfVkVSKQorCisjaWYgTEdfU0laRU9GX1BUUiA9PSAz CisjZGVmaW5lIERPX0JTUjY0KGJpdCwgeCkgX0JpdFNjYW5SZXZlcnNlNjQoJmJpdCwgeCkKKyNl bHNlCisvKgorICogVGhpcyBuZXZlciBhY3R1YWxseSBydW5zOyB3ZSdyZSBqdXN0IGRvZGdpbmcg YSBjb21waWxlciBlcnJvciBmb3IgdGhlCisgKiBuZXZlci10YWtlbiBicmFuY2ggd2hlcmUgc2l6 ZW9mKHZvaWQgKikgPT0gOC4KKyAqLworI2RlZmluZSBET19CU1I2NChiaXQsIHgpIGJpdCA9IDA7 IHVucmVhY2hhYmxlKCkKKyNlbmRpZgorCisjZGVmaW5lIERPX0ZMUyh4KSBkbyB7CQkJCQkJCVwK KwlpZiAoeCA9PSAwKSB7CQkJCQkJCVwKKwkJcmV0dXJuIDggKiBzaXplb2YoeCk7CQkJCQlcCisJ fQkJCQkJCQkJXAorCXVuc2lnbmVkIGxvbmcgYml0OwkJCQkJCVwKKwlpZiAoc2l6ZW9mKHgpID09 IDQpIHsJCQkJCQlcCisJCV9CaXRTY2FuUmV2ZXJzZSgmYml0LCAodW5zaWduZWQpeCk7CQkJXAor CQlyZXR1cm4gKHVuc2lnbmVkKWJpdDsJCQkJCVwKKwl9CQkJCQkJCQlcCisJaWYgKHNpemVvZih4 KSA9PSA4ICYmIHNpemVvZih2b2lkICopID09IDgpIHsJCQlcCisJCURPX0JTUjY0KGJpdCwgeCk7 CQkJCQlcCisJCXJldHVybiAodW5zaWduZWQpYml0OwkJCQkJXAorCX0JCQkJCQkJCVwKKwlpZiAo c2l6ZW9mKHgpID09IDggJiYgc2l6ZW9mKHZvaWQgKikgPT0gNCkgewkJCVwKKwkJLyogRG9kZ2Ug YSBjb21waWxlciB3YXJuaW5nLCBhcyBhYm92ZS4gKi8JCVwKKwkJaW50IGNvbnN0YW50XzMyID0g c2l6ZW9mKHgpICogNDsJCQlcCisJCWlmIChfQml0U2NhblJldmVyc2UoJmJpdCwJCQkJXAorCQkg ICAgKHVuc2lnbmVkKSh4ID4+IGNvbnN0YW50XzMyKSkpIHsJCQlcCisJCQlyZXR1cm4gMzIgKyAo dW5zaWduZWQpYml0OwkJCVwKKwkJfSBlbHNlIHsJCQkJCQlcCisJCQlfQml0U2NhblJldmVyc2Uo JmJpdCwgKHVuc2lnbmVkKXgpOwkJXAorCQkJcmV0dXJuICh1bnNpZ25lZCliaXQ7CQkJCVwKKwkJ fQkJCQkJCQlcCisJfQkJCQkJCQkJXAorCXVucmVhY2hhYmxlKCk7CQkJCQkJCVwKK30gd2hpbGUg KDApCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQKK2Zsc19sbHUodW5zaWduZWQgbG9uZyBsb25n IHgpIHsKKwlET19GTFMoeCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQKK2Zsc19sdSh1 bnNpZ25lZCBsb25nIHgpIHsKKwlET19GTFMoeCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWdu ZWQKK2Zsc191KHVuc2lnbmVkIHgpIHsKKwlET19GTFMoeCk7Cit9CisKKyN1bmRlZiBET19GTFMK KyN1bmRlZiBET19CU1I2NAorI2Vsc2UKKworc3RhdGljIGlubGluZSB1bnNpZ25lZAorZmxzX2xs dSh1bnNpZ25lZCBsb25nIGxvbmcgeCkgeworCXJldHVybiBmbHNfbGx1X3Nsb3coeCk7Cit9CisK K3N0YXRpYyBpbmxpbmUgdW5zaWduZWQKK2Zsc19sdSh1bnNpZ25lZCBsb25nIHgpIHsKKwlyZXR1 cm4gZmxzX2x1X3Nsb3coeCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQKK2Zsc191KHVu c2lnbmVkIHgpIHsKKwlyZXR1cm4gZmxzX3Vfc2xvdyh4KTsKK30KKyNlbmRpZgorCisjaWYgTEdf U0laRU9GX0xPTkdfTE9ORyA+IDMKKyMgIGVycm9yICJIYXZlbid0IGltcGxlbWVudGVkIHBvcGNv dW50IGZvciAxNi1ieXRlIGludHMuIgorI2VuZGlmCisKKyNkZWZpbmUgRE9fUE9QQ09VTlQoeCwg dHlwZSkgZG8gewkJCQkJXAorCS8qCQkJCQkJCQlcCisJICogQWxnb3JpdGhtIGZyb20gYW4gb2xk IEFNRCBvcHRpbWl6YXRpb24gcmVmZXJlbmNlIG1hbnVhbC4JXAorCSAqIFdlJ3JlIHB1dHRpbmcg YSBsaXR0bGUgYml0IG1vcmUgd29yayB0aGFuIHlvdSBtaWdodCBleHBlY3QJXAorCSAqIGludG8g dGhlIG5vLWluc3RyaW5zaWMgY2FzZSwgc2luY2Ugd2Ugb25seSBzdXBwb3J0IHRoZQlcCisJICog R0NDIGludHJpbnNpY3Mgc3BlbGxpbmcgb2YgcG9wY291bnQgKGZvciBub3cpLiAgRGV0ZWN0aW5n CVwKKwkgKiB3aGV0aGVyIG9yIG5vdCB0aGUgcG9wY291bnQgYnVpbHRpbiBpcyBhY3R1YWxseSB1 c2VhYmxlIGluCVwKKwkgKiBNU1ZDIGlzIG5vbnRyaXZpYWwuCQkJCQkJXAorCSAqLwkJCQkJCQkJ XAorCQkJCQkJCQkJXAorCXR5cGUgYm11bCA9ICh0eXBlKTB4MDEwMTAxMDEwMTAxMDEwMVVMTDsJ CQlcCisJCQkJCQkJCQlcCisJLyoJCQkJCQkJCVwKKwkgKiBSZXBsYWNlIGVhY2ggMiBiaXRzIHdp dGggdGhlIHNpZGV3YXlzIHN1bSBvZiB0aGUgb3JpZ2luYWwJXAorCSAqIHZhbHVlcy4gIDB4NSA9 IDBiMDEwMS4JCQkJCVwKKwkgKgkJCQkJCQkJXAorCSAqIFlvdSBtaWdodCBleHBlY3QgdGhpcyB0 byBiZToJCQkJCVwKKwkgKiAgIHggPSAoeCAmIDB4NTUuLi4pICsgKCh4ID4+IDEpICYgMHg1NS4u LikuCQkJXAorCSAqIFRoYXQgY29zdHMgYW4gZXh0cmEgbWFzayByZWxhdGl2ZSB0byB0aGlzLCB0 aG91Z2guCQlcCisJICovCQkJCQkJCQlcCisJeCA9IHggLSAoKHggPj4gMSkgJiAoMHg1NVUgKiBi bXVsKSk7CQkJCVwKKwkvKiBSZXBsYWNlIGVhY2ggNCBiaXRzIHdpdGggdGhlaXIgc2lkZWF5cyBz dW0uICAweDMgPSAwYjAwMTEuICovXAorCXggPSAoeCAmIChibXVsICogMHgzM1UpKSArICgoeCA+ PiAyKSAmIChibXVsICogMHgzM1UpKTsJCVwKKwkvKgkJCQkJCQkJXAorCSAqIFJlcGxhY2UgZWFj aCA4IGJpdHMgd2l0aCB0aGVpciBzaWRld2F5cyBzdW0uICBOb3RlIHRoYXQgd2UJXAorCSAqIGNh bid0IG92ZXJmbG93IHdpdGhpbiBlYWNoIDQtYml0IHN1bSBoZXJlLCBzbyB3ZSBjYW4gc2tpcAlc CisJICogdGhlIGluaXRpYWwgbWFzay4JCQkJCQlcCisJICovCQkJCQkJCQlcCisJeCA9ICh4ICsg KHggPj4gNCkpICYgKGJtdWwgKiAweDBGVSk7CQkJCVwKKwkvKgkJCQkJCQkJXAorCSAqIE5vbmUg b2YgdGhlIHBhcnRpYWwgc3VtcyBpbiB0aGlzIG11bHRpcGxpY2F0aW9uICh2aWV3ZWQgaW4JXAor CSAqIGJhc2UtMjU2KSBjYW4gb3ZlcmZsb3cgaW50byB0aGUgbmV4dCBkaWdpdC4gIFNvIHRoZSBs ZWFzdAlcCisJICogc2lnbmlmaWNhbnQgYnl0ZSBvZiB0aGUgcHJvZHVjdCB3aWxsIGJlIHRoZSBs ZWFzdAkJXAorCSAqIHNpZ25pZmljYW50IGJ5dGUgb2YgdGhlIG9yaWdpbmFsIHZhbHVlLCB0aGUg c2Vjb25kIGxlYXN0CVwKKwkgKiBzaWduaWZpY2FudCBieXRlIHdpbGwgYmUgdGhlIHN1bSBvZiB0 aGUgdHdvIGxlYXN0CQlcCisJICogc2lnbmlmaWNhbnQgYnl0ZXMgb2YgdGhlIG9yaWdpbmFsIHZh bHVlLCBhbmQgc28gb24uCQlcCisJICogSW1wb3J0YW50bHksIHRoZSBoaWdoIGJ5dGUgd2lsbCBi ZSB0aGUgYnl0ZS13aXNlIHN1bSBvZiBhbGwJXAorCSAqIHRoZSBieXRlcyBvZiB0aGUgb3JpZ2lu YWwgdmFsdWUuCQkJCVwKKwkgKi8JCQkJCQkJCVwKKwl4ID0geCAqIGJtdWw7CQkJCQkJCVwKKwl4 ID4+PSAoKHNpemVvZih4KSAtIDEpICogOCk7CQkJCQlcCisJcmV0dXJuICh1bnNpZ25lZCl4OwkJ CQkJCVwKK30gd2hpbGUoMCkKKworc3RhdGljIGlubGluZSB1bnNpZ25lZAorcG9wY291bnRfdV9z bG93KHVuc2lnbmVkIGJpdG1hcCkgeworCURPX1BPUENPVU5UKGJpdG1hcCwgdW5zaWduZWQpOwor fQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkCitwb3Bjb3VudF9sdV9zbG93KHVuc2lnbmVkIGxv bmcgYml0bWFwKSB7CisJRE9fUE9QQ09VTlQoYml0bWFwLCB1bnNpZ25lZCBsb25nKTsKK30KKwor c3RhdGljIGlubGluZSB1bnNpZ25lZAorcG9wY291bnRfbGx1X3Nsb3codW5zaWduZWQgbG9uZyBs b25nIGJpdG1hcCkgeworCURPX1BPUENPVU5UKGJpdG1hcCwgdW5zaWduZWQgbG9uZyBsb25nKTsK K30KKworI3VuZGVmIERPX1BPUENPVU5UCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQKK3BvcGNv dW50X3UodW5zaWduZWQgYml0bWFwKSB7CisjaWZkZWYgSkVNQUxMT0NfSU5URVJOQUxfUE9QQ09V TlQKKwlyZXR1cm4gSkVNQUxMT0NfSU5URVJOQUxfUE9QQ09VTlQoYml0bWFwKTsKKyNlbHNlCisJ cmV0dXJuIHBvcGNvdW50X3Vfc2xvdyhiaXRtYXApOworI2VuZGlmCit9CisKK3N0YXRpYyBpbmxp bmUgdW5zaWduZWQKK3BvcGNvdW50X2x1KHVuc2lnbmVkIGxvbmcgYml0bWFwKSB7CisjaWZkZWYg SkVNQUxMT0NfSU5URVJOQUxfUE9QQ09VTlRMCisJcmV0dXJuIEpFTUFMTE9DX0lOVEVSTkFMX1BP UENPVU5UTChiaXRtYXApOworI2Vsc2UKKwlyZXR1cm4gcG9wY291bnRfbHVfc2xvdyhiaXRtYXAp OworI2VuZGlmCit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQKK3BvcGNvdW50X2xsdSh1bnNp Z25lZCBsb25nIGxvbmcgYml0bWFwKSB7CisjaWZkZWYgSkVNQUxMT0NfSU5URVJOQUxfUE9QQ09V TlRMTAorCXJldHVybiBKRU1BTExPQ19JTlRFUk5BTF9QT1BDT1VOVExMKGJpdG1hcCk7CisjZWxz ZQorCXJldHVybiBwb3Bjb3VudF9sbHVfc2xvdyhiaXRtYXApOworI2VuZGlmCit9CisKKy8qCisg KiBDbGVhcnMgZmlyc3QgdW5zZXQgYml0IGluIGJpdG1hcCwgYW5kIHJldHVybnMKKyAqIHBsYWNl IG9mIGJpdC4gIGJpdG1hcCAqbXVzdCBub3QqIGJlIDAuCisgKi8KKworc3RhdGljIGlubGluZSBz aXplX3QKK2Nmc19sdSh1bnNpZ25lZCBsb25nKiBiaXRtYXApIHsKKwl1dGlsX2Fzc3VtZSgqYml0 bWFwICE9IDApOworCXNpemVfdCBiaXQgPSBmZnNfbHUoKmJpdG1hcCk7CisJKmJpdG1hcCBePSBa VSgxKSA8PCBiaXQ7CisJcmV0dXJuIGJpdDsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZAor ZmZzX3p1KHNpemVfdCB4KSB7CisjaWYgTEdfU0laRU9GX1BUUiA9PSBMR19TSVpFT0ZfSU5UCisJ cmV0dXJuIGZmc191KHgpOworI2VsaWYgTEdfU0laRU9GX1BUUiA9PSBMR19TSVpFT0ZfTE9ORwor CXJldHVybiBmZnNfbHUoeCk7CisjZWxpZiBMR19TSVpFT0ZfUFRSID09IExHX1NJWkVPRl9MT05H X0xPTkcKKwlyZXR1cm4gZmZzX2xsdSh4KTsKKyNlbHNlCisjZXJyb3IgTm8gaW1wbGVtZW50YXRp b24gZm9yIHNpemVfdCBmZnMoKQorI2VuZGlmCit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQK K2Zsc196dShzaXplX3QgeCkgeworI2lmIExHX1NJWkVPRl9QVFIgPT0gTEdfU0laRU9GX0lOVAor CXJldHVybiBmbHNfdSh4KTsKKyNlbGlmIExHX1NJWkVPRl9QVFIgPT0gTEdfU0laRU9GX0xPTkcK KwlyZXR1cm4gZmxzX2x1KHgpOworI2VsaWYgTEdfU0laRU9GX1BUUiA9PSBMR19TSVpFT0ZfTE9O R19MT05HCisJcmV0dXJuIGZsc19sbHUoeCk7CisjZWxzZQorI2Vycm9yIE5vIGltcGxlbWVudGF0 aW9uIGZvciBzaXplX3QgZmxzKCkKKyNlbmRpZgorfQorCisKK3N0YXRpYyBpbmxpbmUgdW5zaWdu ZWQKK2Zmc191NjQodWludDY0X3QgeCkgeworI2lmIExHX1NJWkVPRl9MT05HID09IDMKKwlyZXR1 cm4gZmZzX2x1KHgpOworI2VsaWYgTEdfU0laRU9GX0xPTkdfTE9ORyA9PSAzCisJcmV0dXJuIGZm c19sbHUoeCk7CisjZWxzZQorI2Vycm9yIE5vIGltcGxlbWVudGF0aW9uIGZvciA2NC1iaXQgZmZz KCkKKyNlbmRpZgorfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkCitmbHNfdTY0KHVpbnQ2NF90 IHgpIHsKKyNpZiBMR19TSVpFT0ZfTE9ORyA9PSAzCisJcmV0dXJuIGZsc19sdSh4KTsKKyNlbGlm IExHX1NJWkVPRl9MT05HX0xPTkcgPT0gMworCXJldHVybiBmbHNfbGx1KHgpOworI2Vsc2UKKyNl cnJvciBObyBpbXBsZW1lbnRhdGlvbiBmb3IgNjQtYml0IGZscygpCisjZW5kaWYKK30KKworc3Rh dGljIGlubGluZSB1bnNpZ25lZAorZmZzX3UzMih1aW50MzJfdCB4KSB7CisjaWYgTEdfU0laRU9G X0lOVCA9PSAyCisJcmV0dXJuIGZmc191KHgpOworI2Vsc2UKKyNlcnJvciBObyBpbXBsZW1lbnRh dGlvbiBmb3IgMzItYml0IGZmcygpCisjZW5kaWYKKwlyZXR1cm4gZmZzX3UoeCk7Cit9CisKK3N0 YXRpYyBpbmxpbmUgdW5zaWduZWQKK2Zsc191MzIodWludDMyX3QgeCkgeworI2lmIExHX1NJWkVP Rl9JTlQgPT0gMgorCXJldHVybiBmbHNfdSh4KTsKKyNlbHNlCisjZXJyb3IgTm8gaW1wbGVtZW50 YXRpb24gZm9yIDMyLWJpdCBmbHMoKQorI2VuZGlmCisJcmV0dXJuIGZsc191KHgpOworfQorCitz dGF0aWMgaW5saW5lIHVpbnQ2NF90Citwb3cyX2NlaWxfdTY0KHVpbnQ2NF90IHgpIHsKKwlpZiAo dW5saWtlbHkoeCA8PSAxKSkgeworCQlyZXR1cm4geDsKKwl9CisJc2l6ZV90IG1zYl9vbl9pbmRl eCA9IGZsc191NjQoeCAtIDEpOworCS8qCisJICogUmFuZ2UtY2hlY2s7IGl0J3Mgb24gdGhlIGNh bGxlcnMgdG8gZW5zdXJlIHRoYXQgdGhlIHJlc3VsdCBvZiB0aGlzCisJICogY2FsbCB3b24ndCBv dmVyZmxvdy4KKwkgKi8KKwlhc3NlcnQobXNiX29uX2luZGV4IDwgNjMpOworCXJldHVybiAxVUxM IDw8IChtc2Jfb25faW5kZXggKyAxKTsKK30KKworc3RhdGljIGlubGluZSB1aW50MzJfdAorcG93 Ml9jZWlsX3UzMih1aW50MzJfdCB4KSB7CisJaWYgKHVubGlrZWx5KHggPD0gMSkpIHsKKwkgICAg cmV0dXJuIHg7CisJfQorCXNpemVfdCBtc2Jfb25faW5kZXggPSBmbHNfdTMyKHggLSAxKTsKKwkv KiBBcyBhYm92ZS4gKi8KKwlhc3NlcnQobXNiX29uX2luZGV4IDwgMzEpOworCXJldHVybiAxVSA8 PCAobXNiX29uX2luZGV4ICsgMSk7Cit9CisKKy8qIENvbXB1dGUgdGhlIHNtYWxsZXN0IHBvd2Vy IG9mIDIgdGhhdCBpcyA+PSB4LiAqLworc3RhdGljIGlubGluZSBzaXplX3QKK3BvdzJfY2VpbF96 dShzaXplX3QgeCkgeworI2lmIChMR19TSVpFT0ZfUFRSID09IDMpCisJcmV0dXJuIHBvdzJfY2Vp bF91NjQoeCk7CisjZWxzZQorCXJldHVybiBwb3cyX2NlaWxfdTMyKHgpOworI2VuZGlmCit9CisK K3N0YXRpYyBpbmxpbmUgdW5zaWduZWQKK2xnX2Zsb29yKHNpemVfdCB4KSB7CisJdXRpbF9hc3N1 bWUoeCAhPSAwKTsKKyNpZiAoTEdfU0laRU9GX1BUUiA9PSAzKQorCXJldHVybiBmbHNfdTY0KHgp OworI2Vsc2UKKwlyZXR1cm4gZmxzX3UzMih4KTsKKyNlbmRpZgorfQorCitzdGF0aWMgaW5saW5l IHVuc2lnbmVkCitsZ19jZWlsKHNpemVfdCB4KSB7CisJcmV0dXJuIGxnX2Zsb29yKHgpICsgKCh4 ICYgKHggLSAxKSkgPT0gMCA/IDAgOiAxKTsKK30KKworLyogQSBjb21waWxlLXRpbWUgdmVyc2lv biBvZiBsZ19mbG9vciBhbmQgbGdfY2VpbC4gKi8KKyNkZWZpbmUgTEdfRkxPT1JfMSh4KSAwCisj ZGVmaW5lIExHX0ZMT09SXzIoeCkgKHggPCAoMVVMTCA8PCAxKSA/IExHX0ZMT09SXzEoeCkgOiAx ICsgTEdfRkxPT1JfMSh4ID4+IDEpKQorI2RlZmluZSBMR19GTE9PUl80KHgpICh4IDwgKDFVTEwg PDwgMikgPyBMR19GTE9PUl8yKHgpIDogMiArIExHX0ZMT09SXzIoeCA+PiAyKSkKKyNkZWZpbmUg TEdfRkxPT1JfOCh4KSAoeCA8ICgxVUxMIDw8IDQpID8gTEdfRkxPT1JfNCh4KSA6IDQgKyBMR19G TE9PUl80KHggPj4gNCkpCisjZGVmaW5lIExHX0ZMT09SXzE2KHgpICh4IDwgKDFVTEwgPDwgOCkg PyBMR19GTE9PUl84KHgpIDogOCArIExHX0ZMT09SXzgoeCA+PiA4KSkKKyNkZWZpbmUgTEdfRkxP T1JfMzIoeCkgKHggPCAoMVVMTCA8PCAxNikgPyBMR19GTE9PUl8xNih4KSA6IDE2ICsgTEdfRkxP T1JfMTYoeCA+PiAxNikpCisjZGVmaW5lIExHX0ZMT09SXzY0KHgpICh4IDwgKDFVTEwgPDwgMzIp ID8gTEdfRkxPT1JfMzIoeCkgOiAzMiArIExHX0ZMT09SXzMyKHggPj4gMzIpKQorI2lmIExHX1NJ WkVPRl9QVFIgPT0gMgorIyAgZGVmaW5lIExHX0ZMT09SKHgpIExHX0ZMT09SXzMyKCh4KSkKKyNl bHNlCisjICBkZWZpbmUgTEdfRkxPT1IoeCkgTEdfRkxPT1JfNjQoKHgpKQorI2VuZGlmCisKKyNk ZWZpbmUgTEdfQ0VJTCh4KSAoTEdfRkxPT1IoeCkgKyAoKCh4KSAmICgoeCkgLSAxKSkgPT0gMCA/ IDAgOiAxKSkKKworI2VuZGlmIC8qIEpFTUFMTE9DX0lOVEVSTkFMX0JJVF9VVElMX0ggKi8KCmRp ZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRl L2plbWFsbG9jL2ludGVybmFsL2JpdG1hcC5oIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVt YWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9iaXRtYXAuaApuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzE5NDU0Ci0tLSAvZGV2L251bGwKKysrIGIvMzg5 LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRl cm5hbC9iaXRtYXAuaApAQCAtMCwwICsxLDM2OCBAQAorI2lmbmRlZiBKRU1BTExPQ19JTlRFUk5B TF9CSVRNQVBfSAorI2RlZmluZSBKRU1BTExPQ19JTlRFUk5BTF9CSVRNQVBfSAorCisjaW5jbHVk ZSAiamVtYWxsb2MvaW50ZXJuYWwvYml0X3V0aWwuaCIKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRl cm5hbC9zYy5oIgorCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgYml0bWFwX3Q7CisjZGVmaW5lIExH X1NJWkVPRl9CSVRNQVAJTEdfU0laRU9GX0xPTkcKKworLyogTWF4aW11bSBiaXRtYXAgYml0IGNv dW50IGlzIDJeTEdfQklUTUFQX01BWEJJVFMuICovCisjaWYgU0NfTEdfU0xBQl9NQVhSRUdTID4g TEdfQ0VJTChTQ19OU0laRVMpCisvKiBNYXhpbXVtIGJpdG1hcCBiaXQgY291bnQgaXMgZGV0ZXJt aW5lZCBieSBtYXhpbXVtIHJlZ2lvbnMgcGVyIHNsYWIuICovCisjICBkZWZpbmUgTEdfQklUTUFQ X01BWEJJVFMJU0NfTEdfU0xBQl9NQVhSRUdTCisjZWxzZQorLyogTWF4aW11bSBiaXRtYXAgYml0 IGNvdW50IGlzIGRldGVybWluZWQgYnkgbnVtYmVyIG9mIGV4dGVudCBzaXplIGNsYXNzZXMuICov CisjICBkZWZpbmUgTEdfQklUTUFQX01BWEJJVFMJTEdfQ0VJTChTQ19OU0laRVMpCisjZW5kaWYK KyNkZWZpbmUgQklUTUFQX01BWEJJVFMJCShaVSgxKSA8PCBMR19CSVRNQVBfTUFYQklUUykKKwor LyogTnVtYmVyIG9mIGJpdHMgcGVyIGdyb3VwLiAqLworI2RlZmluZSBMR19CSVRNQVBfR1JPVVBf TkJJVFMJCShMR19TSVpFT0ZfQklUTUFQICsgMykKKyNkZWZpbmUgQklUTUFQX0dST1VQX05CSVRT CQkoMVUgPDwgTEdfQklUTUFQX0dST1VQX05CSVRTKQorI2RlZmluZSBCSVRNQVBfR1JPVVBfTkJJ VFNfTUFTSwkJKEJJVE1BUF9HUk9VUF9OQklUUy0xKQorCisvKgorICogRG8gc29tZSBhbmFseXNp cyBvbiBob3cgYmlnIHRoZSBiaXRtYXAgaXMgYmVmb3JlIHdlIHVzZSBhIHRyZWUuICBGb3IgYSBi cnV0ZQorICogZm9yY2UgbGluZWFyIHNlYXJjaCwgaWYgd2Ugd291bGQgaGF2ZSB0byBjYWxsIGZm c19sdSgpIG1vcmUgdGhhbiAyXjMgdGltZXMsCisgKiB1c2UgYSB0cmVlIGluc3RlYWQuCisgKi8K KyNpZiBMR19CSVRNQVBfTUFYQklUUyAtIExHX0JJVE1BUF9HUk9VUF9OQklUUyA+IDMKKyMgIGRl ZmluZSBCSVRNQVBfVVNFX1RSRUUKKyNlbmRpZgorCisvKiBOdW1iZXIgb2YgZ3JvdXBzIHJlcXVp cmVkIHRvIHN0b3JlIGEgZ2l2ZW4gbnVtYmVyIG9mIGJpdHMuICovCisjZGVmaW5lIEJJVE1BUF9C SVRTMkdST1VQUyhuYml0cykJCQkJCVwKKyAgICAoKChuYml0cykgKyBCSVRNQVBfR1JPVVBfTkJJ VFNfTUFTSykgPj4gTEdfQklUTUFQX0dST1VQX05CSVRTKQorCisvKgorICogTnVtYmVyIG9mIGdy b3VwcyByZXF1aXJlZCBhdCBhIHBhcnRpY3VsYXIgbGV2ZWwgZm9yIGEgZ2l2ZW4gbnVtYmVyIG9m IGJpdHMuCisgKi8KKyNkZWZpbmUgQklUTUFQX0dST1VQU19MMChuYml0cykJCQkJCQlcCisgICAg QklUTUFQX0JJVFMyR1JPVVBTKG5iaXRzKQorI2RlZmluZSBCSVRNQVBfR1JPVVBTX0wxKG5iaXRz KQkJCQkJCVwKKyAgICBCSVRNQVBfQklUUzJHUk9VUFMoQklUTUFQX0JJVFMyR1JPVVBTKG5iaXRz KSkKKyNkZWZpbmUgQklUTUFQX0dST1VQU19MMihuYml0cykJCQkJCQlcCisgICAgQklUTUFQX0JJ VFMyR1JPVVBTKEJJVE1BUF9CSVRTMkdST1VQUyhCSVRNQVBfQklUUzJHUk9VUFMoKG5iaXRzKSkp KQorI2RlZmluZSBCSVRNQVBfR1JPVVBTX0wzKG5iaXRzKQkJCQkJCVwKKyAgICBCSVRNQVBfQklU UzJHUk9VUFMoQklUTUFQX0JJVFMyR1JPVVBTKEJJVE1BUF9CSVRTMkdST1VQUygJCVwKKwlCSVRN QVBfQklUUzJHUk9VUFMoKG5iaXRzKSkpKSkKKyNkZWZpbmUgQklUTUFQX0dST1VQU19MNChuYml0 cykJCQkJCQlcCisgICAgQklUTUFQX0JJVFMyR1JPVVBTKEJJVE1BUF9CSVRTMkdST1VQUyhCSVRN QVBfQklUUzJHUk9VUFMoCQlcCisJQklUTUFQX0JJVFMyR1JPVVBTKEJJVE1BUF9CSVRTMkdST1VQ UygobmJpdHMpKSkpKSkKKworLyoKKyAqIEFzc3VtaW5nIHRoZSBudW1iZXIgb2YgbGV2ZWxzLCBu dW1iZXIgb2YgZ3JvdXBzIHJlcXVpcmVkIGZvciBhIGdpdmVuIG51bWJlcgorICogb2YgYml0cy4K KyAqLworI2RlZmluZSBCSVRNQVBfR1JPVVBTXzFfTEVWRUwobmJpdHMpCQkJCQlcCisgICAgQklU TUFQX0dST1VQU19MMChuYml0cykKKyNkZWZpbmUgQklUTUFQX0dST1VQU18yX0xFVkVMKG5iaXRz KQkJCQkJXAorICAgIChCSVRNQVBfR1JPVVBTXzFfTEVWRUwobmJpdHMpICsgQklUTUFQX0dST1VQ U19MMShuYml0cykpCisjZGVmaW5lIEJJVE1BUF9HUk9VUFNfM19MRVZFTChuYml0cykJCQkJCVwK KyAgICAoQklUTUFQX0dST1VQU18yX0xFVkVMKG5iaXRzKSArIEJJVE1BUF9HUk9VUFNfTDIobmJp dHMpKQorI2RlZmluZSBCSVRNQVBfR1JPVVBTXzRfTEVWRUwobmJpdHMpCQkJCQlcCisgICAgKEJJ VE1BUF9HUk9VUFNfM19MRVZFTChuYml0cykgKyBCSVRNQVBfR1JPVVBTX0wzKG5iaXRzKSkKKyNk ZWZpbmUgQklUTUFQX0dST1VQU181X0xFVkVMKG5iaXRzKQkJCQkJXAorICAgIChCSVRNQVBfR1JP VVBTXzRfTEVWRUwobmJpdHMpICsgQklUTUFQX0dST1VQU19MNChuYml0cykpCisKKy8qCisgKiBN YXhpbXVtIG51bWJlciBvZiBncm91cHMgcmVxdWlyZWQgdG8gc3VwcG9ydCBMR19CSVRNQVBfTUFY QklUUy4KKyAqLworI2lmZGVmIEJJVE1BUF9VU0VfVFJFRQorCisjaWYgTEdfQklUTUFQX01BWEJJ VFMgPD0gTEdfQklUTUFQX0dST1VQX05CSVRTCisjICBkZWZpbmUgQklUTUFQX0dST1VQUyhuYml0 cykJQklUTUFQX0dST1VQU18xX0xFVkVMKG5iaXRzKQorIyAgZGVmaW5lIEJJVE1BUF9HUk9VUFNf TUFYCUJJVE1BUF9HUk9VUFNfMV9MRVZFTChCSVRNQVBfTUFYQklUUykKKyNlbGlmIExHX0JJVE1B UF9NQVhCSVRTIDw9IExHX0JJVE1BUF9HUk9VUF9OQklUUyAqIDIKKyMgIGRlZmluZSBCSVRNQVBf R1JPVVBTKG5iaXRzKQlCSVRNQVBfR1JPVVBTXzJfTEVWRUwobmJpdHMpCisjICBkZWZpbmUgQklU TUFQX0dST1VQU19NQVgJQklUTUFQX0dST1VQU18yX0xFVkVMKEJJVE1BUF9NQVhCSVRTKQorI2Vs aWYgTEdfQklUTUFQX01BWEJJVFMgPD0gTEdfQklUTUFQX0dST1VQX05CSVRTICogMworIyAgZGVm aW5lIEJJVE1BUF9HUk9VUFMobmJpdHMpCUJJVE1BUF9HUk9VUFNfM19MRVZFTChuYml0cykKKyMg IGRlZmluZSBCSVRNQVBfR1JPVVBTX01BWAlCSVRNQVBfR1JPVVBTXzNfTEVWRUwoQklUTUFQX01B WEJJVFMpCisjZWxpZiBMR19CSVRNQVBfTUFYQklUUyA8PSBMR19CSVRNQVBfR1JPVVBfTkJJVFMg KiA0CisjICBkZWZpbmUgQklUTUFQX0dST1VQUyhuYml0cykJQklUTUFQX0dST1VQU180X0xFVkVM KG5iaXRzKQorIyAgZGVmaW5lIEJJVE1BUF9HUk9VUFNfTUFYCUJJVE1BUF9HUk9VUFNfNF9MRVZF TChCSVRNQVBfTUFYQklUUykKKyNlbGlmIExHX0JJVE1BUF9NQVhCSVRTIDw9IExHX0JJVE1BUF9H Uk9VUF9OQklUUyAqIDUKKyMgIGRlZmluZSBCSVRNQVBfR1JPVVBTKG5iaXRzKQlCSVRNQVBfR1JP VVBTXzVfTEVWRUwobmJpdHMpCisjICBkZWZpbmUgQklUTUFQX0dST1VQU19NQVgJQklUTUFQX0dS T1VQU181X0xFVkVMKEJJVE1BUF9NQVhCSVRTKQorI2Vsc2UKKyMgIGVycm9yICJVbnN1cHBvcnRl ZCBiaXRtYXAgc2l6ZSIKKyNlbmRpZgorCisvKgorICogTWF4aW11bSBudW1iZXIgb2YgbGV2ZWxz IHBvc3NpYmxlLiAgVGhpcyBjb3VsZCBiZSBzdGF0aWNhbGx5IGNvbXB1dGVkIGJhc2VkCisgKiBv biBMR19CSVRNQVBfTUFYQklUUzoKKyAqCisgKiAjZGVmaW5lIEJJVE1BUF9NQVhfTEVWRUxTIFwK KyAqICAgICAoTEdfQklUTUFQX01BWEJJVFMgLyBMR19TSVpFT0ZfQklUTUFQKSBcCisgKiAgICAg KyAhIShMR19CSVRNQVBfTUFYQklUUyAlIExHX1NJWkVPRl9CSVRNQVApCisgKgorICogSG93ZXZl ciwgdGhhdCB3b3VsZCBub3QgYWxsb3cgdGhlIGdlbmVyaWMgQklUTUFQX0lORk9fSU5JVElBTEla RVIoKSBtYWNybywgc28KKyAqIGluc3RlYWQgaGFyZGNvZGUgQklUTUFQX01BWF9MRVZFTFMgdG8g dGhlIGxhcmdlc3QgbnVtYmVyIHN1cHBvcnRlZCBieSB0aGUKKyAqIHZhcmlvdXMgY2FzY2FkaW5n IG1hY3Jvcy4gIFRoZSBvbmx5IGFkZGl0aW9uYWwgY29zdCB0aGlzIGluY3VycyBpcyBzb21lCisg KiB1bnVzZWQgdHJhaWxpbmcgZW50cmllcyBpbiBiaXRtYXBfaW5mb190IHN0cnVjdHVyZXM7IHRo ZSBiaXRtYXBzIHRoZW1zZWx2ZXMKKyAqIGFyZSBub3QgaW1wYWN0ZWQuCisgKi8KKyNkZWZpbmUg QklUTUFQX01BWF9MRVZFTFMJNQorCisjZGVmaW5lIEJJVE1BUF9JTkZPX0lOSVRJQUxJWkVSKG5i aXRzKSB7CQkJCVwKKwkvKiBuYml0cy4gKi8JCQkJCQkJXAorCW5iaXRzLAkJCQkJCQkJXAorCS8q IG5sZXZlbHMuICovCQkJCQkJCVwKKwkoQklUTUFQX0dST1VQU19MMChuYml0cykgPiBCSVRNQVBf R1JPVVBTX0wxKG5iaXRzKSkgKwkJXAorCSAgICAoQklUTUFQX0dST1VQU19MMShuYml0cykgPiBC SVRNQVBfR1JPVVBTX0wyKG5iaXRzKSkgKwlcCisJICAgIChCSVRNQVBfR1JPVVBTX0wyKG5iaXRz KSA+IEJJVE1BUF9HUk9VUFNfTDMobmJpdHMpKSArCVwKKwkgICAgKEJJVE1BUF9HUk9VUFNfTDMo bmJpdHMpID4gQklUTUFQX0dST1VQU19MNChuYml0cykpICsgMSwJXAorCS8qIGxldmVscy4gKi8J CQkJCQkJXAorCXsJCQkJCQkJCVwKKwkJezB9LAkJCQkJCQlcCisJCXtCSVRNQVBfR1JPVVBTX0ww KG5iaXRzKX0sCQkJCVwKKwkJe0JJVE1BUF9HUk9VUFNfTDEobmJpdHMpICsgQklUTUFQX0dST1VQ U19MMChuYml0cyl9LAlcCisJCXtCSVRNQVBfR1JPVVBTX0wyKG5iaXRzKSArIEJJVE1BUF9HUk9V UFNfTDEobmJpdHMpICsJXAorCQkgICAgQklUTUFQX0dST1VQU19MMChuYml0cyl9LAkJCQlcCisJ CXtCSVRNQVBfR1JPVVBTX0wzKG5iaXRzKSArIEJJVE1BUF9HUk9VUFNfTDIobmJpdHMpICsJXAor CQkgICAgQklUTUFQX0dST1VQU19MMShuYml0cykgKyBCSVRNQVBfR1JPVVBTX0wwKG5iaXRzKX0s CVwKKwkJe0JJVE1BUF9HUk9VUFNfTDQobmJpdHMpICsgQklUTUFQX0dST1VQU19MMyhuYml0cykg KwlcCisJCSAgICAgQklUTUFQX0dST1VQU19MMihuYml0cykgKyBCSVRNQVBfR1JPVVBTX0wxKG5i aXRzKQlcCisJCSAgICAgKyBCSVRNQVBfR1JPVVBTX0wwKG5iaXRzKX0JCQkJXAorCX0JCQkJCQkJ CVwKK30KKworI2Vsc2UgLyogQklUTUFQX1VTRV9UUkVFICovCisKKyNkZWZpbmUgQklUTUFQX0dS T1VQUyhuYml0cykJQklUTUFQX0JJVFMyR1JPVVBTKG5iaXRzKQorI2RlZmluZSBCSVRNQVBfR1JP VVBTX01BWAlCSVRNQVBfQklUUzJHUk9VUFMoQklUTUFQX01BWEJJVFMpCisKKyNkZWZpbmUgQklU TUFQX0lORk9fSU5JVElBTElaRVIobmJpdHMpIHsJCQkJXAorCS8qIG5iaXRzLiAqLwkJCQkJCQlc CisJbmJpdHMsCQkJCQkJCQlcCisJLyogbmdyb3Vwcy4gKi8JCQkJCQkJXAorCUJJVE1BUF9CSVRT MkdST1VQUyhuYml0cykJCQkJCVwKK30KKworI2VuZGlmIC8qIEJJVE1BUF9VU0VfVFJFRSAqLwor Cit0eXBlZGVmIHN0cnVjdCBiaXRtYXBfbGV2ZWxfcyB7CisJLyogT2Zmc2V0IG9mIHRoaXMgbGV2 ZWwncyBncm91cHMgd2l0aGluIHRoZSBhcnJheSBvZiBncm91cHMuICovCisJc2l6ZV90IGdyb3Vw X29mZnNldDsKK30gYml0bWFwX2xldmVsX3Q7CisKK3R5cGVkZWYgc3RydWN0IGJpdG1hcF9pbmZv X3MgeworCS8qIExvZ2ljYWwgbnVtYmVyIG9mIGJpdHMgaW4gYml0bWFwIChzdG9yZWQgYXQgYm90 dG9tIGxldmVsKS4gKi8KKwlzaXplX3QgbmJpdHM7CisKKyNpZmRlZiBCSVRNQVBfVVNFX1RSRUUK KwkvKiBOdW1iZXIgb2YgbGV2ZWxzIG5lY2Vzc2FyeSBmb3IgbmJpdHMuICovCisJdW5zaWduZWQg bmxldmVsczsKKworCS8qCisJICogT25seSB0aGUgZmlyc3QgKG5sZXZlbHMrMSkgZWxlbWVudHMg YXJlIHVzZWQsIGFuZCBsZXZlbHMgYXJlIG9yZGVyZWQKKwkgKiBib3R0b20gdG8gdG9wIChlLmcu IHRoZSBib3R0b20gbGV2ZWwgaXMgc3RvcmVkIGluIGxldmVsc1swXSkuCisJICovCisJYml0bWFw X2xldmVsX3QgbGV2ZWxzW0JJVE1BUF9NQVhfTEVWRUxTKzFdOworI2Vsc2UgLyogQklUTUFQX1VT RV9UUkVFICovCisJLyogTnVtYmVyIG9mIGdyb3VwcyBuZWNlc3NhcnkgZm9yIG5iaXRzLiAqLwor CXNpemVfdCBuZ3JvdXBzOworI2VuZGlmIC8qIEJJVE1BUF9VU0VfVFJFRSAqLworfSBiaXRtYXBf aW5mb190OworCit2b2lkIGJpdG1hcF9pbmZvX2luaXQoYml0bWFwX2luZm9fdCAqYmluZm8sIHNp emVfdCBuYml0cyk7Cit2b2lkIGJpdG1hcF9pbml0KGJpdG1hcF90ICpiaXRtYXAsIGNvbnN0IGJp dG1hcF9pbmZvX3QgKmJpbmZvLCBib29sIGZpbGwpOworc2l6ZV90IGJpdG1hcF9zaXplKGNvbnN0 IGJpdG1hcF9pbmZvX3QgKmJpbmZvKTsKKworc3RhdGljIGlubGluZSBib29sCitiaXRtYXBfZnVs bChiaXRtYXBfdCAqYml0bWFwLCBjb25zdCBiaXRtYXBfaW5mb190ICpiaW5mbykgeworI2lmZGVm IEJJVE1BUF9VU0VfVFJFRQorCXNpemVfdCByZ29mZiA9IGJpbmZvLT5sZXZlbHNbYmluZm8tPm5s ZXZlbHNdLmdyb3VwX29mZnNldCAtIDE7CisJYml0bWFwX3QgcmcgPSBiaXRtYXBbcmdvZmZdOwor CS8qIFRoZSBiaXRtYXAgaXMgZnVsbCBpZmYgdGhlIHJvb3QgZ3JvdXAgaXMgMC4gKi8KKwlyZXR1 cm4gKHJnID09IDApOworI2Vsc2UKKwlzaXplX3QgaTsKKworCWZvciAoaSA9IDA7IGkgPCBiaW5m by0+bmdyb3VwczsgaSsrKSB7CisJCWlmIChiaXRtYXBbaV0gIT0gMCkgeworCQkJcmV0dXJuIGZh bHNlOworCQl9CisJfQorCXJldHVybiB0cnVlOworI2VuZGlmCit9CisKK3N0YXRpYyBpbmxpbmUg Ym9vbAorYml0bWFwX2dldChiaXRtYXBfdCAqYml0bWFwLCBjb25zdCBiaXRtYXBfaW5mb190ICpi aW5mbywgc2l6ZV90IGJpdCkgeworCXNpemVfdCBnb2ZmOworCWJpdG1hcF90IGc7CisKKwlhc3Nl cnQoYml0IDwgYmluZm8tPm5iaXRzKTsKKwlnb2ZmID0gYml0ID4+IExHX0JJVE1BUF9HUk9VUF9O QklUUzsKKwlnID0gYml0bWFwW2dvZmZdOworCXJldHVybiAhKGcgJiAoWlUoMSkgPDwgKGJpdCAm IEJJVE1BUF9HUk9VUF9OQklUU19NQVNLKSkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2Jp dG1hcF9zZXQoYml0bWFwX3QgKmJpdG1hcCwgY29uc3QgYml0bWFwX2luZm9fdCAqYmluZm8sIHNp emVfdCBiaXQpIHsKKwlzaXplX3QgZ29mZjsKKwliaXRtYXBfdCAqZ3A7CisJYml0bWFwX3QgZzsK KworCWFzc2VydChiaXQgPCBiaW5mby0+bmJpdHMpOworCWFzc2VydCghYml0bWFwX2dldChiaXRt YXAsIGJpbmZvLCBiaXQpKTsKKwlnb2ZmID0gYml0ID4+IExHX0JJVE1BUF9HUk9VUF9OQklUUzsK KwlncCA9ICZiaXRtYXBbZ29mZl07CisJZyA9ICpncDsKKwlhc3NlcnQoZyAmIChaVSgxKSA8PCAo Yml0ICYgQklUTUFQX0dST1VQX05CSVRTX01BU0spKSk7CisJZyBePSBaVSgxKSA8PCAoYml0ICYg QklUTUFQX0dST1VQX05CSVRTX01BU0spOworCSpncCA9IGc7CisJYXNzZXJ0KGJpdG1hcF9nZXQo Yml0bWFwLCBiaW5mbywgYml0KSk7CisjaWZkZWYgQklUTUFQX1VTRV9UUkVFCisJLyogUHJvcGFn YXRlIGdyb3VwIHN0YXRlIHRyYW5zaXRpb25zIHVwIHRoZSB0cmVlLiAqLworCWlmIChnID09IDAp IHsKKwkJdW5zaWduZWQgaTsKKwkJZm9yIChpID0gMTsgaSA8IGJpbmZvLT5ubGV2ZWxzOyBpKysp IHsKKwkJCWJpdCA9IGdvZmY7CisJCQlnb2ZmID0gYml0ID4+IExHX0JJVE1BUF9HUk9VUF9OQklU UzsKKwkJCWdwID0gJmJpdG1hcFtiaW5mby0+bGV2ZWxzW2ldLmdyb3VwX29mZnNldCArIGdvZmZd OworCQkJZyA9ICpncDsKKwkJCWFzc2VydChnICYgKFpVKDEpIDw8IChiaXQgJiBCSVRNQVBfR1JP VVBfTkJJVFNfTUFTSykpKTsKKwkJCWcgXj0gWlUoMSkgPDwgKGJpdCAmIEJJVE1BUF9HUk9VUF9O QklUU19NQVNLKTsKKwkJCSpncCA9IGc7CisJCQlpZiAoZyAhPSAwKSB7CisJCQkJYnJlYWs7CisJ CQl9CisJCX0KKwl9CisjZW5kaWYKK30KKworLyogZmZ1OiBmaW5kIGZpcnN0IHVuc2V0ID49IGJp dC4gKi8KK3N0YXRpYyBpbmxpbmUgc2l6ZV90CitiaXRtYXBfZmZ1KGNvbnN0IGJpdG1hcF90ICpi aXRtYXAsIGNvbnN0IGJpdG1hcF9pbmZvX3QgKmJpbmZvLCBzaXplX3QgbWluX2JpdCkgeworCWFz c2VydChtaW5fYml0IDwgYmluZm8tPm5iaXRzKTsKKworI2lmZGVmIEJJVE1BUF9VU0VfVFJFRQor CXNpemVfdCBiaXQgPSAwOworCWZvciAodW5zaWduZWQgbGV2ZWwgPSBiaW5mby0+bmxldmVsczsg bGV2ZWwtLTspIHsKKwkJc2l6ZV90IGxnX2JpdHNfcGVyX2dyb3VwID0gKExHX0JJVE1BUF9HUk9V UF9OQklUUyAqIChsZXZlbCArCisJCSAgICAxKSk7CisJCWJpdG1hcF90IGdyb3VwID0gYml0bWFw W2JpbmZvLT5sZXZlbHNbbGV2ZWxdLmdyb3VwX29mZnNldCArIChiaXQKKwkJICAgID4+IGxnX2Jp dHNfcGVyX2dyb3VwKV07CisJCXVuc2lnbmVkIGdyb3VwX25tYXNrID0gKHVuc2lnbmVkKSgoKG1p bl9iaXQgPiBiaXQpID8gKG1pbl9iaXQgLQorCQkgICAgYml0KSA6IDApID4+IChsZ19iaXRzX3Bl cl9ncm91cCAtIExHX0JJVE1BUF9HUk9VUF9OQklUUykpOworCQlhc3NlcnQoZ3JvdXBfbm1hc2sg PD0gQklUTUFQX0dST1VQX05CSVRTKTsKKwkJYml0bWFwX3QgZ3JvdXBfbWFzayA9IH4oKDFMVSA8 PCBncm91cF9ubWFzaykgLSAxKTsKKwkJYml0bWFwX3QgZ3JvdXBfbWFza2VkID0gZ3JvdXAgJiBn cm91cF9tYXNrOworCQlpZiAoZ3JvdXBfbWFza2VkID09IDBMVSkgeworCQkJaWYgKGdyb3VwID09 IDBMVSkgeworCQkJCXJldHVybiBiaW5mby0+bmJpdHM7CisJCQl9CisJCQkvKgorCQkJICogbWlu X2JpdCB3YXMgcHJlY2VkZWQgYnkgb25lIG9yIG1vcmUgdW5zZXQgYml0cyBpbgorCQkJICogdGhp cyBncm91cCwgYnV0IHRoZXJlIGFyZSBubyBvdGhlciB1bnNldCBiaXRzIGluIHRoaXMKKwkJCSAq IGdyb3VwLiAgVHJ5IGFnYWluIHN0YXJ0aW5nIGF0IHRoZSBmaXJzdCBiaXQgb2YgdGhlCisJCQkg KiBuZXh0IHNpYmxpbmcuICBUaGlzIHdpbGwgcmVjdXJzZSBhdCBtb3N0IG9uY2UgcGVyCisJCQkg KiBub24tcm9vdCBsZXZlbC4KKwkJCSAqLworCQkJc2l6ZV90IHNpYl9iYXNlID0gYml0ICsgKFpV KDEpIDw8IGxnX2JpdHNfcGVyX2dyb3VwKTsKKwkJCWFzc2VydChzaWJfYmFzZSA+IG1pbl9iaXQp OworCQkJYXNzZXJ0KHNpYl9iYXNlID4gYml0KTsKKwkJCWlmIChzaWJfYmFzZSA+PSBiaW5mby0+ bmJpdHMpIHsKKwkJCQlyZXR1cm4gYmluZm8tPm5iaXRzOworCQkJfQorCQkJcmV0dXJuIGJpdG1h cF9mZnUoYml0bWFwLCBiaW5mbywgc2liX2Jhc2UpOworCQl9CisJCWJpdCArPSAoKHNpemVfdClm ZnNfbHUoZ3JvdXBfbWFza2VkKSkgPDwKKwkJICAgIChsZ19iaXRzX3Blcl9ncm91cCAtIExHX0JJ VE1BUF9HUk9VUF9OQklUUyk7CisJfQorCWFzc2VydChiaXQgPj0gbWluX2JpdCk7CisJYXNzZXJ0 KGJpdCA8IGJpbmZvLT5uYml0cyk7CisJcmV0dXJuIGJpdDsKKyNlbHNlCisJc2l6ZV90IGkgPSBt aW5fYml0ID4+IExHX0JJVE1BUF9HUk9VUF9OQklUUzsKKwliaXRtYXBfdCBnID0gYml0bWFwW2ld ICYgfigoMUxVIDw8IChtaW5fYml0ICYgQklUTUFQX0dST1VQX05CSVRTX01BU0spKQorCSAgICAt IDEpOworCXNpemVfdCBiaXQ7CisJZG8geworCQlpZiAoZyAhPSAwKSB7CisJCQliaXQgPSBmZnNf bHUoZyk7CisJCQlyZXR1cm4gKGkgPDwgTEdfQklUTUFQX0dST1VQX05CSVRTKSArIGJpdDsKKwkJ fQorCQlpKys7CisJCWcgPSBiaXRtYXBbaV07CisJfSB3aGlsZSAoaSA8IGJpbmZvLT5uZ3JvdXBz KTsKKwlyZXR1cm4gYmluZm8tPm5iaXRzOworI2VuZGlmCit9CisKKy8qIHNmdTogc2V0IGZpcnN0 IHVuc2V0LiAqLworc3RhdGljIGlubGluZSBzaXplX3QKK2JpdG1hcF9zZnUoYml0bWFwX3QgKmJp dG1hcCwgY29uc3QgYml0bWFwX2luZm9fdCAqYmluZm8pIHsKKwlzaXplX3QgYml0OworCWJpdG1h cF90IGc7CisJdW5zaWduZWQgaTsKKworCWFzc2VydCghYml0bWFwX2Z1bGwoYml0bWFwLCBiaW5m bykpOworCisjaWZkZWYgQklUTUFQX1VTRV9UUkVFCisJaSA9IGJpbmZvLT5ubGV2ZWxzIC0gMTsK KwlnID0gYml0bWFwW2JpbmZvLT5sZXZlbHNbaV0uZ3JvdXBfb2Zmc2V0XTsKKwliaXQgPSBmZnNf bHUoZyk7CisJd2hpbGUgKGkgPiAwKSB7CisJCWktLTsKKwkJZyA9IGJpdG1hcFtiaW5mby0+bGV2 ZWxzW2ldLmdyb3VwX29mZnNldCArIGJpdF07CisJCWJpdCA9IChiaXQgPDwgTEdfQklUTUFQX0dS T1VQX05CSVRTKSArIGZmc19sdShnKTsKKwl9CisjZWxzZQorCWkgPSAwOworCWcgPSBiaXRtYXBb MF07CisJd2hpbGUgKGcgPT0gMCkgeworCQlpKys7CisJCWcgPSBiaXRtYXBbaV07CisJfQorCWJp dCA9IChpIDw8IExHX0JJVE1BUF9HUk9VUF9OQklUUykgKyBmZnNfbHUoZyk7CisjZW5kaWYKKwli aXRtYXBfc2V0KGJpdG1hcCwgYmluZm8sIGJpdCk7CisJcmV0dXJuIGJpdDsKK30KKworc3RhdGlj IGlubGluZSB2b2lkCitiaXRtYXBfdW5zZXQoYml0bWFwX3QgKmJpdG1hcCwgY29uc3QgYml0bWFw X2luZm9fdCAqYmluZm8sIHNpemVfdCBiaXQpIHsKKwlzaXplX3QgZ29mZjsKKwliaXRtYXBfdCAq Z3A7CisJYml0bWFwX3QgZzsKKwlVTlVTRUQgYm9vbCBwcm9wYWdhdGU7CisKKwlhc3NlcnQoYml0 IDwgYmluZm8tPm5iaXRzKTsKKwlhc3NlcnQoYml0bWFwX2dldChiaXRtYXAsIGJpbmZvLCBiaXQp KTsKKwlnb2ZmID0gYml0ID4+IExHX0JJVE1BUF9HUk9VUF9OQklUUzsKKwlncCA9ICZiaXRtYXBb Z29mZl07CisJZyA9ICpncDsKKwlwcm9wYWdhdGUgPSAoZyA9PSAwKTsKKwlhc3NlcnQoKGcgJiAo WlUoMSkgPDwgKGJpdCAmIEJJVE1BUF9HUk9VUF9OQklUU19NQVNLKSkpID09IDApOworCWcgXj0g WlUoMSkgPDwgKGJpdCAmIEJJVE1BUF9HUk9VUF9OQklUU19NQVNLKTsKKwkqZ3AgPSBnOworCWFz c2VydCghYml0bWFwX2dldChiaXRtYXAsIGJpbmZvLCBiaXQpKTsKKyNpZmRlZiBCSVRNQVBfVVNF X1RSRUUKKwkvKiBQcm9wYWdhdGUgZ3JvdXAgc3RhdGUgdHJhbnNpdGlvbnMgdXAgdGhlIHRyZWUu ICovCisJaWYgKHByb3BhZ2F0ZSkgeworCQl1bnNpZ25lZCBpOworCQlmb3IgKGkgPSAxOyBpIDwg YmluZm8tPm5sZXZlbHM7IGkrKykgeworCQkJYml0ID0gZ29mZjsKKwkJCWdvZmYgPSBiaXQgPj4g TEdfQklUTUFQX0dST1VQX05CSVRTOworCQkJZ3AgPSAmYml0bWFwW2JpbmZvLT5sZXZlbHNbaV0u Z3JvdXBfb2Zmc2V0ICsgZ29mZl07CisJCQlnID0gKmdwOworCQkJcHJvcGFnYXRlID0gKGcgPT0g MCk7CisJCQlhc3NlcnQoKGcgJiAoWlUoMSkgPDwgKGJpdCAmIEJJVE1BUF9HUk9VUF9OQklUU19N QVNLKSkpCisJCQkgICAgPT0gMCk7CisJCQlnIF49IFpVKDEpIDw8IChiaXQgJiBCSVRNQVBfR1JP VVBfTkJJVFNfTUFTSyk7CisJCQkqZ3AgPSBnOworCQkJaWYgKCFwcm9wYWdhdGUpIHsKKwkJCQli cmVhazsKKwkJCX0KKwkJfQorCX0KKyNlbmRpZiAvKiBCSVRNQVBfVVNFX1RSRUUgKi8KK30KKwor I2VuZGlmIC8qIEpFTUFMTE9DX0lOVEVSTkFMX0JJVE1BUF9IICovCgpkaWZmIC0tZ2l0IGEvMzg5 LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRl cm5hbC9idWZfd3JpdGVyLmggYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMu MC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL2J1Zl93cml0ZXIuaApuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwLi4zN2FhNmRlCi0tLSAvZGV2L251bGwKKysrIGIvMzg5LWRzLWJh c2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9i dWZfd3JpdGVyLmgKQEAgLTAsMCArMSwzMiBAQAorI2lmbmRlZiBKRU1BTExPQ19JTlRFUk5BTF9C VUZfV1JJVEVSX0gKKyNkZWZpbmUgSkVNQUxMT0NfSU5URVJOQUxfQlVGX1dSSVRFUl9ICisKKy8q CisgKiBOb3RlOiB3aGVuIHVzaW5nIHRoZSBidWZmZXJlZCB3cml0ZXIsIGNib3BhcXVlIGlzIHBh c3NlZCB0byB3cml0ZV9jYiBvbmx5CisgKiB3aGVuIHRoZSBidWZmZXIgaXMgZmx1c2hlZC4gIEl0 IHdvdWxkIG1ha2UgYSBkaWZmZXJlbmNlIGlmIGNib3BhcXVlIHBvaW50cworICogdG8gc29tZXRo aW5nIHRoYXQncyBjaGFuZ2luZyBmb3IgZWFjaCB3cml0ZV9jYiBjYWxsLCBvciBzb21ldGhpbmcg dGhhdAorICogYWZmZWN0cyB3cml0ZV9jYiBpbiBhIHdheSBkZXBlbmRlbnQgb24gdGhlIGNvbnRl bnQgb2YgdGhlIG91dHB1dCBzdHJpbmcuCisgKiBIb3dldmVyLCB0aGUgbW9zdCB0eXBpY2FsIHVz YWdlIGNhc2UgaW4gcHJhY3RpY2UgaXMgdGhhdCBjYm9wYXF1ZSBwb2ludHMgdG8KKyAqIHNvbWUg Im9wdGlvbiBsaWtlIiBjb250ZW50IGZvciB0aGUgd3JpdGVfY2IsIHNvIGl0IGRvZXNuJ3QgbWF0 dGVyLgorICovCisKK3R5cGVkZWYgc3RydWN0IHsKKwl3cml0ZV9jYl90ICp3cml0ZV9jYjsKKwl2 b2lkICpjYm9wYXF1ZTsKKwljaGFyICpidWY7CisJc2l6ZV90IGJ1Zl9zaXplOworCXNpemVfdCBi dWZfZW5kOworCWJvb2wgaW50ZXJuYWxfYnVmOworfSBidWZfd3JpdGVyX3Q7CisKK2Jvb2wgYnVm X3dyaXRlcl9pbml0KHRzZG5fdCAqdHNkbiwgYnVmX3dyaXRlcl90ICpidWZfd3JpdGVyLAorICAg IHdyaXRlX2NiX3QgKndyaXRlX2NiLCB2b2lkICpjYm9wYXF1ZSwgY2hhciAqYnVmLCBzaXplX3Qg YnVmX2xlbik7Cit2b2lkIGJ1Zl93cml0ZXJfZmx1c2goYnVmX3dyaXRlcl90ICpidWZfd3JpdGVy KTsKK3dyaXRlX2NiX3QgYnVmX3dyaXRlcl9jYjsKK3ZvaWQgYnVmX3dyaXRlcl90ZXJtaW5hdGUo dHNkbl90ICp0c2RuLCBidWZfd3JpdGVyX3QgKmJ1Zl93cml0ZXIpOworCit0eXBlZGVmIHNzaXpl X3QgKHJlYWRfY2JfdCkodm9pZCAqcmVhZF9jYm9wYXF1ZSwgdm9pZCAqYnVmLCBzaXplX3QgbGlt aXQpOwordm9pZCBidWZfd3JpdGVyX3BpcGUoYnVmX3dyaXRlcl90ICpidWZfd3JpdGVyLCByZWFk X2NiX3QgKnJlYWRfY2IsCisgICAgdm9pZCAqcmVhZF9jYm9wYXF1ZSk7CisKKyNlbmRpZiAvKiBK RU1BTExPQ19JTlRFUk5BTF9CVUZfV1JJVEVSX0ggKi8KCmRpZmYgLS1naXQgYS8zODktZHMtYmFz ZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL2Nh Y2hlX2Jpbi5oIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVk ZS9qZW1hbGxvYy9pbnRlcm5hbC9jYWNoZV9iaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwLi5jYWY1YmUzCi0tLSAvZGV2L251bGwKKysrIGIvMzg5LWRzLWJhc2UtMy4zLjAt YnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9jYWNoZV9iaW4u aApAQCAtMCwwICsxLDY3MCBAQAorI2lmbmRlZiBKRU1BTExPQ19JTlRFUk5BTF9DQUNIRV9CSU5f SAorI2RlZmluZSBKRU1BTExPQ19JTlRFUk5BTF9DQUNIRV9CSU5fSAorCisjaW5jbHVkZSAiamVt YWxsb2MvaW50ZXJuYWwvcWwuaCIKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9zei5oIgor CisvKgorICogVGhlIGNhY2hlX2JpbnMgYXJlIHRoZSBtZWNoYW5pc20gdGhhdCB0aGUgdGNhY2hl IGFuZCB0aGUgYXJlbmEgdXNlIHRvCisgKiBjb21tdW5pY2F0ZS4gIFRoZSB0Y2FjaGUgZmlsbHMg ZnJvbSBhbmQgZmx1c2hlcyB0byB0aGUgYXJlbmEgYnkgcGFzc2luZyBhCisgKiBjYWNoZV9iaW5f dCB0byBmaWxsL2ZsdXNoLiAgV2hlbiB0aGUgYXJlbmEgbmVlZHMgdG8gcHVsbCBzdGF0cyBmcm9t IHRoZQorICogdGNhY2hlcyBhc3NvY2lhdGVkIHdpdGggaXQsIGl0IGRvZXMgc28gYnkgaXRlcmF0 aW5nIG92ZXIgaXRzCisgKiBjYWNoZV9iaW5fYXJyYXlfZGVzY3JpcHRvcl90IG9iamVjdHMgYW5k IHJlYWRpbmcgb3V0IHBlci1iaW4gc3RhdHMgaXQKKyAqIGNvbnRhaW5zLiAgVGhpcyBtYWtlcyBp dCBzbyB0aGF0IHRoZSBhcmVuYSBuZWVkIG5vdCBrbm93IGFib3V0IHRoZSBleGlzdGVuY2UKKyAq IG9mIHRoZSB0Y2FjaGUgYXQgYWxsLgorICovCisKKy8qCisgKiBUaGUgc2l6ZSBpbiBieXRlcyBv ZiBlYWNoIGNhY2hlIGJpbiBzdGFjay4gIFdlIGFsc28gdXNlIHRoaXMgdG8gaW5kaWNhdGUKKyAq ICpjb3VudHMqIG9mIGluZGl2aWR1YWwgb2JqZWN0cy4KKyAqLwordHlwZWRlZiB1aW50MTZfdCBj YWNoZV9iaW5fc3pfdDsKKworLyoKKyAqIExlYXZlIGEgbm90aWNlYWJsZSBtYXJrIHBhdHRlcm4g b24gdGhlIGNhY2hlIGJpbiBzdGFjayBib3VuZGFyaWVzLCBpbiBjYXNlIGEKKyAqIGJ1ZyBzdGFy dHMgbGVha2luZyB0aG9zZS4gIE1ha2UgaXQgbG9vayBsaWtlIHRoZSBqdW5rIHBhdHRlcm4gYnV0 IGJlIGRpc3RpbmN0CisgKiBmcm9tIGl0LgorICovCitzdGF0aWMgY29uc3QgdWludHB0cl90IGNh Y2hlX2Jpbl9wcmVjZWRpbmdfanVuayA9CisgICAgKHVpbnRwdHJfdCkweDdhN2E3YTdhN2E3YTdh N2FVTEw7CisvKiBOb3RlOiBhNyB2cy4gN2EgYWJvdmUgLS0gdGhpcyB0ZWxscyB5b3Ugd2hpY2gg cG9pbnRlciBsZWFrZWQuICovCitzdGF0aWMgY29uc3QgdWludHB0cl90IGNhY2hlX2Jpbl90cmFp bGluZ19qdW5rID0KKyAgICAodWludHB0cl90KTB4YTdhN2E3YTdhN2E3YTdhN1VMTDsKKworLyoK KyAqIFRoYXQgaW1wbGllcyB0aGUgZm9sbG93aW5nIHZhbHVlLCBmb3IgdGhlIG1heGltdW0gbnVt YmVyIG9mIGl0ZW1zIGluIGFueQorICogaW5kaXZpZHVhbCBiaW4uICBUaGUgY2FjaGUgYmlucyB0 cmFjayB0aGVpciBib3VuZHMgbG9va2luZyBqdXN0IGF0IHRoZSBsb3cKKyAqIGJpdHMgb2YgYSBw b2ludGVyLCBjb21wYXJlZCBhZ2FpbnN0IGEgY2FjaGVfYmluX3N6X3QuICBTbyB0aGF0J3MKKyAq ICAgMSA8PCAoc2l6ZW9mKGNhY2hlX2Jpbl9zel90KSAqIDgpCisgKiBieXRlcyBzcHJlYWQgYWNy b3NzIHBvaW50ZXIgc2l6ZWQgb2JqZWN0cyB0byBnZXQgdGhlIG1heGltdW0uCisgKi8KKyNkZWZp bmUgQ0FDSEVfQklOX05DQUNIRURfTUFYICgoKHNpemVfdCkxIDw8IHNpemVvZihjYWNoZV9iaW5f c3pfdCkgKiA4KSBcCisgICAgLyBzaXplb2Yodm9pZCAqKSAtIDEpCisKKy8qCisgKiBUaGlzIGxp dmVzIGluc2lkZSB0aGUgY2FjaGVfYmluIChmb3IgbG9jYWxpdHkgcmVhc29ucyksIGFuZCBpcyBp bml0aWFsaXplZAorICogYWxvbmdzaWRlIGl0LCBidXQgaXMgb3RoZXJ3aXNlIG5vdCBtb2RpZmll ZCBieSBhbnkgY2FjaGUgYmluIG9wZXJhdGlvbnMuCisgKiBJdCdzIGxvZ2ljYWxseSBwdWJsaWMg YW5kIG1haW50YWluZWQgYnkgaXRzIGNhbGxlcnMuCisgKi8KK3R5cGVkZWYgc3RydWN0IGNhY2hl X2Jpbl9zdGF0c19zIGNhY2hlX2Jpbl9zdGF0c190Oworc3RydWN0IGNhY2hlX2Jpbl9zdGF0c19z IHsKKwkvKgorCSAqIE51bWJlciBvZiBhbGxvY2F0aW9uIHJlcXVlc3RzIHRoYXQgY29ycmVzcG9u ZGVkIHRvIHRoZSBzaXplIG9mIHRoaXMKKwkgKiBiaW4uCisJICovCisJdWludDY0X3QgbnJlcXVl c3RzOworfTsKKworLyoKKyAqIFJlYWQtb25seSBpbmZvcm1hdGlvbiBhc3NvY2lhdGVkIHdpdGgg ZWFjaCBlbGVtZW50IG9mIHRjYWNoZV90J3MgdGJpbnMgYXJyYXkKKyAqIGlzIHN0b3JlZCBzZXBh cmF0ZWx5LCBtYWlubHkgdG8gcmVkdWNlIG1lbW9yeSB1c2FnZS4KKyAqLwordHlwZWRlZiBzdHJ1 Y3QgY2FjaGVfYmluX2luZm9fcyBjYWNoZV9iaW5faW5mb190Oworc3RydWN0IGNhY2hlX2Jpbl9p bmZvX3MgeworCWNhY2hlX2Jpbl9zel90IG5jYWNoZWRfbWF4OworfTsKKworLyoKKyAqIFJlc3Bv bnNpYmxlIGZvciBjYWNoaW5nIGFsbG9jYXRpb25zIGFzc29jaWF0ZWQgd2l0aCBhIHNpbmdsZSBz aXplLgorICoKKyAqIFNldmVyYWwgcG9pbnRlcnMgYXJlIHVzZWQgdG8gdHJhY2sgdGhlIHN0YWNr LiAgVG8gc2F2ZSBvbiBtZXRhZGF0YSBieXRlcywKKyAqIG9ubHkgdGhlIHN0YWNrX2hlYWQgaXMg YSBmdWxsIHNpemVkIHBvaW50ZXIgKHdoaWNoIGlzIGRlcmVmZXJlbmNlZCBvbiB0aGUKKyAqIGZh c3RwYXRoKSwgd2hpbGUgdGhlIG90aGVycyBzdG9yZSBvbmx5IHRoZSBsb3cgMTYgYml0cyAtLSB0 aGlzIGlzIGNvcnJlY3QKKyAqIGJlY2F1c2UgYSBzaW5nbGUgc3RhY2sgbmV2ZXIgdGFrZXMgbW9y ZSBzcGFjZSB0aGFuIDJeMTYgYnl0ZXMsIGFuZCBhdCB0aGUKKyAqIHNhbWUgdGltZSBvbmx5IGVx dWFsaXR5IGNoZWNrcyBhcmUgcGVyZm9ybWVkIG9uIHRoZSBsb3cgYml0cy4KKyAqCisgKiAobG93 IGFkZHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo aGlnaCBhZGRyKQorICogfC0tLS0tLXN0YXNoZWQtLS0tLS18LS0tLS0tYXZhaWxhYmxlLS0tLS0t fC0tLS0tLWNhY2hlZC0tLS0tfAorICogXiAgICAgICAgICAgICAgICAgICBeICAgICAgICAgICAg ICAgICAgICAgXiAgICAgICAgICAgICAgICAgXgorICogbG93X2JvdW5kKGRlcml2ZWQpICBsb3df Yml0c19mdWxsICAgICAgICAgc3RhY2tfaGVhZCAgICAgICAgbG93X2JpdHNfZW1wdHkKKyAqLwor dHlwZWRlZiBzdHJ1Y3QgY2FjaGVfYmluX3MgY2FjaGVfYmluX3Q7CitzdHJ1Y3QgY2FjaGVfYmlu X3MgeworCS8qCisJICogVGhlIHN0YWNrIGdyb3dzIGRvd24uICBXaGVuZXZlciB0aGUgYmluIGlz IG5vbmVtcHR5LCB0aGUgaGVhZCBwb2ludHMKKwkgKiB0byBhbiBhcnJheSBlbnRyeSBjb250YWlu aW5nIGEgdmFsaWQgYWxsb2NhdGlvbi4gIFdoZW4gaXQgaXMgZW1wdHksCisJICogdGhlIGhlYWQg cG9pbnRzIHRvIG9uZSBlbGVtZW50IHBhc3QgdGhlIG93bmVkIGFycmF5LgorCSAqLworCXZvaWQg KipzdGFja19oZWFkOworCS8qCisJICogY3VyX3B0ciBhbmQgc3RhdHMgYXJlIGJvdGggbW9kaWZp ZWQgZnJlcXVlbnRseS4gIExldCdzIGtlZXAgdGhlbQorCSAqIGNsb3NlIHNvIHRoYXQgdGhleSBo YXZlIGEgaGlnaGVyIGNoYW5jZSBvZiBiZWluZyBvbiB0aGUgc2FtZQorCSAqIGNhY2hlbGluZSwg dGh1cyBsZXNzIHdyaXRlLWJhY2tzLgorCSAqLworCWNhY2hlX2Jpbl9zdGF0c190IHRzdGF0czsK KworCS8qCisJICogVGhlIGxvdyBiaXRzIG9mIHRoZSBhZGRyZXNzIG9mIHRoZSBmaXJzdCBpdGVt IGluIHRoZSBzdGFjayB0aGF0CisJICogaGFzbid0IGJlZW4gdXNlZCBzaW5jZSB0aGUgbGFzdCBH QywgdG8gdHJhY2sgdGhlIGxvdyB3YXRlciBtYXJrIChtaW4KKwkgKiAjIG9mIGNhY2hlZCBpdGVt cykuCisJICoKKwkgKiBTaW5jZSB0aGUgc3RhY2sgZ3Jvd3MgZG93biwgdGhpcyBpcyBhIGhpZ2hl ciBhZGRyZXNzIHRoYW4KKwkgKiBsb3dfYml0c19mdWxsLgorCSAqLworCXVpbnQxNl90IGxvd19i aXRzX2xvd193YXRlcjsKKworCS8qCisJICogVGhlIGxvdyBiaXRzIG9mIHRoZSB2YWx1ZSB0aGF0 IHN0YWNrX2hlYWQgd2lsbCB0YWtlIG9uIHdoZW4gdGhlIGFycmF5CisJICogaXMgZnVsbCAob2Yg Y2FjaGVkICYgc3Rhc2hlZCBpdGVtcykuICBCdXQgcmVtZW1iZXIgdGhhdCBzdGFja19oZWFkCisJ ICogYWx3YXlzIHBvaW50cyB0byBhIHZhbGlkIGl0ZW0gd2hlbiB0aGUgYXJyYXkgaXMgbm9uZW1w dHkgLS0gdGhpcyBpcworCSAqIGluIHRoZSBhcnJheS4KKwkgKgorCSAqIFJlY2FsbCB0aGF0IHNp bmNlIHRoZSBzdGFjayBncm93cyBkb3duLCB0aGlzIGlzIHRoZSBsb3dlc3QgYXZhaWxhYmxlCisJ ICogYWRkcmVzcyBpbiB0aGUgYXJyYXkgZm9yIGNhY2hpbmcuICBPbmx5IGFkanVzdGVkIHdoZW4g c3Rhc2hpbmcgaXRlbXMuCisJICovCisJdWludDE2X3QgbG93X2JpdHNfZnVsbDsKKworCS8qCisJ ICogVGhlIGxvdyBiaXRzIG9mIHRoZSB2YWx1ZSB0aGF0IHN0YWNrX2hlYWQgd2lsbCB0YWtlIG9u IHdoZW4gdGhlIGFycmF5CisJICogaXMgZW1wdHkuCisJICoKKwkgKiBUaGUgc3RhY2sgZ3Jvd3Mg ZG93biAtLSB0aGlzIGlzIG9uZSBwYXN0IHRoZSBoaWdoZXN0IGFkZHJlc3MgaW4gdGhlCisJICog YXJyYXkuICBJbW11dGFibGUgYWZ0ZXIgaW5pdGlhbGl6YXRpb24uCisJICovCisJdWludDE2X3Qg bG93X2JpdHNfZW1wdHk7Cit9OworCisvKgorICogVGhlIGNhY2hlX2JpbnMgbGl2ZSBpbnNpZGUg dGhlIHRjYWNoZSwgYnV0IHRoZSBhcmVuYSAoYnkgZGVzaWduKSBpc24ndAorICogc3VwcG9zZWQg dG8ga25vdyBtdWNoIGFib3V0IHRjYWNoZSBpbnRlcm5hbHMuICBUbyBsZXQgdGhlIGFyZW5hIGl0 ZXJhdGUgb3ZlcgorICogYXNzb2NpYXRlZCBiaW5zLCB3ZSBrZWVwICh3aXRoIHRoZSB0Y2FjaGUp IGEgbGlua2VkIGxpc3Qgb2YKKyAqIGNhY2hlX2Jpbl9hcnJheV9kZXNjcmlwdG9yX3RzIHRoYXQg dGVsbCB0aGUgYXJlbmEgaG93IHRvIGZpbmQgdGhlIGJpbnMuCisgKi8KK3R5cGVkZWYgc3RydWN0 IGNhY2hlX2Jpbl9hcnJheV9kZXNjcmlwdG9yX3MgY2FjaGVfYmluX2FycmF5X2Rlc2NyaXB0b3Jf dDsKK3N0cnVjdCBjYWNoZV9iaW5fYXJyYXlfZGVzY3JpcHRvcl9zIHsKKwkvKgorCSAqIFRoZSBh cmVuYSBrZWVwcyBhIGxpc3Qgb2YgdGhlIGNhY2hlIGJpbnMgYXNzb2NpYXRlZCB3aXRoIGl0LCBm b3IKKwkgKiBzdGF0cyBjb2xsZWN0aW9uLgorCSAqLworCXFsX2VsbShjYWNoZV9iaW5fYXJyYXlf ZGVzY3JpcHRvcl90KSBsaW5rOworCS8qIFBvaW50ZXJzIHRvIHRoZSB0Y2FjaGUgYmlucy4gKi8K KwljYWNoZV9iaW5fdCAqYmluczsKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorY2FjaGVfYmlu X2FycmF5X2Rlc2NyaXB0b3JfaW5pdChjYWNoZV9iaW5fYXJyYXlfZGVzY3JpcHRvcl90ICpkZXNj cmlwdG9yLAorICAgIGNhY2hlX2Jpbl90ICpiaW5zKSB7CisJcWxfZWxtX25ldyhkZXNjcmlwdG9y LCBsaW5rKTsKKwlkZXNjcmlwdG9yLT5iaW5zID0gYmluczsKK30KKworSkVNQUxMT0NfQUxXQVlT X0lOTElORSBib29sCitjYWNoZV9iaW5fbm9uZmFzdF9hbGlnbmVkKGNvbnN0IHZvaWQgKnB0cikg eworCWlmICghY29uZmlnX3VhZl9kZXRlY3Rpb24pIHsKKwkJcmV0dXJuIGZhbHNlOworCX0KKwkv KgorCSAqIEN1cnJlbnRseSB3ZSB1c2UgYWxpZ25tZW50IHRvIGRlY2lkZSB3aGljaCBwb2ludGVy IHRvIGp1bmsgJiBzdGFzaCBvbgorCSAqIGRlYWxsb2MgKGZvciBjYXRjaGluZyB1c2UtYWZ0ZXIt ZnJlZSkuICBJbiBzb21lIGNvbW1vbiBjYXNlcyBhCisJICogcGFnZS1hbGlnbmVkIGNoZWNrIGlz IG5lZWRlZCBhbHJlYWR5IChzZGFsbG9jIHcvIGNvbmZpZ19wcm9mKSwgc28gd2UKKwkgKiBhcmUg Z2V0dGluZyBpdCBtb3JlIG9yIGxlc3MgZm9yIGZyZWUgLS0gbm8gYWRkZWQgaW5zdHJ1Y3Rpb25z IG9uCisJICogZnJlZV9mYXN0cGF0aC4KKwkgKgorCSAqIEFub3RoZXIgd2F5IG9mIGRlY2lkaW5n IHdoaWNoIHBvaW50ZXIgdG8gc2FtcGxlLCBpcyBhZGRpbmcgYW5vdGhlcgorCSAqIHRocmVhZF9l dmVudCB0byBwaWNrIG9uZSBldmVyeSBOIGJ5dGVzLiAgVGhhdCBhbHNvIGFkZHMgbm8gY29zdCBv bgorCSAqIHRoZSBmYXN0cGF0aCwgaG93ZXZlciBpdCB3aWxsIHRlbmQgdG8gcGljayBsYXJnZSBh bGxvY2F0aW9ucyB3aGljaCBpcworCSAqIG5vdCB0aGUgZGVzaXJlZCBiZWhhdmlvci4KKwkgKi8K KwlyZXR1cm4gKCh1aW50cHRyX3QpcHRyICYgc2FuX2NhY2hlX2Jpbl9ub25mYXN0X21hc2spID09 IDA7Cit9CisKKy8qIFJldHVybnMgbmNhY2hlZF9tYXg6IFVwcGVyIGxpbWl0IG9uIG5jYWNoZWQu ICovCitzdGF0aWMgaW5saW5lIGNhY2hlX2Jpbl9zel90CitjYWNoZV9iaW5faW5mb19uY2FjaGVk X21heChjYWNoZV9iaW5faW5mb190ICppbmZvKSB7CisJcmV0dXJuIGluZm8tPm5jYWNoZWRfbWF4 OworfQorCisvKgorICogSW50ZXJuYWwuCisgKgorICogQXNzZXJ0cyB0aGF0IHRoZSBwb2ludGVy IGFzc29jaWF0ZWQgd2l0aCBlYXJsaWVyIGlzIDw9IHRoZSBvbmUgYXNzb2NpYXRlZAorICogd2l0 aCBsYXRlci4KKyAqLworc3RhdGljIGlubGluZSB2b2lkCitjYWNoZV9iaW5fYXNzZXJ0X2Vhcmxp ZXIoY2FjaGVfYmluX3QgKmJpbiwgdWludDE2X3QgZWFybGllciwgdWludDE2X3QgbGF0ZXIpIHsK KwlpZiAoZWFybGllciA+IGxhdGVyKSB7CisJCWFzc2VydChiaW4tPmxvd19iaXRzX2Z1bGwgPiBi aW4tPmxvd19iaXRzX2VtcHR5KTsKKwl9Cit9CisKKy8qCisgKiBJbnRlcm5hbC4KKyAqCisgKiBE b2VzIGRpZmZlcmVuY2UgY2FsY3VsYXRpb25zIHRoYXQgaGFuZGxlIHdyYXBhcm91bmQgY29ycmVj dGx5LiAgRWFybGllciBtdXN0CisgKiBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIHBvc2l0aW9uIGVh cmxpZXIgaW4gbWVtb3J5LgorICovCitzdGF0aWMgaW5saW5lIHVpbnQxNl90CitjYWNoZV9iaW5f ZGlmZihjYWNoZV9iaW5fdCAqYmluLCB1aW50MTZfdCBlYXJsaWVyLCB1aW50MTZfdCBsYXRlciwg Ym9vbCByYWN5KSB7CisJLyoKKwkgKiBXaGVuIGl0J3MgcmFjeSwgYmluLT5sb3dfYml0c19mdWxs IGNhbiBiZSBtb2RpZmllZCBjb25jdXJyZW50bHkuIEl0CisJICogY2FuIGNyb3NzIHRoZSB1aW50 MTZfdCBtYXggdmFsdWUgYW5kIGJlY29tZSBsZXNzIHRoYW4KKwkgKiBiaW4tPmxvd19iaXRzX2Vt cHR5IGF0IHRoZSB0aW1lIG9mIHRoZSBjaGVjay4KKwkgKi8KKwlpZiAoIXJhY3kpIHsKKwkJY2Fj aGVfYmluX2Fzc2VydF9lYXJsaWVyKGJpbiwgZWFybGllciwgbGF0ZXIpOworCX0KKwlyZXR1cm4g bGF0ZXIgLSBlYXJsaWVyOworfQorCisvKgorICogTnVtYmVyIG9mIGl0ZW1zIGN1cnJlbnRseSBj YWNoZWQgaW4gdGhlIGJpbiwgd2l0aG91dCBjaGVja2luZyBuY2FjaGVkX21heC4KKyAqIFdlIHJl cXVpcmUgc3BlY2lmeWluZyB3aGV0aGVyIG9yIG5vdCB0aGUgcmVxdWVzdCBpcyByYWN5IG9yIG5v dCAoaS5lLiB3aGV0aGVyCisgKiBvciBub3QgY29uY3VycmVudCBtb2RpZmljYXRpb25zIGFyZSBw b3NzaWJsZSkuCisgKi8KK3N0YXRpYyBpbmxpbmUgY2FjaGVfYmluX3N6X3QKK2NhY2hlX2Jpbl9u Y2FjaGVkX2dldF9pbnRlcm5hbChjYWNoZV9iaW5fdCAqYmluLCBib29sIHJhY3kpIHsKKwljYWNo ZV9iaW5fc3pfdCBkaWZmID0gY2FjaGVfYmluX2RpZmYoYmluLAorCSAgICAodWludDE2X3QpKHVp bnRwdHJfdCliaW4tPnN0YWNrX2hlYWQsIGJpbi0+bG93X2JpdHNfZW1wdHksIHJhY3kpOworCWNh Y2hlX2Jpbl9zel90IG4gPSBkaWZmIC8gc2l6ZW9mKHZvaWQgKik7CisJLyoKKwkgKiBXZSBoYXZl IHVuZGVmaW5lZCBiZWhhdmlvciBoZXJlOyBpZiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9t IHRoZQorCSAqIGFyZW5hIHN0YXRzIHVwZGF0aW5nIGNvZGUsIHRoZW4gc3RhY2tfaGVhZCBjb3Vs ZCBjaGFuZ2UgZnJvbSB0aGUKKwkgKiBmaXJzdCBsaW5lIHRvIHRoZSBuZXh0IG9uZS4gIE1vcmFs bHksIHRoZXNlIGxvYWRzIHNob3VsZCBiZSBhdG9taWMsCisJICogYnV0IGNvbXBpbGVycyB3b24n dCBjdXJyZW50bHkgZ2VuZXJhdGUgY29tcGFyaXNvbnMgd2l0aCBpbi1tZW1vcnkKKwkgKiBvcGVy YW5kcyBhZ2FpbnN0IGF0b21pY3MsIGFuZCB0aGVzZSB2YXJpYWJsZXMgZ2V0IGFjY2Vzc2VkIG9u IHRoZQorCSAqIGZhc3QgcGF0aHMuICBUaGlzIHNob3VsZCBzdGlsbCBiZSAic2FmZSIgaW4gdGhl IHNlbnNlIG9mIGdlbmVyYXRpbmcKKwkgKiB0aGUgY29ycmVjdCBhc3NlbWJseSBmb3IgdGhlIGZv cmVzZWVhYmxlIGZ1dHVyZSwgdGhvdWdoLgorCSAqLworCWFzc2VydChuID09IDAgfHwgKihiaW4t PnN0YWNrX2hlYWQpICE9IE5VTEwgfHwgcmFjeSk7CisJcmV0dXJuIG47Cit9CisKKy8qCisgKiBO dW1iZXIgb2YgaXRlbXMgY3VycmVudGx5IGNhY2hlZCBpbiB0aGUgYmluLCB3aXRoIGNoZWNraW5n IG5jYWNoZWRfbWF4LiAgVGhlCisgKiBjYWxsZXIgbXVzdCBrbm93IHRoYXQgbm8gY29uY3VycmVu dCBtb2RpZmljYXRpb24gb2YgdGhlIGNhY2hlX2JpbiBpcworICogcG9zc2libGUuCisgKi8KK3N0 YXRpYyBpbmxpbmUgY2FjaGVfYmluX3N6X3QKK2NhY2hlX2Jpbl9uY2FjaGVkX2dldF9sb2NhbChj YWNoZV9iaW5fdCAqYmluLCBjYWNoZV9iaW5faW5mb190ICppbmZvKSB7CisJY2FjaGVfYmluX3N6 X3QgbiA9IGNhY2hlX2Jpbl9uY2FjaGVkX2dldF9pbnRlcm5hbChiaW4sCisJICAgIC8qIHJhY3kg Ki8gZmFsc2UpOworCWFzc2VydChuIDw9IGNhY2hlX2Jpbl9pbmZvX25jYWNoZWRfbWF4KGluZm8p KTsKKwlyZXR1cm4gbjsKK30KKworLyoKKyAqIEludGVybmFsLgorICoKKyAqIEEgcG9pbnRlciB0 byB0aGUgcG9zaXRpb24gb25lIHBhc3QgdGhlIGVuZCBvZiB0aGUgYmFja2luZyBhcnJheS4KKyAq CisgKiBEbyBub3QgY2FsbCBpZiByYWN5LCBiZWNhdXNlIGJvdGggJ2Jpbi0+c3RhY2tfaGVhZCcg YW5kICdiaW4tPmxvd19iaXRzX2Z1bGwnCisgKiBhcmUgc3ViamVjdCB0byBjb25jdXJyZW50IG1v ZGlmaWNhdGlvbnMuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCAqKgorY2FjaGVfYmluX2VtcHR5 X3Bvc2l0aW9uX2dldChjYWNoZV9iaW5fdCAqYmluKSB7CisJY2FjaGVfYmluX3N6X3QgZGlmZiA9 IGNhY2hlX2Jpbl9kaWZmKGJpbiwKKwkgICAgKHVpbnQxNl90KSh1aW50cHRyX3QpYmluLT5zdGFj a19oZWFkLCBiaW4tPmxvd19iaXRzX2VtcHR5LAorCSAgICAvKiByYWN5ICovIGZhbHNlKTsKKwl1 aW50cHRyX3QgZW1wdHlfYml0cyA9ICh1aW50cHRyX3QpYmluLT5zdGFja19oZWFkICsgZGlmZjsK Kwl2b2lkICoqcmV0ID0gKHZvaWQgKiopZW1wdHlfYml0czsKKworCWFzc2VydChyZXQgPj0gYmlu LT5zdGFja19oZWFkKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBJbnRlcm5hbC4KKyAq CisgKiBDYWxjdWxhdGVzIGxvdyBiaXRzIG9mIHRoZSBsb3dlciBib3VuZCBvZiB0aGUgdXNhYmxl IGNhY2hlIGJpbidzIHJhbmdlIChzZWUKKyAqIGNhY2hlX2Jpbl90IHZpc3VhbCByZXByZXNlbnRh dGlvbiBhYm92ZSkuCisgKgorICogTm8gdmFsdWVzIGFyZSBjb25jdXJyZW50bHkgbW9kaWZpZWQs IHNvIHNob3VsZCBiZSBzYWZlIHRvIHJlYWQgaW4gYQorICogbXVsdGl0aHJlYWRlZCBlbnZpcm9u bWVudC4gQ3VycmVudGx5IGNvbmN1cnJlbnQgYWNjZXNzIGhhcHBlbnMgb25seSBkdXJpbmcKKyAq IGFyZW5hIHN0YXRpc3RpY3MgY29sbGVjdGlvbi4KKyAqLworc3RhdGljIGlubGluZSB1aW50MTZf dAorY2FjaGVfYmluX2xvd19iaXRzX2xvd19ib3VuZF9nZXQoY2FjaGVfYmluX3QgKmJpbiwgY2Fj aGVfYmluX2luZm9fdCAqaW5mbykgeworCXJldHVybiAodWludDE2X3QpYmluLT5sb3dfYml0c19l bXB0eSAtCisJICAgIGluZm8tPm5jYWNoZWRfbWF4ICogc2l6ZW9mKHZvaWQgKik7Cit9CisKKy8q CisgKiBJbnRlcm5hbC4KKyAqCisgKiBBIHBvaW50ZXIgdG8gdGhlIHBvc2l0aW9uIHdpdGggdGhl IGxvd2VzdCBhZGRyZXNzIG9mIHRoZSBiYWNraW5nIGFycmF5LgorICovCitzdGF0aWMgaW5saW5l IHZvaWQgKioKK2NhY2hlX2Jpbl9sb3dfYm91bmRfZ2V0KGNhY2hlX2Jpbl90ICpiaW4sIGNhY2hl X2Jpbl9pbmZvX3QgKmluZm8pIHsKKwljYWNoZV9iaW5fc3pfdCBuY2FjaGVkX21heCA9IGNhY2hl X2Jpbl9pbmZvX25jYWNoZWRfbWF4KGluZm8pOworCXZvaWQgKipyZXQgPSBjYWNoZV9iaW5fZW1w dHlfcG9zaXRpb25fZ2V0KGJpbikgLSBuY2FjaGVkX21heDsKKwlhc3NlcnQocmV0IDw9IGJpbi0+ c3RhY2tfaGVhZCk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogQXMgdGhlIG5hbWUgaW1w bGllcy4gIFRoaXMgaXMgaW1wb3J0YW50IHNpbmNlIGl0J3Mgbm90IGNvcnJlY3QgdG8gdHJ5IHRv CisgKiBiYXRjaCBmaWxsIGEgbm9uZW1wdHkgY2FjaGUgYmluLgorICovCitzdGF0aWMgaW5saW5l IHZvaWQKK2NhY2hlX2Jpbl9hc3NlcnRfZW1wdHkoY2FjaGVfYmluX3QgKmJpbiwgY2FjaGVfYmlu X2luZm9fdCAqaW5mbykgeworCWFzc2VydChjYWNoZV9iaW5fbmNhY2hlZF9nZXRfbG9jYWwoYmlu LCBpbmZvKSA9PSAwKTsKKwlhc3NlcnQoY2FjaGVfYmluX2VtcHR5X3Bvc2l0aW9uX2dldChiaW4p ID09IGJpbi0+c3RhY2tfaGVhZCk7Cit9CisKKy8qCisgKiBHZXQgbG93IHdhdGVyLCBidXQgd2l0 aG91dCBhbnkgb2YgdGhlIGNvcnJlY3RuZXNzIGNoZWNraW5nIHdlIGRvIGZvciB0aGUKKyAqIGNh bGxlci11c2FibGUgdmVyc2lvbiwgaWYgd2UgYXJlIHRlbXBvcmFyaWx5IGJyZWFraW5nIGludmFy aWFudHMgKGxpa2UKKyAqIG5jYWNoZWQgPj0gbG93X3dhdGVyIGR1cmluZyBmbHVzaCkuCisgKi8K K3N0YXRpYyBpbmxpbmUgY2FjaGVfYmluX3N6X3QKK2NhY2hlX2Jpbl9sb3dfd2F0ZXJfZ2V0X2lu dGVybmFsKGNhY2hlX2Jpbl90ICpiaW4pIHsKKwlyZXR1cm4gY2FjaGVfYmluX2RpZmYoYmluLCBi aW4tPmxvd19iaXRzX2xvd193YXRlciwKKwkgICAgYmluLT5sb3dfYml0c19lbXB0eSwgLyogcmFj eSAqLyBmYWxzZSkgLyBzaXplb2Yodm9pZCAqKTsKK30KKworLyogUmV0dXJucyB0aGUgbnVtZXJp YyB2YWx1ZSBvZiBsb3cgd2F0ZXIgaW4gWzAsIG5jYWNoZWRdLiAqLworc3RhdGljIGlubGluZSBj YWNoZV9iaW5fc3pfdAorY2FjaGVfYmluX2xvd193YXRlcl9nZXQoY2FjaGVfYmluX3QgKmJpbiwg Y2FjaGVfYmluX2luZm9fdCAqaW5mbykgeworCWNhY2hlX2Jpbl9zel90IGxvd193YXRlciA9IGNh Y2hlX2Jpbl9sb3dfd2F0ZXJfZ2V0X2ludGVybmFsKGJpbik7CisJYXNzZXJ0KGxvd193YXRlciA8 PSBjYWNoZV9iaW5faW5mb19uY2FjaGVkX21heChpbmZvKSk7CisJYXNzZXJ0KGxvd193YXRlciA8 PSBjYWNoZV9iaW5fbmNhY2hlZF9nZXRfbG9jYWwoYmluLCBpbmZvKSk7CisKKwljYWNoZV9iaW5f YXNzZXJ0X2VhcmxpZXIoYmluLCAodWludDE2X3QpKHVpbnRwdHJfdCliaW4tPnN0YWNrX2hlYWQs CisJICAgIGJpbi0+bG93X2JpdHNfbG93X3dhdGVyKTsKKworCXJldHVybiBsb3dfd2F0ZXI7Cit9 CisKKy8qCisgKiBJbmRpY2F0ZXMgdGhhdCB0aGUgY3VycmVudCBjYWNoZSBiaW4gcG9zaXRpb24g c2hvdWxkIGJlIHRoZSBsb3cgd2F0ZXIgbWFyaworICogZ29pbmcgZm9yd2FyZC4KKyAqLworc3Rh dGljIGlubGluZSB2b2lkCitjYWNoZV9iaW5fbG93X3dhdGVyX3NldChjYWNoZV9iaW5fdCAqYmlu KSB7CisJYmluLT5sb3dfYml0c19sb3dfd2F0ZXIgPSAodWludDE2X3QpKHVpbnRwdHJfdCliaW4t PnN0YWNrX2hlYWQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorY2FjaGVfYmluX2xvd193YXRl cl9hZGp1c3QoY2FjaGVfYmluX3QgKmJpbikgeworCWlmIChjYWNoZV9iaW5fbmNhY2hlZF9nZXRf aW50ZXJuYWwoYmluLCAvKiByYWN5ICovIGZhbHNlKQorCSAgICA8IGNhY2hlX2Jpbl9sb3dfd2F0 ZXJfZ2V0X2ludGVybmFsKGJpbikpIHsKKwkJY2FjaGVfYmluX2xvd193YXRlcl9zZXQoYmluKTsK Kwl9Cit9CisKK0pFTUFMTE9DX0FMV0FZU19JTkxJTkUgdm9pZCAqCitjYWNoZV9iaW5fYWxsb2Nf aW1wbChjYWNoZV9iaW5fdCAqYmluLCBib29sICpzdWNjZXNzLCBib29sIGFkanVzdF9sb3dfd2F0 ZXIpIHsKKwkvKgorCSAqIHN1Y2Nlc3MgKGluc3RlYWQgb2YgcmV0KSBzaG91bGQgYmUgY2hlY2tl ZCB1cG9uIHRoZSByZXR1cm4gb2YgdGhpcworCSAqIGZ1bmN0aW9uLiAgV2UgYXZvaWQgY2hlY2tp bmcgKHJldCA9PSBOVUxMKSBiZWNhdXNlIHRoZXJlIGlzIG5ldmVyIGEKKwkgKiBudWxsIHN0b3Jl ZCBvbiB0aGUgYXZhaWwgc3RhY2sgKHdoaWNoIGlzIHVua25vd24gdG8gdGhlIGNvbXBpbGVyKSwK KwkgKiBhbmQgZWFnZXJseSBjaGVja2luZyByZXQgd291bGQgY2F1c2UgcGlwZWxpbmUgc3RhbGwg KHdhaXRpbmcgZm9yIHRoZQorCSAqIGNhY2hlbGluZSkuCisJICovCisKKwkvKgorCSAqIFRoaXMg bWF5IHJlYWQgZnJvbSB0aGUgZW1wdHkgcG9zaXRpb247IGhvd2V2ZXIgdGhlIGxvYWRlZCB2YWx1 ZSB3b24ndAorCSAqIGJlIHVzZWQuICBJdCdzIHNhZmUgYmVjYXVzZSB0aGUgc3RhY2sgaGFzIG9u ZSBtb3JlIHNsb3QgcmVzZXJ2ZWQuCisJICovCisJdm9pZCAqcmV0ID0gKmJpbi0+c3RhY2tfaGVh ZDsKKwl1aW50MTZfdCBsb3dfYml0cyA9ICh1aW50MTZfdCkodWludHB0cl90KWJpbi0+c3RhY2tf aGVhZDsKKwl2b2lkICoqbmV3X2hlYWQgPSBiaW4tPnN0YWNrX2hlYWQgKyAxOworCisJLyoKKwkg KiBOb3RlIHRoYXQgdGhlIGxvdyB3YXRlciBtYXJrIGlzIGF0IG1vc3QgZW1wdHk7IGlmIHdlIHBh c3MgdGhpcyBjaGVjaywKKwkgKiB3ZSBrbm93IHdlJ3JlIG5vbi1lbXB0eS4KKwkgKi8KKwlpZiAo bGlrZWx5KGxvd19iaXRzICE9IGJpbi0+bG93X2JpdHNfbG93X3dhdGVyKSkgeworCQliaW4tPnN0 YWNrX2hlYWQgPSBuZXdfaGVhZDsKKwkJKnN1Y2Nlc3MgPSB0cnVlOworCQlyZXR1cm4gcmV0Owor CX0KKwlpZiAoIWFkanVzdF9sb3dfd2F0ZXIpIHsKKwkJKnN1Y2Nlc3MgPSBmYWxzZTsKKwkJcmV0 dXJuIE5VTEw7CisJfQorCS8qCisJICogSW4gdGhlIGZhc3QtcGF0aCBjYXNlIHdoZXJlIHdlIGNh bGwgYWxsb2NfZWFzeSBhbmQgdGhlbiBhbGxvYywgdGhlCisJICogcHJldmlvdXMgY2hlY2tpbmcg YW5kIGNvbXB1dGF0aW9uIGlzIG9wdGltaXplZCBhd2F5IC0tIHdlIGRpZG4ndAorCSAqIGFjdHVh bGx5IGNvbW1pdCBhbnkgb2Ygb3VyIG9wZXJhdGlvbnMuCisJICovCisJaWYgKGxpa2VseShsb3df Yml0cyAhPSBiaW4tPmxvd19iaXRzX2VtcHR5KSkgeworCQliaW4tPnN0YWNrX2hlYWQgPSBuZXdf aGVhZDsKKwkJYmluLT5sb3dfYml0c19sb3dfd2F0ZXIgPSAodWludDE2X3QpKHVpbnRwdHJfdClu ZXdfaGVhZDsKKwkJKnN1Y2Nlc3MgPSB0cnVlOworCQlyZXR1cm4gcmV0OworCX0KKwkqc3VjY2Vz cyA9IGZhbHNlOworCXJldHVybiBOVUxMOworfQorCisvKgorICogQWxsb2NhdGUgYW4gaXRlbSBv dXQgb2YgdGhlIGJpbiwgZmFpbGluZyBpZiB3ZSdyZSBhdCB0aGUgbG93LXdhdGVyIG1hcmsuCisg Ki8KK0pFTUFMTE9DX0FMV0FZU19JTkxJTkUgdm9pZCAqCitjYWNoZV9iaW5fYWxsb2NfZWFzeShj YWNoZV9iaW5fdCAqYmluLCBib29sICpzdWNjZXNzKSB7CisJLyogV2UgZG9uJ3QgbG9vayBhdCBp bmZvIGlmIHdlJ3JlIG5vdCBhZGp1c3RpbmcgbG93LXdhdGVyLiAqLworCXJldHVybiBjYWNoZV9i aW5fYWxsb2NfaW1wbChiaW4sIHN1Y2Nlc3MsIGZhbHNlKTsKK30KKworLyoKKyAqIEFsbG9jYXRl IGFuIGl0ZW0gb3V0IG9mIHRoZSBiaW4sIGV2ZW4gaWYgd2UncmUgY3VycmVudGx5IGF0IHRoZSBs b3ctd2F0ZXIKKyAqIG1hcmsgKGFuZCBmYWlsaW5nIG9ubHkgaWYgdGhlIGJpbiBpcyBlbXB0eSku CisgKi8KK0pFTUFMTE9DX0FMV0FZU19JTkxJTkUgdm9pZCAqCitjYWNoZV9iaW5fYWxsb2MoY2Fj aGVfYmluX3QgKmJpbiwgYm9vbCAqc3VjY2VzcykgeworCXJldHVybiBjYWNoZV9iaW5fYWxsb2Nf aW1wbChiaW4sIHN1Y2Nlc3MsIHRydWUpOworfQorCitKRU1BTExPQ19BTFdBWVNfSU5MSU5FIGNh Y2hlX2Jpbl9zel90CitjYWNoZV9iaW5fYWxsb2NfYmF0Y2goY2FjaGVfYmluX3QgKmJpbiwgc2l6 ZV90IG51bSwgdm9pZCAqKm91dCkgeworCWNhY2hlX2Jpbl9zel90IG4gPSBjYWNoZV9iaW5fbmNh Y2hlZF9nZXRfaW50ZXJuYWwoYmluLAorCSAgICAvKiByYWN5ICovIGZhbHNlKTsKKwlpZiAobiA+ IG51bSkgeworCQluID0gKGNhY2hlX2Jpbl9zel90KW51bTsKKwl9CisJbWVtY3B5KG91dCwgYmlu LT5zdGFja19oZWFkLCBuICogc2l6ZW9mKHZvaWQgKikpOworCWJpbi0+c3RhY2tfaGVhZCArPSBu OworCWNhY2hlX2Jpbl9sb3dfd2F0ZXJfYWRqdXN0KGJpbik7CisKKwlyZXR1cm4gbjsKK30KKwor SkVNQUxMT0NfQUxXQVlTX0lOTElORSBib29sCitjYWNoZV9iaW5fZnVsbChjYWNoZV9iaW5fdCAq YmluKSB7CisJcmV0dXJuICgodWludDE2X3QpKHVpbnRwdHJfdCliaW4tPnN0YWNrX2hlYWQgPT0g YmluLT5sb3dfYml0c19mdWxsKTsKK30KKworLyoKKyAqIEZyZWUgYW4gb2JqZWN0IGludG8gdGhl IGdpdmVuIGJpbi4gIEZhaWxzIG9ubHkgaWYgdGhlIGJpbiBpcyBmdWxsLgorICovCitKRU1BTExP Q19BTFdBWVNfSU5MSU5FIGJvb2wKK2NhY2hlX2Jpbl9kYWxsb2NfZWFzeShjYWNoZV9iaW5fdCAq YmluLCB2b2lkICpwdHIpIHsKKwlpZiAodW5saWtlbHkoY2FjaGVfYmluX2Z1bGwoYmluKSkpIHsK KwkJcmV0dXJuIGZhbHNlOworCX0KKworCWJpbi0+c3RhY2tfaGVhZC0tOworCSpiaW4tPnN0YWNr X2hlYWQgPSBwdHI7CisJY2FjaGVfYmluX2Fzc2VydF9lYXJsaWVyKGJpbiwgYmluLT5sb3dfYml0 c19mdWxsLAorCSAgICAodWludDE2X3QpKHVpbnRwdHJfdCliaW4tPnN0YWNrX2hlYWQpOworCisJ cmV0dXJuIHRydWU7Cit9CisKKy8qIFJldHVybnMgZmFsc2UgaWYgZmFpbGVkIHRvIHN0YXNoIChp LmUuIGJpbiBpcyBmdWxsKS4gKi8KK0pFTUFMTE9DX0FMV0FZU19JTkxJTkUgYm9vbAorY2FjaGVf YmluX3N0YXNoKGNhY2hlX2Jpbl90ICpiaW4sIHZvaWQgKnB0cikgeworCWlmIChjYWNoZV9iaW5f ZnVsbChiaW4pKSB7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwkvKiBTdGFzaCBhdCB0aGUgZnVs bCBwb3NpdGlvbiwgaW4gdGhlIFtmdWxsLCBoZWFkKSByYW5nZS4gKi8KKwl1aW50MTZfdCBsb3df Yml0c19oZWFkID0gKHVpbnQxNl90KSh1aW50cHRyX3QpYmluLT5zdGFja19oZWFkOworCS8qIFdy YXBhcm91bmQgaGFuZGxlZCBhcyB3ZWxsLiAqLworCXVpbnQxNl90IGRpZmYgPSBjYWNoZV9iaW5f ZGlmZihiaW4sIGJpbi0+bG93X2JpdHNfZnVsbCwgbG93X2JpdHNfaGVhZCwKKwkgICAgLyogcmFj eSAqLyBmYWxzZSk7CisJKih2b2lkICoqKSgodWludHB0cl90KWJpbi0+c3RhY2tfaGVhZCAtIGRp ZmYpID0gcHRyOworCisJYXNzZXJ0KCFjYWNoZV9iaW5fZnVsbChiaW4pKTsKKwliaW4tPmxvd19i aXRzX2Z1bGwgKz0gc2l6ZW9mKHZvaWQgKik7CisJY2FjaGVfYmluX2Fzc2VydF9lYXJsaWVyKGJp biwgYmluLT5sb3dfYml0c19mdWxsLCBsb3dfYml0c19oZWFkKTsKKworCXJldHVybiB0cnVlOwor fQorCisvKgorICogR2V0IHRoZSBudW1iZXIgb2Ygc3Rhc2hlZCBwb2ludGVycy4KKyAqCisgKiBX aGVuIGNhbGxlZCBmcm9tIGEgdGhyZWFkIG5vdCBvd25pbmcgdGhlIFRMUyAoaS5lLiByYWN5ID0g dHJ1ZSksIGl0J3MKKyAqIGltcG9ydGFudCB0byBrZWVwIGluIG1pbmQgdGhhdCAnYmluLT5zdGFj a19oZWFkJyBhbmQgJ2Jpbi0+bG93X2JpdHNfZnVsbCcgY2FuCisgKiBiZSBtb2RpZmllZCBjb25j dXJyZW50bHkgYW5kIGFsbW9zdCBub25lIGFzc2VydGlvbnMgYWJvdXQgdGhlaXIgdmFsdWVzIGNh biBiZQorICogbWFkZS4KKyAqLworSkVNQUxMT0NfQUxXQVlTX0lOTElORSBjYWNoZV9iaW5fc3pf dAorY2FjaGVfYmluX25zdGFzaGVkX2dldF9pbnRlcm5hbChjYWNoZV9iaW5fdCAqYmluLCBjYWNo ZV9iaW5faW5mb190ICppbmZvLAorICAgIGJvb2wgcmFjeSkgeworCWNhY2hlX2Jpbl9zel90IG5j YWNoZWRfbWF4ID0gY2FjaGVfYmluX2luZm9fbmNhY2hlZF9tYXgoaW5mbyk7CisJdWludDE2X3Qg bG93X2JpdHNfbG93X2JvdW5kID0gY2FjaGVfYmluX2xvd19iaXRzX2xvd19ib3VuZF9nZXQoYmlu LAorCSAgICBpbmZvKTsKKworCWNhY2hlX2Jpbl9zel90IG4gPSBjYWNoZV9iaW5fZGlmZihiaW4s IGxvd19iaXRzX2xvd19ib3VuZCwKKwkgICAgYmluLT5sb3dfYml0c19mdWxsLCByYWN5KSAvIHNp emVvZih2b2lkICopOworCWFzc2VydChuIDw9IG5jYWNoZWRfbWF4KTsKKworCWlmICghcmFjeSkg eworCQkvKiBCZWxvdyBhcmUgZm9yIGFzc2VydGlvbnMgb25seS4gKi8KKwkJdm9pZCAqKmxvd19i b3VuZCA9IGNhY2hlX2Jpbl9sb3dfYm91bmRfZ2V0KGJpbiwgaW5mbyk7CisKKwkJYXNzZXJ0KCh1 aW50MTZfdCkodWludHB0cl90KWxvd19ib3VuZCA9PSBsb3dfYml0c19sb3dfYm91bmQpOworCQl2 b2lkICpzdGFzaGVkID0gKihsb3dfYm91bmQgKyBuIC0gMSk7CisJCWJvb2wgYWxpZ25lZCA9IGNh Y2hlX2Jpbl9ub25mYXN0X2FsaWduZWQoc3Rhc2hlZCk7CisjaWZkZWYgSkVNQUxMT0NfSkVUCisJ CS8qIEFsbG93IGFyYml0cmFyeSBwb2ludGVycyB0byBiZSBzdGFzaGVkIGluIHRlc3RzLiAqLwor CQlhbGlnbmVkID0gdHJ1ZTsKKyNlbmRpZgorCQlhc3NlcnQobiA9PSAwIHx8IChzdGFzaGVkICE9 IE5VTEwgJiYgYWxpZ25lZCkpOworCX0KKworCXJldHVybiBuOworfQorCitKRU1BTExPQ19BTFdB WVNfSU5MSU5FIGNhY2hlX2Jpbl9zel90CitjYWNoZV9iaW5fbnN0YXNoZWRfZ2V0X2xvY2FsKGNh Y2hlX2Jpbl90ICpiaW4sIGNhY2hlX2Jpbl9pbmZvX3QgKmluZm8pIHsKKwljYWNoZV9iaW5fc3pf dCBuID0gY2FjaGVfYmluX25zdGFzaGVkX2dldF9pbnRlcm5hbChiaW4sIGluZm8sCisJICAgIC8q IHJhY3kgKi8gZmFsc2UpOworCWFzc2VydChuIDw9IGNhY2hlX2Jpbl9pbmZvX25jYWNoZWRfbWF4 KGluZm8pKTsKKwlyZXR1cm4gbjsKK30KKworLyoKKyAqIE9idGFpbiBhIHJhY3kgdmlldyBvZiB0 aGUgbnVtYmVyIG9mIGl0ZW1zIGN1cnJlbnRseSBpbiB0aGUgY2FjaGUgYmluLCBpbiB0aGUKKyAq IHByZXNlbmNlIG9mIHBvc3NpYmxlIGNvbmN1cnJlbnQgbW9kaWZpY2F0aW9ucy4KKyAqLworc3Rh dGljIGlubGluZSB2b2lkCitjYWNoZV9iaW5fbml0ZW1zX2dldF9yZW1vdGUoY2FjaGVfYmluX3Qg KmJpbiwgY2FjaGVfYmluX2luZm9fdCAqaW5mbywKKyAgICBjYWNoZV9iaW5fc3pfdCAqbmNhY2hl ZCwgY2FjaGVfYmluX3N6X3QgKm5zdGFzaGVkKSB7CisJY2FjaGVfYmluX3N6X3QgbiA9IGNhY2hl X2Jpbl9uY2FjaGVkX2dldF9pbnRlcm5hbChiaW4sIC8qIHJhY3kgKi8gdHJ1ZSk7CisJYXNzZXJ0 KG4gPD0gY2FjaGVfYmluX2luZm9fbmNhY2hlZF9tYXgoaW5mbykpOworCSpuY2FjaGVkID0gbjsK KworCW4gPSBjYWNoZV9iaW5fbnN0YXNoZWRfZ2V0X2ludGVybmFsKGJpbiwgaW5mbywgLyogcmFj eSAqLyB0cnVlKTsKKwlhc3NlcnQobiA8PSBjYWNoZV9iaW5faW5mb19uY2FjaGVkX21heChpbmZv KSk7CisJKm5zdGFzaGVkID0gbjsKKwkvKiBOb3RlIHRoYXQgY2Fubm90IGFzc2VydCBuY2FjaGVk ICsgbnN0YXNoZWQgPD0gbmNhY2hlZF9tYXggKHJhY3kpLiAqLworfQorCisvKgorICogRmlsbGlu ZyBhbmQgZmx1c2hpbmcgYXJlIGRvbmUgaW4gYmF0Y2gsIG9uIGFycmF5cyBvZiB2b2lkICpzLiAg Rm9yIGZpbGxpbmcsCisgKiB0aGUgYXJyYXlzIGdvIGZvcndhcmQsIGFuZCBjYW4gYmUgYWNjZXNz ZWQgd2l0aCBvcmRpbmFyeSBhcnJheSBhcml0aG1ldGljLgorICogRm9yIGZsdXNoaW5nLCB3ZSB3 b3JrIGZyb20gdGhlIGVuZCBiYWNrd2FyZHMsIGFuZCBzbyBuZWVkIHRvIHVzZSBzcGVjaWFsCisg KiBhY2Nlc3NvcnMgdGhhdCBpbnZlcnQgdGhlIHVzdWFsIG9yZGVyaW5nLgorICoKKyAqIFRoaXMg aXMgaW1wb3J0YW50IGZvciBtYWludGFpbmluZyBmaXJzdC1maXQ7IHRoZSBhcmVuYSBjb2RlIGZp bGxzIHdpdGgKKyAqIGVhcmxpZXN0IG9iamVjdHMgZmlyc3QsIGFuZCBzbyB0aG9zZSBhcmUgdGhl IG9uZXMgd2Ugc2hvdWxkIHJldHVybiBmaXJzdCBmb3IKKyAqIGNhY2hlX2Jpbl9hbGxvYyBjYWxs cy4gIFdoZW4gZmx1c2hpbmcsIHdlIHNob3VsZCBmbHVzaCB0aGUgb2JqZWN0cyB0aGF0IHdlCisg KiB3aXNoIHRvIHJldHVybiBsYXRlcjsgdGhvc2UgYXQgdGhlIGVuZCBvZiB0aGUgYXJyYXkuICBU aGlzIGlzIGJldHRlciBmb3IgdGhlCisgKiBmaXJzdC1maXQgaGV1cmlzdGljIGFzIHdlbGwgYXMg Zm9yIGNhY2hlIGxvY2FsaXR5OyB0aGUgbW9zdCByZWNlbnRseSBmcmVlZAorICogb2JqZWN0cyBh cmUgdGhlIG9uZXMgbW9zdCBsaWtlbHkgdG8gc3RpbGwgYmUgaW4gY2FjaGUuCisgKgorICogVGhp cyBhbGwgc291bmRzIHZlcnkgaGFuZC13YXZleSBhbmQgdGhlb3JldGljYWwsIGJ1dCByZXZlcnRp bmcgdGhlIG9yZGVyaW5nCisgKiBvbiBvbmUgb3IgdGhlIG90aGVyIHBhdGh3YXkgbGVhZHMgdG8g bWVhc3VyYWJsZSBzbG93ZG93bnMuCisgKi8KKwordHlwZWRlZiBzdHJ1Y3QgY2FjaGVfYmluX3B0 cl9hcnJheV9zIGNhY2hlX2Jpbl9wdHJfYXJyYXlfdDsKK3N0cnVjdCBjYWNoZV9iaW5fcHRyX2Fy cmF5X3MgeworCWNhY2hlX2Jpbl9zel90IG47CisJdm9pZCAqKnB0cjsKK307CisKKy8qCisgKiBE ZWNsYXJlIGEgY2FjaGVfYmluX3B0cl9hcnJheV90IHN1ZmZpY2llbnQgZm9yIG52YWwgaXRlbXMu CisgKgorICogSW4gdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24sIHRoaXMgY291bGQgYmUganVz dCBwYXJ0IG9mIGEKKyAqIGNhY2hlX2Jpbl9wdHJfYXJyYXlfaW5pdF8uLi4gY2FsbCwgc2luY2Ug d2UgcmV1c2UgdGhlIGNhY2hlIGJpbiBzdGFjayBtZW1vcnkuCisgKiBJbmRpcmVjdGluZyBiZWhp bmQgYSBtYWNybywgdGhvdWdoLCBtZWFucyBleHBlcmltZW50aW5nIHdpdGggbGlua2VkLWxpc3QK KyAqIHJlcHJlc2VudGF0aW9ucyBpcyBlYXN5IChzaW5jZSB0aGV5J2xsIHJlcXVpcmUgYW4gYWxs b2NhIGluIHRoZSBjYWxsaW5nCisgKiBmcmFtZSkuCisgKi8KKyNkZWZpbmUgQ0FDSEVfQklOX1BU Ul9BUlJBWV9ERUNMQVJFKG5hbWUsIG52YWwpCQkJCVwKKyAgICBjYWNoZV9iaW5fcHRyX2FycmF5 X3QgbmFtZTsJCQkJCQlcCisgICAgbmFtZS5uID0gKG52YWwpCisKKy8qCisgKiBTdGFydCBhIGZp bGwuICBUaGUgYmluIG11c3QgYmUgZW1wdHksIGFuZCBUaGlzIG11c3QgYmUgZm9sbG93ZWQgYnkg YQorICogZmluaXNoX2ZpbGwgY2FsbCBiZWZvcmUgZG9pbmcgYW55IGFsbG9jL2RhbGxvYyBvcGVy YXRpb25zIG9uIHRoZSBiaW4uCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorY2FjaGVfYmluX2lu aXRfcHRyX2FycmF5X2Zvcl9maWxsKGNhY2hlX2Jpbl90ICpiaW4sIGNhY2hlX2Jpbl9pbmZvX3Qg KmluZm8sCisgICAgY2FjaGVfYmluX3B0cl9hcnJheV90ICphcnIsIGNhY2hlX2Jpbl9zel90IG5m aWxsKSB7CisJY2FjaGVfYmluX2Fzc2VydF9lbXB0eShiaW4sIGluZm8pOworCWFyci0+cHRyID0g Y2FjaGVfYmluX2VtcHR5X3Bvc2l0aW9uX2dldChiaW4pIC0gbmZpbGw7Cit9CisKKy8qCisgKiBX aGlsZSBuZmlsbCBpbiBjYWNoZV9iaW5faW5pdF9wdHJfYXJyYXlfZm9yX2ZpbGwgaXMgdGhlIG51 bWJlciB3ZSAqaW50ZW5kKiB0bworICogZmlsbCwgbmZpbGxlZCBoZXJlIGlzIHRoZSBudW1iZXIg d2UgYWN0dWFsbHkgZmlsbGVkICh3aGljaCBtYXkgYmUgbGVzcywgaW4KKyAqIGNhc2Ugb2YgT09N LgorICovCitzdGF0aWMgaW5saW5lIHZvaWQKK2NhY2hlX2Jpbl9maW5pc2hfZmlsbChjYWNoZV9i aW5fdCAqYmluLCBjYWNoZV9iaW5faW5mb190ICppbmZvLAorICAgIGNhY2hlX2Jpbl9wdHJfYXJy YXlfdCAqYXJyLCBjYWNoZV9iaW5fc3pfdCBuZmlsbGVkKSB7CisJY2FjaGVfYmluX2Fzc2VydF9l bXB0eShiaW4sIGluZm8pOworCXZvaWQgKiplbXB0eV9wb3NpdGlvbiA9IGNhY2hlX2Jpbl9lbXB0 eV9wb3NpdGlvbl9nZXQoYmluKTsKKwlpZiAobmZpbGxlZCA8IGFyci0+bikgeworCQltZW1tb3Zl KGVtcHR5X3Bvc2l0aW9uIC0gbmZpbGxlZCwgZW1wdHlfcG9zaXRpb24gLSBhcnItPm4sCisJCSAg ICBuZmlsbGVkICogc2l6ZW9mKHZvaWQgKikpOworCX0KKwliaW4tPnN0YWNrX2hlYWQgPSBlbXB0 eV9wb3NpdGlvbiAtIG5maWxsZWQ7Cit9CisKKy8qCisgKiBTYW1lIGRlYWwsIGJ1dCB3aXRoIGZs dXNoLiAgVW5saWtlIGZpbGwgKHdoaWNoIGNhbiBmYWlsKSwgdGhlIHVzZXIgbXVzdCBmbHVzaAor ICogZXZlcnl0aGluZyB3ZSBnaXZlIHRoZW0uCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorY2Fj aGVfYmluX2luaXRfcHRyX2FycmF5X2Zvcl9mbHVzaChjYWNoZV9iaW5fdCAqYmluLCBjYWNoZV9i aW5faW5mb190ICppbmZvLAorICAgIGNhY2hlX2Jpbl9wdHJfYXJyYXlfdCAqYXJyLCBjYWNoZV9i aW5fc3pfdCBuZmx1c2gpIHsKKwlhcnItPnB0ciA9IGNhY2hlX2Jpbl9lbXB0eV9wb3NpdGlvbl9n ZXQoYmluKSAtIG5mbHVzaDsKKwlhc3NlcnQoY2FjaGVfYmluX25jYWNoZWRfZ2V0X2xvY2FsKGJp biwgaW5mbykgPT0gMAorCSAgICB8fCAqYXJyLT5wdHIgIT0gTlVMTCk7Cit9CisKK3N0YXRpYyBp bmxpbmUgdm9pZAorY2FjaGVfYmluX2ZpbmlzaF9mbHVzaChjYWNoZV9iaW5fdCAqYmluLCBjYWNo ZV9iaW5faW5mb190ICppbmZvLAorICAgIGNhY2hlX2Jpbl9wdHJfYXJyYXlfdCAqYXJyLCBjYWNo ZV9iaW5fc3pfdCBuZmx1c2hlZCkgeworCXVuc2lnbmVkIHJlbSA9IGNhY2hlX2Jpbl9uY2FjaGVk X2dldF9sb2NhbChiaW4sIGluZm8pIC0gbmZsdXNoZWQ7CisJbWVtbW92ZShiaW4tPnN0YWNrX2hl YWQgKyBuZmx1c2hlZCwgYmluLT5zdGFja19oZWFkLAorCSAgICByZW0gKiBzaXplb2Yodm9pZCAq KSk7CisJYmluLT5zdGFja19oZWFkID0gYmluLT5zdGFja19oZWFkICsgbmZsdXNoZWQ7CisJY2Fj aGVfYmluX2xvd193YXRlcl9hZGp1c3QoYmluKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitj YWNoZV9iaW5faW5pdF9wdHJfYXJyYXlfZm9yX3N0YXNoZWQoY2FjaGVfYmluX3QgKmJpbiwgc3pp bmRfdCBiaW5pbmQsCisgICAgY2FjaGVfYmluX2luZm9fdCAqaW5mbywgY2FjaGVfYmluX3B0cl9h cnJheV90ICphcnIsCisgICAgY2FjaGVfYmluX3N6X3QgbnN0YXNoZWQpIHsKKwlhc3NlcnQobnN0 YXNoZWQgPiAwKTsKKwlhc3NlcnQoY2FjaGVfYmluX25zdGFzaGVkX2dldF9sb2NhbChiaW4sIGlu Zm8pID09IG5zdGFzaGVkKTsKKworCXZvaWQgKipsb3dfYm91bmQgPSBjYWNoZV9iaW5fbG93X2Jv dW5kX2dldChiaW4sIGluZm8pOworCWFyci0+cHRyID0gbG93X2JvdW5kOworCWFzc2VydCgqYXJy LT5wdHIgIT0gTlVMTCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorY2FjaGVfYmluX2Zpbmlz aF9mbHVzaF9zdGFzaGVkKGNhY2hlX2Jpbl90ICpiaW4sIGNhY2hlX2Jpbl9pbmZvX3QgKmluZm8p IHsKKwl2b2lkICoqbG93X2JvdW5kID0gY2FjaGVfYmluX2xvd19ib3VuZF9nZXQoYmluLCBpbmZv KTsKKworCS8qIFJlc2V0IHRoZSBiaW4gbG9jYWwgZnVsbCBwb3NpdGlvbi4gKi8KKwliaW4tPmxv d19iaXRzX2Z1bGwgPSAodWludDE2X3QpKHVpbnRwdHJfdClsb3dfYm91bmQ7CisJYXNzZXJ0KGNh Y2hlX2Jpbl9uc3Rhc2hlZF9nZXRfbG9jYWwoYmluLCBpbmZvKSA9PSAwKTsKK30KKworLyoKKyAq IEluaXRpYWxpemUgYSBjYWNoZV9iaW5faW5mbyB0byByZXByZXNlbnQgdXAgdG8gdGhlIGdpdmVu IG51bWJlciBvZiBpdGVtcyBpbgorICogdGhlIGNhY2hlX2JpbnMgaXQgaXMgYXNzb2NpYXRlZCB3 aXRoLgorICovCit2b2lkIGNhY2hlX2Jpbl9pbmZvX2luaXQoY2FjaGVfYmluX2luZm9fdCAqYmlu X2luZm8sCisgICAgY2FjaGVfYmluX3N6X3QgbmNhY2hlZF9tYXgpOworLyoKKyAqIEdpdmVuIGFu IGFycmF5IG9mIGluaXRpYWxpemVkIGNhY2hlX2Jpbl9pbmZvX3RzLCBkZXRlcm1pbmUgaG93IGJp ZyBhbgorICogYWxsb2NhdGlvbiBpcyByZXF1aXJlZCB0byBpbml0aWFsaXplIGEgZnVsbCBzZXQg b2YgY2FjaGVfYmluX3RzLgorICovCit2b2lkIGNhY2hlX2Jpbl9pbmZvX2NvbXB1dGVfYWxsb2Mo Y2FjaGVfYmluX2luZm9fdCAqaW5mb3MsIHN6aW5kX3QgbmluZm9zLAorICAgIHNpemVfdCAqc2l6 ZSwgc2l6ZV90ICphbGlnbm1lbnQpOworCisvKgorICogQWN0dWFsbHkgaW5pdGlhbGl6ZSBzb21l IGNhY2hlIGJpbnMuICBDYWxsZXJzIHNob3VsZCBhbGxvY2F0ZSB0aGUgYmFja2luZworICogbWVt b3J5IGluZGljYXRlZCBieSBhIGNhbGwgdG8gY2FjaGVfYmluX2NvbXB1dGVfYWxsb2MuICBUaGV5 IHNob3VsZCB0aGVuCisgKiBwcmVpbmNyZW1lbnQsIGNhbGwgaW5pdCBvbmNlIGZvciBlYWNoIGJp biBhbmQgaW5mbywgYW5kIHRoZW4gY2FsbAorICogY2FjaGVfYmluX3Bvc3RpbmNyZW1lbnQuICAq YWxsb2NfY3VyIHdpbGwgdGhlbiBwb2ludCBpbW1lZGlhdGVseSBwYXN0IHRoZSBlbmQKKyAqIG9m IHRoZSBhbGxvY2F0aW9uLgorICovCit2b2lkIGNhY2hlX2Jpbl9wcmVpbmNyZW1lbnQoY2FjaGVf YmluX2luZm9fdCAqaW5mb3MsIHN6aW5kX3QgbmluZm9zLAorICAgIHZvaWQgKmFsbG9jLCBzaXpl X3QgKmN1cl9vZmZzZXQpOwordm9pZCBjYWNoZV9iaW5fcG9zdGluY3JlbWVudChjYWNoZV9iaW5f aW5mb190ICppbmZvcywgc3ppbmRfdCBuaW5mb3MsCisgICAgdm9pZCAqYWxsb2MsIHNpemVfdCAq Y3VyX29mZnNldCk7Cit2b2lkIGNhY2hlX2Jpbl9pbml0KGNhY2hlX2Jpbl90ICpiaW4sIGNhY2hl X2Jpbl9pbmZvX3QgKmluZm8sIHZvaWQgKmFsbG9jLAorICAgIHNpemVfdCAqY3VyX29mZnNldCk7 CisKKy8qCisgKiBJZiBhIGNhY2hlIGJpbiB3YXMgemVybyBpbml0aWFsaXplZCAoZWl0aGVyIGJl Y2F1c2UgaXQgbGl2ZXMgaW4gc3RhdGljIG9yCisgKiB0aHJlYWQtbG9jYWwgc3RvcmFnZSwgb3Ig d2FzIG1lbXNldCB0byAwKSwgdGhpcyBmdW5jdGlvbiBpbmRpY2F0ZXMgd2hldGhlciBvcgorICog bm90IGNhY2hlX2Jpbl9pbml0IHdhcyBjYWxsZWQgb24gaXQuCisgKi8KK2Jvb2wgY2FjaGVfYmlu X3N0aWxsX3plcm9faW5pdGlhbGl6ZWQoY2FjaGVfYmluX3QgKmJpbik7CisKKyNlbmRpZiAvKiBK RU1BTExPQ19JTlRFUk5BTF9DQUNIRV9CSU5fSCAqLwoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNl LTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvY2to LmggYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFs bG9jL2ludGVybmFsL2NraC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdi Mzg1MGIKLS0tIC9kZXYvbnVsbAorKysgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxv Yy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL2NraC5oCkBAIC0wLDAgKzEsMTAxIEBA CisjaWZuZGVmIEpFTUFMTE9DX0lOVEVSTkFMX0NLSF9ICisjZGVmaW5lIEpFTUFMTE9DX0lOVEVS TkFMX0NLSF9ICisKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC90c2QuaCIKKworLyogQ3Vj a29vIGhhc2hpbmcgaW1wbGVtZW50YXRpb24uICBTa2lwIHRvIHRoZSBlbmQgZm9yIHRoZSBpbnRl cmZhY2UuICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBJTlRFUk5BTCBERUZJTklU SU9OUyAtLSBJR05PUkUgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIE1haW50YWlu IGNvdW50ZXJzIHVzZWQgdG8gZ2V0IGFuIGlkZWEgb2YgcGVyZm9ybWFuY2UuICovCisvKiAjZGVm aW5lIENLSF9DT1VOVCAqLworLyogUHJpbnQgY291bnRlciB2YWx1ZXMgaW4gY2toX2RlbGV0ZSgp IChyZXF1aXJlcyBDS0hfQ09VTlQpLiAqLworLyogI2RlZmluZSBDS0hfVkVSQk9TRSAqLworCisv KgorICogVGhlcmUgYXJlIDJeTEdfQ0tIX0JVQ0tFVF9DRUxMUyBjZWxscyBpbiBlYWNoIGhhc2gg dGFibGUgYnVja2V0LiAgVHJ5IHRvIGZpdAorICogb25lIGJ1Y2tldCBwZXIgTDEgY2FjaGUgbGlu ZS4KKyAqLworI2RlZmluZSBMR19DS0hfQlVDS0VUX0NFTExTIChMR19DQUNIRUxJTkUgLSBMR19T SVpFT0ZfUFRSIC0gMSkKKworLyogVHlwZWRlZnMgdG8gYWxsb3cgZWFzeSBmdW5jdGlvbiBwb2lu dGVyIHBhc3NpbmcuICovCit0eXBlZGVmIHZvaWQgY2toX2hhc2hfdCAoY29uc3Qgdm9pZCAqLCBz aXplX3RbMl0pOwordHlwZWRlZiBib29sIGNraF9rZXljb21wX3QgKGNvbnN0IHZvaWQgKiwgY29u c3Qgdm9pZCAqKTsKKworLyogSGFzaCB0YWJsZSBjZWxsLiAqLwordHlwZWRlZiBzdHJ1Y3Qgewor CWNvbnN0IHZvaWQgKmtleTsKKwljb25zdCB2b2lkICpkYXRhOworfSBja2hjX3Q7CisKKy8qIFRo ZSBoYXNoIHRhYmxlIGl0c2VsZi4gKi8KK3R5cGVkZWYgc3RydWN0IHsKKyNpZmRlZiBDS0hfQ09V TlQKKwkvKiBDb3VudGVycyB1c2VkIHRvIGdldCBhbiBpZGVhIG9mIHBlcmZvcm1hbmNlLiAqLwor CXVpbnQ2NF90IG5ncm93czsKKwl1aW50NjRfdCBuc2hyaW5rczsKKwl1aW50NjRfdCBuc2hyaW5r ZmFpbHM7CisJdWludDY0X3Qgbmluc2VydHM7CisJdWludDY0X3QgbnJlbG9jczsKKyNlbmRpZgor CisJLyogVXNlZCBmb3IgcHNldWRvLXJhbmRvbSBudW1iZXIgZ2VuZXJhdGlvbi4gKi8KKwl1aW50 NjRfdCBwcm5nX3N0YXRlOworCisJLyogVG90YWwgbnVtYmVyIG9mIGl0ZW1zLiAqLworCXNpemVf dCBjb3VudDsKKworCS8qCisJICogTWluaW11bSBhbmQgY3VycmVudCBudW1iZXIgb2YgaGFzaCB0 YWJsZSBidWNrZXRzLiAgVGhlcmUgYXJlCisJICogMl5MR19DS0hfQlVDS0VUX0NFTExTIGNlbGxz IHBlciBidWNrZXQuCisJICovCisJdW5zaWduZWQgbGdfbWluYnVja2V0czsKKwl1bnNpZ25lZCBs Z19jdXJidWNrZXRzOworCisJLyogSGFzaCBhbmQgY29tcGFyaXNvbiBmdW5jdGlvbnMuICovCisJ Y2toX2hhc2hfdCAqaGFzaDsKKwlja2hfa2V5Y29tcF90ICprZXljb21wOworCisJLyogSGFzaCB0 YWJsZSB3aXRoIDJebGdfY3VyYnVja2V0cyBidWNrZXRzLiAqLworCWNraGNfdCAqdGFiOworfSBj a2hfdDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIEJFR0lOIFBVQkxJQyBBUEkgKi8K Ky8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIExpZmV0aW1lIG1hbmFnZW1lbnQuICBNaW5p dGVtcyBpcyB0aGUgaW5pdGlhbCBjYXBhY2l0eS4gKi8KK2Jvb2wgY2toX25ldyh0c2RfdCAqdHNk LCBja2hfdCAqY2toLCBzaXplX3QgbWluaXRlbXMsIGNraF9oYXNoX3QgKmhhc2gsCisgICAgY2to X2tleWNvbXBfdCAqa2V5Y29tcCk7Cit2b2lkIGNraF9kZWxldGUodHNkX3QgKnRzZCwgY2toX3Qg KmNraCk7CisKKy8qIEdldCB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBzZXQuICovCitz aXplX3QgY2toX2NvdW50KGNraF90ICpja2gpOworCisvKgorICogVG8gaXRlcmF0ZSBvdmVyIHRo ZSBlbGVtZW50cyBpbiB0aGUgdGFibGUsIGluaXRpYWxpemUgKnRhYmluZCB0byAwIGFuZCBjYWxs CisgKiB0aGlzIGZ1bmN0aW9uIHVudGlsIGl0IHJldHVybnMgdHJ1ZS4gIEVhY2ggY2FsbCB0aGF0 IHJldHVybnMgZmFsc2Ugd2lsbAorICogdXBkYXRlICprZXkgYW5kICpkYXRhIHRvIHRoZSBuZXh0 IGVsZW1lbnQgaW4gdGhlIHRhYmxlLCBhc3N1bWluZyB0aGUgcG9pbnRlcnMKKyAqIGFyZSBub24t TlVMTC4KKyAqLworYm9vbCBja2hfaXRlcihja2hfdCAqY2toLCBzaXplX3QgKnRhYmluZCwgdm9p ZCAqKmtleSwgdm9pZCAqKmRhdGEpOworCisvKgorICogQmFzaWMgaGFzaCB0YWJsZSBvcGVyYXRp b25zIC0tIGluc2VydCwgcmVtb3ZhbCwgbG9va3VwLiAgRm9yIGNraF9yZW1vdmUgYW5kCisgKiBj a2hfc2VhcmNoLCBrZXkgb3IgZGF0YSBjYW4gYmUgTlVMTC4gIFRoZSBoYXNoLXRhYmxlIG9ubHkg c3RvcmVzIHBvaW50ZXJzIHRvCisgKiB0aGUga2V5IGFuZCB2YWx1ZSwgYW5kIGRvZXNuJ3QgZG8g YW55IGxpZmV0aW1lIG1hbmFnZW1lbnQuCisgKi8KK2Jvb2wgY2toX2luc2VydCh0c2RfdCAqdHNk LCBja2hfdCAqY2toLCBjb25zdCB2b2lkICprZXksIGNvbnN0IHZvaWQgKmRhdGEpOworYm9vbCBj a2hfcmVtb3ZlKHRzZF90ICp0c2QsIGNraF90ICpja2gsIGNvbnN0IHZvaWQgKnNlYXJjaGtleSwg dm9pZCAqKmtleSwKKyAgICB2b2lkICoqZGF0YSk7Citib29sIGNraF9zZWFyY2goY2toX3QgKmNr aCwgY29uc3Qgdm9pZCAqc2VhcmNoa2V5LCB2b2lkICoqa2V5LCB2b2lkICoqZGF0YSk7CisKKy8q IFNvbWUgdXNlZnVsIGhhc2ggYW5kIGNvbXBhcmlzb24gZnVuY3Rpb25zIGZvciBzdHJpbmdzIGFu ZCBwb2ludGVycy4gKi8KK3ZvaWQgY2toX3N0cmluZ19oYXNoKGNvbnN0IHZvaWQgKmtleSwgc2l6 ZV90IHJfaGFzaFsyXSk7Citib29sIGNraF9zdHJpbmdfa2V5Y29tcChjb25zdCB2b2lkICprMSwg Y29uc3Qgdm9pZCAqazIpOwordm9pZCBja2hfcG9pbnRlcl9oYXNoKGNvbnN0IHZvaWQgKmtleSwg c2l6ZV90IHJfaGFzaFsyXSk7Citib29sIGNraF9wb2ludGVyX2tleWNvbXAoY29uc3Qgdm9pZCAq azEsIGNvbnN0IHZvaWQgKmsyKTsKKworI2VuZGlmIC8qIEpFTUFMTE9DX0lOVEVSTkFMX0NLSF9I ICovCgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAv aW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9jb3VudGVyLmggYi8zODktZHMtYmFzZS0zLjMuMC1i dWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL2NvdW50ZXIuaApu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OWFiZjA2Ci0tLSAvZGV2L251bGwK KysrIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1h bGxvYy9pbnRlcm5hbC9jb3VudGVyLmgKQEAgLTAsMCArMSwzNCBAQAorI2lmbmRlZiBKRU1BTExP Q19JTlRFUk5BTF9DT1VOVEVSX0gKKyNkZWZpbmUgSkVNQUxMT0NfSU5URVJOQUxfQ09VTlRFUl9I CisKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9tdXRleC5oIgorCit0eXBlZGVmIHN0cnVj dCBjb3VudGVyX2FjY3VtX3MgeworCUxPQ0tFRElOVF9NVFhfREVDTEFSRShtdHgpCisJbG9ja2Vk X3U2NF90IGFjY3VtYnl0ZXM7CisJdWludDY0X3QgaW50ZXJ2YWw7Cit9IGNvdW50ZXJfYWNjdW1f dDsKKworSkVNQUxMT0NfQUxXQVlTX0lOTElORSBib29sCitjb3VudGVyX2FjY3VtKHRzZG5fdCAq dHNkbiwgY291bnRlcl9hY2N1bV90ICpjb3VudGVyLCB1aW50NjRfdCBieXRlcykgeworCXVpbnQ2 NF90IGludGVydmFsID0gY291bnRlci0+aW50ZXJ2YWw7CisJYXNzZXJ0KGludGVydmFsID4gMCk7 CisJTE9DS0VESU5UX01UWF9MT0NLKHRzZG4sIGNvdW50ZXItPm10eCk7CisJLyoKKwkgKiBJZiB0 aGUgZXZlbnQgbW92ZXMgZmFzdCBlbm91Z2ggKGFuZC9vciBpZiB0aGUgZXZlbnQgaGFuZGxpbmcg aXMgc2xvdworCSAqIGVub3VnaCksIGV4dHJlbWUgb3ZlcmZsb3cgY2FuIGNhdXNlIGNvdW50ZXIg dHJpZ2dlciBjb2FsZXNjaW5nLgorCSAqIFRoaXMgaXMgYW4gaW50ZW50aW9uYWwgbWVjaGFuaXNt IHRoYXQgYXZvaWRzIHJhdGUtbGltaXRpbmcKKwkgKiBhbGxvY2F0aW9uLgorCSAqLworCWJvb2wg b3ZlcmZsb3cgPSBsb2NrZWRfaW5jX21vZF91NjQodHNkbiwgTE9DS0VESU5UX01UWChjb3VudGVy LT5tdHgpLAorCSAgICAmY291bnRlci0+YWNjdW1ieXRlcywgYnl0ZXMsIGludGVydmFsKTsKKwlM T0NLRURJTlRfTVRYX1VOTE9DSyh0c2RuLCBjb3VudGVyLT5tdHgpOworCXJldHVybiBvdmVyZmxv dzsKK30KKworYm9vbCBjb3VudGVyX2FjY3VtX2luaXQoY291bnRlcl9hY2N1bV90ICpjb3VudGVy LCB1aW50NjRfdCBpbnRlcnZhbCk7Cit2b2lkIGNvdW50ZXJfcHJlZm9yayh0c2RuX3QgKnRzZG4s IGNvdW50ZXJfYWNjdW1fdCAqY291bnRlcik7Cit2b2lkIGNvdW50ZXJfcG9zdGZvcmtfcGFyZW50 KHRzZG5fdCAqdHNkbiwgY291bnRlcl9hY2N1bV90ICpjb3VudGVyKTsKK3ZvaWQgY291bnRlcl9w b3N0Zm9ya19jaGlsZCh0c2RuX3QgKnRzZG4sIGNvdW50ZXJfYWNjdW1fdCAqY291bnRlcik7CisK KyNlbmRpZiAvKiBKRU1BTExPQ19JTlRFUk5BTF9DT1VOVEVSX0ggKi8KCmRpZmYgLS1naXQgYS8z ODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2lu dGVybmFsL2N0bC5oIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5j bHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9jdGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwLi42M2QyN2Y4Ci0tLSAvZGV2L251bGwKKysrIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVp bGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9jdGwuaApAQCAtMCww ICsxLDE1OSBAQAorI2lmbmRlZiBKRU1BTExPQ19JTlRFUk5BTF9DVExfSAorI2RlZmluZSBKRU1B TExPQ19JTlRFUk5BTF9DVExfSAorCisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvamVtYWxs b2NfaW50ZXJuYWxfdHlwZXMuaCIKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9tYWxsb2Nf aW8uaCIKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9tdXRleF9wcm9mLmgiCisjaW5jbHVk ZSAiamVtYWxsb2MvaW50ZXJuYWwvcWwuaCIKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9z Yy5oIgorI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL3N0YXRzLmgiCisKKy8qIE1heGltdW0g Y3RsIHRyZWUgZGVwdGguICovCisjZGVmaW5lIENUTF9NQVhfREVQVEgJNworCit0eXBlZGVmIHN0 cnVjdCBjdGxfbm9kZV9zIHsKKwlib29sIG5hbWVkOworfSBjdGxfbm9kZV90OworCit0eXBlZGVm IHN0cnVjdCBjdGxfbmFtZWRfbm9kZV9zIHsKKwljdGxfbm9kZV90IG5vZGU7CisJY29uc3QgY2hh ciAqbmFtZTsKKwkvKiBJZiAobmNoaWxkcmVuID09IDApLCB0aGlzIGlzIGEgdGVybWluYWwgbm9k ZS4gKi8KKwlzaXplX3QgbmNoaWxkcmVuOworCWNvbnN0IGN0bF9ub2RlX3QgKmNoaWxkcmVuOwor CWludCAoKmN0bCkodHNkX3QgKiwgY29uc3Qgc2l6ZV90ICosIHNpemVfdCwgdm9pZCAqLCBzaXpl X3QgKiwgdm9pZCAqLAorCSAgICBzaXplX3QpOworfSBjdGxfbmFtZWRfbm9kZV90OworCit0eXBl ZGVmIHN0cnVjdCBjdGxfaW5kZXhlZF9ub2RlX3MgeworCXN0cnVjdCBjdGxfbm9kZV9zIG5vZGU7 CisJY29uc3QgY3RsX25hbWVkX25vZGVfdCAqKCppbmRleCkodHNkbl90ICosIGNvbnN0IHNpemVf dCAqLCBzaXplX3QsCisJICAgIHNpemVfdCk7Cit9IGN0bF9pbmRleGVkX25vZGVfdDsKKwordHlw ZWRlZiBzdHJ1Y3QgY3RsX2FyZW5hX3N0YXRzX3MgeworCWFyZW5hX3N0YXRzX3QgYXN0YXRzOwor CisJLyogQWdncmVnYXRlIHN0YXRzIGZvciBzbWFsbCBzaXplIGNsYXNzZXMsIGJhc2VkIG9uIGJp biBzdGF0cy4gKi8KKwlzaXplX3QgYWxsb2NhdGVkX3NtYWxsOworCXVpbnQ2NF90IG5tYWxsb2Nf c21hbGw7CisJdWludDY0X3QgbmRhbGxvY19zbWFsbDsKKwl1aW50NjRfdCBucmVxdWVzdHNfc21h bGw7CisJdWludDY0X3QgbmZpbGxzX3NtYWxsOworCXVpbnQ2NF90IG5mbHVzaGVzX3NtYWxsOwor CisJYmluX3N0YXRzX2RhdGFfdCBic3RhdHNbU0NfTkJJTlNdOworCWFyZW5hX3N0YXRzX2xhcmdl X3QgbHN0YXRzW1NDX05TSVpFUyAtIFNDX05CSU5TXTsKKwlwYWNfZXN0YXRzX3QgZXN0YXRzW1ND X05QU0laRVNdOworCWhwYV9zaGFyZF9zdGF0c190IGhwYXN0YXRzOworCXNlY19zdGF0c190IHNl Y3N0YXRzOworfSBjdGxfYXJlbmFfc3RhdHNfdDsKKwordHlwZWRlZiBzdHJ1Y3QgY3RsX3N0YXRz X3MgeworCXNpemVfdCBhbGxvY2F0ZWQ7CisJc2l6ZV90IGFjdGl2ZTsKKwlzaXplX3QgbWV0YWRh dGE7CisJc2l6ZV90IG1ldGFkYXRhX3RocDsKKwlzaXplX3QgcmVzaWRlbnQ7CisJc2l6ZV90IG1h cHBlZDsKKwlzaXplX3QgcmV0YWluZWQ7CisKKwliYWNrZ3JvdW5kX3RocmVhZF9zdGF0c190IGJh Y2tncm91bmRfdGhyZWFkOworCW11dGV4X3Byb2ZfZGF0YV90IG11dGV4X3Byb2ZfZGF0YVttdXRl eF9wcm9mX251bV9nbG9iYWxfbXV0ZXhlc107Cit9IGN0bF9zdGF0c190OworCit0eXBlZGVmIHN0 cnVjdCBjdGxfYXJlbmFfcyBjdGxfYXJlbmFfdDsKK3N0cnVjdCBjdGxfYXJlbmFfcyB7CisJdW5z aWduZWQgYXJlbmFfaW5kOworCWJvb2wgaW5pdGlhbGl6ZWQ7CisJcWxfZWxtKGN0bF9hcmVuYV90 KSBkZXN0cm95ZWRfbGluazsKKworCS8qIEJhc2ljIHN0YXRzLCBzdXBwb3J0ZWQgZXZlbiBpZiAh Y29uZmlnX3N0YXRzLiAqLworCXVuc2lnbmVkIG50aHJlYWRzOworCWNvbnN0IGNoYXIgKmRzczsK Kwlzc2l6ZV90IGRpcnR5X2RlY2F5X21zOworCXNzaXplX3QgbXV6enlfZGVjYXlfbXM7CisJc2l6 ZV90IHBhY3RpdmU7CisJc2l6ZV90IHBkaXJ0eTsKKwlzaXplX3QgcG11enp5OworCisJLyogTlVM TCBpZiAhY29uZmlnX3N0YXRzLiAqLworCWN0bF9hcmVuYV9zdGF0c190ICphc3RhdHM7Cit9Owor Cit0eXBlZGVmIHN0cnVjdCBjdGxfYXJlbmFzX3MgeworCXVpbnQ2NF90IGVwb2NoOworCXVuc2ln bmVkIG5hcmVuYXM7CisJcWxfaGVhZChjdGxfYXJlbmFfdCkgZGVzdHJveWVkOworCisJLyoKKwkg KiBFbGVtZW50IDAgY29ycmVzcG9uZHMgdG8gbWVyZ2VkIHN0YXRzIGZvciBleHRhbnQgYXJlbmFz IChhY2Nlc3NlZCB2aWEKKwkgKiBNQUxMQ1RMX0FSRU5BU19BTEwpLCBlbGVtZW50IDEgY29ycmVz cG9uZHMgdG8gbWVyZ2VkIHN0YXRzIGZvcgorCSAqIGRlc3Ryb3llZCBhcmVuYXMgKGFjY2Vzc2Vk IHZpYSBNQUxMQ1RMX0FSRU5BU19ERVNUUk9ZRUQpLCBhbmQgdGhlCisJICogcmVtYWluaW5nIE1B TExPQ1hfQVJFTkFfTElNSVQgZWxlbWVudHMgY29ycmVzcG9uZCB0byBhcmVuYXMuCisJICovCisJ Y3RsX2FyZW5hX3QgKmFyZW5hc1syICsgTUFMTE9DWF9BUkVOQV9MSU1JVF07Cit9IGN0bF9hcmVu YXNfdDsKKworaW50IGN0bF9ieW5hbWUodHNkX3QgKnRzZCwgY29uc3QgY2hhciAqbmFtZSwgdm9p ZCAqb2xkcCwgc2l6ZV90ICpvbGRsZW5wLAorICAgIHZvaWQgKm5ld3AsIHNpemVfdCBuZXdsZW4p OworaW50IGN0bF9uYW1ldG9taWIodHNkX3QgKnRzZCwgY29uc3QgY2hhciAqbmFtZSwgc2l6ZV90 ICptaWJwLCBzaXplX3QgKm1pYmxlbnApOworaW50IGN0bF9ieW1pYih0c2RfdCAqdHNkLCBjb25z dCBzaXplX3QgKm1pYiwgc2l6ZV90IG1pYmxlbiwgdm9pZCAqb2xkcCwKKyAgICBzaXplX3QgKm9s ZGxlbnAsIHZvaWQgKm5ld3AsIHNpemVfdCBuZXdsZW4pOworaW50IGN0bF9taWJuYW1ldG9taWIo dHNkX3QgKnRzZCwgc2l6ZV90ICptaWIsIHNpemVfdCBtaWJsZW4sIGNvbnN0IGNoYXIgKm5hbWUs CisgICAgc2l6ZV90ICptaWJsZW5wKTsKK2ludCBjdGxfYnltaWJuYW1lKHRzZF90ICp0c2QsIHNp emVfdCAqbWliLCBzaXplX3QgbWlibGVuLCBjb25zdCBjaGFyICpuYW1lLAorICAgIHNpemVfdCAq bWlibGVucCwgdm9pZCAqb2xkcCwgc2l6ZV90ICpvbGRsZW5wLCB2b2lkICpuZXdwLCBzaXplX3Qg bmV3bGVuKTsKK2Jvb2wgY3RsX2Jvb3Qodm9pZCk7Cit2b2lkIGN0bF9wcmVmb3JrKHRzZG5fdCAq dHNkbik7Cit2b2lkIGN0bF9wb3N0Zm9ya19wYXJlbnQodHNkbl90ICp0c2RuKTsKK3ZvaWQgY3Rs X3Bvc3Rmb3JrX2NoaWxkKHRzZG5fdCAqdHNkbik7Cit2b2lkIGN0bF9tdHhfYXNzZXJ0X2hlbGQo dHNkbl90ICp0c2RuKTsKKworI2RlZmluZSB4bWFsbGN0bChuYW1lLCBvbGRwLCBvbGRsZW5wLCBu ZXdwLCBuZXdsZW4pIGRvIHsJCVwKKwlpZiAoamVfbWFsbGN0bChuYW1lLCBvbGRwLCBvbGRsZW5w LCBuZXdwLCBuZXdsZW4pCQlcCisJICAgICE9IDApIHsJCQkJCQkJXAorCQltYWxsb2NfcHJpbnRm KAkJCQkJCVwKKwkJICAgICI8amVtYWxsb2M+OiBGYWlsdXJlIGluIHhtYWxsY3RsKFwiJXNcIiwg Li4uKVxuIiwJXAorCQkgICAgbmFtZSk7CQkJCQkJXAorCQlhYm9ydCgpOwkJCQkJCVwKKwl9CQkJ CQkJCQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIHhtYWxsY3RsbmFtZXRvbWliKG5hbWUsIG1p YnAsIG1pYmxlbnApIGRvIHsJCQlcCisJaWYgKGplX21hbGxjdGxuYW1ldG9taWIobmFtZSwgbWli cCwgbWlibGVucCkgIT0gMCkgewkJXAorCQltYWxsb2NfcHJpbnRmKCI8amVtYWxsb2M+OiBGYWls dXJlIGluICIJCQlcCisJCSAgICAieG1hbGxjdGxuYW1ldG9taWIoXCIlc1wiLCAuLi4pXG4iLCBu YW1lKTsJCVwKKwkJYWJvcnQoKTsJCQkJCQlcCisJfQkJCQkJCQkJXAorfSB3aGlsZSAoMCkKKwor I2RlZmluZSB4bWFsbGN0bGJ5bWliKG1pYiwgbWlibGVuLCBvbGRwLCBvbGRsZW5wLCBuZXdwLCBu ZXdsZW4pIGRvIHsJXAorCWlmIChqZV9tYWxsY3RsYnltaWIobWliLCBtaWJsZW4sIG9sZHAsIG9s ZGxlbnAsIG5ld3AsCQlcCisJICAgIG5ld2xlbikgIT0gMCkgewkJCQkJCVwKKwkJbWFsbG9jX3dy aXRlKAkJCQkJCVwKKwkJICAgICI8amVtYWxsb2M+OiBGYWlsdXJlIGluIHhtYWxsY3RsYnltaWIo KVxuIik7CVwKKwkJYWJvcnQoKTsJCQkJCQlcCisJfQkJCQkJCQkJXAorfSB3aGlsZSAoMCkKKwor I2RlZmluZSB4bWFsbGN0bG1pYm5hbWV0b21pYihtaWIsIG1pYmxlbiwgbmFtZSwgbWlibGVucCkg ZG8gewkJXAorCWlmIChjdGxfbWlibmFtZXRvbWliKHRzZF9mZXRjaCgpLCBtaWIsIG1pYmxlbiwg bmFtZSwgbWlibGVucCkJXAorCSAgICAhPSAwKSB7CQkJCQkJCVwKKwkJbWFsbG9jX3dyaXRlKAkJ CQkJCVwKKwkJICAgICI8amVtYWxsb2M+OiBGYWlsdXJlIGluIGN0bF9taWJuYW1ldG9taWIoKVxu Iik7CVwKKwkJYWJvcnQoKTsJCQkJCQlcCisJfQkJCQkJCQkJXAorfSB3aGlsZSAoMCkKKworI2Rl ZmluZSB4bWFsbGN0bGJ5bWlibmFtZShtaWIsIG1pYmxlbiwgbmFtZSwgbWlibGVucCwgb2xkcCwg b2xkbGVucCwJXAorICAgIG5ld3AsIG5ld2xlbikgZG8gewkJCQkJCQlcCisJaWYgKGN0bF9ieW1p Ym5hbWUodHNkX2ZldGNoKCksIG1pYiwgbWlibGVuLCBuYW1lLCBtaWJsZW5wLAlcCisJICAgIG9s ZHAsIG9sZGxlbnAsIG5ld3AsIG5ld2xlbikgIT0gMCkgewkJCVwKKwkJbWFsbG9jX3dyaXRlKAkJ CQkJCVwKKwkJICAgICI8amVtYWxsb2M+OiBGYWlsdXJlIGluIGN0bF9ieW1pYm5hbWUoKVxuIik7 CVwKKwkJYWJvcnQoKTsJCQkJCQlcCisJfQkJCQkJCQkJXAorfSB3aGlsZSAoMCkKKworI2VuZGlm IC8qIEpFTUFMTE9DX0lOVEVSTkFMX0NUTF9IICovCgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2Ut My4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9kZWNh eS5oIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1h bGxvYy9pbnRlcm5hbC9kZWNheS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu LmNmNmE5ZDIKLS0tIC9kZXYvbnVsbAorKysgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1h bGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL2RlY2F5LmgKQEAgLTAsMCArMSwx ODYgQEAKKyNpZm5kZWYgSkVNQUxMT0NfSU5URVJOQUxfREVDQVlfSAorI2RlZmluZSBKRU1BTExP Q19JTlRFUk5BTF9ERUNBWV9ICisKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9zbW9vdGhz dGVwLmgiCisKKyNkZWZpbmUgREVDQVlfVU5CT1VOREVEX1RJTUVfVE9fUFVSR0UgKCh1aW50NjRf dCktMSkKKworLyoKKyAqIFRoZSBkZWNheV90IGNvbXB1dGVzIHRoZSBudW1iZXIgb2YgcGFnZXMg d2Ugc2hvdWxkIHB1cmdlIGF0IGFueSBnaXZlbiB0aW1lLgorICogUGFnZSBhbGxvY2F0b3JzIGlu Zm9ybSBhIGRlY2F5IG9iamVjdCB3aGVuIHBhZ2VzIGVudGVyIGEgZGVjYXktYWJsZSBzdGF0ZQor ICogKGkuZS4gZGlydHkgb3IgbXV6enkpLCBhbmQgcXVlcnkgaXQgdG8gZGV0ZXJtaW5lIGhvdyBt YW55IHBhZ2VzIHNob3VsZCBiZQorICogcHVyZ2VkIGF0IGFueSBnaXZlbiB0aW1lLgorICoKKyAq IFRoaXMgaXMgbW9zdGx5IGEgc2luZ2xlLXRocmVhZGVkIGRhdGEgc3RydWN0dXJlIGFuZCBkb2Vz bid0IGNhcmUgYWJvdXQKKyAqIHN5bmNocm9uaXphdGlvbiBhdCBhbGw7IGl0J3MgdGhlIGNhbGxl cidzIHJlc3BvbnNpYmlsaXR5IHRvIG1hbmFnZSB0aGVpcgorICogc3luY2hyb25pemF0aW9uIG9u IHRoZWlyIG93bi4gIFRoZXJlIGFyZSB0d28gZXhjZXB0aW9uczoKKyAqIDEpIEl0J3MgT0sgdG8g cmFjaWx5IGNhbGwgZGVjYXlfbXNfcmVhZCAoaS5lLiBqdXN0IHRoZSBzaW1wbGVzdCBzdGF0ZSBx dWVyeSkuCisgKiAyKSBUaGUgbXR4IGFuZCBwdXJnaW5nIGZpZWxkcyBsaXZlIChhbmQgYXJlIGlu aXRpYWxpemVkKSBoZXJlLCBidXQgYXJlCisgKiAgICBsb2dpY2FsbHkgb3duZWQgYnkgdGhlIHBh Z2UgYWxsb2NhdG9yLiAgVGhpcyBpcyBqdXN0IGEgY29udmVuaWVuY2UgKHNpbmNlCisgKiAgICB0 aG9zZSBmaWVsZHMgd291bGQgYmUgZHVwbGljYXRlZCBmb3IgYm90aCB0aGUgZGlydHkgYW5kIG11 enp5IHN0YXRlcworICogICAgb3RoZXJ3aXNlKS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgZGVjYXlf cyBkZWNheV90Oworc3RydWN0IGRlY2F5X3MgeworCS8qIFN5bmNocm9uaXplcyBhbGwgbm9uLWF0 b21pYyBmaWVsZHMuICovCisJbWFsbG9jX211dGV4X3QgbXR4OworCS8qCisJICogVHJ1ZSBpZiBh IHRocmVhZCBpcyBjdXJyZW50bHkgcHVyZ2luZyB0aGUgZXh0ZW50cyBhc3NvY2lhdGVkIHdpdGgK KwkgKiB0aGlzIGRlY2F5IHN0cnVjdHVyZS4KKwkgKi8KKwlib29sIHB1cmdpbmc7CisJLyoKKwkg KiBBcHByb3hpbWF0ZSB0aW1lIGluIG1pbGxpc2Vjb25kcyBmcm9tIHRoZSBjcmVhdGlvbiBvZiBh IHNldCBvZiB1bnVzZWQKKwkgKiBkaXJ0eSBwYWdlcyB1bnRpbCBhbiBlcXVpdmFsZW50IHNldCBv ZiB1bnVzZWQgZGlydHkgcGFnZXMgaXMgcHVyZ2VkCisJICogYW5kL29yIHJldXNlZC4KKwkgKi8K KwlhdG9taWNfemRfdCB0aW1lX21zOworCS8qIHRpbWUgLyBTTU9PVEhTVEVQX05TVEVQUy4gKi8K Kwluc3RpbWVfdCBpbnRlcnZhbDsKKwkvKgorCSAqIFRpbWUgYXQgd2hpY2ggdGhlIGN1cnJlbnQg ZGVjYXkgaW50ZXJ2YWwgbG9naWNhbGx5IHN0YXJ0ZWQuICBXZSBkbworCSAqIG5vdCBhY3R1YWxs eSBhZHZhbmNlIHRvIGEgbmV3IGVwb2NoIHVudGlsIHNvbWV0aW1lIGFmdGVyIGl0IHN0YXJ0cwor CSAqIGJlY2F1c2Ugb2Ygc2NoZWR1bGluZyBhbmQgY29tcHV0YXRpb24gZGVsYXlzLCBhbmQgaXQg aXMgZXZlbiBwb3NzaWJsZQorCSAqIHRvIGNvbXBsZXRlbHkgc2tpcCBlcG9jaHMuICBJbiBhbGwg Y2FzZXMsIGR1cmluZyBlcG9jaCBhZHZhbmNlbWVudCB3ZQorCSAqIG1lcmdlIGFsbCByZWxldmFu dCBhY3Rpdml0eSBpbnRvIHRoZSBtb3N0IHJlY2VudGx5IHJlY29yZGVkIGVwb2NoLgorCSAqLwor CW5zdGltZV90IGVwb2NoOworCS8qIERlYWRsaW5lIHJhbmRvbW5lc3MgZ2VuZXJhdG9yLiAqLwor CXVpbnQ2NF90IGppdHRlcl9zdGF0ZTsKKwkvKgorCSAqIERlYWRsaW5lIGZvciBjdXJyZW50IGVw b2NoLiAgVGhpcyBpcyB0aGUgc3VtIG9mIGludGVydmFsIGFuZCBwZXIKKwkgKiBlcG9jaCBqaXR0 ZXIgd2hpY2ggaXMgYSB1bmlmb3JtIHJhbmRvbSB2YXJpYWJsZSBpbiBbMC4uaW50ZXJ2YWwpLgor CSAqIEVwb2NocyBhbHdheXMgYWR2YW5jZSBieSBwcmVjaXNlIG11bHRpcGxlcyBvZiBpbnRlcnZh bCwgYnV0IHdlCisJICogcmFuZG9taXplIHRoZSBkZWFkbGluZSB0byByZWR1Y2UgdGhlIGxpa2Vs aWhvb2Qgb2YgYXJlbmFzIHB1cmdpbmcgaW4KKwkgKiBsb2Nrc3RlcC4KKwkgKi8KKwluc3RpbWVf dCBkZWFkbGluZTsKKwkvKgorCSAqIFRoZSBudW1iZXIgb2YgcGFnZXMgd2UgY2FwIG91cnNlbHZl cyBhdCBpbiB0aGUgY3VycmVudCBlcG9jaCwgcGVyCisJICogZGVjYXkgcG9saWNpZXMuICBVcGRh dGVkIG9uIGFuIGVwb2NoIGNoYW5nZS4gIEFmdGVyIGFuIGVwb2NoIGNoYW5nZSwKKwkgKiB0aGUg Y2FsbGVyIHNob3VsZCB0YWtlIHN0ZXBzIHRvIHRyeSB0byBwdXJnZSBkb3duIHRvIHRoaXMgYW1v dW50LgorCSAqLworCXNpemVfdCBucGFnZXNfbGltaXQ7CisJLyoKKwkgKiBOdW1iZXIgb2YgdW5w dXJnZWQgcGFnZXMgYXQgYmVnaW5uaW5nIG9mIGN1cnJlbnQgZXBvY2guICBEdXJpbmcgZXBvY2gK KwkgKiBhZHZhbmNlbWVudCB3ZSB1c2UgdGhlIGRlbHRhIGJldHdlZW4gYXJlbmEtPmRlY2F5Xyou bnVucHVyZ2VkIGFuZAorCSAqIGVjYWNoZV9ucGFnZXNfZ2V0KCZhcmVuYS0+ZWNhY2hlXyopIHRv IGRldGVybWluZSBob3cgbWFueSBkaXJ0eSBwYWdlcywKKwkgKiBpZiBhbnksIHdlcmUgZ2VuZXJh dGVkLgorCSAqLworCXNpemVfdCBudW5wdXJnZWQ7CisJLyoKKwkgKiBUcmFpbGluZyBsb2cgb2Yg aG93IG1hbnkgdW51c2VkIGRpcnR5IHBhZ2VzIHdlcmUgZ2VuZXJhdGVkIGR1cmluZworCSAqIGVh Y2ggb2YgdGhlIHBhc3QgU01PT1RIU1RFUF9OU1RFUFMgZGVjYXkgZXBvY2hzLCB3aGVyZSB0aGUg bGFzdAorCSAqIGVsZW1lbnQgaXMgdGhlIG1vc3QgcmVjZW50IGVwb2NoLiAgQ29ycmVzcG9uZGlu ZyBlcG9jaCB0aW1lcyBhcmUKKwkgKiByZWxhdGl2ZSB0byBlcG9jaC4KKwkgKgorCSAqIFVwZGF0 ZWQgb25seSBvbiBlcG9jaCBhZHZhbmNlLCB0cmlnZ2VyZWQgYnkKKwkgKiBkZWNheV9tYXliZV9h ZHZhbmNlX2Vwb2NoLCBiZWxvdy4KKwkgKi8KKwlzaXplX3QgYmFja2xvZ1tTTU9PVEhTVEVQX05T VEVQU107CisKKwkvKiBQZWFrIG51bWJlciBvZiBwYWdlcyBpbiBhc3NvY2lhdGVkIGV4dGVudHMu ICBVc2VkIGZvciBkZWJ1ZyBvbmx5LiAqLworCXVpbnQ2NF90IGNlaWxfbnBhZ2VzOworfTsKKwor LyoKKyAqIFRoZSBjdXJyZW50IGRlY2F5IHRpbWUgc2V0dGluZy4gIFRoaXMgaXMgdGhlIG9ubHkg cHVibGljIGFjY2VzcyB0byBhIGRlY2F5X3QKKyAqIHRoYXQncyBhbGxvd2VkIHdpdGhvdXQgaG9s ZGluZyBtdHguCisgKi8KK3N0YXRpYyBpbmxpbmUgc3NpemVfdAorZGVjYXlfbXNfcmVhZChjb25z dCBkZWNheV90ICpkZWNheSkgeworCXJldHVybiBhdG9taWNfbG9hZF96ZCgmZGVjYXktPnRpbWVf bXMsIEFUT01JQ19SRUxBWEVEKTsKK30KKworLyoKKyAqIFNlZSB0aGUgY29tbWVudCBvbiB0aGUg c3RydWN0IGZpZWxkIC0tIHRoZSBsaW1pdCBvbiBwYWdlcyB3ZSBzaG91bGQgYWxsb3cgaW4KKyAq IHRoaXMgZGVjYXkgc3RhdGUgdGhpcyBlcG9jaC4KKyAqLworc3RhdGljIGlubGluZSBzaXplX3QK K2RlY2F5X25wYWdlc19saW1pdF9nZXQoY29uc3QgZGVjYXlfdCAqZGVjYXkpIHsKKwlyZXR1cm4g ZGVjYXktPm5wYWdlc19saW1pdDsKK30KKworLyogSG93IG1hbnkgdW51c2VkIGRpcnR5IHBhZ2Vz IHdlcmUgZ2VuZXJhdGVkIGR1cmluZyB0aGUgbGFzdCBlcG9jaC4gKi8KK3N0YXRpYyBpbmxpbmUg c2l6ZV90CitkZWNheV9lcG9jaF9ucGFnZXNfZGVsdGEoY29uc3QgZGVjYXlfdCAqZGVjYXkpIHsK KwlyZXR1cm4gZGVjYXktPmJhY2tsb2dbU01PT1RIU1RFUF9OU1RFUFMgLSAxXTsKK30KKworLyoK KyAqIEN1cnJlbnQgZXBvY2ggZHVyYXRpb24sIGluIG5hbm9zZWNvbmRzLiAgR2l2ZW4gdGhhdCBu ZXcgZXBvY2hzIGFyZSBzdGFydGVkCisgKiBzb21ld2hhdCBoYXBoYXphcmRseSwgdGhpcyBpcyBu b3QgbmVjZXNzYXJpbHkgZXhhY3RseSB0aGUgdGltZSBiZXR3ZWVuIGFueQorICogdHdvIGNhbGxz IHRvIGRlY2F5X21heWJlX2FkdmFuY2VfZXBvY2g7IHNlZSB0aGUgY29tbWVudHMgb24gZmllbGRz IGluIHRoZQorICogZGVjYXlfdC4KKyAqLworc3RhdGljIGlubGluZSB1aW50NjRfdAorZGVjYXlf ZXBvY2hfZHVyYXRpb25fbnMoY29uc3QgZGVjYXlfdCAqZGVjYXkpIHsKKwlyZXR1cm4gbnN0aW1l X25zKCZkZWNheS0+aW50ZXJ2YWwpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wKK2RlY2F5X2lt bWVkaWF0ZWx5KGNvbnN0IGRlY2F5X3QgKmRlY2F5KSB7CisJc3NpemVfdCBkZWNheV9tcyA9IGRl Y2F5X21zX3JlYWQoZGVjYXkpOworCXJldHVybiBkZWNheV9tcyA9PSAwOworfQorCitzdGF0aWMg aW5saW5lIGJvb2wKK2RlY2F5X2Rpc2FibGVkKGNvbnN0IGRlY2F5X3QgKmRlY2F5KSB7CisJc3Np emVfdCBkZWNheV9tcyA9IGRlY2F5X21zX3JlYWQoZGVjYXkpOworCXJldHVybiBkZWNheV9tcyA8 IDA7Cit9CisKKy8qIFJldHVybnMgdHJ1ZSBpZiBkZWNheSBpcyBlbmFibGVkIGFuZCBkb25lIGdy YWR1YWxseS4gKi8KK3N0YXRpYyBpbmxpbmUgYm9vbAorZGVjYXlfZ3JhZHVhbGx5KGNvbnN0IGRl Y2F5X3QgKmRlY2F5KSB7CisJc3NpemVfdCBkZWNheV9tcyA9IGRlY2F5X21zX3JlYWQoZGVjYXkp OworCXJldHVybiBkZWNheV9tcyA+IDA7Cit9CisKKy8qCisgKiBSZXR1cm5zIHRydWUgaWYgdGhl IHBhc3NlZCBpbiBkZWNheSB0aW1lIHNldHRpbmcgaXMgdmFsaWQuCisgKiA8IC0xIDogaW52YWxp ZAorICogLTEgICA6IG5ldmVyIGRlY2F5CisgKiAgMCAgIDogZGVjYXkgaW1tZWRpYXRlbHkKKyAq ICA+IDAgOiBzb21lIHBvc2l0aXZlIGRlY2F5IHRpbWUsIHVwIHRvIGEgbWF4aW11bSBhbGxvd2Vk IHZhbHVlIG9mCisgKiAgTlNUSU1FX1NFQ19NQVggKiAxMDAwLCB3aGljaCBjb3JyZXNwb25kcyB0 byBkZWNheWluZyBzb21ld2hlcmUgaW4gdGhlIGVhcmx5CisgKiAgMjd0aCBjZW50dXJ5LiAgQnkg dGhhdCB0aW1lLCB3ZSBleHBlY3QgdG8gaGF2ZSBpbXBsZW1lbnRlZCBhbHRlcm5hdGUgcHVyZ2lu ZworICogIHN0cmF0ZWdpZXMuCisgKi8KK2Jvb2wgZGVjYXlfbXNfdmFsaWQoc3NpemVfdCBkZWNh eV9tcyk7CisKKy8qCisgKiBBcyBhIHByZWNvbmRpdGlvbiwgdGhlIGRlY2F5X3QgbXVzdCBiZSB6 ZXJvZWQgb3V0IChhcyBpZiB3aXRoIG1lbXNldCkuCisgKgorICogUmV0dXJucyB0cnVlIG9uIGVy cm9yLgorICovCitib29sIGRlY2F5X2luaXQoZGVjYXlfdCAqZGVjYXksIG5zdGltZV90ICpjdXJf dGltZSwgc3NpemVfdCBkZWNheV9tcyk7CisKKy8qCisgKiBHaXZlbiBhbiBhbHJlYWR5LWluaXRp YWxpemVkIGRlY2F5X3QsIHJlaW5pdGlhbGl6ZSBpdCB3aXRoIHRoZSBnaXZlbiBkZWNheQorICog dGltZS4gIFRoZSBkZWNheV90IG11c3QgaGF2ZSBwcmV2aW91c2x5IGJlZW4gaW5pdGlhbGl6ZWQg KGFuZCBzaG91bGQgbm90IHRoZW4KKyAqIGJlIHplcm9lZCkuCisgKi8KK3ZvaWQgZGVjYXlfcmVp bml0KGRlY2F5X3QgKmRlY2F5LCBuc3RpbWVfdCAqY3VyX3RpbWUsIHNzaXplX3QgZGVjYXlfbXMp OworCisvKgorICogQ29tcHV0ZSBob3cgbWFueSBvZiAnbnBhZ2VzX25ldycgcGFnZXMgd2Ugd291 bGQgbmVlZCB0byBwdXJnZSBpbiAndGltZScuCisgKi8KK3VpbnQ2NF90IGRlY2F5X25wYWdlc19w dXJnZV9pbihkZWNheV90ICpkZWNheSwgbnN0aW1lX3QgKnRpbWUsCisgICAgc2l6ZV90IG5wYWdl c19uZXcpOworCisvKiBSZXR1cm5zIHRydWUgaWYgdGhlIGVwb2NoIGFkdmFuY2VkIGFuZCB0aGVy ZSBhcmUgcGFnZXMgdG8gcHVyZ2UuICovCitib29sIGRlY2F5X21heWJlX2FkdmFuY2VfZXBvY2go ZGVjYXlfdCAqZGVjYXksIG5zdGltZV90ICpuZXdfdGltZSwKKyAgICBzaXplX3QgY3VycmVudF9u cGFnZXMpOworCisvKgorICogQ2FsY3VsYXRlcyB3YWl0IHRpbWUgdW50aWwgYSBudW1iZXIgb2Yg cGFnZXMgaW4gdGhlIGludGVydmFsCisgKiBbMC41ICogbnBhZ2VzX3RocmVzaG9sZCAuLiAxLjUg KiBucGFnZXNfdGhyZXNob2xkXSBzaG91bGQgYmUgcHVyZ2VkLgorICoKKyAqIFJldHVybnMgbnVt YmVyIG9mIG5hbm9zZWNvbmRzIG9yIERFQ0FZX1VOQk9VTkRFRF9USU1FX1RPX1BVUkdFIGluIGNh c2Ugb2YKKyAqIGluZGVmaW5pdGUgd2FpdC4KKyAqLwordWludDY0X3QgZGVjYXlfbnNfdW50aWxf cHVyZ2UoZGVjYXlfdCAqZGVjYXksIHNpemVfdCBucGFnZXNfY3VycmVudCwKKyAgICB1aW50NjRf dCBucGFnZXNfdGhyZXNob2xkKTsKKworI2VuZGlmIC8qIEpFTUFMTE9DX0lOVEVSTkFMX0RFQ0FZ X0ggKi8KCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMu MC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL2Rpdi5oIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVp bGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9kaXYuaApuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZWJhZTkzCi0tLSAvZGV2L251bGwKKysrIGIv Mzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9p bnRlcm5hbC9kaXYuaApAQCAtMCwwICsxLDQxIEBACisjaWZuZGVmIEpFTUFMTE9DX0lOVEVSTkFM X0RJVl9ICisjZGVmaW5lIEpFTUFMTE9DX0lOVEVSTkFMX0RJVl9ICisKKyNpbmNsdWRlICJqZW1h bGxvYy9pbnRlcm5hbC9hc3NlcnQuaCIKKworLyoKKyAqIFRoaXMgbW9kdWxlIGRvZXMgdGhlIGRp dmlzaW9uIHRoYXQgY29tcHV0ZXMgdGhlIGluZGV4IG9mIGEgcmVnaW9uIGluIGEgc2xhYiwKKyAq IGdpdmVuIGl0cyBvZmZzZXQgcmVsYXRpdmUgdG8gdGhlIGJhc2UuCisgKiBUaGF0IGlzLCBnaXZl biBhIGRpdmlzb3IgZCwgYW4gbiA9IGkgKiBkIChhbGwgaW50ZWdlcnMpLCB3ZSdsbCByZXR1cm4g aS4KKyAqIFdlIGRvIHNvbWUgcHJlLWNvbXB1dGF0aW9uIHRvIGRvIHRoaXMgbW9yZSBxdWlja2x5 IHRoYW4gYSBDUFUgZGl2aXNpb24KKyAqIGluc3RydWN0aW9uLgorICogV2UgYm91bmQgbiA8IDJe MzIsIGFuZCBkb24ndCBzdXBwb3J0IGRpdmlkaW5nIGJ5IG9uZS4KKyAqLworCit0eXBlZGVmIHN0 cnVjdCBkaXZfaW5mb19zIGRpdl9pbmZvX3Q7CitzdHJ1Y3QgZGl2X2luZm9fcyB7CisJdWludDMy X3QgbWFnaWM7CisjaWZkZWYgSkVNQUxMT0NfREVCVUcKKwlzaXplX3QgZDsKKyNlbmRpZgorfTsK Kwordm9pZCBkaXZfaW5pdChkaXZfaW5mb190ICpkaXZfaW5mbywgc2l6ZV90IGRpdmlzb3IpOwor CitzdGF0aWMgaW5saW5lIHNpemVfdAorZGl2X2NvbXB1dGUoZGl2X2luZm9fdCAqZGl2X2luZm8s IHNpemVfdCBuKSB7CisJYXNzZXJ0KG4gPD0gKHVpbnQzMl90KS0xKTsKKwkvKgorCSAqIFRoaXMg Z2VuZXJhdGVzLCBlLmcuIG1vdjsgaW11bDsgc2hyIG9uIHg4Ni02NC4gT24gYSAzMi1iaXQgbWFj aGluZSwKKwkgKiB0aGUgY29tcGlsZXJzIEkgdHJpZWQgd2VyZSBhbGwgc21hcnQgZW5vdWdoIHRv IHR1cm4gdGhpcyBpbnRvIHRoZQorCSAqIGFwcHJvcHJpYXRlICJnZXQgdGhlIGhpZ2ggMzIgYml0 cyBvZiB0aGUgcmVzdWx0IG9mIGEgbXVsdGlwbHkiIChlLmcuCisJICogbXVsOyBtb3YgZWR4IGVh eDsgb24geDg2LCB1bXVsbCBvbiBhcm0sIGV0Yy4pLgorCSAqLworCXNpemVfdCBpID0gKCh1aW50 NjRfdCluICogKHVpbnQ2NF90KWRpdl9pbmZvLT5tYWdpYykgPj4gMzI7CisjaWZkZWYgSkVNQUxM T0NfREVCVUcKKwlhc3NlcnQoaSAqIGRpdl9pbmZvLT5kID09IG4pOworI2VuZGlmCisJcmV0dXJu IGk7Cit9CisKKyNlbmRpZiAvKiBKRU1BTExPQ19JTlRFUk5BTF9ESVZfSCAqLwoKZGlmZiAtLWdp dCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxs b2MvaW50ZXJuYWwvZWNhY2hlLmggYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01 LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL2VjYWNoZS5oCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAuLjcxY2FlM2UKLS0tIC9kZXYvbnVsbAorKysgYi8zODktZHMtYmFz ZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL2Vj YWNoZS5oCkBAIC0wLDAgKzEsNTUgQEAKKyNpZm5kZWYgSkVNQUxMT0NfSU5URVJOQUxfRUNBQ0hF X0gKKyNkZWZpbmUgSkVNQUxMT0NfSU5URVJOQUxfRUNBQ0hFX0gKKworI2luY2x1ZGUgImplbWFs bG9jL2ludGVybmFsL2VzZXQuaCIKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9zYW4uaCIK KyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9tdXRleC5oIgorCit0eXBlZGVmIHN0cnVjdCBl Y2FjaGVfcyBlY2FjaGVfdDsKK3N0cnVjdCBlY2FjaGVfcyB7CisJbWFsbG9jX211dGV4X3QgbXR4 OworCWVzZXRfdCBlc2V0OworCWVzZXRfdCBndWFyZGVkX2VzZXQ7CisJLyogQWxsIHN0b3JlZCBl eHRlbnRzIG11c3QgYmUgaW4gdGhlIHNhbWUgc3RhdGUuICovCisJZXh0ZW50X3N0YXRlX3Qgc3Rh dGU7CisJLyogVGhlIGluZGV4IG9mIHRoZSBlaG9va3MgdGhlIGVjYWNoZSBpcyBhc3NvY2lhdGVk IHdpdGguICovCisJdW5zaWduZWQgaW5kOworCS8qCisJICogSWYgdHJ1ZSwgZGVsYXkgY29hbGVz Y2luZyB1bnRpbCBldmljdGlvbjsgb3RoZXJ3aXNlIGNvYWxlc2NlIGR1cmluZworCSAqIGRlYWxs b2NhdGlvbi4KKwkgKi8KKwlib29sIGRlbGF5X2NvYWxlc2NlOworfTsKKworc3RhdGljIGlubGlu ZSBzaXplX3QKK2VjYWNoZV9ucGFnZXNfZ2V0KGVjYWNoZV90ICplY2FjaGUpIHsKKwlyZXR1cm4g ZXNldF9ucGFnZXNfZ2V0KCZlY2FjaGUtPmVzZXQpICsKKwkgICAgZXNldF9ucGFnZXNfZ2V0KCZl Y2FjaGUtPmd1YXJkZWRfZXNldCk7Cit9CisKKy8qIEdldCB0aGUgbnVtYmVyIG9mIGV4dGVudHMg aW4gdGhlIGdpdmVuIHBhZ2Ugc2l6ZSBpbmRleC4gKi8KK3N0YXRpYyBpbmxpbmUgc2l6ZV90Citl Y2FjaGVfbmV4dGVudHNfZ2V0KGVjYWNoZV90ICplY2FjaGUsIHBzemluZF90IGluZCkgeworCXJl dHVybiBlc2V0X25leHRlbnRzX2dldCgmZWNhY2hlLT5lc2V0LCBpbmQpICsKKwkgICAgZXNldF9u ZXh0ZW50c19nZXQoJmVjYWNoZS0+Z3VhcmRlZF9lc2V0LCBpbmQpOworfQorCisvKiBHZXQgdGhl IHN1bSB0b3RhbCBieXRlcyBvZiB0aGUgZXh0ZW50cyBpbiB0aGUgZ2l2ZW4gcGFnZSBzaXplIGlu ZGV4LiAqLworc3RhdGljIGlubGluZSBzaXplX3QKK2VjYWNoZV9uYnl0ZXNfZ2V0KGVjYWNoZV90 ICplY2FjaGUsIHBzemluZF90IGluZCkgeworCXJldHVybiBlc2V0X25ieXRlc19nZXQoJmVjYWNo ZS0+ZXNldCwgaW5kKSArCisJICAgIGVzZXRfbmJ5dGVzX2dldCgmZWNhY2hlLT5ndWFyZGVkX2Vz ZXQsIGluZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQKK2VjYWNoZV9pbmRfZ2V0KGVj YWNoZV90ICplY2FjaGUpIHsKKwlyZXR1cm4gZWNhY2hlLT5pbmQ7Cit9CisKK2Jvb2wgZWNhY2hl X2luaXQodHNkbl90ICp0c2RuLCBlY2FjaGVfdCAqZWNhY2hlLCBleHRlbnRfc3RhdGVfdCBzdGF0 ZSwKKyAgICB1bnNpZ25lZCBpbmQsIGJvb2wgZGVsYXlfY29hbGVzY2UpOwordm9pZCBlY2FjaGVf cHJlZm9yayh0c2RuX3QgKnRzZG4sIGVjYWNoZV90ICplY2FjaGUpOwordm9pZCBlY2FjaGVfcG9z dGZvcmtfcGFyZW50KHRzZG5fdCAqdHNkbiwgZWNhY2hlX3QgKmVjYWNoZSk7Cit2b2lkIGVjYWNo ZV9wb3N0Zm9ya19jaGlsZCh0c2RuX3QgKnRzZG4sIGVjYWNoZV90ICplY2FjaGUpOworCisjZW5k aWYgLyogSkVNQUxMT0NfSU5URVJOQUxfRUNBQ0hFX0ggKi8KCmRpZmYgLS1naXQgYS8zODktZHMt YmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFs L2VkYXRhLmggYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRl L2plbWFsbG9jL2ludGVybmFsL2VkYXRhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMC4uYWYwMzllYQotLS0gL2Rldi9udWxsCisrKyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxk L2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvZWRhdGEuaApAQCAtMCww ICsxLDY5OCBAQAorI2lmbmRlZiBKRU1BTExPQ19JTlRFUk5BTF9FREFUQV9ICisjZGVmaW5lIEpF TUFMTE9DX0lOVEVSTkFMX0VEQVRBX0gKKworI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2F0 b21pYy5oIgorI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2Jpbl9pbmZvLmgiCisjaW5jbHVk ZSAiamVtYWxsb2MvaW50ZXJuYWwvYml0X3V0aWwuaCIKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRl cm5hbC9ocGRhdGEuaCIKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9uc3RpbWUuaCIKKyNp bmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9waC5oIgorI2luY2x1ZGUgImplbWFsbG9jL2ludGVy bmFsL3FsLmgiCisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvc2MuaCIKKyNpbmNsdWRlICJq ZW1hbGxvYy9pbnRlcm5hbC9zbGFiX2RhdGEuaCIKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5h bC9zei5oIgorI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL3R5cGVkX2xpc3QuaCIKKworLyoK KyAqIHNpemVvZihlZGF0YV90KSBpcyAxMjggYnl0ZXMgb24gNjQtYml0IGFyY2hpdGVjdHVyZXMu ICBFbnN1cmUgdGhlIGFsaWdubWVudAorICogdG8gZnJlZSB1cCB0aGUgbG93IGJpdHMgaW4gdGhl IHJ0cmVlIGxlYWYuCisgKi8KKyNkZWZpbmUgRURBVEFfQUxJR05NRU5UIDEyOAorCitlbnVtIGV4 dGVudF9zdGF0ZV9lIHsKKwlleHRlbnRfc3RhdGVfYWN0aXZlICAgPSAwLAorCWV4dGVudF9zdGF0 ZV9kaXJ0eSAgICA9IDEsCisJZXh0ZW50X3N0YXRlX211enp5ICAgID0gMiwKKwlleHRlbnRfc3Rh dGVfcmV0YWluZWQgPSAzLAorCWV4dGVudF9zdGF0ZV90cmFuc2l0aW9uID0gNCwgLyogU3RhdGVz IGJlbG93IGFyZSBpbnRlcm1lZGlhdGUuICovCisJZXh0ZW50X3N0YXRlX21lcmdpbmcgPSA1LAor CWV4dGVudF9zdGF0ZV9tYXggPSA1IC8qIFNhbml0eSBjaGVja2luZyBvbmx5LiAqLworfTsKK3R5 cGVkZWYgZW51bSBleHRlbnRfc3RhdGVfZSBleHRlbnRfc3RhdGVfdDsKKworZW51bSBleHRlbnRf aGVhZF9zdGF0ZV9lIHsKKwlFWFRFTlRfTk9UX0hFQUQsCisJRVhURU5UX0lTX0hFQUQgICAvKiBT ZWUgY29tbWVudHMgaW4gZWhvb2tzX2RlZmF1bHRfbWVyZ2VfaW1wbCgpLiAqLworfTsKK3R5cGVk ZWYgZW51bSBleHRlbnRfaGVhZF9zdGF0ZV9lIGV4dGVudF9oZWFkX3N0YXRlX3Q7CisKKy8qCisg KiBXaGljaCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgcGFnZSBhbGxvY2F0b3IgaW50ZXJmYWNlLCAo UEFJLCBkZWZpbmVkIGluCisgKiBwYWkuaCkgb3ducyB0aGUgZ2l2ZW4gZXh0ZW50PworICovCitl bnVtIGV4dGVudF9wYWlfZSB7CisJRVhURU5UX1BBSV9QQUMgPSAwLAorCUVYVEVOVF9QQUlfSFBB ID0gMQorfTsKK3R5cGVkZWYgZW51bSBleHRlbnRfcGFpX2UgZXh0ZW50X3BhaV90OworCitzdHJ1 Y3QgZV9wcm9mX2luZm9fcyB7CisJLyogVGltZSB3aGVuIHRoaXMgd2FzIGFsbG9jYXRlZC4gKi8K Kwluc3RpbWVfdAllX3Byb2ZfYWxsb2NfdGltZTsKKwkvKiBBbGxvY2F0aW9uIHJlcXVlc3Qgc2l6 ZS4gKi8KKwlzaXplX3QJCWVfcHJvZl9hbGxvY19zaXplOworCS8qIFBvaW50cyB0byBhIHByb2Zf dGN0eF90LiAqLworCWF0b21pY19wX3QJZV9wcm9mX3RjdHg7CisJLyoKKwkgKiBQb2ludHMgdG8g YSBwcm9mX3JlY2VudF90IGZvciB0aGUgYWxsb2NhdGlvbjsgTlVMTAorCSAqIG1lYW5zIHRoZSBy ZWNlbnQgYWxsb2NhdGlvbiByZWNvcmQgbm8gbG9uZ2VyIGV4aXN0cy4KKwkgKiBQcm90ZWN0ZWQg YnkgcHJvZl9yZWNlbnRfYWxsb2NfbXR4LgorCSAqLworCWF0b21pY19wX3QJZV9wcm9mX3JlY2Vu dF9hbGxvYzsKK307Cit0eXBlZGVmIHN0cnVjdCBlX3Byb2ZfaW5mb19zIGVfcHJvZl9pbmZvX3Q7 CisKKy8qCisgKiBUaGUgaW5mb3JtYXRpb24gYWJvdXQgYSBwYXJ0aWN1bGFyIGVkYXRhIHRoYXQg bGl2ZXMgaW4gYW4gZW1hcC4gIFNwYWNlIGlzCisgKiBtb3JlIHByZWNpb3VzIHRoZXJlICh0aGUg aW5mb3JtYXRpb24sIHBsdXMgdGhlIGVkYXRhIHBvaW50ZXIsIGhhcyB0byBsaXZlIGluCisgKiBh IDY0LWJpdCB3b3JkIGlmIHdlIHdhbnQgdG8gZW5hYmxlIGEgcGFja2VkIHJlcHJlc2VudGF0aW9u LgorICoKKyAqIFRoZXJlIGFyZSB0d28gdGhpbmdzIHRoYXQgYXJlIHNwZWNpYWwgYWJvdXQgdGhl IGluZm9ybWF0aW9uIGhlcmU6CisgKiAtIEl0J3MgcXVpY2tlciB0byBhY2Nlc3MuICBZb3UgaGF2 ZSBvbmUgZmV3ZXIgcG9pbnRlciBob3AsIHNpbmNlIGZpbmRpbmcgdGhlCisgKiAgIGVkYXRhX3Qg YXNzb2NpYXRlZCB3aXRoIGFuIGl0ZW0gYWx3YXlzIHJlcXVpcmVzIGFjY2Vzc2luZyB0aGUgcnRy ZWUgbGVhZiBpbgorICogICB3aGljaCB0aGlzIGRhdGEgaXMgc3RvcmVkLgorICogLSBJdCBjYW4g YmUgcmVhZCB1bnN5bmNocm9uaXplZCwgYW5kIHdpdGhvdXQgd29ycnlpbmcgYWJvdXQgbGlmZXRp bWUgaXNzdWVzLgorICovCit0eXBlZGVmIHN0cnVjdCBlZGF0YV9tYXBfaW5mb19zIGVkYXRhX21h cF9pbmZvX3Q7CitzdHJ1Y3QgZWRhdGFfbWFwX2luZm9fcyB7CisJYm9vbCBzbGFiOworCXN6aW5k X3Qgc3ppbmQ7Cit9OworCit0eXBlZGVmIHN0cnVjdCBlZGF0YV9jbXBfc3VtbWFyeV9zIGVkYXRh X2NtcF9zdW1tYXJ5X3Q7CitzdHJ1Y3QgZWRhdGFfY21wX3N1bW1hcnlfcyB7CisJdWludDY0X3Qg c247CisJdWludHB0cl90IGFkZHI7Cit9OworCisvKiBFeHRlbnQgKHNwYW4gb2YgcGFnZXMpLiAg VXNlIGFjY2Vzc29yIGZ1bmN0aW9ucyBmb3IgZV8qIGZpZWxkcy4gKi8KK3R5cGVkZWYgc3RydWN0 IGVkYXRhX3MgZWRhdGFfdDsKK3BoX3N0cnVjdHMoZWRhdGFfYXZhaWwsIGVkYXRhX3QpOworcGhf c3RydWN0cyhlZGF0YV9oZWFwLCBlZGF0YV90KTsKK3N0cnVjdCBlZGF0YV9zIHsKKwkvKgorCSAq IEJpdGZpZWxkIGNvbnRhaW5pbmcgc2V2ZXJhbCBmaWVsZHM6CisJICoKKwkgKiBhOiBhcmVuYV9p bmQKKwkgKiBiOiBzbGFiCisJICogYzogY29tbWl0dGVkCisJICogcDogcGFpCisJICogejogemVy b2VkCisJICogZzogZ3VhcmRlZAorCSAqIHQ6IHN0YXRlCisJICogaTogc3ppbmQKKwkgKiBmOiBu ZnJlZQorCSAqIHM6IGJpbl9zaGFyZAorCSAqCisJICogMDAwMDAwMDAgLi4uIDAwMDBzc3NzIHNz ZmZmZmZmIGZmZmZpaWlpIGlpaWl0dHRnIHpwY2JhYWFhIGFhYWFhYWFhCisJICoKKwkgKiBhcmVu YV9pbmQ6IEFyZW5hIGZyb20gd2hpY2ggdGhpcyBleHRlbnQgY2FtZSwgb3IgYWxsIDEgYml0cyBp ZgorCSAqICAgICAgICAgICAgdW5hc3NvY2lhdGVkLgorCSAqCisJICogc2xhYjogVGhlIHNsYWIg ZmxhZyBpbmRpY2F0ZXMgd2hldGhlciB0aGUgZXh0ZW50IGlzIHVzZWQgZm9yIGEgc2xhYgorCSAq ICAgICAgIG9mIHNtYWxsIHJlZ2lvbnMuICBUaGlzIGhlbHBzIGRpZmZlcmVudGlhdGUgc21hbGwg c2l6ZSBjbGFzc2VzLAorCSAqICAgICAgIGFuZCBpdCBpbmRpY2F0ZXMgd2hldGhlciBpbnRlcmlv ciBwb2ludGVycyBjYW4gYmUgbG9va2VkIHVwIHZpYQorCSAqICAgICAgIGllYWxsb2MoKS4KKwkg KgorCSAqIGNvbW1pdHRlZDogVGhlIGNvbW1pdHRlZCBmbGFnIGluZGljYXRlcyB3aGV0aGVyIHBo eXNpY2FsIG1lbW9yeSBpcworCSAqICAgICAgICAgICAgY29tbWl0dGVkIHRvIHRoZSBleHRlbnQs IHdoZXRoZXIgZXhwbGljaXRseSBvciBpbXBsaWNpdGx5CisJICogICAgICAgICAgICBhcyBvbiBh IHN5c3RlbSB0aGF0IG92ZXJjb21taXRzIGFuZCBzYXRpc2ZpZXMgcGh5c2ljYWwKKwkgKiAgICAg ICAgICAgIG1lbW9yeSBuZWVkcyBvbiBkZW1hbmQgdmlhIHNvZnQgcGFnZSBmYXVsdHMuCisJICoK KwkgKiBwYWk6IFRoZSBwYWkgZmxhZyBpcyBhbiBleHRlbnRfcGFpX3QuCisJICoKKwkgKiB6ZXJv ZWQ6IFRoZSB6ZXJvZWQgZmxhZyBpcyB1c2VkIGJ5IGV4dGVudCByZWN5Y2xpbmcgY29kZSB0byB0 cmFjaworCSAqICAgICAgICAgd2hldGhlciBtZW1vcnkgaXMgemVyby1maWxsZWQuCisJICoKKwkg KiBndWFyZGVkOiBUaGUgZ3VhcmRlZCBmbGFnIGlzIHVzZSBieSB0aGUgc2FuaXRpemVyIHRvIHRy YWNrIHdoZXRoZXIKKwkgKiAgICAgICAgICB0aGUgZXh0ZW50IGhhcyBwYWdlIGd1YXJkcyBhcm91 bmQgaXQuCisJICoKKwkgKiBzdGF0ZTogVGhlIHN0YXRlIGZsYWcgaXMgYW4gZXh0ZW50X3N0YXRl X3QuCisJICoKKwkgKiBzemluZDogVGhlIHN6aW5kIGZsYWcgaW5kaWNhdGVzIHVzYWJsZSBzaXpl IGNsYXNzIGluZGV4IGZvcgorCSAqICAgICAgICBhbGxvY2F0aW9ucyByZXNpZGluZyBpbiB0aGlz IGV4dGVudCwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZQorCSAqICAgICAgICBleHRlbnQgaXMg YSBzbGFiLiAgRXh0ZW50IHNpemUgYW5kIHVzYWJsZSBzaXplIG9mdGVuIGRpZmZlcgorCSAqICAg ICAgICBldmVuIGZvciBub24tc2xhYnMsIGVpdGhlciBkdWUgdG8gc3pfbGFyZ2VfcGFkIG9yIHBy b21vdGlvbiBvZgorCSAqICAgICAgICBzYW1wbGVkIHNtYWxsIHJlZ2lvbnMuCisJICoKKwkgKiBu ZnJlZTogTnVtYmVyIG9mIGZyZWUgcmVnaW9ucyBpbiBzbGFiLgorCSAqCisJICogYmluX3NoYXJk OiB0aGUgc2hhcmQgb2YgdGhlIGJpbiBmcm9tIHdoaWNoIHRoaXMgZXh0ZW50IGNhbWUuCisJICov CisJdWludDY0X3QJCWVfYml0czsKKyNkZWZpbmUgTUFTSyhDVVJSRU5UX0ZJRUxEX1dJRFRILCBD VVJSRU5UX0ZJRUxEX1NISUZUKSAoKCgoKCh1aW50NjRfdCkweDFVKSA8PCAoQ1VSUkVOVF9GSUVM RF9XSURUSCkpIC0gMSkpIDw8IChDVVJSRU5UX0ZJRUxEX1NISUZUKSkKKworI2RlZmluZSBFREFU QV9CSVRTX0FSRU5BX1dJRFRIICBNQUxMT0NYX0FSRU5BX0JJVFMKKyNkZWZpbmUgRURBVEFfQklU U19BUkVOQV9TSElGVCAgMAorI2RlZmluZSBFREFUQV9CSVRTX0FSRU5BX01BU0sgIE1BU0soRURB VEFfQklUU19BUkVOQV9XSURUSCwgRURBVEFfQklUU19BUkVOQV9TSElGVCkKKworI2RlZmluZSBF REFUQV9CSVRTX1NMQUJfV0lEVEggIDEKKyNkZWZpbmUgRURBVEFfQklUU19TTEFCX1NISUZUICAo RURBVEFfQklUU19BUkVOQV9XSURUSCArIEVEQVRBX0JJVFNfQVJFTkFfU0hJRlQpCisjZGVmaW5l IEVEQVRBX0JJVFNfU0xBQl9NQVNLICBNQVNLKEVEQVRBX0JJVFNfU0xBQl9XSURUSCwgRURBVEFf QklUU19TTEFCX1NISUZUKQorCisjZGVmaW5lIEVEQVRBX0JJVFNfQ09NTUlUVEVEX1dJRFRIICAx CisjZGVmaW5lIEVEQVRBX0JJVFNfQ09NTUlUVEVEX1NISUZUICAoRURBVEFfQklUU19TTEFCX1dJ RFRIICsgRURBVEFfQklUU19TTEFCX1NISUZUKQorI2RlZmluZSBFREFUQV9CSVRTX0NPTU1JVFRF RF9NQVNLICBNQVNLKEVEQVRBX0JJVFNfQ09NTUlUVEVEX1dJRFRILCBFREFUQV9CSVRTX0NPTU1J VFRFRF9TSElGVCkKKworI2RlZmluZSBFREFUQV9CSVRTX1BBSV9XSURUSCAgMQorI2RlZmluZSBF REFUQV9CSVRTX1BBSV9TSElGVCAgKEVEQVRBX0JJVFNfQ09NTUlUVEVEX1dJRFRIICsgRURBVEFf QklUU19DT01NSVRURURfU0hJRlQpCisjZGVmaW5lIEVEQVRBX0JJVFNfUEFJX01BU0sgIE1BU0so RURBVEFfQklUU19QQUlfV0lEVEgsIEVEQVRBX0JJVFNfUEFJX1NISUZUKQorCisjZGVmaW5lIEVE QVRBX0JJVFNfWkVST0VEX1dJRFRIICAxCisjZGVmaW5lIEVEQVRBX0JJVFNfWkVST0VEX1NISUZU ICAoRURBVEFfQklUU19QQUlfV0lEVEggKyBFREFUQV9CSVRTX1BBSV9TSElGVCkKKyNkZWZpbmUg RURBVEFfQklUU19aRVJPRURfTUFTSyAgTUFTSyhFREFUQV9CSVRTX1pFUk9FRF9XSURUSCwgRURB VEFfQklUU19aRVJPRURfU0hJRlQpCisKKyNkZWZpbmUgRURBVEFfQklUU19HVUFSREVEX1dJRFRI ICAxCisjZGVmaW5lIEVEQVRBX0JJVFNfR1VBUkRFRF9TSElGVCAgKEVEQVRBX0JJVFNfWkVST0VE X1dJRFRIICsgRURBVEFfQklUU19aRVJPRURfU0hJRlQpCisjZGVmaW5lIEVEQVRBX0JJVFNfR1VB UkRFRF9NQVNLICBNQVNLKEVEQVRBX0JJVFNfR1VBUkRFRF9XSURUSCwgRURBVEFfQklUU19HVUFS REVEX1NISUZUKQorCisjZGVmaW5lIEVEQVRBX0JJVFNfU1RBVEVfV0lEVEggIDMKKyNkZWZpbmUg RURBVEFfQklUU19TVEFURV9TSElGVCAgKEVEQVRBX0JJVFNfR1VBUkRFRF9XSURUSCArIEVEQVRB X0JJVFNfR1VBUkRFRF9TSElGVCkKKyNkZWZpbmUgRURBVEFfQklUU19TVEFURV9NQVNLICBNQVNL KEVEQVRBX0JJVFNfU1RBVEVfV0lEVEgsIEVEQVRBX0JJVFNfU1RBVEVfU0hJRlQpCisKKyNkZWZp bmUgRURBVEFfQklUU19TWklORF9XSURUSCAgTEdfQ0VJTChTQ19OU0laRVMpCisjZGVmaW5lIEVE QVRBX0JJVFNfU1pJTkRfU0hJRlQgIChFREFUQV9CSVRTX1NUQVRFX1dJRFRIICsgRURBVEFfQklU U19TVEFURV9TSElGVCkKKyNkZWZpbmUgRURBVEFfQklUU19TWklORF9NQVNLICBNQVNLKEVEQVRB X0JJVFNfU1pJTkRfV0lEVEgsIEVEQVRBX0JJVFNfU1pJTkRfU0hJRlQpCisKKyNkZWZpbmUgRURB VEFfQklUU19ORlJFRV9XSURUSCAgKFNDX0xHX1NMQUJfTUFYUkVHUyArIDEpCisjZGVmaW5lIEVE QVRBX0JJVFNfTkZSRUVfU0hJRlQgIChFREFUQV9CSVRTX1NaSU5EX1dJRFRIICsgRURBVEFfQklU U19TWklORF9TSElGVCkKKyNkZWZpbmUgRURBVEFfQklUU19ORlJFRV9NQVNLICBNQVNLKEVEQVRB X0JJVFNfTkZSRUVfV0lEVEgsIEVEQVRBX0JJVFNfTkZSRUVfU0hJRlQpCisKKyNkZWZpbmUgRURB VEFfQklUU19CSU5TSEFSRF9XSURUSCAgNgorI2RlZmluZSBFREFUQV9CSVRTX0JJTlNIQVJEX1NI SUZUICAoRURBVEFfQklUU19ORlJFRV9XSURUSCArIEVEQVRBX0JJVFNfTkZSRUVfU0hJRlQpCisj ZGVmaW5lIEVEQVRBX0JJVFNfQklOU0hBUkRfTUFTSyAgTUFTSyhFREFUQV9CSVRTX0JJTlNIQVJE X1dJRFRILCBFREFUQV9CSVRTX0JJTlNIQVJEX1NISUZUKQorCisjZGVmaW5lIEVEQVRBX0JJVFNf SVNfSEVBRF9XSURUSCAxCisjZGVmaW5lIEVEQVRBX0JJVFNfSVNfSEVBRF9TSElGVCAgKEVEQVRB X0JJVFNfQklOU0hBUkRfV0lEVEggKyBFREFUQV9CSVRTX0JJTlNIQVJEX1NISUZUKQorI2RlZmlu ZSBFREFUQV9CSVRTX0lTX0hFQURfTUFTSyAgTUFTSyhFREFUQV9CSVRTX0lTX0hFQURfV0lEVEgs IEVEQVRBX0JJVFNfSVNfSEVBRF9TSElGVCkKKworCS8qIFBvaW50ZXIgdG8gdGhlIGV4dGVudCB0 aGF0IHRoaXMgc3RydWN0dXJlIGlzIHJlc3BvbnNpYmxlIGZvci4gKi8KKwl2b2lkCQkJKmVfYWRk cjsKKworCXVuaW9uIHsKKwkJLyoKKwkJICogRXh0ZW50IHNpemUgYW5kIHNlcmlhbCBudW1iZXIg YXNzb2NpYXRlZCB3aXRoIHRoZSBleHRlbnQKKwkJICogc3RydWN0dXJlIChkaWZmZXJlbnQgdGhh biB0aGUgc2VyaWFsIG51bWJlciBmb3IgdGhlIGV4dGVudCBhdAorCQkgKiBlX2FkZHIpLgorCQkg KgorCQkgKiBzc3Nzc3NzcyBbLi4uXSBzc3Nzc3NzcyBzc3Nzbm5ubiBubm5ubm5ubgorCQkgKi8K KwkJc2l6ZV90CQkJZV9zaXplX2VzbjsKKwkjZGVmaW5lIEVEQVRBX1NJWkVfTUFTSwkoKHNpemVf dCl+KFBBR0UtMSkpCisJI2RlZmluZSBFREFUQV9FU05fTUFTSwkJKChzaXplX3QpUEFHRS0xKQor CQkvKiBCYXNlIGV4dGVudCBzaXplLCB3aGljaCBtYXkgbm90IGJlIGEgbXVsdGlwbGUgb2YgUEFH RS4gKi8KKwkJc2l6ZV90CQkJZV9ic2l6ZTsKKwl9OworCisJLyoKKwkgKiBJZiB0aGlzIGVkYXRh IGlzIGEgdXNlciBhbGxvY2F0aW9uIGZyb20gYW4gSFBBLCBpdCBjb21lcyBvdXQgb2Ygc29tZQor CSAqIHBhZ2VzbGFiICh3ZSBkb24ndCB5ZXQgc3VwcG9ydCBodWVncGFnZSBhbGxvY2F0aW9ucyB0 aGF0IGRvbid0IGZpdAorCSAqIGludG8gcGFnZXNsYWJzKS4gIFRoaXMgdHJhY2tzIGl0LgorCSAq LworCWhwZGF0YV90ICplX3BzOworCisJLyoKKwkgKiBTZXJpYWwgbnVtYmVyLiAgVGhlc2UgYXJl IG5vdCBuZWNlc3NhcmlseSB1bmlxdWU7IHNwbGl0dGluZyBhbiBleHRlbnQKKwkgKiByZXN1bHRz IGluIHR3byBleHRlbnRzIHdpdGggdGhlIHNhbWUgc2VyaWFsIG51bWJlci4KKwkgKi8KKwl1aW50 NjRfdCBlX3NuOworCisJdW5pb24geworCQkvKgorCQkgKiBMaXN0IGxpbmthZ2UgdXNlZCB3aGVu IHRoZSBlZGF0YV90IGlzIGFjdGl2ZTsgZWl0aGVyIGluCisJCSAqIGFyZW5hJ3MgbGFyZ2UgYWxs b2NhdGlvbnMgb3IgYmluX3QncyBzbGFic19mdWxsLgorCQkgKi8KKwkJcWxfZWxtKGVkYXRhX3Qp CXFsX2xpbmtfYWN0aXZlOworCQkvKgorCQkgKiBQYWlyaW5nIGhlYXAgbGlua2FnZS4gIFVzZWQg d2hlbmV2ZXIgdGhlIGV4dGVudCBpcyBpbmFjdGl2ZQorCQkgKiAoaW4gdGhlIHBhZ2UgYWxsb2Nh dG9ycyksIG9yIHdoZW4gaXQgaXMgYWN0aXZlIGFuZCBpbgorCQkgKiBzbGFic19ub25mdWxsLCBv ciB3aGVuIHRoZSBlZGF0YV90IGlzIHVuYXNzb2NpYXRlZCB3aXRoIGFuCisJCSAqIGV4dGVudCBh bmQgc2l0dGluZyBpbiBhbiBlZGF0YV9jYWNoZS4KKwkJICovCisJCXVuaW9uIHsKKwkJCWVkYXRh X2hlYXBfbGlua190IGhlYXBfbGluazsKKwkJCWVkYXRhX2F2YWlsX2xpbmtfdCBhdmFpbF9saW5r OworCQl9OworCX07CisKKwl1bmlvbiB7CisJCS8qCisJCSAqIExpc3QgbGlua2FnZSB1c2VkIHdo ZW4gdGhlIGV4dGVudCBpcyBpbmFjdGl2ZToKKwkJICogLSBTdGFzaGVkIGRpcnR5IGV4dGVudHMK KwkJICogLSBFY2FjaGUgTFJVIGZ1bmN0aW9uYWxpdHkuCisJCSAqLworCQlxbF9lbG0oZWRhdGFf dCkgcWxfbGlua19pbmFjdGl2ZTsKKwkJLyogU21hbGwgcmVnaW9uIHNsYWIgbWV0YWRhdGEuICov CisJCXNsYWJfZGF0YV90CWVfc2xhYl9kYXRhOworCisJCS8qIFByb2ZpbGluZyBkYXRhLCB1c2Vk IGZvciBsYXJnZSBvYmplY3RzLiAqLworCQllX3Byb2ZfaW5mb190CWVfcHJvZl9pbmZvOworCX07 Cit9OworCitUWVBFRF9MSVNUKGVkYXRhX2xpc3RfYWN0aXZlLCBlZGF0YV90LCBxbF9saW5rX2Fj dGl2ZSkKK1RZUEVEX0xJU1QoZWRhdGFfbGlzdF9pbmFjdGl2ZSwgZWRhdGFfdCwgcWxfbGlua19p bmFjdGl2ZSkKKworc3RhdGljIGlubGluZSB1bnNpZ25lZAorZWRhdGFfYXJlbmFfaW5kX2dldChj b25zdCBlZGF0YV90ICplZGF0YSkgeworCXVuc2lnbmVkIGFyZW5hX2luZCA9ICh1bnNpZ25lZCko KGVkYXRhLT5lX2JpdHMgJgorCSAgICBFREFUQV9CSVRTX0FSRU5BX01BU0spID4+IEVEQVRBX0JJ VFNfQVJFTkFfU0hJRlQpOworCWFzc2VydChhcmVuYV9pbmQgPCBNQUxMT0NYX0FSRU5BX0xJTUlU KTsKKworCXJldHVybiBhcmVuYV9pbmQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3ppbmRfdAorZWRh dGFfc3ppbmRfZ2V0X21heWJlX2ludmFsaWQoY29uc3QgZWRhdGFfdCAqZWRhdGEpIHsKKwlzemlu ZF90IHN6aW5kID0gKHN6aW5kX3QpKChlZGF0YS0+ZV9iaXRzICYgRURBVEFfQklUU19TWklORF9N QVNLKSA+PgorCSAgICBFREFUQV9CSVRTX1NaSU5EX1NISUZUKTsKKwlhc3NlcnQoc3ppbmQgPD0g U0NfTlNJWkVTKTsKKwlyZXR1cm4gc3ppbmQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3ppbmRfdAor ZWRhdGFfc3ppbmRfZ2V0KGNvbnN0IGVkYXRhX3QgKmVkYXRhKSB7CisJc3ppbmRfdCBzemluZCA9 IGVkYXRhX3N6aW5kX2dldF9tYXliZV9pbnZhbGlkKGVkYXRhKTsKKwlhc3NlcnQoc3ppbmQgPCBT Q19OU0laRVMpOyAvKiBOZXZlciBjYWxsIHdoZW4gImludmFsaWQiLiAqLworCXJldHVybiBzemlu ZDsKK30KKworc3RhdGljIGlubGluZSBzaXplX3QKK2VkYXRhX3VzaXplX2dldChjb25zdCBlZGF0 YV90ICplZGF0YSkgeworCXJldHVybiBzel9pbmRleDJzaXplKGVkYXRhX3N6aW5kX2dldChlZGF0 YSkpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkCitlZGF0YV9iaW5zaGFyZF9nZXQoY29u c3QgZWRhdGFfdCAqZWRhdGEpIHsKKwl1bnNpZ25lZCBiaW5zaGFyZCA9ICh1bnNpZ25lZCkoKGVk YXRhLT5lX2JpdHMgJgorCSAgICBFREFUQV9CSVRTX0JJTlNIQVJEX01BU0spID4+IEVEQVRBX0JJ VFNfQklOU0hBUkRfU0hJRlQpOworCWFzc2VydChiaW5zaGFyZCA8IGJpbl9pbmZvc1tlZGF0YV9z emluZF9nZXQoZWRhdGEpXS5uX3NoYXJkcyk7CisJcmV0dXJuIGJpbnNoYXJkOworfQorCitzdGF0 aWMgaW5saW5lIHVpbnQ2NF90CitlZGF0YV9zbl9nZXQoY29uc3QgZWRhdGFfdCAqZWRhdGEpIHsK KwlyZXR1cm4gZWRhdGEtPmVfc247Cit9CisKK3N0YXRpYyBpbmxpbmUgZXh0ZW50X3N0YXRlX3QK K2VkYXRhX3N0YXRlX2dldChjb25zdCBlZGF0YV90ICplZGF0YSkgeworCXJldHVybiAoZXh0ZW50 X3N0YXRlX3QpKChlZGF0YS0+ZV9iaXRzICYgRURBVEFfQklUU19TVEFURV9NQVNLKSA+PgorCSAg ICBFREFUQV9CSVRTX1NUQVRFX1NISUZUKTsKK30KKworc3RhdGljIGlubGluZSBib29sCitlZGF0 YV9ndWFyZGVkX2dldChjb25zdCBlZGF0YV90ICplZGF0YSkgeworCXJldHVybiAoYm9vbCkoKGVk YXRhLT5lX2JpdHMgJiBFREFUQV9CSVRTX0dVQVJERURfTUFTSykgPj4KKwkgICAgRURBVEFfQklU U19HVUFSREVEX1NISUZUKTsKK30KKworc3RhdGljIGlubGluZSBib29sCitlZGF0YV96ZXJvZWRf Z2V0KGNvbnN0IGVkYXRhX3QgKmVkYXRhKSB7CisJcmV0dXJuIChib29sKSgoZWRhdGEtPmVfYml0 cyAmIEVEQVRBX0JJVFNfWkVST0VEX01BU0spID4+CisJICAgIEVEQVRBX0JJVFNfWkVST0VEX1NI SUZUKTsKK30KKworc3RhdGljIGlubGluZSBib29sCitlZGF0YV9jb21taXR0ZWRfZ2V0KGNvbnN0 IGVkYXRhX3QgKmVkYXRhKSB7CisJcmV0dXJuIChib29sKSgoZWRhdGEtPmVfYml0cyAmIEVEQVRB X0JJVFNfQ09NTUlUVEVEX01BU0spID4+CisJICAgIEVEQVRBX0JJVFNfQ09NTUlUVEVEX1NISUZU KTsKK30KKworc3RhdGljIGlubGluZSBleHRlbnRfcGFpX3QKK2VkYXRhX3BhaV9nZXQoY29uc3Qg ZWRhdGFfdCAqZWRhdGEpIHsKKwlyZXR1cm4gKGV4dGVudF9wYWlfdCkoKGVkYXRhLT5lX2JpdHMg JiBFREFUQV9CSVRTX1BBSV9NQVNLKSA+PgorCSAgICBFREFUQV9CSVRTX1BBSV9TSElGVCk7Cit9 CisKK3N0YXRpYyBpbmxpbmUgYm9vbAorZWRhdGFfc2xhYl9nZXQoY29uc3QgZWRhdGFfdCAqZWRh dGEpIHsKKwlyZXR1cm4gKGJvb2wpKChlZGF0YS0+ZV9iaXRzICYgRURBVEFfQklUU19TTEFCX01B U0spID4+CisJICAgIEVEQVRBX0JJVFNfU0xBQl9TSElGVCk7Cit9CisKK3N0YXRpYyBpbmxpbmUg dW5zaWduZWQKK2VkYXRhX25mcmVlX2dldChjb25zdCBlZGF0YV90ICplZGF0YSkgeworCWFzc2Vy dChlZGF0YV9zbGFiX2dldChlZGF0YSkpOworCXJldHVybiAodW5zaWduZWQpKChlZGF0YS0+ZV9i aXRzICYgRURBVEFfQklUU19ORlJFRV9NQVNLKSA+PgorCSAgICBFREFUQV9CSVRTX05GUkVFX1NI SUZUKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkICoKK2VkYXRhX2Jhc2VfZ2V0KGNvbnN0IGVk YXRhX3QgKmVkYXRhKSB7CisJYXNzZXJ0KGVkYXRhLT5lX2FkZHIgPT0gUEFHRV9BRERSMkJBU0Uo ZWRhdGEtPmVfYWRkcikgfHwKKwkgICAgIWVkYXRhX3NsYWJfZ2V0KGVkYXRhKSk7CisJcmV0dXJu IFBBR0VfQUREUjJCQVNFKGVkYXRhLT5lX2FkZHIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQg KgorZWRhdGFfYWRkcl9nZXQoY29uc3QgZWRhdGFfdCAqZWRhdGEpIHsKKwlhc3NlcnQoZWRhdGEt PmVfYWRkciA9PSBQQUdFX0FERFIyQkFTRShlZGF0YS0+ZV9hZGRyKSB8fAorCSAgICAhZWRhdGFf c2xhYl9nZXQoZWRhdGEpKTsKKwlyZXR1cm4gZWRhdGEtPmVfYWRkcjsKK30KKworc3RhdGljIGlu bGluZSBzaXplX3QKK2VkYXRhX3NpemVfZ2V0KGNvbnN0IGVkYXRhX3QgKmVkYXRhKSB7CisJcmV0 dXJuIChlZGF0YS0+ZV9zaXplX2VzbiAmIEVEQVRBX1NJWkVfTUFTSyk7Cit9CisKK3N0YXRpYyBp bmxpbmUgc2l6ZV90CitlZGF0YV9lc25fZ2V0KGNvbnN0IGVkYXRhX3QgKmVkYXRhKSB7CisJcmV0 dXJuIChlZGF0YS0+ZV9zaXplX2VzbiAmIEVEQVRBX0VTTl9NQVNLKTsKK30KKworc3RhdGljIGlu bGluZSBzaXplX3QKK2VkYXRhX2JzaXplX2dldChjb25zdCBlZGF0YV90ICplZGF0YSkgeworCXJl dHVybiBlZGF0YS0+ZV9ic2l6ZTsKK30KKworc3RhdGljIGlubGluZSBocGRhdGFfdCAqCitlZGF0 YV9wc19nZXQoY29uc3QgZWRhdGFfdCAqZWRhdGEpIHsKKwlhc3NlcnQoZWRhdGFfcGFpX2dldChl ZGF0YSkgPT0gRVhURU5UX1BBSV9IUEEpOworCXJldHVybiBlZGF0YS0+ZV9wczsKK30KKworc3Rh dGljIGlubGluZSB2b2lkICoKK2VkYXRhX2JlZm9yZV9nZXQoY29uc3QgZWRhdGFfdCAqZWRhdGEp IHsKKwlyZXR1cm4gKHZvaWQgKikoKHVpbnRwdHJfdCllZGF0YV9iYXNlX2dldChlZGF0YSkgLSBQ QUdFKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkICoKK2VkYXRhX2xhc3RfZ2V0KGNvbnN0IGVk YXRhX3QgKmVkYXRhKSB7CisJcmV0dXJuICh2b2lkICopKCh1aW50cHRyX3QpZWRhdGFfYmFzZV9n ZXQoZWRhdGEpICsKKwkgICAgZWRhdGFfc2l6ZV9nZXQoZWRhdGEpIC0gUEFHRSk7Cit9CisKK3N0 YXRpYyBpbmxpbmUgdm9pZCAqCitlZGF0YV9wYXN0X2dldChjb25zdCBlZGF0YV90ICplZGF0YSkg eworCXJldHVybiAodm9pZCAqKSgodWludHB0cl90KWVkYXRhX2Jhc2VfZ2V0KGVkYXRhKSArCisJ ICAgIGVkYXRhX3NpemVfZ2V0KGVkYXRhKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc2xhYl9kYXRh X3QgKgorZWRhdGFfc2xhYl9kYXRhX2dldChlZGF0YV90ICplZGF0YSkgeworCWFzc2VydChlZGF0 YV9zbGFiX2dldChlZGF0YSkpOworCXJldHVybiAmZWRhdGEtPmVfc2xhYl9kYXRhOworfQorCitz dGF0aWMgaW5saW5lIGNvbnN0IHNsYWJfZGF0YV90ICoKK2VkYXRhX3NsYWJfZGF0YV9nZXRfY29u c3QoY29uc3QgZWRhdGFfdCAqZWRhdGEpIHsKKwlhc3NlcnQoZWRhdGFfc2xhYl9nZXQoZWRhdGEp KTsKKwlyZXR1cm4gJmVkYXRhLT5lX3NsYWJfZGF0YTsKK30KKworc3RhdGljIGlubGluZSBwcm9m X3RjdHhfdCAqCitlZGF0YV9wcm9mX3RjdHhfZ2V0KGNvbnN0IGVkYXRhX3QgKmVkYXRhKSB7CisJ cmV0dXJuIChwcm9mX3RjdHhfdCAqKWF0b21pY19sb2FkX3AoJmVkYXRhLT5lX3Byb2ZfaW5mby5l X3Byb2ZfdGN0eCwKKwkgICAgQVRPTUlDX0FDUVVJUkUpOworfQorCitzdGF0aWMgaW5saW5lIGNv bnN0IG5zdGltZV90ICoKK2VkYXRhX3Byb2ZfYWxsb2NfdGltZV9nZXQoY29uc3QgZWRhdGFfdCAq ZWRhdGEpIHsKKwlyZXR1cm4gJmVkYXRhLT5lX3Byb2ZfaW5mby5lX3Byb2ZfYWxsb2NfdGltZTsK K30KKworc3RhdGljIGlubGluZSBzaXplX3QKK2VkYXRhX3Byb2ZfYWxsb2Nfc2l6ZV9nZXQoY29u c3QgZWRhdGFfdCAqZWRhdGEpIHsKKwlyZXR1cm4gZWRhdGEtPmVfcHJvZl9pbmZvLmVfcHJvZl9h bGxvY19zaXplOworfQorCitzdGF0aWMgaW5saW5lIHByb2ZfcmVjZW50X3QgKgorZWRhdGFfcHJv Zl9yZWNlbnRfYWxsb2NfZ2V0X2RvbnRfY2FsbF9kaXJlY3RseShjb25zdCBlZGF0YV90ICplZGF0 YSkgeworCXJldHVybiAocHJvZl9yZWNlbnRfdCAqKWF0b21pY19sb2FkX3AoCisJICAgICZlZGF0 YS0+ZV9wcm9mX2luZm8uZV9wcm9mX3JlY2VudF9hbGxvYywgQVRPTUlDX1JFTEFYRUQpOworfQor CitzdGF0aWMgaW5saW5lIHZvaWQKK2VkYXRhX2FyZW5hX2luZF9zZXQoZWRhdGFfdCAqZWRhdGEs IHVuc2lnbmVkIGFyZW5hX2luZCkgeworCWVkYXRhLT5lX2JpdHMgPSAoZWRhdGEtPmVfYml0cyAm IH5FREFUQV9CSVRTX0FSRU5BX01BU0spIHwKKwkgICAgKCh1aW50NjRfdClhcmVuYV9pbmQgPDwg RURBVEFfQklUU19BUkVOQV9TSElGVCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZWRhdGFf Ymluc2hhcmRfc2V0KGVkYXRhX3QgKmVkYXRhLCB1bnNpZ25lZCBiaW5zaGFyZCkgeworCS8qIFRo ZSBhc3NlcnRpb24gYXNzdW1lcyBzemluZCBpcyBzZXQgYWxyZWFkeS4gKi8KKwlhc3NlcnQoYmlu c2hhcmQgPCBiaW5faW5mb3NbZWRhdGFfc3ppbmRfZ2V0KGVkYXRhKV0ubl9zaGFyZHMpOworCWVk YXRhLT5lX2JpdHMgPSAoZWRhdGEtPmVfYml0cyAmIH5FREFUQV9CSVRTX0JJTlNIQVJEX01BU0sp IHwKKwkgICAgKCh1aW50NjRfdCliaW5zaGFyZCA8PCBFREFUQV9CSVRTX0JJTlNIQVJEX1NISUZU KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitlZGF0YV9hZGRyX3NldChlZGF0YV90ICplZGF0 YSwgdm9pZCAqYWRkcikgeworCWVkYXRhLT5lX2FkZHIgPSBhZGRyOworfQorCitzdGF0aWMgaW5s aW5lIHZvaWQKK2VkYXRhX3NpemVfc2V0KGVkYXRhX3QgKmVkYXRhLCBzaXplX3Qgc2l6ZSkgewor CWFzc2VydCgoc2l6ZSAmIH5FREFUQV9TSVpFX01BU0spID09IDApOworCWVkYXRhLT5lX3NpemVf ZXNuID0gc2l6ZSB8IChlZGF0YS0+ZV9zaXplX2VzbiAmIH5FREFUQV9TSVpFX01BU0spOworfQor CitzdGF0aWMgaW5saW5lIHZvaWQKK2VkYXRhX2Vzbl9zZXQoZWRhdGFfdCAqZWRhdGEsIHNpemVf dCBlc24pIHsKKwllZGF0YS0+ZV9zaXplX2VzbiA9IChlZGF0YS0+ZV9zaXplX2VzbiAmIH5FREFU QV9FU05fTUFTSykgfCAoZXNuICYKKwkgICAgRURBVEFfRVNOX01BU0spOworfQorCitzdGF0aWMg aW5saW5lIHZvaWQKK2VkYXRhX2JzaXplX3NldChlZGF0YV90ICplZGF0YSwgc2l6ZV90IGJzaXpl KSB7CisJZWRhdGEtPmVfYnNpemUgPSBic2l6ZTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitl ZGF0YV9wc19zZXQoZWRhdGFfdCAqZWRhdGEsIGhwZGF0YV90ICpwcykgeworCWFzc2VydChlZGF0 YV9wYWlfZ2V0KGVkYXRhKSA9PSBFWFRFTlRfUEFJX0hQQSk7CisJZWRhdGEtPmVfcHMgPSBwczsK K30KKworc3RhdGljIGlubGluZSB2b2lkCitlZGF0YV9zemluZF9zZXQoZWRhdGFfdCAqZWRhdGEs IHN6aW5kX3Qgc3ppbmQpIHsKKwlhc3NlcnQoc3ppbmQgPD0gU0NfTlNJWkVTKTsgLyogU0NfTlNJ WkVTIG1lYW5zICJpbnZhbGlkIi4gKi8KKwllZGF0YS0+ZV9iaXRzID0gKGVkYXRhLT5lX2JpdHMg JiB+RURBVEFfQklUU19TWklORF9NQVNLKSB8CisJICAgICgodWludDY0X3Qpc3ppbmQgPDwgRURB VEFfQklUU19TWklORF9TSElGVCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZWRhdGFfbmZy ZWVfc2V0KGVkYXRhX3QgKmVkYXRhLCB1bnNpZ25lZCBuZnJlZSkgeworCWFzc2VydChlZGF0YV9z bGFiX2dldChlZGF0YSkpOworCWVkYXRhLT5lX2JpdHMgPSAoZWRhdGEtPmVfYml0cyAmIH5FREFU QV9CSVRTX05GUkVFX01BU0spIHwKKwkgICAgKCh1aW50NjRfdCluZnJlZSA8PCBFREFUQV9CSVRT X05GUkVFX1NISUZUKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitlZGF0YV9uZnJlZV9iaW5z aGFyZF9zZXQoZWRhdGFfdCAqZWRhdGEsIHVuc2lnbmVkIG5mcmVlLCB1bnNpZ25lZCBiaW5zaGFy ZCkgeworCS8qIFRoZSBhc3NlcnRpb24gYXNzdW1lcyBzemluZCBpcyBzZXQgYWxyZWFkeS4gKi8K Kwlhc3NlcnQoYmluc2hhcmQgPCBiaW5faW5mb3NbZWRhdGFfc3ppbmRfZ2V0KGVkYXRhKV0ubl9z aGFyZHMpOworCWVkYXRhLT5lX2JpdHMgPSAoZWRhdGEtPmVfYml0cyAmCisJICAgICh+RURBVEFf QklUU19ORlJFRV9NQVNLICYgfkVEQVRBX0JJVFNfQklOU0hBUkRfTUFTSykpIHwKKwkgICAgKCh1 aW50NjRfdCliaW5zaGFyZCA8PCBFREFUQV9CSVRTX0JJTlNIQVJEX1NISUZUKSB8CisJICAgICgo dWludDY0X3QpbmZyZWUgPDwgRURBVEFfQklUU19ORlJFRV9TSElGVCk7Cit9CisKK3N0YXRpYyBp bmxpbmUgdm9pZAorZWRhdGFfbmZyZWVfaW5jKGVkYXRhX3QgKmVkYXRhKSB7CisJYXNzZXJ0KGVk YXRhX3NsYWJfZ2V0KGVkYXRhKSk7CisJZWRhdGEtPmVfYml0cyArPSAoKHVpbnQ2NF90KTFVIDw8 IEVEQVRBX0JJVFNfTkZSRUVfU0hJRlQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2VkYXRh X25mcmVlX2RlYyhlZGF0YV90ICplZGF0YSkgeworCWFzc2VydChlZGF0YV9zbGFiX2dldChlZGF0 YSkpOworCWVkYXRhLT5lX2JpdHMgLT0gKCh1aW50NjRfdCkxVSA8PCBFREFUQV9CSVRTX05GUkVF X1NISUZUKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitlZGF0YV9uZnJlZV9zdWIoZWRhdGFf dCAqZWRhdGEsIHVpbnQ2NF90IG4pIHsKKwlhc3NlcnQoZWRhdGFfc2xhYl9nZXQoZWRhdGEpKTsK KwllZGF0YS0+ZV9iaXRzIC09IChuIDw8IEVEQVRBX0JJVFNfTkZSRUVfU0hJRlQpOworfQorCitz dGF0aWMgaW5saW5lIHZvaWQKK2VkYXRhX3NuX3NldChlZGF0YV90ICplZGF0YSwgdWludDY0X3Qg c24pIHsKKwllZGF0YS0+ZV9zbiA9IHNuOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2VkYXRh X3N0YXRlX3NldChlZGF0YV90ICplZGF0YSwgZXh0ZW50X3N0YXRlX3Qgc3RhdGUpIHsKKwllZGF0 YS0+ZV9iaXRzID0gKGVkYXRhLT5lX2JpdHMgJiB+RURBVEFfQklUU19TVEFURV9NQVNLKSB8CisJ ICAgICgodWludDY0X3Qpc3RhdGUgPDwgRURBVEFfQklUU19TVEFURV9TSElGVCk7Cit9CisKK3N0 YXRpYyBpbmxpbmUgdm9pZAorZWRhdGFfZ3VhcmRlZF9zZXQoZWRhdGFfdCAqZWRhdGEsIGJvb2wg Z3VhcmRlZCkgeworCWVkYXRhLT5lX2JpdHMgPSAoZWRhdGEtPmVfYml0cyAmIH5FREFUQV9CSVRT X0dVQVJERURfTUFTSykgfAorCSAgICAoKHVpbnQ2NF90KWd1YXJkZWQgPDwgRURBVEFfQklUU19H VUFSREVEX1NISUZUKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitlZGF0YV96ZXJvZWRfc2V0 KGVkYXRhX3QgKmVkYXRhLCBib29sIHplcm9lZCkgeworCWVkYXRhLT5lX2JpdHMgPSAoZWRhdGEt PmVfYml0cyAmIH5FREFUQV9CSVRTX1pFUk9FRF9NQVNLKSB8CisJICAgICgodWludDY0X3QpemVy b2VkIDw8IEVEQVRBX0JJVFNfWkVST0VEX1NISUZUKTsKK30KKworc3RhdGljIGlubGluZSB2b2lk CitlZGF0YV9jb21taXR0ZWRfc2V0KGVkYXRhX3QgKmVkYXRhLCBib29sIGNvbW1pdHRlZCkgewor CWVkYXRhLT5lX2JpdHMgPSAoZWRhdGEtPmVfYml0cyAmIH5FREFUQV9CSVRTX0NPTU1JVFRFRF9N QVNLKSB8CisJICAgICgodWludDY0X3QpY29tbWl0dGVkIDw8IEVEQVRBX0JJVFNfQ09NTUlUVEVE X1NISUZUKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitlZGF0YV9wYWlfc2V0KGVkYXRhX3Qg KmVkYXRhLCBleHRlbnRfcGFpX3QgcGFpKSB7CisJZWRhdGEtPmVfYml0cyA9IChlZGF0YS0+ZV9i aXRzICYgfkVEQVRBX0JJVFNfUEFJX01BU0spIHwKKwkgICAgKCh1aW50NjRfdClwYWkgPDwgRURB VEFfQklUU19QQUlfU0hJRlQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2VkYXRhX3NsYWJf c2V0KGVkYXRhX3QgKmVkYXRhLCBib29sIHNsYWIpIHsKKwllZGF0YS0+ZV9iaXRzID0gKGVkYXRh LT5lX2JpdHMgJiB+RURBVEFfQklUU19TTEFCX01BU0spIHwKKwkgICAgKCh1aW50NjRfdClzbGFi IDw8IEVEQVRBX0JJVFNfU0xBQl9TSElGVCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZWRh dGFfcHJvZl90Y3R4X3NldChlZGF0YV90ICplZGF0YSwgcHJvZl90Y3R4X3QgKnRjdHgpIHsKKwlh dG9taWNfc3RvcmVfcCgmZWRhdGEtPmVfcHJvZl9pbmZvLmVfcHJvZl90Y3R4LCB0Y3R4LCBBVE9N SUNfUkVMRUFTRSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZWRhdGFfcHJvZl9hbGxvY190 aW1lX3NldChlZGF0YV90ICplZGF0YSwgbnN0aW1lX3QgKnQpIHsKKwluc3RpbWVfY29weSgmZWRh dGEtPmVfcHJvZl9pbmZvLmVfcHJvZl9hbGxvY190aW1lLCB0KTsKK30KKworc3RhdGljIGlubGlu ZSB2b2lkCitlZGF0YV9wcm9mX2FsbG9jX3NpemVfc2V0KGVkYXRhX3QgKmVkYXRhLCBzaXplX3Qg c2l6ZSkgeworCWVkYXRhLT5lX3Byb2ZfaW5mby5lX3Byb2ZfYWxsb2Nfc2l6ZSA9IHNpemU7Cit9 CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZWRhdGFfcHJvZl9yZWNlbnRfYWxsb2Nfc2V0X2RvbnRf Y2FsbF9kaXJlY3RseShlZGF0YV90ICplZGF0YSwKKyAgICBwcm9mX3JlY2VudF90ICpyZWNlbnRf YWxsb2MpIHsKKwlhdG9taWNfc3RvcmVfcCgmZWRhdGEtPmVfcHJvZl9pbmZvLmVfcHJvZl9yZWNl bnRfYWxsb2MsIHJlY2VudF9hbGxvYywKKwkgICAgQVRPTUlDX1JFTEFYRUQpOworfQorCitzdGF0 aWMgaW5saW5lIGJvb2wKK2VkYXRhX2lzX2hlYWRfZ2V0KGVkYXRhX3QgKmVkYXRhKSB7CisJcmV0 dXJuIChib29sKSgoZWRhdGEtPmVfYml0cyAmIEVEQVRBX0JJVFNfSVNfSEVBRF9NQVNLKSA+Pgor CSAgICBFREFUQV9CSVRTX0lTX0hFQURfU0hJRlQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQK K2VkYXRhX2lzX2hlYWRfc2V0KGVkYXRhX3QgKmVkYXRhLCBib29sIGlzX2hlYWQpIHsKKwllZGF0 YS0+ZV9iaXRzID0gKGVkYXRhLT5lX2JpdHMgJiB+RURBVEFfQklUU19JU19IRUFEX01BU0spIHwK KwkgICAgKCh1aW50NjRfdClpc19oZWFkIDw8IEVEQVRBX0JJVFNfSVNfSEVBRF9TSElGVCk7Cit9 CisKK3N0YXRpYyBpbmxpbmUgYm9vbAorZWRhdGFfc3RhdGVfaW5fdHJhbnNpdGlvbihleHRlbnRf c3RhdGVfdCBzdGF0ZSkgeworCXJldHVybiBzdGF0ZSA+PSBleHRlbnRfc3RhdGVfdHJhbnNpdGlv bjsKK30KKworLyoKKyAqIEJlY2F1c2UgdGhpcyBmdW5jdGlvbiBpcyBpbXBsZW1lbnRlZCBhcyBh IHNlcXVlbmNlIG9mIGJpdGZpZWxkIG1vZGlmaWNhdGlvbnMsCisgKiBldmVuIHRob3VnaCBlYWNo IGluZGl2aWR1YWwgYml0IGlzIHByb3Blcmx5IGluaXRpYWxpemVkLCB3ZSB0ZWNobmljYWxseSBy ZWFkCisgKiB1bmluaXRpYWxpemVkIGRhdGEgd2l0aGluIGl0LiAgVGhpcyBpcyBtb3N0bHkgZmlu ZSwgc2luY2UgbW9zdCBjYWxsZXJzIGdldAorICogdGhlaXIgZWRhdGFzIGZyb20gemVyb2luZyBz b3VyY2VzLCBidXQgY2FsbGVycyB3aG8gbWFrZSBzdGFjayBlZGF0YV90cyBuZWVkCisgKiB0byBt YW51YWxseSB6ZXJvIHRoZW0uCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorZWRhdGFfaW5pdChl ZGF0YV90ICplZGF0YSwgdW5zaWduZWQgYXJlbmFfaW5kLCB2b2lkICphZGRyLCBzaXplX3Qgc2l6 ZSwKKyAgICBib29sIHNsYWIsIHN6aW5kX3Qgc3ppbmQsIHVpbnQ2NF90IHNuLCBleHRlbnRfc3Rh dGVfdCBzdGF0ZSwgYm9vbCB6ZXJvZWQsCisgICAgYm9vbCBjb21taXR0ZWQsIGV4dGVudF9wYWlf dCBwYWksIGV4dGVudF9oZWFkX3N0YXRlX3QgaXNfaGVhZCkgeworCWFzc2VydChhZGRyID09IFBB R0VfQUREUjJCQVNFKGFkZHIpIHx8ICFzbGFiKTsKKworCWVkYXRhX2FyZW5hX2luZF9zZXQoZWRh dGEsIGFyZW5hX2luZCk7CisJZWRhdGFfYWRkcl9zZXQoZWRhdGEsIGFkZHIpOworCWVkYXRhX3Np emVfc2V0KGVkYXRhLCBzaXplKTsKKwllZGF0YV9zbGFiX3NldChlZGF0YSwgc2xhYik7CisJZWRh dGFfc3ppbmRfc2V0KGVkYXRhLCBzemluZCk7CisJZWRhdGFfc25fc2V0KGVkYXRhLCBzbik7CisJ ZWRhdGFfc3RhdGVfc2V0KGVkYXRhLCBzdGF0ZSk7CisJZWRhdGFfZ3VhcmRlZF9zZXQoZWRhdGEs IGZhbHNlKTsKKwllZGF0YV96ZXJvZWRfc2V0KGVkYXRhLCB6ZXJvZWQpOworCWVkYXRhX2NvbW1p dHRlZF9zZXQoZWRhdGEsIGNvbW1pdHRlZCk7CisJZWRhdGFfcGFpX3NldChlZGF0YSwgcGFpKTsK KwllZGF0YV9pc19oZWFkX3NldChlZGF0YSwgaXNfaGVhZCA9PSBFWFRFTlRfSVNfSEVBRCk7CisJ aWYgKGNvbmZpZ19wcm9mKSB7CisJCWVkYXRhX3Byb2ZfdGN0eF9zZXQoZWRhdGEsIE5VTEwpOwor CX0KK30KKworc3RhdGljIGlubGluZSB2b2lkCitlZGF0YV9iaW5pdChlZGF0YV90ICplZGF0YSwg dm9pZCAqYWRkciwgc2l6ZV90IGJzaXplLCB1aW50NjRfdCBzbikgeworCWVkYXRhX2FyZW5hX2lu ZF9zZXQoZWRhdGEsICgxVSA8PCBNQUxMT0NYX0FSRU5BX0JJVFMpIC0gMSk7CisJZWRhdGFfYWRk cl9zZXQoZWRhdGEsIGFkZHIpOworCWVkYXRhX2JzaXplX3NldChlZGF0YSwgYnNpemUpOworCWVk YXRhX3NsYWJfc2V0KGVkYXRhLCBmYWxzZSk7CisJZWRhdGFfc3ppbmRfc2V0KGVkYXRhLCBTQ19O U0laRVMpOworCWVkYXRhX3NuX3NldChlZGF0YSwgc24pOworCWVkYXRhX3N0YXRlX3NldChlZGF0 YSwgZXh0ZW50X3N0YXRlX2FjdGl2ZSk7CisJZWRhdGFfZ3VhcmRlZF9zZXQoZWRhdGEsIGZhbHNl KTsKKwllZGF0YV96ZXJvZWRfc2V0KGVkYXRhLCB0cnVlKTsKKwllZGF0YV9jb21taXR0ZWRfc2V0 KGVkYXRhLCB0cnVlKTsKKwkvKgorCSAqIFRoaXMgaXNuJ3Qgc3RyaWN0bHkgdHJ1ZSwgYnV0IGJh c2UgYWxsb2NhdGVkIGV4dGVudHMgbmV2ZXIgZ2V0CisJICogZGVhbGxvY2F0ZWQgYW5kIGNhbid0 IGJlIGxvb2tlZCB1cCBpbiB0aGUgZW1hcCwgYnV0IG5vIHNlbnNlIGluCisJICogd2FzdGluZyBh IHN0YXRlIGJpdCB0byBlbmNvZGUgdGhpcyBmYWN0LgorCSAqLworCWVkYXRhX3BhaV9zZXQoZWRh dGEsIEVYVEVOVF9QQUlfUEFDKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK2VkYXRhX2Vzbl9j b21wKGNvbnN0IGVkYXRhX3QgKmEsIGNvbnN0IGVkYXRhX3QgKmIpIHsKKwlzaXplX3QgYV9lc24g PSBlZGF0YV9lc25fZ2V0KGEpOworCXNpemVfdCBiX2VzbiA9IGVkYXRhX2Vzbl9nZXQoYik7CisK KwlyZXR1cm4gKGFfZXNuID4gYl9lc24pIC0gKGFfZXNuIDwgYl9lc24pOworfQorCitzdGF0aWMg aW5saW5lIGludAorZWRhdGFfZWFkX2NvbXAoY29uc3QgZWRhdGFfdCAqYSwgY29uc3QgZWRhdGFf dCAqYikgeworCXVpbnRwdHJfdCBhX2VhZGRyID0gKHVpbnRwdHJfdClhOworCXVpbnRwdHJfdCBi X2VhZGRyID0gKHVpbnRwdHJfdCliOworCisJcmV0dXJuIChhX2VhZGRyID4gYl9lYWRkcikgLSAo YV9lYWRkciA8IGJfZWFkZHIpOworfQorCitzdGF0aWMgaW5saW5lIGVkYXRhX2NtcF9zdW1tYXJ5 X3QKK2VkYXRhX2NtcF9zdW1tYXJ5X2dldChjb25zdCBlZGF0YV90ICplZGF0YSkgeworCXJldHVy biAoZWRhdGFfY21wX3N1bW1hcnlfdCl7ZWRhdGFfc25fZ2V0KGVkYXRhKSwKKwkJKHVpbnRwdHJf dCllZGF0YV9hZGRyX2dldChlZGF0YSl9OworfQorCitzdGF0aWMgaW5saW5lIGludAorZWRhdGFf Y21wX3N1bW1hcnlfY29tcChlZGF0YV9jbXBfc3VtbWFyeV90IGEsIGVkYXRhX2NtcF9zdW1tYXJ5 X3QgYikgeworCWludCByZXQ7CisJcmV0ID0gKGEuc24gPiBiLnNuKSAtIChhLnNuIDwgYi5zbik7 CisJaWYgKHJldCAhPSAwKSB7CisJCXJldHVybiByZXQ7CisJfQorCXJldCA9IChhLmFkZHIgPiBi LmFkZHIpIC0gKGEuYWRkciA8IGIuYWRkcik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlu bGluZSBpbnQKK2VkYXRhX3NuYWRfY29tcChjb25zdCBlZGF0YV90ICphLCBjb25zdCBlZGF0YV90 ICpiKSB7CisJZWRhdGFfY21wX3N1bW1hcnlfdCBhX2NtcCA9IGVkYXRhX2NtcF9zdW1tYXJ5X2dl dChhKTsKKwllZGF0YV9jbXBfc3VtbWFyeV90IGJfY21wID0gZWRhdGFfY21wX3N1bW1hcnlfZ2V0 KGIpOworCisJcmV0dXJuIGVkYXRhX2NtcF9zdW1tYXJ5X2NvbXAoYV9jbXAsIGJfY21wKTsKK30K Kworc3RhdGljIGlubGluZSBpbnQKK2VkYXRhX2VzbmVhZF9jb21wKGNvbnN0IGVkYXRhX3QgKmEs IGNvbnN0IGVkYXRhX3QgKmIpIHsKKwlpbnQgcmV0OworCisJcmV0ID0gZWRhdGFfZXNuX2NvbXAo YSwgYik7CisJaWYgKHJldCAhPSAwKSB7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gZWRh dGFfZWFkX2NvbXAoYSwgYik7CisJcmV0dXJuIHJldDsKK30KKworcGhfcHJvdG8oLCBlZGF0YV9h dmFpbCwgZWRhdGFfdCkKK3BoX3Byb3RvKCwgZWRhdGFfaGVhcCwgZWRhdGFfdCkKKworI2VuZGlm IC8qIEpFTUFMTE9DX0lOVEVSTkFMX0VEQVRBX0ggKi8KCmRpZmYgLS1naXQgYS8zODktZHMtYmFz ZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL2Vk YXRhX2NhY2hlLmggYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNs dWRlL2plbWFsbG9jL2ludGVybmFsL2VkYXRhX2NhY2hlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMC4uOGI2YzBlZgotLS0gL2Rldi9udWxsCisrKyBiLzM4OS1kcy1iYXNlLTMu My4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvZWRhdGFf Y2FjaGUuaApAQCAtMCwwICsxLDQ5IEBACisjaWZuZGVmIEpFTUFMTE9DX0lOVEVSTkFMX0VEQVRB X0NBQ0hFX0gKKyNkZWZpbmUgSkVNQUxMT0NfSU5URVJOQUxfRURBVEFfQ0FDSEVfSAorCisjaW5j bHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvYmFzZS5oIgorCisvKiBGb3IgdGVzdHMgb25seS4gKi8K KyNkZWZpbmUgRURBVEFfQ0FDSEVfRkFTVF9GSUxMIDQKKworLyoKKyAqIEEgY2FjaGUgb2YgZWRh dGFfdCBzdHJ1Y3R1cmVzIGFsbG9jYXRlZCB2aWEgYmFzZV9hbGxvY19lZGF0YSAoYXMgb3Bwb3Nl ZCB0bworICogdGhlIHVuZGVybHlpbmcgZXh0ZW50cyB0aGV5IGRlc2NyaWJlKS4gIFRoZSBjb250 ZW50cyBvZiByZXR1cm5lZCBlZGF0YV90CisgKiBvYmplY3RzIGFyZSBnYXJiYWdlIGFuZCBjYW5u b3QgYmUgcmVsaWVkIHVwb24uCisgKi8KKwordHlwZWRlZiBzdHJ1Y3QgZWRhdGFfY2FjaGVfcyBl ZGF0YV9jYWNoZV90Oworc3RydWN0IGVkYXRhX2NhY2hlX3MgeworCWVkYXRhX2F2YWlsX3QgYXZh aWw7CisJYXRvbWljX3p1X3QgY291bnQ7CisJbWFsbG9jX211dGV4X3QgbXR4OworCWJhc2VfdCAq YmFzZTsKK307CisKK2Jvb2wgZWRhdGFfY2FjaGVfaW5pdChlZGF0YV9jYWNoZV90ICplZGF0YV9j YWNoZSwgYmFzZV90ICpiYXNlKTsKK2VkYXRhX3QgKmVkYXRhX2NhY2hlX2dldCh0c2RuX3QgKnRz ZG4sIGVkYXRhX2NhY2hlX3QgKmVkYXRhX2NhY2hlKTsKK3ZvaWQgZWRhdGFfY2FjaGVfcHV0KHRz ZG5fdCAqdHNkbiwgZWRhdGFfY2FjaGVfdCAqZWRhdGFfY2FjaGUsIGVkYXRhX3QgKmVkYXRhKTsK Kwordm9pZCBlZGF0YV9jYWNoZV9wcmVmb3JrKHRzZG5fdCAqdHNkbiwgZWRhdGFfY2FjaGVfdCAq ZWRhdGFfY2FjaGUpOwordm9pZCBlZGF0YV9jYWNoZV9wb3N0Zm9ya19wYXJlbnQodHNkbl90ICp0 c2RuLCBlZGF0YV9jYWNoZV90ICplZGF0YV9jYWNoZSk7Cit2b2lkIGVkYXRhX2NhY2hlX3Bvc3Rm b3JrX2NoaWxkKHRzZG5fdCAqdHNkbiwgZWRhdGFfY2FjaGVfdCAqZWRhdGFfY2FjaGUpOworCisv KgorICogQW4gZWRhdGFfY2FjaGVfc21hbGwgaXMgbGlrZSBhbiBlZGF0YV9jYWNoZSwgYnV0IGl0 IHJlbGllcyBvbiBleHRlcm5hbAorICogc3luY2hyb25pemF0aW9uIGFuZCBhdm9pZHMgZmlyc3Qt Zml0IHN0cmF0ZWdpZXMuCisgKi8KKwordHlwZWRlZiBzdHJ1Y3QgZWRhdGFfY2FjaGVfZmFzdF9z IGVkYXRhX2NhY2hlX2Zhc3RfdDsKK3N0cnVjdCBlZGF0YV9jYWNoZV9mYXN0X3MgeworCWVkYXRh X2xpc3RfaW5hY3RpdmVfdCBsaXN0OworCWVkYXRhX2NhY2hlX3QgKmZhbGxiYWNrOworCWJvb2wg ZGlzYWJsZWQ7Cit9OworCit2b2lkIGVkYXRhX2NhY2hlX2Zhc3RfaW5pdChlZGF0YV9jYWNoZV9m YXN0X3QgKmVjcywgZWRhdGFfY2FjaGVfdCAqZmFsbGJhY2spOworZWRhdGFfdCAqZWRhdGFfY2Fj aGVfZmFzdF9nZXQodHNkbl90ICp0c2RuLCBlZGF0YV9jYWNoZV9mYXN0X3QgKmVjcyk7Cit2b2lk IGVkYXRhX2NhY2hlX2Zhc3RfcHV0KHRzZG5fdCAqdHNkbiwgZWRhdGFfY2FjaGVfZmFzdF90ICpl Y3MsCisgICAgZWRhdGFfdCAqZWRhdGEpOwordm9pZCBlZGF0YV9jYWNoZV9mYXN0X2Rpc2FibGUo dHNkbl90ICp0c2RuLCBlZGF0YV9jYWNoZV9mYXN0X3QgKmVjcyk7CisKKyNlbmRpZiAvKiBKRU1B TExPQ19JTlRFUk5BTF9FREFUQV9DQUNIRV9IICovCgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2Ut My4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9laG9v a3MuaCBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVt YWxsb2MvaW50ZXJuYWwvZWhvb2tzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MC4uOGQ5NTEzZQotLS0gL2Rldi9udWxsCisrKyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2pl bWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvZWhvb2tzLmgKQEAgLTAsMCAr MSw0MTIgQEAKKyNpZm5kZWYgSkVNQUxMT0NfSU5URVJOQUxfRUhPT0tTX0gKKyNkZWZpbmUgSkVN QUxMT0NfSU5URVJOQUxfRUhPT0tTX0gKKworI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2F0 b21pYy5oIgorI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2V4dGVudF9tbWFwLmgiCisKKy8q CisgKiBUaGlzIG1vZHVsZSBpcyB0aGUgaW50ZXJuYWwgaW50ZXJmYWNlIHRvIHRoZSBleHRlbnQg aG9va3MgKGJvdGgKKyAqIHVzZXItc3BlY2lmaWVkIGFuZCBleHRlcm5hbCkuICBFdmVudHVhbGx5 LCB0aGlzIHdpbGwgZ2l2ZSB1cyB0aGUgZmxleGliaWxpdHkKKyAqIHRvIHVzZSBtdWx0aXBsZSBk aWZmZXJlbnQgdmVyc2lvbnMgb2YgdXNlci12aXNpYmxlIGV4dGVudC1ob29rIEFQSXMgdW5kZXIg YQorICogc2luZ2xlIHVzZXIgaW50ZXJmYWNlLgorICoKKyAqIEN1cnJlbnQgQVBJIGV4cGFuc2lv bnMgKG5vdCBhdmFpbGFibGUgdG8gYW55b25lIGJ1dCB0aGUgZGVmYXVsdCBob29rcyB5ZXQpOgor ICogICAtIEhlYWQgc3RhdGUgdHJhY2tpbmcuICBIb29rcyBjYW4gZGVjaWRlIHdoZXRoZXIgb3Ig bm90IHRvIG1lcmdlIHR3bworICogICAgIGV4dGVudHMgYmFzZWQgb24gd2hldGhlciBvciBub3Qg b25lIG9mIHRoZW0gaXMgdGhlIGhlYWQgKGkuZS4gd2FzCisgKiAgICAgYWxsb2NhdGVkIG9uIGl0 cyBvd24pLiAgVGhlIGxhdGVyIGV4dGVudCBsb3NlcyBpdHMgImhlYWQiIHN0YXR1cy4KKyAqLwor CitleHRlcm4gY29uc3QgZXh0ZW50X2hvb2tzX3QgZWhvb2tzX2RlZmF1bHRfZXh0ZW50X2hvb2tz OworCit0eXBlZGVmIHN0cnVjdCBlaG9va3NfcyBlaG9va3NfdDsKK3N0cnVjdCBlaG9va3NfcyB7 CisJLyoKKwkgKiBUaGUgdXNlci12aXNpYmxlIGlkIHRoYXQgZ29lcyB3aXRoIHRoZSBlaG9va3Mg KGkuZS4gdGhhdCBvZiB0aGUgYmFzZQorCSAqIHRoZXkncmUgYSBwYXJ0IG9mLCB0aGUgYXNzb2Np YXRlZCBhcmVuYSdzIGluZGV4IHdpdGhpbiB0aGUgYXJlbmFzCisJICogYXJyYXkpLgorCSAqLwor CXVuc2lnbmVkIGluZDsKKwkvKiBMb2dpY2FsbHkgYW4gZXh0ZW50X2hvb2tzX3QgKi4gKi8KKwlh dG9taWNfcF90IHB0cjsKK307CisKK2V4dGVybiBjb25zdCBleHRlbnRfaG9va3NfdCBlaG9va3Nf ZGVmYXVsdF9leHRlbnRfaG9va3M7CisKKy8qCisgKiBUaGVzZSBhcmUgbm90IHJlYWxseSBwYXJ0 IG9mIHRoZSBwdWJsaWMgQVBJLiAgRWFjaCBob29rIGhhcyBhIGZhc3QtcGF0aCBmb3IKKyAqIHRo ZSBkZWZhdWx0LWhvb2tzIGNhc2UgdGhhdCBjYW4gYXZvaWQgdmFyaW91cyBzbWFsbCBpbmVmZmlj aWVuY2llczoKKyAqICAgLSBGb3JnZXR0aW5nIHRzZCBhbmQgdGhlbiBjYWxsaW5nIHRzZF9nZXQg d2l0aGluIHRoZSBob29rLgorICogICAtIEdldHRpbmcgbW9yZSBzdGF0ZSB0aGFuIG5lY2Vzc2Fy eSBvdXQgb2YgdGhlIGV4dGVudF90LgorICogICAtIERvaW5nIGFyZW5hX2luZCAtPiBhcmVuYSAt PiBhcmVuYV9pbmQgbG9va3Vwcy4KKyAqIEJ5IG1ha2luZyB0aGUgY2FsbHMgdG8gdGhlc2UgZnVu Y3Rpb25zIHZpc2libGUgdG8gdGhlIGNvbXBpbGVyLCBpdCBjYW4gbW92ZQorICogdGhvc2UgZXh0 cmEgYml0cyBvZiBjb21wdXRhdGlvbiBkb3duIGJlbG93IHRoZSBmYXN0LXBhdGhzIHdoZXJlIHRo ZXkgZ2V0IGlnbm9yZWQuCisgKi8KK3ZvaWQgKmVob29rc19kZWZhdWx0X2FsbG9jX2ltcGwodHNk bl90ICp0c2RuLCB2b2lkICpuZXdfYWRkciwgc2l6ZV90IHNpemUsCisgICAgc2l6ZV90IGFsaWdu bWVudCwgYm9vbCAqemVybywgYm9vbCAqY29tbWl0LCB1bnNpZ25lZCBhcmVuYV9pbmQpOworYm9v bCBlaG9va3NfZGVmYXVsdF9kYWxsb2NfaW1wbCh2b2lkICphZGRyLCBzaXplX3Qgc2l6ZSk7Cit2 b2lkIGVob29rc19kZWZhdWx0X2Rlc3Ryb3lfaW1wbCh2b2lkICphZGRyLCBzaXplX3Qgc2l6ZSk7 Citib29sIGVob29rc19kZWZhdWx0X2NvbW1pdF9pbXBsKHZvaWQgKmFkZHIsIHNpemVfdCBvZmZz ZXQsIHNpemVfdCBsZW5ndGgpOworYm9vbCBlaG9va3NfZGVmYXVsdF9kZWNvbW1pdF9pbXBsKHZv aWQgKmFkZHIsIHNpemVfdCBvZmZzZXQsIHNpemVfdCBsZW5ndGgpOworI2lmZGVmIFBBR0VTX0NB Tl9QVVJHRV9MQVpZCitib29sIGVob29rc19kZWZhdWx0X3B1cmdlX2xhenlfaW1wbCh2b2lkICph ZGRyLCBzaXplX3Qgb2Zmc2V0LCBzaXplX3QgbGVuZ3RoKTsKKyNlbmRpZgorI2lmZGVmIFBBR0VT X0NBTl9QVVJHRV9GT1JDRUQKK2Jvb2wgZWhvb2tzX2RlZmF1bHRfcHVyZ2VfZm9yY2VkX2ltcGwo dm9pZCAqYWRkciwgc2l6ZV90IG9mZnNldCwgc2l6ZV90IGxlbmd0aCk7CisjZW5kaWYKK2Jvb2wg ZWhvb2tzX2RlZmF1bHRfc3BsaXRfaW1wbCgpOworLyoKKyAqIE1lcmdlIGlzIHRoZSBvbmx5IGRl ZmF1bHQgZXh0ZW50IGhvb2sgd2UgZGVjbGFyZSAtLSBzZWUgdGhlIGNvbW1lbnQgaW4KKyAqIGVo b29rc19tZXJnZS4KKyAqLworYm9vbCBlaG9va3NfZGVmYXVsdF9tZXJnZShleHRlbnRfaG9va3Nf dCAqZXh0ZW50X2hvb2tzLCB2b2lkICphZGRyX2EsCisgICAgc2l6ZV90IHNpemVfYSwgdm9pZCAq YWRkcl9iLCBzaXplX3Qgc2l6ZV9iLCBib29sIGNvbW1pdHRlZCwKKyAgICB1bnNpZ25lZCBhcmVu YV9pbmQpOworYm9vbCBlaG9va3NfZGVmYXVsdF9tZXJnZV9pbXBsKHRzZG5fdCAqdHNkbiwgdm9p ZCAqYWRkcl9hLCB2b2lkICphZGRyX2IpOwordm9pZCBlaG9va3NfZGVmYXVsdF96ZXJvX2ltcGwo dm9pZCAqYWRkciwgc2l6ZV90IHNpemUpOwordm9pZCBlaG9va3NfZGVmYXVsdF9ndWFyZF9pbXBs KHZvaWQgKmd1YXJkMSwgdm9pZCAqZ3VhcmQyKTsKK3ZvaWQgZWhvb2tzX2RlZmF1bHRfdW5ndWFy ZF9pbXBsKHZvaWQgKmd1YXJkMSwgdm9pZCAqZ3VhcmQyKTsKKworLyoKKyAqIFdlIGRvbid0IG9m ZmljaWFsbHkgc3VwcG9ydCByZWVudHJhbmN5IGZyb20gd3RpaGluIHRoZSBleHRlbnQgaG9va3Mu ICBCdXQKKyAqIHZhcmlvdXMgcGVvcGxlIHdobyBzaXQgd2l0aGluIHRocm93aW5nIGRpc3RhbmNl IG9mIHRoZSBqZW1hbGxvYyB0ZWFtIHdhbnQKKyAqIHRoYXQgZnVuY3Rpb25hbGl0eSBpbiBjZXJ0 YWluIGxpbWl0ZWQgY2FzZXMuICBUaGUgZGVmYXVsdCByZWVudHJhbmN5IGd1YXJkcworICogYXNz ZXJ0IHRoYXQgd2UncmUgbm90IHJlZW50cmFudCBmcm9tIGEwIChzaW5jZSBpdCdzIHRoZSBib290 c3RyYXAgYXJlbmEsCisgKiB3aGVyZSByZWVudHJhbnQgYWxsb2NhdGlvbnMgd291bGQgYmUgcmVk aXJlY3RlZCksIHdoaWNoIHdlIHdvdWxkIGluY29ycmVjdGx5CisgKiB0cmlnZ2VyIGluIGNhc2Vz IHdoZXJlIGEwIGhhcyBleHRlbnQgaG9va3MgKHRob3NlIGhvb2tzIHRoZW1zZWx2ZXMgY2FuJ3Qg YmUKKyAqIHJlZW50cmFudCwgdGhlbiwgYnV0IHRoZXJlIGFyZSByZWFzb25hYmxlIHVzZXMgZm9y IHN1Y2ggZnVuY3Rpb25hbGl0eSwgbGlrZQorICogcHV0dGluZyBpbnRlcm5hbCBtZXRhZGF0YSBv biBodWdlcGFnZXMpLiAgVGhlcmVmb3JlLCB3ZSB1c2UgdGhlIHJhdworICogcmVlbnRyYW5jeSBn dWFyZHMuCisgKgorICogRXZlbnR1YWxseSwgd2UgbmVlZCB0byB0aGluayBtb3JlIGNhcmVmdWxs eSBhYm91dCB3aGV0aGVyIGFuZCB3aGVyZSB3ZQorICogc3VwcG9ydCBhbGxvY2F0aW5nIGZyb20g d2l0aGluIGV4dGVudCBob29rcyAoYW5kIHdoYXQgdGhhdCBtZWFucyBmb3IgdGhpbmdzCisgKiBs aWtlIHByb2ZpbGluZywgc3RhdHMgY29sbGVjdGlvbiwgZXRjLiksIGFuZCBkb2N1bWVudCB3aGF0 IHRoZSBndWFyYW50ZWUgaXMuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorZWhvb2tzX3ByZV9y ZWVudHJhbmN5KHRzZG5fdCAqdHNkbikgeworCXRzZF90ICp0c2QgPSB0c2RuX251bGwodHNkbikg PyB0c2RfZmV0Y2goKSA6IHRzZG5fdHNkKHRzZG4pOworCXRzZF9wcmVfcmVlbnRyYW5jeV9yYXco dHNkKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitlaG9va3NfcG9zdF9yZWVudHJhbmN5KHRz ZG5fdCAqdHNkbikgeworCXRzZF90ICp0c2QgPSB0c2RuX251bGwodHNkbikgPyB0c2RfZmV0Y2go KSA6IHRzZG5fdHNkKHRzZG4pOworCXRzZF9wb3N0X3JlZW50cmFuY3lfcmF3KHRzZCk7Cit9CisK Ky8qIEJlZ2lubmluZyBvZiB0aGUgcHVibGljIEFQSS4gKi8KK3ZvaWQgZWhvb2tzX2luaXQoZWhv b2tzX3QgKmVob29rcywgZXh0ZW50X2hvb2tzX3QgKmV4dGVudF9ob29rcywgdW5zaWduZWQgaW5k KTsKKworc3RhdGljIGlubGluZSB1bnNpZ25lZAorZWhvb2tzX2luZF9nZXQoY29uc3QgZWhvb2tz X3QgKmVob29rcykgeworCXJldHVybiBlaG9va3MtPmluZDsKK30KKworc3RhdGljIGlubGluZSB2 b2lkCitlaG9va3Nfc2V0X2V4dGVudF9ob29rc19wdHIoZWhvb2tzX3QgKmVob29rcywgZXh0ZW50 X2hvb2tzX3QgKmV4dGVudF9ob29rcykgeworCWF0b21pY19zdG9yZV9wKCZlaG9va3MtPnB0ciwg ZXh0ZW50X2hvb2tzLCBBVE9NSUNfUkVMRUFTRSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgZXh0ZW50 X2hvb2tzX3QgKgorZWhvb2tzX2dldF9leHRlbnRfaG9va3NfcHRyKGVob29rc190ICplaG9va3Mp IHsKKwlyZXR1cm4gKGV4dGVudF9ob29rc190ICopYXRvbWljX2xvYWRfcCgmZWhvb2tzLT5wdHIs IEFUT01JQ19BQ1FVSVJFKTsKK30KKworc3RhdGljIGlubGluZSBib29sCitlaG9va3NfYXJlX2Rl ZmF1bHQoZWhvb2tzX3QgKmVob29rcykgeworCXJldHVybiBlaG9va3NfZ2V0X2V4dGVudF9ob29r c19wdHIoZWhvb2tzKSA9PQorCSAgICAmZWhvb2tzX2RlZmF1bHRfZXh0ZW50X2hvb2tzOworfQor CisvKgorICogSW4gc29tZSBjYXNlcywgYSBjYWxsZXIgbmVlZHMgdG8gYWxsb2NhdGUgcmVzb3Vy Y2VzIGJlZm9yZSBhdHRlbXB0aW5nIHRvIGNhbGwKKyAqIGEgaG9vay4gIElmIHRoYXQgaG9vayBp cyBkb29tZWQgdG8gZmFpbCwgdGhpcyBpcyB3YXN0ZWZ1bC4gIFdlIHRoZXJlZm9yZQorICogaW5j bHVkZSBzb21lIGNoZWNrcyBmb3Igc3VjaCBjYXNlcy4KKyAqLworc3RhdGljIGlubGluZSBib29s CitlaG9va3NfZGFsbG9jX3dpbGxfZmFpbChlaG9va3NfdCAqZWhvb2tzKSB7CisJaWYgKGVob29r c19hcmVfZGVmYXVsdChlaG9va3MpKSB7CisJCXJldHVybiBvcHRfcmV0YWluOworCX0gZWxzZSB7 CisJCXJldHVybiBlaG9va3NfZ2V0X2V4dGVudF9ob29rc19wdHIoZWhvb2tzKS0+ZGFsbG9jID09 IE5VTEw7CisJfQorfQorCitzdGF0aWMgaW5saW5lIGJvb2wKK2Vob29rc19zcGxpdF93aWxsX2Zh aWwoZWhvb2tzX3QgKmVob29rcykgeworCXJldHVybiBlaG9va3NfZ2V0X2V4dGVudF9ob29rc19w dHIoZWhvb2tzKS0+c3BsaXQgPT0gTlVMTDsKK30KKworc3RhdGljIGlubGluZSBib29sCitlaG9v a3NfbWVyZ2Vfd2lsbF9mYWlsKGVob29rc190ICplaG9va3MpIHsKKwlyZXR1cm4gZWhvb2tzX2dl dF9leHRlbnRfaG9va3NfcHRyKGVob29rcyktPm1lcmdlID09IE5VTEw7Cit9CisKK3N0YXRpYyBp bmxpbmUgYm9vbAorZWhvb2tzX2d1YXJkX3dpbGxfZmFpbChlaG9va3NfdCAqZWhvb2tzKSB7CisJ LyoKKwkgKiBCZWZvcmUgdGhlIGd1YXJkIGhvb2tzIGFyZSBvZmZpY2lhbGx5IGludHJvZHVjZWQs IGxpbWl0IHRoZSB1c2UgdG8KKwkgKiB0aGUgZGVmYXVsdCBob29rcyBvbmx5LgorCSAqLworCXJl dHVybiAhZWhvb2tzX2FyZV9kZWZhdWx0KGVob29rcyk7Cit9CisKKy8qCisgKiBTb21lIGhvb2tz IGFyZSByZXF1aXJlZCB0byByZXR1cm4gemVyb2VkIG1lbW9yeSBpbiBjZXJ0YWluIHNpdHVhdGlv bnMuICBJbgorICogZGVidWcgbW9kZSwgd2UgZG8gc29tZSBoZXVyaXN0aWMgY2hlY2tzIHRoYXQg dGhleSBkaWQgd2hhdCB0aGV5IHdlcmUgc3VwcG9zZWQKKyAqIHRvLgorICoKKyAqIFRoaXMgaXNu J3QgcmVhbGx5IGVob29rcy1zcGVjaWZpYyAoaS5lLiBhbnlvbmUgY2FuIGNoZWNrIGZvciB6ZXJv ZWQgbWVtb3J5KS4KKyAqIEJ1dCBpbmNvcnJlY3QgemVybyBpbmZvcm1hdGlvbiBpbmRpY2F0ZXMg YW4gZWhvb2sgYnVnLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQKK2Vob29rc19kZWJ1Z196ZXJv X2NoZWNrKHZvaWQgKmFkZHIsIHNpemVfdCBzaXplKSB7CisJYXNzZXJ0KCgodWludHB0cl90KWFk ZHIgJiBQQUdFX01BU0spID09IDApOworCWFzc2VydCgoc2l6ZSAmIFBBR0VfTUFTSykgPT0gMCk7 CisJYXNzZXJ0KHNpemUgPiAwKTsKKwlpZiAoY29uZmlnX2RlYnVnKSB7CisJCS8qIENoZWNrIHRo ZSB3aG9sZSBmaXJzdCBwYWdlLiAqLworCQlzaXplX3QgKnAgPSAoc2l6ZV90ICopYWRkcjsKKwkJ Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBQQUdFIC8gc2l6ZW9mKHNpemVfdCk7IGkrKykgeworCQkJ YXNzZXJ0KHBbaV0gPT0gMCk7CisJCX0KKwkJLyoKKwkJICogQW5kIDQgc3BvdHMgd2l0aGluLiAg VGhlcmUncyBhIHRyYWRlb2ZmIGhlcmU7IHRoZSBsYXJnZXIKKwkJICogdGhpcyBudW1iZXIsIHRo ZSBtb3JlIGxpa2VseSBpdCBpcyB0aGF0IHdlJ2xsIGNhdGNoIGEgYnVnCisJCSAqIHdoZXJlIGVo b29rcyByZXR1cm4gYSBzcGFyc2VseSBub24temVybyByYW5nZS4gIEJ1dAorCQkgKiBpbmNyZWFz aW5nIHRoZSBudW1iZXIgb2YgY2hlY2tzIGFsc28gaW5jcmVhc2VzIHRoZSBudW1iZXIgb2YKKwkJ ICogcGFnZSBmYXVsdHMgaW4gZGVidWcgbW9kZS4gIEZyZWVCU0QgZG9lcyBtdWNoIG9mIHRoZWly CisJCSAqIGRheS10by1kYXkgZGV2ZWxvcG1lbnQgd29yayBpbiBkZWJ1ZyBtb2RlLCBzbyB3ZSBk b24ndCB3YW50CisJCSAqIGV2ZW4gdGhlIGRlYnVnIGJ1aWxkcyB0byBiZSB0b28gc2xvdy4KKwkJ ICovCisJCWNvbnN0IHNpemVfdCBuY2hlY2tzID0gNDsKKwkJYXNzZXJ0KFBBR0UgPj0gc2l6ZW9m KHNpemVfdCkgKiBuY2hlY2tzKTsKKwkJZm9yIChzaXplX3QgaSA9IDA7IGkgPCBuY2hlY2tzOyAr K2kpIHsKKwkJCWFzc2VydChwW2kgKiAoc2l6ZSAvIHNpemVvZihzaXplX3QpIC8gbmNoZWNrcyld ID09IDApOworCQl9CisJfQorfQorCisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqCitlaG9va3NfYWxs b2ModHNkbl90ICp0c2RuLCBlaG9va3NfdCAqZWhvb2tzLCB2b2lkICpuZXdfYWRkciwgc2l6ZV90 IHNpemUsCisgICAgc2l6ZV90IGFsaWdubWVudCwgYm9vbCAqemVybywgYm9vbCAqY29tbWl0KSB7 CisJYm9vbCBvcmlnX3plcm8gPSAqemVybzsKKwl2b2lkICpyZXQ7CisJZXh0ZW50X2hvb2tzX3Qg KmV4dGVudF9ob29rcyA9IGVob29rc19nZXRfZXh0ZW50X2hvb2tzX3B0cihlaG9va3MpOworCWlm IChleHRlbnRfaG9va3MgPT0gJmVob29rc19kZWZhdWx0X2V4dGVudF9ob29rcykgeworCQlyZXQg PSBlaG9va3NfZGVmYXVsdF9hbGxvY19pbXBsKHRzZG4sIG5ld19hZGRyLCBzaXplLAorCQkgICAg YWxpZ25tZW50LCB6ZXJvLCBjb21taXQsIGVob29rc19pbmRfZ2V0KGVob29rcykpOworCX0gZWxz ZSB7CisJCWVob29rc19wcmVfcmVlbnRyYW5jeSh0c2RuKTsKKwkJcmV0ID0gZXh0ZW50X2hvb2tz LT5hbGxvYyhleHRlbnRfaG9va3MsIG5ld19hZGRyLCBzaXplLAorCQkgICAgYWxpZ25tZW50LCB6 ZXJvLCBjb21taXQsIGVob29rc19pbmRfZ2V0KGVob29rcykpOworCQllaG9va3NfcG9zdF9yZWVu dHJhbmN5KHRzZG4pOworCX0KKwlhc3NlcnQobmV3X2FkZHIgPT0gTlVMTCB8fCByZXQgPT0gTlVM TCB8fCBuZXdfYWRkciA9PSByZXQpOworCWFzc2VydCghb3JpZ196ZXJvIHx8ICp6ZXJvKTsKKwlp ZiAoKnplcm8gJiYgcmV0ICE9IE5VTEwpIHsKKwkJZWhvb2tzX2RlYnVnX3plcm9fY2hlY2socmV0 LCBzaXplKTsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlubGluZSBib29sCitlaG9v a3NfZGFsbG9jKHRzZG5fdCAqdHNkbiwgZWhvb2tzX3QgKmVob29rcywgdm9pZCAqYWRkciwgc2l6 ZV90IHNpemUsCisgICAgYm9vbCBjb21taXR0ZWQpIHsKKwlleHRlbnRfaG9va3NfdCAqZXh0ZW50 X2hvb2tzID0gZWhvb2tzX2dldF9leHRlbnRfaG9va3NfcHRyKGVob29rcyk7CisJaWYgKGV4dGVu dF9ob29rcyA9PSAmZWhvb2tzX2RlZmF1bHRfZXh0ZW50X2hvb2tzKSB7CisJCXJldHVybiBlaG9v a3NfZGVmYXVsdF9kYWxsb2NfaW1wbChhZGRyLCBzaXplKTsKKwl9IGVsc2UgaWYgKGV4dGVudF9o b29rcy0+ZGFsbG9jID09IE5VTEwpIHsKKwkJcmV0dXJuIHRydWU7CisJfSBlbHNlIHsKKwkJZWhv b2tzX3ByZV9yZWVudHJhbmN5KHRzZG4pOworCQlib29sIGVyciA9IGV4dGVudF9ob29rcy0+ZGFs bG9jKGV4dGVudF9ob29rcywgYWRkciwgc2l6ZSwKKwkJICAgIGNvbW1pdHRlZCwgZWhvb2tzX2lu ZF9nZXQoZWhvb2tzKSk7CisJCWVob29rc19wb3N0X3JlZW50cmFuY3kodHNkbik7CisJCXJldHVy biBlcnI7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2Vob29rc19kZXN0cm95KHRzZG5f dCAqdHNkbiwgZWhvb2tzX3QgKmVob29rcywgdm9pZCAqYWRkciwgc2l6ZV90IHNpemUsCisgICAg Ym9vbCBjb21taXR0ZWQpIHsKKwlleHRlbnRfaG9va3NfdCAqZXh0ZW50X2hvb2tzID0gZWhvb2tz X2dldF9leHRlbnRfaG9va3NfcHRyKGVob29rcyk7CisJaWYgKGV4dGVudF9ob29rcyA9PSAmZWhv b2tzX2RlZmF1bHRfZXh0ZW50X2hvb2tzKSB7CisJCWVob29rc19kZWZhdWx0X2Rlc3Ryb3lfaW1w bChhZGRyLCBzaXplKTsKKwl9IGVsc2UgaWYgKGV4dGVudF9ob29rcy0+ZGVzdHJveSA9PSBOVUxM KSB7CisJCS8qIERvIG5vdGhpbmcuICovCisJfSBlbHNlIHsKKwkJZWhvb2tzX3ByZV9yZWVudHJh bmN5KHRzZG4pOworCQlleHRlbnRfaG9va3MtPmRlc3Ryb3koZXh0ZW50X2hvb2tzLCBhZGRyLCBz aXplLCBjb21taXR0ZWQsCisJCSAgICBlaG9va3NfaW5kX2dldChlaG9va3MpKTsKKwkJZWhvb2tz X3Bvc3RfcmVlbnRyYW5jeSh0c2RuKTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbAorZWhv b2tzX2NvbW1pdCh0c2RuX3QgKnRzZG4sIGVob29rc190ICplaG9va3MsIHZvaWQgKmFkZHIsIHNp emVfdCBzaXplLAorICAgIHNpemVfdCBvZmZzZXQsIHNpemVfdCBsZW5ndGgpIHsKKwlleHRlbnRf aG9va3NfdCAqZXh0ZW50X2hvb2tzID0gZWhvb2tzX2dldF9leHRlbnRfaG9va3NfcHRyKGVob29r cyk7CisJYm9vbCBlcnI7CisJaWYgKGV4dGVudF9ob29rcyA9PSAmZWhvb2tzX2RlZmF1bHRfZXh0 ZW50X2hvb2tzKSB7CisJCWVyciA9IGVob29rc19kZWZhdWx0X2NvbW1pdF9pbXBsKGFkZHIsIG9m ZnNldCwgbGVuZ3RoKTsKKwl9IGVsc2UgaWYgKGV4dGVudF9ob29rcy0+Y29tbWl0ID09IE5VTEwp IHsKKwkJZXJyID0gdHJ1ZTsKKwl9IGVsc2UgeworCQllaG9va3NfcHJlX3JlZW50cmFuY3kodHNk bik7CisJCWVyciA9IGV4dGVudF9ob29rcy0+Y29tbWl0KGV4dGVudF9ob29rcywgYWRkciwgc2l6 ZSwKKwkJICAgIG9mZnNldCwgbGVuZ3RoLCBlaG9va3NfaW5kX2dldChlaG9va3MpKTsKKwkJZWhv b2tzX3Bvc3RfcmVlbnRyYW5jeSh0c2RuKTsKKwl9CisJaWYgKCFlcnIpIHsKKwkJZWhvb2tzX2Rl YnVnX3plcm9fY2hlY2soYWRkciwgc2l6ZSk7CisJfQorCXJldHVybiBlcnI7Cit9CisKK3N0YXRp YyBpbmxpbmUgYm9vbAorZWhvb2tzX2RlY29tbWl0KHRzZG5fdCAqdHNkbiwgZWhvb2tzX3QgKmVo b29rcywgdm9pZCAqYWRkciwgc2l6ZV90IHNpemUsCisgICAgc2l6ZV90IG9mZnNldCwgc2l6ZV90 IGxlbmd0aCkgeworCWV4dGVudF9ob29rc190ICpleHRlbnRfaG9va3MgPSBlaG9va3NfZ2V0X2V4 dGVudF9ob29rc19wdHIoZWhvb2tzKTsKKwlpZiAoZXh0ZW50X2hvb2tzID09ICZlaG9va3NfZGVm YXVsdF9leHRlbnRfaG9va3MpIHsKKwkJcmV0dXJuIGVob29rc19kZWZhdWx0X2RlY29tbWl0X2lt cGwoYWRkciwgb2Zmc2V0LCBsZW5ndGgpOworCX0gZWxzZSBpZiAoZXh0ZW50X2hvb2tzLT5kZWNv bW1pdCA9PSBOVUxMKSB7CisJCXJldHVybiB0cnVlOworCX0gZWxzZSB7CisJCWVob29rc19wcmVf cmVlbnRyYW5jeSh0c2RuKTsKKwkJYm9vbCBlcnIgPSBleHRlbnRfaG9va3MtPmRlY29tbWl0KGV4 dGVudF9ob29rcywgYWRkciwgc2l6ZSwKKwkJICAgIG9mZnNldCwgbGVuZ3RoLCBlaG9va3NfaW5k X2dldChlaG9va3MpKTsKKwkJZWhvb2tzX3Bvc3RfcmVlbnRyYW5jeSh0c2RuKTsKKwkJcmV0dXJu IGVycjsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbAorZWhvb2tzX3B1cmdlX2xhenkodHNk bl90ICp0c2RuLCBlaG9va3NfdCAqZWhvb2tzLCB2b2lkICphZGRyLCBzaXplX3Qgc2l6ZSwKKyAg ICBzaXplX3Qgb2Zmc2V0LCBzaXplX3QgbGVuZ3RoKSB7CisJZXh0ZW50X2hvb2tzX3QgKmV4dGVu dF9ob29rcyA9IGVob29rc19nZXRfZXh0ZW50X2hvb2tzX3B0cihlaG9va3MpOworI2lmZGVmIFBB R0VTX0NBTl9QVVJHRV9MQVpZCisJaWYgKGV4dGVudF9ob29rcyA9PSAmZWhvb2tzX2RlZmF1bHRf ZXh0ZW50X2hvb2tzKSB7CisJCXJldHVybiBlaG9va3NfZGVmYXVsdF9wdXJnZV9sYXp5X2ltcGwo YWRkciwgb2Zmc2V0LCBsZW5ndGgpOworCX0KKyNlbmRpZgorCWlmIChleHRlbnRfaG9va3MtPnB1 cmdlX2xhenkgPT0gTlVMTCkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9IGVsc2UgeworCQllaG9va3Nf cHJlX3JlZW50cmFuY3kodHNkbik7CisJCWJvb2wgZXJyID0gZXh0ZW50X2hvb2tzLT5wdXJnZV9s YXp5KGV4dGVudF9ob29rcywgYWRkciwgc2l6ZSwKKwkJICAgIG9mZnNldCwgbGVuZ3RoLCBlaG9v a3NfaW5kX2dldChlaG9va3MpKTsKKwkJZWhvb2tzX3Bvc3RfcmVlbnRyYW5jeSh0c2RuKTsKKwkJ cmV0dXJuIGVycjsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbAorZWhvb2tzX3B1cmdlX2Zv cmNlZCh0c2RuX3QgKnRzZG4sIGVob29rc190ICplaG9va3MsIHZvaWQgKmFkZHIsIHNpemVfdCBz aXplLAorICAgIHNpemVfdCBvZmZzZXQsIHNpemVfdCBsZW5ndGgpIHsKKwlleHRlbnRfaG9va3Nf dCAqZXh0ZW50X2hvb2tzID0gZWhvb2tzX2dldF9leHRlbnRfaG9va3NfcHRyKGVob29rcyk7CisJ LyoKKwkgKiBJdCB3b3VsZCBiZSBjb3JyZWN0IHRvIGhhdmUgYSBlaG9va3NfZGVidWdfemVyb19j aGVjayBjYWxsIGF0IHRoZSBlbmQKKwkgKiBvZiB0aGlzIGZ1bmN0aW9uOyBwdXJnZV9mb3JjZWQg aXMgcmVxdWlyZWQgdG8gemVyby4gIEJ1dCBjaGVja2luZworCSAqIHdvdWxkIHRvdWNoIHRoZSBw YWdlIGluIHF1ZXN0aW9uLCB3aGljaCBtYXkgaGF2ZSBwZXJmb3JtYW5jZQorCSAqIGNvbnNlcXVl bmNlcyAoaW1hZ2luZSB0aGUgaG9va3MgYXJlIHVzaW5nIGh1Z2VwYWdlcywgd2l0aCBhIGdsb2Jh bAorCSAqIHplcm8gcGFnZSBvZmYpLiAgRXZlbiBpbiBkZWJ1ZyBtb2RlLCBpdCdzIHVzdWFsbHkg YSBnb29kIGlkZWEgdG8KKwkgKiBhdm9pZCBjYXNlcyB0aGF0IGNhbiBkcmFtYXRpY2FsbHkgaW5j cmVhc2UgbWVtb3J5IGNvbnN1bXB0aW9uLgorCSAqLworI2lmZGVmIFBBR0VTX0NBTl9QVVJHRV9G T1JDRUQKKwlpZiAoZXh0ZW50X2hvb2tzID09ICZlaG9va3NfZGVmYXVsdF9leHRlbnRfaG9va3Mp IHsKKwkJcmV0dXJuIGVob29rc19kZWZhdWx0X3B1cmdlX2ZvcmNlZF9pbXBsKGFkZHIsIG9mZnNl dCwgbGVuZ3RoKTsKKwl9CisjZW5kaWYKKwlpZiAoZXh0ZW50X2hvb2tzLT5wdXJnZV9mb3JjZWQg PT0gTlVMTCkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9IGVsc2UgeworCQllaG9va3NfcHJlX3JlZW50 cmFuY3kodHNkbik7CisJCWJvb2wgZXJyID0gZXh0ZW50X2hvb2tzLT5wdXJnZV9mb3JjZWQoZXh0 ZW50X2hvb2tzLCBhZGRyLCBzaXplLAorCQkgICAgb2Zmc2V0LCBsZW5ndGgsIGVob29rc19pbmRf Z2V0KGVob29rcykpOworCQllaG9va3NfcG9zdF9yZWVudHJhbmN5KHRzZG4pOworCQlyZXR1cm4g ZXJyOworCX0KK30KKworc3RhdGljIGlubGluZSBib29sCitlaG9va3Nfc3BsaXQodHNkbl90ICp0 c2RuLCBlaG9va3NfdCAqZWhvb2tzLCB2b2lkICphZGRyLCBzaXplX3Qgc2l6ZSwKKyAgICBzaXpl X3Qgc2l6ZV9hLCBzaXplX3Qgc2l6ZV9iLCBib29sIGNvbW1pdHRlZCkgeworCWV4dGVudF9ob29r c190ICpleHRlbnRfaG9va3MgPSBlaG9va3NfZ2V0X2V4dGVudF9ob29rc19wdHIoZWhvb2tzKTsK KwlpZiAoZWhvb2tzX2FyZV9kZWZhdWx0KGVob29rcykpIHsKKwkJcmV0dXJuIGVob29rc19kZWZh dWx0X3NwbGl0X2ltcGwoKTsKKwl9IGVsc2UgaWYgKGV4dGVudF9ob29rcy0+c3BsaXQgPT0gTlVM TCkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9IGVsc2UgeworCQllaG9va3NfcHJlX3JlZW50cmFuY3ko dHNkbik7CisJCWJvb2wgZXJyID0gZXh0ZW50X2hvb2tzLT5zcGxpdChleHRlbnRfaG9va3MsIGFk ZHIsIHNpemUsIHNpemVfYSwKKwkJICAgIHNpemVfYiwgY29tbWl0dGVkLCBlaG9va3NfaW5kX2dl dChlaG9va3MpKTsKKwkJZWhvb2tzX3Bvc3RfcmVlbnRyYW5jeSh0c2RuKTsKKwkJcmV0dXJuIGVy cjsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbAorZWhvb2tzX21lcmdlKHRzZG5fdCAqdHNk biwgZWhvb2tzX3QgKmVob29rcywgdm9pZCAqYWRkcl9hLCBzaXplX3Qgc2l6ZV9hLAorICAgIHZv aWQgKmFkZHJfYiwgc2l6ZV90IHNpemVfYiwgYm9vbCBjb21taXR0ZWQpIHsKKwlleHRlbnRfaG9v a3NfdCAqZXh0ZW50X2hvb2tzID0gZWhvb2tzX2dldF9leHRlbnRfaG9va3NfcHRyKGVob29rcyk7 CisJaWYgKGV4dGVudF9ob29rcyA9PSAmZWhvb2tzX2RlZmF1bHRfZXh0ZW50X2hvb2tzKSB7CisJ CXJldHVybiBlaG9va3NfZGVmYXVsdF9tZXJnZV9pbXBsKHRzZG4sIGFkZHJfYSwgYWRkcl9iKTsK Kwl9IGVsc2UgaWYgKGV4dGVudF9ob29rcy0+bWVyZ2UgPT0gTlVMTCkgeworCQlyZXR1cm4gdHJ1 ZTsKKwl9IGVsc2UgeworCQllaG9va3NfcHJlX3JlZW50cmFuY3kodHNkbik7CisJCWJvb2wgZXJy ID0gZXh0ZW50X2hvb2tzLT5tZXJnZShleHRlbnRfaG9va3MsIGFkZHJfYSwgc2l6ZV9hLAorCQkg ICAgYWRkcl9iLCBzaXplX2IsIGNvbW1pdHRlZCwgZWhvb2tzX2luZF9nZXQoZWhvb2tzKSk7CisJ CWVob29rc19wb3N0X3JlZW50cmFuY3kodHNkbik7CisJCXJldHVybiBlcnI7CisJfQorfQorCitz dGF0aWMgaW5saW5lIHZvaWQKK2Vob29rc196ZXJvKHRzZG5fdCAqdHNkbiwgZWhvb2tzX3QgKmVo b29rcywgdm9pZCAqYWRkciwgc2l6ZV90IHNpemUpIHsKKwlleHRlbnRfaG9va3NfdCAqZXh0ZW50 X2hvb2tzID0gZWhvb2tzX2dldF9leHRlbnRfaG9va3NfcHRyKGVob29rcyk7CisJaWYgKGV4dGVu dF9ob29rcyA9PSAmZWhvb2tzX2RlZmF1bHRfZXh0ZW50X2hvb2tzKSB7CisJCWVob29rc19kZWZh dWx0X3plcm9faW1wbChhZGRyLCBzaXplKTsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBJdCB3b3Vs ZCBiZSBjb3JyZWN0IHRvIHRyeSB1c2luZyB0aGUgdXNlci1wcm92aWRlZCBwdXJnZQorCQkgKiBo b29rcyAoc2luY2UgdGhleSBhcmUgcmVxdWlyZWQgdG8gaGF2ZSB6ZXJvZWQgdGhlIGV4dGVudCBp ZgorCQkgKiB0aGV5IGluZGljYXRlIHN1Y2Nlc3MpLCBidXQgd2UgZG9uJ3QgbmVjZXNzYXJpbHkg a25vdyB0aGVpcgorCQkgKiBjb3N0LiAgV2UnbGwgYmUgY29uc2VydmF0aXZlIGFuZCB1c2UgbWVt c2V0LgorCQkgKi8KKwkJbWVtc2V0KGFkZHIsIDAsIHNpemUpOworCX0KK30KKworc3RhdGljIGlu bGluZSBib29sCitlaG9va3NfZ3VhcmQodHNkbl90ICp0c2RuLCBlaG9va3NfdCAqZWhvb2tzLCB2 b2lkICpndWFyZDEsIHZvaWQgKmd1YXJkMikgeworCWJvb2wgZXJyOworCWV4dGVudF9ob29rc190 ICpleHRlbnRfaG9va3MgPSBlaG9va3NfZ2V0X2V4dGVudF9ob29rc19wdHIoZWhvb2tzKTsKKwor CWlmIChleHRlbnRfaG9va3MgPT0gJmVob29rc19kZWZhdWx0X2V4dGVudF9ob29rcykgeworCQll aG9va3NfZGVmYXVsdF9ndWFyZF9pbXBsKGd1YXJkMSwgZ3VhcmQyKTsKKwkJZXJyID0gZmFsc2U7 CisJfSBlbHNlIHsKKwkJZXJyID0gdHJ1ZTsKKwl9CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0 aWMgaW5saW5lIGJvb2wKK2Vob29rc191bmd1YXJkKHRzZG5fdCAqdHNkbiwgZWhvb2tzX3QgKmVo b29rcywgdm9pZCAqZ3VhcmQxLCB2b2lkICpndWFyZDIpIHsKKwlib29sIGVycjsKKwlleHRlbnRf aG9va3NfdCAqZXh0ZW50X2hvb2tzID0gZWhvb2tzX2dldF9leHRlbnRfaG9va3NfcHRyKGVob29r cyk7CisKKwlpZiAoZXh0ZW50X2hvb2tzID09ICZlaG9va3NfZGVmYXVsdF9leHRlbnRfaG9va3Mp IHsKKwkJZWhvb2tzX2RlZmF1bHRfdW5ndWFyZF9pbXBsKGd1YXJkMSwgZ3VhcmQyKTsKKwkJZXJy ID0gZmFsc2U7CisJfSBlbHNlIHsKKwkJZXJyID0gdHJ1ZTsKKwl9CisKKwlyZXR1cm4gZXJyOwor fQorCisjZW5kaWYgLyogSkVNQUxMT0NfSU5URVJOQUxfRUhPT0tTX0ggKi8KCmRpZmYgLS1naXQg YS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9j L2ludGVybmFsL2VtYXAuaCBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4w L2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvZW1hcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAuLjg0N2FmMzIKLS0tIC9kZXYvbnVsbAorKysgYi8zODktZHMtYmFzZS0zLjMu MC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL2VtYXAuaApA QCAtMCwwICsxLDM1NyBAQAorI2lmbmRlZiBKRU1BTExPQ19JTlRFUk5BTF9FTUFQX0gKKyNkZWZp bmUgSkVNQUxMT0NfSU5URVJOQUxfRU1BUF9ICisKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5h bC9iYXNlLmgiCisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvcnRyZWUuaCIKKworLyoKKyAq IE5vdGU6IEVuZHMgd2l0aG91dCBhdCBzZW1pY29sb24sIHNvIHRoYXQKKyAqICAgICBFTUFQX0RF Q0xBUkVfUlRSRUVfQ1RYOworICogaW4gdXNlcyB3aWxsIGF2b2lkIGVtcHR5LXN0YXRlbWVudCB3 YXJuaW5ncy4KKyAqLworI2RlZmluZSBFTUFQX0RFQ0xBUkVfUlRSRUVfQ1RYCQkJCQkJXAorICAg IHJ0cmVlX2N0eF90IHJ0cmVlX2N0eF9mYWxsYmFjazsJCQkJCVwKKyAgICBydHJlZV9jdHhfdCAq cnRyZWVfY3R4ID0gdHNkbl9ydHJlZV9jdHgodHNkbiwgJnJ0cmVlX2N0eF9mYWxsYmFjaykKKwor dHlwZWRlZiBzdHJ1Y3QgZW1hcF9zIGVtYXBfdDsKK3N0cnVjdCBlbWFwX3MgeworCXJ0cmVlX3Qg cnRyZWU7Cit9OworCisvKiBVc2VkIHRvIHBhc3MgcnRyZWUgbG9va3VwIGNvbnRleHQgZG93biB0 aGUgcGF0aC4gKi8KK3R5cGVkZWYgc3RydWN0IGVtYXBfYWxsb2NfY3R4X3QgZW1hcF9hbGxvY19j dHhfdDsKK3N0cnVjdCBlbWFwX2FsbG9jX2N0eF90IHsKKwlzemluZF90IHN6aW5kOworCWJvb2wg c2xhYjsKK307CisKK3R5cGVkZWYgc3RydWN0IGVtYXBfZnVsbF9hbGxvY19jdHhfcyBlbWFwX2Z1 bGxfYWxsb2NfY3R4X3Q7CitzdHJ1Y3QgZW1hcF9mdWxsX2FsbG9jX2N0eF9zIHsKKwlzemluZF90 IHN6aW5kOworCWJvb2wgc2xhYjsKKwllZGF0YV90ICplZGF0YTsKK307CisKK2Jvb2wgZW1hcF9p bml0KGVtYXBfdCAqZW1hcCwgYmFzZV90ICpiYXNlLCBib29sIHplcm9lZCk7CisKK3ZvaWQgZW1h cF9yZW1hcCh0c2RuX3QgKnRzZG4sIGVtYXBfdCAqZW1hcCwgZWRhdGFfdCAqZWRhdGEsIHN6aW5k X3Qgc3ppbmQsCisgICAgYm9vbCBzbGFiKTsKKwordm9pZCBlbWFwX3VwZGF0ZV9lZGF0YV9zdGF0 ZSh0c2RuX3QgKnRzZG4sIGVtYXBfdCAqZW1hcCwgZWRhdGFfdCAqZWRhdGEsCisgICAgZXh0ZW50 X3N0YXRlX3Qgc3RhdGUpOworCisvKgorICogVGhlIHR3byBhY3F1aXJlIGZ1bmN0aW9ucyBiZWxv dyBhbGxvdyBhY2Nlc3NpbmcgbmVpZ2hib3IgZWRhdGFzLCBpZiBpdCdzIHNhZmUKKyAqIGFuZCB2 YWxpZCB0byBkbyBzbyAoaS5lLiBmcm9tIHRoZSBzYW1lIGFyZW5hLCBvZiB0aGUgc2FtZSBzdGF0 ZSwgZXRjLikuICBUaGlzCisgKiBpcyBuZWNlc3NhcnkgYmVjYXVzZSB0aGUgZWNhY2hlIGxvY2tz IGFyZSBzdGF0ZSBiYXNlZCwgYW5kIG9ubHkgcHJvdGVjdAorICogZWRhdGFzIHdpdGggdGhlIHNh bWUgc3RhdGUuICBUaGVyZWZvcmUgdGhlIG5laWdoYm9yIGVkYXRhJ3Mgc3RhdGUgbmVlZHMgdG8g YmUKKyAqIHZlcmlmaWVkIGZpcnN0LCBiZWZvcmUgY2hhc2luZyB0aGUgZWRhdGEgcG9pbnRlci4g IFRoZSByZXR1cm5lZCBlZGF0YSB3aWxsIGJlCisgKiBpbiBhbiBhY3F1aXJlZCBzdGF0ZSwgbWVh bmluZyBvdGhlciB0aHJlYWRzIHdpbGwgYmUgcHJldmVudGVkIGZyb20gYWNjZXNzaW5nCisgKiBp dCwgZXZlbiBpZiB0ZWNobmljYWxseSB0aGUgZWRhdGEgY2FuIHN0aWxsIGJlIGRpc2NvdmVyZWQg ZnJvbSB0aGUgcnRyZWUuCisgKgorICogVGhpcyBtZWFucywgYXQgYW55IG1vbWVudCB3aGVuIGhv bGRpbmcgcG9pbnRlcnMgdG8gZWRhdGEsIGVpdGhlciBvbmUgb2YgdGhlCisgKiBzdGF0ZSBiYXNl ZCBsb2NrcyBpcyBoZWxkIChhbmQgdGhlIGVkYXRhcyBhcmUgYWxsIG9mIHRoZSBwcm90ZWN0ZWQg c3RhdGUpLCBvcgorICogdGhlIGVkYXRhcyBhcmUgaW4gYW4gYWNxdWlyZWQgc3RhdGUgKGUuZy4g aW4gYWN0aXZlIG9yIG1lcmdpbmcgc3RhdGUpLiAgVGhlCisgKiBhY3F1aXJlIG9wZXJhdGlvbiBp dHNlbGYgKGNoYW5naW5nIHRoZSBlZGF0YSB0byBhbiBhY3F1aXJlZCBzdGF0ZSkgaXMgZG9uZQor ICogdW5kZXIgdGhlIHN0YXRlIGxvY2tzLgorICovCitlZGF0YV90ICplbWFwX3RyeV9hY3F1aXJl X2VkYXRhX25laWdoYm9yKHRzZG5fdCAqdHNkbiwgZW1hcF90ICplbWFwLAorICAgIGVkYXRhX3Qg KmVkYXRhLCBleHRlbnRfcGFpX3QgcGFpLCBleHRlbnRfc3RhdGVfdCBleHBlY3RlZF9zdGF0ZSwK KyAgICBib29sIGZvcndhcmQpOworZWRhdGFfdCAqZW1hcF90cnlfYWNxdWlyZV9lZGF0YV9uZWln aGJvcl9leHBhbmQodHNkbl90ICp0c2RuLCBlbWFwX3QgKmVtYXAsCisgICAgZWRhdGFfdCAqZWRh dGEsIGV4dGVudF9wYWlfdCBwYWksIGV4dGVudF9zdGF0ZV90IGV4cGVjdGVkX3N0YXRlKTsKK3Zv aWQgZW1hcF9yZWxlYXNlX2VkYXRhKHRzZG5fdCAqdHNkbiwgZW1hcF90ICplbWFwLCBlZGF0YV90 ICplZGF0YSwKKyAgICBleHRlbnRfc3RhdGVfdCBuZXdfc3RhdGUpOworCisvKgorICogQXNzb2Np YXRlIHRoZSBnaXZlbiBlZGF0YSB3aXRoIGl0cyBiZWdpbm5pbmcgYW5kIGVuZCBhZGRyZXNzLCBz ZXR0aW5nIHRoZQorICogc3ppbmQgYW5kIHNsYWIgaW5mbyBhcHByb3ByaWF0ZWx5LgorICogUmV0 dXJucyB0cnVlIG9uIGVycm9yIChpLmUuIHJlc291cmNlIGV4aGF1c3Rpb24pLgorICovCitib29s IGVtYXBfcmVnaXN0ZXJfYm91bmRhcnkodHNkbl90ICp0c2RuLCBlbWFwX3QgKmVtYXAsIGVkYXRh X3QgKmVkYXRhLAorICAgIHN6aW5kX3Qgc3ppbmQsIGJvb2wgc2xhYik7CisKKy8qCisgKiBEb2Vz IHRoZSBzYW1lIHRoaW5nLCBidXQgd2l0aCB0aGUgaW50ZXJpb3Igb2YgdGhlIHJhbmdlLCBmb3Ig c2xhYgorICogYWxsb2NhdGlvbnMuCisgKgorICogWW91IG1pZ2h0IHdvbmRlciB3aHkgd2UgZG9u J3QganVzdCBoYXZlIGEgc2luZ2xlIGVtYXBfcmVnaXN0ZXIgZnVuY3Rpb24gdGhhdAorICogZG9l cyBib3RoIGRlcGVuZGluZyBvbiB0aGUgdmFsdWUgb2YgJ3NsYWInLiAgVGhlIGFuc3dlciBpcyB0 d29mb2xkOgorICogLSBBcyBhIHByYWN0aWNhbCBtYXR0ZXIsIGluIHBsYWNlcyBsaWtlIHRoZSBl eHRyYWN0LT5zcGxpdC0+Y29tbWl0IHBhdGh3YXksCisgKiAgIHdlIGRlZmVyIHRoZSBpbnRlcmlv ciBvcGVyYXRpb24gdW50aWwgd2UncmUgc3VyZSB0aGF0IHRoZSBjb21taXQgd29uJ3QgZmFpbAor ICogICAoYnV0IHdlIGhhdmUgdG8gcmVnaXN0ZXIgdGhlIHNwbGl0IGJvdW5kYXJpZXMgdGhlcmUp LgorICogLSBJbiBnZW5lcmFsLCB3ZSdyZSB0cnlpbmcgdG8gbW92ZSB0byBhIHdvcmxkIHdoZXJl IHRoZSBwYWdlLXNwZWNpZmljCisgKiAgIGFsbG9jYXRvciBkb2Vzbid0IGtub3cgYXMgbXVjaCBh Ym91dCBob3cgdGhlIHBhZ2VzIGl0IGFsbG9jYXRlcyB3aWxsIGJlCisgKiAgIHVzZWQsIGFuZCBw YXNzaW5nIGEgJ3NsYWInIHBhcmFtZXRlciBldmVyeXdoZXJlIG1ha2VzIHRoYXQgbW9yZQorICog ICBjb21wbGljYXRlZC4KKyAqCisgKiBVbmxpa2UgdGhlIGJvdW5kYXJ5IHZlcnNpb24sIHRoaXMg ZnVuY3Rpb24gY2FuJ3QgZmFpbDsgdGhpcyBpcyBiZWNhdXNlIHNsYWJzCisgKiBjYW4ndCBnZXQg YmlnIGVub3VnaCB0byB0b3VjaCBhIG5ldyBwYWdlIHRoYXQgbmVpdGhlciBvZiB0aGUgYm91bmRh cmllcworICogdG91Y2hlZCwgc28gbm8gYWxsb2NhdGlvbiBpcyBuZWNlc3NhcnkgdG8gZmlsbCB0 aGUgaW50ZXJpb3Igb25jZSB0aGUgYm91bmRhcnkKKyAqIGhhcyBiZWVuIHRvdWNoZWQuCisgKi8K K3ZvaWQgZW1hcF9yZWdpc3Rlcl9pbnRlcmlvcih0c2RuX3QgKnRzZG4sIGVtYXBfdCAqZW1hcCwg ZWRhdGFfdCAqZWRhdGEsCisgICAgc3ppbmRfdCBzemluZCk7CisKK3ZvaWQgZW1hcF9kZXJlZ2lz dGVyX2JvdW5kYXJ5KHRzZG5fdCAqdHNkbiwgZW1hcF90ICplbWFwLCBlZGF0YV90ICplZGF0YSk7 Cit2b2lkIGVtYXBfZGVyZWdpc3Rlcl9pbnRlcmlvcih0c2RuX3QgKnRzZG4sIGVtYXBfdCAqZW1h cCwgZWRhdGFfdCAqZWRhdGEpOworCit0eXBlZGVmIHN0cnVjdCBlbWFwX3ByZXBhcmVfcyBlbWFw X3ByZXBhcmVfdDsKK3N0cnVjdCBlbWFwX3ByZXBhcmVfcyB7CisJcnRyZWVfbGVhZl9lbG1fdCAq bGVhZF9lbG1fYTsKKwlydHJlZV9sZWFmX2VsbV90ICpsZWFkX2VsbV9iOworCXJ0cmVlX2xlYWZf ZWxtX3QgKnRyYWlsX2VsbV9hOworCXJ0cmVlX2xlYWZfZWxtX3QgKnRyYWlsX2VsbV9iOworfTsK KworLyoqCisgKiBUaGVzZSBmdW5jdGlvbnMgdGhlIGVtYXAgbWV0YWRhdGEgbWFuYWdlbWVudCBm b3IgbWVyZ2luZywgc3BsaXR0aW5nLCBhbmQKKyAqIHJldXNpbmcgZXh0ZW50cy4gIEluIHBhcnRp Y3VsYXIsIHRoZXkgc2V0IHRoZSBib3VuZGFyeSBtYXBwaW5ncyBmcm9tCisgKiBhZGRyZXNzZXMg dG8gZWRhdGFzLiAgSWYgdGhlIHJlc3VsdCBpcyBnb2luZyB0byBiZSB1c2VkIGFzIGEgc2xhYiwg eW91CisgKiBzdGlsbCBuZWVkIHRvIGNhbGwgZW1hcF9yZWdpc3Rlcl9pbnRlcmlvciBvbiBpdCwg dGhvdWdoLgorICoKKyAqIFJlbWFwIHNpbXBseSBjaGFuZ2VzIHRoZSBzemluZCBhbmQgc2xhYiBz dGF0dXMgb2YgYW4gZXh0ZW50J3MgYm91bmRhcnkKKyAqIG1hcHBpbmdzLiAgSWYgdGhlIGV4dGVu dCBpcyBub3QgYSBzbGFiLCBpdCBkb2Vzbid0IGJvdGhlciB3aXRoIHVwZGF0aW5nIHRoZQorICog ZW5kIG1hcHBpbmcgKHNpbmNlIGxvb2t1cHMgb25seSBvY2N1ciBpbiB0aGUgaW50ZXJpb3Igb2Yg YW4gZXh0ZW50IGZvcgorICogc2xhYnMpLiAgU2luY2UgdGhlIHN6aW5kIGFuZCBzbGFiIHN0YXR1 cyBvbmx5IG1ha2Ugc2Vuc2UgZm9yIGFjdGl2ZSBleHRlbnRzLAorICogdGhpcyBzaG91bGQgb25s eSBiZSBjYWxsZWQgd2hpbGUgYWN0aXZhdGluZyBvciBkZWFjdGl2YXRpbmcgYW4gZXh0ZW50Lgor ICoKKyAqIFNwbGl0IGFuZCBtZXJnZSBoYXZlIGEgInByZXBhcmUiIGFuZCBhICJjb21taXQiIHBv cnRpb24uICBUaGUgcHJlcGFyZSBwb3J0aW9uCisgKiBkb2VzIHRoZSBvcGVyYXRpb25zIHRoYXQg Y2FuIGJlIGRvbmUgd2l0aG91dCBleGNsdXNpdmUgYWNjZXNzIHRvIHRoZSBleHRlbnQKKyAqIGlu IHF1ZXN0aW9uLCB3aGlsZSB0aGUgY29tbWl0IHZhcmlhbnQgcmVxdWlyZXMgZXhjbHVzaXZlIGFj Y2VzcyB0byBtYWludGFpbgorICogdGhlIGVtYXAgaW52YXJpYW50cy4gIFRoZSBvbmx5IGZ1bmN0 aW9uIHRoYXQgY2FuIGZhaWwgaXMgZW1hcF9zcGxpdF9wcmVwYXJlLAorICogYW5kIGl0IHJldHVy bnMgdHJ1ZSBvbiBmYWlsdXJlIChhdCB3aGljaCBwb2ludCB0aGUgY2FsbGVyIHNob3VsZG4ndCBj b21taXQpLgorICoKKyAqIEluIGFsbCBjYXNlcywgImxlYWQiIHJlZmVycyB0byB0aGUgbG93ZXIt YWRkcmVzc2VkIGV4dGVudCwgYW5kIHRyYWlsIHRvIHRoZQorICogaGlnaGVyLWFkZHJlc3NlZCBv bmUuICBJdCdzIHRoZSBjYWxsZXIncyByZXNwb25zaWJpbGl0eSB0byBzZXQgdGhlIGVkYXRhCisg KiBzdGF0ZSBhcHByb3ByaWF0ZWx5LgorICovCitib29sIGVtYXBfc3BsaXRfcHJlcGFyZSh0c2Ru X3QgKnRzZG4sIGVtYXBfdCAqZW1hcCwgZW1hcF9wcmVwYXJlX3QgKnByZXBhcmUsCisgICAgZWRh dGFfdCAqZWRhdGEsIHNpemVfdCBzaXplX2EsIGVkYXRhX3QgKnRyYWlsLCBzaXplX3Qgc2l6ZV9i KTsKK3ZvaWQgZW1hcF9zcGxpdF9jb21taXQodHNkbl90ICp0c2RuLCBlbWFwX3QgKmVtYXAsIGVt YXBfcHJlcGFyZV90ICpwcmVwYXJlLAorICAgIGVkYXRhX3QgKmxlYWQsIHNpemVfdCBzaXplX2Es IGVkYXRhX3QgKnRyYWlsLCBzaXplX3Qgc2l6ZV9iKTsKK3ZvaWQgZW1hcF9tZXJnZV9wcmVwYXJl KHRzZG5fdCAqdHNkbiwgZW1hcF90ICplbWFwLCBlbWFwX3ByZXBhcmVfdCAqcHJlcGFyZSwKKyAg ICBlZGF0YV90ICpsZWFkLCBlZGF0YV90ICp0cmFpbCk7Cit2b2lkIGVtYXBfbWVyZ2VfY29tbWl0 KHRzZG5fdCAqdHNkbiwgZW1hcF90ICplbWFwLCBlbWFwX3ByZXBhcmVfdCAqcHJlcGFyZSwKKyAg ICBlZGF0YV90ICpsZWFkLCBlZGF0YV90ICp0cmFpbCk7CisKKy8qIEFzc2VydCB0aGF0IHRoZSBl bWFwJ3MgdmlldyBvZiB0aGUgZ2l2ZW4gZWRhdGEgbWF0Y2hlcyB0aGUgZWRhdGEncyB2aWV3LiAq Lwordm9pZCBlbWFwX2RvX2Fzc2VydF9tYXBwZWQodHNkbl90ICp0c2RuLCBlbWFwX3QgKmVtYXAs IGVkYXRhX3QgKmVkYXRhKTsKK3N0YXRpYyBpbmxpbmUgdm9pZAorZW1hcF9hc3NlcnRfbWFwcGVk KHRzZG5fdCAqdHNkbiwgZW1hcF90ICplbWFwLCBlZGF0YV90ICplZGF0YSkgeworCWlmIChjb25m aWdfZGVidWcpIHsKKwkJZW1hcF9kb19hc3NlcnRfbWFwcGVkKHRzZG4sIGVtYXAsIGVkYXRhKTsK Kwl9Cit9CisKKy8qIEFzc2VydCB0aGF0IHRoZSBnaXZlbiBlZGF0YSBpc24ndCBpbiB0aGUgbWFw LiAqLwordm9pZCBlbWFwX2RvX2Fzc2VydF9ub3RfbWFwcGVkKHRzZG5fdCAqdHNkbiwgZW1hcF90 ICplbWFwLCBlZGF0YV90ICplZGF0YSk7CitzdGF0aWMgaW5saW5lIHZvaWQKK2VtYXBfYXNzZXJ0 X25vdF9tYXBwZWQodHNkbl90ICp0c2RuLCBlbWFwX3QgKmVtYXAsIGVkYXRhX3QgKmVkYXRhKSB7 CisJaWYgKGNvbmZpZ19kZWJ1ZykgeworCQllbWFwX2RvX2Fzc2VydF9ub3RfbWFwcGVkKHRzZG4s IGVtYXAsIGVkYXRhKTsKKwl9Cit9CisKK0pFTUFMTE9DX0FMV0FZU19JTkxJTkUgYm9vbAorZW1h cF9lZGF0YV9pbl90cmFuc2l0aW9uKHRzZG5fdCAqdHNkbiwgZW1hcF90ICplbWFwLCBlZGF0YV90 ICplZGF0YSkgeworCWFzc2VydChjb25maWdfZGVidWcpOworCWVtYXBfYXNzZXJ0X21hcHBlZCh0 c2RuLCBlbWFwLCBlZGF0YSk7CisKKwlFTUFQX0RFQ0xBUkVfUlRSRUVfQ1RYOworCXJ0cmVlX2Nv bnRlbnRzX3QgY29udGVudHMgPSBydHJlZV9yZWFkKHRzZG4sICZlbWFwLT5ydHJlZSwgcnRyZWVf Y3R4LAorCSAgICAodWludHB0cl90KWVkYXRhX2Jhc2VfZ2V0KGVkYXRhKSk7CisKKwlyZXR1cm4g ZWRhdGFfc3RhdGVfaW5fdHJhbnNpdGlvbihjb250ZW50cy5tZXRhZGF0YS5zdGF0ZSk7Cit9CisK K0pFTUFMTE9DX0FMV0FZU19JTkxJTkUgYm9vbAorZW1hcF9lZGF0YV9pc19hY3F1aXJlZCh0c2Ru X3QgKnRzZG4sIGVtYXBfdCAqZW1hcCwgZWRhdGFfdCAqZWRhdGEpIHsKKwlpZiAoIWNvbmZpZ19k ZWJ1ZykgeworCQkvKiBGb3IgYXNzZXJ0aW9ucyBvbmx5LiAqLworCQlyZXR1cm4gZmFsc2U7CisJ fQorCisJLyoKKwkgKiBUaGUgZWRhdGEgaXMgY29uc2lkZXJlZCBhY3F1aXJlZCBpZiBubyBvdGhl ciB0aHJlYWRzIHdpbGwgYXR0ZW1wdCB0bworCSAqIHJlYWQgLyB3cml0ZSBhbnkgZmllbGRzIGZy b20gaXQuICBUaGlzIGluY2x1ZGVzIGEgZmV3IGNhc2VzOgorCSAqCisJICogMSkgZWRhdGEgbm90 IGhvb2tlZCBpbnRvIGVtYXAgeWV0IC0tIFRoaXMgaW1wbGllcyB0aGUgZWRhdGEganVzdCBnb3QK KwkgKiBhbGxvY2F0ZWQgb3IgaW5pdGlhbGl6ZWQuCisJICoKKwkgKiAyKSBpbiBhbiBhY3RpdmUg b3IgdHJhbnNpdGlvbiBzdGF0ZSAtLSBJbiBib3RoIGNhc2VzLCB0aGUgZWRhdGEgY2FuCisJICog YmUgZGlzY292ZXJlZCBmcm9tIHRoZSBlbWFwLCBob3dldmVyIHRoZSBzdGF0ZSB0cmFja2VkIGlu IHRoZSBydHJlZQorCSAqIHdpbGwgcHJldmVudCBvdGhlciB0aHJlYWRzIGZyb20gYWNjZXNzaW5n IHRoZSBhY3R1YWwgZWRhdGEuCisJICovCisJRU1BUF9ERUNMQVJFX1JUUkVFX0NUWDsKKwlydHJl ZV9sZWFmX2VsbV90ICplbG0gPSBydHJlZV9sZWFmX2VsbV9sb29rdXAodHNkbiwgJmVtYXAtPnJ0 cmVlLAorCSAgICBydHJlZV9jdHgsICh1aW50cHRyX3QpZWRhdGFfYmFzZV9nZXQoZWRhdGEpLCAv KiBkZXBlbmRlbnQgKi8gdHJ1ZSwKKwkgICAgLyogaW5pdF9taXNzaW5nICovIGZhbHNlKTsKKwlp ZiAoZWxtID09IE5VTEwpIHsKKwkJcmV0dXJuIHRydWU7CisJfQorCXJ0cmVlX2NvbnRlbnRzX3Qg Y29udGVudHMgPSBydHJlZV9sZWFmX2VsbV9yZWFkKHRzZG4sICZlbWFwLT5ydHJlZSwgZWxtLAor CSAgICAvKiBkZXBlbmRlbnQgKi8gdHJ1ZSk7CisJaWYgKGNvbnRlbnRzLmVkYXRhID09IE5VTEwg fHwKKwkgICAgY29udGVudHMubWV0YWRhdGEuc3RhdGUgPT0gZXh0ZW50X3N0YXRlX2FjdGl2ZSB8 fAorCSAgICBlZGF0YV9zdGF0ZV9pbl90cmFuc2l0aW9uKGNvbnRlbnRzLm1ldGFkYXRhLnN0YXRl KSkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKK0pFTUFMTE9D X0FMV0FZU19JTkxJTkUgdm9pZAorZXh0ZW50X2Fzc2VydF9jYW5fY29hbGVzY2UoY29uc3QgZWRh dGFfdCAqaW5uZXIsIGNvbnN0IGVkYXRhX3QgKm91dGVyKSB7CisJYXNzZXJ0KGVkYXRhX2FyZW5h X2luZF9nZXQoaW5uZXIpID09IGVkYXRhX2FyZW5hX2luZF9nZXQob3V0ZXIpKTsKKwlhc3NlcnQo ZWRhdGFfcGFpX2dldChpbm5lcikgPT0gZWRhdGFfcGFpX2dldChvdXRlcikpOworCWFzc2VydChl ZGF0YV9jb21taXR0ZWRfZ2V0KGlubmVyKSA9PSBlZGF0YV9jb21taXR0ZWRfZ2V0KG91dGVyKSk7 CisJYXNzZXJ0KGVkYXRhX3N0YXRlX2dldChpbm5lcikgPT0gZXh0ZW50X3N0YXRlX2FjdGl2ZSk7 CisJYXNzZXJ0KGVkYXRhX3N0YXRlX2dldChvdXRlcikgPT0gZXh0ZW50X3N0YXRlX21lcmdpbmcp OworCWFzc2VydCghZWRhdGFfZ3VhcmRlZF9nZXQoaW5uZXIpICYmICFlZGF0YV9ndWFyZGVkX2dl dChvdXRlcikpOworCWFzc2VydChlZGF0YV9iYXNlX2dldChpbm5lcikgPT0gZWRhdGFfcGFzdF9n ZXQob3V0ZXIpIHx8CisJICAgIGVkYXRhX2Jhc2VfZ2V0KG91dGVyKSA9PSBlZGF0YV9wYXN0X2dl dChpbm5lcikpOworfQorCitKRU1BTExPQ19BTFdBWVNfSU5MSU5FIHZvaWQKK2V4dGVudF9hc3Nl cnRfY2FuX2V4cGFuZChjb25zdCBlZGF0YV90ICpvcmlnaW5hbCwgY29uc3QgZWRhdGFfdCAqZXhw YW5kKSB7CisJYXNzZXJ0KGVkYXRhX2FyZW5hX2luZF9nZXQob3JpZ2luYWwpID09IGVkYXRhX2Fy ZW5hX2luZF9nZXQoZXhwYW5kKSk7CisJYXNzZXJ0KGVkYXRhX3BhaV9nZXQob3JpZ2luYWwpID09 IGVkYXRhX3BhaV9nZXQoZXhwYW5kKSk7CisJYXNzZXJ0KGVkYXRhX3N0YXRlX2dldChvcmlnaW5h bCkgPT0gZXh0ZW50X3N0YXRlX2FjdGl2ZSk7CisJYXNzZXJ0KGVkYXRhX3N0YXRlX2dldChleHBh bmQpID09IGV4dGVudF9zdGF0ZV9tZXJnaW5nKTsKKwlhc3NlcnQoZWRhdGFfcGFzdF9nZXQob3Jp Z2luYWwpID09IGVkYXRhX2Jhc2VfZ2V0KGV4cGFuZCkpOworfQorCitKRU1BTExPQ19BTFdBWVNf SU5MSU5FIGVkYXRhX3QgKgorZW1hcF9lZGF0YV9sb29rdXAodHNkbl90ICp0c2RuLCBlbWFwX3Qg KmVtYXAsIGNvbnN0IHZvaWQgKnB0cikgeworCUVNQVBfREVDTEFSRV9SVFJFRV9DVFg7CisKKwly ZXR1cm4gcnRyZWVfcmVhZCh0c2RuLCAmZW1hcC0+cnRyZWUsIHJ0cmVlX2N0eCwgKHVpbnRwdHJf dClwdHIpLmVkYXRhOworfQorCisvKiBGaWxscyBpbiBhbGxvY19jdHggd2l0aCB0aGUgaW5mbyBp biB0aGUgbWFwLiAqLworSkVNQUxMT0NfQUxXQVlTX0lOTElORSB2b2lkCitlbWFwX2FsbG9jX2N0 eF9sb29rdXAodHNkbl90ICp0c2RuLCBlbWFwX3QgKmVtYXAsIGNvbnN0IHZvaWQgKnB0ciwKKyAg ICBlbWFwX2FsbG9jX2N0eF90ICphbGxvY19jdHgpIHsKKwlFTUFQX0RFQ0xBUkVfUlRSRUVfQ1RY OworCisJcnRyZWVfbWV0YWRhdGFfdCBtZXRhZGF0YSA9IHJ0cmVlX21ldGFkYXRhX3JlYWQodHNk biwgJmVtYXAtPnJ0cmVlLAorCSAgICBydHJlZV9jdHgsICh1aW50cHRyX3QpcHRyKTsKKwlhbGxv Y19jdHgtPnN6aW5kID0gbWV0YWRhdGEuc3ppbmQ7CisJYWxsb2NfY3R4LT5zbGFiID0gbWV0YWRh dGEuc2xhYjsKK30KKworLyogVGhlIHBvaW50ZXIgbXVzdCBiZSBtYXBwZWQuICovCitKRU1BTExP Q19BTFdBWVNfSU5MSU5FIHZvaWQKK2VtYXBfZnVsbF9hbGxvY19jdHhfbG9va3VwKHRzZG5fdCAq dHNkbiwgZW1hcF90ICplbWFwLCBjb25zdCB2b2lkICpwdHIsCisgICAgZW1hcF9mdWxsX2FsbG9j X2N0eF90ICpmdWxsX2FsbG9jX2N0eCkgeworCUVNQVBfREVDTEFSRV9SVFJFRV9DVFg7CisKKwly dHJlZV9jb250ZW50c190IGNvbnRlbnRzID0gcnRyZWVfcmVhZCh0c2RuLCAmZW1hcC0+cnRyZWUs IHJ0cmVlX2N0eCwKKwkgICAgKHVpbnRwdHJfdClwdHIpOworCWZ1bGxfYWxsb2NfY3R4LT5lZGF0 YSA9IGNvbnRlbnRzLmVkYXRhOworCWZ1bGxfYWxsb2NfY3R4LT5zemluZCA9IGNvbnRlbnRzLm1l dGFkYXRhLnN6aW5kOworCWZ1bGxfYWxsb2NfY3R4LT5zbGFiID0gY29udGVudHMubWV0YWRhdGEu c2xhYjsKK30KKworLyoKKyAqIFRoZSBwb2ludGVyIGlzIGFsbG93ZWQgdG8gbm90IGJlIG1hcHBl ZC4KKyAqCisgKiBSZXR1cm5zIHRydWUgd2hlbiB0aGUgcG9pbnRlciBpcyBub3QgcHJlc2VudC4K KyAqLworSkVNQUxMT0NfQUxXQVlTX0lOTElORSBib29sCitlbWFwX2Z1bGxfYWxsb2NfY3R4X3Ry eV9sb29rdXAodHNkbl90ICp0c2RuLCBlbWFwX3QgKmVtYXAsIGNvbnN0IHZvaWQgKnB0ciwKKyAg ICBlbWFwX2Z1bGxfYWxsb2NfY3R4X3QgKmZ1bGxfYWxsb2NfY3R4KSB7CisJRU1BUF9ERUNMQVJF X1JUUkVFX0NUWDsKKworCXJ0cmVlX2NvbnRlbnRzX3QgY29udGVudHM7CisJYm9vbCBlcnIgPSBy dHJlZV9yZWFkX2luZGVwZW5kZW50KHRzZG4sICZlbWFwLT5ydHJlZSwgcnRyZWVfY3R4LAorCSAg ICAodWludHB0cl90KXB0ciwgJmNvbnRlbnRzKTsKKwlpZiAoZXJyKSB7CisJCXJldHVybiB0cnVl OworCX0KKwlmdWxsX2FsbG9jX2N0eC0+ZWRhdGEgPSBjb250ZW50cy5lZGF0YTsKKwlmdWxsX2Fs bG9jX2N0eC0+c3ppbmQgPSBjb250ZW50cy5tZXRhZGF0YS5zemluZDsKKwlmdWxsX2FsbG9jX2N0 eC0+c2xhYiA9IGNvbnRlbnRzLm1ldGFkYXRhLnNsYWI7CisJcmV0dXJuIGZhbHNlOworfQorCisv KgorICogT25seSB1c2VkIG9uIHRoZSBmYXN0cGF0aCBvZiBmcmVlLiAgUmV0dXJucyB0cnVlIHdo ZW4gY2Fubm90IGJlIGZ1bGZpbGxlZCBieQorICogZmFzdCBwYXRoLCBlLmcuIHdoZW4gdGhlIG1l dGFkYXRhIGtleSBpcyBub3QgY2FjaGVkLgorICovCitKRU1BTExPQ19BTFdBWVNfSU5MSU5FIGJv b2wKK2VtYXBfYWxsb2NfY3R4X3RyeV9sb29rdXBfZmFzdCh0c2RfdCAqdHNkLCBlbWFwX3QgKmVt YXAsIGNvbnN0IHZvaWQgKnB0ciwKKyAgICBlbWFwX2FsbG9jX2N0eF90ICphbGxvY19jdHgpIHsK KwkvKiBVc2UgdGhlIHVuc2FmZSBnZXR0ZXIgc2luY2UgdGhpcyBtYXkgZ2V0cyBjYWxsZWQgZHVy aW5nIGV4aXQuICovCisJcnRyZWVfY3R4X3QgKnJ0cmVlX2N0eCA9IHRzZF9ydHJlZV9jdHhwX2dl dF91bnNhZmUodHNkKTsKKworCXJ0cmVlX21ldGFkYXRhX3QgbWV0YWRhdGE7CisJYm9vbCBlcnIg PSBydHJlZV9tZXRhZGF0YV90cnlfcmVhZF9mYXN0KHRzZF90c2RuKHRzZCksICZlbWFwLT5ydHJl ZSwKKwkgICAgcnRyZWVfY3R4LCAodWludHB0cl90KXB0ciwgJm1ldGFkYXRhKTsKKwlpZiAoZXJy KSB7CisJCXJldHVybiB0cnVlOworCX0KKwlhbGxvY19jdHgtPnN6aW5kID0gbWV0YWRhdGEuc3pp bmQ7CisJYWxsb2NfY3R4LT5zbGFiID0gbWV0YWRhdGEuc2xhYjsKKwlyZXR1cm4gZmFsc2U7Cit9 CisKKy8qCisgKiBXZSB3YW50IHRvIGRvIGJhdGNoIGxvb2t1cHMgb3V0IG9mIHRoZSBjYWNoZSBi aW5zLCB3aGljaCB1c2UKKyAqIGNhY2hlX2Jpbl9wdHJfYXJyYXlfZ2V0IHRvIGFjY2VzcyB0aGUg aSd0aCBlbGVtZW50IG9mIHRoZSBiaW4gKHNpbmNlIHRoZXkKKyAqIGludmVydCB1c3VhbCBvcmRl cmluZyBpbiBkZWNpZGluZyB3aGF0IHRvIGZsdXNoKS4gIFRoaXMgbGV0cyB0aGUgZW1hcCBhdm9p ZAorICogY2FyaW5nIGFib3V0IGl0cyBjYWxsZXIncyBvcmRlcmluZy4KKyAqLwordHlwZWRlZiBj b25zdCB2b2lkICooKmVtYXBfcHRyX2dldHRlcikodm9pZCAqY3R4LCBzaXplX3QgaW5kKTsKKy8q CisgKiBUaGlzIGFsbG93cyBzaXplLWNoZWNraW5nIGFzc2VydGlvbnMsIHdoaWNoIHdlIGNhbiBv bmx5IGRvIHdoaWxlIHdlJ3JlIGluIHRoZQorICogcHJvY2VzcyBvZiBlZGF0YSBsb29rdXBzLgor ICovCit0eXBlZGVmIHZvaWQgKCplbWFwX21ldGFkYXRhX3Zpc2l0b3IpKHZvaWQgKmN0eCwgZW1h cF9mdWxsX2FsbG9jX2N0eF90ICphbGxvY19jdHgpOworCit0eXBlZGVmIHVuaW9uIGVtYXBfYmF0 Y2hfbG9va3VwX3Jlc3VsdF91IGVtYXBfYmF0Y2hfbG9va3VwX3Jlc3VsdF90OwordW5pb24gZW1h cF9iYXRjaF9sb29rdXBfcmVzdWx0X3UgeworCWVkYXRhX3QgKmVkYXRhOworCXJ0cmVlX2xlYWZf ZWxtX3QgKnJ0cmVlX2xlYWY7Cit9OworCitKRU1BTExPQ19BTFdBWVNfSU5MSU5FIHZvaWQKK2Vt YXBfZWRhdGFfbG9va3VwX2JhdGNoKHRzZF90ICp0c2QsIGVtYXBfdCAqZW1hcCwgc2l6ZV90IG5w dHJzLAorICAgIGVtYXBfcHRyX2dldHRlciBwdHJfZ2V0dGVyLCB2b2lkICpwdHJfZ2V0dGVyX2N0 eCwKKyAgICBlbWFwX21ldGFkYXRhX3Zpc2l0b3IgbWV0YWRhdGFfdmlzaXRvciwgdm9pZCAqbWV0 YWRhdGFfdmlzaXRvcl9jdHgsCisgICAgZW1hcF9iYXRjaF9sb29rdXBfcmVzdWx0X3QgKnJlc3Vs dCkgeworCS8qIEF2b2lkcyBudWxsLWNoZWNraW5nIHRzZG4gaW4gdGhlIGxvb3AgYmVsb3cuICov CisJdXRpbF9hc3N1bWUodHNkICE9IE5VTEwpOworCXJ0cmVlX2N0eF90ICpydHJlZV9jdHggPSB0 c2RfcnRyZWVfY3R4cF9nZXQodHNkKTsKKworCWZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnB0cnM7 IGkrKykgeworCQljb25zdCB2b2lkICpwdHIgPSBwdHJfZ2V0dGVyKHB0cl9nZXR0ZXJfY3R4LCBp KTsKKwkJLyoKKwkJICogUmV1c2UgdGhlIGVkYXRhcyBhcnJheSBhcyBhIHRlbXAgYnVmZmVyLCBs eWluZyBhIGxpdHRsZSBhYm91dAorCQkgKiB0aGUgdHlwZXMuCisJCSAqLworCQlyZXN1bHRbaV0u cnRyZWVfbGVhZiA9IHJ0cmVlX2xlYWZfZWxtX2xvb2t1cCh0c2RfdHNkbih0c2QpLAorCQkgICAg JmVtYXAtPnJ0cmVlLCBydHJlZV9jdHgsICh1aW50cHRyX3QpcHRyLAorCQkgICAgLyogZGVwZW5k ZW50ICovIHRydWUsIC8qIGluaXRfbWlzc2luZyAqLyBmYWxzZSk7CisJfQorCisJZm9yIChzaXpl X3QgaSA9IDA7IGkgPCBucHRyczsgaSsrKSB7CisJCXJ0cmVlX2xlYWZfZWxtX3QgKmVsbSA9IHJl c3VsdFtpXS5ydHJlZV9sZWFmOworCQlydHJlZV9jb250ZW50c190IGNvbnRlbnRzID0gcnRyZWVf bGVhZl9lbG1fcmVhZCh0c2RfdHNkbih0c2QpLAorCQkgICAgJmVtYXAtPnJ0cmVlLCBlbG0sIC8q IGRlcGVuZGVudCAqLyB0cnVlKTsKKwkJcmVzdWx0W2ldLmVkYXRhID0gY29udGVudHMuZWRhdGE7 CisJCWVtYXBfZnVsbF9hbGxvY19jdHhfdCBhbGxvY19jdHg7CisJCS8qCisJCSAqIE5vdCBhbGwg dGhlc2UgZmllbGRzIGFyZSByZWFkIGluIHByYWN0aWNlIGJ5IHRoZSBtZXRhZGF0YQorCQkgKiB2 aXNpdG9yLiAgQnV0IHRoZSBjb21waWxlciBjYW4gZWFzaWx5IG9wdGltaXplIGF3YXkgdGhlIG9u ZXMKKwkJICogdGhhdCBhcmVuJ3QsIHNvIG5vIHNlbnNlIGluIGJlaW5nIGluY29tcGxldGUuCisJ CSAqLworCQlhbGxvY19jdHguc3ppbmQgPSBjb250ZW50cy5tZXRhZGF0YS5zemluZDsKKwkJYWxs b2NfY3R4LnNsYWIgPSBjb250ZW50cy5tZXRhZGF0YS5zbGFiOworCQlhbGxvY19jdHguZWRhdGEg PSBjb250ZW50cy5lZGF0YTsKKwkJbWV0YWRhdGFfdmlzaXRvcihtZXRhZGF0YV92aXNpdG9yX2N0 eCwgJmFsbG9jX2N0eCk7CisJfQorfQorCisjZW5kaWYgLyogSkVNQUxMT0NfSU5URVJOQUxfRU1B UF9IICovCgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4z LjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9lbWl0dGVyLmggYi8zODktZHMtYmFzZS0zLjMu MC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL2VtaXR0ZXIu aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDgyZjY4Ci0tLSAvZGV2L251 bGwKKysrIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9q ZW1hbGxvYy9pbnRlcm5hbC9lbWl0dGVyLmgKQEAgLTAsMCArMSw1MTAgQEAKKyNpZm5kZWYgSkVN QUxMT0NfSU5URVJOQUxfRU1JVFRFUl9ICisjZGVmaW5lIEpFTUFMTE9DX0lOVEVSTkFMX0VNSVRU RVJfSAorCisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvcWwuaCIKKwordHlwZWRlZiBlbnVt IGVtaXR0ZXJfb3V0cHV0X2UgZW1pdHRlcl9vdXRwdXRfdDsKK2VudW0gZW1pdHRlcl9vdXRwdXRf ZSB7CisJZW1pdHRlcl9vdXRwdXRfanNvbiwKKwllbWl0dGVyX291dHB1dF9qc29uX2NvbXBhY3Qs CisJZW1pdHRlcl9vdXRwdXRfdGFibGUKK307CisKK3R5cGVkZWYgZW51bSBlbWl0dGVyX2p1c3Rp ZnlfZSBlbWl0dGVyX2p1c3RpZnlfdDsKK2VudW0gZW1pdHRlcl9qdXN0aWZ5X2UgeworCWVtaXR0 ZXJfanVzdGlmeV9sZWZ0LAorCWVtaXR0ZXJfanVzdGlmeV9yaWdodCwKKwkvKiBOb3QgZm9yIHVz ZXJzOyBqdXN0IHRvIHBhc3MgdG8gaW50ZXJuYWwgZnVuY3Rpb25zLiAqLworCWVtaXR0ZXJfanVz dGlmeV9ub25lCit9OworCit0eXBlZGVmIGVudW0gZW1pdHRlcl90eXBlX2UgZW1pdHRlcl90eXBl X3Q7CitlbnVtIGVtaXR0ZXJfdHlwZV9lIHsKKwllbWl0dGVyX3R5cGVfYm9vbCwKKwllbWl0dGVy X3R5cGVfaW50LAorCWVtaXR0ZXJfdHlwZV9pbnQ2NCwKKwllbWl0dGVyX3R5cGVfdW5zaWduZWQs CisJZW1pdHRlcl90eXBlX3VpbnQzMiwKKwllbWl0dGVyX3R5cGVfdWludDY0LAorCWVtaXR0ZXJf dHlwZV9zaXplLAorCWVtaXR0ZXJfdHlwZV9zc2l6ZSwKKwllbWl0dGVyX3R5cGVfc3RyaW5nLAor CS8qCisJICogQSB0aXRsZSBpcyBhIGNvbHVtbiB0aXRsZSBpbiBhIHRhYmxlOyBpdCdzIGp1c3Qg YSBzdHJpbmcsIGJ1dCBpdCdzCisJICogbm90IHF1b3RlZC4KKwkgKi8KKwllbWl0dGVyX3R5cGVf dGl0bGUsCit9OworCit0eXBlZGVmIHN0cnVjdCBlbWl0dGVyX2NvbF9zIGVtaXR0ZXJfY29sX3Q7 CitzdHJ1Y3QgZW1pdHRlcl9jb2xfcyB7CisJLyogRmlsbGVkIGluIGJ5IHRoZSB1c2VyLiAqLwor CWVtaXR0ZXJfanVzdGlmeV90IGp1c3RpZnk7CisJaW50IHdpZHRoOworCWVtaXR0ZXJfdHlwZV90 IHR5cGU7CisJdW5pb24geworCQlib29sIGJvb2xfdmFsOworCQlpbnQgaW50X3ZhbDsKKwkJdW5z aWduZWQgdW5zaWduZWRfdmFsOworCQl1aW50MzJfdCB1aW50MzJfdmFsOworCQl1aW50MzJfdCB1 aW50MzJfdF92YWw7CisJCXVpbnQ2NF90IHVpbnQ2NF92YWw7CisJCXVpbnQ2NF90IHVpbnQ2NF90 X3ZhbDsKKwkJc2l6ZV90IHNpemVfdmFsOworCQlzc2l6ZV90IHNzaXplX3ZhbDsKKwkJY29uc3Qg Y2hhciAqc3RyX3ZhbDsKKwl9OworCisJLyogRmlsbGVkIGluIGJ5IGluaXRpYWxpemF0aW9uLiAq LworCXFsX2VsbShlbWl0dGVyX2NvbF90KSBsaW5rOworfTsKKwordHlwZWRlZiBzdHJ1Y3QgZW1p dHRlcl9yb3dfcyBlbWl0dGVyX3Jvd190Oworc3RydWN0IGVtaXR0ZXJfcm93X3MgeworCXFsX2hl YWQoZW1pdHRlcl9jb2xfdCkgY29sczsKK307CisKK3R5cGVkZWYgc3RydWN0IGVtaXR0ZXJfcyBl bWl0dGVyX3Q7CitzdHJ1Y3QgZW1pdHRlcl9zIHsKKwllbWl0dGVyX291dHB1dF90IG91dHB1dDsK KwkvKiBUaGUgb3V0cHV0IGluZm9ybWF0aW9uLiAqLworCXdyaXRlX2NiX3QgKndyaXRlX2NiOwor CXZvaWQgKmNib3BhcXVlOworCWludCBuZXN0aW5nX2RlcHRoOworCS8qIFRydWUgaWYgd2UndmUg YWxyZWFkeSBlbWl0dGVkIGEgdmFsdWUgYXQgdGhlIGdpdmVuIGRlcHRoLiAqLworCWJvb2wgaXRl bV9hdF9kZXB0aDsKKwkvKiBUcnVlIGlmIHdlIGVtaXR0ZWQgYSBrZXkgYW5kIHdpbGwgZW1pdCBj b3JyZXNwb25kaW5nIHZhbHVlIG5leHQuICovCisJYm9vbCBlbWl0dGVkX2tleTsKK307CisKK3N0 YXRpYyBpbmxpbmUgYm9vbAorZW1pdHRlcl9vdXRwdXRzX2pzb24oZW1pdHRlcl90ICplbWl0dGVy KSB7CisJcmV0dXJuIGVtaXR0ZXItPm91dHB1dCA9PSBlbWl0dGVyX291dHB1dF9qc29uIHx8CisJ ICAgIGVtaXR0ZXItPm91dHB1dCA9PSBlbWl0dGVyX291dHB1dF9qc29uX2NvbXBhY3Q7Cit9CisK Ky8qIEludGVybmFsIGNvbnZlbmllbmNlIGZ1bmN0aW9uLiAgV3JpdGUgdG8gdGhlIGVtaXR0ZXIg dGhlIGdpdmVuIHN0cmluZy4gKi8KK0pFTUFMTE9DX0ZPUk1BVF9QUklOVEYoMiwgMykKK3N0YXRp YyBpbmxpbmUgdm9pZAorZW1pdHRlcl9wcmludGYoZW1pdHRlcl90ICplbWl0dGVyLCBjb25zdCBj aGFyICpmb3JtYXQsIC4uLikgeworCXZhX2xpc3QgYXA7CisKKwl2YV9zdGFydChhcCwgZm9ybWF0 KTsKKwltYWxsb2NfdmNwcmludGYoZW1pdHRlci0+d3JpdGVfY2IsIGVtaXR0ZXItPmNib3BhcXVl LCBmb3JtYXQsIGFwKTsKKwl2YV9lbmQoYXApOworfQorCitzdGF0aWMgaW5saW5lIGNvbnN0IGNo YXIgKiBKRU1BTExPQ19GT1JNQVRfQVJHKDMpCitlbWl0dGVyX2dlbl9mbXQoY2hhciAqb3V0X2Zt dCwgc2l6ZV90IG91dF9zaXplLCBjb25zdCBjaGFyICpmbXRfc3BlY2lmaWVyLAorICAgIGVtaXR0 ZXJfanVzdGlmeV90IGp1c3RpZnksIGludCB3aWR0aCkgeworCXNpemVfdCB3cml0dGVuOworCWZt dF9zcGVjaWZpZXIrKzsKKwlpZiAoanVzdGlmeSA9PSBlbWl0dGVyX2p1c3RpZnlfbm9uZSkgewor CQl3cml0dGVuID0gbWFsbG9jX3NucHJpbnRmKG91dF9mbXQsIG91dF9zaXplLAorCQkgICAgIiUl JXMiLCBmbXRfc3BlY2lmaWVyKTsKKwl9IGVsc2UgaWYgKGp1c3RpZnkgPT0gZW1pdHRlcl9qdXN0 aWZ5X2xlZnQpIHsKKwkJd3JpdHRlbiA9IG1hbGxvY19zbnByaW50ZihvdXRfZm10LCBvdXRfc2l6 ZSwKKwkJICAgICIlJS0lZCVzIiwgd2lkdGgsIGZtdF9zcGVjaWZpZXIpOworCX0gZWxzZSB7CisJ CXdyaXR0ZW4gPSBtYWxsb2Nfc25wcmludGYob3V0X2ZtdCwgb3V0X3NpemUsCisJCSAgICAiJSUl ZCVzIiwgd2lkdGgsIGZtdF9zcGVjaWZpZXIpOworCX0KKwkvKiBPbmx5IGhhcHBlbnMgaW4gY2Fz ZSBvZiBiYWQgZm9ybWF0IHN0cmluZywgd2hpY2ggKndlKiBjaG9vc2UuICovCisJYXNzZXJ0KHdy aXR0ZW4gPCAgb3V0X3NpemUpOworCXJldHVybiBvdXRfZm10OworfQorCisvKgorICogSW50ZXJu YWwuICBFbWl0IHRoZSBnaXZlbiB2YWx1ZSB0eXBlIGluIHRoZSByZWxldmFudCBlbmNvZGluZyAo c28gdGhhdCB0aGUKKyAqIGJvb2wgdHJ1ZSBnZXRzIG1hcHBlZCB0byBqc29uICJ0cnVlIiwgYnV0 IHRoZSBzdHJpbmcgInRydWUiIGdldHMgbWFwcGVkIHRvCisgKiBqc29uICJcInRydWVcIiIsIGZv ciBpbnN0YW5jZS4KKyAqCisgKiBXaWR0aCBpcyBpZ25vcmVkIGlmIGp1c3RpZnkgaXMgZW1pdHRl cl9qdXN0aWZ5X25vbmUuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorZW1pdHRlcl9wcmludF92 YWx1ZShlbWl0dGVyX3QgKmVtaXR0ZXIsIGVtaXR0ZXJfanVzdGlmeV90IGp1c3RpZnksIGludCB3 aWR0aCwKKyAgICBlbWl0dGVyX3R5cGVfdCB2YWx1ZV90eXBlLCBjb25zdCB2b2lkICp2YWx1ZSkg eworCXNpemVfdCBzdHJfd3JpdHRlbjsKKyNkZWZpbmUgQlVGX1NJWkUgMjU2CisjZGVmaW5lIEZN VF9TSVpFIDEwCisJLyoKKwkgKiBXZSBkeW5hbWljYWxseSBnZW5lcmF0ZSBhIGZvcm1hdCBzdHJp bmcgdG8gZW1pdCwgdG8gbGV0IHVzIHVzZSB0aGUKKwkgKiBzbnByaW50ZiBtYWNoaW5lcnkuICBU aGlzIGlzIGtpbmRhIGhhY2t5LCBidXQgZ2V0cyB0aGUgam9iIGRvbmUKKwkgKiBxdWlja2x5IHdp dGhvdXQgaGF2aW5nIHRvIHRoaW5rIGFib3V0IHRoZSB2YXJpb3VzIHNucHJpbnRmIGVkZ2UKKwkg KiBjYXNlcy4KKwkgKi8KKwljaGFyIGZtdFtGTVRfU0laRV07CisJY2hhciBidWZbQlVGX1NJWkVd OworCisjZGVmaW5lIEVNSVRfU0lNUExFKHR5cGUsIGZvcm1hdCkJCQkJCVwKKwllbWl0dGVyX3By aW50ZihlbWl0dGVyLAkJCQkJCVwKKwkgICAgZW1pdHRlcl9nZW5fZm10KGZtdCwgRk1UX1NJWkUs IGZvcm1hdCwganVzdGlmeSwgd2lkdGgpLAlcCisJICAgICooY29uc3QgdHlwZSAqKXZhbHVlKTsK KworCXN3aXRjaCAodmFsdWVfdHlwZSkgeworCWNhc2UgZW1pdHRlcl90eXBlX2Jvb2w6CisJCWVt aXR0ZXJfcHJpbnRmKGVtaXR0ZXIsCisJCSAgICBlbWl0dGVyX2dlbl9mbXQoZm10LCBGTVRfU0la RSwgIiVzIiwganVzdGlmeSwgd2lkdGgpLAorCQkgICAgKihjb25zdCBib29sICopdmFsdWUgPyAg InRydWUiIDogImZhbHNlIik7CisJCWJyZWFrOworCWNhc2UgZW1pdHRlcl90eXBlX2ludDoKKwkJ RU1JVF9TSU1QTEUoaW50LCAiJWQiKQorCQlicmVhazsKKwljYXNlIGVtaXR0ZXJfdHlwZV9pbnQ2 NDoKKwkJRU1JVF9TSU1QTEUoaW50NjRfdCwgIiUiIEZNVGQ2NCkKKwkJYnJlYWs7CisJY2FzZSBl bWl0dGVyX3R5cGVfdW5zaWduZWQ6CisJCUVNSVRfU0lNUExFKHVuc2lnbmVkLCAiJXUiKQorCQli cmVhazsKKwljYXNlIGVtaXR0ZXJfdHlwZV9zc2l6ZToKKwkJRU1JVF9TSU1QTEUoc3NpemVfdCwg IiV6ZCIpCisJCWJyZWFrOworCWNhc2UgZW1pdHRlcl90eXBlX3NpemU6CisJCUVNSVRfU0lNUExF KHNpemVfdCwgIiV6dSIpCisJCWJyZWFrOworCWNhc2UgZW1pdHRlcl90eXBlX3N0cmluZzoKKwkJ c3RyX3dyaXR0ZW4gPSBtYWxsb2Nfc25wcmludGYoYnVmLCBCVUZfU0laRSwgIlwiJXNcIiIsCisJ CSAgICAqKGNvbnN0IGNoYXIgKmNvbnN0ICopdmFsdWUpOworCQkvKgorCQkgKiBXZSBjb250cm9s IHRoZSBzdHJpbmdzIHdlIG91dHB1dDsgd2Ugc2hvdWxkbid0IGdldCBhbnl0aGluZworCQkgKiBh bnl3aGVyZSBuZWFyIHRoZSBmbXQgc2l6ZS4KKwkJICovCisJCWFzc2VydChzdHJfd3JpdHRlbiA8 IEJVRl9TSVpFKTsKKwkJZW1pdHRlcl9wcmludGYoZW1pdHRlciwKKwkJICAgIGVtaXR0ZXJfZ2Vu X2ZtdChmbXQsIEZNVF9TSVpFLCAiJXMiLCBqdXN0aWZ5LCB3aWR0aCksIGJ1Zik7CisJCWJyZWFr OworCWNhc2UgZW1pdHRlcl90eXBlX3VpbnQzMjoKKwkJRU1JVF9TSU1QTEUodWludDMyX3QsICIl IiBGTVR1MzIpCisJCWJyZWFrOworCWNhc2UgZW1pdHRlcl90eXBlX3VpbnQ2NDoKKwkJRU1JVF9T SU1QTEUodWludDY0X3QsICIlIiBGTVR1NjQpCisJCWJyZWFrOworCWNhc2UgZW1pdHRlcl90eXBl X3RpdGxlOgorCQlFTUlUX1NJTVBMRShjaGFyICpjb25zdCwgIiVzIik7CisJCWJyZWFrOworCWRl ZmF1bHQ6CisJCXVucmVhY2hhYmxlKCk7CisJfQorI3VuZGVmIEJVRl9TSVpFCisjdW5kZWYgRk1U X1NJWkUKK30KKworCisvKiBJbnRlcm5hbCBmdW5jdGlvbnMuICBJbiBqc29uIG1vZGUsIHRyYWNr cyBuZXN0aW5nIHN0YXRlLiAqLworc3RhdGljIGlubGluZSB2b2lkCitlbWl0dGVyX25lc3RfaW5j KGVtaXR0ZXJfdCAqZW1pdHRlcikgeworCWVtaXR0ZXItPm5lc3RpbmdfZGVwdGgrKzsKKwllbWl0 dGVyLT5pdGVtX2F0X2RlcHRoID0gZmFsc2U7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZW1p dHRlcl9uZXN0X2RlYyhlbWl0dGVyX3QgKmVtaXR0ZXIpIHsKKwllbWl0dGVyLT5uZXN0aW5nX2Rl cHRoLS07CisJZW1pdHRlci0+aXRlbV9hdF9kZXB0aCA9IHRydWU7Cit9CisKK3N0YXRpYyBpbmxp bmUgdm9pZAorZW1pdHRlcl9pbmRlbnQoZW1pdHRlcl90ICplbWl0dGVyKSB7CisJaW50IGFtb3Vu dCA9IGVtaXR0ZXItPm5lc3RpbmdfZGVwdGg7CisJY29uc3QgY2hhciAqaW5kZW50X3N0cjsKKwlh c3NlcnQoZW1pdHRlci0+b3V0cHV0ICE9IGVtaXR0ZXJfb3V0cHV0X2pzb25fY29tcGFjdCk7CisJ aWYgKGVtaXR0ZXItPm91dHB1dCA9PSBlbWl0dGVyX291dHB1dF9qc29uKSB7CisJCWluZGVudF9z dHIgPSAiXHQiOworCX0gZWxzZSB7CisJCWFtb3VudCAqPSAyOworCQlpbmRlbnRfc3RyID0gIiAi OworCX0KKwlmb3IgKGludCBpID0gMDsgaSA8IGFtb3VudDsgaSsrKSB7CisJCWVtaXR0ZXJfcHJp bnRmKGVtaXR0ZXIsICIlcyIsIGluZGVudF9zdHIpOworCX0KK30KKworc3RhdGljIGlubGluZSB2 b2lkCitlbWl0dGVyX2pzb25fa2V5X3ByZWZpeChlbWl0dGVyX3QgKmVtaXR0ZXIpIHsKKwlhc3Nl cnQoZW1pdHRlcl9vdXRwdXRzX2pzb24oZW1pdHRlcikpOworCWlmIChlbWl0dGVyLT5lbWl0dGVk X2tleSkgeworCQllbWl0dGVyLT5lbWl0dGVkX2tleSA9IGZhbHNlOworCQlyZXR1cm47CisJfQor CWlmIChlbWl0dGVyLT5pdGVtX2F0X2RlcHRoKSB7CisJCWVtaXR0ZXJfcHJpbnRmKGVtaXR0ZXIs ICIsIik7CisJfQorCWlmIChlbWl0dGVyLT5vdXRwdXQgIT0gZW1pdHRlcl9vdXRwdXRfanNvbl9j b21wYWN0KSB7CisJCWVtaXR0ZXJfcHJpbnRmKGVtaXR0ZXIsICJcbiIpOworCQllbWl0dGVyX2lu ZGVudChlbWl0dGVyKTsKKwl9Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBQdWJs aWMgZnVuY3Rpb25zIGZvciBlbWl0dGVyX3QuICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZW1p dHRlcl9pbml0KGVtaXR0ZXJfdCAqZW1pdHRlciwgZW1pdHRlcl9vdXRwdXRfdCBlbWl0dGVyX291 dHB1dCwKKyAgICB3cml0ZV9jYl90ICp3cml0ZV9jYiwgdm9pZCAqY2JvcGFxdWUpIHsKKwllbWl0 dGVyLT5vdXRwdXQgPSBlbWl0dGVyX291dHB1dDsKKwllbWl0dGVyLT53cml0ZV9jYiA9IHdyaXRl X2NiOworCWVtaXR0ZXItPmNib3BhcXVlID0gY2JvcGFxdWU7CisJZW1pdHRlci0+aXRlbV9hdF9k ZXB0aCA9IGZhbHNlOworCWVtaXR0ZXItPmVtaXR0ZWRfa2V5ID0gZmFsc2U7CisJZW1pdHRlci0+ bmVzdGluZ19kZXB0aCA9IDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBKU09O IHB1YmxpYyBBUEkuICovCisKKy8qCisgKiBFbWl0cyBhIGtleSAoZS5nLiBhcyBhcHBlYXJzIGlu IGFuIG9iamVjdCkuIFRoZSBuZXh0IGpzb24gZW50aXR5IGVtaXR0ZWQgd2lsbAorICogYmUgdGhl IGNvcnJlc3BvbmRpbmcgdmFsdWUuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorZW1pdHRlcl9q c29uX2tleShlbWl0dGVyX3QgKmVtaXR0ZXIsIGNvbnN0IGNoYXIgKmpzb25fa2V5KSB7CisJaWYg KGVtaXR0ZXJfb3V0cHV0c19qc29uKGVtaXR0ZXIpKSB7CisJCWVtaXR0ZXJfanNvbl9rZXlfcHJl Zml4KGVtaXR0ZXIpOworCQllbWl0dGVyX3ByaW50ZihlbWl0dGVyLCAiXCIlc1wiOiVzIiwganNv bl9rZXksCisJCSAgICBlbWl0dGVyLT5vdXRwdXQgPT0gZW1pdHRlcl9vdXRwdXRfanNvbl9jb21w YWN0ID8gIiIgOiAiICIpOworCQllbWl0dGVyLT5lbWl0dGVkX2tleSA9IHRydWU7CisJfQorfQor CitzdGF0aWMgaW5saW5lIHZvaWQKK2VtaXR0ZXJfanNvbl92YWx1ZShlbWl0dGVyX3QgKmVtaXR0 ZXIsIGVtaXR0ZXJfdHlwZV90IHZhbHVlX3R5cGUsCisgICAgY29uc3Qgdm9pZCAqdmFsdWUpIHsK KwlpZiAoZW1pdHRlcl9vdXRwdXRzX2pzb24oZW1pdHRlcikpIHsKKwkJZW1pdHRlcl9qc29uX2tl eV9wcmVmaXgoZW1pdHRlcik7CisJCWVtaXR0ZXJfcHJpbnRfdmFsdWUoZW1pdHRlciwgZW1pdHRl cl9qdXN0aWZ5X25vbmUsIC0xLAorCQkgICAgdmFsdWVfdHlwZSwgdmFsdWUpOworCQllbWl0dGVy LT5pdGVtX2F0X2RlcHRoID0gdHJ1ZTsKKwl9Cit9CisKKy8qIFNob3J0aGFuZCBmb3IgY2FsbGlu ZyBlbWl0dGVyX2pzb25fa2V5IGFuZCB0aGVuIGVtaXR0ZXJfanNvbl92YWx1ZS4gKi8KK3N0YXRp YyBpbmxpbmUgdm9pZAorZW1pdHRlcl9qc29uX2t2KGVtaXR0ZXJfdCAqZW1pdHRlciwgY29uc3Qg Y2hhciAqanNvbl9rZXksCisgICAgZW1pdHRlcl90eXBlX3QgdmFsdWVfdHlwZSwgY29uc3Qgdm9p ZCAqdmFsdWUpIHsKKwllbWl0dGVyX2pzb25fa2V5KGVtaXR0ZXIsIGpzb25fa2V5KTsKKwllbWl0 dGVyX2pzb25fdmFsdWUoZW1pdHRlciwgdmFsdWVfdHlwZSwgdmFsdWUpOworfQorCitzdGF0aWMg aW5saW5lIHZvaWQKK2VtaXR0ZXJfanNvbl9hcnJheV9iZWdpbihlbWl0dGVyX3QgKmVtaXR0ZXIp IHsKKwlpZiAoZW1pdHRlcl9vdXRwdXRzX2pzb24oZW1pdHRlcikpIHsKKwkJZW1pdHRlcl9qc29u X2tleV9wcmVmaXgoZW1pdHRlcik7CisJCWVtaXR0ZXJfcHJpbnRmKGVtaXR0ZXIsICJbIik7CisJ CWVtaXR0ZXJfbmVzdF9pbmMoZW1pdHRlcik7CisJfQorfQorCisvKiBTaG9ydGhhbmQgZm9yIGNh bGxpbmcgZW1pdHRlcl9qc29uX2tleSBhbmQgdGhlbiBlbWl0dGVyX2pzb25fYXJyYXlfYmVnaW4u ICovCitzdGF0aWMgaW5saW5lIHZvaWQKK2VtaXR0ZXJfanNvbl9hcnJheV9rdl9iZWdpbihlbWl0 dGVyX3QgKmVtaXR0ZXIsIGNvbnN0IGNoYXIgKmpzb25fa2V5KSB7CisJZW1pdHRlcl9qc29uX2tl eShlbWl0dGVyLCBqc29uX2tleSk7CisJZW1pdHRlcl9qc29uX2FycmF5X2JlZ2luKGVtaXR0ZXIp OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2VtaXR0ZXJfanNvbl9hcnJheV9lbmQoZW1pdHRl cl90ICplbWl0dGVyKSB7CisJaWYgKGVtaXR0ZXJfb3V0cHV0c19qc29uKGVtaXR0ZXIpKSB7CisJ CWFzc2VydChlbWl0dGVyLT5uZXN0aW5nX2RlcHRoID4gMCk7CisJCWVtaXR0ZXJfbmVzdF9kZWMo ZW1pdHRlcik7CisJCWlmIChlbWl0dGVyLT5vdXRwdXQgIT0gZW1pdHRlcl9vdXRwdXRfanNvbl9j b21wYWN0KSB7CisJCQllbWl0dGVyX3ByaW50ZihlbWl0dGVyLCAiXG4iKTsKKwkJCWVtaXR0ZXJf aW5kZW50KGVtaXR0ZXIpOworCQl9CisJCWVtaXR0ZXJfcHJpbnRmKGVtaXR0ZXIsICJdIik7CisJ fQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2VtaXR0ZXJfanNvbl9vYmplY3RfYmVnaW4oZW1p dHRlcl90ICplbWl0dGVyKSB7CisJaWYgKGVtaXR0ZXJfb3V0cHV0c19qc29uKGVtaXR0ZXIpKSB7 CisJCWVtaXR0ZXJfanNvbl9rZXlfcHJlZml4KGVtaXR0ZXIpOworCQllbWl0dGVyX3ByaW50Zihl bWl0dGVyLCAieyIpOworCQllbWl0dGVyX25lc3RfaW5jKGVtaXR0ZXIpOworCX0KK30KKworLyog U2hvcnRoYW5kIGZvciBjYWxsaW5nIGVtaXR0ZXJfanNvbl9rZXkgYW5kIHRoZW4gZW1pdHRlcl9q c29uX29iamVjdF9iZWdpbi4gKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorZW1pdHRlcl9qc29uX29i amVjdF9rdl9iZWdpbihlbWl0dGVyX3QgKmVtaXR0ZXIsIGNvbnN0IGNoYXIgKmpzb25fa2V5KSB7 CisJZW1pdHRlcl9qc29uX2tleShlbWl0dGVyLCBqc29uX2tleSk7CisJZW1pdHRlcl9qc29uX29i amVjdF9iZWdpbihlbWl0dGVyKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitlbWl0dGVyX2pz b25fb2JqZWN0X2VuZChlbWl0dGVyX3QgKmVtaXR0ZXIpIHsKKwlpZiAoZW1pdHRlcl9vdXRwdXRz X2pzb24oZW1pdHRlcikpIHsKKwkJYXNzZXJ0KGVtaXR0ZXItPm5lc3RpbmdfZGVwdGggPiAwKTsK KwkJZW1pdHRlcl9uZXN0X2RlYyhlbWl0dGVyKTsKKwkJaWYgKGVtaXR0ZXItPm91dHB1dCAhPSBl bWl0dGVyX291dHB1dF9qc29uX2NvbXBhY3QpIHsKKwkJCWVtaXR0ZXJfcHJpbnRmKGVtaXR0ZXIs ICJcbiIpOworCQkJZW1pdHRlcl9pbmRlbnQoZW1pdHRlcik7CisJCX0KKwkJZW1pdHRlcl9wcmlu dGYoZW1pdHRlciwgIn0iKTsKKwl9Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8q IFRhYmxlIHB1YmxpYyBBUEkuICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZW1pdHRlcl90YWJs ZV9kaWN0X2JlZ2luKGVtaXR0ZXJfdCAqZW1pdHRlciwgY29uc3QgY2hhciAqdGFibGVfa2V5KSB7 CisJaWYgKGVtaXR0ZXItPm91dHB1dCA9PSBlbWl0dGVyX291dHB1dF90YWJsZSkgeworCQllbWl0 dGVyX2luZGVudChlbWl0dGVyKTsKKwkJZW1pdHRlcl9wcmludGYoZW1pdHRlciwgIiVzXG4iLCB0 YWJsZV9rZXkpOworCQllbWl0dGVyX25lc3RfaW5jKGVtaXR0ZXIpOworCX0KK30KKworc3RhdGlj IGlubGluZSB2b2lkCitlbWl0dGVyX3RhYmxlX2RpY3RfZW5kKGVtaXR0ZXJfdCAqZW1pdHRlcikg eworCWlmIChlbWl0dGVyLT5vdXRwdXQgPT0gZW1pdHRlcl9vdXRwdXRfdGFibGUpIHsKKwkJZW1p dHRlcl9uZXN0X2RlYyhlbWl0dGVyKTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZW1p dHRlcl90YWJsZV9rdl9ub3RlKGVtaXR0ZXJfdCAqZW1pdHRlciwgY29uc3QgY2hhciAqdGFibGVf a2V5LAorICAgIGVtaXR0ZXJfdHlwZV90IHZhbHVlX3R5cGUsIGNvbnN0IHZvaWQgKnZhbHVlLAor ICAgIGNvbnN0IGNoYXIgKnRhYmxlX25vdGVfa2V5LCBlbWl0dGVyX3R5cGVfdCB0YWJsZV9ub3Rl X3ZhbHVlX3R5cGUsCisgICAgY29uc3Qgdm9pZCAqdGFibGVfbm90ZV92YWx1ZSkgeworCWlmIChl bWl0dGVyLT5vdXRwdXQgPT0gZW1pdHRlcl9vdXRwdXRfdGFibGUpIHsKKwkJZW1pdHRlcl9pbmRl bnQoZW1pdHRlcik7CisJCWVtaXR0ZXJfcHJpbnRmKGVtaXR0ZXIsICIlczogIiwgdGFibGVfa2V5 KTsKKwkJZW1pdHRlcl9wcmludF92YWx1ZShlbWl0dGVyLCBlbWl0dGVyX2p1c3RpZnlfbm9uZSwg LTEsCisJCSAgICB2YWx1ZV90eXBlLCB2YWx1ZSk7CisJCWlmICh0YWJsZV9ub3RlX2tleSAhPSBO VUxMKSB7CisJCQllbWl0dGVyX3ByaW50ZihlbWl0dGVyLCAiICglczogIiwgdGFibGVfbm90ZV9r ZXkpOworCQkJZW1pdHRlcl9wcmludF92YWx1ZShlbWl0dGVyLCBlbWl0dGVyX2p1c3RpZnlfbm9u ZSwgLTEsCisJCQkgICAgdGFibGVfbm90ZV92YWx1ZV90eXBlLCB0YWJsZV9ub3RlX3ZhbHVlKTsK KwkJCWVtaXR0ZXJfcHJpbnRmKGVtaXR0ZXIsICIpIik7CisJCX0KKwkJZW1pdHRlcl9wcmludGYo ZW1pdHRlciwgIlxuIik7CisJfQorCWVtaXR0ZXItPml0ZW1fYXRfZGVwdGggPSB0cnVlOworfQor CitzdGF0aWMgaW5saW5lIHZvaWQKK2VtaXR0ZXJfdGFibGVfa3YoZW1pdHRlcl90ICplbWl0dGVy LCBjb25zdCBjaGFyICp0YWJsZV9rZXksCisgICAgZW1pdHRlcl90eXBlX3QgdmFsdWVfdHlwZSwg Y29uc3Qgdm9pZCAqdmFsdWUpIHsKKwllbWl0dGVyX3RhYmxlX2t2X25vdGUoZW1pdHRlciwgdGFi bGVfa2V5LCB2YWx1ZV90eXBlLCB2YWx1ZSwgTlVMTCwKKwkgICAgZW1pdHRlcl90eXBlX2Jvb2ws IE5VTEwpOworfQorCisKKy8qIFdyaXRlIHRvIHRoZSBlbWl0dGVyIHRoZSBnaXZlbiBzdHJpbmcs IGJ1dCBvbmx5IGluIHRhYmxlIG1vZGUuICovCitKRU1BTExPQ19GT1JNQVRfUFJJTlRGKDIsIDMp CitzdGF0aWMgaW5saW5lIHZvaWQKK2VtaXR0ZXJfdGFibGVfcHJpbnRmKGVtaXR0ZXJfdCAqZW1p dHRlciwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pIHsKKwlpZiAoZW1pdHRlci0+b3V0cHV0ID09 IGVtaXR0ZXJfb3V0cHV0X3RhYmxlKSB7CisJCXZhX2xpc3QgYXA7CisJCXZhX3N0YXJ0KGFwLCBm b3JtYXQpOworCQltYWxsb2NfdmNwcmludGYoZW1pdHRlci0+d3JpdGVfY2IsIGVtaXR0ZXItPmNi b3BhcXVlLCBmb3JtYXQsIGFwKTsKKwkJdmFfZW5kKGFwKTsKKwl9Cit9CisKK3N0YXRpYyBpbmxp bmUgdm9pZAorZW1pdHRlcl90YWJsZV9yb3coZW1pdHRlcl90ICplbWl0dGVyLCBlbWl0dGVyX3Jv d190ICpyb3cpIHsKKwlpZiAoZW1pdHRlci0+b3V0cHV0ICE9IGVtaXR0ZXJfb3V0cHV0X3RhYmxl KSB7CisJCXJldHVybjsKKwl9CisJZW1pdHRlcl9jb2xfdCAqY29sOworCXFsX2ZvcmVhY2goY29s LCAmcm93LT5jb2xzLCBsaW5rKSB7CisJCWVtaXR0ZXJfcHJpbnRfdmFsdWUoZW1pdHRlciwgY29s LT5qdXN0aWZ5LCBjb2wtPndpZHRoLAorCQkgICAgY29sLT50eXBlLCAoY29uc3Qgdm9pZCAqKSZj b2wtPmJvb2xfdmFsKTsKKwl9CisJZW1pdHRlcl90YWJsZV9wcmludGYoZW1pdHRlciwgIlxuIik7 Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZW1pdHRlcl9yb3dfaW5pdChlbWl0dGVyX3Jvd190 ICpyb3cpIHsKKwlxbF9uZXcoJnJvdy0+Y29scyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAor ZW1pdHRlcl9jb2xfaW5pdChlbWl0dGVyX2NvbF90ICpjb2wsIGVtaXR0ZXJfcm93X3QgKnJvdykg eworCXFsX2VsbV9uZXcoY29sLCBsaW5rKTsKKwlxbF90YWlsX2luc2VydCgmcm93LT5jb2xzLCBj b2wsIGxpbmspOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogR2VuZXJh bGl6ZWQgcHVibGljIEFQSS4gRW1pdHMgdXNpbmcgZWl0aGVyIEpTT04gb3IgdGFibGUsIGFjY29y ZGluZyB0bworICogc2V0dGluZ3MgaW4gdGhlIGVtaXR0ZXJfdC4gKi8KKworLyoKKyAqIE5vdGUg ZW1pdHMgYSBkaWZmZXJlbnQga3YgcGFpciBhcyB3ZWxsLCBidXQgb25seSBpbiB0YWJsZSBtb2Rl LiAgT21pdHMgdGhlCisgKiBub3RlIGlmIHRhYmxlX25vdGVfa2V5IGlzIE5VTEwuCisgKi8KK3N0 YXRpYyBpbmxpbmUgdm9pZAorZW1pdHRlcl9rdl9ub3RlKGVtaXR0ZXJfdCAqZW1pdHRlciwgY29u c3QgY2hhciAqanNvbl9rZXksIGNvbnN0IGNoYXIgKnRhYmxlX2tleSwKKyAgICBlbWl0dGVyX3R5 cGVfdCB2YWx1ZV90eXBlLCBjb25zdCB2b2lkICp2YWx1ZSwKKyAgICBjb25zdCBjaGFyICp0YWJs ZV9ub3RlX2tleSwgZW1pdHRlcl90eXBlX3QgdGFibGVfbm90ZV92YWx1ZV90eXBlLAorICAgIGNv bnN0IHZvaWQgKnRhYmxlX25vdGVfdmFsdWUpIHsKKwlpZiAoZW1pdHRlcl9vdXRwdXRzX2pzb24o ZW1pdHRlcikpIHsKKwkJZW1pdHRlcl9qc29uX2tleShlbWl0dGVyLCBqc29uX2tleSk7CisJCWVt aXR0ZXJfanNvbl92YWx1ZShlbWl0dGVyLCB2YWx1ZV90eXBlLCB2YWx1ZSk7CisJfSBlbHNlIHsK KwkJZW1pdHRlcl90YWJsZV9rdl9ub3RlKGVtaXR0ZXIsIHRhYmxlX2tleSwgdmFsdWVfdHlwZSwg dmFsdWUsCisJCSAgICB0YWJsZV9ub3RlX2tleSwgdGFibGVfbm90ZV92YWx1ZV90eXBlLCB0YWJs ZV9ub3RlX3ZhbHVlKTsKKwl9CisJZW1pdHRlci0+aXRlbV9hdF9kZXB0aCA9IHRydWU7Cit9CisK K3N0YXRpYyBpbmxpbmUgdm9pZAorZW1pdHRlcl9rdihlbWl0dGVyX3QgKmVtaXR0ZXIsIGNvbnN0 IGNoYXIgKmpzb25fa2V5LCBjb25zdCBjaGFyICp0YWJsZV9rZXksCisgICAgZW1pdHRlcl90eXBl X3QgdmFsdWVfdHlwZSwgY29uc3Qgdm9pZCAqdmFsdWUpIHsKKwllbWl0dGVyX2t2X25vdGUoZW1p dHRlciwganNvbl9rZXksIHRhYmxlX2tleSwgdmFsdWVfdHlwZSwgdmFsdWUsIE5VTEwsCisJICAg IGVtaXR0ZXJfdHlwZV9ib29sLCBOVUxMKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitlbWl0 dGVyX2RpY3RfYmVnaW4oZW1pdHRlcl90ICplbWl0dGVyLCBjb25zdCBjaGFyICpqc29uX2tleSwK KyAgICBjb25zdCBjaGFyICp0YWJsZV9oZWFkZXIpIHsKKwlpZiAoZW1pdHRlcl9vdXRwdXRzX2pz b24oZW1pdHRlcikpIHsKKwkJZW1pdHRlcl9qc29uX2tleShlbWl0dGVyLCBqc29uX2tleSk7CisJ CWVtaXR0ZXJfanNvbl9vYmplY3RfYmVnaW4oZW1pdHRlcik7CisJfSBlbHNlIHsKKwkJZW1pdHRl cl90YWJsZV9kaWN0X2JlZ2luKGVtaXR0ZXIsIHRhYmxlX2hlYWRlcik7CisJfQorfQorCitzdGF0 aWMgaW5saW5lIHZvaWQKK2VtaXR0ZXJfZGljdF9lbmQoZW1pdHRlcl90ICplbWl0dGVyKSB7CisJ aWYgKGVtaXR0ZXJfb3V0cHV0c19qc29uKGVtaXR0ZXIpKSB7CisJCWVtaXR0ZXJfanNvbl9vYmpl Y3RfZW5kKGVtaXR0ZXIpOworCX0gZWxzZSB7CisJCWVtaXR0ZXJfdGFibGVfZGljdF9lbmQoZW1p dHRlcik7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2VtaXR0ZXJfYmVnaW4oZW1pdHRl cl90ICplbWl0dGVyKSB7CisJaWYgKGVtaXR0ZXJfb3V0cHV0c19qc29uKGVtaXR0ZXIpKSB7CisJ CWFzc2VydChlbWl0dGVyLT5uZXN0aW5nX2RlcHRoID09IDApOworCQllbWl0dGVyX3ByaW50Zihl bWl0dGVyLCAieyIpOworCQllbWl0dGVyX25lc3RfaW5jKGVtaXR0ZXIpOworCX0gZWxzZSB7CisJ CS8qCisJCSAqIFRoaXMgZ3VhcmFudGVlcyB0aGF0IHdlIGFsd2F5cyBjYWxsIHdyaXRlX2NiIGF0 IGxlYXN0IG9uY2UuCisJCSAqIFRoaXMgaXMgdXNlZnVsIGlmIHNvbWUgaW52YXJpYW50IGlzIGVz dGFibGlzaGVkIGJ5IGVhY2ggY2FsbAorCQkgKiB0byB3cml0ZV9jYiwgYnV0IGRvZXNuJ3QgaG9s ZCBpbml0aWFsbHk6IGUuZy4sIHNvbWUgYnVmZmVyCisJCSAqIGhvbGRzIGEgbnVsbC10ZXJtaW5h dGVkIHN0cmluZy4KKwkJICovCisJCWVtaXR0ZXJfcHJpbnRmKGVtaXR0ZXIsICIlcyIsICIiKTsK Kwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZW1pdHRlcl9lbmQoZW1pdHRlcl90ICplbWl0 dGVyKSB7CisJaWYgKGVtaXR0ZXJfb3V0cHV0c19qc29uKGVtaXR0ZXIpKSB7CisJCWFzc2VydChl bWl0dGVyLT5uZXN0aW5nX2RlcHRoID09IDEpOworCQllbWl0dGVyX25lc3RfZGVjKGVtaXR0ZXIp OworCQllbWl0dGVyX3ByaW50ZihlbWl0dGVyLCAiJXMiLCBlbWl0dGVyLT5vdXRwdXQgPT0KKwkJ ICAgIGVtaXR0ZXJfb3V0cHV0X2pzb25fY29tcGFjdCA/ICJ9IiA6ICJcbn1cbiIpOworCX0KK30K KworI2VuZGlmIC8qIEpFTUFMTE9DX0lOVEVSTkFMX0VNSVRURVJfSCAqLwoKZGlmZiAtLWdpdCBh LzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2Mv aW50ZXJuYWwvZXNldC5oIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAv aW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9lc2V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMC4uNGY2ODliNAotLS0gL2Rldi9udWxsCisrKyBiLzM4OS1kcy1iYXNlLTMuMy4w LWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvZXNldC5oCkBA IC0wLDAgKzEsNzcgQEAKKyNpZm5kZWYgSkVNQUxMT0NfSU5URVJOQUxfRVNFVF9ICisjZGVmaW5l IEpFTUFMTE9DX0lOVEVSTkFMX0VTRVRfSAorCisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwv YXRvbWljLmgiCisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvZmIuaCIKKyNpbmNsdWRlICJq ZW1hbGxvYy9pbnRlcm5hbC9lZGF0YS5oIgorI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL211 dGV4LmgiCisKKy8qCisgKiBBbiBlc2V0ICgiZXh0ZW50IHNldCIpIGlzIGEgcXVhbnRpemVkIGNv bGxlY3Rpb24gb2YgZXh0ZW50cywgd2l0aCBidWlsdC1pbgorICogTFJVIHF1ZXVlLgorICoKKyAq IFRoaXMgY2xhc3MgaXMgbm90IHRocmVhZC1zYWZlOyBzeW5jaHJvbml6YXRpb24gbXVzdCBiZSBk b25lIGV4dGVybmFsbHkgaWYKKyAqIHRoZXJlIGFyZSBtdXRhdGluZyBvcGVyYXRpb25zLiAgT25l IGV4Y2VwdGlvbiBpcyB0aGUgc3RhdHMgY291bnRlcnMsIHdoaWNoCisgKiBtYXkgYmUgcmVhZCB3 aXRob3V0IGFueSBsb2NraW5nLgorICovCisKK3R5cGVkZWYgc3RydWN0IGVzZXRfYmluX3MgZXNl dF9iaW5fdDsKK3N0cnVjdCBlc2V0X2Jpbl9zIHsKKwllZGF0YV9oZWFwX3QgaGVhcDsKKwkvKgor CSAqIFdlIGRvIGZpcnN0LWZpdCBhY3Jvc3MgbXVsdGlwbGUgc2l6ZSBjbGFzc2VzLiAgSWYgd2Ug Y29tcGFyZWQgYWdhaW5zdAorCSAqIHRoZSBtaW4gZWxlbWVudCBpbiBlYWNoIGhlYXAgZGlyZWN0 bHksIHdlJ2QgdGFrZSBhIGNhY2hlIG1pc3MgcGVyCisJICogZXh0ZW50IHdlIGxvb2tlZCBhdC4g IElmIHdlIGNvLWxvY2F0ZSB0aGUgZWRhdGEgc3VtbWFyaWVzLCB3ZSBvbmx5CisJICogdGFrZSBh IG1pc3Mgb24gdGhlIGVkYXRhIHdlJ3JlIGFjdHVhbGx5IGdvaW5nIHRvIHJldHVybiAod2hpY2gg aXMKKwkgKiBpbmV2aXRhYmxlIGFueXdheXMpLgorCSAqLworCWVkYXRhX2NtcF9zdW1tYXJ5X3Qg aGVhcF9taW47Cit9OworCit0eXBlZGVmIHN0cnVjdCBlc2V0X2Jpbl9zdGF0c19zIGVzZXRfYmlu X3N0YXRzX3Q7CitzdHJ1Y3QgZXNldF9iaW5fc3RhdHNfcyB7CisJYXRvbWljX3p1X3QgbmV4dGVu dHM7CisJYXRvbWljX3p1X3QgbmJ5dGVzOworfTsKKwordHlwZWRlZiBzdHJ1Y3QgZXNldF9zIGVz ZXRfdDsKK3N0cnVjdCBlc2V0X3MgeworCS8qIEJpdG1hcCBmb3Igd2hpY2ggc2V0IGJpdHMgY29y cmVzcG9uZCB0byBub24tZW1wdHkgaGVhcHMuICovCisJZmJfZ3JvdXBfdCBiaXRtYXBbRkJfTkdS T1VQUyhTQ19OUFNJWkVTICsgMSldOworCisJLyogUXVhbnRpemVkIHBlciBzaXplIGNsYXNzIGhl YXBzIG9mIGV4dGVudHMuICovCisJZXNldF9iaW5fdCBiaW5zW1NDX05QU0laRVMgKyAxXTsKKwor CWVzZXRfYmluX3N0YXRzX3QgYmluX3N0YXRzW1NDX05QU0laRVMgKyAxXTsKKworCS8qIExSVSBv ZiBhbGwgZXh0ZW50cyBpbiBoZWFwcy4gKi8KKwllZGF0YV9saXN0X2luYWN0aXZlX3QgbHJ1Owor CisJLyogUGFnZSBzdW0gZm9yIGFsbCBleHRlbnRzIGluIGhlYXBzLiAqLworCWF0b21pY196dV90 IG5wYWdlczsKKworCS8qCisJICogQSBkdXBsaWNhdGlvbiBvZiB0aGUgZGF0YSBpbiB0aGUgY29u dGFpbmluZyBlY2FjaGUuICBXZSB1c2UgdGhpcyBvbmx5CisJICogZm9yIGFzc2VydGlvbnMgb24g dGhlIHN0YXRlcyBvZiB0aGUgcGFzc2VkLWluIGV4dGVudHMuCisJICovCisJZXh0ZW50X3N0YXRl X3Qgc3RhdGU7Cit9OworCit2b2lkIGVzZXRfaW5pdChlc2V0X3QgKmVzZXQsIGV4dGVudF9zdGF0 ZV90IHN0YXRlKTsKKworc2l6ZV90IGVzZXRfbnBhZ2VzX2dldChlc2V0X3QgKmVzZXQpOworLyog R2V0IHRoZSBudW1iZXIgb2YgZXh0ZW50cyBpbiB0aGUgZ2l2ZW4gcGFnZSBzaXplIGluZGV4LiAq Lworc2l6ZV90IGVzZXRfbmV4dGVudHNfZ2V0KGVzZXRfdCAqZXNldCwgcHN6aW5kX3QgaW5kKTsK Ky8qIEdldCB0aGUgc3VtIHRvdGFsIGJ5dGVzIG9mIHRoZSBleHRlbnRzIGluIHRoZSBnaXZlbiBw YWdlIHNpemUgaW5kZXguICovCitzaXplX3QgZXNldF9uYnl0ZXNfZ2V0KGVzZXRfdCAqZXNldCwg cHN6aW5kX3QgaW5kKTsKKwordm9pZCBlc2V0X2luc2VydChlc2V0X3QgKmVzZXQsIGVkYXRhX3Qg KmVkYXRhKTsKK3ZvaWQgZXNldF9yZW1vdmUoZXNldF90ICplc2V0LCBlZGF0YV90ICplZGF0YSk7 CisvKgorICogU2VsZWN0IGFuIGV4dGVudCBmcm9tIHRoaXMgZXNldCBvZiB0aGUgZ2l2ZW4gc2l6 ZSBhbmQgYWxpZ25tZW50LiAgUmV0dXJucworICogbnVsbCBpZiBubyBzdWNoIGl0ZW0gY291bGQg YmUgZm91bmQuCisgKi8KK2VkYXRhX3QgKmVzZXRfZml0KGVzZXRfdCAqZXNldCwgc2l6ZV90IGVz aXplLCBzaXplX3QgYWxpZ25tZW50LCBib29sIGV4YWN0X29ubHksCisgICAgdW5zaWduZWQgbGdf bWF4X2ZpdCk7CisKKyNlbmRpZiAvKiBKRU1BTExPQ19JTlRFUk5BTF9FU0VUX0ggKi8KCmRpZmYg LS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2pl bWFsbG9jL2ludGVybmFsL2V4cF9ncm93LmggYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1h bGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL2V4cF9ncm93LmgKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODU2NmI4YQotLS0gL2Rldi9udWxsCisrKyBiLzM4 OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50 ZXJuYWwvZXhwX2dyb3cuaApAQCAtMCwwICsxLDUwIEBACisjaWZuZGVmIEpFTUFMTE9DX0lOVEVS TkFMX0VYUF9HUk9XX0gKKyNkZWZpbmUgSkVNQUxMT0NfSU5URVJOQUxfRVhQX0dST1dfSAorCit0 eXBlZGVmIHN0cnVjdCBleHBfZ3Jvd19zIGV4cF9ncm93X3Q7CitzdHJ1Y3QgZXhwX2dyb3dfcyB7 CisJLyoKKwkgKiBOZXh0IGV4dGVudCBzaXplIGNsYXNzIGluIGEgZ3Jvd2luZyBzZXJpZXMgdG8g dXNlIHdoZW4gc2F0aXNmeWluZyBhCisJICogcmVxdWVzdCB2aWEgdGhlIGV4dGVudCBob29rcyAo b25seSBpZiBvcHRfcmV0YWluKS4gIFRoaXMgbGltaXRzIHRoZQorCSAqIG51bWJlciBvZiBkaXNq b2ludCB2aXJ0dWFsIG1lbW9yeSByYW5nZXMgc28gdGhhdCBleHRlbnQgbWVyZ2luZyBjYW4KKwkg KiBiZSBlZmZlY3RpdmUgZXZlbiBpZiBtdWx0aXBsZSBhcmVuYXMnIGV4dGVudCBhbGxvY2F0aW9u IHJlcXVlc3RzIGFyZQorCSAqIGhpZ2hseSBpbnRlcmxlYXZlZC4KKwkgKgorCSAqIHJldGFpbl9n cm93X2xpbWl0IGlzIHRoZSBtYXggYWxsb3dlZCBzaXplIGluZCB0byBleHBhbmQgKHVubGVzcyB0 aGUKKwkgKiByZXF1aXJlZCBzaXplIGlzIGdyZWF0ZXIpLiAgRGVmYXVsdCBpcyBubyBsaW1pdCwg YW5kIGNvbnRyb2xsZWQKKwkgKiB0aHJvdWdoIG1hbGxjdGwgb25seS4KKwkgKi8KKwlwc3ppbmRf dCBuZXh0OworCXBzemluZF90IGxpbWl0OworfTsKKworc3RhdGljIGlubGluZSBib29sCitleHBf Z3Jvd19zaXplX3ByZXBhcmUoZXhwX2dyb3dfdCAqZXhwX2dyb3csIHNpemVfdCBhbGxvY19zaXpl X21pbiwKKyAgICBzaXplX3QgKnJfYWxsb2Nfc2l6ZSwgcHN6aW5kX3QgKnJfc2tpcCkgeworCSpy X3NraXAgPSAwOworCSpyX2FsbG9jX3NpemUgPSBzel9waW5kMnN6KGV4cF9ncm93LT5uZXh0ICsg KnJfc2tpcCk7CisJd2hpbGUgKCpyX2FsbG9jX3NpemUgPCBhbGxvY19zaXplX21pbikgeworCQko KnJfc2tpcCkrKzsKKwkJaWYgKGV4cF9ncm93LT5uZXh0ICsgKnJfc2tpcCAgPj0KKwkJICAgIHN6 X3BzejJpbmQoU0NfTEFSR0VfTUFYQ0xBU1MpKSB7CisJCQkvKiBPdXRzaWRlIGxlZ2FsIHJhbmdl LiAqLworCQkJcmV0dXJuIHRydWU7CisJCX0KKwkJKnJfYWxsb2Nfc2l6ZSA9IHN6X3BpbmQyc3oo ZXhwX2dyb3ctPm5leHQgKyAqcl9za2lwKTsKKwl9CisJcmV0dXJuIGZhbHNlOworfQorCitzdGF0 aWMgaW5saW5lIHZvaWQKK2V4cF9ncm93X3NpemVfY29tbWl0KGV4cF9ncm93X3QgKmV4cF9ncm93 LCBwc3ppbmRfdCBza2lwKSB7CisJaWYgKGV4cF9ncm93LT5uZXh0ICsgc2tpcCArIDEgPD0gZXhw X2dyb3ctPmxpbWl0KSB7CisJCWV4cF9ncm93LT5uZXh0ICs9IHNraXAgKyAxOworCX0gZWxzZSB7 CisJCWV4cF9ncm93LT5uZXh0ID0gZXhwX2dyb3ctPmxpbWl0OworCX0KKworfQorCit2b2lkIGV4 cF9ncm93X2luaXQoZXhwX2dyb3dfdCAqZXhwX2dyb3cpOworCisjZW5kaWYgLyogSkVNQUxMT0Nf SU5URVJOQUxfRVhQX0dST1dfSCAqLwoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1 aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvZXh0ZW50LmggYi8z ODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2lu dGVybmFsL2V4dGVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkNTFk NDEKLS0tIC9kZXYvbnVsbAorKysgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01 LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL2V4dGVudC5oCkBAIC0wLDAgKzEsMTM3IEBA CisjaWZuZGVmIEpFTUFMTE9DX0lOVEVSTkFMX0VYVEVOVF9ICisjZGVmaW5lIEpFTUFMTE9DX0lO VEVSTkFMX0VYVEVOVF9ICisKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9lY2FjaGUuaCIK KyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9laG9va3MuaCIKKyNpbmNsdWRlICJqZW1hbGxv Yy9pbnRlcm5hbC9waC5oIgorI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL3J0cmVlLmgiCisK Ky8qCisgKiBUaGlzIG1vZHVsZSBjb250YWlucyB0aGUgcGFnZS1sZXZlbCBhbGxvY2F0b3IuICBJ dCBjaG9vc2VzIHRoZSBhZGRyZXNzZXMgdGhhdAorICogYWxsb2NhdGlvbnMgcmVxdWVzdGVkIGJ5 IG90aGVyIG1vZHVsZXMgd2lsbCBpbmhhYml0LCBhbmQgdXBkYXRlcyB0aGUgZ2xvYmFsCisgKiBt ZXRhZGF0YSB0byByZWZsZWN0IGFsbG9jYXRpb24vZGVhbGxvY2F0aW9uL3B1cmdpbmcgZGVjaXNp b25zLgorICovCisKKy8qCisgKiBXaGVuIHJldXNlIChhbmQgc3BsaXQpIGFuIGFjdGl2ZSBleHRl bnQsICgxVSA8PCBvcHRfbGdfZXh0ZW50X21heF9hY3RpdmVfZml0KQorICogaXMgdGhlIG1heCBy YXRpbyBiZXR3ZWVuIHRoZSBzaXplIG9mIHRoZSBhY3RpdmUgZXh0ZW50IGFuZCB0aGUgbmV3IGV4 dGVudC4KKyAqLworI2RlZmluZSBMR19FWFRFTlRfTUFYX0FDVElWRV9GSVRfREVGQVVMVCA2Citl eHRlcm4gc2l6ZV90IG9wdF9sZ19leHRlbnRfbWF4X2FjdGl2ZV9maXQ7CisKK2VkYXRhX3QgKmVj YWNoZV9hbGxvYyh0c2RuX3QgKnRzZG4sIHBhY190ICpwYWMsIGVob29rc190ICplaG9va3MsCisg ICAgZWNhY2hlX3QgKmVjYWNoZSwgZWRhdGFfdCAqZXhwYW5kX2VkYXRhLCBzaXplX3Qgc2l6ZSwg c2l6ZV90IGFsaWdubWVudCwKKyAgICBib29sIHplcm8sIGJvb2wgZ3VhcmRlZCk7CitlZGF0YV90 ICplY2FjaGVfYWxsb2NfZ3Jvdyh0c2RuX3QgKnRzZG4sIHBhY190ICpwYWMsIGVob29rc190ICpl aG9va3MsCisgICAgZWNhY2hlX3QgKmVjYWNoZSwgZWRhdGFfdCAqZXhwYW5kX2VkYXRhLCBzaXpl X3Qgc2l6ZSwgc2l6ZV90IGFsaWdubWVudCwKKyAgICBib29sIHplcm8sIGJvb2wgZ3VhcmRlZCk7 Cit2b2lkIGVjYWNoZV9kYWxsb2ModHNkbl90ICp0c2RuLCBwYWNfdCAqcGFjLCBlaG9va3NfdCAq ZWhvb2tzLAorICAgIGVjYWNoZV90ICplY2FjaGUsIGVkYXRhX3QgKmVkYXRhKTsKK2VkYXRhX3Qg KmVjYWNoZV9ldmljdCh0c2RuX3QgKnRzZG4sIHBhY190ICpwYWMsIGVob29rc190ICplaG9va3Ms CisgICAgZWNhY2hlX3QgKmVjYWNoZSwgc2l6ZV90IG5wYWdlc19taW4pOworCit2b2lkIGV4dGVu dF9nZHVtcF9hZGQodHNkbl90ICp0c2RuLCBjb25zdCBlZGF0YV90ICplZGF0YSk7Cit2b2lkIGV4 dGVudF9yZWNvcmQodHNkbl90ICp0c2RuLCBwYWNfdCAqcGFjLCBlaG9va3NfdCAqZWhvb2tzLCBl Y2FjaGVfdCAqZWNhY2hlLAorICAgIGVkYXRhX3QgKmVkYXRhKTsKK3ZvaWQgZXh0ZW50X2RhbGxv Y19nYXAodHNkbl90ICp0c2RuLCBwYWNfdCAqcGFjLCBlaG9va3NfdCAqZWhvb2tzLAorICAgIGVk YXRhX3QgKmVkYXRhKTsKK2VkYXRhX3QgKmV4dGVudF9hbGxvY193cmFwcGVyKHRzZG5fdCAqdHNk biwgcGFjX3QgKnBhYywgZWhvb2tzX3QgKmVob29rcywKKyAgICB2b2lkICpuZXdfYWRkciwgc2l6 ZV90IHNpemUsIHNpemVfdCBhbGlnbm1lbnQsIGJvb2wgemVybywgYm9vbCAqY29tbWl0LAorICAg IGJvb2wgZ3Jvd2luZ19yZXRhaW5lZCk7Cit2b2lkIGV4dGVudF9kYWxsb2Nfd3JhcHBlcih0c2Ru X3QgKnRzZG4sIHBhY190ICpwYWMsIGVob29rc190ICplaG9va3MsCisgICAgZWRhdGFfdCAqZWRh dGEpOwordm9pZCBleHRlbnRfZGVzdHJveV93cmFwcGVyKHRzZG5fdCAqdHNkbiwgcGFjX3QgKnBh YywgZWhvb2tzX3QgKmVob29rcywKKyAgICBlZGF0YV90ICplZGF0YSk7Citib29sIGV4dGVudF9j b21taXRfd3JhcHBlcih0c2RuX3QgKnRzZG4sIGVob29rc190ICplaG9va3MsIGVkYXRhX3QgKmVk YXRhLAorICAgIHNpemVfdCBvZmZzZXQsIHNpemVfdCBsZW5ndGgpOworYm9vbCBleHRlbnRfZGVj b21taXRfd3JhcHBlcih0c2RuX3QgKnRzZG4sIGVob29rc190ICplaG9va3MsIGVkYXRhX3QgKmVk YXRhLAorICAgIHNpemVfdCBvZmZzZXQsIHNpemVfdCBsZW5ndGgpOworYm9vbCBleHRlbnRfcHVy Z2VfbGF6eV93cmFwcGVyKHRzZG5fdCAqdHNkbiwgZWhvb2tzX3QgKmVob29rcywgZWRhdGFfdCAq ZWRhdGEsCisgICAgc2l6ZV90IG9mZnNldCwgc2l6ZV90IGxlbmd0aCk7Citib29sIGV4dGVudF9w dXJnZV9mb3JjZWRfd3JhcHBlcih0c2RuX3QgKnRzZG4sIGVob29rc190ICplaG9va3MsIGVkYXRh X3QgKmVkYXRhLAorICAgIHNpemVfdCBvZmZzZXQsIHNpemVfdCBsZW5ndGgpOworZWRhdGFfdCAq ZXh0ZW50X3NwbGl0X3dyYXBwZXIodHNkbl90ICp0c2RuLCBwYWNfdCAqcGFjLAorICAgIGVob29r c190ICplaG9va3MsIGVkYXRhX3QgKmVkYXRhLCBzaXplX3Qgc2l6ZV9hLCBzaXplX3Qgc2l6ZV9i LAorICAgIGJvb2wgaG9sZGluZ19jb3JlX2xvY2tzKTsKK2Jvb2wgZXh0ZW50X21lcmdlX3dyYXBw ZXIodHNkbl90ICp0c2RuLCBwYWNfdCAqcGFjLCBlaG9va3NfdCAqZWhvb2tzLAorICAgIGVkYXRh X3QgKmEsIGVkYXRhX3QgKmIpOworYm9vbCBleHRlbnRfY29tbWl0X3plcm8odHNkbl90ICp0c2Ru LCBlaG9va3NfdCAqZWhvb2tzLCBlZGF0YV90ICplZGF0YSwKKyAgICBib29sIGNvbW1pdCwgYm9v bCB6ZXJvLCBib29sIGdyb3dpbmdfcmV0YWluZWQpOworc2l6ZV90IGV4dGVudF9zbl9uZXh0KHBh Y190ICpwYWMpOworYm9vbCBleHRlbnRfYm9vdCh2b2lkKTsKKworSkVNQUxMT0NfQUxXQVlTX0lO TElORSBib29sCitleHRlbnRfbmVpZ2hib3JfaGVhZF9zdGF0ZV9tZXJnZWFibGUoYm9vbCBlZGF0 YV9pc19oZWFkLAorICAgIGJvb2wgbmVpZ2hib3JfaXNfaGVhZCwgYm9vbCBmb3J3YXJkKSB7CisJ LyoKKwkgKiBIZWFkIHN0YXRlcyBjaGVja2luZzogZGlzYWxsb3cgbWVyZ2luZyBpZiB0aGUgaGln aGVyIGFkZHIgZXh0ZW50IGlzIGEKKwkgKiBoZWFkIGV4dGVudC4gIFRoaXMgaGVscHMgcHJlc2Vy dmUgZmlyc3QtZml0LCBhbmQgbW9yZSBpbXBvcnRhbnRseQorCSAqIG1ha2VzIHN1cmUgbm8gbWVy Z2UgYWNyb3NzIGFyZW5hcy4KKwkgKi8KKwlpZiAoZm9yd2FyZCkgeworCQlpZiAobmVpZ2hib3Jf aXNfaGVhZCkgeworCQkJcmV0dXJuIGZhbHNlOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKGVkYXRh X2lzX2hlYWQpIHsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCX0KKwlyZXR1cm4gdHJ1ZTsKK30K KworSkVNQUxMT0NfQUxXQVlTX0lOTElORSBib29sCitleHRlbnRfY2FuX2FjcXVpcmVfbmVpZ2hi b3IoZWRhdGFfdCAqZWRhdGEsIHJ0cmVlX2NvbnRlbnRzX3QgY29udGVudHMsCisgICAgZXh0ZW50 X3BhaV90IHBhaSwgZXh0ZW50X3N0YXRlX3QgZXhwZWN0ZWRfc3RhdGUsIGJvb2wgZm9yd2FyZCwK KyAgICBib29sIGV4cGFuZGluZykgeworCWVkYXRhX3QgKm5laWdoYm9yID0gY29udGVudHMuZWRh dGE7CisJaWYgKG5laWdoYm9yID09IE5VTEwpIHsKKwkJcmV0dXJuIGZhbHNlOworCX0KKwkvKiBJ dCdzIG5vdCBzYWZlIHRvIGFjY2VzcyAqbmVpZ2hib3IgeWV0OyBtdXN0IHZlcmlmeSBzdGF0ZXMg Zmlyc3QuICovCisJYm9vbCBuZWlnaGJvcl9pc19oZWFkID0gY29udGVudHMubWV0YWRhdGEuaXNf aGVhZDsKKwlpZiAoIWV4dGVudF9uZWlnaGJvcl9oZWFkX3N0YXRlX21lcmdlYWJsZShlZGF0YV9p c19oZWFkX2dldChlZGF0YSksCisJICAgIG5laWdoYm9yX2lzX2hlYWQsIGZvcndhcmQpKSB7CisJ CXJldHVybiBmYWxzZTsKKwl9CisJZXh0ZW50X3N0YXRlX3QgbmVpZ2hib3Jfc3RhdGUgPSBjb250 ZW50cy5tZXRhZGF0YS5zdGF0ZTsKKwlpZiAocGFpID09IEVYVEVOVF9QQUlfUEFDKSB7CisJCWlm IChuZWlnaGJvcl9zdGF0ZSAhPSBleHBlY3RlZF9zdGF0ZSkgeworCQkJcmV0dXJuIGZhbHNlOwor CQl9CisJCS8qIEZyb20gdGhpcyBwb2ludCwgaXQncyBzYWZlIHRvIGFjY2VzcyAqbmVpZ2hib3Iu ICovCisJCWlmICghZXhwYW5kaW5nICYmIChlZGF0YV9jb21taXR0ZWRfZ2V0KGVkYXRhKSAhPQor CQkgICAgZWRhdGFfY29tbWl0dGVkX2dldChuZWlnaGJvcikpKSB7CisJCQkvKgorCQkJICogU29t ZSBwbGF0Zm9ybXMgKGUuZy4gV2luZG93cykgcmVxdWlyZSBhbiBleHBsaWNpdAorCQkJICogY29t bWl0IHN0ZXAgKGFuZCB3cml0aW5nIHRvIHVuY29tbWl0dGVkIG1lbW9yeSBpcyBub3QKKwkJCSAq IGFsbG93ZWQpLgorCQkJICovCisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKwl9IGVsc2UgeworCQlp ZiAobmVpZ2hib3Jfc3RhdGUgPT0gZXh0ZW50X3N0YXRlX2FjdGl2ZSkgeworCQkJcmV0dXJuIGZh bHNlOworCQl9CisJCS8qIEZyb20gdGhpcyBwb2ludCwgaXQncyBzYWZlIHRvIGFjY2VzcyAqbmVp Z2hib3IuICovCisJfQorCisJYXNzZXJ0KGVkYXRhX3BhaV9nZXQoZWRhdGEpID09IHBhaSk7CisJ aWYgKGVkYXRhX3BhaV9nZXQobmVpZ2hib3IpICE9IHBhaSkgeworCQlyZXR1cm4gZmFsc2U7CisJ fQorCWlmIChvcHRfcmV0YWluKSB7CisJCWFzc2VydChlZGF0YV9hcmVuYV9pbmRfZ2V0KGVkYXRh KSA9PQorCQkgICAgZWRhdGFfYXJlbmFfaW5kX2dldChuZWlnaGJvcikpOworCX0gZWxzZSB7CisJ CWlmIChlZGF0YV9hcmVuYV9pbmRfZ2V0KGVkYXRhKSAhPQorCQkgICAgZWRhdGFfYXJlbmFfaW5k X2dldChuZWlnaGJvcikpIHsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCX0KKwlhc3NlcnQoIWVk YXRhX2d1YXJkZWRfZ2V0KGVkYXRhKSAmJiAhZWRhdGFfZ3VhcmRlZF9nZXQobmVpZ2hib3IpKTsK KworCXJldHVybiB0cnVlOworfQorCisjZW5kaWYgLyogSkVNQUxMT0NfSU5URVJOQUxfRVhURU5U X0ggKi8KCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMu MC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL2V4dGVudF9kc3MuaCBiLzM4OS1kcy1iYXNlLTMu My4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvZXh0ZW50 X2Rzcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4ZjAyY2UKLS0tIC9k ZXYvbnVsbAorKysgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNs dWRlL2plbWFsbG9jL2ludGVybmFsL2V4dGVudF9kc3MuaApAQCAtMCwwICsxLDI2IEBACisjaWZu ZGVmIEpFTUFMTE9DX0lOVEVSTkFMX0VYVEVOVF9EU1NfSAorI2RlZmluZSBKRU1BTExPQ19JTlRF Uk5BTF9FWFRFTlRfRFNTX0gKKwordHlwZWRlZiBlbnVtIHsKKwlkc3NfcHJlY19kaXNhYmxlZCAg PSAwLAorCWRzc19wcmVjX3ByaW1hcnkgICA9IDEsCisJZHNzX3ByZWNfc2Vjb25kYXJ5ID0gMiwK KworCWRzc19wcmVjX2xpbWl0ICAgICA9IDMKK30gZHNzX3ByZWNfdDsKKyNkZWZpbmUgRFNTX1BS RUNfREVGQVVMVCBkc3NfcHJlY19zZWNvbmRhcnkKKyNkZWZpbmUgRFNTX0RFRkFVTFQgInNlY29u ZGFyeSIKKworZXh0ZXJuIGNvbnN0IGNoYXIgKmRzc19wcmVjX25hbWVzW107CisKK2V4dGVybiBj b25zdCBjaGFyICpvcHRfZHNzOworCitkc3NfcHJlY190IGV4dGVudF9kc3NfcHJlY19nZXQodm9p ZCk7Citib29sIGV4dGVudF9kc3NfcHJlY19zZXQoZHNzX3ByZWNfdCBkc3NfcHJlYyk7Cit2b2lk ICpleHRlbnRfYWxsb2NfZHNzKHRzZG5fdCAqdHNkbiwgYXJlbmFfdCAqYXJlbmEsIHZvaWQgKm5l d19hZGRyLAorICAgIHNpemVfdCBzaXplLCBzaXplX3QgYWxpZ25tZW50LCBib29sICp6ZXJvLCBi b29sICpjb21taXQpOworYm9vbCBleHRlbnRfaW5fZHNzKHZvaWQgKmFkZHIpOworYm9vbCBleHRl bnRfZHNzX21lcmdlYWJsZSh2b2lkICphZGRyX2EsIHZvaWQgKmFkZHJfYik7Cit2b2lkIGV4dGVu dF9kc3NfYm9vdCh2b2lkKTsKKworI2VuZGlmIC8qIEpFTUFMTE9DX0lOVEVSTkFMX0VYVEVOVF9E U1NfSCAqLwoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUu My4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvZXh0ZW50X21tYXAuaCBiLzM4OS1kcy1iYXNl LTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvZXh0 ZW50X21tYXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NWYxN2VlCi0t LSAvZGV2L251bGwKKysrIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAv aW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9leHRlbnRfbW1hcC5oCkBAIC0wLDAgKzEsMTAgQEAK KyNpZm5kZWYgSkVNQUxMT0NfSU5URVJOQUxfRVhURU5UX01NQVBfRVhURVJOU19ICisjZGVmaW5l IEpFTUFMTE9DX0lOVEVSTkFMX0VYVEVOVF9NTUFQX0VYVEVSTlNfSAorCitleHRlcm4gYm9vbCBv cHRfcmV0YWluOworCit2b2lkICpleHRlbnRfYWxsb2NfbW1hcCh2b2lkICpuZXdfYWRkciwgc2l6 ZV90IHNpemUsIHNpemVfdCBhbGlnbm1lbnQsCisgICAgYm9vbCAqemVybywgYm9vbCAqY29tbWl0 KTsKK2Jvb2wgZXh0ZW50X2RhbGxvY19tbWFwKHZvaWQgKmFkZHIsIHNpemVfdCBzaXplKTsKKwor I2VuZGlmIC8qIEpFTUFMTE9DX0lOVEVSTkFMX0VYVEVOVF9NTUFQX0VYVEVSTlNfSCAqLwoKZGlm ZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUv amVtYWxsb2MvaW50ZXJuYWwvZmIuaCBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9j LTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvZmIuaApuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwLi45MGM0MDkxCi0tLSAvZGV2L251bGwKKysrIGIvMzg5LWRzLWJhc2Ut My4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9mYi5o CkBAIC0wLDAgKzEsMzczIEBACisjaWZuZGVmIEpFTUFMTE9DX0lOVEVSTkFMX0ZCX0gKKyNkZWZp bmUgSkVNQUxMT0NfSU5URVJOQUxfRkJfSAorCisvKgorICogVGhlIGZsYXQgYml0bWFwIG1vZHVs ZS4gIFRoaXMgaGFzIGEgbGFyZ2VyIEFQSSByZWxhdGl2ZSB0byB0aGUgYml0bWFwIG1vZHVsZQor ICogKHN1cHBvcnRpbmcgdGhpbmdzIGxpa2UgYmFja3dhcmRzIHNlYXJjaGVzLCBhbmQgc2VhcmNo aW5nIGZvciBib3RoIHNldCBhbmQKKyAqIHVuc2V0IGJpdHMpLCBhdCB0aGUgY29zdCBvZiBzbG93 ZXIgb3BlcmF0aW9ucyBmb3IgdmVyeSBsYXJnZSBiaXRtYXBzLgorICoKKyAqIEluaXRpYWxpemVk IGZsYXQgYml0bWFwcyBzdGFydCBhdCBhbGwtemVyb3MgKGFsbCBiaXRzIHVuc2V0KS4KKyAqLwor Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgZmJfZ3JvdXBfdDsKKyNkZWZpbmUgRkJfR1JPVVBfQklU UyAoWlUoMSkgPDwgKExHX1NJWkVPRl9MT05HICsgMykpCisjZGVmaW5lIEZCX05HUk9VUFMobmJp dHMpICgobmJpdHMpIC8gRkJfR1JPVVBfQklUUyBcCisgICAgKyAoKG5iaXRzKSAlIEZCX0dST1VQ X0JJVFMgPT0gMCA/IDAgOiAxKSkKKworc3RhdGljIGlubGluZSB2b2lkCitmYl9pbml0KGZiX2dy b3VwX3QgKmZiLCBzaXplX3QgbmJpdHMpIHsKKwlzaXplX3Qgbmdyb3VwcyA9IEZCX05HUk9VUFMo bmJpdHMpOworCW1lbXNldChmYiwgMCwgbmdyb3VwcyAqIHNpemVvZihmYl9ncm91cF90KSk7Cit9 CisKK3N0YXRpYyBpbmxpbmUgYm9vbAorZmJfZW1wdHkoZmJfZ3JvdXBfdCAqZmIsIHNpemVfdCBu Yml0cykgeworCXNpemVfdCBuZ3JvdXBzID0gRkJfTkdST1VQUyhuYml0cyk7CisJZm9yIChzaXpl X3QgaSA9IDA7IGkgPCBuZ3JvdXBzOyBpKyspIHsKKwkJaWYgKGZiW2ldICE9IDApIHsKKwkJCXJl dHVybiBmYWxzZTsKKwkJfQorCX0KKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGlubGluZSBi b29sCitmYl9mdWxsKGZiX2dyb3VwX3QgKmZiLCBzaXplX3QgbmJpdHMpIHsKKwlzaXplX3Qgbmdy b3VwcyA9IEZCX05HUk9VUFMobmJpdHMpOworCXNpemVfdCB0cmFpbGluZ19iaXRzID0gbmJpdHMg JSBGQl9HUk9VUF9CSVRTOworCXNpemVfdCBsaW1pdCA9ICh0cmFpbGluZ19iaXRzID09IDAgPyBu Z3JvdXBzIDogbmdyb3VwcyAtIDEpOworCWZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGltaXQ7IGkr KykgeworCQlpZiAoZmJbaV0gIT0gfihmYl9ncm91cF90KTApIHsKKwkJCXJldHVybiBmYWxzZTsK KwkJfQorCX0KKwlpZiAodHJhaWxpbmdfYml0cyA9PSAwKSB7CisJCXJldHVybiB0cnVlOworCX0K KwlyZXR1cm4gZmJbbmdyb3VwcyAtIDFdID09ICgoZmJfZ3JvdXBfdCkxIDw8IHRyYWlsaW5nX2Jp dHMpIC0gMTsKK30KKworc3RhdGljIGlubGluZSBib29sCitmYl9nZXQoZmJfZ3JvdXBfdCAqZmIs IHNpemVfdCBuYml0cywgc2l6ZV90IGJpdCkgeworCWFzc2VydChiaXQgPCBuYml0cyk7CisJc2l6 ZV90IGdyb3VwX2luZCA9IGJpdCAvIEZCX0dST1VQX0JJVFM7CisJc2l6ZV90IGJpdF9pbmQgPSBi aXQgJSBGQl9HUk9VUF9CSVRTOworCXJldHVybiAoYm9vbCkoZmJbZ3JvdXBfaW5kXSAmICgoZmJf Z3JvdXBfdCkxIDw8IGJpdF9pbmQpKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitmYl9zZXQo ZmJfZ3JvdXBfdCAqZmIsIHNpemVfdCBuYml0cywgc2l6ZV90IGJpdCkgeworCWFzc2VydChiaXQg PCBuYml0cyk7CisJc2l6ZV90IGdyb3VwX2luZCA9IGJpdCAvIEZCX0dST1VQX0JJVFM7CisJc2l6 ZV90IGJpdF9pbmQgPSBiaXQgJSBGQl9HUk9VUF9CSVRTOworCWZiW2dyb3VwX2luZF0gfD0gKChm Yl9ncm91cF90KTEgPDwgYml0X2luZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZmJfdW5z ZXQoZmJfZ3JvdXBfdCAqZmIsIHNpemVfdCBuYml0cywgc2l6ZV90IGJpdCkgeworCWFzc2VydChi aXQgPCBuYml0cyk7CisJc2l6ZV90IGdyb3VwX2luZCA9IGJpdCAvIEZCX0dST1VQX0JJVFM7CisJ c2l6ZV90IGJpdF9pbmQgPSBiaXQgJSBGQl9HUk9VUF9CSVRTOworCWZiW2dyb3VwX2luZF0gJj0g figoZmJfZ3JvdXBfdCkxIDw8IGJpdF9pbmQpOworfQorCisKKy8qCisgKiBTb21lIGltcGxlbWVu dGF0aW9uIGRldGFpbHMuICBUaGlzIHZpc2l0YXRpb24gZnVuY3Rpb24gbGV0cyB1cyBhcHBseSBh IGdyb3VwCisgKiB2aXNpdG9yIHRvIGVhY2ggZ3JvdXAgaW4gdGhlIGJpdG1hcCAocG90ZW50aWFs bHkgbW9kaWZ5aW5nIGl0KS4gIFRoZSBtYXNrCisgKiBpbmRpY2F0ZXMgd2hpY2ggYml0cyBhcmUg bG9naWNhbGx5IHBhcnQgb2YgdGhlIHZpc2l0YXRpb24uCisgKi8KK3R5cGVkZWYgdm9pZCAoKmZi X2dyb3VwX3Zpc2l0b3JfdCkodm9pZCAqY3R4LCBmYl9ncm91cF90ICpmYiwgZmJfZ3JvdXBfdCBt YXNrKTsKK0pFTUFMTE9DX0FMV0FZU19JTkxJTkUgdm9pZAorZmJfdmlzaXRfaW1wbChmYl9ncm91 cF90ICpmYiwgc2l6ZV90IG5iaXRzLCBmYl9ncm91cF92aXNpdG9yX3QgdmlzaXQsIHZvaWQgKmN0 eCwKKyAgICBzaXplX3Qgc3RhcnQsIHNpemVfdCBjbnQpIHsKKwlhc3NlcnQoY250ID4gMCk7CisJ YXNzZXJ0KHN0YXJ0ICsgY250IDw9IG5iaXRzKTsKKwlzaXplX3QgZ3JvdXBfaW5kID0gc3RhcnQg LyBGQl9HUk9VUF9CSVRTOworCXNpemVfdCBzdGFydF9iaXRfaW5kID0gc3RhcnQgJSBGQl9HUk9V UF9CSVRTOworCS8qCisJICogVGhlIGZpcnN0IGdyb3VwIGlzIHNwZWNpYWw7IGl0J3MgdGhlIG9u bHkgb25lIHdlIGRvbid0IHN0YXJ0IHdyaXRpbmcKKwkgKiB0byBmcm9tIGJpdCAwLgorCSAqLwor CXNpemVfdCBmaXJzdF9ncm91cF9jbnQgPSAoc3RhcnRfYml0X2luZCArIGNudCA+IEZCX0dST1VQ X0JJVFMKKwkJPyBGQl9HUk9VUF9CSVRTIC0gc3RhcnRfYml0X2luZCA6IGNudCk7CisJLyoKKwkg KiBXZSBjYW4gYmFzaWNhbGx5IHNwbGl0IGFmZmVjdGVkIHdvcmRzIGludG86CisJICogICAtIFRo ZSBmaXJzdCBncm91cCwgd2hlcmUgd2UgdG91Y2ggb25seSB0aGUgaGlnaCBiaXRzCisJICogICAt IFRoZSBsYXN0IGdyb3VwLCB3aGVyZSB3ZSB0b3VjaCBvbmx5IHRoZSBsb3cgYml0cworCSAqICAg LSBUaGUgbWlkZGxlLCB3aGVyZSB3ZSBzZXQgYWxsIHRoZSBiaXRzIHRvIHRoZSBzYW1lIHRoaW5n LgorCSAqIFdlIHRyZWF0IGVhY2ggY2FzZSBpbmRpdmlkdWFsbHkuICBUaGUgbGFzdCB0d28gY291 bGQgYmUgbWVyZ2VkLCBidXQKKwkgKiB0aGlzIGNhbiBsZWFkIHRvIGJhZCBjb2RlZ2VuIGZvciB0 aG9zZSBtaWRkbGUgd29yZHMuCisJICovCisJLyogRmlyc3QgZ3JvdXAgKi8KKwlmYl9ncm91cF90 IG1hc2sgPSAoKH4oZmJfZ3JvdXBfdCkwKQorCSAgICA+PiAoRkJfR1JPVVBfQklUUyAtIGZpcnN0 X2dyb3VwX2NudCkpCisJICAgIDw8IHN0YXJ0X2JpdF9pbmQ7CisJdmlzaXQoY3R4LCAmZmJbZ3Jv dXBfaW5kXSwgbWFzayk7CisKKwljbnQgLT0gZmlyc3RfZ3JvdXBfY250OworCWdyb3VwX2luZCsr OworCS8qIE1pZGRsZSBncm91cHMgKi8KKwl3aGlsZSAoY250ID4gRkJfR1JPVVBfQklUUykgewor CQl2aXNpdChjdHgsICZmYltncm91cF9pbmRdLCB+KGZiX2dyb3VwX3QpMCk7CisJCWNudCAtPSBG Ql9HUk9VUF9CSVRTOworCQlncm91cF9pbmQrKzsKKwl9CisJLyogTGFzdCBncm91cCAqLworCWlm IChjbnQgIT0gMCkgeworCQltYXNrID0gKH4oZmJfZ3JvdXBfdCkwKSA+PiAoRkJfR1JPVVBfQklU UyAtIGNudCk7CisJCXZpc2l0KGN0eCwgJmZiW2dyb3VwX2luZF0sIG1hc2spOworCX0KK30KKwor SkVNQUxMT0NfQUxXQVlTX0lOTElORSB2b2lkCitmYl9hc3NpZ25fdmlzaXRvcih2b2lkICpjdHgs IGZiX2dyb3VwX3QgKmZiLCBmYl9ncm91cF90IG1hc2spIHsKKwlib29sIHZhbCA9ICooYm9vbCAq KWN0eDsKKwlpZiAodmFsKSB7CisJCSpmYiB8PSBtYXNrOworCX0gZWxzZSB7CisJCSpmYiAmPSB+ bWFzazsKKwl9Cit9CisKKy8qIFNldHMgdGhlIGNudCBiaXRzIHN0YXJ0aW5nIGF0IHBvc2l0aW9u IHN0YXJ0LiAgTXVzdCBub3QgaGF2ZSBhIDAgY291bnQuICovCitzdGF0aWMgaW5saW5lIHZvaWQK K2ZiX3NldF9yYW5nZShmYl9ncm91cF90ICpmYiwgc2l6ZV90IG5iaXRzLCBzaXplX3Qgc3RhcnQs IHNpemVfdCBjbnQpIHsKKwlib29sIHZhbCA9IHRydWU7CisJZmJfdmlzaXRfaW1wbChmYiwgbmJp dHMsICZmYl9hc3NpZ25fdmlzaXRvciwgJnZhbCwgc3RhcnQsIGNudCk7Cit9CisKKy8qIFVuc2V0 cyB0aGUgY250IGJpdHMgc3RhcnRpbmcgYXQgcG9zaXRpb24gc3RhcnQuICBNdXN0IG5vdCBoYXZl IGEgMCBjb3VudC4gKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorZmJfdW5zZXRfcmFuZ2UoZmJfZ3Jv dXBfdCAqZmIsIHNpemVfdCBuYml0cywgc2l6ZV90IHN0YXJ0LCBzaXplX3QgY250KSB7CisJYm9v bCB2YWwgPSBmYWxzZTsKKwlmYl92aXNpdF9pbXBsKGZiLCBuYml0cywgJmZiX2Fzc2lnbl92aXNp dG9yLCAmdmFsLCBzdGFydCwgY250KTsKK30KKworSkVNQUxMT0NfQUxXQVlTX0lOTElORSB2b2lk CitmYl9zY291bnRfdmlzaXRvcih2b2lkICpjdHgsIGZiX2dyb3VwX3QgKmZiLCBmYl9ncm91cF90 IG1hc2spIHsKKwlzaXplX3QgKnNjb3VudCA9IChzaXplX3QgKiljdHg7CisJKnNjb3VudCArPSBw b3Bjb3VudF9sdSgqZmIgJiBtYXNrKTsKK30KKworLyogRmluZHMgdGhlIG51bWJlciBvZiBzZXQg Yml0IGluIHRoZSBvZiBsZW5ndGggY250IHN0YXJ0aW5nIGF0IHN0YXJ0LiAqLworSkVNQUxMT0Nf QUxXQVlTX0lOTElORSBzaXplX3QKK2ZiX3Njb3VudChmYl9ncm91cF90ICpmYiwgc2l6ZV90IG5i aXRzLCBzaXplX3Qgc3RhcnQsIHNpemVfdCBjbnQpIHsKKwlzaXplX3Qgc2NvdW50ID0gMDsKKwlm Yl92aXNpdF9pbXBsKGZiLCBuYml0cywgJmZiX3Njb3VudF92aXNpdG9yLCAmc2NvdW50LCBzdGFy dCwgY250KTsKKwlyZXR1cm4gc2NvdW50OworfQorCisvKiBGaW5kcyB0aGUgbnVtYmVyIG9mIHVu c2V0IGJpdCBpbiB0aGUgb2YgbGVuZ3RoIGNudCBzdGFydGluZyBhdCBzdGFydC4gKi8KK0pFTUFM TE9DX0FMV0FZU19JTkxJTkUgc2l6ZV90CitmYl91Y291bnQoZmJfZ3JvdXBfdCAqZmIsIHNpemVf dCBuYml0cywgc2l6ZV90IHN0YXJ0LCBzaXplX3QgY250KSB7CisJc2l6ZV90IHNjb3VudCA9IGZi X3Njb3VudChmYiwgbmJpdHMsIHN0YXJ0LCBjbnQpOworCXJldHVybiBjbnQgLSBzY291bnQ7Cit9 CisKKy8qCisgKiBBbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWw7IGZpbmQgdGhlIGZpcnN0IGJpdCBh dCBwb3NpdGlvbiA+PSBtaW5fYml0IHdpdGggdGhlCisgKiB2YWx1ZSB2YWwuCisgKgorICogUmV0 dXJucyB0aGUgbnVtYmVyIG9mIGJpdHMgaW4gdGhlIGJpdG1hcCBpZiBubyBzdWNoIGJpdCBleGlz dHMuCisgKi8KK0pFTUFMTE9DX0FMV0FZU19JTkxJTkUgc3NpemVfdAorZmJfZmluZF9pbXBsKGZi X2dyb3VwX3QgKmZiLCBzaXplX3QgbmJpdHMsIHNpemVfdCBzdGFydCwgYm9vbCB2YWwsCisgICAg Ym9vbCBmb3J3YXJkKSB7CisJYXNzZXJ0KHN0YXJ0IDwgbmJpdHMpOworCXNpemVfdCBuZ3JvdXBz ID0gRkJfTkdST1VQUyhuYml0cyk7CisJc3NpemVfdCBncm91cF9pbmQgPSBzdGFydCAvIEZCX0dS T1VQX0JJVFM7CisJc2l6ZV90IGJpdF9pbmQgPSBzdGFydCAlIEZCX0dST1VQX0JJVFM7CisKKwlm Yl9ncm91cF90IG1heWJlX2ludmVydCA9ICh2YWwgPyAwIDogKGZiX2dyb3VwX3QpLTEpOworCisJ ZmJfZ3JvdXBfdCBncm91cCA9IGZiW2dyb3VwX2luZF07CisJZ3JvdXAgXj0gbWF5YmVfaW52ZXJ0 OworCWlmIChmb3J3YXJkKSB7CisJCS8qIE9ubHkga2VlcCBvbmVzIGluIGJpdHMgYml0X2luZCBh bmQgYWJvdmUuICovCisJCWdyb3VwICY9IH4oKDFMVSA8PCBiaXRfaW5kKSAtIDEpOworCX0gZWxz ZSB7CisJCS8qCisJCSAqIE9ubHkga2VlcCBvbmVzIGluIGJpdHMgYml0X2luZCBhbmQgYmVsb3cu ICBZb3UgbWlnaHQgbW9yZQorCQkgKiBuYXR1cmFsbHkgZXhwcmVzcyB0aGlzIGFzICgxIDw8IChi aXRfaW5kICsgMSkpIC0gMSwgYnV0CisJCSAqIHRoYXQgc2hpZnRzIGJ5IGFuIGludmFsaWQgYW1v dW50IGlmIGJpdF9pbmQgaXMgb25lIGxlc3MgdGhhbgorCQkgKiBGQl9HUk9VUF9CSVRTLgorCQkg Ki8KKwkJZ3JvdXAgJj0gKCgyTFUgPDwgYml0X2luZCkgLSAxKTsKKwl9CisJc3NpemVfdCBncm91 cF9pbmRfYm91bmQgPSBmb3J3YXJkID8gKHNzaXplX3Qpbmdyb3VwcyA6IC0xOworCXdoaWxlIChn cm91cCA9PSAwKSB7CisJCWdyb3VwX2luZCArPSBmb3J3YXJkID8gMSA6IC0xOworCQlpZiAoZ3Jv dXBfaW5kID09IGdyb3VwX2luZF9ib3VuZCkgeworCQkJcmV0dXJuIGZvcndhcmQgPyAoc3NpemVf dCluYml0cyA6IChzc2l6ZV90KS0xOworCQl9CisJCWdyb3VwID0gZmJbZ3JvdXBfaW5kXTsKKwkJ Z3JvdXAgXj0gbWF5YmVfaW52ZXJ0OworCX0KKwlhc3NlcnQoZ3JvdXAgIT0gMCk7CisJc2l6ZV90 IGJpdCA9IGZvcndhcmQgPyBmZnNfbHUoZ3JvdXApIDogZmxzX2x1KGdyb3VwKTsKKwlzaXplX3Qg cG9zID0gZ3JvdXBfaW5kICogRkJfR1JPVVBfQklUUyArIGJpdDsKKwkvKgorCSAqIFRoZSBoaWdo IGJpdHMgb2YgYSBwYXJ0aWFsbHkgZmlsbGVkIGxhc3QgZ3JvdXAgYXJlIHplcm9zLCBzbyBpZiB3 ZSdyZQorCSAqIGxvb2tpbmcgZm9yIHplcm9zIHdlIGRvbid0IHdhbnQgdG8gcmVwb3J0IGFuIGlu dmFsaWQgcmVzdWx0LgorCSAqLworCWlmIChmb3J3YXJkICYmICF2YWwgJiYgcG9zID4gbmJpdHMp IHsKKwkJcmV0dXJuIG5iaXRzOworCX0KKwlyZXR1cm4gcG9zOworfQorCisvKgorICogRmluZCB0 aGUgZmlyc3Qgc2V0IGJpdCBpbiB0aGUgYml0bWFwIHdpdGggYW4gaW5kZXggPj0gbWluX2JpdC4g IFJldHVybnMgdGhlCisgKiBudW1iZXIgb2YgYml0cyBpbiB0aGUgYml0bWFwIGlmIG5vIHN1Y2gg Yml0IGV4aXN0cy4KKyAqLworc3RhdGljIGlubGluZSBzaXplX3QKK2ZiX2ZmdShmYl9ncm91cF90 ICpmYiwgc2l6ZV90IG5iaXRzLCBzaXplX3QgbWluX2JpdCkgeworCXJldHVybiAoc2l6ZV90KWZi X2ZpbmRfaW1wbChmYiwgbmJpdHMsIG1pbl9iaXQsIC8qIHZhbCAqLyBmYWxzZSwKKwkgICAgLyog Zm9yd2FyZCAqLyB0cnVlKTsKK30KKworLyogVGhlIHNhbWUsIGJ1dCBsb29rcyBmb3IgYW4gdW5z ZXQgYml0LiAqLworc3RhdGljIGlubGluZSBzaXplX3QKK2ZiX2ZmcyhmYl9ncm91cF90ICpmYiwg c2l6ZV90IG5iaXRzLCBzaXplX3QgbWluX2JpdCkgeworCXJldHVybiAoc2l6ZV90KWZiX2ZpbmRf aW1wbChmYiwgbmJpdHMsIG1pbl9iaXQsIC8qIHZhbCAqLyB0cnVlLAorCSAgICAvKiBmb3J3YXJk ICovIHRydWUpOworfQorCisvKgorICogRmluZCB0aGUgbGFzdCBzZXQgYml0IGluIHRoZSBiaXRt YXAgd2l0aCBhbiBpbmRleCA8PSBtYXhfYml0LiAgUmV0dXJucyAtMSBpZgorICogbm8gc3VjaCBi aXQgZXhpc3RzLgorICovCitzdGF0aWMgaW5saW5lIHNzaXplX3QKK2ZiX2ZsdShmYl9ncm91cF90 ICpmYiwgc2l6ZV90IG5iaXRzLCBzaXplX3QgbWF4X2JpdCkgeworCXJldHVybiBmYl9maW5kX2lt cGwoZmIsIG5iaXRzLCBtYXhfYml0LCAvKiB2YWwgKi8gZmFsc2UsCisJICAgIC8qIGZvcndhcmQg Ki8gZmFsc2UpOworfQorCitzdGF0aWMgaW5saW5lIHNzaXplX3QKK2ZiX2ZscyhmYl9ncm91cF90 ICpmYiwgc2l6ZV90IG5iaXRzLCBzaXplX3QgbWF4X2JpdCkgeworCXJldHVybiBmYl9maW5kX2lt cGwoZmIsIG5iaXRzLCBtYXhfYml0LCAvKiB2YWwgKi8gdHJ1ZSwKKwkgICAgLyogZm9yd2FyZCAq LyBmYWxzZSk7Cit9CisKKy8qIFJldHVybnMgd2hldGhlciBvciBub3Qgd2UgZm91bmQgYSByYW5n ZS4gKi8KK0pFTUFMTE9DX0FMV0FZU19JTkxJTkUgYm9vbAorZmJfaXRlcl9yYW5nZV9pbXBsKGZi X2dyb3VwX3QgKmZiLCBzaXplX3QgbmJpdHMsIHNpemVfdCBzdGFydCwgc2l6ZV90ICpyX2JlZ2lu LAorICAgIHNpemVfdCAqcl9sZW4sIGJvb2wgdmFsLCBib29sIGZvcndhcmQpIHsKKwlhc3NlcnQo c3RhcnQgPCBuYml0cyk7CisJc3NpemVfdCBuZXh0X3JhbmdlX2JlZ2luID0gZmJfZmluZF9pbXBs KGZiLCBuYml0cywgc3RhcnQsIHZhbCwgZm9yd2FyZCk7CisJaWYgKChmb3J3YXJkICYmIG5leHRf cmFuZ2VfYmVnaW4gPT0gKHNzaXplX3QpbmJpdHMpCisJICAgIHx8ICghZm9yd2FyZCAmJiBuZXh0 X3JhbmdlX2JlZ2luID09IChzc2l6ZV90KS0xKSkgeworCQlyZXR1cm4gZmFsc2U7CisJfQorCS8q IEhhbGYgb3BlbiByYW5nZTsgdGhlIHNldCBiaXRzIGFyZSBbYmVnaW4sIGVuZCkuICovCisJc3Np emVfdCBuZXh0X3JhbmdlX2VuZCA9IGZiX2ZpbmRfaW1wbChmYiwgbmJpdHMsIG5leHRfcmFuZ2Vf YmVnaW4sICF2YWwsCisJICAgIGZvcndhcmQpOworCWlmIChmb3J3YXJkKSB7CisJCSpyX2JlZ2lu ID0gbmV4dF9yYW5nZV9iZWdpbjsKKwkJKnJfbGVuID0gbmV4dF9yYW5nZV9lbmQgLSBuZXh0X3Jh bmdlX2JlZ2luOworCX0gZWxzZSB7CisJCSpyX2JlZ2luID0gbmV4dF9yYW5nZV9lbmQgKyAxOwor CQkqcl9sZW4gPSBuZXh0X3JhbmdlX2JlZ2luIC0gbmV4dF9yYW5nZV9lbmQ7CisJfQorCXJldHVy biB0cnVlOworfQorCisvKgorICogVXNlZCB0byBpdGVyYXRlIHRocm91Z2ggcmFuZ2VzIG9mIHNl dCBiaXRzLgorICoKKyAqIFRyaWVzIHRvIGZpbmQgdGhlIG5leHQgY29udGlndW91cyBzZXF1ZW5j ZSBvZiBzZXQgYml0cyB3aXRoIGEgZmlyc3QgaW5kZXggPj0KKyAqIHN0YXJ0LiAgSWYgb25lIGV4 aXN0cywgcHV0cyB0aGUgZWFybGllc3QgYml0IG9mIHRoZSByYW5nZSBpbiAqcl9iZWdpbiwgaXRz CisgKiBsZW5ndGggaW4gKnJfbGVuLCBhbmQgcmV0dXJucyB0cnVlLiAgT3RoZXJ3aXNlLCByZXR1 cm5zIGZhbHNlICh3aXRob3V0CisgKiB0b3VjaGluZyAqcl9iZWdpbiBvciAqcl9lbmQpLgorICov CitzdGF0aWMgaW5saW5lIGJvb2wKK2ZiX3NyYW5nZV9pdGVyKGZiX2dyb3VwX3QgKmZiLCBzaXpl X3QgbmJpdHMsIHNpemVfdCBzdGFydCwgc2l6ZV90ICpyX2JlZ2luLAorICAgIHNpemVfdCAqcl9s ZW4pIHsKKwlyZXR1cm4gZmJfaXRlcl9yYW5nZV9pbXBsKGZiLCBuYml0cywgc3RhcnQsIHJfYmVn aW4sIHJfbGVuLAorCSAgICAvKiB2YWwgKi8gdHJ1ZSwgLyogZm9yd2FyZCAqLyB0cnVlKTsKK30K KworLyoKKyAqIFRoZSBzYW1lIGFzIGZiX3NyYW5nZV9pdGVyLCBidXQgc2VhcmNoZXMgYmFja3dh cmRzIGZyb20gc3RhcnQgcmF0aGVyIHRoYW4KKyAqIGZvcndhcmRzLiAgKFRoZSBwb3NpdGlvbiBy ZXR1cm5lZCBpcyBzdGlsbCB0aGUgZWFybGllc3QgYml0IGluIHRoZSByYW5nZSkuCisgKi8KK3N0 YXRpYyBpbmxpbmUgYm9vbAorZmJfc3JhbmdlX3JpdGVyKGZiX2dyb3VwX3QgKmZiLCBzaXplX3Qg bmJpdHMsIHNpemVfdCBzdGFydCwgc2l6ZV90ICpyX2JlZ2luLAorICAgIHNpemVfdCAqcl9sZW4p IHsKKwlyZXR1cm4gZmJfaXRlcl9yYW5nZV9pbXBsKGZiLCBuYml0cywgc3RhcnQsIHJfYmVnaW4s IHJfbGVuLAorCSAgICAvKiB2YWwgKi8gdHJ1ZSwgLyogZm9yd2FyZCAqLyBmYWxzZSk7Cit9CisK Ky8qIFNpbWlsYXIgdG8gZmJfc3JhbmdlX2l0ZXIsIGJ1dCBzZWFyY2hlcyBmb3IgdW5zZXQgYml0 cy4gKi8KK3N0YXRpYyBpbmxpbmUgYm9vbAorZmJfdXJhbmdlX2l0ZXIoZmJfZ3JvdXBfdCAqZmIs IHNpemVfdCBuYml0cywgc2l6ZV90IHN0YXJ0LCBzaXplX3QgKnJfYmVnaW4sCisgICAgc2l6ZV90 ICpyX2xlbikgeworCXJldHVybiBmYl9pdGVyX3JhbmdlX2ltcGwoZmIsIG5iaXRzLCBzdGFydCwg cl9iZWdpbiwgcl9sZW4sCisJICAgIC8qIHZhbCAqLyBmYWxzZSwgLyogZm9yd2FyZCAqLyB0cnVl KTsKK30KKworLyogU2ltaWxhciB0byBmYl9zcmFuZ2Vfcml0ZXIsIGJ1dCBzZWFyY2hlcyBmb3Ig dW5zZXQgYml0cy4gKi8KK3N0YXRpYyBpbmxpbmUgYm9vbAorZmJfdXJhbmdlX3JpdGVyKGZiX2dy b3VwX3QgKmZiLCBzaXplX3QgbmJpdHMsIHNpemVfdCBzdGFydCwgc2l6ZV90ICpyX2JlZ2luLAor ICAgIHNpemVfdCAqcl9sZW4pIHsKKwlyZXR1cm4gZmJfaXRlcl9yYW5nZV9pbXBsKGZiLCBuYml0 cywgc3RhcnQsIHJfYmVnaW4sIHJfbGVuLAorCSAgICAvKiB2YWwgKi8gZmFsc2UsIC8qIGZvcndh cmQgKi8gZmFsc2UpOworfQorCitKRU1BTExPQ19BTFdBWVNfSU5MSU5FIHNpemVfdAorZmJfcmFu Z2VfbG9uZ2VzdF9pbXBsKGZiX2dyb3VwX3QgKmZiLCBzaXplX3QgbmJpdHMsIGJvb2wgdmFsKSB7 CisJc2l6ZV90IGJlZ2luID0gMDsKKwlzaXplX3QgbG9uZ2VzdF9sZW4gPSAwOworCXNpemVfdCBs ZW4gPSAwOworCXdoaWxlIChiZWdpbiA8IG5iaXRzICYmIGZiX2l0ZXJfcmFuZ2VfaW1wbChmYiwg bmJpdHMsIGJlZ2luLCAmYmVnaW4sCisJICAgICZsZW4sIHZhbCwgLyogZm9yd2FyZCAqLyB0cnVl KSkgeworCQlpZiAobGVuID4gbG9uZ2VzdF9sZW4pIHsKKwkJCWxvbmdlc3RfbGVuID0gbGVuOwor CQl9CisJCWJlZ2luICs9IGxlbjsKKwl9CisJcmV0dXJuIGxvbmdlc3RfbGVuOworfQorCitzdGF0 aWMgaW5saW5lIHNpemVfdAorZmJfc3JhbmdlX2xvbmdlc3QoZmJfZ3JvdXBfdCAqZmIsIHNpemVf dCBuYml0cykgeworCXJldHVybiBmYl9yYW5nZV9sb25nZXN0X2ltcGwoZmIsIG5iaXRzLCAvKiB2 YWwgKi8gdHJ1ZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc2l6ZV90CitmYl91cmFuZ2VfbG9uZ2Vz dChmYl9ncm91cF90ICpmYiwgc2l6ZV90IG5iaXRzKSB7CisJcmV0dXJuIGZiX3JhbmdlX2xvbmdl c3RfaW1wbChmYiwgbmJpdHMsIC8qIHZhbCAqLyBmYWxzZSk7Cit9CisKKy8qCisgKiBJbml0aWFs aXplcyBlYWNoIGJpdCBvZiBkc3Qgd2l0aCB0aGUgYml0d2lzZS1BTkQgb2YgdGhlIGNvcnJlc3Bv bmRpbmcgYml0cyBvZgorICogc3JjMSBhbmQgc3JjMi4gIEFsbCBiaXRtYXBzIG11c3QgYmUgdGhl IHNhbWUgc2l6ZS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkCitmYl9iaXRfYW5kKGZiX2dyb3Vw X3QgKmRzdCwgZmJfZ3JvdXBfdCAqc3JjMSwgZmJfZ3JvdXBfdCAqc3JjMiwgc2l6ZV90IG5iaXRz KSB7CisJc2l6ZV90IG5ncm91cHMgPSBGQl9OR1JPVVBTKG5iaXRzKTsKKwlmb3IgKHNpemVfdCBp ID0gMDsgaSA8IG5ncm91cHM7IGkrKykgeworCQlkc3RbaV0gPSBzcmMxW2ldICYgc3JjMltpXTsK Kwl9Cit9CisKKy8qIExpa2UgZmJfYml0X2FuZCwgYnV0IHdpdGggYml0d2lzZS1PUi4gKi8KK3N0 YXRpYyBpbmxpbmUgdm9pZAorZmJfYml0X29yKGZiX2dyb3VwX3QgKmRzdCwgZmJfZ3JvdXBfdCAq c3JjMSwgZmJfZ3JvdXBfdCAqc3JjMiwgc2l6ZV90IG5iaXRzKSB7CisJc2l6ZV90IG5ncm91cHMg PSBGQl9OR1JPVVBTKG5iaXRzKTsKKwlmb3IgKHNpemVfdCBpID0gMDsgaSA8IG5ncm91cHM7IGkr KykgeworCQlkc3RbaV0gPSBzcmMxW2ldIHwgc3JjMltpXTsKKwl9Cit9CisKKy8qIEluaXRpYWxp emVzIGRzdCBiaXQgaSB0byB0aGUgbmVnYXRpb24gb2Ygc291cmNlIGJpdCBpLiAqLworc3RhdGlj IGlubGluZSB2b2lkCitmYl9iaXRfbm90KGZiX2dyb3VwX3QgKmRzdCwgZmJfZ3JvdXBfdCAqc3Jj LCBzaXplX3QgbmJpdHMpIHsKKwlzaXplX3Qgbmdyb3VwcyA9IEZCX05HUk9VUFMobmJpdHMpOwor CWZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbmdyb3VwczsgaSsrKSB7CisJCWRzdFtpXSA9IH5zcmNb aV07CisJfQorfQorCisjZW5kaWYgLyogSkVNQUxMT0NfSU5URVJOQUxfRkJfSCAqLwoKZGlmZiAt LWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVt YWxsb2MvaW50ZXJuYWwvZnhwLmggYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01 LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL2Z4cC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAuLjQxNWE5ODIKLS0tIC9kZXYvbnVsbAorKysgYi8zODktZHMtYmFzZS0z LjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL2Z4cC5o CkBAIC0wLDAgKzEsMTI2IEBACisjaWZuZGVmIEpFTUFMTE9DX0lOVEVSTkFMX0ZYUF9ICisjZGVm aW5lIEpFTUFMTE9DX0lOVEVSTkFMX0ZYUF9ICisKKy8qCisgKiBBIHNpbXBsZSBmaXhlZC1wb2lu dCBtYXRoIGltcGxlbWVudGF0aW9uLCBzdXBwb3J0aW5nIG9ubHkgdW5zaWduZWQgdmFsdWVzCisg KiAod2l0aCBvdmVyZmxvdyBiZWluZyBhbiBlcnJvcikuCisgKgorICogSXQncyBub3QgaW4gZ2Vu ZXJhbCBzYWZlIHRvIHVzZSBmbG9hdGluZyBwb2ludCBpbiBjb3JlIGNvZGUsIGJlY2F1c2UgdmFy aW91cworICogbGliYyBpbXBsZW1lbnRhdGlvbnMgd2UgZ2V0IGxpbmtlZCBhZ2FpbnN0IGNhbiBh c3N1bWUgdGhhdCBtYWxsb2Mgd29uJ3QgdG91Y2gKKyAqIGZsb2F0aW5nIHBvaW50IHN0YXRlIGFu ZCBjYWxsIGl0IHdpdGggYW4gdW51c3VhbCBjYWxsaW5nIGNvbnZlbnRpb24uCisgKi8KKworLyoK KyAqIEhpZ2ggMTYgYml0cyBhcmUgdGhlIGludGVnZXIgcGFydCwgbG93IDE2IGFyZSB0aGUgZnJh Y3Rpb25hbCBwYXJ0LiAgT3IKKyAqIGVxdWl2YWxlbnRseSwgcmVwciA9PSAyKioxNiAqIHZhbCwg d2hlcmUgd2UgdXNlICJ2YWwiIHRvIHJlZmVyIHRvIHRoZQorICogKGltYWdpbmFyeSkgZnJhY3Rp b25hbCByZXByZXNlbnRhdGlvbiBvZiB0aGUgdHJ1ZSB2YWx1ZS4KKyAqCisgKiBXZSBwaWNrIGEg dWludDMyX3QgaGVyZSBzaW5jZSBpdCdzIGNvbnZlbmllbnQgaW4gc29tZSBwbGFjZXMgdG8KKyAq IGRvdWJsZSB0aGUgcmVwcmVzZW50YXRpb24gc2l6ZSAoaS5lLiBtdWx0aXBsaWNhdGlvbiBhbmQg ZGl2aXNpb24gdXNlCisgKiA2NC1iaXQgaW50ZWdlciB0eXBlcyksIGFuZCBhIHVpbnQ2NF90IGlz IHRoZSBsYXJnZXN0IHR5cGUgd2UncmUKKyAqIGNlcnRhaW4gaXMgYXZhaWxhYmxlLgorICovCit0 eXBlZGVmIHVpbnQzMl90IGZ4cF90OworI2RlZmluZSBGWFBfSU5JVF9JTlQoeCkgKCh4KSA8PCAx NikKKyNkZWZpbmUgRlhQX0lOSVRfUEVSQ0VOVChwY3QpICgoKHBjdCkgPDwgMTYpIC8gMTAwKQor CisvKgorICogQW1vdW50IG9mIHByZWNpc2lvbiB1c2VkIGluIHBhcnNpbmcgYW5kIHByaW50aW5n IG51bWJlcnMuICBUaGUgaW50ZWdlciBib3VuZAorICogaXMgc2ltcGx5IGJlY2F1c2UgdGhlIGlu dGVnZXIgcGFydCBvZiB0aGUgbnVtYmVyIGdldHMgMTYgYml0cywgYW5kIHNvIGlzCisgKiBib3Vu ZGVkIGJ5IDY1NTM2LgorICoKKyAqIFdlIHVzZSBhIGxvdCBvZiBwcmVjaXNpb24gZm9yIHRoZSBm cmFjdGlvbmFsIHBhcnQsIGV2ZW4gdGhvdWdoIG1vc3Qgb2YgaXQKKyAqIGdldHMgcm91bmRlZCBv ZmY7IHRoaXMgbGV0cyB1cyBnZXQgZXhhY3QgdmFsdWVzIGZvciB0aGUgaW1wb3J0YW50IHNwZWNp YWwKKyAqIGNhc2Ugd2hlcmUgdGhlIGRlbm9taW5hdG9yIGlzIGEgc21hbGwgcG93ZXIgb2YgMiAo Zm9yIGluc3RhbmNlLAorICogMS81MTIgPT0gMC4wMDE5NTMxMjUgaXMgZXhhY3RseSByZXByZXNl bnRhYmxlIGV2ZW4gd2l0aCBvbmx5IDE2IGJpdHMgb2YKKyAqIGZyYWN0aW9uYWwgcHJlY2lzaW9u KS4gIFdlIG5lZWQgdG8gbGVmdC1zaGlmdCBieSAxNiBiZWZvcmUgZGl2aWRpbmcgYnkKKyAqIDEw KipwcmVjaXNpb24sIHNvIHdlIHBpY2sgcHJlY2lzaW9uIHRvIGJlIGZsb29yKGxvZygyKio0OCkp ID0gMTQuCisgKi8KKyNkZWZpbmUgRlhQX0lOVEVHRVJfUEFSVF9ESUdJVFMgNQorI2RlZmluZSBG WFBfRlJBQ1RJT05BTF9QQVJUX0RJR0lUUyAxNAorCisvKgorICogSW4gYWRkaXRpb24gdG8gdGhl IGludGVnZXIgYW5kIGZyYWN0aW9uYWwgcGFydHMgb2YgdGhlIG51bWJlciwgd2UgbmVlZCB0bwor ICogaW5jbHVkZSBhIG51bGwgY2hhcmFjdGVyIGFuZCAocG9zc2libHkpIGEgZGVjaW1hbCBwb2lu dC4KKyAqLworI2RlZmluZSBGWFBfQlVGX1NJWkUgKEZYUF9JTlRFR0VSX1BBUlRfRElHSVRTICsg RlhQX0ZSQUNUSU9OQUxfUEFSVF9ESUdJVFMgKyAyKQorCitzdGF0aWMgaW5saW5lIGZ4cF90Citm eHBfYWRkKGZ4cF90IGEsIGZ4cF90IGIpIHsKKwlyZXR1cm4gYSArIGI7Cit9CisKK3N0YXRpYyBp bmxpbmUgZnhwX3QKK2Z4cF9zdWIoZnhwX3QgYSwgZnhwX3QgYikgeworCWFzc2VydChhID49IGIp OworCXJldHVybiBhIC0gYjsKK30KKworc3RhdGljIGlubGluZSBmeHBfdAorZnhwX211bChmeHBf dCBhLCBmeHBfdCBiKSB7CisJdWludDY0X3QgdW5zaGlmdGVkID0gKHVpbnQ2NF90KWEgKiAodWlu dDY0X3QpYjsKKwkvKgorCSAqIFVuc2hpZnRlZCBpcyAoYS52YWwgKiAyKioxNikgKiAoYi52YWwg KiAyKioxNikKKwkgKiAgID09IChhLnZhbCAqIGIudmFsKSAqIDIqKjMyLCBidXQgd2Ugd2FudAor CSAqIChhLnZhbCAqIGIudmFsKSAqIDIgKiogMTYuCisJICovCisJcmV0dXJuICh1aW50MzJfdCko dW5zaGlmdGVkID4+IDE2KTsKK30KKworc3RhdGljIGlubGluZSBmeHBfdAorZnhwX2RpdihmeHBf dCBhLCBmeHBfdCBiKSB7CisJYXNzZXJ0KGIgIT0gMCk7CisJdWludDY0X3QgdW5zaGlmdGVkID0g KCh1aW50NjRfdClhIDw8IDMyKSAvICh1aW50NjRfdCliOworCS8qCisJICogVW5zaGlmdGVkIGlz IChhLnZhbCAqIDIqKjE2KSAqICgyKiozMikgLyAoYi52YWwgKiAyKioxNikKKwkgKiAgID09IChh LnZhbCAvIGIudmFsKSAqICgyICoqIDMyKSwgd2hpY2ggYWdhaW4gY29ycmVzcG9uZHMgdG8gYSBy aWdodAorCSAqICAgc2hpZnQgb2YgMTYuCisJICovCisJcmV0dXJuICh1aW50MzJfdCkodW5zaGlm dGVkID4+IDE2KTsKK30KKworc3RhdGljIGlubGluZSB1aW50MzJfdAorZnhwX3JvdW5kX2Rvd24o ZnhwX3QgYSkgeworCXJldHVybiBhID4+IDE2OworfQorCitzdGF0aWMgaW5saW5lIHVpbnQzMl90 CitmeHBfcm91bmRfbmVhcmVzdChmeHBfdCBhKSB7CisJdWludDMyX3QgZnJhY3Rpb25hbF9wYXJ0 ID0gKGEgICYgKCgxVSA8PCAxNikgLSAxKSk7CisJdWludDMyX3QgaW5jcmVtZW50ID0gKHVpbnQz Ml90KShmcmFjdGlvbmFsX3BhcnQgPj0gKDFVIDw8IDE1KSk7CisJcmV0dXJuIChhID4+IDE2KSAr IGluY3JlbWVudDsKK30KKworLyoKKyAqIEFwcHJveGltYXRlbHkgY29tcHV0ZXMgeCAqIGZyYWMs IHdpdGhvdXQgdGhlIHNpemUgbGltaXRhdGlvbnMgdGhhdCB3b3VsZCBiZQorICogaW1wb3NlZCBi eSBjb252ZXJ0aW5nIHUgdG8gYW4gZnhwX3QuCisgKi8KK3N0YXRpYyBpbmxpbmUgc2l6ZV90Citm eHBfbXVsX2ZyYWMoc2l6ZV90IHhfb3JpZywgZnhwX3QgZnJhYykgeworCWFzc2VydChmcmFjIDw9 ICgxVSA8PCAxNikpOworCS8qCisJICogV29yayBhcm91bmQgYW4gb3Zlci1lbnRodXNpYXN0aWMg d2FybmluZyBhYm91dCB0eXBlIGxpbWl0cyBiZWxvdyAob24KKwkgKiAzMi1iaXQgcGxhdGZvcm1z LCBhIHNpemVfdCBpcyBhbHdheXMgbGVzcyB0aGFuIDFVTEwgPDwgNDgpLgorCSAqLworCXVpbnQ2 NF90IHggPSAodWludDY0X3QpeF9vcmlnOworCS8qCisJICogSWYgd2UgY2FuIGd1YXJhbnRlZSBu byBvdmVyZmxvdywgbXVsdGlwbHkgZmlyc3QgYmVmb3JlIHNoaWZ0aW5nLCB0bworCSAqIHByZXNl cnZlIHNvbWUgcHJlY2lzaW9uLiAgT3RoZXJ3aXNlLCBzaGlmdCBmaXJzdCBhbmQgdGhlbiBtdWx0 aXBseS4KKwkgKiBJbiB0aGUgbGF0dGVyIGNhc2UsIHdlIG9ubHkgbG9zZSB0aGUgbG93IDE2IGJp dHMgb2YgYSA0OC1iaXQgbnVtYmVyLAorCSAqIHNvIHdlJ3JlIHN0aWxsIGFjY3VyYXRlIHRvIHdp dGhpbiAxLzIqKjMyLgorCSAqLworCWlmICh4IDwgKDFVTEwgPDwgNDgpKSB7CisJCXJldHVybiAo c2l6ZV90KSgoeCAqIGZyYWMpID4+IDE2KTsKKwl9IGVsc2UgeworCQlyZXR1cm4gKHNpemVfdCko KHggPj4gMTYpICogKHVpbnQ2NF90KWZyYWMpOworCX0KK30KKworLyoKKyAqIFJldHVybnMgdHJ1 ZSBvbiBlcnJvci4gIE90aGVyd2lzZSwgcmV0dXJucyBmYWxzZSBhbmQgdXBkYXRlcyAqcHRyIHRv IHBvaW50IHRvCisgKiB0aGUgZmlyc3QgY2hhcmFjdGVyIG5vdCBwYXJzZWQgKGJlY2F1c2UgaXQg d2Fzbid0IGEgZGlnaXQpLgorICovCitib29sIGZ4cF9wYXJzZShmeHBfdCAqYSwgY29uc3QgY2hh ciAqcHRyLCBjaGFyICoqZW5kKTsKK3ZvaWQgZnhwX3ByaW50KGZ4cF90IGEsIGNoYXIgYnVmW0ZY UF9CVUZfU0laRV0pOworCisjZW5kaWYgLyogSkVNQUxMT0NfSU5URVJOQUxfRlhQX0ggKi8KCmRp ZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRl L2plbWFsbG9jL2ludGVybmFsL2hhc2guaCBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFs bG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvaGFzaC5oCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmOTQ1NjcKLS0tIC9kZXYvbnVsbAorKysgYi8zODktZHMt YmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFs L2hhc2guaApAQCAtMCwwICsxLDMyMCBAQAorI2lmbmRlZiBKRU1BTExPQ19JTlRFUk5BTF9IQVNI X0gKKyNkZWZpbmUgSkVNQUxMT0NfSU5URVJOQUxfSEFTSF9ICisKKyNpbmNsdWRlICJqZW1hbGxv Yy9pbnRlcm5hbC9hc3NlcnQuaCIKKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgaGFzaCBmdW5jdGlv biBpcyBiYXNlZCBvbiBNdXJtdXJIYXNoMywgcGxhY2VkIGludG8gdGhlIHB1YmxpYworICogZG9t YWluIGJ5IEF1c3RpbiBBcHBsZWJ5LiAgU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hYXBwbGVieS9z bWhhc2hlciBmb3IKKyAqIGRldGFpbHMuCisgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8K Ky8qIEludGVybmFsIGltcGxlbWVudGF0aW9uLiAqLworc3RhdGljIGlubGluZSB1aW50MzJfdAor aGFzaF9yb3RsXzMyKHVpbnQzMl90IHgsIGludDhfdCByKSB7CisJcmV0dXJuICgoeCA8PCByKSB8 ICh4ID4+ICgzMiAtIHIpKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdWludDY0X3QKK2hhc2hfcm90 bF82NCh1aW50NjRfdCB4LCBpbnQ4X3QgcikgeworCXJldHVybiAoKHggPDwgcikgfCAoeCA+PiAo NjQgLSByKSkpOworfQorCitzdGF0aWMgaW5saW5lIHVpbnQzMl90CitoYXNoX2dldF9ibG9ja18z Mihjb25zdCB1aW50MzJfdCAqcCwgaW50IGkpIHsKKwkvKiBIYW5kbGUgdW5hbGlnbmVkIHJlYWQu ICovCisJaWYgKHVubGlrZWx5KCh1aW50cHRyX3QpcCAmIChzaXplb2YodWludDMyX3QpLTEpKSAh PSAwKSB7CisJCXVpbnQzMl90IHJldDsKKworCQltZW1jcHkoJnJldCwgKHVpbnQ4X3QgKikocCAr IGkpLCBzaXplb2YodWludDMyX3QpKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gcFtp XTsKK30KKworc3RhdGljIGlubGluZSB1aW50NjRfdAoraGFzaF9nZXRfYmxvY2tfNjQoY29uc3Qg dWludDY0X3QgKnAsIGludCBpKSB7CisJLyogSGFuZGxlIHVuYWxpZ25lZCByZWFkLiAqLworCWlm ICh1bmxpa2VseSgodWludHB0cl90KXAgJiAoc2l6ZW9mKHVpbnQ2NF90KS0xKSkgIT0gMCkgewor CQl1aW50NjRfdCByZXQ7CisKKwkJbWVtY3B5KCZyZXQsICh1aW50OF90ICopKHAgKyBpKSwgc2l6 ZW9mKHVpbnQ2NF90KSk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIHBbaV07Cit9CisK K3N0YXRpYyBpbmxpbmUgdWludDMyX3QKK2hhc2hfZm1peF8zMih1aW50MzJfdCBoKSB7CisJaCBe PSBoID4+IDE2OworCWggKj0gMHg4NWViY2E2YjsKKwloIF49IGggPj4gMTM7CisJaCAqPSAweGMy YjJhZTM1OworCWggXj0gaCA+PiAxNjsKKworCXJldHVybiBoOworfQorCitzdGF0aWMgaW5saW5l IHVpbnQ2NF90CitoYXNoX2ZtaXhfNjQodWludDY0X3QgaykgeworCWsgXj0gayA+PiAzMzsKKwlr ICo9IEtRVSgweGZmNTFhZmQ3ZWQ1NThjY2QpOworCWsgXj0gayA+PiAzMzsKKwlrICo9IEtRVSgw eGM0Y2ViOWZlMWE4NWVjNTMpOworCWsgXj0gayA+PiAzMzsKKworCXJldHVybiBrOworfQorCitz dGF0aWMgaW5saW5lIHVpbnQzMl90CitoYXNoX3g4Nl8zMihjb25zdCB2b2lkICprZXksIGludCBs ZW4sIHVpbnQzMl90IHNlZWQpIHsKKwljb25zdCB1aW50OF90ICpkYXRhID0gKGNvbnN0IHVpbnQ4 X3QgKikga2V5OworCWNvbnN0IGludCBuYmxvY2tzID0gbGVuIC8gNDsKKworCXVpbnQzMl90IGgx ID0gc2VlZDsKKworCWNvbnN0IHVpbnQzMl90IGMxID0gMHhjYzllMmQ1MTsKKwljb25zdCB1aW50 MzJfdCBjMiA9IDB4MWI4NzM1OTM7CisKKwkvKiBib2R5ICovCisJeworCQljb25zdCB1aW50MzJf dCAqYmxvY2tzID0gKGNvbnN0IHVpbnQzMl90ICopIChkYXRhICsgbmJsb2Nrcyo0KTsKKwkJaW50 IGk7CisKKwkJZm9yIChpID0gLW5ibG9ja3M7IGk7IGkrKykgeworCQkJdWludDMyX3QgazEgPSBo YXNoX2dldF9ibG9ja18zMihibG9ja3MsIGkpOworCisJCQlrMSAqPSBjMTsKKwkJCWsxID0gaGFz aF9yb3RsXzMyKGsxLCAxNSk7CisJCQlrMSAqPSBjMjsKKworCQkJaDEgXj0gazE7CisJCQloMSA9 IGhhc2hfcm90bF8zMihoMSwgMTMpOworCQkJaDEgPSBoMSo1ICsgMHhlNjU0NmI2NDsKKwkJfQor CX0KKworCS8qIHRhaWwgKi8KKwl7CisJCWNvbnN0IHVpbnQ4X3QgKnRhaWwgPSAoY29uc3QgdWlu dDhfdCAqKSAoZGF0YSArIG5ibG9ja3MqNCk7CisKKwkJdWludDMyX3QgazEgPSAwOworCisJCXN3 aXRjaCAobGVuICYgMykgeworCQljYXNlIDM6IGsxIF49IHRhaWxbMl0gPDwgMTY7IEpFTUFMTE9D X0ZBTExUSFJPVUdIOworCQljYXNlIDI6IGsxIF49IHRhaWxbMV0gPDwgODsgSkVNQUxMT0NfRkFM TFRIUk9VR0g7CisJCWNhc2UgMTogazEgXj0gdGFpbFswXTsgazEgKj0gYzE7IGsxID0gaGFzaF9y b3RsXzMyKGsxLCAxNSk7CisJCQlrMSAqPSBjMjsgaDEgXj0gazE7CisJCX0KKwl9CisKKwkvKiBm aW5hbGl6YXRpb24gKi8KKwloMSBePSBsZW47CisKKwloMSA9IGhhc2hfZm1peF8zMihoMSk7CisK KwlyZXR1cm4gaDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAoraGFzaF94ODZfMTI4KGNvbnN0 IHZvaWQgKmtleSwgY29uc3QgaW50IGxlbiwgdWludDMyX3Qgc2VlZCwKKyAgICB1aW50NjRfdCBy X291dFsyXSkgeworCWNvbnN0IHVpbnQ4X3QgKiBkYXRhID0gKGNvbnN0IHVpbnQ4X3QgKikga2V5 OworCWNvbnN0IGludCBuYmxvY2tzID0gbGVuIC8gMTY7CisKKwl1aW50MzJfdCBoMSA9IHNlZWQ7 CisJdWludDMyX3QgaDIgPSBzZWVkOworCXVpbnQzMl90IGgzID0gc2VlZDsKKwl1aW50MzJfdCBo NCA9IHNlZWQ7CisKKwljb25zdCB1aW50MzJfdCBjMSA9IDB4MjM5Yjk2MWI7CisJY29uc3QgdWlu dDMyX3QgYzIgPSAweGFiMGU5Nzg5OworCWNvbnN0IHVpbnQzMl90IGMzID0gMHgzOGIzNGFlNTsK Kwljb25zdCB1aW50MzJfdCBjNCA9IDB4YTFlMzhiOTM7CisKKwkvKiBib2R5ICovCisJeworCQlj b25zdCB1aW50MzJfdCAqYmxvY2tzID0gKGNvbnN0IHVpbnQzMl90ICopIChkYXRhICsgbmJsb2Nr cyoxNik7CisJCWludCBpOworCisJCWZvciAoaSA9IC1uYmxvY2tzOyBpOyBpKyspIHsKKwkJCXVp bnQzMl90IGsxID0gaGFzaF9nZXRfYmxvY2tfMzIoYmxvY2tzLCBpKjQgKyAwKTsKKwkJCXVpbnQz Ml90IGsyID0gaGFzaF9nZXRfYmxvY2tfMzIoYmxvY2tzLCBpKjQgKyAxKTsKKwkJCXVpbnQzMl90 IGszID0gaGFzaF9nZXRfYmxvY2tfMzIoYmxvY2tzLCBpKjQgKyAyKTsKKwkJCXVpbnQzMl90IGs0 ID0gaGFzaF9nZXRfYmxvY2tfMzIoYmxvY2tzLCBpKjQgKyAzKTsKKworCQkJazEgKj0gYzE7IGsx ID0gaGFzaF9yb3RsXzMyKGsxLCAxNSk7IGsxICo9IGMyOyBoMSBePSBrMTsKKworCQkJaDEgPSBo YXNoX3JvdGxfMzIoaDEsIDE5KTsgaDEgKz0gaDI7CisJCQloMSA9IGgxKjUgKyAweDU2MWNjZDFi OworCisJCQlrMiAqPSBjMjsgazIgPSBoYXNoX3JvdGxfMzIoazIsIDE2KTsgazIgKj0gYzM7IGgy IF49IGsyOworCisJCQloMiA9IGhhc2hfcm90bF8zMihoMiwgMTcpOyBoMiArPSBoMzsKKwkJCWgy ID0gaDIqNSArIDB4MGJjYWE3NDc7CisKKwkJCWszICo9IGMzOyBrMyA9IGhhc2hfcm90bF8zMihr MywgMTcpOyBrMyAqPSBjNDsgaDMgXj0gazM7CisKKwkJCWgzID0gaGFzaF9yb3RsXzMyKGgzLCAx NSk7IGgzICs9IGg0OworCQkJaDMgPSBoMyo1ICsgMHg5NmNkMWMzNTsKKworCQkJazQgKj0gYzQ7 IGs0ID0gaGFzaF9yb3RsXzMyKGs0LCAxOCk7IGs0ICo9IGMxOyBoNCBePSBrNDsKKworCQkJaDQg PSBoYXNoX3JvdGxfMzIoaDQsIDEzKTsgaDQgKz0gaDE7CisJCQloNCA9IGg0KjUgKyAweDMyYWMz YjE3OworCQl9CisJfQorCisJLyogdGFpbCAqLworCXsKKwkJY29uc3QgdWludDhfdCAqdGFpbCA9 IChjb25zdCB1aW50OF90ICopIChkYXRhICsgbmJsb2NrcyoxNik7CisJCXVpbnQzMl90IGsxID0g MDsKKwkJdWludDMyX3QgazIgPSAwOworCQl1aW50MzJfdCBrMyA9IDA7CisJCXVpbnQzMl90IGs0 ID0gMDsKKworCQlzd2l0Y2ggKGxlbiAmIDE1KSB7CisJCWNhc2UgMTU6IGs0IF49IHRhaWxbMTRd IDw8IDE2OyBKRU1BTExPQ19GQUxMVEhST1VHSDsKKwkJY2FzZSAxNDogazQgXj0gdGFpbFsxM10g PDwgODsgSkVNQUxMT0NfRkFMTFRIUk9VR0g7CisJCWNhc2UgMTM6IGs0IF49IHRhaWxbMTJdIDw8 IDA7CisJCQlrNCAqPSBjNDsgazQgPSBoYXNoX3JvdGxfMzIoazQsIDE4KTsgazQgKj0gYzE7IGg0 IF49IGs0OworCQkJSkVNQUxMT0NfRkFMTFRIUk9VR0g7CisJCWNhc2UgMTI6IGszIF49ICh1aW50 MzJfdCkgdGFpbFsxMV0gPDwgMjQ7IEpFTUFMTE9DX0ZBTExUSFJPVUdIOworCQljYXNlIDExOiBr MyBePSB0YWlsWzEwXSA8PCAxNjsgSkVNQUxMT0NfRkFMTFRIUk9VR0g7CisJCWNhc2UgMTA6IGsz IF49IHRhaWxbIDldIDw8IDg7IEpFTUFMTE9DX0ZBTExUSFJPVUdIOworCQljYXNlICA5OiBrMyBe PSB0YWlsWyA4XSA8PCAwOworCQkJazMgKj0gYzM7IGszID0gaGFzaF9yb3RsXzMyKGszLCAxNyk7 IGszICo9IGM0OyBoMyBePSBrMzsKKwkJCUpFTUFMTE9DX0ZBTExUSFJPVUdIOworCQljYXNlICA4 OiBrMiBePSAodWludDMyX3QpIHRhaWxbIDddIDw8IDI0OyBKRU1BTExPQ19GQUxMVEhST1VHSDsK KwkJY2FzZSAgNzogazIgXj0gdGFpbFsgNl0gPDwgMTY7IEpFTUFMTE9DX0ZBTExUSFJPVUdIOwor CQljYXNlICA2OiBrMiBePSB0YWlsWyA1XSA8PCA4OyBKRU1BTExPQ19GQUxMVEhST1VHSDsKKwkJ Y2FzZSAgNTogazIgXj0gdGFpbFsgNF0gPDwgMDsKKwkJCWsyICo9IGMyOyBrMiA9IGhhc2hfcm90 bF8zMihrMiwgMTYpOyBrMiAqPSBjMzsgaDIgXj0gazI7CisJCQlKRU1BTExPQ19GQUxMVEhST1VH SDsKKwkJY2FzZSAgNDogazEgXj0gKHVpbnQzMl90KSB0YWlsWyAzXSA8PCAyNDsgSkVNQUxMT0Nf RkFMTFRIUk9VR0g7CisJCWNhc2UgIDM6IGsxIF49IHRhaWxbIDJdIDw8IDE2OyBKRU1BTExPQ19G QUxMVEhST1VHSDsKKwkJY2FzZSAgMjogazEgXj0gdGFpbFsgMV0gPDwgODsgSkVNQUxMT0NfRkFM TFRIUk9VR0g7CisJCWNhc2UgIDE6IGsxIF49IHRhaWxbIDBdIDw8IDA7CisJCQlrMSAqPSBjMTsg azEgPSBoYXNoX3JvdGxfMzIoazEsIDE1KTsgazEgKj0gYzI7IGgxIF49IGsxOworCQkJYnJlYWs7 CisJCX0KKwl9CisKKwkvKiBmaW5hbGl6YXRpb24gKi8KKwloMSBePSBsZW47IGgyIF49IGxlbjsg aDMgXj0gbGVuOyBoNCBePSBsZW47CisKKwloMSArPSBoMjsgaDEgKz0gaDM7IGgxICs9IGg0Owor CWgyICs9IGgxOyBoMyArPSBoMTsgaDQgKz0gaDE7CisKKwloMSA9IGhhc2hfZm1peF8zMihoMSk7 CisJaDIgPSBoYXNoX2ZtaXhfMzIoaDIpOworCWgzID0gaGFzaF9mbWl4XzMyKGgzKTsKKwloNCA9 IGhhc2hfZm1peF8zMihoNCk7CisKKwloMSArPSBoMjsgaDEgKz0gaDM7IGgxICs9IGg0OworCWgy ICs9IGgxOyBoMyArPSBoMTsgaDQgKz0gaDE7CisKKwlyX291dFswXSA9ICgoKHVpbnQ2NF90KSBo MikgPDwgMzIpIHwgaDE7CisJcl9vdXRbMV0gPSAoKCh1aW50NjRfdCkgaDQpIDw8IDMyKSB8IGgz OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2hhc2hfeDY0XzEyOChjb25zdCB2b2lkICprZXks IGNvbnN0IGludCBsZW4sIGNvbnN0IHVpbnQzMl90IHNlZWQsCisgICAgdWludDY0X3Qgcl9vdXRb Ml0pIHsKKwljb25zdCB1aW50OF90ICpkYXRhID0gKGNvbnN0IHVpbnQ4X3QgKikga2V5OworCWNv bnN0IGludCBuYmxvY2tzID0gbGVuIC8gMTY7CisKKwl1aW50NjRfdCBoMSA9IHNlZWQ7CisJdWlu dDY0X3QgaDIgPSBzZWVkOworCisJY29uc3QgdWludDY0X3QgYzEgPSBLUVUoMHg4N2MzN2I5MTEx NDI1M2Q1KTsKKwljb25zdCB1aW50NjRfdCBjMiA9IEtRVSgweDRjZjVhZDQzMjc0NTkzN2YpOwor CisJLyogYm9keSAqLworCXsKKwkJY29uc3QgdWludDY0X3QgKmJsb2NrcyA9IChjb25zdCB1aW50 NjRfdCAqKSAoZGF0YSk7CisJCWludCBpOworCisJCWZvciAoaSA9IDA7IGkgPCBuYmxvY2tzOyBp KyspIHsKKwkJCXVpbnQ2NF90IGsxID0gaGFzaF9nZXRfYmxvY2tfNjQoYmxvY2tzLCBpKjIgKyAw KTsKKwkJCXVpbnQ2NF90IGsyID0gaGFzaF9nZXRfYmxvY2tfNjQoYmxvY2tzLCBpKjIgKyAxKTsK KworCQkJazEgKj0gYzE7IGsxID0gaGFzaF9yb3RsXzY0KGsxLCAzMSk7IGsxICo9IGMyOyBoMSBe PSBrMTsKKworCQkJaDEgPSBoYXNoX3JvdGxfNjQoaDEsIDI3KTsgaDEgKz0gaDI7CisJCQloMSA9 IGgxKjUgKyAweDUyZGNlNzI5OworCisJCQlrMiAqPSBjMjsgazIgPSBoYXNoX3JvdGxfNjQoazIs IDMzKTsgazIgKj0gYzE7IGgyIF49IGsyOworCisJCQloMiA9IGhhc2hfcm90bF82NChoMiwgMzEp OyBoMiArPSBoMTsKKwkJCWgyID0gaDIqNSArIDB4Mzg0OTVhYjU7CisJCX0KKwl9CisKKwkvKiB0 YWlsICovCisJeworCQljb25zdCB1aW50OF90ICp0YWlsID0gKGNvbnN0IHVpbnQ4X3QqKShkYXRh ICsgbmJsb2NrcyoxNik7CisJCXVpbnQ2NF90IGsxID0gMDsKKwkJdWludDY0X3QgazIgPSAwOwor CisJCXN3aXRjaCAobGVuICYgMTUpIHsKKwkJY2FzZSAxNTogazIgXj0gKCh1aW50NjRfdCkodGFp bFsxNF0pKSA8PCA0ODsgSkVNQUxMT0NfRkFMTFRIUk9VR0g7CisJCWNhc2UgMTQ6IGsyIF49ICgo dWludDY0X3QpKHRhaWxbMTNdKSkgPDwgNDA7IEpFTUFMTE9DX0ZBTExUSFJPVUdIOworCQljYXNl IDEzOiBrMiBePSAoKHVpbnQ2NF90KSh0YWlsWzEyXSkpIDw8IDMyOyBKRU1BTExPQ19GQUxMVEhS T1VHSDsKKwkJY2FzZSAxMjogazIgXj0gKCh1aW50NjRfdCkodGFpbFsxMV0pKSA8PCAyNDsgSkVN QUxMT0NfRkFMTFRIUk9VR0g7CisJCWNhc2UgMTE6IGsyIF49ICgodWludDY0X3QpKHRhaWxbMTBd KSkgPDwgMTY7IEpFTUFMTE9DX0ZBTExUSFJPVUdIOworCQljYXNlIDEwOiBrMiBePSAoKHVpbnQ2 NF90KSh0YWlsWyA5XSkpIDw8IDg7ICBKRU1BTExPQ19GQUxMVEhST1VHSDsKKwkJY2FzZSAgOTog azIgXj0gKCh1aW50NjRfdCkodGFpbFsgOF0pKSA8PCAwOworCQkJazIgKj0gYzI7IGsyID0gaGFz aF9yb3RsXzY0KGsyLCAzMyk7IGsyICo9IGMxOyBoMiBePSBrMjsKKwkJCUpFTUFMTE9DX0ZBTExU SFJPVUdIOworCQljYXNlICA4OiBrMSBePSAoKHVpbnQ2NF90KSh0YWlsWyA3XSkpIDw8IDU2OyBK RU1BTExPQ19GQUxMVEhST1VHSDsKKwkJY2FzZSAgNzogazEgXj0gKCh1aW50NjRfdCkodGFpbFsg Nl0pKSA8PCA0ODsgSkVNQUxMT0NfRkFMTFRIUk9VR0g7CisJCWNhc2UgIDY6IGsxIF49ICgodWlu dDY0X3QpKHRhaWxbIDVdKSkgPDwgNDA7IEpFTUFMTE9DX0ZBTExUSFJPVUdIOworCQljYXNlICA1 OiBrMSBePSAoKHVpbnQ2NF90KSh0YWlsWyA0XSkpIDw8IDMyOyBKRU1BTExPQ19GQUxMVEhST1VH SDsKKwkJY2FzZSAgNDogazEgXj0gKCh1aW50NjRfdCkodGFpbFsgM10pKSA8PCAyNDsgSkVNQUxM T0NfRkFMTFRIUk9VR0g7CisJCWNhc2UgIDM6IGsxIF49ICgodWludDY0X3QpKHRhaWxbIDJdKSkg PDwgMTY7IEpFTUFMTE9DX0ZBTExUSFJPVUdIOworCQljYXNlICAyOiBrMSBePSAoKHVpbnQ2NF90 KSh0YWlsWyAxXSkpIDw8IDg7ICBKRU1BTExPQ19GQUxMVEhST1VHSDsKKwkJY2FzZSAgMTogazEg Xj0gKCh1aW50NjRfdCkodGFpbFsgMF0pKSA8PCAwOworCQkJazEgKj0gYzE7IGsxID0gaGFzaF9y b3RsXzY0KGsxLCAzMSk7IGsxICo9IGMyOyBoMSBePSBrMTsKKwkJCWJyZWFrOworCQl9CisJfQor CisJLyogZmluYWxpemF0aW9uICovCisJaDEgXj0gbGVuOyBoMiBePSBsZW47CisKKwloMSArPSBo MjsKKwloMiArPSBoMTsKKworCWgxID0gaGFzaF9mbWl4XzY0KGgxKTsKKwloMiA9IGhhc2hfZm1p eF82NChoMik7CisKKwloMSArPSBoMjsKKwloMiArPSBoMTsKKworCXJfb3V0WzBdID0gaDE7CisJ cl9vdXRbMV0gPSBoMjsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIEFQSS4gKi8K K3N0YXRpYyBpbmxpbmUgdm9pZAoraGFzaChjb25zdCB2b2lkICprZXksIHNpemVfdCBsZW4sIGNv bnN0IHVpbnQzMl90IHNlZWQsIHNpemVfdCByX2hhc2hbMl0pIHsKKwlhc3NlcnQobGVuIDw9IElO VF9NQVgpOyAvKiBVbmZvcnR1bmF0ZSBpbXBsZW1lbnRhdGlvbiBsaW1pdGF0aW9uLiAqLworCisj aWYgKExHX1NJWkVPRl9QVFIgPT0gMyAmJiAhZGVmaW5lZChKRU1BTExPQ19CSUdfRU5ESUFOKSkK KwloYXNoX3g2NF8xMjgoa2V5LCAoaW50KWxlbiwgc2VlZCwgKHVpbnQ2NF90ICopcl9oYXNoKTsK KyNlbHNlCisJeworCQl1aW50NjRfdCBoYXNoZXNbMl07CisJCWhhc2hfeDg2XzEyOChrZXksIChp bnQpbGVuLCBzZWVkLCBoYXNoZXMpOworCQlyX2hhc2hbMF0gPSAoc2l6ZV90KWhhc2hlc1swXTsK KwkJcl9oYXNoWzFdID0gKHNpemVfdCloYXNoZXNbMV07CisJfQorI2VuZGlmCit9CisKKyNlbmRp ZiAvKiBKRU1BTExPQ19JTlRFUk5BTF9IQVNIX0ggKi8KCmRpZmYgLS1naXQgYS8zODktZHMtYmFz ZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL2hv b2suaCBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVt YWxsb2MvaW50ZXJuYWwvaG9vay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu LmVlMjQ2YjEKLS0tIC9kZXYvbnVsbAorKysgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1h bGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL2hvb2suaApAQCAtMCwwICsxLDE2 MyBAQAorI2lmbmRlZiBKRU1BTExPQ19JTlRFUk5BTF9IT09LX0gKKyNkZWZpbmUgSkVNQUxMT0Nf SU5URVJOQUxfSE9PS19ICisKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC90c2QuaCIKKwor LyoKKyAqIFRoaXMgQVBJIGlzICpleHRyZW1lbHkqIGV4cGVyaW1lbnRhbCwgYW5kIG1heSBnZXQg cmlwcGVkIG91dCwgY2hhbmdlZCBpbiBBUEktCisgKiBhbmQgQUJJLWluY29tcGF0aWJsZSB3YXlz LCBiZSBpbnN1ZmZpY2llbnRseSBvciBpbmNvcnJlY3RseSBkb2N1bWVudGVkLCBldGMuCisgKgor ICogSXQgYWxsb3dzIGhvb2tpbmcgdGhlIHN0YXRlZnVsIHBhcnRzIG9mIHRoZSBBUEkgdG8gc2Vl IGNoYW5nZXMgYXMgdGhleQorICogaGFwcGVuLgorICoKKyAqIEFsbG9jYXRpb24gaG9va3MgYXJl IGNhbGxlZCBhZnRlciB0aGUgYWxsb2NhdGlvbiBpcyBkb25lLCBmcmVlIGhvb2tzIGFyZQorICog Y2FsbGVkIGJlZm9yZSB0aGUgZnJlZSBpcyBkb25lLCBhbmQgZXhwYW5kIGhvb2tzIGFyZSBjYWxs ZWQgYWZ0ZXIgdGhlCisgKiBhbGxvY2F0aW9uIGlzIGV4cGFuZGVkLgorICoKKyAqIEZvciByZWFs bG9jIGFuZCByYWxsb2N4LCBpZiB0aGUgZXhwYW5zaW9uIGhhcHBlbnMgaW4gcGxhY2UsIHRoZSBl eHBhbnNpb24KKyAqIGhvb2sgaXMgY2FsbGVkLiAgSWYgaXQgaXMgbW92ZWQsIHRoZW4gdGhlIGFs bG9jIGhvb2sgaXMgY2FsbGVkIG9uIHRoZSBuZXcKKyAqIGxvY2F0aW9uLCBhbmQgdGhlbiB0aGUg ZnJlZSBob29rIGlzIGNhbGxlZCBvbiB0aGUgb2xkIGxvY2F0aW9uIChpLmUuIGJvdGgKKyAqIGhv b2tzIGFyZSBpbnZva2VkIGluIGJldHdlZW4gdGhlIGFsbG9jIGFuZCB0aGUgZGFsbG9jKS4KKyAq CisgKiBJZiB3ZSByZXR1cm4gTlVMTCBmcm9tIE9PTSwgdGhlbiB1c2l6ZSBtaWdodCBub3QgYmUg dHJ1c3R3b3J0aHkuICBDYWxsaW5nCisgKiByZWFsbG9jKE5VTEwsIHNpemUpIG9ubHkgY2FsbHMg dGhlIGFsbG9jIGhvb2ssIGFuZCBjYWxsaW5nIHJlYWxsb2MocHRyLCAwKQorICogb25seSBjYWxs cyB0aGUgZnJlZSBob29rLiAgKENhbGxpbmcgcmVhbGxvYyhOVUxMLCAwKSBpcyB0cmVhdGVkIGFz IG1hbGxvYygwKSwKKyAqIGFuZCBvbmx5IGNhbGxzIHRoZSBhbGxvYyBob29rKS4KKyAqCisgKiBS ZWVudHJhbmN5OgorICogICBSZWVudHJhbmN5IGlzIGd1YXJkZWQgYWdhaW5zdCBmcm9tIHdpdGhp biB0aGUgaG9vayBpbXBsZW1lbnRhdGlvbi4gIElmIHlvdQorICogICBjYWxsIGFsbG9jYXRvciBm dW5jdGlvbnMgZnJvbSB3aXRoaW4gYSBob29rLCB0aGUgaG9va3Mgd2lsbCBub3QgYmUgaW52b2tl ZAorICogICBhZ2Fpbi4KKyAqIFRocmVhZGluZzoKKyAqICAgVGhlIGluc3RhbGxhdGlvbiBvZiBh IGhvb2sgc3luY2hyb25pemVzIHdpdGggYWxsIGl0cyB1c2VzLiAgSWYgeW91IGNhbgorICogICBw cm92ZSB0aGUgaW5zdGFsbGF0aW9uIG9mIGEgaG9vayBoYXBwZW5zLWJlZm9yZSBhIGplbWFsbG9j IGVudHJ5IHBvaW50LAorICogICB0aGVuIHRoZSBob29rIHdpbGwgZ2V0IGludm9rZWQgKHVubGVz cyB0aGVyZSdzIGEgcmFjaW5nIHJlbW92YWwpLgorICoKKyAqICAgSG9vayBpbnNlcnRpb24gYXBw ZWFycyB0byBiZSBhdG9taWMgYXQgYSBwZXItdGhyZWFkIGxldmVsIChpLmUuIGlmIGEgdGhyZWFk CisgKiAgIGFsbG9jYXRlcyBhbmQgaGFzIHRoZSBhbGxvYyBob29rIGludm9rZWQsIHRoZW4gYSBz dWJzZXF1ZW50IGZyZWUgb24gdGhlCisgKiAgIHNhbWUgdGhyZWFkIHdpbGwgYWxzbyBoYXZlIHRo ZSBmcmVlIGhvb2sgaW52b2tlZCkuCisgKgorICogICBUaGUgKnJlbW92YWwqIG9mIGEgaG9vayBk b2VzICpub3QqIGJsb2NrIHVudGlsIGFsbCB0aHJlYWRzIGFyZSBkb25lIHdpdGgKKyAqICAgdGhl IGhvb2suICBIb29rIGF1dGhvcnMgaGF2ZSB0byBiZSByZXNpbGllbnQgdG8gdGhpcywgYW5kIG5l ZWQgc29tZQorICogICBvdXQtb2YtYmFuZCBtZWNoYW5pc20gZm9yIGNsZWFuaW5nIHVwIGFueSBk eW5hbWljYWxseSBhbGxvY2F0ZWQgbWVtb3J5CisgKiAgIGFzc29jaWF0ZWQgd2l0aCB0aGVpciBo b29rLgorICogT3JkZXJpbmc6CisgKiAgIE9yZGVyIG9mIGhvb2sgZXhlY3V0aW9uIGlzIHVuc3Bl Y2lmaWVkLCBhbmQgbWF5IGJlIGRpZmZlcmVudCB0aGFuIGluc2VydGlvbgorICogICBvcmRlci4K KyAqLworCisjZGVmaW5lIEhPT0tfTUFYIDQKKworZW51bSBob29rX2FsbG9jX2UgeworCWhvb2tf YWxsb2NfbWFsbG9jLAorCWhvb2tfYWxsb2NfcG9zaXhfbWVtYWxpZ24sCisJaG9va19hbGxvY19h bGlnbmVkX2FsbG9jLAorCWhvb2tfYWxsb2NfY2FsbG9jLAorCWhvb2tfYWxsb2NfbWVtYWxpZ24s CisJaG9va19hbGxvY192YWxsb2MsCisJaG9va19hbGxvY19tYWxsb2N4LAorCisJLyogVGhlIHJl YWxsb2NhdGluZyBmdW5jdGlvbnMgaGF2ZSBib3RoIGFsbG9jIGFuZCBkYWxsb2MgdmFyaWFudHMg Ki8KKwlob29rX2FsbG9jX3JlYWxsb2MsCisJaG9va19hbGxvY19yYWxsb2N4LAorfTsKKy8qCisg KiBXZSBwdXQgdGhlIGVudW0gdHlwZWRlZiBhZnRlciB0aGUgZW51bSwgc2luY2UgdGhpcyBmaWxl IG1heSBnZXQgaW5jbHVkZWQgYnkKKyAqIGplbWFsbG9jX2NwcC5jcHAsIGFuZCBDKysgZGlzYWxs b3dzIGVudW0gZm9yd2FyZCBkZWNsYXJhdGlvbnMuCisgKi8KK3R5cGVkZWYgZW51bSBob29rX2Fs bG9jX2UgaG9va19hbGxvY190OworCitlbnVtIGhvb2tfZGFsbG9jX2UgeworCWhvb2tfZGFsbG9j X2ZyZWUsCisJaG9va19kYWxsb2NfZGFsbG9jeCwKKwlob29rX2RhbGxvY19zZGFsbG9jeCwKKwor CS8qCisJICogVGhlIGRhbGxvYyBoYWx2ZXMgb2YgcmVhbGxvY2F0aW9uIChub3QgY2FsbGVkIGlm IGluLXBsYWNlIGV4cGFuc2lvbgorCSAqIGhhcHBlbnMpLgorCSAqLworCWhvb2tfZGFsbG9jX3Jl YWxsb2MsCisJaG9va19kYWxsb2NfcmFsbG9jeCwKK307Cit0eXBlZGVmIGVudW0gaG9va19kYWxs b2NfZSBob29rX2RhbGxvY190OworCisKK2VudW0gaG9va19leHBhbmRfZSB7CisJaG9va19leHBh bmRfcmVhbGxvYywKKwlob29rX2V4cGFuZF9yYWxsb2N4LAorCWhvb2tfZXhwYW5kX3hhbGxvY3gs Cit9OwordHlwZWRlZiBlbnVtIGhvb2tfZXhwYW5kX2UgaG9va19leHBhbmRfdDsKKwordHlwZWRl ZiB2b2lkICgqaG9va19hbGxvYykoCisgICAgdm9pZCAqZXh0cmEsIGhvb2tfYWxsb2NfdCB0eXBl LCB2b2lkICpyZXN1bHQsIHVpbnRwdHJfdCByZXN1bHRfcmF3LAorICAgIHVpbnRwdHJfdCBhcmdz X3Jhd1szXSk7CisKK3R5cGVkZWYgdm9pZCAoKmhvb2tfZGFsbG9jKSgKKyAgICB2b2lkICpleHRy YSwgaG9va19kYWxsb2NfdCB0eXBlLCB2b2lkICphZGRyZXNzLCB1aW50cHRyX3QgYXJnc19yYXdb M10pOworCit0eXBlZGVmIHZvaWQgKCpob29rX2V4cGFuZCkoCisgICAgdm9pZCAqZXh0cmEsIGhv b2tfZXhwYW5kX3QgdHlwZSwgdm9pZCAqYWRkcmVzcywgc2l6ZV90IG9sZF91c2l6ZSwKKyAgICBz aXplX3QgbmV3X3VzaXplLCB1aW50cHRyX3QgcmVzdWx0X3JhdywgdWludHB0cl90IGFyZ3NfcmF3 WzRdKTsKKwordHlwZWRlZiBzdHJ1Y3QgaG9va3NfcyBob29rc190Oworc3RydWN0IGhvb2tzX3Mg eworCWhvb2tfYWxsb2MgYWxsb2NfaG9vazsKKwlob29rX2RhbGxvYyBkYWxsb2NfaG9vazsKKwlo b29rX2V4cGFuZCBleHBhbmRfaG9vazsKKwl2b2lkICpleHRyYTsKK307CisKKy8qCisgKiBCZWdp biBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzOyBldmVyeXRoaW5nIGFib3ZlIHRoaXMgcG9pbnQgbWln aHQgb25lIGRheSBsaXZlCisgKiBpbiBhIHB1YmxpYyBBUEkuICBFdmVyeXRoaW5nIGJlbG93IHRo aXMgcG9pbnQgbmV2ZXIgd2lsbC4KKyAqLworCisvKgorICogVGhlIHJlYWxsb2MgcGF0aHdheXMg aGF2ZW4ndCBnb3R0ZW4gYW55IHJlZmFjdG9yaW5nIGxvdmUgaW4gYSB3aGlsZSwgYW5kIGl0J3MK KyAqIGZhaXJseSBkaWZmaWN1bHQgdG8gcGFzcyBpbmZvcm1hdGlvbiBmcm9tIHRoZSBlbnRyeSBw b2ludCB0byB0aGUgaG9va3MuICBXZQorICogcHV0IHRoZSBpbmZvcm1haXRvbiB0aGUgaG9va3Mg d2lsbCBuZWVkIGludG8gYSBzdHJ1Y3QgdG8gZW5jYXBzdWxhdGUKKyAqIGV2ZXJ5dGhpbmcuCisg KgorICogTXVjaCBvZiB0aGVzZSBwYXRod2F5cyBhcmUgZm9yY2UtaW5saW5lZCwgc28gdGhhdCB0 aGUgY29tcGlsZXIgY2FuIGF2b2lkCisgKiBtYXRlcmlhbGl6aW5nIHRoaXMgc3RydWN0IHVudGls IHdlIGhpdCBhbiBleHRlcm4gYXJlbmEgZnVuY3Rpb24uICBGb3IgZmFpcmx5CisgKiBnb29meSBy ZWFzb25zLCAqbWFueSogb2YgdGhlIHJlYWxsb2MgcGF0aHMgaGl0IGFuIGV4dGVybiBhcmVuYSBm dW5jdGlvbi4KKyAqIFRoZXNlIHBhdGhzIGFyZSBjb2xkIGVub3VnaCB0aGF0IGl0IGRvZXNuJ3Qg bWF0dGVyOyBldmVudHVhbGx5LCB3ZSBzaG91bGQKKyAqIHJld3JpdGUgdGhlIHJlYWxsb2MgY29k ZSB0byBtYWtlIHRoZSBleHBhbmQtaW4tcGxhY2UgYW5kIHRoZQorICogZnJlZS10aGVuLXJlYWxs b2MgcGF0aHMgbW9yZSBvcnRob2dvbmFsLCBhdCB3aGljaCBwb2ludCB3ZSBkb24ndCBuZWVkIHRv CisgKiBzcHJlYWQgdGhlIGhvb2sgbG9naWMgYWxsIG92ZXIgdGhlIHBsYWNlLgorICovCit0eXBl ZGVmIHN0cnVjdCBob29rX3JhbGxvY19hcmdzX3MgaG9va19yYWxsb2NfYXJnc190Oworc3RydWN0 IGhvb2tfcmFsbG9jX2FyZ3NfcyB7CisJLyogSS5lLiBhcyBvcHBvc2VkIHRvIHJhbGxvY3guICov CisJYm9vbCBpc19yZWFsbG9jOworCS8qCisJICogVGhlIGV4cGFuZCBob29rIHRha2VzIDQgYXJn dW1lbnRzLCBldmVuIGlmIG9ubHkgMyBhcmUgYWN0dWFsbHkgdXNlZDsKKwkgKiB3ZSBhZGQgYW4g ZXh0cmEgb25lIGluIGNhc2UgdGhlIHVzZXIgZGVjaWRlcyB0byBtZW1jcHkgd2l0aG91dAorCSAq IGxvb2tpbmcgdG9vIGNsb3NlbHkgYXQgdGhlIGhvb2tlZCBmdW5jdGlvbi4KKwkgKi8KKwl1aW50 cHRyX3QgYXJnc1s0XTsKK307CisKKy8qCisgKiBSZXR1cm5zIGFuIG9wYXF1ZSBoYW5kbGUgdG8g YmUgdXNlZCB3aGVuIHJlbW92aW5nIHRoZSBob29rLiAgTlVMTCBtZWFucyB0aGF0CisgKiB3ZSBj b3VsZG4ndCBpbnN0YWxsIHRoZSBob29rLgorICovCitib29sIGhvb2tfYm9vdCgpOworCit2b2lk ICpob29rX2luc3RhbGwodHNkbl90ICp0c2RuLCBob29rc190ICpob29rcyk7CisvKiBVbmluc3Rh bGxzIHRoZSBob29rIHdpdGggdGhlIGhhbmRsZSBwcmV2aW91c2x5IHJldHVybmVkIGZyb20gaG9v a19pbnN0YWxsLiAqLwordm9pZCBob29rX3JlbW92ZSh0c2RuX3QgKnRzZG4sIHZvaWQgKm9wYXF1 ZSk7CisKKy8qIEhvb2tzICovCisKK3ZvaWQgaG9va19pbnZva2VfYWxsb2MoaG9va19hbGxvY190 IHR5cGUsIHZvaWQgKnJlc3VsdCwgdWludHB0cl90IHJlc3VsdF9yYXcsCisgICAgdWludHB0cl90 IGFyZ3NfcmF3WzNdKTsKKwordm9pZCBob29rX2ludm9rZV9kYWxsb2MoaG9va19kYWxsb2NfdCB0 eXBlLCB2b2lkICphZGRyZXNzLAorICAgIHVpbnRwdHJfdCBhcmdzX3Jhd1szXSk7CisKK3ZvaWQg aG9va19pbnZva2VfZXhwYW5kKGhvb2tfZXhwYW5kX3QgdHlwZSwgdm9pZCAqYWRkcmVzcywgc2l6 ZV90IG9sZF91c2l6ZSwKKyAgICBzaXplX3QgbmV3X3VzaXplLCB1aW50cHRyX3QgcmVzdWx0X3Jh dywgdWludHB0cl90IGFyZ3NfcmF3WzRdKTsKKworI2VuZGlmIC8qIEpFTUFMTE9DX0lOVEVSTkFM X0hPT0tfSCAqLwoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9j LTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvaHBhLmggYi8zODktZHMtYmFzZS0zLjMu MC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL2hwYS5oCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzNTYyODUKLS0tIC9kZXYvbnVsbAor KysgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFs bG9jL2ludGVybmFsL2hwYS5oCkBAIC0wLDAgKzEsMTgyIEBACisjaWZuZGVmIEpFTUFMTE9DX0lO VEVSTkFMX0hQQV9ICisjZGVmaW5lIEpFTUFMTE9DX0lOVEVSTkFMX0hQQV9ICisKKyNpbmNsdWRl ICJqZW1hbGxvYy9pbnRlcm5hbC9leHBfZ3Jvdy5oIgorI2luY2x1ZGUgImplbWFsbG9jL2ludGVy bmFsL2hwYV9ob29rcy5oIgorI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2hwYV9vcHRzLmgi CisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvcGFpLmgiCisjaW5jbHVkZSAiamVtYWxsb2Mv aW50ZXJuYWwvcHNzZXQuaCIKKwordHlwZWRlZiBzdHJ1Y3QgaHBhX2NlbnRyYWxfcyBocGFfY2Vu dHJhbF90Oworc3RydWN0IGhwYV9jZW50cmFsX3MgeworCS8qCisJICogVGhlIG11dGV4IGd1YXJk aW5nIG1vc3Qgb2YgdGhlIG9wZXJhdGlvbnMgb24gdGhlIGNlbnRyYWwgZGF0YQorCSAqIHN0cnVj dHVyZS4KKwkgKi8KKwltYWxsb2NfbXV0ZXhfdCBtdHg7CisJLyoKKwkgKiBHdWFyZHMgZXhwYW5z aW9uIG9mIGVkZW4uICBXZSBzZXBhcmF0ZSB0aGlzIGZyb20gdGhlIHJlZ3VsYXIgbXV0ZXggc28K KwkgKiB0aGF0IGNoZWFwZXIgb3BlcmF0aW9ucyBjYW4gc3RpbGwgY29udGludWUgd2hpbGUgd2Un cmUgZG9pbmcgdGhlIE9TCisJICogY2FsbC4KKwkgKi8KKwltYWxsb2NfbXV0ZXhfdCBncm93X210 eDsKKwkvKgorCSAqIEVpdGhlciBOVUxMIChpZiBlbXB0eSksIG9yIHNvbWUgaW50ZWdlciBtdWx0 aXBsZSBvZiBhCisJICogaHVnZXBhZ2UtYWxpZ25lZCBudW1iZXIgb2YgaHVnZXBhZ2VzLiAgV2Ug Y2FydmUgdGhlbSBvZmYgb25lIGF0IGEKKwkgKiB0aW1lIHRvIHNhdGlzZnkgbmV3IHBhZ2VzbGFi IHJlcXVlc3RzLgorCSAqCisJICogR3VhcmRlZCBieSBncm93X210eC4KKwkgKi8KKwl2b2lkICpl ZGVuOworCXNpemVfdCBlZGVuX2xlbjsKKwkvKiBTb3VyY2UgZm9yIG1ldGFkYXRhLiAqLworCWJh c2VfdCAqYmFzZTsKKwkvKiBOdW1iZXIgb2YgZ3JvdyBvcGVyYXRpb25zIGRvbmUgb24gdGhpcyBo cGFfY2VudHJhbF90LiAqLworCXVpbnQ2NF90IGFnZV9jb3VudGVyOworCisJLyogVGhlIEhQQSBo b29rcy4gKi8KKwlocGFfaG9va3NfdCBob29rczsKK307CisKK3R5cGVkZWYgc3RydWN0IGhwYV9z aGFyZF9ub25kZXJpdmVkX3N0YXRzX3MgaHBhX3NoYXJkX25vbmRlcml2ZWRfc3RhdHNfdDsKK3N0 cnVjdCBocGFfc2hhcmRfbm9uZGVyaXZlZF9zdGF0c19zIHsKKwkvKgorCSAqIFRoZSBudW1iZXIg b2YgdGltZXMgd2UndmUgcHVyZ2VkIHdpdGhpbiBhIGh1Z2VwYWdlLgorCSAqCisJICogR3VhcmRl ZCBieSBtdHguCisJICovCisJdWludDY0X3QgbnB1cmdlX3Bhc3NlczsKKwkvKgorCSAqIFRoZSBu dW1iZXIgb2YgaW5kaXZpZHVhbCBwdXJnZSBjYWxscyB3ZSBwZXJmb3JtICh3aGljaCBzaG91bGQg YWx3YXlzCisJICogYmUgYmlnZ2VyIHRoYW4gbnB1cmdlX3Bhc3Nlcywgc2luY2UgZWFjaCBwYXNz IHB1cmdlcyBhdCBsZWFzdCBvbmUKKwkgKiBleHRlbnQgd2l0aGluIGEgaHVnZXBhZ2UuCisJICoK KwkgKiBHdWFyZGVkIGJ5IG10eC4KKwkgKi8KKwl1aW50NjRfdCBucHVyZ2VzOworCisJLyoKKwkg KiBUaGUgbnVtYmVyIG9mIHRpbWVzIHdlJ3ZlIGh1Z2lmaWVkIGEgcGFnZXNsYWIuCisJICoKKwkg KiBHdWFyZGVkIGJ5IG10eC4KKwkgKi8KKwl1aW50NjRfdCBuaHVnaWZpZXM7CisJLyoKKwkgKiBU aGUgbnVtYmVyIG9mIHRpbWVzIHdlJ3ZlIGRlaHVnaWZpZWQgYSBwYWdlc2xhYi4KKwkgKgorCSAq IEd1YXJkZWQgYnkgbXR4LgorCSAqLworCXVpbnQ2NF90IG5kZWh1Z2lmaWVzOworfTsKKworLyog Q29tcGxldGVseSBkZXJpdmVkOyBvbmx5IHVzZWQgYnkgQ1RMLiAqLwordHlwZWRlZiBzdHJ1Y3Qg aHBhX3NoYXJkX3N0YXRzX3MgaHBhX3NoYXJkX3N0YXRzX3Q7CitzdHJ1Y3QgaHBhX3NoYXJkX3N0 YXRzX3MgeworCXBzc2V0X3N0YXRzX3QgcHNzZXRfc3RhdHM7CisJaHBhX3NoYXJkX25vbmRlcml2 ZWRfc3RhdHNfdCBub25kZXJpdmVkX3N0YXRzOworfTsKKwordHlwZWRlZiBzdHJ1Y3QgaHBhX3No YXJkX3MgaHBhX3NoYXJkX3Q7CitzdHJ1Y3QgaHBhX3NoYXJkX3MgeworCS8qCisJICogcGFpIG11 c3QgYmUgdGhlIGZpcnN0IG1lbWJlcjsgd2UgY2FzdCBmcm9tIGEgcG9pbnRlciB0byBpdCB0byBh CisJICogcG9pbnRlciB0byB0aGUgaHBhX3NoYXJkX3QuCisJICovCisJcGFpX3QgcGFpOworCisJ LyogVGhlIGNlbnRyYWwgYWxsb2NhdG9yIHdlIGdldCBvdXIgaHVnZXBhZ2VzIGZyb20uICovCisJ aHBhX2NlbnRyYWxfdCAqY2VudHJhbDsKKwkvKiBQcm90ZWN0cyBtb3N0IG9mIHRoaXMgc2hhcmQn cyBzdGF0ZS4gKi8KKwltYWxsb2NfbXV0ZXhfdCBtdHg7CisJLyoKKwkgKiBHdWFyZHMgdGhlIHNo YXJkJ3MgYWNjZXNzIHRvIHRoZSBjZW50cmFsIGFsbG9jYXRvciAocHJldmVudGluZworCSAqIG11 bHRpcGxlIHRocmVhZHMgb3BlcmF0aW5nIG9uIHRoaXMgc2hhcmQgZnJvbSBhY2Nlc3NpbmcgdGhl IGNlbnRyYWwKKwkgKiBhbGxvY2F0b3IpLgorCSAqLworCW1hbGxvY19tdXRleF90IGdyb3dfbXR4 OworCS8qIFRoZSBiYXNlIG1ldGFkYXRhIGFsbG9jYXRvci4gKi8KKwliYXNlX3QgKmJhc2U7CisK KwkvKgorCSAqIFRoaXMgZWRhdGEgY2FjaGUgaXMgdGhlIG9uZSB3ZSB1c2Ugd2hlbiBhbGxvY2F0 aW5nIGEgc21hbGwgZXh0ZW50CisJICogZnJvbSBhIHBhZ2VzbGFiLiAgVGhlIHBhZ2VzbGFiIGl0 c2VsZiBjb21lcyBmcm9tIHRoZSBjZW50cmFsaXplZAorCSAqIGFsbG9jYXRvciwgYW5kIHNvIHdp bGwgdXNlIGl0cyBlZGF0YV9jYWNoZS4KKwkgKi8KKwllZGF0YV9jYWNoZV9mYXN0X3QgZWNmOwor CisJcHNzZXRfdCBwc3NldDsKKworCS8qCisJICogSG93IG1hbnkgZ3JvdyBvcGVyYXRpb25zIGhh dmUgb2NjdXJyZWQuCisJICoKKwkgKiBHdWFyZGVkIGJ5IGdyb3dfbXR4LgorCSAqLworCXVpbnQ2 NF90IGFnZV9jb3VudGVyOworCisJLyogVGhlIGFyZW5hIGluZCB3ZSdyZSBhc3NvY2lhdGVkIHdp dGguICovCisJdW5zaWduZWQgaW5kOworCisJLyoKKwkgKiBPdXIgZW1hcC4gIFRoaXMgaXMganVz dCBhIGNhY2hlIG9mIHRoZSBlbWFwIHBvaW50ZXIgaW4gdGhlIGFzc29jaWF0ZWQKKwkgKiBocGFf Y2VudHJhbC4KKwkgKi8KKwllbWFwX3QgKmVtYXA7CisKKwkvKiBUaGUgY29uZmlndXJhdGlvbiBj aG9pY2VzIGZvciB0aGlzIGhwYSBzaGFyZC4gKi8KKwlocGFfc2hhcmRfb3B0c190IG9wdHM7CisK KwkvKgorCSAqIEhvdyBtYW55IHBhZ2VzIGhhdmUgd2Ugc3RhcnRlZCBidXQgbm90IHlldCBmaW5p c2hlZCBwdXJnaW5nIGluIHRoaXMKKwkgKiBocGEgc2hhcmQuCisJICovCisJc2l6ZV90IG5wZW5k aW5nX3B1cmdlOworCisJLyoKKwkgKiBUaG9zZSBzdGF0cyB3aGljaCBhcmUgY29waWVkIGRpcmVj dGx5IGludG8gdGhlIENUTC1jZW50cmljIGhwYSBzaGFyZAorCSAqIHN0YXRzLgorCSAqLworCWhw YV9zaGFyZF9ub25kZXJpdmVkX3N0YXRzX3Qgc3RhdHM7CisKKwkvKgorCSAqIExhc3QgdGltZSB3 ZSBwZXJmb3JtZWQgcHVyZ2Ugb24gdGhpcyBzaGFyZC4KKwkgKi8KKwluc3RpbWVfdCBsYXN0X3B1 cmdlOworfTsKKworLyoKKyAqIFdoZXRoZXIgb3Igbm90IHRoZSBIUEEgY2FuIGJlIHVzZWQgZ2l2 ZW4gdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbi4gIFRoaXMgaXMKKyAqIGlzIG5vdCBuZWNlc3Nh cmlseSBhIGd1YXJhbnRlZSB0aGF0IGl0IGJhY2tzIGl0cyBhbGxvY2F0aW9ucyBieSBodWdlcGFn ZXMsCisgKiBqdXN0IHRoYXQgaXQgY2FuIGZ1bmN0aW9uIHByb3Blcmx5IGdpdmVuIHRoZSBzeXN0 ZW0gaXQncyBydW5uaW5nIG9uLgorICovCitib29sIGhwYV9zdXBwb3J0ZWQoKTsKK2Jvb2wgaHBh X2NlbnRyYWxfaW5pdChocGFfY2VudHJhbF90ICpjZW50cmFsLCBiYXNlX3QgKmJhc2UsIGNvbnN0 IGhwYV9ob29rc190ICpob29rcyk7Citib29sIGhwYV9zaGFyZF9pbml0KGhwYV9zaGFyZF90ICpz aGFyZCwgaHBhX2NlbnRyYWxfdCAqY2VudHJhbCwgZW1hcF90ICplbWFwLAorICAgIGJhc2VfdCAq YmFzZSwgZWRhdGFfY2FjaGVfdCAqZWRhdGFfY2FjaGUsIHVuc2lnbmVkIGluZCwKKyAgICBjb25z dCBocGFfc2hhcmRfb3B0c190ICpvcHRzKTsKKwordm9pZCBocGFfc2hhcmRfc3RhdHNfYWNjdW0o aHBhX3NoYXJkX3N0YXRzX3QgKmRzdCwgaHBhX3NoYXJkX3N0YXRzX3QgKnNyYyk7Cit2b2lkIGhw YV9zaGFyZF9zdGF0c19tZXJnZSh0c2RuX3QgKnRzZG4sIGhwYV9zaGFyZF90ICpzaGFyZCwKKyAg ICBocGFfc2hhcmRfc3RhdHNfdCAqZHN0KTsKKworLyoKKyAqIE5vdGlmeSB0aGUgc2hhcmQgdGhh dCB3ZSB3b24ndCB1c2UgaXQgZm9yIGFsbG9jYXRpb25zIG11Y2ggbG9uZ2VyLiAgRHVlIHRvCisg KiB0aGUgcG9zc2liaWxpdHkgb2YgcmFjZXMsIHdlIGRvbid0IGFjdHVhbGx5IHByZXZlbnQgYWxs b2NhdGlvbnM7IGp1c3QgZmx1c2gKKyAqIGFuZCBkaXNhYmxlIHRoZSBlbWJlZGRlZCBlZGF0YV9j YWNoZV9zbWFsbC4KKyAqLwordm9pZCBocGFfc2hhcmRfZGlzYWJsZSh0c2RuX3QgKnRzZG4sIGhw YV9zaGFyZF90ICpzaGFyZCk7Cit2b2lkIGhwYV9zaGFyZF9kZXN0cm95KHRzZG5fdCAqdHNkbiwg aHBhX3NoYXJkX3QgKnNoYXJkKTsKKwordm9pZCBocGFfc2hhcmRfc2V0X2RlZmVycmFsX2FsbG93 ZWQodHNkbl90ICp0c2RuLCBocGFfc2hhcmRfdCAqc2hhcmQsCisgICAgYm9vbCBkZWZlcnJhbF9h bGxvd2VkKTsKK3ZvaWQgaHBhX3NoYXJkX2RvX2RlZmVycmVkX3dvcmsodHNkbl90ICp0c2RuLCBo cGFfc2hhcmRfdCAqc2hhcmQpOworCisvKgorICogV2Ugc2hhcmUgdGhlIGZvcmsgb3JkZXJpbmcg d2l0aCB0aGUgUEEgYW5kIGFyZW5hIHByZWZvcmsgaGFuZGxpbmc7IHRoYXQncyB3aHkKKyAqIHRo ZXNlIGFyZSAzIGFuZCA0IHJhdGhlciB0aGFuIDAgYW5kIDEuCisgKi8KK3ZvaWQgaHBhX3NoYXJk X3ByZWZvcmszKHRzZG5fdCAqdHNkbiwgaHBhX3NoYXJkX3QgKnNoYXJkKTsKK3ZvaWQgaHBhX3No YXJkX3ByZWZvcms0KHRzZG5fdCAqdHNkbiwgaHBhX3NoYXJkX3QgKnNoYXJkKTsKK3ZvaWQgaHBh X3NoYXJkX3Bvc3Rmb3JrX3BhcmVudCh0c2RuX3QgKnRzZG4sIGhwYV9zaGFyZF90ICpzaGFyZCk7 Cit2b2lkIGhwYV9zaGFyZF9wb3N0Zm9ya19jaGlsZCh0c2RuX3QgKnRzZG4sIGhwYV9zaGFyZF90 ICpzaGFyZCk7CisKKyNlbmRpZiAvKiBKRU1BTExPQ19JTlRFUk5BTF9IUEFfSCAqLwoKZGlmZiAt LWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVt YWxsb2MvaW50ZXJuYWwvaHBhX2hvb2tzLmggYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1h bGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL2hwYV9ob29rcy5oCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlYTIyMWMKLS0tIC9kZXYvbnVsbAorKysgYi8z ODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2lu dGVybmFsL2hwYV9ob29rcy5oCkBAIC0wLDAgKzEsMTcgQEAKKyNpZm5kZWYgSkVNQUxMT0NfSU5U RVJOQUxfSFBBX0hPT0tTX0gKKyNkZWZpbmUgSkVNQUxMT0NfSU5URVJOQUxfSFBBX0hPT0tTX0gK KwordHlwZWRlZiBzdHJ1Y3QgaHBhX2hvb2tzX3MgaHBhX2hvb2tzX3Q7CitzdHJ1Y3QgaHBhX2hv b2tzX3MgeworCXZvaWQgKigqbWFwKShzaXplX3Qgc2l6ZSk7CisJdm9pZCAoKnVubWFwKSh2b2lk ICpwdHIsIHNpemVfdCBzaXplKTsKKwl2b2lkICgqcHVyZ2UpKHZvaWQgKnB0ciwgc2l6ZV90IHNp emUpOworCXZvaWQgKCpodWdpZnkpKHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpOworCXZvaWQgKCpk ZWh1Z2lmeSkodm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSk7CisJdm9pZCAoKmN1cnRpbWUpKG5zdGlt ZV90ICpyX3RpbWUsIGJvb2wgZmlyc3RfcmVhZGluZyk7CisJdWludDY0X3QgKCptc19zaW5jZSko bnN0aW1lX3QgKnJfdGltZSk7Cit9OworCitleHRlcm4gaHBhX2hvb2tzX3QgaHBhX2hvb2tzX2Rl ZmF1bHQ7CisKKyNlbmRpZiAvKiBKRU1BTExPQ19JTlRFUk5BTF9IUEFfSE9PS1NfSCAqLwoKZGlm ZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUv amVtYWxsb2MvaW50ZXJuYWwvaHBhX29wdHMuaCBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2pl bWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvaHBhX29wdHMuaApuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTg0ZmVhCi0tLSAvZGV2L251bGwKKysrIGIv Mzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9p bnRlcm5hbC9ocGFfb3B0cy5oCkBAIC0wLDAgKzEsNzQgQEAKKyNpZm5kZWYgSkVNQUxMT0NfSU5U RVJOQUxfSFBBX09QVFNfSAorI2RlZmluZSBKRU1BTExPQ19JTlRFUk5BTF9IUEFfT1BUU19ICisK KyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9meHAuaCIKKworLyoKKyAqIFRoaXMgZmlsZSBp cyBtb3JhbGx5IHBhcnQgb2YgaHBhLmgsIGJ1dCBpcyBzcGxpdCBvdXQgZm9yIGhlYWRlci1vcmRl cmluZworICogcmVhc29ucy4KKyAqLworCit0eXBlZGVmIHN0cnVjdCBocGFfc2hhcmRfb3B0c19z IGhwYV9zaGFyZF9vcHRzX3Q7CitzdHJ1Y3QgaHBhX3NoYXJkX29wdHNfcyB7CisJLyoKKwkgKiBU aGUgbGFyZ2VzdCBzaXplIHdlJ2xsIGFsbG9jYXRlIG91dCBvZiB0aGUgc2hhcmQuICBGb3IgdGhv c2UKKwkgKiBhbGxvY2F0aW9ucyByZWZ1c2VkLCB0aGUgY2FsbGVyIChpbiBwcmFjdGljZSwgdGhl IFBBIG1vZHVsZSkgd2lsbAorCSAqIGZhbGwgYmFjayB0byB0aGUgbW9yZSBnZW5lcmFsIChmb3Ig bm93KSBQQUMsIHdoaWNoIGNhbiBhbHdheXMgaGFuZGxlCisJICogYW55IGFsbG9jYXRpb24gcmVx dWVzdC4KKwkgKi8KKwlzaXplX3Qgc2xhYl9tYXhfYWxsb2M7CisKKwkvKgorCSAqIFdoZW4gdGhl IG51bWJlciBvZiBhY3RpdmUgYnl0ZXMgaW4gYSBodWdlcGFnZSBpcyA+PQorCSAqIGh1Z2lmaWNh dGlvbl90aHJlc2hvbGQsIHdlIGZvcmNlIGh1Z2lmeSBpdC4KKwkgKi8KKwlzaXplX3QgaHVnaWZp Y2F0aW9uX3RocmVzaG9sZDsKKworCS8qCisJICogVGhlIEhQQSBwdXJnZXMgd2hlbmV2ZXIgdGhl IG51bWJlciBvZiBwYWdlcyBleGNlZWRzIGRpcnR5X211bHQgKgorCSAqIGFjdGl2ZV9wYWdlcy4g IFRoaXMgbWF5IGJlIHNldCB0byAoZnhwX3QpLTEgdG8gZGlzYWJsZSBwdXJnaW5nLgorCSAqLwor CWZ4cF90IGRpcnR5X211bHQ7CisKKwkvKgorCSAqIFdoZXRoZXIgb3Igbm90IHRoZSBQQUkgbWV0 aG9kcyBhcmUgYWxsb3dlZCB0byBkZWZlciB3b3JrIHRvIGEKKwkgKiBzdWJzZXF1ZW50IGhwYV9z aGFyZF9kb19kZWZlcnJlZF93b3JrKCkgY2FsbC4gIFByYWN0aWNhbGx5LCB0aGlzCisJICogY29y cmVzcG9uZHMgdG8gYmFja2dyb3VuZCB0aHJlYWRzIGJlaW5nIGVuYWJsZWQuICBXZSB0cmFjayB0 aGlzCisJICogb3Vyc2VsdmVzIGZvciBlbmNhcHN1bGF0aW9uIHB1cnBvc2VzLgorCSAqLworCWJv b2wgZGVmZXJyYWxfYWxsb3dlZDsKKworCS8qCisJICogSG93IGxvbmcgYSBodWdlcGFnZSBoYXMg dG8gYmUgYSBodWdpZmljYXRpb24gY2FuZGlkYXRlIGJlZm9yZSBpdCB3aWxsCisJICogYWN0dWFs bHkgZ2V0IGh1Z2lmaWVkLgorCSAqLworCXVpbnQ2NF90IGh1Z2lmeV9kZWxheV9tczsKKworCS8q CisJICogTWluaW11bSBhbW91bnQgb2YgdGltZSBiZXR3ZWVuIHB1cmdlcy4KKwkgKi8KKwl1aW50 NjRfdCBtaW5fcHVyZ2VfaW50ZXJ2YWxfbXM7Cit9OworCisjZGVmaW5lIEhQQV9TSEFSRF9PUFRT X0RFRkFVTFQgewkJCQkJXAorCS8qIHNsYWJfbWF4X2FsbG9jICovCQkJCQkJXAorCTY0ICogMTAy NCwJCQkJCQkJXAorCS8qIGh1Z2lmaWNhdGlvbl90aHJlc2hvbGQgKi8JCQkJCVwKKwlIVUdFUEFH RSAqIDk1IC8gMTAwLAkJCQkJCVwKKwkvKiBkaXJ0eV9tdWx0ICovCQkJCQkJXAorCUZYUF9JTklU X1BFUkNFTlQoMjUpLAkJCQkJCVwKKwkvKgkJCQkJCQkJXAorCSAqIGRlZmVycmFsX2FsbG93ZWQJ CQkJCQlcCisJICogCQkJCQkJCQlcCisJICogUmVhbGx5LCB0aGlzIGlzIGFsd2F5cyBzZXQgYnkg dGhlIGFyZW5hIGR1cmluZyBjcmVhdGlvbglcCisJICogb3IgYnkgYW4gaHBhX3NoYXJkX3NldF9k ZWZlcnJhbF9hbGxvd2VkIGNhbGwsIHNvIHRoZSB2YWx1ZQlcCisJICogd2UgcHV0IGhlcmUgZG9l c24ndCBtYXR0ZXIuCQkJCQlcCisJICovCQkJCQkJCQlcCisJZmFsc2UsCQkJCQkJCQlcCisJLyog aHVnaWZ5X2RlbGF5X21zICovCQkJCQkJXAorCTEwICogMTAwMCwJCQkJCQkJXAorCS8qIG1pbl9w dXJnZV9pbnRlcnZhbF9tcyAqLwkJCQkJXAorCTUgKiAxMDAwCQkJCQkJCVwKK30KKworI2VuZGlm IC8qIEpFTUFMTE9DX0lOVEVSTkFMX0hQQV9PUFRTX0ggKi8KCmRpZmYgLS1naXQgYS8zODktZHMt YmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFs L2hwZGF0YS5oIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVk ZS9qZW1hbGxvYy9pbnRlcm5hbC9ocGRhdGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwLi4xZmI1MzRkCi0tLSAvZGV2L251bGwKKysrIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVp bGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9ocGRhdGEuaApAQCAt MCwwICsxLDQxMyBAQAorI2lmbmRlZiBKRU1BTExPQ19JTlRFUk5BTF9IUERBVEFfSAorI2RlZmlu ZSBKRU1BTExPQ19JTlRFUk5BTF9IUERBVEFfSAorCisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJu YWwvZmIuaCIKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9waC5oIgorI2luY2x1ZGUgImpl bWFsbG9jL2ludGVybmFsL3FsLmgiCisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvdHlwZWRf bGlzdC5oIgorCisvKgorICogVGhlIG1ldGFkYXRhIHJlcHJlc2VudGF0aW9uIHdlIHVzZSBmb3Ig ZXh0ZW50cyBpbiBodWdlcGFnZXMuICBXaGlsZSB0aGUgUEFDCisgKiB1c2VzIHRoZSBlZGF0YV90 IHRvIHJlcHJlc2VudCBib3RoIGFjdGl2ZSBhbmQgaW5hY3RpdmUgZXh0ZW50cywgdGhlIEhQIG9u bHkKKyAqIHVzZXMgdGhlIGVkYXRhX3QgZm9yIGFjdGl2ZSBvbmVzOyBpbnN0ZWFkLCBpbmFjdGl2 ZSBleHRlbnQgc3RhdGUgaXMgdHJhY2tlZAorICogd2l0aGluIGhwZGF0YSBhc3NvY2lhdGVkIHdp dGggdGhlIGVuY2xvc2luZyBodWdlcGFnZS1zaXplZCwgaHVnZXBhZ2UtYWxpZ25lZAorICogcmVn aW9uIG9mIHZpcnR1YWwgYWRkcmVzcyBzcGFjZS4KKyAqCisgKiBBbiBocGRhdGEgbmVlZCBub3Qg YmUgInRydWx5IiBiYWNrZWQgYnkgYSBodWdlcGFnZSAod2hpY2ggaXMgbm90IG5lY2Vzc2FyaWx5 CisgKiBhbiBvYnNlcnZhYmxlIHByb3BlcnR5IG9mIGFueSBnaXZlbiByZWdpb24gb2YgYWRkcmVz cyBzcGFjZSkuICBJdCdzIGp1c3QKKyAqIGh1Z2VwYWdlLXNpemVkIGFuZCBodWdlcGFnZS1hbGln bmVkOyBpdCdzICpwb3RlbnRpYWxseSogaHVnZS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgaHBkYXRh X3MgaHBkYXRhX3Q7CitwaF9zdHJ1Y3RzKGhwZGF0YV9hZ2VfaGVhcCwgaHBkYXRhX3QpOworc3Ry dWN0IGhwZGF0YV9zIHsKKwkvKgorCSAqIFdlIGxpa2V3aXNlIGZvbGxvdyB0aGUgZWRhdGEgY29u dmVudGlvbiBvZiBtYW5nbGluZyBuYW1lcyBhbmQgZm9yY2luZworCSAqIHRoZSB1c2Ugb2YgYWNj ZXNzb3JzIC0tIHRoaXMgbGV0cyB1cyBhZGQgc29tZSBjb25zaXN0ZW5jeSBjaGVja3Mgb24KKwkg KiBhY2Nlc3MuCisJICovCisKKwkvKgorCSAqIFRoZSBhZGRyZXNzIG9mIHRoZSBodWdlcGFnZSBp biBxdWVzdGlvbi4gIFRoaXMgY2FuJ3QgYmUgbmFtZWQgaF9hZGRyLAorCSAqIHNpbmNlIHRoYXQg Y29uZmxpY3RzIHdpdGggYSBtYWNybyBkZWZpbmVkIGluIFdpbmRvd3MgaGVhZGVycy4KKwkgKi8K Kwl2b2lkICpoX2FkZHJlc3M7CisJLyogSXRzIGFnZSAobWVhc3VyZWQgaW4gcHNzZXQgb3BlcmF0 aW9ucykuICovCisJdWludDY0X3QgaF9hZ2U7CisJLyogV2hldGhlciBvciBub3Qgd2UgdGhpbmsg dGhlIGh1Z2VwYWdlIGlzIG1hcHBlZCB0aGF0IHdheSBieSB0aGUgT1MuICovCisJYm9vbCBoX2h1 Z2U7CisKKwkvKgorCSAqIEZvciBzb21lIHByb3BlcnRpZXMsIHdlIGtlZXAgcGFyYWxsZWwgc2V0 cyBvZiBib29sczsgaF9mb29fYWxsb3dlZAorCSAqIGFuZCBoX2luX3Bzc2V0X2Zvb19jb250YWlu ZXIuICBUaGlzIGlzIGEgZGVjb3VwbGluZyBtZWNoYW5pc20gdG8KKwkgKiBhdm9pZCBib3RoZXJp bmcgdGhlIGhwYSAod2hpY2ggbWFuYWdlcyBwb2xpY2llcykgZnJvbSB0aGUgcHNzZXQKKwkgKiAo d2hpY2ggaXMgdGhlIG1lY2hhbmlzbSB1c2VkIHRvIGVuZm9yY2UgdGhvc2UgcG9saWNpZXMpLiAg VGhpcyBhbGxvd3MKKwkgKiBhbGwgdGhlIGNvbnRhaW5lciBtYW5hZ2VtZW50IGxvZ2ljIHRvIGxp dmUgaW4gb25lIHBsYWNlLCB3aXRob3V0IHRoZQorCSAqIEhQQSBuZWVkaW5nIHRvIGtub3cgb3Ig Y2FyZSBob3cgdGhhdCBoYXBwZW5zLgorCSAqLworCisJLyoKKwkgKiBXaGV0aGVyIG9yIG5vdCB0 aGUgaHBkYXRhIGlzIGFsbG93ZWQgdG8gYmUgdXNlZCB0byBzZXJ2ZSBhbGxvY2F0aW9ucywKKwkg KiBhbmQgd2hldGhlciBvciBub3QgdGhlIHBzc2V0IGlzIGN1cnJlbnRseSB0cmFja2luZyBpdCBh cyBzdWNoLgorCSAqLworCWJvb2wgaF9hbGxvY19hbGxvd2VkOworCWJvb2wgaF9pbl9wc3NldF9h bGxvY19jb250YWluZXI7CisKKwkvKgorCSAqIFRoZSBzYW1lLCBidXQgd2l0aCBwdXJnaW5nLiAg VGhlcmUncyBubyBjb3JyZXNwb25kaW5nCisJICogaF9pbl9wc3NldF9wdXJnZV9jb250YWluZXIs IGJlY2F1c2UgdGhlIHBzc2V0IChjdXJyZW50bHkpIGFsd2F5cworCSAqIHJlbW92ZXMgaHBkYXRh cyBmcm9tIHRoZWlyIGNvbnRhaW5lcnMgZHVyaW5nIHVwZGF0ZXMgKHRvIGltcGxlbWVudAorCSAq IExSVSBmb3IgcHVyZ2luZykuCisJICovCisJYm9vbCBoX3B1cmdlX2FsbG93ZWQ7CisKKwkvKiBB bmQgd2l0aCBodWdpZnlpbmcuICovCisJYm9vbCBoX2h1Z2lmeV9hbGxvd2VkOworCS8qIFdoZW4g d2UgYmVjYW1lIGEgaHVnaWZpY2F0aW9uIGNhbmRpZGF0ZS4gKi8KKwluc3RpbWVfdCBoX3RpbWVf aHVnaWZ5X2FsbG93ZWQ7CisJYm9vbCBoX2luX3Bzc2V0X2h1Z2lmeV9jb250YWluZXI7CisKKwkv KiBXaGV0aGVyIG9yIG5vdCBhIHB1cmdlIG9yIGh1Z2lmeSBpcyBjdXJyZW50bHkgaGFwcGVuaW5n LiAqLworCWJvb2wgaF9taWRfcHVyZ2U7CisJYm9vbCBoX21pZF9odWdpZnk7CisKKwkvKgorCSAq IFdoZXRoZXIgb3Igbm90IHRoZSBocGRhdGEgaXMgYmVpbmcgdXBkYXRlZCBpbiB0aGUgcHNzZXQg KGkuZS4gaWYKKwkgKiB0aGVyZSBoYXMgYmVlbiBhIHBzc2V0X3VwZGF0ZV9iZWdpbiBjYWxsIGlz c3VlZCB3aXRob3V0IGEgbWF0Y2hpbmcKKwkgKiBwc3NldF91cGRhdGVfZW5kIGNhbGwpLiAgRXZl bnR1YWxseSB0aGlzIHdpbGwgZXhwYW5kIHRvIG90aGVyIHR5cGVzCisJICogb2YgdXBkYXRlcy4K KwkgKi8KKwlib29sIGhfdXBkYXRpbmc7CisKKwkvKiBXaGV0aGVyIG9yIG5vdCB0aGUgaHBkYXRh IGlzIGluIGEgcHNzZXQuICovCisJYm9vbCBoX2luX3Bzc2V0OworCisJdW5pb24geworCQkvKiBX aGVuIG5vbmVtcHR5IChhbmQgYWxzbyBub25mdWxsKSwgdXNlZCBieSB0aGUgcHNzZXQgYmlucy4g Ki8KKwkJaHBkYXRhX2FnZV9oZWFwX2xpbmtfdCBhZ2VfbGluazsKKwkJLyoKKwkJICogV2hlbiBl bXB0eSAob3Igbm90IGNvcnJlc3BvbmRpbmcgdG8gYW55IGh1Z2VwYWdlKSwgbGlzdAorCQkgKiBs aW5rYWdlLgorCQkgKi8KKwkJcWxfZWxtKGhwZGF0YV90KSBxbF9saW5rX2VtcHR5OworCX07CisK KwkvKgorCSAqIExpbmthZ2UgZm9yIHRoZSBwc3NldCB0byB0cmFjayBjYW5kaWRhdGVzIGZvciBw dXJnaW5nIGFuZCBodWdpZnlpbmcuCisJICovCisJcWxfZWxtKGhwZGF0YV90KSBxbF9saW5rX3B1 cmdlOworCXFsX2VsbShocGRhdGFfdCkgcWxfbGlua19odWdpZnk7CisKKwkvKiBUaGUgbGVuZ3Ro IG9mIHRoZSBsYXJnZXN0IGNvbnRpZ3VvdXMgc2VxdWVuY2Ugb2YgaW5hY3RpdmUgcGFnZXMuICov CisJc2l6ZV90IGhfbG9uZ2VzdF9mcmVlX3JhbmdlOworCisJLyogTnVtYmVyIG9mIGFjdGl2ZSBw YWdlcy4gKi8KKwlzaXplX3QgaF9uYWN0aXZlOworCisJLyogQSBiaXRtYXAgd2l0aCBiaXRzIHNl dCBpbiB0aGUgYWN0aXZlIHBhZ2VzLiAqLworCWZiX2dyb3VwX3QgYWN0aXZlX3BhZ2VzW0ZCX05H Uk9VUFMoSFVHRVBBR0VfUEFHRVMpXTsKKworCS8qCisJICogTnVtYmVyIG9mIGRpcnR5IG9yIGFj dGl2ZSBwYWdlcywgYW5kIGEgYml0bWFwIHRyYWNraW5nIHRoZW0uICBPbmUKKwkgKiB3YXkgdG8g dGhpbmsgb2YgdGhpcyBpcyBhcyB3aGljaCBwYWdlcyBhcmUgZGlydHkgZnJvbSB0aGUgT1Mncwor CSAqIHBlcnNwZWN0aXZlLgorCSAqLworCXNpemVfdCBoX250b3VjaGVkOworCisJLyogVGhlIHRv dWNoZWQgcGFnZXMgKHVzaW5nIHRoZSBzYW1lIGRlZmluaXRpb24gYXMgYWJvdmUpLiAqLworCWZi X2dyb3VwX3QgdG91Y2hlZF9wYWdlc1tGQl9OR1JPVVBTKEhVR0VQQUdFX1BBR0VTKV07Cit9Owor CitUWVBFRF9MSVNUKGhwZGF0YV9lbXB0eV9saXN0LCBocGRhdGFfdCwgcWxfbGlua19lbXB0eSkK K1RZUEVEX0xJU1QoaHBkYXRhX3B1cmdlX2xpc3QsIGhwZGF0YV90LCBxbF9saW5rX3B1cmdlKQor VFlQRURfTElTVChocGRhdGFfaHVnaWZ5X2xpc3QsIGhwZGF0YV90LCBxbF9saW5rX2h1Z2lmeSkK KworcGhfcHJvdG8oLCBocGRhdGFfYWdlX2hlYXAsIGhwZGF0YV90KTsKKworc3RhdGljIGlubGlu ZSB2b2lkICoKK2hwZGF0YV9hZGRyX2dldChjb25zdCBocGRhdGFfdCAqaHBkYXRhKSB7CisJcmV0 dXJuIGhwZGF0YS0+aF9hZGRyZXNzOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2hwZGF0YV9h ZGRyX3NldChocGRhdGFfdCAqaHBkYXRhLCB2b2lkICphZGRyKSB7CisJYXNzZXJ0KEhVR0VQQUdF X0FERFIyQkFTRShhZGRyKSA9PSBhZGRyKTsKKwlocGRhdGEtPmhfYWRkcmVzcyA9IGFkZHI7Cit9 CisKK3N0YXRpYyBpbmxpbmUgdWludDY0X3QKK2hwZGF0YV9hZ2VfZ2V0KGNvbnN0IGhwZGF0YV90 ICpocGRhdGEpIHsKKwlyZXR1cm4gaHBkYXRhLT5oX2FnZTsKK30KKworc3RhdGljIGlubGluZSB2 b2lkCitocGRhdGFfYWdlX3NldChocGRhdGFfdCAqaHBkYXRhLCB1aW50NjRfdCBhZ2UpIHsKKwlo cGRhdGEtPmhfYWdlID0gYWdlOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wKK2hwZGF0YV9odWdl X2dldChjb25zdCBocGRhdGFfdCAqaHBkYXRhKSB7CisJcmV0dXJuIGhwZGF0YS0+aF9odWdlOwor fQorCitzdGF0aWMgaW5saW5lIGJvb2wKK2hwZGF0YV9hbGxvY19hbGxvd2VkX2dldChjb25zdCBo cGRhdGFfdCAqaHBkYXRhKSB7CisJcmV0dXJuIGhwZGF0YS0+aF9hbGxvY19hbGxvd2VkOworfQor CitzdGF0aWMgaW5saW5lIHZvaWQKK2hwZGF0YV9hbGxvY19hbGxvd2VkX3NldChocGRhdGFfdCAq aHBkYXRhLCBib29sIGFsbG9jX2FsbG93ZWQpIHsKKwlocGRhdGEtPmhfYWxsb2NfYWxsb3dlZCA9 IGFsbG9jX2FsbG93ZWQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbAoraHBkYXRhX2luX3Bzc2V0 X2FsbG9jX2NvbnRhaW5lcl9nZXQoY29uc3QgaHBkYXRhX3QgKmhwZGF0YSkgeworCXJldHVybiBo cGRhdGEtPmhfaW5fcHNzZXRfYWxsb2NfY29udGFpbmVyOworfQorCitzdGF0aWMgaW5saW5lIHZv aWQKK2hwZGF0YV9pbl9wc3NldF9hbGxvY19jb250YWluZXJfc2V0KGhwZGF0YV90ICpocGRhdGEs IGJvb2wgaW5fY29udGFpbmVyKSB7CisJYXNzZXJ0KGluX2NvbnRhaW5lciAhPSBocGRhdGEtPmhf aW5fcHNzZXRfYWxsb2NfY29udGFpbmVyKTsKKwlocGRhdGEtPmhfaW5fcHNzZXRfYWxsb2NfY29u dGFpbmVyID0gaW5fY29udGFpbmVyOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wKK2hwZGF0YV9w dXJnZV9hbGxvd2VkX2dldChjb25zdCBocGRhdGFfdCAqaHBkYXRhKSB7CisJcmV0dXJuIGhwZGF0 YS0+aF9wdXJnZV9hbGxvd2VkOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2hwZGF0YV9wdXJn ZV9hbGxvd2VkX3NldChocGRhdGFfdCAqaHBkYXRhLCBib29sIHB1cmdlX2FsbG93ZWQpIHsKKyAg ICAgICBhc3NlcnQocHVyZ2VfYWxsb3dlZCA9PSBmYWxzZSB8fCAhaHBkYXRhLT5oX21pZF9wdXJn ZSk7CisgICAgICAgaHBkYXRhLT5oX3B1cmdlX2FsbG93ZWQgPSBwdXJnZV9hbGxvd2VkOworfQor CitzdGF0aWMgaW5saW5lIGJvb2wKK2hwZGF0YV9odWdpZnlfYWxsb3dlZF9nZXQoY29uc3QgaHBk YXRhX3QgKmhwZGF0YSkgeworCXJldHVybiBocGRhdGEtPmhfaHVnaWZ5X2FsbG93ZWQ7Cit9CisK K3N0YXRpYyBpbmxpbmUgdm9pZAoraHBkYXRhX2FsbG93X2h1Z2lmeShocGRhdGFfdCAqaHBkYXRh LCBuc3RpbWVfdCBub3cpIHsKKwlhc3NlcnQoIWhwZGF0YS0+aF9taWRfaHVnaWZ5KTsKKwlocGRh dGEtPmhfaHVnaWZ5X2FsbG93ZWQgPSB0cnVlOworCWhwZGF0YS0+aF90aW1lX2h1Z2lmeV9hbGxv d2VkID0gbm93OworfQorCitzdGF0aWMgaW5saW5lIG5zdGltZV90CitocGRhdGFfdGltZV9odWdp ZnlfYWxsb3dlZChocGRhdGFfdCAqaHBkYXRhKSB7CisJcmV0dXJuIGhwZGF0YS0+aF90aW1lX2h1 Z2lmeV9hbGxvd2VkOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2hwZGF0YV9kaXNhbGxvd19o dWdpZnkoaHBkYXRhX3QgKmhwZGF0YSkgeworCWhwZGF0YS0+aF9odWdpZnlfYWxsb3dlZCA9IGZh bHNlOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wKK2hwZGF0YV9pbl9wc3NldF9odWdpZnlfY29u dGFpbmVyX2dldChjb25zdCBocGRhdGFfdCAqaHBkYXRhKSB7CisJcmV0dXJuIGhwZGF0YS0+aF9p bl9wc3NldF9odWdpZnlfY29udGFpbmVyOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2hwZGF0 YV9pbl9wc3NldF9odWdpZnlfY29udGFpbmVyX3NldChocGRhdGFfdCAqaHBkYXRhLCBib29sIGlu X2NvbnRhaW5lcikgeworCWFzc2VydChpbl9jb250YWluZXIgIT0gaHBkYXRhLT5oX2luX3Bzc2V0 X2h1Z2lmeV9jb250YWluZXIpOworCWhwZGF0YS0+aF9pbl9wc3NldF9odWdpZnlfY29udGFpbmVy ID0gaW5fY29udGFpbmVyOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wKK2hwZGF0YV9taWRfcHVy Z2VfZ2V0KGNvbnN0IGhwZGF0YV90ICpocGRhdGEpIHsKKwlyZXR1cm4gaHBkYXRhLT5oX21pZF9w dXJnZTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitocGRhdGFfbWlkX3B1cmdlX3NldChocGRh dGFfdCAqaHBkYXRhLCBib29sIG1pZF9wdXJnZSkgeworCWFzc2VydChtaWRfcHVyZ2UgIT0gaHBk YXRhLT5oX21pZF9wdXJnZSk7CisJaHBkYXRhLT5oX21pZF9wdXJnZSA9IG1pZF9wdXJnZTsKK30K Kworc3RhdGljIGlubGluZSBib29sCitocGRhdGFfbWlkX2h1Z2lmeV9nZXQoY29uc3QgaHBkYXRh X3QgKmhwZGF0YSkgeworCXJldHVybiBocGRhdGEtPmhfbWlkX2h1Z2lmeTsKK30KKworc3RhdGlj IGlubGluZSB2b2lkCitocGRhdGFfbWlkX2h1Z2lmeV9zZXQoaHBkYXRhX3QgKmhwZGF0YSwgYm9v bCBtaWRfaHVnaWZ5KSB7CisJYXNzZXJ0KG1pZF9odWdpZnkgIT0gaHBkYXRhLT5oX21pZF9odWdp ZnkpOworCWhwZGF0YS0+aF9taWRfaHVnaWZ5ID0gbWlkX2h1Z2lmeTsKK30KKworc3RhdGljIGlu bGluZSBib29sCitocGRhdGFfY2hhbmdpbmdfc3RhdGVfZ2V0KGNvbnN0IGhwZGF0YV90ICpocGRh dGEpIHsKKwlyZXR1cm4gaHBkYXRhLT5oX21pZF9wdXJnZSB8fCBocGRhdGEtPmhfbWlkX2h1Z2lm eTsKK30KKworCitzdGF0aWMgaW5saW5lIGJvb2wKK2hwZGF0YV91cGRhdGluZ19nZXQoY29uc3Qg aHBkYXRhX3QgKmhwZGF0YSkgeworCXJldHVybiBocGRhdGEtPmhfdXBkYXRpbmc7Cit9CisKK3N0 YXRpYyBpbmxpbmUgdm9pZAoraHBkYXRhX3VwZGF0aW5nX3NldChocGRhdGFfdCAqaHBkYXRhLCBi b29sIHVwZGF0aW5nKSB7CisJYXNzZXJ0KHVwZGF0aW5nICE9IGhwZGF0YS0+aF91cGRhdGluZyk7 CisJaHBkYXRhLT5oX3VwZGF0aW5nID0gdXBkYXRpbmc7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9v bAoraHBkYXRhX2luX3Bzc2V0X2dldChjb25zdCBocGRhdGFfdCAqaHBkYXRhKSB7CisJcmV0dXJu IGhwZGF0YS0+aF9pbl9wc3NldDsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitocGRhdGFfaW5f cHNzZXRfc2V0KGhwZGF0YV90ICpocGRhdGEsIGJvb2wgaW5fcHNzZXQpIHsKKwlhc3NlcnQoaW5f cHNzZXQgIT0gaHBkYXRhLT5oX2luX3Bzc2V0KTsKKwlocGRhdGEtPmhfaW5fcHNzZXQgPSBpbl9w c3NldDsKK30KKworc3RhdGljIGlubGluZSBzaXplX3QKK2hwZGF0YV9sb25nZXN0X2ZyZWVfcmFu Z2VfZ2V0KGNvbnN0IGhwZGF0YV90ICpocGRhdGEpIHsKKwlyZXR1cm4gaHBkYXRhLT5oX2xvbmdl c3RfZnJlZV9yYW5nZTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitocGRhdGFfbG9uZ2VzdF9m cmVlX3JhbmdlX3NldChocGRhdGFfdCAqaHBkYXRhLCBzaXplX3QgbG9uZ2VzdF9mcmVlX3Jhbmdl KSB7CisJYXNzZXJ0KGxvbmdlc3RfZnJlZV9yYW5nZSA8PSBIVUdFUEFHRV9QQUdFUyk7CisJaHBk YXRhLT5oX2xvbmdlc3RfZnJlZV9yYW5nZSA9IGxvbmdlc3RfZnJlZV9yYW5nZTsKK30KKworc3Rh dGljIGlubGluZSBzaXplX3QKK2hwZGF0YV9uYWN0aXZlX2dldChocGRhdGFfdCAqaHBkYXRhKSB7 CisJcmV0dXJuIGhwZGF0YS0+aF9uYWN0aXZlOworfQorCitzdGF0aWMgaW5saW5lIHNpemVfdAor aHBkYXRhX250b3VjaGVkX2dldChocGRhdGFfdCAqaHBkYXRhKSB7CisJcmV0dXJuIGhwZGF0YS0+ aF9udG91Y2hlZDsKK30KKworc3RhdGljIGlubGluZSBzaXplX3QKK2hwZGF0YV9uZGlydHlfZ2V0 KGhwZGF0YV90ICpocGRhdGEpIHsKKwlyZXR1cm4gaHBkYXRhLT5oX250b3VjaGVkIC0gaHBkYXRh LT5oX25hY3RpdmU7Cit9CisKK3N0YXRpYyBpbmxpbmUgc2l6ZV90CitocGRhdGFfbnJldGFpbmVk X2dldChocGRhdGFfdCAqaHBkYXRhKSB7CisJcmV0dXJuIEhVR0VQQUdFX1BBR0VTIC0gaHBkYXRh LT5oX250b3VjaGVkOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2hwZGF0YV9hc3NlcnRfZW1w dHkoaHBkYXRhX3QgKmhwZGF0YSkgeworCWFzc2VydChmYl9lbXB0eShocGRhdGEtPmFjdGl2ZV9w YWdlcywgSFVHRVBBR0VfUEFHRVMpKTsKKwlhc3NlcnQoaHBkYXRhLT5oX25hY3RpdmUgPT0gMCk7 Cit9CisKKy8qCisgKiBPbmx5IHVzZWQgaW4gdGVzdHMsIGFuZCBpbiBocGRhdGFfYXNzZXJ0X2Nv bnNpc3RlbnQsIGJlbG93LiAgVmVyaWZpZXMgc29tZQorICogY29uc2lzdGVuY3kgcHJvcGVydGll cyBvZiB0aGUgaHBkYXRhIChlLmcuIHRoYXQgY2FjaGVkIGNvdW50cyBvZiBwYWdlIHN0YXRzCisg KiBtYXRjaCBjb21wdXRlZCBvbmVzKS4KKyAqLworc3RhdGljIGlubGluZSBib29sCitocGRhdGFf Y29uc2lzdGVudChocGRhdGFfdCAqaHBkYXRhKSB7CisJaWYoZmJfdXJhbmdlX2xvbmdlc3QoaHBk YXRhLT5hY3RpdmVfcGFnZXMsIEhVR0VQQUdFX1BBR0VTKQorCSAgICAhPSBocGRhdGFfbG9uZ2Vz dF9mcmVlX3JhbmdlX2dldChocGRhdGEpKSB7CisJCXJldHVybiBmYWxzZTsKKwl9CisJaWYgKGZi X3Njb3VudChocGRhdGEtPmFjdGl2ZV9wYWdlcywgSFVHRVBBR0VfUEFHRVMsIDAsIEhVR0VQQUdF X1BBR0VTKQorCSAgICAhPSBocGRhdGEtPmhfbmFjdGl2ZSkgeworCQlyZXR1cm4gZmFsc2U7CisJ fQorCWlmIChmYl9zY291bnQoaHBkYXRhLT50b3VjaGVkX3BhZ2VzLCBIVUdFUEFHRV9QQUdFUywg MCwgSFVHRVBBR0VfUEFHRVMpCisJICAgICE9IGhwZGF0YS0+aF9udG91Y2hlZCkgeworCQlyZXR1 cm4gZmFsc2U7CisJfQorCWlmIChocGRhdGEtPmhfbnRvdWNoZWQgPCBocGRhdGEtPmhfbmFjdGl2 ZSkgeworCQlyZXR1cm4gZmFsc2U7CisJfQorCWlmIChocGRhdGEtPmhfaHVnZSAmJiBocGRhdGEt PmhfbnRvdWNoZWQgIT0gSFVHRVBBR0VfUEFHRVMpIHsKKwkJcmV0dXJuIGZhbHNlOworCX0KKwlp ZiAoaHBkYXRhX2NoYW5naW5nX3N0YXRlX2dldChocGRhdGEpCisJICAgICYmICgoaHBkYXRhLT5o X3B1cmdlX2FsbG93ZWQpIHx8IGhwZGF0YS0+aF9odWdpZnlfYWxsb3dlZCkpIHsKKwkJcmV0dXJu IGZhbHNlOworCX0KKwlpZiAoaHBkYXRhX2h1Z2lmeV9hbGxvd2VkX2dldChocGRhdGEpCisJICAg ICE9IGhwZGF0YV9pbl9wc3NldF9odWdpZnlfY29udGFpbmVyX2dldChocGRhdGEpKSB7CisJCXJl dHVybiBmYWxzZTsKKwl9CisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAor aHBkYXRhX2Fzc2VydF9jb25zaXN0ZW50KGhwZGF0YV90ICpocGRhdGEpIHsKKwlhc3NlcnQoaHBk YXRhX2NvbnNpc3RlbnQoaHBkYXRhKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbAoraHBkYXRh X2VtcHR5KGhwZGF0YV90ICpocGRhdGEpIHsKKwlyZXR1cm4gaHBkYXRhLT5oX25hY3RpdmUgPT0g MDsKK30KKworc3RhdGljIGlubGluZSBib29sCitocGRhdGFfZnVsbChocGRhdGFfdCAqaHBkYXRh KSB7CisJcmV0dXJuIGhwZGF0YS0+aF9uYWN0aXZlID09IEhVR0VQQUdFX1BBR0VTOworfQorCit2 b2lkIGhwZGF0YV9pbml0KGhwZGF0YV90ICpocGRhdGEsIHZvaWQgKmFkZHIsIHVpbnQ2NF90IGFn ZSk7CisKKy8qCisgKiBHaXZlbiBhbiBocGRhdGEgd2hpY2ggY2FuIHNlcnZlIGFuIGFsbG9jYXRp b24gcmVxdWVzdCwgcGljayBhbmQgcmVzZXJ2ZSBhbgorICogb2Zmc2V0IHdpdGhpbiB0aGF0IGFs bG9jYXRpb24uCisgKi8KK3ZvaWQgKmhwZGF0YV9yZXNlcnZlX2FsbG9jKGhwZGF0YV90ICpocGRh dGEsIHNpemVfdCBzeik7Cit2b2lkIGhwZGF0YV91bnJlc2VydmUoaHBkYXRhX3QgKmhwZGF0YSwg dm9pZCAqYmVnaW4sIHNpemVfdCBzeik7CisKKy8qCisgKiBUaGUgaHBkYXRhX3B1cmdlX3ByZXBh cmVfdCBhbGxvd3MgZ3JhYmJpbmcgdGhlIG1ldGFkYXRhIHJlcXVpcmVkIHRvIHB1cmdlCisgKiBz dWJyYW5nZXMgb2YgYSBodWdlcGFnZSB3aGlsZSBob2xkaW5nIGEgbG9jaywgZHJvcCB0aGUgbG9j ayBkdXJpbmcgdGhlIGFjdHVhbAorICogcHVyZ2luZyBvZiB0aGVtLCBhbmQgcmVhY3F1aXJlIGl0 IHRvIHVwZGF0ZSB0aGUgbWV0YWRhdGEgYWdhaW4uCisgKi8KK3R5cGVkZWYgc3RydWN0IGhwZGF0 YV9wdXJnZV9zdGF0ZV9zIGhwZGF0YV9wdXJnZV9zdGF0ZV90Oworc3RydWN0IGhwZGF0YV9wdXJn ZV9zdGF0ZV9zIHsKKwlzaXplX3QgbnB1cmdlZDsKKwlzaXplX3QgbmRpcnR5X3RvX3B1cmdlOwor CWZiX2dyb3VwX3QgdG9fcHVyZ2VbRkJfTkdST1VQUyhIVUdFUEFHRV9QQUdFUyldOworCXNpemVf dCBuZXh0X3B1cmdlX3NlYXJjaF9iZWdpbjsKK307CisKKy8qCisgKiBJbml0aWFsaXplcyBwdXJn ZSBzdGF0ZS4gIFRoZSBhY2Nlc3MgdG8gaHBkYXRhIG11c3QgYmUgZXh0ZXJuYWxseQorICogc3lu Y2hyb25pemVkIHdpdGggb3RoZXIgaHBkYXRhXyogY2FsbHMuCisgKgorICogWW91IGNhbiB0ZWxs IHdoZXRoZXIgb3Igbm90IGEgdGhyZWFkIGlzIHB1cmdpbmcgb3IgaHVnaWZ5aW5nIGEgZ2l2ZW4g aHBkYXRhCisgKiB2aWEgaHBkYXRhX2NoYW5naW5nX3N0YXRlX2dldChocGRhdGEpLiAgUmFjaW5n IGh1Z2lmaWNhdGlvbiBvciBwdXJnaW5nCisgKiBvcGVyYXRpb25zIGFyZW4ndCBhbGxvd2VkLgor ICoKKyAqIE9uY2UgeW91IGJlZ2luIHB1cmdpbmcsIHlvdSBoYXZlIHRvIGZvbGxvdyB0aHJvdWdo IGFuZCBjYWxsIGhwZGF0YV9wdXJnZV9uZXh0CisgKiB1bnRpbCB5b3UncmUgZG9uZSwgYW5kIHRo ZW4gZW5kLiAgQWxsb2NhdGluZyBvdXQgb2YgYW4gaHBkYXRhIHVuZGVyZ29pbmcKKyAqIHB1cmdp bmcgaXMgbm90IGFsbG93ZWQuCisgKgorICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGRpcnR5IHBh Z2VzIHRoYXQgd2lsbCBiZSBwdXJnZWQuCisgKi8KK3NpemVfdCBocGRhdGFfcHVyZ2VfYmVnaW4o aHBkYXRhX3QgKmhwZGF0YSwgaHBkYXRhX3B1cmdlX3N0YXRlX3QgKnB1cmdlX3N0YXRlKTsKKwor LyoKKyAqIElmIHRoZXJlIGFyZSBtb3JlIGV4dGVudHMgdG8gcHVyZ2UsIHNldHMgKnJfcHVyZ2Vf YWRkciBhbmQgKnJfcHVyZ2Vfc2l6ZSB0bworICogdHJ1ZSwgYW5kIHJldHVybnMgdHJ1ZS4gIE90 aGVyd2lzZSwgcmV0dXJucyBmYWxzZSB0byBpbmRpY2F0ZSB0aGF0IHdlJ3JlCisgKiBkb25lLgor ICoKKyAqIFRoaXMgcmVxdWlyZXMgZXhjbHVzaXZlIGFjY2VzcyB0byB0aGUgcHVyZ2Ugc3RhdGUs IGJ1dCAqbm90KiB0byB0aGUgaHBkYXRhLgorICogSW4gcGFydGljdWxhciwgdW5yZXNlcnZlIGNh bGxzIGFyZSBhbGxvd2VkIHdoaWxlIHB1cmdpbmcgKGkuZS4geW91IGNhbiBkYWxsb2MKKyAqIGlu dG8gb25lIHBhcnQgb2YgdGhlIGhwZGF0YSB3aGlsZSBwdXJnaW5nIGEgZGlmZmVyZW50IHBhcnQp LgorICovCitib29sIGhwZGF0YV9wdXJnZV9uZXh0KGhwZGF0YV90ICpocGRhdGEsIGhwZGF0YV9w dXJnZV9zdGF0ZV90ICpwdXJnZV9zdGF0ZSwKKyAgICB2b2lkICoqcl9wdXJnZV9hZGRyLCBzaXpl X3QgKnJfcHVyZ2Vfc2l6ZSk7CisvKgorICogVXBkYXRlcyB0aGUgaHBkYXRhIG1ldGFkYXRhIGFm dGVyIGFsbCBwdXJnaW5nIGlzIGRvbmUuICBOZWVkcyBleHRlcm5hbAorICogc3luY2hyb25pemF0 aW9uLgorICovCit2b2lkIGhwZGF0YV9wdXJnZV9lbmQoaHBkYXRhX3QgKmhwZGF0YSwgaHBkYXRh X3B1cmdlX3N0YXRlX3QgKnB1cmdlX3N0YXRlKTsKKwordm9pZCBocGRhdGFfaHVnaWZ5KGhwZGF0 YV90ICpocGRhdGEpOwordm9pZCBocGRhdGFfZGVodWdpZnkoaHBkYXRhX3QgKmhwZGF0YSk7CisK KyNlbmRpZiAvKiBKRU1BTExPQ19JTlRFUk5BTF9IUERBVEFfSCAqLwoKZGlmZiAtLWdpdCBhLzM4 OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50 ZXJuYWwvaW5zcGVjdC5oIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAv aW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9pbnNwZWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMC4uNjVmZWY1MQotLS0gL2Rldi9udWxsCisrKyBiLzM4OS1kcy1iYXNlLTMu My4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvaW5zcGVj dC5oCkBAIC0wLDAgKzEsNDAgQEAKKyNpZm5kZWYgSkVNQUxMT0NfSU5URVJOQUxfSU5TUEVDVF9I CisjZGVmaW5lIEpFTUFMTE9DX0lOVEVSTkFMX0lOU1BFQ1RfSAorCisvKgorICogVGhpcyBtb2R1 bGUgY29udGFpbnMgdGhlIGhlYXAgaW50cm9zcGVjdGlvbiBjYXBhYmlsaXRpZXMuICBGb3Igbm93 IHRoZXkgYXJlCisgKiBleHBvc2VkIHB1cmVseSB0aHJvdWdoIG1hbGxjdGwgQVBJcyBpbiB0aGUg ZXhwZXJpbWVudGFsIG5hbWVzcGFjZSwgYnV0IHRoaXMKKyAqIG1heSBjaGFuZ2Ugb3ZlciB0aW1l LgorICovCisKKy8qCisgKiBUaGUgZm9sbG93aW5nIHR3byBzdHJ1Y3RzIGFyZSBmb3IgZXhwZXJp bWVudGFsIHB1cnBvc2VzLiBTZWUKKyAqIGV4cGVyaW1lbnRhbF91dGlsaXphdGlvbl9xdWVyeV9j dGwgYW5kCisgKiBleHBlcmltZW50YWxfdXRpbGl6YXRpb25fYmF0Y2hfcXVlcnlfY3RsIGluIHNy Yy9jdGwuYy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgaW5zcGVjdF9leHRlbnRfdXRpbF9zdGF0c19z IGluc3BlY3RfZXh0ZW50X3V0aWxfc3RhdHNfdDsKK3N0cnVjdCBpbnNwZWN0X2V4dGVudF91dGls X3N0YXRzX3MgeworCXNpemVfdCBuZnJlZTsKKwlzaXplX3QgbnJlZ3M7CisJc2l6ZV90IHNpemU7 Cit9OworCit0eXBlZGVmIHN0cnVjdCBpbnNwZWN0X2V4dGVudF91dGlsX3N0YXRzX3ZlcmJvc2Vf cworICAgIGluc3BlY3RfZXh0ZW50X3V0aWxfc3RhdHNfdmVyYm9zZV90OworCitzdHJ1Y3QgaW5z cGVjdF9leHRlbnRfdXRpbF9zdGF0c192ZXJib3NlX3MgeworCXZvaWQgKnNsYWJjdXJfYWRkcjsK KwlzaXplX3QgbmZyZWU7CisJc2l6ZV90IG5yZWdzOworCXNpemVfdCBzaXplOworCXNpemVfdCBi aW5fbmZyZWU7CisJc2l6ZV90IGJpbl9ucmVnczsKK307CisKK3ZvaWQgaW5zcGVjdF9leHRlbnRf dXRpbF9zdGF0c19nZXQodHNkbl90ICp0c2RuLCBjb25zdCB2b2lkICpwdHIsCisgICAgc2l6ZV90 ICpuZnJlZSwgc2l6ZV90ICpucmVncywgc2l6ZV90ICpzaXplKTsKK3ZvaWQgaW5zcGVjdF9leHRl bnRfdXRpbF9zdGF0c192ZXJib3NlX2dldCh0c2RuX3QgKnRzZG4sIGNvbnN0IHZvaWQgKnB0ciwK KyAgICBzaXplX3QgKm5mcmVlLCBzaXplX3QgKm5yZWdzLCBzaXplX3QgKnNpemUsCisgICAgc2l6 ZV90ICpiaW5fbmZyZWUsIHNpemVfdCAqYmluX25yZWdzLCB2b2lkICoqc2xhYmN1cl9hZGRyKTsK KworI2VuZGlmIC8qIEpFTUFMTE9DX0lOVEVSTkFMX0lOU1BFQ1RfSCAqLwoKZGlmZiAtLWdpdCBh LzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2Mv aW50ZXJuYWwvamVtYWxsb2NfaW50ZXJuYWxfZGVjbHMuaCBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1 aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvamVtYWxsb2NfaW50 ZXJuYWxfZGVjbHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODMwMjdj Ci0tLSAvZGV2L251bGwKKysrIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4z LjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9qZW1hbGxvY19pbnRlcm5hbF9kZWNscy5oCkBA IC0wLDAgKzEsMTA4IEBACisjaWZuZGVmIEpFTUFMTE9DX0lOVEVSTkFMX0RFQ0xTX0gKKyNkZWZp bmUgSkVNQUxMT0NfSU5URVJOQUxfREVDTFNfSAorCisjaW5jbHVkZSA8bWF0aC5oPgorI2lmZGVm IF9XSU4zMgorIyAgaW5jbHVkZSA8d2luZG93cy5oPgorIyAgaW5jbHVkZSAibXN2Y19jb21wYXQv d2luZG93c19leHRyYS5oIgorIyAgaW5jbHVkZSAibXN2Y19jb21wYXQvc3RyaW5ncy5oIgorIyAg aWZkZWYgX1dJTjY0CisjICAgIGlmIExHX1ZBRERSIDw9IDMyCisjICAgICAgZXJyb3IgR2VuZXJh dGUgdGhlIGhlYWRlcnMgdXNpbmcgeDY0IHZjYXJncworIyAgICBlbmRpZgorIyAgZWxzZQorIyAg ICBpZiBMR19WQUREUiA+IDMyCisjICAgICAgdW5kZWYgTEdfVkFERFIKKyMgICAgICBkZWZpbmUg TEdfVkFERFIgMzIKKyMgICAgZW5kaWYKKyMgIGVuZGlmCisjZWxzZQorIyAgaW5jbHVkZSA8c3lz L3BhcmFtLmg+CisjICBpbmNsdWRlIDxzeXMvbW1hbi5oPgorIyAgaWYgIWRlZmluZWQoX19wbmFj bF9fKSAmJiAhZGVmaW5lZChfX25hdGl2ZV9jbGllbnRfXykKKyMgICAgaW5jbHVkZSA8c3lzL3N5 c2NhbGwuaD4KKyMgICAgaWYgIWRlZmluZWQoU1lTX3dyaXRlKSAmJiBkZWZpbmVkKF9fTlJfd3Jp dGUpCisjICAgICAgZGVmaW5lIFNZU193cml0ZSBfX05SX3dyaXRlCisjICAgIGVuZGlmCisjICAg IGlmIGRlZmluZWQoU1lTX29wZW4pICYmIGRlZmluZWQoX19hYXJjaDY0X18pCisgICAgICAgLyog QW5kcm9pZCBoZWFkZXJzIG1heSBkZWZpbmUgU1lTX29wZW4gdG8gX19OUl9vcGVuIGV2ZW4gdGhv dWdoCisgICAgICAgICogX19OUl9vcGVuIG1heSBub3QgZXhpc3Qgb24gQUFyY2g2NCAoc3VwZXJz ZWRlZCBieSBfX05SX29wZW5hdCkuICovCisjICAgICAgdW5kZWYgU1lTX29wZW4KKyMgICAgZW5k aWYKKyMgICAgaW5jbHVkZSA8c3lzL3Vpby5oPgorIyAgZW5kaWYKKyMgIGluY2x1ZGUgPHB0aHJl YWQuaD4KKyMgIGlmIGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19EcmFnb25GbHlf XykKKyMgIGluY2x1ZGUgPHB0aHJlYWRfbnAuaD4KKyMgIGluY2x1ZGUgPHNjaGVkLmg+CisjICBp ZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQorIyAgICBkZWZpbmUgY3B1X3NldF90IGNwdXNldF90Cisj ICBlbmRpZgorIyAgZW5kaWYKKyMgIGluY2x1ZGUgPHNpZ25hbC5oPgorIyAgaWZkZWYgSkVNQUxM T0NfT1NfVU5GQUlSX0xPQ0sKKyMgICAgaW5jbHVkZSA8b3MvbG9jay5oPgorIyAgZW5kaWYKKyMg IGlmZGVmIEpFTUFMTE9DX0dMSUJDX01BTExPQ19IT09LCisjICAgIGluY2x1ZGUgPHNjaGVkLmg+ CisjICBlbmRpZgorIyAgaW5jbHVkZSA8ZXJybm8uaD4KKyMgIGluY2x1ZGUgPHN5cy90aW1lLmg+ CisjICBpbmNsdWRlIDx0aW1lLmg+CisjICBpZmRlZiBKRU1BTExPQ19IQVZFX01BQ0hfQUJTT0xV VEVfVElNRQorIyAgICBpbmNsdWRlIDxtYWNoL21hY2hfdGltZS5oPgorIyAgZW5kaWYKKyNlbmRp ZgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCisjaW5jbHVkZSA8bGltaXRzLmg+CisjaWZuZGVm IFNJWkVfVF9NQVgKKyMgIGRlZmluZSBTSVpFX1RfTUFYCVNJWkVfTUFYCisjZW5kaWYKKyNpZm5k ZWYgU1NJWkVfTUFYCisjICBkZWZpbmUgU1NJWkVfTUFYCSgoc3NpemVfdCkoU0laRV9UX01BWCA+ PiAxKSkKKyNlbmRpZgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN0ZGJvb2wuaD4K KyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGlu dC5oPgorI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2lmbmRlZiBvZmZzZXRvZgorIyAgZGVmaW5lIG9m ZnNldG9mKHR5cGUsIG1lbWJlcikJKChzaXplX3QpJigoKHR5cGUgKilOVUxMKS0+bWVtYmVyKSkK KyNlbmRpZgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0cmluZ3MuaD4KKyNpbmNs dWRlIDxjdHlwZS5oPgorI2lmZGVmIF9NU0NfVkVSCisjICBpbmNsdWRlIDxpby5oPgordHlwZWRl ZiBpbnRwdHJfdCBzc2l6ZV90OworIyAgZGVmaW5lIFBBVEhfTUFYIDEwMjQKKyMgIGRlZmluZSBT VERFUlJfRklMRU5PIDIKKyMgIGRlZmluZSBfX2Z1bmNfXyBfX0ZVTkNUSU9OX18KKyMgIGlmZGVm IEpFTUFMTE9DX0hBU19SRVNUUklDVAorIyAgICBkZWZpbmUgcmVzdHJpY3QgX19yZXN0cmljdAor IyAgZW5kaWYKKy8qIERpc2FibGUgd2FybmluZ3MgYWJvdXQgZGVwcmVjYXRlZCBzeXN0ZW0gZnVu Y3Rpb25zLiAqLworIyAgcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDk5NikKKyNpZiBfTVNDX1ZF UiA8IDE4MDAKK3N0YXRpYyBpbnQKK2lzYmxhbmsoaW50IGMpIHsKKwlyZXR1cm4gKGMgPT0gJ1x0 JyB8fCBjID09ICcgJyk7Cit9CisjZW5kaWYKKyNlbHNlCisjICBpbmNsdWRlIDx1bmlzdGQuaD4K KyNlbmRpZgorI2luY2x1ZGUgPGZjbnRsLmg+CisKKy8qCisgKiBUaGUgV2luMzIgbWlkbCBjb21w aWxlciBoYXMgI2RlZmluZSBzbWFsbCBjaGFyOyB3ZSBkb24ndCB1c2UgbWlkbCwgYnV0CisgKiAi c21hbGwiIGlzIGEgbmljZSBpZGVudGlmaWVyIHRvIGhhdmUgYXZhaWxhYmxlIHdoZW4gdGFsa2lu ZyBhYm91dCBzaXplCisgKiBjbGFzc2VzLgorICovCisjaWZkZWYgc21hbGwKKyMgIHVuZGVmIHNt YWxsCisjZW5kaWYKKworI2VuZGlmIC8qIEpFTUFMTE9DX0lOVEVSTkFMX0ggKi8KCmRpZmYgLS1n aXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFs bG9jL2ludGVybmFsL2plbWFsbG9jX2ludGVybmFsX2RlZnMuaC5pbiBiLzM4OS1kcy1iYXNlLTMu My4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvamVtYWxs b2NfaW50ZXJuYWxfZGVmcy5oLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu LjM1ODgwNzIKLS0tIC9kZXYvbnVsbAorKysgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1h bGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL2plbWFsbG9jX2ludGVybmFsX2Rl ZnMuaC5pbgpAQCAtMCwwICsxLDQyNyBAQAorI2lmbmRlZiBKRU1BTExPQ19JTlRFUk5BTF9ERUZT X0hfCisjZGVmaW5lIEpFTUFMTE9DX0lOVEVSTkFMX0RFRlNfSF8KKy8qCisgKiBJZiBKRU1BTExP Q19QUkVGSVggaXMgZGVmaW5lZCB2aWEgLS13aXRoLWplbWFsbG9jLXByZWZpeCwgaXQgd2lsbCBj YXVzZSBhbGwKKyAqIHB1YmxpYyBBUElzIHRvIGJlIHByZWZpeGVkLiAgVGhpcyBtYWtlcyBpdCBw b3NzaWJsZSwgd2l0aCBzb21lIGNhcmUsIHRvIHVzZQorICogbXVsdGlwbGUgYWxsb2NhdG9ycyBz aW11bHRhbmVvdXNseS4KKyAqLworI3VuZGVmIEpFTUFMTE9DX1BSRUZJWAorI3VuZGVmIEpFTUFM TE9DX0NQUkVGSVgKKworLyoKKyAqIERlZmluZSBvdmVycmlkZXMgZm9yIG5vbi1zdGFuZGFyZCBh bGxvY2F0b3ItcmVsYXRlZCBmdW5jdGlvbnMgaWYgdGhleSBhcmUKKyAqIHByZXNlbnQgb24gdGhl IHN5c3RlbS4KKyAqLworI3VuZGVmIEpFTUFMTE9DX09WRVJSSURFX19fTElCQ19DQUxMT0MKKyN1 bmRlZiBKRU1BTExPQ19PVkVSUklERV9fX0xJQkNfRlJFRQorI3VuZGVmIEpFTUFMTE9DX09WRVJS SURFX19fTElCQ19NQUxMT0MKKyN1bmRlZiBKRU1BTExPQ19PVkVSUklERV9fX0xJQkNfTUVNQUxJ R04KKyN1bmRlZiBKRU1BTExPQ19PVkVSUklERV9fX0xJQkNfUkVBTExPQworI3VuZGVmIEpFTUFM TE9DX09WRVJSSURFX19fTElCQ19WQUxMT0MKKyN1bmRlZiBKRU1BTExPQ19PVkVSUklERV9fX1BP U0lYX01FTUFMSUdOCisKKy8qCisgKiBKRU1BTExPQ19QUklWQVRFX05BTUVTUEFDRSBpcyB1c2Vk IGFzIGEgcHJlZml4IGZvciBhbGwgbGlicmFyeS1wcml2YXRlIEFQSXMuCisgKiBGb3Igc2hhcmVk IGxpYnJhcmllcywgc3ltYm9sIHZpc2liaWxpdHkgbWVjaGFuaXNtcyBwcmV2ZW50IHRoZXNlIHN5 bWJvbHMKKyAqIGZyb20gYmVpbmcgZXhwb3J0ZWQsIGJ1dCBmb3Igc3RhdGljIGxpYnJhcmllcywg bmFtaW5nIGNvbGxpc2lvbnMgYXJlIGEgcmVhbAorICogcG9zc2liaWxpdHkuCisgKi8KKyN1bmRl ZiBKRU1BTExPQ19QUklWQVRFX05BTUVTUEFDRQorCisvKgorICogSHlwZXItdGhyZWFkZWQgQ1BV cyBtYXkgbmVlZCBhIHNwZWNpYWwgaW5zdHJ1Y3Rpb24gaW5zaWRlIHNwaW4gbG9vcHMgaW4KKyAq IG9yZGVyIHRvIHlpZWxkIHRvIGFub3RoZXIgdmlydHVhbCBDUFUuCisgKi8KKyN1bmRlZiBDUFVf U1BJTldBSVQKKy8qIDEgaWYgQ1BVX1NQSU5XQUlUIGlzIGRlZmluZWQsIDAgb3RoZXJ3aXNlLiAq LworI3VuZGVmIEhBVkVfQ1BVX1NQSU5XQUlUCisKKy8qCisgKiBOdW1iZXIgb2Ygc2lnbmlmaWNh bnQgYml0cyBpbiB2aXJ0dWFsIGFkZHJlc3Nlcy4gIFRoaXMgbWF5IGJlIGxlc3MgdGhhbiB0aGUK KyAqIHRvdGFsIG51bWJlciBvZiBiaXRzIGluIGEgcG9pbnRlciwgZS5nLiBvbiB4NjQsIGZvciB3 aGljaCB0aGUgdXBwZXJtb3N0IDE2CisgKiBiaXRzIGFyZSB0aGUgc2FtZSBhcyBiaXQgNDcuCisg Ki8KKyN1bmRlZiBMR19WQUREUgorCisvKiBEZWZpbmVkIGlmIEMxMSBhdG9taWNzIGFyZSBhdmFp bGFibGUuICovCisjdW5kZWYgSkVNQUxMT0NfQzExX0FUT01JQ1MKKworLyogRGVmaW5lZCBpZiBH Q0MgX19hdG9taWMgYXRvbWljcyBhcmUgYXZhaWxhYmxlLiAqLworI3VuZGVmIEpFTUFMTE9DX0dD Q19BVE9NSUNfQVRPTUlDUworLyogYW5kIHRoZSA4LWJpdCB2YXJpYW50IHN1cHBvcnQuICovCisj dW5kZWYgSkVNQUxMT0NfR0NDX1U4X0FUT01JQ19BVE9NSUNTCisKKy8qIERlZmluZWQgaWYgR0ND IF9fc3luYyBhdG9taWNzIGFyZSBhdmFpbGFibGUuICovCisjdW5kZWYgSkVNQUxMT0NfR0NDX1NZ TkNfQVRPTUlDUworLyogYW5kIHRoZSA4LWJpdCB2YXJpYW50IHN1cHBvcnQuICovCisjdW5kZWYg SkVNQUxMT0NfR0NDX1U4X1NZTkNfQVRPTUlDUworCisvKgorICogRGVmaW5lZCBpZiBfX2J1aWx0 aW5fY2x6KCkgYW5kIF9fYnVpbHRpbl9jbHpsKCkgYXJlIGF2YWlsYWJsZS4KKyAqLworI3VuZGVm IEpFTUFMTE9DX0hBVkVfQlVJTFRJTl9DTFoKKworLyoKKyAqIERlZmluZWQgaWYgb3NfdW5mYWly X2xvY2tfKigpIGZ1bmN0aW9ucyBhcmUgYXZhaWxhYmxlLCBhcyBwcm92aWRlZCBieSBEYXJ3aW4u CisgKi8KKyN1bmRlZiBKRU1BTExPQ19PU19VTkZBSVJfTE9DSworCisvKiBEZWZpbmVkIGlmIHN5 c2NhbGwoMikgaXMgdXNhYmxlLiAqLworI3VuZGVmIEpFTUFMTE9DX1VTRV9TWVNDQUxMCisKKy8q CisgKiBEZWZpbmVkIGlmIHNlY3VyZV9nZXRlbnYoMykgaXMgYXZhaWxhYmxlLgorICovCisjdW5k ZWYgSkVNQUxMT0NfSEFWRV9TRUNVUkVfR0VURU5WCisKKy8qCisgKiBEZWZpbmVkIGlmIGlzc2V0 dWdpZCgyKSBpcyBhdmFpbGFibGUuCisgKi8KKyN1bmRlZiBKRU1BTExPQ19IQVZFX0lTU0VUVUdJ RAorCisvKiBEZWZpbmVkIGlmIHB0aHJlYWRfYXRmb3JrKDMpIGlzIGF2YWlsYWJsZS4gKi8KKyN1 bmRlZiBKRU1BTExPQ19IQVZFX1BUSFJFQURfQVRGT1JLCisKKy8qIERlZmluZWQgaWYgcHRocmVh ZF9zZXRuYW1lX25wKDMpIGlzIGF2YWlsYWJsZS4gKi8KKyN1bmRlZiBKRU1BTExPQ19IQVZFX1BU SFJFQURfU0VUTkFNRV9OUAorCisvKiBEZWZpbmVkIGlmIHB0aHJlYWRfZ2V0bmFtZV9ucCgzKSBp cyBhdmFpbGFibGUuICovCisjdW5kZWYgSkVNQUxMT0NfSEFWRV9QVEhSRUFEX0dFVE5BTUVfTlAK KworLyogRGVmaW5lZCBpZiBwdGhyZWFkX2dldF9uYW1lX25wKDMpIGlzIGF2YWlsYWJsZS4gKi8K KyN1bmRlZiBKRU1BTExPQ19IQVZFX1BUSFJFQURfR0VUX05BTUVfTlAKKworLyoKKyAqIERlZmlu ZWQgaWYgY2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUNfQ09BUlNFLCAuLi4pIGlzIGF2YWls YWJsZS4KKyAqLworI3VuZGVmIEpFTUFMTE9DX0hBVkVfQ0xPQ0tfTU9OT1RPTklDX0NPQVJTRQor CisvKgorICogRGVmaW5lZCBpZiBjbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQywgLi4uKSBp cyBhdmFpbGFibGUuCisgKi8KKyN1bmRlZiBKRU1BTExPQ19IQVZFX0NMT0NLX01PTk9UT05JQwor CisvKgorICogRGVmaW5lZCBpZiBtYWNoX2Fic29sdXRlX3RpbWUoKSBpcyBhdmFpbGFibGUuCisg Ki8KKyN1bmRlZiBKRU1BTExPQ19IQVZFX01BQ0hfQUJTT0xVVEVfVElNRQorCisvKgorICogRGVm aW5lZCBpZiBjbG9ja19nZXR0aW1lKENMT0NLX1JFQUxUSU1FLCAuLi4pIGlzIGF2YWlsYWJsZS4K KyAqLworI3VuZGVmIEpFTUFMTE9DX0hBVkVfQ0xPQ0tfUkVBTFRJTUUKKworLyoKKyAqIERlZmlu ZWQgaWYgX21hbGxvY190aHJlYWRfY2xlYW51cCgpIGV4aXN0cy4gIEF0IGxlYXN0IGluIHRoZSBj YXNlIG9mCisgKiBGcmVlQlNELCBwdGhyZWFkX2tleV9jcmVhdGUoKSBhbGxvY2F0ZXMsIHdoaWNo IGlmIHVzZWQgZHVyaW5nIG1hbGxvYworICogYm9vdHN0cmFwcGluZyB3aWxsIGNhdXNlIHJlY3Vy c2lvbiBpbnRvIHRoZSBwdGhyZWFkcyBsaWJyYXJ5LiAgVGhlcmVmb3JlLCBpZgorICogX21hbGxv Y190aHJlYWRfY2xlYW51cCgpIGV4aXN0cywgdXNlIGl0IGFzIHRoZSBiYXNpcyBmb3IgdGhyZWFk IGNsZWFudXAgaW4KKyAqIG1hbGxvY190c2QuCisgKi8KKyN1bmRlZiBKRU1BTExPQ19NQUxMT0Nf VEhSRUFEX0NMRUFOVVAKKworLyoKKyAqIERlZmluZWQgaWYgdGhyZWFkZWQgaW5pdGlhbGl6YXRp b24gaXMga25vd24gdG8gYmUgc2FmZSBvbiB0aGlzIHBsYXRmb3JtLgorICogQW1vbmcgb3RoZXIg dGhpbmdzLCBpdCBtdXN0IGJlIHBvc3NpYmxlIHRvIGluaXRpYWxpemUgYSBtdXRleCB3aXRob3V0 CisgKiB0cmlnZ2VyaW5nIGFsbG9jYXRpb24gaW4gb3JkZXIgZm9yIHRocmVhZGVkIGFsbG9jYXRp b24gdG8gYmUgc2FmZS4KKyAqLworI3VuZGVmIEpFTUFMTE9DX1RIUkVBREVEX0lOSVQKKworLyoK KyAqIERlZmluZWQgaWYgdGhlIHB0aHJlYWRzIGltcGxlbWVudGF0aW9uIGRlZmluZXMKKyAqIF9w dGhyZWFkX211dGV4X2luaXRfY2FsbG9jX2NiKCksIGluIHdoaWNoIGNhc2UgdGhlIGZ1bmN0aW9u IGlzIHVzZWQgaW4gb3JkZXIKKyAqIHRvIGF2b2lkIHJlY3Vyc2l2ZSBhbGxvY2F0aW9uIGR1cmlu ZyBtdXRleCBpbml0aWFsaXphdGlvbi4KKyAqLworI3VuZGVmIEpFTUFMTE9DX01VVEVYX0lOSVRf Q0IKKworLyogTm9uLWVtcHR5IGlmIHRoZSB0bHNfbW9kZWwgYXR0cmlidXRlIGlzIHN1cHBvcnRl ZC4gKi8KKyN1bmRlZiBKRU1BTExPQ19UTFNfTU9ERUwKKworLyoKKyAqIEpFTUFMTE9DX0RFQlVH IGVuYWJsZXMgYXNzZXJ0aW9ucyBhbmQgb3RoZXIgc2FuaXR5IGNoZWNrcywgYW5kIGRpc2FibGVz CisgKiBpbmxpbmUgZnVuY3Rpb25zLgorICovCisjdW5kZWYgSkVNQUxMT0NfREVCVUcKKworLyog SkVNQUxMT0NfU1RBVFMgZW5hYmxlcyBzdGF0aXN0aWNzIGNhbGN1bGF0aW9uLiAqLworI3VuZGVm IEpFTUFMTE9DX1NUQVRTCisKKy8qIEpFTUFMTE9DX0VYUEVSSU1FTlRBTF9TTUFMTE9DWF9BUEkg ZW5hYmxlcyBleHBlcmltZW50YWwgc21hbGxvY3ggQVBJLiAqLworI3VuZGVmIEpFTUFMTE9DX0VY UEVSSU1FTlRBTF9TTUFMTE9DWF9BUEkKKworLyogSkVNQUxMT0NfUFJPRiBlbmFibGVzIGFsbG9j YXRpb24gcHJvZmlsaW5nLiAqLworI3VuZGVmIEpFTUFMTE9DX1BST0YKKworLyogVXNlIGxpYnVu d2luZCBmb3IgcHJvZmlsZSBiYWNrdHJhY2luZyBpZiBkZWZpbmVkLiAqLworI3VuZGVmIEpFTUFM TE9DX1BST0ZfTElCVU5XSU5ECisKKy8qIFVzZSBsaWJnY2MgZm9yIHByb2ZpbGUgYmFja3RyYWNp bmcgaWYgZGVmaW5lZC4gKi8KKyN1bmRlZiBKRU1BTExPQ19QUk9GX0xJQkdDQworCisvKiBVc2Ug Z2NjIGludHJpbnNpY3MgZm9yIHByb2ZpbGUgYmFja3RyYWNpbmcgaWYgZGVmaW5lZC4gKi8KKyN1 bmRlZiBKRU1BTExPQ19QUk9GX0dDQworCisvKgorICogSkVNQUxMT0NfRFNTIGVuYWJsZXMgdXNl IG9mIHNicmsoMikgdG8gYWxsb2NhdGUgZXh0ZW50cyBmcm9tIHRoZSBkYXRhIHN0b3JhZ2UKKyAq IHNlZ21lbnQgKERTUykuCisgKi8KKyN1bmRlZiBKRU1BTExPQ19EU1MKKworLyogU3VwcG9ydCBt ZW1vcnkgZmlsbGluZyAoanVuay96ZXJvKS4gKi8KKyN1bmRlZiBKRU1BTExPQ19GSUxMCisKKy8q IFN1cHBvcnQgdXRyYWNlKDIpLWJhc2VkIHRyYWNpbmcuICovCisjdW5kZWYgSkVNQUxMT0NfVVRS QUNFCisKKy8qIFN1cHBvcnQgdXRyYWNlKDIpLWJhc2VkIHRyYWNpbmcgKGxhYmVsIGJhc2VkIHNp Z25hdHVyZSkuICovCisjdW5kZWYgSkVNQUxMT0NfVVRSQUNFX0xBQkVMCisKKy8qIFN1cHBvcnQg b3B0aW9uYWwgYWJvcnQoKSBvbiBPT00uICovCisjdW5kZWYgSkVNQUxMT0NfWE1BTExPQworCisv KiBTdXBwb3J0IGxhenkgbG9ja2luZyAoYXZvaWQgbG9ja2luZyB1bmxlc3MgYSBzZWNvbmQgdGhy ZWFkIGlzIGxhdW5jaGVkKS4gKi8KKyN1bmRlZiBKRU1BTExPQ19MQVpZX0xPQ0sKKworLyoKKyAq IE1pbmltdW0gYWxsb2NhdGlvbiBhbGlnbm1lbnQgaXMgMl5MR19RVUFOVFVNIGJ5dGVzIChpZ25v cmluZyB0aW55IHNpemUKKyAqIGNsYXNzZXMpLgorICovCisjdW5kZWYgTEdfUVVBTlRVTQorCisv KiBPbmUgcGFnZSBpcyAyXkxHX1BBR0UgYnl0ZXMuICovCisjdW5kZWYgTEdfUEFHRQorCisvKiBN YXhpbXVtIG51bWJlciBvZiByZWdpb25zIGluIGEgc2xhYi4gKi8KKyN1bmRlZiBDT05GSUdfTEdf U0xBQl9NQVhSRUdTCisKKy8qCisgKiBPbmUgaHVnZSBwYWdlIGlzIDJeTEdfSFVHRVBBR0UgYnl0 ZXMuICBOb3RlIHRoYXQgdGhpcyBpcyBkZWZpbmVkIGV2ZW4gaWYgdGhlCisgKiBzeXN0ZW0gZG9l cyBub3QgZXhwbGljaXRseSBzdXBwb3J0IGh1Z2UgcGFnZXM7IHN5c3RlbSBjYWxscyB0aGF0IHJl cXVpcmUKKyAqIGV4cGxpY2l0IGh1Z2UgcGFnZSBzdXBwb3J0IGFyZSBzZXBhcmF0ZWx5IGNvbmZp Z3VyZWQuCisgKi8KKyN1bmRlZiBMR19IVUdFUEFHRQorCisvKgorICogSWYgZGVmaW5lZCwgYWRq YWNlbnQgdmlydHVhbCBtZW1vcnkgbWFwcGluZ3Mgd2l0aCBpZGVudGljYWwgYXR0cmlidXRlcwor ICogYXV0b21hdGljYWxseSBjb2FsZXNjZSwgYW5kIHRoZXkgZnJhZ21lbnQgd2hlbiBjaGFuZ2Vz IGFyZSBtYWRlIHRvIHN1YnJhbmdlcy4KKyAqIFRoaXMgaXMgdGhlIG5vcm1hbCBvcmRlciBvZiB0 aGluZ3MgZm9yIG1tYXAoKS9tdW5tYXAoKSwgYnV0IG9uIFdpbmRvd3MKKyAqIFZpcnR1YWxBbGxv YygpL1ZpcnR1YWxGcmVlKCkgb3BlcmF0aW9ucyBtdXN0IGJlIHByZWNpc2VseSBtYXRjaGVkLCBp LmUuCisgKiBtYXBwaW5ncyBkbyAqbm90KiBjb2FsZXNjZS9mcmFnbWVudC4KKyAqLworI3VuZGVm IEpFTUFMTE9DX01BUFNfQ09BTEVTQ0UKKworLyoKKyAqIElmIGRlZmluZWQsIHJldGFpbiBtZW1v cnkgZm9yIGxhdGVyIHJldXNlIGJ5IGRlZmF1bHQgcmF0aGVyIHRoYW4gdXNpbmcgZS5nLgorICog bXVubWFwKCkgdG8gdW5tYXAgZnJlZWQgZXh0ZW50cy4gIFRoaXMgaXMgZW5hYmxlZCBvbiA2NC1i aXQgTGludXggYmVjYXVzZQorICogY29tbW9uIHNlcXVlbmNlcyBvZiBtbWFwKCkvbXVubWFwKCkg Y2FsbHMgd2lsbCBjYXVzZSB2aXJ0dWFsIG1lbW9yeSBtYXAKKyAqIGhvbGVzLgorICovCisjdW5k ZWYgSkVNQUxMT0NfUkVUQUlOCisKKy8qIFRMUyBpcyB1c2VkIHRvIG1hcCBhcmVuYXMgYW5kIG1h Z2F6aW5lIGNhY2hlcyB0byB0aHJlYWRzLiAqLworI3VuZGVmIEpFTUFMTE9DX1RMUworCisvKgor ICogVXNlZCB0byBtYXJrIHVucmVhY2hhYmxlIGNvZGUgdG8gcXVpZXQgImVuZCBvZiBub24tdm9p ZCIgY29tcGlsZXIgd2FybmluZ3MuCisgKiBEb24ndCB1c2UgdGhpcyBkaXJlY3RseTsgaW5zdGVh ZCB1c2UgdW5yZWFjaGFibGUoKSBmcm9tIHV0aWwuaAorICovCisjdW5kZWYgSkVNQUxMT0NfSU5U RVJOQUxfVU5SRUFDSEFCTEUKKworLyoKKyAqIGZmcyooKSBmdW5jdGlvbnMgdG8gdXNlIGZvciBi aXRtYXBwaW5nLiAgRG9uJ3QgdXNlIHRoZXNlIGRpcmVjdGx5OyBpbnN0ZWFkLAorICogdXNlIGZm c18qKCkgZnJvbSB1dGlsLmguCisgKi8KKyN1bmRlZiBKRU1BTExPQ19JTlRFUk5BTF9GRlNMTAor I3VuZGVmIEpFTUFMTE9DX0lOVEVSTkFMX0ZGU0wKKyN1bmRlZiBKRU1BTExPQ19JTlRFUk5BTF9G RlMKKworLyoKKyAqIHBvcGNvdW50KigpIGZ1bmN0aW9ucyB0byB1c2UgZm9yIGJpdG1hcHBpbmcu CisgKi8KKyN1bmRlZiBKRU1BTExPQ19JTlRFUk5BTF9QT1BDT1VOVEwKKyN1bmRlZiBKRU1BTExP Q19JTlRFUk5BTF9QT1BDT1VOVAorCisvKgorICogSWYgZGVmaW5lZCwgZXhwbGljaXRseSBhdHRl bXB0IHRvIG1vcmUgdW5pZm9ybWx5IGRpc3RyaWJ1dGUgbGFyZ2UgYWxsb2NhdGlvbgorICogcG9p bnRlciBhbGlnbm1lbnRzIGFjcm9zcyBhbGwgY2FjaGUgaW5kaWNlcy4KKyAqLworI3VuZGVmIEpF TUFMTE9DX0NBQ0hFX09CTElWSU9VUworCisvKgorICogSWYgZGVmaW5lZCwgZW5hYmxlIGxvZ2dp bmcgZmFjaWxpdGllcy4gIFdlIG1ha2UgdGhpcyBhIGNvbmZpZ3VyZSBvcHRpb24gdG8KKyAqIGF2 b2lkIHRha2luZyBleHRyYSBicmFuY2hlcyBldmVyeXdoZXJlLgorICovCisjdW5kZWYgSkVNQUxM T0NfTE9HCisKKy8qCisgKiBJZiBkZWZpbmVkLCB1c2UgcmVhZGxpbmthdCgpIChpbnN0ZWFkIG9m IHJlYWRsaW5rKCkpIHRvIGZvbGxvdworICogL2V0Yy9tYWxsb2NfY29uZi4KKyAqLworI3VuZGVm IEpFTUFMTE9DX1JFQURMSU5LQVQKKworLyoKKyAqIERhcndpbiAoT1MgWCkgdXNlcyB6b25lcyB0 byB3b3JrIGFyb3VuZCBNYWNoLU8gc3ltYm9sIG92ZXJyaWRlIHNob3J0Y29taW5ncy4KKyAqLwor I3VuZGVmIEpFTUFMTE9DX1pPTkUKKworLyoKKyAqIE1ldGhvZHMgZm9yIGRldGVybWluaW5nIHdo ZXRoZXIgdGhlIE9TIG92ZXJjb21taXRzLgorICogSkVNQUxMT0NfUFJPQ19TWVNfVk1fT1ZFUkNP TU1JVF9NRU1PUlk6IExpbnV4J3MKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvcHJvYy9zeXMvdm0ub3ZlcmNvbW1pdF9tZW1vcnkgZmlsZS4KKyAqIEpFTUFMTE9D X1NZU0NUTF9WTV9PVkVSQ09NTUlUOiBGcmVlQlNEJ3Mgdm0ub3ZlcmNvbW1pdCBzeXNjdGwuCisg Ki8KKyN1bmRlZiBKRU1BTExPQ19TWVNDVExfVk1fT1ZFUkNPTU1JVAorI3VuZGVmIEpFTUFMTE9D X1BST0NfU1lTX1ZNX09WRVJDT01NSVRfTUVNT1JZCisKKy8qIERlZmluZWQgaWYgbWFkdmlzZSgy KSBpcyBhdmFpbGFibGUuICovCisjdW5kZWYgSkVNQUxMT0NfSEFWRV9NQURWSVNFCisKKy8qCisg KiBEZWZpbmVkIGlmIHRyYW5zcGFyZW50IGh1Z2UgcGFnZXMgYXJlIHN1cHBvcnRlZCB2aWEgdGhl IE1BRFZfW05PXUhVR0VQQUdFCisgKiBhcmd1bWVudHMgdG8gbWFkdmlzZSgyKS4KKyAqLworI3Vu ZGVmIEpFTUFMTE9DX0hBVkVfTUFEVklTRV9IVUdFCisKKy8qCisgKiBNZXRob2RzIGZvciBwdXJn aW5nIHVudXNlZCBwYWdlcyBkaWZmZXIgYmV0d2VlbiBvcGVyYXRpbmcgc3lzdGVtcy4KKyAqCisg KiAgIG1hZHZpc2UoLi4uLCBNQURWX0ZSRUUpIDogVGhpcyBtYXJrcyBwYWdlcyBhcyBiZWluZyB1 bnVzZWQsIHN1Y2ggdGhhdCB0aGV5CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2ls bCBiZSBkaXNjYXJkZWQgcmF0aGVyIHRoYW4gc3dhcHBlZCBvdXQuCisgKiAgIG1hZHZpc2UoLi4u LCBNQURWX0RPTlRORUVEKSA6IElmIEpFTUFMTE9DX1BVUkdFX01BRFZJU0VfRE9OVE5FRURfWkVS T1MgaXMKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lZCwgdGhpcyBp bW1lZGlhdGVseSBkaXNjYXJkcyBwYWdlcywKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc3VjaCB0aGF0IG5ldyBwYWdlcyB3aWxsIGJlIGRlbWFuZC16ZXJvZWQgaWYKKyAqICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGFkZHJlc3MgcmVnaW9uIGlzIGxhdGVy IHRvdWNoZWQ7CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90aGVyd2lzZSB0 aGlzIGJlaGF2ZXMgc2ltaWxhcmx5IHRvCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIE1BRFZfRlJFRSwgdGhvdWdoIHR5cGljYWxseSB3aXRoIGhpZ2hlcgorICogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzeXN0ZW0gb3ZlcmhlYWQuCisgKi8KKyN1bmRlZiBKRU1B TExPQ19QVVJHRV9NQURWSVNFX0ZSRUUKKyN1bmRlZiBKRU1BTExPQ19QVVJHRV9NQURWSVNFX0RP TlRORUVECisjdW5kZWYgSkVNQUxMT0NfUFVSR0VfTUFEVklTRV9ET05UTkVFRF9aRVJPUworCisv KiBEZWZpbmVkIGlmIG1hZHZpc2UoMikgaXMgYXZhaWxhYmxlIGJ1dCBNQURWX0ZSRUUgaXMgbm90 ICh4ODYgTGludXggb25seSkuICovCisjdW5kZWYgSkVNQUxMT0NfREVGSU5FX01BRFZJU0VfRlJF RQorCisvKgorICogRGVmaW5lZCBpZiBNQURWX0RPW05UXURVTVAgaXMgc3VwcG9ydGVkIGFzIGFu IGFyZ3VtZW50IHRvIG1hZHZpc2UuCisgKi8KKyN1bmRlZiBKRU1BTExPQ19NQURWSVNFX0RPTlRE VU1QCisKKy8qCisgKiBEZWZpbmVkIGlmIE1BRFZfW05PXUNPUkUgaXMgc3VwcG9ydGVkIGFzIGFu IGFyZ3VtZW50IHRvIG1hZHZpc2UuCisgKi8KKyN1bmRlZiBKRU1BTExPQ19NQURWSVNFX05PQ09S RQorCisvKiBEZWZpbmVkIGlmIG1wcm90ZWN0KDIpIGlzIGF2YWlsYWJsZS4gKi8KKyN1bmRlZiBK RU1BTExPQ19IQVZFX01QUk9URUNUCisKKy8qCisgKiBEZWZpbmVkIGlmIHRyYW5zcGFyZW50IGh1 Z2UgcGFnZXMgKFRIUHMpIGFyZSBzdXBwb3J0ZWQgdmlhIHRoZQorICogTUFEVl9bTk9dSFVHRVBB R0UgYXJndW1lbnRzIHRvIG1hZHZpc2UoMiksIGFuZCBUSFAgc3VwcG9ydCBpcyBlbmFibGVkLgor ICovCisjdW5kZWYgSkVNQUxMT0NfVEhQCisKKy8qIERlZmluZWQgaWYgcG9zaXhfbWFkdmlzZSBp cyBhdmFpbGFibGUuICovCisjdW5kZWYgSkVNQUxMT0NfSEFWRV9QT1NJWF9NQURWSVNFCisKKy8q CisgKiBNZXRob2QgZm9yIHB1cmdpbmcgdW51c2VkIHBhZ2VzIHVzaW5nIHBvc2l4X21hZHZpc2Uu CisgKgorICogICBwb3NpeF9tYWR2aXNlKC4uLiwgUE9TSVhfTUFEVl9ET05UTkVFRCkKKyAqLwor I3VuZGVmIEpFTUFMTE9DX1BVUkdFX1BPU0lYX01BRFZJU0VfRE9OVE5FRUQKKyN1bmRlZiBKRU1B TExPQ19QVVJHRV9QT1NJWF9NQURWSVNFX0RPTlRORUVEX1pFUk9TCisKKy8qCisgKiBEZWZpbmVk IGlmIG1lbWNudGwgcGFnZSBhZG1pbiBjYWxsIGlzIHN1cHBvcnRlZAorICovCisjdW5kZWYgSkVN QUxMT0NfSEFWRV9NRU1DTlRMCisKKy8qCisgKiBEZWZpbmVkIGlmIG1hbGxvY19zaXplIGlzIHN1 cHBvcnRlZAorICovCisjdW5kZWYgSkVNQUxMT0NfSEFWRV9NQUxMT0NfU0laRQorCisvKiBEZWZp bmUgaWYgb3BlcmF0aW5nIHN5c3RlbSBoYXMgYWxsb2NhLmggaGVhZGVyLiAqLworI3VuZGVmIEpF TUFMTE9DX0hBU19BTExPQ0FfSAorCisvKiBDOTkgcmVzdHJpY3Qga2V5d29yZCBzdXBwb3J0ZWQu ICovCisjdW5kZWYgSkVNQUxMT0NfSEFTX1JFU1RSSUNUCisKKy8qIEZvciB1c2UgYnkgaGFzaCBj b2RlLiAqLworI3VuZGVmIEpFTUFMTE9DX0JJR19FTkRJQU4KKworLyogc2l6ZW9mKGludCkgPT0g Ml5MR19TSVpFT0ZfSU5ULiAqLworI3VuZGVmIExHX1NJWkVPRl9JTlQKKworLyogc2l6ZW9mKGxv bmcpID09IDJeTEdfU0laRU9GX0xPTkcuICovCisjdW5kZWYgTEdfU0laRU9GX0xPTkcKKworLyog c2l6ZW9mKGxvbmcgbG9uZykgPT0gMl5MR19TSVpFT0ZfTE9OR19MT05HLiAqLworI3VuZGVmIExH X1NJWkVPRl9MT05HX0xPTkcKKworLyogc2l6ZW9mKGludG1heF90KSA9PSAyXkxHX1NJWkVPRl9J TlRNQVhfVC4gKi8KKyN1bmRlZiBMR19TSVpFT0ZfSU5UTUFYX1QKKworLyogZ2xpYmMgbWFsbG9j IGhvb2tzIChfX21hbGxvY19ob29rLCBfX3JlYWxsb2NfaG9vaywgX19mcmVlX2hvb2spLiAqLwor I3VuZGVmIEpFTUFMTE9DX0dMSUJDX01BTExPQ19IT09LCisKKy8qIGdsaWJjIG1lbWFsaWduIGhv b2suICovCisjdW5kZWYgSkVNQUxMT0NfR0xJQkNfTUVNQUxJR05fSE9PSworCisvKiBwdGhyZWFk IHN1cHBvcnQgKi8KKyN1bmRlZiBKRU1BTExPQ19IQVZFX1BUSFJFQUQKKworLyogZGxzeW0oKSBz dXBwb3J0ICovCisjdW5kZWYgSkVNQUxMT0NfSEFWRV9ETFNZTQorCisvKiBBZGFwdGl2ZSBtdXRl eCBzdXBwb3J0IGluIHB0aHJlYWRzLiAqLworI3VuZGVmIEpFTUFMTE9DX0hBVkVfUFRIUkVBRF9N VVRFWF9BREFQVElWRV9OUAorCisvKiBHTlUgc3BlY2lmaWMgc2NoZWRfZ2V0Y3B1IHN1cHBvcnQg Ki8KKyN1bmRlZiBKRU1BTExPQ19IQVZFX1NDSEVEX0dFVENQVQorCisvKiBHTlUgc3BlY2lmaWMg c2NoZWRfc2V0YWZmaW5pdHkgc3VwcG9ydCAqLworI3VuZGVmIEpFTUFMTE9DX0hBVkVfU0NIRURf U0VUQUZGSU5JVFkKKworLyoKKyAqIElmIGRlZmluZWQsIGFsbCB0aGUgZmVhdHVyZXMgbmVjZXNz YXJ5IGZvciBiYWNrZ3JvdW5kIHRocmVhZHMgYXJlIHByZXNlbnQuCisgKi8KKyN1bmRlZiBKRU1B TExPQ19CQUNLR1JPVU5EX1RIUkVBRAorCisvKgorICogSWYgZGVmaW5lZCwgamVtYWxsb2Mgc3lt Ym9scyBhcmUgbm90IGV4cG9ydGVkIChkb2Vzbid0IHdvcmsgd2hlbgorICogSkVNQUxMT0NfUFJF RklYIGlzIG5vdCBkZWZpbmVkKS4KKyAqLworI3VuZGVmIEpFTUFMTE9DX0VYUE9SVAorCisvKiBj b25maWcubWFsbG9jX2NvbmYgb3B0aW9ucyBzdHJpbmcuICovCisjdW5kZWYgSkVNQUxMT0NfQ09O RklHX01BTExPQ19DT05GCisKKy8qIElmIGRlZmluZWQsIGplbWFsbG9jIHRha2VzIHRoZSBtYWxs b2MvZnJlZS9ldGMuIHN5bWJvbCBuYW1lcy4gKi8KKyN1bmRlZiBKRU1BTExPQ19JU19NQUxMT0MK KworLyoKKyAqIERlZmluZWQgaWYgc3RyZXJyb3JfciByZXR1cm5zIGNoYXIgKiBpZiBfR05VX1NP VVJDRSBpcyBkZWZpbmVkLgorICovCisjdW5kZWYgSkVNQUxMT0NfU1RSRVJST1JfUl9SRVRVUk5T X0NIQVJfV0lUSF9HTlVfU09VUkNFCisKKy8qIFBlcmZvcm1zIGFkZGl0aW9uYWwgc2FmZXR5IGNo ZWNrcyB3aGVuIGRlZmluZWQuICovCisjdW5kZWYgSkVNQUxMT0NfT1BUX1NBRkVUWV9DSEVDS1MK KworLyogSXMgQysrIHN1cHBvcnQgYmVpbmcgYnVpbHQ/ICovCisjdW5kZWYgSkVNQUxMT0NfRU5B QkxFX0NYWAorCisvKiBQZXJmb3JtcyBhZGRpdGlvbmFsIHNpemUgY2hlY2tzIHdoZW4gZGVmaW5l ZC4gKi8KKyN1bmRlZiBKRU1BTExPQ19PUFRfU0laRV9DSEVDS1MKKworLyogQWxsb3dzIHNhbXBs ZWQganVuayBhbmQgc3Rhc2ggZm9yIGNoZWNraW5nIHVzZS1hZnRlci1mcmVlIHdoZW4gZGVmaW5l ZC4gKi8KKyN1bmRlZiBKRU1BTExPQ19VQUZfREVURUNUSU9OCisKKy8qIERhcndpbiBWTV9NQUtF X1RBRyBzdXBwb3J0ICovCisjdW5kZWYgSkVNQUxMT0NfSEFWRV9WTV9NQUtFX1RBRworCisvKiBJ ZiBkZWZpbmVkLCByZWFsbG9jKHB0ciwgMCkgZGVmYXVsdHMgdG8gImZyZWUiIGluc3RlYWQgb2Yg ImFsbG9jIi4gKi8KKyN1bmRlZiBKRU1BTExPQ19aRVJPX1JFQUxMT0NfREVGQVVMVF9GUkVFCisK KyNlbmRpZiAvKiBKRU1BTExPQ19JTlRFUk5BTF9ERUZTX0hfICovCgpkaWZmIC0tZ2l0IGEvMzg5 LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRl cm5hbC9qZW1hbGxvY19pbnRlcm5hbF9leHRlcm5zLmggYi8zODktZHMtYmFzZS0zLjMuMC1idWls ZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL2plbWFsbG9jX2ludGVy bmFsX2V4dGVybnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzgzNGM2 Ci0tLSAvZGV2L251bGwKKysrIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4z LjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9qZW1hbGxvY19pbnRlcm5hbF9leHRlcm5zLmgK QEAgLTAsMCArMSw3NSBAQAorI2lmbmRlZiBKRU1BTExPQ19JTlRFUk5BTF9FWFRFUk5TX0gKKyNk ZWZpbmUgSkVNQUxMT0NfSU5URVJOQUxfRVhURVJOU19ICisKKyNpbmNsdWRlICJqZW1hbGxvYy9p bnRlcm5hbC9hdG9taWMuaCIKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9ocGFfb3B0cy5o IgorI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL3NlY19vcHRzLmgiCisjaW5jbHVkZSAiamVt YWxsb2MvaW50ZXJuYWwvdHNkX3R5cGVzLmgiCisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwv bnN0aW1lLmgiCisKKy8qIFRTRCBjaGVja3MgdGhpcyB0byBzZXQgdGhyZWFkIGxvY2FsIHNsb3cg c3RhdGUgYWNjb3JkaW5nbHkuICovCitleHRlcm4gYm9vbCBtYWxsb2Nfc2xvdzsKKworLyogUnVu LXRpbWUgb3B0aW9ucy4gKi8KK2V4dGVybiBib29sIG9wdF9hYm9ydDsKK2V4dGVybiBib29sIG9w dF9hYm9ydF9jb25mOworZXh0ZXJuIGJvb2wgb3B0X3RydXN0X21hZHZpc2U7CitleHRlcm4gYm9v bCBvcHRfY29uZmlybV9jb25mOworZXh0ZXJuIGJvb2wgb3B0X2hwYTsKK2V4dGVybiBocGFfc2hh cmRfb3B0c190IG9wdF9ocGFfb3B0czsKK2V4dGVybiBzZWNfb3B0c190IG9wdF9ocGFfc2VjX29w dHM7CisKK2V4dGVybiBjb25zdCBjaGFyICpvcHRfanVuazsKK2V4dGVybiBib29sIG9wdF9qdW5r X2FsbG9jOworZXh0ZXJuIGJvb2wgb3B0X2p1bmtfZnJlZTsKK2V4dGVybiB2b2lkICgqanVua19m cmVlX2NhbGxiYWNrKSh2b2lkICpwdHIsIHNpemVfdCBzaXplKTsKK2V4dGVybiB2b2lkICgqanVu a19hbGxvY19jYWxsYmFjaykodm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSk7CitleHRlcm4gYm9vbCBv cHRfdXRyYWNlOworZXh0ZXJuIGJvb2wgb3B0X3htYWxsb2M7CitleHRlcm4gYm9vbCBvcHRfZXhw ZXJpbWVudGFsX2luZmFsbGlibGVfbmV3OworZXh0ZXJuIGJvb2wgb3B0X3plcm87CitleHRlcm4g dW5zaWduZWQgb3B0X25hcmVuYXM7CitleHRlcm4gemVyb19yZWFsbG9jX2FjdGlvbl90IG9wdF96 ZXJvX3JlYWxsb2NfYWN0aW9uOworZXh0ZXJuIG1hbGxvY19pbml0X3QgbWFsbG9jX2luaXRfc3Rh dGU7CitleHRlcm4gY29uc3QgY2hhciAqemVyb19yZWFsbG9jX21vZGVfbmFtZXNbXTsKK2V4dGVy biBhdG9taWNfenVfdCB6ZXJvX3JlYWxsb2NfY291bnQ7CitleHRlcm4gYm9vbCBvcHRfY2FjaGVf b2JsaXZpb3VzOworCisvKiBFc2NhcGUgZnJlZS1mYXN0cGF0aCB3aGVuIHB0ciAmIG1hc2sgPT0g MCAoZm9yIHNhbml0aXphdGlvbiBwdXJwb3NlKS4gKi8KK2V4dGVybiB1aW50cHRyX3Qgc2FuX2Nh Y2hlX2Jpbl9ub25mYXN0X21hc2s7CisKKy8qIE51bWJlciBvZiBDUFVzLiAqLworZXh0ZXJuIHVu c2lnbmVkIG5jcHVzOworCisvKiBOdW1iZXIgb2YgYXJlbmFzIHVzZWQgZm9yIGF1dG9tYXRpYyBt dWx0aXBsZXhpbmcgb2YgdGhyZWFkcyBhbmQgYXJlbmFzLiAqLworZXh0ZXJuIHVuc2lnbmVkIG5h cmVuYXNfYXV0bzsKKworLyogQmFzZSBpbmRleCBmb3IgbWFudWFsIGFyZW5hcy4gKi8KK2V4dGVy biB1bnNpZ25lZCBtYW51YWxfYXJlbmFfYmFzZTsKKworLyoKKyAqIEFyZW5hcyB0aGF0IGFyZSB1 c2VkIHRvIHNlcnZpY2UgZXh0ZXJuYWwgcmVxdWVzdHMuICBOb3QgYWxsIGVsZW1lbnRzIG9mIHRo ZQorICogYXJlbmFzIGFycmF5IGFyZSBuZWNlc3NhcmlseSB1c2VkOyBhcmVuYXMgYXJlIGNyZWF0 ZWQgbGF6aWx5IGFzIG5lZWRlZC4KKyAqLworZXh0ZXJuIGF0b21pY19wX3QgYXJlbmFzW107CisK K3ZvaWQgKmEwbWFsbG9jKHNpemVfdCBzaXplKTsKK3ZvaWQgYTBkYWxsb2Modm9pZCAqcHRyKTsK K3ZvaWQgKmJvb3RzdHJhcF9tYWxsb2Moc2l6ZV90IHNpemUpOwordm9pZCAqYm9vdHN0cmFwX2Nh bGxvYyhzaXplX3QgbnVtLCBzaXplX3Qgc2l6ZSk7Cit2b2lkIGJvb3RzdHJhcF9mcmVlKHZvaWQg KnB0cik7Cit2b2lkIGFyZW5hX3NldCh1bnNpZ25lZCBpbmQsIGFyZW5hX3QgKmFyZW5hKTsKK3Vu c2lnbmVkIG5hcmVuYXNfdG90YWxfZ2V0KHZvaWQpOworYXJlbmFfdCAqYXJlbmFfaW5pdCh0c2Ru X3QgKnRzZG4sIHVuc2lnbmVkIGluZCwgY29uc3QgYXJlbmFfY29uZmlnX3QgKmNvbmZpZyk7Cith cmVuYV90ICphcmVuYV9jaG9vc2VfaGFyZCh0c2RfdCAqdHNkLCBib29sIGludGVybmFsKTsKK3Zv aWQgYXJlbmFfbWlncmF0ZSh0c2RfdCAqdHNkLCBhcmVuYV90ICpvbGRhcmVuYSwgYXJlbmFfdCAq bmV3YXJlbmEpOwordm9pZCBpYXJlbmFfY2xlYW51cCh0c2RfdCAqdHNkKTsKK3ZvaWQgYXJlbmFf Y2xlYW51cCh0c2RfdCAqdHNkKTsKK3NpemVfdCBiYXRjaF9hbGxvYyh2b2lkICoqcHRycywgc2l6 ZV90IG51bSwgc2l6ZV90IHNpemUsIGludCBmbGFncyk7Cit2b2lkIGplbWFsbG9jX3ByZWZvcmso dm9pZCk7Cit2b2lkIGplbWFsbG9jX3Bvc3Rmb3JrX3BhcmVudCh2b2lkKTsKK3ZvaWQgamVtYWxs b2NfcG9zdGZvcmtfY2hpbGQodm9pZCk7Cit2b2lkIGplX3NkYWxsb2N4X25vZmxhZ3Modm9pZCAq cHRyLCBzaXplX3Qgc2l6ZSk7Cit2b2lkICptYWxsb2NfZGVmYXVsdChzaXplX3Qgc2l6ZSk7CisK KyNlbmRpZiAvKiBKRU1BTExPQ19JTlRFUk5BTF9FWFRFUk5TX0ggKi8KCmRpZmYgLS1naXQgYS8z ODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2lu dGVybmFsL2plbWFsbG9jX2ludGVybmFsX2luY2x1ZGVzLmggYi8zODktZHMtYmFzZS0zLjMuMC1i dWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL2plbWFsbG9jX2lu dGVybmFsX2luY2x1ZGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzUx YzExMgotLS0gL2Rldi9udWxsCisrKyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9j LTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvamVtYWxsb2NfaW50ZXJuYWxfaW5jbHVk ZXMuaApAQCAtMCwwICsxLDg0IEBACisjaWZuZGVmIEpFTUFMTE9DX0lOVEVSTkFMX0lOQ0xVREVT X0gKKyNkZWZpbmUgSkVNQUxMT0NfSU5URVJOQUxfSU5DTFVERVNfSAorCisvKgorICogamVtYWxs b2MgY2FuIGNvbmNlcHR1YWxseSBiZSBicm9rZW4gaW50byBjb21wb25lbnRzIChhcmVuYSwgdGNh Y2hlLCBldGMuKSwKKyAqIGJ1dCB0aGVyZSBhcmUgY2lyY3VsYXIgZGVwZW5kZW5jaWVzIHRoYXQg Y2Fubm90IGJlIGJyb2tlbiB3aXRob3V0CisgKiBzdWJzdGFudGlhbCBwZXJmb3JtYW5jZSBkZWdy YWRhdGlvbi4KKyAqCisgKiBIaXN0b3JpY2FsbHksIHdlIGRlYWx0IHdpdGggdGhpcyBieSBlYWNo IGhlYWRlciBpbnRvIGZvdXIgc2VjdGlvbnMgKHR5cGVzLAorICogc3RydWN0cywgZXh0ZXJucywg YW5kIGlubGluZXMpLCBhbmQgaW5jbHVkZWQgZWFjaCBoZWFkZXIgZmlsZSBtdWx0aXBsZSB0aW1l cworICogaW4gdGhpcyBmaWxlLCBwaWNraW5nIG91dCB0aGUgcG9ydGlvbiB3ZSB3YW50IG9uIGVh Y2ggcGFzcyB1c2luZyB0aGUKKyAqIGZvbGxvd2luZyAjZGVmaW5lczoKKyAqICAgSkVNQUxMT0Nf SF9UWVBFUyAgIDogUHJlcHJvY2Vzc29yLWRlZmluZWQgY29uc3RhbnRzIGFuZCBwc2V1ZG8tb3Bh cXVlIGRhdGEKKyAqICAgICAgICAgICAgICAgICAgICAgICAgdHlwZXMuCisgKiAgIEpFTUFMTE9D X0hfU1RSVUNUUyA6IERhdGEgc3RydWN0dXJlcy4KKyAqICAgSkVNQUxMT0NfSF9FWFRFUk5TIDog RXh0ZXJuIGRhdGEgZGVjbGFyYXRpb25zIGFuZCBmdW5jdGlvbiBwcm90b3R5cGVzLgorICogICBK RU1BTExPQ19IX0lOTElORVMgOiBJbmxpbmUgZnVuY3Rpb25zLgorICoKKyAqIFdlJ3JlIG1vdmlu ZyB0b3dhcmQgYSB3b3JsZCBpbiB3aGljaCB0aGUgZGVwZW5kZW5jaWVzIGFyZSBleHBsaWNpdDsg ZWFjaCBmaWxlCisgKiB3aWxsICNpbmNsdWRlIHRoZSBoZWFkZXJzIGl0IGRlcGVuZHMgb24gKHJh dGhlciB0aGFuIHJlbHlpbmcgb24gdGhlbSBiZWluZworICogaW1wbGljaXRseSBhdmFpbGFibGUg dmlhIHRoaXMgZmlsZSBpbmNsdWRpbmcgZXZlcnkgaGVhZGVyIGZpbGUgaW4gdGhlCisgKiBwcm9q ZWN0KS4KKyAqCisgKiBXZSdyZSBub3cgaW4gYW4gaW50ZXJtZWRpYXRlIHN0YXRlOiB3ZSd2ZSBi cm9rZW4gdXAgdGhlIGhlYWRlciBmaWxlcyB0byBhdm9pZAorICogaGF2aW5nIHRvIGluY2x1ZGUg ZWFjaCBvbmUgbXVsdGlwbGUgdGltZXMsIGJ1dCBoYXZlIG5vdCB5ZXQgbW92ZWQgdGhlCisgKiBk ZXBlbmRlbmN5IGluZm9ybWF0aW9uIGludG8gdGhlIGhlYWRlciBmaWxlcyAoaS5lLiB3ZSBzdGls bCByZWx5IG9uIHRoZQorICogb3JkZXJpbmcgaW4gdGhpcyBmaWxlIHRvIGVuc3VyZSBhbGwgYSBo ZWFkZXIncyBkZXBlbmRlbmNpZXMgYXJlIGF2YWlsYWJsZSBpbgorICogaXRzIHRyYW5zbGF0aW9u IHVuaXQpLiAgRWFjaCBjb21wb25lbnQgaXMgbm93IGJyb2tlbiB1cCBpbnRvIG11bHRpcGxlIGhl YWRlcgorICogZmlsZXMsIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHNlY3Rpb25zIGFib3ZlIChlLmcu IGluc3RlYWQgb2YgImZvby5oIiwgd2Ugbm93CisgKiBoYXZlICJmb29fdHlwZXMuaCIsICJmb29f c3RydWN0cy5oIiwgImZvb19leHRlcm5zLmgiLCAiZm9vX2lubGluZXMuaCIpLgorICoKKyAqIFRo b3NlIGZpbGVzIHdoaWNoIGhhdmUgYmVlbiBjb252ZXJ0ZWQgdG8gZXhwbGljaXRseSBpbmNsdWRl IHRoZWlyCisgKiBpbnRlci1jb21wb25lbnQgZGVwZW5kZW5jaWVzIGFyZSBub3cgaW4gdGhlIGlu aXRpYWwgSEVSTUVUSUMgSEVBREVSUworICogc2VjdGlvbi4gIEFsbCBoZWFkZXJzIG1heSBzdGls bCByZWx5IG9uIGplbWFsbG9jX3ByZWFtYmxlLmggKHdoaWNoLCBieSBmaWF0LAorICogbXVzdCBi ZSBpbmNsdWRlZCBmaXJzdCBpbiBldmVyeSB0cmFuc2xhdGlvbiB1bml0KSBmb3Igc3lzdGVtIGhl YWRlcnMgYW5kCisgKiBnbG9iYWwgamVtYWxsb2MgZGVmaW5pdGlvbnMsIGhvd2V2ZXIuCisgKi8K KworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIFRZUEVTICovCisvKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqLworCisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvYXJlbmFfdHlwZXMuaCIKKyNp bmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC90Y2FjaGVfdHlwZXMuaCIKKyNpbmNsdWRlICJqZW1h bGxvYy9pbnRlcm5hbC9wcm9mX3R5cGVzLmgiCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisv KiBTVFJVQ1RTICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAiamVtYWxs b2MvaW50ZXJuYWwvcHJvZl9zdHJ1Y3RzLmgiCisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwv YXJlbmFfc3RydWN0cy5oIgorI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL3RjYWNoZV9zdHJ1 Y3RzLmgiCisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvYmFja2dyb3VuZF90aHJlYWRfc3Ry dWN0cy5oIgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogRVhURVJOUyAqLworLyoqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2plbWFsbG9j X2ludGVybmFsX2V4dGVybnMuaCIKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9hcmVuYV9l eHRlcm5zLmgiCisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvbGFyZ2VfZXh0ZXJucy5oIgor I2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL3RjYWNoZV9leHRlcm5zLmgiCisjaW5jbHVkZSAi amVtYWxsb2MvaW50ZXJuYWwvcHJvZl9leHRlcm5zLmgiCisjaW5jbHVkZSAiamVtYWxsb2MvaW50 ZXJuYWwvYmFja2dyb3VuZF90aHJlYWRfZXh0ZXJucy5oIgorCisvKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqLworLyogSU5MSU5FUyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUg ImplbWFsbG9jL2ludGVybmFsL2plbWFsbG9jX2ludGVybmFsX2lubGluZXNfYS5oIgorLyoKKyAq IEluY2x1ZGUgcG9ydGlvbnMgb2YgYXJlbmEgY29kZSBpbnRlcmxlYXZlZCB3aXRoIHRjYWNoZSBj b2RlIGluIG9yZGVyIHRvCisgKiByZXNvbHZlIGNpcmN1bGFyIGRlcGVuZGVuY2llcy4KKyAqLwor I2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2FyZW5hX2lubGluZXNfYS5oIgorI2luY2x1ZGUg ImplbWFsbG9jL2ludGVybmFsL2plbWFsbG9jX2ludGVybmFsX2lubGluZXNfYi5oIgorI2luY2x1 ZGUgImplbWFsbG9jL2ludGVybmFsL3RjYWNoZV9pbmxpbmVzLmgiCisjaW5jbHVkZSAiamVtYWxs b2MvaW50ZXJuYWwvYXJlbmFfaW5saW5lc19iLmgiCisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJu YWwvamVtYWxsb2NfaW50ZXJuYWxfaW5saW5lc19jLmgiCisjaW5jbHVkZSAiamVtYWxsb2MvaW50 ZXJuYWwvcHJvZl9pbmxpbmVzLmgiCisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvYmFja2dy b3VuZF90aHJlYWRfaW5saW5lcy5oIgorCisjZW5kaWYgLyogSkVNQUxMT0NfSU5URVJOQUxfSU5D TFVERVNfSCAqLwoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9j LTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvamVtYWxsb2NfaW50ZXJuYWxfaW5saW5l c19hLmggYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2pl bWFsbG9jL2ludGVybmFsL2plbWFsbG9jX2ludGVybmFsX2lubGluZXNfYS5oCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllMjdjYzMKLS0tIC9kZXYvbnVsbAorKysgYi8zODkt ZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVy bmFsL2plbWFsbG9jX2ludGVybmFsX2lubGluZXNfYS5oCkBAIC0wLDAgKzEsMTIyIEBACisjaWZu ZGVmIEpFTUFMTE9DX0lOVEVSTkFMX0lOTElORVNfQV9ICisjZGVmaW5lIEpFTUFMTE9DX0lOVEVS TkFMX0lOTElORVNfQV9ICisKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9hdG9taWMuaCIK KyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9iaXRfdXRpbC5oIgorI2luY2x1ZGUgImplbWFs bG9jL2ludGVybmFsL2plbWFsbG9jX2ludGVybmFsX3R5cGVzLmgiCisjaW5jbHVkZSAiamVtYWxs b2MvaW50ZXJuYWwvc2MuaCIKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC90aWNrZXIuaCIK KworSkVNQUxMT0NfQUxXQVlTX0lOTElORSBtYWxsb2NfY3B1aWRfdAorbWFsbG9jX2dldGNwdSh2 b2lkKSB7CisJYXNzZXJ0KGhhdmVfcGVyY3B1X2FyZW5hKTsKKyNpZiBkZWZpbmVkKF9XSU4zMikK KwlyZXR1cm4gR2V0Q3VycmVudFByb2Nlc3Nvck51bWJlcigpOworI2VsaWYgZGVmaW5lZChKRU1B TExPQ19IQVZFX1NDSEVEX0dFVENQVSkKKwlyZXR1cm4gKG1hbGxvY19jcHVpZF90KXNjaGVkX2dl dGNwdSgpOworI2Vsc2UKKwlub3RfcmVhY2hlZCgpOworCXJldHVybiAtMTsKKyNlbmRpZgorfQor CisvKiBSZXR1cm4gdGhlIGNob3NlbiBhcmVuYSBpbmRleCBiYXNlZCBvbiBjdXJyZW50IGNwdS4g Ki8KK0pFTUFMTE9DX0FMV0FZU19JTkxJTkUgdW5zaWduZWQKK3BlcmNwdV9hcmVuYV9jaG9vc2Uo dm9pZCkgeworCWFzc2VydChoYXZlX3BlcmNwdV9hcmVuYSAmJiBQRVJDUFVfQVJFTkFfRU5BQkxF RChvcHRfcGVyY3B1X2FyZW5hKSk7CisKKwltYWxsb2NfY3B1aWRfdCBjcHVpZCA9IG1hbGxvY19n ZXRjcHUoKTsKKwlhc3NlcnQoY3B1aWQgPj0gMCk7CisKKwl1bnNpZ25lZCBhcmVuYV9pbmQ7CisJ aWYgKChvcHRfcGVyY3B1X2FyZW5hID09IHBlcmNwdV9hcmVuYSkgfHwgKCh1bnNpZ25lZCljcHVp ZCA8IG5jcHVzIC8KKwkgICAgMikpIHsKKwkJYXJlbmFfaW5kID0gY3B1aWQ7CisJfSBlbHNlIHsK KwkJYXNzZXJ0KG9wdF9wZXJjcHVfYXJlbmEgPT0gcGVyX3BoeWNwdV9hcmVuYSk7CisJCS8qIEh5 cGVyIHRocmVhZHMgb24gdGhlIHNhbWUgcGh5c2ljYWwgQ1BVIHNoYXJlIGFyZW5hLiAqLworCQlh cmVuYV9pbmQgPSBjcHVpZCAtIG5jcHVzIC8gMjsKKwl9CisKKwlyZXR1cm4gYXJlbmFfaW5kOwor fQorCisvKiBSZXR1cm4gdGhlIGxpbWl0IG9mIHBlcmNwdSBhdXRvIGFyZW5hIHJhbmdlLCBpLmUu IGFyZW5hc1swLi4uaW5kX2xpbWl0KS4gKi8KK0pFTUFMTE9DX0FMV0FZU19JTkxJTkUgdW5zaWdu ZWQKK3BlcmNwdV9hcmVuYV9pbmRfbGltaXQocGVyY3B1X2FyZW5hX21vZGVfdCBtb2RlKSB7CisJ YXNzZXJ0KGhhdmVfcGVyY3B1X2FyZW5hICYmIFBFUkNQVV9BUkVOQV9FTkFCTEVEKG1vZGUpKTsK KwlpZiAobW9kZSA9PSBwZXJfcGh5Y3B1X2FyZW5hICYmIG5jcHVzID4gMSkgeworCQlpZiAobmNw dXMgJSAyKSB7CisJCQkvKiBUaGlzIGxpa2VseSBtZWFucyBhIG1pc2NvbmZpZy4gKi8KKwkJCXJl dHVybiBuY3B1cyAvIDIgKyAxOworCQl9CisJCXJldHVybiBuY3B1cyAvIDI7CisJfSBlbHNlIHsK KwkJcmV0dXJuIG5jcHVzOworCX0KK30KKworc3RhdGljIGlubGluZSBhcmVuYV90ICoKK2FyZW5h X2dldCh0c2RuX3QgKnRzZG4sIHVuc2lnbmVkIGluZCwgYm9vbCBpbml0X2lmX21pc3NpbmcpIHsK KwlhcmVuYV90ICpyZXQ7CisKKwlhc3NlcnQoaW5kIDwgTUFMTE9DWF9BUkVOQV9MSU1JVCk7CisK KwlyZXQgPSAoYXJlbmFfdCAqKWF0b21pY19sb2FkX3AoJmFyZW5hc1tpbmRdLCBBVE9NSUNfQUNR VUlSRSk7CisJaWYgKHVubGlrZWx5KHJldCA9PSBOVUxMKSkgeworCQlpZiAoaW5pdF9pZl9taXNz aW5nKSB7CisJCQlyZXQgPSBhcmVuYV9pbml0KHRzZG4sIGluZCwgJmFyZW5hX2NvbmZpZ19kZWZh dWx0KTsKKwkJfQorCX0KKwlyZXR1cm4gcmV0OworfQorCitKRU1BTExPQ19BTFdBWVNfSU5MSU5F IGJvb2wKK3RjYWNoZV9hdmFpbGFibGUodHNkX3QgKnRzZCkgeworCS8qCisJICogVGhyZWFkIHNw ZWNpZmljIGF1dG8gdGNhY2hlIG1pZ2h0IGJlIHVuYXZhaWxhYmxlIGlmOiAxKSBkdXJpbmcgdGNh Y2hlCisJICogaW5pdGlhbGl6YXRpb24sIG9yIDIpIGRpc2FibGVkIHRocm91Z2ggdGhyZWFkLnRj YWNoZS5lbmFibGVkIG1hbGxjdGwKKwkgKiBvciBjb25maWcgb3B0aW9ucy4gIFRoaXMgY2hlY2sg Y292ZXJzIGFsbCBjYXNlcy4KKwkgKi8KKwlpZiAobGlrZWx5KHRzZF90Y2FjaGVfZW5hYmxlZF9n ZXQodHNkKSkpIHsKKwkJLyogQXNzb2NpYXRlZCBhcmVuYSA9PSBOVUxMIGltcGxpZXMgdGNhY2hl IGluaXQgaW4gcHJvZ3Jlc3MuICovCisJCWlmIChjb25maWdfZGVidWcgJiYgdHNkX3RjYWNoZV9z bG93cF9nZXQodHNkKS0+YXJlbmEgIT0gTlVMTCkgeworCQkJdGNhY2hlX2Fzc2VydF9pbml0aWFs aXplZCh0c2RfdGNhY2hlcF9nZXQodHNkKSk7CisJCX0KKwkJcmV0dXJuIHRydWU7CisJfQorCisJ cmV0dXJuIGZhbHNlOworfQorCitKRU1BTExPQ19BTFdBWVNfSU5MSU5FIHRjYWNoZV90ICoKK3Rj YWNoZV9nZXQodHNkX3QgKnRzZCkgeworCWlmICghdGNhY2hlX2F2YWlsYWJsZSh0c2QpKSB7CisJ CXJldHVybiBOVUxMOworCX0KKworCXJldHVybiB0c2RfdGNhY2hlcF9nZXQodHNkKTsKK30KKwor SkVNQUxMT0NfQUxXQVlTX0lOTElORSB0Y2FjaGVfc2xvd190ICoKK3RjYWNoZV9zbG93X2dldCh0 c2RfdCAqdHNkKSB7CisJaWYgKCF0Y2FjaGVfYXZhaWxhYmxlKHRzZCkpIHsKKwkJcmV0dXJuIE5V TEw7CisJfQorCisJcmV0dXJuIHRzZF90Y2FjaGVfc2xvd3BfZ2V0KHRzZCk7Cit9CisKK3N0YXRp YyBpbmxpbmUgdm9pZAorcHJlX3JlZW50cmFuY3kodHNkX3QgKnRzZCwgYXJlbmFfdCAqYXJlbmEp IHsKKwkvKiBhcmVuYSBpcyB0aGUgY3VycmVudCBjb250ZXh0LiAgUmVlbnRyeSBmcm9tIGEwIGlz IG5vdCBhbGxvd2VkLiAqLworCWFzc2VydChhcmVuYSAhPSBhcmVuYV9nZXQodHNkX3RzZG4odHNk KSwgMCwgZmFsc2UpKTsKKwl0c2RfcHJlX3JlZW50cmFuY3lfcmF3KHRzZCk7Cit9CisKK3N0YXRp YyBpbmxpbmUgdm9pZAorcG9zdF9yZWVudHJhbmN5KHRzZF90ICp0c2QpIHsKKwl0c2RfcG9zdF9y ZWVudHJhbmN5X3Jhdyh0c2QpOworfQorCisjZW5kaWYgLyogSkVNQUxMT0NfSU5URVJOQUxfSU5M SU5FU19BX0ggKi8KCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxv Yy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL2plbWFsbG9jX2ludGVybmFsX2lubGlu ZXNfYi5oIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9q ZW1hbGxvYy9pbnRlcm5hbC9qZW1hbGxvY19pbnRlcm5hbF9pbmxpbmVzX2IuaApuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTJmOGEwCi0tLSAvZGV2L251bGwKKysrIGIvMzg5 LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRl cm5hbC9qZW1hbGxvY19pbnRlcm5hbF9pbmxpbmVzX2IuaApAQCAtMCwwICsxLDEwMyBAQAorI2lm bmRlZiBKRU1BTExPQ19JTlRFUk5BTF9JTkxJTkVTX0JfSAorI2RlZmluZSBKRU1BTExPQ19JTlRF Uk5BTF9JTkxJTkVTX0JfSAorCisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvZXh0ZW50Lmgi CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorcGVyY3B1X2FyZW5hX3VwZGF0ZSh0c2RfdCAqdHNkLCB1 bnNpZ25lZCBjcHUpIHsKKwlhc3NlcnQoaGF2ZV9wZXJjcHVfYXJlbmEpOworCWFyZW5hX3QgKm9s ZGFyZW5hID0gdHNkX2FyZW5hX2dldCh0c2QpOworCWFzc2VydChvbGRhcmVuYSAhPSBOVUxMKTsK Kwl1bnNpZ25lZCBvbGRpbmQgPSBhcmVuYV9pbmRfZ2V0KG9sZGFyZW5hKTsKKworCWlmIChvbGRp bmQgIT0gY3B1KSB7CisJCXVuc2lnbmVkIG5ld2luZCA9IGNwdTsKKwkJYXJlbmFfdCAqbmV3YXJl bmEgPSBhcmVuYV9nZXQodHNkX3RzZG4odHNkKSwgbmV3aW5kLCB0cnVlKTsKKwkJYXNzZXJ0KG5l d2FyZW5hICE9IE5VTEwpOworCisJCS8qIFNldCBuZXcgYXJlbmEvdGNhY2hlIGFzc29jaWF0aW9u cy4gKi8KKwkJYXJlbmFfbWlncmF0ZSh0c2QsIG9sZGFyZW5hLCBuZXdhcmVuYSk7CisJCXRjYWNo ZV90ICp0Y2FjaGUgPSB0Y2FjaGVfZ2V0KHRzZCk7CisJCWlmICh0Y2FjaGUgIT0gTlVMTCkgewor CQkJdGNhY2hlX3Nsb3dfdCAqdGNhY2hlX3Nsb3cgPSB0c2RfdGNhY2hlX3Nsb3dwX2dldCh0c2Qp OworCQkJdGNhY2hlX2FyZW5hX3JlYXNzb2NpYXRlKHRzZF90c2RuKHRzZCksIHRjYWNoZV9zbG93 LAorCQkJICAgIHRjYWNoZSwgbmV3YXJlbmEpOworCQl9CisJfQorfQorCisKKy8qIENob29zZSBh biBhcmVuYSBiYXNlZCBvbiBhIHBlci10aHJlYWQgdmFsdWUuICovCitzdGF0aWMgaW5saW5lIGFy ZW5hX3QgKgorYXJlbmFfY2hvb3NlX2ltcGwodHNkX3QgKnRzZCwgYXJlbmFfdCAqYXJlbmEsIGJv b2wgaW50ZXJuYWwpIHsKKwlhcmVuYV90ICpyZXQ7CisKKwlpZiAoYXJlbmEgIT0gTlVMTCkgewor CQlyZXR1cm4gYXJlbmE7CisJfQorCisJLyogRHVyaW5nIHJlZW50cmFuY3ksIGFyZW5hIDAgaXMg dGhlIHNhZmVzdCBiZXQuICovCisJaWYgKHVubGlrZWx5KHRzZF9yZWVudHJhbmN5X2xldmVsX2dl dCh0c2QpID4gMCkpIHsKKwkJcmV0dXJuIGFyZW5hX2dldCh0c2RfdHNkbih0c2QpLCAwLCB0cnVl KTsKKwl9CisKKwlyZXQgPSBpbnRlcm5hbCA/IHRzZF9pYXJlbmFfZ2V0KHRzZCkgOiB0c2RfYXJl bmFfZ2V0KHRzZCk7CisJaWYgKHVubGlrZWx5KHJldCA9PSBOVUxMKSkgeworCQlyZXQgPSBhcmVu YV9jaG9vc2VfaGFyZCh0c2QsIGludGVybmFsKTsKKwkJYXNzZXJ0KHJldCk7CisJCWlmICh0Y2Fj aGVfYXZhaWxhYmxlKHRzZCkpIHsKKwkJCXRjYWNoZV9zbG93X3QgKnRjYWNoZV9zbG93ID0gdHNk X3RjYWNoZV9zbG93cF9nZXQodHNkKTsKKwkJCXRjYWNoZV90ICp0Y2FjaGUgPSB0c2RfdGNhY2hl cF9nZXQodHNkKTsKKwkJCWlmICh0Y2FjaGVfc2xvdy0+YXJlbmEgIT0gTlVMTCkgeworCQkJCS8q IFNlZSBjb21tZW50cyBpbiB0c2RfdGNhY2hlX2RhdGFfaW5pdCgpLiovCisJCQkJYXNzZXJ0KHRj YWNoZV9zbG93LT5hcmVuYSA9PQorCQkJCSAgICBhcmVuYV9nZXQodHNkX3RzZG4odHNkKSwgMCwg ZmFsc2UpKTsKKwkJCQlpZiAodGNhY2hlX3Nsb3ctPmFyZW5hICE9IHJldCkgeworCQkJCQl0Y2Fj aGVfYXJlbmFfcmVhc3NvY2lhdGUodHNkX3RzZG4odHNkKSwKKwkJCQkJICAgIHRjYWNoZV9zbG93 LCB0Y2FjaGUsIHJldCk7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQl0Y2FjaGVfYXJlbmFfYXNz b2NpYXRlKHRzZF90c2RuKHRzZCksCisJCQkJICAgIHRjYWNoZV9zbG93LCB0Y2FjaGUsIHJldCk7 CisJCQl9CisJCX0KKwl9CisKKwkvKgorCSAqIE5vdGUgdGhhdCBmb3IgcGVyY3B1IGFyZW5hLCBp ZiB0aGUgY3VycmVudCBhcmVuYSBpcyBvdXRzaWRlIG9mIHRoZQorCSAqIGF1dG8gcGVyY3B1IGFy ZW5hIHJhbmdlLCAoaS5lLiB0aHJlYWQgaXMgYXNzaWduZWQgdG8gYSBtYW51YWxseQorCSAqIG1h bmFnZWQgYXJlbmEpLCB0aGVuIHBlcmNwdSBhcmVuYSBpcyBza2lwcGVkLgorCSAqLworCWlmICho YXZlX3BlcmNwdV9hcmVuYSAmJiBQRVJDUFVfQVJFTkFfRU5BQkxFRChvcHRfcGVyY3B1X2FyZW5h KSAmJgorCSAgICAhaW50ZXJuYWwgJiYgKGFyZW5hX2luZF9nZXQocmV0KSA8CisJICAgIHBlcmNw dV9hcmVuYV9pbmRfbGltaXQob3B0X3BlcmNwdV9hcmVuYSkpICYmIChyZXQtPmxhc3RfdGhkICE9 CisJICAgIHRzZF90c2RuKHRzZCkpKSB7CisJCXVuc2lnbmVkIGluZCA9IHBlcmNwdV9hcmVuYV9j aG9vc2UoKTsKKwkJaWYgKGFyZW5hX2luZF9nZXQocmV0KSAhPSBpbmQpIHsKKwkJCXBlcmNwdV9h cmVuYV91cGRhdGUodHNkLCBpbmQpOworCQkJcmV0ID0gdHNkX2FyZW5hX2dldCh0c2QpOworCQl9 CisJCXJldC0+bGFzdF90aGQgPSB0c2RfdHNkbih0c2QpOworCX0KKworCXJldHVybiByZXQ7Cit9 CisKK3N0YXRpYyBpbmxpbmUgYXJlbmFfdCAqCithcmVuYV9jaG9vc2UodHNkX3QgKnRzZCwgYXJl bmFfdCAqYXJlbmEpIHsKKwlyZXR1cm4gYXJlbmFfY2hvb3NlX2ltcGwodHNkLCBhcmVuYSwgZmFs c2UpOworfQorCitzdGF0aWMgaW5saW5lIGFyZW5hX3QgKgorYXJlbmFfaWNob29zZSh0c2RfdCAq dHNkLCBhcmVuYV90ICphcmVuYSkgeworCXJldHVybiBhcmVuYV9jaG9vc2VfaW1wbCh0c2QsIGFy ZW5hLCB0cnVlKTsKK30KKworc3RhdGljIGlubGluZSBib29sCithcmVuYV9pc19hdXRvKGFyZW5h X3QgKmFyZW5hKSB7CisJYXNzZXJ0KG5hcmVuYXNfYXV0byA+IDApOworCisJcmV0dXJuIChhcmVu YV9pbmRfZ2V0KGFyZW5hKSA8IG1hbnVhbF9hcmVuYV9iYXNlKTsKK30KKworI2VuZGlmIC8qIEpF TUFMTE9DX0lOVEVSTkFMX0lOTElORVNfQl9IICovCgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2Ut My4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9qZW1h bGxvY19pbnRlcm5hbF9pbmxpbmVzX2MuaCBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFs bG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvamVtYWxsb2NfaW50ZXJuYWxfaW5s aW5lc19jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjA4NjhiNwotLS0g L2Rldi9udWxsCisrKyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2lu Y2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvamVtYWxsb2NfaW50ZXJuYWxfaW5saW5lc19jLmgKQEAg LTAsMCArMSwzNDAgQEAKKyNpZm5kZWYgSkVNQUxMT0NfSU5URVJOQUxfSU5MSU5FU19DX0gKKyNk ZWZpbmUgSkVNQUxMT0NfSU5URVJOQUxfSU5MSU5FU19DX0gKKworI2luY2x1ZGUgImplbWFsbG9j L2ludGVybmFsL2hvb2suaCIKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9qZW1hbGxvY19p bnRlcm5hbF90eXBlcy5oIgorI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2xvZy5oIgorI2lu Y2x1ZGUgImplbWFsbG9jL2ludGVybmFsL3N6LmgiCisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJu YWwvdGhyZWFkX2V2ZW50LmgiCisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvd2l0bmVzcy5o IgorCisvKgorICogVHJhbnNsYXRpbmcgdGhlIG5hbWVzIG9mIHRoZSAnaScgZnVuY3Rpb25zOgor ICogICBBYmJyZXZpYXRpb25zIHVzZWQgaW4gdGhlIGZpcnN0IHBhcnQgb2YgdGhlIGZ1bmN0aW9u IG5hbWUgKGJlZm9yZQorICogICBhbGxvYy9kYWxsb2MpIGRlc2NyaWJlIHdoYXQgdGhhdCBmdW5j dGlvbiBhY2NvbXBsaXNoZXM6CisgKiAgICAgYTogYXJlbmEgKHF1ZXJ5KQorICogICAgIHM6IHNp emUgKHF1ZXJ5LCBvciBzaXplZCBkZWFsbG9jYXRpb24pCisgKiAgICAgZTogZXh0ZW50IChxdWVy eSkKKyAqICAgICBwOiBhbGlnbmVkIChhbGxvY2F0ZXMpCisgKiAgICAgdnM6IHNpemUgKHF1ZXJ5 LCB3aXRob3V0IGtub3dpbmcgdGhhdCB0aGUgcG9pbnRlciBpcyBpbnRvIHRoZSBoZWFwKQorICog ICAgIHI6IHJhbGxvY3ggaW1wbGVtZW50YXRpb24KKyAqICAgICB4OiB4YWxsb2N4IGltcGxlbWVu dGF0aW9uCisgKiAgIEFiYnJldmlhdGlvbnMgdXNlZCBpbiB0aGUgc2Vjb25kIHBhcnQgb2YgdGhl IGZ1bmN0aW9uIG5hbWUgKGFmdGVyCisgKiAgIGFsbG9jL2RhbGxvYykgZGVzY3JpYmUgdGhlIGFy Z3VtZW50cyBpdCB0YWtlcworICogICAgIHo6IHdoZXRoZXIgdG8gcmV0dXJuIHplcm9lZCBtZW1v cnkKKyAqICAgICB0OiBhY2NlcHRzIGEgdGNhY2hlX3QgKiBwYXJhbWV0ZXIKKyAqICAgICBtOiBh Y2NlcHRzIGFuIGFyZW5hX3QgKiBwYXJhbWV0ZXIKKyAqLworCitKRU1BTExPQ19BTFdBWVNfSU5M SU5FIGFyZW5hX3QgKgoraWFhbGxvYyh0c2RuX3QgKnRzZG4sIGNvbnN0IHZvaWQgKnB0cikgewor CWFzc2VydChwdHIgIT0gTlVMTCk7CisKKwlyZXR1cm4gYXJlbmFfYWFsbG9jKHRzZG4sIHB0cik7 Cit9CisKK0pFTUFMTE9DX0FMV0FZU19JTkxJTkUgc2l6ZV90Citpc2FsbG9jKHRzZG5fdCAqdHNk biwgY29uc3Qgdm9pZCAqcHRyKSB7CisJYXNzZXJ0KHB0ciAhPSBOVUxMKTsKKworCXJldHVybiBh cmVuYV9zYWxsb2ModHNkbiwgcHRyKTsKK30KKworSkVNQUxMT0NfQUxXQVlTX0lOTElORSB2b2lk ICoKK2lhbGxvY3p0bSh0c2RuX3QgKnRzZG4sIHNpemVfdCBzaXplLCBzemluZF90IGluZCwgYm9v bCB6ZXJvLCB0Y2FjaGVfdCAqdGNhY2hlLAorICAgIGJvb2wgaXNfaW50ZXJuYWwsIGFyZW5hX3Qg KmFyZW5hLCBib29sIHNsb3dfcGF0aCkgeworCXZvaWQgKnJldDsKKworCWFzc2VydCghaXNfaW50 ZXJuYWwgfHwgdGNhY2hlID09IE5VTEwpOworCWFzc2VydCghaXNfaW50ZXJuYWwgfHwgYXJlbmEg PT0gTlVMTCB8fCBhcmVuYV9pc19hdXRvKGFyZW5hKSk7CisJaWYgKCF0c2RuX251bGwodHNkbikg JiYgdHNkX3JlZW50cmFuY3lfbGV2ZWxfZ2V0KHRzZG5fdHNkKHRzZG4pKSA9PSAwKSB7CisJCXdp dG5lc3NfYXNzZXJ0X2RlcHRoX3RvX3JhbmsodHNkbl93aXRuZXNzX3RzZHBfZ2V0KHRzZG4pLAor CQkgICAgV0lUTkVTU19SQU5LX0NPUkUsIDApOworCX0KKworCXJldCA9IGFyZW5hX21hbGxvYyh0 c2RuLCBhcmVuYSwgc2l6ZSwgaW5kLCB6ZXJvLCB0Y2FjaGUsIHNsb3dfcGF0aCk7CisJaWYgKGNv bmZpZ19zdGF0cyAmJiBpc19pbnRlcm5hbCAmJiBsaWtlbHkocmV0ICE9IE5VTEwpKSB7CisJCWFy ZW5hX2ludGVybmFsX2FkZChpYWFsbG9jKHRzZG4sIHJldCksIGlzYWxsb2ModHNkbiwgcmV0KSk7 CisJfQorCXJldHVybiByZXQ7Cit9CisKK0pFTUFMTE9DX0FMV0FZU19JTkxJTkUgdm9pZCAqCitp YWxsb2ModHNkX3QgKnRzZCwgc2l6ZV90IHNpemUsIHN6aW5kX3QgaW5kLCBib29sIHplcm8sIGJv b2wgc2xvd19wYXRoKSB7CisJcmV0dXJuIGlhbGxvY3p0bSh0c2RfdHNkbih0c2QpLCBzaXplLCBp bmQsIHplcm8sIHRjYWNoZV9nZXQodHNkKSwgZmFsc2UsCisJICAgIE5VTEwsIHNsb3dfcGF0aCk7 Cit9CisKK0pFTUFMTE9DX0FMV0FZU19JTkxJTkUgdm9pZCAqCitpcGFsbG9jenRtKHRzZG5fdCAq dHNkbiwgc2l6ZV90IHVzaXplLCBzaXplX3QgYWxpZ25tZW50LCBib29sIHplcm8sCisgICAgdGNh Y2hlX3QgKnRjYWNoZSwgYm9vbCBpc19pbnRlcm5hbCwgYXJlbmFfdCAqYXJlbmEpIHsKKwl2b2lk ICpyZXQ7CisKKwlhc3NlcnQodXNpemUgIT0gMCk7CisJYXNzZXJ0KHVzaXplID09IHN6X3NhMnUo dXNpemUsIGFsaWdubWVudCkpOworCWFzc2VydCghaXNfaW50ZXJuYWwgfHwgdGNhY2hlID09IE5V TEwpOworCWFzc2VydCghaXNfaW50ZXJuYWwgfHwgYXJlbmEgPT0gTlVMTCB8fCBhcmVuYV9pc19h dXRvKGFyZW5hKSk7CisJd2l0bmVzc19hc3NlcnRfZGVwdGhfdG9fcmFuayh0c2RuX3dpdG5lc3Nf dHNkcF9nZXQodHNkbiksCisJICAgIFdJVE5FU1NfUkFOS19DT1JFLCAwKTsKKworCXJldCA9IGFy ZW5hX3BhbGxvYyh0c2RuLCBhcmVuYSwgdXNpemUsIGFsaWdubWVudCwgemVybywgdGNhY2hlKTsK Kwlhc3NlcnQoQUxJR05NRU5UX0FERFIyQkFTRShyZXQsIGFsaWdubWVudCkgPT0gcmV0KTsKKwlp ZiAoY29uZmlnX3N0YXRzICYmIGlzX2ludGVybmFsICYmIGxpa2VseShyZXQgIT0gTlVMTCkpIHsK KwkJYXJlbmFfaW50ZXJuYWxfYWRkKGlhYWxsb2ModHNkbiwgcmV0KSwgaXNhbGxvYyh0c2RuLCBy ZXQpKTsKKwl9CisJcmV0dXJuIHJldDsKK30KKworSkVNQUxMT0NfQUxXQVlTX0lOTElORSB2b2lk ICoKK2lwYWxsb2N0KHRzZG5fdCAqdHNkbiwgc2l6ZV90IHVzaXplLCBzaXplX3QgYWxpZ25tZW50 LCBib29sIHplcm8sCisgICAgdGNhY2hlX3QgKnRjYWNoZSwgYXJlbmFfdCAqYXJlbmEpIHsKKwly ZXR1cm4gaXBhbGxvY3p0bSh0c2RuLCB1c2l6ZSwgYWxpZ25tZW50LCB6ZXJvLCB0Y2FjaGUsIGZh bHNlLCBhcmVuYSk7Cit9CisKK0pFTUFMTE9DX0FMV0FZU19JTkxJTkUgdm9pZCAqCitpcGFsbG9j KHRzZF90ICp0c2QsIHNpemVfdCB1c2l6ZSwgc2l6ZV90IGFsaWdubWVudCwgYm9vbCB6ZXJvKSB7 CisJcmV0dXJuIGlwYWxsb2N6dG0odHNkX3RzZG4odHNkKSwgdXNpemUsIGFsaWdubWVudCwgemVy bywKKwkgICAgdGNhY2hlX2dldCh0c2QpLCBmYWxzZSwgTlVMTCk7Cit9CisKK0pFTUFMTE9DX0FM V0FZU19JTkxJTkUgc2l6ZV90CitpdnNhbGxvYyh0c2RuX3QgKnRzZG4sIGNvbnN0IHZvaWQgKnB0 cikgeworCXJldHVybiBhcmVuYV92c2FsbG9jKHRzZG4sIHB0cik7Cit9CisKK0pFTUFMTE9DX0FM V0FZU19JTkxJTkUgdm9pZAoraWRhbGxvY3RtKHRzZG5fdCAqdHNkbiwgdm9pZCAqcHRyLCB0Y2Fj aGVfdCAqdGNhY2hlLAorICAgIGVtYXBfYWxsb2NfY3R4X3QgKmFsbG9jX2N0eCwgYm9vbCBpc19p bnRlcm5hbCwgYm9vbCBzbG93X3BhdGgpIHsKKwlhc3NlcnQocHRyICE9IE5VTEwpOworCWFzc2Vy dCghaXNfaW50ZXJuYWwgfHwgdGNhY2hlID09IE5VTEwpOworCWFzc2VydCghaXNfaW50ZXJuYWwg fHwgYXJlbmFfaXNfYXV0byhpYWFsbG9jKHRzZG4sIHB0cikpKTsKKwl3aXRuZXNzX2Fzc2VydF9k ZXB0aF90b19yYW5rKHRzZG5fd2l0bmVzc190c2RwX2dldCh0c2RuKSwKKwkgICAgV0lUTkVTU19S QU5LX0NPUkUsIDApOworCWlmIChjb25maWdfc3RhdHMgJiYgaXNfaW50ZXJuYWwpIHsKKwkJYXJl bmFfaW50ZXJuYWxfc3ViKGlhYWxsb2ModHNkbiwgcHRyKSwgaXNhbGxvYyh0c2RuLCBwdHIpKTsK Kwl9CisJaWYgKCFpc19pbnRlcm5hbCAmJiAhdHNkbl9udWxsKHRzZG4pICYmCisJICAgIHRzZF9y ZWVudHJhbmN5X2xldmVsX2dldCh0c2RuX3RzZCh0c2RuKSkgIT0gMCkgeworCQlhc3NlcnQodGNh Y2hlID09IE5VTEwpOworCX0KKwlhcmVuYV9kYWxsb2ModHNkbiwgcHRyLCB0Y2FjaGUsIGFsbG9j X2N0eCwgc2xvd19wYXRoKTsKK30KKworSkVNQUxMT0NfQUxXQVlTX0lOTElORSB2b2lkCitpZGFs bG9jKHRzZF90ICp0c2QsIHZvaWQgKnB0cikgeworCWlkYWxsb2N0bSh0c2RfdHNkbih0c2QpLCBw dHIsIHRjYWNoZV9nZXQodHNkKSwgTlVMTCwgZmFsc2UsIHRydWUpOworfQorCitKRU1BTExPQ19B TFdBWVNfSU5MSU5FIHZvaWQKK2lzZGFsbG9jdCh0c2RuX3QgKnRzZG4sIHZvaWQgKnB0ciwgc2l6 ZV90IHNpemUsIHRjYWNoZV90ICp0Y2FjaGUsCisgICAgZW1hcF9hbGxvY19jdHhfdCAqYWxsb2Nf Y3R4LCBib29sIHNsb3dfcGF0aCkgeworCXdpdG5lc3NfYXNzZXJ0X2RlcHRoX3RvX3JhbmsodHNk bl93aXRuZXNzX3RzZHBfZ2V0KHRzZG4pLAorCSAgICBXSVRORVNTX1JBTktfQ09SRSwgMCk7CisJ YXJlbmFfc2RhbGxvYyh0c2RuLCBwdHIsIHNpemUsIHRjYWNoZSwgYWxsb2NfY3R4LCBzbG93X3Bh dGgpOworfQorCitKRU1BTExPQ19BTFdBWVNfSU5MSU5FIHZvaWQgKgoraXJhbGxvY3RfcmVhbGln bih0c2RuX3QgKnRzZG4sIHZvaWQgKnB0ciwgc2l6ZV90IG9sZHNpemUsIHNpemVfdCBzaXplLAor ICAgIHNpemVfdCBhbGlnbm1lbnQsIGJvb2wgemVybywgdGNhY2hlX3QgKnRjYWNoZSwgYXJlbmFf dCAqYXJlbmEsCisgICAgaG9va19yYWxsb2NfYXJnc190ICpob29rX2FyZ3MpIHsKKwl3aXRuZXNz X2Fzc2VydF9kZXB0aF90b19yYW5rKHRzZG5fd2l0bmVzc190c2RwX2dldCh0c2RuKSwKKwkgICAg V0lUTkVTU19SQU5LX0NPUkUsIDApOworCXZvaWQgKnA7CisJc2l6ZV90IHVzaXplLCBjb3B5c2l6 ZTsKKworCXVzaXplID0gc3pfc2EydShzaXplLCBhbGlnbm1lbnQpOworCWlmICh1bmxpa2VseSh1 c2l6ZSA9PSAwIHx8IHVzaXplID4gU0NfTEFSR0VfTUFYQ0xBU1MpKSB7CisJCXJldHVybiBOVUxM OworCX0KKwlwID0gaXBhbGxvY3QodHNkbiwgdXNpemUsIGFsaWdubWVudCwgemVybywgdGNhY2hl LCBhcmVuYSk7CisJaWYgKHAgPT0gTlVMTCkgeworCQlyZXR1cm4gTlVMTDsKKwl9CisJLyoKKwkg KiBDb3B5IGF0IG1vc3Qgc2l6ZSBieXRlcyAobm90IHNpemUrZXh0cmEpLCBzaW5jZSB0aGUgY2Fs bGVyIGhhcyBubworCSAqIGV4cGVjdGF0aW9uIHRoYXQgdGhlIGV4dHJhIGJ5dGVzIHdpbGwgYmUg cmVsaWFibHkgcHJlc2VydmVkLgorCSAqLworCWNvcHlzaXplID0gKHNpemUgPCBvbGRzaXplKSA/ IHNpemUgOiBvbGRzaXplOworCW1lbWNweShwLCBwdHIsIGNvcHlzaXplKTsKKwlob29rX2ludm9r ZV9hbGxvYyhob29rX2FyZ3MtPmlzX3JlYWxsb2MKKwkgICAgPyBob29rX2FsbG9jX3JlYWxsb2Mg OiBob29rX2FsbG9jX3JhbGxvY3gsIHAsICh1aW50cHRyX3QpcCwKKwkgICAgaG9va19hcmdzLT5h cmdzKTsKKwlob29rX2ludm9rZV9kYWxsb2MoaG9va19hcmdzLT5pc19yZWFsbG9jCisJICAgID8g aG9va19kYWxsb2NfcmVhbGxvYyA6IGhvb2tfZGFsbG9jX3JhbGxvY3gsIHB0ciwgaG9va19hcmdz LT5hcmdzKTsKKwlpc2RhbGxvY3QodHNkbiwgcHRyLCBvbGRzaXplLCB0Y2FjaGUsIE5VTEwsIHRy dWUpOworCXJldHVybiBwOworfQorCisvKgorICogaXNfcmVhbGxvYyB0aHJlYWRzIHRocm91Z2gg dGhlIGtub3dsZWRnZSBvZiB3aGV0aGVyIG9yIG5vdCB0aGlzIGNhbGwgY29tZXMKKyAqIGZyb20g amVfcmVhbGxvYyAoYXMgb3Bwb3NlZCB0byBqZV9yYWxsb2N4KTsgdGhpcyBlbnN1cmVzIHRoYXQg d2UgcGFzcyB0aGUKKyAqIGNvcnJlY3QgZW50cnkgcG9pbnQgaW50byBhbnkgaG9va3MuCisgKiBO b3RlIHRoYXQgdGhlc2UgZnVuY3Rpb25zIGFyZSBhbGwgZm9yY2UtaW5saW5lZCwgc28gbm8gYWN0 dWFsIGJvb2wgZ2V0cworICogcGFzc2VkLWFyb3VuZCBhbnl3aGVyZS4KKyAqLworSkVNQUxMT0Nf QUxXQVlTX0lOTElORSB2b2lkICoKK2lyYWxsb2N0KHRzZG5fdCAqdHNkbiwgdm9pZCAqcHRyLCBz aXplX3Qgb2xkc2l6ZSwgc2l6ZV90IHNpemUsIHNpemVfdCBhbGlnbm1lbnQsCisgICAgYm9vbCB6 ZXJvLCB0Y2FjaGVfdCAqdGNhY2hlLCBhcmVuYV90ICphcmVuYSwgaG9va19yYWxsb2NfYXJnc190 ICpob29rX2FyZ3MpCit7CisJYXNzZXJ0KHB0ciAhPSBOVUxMKTsKKwlhc3NlcnQoc2l6ZSAhPSAw KTsKKwl3aXRuZXNzX2Fzc2VydF9kZXB0aF90b19yYW5rKHRzZG5fd2l0bmVzc190c2RwX2dldCh0 c2RuKSwKKwkgICAgV0lUTkVTU19SQU5LX0NPUkUsIDApOworCisJaWYgKGFsaWdubWVudCAhPSAw ICYmICgodWludHB0cl90KXB0ciAmICgodWludHB0cl90KWFsaWdubWVudC0xKSkKKwkgICAgIT0g MCkgeworCQkvKgorCQkgKiBFeGlzdGluZyBvYmplY3QgYWxpZ25tZW50IGlzIGluYWRlcXVhdGU7 IGFsbG9jYXRlIG5ldyBzcGFjZQorCQkgKiBhbmQgY29weS4KKwkJICovCisJCXJldHVybiBpcmFs bG9jdF9yZWFsaWduKHRzZG4sIHB0ciwgb2xkc2l6ZSwgc2l6ZSwgYWxpZ25tZW50LAorCQkgICAg emVybywgdGNhY2hlLCBhcmVuYSwgaG9va19hcmdzKTsKKwl9CisKKwlyZXR1cm4gYXJlbmFfcmFs bG9jKHRzZG4sIGFyZW5hLCBwdHIsIG9sZHNpemUsIHNpemUsIGFsaWdubWVudCwgemVybywKKwkg ICAgdGNhY2hlLCBob29rX2FyZ3MpOworfQorCitKRU1BTExPQ19BTFdBWVNfSU5MSU5FIHZvaWQg KgoraXJhbGxvYyh0c2RfdCAqdHNkLCB2b2lkICpwdHIsIHNpemVfdCBvbGRzaXplLCBzaXplX3Qg c2l6ZSwgc2l6ZV90IGFsaWdubWVudCwKKyAgICBib29sIHplcm8sIGhvb2tfcmFsbG9jX2FyZ3Nf dCAqaG9va19hcmdzKSB7CisJcmV0dXJuIGlyYWxsb2N0KHRzZF90c2RuKHRzZCksIHB0ciwgb2xk c2l6ZSwgc2l6ZSwgYWxpZ25tZW50LCB6ZXJvLAorCSAgICB0Y2FjaGVfZ2V0KHRzZCksIE5VTEws IGhvb2tfYXJncyk7Cit9CisKK0pFTUFMTE9DX0FMV0FZU19JTkxJTkUgYm9vbAoraXhhbGxvYyh0 c2RuX3QgKnRzZG4sIHZvaWQgKnB0ciwgc2l6ZV90IG9sZHNpemUsIHNpemVfdCBzaXplLCBzaXpl X3QgZXh0cmEsCisgICAgc2l6ZV90IGFsaWdubWVudCwgYm9vbCB6ZXJvLCBzaXplX3QgKm5ld3Np emUpIHsKKwlhc3NlcnQocHRyICE9IE5VTEwpOworCWFzc2VydChzaXplICE9IDApOworCXdpdG5l c3NfYXNzZXJ0X2RlcHRoX3RvX3JhbmsodHNkbl93aXRuZXNzX3RzZHBfZ2V0KHRzZG4pLAorCSAg ICBXSVRORVNTX1JBTktfQ09SRSwgMCk7CisKKwlpZiAoYWxpZ25tZW50ICE9IDAgJiYgKCh1aW50 cHRyX3QpcHRyICYgKCh1aW50cHRyX3QpYWxpZ25tZW50LTEpKQorCSAgICAhPSAwKSB7CisJCS8q IEV4aXN0aW5nIG9iamVjdCBhbGlnbm1lbnQgaXMgaW5hZGVxdWF0ZS4gKi8KKwkJKm5ld3NpemUg PSBvbGRzaXplOworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwlyZXR1cm4gYXJlbmFfcmFsbG9jX25v X21vdmUodHNkbiwgcHRyLCBvbGRzaXplLCBzaXplLCBleHRyYSwgemVybywKKwkgICAgbmV3c2l6 ZSk7Cit9CisKK0pFTUFMTE9DX0FMV0FZU19JTkxJTkUgdm9pZAorZmFzdHBhdGhfc3VjY2Vzc19m aW5pc2godHNkX3QgKnRzZCwgdWludDY0X3QgYWxsb2NhdGVkX2FmdGVyLAorICAgIGNhY2hlX2Jp bl90ICpiaW4sIHZvaWQgKnJldCkgeworCXRocmVhZF9hbGxvY2F0ZWRfc2V0KHRzZCwgYWxsb2Nh dGVkX2FmdGVyKTsKKwlpZiAoY29uZmlnX3N0YXRzKSB7CisJCWJpbi0+dHN0YXRzLm5yZXF1ZXN0 cysrOworCX0KKworCUxPRygiY29yZS5tYWxsb2MuZXhpdCIsICJyZXN1bHQ6ICVwIiwgcmV0KTsK K30KKworSkVNQUxMT0NfQUxXQVlTX0lOTElORSBib29sCittYWxsb2NfaW5pdGlhbGl6ZWQodm9p ZCkgeworCXJldHVybiAobWFsbG9jX2luaXRfc3RhdGUgPT0gbWFsbG9jX2luaXRfaW5pdGlhbGl6 ZWQpOworfQorCisvKgorICogbWFsbG9jKCkgZmFzdHBhdGguICBJbmNsdWRlZCBoZXJlIHNvIHRo YXQgd2UgY2FuIGlubGluZSBpdCBpbnRvIG9wZXJhdG9yIG5ldzsKKyAqIGZ1bmN0aW9uIGNhbGwg b3ZlcmhlYWQgdGhlcmUgaXMgbm9uLW5lZ2xpZ2libGUgYXMgYSBmcmFjdGlvbiBvZiB0b3RhbCBD UFUgaW4KKyAqIGFsbG9jYXRpb24taGVhdnkgQysrIHByb2dyYW1zLiAgV2UgdGFrZSB0aGUgZmFs bGJhY2sgYWxsb2MgdG8gYWxsb3cgbWFsbG9jCisgKiAod2hpY2ggY2FuIHJldHVybiBOVUxMKSB0 byBkaWZmZXIgaW4gaXRzIGJlaGF2aW9yIGZyb20gb3BlcmF0b3IgbmV3ICh3aGljaAorICogY2Fu J3QpLiAgSXQgbWF0Y2hlcyB0aGUgc2lnbmF0dXJlIG9mIG1hbGxvYyAvIG9wZXJhdG9yIG5ldyBz byB0aGF0IHdlIGNhbgorICogdGFpbC1jYWxsIHRoZSBmYWxsYmFjayBhbGxvY2F0b3IsIGFsbG93 aW5nIHVzIHRvIGF2b2lkIHNldHRpbmcgdXAgdGhlIGNhbGwKKyAqIGZyYW1lIGluIHRoZSBjb21t b24gY2FzZS4KKyAqCisgKiBGYXN0cGF0aCBhc3N1bWVzIHNpemUgPD0gU0NfTE9PS1VQX01BWENM QVNTLCBhbmQgdGhhdCB3ZSBoaXQKKyAqIHRjYWNoZS4gIElmIGVpdGhlciBvZiB0aGVzZSBpcyBm YWxzZSwgd2UgdGFpbC1jYWxsIHRvIHRoZSBzbG93cGF0aCwKKyAqIG1hbGxvY19kZWZhdWx0KCku ICBUYWlsLWNhbGxpbmcgaXMgdXNlZCB0byBhdm9pZCBhbnkgY2FsbGVyLXNhdmVkCisgKiByZWdp c3RlcnMuCisgKgorICogZmFzdHBhdGggc3VwcG9ydHMgdGlja2VyIGFuZCBwcm9maWxpbmcsIGJv dGggb2Ygd2hpY2ggd2lsbCBhbHNvCisgKiB0YWlsLWNhbGwgdG8gdGhlIHNsb3dwYXRoIGlmIHRo ZXkgZmlyZS4KKyAqLworSkVNQUxMT0NfQUxXQVlTX0lOTElORSB2b2lkICoKK2ltYWxsb2NfZmFz dHBhdGgoc2l6ZV90IHNpemUsIHZvaWQgKihmYWxsYmFja19hbGxvYykoc2l6ZV90KSkgeworCUxP RygiY29yZS5tYWxsb2MuZW50cnkiLCAic2l6ZTogJXp1Iiwgc2l6ZSk7CisJaWYgKHRzZF9nZXRf YWxsb2NhdGVzKCkgJiYgdW5saWtlbHkoIW1hbGxvY19pbml0aWFsaXplZCgpKSkgeworCQlyZXR1 cm4gZmFsbGJhY2tfYWxsb2Moc2l6ZSk7CisJfQorCisJdHNkX3QgKnRzZCA9IHRzZF9nZXQoZmFs c2UpOworCWlmICh1bmxpa2VseSgoc2l6ZSA+IFNDX0xPT0tVUF9NQVhDTEFTUykgfHwgdHNkID09 IE5VTEwpKSB7CisJCXJldHVybiBmYWxsYmFja19hbGxvYyhzaXplKTsKKwl9CisJLyoKKwkgKiBU aGUgY29kZSBiZWxvdyB0aWxsIHRoZSBicmFuY2ggY2hlY2tpbmcgdGhlIG5leHRfZXZlbnQgdGhy ZXNob2xkIG1heQorCSAqIGV4ZWN1dGUgYmVmb3JlIG1hbGxvY19pbml0KCksIGluIHdoaWNoIGNh c2UgdGhlIHRocmVzaG9sZCBpcyAwIHRvCisJICogdHJpZ2dlciBzbG93IHBhdGggYW5kIGluaXRp YWxpemF0aW9uLgorCSAqCisJICogTm90ZSB0aGF0IHdoZW4gdW5pbml0aWFsaXplZCwgb25seSB0 aGUgZmFzdC1wYXRoIHZhcmlhbnRzIG9mIHRoZSBzeiAvCisJICogdHNkIGZhY2lsaXRpZXMgbWF5 IGJlIGNhbGxlZC4KKwkgKi8KKwlzemluZF90IGluZDsKKwkvKgorCSAqIFRoZSB0aHJlYWRfYWxs b2NhdGVkIGNvdW50ZXIgaW4gdHNkIHNlcnZlcyBhcyBhIGdlbmVyYWwgcHVycG9zZQorCSAqIGFj Y3VtdWxhdG9yIGZvciBieXRlcyBvZiBhbGxvY2F0aW9uIHRvIHRyaWdnZXIgZGlmZmVyZW50IHR5 cGVzIG9mCisJICogZXZlbnRzLiAgdXNpemUgaXMgYWx3YXlzIG5lZWRlZCB0byBhZHZhbmNlIHRo cmVhZF9hbGxvY2F0ZWQsIHRob3VnaAorCSAqIGl0J3Mgbm90IGFsd2F5cyBuZWVkZWQgaW4gdGhl IGNvcmUgYWxsb2NhdGlvbiBsb2dpYy4KKwkgKi8KKwlzaXplX3QgdXNpemU7CisJc3pfc2l6ZTJp bmRleF91c2l6ZV9mYXN0cGF0aChzaXplLCAmaW5kLCAmdXNpemUpOworCS8qIEZhc3QgcGF0aCBy ZWxpZXMgb24gc2l6ZSBiZWluZyBhIGJpbi4gKi8KKwlhc3NlcnQoaW5kIDwgU0NfTkJJTlMpOwor CWFzc2VydCgoU0NfTE9PS1VQX01BWENMQVNTIDwgU0NfU01BTExfTUFYQ0xBU1MpICYmCisJICAg IChzaXplIDw9IFNDX1NNQUxMX01BWENMQVNTKSk7CisKKwl1aW50NjRfdCBhbGxvY2F0ZWQsIHRo cmVzaG9sZDsKKwl0ZV9tYWxsb2NfZmFzdHBhdGhfY3R4KHRzZCwgJmFsbG9jYXRlZCwgJnRocmVz aG9sZCk7CisJdWludDY0X3QgYWxsb2NhdGVkX2FmdGVyID0gYWxsb2NhdGVkICsgdXNpemU7CisJ LyoKKwkgKiBUaGUgaW5kIGFuZCB1c2l6ZSBtaWdodCBiZSB1bmluaXRpYWxpemVkIChvciBwYXJ0 aWFsbHkpIGJlZm9yZQorCSAqIG1hbGxvY19pbml0KCkuICBUaGUgYXNzZXJ0aW9ucyBjaGVjayBm b3I6IDEpIGZ1bGwgY29ycmVjdG5lc3MgKHVzaXplCisJICogJiBpbmQpIHdoZW4gaW5pdGlhbGl6 ZWQ7IGFuZCAyKSBndWFyYW50ZWVkIHNsb3ctcGF0aCAodGhyZXNob2xkID09IDApCisJICogd2hl biAhaW5pdGlhbGl6ZWQuCisJICovCisJaWYgKCFtYWxsb2NfaW5pdGlhbGl6ZWQoKSkgeworCQlh c3NlcnQodGhyZXNob2xkID09IDApOworCX0gZWxzZSB7CisJCWFzc2VydChpbmQgPT0gc3pfc2l6 ZTJpbmRleChzaXplKSk7CisJCWFzc2VydCh1c2l6ZSA+IDAgJiYgdXNpemUgPT0gc3pfaW5kZXgy c2l6ZShpbmQpKTsKKwl9CisJLyoKKwkgKiBDaGVjayBmb3IgZXZlbnRzIGFuZCB0c2Qgbm9uLW5v bWluYWwgKGZhc3RfdGhyZXNob2xkIHdpbGwgYmUgc2V0IHRvCisJICogMCkgaW4gYSBzaW5nbGUg YnJhbmNoLgorCSAqLworCWlmICh1bmxpa2VseShhbGxvY2F0ZWRfYWZ0ZXIgPj0gdGhyZXNob2xk KSkgeworCQlyZXR1cm4gZmFsbGJhY2tfYWxsb2Moc2l6ZSk7CisJfQorCWFzc2VydCh0c2RfZmFz dCh0c2QpKTsKKworCXRjYWNoZV90ICp0Y2FjaGUgPSB0c2RfdGNhY2hlcF9nZXQodHNkKTsKKwlh c3NlcnQodGNhY2hlID09IHRjYWNoZV9nZXQodHNkKSk7CisJY2FjaGVfYmluX3QgKmJpbiA9ICZ0 Y2FjaGUtPmJpbnNbaW5kXTsKKwlib29sIHRjYWNoZV9zdWNjZXNzOworCXZvaWQgKnJldDsKKwor CS8qCisJICogV2Ugc3BsaXQgdXAgdGhlIGNvZGUgdGhpcyB3YXkgc28gdGhhdCByZWR1bmRhbnQg bG93LXdhdGVyCisJICogY29tcHV0YXRpb24gZG9lc24ndCBoYXBwZW4gb24gdGhlIChtb3JlIGNv bW1vbikgY2FzZSBpbiB3aGljaCB3ZQorCSAqIGRvbid0IHRvdWNoIHRoZSBsb3cgd2F0ZXIgbWFy ay4gIFRoZSBjb21waWxlciB3b24ndCBkbyB0aGlzCisJICogZHVwbGljYXRpb24gb24gaXRzIG93 bi4KKwkgKi8KKwlyZXQgPSBjYWNoZV9iaW5fYWxsb2NfZWFzeShiaW4sICZ0Y2FjaGVfc3VjY2Vz cyk7CisJaWYgKHRjYWNoZV9zdWNjZXNzKSB7CisJCWZhc3RwYXRoX3N1Y2Nlc3NfZmluaXNoKHRz ZCwgYWxsb2NhdGVkX2FmdGVyLCBiaW4sIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCXJldCA9 IGNhY2hlX2Jpbl9hbGxvYyhiaW4sICZ0Y2FjaGVfc3VjY2Vzcyk7CisJaWYgKHRjYWNoZV9zdWNj ZXNzKSB7CisJCWZhc3RwYXRoX3N1Y2Nlc3NfZmluaXNoKHRzZCwgYWxsb2NhdGVkX2FmdGVyLCBi aW4sIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIGZhbGxiYWNrX2FsbG9jKHNp emUpOworfQorCisjZW5kaWYgLyogSkVNQUxMT0NfSU5URVJOQUxfSU5MSU5FU19DX0ggKi8KCmRp ZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRl L2plbWFsbG9jL2ludGVybmFsL2plbWFsbG9jX2ludGVybmFsX21hY3Jvcy5oIGIvMzg5LWRzLWJh c2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9q ZW1hbGxvY19pbnRlcm5hbF9tYWNyb3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwLi5lOTdiNWY5Ci0tLSAvZGV2L251bGwKKysrIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQv amVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9qZW1hbGxvY19pbnRlcm5h bF9tYWNyb3MuaApAQCAtMCwwICsxLDExMSBAQAorI2lmbmRlZiBKRU1BTExPQ19JTlRFUk5BTF9N QUNST1NfSAorI2RlZmluZSBKRU1BTExPQ19JTlRFUk5BTF9NQUNST1NfSAorCisjaWZkZWYgSkVN QUxMT0NfREVCVUcKKyMgIGRlZmluZSBKRU1BTExPQ19BTFdBWVNfSU5MSU5FIHN0YXRpYyBpbmxp bmUKKyNlbHNlCisjICBpZmRlZiBfTVNDX1ZFUgorIyAgICBkZWZpbmUgSkVNQUxMT0NfQUxXQVlT X0lOTElORSBzdGF0aWMgX19mb3JjZWlubGluZQorIyAgZWxzZQorIyAgICBkZWZpbmUgSkVNQUxM T0NfQUxXQVlTX0lOTElORSBKRU1BTExPQ19BVFRSKGFsd2F5c19pbmxpbmUpIHN0YXRpYyBpbmxp bmUKKyMgIGVuZGlmCisjZW5kaWYKKyNpZmRlZiBfTVNDX1ZFUgorIyAgZGVmaW5lIGlubGluZSBf aW5saW5lCisjZW5kaWYKKworI2RlZmluZSBVTlVTRUQgSkVNQUxMT0NfQVRUUih1bnVzZWQpCisK KyNkZWZpbmUgWlUoeikJKChzaXplX3QpeikKKyNkZWZpbmUgWkQoeikJKChzc2l6ZV90KXopCisj ZGVmaW5lIFFVKHEpCSgodWludDY0X3QpcSkKKyNkZWZpbmUgUUQocSkJKChpbnQ2NF90KXEpCisK KyNkZWZpbmUgS1pVKHopCVpVKHojI1VMTCkKKyNkZWZpbmUgS1pEKHopCVpEKHojI0xMKQorI2Rl ZmluZSBLUVUocSkJUVUocSMjVUxMKQorI2RlZmluZSBLUUQocSkJUUkocSMjTEwpCisKKyNpZm5k ZWYgX19ERUNPTlNUCisjICBkZWZpbmUJX19ERUNPTlNUKHR5cGUsIHZhcikJKCh0eXBlKSh1aW50 cHRyX3QpKGNvbnN0IHZvaWQgKikodmFyKSkKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoSkVNQUxM T0NfSEFTX1JFU1RSSUNUKSB8fCBkZWZpbmVkKF9fY3BsdXNwbHVzKQorIyAgZGVmaW5lIHJlc3Ry aWN0CisjZW5kaWYKKworLyogVmFyaW91cyBmdW5jdGlvbiBwb2ludGVycyBhcmUgc3RhdGljIGFu ZCBpbW11dGFibGUgZXhjZXB0IGR1cmluZyB0ZXN0aW5nLiAqLworI2lmZGVmIEpFTUFMTE9DX0pF VAorIyAgZGVmaW5lIEpFVF9NVVRBQkxFCisjZWxzZQorIyAgZGVmaW5lIEpFVF9NVVRBQkxFIGNv bnN0CisjZW5kaWYKKworI2RlZmluZSBKRU1BTExPQ19WQV9BUkdTX0hFQUQoaGVhZCwgLi4uKSBo ZWFkCisjZGVmaW5lIEpFTUFMTE9DX1ZBX0FSR1NfVEFJTChoZWFkLCAuLi4pIF9fVkFfQVJHU19f CisKKy8qIERpYWdub3N0aWMgc3VwcHJlc3Npb24gbWFjcm9zICovCisjaWYgZGVmaW5lZChfTVND X1ZFUikgJiYgIWRlZmluZWQoX19jbGFuZ19fKQorIyAgZGVmaW5lIEpFTUFMTE9DX0RJQUdOT1NU SUNfUFVTSCBfX3ByYWdtYSh3YXJuaW5nKHB1c2gpKQorIyAgZGVmaW5lIEpFTUFMTE9DX0RJQUdO T1NUSUNfUE9QIF9fcHJhZ21hKHdhcm5pbmcocG9wKSkKKyMgIGRlZmluZSBKRU1BTExPQ19ESUFH Tk9TVElDX0lHTk9SRShXKSBfX3ByYWdtYSh3YXJuaW5nKGRpc2FibGU6VykpCisjICBkZWZpbmUg SkVNQUxMT0NfRElBR05PU1RJQ19JR05PUkVfTUlTU0lOR19TVFJVQ1RfRklFTERfSU5JVElBTEla RVJTCisjICBkZWZpbmUgSkVNQUxMT0NfRElBR05PU1RJQ19JR05PUkVfVFlQRV9MSU1JVFMKKyMg IGRlZmluZSBKRU1BTExPQ19ESUFHTk9TVElDX0lHTk9SRV9BTExPQ19TSVpFX0xBUkdFUl9USEFO CisjICBkZWZpbmUgSkVNQUxMT0NfRElBR05PU1RJQ19ESVNBQkxFX1NQVVJJT1VTCisvKiAjcHJh Z21hIEdDQyBkaWFnbm9zdGljIGZpcnN0IGFwcGVhcmVkIGluIGdjYyA0LjYuICovCisjZWxpZiAo ZGVmaW5lZChfX0dOVUNfXykgJiYgKChfX0dOVUNfXyA+IDQpIHx8ICgoX19HTlVDX18gPT0gNCkg JiYgXAorICAoX19HTlVDX01JTk9SX18gPiA1KSkpKSB8fCBkZWZpbmVkKF9fY2xhbmdfXykKKy8q CisgKiBUaGUgSkVNQUxMT0NfUFJBR01BX18gbWFjcm8gaXMgYW4gaW1wbGVtZW50YXRpb24gZGV0 YWlsIG9mIHRoZSBHQ0MgYW5kIENsYW5nCisgKiBkaWFnbm9zdGljIHN1cHByZXNzaW9uIG1hY3Jv cyBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkIGFueXdoZXJlIGVsc2UuCisgKi8KKyMgIGRlZmluZSBK RU1BTExPQ19QUkFHTUFfXyhYKSBfUHJhZ21hKCNYKQorIyAgZGVmaW5lIEpFTUFMTE9DX0RJQUdO T1NUSUNfUFVTSCBKRU1BTExPQ19QUkFHTUFfXyhHQ0MgZGlhZ25vc3RpYyBwdXNoKQorIyAgZGVm aW5lIEpFTUFMTE9DX0RJQUdOT1NUSUNfUE9QIEpFTUFMTE9DX1BSQUdNQV9fKEdDQyBkaWFnbm9z dGljIHBvcCkKKyMgIGRlZmluZSBKRU1BTExPQ19ESUFHTk9TVElDX0lHTk9SRShXKSBcCisgICAg IEpFTUFMTE9DX1BSQUdNQV9fKEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgVykKKworLyoKKyAqIFRo ZSAtV21pc3NpbmctZmllbGQtaW5pdGlhbGl6ZXJzIHdhcm5pbmcgaXMgYnVnZ3kgaW4gR0NDIHZl cnNpb25zIDwgNS4xIGFuZAorICogYWxsIGNsYW5nIHZlcnNpb25zIHVwIHRvIHZlcnNpb24gNyAo Y3VycmVudGx5IHRydW5rLCB1bnJlbGVhc2VkKS4gIFRoaXMgbWFjcm8KKyAqIHN1cHByZXNzZXMg dGhlIHdhcm5pbmcgZm9yIHRoZSBhZmZlY3RlZCBjb21waWxlciB2ZXJzaW9ucyBvbmx5LgorICov CisjICBpZiAoKGRlZmluZWQoX19HTlVDX18pICYmICFkZWZpbmVkKF9fY2xhbmdfXykpICYmIChf X0dOVUNfXyA8IDUpKSB8fCBcCisgICAgIGRlZmluZWQoX19jbGFuZ19fKQorIyAgICBkZWZpbmUg SkVNQUxMT0NfRElBR05PU1RJQ19JR05PUkVfTUlTU0lOR19TVFJVQ1RfRklFTERfSU5JVElBTEla RVJTICBcCisgICAgICAgICAgSkVNQUxMT0NfRElBR05PU1RJQ19JR05PUkUoIi1XbWlzc2luZy1m aWVsZC1pbml0aWFsaXplcnMiKQorIyAgZWxzZQorIyAgICBkZWZpbmUgSkVNQUxMT0NfRElBR05P U1RJQ19JR05PUkVfTUlTU0lOR19TVFJVQ1RfRklFTERfSU5JVElBTElaRVJTCisjICBlbmRpZgor CisjICBkZWZpbmUgSkVNQUxMT0NfRElBR05PU1RJQ19JR05PUkVfVFlQRV9MSU1JVFMgIFwKKyAg ICAgSkVNQUxMT0NfRElBR05PU1RJQ19JR05PUkUoIi1XdHlwZS1saW1pdHMiKQorIyAgZGVmaW5l IEpFTUFMTE9DX0RJQUdOT1NUSUNfSUdOT1JFX1VOVVNFRF9QQVJBTUVURVIgXAorICAgICBKRU1B TExPQ19ESUFHTk9TVElDX0lHTk9SRSgiLVd1bnVzZWQtcGFyYW1ldGVyIikKKyMgIGlmIGRlZmlu ZWQoX19HTlVDX18pICYmICFkZWZpbmVkKF9fY2xhbmdfXykgJiYgKF9fR05VQ19fID49IDcpCisj ICAgIGRlZmluZSBKRU1BTExPQ19ESUFHTk9TVElDX0lHTk9SRV9BTExPQ19TSVpFX0xBUkdFUl9U SEFOIFwKKyAgICAgICBKRU1BTExPQ19ESUFHTk9TVElDX0lHTk9SRSgiLVdhbGxvYy1zaXplLWxh cmdlci10aGFuPSIpCisjICBlbHNlCisjICAgIGRlZmluZSBKRU1BTExPQ19ESUFHTk9TVElDX0lH Tk9SRV9BTExPQ19TSVpFX0xBUkdFUl9USEFOCisjICBlbmRpZgorIyAgZGVmaW5lIEpFTUFMTE9D X0RJQUdOT1NUSUNfRElTQUJMRV9TUFVSSU9VUyBcCisgIEpFTUFMTE9DX0RJQUdOT1NUSUNfUFVT SCBcCisgIEpFTUFMTE9DX0RJQUdOT1NUSUNfSUdOT1JFX1VOVVNFRF9QQVJBTUVURVIKKyNlbHNl CisjICBkZWZpbmUgSkVNQUxMT0NfRElBR05PU1RJQ19QVVNICisjICBkZWZpbmUgSkVNQUxMT0Nf RElBR05PU1RJQ19QT1AKKyMgIGRlZmluZSBKRU1BTExPQ19ESUFHTk9TVElDX0lHTk9SRShXKQor IyAgZGVmaW5lIEpFTUFMTE9DX0RJQUdOT1NUSUNfSUdOT1JFX01JU1NJTkdfU1RSVUNUX0ZJRUxE X0lOSVRJQUxJWkVSUworIyAgZGVmaW5lIEpFTUFMTE9DX0RJQUdOT1NUSUNfSUdOT1JFX1RZUEVf TElNSVRTCisjICBkZWZpbmUgSkVNQUxMT0NfRElBR05PU1RJQ19JR05PUkVfQUxMT0NfU0laRV9M QVJHRVJfVEhBTgorIyAgZGVmaW5lIEpFTUFMTE9DX0RJQUdOT1NUSUNfRElTQUJMRV9TUFVSSU9V UworI2VuZGlmCisKKy8qCisgKiBEaXNhYmxlcyBzcHVyaW91cyBkaWFnbm9zdGljcyBmb3IgYWxs IGhlYWRlcnMuICBTaW5jZSB0aGVzZSBoZWFkZXJzIGFyZSBub3QKKyAqIGluY2x1ZGVkIGJ5IHVz ZXJzIGRpcmVjdGx5LCBpdCBkb2VzIG5vdCBhZmZlY3QgdGhlaXIgZGlhZ25vc3RpYyBzZXR0aW5n cy4KKyAqLworSkVNQUxMT0NfRElBR05PU1RJQ19ESVNBQkxFX1NQVVJJT1VTCisKKyNlbmRpZiAv KiBKRU1BTExPQ19JTlRFUk5BTF9NQUNST1NfSCAqLwoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNl LTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvamVt YWxsb2NfaW50ZXJuYWxfdHlwZXMuaCBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9j LTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvamVtYWxsb2NfaW50ZXJuYWxfdHlwZXMu aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MmMyYjU5Ci0tLSAvZGV2L251 bGwKKysrIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9q ZW1hbGxvYy9pbnRlcm5hbC9qZW1hbGxvY19pbnRlcm5hbF90eXBlcy5oCkBAIC0wLDAgKzEsMTMw IEBACisjaWZuZGVmIEpFTUFMTE9DX0lOVEVSTkFMX1RZUEVTX0gKKyNkZWZpbmUgSkVNQUxMT0Nf SU5URVJOQUxfVFlQRVNfSAorCisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvcXVhbnR1bS5o IgorCisvKiBQcm9jZXNzb3IgLyBjb3JlIGlkIHR5cGUuICovCit0eXBlZGVmIGludCBtYWxsb2Nf Y3B1aWRfdDsKKworLyogV2hlbiByZWFsbG9jKG5vbi1udWxsLXB0ciwgMCkgaXMgY2FsbGVkLCB3 aGF0IGhhcHBlbnM/ICovCitlbnVtIHplcm9fcmVhbGxvY19hY3Rpb25fZSB7CisJLyogUmVhbGxv YyhwdHIsIDApIGlzIGZyZWUocHRyKTsgcmV0dXJuIG1hbGxvYygwKTsgKi8KKwl6ZXJvX3JlYWxs b2NfYWN0aW9uX2FsbG9jID0gMCwKKwkvKiBSZWFsbG9jKHB0ciwgMCkgaXMgZnJlZShwdHIpOyAq LworCXplcm9fcmVhbGxvY19hY3Rpb25fZnJlZSA9IDEsCisJLyogUmVhbGxvYyhwdHIsIDApIGFi b3J0cy4gKi8KKwl6ZXJvX3JlYWxsb2NfYWN0aW9uX2Fib3J0ID0gMgorfTsKK3R5cGVkZWYgZW51 bSB6ZXJvX3JlYWxsb2NfYWN0aW9uX2UgemVyb19yZWFsbG9jX2FjdGlvbl90OworCisvKiBTaWdu YXR1cmUgb2Ygd3JpdGUgY2FsbGJhY2suICovCit0eXBlZGVmIHZvaWQgKHdyaXRlX2NiX3QpKHZv aWQgKiwgY29uc3QgY2hhciAqKTsKKworZW51bSBtYWxsb2NfaW5pdF9lIHsKKwltYWxsb2NfaW5p dF91bmluaXRpYWxpemVkCT0gMywKKwltYWxsb2NfaW5pdF9hMF9pbml0aWFsaXplZAk9IDIsCisJ bWFsbG9jX2luaXRfcmVjdXJzaWJsZQkJPSAxLAorCW1hbGxvY19pbml0X2luaXRpYWxpemVkCQk9 IDAgLyogQ29tbW9uIGNhc2UgLS0+IGpuei4gKi8KK307Cit0eXBlZGVmIGVudW0gbWFsbG9jX2lu aXRfZSBtYWxsb2NfaW5pdF90OworCisvKgorICogRmxhZ3MgYml0czoKKyAqCisgKiBhOiBhcmVu YQorICogdDogdGNhY2hlCisgKiAwOiB1bnVzZWQKKyAqIHo6IHplcm8KKyAqIG46IGFsaWdubWVu dAorICoKKyAqIGFhYWFhYWFhIGFhYWF0dHR0IHR0dHR0dHR0IDB6bm5ubm5uCisgKi8KKyNkZWZp bmUgTUFMTE9DWF9BUkVOQV9CSVRTCTEyCisjZGVmaW5lIE1BTExPQ1hfVENBQ0hFX0JJVFMJMTIK KyNkZWZpbmUgTUFMTE9DWF9MR19BTElHTl9CSVRTCTYKKyNkZWZpbmUgTUFMTE9DWF9BUkVOQV9T SElGVAkyMAorI2RlZmluZSBNQUxMT0NYX1RDQUNIRV9TSElGVAk4CisjZGVmaW5lIE1BTExPQ1hf QVJFTkFfTUFTSyBcCisgICAgKCgoMSA8PCBNQUxMT0NYX0FSRU5BX0JJVFMpIC0gMSkgPDwgTUFM TE9DWF9BUkVOQV9TSElGVCkKKy8qIE5COiBBcmVuYSBpbmRleCBiaWFzIGRlY3JlYXNlcyB0aGUg bWF4aW11bSBudW1iZXIgb2YgYXJlbmFzIGJ5IDEuICovCisjZGVmaW5lIE1BTExPQ1hfQVJFTkFf TElNSVQJKCgxIDw8IE1BTExPQ1hfQVJFTkFfQklUUykgLSAxKQorI2RlZmluZSBNQUxMT0NYX1RD QUNIRV9NQVNLIFwKKyAgICAoKCgxIDw8IE1BTExPQ1hfVENBQ0hFX0JJVFMpIC0gMSkgPDwgTUFM TE9DWF9UQ0FDSEVfU0hJRlQpCisjZGVmaW5lIE1BTExPQ1hfVENBQ0hFX01BWAkoKDEgPDwgTUFM TE9DWF9UQ0FDSEVfQklUUykgLSAzKQorI2RlZmluZSBNQUxMT0NYX0xHX0FMSUdOX01BU0sJKCgx IDw8IE1BTExPQ1hfTEdfQUxJR05fQklUUykgLSAxKQorLyogVXNlIE1BTExPQ1hfQUxJR05fR0VU KCkgaWYgYWxpZ25tZW50IG1heSBub3QgYmUgc3BlY2lmaWVkIGluIGZsYWdzLiAqLworI2RlZmlu ZSBNQUxMT0NYX0FMSUdOX0dFVF9TUEVDSUZJRUQoZmxhZ3MpCQkJCVwKKyAgICAoWlUoMSkgPDwg KGZsYWdzICYgTUFMTE9DWF9MR19BTElHTl9NQVNLKSkKKyNkZWZpbmUgTUFMTE9DWF9BTElHTl9H RVQoZmxhZ3MpCQkJCQlcCisgICAgKE1BTExPQ1hfQUxJR05fR0VUX1NQRUNJRklFRChmbGFncykg JiAoU0laRV9UX01BWC0xKSkKKyNkZWZpbmUgTUFMTE9DWF9aRVJPX0dFVChmbGFncykJCQkJCQlc CisgICAgKChib29sKShmbGFncyAmIE1BTExPQ1hfWkVSTykpCisKKyNkZWZpbmUgTUFMTE9DWF9U Q0FDSEVfR0VUKGZsYWdzKQkJCQkJXAorICAgICgoKHVuc2lnbmVkKSgoZmxhZ3MgJiBNQUxMT0NY X1RDQUNIRV9NQVNLKSA+PiBNQUxMT0NYX1RDQUNIRV9TSElGVCkpIC0gMikKKyNkZWZpbmUgTUFM TE9DWF9BUkVOQV9HRVQoZmxhZ3MpCQkJCQlcCisgICAgKCgodW5zaWduZWQpKCgodW5zaWduZWQp ZmxhZ3MpID4+IE1BTExPQ1hfQVJFTkFfU0hJRlQpKSAtIDEpCisKKy8qIFNtYWxsZXN0IHNpemUg Y2xhc3MgdG8gc3VwcG9ydC4gKi8KKyNkZWZpbmUgVElOWV9NSU4JCSgxVSA8PCBMR19USU5ZX01J TikKKworI2RlZmluZSBMT05HCQkJKChzaXplX3QpKDFVIDw8IExHX1NJWkVPRl9MT05HKSkKKyNk ZWZpbmUgTE9OR19NQVNLCQkoTE9ORyAtIDEpCisKKy8qIFJldHVybiB0aGUgc21hbGxlc3QgbG9u ZyBtdWx0aXBsZSB0aGF0IGlzID49IGEuICovCisjZGVmaW5lIExPTkdfQ0VJTElORyhhKQkJCQkJ CQlcCisJKCgoYSkgKyBMT05HX01BU0spICYgfkxPTkdfTUFTSykKKworI2RlZmluZSBTSVpFT0Zf UFRSCQkoMVUgPDwgTEdfU0laRU9GX1BUUikKKyNkZWZpbmUgUFRSX01BU0sJCShTSVpFT0ZfUFRS IC0gMSkKKworLyogUmV0dXJuIHRoZSBzbWFsbGVzdCAodm9pZCAqKSBtdWx0aXBsZSB0aGF0IGlz ID49IGEuICovCisjZGVmaW5lIFBUUl9DRUlMSU5HKGEpCQkJCQkJCVwKKwkoKChhKSArIFBUUl9N QVNLKSAmIH5QVFJfTUFTSykKKworLyoKKyAqIE1heGltdW0gc2l6ZSBvZiBMMSBjYWNoZSBsaW5l LiAgVGhpcyBpcyB1c2VkIHRvIGF2b2lkIGNhY2hlIGxpbmUgYWxpYXNpbmcuCisgKiBJbiBhZGRp dGlvbiwgdGhpcyBjb250cm9scyB0aGUgc3BhY2luZyBvZiBjYWNoZWxpbmUtc3BhY2VkIHNpemUg Y2xhc3Nlcy4KKyAqCisgKiBDQUNIRUxJTkUgY2Fubm90IGJlIGJhc2VkIG9uIExHX0NBQ0hFTElO RSBiZWNhdXNlIF9fZGVjbHNwZWMoYWxpZ24oKSkgY2FuCisgKiBvbmx5IGhhbmRsZSByYXcgY29u c3RhbnRzLgorICovCisjZGVmaW5lIExHX0NBQ0hFTElORQkJNgorI2RlZmluZSBDQUNIRUxJTkUJ CTY0CisjZGVmaW5lIENBQ0hFTElORV9NQVNLCQkoQ0FDSEVMSU5FIC0gMSkKKworLyogUmV0dXJu IHRoZSBzbWFsbGVzdCBjYWNoZWxpbmUgbXVsdGlwbGUgdGhhdCBpcyA+PSBzLiAqLworI2RlZmlu ZSBDQUNIRUxJTkVfQ0VJTElORyhzKQkJCQkJCVwKKwkoKChzKSArIENBQ0hFTElORV9NQVNLKSAm IH5DQUNIRUxJTkVfTUFTSykKKworLyogUmV0dXJuIHRoZSBuZWFyZXN0IGFsaWduZWQgYWRkcmVz cyBhdCBvciBiZWxvdyBhLiAqLworI2RlZmluZSBBTElHTk1FTlRfQUREUjJCQVNFKGEsIGFsaWdu bWVudCkJCQkJXAorCSgodm9pZCAqKSgodWludHB0cl90KShhKSAmICgofihhbGlnbm1lbnQpKSAr IDEpKSkKKworLyogUmV0dXJuIHRoZSBvZmZzZXQgYmV0d2VlbiBhIGFuZCB0aGUgbmVhcmVzdCBh bGlnbmVkIGFkZHJlc3MgYXQgb3IgYmVsb3cgYS4gKi8KKyNkZWZpbmUgQUxJR05NRU5UX0FERFIy T0ZGU0VUKGEsIGFsaWdubWVudCkJCQkJXAorCSgoc2l6ZV90KSgodWludHB0cl90KShhKSAmIChh bGlnbm1lbnQgLSAxKSkpCisKKy8qIFJldHVybiB0aGUgc21hbGxlc3QgYWxpZ25tZW50IG11bHRp cGxlIHRoYXQgaXMgPj0gcy4gKi8KKyNkZWZpbmUgQUxJR05NRU5UX0NFSUxJTkcocywgYWxpZ25t ZW50KQkJCQkJXAorCSgoKHMpICsgKGFsaWdubWVudCAtIDEpKSAmICgofihhbGlnbm1lbnQpKSAr IDEpKQorCisvKiBEZWNsYXJlIGEgdmFyaWFibGUtbGVuZ3RoIGFycmF5LiAqLworI2lmIF9fU1RE Q19WRVJTSU9OX18gPCAxOTk5MDFMCisjICBpZmRlZiBfTVNDX1ZFUgorIyAgICBpbmNsdWRlIDxt YWxsb2MuaD4KKyMgICAgZGVmaW5lIGFsbG9jYSBfYWxsb2NhCisjICBlbHNlCisjICAgIGlmZGVm IEpFTUFMTE9DX0hBU19BTExPQ0FfSAorIyAgICAgIGluY2x1ZGUgPGFsbG9jYS5oPgorIyAgICBl bHNlCisjICAgICAgaW5jbHVkZSA8c3RkbGliLmg+CisjICAgIGVuZGlmCisjICBlbmRpZgorIyAg ZGVmaW5lIFZBUklBQkxFX0FSUkFZKHR5cGUsIG5hbWUsIGNvdW50KSBcCisJdHlwZSAqbmFtZSA9 IGFsbG9jYShzaXplb2YodHlwZSkgKiAoY291bnQpKQorI2Vsc2UKKyMgIGRlZmluZSBWQVJJQUJM RV9BUlJBWSh0eXBlLCBuYW1lLCBjb3VudCkgdHlwZSBuYW1lWyhjb3VudCldCisjZW5kaWYKKwor I2VuZGlmIC8qIEpFTUFMTE9DX0lOVEVSTkFMX1RZUEVTX0ggKi8KCmRpZmYgLS1naXQgYS8zODkt ZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVy bmFsL2plbWFsbG9jX3ByZWFtYmxlLmguaW4gYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1h bGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL2plbWFsbG9jX3ByZWFtYmxlLmgu aW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWNlNzdkOQotLS0gL2Rldi9u dWxsCisrKyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUv amVtYWxsb2MvaW50ZXJuYWwvamVtYWxsb2NfcHJlYW1ibGUuaC5pbgpAQCAtMCwwICsxLDI2MyBA QAorI2lmbmRlZiBKRU1BTExPQ19QUkVBTUJMRV9ICisjZGVmaW5lIEpFTUFMTE9DX1BSRUFNQkxF X0gKKworI2luY2x1ZGUgImplbWFsbG9jX2ludGVybmFsX2RlZnMuaCIKKyNpbmNsdWRlICJqZW1h bGxvYy9pbnRlcm5hbC9qZW1hbGxvY19pbnRlcm5hbF9kZWNscy5oIgorCisjaWYgZGVmaW5lZChK RU1BTExPQ19VVFJBQ0UpIHx8IGRlZmluZWQoSkVNQUxMT0NfVVRSQUNFX0xBQkVMKQorI2luY2x1 ZGUgPHN5cy9rdHJhY2UuaD4KKyMgIGlmIGRlZmluZWQoSkVNQUxMT0NfVVRSQUNFKQorIyAgICBk ZWZpbmUgVVRSQUNFX0NBTEwocCwgbCkgdXRyYWNlKHAsIGwpCisjICBlbHNlCisjICAgIGRlZmlu ZSBVVFJBQ0VfQ0FMTChwLCBsKSB1dHJhY2UoImplbWFsbG9jX3Byb2Nlc3MiLCBwLCBsKQorIyAg ICBkZWZpbmUgSkVNQUxMT0NfVVRSQUNFCisjICBlbmRpZgorI2VuZGlmCisKKyNkZWZpbmUgSkVN QUxMT0NfTk9fREVNQU5HTEUKKyNpZmRlZiBKRU1BTExPQ19KRVQKKyMgIHVuZGVmIEpFTUFMTE9D X0lTX01BTExPQworIyAgZGVmaW5lIEpFTUFMTE9DX04obikgamV0XyMjbgorIyAgaW5jbHVkZSAi amVtYWxsb2MvaW50ZXJuYWwvcHVibGljX25hbWVzcGFjZS5oIgorIyAgZGVmaW5lIEpFTUFMTE9D X05PX1JFTkFNRQorIyAgaW5jbHVkZSAiLi4vamVtYWxsb2NAaW5zdGFsbF9zdWZmaXhALmgiCisj ICB1bmRlZiBKRU1BTExPQ19OT19SRU5BTUUKKyNlbHNlCisjICBkZWZpbmUgSkVNQUxMT0NfTihu KSBAcHJpdmF0ZV9uYW1lc3BhY2VAIyNuCisjICBpbmNsdWRlICIuLi9qZW1hbGxvY0BpbnN0YWxs X3N1ZmZpeEAuaCIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChKRU1BTExPQ19PU0FUT01JQykKKyNp bmNsdWRlIDxsaWJrZXJuL09TQXRvbWljLmg+CisjZW5kaWYKKworI2lmZGVmIEpFTUFMTE9DX1pP TkUKKyNpbmNsdWRlIDxtYWNoL21hY2hfZXJyb3IuaD4KKyNpbmNsdWRlIDxtYWNoL21hY2hfaW5p dC5oPgorI2luY2x1ZGUgPG1hY2gvdm1fbWFwLmg+CisjZW5kaWYKKworI2luY2x1ZGUgImplbWFs bG9jL2ludGVybmFsL2plbWFsbG9jX2ludGVybmFsX21hY3Jvcy5oIgorCisvKgorICogTm90ZSB0 aGF0IHRoZSBvcmRlcmluZyBtYXR0ZXJzIGhlcmU7IHRoZSBob29rIGl0c2VsZiBpcyBuYW1lLW1h bmdsZWQuICBXZQorICogd2FudCB0aGUgaW5jbHVzaW9uIG9mIGhvb2tzIHRvIGhhcHBlbiBlYXJs eSwgc28gdGhhdCB3ZSBob29rIGFzIG11Y2ggYXMKKyAqIHBvc3NpYmxlLgorICovCisjaWZuZGVm IEpFTUFMTE9DX05PX1BSSVZBVEVfTkFNRVNQQUNFCisjICBpZm5kZWYgSkVNQUxMT0NfSkVUCisj ICAgIGluY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL3ByaXZhdGVfbmFtZXNwYWNlLmgiCisjICBl bHNlCisjICAgIGluY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL3ByaXZhdGVfbmFtZXNwYWNlX2pl dC5oIgorIyAgZW5kaWYKKyNlbmRpZgorI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL3Rlc3Rf aG9va3MuaCIKKworI2lmZGVmIEpFTUFMTE9DX0RFRklORV9NQURWSVNFX0ZSRUUKKyMgIGRlZmlu ZSBKRU1BTExPQ19NQURWX0ZSRUUgOAorI2VuZGlmCisKK3N0YXRpYyBjb25zdCBib29sIGNvbmZp Z19kZWJ1ZyA9CisjaWZkZWYgSkVNQUxMT0NfREVCVUcKKyAgICB0cnVlCisjZWxzZQorICAgIGZh bHNlCisjZW5kaWYKKyAgICA7CitzdGF0aWMgY29uc3QgYm9vbCBoYXZlX2RzcyA9CisjaWZkZWYg SkVNQUxMT0NfRFNTCisgICAgdHJ1ZQorI2Vsc2UKKyAgICBmYWxzZQorI2VuZGlmCisgICAgOwor c3RhdGljIGNvbnN0IGJvb2wgaGF2ZV9tYWR2aXNlX2h1Z2UgPQorI2lmZGVmIEpFTUFMTE9DX0hB VkVfTUFEVklTRV9IVUdFCisgICAgdHJ1ZQorI2Vsc2UKKyAgICBmYWxzZQorI2VuZGlmCisgICAg Oworc3RhdGljIGNvbnN0IGJvb2wgY29uZmlnX2ZpbGwgPQorI2lmZGVmIEpFTUFMTE9DX0ZJTEwK KyAgICB0cnVlCisjZWxzZQorICAgIGZhbHNlCisjZW5kaWYKKyAgICA7CitzdGF0aWMgY29uc3Qg Ym9vbCBjb25maWdfbGF6eV9sb2NrID0KKyNpZmRlZiBKRU1BTExPQ19MQVpZX0xPQ0sKKyAgICB0 cnVlCisjZWxzZQorICAgIGZhbHNlCisjZW5kaWYKKyAgICA7CitzdGF0aWMgY29uc3QgY2hhciAq IGNvbnN0IGNvbmZpZ19tYWxsb2NfY29uZiA9IEpFTUFMTE9DX0NPTkZJR19NQUxMT0NfQ09ORjsK K3N0YXRpYyBjb25zdCBib29sIGNvbmZpZ19wcm9mID0KKyNpZmRlZiBKRU1BTExPQ19QUk9GCisg ICAgdHJ1ZQorI2Vsc2UKKyAgICBmYWxzZQorI2VuZGlmCisgICAgOworc3RhdGljIGNvbnN0IGJv b2wgY29uZmlnX3Byb2ZfbGliZ2NjID0KKyNpZmRlZiBKRU1BTExPQ19QUk9GX0xJQkdDQworICAg IHRydWUKKyNlbHNlCisgICAgZmFsc2UKKyNlbmRpZgorICAgIDsKK3N0YXRpYyBjb25zdCBib29s IGNvbmZpZ19wcm9mX2xpYnVud2luZCA9CisjaWZkZWYgSkVNQUxMT0NfUFJPRl9MSUJVTldJTkQK KyAgICB0cnVlCisjZWxzZQorICAgIGZhbHNlCisjZW5kaWYKKyAgICA7CitzdGF0aWMgY29uc3Qg Ym9vbCBtYXBzX2NvYWxlc2NlID0KKyNpZmRlZiBKRU1BTExPQ19NQVBTX0NPQUxFU0NFCisgICAg dHJ1ZQorI2Vsc2UKKyAgICBmYWxzZQorI2VuZGlmCisgICAgOworc3RhdGljIGNvbnN0IGJvb2wg Y29uZmlnX3N0YXRzID0KKyNpZmRlZiBKRU1BTExPQ19TVEFUUworICAgIHRydWUKKyNlbHNlCisg ICAgZmFsc2UKKyNlbmRpZgorICAgIDsKK3N0YXRpYyBjb25zdCBib29sIGNvbmZpZ190bHMgPQor I2lmZGVmIEpFTUFMTE9DX1RMUworICAgIHRydWUKKyNlbHNlCisgICAgZmFsc2UKKyNlbmRpZgor ICAgIDsKK3N0YXRpYyBjb25zdCBib29sIGNvbmZpZ191dHJhY2UgPQorI2lmZGVmIEpFTUFMTE9D X1VUUkFDRQorICAgIHRydWUKKyNlbHNlCisgICAgZmFsc2UKKyNlbmRpZgorICAgIDsKK3N0YXRp YyBjb25zdCBib29sIGNvbmZpZ194bWFsbG9jID0KKyNpZmRlZiBKRU1BTExPQ19YTUFMTE9DCisg ICAgdHJ1ZQorI2Vsc2UKKyAgICBmYWxzZQorI2VuZGlmCisgICAgOworc3RhdGljIGNvbnN0IGJv b2wgY29uZmlnX2NhY2hlX29ibGl2aW91cyA9CisjaWZkZWYgSkVNQUxMT0NfQ0FDSEVfT0JMSVZJ T1VTCisgICAgdHJ1ZQorI2Vsc2UKKyAgICBmYWxzZQorI2VuZGlmCisgICAgOworLyoKKyAqIFVu ZG9jdW1lbnRlZCwgZm9yIGplbWFsbG9jIGRldmVsb3BtZW50IHVzZSBvbmx5IGF0IHRoZSBtb21l bnQuICBTZWUgdGhlIG5vdGUKKyAqIGluIGplbWFsbG9jL2ludGVybmFsL2xvZy5oLgorICovCitz dGF0aWMgY29uc3QgYm9vbCBjb25maWdfbG9nID0KKyNpZmRlZiBKRU1BTExPQ19MT0cKKyAgICB0 cnVlCisjZWxzZQorICAgIGZhbHNlCisjZW5kaWYKKyAgICA7CisvKgorICogQXJlIGV4dHJhIHNh ZmV0eSBjaGVja3MgZW5hYmxlZDsgdGhpbmdzIGxpa2UgY2hlY2tpbmcgdGhlIHNpemUgb2Ygc2l6 ZWQKKyAqIGRlYWxsb2NhdGlvbnMsIGRvdWJsZS1mcmVlcywgZXRjLgorICovCitzdGF0aWMgY29u c3QgYm9vbCBjb25maWdfb3B0X3NhZmV0eV9jaGVja3MgPQorI2lmZGVmIEpFTUFMTE9DX09QVF9T QUZFVFlfQ0hFQ0tTCisgICAgdHJ1ZQorI2VsaWYgZGVmaW5lZChKRU1BTExPQ19ERUJVRykKKyAg ICAvKgorICAgICAqIFRoaXMgbGV0cyB1cyBvbmx5IGd1YXJkIHNhZmV0eSBjaGVja3MgYnkgb25l IGZsYWcgaW5zdGVhZCBvZiB0d287IGZhc3QKKyAgICAgKiBjaGVja3MgY2FuIGd1YXJkIHNvbGVs eSBieSBjb25maWdfb3B0X3NhZmV0eV9jaGVja3MgYW5kIHJ1biBpbiBkZWJ1ZyBtb2RlCisgICAg ICogdG9vLgorICAgICAqLworICAgIHRydWUKKyNlbHNlCisgICAgZmFsc2UKKyNlbmRpZgorICAg IDsKKworLyoKKyAqIEV4dHJhIGRlYnVnZ2luZyBvZiBzaXplZCBkZWFsbG9jYXRpb25zIHRvbyBv bmVyb3VzIHRvIGJlIGluY2x1ZGVkIGluIHRoZQorICogZ2VuZXJhbCBzYWZldHkgY2hlY2tzLgor ICovCitzdGF0aWMgY29uc3QgYm9vbCBjb25maWdfb3B0X3NpemVfY2hlY2tzID0KKyNpZiBkZWZp bmVkKEpFTUFMTE9DX09QVF9TSVpFX0NIRUNLUykgfHwgZGVmaW5lZChKRU1BTExPQ19ERUJVRykK KyAgICB0cnVlCisjZWxzZQorICAgIGZhbHNlCisjZW5kaWYKKyAgICA7CisKK3N0YXRpYyBjb25z dCBib29sIGNvbmZpZ191YWZfZGV0ZWN0aW9uID0KKyNpZiBkZWZpbmVkKEpFTUFMTE9DX1VBRl9E RVRFQ1RJT04pIHx8IGRlZmluZWQoSkVNQUxMT0NfREVCVUcpCisgICAgdHJ1ZQorI2Vsc2UKKyAg ICBmYWxzZQorI2VuZGlmCisgICAgOworCisvKiBXaGV0aGVyIG9yIG5vdCB0aGUgQysrIGV4dGVu c2lvbnMgYXJlIGVuYWJsZWQuICovCitzdGF0aWMgY29uc3QgYm9vbCBjb25maWdfZW5hYmxlX2N4 eCA9CisjaWZkZWYgSkVNQUxMT0NfRU5BQkxFX0NYWAorICAgIHRydWUKKyNlbHNlCisgICAgZmFs c2UKKyNlbmRpZgorOworCisjaWYgZGVmaW5lZChfV0lOMzIpIHx8IGRlZmluZWQoSkVNQUxMT0Nf SEFWRV9TQ0hFRF9HRVRDUFUpCisvKiBDdXJyZW50bHkgcGVyY3B1X2FyZW5hIGRlcGVuZHMgb24g c2NoZWRfZ2V0Y3B1LiAqLworI2RlZmluZSBKRU1BTExPQ19QRVJDUFVfQVJFTkEKKyNlbmRpZgor c3RhdGljIGNvbnN0IGJvb2wgaGF2ZV9wZXJjcHVfYXJlbmEgPQorI2lmZGVmIEpFTUFMTE9DX1BF UkNQVV9BUkVOQQorICAgIHRydWUKKyNlbHNlCisgICAgZmFsc2UKKyNlbmRpZgorICAgIDsKKy8q CisgKiBVbmRvY3VtZW50ZWQsIGFuZCBub3QgcmVjb21tZW5kZWQ7IHRoZSBhcHBsaWNhdGlvbiBz aG91bGQgdGFrZSBmdWxsCisgKiByZXNwb25zaWJpbGl0eSBmb3IgdHJhY2tpbmcgcHJvdmVuYW5j ZS4KKyAqLworc3RhdGljIGNvbnN0IGJvb2wgZm9yY2VfaXZzYWxsb2MgPQorI2lmZGVmIEpFTUFM TE9DX0ZPUkNFX0lWU0FMTE9DCisgICAgdHJ1ZQorI2Vsc2UKKyAgICBmYWxzZQorI2VuZGlmCisg ICAgOworc3RhdGljIGNvbnN0IGJvb2wgaGF2ZV9iYWNrZ3JvdW5kX3RocmVhZCA9CisjaWZkZWYg SkVNQUxMT0NfQkFDS0dST1VORF9USFJFQUQKKyAgICB0cnVlCisjZWxzZQorICAgIGZhbHNlCisj ZW5kaWYKKyAgICA7CitzdGF0aWMgY29uc3QgYm9vbCBjb25maWdfaGlnaF9yZXNfdGltZXIgPQor I2lmZGVmIEpFTUFMTE9DX0hBVkVfQ0xPQ0tfUkVBTFRJTUUKKyAgICB0cnVlCisjZWxzZQorICAg IGZhbHNlCisjZW5kaWYKKyAgICA7CisKK3N0YXRpYyBjb25zdCBib29sIGhhdmVfbWVtY250bCA9 CisjaWZkZWYgSkVNQUxMT0NfSEFWRV9NRU1DTlRMCisgICAgdHJ1ZQorI2Vsc2UKKyAgICBmYWxz ZQorI2VuZGlmCisgICAgOworCisjZW5kaWYgLyogSkVNQUxMT0NfUFJFQU1CTEVfSCAqLwoKZGlm ZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUv amVtYWxsb2MvaW50ZXJuYWwvbGFyZ2VfZXh0ZXJucy5oIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVp bGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9sYXJnZV9leHRlcm5z LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGUwOTEyMgotLS0gL2Rldi9u dWxsCisrKyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUv amVtYWxsb2MvaW50ZXJuYWwvbGFyZ2VfZXh0ZXJucy5oCkBAIC0wLDAgKzEsMjQgQEAKKyNpZm5k ZWYgSkVNQUxMT0NfSU5URVJOQUxfTEFSR0VfRVhURVJOU19ICisjZGVmaW5lIEpFTUFMTE9DX0lO VEVSTkFMX0xBUkdFX0VYVEVSTlNfSAorCisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvaG9v ay5oIgorCit2b2lkICpsYXJnZV9tYWxsb2ModHNkbl90ICp0c2RuLCBhcmVuYV90ICphcmVuYSwg c2l6ZV90IHVzaXplLCBib29sIHplcm8pOwordm9pZCAqbGFyZ2VfcGFsbG9jKHRzZG5fdCAqdHNk biwgYXJlbmFfdCAqYXJlbmEsIHNpemVfdCB1c2l6ZSwgc2l6ZV90IGFsaWdubWVudCwKKyAgICBi b29sIHplcm8pOworYm9vbCBsYXJnZV9yYWxsb2Nfbm9fbW92ZSh0c2RuX3QgKnRzZG4sIGVkYXRh X3QgKmVkYXRhLCBzaXplX3QgdXNpemVfbWluLAorICAgIHNpemVfdCB1c2l6ZV9tYXgsIGJvb2wg emVybyk7Cit2b2lkICpsYXJnZV9yYWxsb2ModHNkbl90ICp0c2RuLCBhcmVuYV90ICphcmVuYSwg dm9pZCAqcHRyLCBzaXplX3QgdXNpemUsCisgICAgc2l6ZV90IGFsaWdubWVudCwgYm9vbCB6ZXJv LCB0Y2FjaGVfdCAqdGNhY2hlLAorICAgIGhvb2tfcmFsbG9jX2FyZ3NfdCAqaG9va19hcmdzKTsK Kwordm9pZCBsYXJnZV9kYWxsb2NfcHJlcF9sb2NrZWQodHNkbl90ICp0c2RuLCBlZGF0YV90ICpl ZGF0YSk7Cit2b2lkIGxhcmdlX2RhbGxvY19maW5pc2godHNkbl90ICp0c2RuLCBlZGF0YV90ICpl ZGF0YSk7Cit2b2lkIGxhcmdlX2RhbGxvYyh0c2RuX3QgKnRzZG4sIGVkYXRhX3QgKmVkYXRhKTsK K3NpemVfdCBsYXJnZV9zYWxsb2ModHNkbl90ICp0c2RuLCBjb25zdCBlZGF0YV90ICplZGF0YSk7 Cit2b2lkIGxhcmdlX3Byb2ZfaW5mb19nZXQodHNkX3QgKnRzZCwgZWRhdGFfdCAqZWRhdGEsIHBy b2ZfaW5mb190ICpwcm9mX2luZm8sCisgICAgYm9vbCByZXNldF9yZWNlbnQpOwordm9pZCBsYXJn ZV9wcm9mX3RjdHhfcmVzZXQoZWRhdGFfdCAqZWRhdGEpOwordm9pZCBsYXJnZV9wcm9mX2luZm9f c2V0KGVkYXRhX3QgKmVkYXRhLCBwcm9mX3RjdHhfdCAqdGN0eCwgc2l6ZV90IHNpemUpOworCisj ZW5kaWYgLyogSkVNQUxMT0NfSU5URVJOQUxfTEFSR0VfRVhURVJOU19IICovCgpkaWZmIC0tZ2l0 IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxv Yy9pbnRlcm5hbC9sb2NrZWRpbnQuaCBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9j LTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvbG9ja2VkaW50LmgKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDAyMGViZQotLS0gL2Rldi9udWxsCisrKyBiLzM4OS1k cy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJu YWwvbG9ja2VkaW50LmgKQEAgLTAsMCArMSwyMDQgQEAKKyNpZm5kZWYgSkVNQUxMT0NfSU5URVJO QUxfTE9DS0VESU5UX0gKKyNkZWZpbmUgSkVNQUxMT0NfSU5URVJOQUxfTE9DS0VESU5UX0gKKwor LyoKKyAqIEluIHRob3NlIGFyY2hpdGVjdHVyZXMgdGhhdCBzdXBwb3J0IDY0LWJpdCBhdG9taWNz LCB3ZSB1c2UgYXRvbWljIHVwZGF0ZXMgZm9yCisgKiBvdXIgNjQtYml0IHZhbHVlcy4gIE90aGVy d2lzZSwgd2UgdXNlIGEgcGxhaW4gdWludDY0X3QgYW5kIHN5bmNocm9uaXplCisgKiBleHRlcm5h bGx5LgorICovCisKK3R5cGVkZWYgc3RydWN0IGxvY2tlZF91NjRfcyBsb2NrZWRfdTY0X3Q7Cisj aWZkZWYgSkVNQUxMT0NfQVRPTUlDX1U2NAorc3RydWN0IGxvY2tlZF91NjRfcyB7CisJYXRvbWlj X3U2NF90IHZhbDsKK307CisjZWxzZQorLyogTXVzdCBob2xkIHRoZSBhc3NvY2lhdGVkIG11dGV4 LiAqLworc3RydWN0IGxvY2tlZF91NjRfcyB7CisJdWludDY0X3QgdmFsOworfTsKKyNlbmRpZgor Cit0eXBlZGVmIHN0cnVjdCBsb2NrZWRfenVfcyBsb2NrZWRfenVfdDsKK3N0cnVjdCBsb2NrZWRf enVfcyB7CisJYXRvbWljX3p1X3QgdmFsOworfTsKKworI2lmbmRlZiBKRU1BTExPQ19BVE9NSUNf VTY0CisjICBkZWZpbmUgTE9DS0VESU5UX01UWF9ERUNMQVJFKG5hbWUpIG1hbGxvY19tdXRleF90 IG5hbWU7CisjICBkZWZpbmUgTE9DS0VESU5UX01UWF9JTklUKG11LCBuYW1lLCByYW5rLCByYW5r X21vZGUpCQkJXAorICAgIG1hbGxvY19tdXRleF9pbml0KCYobXUpLCBuYW1lLCByYW5rLCByYW5r X21vZGUpCisjICBkZWZpbmUgTE9DS0VESU5UX01UWChtdHgpICgmKG10eCkpCisjICBkZWZpbmUg TE9DS0VESU5UX01UWF9MT0NLKHRzZG4sIG11KSBtYWxsb2NfbXV0ZXhfbG9jayh0c2RuLCAmKG11 KSkKKyMgIGRlZmluZSBMT0NLRURJTlRfTVRYX1VOTE9DSyh0c2RuLCBtdSkgbWFsbG9jX211dGV4 X3VubG9jayh0c2RuLCAmKG11KSkKKyMgIGRlZmluZSBMT0NLRURJTlRfTVRYX1BSRUZPUksodHNk biwgbXUpIG1hbGxvY19tdXRleF9wcmVmb3JrKHRzZG4sICYobXUpKQorIyAgZGVmaW5lIExPQ0tF RElOVF9NVFhfUE9TVEZPUktfUEFSRU5UKHRzZG4sIG11KQkJCVwKKyAgICBtYWxsb2NfbXV0ZXhf cG9zdGZvcmtfcGFyZW50KHRzZG4sICYobXUpKQorIyAgZGVmaW5lIExPQ0tFRElOVF9NVFhfUE9T VEZPUktfQ0hJTEQodHNkbiwgbXUpCQkJXAorICAgIG1hbGxvY19tdXRleF9wb3N0Zm9ya19jaGls ZCh0c2RuLCAmKG11KSkKKyNlbHNlCisjICBkZWZpbmUgTE9DS0VESU5UX01UWF9ERUNMQVJFKG5h bWUpCisjICBkZWZpbmUgTE9DS0VESU5UX01UWChtdHgpIE5VTEwKKyMgIGRlZmluZSBMT0NLRURJ TlRfTVRYX0lOSVQobXUsIG5hbWUsIHJhbmssIHJhbmtfbW9kZSkgZmFsc2UKKyMgIGRlZmluZSBM T0NLRURJTlRfTVRYX0xPQ0sodHNkbiwgbXUpCisjICBkZWZpbmUgTE9DS0VESU5UX01UWF9VTkxP Q0sodHNkbiwgbXUpCisjICBkZWZpbmUgTE9DS0VESU5UX01UWF9QUkVGT1JLKHRzZG4sIG11KQor IyAgZGVmaW5lIExPQ0tFRElOVF9NVFhfUE9TVEZPUktfUEFSRU5UKHRzZG4sIG11KQorIyAgZGVm aW5lIExPQ0tFRElOVF9NVFhfUE9TVEZPUktfQ0hJTEQodHNkbiwgbXUpCisjZW5kaWYKKworI2lm ZGVmIEpFTUFMTE9DX0FUT01JQ19VNjQKKyMgIGRlZmluZSBMT0NLRURJTlRfTVRYX0FTU0VSVF9J TlRFUk5BTCh0c2RuLCBtdHgpIGFzc2VydCgobXR4KSA9PSBOVUxMKQorI2Vsc2UKKyMgIGRlZmlu ZSBMT0NLRURJTlRfTVRYX0FTU0VSVF9JTlRFUk5BTCh0c2RuLCBtdHgpCQkJXAorICAgIG1hbGxv Y19tdXRleF9hc3NlcnRfb3duZXIodHNkbiwgKG10eCkpCisjZW5kaWYKKworc3RhdGljIGlubGlu ZSB1aW50NjRfdAorbG9ja2VkX3JlYWRfdTY0KHRzZG5fdCAqdHNkbiwgbWFsbG9jX211dGV4X3Qg Km10eCwgbG9ja2VkX3U2NF90ICpwKSB7CisJTE9DS0VESU5UX01UWF9BU1NFUlRfSU5URVJOQUwo dHNkbiwgbXR4KTsKKyNpZmRlZiBKRU1BTExPQ19BVE9NSUNfVTY0CisJcmV0dXJuIGF0b21pY19s b2FkX3U2NCgmcC0+dmFsLCBBVE9NSUNfUkVMQVhFRCk7CisjZWxzZQorCXJldHVybiBwLT52YWw7 CisjZW5kaWYKK30KKworc3RhdGljIGlubGluZSB2b2lkCitsb2NrZWRfaW5jX3U2NCh0c2RuX3Qg KnRzZG4sIG1hbGxvY19tdXRleF90ICptdHgsIGxvY2tlZF91NjRfdCAqcCwKKyAgICB1aW50NjRf dCB4KSB7CisJTE9DS0VESU5UX01UWF9BU1NFUlRfSU5URVJOQUwodHNkbiwgbXR4KTsKKyNpZmRl ZiBKRU1BTExPQ19BVE9NSUNfVTY0CisJYXRvbWljX2ZldGNoX2FkZF91NjQoJnAtPnZhbCwgeCwg QVRPTUlDX1JFTEFYRUQpOworI2Vsc2UKKwlwLT52YWwgKz0geDsKKyNlbmRpZgorfQorCitzdGF0 aWMgaW5saW5lIHZvaWQKK2xvY2tlZF9kZWNfdTY0KHRzZG5fdCAqdHNkbiwgbWFsbG9jX211dGV4 X3QgKm10eCwgbG9ja2VkX3U2NF90ICpwLAorICAgIHVpbnQ2NF90IHgpIHsKKwlMT0NLRURJTlRf TVRYX0FTU0VSVF9JTlRFUk5BTCh0c2RuLCBtdHgpOworI2lmZGVmIEpFTUFMTE9DX0FUT01JQ19V NjQKKwl1aW50NjRfdCByID0gYXRvbWljX2ZldGNoX3N1Yl91NjQoJnAtPnZhbCwgeCwgQVRPTUlD X1JFTEFYRUQpOworCWFzc2VydChyIC0geCA8PSByKTsKKyNlbHNlCisJcC0+dmFsIC09IHg7CisJ YXNzZXJ0KHAtPnZhbCArIHggPj0gcC0+dmFsKTsKKyNlbmRpZgorfQorCisvKiBJbmNyZW1lbnQg YW5kIHRha2UgbW9kdWx1cy4gIFJldHVybnMgd2hldGhlciB0aGUgbW9kdWxvIG1hZGUgYW55IGNo YW5nZS4gICovCitzdGF0aWMgaW5saW5lIGJvb2wKK2xvY2tlZF9pbmNfbW9kX3U2NCh0c2RuX3Qg KnRzZG4sIG1hbGxvY19tdXRleF90ICptdHgsIGxvY2tlZF91NjRfdCAqcCwKKyAgICBjb25zdCB1 aW50NjRfdCB4LCBjb25zdCB1aW50NjRfdCBtb2R1bHVzKSB7CisJTE9DS0VESU5UX01UWF9BU1NF UlRfSU5URVJOQUwodHNkbiwgbXR4KTsKKwl1aW50NjRfdCBiZWZvcmUsIGFmdGVyOworCWJvb2wg b3ZlcmZsb3c7CisjaWZkZWYgSkVNQUxMT0NfQVRPTUlDX1U2NAorCWJlZm9yZSA9IGF0b21pY19s b2FkX3U2NCgmcC0+dmFsLCBBVE9NSUNfUkVMQVhFRCk7CisJZG8geworCQlhZnRlciA9IGJlZm9y ZSArIHg7CisJCWFzc2VydChhZnRlciA+PSBiZWZvcmUpOworCQlvdmVyZmxvdyA9IChhZnRlciA+ PSBtb2R1bHVzKTsKKwkJaWYgKG92ZXJmbG93KSB7CisJCQlhZnRlciAlPSBtb2R1bHVzOworCQl9 CisJfSB3aGlsZSAoIWF0b21pY19jb21wYXJlX2V4Y2hhbmdlX3dlYWtfdTY0KCZwLT52YWwsICZi ZWZvcmUsIGFmdGVyLAorCSAgICBBVE9NSUNfUkVMQVhFRCwgQVRPTUlDX1JFTEFYRUQpKTsKKyNl bHNlCisJYmVmb3JlID0gcC0+dmFsOworCWFmdGVyID0gYmVmb3JlICsgeDsKKwlvdmVyZmxvdyA9 IChhZnRlciA+PSBtb2R1bHVzKTsKKwlpZiAob3ZlcmZsb3cpIHsKKwkJYWZ0ZXIgJT0gbW9kdWx1 czsKKwl9CisJcC0+dmFsID0gYWZ0ZXI7CisjZW5kaWYKKwlyZXR1cm4gb3ZlcmZsb3c7Cit9CisK Ky8qCisgKiBOb24tYXRvbWljYWxseSBzZXRzICpkc3QgKz0gc3JjLiAgKmRzdCBuZWVkcyBleHRl cm5hbCBzeW5jaHJvbml6YXRpb24uCisgKiBUaGlzIGxldHMgdXMgYXZvaWQgdGhlIGNvc3Qgb2Yg YSBmZXRjaF9hZGQgd2hlbiBpdHMgdW5uZWNlc3NhcnkgKG5vdGUgdGhhdAorICogdGhlIHR5cGVz IGhlcmUgYXJlIGF0b21pYykuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorbG9ja2VkX2luY191 NjRfdW5zeW5jaHJvbml6ZWQobG9ja2VkX3U2NF90ICpkc3QsIHVpbnQ2NF90IHNyYykgeworI2lm ZGVmIEpFTUFMTE9DX0FUT01JQ19VNjQKKwl1aW50NjRfdCBjdXJfZHN0ID0gYXRvbWljX2xvYWRf dTY0KCZkc3QtPnZhbCwgQVRPTUlDX1JFTEFYRUQpOworCWF0b21pY19zdG9yZV91NjQoJmRzdC0+ dmFsLCBzcmMgKyBjdXJfZHN0LCBBVE9NSUNfUkVMQVhFRCk7CisjZWxzZQorCWRzdC0+dmFsICs9 IHNyYzsKKyNlbmRpZgorfQorCitzdGF0aWMgaW5saW5lIHVpbnQ2NF90Citsb2NrZWRfcmVhZF91 NjRfdW5zeW5jaHJvbml6ZWQobG9ja2VkX3U2NF90ICpwKSB7CisjaWZkZWYgSkVNQUxMT0NfQVRP TUlDX1U2NAorCXJldHVybiBhdG9taWNfbG9hZF91NjQoJnAtPnZhbCwgQVRPTUlDX1JFTEFYRUQp OworI2Vsc2UKKwlyZXR1cm4gcC0+dmFsOworI2VuZGlmCit9CisKK3N0YXRpYyBpbmxpbmUgdm9p ZAorbG9ja2VkX2luaXRfdTY0X3Vuc3luY2hyb25pemVkKGxvY2tlZF91NjRfdCAqcCwgdWludDY0 X3QgeCkgeworI2lmZGVmIEpFTUFMTE9DX0FUT01JQ19VNjQKKwlhdG9taWNfc3RvcmVfdTY0KCZw LT52YWwsIHgsIEFUT01JQ19SRUxBWEVEKTsKKyNlbHNlCisJcC0+dmFsID0geDsKKyNlbmRpZgor fQorCitzdGF0aWMgaW5saW5lIHNpemVfdAorbG9ja2VkX3JlYWRfenUodHNkbl90ICp0c2RuLCBt YWxsb2NfbXV0ZXhfdCAqbXR4LCBsb2NrZWRfenVfdCAqcCkgeworCUxPQ0tFRElOVF9NVFhfQVNT RVJUX0lOVEVSTkFMKHRzZG4sIG10eCk7CisjaWZkZWYgSkVNQUxMT0NfQVRPTUlDX1U2NAorCXJl dHVybiBhdG9taWNfbG9hZF96dSgmcC0+dmFsLCBBVE9NSUNfUkVMQVhFRCk7CisjZWxzZQorCXJl dHVybiBhdG9taWNfbG9hZF96dSgmcC0+dmFsLCBBVE9NSUNfUkVMQVhFRCk7CisjZW5kaWYKK30K Kworc3RhdGljIGlubGluZSB2b2lkCitsb2NrZWRfaW5jX3p1KHRzZG5fdCAqdHNkbiwgbWFsbG9j X211dGV4X3QgKm10eCwgbG9ja2VkX3p1X3QgKnAsCisgICAgc2l6ZV90IHgpIHsKKwlMT0NLRURJ TlRfTVRYX0FTU0VSVF9JTlRFUk5BTCh0c2RuLCBtdHgpOworI2lmZGVmIEpFTUFMTE9DX0FUT01J Q19VNjQKKwlhdG9taWNfZmV0Y2hfYWRkX3p1KCZwLT52YWwsIHgsIEFUT01JQ19SRUxBWEVEKTsK KyNlbHNlCisJc2l6ZV90IGN1ciA9IGF0b21pY19sb2FkX3p1KCZwLT52YWwsIEFUT01JQ19SRUxB WEVEKTsKKwlhdG9taWNfc3RvcmVfenUoJnAtPnZhbCwgY3VyICsgeCwgQVRPTUlDX1JFTEFYRUQp OworI2VuZGlmCit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorbG9ja2VkX2RlY196dSh0c2RuX3Qg KnRzZG4sIG1hbGxvY19tdXRleF90ICptdHgsIGxvY2tlZF96dV90ICpwLAorICAgIHNpemVfdCB4 KSB7CisJTE9DS0VESU5UX01UWF9BU1NFUlRfSU5URVJOQUwodHNkbiwgbXR4KTsKKyNpZmRlZiBK RU1BTExPQ19BVE9NSUNfVTY0CisJc2l6ZV90IHIgPSBhdG9taWNfZmV0Y2hfc3ViX3p1KCZwLT52 YWwsIHgsIEFUT01JQ19SRUxBWEVEKTsKKwlhc3NlcnQociAtIHggPD0gcik7CisjZWxzZQorCXNp emVfdCBjdXIgPSBhdG9taWNfbG9hZF96dSgmcC0+dmFsLCBBVE9NSUNfUkVMQVhFRCk7CisJYXRv bWljX3N0b3JlX3p1KCZwLT52YWwsIGN1ciAtIHgsIEFUT01JQ19SRUxBWEVEKTsKKyNlbmRpZgor fQorCisvKiBMaWtlIHRoZSBfdTY0IHZhcmlhbnQsIG5lZWRzIGFuIGV4dGVybmFsbHkgc3luY2hy b25pemVkICpkc3QuICovCitzdGF0aWMgaW5saW5lIHZvaWQKK2xvY2tlZF9pbmNfenVfdW5zeW5j aHJvbml6ZWQobG9ja2VkX3p1X3QgKmRzdCwgc2l6ZV90IHNyYykgeworCXNpemVfdCBjdXJfZHN0 ID0gYXRvbWljX2xvYWRfenUoJmRzdC0+dmFsLCBBVE9NSUNfUkVMQVhFRCk7CisJYXRvbWljX3N0 b3JlX3p1KCZkc3QtPnZhbCwgc3JjICsgY3VyX2RzdCwgQVRPTUlDX1JFTEFYRUQpOworfQorCisv KgorICogVW5saWtlIHRoZSBfdTY0IHZhcmlhbnQsIHRoaXMgaXMgc2FmZSB0byBjYWxsIHVuY29u ZGl0aW9uYWxseS4KKyAqLworc3RhdGljIGlubGluZSBzaXplX3QKK2xvY2tlZF9yZWFkX2F0b21p Y196dShsb2NrZWRfenVfdCAqcCkgeworCXJldHVybiBhdG9taWNfbG9hZF96dSgmcC0+dmFsLCBB VE9NSUNfUkVMQVhFRCk7Cit9CisKKyNlbmRpZiAvKiBKRU1BTExPQ19JTlRFUk5BTF9MT0NLRURJ TlRfSCAqLwoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUu My4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvbG9nLmggYi8zODktZHMtYmFzZS0zLjMuMC1i dWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL2xvZy5oCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0MjA4NTgKLS0tIC9kZXYvbnVsbAorKysg Yi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9j L2ludGVybmFsL2xvZy5oCkBAIC0wLDAgKzEsMTE1IEBACisjaWZuZGVmIEpFTUFMTE9DX0lOVEVS TkFMX0xPR19ICisjZGVmaW5lIEpFTUFMTE9DX0lOVEVSTkFMX0xPR19ICisKKyNpbmNsdWRlICJq ZW1hbGxvYy9pbnRlcm5hbC9hdG9taWMuaCIKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9t YWxsb2NfaW8uaCIKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9tdXRleC5oIgorCisjaWZk ZWYgSkVNQUxMT0NfTE9HCisjICBkZWZpbmUgSkVNQUxMT0NfTE9HX1ZBUl9CVUZTSVpFIDEwMDAK KyNlbHNlCisjICBkZWZpbmUgSkVNQUxMT0NfTE9HX1ZBUl9CVUZTSVpFIDEKKyNlbmRpZgorCisj ZGVmaW5lIEpFTUFMTE9DX0xPR19CVUZTSVpFIDQwOTYKKworLyoKKyAqIFRoZSBsb2cgbWFsbG9j X2NvbmYgb3B0aW9uIGlzIGEgJ3wnLWRlbGltaXRlZCBsaXN0IG9mIGxvZ192YXIgbmFtZSBzZWdt ZW50cworICogd2hpY2ggc2hvdWxkIGJlIGxvZ2dlZC4gIFRoZSBuYW1lcyBhcmUgdGhlbXNlbHZl cyBoaWVyYXJjaGljYWwsIHdpdGggJy4nIGFzCisgKiB0aGUgZGVsaW1pdGVyIChhICJzZWdtZW50 IiBpcyBqdXN0IGEgcHJlZml4IGluIHRoZSBsb2cgbmFtZXNwYWNlKS4gIFNvLCBpZgorICogeW91 IGhhdmU6CisgKgorICogbG9nKCJhcmVuYSIsICJsb2cgbXNnIGZvciBhcmVuYSIpOyAvLyAxCisg KiBsb2coImFyZW5hLmEiLCAibG9nIG1zZyBmb3IgYXJlbmEuYSIpOyAvLyAyCisgKiBsb2coImFy ZW5hLmIiLCAibG9nIG1zZyBmb3IgYXJlbmEuYiIpOyAvLyAzCisgKiBsb2coImFyZW5hLmEuYSIs ICJsb2cgbXNnIGZvciBhcmVuYS5hLmEiKTsgLy8gNAorICogbG9nKCJleHRlbnQuYSIsICJsb2cg bXNnIGZvciBleHRlbnQuYSIpOyAvLyA1CisgKiBsb2coImV4dGVudC5iIiwgImxvZyBtc2cgZm9y IGV4dGVudC5iIik7IC8vIDYKKyAqCisgKiBBbmQgeW91ciBtYWxsb2NfY29uZiBvcHRpb24gaXMg ImxvZz1hcmVuYS5hfGV4dGVudCIsIHRoZW4gbGluZXMgMiwgNCwgNSwgYW5kCisgKiA2IHdpbGwg cHJpbnQgYXQgcnVudGltZS4gIFlvdSBjYW4gZW5hYmxlIGxvZ2dpbmcgZnJvbSBhbGwgbG9nIHZh cnMgYnkKKyAqIHdyaXRpbmcgImxvZz0uIi4KKyAqCisgKiBOb25lIG9mIHRoaXMgc2hvdWxkIGJl IHJlZ2FyZGVkIGFzIGEgc3RhYmxlIEFQSSBmb3IgcmlnaHQgbm93LiAgSXQncyBpbnRlbmRlZAor ICogYXMgYSBkZWJ1Z2dpbmcgaW50ZXJmYWNlLCB0byBsZXQgdXMga2VlcCBhcm91bmQgc29tZSBv ZiBvdXIgcHJpbnRmLWRlYnVnZ2luZworICogc3RhdGVtZW50cy4KKyAqLworCitleHRlcm4gY2hh ciBsb2dfdmFyX25hbWVzW0pFTUFMTE9DX0xPR19WQVJfQlVGU0laRV07CitleHRlcm4gYXRvbWlj X2JfdCBsb2dfaW5pdF9kb25lOworCit0eXBlZGVmIHN0cnVjdCBsb2dfdmFyX3MgbG9nX3Zhcl90 Oworc3RydWN0IGxvZ192YXJfcyB7CisJLyoKKwkgKiBMb3dlc3QgYml0IGlzICJpbml0ZWQiLCBz ZWNvbmQgbG93ZXN0IGlzICJlbmFibGVkIi4gIFB1dHRpbmcgdGhlbSBpbgorCSAqIGEgc2luZ2xl IHdvcmQgbGV0cyB1cyBhdm9pZCBhbnkgZmVuY2VzIG9uIHdlYWsgYXJjaGl0ZWN0dXJlcy4KKwkg Ki8KKwlhdG9taWNfdV90IHN0YXRlOworCWNvbnN0IGNoYXIgKm5hbWU7Cit9OworCisjZGVmaW5l IExPR19OT1RfSU5JVElBTElaRUQgMFUKKyNkZWZpbmUgTE9HX0lOSVRJQUxJWkVEX05PVF9FTkFC TEVEIDFVCisjZGVmaW5lIExPR19FTkFCTEVEIDJVCisKKyNkZWZpbmUgTE9HX1ZBUl9JTklUKG5h bWVfc3RyKSB7QVRPTUlDX0lOSVQoTE9HX05PVF9JTklUSUFMSVpFRCksIG5hbWVfc3RyfQorCisv KgorICogUmV0dXJucyB0aGUgdmFsdWUgd2Ugc2hvdWxkIGFzc3VtZSBmb3Igc3RhdGUgKHdoaWNo IGlzIG5vdCBuZWNlc3NhcmlseQorICogYWNjdXJhdGU7IGlmIGxvZ2dpbmcgaXMgZG9uZSBiZWZv cmUgbG9nZ2luZyBoYXMgZmluaXNoZWQgaW5pdGlhbGl6aW5nLCB0aGVuCisgKiB3ZSBkZWZhdWx0 IHRvIGRvaW5nIHRoZSBzYWZlIHRoaW5nIGJ5IGxvZ2dpbmcgZXZlcnl0aGluZykuCisgKi8KK3Vu c2lnbmVkIGxvZ192YXJfdXBkYXRlX3N0YXRlKGxvZ192YXJfdCAqbG9nX3Zhcik7CisKKy8qIFdl IGZhY3RvciBvdXQgdGhlIG1ldGFkYXRhIG1hbmFnZW1lbnQgdG8gYWxsb3cgdXMgdG8gdGVzdCBt b3JlIGVhc2lseS4gKi8KKyNkZWZpbmUgbG9nX2RvX2JlZ2luKGxvZ192YXIpCQkJCQkJXAoraWYg KGNvbmZpZ19sb2cpIHsJCQkJCQkJXAorCXVuc2lnbmVkIGxvZ19zdGF0ZSA9IGF0b21pY19sb2Fk X3UoJihsb2dfdmFyKS5zdGF0ZSwJCVwKKwkgICAgQVRPTUlDX1JFTEFYRUQpOwkJCQkJCVwKKwlp ZiAodW5saWtlbHkobG9nX3N0YXRlID09IExPR19OT1RfSU5JVElBTElaRUQpKSB7CQlcCisJCWxv Z19zdGF0ZSA9IGxvZ192YXJfdXBkYXRlX3N0YXRlKCYobG9nX3ZhcikpOwkJXAorCQlhc3NlcnQo bG9nX3N0YXRlICE9IExPR19OT1RfSU5JVElBTElaRUQpOwkJXAorCX0JCQkJCQkJCVwKKwlpZiAo bG9nX3N0YXRlID09IExPR19FTkFCTEVEKSB7CQkJCQlcCisJCXsKKwkJCS8qIFVzZXIgY29kZSBl eGVjdXRlcyBoZXJlLiAqLworI2RlZmluZSBsb2dfZG9fZW5kKGxvZ192YXIpCQkJCQkJXAorCQl9 CQkJCQkJCVwKKwl9CQkJCQkJCQlcCit9CisKKy8qCisgKiBNU1ZDIGhhcyBzb21lIHByZXByb2Nl c3NvciBidWdzIGluIGl0cyBleHBhbnNpb24gb2YgX19WQV9BUkdTX18gZHVyaW5nCisgKiBwcmVw cm9jZXNzaW5nLiAgVG8gd29yayBhcm91bmQgdGhpcywgd2UgdGFrZSBhbGwgcG90ZW50aWFsIGV4 dHJhIGFyZ3VtZW50cyBpbgorICogYSB2YXItYXJncyBmdW5jdGlvbnMuICBTaW5jZSBhIHZhcmFy Z3MgbWFjcm8gbmVlZHMgYXQgbGVhc3Qgb25lIGFyZ3VtZW50IGluCisgKiB0aGUgIi4uLiIsIHdl IGFjY2VwdCB0aGUgZm9ybWF0IHN0cmluZyB0aGVyZSwgYW5kIHJlcXVpcmUgdGhhdCB0aGUgZmly c3QKKyAqIGFyZ3VtZW50IGluIHRoaXMgIi4uLiIgaXMgYSBjb25zdCBjaGFyICouCisgKi8KK3N0 YXRpYyBpbmxpbmUgdm9pZAorbG9nX2ltcGxfdmFyYXJncyhjb25zdCBjaGFyICpuYW1lLCAuLi4p IHsKKwljaGFyIGJ1ZltKRU1BTExPQ19MT0dfQlVGU0laRV07CisJdmFfbGlzdCBhcDsKKworCXZh X3N0YXJ0KGFwLCBuYW1lKTsKKwljb25zdCBjaGFyICpmb3JtYXQgPSB2YV9hcmcoYXAsIGNvbnN0 IGNoYXIgKik7CisJc2l6ZV90IGRzdF9vZmZzZXQgPSAwOworCWRzdF9vZmZzZXQgKz0gbWFsbG9j X3NucHJpbnRmKGJ1ZiwgSkVNQUxMT0NfTE9HX0JVRlNJWkUsICIlczogIiwgbmFtZSk7CisJZHN0 X29mZnNldCArPSBtYWxsb2NfdnNucHJpbnRmKGJ1ZiArIGRzdF9vZmZzZXQsCisJICAgIEpFTUFM TE9DX0xPR19CVUZTSVpFIC0gZHN0X29mZnNldCwgZm9ybWF0LCBhcCk7CisJZHN0X29mZnNldCAr PSBtYWxsb2Nfc25wcmludGYoYnVmICsgZHN0X29mZnNldCwKKwkgICAgSkVNQUxMT0NfTE9HX0JV RlNJWkUgLSBkc3Rfb2Zmc2V0LCAiXG4iKTsKKwl2YV9lbmQoYXApOworCisJbWFsbG9jX3dyaXRl KGJ1Zik7Cit9CisKKy8qIENhbGwgYXMgbG9nKCJsb2cudmFyLnN0ciIsICJmb3JtYXRfc3RyaW5n ICVkIiwgYXJnX2Zvcl9mb3JtYXRfc3RyaW5nKTsgKi8KKyNkZWZpbmUgTE9HKGxvZ192YXJfc3Ry LCAuLi4pCQkJCQkJXAorZG8gewkJCQkJCQkJCVwKKwlzdGF0aWMgbG9nX3Zhcl90IGxvZ192YXIg PSBMT0dfVkFSX0lOSVQobG9nX3Zhcl9zdHIpOwkJXAorCWxvZ19kb19iZWdpbihsb2dfdmFyKQkJ CQkJCVwKKwkJbG9nX2ltcGxfdmFyYXJncygobG9nX3ZhcikubmFtZSwgX19WQV9BUkdTX18pOwkJ XAorCWxvZ19kb19lbmQobG9nX3ZhcikJCQkJCQlcCit9IHdoaWxlICgwKQorCisjZW5kaWYgLyog SkVNQUxMT0NfSU5URVJOQUxfTE9HX0ggKi8KCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMu MC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL21hbGxvY19p by5oIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1h bGxvYy9pbnRlcm5hbC9tYWxsb2NfaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwLi5hMzc1YmRhCi0tLSAvZGV2L251bGwKKysrIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQv amVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9tYWxsb2NfaW8uaApAQCAt MCwwICsxLDEwNSBAQAorI2lmbmRlZiBKRU1BTExPQ19JTlRFUk5BTF9NQUxMT0NfSU9fSAorI2Rl ZmluZSBKRU1BTExPQ19JTlRFUk5BTF9NQUxMT0NfSU9fSAorCisjaW5jbHVkZSAiamVtYWxsb2Mv aW50ZXJuYWwvamVtYWxsb2NfaW50ZXJuYWxfdHlwZXMuaCIKKworI2lmZGVmIF9XSU4zMgorIyAg aWZkZWYgX1dJTjY0CisjICAgIGRlZmluZSBGTVQ2NF9QUkVGSVggImxsIgorIyAgICBkZWZpbmUg Rk1UUFRSX1BSRUZJWCAibGwiCisjICBlbHNlCisjICAgIGRlZmluZSBGTVQ2NF9QUkVGSVggImxs IgorIyAgICBkZWZpbmUgRk1UUFRSX1BSRUZJWCAiIgorIyAgZW5kaWYKKyMgIGRlZmluZSBGTVRk MzIgImQiCisjICBkZWZpbmUgRk1UdTMyICJ1IgorIyAgZGVmaW5lIEZNVHgzMiAieCIKKyMgIGRl ZmluZSBGTVRkNjQgRk1UNjRfUFJFRklYICJkIgorIyAgZGVmaW5lIEZNVHU2NCBGTVQ2NF9QUkVG SVggInUiCisjICBkZWZpbmUgRk1UeDY0IEZNVDY0X1BSRUZJWCAieCIKKyMgIGRlZmluZSBGTVRk UFRSIEZNVFBUUl9QUkVGSVggImQiCisjICBkZWZpbmUgRk1UdVBUUiBGTVRQVFJfUFJFRklYICJ1 IgorIyAgZGVmaW5lIEZNVHhQVFIgRk1UUFRSX1BSRUZJWCAieCIKKyNlbHNlCisjICBpbmNsdWRl IDxpbnR0eXBlcy5oPgorIyAgZGVmaW5lIEZNVGQzMiBQUklkMzIKKyMgIGRlZmluZSBGTVR1MzIg UFJJdTMyCisjICBkZWZpbmUgRk1UeDMyIFBSSXgzMgorIyAgZGVmaW5lIEZNVGQ2NCBQUklkNjQK KyMgIGRlZmluZSBGTVR1NjQgUFJJdTY0CisjICBkZWZpbmUgRk1UeDY0IFBSSXg2NAorIyAgZGVm aW5lIEZNVGRQVFIgUFJJZFBUUgorIyAgZGVmaW5lIEZNVHVQVFIgUFJJdVBUUgorIyAgZGVmaW5l IEZNVHhQVFIgUFJJeFBUUgorI2VuZGlmCisKKy8qIFNpemUgb2Ygc3RhY2stYWxsb2NhdGVkIGJ1 ZmZlciBwYXNzZWQgdG8gYnVmZXJyb3IoKS4gKi8KKyNkZWZpbmUgQlVGRVJST1JfQlVGCQk2NAor CisvKgorICogU2l6ZSBvZiBzdGFjay1hbGxvY2F0ZWQgYnVmZmVyIHVzZWQgYnkgbWFsbG9jX3ss dix2Y31wcmludGYoKS4gIFRoaXMgbXVzdCBiZQorICogbGFyZ2UgZW5vdWdoIGZvciBhbGwgcG9z c2libGUgdXNlcyB3aXRoaW4gamVtYWxsb2MuCisgKi8KKyNkZWZpbmUgTUFMTE9DX1BSSU5URl9C VUZTSVpFCTQwOTYKKword3JpdGVfY2JfdCB3cnRtZXNzYWdlOworaW50IGJ1ZmVycm9yKGludCBl cnIsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zmxlbik7Cit1aW50bWF4X3QgbWFsbG9jX3N0cnRvdW1h eChjb25zdCBjaGFyICpyZXN0cmljdCBucHRyLCBjaGFyICoqcmVzdHJpY3QgZW5kcHRyLAorICAg IGludCBiYXNlKTsKK3ZvaWQgbWFsbG9jX3dyaXRlKGNvbnN0IGNoYXIgKnMpOworCisvKgorICog bWFsbG9jX3ZzbnByaW50ZigpIHN1cHBvcnRzIGEgc3Vic2V0IG9mIHNucHJpbnRmKDMpIHRoYXQg YXZvaWRzIGZsb2F0aW5nCisgKiBwb2ludCBtYXRoLgorICovCitzaXplX3QgbWFsbG9jX3ZzbnBy aW50ZihjaGFyICpzdHIsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyICpmb3JtYXQsCisgICAgdmFf bGlzdCBhcCk7CitzaXplX3QgbWFsbG9jX3NucHJpbnRmKGNoYXIgKnN0ciwgc2l6ZV90IHNpemUs IGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQorICAgIEpFTUFMTE9DX0ZPUk1BVF9QUklOVEYoMywg NCk7CisvKgorICogVGhlIGNhbGxlciBjYW4gc2V0IHdyaXRlX2NiIHRvIG51bGwgdG8gY2hvb3Nl IHRvIHByaW50IHdpdGggdGhlCisgKiBqZV9tYWxsb2NfbWVzc2FnZSBob29rLgorICovCit2b2lk IG1hbGxvY192Y3ByaW50Zih3cml0ZV9jYl90ICp3cml0ZV9jYiwgdm9pZCAqY2JvcGFxdWUsIGNv bnN0IGNoYXIgKmZvcm1hdCwKKyAgICB2YV9saXN0IGFwKTsKK3ZvaWQgbWFsbG9jX2NwcmludGYo d3JpdGVfY2JfdCAqd3JpdGVfY2IsIHZvaWQgKmNib3BhcXVlLCBjb25zdCBjaGFyICpmb3JtYXQs CisgICAgLi4uKSBKRU1BTExPQ19GT1JNQVRfUFJJTlRGKDMsIDQpOwordm9pZCBtYWxsb2NfcHJp bnRmKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKSBKRU1BTExPQ19GT1JNQVRfUFJJTlRGKDEsIDIp OworCitzdGF0aWMgaW5saW5lIHNzaXplX3QKK21hbGxvY193cml0ZV9mZChpbnQgZmQsIGNvbnN0 IHZvaWQgKmJ1Ziwgc2l6ZV90IGNvdW50KSB7CisjaWYgZGVmaW5lZChKRU1BTExPQ19VU0VfU1lT Q0FMTCkgJiYgZGVmaW5lZChTWVNfd3JpdGUpCisJLyoKKwkgKiBVc2Ugc3lzY2FsbCgyKSByYXRo ZXIgdGhhbiB3cml0ZSgyKSB3aGVuIHBvc3NpYmxlIGluIG9yZGVyIHRvIGF2b2lkCisJICogdGhl IHBvc3NpYmlsaXR5IG9mIG1lbW9yeSBhbGxvY2F0aW9uIHdpdGhpbiBsaWJjLiAgVGhpcyBpcyBu ZWNlc3NhcnkKKwkgKiBvbiBGcmVlQlNEOyBtb3N0IG9wZXJhdGluZyBzeXN0ZW1zIGRvIG5vdCBo YXZlIHRoaXMgcHJvYmxlbSB0aG91Z2guCisJICoKKwkgKiBzeXNjYWxsKCkgcmV0dXJucyBsb25n IG9yIGludCwgZGVwZW5kaW5nIG9uIHBsYXRmb3JtLCBzbyBjYXB0dXJlIHRoZQorCSAqIHJlc3Vs dCBpbiB0aGUgd2lkZXN0IHBsYXVzaWJsZSB0eXBlIHRvIGF2b2lkIGNvbXBpbGVyIHdhcm5pbmdz LgorCSAqLworCWxvbmcgcmVzdWx0ID0gc3lzY2FsbChTWVNfd3JpdGUsIGZkLCBidWYsIGNvdW50 KTsKKyNlbHNlCisJc3NpemVfdCByZXN1bHQgPSAoc3NpemVfdCl3cml0ZShmZCwgYnVmLAorI2lm ZGVmIF9XSU4zMgorCSAgICAodW5zaWduZWQgaW50KQorI2VuZGlmCisJICAgIGNvdW50KTsKKyNl bmRpZgorCXJldHVybiAoc3NpemVfdClyZXN1bHQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3NpemVf dAorbWFsbG9jX3JlYWRfZmQoaW50IGZkLCB2b2lkICpidWYsIHNpemVfdCBjb3VudCkgeworI2lm IGRlZmluZWQoSkVNQUxMT0NfVVNFX1NZU0NBTEwpICYmIGRlZmluZWQoU1lTX3JlYWQpCisJbG9u ZyByZXN1bHQgPSBzeXNjYWxsKFNZU19yZWFkLCBmZCwgYnVmLCBjb3VudCk7CisjZWxzZQorCXNz aXplX3QgcmVzdWx0ID0gcmVhZChmZCwgYnVmLAorI2lmZGVmIF9XSU4zMgorCSAgICAodW5zaWdu ZWQgaW50KQorI2VuZGlmCisJICAgIGNvdW50KTsKKyNlbmRpZgorCXJldHVybiAoc3NpemVfdCly ZXN1bHQ7Cit9CisKKyNlbmRpZiAvKiBKRU1BTExPQ19JTlRFUk5BTF9NQUxMT0NfSU9fSCAqLwoK ZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1 ZGUvamVtYWxsb2MvaW50ZXJuYWwvbXBzY19xdWV1ZS5oIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVp bGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9tcHNjX3F1ZXVlLmgK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzE2ZWE5YgotLS0gL2Rldi9udWxs CisrKyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVt YWxsb2MvaW50ZXJuYWwvbXBzY19xdWV1ZS5oCkBAIC0wLDAgKzEsMTM0IEBACisjaWZuZGVmIEpF TUFMTE9DX0lOVEVSTkFMX01QU0NfUVVFVUVfSAorI2RlZmluZSBKRU1BTExPQ19JTlRFUk5BTF9N UFNDX1FVRVVFX0gKKworI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2F0b21pYy5oIgorCisv KgorICogQSBjb25jdXJyZW50IGltcGxlbWVudGF0aW9uIG9mIGEgbXVsdGktcHJvZHVjZXIsIHNp bmdsZS1jb25zdW1lciBxdWV1ZS4gIEl0CisgKiBzdXBwb3J0cyB0aHJlZSBjb25jdXJyZW50IG9w ZXJhdGlvbnM6CisgKiAtIFB1c2gKKyAqIC0gUHVzaCBiYXRjaAorICogLSBQb3AgYmF0Y2gKKyAq CisgKiBUaGVzZSBvcGVyYXRpb25zIGFyZSBhbGwgbG9jay1mcmVlLgorICoKKyAqIFRoZSBpbXBs ZW1lbnRhdGlvbiBpcyB0aGUgc2ltcGxlIHR3by1zdGFjayBxdWV1ZSBidWlsdCBvbiBhIFRyZWli ZXIgc3RhY2suCisgKiBJdCdzIG5vdCB0ZXJyaWJseSBlZmZpY2llbnQsIGJ1dCB0aGlzIGlzbid0 IGV4cGVjdGVkIHRvIGdvIGludG8gYW55d2hlcmUgd2l0aAorICogaG90IGNvZGUuICBJbiBmYWN0 LCB3ZSBkb24ndCByZWFsbHkgZXZlbiBuZWVkIHF1ZXVlIHNlbWFudGljcyBpbiBhbnkKKyAqIGFu dGljaXBhdGVkIHVzZSBjYXNlczsgd2UgY291bGQgZ2V0IGF3YXkgd2l0aCBqdXN0IHRoZSBzdGFj ay4gIEJ1dCB0aGlzIHdheQorICogbGV0cyB1cyBmcmFtZSB0aGUgQVBJIGluIHRlcm1zIG9mIHRo ZSBleGlzdGluZyBsaXN0IHR5cGVzLCB3aGljaCBpcyBhIG5pY2UKKyAqIGNvbnZlbmllbmNlLiAg V2UgY2FuIHNhdmUgb24gY2FjaGUgbWlzc2VzIGJ5IGludHJvZHVjaW5nIG91ciBvd24gKHBhcmFs bGVsKQorICogc2luZ2xlLWxpbmtlZCBsaXN0IHR5cGUgaGVyZSwgYW5kIGRyb3BwaW5nIEZJRk8g c2VtYW50aWNzLCBpZiB3ZSBuZWVkIHRoaXMgdG8KKyAqIGdldCBmYXN0ZXIuICBTaW5jZSB3ZSdy ZSBjdXJyZW50bHkgcHJvdmlkaW5nIHF1ZXVlIHNlbWFudGljcyB0aG91Z2gsIHdlIHVzZQorICog dGhlIHByZXYgZmllbGQgaW4gdGhlIGxpbmsgcmF0aGVyIHRoYW4gdGhlIG5leHQgZmllbGQgZm9y IFRyZWliZXItc3RhY2sKKyAqIGxpbmthZ2UsIHNvIHRoYXQgd2UgY2FuIHByZXNlcnZlIG9yZGVy IGZvciBiYXNoLXB1c2hlZCBsaXN0cyAocmVjYWxsIHRoYXQgdGhlCisgKiB0d28tc3RhY2sgdHJp Y2tzIHJldmVyc2VzIG9yZGVycyBpbiB0aGUgbG9jay1mcmVlIGZpcnN0IHN0YWNrKS4KKyAqLwor CisjZGVmaW5lIG1wc2NfcXVldWUoYV90eXBlKQkJCQkJCVwKK3N0cnVjdCB7CQkJCQkJCQlcCisJ YXRvbWljX3BfdCB0YWlsOwkJCQkJCVwKK30KKworI2RlZmluZSBtcHNjX3F1ZXVlX3Byb3RvKGFf YXR0ciwgYV9wcmVmaXgsIGFfcXVldWVfdHlwZSwgYV90eXBlLAlcCisgICAgYV9saXN0X3R5cGUp CQkJCQkJCVwKKy8qIEluaXRpYWxpemUgYSBxdWV1ZS4gKi8JCQkJCQlcCithX2F0dHIgdm9pZAkJ CQkJCQkJXAorYV9wcmVmaXgjI25ldyhhX3F1ZXVlX3R5cGUgKnF1ZXVlKTsJCQkJCVwKKy8qIElu c2VydCBhbGwgaXRlbXMgaW4gc3JjIGludG8gdGhlIHF1ZXVlLCBjbGVhcmluZyBzcmMuICovCQlc CithX2F0dHIgdm9pZAkJCQkJCQkJXAorYV9wcmVmaXgjI3B1c2hfYmF0Y2goYV9xdWV1ZV90eXBl ICpxdWV1ZSwgYV9saXN0X3R5cGUgKnNyYyk7CQlcCisvKiBJbnNlcnQgbm9kZSBpbnRvIHRoZSBx dWV1ZS4gKi8JCQkJCVwKK2FfYXR0ciB2b2lkCQkJCQkJCQlcCithX3ByZWZpeCMjcHVzaChhX3F1 ZXVlX3R5cGUgKnF1ZXVlLCBhX3R5cGUgKm5vZGUpOwkJCVwKKy8qCQkJCQkJCQkJXAorICogUG9w IGFsbCBpdGVtcyBpbiB0aGUgcXVldWUgaW50byB0aGUgbGlzdCBhdCBkc3QuICBkc3Qgc2hvdWxk IGFscmVhZHkJXAorICogYmUgaW5pdGlhbGl6ZWQgKGFuZCBtYXkgY29udGFpbiBleGlzdGluZyBp dGVtcywgd2hpY2ggdGhlbiByZW1haW4JXAorICogaW4gZHN0KS4JCQkJCQkJCVwKKyAqLwkJCQkJ CQkJCVwKK2FfYXR0ciB2b2lkCQkJCQkJCQlcCithX3ByZWZpeCMjcG9wX2JhdGNoKGFfcXVldWVf dHlwZSAqcXVldWUsIGFfbGlzdF90eXBlICpkc3QpOworCisjZGVmaW5lIG1wc2NfcXVldWVfZ2Vu KGFfYXR0ciwgYV9wcmVmaXgsIGFfcXVldWVfdHlwZSwgYV90eXBlLAkJXAorICAgIGFfbGlzdF90 eXBlLCBhX2xpbmspCQkJCQkJXAorYV9hdHRyIHZvaWQJCQkJCQkJCVwKK2FfcHJlZml4IyNuZXco YV9xdWV1ZV90eXBlICpxdWV1ZSkgewkJCQkJXAorCWF0b21pY19zdG9yZV9wKCZxdWV1ZS0+dGFp bCwgTlVMTCwgQVRPTUlDX1JFTEFYRUQpOwkJXAorfQkJCQkJCQkJCVwKK2FfYXR0ciB2b2lkCQkJ CQkJCQlcCithX3ByZWZpeCMjcHVzaF9iYXRjaChhX3F1ZXVlX3R5cGUgKnF1ZXVlLCBhX2xpc3Rf dHlwZSAqc3JjKSB7CQlcCisJLyoJCQkJCQkJCVwKKwkgKiBSZXVzZSB0aGUgcWwgbGlzdCBuZXh0 IGZpZWxkIGFzIHRoZSBUcmVpYmVyIHN0YWNrIG5leHQJXAorCSAqIGZpZWxkLgkJCQkJCQlcCisJ ICovCQkJCQkJCQlcCisJYV90eXBlICpmaXJzdCA9IHFsX2ZpcnN0KHNyYyk7CQkJCQlcCisJYV90 eXBlICpsYXN0ID0gcWxfbGFzdChzcmMsIGFfbGluayk7CQkJCVwKKwl2b2lkKiBjdXJfdGFpbCA9 IGF0b21pY19sb2FkX3AoJnF1ZXVlLT50YWlsLCBBVE9NSUNfUkVMQVhFRCk7CVwKKwlkbyB7CQkJ CQkJCQlcCisJCS8qCQkJCQkJCVwKKwkJICogTm90ZSB0aGF0IHRoaXMgYnJlYWtzIHRoZSBxdWV1 ZSByaW5nIHN0cnVjdHVyZTsJXAorCQkgKiBpdCdzIG5vdCBhIHJpbmcgYW55IG1vcmUhCQkJCVwK KwkJICovCQkJCQkJCVwKKwkJZmlyc3QtPmFfbGluay5xcmVfcHJldiA9IGN1cl90YWlsOwkJCVwK KwkJLyoJCQkJCQkJXAorCQkgKiBOb3RlOiB0aGUgdXBjb21pbmcgQ0FTIGRvZXNuJ3QgbmVlZCBh biBhdG9taWM7IGV2ZXJ5CVwKKwkJICogcHVzaCBvbmx5IG5lZWRzIHRvIHN5bmNocm9uaXplIHdp dGggdGhlIG5leHQgcG9wLAlcCisJCSAqIHdoaWNoIHdlIGdldCBmcm9tIHRoZSByZWxlYXNlIHNl cXVlbmNlIHJ1bGVzLglcCisJCSAqLwkJCQkJCQlcCisJfSB3aGlsZSAoIWF0b21pY19jb21wYXJl X2V4Y2hhbmdlX3dlYWtfcCgmcXVldWUtPnRhaWwsCQlcCisJICAgICZjdXJfdGFpbCwgbGFzdCwg QVRPTUlDX1JFTEVBU0UsIEFUT01JQ19SRUxBWEVEKSk7CQlcCisJcWxfbmV3KHNyYyk7CQkJCQkJ CVwKK30JCQkJCQkJCQlcCithX2F0dHIgdm9pZAkJCQkJCQkJXAorYV9wcmVmaXgjI3B1c2goYV9x dWV1ZV90eXBlICpxdWV1ZSwgYV90eXBlICpub2RlKSB7CQkJXAorCXFsX2VsbV9uZXcobm9kZSwg YV9saW5rKTsJCQkJCVwKKwlhX2xpc3RfdHlwZSBsaXN0OwkJCQkJCVwKKwlxbF9uZXcoJmxpc3Qp OwkJCQkJCQlcCisJcWxfaGVhZF9pbnNlcnQoJmxpc3QsIG5vZGUsIGFfbGluayk7CQkJCVwKKwlh X3ByZWZpeCMjcHVzaF9iYXRjaChxdWV1ZSwgJmxpc3QpOwkJCQlcCit9CQkJCQkJCQkJXAorYV9h dHRyIHZvaWQJCQkJCQkJCVwKK2FfcHJlZml4IyNwb3BfYmF0Y2goYV9xdWV1ZV90eXBlICpxdWV1 ZSwgYV9saXN0X3R5cGUgKmRzdCkgewkJXAorCWFfdHlwZSAqdGFpbCA9IGF0b21pY19sb2FkX3Ao JnF1ZXVlLT50YWlsLCBBVE9NSUNfUkVMQVhFRCk7CVwKKwlpZiAodGFpbCA9PSBOVUxMKSB7CQkJ CQkJXAorCQkvKgkJCQkJCQlcCisJCSAqIEluIHRoZSBjb21tb24gc3BlY2lhbCBjYXNlIHdoZXJl IHRoZXJlIGFyZSBubwlcCisJCSAqIHBlbmRpbmcgZWxlbWVudHMsIGJhaWwgZWFybHkgd2l0aG91 dCBhIGNvc3RseSBSTVcuCVwKKwkJICovCQkJCQkJCVwKKwkJcmV0dXJuOwkJCQkJCQlcCisJfQkJ CQkJCQkJXAorCXRhaWwgPSBhdG9taWNfZXhjaGFuZ2VfcCgmcXVldWUtPnRhaWwsIE5VTEwsIEFU T01JQ19BQ1FVSVJFKTsJXAorCS8qCQkJCQkJCQlcCisJICogSXQncyBhIHNpbmdsZS1jb25zdW1l ciBxdWV1ZSwgc28gaWYgY3VyIHN0YXJ0ZWQgbm9uLU5VTEwsCVwKKwkgKiBpdCdkIGJldHRlciBz dGF5IG5vbi1OVUxMLgkJCQkJXAorCSAqLwkJCQkJCQkJXAorCWFzc2VydCh0YWlsICE9IE5VTEwp OwkJCQkJCVwKKwkvKgkJCQkJCQkJXAorCSAqIFdlIGl0ZXJhdGUgdGhyb3VnaCB0aGUgc3RhY2sg YW5kIGJvdGggZml4IHVwIHRoZSBsaW5rCVwKKwkgKiBzdHJ1Y3R1cmUgKHN0YWNrIGluc2VydGlv biBicm9rZSB0aGUgbGlzdCByZXF1aXJlbWVudCB0aGF0CVwKKwkgKiB0aGUgbGlzdCBiZSBjaXJj dWxhcmx5IGxpbmtlZCkuICBJdCdzIGp1c3QgYXMgZWZmaWNpZW50IGF0CVwKKwkgKiB0aGlzIHBv aW50IHRvIG1ha2UgdGhlIHF1ZXVlIGEgInJlYWwiIHF1ZXVlLCBzbyBkbyB0aGF0IGFzCVwKKwkg KiB3ZWxsLgkJCQkJCQlcCisJICogSWYgdGhpcyBldmVyIGdldHMgdG8gYmUgYSBob3Qgc3BvdCwg d2UgY2FuIG9taXQgdGhpcyBmaXh1cAlcCisJICogYW5kIG1ha2UgdGhlIHF1ZXVlIGEgYmFnIChp LmUuIG5vdCBuZWNlc3NhcmlseSBvcmRlcmVkKSwgYnV0CVwKKwkgKiB0aGF0IHdvdWxkIG1lYW4g amV0dGlzb25pbmcgdGhlIGV4aXN0aW5nIGxpc3QgQVBJIGFzIHRoZSAJXAorCSAqIGJhdGNoIHB1 c2hpbmcvcG9wcGluZyBpbnRlcmZhY2UuCQkJCVwKKwkgKi8JCQkJCQkJCVwKKwlhX2xpc3RfdHlw ZSByZXZlcnNlZDsJCQkJCQlcCisJcWxfbmV3KCZyZXZlcnNlZCk7CQkJCQkJXAorCXdoaWxlICh0 YWlsICE9IE5VTEwpIHsJCQkJCQlcCisJCS8qCQkJCQkJCVwKKwkJICogUG9wIGFuIGl0ZW0gb2Zm IHRoZSBzdGFjaywgcHJlcGVuZCBpdCBvbnRvIHRoZSBsaXN0CVwKKwkJICogKHJldmVyc2luZyB0 aGUgb3JkZXIpLiAgUmVjYWxsIHRoYXQgd2UgdXNlIHRoZQlcCisJCSAqIGxpc3QgcHJldiBmaWVs ZCBhcyB0aGUgVHJlaWJlciBzdGFjayBuZXh0IGZpZWxkIHRvCVwKKwkJICogcHJlc2VydmUgb3Jk ZXIgb2YgYmF0Y2gtcHVzaGVkIGl0ZW1zIHdoZW4gcmV2ZXJzZWQuCVwKKwkJICovCQkJCQkJCVwK KwkJYV90eXBlICpuZXh0ID0gdGFpbC0+YV9saW5rLnFyZV9wcmV2OwkJCVwKKwkJcWxfZWxtX25l dyh0YWlsLCBhX2xpbmspOwkJCQlcCisJCXFsX2hlYWRfaW5zZXJ0KCZyZXZlcnNlZCwgdGFpbCwg YV9saW5rKTsJCVwKKwkJdGFpbCA9IG5leHQ7CQkJCQkJXAorCX0JCQkJCQkJCVwKKwlxbF9jb25j YXQoZHN0LCAmcmV2ZXJzZWQsIGFfbGluayk7CQkJCVwKK30KKworI2VuZGlmIC8qIEpFTUFMTE9D X0lOVEVSTkFMX01QU0NfUVVFVUVfSCAqLwoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4w LWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvbXV0ZXguaCBi LzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2Mv aW50ZXJuYWwvbXV0ZXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42M2Ew YjFiCi0tLSAvZGV2L251bGwKKysrIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2Mt NS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9tdXRleC5oCkBAIC0wLDAgKzEsMzE5IEBA CisjaWZuZGVmIEpFTUFMTE9DX0lOVEVSTkFMX01VVEVYX0gKKyNkZWZpbmUgSkVNQUxMT0NfSU5U RVJOQUxfTVVURVhfSAorCisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvYXRvbWljLmgiCisj aW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvbXV0ZXhfcHJvZi5oIgorI2luY2x1ZGUgImplbWFs bG9jL2ludGVybmFsL3RzZC5oIgorI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL3dpdG5lc3Mu aCIKKworZXh0ZXJuIGludDY0X3Qgb3B0X211dGV4X21heF9zcGluOworCit0eXBlZGVmIGVudW0g eworCS8qIENhbiBvbmx5IGFjcXVpcmUgb25lIG11dGV4IG9mIGEgZ2l2ZW4gd2l0bmVzcyByYW5r IGF0IGEgdGltZS4gKi8KKwltYWxsb2NfbXV0ZXhfcmFua19leGNsdXNpdmUsCisJLyoKKwkgKiBD YW4gYWNxdWlyZSBtdWx0aXBsZSBtdXRleGVzIG9mIHRoZSBzYW1lIHdpdG5lc3MgcmFuaywgYnV0 IGluCisJICogYWRkcmVzcy1hc2NlbmRpbmcgb3JkZXIgb25seS4KKwkgKi8KKwltYWxsb2NfbXV0 ZXhfYWRkcmVzc19vcmRlcmVkCit9IG1hbGxvY19tdXRleF9sb2NrX29yZGVyX3Q7CisKK3R5cGVk ZWYgc3RydWN0IG1hbGxvY19tdXRleF9zIG1hbGxvY19tdXRleF90Oworc3RydWN0IG1hbGxvY19t dXRleF9zIHsKKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQkvKgorCQkJICogcHJvZl9kYXRhIGlz IGRlZmluZWQgZmlyc3QgdG8gcmVkdWNlIGNhY2hlbGluZQorCQkJICogYm91bmNpbmc6IHRoZSBk YXRhIGlzIG5vdCB0b3VjaGVkIGJ5IHRoZSBtdXRleCBob2xkZXIKKwkJCSAqIGR1cmluZyB1bmxv Y2tpbmcsIHdoaWxlIG1pZ2h0IGJlIG1vZGlmaWVkIGJ5CisJCQkgKiBjb250ZW5kZXJzLiAgSGF2 aW5nIGl0IGJlZm9yZSB0aGUgbXV0ZXggaXRzZWxmIGNvdWxkCisJCQkgKiBhdm9pZCBwcmVmZXRj aGluZyBhIG1vZGlmaWVkIGNhY2hlbGluZSAoZm9yIHRoZQorCQkJICogdW5sb2NraW5nIHRocmVh ZCkuCisJCQkgKi8KKwkJCW11dGV4X3Byb2ZfZGF0YV90CXByb2ZfZGF0YTsKKyNpZmRlZiBfV0lO MzIKKyMgIGlmIF9XSU4zMl9XSU5OVCA+PSAweDA2MDAKKwkJCVNSV0xPQ0sgICAgICAgICAJbG9j azsKKyMgIGVsc2UKKwkJCUNSSVRJQ0FMX1NFQ1RJT04JbG9jazsKKyMgIGVuZGlmCisjZWxpZiAo ZGVmaW5lZChKRU1BTExPQ19PU19VTkZBSVJfTE9DSykpCisJCQlvc191bmZhaXJfbG9jawkJbG9j azsKKyNlbGlmIChkZWZpbmVkKEpFTUFMTE9DX01VVEVYX0lOSVRfQ0IpKQorCQkJcHRocmVhZF9t dXRleF90CQlsb2NrOworCQkJbWFsbG9jX211dGV4X3QJCSpwb3N0cG9uZWRfbmV4dDsKKyNlbHNl CisJCQlwdGhyZWFkX211dGV4X3QJCWxvY2s7CisjZW5kaWYKKwkJCS8qCisJCQkgKiBIaW50IGZs YWcgdG8gYXZvaWQgZXhjbHVzaXZlIGNhY2hlIGxpbmUgY29udGVudGlvbgorCQkJICogZHVyaW5n IHNwaW4gd2FpdGluZworCQkJICovCisJCQlhdG9taWNfYl90CQlsb2NrZWQ7CisJCX07CisJCS8q CisJCSAqIFdlIG9ubHkgdG91Y2ggd2l0bmVzcyB3aGVuIGNvbmZpZ3VyZWQgdy8gZGVidWcuICBI b3dldmVyIHdlCisJCSAqIGtlZXAgdGhlIGZpZWxkIGluIGEgdW5pb24gd2hlbiAhZGVidWcgc28g dGhhdCB3ZSBkb24ndCBoYXZlCisJCSAqIHRvIHBvbGx1dGUgdGhlIGNvZGUgYmFzZSB3aXRoICNp ZmRlZnMsIHdoaWxlIGF2b2lkIHBheWluZyB0aGUKKwkJICogbWVtb3J5IGNvc3QuCisJCSAqLwor I2lmICFkZWZpbmVkKEpFTUFMTE9DX0RFQlVHKQorCQl3aXRuZXNzX3QJCQl3aXRuZXNzOworCQlt YWxsb2NfbXV0ZXhfbG9ja19vcmRlcl90CWxvY2tfb3JkZXI7CisjZW5kaWYKKwl9OworCisjaWYg ZGVmaW5lZChKRU1BTExPQ19ERUJVRykKKwl3aXRuZXNzX3QJCQl3aXRuZXNzOworCW1hbGxvY19t dXRleF9sb2NrX29yZGVyX3QJbG9ja19vcmRlcjsKKyNlbmRpZgorfTsKKworI2lmZGVmIF9XSU4z MgorIyAgaWYgX1dJTjMyX1dJTk5UID49IDB4MDYwMAorIyAgICBkZWZpbmUgTUFMTE9DX01VVEVY X0xPQ0sobSkgICAgQWNxdWlyZVNSV0xvY2tFeGNsdXNpdmUoJihtKS0+bG9jaykKKyMgICAgZGVm aW5lIE1BTExPQ19NVVRFWF9VTkxPQ0sobSkgIFJlbGVhc2VTUldMb2NrRXhjbHVzaXZlKCYobSkt PmxvY2spCisjICAgIGRlZmluZSBNQUxMT0NfTVVURVhfVFJZTE9DSyhtKSAoIVRyeUFjcXVpcmVT UldMb2NrRXhjbHVzaXZlKCYobSktPmxvY2spKQorIyAgZWxzZQorIyAgICBkZWZpbmUgTUFMTE9D X01VVEVYX0xPQ0sobSkgICAgRW50ZXJDcml0aWNhbFNlY3Rpb24oJihtKS0+bG9jaykKKyMgICAg ZGVmaW5lIE1BTExPQ19NVVRFWF9VTkxPQ0sobSkgIExlYXZlQ3JpdGljYWxTZWN0aW9uKCYobSkt PmxvY2spCisjICAgIGRlZmluZSBNQUxMT0NfTVVURVhfVFJZTE9DSyhtKSAoIVRyeUVudGVyQ3Jp dGljYWxTZWN0aW9uKCYobSktPmxvY2spKQorIyAgZW5kaWYKKyNlbGlmIChkZWZpbmVkKEpFTUFM TE9DX09TX1VORkFJUl9MT0NLKSkKKyMgICAgZGVmaW5lIE1BTExPQ19NVVRFWF9MT0NLKG0pICAg IG9zX3VuZmFpcl9sb2NrX2xvY2soJihtKS0+bG9jaykKKyMgICAgZGVmaW5lIE1BTExPQ19NVVRF WF9VTkxPQ0sobSkgIG9zX3VuZmFpcl9sb2NrX3VubG9jaygmKG0pLT5sb2NrKQorIyAgICBkZWZp bmUgTUFMTE9DX01VVEVYX1RSWUxPQ0sobSkgKCFvc191bmZhaXJfbG9ja190cnlsb2NrKCYobSkt PmxvY2spKQorI2Vsc2UKKyMgICAgZGVmaW5lIE1BTExPQ19NVVRFWF9MT0NLKG0pICAgIHB0aHJl YWRfbXV0ZXhfbG9jaygmKG0pLT5sb2NrKQorIyAgICBkZWZpbmUgTUFMTE9DX01VVEVYX1VOTE9D SyhtKSAgcHRocmVhZF9tdXRleF91bmxvY2soJihtKS0+bG9jaykKKyMgICAgZGVmaW5lIE1BTExP Q19NVVRFWF9UUllMT0NLKG0pIChwdGhyZWFkX211dGV4X3RyeWxvY2soJihtKS0+bG9jaykgIT0g MCkKKyNlbmRpZgorCisjZGVmaW5lIExPQ0tfUFJPRl9EQVRBX0lOSVRJQUxJWkVSCQkJCQlcCisg ICAge05TVElNRV9aRVJPX0lOSVRJQUxJWkVSLCBOU1RJTUVfWkVST19JTklUSUFMSVpFUiwgMCwg MCwgMCwJCVwKKwkgICAgQVRPTUlDX0lOSVQoMCksIDAsIE5VTEwsIDB9CisKKyNpZmRlZiBfV0lO MzIKKyMgIGRlZmluZSBNQUxMT0NfTVVURVhfSU5JVElBTElaRVIKKyNlbGlmIChkZWZpbmVkKEpF TUFMTE9DX09TX1VORkFJUl9MT0NLKSkKKyMgIGlmIGRlZmluZWQoSkVNQUxMT0NfREVCVUcpCisj ICAgIGRlZmluZSBNQUxMT0NfTVVURVhfSU5JVElBTElaRVIJCQkJCVwKKyAge3t7TE9DS19QUk9G X0RBVEFfSU5JVElBTElaRVIsIE9TX1VORkFJUl9MT0NLX0lOSVQsIEFUT01JQ19JTklUKGZhbHNl KX19LCBcCisgICAgICAgICBXSVRORVNTX0lOSVRJQUxJWkVSKCJtdXRleCIsIFdJVE5FU1NfUkFO S19PTUlUKSwgMH0KKyMgIGVsc2UKKyMgICAgZGVmaW5lIE1BTExPQ19NVVRFWF9JTklUSUFMSVpF UiAgICAgICAgICAgICAgICAgICAgICBcCisgIHt7e0xPQ0tfUFJPRl9EQVRBX0lOSVRJQUxJWkVS LCBPU19VTkZBSVJfTE9DS19JTklULCBBVE9NSUNfSU5JVChmYWxzZSl9fSwgIFwKKyAgICAgIFdJ VE5FU1NfSU5JVElBTElaRVIoIm11dGV4IiwgV0lUTkVTU19SQU5LX09NSVQpfQorIyAgZW5kaWYK KyNlbGlmIChkZWZpbmVkKEpFTUFMTE9DX01VVEVYX0lOSVRfQ0IpKQorIyAgaWYgKGRlZmluZWQo SkVNQUxMT0NfREVCVUcpKQorIyAgICAgZGVmaW5lIE1BTExPQ19NVVRFWF9JTklUSUFMSVpFUgkJ CQkJXAorICAgICAge3t7TE9DS19QUk9GX0RBVEFfSU5JVElBTElaRVIsIFBUSFJFQURfTVVURVhf SU5JVElBTElaRVIsIE5VTEwsIEFUT01JQ19JTklUKGZhbHNlKX19LAlcCisgICAgICAgICAgIFdJ VE5FU1NfSU5JVElBTElaRVIoIm11dGV4IiwgV0lUTkVTU19SQU5LX09NSVQpLCAwfQorIyAgZWxz ZQorIyAgICAgZGVmaW5lIE1BTExPQ19NVVRFWF9JTklUSUFMSVpFUgkJCQkJXAorICAgICAge3t7 TE9DS19QUk9GX0RBVEFfSU5JVElBTElaRVIsIFBUSFJFQURfTVVURVhfSU5JVElBTElaRVIsIE5V TEwsIEFUT01JQ19JTklUKGZhbHNlKX19LAlcCisgICAgICAgICAgIFdJVE5FU1NfSU5JVElBTEla RVIoIm11dGV4IiwgV0lUTkVTU19SQU5LX09NSVQpfQorIyAgZW5kaWYKKworI2Vsc2UKKyMgICAg ZGVmaW5lIE1BTExPQ19NVVRFWF9UWVBFIFBUSFJFQURfTVVURVhfREVGQVVMVAorIyAgaWYgZGVm aW5lZChKRU1BTExPQ19ERUJVRykKKyMgICAgZGVmaW5lIE1BTExPQ19NVVRFWF9JTklUSUFMSVpF UgkJCQkJXAorICAgICB7e3tMT0NLX1BST0ZfREFUQV9JTklUSUFMSVpFUiwgUFRIUkVBRF9NVVRF WF9JTklUSUFMSVpFUiwgQVRPTUlDX0lOSVQoZmFsc2UpfX0sIFwKKyAgICAgICAgICAgV0lUTkVT U19JTklUSUFMSVpFUigibXV0ZXgiLCBXSVRORVNTX1JBTktfT01JVCksIDB9CisjICBlbHNlCisj ICAgIGRlZmluZSBNQUxMT0NfTVVURVhfSU5JVElBTElaRVIgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKKyAgICAge3t7TE9DS19QUk9GX0RBVEFfSU5JVElBTElaRVIsIFBUSFJFQURfTVVURVhf SU5JVElBTElaRVIsIEFUT01JQ19JTklUKGZhbHNlKX19LAlcCisgICAgICBXSVRORVNTX0lOSVRJ QUxJWkVSKCJtdXRleCIsIFdJVE5FU1NfUkFOS19PTUlUKX0KKyMgIGVuZGlmCisjZW5kaWYKKwor I2lmZGVmIEpFTUFMTE9DX0xBWllfTE9DSworZXh0ZXJuIGJvb2wgaXN0aHJlYWRlZDsKKyNlbHNl CisjICB1bmRlZiBpc3RocmVhZGVkIC8qIFVuZG8gcHJpdmF0ZV9uYW1lc3BhY2UuaCBkZWZpbml0 aW9uLiAqLworIyAgZGVmaW5lIGlzdGhyZWFkZWQgdHJ1ZQorI2VuZGlmCisKK2Jvb2wgbWFsbG9j X211dGV4X2luaXQobWFsbG9jX211dGV4X3QgKm11dGV4LCBjb25zdCBjaGFyICpuYW1lLAorICAg IHdpdG5lc3NfcmFua190IHJhbmssIG1hbGxvY19tdXRleF9sb2NrX29yZGVyX3QgbG9ja19vcmRl cik7Cit2b2lkIG1hbGxvY19tdXRleF9wcmVmb3JrKHRzZG5fdCAqdHNkbiwgbWFsbG9jX211dGV4 X3QgKm11dGV4KTsKK3ZvaWQgbWFsbG9jX211dGV4X3Bvc3Rmb3JrX3BhcmVudCh0c2RuX3QgKnRz ZG4sIG1hbGxvY19tdXRleF90ICptdXRleCk7Cit2b2lkIG1hbGxvY19tdXRleF9wb3N0Zm9ya19j aGlsZCh0c2RuX3QgKnRzZG4sIG1hbGxvY19tdXRleF90ICptdXRleCk7Citib29sIG1hbGxvY19t dXRleF9ib290KHZvaWQpOwordm9pZCBtYWxsb2NfbXV0ZXhfcHJvZl9kYXRhX3Jlc2V0KHRzZG5f dCAqdHNkbiwgbWFsbG9jX211dGV4X3QgKm11dGV4KTsKKwordm9pZCBtYWxsb2NfbXV0ZXhfbG9j a19zbG93KG1hbGxvY19tdXRleF90ICptdXRleCk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorbWFs bG9jX211dGV4X2xvY2tfZmluYWwobWFsbG9jX211dGV4X3QgKm11dGV4KSB7CisJTUFMTE9DX01V VEVYX0xPQ0sobXV0ZXgpOworCWF0b21pY19zdG9yZV9iKCZtdXRleC0+bG9ja2VkLCB0cnVlLCBB VE9NSUNfUkVMQVhFRCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbAorbWFsbG9jX211dGV4X3Ry eWxvY2tfZmluYWwobWFsbG9jX211dGV4X3QgKm11dGV4KSB7CisJcmV0dXJuIE1BTExPQ19NVVRF WF9UUllMT0NLKG11dGV4KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCittdXRleF9vd25lcl9z dGF0c191cGRhdGUodHNkbl90ICp0c2RuLCBtYWxsb2NfbXV0ZXhfdCAqbXV0ZXgpIHsKKwlpZiAo Y29uZmlnX3N0YXRzKSB7CisJCW11dGV4X3Byb2ZfZGF0YV90ICpkYXRhID0gJm11dGV4LT5wcm9m X2RhdGE7CisJCWRhdGEtPm5fbG9ja19vcHMrKzsKKwkJaWYgKGRhdGEtPnByZXZfb3duZXIgIT0g dHNkbikgeworCQkJZGF0YS0+cHJldl9vd25lciA9IHRzZG47CisJCQlkYXRhLT5uX293bmVyX3N3 aXRjaGVzKys7CisJCX0KKwl9Cit9CisKKy8qIFRyeWxvY2s6IHJldHVybiBmYWxzZSBpZiB0aGUg bG9jayBpcyBzdWNjZXNzZnVsbHkgYWNxdWlyZWQuICovCitzdGF0aWMgaW5saW5lIGJvb2wKK21h bGxvY19tdXRleF90cnlsb2NrKHRzZG5fdCAqdHNkbiwgbWFsbG9jX211dGV4X3QgKm11dGV4KSB7 CisJd2l0bmVzc19hc3NlcnRfbm90X293bmVyKHRzZG5fd2l0bmVzc190c2RwX2dldCh0c2RuKSwg Jm11dGV4LT53aXRuZXNzKTsKKwlpZiAoaXN0aHJlYWRlZCkgeworCQlpZiAobWFsbG9jX211dGV4 X3RyeWxvY2tfZmluYWwobXV0ZXgpKSB7CisJCQlhdG9taWNfc3RvcmVfYigmbXV0ZXgtPmxvY2tl ZCwgdHJ1ZSwgQVRPTUlDX1JFTEFYRUQpOworCQkJcmV0dXJuIHRydWU7CisJCX0KKwkJbXV0ZXhf b3duZXJfc3RhdHNfdXBkYXRlKHRzZG4sIG11dGV4KTsKKwl9CisJd2l0bmVzc19sb2NrKHRzZG5f d2l0bmVzc190c2RwX2dldCh0c2RuKSwgJm11dGV4LT53aXRuZXNzKTsKKworCXJldHVybiBmYWxz ZTsKK30KKworLyogQWdncmVnYXRlIGxvY2sgcHJvZiBkYXRhLiAqLworc3RhdGljIGlubGluZSB2 b2lkCittYWxsb2NfbXV0ZXhfcHJvZl9tZXJnZShtdXRleF9wcm9mX2RhdGFfdCAqc3VtLCBtdXRl eF9wcm9mX2RhdGFfdCAqZGF0YSkgeworCW5zdGltZV9hZGQoJnN1bS0+dG90X3dhaXRfdGltZSwg JmRhdGEtPnRvdF93YWl0X3RpbWUpOworCWlmIChuc3RpbWVfY29tcGFyZSgmc3VtLT5tYXhfd2Fp dF90aW1lLCAmZGF0YS0+bWF4X3dhaXRfdGltZSkgPCAwKSB7CisJCW5zdGltZV9jb3B5KCZzdW0t Pm1heF93YWl0X3RpbWUsICZkYXRhLT5tYXhfd2FpdF90aW1lKTsKKwl9CisKKwlzdW0tPm5fd2Fp dF90aW1lcyArPSBkYXRhLT5uX3dhaXRfdGltZXM7CisJc3VtLT5uX3NwaW5fYWNxdWlyZWQgKz0g ZGF0YS0+bl9zcGluX2FjcXVpcmVkOworCisJaWYgKHN1bS0+bWF4X25fdGhkcyA8IGRhdGEtPm1h eF9uX3RoZHMpIHsKKwkJc3VtLT5tYXhfbl90aGRzID0gZGF0YS0+bWF4X25fdGhkczsKKwl9CisJ dWludDMyX3QgY3VyX25fd2FpdGluZ190aGRzID0gYXRvbWljX2xvYWRfdTMyKCZzdW0tPm5fd2Fp dGluZ190aGRzLAorCSAgICBBVE9NSUNfUkVMQVhFRCk7CisJdWludDMyX3QgbmV3X25fd2FpdGlu Z190aGRzID0gY3VyX25fd2FpdGluZ190aGRzICsgYXRvbWljX2xvYWRfdTMyKAorCSAgICAmZGF0 YS0+bl93YWl0aW5nX3RoZHMsIEFUT01JQ19SRUxBWEVEKTsKKwlhdG9taWNfc3RvcmVfdTMyKCZz dW0tPm5fd2FpdGluZ190aGRzLCBuZXdfbl93YWl0aW5nX3RoZHMsCisJICAgIEFUT01JQ19SRUxB WEVEKTsKKwlzdW0tPm5fb3duZXJfc3dpdGNoZXMgKz0gZGF0YS0+bl9vd25lcl9zd2l0Y2hlczsK KwlzdW0tPm5fbG9ja19vcHMgKz0gZGF0YS0+bl9sb2NrX29wczsKK30KKworc3RhdGljIGlubGlu ZSB2b2lkCittYWxsb2NfbXV0ZXhfbG9jayh0c2RuX3QgKnRzZG4sIG1hbGxvY19tdXRleF90ICpt dXRleCkgeworCXdpdG5lc3NfYXNzZXJ0X25vdF9vd25lcih0c2RuX3dpdG5lc3NfdHNkcF9nZXQo dHNkbiksICZtdXRleC0+d2l0bmVzcyk7CisJaWYgKGlzdGhyZWFkZWQpIHsKKwkJaWYgKG1hbGxv Y19tdXRleF90cnlsb2NrX2ZpbmFsKG11dGV4KSkgeworCQkJbWFsbG9jX211dGV4X2xvY2tfc2xv dyhtdXRleCk7CisJCQlhdG9taWNfc3RvcmVfYigmbXV0ZXgtPmxvY2tlZCwgdHJ1ZSwgQVRPTUlD X1JFTEFYRUQpOworCQl9CisJCW11dGV4X293bmVyX3N0YXRzX3VwZGF0ZSh0c2RuLCBtdXRleCk7 CisJfQorCXdpdG5lc3NfbG9jayh0c2RuX3dpdG5lc3NfdHNkcF9nZXQodHNkbiksICZtdXRleC0+ d2l0bmVzcyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorbWFsbG9jX211dGV4X3VubG9jayh0 c2RuX3QgKnRzZG4sIG1hbGxvY19tdXRleF90ICptdXRleCkgeworCWF0b21pY19zdG9yZV9iKCZt dXRleC0+bG9ja2VkLCBmYWxzZSwgQVRPTUlDX1JFTEFYRUQpOworCXdpdG5lc3NfdW5sb2NrKHRz ZG5fd2l0bmVzc190c2RwX2dldCh0c2RuKSwgJm11dGV4LT53aXRuZXNzKTsKKwlpZiAoaXN0aHJl YWRlZCkgeworCQlNQUxMT0NfTVVURVhfVU5MT0NLKG11dGV4KTsKKwl9Cit9CisKK3N0YXRpYyBp bmxpbmUgdm9pZAorbWFsbG9jX211dGV4X2Fzc2VydF9vd25lcih0c2RuX3QgKnRzZG4sIG1hbGxv Y19tdXRleF90ICptdXRleCkgeworCXdpdG5lc3NfYXNzZXJ0X293bmVyKHRzZG5fd2l0bmVzc190 c2RwX2dldCh0c2RuKSwgJm11dGV4LT53aXRuZXNzKTsKK30KKworc3RhdGljIGlubGluZSB2b2lk CittYWxsb2NfbXV0ZXhfYXNzZXJ0X25vdF9vd25lcih0c2RuX3QgKnRzZG4sIG1hbGxvY19tdXRl eF90ICptdXRleCkgeworCXdpdG5lc3NfYXNzZXJ0X25vdF9vd25lcih0c2RuX3dpdG5lc3NfdHNk cF9nZXQodHNkbiksICZtdXRleC0+d2l0bmVzcyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAor bWFsbG9jX211dGV4X3Byb2ZfY29weShtdXRleF9wcm9mX2RhdGFfdCAqZHN0LCBtdXRleF9wcm9m X2RhdGFfdCAqc291cmNlKSB7CisJLyoKKwkgKiBOb3QgKnJlYWxseSogYWxsb3dlZCAod2Ugc2hv dWxkbid0IGJlIGRvaW5nIG5vbi1hdG9taWMgbG9hZHMgb2YKKwkgKiBhdG9taWMgZGF0YSksIGJ1 dCB0aGUgbXV0ZXggcHJvdGVjdGlvbiBtYWtlcyB0aGlzIHNhZmUsIGFuZCB3cml0aW5nCisJICog YSBtZW1iZXItZm9yLW1lbWJlciBjb3B5IGlzIHRlZGlvdXMgZm9yIHRoaXMgc2l0dWF0aW9uLgor CSAqLworCSpkc3QgPSAqc291cmNlOworCS8qIG5fd2FpdF90aGRzIGlzIG5vdCByZXBvcnRlZCAo bW9kaWZpZWQgdy9vIGxvY2tpbmcpLiAqLworCWF0b21pY19zdG9yZV91MzIoJmRzdC0+bl93YWl0 aW5nX3RoZHMsIDAsIEFUT01JQ19SRUxBWEVEKTsKK30KKworLyogQ29weSB0aGUgcHJvZiBkYXRh IGZyb20gbXV0ZXggZm9yIHByb2Nlc3NpbmcuICovCitzdGF0aWMgaW5saW5lIHZvaWQKK21hbGxv Y19tdXRleF9wcm9mX3JlYWQodHNkbl90ICp0c2RuLCBtdXRleF9wcm9mX2RhdGFfdCAqZGF0YSwK KyAgICBtYWxsb2NfbXV0ZXhfdCAqbXV0ZXgpIHsKKwkvKiBDYW4gb25seSByZWFkIGhvbGRpbmcg dGhlIG11dGV4LiAqLworCW1hbGxvY19tdXRleF9hc3NlcnRfb3duZXIodHNkbiwgbXV0ZXgpOwor CW1hbGxvY19tdXRleF9wcm9mX2NvcHkoZGF0YSwgJm11dGV4LT5wcm9mX2RhdGEpOworfQorCitz dGF0aWMgaW5saW5lIHZvaWQKK21hbGxvY19tdXRleF9wcm9mX2FjY3VtKHRzZG5fdCAqdHNkbiwg bXV0ZXhfcHJvZl9kYXRhX3QgKmRhdGEsCisgICAgbWFsbG9jX211dGV4X3QgKm11dGV4KSB7CisJ bXV0ZXhfcHJvZl9kYXRhX3QgKnNvdXJjZSA9ICZtdXRleC0+cHJvZl9kYXRhOworCS8qIENhbiBv bmx5IHJlYWQgaG9sZGluZyB0aGUgbXV0ZXguICovCisJbWFsbG9jX211dGV4X2Fzc2VydF9vd25l cih0c2RuLCBtdXRleCk7CisKKwluc3RpbWVfYWRkKCZkYXRhLT50b3Rfd2FpdF90aW1lLCAmc291 cmNlLT50b3Rfd2FpdF90aW1lKTsKKwlpZiAobnN0aW1lX2NvbXBhcmUoJnNvdXJjZS0+bWF4X3dh aXRfdGltZSwgJmRhdGEtPm1heF93YWl0X3RpbWUpID4gMCkgeworCQluc3RpbWVfY29weSgmZGF0 YS0+bWF4X3dhaXRfdGltZSwgJnNvdXJjZS0+bWF4X3dhaXRfdGltZSk7CisJfQorCWRhdGEtPm5f d2FpdF90aW1lcyArPSBzb3VyY2UtPm5fd2FpdF90aW1lczsKKwlkYXRhLT5uX3NwaW5fYWNxdWly ZWQgKz0gc291cmNlLT5uX3NwaW5fYWNxdWlyZWQ7CisJaWYgKGRhdGEtPm1heF9uX3RoZHMgPCBz b3VyY2UtPm1heF9uX3RoZHMpIHsKKwkJZGF0YS0+bWF4X25fdGhkcyA9IHNvdXJjZS0+bWF4X25f dGhkczsKKwl9CisJLyogbl93YWl0X3RoZHMgaXMgbm90IHJlcG9ydGVkLiAqLworCWF0b21pY19z dG9yZV91MzIoJmRhdGEtPm5fd2FpdGluZ190aGRzLCAwLCBBVE9NSUNfUkVMQVhFRCk7CisJZGF0 YS0+bl9vd25lcl9zd2l0Y2hlcyArPSBzb3VyY2UtPm5fb3duZXJfc3dpdGNoZXM7CisJZGF0YS0+ bl9sb2NrX29wcyArPSBzb3VyY2UtPm5fbG9ja19vcHM7Cit9CisKKy8qIENvbXBhcmUgdGhlIHBy b2YgZGF0YSBhbmQgdXBkYXRlIHRvIHRoZSBtYXhpbXVtLiAqLworc3RhdGljIGlubGluZSB2b2lk CittYWxsb2NfbXV0ZXhfcHJvZl9tYXhfdXBkYXRlKHRzZG5fdCAqdHNkbiwgbXV0ZXhfcHJvZl9k YXRhX3QgKmRhdGEsCisgICAgbWFsbG9jX211dGV4X3QgKm11dGV4KSB7CisJbXV0ZXhfcHJvZl9k YXRhX3QgKnNvdXJjZSA9ICZtdXRleC0+cHJvZl9kYXRhOworCS8qIENhbiBvbmx5IHJlYWQgaG9s ZGluZyB0aGUgbXV0ZXguICovCisJbWFsbG9jX211dGV4X2Fzc2VydF9vd25lcih0c2RuLCBtdXRl eCk7CisKKwlpZiAobnN0aW1lX2NvbXBhcmUoJnNvdXJjZS0+dG90X3dhaXRfdGltZSwgJmRhdGEt PnRvdF93YWl0X3RpbWUpID4gMCkgeworCQluc3RpbWVfY29weSgmZGF0YS0+dG90X3dhaXRfdGlt ZSwgJnNvdXJjZS0+dG90X3dhaXRfdGltZSk7CisJfQorCWlmIChuc3RpbWVfY29tcGFyZSgmc291 cmNlLT5tYXhfd2FpdF90aW1lLCAmZGF0YS0+bWF4X3dhaXRfdGltZSkgPiAwKSB7CisJCW5zdGlt ZV9jb3B5KCZkYXRhLT5tYXhfd2FpdF90aW1lLCAmc291cmNlLT5tYXhfd2FpdF90aW1lKTsKKwl9 CisJaWYgKHNvdXJjZS0+bl93YWl0X3RpbWVzID4gZGF0YS0+bl93YWl0X3RpbWVzKSB7CisJCWRh dGEtPm5fd2FpdF90aW1lcyA9IHNvdXJjZS0+bl93YWl0X3RpbWVzOworCX0KKwlpZiAoc291cmNl LT5uX3NwaW5fYWNxdWlyZWQgPiBkYXRhLT5uX3NwaW5fYWNxdWlyZWQpIHsKKwkJZGF0YS0+bl9z cGluX2FjcXVpcmVkID0gc291cmNlLT5uX3NwaW5fYWNxdWlyZWQ7CisJfQorCWlmIChzb3VyY2Ut Pm1heF9uX3RoZHMgPiBkYXRhLT5tYXhfbl90aGRzKSB7CisJCWRhdGEtPm1heF9uX3RoZHMgPSBz b3VyY2UtPm1heF9uX3RoZHM7CisJfQorCWlmIChzb3VyY2UtPm5fb3duZXJfc3dpdGNoZXMgPiBk YXRhLT5uX293bmVyX3N3aXRjaGVzKSB7CisJCWRhdGEtPm5fb3duZXJfc3dpdGNoZXMgPSBzb3Vy Y2UtPm5fb3duZXJfc3dpdGNoZXM7CisJfQorCWlmIChzb3VyY2UtPm5fbG9ja19vcHMgPiBkYXRh LT5uX2xvY2tfb3BzKSB7CisJCWRhdGEtPm5fbG9ja19vcHMgPSBzb3VyY2UtPm5fbG9ja19vcHM7 CisJfQorCS8qIG5fd2FpdF90aGRzIGlzIG5vdCByZXBvcnRlZC4gKi8KK30KKworI2VuZGlmIC8q IEpFTUFMTE9DX0lOVEVSTkFMX01VVEVYX0ggKi8KCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0z LjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL211dGV4 X3Byb2YuaCBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUv amVtYWxsb2MvaW50ZXJuYWwvbXV0ZXhfcHJvZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAuLjRhNTI2YTUKLS0tIC9kZXYvbnVsbAorKysgYi8zODktZHMtYmFzZS0zLjMuMC1i dWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL211dGV4X3Byb2Yu aApAQCAtMCwwICsxLDExNyBAQAorI2lmbmRlZiBKRU1BTExPQ19JTlRFUk5BTF9NVVRFWF9QUk9G X0gKKyNkZWZpbmUgSkVNQUxMT0NfSU5URVJOQUxfTVVURVhfUFJPRl9ICisKKyNpbmNsdWRlICJq ZW1hbGxvYy9pbnRlcm5hbC9hdG9taWMuaCIKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9u c3RpbWUuaCIKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC90c2RfdHlwZXMuaCIKKworI2Rl ZmluZSBNVVRFWF9QUk9GX0dMT0JBTF9NVVRFWEVTCQkJCQlcCisgICAgT1AoYmFja2dyb3VuZF90 aHJlYWQpCQkJCQkJXAorICAgIE9QKG1heF9wZXJfYmdfdGhkKQkJCQkJCQlcCisgICAgT1AoY3Rs KQkJCQkJCQkJXAorICAgIE9QKHByb2YpCQkJCQkJCQlcCisgICAgT1AocHJvZl90aGRzX2RhdGEp CQkJCQkJCVwKKyAgICBPUChwcm9mX2R1bXApCQkJCQkJCVwKKyAgICBPUChwcm9mX3JlY2VudF9h bGxvYykJCQkJCQlcCisgICAgT1AocHJvZl9yZWNlbnRfZHVtcCkJCQkJCQlcCisgICAgT1AocHJv Zl9zdGF0cykKKwordHlwZWRlZiBlbnVtIHsKKyNkZWZpbmUgT1AobXR4KSBnbG9iYWxfcHJvZl9t dXRleF8jI210eCwKKwlNVVRFWF9QUk9GX0dMT0JBTF9NVVRFWEVTCisjdW5kZWYgT1AKKwltdXRl eF9wcm9mX251bV9nbG9iYWxfbXV0ZXhlcworfSBtdXRleF9wcm9mX2dsb2JhbF9pbmRfdDsKKwor I2RlZmluZSBNVVRFWF9QUk9GX0FSRU5BX01VVEVYRVMJCQkJCVwKKyAgICBPUChsYXJnZSkJCQkJ CQkJCVwKKyAgICBPUChleHRlbnRfYXZhaWwpCQkJCQkJCVwKKyAgICBPUChleHRlbnRzX2RpcnR5 KQkJCQkJCQlcCisgICAgT1AoZXh0ZW50c19tdXp6eSkJCQkJCQkJXAorICAgIE9QKGV4dGVudHNf cmV0YWluZWQpCQkJCQkJXAorICAgIE9QKGRlY2F5X2RpcnR5KQkJCQkJCQlcCisgICAgT1AoZGVj YXlfbXV6enkpCQkJCQkJCVwKKyAgICBPUChiYXNlKQkJCQkJCQkJXAorICAgIE9QKHRjYWNoZV9s aXN0KQkJCQkJCQlcCisgICAgT1AoaHBhX3NoYXJkKQkJCQkJCQlcCisgICAgT1AoaHBhX3NoYXJk X2dyb3cpCQkJCQkJCVwKKyAgICBPUChocGFfc2VjKQorCit0eXBlZGVmIGVudW0geworI2RlZmlu ZSBPUChtdHgpIGFyZW5hX3Byb2ZfbXV0ZXhfIyNtdHgsCisJTVVURVhfUFJPRl9BUkVOQV9NVVRF WEVTCisjdW5kZWYgT1AKKwltdXRleF9wcm9mX251bV9hcmVuYV9tdXRleGVzCit9IG11dGV4X3By b2ZfYXJlbmFfaW5kX3Q7CisKKy8qCisgKiBUaGUgZm9ydGggcGFyYW1ldGVyIGlzIGEgYm9vbGVh biB2YWx1ZSB0aGF0IGlzIHRydWUgZm9yIGRlcml2ZWQgcmF0ZSBjb3VudGVycworICogYW5kIGZh bHNlIGZvciByZWFsIG9uZXMuCisgKi8KKyNkZWZpbmUgTVVURVhfUFJPRl9VSU5UNjRfQ09VTlRF UlMJCQkJCVwKKyAgICBPUChudW1fb3BzLCB1aW50NjRfdCwgIm5fbG9ja19vcHMiLCBmYWxzZSwg bnVtX29wcykJCQkJCVwKKyAgICBPUChudW1fb3BzX3BzLCB1aW50NjRfdCwgIigjL3NlYykiLCB0 cnVlLCBudW1fb3BzKQkJCQlcCisgICAgT1AobnVtX3dhaXQsIHVpbnQ2NF90LCAibl93YWl0aW5n IiwgZmFsc2UsIG51bV93YWl0KQkJCQlcCisgICAgT1AobnVtX3dhaXRfcHMsIHVpbnQ2NF90LCAi KCMvc2VjKSIsIHRydWUsIG51bV93YWl0KQkJCQlcCisgICAgT1AobnVtX3NwaW5fYWNxLCB1aW50 NjRfdCwgIm5fc3Bpbl9hY3EiLCBmYWxzZSwgbnVtX3NwaW5fYWNxKQkJCVwKKyAgICBPUChudW1f c3Bpbl9hY3FfcHMsIHVpbnQ2NF90LCAiKCMvc2VjKSIsIHRydWUsIG51bV9zcGluX2FjcSkJCQlc CisgICAgT1AobnVtX293bmVyX3N3aXRjaCwgdWludDY0X3QsICJuX293bmVyX3N3aXRjaCIsIGZh bHNlLCBudW1fb3duZXJfc3dpdGNoKQkJXAorICAgIE9QKG51bV9vd25lcl9zd2l0Y2hfcHMsIHVp bnQ2NF90LCAiKCMvc2VjKSIsIHRydWUsIG51bV9vd25lcl9zd2l0Y2gpCVwKKyAgICBPUCh0b3Rh bF93YWl0X3RpbWUsIHVpbnQ2NF90LCAidG90YWxfd2FpdF9ucyIsIGZhbHNlLCB0b3RhbF93YWl0 X3RpbWUpCQlcCisgICAgT1AodG90YWxfd2FpdF90aW1lX3BzLCB1aW50NjRfdCwgIigjL3NlYyki LCB0cnVlLCB0b3RhbF93YWl0X3RpbWUpCQlcCisgICAgT1AobWF4X3dhaXRfdGltZSwgdWludDY0 X3QsICJtYXhfd2FpdF9ucyIsIGZhbHNlLCBtYXhfd2FpdF90aW1lKQorCisjZGVmaW5lIE1VVEVY X1BST0ZfVUlOVDMyX0NPVU5URVJTCQkJCQlcCisgICAgT1AobWF4X251bV90aGRzLCB1aW50MzJf dCwgIm1heF9uX3RoZHMiLCBmYWxzZSwgbWF4X251bV90aGRzKQorCisjZGVmaW5lIE1VVEVYX1BS T0ZfQ09VTlRFUlMJCQkJCQlcCisJCU1VVEVYX1BST0ZfVUlOVDY0X0NPVU5URVJTCQkJCVwKKwkJ TVVURVhfUFJPRl9VSU5UMzJfQ09VTlRFUlMKKworI2RlZmluZSBPUChjb3VudGVyLCB0eXBlLCBo dW1hbiwgZGVyaXZlZCwgYmFzZV9jb3VudGVyKSBtdXRleF9jb3VudGVyXyMjY291bnRlciwKKwor I2RlZmluZSBDT1VOVEVSX0VOVU0oY291bnRlcl9saXN0LCB0KQkJCQkJXAorCQl0eXBlZGVmIGVu dW0gewkJCQkJCVwKKwkJCWNvdW50ZXJfbGlzdAkJCQkJXAorCQkJbXV0ZXhfcHJvZl9udW1fIyN0 IyNfY291bnRlcnMJCQlcCisJCX0gbXV0ZXhfcHJvZl8jI3QjI19jb3VudGVyX2luZF90OworCitD T1VOVEVSX0VOVU0oTVVURVhfUFJPRl9VSU5UNjRfQ09VTlRFUlMsIHVpbnQ2NF90KQorQ09VTlRF Ul9FTlVNKE1VVEVYX1BST0ZfVUlOVDMyX0NPVU5URVJTLCB1aW50MzJfdCkKKworI3VuZGVmIENP VU5URVJfRU5VTQorI3VuZGVmIE9QCisKK3R5cGVkZWYgc3RydWN0IHsKKwkvKgorCSAqIENvdW50 ZXJzIHRvdWNoZWQgb24gdGhlIHNsb3cgcGF0aCwgaS5lLiB3aGVuIHRoZXJlIGlzIGxvY2sKKwkg KiBjb250ZW50aW9uLiAgV2UgdXBkYXRlIHRoZW0gb25jZSB3ZSBoYXZlIHRoZSBsb2NrLgorCSAq LworCS8qIFRvdGFsIHRpbWUgKGluIG5hbm8gc2Vjb25kcykgc3BlbnQgd2FpdGluZyBvbiB0aGlz IG11dGV4LiAqLworCW5zdGltZV90CQl0b3Rfd2FpdF90aW1lOworCS8qIE1heCB0aW1lIChpbiBu YW5vIHNlY29uZHMpIHNwZW50IG9uIGEgc2luZ2xlIGxvY2sgb3BlcmF0aW9uLiAqLworCW5zdGlt ZV90CQltYXhfd2FpdF90aW1lOworCS8qICMgb2YgdGltZXMgaGF2ZSB0byB3YWl0IGZvciB0aGlz IG11dGV4IChhZnRlciBzcGlubmluZykuICovCisJdWludDY0X3QJCW5fd2FpdF90aW1lczsKKwkv KiAjIG9mIHRpbWVzIGFjcXVpcmVkIHRoZSBtdXRleCB0aHJvdWdoIGxvY2FsIHNwaW5uaW5nLiAq LworCXVpbnQ2NF90CQluX3NwaW5fYWNxdWlyZWQ7CisJLyogTWF4ICMgb2YgdGhyZWFkcyB3YWl0 aW5nIGZvciB0aGUgbXV0ZXggYXQgdGhlIHNhbWUgdGltZS4gKi8KKwl1aW50MzJfdAkJbWF4X25f dGhkczsKKwkvKiBDdXJyZW50ICMgb2YgdGhyZWFkcyB3YWl0aW5nIG9uIHRoZSBsb2NrLiAgQXRv bWljIHN5bmNlZC4gKi8KKwlhdG9taWNfdTMyX3QJCW5fd2FpdGluZ190aGRzOworCisJLyoKKwkg KiBEYXRhIHRvdWNoZWQgb24gdGhlIGZhc3QgcGF0aC4gIFRoZXNlIGFyZSBtb2RpZmllZCByaWdo dCBhZnRlciB3ZQorCSAqIGdyYWIgdGhlIGxvY2ssIHNvIGl0J3MgcGxhY2VkIGNsb3Nlc3QgdG8g dGhlIGVuZCAoaS5lLiByaWdodCBiZWZvcmUKKwkgKiB0aGUgbG9jaykgc28gdGhhdCB3ZSBoYXZl IGEgaGlnaGVyIGNoYW5jZSBvZiB0aGVtIGJlaW5nIG9uIHRoZSBzYW1lCisJICogY2FjaGVsaW5l LgorCSAqLworCS8qICMgb2YgdGltZXMgdGhlIG11dGV4IGhvbGRlciBpcyBkaWZmZXJlbnQgdGhh biB0aGUgcHJldmlvdXMgb25lLiAqLworCXVpbnQ2NF90CQluX293bmVyX3N3aXRjaGVzOworCS8q IFByZXZpb3VzIG11dGV4IGhvbGRlciwgdG8gZmFjaWxpdGF0ZSBuX293bmVyX3N3aXRjaGVzLiAq LworCXRzZG5fdAkJCSpwcmV2X293bmVyOworCS8qICMgb2YgbG9jaygpIG9wZXJhdGlvbnMgaW4g dG90YWwuICovCisJdWludDY0X3QJCW5fbG9ja19vcHM7Cit9IG11dGV4X3Byb2ZfZGF0YV90Owor CisjZW5kaWYgLyogSkVNQUxMT0NfSU5URVJOQUxfTVVURVhfUFJPRl9IICovCgpkaWZmIC0tZ2l0 IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxv Yy9pbnRlcm5hbC9uc3RpbWUuaCBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUu My4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvbnN0aW1lLmgKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMC4uNDg2ZTVjYwotLS0gL2Rldi9udWxsCisrKyBiLzM4OS1kcy1iYXNl LTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvbnN0 aW1lLmgKQEAgLTAsMCArMSw3MyBAQAorI2lmbmRlZiBKRU1BTExPQ19JTlRFUk5BTF9OU1RJTUVf SAorI2RlZmluZSBKRU1BTExPQ19JTlRFUk5BTF9OU1RJTUVfSAorCisvKiBNYXhpbXVtIHN1cHBv cnRlZCBudW1iZXIgb2Ygc2Vjb25kcyAofjU4NCB5ZWFycykuICovCisjZGVmaW5lIE5TVElNRV9T RUNfTUFYIEtRVSgxODQ0Njc0NDA3MikKKworI2RlZmluZSBOU1RJTUVfTUFHSUMgKCh1aW50MzJf dCkweGI4YTljZTM3KQorI2lmZGVmIEpFTUFMTE9DX0RFQlVHCisjICBkZWZpbmUgTlNUSU1FX1pF Uk9fSU5JVElBTElaRVIgezAsIE5TVElNRV9NQUdJQ30KKyNlbHNlCisjICBkZWZpbmUgTlNUSU1F X1pFUk9fSU5JVElBTElaRVIgezB9CisjZW5kaWYKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVpbnQ2 NF90IG5zOworI2lmZGVmIEpFTUFMTE9DX0RFQlVHCisJdWludDMyX3QgbWFnaWM7IC8qIFRyYWNr cyBpZiBpbml0aWFsaXplZC4gKi8KKyNlbmRpZgorfSBuc3RpbWVfdDsKKworc3RhdGljIGNvbnN0 IG5zdGltZV90IG5zdGltZV96ZXJvID0gTlNUSU1FX1pFUk9fSU5JVElBTElaRVI7CisKK3ZvaWQg bnN0aW1lX2luaXQobnN0aW1lX3QgKnRpbWUsIHVpbnQ2NF90IG5zKTsKK3ZvaWQgbnN0aW1lX2lu aXQyKG5zdGltZV90ICp0aW1lLCB1aW50NjRfdCBzZWMsIHVpbnQ2NF90IG5zZWMpOwordWludDY0 X3QgbnN0aW1lX25zKGNvbnN0IG5zdGltZV90ICp0aW1lKTsKK3VpbnQ2NF90IG5zdGltZV9zZWMo Y29uc3QgbnN0aW1lX3QgKnRpbWUpOwordWludDY0X3QgbnN0aW1lX21zZWMoY29uc3QgbnN0aW1l X3QgKnRpbWUpOwordWludDY0X3QgbnN0aW1lX25zZWMoY29uc3QgbnN0aW1lX3QgKnRpbWUpOwor dm9pZCBuc3RpbWVfY29weShuc3RpbWVfdCAqdGltZSwgY29uc3QgbnN0aW1lX3QgKnNvdXJjZSk7 CitpbnQgbnN0aW1lX2NvbXBhcmUoY29uc3QgbnN0aW1lX3QgKmEsIGNvbnN0IG5zdGltZV90ICpi KTsKK3ZvaWQgbnN0aW1lX2FkZChuc3RpbWVfdCAqdGltZSwgY29uc3QgbnN0aW1lX3QgKmFkZGVu ZCk7Cit2b2lkIG5zdGltZV9pYWRkKG5zdGltZV90ICp0aW1lLCB1aW50NjRfdCBhZGRlbmQpOwor dm9pZCBuc3RpbWVfc3VidHJhY3QobnN0aW1lX3QgKnRpbWUsIGNvbnN0IG5zdGltZV90ICpzdWJ0 cmFoZW5kKTsKK3ZvaWQgbnN0aW1lX2lzdWJ0cmFjdChuc3RpbWVfdCAqdGltZSwgdWludDY0X3Qg c3VidHJhaGVuZCk7Cit2b2lkIG5zdGltZV9pbXVsdGlwbHkobnN0aW1lX3QgKnRpbWUsIHVpbnQ2 NF90IG11bHRpcGxpZXIpOwordm9pZCBuc3RpbWVfaWRpdmlkZShuc3RpbWVfdCAqdGltZSwgdWlu dDY0X3QgZGl2aXNvcik7Cit1aW50NjRfdCBuc3RpbWVfZGl2aWRlKGNvbnN0IG5zdGltZV90ICp0 aW1lLCBjb25zdCBuc3RpbWVfdCAqZGl2aXNvcik7Cit1aW50NjRfdCBuc3RpbWVfbnNfc2luY2Uo Y29uc3QgbnN0aW1lX3QgKnBhc3QpOworCit0eXBlZGVmIGJvb2wgKG5zdGltZV9tb25vdG9uaWNf dCkodm9pZCk7CitleHRlcm4gbnN0aW1lX21vbm90b25pY190ICpKRVRfTVVUQUJMRSBuc3RpbWVf bW9ub3RvbmljOworCit0eXBlZGVmIHZvaWQgKG5zdGltZV91cGRhdGVfdCkobnN0aW1lX3QgKik7 CitleHRlcm4gbnN0aW1lX3VwZGF0ZV90ICpKRVRfTVVUQUJMRSBuc3RpbWVfdXBkYXRlOworCit0 eXBlZGVmIHZvaWQgKG5zdGltZV9wcm9mX3VwZGF0ZV90KShuc3RpbWVfdCAqKTsKK2V4dGVybiBu c3RpbWVfcHJvZl91cGRhdGVfdCAqSkVUX01VVEFCTEUgbnN0aW1lX3Byb2ZfdXBkYXRlOworCit2 b2lkIG5zdGltZV9pbml0X3VwZGF0ZShuc3RpbWVfdCAqdGltZSk7Cit2b2lkIG5zdGltZV9wcm9m X2luaXRfdXBkYXRlKG5zdGltZV90ICp0aW1lKTsKKworZW51bSBwcm9mX3RpbWVfcmVzX2Ugewor CXByb2ZfdGltZV9yZXNfZGVmYXVsdCA9IDAsCisJcHJvZl90aW1lX3Jlc19oaWdoID0gMQorfTsK K3R5cGVkZWYgZW51bSBwcm9mX3RpbWVfcmVzX2UgcHJvZl90aW1lX3Jlc190OworCitleHRlcm4g cHJvZl90aW1lX3Jlc190IG9wdF9wcm9mX3RpbWVfcmVzOworZXh0ZXJuIGNvbnN0IGNoYXIgKnBy b2ZfdGltZV9yZXNfbW9kZV9uYW1lc1tdOworCitKRU1BTExPQ19BTFdBWVNfSU5MSU5FIHZvaWQK K25zdGltZV9pbml0X3plcm8obnN0aW1lX3QgKnRpbWUpIHsKKwluc3RpbWVfY29weSh0aW1lLCAm bnN0aW1lX3plcm8pOworfQorCitKRU1BTExPQ19BTFdBWVNfSU5MSU5FIGJvb2wKK25zdGltZV9l cXVhbHNfemVybyhuc3RpbWVfdCAqdGltZSkgeworCWludCBkaWZmID0gbnN0aW1lX2NvbXBhcmUo dGltZSwgJm5zdGltZV96ZXJvKTsKKwlhc3NlcnQoZGlmZiA+PSAwKTsKKwlyZXR1cm4gZGlmZiA9 PSAwOworfQorCisjZW5kaWYgLyogSkVNQUxMT0NfSU5URVJOQUxfTlNUSU1FX0ggKi8KCmRpZmYg LS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2pl bWFsbG9jL2ludGVybmFsL3BhLmggYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01 LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL3BhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMC4uNDc0OGEwNQotLS0gL2Rldi9udWxsCisrKyBiLzM4OS1kcy1iYXNlLTMu My4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvcGEuaApA QCAtMCwwICsxLDI0MyBAQAorI2lmbmRlZiBKRU1BTExPQ19JTlRFUk5BTF9QQV9ICisjZGVmaW5l IEpFTUFMTE9DX0lOVEVSTkFMX1BBX0gKKworI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2Jh c2UuaCIKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9kZWNheS5oIgorI2luY2x1ZGUgImpl bWFsbG9jL2ludGVybmFsL2VjYWNoZS5oIgorI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2Vk YXRhX2NhY2hlLmgiCisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvZW1hcC5oIgorI2luY2x1 ZGUgImplbWFsbG9jL2ludGVybmFsL2hwYS5oIgorI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFs L2xvY2tlZGludC5oIgorI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL3BhYy5oIgorI2luY2x1 ZGUgImplbWFsbG9jL2ludGVybmFsL3BhaS5oIgorI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFs L3NlYy5oIgorCisvKgorICogVGhlIHBhZ2UgYWxsb2NhdG9yOyByZXNwb25zaWJsZSBmb3IgYWNx dWlyaW5nIHBhZ2VzIG9mIG1lbW9yeSBmb3IKKyAqIGFsbG9jYXRpb25zLiAgSXQgcGlja3MgdGhl IGltcGxlbWVudGF0aW9uIG9mIHRoZSBwYWdlIGFsbG9jYXRvciBpbnRlcmZhY2UKKyAqIChpLmUu IGEgcGFpX3QpIHRvIGhhbmRsZSBhIGdpdmVuIHBhZ2UtbGV2ZWwgYWxsb2NhdGlvbiByZXF1ZXN0 LiAgRm9yIG5vdywgdGhlCisgKiBvbmx5IHN1Y2ggaW1wbGVtZW50YXRpb24gaXMgdGhlIFBBQyBj b2RlICgicGFnZSBhbGxvY2F0b3IgY2xhc3NpYyIpLCBidXQKKyAqIG90aGVycyB3aWxsIGJlIGNv bWluZyBzb29uLgorICovCisKK3R5cGVkZWYgc3RydWN0IHBhX2NlbnRyYWxfcyBwYV9jZW50cmFs X3Q7CitzdHJ1Y3QgcGFfY2VudHJhbF9zIHsKKwlocGFfY2VudHJhbF90IGhwYTsKK307CisKKy8q CisgKiBUaGUgc3RhdHMgZm9yIGEgcGFydGljdWxhciBwYV9zaGFyZC4gIEJlY2F1c2Ugb2YgdGhl IHdheSB0aGUgY3RsIG1vZHVsZQorICogaGFuZGxlcyBzdGF0cyBlcG9jaCBkYXRhIGNvbGxlY3Rp b24gKGl0IGhhcyBpdHMgb3duIGFyZW5hX3N0YXRzLCBhbmQgbWVyZ2VzCisgKiB0aGUgc3RhdHMg ZnJvbSBlYWNoIGFyZW5hIGludG8gaXQpLCB0aGlzIG5lZWRzIHRvIGxpdmUgaW4gdGhlIGFyZW5h X3N0YXRzX3Q7CisgKiBoZW5jZSB3ZSBkZWZpbmUgaXQgaGVyZSBhbmQgbGV0IHRoZSBwYV9zaGFy ZCBoYXZlIGEgcG9pbnRlciAocmF0aGVyIHRoYW4gdGhlCisgKiBtb3JlIG5hdHVyYWwgYXBwcm9h Y2ggb2YganVzdCBlbWJlZGRpbmcgaXQgaW4gdGhlIHBhX3NoYXJkIGl0c2VsZikuCisgKgorICog V2UgZm9sbG93IHRoZSBhcmVuYV9zdGF0c190IGFwcHJvYWNoIG9mIG1hcmtpbmcgdGhlIGRlcml2 ZWQgZmllbGRzLiAgVGhlc2UKKyAqIGFyZSB0aGUgb25lcyB0aGF0IGFyZSBub3QgbWFpbnRhaW5l ZCBvbiB0aGVpciBvd247IGluc3RlYWQsIHRoZWlyIHZhbHVlcyBhcmUKKyAqIGRlcml2ZWQgZHVy aW5nIHRob3NlIHN0YXRzIG1lcmdlcy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgcGFfc2hhcmRfc3Rh dHNfcyBwYV9zaGFyZF9zdGF0c190Oworc3RydWN0IHBhX3NoYXJkX3N0YXRzX3MgeworCS8qIE51 bWJlciBvZiBlZGF0YV90IHN0cnVjdHMgYWxsb2NhdGVkIGJ5IGJhc2UsIGJ1dCBub3QgYmVpbmcg dXNlZC4gKi8KKwlzaXplX3QgZWRhdGFfYXZhaWw7IC8qIERlcml2ZWQuICovCisJLyoKKwkgKiBT dGF0cyBzcGVjaWZpYyB0byB0aGUgUEFDLiAgRm9yIG5vdywgdGhlc2UgYXJlIHRoZSBvbmx5IHN0 YXRzIHRoYXQKKwkgKiBleGlzdCwgYnV0IHRoZXJlIHdpbGwgZXZlbnR1YWxseSBiZSBvdGhlciBw YWdlIGFsbG9jYXRvcnMuICBUaGluZ3MKKwkgKiBsaWtlIGVkYXRhX2F2YWlsIG1ha2Ugc2Vuc2Ug aW4gYSBjcm9zcy1QQSBzZW5zZSwgYnV0IHRoaW5ncyBsaWtlCisJICogbnB1cmdlcyBkb24ndC4K KwkgKi8KKwlwYWNfc3RhdHNfdCBwYWNfc3RhdHM7Cit9OworCisvKgorICogVGhlIGxvY2FsIGFs bG9jYXRvciBoYW5kbGUuICBLZWVwcyB0aGUgc3RhdGUgbmVjZXNzYXJ5IHRvIHNhdGlzZnkgcGFn ZS1zaXplZAorICogYWxsb2NhdGlvbnMuCisgKgorICogVGhlIGNvbnRlbnRzIGFyZSBtb3N0bHkg aW50ZXJuYWwgdG8gdGhlIFBBIG1vZHVsZS4gIFRoZSBrZXkgZXhjZXB0aW9uIGlzIHRoYXQKKyAq IGFyZW5hIGRlY2F5IGNvZGUgaXMgYWxsb3dlZCB0byBncmFiIHBvaW50ZXJzIHRvIHRoZSBkaXJ0 eSBhbmQgbXV6enkgZWNhY2hlcworICogZGVjYXlfdHMsIGZvciBhIGNvdXBsZSBvZiBxdWVyaWVz LCBwYXNzaW5nIHRoZW0gYmFjayB0byBhIFBBIGZ1bmN0aW9uLCBvcgorICogYWNxdWlyaW5nIGRl Y2F5Lm10eCBhbmQgbG9va2luZyBhdCBkZWNheS5wdXJnaW5nLiAgVGhlIHJlYXNvbmluZyBpcyB0 aGF0LAorICogd2hpbGUgUEEgZGVjaWRlcyB3aGF0IGFuZCBob3cgdG8gcHVyZ2UsIHRoZSBhcmVu YSBjb2RlIGRlY2lkZXMgd2hlbiBhbmQgd2hlcmUKKyAqIChlLmcuIG9uIHdoYXQgdGhyZWFkKS4g IEl0J3MgYWxsb3dlZCB0byB1c2UgdGhlIHByZXNlbmNlIG9mIGFub3RoZXIgcHVyZ2VyIHRvCisg KiBkZWNpZGUuCisgKiAoVGhlIGJhY2tncm91bmQgdGhyZWFkIGNvZGUgYWxzbyB0b3VjaGVzIHNv bWUgb3RoZXIgZGVjYXkgaW50ZXJuYWxzLCBidXQKKyAqIHRoYXQncyBub3QgZnVuZGFtZW50YWw7 IGl0cycganVzdCBhbiBhcnRpZmFjdCBvZiBhIHBhcnRpYWwgcmVmYWN0b3JpbmcsIGFuZAorICog aXRzIGFjY2Vzc2VzIGNvdWxkIGJlIHN0cmFpZ2h0Zm9yd2FyZGx5IG1vdmVkIGluc2lkZSB0aGUg ZGVjYXkgbW9kdWxlKS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgcGFfc2hhcmRfcyBwYV9zaGFyZF90 Oworc3RydWN0IHBhX3NoYXJkX3MgeworCS8qIFRoZSBjZW50cmFsIFBBIHRoaXMgc2hhcmQgaXMg YXNzb2NpYXRlZCB3aXRoLiAqLworCXBhX2NlbnRyYWxfdCAqY2VudHJhbDsKKworCS8qCisJICog TnVtYmVyIG9mIHBhZ2VzIGluIGFjdGl2ZSBleHRlbnRzLgorCSAqCisJICogU3luY2hyb25pemF0 aW9uOiBhdG9taWMuCisJICovCisJYXRvbWljX3p1X3QgbmFjdGl2ZTsKKworCS8qCisJICogV2hl dGhlciBvciBub3Qgd2Ugc2hvdWxkIHByZWZlciB0aGUgaHVnZXBhZ2UgYWxsb2NhdG9yLiAgQXRv bWljIHNpbmNlCisJICogaXQgbWF5IGJlIGNvbmN1cnJlbnRseSBtb2RpZmllZCBieSBhIHRocmVh ZCBzZXR0aW5nIGV4dGVudCBob29rcy4KKwkgKiBOb3RlIHRoYXQgd2Ugc3RpbGwgbWF5IGRvIEhQ QSBvcGVyYXRpb25zIGluIHRoaXMgYXJlbmE7IGlmIHVzZV9ocGEgaXMKKwkgKiBjaGFuZ2VkIGZy b20gdHJ1ZSB0byBmYWxzZSwgd2UnbGwgZnJlZSBiYWNrIHRvIHRoZSBodWdlcGFnZSBhbGxvY2F0 b3IKKwkgKiBmb3IgdGhvc2UgYWxsb2NhdGlvbnMuCisJICovCisJYXRvbWljX2JfdCB1c2VfaHBh OworCisJLyoKKwkgKiBJZiB3ZSBuZXZlciB1c2VkIHRoZSBIUEEgdG8gYmVnaW4gd2l0aCwgaXQg d2Fzbid0IGluaXRpYWxpemVkLCBhbmQgc28KKwkgKiB3ZSBzaG91bGRuJ3QgdHJ5IHRvIGUuZy4g YWNxdWlyZSBpdHMgbXV0ZXhlcyBkdXJpbmcgZm9yay4gIFRoaXMKKwkgKiB0cmFja3MgdGhhdCBr bm93bGVkZ2UuCisJICovCisJYm9vbCBldmVyX3VzZWRfaHBhOworCisJLyogQWxsb2NhdGVzIGZy b20gYSBQQUMuICovCisJcGFjX3QgcGFjOworCisJLyoKKwkgKiBXZSBwbGFjZSBhIHNtYWxsIGV4 dGVudCBjYWNoZSBpbiBmcm9udCBvZiB0aGUgSFBBLCBzaW5jZSB3ZSBpbnRlbmQKKwkgKiB0aGVz ZSBjb25maWd1cmF0aW9ucyB0byB1c2UgbWFueSBmZXdlciBhcmVuYXMsIGFuZCB0aGVyZWZvcmUg aGF2ZSBhCisJICogaGlnaGVyIHJpc2sgb2YgaG90IGxvY2tzLgorCSAqLworCXNlY190IGhwYV9z ZWM7CisJaHBhX3NoYXJkX3QgaHBhX3NoYXJkOworCisJLyogVGhlIHNvdXJjZSBvZiBlZGF0YV90 IG9iamVjdHMuICovCisJZWRhdGFfY2FjaGVfdCBlZGF0YV9jYWNoZTsKKworCXVuc2lnbmVkIGlu ZDsKKworCW1hbGxvY19tdXRleF90ICpzdGF0c19tdHg7CisJcGFfc2hhcmRfc3RhdHNfdCAqc3Rh dHM7CisKKwkvKiBUaGUgZW1hcCB0aGlzIHNoYXJkIGlzIHRpZWQgdG8uICovCisJZW1hcF90ICpl bWFwOworCisJLyogVGhlIGJhc2UgZnJvbSB3aGljaCB3ZSBnZXQgdGhlIGVob29rcyBhbmQgYWxs b2NhdGUgbWV0YWRhdC4gKi8KKwliYXNlX3QgKmJhc2U7Cit9OworCitzdGF0aWMgaW5saW5lIGJv b2wKK3BhX3NoYXJkX2RvbnRfZGVjYXlfbXV6enkocGFfc2hhcmRfdCAqc2hhcmQpIHsKKwlyZXR1 cm4gZWNhY2hlX25wYWdlc19nZXQoJnNoYXJkLT5wYWMuZWNhY2hlX211enp5KSA9PSAwICYmCisJ ICAgIHBhY19kZWNheV9tc19nZXQoJnNoYXJkLT5wYWMsIGV4dGVudF9zdGF0ZV9tdXp6eSkgPD0g MDsKK30KKworc3RhdGljIGlubGluZSBlaG9va3NfdCAqCitwYV9zaGFyZF9laG9va3NfZ2V0KHBh X3NoYXJkX3QgKnNoYXJkKSB7CisJcmV0dXJuIGJhc2VfZWhvb2tzX2dldChzaGFyZC0+YmFzZSk7 Cit9CisKKy8qIFJldHVybnMgdHJ1ZSBvbiBlcnJvci4gKi8KK2Jvb2wgcGFfY2VudHJhbF9pbml0 KHBhX2NlbnRyYWxfdCAqY2VudHJhbCwgYmFzZV90ICpiYXNlLCBib29sIGhwYSwKKyAgICBocGFf aG9va3NfdCAqaHBhX2hvb2tzKTsKKworLyogUmV0dXJucyB0cnVlIG9uIGVycm9yLiAqLworYm9v bCBwYV9zaGFyZF9pbml0KHRzZG5fdCAqdHNkbiwgcGFfc2hhcmRfdCAqc2hhcmQsIHBhX2NlbnRy YWxfdCAqY2VudHJhbCwKKyAgICBlbWFwX3QgKmVtYXAsIGJhc2VfdCAqYmFzZSwgdW5zaWduZWQg aW5kLCBwYV9zaGFyZF9zdGF0c190ICpzdGF0cywKKyAgICBtYWxsb2NfbXV0ZXhfdCAqc3RhdHNf bXR4LCBuc3RpbWVfdCAqY3VyX3RpbWUsIHNpemVfdCBvdmVyc2l6ZV90aHJlc2hvbGQsCisgICAg c3NpemVfdCBkaXJ0eV9kZWNheV9tcywgc3NpemVfdCBtdXp6eV9kZWNheV9tcyk7CisKKy8qCisg KiBUaGlzIGlzbid0IGV4cG9zZWQgdG8gdXNlcnM7IHdlIGFsbG93IGxhdGUgZW5hYmxlbWVudCBv ZiB0aGUgSFBBIHNoYXJkIHNvCisgKiB0aGF0IHdlIGNhbiBib290IHdpdGhvdXQgd29ycnlpbmcg YWJvdXQgdGhlIEhQQSwgdGhlbiB0dXJuIGl0IG9uIGluIGEwLgorICovCitib29sIHBhX3NoYXJk X2VuYWJsZV9ocGEodHNkbl90ICp0c2RuLCBwYV9zaGFyZF90ICpzaGFyZCwKKyAgICBjb25zdCBo cGFfc2hhcmRfb3B0c190ICpocGFfb3B0cywgY29uc3Qgc2VjX29wdHNfdCAqaHBhX3NlY19vcHRz KTsKKworLyoKKyAqIFdlIHN0b3AgdXNpbmcgdGhlIEhQQSB3aGVuIGN1c3RvbSBleHRlbnQgaG9v a3MgYXJlIGluc3RhbGxlZCwgYnV0IHN0aWxsCisgKiByZWRpcmVjdCBkZWFsbG9jYXRpb25zIHRv IGl0LgorICovCit2b2lkIHBhX3NoYXJkX2Rpc2FibGVfaHBhKHRzZG5fdCAqdHNkbiwgcGFfc2hh cmRfdCAqc2hhcmQpOworCisvKgorICogVGhpcyBkb2VzIHRoZSBQQS1zcGVjaWZpYyBwYXJ0cyBv ZiBhcmVuYSByZXNldCAoaS5lLiBmcmVlaW5nIGFsbCBhY3RpdmUKKyAqIGFsbG9jYXRpb25zKS4K KyAqLwordm9pZCBwYV9zaGFyZF9yZXNldCh0c2RuX3QgKnRzZG4sIHBhX3NoYXJkX3QgKnNoYXJk KTsKKworLyoKKyAqIERlc3Ryb3kgYWxsIHRoZSByZW1haW5pbmcgcmV0YWluZWQgZXh0ZW50cy4g IFNob3VsZCBvbmx5IGJlIGNhbGxlZCBhZnRlcgorICogZGVjYXlpbmcgYWxsIGFjdGl2ZSwgZGly dHksIGFuZCBtdXp6eSBleHRlbnRzIHRvIHRoZSByZXRhaW5lZCBzdGF0ZSwgYXMgdGhlCisgKiBs YXN0IHN0ZXAgaW4gZGVzdHJveWluZyB0aGUgc2hhcmQuCisgKi8KK3ZvaWQgcGFfc2hhcmRfZGVz dHJveSh0c2RuX3QgKnRzZG4sIHBhX3NoYXJkX3QgKnNoYXJkKTsKKworLyogR2V0cyBhbiBlZGF0 YSBmb3IgdGhlIGdpdmVuIGFsbG9jYXRpb24uICovCitlZGF0YV90ICpwYV9hbGxvYyh0c2RuX3Qg KnRzZG4sIHBhX3NoYXJkX3QgKnNoYXJkLCBzaXplX3Qgc2l6ZSwKKyAgICBzaXplX3QgYWxpZ25t ZW50LCBib29sIHNsYWIsIHN6aW5kX3Qgc3ppbmQsIGJvb2wgemVybywgYm9vbCBndWFyZGVkLAor ICAgIGJvb2wgKmRlZmVycmVkX3dvcmtfZ2VuZXJhdGVkKTsKKy8qIFJldHVybnMgdHJ1ZSBvbiBl cnJvciwgaW4gd2hpY2ggY2FzZSBub3RoaW5nIGNoYW5nZWQuICovCitib29sIHBhX2V4cGFuZCh0 c2RuX3QgKnRzZG4sIHBhX3NoYXJkX3QgKnNoYXJkLCBlZGF0YV90ICplZGF0YSwgc2l6ZV90IG9s ZF9zaXplLAorICAgIHNpemVfdCBuZXdfc2l6ZSwgc3ppbmRfdCBzemluZCwgYm9vbCB6ZXJvLCBi b29sICpkZWZlcnJlZF93b3JrX2dlbmVyYXRlZCk7CisvKgorICogVGhlIHNhbWUuICBTZXRzICpn ZW5lcmF0ZWRfZGlydHkgdG8gdHJ1ZSBpZiB3ZSBwcm9kdWNlZCBuZXcgZGlydHkgcGFnZXMsIGFu ZAorICogZmFsc2Ugb3RoZXJ3aXNlLgorICovCitib29sIHBhX3Nocmluayh0c2RuX3QgKnRzZG4s IHBhX3NoYXJkX3QgKnNoYXJkLCBlZGF0YV90ICplZGF0YSwgc2l6ZV90IG9sZF9zaXplLAorICAg IHNpemVfdCBuZXdfc2l6ZSwgc3ppbmRfdCBzemluZCwgYm9vbCAqZGVmZXJyZWRfd29ya19nZW5l cmF0ZWQpOworLyoKKyAqIEZyZWVzIHRoZSBnaXZlbiBlZGF0YSBiYWNrIHRvIHRoZSBwYS4gIFNl dHMgKmdlbmVyYXRlZF9kaXJ0eSBpZiB3ZSBwcm9kdWNlZAorICogbmV3IGRpcnR5IHBhZ2VzICh3 ZWxsLCB3ZSBhbHdheXMgc2V0IGl0IGZvciBub3c7IGJ1dCB0aGlzIG5lZWQgbm90IGJlIHRoZQor ICogY2FzZSkuCisgKiAoV2UgY291bGQgbWFrZSBnZW5lcmF0ZWRfZGlydHkgdGhlIHJldHVybiB2 YWx1ZSBvZiBjb3Vyc2UsIGJ1dCB0aGlzIGlzIG1vcmUKKyAqIGNvbnNpc3RlbnQgd2l0aCB0aGUg c2hyaW5rIHBhdGh3YXkgYW5kIG91ciBlcnJvciBjb2RlcyBoZXJlKS4KKyAqLwordm9pZCBwYV9k YWxsb2ModHNkbl90ICp0c2RuLCBwYV9zaGFyZF90ICpzaGFyZCwgZWRhdGFfdCAqZWRhdGEsCisg ICAgYm9vbCAqZGVmZXJyZWRfd29ya19nZW5lcmF0ZWQpOworYm9vbCBwYV9kZWNheV9tc19zZXQo dHNkbl90ICp0c2RuLCBwYV9zaGFyZF90ICpzaGFyZCwgZXh0ZW50X3N0YXRlX3Qgc3RhdGUsCisg ICAgc3NpemVfdCBkZWNheV9tcywgcGFjX3B1cmdlX2VhZ2VybmVzc190IGVhZ2VybmVzcyk7Citz c2l6ZV90IHBhX2RlY2F5X21zX2dldChwYV9zaGFyZF90ICpzaGFyZCwgZXh0ZW50X3N0YXRlX3Qg c3RhdGUpOworCisvKgorICogRG8gZGVmZXJyZWQgd29yayBvbiB0aGlzIFBBIHNoYXJkLgorICoK KyAqIE1vcmFsbHksIHRoaXMgc2hvdWxkIGRvIGJvdGggUEFDIGRlY2F5IGFuZCB0aGUgSFBBIGRl ZmVycmVkIHdvcmsuICBGb3Igbm93LAorICogdGhvdWdoLCB0aGUgYXJlbmEsIGJhY2tncm91bmQg dGhyZWFkLCBhbmQgUEFDIG1vZHVsZXMgYXJlIHRpZ2h0bHkgaW50ZXJ3b3ZlbgorICogaW4gYSB3 YXkgdGhhdCdzIHRyaWNreSB0byBleHRyaWNhdGUsIHNvIHdlIG9ubHkgZG8gdGhlIEhQQS1zcGVj aWZpYyBwYXJ0cy4KKyAqLwordm9pZCBwYV9zaGFyZF9zZXRfZGVmZXJyYWxfYWxsb3dlZCh0c2Ru X3QgKnRzZG4sIHBhX3NoYXJkX3QgKnNoYXJkLAorICAgIGJvb2wgZGVmZXJyYWxfYWxsb3dlZCk7 Cit2b2lkIHBhX3NoYXJkX2RvX2RlZmVycmVkX3dvcmsodHNkbl90ICp0c2RuLCBwYV9zaGFyZF90 ICpzaGFyZCk7Cit2b2lkIHBhX3NoYXJkX3RyeV9kZWZlcnJlZF93b3JrKHRzZG5fdCAqdHNkbiwg cGFfc2hhcmRfdCAqc2hhcmQpOwordWludDY0X3QgcGFfc2hhcmRfdGltZV91bnRpbF9kZWZlcnJl ZF93b3JrKHRzZG5fdCAqdHNkbiwgcGFfc2hhcmRfdCAqc2hhcmQpOworCisvKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqLworLyoKKyAqIFZhcmlvdXMgYml0cyBvZiAiYm9yaW5nIiBmdW5jdGlvbmFsaXR5 IHRoYXQgYXJlIHN0aWxsIHBhcnQgb2YgdGhpcyBtb2R1bGUsCisgKiBidXQgdGhhdCB3ZSByZWxl Z2F0ZSB0byBwYV9leHRyYS5jLCB0byBrZWVwIHRoZSBjb3JlIGxvZ2ljIGluIHBhLmMgYXMKKyAq IHJlYWRhYmxlIGFzIHBvc3NpYmxlLgorICovCisKKy8qCisgKiBUaGVzZSBmb3JrIHBoYXNlcyBh cmUgc3luY2hyb25pemVkIHdpdGggdGhlIGFyZW5hIGZvcmsgcGhhc2UgbnVtYmVyaW5nIHRvCisg KiBtYWtlIGl0IGVhc3kgdG8ga2VlcCBzdHJhaWdodC4gVGhhdCdzIHdoeSB0aGVyZSdzIG5vIHBy ZWZvcmsxLgorICovCit2b2lkIHBhX3NoYXJkX3ByZWZvcmswKHRzZG5fdCAqdHNkbiwgcGFfc2hh cmRfdCAqc2hhcmQpOwordm9pZCBwYV9zaGFyZF9wcmVmb3JrMih0c2RuX3QgKnRzZG4sIHBhX3No YXJkX3QgKnNoYXJkKTsKK3ZvaWQgcGFfc2hhcmRfcHJlZm9yazModHNkbl90ICp0c2RuLCBwYV9z aGFyZF90ICpzaGFyZCk7Cit2b2lkIHBhX3NoYXJkX3ByZWZvcms0KHRzZG5fdCAqdHNkbiwgcGFf c2hhcmRfdCAqc2hhcmQpOwordm9pZCBwYV9zaGFyZF9wcmVmb3JrNSh0c2RuX3QgKnRzZG4sIHBh X3NoYXJkX3QgKnNoYXJkKTsKK3ZvaWQgcGFfc2hhcmRfcG9zdGZvcmtfcGFyZW50KHRzZG5fdCAq dHNkbiwgcGFfc2hhcmRfdCAqc2hhcmQpOwordm9pZCBwYV9zaGFyZF9wb3N0Zm9ya19jaGlsZCh0 c2RuX3QgKnRzZG4sIHBhX3NoYXJkX3QgKnNoYXJkKTsKKwordm9pZCBwYV9zaGFyZF9iYXNpY19z dGF0c19tZXJnZShwYV9zaGFyZF90ICpzaGFyZCwgc2l6ZV90ICpuYWN0aXZlLAorICAgIHNpemVf dCAqbmRpcnR5LCBzaXplX3QgKm5tdXp6eSk7CisKK3ZvaWQgcGFfc2hhcmRfc3RhdHNfbWVyZ2Uo dHNkbl90ICp0c2RuLCBwYV9zaGFyZF90ICpzaGFyZCwKKyAgICBwYV9zaGFyZF9zdGF0c190ICpw YV9zaGFyZF9zdGF0c19vdXQsIHBhY19lc3RhdHNfdCAqZXN0YXRzX291dCwKKyAgICBocGFfc2hh cmRfc3RhdHNfdCAqaHBhX3N0YXRzX291dCwgc2VjX3N0YXRzX3QgKnNlY19zdGF0c19vdXQsCisg ICAgc2l6ZV90ICpyZXNpZGVudCk7CisKKy8qCisgKiBSZWFkcyB0aGUgUEEtb3duZWQgbXV0ZXgg c3RhdHMgaW50byB0aGUgb3V0cHV0IHN0YXRzIGFycmF5LCBhdCB0aGUKKyAqIGFwcHJvcHJpYXRl IHBvc2l0aW9ucy4gIE1vcmFsbHksIHRoZXNlIHN0YXRzIHNob3VsZCByZWFsbHkgbGl2ZSBpbgor ICogcGFfc2hhcmRfc3RhdHNfdCwgYnV0IHRoZSBpbmRpY2VzIGFyZSBzb3J0IG9mIGJha2VkIGlu dG8gdGhlIHZhcmlvdXMgbXV0ZXgKKyAqIHByb2YgbWFjcm9zLiAgVGhpcyB3b3VsZCBiZSBhIGdv b2QgdGhpbmcgdG8gZG8gYXQgc29tZSBwb2ludC4KKyAqLwordm9pZCBwYV9zaGFyZF9tdHhfc3Rh dHNfcmVhZCh0c2RuX3QgKnRzZG4sIHBhX3NoYXJkX3QgKnNoYXJkLAorICAgIG11dGV4X3Byb2Zf ZGF0YV90IG11dGV4X3Byb2ZfZGF0YVttdXRleF9wcm9mX251bV9hcmVuYV9tdXRleGVzXSk7CisK KyNlbmRpZiAvKiBKRU1BTExPQ19JTlRFUk5BTF9QQV9IICovCgpkaWZmIC0tZ2l0IGEvMzg5LWRz LWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5h bC9wYWMuaCBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUv amVtYWxsb2MvaW50ZXJuYWwvcGFjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MC4uMDFjNGU2YQotLS0gL2Rldi9udWxsCisrKyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2pl bWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvcGFjLmgKQEAgLTAsMCArMSwx NzkgQEAKKyNpZm5kZWYgSkVNQUxMT0NfSU5URVJOQUxfUEFDX0gKKyNkZWZpbmUgSkVNQUxMT0Nf SU5URVJOQUxfUEFDX0gKKworI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2V4cF9ncm93Lmgi CisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvcGFpLmgiCisjaW5jbHVkZSAic2FuX2J1bXAu aCIKKworCisvKgorICogUGFnZSBhbGxvY2F0b3IgY2xhc3NpYzsgYW4gaW1wbGVtZW50YXRpb24g b2YgdGhlIFBBSSBpbnRlcmZhY2UgdGhhdDoKKyAqIC0gQ2FuIGJlIHVzZWQgZm9yIGFyZW5hcyB3 aXRoIGN1c3RvbSBleHRlbnQgaG9va3MuCisgKiAtIENhbiBhbHdheXMgc2F0aXNmeSBhbnkgYWxs b2NhdGlvbiByZXF1ZXN0IChpbmNsdWRpbmcgaGlnaGx5LWZyYWdtZW50YXJ5CisgKiAgIG9uZXMp LgorICogLSBDYW4gdXNlIGVmZmljaWVudCBPUy1sZXZlbCB6ZXJvaW5nIHByaW1pdGl2ZXMgZm9y IGRlbWFuZC1maWxsZWQgcGFnZXMuCisgKi8KKworLyogSG93ICJlYWdlciIgZGVjYXkvcHVyZ2lu ZyBzaG91bGQgYmUuICovCitlbnVtIHBhY19wdXJnZV9lYWdlcm5lc3NfZSB7CisJUEFDX1BVUkdF X0FMV0FZUywKKwlQQUNfUFVSR0VfTkVWRVIsCisJUEFDX1BVUkdFX09OX0VQT0NIX0FEVkFOQ0UK K307Cit0eXBlZGVmIGVudW0gcGFjX3B1cmdlX2VhZ2VybmVzc19lIHBhY19wdXJnZV9lYWdlcm5l c3NfdDsKKwordHlwZWRlZiBzdHJ1Y3QgcGFjX2RlY2F5X3N0YXRzX3MgcGFjX2RlY2F5X3N0YXRz X3Q7CitzdHJ1Y3QgcGFjX2RlY2F5X3N0YXRzX3MgeworCS8qIFRvdGFsIG51bWJlciBvZiBwdXJn ZSBzd2VlcHMuICovCisJbG9ja2VkX3U2NF90IG5wdXJnZTsKKwkvKiBUb3RhbCBudW1iZXIgb2Yg bWFkdmlzZSBjYWxscyBtYWRlLiAqLworCWxvY2tlZF91NjRfdCBubWFkdmlzZTsKKwkvKiBUb3Rh bCBudW1iZXIgb2YgcGFnZXMgcHVyZ2VkLiAqLworCWxvY2tlZF91NjRfdCBwdXJnZWQ7Cit9Owor Cit0eXBlZGVmIHN0cnVjdCBwYWNfZXN0YXRzX3MgcGFjX2VzdGF0c190Oworc3RydWN0IHBhY19l c3RhdHNfcyB7CisJLyoKKwkgKiBTdGF0cyBmb3IgYSBnaXZlbiBpbmRleCBpbiB0aGUgcmFuZ2Ug WzAsIFNDX05QU0laRVNdIGluIHRoZSB2YXJpb3VzCisJICogZWNhY2hlX3RzLgorCSAqIFdlIHRy YWNrIGJvdGggYnl0ZXMgYW5kICMgb2YgZXh0ZW50czogdHdvIGV4dGVudHMgaW4gdGhlIHNhbWUg YnVja2V0CisJICogbWF5IGhhdmUgZGlmZmVyZW50IHNpemVzIGlmIGFkamFjZW50IHNpemUgY2xh c3NlcyBkaWZmZXIgYnkgbW9yZSB0aGFuCisJICogYSBwYWdlLCBzbyBieXRlcyBjYW5ub3QgYWx3 YXlzIGJlIGRlcml2ZWQgZnJvbSAjIG9mIGV4dGVudHMuCisJICovCisJc2l6ZV90IG5kaXJ0eTsK KwlzaXplX3QgZGlydHlfYnl0ZXM7CisJc2l6ZV90IG5tdXp6eTsKKwlzaXplX3QgbXV6enlfYnl0 ZXM7CisJc2l6ZV90IG5yZXRhaW5lZDsKKwlzaXplX3QgcmV0YWluZWRfYnl0ZXM7Cit9OworCit0 eXBlZGVmIHN0cnVjdCBwYWNfc3RhdHNfcyBwYWNfc3RhdHNfdDsKK3N0cnVjdCBwYWNfc3RhdHNf cyB7CisJcGFjX2RlY2F5X3N0YXRzX3QgZGVjYXlfZGlydHk7CisJcGFjX2RlY2F5X3N0YXRzX3Qg ZGVjYXlfbXV6enk7CisKKwkvKgorCSAqIE51bWJlciBvZiB1bnVzZWQgdmlydHVhbCBtZW1vcnkg Ynl0ZXMgY3VycmVudGx5IHJldGFpbmVkLiAgUmV0YWluZWQKKwkgKiBieXRlcyBhcmUgdGVjaG5p Y2FsbHkgbWFwcGVkICh0aG91Z2ggYWx3YXlzIGRlY29tbWl0dGVkIG9yIHB1cmdlZCksCisJICog YnV0IHRoZXkgYXJlIGV4Y2x1ZGVkIGZyb20gdGhlIG1hcHBlZCBzdGF0aXN0aWMgKGFib3ZlKS4K KwkgKi8KKwlzaXplX3QgcmV0YWluZWQ7IC8qIERlcml2ZWQuICovCisKKwkvKgorCSAqIE51bWJl ciBvZiBieXRlcyBjdXJyZW50bHkgbWFwcGVkLCBleGNsdWRpbmcgcmV0YWluZWQgbWVtb3J5IChh bmQgYW55CisJICogYmFzZS1hbGxvY2F0ZWQgbWVtb3J5LCB3aGljaCBpcyB0cmFja2VkIGJ5IHRo ZSBhcmVuYSBzdGF0cykuCisJICoKKwkgKiBXZSBuYW1lIHRoaXMgInBhY19tYXBwZWQiIHRvIGF2 b2lkIGNvbmZ1c2lvbiB3aXRoIHRoZSBhcmVuYV9zdGF0cworCSAqICJtYXBwZWQiLgorCSAqLwor CWF0b21pY196dV90IHBhY19tYXBwZWQ7CisKKwkvKiBWTSBzcGFjZSBoYWQgdG8gYmUgbGVha2Vk ICh1bmRvY3VtZW50ZWQpLiAgTm9ybWFsbHkgMC4gKi8KKwlhdG9taWNfenVfdCBhYmFuZG9uZWRf dm07Cit9OworCit0eXBlZGVmIHN0cnVjdCBwYWNfcyBwYWNfdDsKK3N0cnVjdCBwYWNfcyB7CisJ LyoKKwkgKiBNdXN0IGJlIHRoZSBmaXJzdCBtZW1iZXIgKHdlIGNvbnZlcnQgaXQgdG8gYSBQQUMg Z2l2ZW4gb25seSBhCisJICogcG9pbnRlcikuICBUaGUgaGFuZGxlIHRvIHRoZSBhbGxvY2F0aW9u IGludGVyZmFjZS4KKwkgKi8KKwlwYWlfdCBwYWk7CisJLyoKKwkgKiBDb2xsZWN0aW9ucyBvZiBl eHRlbnRzIHRoYXQgd2VyZSBwcmV2aW91c2x5IGFsbG9jYXRlZC4gIFRoZXNlIGFyZQorCSAqIHVz ZWQgd2hlbiBhbGxvY2F0aW5nIGV4dGVudHMsIGluIGFuIGF0dGVtcHQgdG8gcmUtdXNlIGFkZHJl c3Mgc3BhY2UuCisJICoKKwkgKiBTeW5jaHJvbml6YXRpb246IGludGVybmFsLgorCSAqLworCWVj YWNoZV90IGVjYWNoZV9kaXJ0eTsKKwllY2FjaGVfdCBlY2FjaGVfbXV6enk7CisJZWNhY2hlX3Qg ZWNhY2hlX3JldGFpbmVkOworCisJYmFzZV90ICpiYXNlOworCWVtYXBfdCAqZW1hcDsKKwllZGF0 YV9jYWNoZV90ICplZGF0YV9jYWNoZTsKKworCS8qIFRoZSBncm93IGluZm8gZm9yIHRoZSByZXRh aW5lZCBlY2FjaGUuICovCisJZXhwX2dyb3dfdCBleHBfZ3JvdzsKKwltYWxsb2NfbXV0ZXhfdCBn cm93X210eDsKKworCS8qIFNwZWNpYWwgYWxsb2NhdG9yIGZvciBndWFyZGVkIGZyZXF1ZW50bHkg cmV1c2VkIGV4dGVudHMuICovCisJc2FuX2J1bXBfYWxsb2NfdCBzYmE7CisKKwkvKiBIb3cgbGFy Z2UgZXh0ZW50cyBzaG91bGQgYmUgYmVmb3JlIGdldHRpbmcgYXV0by1wdXJnZWQuICovCisJYXRv bWljX3p1X3Qgb3ZlcnNpemVfdGhyZXNob2xkOworCisJLyoKKwkgKiBEZWNheS1iYXNlZCBwdXJn aW5nIHN0YXRlLCByZXNwb25zaWJsZSBmb3Igc2NoZWR1bGluZyBleHRlbnQgc3RhdGUKKwkgKiB0 cmFuc2l0aW9ucy4KKwkgKgorCSAqIFN5bmNocm9uaXphdGlvbjogdmlhIHRoZSBpbnRlcm5hbCBt dXRleC4KKwkgKi8KKwlkZWNheV90IGRlY2F5X2RpcnR5OyAvKiBkaXJ0eSAtLT4gbXV6enkgKi8K KwlkZWNheV90IGRlY2F5X211enp5OyAvKiBtdXp6eSAtLT4gcmV0YWluZWQgKi8KKworCW1hbGxv Y19tdXRleF90ICpzdGF0c19tdHg7CisJcGFjX3N0YXRzX3QgKnN0YXRzOworCisJLyogRXh0ZW50 IHNlcmlhbCBudW1iZXIgZ2VuZXJhdG9yIHN0YXRlLiAqLworCWF0b21pY196dV90IGV4dGVudF9z bl9uZXh0OworfTsKKworYm9vbCBwYWNfaW5pdCh0c2RuX3QgKnRzZG4sIHBhY190ICpwYWMsIGJh c2VfdCAqYmFzZSwgZW1hcF90ICplbWFwLAorICAgIGVkYXRhX2NhY2hlX3QgKmVkYXRhX2NhY2hl LCBuc3RpbWVfdCAqY3VyX3RpbWUsIHNpemVfdCBvdmVyc2l6ZV90aHJlc2hvbGQsCisgICAgc3Np emVfdCBkaXJ0eV9kZWNheV9tcywgc3NpemVfdCBtdXp6eV9kZWNheV9tcywgcGFjX3N0YXRzX3Qg KnBhY19zdGF0cywKKyAgICBtYWxsb2NfbXV0ZXhfdCAqc3RhdHNfbXR4KTsKKworc3RhdGljIGlu bGluZSBzaXplX3QKK3BhY19tYXBwZWQocGFjX3QgKnBhYykgeworCXJldHVybiBhdG9taWNfbG9h ZF96dSgmcGFjLT5zdGF0cy0+cGFjX21hcHBlZCwgQVRPTUlDX1JFTEFYRUQpOworfQorCitzdGF0 aWMgaW5saW5lIGVob29rc190ICoKK3BhY19laG9va3NfZ2V0KHBhY190ICpwYWMpIHsKKwlyZXR1 cm4gYmFzZV9laG9va3NfZ2V0KHBhYy0+YmFzZSk7Cit9CisKKy8qCisgKiBBbGwgcHVyZ2luZyBm dW5jdGlvbnMgcmVxdWlyZSBob2xkaW5nIGRlY2F5LT5tdHguICBUaGlzIGlzIG9uZSBvZiB0aGUg ZmV3CisgKiBwbGFjZXMgZXh0ZXJuYWwgbW9kdWxlcyBhcmUgYWxsb3dlZCB0byBwZWVrIGluc2lk ZSBwYV9zaGFyZF90IGludGVybmFscy4KKyAqLworCisvKgorICogRGVjYXlzIHRoZSBudW1iZXIg b2YgcGFnZXMgY3VycmVudGx5IGluIHRoZSBlY2FjaGUuICBUaGlzIG1pZ2h0IG5vdCBsZWF2ZSB0 aGUKKyAqIGVjYWNoZSBlbXB0eSBpZiBvdGhlciB0aHJlYWRzIGFyZSBpbnNlcnRpbmcgZGlydHkg b2JqZWN0cyBpbnRvIGl0CisgKiBjb25jdXJyZW50bHkgd2l0aCB0aGUgY2FsbC4KKyAqLwordm9p ZCBwYWNfZGVjYXlfYWxsKHRzZG5fdCAqdHNkbiwgcGFjX3QgKnBhYywgZGVjYXlfdCAqZGVjYXks CisgICAgcGFjX2RlY2F5X3N0YXRzX3QgKmRlY2F5X3N0YXRzLCBlY2FjaGVfdCAqZWNhY2hlLCBi b29sIGZ1bGx5X2RlY2F5KTsKKy8qCisgKiBVcGRhdGVzIGRlY2F5IHNldHRpbmdzIGZvciB0aGUg Y3VycmVudCB0aW1lLCBhbmQgY29uZGl0aW9uYWxseSBwdXJnZXMgaW4KKyAqIHJlc3BvbnNlIChk ZXBlbmRpbmcgb24gZGVjYXlfcHVyZ2Vfc2V0dGluZykuICBSZXR1cm5zIHdoZXRoZXIgb3Igbm90 IHRoZQorICogZXBvY2ggYWR2YW5jZWQuCisgKi8KK2Jvb2wgcGFjX21heWJlX2RlY2F5X3B1cmdl KHRzZG5fdCAqdHNkbiwgcGFjX3QgKnBhYywgZGVjYXlfdCAqZGVjYXksCisgICAgcGFjX2RlY2F5 X3N0YXRzX3QgKmRlY2F5X3N0YXRzLCBlY2FjaGVfdCAqZWNhY2hlLAorICAgIHBhY19wdXJnZV9l YWdlcm5lc3NfdCBlYWdlcm5lc3MpOworCisvKgorICogR2V0cyAvIHNldHMgdGhlIG1heGltdW0g YW1vdW50IHRoYXQgd2UnbGwgZ3JvdyBhbiBhcmVuYSBkb3duIHRoZQorICogZ3Jvdy1yZXRhaW5l ZCBwYXRod2F5cyAodW5sZXNzIGZvcmNlZCB0byBieSBhbiBhbGxvY2FjdGlvbiByZXF1ZXN0KS4K KyAqCisgKiBTZXQgbmV3X2xpbWl0IHRvIE5VTEwgaWYgaXQncyBqdXN0IGEgcXVlcnksIG9yIG9s ZF9saW1pdCB0byBOVUxMIGlmIHlvdSBkb24ndAorICogY2FyZSBhYm91dCB0aGUgcHJldmlvdXMg dmFsdWUuCisgKgorICogUmV0dXJucyB0cnVlIG9uIGVycm9yIChpZiB0aGUgbmV3IGxpbWl0IGlz IG5vdCB2YWxpZCkuCisgKi8KK2Jvb2wgcGFjX3JldGFpbl9ncm93X2xpbWl0X2dldF9zZXQodHNk bl90ICp0c2RuLCBwYWNfdCAqcGFjLCBzaXplX3QgKm9sZF9saW1pdCwKKyAgICBzaXplX3QgKm5l d19saW1pdCk7CisKK2Jvb2wgcGFjX2RlY2F5X21zX3NldCh0c2RuX3QgKnRzZG4sIHBhY190ICpw YWMsIGV4dGVudF9zdGF0ZV90IHN0YXRlLAorICAgIHNzaXplX3QgZGVjYXlfbXMsIHBhY19wdXJn ZV9lYWdlcm5lc3NfdCBlYWdlcm5lc3MpOworc3NpemVfdCBwYWNfZGVjYXlfbXNfZ2V0KHBhY190 ICpwYWMsIGV4dGVudF9zdGF0ZV90IHN0YXRlKTsKKwordm9pZCBwYWNfcmVzZXQodHNkbl90ICp0 c2RuLCBwYWNfdCAqcGFjKTsKK3ZvaWQgcGFjX2Rlc3Ryb3kodHNkbl90ICp0c2RuLCBwYWNfdCAq cGFjKTsKKworI2VuZGlmIC8qIEpFTUFMTE9DX0lOVEVSTkFMX1BBQ19IICovCgpkaWZmIC0tZ2l0 IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxv Yy9pbnRlcm5hbC9wYWdlcy5oIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4z LjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9wYWdlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAuLmFkMWY2MDYKLS0tIC9kZXYvbnVsbAorKysgYi8zODktZHMtYmFzZS0z LjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL3BhZ2Vz LmgKQEAgLTAsMCArMSwxMTkgQEAKKyNpZm5kZWYgSkVNQUxMT0NfSU5URVJOQUxfUEFHRVNfRVhU RVJOU19ICisjZGVmaW5lIEpFTUFMTE9DX0lOVEVSTkFMX1BBR0VTX0VYVEVSTlNfSAorCisvKiBQ YWdlIHNpemUuICBMR19QQUdFIGlzIGRldGVybWluZWQgYnkgdGhlIGNvbmZpZ3VyZSBzY3JpcHQu ICovCisjaWZkZWYgUEFHRV9NQVNLCisjICB1bmRlZiBQQUdFX01BU0sKKyNlbmRpZgorI2RlZmlu ZSBQQUdFCQkoKHNpemVfdCkoMVUgPDwgTEdfUEFHRSkpCisjZGVmaW5lIFBBR0VfTUFTSwkoKHNp emVfdCkoUEFHRSAtIDEpKQorLyogUmV0dXJuIHRoZSBwYWdlIGJhc2UgYWRkcmVzcyBmb3IgdGhl IHBhZ2UgY29udGFpbmluZyBhZGRyZXNzIGEuICovCisjZGVmaW5lIFBBR0VfQUREUjJCQVNFKGEp CQkJCQkJXAorCSgodm9pZCAqKSgodWludHB0cl90KShhKSAmIH5QQUdFX01BU0spKQorLyogUmV0 dXJuIHRoZSBzbWFsbGVzdCBwYWdlc2l6ZSBtdWx0aXBsZSB0aGF0IGlzID49IHMuICovCisjZGVm aW5lIFBBR0VfQ0VJTElORyhzKQkJCQkJCQlcCisJKCgocykgKyBQQUdFX01BU0spICYgflBBR0Vf TUFTSykKKy8qIFJldHVybiB0aGUgbGFyZ2VzdCBwYWdlc2l6ZSBtdWx0aXBsZSB0aGF0IGlzIDw9 cy4gKi8KKyNkZWZpbmUgUEFHRV9GTE9PUihzKSAJCQkJCQkJXAorCSgocykgJiB+UEFHRV9NQVNL KQorCisvKiBIdWdlIHBhZ2Ugc2l6ZS4gIExHX0hVR0VQQUdFIGlzIGRldGVybWluZWQgYnkgdGhl IGNvbmZpZ3VyZSBzY3JpcHQuICovCisjZGVmaW5lIEhVR0VQQUdFCSgoc2l6ZV90KSgxVSA8PCBM R19IVUdFUEFHRSkpCisjZGVmaW5lIEhVR0VQQUdFX01BU0sJKChzaXplX3QpKEhVR0VQQUdFIC0g MSkpCisKKyNpZiBMR19IVUdFUEFHRSAhPSAwCisjICBkZWZpbmUgSFVHRVBBR0VfUEFHRVMgKEhV R0VQQUdFIC8gUEFHRSkKKyNlbHNlCisvKgorICogSXQncyBjb252ZW5pZW50IHRvIGRlZmluZSBh cnJheXMgKG9yIGJpdG1hcHMpIG9mIEhVR0VQQUdFX1BBR0VTIGxlbmd0aHMuICBJZgorICogd2Ug Y2FuJ3QgYXV0b2RldGVjdCB0aGUgaHVnZXBhZ2Ugc2l6ZSwgaXQgZ2V0cyB0cmVhdGVkIGFzIDAs IGluIHdoaWNoIGNhc2UKKyAqIHdlJ2xsIHRyaWdnZXIgYSBjb21waWxlciBlcnJvciBpbiB0aG9z ZSBhcnJheXMuICBBdm9pZCB0aGlzIGNhc2UgYnkgZW5zdXJpbmcKKyAqIHRoYXQgdGhpcyB2YWx1 ZSBpcyBhdCBsZWFzdCAxLiAgKFdlIHdvbid0IGV2ZXIgcnVuIGluIHRoaXMgZGVncmFkZWQgc3Rh dGU7CisgKiBocGFfc3VwcG9ydGVkKCkgcmV0dXJucyBmYWxzZSBpbiB0aGlzIGNhc2UuCisgKi8K KyMgIGRlZmluZSBIVUdFUEFHRV9QQUdFUyAxCisjZW5kaWYKKworLyogUmV0dXJuIHRoZSBodWdl IHBhZ2UgYmFzZSBhZGRyZXNzIGZvciB0aGUgaHVnZSBwYWdlIGNvbnRhaW5pbmcgYWRkcmVzcyBh LiAqLworI2RlZmluZSBIVUdFUEFHRV9BRERSMkJBU0UoYSkJCQkJCQlcCisJKCh2b2lkICopKCh1 aW50cHRyX3QpKGEpICYgfkhVR0VQQUdFX01BU0spKQorLyogUmV0dXJuIHRoZSBzbWFsbGVzdCBw YWdlc2l6ZSBtdWx0aXBsZSB0aGF0IGlzID49IHMuICovCisjZGVmaW5lIEhVR0VQQUdFX0NFSUxJ TkcocykJCQkJCQlcCisJKCgocykgKyBIVUdFUEFHRV9NQVNLKSAmIH5IVUdFUEFHRV9NQVNLKQor CisvKiBQQUdFU19DQU5fUFVSR0VfTEFaWSBpcyBkZWZpbmVkIGlmIGxhenkgcHVyZ2luZyBpcyBz dXBwb3J0ZWQuICovCisjaWYgZGVmaW5lZChfV0lOMzIpIHx8IGRlZmluZWQoSkVNQUxMT0NfUFVS R0VfTUFEVklTRV9GUkVFKQorIyAgZGVmaW5lIFBBR0VTX0NBTl9QVVJHRV9MQVpZCisjZW5kaWYK Ky8qCisgKiBQQUdFU19DQU5fUFVSR0VfRk9SQ0VEIGlzIGRlZmluZWQgaWYgZm9yY2VkIHB1cmdp bmcgaXMgc3VwcG9ydGVkLgorICoKKyAqIFRoZSBvbmx5IHN1cHBvcnRlZCB3YXkgdG8gaGFyZC1w dXJnZSBvbiBXaW5kb3dzIGlzIHRvIGRlY29tbWl0IGFuZCB0aGVuCisgKiByZS1jb21taXQsIGJ1 dCBkb2luZyBzbyBpcyByYWN5LCBhbmQgaWYgcmUtY29tbWl0IGZhaWxzIGl0J3MgYSBwYWluIHRv CisgKiBwcm9wYWdhdGUgdGhlICJwb2lzb25lZCIgbWVtb3J5IHN0YXRlLiAgU2luY2Ugd2UgdHlw aWNhbGx5IGRlY29tbWl0IGFzIHRoZQorICogbmV4dCBzdGVwIGFmdGVyIHB1cmdpbmcgb24gV2lu ZG93cyBhbnl3YXksIHRoZXJlJ3Mgbm8gcG9pbnQgaW4gYWRkaW5nIHN1Y2gKKyAqIGNvbXBsZXhp dHkuCisgKi8KKyNpZiAhZGVmaW5lZChfV0lOMzIpICYmICgoZGVmaW5lZChKRU1BTExPQ19QVVJH RV9NQURWSVNFX0RPTlRORUVEKSAmJiBcCisgICAgZGVmaW5lZChKRU1BTExPQ19QVVJHRV9NQURW SVNFX0RPTlRORUVEX1pFUk9TKSkgfHwgXAorICAgIGRlZmluZWQoSkVNQUxMT0NfTUFQU19DT0FM RVNDRSkpCisjICBkZWZpbmUgUEFHRVNfQ0FOX1BVUkdFX0ZPUkNFRAorI2VuZGlmCisKK3N0YXRp YyBjb25zdCBib29sIHBhZ2VzX2Nhbl9wdXJnZV9sYXp5ID0KKyNpZmRlZiBQQUdFU19DQU5fUFVS R0VfTEFaWQorICAgIHRydWUKKyNlbHNlCisgICAgZmFsc2UKKyNlbmRpZgorICAgIDsKK3N0YXRp YyBjb25zdCBib29sIHBhZ2VzX2Nhbl9wdXJnZV9mb3JjZWQgPQorI2lmZGVmIFBBR0VTX0NBTl9Q VVJHRV9GT1JDRUQKKyAgICB0cnVlCisjZWxzZQorICAgIGZhbHNlCisjZW5kaWYKKyAgICA7CisK KyNpZiBkZWZpbmVkKEpFTUFMTE9DX0hBVkVfTUFEVklTRV9IVUdFKSB8fCBkZWZpbmVkKEpFTUFM TE9DX0hBVkVfTUVNQ05UTCkKKyMgIGRlZmluZSBQQUdFU19DQU5fSFVHSUZZCisjZW5kaWYKKwor c3RhdGljIGNvbnN0IGJvb2wgcGFnZXNfY2FuX2h1Z2lmeSA9CisjaWZkZWYgUEFHRVNfQ0FOX0hV R0lGWQorICAgIHRydWUKKyNlbHNlCisgICAgZmFsc2UKKyNlbmRpZgorICAgIDsKKwordHlwZWRl ZiBlbnVtIHsKKwl0aHBfbW9kZV9kZWZhdWx0ICAgICAgID0gMCwgLyogRG8gbm90IGNoYW5nZSBo dWdlcGFnZSBzZXR0aW5ncy4gKi8KKwl0aHBfbW9kZV9hbHdheXMgICAgICAgID0gMSwgLyogQWx3 YXlzIHNldCBNQURWX0hVR0VQQUdFLiAqLworCXRocF9tb2RlX25ldmVyICAgICAgICAgPSAyLCAv KiBBbHdheXMgc2V0IE1BRFZfTk9IVUdFUEFHRS4gKi8KKworCXRocF9tb2RlX25hbWVzX2xpbWl0 ICAgPSAzLCAvKiBVc2VkIGZvciBvcHRpb24gcHJvY2Vzc2luZy4gKi8KKwl0aHBfbW9kZV9ub3Rf c3VwcG9ydGVkID0gMyAgLyogTm8gVEhQIHN1cHBvcnQgZGV0ZWN0ZWQuICovCit9IHRocF9tb2Rl X3Q7CisKKyNkZWZpbmUgVEhQX01PREVfREVGQVVMVCB0aHBfbW9kZV9kZWZhdWx0CitleHRlcm4g dGhwX21vZGVfdCBvcHRfdGhwOworZXh0ZXJuIHRocF9tb2RlX3QgaW5pdF9zeXN0ZW1fdGhwX21v ZGU7IC8qIEluaXRpYWwgc3lzdGVtIHdpZGUgc3RhdGUuICovCitleHRlcm4gY29uc3QgY2hhciAq dGhwX21vZGVfbmFtZXNbXTsKKwordm9pZCAqcGFnZXNfbWFwKHZvaWQgKmFkZHIsIHNpemVfdCBz aXplLCBzaXplX3QgYWxpZ25tZW50LCBib29sICpjb21taXQpOwordm9pZCBwYWdlc191bm1hcCh2 b2lkICphZGRyLCBzaXplX3Qgc2l6ZSk7Citib29sIHBhZ2VzX2NvbW1pdCh2b2lkICphZGRyLCBz aXplX3Qgc2l6ZSk7Citib29sIHBhZ2VzX2RlY29tbWl0KHZvaWQgKmFkZHIsIHNpemVfdCBzaXpl KTsKK2Jvb2wgcGFnZXNfcHVyZ2VfbGF6eSh2b2lkICphZGRyLCBzaXplX3Qgc2l6ZSk7Citib29s IHBhZ2VzX3B1cmdlX2ZvcmNlZCh2b2lkICphZGRyLCBzaXplX3Qgc2l6ZSk7Citib29sIHBhZ2Vz X2h1Z2Uodm9pZCAqYWRkciwgc2l6ZV90IHNpemUpOworYm9vbCBwYWdlc19ub2h1Z2Uodm9pZCAq YWRkciwgc2l6ZV90IHNpemUpOworYm9vbCBwYWdlc19kb250ZHVtcCh2b2lkICphZGRyLCBzaXpl X3Qgc2l6ZSk7Citib29sIHBhZ2VzX2RvZHVtcCh2b2lkICphZGRyLCBzaXplX3Qgc2l6ZSk7Citi b29sIHBhZ2VzX2Jvb3Qodm9pZCk7Cit2b2lkIHBhZ2VzX3NldF90aHBfc3RhdGUgKHZvaWQgKnB0 ciwgc2l6ZV90IHNpemUpOwordm9pZCBwYWdlc19tYXJrX2d1YXJkcyh2b2lkICpoZWFkLCB2b2lk ICp0YWlsKTsKK3ZvaWQgcGFnZXNfdW5tYXJrX2d1YXJkcyh2b2lkICpoZWFkLCB2b2lkICp0YWls KTsKKworI2VuZGlmIC8qIEpFTUFMTE9DX0lOVEVSTkFMX1BBR0VTX0VYVEVSTlNfSCAqLwoKZGlm ZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUv amVtYWxsb2MvaW50ZXJuYWwvcGFpLmggYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxv Yy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL3BhaS5oCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAuLmQ5NzhjZDcKLS0tIC9kZXYvbnVsbAorKysgYi8zODktZHMtYmFz ZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL3Bh aS5oCkBAIC0wLDAgKzEsOTUgQEAKKyNpZm5kZWYgSkVNQUxMT0NfSU5URVJOQUxfUEFJX0gKKyNk ZWZpbmUgSkVNQUxMT0NfSU5URVJOQUxfUEFJX0gKKworLyogQW4gaW50ZXJmYWNlIGZvciBwYWdl IGFsbG9jYXRpb24uICovCisKK3R5cGVkZWYgc3RydWN0IHBhaV9zIHBhaV90Oworc3RydWN0IHBh aV9zIHsKKwkvKiBSZXR1cm5zIE5VTEwgb24gZmFpbHVyZS4gKi8KKwllZGF0YV90ICooKmFsbG9j KSh0c2RuX3QgKnRzZG4sIHBhaV90ICpzZWxmLCBzaXplX3Qgc2l6ZSwKKwkgICAgc2l6ZV90IGFs aWdubWVudCwgYm9vbCB6ZXJvLCBib29sIGd1YXJkZWQsIGJvb2wgZnJlcXVlbnRfcmV1c2UsCisJ ICAgIGJvb2wgKmRlZmVycmVkX3dvcmtfZ2VuZXJhdGVkKTsKKwkvKgorCSAqIFJldHVybnMgdGhl IG51bWJlciBvZiBleHRlbnRzIGFkZGVkIHRvIHRoZSBsaXN0ICh3aGljaCBtYXkgYmUgZmV3ZXIK KwkgKiB0aGFuIHJlcXVlc3RlZCwgaW4gY2FzZSBvZiBPT00pLiAgVGhlIGxpc3Qgc2hvdWxkIGFs cmVhZHkgYmUKKwkgKiBpbml0aWFsaXplZC4gIFRoZSBvbmx5IGFsaWdubWVudCBndWFyYW50ZWUg aXMgcGFnZS1hbGlnbm1lbnQsIGFuZAorCSAqIHRoZSByZXN1bHRzIGFyZSBub3QgbmVjZXNzYXJp bHkgemVyb2VkLgorCSAqLworCXNpemVfdCAoKmFsbG9jX2JhdGNoKSh0c2RuX3QgKnRzZG4sIHBh aV90ICpzZWxmLCBzaXplX3Qgc2l6ZSwKKwkgICAgc2l6ZV90IG5hbGxvY3MsIGVkYXRhX2xpc3Rf YWN0aXZlX3QgKnJlc3VsdHMsCisJICAgIGJvb2wgKmRlZmVycmVkX3dvcmtfZ2VuZXJhdGVkKTsK Kwlib29sICgqZXhwYW5kKSh0c2RuX3QgKnRzZG4sIHBhaV90ICpzZWxmLCBlZGF0YV90ICplZGF0 YSwKKwkgICAgc2l6ZV90IG9sZF9zaXplLCBzaXplX3QgbmV3X3NpemUsIGJvb2wgemVybywKKwkg ICAgYm9vbCAqZGVmZXJyZWRfd29ya19nZW5lcmF0ZWQpOworCWJvb2wgKCpzaHJpbmspKHRzZG5f dCAqdHNkbiwgcGFpX3QgKnNlbGYsIGVkYXRhX3QgKmVkYXRhLAorCSAgICBzaXplX3Qgb2xkX3Np emUsIHNpemVfdCBuZXdfc2l6ZSwgYm9vbCAqZGVmZXJyZWRfd29ya19nZW5lcmF0ZWQpOworCXZv aWQgKCpkYWxsb2MpKHRzZG5fdCAqdHNkbiwgcGFpX3QgKnNlbGYsIGVkYXRhX3QgKmVkYXRhLAor CSAgICBib29sICpkZWZlcnJlZF93b3JrX2dlbmVyYXRlZCk7CisJLyogVGhpcyBmdW5jdGlvbiBl bXB0aWVzIG91dCBsaXN0IGFzIGEgc2lkZS1lZmZlY3Qgb2YgYmVpbmcgY2FsbGVkLiAqLworCXZv aWQgKCpkYWxsb2NfYmF0Y2gpKHRzZG5fdCAqdHNkbiwgcGFpX3QgKnNlbGYsCisJICAgIGVkYXRh X2xpc3RfYWN0aXZlX3QgKmxpc3QsIGJvb2wgKmRlZmVycmVkX3dvcmtfZ2VuZXJhdGVkKTsKKwl1 aW50NjRfdCAoKnRpbWVfdW50aWxfZGVmZXJyZWRfd29yaykodHNkbl90ICp0c2RuLCBwYWlfdCAq c2VsZik7Cit9OworCisvKgorICogVGhlc2UgYXJlIGp1c3Qgc2ltcGxlIGNvbnZlbmllbmNlIGZ1 bmN0aW9ucyB0byBhdm9pZCBoYXZpbmcgdG8gcmVmZXJlbmNlIHRoZQorICogc2FtZSBwYWlfdCB0 d2ljZSBvbiBldmVyeSBpbnZvY2F0aW9uLgorICovCisKK3N0YXRpYyBpbmxpbmUgZWRhdGFfdCAq CitwYWlfYWxsb2ModHNkbl90ICp0c2RuLCBwYWlfdCAqc2VsZiwgc2l6ZV90IHNpemUsIHNpemVf dCBhbGlnbm1lbnQsCisgICAgYm9vbCB6ZXJvLCBib29sIGd1YXJkZWQsIGJvb2wgZnJlcXVlbnRf cmV1c2UsCisgICAgYm9vbCAqZGVmZXJyZWRfd29ya19nZW5lcmF0ZWQpIHsKKwlyZXR1cm4gc2Vs Zi0+YWxsb2ModHNkbiwgc2VsZiwgc2l6ZSwgYWxpZ25tZW50LCB6ZXJvLCBndWFyZGVkLAorCSAg ICBmcmVxdWVudF9yZXVzZSwgZGVmZXJyZWRfd29ya19nZW5lcmF0ZWQpOworfQorCitzdGF0aWMg aW5saW5lIHNpemVfdAorcGFpX2FsbG9jX2JhdGNoKHRzZG5fdCAqdHNkbiwgcGFpX3QgKnNlbGYs IHNpemVfdCBzaXplLCBzaXplX3QgbmFsbG9jcywKKyAgICBlZGF0YV9saXN0X2FjdGl2ZV90ICpy ZXN1bHRzLCBib29sICpkZWZlcnJlZF93b3JrX2dlbmVyYXRlZCkgeworCXJldHVybiBzZWxmLT5h bGxvY19iYXRjaCh0c2RuLCBzZWxmLCBzaXplLCBuYWxsb2NzLCByZXN1bHRzLAorCSAgICBkZWZl cnJlZF93b3JrX2dlbmVyYXRlZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbAorcGFpX2V4cGFu ZCh0c2RuX3QgKnRzZG4sIHBhaV90ICpzZWxmLCBlZGF0YV90ICplZGF0YSwgc2l6ZV90IG9sZF9z aXplLAorICAgIHNpemVfdCBuZXdfc2l6ZSwgYm9vbCB6ZXJvLCBib29sICpkZWZlcnJlZF93b3Jr X2dlbmVyYXRlZCkgeworCXJldHVybiBzZWxmLT5leHBhbmQodHNkbiwgc2VsZiwgZWRhdGEsIG9s ZF9zaXplLCBuZXdfc2l6ZSwgemVybywKKwkgICAgZGVmZXJyZWRfd29ya19nZW5lcmF0ZWQpOwor fQorCitzdGF0aWMgaW5saW5lIGJvb2wKK3BhaV9zaHJpbmsodHNkbl90ICp0c2RuLCBwYWlfdCAq c2VsZiwgZWRhdGFfdCAqZWRhdGEsIHNpemVfdCBvbGRfc2l6ZSwKKyAgICBzaXplX3QgbmV3X3Np emUsIGJvb2wgKmRlZmVycmVkX3dvcmtfZ2VuZXJhdGVkKSB7CisJcmV0dXJuIHNlbGYtPnNocmlu ayh0c2RuLCBzZWxmLCBlZGF0YSwgb2xkX3NpemUsIG5ld19zaXplLAorCSAgICBkZWZlcnJlZF93 b3JrX2dlbmVyYXRlZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorcGFpX2RhbGxvYyh0c2Ru X3QgKnRzZG4sIHBhaV90ICpzZWxmLCBlZGF0YV90ICplZGF0YSwKKyAgICBib29sICpkZWZlcnJl ZF93b3JrX2dlbmVyYXRlZCkgeworCXNlbGYtPmRhbGxvYyh0c2RuLCBzZWxmLCBlZGF0YSwgZGVm ZXJyZWRfd29ya19nZW5lcmF0ZWQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3BhaV9kYWxs b2NfYmF0Y2godHNkbl90ICp0c2RuLCBwYWlfdCAqc2VsZiwgZWRhdGFfbGlzdF9hY3RpdmVfdCAq bGlzdCwKKyAgICBib29sICpkZWZlcnJlZF93b3JrX2dlbmVyYXRlZCkgeworCXNlbGYtPmRhbGxv Y19iYXRjaCh0c2RuLCBzZWxmLCBsaXN0LCBkZWZlcnJlZF93b3JrX2dlbmVyYXRlZCk7Cit9CisK K3N0YXRpYyBpbmxpbmUgdWludDY0X3QKK3BhaV90aW1lX3VudGlsX2RlZmVycmVkX3dvcmsodHNk bl90ICp0c2RuLCBwYWlfdCAqc2VsZikgeworCXJldHVybiBzZWxmLT50aW1lX3VudGlsX2RlZmVy cmVkX3dvcmsodHNkbiwgc2VsZik7Cit9CisKKy8qCisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiBi YXRjaCBhbGxvY2F0aW9uIHRoYXQgc2ltcGx5IGNhbGxzIGFsbG9jIG9uY2UgZm9yCisgKiBlYWNo IGl0ZW0gaW4gdGhlIGxpc3QuCisgKi8KK3NpemVfdCBwYWlfYWxsb2NfYmF0Y2hfZGVmYXVsdCh0 c2RuX3QgKnRzZG4sIHBhaV90ICpzZWxmLCBzaXplX3Qgc2l6ZSwKKyAgICBzaXplX3QgbmFsbG9j cywgZWRhdGFfbGlzdF9hY3RpdmVfdCAqcmVzdWx0cywgYm9vbCAqZGVmZXJyZWRfd29ya19nZW5l cmF0ZWQpOworLyogRGl0dG8sIGZvciBkYWxsb2MuICovCit2b2lkIHBhaV9kYWxsb2NfYmF0Y2hf ZGVmYXVsdCh0c2RuX3QgKnRzZG4sIHBhaV90ICpzZWxmLAorICAgIGVkYXRhX2xpc3RfYWN0aXZl X3QgKmxpc3QsIGJvb2wgKmRlZmVycmVkX3dvcmtfZ2VuZXJhdGVkKTsKKworI2VuZGlmIC8qIEpF TUFMTE9DX0lOVEVSTkFMX1BBSV9IICovCgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAt YnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9wZWFrLmggYi8z ODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2lu dGVybmFsL3BlYWsuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OWRhM2U0 Ci0tLSAvZGV2L251bGwKKysrIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4z LjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9wZWFrLmgKQEAgLTAsMCArMSwzNyBAQAorI2lm bmRlZiBKRU1BTExPQ19JTlRFUk5BTF9QRUFLX0gKKyNkZWZpbmUgSkVNQUxMT0NfSU5URVJOQUxf UEVBS19ICisKK3R5cGVkZWYgc3RydWN0IHBlYWtfcyBwZWFrX3Q7CitzdHJ1Y3QgcGVha19zIHsK KwkvKiBUaGUgaGlnaGVzdCByZWNvcmRlZCBwZWFrIHZhbHVlLCBhZnRlciBhZGp1c3RtZW50IChz ZWUgYmVsb3cpLiAqLworCXVpbnQ2NF90IGN1cl9tYXg7CisJLyoKKwkgKiBUaGUgZGlmZmVyZW5j ZSBiZXR3ZWVuIGFsbG9jIGFuZCBkYWxsb2MgYXQgdGhlIGxhc3Qgc2V0X3plcm8gY2FsbDsKKwkg KiB0aGlzIGxldHMgdXMgY2FuY2VsIG91dCB0aGUgYXBwcm9wcmlhdGUgYW1vdW50IG9mIGV4Y2Vz cy4KKwkgKi8KKwl1aW50NjRfdCBhZGp1c3RtZW50OworfTsKKworI2RlZmluZSBQRUFLX0lOSVRJ QUxJWkVSIHswLCAwfQorCitzdGF0aWMgaW5saW5lIHVpbnQ2NF90CitwZWFrX21heChwZWFrX3Qg KnBlYWspIHsKKwlyZXR1cm4gcGVhay0+Y3VyX21heDsKK30KKworc3RhdGljIGlubGluZSB2b2lk CitwZWFrX3VwZGF0ZShwZWFrX3QgKnBlYWssIHVpbnQ2NF90IGFsbG9jLCB1aW50NjRfdCBkYWxs b2MpIHsKKwlpbnQ2NF90IGNhbmRpZGF0ZV9tYXggPSAoaW50NjRfdCkoYWxsb2MgLSBkYWxsb2Mg LSBwZWFrLT5hZGp1c3RtZW50KTsKKwlpZiAoY2FuZGlkYXRlX21heCA+IChpbnQ2NF90KXBlYWst PmN1cl9tYXgpIHsKKwkJcGVhay0+Y3VyX21heCA9IGNhbmRpZGF0ZV9tYXg7CisJfQorfQorCisv KiBSZXNldHMgdGhlIGNvdW50ZXIgdG8gemVybzsgYWxsIHBlYWtzIGFyZSBub3cgcmVsYXRpdmUg dG8gdGhpcyBwb2ludC4gKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorcGVha19zZXRfemVybyhwZWFr X3QgKnBlYWssIHVpbnQ2NF90IGFsbG9jLCB1aW50NjRfdCBkYWxsb2MpIHsKKwlwZWFrLT5jdXJf bWF4ID0gMDsKKwlwZWFrLT5hZGp1c3RtZW50ID0gYWxsb2MgLSBkYWxsb2M7Cit9CisKKyNlbmRp ZiAvKiBKRU1BTExPQ19JTlRFUk5BTF9QRUFLX0ggKi8KCmRpZmYgLS1naXQgYS8zODktZHMtYmFz ZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL3Bl YWtfZXZlbnQuaCBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1 ZGUvamVtYWxsb2MvaW50ZXJuYWwvcGVha19ldmVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAuLmI4MDhjZTAKLS0tIC9kZXYvbnVsbAorKysgYi8zODktZHMtYmFzZS0zLjMu MC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL3BlYWtfZXZl bnQuaApAQCAtMCwwICsxLDI0IEBACisjaWZuZGVmIEpFTUFMTE9DX0lOVEVSTkFMX1BFQUtfRVZF TlRfSAorI2RlZmluZSBKRU1BTExPQ19JTlRFUk5BTF9QRUFLX0VWRU5UX0gKKworLyoKKyAqIFdo aWxlIHBlYWsuaCBjb250YWlucyB0aGUgc2ltcGxlIGhlbHBlciBzdHJ1Y3QgdGhhdCB0cmFja3Mg c3RhdGUsIHRoaXMKKyAqIGNvbnRhaW5zIHRoZSBhbGxvY2F0b3IgdGllLWlucyAoYW5kIGtub3dz IGFib3V0IHRzZCwgdGhlIGV2ZW50IG1vZHVsZSwgZXRjLikuCisgKi8KKworLyogVXBkYXRlIHRo ZSBwZWFrIHdpdGggY3VycmVudCB0c2Qgc3RhdGUuICovCit2b2lkIHBlYWtfZXZlbnRfdXBkYXRl KHRzZF90ICp0c2QpOworLyogU2V0IGN1cnJlbnQgc3RhdGUgdG8gemVyby4gKi8KK3ZvaWQgcGVh a19ldmVudF96ZXJvKHRzZF90ICp0c2QpOwordWludDY0X3QgcGVha19ldmVudF9tYXgodHNkX3Qg KnRzZCk7CisKKy8qIE1hbnVhbCBob29rcy4gKi8KKy8qIFRoZSBhY3Rpdml0eS10cmlnZ2VyZWQg aG9va3MuICovCit1aW50NjRfdCBwZWFrX2FsbG9jX25ld19ldmVudF93YWl0KHRzZF90ICp0c2Qp OwordWludDY0X3QgcGVha19hbGxvY19wb3N0cG9uZWRfZXZlbnRfd2FpdCh0c2RfdCAqdHNkKTsK K3ZvaWQgcGVha19hbGxvY19ldmVudF9oYW5kbGVyKHRzZF90ICp0c2QsIHVpbnQ2NF90IGVsYXBz ZWQpOwordWludDY0X3QgcGVha19kYWxsb2NfbmV3X2V2ZW50X3dhaXQodHNkX3QgKnRzZCk7Cit1 aW50NjRfdCBwZWFrX2RhbGxvY19wb3N0cG9uZWRfZXZlbnRfd2FpdCh0c2RfdCAqdHNkKTsKK3Zv aWQgcGVha19kYWxsb2NfZXZlbnRfaGFuZGxlcih0c2RfdCAqdHNkLCB1aW50NjRfdCBlbGFwc2Vk KTsKKworI2VuZGlmIC8qIEpFTUFMTE9DX0lOVEVSTkFMX1BFQUtfRVZFTlRfSCAqLwoKZGlmZiAt LWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVt YWxsb2MvaW50ZXJuYWwvcGguaCBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUu My4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvcGguaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwLi41ZjA5MWM1Ci0tLSAvZGV2L251bGwKKysrIGIvMzg5LWRzLWJhc2UtMy4z LjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9waC5oCkBA IC0wLDAgKzEsNTIwIEBACisjaWZuZGVmIEpFTUFMTE9DX0lOVEVSTkFMX1BIX0gKKyNkZWZpbmUg SkVNQUxMT0NfSU5URVJOQUxfUEhfSAorCisvKgorICogQSBQYWlyaW5nIEhlYXAgaW1wbGVtZW50 YXRpb24uCisgKgorICogIlRoZSBQYWlyaW5nIEhlYXA6IEEgTmV3IEZvcm0gb2YgU2VsZi1BZGp1 c3RpbmcgSGVhcCIKKyAqIGh0dHBzOi8vd3d3LmNzLmNtdS5lZHUvfnNsZWF0b3IvcGFwZXJzL3Bh aXJpbmctaGVhcHMucGRmCisgKgorICogV2l0aCBhdXhpbGlhcnkgdHdvcGFzcyBsaXN0LCBkZXNj cmliZWQgaW4gYSBmb2xsb3cgb24gcGFwZXIuCisgKgorICogIlBhaXJpbmcgSGVhcHM6IEV4cGVy aW1lbnRzIGFuZCBBbmFseXNpcyIKKyAqIGh0dHA6Ly9jaXRlc2VlcnguaXN0LnBzdS5lZHUvdmll d2RvYy9kb3dubG9hZD9kb2k9MTAuMS4xLjEwNi4yOTg4JnJlcD1yZXAxJnR5cGU9cGRmCisgKgor ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBXZSBpbmNsdWRlIGEgbm9uLW9idmlvdXMg b3B0aW1pemF0aW9uOgorICogLSBGaXJzdCwgd2UgaW50cm9kdWNlIGEgbmV3IHBvcC1hbmQtbGlu ayBvcGVyYXRpb247IHBvcCB0aGUgdHdvIG1vc3QKKyAqICAgcmVjZW50bHktaW5zZXJ0ZWQgaXRl bXMgb2ZmIHRoZSBhdXgtbGlzdCwgbGluayB0aGVtLCBhbmQgcHVzaCB0aGUgcmVzdWx0aW5nCisg KiAgIGhlYXAuCisgKiAtIFdlIG1haW50YWluIGEgY291bnQgb2YgdGhlIG51bWJlciBvZiBpbnNl cnRpb25zIHNpbmNlIHRoZSBsYXN0IHRpbWUgd2UKKyAqICAgbWVyZ2VkIHRoZSBhdXgtbGlzdCAo aS5lLiB2aWEgZmlyc3QoKSBvciByZW1vdmVfZmlyc3QoKSkuICBBZnRlciBOIGluc2VydHMsCisg KiAgIHdlIGRvIGZmcyhOKSBwb3AtYW5kLWxpbmsgb3BlcmF0aW9ucy4KKyAqCisgKiBPbmUgd2F5 IHRvIHRoaW5rIG9mIHRoaXMgaXMgdGhhdCB3ZSdyZSBwcm9ncmVzc2l2ZWx5IGJ1aWxkaW5nIHVw IGEgdHJlZSBpbgorICogdGhlIGF1eC1saXN0LCByYXRoZXIgdGhhbiBhIGxpbmtlZC1saXN0ICh0 aGluayBvZiB0aGUgc2VyaWVzIG9mIG1lcmdlcyB0aGF0CisgKiB3aWxsIGJlIHBlcmZvcm1lZCBh cyB0aGUgYXV4LWNvdW50IGdyb3dzKS4KKyAqCisgKiBUaGVyZSdzIGEgY291cGxlIHJlYXNvbnMg d2UgYmVuZWZpdCBmcm9tIHRoaXM6CisgKiAtIE9yZGluYXJpbHksIGFmdGVyIE4gaW5zZXJ0aW9u cywgdGhlIGF1eC1saXN0IGlzIG9mIHNpemUgTi4gIFdpdGggb3VyCisgKiAgIHN0cmF0ZWd5LCBp dCdzIG9mIHNpemUgTyhsb2coTikpLiAgU28gd2UgZGVjcmVhc2UgdGhlIHdvcnN0LWNhc2UgdGlt ZSBvZgorICogICBmaXJzdCgpIGNhbGxzLCBhbmQgcmVkdWNlIHRoZSBhdmVyYWdlIGNvc3Qgb2Yg cmVtb3ZlX21pbiBjYWxscy4gIFNpbmNlCisgKiAgIHRoZXNlIGFsbW9zdCBhbHdheXMgb2NjdXIg d2hpbGUgaG9sZGluZyBhIGxvY2ssIHdlIHByYWN0aWNhbGx5IHJlZHVjZSB0aGUKKyAqICAgZnJl cXVlbmN5IG9mIHVudXN1YWxseSBsb25nIGhvbGQgdGltZXMuCisgKiAtIFRoaXMgbW92ZXMgdGhl IGJ1bGsgb2YgdGhlIHdvcmsgb2YgbWVyZ2luZyB0aGUgYXV4LWxpc3Qgb250byB0aGUgdGhyZWFk cworICogICB0aGF0IGFyZSBpbnNlcnRpbmcgaW50byB0aGUgaGVhcC4gIEluIHNvbWUgY29tbW9u IHNjZW5hcmlvcywgaW5zZXJ0aW9ucworICogICBoYXBwZW4gaW4gYnVsaywgZnJvbSBhIHNpbmds ZSB0aHJlYWQgKHRoaW5rIHRjYWNoZSBmbHVzaGluZzsgd2UgcG90ZW50aWFsbHkKKyAqICAgbW92 ZSBtYW55IHNsYWJzIGZyb20gc2xhYnNfZnVsbCB0byBzbGFic19ub25mdWxsKS4gIEFsbCB0aGUg bm9kZXMgaW4gdGhpcworICogICBjYXNlIGFyZSBpbiB0aGUgaW5zZXJ0aW5nIHRocmVhZHMgY2Fj aGUsIGFuZCBsaW5raW5nIHRoZW0gaXMgdmVyeSBjaGVhcAorICogICAoY2FjaGUgbWlzc2VzIGRv bWluYXRlIGxpbmtpbmcgY29zdCkuICBXaXRob3V0IHRoaXMgb3B0aW1pemF0aW9uLCBsaW5raW5n CisgKiAgIGhhcHBlbnMgb24gdGhlIG5leHQgY2FsbCB0byByZW1vdmVfZmlyc3QuICBTaW5jZSB0 aGF0IHJlbW92ZV9maXJzdCBjYWxsCisgKiAgIGxpa2VseSBoYXBwZW5zIG9uIGEgZGlmZmVyZW50 IHRocmVhZCAob3IgYXQgbGVhc3QsIGFmdGVyIHRoZSBjYWNoZSBoYXMKKyAqICAgZ290dGVuIGNv bGQgaWYgZG9uZSBvbiB0aGUgc2FtZSB0aHJlYWQpLCBkZWZlcnJpbmcgbGlua2luZyB0cmFkZXMg Y2hlYXAKKyAqICAgbGluayBvcGVyYXRpb25zIG5vdyBmb3IgZXhwZW5zaXZlIG9uZXMgbGF0ZXIu CisgKgorICogVGhlIGZmcyB0cmljayBrZWVwcyBhbW9ydGl6ZWQgaW5zZXJ0IGNvc3QgYXQgY29u c3RhbnQgdGltZS4gIFNpbWlsYXIKKyAqIHN0cmF0ZWdpZXMgYmFzZWQgb24gcGVyaW9kaWNhbGx5 IHNvcnRpbmcgdGhlIGxpc3QgYWZ0ZXIgYSBiYXRjaCBvZiBvcGVyYXRpb25zCisgKiBwZXJmb3Jt IHdvcnNlIHRoYW4gdGhpcyBpbiBwcmFjdGljZSwgZXZlbiB3aXRoIHZhcmlvdXMgZmFuY3kgdHJp Y2tzOyB0aGV5CisgKiBhbGwgdG9vayBhbW9ydGl6ZWQgY29tcGxleGl0eSBvZiBhbiBpbnNlcnQg ZnJvbSBPKDEpIHRvIE8obG9nKG4pKS4KKyAqLworCit0eXBlZGVmIGludCAoKnBoX2NtcF90KSh2 b2lkICosIHZvaWQgKik7CisKKy8qIE5vZGUgc3RydWN0dXJlLiAqLwordHlwZWRlZiBzdHJ1Y3Qg cGhuX2xpbmtfcyBwaG5fbGlua190Oworc3RydWN0IHBobl9saW5rX3MgeworCXZvaWQgKnByZXY7 CisJdm9pZCAqbmV4dDsKKwl2b2lkICpsY2hpbGQ7Cit9OworCit0eXBlZGVmIHN0cnVjdCBwaF9z IHBoX3Q7CitzdHJ1Y3QgcGhfcyB7CisJdm9pZCAqcm9vdDsKKwkvKgorCSAqIEluc2VydHMgZG9u ZSBzaW5jZSB0aGUgbGFzdCBhdXgtbGlzdCBtZXJnZS4gIFRoaXMgaXMgbm90IG5lY2Vzc2FyaWx5 CisJICogdGhlIHNpemUgb2YgdGhlIGF1eC1saXN0LCBzaW5jZSBpdCdzIHBvc3NpYmxlIHRoYXQg cmVtb3ZhbHMgaGF2ZQorCSAqIGhhcHBlbmVkIHNpbmNlLCBhbmQgd2UgZG9uJ3QgdHJhY2sgd2hl dGhlciBvciBub3QgdGhvc2UgcmVtb3ZhbHMgYXJlCisJICogZnJvbSB0aGUgYXV4IGxpc3QuCisJ ICovCisJc2l6ZV90IGF1eGNvdW50OworfTsKKworSkVNQUxMT0NfQUxXQVlTX0lOTElORSBwaG5f bGlua190ICoKK3Bobl9saW5rX2dldCh2b2lkICpwaG4sIHNpemVfdCBvZmZzZXQpIHsKKwlyZXR1 cm4gKHBobl9saW5rX3QgKikoKCh1aW50cHRyX3QpcGhuKSArIG9mZnNldCk7Cit9CisKK0pFTUFM TE9DX0FMV0FZU19JTkxJTkUgdm9pZAorcGhuX2xpbmtfaW5pdCh2b2lkICpwaG4sIHNpemVfdCBv ZmZzZXQpIHsKKwlwaG5fbGlua19nZXQocGhuLCBvZmZzZXQpLT5wcmV2ID0gTlVMTDsKKwlwaG5f bGlua19nZXQocGhuLCBvZmZzZXQpLT5uZXh0ID0gTlVMTDsKKwlwaG5fbGlua19nZXQocGhuLCBv ZmZzZXQpLT5sY2hpbGQgPSBOVUxMOworfQorCisvKiBJbnRlcm5hbCB1dGlsaXR5IGhlbHBlcnMu ICovCitKRU1BTExPQ19BTFdBWVNfSU5MSU5FIHZvaWQgKgorcGhuX2xjaGlsZF9nZXQodm9pZCAq cGhuLCBzaXplX3Qgb2Zmc2V0KSB7CisJcmV0dXJuIHBobl9saW5rX2dldChwaG4sIG9mZnNldCkt PmxjaGlsZDsKK30KKworSkVNQUxMT0NfQUxXQVlTX0lOTElORSB2b2lkCitwaG5fbGNoaWxkX3Nl dCh2b2lkICpwaG4sIHZvaWQgKmxjaGlsZCwgc2l6ZV90IG9mZnNldCkgeworCXBobl9saW5rX2dl dChwaG4sIG9mZnNldCktPmxjaGlsZCA9IGxjaGlsZDsKK30KKworSkVNQUxMT0NfQUxXQVlTX0lO TElORSB2b2lkICoKK3Bobl9uZXh0X2dldCh2b2lkICpwaG4sIHNpemVfdCBvZmZzZXQpIHsKKwly ZXR1cm4gcGhuX2xpbmtfZ2V0KHBobiwgb2Zmc2V0KS0+bmV4dDsKK30KKworSkVNQUxMT0NfQUxX QVlTX0lOTElORSB2b2lkCitwaG5fbmV4dF9zZXQodm9pZCAqcGhuLCB2b2lkICpuZXh0LCBzaXpl X3Qgb2Zmc2V0KSB7CisJcGhuX2xpbmtfZ2V0KHBobiwgb2Zmc2V0KS0+bmV4dCA9IG5leHQ7Cit9 CisKK0pFTUFMTE9DX0FMV0FZU19JTkxJTkUgdm9pZCAqCitwaG5fcHJldl9nZXQodm9pZCAqcGhu LCBzaXplX3Qgb2Zmc2V0KSB7CisJcmV0dXJuIHBobl9saW5rX2dldChwaG4sIG9mZnNldCktPnBy ZXY7Cit9CisKK0pFTUFMTE9DX0FMV0FZU19JTkxJTkUgdm9pZAorcGhuX3ByZXZfc2V0KHZvaWQg KnBobiwgdm9pZCAqcHJldiwgc2l6ZV90IG9mZnNldCkgeworCXBobl9saW5rX2dldChwaG4sIG9m ZnNldCktPnByZXYgPSBwcmV2OworfQorCitKRU1BTExPQ19BTFdBWVNfSU5MSU5FIHZvaWQKK3Bo bl9tZXJnZV9vcmRlcmVkKHZvaWQgKnBobjAsIHZvaWQgKnBobjEsIHNpemVfdCBvZmZzZXQsCisg ICAgcGhfY21wX3QgY21wKSB7CisJdm9pZCAqcGhuMGNoaWxkOworCisJYXNzZXJ0KHBobjAgIT0g TlVMTCk7CisJYXNzZXJ0KHBobjEgIT0gTlVMTCk7CisJYXNzZXJ0KGNtcChwaG4wLCBwaG4xKSA8 PSAwKTsKKworCXBobl9wcmV2X3NldChwaG4xLCBwaG4wLCBvZmZzZXQpOworCXBobjBjaGlsZCA9 IHBobl9sY2hpbGRfZ2V0KHBobjAsIG9mZnNldCk7CisJcGhuX25leHRfc2V0KHBobjEsIHBobjBj aGlsZCwgb2Zmc2V0KTsKKwlpZiAocGhuMGNoaWxkICE9IE5VTEwpIHsKKwkJcGhuX3ByZXZfc2V0 KHBobjBjaGlsZCwgcGhuMSwgb2Zmc2V0KTsKKwl9CisJcGhuX2xjaGlsZF9zZXQocGhuMCwgcGhu MSwgb2Zmc2V0KTsKK30KKworSkVNQUxMT0NfQUxXQVlTX0lOTElORSB2b2lkICoKK3Bobl9tZXJn ZSh2b2lkICpwaG4wLCB2b2lkICpwaG4xLCBzaXplX3Qgb2Zmc2V0LCBwaF9jbXBfdCBjbXApIHsK Kwl2b2lkICpyZXN1bHQ7CisJaWYgKHBobjAgPT0gTlVMTCkgeworCQlyZXN1bHQgPSBwaG4xOwor CX0gZWxzZSBpZiAocGhuMSA9PSBOVUxMKSB7CisJCXJlc3VsdCA9IHBobjA7CisJfSBlbHNlIGlm IChjbXAocGhuMCwgcGhuMSkgPCAwKSB7CisJCXBobl9tZXJnZV9vcmRlcmVkKHBobjAsIHBobjEs IG9mZnNldCwgY21wKTsKKwkJcmVzdWx0ID0gcGhuMDsKKwl9IGVsc2UgeworCQlwaG5fbWVyZ2Vf b3JkZXJlZChwaG4xLCBwaG4wLCBvZmZzZXQsIGNtcCk7CisJCXJlc3VsdCA9IHBobjE7CisJfQor CXJldHVybiByZXN1bHQ7Cit9CisKK0pFTUFMTE9DX0FMV0FZU19JTkxJTkUgdm9pZCAqCitwaG5f bWVyZ2Vfc2libGluZ3Modm9pZCAqcGhuLCBzaXplX3Qgb2Zmc2V0LCBwaF9jbXBfdCBjbXApIHsK Kwl2b2lkICpoZWFkID0gTlVMTDsKKwl2b2lkICp0YWlsID0gTlVMTDsKKwl2b2lkICpwaG4wID0g cGhuOworCXZvaWQgKnBobjEgPSBwaG5fbmV4dF9nZXQocGhuMCwgb2Zmc2V0KTsKKworCS8qCisJ ICogTXVsdGlwYXNzIG1lcmdlLCB3aGVyZWluIHRoZSBmaXJzdCB0d28gZWxlbWVudHMgb2YgYSBG SUZPCisJICogYXJlIHJlcGVhdGVkbHkgbWVyZ2VkLCBhbmQgZWFjaCByZXN1bHQgaXMgYXBwZW5k ZWQgdG8gdGhlCisJICogc2luZ2x5IGxpbmtlZCBGSUZPLCB1bnRpbCB0aGUgRklGTyBjb250YWlu cyBvbmx5IGEgc2luZ2xlCisJICogZWxlbWVudC4gIFdlIHN0YXJ0IHdpdGggYSBzaWJsaW5nIGxp c3QgYnV0IG5vIHJlZmVyZW5jZSB0bworCSAqIGl0cyB0YWlsLCBzbyB3ZSBkbyBhIHNpbmdsZSBw YXNzIG92ZXIgdGhlIHNpYmxpbmcgbGlzdCB0bworCSAqIHBvcHVsYXRlIHRoZSBGSUZPLgorCSAq LworCWlmIChwaG4xICE9IE5VTEwpIHsKKwkJdm9pZCAqcGhucmVzdCA9IHBobl9uZXh0X2dldChw aG4xLCBvZmZzZXQpOworCQlpZiAocGhucmVzdCAhPSBOVUxMKSB7CisJCQlwaG5fcHJldl9zZXQo cGhucmVzdCwgTlVMTCwgb2Zmc2V0KTsKKwkJfQorCQlwaG5fcHJldl9zZXQocGhuMCwgTlVMTCwg b2Zmc2V0KTsKKwkJcGhuX25leHRfc2V0KHBobjAsIE5VTEwsIG9mZnNldCk7CisJCXBobl9wcmV2 X3NldChwaG4xLCBOVUxMLCBvZmZzZXQpOworCQlwaG5fbmV4dF9zZXQocGhuMSwgTlVMTCwgb2Zm c2V0KTsKKwkJcGhuMCA9IHBobl9tZXJnZShwaG4wLCBwaG4xLCBvZmZzZXQsIGNtcCk7CisJCWhl YWQgPSB0YWlsID0gcGhuMDsKKwkJcGhuMCA9IHBobnJlc3Q7CisJCXdoaWxlIChwaG4wICE9IE5V TEwpIHsKKwkJCXBobjEgPSBwaG5fbmV4dF9nZXQocGhuMCwgb2Zmc2V0KTsKKwkJCWlmIChwaG4x ICE9IE5VTEwpIHsKKwkJCQlwaG5yZXN0ID0gcGhuX25leHRfZ2V0KHBobjEsIG9mZnNldCk7CisJ CQkJaWYgKHBobnJlc3QgIT0gTlVMTCkgeworCQkJCQlwaG5fcHJldl9zZXQocGhucmVzdCwgTlVM TCwgb2Zmc2V0KTsKKwkJCQl9CisJCQkJcGhuX3ByZXZfc2V0KHBobjAsIE5VTEwsIG9mZnNldCk7 CisJCQkJcGhuX25leHRfc2V0KHBobjAsIE5VTEwsIG9mZnNldCk7CisJCQkJcGhuX3ByZXZfc2V0 KHBobjEsIE5VTEwsIG9mZnNldCk7CisJCQkJcGhuX25leHRfc2V0KHBobjEsIE5VTEwsIG9mZnNl dCk7CisJCQkJcGhuMCA9IHBobl9tZXJnZShwaG4wLCBwaG4xLCBvZmZzZXQsIGNtcCk7CisJCQkJ cGhuX25leHRfc2V0KHRhaWwsIHBobjAsIG9mZnNldCk7CisJCQkJdGFpbCA9IHBobjA7CisJCQkJ cGhuMCA9IHBobnJlc3Q7CisJCQl9IGVsc2UgeworCQkJCXBobl9uZXh0X3NldCh0YWlsLCBwaG4w LCBvZmZzZXQpOworCQkJCXRhaWwgPSBwaG4wOworCQkJCXBobjAgPSBOVUxMOworCQkJfQorCQl9 CisJCXBobjAgPSBoZWFkOworCQlwaG4xID0gcGhuX25leHRfZ2V0KHBobjAsIG9mZnNldCk7CisJ CWlmIChwaG4xICE9IE5VTEwpIHsKKwkJCXdoaWxlICh0cnVlKSB7CisJCQkJaGVhZCA9IHBobl9u ZXh0X2dldChwaG4xLCBvZmZzZXQpOworCQkJCWFzc2VydChwaG5fcHJldl9nZXQocGhuMCwgb2Zm c2V0KSA9PSBOVUxMKTsKKwkJCQlwaG5fbmV4dF9zZXQocGhuMCwgTlVMTCwgb2Zmc2V0KTsKKwkJ CQlhc3NlcnQocGhuX3ByZXZfZ2V0KHBobjEsIG9mZnNldCkgPT0gTlVMTCk7CisJCQkJcGhuX25l eHRfc2V0KHBobjEsIE5VTEwsIG9mZnNldCk7CisJCQkJcGhuMCA9IHBobl9tZXJnZShwaG4wLCBw aG4xLCBvZmZzZXQsIGNtcCk7CisJCQkJaWYgKGhlYWQgPT0gTlVMTCkgeworCQkJCQlicmVhazsK KwkJCQl9CisJCQkJcGhuX25leHRfc2V0KHRhaWwsIHBobjAsIG9mZnNldCk7CisJCQkJdGFpbCA9 IHBobjA7CisJCQkJcGhuMCA9IGhlYWQ7CisJCQkJcGhuMSA9IHBobl9uZXh0X2dldChwaG4wLCBv ZmZzZXQpOworCQkJfQorCQl9CisJfQorCXJldHVybiBwaG4wOworfQorCitKRU1BTExPQ19BTFdB WVNfSU5MSU5FIHZvaWQKK3BoX21lcmdlX2F1eChwaF90ICpwaCwgc2l6ZV90IG9mZnNldCwgcGhf Y21wX3QgY21wKSB7CisJcGgtPmF1eGNvdW50ID0gMDsKKwl2b2lkICpwaG4gPSBwaG5fbmV4dF9n ZXQocGgtPnJvb3QsIG9mZnNldCk7CisJaWYgKHBobiAhPSBOVUxMKSB7CisJCXBobl9wcmV2X3Nl dChwaC0+cm9vdCwgTlVMTCwgb2Zmc2V0KTsKKwkJcGhuX25leHRfc2V0KHBoLT5yb290LCBOVUxM LCBvZmZzZXQpOworCQlwaG5fcHJldl9zZXQocGhuLCBOVUxMLCBvZmZzZXQpOworCQlwaG4gPSBw aG5fbWVyZ2Vfc2libGluZ3MocGhuLCBvZmZzZXQsIGNtcCk7CisJCWFzc2VydChwaG5fbmV4dF9n ZXQocGhuLCBvZmZzZXQpID09IE5VTEwpOworCQlwaC0+cm9vdCA9IHBobl9tZXJnZShwaC0+cm9v dCwgcGhuLCBvZmZzZXQsIGNtcCk7CisJfQorfQorCitKRU1BTExPQ19BTFdBWVNfSU5MSU5FIHZv aWQgKgorcGhfbWVyZ2VfY2hpbGRyZW4odm9pZCAqcGhuLCBzaXplX3Qgb2Zmc2V0LCBwaF9jbXBf dCBjbXApIHsKKwl2b2lkICpyZXN1bHQ7CisJdm9pZCAqbGNoaWxkID0gcGhuX2xjaGlsZF9nZXQo cGhuLCBvZmZzZXQpOworCWlmIChsY2hpbGQgPT0gTlVMTCkgeworCQlyZXN1bHQgPSBOVUxMOwor CX0gZWxzZSB7CisJCXJlc3VsdCA9IHBobl9tZXJnZV9zaWJsaW5ncyhsY2hpbGQsIG9mZnNldCwg Y21wKTsKKwl9CisJcmV0dXJuIHJlc3VsdDsKK30KKworSkVNQUxMT0NfQUxXQVlTX0lOTElORSB2 b2lkCitwaF9uZXcocGhfdCAqcGgpIHsKKwlwaC0+cm9vdCA9IE5VTEw7CisJcGgtPmF1eGNvdW50 ID0gMDsKK30KKworSkVNQUxMT0NfQUxXQVlTX0lOTElORSBib29sCitwaF9lbXB0eShwaF90ICpw aCkgeworCXJldHVybiBwaC0+cm9vdCA9PSBOVUxMOworfQorCitKRU1BTExPQ19BTFdBWVNfSU5M SU5FIHZvaWQgKgorcGhfZmlyc3QocGhfdCAqcGgsIHNpemVfdCBvZmZzZXQsIHBoX2NtcF90IGNt cCkgeworCWlmIChwaC0+cm9vdCA9PSBOVUxMKSB7CisJCXJldHVybiBOVUxMOworCX0KKwlwaF9t ZXJnZV9hdXgocGgsIG9mZnNldCwgY21wKTsKKwlyZXR1cm4gcGgtPnJvb3Q7Cit9CisKK0pFTUFM TE9DX0FMV0FZU19JTkxJTkUgdm9pZCAqCitwaF9hbnkocGhfdCAqcGgsIHNpemVfdCBvZmZzZXQp IHsKKwlpZiAocGgtPnJvb3QgPT0gTlVMTCkgeworCQlyZXR1cm4gTlVMTDsKKwl9CisJdm9pZCAq YXV4ID0gcGhuX25leHRfZ2V0KHBoLT5yb290LCBvZmZzZXQpOworCWlmIChhdXggIT0gTlVMTCkg eworCQlyZXR1cm4gYXV4OworCX0KKwlyZXR1cm4gcGgtPnJvb3Q7Cit9CisKKy8qIFJldHVybnMg dHJ1ZSBpZiB3ZSBzaG91bGQgc3RvcCB0cnlpbmcgdG8gbWVyZ2UuICovCitKRU1BTExPQ19BTFdB WVNfSU5MSU5FIGJvb2wKK3BoX3RyeV9hdXhfbWVyZ2VfcGFpcihwaF90ICpwaCwgc2l6ZV90IG9m ZnNldCwgcGhfY21wX3QgY21wKSB7CisJYXNzZXJ0KHBoLT5yb290ICE9IE5VTEwpOworCXZvaWQg KnBobjAgPSBwaG5fbmV4dF9nZXQocGgtPnJvb3QsIG9mZnNldCk7CisJaWYgKHBobjAgPT0gTlVM TCkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9CisJdm9pZCAqcGhuMSA9IHBobl9uZXh0X2dldChwaG4w LCBvZmZzZXQpOworCWlmIChwaG4xID09IE5VTEwpIHsKKwkJcmV0dXJuIHRydWU7CisJfQorCXZv aWQgKm5leHRfcGhuMSA9IHBobl9uZXh0X2dldChwaG4xLCBvZmZzZXQpOworCXBobl9uZXh0X3Nl dChwaG4wLCBOVUxMLCBvZmZzZXQpOworCXBobl9wcmV2X3NldChwaG4wLCBOVUxMLCBvZmZzZXQp OworCXBobl9uZXh0X3NldChwaG4xLCBOVUxMLCBvZmZzZXQpOworCXBobl9wcmV2X3NldChwaG4x LCBOVUxMLCBvZmZzZXQpOworCXBobjAgPSBwaG5fbWVyZ2UocGhuMCwgcGhuMSwgb2Zmc2V0LCBj bXApOworCXBobl9uZXh0X3NldChwaG4wLCBuZXh0X3BobjEsIG9mZnNldCk7CisJaWYgKG5leHRf cGhuMSAhPSBOVUxMKSB7CisJCXBobl9wcmV2X3NldChuZXh0X3BobjEsIHBobjAsIG9mZnNldCk7 CisJfQorCXBobl9uZXh0X3NldChwaC0+cm9vdCwgcGhuMCwgb2Zmc2V0KTsKKwlwaG5fcHJldl9z ZXQocGhuMCwgcGgtPnJvb3QsIG9mZnNldCk7CisJcmV0dXJuIG5leHRfcGhuMSA9PSBOVUxMOwor fQorCitKRU1BTExPQ19BTFdBWVNfSU5MSU5FIHZvaWQKK3BoX2luc2VydChwaF90ICpwaCwgdm9p ZCAqcGhuLCBzaXplX3Qgb2Zmc2V0LCBwaF9jbXBfdCBjbXApIHsKKwlwaG5fbGlua19pbml0KHBo biwgb2Zmc2V0KTsKKworCS8qCisJICogVHJlYXQgdGhlIHJvb3QgYXMgYW4gYXV4IGxpc3QgZHVy aW5nIGluc2VydGlvbiwgYW5kIGxhemlseSBtZXJnZQorCSAqIGR1cmluZyBhX3ByZWZpeCMjcmVt b3ZlX2ZpcnN0KCkuICBGb3IgZWxlbWVudHMgdGhhdCBhcmUgaW5zZXJ0ZWQsCisJICogdGhlbiBy ZW1vdmVkIHZpYSBhX3ByZWZpeCMjcmVtb3ZlKCkgYmVmb3JlIHRoZSBhdXggbGlzdCBpcyBldmVy CisJICogcHJvY2Vzc2VkLCB0aGlzIG1ha2VzIGluc2VydC9yZW1vdmUgY29uc3RhbnQtdGltZSwg d2hlcmVhcyBlYWdlcgorCSAqIG1lcmdpbmcgd291bGQgbWFrZSBpbnNlcnQgTyhsb2cgbikuCisJ ICovCisJaWYgKHBoLT5yb290ID09IE5VTEwpIHsKKwkJcGgtPnJvb3QgPSBwaG47CisJfSBlbHNl IHsKKwkJLyoKKwkJICogQXMgYSBzcGVjaWFsIGNhc2UsIGNoZWNrIHRvIHNlZSBpZiB3ZSBjYW4g cmVwbGFjZSB0aGUgcm9vdC4KKwkJICogVGhpcyBpcyBwcmFjdGljYWxseSBjb21tb24gaW4gc29t ZSBpbXBvcnRhbnQgY2FzZXMsIGFuZCBsZXRzCisJCSAqIHVzIGRlZmVyIHNvbWUgaW5zZXJ0aW9u cyAoaG9wZWZ1bGx5LCB1bnRpbCB0aGUgcG9pbnQgd2hlcmUKKwkJICogc29tZSBvZiB0aGUgaXRl bXMgaW4gdGhlIGF1eCBsaXN0IGhhdmUgYmVlbiByZW1vdmVkLCBzYXZpbmdzCisJCSAqIHVzIGZy b20gbGlua2luZyB0aGVtIGF0IGFsbCkuCisJCSAqLworCQlpZiAoY21wKHBobiwgcGgtPnJvb3Qp IDwgMCkgeworCQkJcGhuX2xjaGlsZF9zZXQocGhuLCBwaC0+cm9vdCwgb2Zmc2V0KTsKKwkJCXBo bl9wcmV2X3NldChwaC0+cm9vdCwgcGhuLCBvZmZzZXQpOworCQkJcGgtPnJvb3QgPSBwaG47CisJ CQlwaC0+YXV4Y291bnQgPSAwOworCQkJcmV0dXJuOworCQl9CisJCXBoLT5hdXhjb3VudCsrOwor CQlwaG5fbmV4dF9zZXQocGhuLCBwaG5fbmV4dF9nZXQocGgtPnJvb3QsIG9mZnNldCksIG9mZnNl dCk7CisJCWlmIChwaG5fbmV4dF9nZXQocGgtPnJvb3QsIG9mZnNldCkgIT0gTlVMTCkgeworCQkJ cGhuX3ByZXZfc2V0KHBobl9uZXh0X2dldChwaC0+cm9vdCwgb2Zmc2V0KSwgcGhuLAorCQkJICAg IG9mZnNldCk7CisJCX0KKwkJcGhuX3ByZXZfc2V0KHBobiwgcGgtPnJvb3QsIG9mZnNldCk7CisJ CXBobl9uZXh0X3NldChwaC0+cm9vdCwgcGhuLCBvZmZzZXQpOworCX0KKwlpZiAocGgtPmF1eGNv dW50ID4gMSkgeworCQl1bnNpZ25lZCBubWVyZ2VzID0gZmZzX3p1KHBoLT5hdXhjb3VudCAtIDEp OworCQlib29sIGRvbmUgPSBmYWxzZTsKKwkJZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG5tZXJn ZXMgJiYgIWRvbmU7IGkrKykgeworCQkJZG9uZSA9IHBoX3RyeV9hdXhfbWVyZ2VfcGFpcihwaCwg b2Zmc2V0LCBjbXApOworCQl9CisJfQorfQorCitKRU1BTExPQ19BTFdBWVNfSU5MSU5FIHZvaWQg KgorcGhfcmVtb3ZlX2ZpcnN0KHBoX3QgKnBoLCBzaXplX3Qgb2Zmc2V0LCBwaF9jbXBfdCBjbXAp IHsKKwl2b2lkICpyZXQ7CisKKwlpZiAocGgtPnJvb3QgPT0gTlVMTCkgeworCQlyZXR1cm4gTlVM TDsKKwl9CisJcGhfbWVyZ2VfYXV4KHBoLCBvZmZzZXQsIGNtcCk7CisJcmV0ID0gcGgtPnJvb3Q7 CisJcGgtPnJvb3QgPSBwaF9tZXJnZV9jaGlsZHJlbihwaC0+cm9vdCwgb2Zmc2V0LCBjbXApOwor CisJcmV0dXJuIHJldDsKKworfQorCitKRU1BTExPQ19BTFdBWVNfSU5MSU5FIHZvaWQKK3BoX3Jl bW92ZShwaF90ICpwaCwgdm9pZCAqcGhuLCBzaXplX3Qgb2Zmc2V0LCBwaF9jbXBfdCBjbXApIHsK Kwl2b2lkICpyZXBsYWNlOworCXZvaWQgKnBhcmVudDsKKworCWlmIChwaC0+cm9vdCA9PSBwaG4p IHsKKwkJLyoKKwkJICogV2UgY2FuIGRlbGV0ZSBmcm9tIGF1eCBsaXN0IHdpdGhvdXQgbWVyZ2lu ZyBpdCwgYnV0IHdlIG5lZWQKKwkJICogdG8gbWVyZ2UgaWYgd2UgYXJlIGRlYWxpbmcgd2l0aCB0 aGUgcm9vdCBub2RlIGFuZCBpdCBoYXMKKwkJICogY2hpbGRyZW4uCisJCSAqLworCQlpZiAocGhu X2xjaGlsZF9nZXQocGhuLCBvZmZzZXQpID09IE5VTEwpIHsKKwkJCXBoLT5yb290ID0gcGhuX25l eHRfZ2V0KHBobiwgb2Zmc2V0KTsKKwkJCWlmIChwaC0+cm9vdCAhPSBOVUxMKSB7CisJCQkJcGhu X3ByZXZfc2V0KHBoLT5yb290LCBOVUxMLCBvZmZzZXQpOworCQkJfQorCQkJcmV0dXJuOworCQl9 CisJCXBoX21lcmdlX2F1eChwaCwgb2Zmc2V0LCBjbXApOworCQlpZiAocGgtPnJvb3QgPT0gcGhu KSB7CisJCQlwaC0+cm9vdCA9IHBoX21lcmdlX2NoaWxkcmVuKHBoLT5yb290LCBvZmZzZXQsIGNt cCk7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwkvKiBHZXQgcGFyZW50IChpZiBwaG4gaXMgbGVm dG1vc3QgY2hpbGQpIGJlZm9yZSBtdXRhdGluZy4gKi8KKwlpZiAoKHBhcmVudCA9IHBobl9wcmV2 X2dldChwaG4sIG9mZnNldCkpICE9IE5VTEwpIHsKKwkJaWYgKHBobl9sY2hpbGRfZ2V0KHBhcmVu dCwgb2Zmc2V0KSAhPSBwaG4pIHsKKwkJCXBhcmVudCA9IE5VTEw7CisJCX0KKwl9CisJLyogRmlu ZCBhIHBvc3NpYmxlIHJlcGxhY2VtZW50IG5vZGUsIGFuZCBsaW5rIHRvIHBhcmVudC4gKi8KKwly ZXBsYWNlID0gcGhfbWVyZ2VfY2hpbGRyZW4ocGhuLCBvZmZzZXQsIGNtcCk7CisJLyogU2V0IG5l eHQvcHJldiBmb3Igc2libGluZyBsaW5rZWQgbGlzdC4gKi8KKwlpZiAocmVwbGFjZSAhPSBOVUxM KSB7CisJCWlmIChwYXJlbnQgIT0gTlVMTCkgeworCQkJcGhuX3ByZXZfc2V0KHJlcGxhY2UsIHBh cmVudCwgb2Zmc2V0KTsKKwkJCXBobl9sY2hpbGRfc2V0KHBhcmVudCwgcmVwbGFjZSwgb2Zmc2V0 KTsKKwkJfSBlbHNlIHsKKwkJCXBobl9wcmV2X3NldChyZXBsYWNlLCBwaG5fcHJldl9nZXQocGhu LCBvZmZzZXQpLAorCQkJICAgIG9mZnNldCk7CisJCQlpZiAocGhuX3ByZXZfZ2V0KHBobiwgb2Zm c2V0KSAhPSBOVUxMKSB7CisJCQkJcGhuX25leHRfc2V0KHBobl9wcmV2X2dldChwaG4sIG9mZnNl dCksIHJlcGxhY2UsCisJCQkJICAgIG9mZnNldCk7CisJCQl9CisJCX0KKwkJcGhuX25leHRfc2V0 KHJlcGxhY2UsIHBobl9uZXh0X2dldChwaG4sIG9mZnNldCksIG9mZnNldCk7CisJCWlmIChwaG5f bmV4dF9nZXQocGhuLCBvZmZzZXQpICE9IE5VTEwpIHsKKwkJCXBobl9wcmV2X3NldChwaG5fbmV4 dF9nZXQocGhuLCBvZmZzZXQpLCByZXBsYWNlLAorCQkJICAgIG9mZnNldCk7CisJCX0KKwl9IGVs c2UgeworCQlpZiAocGFyZW50ICE9IE5VTEwpIHsKKwkJCXZvaWQgKm5leHQgPSBwaG5fbmV4dF9n ZXQocGhuLCBvZmZzZXQpOworCQkJcGhuX2xjaGlsZF9zZXQocGFyZW50LCBuZXh0LCBvZmZzZXQp OworCQkJaWYgKG5leHQgIT0gTlVMTCkgeworCQkJCXBobl9wcmV2X3NldChuZXh0LCBwYXJlbnQs IG9mZnNldCk7CisJCQl9CisJCX0gZWxzZSB7CisJCQlhc3NlcnQocGhuX3ByZXZfZ2V0KHBobiwg b2Zmc2V0KSAhPSBOVUxMKTsKKwkJCXBobl9uZXh0X3NldCgKKwkJCSAgICBwaG5fcHJldl9nZXQo cGhuLCBvZmZzZXQpLAorCQkJICAgIHBobl9uZXh0X2dldChwaG4sIG9mZnNldCksIG9mZnNldCk7 CisJCX0KKwkJaWYgKHBobl9uZXh0X2dldChwaG4sIG9mZnNldCkgIT0gTlVMTCkgeworCQkJcGhu X3ByZXZfc2V0KAorCQkJICAgIHBobl9uZXh0X2dldChwaG4sIG9mZnNldCksCisJCQkgICAgcGhu X3ByZXZfZ2V0KHBobiwgb2Zmc2V0KSwgb2Zmc2V0KTsKKwkJfQorCX0KK30KKworI2RlZmluZSBw aF9zdHJ1Y3RzKGFfcHJlZml4LCBhX3R5cGUpCQkJCQlcCit0eXBlZGVmIHN0cnVjdCB7CQkJCQkJ CVwKKwlwaG5fbGlua190IGxpbms7CQkJCQkJXAorfSBhX3ByZWZpeCMjX2xpbmtfdDsJCQkJCQkJ XAorCQkJCQkJCQkJXAordHlwZWRlZiBzdHJ1Y3QgewkJCQkJCQlcCisJcGhfdCBwaDsJCQkJCQkJ XAorfSBhX3ByZWZpeCMjX3Q7CisKKy8qCisgKiBUaGUgcGhfcHJvdG8oKSBtYWNybyBnZW5lcmF0 ZXMgZnVuY3Rpb24gcHJvdG90eXBlcyB0aGF0IGNvcnJlc3BvbmQgdG8gdGhlCisgKiBmdW5jdGlv bnMgZ2VuZXJhdGVkIGJ5IGFuIGVxdWl2YWxlbnRseSBwYXJhbWV0ZXJpemVkIGNhbGwgdG8gcGhf Z2VuKCkuCisgKi8KKyNkZWZpbmUgcGhfcHJvdG8oYV9hdHRyLCBhX3ByZWZpeCwgYV90eXBlKQkJ CQlcCisJCQkJCQkJCQlcCithX2F0dHIgdm9pZCBhX3ByZWZpeCMjX25ldyhhX3ByZWZpeCMjX3Qg KnBoKTsJCQkJXAorYV9hdHRyIGJvb2wgYV9wcmVmaXgjI19lbXB0eShhX3ByZWZpeCMjX3QgKnBo KTsJCQkJXAorYV9hdHRyIGFfdHlwZSAqYV9wcmVmaXgjI19maXJzdChhX3ByZWZpeCMjX3QgKnBo KTsJCQlcCithX2F0dHIgYV90eXBlICphX3ByZWZpeCMjX2FueShhX3ByZWZpeCMjX3QgKnBoKTsJ CQlcCithX2F0dHIgdm9pZCBhX3ByZWZpeCMjX2luc2VydChhX3ByZWZpeCMjX3QgKnBoLCBhX3R5 cGUgKnBobik7CQlcCithX2F0dHIgYV90eXBlICphX3ByZWZpeCMjX3JlbW92ZV9maXJzdChhX3By ZWZpeCMjX3QgKnBoKTsJCVwKK2FfYXR0ciB2b2lkIGFfcHJlZml4IyNfcmVtb3ZlKGFfcHJlZml4 IyNfdCAqcGgsIGFfdHlwZSAqcGhuKTsJCVwKK2FfYXR0ciBhX3R5cGUgKmFfcHJlZml4IyNfcmVt b3ZlX2FueShhX3ByZWZpeCMjX3QgKnBoKTsKKworLyogVGhlIHBoX2dlbigpIG1hY3JvIGdlbmVy YXRlcyBhIHR5cGUtc3BlY2lmaWMgcGFpcmluZyBoZWFwIGltcGxlbWVudGF0aW9uLiAqLworI2Rl ZmluZSBwaF9nZW4oYV9hdHRyLCBhX3ByZWZpeCwgYV90eXBlLCBhX2ZpZWxkLCBhX2NtcCkJCVwK K0pFTUFMTE9DX0FMV0FZU19JTkxJTkUgaW50CQkJCQkJXAorYV9wcmVmaXgjI19waF9jbXAodm9p ZCAqYSwgdm9pZCAqYikgewkJCQkJXAorCXJldHVybiBhX2NtcCgoYV90eXBlICopYSwgKGFfdHlw ZSAqKWIpOwkJCQlcCit9CQkJCQkJCQkJXAorCQkJCQkJCQkJXAorYV9hdHRyIHZvaWQJCQkJCQkJ CVwKK2FfcHJlZml4IyNfbmV3KGFfcHJlZml4IyNfdCAqcGgpIHsJCQkJCVwKKwlwaF9uZXcoJnBo LT5waCk7CQkJCQkJXAorfQkJCQkJCQkJCVwKKwkJCQkJCQkJCVwKK2FfYXR0ciBib29sCQkJCQkJ CQlcCithX3ByZWZpeCMjX2VtcHR5KGFfcHJlZml4IyNfdCAqcGgpIHsJCQkJCVwKKwlyZXR1cm4g cGhfZW1wdHkoJnBoLT5waCk7CQkJCQlcCit9CQkJCQkJCQkJXAorCQkJCQkJCQkJXAorYV9hdHRy IGFfdHlwZSAqCQkJCQkJCQlcCithX3ByZWZpeCMjX2ZpcnN0KGFfcHJlZml4IyNfdCAqcGgpIHsJ CQkJCVwKKwlyZXR1cm4gcGhfZmlyc3QoJnBoLT5waCwgb2Zmc2V0b2YoYV90eXBlLCBhX2ZpZWxk KSwJCVwKKwkgICAgJmFfcHJlZml4IyNfcGhfY21wKTsJCQkJCVwKK30JCQkJCQkJCQlcCisJCQkJ CQkJCQlcCithX2F0dHIgYV90eXBlICoJCQkJCQkJCVwKK2FfcHJlZml4IyNfYW55KGFfcHJlZml4 IyNfdCAqcGgpIHsJCQkJCVwKKwlyZXR1cm4gcGhfYW55KCZwaC0+cGgsIG9mZnNldG9mKGFfdHlw ZSwgYV9maWVsZCkpOwkJXAorfQkJCQkJCQkJCVwKKwkJCQkJCQkJCVwKK2FfYXR0ciB2b2lkCQkJ CQkJCQlcCithX3ByZWZpeCMjX2luc2VydChhX3ByZWZpeCMjX3QgKnBoLCBhX3R5cGUgKnBobikg ewkJCVwKKwlwaF9pbnNlcnQoJnBoLT5waCwgcGhuLCBvZmZzZXRvZihhX3R5cGUsIGFfZmllbGQp LAkJXAorCSAgICBhX3ByZWZpeCMjX3BoX2NtcCk7CQkJCQkJXAorfQkJCQkJCQkJCVwKKwkJCQkJ CQkJCVwKK2FfYXR0ciBhX3R5cGUgKgkJCQkJCQkJXAorYV9wcmVmaXgjI19yZW1vdmVfZmlyc3Qo YV9wcmVmaXgjI190ICpwaCkgewkJCQlcCisJcmV0dXJuIHBoX3JlbW92ZV9maXJzdCgmcGgtPnBo LCBvZmZzZXRvZihhX3R5cGUsIGFfZmllbGQpLAlcCisJICAgIGFfcHJlZml4IyNfcGhfY21wKTsJ CQkJCQlcCit9CQkJCQkJCQkJXAorCQkJCQkJCQkJXAorYV9hdHRyIHZvaWQJCQkJCQkJCVwKK2Ff cHJlZml4IyNfcmVtb3ZlKGFfcHJlZml4IyNfdCAqcGgsIGFfdHlwZSAqcGhuKSB7CQkJXAorCXBo X3JlbW92ZSgmcGgtPnBoLCBwaG4sIG9mZnNldG9mKGFfdHlwZSwgYV9maWVsZCksCQlcCisJICAg IGFfcHJlZml4IyNfcGhfY21wKTsJCQkJCQlcCit9CQkJCQkJCQkJXAorCQkJCQkJCQkJXAorYV9h dHRyIGFfdHlwZSAqCQkJCQkJCQlcCithX3ByZWZpeCMjX3JlbW92ZV9hbnkoYV9wcmVmaXgjI190 ICpwaCkgewkJCQlcCisJYV90eXBlICpyZXQgPSBhX3ByZWZpeCMjX2FueShwaCk7CQkJCVwKKwlp ZiAocmV0ICE9IE5VTEwpIHsJCQkJCQlcCisJCWFfcHJlZml4IyNfcmVtb3ZlKHBoLCByZXQpOwkJ CQlcCisJfQkJCQkJCQkJXAorCXJldHVybiByZXQ7CQkJCQkJCVwKK30KKworI2VuZGlmIC8qIEpF TUFMTE9DX0lOVEVSTkFMX1BIX0ggKi8KCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1i dWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL3ByaXZhdGVfbmFt ZXNwYWNlLnNoIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVk ZS9qZW1hbGxvYy9pbnRlcm5hbC9wcml2YXRlX25hbWVzcGFjZS5zaApuZXcgZmlsZSBtb2RlIDEw MDc1NQppbmRleCAwMDAwMDAwLi42ZWYxMzQ2Ci0tLSAvZGV2L251bGwKKysrIGIvMzg5LWRzLWJh c2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9w cml2YXRlX25hbWVzcGFjZS5zaApAQCAtMCwwICsxLDUgQEAKKyMhL2Jpbi9zaAorCitmb3Igc3lt Ym9sIGluIGBjYXQgIiRAImAgOyBkbworICBlY2hvICIjZGVmaW5lICR7c3ltYm9sfSBKRU1BTExP Q19OKCR7c3ltYm9sfSkiCitkb25lCgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVp bGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9wcml2YXRlX3N5bWJv bHMuc2ggYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2pl bWFsbG9jL2ludGVybmFsL3ByaXZhdGVfc3ltYm9scy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQpp bmRleCAwMDAwMDAwLi40NDJhMjU5Ci0tLSAvZGV2L251bGwKKysrIGIvMzg5LWRzLWJhc2UtMy4z LjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9wcml2YXRl X3N5bWJvbHMuc2gKQEAgLTAsMCArMSw1MSBAQAorIyEvYmluL3NoCisjCisjIEdlbmVyYXRlIHBy aXZhdGVfc3ltYm9sc1tfamV0XS5hd2suCisjCisjIFVzYWdlOiBwcml2YXRlX3N5bWJvbHMuc2gg PHN5bV9wcmVmaXg+IDxzeW0+KgorIworIyA8c3ltX3ByZWZpeD4gaXMgdHlwaWNhbGx5ICIiIG9y ICJfIi4KKworc3ltX3ByZWZpeD0kMQorc2hpZnQKKworY2F0IDw8RU9GCisjIS91c3IvYmluL2Vu diBhd2sgLWYKKworQkVHSU4geworICBzeW1fcHJlZml4ID0gIiR7c3ltX3ByZWZpeH0iCisgIHNw bGl0KCJcXAorRU9GCisKK2ZvciBwdWJsaWNfc3ltIGluICIkQCIgOyBkbworICBjYXQgPDxFT0YK KyAgICAgICAgJHtzeW1fcHJlZml4fSR7cHVibGljX3N5bX0gXFwKK0VPRgorZG9uZQorCitjYXQg PDwiRU9GIgorICAgICAgICAiLCBleHBvcnRlZF9zeW1ib2xfbmFtZXMpCisgICMgU3RvcmUgZXhw b3J0ZWQgc3ltYm9sIG5hbWVzIGFzIGtleXMgaW4gZXhwb3J0ZWRfc3ltYm9scy4KKyAgZm9yIChp IGluIGV4cG9ydGVkX3N5bWJvbF9uYW1lcykgeworICAgIGV4cG9ydGVkX3N5bWJvbHNbZXhwb3J0 ZWRfc3ltYm9sX25hbWVzW2ldXSA9IDEKKyAgfQorfQorCisjIFByb2Nlc3MgJ25tIC1hIDxjX3Nv dXJjZS5vPicgb3V0cHV0LgorIworIyBIYW5kbGUgbGluZXMgbGlrZToKKyMgICAwMDAwMDAwMDAw MDAwMDA4IEQgb3B0X2p1bmsKKyMgICAwMDAwMDAwMDAwMDA3NTc0IFQgbWFsbG9jX2luaXRpYWxp emVkCisoTkYgPT0gMyAmJiAkMiB+IC9eW0FCQ0RHUlNUVlddJC8gJiYgISgkMyBpbiBleHBvcnRl ZF9zeW1ib2xzKSAmJiAkMyB+IC9eW0EtWmEtejAtOV9dKyQvKSB7CisgIHByaW50IHN1YnN0cigk MywgMStsZW5ndGgoc3ltX3ByZWZpeCksIGxlbmd0aCgkMyktbGVuZ3RoKHN5bV9wcmVmaXgpKQor fQorCisjIFByb2Nlc3MgJ2R1bXBiaW4gL1NZTUJPTFMgPGNfc291cmNlLm9iaj4nIG91dHB1dC4K KyMKKyMgSGFuZGxlIGxpbmVzIGxpa2U6CisjICAgMzUzIDAwMDA4MDk4IFNFQ1Q0ICBub3R5cGUg ICAgICAgRXh0ZXJuYWwgICAgIHwgb3B0X2p1bmsKKyMgICAzRjEgMDAwMDAwMDAgU0VDVDcgIG5v dHlwZSAoKSAgICBFeHRlcm5hbCAgICAgfCBtYWxsb2NfaW5pdGlhbGl6ZWQKKygkMyB+IC9eU0VD VFswLTldKy8gJiYgJChORi0yKSA9PSAiRXh0ZXJuYWwiICYmICEoJE5GIGluIGV4cG9ydGVkX3N5 bWJvbHMpKSB7CisgIHByaW50ICRORgorfQorRU9GCgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2Ut My4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9wcm5n LmggYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFs bG9jL2ludGVybmFsL3BybmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4x NDU0MmFhCi0tLSAvZGV2L251bGwKKysrIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxs b2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9wcm5nLmgKQEAgLTAsMCArMSwxNjgg QEAKKyNpZm5kZWYgSkVNQUxMT0NfSU5URVJOQUxfUFJOR19ICisjZGVmaW5lIEpFTUFMTE9DX0lO VEVSTkFMX1BSTkdfSAorCisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvYml0X3V0aWwuaCIK KworLyoKKyAqIFNpbXBsZSBsaW5lYXIgY29uZ3J1ZW50aWFsIHBzZXVkby1yYW5kb20gbnVtYmVy IGdlbmVyYXRvcjoKKyAqCisgKiAgIHBybmcoeSkgPSAoYSp4ICsgYykgJSBtCisgKgorICogd2hl cmUgdGhlIGZvbGxvd2luZyBjb25zdGFudHMgZW5zdXJlIG1heGltYWwgcGVyaW9kOgorICoKKyAq ICAgYSA9PSBPZGQgbnVtYmVyIChyZWxhdGl2ZWx5IHByaW1lIHRvIDJebiksIGFuZCAoYS0xKSBp cyBhIG11bHRpcGxlIG9mIDQuCisgKiAgIGMgPT0gT2RkIG51bWJlciAocmVsYXRpdmVseSBwcmlt ZSB0byAyXm4pLgorICogICBtID09IDJeMzIKKyAqCisgKiBTZWUgS251dGgncyBUQU9DUCAzcmQg RWQuLCBWb2wuIDIsIHBnLiAxNyBmb3IgZGV0YWlscyBvbiB0aGVzZSBjb25zdHJhaW50cy4KKyAq CisgKiBUaGlzIGNob2ljZSBvZiBtIGhhcyB0aGUgZGlzYWR2YW50YWdlIHRoYXQgdGhlIHF1YWxp dHkgb2YgdGhlIGJpdHMgaXMKKyAqIHByb3BvcnRpb25hbCB0byBiaXQgcG9zaXRpb24uICBGb3Ig ZXhhbXBsZSwgdGhlIGxvd2VzdCBiaXQgaGFzIGEgY3ljbGUgb2YgMiwKKyAqIHRoZSBuZXh0IGhh cyBhIGN5Y2xlIG9mIDQsIGV0Yy4gIEZvciB0aGlzIHJlYXNvbiwgd2UgcHJlZmVyIHRvIHVzZSB0 aGUgdXBwZXIKKyAqIGJpdHMuCisgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIElO VEVSTkFMIERFRklOSVRJT05TIC0tIElHTk9SRSAqLworLyoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8K KyNkZWZpbmUgUFJOR19BXzMyCVVJTlQzMl9DKDExMDM1MTUyNDEpCisjZGVmaW5lIFBSTkdfQ18z MglVSU5UMzJfQygxMjM0NykKKworI2RlZmluZSBQUk5HX0FfNjQJVUlOVDY0X0MoNjM2NDEzNjIy Mzg0Njc5MzAwNSkKKyNkZWZpbmUgUFJOR19DXzY0CVVJTlQ2NF9DKDE0NDI2OTUwNDA4ODg5NjM0 MDcpCisKK0pFTUFMTE9DX0FMV0FZU19JTkxJTkUgdWludDMyX3QKK3Bybmdfc3RhdGVfbmV4dF91 MzIodWludDMyX3Qgc3RhdGUpIHsKKwlyZXR1cm4gKHN0YXRlICogUFJOR19BXzMyKSArIFBSTkdf Q18zMjsKK30KKworSkVNQUxMT0NfQUxXQVlTX0lOTElORSB1aW50NjRfdAorcHJuZ19zdGF0ZV9u ZXh0X3U2NCh1aW50NjRfdCBzdGF0ZSkgeworCXJldHVybiAoc3RhdGUgKiBQUk5HX0FfNjQpICsg UFJOR19DXzY0OworfQorCitKRU1BTExPQ19BTFdBWVNfSU5MSU5FIHNpemVfdAorcHJuZ19zdGF0 ZV9uZXh0X3p1KHNpemVfdCBzdGF0ZSkgeworI2lmIExHX1NJWkVPRl9QVFIgPT0gMgorCXJldHVy biAoc3RhdGUgKiBQUk5HX0FfMzIpICsgUFJOR19DXzMyOworI2VsaWYgTEdfU0laRU9GX1BUUiA9 PSAzCisJcmV0dXJuIChzdGF0ZSAqIFBSTkdfQV82NCkgKyBQUk5HX0NfNjQ7CisjZWxzZQorI2Vy cm9yIFVuc3VwcG9ydGVkIHBvaW50ZXIgc2l6ZQorI2VuZGlmCit9CisKKy8qKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKiovCisvKiBCRUdJTiBQVUJMSUMgQVBJICovCisvKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq LworCisvKgorICogVGhlIHBybmdfbGdfcmFuZ2UgZnVuY3Rpb25zIGdpdmUgYSB1bmlmb3JtIGlu dCBpbiB0aGUgaGFsZi1vcGVuIHJhbmdlIFswLAorICogMioqbGdfcmFuZ2UpLgorICovCisKK0pF TUFMTE9DX0FMV0FZU19JTkxJTkUgdWludDMyX3QKK3BybmdfbGdfcmFuZ2VfdTMyKHVpbnQzMl90 ICpzdGF0ZSwgdW5zaWduZWQgbGdfcmFuZ2UpIHsKKwlhc3NlcnQobGdfcmFuZ2UgPiAwKTsKKwlh c3NlcnQobGdfcmFuZ2UgPD0gMzIpOworCisJKnN0YXRlID0gcHJuZ19zdGF0ZV9uZXh0X3UzMigq c3RhdGUpOworCXVpbnQzMl90IHJldCA9ICpzdGF0ZSA+PiAoMzIgLSBsZ19yYW5nZSk7CisKKwly ZXR1cm4gcmV0OworfQorCitKRU1BTExPQ19BTFdBWVNfSU5MSU5FIHVpbnQ2NF90Citwcm5nX2xn X3JhbmdlX3U2NCh1aW50NjRfdCAqc3RhdGUsIHVuc2lnbmVkIGxnX3JhbmdlKSB7CisJYXNzZXJ0 KGxnX3JhbmdlID4gMCk7CisJYXNzZXJ0KGxnX3JhbmdlIDw9IDY0KTsKKworCSpzdGF0ZSA9IHBy bmdfc3RhdGVfbmV4dF91NjQoKnN0YXRlKTsKKwl1aW50NjRfdCByZXQgPSAqc3RhdGUgPj4gKDY0 IC0gbGdfcmFuZ2UpOworCisJcmV0dXJuIHJldDsKK30KKworSkVNQUxMT0NfQUxXQVlTX0lOTElO RSBzaXplX3QKK3BybmdfbGdfcmFuZ2VfenUoc2l6ZV90ICpzdGF0ZSwgdW5zaWduZWQgbGdfcmFu Z2UpIHsKKwlhc3NlcnQobGdfcmFuZ2UgPiAwKTsKKwlhc3NlcnQobGdfcmFuZ2UgPD0gWlUoMSkg PDwgKDMgKyBMR19TSVpFT0ZfUFRSKSk7CisKKwkqc3RhdGUgPSBwcm5nX3N0YXRlX25leHRfenUo KnN0YXRlKTsKKwlzaXplX3QgcmV0ID0gKnN0YXRlID4+ICgoWlUoMSkgPDwgKDMgKyBMR19TSVpF T0ZfUFRSKSkgLSBsZ19yYW5nZSk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogVGhlIHBy bmdfcmFuZ2UgZnVuY3Rpb25zIGJlaGF2ZSBsaWtlIHRoZSBwcm5nX2xnX3JhbmdlLCBidXQgcmV0 dXJuIGEgcmVzdWx0CisgKiBpbiBbMCwgcmFuZ2UpIGluc3RlYWQgb2YgWzAsIDIqKmxnX3Jhbmdl KS4KKyAqLworCitKRU1BTExPQ19BTFdBWVNfSU5MSU5FIHVpbnQzMl90Citwcm5nX3JhbmdlX3Uz Mih1aW50MzJfdCAqc3RhdGUsIHVpbnQzMl90IHJhbmdlKSB7CisJYXNzZXJ0KHJhbmdlICE9IDAp OworCS8qCisJICogSWYgcmFuZ2Ugd2VyZSAxLCBsZ19yYW5nZSB3b3VsZCBiZSAwLCBzbyB0aGUg c2hpZnQgaW4KKwkgKiBwcm5nX2xnX3JhbmdlX3UzMiB3b3VsZCBiZSBhIHNoaWZ0IG9mIGEgMzIt Yml0IHZhcmlhYmxlIGJ5IDMyIGJpdHMsCisJICogd2hpY2ggaXMgVUIuICBKdXN0IGhhbmRsZSB0 aGlzIGNhc2UgYXMgYSBvbmUtb2ZmLgorCSAqLworCWlmIChyYW5nZSA9PSAxKSB7CisJCXJldHVy biAwOworCX0KKworCS8qIENvbXB1dGUgdGhlIGNlaWxpbmcgb2YgbGcocmFuZ2UpLiAqLworCXVu c2lnbmVkIGxnX3JhbmdlID0gZmZzX3UzMihwb3cyX2NlaWxfdTMyKHJhbmdlKSk7CisKKwkvKiBH ZW5lcmF0ZSBhIHJlc3VsdCBpbiBbMC4ucmFuZ2UpIHZpYSByZXBlYXRlZCB0cmlhbC4gKi8KKwl1 aW50MzJfdCByZXQ7CisJZG8geworCQlyZXQgPSBwcm5nX2xnX3JhbmdlX3UzMihzdGF0ZSwgbGdf cmFuZ2UpOworCX0gd2hpbGUgKHJldCA+PSByYW5nZSk7CisKKwlyZXR1cm4gcmV0OworfQorCitK RU1BTExPQ19BTFdBWVNfSU5MSU5FIHVpbnQ2NF90Citwcm5nX3JhbmdlX3U2NCh1aW50NjRfdCAq c3RhdGUsIHVpbnQ2NF90IHJhbmdlKSB7CisJYXNzZXJ0KHJhbmdlICE9IDApOworCisJLyogU2Vl IHRoZSBub3RlIGluIHBybmdfcmFuZ2VfdTMyLiAqLworCWlmIChyYW5nZSA9PSAxKSB7CisJCXJl dHVybiAwOworCX0KKworCS8qIENvbXB1dGUgdGhlIGNlaWxpbmcgb2YgbGcocmFuZ2UpLiAqLwor CXVuc2lnbmVkIGxnX3JhbmdlID0gZmZzX3U2NChwb3cyX2NlaWxfdTY0KHJhbmdlKSk7CisKKwkv KiBHZW5lcmF0ZSBhIHJlc3VsdCBpbiBbMC4ucmFuZ2UpIHZpYSByZXBlYXRlZCB0cmlhbC4gKi8K Kwl1aW50NjRfdCByZXQ7CisJZG8geworCQlyZXQgPSBwcm5nX2xnX3JhbmdlX3U2NChzdGF0ZSwg bGdfcmFuZ2UpOworCX0gd2hpbGUgKHJldCA+PSByYW5nZSk7CisKKwlyZXR1cm4gcmV0OworfQor CitKRU1BTExPQ19BTFdBWVNfSU5MSU5FIHNpemVfdAorcHJuZ19yYW5nZV96dShzaXplX3QgKnN0 YXRlLCBzaXplX3QgcmFuZ2UpIHsKKwlhc3NlcnQocmFuZ2UgIT0gMCk7CisKKwkvKiBTZWUgdGhl IG5vdGUgaW4gcHJuZ19yYW5nZV91MzIuICovCisJaWYgKHJhbmdlID09IDEpIHsKKwkJcmV0dXJu IDA7CisJfQorCisJLyogQ29tcHV0ZSB0aGUgY2VpbGluZyBvZiBsZyhyYW5nZSkuICovCisJdW5z aWduZWQgbGdfcmFuZ2UgPSBmZnNfdTY0KHBvdzJfY2VpbF91NjQocmFuZ2UpKTsKKworCS8qIEdl bmVyYXRlIGEgcmVzdWx0IGluIFswLi5yYW5nZSkgdmlhIHJlcGVhdGVkIHRyaWFsLiAqLworCXNp emVfdCByZXQ7CisJZG8geworCQlyZXQgPSBwcm5nX2xnX3JhbmdlX3p1KHN0YXRlLCBsZ19yYW5n ZSk7CisJfSB3aGlsZSAocmV0ID49IHJhbmdlKTsKKworCXJldHVybiByZXQ7Cit9CisKKyNlbmRp ZiAvKiBKRU1BTExPQ19JTlRFUk5BTF9QUk5HX0ggKi8KCmRpZmYgLS1naXQgYS8zODktZHMtYmFz ZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL3By b2ZfZGF0YS5oIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVk ZS9qZW1hbGxvYy9pbnRlcm5hbC9wcm9mX2RhdGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwLi40YzhlMjJjCi0tLSAvZGV2L251bGwKKysrIGIvMzg5LWRzLWJhc2UtMy4zLjAt YnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9wcm9mX2RhdGEu aApAQCAtMCwwICsxLDM3IEBACisjaWZuZGVmIEpFTUFMTE9DX0lOVEVSTkFMX1BST0ZfREFUQV9I CisjZGVmaW5lIEpFTUFMTE9DX0lOVEVSTkFMX1BST0ZfREFUQV9ICisKKyNpbmNsdWRlICJqZW1h bGxvYy9pbnRlcm5hbC9tdXRleC5oIgorCitleHRlcm4gbWFsbG9jX211dGV4X3QgYnQyZ2N0eF9t dHg7CitleHRlcm4gbWFsbG9jX211dGV4X3QgdGRhdGFzX210eDsKK2V4dGVybiBtYWxsb2NfbXV0 ZXhfdCBwcm9mX2R1bXBfbXR4OworCitleHRlcm4gbWFsbG9jX211dGV4X3QgKmdjdHhfbG9ja3M7 CitleHRlcm4gbWFsbG9jX211dGV4X3QgKnRkYXRhX2xvY2tzOworCitleHRlcm4gc2l6ZV90IHBy b2ZfdW5iaWFzZWRfc3pbUFJPRl9TQ19OU0laRVNdOworZXh0ZXJuIHNpemVfdCBwcm9mX3NoaWZ0 ZWRfdW5iaWFzZWRfY250W1BST0ZfU0NfTlNJWkVTXTsKKwordm9pZCBwcm9mX2J0X2hhc2goY29u c3Qgdm9pZCAqa2V5LCBzaXplX3Qgcl9oYXNoWzJdKTsKK2Jvb2wgcHJvZl9idF9rZXljb21wKGNv bnN0IHZvaWQgKmsxLCBjb25zdCB2b2lkICprMik7CisKK2Jvb2wgcHJvZl9kYXRhX2luaXQodHNk X3QgKnRzZCk7Citwcm9mX3RjdHhfdCAqcHJvZl9sb29rdXAodHNkX3QgKnRzZCwgcHJvZl9idF90 ICpidCk7CitjaGFyICpwcm9mX3RocmVhZF9uYW1lX2FsbG9jKHRzZF90ICp0c2QsIGNvbnN0IGNo YXIgKnRocmVhZF9uYW1lKTsKK2ludCBwcm9mX3RocmVhZF9uYW1lX3NldF9pbXBsKHRzZF90ICp0 c2QsIGNvbnN0IGNoYXIgKnRocmVhZF9uYW1lKTsKK3ZvaWQgcHJvZl91bmJpYXNfbWFwX2luaXQo KTsKK3ZvaWQgcHJvZl9kdW1wX2ltcGwodHNkX3QgKnRzZCwgd3JpdGVfY2JfdCAqcHJvZl9kdW1w X3dyaXRlLCB2b2lkICpjYm9wYXF1ZSwKKyAgICBwcm9mX3RkYXRhX3QgKnRkYXRhLCBib29sIGxl YWtjaGVjayk7Citwcm9mX3RkYXRhX3QgKiBwcm9mX3RkYXRhX2luaXRfaW1wbCh0c2RfdCAqdHNk LCB1aW50NjRfdCB0aHJfdWlkLAorICAgIHVpbnQ2NF90IHRocl9kaXNjcmltLCBjaGFyICp0aHJl YWRfbmFtZSwgYm9vbCBhY3RpdmUpOwordm9pZCBwcm9mX3RkYXRhX2RldGFjaCh0c2RfdCAqdHNk LCBwcm9mX3RkYXRhX3QgKnRkYXRhKTsKK3ZvaWQgcHJvZl9yZXNldCh0c2RfdCAqdHNkLCBzaXpl X3QgbGdfc2FtcGxlKTsKK3ZvaWQgcHJvZl90Y3R4X3RyeV9kZXN0cm95KHRzZF90ICp0c2QsIHBy b2ZfdGN0eF90ICp0Y3R4KTsKKworLyogVXNlZCBpbiB1bml0IHRlc3RzLiAqLworc2l6ZV90IHBy b2ZfdGRhdGFfY291bnQodm9pZCk7CitzaXplX3QgcHJvZl9idF9jb3VudCh2b2lkKTsKK3ZvaWQg cHJvZl9jbnRfYWxsKHByb2ZfY250X3QgKmNudF9hbGwpOworCisjZW5kaWYgLyogSkVNQUxMT0Nf SU5URVJOQUxfUFJPRl9EQVRBX0ggKi8KCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1i dWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL3Byb2ZfZXh0ZXJu cy5oIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1h bGxvYy9pbnRlcm5hbC9wcm9mX2V4dGVybnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwLi5iZGZmMTM0Ci0tLSAvZGV2L251bGwKKysrIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVp bGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9wcm9mX2V4dGVybnMu aApAQCAtMCwwICsxLDk1IEBACisjaWZuZGVmIEpFTUFMTE9DX0lOVEVSTkFMX1BST0ZfRVhURVJO U19ICisjZGVmaW5lIEpFTUFMTE9DX0lOVEVSTkFMX1BST0ZfRVhURVJOU19ICisKKyNpbmNsdWRl ICJqZW1hbGxvYy9pbnRlcm5hbC9tdXRleC5oIgorI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFs L3Byb2ZfaG9vay5oIgorCitleHRlcm4gYm9vbCBvcHRfcHJvZjsKK2V4dGVybiBib29sIG9wdF9w cm9mX2FjdGl2ZTsKK2V4dGVybiBib29sIG9wdF9wcm9mX3RocmVhZF9hY3RpdmVfaW5pdDsKK2V4 dGVybiBzaXplX3Qgb3B0X2xnX3Byb2Zfc2FtcGxlOyAgICAvKiBNZWFuIGJ5dGVzIGJldHdlZW4g c2FtcGxlcy4gKi8KK2V4dGVybiBzc2l6ZV90IG9wdF9sZ19wcm9mX2ludGVydmFsOyAvKiBsZyhw cm9mX2ludGVydmFsKS4gKi8KK2V4dGVybiBib29sIG9wdF9wcm9mX2dkdW1wOyAgICAgICAgICAv KiBIaWdoLXdhdGVyIG1lbW9yeSBkdW1waW5nLiAqLworZXh0ZXJuIGJvb2wgb3B0X3Byb2ZfZmlu YWw7ICAgICAgICAgIC8qIEZpbmFsIHByb2ZpbGUgZHVtcGluZy4gKi8KK2V4dGVybiBib29sIG9w dF9wcm9mX2xlYWs7ICAgICAgICAgICAvKiBEdW1wIGxlYWsgc3VtbWFyeSBhdCBleGl0LiAqLwor ZXh0ZXJuIGJvb2wgb3B0X3Byb2ZfbGVha19lcnJvcjsgICAgIC8qIEV4aXQgd2l0aCBlcnJvciBj b2RlIGlmIG1lbW9yeSBsZWFrZWQgKi8KK2V4dGVybiBib29sIG9wdF9wcm9mX2FjY3VtOyAgICAg ICAgICAvKiBSZXBvcnQgY3VtdWxhdGl2ZSBieXRlcy4gKi8KK2V4dGVybiBib29sIG9wdF9wcm9m X2xvZzsgICAgICAgICAgICAvKiBUdXJuIGxvZ2dpbmcgb24gYXQgYm9vdC4gKi8KK2V4dGVybiBj aGFyIG9wdF9wcm9mX3ByZWZpeFsKKyAgICAvKiBNaW5pbWl6ZSBtZW1vcnkgYmxvYXQgZm9yIG5v bi1wcm9mIGJ1aWxkcy4gKi8KKyNpZmRlZiBKRU1BTExPQ19QUk9GCisgICAgUEFUSF9NQVggKwor I2VuZGlmCisgICAgMV07CitleHRlcm4gYm9vbCBvcHRfcHJvZl91bmJpYXM7CisKKy8qIEZvciBy ZWNvcmRpbmcgcmVjZW50IGFsbG9jYXRpb25zICovCitleHRlcm4gc3NpemVfdCBvcHRfcHJvZl9y ZWNlbnRfYWxsb2NfbWF4OworCisvKiBXaGV0aGVyIHRvIHVzZSB0aHJlYWQgbmFtZSBwcm92aWRl ZCBieSB0aGUgc3lzdGVtIG9yIGJ5IG1hbGxjdGwuICovCitleHRlcm4gYm9vbCBvcHRfcHJvZl9z eXNfdGhyZWFkX25hbWU7CisKKy8qIFdoZXRoZXIgdG8gcmVjb3JkIHBlciBzaXplIGNsYXNzIGNv dW50cyBhbmQgcmVxdWVzdCBzaXplIHRvdGFscy4gKi8KK2V4dGVybiBib29sIG9wdF9wcm9mX3N0 YXRzOworCisvKiBBY2Nlc3NlZCB2aWEgcHJvZl9hY3RpdmVfW2dzXWV0e191bmxvY2tlZCx9KCku ICovCitleHRlcm4gYm9vbCBwcm9mX2FjdGl2ZV9zdGF0ZTsKKworLyogQWNjZXNzZWQgdmlhIHBy b2ZfZ2R1bXBfW2dzXWV0e191bmxvY2tlZCx9KCkuICovCitleHRlcm4gYm9vbCBwcm9mX2dkdW1w X3ZhbDsKKworLyogUHJvZmlsZSBkdW1wIGludGVydmFsLCBtZWFzdXJlZCBpbiBieXRlcyBhbGxv Y2F0ZWQuICovCitleHRlcm4gdWludDY0X3QgcHJvZl9pbnRlcnZhbDsKKworLyoKKyAqIEluaXRp YWxpemVkIGFzIG9wdF9sZ19wcm9mX3NhbXBsZSwgYW5kIHBvdGVudGlhbGx5IG1vZGlmaWVkIGR1 cmluZyBwcm9maWxpbmcKKyAqIHJlc2V0cy4KKyAqLworZXh0ZXJuIHNpemVfdCBsZ19wcm9mX3Nh bXBsZTsKKworZXh0ZXJuIGJvb2wgcHJvZl9ib290ZWQ7CisKK3ZvaWQgcHJvZl9iYWNrdHJhY2Vf aG9va19zZXQocHJvZl9iYWNrdHJhY2VfaG9va190IGhvb2spOworcHJvZl9iYWNrdHJhY2VfaG9v a190IHByb2ZfYmFja3RyYWNlX2hvb2tfZ2V0KCk7CisKK3ZvaWQgcHJvZl9kdW1wX2hvb2tfc2V0 KHByb2ZfZHVtcF9ob29rX3QgaG9vayk7Citwcm9mX2R1bXBfaG9va190IHByb2ZfZHVtcF9ob29r X2dldCgpOworCisvKiBGdW5jdGlvbnMgb25seSBhY2Nlc3NlZCBpbiBwcm9mX2lubGluZXMuaCAq LworcHJvZl90ZGF0YV90ICpwcm9mX3RkYXRhX2luaXQodHNkX3QgKnRzZCk7Citwcm9mX3RkYXRh X3QgKnByb2ZfdGRhdGFfcmVpbml0KHRzZF90ICp0c2QsIHByb2ZfdGRhdGFfdCAqdGRhdGEpOwor Cit2b2lkIHByb2ZfYWxsb2Nfcm9sbGJhY2sodHNkX3QgKnRzZCwgcHJvZl90Y3R4X3QgKnRjdHgp Owordm9pZCBwcm9mX21hbGxvY19zYW1wbGVfb2JqZWN0KHRzZF90ICp0c2QsIGNvbnN0IHZvaWQg KnB0ciwgc2l6ZV90IHNpemUsCisgICAgc2l6ZV90IHVzaXplLCBwcm9mX3RjdHhfdCAqdGN0eCk7 Cit2b2lkIHByb2ZfZnJlZV9zYW1wbGVkX29iamVjdCh0c2RfdCAqdHNkLCBzaXplX3QgdXNpemUs IHByb2ZfaW5mb190ICpwcm9mX2luZm8pOworcHJvZl90Y3R4X3QgKnByb2ZfdGN0eF9jcmVhdGUo dHNkX3QgKnRzZCk7Cit2b2lkIHByb2ZfaWR1bXAodHNkbl90ICp0c2RuKTsKK2Jvb2wgcHJvZl9t ZHVtcCh0c2RfdCAqdHNkLCBjb25zdCBjaGFyICpmaWxlbmFtZSk7Cit2b2lkIHByb2ZfZ2R1bXAo dHNkbl90ICp0c2RuKTsKKwordm9pZCBwcm9mX3RkYXRhX2NsZWFudXAodHNkX3QgKnRzZCk7Citi b29sIHByb2ZfYWN0aXZlX2dldCh0c2RuX3QgKnRzZG4pOworYm9vbCBwcm9mX2FjdGl2ZV9zZXQo dHNkbl90ICp0c2RuLCBib29sIGFjdGl2ZSk7Citjb25zdCBjaGFyICpwcm9mX3RocmVhZF9uYW1l X2dldCh0c2RfdCAqdHNkKTsKK2ludCBwcm9mX3RocmVhZF9uYW1lX3NldCh0c2RfdCAqdHNkLCBj b25zdCBjaGFyICp0aHJlYWRfbmFtZSk7Citib29sIHByb2ZfdGhyZWFkX2FjdGl2ZV9nZXQodHNk X3QgKnRzZCk7Citib29sIHByb2ZfdGhyZWFkX2FjdGl2ZV9zZXQodHNkX3QgKnRzZCwgYm9vbCBh Y3RpdmUpOworYm9vbCBwcm9mX3RocmVhZF9hY3RpdmVfaW5pdF9nZXQodHNkbl90ICp0c2RuKTsK K2Jvb2wgcHJvZl90aHJlYWRfYWN0aXZlX2luaXRfc2V0KHRzZG5fdCAqdHNkbiwgYm9vbCBhY3Rp dmVfaW5pdCk7Citib29sIHByb2ZfZ2R1bXBfZ2V0KHRzZG5fdCAqdHNkbik7Citib29sIHByb2Zf Z2R1bXBfc2V0KHRzZG5fdCAqdHNkbiwgYm9vbCBhY3RpdmUpOwordm9pZCBwcm9mX2Jvb3QwKHZv aWQpOwordm9pZCBwcm9mX2Jvb3QxKHZvaWQpOworYm9vbCBwcm9mX2Jvb3QyKHRzZF90ICp0c2Qs IGJhc2VfdCAqYmFzZSk7Cit2b2lkIHByb2ZfcHJlZm9yazAodHNkbl90ICp0c2RuKTsKK3ZvaWQg cHJvZl9wcmVmb3JrMSh0c2RuX3QgKnRzZG4pOwordm9pZCBwcm9mX3Bvc3Rmb3JrX3BhcmVudCh0 c2RuX3QgKnRzZG4pOwordm9pZCBwcm9mX3Bvc3Rmb3JrX2NoaWxkKHRzZG5fdCAqdHNkbik7CisK Ky8qIE9ubHkgYWNjZXNzZWQgYnkgdGhyZWFkIGV2ZW50LiAqLwordWludDY0X3QgcHJvZl9zYW1w bGVfbmV3X2V2ZW50X3dhaXQodHNkX3QgKnRzZCk7Cit1aW50NjRfdCBwcm9mX3NhbXBsZV9wb3N0 cG9uZWRfZXZlbnRfd2FpdCh0c2RfdCAqdHNkKTsKK3ZvaWQgcHJvZl9zYW1wbGVfZXZlbnRfaGFu ZGxlcih0c2RfdCAqdHNkLCB1aW50NjRfdCBlbGFwc2VkKTsKKworI2VuZGlmIC8qIEpFTUFMTE9D X0lOVEVSTkFMX1BST0ZfRVhURVJOU19IICovCgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4z LjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9wcm9mX2hv b2suaCBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVt YWxsb2MvaW50ZXJuYWwvcHJvZl9ob29rLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMC4uMTUwZDE5ZAotLS0gL2Rldi9udWxsCisrKyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxk L2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvcHJvZl9ob29rLmgKQEAg LTAsMCArMSwyMSBAQAorI2lmbmRlZiBKRU1BTExPQ19JTlRFUk5BTF9QUk9GX0hPT0tfSAorI2Rl ZmluZSBKRU1BTExPQ19JTlRFUk5BTF9QUk9GX0hPT0tfSAorCisvKgorICogVGhlIGhvb2tzIHR5 cGVzIG9mIHdoaWNoIGFyZSBkZWNsYXJlZCBpbiB0aGlzIGZpbGUgYXJlIGV4cGVyaW1lbnRhbCBh bmQKKyAqIHVuZG9jdW1lbnRlZCwgdGh1cyB0aGUgdHlwZWRlZnMgYXJlIGxvY2F0ZWQgaW4gYW4g J2ludGVybmFsJyBoZWFkZXIuCisgKi8KKworLyoKKyAqIEEgaG9vayB0byBtb2NrIG91dCBiYWNr dHJhY2UgZnVuY3Rpb25hbGl0eS4gIFRoaXMgY2FuIGJlIGhhbmR5LCBzaW5jZSBpdCdzCisgKiBv dGhlcndpc2UgZGlmZmljdWx0IHRvIGd1YXJhbnRlZSB0aGF0IHR3byBhbGxvY2F0aW9ucyBhcmUg cmVwb3J0ZWQgYXMgY29taW5nCisgKiBmcm9tIHRoZSBleGFjdCBzYW1lIHN0YWNrIHRyYWNlIGlu IHRoZSBwcmVzZW5jZSBvZiBhbiBvcHRpbWl6aW5nIGNvbXBpbGVyLgorICovCit0eXBlZGVmIHZv aWQgKCpwcm9mX2JhY2t0cmFjZV9ob29rX3QpKHZvaWQgKiosIHVuc2lnbmVkICosIHVuc2lnbmVk KTsKKworLyoKKyAqIEEgY2FsbGJhY2sgaG9vayB0aGF0IG5vdGlmaWVzIGFib3V0IHJlY2VudGx5 IGR1bXBlZCBoZWFwIHByb2ZpbGUuCisgKi8KK3R5cGVkZWYgdm9pZCAoKnByb2ZfZHVtcF9ob29r X3QpKGNvbnN0IGNoYXIgKmZpbGVuYW1lKTsKKworI2VuZGlmIC8qIEpFTUFMTE9DX0lOVEVSTkFM X1BST0ZfSE9PS19IICovCgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVt YWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9wcm9mX2lubGluZXMuaCBiLzM4 OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50 ZXJuYWwvcHJvZl9pbmxpbmVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u YThlN2U3ZgotLS0gL2Rldi9udWxsCisrKyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFs bG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvcHJvZl9pbmxpbmVzLmgKQEAgLTAs MCArMSwyNjEgQEAKKyNpZm5kZWYgSkVNQUxMT0NfSU5URVJOQUxfUFJPRl9JTkxJTkVTX0gKKyNk ZWZpbmUgSkVNQUxMT0NfSU5URVJOQUxfUFJPRl9JTkxJTkVTX0gKKworI2luY2x1ZGUgImplbWFs bG9jL2ludGVybmFsL3NhZmV0eV9jaGVjay5oIgorI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFs L3N6LmgiCisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvdGhyZWFkX2V2ZW50LmgiCisKK0pF TUFMTE9DX0FMV0FZU19JTkxJTkUgdm9pZAorcHJvZl9hY3RpdmVfYXNzZXJ0KCkgeworCWNhc3Nl cnQoY29uZmlnX3Byb2YpOworCS8qCisJICogSWYgb3B0X3Byb2YgaXMgb2ZmLCB0aGVuIHByb2Zf YWN0aXZlIG11c3QgYWx3YXlzIGJlIG9mZiwgcmVnYXJkbGVzcworCSAqIG9mIHdoZXRoZXIgcHJv Zl9hY3RpdmVfbXR4IGlzIGluIGVmZmVjdCBvciBub3QuCisJICovCisJYXNzZXJ0KG9wdF9wcm9m IHx8ICFwcm9mX2FjdGl2ZV9zdGF0ZSk7Cit9CisKK0pFTUFMTE9DX0FMV0FZU19JTkxJTkUgYm9v bAorcHJvZl9hY3RpdmVfZ2V0X3VubG9ja2VkKHZvaWQpIHsKKwlwcm9mX2FjdGl2ZV9hc3NlcnQo KTsKKwkvKgorCSAqIEV2ZW4gaWYgb3B0X3Byb2YgaXMgdHJ1ZSwgc2FtcGxpbmcgY2FuIGJlIHRl bXBvcmFyaWx5IGRpc2FibGVkIGJ5CisJICogc2V0dGluZyBwcm9mX2FjdGl2ZSB0byBmYWxzZS4g IE5vIGxvY2tpbmcgaXMgdXNlZCB3aGVuIHJlYWRpbmcKKwkgKiBwcm9mX2FjdGl2ZSBpbiB0aGUg ZmFzdCBwYXRoLCBzbyB0aGVyZSBhcmUgbm8gZ3VhcmFudGVlcyByZWdhcmRpbmcKKwkgKiBob3cg bG9uZyBpdCB3aWxsIHRha2UgZm9yIGFsbCB0aHJlYWRzIHRvIG5vdGljZSBzdGF0ZSBjaGFuZ2Vz LgorCSAqLworCXJldHVybiBwcm9mX2FjdGl2ZV9zdGF0ZTsKK30KKworSkVNQUxMT0NfQUxXQVlT X0lOTElORSBib29sCitwcm9mX2dkdW1wX2dldF91bmxvY2tlZCh2b2lkKSB7CisJLyoKKwkgKiBO byBsb2NraW5nIGlzIHVzZWQgd2hlbiByZWFkaW5nIHByb2ZfZ2R1bXBfdmFsIGluIHRoZSBmYXN0 IHBhdGgsIHNvCisJICogdGhlcmUgYXJlIG5vIGd1YXJhbnRlZXMgcmVnYXJkaW5nIGhvdyBsb25n IGl0IHdpbGwgdGFrZSBmb3IgYWxsCisJICogdGhyZWFkcyB0byBub3RpY2Ugc3RhdGUgY2hhbmdl cy4KKwkgKi8KKwlyZXR1cm4gcHJvZl9nZHVtcF92YWw7Cit9CisKK0pFTUFMTE9DX0FMV0FZU19J TkxJTkUgcHJvZl90ZGF0YV90ICoKK3Byb2ZfdGRhdGFfZ2V0KHRzZF90ICp0c2QsIGJvb2wgY3Jl YXRlKSB7CisJcHJvZl90ZGF0YV90ICp0ZGF0YTsKKworCWNhc3NlcnQoY29uZmlnX3Byb2YpOwor CisJdGRhdGEgPSB0c2RfcHJvZl90ZGF0YV9nZXQodHNkKTsKKwlpZiAoY3JlYXRlKSB7CisJCWFz c2VydCh0c2RfcmVlbnRyYW5jeV9sZXZlbF9nZXQodHNkKSA9PSAwKTsKKwkJaWYgKHVubGlrZWx5 KHRkYXRhID09IE5VTEwpKSB7CisJCQlpZiAodHNkX25vbWluYWwodHNkKSkgeworCQkJCXRkYXRh ID0gcHJvZl90ZGF0YV9pbml0KHRzZCk7CisJCQkJdHNkX3Byb2ZfdGRhdGFfc2V0KHRzZCwgdGRh dGEpOworCQkJfQorCQl9IGVsc2UgaWYgKHVubGlrZWx5KHRkYXRhLT5leHBpcmVkKSkgeworCQkJ dGRhdGEgPSBwcm9mX3RkYXRhX3JlaW5pdCh0c2QsIHRkYXRhKTsKKwkJCXRzZF9wcm9mX3RkYXRh X3NldCh0c2QsIHRkYXRhKTsKKwkJfQorCQlhc3NlcnQodGRhdGEgPT0gTlVMTCB8fCB0ZGF0YS0+ YXR0YWNoZWQpOworCX0KKworCXJldHVybiB0ZGF0YTsKK30KKworSkVNQUxMT0NfQUxXQVlTX0lO TElORSB2b2lkCitwcm9mX2luZm9fZ2V0KHRzZF90ICp0c2QsIGNvbnN0IHZvaWQgKnB0ciwgZW1h cF9hbGxvY19jdHhfdCAqYWxsb2NfY3R4LAorICAgIHByb2ZfaW5mb190ICpwcm9mX2luZm8pIHsK KwljYXNzZXJ0KGNvbmZpZ19wcm9mKTsKKwlhc3NlcnQocHRyICE9IE5VTEwpOworCWFzc2VydChw cm9mX2luZm8gIT0gTlVMTCk7CisKKwlhcmVuYV9wcm9mX2luZm9fZ2V0KHRzZCwgcHRyLCBhbGxv Y19jdHgsIHByb2ZfaW5mbywgZmFsc2UpOworfQorCitKRU1BTExPQ19BTFdBWVNfSU5MSU5FIHZv aWQKK3Byb2ZfaW5mb19nZXRfYW5kX3Jlc2V0X3JlY2VudCh0c2RfdCAqdHNkLCBjb25zdCB2b2lk ICpwdHIsCisgICAgZW1hcF9hbGxvY19jdHhfdCAqYWxsb2NfY3R4LCBwcm9mX2luZm9fdCAqcHJv Zl9pbmZvKSB7CisJY2Fzc2VydChjb25maWdfcHJvZik7CisJYXNzZXJ0KHB0ciAhPSBOVUxMKTsK Kwlhc3NlcnQocHJvZl9pbmZvICE9IE5VTEwpOworCisJYXJlbmFfcHJvZl9pbmZvX2dldCh0c2Qs IHB0ciwgYWxsb2NfY3R4LCBwcm9mX2luZm8sIHRydWUpOworfQorCitKRU1BTExPQ19BTFdBWVNf SU5MSU5FIHZvaWQKK3Byb2ZfdGN0eF9yZXNldCh0c2RfdCAqdHNkLCBjb25zdCB2b2lkICpwdHIs IGVtYXBfYWxsb2NfY3R4X3QgKmFsbG9jX2N0eCkgeworCWNhc3NlcnQoY29uZmlnX3Byb2YpOwor CWFzc2VydChwdHIgIT0gTlVMTCk7CisKKwlhcmVuYV9wcm9mX3RjdHhfcmVzZXQodHNkLCBwdHIs IGFsbG9jX2N0eCk7Cit9CisKK0pFTUFMTE9DX0FMV0FZU19JTkxJTkUgdm9pZAorcHJvZl90Y3R4 X3Jlc2V0X3NhbXBsZWQodHNkX3QgKnRzZCwgY29uc3Qgdm9pZCAqcHRyKSB7CisJY2Fzc2VydChj b25maWdfcHJvZik7CisJYXNzZXJ0KHB0ciAhPSBOVUxMKTsKKworCWFyZW5hX3Byb2ZfdGN0eF9y ZXNldF9zYW1wbGVkKHRzZCwgcHRyKTsKK30KKworSkVNQUxMT0NfQUxXQVlTX0lOTElORSB2b2lk Citwcm9mX2luZm9fc2V0KHRzZF90ICp0c2QsIGVkYXRhX3QgKmVkYXRhLCBwcm9mX3RjdHhfdCAq dGN0eCwgc2l6ZV90IHNpemUpIHsKKwljYXNzZXJ0KGNvbmZpZ19wcm9mKTsKKwlhc3NlcnQoZWRh dGEgIT0gTlVMTCk7CisJYXNzZXJ0KCh1aW50cHRyX3QpdGN0eCA+ICh1aW50cHRyX3QpMVUpOwor CisJYXJlbmFfcHJvZl9pbmZvX3NldCh0c2QsIGVkYXRhLCB0Y3R4LCBzaXplKTsKK30KKworSkVN QUxMT0NfQUxXQVlTX0lOTElORSBib29sCitwcm9mX3NhbXBsZV9zaG91bGRfc2tpcCh0c2RfdCAq dHNkLCBib29sIHNhbXBsZV9ldmVudCkgeworCWNhc3NlcnQoY29uZmlnX3Byb2YpOworCisJLyog RmFzdHBhdGg6IG5vIG5lZWQgdG8gbG9hZCB0ZGF0YSAqLworCWlmIChsaWtlbHkoIXNhbXBsZV9l dmVudCkpIHsKKwkJcmV0dXJuIHRydWU7CisJfQorCisJLyoKKwkgKiBzYW1wbGVfZXZlbnQgaXMg YWx3YXlzIG9idGFpbmVkIGZyb20gdGhlIHRocmVhZCBldmVudCBtb2R1bGUsIGFuZAorCSAqIHdo ZW5ldmVyIGl0J3MgdHJ1ZSwgaXQgbWVhbnMgdGhhdCB0aGUgdGhyZWFkIGV2ZW50IG1vZHVsZSBo YXMKKwkgKiBhbHJlYWR5IGNoZWNrZWQgdGhlIHJlZW50cmFuY3kgbGV2ZWwuCisJICovCisJYXNz ZXJ0KHRzZF9yZWVudHJhbmN5X2xldmVsX2dldCh0c2QpID09IDApOworCisJcHJvZl90ZGF0YV90 ICp0ZGF0YSA9IHByb2ZfdGRhdGFfZ2V0KHRzZCwgdHJ1ZSk7CisJaWYgKHVubGlrZWx5KHRkYXRh ID09IE5VTEwpKSB7CisJCXJldHVybiB0cnVlOworCX0KKworCXJldHVybiAhdGRhdGEtPmFjdGl2 ZTsKK30KKworSkVNQUxMT0NfQUxXQVlTX0lOTElORSBwcm9mX3RjdHhfdCAqCitwcm9mX2FsbG9j X3ByZXAodHNkX3QgKnRzZCwgYm9vbCBwcm9mX2FjdGl2ZSwgYm9vbCBzYW1wbGVfZXZlbnQpIHsK Kwlwcm9mX3RjdHhfdCAqcmV0OworCisJaWYgKCFwcm9mX2FjdGl2ZSB8fAorCSAgICBsaWtlbHko cHJvZl9zYW1wbGVfc2hvdWxkX3NraXAodHNkLCBzYW1wbGVfZXZlbnQpKSkgeworCQlyZXQgPSAo cHJvZl90Y3R4X3QgKikodWludHB0cl90KTFVOworCX0gZWxzZSB7CisJCXJldCA9IHByb2ZfdGN0 eF9jcmVhdGUodHNkKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitKRU1BTExPQ19BTFdBWVNf SU5MSU5FIHZvaWQKK3Byb2ZfbWFsbG9jKHRzZF90ICp0c2QsIGNvbnN0IHZvaWQgKnB0ciwgc2l6 ZV90IHNpemUsIHNpemVfdCB1c2l6ZSwKKyAgICBlbWFwX2FsbG9jX2N0eF90ICphbGxvY19jdHgs IHByb2ZfdGN0eF90ICp0Y3R4KSB7CisJY2Fzc2VydChjb25maWdfcHJvZik7CisJYXNzZXJ0KHB0 ciAhPSBOVUxMKTsKKwlhc3NlcnQodXNpemUgPT0gaXNhbGxvYyh0c2RfdHNkbih0c2QpLCBwdHIp KTsKKworCWlmICh1bmxpa2VseSgodWludHB0cl90KXRjdHggPiAodWludHB0cl90KTFVKSkgewor CQlwcm9mX21hbGxvY19zYW1wbGVfb2JqZWN0KHRzZCwgcHRyLCBzaXplLCB1c2l6ZSwgdGN0eCk7 CisJfSBlbHNlIHsKKwkJcHJvZl90Y3R4X3Jlc2V0KHRzZCwgcHRyLCBhbGxvY19jdHgpOworCX0K K30KKworSkVNQUxMT0NfQUxXQVlTX0lOTElORSB2b2lkCitwcm9mX3JlYWxsb2ModHNkX3QgKnRz ZCwgY29uc3Qgdm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IHVzaXplLAorICAgIHByb2Zf dGN0eF90ICp0Y3R4LCBib29sIHByb2ZfYWN0aXZlLCBjb25zdCB2b2lkICpvbGRfcHRyLCBzaXpl X3Qgb2xkX3VzaXplLAorICAgIHByb2ZfaW5mb190ICpvbGRfcHJvZl9pbmZvLCBib29sIHNhbXBs ZV9ldmVudCkgeworCWJvb2wgc2FtcGxlZCwgb2xkX3NhbXBsZWQsIG1vdmVkOworCisJY2Fzc2Vy dChjb25maWdfcHJvZik7CisJYXNzZXJ0KHB0ciAhPSBOVUxMIHx8ICh1aW50cHRyX3QpdGN0eCA8 PSAodWludHB0cl90KTFVKTsKKworCWlmIChwcm9mX2FjdGl2ZSAmJiBwdHIgIT0gTlVMTCkgewor CQlhc3NlcnQodXNpemUgPT0gaXNhbGxvYyh0c2RfdHNkbih0c2QpLCBwdHIpKTsKKwkJaWYgKHBy b2Zfc2FtcGxlX3Nob3VsZF9za2lwKHRzZCwgc2FtcGxlX2V2ZW50KSkgeworCQkJLyoKKwkJCSAq IERvbid0IHNhbXBsZS4gIFRoZSB1c2l6ZSBwYXNzZWQgdG8gcHJvZl9hbGxvY19wcmVwKCkKKwkJ CSAqIHdhcyBsYXJnZXIgdGhhbiB3aGF0IGFjdHVhbGx5IGdvdCBhbGxvY2F0ZWQsIHNvIGEKKwkJ CSAqIGJhY2t0cmFjZSB3YXMgY2FwdHVyZWQgZm9yIHRoaXMgYWxsb2NhdGlvbiwgZXZlbgorCQkJ ICogdGhvdWdoIGl0cyBhY3R1YWwgdXNpemUgd2FzIGluc3VmZmljaWVudCB0byBjcm9zcyB0aGUK KwkJCSAqIHNhbXBsZSB0aHJlc2hvbGQuCisJCQkgKi8KKwkJCXByb2ZfYWxsb2Nfcm9sbGJhY2so dHNkLCB0Y3R4KTsKKwkJCXRjdHggPSAocHJvZl90Y3R4X3QgKikodWludHB0cl90KTFVOworCQl9 CisJfQorCisJc2FtcGxlZCA9ICgodWludHB0cl90KXRjdHggPiAodWludHB0cl90KTFVKTsKKwlv bGRfc2FtcGxlZCA9ICgodWludHB0cl90KW9sZF9wcm9mX2luZm8tPmFsbG9jX3RjdHggPiAodWlu dHB0cl90KTFVKTsKKwltb3ZlZCA9IChwdHIgIT0gb2xkX3B0cik7CisKKwlpZiAodW5saWtlbHko c2FtcGxlZCkpIHsKKwkJcHJvZl9tYWxsb2Nfc2FtcGxlX29iamVjdCh0c2QsIHB0ciwgc2l6ZSwg dXNpemUsIHRjdHgpOworCX0gZWxzZSBpZiAobW92ZWQpIHsKKwkJcHJvZl90Y3R4X3Jlc2V0KHRz ZCwgcHRyLCBOVUxMKTsKKwl9IGVsc2UgaWYgKHVubGlrZWx5KG9sZF9zYW1wbGVkKSkgeworCQkv KgorCQkgKiBwcm9mX3RjdHhfcmVzZXQoKSB3b3VsZCB3b3JrIGZvciB0aGUgIW1vdmVkIGNhc2Ug YXMgd2VsbCwKKwkJICogYnV0IHByb2ZfdGN0eF9yZXNldF9zYW1wbGVkKCkgaXMgc2xpZ2h0bHkg Y2hlYXBlciwgYW5kIHRoZQorCQkgKiBwcm9wZXIgdGhpbmcgdG8gZG8gaGVyZSBpbiB0aGUgcHJl c2VuY2Ugb2YgZXhwbGljaXQKKwkJICoga25vd2xlZGdlIHJlOiBtb3ZlZCBzdGF0ZS4KKwkJICov CisJCXByb2ZfdGN0eF9yZXNldF9zYW1wbGVkKHRzZCwgcHRyKTsKKwl9IGVsc2UgeworCQlwcm9m X2luZm9fdCBwcm9mX2luZm87CisJCXByb2ZfaW5mb19nZXQodHNkLCBwdHIsIE5VTEwsICZwcm9m X2luZm8pOworCQlhc3NlcnQoKHVpbnRwdHJfdClwcm9mX2luZm8uYWxsb2NfdGN0eCA9PSAodWlu dHB0cl90KTFVKTsKKwl9CisKKwkvKgorCSAqIFRoZSBwcm9mX2ZyZWVfc2FtcGxlZF9vYmplY3Qo KSBjYWxsIG11c3QgY29tZSBhZnRlciB0aGUKKwkgKiBwcm9mX21hbGxvY19zYW1wbGVfb2JqZWN0 KCkgY2FsbCwgYmVjYXVzZSB0Y3R4IGFuZCBvbGRfdGN0eCBtYXkgYmUKKwkgKiB0aGUgc2FtZSwg aW4gd2hpY2ggY2FzZSByZXZlcnNpbmcgdGhlIGNhbGwgb3JkZXIgY291bGQgY2F1c2UgdGhlIHRj dHgKKwkgKiB0byBiZSBwcmVtYXR1cmVseSBkZXN0cm95ZWQgYXMgYSBzaWRlIGVmZmVjdCBvZiBt b21lbnRhcmlseSB6ZXJvZWQKKwkgKiBjb3VudGVycy4KKwkgKi8KKwlpZiAodW5saWtlbHkob2xk X3NhbXBsZWQpKSB7CisJCXByb2ZfZnJlZV9zYW1wbGVkX29iamVjdCh0c2QsIG9sZF91c2l6ZSwg b2xkX3Byb2ZfaW5mbyk7CisJfQorfQorCitKRU1BTExPQ19BTFdBWVNfSU5MSU5FIHNpemVfdAor cHJvZl9zYW1wbGVfYWxpZ24oc2l6ZV90IG9yaWdfYWxpZ24pIHsKKwkvKgorCSAqIEVuZm9yY2Ug cGFnZSBhbGlnbm1lbnQsIHNvIHRoYXQgc2FtcGxlZCBhbGxvY2F0aW9ucyBjYW4gYmUgaWRlbnRp ZmllZAorCSAqIHcvbyBtZXRhZGF0YSBsb29rdXAuCisJICovCisJYXNzZXJ0KG9wdF9wcm9mKTsK KwlyZXR1cm4gKG9wdF9jYWNoZV9vYmxpdmlvdXMgJiYgb3JpZ19hbGlnbiA8IFBBR0UpID8gUEFH RSA6CisJICAgIG9yaWdfYWxpZ247Cit9CisKK0pFTUFMTE9DX0FMV0FZU19JTkxJTkUgYm9vbAor cHJvZl9zYW1wbGVfYWxpZ25lZChjb25zdCB2b2lkICpwdHIpIHsKKwlyZXR1cm4gKCh1aW50cHRy X3QpcHRyICYgUEFHRV9NQVNLKSA9PSAwOworfQorCitKRU1BTExPQ19BTFdBWVNfSU5MSU5FIGJv b2wKK3Byb2Zfc2FtcGxlZCh0c2RfdCAqdHNkLCBjb25zdCB2b2lkICpwdHIpIHsKKwlwcm9mX2lu Zm9fdCBwcm9mX2luZm87CisJcHJvZl9pbmZvX2dldCh0c2QsIHB0ciwgTlVMTCwgJnByb2ZfaW5m byk7CisJYm9vbCBzYW1wbGVkID0gKHVpbnRwdHJfdClwcm9mX2luZm8uYWxsb2NfdGN0eCA+ICh1 aW50cHRyX3QpMVU7CisJaWYgKHNhbXBsZWQpIHsKKwkJYXNzZXJ0KHByb2Zfc2FtcGxlX2FsaWdu ZWQocHRyKSk7CisJfQorCXJldHVybiBzYW1wbGVkOworfQorCitKRU1BTExPQ19BTFdBWVNfSU5M SU5FIHZvaWQKK3Byb2ZfZnJlZSh0c2RfdCAqdHNkLCBjb25zdCB2b2lkICpwdHIsIHNpemVfdCB1 c2l6ZSwKKyAgICBlbWFwX2FsbG9jX2N0eF90ICphbGxvY19jdHgpIHsKKwlwcm9mX2luZm9fdCBw cm9mX2luZm87CisJcHJvZl9pbmZvX2dldF9hbmRfcmVzZXRfcmVjZW50KHRzZCwgcHRyLCBhbGxv Y19jdHgsICZwcm9mX2luZm8pOworCisJY2Fzc2VydChjb25maWdfcHJvZik7CisJYXNzZXJ0KHVz aXplID09IGlzYWxsb2ModHNkX3RzZG4odHNkKSwgcHRyKSk7CisKKwlpZiAodW5saWtlbHkoKHVp bnRwdHJfdClwcm9mX2luZm8uYWxsb2NfdGN0eCA+ICh1aW50cHRyX3QpMVUpKSB7CisJCWFzc2Vy dChwcm9mX3NhbXBsZV9hbGlnbmVkKHB0cikpOworCQlwcm9mX2ZyZWVfc2FtcGxlZF9vYmplY3Qo dHNkLCB1c2l6ZSwgJnByb2ZfaW5mbyk7CisJfQorfQorCisjZW5kaWYgLyogSkVNQUxMT0NfSU5U RVJOQUxfUFJPRl9JTkxJTkVTX0ggKi8KCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1i dWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL3Byb2ZfbG9nLmgg Yi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9j L2ludGVybmFsL3Byb2ZfbG9nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u Y2NiNTU3ZAotLS0gL2Rldi9udWxsCisrKyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFs bG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvcHJvZl9sb2cuaApAQCAtMCwwICsx LDIyIEBACisjaWZuZGVmIEpFTUFMTE9DX0lOVEVSTkFMX1BST0ZfTE9HX0gKKyNkZWZpbmUgSkVN QUxMT0NfSU5URVJOQUxfUFJPRl9MT0dfSAorCisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwv bXV0ZXguaCIKKworZXh0ZXJuIG1hbGxvY19tdXRleF90IGxvZ19tdHg7CisKK3ZvaWQgcHJvZl90 cnlfbG9nKHRzZF90ICp0c2QsIHNpemVfdCB1c2l6ZSwgcHJvZl9pbmZvX3QgKnByb2ZfaW5mbyk7 Citib29sIHByb2ZfbG9nX2luaXQodHNkX3QgKnRzZG4pOworCisvKiBVc2VkIGluIHVuaXQgdGVz dHMuICovCitzaXplX3QgcHJvZl9sb2dfYnRfY291bnQodm9pZCk7CitzaXplX3QgcHJvZl9sb2df YWxsb2NfY291bnQodm9pZCk7CitzaXplX3QgcHJvZl9sb2dfdGhyX2NvdW50KHZvaWQpOworYm9v bCBwcm9mX2xvZ19pc19sb2dnaW5nKHZvaWQpOworYm9vbCBwcm9mX2xvZ19yZXBfY2hlY2sodm9p ZCk7Cit2b2lkIHByb2ZfbG9nX2R1bW15X3NldChib29sIG5ld192YWx1ZSk7CisKK2Jvb2wgcHJv Zl9sb2dfc3RhcnQodHNkbl90ICp0c2RuLCBjb25zdCBjaGFyICpmaWxlbmFtZSk7Citib29sIHBy b2ZfbG9nX3N0b3AodHNkbl90ICp0c2RuKTsKKworI2VuZGlmIC8qIEpFTUFMTE9DX0lOVEVSTkFM X1BST0ZfTE9HX0ggKi8KCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1h bGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL3Byb2ZfcmVjZW50LmggYi8zODkt ZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVy bmFsL3Byb2ZfcmVjZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGY0 MTAyMwotLS0gL2Rldi9udWxsCisrKyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9j LTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvcHJvZl9yZWNlbnQuaApAQCAtMCwwICsx LDIzIEBACisjaWZuZGVmIEpFTUFMTE9DX0lOVEVSTkFMX1BST0ZfUkVDRU5UX0gKKyNkZWZpbmUg SkVNQUxMT0NfSU5URVJOQUxfUFJPRl9SRUNFTlRfSAorCitleHRlcm4gbWFsbG9jX211dGV4X3Qg cHJvZl9yZWNlbnRfYWxsb2NfbXR4OworZXh0ZXJuIG1hbGxvY19tdXRleF90IHByb2ZfcmVjZW50 X2R1bXBfbXR4OworCitib29sIHByb2ZfcmVjZW50X2FsbG9jX3ByZXBhcmUodHNkX3QgKnRzZCwg cHJvZl90Y3R4X3QgKnRjdHgpOwordm9pZCBwcm9mX3JlY2VudF9hbGxvYyh0c2RfdCAqdHNkLCBl ZGF0YV90ICplZGF0YSwgc2l6ZV90IHNpemUsIHNpemVfdCB1c2l6ZSk7Cit2b2lkIHByb2ZfcmVj ZW50X2FsbG9jX3Jlc2V0KHRzZF90ICp0c2QsIGVkYXRhX3QgKmVkYXRhKTsKK2Jvb2wgcHJvZl9y ZWNlbnRfaW5pdCgpOwordm9pZCBlZGF0YV9wcm9mX3JlY2VudF9hbGxvY19pbml0KGVkYXRhX3Qg KmVkYXRhKTsKKworLyogVXNlZCBpbiB1bml0IHRlc3RzLiAqLwordHlwZWRlZiBxbF9oZWFkKHBy b2ZfcmVjZW50X3QpIHByb2ZfcmVjZW50X2xpc3RfdDsKK2V4dGVybiBwcm9mX3JlY2VudF9saXN0 X3QgcHJvZl9yZWNlbnRfYWxsb2NfbGlzdDsKK2VkYXRhX3QgKnByb2ZfcmVjZW50X2FsbG9jX2Vk YXRhX2dldF9ub19sb2NrX3Rlc3QoY29uc3QgcHJvZl9yZWNlbnRfdCAqbm9kZSk7Citwcm9mX3Jl Y2VudF90ICplZGF0YV9wcm9mX3JlY2VudF9hbGxvY19nZXRfbm9fbG9ja190ZXN0KGNvbnN0IGVk YXRhX3QgKmVkYXRhKTsKKworc3NpemVfdCBwcm9mX3JlY2VudF9hbGxvY19tYXhfY3RsX3JlYWQo KTsKK3NzaXplX3QgcHJvZl9yZWNlbnRfYWxsb2NfbWF4X2N0bF93cml0ZSh0c2RfdCAqdHNkLCBz c2l6ZV90IG1heCk7Cit2b2lkIHByb2ZfcmVjZW50X2FsbG9jX2R1bXAodHNkX3QgKnRzZCwgd3Jp dGVfY2JfdCAqd3JpdGVfY2IsIHZvaWQgKmNib3BhcXVlKTsKKworI2VuZGlmIC8qIEpFTUFMTE9D X0lOVEVSTkFMX1BST0ZfUkVDRU5UX0ggKi8KCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMu MC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL3Byb2Zfc3Rh dHMuaCBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVt YWxsb2MvaW50ZXJuYWwvcHJvZl9zdGF0cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAuLjc5NTRlODIKLS0tIC9kZXYvbnVsbAorKysgYi8zODktZHMtYmFzZS0zLjMuMC1idWls ZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL3Byb2Zfc3RhdHMuaApA QCAtMCwwICsxLDE3IEBACisjaWZuZGVmIEpFTUFMTE9DX0lOVEVSTkFMX1BST0ZfU1RBVFNfSAor I2RlZmluZSBKRU1BTExPQ19JTlRFUk5BTF9QUk9GX1NUQVRTX0gKKwordHlwZWRlZiBzdHJ1Y3Qg cHJvZl9zdGF0c19zIHByb2Zfc3RhdHNfdDsKK3N0cnVjdCBwcm9mX3N0YXRzX3MgeworCXVpbnQ2 NF90IHJlcV9zdW07CisJdWludDY0X3QgY291bnQ7Cit9OworCitleHRlcm4gbWFsbG9jX211dGV4 X3QgcHJvZl9zdGF0c19tdHg7CisKK3ZvaWQgcHJvZl9zdGF0c19pbmModHNkX3QgKnRzZCwgc3pp bmRfdCBpbmQsIHNpemVfdCBzaXplKTsKK3ZvaWQgcHJvZl9zdGF0c19kZWModHNkX3QgKnRzZCwg c3ppbmRfdCBpbmQsIHNpemVfdCBzaXplKTsKK3ZvaWQgcHJvZl9zdGF0c19nZXRfbGl2ZSh0c2Rf dCAqdHNkLCBzemluZF90IGluZCwgcHJvZl9zdGF0c190ICpzdGF0cyk7Cit2b2lkIHByb2Zfc3Rh dHNfZ2V0X2FjY3VtKHRzZF90ICp0c2QsIHN6aW5kX3QgaW5kLCBwcm9mX3N0YXRzX3QgKnN0YXRz KTsKKworI2VuZGlmIC8qIEpFTUFMTE9DX0lOVEVSTkFMX1BST0ZfU1RBVFNfSCAqLwoKZGlmZiAt LWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVt YWxsb2MvaW50ZXJuYWwvcHJvZl9zdHJ1Y3RzLmggYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9q ZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL3Byb2Zfc3RydWN0cy5oCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkMjIxMTUKLS0tIC9kZXYvbnVsbAor KysgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFs bG9jL2ludGVybmFsL3Byb2Zfc3RydWN0cy5oCkBAIC0wLDAgKzEsMjIxIEBACisjaWZuZGVmIEpF TUFMTE9DX0lOVEVSTkFMX1BST0ZfU1RSVUNUU19ICisjZGVmaW5lIEpFTUFMTE9DX0lOVEVSTkFM X1BST0ZfU1RSVUNUU19ICisKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9ja2guaCIKKyNp bmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9lZGF0YS5oIgorI2luY2x1ZGUgImplbWFsbG9jL2lu dGVybmFsL211dGV4LmgiCisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvcHJuZy5oIgorI2lu Y2x1ZGUgImplbWFsbG9jL2ludGVybmFsL3JiLmgiCisKK3N0cnVjdCBwcm9mX2J0X3MgeworCS8q IEJhY2t0cmFjZSwgc3RvcmVkIGFzIGxlbiBwcm9ncmFtIGNvdW50ZXJzLiAqLworCXZvaWQJCSoq dmVjOworCXVuc2lnbmVkCWxlbjsKK307CisKKyNpZmRlZiBKRU1BTExPQ19QUk9GX0xJQkdDQwor LyogRGF0YSBzdHJ1Y3R1cmUgcGFzc2VkIHRvIGxpYmdjYyBfVW53aW5kX0JhY2t0cmFjZSgpIGNh bGxiYWNrIGZ1bmN0aW9ucy4gKi8KK3R5cGVkZWYgc3RydWN0IHsKKwl2b2lkIAkJKip2ZWM7CisJ dW5zaWduZWQJKmxlbjsKKwl1bnNpZ25lZAltYXg7Cit9IHByb2ZfdW53aW5kX2RhdGFfdDsKKyNl bmRpZgorCitzdHJ1Y3QgcHJvZl9jbnRfcyB7CisJLyogUHJvZmlsaW5nIGNvdW50ZXJzLiAqLwor CXVpbnQ2NF90CWN1cm9ianM7CisJdWludDY0X3QJY3Vyb2Jqc19zaGlmdGVkX3VuYmlhc2VkOwor CXVpbnQ2NF90CWN1cmJ5dGVzOworCXVpbnQ2NF90CWN1cmJ5dGVzX3VuYmlhc2VkOworCXVpbnQ2 NF90CWFjY3Vtb2JqczsKKwl1aW50NjRfdAlhY2N1bW9ianNfc2hpZnRlZF91bmJpYXNlZDsKKwl1 aW50NjRfdAlhY2N1bWJ5dGVzOworCXVpbnQ2NF90CWFjY3VtYnl0ZXNfdW5iaWFzZWQ7Cit9Owor Cit0eXBlZGVmIGVudW0geworCXByb2ZfdGN0eF9zdGF0ZV9pbml0aWFsaXppbmcsCisJcHJvZl90 Y3R4X3N0YXRlX25vbWluYWwsCisJcHJvZl90Y3R4X3N0YXRlX2R1bXBpbmcsCisJcHJvZl90Y3R4 X3N0YXRlX3B1cmdhdG9yeSAvKiBEdW1wZXIgbXVzdCBmaW5pc2ggZGVzdHJveWluZy4gKi8KK30g cHJvZl90Y3R4X3N0YXRlX3Q7CisKK3N0cnVjdCBwcm9mX3RjdHhfcyB7CisJLyogVGhyZWFkIGRh dGEgZm9yIHRocmVhZCB0aGF0IHBlcmZvcm1lZCB0aGUgYWxsb2NhdGlvbi4gKi8KKwlwcm9mX3Rk YXRhX3QJCSp0ZGF0YTsKKworCS8qCisJICogQ29weSBvZiB0ZGF0YS0+dGhyX3t1aWQsZGlzY3Jp bX0sIG5lY2Vzc2FyeSBiZWNhdXNlIHRkYXRhIG1heSBiZQorCSAqIGRlZnVuY3QgZHVyaW5nIHRl YXJkb3duLgorCSAqLworCXVpbnQ2NF90CQl0aHJfdWlkOworCXVpbnQ2NF90CQl0aHJfZGlzY3Jp bTsKKworCS8qCisJICogUmVmZXJlbmNlIGNvdW50IG9mIGhvdyBtYW55IHRpbWVzIHRoaXMgdGN0 eCBvYmplY3QgaXMgcmVmZXJlbmNlZCBpbgorCSAqIHJlY2VudCBhbGxvY2F0aW9uIC8gZGVhbGxv Y2F0aW9uIHJlY29yZHMsIHByb3RlY3RlZCBieSB0ZGF0YS0+bG9jay4KKwkgKi8KKwl1aW50NjRf dAkJcmVjZW50X2NvdW50OworCisJLyogUHJvZmlsaW5nIGNvdW50ZXJzLCBwcm90ZWN0ZWQgYnkg dGRhdGEtPmxvY2suICovCisJcHJvZl9jbnRfdAkJY250czsKKworCS8qIEFzc29jaWF0ZWQgZ2xv YmFsIGNvbnRleHQuICovCisJcHJvZl9nY3R4X3QJCSpnY3R4OworCisJLyoKKwkgKiBVSUQgdGhh dCBkaXN0aW5ndWlzaGVzIG11bHRpcGxlIHRjdHgncyBjcmVhdGVkIGJ5IHRoZSBzYW1lIHRocmVh ZCwKKwkgKiBidXQgY29leGlzdGluZyBpbiBnY3R4LT50Y3R4cy4gIFRoZXJlIGFyZSB0d28gd2F5 cyB0aGF0IHN1Y2gKKwkgKiBjb2V4aXN0ZW5jZSBjYW4gb2NjdXI6CisJICogLSBBIGR1bXBlciB0 aHJlYWQgY2FuIGNhdXNlIGEgdGN0eCB0byBiZSByZXRhaW5lZCBpbiB0aGUgcHVyZ2F0b3J5CisJ ICogICBzdGF0ZS4KKwkgKiAtIEFsdGhvdWdoIGEgc2luZ2xlICJwcm9kdWNlciIgdGhyZWFkIG11 c3QgY3JlYXRlIGFsbCB0Y3R4J3Mgd2hpY2gKKwkgKiAgIHNoYXJlIHRoZSBzYW1lIHRocl91aWQs IG11bHRpcGxlICJjb25zdW1lcnMiIGNhbiBlYWNoIGNvbmN1cnJlbnRseQorCSAqICAgZXhlY3V0 ZSBwb3J0aW9ucyBvZiBwcm9mX3RjdHhfZGVzdHJveSgpLiAgcHJvZl90Y3R4X2Rlc3Ryb3koKSBv bmx5CisJICogICBnZXRzIGNhbGxlZCBvbmNlIGVhY2ggdGltZSBjbnRzLmN1cntvYmpzLGJ5dGVz fSBkcm9wIHRvIDAsIGJ1dCB0aGlzCisJICogICB0aHJlc2hvbGQgY2FuIGJlIGhpdCBhZ2FpbiBi ZWZvcmUgdGhlIGZpcnN0IGNvbnN1bWVyIGZpbmlzaGVzCisJICogICBleGVjdXRpbmcgcHJvZl90 Y3R4X2Rlc3Ryb3koKS4KKwkgKi8KKwl1aW50NjRfdAkJdGN0eF91aWQ7CisKKwkvKiBMaW5rYWdl IGludG8gZ2N0eCdzIHRjdHhzLiAqLworCXJiX25vZGUocHJvZl90Y3R4X3QpCXRjdHhfbGluazsK KworCS8qCisJICogVHJ1ZSBkdXJpbmcgcHJvZl9hbGxvY19wcmVwKCkuLnByb2ZfbWFsbG9jX3Nh bXBsZV9vYmplY3QoKSwgcHJldmVudHMKKwkgKiBzYW1wbGUgdnMgZGVzdHJveSByYWNlLgorCSAq LworCWJvb2wJCQlwcmVwYXJlZDsKKworCS8qIEN1cnJlbnQgZHVtcC1yZWxhdGVkIHN0YXRlLCBw cm90ZWN0ZWQgYnkgZ2N0eC0+bG9jay4gKi8KKwlwcm9mX3RjdHhfc3RhdGVfdAlzdGF0ZTsKKwor CS8qCisJICogQ29weSBvZiBjbnRzIHNuYXBzaG90dGVkIGR1cmluZyBlYXJseSBkdW1wIHBoYXNl LCBwcm90ZWN0ZWQgYnkKKwkgKiBkdW1wX210eC4KKwkgKi8KKwlwcm9mX2NudF90CQlkdW1wX2Nu dHM7Cit9OwordHlwZWRlZiByYl90cmVlKHByb2ZfdGN0eF90KSBwcm9mX3RjdHhfdHJlZV90Owor CitzdHJ1Y3QgcHJvZl9pbmZvX3MgeworCS8qIFRpbWUgd2hlbiB0aGUgYWxsb2NhdGlvbiB3YXMg bWFkZS4gKi8KKwluc3RpbWVfdAkJYWxsb2NfdGltZTsKKwkvKiBQb2ludHMgdG8gdGhlIHByb2Zf dGN0eF90IGNvcnJlc3BvbmRpbmcgdG8gdGhlIGFsbG9jYXRpb24uICovCisJcHJvZl90Y3R4X3QJ CSphbGxvY190Y3R4OworCS8qIEFsbG9jYXRpb24gcmVxdWVzdCBzaXplLiAqLworCXNpemVfdAkJ CWFsbG9jX3NpemU7Cit9OworCitzdHJ1Y3QgcHJvZl9nY3R4X3MgeworCS8qIFByb3RlY3RzIG5s aW1ibywgY250X3N1bW1lZCwgYW5kIHRjdHhzLiAqLworCW1hbGxvY19tdXRleF90CQkqbG9jazsK KworCS8qCisJICogTnVtYmVyIG9mIHRocmVhZHMgdGhhdCBjdXJyZW50bHkgY2F1c2UgdGhpcyBn Y3R4IHRvIGJlIGluIGEgc3RhdGUgb2YKKwkgKiBsaW1ibyBkdWUgdG8gb25lIG9mOgorCSAqICAg LSBJbml0aWFsaXppbmcgdGhpcyBnY3R4LgorCSAqICAgLSBJbml0aWFsaXppbmcgcGVyIHRocmVh ZCBjb3VudGVycyBhc3NvY2lhdGVkIHdpdGggdGhpcyBnY3R4LgorCSAqICAgLSBQcmVwYXJpbmcg dG8gZGVzdHJveSB0aGlzIGdjdHguCisJICogICAtIER1bXBpbmcgYSBoZWFwIHByb2ZpbGUgdGhh dCBpbmNsdWRlcyB0aGlzIGdjdHguCisJICogbmxpbWJvIG11c3QgYmUgMSAoc2luZ2xlIGRlc3Ry b3llcikgaW4gb3JkZXIgdG8gc2FmZWx5IGRlc3Ryb3kgdGhlCisJICogZ2N0eC4KKwkgKi8KKwl1 bnNpZ25lZAkJbmxpbWJvOworCisJLyoKKwkgKiBUcmVlIG9mIHByb2ZpbGUgY291bnRlcnMsIG9u ZSBmb3IgZWFjaCB0aHJlYWQgdGhhdCBoYXMgYWxsb2NhdGVkIGluCisJICogdGhpcyBjb250ZXh0 LgorCSAqLworCXByb2ZfdGN0eF90cmVlX3QJdGN0eHM7CisKKwkvKiBMaW5rYWdlIGZvciB0cmVl IG9mIGNvbnRleHRzIHRvIGJlIGR1bXBlZC4gKi8KKwlyYl9ub2RlKHByb2ZfZ2N0eF90KQlkdW1w X2xpbms7CisKKwkvKiBUZW1wb3Jhcnkgc3RvcmFnZSBmb3Igc3VtbWF0aW9uIGR1cmluZyBkdW1w LiAqLworCXByb2ZfY250X3QJCWNudF9zdW1tZWQ7CisKKwkvKiBBc3NvY2lhdGVkIGJhY2t0cmFj ZS4gKi8KKwlwcm9mX2J0X3QJCWJ0OworCisJLyogQmFja3RyYWNlIHZlY3RvciwgdmFyaWFibGUg c2l6ZSwgcmVmZXJyZWQgdG8gYnkgYnQuICovCisJdm9pZAkJCSp2ZWNbMV07Cit9OwordHlwZWRl ZiByYl90cmVlKHByb2ZfZ2N0eF90KSBwcm9mX2djdHhfdHJlZV90OworCitzdHJ1Y3QgcHJvZl90 ZGF0YV9zIHsKKwltYWxsb2NfbXV0ZXhfdAkJKmxvY2s7CisKKwkvKiBNb25vdG9uaWNhbGx5IGlu Y3JlYXNpbmcgdW5pcXVlIHRocmVhZCBpZGVudGlmaWVyLiAqLworCXVpbnQ2NF90CQl0aHJfdWlk OworCisJLyoKKwkgKiBNb25vdG9uaWNhbGx5IGluY3JlYXNpbmcgZGlzY3JpbWluYXRvciBhbW9u ZyB0ZGF0YSBzdHJ1Y3R1cmVzCisJICogYXNzb2NpYXRlZCB3aXRoIHRoZSBzYW1lIHRocl91aWQu CisJICovCisJdWludDY0X3QJCXRocl9kaXNjcmltOworCisJLyogSW5jbHVkZWQgaW4gaGVhcCBw cm9maWxlIGR1bXBzIGlmIG5vbi1OVUxMLiAqLworCWNoYXIJCQkqdGhyZWFkX25hbWU7CisKKwli b29sCQkJYXR0YWNoZWQ7CisJYm9vbAkJCWV4cGlyZWQ7CisKKwlyYl9ub2RlKHByb2ZfdGRhdGFf dCkJdGRhdGFfbGluazsKKworCS8qCisJICogQ291bnRlciB1c2VkIHRvIGluaXRpYWxpemUgcHJv Zl90Y3R4X3QncyB0Y3R4X3VpZC4gIE5vIGxvY2tpbmcgaXMKKwkgKiBuZWNlc3Nhcnkgd2hlbiBp bmNyZW1lbnRpbmcgdGhpcyBmaWVsZCwgYmVjYXVzZSBvbmx5IG9uZSB0aHJlYWQgZXZlcgorCSAq IGRvZXMgc28uCisJICovCisJdWludDY0X3QJCXRjdHhfdWlkX25leHQ7CisKKwkvKgorCSAqIEhh c2ggb2YgKHByb2ZfYnRfdCAqKS0tPihwcm9mX3RjdHhfdCAqKS4gIEVhY2ggdGhyZWFkIHRyYWNr cworCSAqIGJhY2t0cmFjZXMgZm9yIHdoaWNoIGl0IGhhcyBub24temVybyBhbGxvY2F0aW9uL2Rl YWxsb2NhdGlvbiBjb3VudGVycworCSAqIGFzc29jaWF0ZWQgd2l0aCB0aHJlYWQtc3BlY2lmaWMg cHJvZl90Y3R4X3Qgb2JqZWN0cy4gIE90aGVyIHRocmVhZHMKKwkgKiBtYXkgd3JpdGUgdG8gcHJv Zl90Y3R4X3QgY29udGVudHMgd2hlbiBmcmVlaW5nIGFzc29jaWF0ZWQgb2JqZWN0cy4KKwkgKi8K Kwlja2hfdAkJCWJ0MnRjdHg7CisKKwkvKiBTdGF0ZSB1c2VkIHRvIGF2b2lkIGR1bXBpbmcgd2hp bGUgb3BlcmF0aW5nIG9uIHByb2YgaW50ZXJuYWxzLiAqLworCWJvb2wJCQllbnE7CisJYm9vbAkJ CWVucV9pZHVtcDsKKwlib29sCQkJZW5xX2dkdW1wOworCisJLyoKKwkgKiBTZXQgdG8gdHJ1ZSBk dXJpbmcgYW4gZWFybHkgZHVtcCBwaGFzZSBmb3IgdGRhdGEncyB3aGljaCBhcmUKKwkgKiBjdXJy ZW50bHkgYmVpbmcgZHVtcGVkLiAgTmV3IHRocmVhZHMnIHRkYXRhJ3MgaGF2ZSB0aGlzIGluaXRp YWxpemVkCisJICogdG8gZmFsc2Ugc28gdGhhdCB0aGV5IGFyZW4ndCBhY2NpZGVudGFsbHkgaW5j bHVkZWQgaW4gbGF0ZXIgZHVtcAorCSAqIHBoYXNlcy4KKwkgKi8KKwlib29sCQkJZHVtcGluZzsK KworCS8qCisJICogVHJ1ZSBpZiBwcm9maWxpbmcgaXMgYWN0aXZlIGZvciB0aGlzIHRkYXRhJ3Mg dGhyZWFkCisJICogKHRocmVhZC5wcm9mLmFjdGl2ZSBtYWxsY3RsKS4KKwkgKi8KKwlib29sCQkJ YWN0aXZlOworCisJLyogVGVtcG9yYXJ5IHN0b3JhZ2UgZm9yIHN1bW1hdGlvbiBkdXJpbmcgZHVt cC4gKi8KKwlwcm9mX2NudF90CQljbnRfc3VtbWVkOworCisJLyogQmFja3RyYWNlIHZlY3Rvciwg dXNlZCBmb3IgY2FsbHMgdG8gcHJvZl9iYWNrdHJhY2UoKS4gKi8KKwl2b2lkCQkJKnZlY1tQUk9G X0JUX01BWF07Cit9OwordHlwZWRlZiByYl90cmVlKHByb2ZfdGRhdGFfdCkgcHJvZl90ZGF0YV90 cmVlX3Q7CisKK3N0cnVjdCBwcm9mX3JlY2VudF9zIHsKKwluc3RpbWVfdCBhbGxvY190aW1lOwor CW5zdGltZV90IGRhbGxvY190aW1lOworCisJcWxfZWxtKHByb2ZfcmVjZW50X3QpIGxpbms7CisJ c2l6ZV90IHNpemU7CisJc2l6ZV90IHVzaXplOworCWF0b21pY19wX3QgYWxsb2NfZWRhdGE7IC8q IE5VTEwgbWVhbnMgYWxsb2NhdGlvbiBoYXMgYmVlbiBmcmVlZC4gKi8KKwlwcm9mX3RjdHhfdCAq YWxsb2NfdGN0eDsKKwlwcm9mX3RjdHhfdCAqZGFsbG9jX3RjdHg7Cit9OworCisjZW5kaWYgLyog SkVNQUxMT0NfSU5URVJOQUxfUFJPRl9TVFJVQ1RTX0ggKi8KCmRpZmYgLS1naXQgYS8zODktZHMt YmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFs L3Byb2Zfc3lzLmggYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNs dWRlL2plbWFsbG9jL2ludGVybmFsL3Byb2Zfc3lzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMC4uM2QyNWE0MgotLS0gL2Rldi9udWxsCisrKyBiLzM4OS1kcy1iYXNlLTMuMy4w LWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvcHJvZl9zeXMu aApAQCAtMCwwICsxLDMwIEBACisjaWZuZGVmIEpFTUFMTE9DX0lOVEVSTkFMX1BST0ZfU1lTX0gK KyNkZWZpbmUgSkVNQUxMT0NfSU5URVJOQUxfUFJPRl9TWVNfSAorCitleHRlcm4gbWFsbG9jX211 dGV4X3QgcHJvZl9kdW1wX2ZpbGVuYW1lX210eDsKK2V4dGVybiBiYXNlX3QgKnByb2ZfYmFzZTsK Kwordm9pZCBidF9pbml0KHByb2ZfYnRfdCAqYnQsIHZvaWQgKip2ZWMpOwordm9pZCBwcm9mX2Jh Y2t0cmFjZSh0c2RfdCAqdHNkLCBwcm9mX2J0X3QgKmJ0KTsKK3ZvaWQgcHJvZl9ob29rc19pbml0 KCk7Cit2b2lkIHByb2ZfdW53aW5kX2luaXQoKTsKK3ZvaWQgcHJvZl9zeXNfdGhyZWFkX25hbWVf ZmV0Y2godHNkX3QgKnRzZCk7CitpbnQgcHJvZl9nZXRwaWQodm9pZCk7Cit2b2lkIHByb2ZfZ2V0 X2RlZmF1bHRfZmlsZW5hbWUodHNkbl90ICp0c2RuLCBjaGFyICpmaWxlbmFtZSwgdWludDY0X3Qg aW5kKTsKK2Jvb2wgcHJvZl9wcmVmaXhfc2V0KHRzZG5fdCAqdHNkbiwgY29uc3QgY2hhciAqcHJl Zml4KTsKK3ZvaWQgcHJvZl9mZHVtcF9pbXBsKHRzZF90ICp0c2QpOwordm9pZCBwcm9mX2lkdW1w X2ltcGwodHNkX3QgKnRzZCk7Citib29sIHByb2ZfbWR1bXBfaW1wbCh0c2RfdCAqdHNkLCBjb25z dCBjaGFyICpmaWxlbmFtZSk7Cit2b2lkIHByb2ZfZ2R1bXBfaW1wbCh0c2RfdCAqdHNkKTsKKwor LyogVXNlZCBpbiB1bml0IHRlc3RzLiAqLwordHlwZWRlZiBpbnQgKHByb2Zfc3lzX3RocmVhZF9u YW1lX3JlYWRfdCkoY2hhciAqYnVmLCBzaXplX3QgbGltaXQpOworZXh0ZXJuIHByb2Zfc3lzX3Ro cmVhZF9uYW1lX3JlYWRfdCAqSkVUX01VVEFCTEUgcHJvZl9zeXNfdGhyZWFkX25hbWVfcmVhZDsK K3R5cGVkZWYgaW50IChwcm9mX2R1bXBfb3Blbl9maWxlX3QpKGNvbnN0IGNoYXIgKiwgaW50KTsK K2V4dGVybiBwcm9mX2R1bXBfb3Blbl9maWxlX3QgKkpFVF9NVVRBQkxFIHByb2ZfZHVtcF9vcGVu X2ZpbGU7Cit0eXBlZGVmIHNzaXplX3QgKHByb2ZfZHVtcF93cml0ZV9maWxlX3QpKGludCwgY29u c3Qgdm9pZCAqLCBzaXplX3QpOworZXh0ZXJuIHByb2ZfZHVtcF93cml0ZV9maWxlX3QgKkpFVF9N VVRBQkxFIHByb2ZfZHVtcF93cml0ZV9maWxlOwordHlwZWRlZiBpbnQgKHByb2ZfZHVtcF9vcGVu X21hcHNfdCkoKTsKK2V4dGVybiBwcm9mX2R1bXBfb3Blbl9tYXBzX3QgKkpFVF9NVVRBQkxFIHBy b2ZfZHVtcF9vcGVuX21hcHM7CisKKyNlbmRpZiAvKiBKRU1BTExPQ19JTlRFUk5BTF9QUk9GX1NZ U19IICovCgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4z LjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9wcm9mX3R5cGVzLmggYi8zODktZHMtYmFzZS0z LjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL3Byb2Zf dHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTYyODY1Ci0tLSAv ZGV2L251bGwKKysrIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5j bHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9wcm9mX3R5cGVzLmgKQEAgLTAsMCArMSw3NSBAQAorI2lm bmRlZiBKRU1BTExPQ19JTlRFUk5BTF9QUk9GX1RZUEVTX0gKKyNkZWZpbmUgSkVNQUxMT0NfSU5U RVJOQUxfUFJPRl9UWVBFU19ICisKK3R5cGVkZWYgc3RydWN0IHByb2ZfYnRfcyBwcm9mX2J0X3Q7 Cit0eXBlZGVmIHN0cnVjdCBwcm9mX2NudF9zIHByb2ZfY250X3Q7Cit0eXBlZGVmIHN0cnVjdCBw cm9mX3RjdHhfcyBwcm9mX3RjdHhfdDsKK3R5cGVkZWYgc3RydWN0IHByb2ZfaW5mb19zIHByb2Zf aW5mb190OwordHlwZWRlZiBzdHJ1Y3QgcHJvZl9nY3R4X3MgcHJvZl9nY3R4X3Q7Cit0eXBlZGVm IHN0cnVjdCBwcm9mX3RkYXRhX3MgcHJvZl90ZGF0YV90OwordHlwZWRlZiBzdHJ1Y3QgcHJvZl9y ZWNlbnRfcyBwcm9mX3JlY2VudF90OworCisvKiBPcHRpb24gZGVmYXVsdHMuICovCisjaWZkZWYg SkVNQUxMT0NfUFJPRgorIyAgZGVmaW5lIFBST0ZfUFJFRklYX0RFRkFVTFQJCSJqZXByb2YiCisj ZWxzZQorIyAgZGVmaW5lIFBST0ZfUFJFRklYX0RFRkFVTFQJCSIiCisjZW5kaWYKKyNkZWZpbmUg TEdfUFJPRl9TQU1QTEVfREVGQVVMVAkJMTkKKyNkZWZpbmUgTEdfUFJPRl9JTlRFUlZBTF9ERUZB VUxUCS0xCisKKy8qCisgKiBIYXJkIGxpbWl0IG9uIHN0YWNrIGJhY2t0cmFjZSBkZXB0aC4gIFRo ZSB2ZXJzaW9uIG9mIHByb2ZfYmFja3RyYWNlKCkgdGhhdAorICogaXMgYmFzZWQgb24gX19idWls dGluX3JldHVybl9hZGRyZXNzKCkgbmVjZXNzYXJpbHkgaGFzIGEgaGFyZC1jb2RlZCBudW1iZXIK KyAqIG9mIGJhY2t0cmFjZSBmcmFtZSBoYW5kbGVycywgYW5kIHNob3VsZCBiZSBrZXB0IGluIHN5 bmMgd2l0aCB0aGlzIHNldHRpbmcuCisgKi8KKyNkZWZpbmUgUFJPRl9CVF9NQVgJCQkxMjgKKwor LyogSW5pdGlhbCBoYXNoIHRhYmxlIHNpemUuICovCisjZGVmaW5lIFBST0ZfQ0tIX01JTklURU1T CQk2NAorCisvKiBTaXplIG9mIG1lbW9yeSBidWZmZXIgdG8gdXNlIHdoZW4gd3JpdGluZyBkdW1w IGZpbGVzLiAqLworI2lmbmRlZiBKRU1BTExPQ19QUk9GCisvKiBNaW5pbWl6ZSBtZW1vcnkgYmxv YXQgZm9yIG5vbi1wcm9mIGJ1aWxkcy4gKi8KKyMgIGRlZmluZSBQUk9GX0RVTVBfQlVGU0laRQkJ MQorI2VsaWYgZGVmaW5lZChKRU1BTExPQ19ERUJVRykKKy8qIFVzZSBhIHNtYWxsIGJ1ZmZlciBz aXplIGluIGRlYnVnIGJ1aWxkLCBtYWlubHkgdG8gZmFjaWxpdGF0ZSB0ZXN0aW5nLiAqLworIyAg ZGVmaW5lIFBST0ZfRFVNUF9CVUZTSVpFCQkxNgorI2Vsc2UKKyMgIGRlZmluZSBQUk9GX0RVTVBf QlVGU0laRQkJNjU1MzYKKyNlbmRpZgorCisvKiBTaXplIG9mIHNpemUgY2xhc3MgcmVsYXRlZCB0 YWJsZXMgKi8KKyNpZmRlZiBKRU1BTExPQ19QUk9GCisjICBkZWZpbmUgUFJPRl9TQ19OU0laRVMJ CVNDX05TSVpFUworI2Vsc2UKKy8qIE1pbmltaXplIG1lbW9yeSBibG9hdCBmb3Igbm9uLXByb2Yg YnVpbGRzLiAqLworIyAgZGVmaW5lIFBST0ZfU0NfTlNJWkVTCQkxCisjZW5kaWYKKworLyogU2l6 ZSBvZiBzdGFjay1hbGxvY2F0ZWQgYnVmZmVyIHVzZWQgYnkgcHJvZl9wcmludGYoKS4gKi8KKyNk ZWZpbmUgUFJPRl9QUklOVEZfQlVGU0laRQkJMTI4CisKKy8qCisgKiBOdW1iZXIgb2YgbXV0ZXhl cyBzaGFyZWQgYW1vbmcgYWxsIGdjdHgncy4gIE5vIHNwYWNlIGlzIGFsbG9jYXRlZCBmb3IgdGhl c2UKKyAqIHVubGVzcyBwcm9maWxpbmcgaXMgZW5hYmxlZCwgc28gaXQncyBva2F5IHRvIG92ZXIt cHJvdmlzaW9uLgorICovCisjZGVmaW5lIFBST0ZfTkNUWF9MT0NLUwkJCTEwMjQKKworLyoKKyAq IE51bWJlciBvZiBtdXRleGVzIHNoYXJlZCBhbW9uZyBhbGwgdGRhdGEncy4gIE5vIHNwYWNlIGlz IGFsbG9jYXRlZCBmb3IgdGhlc2UKKyAqIHVubGVzcyBwcm9maWxpbmcgaXMgZW5hYmxlZCwgc28g aXQncyBva2F5IHRvIG92ZXItcHJvdmlzaW9uLgorICovCisjZGVmaW5lIFBST0ZfTlREQVRBX0xP Q0tTCQkyNTYKKworLyogTWluaW1pemUgbWVtb3J5IGJsb2F0IGZvciBub24tcHJvZiBidWlsZHMu ICovCisjaWZkZWYgSkVNQUxMT0NfUFJPRgorI2RlZmluZSBQUk9GX0RVTVBfRklMRU5BTUVfTEVO IChQQVRIX01BWCArIDEpCisjZWxzZQorI2RlZmluZSBQUk9GX0RVTVBfRklMRU5BTUVfTEVOIDEK KyNlbmRpZgorCisvKiBEZWZhdWx0IG51bWJlciBvZiByZWNlbnQgYWxsb2NhdGlvbnMgdG8gcmVj b3JkLiAqLworI2RlZmluZSBQUk9GX1JFQ0VOVF9BTExPQ19NQVhfREVGQVVMVCAwCisKKyNlbmRp ZiAvKiBKRU1BTExPQ19JTlRFUk5BTF9QUk9GX1RZUEVTX0ggKi8KCmRpZmYgLS1naXQgYS8zODkt ZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVy bmFsL3Bzc2V0LmggYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNs dWRlL2plbWFsbG9jL2ludGVybmFsL3Bzc2V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMC4uZTFkNjQ5NwotLS0gL2Rldi9udWxsCisrKyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1 aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvcHNzZXQuaApAQCAt MCwwICsxLDEzMSBAQAorI2lmbmRlZiBKRU1BTExPQ19JTlRFUk5BTF9QU1NFVF9ICisjZGVmaW5l IEpFTUFMTE9DX0lOVEVSTkFMX1BTU0VUX0gKKworI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFs L2hwZGF0YS5oIgorCisvKgorICogQSBwYWdlLXNsYWIgc2V0LiAgV2hhdCB0aGUgZXNldCBpcyB0 byBQQUMsIHRoZSBwc3NldCBpcyB0byBIUEEuICBJdCBtYWludGFpbnMKKyAqIGEgY29sbGVjdGlv biBvZiBwYWdlLXNsYWJzICh0aGUgaW50ZW50IGJlaW5nIHRoYXQgdGhleSBhcmUgYmFja2VkIGJ5 CisgKiBodWdlcGFnZXMsIG9yIGF0IGxlYXN0IGNvdWxkIGJlKSwgYW5kIGhhbmRsZXMgYWxsb2Nh dGlvbiBhbmQgZGVhbGxvY2F0aW9uCisgKiByZXF1ZXN0cy4KKyAqLworCisvKgorICogT25lIG1v cmUgdGhhbiB0aGUgbWF4aW11bSBwc3ppbmRfdCB3ZSB3aWxsIHNlcnZlIG91dCBvZiB0aGUgSFBB LgorICogUHJhY3RpY2FsbHksIHdlIGV4cGVjdCBvbmx5IHRoZSBmaXJzdCBmZXcgdG8gYmUgYWN0 dWFsbHkgdXNlZC4gIFRoaXMKKyAqIGNvcnJlc3BvbmRzIHRvIGEgbWF4aW11bSBzaXplIG9mIG9m IDUxMk1CIG9uIHN5c3RlbXMgd2l0aCA0ayBwYWdlcyBhbmQKKyAqIFNDX05HUk9VUCA9PSA0LCB3 aGljaCBpcyBhbHJlYWR5IGFuIHVucmVhc29uYWJseSBsYXJnZSBtYXhpbXVtLiAgTW9yYWxseSwg eW91CisgKiBjYW4gdGhpbmsgb2YgdGhpcyBhcyBiZWluZyBTQ19OUFNJWkVTLCBidXQgdGhlcmUn cyBubyBzZW5zZSBpbiB3YXN0aW5nIHRoYXQKKyAqIG11Y2ggc3BhY2UgaW4gdGhlIGFyZW5hLCBt YWtpbmcgYml0bWFwcyB0aGF0IG11Y2ggbGFyZ2VyLCBldGMuCisgKi8KKyNkZWZpbmUgUFNTRVRf TlBTSVpFUyA2NAorCisvKgorICogV2Uga2VlcCB0d28gcHVyZ2UgbGlzdHMgcGVyIHBhZ2Ugc2l6 ZSBjbGFzczsgb25lIGZvciBodWdpZmllZCBocGRhdGFzIChhdAorICogaW5kZXggMipwc3ppbmQp LCBhbmQgb25lIGZvciB0aGUgbm9uLWh1Z2lmaWVkIGhwZGF0YXMgKGF0IGluZGV4IDIqcHN6aW5k ICsKKyAqIDEpLiAgVGhpcyBsZXRzIHVzIGltcGxlbWVudCBhIHByZWZlcmVuY2UgZm9yIHB1cmdp bmcgbm9uLWh1Z2lmaWVkIGhwZGF0YXMKKyAqIGFtb25nIHNpbWlsYXJseS1kaXJ0eSBvbmVzLgor ICogV2UgcmVzZXJ2ZSB0aGUgbGFzdCB0d28gaW5kaWNlcyBmb3IgZW1wdHkgc2xhYnMsIGluIHRo YXQgY2FzZSBwdXJnaW5nCisgKiBodWdpZmllZCBvbmVzICh3aGljaCBhcmUgZGVmaW5pdGlvbmFs bHkgYWxsIHdhc3RlKSBiZWZvcmUgbm9uLWh1Z2lmaWVkIG9uZXMKKyAqIChpLmUuIHJldmVyc2lu ZyB0aGUgb3JkZXIpLgorICovCisjZGVmaW5lIFBTU0VUX05QVVJHRV9MSVNUUyAoMiAqIFBTU0VU X05QU0laRVMpCisKK3R5cGVkZWYgc3RydWN0IHBzc2V0X2Jpbl9zdGF0c19zIHBzc2V0X2Jpbl9z dGF0c190Oworc3RydWN0IHBzc2V0X2Jpbl9zdGF0c19zIHsKKwkvKiBIb3cgbWFueSBwYWdlc2xh YnMgYXJlIGluIHRoaXMgYmluPyAqLworCXNpemVfdCBucGFnZXNsYWJzOworCS8qIE9mIHRoZW0s IGhvdyBtYW55IHBhZ2VzIGFyZSBhY3RpdmU/ICovCisJc2l6ZV90IG5hY3RpdmU7CisJLyogQW5k IGhvdyBtYW55IGFyZSBkaXJ0eT8gKi8KKwlzaXplX3QgbmRpcnR5OworfTsKKwordHlwZWRlZiBz dHJ1Y3QgcHNzZXRfc3RhdHNfcyBwc3NldF9zdGF0c190Oworc3RydWN0IHBzc2V0X3N0YXRzX3Mg eworCS8qCisJICogVGhlIHNlY29uZCBpbmRleCBpcyBodWdlIHN0YXRzOyBub25mdWxsX3NsYWJz W3BzemluZF1bMF0gY29udGFpbnMKKwkgKiBzdGF0cyBmb3IgdGhlIG5vbi1odWdlIHNsYWJzIGlu IGJ1Y2tldCBwc3ppbmQsIHdoaWxlCisJICogbm9uZnVsbF9zbGFic1twc3ppbmRdWzFdIGNvbnRh aW5zIHN0YXRzIGZvciB0aGUgaHVnZSBzbGFicy4KKwkgKi8KKwlwc3NldF9iaW5fc3RhdHNfdCBu b25mdWxsX3NsYWJzW1BTU0VUX05QU0laRVNdWzJdOworCisJLyoKKwkgKiBGdWxsIHNsYWJzIGRv bid0IGxpdmUgaW4gYW55IGVkYXRhIGhlYXAsIGJ1dCB3ZSBzdGlsbCB0cmFjayB0aGVpcgorCSAq IHN0YXRzLgorCSAqLworCXBzc2V0X2Jpbl9zdGF0c190IGZ1bGxfc2xhYnNbMl07CisKKwkvKiBF bXB0eSBzbGFicyBhcmUgc2ltaWxhci4gKi8KKwlwc3NldF9iaW5fc3RhdHNfdCBlbXB0eV9zbGFi c1syXTsKK307CisKK3R5cGVkZWYgc3RydWN0IHBzc2V0X3MgcHNzZXRfdDsKK3N0cnVjdCBwc3Nl dF9zIHsKKwkvKgorCSAqIFRoZSBwYWdlc2xhYnMsIHF1YW50aXplZCBieSB0aGUgc2l6ZSBjbGFz cyBvZiB0aGUgbGFyZ2VzdCBjb250aWd1b3VzCisJICogZnJlZSBydW4gb2YgcGFnZXMgaW4gYSBw YWdlc2xhYi4KKwkgKi8KKwlocGRhdGFfYWdlX2hlYXBfdCBwYWdlc2xhYnNbUFNTRVRfTlBTSVpF U107CisJLyogQml0bWFwIGZvciB3aGljaCBzZXQgYml0cyBjb3JyZXNwb25kIHRvIG5vbi1lbXB0 eSBoZWFwcy4gKi8KKwlmYl9ncm91cF90IHBhZ2VzbGFiX2JpdG1hcFtGQl9OR1JPVVBTKFBTU0VU X05QU0laRVMpXTsKKwkvKgorCSAqIFRoZSBzdW0gb2YgYWxsIGJpbiBzdGF0cyBpbiBzdGF0cy4g IFRoaXMgbGV0cyB1cyBxdWlja2x5IGFuc3dlcgorCSAqIHF1ZXJpZXMgZm9yIHRoZSBudW1iZXIg b2YgZGlydHksIGFjdGl2ZSwgYW5kIHJldGFpbmVkIHBhZ2VzIGluIHRoZQorCSAqIGVudGlyZSBz ZXQuCisJICovCisJcHNzZXRfYmluX3N0YXRzX3QgbWVyZ2VkX3N0YXRzOworCXBzc2V0X3N0YXRz X3Qgc3RhdHM7CisJLyoKKwkgKiBTbGFicyB3aXRoIG5vIGFjdGl2ZSBhbGxvY2F0aW9ucywgYnV0 IHdoaWNoIGFyZSBhbGxvd2VkIHRvIHNlcnZlIG5ldworCSAqIGFsbG9jYXRpb25zLgorCSAqLwor CWhwZGF0YV9lbXB0eV9saXN0X3QgZW1wdHk7CisJLyoKKwkgKiBTbGFicyB3aGljaCBhcmUgYXZh aWxhYmxlIHRvIGJlIHB1cmdlZCwgb3JkZXJlZCBieSBob3cgbXVjaCB3ZSB3YW50CisJICogdG8g cHVyZ2UgdGhlbSAod2l0aCBsYXRlciBpbmRpY2VzIGluZGljYXRpbmcgc2xhYnMgd2Ugd2FudCB0 byBwdXJnZQorCSAqIG1vcmUpLgorCSAqLworCWhwZGF0YV9wdXJnZV9saXN0X3QgdG9fcHVyZ2Vb UFNTRVRfTlBVUkdFX0xJU1RTXTsKKwkvKiBCaXRtYXAgZm9yIHdoaWNoIHNldCBiaXRzIGNvcnJl c3BvbmQgdG8gbm9uLWVtcHR5IHB1cmdlIGxpc3RzLiAqLworCWZiX2dyb3VwX3QgcHVyZ2VfYml0 bWFwW0ZCX05HUk9VUFMoUFNTRVRfTlBVUkdFX0xJU1RTKV07CisJLyogU2xhYnMgd2hpY2ggYXJl IGF2YWlsYWJsZSB0byBiZSBodWdpZmllZC4gKi8KKwlocGRhdGFfaHVnaWZ5X2xpc3RfdCB0b19o dWdpZnk7Cit9OworCit2b2lkIHBzc2V0X2luaXQocHNzZXRfdCAqcHNzZXQpOwordm9pZCBwc3Nl dF9zdGF0c19hY2N1bShwc3NldF9zdGF0c190ICpkc3QsIHBzc2V0X3N0YXRzX3QgKnNyYyk7CisK Ky8qCisgKiBCZWdpbiBvciBlbmQgdXBkYXRpbmcgdGhlIGdpdmVuIHBhZ2VzbGFiJ3MgbWV0YWRh dGEuICBXaGlsZSB0aGUgcGFnZXNsYWIgaXMKKyAqIGJlaW5nIHVwZGF0ZWQsIGl0IHdvbid0IGJl IHJldHVybmVkIGZyb20gcHNzZXRfZml0IGNhbGxzLgorICovCit2b2lkIHBzc2V0X3VwZGF0ZV9i ZWdpbihwc3NldF90ICpwc3NldCwgaHBkYXRhX3QgKnBzKTsKK3ZvaWQgcHNzZXRfdXBkYXRlX2Vu ZChwc3NldF90ICpwc3NldCwgaHBkYXRhX3QgKnBzKTsKKworLyogQW5hbG9nb3VzIHRvIHRoZSBl c2V0X2ZpdDsgcGljayBhIGhwZGF0YSB0byBzZXJ2ZSB0aGUgcmVxdWVzdC4gKi8KK2hwZGF0YV90 ICpwc3NldF9waWNrX2FsbG9jKHBzc2V0X3QgKnBzc2V0LCBzaXplX3Qgc2l6ZSk7CisvKiBQaWNr IG9uZSB0byBwdXJnZS4gKi8KK2hwZGF0YV90ICpwc3NldF9waWNrX3B1cmdlKHBzc2V0X3QgKnBz c2V0KTsKKy8qIFBpY2sgb25lIHRvIGh1Z2lmeS4gKi8KK2hwZGF0YV90ICpwc3NldF9waWNrX2h1 Z2lmeShwc3NldF90ICpwc3NldCk7CisKK3ZvaWQgcHNzZXRfaW5zZXJ0KHBzc2V0X3QgKnBzc2V0 LCBocGRhdGFfdCAqcHMpOwordm9pZCBwc3NldF9yZW1vdmUocHNzZXRfdCAqcHNzZXQsIGhwZGF0 YV90ICpwcyk7CisKK3N0YXRpYyBpbmxpbmUgc2l6ZV90Citwc3NldF9ucGFnZXNsYWJzKHBzc2V0 X3QgKnBzc2V0KSB7CisJcmV0dXJuIHBzc2V0LT5tZXJnZWRfc3RhdHMubnBhZ2VzbGFiczsKK30K Kworc3RhdGljIGlubGluZSBzaXplX3QKK3Bzc2V0X25hY3RpdmUocHNzZXRfdCAqcHNzZXQpIHsK KwlyZXR1cm4gcHNzZXQtPm1lcmdlZF9zdGF0cy5uYWN0aXZlOworfQorCitzdGF0aWMgaW5saW5l IHNpemVfdAorcHNzZXRfbmRpcnR5KHBzc2V0X3QgKnBzc2V0KSB7CisJcmV0dXJuIHBzc2V0LT5t ZXJnZWRfc3RhdHMubmRpcnR5OworfQorCisjZW5kaWYgLyogSkVNQUxMT0NfSU5URVJOQUxfUFNT RVRfSCAqLwoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUu My4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvcHVibGljX25hbWVzcGFjZS5zaCBiLzM4OS1k cy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJu YWwvcHVibGljX25hbWVzcGFjZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAw Li40ZDQxNWJhCi0tLSAvZGV2L251bGwKKysrIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVt YWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9wdWJsaWNfbmFtZXNwYWNlLnNo CkBAIC0wLDAgKzEsNiBAQAorIyEvYmluL3NoCisKK2ZvciBubSBpbiBgY2F0ICQxYCA7IGRvCisg IG49YGVjaG8gJHtubX0gfHRyICc6JyAnICcgfGF3ayAne3ByaW50ICQxfSdgCisgIGVjaG8gIiNk ZWZpbmUgamVfJHtufSBKRU1BTExPQ19OKCR7bn0pIgorZG9uZQoKZGlmZiAtLWdpdCBhLzM4OS1k cy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJu YWwvcHVibGljX3VubmFtZXNwYWNlLnNoIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxs b2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9wdWJsaWNfdW5uYW1lc3BhY2Uuc2gK bmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNDIzOWQxNwotLS0gL2Rldi9udWxs CisrKyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVt YWxsb2MvaW50ZXJuYWwvcHVibGljX3VubmFtZXNwYWNlLnNoCkBAIC0wLDAgKzEsNiBAQAorIyEv YmluL3NoCisKK2ZvciBubSBpbiBgY2F0ICQxYCA7IGRvCisgIG49YGVjaG8gJHtubX0gfHRyICc6 JyAnICcgfGF3ayAne3ByaW50ICQxfSdgCisgIGVjaG8gIiN1bmRlZiBqZV8ke259IgorZG9uZQoK ZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1 ZGUvamVtYWxsb2MvaW50ZXJuYWwvcWwuaCBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFs bG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvcWwuaApuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwLi5jN2Y1MmY4Ci0tLSAvZGV2L251bGwKKysrIGIvMzg5LWRzLWJh c2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9x bC5oCkBAIC0wLDAgKzEsMTk3IEBACisjaWZuZGVmIEpFTUFMTE9DX0lOVEVSTkFMX1FMX0gKKyNk ZWZpbmUgSkVNQUxMT0NfSU5URVJOQUxfUUxfSAorCisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJu YWwvcXIuaCIKKworLyoKKyAqIEEgbGlua2VkLWxpc3QgaW1wbGVtZW50YXRpb24uCisgKgorICog VGhpcyBpcyBidWlsdCBvbiB0b3Agb2YgdGhlIHJpbmcgaW1wbGVtZW50YXRpb24sIGJ1dCB0aGF0 IGNhbiBiZSB2aWV3ZWQgYXMgYW4KKyAqIGltcGxlbWVudGF0aW9uIGRldGFpbCAoaS5lLiB0cnlp bmcgdG8gYWR2YW5jZSBwYXN0IHRoZSB0YWlsIG9mIHRoZSBsaXN0CisgKiBkb2Vzbid0IHdyYXAg YXJvdW5kKS4KKyAqCisgKiBZb3UgZGVmaW5lIGEgc3RydWN0IGxpa2Ugc286CisgKiB0eXBlZGVm IHN0cnVjeSBteV9zIG15X3Q7CisgKiBzdHJ1Y3QgbXlfcyB7CisgKiAgIGludCBkYXRhOworICog ICBxbF9lbG0obXlfdCkgbXlfbGluazsKKyAqIH07CisgKgorICogLy8gV2Ugd29iYmxlIGJldHdl ZW4gImxpc3QiIGFuZCAiaGVhZCIgZm9yIHRoaXMgdHlwZTsgd2UncmUgbm93IG1vc3RseQorICog Ly8gaGVhZGluZyB0b3dhcmRzICJsaXN0Ii4KKyAqIHR5cGVkZWYgcWxfaGVhZChteV90KSBteV9s aXN0X3Q7CisgKgorICogWW91IHRoZW4gcGFzcyBhIG15X2xpc3RfdCAqIGZvciBhX2hlYWQgYXJn dW1lbnRzLCBhIG15X3QgKiBmb3IgYV9lbG0KKyAqIGFyZ3VtZW50cywgdGhlIHRva2VuICJteV9s aW5rIiBmb3IgYV9maWVsZCBhcmd1bWVudHMsIGFuZCB0aGUgdG9rZW4gIm15X3QiCisgKiBmb3Ig YV90eXBlIGFyZ3VtZW50cy4KKyAqLworCisvKiBMaXN0IGRlZmluaXRpb25zLiAqLworI2RlZmlu ZSBxbF9oZWFkKGFfdHlwZSkJCQkJCQkJXAorc3RydWN0IHsJCQkJCQkJCVwKKwlhX3R5cGUgKnFs aF9maXJzdDsJCQkJCQlcCit9CisKKy8qIFN0YXRpYyBpbml0aWFsaXplciBmb3IgYW4gZW1wdHkg bGlzdC4gKi8KKyNkZWZpbmUgcWxfaGVhZF9pbml0aWFsaXplcihhX2hlYWQpIHtOVUxMfQorCisv KiBUaGUgZmllbGQgZGVmaW5pdGlvbi4gKi8KKyNkZWZpbmUgcWxfZWxtKGFfdHlwZSkJcXIoYV90 eXBlKQorCisvKiBBIHBvaW50ZXIgdG8gdGhlIGZpcnN0IGVsZW1lbnQgaW4gdGhlIGxpc3QsIG9y IE5VTEwgaWYgdGhlIGxpc3QgaXMgZW1wdHkuICovCisjZGVmaW5lIHFsX2ZpcnN0KGFfaGVhZCkg KChhX2hlYWQpLT5xbGhfZmlyc3QpCisKKy8qIER5bmFtaWNhbGx5IGluaXRpYWxpemVzIGEgbGlz dC4gKi8KKyNkZWZpbmUgcWxfbmV3KGFfaGVhZCkgZG8gewkJCQkJCVwKKwlxbF9maXJzdChhX2hl YWQpID0gTlVMTDsJCQkJCVwKK30gd2hpbGUgKDApCisKKy8qCisgKiBTZXRzIGRlc3QgdG8gYmUg dGhlIGNvbnRlbnRzIG9mIHNyYyAob3ZlcndyaXRpbmcgYW55IGVsZW1lbnRzIHRoZXJlKSwgbGVh dmluZworICogc3JjIGVtcHR5LgorICovCisjZGVmaW5lIHFsX21vdmUoYV9oZWFkX2Rlc3QsIGFf aGVhZF9zcmMpIGRvIHsJCQkJXAorCXFsX2ZpcnN0KGFfaGVhZF9kZXN0KSA9IHFsX2ZpcnN0KGFf aGVhZF9zcmMpOwkJCVwKKwlxbF9uZXcoYV9oZWFkX3NyYyk7CQkJCQkJXAorfSB3aGlsZSAoMCkK KworLyogVHJ1ZSBpZiB0aGUgbGlzdCBpcyBlbXB0eSwgb3RoZXJ3aXNlIGZhbHNlLiAqLworI2Rl ZmluZSBxbF9lbXB0eShhX2hlYWQpIChxbF9maXJzdChhX2hlYWQpID09IE5VTEwpCisKKy8qCisg KiBJbml0aWFsaXplcyBhIHFsX2VsbS4gIE11c3QgYmUgY2FsbGVkIGV2ZW4gaWYgdGhlIGZpZWxk IGlzIGFib3V0IHRvIGJlCisgKiBvdmVyd3JpdHRlbi4KKyAqLworI2RlZmluZSBxbF9lbG1fbmV3 KGFfZWxtLCBhX2ZpZWxkKSBxcl9uZXcoKGFfZWxtKSwgYV9maWVsZCkKKworLyoKKyAqIE9idGFp bnMgdGhlIGxhc3QgaXRlbSBpbiB0aGUgbGlzdC4KKyAqLworI2RlZmluZSBxbF9sYXN0KGFfaGVh ZCwgYV9maWVsZCkJCQkJCVwKKwkocWxfZW1wdHkoYV9oZWFkKSA/IE5VTEwgOiBxcl9wcmV2KHFs X2ZpcnN0KGFfaGVhZCksIGFfZmllbGQpKQorCisvKgorICogR2V0cyBhIHBvaW50ZXIgdG8gdGhl IG5leHQvcHJldiBlbGVtZW50IGluIHRoZSBsaXN0LiAgVHJ5aW5nIHRvIGFkdmFuY2UgcGFzdAor ICogdGhlIGVuZCBvciByZXRyZWF0IGJlZm9yZSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaXN0IHJl dHVybnMgTlVMTC4KKyAqLworI2RlZmluZSBxbF9uZXh0KGFfaGVhZCwgYV9lbG0sIGFfZmllbGQp CQkJCQlcCisJKChxbF9sYXN0KGFfaGVhZCwgYV9maWVsZCkgIT0gKGFfZWxtKSkJCQkJXAorCSAg ICA/IHFyX25leHQoKGFfZWxtKSwgYV9maWVsZCkJOiBOVUxMKQorI2RlZmluZSBxbF9wcmV2KGFf aGVhZCwgYV9lbG0sIGFfZmllbGQpCQkJCQlcCisJKChxbF9maXJzdChhX2hlYWQpICE9IChhX2Vs bSkpID8gcXJfcHJldigoYV9lbG0pLCBhX2ZpZWxkKQlcCisJCQkJICAgICAgIDogTlVMTCkKKwor LyogSW5zZXJ0cyBhX2VsbSBiZWZvcmUgYV9xbGVsbSBpbiB0aGUgbGlzdC4gKi8KKyNkZWZpbmUg cWxfYmVmb3JlX2luc2VydChhX2hlYWQsIGFfcWxlbG0sIGFfZWxtLCBhX2ZpZWxkKSBkbyB7CQlc CisJcXJfYmVmb3JlX2luc2VydCgoYV9xbGVsbSksIChhX2VsbSksIGFfZmllbGQpOwkJCVwKKwlp ZiAocWxfZmlyc3QoYV9oZWFkKSA9PSAoYV9xbGVsbSkpIHsJCQkJXAorCQlxbF9maXJzdChhX2hl YWQpID0gKGFfZWxtKTsJCQkJXAorCX0JCQkJCQkJCVwKK30gd2hpbGUgKDApCisKKy8qIEluc2Vy dHMgYV9lbG0gYWZ0ZXIgYV9xbGVsbSBpbiB0aGUgbGlzdC4gKi8KKyNkZWZpbmUgcWxfYWZ0ZXJf aW5zZXJ0KGFfcWxlbG0sIGFfZWxtLCBhX2ZpZWxkKQkJCVwKKwlxcl9hZnRlcl9pbnNlcnQoKGFf cWxlbG0pLCAoYV9lbG0pLCBhX2ZpZWxkKQorCisvKiBJbnNlcnRzIGFfZWxtIGFzIHRoZSBmaXJz dCBpdGVtIGluIHRoZSBsaXN0LiAqLworI2RlZmluZSBxbF9oZWFkX2luc2VydChhX2hlYWQsIGFf ZWxtLCBhX2ZpZWxkKSBkbyB7CQkJXAorCWlmICghcWxfZW1wdHkoYV9oZWFkKSkgewkJCQkJXAor CQlxcl9iZWZvcmVfaW5zZXJ0KHFsX2ZpcnN0KGFfaGVhZCksIChhX2VsbSksIGFfZmllbGQpOwlc CisJfQkJCQkJCQkJXAorCXFsX2ZpcnN0KGFfaGVhZCkgPSAoYV9lbG0pOwkJCQkJXAorfSB3aGls ZSAoMCkKKworLyogSW5zZXJ0cyBhX2VsbSBhcyB0aGUgbGFzdCBpdGVtIGluIHRoZSBsaXN0LiAq LworI2RlZmluZSBxbF90YWlsX2luc2VydChhX2hlYWQsIGFfZWxtLCBhX2ZpZWxkKSBkbyB7CQkJ XAorCWlmICghcWxfZW1wdHkoYV9oZWFkKSkgewkJCQkJXAorCQlxcl9iZWZvcmVfaW5zZXJ0KHFs X2ZpcnN0KGFfaGVhZCksIChhX2VsbSksIGFfZmllbGQpOwlcCisJfQkJCQkJCQkJXAorCXFsX2Zp cnN0KGFfaGVhZCkgPSBxcl9uZXh0KChhX2VsbSksIGFfZmllbGQpOwkJCVwKK30gd2hpbGUgKDAp CisKKy8qCisgKiBHaXZlbiBsaXN0cyBhID0gW2FfMSwgLi4uLCBhX25dIGFuZCBbYl8xLCAuLi4s IGJfbl0sIHJlc3VsdHMgaW46CisgKiBhID0gW2ExLCAuLi4sIGFfbiwgYl8xLCAuLi4sIGJfbl0g YW5kIGIgPSBbXS4KKyAqLworI2RlZmluZSBxbF9jb25jYXQoYV9oZWFkX2EsIGFfaGVhZF9iLCBh X2ZpZWxkKSBkbyB7CQkJXAorCWlmIChxbF9lbXB0eShhX2hlYWRfYSkpIHsJCQkJCVwKKwkJcWxf bW92ZShhX2hlYWRfYSwgYV9oZWFkX2IpOwkJCQlcCisJfSBlbHNlIGlmICghcWxfZW1wdHkoYV9o ZWFkX2IpKSB7CQkJCVwKKwkJcXJfbWVsZChxbF9maXJzdChhX2hlYWRfYSksIHFsX2ZpcnN0KGFf aGVhZF9iKSwJCVwKKwkJICAgIGFfZmllbGQpOwkJCQkJCVwKKwkJcWxfbmV3KGFfaGVhZF9iKTsJ CQkJCVwKKwl9CQkJCQkJCQlcCit9IHdoaWxlICgwKQorCisvKiBSZW1vdmVzIGFfZWxtIGZyb20g dGhlIGxpc3QuICovCisjZGVmaW5lIHFsX3JlbW92ZShhX2hlYWQsIGFfZWxtLCBhX2ZpZWxkKSBk byB7CQkJCVwKKwlpZiAocWxfZmlyc3QoYV9oZWFkKSA9PSAoYV9lbG0pKSB7CQkJCVwKKwkJcWxf Zmlyc3QoYV9oZWFkKSA9IHFyX25leHQocWxfZmlyc3QoYV9oZWFkKSwgYV9maWVsZCk7CVwKKwl9 CQkJCQkJCQlcCisJaWYgKHFsX2ZpcnN0KGFfaGVhZCkgIT0gKGFfZWxtKSkgewkJCQlcCisJCXFy X3JlbW92ZSgoYV9lbG0pLCBhX2ZpZWxkKTsJCQkJXAorCX0gZWxzZSB7CQkJCQkJCVwKKwkJcWxf bmV3KGFfaGVhZCk7CQkJCQkJXAorCX0JCQkJCQkJCVwKK30gd2hpbGUgKDApCisKKy8qIFJlbW92 ZXMgdGhlIGZpcnN0IGl0ZW0gaW4gdGhlIGxpc3QuICovCisjZGVmaW5lIHFsX2hlYWRfcmVtb3Zl KGFfaGVhZCwgYV90eXBlLCBhX2ZpZWxkKSBkbyB7CQkJXAorCWFfdHlwZSAqdCA9IHFsX2ZpcnN0 KGFfaGVhZCk7CQkJCQlcCisJcWxfcmVtb3ZlKChhX2hlYWQpLCB0LCBhX2ZpZWxkKTsJCQkJXAor fSB3aGlsZSAoMCkKKworLyogUmVtb3ZlcyB0aGUgbGFzdCBpdGVtIGluIHRoZSBsaXN0LiAqLwor I2RlZmluZSBxbF90YWlsX3JlbW92ZShhX2hlYWQsIGFfdHlwZSwgYV9maWVsZCkgZG8gewkJCVwK KwlhX3R5cGUgKnQgPSBxbF9sYXN0KGFfaGVhZCwgYV9maWVsZCk7CQkJCVwKKwlxbF9yZW1vdmUo KGFfaGVhZCksIHQsIGFfZmllbGQpOwkJCQlcCit9IHdoaWxlICgwKQorCisvKgorICogR2l2ZW4g YSA9IFthXzEsIGFfMiwgLi4uLCBhX24tMSwgYV9uLCBhX24rMSwgLi4uXSwKKyAqIHFsX3NwbGl0 KGEsIGFfbiwgYiwgc29tZV9maWVsZCkgcmVzdWx0cyBpbgorICogICBhID0gW2FfMSwgYV8yLCAu Li4sIGFfbi0xXQorICogYW5kIHJlcGxhY2VzIGIncyBjb250ZW50cyB3aXRoOgorICogICBiID0g W2FfbiwgYV9uKzEsIC4uLl0KKyAqLworI2RlZmluZSBxbF9zcGxpdChhX2hlYWRfYSwgYV9lbG0s IGFfaGVhZF9iLCBhX2ZpZWxkKSBkbyB7CQlcCisJaWYgKHFsX2ZpcnN0KGFfaGVhZF9hKSA9PSAo YV9lbG0pKSB7CQkJCVwKKwkJcWxfbW92ZShhX2hlYWRfYiwgYV9oZWFkX2EpOwkJCQlcCisJfSBl bHNlIHsJCQkJCQkJXAorCQlxcl9zcGxpdChxbF9maXJzdChhX2hlYWRfYSksIChhX2VsbSksIGFf ZmllbGQpOwkJXAorCQlxbF9maXJzdChhX2hlYWRfYikgPSAoYV9lbG0pOwkJCQlcCisJfQkJCQkJ CQkJXAorfSB3aGlsZSAoMCkKKworLyoKKyAqIEFuIG9wdGltaXplZCB2ZXJzaW9uIG9mOgorICoJ YV90eXBlICp0ID0gcWxfZmlyc3QoYV9oZWFkKTsKKyAqCXFsX3JlbW92ZSgoYV9oZWFkKSwgdCwg YV9maWVsZCk7CisgKglxbF90YWlsX2luc2VydCgoYV9oZWFkKSwgdCwgYV9maWVsZCk7CisgKi8K KyNkZWZpbmUgcWxfcm90YXRlKGFfaGVhZCwgYV9maWVsZCkgZG8gewkJCQkJXAorCXFsX2ZpcnN0 KGFfaGVhZCkgPSBxcl9uZXh0KHFsX2ZpcnN0KGFfaGVhZCksIGFfZmllbGQpOwkJXAorfSB3aGls ZSAoMCkKKworLyoKKyAqIEhlbHBlciBtYWNybyB0byBpdGVyYXRlIG92ZXIgZWFjaCBlbGVtZW50 IGluIGEgbGlzdCBpbiBvcmRlciwgc3RhcnRpbmcgZnJvbQorICogdGhlIGhlYWQgKG9yIGluIHJl dmVyc2Ugb3JkZXIsIHN0YXJ0aW5nIGZyb20gdGhlIHRhaWwpLiAgVGhlIHVzYWdlIGlzCisgKiAo YXNzdW1pbmcgbXlfdCBhbmQgbXlfbGlzdF90IGRlZmluZWQgYXMgYWJvdmUpLgorICoKKyAqIGlu dCBzdW0obXlfbGlzdF90ICpsaXN0KSB7CisgKiAgIGludCBzdW0gPSAwOworICogICBteV90ICpp dGVyOworICogICBxbF9mb3JlYWNoKGl0ZXIsIGxpc3QsIGxpbmspIHsKKyAqICAgICBzdW0gKz0g aXRlci0+ZGF0YTsKKyAqICAgfQorICogICByZXR1cm4gc3VtOworICogfQorICovCisKKyNkZWZp bmUgcWxfZm9yZWFjaChhX3ZhciwgYV9oZWFkLCBhX2ZpZWxkKQkJCQlcCisJcXJfZm9yZWFjaCgo YV92YXIpLCBxbF9maXJzdChhX2hlYWQpLCBhX2ZpZWxkKQorCisjZGVmaW5lIHFsX3JldmVyc2Vf Zm9yZWFjaChhX3ZhciwgYV9oZWFkLCBhX2ZpZWxkKQkJCVwKKwlxcl9yZXZlcnNlX2ZvcmVhY2go KGFfdmFyKSwgcWxfZmlyc3QoYV9oZWFkKSwgYV9maWVsZCkKKworI2VuZGlmIC8qIEpFTUFMTE9D X0lOVEVSTkFMX1FMX0ggKi8KCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9q ZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL3FyLmggYi8zODktZHMtYmFz ZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL3Fy LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWNlNGY1NQotLS0gL2Rldi9u dWxsCisrKyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUv amVtYWxsb2MvaW50ZXJuYWwvcXIuaApAQCAtMCwwICsxLDE0MCBAQAorI2lmbmRlZiBKRU1BTExP Q19JTlRFUk5BTF9RUl9ICisjZGVmaW5lIEpFTUFMTE9DX0lOVEVSTkFMX1FSX0gKKworLyoKKyAq IEEgcmluZyBpbXBsZW1lbnRhdGlvbiBiYXNlZCBvbiBhbiBlbWJlZGRlZCBjaXJjdWxhciBkb3Vi bHktbGlua2VkIGxpc3QuCisgKgorICogWW91IGRlZmluZSB5b3VyIHN0cnVjdCBsaWtlIHNvOgor ICoKKyAqIHR5cGVkZWYgc3RydWN0IG15X3MgbXlfdDsKKyAqIHN0cnVjdCBteV9zIHsKKyAqICAg aW50IGRhdGE7CisgKiAgIHFyKG15X3QpIG15X2xpbms7CisgKiB9OworICoKKyAqIEFuZCB0aGVu IHBhc3MgYSBteV90ICogaW50byBtYWNyb3MgZm9yIGFfcXIgYXJndW1lbnRzLCBhbmQgdGhlIHRv a2VuCisgKiAibXlfbGluayIgaW50byBhX2ZpZWxkIGZpZWxkcy4KKyAqLworCisvKiBSaW5nIGRl ZmluaXRpb25zLiAqLworI2RlZmluZSBxcihhX3R5cGUpCQkJCQkJCVwKK3N0cnVjdCB7CQkJCQkJ CQlcCisJYV90eXBlCSpxcmVfbmV4dDsJCQkJCQlcCisJYV90eXBlCSpxcmVfcHJldjsJCQkJCQlc Cit9CisKKy8qCisgKiBJbml0aWFsaXplIGEgcXIgbGluay4gIEV2ZXJ5IGxpbmsgbXVzdCBiZSBp bml0aWFsaXplZCBiZWZvcmUgYmVpbmcgdXNlZCwgZXZlbgorICogaWYgdGhhdCBpbml0aWFsaXph dGlvbiBpcyBnb2luZyB0byBiZSBpbW1lZGlhdGVseSBvdmVyd3JpdHRlbiAoc2F5LCBieSBiZWlu ZworICogcGFzc2VkIGludG8gYW4gaW5zZXJ0aW9uIG1hY3JvKS4KKyAqLworI2RlZmluZSBxcl9u ZXcoYV9xciwgYV9maWVsZCkgZG8gewkJCQkJXAorCShhX3FyKS0+YV9maWVsZC5xcmVfbmV4dCA9 IChhX3FyKTsJCQkJXAorCShhX3FyKS0+YV9maWVsZC5xcmVfcHJldiA9IChhX3FyKTsJCQkJXAor fSB3aGlsZSAoMCkKKworLyoKKyAqIEdvIGZvcndhcmRzIG9yIGJhY2t3YXJkcyBpbiB0aGUgcmlu Zy4gIE5vdGUgdGhhdCAodGhlIHJpbmcgYmVpbmcgY2lyY3VsYXIpLCB0aGlzCisgKiBhbHdheXMg c3VjY2VlZHMgLS0geW91IGp1c3Qga2VlcCBsb29waW5nIGFyb3VuZCBhbmQgYXJvdW5kIHRoZSBy aW5nIGlmIHlvdQorICogY2hhc2UgcG9pbnRlcnMgd2l0aG91dCBlbmQuCisgKi8KKyNkZWZpbmUg cXJfbmV4dChhX3FyLCBhX2ZpZWxkKSAoKGFfcXIpLT5hX2ZpZWxkLnFyZV9uZXh0KQorI2RlZmlu ZSBxcl9wcmV2KGFfcXIsIGFfZmllbGQpICgoYV9xciktPmFfZmllbGQucXJlX3ByZXYpCisKKy8q CisgKiBHaXZlbiB0d28gcmluZ3M6CisgKiAgICBhIC0+IGFfMSAtPiAuLi4gLT4gYV9uIC0tCisg KiAgICBeICAgICAgICAgICAgICAgICAgICAgICB8CisgKiAgICB8LS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgKgorICogICAgYiAtPiBiXzEgLT4gLi4uIC0+IGJfbiAtLQorICogICAgXiAgICAg ICAgICAgICAgICAgICAgICAgfAorICogICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoK KyAqIFJlc3VsdHMgaW4gdGhlIHJpbmc6CisgKiAgIGEgLT4gYV8xIC0+IC4uLiAtPiBhX24gLT4g YiAtPiBiXzEgLT4gLi4uIC0+IGJfbiAtLQorICogICBeICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAqICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CisgKgorICogYV9xcl9hIGNhbiBkaXJlY3RseSBi ZSBhIHFyX25leHQoKSBtYWNybywgYnV0IGFfcXJfYiBjYW5ub3QuCisgKi8KKyNkZWZpbmUgcXJf bWVsZChhX3FyX2EsIGFfcXJfYiwgYV9maWVsZCkgZG8gewkJCQlcCisJKGFfcXJfYiktPmFfZmll bGQucXJlX3ByZXYtPmFfZmllbGQucXJlX25leHQgPQkJCVwKKwkgICAgKGFfcXJfYSktPmFfZmll bGQucXJlX3ByZXY7CQkJCQlcCisJKGFfcXJfYSktPmFfZmllbGQucXJlX3ByZXYgPSAoYV9xcl9i KS0+YV9maWVsZC5xcmVfcHJldjsJXAorCShhX3FyX2IpLT5hX2ZpZWxkLnFyZV9wcmV2ID0JCQkJ CVwKKwkgICAgKGFfcXJfYiktPmFfZmllbGQucXJlX3ByZXYtPmFfZmllbGQucXJlX25leHQ7CQlc CisJKGFfcXJfYSktPmFfZmllbGQucXJlX3ByZXYtPmFfZmllbGQucXJlX25leHQgPSAoYV9xcl9h KTsJXAorCShhX3FyX2IpLT5hX2ZpZWxkLnFyZV9wcmV2LT5hX2ZpZWxkLnFyZV9uZXh0ID0gKGFf cXJfYik7CVwKK30gd2hpbGUgKDApCisKKy8qCisgKiBMb2dpY2FsbHksIHRoaXMgaXMganVzdCBh IG1lbGQuICBUaGUgaW50ZW50LCB0aG91Z2gsIGlzIHRoYXQgYV9xcmVsbSBpcyBhCisgKiBzaW5n bGUtZWxlbWVudCByaW5nLCBzbyB0aGF0ICJiZWZvcmUiIGhhcyBhIG1vcmUgb2J2aW91cyBpbnRl cnByZXRhdGlvbiB0aGFuCisgKiBtZWxkLgorICovCisjZGVmaW5lIHFyX2JlZm9yZV9pbnNlcnQo YV9xcmVsbSwgYV9xciwgYV9maWVsZCkJCQlcCisJcXJfbWVsZCgoYV9xcmVsbSksIChhX3FyKSwg YV9maWVsZCkKKworLyogRGl0dG8sIGJ1dCBpbnNlcnRpbmcgYWZ0ZXIgcmF0aGVyIHRoYW4gYmVm b3JlLiAqLworI2RlZmluZSBxcl9hZnRlcl9pbnNlcnQoYV9xcmVsbSwgYV9xciwgYV9maWVsZCkJ CQkJXAorCXFyX2JlZm9yZV9pbnNlcnQocXJfbmV4dChhX3FyZWxtLCBhX2ZpZWxkKSwgKGFfcXIp LCBhX2ZpZWxkKQorCisvKgorICogSW52ZXJ0cyBtZWxkOyBnaXZlbiB0aGUgcmluZzoKKyAqICAg YSAtPiBhXzEgLT4gLi4uIC0+IGFfbiAtPiBiIC0+IGJfMSAtPiAuLi4gLT4gYl9uIC0tCisgKiAg IF4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICog ICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKKyAq CisgKiBSZXN1bHRzIGluIHR3byByaW5nczoKKyAqICAgIGEgLT4gYV8xIC0+IC4uLiAtPiBhX24g LS0KKyAqICAgIF4gICAgICAgICAgICAgICAgICAgICAgIHwKKyAqICAgIHwtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAqCisgKiAgICBiIC0+IGJfMSAtPiAuLi4gLT4gYl9uIC0tCisgKiAgICBe ICAgICAgICAgICAgICAgICAgICAgICB8CisgKiAgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgKgorICogcXJfbWVsZCgpIGFuZCBxcl9zcGxpdCgpIGFyZSBmdW5jdGlvbmFsbHkgZXF1aXZh bGVudCwgc28gdGhlcmUncyBubyBuZWVkIHRvCisgKiBoYXZlIHR3byBjb3BpZXMgb2YgdGhlIGNv ZGUuCisgKi8KKyNkZWZpbmUgcXJfc3BsaXQoYV9xcl9hLCBhX3FyX2IsIGFfZmllbGQpCQkJCVwK Kwlxcl9tZWxkKChhX3FyX2EpLCAoYV9xcl9iKSwgYV9maWVsZCkKKworLyoKKyAqIFNwbGl0cyBv ZmYgYV9xciBmcm9tIHRoZSByZXN0IG9mIGl0cyByaW5nLCBzbyB0aGF0IGl0IGJlY29tZXMgYQor ICogc2luZ2xlLWVsZW1lbnQgcmluZy4KKyAqLworI2RlZmluZSBxcl9yZW1vdmUoYV9xciwgYV9m aWVsZCkJCQkJCVwKKwlxcl9zcGxpdChxcl9uZXh0KGFfcXIsIGFfZmllbGQpLCAoYV9xciksIGFf ZmllbGQpCisKKy8qCisgKiBIZWxwZXIgbWFjcm8gdG8gaXRlcmF0ZSBvdmVyIGVhY2ggZWxlbWVu dCBpbiBhIHJpbmcgZXhhY3RseSBvbmNlLCBzdGFydGluZworICogd2l0aCBhX3FyLiAgVGhlIHVz YWdlIGlzIChhc3N1bWluZyBteV90IGRlZmluZWQgYXMgYWJvdmUpOgorICoKKyAqIGludCBzdW0o bXlfdCAqaXRlbSkgeworICogICBpbnQgc3VtID0gMDsKKyAqICAgbXlfdCAqaXRlcjsKKyAqICAg cXJfZm9yZWFjaChpdGVyLCBpdGVtLCBsaW5rKSB7CisgKiAgICAgc3VtICs9IGl0ZXItPmRhdGE7 CisgKiAgIH0KKyAqICAgcmV0dXJuIHN1bTsKKyAqIH0KKyAqLworI2RlZmluZSBxcl9mb3JlYWNo KHZhciwgYV9xciwgYV9maWVsZCkJCQkJCVwKKwlmb3IgKCh2YXIpID0gKGFfcXIpOwkJCQkJCVwK KwkgICAgKHZhcikgIT0gTlVMTDsJCQkJCQlcCisJICAgICh2YXIpID0gKCgodmFyKS0+YV9maWVs ZC5xcmVfbmV4dCAhPSAoYV9xcikpCQlcCisJICAgID8gKHZhciktPmFfZmllbGQucXJlX25leHQg OiBOVUxMKSkKKworLyoKKyAqIFRoZSBzYW1lIChhbmQgd2l0aCB0aGUgc2FtZSB1c2FnZSkgYXMg cXJfZm9yZWFjaCwgYnV0IGluIHRoZSBvcHBvc2l0ZSBvcmRlciwKKyAqIGVuZGluZyB3aXRoIGFf cXIuCisgKi8KKyNkZWZpbmUgcXJfcmV2ZXJzZV9mb3JlYWNoKHZhciwgYV9xciwgYV9maWVsZCkJ CQkJXAorCWZvciAoKHZhcikgPSAoKGFfcXIpICE9IE5VTEwpID8gcXJfcHJldihhX3FyLCBhX2Zp ZWxkKSA6IE5VTEw7CVwKKwkgICAgKHZhcikgIT0gTlVMTDsJCQkJCQlcCisJICAgICh2YXIpID0g KCgodmFyKSAhPSAoYV9xcikpCQkJCQlcCisJICAgID8gKHZhciktPmFfZmllbGQucXJlX3ByZXYg OiBOVUxMKSkKKworI2VuZGlmIC8qIEpFTUFMTE9DX0lOVEVSTkFMX1FSX0ggKi8KCmRpZmYgLS1n aXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFs bG9jL2ludGVybmFsL3F1YW50dW0uaCBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9j LTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvcXVhbnR1bS5oCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyMmQ3NTMKLS0tIC9kZXYvbnVsbAorKysgYi8zODktZHMt YmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFs L3F1YW50dW0uaApAQCAtMCwwICsxLDg3IEBACisjaWZuZGVmIEpFTUFMTE9DX0lOVEVSTkFMX1FV QU5UVU1fSAorI2RlZmluZSBKRU1BTExPQ19JTlRFUk5BTF9RVUFOVFVNX0gKKworLyoKKyAqIE1p bmltdW0gYWxsb2NhdGlvbiBhbGlnbm1lbnQgaXMgMl5MR19RVUFOVFVNIGJ5dGVzIChpZ25vcmlu ZyB0aW55IHNpemUKKyAqIGNsYXNzZXMpLgorICovCisjaWZuZGVmIExHX1FVQU5UVU0KKyMgIGlm IChkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9NX0lYODYpKQorIyAgICBkZWZpbmUgTEdf UVVBTlRVTQkJNAorIyAgZW5kaWYKKyMgIGlmZGVmIF9faWE2NF9fCisjICAgIGRlZmluZSBMR19R VUFOVFVNCQk0CisjICBlbmRpZgorIyAgaWZkZWYgX19hbHBoYV9fCisjICAgIGRlZmluZSBMR19R VUFOVFVNCQk0CisjICBlbmRpZgorIyAgaWYgKGRlZmluZWQoX19zcGFyYzY0X18pIHx8IGRlZmlu ZWQoX19zcGFyY3Y5KSB8fCBkZWZpbmVkKF9fc3BhcmNfdjlfXykpCisjICAgIGRlZmluZSBMR19R VUFOVFVNCQk0CisjICBlbmRpZgorIyAgaWYgKGRlZmluZWQoX19hbWQ2NF9fKSB8fCBkZWZpbmVk KF9feDg2XzY0X18pIHx8IGRlZmluZWQoX01fWDY0KSkKKyMgICAgZGVmaW5lIExHX1FVQU5UVU0J CTQKKyMgIGVuZGlmCisjICBpZmRlZiBfX2FybV9fCisjICAgIGRlZmluZSBMR19RVUFOVFVNCQkz CisjICBlbmRpZgorIyAgaWZkZWYgX19hYXJjaDY0X18KKyMgICAgZGVmaW5lIExHX1FVQU5UVU0J CTQKKyMgIGVuZGlmCisjICBpZmRlZiBfX2hwcGFfXworIyAgICBkZWZpbmUgTEdfUVVBTlRVTQkJ NAorIyAgZW5kaWYKKyMgIGlmZGVmIF9fbG9vbmdhcmNoX18KKyMgICAgZGVmaW5lIExHX1FVQU5U VU0JCTQKKyMgIGVuZGlmCisjICBpZmRlZiBfX202OGtfXworIyAgICBkZWZpbmUgTEdfUVVBTlRV TQkJMworIyAgZW5kaWYKKyMgIGlmZGVmIF9fbWlwc19fCisjICAgIGlmIGRlZmluZWQoX19taXBz X24zMikgfHwgZGVmaW5lZChfX21pcHNfbjY0KQorIyAgICAgIGRlZmluZSBMR19RVUFOVFVNCQk0 CisjICAgIGVsc2UKKyMgICAgICBkZWZpbmUgTEdfUVVBTlRVTQkJMworIyAgICBlbmRpZgorIyAg ZW5kaWYKKyMgIGlmZGVmIF9fbmlvczJfXworIyAgICBkZWZpbmUgTEdfUVVBTlRVTQkJMworIyAg ZW5kaWYKKyMgIGlmZGVmIF9fb3Ixa19fCisjICAgIGRlZmluZSBMR19RVUFOVFVNCQkzCisjICBl bmRpZgorIyAgaWZkZWYgX19wb3dlcnBjX18KKyMgICAgZGVmaW5lIExHX1FVQU5UVU0JCTQKKyMg IGVuZGlmCisjICBpZiBkZWZpbmVkKF9fcmlzY3YpIHx8IGRlZmluZWQoX19yaXNjdl9fKQorIyAg ICBkZWZpbmUgTEdfUVVBTlRVTQkJNAorIyAgZW5kaWYKKyMgIGlmZGVmIF9fczM5MF9fCisjICAg IGRlZmluZSBMR19RVUFOVFVNCQk0CisjICBlbmRpZgorIyAgaWYgKGRlZmluZWQgKF9fU0gzRV9f KSB8fCBkZWZpbmVkKF9fU0g0X1NJTkdMRV9fKSB8fCBkZWZpbmVkKF9fU0g0X18pIHx8IFwKKwlk ZWZpbmVkKF9fU0g0X1NJTkdMRV9PTkxZX18pKQorIyAgICBkZWZpbmUgTEdfUVVBTlRVTQkJNAor IyAgZW5kaWYKKyMgIGlmZGVmIF9fdGlsZV9fCisjICAgIGRlZmluZSBMR19RVUFOVFVNCQk0Cisj ICBlbmRpZgorIyAgaWZkZWYgX19sZTMyX18KKyMgICAgZGVmaW5lIExHX1FVQU5UVU0JCTQKKyMg IGVuZGlmCisjICBpZmRlZiBfX2FyY19fCisjICAgIGRlZmluZSBMR19RVUFOVFVNCQkzCisjICBl bmRpZgorIyAgaWZuZGVmIExHX1FVQU5UVU0KKyMgICAgZXJyb3IgIlVua25vd24gbWluaW11bSBh bGlnbm1lbnQgZm9yIGFyY2hpdGVjdHVyZTsgc3BlY2lmeSB2aWEgIgorCSAiLS13aXRoLWxnLXF1 YW50dW0iCisjICBlbmRpZgorI2VuZGlmCisKKyNkZWZpbmUgUVVBTlRVTQkJCSgoc2l6ZV90KSgx VSA8PCBMR19RVUFOVFVNKSkKKyNkZWZpbmUgUVVBTlRVTV9NQVNLCQkoUVVBTlRVTSAtIDEpCisK Ky8qIFJldHVybiB0aGUgc21hbGxlc3QgcXVhbnR1bSBtdWx0aXBsZSB0aGF0IGlzID49IGEuICov CisjZGVmaW5lIFFVQU5UVU1fQ0VJTElORyhhKQkJCQkJCVwKKwkoKChhKSArIFFVQU5UVU1fTUFT SykgJiB+UVVBTlRVTV9NQVNLKQorCisjZW5kaWYgLyogSkVNQUxMT0NfSU5URVJOQUxfUVVBTlRV TV9IICovCgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4z LjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9yYi5oIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVp bGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9yYi5oCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5YTUxY2IKLS0tIC9kZXYvbnVsbAorKysgYi8z ODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2lu dGVybmFsL3JiLmgKQEAgLTAsMCArMSwxODU2IEBACisjaWZuZGVmIEpFTUFMTE9DX0lOVEVSTkFM X1JCX0gKKyNkZWZpbmUgSkVNQUxMT0NfSU5URVJOQUxfUkJfSAorCisvKi0KKyAqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqCisgKgorICogY3BwIG1hY3JvIGltcGxlbWVudGF0aW9uIG9mIGxlZnQtbGVh bmluZyAyLTMgcmVkLWJsYWNrIHRyZWVzLiAgUGFyZW50CisgKiBwb2ludGVycyBhcmUgbm90IHVz ZWQsIGFuZCBjb2xvciBiaXRzIGFyZSBzdG9yZWQgaW4gdGhlIGxlYXN0IHNpZ25pZmljYW50Cisg KiBiaXQgb2YgcmlnaHQtY2hpbGQgcG9pbnRlcnMgKGlmIFJCX0NPTVBBQ1QgaXMgZGVmaW5lZCks IHRodXMgbWFraW5nIG5vZGUKKyAqIGxpbmthZ2UgYXMgY29tcGFjdCBhcyBpcyBwb3NzaWJsZSBm b3IgcmVkLWJsYWNrIHRyZWVzLgorICoKKyAqIFVzYWdlOgorICoKKyAqICAgI2luY2x1ZGUgPHN0 ZGludC5oPgorICogICAjaW5jbHVkZSA8c3RkYm9vbC5oPgorICogICAjZGVmaW5lIE5ERUJVRyAv LyAoT3B0aW9uYWwsIHNlZSBhc3NlcnQoMykuKQorICogICAjaW5jbHVkZSA8YXNzZXJ0Lmg+Cisg KiAgICNkZWZpbmUgUkJfQ09NUEFDVCAvLyAoT3B0aW9uYWwsIGVtYmVkIGNvbG9yIGJpdHMgaW4g cmlnaHQtY2hpbGQgcG9pbnRlcnMuKQorICogICAjaW5jbHVkZSA8cmIuaD4KKyAqICAgLi4uCisg KgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCisjaWZuZGVmIF9fUEdJCisjZGVmaW5l IFJCX0NPTVBBQ1QKKyNlbmRpZgorCisvKgorICogRWFjaCBub2RlIGluIHRoZSBSQiB0cmVlIGNv bnN1bWVzIGF0IGxlYXN0IDEgYnl0ZSBvZiBzcGFjZSAoZm9yIHRoZSBsaW5rYWdlCisgKiBpZiBu b3RoaW5nIGVsc2UsIHNvIHRoZXJlIGFyZSBhIG1heGltdW0gb2Ygc2l6ZW9mKHZvaWQgKikgPDwg MyByYiB0cmVlIG5vZGVzCisgKiBpbiBhbnkgcHJvY2VzcyAoYW5kIHRodXMsIGF0IG1vc3Qgc2l6 ZW9mKHZvaWQgKikgPDwgMyBub2RlcyBpbiBhbnkgcmIgdHJlZSkuCisgKiBUaGUgY2hvaWNlIG9m IGFsZ29yaXRobSBib3VuZHMgdGhlIGRlcHRoIG9mIGEgdHJlZSB0byB0d2ljZSB0aGUgYmluYXJ5 IGxvZyBvZgorICogdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgdHJlZTsgdGhlIGZvbGxv d2luZyBib3VuZCBmb2xsb3dzLgorICovCisjZGVmaW5lIFJCX01BWF9ERVBUSCAoc2l6ZW9mKHZv aWQgKikgPDwgNCkKKworI2lmZGVmIFJCX0NPTVBBQ1QKKy8qIE5vZGUgc3RydWN0dXJlLiAqLwor I2RlZmluZSByYl9ub2RlKGFfdHlwZSkJCQkJCQkJXAorc3RydWN0IHsJCQkJCQkJCVwKKyAgICBh X3R5cGUgKnJibl9sZWZ0OwkJCQkJCQlcCisgICAgYV90eXBlICpyYm5fcmlnaHRfcmVkOwkJCQkJ CVwKK30KKyNlbHNlCisjZGVmaW5lIHJiX25vZGUoYV90eXBlKQkJCQkJCQlcCitzdHJ1Y3QgewkJ CQkJCQkJXAorICAgIGFfdHlwZSAqcmJuX2xlZnQ7CQkJCQkJCVwKKyAgICBhX3R5cGUgKnJibl9y aWdodDsJCQkJCQkJXAorICAgIGJvb2wgcmJuX3JlZDsJCQkJCQkJXAorfQorI2VuZGlmCisKKy8q IFJvb3Qgc3RydWN0dXJlLiAqLworI2RlZmluZSByYl90cmVlKGFfdHlwZSkJCQkJCQkJXAorc3Ry dWN0IHsJCQkJCQkJCVwKKyAgICBhX3R5cGUgKnJidF9yb290OwkJCQkJCQlcCit9CisKKy8qIExl ZnQgYWNjZXNzb3JzLiAqLworI2RlZmluZSByYnRuX2xlZnRfZ2V0KGFfdHlwZSwgYV9maWVsZCwg YV9ub2RlKQkJCQlcCisgICAgKChhX25vZGUpLT5hX2ZpZWxkLnJibl9sZWZ0KQorI2RlZmluZSBy YnRuX2xlZnRfc2V0KGFfdHlwZSwgYV9maWVsZCwgYV9ub2RlLCBhX2xlZnQpIGRvIHsJCVwKKyAg ICAoYV9ub2RlKS0+YV9maWVsZC5yYm5fbGVmdCA9IGFfbGVmdDsJCQkJXAorfSB3aGlsZSAoMCkK KworI2lmZGVmIFJCX0NPTVBBQ1QKKy8qIFJpZ2h0IGFjY2Vzc29ycy4gKi8KKyNkZWZpbmUgcmJ0 bl9yaWdodF9nZXQoYV90eXBlLCBhX2ZpZWxkLCBhX25vZGUpCQkJCVwKKyAgICAoKGFfdHlwZSAq KSAoKChpbnRwdHJfdCkgKGFfbm9kZSktPmFfZmllbGQucmJuX3JpZ2h0X3JlZCkJCVwKKyAgICAg ICYgKChzc2l6ZV90KS0yKSkpCisjZGVmaW5lIHJidG5fcmlnaHRfc2V0KGFfdHlwZSwgYV9maWVs ZCwgYV9ub2RlLCBhX3JpZ2h0KSBkbyB7CQlcCisgICAgKGFfbm9kZSktPmFfZmllbGQucmJuX3Jp Z2h0X3JlZCA9IChhX3R5cGUgKikgKCgodWludHB0cl90KSBhX3JpZ2h0KQlcCisgICAgICB8ICgo KHVpbnRwdHJfdCkgKGFfbm9kZSktPmFfZmllbGQucmJuX3JpZ2h0X3JlZCkgJiAoKHNpemVfdCkx KSkpOwlcCit9IHdoaWxlICgwKQorCisvKiBDb2xvciBhY2Nlc3NvcnMuICovCisjZGVmaW5lIHJi dG5fcmVkX2dldChhX3R5cGUsIGFfZmllbGQsIGFfbm9kZSkJCQkJXAorICAgICgoYm9vbCkgKCgo dWludHB0cl90KSAoYV9ub2RlKS0+YV9maWVsZC5yYm5fcmlnaHRfcmVkKQkJXAorICAgICAgJiAo KHNpemVfdCkxKSkpCisjZGVmaW5lIHJidG5fY29sb3Jfc2V0KGFfdHlwZSwgYV9maWVsZCwgYV9u b2RlLCBhX3JlZCkgZG8gewkJXAorICAgIChhX25vZGUpLT5hX2ZpZWxkLnJibl9yaWdodF9yZWQg PSAoYV90eXBlICopICgoKChpbnRwdHJfdCkJCVwKKyAgICAgIChhX25vZGUpLT5hX2ZpZWxkLnJi bl9yaWdodF9yZWQpICYgKChzc2l6ZV90KS0yKSkJCQlcCisgICAgICB8ICgoc3NpemVfdClhX3Jl ZCkpOwkJCQkJCVwKK30gd2hpbGUgKDApCisjZGVmaW5lIHJidG5fcmVkX3NldChhX3R5cGUsIGFf ZmllbGQsIGFfbm9kZSkgZG8gewkJCVwKKyAgICAoYV9ub2RlKS0+YV9maWVsZC5yYm5fcmlnaHRf cmVkID0gKGFfdHlwZSAqKSAoKCh1aW50cHRyX3QpCQlcCisgICAgICAoYV9ub2RlKS0+YV9maWVs ZC5yYm5fcmlnaHRfcmVkKSB8ICgoc2l6ZV90KTEpKTsJCQlcCit9IHdoaWxlICgwKQorI2RlZmlu ZSByYnRuX2JsYWNrX3NldChhX3R5cGUsIGFfZmllbGQsIGFfbm9kZSkgZG8gewkJCVwKKyAgICAo YV9ub2RlKS0+YV9maWVsZC5yYm5fcmlnaHRfcmVkID0gKGFfdHlwZSAqKSAoKChpbnRwdHJfdCkJ CVwKKyAgICAgIChhX25vZGUpLT5hX2ZpZWxkLnJibl9yaWdodF9yZWQpICYgKChzc2l6ZV90KS0y KSk7CQlcCit9IHdoaWxlICgwKQorCisvKiBOb2RlIGluaXRpYWxpemVyLiAqLworI2RlZmluZSBy YnRfbm9kZV9uZXcoYV90eXBlLCBhX2ZpZWxkLCBhX3JidCwgYV9ub2RlKSBkbyB7CQlcCisgICAg LyogQm9va2tlZXBpbmcgYml0IGNhbm5vdCBiZSB1c2VkIGJ5IG5vZGUgcG9pbnRlci4gKi8JCVwK KyAgICBhc3NlcnQoKCh1aW50cHRyX3QpKGFfbm9kZSkgJiAweDEpID09IDApOwkJCQlcCisgICAg cmJ0bl9sZWZ0X3NldChhX3R5cGUsIGFfZmllbGQsIChhX25vZGUpLCBOVUxMKTsJXAorICAgIHJi dG5fcmlnaHRfc2V0KGFfdHlwZSwgYV9maWVsZCwgKGFfbm9kZSksIE5VTEwpOwlcCisgICAgcmJ0 bl9yZWRfc2V0KGFfdHlwZSwgYV9maWVsZCwgKGFfbm9kZSkpOwkJCQlcCit9IHdoaWxlICgwKQor I2Vsc2UKKy8qIFJpZ2h0IGFjY2Vzc29ycy4gKi8KKyNkZWZpbmUgcmJ0bl9yaWdodF9nZXQoYV90 eXBlLCBhX2ZpZWxkLCBhX25vZGUpCQkJCVwKKyAgICAoKGFfbm9kZSktPmFfZmllbGQucmJuX3Jp Z2h0KQorI2RlZmluZSByYnRuX3JpZ2h0X3NldChhX3R5cGUsIGFfZmllbGQsIGFfbm9kZSwgYV9y aWdodCkgZG8gewkJXAorICAgIChhX25vZGUpLT5hX2ZpZWxkLnJibl9yaWdodCA9IGFfcmlnaHQ7 CQkJCVwKK30gd2hpbGUgKDApCisKKy8qIENvbG9yIGFjY2Vzc29ycy4gKi8KKyNkZWZpbmUgcmJ0 bl9yZWRfZ2V0KGFfdHlwZSwgYV9maWVsZCwgYV9ub2RlKQkJCQlcCisgICAgKChhX25vZGUpLT5h X2ZpZWxkLnJibl9yZWQpCisjZGVmaW5lIHJidG5fY29sb3Jfc2V0KGFfdHlwZSwgYV9maWVsZCwg YV9ub2RlLCBhX3JlZCkgZG8gewkJXAorICAgIChhX25vZGUpLT5hX2ZpZWxkLnJibl9yZWQgPSAo YV9yZWQpOwkJCQlcCit9IHdoaWxlICgwKQorI2RlZmluZSByYnRuX3JlZF9zZXQoYV90eXBlLCBh X2ZpZWxkLCBhX25vZGUpIGRvIHsJCQlcCisgICAgKGFfbm9kZSktPmFfZmllbGQucmJuX3JlZCA9 IHRydWU7CQkJCQlcCit9IHdoaWxlICgwKQorI2RlZmluZSByYnRuX2JsYWNrX3NldChhX3R5cGUs IGFfZmllbGQsIGFfbm9kZSkgZG8gewkJCVwKKyAgICAoYV9ub2RlKS0+YV9maWVsZC5yYm5fcmVk ID0gZmFsc2U7CQkJCQlcCit9IHdoaWxlICgwKQorCisvKiBOb2RlIGluaXRpYWxpemVyLiAqLwor I2RlZmluZSByYnRfbm9kZV9uZXcoYV90eXBlLCBhX2ZpZWxkLCBhX3JidCwgYV9ub2RlKSBkbyB7 CQlcCisgICAgcmJ0bl9sZWZ0X3NldChhX3R5cGUsIGFfZmllbGQsIChhX25vZGUpLCBOVUxMKTsJ XAorICAgIHJidG5fcmlnaHRfc2V0KGFfdHlwZSwgYV9maWVsZCwgKGFfbm9kZSksIE5VTEwpOwlc CisgICAgcmJ0bl9yZWRfc2V0KGFfdHlwZSwgYV9maWVsZCwgKGFfbm9kZSkpOwkJCQlcCit9IHdo aWxlICgwKQorI2VuZGlmCisKKy8qIFRyZWUgaW5pdGlhbGl6ZXIuICovCisjZGVmaW5lIHJiX25l dyhhX3R5cGUsIGFfZmllbGQsIGFfcmJ0KSBkbyB7CQkJCVwKKyAgICAoYV9yYnQpLT5yYnRfcm9v dCA9IE5VTEw7CQkJCQkJXAorfSB3aGlsZSAoMCkKKworLyogSW50ZXJuYWwgdXRpbGl0eSBtYWNy b3MuICovCisjZGVmaW5lIHJidG5fZmlyc3QoYV90eXBlLCBhX2ZpZWxkLCBhX3JidCwgYV9yb290 LCByX25vZGUpIGRvIHsJCVwKKyAgICAocl9ub2RlKSA9IChhX3Jvb3QpOwkJCQkJCVwKKyAgICBp ZiAoKHJfbm9kZSkgIT0gTlVMTCkgewkJCQkJCVwKKwlmb3IgKDsJCQkJCQkJCVwKKwkgIHJidG5f bGVmdF9nZXQoYV90eXBlLCBhX2ZpZWxkLCAocl9ub2RlKSkgIT0gTlVMTDsJCVwKKwkgIChyX25v ZGUpID0gcmJ0bl9sZWZ0X2dldChhX3R5cGUsIGFfZmllbGQsIChyX25vZGUpKSkgewlcCisJfQkJ CQkJCQkJXAorICAgIH0JCQkJCQkJCQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIHJidG5fbGFz dChhX3R5cGUsIGFfZmllbGQsIGFfcmJ0LCBhX3Jvb3QsIHJfbm9kZSkgZG8gewkJXAorICAgIChy X25vZGUpID0gKGFfcm9vdCk7CQkJCQkJXAorICAgIGlmICgocl9ub2RlKSAhPSBOVUxMKSB7CQkJ CQkJXAorCWZvciAoOyByYnRuX3JpZ2h0X2dldChhX3R5cGUsIGFfZmllbGQsIChyX25vZGUpKSAh PSBOVUxMOwlcCisJICAocl9ub2RlKSA9IHJidG5fcmlnaHRfZ2V0KGFfdHlwZSwgYV9maWVsZCwg KHJfbm9kZSkpKSB7CVwKKwl9CQkJCQkJCQlcCisgICAgfQkJCQkJCQkJCVwKK30gd2hpbGUgKDAp CisKKyNkZWZpbmUgcmJ0bl9yb3RhdGVfbGVmdChhX3R5cGUsIGFfZmllbGQsIGFfbm9kZSwgcl9u b2RlKSBkbyB7CQlcCisgICAgKHJfbm9kZSkgPSByYnRuX3JpZ2h0X2dldChhX3R5cGUsIGFfZmll bGQsIChhX25vZGUpKTsJCVwKKyAgICByYnRuX3JpZ2h0X3NldChhX3R5cGUsIGFfZmllbGQsIChh X25vZGUpLAkJCQlcCisgICAgICByYnRuX2xlZnRfZ2V0KGFfdHlwZSwgYV9maWVsZCwgKHJfbm9k ZSkpKTsJCQlcCisgICAgcmJ0bl9sZWZ0X3NldChhX3R5cGUsIGFfZmllbGQsIChyX25vZGUpLCAo YV9ub2RlKSk7CQkJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSByYnRuX3JvdGF0ZV9yaWdodChh X3R5cGUsIGFfZmllbGQsIGFfbm9kZSwgcl9ub2RlKSBkbyB7CQlcCisgICAgKHJfbm9kZSkgPSBy YnRuX2xlZnRfZ2V0KGFfdHlwZSwgYV9maWVsZCwgKGFfbm9kZSkpOwkJXAorICAgIHJidG5fbGVm dF9zZXQoYV90eXBlLCBhX2ZpZWxkLCAoYV9ub2RlKSwJCQkJXAorICAgICAgcmJ0bl9yaWdodF9n ZXQoYV90eXBlLCBhX2ZpZWxkLCAocl9ub2RlKSkpOwkJCVwKKyAgICByYnRuX3JpZ2h0X3NldChh X3R5cGUsIGFfZmllbGQsIChyX25vZGUpLCAoYV9ub2RlKSk7CQlcCit9IHdoaWxlICgwKQorCisj ZGVmaW5lIHJiX3N1bW1hcml6ZWRfb25seV9mYWxzZSguLi4pCisjZGVmaW5lIHJiX3N1bW1hcml6 ZWRfb25seV90cnVlKC4uLikgX19WQV9BUkdTX18KKyNkZWZpbmUgcmJfZW1wdHlfc3VtbWFyaXpl KGFfbm9kZSwgYV9sY2hpbGQsIGFfcmNoaWxkKSBmYWxzZQorCisvKgorICogVGhlIHJiX3Byb3Rv KCkgYW5kIHJiX3N1bW1hcml6ZWRfcHJvdG8oKSBtYWNyb3MgZ2VuZXJhdGUgZnVuY3Rpb24gcHJv dG90eXBlcworICogdGhhdCBjb3JyZXNwb25kIHRvIHRoZSBmdW5jdGlvbnMgZ2VuZXJhdGVkIGJ5 IGFuIGVxdWl2YWxlbnRseSBwYXJhbWV0ZXJpemVkCisgKiBjYWxsIHRvIHJiX2dlbigpIG9yIHJi X3N1bW1hcml6ZWRfZ2VuKCksIHJlc3BlY3RpdmVseS4KKyAqLworCisjZGVmaW5lIHJiX3Byb3Rv KGFfYXR0ciwgYV9wcmVmaXgsIGFfcmJ0X3R5cGUsIGFfdHlwZSkJCQlcCisgICAgcmJfcHJvdG9f aW1wbChhX2F0dHIsIGFfcHJlZml4LCBhX3JidF90eXBlLCBhX3R5cGUsIGZhbHNlKQorI2RlZmlu ZSByYl9zdW1tYXJpemVkX3Byb3RvKGFfYXR0ciwgYV9wcmVmaXgsIGFfcmJ0X3R5cGUsIGFfdHlw ZSkJXAorICAgIHJiX3Byb3RvX2ltcGwoYV9hdHRyLCBhX3ByZWZpeCwgYV9yYnRfdHlwZSwgYV90 eXBlLCB0cnVlKQorI2RlZmluZSByYl9wcm90b19pbXBsKGFfYXR0ciwgYV9wcmVmaXgsIGFfcmJ0 X3R5cGUsIGFfdHlwZSwJCVwKKyAgICBhX2lzX3N1bW1hcml6ZWQpCQkJCQkJCVwKK2FfYXR0ciB2 b2lkCQkJCQkJCQlcCithX3ByZWZpeCMjbmV3KGFfcmJ0X3R5cGUgKnJidHJlZSk7CQkJCQlcCith X2F0dHIgYm9vbAkJCQkJCQkJXAorYV9wcmVmaXgjI2VtcHR5KGFfcmJ0X3R5cGUgKnJidHJlZSk7 CQkJCQlcCithX2F0dHIgYV90eXBlICoJCQkJCQkJCVwKK2FfcHJlZml4IyNmaXJzdChhX3JidF90 eXBlICpyYnRyZWUpOwkJCQkJXAorYV9hdHRyIGFfdHlwZSAqCQkJCQkJCQlcCithX3ByZWZpeCMj bGFzdChhX3JidF90eXBlICpyYnRyZWUpOwkJCQkJXAorYV9hdHRyIGFfdHlwZSAqCQkJCQkJCQlc CithX3ByZWZpeCMjbmV4dChhX3JidF90eXBlICpyYnRyZWUsIGFfdHlwZSAqbm9kZSk7CQkJXAor YV9hdHRyIGFfdHlwZSAqCQkJCQkJCQlcCithX3ByZWZpeCMjcHJldihhX3JidF90eXBlICpyYnRy ZWUsIGFfdHlwZSAqbm9kZSk7CQkJXAorYV9hdHRyIGFfdHlwZSAqCQkJCQkJCQlcCithX3ByZWZp eCMjc2VhcmNoKGFfcmJ0X3R5cGUgKnJidHJlZSwgY29uc3QgYV90eXBlICprZXkpOwkJXAorYV9h dHRyIGFfdHlwZSAqCQkJCQkJCQlcCithX3ByZWZpeCMjbnNlYXJjaChhX3JidF90eXBlICpyYnRy ZWUsIGNvbnN0IGFfdHlwZSAqa2V5KTsJCVwKK2FfYXR0ciBhX3R5cGUgKgkJCQkJCQkJXAorYV9w cmVmaXgjI3BzZWFyY2goYV9yYnRfdHlwZSAqcmJ0cmVlLCBjb25zdCBhX3R5cGUgKmtleSk7CQlc CithX2F0dHIgdm9pZAkJCQkJCQkJXAorYV9wcmVmaXgjI2luc2VydChhX3JidF90eXBlICpyYnRy ZWUsIGFfdHlwZSAqbm9kZSk7CQkJXAorYV9hdHRyIHZvaWQJCQkJCQkJCVwKK2FfcHJlZml4IyNy ZW1vdmUoYV9yYnRfdHlwZSAqcmJ0cmVlLCBhX3R5cGUgKm5vZGUpOwkJCVwKK2FfYXR0ciBhX3R5 cGUgKgkJCQkJCQkJXAorYV9wcmVmaXgjI2l0ZXIoYV9yYnRfdHlwZSAqcmJ0cmVlLCBhX3R5cGUg KnN0YXJ0LCBhX3R5cGUgKigqY2IpKAlcCisgIGFfcmJ0X3R5cGUgKiwgYV90eXBlICosIHZvaWQg KiksIHZvaWQgKmFyZyk7CQkJCVwKK2FfYXR0ciBhX3R5cGUgKgkJCQkJCQkJXAorYV9wcmVmaXgj I3JldmVyc2VfaXRlcihhX3JidF90eXBlICpyYnRyZWUsIGFfdHlwZSAqc3RhcnQsCQlcCisgIGFf dHlwZSAqKCpjYikoYV9yYnRfdHlwZSAqLCBhX3R5cGUgKiwgdm9pZCAqKSwgdm9pZCAqYXJnKTsJ CVwKK2FfYXR0ciB2b2lkCQkJCQkJCQlcCithX3ByZWZpeCMjZGVzdHJveShhX3JidF90eXBlICpy YnRyZWUsIHZvaWQgKCpjYikoYV90eXBlICosIHZvaWQgKiksCVwKKyAgdm9pZCAqYXJnKTsJCQkJ CQkJCVwKKy8qIEV4dGVuZGVkIEFQSSAqLwkJCQkJCQlcCityYl9zdW1tYXJpemVkX29ubHlfIyNh X2lzX3N1bW1hcml6ZWQoCQkJCQlcCithX2F0dHIgdm9pZAkJCQkJCQkJXAorYV9wcmVmaXgjI3Vw ZGF0ZV9zdW1tYXJpZXMoYV9yYnRfdHlwZSAqcmJ0cmVlLCBhX3R5cGUgKm5vZGUpOwkJXAorYV9h dHRyIGJvb2wJCQkJCQkJCVwKK2FfcHJlZml4IyNlbXB0eV9maWx0ZXJlZChhX3JidF90eXBlICpy YnRyZWUsCQkJCVwKKyAgICBib29sICgqZmlsdGVyX25vZGUpKHZvaWQgKiwgYV90eXBlICopLAkJ CQlcCisgICAgYm9vbCAoKmZpbHRlcl9zdWJ0cmVlKSh2b2lkICosIGFfdHlwZSAqKSwJCQkJXAor ICAgIHZvaWQgKmZpbHRlcl9jdHgpOwkJCQkJCQlcCithX2F0dHIgYV90eXBlICoJCQkJCQkJCVwK K2FfcHJlZml4IyNmaXJzdF9maWx0ZXJlZChhX3JidF90eXBlICpyYnRyZWUsCQkJCVwKKyAgICBi b29sICgqZmlsdGVyX25vZGUpKHZvaWQgKiwgYV90eXBlICopLAkJCQlcCisgICAgYm9vbCAoKmZp bHRlcl9zdWJ0cmVlKSh2b2lkICosIGFfdHlwZSAqKSwJCQkJXAorICAgIHZvaWQgKmZpbHRlcl9j dHgpOwkJCQkJCQlcCithX2F0dHIgYV90eXBlICoJCQkJCQkJCVwKK2FfcHJlZml4IyNsYXN0X2Zp bHRlcmVkKGFfcmJ0X3R5cGUgKnJidHJlZSwJCQkJXAorICAgIGJvb2wgKCpmaWx0ZXJfbm9kZSko dm9pZCAqLCBhX3R5cGUgKiksCQkJCVwKKyAgICBib29sICgqZmlsdGVyX3N1YnRyZWUpKHZvaWQg KiwgYV90eXBlICopLAkJCQlcCisgICAgdm9pZCAqZmlsdGVyX2N0eCk7CQkJCQkJCVwKK2FfYXR0 ciBhX3R5cGUgKgkJCQkJCQkJXAorYV9wcmVmaXgjI25leHRfZmlsdGVyZWQoYV9yYnRfdHlwZSAq cmJ0cmVlLCBhX3R5cGUgKm5vZGUsCQlcCisgICAgYm9vbCAoKmZpbHRlcl9ub2RlKSh2b2lkICos IGFfdHlwZSAqKSwJCQkJXAorICAgIGJvb2wgKCpmaWx0ZXJfc3VidHJlZSkodm9pZCAqLCBhX3R5 cGUgKiksCQkJCVwKKyAgICB2b2lkICpmaWx0ZXJfY3R4KTsJCQkJCQkJXAorYV9hdHRyIGFfdHlw ZSAqCQkJCQkJCQlcCithX3ByZWZpeCMjcHJldl9maWx0ZXJlZChhX3JidF90eXBlICpyYnRyZWUs IGFfdHlwZSAqbm9kZSwJCVwKKyAgICBib29sICgqZmlsdGVyX25vZGUpKHZvaWQgKiwgYV90eXBl ICopLAkJCQlcCisgICAgYm9vbCAoKmZpbHRlcl9zdWJ0cmVlKSh2b2lkICosIGFfdHlwZSAqKSwJ CQkJXAorICAgIHZvaWQgKmZpbHRlcl9jdHgpOwkJCQkJCQlcCithX2F0dHIgYV90eXBlICoJCQkJ CQkJCVwKK2FfcHJlZml4IyNzZWFyY2hfZmlsdGVyZWQoYV9yYnRfdHlwZSAqcmJ0cmVlLCBjb25z dCBhX3R5cGUgKmtleSwJXAorICAgIGJvb2wgKCpmaWx0ZXJfbm9kZSkodm9pZCAqLCBhX3R5cGUg KiksCQkJCVwKKyAgICBib29sICgqZmlsdGVyX3N1YnRyZWUpKHZvaWQgKiwgYV90eXBlICopLAkJ CQlcCisgICAgdm9pZCAqZmlsdGVyX2N0eCk7CQkJCQkJCVwKK2FfYXR0ciBhX3R5cGUgKgkJCQkJ CQkJXAorYV9wcmVmaXgjI25zZWFyY2hfZmlsdGVyZWQoYV9yYnRfdHlwZSAqcmJ0cmVlLCBjb25z dCBhX3R5cGUgKmtleSwJXAorICAgIGJvb2wgKCpmaWx0ZXJfbm9kZSkodm9pZCAqLCBhX3R5cGUg KiksCQkJCVwKKyAgICBib29sICgqZmlsdGVyX3N1YnRyZWUpKHZvaWQgKiwgYV90eXBlICopLAkJ CQlcCisgICAgdm9pZCAqZmlsdGVyX2N0eCk7CQkJCQkJCVwKK2FfYXR0ciBhX3R5cGUgKgkJCQkJ CQkJXAorYV9wcmVmaXgjI3BzZWFyY2hfZmlsdGVyZWQoYV9yYnRfdHlwZSAqcmJ0cmVlLCBjb25z dCBhX3R5cGUgKmtleSwJXAorICAgIGJvb2wgKCpmaWx0ZXJfbm9kZSkodm9pZCAqLCBhX3R5cGUg KiksCQkJCVwKKyAgICBib29sICgqZmlsdGVyX3N1YnRyZWUpKHZvaWQgKiwgYV90eXBlICopLAkJ CQlcCisgICAgdm9pZCAqZmlsdGVyX2N0eCk7CQkJCQkJCVwKK2FfYXR0ciBhX3R5cGUgKgkJCQkJ CQkJXAorYV9wcmVmaXgjI2l0ZXJfZmlsdGVyZWQoYV9yYnRfdHlwZSAqcmJ0cmVlLCBhX3R5cGUg KnN0YXJ0LAkJXAorICAgIGFfdHlwZSAqKCpjYikoYV9yYnRfdHlwZSAqLCBhX3R5cGUgKiwgdm9p ZCAqKSwgdm9pZCAqYXJnLAkJXAorICAgIGJvb2wgKCpmaWx0ZXJfbm9kZSkodm9pZCAqLCBhX3R5 cGUgKiksCQkJCVwKKyAgICBib29sICgqZmlsdGVyX3N1YnRyZWUpKHZvaWQgKiwgYV90eXBlICop LAkJCQlcCisgICAgdm9pZCAqZmlsdGVyX2N0eCk7CQkJCQkJCVwKK2FfYXR0ciBhX3R5cGUgKgkJ CQkJCQkJXAorYV9wcmVmaXgjI3JldmVyc2VfaXRlcl9maWx0ZXJlZChhX3JidF90eXBlICpyYnRy ZWUsIGFfdHlwZSAqc3RhcnQsCVwKKyAgYV90eXBlICooKmNiKShhX3JidF90eXBlICosIGFfdHlw ZSAqLCB2b2lkICopLCB2b2lkICphcmcsCQlcCisgICAgYm9vbCAoKmZpbHRlcl9ub2RlKSh2b2lk ICosIGFfdHlwZSAqKSwJCQkJXAorICAgIGJvb2wgKCpmaWx0ZXJfc3VidHJlZSkodm9pZCAqLCBh X3R5cGUgKiksCQkJCVwKKyAgICB2b2lkICpmaWx0ZXJfY3R4KTsJCQkJCQkJXAorKQorCisvKgor ICogVGhlIHJiX2dlbigpIG1hY3JvIGdlbmVyYXRlcyBhIHR5cGUtc3BlY2lmaWMgcmVkLWJsYWNr IHRyZWUgaW1wbGVtZW50YXRpb24sCisgKiBiYXNlZCBvbiB0aGUgYWJvdmUgY3BwIG1hY3Jvcy4K KyAqIEFyZ3VtZW50czoKKyAqCisgKiAgIGFfYXR0cjoKKyAqICAgICBGdW5jdGlvbiBhdHRyaWJ1 dGUgZm9yIGdlbmVyYXRlZCBmdW5jdGlvbnMgKGV4OiBzdGF0aWMpLgorICogICBhX3ByZWZpeDoK KyAqICAgICBQcmVmaXggZm9yIGdlbmVyYXRlZCBmdW5jdGlvbnMgKGV4OiBleF8pLgorICogICBh X3JiX3R5cGU6CisgKiAgICAgVHlwZSBmb3IgcmVkLWJsYWNrIHRyZWUgZGF0YSBzdHJ1Y3R1cmUg KGV4OiBleF90KS4KKyAqICAgYV90eXBlOgorICogICAgIFR5cGUgZm9yIHJlZC1ibGFjayB0cmVl IG5vZGUgZGF0YSBzdHJ1Y3R1cmUgKGV4OiBleF9ub2RlX3QpLgorICogICBhX2ZpZWxkOgorICog ICAgIE5hbWUgb2YgcmVkLWJsYWNrIHRyZWUgbm9kZSBsaW5rYWdlIChleDogZXhfbGluaykuCisg KiAgIGFfY21wOgorICogICAgIE5vZGUgY29tcGFyaXNvbiBmdW5jdGlvbiBuYW1lLCB3aXRoIHRo ZSBmb2xsb3dpbmcgcHJvdG90eXBlOgorICoKKyAqICAgICBpbnQgYV9jbXAoYV90eXBlICphX25v ZGUsIGFfdHlwZSAqYV9vdGhlcik7CisgKiAgICAgICAgICAgICAgICAgICAgICAgIF5eXl5eXgor ICogICAgICAgICAgICAgICAgICAgICAgICBvciBhX2tleQorICogICAgIEludGVycHJldGF0aW9u IG9mIGNvbXBhcmlzb24gZnVuY3Rpb24gcmV0dXJuIHZhbHVlczoKKyAqICAgICAgIC0xIDogYV9u b2RlIDwgIGFfb3RoZXIKKyAqICAgICAgICAwIDogYV9ub2RlID09IGFfb3RoZXIKKyAqICAgICAg ICAxIDogYV9ub2RlID4gIGFfb3RoZXIKKyAqICAgICBJbiBhbGwgY2FzZXMsIHRoZSBhX25vZGUg b3IgYV9rZXkgbWFjcm8gYXJndW1lbnQgaXMgdGhlIGZpcnN0IGFyZ3VtZW50IHRvCisgKiAgICAg dGhlIGNvbXBhcmlzb24gZnVuY3Rpb24sIHdoaWNoIG1ha2VzIGl0IHBvc3NpYmxlIHRvIHdyaXRl IGNvbXBhcmlzb24KKyAqICAgICBmdW5jdGlvbnMgdGhhdCB0cmVhdCB0aGUgZmlyc3QgYXJndW1l bnQgc3BlY2lhbGx5LiAgYV9jbXAgbXVzdCBiZSBhIHRvdGFsCisgKiAgICAgb3JkZXIgb24gdmFs dWVzIGluc2VydGVkIGludG8gdGhlIHRyZWUgLS0gZHVwbGljYXRlcyBhcmUgbm90IGFsbG93ZWQu CisgKgorICogQXNzdW1pbmcgdGhlIGZvbGxvd2luZyBzZXR1cDoKKyAqCisgKiAgIHR5cGVkZWYg c3RydWN0IGV4X25vZGVfcyBleF9ub2RlX3Q7CisgKiAgIHN0cnVjdCBleF9ub2RlX3MgeworICog ICAgICAgcmJfbm9kZShleF9ub2RlX3QpIGV4X2xpbms7CisgKiAgIH07CisgKiAgIHR5cGVkZWYg cmJfdHJlZShleF9ub2RlX3QpIGV4X3Q7CisgKiAgIHJiX2dlbihzdGF0aWMsIGV4XywgZXhfdCwg ZXhfbm9kZV90LCBleF9saW5rLCBleF9jbXApCisgKgorICogVGhlIGZvbGxvd2luZyBBUEkgaXMg Z2VuZXJhdGVkOgorICoKKyAqICAgc3RhdGljIHZvaWQKKyAqICAgZXhfbmV3KGV4X3QgKnRyZWUp OworICogICAgICAgRGVzY3JpcHRpb246IEluaXRpYWxpemUgYSByZWQtYmxhY2sgdHJlZSBzdHJ1 Y3R1cmUuCisgKiAgICAgICBBcmdzOgorICogICAgICAgICB0cmVlOiBQb2ludGVyIHRvIGFuIHVu aW5pdGlhbGl6ZWQgcmVkLWJsYWNrIHRyZWUgb2JqZWN0LgorICoKKyAqICAgc3RhdGljIGJvb2wK KyAqICAgZXhfZW1wdHkoZXhfdCAqdHJlZSk7CisgKiAgICAgICBEZXNjcmlwdGlvbjogRGV0ZXJt aW5lIHdoZXRoZXIgdHJlZSBpcyBlbXB0eS4KKyAqICAgICAgIEFyZ3M6CisgKiAgICAgICAgIHRy ZWU6IFBvaW50ZXIgdG8gYW4gaW5pdGlhbGl6ZWQgcmVkLWJsYWNrIHRyZWUgb2JqZWN0LgorICog ICAgICAgUmV0OiBUcnVlIGlmIHRyZWUgaXMgZW1wdHksIGZhbHNlIG90aGVyd2lzZS4KKyAqCisg KiAgIHN0YXRpYyBleF9ub2RlX3QgKgorICogICBleF9maXJzdChleF90ICp0cmVlKTsKKyAqICAg c3RhdGljIGV4X25vZGVfdCAqCisgKiAgIGV4X2xhc3QoZXhfdCAqdHJlZSk7CisgKiAgICAgICBE ZXNjcmlwdGlvbjogR2V0IHRoZSBmaXJzdC9sYXN0IG5vZGUgaW4gdHJlZS4KKyAqICAgICAgIEFy Z3M6CisgKiAgICAgICAgIHRyZWU6IFBvaW50ZXIgdG8gYW4gaW5pdGlhbGl6ZWQgcmVkLWJsYWNr IHRyZWUgb2JqZWN0LgorICogICAgICAgUmV0OiBGaXJzdC9sYXN0IG5vZGUgaW4gdHJlZSwgb3Ig TlVMTCBpZiB0cmVlIGlzIGVtcHR5LgorICoKKyAqICAgc3RhdGljIGV4X25vZGVfdCAqCisgKiAg IGV4X25leHQoZXhfdCAqdHJlZSwgZXhfbm9kZV90ICpub2RlKTsKKyAqICAgc3RhdGljIGV4X25v ZGVfdCAqCisgKiAgIGV4X3ByZXYoZXhfdCAqdHJlZSwgZXhfbm9kZV90ICpub2RlKTsKKyAqICAg ICAgIERlc2NyaXB0aW9uOiBHZXQgbm9kZSdzIHN1Y2Nlc3Nvci9wcmVkZWNlc3Nvci4KKyAqICAg ICAgIEFyZ3M6CisgKiAgICAgICAgIHRyZWU6IFBvaW50ZXIgdG8gYW4gaW5pdGlhbGl6ZWQgcmVk LWJsYWNrIHRyZWUgb2JqZWN0LgorICogICAgICAgICBub2RlOiBBIG5vZGUgaW4gdHJlZS4KKyAq ICAgICAgIFJldDogbm9kZSdzIHN1Y2Nlc3Nvci9wcmVkZWNlc3NvciBpbiB0cmVlLCBvciBOVUxM IGlmIG5vZGUgaXMKKyAqICAgICAgICAgICAgbGFzdC9maXJzdC4KKyAqCisgKiAgIHN0YXRpYyBl eF9ub2RlX3QgKgorICogICBleF9zZWFyY2goZXhfdCAqdHJlZSwgY29uc3QgZXhfbm9kZV90ICpr ZXkpOworICogICAgICAgRGVzY3JpcHRpb246IFNlYXJjaCBmb3Igbm9kZSB0aGF0IG1hdGNoZXMg a2V5LgorICogICAgICAgQXJnczoKKyAqICAgICAgICAgdHJlZTogUG9pbnRlciB0byBhbiBpbml0 aWFsaXplZCByZWQtYmxhY2sgdHJlZSBvYmplY3QuCisgKiAgICAgICAgIGtleSA6IFNlYXJjaCBr ZXkuCisgKiAgICAgICBSZXQ6IE5vZGUgaW4gdHJlZSB0aGF0IG1hdGNoZXMga2V5LCBvciBOVUxM IGlmIG5vIG1hdGNoLgorICoKKyAqICAgc3RhdGljIGV4X25vZGVfdCAqCisgKiAgIGV4X25zZWFy Y2goZXhfdCAqdHJlZSwgY29uc3QgZXhfbm9kZV90ICprZXkpOworICogICBzdGF0aWMgZXhfbm9k ZV90ICoKKyAqICAgZXhfcHNlYXJjaChleF90ICp0cmVlLCBjb25zdCBleF9ub2RlX3QgKmtleSk7 CisgKiAgICAgICBEZXNjcmlwdGlvbjogU2VhcmNoIGZvciBub2RlIHRoYXQgbWF0Y2hlcyBrZXku ICBJZiBubyBtYXRjaCBpcyBmb3VuZCwKKyAqICAgICAgICAgICAgICAgICAgICByZXR1cm4gd2hh dCB3b3VsZCBiZSBrZXkncyBzdWNjZXNzb3IvcHJlZGVjZXNzb3IsIHdlcmUKKyAqICAgICAgICAg ICAgICAgICAgICBrZXkgaW4gdHJlZS4KKyAqICAgICAgIEFyZ3M6CisgKiAgICAgICAgIHRyZWU6 IFBvaW50ZXIgdG8gYW4gaW5pdGlhbGl6ZWQgcmVkLWJsYWNrIHRyZWUgb2JqZWN0LgorICogICAg ICAgICBrZXkgOiBTZWFyY2gga2V5LgorICogICAgICAgUmV0OiBOb2RlIGluIHRyZWUgdGhhdCBt YXRjaGVzIGtleSwgb3IgaWYgbm8gbWF0Y2gsIGh5cG90aGV0aWNhbCBub2RlJ3MKKyAqICAgICAg ICAgICAgc3VjY2Vzc29yL3ByZWRlY2Vzc29yIChOVUxMIGlmIG5vIHN1Y2Nlc3Nvci9wcmVkZWNl c3NvcikuCisgKgorICogICBzdGF0aWMgdm9pZAorICogICBleF9pbnNlcnQoZXhfdCAqdHJlZSwg ZXhfbm9kZV90ICpub2RlKTsKKyAqICAgICAgIERlc2NyaXB0aW9uOiBJbnNlcnQgbm9kZSBpbnRv IHRyZWUuCisgKiAgICAgICBBcmdzOgorICogICAgICAgICB0cmVlOiBQb2ludGVyIHRvIGFuIGlu aXRpYWxpemVkIHJlZC1ibGFjayB0cmVlIG9iamVjdC4KKyAqICAgICAgICAgbm9kZTogTm9kZSB0 byBiZSBpbnNlcnRlZCBpbnRvIHRyZWUuCisgKgorICogICBzdGF0aWMgdm9pZAorICogICBleF9y ZW1vdmUoZXhfdCAqdHJlZSwgZXhfbm9kZV90ICpub2RlKTsKKyAqICAgICAgIERlc2NyaXB0aW9u OiBSZW1vdmUgbm9kZSBmcm9tIHRyZWUuCisgKiAgICAgICBBcmdzOgorICogICAgICAgICB0cmVl OiBQb2ludGVyIHRvIGFuIGluaXRpYWxpemVkIHJlZC1ibGFjayB0cmVlIG9iamVjdC4KKyAqICAg ICAgICAgbm9kZTogTm9kZSBpbiB0cmVlIHRvIGJlIHJlbW92ZWQuCisgKgorICogICBzdGF0aWMg ZXhfbm9kZV90ICoKKyAqICAgZXhfaXRlcihleF90ICp0cmVlLCBleF9ub2RlX3QgKnN0YXJ0LCBl eF9ub2RlX3QgKigqY2IpKGV4X3QgKiwKKyAqICAgICBleF9ub2RlX3QgKiwgdm9pZCAqKSwgdm9p ZCAqYXJnKTsKKyAqICAgc3RhdGljIGV4X25vZGVfdCAqCisgKiAgIGV4X3JldmVyc2VfaXRlcihl eF90ICp0cmVlLCBleF9ub2RlX3QgKnN0YXJ0LCBleF9ub2RlICooKmNiKShleF90ICosCisgKiAg ICAgZXhfbm9kZV90ICosIHZvaWQgKiksIHZvaWQgKmFyZyk7CisgKiAgICAgICBEZXNjcmlwdGlv bjogSXRlcmF0ZSBmb3J3YXJkL2JhY2t3YXJkIG92ZXIgdHJlZSwgc3RhcnRpbmcgYXQgbm9kZS4g IElmCisgKiAgICAgICAgICAgICAgICAgICAgdHJlZSBpcyBtb2RpZmllZCwgaXRlcmF0aW9uIG11 c3QgYmUgaW1tZWRpYXRlbHkKKyAqICAgICAgICAgICAgICAgICAgICB0ZXJtaW5hdGVkIGJ5IHRo ZSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGNhdXNlcyB0aGUKKyAqICAgICAgICAgICAgICAgICAg ICBtb2RpZmljYXRpb24uCisgKiAgICAgICBBcmdzOgorICogICAgICAgICB0cmVlIDogUG9pbnRl ciB0byBhbiBpbml0aWFsaXplZCByZWQtYmxhY2sgdHJlZSBvYmplY3QuCisgKiAgICAgICAgIHN0 YXJ0OiBOb2RlIGF0IHdoaWNoIHRvIHN0YXJ0IGl0ZXJhdGlvbiwgb3IgTlVMTCB0byBzdGFydCBh dAorICogICAgICAgICAgICAgICAgZmlyc3QvbGFzdCBub2RlLgorICogICAgICAgICBjYiAgIDog Q2FsbGJhY2sgZnVuY3Rpb24sIHdoaWNoIGlzIGNhbGxlZCBmb3IgZWFjaCBub2RlIGR1cmluZwor ICogICAgICAgICAgICAgICAgaXRlcmF0aW9uLiAgVW5kZXIgbm9ybWFsIGNpcmN1bXN0YW5jZXMg dGhlIGNhbGxiYWNrIGZ1bmN0aW9uCisgKiAgICAgICAgICAgICAgICBzaG91bGQgcmV0dXJuIE5V TEwsIHdoaWNoIGNhdXNlcyBpdGVyYXRpb24gdG8gY29udGludWUuICBJZiBhCisgKiAgICAgICAg ICAgICAgICBjYWxsYmFjayBmdW5jdGlvbiByZXR1cm5zIG5vbi1OVUxMLCBpdGVyYXRpb24gaXMg aW1tZWRpYXRlbHkKKyAqICAgICAgICAgICAgICAgIHRlcm1pbmF0ZWQgYW5kIHRoZSBub24tTlVM TCByZXR1cm4gdmFsdWUgaXMgcmV0dXJuZWQgYnkgdGhlCisgKiAgICAgICAgICAgICAgICBpdGVy YXRvci4gIFRoaXMgaXMgdXNlZnVsIGZvciByZS1zdGFydGluZyBpdGVyYXRpb24gYWZ0ZXIKKyAq ICAgICAgICAgICAgICAgIG1vZGlmeWluZyB0cmVlLgorICogICAgICAgICBhcmcgIDogT3BhcXVl IHBvaW50ZXIgcGFzc2VkIHRvIGNiKCkuCisgKiAgICAgICBSZXQ6IE5VTEwgaWYgaXRlcmF0aW9u IGNvbXBsZXRlZCwgb3IgdGhlIG5vbi1OVUxMIGNhbGxiYWNrIHJldHVybiB2YWx1ZQorICogICAg ICAgICAgICB0aGF0IGNhdXNlZCB0ZXJtaW5hdGlvbiBvZiB0aGUgaXRlcmF0aW9uLgorICoKKyAq ICAgc3RhdGljIHZvaWQKKyAqICAgZXhfZGVzdHJveShleF90ICp0cmVlLCB2b2lkICgqY2IpKGV4 X25vZGVfdCAqLCB2b2lkICopLCB2b2lkICphcmcpOworICogICAgICAgRGVzY3JpcHRpb246IEl0 ZXJhdGUgb3ZlciB0aGUgdHJlZSB3aXRoIHBvc3Qtb3JkZXIgdHJhdmVyc2FsLCByZW1vdmUKKyAq ICAgICAgICAgICAgICAgICAgICBlYWNoIG5vZGUsIGFuZCBydW4gdGhlIGNhbGxiYWNrIGlmIG5v bi1udWxsLiAgVGhpcyBpcworICogICAgICAgICAgICAgICAgICAgIHVzZWQgZm9yIGRlc3Ryb3lp bmcgYSB0cmVlIHdpdGhvdXQgcGF5aW5nIHRoZSBjb3N0IHRvCisgKiAgICAgICAgICAgICAgICAg ICAgcmViYWxhbmNlIGl0LiAgVGhlIHRyZWUgbXVzdCBub3QgYmUgb3RoZXJ3aXNlIGFsdGVyZWQK KyAqICAgICAgICAgICAgICAgICAgICBkdXJpbmcgdHJhdmVyc2FsLgorICogICAgICAgQXJnczoK KyAqICAgICAgICAgdHJlZTogUG9pbnRlciB0byBhbiBpbml0aWFsaXplZCByZWQtYmxhY2sgdHJl ZSBvYmplY3QuCisgKiAgICAgICAgIGNiICA6IENhbGxiYWNrIGZ1bmN0aW9uLCB3aGljaCwgaWYg bm9uLW51bGwsIGlzIGNhbGxlZCBmb3IgZWFjaCBub2RlCisgKiAgICAgICAgICAgICAgIGR1cmlu ZyBpdGVyYXRpb24uICBUaGVyZSBpcyBubyB3YXkgdG8gc3RvcCBpdGVyYXRpb24gb25jZSBpdAor ICogICAgICAgICAgICAgICBoYXMgYmVndW4uCisgKiAgICAgICAgIGFyZyA6IE9wYXF1ZSBwb2lu dGVyIHBhc3NlZCB0byBjYigpLgorICoKKyAqIFRoZSByYl9zdW1tYXJpemVkX2dlbigpIG1hY3Jv IGdlbmVyYXRlcyBhbGwgdGhlIGZ1bmN0aW9ucyBhYm92ZSwgYnV0IGhhcyBhbgorICogZXhwYW5k ZWQgaW50ZXJmYWNlLiAgSW4gaW50cm9kdWNlcyB0aGUgbm90aW9uIG9mIHN1bW1hcml6aW5nIHN1 YnRyZWVzLCBhbmQgb2YKKyAqIGZpbHRlcmluZyBzZWFyY2hlcyBpbiB0aGUgdHJlZSBhY2NvcmRp bmcgdG8gdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZCBpbgorICogdGhvc2Ugc3VtbWFyaWVzLgor ICogVGhlIGV4dHJhIG1hY3JvIGFyZ3VtZW50IGlzOgorICogICBhX3N1bW1hcml6ZToKKyAqICAg ICBUcmVlIHN1bW1hcml6YXRpb24gZnVuY3Rpb24gbmFtZSwgd2l0aCB0aGUgZm9sbG93aW5nIHBy b3RvdHlwZToKKyAqCisgKiAgICAgYm9vbCBhX3N1bW1hcml6ZShhX3R5cGUgKmFfbm9kZSwgY29u c3QgYV90eXBlICphX2xlZnRfY2hpbGQsCisgKiAgICAgICAgIGNvbnN0IGFfdHlwZSAqYV9yaWdo dF9jaGlsZCk7CisgKgorICogICAgIFRoaXMgZnVuY3Rpb24gc2hvdWxkIHVwZGF0ZSBhX25vZGUg d2l0aCB0aGUgc3VtbWFyeSBvZiB0aGUgc3VidHJlZSByb290ZWQKKyAqICAgICB0aGVyZSwgdXNp bmcgdGhlIGRhdGEgY29udGFpbmVkIGluIGl0IGFuZCB0aGUgc3VtbWFyaWVzIGluIGFfbGVmdF9j aGlsZAorICogICAgIGFuZCBhX3JpZ2h0X2NoaWxkLiAgT25lIG9yIGJvdGggb2YgdGhlbSBtYXkg YmUgTlVMTC4gIFdoZW4gdGhlIHRyZWUKKyAqICAgICBjaGFuZ2VzIGR1ZSB0byBhbiBpbnNlcnRp b24gb3IgcmVtb3ZhbCwgaXQgdXBkYXRlcyB0aGUgc3VtbWFyaWVzIG9mIGFsbAorICogICAgIG5v ZGVzIHdob3NlIHN1YnRyZWVzIGhhdmUgY2hhbmdlZCAoYWx3YXlzIHVwZGF0aW5nIHRoZSBzdW1t YXJpZXMgb2YKKyAqICAgICBjaGlsZHJlbiBiZWZvcmUgdGhlaXIgcGFyZW50cykuICBJZiB0aGUg dXNlciBhbHRlcnMgYSBub2RlIGluIHRoZSB0cmVlIGluCisgKiAgICAgYSB3YXkgdGhhdCBtYXkg Y2hhbmdlIGl0cyBzdW1tYXJ5LCB0aGV5IGNhbiBjYWxsIHRoZSBnZW5lcmF0ZWQKKyAqICAgICB1 cGRhdGVfc3VtbWFyaWVzIGZ1bmN0aW9uIHRvIGJ1YmJsZSB1cCB0aGUgc3VtbWFyeSBjaGFuZ2Vz IHRvIHRoZSByb290LgorICogICAgIEl0IHNob3VsZCByZXR1cm4gdHJ1ZSBpZiB0aGUgc3VtbWFy eSBjaGFuZ2VkIChvciBtYXkgaGF2ZSBjaGFuZ2VkKSwgYW5kCisgKiAgICAgZmFsc2UgaWYgaXQg ZGlkbid0ICh3aGljaCB3aWxsIGFsbG93IHRoZSBpbXBsZW1lbnRhdGlvbiB0byB0ZXJtaW5hdGUK KyAqICAgICAiYnViYmxpbmcgdXAiIHRoZSBzdW1tYXJpZXMgZWFybHkpLgorICogICAgIEFzIHRo ZSBwYXJhbWV0ZXIgbmFtZXMgaW5kaWNhdGUsIHRoZSBjaGlsZHJlbiBhcmUgb3JkZXJlZCBhcyB0 aGV5IGFyZSBpbgorICogICAgIHRoZSB0cmVlLCBhX2xlZnRfY2hpbGQsIGlmIGl0IGlzIG5vdCBO VUxMLCBjb21wYXJlcyBsZXNzIHRoYW4gYV9ub2RlLAorICogICAgIHdoaWNoIGluIHR1cm4gY29t cGFyZXMgbGVzcyB0aGFuIGFfcmlnaHRfY2hpbGQgKGlmIGFfcmlnaHRfY2hpbGQgaXMgbm90Cisg KiAgICAgTlVMTCkuCisgKgorICogVXNpbmcgdGhlIHNhbWUgc2V0dXAgYXMgYWJvdmUgYnV0IHJl cGxhY2luZyB0aGUgbWFjcm8gd2l0aAorICogICByYl9zdW1tYXJpemVkX2dlbihzdGF0aWMsIGV4 XywgZXhfdCwgZXhfbm9kZV90LCBleF9saW5rLCBleF9jbXAsCisgKiAgICAgICBleF9zdW1tYXJp emUpCisgKgorICogR2VuZXJhdGVzIGFsbCB0aGUgcHJldmlvdXMgZnVuY3Rpb25zLCBidXQgYWRk cyBzb21lIG1vcmU6CisgKgorICogICBzdGF0aWMgdm9pZAorICogICBleF91cGRhdGVfc3VtbWFy aWVzKGV4X3QgKnRyZWUsIGV4X25vZGVfdCAqbm9kZSk7CisgKiAgICAgICBEZXNjcmlwdGlvbjog UmVjb21wdXRlIGFsbCBzdW1tYXJpZXMgb2YgYW5jZXN0b3JzIG9mIG5vZGUuCisgKiAgICAgICBB cmdzOgorICogICAgICAgICB0cmVlOiBQb2ludGVyIHRvIGFuIGluaXRpYWxpemVkIHJlZC1ibGFj ayB0cmVlIG9iamVjdC4KKyAqICAgICAgICAgbm9kZTogVGhlIGVsZW1lbnQgb2YgdGhlIHRyZWUg d2hvc2Ugc3VtbWFyeSBtYXkgaGF2ZSBjaGFuZ2VkLgorICoKKyAqIEZvciBlYWNoIG9mIGV4X2Vt cHR5LCBleF9maXJzdCwgZXhfbGFzdCwgZXhfbmV4dCwgZXhfcHJldiwgZXhfc2VhcmNoLAorICog ZXhfbnNlYXJjaCwgZXhfcHNlYXJjaCwgZXhfaXRlciwgYW5kIGV4X3JldmVyc2VfaXRlciwgYW4g YWRkaXRpb25hbCBmdW5jdGlvbgorICogaXMgZ2VuZXJhdGVkIGFzIHdlbGwsIHdpdGggdGhlIHN1 ZmZpeCBfZmlsdGVyZWQgKGUuZy4gZXhfZW1wdHlfZmlsdGVyZWQsCisgKiBleF9maXJzdF9maWx0 ZXJlZCwgZXRjLikuICBUaGVzZSB1c2UgdGhlIGNvbmNlcHQgb2YgYSAiZmlsdGVyIjsgYSBiaW5h cnkKKyAqIHByb3BlcnR5IHNvbWUgbm9kZSBlaXRoZXIgc2F0aXNmaWVzIG9yIGRvZXMgbm90IHNh dGlzZnkuICBDbGV2ZXIgdXNlIG9mIHRoZQorICogYV9zdW1tYXJ5IGFyZ3VtZW50IHRvIHJiX3N1 bW1hcml6ZWRfZ2VuIGNhbiBhbGxvdyBlZmZpY2llbnQgY29tcHV0YXRpb24gb2YKKyAqIHRoZXNl IHByZWRpY2F0ZXMgYWNyb3NzIHdob2xlIHN1YnRyZWVzIG9mIHRoZSB0cmVlLgorICogVGhlIGV4 dGVuZGVkIEFQSSBmdW5jdGlvbnMgYWNjZXB0IHRocmVlIGFkZGl0aW9uYWwgYXJndW1lbnRzIGFm dGVyIHRoZQorICogYXJndW1lbnRzIHRvIHRoZSBjb3JyZXNwb25kaW5nIG5vbi1leHRlbmRlZCBl cXVpdmFsZW50LgorICoKKyAqIGV4X2ZuKC4uLiwgYm9vbCAoKmZpbHRlcl9ub2RlKSh2b2lkICos IGV4X25vZGVfdCAqKSwKKyAqICAgICBib29sICgqZmlsdGVyX3N1YnRyZWUpKHZvaWQgKiwgZXhf bm9kZV90ICopLCB2b2lkICpmaWx0ZXJfY3R4KTsKKyAqICAgICAgICAgZmlsdGVyX25vZGUgICAg OiBSZXR1cm5zIHRydWUgaWYgdGhlIG5vZGUgcGFzc2VzIHRoZSBmaWx0ZXIuCisgKiAgICAgICAg IGZpbHRlcl9zdWJ0cmVlIDogUmV0dXJucyB0cnVlIGlmIHNvbWUgbm9kZSBpbiB0aGUgc3VidHJl ZSByb290ZWQgYXQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlIHBhc3NlcyB0aGUg ZmlsdGVyLgorICogICAgICAgICBmaWx0ZXJfY3R4ICAgICA6IEEgY29udGV4dCBhcmd1bWVudCBw YXNzZWQgdG8gdGhlIGZpbHRlcnMuCisgKgorICogRm9yIGEgbW9yZSBjb25jcmV0ZSBleGFtcGxl IG9mIHN1bW1hcml6aW5nIGFuZCBmaWx0ZXJpbmcsIHN1cHBvc2Ugd2UncmUgdXNpbmcKKyAqIHRo ZSByZWQtYmxhY2sgdHJlZSB0byB0cmFjayBhIHNldCBvZiBpbnRlZ2VyczoKKyAqCisgKiBzdHJ1 Y3QgZXhfbm9kZV9zIHsKKyAqICAgICByYl9ub2RlKGV4X25vZGVfdCkgZXhfbGluazsKKyAqICAg ICB1bnNpZ25lZCBkYXRhOworICogfTsKKyAqCisgKiBTdXBwb3NlLCBmb3Igc29tZSBhcHBsaWNh dGlvbi1zcGVjaWZpYyByZWFzb24sIHdlIHdhbnQgdG8gYmUgYWJsZSB0byBxdWlja2x5CisgKiBm aW5kIG51bWJlcnMgaW4gdGhlIHNldCB3aGljaCBhcmUgZGl2aXNpYmxlIGJ5IGxhcmdlIHBvd2Vy cyBvZiAyIChzYXksIGZvcgorICogYWxpZ25lZCBhbGxvY2F0aW9uIHB1cnBvc2VzKS4gIFdlIGF1 Z21lbnQgdGhlIG5vZGUgd2l0aCBhIHN1bW1hcnkgZmllbGQ6CisgKgorICogc3RydWN0IGV4X25v ZGVfcyB7CisgKiAgICAgcmJfbm9kZShleF9ub2RlX3QpIGV4X2xpbms7CisgKiAgICAgdW5zaWdu ZWQgZGF0YTsKKyAqICAgICB1bnNpZ25lZCBtYXhfc3VidHJlZV9mZnM7CisgKiB9CisgKgorICog YW5kIGRlZmluZSBvdXIgc3VtbWFyaXphdGlvbiBmdW5jdGlvbiBhcyBmb2xsb3dzOgorICoKKyAq IGJvb2wKKyAqIGV4X3N1bW1hcml6ZShleF9ub2RlX3QgKm5vZGUsIGNvbnN0IGV4X25vZGVfdCAq bGNoaWxkLAorICogICBjb25zdCBleF9ub2RlX3QgKnJjaGlsZCkgeworICogICAgIHVuc2lnbmVk IG5ld19tYXhfc3VidHJlZV9mZnMgPSBmZnMobm9kZS0+ZGF0YSk7CisgKiAgICAgaWYgKGxjaGls ZCAhPSBOVUxMICYmIGxjaGlsZC0+bWF4X3N1YnRyZWVfZmZzID4gbmV3X21heF9zdWJ0cmVlX2Zm cykgeworICogICAgICAgICBuZXdfbWF4X3N1YnRyZWVfZmZzID0gbGNoaWxkLT5tYXhfc3VidHJl ZV9mZnM7CisgKiAgICAgfQorICogICAgIGlmIChyY2hpbGQgIT0gTlVMTCAmJiByY2hpbGQtPm1h eF9zdWJ0cmVlX2ZmcyA+IG5ld19tYXhfc3VidHJlZV9mZnMpIHsKKyAqICAgICAgICAgbmV3X21h eF9zdWJ0cmVlX2ZmcyA9IHJjaGlsZC0+bWF4X3N1YnRyZWVfZmZzOworICogICAgIH0KKyAqICAg ICBib29sIGNoYW5nZWQgPSAobm9kZS0+bWF4X3N1YnRyZWVfZmZzICE9IG5ld19tYXhfc3VidHJl ZV9mZnMpCisgKiAgICAgbm9kZS0+bWF4X3N1YnRyZWVfZmZzID0gbmV3X21heF9zdWJ0cmVlX2Zm czsKKyAqICAgICAvLyBUaGlzIGNvdWxkIGJlICJyZXR1cm4gdHJ1ZSIgd2l0aG91dCBhbnkgY29y cmVjdG5lc3Mgb3IgYmlnLU8KKyAqICAgICAvLyBwZXJmb3JtYW5jZSBjaGFuZ2VzOyBidXQgcHJh Y3RpY2FsbHksIHByZWNpc2VseSByZXBvcnRpbmcgc3VtbWFyeQorICogICAgIC8vIGNoYW5nZXMg cmVkdWNlcyB0aGUgYW1vdW50IG9mIHdvcmsgdGhhdCBoYXMgdG8gYmUgZG9uZSB3aGVuICJidWJi bGluZworICogICAgIC8vIHVwIiBzdW1tYXJ5IGNoYW5nZXMuCisgKiAgICAgcmV0dXJuIGNoYW5n ZWQ7CisgKiB9CisgKgorICogV2UgY2FuIG5vdyBpbXBsZW1lbnQgb3VyIGZpbHRlciBmdW5jdGlv bnMgYXMgZm9sbG93czoKKyAqIGJvb2wKKyAqIGV4X2ZpbHRlcl9ub2RlKHZvaWQgKmZpbHRlcl9j dHgsIGV4X25vZGVfdCAqbm9kZSkgeworICogICAgIHVuc2lnbmVkIHJlcXVpcmVkX2ZmcyA9ICoo dW5zaWduZWQgKilmaWx0ZXJfY3R4OworICogICAgIHJldHVybiBmZnMobm9kZS0+ZGF0YSkgPj0g cmVxdWlyZWRfZmZzOworICogfQorICogYm9vbAorICogZXhfZmlsdGVyX3N1YnRyZWUodm9pZCAq ZmlsdGVyX2N0eCwgZXhfbm9kZV90ICpub2RlKSB7CisgKiAgICAgdW5zaWduZWQgcmVxdWlyZWRf ZmZzID0gKih1bnNpZ25lZCAqKWZpbHRlcl9jdHg7CisgKiAgICAgcmV0dXJuIG5vZGUtPm1heF9z dWJ0cmVlX2ZmcyA+PSByZXF1aXJlZF9mZnM7CisgKiB9CisgKgorICogV2UgY2FuIG5vdyBlYXNp bHkgc2VhcmNoIGZvciwgZS5nLiwgdGhlIHNtYWxsZXN0IGludGVnZXIgaW4gdGhlIHNldCB0aGF0 J3MKKyAqIGRpdmlzaWJsZSBieSAxMjg6CisgKiBleF9ub2RlX3QgKgorICogZmluZF9kaXZfMTI4 KGV4X3RyZWVfdCAqdHJlZSkgeworICogICAgIHVuc2lnbmVkIG1pbl9mZnMgPSA3OworICogICAg IHJldHVybiBleF9maXJzdF9maWx0ZXJlZCh0cmVlLCAmZXhfZmlsdGVyX25vZGUsICZleF9maWx0 ZXJfc3VidHJlZSwKKyAqICAgICAgICAgJm1pbl9mZnMpOworICogfQorICoKKyAqIFdlIGNvdWxk IHdpdGggc2ltaWxhciBlYXNlOgorICogLSBGbmQgdGhlIG5leHQgbXVsdGlwbGUgb2YgMTI4IGlu IHRoZSBzZXQgdGhhdCdzIGxhcmdlciB0aGFuIDEyMzQ1ICh3aXRoCisgKiAgIGV4X25zZWFyY2hf ZmlsdGVyZWQpCisgKiAtIEl0ZXJhdGUgb3ZlciBqdXN0IHRob3NlIG11bHRpcGxlcyBvZiA2NCB0 aGF0IGFyZSBpbiB0aGUgc2V0ICh3aXRoCisgKiAgIGV4X2l0ZXJfZmlsdGVyZWQpCisgKiAtIERl dGVybWluZSBpZiB0aGUgc2V0IGNvbnRhaW5zIGFueSBtdWx0aXBsZXMgb2YgMTAyNCAod2l0aAor ICogICBleF9lbXB0eV9maWx0ZXJlZCkuCisgKgorICogU29tZSBwb3NzaWJseSBzdWJ0bGUgQVBJ IG5vdGVzOgorICogLSBUaGUgbm9kZSBhcmd1bWVudCB0byBleF9uZXh0X2ZpbHRlcmVkIGFuZCBl eF9wcmV2X2ZpbHRlcmVkIG5lZWQgbm90IHBhc3MKKyAqICAgdGhlIGZpbHRlcjsgaXQgd2lsbCBm aW5kIHRoZSBuZXh0L3ByZXYgbm9kZSB0aGF0IHBhc3NlcyB0aGUgZmlsdGVyLgorICogLSBleF9z ZWFyY2hfZmlsdGVyZWQgd2lsbCBmYWlsIGV2ZW4gZm9yIGEgbm9kZSBpbiB0aGUgdHJlZSwgaWYg dGhhdCBub2RlIGRvZXMKKyAqICAgbm90IHBhc3MgdGhlIGZpbHRlci4gIGV4X3BzZWFyY2hfZmls dGVyZWQgYW5kIGV4X25zZWFyY2hfZmlsdGVyZWQgYmVoYXZlCisgKiAgIHNpbWlsYXJseTsgdGhl eSBtYXkgcmV0dXJuIGEgbm9kZSBsYXJnZXIvc21hbGxlciB0aGFuIHRoZSBrZXksIGV2ZW4gaWYg YQorICogICBub2RlIGVxdWl2YWxlbnQgdG8gdGhlIGtleSBpcyBpbiB0aGUgdHJlZSAoYnV0IGRv ZXMgbm90IHBhc3MgdGhlIGZpbHRlcikuCisgKiAtIFNpbWlsYXJseSwgaWYgdGhlIHN0YXJ0IGFy Z3VtZW50IHRvIGEgZmlsdGVyZWQgaXRlcmF0aW9uIGZ1bmN0aW9uIGRvZXMgbm90CisgKiAgIHBh c3MgdGhlIGZpbHRlciwgdGhlIGNhbGxiYWNrIHdvbid0IGJlIGludm9rZWQgb24gaXQuCisgKgor ICogVGhlc2Ugc2hvdWxkIG1ha2Ugc2Vuc2UgYWZ0ZXIgYSBtb21lbnQncyByZWZsZWN0aW9uOyBl YWNoIHBvc3QtY29uZGl0aW9uIGlzCisgKiB0aGUgc2FtZSBhcyB3aXRoIHRoZSB1bmZpbHRlcmVk IHZlcnNpb24sIHdpdGggdGhlIGFkZGVkIGNvbnN0cmFpbnQgdGhhdCB0aGUKKyAqIHJldHVybmVk IG5vZGUgbXVzdCBwYXNzIHRoZSBmaWx0ZXIuCisgKi8KKyNkZWZpbmUgcmJfZ2VuKGFfYXR0ciwg YV9wcmVmaXgsIGFfcmJ0X3R5cGUsIGFfdHlwZSwgYV9maWVsZCwgYV9jbXApCVwKKyAgICByYl9n ZW5faW1wbChhX2F0dHIsIGFfcHJlZml4LCBhX3JidF90eXBlLCBhX3R5cGUsIGFfZmllbGQsIGFf Y21wLAlcCisJcmJfZW1wdHlfc3VtbWFyaXplLCBmYWxzZSkKKyNkZWZpbmUgcmJfc3VtbWFyaXpl ZF9nZW4oYV9hdHRyLCBhX3ByZWZpeCwgYV9yYnRfdHlwZSwgYV90eXBlLAkJXAorICAgIGFfZmll bGQsIGFfY21wLCBhX3N1bW1hcml6ZSkJCQkJCVwKKyAgICByYl9nZW5faW1wbChhX2F0dHIsIGFf cHJlZml4LCBhX3JidF90eXBlLCBhX3R5cGUsIGFfZmllbGQsIGFfY21wLAlcCisJYV9zdW1tYXJp emUsIHRydWUpCisKKyNkZWZpbmUgcmJfZ2VuX2ltcGwoYV9hdHRyLCBhX3ByZWZpeCwgYV9yYnRf dHlwZSwgYV90eXBlLAkJXAorICAgIGFfZmllbGQsIGFfY21wLCBhX3N1bW1hcml6ZSwgYV9pc19z dW1tYXJpemVkKQkJCVwKK3R5cGVkZWYgc3RydWN0IHsJCQkJCQkJXAorICAgIGFfdHlwZSAqbm9k ZTsJCQkJCQkJXAorICAgIGludCBjbXA7CQkJCQkJCQlcCit9IGFfcHJlZml4IyNwYXRoX2VudHJ5 X3Q7CQkJCQkJXAorc3RhdGljIGlubGluZSB2b2lkCQkJCQkJCVwKK2FfcHJlZml4IyNzdW1tYXJp emVfcmFuZ2UoYV9wcmVmaXgjI3BhdGhfZW50cnlfdCAqcmZpcnN0LAkJXAorICAgIGFfcHJlZml4 IyNwYXRoX2VudHJ5X3QgKnJsYXN0KSB7CQkJCQlcCisgICAgd2hpbGUgKCh1aW50cHRyX3Qpcmxh c3QgPj0gKHVpbnRwdHJfdClyZmlyc3QpIHsJCQlcCisJYV90eXBlICpub2RlID0gcmxhc3QtPm5v ZGU7CQkJCQlcCisJLyogQXZvaWQgYSB3YXJuaW5nIHdoZW4gYV9zdW1tYXJpemUgaXMgcmJfZW1w dHlfc3VtbWFyaXplLiAqLwlcCisJKHZvaWQpbm9kZTsJCQkJCQkJXAorCWJvb2wgY2hhbmdlZCA9 IGFfc3VtbWFyaXplKG5vZGUsIHJidG5fbGVmdF9nZXQoYV90eXBlLCBhX2ZpZWxkLAlcCisJICAg IG5vZGUpLCByYnRuX3JpZ2h0X2dldChhX3R5cGUsIGFfZmllbGQsIG5vZGUpKTsJCVwKKwlpZiAo IWNoYW5nZWQpIHsJCQkJCQkJXAorCQlicmVhazsJCQkJCQkJXAorCX0JCQkJCQkJCVwKKwlybGFz dC0tOwkJCQkJCQlcCisgICAgfQkJCQkJCQkJCVwKK30JCQkJCQkJCQlcCisvKiBPbiB0aGUgcmVt b3ZlIHBhdGh3YXlzLCB3ZSBzb21ldGltZXMgc3dhcCB0aGUgbm9kZSBiZWluZyByZW1vdmVkICAg Ki9cCisvKiBhbmQgaXRzIGZpcnN0IHN1Y2Nlc3NvcjsgaW4gc3VjaCBjYXNlcyB3ZSBuZWVkIHRv IGRvIHR3byByYW5nZSAgICAgKi9cCisvKiB1cGRhdGVzOyBvbmUgZnJvbSB0aGUgbm9kZSB0byBp dHMgKGZvcm1lcikgc3dhcHBlZCBzdWNjZXNzb3IsIHRoZSAgKi9cCisvKiBuZXh0IGZyb20gdGhh dCBzdWNjZXNzb3IgdG8gdGhlIHJvb3QgKHdpdGggZWl0aGVyIGFsbG93ZWQgdG8gICAgICAgKi9c CisvKiBiYWlsIG91dCBlYXJseSBpZiBhcHByb3ByaWF0ZS4gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKi9cCitzdGF0aWMgaW5saW5lIHZvaWQJCQkJCQkJXAorYV9wcmVmaXgj I3N1bW1hcml6ZV9zd2FwcGVkX3JhbmdlKGFfcHJlZml4IyNwYXRoX2VudHJ5X3QgKnJmaXJzdCwJ XAorICAgIGFfcHJlZml4IyNwYXRoX2VudHJ5X3QgKnJsYXN0LCBhX3ByZWZpeCMjcGF0aF9lbnRy eV90ICpzd2FwX2xvYykgewlcCisJaWYgKHN3YXBfbG9jID09IE5VTEwgfHwgcmxhc3QgPD0gc3dh cF9sb2MpIHsJCQlcCisJCWFfcHJlZml4IyNzdW1tYXJpemVfcmFuZ2UocmZpcnN0LCBybGFzdCk7 CQlcCisJfSBlbHNlIHsJCQkJCQkJXAorCQlhX3ByZWZpeCMjc3VtbWFyaXplX3JhbmdlKHN3YXBf bG9jICsgMSwgcmxhc3QpOwkJXAorCQkodm9pZClhX3N1bW1hcml6ZShzd2FwX2xvYy0+bm9kZSwJ CQlcCisJCSAgICByYnRuX2xlZnRfZ2V0KGFfdHlwZSwgYV9maWVsZCwgc3dhcF9sb2MtPm5vZGUp LAlcCisJCSAgICByYnRuX3JpZ2h0X2dldChhX3R5cGUsIGFfZmllbGQsIHN3YXBfbG9jLT5ub2Rl KSk7CVwKKwkJYV9wcmVmaXgjI3N1bW1hcml6ZV9yYW5nZShyZmlyc3QsIHN3YXBfbG9jIC0gMSk7 CVwKKwl9CQkJCQkJCQlcCit9CQkJCQkJCQkJXAorYV9hdHRyIHZvaWQJCQkJCQkJCVwKK2FfcHJl Zml4IyNuZXcoYV9yYnRfdHlwZSAqcmJ0cmVlKSB7CQkJCQlcCisgICAgcmJfbmV3KGFfdHlwZSwg YV9maWVsZCwgcmJ0cmVlKTsJCQkJCVwKK30JCQkJCQkJCQlcCithX2F0dHIgYm9vbAkJCQkJCQkJ XAorYV9wcmVmaXgjI2VtcHR5KGFfcmJ0X3R5cGUgKnJidHJlZSkgewkJCQkJXAorICAgIHJldHVy biAocmJ0cmVlLT5yYnRfcm9vdCA9PSBOVUxMKTsJCQkJCVwKK30JCQkJCQkJCQlcCithX2F0dHIg YV90eXBlICoJCQkJCQkJCVwKK2FfcHJlZml4IyNmaXJzdChhX3JidF90eXBlICpyYnRyZWUpIHsJ CQkJCVwKKyAgICBhX3R5cGUgKnJldDsJCQkJCQkJXAorICAgIHJidG5fZmlyc3QoYV90eXBlLCBh X2ZpZWxkLCByYnRyZWUsIHJidHJlZS0+cmJ0X3Jvb3QsIHJldCk7CQlcCisgICAgcmV0dXJuIHJl dDsJCQkJCQkJCVwKK30JCQkJCQkJCQlcCithX2F0dHIgYV90eXBlICoJCQkJCQkJCVwKK2FfcHJl Zml4IyNsYXN0KGFfcmJ0X3R5cGUgKnJidHJlZSkgewkJCQkJXAorICAgIGFfdHlwZSAqcmV0OwkJ CQkJCQlcCisgICAgcmJ0bl9sYXN0KGFfdHlwZSwgYV9maWVsZCwgcmJ0cmVlLCByYnRyZWUtPnJi dF9yb290LCByZXQpOwkJXAorICAgIHJldHVybiByZXQ7CQkJCQkJCQlcCit9CQkJCQkJCQkJXAor YV9hdHRyIGFfdHlwZSAqCQkJCQkJCQlcCithX3ByZWZpeCMjbmV4dChhX3JidF90eXBlICpyYnRy ZWUsIGFfdHlwZSAqbm9kZSkgewkJCVwKKyAgICBhX3R5cGUgKnJldDsJCQkJCQkJXAorICAgIGlm IChyYnRuX3JpZ2h0X2dldChhX3R5cGUsIGFfZmllbGQsIG5vZGUpICE9IE5VTEwpIHsJCVwKKwly YnRuX2ZpcnN0KGFfdHlwZSwgYV9maWVsZCwgcmJ0cmVlLCByYnRuX3JpZ2h0X2dldChhX3R5cGUs CVwKKwkgIGFfZmllbGQsIG5vZGUpLCByZXQpOwkJCQkJCVwKKyAgICB9IGVsc2UgewkJCQkJCQkJ XAorCWFfdHlwZSAqdG5vZGUgPSByYnRyZWUtPnJidF9yb290OwkJCQlcCisJYXNzZXJ0KHRub2Rl ICE9IE5VTEwpOwkJCQkJCVwKKwlyZXQgPSBOVUxMOwkJCQkJCQlcCisJd2hpbGUgKHRydWUpIHsJ CQkJCQkJXAorCSAgICBpbnQgY21wID0gKGFfY21wKShub2RlLCB0bm9kZSk7CQkJCVwKKwkgICAg aWYgKGNtcCA8IDApIHsJCQkJCQlcCisJCXJldCA9IHRub2RlOwkJCQkJCVwKKwkJdG5vZGUgPSBy YnRuX2xlZnRfZ2V0KGFfdHlwZSwgYV9maWVsZCwgdG5vZGUpOwkJXAorCSAgICB9IGVsc2UgaWYg KGNtcCA+IDApIHsJCQkJCVwKKwkJdG5vZGUgPSByYnRuX3JpZ2h0X2dldChhX3R5cGUsIGFfZmll bGQsIHRub2RlKTsJCVwKKwkgICAgfSBlbHNlIHsJCQkJCQkJXAorCQlicmVhazsJCQkJCQkJXAor CSAgICB9CQkJCQkJCQlcCisJICAgIGFzc2VydCh0bm9kZSAhPSBOVUxMKTsJCQkJCVwKKwl9CQkJ CQkJCQlcCisgICAgfQkJCQkJCQkJCVwKKyAgICByZXR1cm4gcmV0OwkJCQkJCQkJXAorfQkJCQkJ CQkJCVwKK2FfYXR0ciBhX3R5cGUgKgkJCQkJCQkJXAorYV9wcmVmaXgjI3ByZXYoYV9yYnRfdHlw ZSAqcmJ0cmVlLCBhX3R5cGUgKm5vZGUpIHsJCQlcCisgICAgYV90eXBlICpyZXQ7CQkJCQkJCVwK KyAgICBpZiAocmJ0bl9sZWZ0X2dldChhX3R5cGUsIGFfZmllbGQsIG5vZGUpICE9IE5VTEwpIHsJ CQlcCisJcmJ0bl9sYXN0KGFfdHlwZSwgYV9maWVsZCwgcmJ0cmVlLCByYnRuX2xlZnRfZ2V0KGFf dHlwZSwJXAorCSAgYV9maWVsZCwgbm9kZSksIHJldCk7CQkJCQkJXAorICAgIH0gZWxzZSB7CQkJ CQkJCQlcCisJYV90eXBlICp0bm9kZSA9IHJidHJlZS0+cmJ0X3Jvb3Q7CQkJCVwKKwlhc3NlcnQo dG5vZGUgIT0gTlVMTCk7CQkJCQkJXAorCXJldCA9IE5VTEw7CQkJCQkJCVwKKwl3aGlsZSAodHJ1 ZSkgewkJCQkJCQlcCisJICAgIGludCBjbXAgPSAoYV9jbXApKG5vZGUsIHRub2RlKTsJCQkJXAor CSAgICBpZiAoY21wIDwgMCkgewkJCQkJCVwKKwkJdG5vZGUgPSByYnRuX2xlZnRfZ2V0KGFfdHlw ZSwgYV9maWVsZCwgdG5vZGUpOwkJXAorCSAgICB9IGVsc2UgaWYgKGNtcCA+IDApIHsJCQkJCVwK KwkJcmV0ID0gdG5vZGU7CQkJCQkJXAorCQl0bm9kZSA9IHJidG5fcmlnaHRfZ2V0KGFfdHlwZSwg YV9maWVsZCwgdG5vZGUpOwkJXAorCSAgICB9IGVsc2UgewkJCQkJCQlcCisJCWJyZWFrOwkJCQkJ CQlcCisJICAgIH0JCQkJCQkJCVwKKwkgICAgYXNzZXJ0KHRub2RlICE9IE5VTEwpOwkJCQkJXAor CX0JCQkJCQkJCVwKKyAgICB9CQkJCQkJCQkJXAorICAgIHJldHVybiByZXQ7CQkJCQkJCQlcCit9 CQkJCQkJCQkJXAorYV9hdHRyIGFfdHlwZSAqCQkJCQkJCQlcCithX3ByZWZpeCMjc2VhcmNoKGFf cmJ0X3R5cGUgKnJidHJlZSwgY29uc3QgYV90eXBlICprZXkpIHsJCVwKKyAgICBhX3R5cGUgKnJl dDsJCQkJCQkJXAorICAgIGludCBjbXA7CQkJCQkJCQlcCisgICAgcmV0ID0gcmJ0cmVlLT5yYnRf cm9vdDsJCQkJCQlcCisgICAgd2hpbGUgKHJldCAhPSBOVUxMCQkJCQkJCVwKKyAgICAgICYmIChj bXAgPSAoYV9jbXApKGtleSwgcmV0KSkgIT0gMCkgewkJCQlcCisJaWYgKGNtcCA8IDApIHsJCQkJ CQkJXAorCSAgICByZXQgPSByYnRuX2xlZnRfZ2V0KGFfdHlwZSwgYV9maWVsZCwgcmV0KTsJCQlc CisJfSBlbHNlIHsJCQkJCQkJXAorCSAgICByZXQgPSByYnRuX3JpZ2h0X2dldChhX3R5cGUsIGFf ZmllbGQsIHJldCk7CQkJXAorCX0JCQkJCQkJCVwKKyAgICB9CQkJCQkJCQkJXAorICAgIHJldHVy biByZXQ7CQkJCQkJCQlcCit9CQkJCQkJCQkJXAorYV9hdHRyIGFfdHlwZSAqCQkJCQkJCQlcCith X3ByZWZpeCMjbnNlYXJjaChhX3JidF90eXBlICpyYnRyZWUsIGNvbnN0IGFfdHlwZSAqa2V5KSB7 CQlcCisgICAgYV90eXBlICpyZXQ7CQkJCQkJCVwKKyAgICBhX3R5cGUgKnRub2RlID0gcmJ0cmVl LT5yYnRfcm9vdDsJCQkJCVwKKyAgICByZXQgPSBOVUxMOwkJCQkJCQkJXAorICAgIHdoaWxlICh0 bm9kZSAhPSBOVUxMKSB7CQkJCQkJXAorCWludCBjbXAgPSAoYV9jbXApKGtleSwgdG5vZGUpOwkJ CQkJXAorCWlmIChjbXAgPCAwKSB7CQkJCQkJCVwKKwkgICAgcmV0ID0gdG5vZGU7CQkJCQkJXAor CSAgICB0bm9kZSA9IHJidG5fbGVmdF9nZXQoYV90eXBlLCBhX2ZpZWxkLCB0bm9kZSk7CQlcCisJ fSBlbHNlIGlmIChjbXAgPiAwKSB7CQkJCQkJXAorCSAgICB0bm9kZSA9IHJidG5fcmlnaHRfZ2V0 KGFfdHlwZSwgYV9maWVsZCwgdG5vZGUpOwkJXAorCX0gZWxzZSB7CQkJCQkJCVwKKwkgICAgcmV0 ID0gdG5vZGU7CQkJCQkJXAorCSAgICBicmVhazsJCQkJCQkJXAorCX0JCQkJCQkJCVwKKyAgICB9 CQkJCQkJCQkJXAorICAgIHJldHVybiByZXQ7CQkJCQkJCQlcCit9CQkJCQkJCQkJXAorYV9hdHRy IGFfdHlwZSAqCQkJCQkJCQlcCithX3ByZWZpeCMjcHNlYXJjaChhX3JidF90eXBlICpyYnRyZWUs IGNvbnN0IGFfdHlwZSAqa2V5KSB7CQlcCisgICAgYV90eXBlICpyZXQ7CQkJCQkJCVwKKyAgICBh X3R5cGUgKnRub2RlID0gcmJ0cmVlLT5yYnRfcm9vdDsJCQkJCVwKKyAgICByZXQgPSBOVUxMOwkJ CQkJCQkJXAorICAgIHdoaWxlICh0bm9kZSAhPSBOVUxMKSB7CQkJCQkJXAorCWludCBjbXAgPSAo YV9jbXApKGtleSwgdG5vZGUpOwkJCQkJXAorCWlmIChjbXAgPCAwKSB7CQkJCQkJCVwKKwkgICAg dG5vZGUgPSByYnRuX2xlZnRfZ2V0KGFfdHlwZSwgYV9maWVsZCwgdG5vZGUpOwkJXAorCX0gZWxz ZSBpZiAoY21wID4gMCkgewkJCQkJCVwKKwkgICAgcmV0ID0gdG5vZGU7CQkJCQkJXAorCSAgICB0 bm9kZSA9IHJidG5fcmlnaHRfZ2V0KGFfdHlwZSwgYV9maWVsZCwgdG5vZGUpOwkJXAorCX0gZWxz ZSB7CQkJCQkJCVwKKwkgICAgcmV0ID0gdG5vZGU7CQkJCQkJXAorCSAgICBicmVhazsJCQkJCQkJ XAorCX0JCQkJCQkJCVwKKyAgICB9CQkJCQkJCQkJXAorICAgIHJldHVybiByZXQ7CQkJCQkJCQlc Cit9CQkJCQkJCQkJXAorYV9hdHRyIHZvaWQJCQkJCQkJCVwKK2FfcHJlZml4IyNpbnNlcnQoYV9y YnRfdHlwZSAqcmJ0cmVlLCBhX3R5cGUgKm5vZGUpIHsJCQlcCisgICAgYV9wcmVmaXgjI3BhdGhf ZW50cnlfdCBwYXRoW1JCX01BWF9ERVBUSF07CQkJXAorICAgIGFfcHJlZml4IyNwYXRoX2VudHJ5 X3QgKnBhdGhwOwkJCQkJXAorICAgIHJidF9ub2RlX25ldyhhX3R5cGUsIGFfZmllbGQsIHJidHJl ZSwgbm9kZSk7CQkJXAorICAgIC8qIFdpbmQuICovCQkJCQkJCQlcCisgICAgcGF0aC0+bm9kZSA9 IHJidHJlZS0+cmJ0X3Jvb3Q7CQkJCQlcCisgICAgZm9yIChwYXRocCA9IHBhdGg7IHBhdGhwLT5u b2RlICE9IE5VTEw7IHBhdGhwKyspIHsJCQlcCisJaW50IGNtcCA9IHBhdGhwLT5jbXAgPSBhX2Nt cChub2RlLCBwYXRocC0+bm9kZSk7CQlcCisJYXNzZXJ0KGNtcCAhPSAwKTsJCQkJCQlcCisJaWYg KGNtcCA8IDApIHsJCQkJCQkJXAorCSAgICBwYXRocFsxXS5ub2RlID0gcmJ0bl9sZWZ0X2dldChh X3R5cGUsIGFfZmllbGQsCQlcCisJICAgICAgcGF0aHAtPm5vZGUpOwkJCQkJCVwKKwl9IGVsc2Ug ewkJCQkJCQlcCisJICAgIHBhdGhwWzFdLm5vZGUgPSByYnRuX3JpZ2h0X2dldChhX3R5cGUsIGFf ZmllbGQsCQlcCisJICAgICAgcGF0aHAtPm5vZGUpOwkJCQkJCVwKKwl9CQkJCQkJCQlcCisgICAg fQkJCQkJCQkJCVwKKyAgICBwYXRocC0+bm9kZSA9IG5vZGU7CQkJCQkJCVwKKyAgICAvKiBBIGxv b3AgaW52YXJpYW50IHdlIG1haW50YWluIGlzIHRoYXQgYWxsIG5vZGVzIHdpdGggICAgICAgICAg ICAqL1wKKyAgICAvKiBvdXQtb2YtZGF0ZSBzdW1tYXJpZXMgbGl2ZSBpbiBwYXRoWzBdLCBwYXRo WzFdLCAuLi4sICpwYXRocC4gICAqL1wKKyAgICAvKiBUbyBtYWludGFpbiB0aGlzLCB3ZSBoYXZl IHRvIHN1bW1hcml6ZSBub2RlLCBzaW5jZSB3ZSAgICAgICAgICAqL1wKKyAgICAvKiBkZWNyZW1l bnQgcGF0aHAgYmVmb3JlIHRoZSBmaXJzdCBpdGVyYXRpb24uICAgICAgICAgICAgICAgICAgICAq L1wKKyAgICBhc3NlcnQocmJ0bl9sZWZ0X2dldChhX3R5cGUsIGFfZmllbGQsIG5vZGUpID09IE5V TEwpOwkJXAorICAgIGFzc2VydChyYnRuX3JpZ2h0X2dldChhX3R5cGUsIGFfZmllbGQsIG5vZGUp ID09IE5VTEwpOwkJXAorICAgICh2b2lkKWFfc3VtbWFyaXplKG5vZGUsIE5VTEwsIE5VTEwpOwkJ CQlcCisgICAgLyogVW53aW5kLiAqLwkJCQkJCQlcCisgICAgZm9yIChwYXRocC0tOyAodWludHB0 cl90KXBhdGhwID49ICh1aW50cHRyX3QpcGF0aDsgcGF0aHAtLSkgewlcCisJYV90eXBlICpjbm9k ZSA9IHBhdGhwLT5ub2RlOwkJCQkJXAorCWlmIChwYXRocC0+Y21wIDwgMCkgewkJCQkJCVwKKwkg ICAgYV90eXBlICpsZWZ0ID0gcGF0aHBbMV0ubm9kZTsJCQkJXAorCSAgICByYnRuX2xlZnRfc2V0 KGFfdHlwZSwgYV9maWVsZCwgY25vZGUsIGxlZnQpOwkJXAorCSAgICBpZiAocmJ0bl9yZWRfZ2V0 KGFfdHlwZSwgYV9maWVsZCwgbGVmdCkpIHsJCQlcCisJCWFfdHlwZSAqbGVmdGxlZnQgPSByYnRu X2xlZnRfZ2V0KGFfdHlwZSwgYV9maWVsZCwgbGVmdCk7XAorCQlpZiAobGVmdGxlZnQgIT0gTlVM TCAmJiByYnRuX3JlZF9nZXQoYV90eXBlLCBhX2ZpZWxkLAlcCisJCSAgbGVmdGxlZnQpKSB7CQkJ CQkJXAorCQkgICAgLyogRml4IHVwIDQtbm9kZS4gKi8JCQkJXAorCQkgICAgYV90eXBlICp0bm9k ZTsJCQkJCVwKKwkJICAgIHJidG5fYmxhY2tfc2V0KGFfdHlwZSwgYV9maWVsZCwgbGVmdGxlZnQp OwkJXAorCQkgICAgcmJ0bl9yb3RhdGVfcmlnaHQoYV90eXBlLCBhX2ZpZWxkLCBjbm9kZSwgdG5v ZGUpOwlcCisJCSAgICAodm9pZClhX3N1bW1hcml6ZShjbm9kZSwJCQkJXAorCQkJcmJ0bl9sZWZ0 X2dldChhX3R5cGUsIGFfZmllbGQsIGNub2RlKSwJCVwKKwkJCXJidG5fcmlnaHRfZ2V0KGFfdHlw ZSwgYV9maWVsZCwgY25vZGUpKTsJXAorCQkgICAgY25vZGUgPSB0bm9kZTsJCQkJCVwKKwkJfQkJ CQkJCQlcCisJICAgIH0gZWxzZSB7CQkJCQkJCVwKKwkJYV9wcmVmaXgjI3N1bW1hcml6ZV9yYW5n ZShwYXRoLCBwYXRocCk7CQkJXAorCQlyZXR1cm47CQkJCQkJCVwKKwkgICAgfQkJCQkJCQkJXAor CX0gZWxzZSB7CQkJCQkJCVwKKwkgICAgYV90eXBlICpyaWdodCA9IHBhdGhwWzFdLm5vZGU7CQkJ CVwKKwkgICAgcmJ0bl9yaWdodF9zZXQoYV90eXBlLCBhX2ZpZWxkLCBjbm9kZSwgcmlnaHQpOwkJ XAorCSAgICBpZiAocmJ0bl9yZWRfZ2V0KGFfdHlwZSwgYV9maWVsZCwgcmlnaHQpKSB7CQkJXAor CQlhX3R5cGUgKmxlZnQgPSByYnRuX2xlZnRfZ2V0KGFfdHlwZSwgYV9maWVsZCwgY25vZGUpOwlc CisJCWlmIChsZWZ0ICE9IE5VTEwgJiYgcmJ0bl9yZWRfZ2V0KGFfdHlwZSwgYV9maWVsZCwJXAor CQkgIGxlZnQpKSB7CQkJCQkJXAorCQkgICAgLyogU3BsaXQgNC1ub2RlLiAqLwkJCQkJXAorCQkg ICAgcmJ0bl9ibGFja19zZXQoYV90eXBlLCBhX2ZpZWxkLCBsZWZ0KTsJCVwKKwkJICAgIHJidG5f YmxhY2tfc2V0KGFfdHlwZSwgYV9maWVsZCwgcmlnaHQpOwkJXAorCQkgICAgcmJ0bl9yZWRfc2V0 KGFfdHlwZSwgYV9maWVsZCwgY25vZGUpOwkJXAorCQl9IGVsc2UgewkJCQkJCVwKKwkJICAgIC8q IExlYW4gbGVmdC4gKi8JCQkJCVwKKwkJICAgIGFfdHlwZSAqdG5vZGU7CQkJCQlcCisJCSAgICBi b29sIHRyZWQgPSByYnRuX3JlZF9nZXQoYV90eXBlLCBhX2ZpZWxkLCBjbm9kZSk7CVwKKwkJICAg IHJidG5fcm90YXRlX2xlZnQoYV90eXBlLCBhX2ZpZWxkLCBjbm9kZSwgdG5vZGUpOwlcCisJCSAg ICByYnRuX2NvbG9yX3NldChhX3R5cGUsIGFfZmllbGQsIHRub2RlLCB0cmVkKTsJXAorCQkgICAg cmJ0bl9yZWRfc2V0KGFfdHlwZSwgYV9maWVsZCwgY25vZGUpOwkJXAorCQkgICAgKHZvaWQpYV9z dW1tYXJpemUoY25vZGUsCQkJCVwKKwkJCXJidG5fbGVmdF9nZXQoYV90eXBlLCBhX2ZpZWxkLCBj bm9kZSksCQlcCisJCQlyYnRuX3JpZ2h0X2dldChhX3R5cGUsIGFfZmllbGQsIGNub2RlKSk7CVwK KwkJICAgIGNub2RlID0gdG5vZGU7CQkJCQlcCisJCX0JCQkJCQkJXAorCSAgICB9IGVsc2UgewkJ CQkJCQlcCisJCWFfcHJlZml4IyNzdW1tYXJpemVfcmFuZ2UocGF0aCwgcGF0aHApOwkJCVwKKwkJ cmV0dXJuOwkJCQkJCQlcCisJICAgIH0JCQkJCQkJCVwKKwl9CQkJCQkJCQlcCisJcGF0aHAtPm5v ZGUgPSBjbm9kZTsJCQkJCQlcCisJKHZvaWQpYV9zdW1tYXJpemUoY25vZGUsCQkJCQlcCisJICAg IHJidG5fbGVmdF9nZXQoYV90eXBlLCBhX2ZpZWxkLCBjbm9kZSksCQkJXAorCSAgICByYnRuX3Jp Z2h0X2dldChhX3R5cGUsIGFfZmllbGQsIGNub2RlKSk7CQkJXAorICAgIH0JCQkJCQkJCQlcCisg ICAgLyogU2V0IHJvb3QsIGFuZCBtYWtlIGl0IGJsYWNrLiAqLwkJCQkJXAorICAgIHJidHJlZS0+ cmJ0X3Jvb3QgPSBwYXRoLT5ub2RlOwkJCQkJXAorICAgIHJidG5fYmxhY2tfc2V0KGFfdHlwZSwg YV9maWVsZCwgcmJ0cmVlLT5yYnRfcm9vdCk7CQkJXAorfQkJCQkJCQkJCVwKK2FfYXR0ciB2b2lk CQkJCQkJCQlcCithX3ByZWZpeCMjcmVtb3ZlKGFfcmJ0X3R5cGUgKnJidHJlZSwgYV90eXBlICpu b2RlKSB7CQkJXAorICAgIGFfcHJlZml4IyNwYXRoX2VudHJ5X3QgcGF0aFtSQl9NQVhfREVQVEhd OwkJCQlcCisgICAgYV9wcmVmaXgjI3BhdGhfZW50cnlfdCAqcGF0aHA7CQkJCQlcCisgICAgYV9w cmVmaXgjI3BhdGhfZW50cnlfdCAqbm9kZXA7CQkJCQlcCisgICAgYV9wcmVmaXgjI3BhdGhfZW50 cnlfdCAqc3dhcF9sb2M7CQkJCQlcCisgICAgLyogVGhpcyBpcyBhICJyZWFsIiBzZW50aW5lbCAt LSBOVUxMIG1lYW5zIHdlIGRpZG4ndCBzd2FwIHRoZSAgICAgKi9cCisgICAgLyogbm9kZSB0byBi ZSBwcnVuZWQgd2l0aCBvbmUgb2YgaXRzIHN1Y2Nlc3NvcnMsIGFuZCBzbyAgICAgICAgICAgKi9c CisgICAgLyogc3VtbWFyaXphdGlvbiBjYW4gdGVybWluYXRlIGVhcmx5IHdoZW5ldmVyIHNvbWUg c3VtbWFyeSAgICAgICAgKi9cCisgICAgLyogZG9lc24ndCBjaGFuZ2UuICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cCisgICAgc3dhcF9sb2MgPSBOVUxM OwkJCQkJCQlcCisgICAgLyogVGhpcyBpcyBqdXN0IHRvIHNpbGVuY2UgYSBjb21waWxlciB3YXJu aW5nLiAqLwkJCVwKKyAgICBub2RlcCA9IE5VTEw7CQkJCQkJCVwKKyAgICAvKiBXaW5kLiAqLwkJ CQkJCQkJXAorICAgIHBhdGgtPm5vZGUgPSByYnRyZWUtPnJidF9yb290OwkJCQkJXAorICAgIGZv ciAocGF0aHAgPSBwYXRoOyBwYXRocC0+bm9kZSAhPSBOVUxMOyBwYXRocCsrKSB7CQkJXAorCWlu dCBjbXAgPSBwYXRocC0+Y21wID0gYV9jbXAobm9kZSwgcGF0aHAtPm5vZGUpOwkJXAorCWlmIChj bXAgPCAwKSB7CQkJCQkJCVwKKwkgICAgcGF0aHBbMV0ubm9kZSA9IHJidG5fbGVmdF9nZXQoYV90 eXBlLCBhX2ZpZWxkLAkJXAorCSAgICAgIHBhdGhwLT5ub2RlKTsJCQkJCQlcCisJfSBlbHNlIHsJ CQkJCQkJXAorCSAgICBwYXRocFsxXS5ub2RlID0gcmJ0bl9yaWdodF9nZXQoYV90eXBlLCBhX2Zp ZWxkLAkJXAorCSAgICAgIHBhdGhwLT5ub2RlKTsJCQkJCQlcCisJICAgIGlmIChjbXAgPT0gMCkg ewkJCQkJCVwKKwkgICAgICAgIC8qIEZpbmQgbm9kZSdzIHN1Y2Nlc3NvciwgaW4gcHJlcGFyYXRp b24gZm9yIHN3YXAuICovCVwKKwkJcGF0aHAtPmNtcCA9IDE7CQkJCQkJXAorCQlub2RlcCA9IHBh dGhwOwkJCQkJCVwKKwkJZm9yIChwYXRocCsrOyBwYXRocC0+bm9kZSAhPSBOVUxMOyBwYXRocCsr KSB7CQlcCisJCSAgICBwYXRocC0+Y21wID0gLTE7CQkJCQlcCisJCSAgICBwYXRocFsxXS5ub2Rl ID0gcmJ0bl9sZWZ0X2dldChhX3R5cGUsIGFfZmllbGQsCVwKKwkJICAgICAgcGF0aHAtPm5vZGUp OwkJCQkJXAorCQl9CQkJCQkJCVwKKwkJYnJlYWs7CQkJCQkJCVwKKwkgICAgfQkJCQkJCQkJXAor CX0JCQkJCQkJCVwKKyAgICB9CQkJCQkJCQkJXAorICAgIGFzc2VydChub2RlcC0+bm9kZSA9PSBu b2RlKTsJCQkJCVwKKyAgICBwYXRocC0tOwkJCQkJCQkJXAorICAgIGlmIChwYXRocC0+bm9kZSAh PSBub2RlKSB7CQkJCQkJXAorCS8qIFN3YXAgbm9kZSB3aXRoIGl0cyBzdWNjZXNzb3IuICovCQkJ CVwKKwlzd2FwX2xvYyA9IG5vZGVwOwkJCQkJCVwKKwlib29sIHRyZWQgPSByYnRuX3JlZF9nZXQo YV90eXBlLCBhX2ZpZWxkLCBwYXRocC0+bm9kZSk7CQlcCisJcmJ0bl9jb2xvcl9zZXQoYV90eXBl LCBhX2ZpZWxkLCBwYXRocC0+bm9kZSwJCQlcCisJICByYnRuX3JlZF9nZXQoYV90eXBlLCBhX2Zp ZWxkLCBub2RlKSk7CQkJCVwKKwlyYnRuX2xlZnRfc2V0KGFfdHlwZSwgYV9maWVsZCwgcGF0aHAt Pm5vZGUsCQkJXAorCSAgcmJ0bl9sZWZ0X2dldChhX3R5cGUsIGFfZmllbGQsIG5vZGUpKTsJCQlc CisJLyogSWYgbm9kZSdzIHN1Y2Nlc3NvciBpcyBpdHMgcmlnaHQgY2hpbGQsIHRoZSBmb2xsb3dp bmcgY29kZSAqL1wKKwkvKiB3aWxsIGRvIHRoZSB3cm9uZyB0aGluZyBmb3IgdGhlIHJpZ2h0IGNo aWxkIHBvaW50ZXIuICAgICAgICovXAorCS8qIEhvd2V2ZXIsIGl0IGRvZXNuJ3QgbWF0dGVyLCBi ZWNhdXNlIHRoZSBwb2ludGVyIHdpbGwgYmUgICAgKi9cCisJLyogcHJvcGVybHkgc2V0IHdoZW4g dGhlIHN1Y2Nlc3NvciBpcyBwcnVuZWQuICAgICAgICAgICAgICAgICAqL1wKKwlyYnRuX3JpZ2h0 X3NldChhX3R5cGUsIGFfZmllbGQsIHBhdGhwLT5ub2RlLAkJCVwKKwkgIHJidG5fcmlnaHRfZ2V0 KGFfdHlwZSwgYV9maWVsZCwgbm9kZSkpOwkJCVwKKwlyYnRuX2NvbG9yX3NldChhX3R5cGUsIGFf ZmllbGQsIG5vZGUsIHRyZWQpOwkJCVwKKwkvKiBUaGUgcHJ1bmVkIGxlYWYgbm9kZSdzIGNoaWxk IHBvaW50ZXJzIGFyZSBuZXZlciBhY2Nlc3NlZCAgICovXAorCS8qIGFnYWluLCBzbyBkb24ndCBi b3RoZXIgc2V0dGluZyB0aGVtIHRvIG5pbC4gICAgICAgICAgICAgICAgKi9cCisJbm9kZXAtPm5v ZGUgPSBwYXRocC0+bm9kZTsJCQkJCVwKKwlwYXRocC0+bm9kZSA9IG5vZGU7CQkJCQkJXAorCWlm IChub2RlcCA9PSBwYXRoKSB7CQkJCQkJXAorCSAgICByYnRyZWUtPnJidF9yb290ID0gbm9kZXAt Pm5vZGU7CQkJCVwKKwl9IGVsc2UgewkJCQkJCQlcCisJICAgIGlmIChub2RlcFstMV0uY21wIDwg MCkgewkJCQkJXAorCQlyYnRuX2xlZnRfc2V0KGFfdHlwZSwgYV9maWVsZCwgbm9kZXBbLTFdLm5v ZGUsCQlcCisJCSAgbm9kZXAtPm5vZGUpOwkJCQkJCVwKKwkgICAgfSBlbHNlIHsJCQkJCQkJXAor CQlyYnRuX3JpZ2h0X3NldChhX3R5cGUsIGFfZmllbGQsIG5vZGVwWy0xXS5ub2RlLAkJXAorCQkg IG5vZGVwLT5ub2RlKTsJCQkJCQlcCisJICAgIH0JCQkJCQkJCVwKKwl9CQkJCQkJCQlcCisgICAg fSBlbHNlIHsJCQkJCQkJCVwKKwlhX3R5cGUgKmxlZnQgPSByYnRuX2xlZnRfZ2V0KGFfdHlwZSwg YV9maWVsZCwgbm9kZSk7CQlcCisJaWYgKGxlZnQgIT0gTlVMTCkgewkJCQkJCVwKKwkgICAgLyog bm9kZSBoYXMgbm8gc3VjY2Vzc29yLCBidXQgaXQgaGFzIGEgbGVmdCBjaGlsZC4gICAgICAgICov XAorCSAgICAvKiBTcGxpY2Ugbm9kZSBvdXQsIHdpdGhvdXQgbG9zaW5nIHRoZSBsZWZ0IGNoaWxk LiAgICAgICAgKi9cCisJICAgIGFzc2VydCghcmJ0bl9yZWRfZ2V0KGFfdHlwZSwgYV9maWVsZCwg bm9kZSkpOwkJXAorCSAgICBhc3NlcnQocmJ0bl9yZWRfZ2V0KGFfdHlwZSwgYV9maWVsZCwgbGVm dCkpOwkJXAorCSAgICByYnRuX2JsYWNrX3NldChhX3R5cGUsIGFfZmllbGQsIGxlZnQpOwkJCVwK KwkgICAgaWYgKHBhdGhwID09IHBhdGgpIHsJCQkJCVwKKwkJcmJ0cmVlLT5yYnRfcm9vdCA9IGxl ZnQ7CQkJCVwKKwkJLyogTm90aGluZyB0byBzdW1tYXJpemUgLS0gdGhlIHN1YnRyZWUgcm9vdGVk IGF0IHRoZSAgKi9cCisJCS8qIG5vZGUncyBsZWZ0IGNoaWxkIGhhc24ndCBjaGFuZ2VkLCBhbmQg aXQncyBub3cgdGhlICovXAorCQkvKiByb290LgkJCQkJICAgICAgKi9cCisJICAgIH0gZWxzZSB7 CQkJCQkJCVwKKwkJaWYgKHBhdGhwWy0xXS5jbXAgPCAwKSB7CQkJCVwKKwkJICAgIHJidG5fbGVm dF9zZXQoYV90eXBlLCBhX2ZpZWxkLCBwYXRocFstMV0ubm9kZSwJXAorCQkgICAgICBsZWZ0KTsJ CQkJCQlcCisJCX0gZWxzZSB7CQkJCQkJXAorCQkgICAgcmJ0bl9yaWdodF9zZXQoYV90eXBlLCBh X2ZpZWxkLCBwYXRocFstMV0ubm9kZSwJXAorCQkgICAgICBsZWZ0KTsJCQkJCQlcCisJCX0JCQkJ CQkJXAorCQlhX3ByZWZpeCMjc3VtbWFyaXplX3N3YXBwZWRfcmFuZ2UocGF0aCwgJnBhdGhwWy0x XSwJXAorCQkgICAgc3dhcF9sb2MpOwkJCQkJCVwKKwkgICAgfQkJCQkJCQkJXAorCSAgICByZXR1 cm47CQkJCQkJCVwKKwl9IGVsc2UgaWYgKHBhdGhwID09IHBhdGgpIHsJCQkJCVwKKwkgICAgLyog VGhlIHRyZWUgb25seSBjb250YWluZWQgb25lIG5vZGUuICovCQkJXAorCSAgICByYnRyZWUtPnJi dF9yb290ID0gTlVMTDsJCQkJCVwKKwkgICAgcmV0dXJuOwkJCQkJCQlcCisJfQkJCQkJCQkJXAor ICAgIH0JCQkJCQkJCQlcCisgICAgLyogV2UndmUgbm93IGVzdGFibGlzaGVkIHRoZSBpbnZhcmlh bnQgdGhhdCB0aGUgbm9kZSBoYXMgbm8gcmlnaHQgKi9cCisgICAgLyogY2hpbGQgKHdlbGwsIG1v cmFsbHk7IHdlIGRpZG4ndCBib3RoZXIgbnVsbGluZyBpdCBvdXQgaWYgd2UgICAgKi9cCisgICAg Lyogc3dhcHBlZCBpdCB3aXRoIGl0cyBzdWNjZXNzb3IpLCBhbmQgdGhhdCB0aGUgb25seSBub2Rl cyB3aXRoICAgKi9cCisgICAgLyogb3V0LW9mLWRhdGUgc3VtbWFyaWVzIGxpdmUgaW4gcGF0aFsw XSwgcGF0aFsxXSwgLi4uLCBwYXRocFstMV0uKi9cCisgICAgaWYgKHJidG5fcmVkX2dldChhX3R5 cGUsIGFfZmllbGQsIHBhdGhwLT5ub2RlKSkgewkJCVwKKwkvKiBQcnVuZSByZWQgbm9kZSwgd2hp Y2ggcmVxdWlyZXMgbm8gZml4dXAuICovCQkJXAorCWFzc2VydChwYXRocFstMV0uY21wIDwgMCk7 CQkJCQlcCisJcmJ0bl9sZWZ0X3NldChhX3R5cGUsIGFfZmllbGQsIHBhdGhwWy0xXS5ub2RlLCBO VUxMKTsJCVwKKwlhX3ByZWZpeCMjc3VtbWFyaXplX3N3YXBwZWRfcmFuZ2UocGF0aCwgJnBhdGhw Wy0xXSwgc3dhcF9sb2MpOwlcCisJcmV0dXJuOwkJCQkJCQkJXAorICAgIH0JCQkJCQkJCQlcCisg ICAgLyogVGhlIG5vZGUgdG8gYmUgcHJ1bmVkIGlzIGJsYWNrLCBzbyB1bndpbmQgdW50aWwgYmFs YW5jZSBpcyAgICAgKi9cCisgICAgLyogcmVzdG9yZWQuICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cCisgICAgcGF0aHAtPm5vZGUgPSBOVUxM OwkJCQkJCQlcCisgICAgZm9yIChwYXRocC0tOyAodWludHB0cl90KXBhdGhwID49ICh1aW50cHRy X3QpcGF0aDsgcGF0aHAtLSkgewlcCisJYXNzZXJ0KHBhdGhwLT5jbXAgIT0gMCk7CQkJCQlcCisJ aWYgKHBhdGhwLT5jbXAgPCAwKSB7CQkJCQkJXAorCSAgICByYnRuX2xlZnRfc2V0KGFfdHlwZSwg YV9maWVsZCwgcGF0aHAtPm5vZGUsCQkJXAorCSAgICAgIHBhdGhwWzFdLm5vZGUpOwkJCQkJCVwK KwkgICAgaWYgKHJidG5fcmVkX2dldChhX3R5cGUsIGFfZmllbGQsIHBhdGhwLT5ub2RlKSkgewkJ XAorCQlhX3R5cGUgKnJpZ2h0ID0gcmJ0bl9yaWdodF9nZXQoYV90eXBlLCBhX2ZpZWxkLAkJXAor CQkgIHBhdGhwLT5ub2RlKTsJCQkJCQlcCisJCWFfdHlwZSAqcmlnaHRsZWZ0ID0gcmJ0bl9sZWZ0 X2dldChhX3R5cGUsIGFfZmllbGQsCVwKKwkJICByaWdodCk7CQkJCQkJXAorCQlhX3R5cGUgKnRu b2RlOwkJCQkJCVwKKwkJaWYgKHJpZ2h0bGVmdCAhPSBOVUxMICYmIHJidG5fcmVkX2dldChhX3R5 cGUsIGFfZmllbGQsCVwKKwkJICByaWdodGxlZnQpKSB7CQkJCQkJXAorCQkgICAgLyogSW4gdGhl IGZvbGxvd2luZyBkaWFncmFtcywgfHwsIC8vLCBhbmQgXFwgICAgICAqL1wKKwkJICAgIC8qIGlu ZGljYXRlIHRoZSBwYXRoIHRvIHRoZSByZW1vdmVkIG5vZGUuICAgICAgICAgKi9cCisJCSAgICAv KiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXAorCQkg ICAgLyogICAgICB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1wK KwkJICAgIC8qICAgIHBhdGhwKHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Ki9cCisJCSAgICAvKiAgLy8gICAgICAgIFwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICovXAorCQkgICAgLyogKGIpICAgICAgICAoYikgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAqL1wKKwkJICAgIC8qICAgICAgICAgICAvICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKi9cCisJCSAgICAvKiAgICAgICAgICAocikgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICovXAorCQkgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAqL1wKKwkJICAgIHJidG5fYmxhY2tfc2V0KGFfdHlwZSwgYV9m aWVsZCwgcGF0aHAtPm5vZGUpOwlcCisJCSAgICByYnRuX3JvdGF0ZV9yaWdodChhX3R5cGUsIGFf ZmllbGQsIHJpZ2h0LCB0bm9kZSk7CVwKKwkJICAgIHJidG5fcmlnaHRfc2V0KGFfdHlwZSwgYV9m aWVsZCwgcGF0aHAtPm5vZGUsIHRub2RlKTtcCisJCSAgICByYnRuX3JvdGF0ZV9sZWZ0KGFfdHlw ZSwgYV9maWVsZCwgcGF0aHAtPm5vZGUsCVwKKwkJICAgICAgdG5vZGUpOwkJCQkJCVwKKwkJICAg ICh2b2lkKWFfc3VtbWFyaXplKHBhdGhwLT5ub2RlLAkJCVwKKwkJCXJidG5fbGVmdF9nZXQoYV90 eXBlLCBhX2ZpZWxkLCBwYXRocC0+bm9kZSksCVwKKwkJCXJidG5fcmlnaHRfZ2V0KGFfdHlwZSwg YV9maWVsZCwgcGF0aHAtPm5vZGUpKTsJXAorCQkgICAgKHZvaWQpYV9zdW1tYXJpemUocmlnaHQs CQkJCVwKKwkJCXJidG5fbGVmdF9nZXQoYV90eXBlLCBhX2ZpZWxkLCByaWdodCksCQlcCisJCQly YnRuX3JpZ2h0X2dldChhX3R5cGUsIGFfZmllbGQsIHJpZ2h0KSk7CVwKKwkJfSBlbHNlIHsJCQkJ CQlcCisJCSAgICAvKiAgICAgIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICovXAorCQkgICAgLyogICAgcGF0aHAocikgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAqL1wKKwkJICAgIC8qICAvLyAgICAgICAgXCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKi9cCisJCSAgICAvKiAoYikgICAgICAgIChiKSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICovXAorCQkgICAgLyogICAgICAgICAgIC8gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAqL1wKKwkJICAgIC8qICAgICAgICAgIChiKSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKi9cCisJCSAgICAvKiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXAorCQkgICAgcmJ0bl9yb3RhdGVfbGVmdChh X3R5cGUsIGFfZmllbGQsIHBhdGhwLT5ub2RlLAlcCisJCSAgICAgIHRub2RlKTsJCQkJCQlcCisJ CSAgICAodm9pZClhX3N1bW1hcml6ZShwYXRocC0+bm9kZSwJCQlcCisJCQlyYnRuX2xlZnRfZ2V0 KGFfdHlwZSwgYV9maWVsZCwgcGF0aHAtPm5vZGUpLAlcCisJCQlyYnRuX3JpZ2h0X2dldChhX3R5 cGUsIGFfZmllbGQsIHBhdGhwLT5ub2RlKSk7CVwKKwkJfQkJCQkJCQlcCisJCSh2b2lkKWFfc3Vt bWFyaXplKHRub2RlLCByYnRuX2xlZnRfZ2V0KGFfdHlwZSwgYV9maWVsZCwJXAorCQkgICAgdG5v ZGUpLCByYnRuX3JpZ2h0X2dldChhX3R5cGUsIGFfZmllbGQsIHRub2RlKSk7CVwKKwkJLyogQmFs YW5jZSByZXN0b3JlZCwgYnV0IHJvdGF0aW9uIG1vZGlmaWVkIHN1YnRyZWUgICAgKi9cCisJCS8q IHJvb3QuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXAor CQlhc3NlcnQoKHVpbnRwdHJfdClwYXRocCA+ICh1aW50cHRyX3QpcGF0aCk7CQlcCisJCWlmIChw YXRocFstMV0uY21wIDwgMCkgewkJCQlcCisJCSAgICByYnRuX2xlZnRfc2V0KGFfdHlwZSwgYV9m aWVsZCwgcGF0aHBbLTFdLm5vZGUsCVwKKwkJICAgICAgdG5vZGUpOwkJCQkJCVwKKwkJfSBlbHNl IHsJCQkJCQlcCisJCSAgICByYnRuX3JpZ2h0X3NldChhX3R5cGUsIGFfZmllbGQsIHBhdGhwWy0x XS5ub2RlLAlcCisJCSAgICAgIHRub2RlKTsJCQkJCQlcCisJCX0JCQkJCQkJXAorCQlhX3ByZWZp eCMjc3VtbWFyaXplX3N3YXBwZWRfcmFuZ2UocGF0aCwgJnBhdGhwWy0xXSwJXAorCQkgICAgc3dh cF9sb2MpOwkJCQkJCVwKKwkJcmV0dXJuOwkJCQkJCQlcCisJICAgIH0gZWxzZSB7CQkJCQkJCVwK KwkJYV90eXBlICpyaWdodCA9IHJidG5fcmlnaHRfZ2V0KGFfdHlwZSwgYV9maWVsZCwJCVwKKwkJ ICBwYXRocC0+bm9kZSk7CQkJCQkJXAorCQlhX3R5cGUgKnJpZ2h0bGVmdCA9IHJidG5fbGVmdF9n ZXQoYV90eXBlLCBhX2ZpZWxkLAlcCisJCSAgcmlnaHQpOwkJCQkJCVwKKwkJaWYgKHJpZ2h0bGVm dCAhPSBOVUxMICYmIHJidG5fcmVkX2dldChhX3R5cGUsIGFfZmllbGQsCVwKKwkJICByaWdodGxl ZnQpKSB7CQkJCQkJXAorCQkgICAgLyogICAgICB8fCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAqL1wKKwkJICAgIC8qICAgIHBhdGhwKGIpICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKi9cCisJCSAgICAvKiAgLy8gICAgICAgIFwgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICovXAorCQkgICAgLyogKGIpICAgICAgICAoYikgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAqL1wKKwkJICAgIC8qICAgICAgICAgICAvICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cCisJCSAgICAvKiAgICAgICAgICAocikg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXAorCQkgICAgYV90eXBlICp0bm9k ZTsJCQkJCVwKKwkJICAgIHJidG5fYmxhY2tfc2V0KGFfdHlwZSwgYV9maWVsZCwgcmlnaHRsZWZ0 KTsJCVwKKwkJICAgIHJidG5fcm90YXRlX3JpZ2h0KGFfdHlwZSwgYV9maWVsZCwgcmlnaHQsIHRu b2RlKTsJXAorCQkgICAgcmJ0bl9yaWdodF9zZXQoYV90eXBlLCBhX2ZpZWxkLCBwYXRocC0+bm9k ZSwgdG5vZGUpO1wKKwkJICAgIHJidG5fcm90YXRlX2xlZnQoYV90eXBlLCBhX2ZpZWxkLCBwYXRo cC0+bm9kZSwJXAorCQkgICAgICB0bm9kZSk7CQkJCQkJXAorCQkgICAgKHZvaWQpYV9zdW1tYXJp emUocGF0aHAtPm5vZGUsCQkJXAorCQkJcmJ0bl9sZWZ0X2dldChhX3R5cGUsIGFfZmllbGQsIHBh dGhwLT5ub2RlKSwJXAorCQkJcmJ0bl9yaWdodF9nZXQoYV90eXBlLCBhX2ZpZWxkLCBwYXRocC0+ bm9kZSkpOwlcCisJCSAgICAodm9pZClhX3N1bW1hcml6ZShyaWdodCwJCQkJXAorCQkJcmJ0bl9s ZWZ0X2dldChhX3R5cGUsIGFfZmllbGQsIHJpZ2h0KSwJCVwKKwkJCXJidG5fcmlnaHRfZ2V0KGFf dHlwZSwgYV9maWVsZCwgcmlnaHQpKTsJXAorCQkgICAgKHZvaWQpYV9zdW1tYXJpemUodG5vZGUs CQkJCVwKKwkJCXJidG5fbGVmdF9nZXQoYV90eXBlLCBhX2ZpZWxkLCB0bm9kZSksCQlcCisJCQly YnRuX3JpZ2h0X2dldChhX3R5cGUsIGFfZmllbGQsIHRub2RlKSk7CVwKKwkJICAgIC8qIEJhbGFu Y2UgcmVzdG9yZWQsIGJ1dCByb3RhdGlvbiBtb2RpZmllZCAgICAgICAgKi9cCisJCSAgICAvKiBz dWJ0cmVlIHJvb3QsIHdoaWNoIG1heSBhY3R1YWxseSBiZSB0aGUgdHJlZSAgICovXAorCQkgICAg Lyogcm9vdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1wKKwkJ ICAgIGlmIChwYXRocCA9PSBwYXRoKSB7CQkJCVwKKwkJCS8qIFNldCByb290LiAqLwkJCQkJXAor CQkJcmJ0cmVlLT5yYnRfcm9vdCA9IHRub2RlOwkJCVwKKwkJICAgIH0gZWxzZSB7CQkJCQkJXAor CQkJaWYgKHBhdGhwWy0xXS5jbXAgPCAwKSB7CQkJXAorCQkJICAgIHJidG5fbGVmdF9zZXQoYV90 eXBlLCBhX2ZpZWxkLAkJXAorCQkJICAgICAgcGF0aHBbLTFdLm5vZGUsIHRub2RlKTsJCQlcCisJ CQl9IGVsc2UgewkJCQkJXAorCQkJICAgIHJidG5fcmlnaHRfc2V0KGFfdHlwZSwgYV9maWVsZCwJ CVwKKwkJCSAgICAgIHBhdGhwWy0xXS5ub2RlLCB0bm9kZSk7CQkJXAorCQkJfQkJCQkJCVwKKwkJ CWFfcHJlZml4IyNzdW1tYXJpemVfc3dhcHBlZF9yYW5nZShwYXRoLAkJXAorCQkJICAgICZwYXRo cFstMV0sIHN3YXBfbG9jKTsJCQlcCisJCSAgICB9CQkJCQkJCVwKKwkJICAgIHJldHVybjsJCQkJ CQlcCisJCX0gZWxzZSB7CQkJCQkJXAorCQkgICAgLyogICAgICB8fCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAqL1wKKwkJICAgIC8qICAgIHBhdGhwKGIpICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cCisJCSAgICAvKiAgLy8gICAgICAgIFwgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXAorCQkgICAgLyogKGIpICAgICAgICAo YikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1wKKwkJICAgIC8qICAgICAgICAg ICAvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cCisJCSAgICAvKiAgICAg ICAgICAoYikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXAorCQkgICAgYV90 eXBlICp0bm9kZTsJCQkJCVwKKwkJICAgIHJidG5fcmVkX3NldChhX3R5cGUsIGFfZmllbGQsIHBh dGhwLT5ub2RlKTsJCVwKKwkJICAgIHJidG5fcm90YXRlX2xlZnQoYV90eXBlLCBhX2ZpZWxkLCBw YXRocC0+bm9kZSwJXAorCQkgICAgICB0bm9kZSk7CQkJCQkJXAorCQkgICAgKHZvaWQpYV9zdW1t YXJpemUocGF0aHAtPm5vZGUsCQkJXAorCQkJcmJ0bl9sZWZ0X2dldChhX3R5cGUsIGFfZmllbGQs IHBhdGhwLT5ub2RlKSwJXAorCQkJcmJ0bl9yaWdodF9nZXQoYV90eXBlLCBhX2ZpZWxkLCBwYXRo cC0+bm9kZSkpOwlcCisJCSAgICAodm9pZClhX3N1bW1hcml6ZSh0bm9kZSwJCQkJXAorCQkJcmJ0 bl9sZWZ0X2dldChhX3R5cGUsIGFfZmllbGQsIHRub2RlKSwJCVwKKwkJCXJidG5fcmlnaHRfZ2V0 KGFfdHlwZSwgYV9maWVsZCwgdG5vZGUpKTsJXAorCQkgICAgcGF0aHAtPm5vZGUgPSB0bm9kZTsJ CQkJXAorCQl9CQkJCQkJCVwKKwkgICAgfQkJCQkJCQkJXAorCX0gZWxzZSB7CQkJCQkJCVwKKwkg ICAgYV90eXBlICpsZWZ0OwkJCQkJCVwKKwkgICAgcmJ0bl9yaWdodF9zZXQoYV90eXBlLCBhX2Zp ZWxkLCBwYXRocC0+bm9kZSwJCVwKKwkgICAgICBwYXRocFsxXS5ub2RlKTsJCQkJCQlcCisJICAg IGxlZnQgPSByYnRuX2xlZnRfZ2V0KGFfdHlwZSwgYV9maWVsZCwgcGF0aHAtPm5vZGUpOwkJXAor CSAgICBpZiAocmJ0bl9yZWRfZ2V0KGFfdHlwZSwgYV9maWVsZCwgbGVmdCkpIHsJCQlcCisJCWFf dHlwZSAqdG5vZGU7CQkJCQkJXAorCQlhX3R5cGUgKmxlZnRyaWdodCA9IHJidG5fcmlnaHRfZ2V0 KGFfdHlwZSwgYV9maWVsZCwJXAorCQkgIGxlZnQpOwkJCQkJCVwKKwkJYV90eXBlICpsZWZ0cmln aHRsZWZ0ID0gcmJ0bl9sZWZ0X2dldChhX3R5cGUsIGFfZmllbGQsCVwKKwkJICBsZWZ0cmlnaHQp OwkJCQkJCVwKKwkJaWYgKGxlZnRyaWdodGxlZnQgIT0gTlVMTCAmJiByYnRuX3JlZF9nZXQoYV90 eXBlLAlcCisJCSAgYV9maWVsZCwgbGVmdHJpZ2h0bGVmdCkpIHsJCQkJXAorCQkgICAgLyogICAg ICB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1wKKwkJICAgIC8q ICAgIHBhdGhwKGIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cCisJCSAg ICAvKiAgIC8gICAgICAgIFxcICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXAor CQkgICAgLyogKHIpICAgICAgICAoYikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAq L1wKKwkJICAgIC8qICAgXCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKi9cCisJCSAgICAvKiAgIChiKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICovXAorCQkgICAgLyogICAvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAqL1wKKwkJICAgIC8qIChyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKi9cCisJCSAgICBhX3R5cGUgKnVub2RlOwkJCQkJXAorCQkgICAgcmJ0 bl9ibGFja19zZXQoYV90eXBlLCBhX2ZpZWxkLCBsZWZ0cmlnaHRsZWZ0KTsJXAorCQkgICAgcmJ0 bl9yb3RhdGVfcmlnaHQoYV90eXBlLCBhX2ZpZWxkLCBwYXRocC0+bm9kZSwJXAorCQkgICAgICB1 bm9kZSk7CQkJCQkJXAorCQkgICAgcmJ0bl9yb3RhdGVfcmlnaHQoYV90eXBlLCBhX2ZpZWxkLCBw YXRocC0+bm9kZSwJXAorCQkgICAgICB0bm9kZSk7CQkJCQkJXAorCQkgICAgcmJ0bl9yaWdodF9z ZXQoYV90eXBlLCBhX2ZpZWxkLCB1bm9kZSwgdG5vZGUpOwlcCisJCSAgICByYnRuX3JvdGF0ZV9s ZWZ0KGFfdHlwZSwgYV9maWVsZCwgdW5vZGUsIHRub2RlKTsJXAorCQkgICAgKHZvaWQpYV9zdW1t YXJpemUocGF0aHAtPm5vZGUsCQkJXAorCQkJcmJ0bl9sZWZ0X2dldChhX3R5cGUsIGFfZmllbGQs IHBhdGhwLT5ub2RlKSwJXAorCQkJcmJ0bl9yaWdodF9nZXQoYV90eXBlLCBhX2ZpZWxkLCBwYXRo cC0+bm9kZSkpOwlcCisJCSAgICAodm9pZClhX3N1bW1hcml6ZSh1bm9kZSwJCQkJXAorCQkJcmJ0 bl9sZWZ0X2dldChhX3R5cGUsIGFfZmllbGQsIHVub2RlKSwJCVwKKwkJCXJidG5fcmlnaHRfZ2V0 KGFfdHlwZSwgYV9maWVsZCwgdW5vZGUpKTsJXAorCQl9IGVsc2UgewkJCQkJCVwKKwkJICAgIC8q ICAgICAgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cCisJCSAg ICAvKiAgICBwYXRocChiKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXAor CQkgICAgLyogICAvICAgICAgICBcXCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAq L1wKKwkJICAgIC8qIChyKSAgICAgICAgKGIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKi9cCisJCSAgICAvKiAgIFwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICovXAorCQkgICAgLyogICAoYikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAqL1wKKwkJICAgIC8qICAgLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKi9cCisJCSAgICAvKiAoYikgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICovXAorCQkgICAgYXNzZXJ0KGxlZnRyaWdodCAhPSBOVUxMKTsJ CQkJXAorCQkgICAgcmJ0bl9yZWRfc2V0KGFfdHlwZSwgYV9maWVsZCwgbGVmdHJpZ2h0KTsJCVwK KwkJICAgIHJidG5fcm90YXRlX3JpZ2h0KGFfdHlwZSwgYV9maWVsZCwgcGF0aHAtPm5vZGUsCVwK KwkJICAgICAgdG5vZGUpOwkJCQkJCVwKKwkJICAgIHJidG5fYmxhY2tfc2V0KGFfdHlwZSwgYV9m aWVsZCwgdG5vZGUpOwkJXAorCQkgICAgKHZvaWQpYV9zdW1tYXJpemUocGF0aHAtPm5vZGUsCQkJ XAorCQkJcmJ0bl9sZWZ0X2dldChhX3R5cGUsIGFfZmllbGQsIHBhdGhwLT5ub2RlKSwJXAorCQkJ cmJ0bl9yaWdodF9nZXQoYV90eXBlLCBhX2ZpZWxkLCBwYXRocC0+bm9kZSkpOwlcCisJCX0JCQkJ CQkJXAorCQkodm9pZClhX3N1bW1hcml6ZSh0bm9kZSwJCQkJXAorCQkgICAgcmJ0bl9sZWZ0X2dl dChhX3R5cGUsIGFfZmllbGQsIHRub2RlKSwJCVwKKwkJICAgIHJidG5fcmlnaHRfZ2V0KGFfdHlw ZSwgYV9maWVsZCwgdG5vZGUpKTsJCVwKKwkJLyogQmFsYW5jZSByZXN0b3JlZCwgYnV0IHJvdGF0 aW9uIG1vZGlmaWVkIHN1YnRyZWUgICAgKi9cCisJCS8qIHJvb3QsIHdoaWNoIG1heSBhY3R1YWxs eSBiZSB0aGUgdHJlZSByb290LiAgICAgICAgICovXAorCQlpZiAocGF0aHAgPT0gcGF0aCkgewkJ CQkJXAorCQkgICAgLyogU2V0IHJvb3QuICovCQkJCQlcCisJCSAgICByYnRyZWUtPnJidF9yb290 ID0gdG5vZGU7CQkJCVwKKwkJfSBlbHNlIHsJCQkJCQlcCisJCSAgICBpZiAocGF0aHBbLTFdLmNt cCA8IDApIHsJCQkJXAorCQkJcmJ0bl9sZWZ0X3NldChhX3R5cGUsIGFfZmllbGQsIHBhdGhwWy0x XS5ub2RlLAlcCisJCQkgIHRub2RlKTsJCQkJCVwKKwkJICAgIH0gZWxzZSB7CQkJCQkJXAorCQkJ cmJ0bl9yaWdodF9zZXQoYV90eXBlLCBhX2ZpZWxkLCBwYXRocFstMV0ubm9kZSwJXAorCQkJICB0 bm9kZSk7CQkJCQlcCisJCSAgICB9CQkJCQkJCVwKKwkJICAgIGFfcHJlZml4IyNzdW1tYXJpemVf c3dhcHBlZF9yYW5nZShwYXRoLCAmcGF0aHBbLTFdLAlcCisJCQlzd2FwX2xvYyk7CQkJCQlcCisJ CX0JCQkJCQkJXAorCQlyZXR1cm47CQkJCQkJCVwKKwkgICAgfSBlbHNlIGlmIChyYnRuX3JlZF9n ZXQoYV90eXBlLCBhX2ZpZWxkLCBwYXRocC0+bm9kZSkpIHsJXAorCQlhX3R5cGUgKmxlZnRsZWZ0 ID0gcmJ0bl9sZWZ0X2dldChhX3R5cGUsIGFfZmllbGQsIGxlZnQpO1wKKwkJaWYgKGxlZnRsZWZ0 ICE9IE5VTEwgJiYgcmJ0bl9yZWRfZ2V0KGFfdHlwZSwgYV9maWVsZCwJXAorCQkgIGxlZnRsZWZ0 KSkgewkJCQkJCVwKKwkJICAgIC8qICAgICAgICB8fCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKi9cCisJCSAgICAvKiAgICAgIHBhdGhwKHIpICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICovXAorCQkgICAgLyogICAgIC8gICAgICAgIFxcICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAqL1wKKwkJICAgIC8qICAgKGIpICAgICAgICAoYikgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKi9cCisJCSAgICAvKiAgIC8gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXAorCQkgICAgLyogKHIpICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1wKKwkJICAgIGFfdHlwZSAqdG5vZGU7 CQkJCQlcCisJCSAgICByYnRuX2JsYWNrX3NldChhX3R5cGUsIGFfZmllbGQsIHBhdGhwLT5ub2Rl KTsJXAorCQkgICAgcmJ0bl9yZWRfc2V0KGFfdHlwZSwgYV9maWVsZCwgbGVmdCk7CQlcCisJCSAg ICByYnRuX2JsYWNrX3NldChhX3R5cGUsIGFfZmllbGQsIGxlZnRsZWZ0KTsJCVwKKwkJICAgIHJi dG5fcm90YXRlX3JpZ2h0KGFfdHlwZSwgYV9maWVsZCwgcGF0aHAtPm5vZGUsCVwKKwkJICAgICAg dG5vZGUpOwkJCQkJCVwKKwkJICAgICh2b2lkKWFfc3VtbWFyaXplKHBhdGhwLT5ub2RlLAkJCVwK KwkJCXJidG5fbGVmdF9nZXQoYV90eXBlLCBhX2ZpZWxkLCBwYXRocC0+bm9kZSksCVwKKwkJCXJi dG5fcmlnaHRfZ2V0KGFfdHlwZSwgYV9maWVsZCwgcGF0aHAtPm5vZGUpKTsJXAorCQkgICAgKHZv aWQpYV9zdW1tYXJpemUodG5vZGUsCQkJCVwKKwkJCXJidG5fbGVmdF9nZXQoYV90eXBlLCBhX2Zp ZWxkLCB0bm9kZSksCQlcCisJCQlyYnRuX3JpZ2h0X2dldChhX3R5cGUsIGFfZmllbGQsIHRub2Rl KSk7CVwKKwkJICAgIC8qIEJhbGFuY2UgcmVzdG9yZWQsIGJ1dCByb3RhdGlvbiBtb2RpZmllZCAg ICAgICAgKi9cCisJCSAgICAvKiBzdWJ0cmVlIHJvb3QuICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICovXAorCQkgICAgYXNzZXJ0KCh1aW50cHRyX3QpcGF0aHAgPiAodWludHB0cl90 KXBhdGgpOwkJXAorCQkgICAgaWYgKHBhdGhwWy0xXS5jbXAgPCAwKSB7CQkJCVwKKwkJCXJidG5f bGVmdF9zZXQoYV90eXBlLCBhX2ZpZWxkLCBwYXRocFstMV0ubm9kZSwJXAorCQkJICB0bm9kZSk7 CQkJCQlcCisJCSAgICB9IGVsc2UgewkJCQkJCVwKKwkJCXJidG5fcmlnaHRfc2V0KGFfdHlwZSwg YV9maWVsZCwgcGF0aHBbLTFdLm5vZGUsCVwKKwkJCSAgdG5vZGUpOwkJCQkJXAorCQkgICAgfQkJ CQkJCQlcCisJCSAgICBhX3ByZWZpeCMjc3VtbWFyaXplX3N3YXBwZWRfcmFuZ2UocGF0aCwgJnBh dGhwWy0xXSwJXAorCQkJc3dhcF9sb2MpOwkJCQkJXAorCQkgICAgcmV0dXJuOwkJCQkJCVwKKwkJ fSBlbHNlIHsJCQkJCQlcCisJCSAgICAvKiAgICAgICAgfHwgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICovXAorCQkgICAgLyogICAgICBwYXRocChyKSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAqL1wKKwkJICAgIC8qICAgICAvICAgICAgICBcXCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKi9cCisJCSAgICAvKiAgIChiKSAgICAgICAgKGIpICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXAorCQkgICAgLyogICAvICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1wKKwkJICAgIC8qIChiKSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cCisJCSAgICByYnRuX3JlZF9z ZXQoYV90eXBlLCBhX2ZpZWxkLCBsZWZ0KTsJCVwKKwkJICAgIHJidG5fYmxhY2tfc2V0KGFfdHlw ZSwgYV9maWVsZCwgcGF0aHAtPm5vZGUpOwlcCisJCSAgICAvKiBCYWxhbmNlIHJlc3RvcmVkLiAq LwkJCQlcCisJCSAgICBhX3ByZWZpeCMjc3VtbWFyaXplX3N3YXBwZWRfcmFuZ2UocGF0aCwgcGF0 aHAsCVwKKwkJCXN3YXBfbG9jKTsJCQkJCVwKKwkJICAgIHJldHVybjsJCQkJCQlcCisJCX0JCQkJ CQkJXAorCSAgICB9IGVsc2UgewkJCQkJCQlcCisJCWFfdHlwZSAqbGVmdGxlZnQgPSByYnRuX2xl ZnRfZ2V0KGFfdHlwZSwgYV9maWVsZCwgbGVmdCk7XAorCQlpZiAobGVmdGxlZnQgIT0gTlVMTCAm JiByYnRuX3JlZF9nZXQoYV90eXBlLCBhX2ZpZWxkLAlcCisJCSAgbGVmdGxlZnQpKSB7CQkJCQkJ XAorCQkgICAgLyogICAgICAgICAgICAgICB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAqL1wKKwkJICAgIC8qICAgICAgICAgICAgIHBhdGhwKGIpICAgICAgICAgICAgICAgICAgICAg ICAgICAgKi9cCisJCSAgICAvKiAgICAgICAgICAgIC8gICAgICAgIFxcICAgICAgICAgICAgICAg ICAgICAgICAgICovXAorCQkgICAgLyogICAgICAgICAgKGIpICAgICAgICAoYikgICAgICAgICAg ICAgICAgICAgICAgICAqL1wKKwkJICAgIC8qICAgICAgICAgIC8gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKi9cCisJCSAgICAvKiAgICAgICAgKHIpICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICovXAorCQkgICAgYV90eXBlICp0bm9kZTsJCQkJCVwKKwkJ ICAgIHJidG5fYmxhY2tfc2V0KGFfdHlwZSwgYV9maWVsZCwgbGVmdGxlZnQpOwkJXAorCQkgICAg cmJ0bl9yb3RhdGVfcmlnaHQoYV90eXBlLCBhX2ZpZWxkLCBwYXRocC0+bm9kZSwJXAorCQkgICAg ICB0bm9kZSk7CQkJCQkJXAorCQkgICAgKHZvaWQpYV9zdW1tYXJpemUocGF0aHAtPm5vZGUsCQkJ XAorCQkJcmJ0bl9sZWZ0X2dldChhX3R5cGUsIGFfZmllbGQsIHBhdGhwLT5ub2RlKSwJXAorCQkJ cmJ0bl9yaWdodF9nZXQoYV90eXBlLCBhX2ZpZWxkLCBwYXRocC0+bm9kZSkpOwlcCisJCSAgICAo dm9pZClhX3N1bW1hcml6ZSh0bm9kZSwJCQkJXAorCQkJcmJ0bl9sZWZ0X2dldChhX3R5cGUsIGFf ZmllbGQsIHRub2RlKSwJCVwKKwkJCXJidG5fcmlnaHRfZ2V0KGFfdHlwZSwgYV9maWVsZCwgdG5v ZGUpKTsJXAorCQkgICAgLyogQmFsYW5jZSByZXN0b3JlZCwgYnV0IHJvdGF0aW9uIG1vZGlmaWVk ICAgICAgICAqL1wKKwkJICAgIC8qIHN1YnRyZWUgcm9vdCwgd2hpY2ggbWF5IGFjdHVhbGx5IGJl IHRoZSB0cmVlICAgKi9cCisJCSAgICAvKiByb290LiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICovXAorCQkgICAgaWYgKHBhdGhwID09IHBhdGgpIHsJCQkJXAorCQkJ LyogU2V0IHJvb3QuICovCQkJCQlcCisJCQlyYnRyZWUtPnJidF9yb290ID0gdG5vZGU7CQkJXAor CQkgICAgfSBlbHNlIHsJCQkJCQlcCisJCQlpZiAocGF0aHBbLTFdLmNtcCA8IDApIHsJCQlcCisJ CQkgICAgcmJ0bl9sZWZ0X3NldChhX3R5cGUsIGFfZmllbGQsCQlcCisJCQkgICAgICBwYXRocFst MV0ubm9kZSwgdG5vZGUpOwkJCVwKKwkJCX0gZWxzZSB7CQkJCQlcCisJCQkgICAgcmJ0bl9yaWdo dF9zZXQoYV90eXBlLCBhX2ZpZWxkLAkJXAorCQkJICAgICAgcGF0aHBbLTFdLm5vZGUsIHRub2Rl KTsJCQlcCisJCQl9CQkJCQkJXAorCQkgICAgICAgIGFfcHJlZml4IyNzdW1tYXJpemVfc3dhcHBl ZF9yYW5nZShwYXRoLAkJXAorCQkJICAgICZwYXRocFstMV0sIHN3YXBfbG9jKTsJCQlcCisJCSAg ICB9CQkJCQkJCVwKKwkJICAgIHJldHVybjsJCQkJCQlcCisJCX0gZWxzZSB7CQkJCQkJXAorCQkg ICAgLyogICAgICAgICAgICAgICB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1wK KwkJICAgIC8qICAgICAgICAgICAgIHBhdGhwKGIpICAgICAgICAgICAgICAgICAgICAgICAgICAg Ki9cCisJCSAgICAvKiAgICAgICAgICAgIC8gICAgICAgIFxcICAgICAgICAgICAgICAgICAgICAg ICAgICovXAorCQkgICAgLyogICAgICAgICAgKGIpICAgICAgICAoYikgICAgICAgICAgICAgICAg ICAgICAgICAqL1wKKwkJICAgIC8qICAgICAgICAgIC8gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKi9cCisJCSAgICAvKiAgICAgICAgKGIpICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICovXAorCQkgICAgcmJ0bl9yZWRfc2V0KGFfdHlwZSwgYV9maWVsZCwg bGVmdCk7CQlcCisJCSAgICAodm9pZClhX3N1bW1hcml6ZShwYXRocC0+bm9kZSwJCQlcCisJCQly YnRuX2xlZnRfZ2V0KGFfdHlwZSwgYV9maWVsZCwgcGF0aHAtPm5vZGUpLAlcCisJCQlyYnRuX3Jp Z2h0X2dldChhX3R5cGUsIGFfZmllbGQsIHBhdGhwLT5ub2RlKSk7CVwKKwkJfQkJCQkJCQlcCisJ ICAgIH0JCQkJCQkJCVwKKwl9CQkJCQkJCQlcCisgICAgfQkJCQkJCQkJCVwKKyAgICAvKiBTZXQg cm9vdC4gKi8JCQkJCQkJXAorICAgIHJidHJlZS0+cmJ0X3Jvb3QgPSBwYXRoLT5ub2RlOwkJCQkJ XAorICAgIGFzc2VydCghcmJ0bl9yZWRfZ2V0KGFfdHlwZSwgYV9maWVsZCwgcmJ0cmVlLT5yYnRf cm9vdCkpOwkJXAorfQkJCQkJCQkJCVwKK2FfYXR0ciBhX3R5cGUgKgkJCQkJCQkJXAorYV9wcmVm aXgjI2l0ZXJfcmVjdXJzZShhX3JidF90eXBlICpyYnRyZWUsIGFfdHlwZSAqbm9kZSwJCVwKKyAg YV90eXBlICooKmNiKShhX3JidF90eXBlICosIGFfdHlwZSAqLCB2b2lkICopLCB2b2lkICphcmcp IHsJCVwKKyAgICBpZiAobm9kZSA9PSBOVUxMKSB7CQkJCQkJCVwKKwlyZXR1cm4gTlVMTDsJCQkJ CQkJXAorICAgIH0gZWxzZSB7CQkJCQkJCQlcCisJYV90eXBlICpyZXQ7CQkJCQkJCVwKKwlpZiAo KHJldCA9IGFfcHJlZml4IyNpdGVyX3JlY3Vyc2UocmJ0cmVlLCByYnRuX2xlZnRfZ2V0KGFfdHlw ZSwJXAorCSAgYV9maWVsZCwgbm9kZSksIGNiLCBhcmcpKSAhPSBOVUxMIHx8IChyZXQgPSBjYihy YnRyZWUsIG5vZGUsCVwKKwkgIGFyZykpICE9IE5VTEwpIHsJCQkJCQlcCisJICAgIHJldHVybiBy ZXQ7CQkJCQkJCVwKKwl9CQkJCQkJCQlcCisJcmV0dXJuIGFfcHJlZml4IyNpdGVyX3JlY3Vyc2Uo cmJ0cmVlLCByYnRuX3JpZ2h0X2dldChhX3R5cGUsCVwKKwkgIGFfZmllbGQsIG5vZGUpLCBjYiwg YXJnKTsJCQkJCVwKKyAgICB9CQkJCQkJCQkJXAorfQkJCQkJCQkJCVwKK2FfYXR0ciBhX3R5cGUg KgkJCQkJCQkJXAorYV9wcmVmaXgjI2l0ZXJfc3RhcnQoYV9yYnRfdHlwZSAqcmJ0cmVlLCBhX3R5 cGUgKnN0YXJ0LCBhX3R5cGUgKm5vZGUsCVwKKyAgYV90eXBlICooKmNiKShhX3JidF90eXBlICos IGFfdHlwZSAqLCB2b2lkICopLCB2b2lkICphcmcpIHsJCVwKKyAgICBpbnQgY21wID0gYV9jbXAo c3RhcnQsIG5vZGUpOwkJCQkJXAorICAgIGlmIChjbXAgPCAwKSB7CQkJCQkJCVwKKwlhX3R5cGUg KnJldDsJCQkJCQkJXAorCWlmICgocmV0ID0gYV9wcmVmaXgjI2l0ZXJfc3RhcnQocmJ0cmVlLCBz dGFydCwJCQlcCisJICByYnRuX2xlZnRfZ2V0KGFfdHlwZSwgYV9maWVsZCwgbm9kZSksIGNiLCBh cmcpKSAhPSBOVUxMIHx8CVwKKwkgIChyZXQgPSBjYihyYnRyZWUsIG5vZGUsIGFyZykpICE9IE5V TEwpIHsJCQlcCisJICAgIHJldHVybiByZXQ7CQkJCQkJCVwKKwl9CQkJCQkJCQlcCisJcmV0dXJu IGFfcHJlZml4IyNpdGVyX3JlY3Vyc2UocmJ0cmVlLCByYnRuX3JpZ2h0X2dldChhX3R5cGUsCVwK KwkgIGFfZmllbGQsIG5vZGUpLCBjYiwgYXJnKTsJCQkJCVwKKyAgICB9IGVsc2UgaWYgKGNtcCA+ IDApIHsJCQkJCQlcCisJcmV0dXJuIGFfcHJlZml4IyNpdGVyX3N0YXJ0KHJidHJlZSwgc3RhcnQs CQkJXAorCSAgcmJ0bl9yaWdodF9nZXQoYV90eXBlLCBhX2ZpZWxkLCBub2RlKSwgY2IsIGFyZyk7 CQlcCisgICAgfSBlbHNlIHsJCQkJCQkJCVwKKwlhX3R5cGUgKnJldDsJCQkJCQkJXAorCWlmICgo cmV0ID0gY2IocmJ0cmVlLCBub2RlLCBhcmcpKSAhPSBOVUxMKSB7CQkJXAorCSAgICByZXR1cm4g cmV0OwkJCQkJCQlcCisJfQkJCQkJCQkJXAorCXJldHVybiBhX3ByZWZpeCMjaXRlcl9yZWN1cnNl KHJidHJlZSwgcmJ0bl9yaWdodF9nZXQoYV90eXBlLAlcCisJICBhX2ZpZWxkLCBub2RlKSwgY2Is IGFyZyk7CQkJCQlcCisgICAgfQkJCQkJCQkJCVwKK30JCQkJCQkJCQlcCithX2F0dHIgYV90eXBl ICoJCQkJCQkJCVwKK2FfcHJlZml4IyNpdGVyKGFfcmJ0X3R5cGUgKnJidHJlZSwgYV90eXBlICpz dGFydCwgYV90eXBlICooKmNiKSgJXAorICBhX3JidF90eXBlICosIGFfdHlwZSAqLCB2b2lkICop LCB2b2lkICphcmcpIHsJCQkJXAorICAgIGFfdHlwZSAqcmV0OwkJCQkJCQlcCisgICAgaWYgKHN0 YXJ0ICE9IE5VTEwpIHsJCQkJCQlcCisJcmV0ID0gYV9wcmVmaXgjI2l0ZXJfc3RhcnQocmJ0cmVl LCBzdGFydCwgcmJ0cmVlLT5yYnRfcm9vdCwJXAorCSAgY2IsIGFyZyk7CQkJCQkJCVwKKyAgICB9 IGVsc2UgewkJCQkJCQkJXAorCXJldCA9IGFfcHJlZml4IyNpdGVyX3JlY3Vyc2UocmJ0cmVlLCBy YnRyZWUtPnJidF9yb290LCBjYiwgYXJnKTtcCisgICAgfQkJCQkJCQkJCVwKKyAgICByZXR1cm4g cmV0OwkJCQkJCQkJXAorfQkJCQkJCQkJCVwKK2FfYXR0ciBhX3R5cGUgKgkJCQkJCQkJXAorYV9w cmVmaXgjI3JldmVyc2VfaXRlcl9yZWN1cnNlKGFfcmJ0X3R5cGUgKnJidHJlZSwgYV90eXBlICpu b2RlLAlcCisgIGFfdHlwZSAqKCpjYikoYV9yYnRfdHlwZSAqLCBhX3R5cGUgKiwgdm9pZCAqKSwg dm9pZCAqYXJnKSB7CQlcCisgICAgaWYgKG5vZGUgPT0gTlVMTCkgewkJCQkJCQlcCisJcmV0dXJu IE5VTEw7CQkJCQkJCVwKKyAgICB9IGVsc2UgewkJCQkJCQkJXAorCWFfdHlwZSAqcmV0OwkJCQkJ CQlcCisJaWYgKChyZXQgPSBhX3ByZWZpeCMjcmV2ZXJzZV9pdGVyX3JlY3Vyc2UocmJ0cmVlLAkJ XAorCSAgcmJ0bl9yaWdodF9nZXQoYV90eXBlLCBhX2ZpZWxkLCBub2RlKSwgY2IsIGFyZykpICE9 IE5VTEwgfHwJXAorCSAgKHJldCA9IGNiKHJidHJlZSwgbm9kZSwgYXJnKSkgIT0gTlVMTCkgewkJ CVwKKwkgICAgcmV0dXJuIHJldDsJCQkJCQkJXAorCX0JCQkJCQkJCVwKKwlyZXR1cm4gYV9wcmVm aXgjI3JldmVyc2VfaXRlcl9yZWN1cnNlKHJidHJlZSwJCQlcCisJICByYnRuX2xlZnRfZ2V0KGFf dHlwZSwgYV9maWVsZCwgbm9kZSksIGNiLCBhcmcpOwkJXAorICAgIH0JCQkJCQkJCQlcCit9CQkJ CQkJCQkJXAorYV9hdHRyIGFfdHlwZSAqCQkJCQkJCQlcCithX3ByZWZpeCMjcmV2ZXJzZV9pdGVy X3N0YXJ0KGFfcmJ0X3R5cGUgKnJidHJlZSwgYV90eXBlICpzdGFydCwJCVwKKyAgYV90eXBlICpu b2RlLCBhX3R5cGUgKigqY2IpKGFfcmJ0X3R5cGUgKiwgYV90eXBlICosIHZvaWQgKiksCQlcCisg IHZvaWQgKmFyZykgewkJCQkJCQkJXAorICAgIGludCBjbXAgPSBhX2NtcChzdGFydCwgbm9kZSk7 CQkJCQlcCisgICAgaWYgKGNtcCA+IDApIHsJCQkJCQkJXAorCWFfdHlwZSAqcmV0OwkJCQkJCQlc CisJaWYgKChyZXQgPSBhX3ByZWZpeCMjcmV2ZXJzZV9pdGVyX3N0YXJ0KHJidHJlZSwgc3RhcnQs CQlcCisJICByYnRuX3JpZ2h0X2dldChhX3R5cGUsIGFfZmllbGQsIG5vZGUpLCBjYiwgYXJnKSkg IT0gTlVMTCB8fAlcCisJICAocmV0ID0gY2IocmJ0cmVlLCBub2RlLCBhcmcpKSAhPSBOVUxMKSB7 CQkJXAorCSAgICByZXR1cm4gcmV0OwkJCQkJCQlcCisJfQkJCQkJCQkJXAorCXJldHVybiBhX3By ZWZpeCMjcmV2ZXJzZV9pdGVyX3JlY3Vyc2UocmJ0cmVlLAkJCVwKKwkgIHJidG5fbGVmdF9nZXQo YV90eXBlLCBhX2ZpZWxkLCBub2RlKSwgY2IsIGFyZyk7CQlcCisgICAgfSBlbHNlIGlmIChjbXAg PCAwKSB7CQkJCQkJXAorCXJldHVybiBhX3ByZWZpeCMjcmV2ZXJzZV9pdGVyX3N0YXJ0KHJidHJl ZSwgc3RhcnQsCQlcCisJICByYnRuX2xlZnRfZ2V0KGFfdHlwZSwgYV9maWVsZCwgbm9kZSksIGNi LCBhcmcpOwkJXAorICAgIH0gZWxzZSB7CQkJCQkJCQlcCisJYV90eXBlICpyZXQ7CQkJCQkJCVwK KwlpZiAoKHJldCA9IGNiKHJidHJlZSwgbm9kZSwgYXJnKSkgIT0gTlVMTCkgewkJCVwKKwkgICAg cmV0dXJuIHJldDsJCQkJCQkJXAorCX0JCQkJCQkJCVwKKwlyZXR1cm4gYV9wcmVmaXgjI3JldmVy c2VfaXRlcl9yZWN1cnNlKHJidHJlZSwJCQlcCisJICByYnRuX2xlZnRfZ2V0KGFfdHlwZSwgYV9m aWVsZCwgbm9kZSksIGNiLCBhcmcpOwkJXAorICAgIH0JCQkJCQkJCQlcCit9CQkJCQkJCQkJXAor YV9hdHRyIGFfdHlwZSAqCQkJCQkJCQlcCithX3ByZWZpeCMjcmV2ZXJzZV9pdGVyKGFfcmJ0X3R5 cGUgKnJidHJlZSwgYV90eXBlICpzdGFydCwJCVwKKyAgYV90eXBlICooKmNiKShhX3JidF90eXBl ICosIGFfdHlwZSAqLCB2b2lkICopLCB2b2lkICphcmcpIHsJCVwKKyAgICBhX3R5cGUgKnJldDsJ CQkJCQkJXAorICAgIGlmIChzdGFydCAhPSBOVUxMKSB7CQkJCQkJXAorCXJldCA9IGFfcHJlZml4 IyNyZXZlcnNlX2l0ZXJfc3RhcnQocmJ0cmVlLCBzdGFydCwJCVwKKwkgIHJidHJlZS0+cmJ0X3Jv b3QsIGNiLCBhcmcpOwkJCQkJXAorICAgIH0gZWxzZSB7CQkJCQkJCQlcCisJcmV0ID0gYV9wcmVm aXgjI3JldmVyc2VfaXRlcl9yZWN1cnNlKHJidHJlZSwgcmJ0cmVlLT5yYnRfcm9vdCwJXAorCSAg Y2IsIGFyZyk7CQkJCQkJCVwKKyAgICB9CQkJCQkJCQkJXAorICAgIHJldHVybiByZXQ7CQkJCQkJ CQlcCit9CQkJCQkJCQkJXAorYV9hdHRyIHZvaWQJCQkJCQkJCVwKK2FfcHJlZml4IyNkZXN0cm95 X3JlY3Vyc2UoYV9yYnRfdHlwZSAqcmJ0cmVlLCBhX3R5cGUgKm5vZGUsIHZvaWQgKCpjYikoCVwK KyAgYV90eXBlICosIHZvaWQgKiksIHZvaWQgKmFyZykgewkJCQkJXAorICAgIGlmIChub2RlID09 IE5VTEwpIHsJCQkJCQkJXAorCXJldHVybjsJCQkJCQkJCVwKKyAgICB9CQkJCQkJCQkJXAorICAg IGFfcHJlZml4IyNkZXN0cm95X3JlY3Vyc2UocmJ0cmVlLCByYnRuX2xlZnRfZ2V0KGFfdHlwZSwg YV9maWVsZCwJXAorICAgICAgbm9kZSksIGNiLCBhcmcpOwkJCQkJCQlcCisgICAgcmJ0bl9sZWZ0 X3NldChhX3R5cGUsIGFfZmllbGQsIChub2RlKSwgTlVMTCk7CQkJXAorICAgIGFfcHJlZml4IyNk ZXN0cm95X3JlY3Vyc2UocmJ0cmVlLCByYnRuX3JpZ2h0X2dldChhX3R5cGUsIGFfZmllbGQsCVwK KyAgICAgIG5vZGUpLCBjYiwgYXJnKTsJCQkJCQkJXAorICAgIHJidG5fcmlnaHRfc2V0KGFfdHlw ZSwgYV9maWVsZCwgKG5vZGUpLCBOVUxMKTsJCQlcCisgICAgaWYgKGNiKSB7CQkJCQkJCQlcCisJ Y2Iobm9kZSwgYXJnKTsJCQkJCQkJXAorICAgIH0JCQkJCQkJCQlcCit9CQkJCQkJCQkJXAorYV9h dHRyIHZvaWQJCQkJCQkJCVwKK2FfcHJlZml4IyNkZXN0cm95KGFfcmJ0X3R5cGUgKnJidHJlZSwg dm9pZCAoKmNiKShhX3R5cGUgKiwgdm9pZCAqKSwJXAorICB2b2lkICphcmcpIHsJCQkJCQkJCVwK KyAgICBhX3ByZWZpeCMjZGVzdHJveV9yZWN1cnNlKHJidHJlZSwgcmJ0cmVlLT5yYnRfcm9vdCwg Y2IsIGFyZyk7CVwKKyAgICByYnRyZWUtPnJidF9yb290ID0gTlVMTDsJCQkJCQlcCit9CQkJCQkJ CQkJXAorLyogQkVHSU4gU1VNTUFSSVpFRC1PTkxZIElNUExFTUVOVEFUSU9OICovCQkJCVwKK3Ji X3N1bW1hcml6ZWRfb25seV8jI2FfaXNfc3VtbWFyaXplZCgJCQkJCVwKK3N0YXRpYyBpbmxpbmUg YV9wcmVmaXgjI3BhdGhfZW50cnlfdCAqCQkJCQlcCithX3ByZWZpeCMjd2luZChhX3JidF90eXBl ICpyYnRyZWUsCQkJCQlcCisgICAgYV9wcmVmaXgjI3BhdGhfZW50cnlfdCBwYXRoW1JCX01BWF9E RVBUSF0sIGFfdHlwZSAqbm9kZSkgewkJXAorICAgIGFfcHJlZml4IyNwYXRoX2VudHJ5X3QgKnBh dGhwOwkJCQkJXAorICAgIHBhdGgtPm5vZGUgPSByYnRyZWUtPnJidF9yb290OwkJCQkJXAorICAg IGZvciAocGF0aHAgPSBwYXRoOyA7IHBhdGhwKyspIHsJCQkJCVwKKwlhc3NlcnQoKHNpemVfdCko cGF0aHAgLSBwYXRoKSA8IFJCX01BWF9ERVBUSCk7CQkJXAorCXBhdGhwLT5jbXAgPSBhX2NtcChu b2RlLCBwYXRocC0+bm9kZSk7CQkJCVwKKwlpZiAocGF0aHAtPmNtcCA8IDApIHsJCQkJCQlcCisJ ICAgIHBhdGhwWzFdLm5vZGUgPSByYnRuX2xlZnRfZ2V0KGFfdHlwZSwgYV9maWVsZCwJCVwKKwkJ cGF0aHAtPm5vZGUpOwkJCQkJCVwKKwl9IGVsc2UgaWYgKHBhdGhwLT5jbXAgPT0gMCkgewkJCQkJ XAorCSAgICByZXR1cm4gcGF0aHA7CQkJCQkJXAorCX0gZWxzZSB7CQkJCQkJCVwKKwkgICAgcGF0 aHBbMV0ubm9kZSA9IHJidG5fcmlnaHRfZ2V0KGFfdHlwZSwgYV9maWVsZCwJCVwKKwkJcGF0aHAt Pm5vZGUpOwkJCQkJCVwKKwl9CQkJCQkJCQlcCisgICAgfQkJCQkJCQkJCVwKKyAgICB1bnJlYWNo YWJsZSgpOwkJCQkJCQlcCit9CQkJCQkJCQkJXAorYV9hdHRyIHZvaWQJCQkJCQkJCVwKK2FfcHJl Zml4IyN1cGRhdGVfc3VtbWFyaWVzKGFfcmJ0X3R5cGUgKnJidHJlZSwgYV90eXBlICpub2RlKSB7 CQlcCisgICAgYV9wcmVmaXgjI3BhdGhfZW50cnlfdCBwYXRoW1JCX01BWF9ERVBUSF07CQkJCVwK KyAgICBhX3ByZWZpeCMjcGF0aF9lbnRyeV90ICpwYXRocCA9IGFfcHJlZml4IyN3aW5kKHJidHJl ZSwgcGF0aCwgbm9kZSk7CVwKKyAgICBhX3ByZWZpeCMjc3VtbWFyaXplX3JhbmdlKHBhdGgsIHBh dGhwKTsJCQkJXAorfQkJCQkJCQkJCVwKK2FfYXR0ciBib29sCQkJCQkJCQlcCithX3ByZWZpeCMj ZW1wdHlfZmlsdGVyZWQoYV9yYnRfdHlwZSAqcmJ0cmVlLAkJCQlcCisgIGJvb2wgKCpmaWx0ZXJf bm9kZSkodm9pZCAqLCBhX3R5cGUgKiksCQkJCVwKKyAgYm9vbCAoKmZpbHRlcl9zdWJ0cmVlKSh2 b2lkICosIGFfdHlwZSAqKSwJCQkJXAorICB2b2lkICpmaWx0ZXJfY3R4KSB7CQkJCQkJCVwKKyAg ICBhX3R5cGUgKm5vZGUgPSByYnRyZWUtPnJidF9yb290OwkJCQkJXAorICAgIHJldHVybiBub2Rl ID09IE5VTEwgfHwgIWZpbHRlcl9zdWJ0cmVlKGZpbHRlcl9jdHgsIG5vZGUpOwkJXAorfQkJCQkJ CQkJCVwKK3N0YXRpYyBpbmxpbmUgYV90eXBlICoJCQkJCQkJXAorYV9wcmVmaXgjI2ZpcnN0X2Zp bHRlcmVkX2Zyb21fbm9kZShhX3R5cGUgKm5vZGUsCQkJXAorICBib29sICgqZmlsdGVyX25vZGUp KHZvaWQgKiwgYV90eXBlICopLAkJCQlcCisgIGJvb2wgKCpmaWx0ZXJfc3VidHJlZSkodm9pZCAq LCBhX3R5cGUgKiksCQkJCVwKKyAgdm9pZCAqZmlsdGVyX2N0eCkgewkJCQkJCQlcCisgICAgYXNz ZXJ0KG5vZGUgIT0gTlVMTCAmJiBmaWx0ZXJfc3VidHJlZShmaWx0ZXJfY3R4LCBub2RlKSk7CQlc CisgICAgd2hpbGUgKHRydWUpIHsJCQkJCQkJXAorCWFfdHlwZSAqbGVmdCA9IHJidG5fbGVmdF9n ZXQoYV90eXBlLCBhX2ZpZWxkLCBub2RlKTsJCVwKKwlhX3R5cGUgKnJpZ2h0ID0gcmJ0bl9yaWdo dF9nZXQoYV90eXBlLCBhX2ZpZWxkLCBub2RlKTsJCVwKKwlpZiAobGVmdCAhPSBOVUxMICYmIGZp bHRlcl9zdWJ0cmVlKGZpbHRlcl9jdHgsIGxlZnQpKSB7CQlcCisJICAgIG5vZGUgPSBsZWZ0OwkJ CQkJCVwKKwl9IGVsc2UgaWYgKGZpbHRlcl9ub2RlKGZpbHRlcl9jdHgsIG5vZGUpKSB7CQkJXAor CSAgICByZXR1cm4gbm9kZTsJCQkJCQlcCisJfSBlbHNlIHsJCQkJCQkJXAorCQlhc3NlcnQocmln aHQgIT0gTlVMTAkJCQkJXAorCQkgICAgJiYgZmlsdGVyX3N1YnRyZWUoZmlsdGVyX2N0eCwgcmln aHQpKTsJCVwKKwkJbm9kZSA9IHJpZ2h0OwkJCQkJCVwKKwl9CQkJCQkJCQlcCisgICAgfQkJCQkJ CQkJCVwKKyAgICB1bnJlYWNoYWJsZSgpOwkJCQkJCQlcCit9CQkJCQkJCQkJXAorYV9hdHRyIGFf dHlwZSAqCQkJCQkJCQlcCithX3ByZWZpeCMjZmlyc3RfZmlsdGVyZWQoYV9yYnRfdHlwZSAqcmJ0 cmVlLAkJCQlcCisgIGJvb2wgKCpmaWx0ZXJfbm9kZSkodm9pZCAqLCBhX3R5cGUgKiksCQkJCVwK KyAgYm9vbCAoKmZpbHRlcl9zdWJ0cmVlKSh2b2lkICosIGFfdHlwZSAqKSwJCQkJXAorICB2b2lk ICpmaWx0ZXJfY3R4KSB7CQkJCQkJCVwKKyAgICBhX3R5cGUgKm5vZGUgPSByYnRyZWUtPnJidF9y b290OwkJCQkJXAorICAgIGlmIChub2RlID09IE5VTEwgfHwgIWZpbHRlcl9zdWJ0cmVlKGZpbHRl cl9jdHgsIG5vZGUpKSB7CQlcCisJcmV0dXJuIE5VTEw7CQkJCQkJCVwKKyAgICB9CQkJCQkJCQkJ XAorICAgIHJldHVybiBhX3ByZWZpeCMjZmlyc3RfZmlsdGVyZWRfZnJvbV9ub2RlKG5vZGUsIGZp bHRlcl9ub2RlLAlcCisJZmlsdGVyX3N1YnRyZWUsIGZpbHRlcl9jdHgpOwkJCQkJXAorfQkJCQkJ CQkJCVwKK3N0YXRpYyBpbmxpbmUgYV90eXBlICoJCQkJCQkJXAorYV9wcmVmaXgjI2xhc3RfZmls dGVyZWRfZnJvbV9ub2RlKGFfdHlwZSAqbm9kZSwJCQkJXAorICBib29sICgqZmlsdGVyX25vZGUp KHZvaWQgKiwgYV90eXBlICopLAkJCQlcCisgIGJvb2wgKCpmaWx0ZXJfc3VidHJlZSkodm9pZCAq LCBhX3R5cGUgKiksCQkJCVwKKyAgdm9pZCAqZmlsdGVyX2N0eCkgewkJCQkJCQlcCisgICAgYXNz ZXJ0KG5vZGUgIT0gTlVMTCAmJiBmaWx0ZXJfc3VidHJlZShmaWx0ZXJfY3R4LCBub2RlKSk7CQlc CisgICAgd2hpbGUgKHRydWUpIHsJCQkJCQkJXAorCWFfdHlwZSAqbGVmdCA9IHJidG5fbGVmdF9n ZXQoYV90eXBlLCBhX2ZpZWxkLCBub2RlKTsJCVwKKwlhX3R5cGUgKnJpZ2h0ID0gcmJ0bl9yaWdo dF9nZXQoYV90eXBlLCBhX2ZpZWxkLCBub2RlKTsJCVwKKwlpZiAocmlnaHQgIT0gTlVMTCAmJiBm aWx0ZXJfc3VidHJlZShmaWx0ZXJfY3R4LCByaWdodCkpIHsJXAorCSAgICBub2RlID0gcmlnaHQ7 CQkJCQkJXAorCX0gZWxzZSBpZiAoZmlsdGVyX25vZGUoZmlsdGVyX2N0eCwgbm9kZSkpIHsJCQlc CisJICAgIHJldHVybiBub2RlOwkJCQkJCVwKKwl9IGVsc2UgewkJCQkJCQlcCisJCWFzc2VydChs ZWZ0ICE9IE5VTEwJCQkJCVwKKwkJICAgICYmIGZpbHRlcl9zdWJ0cmVlKGZpbHRlcl9jdHgsIGxl ZnQpKTsJCVwKKwkJbm9kZSA9IGxlZnQ7CQkJCQkJXAorCX0JCQkJCQkJCVwKKyAgICB9CQkJCQkJ CQkJXAorICAgIHVucmVhY2hhYmxlKCk7CQkJCQkJCVwKK30JCQkJCQkJCQlcCithX2F0dHIgYV90 eXBlICoJCQkJCQkJCVwKK2FfcHJlZml4IyNsYXN0X2ZpbHRlcmVkKGFfcmJ0X3R5cGUgKnJidHJl ZSwJCQkJXAorICBib29sICgqZmlsdGVyX25vZGUpKHZvaWQgKiwgYV90eXBlICopLAkJCQlcCisg IGJvb2wgKCpmaWx0ZXJfc3VidHJlZSkodm9pZCAqLCBhX3R5cGUgKiksCQkJCVwKKyAgdm9pZCAq ZmlsdGVyX2N0eCkgewkJCQkJCQlcCisgICAgYV90eXBlICpub2RlID0gcmJ0cmVlLT5yYnRfcm9v dDsJCQkJCVwKKyAgICBpZiAobm9kZSA9PSBOVUxMIHx8ICFmaWx0ZXJfc3VidHJlZShmaWx0ZXJf Y3R4LCBub2RlKSkgewkJXAorCXJldHVybiBOVUxMOwkJCQkJCQlcCisgICAgfQkJCQkJCQkJCVwK KyAgICByZXR1cm4gYV9wcmVmaXgjI2xhc3RfZmlsdGVyZWRfZnJvbV9ub2RlKG5vZGUsIGZpbHRl cl9ub2RlLAkJXAorCWZpbHRlcl9zdWJ0cmVlLCBmaWx0ZXJfY3R4KTsJCQkJCVwKK30JCQkJCQkJ CQlcCisvKiBJbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBmdW5jdGlvbi4gIFNlYXJjaCBmb3IgYSBu b2RlIGNvbXBhcmluZyAgICAgKi9cCisvKiBlcXVhbCB0byBrZXkgbWF0Y2hpbmcgdGhlIGZpbHRl ci4gIElmIHN1Y2ggYSBub2RlIGlzIGluIHRoZSB0cmVlLCAgKi9cCisvKiByZXR1cm4gaXQuICBB ZGRpdGlvbmFsbHksIHRoZSBjYWxsZXIgaGFzIHRoZSBvcHRpb24gdG8gYXNrIGZvciAgICAgKi9c CisvKiBib3VuZHMgb24gdGhlIG5leHQgLyBwcmV2IG5vZGUgaW4gdGhlIHRyZWUgcGFzc2luZyB0 aGUgZmlsdGVyLiAgICAgKi9cCisvKiBJZiBuZXh0Ym91bmQgaXMgdHJ1ZSwgdGhlbiB0aGlzIGZ1 bmN0aW9uIHdpbGwgZG8gb25lIG9mIHRoZSAgICAgICAgKi9cCisvKiBmb2xsb3dpbmc6ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cCisv KiAtIEZpbGwgaW4gKm5leHRib3VuZF9ub2RlIHdpdGggdGhlIHNtYWxsZXN0IG5vZGUgaW4gdGhl IHRyZWUgICAgICAgKi9cCisvKiAgIGdyZWF0ZXIgdGhhbiBrZXkgcGFzc2luZyB0aGUgZmlsdGVy LCBhbmQgTlVMTC1vdXQgICAgICAgICAgICAgICAgKi9cCisvKiAgICpuZXh0Ym91bmRfc3VidHJl ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cCisvKiAt IEZpbGwgaW4gKm5leHRib3VuZF9zdWJ0cmVlIHdpdGggYSBwYXJlbnQgb2YgdGhhdCBub2RlIHdo aWNoIGlzICAgKi9cCisvKiAgIG5vdCBhIHBhcmVudCBvZiB0aGUgc2VhcmNoZWQtZm9yIG5vZGUs IGFuZCBOVUxMLW91dCAgICAgICAgICAgICAgKi9cCisvKiAgICpuZXh0Ym91bmRfbm9kZS4gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cCisvKiAtIE5V TEwtb3V0IGJvdGggKm5leHRib3VuZF9ub2RlIGFuZCAqbmV4dGJvdW5kX3N1YnRyZWUsIGluIHdo aWNoICAgKi9cCisvKiAgIGNhc2Ugbm8gbm9kZSBncmVhdGVyIHRoYW4ga2V5IGJ1dCBwYXNzaW5n IHRoZSBmaWx0ZXIgaXMgaW4gdGhlICAgKi9cCisvKiAgIHRyZWUuICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cCisvKiBUaGUgcHJl dmJvdW5kIGNhc2UgaXMgc2ltaWxhci4gIElmIHRoZSBjYWxsZXIga25vd3MgdGhhdCBrZXkgaXMg aW4gKi9cCisvKiB0aGUgdHJlZSBhbmQgdGhhdCB0aGUgc3VidHJlZSByb290ZWQgYXQga2V5IGRv ZXMgbm90IGNvbnRhaW4gYSAgICAgKi9cCisvKiBub2RlIHNhdGlzZnlpbmcgdGhlIGJvdW5kIGJl aW5nIHNlYXJjaGVkIGZvciwgdGhlbiB0aGV5IGNhbiBwYXNzICAgKi9cCisvKiBmYWxzZSBmb3Ig aW5jbHVkZV9zdWJ0cmVlLCBpbiB3aGljaCBjYXNlIHdlIHdvbid0IGJvdGhlciBzZWFyY2hpbmcg Ki9cCisvKiB0aGVyZSAocmlza2luZyBhIGNhY2hlIG1pc3MpLiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKi9cCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cCisvKiBUaGlzIEFQSSBpcyB1 bmZvcnR1bmF0ZWx5IGNvbXBsZXg7IGJ1dCB0aGUgbG9naWMgZm9yIGZpbHRlcmVkICAgICAgKi9c CisvKiBzZWFyY2hlcyBpcyB2ZXJ5IHN1YnRsZSwgYW5kIG90aGVyd2lzZSB3ZSB3b3VsZCBoYXZl IHRvIHJlcGVhdCBpdCAgKi9cCisvKiBtdWx0aXBsZSB0aW1lcyBmb3IgZmlsdGVyZWQgc2VhcmNo LCBuc2VhcmNoLCBwc2VhcmNoLCBuZXh0LCBhbmQgICAgKi9cCisvKiBwcmV2LiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cCitz dGF0aWMgaW5saW5lIGFfdHlwZSAqCQkJCQkJCVwKK2FfcHJlZml4IyNzZWFyY2hfd2l0aF9maWx0 ZXJfYm91bmRzKGFfcmJ0X3R5cGUgKnJidHJlZSwJCQlcCisgIGNvbnN0IGFfdHlwZSAqa2V5LAkJ CQkJCQlcCisgIGJvb2wgKCpmaWx0ZXJfbm9kZSkodm9pZCAqLCBhX3R5cGUgKiksCQkJCVwKKyAg Ym9vbCAoKmZpbHRlcl9zdWJ0cmVlKSh2b2lkICosIGFfdHlwZSAqKSwJCQkJXAorICB2b2lkICpm aWx0ZXJfY3R4LAkJCQkJCQlcCisgIGJvb2wgaW5jbHVkZV9zdWJ0cmVlLAkJCQkJCQlcCisgIGJv b2wgbmV4dGJvdW5kLCBhX3R5cGUgKipuZXh0Ym91bmRfbm9kZSwgYV90eXBlICoqbmV4dGJvdW5k X3N1YnRyZWUsCVwKKyAgYm9vbCBwcmV2Ym91bmQsIGFfdHlwZSAqKnByZXZib3VuZF9ub2RlLCBh X3R5cGUgKipwcmV2Ym91bmRfc3VidHJlZSkge1wKKyAgICBpZiAobmV4dGJvdW5kKSB7CQkJCQkJ CVwKKwkgICAgKm5leHRib3VuZF9ub2RlID0gTlVMTDsJCQkJCVwKKwkgICAgKm5leHRib3VuZF9z dWJ0cmVlID0gTlVMTDsJCQkJCVwKKyAgICB9CQkJCQkJCQkJXAorICAgIGlmIChwcmV2Ym91bmQp IHsJCQkJCQkJXAorCSAgICAqcHJldmJvdW5kX25vZGUgPSBOVUxMOwkJCQkJXAorCSAgICAqcHJl dmJvdW5kX3N1YnRyZWUgPSBOVUxMOwkJCQkJXAorICAgIH0JCQkJCQkJCQlcCisgICAgYV90eXBl ICp0bm9kZSA9IHJidHJlZS0+cmJ0X3Jvb3Q7CQkJCQlcCisgICAgd2hpbGUgKHRub2RlICE9IE5V TEwgJiYgZmlsdGVyX3N1YnRyZWUoZmlsdGVyX2N0eCwgdG5vZGUpKSB7CVwKKwlpbnQgY21wID0g YV9jbXAoa2V5LCB0bm9kZSk7CQkJCQlcCisJYV90eXBlICp0bGVmdCA9IHJidG5fbGVmdF9nZXQo YV90eXBlLCBhX2ZpZWxkLCB0bm9kZSk7CQlcCisJYV90eXBlICp0cmlnaHQgPSByYnRuX3JpZ2h0 X2dldChhX3R5cGUsIGFfZmllbGQsIHRub2RlKTsJXAorCWlmIChjbXAgPCAwKSB7CQkJCQkJCVwK KwkgICAgaWYgKG5leHRib3VuZCkgewkJCQkJCVwKKwkJaWYgKGZpbHRlcl9ub2RlKGZpbHRlcl9j dHgsIHRub2RlKSkgewkJCVwKKwkJICAgICpuZXh0Ym91bmRfbm9kZSA9IHRub2RlOwkJCQlcCisJ CSAgICAqbmV4dGJvdW5kX3N1YnRyZWUgPSBOVUxMOwkJCQlcCisJCX0gZWxzZSBpZiAodHJpZ2h0 ICE9IE5VTEwgJiYgZmlsdGVyX3N1YnRyZWUoCQlcCisJCSAgICBmaWx0ZXJfY3R4LCB0cmlnaHQp KSB7CQkJCVwKKwkJICAgICpuZXh0Ym91bmRfbm9kZSA9IE5VTEw7CQkJCVwKKwkJICAgICpuZXh0 Ym91bmRfc3VidHJlZSA9IHRyaWdodDsJCQlcCisJCX0JCQkJCQkJXAorCSAgICB9CQkJCQkJCQlc CisJICAgIHRub2RlID0gdGxlZnQ7CQkJCQkJXAorCX0gZWxzZSBpZiAoY21wID4gMCkgewkJCQkJ CVwKKwkgICAgaWYgKHByZXZib3VuZCkgewkJCQkJCVwKKwkJaWYgKGZpbHRlcl9ub2RlKGZpbHRl cl9jdHgsIHRub2RlKSkgewkJCVwKKwkJICAgICpwcmV2Ym91bmRfbm9kZSA9IHRub2RlOwkJCQlc CisJCSAgICAqcHJldmJvdW5kX3N1YnRyZWUgPSBOVUxMOwkJCQlcCisJCX0gZWxzZSBpZiAodGxl ZnQgIT0gTlVMTCAmJiBmaWx0ZXJfc3VidHJlZSgJCVwKKwkJICAgIGZpbHRlcl9jdHgsIHRsZWZ0 KSkgewkJCQlcCisJCSAgICAqcHJldmJvdW5kX25vZGUgPSBOVUxMOwkJCQlcCisJCSAgICAqcHJl dmJvdW5kX3N1YnRyZWUgPSB0bGVmdDsJCQkJXAorCQl9CQkJCQkJCVwKKwkgICAgfQkJCQkJCQkJ XAorCSAgICB0bm9kZSA9IHRyaWdodDsJCQkJCQlcCisJfSBlbHNlIHsJCQkJCQkJXAorCSAgICBp ZiAoZmlsdGVyX25vZGUoZmlsdGVyX2N0eCwgdG5vZGUpKSB7CQkJXAorCQlyZXR1cm4gdG5vZGU7 CQkJCQkJXAorCSAgICB9CQkJCQkJCQlcCisJICAgIGlmIChpbmNsdWRlX3N1YnRyZWUpIHsJCQkJ CVwKKwkJaWYgKHByZXZib3VuZCAmJiB0bGVmdCAhPSBOVUxMICYmIGZpbHRlcl9zdWJ0cmVlKAlc CisJCSAgICBmaWx0ZXJfY3R4LCB0bGVmdCkpIHsJCQkJXAorCQkgICAgKnByZXZib3VuZF9ub2Rl ID0gTlVMTDsJCQkJXAorCQkgICAgKnByZXZib3VuZF9zdWJ0cmVlID0gdGxlZnQ7CQkJCVwKKwkJ fQkJCQkJCQlcCisJCWlmIChuZXh0Ym91bmQgJiYgdHJpZ2h0ICE9IE5VTEwgJiYgZmlsdGVyX3N1 YnRyZWUoCVwKKwkJICAgIGZpbHRlcl9jdHgsIHRyaWdodCkpIHsJCQkJXAorCQkgICAgKm5leHRi b3VuZF9ub2RlID0gTlVMTDsJCQkJXAorCQkgICAgKm5leHRib3VuZF9zdWJ0cmVlID0gdHJpZ2h0 OwkJCVwKKwkJfQkJCQkJCQlcCisJICAgIH0JCQkJCQkJCVwKKwkgICAgcmV0dXJuIE5VTEw7CQkJ CQkJXAorCX0JCQkJCQkJCVwKKyAgICB9CQkJCQkJCQkJXAorICAgIHJldHVybiBOVUxMOwkJCQkJ CQlcCit9CQkJCQkJCQkJXAorYV9hdHRyIGFfdHlwZSAqCQkJCQkJCQlcCithX3ByZWZpeCMjbmV4 dF9maWx0ZXJlZChhX3JidF90eXBlICpyYnRyZWUsIGFfdHlwZSAqbm9kZSwJCVwKKyAgYm9vbCAo KmZpbHRlcl9ub2RlKSh2b2lkICosIGFfdHlwZSAqKSwJCQkJXAorICBib29sICgqZmlsdGVyX3N1 YnRyZWUpKHZvaWQgKiwgYV90eXBlICopLAkJCQlcCisgIHZvaWQgKmZpbHRlcl9jdHgpIHsJCQkJ CQkJXAorICAgIGFfdHlwZSAqbnJpZ2h0ID0gcmJ0bl9yaWdodF9nZXQoYV90eXBlLCBhX2ZpZWxk LCBub2RlKTsJCVwKKyAgICBpZiAobnJpZ2h0ICE9IE5VTEwgJiYgZmlsdGVyX3N1YnRyZWUoZmls dGVyX2N0eCwgbnJpZ2h0KSkgewkJXAorCXJldHVybiBhX3ByZWZpeCMjZmlyc3RfZmlsdGVyZWRf ZnJvbV9ub2RlKG5yaWdodCwgZmlsdGVyX25vZGUsCVwKKwkgICAgZmlsdGVyX3N1YnRyZWUsIGZp bHRlcl9jdHgpOwkJCQlcCisgICAgfQkJCQkJCQkJCVwKKyAgICBhX3R5cGUgKm5vZGVfY2FuZGlk YXRlOwkJCQkJCVwKKyAgICBhX3R5cGUgKnN1YnRyZWVfY2FuZGlkYXRlOwkJCQkJCVwKKyAgICBh X3R5cGUgKnNlYXJjaF9yZXN1bHQgPSBhX3ByZWZpeCMjc2VhcmNoX3dpdGhfZmlsdGVyX2JvdW5k cygJXAorCXJidHJlZSwgbm9kZSwgZmlsdGVyX25vZGUsIGZpbHRlcl9zdWJ0cmVlLCBmaWx0ZXJf Y3R4LAkJXAorCS8qIGluY2x1ZGVfc3VidHJlZSAqLyBmYWxzZSwJCQkJCVwKKwkvKiBuZXh0Ym91 bmQgKi8gdHJ1ZSwgJm5vZGVfY2FuZGlkYXRlLCAmc3VidHJlZV9jYW5kaWRhdGUsCVwKKwkvKiBw cmV2Ym91bmQgKi8gZmFsc2UsIE5VTEwsIE5VTEwpOwkJCQlcCisgICAgYXNzZXJ0KG5vZGUgPT0g c2VhcmNoX3Jlc3VsdAkJCQkJXAorCXx8ICFmaWx0ZXJfbm9kZShmaWx0ZXJfY3R4LCBub2RlKSk7 CQkJCVwKKyAgICBpZiAobm9kZV9jYW5kaWRhdGUgIT0gTlVMTCkgewkJCQkJXAorCXJldHVybiBu b2RlX2NhbmRpZGF0ZTsJCQkJCQlcCisgICAgfQkJCQkJCQkJCVwKKyAgICBpZiAoc3VidHJlZV9j YW5kaWRhdGUgIT0gTlVMTCkgewkJCQkJXAorCXJldHVybiBhX3ByZWZpeCMjZmlyc3RfZmlsdGVy ZWRfZnJvbV9ub2RlKAkJCVwKKwkgICAgc3VidHJlZV9jYW5kaWRhdGUsIGZpbHRlcl9ub2RlLCBm aWx0ZXJfc3VidHJlZSwJCVwKKwkgICAgZmlsdGVyX2N0eCk7CQkJCQkJXAorICAgIH0JCQkJCQkJ CQlcCisgICAgcmV0dXJuIE5VTEw7CQkJCQkJCVwKK30JCQkJCQkJCQlcCithX2F0dHIgYV90eXBl ICoJCQkJCQkJCVwKK2FfcHJlZml4IyNwcmV2X2ZpbHRlcmVkKGFfcmJ0X3R5cGUgKnJidHJlZSwg YV90eXBlICpub2RlLAkJXAorICBib29sICgqZmlsdGVyX25vZGUpKHZvaWQgKiwgYV90eXBlICop LAkJCQlcCisgIGJvb2wgKCpmaWx0ZXJfc3VidHJlZSkodm9pZCAqLCBhX3R5cGUgKiksCQkJCVwK KyAgdm9pZCAqZmlsdGVyX2N0eCkgewkJCQkJCQlcCisgICAgYV90eXBlICpubGVmdCA9IHJidG5f bGVmdF9nZXQoYV90eXBlLCBhX2ZpZWxkLCBub2RlKTsJCVwKKyAgICBpZiAobmxlZnQgIT0gTlVM TCAmJiBmaWx0ZXJfc3VidHJlZShmaWx0ZXJfY3R4LCBubGVmdCkpIHsJCVwKKwlyZXR1cm4gYV9w cmVmaXgjI2xhc3RfZmlsdGVyZWRfZnJvbV9ub2RlKG5sZWZ0LCBmaWx0ZXJfbm9kZSwJXAorCSAg ICBmaWx0ZXJfc3VidHJlZSwgZmlsdGVyX2N0eCk7CQkJCVwKKyAgICB9CQkJCQkJCQkJXAorICAg IGFfdHlwZSAqbm9kZV9jYW5kaWRhdGU7CQkJCQkJXAorICAgIGFfdHlwZSAqc3VidHJlZV9jYW5k aWRhdGU7CQkJCQkJXAorICAgIGFfdHlwZSAqc2VhcmNoX3Jlc3VsdCA9IGFfcHJlZml4IyNzZWFy Y2hfd2l0aF9maWx0ZXJfYm91bmRzKAlcCisJcmJ0cmVlLCBub2RlLCBmaWx0ZXJfbm9kZSwgZmls dGVyX3N1YnRyZWUsIGZpbHRlcl9jdHgsCQlcCisJLyogaW5jbHVkZV9zdWJ0cmVlICovIGZhbHNl LAkJCQkJXAorCS8qIG5leHRib3VuZCAqLyBmYWxzZSwgTlVMTCwgTlVMTCwJCQkJXAorCS8qIHBy ZXZib3VuZCAqLyB0cnVlLCAmbm9kZV9jYW5kaWRhdGUsICZzdWJ0cmVlX2NhbmRpZGF0ZSk7CVwK KyAgICBhc3NlcnQobm9kZSA9PSBzZWFyY2hfcmVzdWx0CQkJCQlcCisJfHwgIWZpbHRlcl9ub2Rl KGZpbHRlcl9jdHgsIG5vZGUpKTsJCQkJXAorICAgIGlmIChub2RlX2NhbmRpZGF0ZSAhPSBOVUxM KSB7CQkJCQlcCisJcmV0dXJuIG5vZGVfY2FuZGlkYXRlOwkJCQkJCVwKKyAgICB9CQkJCQkJCQkJ XAorICAgIGlmIChzdWJ0cmVlX2NhbmRpZGF0ZSAhPSBOVUxMKSB7CQkJCQlcCisJcmV0dXJuIGFf cHJlZml4IyNsYXN0X2ZpbHRlcmVkX2Zyb21fbm9kZSgJCQlcCisJICAgIHN1YnRyZWVfY2FuZGlk YXRlLCBmaWx0ZXJfbm9kZSwgZmlsdGVyX3N1YnRyZWUsCQlcCisJICAgIGZpbHRlcl9jdHgpOwkJ CQkJCVwKKyAgICB9CQkJCQkJCQkJXAorICAgIHJldHVybiBOVUxMOwkJCQkJCQlcCit9CQkJCQkJ CQkJXAorYV9hdHRyIGFfdHlwZSAqCQkJCQkJCQlcCithX3ByZWZpeCMjc2VhcmNoX2ZpbHRlcmVk KGFfcmJ0X3R5cGUgKnJidHJlZSwgY29uc3QgYV90eXBlICprZXksCVwKKyAgYm9vbCAoKmZpbHRl cl9ub2RlKSh2b2lkICosIGFfdHlwZSAqKSwJCQkJXAorICBib29sICgqZmlsdGVyX3N1YnRyZWUp KHZvaWQgKiwgYV90eXBlICopLAkJCQlcCisgIHZvaWQgKmZpbHRlcl9jdHgpIHsJCQkJCQkJXAor ICAgIGFfdHlwZSAqcmVzdWx0ID0gYV9wcmVmaXgjI3NlYXJjaF93aXRoX2ZpbHRlcl9ib3VuZHMo cmJ0cmVlLCBrZXksCVwKKwlmaWx0ZXJfbm9kZSwgZmlsdGVyX3N1YnRyZWUsIGZpbHRlcl9jdHgs CQkJXAorCS8qIGluY2x1ZGVfc3VidHJlZSAqLyBmYWxzZSwJCQkJCVwKKwkvKiBuZXh0Ym91bmQg Ki8gZmFsc2UsIE5VTEwsIE5VTEwsCQkJCVwKKwkvKiBwcmV2Ym91bmQgKi8gZmFsc2UsIE5VTEws IE5VTEwpOwkJCQlcCisgICAgcmV0dXJuIHJlc3VsdDsJCQkJCQkJXAorfQkJCQkJCQkJCVwKK2Ff YXR0ciBhX3R5cGUgKgkJCQkJCQkJXAorYV9wcmVmaXgjI25zZWFyY2hfZmlsdGVyZWQoYV9yYnRf dHlwZSAqcmJ0cmVlLCBjb25zdCBhX3R5cGUgKmtleSwJXAorICBib29sICgqZmlsdGVyX25vZGUp KHZvaWQgKiwgYV90eXBlICopLAkJCQlcCisgIGJvb2wgKCpmaWx0ZXJfc3VidHJlZSkodm9pZCAq LCBhX3R5cGUgKiksCQkJCVwKKyAgdm9pZCAqZmlsdGVyX2N0eCkgewkJCQkJCQlcCisgICAgYV90 eXBlICpub2RlX2NhbmRpZGF0ZTsJCQkJCQlcCisgICAgYV90eXBlICpzdWJ0cmVlX2NhbmRpZGF0 ZTsJCQkJCQlcCisgICAgYV90eXBlICpyZXN1bHQgPSBhX3ByZWZpeCMjc2VhcmNoX3dpdGhfZmls dGVyX2JvdW5kcyhyYnRyZWUsIGtleSwJXAorCWZpbHRlcl9ub2RlLCBmaWx0ZXJfc3VidHJlZSwg ZmlsdGVyX2N0eCwJCQlcCisJLyogaW5jbHVkZV9zdWJ0cmVlICovIHRydWUsCQkJCQlcCisJLyog bmV4dGJvdW5kICovIHRydWUsICZub2RlX2NhbmRpZGF0ZSwgJnN1YnRyZWVfY2FuZGlkYXRlLAlc CisJLyogcHJldmJvdW5kICovIGZhbHNlLCBOVUxMLCBOVUxMKTsJCQkJXAorICAgIGlmIChyZXN1 bHQgIT0gTlVMTCkgewkJCQkJCVwKKwlyZXR1cm4gcmVzdWx0OwkJCQkJCQlcCisgICAgfQkJCQkJ CQkJCVwKKyAgICBpZiAobm9kZV9jYW5kaWRhdGUgIT0gTlVMTCkgewkJCQkJXAorCXJldHVybiBu b2RlX2NhbmRpZGF0ZTsJCQkJCQlcCisgICAgfQkJCQkJCQkJCVwKKyAgICBpZiAoc3VidHJlZV9j YW5kaWRhdGUgIT0gTlVMTCkgewkJCQkJXAorCXJldHVybiBhX3ByZWZpeCMjZmlyc3RfZmlsdGVy ZWRfZnJvbV9ub2RlKAkJCVwKKwkgICAgc3VidHJlZV9jYW5kaWRhdGUsIGZpbHRlcl9ub2RlLCBm aWx0ZXJfc3VidHJlZSwJCVwKKwkgICAgZmlsdGVyX2N0eCk7CQkJCQkJXAorICAgIH0JCQkJCQkJ CQlcCisgICAgcmV0dXJuIE5VTEw7CQkJCQkJCVwKK30JCQkJCQkJCQlcCithX2F0dHIgYV90eXBl ICoJCQkJCQkJCVwKK2FfcHJlZml4IyNwc2VhcmNoX2ZpbHRlcmVkKGFfcmJ0X3R5cGUgKnJidHJl ZSwgY29uc3QgYV90eXBlICprZXksCVwKKyAgYm9vbCAoKmZpbHRlcl9ub2RlKSh2b2lkICosIGFf dHlwZSAqKSwJCQkJXAorICBib29sICgqZmlsdGVyX3N1YnRyZWUpKHZvaWQgKiwgYV90eXBlICop LAkJCQlcCisgIHZvaWQgKmZpbHRlcl9jdHgpIHsJCQkJCQkJXAorICAgIGFfdHlwZSAqbm9kZV9j YW5kaWRhdGU7CQkJCQkJXAorICAgIGFfdHlwZSAqc3VidHJlZV9jYW5kaWRhdGU7CQkJCQkJXAor ICAgIGFfdHlwZSAqcmVzdWx0ID0gYV9wcmVmaXgjI3NlYXJjaF93aXRoX2ZpbHRlcl9ib3VuZHMo cmJ0cmVlLCBrZXksCVwKKwlmaWx0ZXJfbm9kZSwgZmlsdGVyX3N1YnRyZWUsIGZpbHRlcl9jdHgs CQkJXAorCS8qIGluY2x1ZGVfc3VidHJlZSAqLyB0cnVlLAkJCQkJXAorCS8qIG5leHRib3VuZCAq LyBmYWxzZSwgTlVMTCwgTlVMTCwJCQkJXAorCS8qIHByZXZib3VuZCAqLyB0cnVlLCAmbm9kZV9j YW5kaWRhdGUsICZzdWJ0cmVlX2NhbmRpZGF0ZSk7CVwKKyAgICBpZiAocmVzdWx0ICE9IE5VTEwp IHsJCQkJCQlcCisJcmV0dXJuIHJlc3VsdDsJCQkJCQkJXAorICAgIH0JCQkJCQkJCQlcCisgICAg aWYgKG5vZGVfY2FuZGlkYXRlICE9IE5VTEwpIHsJCQkJCVwKKwlyZXR1cm4gbm9kZV9jYW5kaWRh dGU7CQkJCQkJXAorICAgIH0JCQkJCQkJCQlcCisgICAgaWYgKHN1YnRyZWVfY2FuZGlkYXRlICE9 IE5VTEwpIHsJCQkJCVwKKwlyZXR1cm4gYV9wcmVmaXgjI2xhc3RfZmlsdGVyZWRfZnJvbV9ub2Rl KAkJCVwKKwkgICAgc3VidHJlZV9jYW5kaWRhdGUsIGZpbHRlcl9ub2RlLCBmaWx0ZXJfc3VidHJl ZSwJCVwKKwkgICAgZmlsdGVyX2N0eCk7CQkJCQkJXAorICAgIH0JCQkJCQkJCQlcCisgICAgcmV0 dXJuIE5VTEw7CQkJCQkJCVwKK30JCQkJCQkJCQlcCithX2F0dHIgYV90eXBlICoJCQkJCQkJCVwK K2FfcHJlZml4IyNpdGVyX3JlY3Vyc2VfZmlsdGVyZWQoYV9yYnRfdHlwZSAqcmJ0cmVlLCBhX3R5 cGUgKm5vZGUsCVwKKyAgYV90eXBlICooKmNiKShhX3JidF90eXBlICosIGFfdHlwZSAqLCB2b2lk ICopLCB2b2lkICphcmcsCQlcCisgIGJvb2wgKCpmaWx0ZXJfbm9kZSkodm9pZCAqLCBhX3R5cGUg KiksCQkJCVwKKyAgYm9vbCAoKmZpbHRlcl9zdWJ0cmVlKSh2b2lkICosIGFfdHlwZSAqKSwJCQkJ XAorICB2b2lkICpmaWx0ZXJfY3R4KSB7CQkJCQkJCVwKKyAgICBpZiAobm9kZSA9PSBOVUxMIHx8 ICFmaWx0ZXJfc3VidHJlZShmaWx0ZXJfY3R4LCBub2RlKSkgewkJXAorCXJldHVybiBOVUxMOwkJ CQkJCQlcCisgICAgfQkJCQkJCQkJCVwKKyAgICBhX3R5cGUgKnJldDsJCQkJCQkJXAorICAgIGFf dHlwZSAqbGVmdCA9IHJidG5fbGVmdF9nZXQoYV90eXBlLCBhX2ZpZWxkLCBub2RlKTsJCVwKKyAg ICBhX3R5cGUgKnJpZ2h0ID0gcmJ0bl9yaWdodF9nZXQoYV90eXBlLCBhX2ZpZWxkLCBub2RlKTsJ CVwKKyAgICByZXQgPSBhX3ByZWZpeCMjaXRlcl9yZWN1cnNlX2ZpbHRlcmVkKHJidHJlZSwgbGVm dCwgY2IsIGFyZywJXAorICAgICAgZmlsdGVyX25vZGUsIGZpbHRlcl9zdWJ0cmVlLCBmaWx0ZXJf Y3R4KTsJCQkJXAorICAgIGlmIChyZXQgIT0gTlVMTCkgewkJCQkJCQlcCisJcmV0dXJuIHJldDsJ CQkJCQkJXAorICAgIH0JCQkJCQkJCQlcCisgICAgaWYgKGZpbHRlcl9ub2RlKGZpbHRlcl9jdHgs IG5vZGUpKSB7CQkJCVwKKwlyZXQgPSBjYihyYnRyZWUsIG5vZGUsIGFyZyk7CQkJCQlcCisgICAg fQkJCQkJCQkJCVwKKyAgICBpZiAocmV0ICE9IE5VTEwpIHsJCQkJCQkJXAorCXJldHVybiByZXQ7 CQkJCQkJCVwKKyAgICB9CQkJCQkJCQkJXAorICAgIHJldHVybiBhX3ByZWZpeCMjaXRlcl9yZWN1 cnNlX2ZpbHRlcmVkKHJidHJlZSwgcmlnaHQsIGNiLCBhcmcsCVwKKyAgICAgIGZpbHRlcl9ub2Rl LCBmaWx0ZXJfc3VidHJlZSwgZmlsdGVyX2N0eCk7CQkJCVwKK30JCQkJCQkJCQlcCithX2F0dHIg YV90eXBlICoJCQkJCQkJCVwKK2FfcHJlZml4IyNpdGVyX3N0YXJ0X2ZpbHRlcmVkKGFfcmJ0X3R5 cGUgKnJidHJlZSwgYV90eXBlICpzdGFydCwJXAorICBhX3R5cGUgKm5vZGUsIGFfdHlwZSAqKCpj YikoYV9yYnRfdHlwZSAqLCBhX3R5cGUgKiwgdm9pZCAqKSwJCVwKKyAgdm9pZCAqYXJnLCBib29s ICgqZmlsdGVyX25vZGUpKHZvaWQgKiwgYV90eXBlICopLAkJCVwKKyAgYm9vbCAoKmZpbHRlcl9z dWJ0cmVlKSh2b2lkICosIGFfdHlwZSAqKSwJCQkJXAorICB2b2lkICpmaWx0ZXJfY3R4KSB7CQkJ CQkJCVwKKyAgICBpZiAoIWZpbHRlcl9zdWJ0cmVlKGZpbHRlcl9jdHgsIG5vZGUpKSB7CQkJCVwK KwlyZXR1cm4gTlVMTDsJCQkJCQkJXAorICAgIH0JCQkJCQkJCQlcCisgICAgaW50IGNtcCA9IGFf Y21wKHN0YXJ0LCBub2RlKTsJCQkJCVwKKyAgICBhX3R5cGUgKnJldDsJCQkJCQkJXAorICAgIGFf dHlwZSAqbGVmdCA9IHJidG5fbGVmdF9nZXQoYV90eXBlLCBhX2ZpZWxkLCBub2RlKTsJCVwKKyAg ICBhX3R5cGUgKnJpZ2h0ID0gcmJ0bl9yaWdodF9nZXQoYV90eXBlLCBhX2ZpZWxkLCBub2RlKTsJ CVwKKyAgICBpZiAoY21wIDwgMCkgewkJCQkJCQlcCisJcmV0ID0gYV9wcmVmaXgjI2l0ZXJfc3Rh cnRfZmlsdGVyZWQocmJ0cmVlLCBzdGFydCwgbGVmdCwgY2IsCVwKKwkgICAgYXJnLCBmaWx0ZXJf bm9kZSwgZmlsdGVyX3N1YnRyZWUsIGZpbHRlcl9jdHgpOwkJXAorCWlmIChyZXQgIT0gTlVMTCkg ewkJCQkJCVwKKwkgICAgcmV0dXJuIHJldDsJCQkJCQkJXAorCX0JCQkJCQkJCVwKKwlpZiAoZmls dGVyX25vZGUoZmlsdGVyX2N0eCwgbm9kZSkpIHsJCQkJXAorCSAgICByZXQgPSBjYihyYnRyZWUs IG5vZGUsIGFyZyk7CQkJCVwKKwkgICAgaWYgKHJldCAhPSBOVUxMKSB7CQkJCQkJXAorCQlyZXR1 cm4gcmV0OwkJCQkJCVwKKwkgICAgfQkJCQkJCQkJXAorCX0JCQkJCQkJCVwKKwlyZXR1cm4gYV9w cmVmaXgjI2l0ZXJfcmVjdXJzZV9maWx0ZXJlZChyYnRyZWUsIHJpZ2h0LCBjYiwgYXJnLAlcCisJ ICAgIGZpbHRlcl9ub2RlLCBmaWx0ZXJfc3VidHJlZSwgZmlsdGVyX2N0eCk7CQkJXAorICAgIH0g ZWxzZSBpZiAoY21wID4gMCkgewkJCQkJCVwKKwlyZXR1cm4gYV9wcmVmaXgjI2l0ZXJfc3RhcnRf ZmlsdGVyZWQocmJ0cmVlLCBzdGFydCwgcmlnaHQsCVwKKwkgIGNiLCBhcmcsIGZpbHRlcl9ub2Rl LCBmaWx0ZXJfc3VidHJlZSwgZmlsdGVyX2N0eCk7CQlcCisgICAgfSBlbHNlIHsJCQkJCQkJCVwK KwlpZiAoZmlsdGVyX25vZGUoZmlsdGVyX2N0eCwgbm9kZSkpIHsJCQkJXAorCSAgICByZXQgPSBj YihyYnRyZWUsIG5vZGUsIGFyZyk7CQkJCVwKKwkgICAgaWYgKHJldCAhPSBOVUxMKSB7CQkJCQkJ XAorCQlyZXR1cm4gcmV0OwkJCQkJCVwKKwkgICAgfQkJCQkJCQkJXAorCX0JCQkJCQkJCVwKKwly ZXR1cm4gYV9wcmVmaXgjI2l0ZXJfcmVjdXJzZV9maWx0ZXJlZChyYnRyZWUsIHJpZ2h0LCBjYiwg YXJnLAlcCisJICBmaWx0ZXJfbm9kZSwgZmlsdGVyX3N1YnRyZWUsIGZpbHRlcl9jdHgpOwkJCVwK KyAgICB9CQkJCQkJCQkJXAorfQkJCQkJCQkJCVwKK2FfYXR0ciBhX3R5cGUgKgkJCQkJCQkJXAor YV9wcmVmaXgjI2l0ZXJfZmlsdGVyZWQoYV9yYnRfdHlwZSAqcmJ0cmVlLCBhX3R5cGUgKnN0YXJ0 LAkJXAorICBhX3R5cGUgKigqY2IpKGFfcmJ0X3R5cGUgKiwgYV90eXBlICosIHZvaWQgKiksIHZv aWQgKmFyZywJCVwKKyAgYm9vbCAoKmZpbHRlcl9ub2RlKSh2b2lkICosIGFfdHlwZSAqKSwJCQkJ XAorICBib29sICgqZmlsdGVyX3N1YnRyZWUpKHZvaWQgKiwgYV90eXBlICopLAkJCQlcCisgIHZv aWQgKmZpbHRlcl9jdHgpIHsJCQkJCQkJXAorICAgIGFfdHlwZSAqcmV0OwkJCQkJCQlcCisgICAg aWYgKHN0YXJ0ICE9IE5VTEwpIHsJCQkJCQlcCisJcmV0ID0gYV9wcmVmaXgjI2l0ZXJfc3RhcnRf ZmlsdGVyZWQocmJ0cmVlLCBzdGFydCwJCVwKKwkgICAgcmJ0cmVlLT5yYnRfcm9vdCwgY2IsIGFy ZywgZmlsdGVyX25vZGUsIGZpbHRlcl9zdWJ0cmVlLAlcCisJICAgIGZpbHRlcl9jdHgpOwkJCQkJ CVwKKyAgICB9IGVsc2UgewkJCQkJCQkJXAorCXJldCA9IGFfcHJlZml4IyNpdGVyX3JlY3Vyc2Vf ZmlsdGVyZWQocmJ0cmVlLCByYnRyZWUtPnJidF9yb290LAlcCisJICAgIGNiLCBhcmcsIGZpbHRl cl9ub2RlLCBmaWx0ZXJfc3VidHJlZSwgZmlsdGVyX2N0eCk7CQlcCisgICAgfQkJCQkJCQkJCVwK KyAgICByZXR1cm4gcmV0OwkJCQkJCQkJXAorfQkJCQkJCQkJCVwKK2FfYXR0ciBhX3R5cGUgKgkJ CQkJCQkJXAorYV9wcmVmaXgjI3JldmVyc2VfaXRlcl9yZWN1cnNlX2ZpbHRlcmVkKGFfcmJ0X3R5 cGUgKnJidHJlZSwJCVwKKyAgYV90eXBlICpub2RlLCBhX3R5cGUgKigqY2IpKGFfcmJ0X3R5cGUg KiwgYV90eXBlICosIHZvaWQgKiksCQlcCisgIHZvaWQgKmFyZywJCQkJCQkJCVwKKyAgYm9vbCAo KmZpbHRlcl9ub2RlKSh2b2lkICosIGFfdHlwZSAqKSwJCQkJXAorICBib29sICgqZmlsdGVyX3N1 YnRyZWUpKHZvaWQgKiwgYV90eXBlICopLAkJCQlcCisgIHZvaWQgKmZpbHRlcl9jdHgpIHsJCQkJ CQkJXAorICAgIGlmIChub2RlID09IE5VTEwgfHwgIWZpbHRlcl9zdWJ0cmVlKGZpbHRlcl9jdHgs IG5vZGUpKSB7CQlcCisJcmV0dXJuIE5VTEw7CQkJCQkJCVwKKyAgICB9CQkJCQkJCQkJXAorICAg IGFfdHlwZSAqcmV0OwkJCQkJCQlcCisgICAgYV90eXBlICpsZWZ0ID0gcmJ0bl9sZWZ0X2dldChh X3R5cGUsIGFfZmllbGQsIG5vZGUpOwkJXAorICAgIGFfdHlwZSAqcmlnaHQgPSByYnRuX3JpZ2h0 X2dldChhX3R5cGUsIGFfZmllbGQsIG5vZGUpOwkJXAorICAgIHJldCA9IGFfcHJlZml4IyNyZXZl cnNlX2l0ZXJfcmVjdXJzZV9maWx0ZXJlZChyYnRyZWUsIHJpZ2h0LCBjYiwJXAorCWFyZywgZmls dGVyX25vZGUsIGZpbHRlcl9zdWJ0cmVlLCBmaWx0ZXJfY3R4KTsJCQlcCisgICAgaWYgKHJldCAh PSBOVUxMKSB7CQkJCQkJCVwKKwlyZXR1cm4gcmV0OwkJCQkJCQlcCisgICAgfQkJCQkJCQkJCVwK KyAgICBpZiAoZmlsdGVyX25vZGUoZmlsdGVyX2N0eCwgbm9kZSkpIHsJCQkJXAorCXJldCA9IGNi KHJidHJlZSwgbm9kZSwgYXJnKTsJCQkJCVwKKyAgICB9CQkJCQkJCQkJXAorICAgIGlmIChyZXQg IT0gTlVMTCkgewkJCQkJCQlcCisJcmV0dXJuIHJldDsJCQkJCQkJXAorICAgIH0JCQkJCQkJCQlc CisgICAgcmV0dXJuIGFfcHJlZml4IyNyZXZlcnNlX2l0ZXJfcmVjdXJzZV9maWx0ZXJlZChyYnRy ZWUsIGxlZnQsIGNiLAlcCisgICAgICBhcmcsIGZpbHRlcl9ub2RlLCBmaWx0ZXJfc3VidHJlZSwg ZmlsdGVyX2N0eCk7CQkJXAorfQkJCQkJCQkJCVwKK2FfYXR0ciBhX3R5cGUgKgkJCQkJCQkJXAor YV9wcmVmaXgjI3JldmVyc2VfaXRlcl9zdGFydF9maWx0ZXJlZChhX3JidF90eXBlICpyYnRyZWUs IGFfdHlwZSAqc3RhcnQsXAorICBhX3R5cGUgKm5vZGUsIGFfdHlwZSAqKCpjYikoYV9yYnRfdHlw ZSAqLCBhX3R5cGUgKiwgdm9pZCAqKSwJCVwKKyAgdm9pZCAqYXJnLCBib29sICgqZmlsdGVyX25v ZGUpKHZvaWQgKiwgYV90eXBlICopLAkJCVwKKyAgYm9vbCAoKmZpbHRlcl9zdWJ0cmVlKSh2b2lk ICosIGFfdHlwZSAqKSwJCQkJXAorICB2b2lkICpmaWx0ZXJfY3R4KSB7CQkJCQkJCVwKKyAgICBp ZiAoIWZpbHRlcl9zdWJ0cmVlKGZpbHRlcl9jdHgsIG5vZGUpKSB7CQkJCVwKKwlyZXR1cm4gTlVM TDsJCQkJCQkJXAorICAgIH0JCQkJCQkJCQlcCisgICAgaW50IGNtcCA9IGFfY21wKHN0YXJ0LCBu b2RlKTsJCQkJCVwKKyAgICBhX3R5cGUgKnJldDsJCQkJCQkJXAorICAgIGFfdHlwZSAqbGVmdCA9 IHJidG5fbGVmdF9nZXQoYV90eXBlLCBhX2ZpZWxkLCBub2RlKTsJCVwKKyAgICBhX3R5cGUgKnJp Z2h0ID0gcmJ0bl9yaWdodF9nZXQoYV90eXBlLCBhX2ZpZWxkLCBub2RlKTsJCVwKKyAgICBpZiAo Y21wID4gMCkgewkJCQkJCQlcCisJcmV0ID0gYV9wcmVmaXgjI3JldmVyc2VfaXRlcl9zdGFydF9m aWx0ZXJlZChyYnRyZWUsIHN0YXJ0LAlcCisJICAgIHJpZ2h0LCBjYiwgYXJnLCBmaWx0ZXJfbm9k ZSwgZmlsdGVyX3N1YnRyZWUsIGZpbHRlcl9jdHgpOwlcCisJaWYgKHJldCAhPSBOVUxMKSB7CQkJ CQkJXAorCSAgICByZXR1cm4gcmV0OwkJCQkJCQlcCisJfQkJCQkJCQkJXAorCWlmIChmaWx0ZXJf bm9kZShmaWx0ZXJfY3R4LCBub2RlKSkgewkJCQlcCisJICAgIHJldCA9IGNiKHJidHJlZSwgbm9k ZSwgYXJnKTsJCQkJXAorCSAgICBpZiAocmV0ICE9IE5VTEwpIHsJCQkJCQlcCisJCXJldHVybiBy ZXQ7CQkJCQkJXAorCSAgICB9CQkJCQkJCQlcCisJfQkJCQkJCQkJXAorCXJldHVybiBhX3ByZWZp eCMjcmV2ZXJzZV9pdGVyX3JlY3Vyc2VfZmlsdGVyZWQocmJ0cmVlLCBsZWZ0LCBjYixcCisJICAg IGFyZywgZmlsdGVyX25vZGUsIGZpbHRlcl9zdWJ0cmVlLCBmaWx0ZXJfY3R4KTsJCVwKKyAgICB9 IGVsc2UgaWYgKGNtcCA8IDApIHsJCQkJCQlcCisJcmV0dXJuIGFfcHJlZml4IyNyZXZlcnNlX2l0 ZXJfc3RhcnRfZmlsdGVyZWQocmJ0cmVlLCBzdGFydCwJXAorCSAgbGVmdCwgY2IsIGFyZywgZmls dGVyX25vZGUsIGZpbHRlcl9zdWJ0cmVlLCBmaWx0ZXJfY3R4KTsJXAorICAgIH0gZWxzZSB7CQkJ CQkJCQlcCisJaWYgKGZpbHRlcl9ub2RlKGZpbHRlcl9jdHgsIG5vZGUpKSB7CQkJCVwKKwkgICAg cmV0ID0gY2IocmJ0cmVlLCBub2RlLCBhcmcpOwkJCQlcCisJICAgIGlmIChyZXQgIT0gTlVMTCkg ewkJCQkJCVwKKwkJcmV0dXJuIHJldDsJCQkJCQlcCisJICAgIH0JCQkJCQkJCVwKKwl9CQkJCQkJ CQlcCisJcmV0dXJuIGFfcHJlZml4IyNyZXZlcnNlX2l0ZXJfcmVjdXJzZV9maWx0ZXJlZChyYnRy ZWUsIGxlZnQsIGNiLFwKKwkgIGFyZywgZmlsdGVyX25vZGUsIGZpbHRlcl9zdWJ0cmVlLCBmaWx0 ZXJfY3R4KTsJCVwKKyAgICB9CQkJCQkJCQkJXAorfQkJCQkJCQkJCVwKK2FfYXR0ciBhX3R5cGUg KgkJCQkJCQkJXAorYV9wcmVmaXgjI3JldmVyc2VfaXRlcl9maWx0ZXJlZChhX3JidF90eXBlICpy YnRyZWUsIGFfdHlwZSAqc3RhcnQsCVwKKyAgYV90eXBlICooKmNiKShhX3JidF90eXBlICosIGFf dHlwZSAqLCB2b2lkICopLCB2b2lkICphcmcsCQlcCisgIGJvb2wgKCpmaWx0ZXJfbm9kZSkodm9p ZCAqLCBhX3R5cGUgKiksCQkJCVwKKyAgYm9vbCAoKmZpbHRlcl9zdWJ0cmVlKSh2b2lkICosIGFf dHlwZSAqKSwJCQkJXAorICB2b2lkICpmaWx0ZXJfY3R4KSB7CQkJCQkJCVwKKyAgICBhX3R5cGUg KnJldDsJCQkJCQkJXAorICAgIGlmIChzdGFydCAhPSBOVUxMKSB7CQkJCQkJXAorCXJldCA9IGFf cHJlZml4IyNyZXZlcnNlX2l0ZXJfc3RhcnRfZmlsdGVyZWQocmJ0cmVlLCBzdGFydCwJXAorCSAg ICByYnRyZWUtPnJidF9yb290LCBjYiwgYXJnLCBmaWx0ZXJfbm9kZSwgZmlsdGVyX3N1YnRyZWUs CVwKKwkgICAgZmlsdGVyX2N0eCk7CQkJCQkJXAorICAgIH0gZWxzZSB7CQkJCQkJCQlcCisJcmV0 ID0gYV9wcmVmaXgjI3JldmVyc2VfaXRlcl9yZWN1cnNlX2ZpbHRlcmVkKHJidHJlZSwJCVwKKwkg ICAgcmJ0cmVlLT5yYnRfcm9vdCwgY2IsIGFyZywgZmlsdGVyX25vZGUsIGZpbHRlcl9zdWJ0cmVl LAlcCisJICAgIGZpbHRlcl9jdHgpOwkJCQkJCVwKKyAgICB9CQkJCQkJCQkJXAorICAgIHJldHVy biByZXQ7CQkJCQkJCQlcCit9CQkJCQkJCQkJXAorKSAvKiBlbmQgcmJfc3VtbWFyaXplZF9vbmx5 ICovCisKKyNlbmRpZiAvKiBKRU1BTExPQ19JTlRFUk5BTF9SQl9IICovCgpkaWZmIC0tZ2l0IGEv Mzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9p bnRlcm5hbC9ydHJlZS5oIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAv aW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9ydHJlZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAuLmEwMGFkYjIKLS0tIC9kZXYvbnVsbAorKysgYi8zODktZHMtYmFzZS0zLjMu MC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL3J0cmVlLmgK QEAgLTAsMCArMSw1NTQgQEAKKyNpZm5kZWYgSkVNQUxMT0NfSU5URVJOQUxfUlRSRUVfSAorI2Rl ZmluZSBKRU1BTExPQ19JTlRFUk5BTF9SVFJFRV9ICisKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRl cm5hbC9hdG9taWMuaCIKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9tdXRleC5oIgorI2lu Y2x1ZGUgImplbWFsbG9jL2ludGVybmFsL3J0cmVlX3RzZC5oIgorI2luY2x1ZGUgImplbWFsbG9j L2ludGVybmFsL3NjLmgiCisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvdHNkLmgiCisKKy8q CisgKiBUaGlzIHJhZGl4IHRyZWUgaW1wbGVtZW50YXRpb24gaXMgdGFpbG9yZWQgdG8gdGhlIHNp bmd1bGFyIHB1cnBvc2Ugb2YKKyAqIGFzc29jaWF0aW5nIG1ldGFkYXRhIHdpdGggZXh0ZW50cyB0 aGF0IGFyZSBjdXJyZW50bHkgb3duZWQgYnkgamVtYWxsb2MuCisgKgorICoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioKKyAqLworCisvKiBOdW1iZXIgb2YgaGlnaCBpbnNpZ25pZmljYW50IGJpdHMuICov CisjZGVmaW5lIFJUUkVFX05ISUIgKCgxVSA8PCAoTEdfU0laRU9GX1BUUiszKSkgLSBMR19WQURE UikKKy8qIE51bWJlciBvZiBsb3cgaW5zaWdpZmljYW50IGJpdHMuICovCisjZGVmaW5lIFJUUkVF X05MSUIgTEdfUEFHRQorLyogTnVtYmVyIG9mIHNpZ25pZmljYW50IGJpdHMuICovCisjZGVmaW5l IFJUUkVFX05TQiAoTEdfVkFERFIgLSBSVFJFRV9OTElCKQorLyogTnVtYmVyIG9mIGxldmVscyBp biByYWRpeCB0cmVlLiAqLworI2lmIFJUUkVFX05TQiA8PSAxMAorIyAgZGVmaW5lIFJUUkVFX0hF SUdIVCAxCisjZWxpZiBSVFJFRV9OU0IgPD0gMzYKKyMgIGRlZmluZSBSVFJFRV9IRUlHSFQgMgor I2VsaWYgUlRSRUVfTlNCIDw9IDUyCisjICBkZWZpbmUgUlRSRUVfSEVJR0hUIDMKKyNlbHNlCisj ICBlcnJvciBVbnN1cHBvcnRlZCBudW1iZXIgb2Ygc2lnbmlmaWNhbnQgdmlydHVhbCBhZGRyZXNz IGJpdHMKKyNlbmRpZgorLyogVXNlIGNvbXBhY3QgbGVhZiByZXByZXNlbnRhdGlvbiBpZiB2aXJ0 dWFsIGFkZHJlc3MgZW5jb2RpbmcgYWxsb3dzLiAqLworI2lmIFJUUkVFX05ISUIgPj0gTEdfQ0VJ TChTQ19OU0laRVMpCisjICBkZWZpbmUgUlRSRUVfTEVBRl9DT01QQUNUCisjZW5kaWYKKwordHlw ZWRlZiBzdHJ1Y3QgcnRyZWVfbm9kZV9lbG1fcyBydHJlZV9ub2RlX2VsbV90Oworc3RydWN0IHJ0 cmVlX25vZGVfZWxtX3MgeworCWF0b21pY19wX3QJY2hpbGQ7IC8qIChydHJlZV97bm9kZSxsZWFm fV9lbG1fdCAqKSAqLworfTsKKwordHlwZWRlZiBzdHJ1Y3QgcnRyZWVfbWV0YWRhdGFfcyBydHJl ZV9tZXRhZGF0YV90Oworc3RydWN0IHJ0cmVlX21ldGFkYXRhX3MgeworCXN6aW5kX3Qgc3ppbmQ7 CisJZXh0ZW50X3N0YXRlX3Qgc3RhdGU7IC8qIE1pcnJvcnMgZWRhdGEtPnN0YXRlLiAqLworCWJv b2wgaXNfaGVhZDsgLyogTWlycm9ycyBlZGF0YS0+aXNfaGVhZC4gKi8KKwlib29sIHNsYWI7Cit9 OworCit0eXBlZGVmIHN0cnVjdCBydHJlZV9jb250ZW50c19zIHJ0cmVlX2NvbnRlbnRzX3Q7Citz dHJ1Y3QgcnRyZWVfY29udGVudHNfcyB7CisJZWRhdGFfdCAqZWRhdGE7CisJcnRyZWVfbWV0YWRh dGFfdCBtZXRhZGF0YTsKK307CisKKyNkZWZpbmUgUlRSRUVfTEVBRl9TVEFURV9XSURUSCBFREFU QV9CSVRTX1NUQVRFX1dJRFRICisjZGVmaW5lIFJUUkVFX0xFQUZfU1RBVEVfU0hJRlQgMgorI2Rl ZmluZSBSVFJFRV9MRUFGX1NUQVRFX01BU0sgTUFTSyhSVFJFRV9MRUFGX1NUQVRFX1dJRFRILCBS VFJFRV9MRUFGX1NUQVRFX1NISUZUKQorCitzdHJ1Y3QgcnRyZWVfbGVhZl9lbG1fcyB7CisjaWZk ZWYgUlRSRUVfTEVBRl9DT01QQUNUCisJLyoKKwkgKiBTaW5nbGUgcG9pbnRlci13aWR0aCBmaWVs ZCBjb250YWluaW5nIGFsbCB0aHJlZSBsZWFmIGVsZW1lbnQgZmllbGRzLgorCSAqIEZvciBleGFt cGxlLCBvbiBhIDY0LWJpdCB4NjQgc3lzdGVtIHdpdGggNDggc2lnbmlmaWNhbnQgdmlydHVhbAor CSAqIG1lbW9yeSBhZGRyZXNzIGJpdHMsIHRoZSBpbmRleCwgZWRhdGEsIGFuZCBzbGFiIGZpZWxk cyBhcmUgcGFja2VkIGFzCisJICogc3VjaDoKKwkgKgorCSAqIHg6IGluZGV4CisJICogZTogZWRh dGEKKwkgKiBzOiBzdGF0ZQorCSAqIGg6IGlzX2hlYWQKKwkgKiBiOiBzbGFiCisJICoKKwkgKiAg IDAwMDAwMDAwIHh4eHh4eHh4IGVlZWVlZWVlIFsuLi5dIGVlZWVlZWVlIGUwMHNzc2hiCisJICov CisJYXRvbWljX3BfdAlsZV9iaXRzOworI2Vsc2UKKwlhdG9taWNfcF90CWxlX2VkYXRhOyAvKiAo ZWRhdGFfdCAqKSAqLworCS8qCisJICogRnJvbSBoaWdoIHRvIGxvdyBiaXRzOiBzemluZCAoOCBi aXRzKSwgc3RhdGUgKDQgYml0cyksIGlzX2hlYWQsIHNsYWIKKwkgKi8KKwlhdG9taWNfdV90CWxl X21ldGFkYXRhOworI2VuZGlmCit9OworCit0eXBlZGVmIHN0cnVjdCBydHJlZV9sZXZlbF9zIHJ0 cmVlX2xldmVsX3Q7CitzdHJ1Y3QgcnRyZWVfbGV2ZWxfcyB7CisJLyogTnVtYmVyIG9mIGtleSBi aXRzIGRpc3Rpbmd1aXNoZWQgYnkgdGhpcyBsZXZlbC4gKi8KKwl1bnNpZ25lZAkJYml0czsKKwkv KgorCSAqIEN1bXVsYXRpdmUgbnVtYmVyIG9mIGtleSBiaXRzIGRpc3Rpbmd1aXNoZWQgYnkgdHJh dmVyc2luZyB0bworCSAqIGNvcnJlc3BvbmRpbmcgdHJlZSBsZXZlbC4KKwkgKi8KKwl1bnNpZ25l ZAkJY3VtYml0czsKK307CisKK3R5cGVkZWYgc3RydWN0IHJ0cmVlX3MgcnRyZWVfdDsKK3N0cnVj dCBydHJlZV9zIHsKKwliYXNlX3QJCQkqYmFzZTsKKwltYWxsb2NfbXV0ZXhfdAkJaW5pdF9sb2Nr OworCS8qIE51bWJlciBvZiBlbGVtZW50cyBiYXNlZCBvbiBydHJlZV9sZXZlbHNbMF0uYml0cy4g Ki8KKyNpZiBSVFJFRV9IRUlHSFQgPiAxCisJcnRyZWVfbm9kZV9lbG1fdAlyb290WzFVIDw8IChS VFJFRV9OU0IvUlRSRUVfSEVJR0hUKV07CisjZWxzZQorCXJ0cmVlX2xlYWZfZWxtX3QJcm9vdFsx VSA8PCAoUlRSRUVfTlNCL1JUUkVFX0hFSUdIVCldOworI2VuZGlmCit9OworCisvKgorICogU3Bs aXQgdGhlIGJpdHMgaW50byBvbmUgdG8gdGhyZWUgcGFydGl0aW9ucyBkZXBlbmRpbmcgb24gbnVt YmVyIG9mCisgKiBzaWduaWZpY2FudCBiaXRzLiAgSXQgdGhlIG51bWJlciBvZiBiaXRzIGRvZXMg bm90IGRpdmlkZSBldmVubHkgaW50byB0aGUKKyAqIG51bWJlciBvZiBsZXZlbHMsIHBsYWNlIG9u ZSByZW1haW5kZXIgYml0IHBlciBsZXZlbCBzdGFydGluZyBhdCB0aGUgbGVhZgorICogbGV2ZWwu CisgKi8KK3N0YXRpYyBjb25zdCBydHJlZV9sZXZlbF90IHJ0cmVlX2xldmVsc1tdID0geworI2lm IFJUUkVFX0hFSUdIVCA9PSAxCisJe1JUUkVFX05TQiwgUlRSRUVfTkhJQiArIFJUUkVFX05TQn0K KyNlbGlmIFJUUkVFX0hFSUdIVCA9PSAyCisJe1JUUkVFX05TQi8yLCBSVFJFRV9OSElCICsgUlRS RUVfTlNCLzJ9LAorCXtSVFJFRV9OU0IvMiArIFJUUkVFX05TQiUyLCBSVFJFRV9OSElCICsgUlRS RUVfTlNCfQorI2VsaWYgUlRSRUVfSEVJR0hUID09IDMKKwl7UlRSRUVfTlNCLzMsIFJUUkVFX05I SUIgKyBSVFJFRV9OU0IvM30sCisJe1JUUkVFX05TQi8zICsgUlRSRUVfTlNCJTMvMiwKKwkgICAg UlRSRUVfTkhJQiArIFJUUkVFX05TQi8zKjIgKyBSVFJFRV9OU0IlMy8yfSwKKwl7UlRSRUVfTlNC LzMgKyBSVFJFRV9OU0IlMyAtIFJUUkVFX05TQiUzLzIsIFJUUkVFX05ISUIgKyBSVFJFRV9OU0J9 CisjZWxzZQorIyAgZXJyb3IgVW5zdXBwb3J0ZWQgcnRyZWUgaGVpZ2h0CisjZW5kaWYKK307CisK K2Jvb2wgcnRyZWVfbmV3KHJ0cmVlX3QgKnJ0cmVlLCBiYXNlX3QgKmJhc2UsIGJvb2wgemVyb2Vk KTsKKworcnRyZWVfbGVhZl9lbG1fdCAqcnRyZWVfbGVhZl9lbG1fbG9va3VwX2hhcmQodHNkbl90 ICp0c2RuLCBydHJlZV90ICpydHJlZSwKKyAgICBydHJlZV9jdHhfdCAqcnRyZWVfY3R4LCB1aW50 cHRyX3Qga2V5LCBib29sIGRlcGVuZGVudCwgYm9vbCBpbml0X21pc3NpbmcpOworCitKRU1BTExP Q19BTFdBWVNfSU5MSU5FIHVuc2lnbmVkCitydHJlZV9sZWFmX21hc2tiaXRzKHZvaWQpIHsKKwl1 bnNpZ25lZCBwdHJiaXRzID0gWlUoMSkgPDwgKExHX1NJWkVPRl9QVFIrMyk7CisJdW5zaWduZWQg Y3VtYml0cyA9IChydHJlZV9sZXZlbHNbUlRSRUVfSEVJR0hULTFdLmN1bWJpdHMgLQorCSAgICBy dHJlZV9sZXZlbHNbUlRSRUVfSEVJR0hULTFdLmJpdHMpOworCXJldHVybiBwdHJiaXRzIC0gY3Vt Yml0czsKK30KKworSkVNQUxMT0NfQUxXQVlTX0lOTElORSB1aW50cHRyX3QKK3J0cmVlX2xlYWZr ZXkodWludHB0cl90IGtleSkgeworCXVpbnRwdHJfdCBtYXNrID0gfigoWlUoMSkgPDwgcnRyZWVf bGVhZl9tYXNrYml0cygpKSAtIDEpOworCXJldHVybiAoa2V5ICYgbWFzayk7Cit9CisKK0pFTUFM TE9DX0FMV0FZU19JTkxJTkUgc2l6ZV90CitydHJlZV9jYWNoZV9kaXJlY3RfbWFwKHVpbnRwdHJf dCBrZXkpIHsKKwlyZXR1cm4gKHNpemVfdCkoKGtleSA+PiBydHJlZV9sZWFmX21hc2tiaXRzKCkp ICYKKwkgICAgKFJUUkVFX0NUWF9OQ0FDSEUgLSAxKSk7Cit9CisKK0pFTUFMTE9DX0FMV0FZU19J TkxJTkUgdWludHB0cl90CitydHJlZV9zdWJrZXkodWludHB0cl90IGtleSwgdW5zaWduZWQgbGV2 ZWwpIHsKKwl1bnNpZ25lZCBwdHJiaXRzID0gWlUoMSkgPDwgKExHX1NJWkVPRl9QVFIrMyk7CisJ dW5zaWduZWQgY3VtYml0cyA9IHJ0cmVlX2xldmVsc1tsZXZlbF0uY3VtYml0czsKKwl1bnNpZ25l ZCBzaGlmdGJpdHMgPSBwdHJiaXRzIC0gY3VtYml0czsKKwl1bnNpZ25lZCBtYXNrYml0cyA9IHJ0 cmVlX2xldmVsc1tsZXZlbF0uYml0czsKKwl1aW50cHRyX3QgbWFzayA9IChaVSgxKSA8PCBtYXNr Yml0cykgLSAxOworCXJldHVybiAoKGtleSA+PiBzaGlmdGJpdHMpICYgbWFzayk7Cit9CisKKy8q CisgKiBBdG9taWMgZ2V0dGVycy4KKyAqCisgKiBkZXBlbmRlbnQ6IFJlYWRpbmcgYSB2YWx1ZSBv biBiZWhhbGYgb2YgYSBwb2ludGVyIHRvIGEgdmFsaWQgYWxsb2NhdGlvbgorICogICAgICAgICAg ICBpcyBndWFyYW50ZWVkIHRvIGJlIGEgY2xlYW4gcmVhZCBldmVuIHdpdGhvdXQgc3luY2hyb25p emF0aW9uLAorICogICAgICAgICAgICBiZWNhdXNlIHRoZSBydHJlZSB1cGRhdGUgYmVjYW1lIHZp c2libGUgaW4gbWVtb3J5IGJlZm9yZSB0aGUKKyAqICAgICAgICAgICAgcG9pbnRlciBjYW1lIGlu dG8gZXhpc3RlbmNlLgorICogIWRlcGVuZGVudDogQW4gYXJiaXRyYXJ5IHJlYWQsIGUuZy4gb24g YmVoYWxmIG9mIGl2c2FsbG9jKCksIG1heSBub3QgYmUKKyAqICAgICAgICAgICAgIGRlcGVuZGVu dCBvbiBhIHByZXZpb3VzIHJ0cmVlIHdyaXRlLCB3aGljaCBtZWFucyBhIHN0YWxlIHJlYWQKKyAq ICAgICAgICAgICAgIGNvdWxkIHJlc3VsdCBpZiBzeW5jaHJvbml6YXRpb24gd2VyZSBvbWl0dGVk IGhlcmUuCisgKi8KKyMgIGlmZGVmIFJUUkVFX0xFQUZfQ09NUEFDVAorSkVNQUxMT0NfQUxXQVlT X0lOTElORSB1aW50cHRyX3QKK3J0cmVlX2xlYWZfZWxtX2JpdHNfcmVhZCh0c2RuX3QgKnRzZG4s IHJ0cmVlX3QgKnJ0cmVlLAorICAgIHJ0cmVlX2xlYWZfZWxtX3QgKmVsbSwgYm9vbCBkZXBlbmRl bnQpIHsKKwlyZXR1cm4gKHVpbnRwdHJfdClhdG9taWNfbG9hZF9wKCZlbG0tPmxlX2JpdHMsIGRl cGVuZGVudAorCSAgICA/IEFUT01JQ19SRUxBWEVEIDogQVRPTUlDX0FDUVVJUkUpOworfQorCitK RU1BTExPQ19BTFdBWVNfSU5MSU5FIHVpbnRwdHJfdAorcnRyZWVfbGVhZl9lbG1fYml0c19lbmNv ZGUocnRyZWVfY29udGVudHNfdCBjb250ZW50cykgeworCWFzc2VydCgodWludHB0cl90KWNvbnRl bnRzLmVkYXRhICUgKHVpbnRwdHJfdClFREFUQV9BTElHTk1FTlQgPT0gMCk7CisJdWludHB0cl90 IGVkYXRhX2JpdHMgPSAodWludHB0cl90KWNvbnRlbnRzLmVkYXRhCisJICAgICYgKCgodWludHB0 cl90KTEgPDwgTEdfVkFERFIpIC0gMSk7CisKKwl1aW50cHRyX3Qgc3ppbmRfYml0cyA9ICh1aW50 cHRyX3QpY29udGVudHMubWV0YWRhdGEuc3ppbmQgPDwgTEdfVkFERFI7CisJdWludHB0cl90IHNs YWJfYml0cyA9ICh1aW50cHRyX3QpY29udGVudHMubWV0YWRhdGEuc2xhYjsKKwl1aW50cHRyX3Qg aXNfaGVhZF9iaXRzID0gKHVpbnRwdHJfdCljb250ZW50cy5tZXRhZGF0YS5pc19oZWFkIDw8IDE7 CisJdWludHB0cl90IHN0YXRlX2JpdHMgPSAodWludHB0cl90KWNvbnRlbnRzLm1ldGFkYXRhLnN0 YXRlIDw8CisJICAgIFJUUkVFX0xFQUZfU1RBVEVfU0hJRlQ7CisJdWludHB0cl90IG1ldGFkYXRh X2JpdHMgPSBzemluZF9iaXRzIHwgc3RhdGVfYml0cyB8IGlzX2hlYWRfYml0cyB8CisJICAgIHNs YWJfYml0czsKKwlhc3NlcnQoKGVkYXRhX2JpdHMgJiBtZXRhZGF0YV9iaXRzKSA9PSAwKTsKKwor CXJldHVybiBlZGF0YV9iaXRzIHwgbWV0YWRhdGFfYml0czsKK30KKworSkVNQUxMT0NfQUxXQVlT X0lOTElORSBydHJlZV9jb250ZW50c190CitydHJlZV9sZWFmX2VsbV9iaXRzX2RlY29kZSh1aW50 cHRyX3QgYml0cykgeworCXJ0cmVlX2NvbnRlbnRzX3QgY29udGVudHM7CisJLyogRG8gdGhlIGVh c3kgdGhpbmdzIGZpcnN0LiAqLworCWNvbnRlbnRzLm1ldGFkYXRhLnN6aW5kID0gYml0cyA+PiBM R19WQUREUjsKKwljb250ZW50cy5tZXRhZGF0YS5zbGFiID0gKGJvb2wpKGJpdHMgJiAxKTsKKwlj b250ZW50cy5tZXRhZGF0YS5pc19oZWFkID0gKGJvb2wpKGJpdHMgJiAoMSA8PCAxKSk7CisKKwl1 aW50cHRyX3Qgc3RhdGVfYml0cyA9IChiaXRzICYgUlRSRUVfTEVBRl9TVEFURV9NQVNLKSA+Pgor CSAgICBSVFJFRV9MRUFGX1NUQVRFX1NISUZUOworCWFzc2VydChzdGF0ZV9iaXRzIDw9IGV4dGVu dF9zdGF0ZV9tYXgpOworCWNvbnRlbnRzLm1ldGFkYXRhLnN0YXRlID0gKGV4dGVudF9zdGF0ZV90 KXN0YXRlX2JpdHM7CisKKwl1aW50cHRyX3QgbG93X2JpdF9tYXNrID0gfigodWludHB0cl90KUVE QVRBX0FMSUdOTUVOVCAtIDEpOworIyAgICBpZmRlZiBfX2FhcmNoNjRfXworCS8qCisJICogYWFy Y2g2NCBkb2Vzbid0IHNpZ24gZXh0ZW5kIHRoZSBoaWdoZXN0IHZpcnR1YWwgYWRkcmVzcyBiaXQg dG8gc2V0CisJICogdGhlIGhpZ2hlciBvbmVzLiAgSW5zdGVhZCwgdGhlIGhpZ2ggYml0cyBnZXQg emVyb2VkLgorCSAqLworCXVpbnRwdHJfdCBoaWdoX2JpdF9tYXNrID0gKCh1aW50cHRyX3QpMSA8 PCBMR19WQUREUikgLSAxOworCS8qIE1hc2sgb2ZmIG1ldGFkYXRhLiAqLworCXVpbnRwdHJfdCBt YXNrID0gaGlnaF9iaXRfbWFzayAmIGxvd19iaXRfbWFzazsKKwljb250ZW50cy5lZGF0YSA9IChl ZGF0YV90ICopKGJpdHMgJiBtYXNrKTsKKyMgICAgZWxzZQorCS8qIFJlc3RvcmUgc2lnbi1leHRl bmRlZCBoaWdoIGJpdHMsIG1hc2sgbWV0YWRhdGEgYml0cy4gKi8KKwljb250ZW50cy5lZGF0YSA9 IChlZGF0YV90ICopKCh1aW50cHRyX3QpKChpbnRwdHJfdCkoYml0cyA8PCBSVFJFRV9OSElCKQor CSAgICA+PiBSVFJFRV9OSElCKSAmIGxvd19iaXRfbWFzayk7CisjICAgIGVuZGlmCisJYXNzZXJ0 KCh1aW50cHRyX3QpY29udGVudHMuZWRhdGEgJSAodWludHB0cl90KUVEQVRBX0FMSUdOTUVOVCA9 PSAwKTsKKwlyZXR1cm4gY29udGVudHM7Cit9CisKKyMgIGVuZGlmIC8qIFJUUkVFX0xFQUZfQ09N UEFDVCAqLworCitKRU1BTExPQ19BTFdBWVNfSU5MSU5FIHJ0cmVlX2NvbnRlbnRzX3QKK3J0cmVl X2xlYWZfZWxtX3JlYWQodHNkbl90ICp0c2RuLCBydHJlZV90ICpydHJlZSwgcnRyZWVfbGVhZl9l bG1fdCAqZWxtLAorICAgIGJvb2wgZGVwZW5kZW50KSB7CisjaWZkZWYgUlRSRUVfTEVBRl9DT01Q QUNUCisJdWludHB0cl90IGJpdHMgPSBydHJlZV9sZWFmX2VsbV9iaXRzX3JlYWQodHNkbiwgcnRy ZWUsIGVsbSwgZGVwZW5kZW50KTsKKwlydHJlZV9jb250ZW50c190IGNvbnRlbnRzID0gcnRyZWVf bGVhZl9lbG1fYml0c19kZWNvZGUoYml0cyk7CisJcmV0dXJuIGNvbnRlbnRzOworI2Vsc2UKKwly dHJlZV9jb250ZW50c190IGNvbnRlbnRzOworCXVuc2lnbmVkIG1ldGFkYXRhX2JpdHMgPSBhdG9t aWNfbG9hZF91KCZlbG0tPmxlX21ldGFkYXRhLCBkZXBlbmRlbnQKKwkgICAgPyBBVE9NSUNfUkVM QVhFRCA6IEFUT01JQ19BQ1FVSVJFKTsKKwljb250ZW50cy5tZXRhZGF0YS5zbGFiID0gKGJvb2wp KG1ldGFkYXRhX2JpdHMgJiAxKTsKKwljb250ZW50cy5tZXRhZGF0YS5pc19oZWFkID0gKGJvb2wp KG1ldGFkYXRhX2JpdHMgJiAoMSA8PCAxKSk7CisKKwl1aW50cHRyX3Qgc3RhdGVfYml0cyA9ICht ZXRhZGF0YV9iaXRzICYgUlRSRUVfTEVBRl9TVEFURV9NQVNLKSA+PgorCSAgICBSVFJFRV9MRUFG X1NUQVRFX1NISUZUOworCWFzc2VydChzdGF0ZV9iaXRzIDw9IGV4dGVudF9zdGF0ZV9tYXgpOwor CWNvbnRlbnRzLm1ldGFkYXRhLnN0YXRlID0gKGV4dGVudF9zdGF0ZV90KXN0YXRlX2JpdHM7CisJ Y29udGVudHMubWV0YWRhdGEuc3ppbmQgPSBtZXRhZGF0YV9iaXRzID4+IChSVFJFRV9MRUFGX1NU QVRFX1NISUZUICsKKwkgICAgUlRSRUVfTEVBRl9TVEFURV9XSURUSCk7CisKKwljb250ZW50cy5l ZGF0YSA9IChlZGF0YV90ICopYXRvbWljX2xvYWRfcCgmZWxtLT5sZV9lZGF0YSwgZGVwZW5kZW50 CisJICAgID8gQVRPTUlDX1JFTEFYRUQgOiBBVE9NSUNfQUNRVUlSRSk7CisKKwlyZXR1cm4gY29u dGVudHM7CisjZW5kaWYKK30KKworSkVNQUxMT0NfQUxXQVlTX0lOTElORSB2b2lkCitydHJlZV9j b250ZW50c19lbmNvZGUocnRyZWVfY29udGVudHNfdCBjb250ZW50cywgdm9pZCAqKmJpdHMsCisg ICAgdW5zaWduZWQgKmFkZGl0aW9uYWwpIHsKKyNpZmRlZiBSVFJFRV9MRUFGX0NPTVBBQ1QKKwkq Yml0cyA9ICh2b2lkICopcnRyZWVfbGVhZl9lbG1fYml0c19lbmNvZGUoY29udGVudHMpOworI2Vs c2UKKwkqYWRkaXRpb25hbCA9ICh1bnNpZ25lZCljb250ZW50cy5tZXRhZGF0YS5zbGFiCisJICAg IHwgKCh1bnNpZ25lZCljb250ZW50cy5tZXRhZGF0YS5pc19oZWFkIDw8IDEpCisJICAgIHwgKCh1 bnNpZ25lZCljb250ZW50cy5tZXRhZGF0YS5zdGF0ZSA8PCBSVFJFRV9MRUFGX1NUQVRFX1NISUZU KQorCSAgICB8ICgodW5zaWduZWQpY29udGVudHMubWV0YWRhdGEuc3ppbmQgPDwgKFJUUkVFX0xF QUZfU1RBVEVfU0hJRlQgKworCSAgICBSVFJFRV9MRUFGX1NUQVRFX1dJRFRIKSk7CisJKmJpdHMg PSBjb250ZW50cy5lZGF0YTsKKyNlbmRpZgorfQorCitKRU1BTExPQ19BTFdBWVNfSU5MSU5FIHZv aWQKK3J0cmVlX2xlYWZfZWxtX3dyaXRlX2NvbW1pdCh0c2RuX3QgKnRzZG4sIHJ0cmVlX3QgKnJ0 cmVlLAorICAgIHJ0cmVlX2xlYWZfZWxtX3QgKmVsbSwgdm9pZCAqYml0cywgdW5zaWduZWQgYWRk aXRpb25hbCkgeworI2lmZGVmIFJUUkVFX0xFQUZfQ09NUEFDVAorCWF0b21pY19zdG9yZV9wKCZl bG0tPmxlX2JpdHMsIGJpdHMsIEFUT01JQ19SRUxFQVNFKTsKKyNlbHNlCisJYXRvbWljX3N0b3Jl X3UoJmVsbS0+bGVfbWV0YWRhdGEsIGFkZGl0aW9uYWwsIEFUT01JQ19SRUxFQVNFKTsKKwkvKgor CSAqIFdyaXRlIGVkYXRhIGxhc3QsIHNpbmNlIHRoZSBlbGVtZW50IGlzIGF0b21pY2FsbHkgY29u c2lkZXJlZCB2YWxpZAorCSAqIGFzIHNvb24gYXMgdGhlIGVkYXRhIGZpZWxkIGlzIG5vbi1OVUxM LgorCSAqLworCWF0b21pY19zdG9yZV9wKCZlbG0tPmxlX2VkYXRhLCBiaXRzLCBBVE9NSUNfUkVM RUFTRSk7CisjZW5kaWYKK30KKworSkVNQUxMT0NfQUxXQVlTX0lOTElORSB2b2lkCitydHJlZV9s ZWFmX2VsbV93cml0ZSh0c2RuX3QgKnRzZG4sIHJ0cmVlX3QgKnJ0cmVlLAorICAgIHJ0cmVlX2xl YWZfZWxtX3QgKmVsbSwgcnRyZWVfY29udGVudHNfdCBjb250ZW50cykgeworCWFzc2VydCgodWlu dHB0cl90KWNvbnRlbnRzLmVkYXRhICUgRURBVEFfQUxJR05NRU5UID09IDApOworCXZvaWQgKmJp dHM7CisJdW5zaWduZWQgYWRkaXRpb25hbDsKKworCXJ0cmVlX2NvbnRlbnRzX2VuY29kZShjb250 ZW50cywgJmJpdHMsICZhZGRpdGlvbmFsKTsKKwlydHJlZV9sZWFmX2VsbV93cml0ZV9jb21taXQo dHNkbiwgcnRyZWUsIGVsbSwgYml0cywgYWRkaXRpb25hbCk7Cit9CisKKy8qIFRoZSBzdGF0ZSBm aWVsZCBjYW4gYmUgdXBkYXRlZCBpbmRlcGVuZGVudGx5IChhbmQgbW9yZSBmcmVxdWVudGx5KS4g Ki8KK0pFTUFMTE9DX0FMV0FZU19JTkxJTkUgdm9pZAorcnRyZWVfbGVhZl9lbG1fc3RhdGVfdXBk YXRlKHRzZG5fdCAqdHNkbiwgcnRyZWVfdCAqcnRyZWUsCisgICAgcnRyZWVfbGVhZl9lbG1fdCAq ZWxtMSwgcnRyZWVfbGVhZl9lbG1fdCAqZWxtMiwgZXh0ZW50X3N0YXRlX3Qgc3RhdGUpIHsKKwlh c3NlcnQoZWxtMSAhPSBOVUxMKTsKKyNpZmRlZiBSVFJFRV9MRUFGX0NPTVBBQ1QKKwl1aW50cHRy X3QgYml0cyA9IHJ0cmVlX2xlYWZfZWxtX2JpdHNfcmVhZCh0c2RuLCBydHJlZSwgZWxtMSwKKwkg ICAgLyogZGVwZW5kZW50ICovIHRydWUpOworCWJpdHMgJj0gflJUUkVFX0xFQUZfU1RBVEVfTUFT SzsKKwliaXRzIHw9IHN0YXRlIDw8IFJUUkVFX0xFQUZfU1RBVEVfU0hJRlQ7CisJYXRvbWljX3N0 b3JlX3AoJmVsbTEtPmxlX2JpdHMsICh2b2lkICopYml0cywgQVRPTUlDX1JFTEVBU0UpOworCWlm IChlbG0yICE9IE5VTEwpIHsKKwkJYXRvbWljX3N0b3JlX3AoJmVsbTItPmxlX2JpdHMsICh2b2lk ICopYml0cywgQVRPTUlDX1JFTEVBU0UpOworCX0KKyNlbHNlCisJdW5zaWduZWQgYml0cyA9IGF0 b21pY19sb2FkX3UoJmVsbTEtPmxlX21ldGFkYXRhLCBBVE9NSUNfUkVMQVhFRCk7CisJYml0cyAm PSB+UlRSRUVfTEVBRl9TVEFURV9NQVNLOworCWJpdHMgfD0gc3RhdGUgPDwgUlRSRUVfTEVBRl9T VEFURV9TSElGVDsKKwlhdG9taWNfc3RvcmVfdSgmZWxtMS0+bGVfbWV0YWRhdGEsIGJpdHMsIEFU T01JQ19SRUxFQVNFKTsKKwlpZiAoZWxtMiAhPSBOVUxMKSB7CisJCWF0b21pY19zdG9yZV91KCZl bG0yLT5sZV9tZXRhZGF0YSwgYml0cywgQVRPTUlDX1JFTEVBU0UpOworCX0KKyNlbmRpZgorfQor CisvKgorICogVHJpZXMgdG8gbG9vayB1cCB0aGUga2V5IGluIHRoZSBMMSBjYWNoZSwgcmV0dXJu aW5nIGZhbHNlIGlmIHRoZXJlJ3MgYSBoaXQsIG9yCisgKiB0cnVlIGlmIHRoZXJlJ3MgYSBtaXNz LgorICogS2V5IGlzIGFsbG93ZWQgdG8gYmUgTlVMTDsgcmV0dXJucyB0cnVlIGluIHRoaXMgY2Fz ZS4KKyAqLworSkVNQUxMT0NfQUxXQVlTX0lOTElORSBib29sCitydHJlZV9sZWFmX2VsbV9sb29r dXBfZmFzdCh0c2RuX3QgKnRzZG4sIHJ0cmVlX3QgKnJ0cmVlLCBydHJlZV9jdHhfdCAqcnRyZWVf Y3R4LAorICAgIHVpbnRwdHJfdCBrZXksIHJ0cmVlX2xlYWZfZWxtX3QgKiplbG0pIHsKKwlzaXpl X3Qgc2xvdCA9IHJ0cmVlX2NhY2hlX2RpcmVjdF9tYXAoa2V5KTsKKwl1aW50cHRyX3QgbGVhZmtl eSA9IHJ0cmVlX2xlYWZrZXkoa2V5KTsKKwlhc3NlcnQobGVhZmtleSAhPSBSVFJFRV9MRUFGS0VZ X0lOVkFMSUQpOworCisJaWYgKHVubGlrZWx5KHJ0cmVlX2N0eC0+Y2FjaGVbc2xvdF0ubGVhZmtl eSAhPSBsZWFma2V5KSkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwlydHJlZV9sZWFmX2VsbV90 ICpsZWFmID0gcnRyZWVfY3R4LT5jYWNoZVtzbG90XS5sZWFmOworCWFzc2VydChsZWFmICE9IE5V TEwpOworCXVpbnRwdHJfdCBzdWJrZXkgPSBydHJlZV9zdWJrZXkoa2V5LCBSVFJFRV9IRUlHSFQt MSk7CisJKmVsbSA9ICZsZWFmW3N1YmtleV07CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKK0pFTUFM TE9DX0FMV0FZU19JTkxJTkUgcnRyZWVfbGVhZl9lbG1fdCAqCitydHJlZV9sZWFmX2VsbV9sb29r dXAodHNkbl90ICp0c2RuLCBydHJlZV90ICpydHJlZSwgcnRyZWVfY3R4X3QgKnJ0cmVlX2N0eCwK KyAgICB1aW50cHRyX3Qga2V5LCBib29sIGRlcGVuZGVudCwgYm9vbCBpbml0X21pc3NpbmcpIHsK Kwlhc3NlcnQoa2V5ICE9IDApOworCWFzc2VydCghZGVwZW5kZW50IHx8ICFpbml0X21pc3Npbmcp OworCisJc2l6ZV90IHNsb3QgPSBydHJlZV9jYWNoZV9kaXJlY3RfbWFwKGtleSk7CisJdWludHB0 cl90IGxlYWZrZXkgPSBydHJlZV9sZWFma2V5KGtleSk7CisJYXNzZXJ0KGxlYWZrZXkgIT0gUlRS RUVfTEVBRktFWV9JTlZBTElEKTsKKworCS8qIEZhc3QgcGF0aDogTDEgZGlyZWN0IG1hcHBlZCBj YWNoZS4gKi8KKwlpZiAobGlrZWx5KHJ0cmVlX2N0eC0+Y2FjaGVbc2xvdF0ubGVhZmtleSA9PSBs ZWFma2V5KSkgeworCQlydHJlZV9sZWFmX2VsbV90ICpsZWFmID0gcnRyZWVfY3R4LT5jYWNoZVtz bG90XS5sZWFmOworCQlhc3NlcnQobGVhZiAhPSBOVUxMKTsKKwkJdWludHB0cl90IHN1YmtleSA9 IHJ0cmVlX3N1YmtleShrZXksIFJUUkVFX0hFSUdIVC0xKTsKKwkJcmV0dXJuICZsZWFmW3N1Ymtl eV07CisJfQorCS8qCisJICogU2VhcmNoIHRoZSBMMiBMUlUgY2FjaGUuICBPbiBoaXQsIHN3YXAg dGhlIG1hdGNoaW5nIGVsZW1lbnQgaW50byB0aGUKKwkgKiBzbG90IGluIEwxIGNhY2hlLCBhbmQg bW92ZSB0aGUgcG9zaXRpb24gaW4gTDIgdXAgYnkgMS4KKwkgKi8KKyNkZWZpbmUgUlRSRUVfQ0FD SEVfQ0hFQ0tfTDIoaSkgZG8gewkJCQkJXAorCWlmIChsaWtlbHkocnRyZWVfY3R4LT5sMl9jYWNo ZVtpXS5sZWFma2V5ID09IGxlYWZrZXkpKSB7CVwKKwkJcnRyZWVfbGVhZl9lbG1fdCAqbGVhZiA9 IHJ0cmVlX2N0eC0+bDJfY2FjaGVbaV0ubGVhZjsJXAorCQlhc3NlcnQobGVhZiAhPSBOVUxMKTsJ CQkJCVwKKwkJaWYgKGkgPiAwKSB7CQkJCQkJXAorCQkJLyogQnViYmxlIHVwIGJ5IG9uZS4gKi8J CQkJXAorCQkJcnRyZWVfY3R4LT5sMl9jYWNoZVtpXS5sZWFma2V5ID0JCVwKKwkJCQlydHJlZV9j dHgtPmwyX2NhY2hlW2kgLSAxXS5sZWFma2V5OwlcCisJCQlydHJlZV9jdHgtPmwyX2NhY2hlW2ld LmxlYWYgPQkJCVwKKwkJCQlydHJlZV9jdHgtPmwyX2NhY2hlW2kgLSAxXS5sZWFmOwlcCisJCQly dHJlZV9jdHgtPmwyX2NhY2hlW2kgLSAxXS5sZWFma2V5ID0JCVwKKwkJCSAgICBydHJlZV9jdHgt PmNhY2hlW3Nsb3RdLmxlYWZrZXk7CQlcCisJCQlydHJlZV9jdHgtPmwyX2NhY2hlW2kgLSAxXS5s ZWFmID0JCVwKKwkJCSAgICBydHJlZV9jdHgtPmNhY2hlW3Nsb3RdLmxlYWY7CQlcCisJCX0gZWxz ZSB7CQkJCQkJXAorCQkJcnRyZWVfY3R4LT5sMl9jYWNoZVswXS5sZWFma2V5ID0JCVwKKwkJCSAg ICBydHJlZV9jdHgtPmNhY2hlW3Nsb3RdLmxlYWZrZXk7CQlcCisJCQlydHJlZV9jdHgtPmwyX2Nh Y2hlWzBdLmxlYWYgPQkJCVwKKwkJCSAgICBydHJlZV9jdHgtPmNhY2hlW3Nsb3RdLmxlYWY7CQlc CisJCX0JCQkJCQkJXAorCQlydHJlZV9jdHgtPmNhY2hlW3Nsb3RdLmxlYWZrZXkgPSBsZWFma2V5 OwkJXAorCQlydHJlZV9jdHgtPmNhY2hlW3Nsb3RdLmxlYWYgPSBsZWFmOwkJCVwKKwkJdWludHB0 cl90IHN1YmtleSA9IHJ0cmVlX3N1YmtleShrZXksIFJUUkVFX0hFSUdIVC0xKTsJXAorCQlyZXR1 cm4gJmxlYWZbc3Via2V5XTsJCQkJCVwKKwl9CQkJCQkJCQlcCit9IHdoaWxlICgwKQorCS8qIENo ZWNrIHRoZSBmaXJzdCBjYWNoZSBlbnRyeS4gKi8KKwlSVFJFRV9DQUNIRV9DSEVDS19MMigwKTsK KwkvKiBTZWFyY2ggdGhlIHJlbWFpbmluZyBjYWNoZSBlbGVtZW50cy4gKi8KKwlmb3IgKHVuc2ln bmVkIGkgPSAxOyBpIDwgUlRSRUVfQ1RYX05DQUNIRV9MMjsgaSsrKSB7CisJCVJUUkVFX0NBQ0hF X0NIRUNLX0wyKGkpOworCX0KKyN1bmRlZiBSVFJFRV9DQUNIRV9DSEVDS19MMgorCisJcmV0dXJu IHJ0cmVlX2xlYWZfZWxtX2xvb2t1cF9oYXJkKHRzZG4sIHJ0cmVlLCBydHJlZV9jdHgsIGtleSwK KwkgICAgZGVwZW5kZW50LCBpbml0X21pc3NpbmcpOworfQorCisvKgorICogUmV0dXJucyB0cnVl IG9uIGxvb2t1cCBmYWlsdXJlLgorICovCitzdGF0aWMgaW5saW5lIGJvb2wKK3J0cmVlX3JlYWRf aW5kZXBlbmRlbnQodHNkbl90ICp0c2RuLCBydHJlZV90ICpydHJlZSwgcnRyZWVfY3R4X3QgKnJ0 cmVlX2N0eCwKKyAgICB1aW50cHRyX3Qga2V5LCBydHJlZV9jb250ZW50c190ICpyX2NvbnRlbnRz KSB7CisJcnRyZWVfbGVhZl9lbG1fdCAqZWxtID0gcnRyZWVfbGVhZl9lbG1fbG9va3VwKHRzZG4s IHJ0cmVlLCBydHJlZV9jdHgsCisJICAgIGtleSwgLyogZGVwZW5kZW50ICovIGZhbHNlLCAvKiBp bml0X21pc3NpbmcgKi8gZmFsc2UpOworCWlmIChlbG0gPT0gTlVMTCkgeworCQlyZXR1cm4gdHJ1 ZTsKKwl9CisJKnJfY29udGVudHMgPSBydHJlZV9sZWFmX2VsbV9yZWFkKHRzZG4sIHJ0cmVlLCBl bG0sCisJICAgIC8qIGRlcGVuZGVudCAqLyBmYWxzZSk7CisJcmV0dXJuIGZhbHNlOworfQorCitz dGF0aWMgaW5saW5lIHJ0cmVlX2NvbnRlbnRzX3QKK3J0cmVlX3JlYWQodHNkbl90ICp0c2RuLCBy dHJlZV90ICpydHJlZSwgcnRyZWVfY3R4X3QgKnJ0cmVlX2N0eCwKKyAgICB1aW50cHRyX3Qga2V5 KSB7CisJcnRyZWVfbGVhZl9lbG1fdCAqZWxtID0gcnRyZWVfbGVhZl9lbG1fbG9va3VwKHRzZG4s IHJ0cmVlLCBydHJlZV9jdHgsCisJICAgIGtleSwgLyogZGVwZW5kZW50ICovIHRydWUsIC8qIGlu aXRfbWlzc2luZyAqLyBmYWxzZSk7CisJYXNzZXJ0KGVsbSAhPSBOVUxMKTsKKwlyZXR1cm4gcnRy ZWVfbGVhZl9lbG1fcmVhZCh0c2RuLCBydHJlZSwgZWxtLCAvKiBkZXBlbmRlbnQgKi8gdHJ1ZSk7 Cit9CisKK3N0YXRpYyBpbmxpbmUgcnRyZWVfbWV0YWRhdGFfdAorcnRyZWVfbWV0YWRhdGFfcmVh ZCh0c2RuX3QgKnRzZG4sIHJ0cmVlX3QgKnJ0cmVlLCBydHJlZV9jdHhfdCAqcnRyZWVfY3R4LAor ICAgIHVpbnRwdHJfdCBrZXkpIHsKKwlydHJlZV9sZWFmX2VsbV90ICplbG0gPSBydHJlZV9sZWFm X2VsbV9sb29rdXAodHNkbiwgcnRyZWUsIHJ0cmVlX2N0eCwKKwkgICAga2V5LCAvKiBkZXBlbmRl bnQgKi8gdHJ1ZSwgLyogaW5pdF9taXNzaW5nICovIGZhbHNlKTsKKwlhc3NlcnQoZWxtICE9IE5V TEwpOworCXJldHVybiBydHJlZV9sZWFmX2VsbV9yZWFkKHRzZG4sIHJ0cmVlLCBlbG0sCisJICAg IC8qIGRlcGVuZGVudCAqLyB0cnVlKS5tZXRhZGF0YTsKK30KKworLyoKKyAqIFJldHVybnMgdHJ1 ZSB3aGVuIHRoZSByZXF1ZXN0IGNhbm5vdCBiZSBmdWxmaWxsZWQgYnkgZmFzdHBhdGguCisgKi8K K3N0YXRpYyBpbmxpbmUgYm9vbAorcnRyZWVfbWV0YWRhdGFfdHJ5X3JlYWRfZmFzdCh0c2RuX3Qg KnRzZG4sIHJ0cmVlX3QgKnJ0cmVlLCBydHJlZV9jdHhfdCAqcnRyZWVfY3R4LAorICAgIHVpbnRw dHJfdCBrZXksIHJ0cmVlX21ldGFkYXRhX3QgKnJfcnRyZWVfbWV0YWRhdGEpIHsKKwlydHJlZV9s ZWFmX2VsbV90ICplbG07CisJLyoKKwkgKiBTaG91bGQgY2hlY2sgdGhlIGJvb2wgcmV0dXJuIHZh bHVlIChsb29rdXAgc3VjY2VzcyBvciBub3QpIGluc3RlYWQgb2YKKwkgKiBlbG0gPT0gTlVMTCAo d2hpY2ggd2lsbCByZXN1bHQgaW4gYW4gZXh0cmEgYnJhbmNoKS4gIFRoaXMgaXMgYmVjYXVzZQor CSAqIHdoZW4gdGhlIGNhY2hlIGxvb2t1cCBzdWNjZWVkcywgdGhlcmUgd2lsbCBuZXZlciBiZSBh IE5VTEwgcG9pbnRlcgorCSAqIHJldHVybmVkICh3aGljaCBpcyB1bmtub3duIHRvIHRoZSBjb21w aWxlcikuCisJICovCisJaWYgKHJ0cmVlX2xlYWZfZWxtX2xvb2t1cF9mYXN0KHRzZG4sIHJ0cmVl LCBydHJlZV9jdHgsIGtleSwgJmVsbSkpIHsKKwkJcmV0dXJuIHRydWU7CisJfQorCWFzc2VydChl bG0gIT0gTlVMTCk7CisJKnJfcnRyZWVfbWV0YWRhdGEgPSBydHJlZV9sZWFmX2VsbV9yZWFkKHRz ZG4sIHJ0cmVlLCBlbG0sCisJICAgIC8qIGRlcGVuZGVudCAqLyB0cnVlKS5tZXRhZGF0YTsKKwly ZXR1cm4gZmFsc2U7Cit9CisKK0pFTUFMTE9DX0FMV0FZU19JTkxJTkUgdm9pZAorcnRyZWVfd3Jp dGVfcmFuZ2VfaW1wbCh0c2RuX3QgKnRzZG4sIHJ0cmVlX3QgKnJ0cmVlLCBydHJlZV9jdHhfdCAq cnRyZWVfY3R4LAorICAgIHVpbnRwdHJfdCBiYXNlLCB1aW50cHRyX3QgZW5kLCBydHJlZV9jb250 ZW50c190IGNvbnRlbnRzLCBib29sIGNsZWFyaW5nKSB7CisJYXNzZXJ0KChiYXNlICYgUEFHRV9N QVNLKSA9PSAwICYmIChlbmQgJiBQQUdFX01BU0spID09IDApOworCS8qCisJICogT25seSB1c2Vk IGZvciBlbWFwXyhkZSlyZWdpc3Rlcl9pbnRlcmlvciwgd2hpY2ggaW1wbGllcyB0aGUKKwkgKiBi b3VuZGFyaWVzIGhhdmUgYmVlbiByZWdpc3RlcmVkIGFscmVhZHkuICBUaGVyZWZvcmUgYWxsIHRo ZSBsb29rdXBzCisJICogYXJlIGRlcGVuZGVudCB3L28gaW5pdF9taXNzaW5nLCBhc3N1bWluZyB0 aGUgcmFuZ2Ugc3BhbnMgYWNyb3NzIGF0CisJICogbW9zdCAyIHJ0cmVlIGxlYWYgbm9kZXMgKGVh Y2ggY292ZXJzIDEgR2lCIG9mIHZhZGRyKS4KKwkgKi8KKwl2b2lkICpiaXRzOworCXVuc2lnbmVk IGFkZGl0aW9uYWw7CisJcnRyZWVfY29udGVudHNfZW5jb2RlKGNvbnRlbnRzLCAmYml0cywgJmFk ZGl0aW9uYWwpOworCisJcnRyZWVfbGVhZl9lbG1fdCAqZWxtID0gTlVMTDsgLyogRGVhZCBzdG9y ZS4gKi8KKwlmb3IgKHVpbnRwdHJfdCBhZGRyID0gYmFzZTsgYWRkciA8PSBlbmQ7IGFkZHIgKz0g UEFHRSkgeworCQlpZiAoYWRkciA9PSBiYXNlIHx8CisJCSAgICAoYWRkciAmICgoWlUoMSkgPDwg cnRyZWVfbGVhZl9tYXNrYml0cygpKSAtIDEpKSA9PSAwKSB7CisJCQllbG0gPSBydHJlZV9sZWFm X2VsbV9sb29rdXAodHNkbiwgcnRyZWUsIHJ0cmVlX2N0eCwgYWRkciwKKwkJCSAgICAvKiBkZXBl bmRlbnQgKi8gdHJ1ZSwgLyogaW5pdF9taXNzaW5nICovIGZhbHNlKTsKKwkJCWFzc2VydChlbG0g IT0gTlVMTCk7CisJCX0KKwkJYXNzZXJ0KGVsbSA9PSBydHJlZV9sZWFmX2VsbV9sb29rdXAodHNk biwgcnRyZWUsIHJ0cmVlX2N0eCwgYWRkciwKKwkJICAgIC8qIGRlcGVuZGVudCAqLyB0cnVlLCAv KiBpbml0X21pc3NpbmcgKi8gZmFsc2UpKTsKKwkJYXNzZXJ0KCFjbGVhcmluZyB8fCBydHJlZV9s ZWFmX2VsbV9yZWFkKHRzZG4sIHJ0cmVlLCBlbG0sCisJCSAgICAvKiBkZXBlbmRlbnQgKi8gdHJ1 ZSkuZWRhdGEgIT0gTlVMTCk7CisJCXJ0cmVlX2xlYWZfZWxtX3dyaXRlX2NvbW1pdCh0c2RuLCBy dHJlZSwgZWxtLCBiaXRzLCBhZGRpdGlvbmFsKTsKKwkJZWxtKys7CisJfQorfQorCitKRU1BTExP Q19BTFdBWVNfSU5MSU5FIHZvaWQKK3J0cmVlX3dyaXRlX3JhbmdlKHRzZG5fdCAqdHNkbiwgcnRy ZWVfdCAqcnRyZWUsIHJ0cmVlX2N0eF90ICpydHJlZV9jdHgsCisgICAgdWludHB0cl90IGJhc2Us IHVpbnRwdHJfdCBlbmQsIHJ0cmVlX2NvbnRlbnRzX3QgY29udGVudHMpIHsKKwlydHJlZV93cml0 ZV9yYW5nZV9pbXBsKHRzZG4sIHJ0cmVlLCBydHJlZV9jdHgsIGJhc2UsIGVuZCwgY29udGVudHMs CisJICAgIC8qIGNsZWFyaW5nICovIGZhbHNlKTsKK30KKworSkVNQUxMT0NfQUxXQVlTX0lOTElO RSBib29sCitydHJlZV93cml0ZSh0c2RuX3QgKnRzZG4sIHJ0cmVlX3QgKnJ0cmVlLCBydHJlZV9j dHhfdCAqcnRyZWVfY3R4LCB1aW50cHRyX3Qga2V5LAorICAgIHJ0cmVlX2NvbnRlbnRzX3QgY29u dGVudHMpIHsKKwlydHJlZV9sZWFmX2VsbV90ICplbG0gPSBydHJlZV9sZWFmX2VsbV9sb29rdXAo dHNkbiwgcnRyZWUsIHJ0cmVlX2N0eCwKKwkgICAga2V5LCAvKiBkZXBlbmRlbnQgKi8gZmFsc2Us IC8qIGluaXRfbWlzc2luZyAqLyB0cnVlKTsKKwlpZiAoZWxtID09IE5VTEwpIHsKKwkJcmV0dXJu IHRydWU7CisJfQorCisJcnRyZWVfbGVhZl9lbG1fd3JpdGUodHNkbiwgcnRyZWUsIGVsbSwgY29u dGVudHMpOworCisJcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3J0cmVl X2NsZWFyKHRzZG5fdCAqdHNkbiwgcnRyZWVfdCAqcnRyZWUsIHJ0cmVlX2N0eF90ICpydHJlZV9j dHgsCisgICAgdWludHB0cl90IGtleSkgeworCXJ0cmVlX2xlYWZfZWxtX3QgKmVsbSA9IHJ0cmVl X2xlYWZfZWxtX2xvb2t1cCh0c2RuLCBydHJlZSwgcnRyZWVfY3R4LAorCSAgICBrZXksIC8qIGRl cGVuZGVudCAqLyB0cnVlLCAvKiBpbml0X21pc3NpbmcgKi8gZmFsc2UpOworCWFzc2VydChlbG0g IT0gTlVMTCk7CisJYXNzZXJ0KHJ0cmVlX2xlYWZfZWxtX3JlYWQodHNkbiwgcnRyZWUsIGVsbSwK KwkgICAgLyogZGVwZW5kZW50ICovIHRydWUpLmVkYXRhICE9IE5VTEwpOworCXJ0cmVlX2NvbnRl bnRzX3QgY29udGVudHM7CisJY29udGVudHMuZWRhdGEgPSBOVUxMOworCWNvbnRlbnRzLm1ldGFk YXRhLnN6aW5kID0gU0NfTlNJWkVTOworCWNvbnRlbnRzLm1ldGFkYXRhLnNsYWIgPSBmYWxzZTsK Kwljb250ZW50cy5tZXRhZGF0YS5pc19oZWFkID0gZmFsc2U7CisJY29udGVudHMubWV0YWRhdGEu c3RhdGUgPSAoZXh0ZW50X3N0YXRlX3QpMDsKKwlydHJlZV9sZWFmX2VsbV93cml0ZSh0c2RuLCBy dHJlZSwgZWxtLCBjb250ZW50cyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorcnRyZWVfY2xl YXJfcmFuZ2UodHNkbl90ICp0c2RuLCBydHJlZV90ICpydHJlZSwgcnRyZWVfY3R4X3QgKnJ0cmVl X2N0eCwKKyAgICB1aW50cHRyX3QgYmFzZSwgdWludHB0cl90IGVuZCkgeworCXJ0cmVlX2NvbnRl bnRzX3QgY29udGVudHM7CisJY29udGVudHMuZWRhdGEgPSBOVUxMOworCWNvbnRlbnRzLm1ldGFk YXRhLnN6aW5kID0gU0NfTlNJWkVTOworCWNvbnRlbnRzLm1ldGFkYXRhLnNsYWIgPSBmYWxzZTsK Kwljb250ZW50cy5tZXRhZGF0YS5pc19oZWFkID0gZmFsc2U7CisJY29udGVudHMubWV0YWRhdGEu c3RhdGUgPSAoZXh0ZW50X3N0YXRlX3QpMDsKKwlydHJlZV93cml0ZV9yYW5nZV9pbXBsKHRzZG4s IHJ0cmVlLCBydHJlZV9jdHgsIGJhc2UsIGVuZCwgY29udGVudHMsCisJICAgIC8qIGNsZWFyaW5n ICovIHRydWUpOworfQorCisjZW5kaWYgLyogSkVNQUxMT0NfSU5URVJOQUxfUlRSRUVfSCAqLwoK ZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1 ZGUvamVtYWxsb2MvaW50ZXJuYWwvcnRyZWVfdHNkLmggYi8zODktZHMtYmFzZS0zLjMuMC1idWls ZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL3J0cmVlX3RzZC5oCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0NTUyNWMKLS0tIC9kZXYvbnVsbAor KysgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFs bG9jL2ludGVybmFsL3J0cmVlX3RzZC5oCkBAIC0wLDAgKzEsNjIgQEAKKyNpZm5kZWYgSkVNQUxM T0NfSU5URVJOQUxfUlRSRUVfQ1RYX0gKKyNkZWZpbmUgSkVNQUxMT0NfSU5URVJOQUxfUlRSRUVf Q1RYX0gKKworLyoKKyAqIE51bWJlciBvZiBsZWFma2V5L2xlYWYgcGFpcnMgdG8gY2FjaGUgaW4g TDEgYW5kIEwyIGxldmVsIHJlc3BlY3RpdmVseS4gIEVhY2gKKyAqIGVudHJ5IHN1cHBvcnRzIGFu IGVudGlyZSBsZWFmLCBzbyB0aGUgY2FjaGUgaGl0IHJhdGUgaXMgdHlwaWNhbGx5IGhpZ2ggZXZl bgorICogd2l0aCBhIHNtYWxsIG51bWJlciBvZiBlbnRyaWVzLiAgSW4gcmFyZSBjYXNlcyBleHRl bnQgYWN0aXZpdHkgd2lsbCBzdHJhZGRsZQorICogdGhlIGJvdW5kYXJ5IGJldHdlZW4gdHdvIGxl YWYgbm9kZXMuICBGdXJ0aGVybW9yZSwgYW4gYXJlbmEgbWF5IHVzZSBhCisgKiBjb21iaW5hdGlv biBvZiBkc3MgYW5kIG1tYXAuICBOb3RlIHRoYXQgYXMgbWVtb3J5IHVzYWdlIGdyb3dzIHBhc3Qg dGhlIGFtb3VudAorICogdGhhdCB0aGlzIGNhY2hlIGNhbiBkaXJlY3RseSBjb3ZlciwgdGhlIGNh Y2hlIHdpbGwgYmVjb21lIGxlc3MgZWZmZWN0aXZlIGlmCisgKiBsb2NhbGl0eSBvZiByZWZlcmVu Y2UgaXMgbG93LCBidXQgdGhlIGNvbnNlcXVlbmNlIGlzIG1lcmVseSBjYWNoZSBtaXNzZXMKKyAq IHdoaWxlIHRyYXZlcnNpbmcgdGhlIHRyZWUgbm9kZXMuCisgKgorICogVGhlIEwxIGRpcmVjdCBt YXBwZWQgY2FjaGUgb2ZmZXJzIGNvbnNpc3RlbnQgYW5kIGxvdyBjb3N0IG9uIGNhY2hlIGhpdC4K KyAqIEhvd2V2ZXIgY29sbGlzaW9uIGNvdWxkIGFmZmVjdCBoaXQgcmF0ZSBuZWdhdGl2ZWx5LiAg VGhpcyBpcyByZXNvbHZlZCBieQorICogY29tYmluaW5nIHdpdGggYSBMMiBMUlUgY2FjaGUsIHdo aWNoIHJlcXVpcmVzIGxpbmVhciBzZWFyY2ggYW5kIHJlLW9yZGVyaW5nCisgKiBvbiBhY2Nlc3Mg YnV0IHN1ZmZlcnMgbm8gY29sbGlzaW9uLiAgTm90ZSB0aGF0LCB0aGUgY2FjaGUgd2lsbCBpdHNl bGYgc3VmZmVyCisgKiBjYWNoZSBtaXNzZXMgaWYgbWFkZSBvdmVybHkgbGFyZ2UsIHBsdXMgdGhl IGNvc3Qgb2YgbGluZWFyIHNlYXJjaCBpbiB0aGUgTFJVCisgKiBjYWNoZS4KKyAqLworI2RlZmlu ZSBSVFJFRV9DVFhfTkNBQ0hFIDE2CisjZGVmaW5lIFJUUkVFX0NUWF9OQ0FDSEVfTDIgOAorCisv KiBOZWVkZWQgZm9yIGluaXRpYWxpemF0aW9uIG9ubHkuICovCisjZGVmaW5lIFJUUkVFX0xFQUZL RVlfSU5WQUxJRCAoKHVpbnRwdHJfdCkxKQorI2RlZmluZSBSVFJFRV9DVFhfQ0FDSEVfRUxNX0lO VkFMSUQge1JUUkVFX0xFQUZLRVlfSU5WQUxJRCwgTlVMTH0KKworI2RlZmluZSBSVFJFRV9DVFhf SU5JVF9FTE1fMSBSVFJFRV9DVFhfQ0FDSEVfRUxNX0lOVkFMSUQKKyNkZWZpbmUgUlRSRUVfQ1RY X0lOSVRfRUxNXzIgUlRSRUVfQ1RYX0lOSVRfRUxNXzEsIFJUUkVFX0NUWF9JTklUX0VMTV8xCisj ZGVmaW5lIFJUUkVFX0NUWF9JTklUX0VMTV80IFJUUkVFX0NUWF9JTklUX0VMTV8yLCBSVFJFRV9D VFhfSU5JVF9FTE1fMgorI2RlZmluZSBSVFJFRV9DVFhfSU5JVF9FTE1fOCBSVFJFRV9DVFhfSU5J VF9FTE1fNCwgUlRSRUVfQ1RYX0lOSVRfRUxNXzQKKyNkZWZpbmUgUlRSRUVfQ1RYX0lOSVRfRUxN XzE2IFJUUkVFX0NUWF9JTklUX0VMTV84LCBSVFJFRV9DVFhfSU5JVF9FTE1fOAorCisjZGVmaW5l IF9SVFJFRV9DVFhfSU5JVF9FTE1fREFUQShuKSBSVFJFRV9DVFhfSU5JVF9FTE1fIyNuCisjZGVm aW5lIFJUUkVFX0NUWF9JTklUX0VMTV9EQVRBKG4pIF9SVFJFRV9DVFhfSU5JVF9FTE1fREFUQShu KQorCisvKgorICogU3RhdGljIGluaXRpYWxpemVyICh0byBpbnZhbGlkYXRlIHRoZSBjYWNoZSBl bnRyaWVzKSBpcyByZXF1aXJlZCBiZWNhdXNlIHRoZQorICogZnJlZSBmYXN0cGF0aCBtYXkgYWNj ZXNzIHRoZSBydHJlZSBjYWNoZSBiZWZvcmUgYSBmdWxsIHRzZCBpbml0aWFsaXphdGlvbi4KKyAq LworI2RlZmluZSBSVFJFRV9DVFhfSU5JVElBTElaRVIge3tSVFJFRV9DVFhfSU5JVF9FTE1fREFU QShSVFJFRV9DVFhfTkNBQ0hFKX0sIFwKKwkJCSAgICAgICB7UlRSRUVfQ1RYX0lOSVRfRUxNX0RB VEEoUlRSRUVfQ1RYX05DQUNIRV9MMil9fQorCit0eXBlZGVmIHN0cnVjdCBydHJlZV9sZWFmX2Vs bV9zIHJ0cmVlX2xlYWZfZWxtX3Q7CisKK3R5cGVkZWYgc3RydWN0IHJ0cmVlX2N0eF9jYWNoZV9l bG1fcyBydHJlZV9jdHhfY2FjaGVfZWxtX3Q7CitzdHJ1Y3QgcnRyZWVfY3R4X2NhY2hlX2VsbV9z IHsKKwl1aW50cHRyX3QJCWxlYWZrZXk7CisJcnRyZWVfbGVhZl9lbG1fdAkqbGVhZjsKK307CisK K3R5cGVkZWYgc3RydWN0IHJ0cmVlX2N0eF9zIHJ0cmVlX2N0eF90Oworc3RydWN0IHJ0cmVlX2N0 eF9zIHsKKwkvKiBEaXJlY3QgbWFwcGVkIGNhY2hlLiAqLworCXJ0cmVlX2N0eF9jYWNoZV9lbG1f dAljYWNoZVtSVFJFRV9DVFhfTkNBQ0hFXTsKKwkvKiBMMiBMUlUgY2FjaGUuICovCisJcnRyZWVf Y3R4X2NhY2hlX2VsbV90CWwyX2NhY2hlW1JUUkVFX0NUWF9OQ0FDSEVfTDJdOworfTsKKwordm9p ZCBydHJlZV9jdHhfZGF0YV9pbml0KHJ0cmVlX2N0eF90ICpjdHgpOworCisjZW5kaWYgLyogSkVN QUxMT0NfSU5URVJOQUxfUlRSRUVfQ1RYX0ggKi8KCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0z LjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL3NhZmV0 eV9jaGVjay5oIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVk ZS9qZW1hbGxvYy9pbnRlcm5hbC9zYWZldHlfY2hlY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwLi5mMWE3NGYxCi0tLSAvZGV2L251bGwKKysrIGIvMzg5LWRzLWJhc2UtMy4z LjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9zYWZldHlf Y2hlY2suaApAQCAtMCwwICsxLDMxIEBACisjaWZuZGVmIEpFTUFMTE9DX0lOVEVSTkFMX1NBRkVU WV9DSEVDS19ICisjZGVmaW5lIEpFTUFMTE9DX0lOVEVSTkFMX1NBRkVUWV9DSEVDS19ICisKK3Zv aWQgc2FmZXR5X2NoZWNrX2ZhaWxfc2l6ZWRfZGVhbGxvYyhib29sIGN1cnJlbnRfZGVhbGxvYywg Y29uc3Qgdm9pZCAqcHRyLAorICAgIHNpemVfdCB0cnVlX3NpemUsIHNpemVfdCBpbnB1dF9zaXpl KTsKK3ZvaWQgc2FmZXR5X2NoZWNrX2ZhaWwoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pOworCit0 eXBlZGVmIHZvaWQgKCpzYWZldHlfY2hlY2tfYWJvcnRfaG9va190KShjb25zdCBjaGFyICptZXNz YWdlKTsKKworLyogQ2FuIHNldCB0byBOVUxMIGZvciBhIGRlZmF1bHQuICovCit2b2lkIHNhZmV0 eV9jaGVja19zZXRfYWJvcnQoc2FmZXR5X2NoZWNrX2Fib3J0X2hvb2tfdCBhYm9ydF9mbik7CisK K0pFTUFMTE9DX0FMV0FZU19JTkxJTkUgdm9pZAorc2FmZXR5X2NoZWNrX3NldF9yZWR6b25lKHZv aWQgKnB0ciwgc2l6ZV90IHVzaXplLCBzaXplX3QgYnVtcGVkX3VzaXplKSB7CisJYXNzZXJ0KHVz aXplIDwgYnVtcGVkX3VzaXplKTsKKwlmb3IgKHNpemVfdCBpID0gdXNpemU7IGkgPCBidW1wZWRf dXNpemUgJiYgaSA8IHVzaXplICsgMzI7ICsraSkgeworCQkqKCh1bnNpZ25lZCBjaGFyICopcHRy ICsgaSkgPSAweEJDOworCX0KK30KKworSkVNQUxMT0NfQUxXQVlTX0lOTElORSB2b2lkCitzYWZl dHlfY2hlY2tfdmVyaWZ5X3JlZHpvbmUoY29uc3Qgdm9pZCAqcHRyLCBzaXplX3QgdXNpemUsIHNp emVfdCBidW1wZWRfdXNpemUpCit7CisJZm9yIChzaXplX3QgaSA9IHVzaXplOyBpIDwgYnVtcGVk X3VzaXplICYmIGkgPCB1c2l6ZSArIDMyOyArK2kpIHsKKwkJaWYgKHVubGlrZWx5KCooKHVuc2ln bmVkIGNoYXIgKilwdHIgKyBpKSAhPSAweEJDKSkgeworCQkJc2FmZXR5X2NoZWNrX2ZhaWwoIlVz ZSBhZnRlciBmcmVlIGVycm9yXG4iKTsKKwkJfQorCX0KK30KKworI2VuZGlmIC8qSkVNQUxMT0Nf SU5URVJOQUxfU0FGRVRZX0NIRUNLX0ggKi8KCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMu MC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL3Nhbi5oIGIv Mzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9p bnRlcm5hbC9zYW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODEzZDZi Ci0tLSAvZGV2L251bGwKKysrIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4z LjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9zYW4uaApAQCAtMCwwICsxLDE5MSBAQAorI2lm bmRlZiBKRU1BTExPQ19JTlRFUk5BTF9HVUFSRF9ICisjZGVmaW5lIEpFTUFMTE9DX0lOVEVSTkFM X0dVQVJEX0gKKworI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2Vob29rcy5oIgorI2luY2x1 ZGUgImplbWFsbG9jL2ludGVybmFsL2VtYXAuaCIKKworI2RlZmluZSBTQU5fUEFHRV9HVUFSRCBQ QUdFCisjZGVmaW5lIFNBTl9QQUdFX0dVQVJEU19TSVpFIChTQU5fUEFHRV9HVUFSRCAqIDIpCisK KyNkZWZpbmUgU0FOX0dVQVJEX0xBUkdFX0VWRVJZX05fRVhURU5UU19ERUZBVUxUIDAKKyNkZWZp bmUgU0FOX0dVQVJEX1NNQUxMX0VWRVJZX05fRVhURU5UU19ERUZBVUxUIDAKKworI2RlZmluZSBT QU5fTEdfVUFGX0FMSUdOX0RFRkFVTFQgKC0xKQorI2RlZmluZSBTQU5fQ0FDSEVfQklOX05PTkZB U1RfTUFTS19ERUZBVUxUICh1aW50cHRyX3QpKC0xKQorCitzdGF0aWMgY29uc3QgdWludHB0cl90 IHVhZl9kZXRlY3RfanVuayA9ICh1aW50cHRyX3QpMHg1YjViNWI1YjViNWI1YjViVUxMOworCisv KiAwIG1lYW5zIGRpc2FibGVkLCBpLmUuIG5ldmVyIGd1YXJkZWQuICovCitleHRlcm4gc2l6ZV90 IG9wdF9zYW5fZ3VhcmRfbGFyZ2U7CitleHRlcm4gc2l6ZV90IG9wdF9zYW5fZ3VhcmRfc21hbGw7 CisvKiAtMSBtZWFucyBkaXNhYmxlZCwgaS5lLiBuZXZlciBjaGVjayBmb3IgdXNlLWFmdGVyLWZy ZWUuICovCitleHRlcm4gc3NpemVfdCBvcHRfbGdfc2FuX3VhZl9hbGlnbjsKKwordm9pZCBzYW5f Z3VhcmRfcGFnZXModHNkbl90ICp0c2RuLCBlaG9va3NfdCAqZWhvb2tzLCBlZGF0YV90ICplZGF0 YSwKKyAgICBlbWFwX3QgKmVtYXAsIGJvb2wgbGVmdCwgYm9vbCByaWdodCwgYm9vbCByZW1hcCk7 Cit2b2lkIHNhbl91bmd1YXJkX3BhZ2VzKHRzZG5fdCAqdHNkbiwgZWhvb2tzX3QgKmVob29rcywg ZWRhdGFfdCAqZWRhdGEsCisgICAgZW1hcF90ICplbWFwLCBib29sIGxlZnQsIGJvb2wgcmlnaHQp OworLyoKKyAqIFVuZ3VhcmQgdGhlIGV4dGVudCwgYnV0IGRvbid0IG1vZGlmeSBlbWFwIGJvdW5k YXJpZXMuIE11c3QgYmUgY2FsbGVkIG9uIGFuCisgKiBleHRlbnQgdGhhdCBoYXMgYmVlbiBlcmFz ZWQgZnJvbSBlbWFwIGFuZCBzaG91bGRuJ3QgYmUgcGxhY2VkIGJhY2suCisgKi8KK3ZvaWQgc2Fu X3VuZ3VhcmRfcGFnZXNfcHJlX2Rlc3Ryb3kodHNkbl90ICp0c2RuLCBlaG9va3NfdCAqZWhvb2tz LAorICAgIGVkYXRhX3QgKmVkYXRhLCBlbWFwX3QgKmVtYXApOwordm9pZCBzYW5fY2hlY2tfc3Rh c2hlZF9wdHJzKHZvaWQgKipwdHJzLCBzaXplX3QgbnN0YXNoZWQsIHNpemVfdCB1c2l6ZSk7CisK K3ZvaWQgdHNkX3Nhbl9pbml0KHRzZF90ICp0c2QpOwordm9pZCBzYW5faW5pdChzc2l6ZV90IGxn X3Nhbl91YWZfYWxpZ24pOworCitzdGF0aWMgaW5saW5lIHZvaWQKK3Nhbl9ndWFyZF9wYWdlc190 d29fc2lkZWQodHNkbl90ICp0c2RuLCBlaG9va3NfdCAqZWhvb2tzLCBlZGF0YV90ICplZGF0YSwK KyAgICBlbWFwX3QgKmVtYXAsIGJvb2wgcmVtYXApIHsKKwlzYW5fZ3VhcmRfcGFnZXModHNkbiwg ZWhvb2tzLCBlZGF0YSwgZW1hcCwgdHJ1ZSwgdHJ1ZSwgcmVtYXApOworfQorCitzdGF0aWMgaW5s aW5lIHZvaWQKK3Nhbl91bmd1YXJkX3BhZ2VzX3R3b19zaWRlZCh0c2RuX3QgKnRzZG4sIGVob29r c190ICplaG9va3MsIGVkYXRhX3QgKmVkYXRhLAorICAgIGVtYXBfdCAqZW1hcCkgeworCXNhbl91 bmd1YXJkX3BhZ2VzKHRzZG4sIGVob29rcywgZWRhdGEsIGVtYXAsIHRydWUsIHRydWUpOworfQor CitzdGF0aWMgaW5saW5lIHNpemVfdAorc2FuX3R3b19zaWRlX3VuZ3VhcmRlZF9zeihzaXplX3Qg c2l6ZSkgeworCWFzc2VydChzaXplICUgUEFHRSA9PSAwKTsKKwlhc3NlcnQoc2l6ZSA+PSBTQU5f UEFHRV9HVUFSRFNfU0laRSk7CisJcmV0dXJuIHNpemUgLSBTQU5fUEFHRV9HVUFSRFNfU0laRTsK K30KKworc3RhdGljIGlubGluZSBzaXplX3QKK3Nhbl90d29fc2lkZV9ndWFyZGVkX3N6KHNpemVf dCBzaXplKSB7CisJYXNzZXJ0KHNpemUgJSBQQUdFID09IDApOworCXJldHVybiBzaXplICsgU0FO X1BBR0VfR1VBUkRTX1NJWkU7Cit9CisKK3N0YXRpYyBpbmxpbmUgc2l6ZV90CitzYW5fb25lX3Np ZGVfdW5ndWFyZGVkX3N6KHNpemVfdCBzaXplKSB7CisJYXNzZXJ0KHNpemUgJSBQQUdFID09IDAp OworCWFzc2VydChzaXplID49IFNBTl9QQUdFX0dVQVJEKTsKKwlyZXR1cm4gc2l6ZSAtIFNBTl9Q QUdFX0dVQVJEOworfQorCitzdGF0aWMgaW5saW5lIHNpemVfdAorc2FuX29uZV9zaWRlX2d1YXJk ZWRfc3ooc2l6ZV90IHNpemUpIHsKKwlhc3NlcnQoc2l6ZSAlIFBBR0UgPT0gMCk7CisJcmV0dXJu IHNpemUgKyBTQU5fUEFHRV9HVUFSRDsKK30KKworc3RhdGljIGlubGluZSBib29sCitzYW5fZ3Vh cmRfZW5hYmxlZCh2b2lkKSB7CisJcmV0dXJuIChvcHRfc2FuX2d1YXJkX2xhcmdlICE9IDAgfHwg b3B0X3Nhbl9ndWFyZF9zbWFsbCAhPSAwKTsKK30KKworc3RhdGljIGlubGluZSBib29sCitzYW5f bGFyZ2VfZXh0ZW50X2RlY2lkZV9ndWFyZCh0c2RuX3QgKnRzZG4sIGVob29rc190ICplaG9va3Ms IHNpemVfdCBzaXplLAorICAgIHNpemVfdCBhbGlnbm1lbnQpIHsKKwlpZiAob3B0X3Nhbl9ndWFy ZF9sYXJnZSA9PSAwIHx8IGVob29rc19ndWFyZF93aWxsX2ZhaWwoZWhvb2tzKSB8fAorCSAgICB0 c2RuX251bGwodHNkbikpIHsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCXRzZF90ICp0c2QgPSB0 c2RuX3RzZCh0c2RuKTsKKwl1aW50NjRfdCBuID0gdHNkX3Nhbl9leHRlbnRzX3VudGlsX2d1YXJk X2xhcmdlX2dldCh0c2QpOworCWFzc2VydChuID49IDEpOworCWlmIChuID4gMSkgeworCQkvKgor CQkgKiBTdWJ0cmFjdCBjb25kaXRpb25hbGx5IGJlY2F1c2UgdGhlIGd1YXJkIG1heSBub3QgaGFw cGVuIGR1ZQorCQkgKiB0byBhbGlnbm1lbnQgb3Igc2l6ZSByZXN0cmljdGlvbiBiZWxvdy4KKwkJ ICovCisJCSp0c2Rfc2FuX2V4dGVudHNfdW50aWxfZ3VhcmRfbGFyZ2VwX2dldCh0c2QpID0gbiAt IDE7CisJfQorCisJaWYgKG4gPT0gMSAmJiAoYWxpZ25tZW50IDw9IFBBR0UpICYmCisJICAgIChz YW5fdHdvX3NpZGVfZ3VhcmRlZF9zeihzaXplKSA8PSBTQ19MQVJHRV9NQVhDTEFTUykpIHsKKwkJ KnRzZF9zYW5fZXh0ZW50c191bnRpbF9ndWFyZF9sYXJnZXBfZ2V0KHRzZCkgPQorCQkgICAgb3B0 X3Nhbl9ndWFyZF9sYXJnZTsKKwkJcmV0dXJuIHRydWU7CisJfSBlbHNlIHsKKwkJYXNzZXJ0KHRz ZF9zYW5fZXh0ZW50c191bnRpbF9ndWFyZF9sYXJnZV9nZXQodHNkKSA+PSAxKTsKKwkJcmV0dXJu IGZhbHNlOworCX0KK30KKworc3RhdGljIGlubGluZSBib29sCitzYW5fc2xhYl9leHRlbnRfZGVj aWRlX2d1YXJkKHRzZG5fdCAqdHNkbiwgZWhvb2tzX3QgKmVob29rcykgeworCWlmIChvcHRfc2Fu X2d1YXJkX3NtYWxsID09IDAgfHwgZWhvb2tzX2d1YXJkX3dpbGxfZmFpbChlaG9va3MpIHx8CisJ ICAgIHRzZG5fbnVsbCh0c2RuKSkgeworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJdHNkX3QgKnRz ZCA9IHRzZG5fdHNkKHRzZG4pOworCXVpbnQ2NF90IG4gPSB0c2Rfc2FuX2V4dGVudHNfdW50aWxf Z3VhcmRfc21hbGxfZ2V0KHRzZCk7CisJYXNzZXJ0KG4gPj0gMSk7CisJaWYgKG4gPT0gMSkgewor CQkqdHNkX3Nhbl9leHRlbnRzX3VudGlsX2d1YXJkX3NtYWxscF9nZXQodHNkKSA9CisJCSAgICBv cHRfc2FuX2d1YXJkX3NtYWxsOworCQlyZXR1cm4gdHJ1ZTsKKwl9IGVsc2UgeworCQkqdHNkX3Nh bl9leHRlbnRzX3VudGlsX2d1YXJkX3NtYWxscF9nZXQodHNkKSA9IG4gLSAxOworCQlhc3NlcnQo dHNkX3Nhbl9leHRlbnRzX3VudGlsX2d1YXJkX3NtYWxsX2dldCh0c2QpID49IDEpOworCQlyZXR1 cm4gZmFsc2U7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3Nhbl9qdW5rX3B0cl9sb2Nh dGlvbnModm9pZCAqcHRyLCBzaXplX3QgdXNpemUsIHZvaWQgKipmaXJzdCwgdm9pZCAqKm1pZCwK KyAgICB2b2lkICoqbGFzdCkgeworCXNpemVfdCBwdHJfc3ogPSBzaXplb2Yodm9pZCAqKTsKKwor CSpmaXJzdCA9IHB0cjsKKworCSptaWQgPSAodm9pZCAqKSgodWludHB0cl90KXB0ciArICgodXNp emUgPj4gMSkgJiB+KHB0cl9zeiAtIDEpKSk7CisJYXNzZXJ0KCpmaXJzdCAhPSAqbWlkIHx8IHVz aXplID09IHB0cl9zeik7CisJYXNzZXJ0KCh1aW50cHRyX3QpKmZpcnN0IDw9ICh1aW50cHRyX3Qp Km1pZCk7CisKKwkvKgorCSAqIFdoZW4gdXNpemUgPiAzMkssIHRoZSBnYXAgYmV0d2VlbiByZXF1 ZXN0ZWRfc2l6ZSBhbmQgdXNpemUgbWlnaHQgYmUKKwkgKiBncmVhdGVyIHRoYW4gNEsgLS0gdGhp cyBtZWFucyB0aGUgbGFzdCB3cml0ZSBtYXkgYWNjZXNzIGFuCisJICogbGlrZWx5LXVudG91Y2hl ZCBwYWdlIChkZWZhdWx0IHNldHRpbmdzIHcvIDRLIHBhZ2VzKS4gIEhvd2V2ZXIgYnkKKwkgKiBk ZWZhdWx0IHRoZSB0Y2FjaGUgb25seSBnb2VzIHVwIHRvIHRoZSAzMksgc2l6ZSBjbGFzcywgYW5k IGlzIHVzdWFsbHkKKwkgKiB0dW5lZCBsb3dlciBpbnN0ZWFkIG9mIGhpZ2hlciwgd2hpY2ggbWFr ZXMgaXQgbGVzcyBvZiBhIGNvbmNlcm4uCisJICovCisJKmxhc3QgPSAodm9pZCAqKSgodWludHB0 cl90KXB0ciArIHVzaXplIC0gc2l6ZW9mKHVhZl9kZXRlY3RfanVuaykpOworCWFzc2VydCgqZmly c3QgIT0gKmxhc3QgfHwgdXNpemUgPT0gcHRyX3N6KTsKKwlhc3NlcnQoKm1pZCAhPSAqbGFzdCB8 fCB1c2l6ZSA8PSBwdHJfc3ogKiAyKTsKKwlhc3NlcnQoKHVpbnRwdHJfdCkqbWlkIDw9ICh1aW50 cHRyX3QpKmxhc3QpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wKK3Nhbl9qdW5rX3B0cl9zaG91 bGRfc2xvdyh2b2lkKSB7CisJLyoKKwkgKiBUaGUgbGF0dGVyIGNvbmRpdGlvbiAocG9pbnRlciBz aXplIGdyZWF0ZXIgdGhhbiB0aGUgbWluIHNpemUgY2xhc3MpCisJICogaXMgbm90IGV4cGVjdGVk IC0tIGZhbGwgYmFjayB0byB0aGUgc2xvdyBwYXRoIGZvciBzaW1wbGljaXR5LgorCSAqLworCXJl dHVybiBjb25maWdfZGVidWcgfHwgKExHX1NJWkVPRl9QVFIgPiBTQ19MR19USU5ZX01JTik7Cit9 CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorc2FuX2p1bmtfcHRyKHZvaWQgKnB0ciwgc2l6ZV90IHVz aXplKSB7CisJaWYgKHNhbl9qdW5rX3B0cl9zaG91bGRfc2xvdygpKSB7CisJCW1lbXNldChwdHIs IChjaGFyKXVhZl9kZXRlY3RfanVuaywgdXNpemUpOworCQlyZXR1cm47CisJfQorCisJdm9pZCAq Zmlyc3QsICptaWQsICpsYXN0OworCXNhbl9qdW5rX3B0cl9sb2NhdGlvbnMocHRyLCB1c2l6ZSwg JmZpcnN0LCAmbWlkLCAmbGFzdCk7CisJKih1aW50cHRyX3QgKilmaXJzdCA9IHVhZl9kZXRlY3Rf anVuazsKKwkqKHVpbnRwdHJfdCAqKW1pZCA9IHVhZl9kZXRlY3RfanVuazsKKwkqKHVpbnRwdHJf dCAqKWxhc3QgPSB1YWZfZGV0ZWN0X2p1bms7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbAorc2Fu X3VhZl9kZXRlY3Rpb25fZW5hYmxlZCh2b2lkKSB7CisJYm9vbCByZXQgPSBjb25maWdfdWFmX2Rl dGVjdGlvbiAmJiAob3B0X2xnX3Nhbl91YWZfYWxpZ24gIT0gLTEpOworCWlmIChjb25maWdfdWFm X2RldGVjdGlvbiAmJiByZXQpIHsKKwkJYXNzZXJ0KHNhbl9jYWNoZV9iaW5fbm9uZmFzdF9tYXNr ID09ICgodWludHB0cl90KTEgPDwKKwkJICAgIG9wdF9sZ19zYW5fdWFmX2FsaWduKSAtIDEpOwor CX0KKworCXJldHVybiByZXQ7Cit9CisKKyNlbmRpZiAvKiBKRU1BTExPQ19JTlRFUk5BTF9HVUFS RF9IICovCgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4z LjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9zYW5fYnVtcC5oIGIvMzg5LWRzLWJhc2UtMy4z LjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9zYW5fYnVt cC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlYzRhNzEKLS0tIC9kZXYv bnVsbAorKysgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRl L2plbWFsbG9jL2ludGVybmFsL3Nhbl9idW1wLmgKQEAgLTAsMCArMSw1MiBAQAorI2lmbmRlZiBK RU1BTExPQ19JTlRFUk5BTF9TQU5fQlVNUF9ICisjZGVmaW5lIEpFTUFMTE9DX0lOVEVSTkFMX1NB Tl9CVU1QX0gKKworI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2VkYXRhLmgiCisjaW5jbHVk ZSAiamVtYWxsb2MvaW50ZXJuYWwvZXhwX2dyb3cuaCIKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRl cm5hbC9tdXRleC5oIgorCisjZGVmaW5lIFNCQV9SRVRBSU5FRF9BTExPQ19TSVpFICgoc2l6ZV90 KTQgPDwgMjApCisKK2V4dGVybiBib29sIG9wdF9yZXRhaW47CisKK3R5cGVkZWYgc3RydWN0IGVo b29rc19zIGVob29rc190OwordHlwZWRlZiBzdHJ1Y3QgcGFjX3MgcGFjX3Q7CisKK3R5cGVkZWYg c3RydWN0IHNhbl9idW1wX2FsbG9jX3Mgc2FuX2J1bXBfYWxsb2NfdDsKK3N0cnVjdCBzYW5fYnVt cF9hbGxvY19zIHsKKwltYWxsb2NfbXV0ZXhfdCBtdHg7CisKKwllZGF0YV90ICpjdXJyX3JlZzsK K307CisKK3N0YXRpYyBpbmxpbmUgYm9vbAorc2FuX2J1bXBfZW5hYmxlZCgpIHsKKwkvKgorCSAq IFdlIGVuYWJsZSBzYW5fYnVtcCBhbGxvY2F0b3Igb25seSB3aGVuIGl0J3MgcG9zc2libGUgdG8g YnJlYWsgdXAgYQorCSAqIG1hcHBpbmcgYW5kIHVubWFwIGEgcGFydCBvZiBpdCAobWFwc19jb2Fs ZXNjZSkuIFRoaXMgaXMgbmVlZGVkIHRvCisJICogZW5zdXJlIHRoZSBhcmVuYSBkZXN0cnVjdGlv biBwcm9jZXNzIGNhbiBkZXN0cm95IGFsbCByZXRhaW5lZCBndWFyZGVkCisJICogZXh0ZW50cyBv bmUgYnkgb25lIGFuZCB0byB1bm1hcCBhIHRyYWlsaW5nIHBhcnQgb2YgYSByZXRhaW5lZCBndWFy ZGVkCisJICogcmVnaW9uIHdoZW4gaXQncyB0b28gc21hbGwgdG8gZml0IGEgcGVuZGluZyBhbGxv Y2F0aW9uLgorCSAqIG9wdF9yZXRhaW4gaXMgcmVxdWlyZWQsIGJlY2F1c2UgdGhpcyBhbGxvY2F0 b3IgcmV0YWlucyBhIGxhcmdlCisJICogdmlydHVhbCBtZW1vcnkgbWFwcGluZyBhbmQgcmV0dXJu cyBzbWFsbGVyIHBhcnRzIG9mIGl0LgorCSAqLworCXJldHVybiBtYXBzX2NvYWxlc2NlICYmIG9w dF9yZXRhaW47Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbAorc2FuX2J1bXBfYWxsb2NfaW5pdChz YW5fYnVtcF9hbGxvY190KiBzYmEpIHsKKwlib29sIGVyciA9IG1hbGxvY19tdXRleF9pbml0KCZz YmEtPm10eCwgInNhbml0aXplcl9idW1wX2FsbG9jYXRvciIsCisJICAgIFdJVE5FU1NfUkFOS19T QU5fQlVNUF9BTExPQywgbWFsbG9jX211dGV4X3JhbmtfZXhjbHVzaXZlKTsKKwlpZiAoZXJyKSB7 CisJCXJldHVybiB0cnVlOworCX0KKwlzYmEtPmN1cnJfcmVnID0gTlVMTDsKKworCXJldHVybiBm YWxzZTsKK30KKworZWRhdGFfdCAqCitzYW5fYnVtcF9hbGxvYyh0c2RuX3QgKnRzZG4sIHNhbl9i dW1wX2FsbG9jX3QqIHNiYSwgcGFjX3QgKnBhYywgZWhvb2tzX3QgKmVob29rcywKKyAgICBzaXpl X3Qgc2l6ZSwgYm9vbCB6ZXJvKTsKKworI2VuZGlmIC8qIEpFTUFMTE9DX0lOVEVSTkFMX1NBTl9C VU1QX0ggKi8KCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01 LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL3NjLmggYi8zODktZHMtYmFzZS0zLjMuMC1i dWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL3NjLmgKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJhYjM0NwotLS0gL2Rldi9udWxsCisrKyBi LzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2Mv aW50ZXJuYWwvc2MuaApAQCAtMCwwICsxLDM1NyBAQAorI2lmbmRlZiBKRU1BTExPQ19JTlRFUk5B TF9TQ19ICisjZGVmaW5lIEpFTUFMTE9DX0lOVEVSTkFMX1NDX0gKKworI2luY2x1ZGUgImplbWFs bG9jL2ludGVybmFsL2plbWFsbG9jX2ludGVybmFsX3R5cGVzLmgiCisKKy8qCisgKiBTaXplIGNs YXNzIGNvbXB1dGF0aW9uczoKKyAqCisgKiBUaGVzZSBhcmUgYSBsaXR0bGUgdHJpY2t5OyB3ZSds bCBmaXJzdCBzdGFydCBieSBkZXNjcmliaW5nIGhvdyB0aGluZ3MKKyAqIGdlbmVyYWxseSB3b3Jr LCBhbmQgdGhlbiBkZXNjcmliZSBzb21lIG9mIHRoZSBkZXRhaWxzLgorICoKKyAqIElnbm9yZSB0 aGUgZmlyc3QgZmV3IHNpemUgY2xhc3NlcyBmb3IgYSBtb21lbnQuIFdlIGNhbiB0aGVuIHNwbGl0 IGFsbCB0aGUKKyAqIHJlbWFpbmluZyBzaXplIGNsYXNzZXMgaW50byBncm91cHMuIFRoZSBzaXpl IGNsYXNzZXMgaW4gYSBncm91cCBhcmUgc3BhY2VkCisgKiBzdWNoIHRoYXQgdGhleSBjb3ZlciBh bGxvY2F0aW9uIHJlcXVlc3Qgc2l6ZXMgaW4gYSBwb3dlci1vZi0yIHJhbmdlLiBUaGUKKyAqIHBv d2VyIG9mIHR3byBpcyBjYWxsZWQgdGhlIGJhc2Ugb2YgdGhlIGdyb3VwLCBhbmQgdGhlIHNpemUg Y2xhc3NlcyBpbiBpdAorICogc2F0aXNmeSBhbGxvY2F0aW9ucyBpbiB0aGUgaGFsZi1vcGVuIHJh bmdlIChiYXNlLCBiYXNlICogMl0uIFRoZXJlIGFyZQorICogU0NfTkdST1VQIHNpemUgY2xhc3Nl cyBpbiBlYWNoIGdyb3VwLCBlcXVhbGx5IHNwYWNlZCBpbiB0aGUgcmFuZ2UsIHNvIHRoYXQKKyAq IGVhY2ggb25lIGNvdmVycyBhbGxvY2F0aW9ucyBmb3IgYmFzZSAvIFNDX05HUk9VUCBwb3NzaWJs ZSBhbGxvY2F0aW9uIHNpemVzLgorICogV2UgY2FsbCB0aGF0IHZhbHVlIChiYXNlIC8gU0NfTkdS T1VQKSB0aGUgZGVsdGEgb2YgdGhlIGdyb3VwLiBFYWNoIHNpemUgY2xhc3MKKyAqIGlzIGRlbHRh IGxhcmdlciB0aGFuIHRoZSBvbmUgYmVmb3JlIGl0IChpbmNsdWRpbmcgdGhlIGluaXRpYWwgc2l6 ZSBjbGFzcyBpbiBhCisgKiBncm91cCwgd2hpY2ggaXMgZGVsdGEgbGFyZ2VyIHRoYW4gYmFzZSwg dGhlIGxhcmdlc3Qgc2l6ZSBjbGFzcyBpbiB0aGUKKyAqIHByZXZpb3VzIGdyb3VwKS4KKyAqIFRv IG1ha2UgdGhlIG1hdGggYWxsIHdvcmsgb3V0IG5pY2VseSwgd2UgcmVxdWlyZSB0aGF0IFNDX05H Uk9VUCBpcyBhIHBvd2VyIG9mCisgKiB0d28sIGFuZCBkZWZpbmUgaXQgaW4gdGVybXMgb2YgU0Nf TEdfTkdST1VQLiBXZSdsbCBvZnRlbiB0YWxrIGluIHRlcm1zIG9mCisgKiBsZ19iYXNlIGFuZCBs Z19kZWx0YS4gRm9yIGVhY2ggb2YgdGhlc2UgZ3JvdXBzIHRoZW4sIHdlIGhhdmUgdGhhdAorICog bGdfZGVsdGEgPT0gbGdfYmFzZSAtIFNDX0xHX05HUk9VUC4KKyAqIFRoZSBzaXplIGNsYXNzZXMg aW4gYSBncm91cCB3aXRoIGEgZ2l2ZW4gbGdfYmFzZSBhbmQgbGdfZGVsdGEgKHdoaWNoLCByZWNh bGwsCisgKiBjYW4gYmUgY29tcHV0ZWQgZnJvbSBsZ19iYXNlIGZvciB0aGVzZSBncm91cHMpIGFy ZSB0aGVyZWZvcmU6CisgKiAgIGJhc2UgKyAxICogZGVsdGEKKyAqICAgICB3aGljaCBjb3ZlcnMg YWxsb2NhdGlvbnMgaW4gKGJhc2UsIGJhc2UgKyAxICogZGVsdGFdCisgKiAgIGJhc2UgKyAyICog ZGVsdGEKKyAqICAgICB3aGljaCBjb3ZlcnMgYWxsb2NhdGlvbnMgaW4gKGJhc2UgKyAxICogZGVs dGEsIGJhc2UgKyAyICogZGVsdGFdLgorICogICBiYXNlICsgMyAqIGRlbHRhCisgKiAgICAgd2hp Y2ggY292ZXJzIGFsbG9jYXRpb25zIGluIChiYXNlICsgMiAqIGRlbHRhLCBiYXNlICsgMyAqIGRl bHRhXS4KKyAqICAgLi4uCisgKiAgIGJhc2UgKyBTQ19OR1JPVVAgKiBkZWx0YSAoID09IDIgKiBi YXNlKQorICogICAgIHdoaWNoIGNvdmVycyBhbGxvY2F0aW9ucyBpbiAoYmFzZSArIChTQ19OR1JP VVAgLSAxKSAqIGRlbHRhLCAyICogYmFzZV0uCisgKiAoTm90ZSB0aGF0IGN1cnJlbnRseSBTQ19O R1JPVVAgaXMgYWx3YXlzIDQsIHNvIHRoZSAiLi4uIiBpcyBlbXB0eSBpbgorICogcHJhY3RpY2Uu KQorICogTm90ZSB0aGF0IHRoZSBsYXN0IHNpemUgY2xhc3MgaW4gdGhlIGdyb3VwIGlzIHRoZSBu ZXh0IHBvd2VyIG9mIHR3byAoYWZ0ZXIKKyAqIGJhc2UpLCBzbyB0aGF0IHdlJ3ZlIHNldCB1cCB0 aGUgaW5kdWN0aW9uIGNvcnJlY3RseSBmb3IgdGhlIG5leHQgZ3JvdXAncworICogc2VsZWN0aW9u IG9mIGRlbHRhLgorICoKKyAqIE5vdywgbGV0J3Mgc3RhcnQgY29uc2lkZXJpbmcgdGhlIGZpcnN0 IGZldyBzaXplIGNsYXNzZXMuIFR3byBleHRyYSBjb25zdGFudHMKKyAqIGNvbWUgaW50byBwbGF5 IGhlcmU6IExHX1FVQU5UVU0gYW5kIFNDX0xHX1RJTllfTUlOLiBMR19RVUFOVFVNIGVuc3VyZXMK KyAqIGNvcnJlY3QgcGxhdGZvcm0gYWxpZ25tZW50OyBhbGwgb2JqZWN0cyBvZiBzaXplICgxIDw8 IExHX1FVQU5UVU0pIG9yIGxhcmdlcgorICogYXJlIGF0IGxlYXN0ICgxIDw8IExHX1FVQU5UVU0p IGFsaWduZWQ7IHRoaXMgY2FuIGJlIHVzZWQgdG8gZW5zdXJlIHRoYXQgd2UKKyAqIG5ldmVyIHJl dHVybiBpbXByb3Blcmx5IGFsaWduZWQgbWVtb3J5LCBieSBtYWtpbmcgKDEgPDwgTEdfUVVBTlRV TSkgZXF1YWwgdGhlCisgKiBoaWdoZXN0IHJlcXVpcmVkIGFsaWdubWVudCBvZiBhIHBsYXRmb3Jt LiBGb3IgYWxsb2NhdGlvbiBzaXplcyBzbWFsbGVyIHRoYW4KKyAqICgxIDw8IExHX1FVQU5UVU0p IHRob3VnaCwgd2UgY2FuIGJlIG1vcmUgcmVsYXhlZCAoc2luY2Ugd2UgZG9uJ3Qgc3VwcG9ydAor ICogcGxhdGZvcm1zIHdpdGggdHlwZXMgd2l0aCBhbGlnbm1lbnQgbGFyZ2VyIHRoYW4gdGhlaXIg c2l6ZSkuIFRvIGFsbG93IHN1Y2gKKyAqIGFsbG9jYXRpb25zICh3aXRob3V0IHdhc3Rpbmcgc3Bh Y2UgdW5uZWNlc3NhcmlseSksIHdlIGludHJvZHVjZSB0aW55IHNpemUKKyAqIGNsYXNzZXM7IG9u ZSBwZXIgcG93ZXIgb2YgdHdvLCB1cCB1bnRpbCB3ZSBoaXQgdGhlIHF1YW50dW0gc2l6ZS4gVGhl cmUgYXJlCisgKiB0aGVyZWZvcmUgTEdfUVVBTlRVTSAtIFNDX0xHX1RJTllfTUlOIHN1Y2ggc2l6 ZSBjbGFzc2VzLgorICoKKyAqIE5leHQsIHdlIGhhdmUgYSBzaXplIGNsYXNzIG9mIHNpemUgKDEg PDwgTEdfUVVBTlRVTSkuICBUaGlzIGNhbid0IGJlIHRoZQorICogc3RhcnQgb2YgYSBncm91cCBp biB0aGUgc2Vuc2Ugd2UgZGVzY3JpYmVkIGFib3ZlIChjb3ZlcmluZyBhIHBvd2VyIG9mIHR3bwor ICogcmFuZ2UpIHNpbmNlLCBpZiB3ZSBkaXZpZGVkIGludG8gaXQgdG8gcGljayBhIHZhbHVlIG9m IGRlbHRhLCB3ZSdkIGdldCBhCisgKiBkZWx0YSBzbWFsbGVyIHRoYW4gKDEgPDwgTEdfUVVBTlRV TSkgZm9yIHNpemVzID49ICgxIDw8IExHX1FVQU5UVU0pLCB3aGljaAorICogaXMgYWdhaW5zdCB0 aGUgcnVsZXMuCisgKgorICogVGhlIGZpcnN0IGJhc2Ugd2UgY2FuIGRpdmlkZSBieSBTQ19OR1JP VVAgd2hpbGUgc3RpbGwgYmVpbmcgYXQgbGVhc3QKKyAqICgxIDw8IExHX1FVQU5UVU0pIGlzIFND X05HUk9VUCAqICgxIDw8IExHX1FVQU5UVU0pLiBXZSBjYW4gZ2V0IHRoZXJlIGJ5CisgKiBoYXZp bmcgU0NfTkdST1VQIHNpemUgY2xhc3Nlcywgc3BhY2VkICgxIDw8IExHX1FVQU5UVU0pIGFwYXJ0 LiBUaGVzZSBzaXplCisgKiBjbGFzc2VzIGFyZToKKyAqICAgMSAqICgxIDw8IExHX1FVQU5UVU0p CisgKiAgIDIgKiAoMSA8PCBMR19RVUFOVFVNKQorICogICAzICogKDEgPDwgTEdfUVVBTlRVTSkK KyAqICAgLi4uIChhbHRob3VnaCwgYXMgYWJvdmUsIHRoaXMgIi4uLiIgaXMgZW1wdHkgaW4gcHJh Y3RpY2UpCisgKiAgIFNDX05HUk9VUCAqICgxIDw8IExHX1FVQU5UVU0pLgorICoKKyAqIFRoZXJl IGFyZSBTQ19OR1JPVVAgb2YgdGhlc2Ugc2l6ZSBjbGFzc2VzLCBzbyB3ZSBjYW4gcmVnYXJkIGl0 IGFzIGEgc29ydCBvZgorICogcHNldWRvLWdyb3VwLCBldmVuIHRob3VnaCBpdCBzcGFucyBtdWx0 aXBsZSBwb3dlcnMgb2YgMiwgaXMgZGl2aWRlZAorICogZGlmZmVyZW50bHksIGFuZCBib3RoIHN0 YXJ0cyBhbmQgZW5kcyBvbiBhIHBvd2VyIG9mIDIgKGFzIG9wcG9zZWQgdG8ganVzdAorICogZW5k aW5nKS4gU0NfTkdST1VQIGlzIGl0c2VsZiBhIHBvd2VyIG9mIHR3bywgc28gdGhlIGZpcnN0IGdy b3VwIGFmdGVyIHRoZQorICogcHNldWRvLWdyb3VwIGhhcyB0aGUgcG93ZXItb2YtdHdvIGJhc2Ug U0NfTkdST1VQICogKDEgPDwgTEdfUVVBTlRVTSksIGZvciBhCisgKiBsZ19iYXNlIG9mIExHX1FV QU5UVU0gKyBTQ19MR19OR1JPVVAuIFdlIGNhbiBkaXZpZGUgdGhpcyBiYXNlIGludG8gU0NfTkdS T1VQCisgKiBzaXplcyB3aXRob3V0IHZpb2xhdGluZyBvdXIgTEdfUVVBTlRVTSByZXF1aXJlbWVu dHMsIHNvIHdlIGNhbiBzYWZlbHkgc2V0CisgKiBsZ19kZWx0YSA9IGxnX2Jhc2UgLSBTQ19MR19H Uk9VUCAoPT0gTEdfUVVBTlRVTSkuCisgKgorICogU28sIGluIG9yZGVyLCB0aGUgc2l6ZSBjbGFz c2VzIGFyZToKKyAqCisgKiBUaW55IHNpemUgY2xhc3NlczoKKyAqIC0gQ291bnQ6IExHX1FVQU5U VU0gLSBTQ19MR19USU5ZX01JTi4KKyAqIC0gU2l6ZXM6CisgKiAgICAgMSA8PCBTQ19MR19USU5Z X01JTgorICogICAgIDEgPDwgKFNDX0xHX1RJTllfTUlOICsgMSkKKyAqICAgICAxIDw8IChTQ19M R19USU5ZX01JTiArIDIpCisgKiAgICAgLi4uCisgKiAgICAgMSA8PCAoTEdfUVVBTlRVTSAtIDEp CisgKgorICogSW5pdGlhbCBwc2V1ZG8tZ3JvdXA6CisgKiAtIENvdW50OiBTQ19OR1JPVVAKKyAq IC0gU2l6ZXM6CisgKiAgICAgMSAqICgxIDw8IExHX1FVQU5UVU0pCisgKiAgICAgMiAqICgxIDw8 IExHX1FVQU5UVU0pCisgKiAgICAgMyAqICgxIDw8IExHX1FVQU5UVU0pCisgKiAgICAgLi4uCisg KiAgICAgU0NfTkdST1VQICogKDEgPDwgTEdfUVVBTlRVTSkKKyAqCisgKiBSZWd1bGFyIGdyb3Vw IDA6CisgKiAtIENvdW50OiBTQ19OR1JPVVAKKyAqIC0gU2l6ZXM6CisgKiAgIChyZWxhdGl2ZSB0 byBsZ19iYXNlIG9mIExHX1FVQU5UVU0gKyBTQ19MR19OR1JPVVAgYW5kIGxnX2RlbHRhIG9mCisg KiAgIGxnX2Jhc2UgLSBTQ19MR19OR1JPVVApCisgKiAgICAgKDEgPDwgbGdfYmFzZSkgKyAxICog KDEgPDwgbGdfZGVsdGEpCisgKiAgICAgKDEgPDwgbGdfYmFzZSkgKyAyICogKDEgPDwgbGdfZGVs dGEpCisgKiAgICAgKDEgPDwgbGdfYmFzZSkgKyAzICogKDEgPDwgbGdfZGVsdGEpCisgKiAgICAg Li4uCisgKiAgICAgKDEgPDwgbGdfYmFzZSkgKyBTQ19OR1JPVVAgKiAoMSA8PCBsZ19kZWx0YSkg WyA9PSAoMSA8PCAobGdfYmFzZSArIDEpKSBdCisgKgorICogUmVndWxhciBncm91cCAxOgorICog LSBDb3VudDogU0NfTkdST1VQCisgKiAtIFNpemVzOgorICogICAocmVsYXRpdmUgdG8gbGdfYmFz ZSBvZiBMR19RVUFOVFVNICsgU0NfTEdfTkdST1VQICsgMSBhbmQgbGdfZGVsdGEgb2YKKyAqICAg bGdfYmFzZSAtIFNDX0xHX05HUk9VUCkKKyAqICAgICAoMSA8PCBsZ19iYXNlKSArIDEgKiAoMSA8 PCBsZ19kZWx0YSkKKyAqICAgICAoMSA8PCBsZ19iYXNlKSArIDIgKiAoMSA8PCBsZ19kZWx0YSkK KyAqICAgICAoMSA8PCBsZ19iYXNlKSArIDMgKiAoMSA8PCBsZ19kZWx0YSkKKyAqICAgICAuLi4K KyAqICAgICAoMSA8PCBsZ19iYXNlKSArIFNDX05HUk9VUCAqICgxIDw8IGxnX2RlbHRhKSBbID09 ICgxIDw8IChsZ19iYXNlICsgMSkpIF0KKyAqCisgKiAuLi4KKyAqCisgKiBSZWd1bGFyIGdyb3Vw IE46CisgKiAtIENvdW50OiBTQ19OR1JPVVAKKyAqIC0gU2l6ZXM6CisgKiAgIChyZWxhdGl2ZSB0 byBsZ19iYXNlIG9mIExHX1FVQU5UVU0gKyBTQ19MR19OR1JPVVAgKyBOIGFuZCBsZ19kZWx0YSBv ZgorICogICBsZ19iYXNlIC0gU0NfTEdfTkdST1VQKQorICogICAgICgxIDw8IGxnX2Jhc2UpICsg MSAqICgxIDw8IGxnX2RlbHRhKQorICogICAgICgxIDw8IGxnX2Jhc2UpICsgMiAqICgxIDw8IGxn X2RlbHRhKQorICogICAgICgxIDw8IGxnX2Jhc2UpICsgMyAqICgxIDw8IGxnX2RlbHRhKQorICog ICAgIC4uLgorICogICAgICgxIDw8IGxnX2Jhc2UpICsgU0NfTkdST1VQICogKDEgPDwgbGdfZGVs dGEpIFsgPT0gKDEgPDwgKGxnX2Jhc2UgKyAxKSkgXQorICoKKyAqCisgKiBSZXByZXNlbnRhdGlv biBvZiBtZXRhZGF0YToKKyAqIFRvIG1ha2UgdGhlIG1hdGggZWFzeSwgd2UnbGwgbW9zdGx5IHdv cmsgaW4gbGcgcXVhbnRpdGllcy4gV2UgcmVjb3JkIGxnX2Jhc2UsCisgKiBsZ19kZWx0YSwgYW5k IG5kZWx0YSAoaS5lLiBudW1iZXIgb2YgZGVsdGFzIGFib3ZlIHRoZSBiYXNlKSBvbiBhCisgKiBw ZXItc2l6ZS1jbGFzcyBiYXNpcywgYW5kIG1haW50YWluIHRoZSBpbnZhcmlhbnQgdGhhdCwgYWNy b3NzIGFsbCBzaXplCisgKiBjbGFzc2VzLCBzaXplID09ICgxIDw8IGxnX2Jhc2UpICsgbmRlbHRh ICogKDEgPDwgbGdfZGVsdGEpLgorICoKKyAqIEZvciByZWd1bGFyIGdyb3VwcyAoaS5lLiB0aG9z ZSB3aXRoIGxnX2Jhc2UgPj0gTEdfUVVBTlRVTSArIFNDX0xHX05HUk9VUCksCisgKiBsZ19kZWx0 YSBpcyBsZ19iYXNlIC0gU0NfTEdfTkdST1VQLCBhbmQgbmRlbHRhIGdvZXMgZnJvbSAxIHRvIFND X05HUk9VUC4KKyAqCisgKiBGb3IgdGhlIGluaXRpYWwgdGlueSBzaXplIGNsYXNzZXMgKGlmIGFu eSksIGxnX2Jhc2UgaXMgbGcoc2l6ZSBjbGFzcyBzaXplKS4KKyAqIGxnX2RlbHRhIGlzIGxnX2Jh c2UgZm9yIHRoZSBmaXJzdCBzaXplIGNsYXNzLCBhbmQgbGdfYmFzZSAtIDEgZm9yIGFsbAorICog c3Vic2VxdWVudCBvbmVzLiBuZGVsdGEgaXMgYWx3YXlzIDAuCisgKgorICogRm9yIHRoZSBwc2V1 ZG8tZ3JvdXAsIGlmIHRoZXJlIGFyZSBubyB0aW55IHNpemUgY2xhc3NlcywgdGhlbiB3ZSBzZXQK KyAqIGxnX2Jhc2UgPT0gTEdfUVVBTlRVTSwgbGdfZGVsdGEgPT0gTEdfUVVBTlRVTSwgYW5kIGhh dmUgbmRlbHRhIHJhbmdlIGZyb20gMAorICogdG8gU0NfTkdST1VQIC0gMS4gKE5vdGUgdGhhdCBk ZWx0YSA9PSBiYXNlLCBzbyBiYXNlICsgKFNDX05HUk9VUCAtIDEpICogZGVsdGEKKyAqIGlzIGp1 c3QgU0NfTkdST1VQICogYmFzZSwgb3IgKDEgPDwgKFNDX0xHX05HUk9VUCArIExHX1FVQU5UVU0p KSwgc28gd2UgZG8KKyAqIGluZGVlZCBnZXQgYSBwb3dlciBvZiB0d28gdGhhdCB3YXkpLiBJZiB0 aGVyZSAqYXJlKiB0aW55IHNpemUgY2xhc3NlcywgdGhlbgorICogdGhlIGZpcnN0IHNpemUgY2xh c3MgbmVlZHMgdG8gaGF2ZSBsZ19kZWx0YSByZWxhdGl2ZSB0byB0aGUgbGFyZ2VzdCB0aW55IHNp emUKKyAqIGNsYXNzLiBXZSB0aGVyZWZvcmUgc2V0IGxnX2Jhc2UgPT0gTEdfUVVBTlRVTSAtIDEs CisgKiBsZ19kZWx0YSA9PSBMR19RVUFOVFVNIC0gMSwgYW5kIG5kZWx0YSA9PSAxLCBrZWVwaW5n IHRoZSByZXN0IG9mIHRoZQorICogcHNldWRvLWdyb3VwIHRoZSBzYW1lLgorICoKKyAqCisgKiBP dGhlciB0ZXJtaW5vbG9neToKKyAqICJTbWFsbCIgc2l6ZSBjbGFzc2VzIG1lYW4gdGhvc2UgdGhh dCBhcmUgYWxsb2NhdGVkIG91dCBvZiBiaW5zLCB3aGljaCBpcyB0aGUKKyAqIHNhbWUgYXMgdGhv c2UgdGhhdCBhcmUgc2xhYiBhbGxvY2F0ZWQuCisgKiAiTGFyZ2UiIHNpemUgY2xhc3NlcyBhcmUg dGhvc2UgdGhhdCBhcmUgbm90IHNtYWxsLiBUaGUgY3V0b2ZmIGZvciBjb3VudGluZyBhcworICog bGFyZ2UgaXMgcGFnZSBzaXplICogZ3JvdXAgc2l6ZS4KKyAqLworCisvKgorICogU2l6ZSBjbGFz cyBOICsgKDEgPDwgU0NfTEdfTkdST1VQKSB0d2ljZSB0aGUgc2l6ZSBvZiBzaXplIGNsYXNzIE4u CisgKi8KKyNkZWZpbmUgU0NfTEdfTkdST1VQIDIKKyNkZWZpbmUgU0NfTEdfVElOWV9NSU4gMwor CisjaWYgU0NfTEdfVElOWV9NSU4gPT0gMAorLyogVGhlIGRpdiBtb2R1bGUgZG9lc24ndCBzdXBw b3J0IGRpdmlzaW9uIGJ5IDEsIHdoaWNoIHRoaXMgd291bGQgcmVxdWlyZS4gKi8KKyNlcnJvciAi VW5zdXBwb3J0ZWQgTEdfVElOWV9NSU4iCisjZW5kaWYKKworLyoKKyAqIFRoZSBkZWZpbml0aW9u cyBiZWxvdyBhcmUgYWxsIGRldGVybWluZWQgYnkgdGhlIGFib3ZlIHNldHRpbmdzIGFuZCBzeXN0 ZW0KKyAqIGNoYXJhY3RlcmlzdGljcy4KKyAqLworI2RlZmluZSBTQ19OR1JPVVAgKDFVTEwgPDwg U0NfTEdfTkdST1VQKQorI2RlZmluZSBTQ19QVFJfQklUUyAoKDFVTEwgPDwgTEdfU0laRU9GX1BU UikgKiA4KQorI2RlZmluZSBTQ19OVElOWSAoTEdfUVVBTlRVTSAtIFNDX0xHX1RJTllfTUlOKQor I2RlZmluZSBTQ19MR19USU5ZX01BWENMQVNTIChMR19RVUFOVFVNID4gU0NfTEdfVElOWV9NSU4g PyBMR19RVUFOVFVNIC0gMSA6IC0xKQorI2RlZmluZSBTQ19OUFNFVURPIFNDX05HUk9VUAorI2Rl ZmluZSBTQ19MR19GSVJTVF9SRUdVTEFSX0JBU0UgKExHX1FVQU5UVU0gKyBTQ19MR19OR1JPVVAp CisvKgorICogV2UgY2FwIGFsbG9jYXRpb25zIHRvIGJlIGxlc3MgdGhhbiAyICoqIChwdHJfYml0 cyAtIDEpLCBzbyB0aGUgaGlnaGVzdCBiYXNlCisgKiB3ZSBuZWVkIGlzIDIgKiogKHB0cl9iaXRz IC0gMikuIChUaGlzIGFsc28gbWVhbnMgdGhhdCB0aGUgbGFzdCBncm91cCBpcyAxCisgKiBzaXpl IGNsYXNzIHNob3J0ZXIgdGhhbiB0aGUgb3RoZXJzKS4KKyAqIFdlIGNvdWxkIHByb2JhYmx5IHNh dmUgc29tZSBzcGFjZSBpbiBhcmVuYXMgYnkgY2FwcGluZyB0aGlzIGF0IExHX1ZBRERSIHNpemUu CisgKi8KKyNkZWZpbmUgU0NfTEdfQkFTRV9NQVggKFNDX1BUUl9CSVRTIC0gMikKKyNkZWZpbmUg U0NfTlJFR1VMQVIgKFNDX05HUk9VUCAqIAkJCQkJXAorICAgIChTQ19MR19CQVNFX01BWCAtIFND X0xHX0ZJUlNUX1JFR1VMQVJfQkFTRSArIDEpIC0gMSkKKyNkZWZpbmUgU0NfTlNJWkVTIChTQ19O VElOWSArIFNDX05QU0VVRE8gKyBTQ19OUkVHVUxBUikKKworLyoKKyAqIFRoZSBudW1iZXIgb2Yg c2l6ZSBjbGFzc2VzIHRoYXQgYXJlIGEgbXVsdGlwbGUgb2YgdGhlIHBhZ2Ugc2l6ZS4KKyAqCisg KiBIZXJlIGFyZSB0aGUgZmlyc3QgZmV3IGJhc2VzIHRoYXQgaGF2ZSBhIHBhZ2Utc2l6ZWQgU0Mu CisgKgorICogICAgICBsZyhiYXNlKSB8ICAgICBiYXNlIHwgaGlnaGVzdCBTQyB8IHBhZ2UtbXVs dGlwbGUgU0NzCisgKiAtLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyAqICAgTEdfUEFHRSAtIDEgfCBQQUdFIC8gMiB8ICAgICAgIFBBR0Ug fCAxCisgKiAgICAgICBMR19QQUdFIHwgICAgIFBBR0UgfCAgIDIgKiBQQUdFIHwgMQorICogICBM R19QQUdFICsgMSB8IDIgKiBQQUdFIHwgICA0ICogUEFHRSB8IDIKKyAqICAgTEdfUEFHRSArIDIg fCA0ICogUEFHRSB8ICAgOCAqIFBBR0UgfCA0CisgKgorICogVGhlIG51bWJlciBvZiBwYWdlLW11 bHRpcGxlIFNDcyBjb250aW51ZXMgdG8gZ3JvdyBpbiBwb3dlcnMgb2YgdHdvLCB1cCB1bnRpbAor ICogbGdfZGVsdGEgPT0gbGdfcGFnZSwgd2hpY2ggY29ycmVzcG9uZHMgdG8gc2V0dGluZyBsZ19i YXNlIHRvIGxnX3BhZ2UgKworICogU0NfTEdfTkdST1VQLiAgU28sIHRoZW4sIHRoZSBudW1iZXIg b2Ygc2l6ZSBjbGFzc2VzIHRoYXQgYXJlIG11bHRpcGxlcyBvZiB0aGUKKyAqIHBhZ2Ugc2l6ZSB3 aG9zZSBsZ19kZWx0YSBpcyBsZXNzIHRoYW4gdGhlIHBhZ2Ugc2l6ZSBhcmUKKyAqIGlzIDEgKyAo MioqMCArIDIqKjEgKyAuLi4gKyAyKioobGdfbmdyb3VwIC0gMSkgPT0gMioqbGdfbmdyb3VwLgor ICoKKyAqIEZvciBlYWNoIGJhc2Ugd2l0aCBsZ19iYXNlIGluIFtsZ19wYWdlICsgbGdfbmdyb3Vw LCBsZ19iYXNlX21heCksIHRoZXJlIGFyZQorICogTkdST1VQIHBhZ2Utc2l6ZWQgc2l6ZSBjbGFz c2VzLCBhbmQgd2hlbiBsZ19iYXNlID09IGxnX2Jhc2VfbWF4LCB0aGVyZSBhcmUKKyAqIE5HUk9V UCAtIDEuCisgKgorICogVGhpcyBnaXZlcyB1cyB0aGUgcXVhbnRpdHkgd2Ugc2Vlay4KKyAqLwor I2RlZmluZSBTQ19OUFNJWkVTICgJCQkJCQkJXAorICAgIFNDX05HUk9VUAkJCQkJCQkJXAorICAg ICsgKFNDX0xHX0JBU0VfTUFYIC0gKExHX1BBR0UgKyBTQ19MR19OR1JPVVApKSAqIFNDX05HUk9V UAkJXAorICAgICsgU0NfTkdST1VQIC0gMSkKKworLyoKKyAqIFdlIGRlY2xhcmUgYSBzaXplIGNs YXNzIGlzIGJpbm5hYmxlIGlmIHNpemUgPCBwYWdlIHNpemUgKiBncm91cC4gT3IsIGluIG90aGVy CisgKiB3b3JkcywgbGcoc2l6ZSkgPCBsZyhwYWdlIHNpemUpICsgbGcoZ3JvdXAgc2l6ZSkuCisg Ki8KKyNkZWZpbmUgU0NfTkJJTlMgKAkJCQkJCQlcCisgICAgLyogU3ViLXJlZ3VsYXIgc2l6ZSBj bGFzc2VzLiAqLwkJCQkJXAorICAgIFNDX05USU5ZICsgU0NfTlBTRVVETwkJCQkJCVwKKyAgICAv KiBHcm91cHMgd2l0aCBsZ19yZWd1bGFyX21pbl9iYXNlIDw9IGxnX2Jhc2UgPD0gbGdfYmFzZV9t YXggKi8JXAorICAgICsgU0NfTkdST1VQICogKExHX1BBR0UgKyBTQ19MR19OR1JPVVAgLSBTQ19M R19GSVJTVF9SRUdVTEFSX0JBU0UpCVwKKyAgICAvKiBMYXN0IFNDIG9mIHRoZSBsYXN0IGdyb3Vw IGhpdHMgdGhlIGJvdW5kIGV4YWN0bHk7IGV4Y2x1ZGUgaXQuICovCVwKKyAgICAtIDEpCisKKy8q CisgKiBUaGUgc2l6ZTJpbmRleF90YWIgbG9va3VwIHRhYmxlIHVzZXMgdWludDhfdCB0byBlbmNv ZGUgZWFjaCBiaW4gaW5kZXgsIHNvIHdlCisgKiBjYW5ub3Qgc3VwcG9ydCBtb3JlIHRoYW4gMjU2 IHNtYWxsIHNpemUgY2xhc3Nlcy4KKyAqLworI2lmIChTQ19OQklOUyA+IDI1NikKKyMgIGVycm9y ICJUb28gbWFueSBzbWFsbCBzaXplIGNsYXNzZXMiCisjZW5kaWYKKworLyogVGhlIGxhcmdlc3Qg c2l6ZSBjbGFzcyBpbiB0aGUgbG9va3VwIHRhYmxlLCBhbmQgaXRzIGJpbmFyeSBsb2cuICovCisj ZGVmaW5lIFNDX0xHX01BWF9MT09LVVAgMTIKKyNkZWZpbmUgU0NfTE9PS1VQX01BWENMQVNTICgx IDw8IFNDX0xHX01BWF9MT09LVVApCisKKy8qIEludGVybmFsLCBvbmx5IHVzZWQgZm9yIHRoZSBk ZWZpbml0aW9uIG9mIFNDX1NNQUxMX01BWENMQVNTLiAqLworI2RlZmluZSBTQ19TTUFMTF9NQVhf QkFTRSAoMSA8PCAoTEdfUEFHRSArIFNDX0xHX05HUk9VUCAtIDEpKQorI2RlZmluZSBTQ19TTUFM TF9NQVhfREVMVEEgKDEgPDwgKExHX1BBR0UgLSAxKSkKKworLyogVGhlIGxhcmdlc3Qgc2l6ZSBj bGFzcyBhbGxvY2F0ZWQgb3V0IG9mIGEgc2xhYi4gKi8KKyNkZWZpbmUgU0NfU01BTExfTUFYQ0xB U1MgKFNDX1NNQUxMX01BWF9CQVNFCQkJCVwKKyAgICArIChTQ19OR1JPVVAgLSAxKSAqIFNDX1NN QUxMX01BWF9ERUxUQSkKKworLyogVGhlIGZhc3RwYXRoIGFzc3VtZXMgYWxsIGxvb2t1cC1hYmxl IHNpemVzIGFyZSBzbWFsbC4gKi8KKyNpZiAoU0NfU01BTExfTUFYQ0xBU1MgPCBTQ19MT09LVVBf TUFYQ0xBU1MpCisjICBlcnJvciAiTG9va3VwIHRhYmxlIHNpemVzIG11c3QgYmUgc21hbGwiCisj ZW5kaWYKKworLyogVGhlIHNtYWxsZXN0IHNpemUgY2xhc3Mgbm90IGFsbG9jYXRlZCBvdXQgb2Yg YSBzbGFiLiAqLworI2RlZmluZSBTQ19MQVJHRV9NSU5DTEFTUyAoKHNpemVfdCkxVUxMIDw8IChM R19QQUdFICsgU0NfTEdfTkdST1VQKSkKKyNkZWZpbmUgU0NfTEdfTEFSR0VfTUlOQ0xBU1MgKExH X1BBR0UgKyBTQ19MR19OR1JPVVApCisKKy8qIEludGVybmFsOyBvbmx5IHVzZWQgZm9yIHRoZSBk ZWZpbml0aW9uIG9mIFNDX0xBUkdFX01BWENMQVNTLiAqLworI2RlZmluZSBTQ19NQVhfQkFTRSAo KHNpemVfdCkxIDw8IChTQ19QVFJfQklUUyAtIDIpKQorI2RlZmluZSBTQ19NQVhfREVMVEEgKChz aXplX3QpMSA8PCAoU0NfUFRSX0JJVFMgLSAyIC0gU0NfTEdfTkdST1VQKSkKKworLyogVGhlIGxh cmdlc3Qgc2l6ZSBjbGFzcyBzdXBwb3J0ZWQuICovCisjZGVmaW5lIFNDX0xBUkdFX01BWENMQVNT IChTQ19NQVhfQkFTRSArIChTQ19OR1JPVVAgLSAxKSAqIFNDX01BWF9ERUxUQSkKKworLyogTWF4 aW11bSBudW1iZXIgb2YgcmVnaW9ucyBpbiBvbmUgc2xhYi4gKi8KKyNpZm5kZWYgQ09ORklHX0xH X1NMQUJfTUFYUkVHUworIyAgZGVmaW5lIFNDX0xHX1NMQUJfTUFYUkVHUyAoTEdfUEFHRSAtIFND X0xHX1RJTllfTUlOKQorI2Vsc2UKKyMgIGlmIENPTkZJR19MR19TTEFCX01BWFJFR1MgPCAoTEdf UEFHRSAtIFNDX0xHX1RJTllfTUlOKQorIyAgICBlcnJvciAiVW5zdXBwb3J0ZWQgU0NfTEdfU0xB Ql9NQVhSRUdTIgorIyAgZWxzZQorIyAgICBkZWZpbmUgU0NfTEdfU0xBQl9NQVhSRUdTIENPTkZJ R19MR19TTEFCX01BWFJFR1MKKyMgIGVuZGlmCisjZW5kaWYKKworI2RlZmluZSBTQ19TTEFCX01B WFJFR1MgKDFVIDw8IFNDX0xHX1NMQUJfTUFYUkVHUykKKwordHlwZWRlZiBzdHJ1Y3Qgc2NfcyBz Y190Oworc3RydWN0IHNjX3MgeworCS8qIFNpemUgY2xhc3MgaW5kZXgsIG9yIC0xIGlmIG5vdCBh IHZhbGlkIHNpemUgY2xhc3MuICovCisJaW50IGluZGV4OworCS8qIExnIGdyb3VwIGJhc2Ugc2l6 ZSAobm8gZGVsdGFzIGFkZGVkKS4gKi8KKwlpbnQgbGdfYmFzZTsKKwkvKiBMZyBkZWx0YSB0byBw cmV2aW91cyBzaXplIGNsYXNzLiAqLworCWludCBsZ19kZWx0YTsKKwkvKiBEZWx0YSBtdWx0aXBs aWVyLiAgc2l6ZSA9PSAxPDxsZ19iYXNlICsgbmRlbHRhPDxsZ19kZWx0YSAqLworCWludCBuZGVs dGE7CisJLyoKKwkgKiBUcnVlIGlmIHRoZSBzaXplIGNsYXNzIGlzIGEgbXVsdGlwbGUgb2YgdGhl IHBhZ2Ugc2l6ZSwgZmFsc2UKKwkgKiBvdGhlcndpc2UuCisJICovCisJYm9vbCBwc3o7CisJLyoK KwkgKiBUcnVlIGlmIHRoZSBzaXplIGNsYXNzIGlzIGEgc21hbGwsIGJpbiwgc2l6ZSBjbGFzcy4g RmFsc2Ugb3RoZXJ3aXNlLgorCSAqLworCWJvb2wgYmluOworCS8qIFRoZSBzbGFiIHBhZ2UgY291 bnQgaWYgYSBzbWFsbCBiaW4gc2l6ZSBjbGFzcywgMCBvdGhlcndpc2UuICovCisJaW50IHBnczsK KwkvKiBTYW1lIGFzIGxnX2RlbHRhIGlmIGEgbG9va3VwIHRhYmxlIHNpemUgY2xhc3MsIDAgb3Ro ZXJ3aXNlLiAqLworCWludCBsZ19kZWx0YV9sb29rdXA7Cit9OworCit0eXBlZGVmIHN0cnVjdCBz Y19kYXRhX3Mgc2NfZGF0YV90Oworc3RydWN0IHNjX2RhdGFfcyB7CisJLyogTnVtYmVyIG9mIHRp bnkgc2l6ZSBjbGFzc2VzLiAqLworCXVuc2lnbmVkIG50aW55OworCS8qIE51bWJlciBvZiBiaW5z IHN1cHBvcnRlZCBieSB0aGUgbG9va3VwIHRhYmxlLiAqLworCWludCBubGJpbnM7CisJLyogTnVt YmVyIG9mIHNtYWxsIHNpemUgY2xhc3MgYmlucy4gKi8KKwlpbnQgbmJpbnM7CisJLyogTnVtYmVy IG9mIHNpemUgY2xhc3Nlcy4gKi8KKwlpbnQgbnNpemVzOworCS8qIE51bWJlciBvZiBiaXRzIHJl cXVpcmVkIHRvIHN0b3JlIE5TSVpFUy4gKi8KKwlpbnQgbGdfY2VpbF9uc2l6ZXM7CisJLyogTnVt YmVyIG9mIHNpemUgY2xhc3NlcyB0aGF0IGFyZSBhIG11bHRpcGxlIG9mICgxVSA8PCBMR19QQUdF KS4gKi8KKwl1bnNpZ25lZCBucHNpemVzOworCS8qIExnIG9mIG1heGltdW0gdGlueSBzaXplIGNs YXNzIChvciAtMSwgaWYgbm9uZSkuICovCisJaW50IGxnX3RpbnlfbWF4Y2xhc3M7CisJLyogTWF4 aW11bSBzaXplIGNsYXNzIGluY2x1ZGVkIGluIGxvb2t1cCB0YWJsZS4gKi8KKwlzaXplX3QgbG9v a3VwX21heGNsYXNzOworCS8qIE1heGltdW0gc21hbGwgc2l6ZSBjbGFzcy4gKi8KKwlzaXplX3Qg c21hbGxfbWF4Y2xhc3M7CisJLyogTGcgb2YgbWluaW11bSBsYXJnZSBzaXplIGNsYXNzLiAqLwor CWludCBsZ19sYXJnZV9taW5jbGFzczsKKwkvKiBUaGUgbWluaW11bSBsYXJnZSBzaXplIGNsYXNz LiAqLworCXNpemVfdCBsYXJnZV9taW5jbGFzczsKKwkvKiBNYXhpbXVtIChsYXJnZSkgc2l6ZSBj bGFzcy4gKi8KKwlzaXplX3QgbGFyZ2VfbWF4Y2xhc3M7CisJLyogVHJ1ZSBpZiB0aGUgc2NfZGF0 YV90IGhhcyBiZWVuIGluaXRpYWxpemVkIChmb3IgZGVidWdnaW5nIG9ubHkpLiAqLworCWJvb2wg aW5pdGlhbGl6ZWQ7CisKKwlzY190IHNjW1NDX05TSVpFU107Cit9OworCitzaXplX3QgcmVnX3Np emVfY29tcHV0ZShpbnQgbGdfYmFzZSwgaW50IGxnX2RlbHRhLCBpbnQgbmRlbHRhKTsKK3ZvaWQg c2NfZGF0YV9pbml0KHNjX2RhdGFfdCAqZGF0YSk7CisvKgorICogVXBkYXRlcyBzbGFiIHNpemVz IGluIFtiZWdpbiwgZW5kXSB0byBiZSBwZ3MgcGFnZXMgaW4gbGVuZ3RoLCBpZiBwb3NzaWJsZS4K KyAqIE90aGVyd2lzZSwgZG9lcyBpdHMgYmVzdCB0byBhY2NvbW1vZGF0ZSB0aGUgcmVxdWVzdC4K KyAqLwordm9pZCBzY19kYXRhX3VwZGF0ZV9zbGFiX3NpemUoc2NfZGF0YV90ICpkYXRhLCBzaXpl X3QgYmVnaW4sIHNpemVfdCBlbmQsCisgICAgaW50IHBncyk7Cit2b2lkIHNjX2Jvb3Qoc2NfZGF0 YV90ICpkYXRhKTsKKworI2VuZGlmIC8qIEpFTUFMTE9DX0lOVEVSTkFMX1NDX0ggKi8KCmRpZmYg LS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2pl bWFsbG9jL2ludGVybmFsL3NlYy5oIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2Mt NS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9zZWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwLi5mYTg2MzM4Ci0tLSAvZGV2L251bGwKKysrIGIvMzg5LWRzLWJhc2Ut My4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9zZWMu aApAQCAtMCwwICsxLDEyMCBAQAorI2lmbmRlZiBKRU1BTExPQ19JTlRFUk5BTF9TRUNfSAorI2Rl ZmluZSBKRU1BTExPQ19JTlRFUk5BTF9TRUNfSAorCisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJu YWwvYXRvbWljLmgiCisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvcGFpLmgiCisKKy8qCisg KiBTbWFsbCBleHRlbnQgY2FjaGUuCisgKgorICogVGhpcyBpbmNsdWRlcyBzb21lIHV0aWxpdGll cyB0byBjYWNoZSBzbWFsbCBleHRlbnRzLiAgV2UgaGF2ZSBhIHBlci1wc3ppbmQKKyAqIGJpbiB3 aXRoIGl0cyBvd24gbGlzdCBvZiBleHRlbnRzIG9mIHRoYXQgc2l6ZS4gIFdlIGRvbid0IHRyeSB0 byBkbyBhbnkKKyAqIGNvYWxlc2Npbmcgb2YgZXh0ZW50cyAoc2luY2UgaXQgd291bGQgaW4gZ2Vu ZXJhbCByZXF1aXJlIGNyb3NzLXNoYXJkIGxvY2tzIG9yCisgKiBrbm93bGVkZ2Ugb2YgdGhlIHVu ZGVybHlpbmcgUEFJIGltcGxlbWVudGF0aW9uKS4KKyAqLworCisvKgorICogRm9yIG5vdywgdGhp cyBpcyBqdXN0IG9uZSBmaWVsZDsgZXZlbnR1YWxseSwgd2UnbGwgcHJvYmFibHkgd2FudCB0byBn ZXQgbW9yZQorICogZmluZS1ncmFpbmVkIGRhdGEgb3V0IChsaWtlIHBlci1zaXplIGNsYXNzIHN0 YXRpc3RpY3MpLgorICovCit0eXBlZGVmIHN0cnVjdCBzZWNfc3RhdHNfcyBzZWNfc3RhdHNfdDsK K3N0cnVjdCBzZWNfc3RhdHNfcyB7CisJLyogU3VtIG9mIGJ5dGVzX2N1ciBhY3Jvc3MgYWxsIHNo YXJkcy4gKi8KKwlzaXplX3QgYnl0ZXM7Cit9OworCitzdGF0aWMgaW5saW5lIHZvaWQKK3NlY19z dGF0c19hY2N1bShzZWNfc3RhdHNfdCAqZHN0LCBzZWNfc3RhdHNfdCAqc3JjKSB7CisJZHN0LT5i eXRlcyArPSBzcmMtPmJ5dGVzOworfQorCisvKiBBIGNvbGxlY3Rpb25zIG9mIGZyZWUgZXh0ZW50 cywgYWxsIG9mIHRoZSBzYW1lIHNpemUuICovCit0eXBlZGVmIHN0cnVjdCBzZWNfYmluX3Mgc2Vj X2Jpbl90Oworc3RydWN0IHNlY19iaW5fcyB7CisJLyoKKwkgKiBXaGVuIHdlIGZhaWwgdG8gZnVs ZmlsbCBhbiBhbGxvY2F0aW9uLCB3ZSBkbyBhIGJhdGNoLWFsbG9jIG9uIHRoZQorCSAqIHVuZGVy bHlpbmcgYWxsb2NhdG9yIHRvIGZpbGwgZXh0cmEgaXRlbXMsIGFzIHdlbGwuICBXZSBkcm9wIHRo ZSBTRUMKKwkgKiBsb2NrIHdoaWxlIGRvaW5nIHNvLCB0byBhbGxvdyBvcGVyYXRpb25zIG9uIG90 aGVyIGJpbnMgdG8gc3VjY2VlZC4KKwkgKiBUaGF0IGludHJvZHVjZXMgdGhlIHBvc3NpYmlsaXR5 IG9mIG90aGVyIHRocmVhZHMgYWxzbyB0cnlpbmcgdG8KKwkgKiBhbGxvY2F0ZSBvdXQgb2YgdGhp cyBiaW4sIGZhaWxpbmcsIGFuZCBhbHNvIGdvaW5nIHRvIHRoZSBiYWNraW5nCisJICogYWxsb2Nh dG9yLiAgVG8gYXZvaWQgYSB0aHVuZGVyaW5nIGhlcmQgcHJvYmxlbSBpbiB3aGljaCBsb3RzIG9m CisJICogdGhyZWFkcyBkbyBiYXRjaCBhbGxvY3MgYW5kIG92ZXJmaWxsIHRoaXMgYmluIGFzIGEg cmVzdWx0LCB3ZSBvbmx5CisJICogYWxsb3cgb25lIGJhdGNoIGFsbG9jYXRpb24gYXQgYSB0aW1l IGZvciBhIGJpbi4gIFRoaXMgYm9vbCB0cmFja3MKKwkgKiB3aGV0aGVyIG9yIG5vdCBzb21lIHRo cmVhZCBpcyBhbHJlYWR5IGJhdGNoIGFsbG9jYXRpbmcuCisJICoKKwkgKiBFdmVudHVhbGx5LCB0 aGUgcmlnaHQgYW5zd2VyIG1heSBiZSBhIHNtYXJ0ZXIgc2hhcmRpbmcgcG9saWN5IGZvciB0aGUK KwkgKiBiaW5zIChlLmcuIGEgbXV0ZXggcGVyIGJpbiwgd2hpY2ggd291bGQgYWxzbyBiZSBtb3Jl IHNjYWxhYmxlCisJICogZ2VuZXJhbGx5OyB0aGUgYmF0Y2gtYWxsb2NhdGluZyB0aHJlYWQgY291 bGQgaG9sZCBpdCB3aGlsZQorCSAqIGJhdGNoLWFsbG9jYXRpbmcpLgorCSAqLworCWJvb2wgYmVp bmdfYmF0Y2hfZmlsbGVkOworCisJLyoKKwkgKiBOdW1iZXIgb2YgYnl0ZXMgaW4gdGhpcyBwYXJ0 aWN1bGFyIGJpbiAoYXMgb3Bwb3NlZCB0byB0aGUKKwkgKiBzZWNfc2hhcmRfdCdzIGJ5dGVzX2N1 ci4gIFRoaXMgaXNuJ3QgdXNlciB2aXNpYmxlIG9yIHJlcG9ydGVkIGluCisJICogc3RhdHM7IHJh dGhlciwgaXQgYWxsb3dzIHVzIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHRoZSBjaGFuZ2UgaW4gdGhl CisJICogY2VudHJhbGl6ZWQgY291bnRlciB3aGVuIGZsdXNoaW5nLgorCSAqLworCXNpemVfdCBi eXRlc19jdXI7CisJZWRhdGFfbGlzdF9hY3RpdmVfdCBmcmVlbGlzdDsKK307CisKK3R5cGVkZWYg c3RydWN0IHNlY19zaGFyZF9zIHNlY19zaGFyZF90Oworc3RydWN0IHNlY19zaGFyZF9zIHsKKwkv KgorCSAqIFdlIGRvbid0IGtlZXAgcGVyLWJpbiBtdXRleGVzLCBldmVuIHRob3VnaCB0aGF0IHdv dWxkIGFsbG93IG1vcmUKKwkgKiBzaGFyZGluZzsgdGhpcyBhbGxvd3MgZ2xvYmFsIGNhY2hlLWV2 aWN0aW9uLCB3aGljaCBpbiB0dXJuIGFsbG93cyBmb3IKKwkgKiBiZXR0ZXIgYmFsYW5jaW5nIGFj cm9zcyBmcmVlIGxpc3RzLgorCSAqLworCW1hbGxvY19tdXRleF90IG10eDsKKwkvKgorCSAqIEEg U0VDIG1heSBuZWVkIHRvIGJlIHNodXQgZG93biAoaS5lLiBmbHVzaGVkIG9mIGl0cyBjb250ZW50 cyBhbmQKKwkgKiBwcmV2ZW50ZWQgZnJvbSBmdXJ0aGVyIGNhY2hpbmcpLiAgVG8gYXZvaWQgdHJp Y2t5IHN5bmNocm9uaXphdGlvbgorCSAqIGlzc3Vlcywgd2UganVzdCB0cmFjayBlbmFibGVkLXN0 YXR1cyBpbiBlYWNoIHNoYXJkLCBndWFyZGVkIGJ5IGEKKwkgKiBtdXRleC4gIEluIHByYWN0aWNl LCB0aGlzIGlzIG9ubHkgZXZlciBjaGVja2VkIGR1cmluZyBicmllZiByYWNlcywKKwkgKiBzaW5j ZSB0aGUgYXJlbmEtbGV2ZWwgYXRvbWljIGJvb2xlYW4gdHJhY2tpbmcgSFBBIGVuYWJsZWQtbmVz cyBtZWFucworCSAqIHRoYXQgd2Ugd29uJ3QgZ28gZG93biB0aGVzZSBwYXRod2F5cyB2ZXJ5IG9m dGVuIGFmdGVyIGN1c3RvbSBleHRlbnQKKwkgKiBob29rcyBhcmUgaW5zdGFsbGVkLgorCSAqLwor CWJvb2wgZW5hYmxlZDsKKwlzZWNfYmluX3QgKmJpbnM7CisJLyogTnVtYmVyIG9mIGJ5dGVzIGlu IGFsbCBiaW5zIGluIHRoZSBzaGFyZC4gKi8KKwlzaXplX3QgYnl0ZXNfY3VyOworCS8qIFRoZSBu ZXh0IHBzemluZCB0byBmbHVzaCBpbiB0aGUgZmx1c2gtc29tZSBwYXRod2F5cy4gKi8KKwlwc3pp bmRfdCB0b19mbHVzaF9uZXh0OworfTsKKwordHlwZWRlZiBzdHJ1Y3Qgc2VjX3Mgc2VjX3Q7Citz dHJ1Y3Qgc2VjX3MgeworCXBhaV90IHBhaTsKKwlwYWlfdCAqZmFsbGJhY2s7CisKKwlzZWNfb3B0 c190IG9wdHM7CisJc2VjX3NoYXJkX3QgKnNoYXJkczsKKwlwc3ppbmRfdCBucHNpemVzOworfTsK KworYm9vbCBzZWNfaW5pdCh0c2RuX3QgKnRzZG4sIHNlY190ICpzZWMsIGJhc2VfdCAqYmFzZSwg cGFpX3QgKmZhbGxiYWNrLAorICAgIGNvbnN0IHNlY19vcHRzX3QgKm9wdHMpOwordm9pZCBzZWNf Zmx1c2godHNkbl90ICp0c2RuLCBzZWNfdCAqc2VjKTsKK3ZvaWQgc2VjX2Rpc2FibGUodHNkbl90 ICp0c2RuLCBzZWNfdCAqc2VjKTsKKworLyoKKyAqIE1vcmFsbHksIHRoZXNlIHR3byBzdGF0cyBt ZXRob2RzIHByb2JhYmx5IG91Z2h0IHRvIGJlIGEgc2luZ2xlIG9uZSAoYW5kIHRoZQorICogbXV0 ZXhfcHJvZl9kYXRhIG91Z2h0IHRvIGxpdmUgaW4gdGhlIHNlY19zdGF0c190LiAgQnV0IHNwbGl0 dGluZyB0aGVtIGFwYXJ0CisgKiBsZXRzIHRoZW0gZml0IGVhc2lseSBpbnRvIHRoZSBwYV9zaGFy ZCBzdGF0cyBmcmFtZXdvcmsgKHdoaWNoIGFsc28gaGFzIHRoaXMKKyAqIHNwbGl0KSwgd2hpY2gg c2ltcGxpZmllcyB0aGUgc3RhdHMgbWFuYWdlbWVudC4KKyAqLwordm9pZCBzZWNfc3RhdHNfbWVy Z2UodHNkbl90ICp0c2RuLCBzZWNfdCAqc2VjLCBzZWNfc3RhdHNfdCAqc3RhdHMpOwordm9pZCBz ZWNfbXV0ZXhfc3RhdHNfcmVhZCh0c2RuX3QgKnRzZG4sIHNlY190ICpzZWMsCisgICAgbXV0ZXhf cHJvZl9kYXRhX3QgKm11dGV4X3Byb2ZfZGF0YSk7CisKKy8qCisgKiBXZSB1c2UgdGhlIGFyZW5h IGxvY2sgb3JkZXJpbmc7IHRoZXNlIGFyZSBhY3F1aXJlZCBpbiBwaGFzZSAyIG9mIGZvcmtpbmcs IGJ1dAorICogc2hvdWxkIGJlIGFjcXVpcmVkIGJlZm9yZSB0aGUgdW5kZXJseWluZyBhbGxvY2F0 b3IgbXV0ZXhlcy4KKyAqLwordm9pZCBzZWNfcHJlZm9yazIodHNkbl90ICp0c2RuLCBzZWNfdCAq c2VjKTsKK3ZvaWQgc2VjX3Bvc3Rmb3JrX3BhcmVudCh0c2RuX3QgKnRzZG4sIHNlY190ICpzZWMp Owordm9pZCBzZWNfcG9zdGZvcmtfY2hpbGQodHNkbl90ICp0c2RuLCBzZWNfdCAqc2VjKTsKKwor I2VuZGlmIC8qIEpFTUFMTE9DX0lOVEVSTkFMX1NFQ19IICovCgpkaWZmIC0tZ2l0IGEvMzg5LWRz LWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5h bC9zZWNfb3B0cy5oIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5j bHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9zZWNfb3B0cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAuLmEzYWQ3MmYKLS0tIC9kZXYvbnVsbAorKysgYi8zODktZHMtYmFzZS0zLjMu MC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL3NlY19vcHRz LmgKQEAgLTAsMCArMSw1OSBAQAorI2lmbmRlZiBKRU1BTExPQ19JTlRFUk5BTF9TRUNfT1BUU19I CisjZGVmaW5lIEpFTUFMTE9DX0lOVEVSTkFMX1NFQ19PUFRTX0gKKworLyoKKyAqIFRoZSBjb25m aWd1cmF0aW9uIHNldHRpbmdzIHVzZWQgYnkgYW4gc2VjX3QuICBNb3JhbGx5LCB0aGlzIGlzIHBh cnQgb2YgdGhlCisgKiBTRUMgaW50ZXJmYWNlLCBidXQgd2UgcHV0IGl0IGhlcmUgZm9yIGhlYWRl ci1vcmRlcmluZyByZWFzb25zLgorICovCisKK3R5cGVkZWYgc3RydWN0IHNlY19vcHRzX3Mgc2Vj X29wdHNfdDsKK3N0cnVjdCBzZWNfb3B0c19zIHsKKwkvKgorCSAqIFdlIGRvbid0IG5lY2Vzc2Fy aWx5IGFsd2F5cyB1c2UgYWxsIHRoZSBzaGFyZHM7IHJlcXVlc3RzIGFyZQorCSAqIGRpc3RyaWJ1 dGVkIGFjcm9zcyBzaGFyZHMgWzAsIG5zaGFyZHMgLSAxKS4KKwkgKi8KKwlzaXplX3QgbnNoYXJk czsKKwkvKgorCSAqIFdlJ2xsIGF1dG9tYXRpY2FsbHkgcmVmdXNlIHRvIGNhY2hlIGFueSBvYmpl Y3RzIGluIHRoaXMgc2VjIGlmCisJICogdGhleSdyZSBsYXJnZXIgdGhhbiBtYXhfYWxsb2MgYnl0 ZXMsIGluc3RlYWQgZm9yd2FyZGluZyBzdWNoIG9iamVjdHMKKwkgKiBkaXJlY3RseSB0byB0aGUg ZmFsbGJhY2suCisJICovCisJc2l6ZV90IG1heF9hbGxvYzsKKwkvKgorCSAqIEV4Y2VlZGluZyB0 aGlzIGFtb3VudCBvZiBjYWNoZWQgZXh0ZW50cyBpbiBhIHNoYXJkIGNhdXNlcyB1cyB0byBzdGFy dAorCSAqIGZsdXNoaW5nIGJpbnMgaW4gdGhhdCBzaGFyZCB1bnRpbCB3ZSBmYWxsIGJlbG93IGJ5 dGVzX2FmdGVyX2ZsdXNoLgorCSAqLworCXNpemVfdCBtYXhfYnl0ZXM7CisJLyoKKwkgKiBUaGUg bnVtYmVyIG9mIGJ5dGVzIChpbiBhbGwgYmlucykgd2UgZmx1c2ggZG93biB0byB3aGVuIHdlIGV4 Y2VlZAorCSAqIGJ5dGVzX2N1ci4gIFdlIHdhbnQgdGhpcyB0byBiZSBsZXNzIHRoYW4gYnl0ZXNf Y3VyLCBiZWNhdXNlCisJICogb3RoZXJ3aXNlIHdlIGNvdWxkIGdldCBpbnRvIHNpdHVhdGlvbnMg d2hlcmUgYSBzaGFyZCB1bmRlcmdvaW5nCisJICogbmV0LWRlYWxsb2NhdGlvbiBrZWVwcyBieXRl c19jdXIgdmVyeSBuZWFyIHRvIG1heF9ieXRlcywgc28gdGhhdAorCSAqIG1vc3QgZGVhbGxvY2F0 aW9ucyBnZXQgaW1tZWRpYXRlbHkgZm9yd2FyZGVkIHRvIHRoZSB1bmRlcmx5aW5nIFBBSQorCSAq IGltcGxlbWVudGF0aW9uLCBkZWZlYXRpbmcgdGhlIHBvaW50IG9mIHRoZSBTRUMuCisJICovCisJ c2l6ZV90IGJ5dGVzX2FmdGVyX2ZsdXNoOworCS8qCisJICogV2hlbiB3ZSBjYW4ndCBzYXRpc2Z5 IGFuIGFsbG9jYXRpb24gb3V0IG9mIHRoZSBTRUMgYmVjYXVzZSB0aGVyZSBhcmUKKwkgKiBubyBh dmFpbGFibGUgb25lcyBjYWNoZWQsIHdlIGFsbG9jYXRlIG11bHRpcGxlIG9mIHRoYXQgc2l6ZSBv dXQgb2YKKwkgKiB0aGUgZmFsbGJhY2sgYWxsb2NhdG9yLiAgRXZlbnR1YWxseSB3ZSBtaWdodCB3 YW50IHRvIGRvIHNvbWV0aGluZworCSAqIGNsZXZlcmVyLCBidXQgZm9yIG5vdyB3ZSBqdXN0IGdy YWIgYSBmaXhlZCBudW1iZXIuCisJICovCisJc2l6ZV90IGJhdGNoX2ZpbGxfZXh0cmE7Cit9Owor CisjZGVmaW5lIFNFQ19PUFRTX0RFRkFVTFQgewkJCQkJCVwKKwkvKiBuc2hhcmRzICovCQkJCQkJ CVwKKwk0LAkJCQkJCQkJXAorCS8qIG1heF9hbGxvYyAqLwkJCQkJCQlcCisJKDMyICogMTAyNCkg PCBQQUdFID8gUEFHRSA6ICgzMiAqIDEwMjQpLAkJCVwKKwkvKiBtYXhfYnl0ZXMgKi8JCQkJCQkJ XAorCTI1NiAqIDEwMjQsCQkJCQkJCVwKKwkvKiBieXRlc19hZnRlcl9mbHVzaCAqLwkJCQkJCVwK KwkxMjggKiAxMDI0LAkJCQkJCQlcCisJLyogYmF0Y2hfZmlsbF9leHRyYSAqLwkJCQkJCVwKKwkw CQkJCQkJCQlcCit9CisKKworI2VuZGlmIC8qIEpFTUFMTE9DX0lOVEVSTkFMX1NFQ19PUFRTX0gg Ki8KCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9p bmNsdWRlL2plbWFsbG9jL2ludGVybmFsL3NlcS5oIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQv amVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9zZXEuaApuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjJkZjRjCi0tLSAvZGV2L251bGwKKysrIGIvMzg5 LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRl cm5hbC9zZXEuaApAQCAtMCwwICsxLDU1IEBACisjaWZuZGVmIEpFTUFMTE9DX0lOVEVSTkFMX1NF UV9ICisjZGVmaW5lIEpFTUFMTE9DX0lOVEVSTkFMX1NFUV9ICisKKyNpbmNsdWRlICJqZW1hbGxv Yy9pbnRlcm5hbC9hdG9taWMuaCIKKworLyoKKyAqIEEgc2ltcGxlIHNlcWxvY2sgaW1wbGVtZW50 YXRpb24uCisgKi8KKworI2RlZmluZSBzZXFfZGVmaW5lKHR5cGUsIHNob3J0X3R5cGUpCQkJCQlc Cit0eXBlZGVmIHN0cnVjdCB7CQkJCQkJCVwKKwlhdG9taWNfenVfdCBzZXE7CQkJCQkJXAorCWF0 b21pY196dV90IGRhdGFbCQkJCQkJXAorCSAgICAoc2l6ZW9mKHR5cGUpICsgc2l6ZW9mKHNpemVf dCkgLSAxKSAvIHNpemVvZihzaXplX3QpXTsJXAorfSBzZXFfIyNzaG9ydF90eXBlIyNfdDsJCQkJ CQkJXAorCQkJCQkJCQkJXAorLyoJCQkJCQkJCQlcCisgKiBObyBpbnRlcm5hbCBzeW5jaHJvbml6 YXRpb24gLS0gdGhlIGNhbGxlciBtdXN0IGVuc3VyZSB0aGF0IHRoZXJlJ3MJXAorICogb25seSBh IHNpbmdsZSB3cml0ZXIgYXQgYSB0aW1lLgkJCQkJXAorICovCQkJCQkJCQkJXAorc3RhdGljIGlu bGluZSB2b2lkCQkJCQkJCVwKK3NlcV9zdG9yZV8jI3Nob3J0X3R5cGUoc2VxXyMjc2hvcnRfdHlw ZSMjX3QgKmRzdCwgdHlwZSAqc3JjKSB7CQlcCisJc2l6ZV90IGJ1ZltzaXplb2YoZHN0LT5kYXRh KSAvIHNpemVvZihzaXplX3QpXTsJCQlcCisJYnVmW3NpemVvZihidWYpIC8gc2l6ZW9mKHNpemVf dCkgLSAxXSA9IDA7CQkJXAorCW1lbWNweShidWYsIHNyYywgc2l6ZW9mKHR5cGUpKTsJCQkJCVwK KwlzaXplX3Qgb2xkX3NlcSA9IGF0b21pY19sb2FkX3p1KCZkc3QtPnNlcSwgQVRPTUlDX1JFTEFY RUQpOwlcCisJYXRvbWljX3N0b3JlX3p1KCZkc3QtPnNlcSwgb2xkX3NlcSArIDEsIEFUT01JQ19S RUxBWEVEKTsJXAorCWF0b21pY19mZW5jZShBVE9NSUNfUkVMRUFTRSk7CQkJCQlcCisJZm9yIChz aXplX3QgaSA9IDA7IGkgPCBzaXplb2YoYnVmKSAvIHNpemVvZihzaXplX3QpOyBpKyspIHsJXAor CQlhdG9taWNfc3RvcmVfenUoJmRzdC0+ZGF0YVtpXSwgYnVmW2ldLCBBVE9NSUNfUkVMQVhFRCk7 CVwKKwl9CQkJCQkJCQlcCisJYXRvbWljX3N0b3JlX3p1KCZkc3QtPnNlcSwgb2xkX3NlcSArIDIs IEFUT01JQ19SRUxFQVNFKTsJXAorfQkJCQkJCQkJCVwKKwkJCQkJCQkJCVwKKy8qIFJldHVybnMg d2hldGhlciBvciBub3QgdGhlIHJlYWQgd2FzIGNvbnNpc3RlbnQuICovCQkJXAorc3RhdGljIGlu bGluZSBib29sCQkJCQkJCVwKK3NlcV90cnlfbG9hZF8jI3Nob3J0X3R5cGUodHlwZSAqZHN0LCBz ZXFfIyNzaG9ydF90eXBlIyNfdCAqc3JjKSB7CVwKKwlzaXplX3QgYnVmW3NpemVvZihzcmMtPmRh dGEpIC8gc2l6ZW9mKHNpemVfdCldOwkJCVwKKwlzaXplX3Qgc2VxMSA9IGF0b21pY19sb2FkX3p1 KCZzcmMtPnNlcSwgQVRPTUlDX0FDUVVJUkUpOwlcCisJaWYgKHNlcTEgJSAyICE9IDApIHsJCQkJ CQlcCisJCXJldHVybiBmYWxzZTsJCQkJCQlcCisJfQkJCQkJCQkJXAorCWZvciAoc2l6ZV90IGkg PSAwOyBpIDwgc2l6ZW9mKGJ1ZikgLyBzaXplb2Yoc2l6ZV90KTsgaSsrKSB7CVwKKwkJYnVmW2ld ID0gYXRvbWljX2xvYWRfenUoJnNyYy0+ZGF0YVtpXSwgQVRPTUlDX1JFTEFYRUQpOwlcCisJfQkJ CQkJCQkJXAorCWF0b21pY19mZW5jZShBVE9NSUNfQUNRVUlSRSk7CQkJCQlcCisJc2l6ZV90IHNl cTIgPSBhdG9taWNfbG9hZF96dSgmc3JjLT5zZXEsIEFUT01JQ19SRUxBWEVEKTsJXAorCWlmIChz ZXExICE9IHNlcTIpIHsJCQkJCQlcCisJCXJldHVybiBmYWxzZTsJCQkJCQlcCisJfQkJCQkJCQkJ XAorCW1lbWNweShkc3QsIGJ1Ziwgc2l6ZW9mKHR5cGUpKTsJCQkJCVwKKwlyZXR1cm4gdHJ1ZTsJ CQkJCQkJXAorfQorCisjZW5kaWYgLyogSkVNQUxMT0NfSU5URVJOQUxfU0VRX0ggKi8KCmRpZmYg LS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2pl bWFsbG9jL2ludGVybmFsL3NsYWJfZGF0YS5oIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVt YWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9zbGFiX2RhdGEuaApuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODIxODYzCi0tLSAvZGV2L251bGwKKysrIGIv Mzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9p bnRlcm5hbC9zbGFiX2RhdGEuaApAQCAtMCwwICsxLDEyIEBACisjaWZuZGVmIEpFTUFMTE9DX0lO VEVSTkFMX1NMQUJfREFUQV9ICisjZGVmaW5lIEpFTUFMTE9DX0lOVEVSTkFMX1NMQUJfREFUQV9I CisKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9iaXRtYXAuaCIKKwordHlwZWRlZiBzdHJ1 Y3Qgc2xhYl9kYXRhX3Mgc2xhYl9kYXRhX3Q7CitzdHJ1Y3Qgc2xhYl9kYXRhX3MgeworCS8qIFBl ciByZWdpb24gYWxsb2NhdGVkL2RlYWxsb2NhdGVkIGJpdG1hcC4gKi8KKwliaXRtYXBfdCBiaXRt YXBbQklUTUFQX0dST1VQU19NQVhdOworfTsKKworI2VuZGlmIC8qIEpFTUFMTE9DX0lOVEVSTkFM X1NMQUJfREFUQV9IICovCgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVt YWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9zbW9vdGhzdGVwLmggYi8zODkt ZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVy bmFsL3Ntb290aHN0ZXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTE0 NDMwCi0tLSAvZGV2L251bGwKKysrIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2Mt NS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9zbW9vdGhzdGVwLmgKQEAgLTAsMCArMSwy MzIgQEAKKyNpZm5kZWYgSkVNQUxMT0NfSU5URVJOQUxfU01PT1RIU1RFUF9ICisjZGVmaW5lIEpF TUFMTE9DX0lOVEVSTkFMX1NNT09USFNURVBfSAorCisvKgorICogVGhpcyBmaWxlIHdhcyBnZW5l cmF0ZWQgYnkgdGhlIGZvbGxvd2luZyBjb21tYW5kOgorICogICBzaCBzbW9vdGhzdGVwLnNoIHNt b290aGVyIDIwMCAyNCAzIDE1CisgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisg KiBUaGlzIGhlYWRlciBkZWZpbmVzIGEgcHJlY29tcHV0ZWQgdGFibGUgYmFzZWQgb24gdGhlIHNt b290aHN0ZXAgZmFtaWx5IG9mCisgKiBzaWdtb2lkYWwgY3VydmVzIChodHRwczovL2VuLndpa2lw ZWRpYS5vcmcvd2lraS9TbW9vdGhzdGVwKSB0aGF0IGdyb3cgZnJvbSAwCisgKiB0byAxIGluIDAg PD0geCA8PSAxLiAgVGhlIHRhYmxlIGlzIHN0b3JlZCBhcyBpbnRlZ2VyIGZpeGVkIHBvaW50IHZh bHVlcyBzbworICogdGhhdCBmbG9hdGluZyBwb2ludCBtYXRoIGNhbiBiZSBhdm9pZGVkLgorICoK KyAqICAgICAgICAgICAgICAgICAgICAgIDMgICAgIDIKKyAqICAgc21vb3Roc3RlcCh4KSA9IC0y eCAgKyAzeAorICoKKyAqICAgICAgICAgICAgICAgICAgICAgICA1ICAgICAgNCAgICAgIDMKKyAq ICAgc21vb3RoZXJzdGVwKHgpID0gNnggIC0gMTV4ICArIDEweAorICoKKyAqICAgICAgICAgICAg ICAgICAgICAgICAgICA3ICAgICAgNiAgICAgIDUgICAgICA0CisgKiAgIHNtb290aGVzdHN0ZXAo eCkgPSAtMjB4ICArIDcweCAgLSA4NHggICsgMzV4CisgKi8KKworI2RlZmluZSBTTU9PVEhTVEVQ X1ZBUklBTlQJInNtb290aGVyIgorI2RlZmluZSBTTU9PVEhTVEVQX05TVEVQUwkyMDAKKyNkZWZp bmUgU01PT1RIU1RFUF9CRlAJCTI0CisjZGVmaW5lIFNNT09USFNURVAgXAorIC8qIFNURVAoc3Rl cCwgaCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCwgICAgIHkpICovIFwKKyAgICBTVEVQ KCAgIDEsIFVJTlQ2NF9DKDB4MDAwMDAwMDAwMDAwMDAxNCksIDAuMDA1LCAwLjAwMDAwMTI0MDY0 Mzc1MCkgXAorICAgIFNURVAoICAgMiwgVUlOVDY0X0MoMHgwMDAwMDAwMDAwMDAwMGE1KSwgMC4w MTAsIDAuMDAwMDA5ODUwNjAwMDAwKSBcCisgICAgU1RFUCggICAzLCBVSU5UNjRfQygweDAwMDAw MDAwMDAwMDAyMjkpLCAwLjAxNSwgMC4wMDAwMzI5OTUxODEyNTApIFwKKyAgICBTVEVQKCAgIDQs IFVJTlQ2NF9DKDB4MDAwMDAwMDAwMDAwMDUxNiksIDAuMDIwLCAwLjAwMDA3NzYxOTIwMDAwMCkg XAorICAgIFNURVAoICAgNSwgVUlOVDY0X0MoMHgwMDAwMDAwMDAwMDAwOWRjKSwgMC4wMjUsIDAu MDAwMTUwNDQ5MjE4NzUwKSBcCisgICAgU1RFUCggICA2LCBVSU5UNjRfQygweDAwMDAwMDAwMDAw MDEwZTgpLCAwLjAzMCwgMC4wMDAyNTc5OTU4MDAwMDApIFwKKyAgICBTVEVQKCAgIDcsIFVJTlQ2 NF9DKDB4MDAwMDAwMDAwMDAwMWFhNCksIDAuMDM1LCAwLjAwMDQwNjU1NTc1NjI1MCkgXAorICAg IFNURVAoICAgOCwgVUlOVDY0X0MoMHgwMDAwMDAwMDAwMDAyNzc3KSwgMC4wNDAsIDAuMDAwNjAy MjE0NDAwMDAwKSBcCisgICAgU1RFUCggICA5LCBVSU5UNjRfQygweDAwMDAwMDAwMDAwMDM3YzIp LCAwLjA0NSwgMC4wMDA4NTA4NDc3OTM3NTApIFwKKyAgICBTVEVQKCAgMTAsIFVJTlQ2NF9DKDB4 MDAwMDAwMDAwMDAwNGJlNiksIDAuMDUwLCAwLjAwMTE1ODEyNTAwMDAwMCkgXAorICAgIFNURVAo ICAxMSwgVUlOVDY0X0MoMHgwMDAwMDAwMDAwMDA2NDNjKSwgMC4wNTUsIDAuMDAxNTI5NTEwMzMx MjUwKSBcCisgICAgU1RFUCggIDEyLCBVSU5UNjRfQygweDAwMDAwMDAwMDAwMDgxMWYpLCAwLjA2 MCwgMC4wMDE5NzAyNjU2MDAwMDApIFwKKyAgICBTVEVQKCAgMTMsIFVJTlQ2NF9DKDB4MDAwMDAw MDAwMDAwYTJlMiksIDAuMDY1LCAwLjAwMjQ4NTQ1MjM2ODc1MCkgXAorICAgIFNURVAoICAxNCwg VUlOVDY0X0MoMHgwMDAwMDAwMDAwMDBjOWQ4KSwgMC4wNzAsIDAuMDAzMDc5OTM0MjAwMDAwKSBc CisgICAgU1RFUCggIDE1LCBVSU5UNjRfQygweDAwMDAwMDAwMDAwMGY2NGYpLCAwLjA3NSwgMC4w MDM3NTgzNzg5MDYyNTApIFwKKyAgICBTVEVQKCAgMTYsIFVJTlQ2NF9DKDB4MDAwMDAwMDAwMDAx Mjg5MSksIDAuMDgwLCAwLjAwNDUyNTI2MDgwMDAwMCkgXAorICAgIFNURVAoICAxNywgVUlOVDY0 X0MoMHgwMDAwMDAwMDAwMDE2MGU3KSwgMC4wODUsIDAuMDA1Mzg0ODYyOTQzNzUwKSBcCisgICAg U1RFUCggIDE4LCBVSU5UNjRfQygweDAwMDAwMDAwMDAwMTlmOTUpLCAwLjA5MCwgMC4wMDYzNDEy Nzk0MDAwMDApIFwKKyAgICBTVEVQKCAgMTksIFVJTlQ2NF9DKDB4MDAwMDAwMDAwMDAxZTRkYyks IDAuMDk1LCAwLjAwNzM5ODQxNzQ4MTI1MCkgXAorICAgIFNURVAoICAyMCwgVUlOVDY0X0MoMHgw MDAwMDAwMDAwMDIzMGZjKSwgMC4xMDAsIDAuMDA4NTYwMDAwMDAwMDAwKSBcCisgICAgU1RFUCgg IDIxLCBVSU5UNjRfQygweDAwMDAwMDAwMDAwMjg0MzApLCAwLjEwNSwgMC4wMDk4Mjk1Njc1MTg3 NTApIFwKKyAgICBTVEVQKCAgMjIsIFVJTlQ2NF9DKDB4MDAwMDAwMDAwMDAyZGViMCksIDAuMTEw LCAwLjAxMTIxMDQ4MDYwMDAwMCkgXAorICAgIFNURVAoICAyMywgVUlOVDY0X0MoMHgwMDAwMDAw MDAwMDM0MGIxKSwgMC4xMTUsIDAuMDEyNzA1OTIyMDU2MjUwKSBcCisgICAgU1RFUCggIDI0LCBV SU5UNjRfQygweDAwMDAwMDAwMDAwM2FhNjcpLCAwLjEyMCwgMC4wMTQzMTg4OTkyMDAwMDApIFwK KyAgICBTVEVQKCAgMjUsIFVJTlQ2NF9DKDB4MDAwMDAwMDAwMDA0MWMwMCksIDAuMTI1LCAwLjAx NjA1MjI0NjA5Mzc1MCkgXAorICAgIFNURVAoICAyNiwgVUlOVDY0X0MoMHgwMDAwMDAwMDAwMDQ5 NWE4KSwgMC4xMzAsIDAuMDE3OTA4NjI1ODAwMDAwKSBcCisgICAgU1RFUCggIDI3LCBVSU5UNjRf QygweDAwMDAwMDAwMDAwNTE3OGIpLCAwLjEzNSwgMC4wMTk4OTA1MzI2MzEyNTApIFwKKyAgICBT VEVQKCAgMjgsIFVJTlQ2NF9DKDB4MDAwMDAwMDAwMDA1YTFjZiksIDAuMTQwLCAwLjAyMjAwMDI5 NDQwMDAwMCkgXAorICAgIFNURVAoICAyOSwgVUlOVDY0X0MoMHgwMDAwMDAwMDAwMDYzNDk4KSwg MC4xNDUsIDAuMDI0MjQwMDc0NjY4NzUwKSBcCisgICAgU1RFUCggIDMwLCBVSU5UNjRfQygweDAw MDAwMDAwMDAwNmQwMDkpLCAwLjE1MCwgMC4wMjY2MTE4NzUwMDAwMDApIFwKKyAgICBTVEVQKCAg MzEsIFVJTlQ2NF9DKDB4MDAwMDAwMDAwMDA3NzQzZiksIDAuMTU1LCAwLjAyOTExNzUzNzIwNjI1 MCkgXAorICAgIFNURVAoICAzMiwgVUlOVDY0X0MoMHgwMDAwMDAwMDAwMDgyMTU3KSwgMC4xNjAs IDAuMDMxNzU4NzQ1NjAwMDAwKSBcCisgICAgU1RFUCggIDMzLCBVSU5UNjRfQygweDAwMDAwMDAw MDAwOGQ3NmIpLCAwLjE2NSwgMC4wMzQ1MzcwMjkyNDM3NTApIFwKKyAgICBTVEVQKCAgMzQsIFVJ TlQ2NF9DKDB4MDAwMDAwMDAwMDA5OTY5MSksIDAuMTcwLCAwLjAzNzQ1Mzc2NDIwMDAwMCkgXAor ICAgIFNURVAoICAzNSwgVUlOVDY0X0MoMHgwMDAwMDAwMDAwMGE1ZWRmKSwgMC4xNzUsIDAuMDQw NTEwMTc1NzgxMjUwKSBcCisgICAgU1RFUCggIDM2LCBVSU5UNjRfQygweDAwMDAwMDAwMDAwYjMw NjcpLCAwLjE4MCwgMC4wNDM3MDczNDA4MDAwMDApIFwKKyAgICBTVEVQKCAgMzcsIFVJTlQ2NF9D KDB4MDAwMDAwMDAwMDBjMGIzOCksIDAuMTg1LCAwLjA0NzA0NjE4OTgxODc1MCkgXAorICAgIFNU RVAoICAzOCwgVUlOVDY0X0MoMHgwMDAwMDAwMDAwMGNlZjVlKSwgMC4xOTAsIDAuMDUwNTI3NTA5 NDAwMDAwKSBcCisgICAgU1RFUCggIDM5LCBVSU5UNjRfQygweDAwMDAwMDAwMDAwZGRjZTYpLCAw LjE5NSwgMC4wNTQxNTE5NDQzNTYyNTApIFwKKyAgICBTVEVQKCAgNDAsIFVJTlQ2NF9DKDB4MDAw MDAwMDAwMDBlZDNkOCksIDAuMjAwLCAwLjA1NzkyMDAwMDAwMDAwMCkgXAorICAgIFNURVAoICA0 MSwgVUlOVDY0X0MoMHgwMDAwMDAwMDAwMGZkNDM5KSwgMC4yMDUsIDAuMDYxODMyMDQ0MzkzNzUw KSBcCisgICAgU1RFUCggIDQyLCBVSU5UNjRfQygweDAwMDAwMDAwMDAxMGRlMGUpLCAwLjIxMCwg MC4wNjU4ODgzMTA2MDAwMDApIFwKKyAgICBTVEVQKCAgNDMsIFVJTlQ2NF9DKDB4MDAwMDAwMDAw MDExZjE1OCksIDAuMjE1LCAwLjA3MDA4ODg5ODkzMTI1MCkgXAorICAgIFNURVAoICA0NCwgVUlO VDY0X0MoMHgwMDAwMDAwMDAwMTMwZTE3KSwgMC4yMjAsIDAuMDc0NDMzNzc5MjAwMDAwKSBcCisg ICAgU1RFUCggIDQ1LCBVSU5UNjRfQygweDAwMDAwMDAwMDAxNDM0NDgpLCAwLjIyNSwgMC4wNzg5 MjI3OTI5Njg3NTApIFwKKyAgICBTVEVQKCAgNDYsIFVJTlQ2NF9DKDB4MDAwMDAwMDAwMDE1NjNl NyksIDAuMjMwLCAwLjA4MzU1NTY1NTgwMDAwMCkgXAorICAgIFNURVAoICA0NywgVUlOVDY0X0Mo MHgwMDAwMDAwMDAwMTY5Y2VjKSwgMC4yMzUsIDAuMDg4MzMxOTU5NTA2MjUwKSBcCisgICAgU1RF UCggIDQ4LCBVSU5UNjRfQygweDAwMDAwMDAwMDAxN2RmNGYpLCAwLjI0MCwgMC4wOTMyNTExNzQ0 MDAwMDApIFwKKyAgICBTVEVQKCAgNDksIFVJTlQ2NF9DKDB4MDAwMDAwMDAwMDE5MmIwNCksIDAu MjQ1LCAwLjA5ODMxMjY1MTU0Mzc1MCkgXAorICAgIFNURVAoICA1MCwgVUlOVDY0X0MoMHgwMDAw MDAwMDAwMWE4MDAwKSwgMC4yNTAsIDAuMTAzNTE1NjI1MDAwMDAwKSBcCisgICAgU1RFUCggIDUx LCBVSU5UNjRfQygweDAwMDAwMDAwMDAxYmRlMzIpLCAwLjI1NSwgMC4xMDg4NTkyMTQwODEyNTAp IFwKKyAgICBTVEVQKCAgNTIsIFVJTlQ2NF9DKDB4MDAwMDAwMDAwMDFkNDU4YiksIDAuMjYwLCAw LjExNDM0MjQyNTYwMDAwMCkgXAorICAgIFNURVAoICA1MywgVUlOVDY0X0MoMHgwMDAwMDAwMDAw MWViNWY4KSwgMC4yNjUsIDAuMTE5OTY0MTU2MTE4NzUwKSBcCisgICAgU1RFUCggIDU0LCBVSU5U NjRfQygweDAwMDAwMDAwMDAyMDJmNjUpLCAwLjI3MCwgMC4xMjU3MjMxOTQyMDAwMDApIFwKKyAg ICBTVEVQKCAgNTUsIFVJTlQ2NF9DKDB4MDAwMDAwMDAwMDIxYjFiYiksIDAuMjc1LCAwLjEzMTYx ODIyMjY1NjI1MCkgXAorICAgIFNURVAoICA1NiwgVUlOVDY0X0MoMHgwMDAwMDAwMDAwMjMzY2Uz KSwgMC4yODAsIDAuMTM3NjQ3ODIwODAwMDAwKSBcCisgICAgU1RFUCggIDU3LCBVSU5UNjRfQygw eDAwMDAwMDAwMDAyNGQwYzMpLCAwLjI4NSwgMC4xNDM4MTA0NjY2OTM3NTApIFwKKyAgICBTVEVQ KCAgNTgsIFVJTlQ2NF9DKDB4MDAwMDAwMDAwMDI2NmQ0MCksIDAuMjkwLCAwLjE1MDEwNDUzOTQw MDAwMCkgXAorICAgIFNURVAoICA1OSwgVUlOVDY0X0MoMHgwMDAwMDAwMDAwMjgxMjNkKSwgMC4y OTUsIDAuMTU2NTI4MzIxMjMxMjUwKSBcCisgICAgU1RFUCggIDYwLCBVSU5UNjRfQygweDAwMDAw MDAwMDAyOWJmOWMpLCAwLjMwMCwgMC4xNjMwODAwMDAwMDAwMDApIFwKKyAgICBTVEVQKCAgNjEs IFVJTlQ2NF9DKDB4MDAwMDAwMDAwMDJiNzUzZCksIDAuMzA1LCAwLjE2OTc1NzY3MTI2ODc1MCkg XAorICAgIFNURVAoICA2MiwgVUlOVDY0X0MoMHgwMDAwMDAwMDAwMmQzMmZlKSwgMC4zMTAsIDAu MTc2NTU5MzQwNjAwMDAwKSBcCisgICAgU1RFUCggIDYzLCBVSU5UNjRfQygweDAwMDAwMDAwMDAy ZWY4YmMpLCAwLjMxNSwgMC4xODM0ODI5MjU4MDYyNTApIFwKKyAgICBTVEVQKCAgNjQsIFVJTlQ2 NF9DKDB4MDAwMDAwMDAwMDMwYzY1NCksIDAuMzIwLCAwLjE5MDUyNjI1OTIwMDAwMCkgXAorICAg IFNURVAoICA2NSwgVUlOVDY0X0MoMHgwMDAwMDAwMDAwMzI5YjlmKSwgMC4zMjUsIDAuMTk3Njg3 MDg5ODQzNzUwKSBcCisgICAgU1RFUCggIDY2LCBVSU5UNjRfQygweDAwMDAwMDAwMDAzNDc4NzUp LCAwLjMzMCwgMC4yMDQ5NjMwODU4MDAwMDApIFwKKyAgICBTVEVQKCAgNjcsIFVJTlQ2NF9DKDB4 MDAwMDAwMDAwMDM2NWNiMCksIDAuMzM1LCAwLjIxMjM1MTgzNjM4MTI1MCkgXAorICAgIFNURVAo ICA2OCwgVUlOVDY0X0MoMHgwMDAwMDAwMDAwMzg0ODI1KSwgMC4zNDAsIDAuMjE5ODUwODU0NDAw MDAwKSBcCisgICAgU1RFUCggIDY5LCBVSU5UNjRfQygweDAwMDAwMDAwMDAzYTNhYTgpLCAwLjM0 NSwgMC4yMjc0NTc1Nzg0MTg3NTApIFwKKyAgICBTVEVQKCAgNzAsIFVJTlQ2NF9DKDB4MDAwMDAw MDAwMDNjMzQwZiksIDAuMzUwLCAwLjIzNTE2OTM3NTAwMDAwMCkgXAorICAgIFNURVAoICA3MSwg VUlOVDY0X0MoMHgwMDAwMDAwMDAwM2UzNDJiKSwgMC4zNTUsIDAuMjQyOTgzNTQwOTU2MjUwKSBc CisgICAgU1RFUCggIDcyLCBVSU5UNjRfQygweDAwMDAwMDAwMDA0MDNhY2UpLCAwLjM2MCwgMC4y NTA4OTczMDU2MDAwMDApIFwKKyAgICBTVEVQKCAgNzMsIFVJTlQ2NF9DKDB4MDAwMDAwMDAwMDQy NDdjOCksIDAuMzY1LCAwLjI1ODkwNzgzMjk5Mzc1MCkgXAorICAgIFNURVAoICA3NCwgVUlOVDY0 X0MoMHgwMDAwMDAwMDAwNDQ1YWU5KSwgMC4zNzAsIDAuMjY3MDEyMjI0MjAwMDAwKSBcCisgICAg U1RFUCggIDc1LCBVSU5UNjRfQygweDAwMDAwMDAwMDA0Njc0MDApLCAwLjM3NSwgMC4yNzUyMDc1 MTk1MzEyNTApIFwKKyAgICBTVEVQKCAgNzYsIFVJTlQ2NF9DKDB4MDAwMDAwMDAwMDQ4OTJkOCks IDAuMzgwLCAwLjI4MzQ5MDcwMDgwMDAwMCkgXAorICAgIFNURVAoICA3NywgVUlOVDY0X0MoMHgw MDAwMDAwMDAwNGFiNzQwKSwgMC4zODUsIDAuMjkxODU4NjkzNTY4NzUwKSBcCisgICAgU1RFUCgg IDc4LCBVSU5UNjRfQygweDAwMDAwMDAwMDA0Y2UxMDIpLCAwLjM5MCwgMC4zMDAzMDgzNjk0MDAw MDApIFwKKyAgICBTVEVQKCAgNzksIFVJTlQ2NF9DKDB4MDAwMDAwMDAwMDRmMGZlOSksIDAuMzk1 LCAwLjMwODgzNjU0ODEwNjI1MCkgXAorICAgIFNURVAoICA4MCwgVUlOVDY0X0MoMHgwMDAwMDAw MDAwNTE0M2JmKSwgMC40MDAsIDAuMzE3NDQwMDAwMDAwMDAwKSBcCisgICAgU1RFUCggIDgxLCBV SU5UNjRfQygweDAwMDAwMDAwMDA1MzdjNGQpLCAwLjQwNSwgMC4zMjYxMTU0NDgxNDM3NTApIFwK KyAgICBTVEVQKCAgODIsIFVJTlQ2NF9DKDB4MDAwMDAwMDAwMDU1Yjk1YiksIDAuNDEwLCAwLjMz NDg1OTU3MDYwMDAwMCkgXAorICAgIFNURVAoICA4MywgVUlOVDY0X0MoMHgwMDAwMDAwMDAwNTdm YWIxKSwgMC40MTUsIDAuMzQzNjY5MDAyNjgxMjUwKSBcCisgICAgU1RFUCggIDg0LCBVSU5UNjRf QygweDAwMDAwMDAwMDA1YTQwMTUpLCAwLjQyMCwgMC4zNTI1NDAzMzkyMDAwMDApIFwKKyAgICBT VEVQKCAgODUsIFVJTlQ2NF9DKDB4MDAwMDAwMDAwMDVjODk0ZSksIDAuNDI1LCAwLjM2MTQ3MDEz NjcxODc1MCkgXAorICAgIFNURVAoICA4NiwgVUlOVDY0X0MoMHgwMDAwMDAwMDAwNWVkNjIyKSwg MC40MzAsIDAuMzcwNDU0OTE1ODAwMDAwKSBcCisgICAgU1RFUCggIDg3LCBVSU5UNjRfQygweDAw MDAwMDAwMDA2MTI2NTUpLCAwLjQzNSwgMC4zNzk0OTExNjMyNTYyNTApIFwKKyAgICBTVEVQKCAg ODgsIFVJTlQ2NF9DKDB4MDAwMDAwMDAwMDYzNzlhYyksIDAuNDQwLCAwLjM4ODU3NTMzNDQwMDAw MCkgXAorICAgIFNURVAoICA4OSwgVUlOVDY0X0MoMHgwMDAwMDAwMDAwNjVjZmViKSwgMC40NDUs IDAuMzk3NzAzODU1MjkzNzUwKSBcCisgICAgU1RFUCggIDkwLCBVSU5UNjRfQygweDAwMDAwMDAw MDA2ODI4ZDYpLCAwLjQ1MCwgMC40MDY4NzMxMjUwMDAwMDApIFwKKyAgICBTVEVQKCAgOTEsIFVJ TlQ2NF9DKDB4MDAwMDAwMDAwMDZhODQyZiksIDAuNDU1LCAwLjQxNjA3OTUxNzgzMTI1MCkgXAor ICAgIFNURVAoICA5MiwgVUlOVDY0X0MoMHgwMDAwMDAwMDAwNmNlMWJiKSwgMC40NjAsIDAuNDI1 MzE5Mzg1NjAwMDAwKSBcCisgICAgU1RFUCggIDkzLCBVSU5UNjRfQygweDAwMDAwMDAwMDA2ZjQx M2EpLCAwLjQ2NSwgMC40MzQ1ODkwNTk4Njg3NTApIFwKKyAgICBTVEVQKCAgOTQsIFVJTlQ2NF9D KDB4MDAwMDAwMDAwMDcxYTI3MCksIDAuNDcwLCAwLjQ0Mzg4NDg1NDIwMDAwMCkgXAorICAgIFNU RVAoICA5NSwgVUlOVDY0X0MoMHgwMDAwMDAwMDAwNzQwNTFkKSwgMC40NzUsIDAuNDUzMjAzMDY2 NDA2MjUwKSBcCisgICAgU1RFUCggIDk2LCBVSU5UNjRfQygweDAwMDAwMDAwMDA3NjY5MDUpLCAw LjQ4MCwgMC40NjI1Mzk5ODA4MDAwMDApIFwKKyAgICBTVEVQKCAgOTcsIFVJTlQ2NF9DKDB4MDAw MDAwMDAwMDc4Y2RlNyksIDAuNDg1LCAwLjQ3MTg5MTg3MDQ0Mzc1MCkgXAorICAgIFNURVAoICA5 OCwgVUlOVDY0X0MoMHgwMDAwMDAwMDAwN2IzMzg3KSwgMC40OTAsIDAuNDgxMjU0OTk5NDAwMDAw KSBcCisgICAgU1RFUCggIDk5LCBVSU5UNjRfQygweDAwMDAwMDAwMDA3ZDk5YTQpLCAwLjQ5NSwg MC40OTA2MjU2MjQ5ODEyNTApIFwKKyAgICBTVEVQKCAxMDAsIFVJTlQ2NF9DKDB4MDAwMDAwMDAw MDgwMDAwMCksIDAuNTAwLCAwLjUwMDAwMDAwMDAwMDAwMCkgXAorICAgIFNURVAoIDEwMSwgVUlO VDY0X0MoMHgwMDAwMDAwMDAwODI2NjViKSwgMC41MDUsIDAuNTA5Mzc0Mzc1MDE4NzUwKSBcCisg ICAgU1RFUCggMTAyLCBVSU5UNjRfQygweDAwMDAwMDAwMDA4NGNjNzgpLCAwLjUxMCwgMC41MTg3 NDUwMDA2MDAwMDApIFwKKyAgICBTVEVQKCAxMDMsIFVJTlQ2NF9DKDB4MDAwMDAwMDAwMDg3MzIx OCksIDAuNTE1LCAwLjUyODEwODEyOTU1NjI1MCkgXAorICAgIFNURVAoIDEwNCwgVUlOVDY0X0Mo MHgwMDAwMDAwMDAwODk5NmZhKSwgMC41MjAsIDAuNTM3NDYwMDE5MjAwMDAwKSBcCisgICAgU1RF UCggMTA1LCBVSU5UNjRfQygweDAwMDAwMDAwMDA4YmZhZTIpLCAwLjUyNSwgMC41NDY3OTY5MzM1 OTM3NTApIFwKKyAgICBTVEVQKCAxMDYsIFVJTlQ2NF9DKDB4MDAwMDAwMDAwMDhlNWQ4ZiksIDAu NTMwLCAwLjU1NjExNTE0NTgwMDAwMCkgXAorICAgIFNURVAoIDEwNywgVUlOVDY0X0MoMHgwMDAw MDAwMDAwOTBiZWM1KSwgMC41MzUsIDAuNTY1NDEwOTQwMTMxMjUwKSBcCisgICAgU1RFUCggMTA4 LCBVSU5UNjRfQygweDAwMDAwMDAwMDA5MzFlNDQpLCAwLjU0MCwgMC41NzQ2ODA2MTQ0MDAwMDAp IFwKKyAgICBTVEVQKCAxMDksIFVJTlQ2NF9DKDB4MDAwMDAwMDAwMDk1N2JkMCksIDAuNTQ1LCAw LjU4MzkyMDQ4MjE2ODc1MCkgXAorICAgIFNURVAoIDExMCwgVUlOVDY0X0MoMHgwMDAwMDAwMDAw OTdkNzI5KSwgMC41NTAsIDAuNTkzMTI2ODc1MDAwMDAwKSBcCisgICAgU1RFUCggMTExLCBVSU5U NjRfQygweDAwMDAwMDAwMDA5YTMwMTQpLCAwLjU1NSwgMC42MDIyOTYxNDQ3MDYyNTApIFwKKyAg ICBTVEVQKCAxMTIsIFVJTlQ2NF9DKDB4MDAwMDAwMDAwMDljODY1MyksIDAuNTYwLCAwLjYxMTQy NDY2NTYwMDAwMCkgXAorICAgIFNURVAoIDExMywgVUlOVDY0X0MoMHgwMDAwMDAwMDAwOWVkOWFh KSwgMC41NjUsIDAuNjIwNTA4ODM2NzQzNzUwKSBcCisgICAgU1RFUCggMTE0LCBVSU5UNjRfQygw eDAwMDAwMDAwMDBhMTI5ZGQpLCAwLjU3MCwgMC42Mjk1NDUwODQyMDAwMDApIFwKKyAgICBTVEVQ KCAxMTUsIFVJTlQ2NF9DKDB4MDAwMDAwMDAwMGEzNzZiMSksIDAuNTc1LCAwLjYzODUyOTg2MzI4 MTI1MCkgXAorICAgIFNURVAoIDExNiwgVUlOVDY0X0MoMHgwMDAwMDAwMDAwYTViZmVhKSwgMC41 ODAsIDAuNjQ3NDU5NjYwODAwMDAwKSBcCisgICAgU1RFUCggMTE3LCBVSU5UNjRfQygweDAwMDAw MDAwMDBhODA1NGUpLCAwLjU4NSwgMC42NTYzMzA5OTczMTg3NTApIFwKKyAgICBTVEVQKCAxMTgs IFVJTlQ2NF9DKDB4MDAwMDAwMDAwMGFhNDZhNCksIDAuNTkwLCAwLjY2NTE0MDQyOTQwMDAwMCkg XAorICAgIFNURVAoIDExOSwgVUlOVDY0X0MoMHgwMDAwMDAwMDAwYWM4M2IyKSwgMC41OTUsIDAu NjczODg0NTUxODU2MjUwKSBcCisgICAgU1RFUCggMTIwLCBVSU5UNjRfQygweDAwMDAwMDAwMDBh ZWJjNDApLCAwLjYwMCwgMC42ODI1NjAwMDAwMDAwMDApIFwKKyAgICBTVEVQKCAxMjEsIFVJTlQ2 NF9DKDB4MDAwMDAwMDAwMGIwZjAxNiksIDAuNjA1LCAwLjY5MTE2MzQ1MTg5Mzc1MCkgXAorICAg IFNURVAoIDEyMiwgVUlOVDY0X0MoMHgwMDAwMDAwMDAwYjMxZWZkKSwgMC42MTAsIDAuNjk5Njkx NjMwNjAwMDAwKSBcCisgICAgU1RFUCggMTIzLCBVSU5UNjRfQygweDAwMDAwMDAwMDBiNTQ4YmYp LCAwLjYxNSwgMC43MDgxNDEzMDY0MzEyNTApIFwKKyAgICBTVEVQKCAxMjQsIFVJTlQ2NF9DKDB4 MDAwMDAwMDAwMGI3NmQyNyksIDAuNjIwLCAwLjcxNjUwOTI5OTIwMDAwMCkgXAorICAgIFNURVAo IDEyNSwgVUlOVDY0X0MoMHgwMDAwMDAwMDAwYjk4YzAwKSwgMC42MjUsIDAuNzI0NzkyNDgwNDY4 NzUwKSBcCisgICAgU1RFUCggMTI2LCBVSU5UNjRfQygweDAwMDAwMDAwMDBiYmE1MTYpLCAwLjYz MCwgMC43MzI5ODc3NzU4MDAwMDApIFwKKyAgICBTVEVQKCAxMjcsIFVJTlQ2NF9DKDB4MDAwMDAw MDAwMGJkYjgzNyksIDAuNjM1LCAwLjc0MTA5MjE2NzAwNjI1MCkgXAorICAgIFNURVAoIDEyOCwg VUlOVDY0X0MoMHgwMDAwMDAwMDAwYmZjNTMxKSwgMC42NDAsIDAuNzQ5MTAyNjk0NDAwMDAwKSBc CisgICAgU1RFUCggMTI5LCBVSU5UNjRfQygweDAwMDAwMDAwMDBjMWNiZDQpLCAwLjY0NSwgMC43 NTcwMTY0NTkwNDM3NTApIFwKKyAgICBTVEVQKCAxMzAsIFVJTlQ2NF9DKDB4MDAwMDAwMDAwMGMz Y2JmMCksIDAuNjUwLCAwLjc2NDgzMDYyNTAwMDAwMCkgXAorICAgIFNURVAoIDEzMSwgVUlOVDY0 X0MoMHgwMDAwMDAwMDAwYzVjNTU3KSwgMC42NTUsIDAuNzcyNTQyNDIxNTgxMjUwKSBcCisgICAg U1RFUCggMTMyLCBVSU5UNjRfQygweDAwMDAwMDAwMDBjN2I3ZGEpLCAwLjY2MCwgMC43ODAxNDkx NDU2MDAwMDApIFwKKyAgICBTVEVQKCAxMzMsIFVJTlQ2NF9DKDB4MDAwMDAwMDAwMGM5YTM0Ziks IDAuNjY1LCAwLjc4NzY0ODE2MzYxODc1MCkgXAorICAgIFNURVAoIDEzNCwgVUlOVDY0X0MoMHgw MDAwMDAwMDAwY2I4NzhhKSwgMC42NzAsIDAuNzk1MDM2OTE0MjAwMDAwKSBcCisgICAgU1RFUCgg MTM1LCBVSU5UNjRfQygweDAwMDAwMDAwMDBjZDY0NjApLCAwLjY3NSwgMC44MDIzMTI5MTAxNTYy NTApIFwKKyAgICBTVEVQKCAxMzYsIFVJTlQ2NF9DKDB4MDAwMDAwMDAwMGNmMzlhYiksIDAuNjgw LCAwLjgwOTQ3Mzc0MDgwMDAwMCkgXAorICAgIFNURVAoIDEzNywgVUlOVDY0X0MoMHgwMDAwMDAw MDAwZDEwNzQzKSwgMC42ODUsIDAuODE2NTE3MDc0MTkzNzUwKSBcCisgICAgU1RFUCggMTM4LCBV SU5UNjRfQygweDAwMDAwMDAwMDBkMmNkMDEpLCAwLjY5MCwgMC44MjM0NDA2NTk0MDAwMDApIFwK KyAgICBTVEVQKCAxMzksIFVJTlQ2NF9DKDB4MDAwMDAwMDAwMGQ0OGFjMiksIDAuNjk1LCAwLjgz MDI0MjMyODczMTI1MCkgXAorICAgIFNURVAoIDE0MCwgVUlOVDY0X0MoMHgwMDAwMDAwMDAwZDY0 MDYzKSwgMC43MDAsIDAuODM2OTIwMDAwMDAwMDAwKSBcCisgICAgU1RFUCggMTQxLCBVSU5UNjRf QygweDAwMDAwMDAwMDBkN2VkYzIpLCAwLjcwNSwgMC44NDM0NzE2Nzg3Njg3NTApIFwKKyAgICBT VEVQKCAxNDIsIFVJTlQ2NF9DKDB4MDAwMDAwMDAwMGQ5OTJiZiksIDAuNzEwLCAwLjg0OTg5NTQ2 MDYwMDAwMCkgXAorICAgIFNURVAoIDE0MywgVUlOVDY0X0MoMHgwMDAwMDAwMDAwZGIyZjNjKSwg MC43MTUsIDAuODU2MTg5NTMzMzA2MjUwKSBcCisgICAgU1RFUCggMTQ0LCBVSU5UNjRfQygweDAw MDAwMDAwMDBkY2MzMWMpLCAwLjcyMCwgMC44NjIzNTIxNzkyMDAwMDApIFwKKyAgICBTVEVQKCAx NDUsIFVJTlQ2NF9DKDB4MDAwMDAwMDAwMGRlNGU0NCksIDAuNzI1LCAwLjg2ODM4MTc3NzM0Mzc1 MCkgXAorICAgIFNURVAoIDE0NiwgVUlOVDY0X0MoMHgwMDAwMDAwMDAwZGZkMDlhKSwgMC43MzAs IDAuODc0Mjc2ODA1ODAwMDAwKSBcCisgICAgU1RFUCggMTQ3LCBVSU5UNjRfQygweDAwMDAwMDAw MDBlMTRhMDcpLCAwLjczNSwgMC44ODAwMzU4NDM4ODEyNTApIFwKKyAgICBTVEVQKCAxNDgsIFVJ TlQ2NF9DKDB4MDAwMDAwMDAwMGUyYmE3NCksIDAuNzQwLCAwLjg4NTY1NzU3NDQwMDAwMCkgXAor ICAgIFNURVAoIDE0OSwgVUlOVDY0X0MoMHgwMDAwMDAwMDAwZTQyMWNkKSwgMC43NDUsIDAuODkx MTQwNzg1OTE4NzUwKSBcCisgICAgU1RFUCggMTUwLCBVSU5UNjRfQygweDAwMDAwMDAwMDBlNTgw MDApLCAwLjc1MCwgMC44OTY0ODQzNzUwMDAwMDApIFwKKyAgICBTVEVQKCAxNTEsIFVJTlQ2NF9D KDB4MDAwMDAwMDAwMGU2ZDRmYiksIDAuNzU1LCAwLjkwMTY4NzM0ODQ1NjI1MCkgXAorICAgIFNU RVAoIDE1MiwgVUlOVDY0X0MoMHgwMDAwMDAwMDAwZTgyMGIwKSwgMC43NjAsIDAuOTA2NzQ4ODI1 NjAwMDAwKSBcCisgICAgU1RFUCggMTUzLCBVSU5UNjRfQygweDAwMDAwMDAwMDBlOTYzMTMpLCAw Ljc2NSwgMC45MTE2NjgwNDA0OTM3NTApIFwKKyAgICBTVEVQKCAxNTQsIFVJTlQ2NF9DKDB4MDAw MDAwMDAwMGVhOWMxOCksIDAuNzcwLCAwLjkxNjQ0NDM0NDIwMDAwMCkgXAorICAgIFNURVAoIDE1 NSwgVUlOVDY0X0MoMHgwMDAwMDAwMDAwZWJjYmI3KSwgMC43NzUsIDAuOTIxMDc3MjA3MDMxMjUw KSBcCisgICAgU1RFUCggMTU2LCBVSU5UNjRfQygweDAwMDAwMDAwMDBlY2YxZTgpLCAwLjc4MCwg MC45MjU1NjYyMjA4MDAwMDApIFwKKyAgICBTVEVQKCAxNTcsIFVJTlQ2NF9DKDB4MDAwMDAwMDAw MGVlMGVhNyksIDAuNzg1LCAwLjkyOTkxMTEwMTA2ODc1MCkgXAorICAgIFNURVAoIDE1OCwgVUlO VDY0X0MoMHgwMDAwMDAwMDAwZWYyMWYxKSwgMC43OTAsIDAuOTM0MTExNjg5NDAwMDAwKSBcCisg ICAgU1RFUCggMTU5LCBVSU5UNjRfQygweDAwMDAwMDAwMDBmMDJiYzYpLCAwLjc5NSwgMC45Mzgx Njc5NTU2MDYyNTApIFwKKyAgICBTVEVQKCAxNjAsIFVJTlQ2NF9DKDB4MDAwMDAwMDAwMGYxMmMy NyksIDAuODAwLCAwLjk0MjA4MDAwMDAwMDAwMCkgXAorICAgIFNURVAoIDE2MSwgVUlOVDY0X0Mo MHgwMDAwMDAwMDAwZjIyMzE5KSwgMC44MDUsIDAuOTQ1ODQ4MDU1NjQzNzUwKSBcCisgICAgU1RF UCggMTYyLCBVSU5UNjRfQygweDAwMDAwMDAwMDBmMzEwYTEpLCAwLjgxMCwgMC45NDk0NzI0OTA2 MDAwMDApIFwKKyAgICBTVEVQKCAxNjMsIFVJTlQ2NF9DKDB4MDAwMDAwMDAwMGYzZjRjNyksIDAu ODE1LCAwLjk1Mjk1MzgxMDE4MTI1MCkgXAorICAgIFNURVAoIDE2NCwgVUlOVDY0X0MoMHgwMDAw MDAwMDAwZjRjZjk4KSwgMC44MjAsIDAuOTU2MjkyNjU5MjAwMDAwKSBcCisgICAgU1RFUCggMTY1 LCBVSU5UNjRfQygweDAwMDAwMDAwMDBmNWExMjApLCAwLjgyNSwgMC45NTk0ODk4MjQyMTg3NTAp IFwKKyAgICBTVEVQKCAxNjYsIFVJTlQ2NF9DKDB4MDAwMDAwMDAwMGY2Njk2ZSksIDAuODMwLCAw Ljk2MjU0NjIzNTgwMDAwMCkgXAorICAgIFNURVAoIDE2NywgVUlOVDY0X0MoMHgwMDAwMDAwMDAw ZjcyODk0KSwgMC44MzUsIDAuOTY1NDYyOTcwNzU2MjUwKSBcCisgICAgU1RFUCggMTY4LCBVSU5U NjRfQygweDAwMDAwMDAwMDBmN2RlYTgpLCAwLjg0MCwgMC45NjgyNDEyNTQ0MDAwMDApIFwKKyAg ICBTVEVQKCAxNjksIFVJTlQ2NF9DKDB4MDAwMDAwMDAwMGY4OGJjMCksIDAuODQ1LCAwLjk3MDg4 MjQ2Mjc5Mzc1MCkgXAorICAgIFNURVAoIDE3MCwgVUlOVDY0X0MoMHgwMDAwMDAwMDAwZjkyZmY2 KSwgMC44NTAsIDAuOTczMzg4MTI1MDAwMDAwKSBcCisgICAgU1RFUCggMTcxLCBVSU5UNjRfQygw eDAwMDAwMDAwMDBmOWNiNjcpLCAwLjg1NSwgMC45NzU3NTk5MjUzMzEyNTApIFwKKyAgICBTVEVQ KCAxNzIsIFVJTlQ2NF9DKDB4MDAwMDAwMDAwMGZhNWUzMCksIDAuODYwLCAwLjk3Nzk5OTcwNTYw MDAwMCkgXAorICAgIFNURVAoIDE3MywgVUlOVDY0X0MoMHgwMDAwMDAwMDAwZmFlODc0KSwgMC44 NjUsIDAuOTgwMTA5NDY3MzY4NzUwKSBcCisgICAgU1RFUCggMTc0LCBVSU5UNjRfQygweDAwMDAw MDAwMDBmYjZhNTcpLCAwLjg3MCwgMC45ODIwOTEzNzQyMDAwMDApIFwKKyAgICBTVEVQKCAxNzUs IFVJTlQ2NF9DKDB4MDAwMDAwMDAwMGZiZTQwMCksIDAuODc1LCAwLjk4Mzk0Nzc1MzkwNjI1MCkg XAorICAgIFNURVAoIDE3NiwgVUlOVDY0X0MoMHgwMDAwMDAwMDAwZmM1NTk4KSwgMC44ODAsIDAu OTg1NjgxMTAwODAwMDAwKSBcCisgICAgU1RFUCggMTc3LCBVSU5UNjRfQygweDAwMDAwMDAwMDBm Y2JmNGUpLCAwLjg4NSwgMC45ODcyOTQwNzc5NDM3NTApIFwKKyAgICBTVEVQKCAxNzgsIFVJTlQ2 NF9DKDB4MDAwMDAwMDAwMGZkMjE0ZiksIDAuODkwLCAwLjk4ODc4OTUxOTQwMDAwMCkgXAorICAg IFNURVAoIDE3OSwgVUlOVDY0X0MoMHgwMDAwMDAwMDAwZmQ3YmNmKSwgMC44OTUsIDAuOTkwMTcw NDMyNDgxMjUwKSBcCisgICAgU1RFUCggMTgwLCBVSU5UNjRfQygweDAwMDAwMDAwMDBmZGNmMDMp LCAwLjkwMCwgMC45OTE0NDAwMDAwMDAwMDApIFwKKyAgICBTVEVQKCAxODEsIFVJTlQ2NF9DKDB4 MDAwMDAwMDAwMGZlMWIyMyksIDAuOTA1LCAwLjk5MjYwMTU4MjUxODc1MCkgXAorICAgIFNURVAo IDE4MiwgVUlOVDY0X0MoMHgwMDAwMDAwMDAwZmU2MDZhKSwgMC45MTAsIDAuOTkzNjU4NzIwNjAw MDAwKSBcCisgICAgU1RFUCggMTgzLCBVSU5UNjRfQygweDAwMDAwMDAwMDBmZTlmMTgpLCAwLjkx NSwgMC45OTQ2MTUxMzcwNTYyNTApIFwKKyAgICBTVEVQKCAxODQsIFVJTlQ2NF9DKDB4MDAwMDAw MDAwMGZlZDc2ZSksIDAuOTIwLCAwLjk5NTQ3NDczOTIwMDAwMCkgXAorICAgIFNURVAoIDE4NSwg VUlOVDY0X0MoMHgwMDAwMDAwMDAwZmYwOWIwKSwgMC45MjUsIDAuOTk2MjQxNjIxMDkzNzUwKSBc CisgICAgU1RFUCggMTg2LCBVSU5UNjRfQygweDAwMDAwMDAwMDBmZjM2MjcpLCAwLjkzMCwgMC45 OTY5MjAwNjU4MDAwMDApIFwKKyAgICBTVEVQKCAxODcsIFVJTlQ2NF9DKDB4MDAwMDAwMDAwMGZm NWQxZCksIDAuOTM1LCAwLjk5NzUxNDU0NzYzMTI1MCkgXAorICAgIFNURVAoIDE4OCwgVUlOVDY0 X0MoMHgwMDAwMDAwMDAwZmY3ZWUwKSwgMC45NDAsIDAuOTk4MDI5NzM0NDAwMDAwKSBcCisgICAg U1RFUCggMTg5LCBVSU5UNjRfQygweDAwMDAwMDAwMDBmZjliYzMpLCAwLjk0NSwgMC45OTg0NzA0 ODk2Njg3NTApIFwKKyAgICBTVEVQKCAxOTAsIFVJTlQ2NF9DKDB4MDAwMDAwMDAwMGZmYjQxOSks IDAuOTUwLCAwLjk5ODg0MTg3NTAwMDAwMCkgXAorICAgIFNURVAoIDE5MSwgVUlOVDY0X0MoMHgw MDAwMDAwMDAwZmZjODNkKSwgMC45NTUsIDAuOTk5MTQ5MTUyMjA2MjUwKSBcCisgICAgU1RFUCgg MTkyLCBVSU5UNjRfQygweDAwMDAwMDAwMDBmZmQ4ODgpLCAwLjk2MCwgMC45OTkzOTc3ODU2MDAw MDApIFwKKyAgICBTVEVQKCAxOTMsIFVJTlQ2NF9DKDB4MDAwMDAwMDAwMGZmZTU1YiksIDAuOTY1 LCAwLjk5OTU5MzQ0NDI0Mzc1MCkgXAorICAgIFNURVAoIDE5NCwgVUlOVDY0X0MoMHgwMDAwMDAw MDAwZmZlZjE3KSwgMC45NzAsIDAuOTk5NzQyMDA0MjAwMDAwKSBcCisgICAgU1RFUCggMTk1LCBV SU5UNjRfQygweDAwMDAwMDAwMDBmZmY2MjMpLCAwLjk3NSwgMC45OTk4NDk1NTA3ODEyNTApIFwK KyAgICBTVEVQKCAxOTYsIFVJTlQ2NF9DKDB4MDAwMDAwMDAwMGZmZmFlOSksIDAuOTgwLCAwLjk5 OTkyMjM4MDgwMDAwMCkgXAorICAgIFNURVAoIDE5NywgVUlOVDY0X0MoMHgwMDAwMDAwMDAwZmZm ZGQ2KSwgMC45ODUsIDAuOTk5OTY3MDA0ODE4NzUwKSBcCisgICAgU1RFUCggMTk4LCBVSU5UNjRf QygweDAwMDAwMDAwMDBmZmZmNWEpLCAwLjk5MCwgMC45OTk5OTAxNDk0MDAwMDApIFwKKyAgICBT VEVQKCAxOTksIFVJTlQ2NF9DKDB4MDAwMDAwMDAwMGZmZmZlYiksIDAuOTk1LCAwLjk5OTk5ODc1 OTM1NjI1MCkgXAorICAgIFNURVAoIDIwMCwgVUlOVDY0X0MoMHgwMDAwMDAwMDAxMDAwMDAwKSwg MS4wMDAsIDEuMDAwMDAwMDAwMDAwMDAwKSBcCisKKyNlbmRpZiAvKiBKRU1BTExPQ19JTlRFUk5B TF9TTU9PVEhTVEVQX0ggKi8KCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9q ZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL3Ntb290aHN0ZXAuc2ggYi8z ODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2lu dGVybmFsL3Ntb290aHN0ZXAuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4u NjVkZTk3YgotLS0gL2Rldi9udWxsCisrKyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFs bG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvc21vb3Roc3RlcC5zaApAQCAtMCww ICsxLDEwMSBAQAorIyEvYmluL3NoCisjCisjIEdlbmVyYXRlIGEgZGlzY3JldGUgbG9va3VwIHRh YmxlIGZvciBhIHNpZ21vaWQgZnVuY3Rpb24gaW4gdGhlIHNtb290aHN0ZXAKKyMgZmFtaWx5ICho dHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TbW9vdGhzdGVwKSwgd2hlcmUgdGhlIGxvb2t1 cCB0YWJsZQorIyBlbnRyaWVzIGNvcnJlc3BvbmQgdG8geCBpbiBbMS9uc3RlcHMsIDIvbnN0ZXBz LCAuLi4sIG5zdGVwcy9uc3RlcHNdLiAgRW5jb2RlCisjIHRoZSBlbnRyaWVzIHVzaW5nIGEgYmlu YXJ5IGZpeGVkIHBvaW50IHJlcHJlc2VudGF0aW9uLgorIworIyBVc2FnZTogc21vb3Roc3RlcC5z aCA8dmFyaWFudD4gPG5zdGVwcz4gPGJmcD4gPHhwcmVjPiA8eXByZWM+CisjCisjICAgICAgICA8 dmFyaWFudD4gaXMgaW4ge3Ntb290aCwgc21vb3RoZXIsIHNtb290aGVzdH0uCisjICAgICAgICA8 bnN0ZXBzPiBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvLgorIyAgICAgICAgPGJmcD4gbXVzdCBi ZSBpbiBbMC4uNjJdOyByZWFzb25hYmxlIHZhbHVlcyBhcmUgcm91Z2hseSBbMTAuLjMwXS4KKyMg ICAgICAgIDx4cHJlYz4gaXMgeCBkZWNpbWFsIHByZWNpc2lvbi4KKyMgICAgICAgIDx5cHJlYz4g aXMgeSBkZWNpbWFsIHByZWNpc2lvbi4KKworI3NldCAteAorCitjbWQ9InNoIHNtb290aHN0ZXAu c2ggJCoiCit2YXJpYW50PSQxCituc3RlcHM9JDIKK2JmcD0kMworeHByZWM9JDQKK3lwcmVjPSQ1 CisKK2Nhc2UgIiR7dmFyaWFudH0iIGluCisgIHNtb290aCkKKyAgICA7OworICBzbW9vdGhlcikK KyAgICA7OworICBzbW9vdGhlc3QpCisgICAgOzsKKyAgKikKKyAgICBlY2hvICJVbnN1cHBvcnRl ZCB2YXJpYW50IgorICAgIGV4aXQgMQorICAgIDs7Citlc2FjCisKK3Ntb290aCgpIHsKKyAgc3Rl cD0kMQorICB5PWBlY2hvICR7eXByZWN9IGsgJHtzdGVwfSAke25zdGVwc30gLyBzeCBfMiBseCAz IF4gJyonIDMgbHggMiBeICcqJyArIHAgfCBkYyB8IHRyIC1kICdcXFxcXG4nIHwgc2VkIC1lICdz I15cLiMwLiNnJ2AKKyAgaD1gZWNobyAke3lwcmVjfSBrIDIgJHtiZnB9IF4gJHt5fSAnKicgcCB8 IGRjIHwgdHIgLWQgJ1xcXFxcbicgfCBzZWQgLWUgJ3MjXlwuIzAuI2cnIHwgdHIgJy4nICcgJyB8 IGF3ayAne3ByaW50ICQxfScgYAorfQorCitzbW9vdGhlcigpIHsKKyAgc3RlcD0kMQorICB5PWBl Y2hvICR7eXByZWN9IGsgJHtzdGVwfSAke25zdGVwc30gLyBzeCA2IGx4IDUgXiAnKicgXzE1IGx4 IDQgXiAnKicgKyAxMCBseCAzIF4gJyonICsgcCB8IGRjIHwgdHIgLWQgJ1xcXFxcbicgfCBzZWQg LWUgJ3MjXlwuIzAuI2cnYAorICBoPWBlY2hvICR7eXByZWN9IGsgMiAke2JmcH0gXiAke3l9ICcq JyBwIHwgZGMgfCB0ciAtZCAnXFxcXFxuJyB8IHNlZCAtZSAncyNeXC4jMC4jZycgfCB0ciAnLicg JyAnIHwgYXdrICd7cHJpbnQgJDF9JyBgCit9CisKK3Ntb290aGVzdCgpIHsKKyAgc3RlcD0kMQor ICB5PWBlY2hvICR7eXByZWN9IGsgJHtzdGVwfSAke25zdGVwc30gLyBzeCBfMjAgbHggNyBeICcq JyA3MCBseCA2IF4gJyonICsgXzg0IGx4IDUgXiAnKicgKyAzNSBseCA0IF4gJyonICsgcCB8IGRj IHwgdHIgLWQgJ1xcXFxcbicgfCBzZWQgLWUgJ3MjXlwuIzAuI2cnYAorICBoPWBlY2hvICR7eXBy ZWN9IGsgMiAke2JmcH0gXiAke3l9ICcqJyBwIHwgZGMgfCB0ciAtZCAnXFxcXFxuJyB8IHNlZCAt ZSAncyNeXC4jMC4jZycgfCB0ciAnLicgJyAnIHwgYXdrICd7cHJpbnQgJDF9JyBgCit9CisKK2Nh dCA8PEVPRgorI2lmbmRlZiBKRU1BTExPQ19JTlRFUk5BTF9TTU9PVEhTVEVQX0gKKyNkZWZpbmUg SkVNQUxMT0NfSU5URVJOQUxfU01PT1RIU1RFUF9ICisKKy8qCisgKiBUaGlzIGZpbGUgd2FzIGdl bmVyYXRlZCBieSB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6CisgKiAgICRjbWQKKyAqLworLyoqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKi8KKworLyoKKyAqIFRoaXMgaGVhZGVyIGRlZmluZXMgYSBwcmVjb21w dXRlZCB0YWJsZSBiYXNlZCBvbiB0aGUgc21vb3Roc3RlcCBmYW1pbHkgb2YKKyAqIHNpZ21vaWRh bCBjdXJ2ZXMgKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1Ntb290aHN0ZXApIHRoYXQg Z3JvdyBmcm9tIDAKKyAqIHRvIDEgaW4gMCA8PSB4IDw9IDEuICBUaGUgdGFibGUgaXMgc3RvcmVk IGFzIGludGVnZXIgZml4ZWQgcG9pbnQgdmFsdWVzIHNvCisgKiB0aGF0IGZsb2F0aW5nIHBvaW50 IG1hdGggY2FuIGJlIGF2b2lkZWQuCisgKgorICogICAgICAgICAgICAgICAgICAgICAgMyAgICAg MgorICogICBzbW9vdGhzdGVwKHgpID0gLTJ4ICArIDN4CisgKgorICogICAgICAgICAgICAgICAg ICAgICAgIDUgICAgICA0ICAgICAgMworICogICBzbW9vdGhlcnN0ZXAoeCkgPSA2eCAgLSAxNXgg ICsgMTB4CisgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgIDcgICAgICA2ICAgICAgNSAg ICAgIDQKKyAqICAgc21vb3RoZXN0c3RlcCh4KSA9IC0yMHggICsgNzB4ICAtIDg0eCAgKyAzNXgK KyAqLworCisjZGVmaW5lIFNNT09USFNURVBfVkFSSUFOVAkiJHt2YXJpYW50fSIKKyNkZWZpbmUg U01PT1RIU1RFUF9OU1RFUFMJJHtuc3RlcHN9CisjZGVmaW5lIFNNT09USFNURVBfQkZQCQkke2Jm cH0KKyNkZWZpbmUgU01PT1RIU1RFUCBcXAorIC8qIFNURVAoc3RlcCwgaCwgICAgICAgICAgICAg ICAgICAgICAgICAgICAgeCwgICAgIHkpICovIFxcCitFT0YKKworcz0xCit3aGlsZSBbICRzIC1s ZSAkbnN0ZXBzIF0gOyBkbworICAkdmFyaWFudCAke3N9CisgIHg9YGVjaG8gJHt4cHJlY30gayAk e3N9ICR7bnN0ZXBzfSAvIHAgfCBkYyB8IHRyIC1kICdcXFxcXG4nIHwgc2VkIC1lICdzI15cLiMw LiNnJ2AKKyAgcHJpbnRmICcgICAgU1RFUCglNGQsIFVJTlQ2NF9DKDB4JTAxNngpLCAlcywgJXMp IFxcXG4nICR7c30gJHtofSAke3h9ICR7eX0KKworICBzPSQoKHMrMSkpCitkb25lCitlY2hvCisK K2NhdCA8PEVPRgorI2VuZGlmIC8qIEpFTUFMTE9DX0lOVEVSTkFMX1NNT09USFNURVBfSCAqLwor RU9GCgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAv aW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9zcGluLmggYi8zODktZHMtYmFzZS0zLjMuMC1idWls ZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL3NwaW4uaApuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjgwNGM2Ci0tLSAvZGV2L251bGwKKysrIGIv Mzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9p bnRlcm5hbC9zcGluLmgKQEAgLTAsMCArMSw0MCBAQAorI2lmbmRlZiBKRU1BTExPQ19JTlRFUk5B TF9TUElOX0gKKyNkZWZpbmUgSkVNQUxMT0NfSU5URVJOQUxfU1BJTl9ICisKKyNkZWZpbmUgU1BJ Tl9JTklUSUFMSVpFUiB7MFV9CisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBpdGVyYXRp b247Cit9IHNwaW5fdDsKKworc3RhdGljIGlubGluZSB2b2lkCitzcGluX2NwdV9zcGlud2FpdCgp IHsKKyMgIGlmIEhBVkVfQ1BVX1NQSU5XQUlUCisJQ1BVX1NQSU5XQUlUOworIyAgZWxzZQorCXZv bGF0aWxlIGludCB4ID0gMDsKKwl4ID0geDsKKyMgIGVuZGlmCit9CisKK3N0YXRpYyBpbmxpbmUg dm9pZAorc3Bpbl9hZGFwdGl2ZShzcGluX3QgKnNwaW4pIHsKKwl2b2xhdGlsZSB1aW50MzJfdCBp OworCisJaWYgKHNwaW4tPml0ZXJhdGlvbiA8IDUpIHsKKwkJZm9yIChpID0gMDsgaSA8ICgxVSA8 PCBzcGluLT5pdGVyYXRpb24pOyBpKyspIHsKKwkJCXNwaW5fY3B1X3NwaW53YWl0KCk7CisJCX0K KwkJc3Bpbi0+aXRlcmF0aW9uKys7CisJfSBlbHNlIHsKKyNpZmRlZiBfV0lOMzIKKwkJU3dpdGNo VG9UaHJlYWQoKTsKKyNlbHNlCisJCXNjaGVkX3lpZWxkKCk7CisjZW5kaWYKKwl9Cit9CisKKyN1 bmRlZiBTUElOX0lOTElORQorCisjZW5kaWYgLyogSkVNQUxMT0NfSU5URVJOQUxfU1BJTl9IICov CgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5j bHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9zdGF0cy5oIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQv amVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9zdGF0cy5oCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyN2Y3ZGMKLS0tIC9kZXYvbnVsbAorKysgYi8z ODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2lu dGVybmFsL3N0YXRzLmgKQEAgLTAsMCArMSw1NCBAQAorI2lmbmRlZiBKRU1BTExPQ19JTlRFUk5B TF9TVEFUU19ICisjZGVmaW5lIEpFTUFMTE9DX0lOVEVSTkFMX1NUQVRTX0gKKworLyogIE9QVElP TihvcHQsCQl2YXJfbmFtZSwJZGVmYXVsdCwJc2V0X3ZhbHVlX3RvKSAqLworI2RlZmluZSBTVEFU U19QUklOVF9PUFRJT05TCQkJCQkJXAorICAgIE9QVElPTignSicsCQlqc29uLAkJZmFsc2UsCQl0 cnVlKQkJXAorICAgIE9QVElPTignZycsCQlnZW5lcmFsLAl0cnVlLAkJZmFsc2UpCQlcCisgICAg T1BUSU9OKCdtJywJCW1lcmdlZCwJCWNvbmZpZ19zdGF0cywJZmFsc2UpCQlcCisgICAgT1BUSU9O KCdkJywJCWRlc3Ryb3llZCwJY29uZmlnX3N0YXRzLAlmYWxzZSkJCVwKKyAgICBPUFRJT04oJ2En LAkJdW5tZXJnZWQsCWNvbmZpZ19zdGF0cywJZmFsc2UpCQlcCisgICAgT1BUSU9OKCdiJywJCWJp bnMsCQl0cnVlLAkJZmFsc2UpCQlcCisgICAgT1BUSU9OKCdsJywJCWxhcmdlLAkJdHJ1ZSwJCWZh bHNlKQkJXAorICAgIE9QVElPTigneCcsCQltdXRleCwJCXRydWUsCQlmYWxzZSkJCVwKKyAgICBP UFRJT04oJ2UnLAkJZXh0ZW50cywJdHJ1ZSwJCWZhbHNlKQkJXAorICAgIE9QVElPTignaCcsCQlo cGEsCQljb25maWdfc3RhdHMsCWZhbHNlKQorCitlbnVtIHsKKyNkZWZpbmUgT1BUSU9OKG8sIHYs IGQsIHMpIHN0YXRzX3ByaW50X29wdGlvbl9udW1fIyN2LAorICAgIFNUQVRTX1BSSU5UX09QVElP TlMKKyN1bmRlZiBPUFRJT04KKyAgICBzdGF0c19wcmludF90b3RfbnVtX29wdGlvbnMKK307CisK Ky8qIE9wdGlvbnMgZm9yIHN0YXRzX3ByaW50LiAqLworZXh0ZXJuIGJvb2wgb3B0X3N0YXRzX3By aW50OworZXh0ZXJuIGNoYXIgb3B0X3N0YXRzX3ByaW50X29wdHNbc3RhdHNfcHJpbnRfdG90X251 bV9vcHRpb25zKzFdOworCisvKiBVdGlsaXRpZXMgZm9yIHN0YXRzX2ludGVydmFsLiAqLworZXh0 ZXJuIGludDY0X3Qgb3B0X3N0YXRzX2ludGVydmFsOworZXh0ZXJuIGNoYXIgb3B0X3N0YXRzX2lu dGVydmFsX29wdHNbc3RhdHNfcHJpbnRfdG90X251bV9vcHRpb25zKzFdOworCisjZGVmaW5lIFNU QVRTX0lOVEVSVkFMX0RFRkFVTFQgLTEKKy8qCisgKiBCYXRjaC1pbmNyZW1lbnQgdGhlIGNvdW50 ZXIgdG8gcmVkdWNlIHN5bmNocm9uaXphdGlvbiBvdmVyaGVhZC4gIEVhY2ggdGhyZWFkCisgKiBt ZXJnZXMgYWZ0ZXIgKGludGVydmFsID4+IExHX0JBVENIX1NJWkUpIGJ5dGVzIG9mIGFsbG9jYXRp b25zOyBhbHNvIGxpbWl0IHRoZQorICogQkFUQ0hfTUFYIGZvciBhY2N1cmFjeSB3aGVuIHRoZSBp bnRlcnZhbCBpcyBodWdlICh3aGljaCBpcyBleHBlY3RlZCkuCisgKi8KKyNkZWZpbmUgU1RBVFNf SU5URVJWQUxfQUNDVU1fTEdfQkFUQ0hfU0laRSA2CisjZGVmaW5lIFNUQVRTX0lOVEVSVkFMX0FD Q1VNX0JBVENIX01BWCAoNCA8PCAyMCkKKworLyogT25seSBhY2Nlc3NlZCBieSB0aHJlYWQgZXZl bnQuICovCit1aW50NjRfdCBzdGF0c19pbnRlcnZhbF9uZXdfZXZlbnRfd2FpdCh0c2RfdCAqdHNk KTsKK3VpbnQ2NF90IHN0YXRzX2ludGVydmFsX3Bvc3Rwb25lZF9ldmVudF93YWl0KHRzZF90ICp0 c2QpOwordm9pZCBzdGF0c19pbnRlcnZhbF9ldmVudF9oYW5kbGVyKHRzZF90ICp0c2QsIHVpbnQ2 NF90IGVsYXBzZWQpOworCisvKiBJbXBsZW1lbnRzIGplX21hbGxvY19zdGF0c19wcmludC4gKi8K K3ZvaWQgc3RhdHNfcHJpbnQod3JpdGVfY2JfdCAqd3JpdGVfY2IsIHZvaWQgKmNib3BhcXVlLCBj b25zdCBjaGFyICpvcHRzKTsKKworYm9vbCBzdGF0c19ib290KHZvaWQpOwordm9pZCBzdGF0c19w cmVmb3JrKHRzZG5fdCAqdHNkbik7Cit2b2lkIHN0YXRzX3Bvc3Rmb3JrX3BhcmVudCh0c2RuX3Qg KnRzZG4pOwordm9pZCBzdGF0c19wb3N0Zm9ya19jaGlsZCh0c2RuX3QgKnRzZG4pOworCisjZW5k aWYgLyogSkVNQUxMT0NfSU5URVJOQUxfU1RBVFNfSCAqLwoKZGlmZiAtLWdpdCBhLzM4OS1kcy1i YXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwv c3ouaCBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVt YWxsb2MvaW50ZXJuYWwvc3ouaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4z YzBmYzFkCi0tLSAvZGV2L251bGwKKysrIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxs b2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9zei5oCkBAIC0wLDAgKzEsMzcxIEBA CisjaWZuZGVmIEpFTUFMTE9DX0lOVEVSTkFMX1NJWkVfSAorI2RlZmluZSBKRU1BTExPQ19JTlRF Uk5BTF9TSVpFX0gKKworI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2JpdF91dGlsLmgiCisj aW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvcGFnZXMuaCIKKyNpbmNsdWRlICJqZW1hbGxvYy9p bnRlcm5hbC9zYy5oIgorI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL3V0aWwuaCIKKworLyoK KyAqIHN6IG1vZHVsZTogU2l6ZSBjb21wdXRhdGlvbnMuCisgKgorICogU29tZSBhYmJyZXZpYXRp b25zIHVzZWQgaGVyZToKKyAqICAgcDogUGFnZQorICogICBpbmQ6IEluZGV4CisgKiAgIHMsIHN6 OiBTaXplCisgKiAgIHU6IFVzYWJsZSBzaXplCisgKiAgIGE6IEFsaWduZWQKKyAqCisgKiBUaGVz ZSBhcmUgbm90IGFsd2F5cyB1c2VkIGNvbXBsZXRlbHkgY29uc2lzdGVudGx5LCBidXQgc2hvdWxk IGJlIGVub3VnaCB0bworICogaW50ZXJwcmV0IGZ1bmN0aW9uIG5hbWVzLiAgRS5nLiBzel9wc3oy aW5kIGNvbnZlcnRzIHBhZ2Ugc2l6ZSB0byBwYWdlIHNpemUKKyAqIGluZGV4OyBzel9zYTJ1IGNv bnZlcnRzIGEgKHNpemUsIGFsaWdubWVudCkgYWxsb2NhdGlvbiByZXF1ZXN0IHRvIHRoZSB1c2Fi bGUKKyAqIHNpemUgdGhhdCB3b3VsZCByZXN1bHQgZnJvbSBzdWNoIGFuIGFsbG9jYXRpb24uCisg Ki8KKworLyogUGFnZSBzaXplIGluZGV4IHR5cGUuICovCit0eXBlZGVmIHVuc2lnbmVkIHBzemlu ZF90OworCisvKiBTaXplIGNsYXNzIGluZGV4IHR5cGUuICovCit0eXBlZGVmIHVuc2lnbmVkIHN6 aW5kX3Q7CisKKy8qCisgKiBzel9waW5kMnN6X3RhYiBlbmNvZGVzIHRoZSBzYW1lIGluZm9ybWF0 aW9uIGFzIGNvdWxkIGJlIGNvbXB1dGVkIGJ5CisgKiBzel9waW5kMnN6X2NvbXB1dGUoKS4KKyAq LworZXh0ZXJuIHNpemVfdCBzel9waW5kMnN6X3RhYltTQ19OUFNJWkVTICsgMV07CisvKgorICog c3pfaW5kZXgyc2l6ZV90YWIgZW5jb2RlcyB0aGUgc2FtZSBpbmZvcm1hdGlvbiBhcyBjb3VsZCBi ZSBjb21wdXRlZCAoYXQKKyAqIHVuYWNjZXB0YWJsZSBjb3N0IGluIHNvbWUgY29kZSBwYXRocykg Ynkgc3pfaW5kZXgyc2l6ZV9jb21wdXRlKCkuCisgKi8KK2V4dGVybiBzaXplX3Qgc3pfaW5kZXgy c2l6ZV90YWJbU0NfTlNJWkVTXTsKKy8qCisgKiBzel9zaXplMmluZGV4X3RhYiBpcyBhIGNvbXBh Y3QgbG9va3VwIHRhYmxlIHRoYXQgcm91bmRzIHJlcXVlc3Qgc2l6ZXMgdXAgdG8KKyAqIHNpemUg Y2xhc3Nlcy4gIEluIG9yZGVyIHRvIHJlZHVjZSBjYWNoZSBmb290cHJpbnQsIHRoZSB0YWJsZSBp cyBjb21wcmVzc2VkLAorICogYW5kIGFsbCBhY2Nlc3NlcyBhcmUgdmlhIHN6X3NpemUyaW5kZXgo KS4KKyAqLworZXh0ZXJuIHVpbnQ4X3Qgc3pfc2l6ZTJpbmRleF90YWJbXTsKKworLyoKKyAqIFBh ZGRpbmcgZm9yIGxhcmdlIGFsbG9jYXRpb25zOiBQQUdFIHdoZW4gb3B0X2NhY2hlX29ibGl2aW91 cyA9PSB0cnVlICh0bworICogZW5hYmxlIGNhY2hlIGluZGV4IHJhbmRvbWl6YXRpb24pOyAwIG90 aGVyd2lzZS4KKyAqLworZXh0ZXJuIHNpemVfdCBzel9sYXJnZV9wYWQ7CisKK2V4dGVybiB2b2lk IHN6X2Jvb3QoY29uc3Qgc2NfZGF0YV90ICpzY19kYXRhLCBib29sIGNhY2hlX29ibGl2aW91cyk7 CisKK0pFTUFMTE9DX0FMV0FZU19JTkxJTkUgcHN6aW5kX3QKK3N6X3BzejJpbmQoc2l6ZV90IHBz eikgeworCWFzc2VydChwc3ogPiAwKTsKKwlpZiAodW5saWtlbHkocHN6ID4gU0NfTEFSR0VfTUFY Q0xBU1MpKSB7CisJCXJldHVybiBTQ19OUFNJWkVTOworCX0KKwkvKiB4IGlzIHRoZSBsZyBvZiB0 aGUgZmlyc3QgYmFzZSA+PSBwc3ouICovCisJcHN6aW5kX3QgeCA9IGxnX2NlaWwocHN6KTsKKwkv KgorCSAqIHNjLmggaW50cm9kdWNlcyBhIGxvdCBvZiBzaXplIGNsYXNzZXMuIFRoZXNlIHNpemUg Y2xhc3NlcyBhcmUgZGl2aWRlZAorCSAqIGludG8gZGlmZmVyZW50IHNpemUgY2xhc3MgZ3JvdXBz LiBUaGVyZSBpcyBhIHZlcnkgc3BlY2lhbCBzaXplIGNsYXNzCisJICogZ3JvdXAsIGVhY2ggc2l6 ZSBjbGFzcyBpbiBvciBhZnRlciBpdCBpcyBhbiBpbnRlZ2VyIG11bHRpcGxlIG9mIFBBR0UuCisJ ICogV2UgY2FsbCBpdCBmaXJzdF9wc19yZy4gSXQgbWVhbnMgZmlyc3QgcGFnZSBzaXplIHJlZ3Vs YXIgZ3JvdXAuIFRoZQorCSAqIHJhbmdlIG9mIGZpcnN0X3BzX3JnIGlzIChiYXNlLCBiYXNlICog Ml0sIGFuZCBiYXNlID09IFBBR0UgKgorCSAqIFNDX05HUk9VUC4gb2ZmX3RvX2ZpcnN0X3BzX3Jn IGJlZ2lucyBmcm9tIDEsIGluc3RlYWQgb2YgMC4gZS5nLgorCSAqIG9mZl90b19maXJzdF9wc19y ZyBpcyAxIHdoZW4gcHN6IGlzIChQQUdFICogU0NfTkdST1VQICsgMSkuCisJICovCisJcHN6aW5k X3Qgb2ZmX3RvX2ZpcnN0X3BzX3JnID0gKHggPCBTQ19MR19OR1JPVVAgKyBMR19QQUdFKSA/CisJ ICAgIDAgOiB4IC0gKFNDX0xHX05HUk9VUCArIExHX1BBR0UpOworCisJLyoKKwkgKiBTYW1lIGFz IHNjX3M6OmxnX2RlbHRhLgorCSAqIERlbHRhIGZvciBvZmZfdG9fZmlyc3RfcHNfcmcgPT0gMSBp cyBQQUdFLAorCSAqIGZvciBlYWNoIGluY3JlYXNlIGluIG9mZnNldCwgaXQncyBtdWx0aXBsaWVk IGJ5IHR3by4KKwkgKiBUaGVyZWZvcmUsIGxnX2RlbHRhID0gTEdfUEFHRSArIChvZmZfdG9fZmly c3RfcHNfcmcgLSAxKS4KKwkgKi8KKwlwc3ppbmRfdCBsZ19kZWx0YSA9IChvZmZfdG9fZmlyc3Rf cHNfcmcgPT0gMCkgPworCSAgICBMR19QQUdFIDogTEdfUEFHRSArIChvZmZfdG9fZmlyc3RfcHNf cmcgLSAxKTsKKworCS8qCisJICogTGV0J3Mgd3JpdGUgcHN6IGluIGJpbmFyeSwgZS5nLiAwMDEx IGZvciAweDMsIDAxMTEgZm9yIDB4Ny4KKwkgKiBUaGUgbGVmdG1vc3QgYml0cyB3aG9zZSBsZW4g aXMgbGdfYmFzZSBkZWNpZGUgdGhlIGJhc2Ugb2YgcHN6LgorCSAqIFRoZSByaWdodG1vc3QgYml0 cyB3aG9zZSBsZW4gaXMgbGdfZGVsdGEgZGVjaWRlIChwZ3ogJSBQQUdFKS4KKwkgKiBUaGUgbWlk ZGxlIGJpdHMgd2hvc2UgbGVuIGlzIFNDX0xHX05HUk9VUCBkZWNpZGUgbmRlbHRhLgorCSAqIG5k ZWx0YSBpcyBvZmZzZXQgdG8gdGhlIGZpcnN0IHNpemUgY2xhc3MgaW4gdGhlIHNpemUgY2xhc3Mg Z3JvdXAsCisJICogc3RhcnRzIGZyb20gMS4KKwkgKiBJZiB5b3UgZG9uJ3Qga25vdyBsZ19iYXNl LCBuZGVsdGEgb3IgbGdfZGVsdGEsIHNlZSBzYy5oLgorCSAqIHx4eHh4eHh4eHh4eHh4eHh4eHh4 eHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18eXl5eXl5eXl5eXl5eXl5eXl5eXl5fAorCSAqIHw8 LS0gbGVuOiBsZ19iYXNlIC0tPnw8LS0gbGVuOiBTQ19MR19OR1JPVVAtLT58PC0tIGxlbjogbGdf ZGVsdGEgLS0+fAorCSAqICAgICAgICAgICAgICAgICAgICAgIHw8LS0gICAgICBuZGVsdGEgICAg ICAtLT58CisJICogcmdfaW5uZXJfb2ZmID0gbmRlbHRhIC0gMQorCSAqIFdoeSB1c2UgKHBzeiAt IDEpPworCSAqIFRvIGhhbmRsZSBjYXNlOiBwc3ogJSAoMSA8PCBsZ19kZWx0YSkgPT0gMC4KKwkg Ki8KKwlwc3ppbmRfdCByZ19pbm5lcl9vZmYgPSAoKChwc3ogLSAxKSkgPj4gbGdfZGVsdGEpICYg KFNDX05HUk9VUCAtIDEpOworCisJcHN6aW5kX3QgYmFzZV9pbmQgPSBvZmZfdG9fZmlyc3RfcHNf cmcgPDwgU0NfTEdfTkdST1VQOworCXBzemluZF90IGluZCA9IGJhc2VfaW5kICsgcmdfaW5uZXJf b2ZmOworCXJldHVybiBpbmQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgc2l6ZV90Citzel9waW5kMnN6 X2NvbXB1dGUocHN6aW5kX3QgcGluZCkgeworCWlmICh1bmxpa2VseShwaW5kID09IFNDX05QU0la RVMpKSB7CisJCXJldHVybiBTQ19MQVJHRV9NQVhDTEFTUyArIFBBR0U7CisJfQorCXNpemVfdCBn cnAgPSBwaW5kID4+IFNDX0xHX05HUk9VUDsKKwlzaXplX3QgbW9kID0gcGluZCAmICgoWlUoMSkg PDwgU0NfTEdfTkdST1VQKSAtIDEpOworCisJc2l6ZV90IGdycF9zaXplX21hc2sgPSB+KCghIWdy cCktMSk7CisJc2l6ZV90IGdycF9zaXplID0gKChaVSgxKSA8PCAoTEdfUEFHRSArIChTQ19MR19O R1JPVVAtMSkpKSA8PCBncnApCisJICAgICYgZ3JwX3NpemVfbWFzazsKKworCXNpemVfdCBzaGlm dCA9IChncnAgPT0gMCkgPyAxIDogZ3JwOworCXNpemVfdCBsZ19kZWx0YSA9IHNoaWZ0ICsgKExH X1BBR0UtMSk7CisJc2l6ZV90IG1vZF9zaXplID0gKG1vZCsxKSA8PCBsZ19kZWx0YTsKKworCXNp emVfdCBzeiA9IGdycF9zaXplICsgbW9kX3NpemU7CisJcmV0dXJuIHN6OworfQorCitzdGF0aWMg aW5saW5lIHNpemVfdAorc3pfcGluZDJzel9sb29rdXAocHN6aW5kX3QgcGluZCkgeworCXNpemVf dCByZXQgPSAoc2l6ZV90KXN6X3BpbmQyc3pfdGFiW3BpbmRdOworCWFzc2VydChyZXQgPT0gc3pf cGluZDJzel9jb21wdXRlKHBpbmQpKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5l IHNpemVfdAorc3pfcGluZDJzeihwc3ppbmRfdCBwaW5kKSB7CisJYXNzZXJ0KHBpbmQgPCBTQ19O UFNJWkVTICsgMSk7CisJcmV0dXJuIHN6X3BpbmQyc3pfbG9va3VwKHBpbmQpOworfQorCitzdGF0 aWMgaW5saW5lIHNpemVfdAorc3pfcHN6MnUoc2l6ZV90IHBzeikgeworCWlmICh1bmxpa2VseShw c3ogPiBTQ19MQVJHRV9NQVhDTEFTUykpIHsKKwkJcmV0dXJuIFNDX0xBUkdFX01BWENMQVNTICsg UEFHRTsKKwl9CisJc2l6ZV90IHggPSBsZ19mbG9vcigocHN6PDwxKS0xKTsKKwlzaXplX3QgbGdf ZGVsdGEgPSAoeCA8IFNDX0xHX05HUk9VUCArIExHX1BBR0UgKyAxKSA/CisJICAgIExHX1BBR0Ug OiB4IC0gU0NfTEdfTkdST1VQIC0gMTsKKwlzaXplX3QgZGVsdGEgPSBaVSgxKSA8PCBsZ19kZWx0 YTsKKwlzaXplX3QgZGVsdGFfbWFzayA9IGRlbHRhIC0gMTsKKwlzaXplX3QgdXNpemUgPSAocHN6 ICsgZGVsdGFfbWFzaykgJiB+ZGVsdGFfbWFzazsKKwlyZXR1cm4gdXNpemU7Cit9CisKK3N0YXRp YyBpbmxpbmUgc3ppbmRfdAorc3pfc2l6ZTJpbmRleF9jb21wdXRlKHNpemVfdCBzaXplKSB7CisJ aWYgKHVubGlrZWx5KHNpemUgPiBTQ19MQVJHRV9NQVhDTEFTUykpIHsKKwkJcmV0dXJuIFNDX05T SVpFUzsKKwl9CisKKwlpZiAoc2l6ZSA9PSAwKSB7CisJCXJldHVybiAwOworCX0KKyNpZiAoU0Nf TlRJTlkgIT0gMCkKKwlpZiAoc2l6ZSA8PSAoWlUoMSkgPDwgU0NfTEdfVElOWV9NQVhDTEFTUykp IHsKKwkJc3ppbmRfdCBsZ190bWluID0gU0NfTEdfVElOWV9NQVhDTEFTUyAtIFNDX05USU5ZICsg MTsKKwkJc3ppbmRfdCBsZ19jZWlsID0gbGdfZmxvb3IocG93Ml9jZWlsX3p1KHNpemUpKTsKKwkJ cmV0dXJuIChsZ19jZWlsIDwgbGdfdG1pbiA/IDAgOiBsZ19jZWlsIC0gbGdfdG1pbik7CisJfQor I2VuZGlmCisJeworCQlzemluZF90IHggPSBsZ19mbG9vcigoc2l6ZTw8MSktMSk7CisJCXN6aW5k X3Qgc2hpZnQgPSAoeCA8IFNDX0xHX05HUk9VUCArIExHX1FVQU5UVU0pID8gMCA6CisJCSAgICB4 IC0gKFNDX0xHX05HUk9VUCArIExHX1FVQU5UVU0pOworCQlzemluZF90IGdycCA9IHNoaWZ0IDw8 IFNDX0xHX05HUk9VUDsKKworCQlzemluZF90IGxnX2RlbHRhID0gKHggPCBTQ19MR19OR1JPVVAg KyBMR19RVUFOVFVNICsgMSkKKwkJICAgID8gTEdfUVVBTlRVTSA6IHggLSBTQ19MR19OR1JPVVAg LSAxOworCisJCXNpemVfdCBkZWx0YV9pbnZlcnNlX21hc2sgPSBaVSgtMSkgPDwgbGdfZGVsdGE7 CisJCXN6aW5kX3QgbW9kID0gKCgoKHNpemUtMSkgJiBkZWx0YV9pbnZlcnNlX21hc2spID4+IGxn X2RlbHRhKSkgJgorCQkgICAgKChaVSgxKSA8PCBTQ19MR19OR1JPVVApIC0gMSk7CisKKwkJc3pp bmRfdCBpbmRleCA9IFNDX05USU5ZICsgZ3JwICsgbW9kOworCQlyZXR1cm4gaW5kZXg7CisJfQor fQorCitKRU1BTExPQ19BTFdBWVNfSU5MSU5FIHN6aW5kX3QKK3N6X3NpemUyaW5kZXhfbG9va3Vw X2ltcGwoc2l6ZV90IHNpemUpIHsKKwlhc3NlcnQoc2l6ZSA8PSBTQ19MT09LVVBfTUFYQ0xBU1Mp OworCXJldHVybiBzel9zaXplMmluZGV4X3RhYlsoc2l6ZSArIChaVSgxKSA8PCBTQ19MR19USU5Z X01JTikgLSAxKQorCSAgICA+PiBTQ19MR19USU5ZX01JTl07Cit9CisKK0pFTUFMTE9DX0FMV0FZ U19JTkxJTkUgc3ppbmRfdAorc3pfc2l6ZTJpbmRleF9sb29rdXAoc2l6ZV90IHNpemUpIHsKKwlz emluZF90IHJldCA9IHN6X3NpemUyaW5kZXhfbG9va3VwX2ltcGwoc2l6ZSk7CisJYXNzZXJ0KHJl dCA9PSBzel9zaXplMmluZGV4X2NvbXB1dGUoc2l6ZSkpOworCXJldHVybiByZXQ7Cit9CisKK0pF TUFMTE9DX0FMV0FZU19JTkxJTkUgc3ppbmRfdAorc3pfc2l6ZTJpbmRleChzaXplX3Qgc2l6ZSkg eworCWlmIChsaWtlbHkoc2l6ZSA8PSBTQ19MT09LVVBfTUFYQ0xBU1MpKSB7CisJCXJldHVybiBz el9zaXplMmluZGV4X2xvb2t1cChzaXplKTsKKwl9CisJcmV0dXJuIHN6X3NpemUyaW5kZXhfY29t cHV0ZShzaXplKTsKK30KKworc3RhdGljIGlubGluZSBzaXplX3QKK3N6X2luZGV4MnNpemVfY29t cHV0ZShzemluZF90IGluZGV4KSB7CisjaWYgKFNDX05USU5ZID4gMCkKKwlpZiAoaW5kZXggPCBT Q19OVElOWSkgeworCQlyZXR1cm4gKFpVKDEpIDw8IChTQ19MR19USU5ZX01BWENMQVNTIC0gU0Nf TlRJTlkgKyAxICsgaW5kZXgpKTsKKwl9CisjZW5kaWYKKwl7CisJCXNpemVfdCByZWR1Y2VkX2lu ZGV4ID0gaW5kZXggLSBTQ19OVElOWTsKKwkJc2l6ZV90IGdycCA9IHJlZHVjZWRfaW5kZXggPj4g U0NfTEdfTkdST1VQOworCQlzaXplX3QgbW9kID0gcmVkdWNlZF9pbmRleCAmICgoWlUoMSkgPDwg U0NfTEdfTkdST1VQKSAtCisJCSAgICAxKTsKKworCQlzaXplX3QgZ3JwX3NpemVfbWFzayA9IH4o KCEhZ3JwKS0xKTsKKwkJc2l6ZV90IGdycF9zaXplID0gKChaVSgxKSA8PCAoTEdfUVVBTlRVTSAr CisJCSAgICAoU0NfTEdfTkdST1VQLTEpKSkgPDwgZ3JwKSAmIGdycF9zaXplX21hc2s7CisKKwkJ c2l6ZV90IHNoaWZ0ID0gKGdycCA9PSAwKSA/IDEgOiBncnA7CisJCXNpemVfdCBsZ19kZWx0YSA9 IHNoaWZ0ICsgKExHX1FVQU5UVU0tMSk7CisJCXNpemVfdCBtb2Rfc2l6ZSA9IChtb2QrMSkgPDwg bGdfZGVsdGE7CisKKwkJc2l6ZV90IHVzaXplID0gZ3JwX3NpemUgKyBtb2Rfc2l6ZTsKKwkJcmV0 dXJuIHVzaXplOworCX0KK30KKworSkVNQUxMT0NfQUxXQVlTX0lOTElORSBzaXplX3QKK3N6X2lu ZGV4MnNpemVfbG9va3VwX2ltcGwoc3ppbmRfdCBpbmRleCkgeworCXJldHVybiBzel9pbmRleDJz aXplX3RhYltpbmRleF07Cit9CisKK0pFTUFMTE9DX0FMV0FZU19JTkxJTkUgc2l6ZV90Citzel9p bmRleDJzaXplX2xvb2t1cChzemluZF90IGluZGV4KSB7CisJc2l6ZV90IHJldCA9IHN6X2luZGV4 MnNpemVfbG9va3VwX2ltcGwoaW5kZXgpOworCWFzc2VydChyZXQgPT0gc3pfaW5kZXgyc2l6ZV9j b21wdXRlKGluZGV4KSk7CisJcmV0dXJuIHJldDsKK30KKworSkVNQUxMT0NfQUxXQVlTX0lOTElO RSBzaXplX3QKK3N6X2luZGV4MnNpemUoc3ppbmRfdCBpbmRleCkgeworCWFzc2VydChpbmRleCA8 IFNDX05TSVpFUyk7CisJcmV0dXJuIHN6X2luZGV4MnNpemVfbG9va3VwKGluZGV4KTsKK30KKwor SkVNQUxMT0NfQUxXQVlTX0lOTElORSB2b2lkCitzel9zaXplMmluZGV4X3VzaXplX2Zhc3RwYXRo KHNpemVfdCBzaXplLCBzemluZF90ICppbmQsIHNpemVfdCAqdXNpemUpIHsKKwkqaW5kID0gc3pf c2l6ZTJpbmRleF9sb29rdXBfaW1wbChzaXplKTsKKwkqdXNpemUgPSBzel9pbmRleDJzaXplX2xv b2t1cF9pbXBsKCppbmQpOworfQorCitKRU1BTExPQ19BTFdBWVNfSU5MSU5FIHNpemVfdAorc3pf czJ1X2NvbXB1dGUoc2l6ZV90IHNpemUpIHsKKwlpZiAodW5saWtlbHkoc2l6ZSA+IFNDX0xBUkdF X01BWENMQVNTKSkgeworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoc2l6ZSA9PSAwKSB7CisJCXNp emUrKzsKKwl9CisjaWYgKFNDX05USU5ZID4gMCkKKwlpZiAoc2l6ZSA8PSAoWlUoMSkgPDwgU0Nf TEdfVElOWV9NQVhDTEFTUykpIHsKKwkJc2l6ZV90IGxnX3RtaW4gPSBTQ19MR19USU5ZX01BWENM QVNTIC0gU0NfTlRJTlkgKyAxOworCQlzaXplX3QgbGdfY2VpbCA9IGxnX2Zsb29yKHBvdzJfY2Vp bF96dShzaXplKSk7CisJCXJldHVybiAobGdfY2VpbCA8IGxnX3RtaW4gPyAoWlUoMSkgPDwgbGdf dG1pbikgOgorCQkgICAgKFpVKDEpIDw8IGxnX2NlaWwpKTsKKwl9CisjZW5kaWYKKwl7CisJCXNp emVfdCB4ID0gbGdfZmxvb3IoKHNpemU8PDEpLTEpOworCQlzaXplX3QgbGdfZGVsdGEgPSAoeCA8 IFNDX0xHX05HUk9VUCArIExHX1FVQU5UVU0gKyAxKQorCQkgICAgPyAgTEdfUVVBTlRVTSA6IHgg LSBTQ19MR19OR1JPVVAgLSAxOworCQlzaXplX3QgZGVsdGEgPSBaVSgxKSA8PCBsZ19kZWx0YTsK KwkJc2l6ZV90IGRlbHRhX21hc2sgPSBkZWx0YSAtIDE7CisJCXNpemVfdCB1c2l6ZSA9IChzaXpl ICsgZGVsdGFfbWFzaykgJiB+ZGVsdGFfbWFzazsKKwkJcmV0dXJuIHVzaXplOworCX0KK30KKwor SkVNQUxMT0NfQUxXQVlTX0lOTElORSBzaXplX3QKK3N6X3MydV9sb29rdXAoc2l6ZV90IHNpemUp IHsKKwlzaXplX3QgcmV0ID0gc3pfaW5kZXgyc2l6ZV9sb29rdXAoc3pfc2l6ZTJpbmRleF9sb29r dXAoc2l6ZSkpOworCisJYXNzZXJ0KHJldCA9PSBzel9zMnVfY29tcHV0ZShzaXplKSk7CisJcmV0 dXJuIHJldDsKK30KKworLyoKKyAqIENvbXB1dGUgdXNhYmxlIHNpemUgdGhhdCB3b3VsZCByZXN1 bHQgZnJvbSBhbGxvY2F0aW5nIGFuIG9iamVjdCB3aXRoIHRoZQorICogc3BlY2lmaWVkIHNpemUu CisgKi8KK0pFTUFMTE9DX0FMV0FZU19JTkxJTkUgc2l6ZV90Citzel9zMnUoc2l6ZV90IHNpemUp IHsKKwlpZiAobGlrZWx5KHNpemUgPD0gU0NfTE9PS1VQX01BWENMQVNTKSkgeworCQlyZXR1cm4g c3pfczJ1X2xvb2t1cChzaXplKTsKKwl9CisJcmV0dXJuIHN6X3MydV9jb21wdXRlKHNpemUpOwor fQorCisvKgorICogQ29tcHV0ZSB1c2FibGUgc2l6ZSB0aGF0IHdvdWxkIHJlc3VsdCBmcm9tIGFs bG9jYXRpbmcgYW4gb2JqZWN0IHdpdGggdGhlCisgKiBzcGVjaWZpZWQgc2l6ZSBhbmQgYWxpZ25t ZW50LgorICovCitKRU1BTExPQ19BTFdBWVNfSU5MSU5FIHNpemVfdAorc3pfc2EydShzaXplX3Qg c2l6ZSwgc2l6ZV90IGFsaWdubWVudCkgeworCXNpemVfdCB1c2l6ZTsKKworCWFzc2VydChhbGln bm1lbnQgIT0gMCAmJiAoKGFsaWdubWVudCAtIDEpICYgYWxpZ25tZW50KSA9PSAwKTsKKworCS8q IFRyeSBmb3IgYSBzbWFsbCBzaXplIGNsYXNzLiAqLworCWlmIChzaXplIDw9IFNDX1NNQUxMX01B WENMQVNTICYmIGFsaWdubWVudCA8PSBQQUdFKSB7CisJCS8qCisJCSAqIFJvdW5kIHNpemUgdXAg dG8gdGhlIG5lYXJlc3QgbXVsdGlwbGUgb2YgYWxpZ25tZW50LgorCQkgKgorCQkgKiBUaGlzIGRv bmUsIHdlIGNhbiB0YWtlIGFkdmFudGFnZSBvZiB0aGUgZmFjdCB0aGF0IGZvciBlYWNoCisJCSAq IHNtYWxsIHNpemUgY2xhc3MsIGV2ZXJ5IG9iamVjdCBpcyBhbGlnbmVkIGF0IHRoZSBzbWFsbGVz dAorCQkgKiBwb3dlciBvZiB0d28gdGhhdCBpcyBub24temVybyBpbiB0aGUgYmFzZSB0d28gcmVw cmVzZW50YXRpb24KKwkJICogb2YgdGhlIHNpemUuICBGb3IgZXhhbXBsZToKKwkJICoKKwkJICog ICBTaXplIHwgICBCYXNlIDIgfCBNaW5pbXVtIGFsaWdubWVudAorCQkgKiAgIC0tLS0tKy0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tCisJCSAqICAgICA5NiB8ICAxMTAwMDAwIHwgIDMyCisJ CSAqICAgIDE0NCB8IDEwMTAwMDAwIHwgIDMyCisJCSAqICAgIDE5MiB8IDExMDAwMDAwIHwgIDY0 CisJCSAqLworCQl1c2l6ZSA9IHN6X3MydShBTElHTk1FTlRfQ0VJTElORyhzaXplLCBhbGlnbm1l bnQpKTsKKwkJaWYgKHVzaXplIDwgU0NfTEFSR0VfTUlOQ0xBU1MpIHsKKwkJCXJldHVybiB1c2l6 ZTsKKwkJfQorCX0KKworCS8qIExhcmdlIHNpemUgY2xhc3MuICBCZXdhcmUgb2Ygb3ZlcmZsb3cu ICovCisKKwlpZiAodW5saWtlbHkoYWxpZ25tZW50ID4gU0NfTEFSR0VfTUFYQ0xBU1MpKSB7CisJ CXJldHVybiAwOworCX0KKworCS8qIE1ha2Ugc3VyZSByZXN1bHQgaXMgYSBsYXJnZSBzaXplIGNs YXNzLiAqLworCWlmIChzaXplIDw9IFNDX0xBUkdFX01JTkNMQVNTKSB7CisJCXVzaXplID0gU0Nf TEFSR0VfTUlOQ0xBU1M7CisJfSBlbHNlIHsKKwkJdXNpemUgPSBzel9zMnUoc2l6ZSk7CisJCWlm ICh1c2l6ZSA8IHNpemUpIHsKKwkJCS8qIHNpemVfdCBvdmVyZmxvdy4gKi8KKwkJCXJldHVybiAw OworCQl9CisJfQorCisJLyoKKwkgKiBDYWxjdWxhdGUgdGhlIG11bHRpLXBhZ2UgbWFwcGluZyB0 aGF0IGxhcmdlX3BhbGxvYygpIHdvdWxkIG5lZWQgaW4KKwkgKiBvcmRlciB0byBndWFyYW50ZWUg dGhlIGFsaWdubWVudC4KKwkgKi8KKwlpZiAodXNpemUgKyBzel9sYXJnZV9wYWQgKyBQQUdFX0NF SUxJTkcoYWxpZ25tZW50KSAtIFBBR0UgPCB1c2l6ZSkgeworCQkvKiBzaXplX3Qgb3ZlcmZsb3cu ICovCisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gdXNpemU7Cit9CisKK3NpemVfdCBzel9wc3pf cXVhbnRpemVfZmxvb3Ioc2l6ZV90IHNpemUpOworc2l6ZV90IHN6X3Bzel9xdWFudGl6ZV9jZWls KHNpemVfdCBzaXplKTsKKworI2VuZGlmIC8qIEpFTUFMTE9DX0lOVEVSTkFMX1NJWkVfSCAqLwoK ZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1 ZGUvamVtYWxsb2MvaW50ZXJuYWwvdGNhY2hlX2V4dGVybnMuaCBiLzM4OS1kcy1iYXNlLTMuMy4w LWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvdGNhY2hlX2V4 dGVybnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMmFiNzEwCi0tLSAv ZGV2L251bGwKKysrIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5j bHVkZS9qZW1hbGxvYy9pbnRlcm5hbC90Y2FjaGVfZXh0ZXJucy5oCkBAIC0wLDAgKzEsNzUgQEAK KyNpZm5kZWYgSkVNQUxMT0NfSU5URVJOQUxfVENBQ0hFX0VYVEVSTlNfSAorI2RlZmluZSBKRU1B TExPQ19JTlRFUk5BTF9UQ0FDSEVfRVhURVJOU19ICisKK2V4dGVybiBib29sIG9wdF90Y2FjaGU7 CitleHRlcm4gc2l6ZV90IG9wdF90Y2FjaGVfbWF4OworZXh0ZXJuIHNzaXplX3QJb3B0X2xnX3Rj YWNoZV9uc2xvdHNfbXVsOworZXh0ZXJuIHVuc2lnbmVkIG9wdF90Y2FjaGVfbnNsb3RzX3NtYWxs X21pbjsKK2V4dGVybiB1bnNpZ25lZCBvcHRfdGNhY2hlX25zbG90c19zbWFsbF9tYXg7CitleHRl cm4gdW5zaWduZWQgb3B0X3RjYWNoZV9uc2xvdHNfbGFyZ2U7CitleHRlcm4gc3NpemVfdCBvcHRf bGdfdGNhY2hlX3NoaWZ0OworZXh0ZXJuIHNpemVfdCBvcHRfdGNhY2hlX2djX2luY3JfYnl0ZXM7 CitleHRlcm4gc2l6ZV90IG9wdF90Y2FjaGVfZ2NfZGVsYXlfYnl0ZXM7CitleHRlcm4gdW5zaWdu ZWQgb3B0X2xnX3RjYWNoZV9mbHVzaF9zbWFsbF9kaXY7CitleHRlcm4gdW5zaWduZWQgb3B0X2xn X3RjYWNoZV9mbHVzaF9sYXJnZV9kaXY7CisKKy8qCisgKiBOdW1iZXIgb2YgdGNhY2hlIGJpbnMu ICBUaGVyZSBhcmUgU0NfTkJJTlMgc21hbGwtb2JqZWN0IGJpbnMsIHBsdXMgMCBvciBtb3JlCisg KiBsYXJnZS1vYmplY3QgYmlucy4KKyAqLworZXh0ZXJuIHVuc2lnbmVkCW5oYmluczsKKworLyog TWF4aW11bSBjYWNoZWQgc2l6ZSBjbGFzcy4gKi8KK2V4dGVybiBzaXplX3QJdGNhY2hlX21heGNs YXNzOworCitleHRlcm4gY2FjaGVfYmluX2luZm9fdCAqdGNhY2hlX2Jpbl9pbmZvOworCisvKgor ICogRXhwbGljaXQgdGNhY2hlcywgbWFuYWdlZCB2aWEgdGhlIHRjYWNoZS57Y3JlYXRlLGZsdXNo LGRlc3Ryb3l9IG1hbGxjdGxzIGFuZAorICogdXNhYmxlIHZpYSB0aGUgTUFMTE9DWF9UQ0FDSEUo KSBmbGFnLiAgVGhlIGF1dG9tYXRpYyBwZXIgdGhyZWFkIHRjYWNoZXMgYXJlCisgKiBjb21wbGV0 ZWx5IGRpc2pvaW50IGZyb20gdGhpcyBkYXRhIHN0cnVjdHVyZS4gIHRjYWNoZXMgc3RhcnRzIG9m ZiBhcyBhIHNwYXJzZQorICogYXJyYXksIHNvIGl0IGhhcyBubyBwaHlzaWNhbCBtZW1vcnkgZm9v dHByaW50IHVudGlsIGluZGl2aWR1YWwgcGFnZXMgYXJlCisgKiB0b3VjaGVkLiAgVGhpcyBhbGxv d3MgdGhlIGVudGlyZSBhcnJheSB0byBiZSBhbGxvY2F0ZWQgdGhlIGZpcnN0IHRpbWUgYW4KKyAq IGV4cGxpY2l0IHRjYWNoZSBpcyBjcmVhdGVkIHdpdGhvdXQgYSBkaXNwcm9wb3J0aW9uYXRlIGlt cGFjdCBvbiBtZW1vcnkgdXNhZ2UuCisgKi8KK2V4dGVybiB0Y2FjaGVzX3QJKnRjYWNoZXM7CisK K3NpemVfdCB0Y2FjaGVfc2FsbG9jKHRzZG5fdCAqdHNkbiwgY29uc3Qgdm9pZCAqcHRyKTsKK3Zv aWQgKnRjYWNoZV9hbGxvY19zbWFsbF9oYXJkKHRzZG5fdCAqdHNkbiwgYXJlbmFfdCAqYXJlbmEs IHRjYWNoZV90ICp0Y2FjaGUsCisgICAgY2FjaGVfYmluX3QgKnRiaW4sIHN6aW5kX3QgYmluaW5k LCBib29sICp0Y2FjaGVfc3VjY2Vzcyk7CisKK3ZvaWQgdGNhY2hlX2Jpbl9mbHVzaF9zbWFsbCh0 c2RfdCAqdHNkLCB0Y2FjaGVfdCAqdGNhY2hlLCBjYWNoZV9iaW5fdCAqdGJpbiwKKyAgICBzemlu ZF90IGJpbmluZCwgdW5zaWduZWQgcmVtKTsKK3ZvaWQgdGNhY2hlX2Jpbl9mbHVzaF9sYXJnZSh0 c2RfdCAqdHNkLCB0Y2FjaGVfdCAqdGNhY2hlLCBjYWNoZV9iaW5fdCAqdGJpbiwKKyAgICBzemlu ZF90IGJpbmluZCwgdW5zaWduZWQgcmVtKTsKK3ZvaWQgdGNhY2hlX2Jpbl9mbHVzaF9zdGFzaGVk KHRzZF90ICp0c2QsIHRjYWNoZV90ICp0Y2FjaGUsIGNhY2hlX2Jpbl90ICpiaW4sCisgICAgc3pp bmRfdCBiaW5pbmQsIGJvb2wgaXNfc21hbGwpOwordm9pZCB0Y2FjaGVfYXJlbmFfcmVhc3NvY2lh dGUodHNkbl90ICp0c2RuLCB0Y2FjaGVfc2xvd190ICp0Y2FjaGVfc2xvdywKKyAgICB0Y2FjaGVf dCAqdGNhY2hlLCBhcmVuYV90ICphcmVuYSk7Cit0Y2FjaGVfdCAqdGNhY2hlX2NyZWF0ZV9leHBs aWNpdCh0c2RfdCAqdHNkKTsKK3ZvaWQgdGNhY2hlX2NsZWFudXAodHNkX3QgKnRzZCk7Cit2b2lk IHRjYWNoZV9zdGF0c19tZXJnZSh0c2RuX3QgKnRzZG4sIHRjYWNoZV90ICp0Y2FjaGUsIGFyZW5h X3QgKmFyZW5hKTsKK2Jvb2wgdGNhY2hlc19jcmVhdGUodHNkX3QgKnRzZCwgYmFzZV90ICpiYXNl LCB1bnNpZ25lZCAqcl9pbmQpOwordm9pZCB0Y2FjaGVzX2ZsdXNoKHRzZF90ICp0c2QsIHVuc2ln bmVkIGluZCk7Cit2b2lkIHRjYWNoZXNfZGVzdHJveSh0c2RfdCAqdHNkLCB1bnNpZ25lZCBpbmQp OworYm9vbCB0Y2FjaGVfYm9vdCh0c2RuX3QgKnRzZG4sIGJhc2VfdCAqYmFzZSk7Cit2b2lkIHRj YWNoZV9hcmVuYV9hc3NvY2lhdGUodHNkbl90ICp0c2RuLCB0Y2FjaGVfc2xvd190ICp0Y2FjaGVf c2xvdywKKyAgICB0Y2FjaGVfdCAqdGNhY2hlLCBhcmVuYV90ICphcmVuYSk7Cit2b2lkIHRjYWNo ZV9wcmVmb3JrKHRzZG5fdCAqdHNkbik7Cit2b2lkIHRjYWNoZV9wb3N0Zm9ya19wYXJlbnQodHNk bl90ICp0c2RuKTsKK3ZvaWQgdGNhY2hlX3Bvc3Rmb3JrX2NoaWxkKHRzZG5fdCAqdHNkbik7Cit2 b2lkIHRjYWNoZV9mbHVzaCh0c2RfdCAqdHNkKTsKK2Jvb2wgdHNkX3RjYWNoZV9kYXRhX2luaXQo dHNkX3QgKnRzZCk7Citib29sIHRzZF90Y2FjaGVfZW5hYmxlZF9kYXRhX2luaXQodHNkX3QgKnRz ZCk7CisKK3ZvaWQgdGNhY2hlX2Fzc2VydF9pbml0aWFsaXplZCh0Y2FjaGVfdCAqdGNhY2hlKTsK KworLyogT25seSBhY2Nlc3NlZCBieSB0aHJlYWQgZXZlbnQuICovCit1aW50NjRfdCB0Y2FjaGVf Z2NfbmV3X2V2ZW50X3dhaXQodHNkX3QgKnRzZCk7Cit1aW50NjRfdCB0Y2FjaGVfZ2NfcG9zdHBv bmVkX2V2ZW50X3dhaXQodHNkX3QgKnRzZCk7Cit2b2lkIHRjYWNoZV9nY19ldmVudF9oYW5kbGVy KHRzZF90ICp0c2QsIHVpbnQ2NF90IGVsYXBzZWQpOwordWludDY0X3QgdGNhY2hlX2djX2RhbGxv Y19uZXdfZXZlbnRfd2FpdCh0c2RfdCAqdHNkKTsKK3VpbnQ2NF90IHRjYWNoZV9nY19kYWxsb2Nf cG9zdHBvbmVkX2V2ZW50X3dhaXQodHNkX3QgKnRzZCk7Cit2b2lkIHRjYWNoZV9nY19kYWxsb2Nf ZXZlbnRfaGFuZGxlcih0c2RfdCAqdHNkLCB1aW50NjRfdCBlbGFwc2VkKTsKKworI2VuZGlmIC8q IEpFTUFMTE9DX0lOVEVSTkFMX1RDQUNIRV9FWFRFUk5TX0ggKi8KCmRpZmYgLS1naXQgYS8zODkt ZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVy bmFsL3RjYWNoZV9pbmxpbmVzLmggYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01 LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL3RjYWNoZV9pbmxpbmVzLmgKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjYzNGYxNAotLS0gL2Rldi9udWxsCisrKyBiLzM4 OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50 ZXJuYWwvdGNhY2hlX2lubGluZXMuaApAQCAtMCwwICsxLDE5MyBAQAorI2lmbmRlZiBKRU1BTExP Q19JTlRFUk5BTF9UQ0FDSEVfSU5MSU5FU19ICisjZGVmaW5lIEpFTUFMTE9DX0lOVEVSTkFMX1RD QUNIRV9JTkxJTkVTX0gKKworI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2Jpbi5oIgorI2lu Y2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2plbWFsbG9jX2ludGVybmFsX3R5cGVzLmgiCisjaW5j bHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvc2FuLmgiCisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJu YWwvc2MuaCIKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9zei5oIgorI2luY2x1ZGUgImpl bWFsbG9jL2ludGVybmFsL3V0aWwuaCIKKworc3RhdGljIGlubGluZSBib29sCit0Y2FjaGVfZW5h YmxlZF9nZXQodHNkX3QgKnRzZCkgeworCXJldHVybiB0c2RfdGNhY2hlX2VuYWJsZWRfZ2V0KHRz ZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAordGNhY2hlX2VuYWJsZWRfc2V0KHRzZF90ICp0 c2QsIGJvb2wgZW5hYmxlZCkgeworCWJvb2wgd2FzX2VuYWJsZWQgPSB0c2RfdGNhY2hlX2VuYWJs ZWRfZ2V0KHRzZCk7CisKKwlpZiAoIXdhc19lbmFibGVkICYmIGVuYWJsZWQpIHsKKwkJdHNkX3Rj YWNoZV9kYXRhX2luaXQodHNkKTsKKwl9IGVsc2UgaWYgKHdhc19lbmFibGVkICYmICFlbmFibGVk KSB7CisJCXRjYWNoZV9jbGVhbnVwKHRzZCk7CisJfQorCS8qIENvbW1pdCB0aGUgc3RhdGUgbGFz dC4gIEFib3ZlIGNhbGxzIGNoZWNrIGN1cnJlbnQgc3RhdGUuICovCisJdHNkX3RjYWNoZV9lbmFi bGVkX3NldCh0c2QsIGVuYWJsZWQpOworCXRzZF9zbG93X3VwZGF0ZSh0c2QpOworfQorCitKRU1B TExPQ19BTFdBWVNfSU5MSU5FIGJvb2wKK3RjYWNoZV9zbWFsbF9iaW5fZGlzYWJsZWQoc3ppbmRf dCBpbmQsIGNhY2hlX2Jpbl90ICpiaW4pIHsKKwlhc3NlcnQoaW5kIDwgU0NfTkJJTlMpOworCWJv b2wgcmV0ID0gKGNhY2hlX2Jpbl9pbmZvX25jYWNoZWRfbWF4KCZ0Y2FjaGVfYmluX2luZm9baW5k XSkgPT0gMCk7CisJaWYgKHJldCAmJiBiaW4gIT0gTlVMTCkgeworCQkvKiBzbWFsbCBzaXplIGNs YXNzIGJ1dCBjYWNoZSBiaW4gZGlzYWJsZWQuICovCisJCWFzc2VydChpbmQgPj0gbmhiaW5zKTsK KwkJYXNzZXJ0KCh1aW50cHRyX3QpKCpiaW4tPnN0YWNrX2hlYWQpID09CisJCSAgICBjYWNoZV9i aW5fcHJlY2VkaW5nX2p1bmspOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK0pFTUFMTE9DX0FM V0FZU19JTkxJTkUgdm9pZCAqCit0Y2FjaGVfYWxsb2Nfc21hbGwodHNkX3QgKnRzZCwgYXJlbmFf dCAqYXJlbmEsIHRjYWNoZV90ICp0Y2FjaGUsCisgICAgc2l6ZV90IHNpemUsIHN6aW5kX3QgYmlu aW5kLCBib29sIHplcm8sIGJvb2wgc2xvd19wYXRoKSB7CisJdm9pZCAqcmV0OworCWJvb2wgdGNh Y2hlX3N1Y2Nlc3M7CisKKwlhc3NlcnQoYmluaW5kIDwgU0NfTkJJTlMpOworCWNhY2hlX2Jpbl90 ICpiaW4gPSAmdGNhY2hlLT5iaW5zW2JpbmluZF07CisJcmV0ID0gY2FjaGVfYmluX2FsbG9jKGJp biwgJnRjYWNoZV9zdWNjZXNzKTsKKwlhc3NlcnQodGNhY2hlX3N1Y2Nlc3MgPT0gKHJldCAhPSBO VUxMKSk7CisJaWYgKHVubGlrZWx5KCF0Y2FjaGVfc3VjY2VzcykpIHsKKwkJYm9vbCB0Y2FjaGVf aGFyZF9zdWNjZXNzOworCQlhcmVuYSA9IGFyZW5hX2Nob29zZSh0c2QsIGFyZW5hKTsKKwkJaWYg KHVubGlrZWx5KGFyZW5hID09IE5VTEwpKSB7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCQlpZiAo dW5saWtlbHkodGNhY2hlX3NtYWxsX2Jpbl9kaXNhYmxlZChiaW5pbmQsIGJpbikpKSB7CisJCQkv KiBzdGF0cyBhbmQgemVybyBhcmUgaGFuZGxlZCBkaXJlY3RseSBieSB0aGUgYXJlbmEuICovCisJ CQlyZXR1cm4gYXJlbmFfbWFsbG9jX2hhcmQodHNkX3RzZG4odHNkKSwgYXJlbmEsIHNpemUsCisJ CQkgICAgYmluaW5kLCB6ZXJvKTsKKwkJfQorCQl0Y2FjaGVfYmluX2ZsdXNoX3N0YXNoZWQodHNk LCB0Y2FjaGUsIGJpbiwgYmluaW5kLAorCQkgICAgLyogaXNfc21hbGwgKi8gdHJ1ZSk7CisKKwkJ cmV0ID0gdGNhY2hlX2FsbG9jX3NtYWxsX2hhcmQodHNkX3RzZG4odHNkKSwgYXJlbmEsIHRjYWNo ZSwKKwkJICAgIGJpbiwgYmluaW5kLCAmdGNhY2hlX2hhcmRfc3VjY2Vzcyk7CisJCWlmICh0Y2Fj aGVfaGFyZF9zdWNjZXNzID09IGZhbHNlKSB7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCX0KKwor CWFzc2VydChyZXQpOworCWlmICh1bmxpa2VseSh6ZXJvKSkgeworCQlzaXplX3QgdXNpemUgPSBz el9pbmRleDJzaXplKGJpbmluZCk7CisJCWFzc2VydCh0Y2FjaGVfc2FsbG9jKHRzZF90c2RuKHRz ZCksIHJldCkgPT0gdXNpemUpOworCQltZW1zZXQocmV0LCAwLCB1c2l6ZSk7CisJfQorCWlmIChj b25maWdfc3RhdHMpIHsKKwkJYmluLT50c3RhdHMubnJlcXVlc3RzKys7CisJfQorCXJldHVybiBy ZXQ7Cit9CisKK0pFTUFMTE9DX0FMV0FZU19JTkxJTkUgdm9pZCAqCit0Y2FjaGVfYWxsb2NfbGFy Z2UodHNkX3QgKnRzZCwgYXJlbmFfdCAqYXJlbmEsIHRjYWNoZV90ICp0Y2FjaGUsIHNpemVfdCBz aXplLAorICAgIHN6aW5kX3QgYmluaW5kLCBib29sIHplcm8sIGJvb2wgc2xvd19wYXRoKSB7CisJ dm9pZCAqcmV0OworCWJvb2wgdGNhY2hlX3N1Y2Nlc3M7CisKKwlhc3NlcnQoYmluaW5kID49IFND X05CSU5TICYmIGJpbmluZCA8IG5oYmlucyk7CisJY2FjaGVfYmluX3QgKmJpbiA9ICZ0Y2FjaGUt PmJpbnNbYmluaW5kXTsKKwlyZXQgPSBjYWNoZV9iaW5fYWxsb2MoYmluLCAmdGNhY2hlX3N1Y2Nl c3MpOworCWFzc2VydCh0Y2FjaGVfc3VjY2VzcyA9PSAocmV0ICE9IE5VTEwpKTsKKwlpZiAodW5s aWtlbHkoIXRjYWNoZV9zdWNjZXNzKSkgeworCQkvKgorCQkgKiBPbmx5IGFsbG9jYXRlIG9uZSBs YXJnZSBvYmplY3QgYXQgYSB0aW1lLCBiZWNhdXNlIGl0J3MgcXVpdGUKKwkJICogZXhwZW5zaXZl IHRvIGNyZWF0ZSBvbmUgYW5kIG5vdCB1c2UgaXQuCisJCSAqLworCQlhcmVuYSA9IGFyZW5hX2No b29zZSh0c2QsIGFyZW5hKTsKKwkJaWYgKHVubGlrZWx5KGFyZW5hID09IE5VTEwpKSB7CisJCQly ZXR1cm4gTlVMTDsKKwkJfQorCQl0Y2FjaGVfYmluX2ZsdXNoX3N0YXNoZWQodHNkLCB0Y2FjaGUs IGJpbiwgYmluaW5kLAorCQkgICAgLyogaXNfc21hbGwgKi8gZmFsc2UpOworCisJCXJldCA9IGxh cmdlX21hbGxvYyh0c2RfdHNkbih0c2QpLCBhcmVuYSwgc3pfczJ1KHNpemUpLCB6ZXJvKTsKKwkJ aWYgKHJldCA9PSBOVUxMKSB7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCX0gZWxzZSB7CisJCWlm ICh1bmxpa2VseSh6ZXJvKSkgeworCQkJc2l6ZV90IHVzaXplID0gc3pfaW5kZXgyc2l6ZShiaW5p bmQpOworCQkJYXNzZXJ0KHVzaXplIDw9IHRjYWNoZV9tYXhjbGFzcyk7CisJCQltZW1zZXQocmV0 LCAwLCB1c2l6ZSk7CisJCX0KKworCQlpZiAoY29uZmlnX3N0YXRzKSB7CisJCQliaW4tPnRzdGF0 cy5ucmVxdWVzdHMrKzsKKwkJfQorCX0KKworCXJldHVybiByZXQ7Cit9CisKK0pFTUFMTE9DX0FM V0FZU19JTkxJTkUgdm9pZAordGNhY2hlX2RhbGxvY19zbWFsbCh0c2RfdCAqdHNkLCB0Y2FjaGVf dCAqdGNhY2hlLCB2b2lkICpwdHIsIHN6aW5kX3QgYmluaW5kLAorICAgIGJvb2wgc2xvd19wYXRo KSB7CisJYXNzZXJ0KHRjYWNoZV9zYWxsb2ModHNkX3RzZG4odHNkKSwgcHRyKSA8PSBTQ19TTUFM TF9NQVhDTEFTUyk7CisKKwljYWNoZV9iaW5fdCAqYmluID0gJnRjYWNoZS0+Ymluc1tiaW5pbmRd OworCS8qCisJICogTm90IG1hcmtpbmcgdGhlIGJyYW5jaCB1bmxpa2VseSBiZWNhdXNlIHRoaXMg aXMgcGFzdCBmcmVlX2Zhc3RwYXRoKCkKKwkgKiAod2hpY2ggaGFuZGxlcyB0aGUgbW9zdCBjb21t b24gY2FzZXMpLCBpLmUuIGF0IHRoaXMgcG9pbnQgaXQncyBvZnRlbgorCSAqIHVuY29tbW9uIGNh c2VzLgorCSAqLworCWlmIChjYWNoZV9iaW5fbm9uZmFzdF9hbGlnbmVkKHB0cikpIHsKKwkJLyog SnVuayB1bmNvbmRpdGlvbmFsbHksIGV2ZW4gaWYgYmluIGlzIGZ1bGwuICovCisJCXNhbl9qdW5r X3B0cihwdHIsIHN6X2luZGV4MnNpemUoYmluaW5kKSk7CisJCWlmIChjYWNoZV9iaW5fc3Rhc2go YmluLCBwdHIpKSB7CisJCQlyZXR1cm47CisJCX0KKwkJYXNzZXJ0KGNhY2hlX2Jpbl9mdWxsKGJp bikpOworCQkvKiBCaW4gZnVsbDsgZmFsbCB0aHJvdWdoIGludG8gdGhlIGZsdXNoIGJyYW5jaC4g Ki8KKwl9CisKKwlpZiAodW5saWtlbHkoIWNhY2hlX2Jpbl9kYWxsb2NfZWFzeShiaW4sIHB0cikp KSB7CisJCWlmICh1bmxpa2VseSh0Y2FjaGVfc21hbGxfYmluX2Rpc2FibGVkKGJpbmluZCwgYmlu KSkpIHsKKwkJCWFyZW5hX2RhbGxvY19zbWFsbCh0c2RfdHNkbih0c2QpLCBwdHIpOworCQkJcmV0 dXJuOworCQl9CisJCWNhY2hlX2Jpbl9zel90IG1heCA9IGNhY2hlX2Jpbl9pbmZvX25jYWNoZWRf bWF4KAorCQkgICAgJnRjYWNoZV9iaW5faW5mb1tiaW5pbmRdKTsKKwkJdW5zaWduZWQgcmVtYWlu ID0gbWF4ID4+IG9wdF9sZ190Y2FjaGVfZmx1c2hfc21hbGxfZGl2OworCQl0Y2FjaGVfYmluX2Zs dXNoX3NtYWxsKHRzZCwgdGNhY2hlLCBiaW4sIGJpbmluZCwgcmVtYWluKTsKKwkJYm9vbCByZXQg PSBjYWNoZV9iaW5fZGFsbG9jX2Vhc3koYmluLCBwdHIpOworCQlhc3NlcnQocmV0KTsKKwl9Cit9 CisKK0pFTUFMTE9DX0FMV0FZU19JTkxJTkUgdm9pZAordGNhY2hlX2RhbGxvY19sYXJnZSh0c2Rf dCAqdHNkLCB0Y2FjaGVfdCAqdGNhY2hlLCB2b2lkICpwdHIsIHN6aW5kX3QgYmluaW5kLAorICAg IGJvb2wgc2xvd19wYXRoKSB7CisKKwlhc3NlcnQodGNhY2hlX3NhbGxvYyh0c2RfdHNkbih0c2Qp LCBwdHIpCisJICAgID4gU0NfU01BTExfTUFYQ0xBU1MpOworCWFzc2VydCh0Y2FjaGVfc2FsbG9j KHRzZF90c2RuKHRzZCksIHB0cikgPD0gdGNhY2hlX21heGNsYXNzKTsKKworCWNhY2hlX2Jpbl90 ICpiaW4gPSAmdGNhY2hlLT5iaW5zW2JpbmluZF07CisJaWYgKHVubGlrZWx5KCFjYWNoZV9iaW5f ZGFsbG9jX2Vhc3koYmluLCBwdHIpKSkgeworCQl1bnNpZ25lZCByZW1haW4gPSBjYWNoZV9iaW5f aW5mb19uY2FjaGVkX21heCgKKwkJICAgICZ0Y2FjaGVfYmluX2luZm9bYmluaW5kXSkgPj4gb3B0 X2xnX3RjYWNoZV9mbHVzaF9sYXJnZV9kaXY7CisJCXRjYWNoZV9iaW5fZmx1c2hfbGFyZ2UodHNk LCB0Y2FjaGUsIGJpbiwgYmluaW5kLCByZW1haW4pOworCQlib29sIHJldCA9IGNhY2hlX2Jpbl9k YWxsb2NfZWFzeShiaW4sIHB0cik7CisJCWFzc2VydChyZXQpOworCX0KK30KKworSkVNQUxMT0Nf QUxXQVlTX0lOTElORSB0Y2FjaGVfdCAqCit0Y2FjaGVzX2dldCh0c2RfdCAqdHNkLCB1bnNpZ25l ZCBpbmQpIHsKKwl0Y2FjaGVzX3QgKmVsbSA9ICZ0Y2FjaGVzW2luZF07CisJaWYgKHVubGlrZWx5 KGVsbS0+dGNhY2hlID09IE5VTEwpKSB7CisJCW1hbGxvY19wcmludGYoIjxqZW1hbGxvYz46IGlu dmFsaWQgdGNhY2hlIGlkICgldSkuXG4iLCBpbmQpOworCQlhYm9ydCgpOworCX0gZWxzZSBpZiAo dW5saWtlbHkoZWxtLT50Y2FjaGUgPT0gVENBQ0hFU19FTE1fTkVFRF9SRUlOSVQpKSB7CisJCWVs bS0+dGNhY2hlID0gdGNhY2hlX2NyZWF0ZV9leHBsaWNpdCh0c2QpOworCX0KKwlyZXR1cm4gZWxt LT50Y2FjaGU7Cit9CisKKyNlbmRpZiAvKiBKRU1BTExPQ19JTlRFUk5BTF9UQ0FDSEVfSU5MSU5F U19IICovCgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4z LjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC90Y2FjaGVfc3RydWN0cy5oIGIvMzg5LWRzLWJh c2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC90 Y2FjaGVfc3RydWN0cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3NmQ3 M2QKLS0tIC9kZXYvbnVsbAorKysgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01 LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL3RjYWNoZV9zdHJ1Y3RzLmgKQEAgLTAsMCAr MSw2OCBAQAorI2lmbmRlZiBKRU1BTExPQ19JTlRFUk5BTF9UQ0FDSEVfU1RSVUNUU19ICisjZGVm aW5lIEpFTUFMTE9DX0lOVEVSTkFMX1RDQUNIRV9TVFJVQ1RTX0gKKworI2luY2x1ZGUgImplbWFs bG9jL2ludGVybmFsL2NhY2hlX2Jpbi5oIgorI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL3Fs LmgiCisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvc2MuaCIKKyNpbmNsdWRlICJqZW1hbGxv Yy9pbnRlcm5hbC90aWNrZXIuaCIKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC90c2RfdHlw ZXMuaCIKKworLyoKKyAqIFRoZSB0Y2FjaGUgc3RhdGUgaXMgc3BsaXQgaW50byB0aGUgc2xvdyBh bmQgaG90IHBhdGggZGF0YS4gIEVhY2ggaGFzIGEKKyAqIHBvaW50ZXIgdG8gdGhlIG90aGVyLCBh bmQgdGhlIGRhdGEgYWx3YXlzIGNvbWVzIGluIHBhaXJzLiAgVGhlIGxheW91dCBvZiBlYWNoCisg KiBvZiB0aGVtIHZhcmllcyBpbiBwcmFjdGljZTsgdGNhY2hlX3Nsb3cgbGl2ZXMgaW4gdGhlIFRT RCBmb3IgdGhlIGF1dG9tYXRpYworICogdGNhY2hlLCBhbmQgYXMgcGFydCBvZiBhIGR5bmFtaWMg YWxsb2NhdGlvbiBmb3IgbWFudWFsIGFsbG9jYXRpb25zLiAgS2VlcGluZworICogYSBwb2ludGVy IHRvIHRjYWNoZV9zbG93IGxldHMgdXMgdHJlYXQgdGhlc2UgY2FzZXMgdW5pZm9ybWx5LCByYXRo ZXIgdGhhbgorICogc3BsaXR0aW5nIHVwIHRoZSB0Y2FjaGUgW2RlXWFsbG9jYXRpb24gY29kZSBp bnRvIHRob3NlIHBhdGhzIGNhbGxlZCB3aXRoIHRoZQorICogVFNEIHRjYWNoZSBhbmQgdGhvc2Ug Y2FsbGVkIHdpdGggYSBtYW51YWwgdGNhY2hlLgorICovCisKK3N0cnVjdCB0Y2FjaGVfc2xvd19z IHsKKwkvKiBMZXRzIHVzIHRyYWNrIGFsbCB0aGUgdGNhY2hlcyBpbiBhbiBhcmVuYS4gKi8KKwlx bF9lbG0odGNhY2hlX3Nsb3dfdCkgbGluazsKKworCS8qCisJICogVGhlIGRlc2NyaXB0b3IgbGV0 cyB0aGUgYXJlbmEgZmluZCBvdXIgY2FjaGUgYmlucyB3aXRob3V0IHNlZWluZyB0aGUKKwkgKiB0 Y2FjaGUgZGVmaW5pdGlvbi4gIFRoaXMgZW5hYmxlcyBhcmVuYXMgdG8gYWdncmVnYXRlIHN0YXRz IGFjcm9zcworCSAqIHRjYWNoZXMgd2l0aG91dCBoYXZpbmcgYSB0Y2FjaGUgZGVwZW5kZW5jeS4K KwkgKi8KKwljYWNoZV9iaW5fYXJyYXlfZGVzY3JpcHRvcl90IGNhY2hlX2Jpbl9hcnJheV9kZXNj cmlwdG9yOworCisJLyogVGhlIGFyZW5hIHRoaXMgdGNhY2hlIGlzIGFzc29jaWF0ZWQgd2l0aC4g Ki8KKwlhcmVuYV90CQkqYXJlbmE7CisJLyogTmV4dCBiaW4gdG8gR0MuICovCisJc3ppbmRfdAkJ bmV4dF9nY19iaW47CisJLyogRm9yIHNtYWxsIGJpbnMsIGZpbGwgKG5jYWNoZWRfbWF4ID4+IGxn X2ZpbGxfZGl2KS4gKi8KKwl1aW50OF90CQlsZ19maWxsX2RpdltTQ19OQklOU107CisJLyogRm9y IHNtYWxsIGJpbnMsIHdoZXRoZXIgaGFzIGJlZW4gcmVmaWxsZWQgc2luY2UgbGFzdCBHQy4gKi8K Kwlib29sCQliaW5fcmVmaWxsZWRbU0NfTkJJTlNdOworCS8qCisJICogRm9yIHNtYWxsIGJpbnMs IHRoZSBudW1iZXIgb2YgaXRlbXMgd2UgY2FuIHByZXRlbmQgdG8gZmx1c2ggYmVmb3JlCisJICog YWN0dWFsbHkgZmx1c2hpbmcuCisJICovCisJdWludDhfdAkJYmluX2ZsdXNoX2RlbGF5X2l0ZW1z W1NDX05CSU5TXTsKKwkvKgorCSAqIFRoZSBzdGFydCBvZiB0aGUgYWxsb2NhdGlvbiBjb250YWlu aW5nIHRoZSBkeW5hbWljIGFsbG9jYXRpb24gZm9yCisJICogZWl0aGVyIHRoZSBjYWNoZSBiaW5z IGFsb25lLCBvciB0aGUgY2FjaGUgYmluIG1lbW9yeSBhcyB3ZWxsIGFzIHRoaXMKKwkgKiB0Y2Fj aGVfc2xvd190IGFuZCBpdHMgYXNzb2NpYXRlZCB0Y2FjaGVfdC4KKwkgKi8KKwl2b2lkCQkqZHlu X2FsbG9jOworCisJLyogVGhlIGFzc29jaWF0ZWQgYmlucy4gKi8KKwl0Y2FjaGVfdAkqdGNhY2hl OworfTsKKworc3RydWN0IHRjYWNoZV9zIHsKKwl0Y2FjaGVfc2xvd190CSp0Y2FjaGVfc2xvdzsK KwljYWNoZV9iaW5fdAliaW5zW1RDQUNIRV9OQklOU19NQVhdOworfTsKKworLyogTGlua2FnZSBm b3IgbGlzdCBvZiBhdmFpbGFibGUgKHByZXZpb3VzbHkgdXNlZCkgZXhwbGljaXQgdGNhY2hlIElE cy4gKi8KK3N0cnVjdCB0Y2FjaGVzX3MgeworCXVuaW9uIHsKKwkJdGNhY2hlX3QJKnRjYWNoZTsK KwkJdGNhY2hlc190CSpuZXh0OworCX07Cit9OworCisjZW5kaWYgLyogSkVNQUxMT0NfSU5URVJO QUxfVENBQ0hFX1NUUlVDVFNfSCAqLwoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1 aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvdGNhY2hlX3R5cGVz LmggYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFs bG9jL2ludGVybmFsL3RjYWNoZV90eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAuLjU4MzY3N2UKLS0tIC9kZXYvbnVsbAorKysgYi8zODktZHMtYmFzZS0zLjMuMC1idWls ZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL3RjYWNoZV90eXBlcy5o CkBAIC0wLDAgKzEsMzUgQEAKKyNpZm5kZWYgSkVNQUxMT0NfSU5URVJOQUxfVENBQ0hFX1RZUEVT X0gKKyNkZWZpbmUgSkVNQUxMT0NfSU5URVJOQUxfVENBQ0hFX1RZUEVTX0gKKworI2luY2x1ZGUg ImplbWFsbG9jL2ludGVybmFsL3NjLmgiCisKK3R5cGVkZWYgc3RydWN0IHRjYWNoZV9zbG93X3Mg dGNhY2hlX3Nsb3dfdDsKK3R5cGVkZWYgc3RydWN0IHRjYWNoZV9zIHRjYWNoZV90OwordHlwZWRl ZiBzdHJ1Y3QgdGNhY2hlc19zIHRjYWNoZXNfdDsKKworLyoKKyAqIHRjYWNoZSBwb2ludGVycyBj bG9zZSB0byBOVUxMIGFyZSB1c2VkIHRvIGVuY29kZSBzdGF0ZSBpbmZvcm1hdGlvbiB0aGF0IGlz CisgKiB1c2VkIGZvciB0d28gcHVycG9zZXM6IHByZXZlbnRpbmcgdGhyZWFkIGNhY2hpbmcgb24g YSBwZXIgdGhyZWFkIGJhc2lzIGFuZAorICogY2xlYW5pbmcgdXAgZHVyaW5nIHRocmVhZCBzaHV0 ZG93bi4KKyAqLworI2RlZmluZSBUQ0FDSEVfU1RBVEVfRElTQUJMRUQJCSgodGNhY2hlX3QgKiko dWludHB0cl90KTEpCisjZGVmaW5lIFRDQUNIRV9TVEFURV9SRUlOQ0FSTkFURUQJKCh0Y2FjaGVf dCAqKSh1aW50cHRyX3QpMikKKyNkZWZpbmUgVENBQ0hFX1NUQVRFX1BVUkdBVE9SWQkJKCh0Y2Fj aGVfdCAqKSh1aW50cHRyX3QpMykKKyNkZWZpbmUgVENBQ0hFX1NUQVRFX01BWAkJVENBQ0hFX1NU QVRFX1BVUkdBVE9SWQorCisvKiBVc2VkIGluIFRTRCBzdGF0aWMgaW5pdGlhbGl6ZXIgb25seS4g UmVhbCBpbml0IGluIHRzZF90Y2FjaGVfZGF0YV9pbml0KCkuICovCisjZGVmaW5lIFRDQUNIRV9a RVJPX0lOSVRJQUxJWkVSIHswfQorI2RlZmluZSBUQ0FDSEVfU0xPV19aRVJPX0lOSVRJQUxJWkVS IHswfQorCisvKiBVc2VkIGluIFRTRCBzdGF0aWMgaW5pdGlhbGl6ZXIgb25seS4gV2lsbCBiZSBp bml0aWFsaXplZCB0byBvcHRfdGNhY2hlLiAqLworI2RlZmluZSBUQ0FDSEVfRU5BQkxFRF9aRVJP X0lOSVRJQUxJWkVSIGZhbHNlCisKKy8qIFVzZWQgZm9yIGV4cGxpY2l0IHRjYWNoZSBvbmx5LiBN ZWFucyBmbHVzaGVkIGJ1dCBub3QgZGVzdHJveWVkLiAqLworI2RlZmluZSBUQ0FDSEVTX0VMTV9O RUVEX1JFSU5JVCAoKHRjYWNoZV90ICopKHVpbnRwdHJfdCkxKQorCisjZGVmaW5lIFRDQUNIRV9M R19NQVhDTEFTU19MSU1JVCAyMyAvKiB0Y2FjaGVfbWF4Y2xhc3MgPSA4TSAqLworI2RlZmluZSBU Q0FDSEVfTUFYQ0xBU1NfTElNSVQgKChzaXplX3QpMSA8PCBUQ0FDSEVfTEdfTUFYQ0xBU1NfTElN SVQpCisjZGVmaW5lIFRDQUNIRV9OQklOU19NQVggKFNDX05CSU5TICsgU0NfTkdST1VQICoJCQlc CisgICAgKFRDQUNIRV9MR19NQVhDTEFTU19MSU1JVCAtIFNDX0xHX0xBUkdFX01JTkNMQVNTKSAr IDEpCisKKyNlbmRpZiAvKiBKRU1BTExPQ19JTlRFUk5BTF9UQ0FDSEVfVFlQRVNfSCAqLwoKZGlm ZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUv amVtYWxsb2MvaW50ZXJuYWwvdGVzdF9ob29rcy5oIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQv amVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC90ZXN0X2hvb2tzLmgKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Q1MzBiNQotLS0gL2Rldi9udWxsCisr KyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxs b2MvaW50ZXJuYWwvdGVzdF9ob29rcy5oCkBAIC0wLDAgKzEsMjQgQEAKKyNpZm5kZWYgSkVNQUxM T0NfSU5URVJOQUxfVEVTVF9IT09LU19ICisjZGVmaW5lIEpFTUFMTE9DX0lOVEVSTkFMX1RFU1Rf SE9PS1NfSAorCitleHRlcm4gSkVNQUxMT0NfRVhQT1JUIHZvaWQgKCp0ZXN0X2hvb2tzX2FyZW5h X25ld19ob29rKSgpOworZXh0ZXJuIEpFTUFMTE9DX0VYUE9SVCB2b2lkICgqdGVzdF9ob29rc19s aWJjX2hvb2spKCk7CisKKyNpZiBkZWZpbmVkKEpFTUFMTE9DX0pFVCkgfHwgZGVmaW5lZChKRU1B TExPQ19VTklUX1RFU1QpCisjICBkZWZpbmUgSkVNQUxMT0NfVEVTVF9IT09LKGZuLCBob29rKSAo KHZvaWQpKGhvb2sgIT0gTlVMTCAmJiAoaG9vaygpLCAwKSksIGZuKQorCisjICBkZWZpbmUgb3Bl biBKRU1BTExPQ19URVNUX0hPT0sob3BlbiwgdGVzdF9ob29rc19saWJjX2hvb2spCisjICBkZWZp bmUgcmVhZCBKRU1BTExPQ19URVNUX0hPT0socmVhZCwgdGVzdF9ob29rc19saWJjX2hvb2spCisj ICBkZWZpbmUgd3JpdGUgSkVNQUxMT0NfVEVTVF9IT09LKHdyaXRlLCB0ZXN0X2hvb2tzX2xpYmNf aG9vaykKKyMgIGRlZmluZSByZWFkbGluayBKRU1BTExPQ19URVNUX0hPT0socmVhZGxpbmssIHRl c3RfaG9va3NfbGliY19ob29rKQorIyAgZGVmaW5lIGNsb3NlIEpFTUFMTE9DX1RFU1RfSE9PSyhj bG9zZSwgdGVzdF9ob29rc19saWJjX2hvb2spCisjICBkZWZpbmUgY3JlYXQgSkVNQUxMT0NfVEVT VF9IT09LKGNyZWF0LCB0ZXN0X2hvb2tzX2xpYmNfaG9vaykKKyMgIGRlZmluZSBzZWN1cmVfZ2V0 ZW52IEpFTUFMTE9DX1RFU1RfSE9PSyhzZWN1cmVfZ2V0ZW52LCB0ZXN0X2hvb2tzX2xpYmNfaG9v aykKKy8qIE5vdGUgdGhhdCB0aGlzIGlzIHVuZGVmJ2QgYW5kIHJlLWRlZmluZSdkIGluIHNyYy9w cm9mLmMuICovCisjICBkZWZpbmUgX1Vud2luZF9CYWNrdHJhY2UgSkVNQUxMT0NfVEVTVF9IT09L KF9VbndpbmRfQmFja3RyYWNlLCB0ZXN0X2hvb2tzX2xpYmNfaG9vaykKKyNlbHNlCisjICBkZWZp bmUgSkVNQUxMT0NfVEVTVF9IT09LKGZuLCBob29rKSBmbgorI2VuZGlmCisKKworI2VuZGlmIC8q IEpFTUFMTE9DX0lOVEVSTkFMX1RFU1RfSE9PS1NfSCAqLwoKZGlmZiAtLWdpdCBhLzM4OS1kcy1i YXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwv dGhyZWFkX2V2ZW50LmggYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9p bmNsdWRlL2plbWFsbG9jL2ludGVybmFsL3RocmVhZF9ldmVudC5oCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAuLjJmNGUxYjMKLS0tIC9kZXYvbnVsbAorKysgYi8zODktZHMtYmFz ZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL3Ro cmVhZF9ldmVudC5oCkBAIC0wLDAgKzEsMzAxIEBACisjaWZuZGVmIEpFTUFMTE9DX0lOVEVSTkFM X1RIUkVBRF9FVkVOVF9ICisjZGVmaW5lIEpFTUFMTE9DX0lOVEVSTkFMX1RIUkVBRF9FVkVOVF9I CisKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC90c2QuaCIKKworLyogInRlIiBpcyBzaG9y dCBmb3IgInRocmVhZF9ldmVudCIgKi8KKworLyoKKyAqIFRFX01JTl9TVEFSVF9XQUlUIHNob3Vs ZCBub3QgZXhjZWVkIHRoZSBtaW5pbWFsIGFsbG9jYXRpb24gdXNpemUuCisgKi8KKyNkZWZpbmUg VEVfTUlOX1NUQVJUX1dBSVQgKCh1aW50NjRfdCkxVSkKKyNkZWZpbmUgVEVfTUFYX1NUQVJUX1dB SVQgVUlOVDY0X01BWAorCisvKgorICogTWF4aW11bSB0aHJlc2hvbGQgb24gdGhyZWFkXyhkZSlh bGxvY2F0ZWRfbmV4dF9ldmVudF9mYXN0LCBzbyB0aGF0IHRoZXJlIGlzCisgKiBubyBuZWVkIHRv IGNoZWNrIG92ZXJmbG93IGluIG1hbGxvYyBmYXN0IHBhdGguIChUaGUgYWxsb2NhdGlvbiBzaXpl IGluIG1hbGxvYworICogZmFzdCBwYXRoIG5ldmVyIGV4Y2VlZHMgU0NfTE9PS1VQX01BWENMQVNT LikKKyAqLworI2RlZmluZSBURV9ORVhUX0VWRU5UX0ZBU1RfTUFYIChVSU5UNjRfTUFYIC0gU0Nf TE9PS1VQX01BWENMQVNTICsgMVUpCisKKy8qCisgKiBUaGUgbWF4IGludGVydmFsIGhlbHBzIG1h a2Ugc3VyZSB0aGF0IG1hbGxvYyBzdGF5cyBvbiB0aGUgZmFzdCBwYXRoIGluIHRoZQorICogY29t bW9uIGNhc2UsIGkuZS4gdGhyZWFkX2FsbG9jYXRlZCA8IHRocmVhZF9hbGxvY2F0ZWRfbmV4dF9l dmVudF9mYXN0LiAgV2hlbgorICogdGhyZWFkX2FsbG9jYXRlZCBpcyB3aXRoaW4gYW4gZXZlbnQn cyBkaXN0YW5jZSB0byBURV9ORVhUX0VWRU5UX0ZBU1RfTUFYCisgKiBhYm92ZSwgdGhyZWFkX2Fs bG9jYXRlZF9uZXh0X2V2ZW50X2Zhc3QgaXMgd3JhcHBlZCBhcm91bmQgYW5kIHdlIGZhbGwgYmFj ayB0bworICogdGhlIG1lZGl1bS1mYXN0IHBhdGguIFRoZSBtYXggaW50ZXJ2YWwgbWFrZXMgc3Vy ZSB0aGF0IHdlJ3JlIG5vdCBzdGF5aW5nIG9uCisgKiB0aGUgZmFsbGJhY2sgY2FzZSBmb3IgdG9v IGxvbmcsIGV2ZW4gaWYgdGhlcmUncyBubyBhY3RpdmUgZXZlbnQgb3IgaWYgYWxsCisgKiBhY3Rp dmUgZXZlbnRzIGhhdmUgbG9uZyB3YWl0IHRpbWVzLgorICovCisjZGVmaW5lIFRFX01BWF9JTlRF UlZBTCAoKHVpbnQ2NF90KSg0VSA8PCAyMCkpCisKKy8qCisgKiBJbnZhbGlkIGVsYXBzZWQgdGlt ZSwgZm9yIHNpdHVhdGlvbnMgd2hlcmUgZWxhcHNlZCB0aW1lIGlzIG5vdCBuZWVkZWQuICBTZWUK KyAqIGNvbW1lbnRzIGluIHRocmVhZF9ldmVudC5jIGZvciBtb3JlIGluZm8uCisgKi8KKyNkZWZp bmUgVEVfSU5WQUxJRF9FTEFQU0VEIFVJTlQ2NF9NQVgKKwordHlwZWRlZiBzdHJ1Y3QgdGVfY3R4 X3MgeworCWJvb2wgaXNfYWxsb2M7CisJdWludDY0X3QgKmN1cnJlbnQ7CisJdWludDY0X3QgKmxh c3RfZXZlbnQ7CisJdWludDY0X3QgKm5leHRfZXZlbnQ7CisJdWludDY0X3QgKm5leHRfZXZlbnRf ZmFzdDsKK30gdGVfY3R4X3Q7CisKK3ZvaWQgdGVfYXNzZXJ0X2ludmFyaWFudHNfZGVidWcodHNk X3QgKnRzZCk7Cit2b2lkIHRlX2V2ZW50X3RyaWdnZXIodHNkX3QgKnRzZCwgdGVfY3R4X3QgKmN0 eCk7Cit2b2lkIHRlX3JlY29tcHV0ZV9mYXN0X3RocmVzaG9sZCh0c2RfdCAqdHNkKTsKK3ZvaWQg dHNkX3RlX2luaXQodHNkX3QgKnRzZCk7CisKKy8qCisgKiBMaXN0IG9mIGFsbCBldmVudHMsIGlu IHRoZSBmb2xsb3dpbmcgZm9ybWF0OgorICogIEUoZXZlbnQsCQkoY29uZGl0aW9uKSwgaXNfYWxs b2NfZXZlbnQpCisgKi8KKyNkZWZpbmUgSVRFUkFURV9PVkVSX0FMTF9FVkVOVFMJCQkJCQlcCisg ICAgRSh0Y2FjaGVfZ2MsCQkob3B0X3RjYWNoZV9nY19pbmNyX2J5dGVzID4gMCksIHRydWUpCVwK KyAgICBFKHByb2Zfc2FtcGxlLAkJKGNvbmZpZ19wcm9mICYmIG9wdF9wcm9mKSwgdHJ1ZSkgIAlc CisgICAgRShzdGF0c19pbnRlcnZhbCwJCShvcHRfc3RhdHNfaW50ZXJ2YWwgPj0gMCksIHRydWUp ICAgCVwKKyAgICBFKHRjYWNoZV9nY19kYWxsb2MsCQkob3B0X3RjYWNoZV9nY19pbmNyX2J5dGVz ID4gMCksIGZhbHNlKQlcCisgICAgRShwZWFrX2FsbG9jLAkJY29uZmlnX3N0YXRzLCB0cnVlKQkJ CVwKKyAgICBFKHBlYWtfZGFsbG9jLAkJY29uZmlnX3N0YXRzLCBmYWxzZSkKKworI2RlZmluZSBF KGV2ZW50LCBjb25kaXRpb25fdW51c2VkLCBpc19hbGxvY19ldmVudF91bnVzZWQpCQlcCisgICAg QyhldmVudCMjX2V2ZW50X3dhaXQpCisKKy8qIExpc3Qgb2YgYWxsIHRocmVhZCBldmVudCBjb3Vu dGVycy4gKi8KKyNkZWZpbmUgSVRFUkFURV9PVkVSX0FMTF9DT1VOVEVSUwkJCQkJXAorICAgIEMo dGhyZWFkX2FsbG9jYXRlZCkJCQkJCQkJXAorICAgIEModGhyZWFkX2FsbG9jYXRlZF9sYXN0X2V2 ZW50KQkJCQkJXAorICAgIElURVJBVEVfT1ZFUl9BTExfRVZFTlRTCQkJCQkJXAorICAgIEMocHJv Zl9zYW1wbGVfbGFzdF9ldmVudCkJCQkJCQlcCisgICAgQyhzdGF0c19pbnRlcnZhbF9sYXN0X2V2 ZW50KQorCisvKiBHZXR0ZXJzIGRpcmVjdGx5IHdyYXAgVFNEIGdldHRlcnMuICovCisjZGVmaW5l IEMoY291bnRlcikJCQkJCQkJXAorSkVNQUxMT0NfQUxXQVlTX0lOTElORSB1aW50NjRfdAkJCQkJ CVwKK2NvdW50ZXIjI19nZXQodHNkX3QgKnRzZCkgewkJCQkJCVwKKwlyZXR1cm4gdHNkXyMjY291 bnRlciMjX2dldCh0c2QpOwkJCQlcCit9CisKK0lURVJBVEVfT1ZFUl9BTExfQ09VTlRFUlMKKyN1 bmRlZiBDCisKKy8qCisgKiBTZXR0ZXJzIGNhbGwgdGhlIFRTRCBwb2ludGVyIGdldHRlcnMgcmF0 aGVyIHRoYW4gdGhlIFRTRCBzZXR0ZXJzLCBzbyB0aGF0CisgKiB0aGUgY291bnRlcnMgY2FuIGJl IG1vZGlmaWVkIGV2ZW4gd2hlbiBUU0Qgc3RhdGUgaXMgcmVpbmNhcm5hdGVkIG9yCisgKiBtaW5p bWFsX2luaXRpYWxpemVkOiBpZiBhbiBldmVudCBpcyB0cmlnZ2VyZWQgaW4gc3VjaCBjYXNlcywg d2Ugd2lsbAorICogdGVtcG9yYXJpbHkgZGVsYXkgdGhlIGV2ZW50IGFuZCBsZXQgaXQgYmUgaW1t ZWRpYXRlbHkgdHJpZ2dlcmVkIGF0IHRoZSBuZXh0CisgKiBhbGxvY2F0aW9uIGNhbGwuCisgKi8K KyNkZWZpbmUgQyhjb3VudGVyKQkJCQkJCQlcCitKRU1BTExPQ19BTFdBWVNfSU5MSU5FIHZvaWQJ CQkJCQlcCitjb3VudGVyIyNfc2V0KHRzZF90ICp0c2QsIHVpbnQ2NF90IHYpIHsJCQkJCVwKKwkq dHNkXyMjY291bnRlciMjcF9nZXQodHNkKSA9IHY7CQkJCQlcCit9CisKK0lURVJBVEVfT1ZFUl9B TExfQ09VTlRFUlMKKyN1bmRlZiBDCisKKy8qCisgKiBGb3IgZ2VuZXJhdGluZyBfZXZlbnRfd2Fp dCBnZXR0ZXIgLyBzZXR0ZXIgZnVuY3Rpb25zIGZvciBlYWNoIGluZGl2aWR1YWwKKyAqIGV2ZW50 LgorICovCisjdW5kZWYgRQorCisvKgorICogVGhlIG1hbGxvYyBhbmQgZnJlZSBmYXN0cGF0aCBn ZXR0ZXJzIC0tIHVzZSB0aGUgdW5zYWZlIGdldHRlcnMgc2luY2UgdHNkIG1heQorICogYmUgbm9u LW5vbWluYWwsIGluIHdoaWNoIGNhc2UgdGhlIGZhc3RfdGhyZXNob2xkIHdpbGwgYmUgc2V0IHRv IDAuICBUaGlzCisgKiBhbGxvd3MgY2hlY2tpbmcgZm9yIGV2ZW50cyBhbmQgdHNkIG5vbi1ub21p bmFsIGluIGEgc2luZ2xlIGJyYW5jaC4KKyAqCisgKiBOb3RlIHRoYXQgdGhlc2UgY2FuIG9ubHkg YmUgdXNlZCBvbiB0aGUgZmFzdHBhdGguCisgKi8KK0pFTUFMTE9DX0FMV0FZU19JTkxJTkUgdm9p ZAordGVfbWFsbG9jX2Zhc3RwYXRoX2N0eCh0c2RfdCAqdHNkLCB1aW50NjRfdCAqYWxsb2NhdGVk LCB1aW50NjRfdCAqdGhyZXNob2xkKSB7CisJKmFsbG9jYXRlZCA9ICp0c2RfdGhyZWFkX2FsbG9j YXRlZHBfZ2V0X3Vuc2FmZSh0c2QpOworCSp0aHJlc2hvbGQgPSAqdHNkX3RocmVhZF9hbGxvY2F0 ZWRfbmV4dF9ldmVudF9mYXN0cF9nZXRfdW5zYWZlKHRzZCk7CisJYXNzZXJ0KCp0aHJlc2hvbGQg PD0gVEVfTkVYVF9FVkVOVF9GQVNUX01BWCk7Cit9CisKK0pFTUFMTE9DX0FMV0FZU19JTkxJTkUg dm9pZAordGVfZnJlZV9mYXN0cGF0aF9jdHgodHNkX3QgKnRzZCwgdWludDY0X3QgKmRlYWxsb2Nh dGVkLCB1aW50NjRfdCAqdGhyZXNob2xkKSB7CisJLyogVW5zYWZlIGdldHRlcnMgc2luY2UgdGhp cyBtYXkgaGFwcGVuIGJlZm9yZSB0c2RfaW5pdC4gKi8KKwkqZGVhbGxvY2F0ZWQgPSAqdHNkX3Ro cmVhZF9kZWFsbG9jYXRlZHBfZ2V0X3Vuc2FmZSh0c2QpOworCSp0aHJlc2hvbGQgPSAqdHNkX3Ro cmVhZF9kZWFsbG9jYXRlZF9uZXh0X2V2ZW50X2Zhc3RwX2dldF91bnNhZmUodHNkKTsKKwlhc3Nl cnQoKnRocmVzaG9sZCA8PSBURV9ORVhUX0VWRU5UX0ZBU1RfTUFYKTsKK30KKworSkVNQUxMT0Nf QUxXQVlTX0lOTElORSBib29sCit0ZV9jdHhfaXNfYWxsb2ModGVfY3R4X3QgKmN0eCkgeworCXJl dHVybiBjdHgtPmlzX2FsbG9jOworfQorCitKRU1BTExPQ19BTFdBWVNfSU5MSU5FIHVpbnQ2NF90 Cit0ZV9jdHhfY3VycmVudF9ieXRlc19nZXQodGVfY3R4X3QgKmN0eCkgeworCXJldHVybiAqY3R4 LT5jdXJyZW50OworfQorCitKRU1BTExPQ19BTFdBWVNfSU5MSU5FIHZvaWQKK3RlX2N0eF9jdXJy ZW50X2J5dGVzX3NldCh0ZV9jdHhfdCAqY3R4LCB1aW50NjRfdCB2KSB7CisJKmN0eC0+Y3VycmVu dCA9IHY7Cit9CisKK0pFTUFMTE9DX0FMV0FZU19JTkxJTkUgdWludDY0X3QKK3RlX2N0eF9sYXN0 X2V2ZW50X2dldCh0ZV9jdHhfdCAqY3R4KSB7CisJcmV0dXJuICpjdHgtPmxhc3RfZXZlbnQ7Cit9 CisKK0pFTUFMTE9DX0FMV0FZU19JTkxJTkUgdm9pZAordGVfY3R4X2xhc3RfZXZlbnRfc2V0KHRl X2N0eF90ICpjdHgsIHVpbnQ2NF90IHYpIHsKKwkqY3R4LT5sYXN0X2V2ZW50ID0gdjsKK30KKwor LyogQmVsb3cgMyBmb3IgbmV4dF9ldmVudF9mYXN0LiAqLworSkVNQUxMT0NfQUxXQVlTX0lOTElO RSB1aW50NjRfdAordGVfY3R4X25leHRfZXZlbnRfZmFzdF9nZXQodGVfY3R4X3QgKmN0eCkgewor CXVpbnQ2NF90IHYgPSAqY3R4LT5uZXh0X2V2ZW50X2Zhc3Q7CisJYXNzZXJ0KHYgPD0gVEVfTkVY VF9FVkVOVF9GQVNUX01BWCk7CisJcmV0dXJuIHY7Cit9CisKK0pFTUFMTE9DX0FMV0FZU19JTkxJ TkUgdm9pZAordGVfY3R4X25leHRfZXZlbnRfZmFzdF9zZXQodGVfY3R4X3QgKmN0eCwgdWludDY0 X3QgdikgeworCWFzc2VydCh2IDw9IFRFX05FWFRfRVZFTlRfRkFTVF9NQVgpOworCSpjdHgtPm5l eHRfZXZlbnRfZmFzdCA9IHY7Cit9CisKK0pFTUFMTE9DX0FMV0FZU19JTkxJTkUgdm9pZAordGVf bmV4dF9ldmVudF9mYXN0X3NldF9ub25fbm9taW5hbCh0c2RfdCAqdHNkKSB7CisJLyoKKwkgKiBT ZXQgdGhlIGZhc3QgdGhyZXNob2xkcyB0byB6ZXJvIHdoZW4gdHNkIGlzIG5vbi1ub21pbmFsLiAg VXNlIHRoZQorCSAqIHVuc2FmZSBnZXR0ZXIgYXMgdGhpcyBtYXkgZ2V0IGNhbGxlZCBkdXJpbmcg dHNkIGluaXQgYW5kIGNsZWFuIHVwLgorCSAqLworCSp0c2RfdGhyZWFkX2FsbG9jYXRlZF9uZXh0 X2V2ZW50X2Zhc3RwX2dldF91bnNhZmUodHNkKSA9IDA7CisJKnRzZF90aHJlYWRfZGVhbGxvY2F0 ZWRfbmV4dF9ldmVudF9mYXN0cF9nZXRfdW5zYWZlKHRzZCkgPSAwOworfQorCisvKiBGb3IgbmV4 dF9ldmVudC4gIFNldHRlciBhbHNvIHVwZGF0ZXMgdGhlIGZhc3QgdGhyZXNob2xkLiAqLworSkVN QUxMT0NfQUxXQVlTX0lOTElORSB1aW50NjRfdAordGVfY3R4X25leHRfZXZlbnRfZ2V0KHRlX2N0 eF90ICpjdHgpIHsKKwlyZXR1cm4gKmN0eC0+bmV4dF9ldmVudDsKK30KKworSkVNQUxMT0NfQUxX QVlTX0lOTElORSB2b2lkCit0ZV9jdHhfbmV4dF9ldmVudF9zZXQodHNkX3QgKnRzZCwgdGVfY3R4 X3QgKmN0eCwgdWludDY0X3QgdikgeworCSpjdHgtPm5leHRfZXZlbnQgPSB2OworCXRlX3JlY29t cHV0ZV9mYXN0X3RocmVzaG9sZCh0c2QpOworfQorCisvKgorICogVGhlIGZ1bmN0aW9uIGNoZWNr cyBpbiBkZWJ1ZyBtb2RlIHdoZXRoZXIgdGhlIHRocmVhZCBldmVudCBjb3VudGVycyBhcmUgaW4K KyAqIGEgY29uc2lzdGVudCBzdGF0ZSwgd2hpY2ggZm9ybXMgdGhlIGludmFyaWFudHMgYmVmb3Jl IGFuZCBhZnRlciBlYWNoIHJvdW5kCisgKiBvZiB0aHJlYWQgZXZlbnQgaGFuZGxpbmcgdGhhdCB3 ZSBjYW4gcmVseSBvbiBhbmQgbmVlZCB0byBwcm9taXNlLgorICogVGhlIGludmFyaWFudHMgYXJl IG9ubHkgdGVtcG9yYXJpbHkgdmlvbGF0ZWQgaW4gdGhlIG1pZGRsZSBvZgorICogdGVfZXZlbnRf YWR2YW5jZSgpIGlmIGFuIGV2ZW50IGlzIHRyaWdnZXJlZCAodGhlIHRlX2V2ZW50X3RyaWdnZXIo KSBjYWxsIGF0CisgKiB0aGUgZW5kIHdpbGwgcmVzdG9yZSB0aGUgaW52YXJpYW50cykuCisgKi8K K0pFTUFMTE9DX0FMV0FZU19JTkxJTkUgdm9pZAordGVfYXNzZXJ0X2ludmFyaWFudHModHNkX3Qg KnRzZCkgeworCWlmIChjb25maWdfZGVidWcpIHsKKwkJdGVfYXNzZXJ0X2ludmFyaWFudHNfZGVi dWcodHNkKTsKKwl9Cit9CisKK0pFTUFMTE9DX0FMV0FZU19JTkxJTkUgdm9pZAordGVfY3R4X2dl dCh0c2RfdCAqdHNkLCB0ZV9jdHhfdCAqY3R4LCBib29sIGlzX2FsbG9jKSB7CisJY3R4LT5pc19h bGxvYyA9IGlzX2FsbG9jOworCWlmIChpc19hbGxvYykgeworCQljdHgtPmN1cnJlbnQgPSB0c2Rf dGhyZWFkX2FsbG9jYXRlZHBfZ2V0KHRzZCk7CisJCWN0eC0+bGFzdF9ldmVudCA9IHRzZF90aHJl YWRfYWxsb2NhdGVkX2xhc3RfZXZlbnRwX2dldCh0c2QpOworCQljdHgtPm5leHRfZXZlbnQgPSB0 c2RfdGhyZWFkX2FsbG9jYXRlZF9uZXh0X2V2ZW50cF9nZXQodHNkKTsKKwkJY3R4LT5uZXh0X2V2 ZW50X2Zhc3QgPQorCQkgICAgdHNkX3RocmVhZF9hbGxvY2F0ZWRfbmV4dF9ldmVudF9mYXN0cF9n ZXQodHNkKTsKKwl9IGVsc2UgeworCQljdHgtPmN1cnJlbnQgPSB0c2RfdGhyZWFkX2RlYWxsb2Nh dGVkcF9nZXQodHNkKTsKKwkJY3R4LT5sYXN0X2V2ZW50ID0gdHNkX3RocmVhZF9kZWFsbG9jYXRl ZF9sYXN0X2V2ZW50cF9nZXQodHNkKTsKKwkJY3R4LT5uZXh0X2V2ZW50ID0gdHNkX3RocmVhZF9k ZWFsbG9jYXRlZF9uZXh0X2V2ZW50cF9nZXQodHNkKTsKKwkJY3R4LT5uZXh0X2V2ZW50X2Zhc3Qg PQorCQkgICAgdHNkX3RocmVhZF9kZWFsbG9jYXRlZF9uZXh0X2V2ZW50X2Zhc3RwX2dldCh0c2Qp OworCX0KK30KKworLyoKKyAqIFRoZSBsb29rYWhlYWQgZnVuY3Rpb25hbGl0eSBmYWNpbGl0YXRl cyBldmVudHMgdG8gYmUgYWJsZSB0byBsb29rYWhlYWQsIGkuZS4KKyAqIHdpdGhvdXQgdG91Y2hp bmcgdGhlIGV2ZW50IGNvdW50ZXJzLCB0byBkZXRlcm1pbmUgd2hldGhlciBhbiBldmVudCB3b3Vs ZCBiZQorICogdHJpZ2dlcmVkLiAgVGhlIGV2ZW50IGNvdW50ZXJzIGFyZSBub3QgYWR2YW5jZWQg dW50aWwgdGhlIGVuZCBvZiB0aGUKKyAqIGFsbG9jYXRpb24gLyBkZWFsbG9jYXRpb24gY2FsbHMs IHNvIHRoZSBsb29rYWhlYWQgY2FuIGJlIHVzZWZ1bCBpZiBzb21lCisgKiBwcmVwYXJhdGlvbiB3 b3JrIGZvciBzb21lIGV2ZW50IG11c3QgYmUgZG9uZSBlYXJseSBpbiB0aGUgYWxsb2NhdGlvbiAv CisgKiBkZWFsbG9jYXRpb24gY2FsbHMuCisgKgorICogQ3VycmVudGx5IG9ubHkgdGhlIHByb2Zp bGluZyBzYW1wbGluZyBldmVudCBuZWVkcyB0aGUgbG9va2FoZWFkCisgKiBmdW5jdGlvbmFsaXR5 LCBzbyB3ZSBkb24ndCB5ZXQgZGVmaW5lIGdlbmVyYWwgcHVycG9zZSBsb29rYWhlYWQgZnVuY3Rp b25zLgorICoKKyAqIFN1cnBsdXMgaXMgYSB0ZXJtaW5vbG9neSByZWZlcnJpbmcgdG8gdGhlIGFt b3VudCBvZiBieXRlcyBiZXlvbmQgd2hhdCdzCisgKiBuZWVkZWQgZm9yIHRyaWdnZXJpbmcgYW4g ZXZlbnQsIHdoaWNoIGNhbiBiZSBhIHVzZWZ1bCBxdWFudGl0eSB0byBoYXZlIGluCisgKiBnZW5l cmFsIHdoZW4gbG9va2FoZWFkIGlzIGJlaW5nIGNhbGxlZC4KKyAqLworCitKRU1BTExPQ19BTFdB WVNfSU5MSU5FIGJvb2wKK3RlX3Byb2Zfc2FtcGxlX2V2ZW50X2xvb2thaGVhZF9zdXJwbHVzKHRz ZF90ICp0c2QsIHNpemVfdCB1c2l6ZSwKKyAgICBzaXplX3QgKnN1cnBsdXMpIHsKKwlpZiAoc3Vy cGx1cyAhPSBOVUxMKSB7CisJCS8qCisJCSAqIFRoaXMgaXMgYSBkZWFkIHN0b3JlOiB0aGUgc3Vy cGx1cyB3aWxsIGJlIG92ZXJ3cml0dGVuIGJlZm9yZQorCQkgKiBhbnkgcmVhZC4gIFRoZSBpbml0 aWFsaXphdGlvbiBzdXBwcmVzc2VzIGNvbXBpbGVyIHdhcm5pbmdzLgorCQkgKiBNZWFud2hpbGUs IHVzaW5nIFNJWkVfTUFYIHRvIGluaXRpYWxpemUgaXMgZ29vZCBmb3IKKwkJICogZGVidWdnaW5n IHB1cnBvc2UsIGJlY2F1c2UgYSB2YWxpZCBzdXJwbHVzIHZhbHVlIGlzIHN0cmljdGx5CisJCSAq IGxlc3MgdGhhbiB1c2l6ZSwgd2hpY2ggaXMgYXQgbW9zdCBTSVpFX01BWC4KKwkJICovCisJCSpz dXJwbHVzID0gU0laRV9NQVg7CisJfQorCWlmICh1bmxpa2VseSghdHNkX25vbWluYWwodHNkKSB8 fCB0c2RfcmVlbnRyYW5jeV9sZXZlbF9nZXQodHNkKSA+IDApKSB7CisJCXJldHVybiBmYWxzZTsK Kwl9CisJLyogVGhlIHN1YnRyYWN0aW9uIGlzIGludGVudGlvbmFsbHkgc3VzY2VwdGlibGUgdG8g dW5kZXJmbG93LiAqLworCXVpbnQ2NF90IGFjY3VtYnl0ZXMgPSB0c2RfdGhyZWFkX2FsbG9jYXRl ZF9nZXQodHNkKSArIHVzaXplIC0KKwkgICAgdHNkX3RocmVhZF9hbGxvY2F0ZWRfbGFzdF9ldmVu dF9nZXQodHNkKTsKKwl1aW50NjRfdCBzYW1wbGVfd2FpdCA9IHRzZF9wcm9mX3NhbXBsZV9ldmVu dF93YWl0X2dldCh0c2QpOworCWlmIChhY2N1bWJ5dGVzIDwgc2FtcGxlX3dhaXQpIHsKKwkJcmV0 dXJuIGZhbHNlOworCX0KKwlhc3NlcnQoYWNjdW1ieXRlcyAtIHNhbXBsZV93YWl0IDwgKHVpbnQ2 NF90KXVzaXplKTsKKwlpZiAoc3VycGx1cyAhPSBOVUxMKSB7CisJCSpzdXJwbHVzID0gKHNpemVf dCkoYWNjdW1ieXRlcyAtIHNhbXBsZV93YWl0KTsKKwl9CisJcmV0dXJuIHRydWU7Cit9CisKK0pF TUFMTE9DX0FMV0FZU19JTkxJTkUgYm9vbAordGVfcHJvZl9zYW1wbGVfZXZlbnRfbG9va2FoZWFk KHRzZF90ICp0c2QsIHNpemVfdCB1c2l6ZSkgeworCXJldHVybiB0ZV9wcm9mX3NhbXBsZV9ldmVu dF9sb29rYWhlYWRfc3VycGx1cyh0c2QsIHVzaXplLCBOVUxMKTsKK30KKworSkVNQUxMT0NfQUxX QVlTX0lOTElORSB2b2lkCit0ZV9ldmVudF9hZHZhbmNlKHRzZF90ICp0c2QsIHNpemVfdCB1c2l6 ZSwgYm9vbCBpc19hbGxvYykgeworCXRlX2Fzc2VydF9pbnZhcmlhbnRzKHRzZCk7CisKKwl0ZV9j dHhfdCBjdHg7CisJdGVfY3R4X2dldCh0c2QsICZjdHgsIGlzX2FsbG9jKTsKKworCXVpbnQ2NF90 IGJ5dGVzX2JlZm9yZSA9IHRlX2N0eF9jdXJyZW50X2J5dGVzX2dldCgmY3R4KTsKKwl0ZV9jdHhf Y3VycmVudF9ieXRlc19zZXQoJmN0eCwgYnl0ZXNfYmVmb3JlICsgdXNpemUpOworCisJLyogVGhl IHN1YnRyYWN0aW9uIGlzIGludGVudGlvbmFsbHkgc3VzY2VwdGlibGUgdG8gdW5kZXJmbG93LiAq LworCWlmIChsaWtlbHkodXNpemUgPCB0ZV9jdHhfbmV4dF9ldmVudF9nZXQoJmN0eCkgLSBieXRl c19iZWZvcmUpKSB7CisJCXRlX2Fzc2VydF9pbnZhcmlhbnRzKHRzZCk7CisJfSBlbHNlIHsKKwkJ dGVfZXZlbnRfdHJpZ2dlcih0c2QsICZjdHgpOworCX0KK30KKworSkVNQUxMT0NfQUxXQVlTX0lO TElORSB2b2lkCit0aHJlYWRfZGFsbG9jX2V2ZW50KHRzZF90ICp0c2QsIHNpemVfdCB1c2l6ZSkg eworCXRlX2V2ZW50X2FkdmFuY2UodHNkLCB1c2l6ZSwgZmFsc2UpOworfQorCitKRU1BTExPQ19B TFdBWVNfSU5MSU5FIHZvaWQKK3RocmVhZF9hbGxvY19ldmVudCh0c2RfdCAqdHNkLCBzaXplX3Qg dXNpemUpIHsKKwl0ZV9ldmVudF9hZHZhbmNlKHRzZCwgdXNpemUsIHRydWUpOworfQorCisjZW5k aWYgLyogSkVNQUxMT0NfSU5URVJOQUxfVEhSRUFEX0VWRU5UX0ggKi8KCmRpZmYgLS1naXQgYS8z ODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2lu dGVybmFsL3RpY2tlci5oIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAv aW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC90aWNrZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwLi42YjUxZGRlCi0tLSAvZGV2L251bGwKKysrIGIvMzg5LWRzLWJhc2UtMy4z LjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC90aWNrZXIu aApAQCAtMCwwICsxLDE3NSBAQAorI2lmbmRlZiBKRU1BTExPQ19JTlRFUk5BTF9USUNLRVJfSAor I2RlZmluZSBKRU1BTExPQ19JTlRFUk5BTF9USUNLRVJfSAorCisjaW5jbHVkZSAiamVtYWxsb2Mv aW50ZXJuYWwvcHJuZy5oIgorI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL3V0aWwuaCIKKwor LyoqCisgKiBBIHRpY2tlciBtYWtlcyBpdCBlYXN5IHRvIGNvdW50LWRvd24gZXZlbnRzIHVudGls IHNvbWUgbGltaXQuICBZb3UKKyAqIHRpY2tlcl9pbml0IHRoZSB0aWNrZXIgdG8gdHJpZ2dlciBl dmVyeSBudGlja3MgZXZlbnRzLiAgWW91IHRoZW4gbm90aWZ5IGl0CisgKiB0aGF0IGFuIGV2ZW50 IGhhcyBvY2N1cnJlZCB3aXRoIGNhbGxzIHRvIHRpY2tlcl90aWNrIChvciB0aGF0IG50aWNrcyBl dmVudHMKKyAqIGhhdmUgb2NjdXJyZWQgd2l0aCBhIGNhbGwgdG8gdGlja2VyX3RpY2tzKSwgd2hp Y2ggd2lsbCByZXR1cm4gdHJ1ZSAoYW5kIHJlc2V0CisgKiB0aGUgY291bnRlcikgaWYgdGhlIGNv dW50ZG93biBoaXQgemVyby4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgdGlja2VyX3MgdGlja2VyX3Q7 CitzdHJ1Y3QgdGlja2VyX3MgeworCWludDMyX3QgdGljazsKKwlpbnQzMl90IG50aWNrczsKK307 CisKK3N0YXRpYyBpbmxpbmUgdm9pZAordGlja2VyX2luaXQodGlja2VyX3QgKnRpY2tlciwgaW50 MzJfdCBudGlja3MpIHsKKwl0aWNrZXItPnRpY2sgPSBudGlja3M7CisJdGlja2VyLT5udGlja3Mg PSBudGlja3M7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAordGlja2VyX2NvcHkodGlja2VyX3Qg KnRpY2tlciwgY29uc3QgdGlja2VyX3QgKm90aGVyKSB7CisJKnRpY2tlciA9ICpvdGhlcjsKK30K Kworc3RhdGljIGlubGluZSBpbnQzMl90Cit0aWNrZXJfcmVhZChjb25zdCB0aWNrZXJfdCAqdGlj a2VyKSB7CisJcmV0dXJuIHRpY2tlci0+dGljazsKK30KKworLyoKKyAqIE5vdCBpbnRlbmRlZCB0 byBiZSBhIHB1YmxpYyBBUEkuICBVbmZvcnR1bmF0ZWx5LCBvbiB4ODYsIG5laXRoZXIgZ2NjIG5v cgorICogY2xhbmcgc2VlbXMgc21hcnQgZW5vdWdoIHRvIHR1cm4KKyAqICAgdGlja2VyLT50aWNr IC09IG50aWNrczsKKyAqICAgaWYgKHVubGlrZWx5KHRpY2tlci0+dGljayA8IDApKSB7CisgKiAg ICAgZml4dXAgdGlja2VyCisgKiAgICAgcmV0dXJuIHRydWU7CisgKiAgIH0KKyAqICAgcmV0dXJu IGZhbHNlOworICogaW50bworICogICBzdWJxICVudGlja3NfcmVnLCAoJXRpY2tlcl9yZWcpCisg KiAgIGpzIGZpeHVwIHRpY2tlcgorICoKKyAqIHVubGVzcyB3ZSBmb3JjZSAiZml4dXAgdGlja2Vy IiBvdXQgb2YgbGluZS4gIEluIHRoYXQgY2FzZSwgZ2NjIGdldHMgaXQgcmlnaHQsCisgKiBidXQg Y2xhbmcgbm93IGRvZXMgd29yc2UgdGhhbiBiZWZvcmUuICBTbywgb24geDg2IHdpdGggZ2NjLCB3 ZSBmb3JjZSBpdCBvdXQKKyAqIG9mIGxpbmUsIGJ1dCBvdGhlcndpc2UgbGV0IHRoZSBpbmxpbmlu ZyBvY2N1ci4gIE9yZGluYXJpbHkgdGhpcyB3b3VsZG4ndCBiZQorICogd29ydGggdGhlIGhhc3Ns ZSwgYnV0IHRoaXMgaXMgb24gdGhlIGZhc3QgcGF0aCBvZiBib3RoIG1hbGxvYyBhbmQgZnJlZSAo dmlhCisgKiB0Y2FjaGVfZXZlbnQpLgorICovCisjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgIWRl ZmluZWQoX19jbGFuZ19fKQkJCQlcCisgICAgJiYgKGRlZmluZWQoX194ODZfNjRfXykgfHwgZGVm aW5lZChfX2kzODZfXykpCitKRU1BTExPQ19OT0lOTElORQorI2VuZGlmCitzdGF0aWMgYm9vbAor dGlja2VyX2ZpeHVwKHRpY2tlcl90ICp0aWNrZXIpIHsKKwl0aWNrZXItPnRpY2sgPSB0aWNrZXIt Pm50aWNrczsKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGlubGluZSBib29sCit0aWNrZXJf dGlja3ModGlja2VyX3QgKnRpY2tlciwgaW50MzJfdCBudGlja3MpIHsKKwl0aWNrZXItPnRpY2sg LT0gbnRpY2tzOworCWlmICh1bmxpa2VseSh0aWNrZXItPnRpY2sgPCAwKSkgeworCQlyZXR1cm4g dGlja2VyX2ZpeHVwKHRpY2tlcik7CisJfQorCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGlu bGluZSBib29sCit0aWNrZXJfdGljayh0aWNrZXJfdCAqdGlja2VyKSB7CisJcmV0dXJuIHRpY2tl cl90aWNrcyh0aWNrZXIsIDEpOworfQorCisvKgorICogVHJ5IHRvIHRpY2suICBJZiB0aWNrZXIg d291bGQgZmlyZSwgcmV0dXJuIHRydWUsIGJ1dCByZWx5IG9uCisgKiBzbG93cGF0aCB0byByZXNl dCB0aWNrZXIuCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbAordGlja2VyX3RyeXRpY2sodGlja2Vy X3QgKnRpY2tlcikgeworCS0tdGlja2VyLT50aWNrOworCWlmICh1bmxpa2VseSh0aWNrZXItPnRp Y2sgPCAwKSkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9CisJcmV0dXJuIGZhbHNlOworfQorCisvKgor ICogVGhlIHRpY2tlcl9nZW9tX3QgaXMgbXVjaCBsaWtlIHRoZSB0aWNrZXJfdCwgZXhjZXB0IHRo YXQgaW5zdGVhZCBvZiB0aWNrZXIKKyAqIGhhdmluZyBhIGNvbnN0YW50IGNvdW50ZG93biwgaXQg aGFzIGFuIGFwcHJveGltYXRlIG9uZTsgZWFjaCB0aWNrIGhhcworICogYXBwcm94aW1hdGVseSBh IDEvbnRpY2tzIGNoYW5jZSBvZiB0cmlnZ2VyaW5nIHRoZSBjb3VudC4KKyAqCisgKiBUaGUgbW90 aXZhdGlvbiBpcyBpbiB0cmlnZ2VyaW5nIGFyZW5hIGRlY2F5LiAgV2l0aCBhIG5haXZlIHN0cmF0 ZWd5LCBlYWNoCisgKiB0aHJlYWQgd291bGQgbWFpbnRhaW4gYSB0aWNrZXIgcGVyIGFyZW5hLCBh bmQgY2hlY2sgaWYgZGVjYXkgaXMgbmVjZXNzYXJ5CisgKiBlYWNoIHRpbWUgdGhhdCB0aGUgYXJl bmEncyB0aWNrZXIgZmlyZXMuICBUaGlzIGhhcyB0d28gY29zdHM6CisgKiAtIFNpbmNlIHVuZGVy IHJlYXNvbmFibGUgYXNzdW1wdGlvbnMgYm90aCB0aHJlYWRzIGFuZCBhcmVuYXMgY2FuIHNjYWxl CisgKiAgIGxpbmVhcmx5IHdpdGggdGhlIG51bWJlciBvZiBDUFVzLCBtYWludGFpbmluZyBwZXIt YXJlbmEgZGF0YSBpbiBlYWNoIHRocmVhZAorICogICBzY2FsZXMgcXVhZHJhdGljYWxseSB3aXRo IHRoZSBudW1iZXIgb2YgQ1BVcy4KKyAqIC0gVGhlc2UgdGlja2VycyBhcmUgb2Z0ZW4gYSBjYWNo ZSBtaXNzIGRvd24gdGNhY2hlIGZsdXNoIHBhdGh3YXlzLgorICoKKyAqIEJ5IGdpdmluZyBlYWNo IHRpY2sgYSAxL250aWNrcyBjaGFuY2Ugb2YgZmlyaW5nLCB3ZSBzdGlsbCBtYWludGFpbiB0aGUg c2FtZQorICogYXZlcmFnZSBudW1iZXIgb2YgdGlja3MtdW50aWwtZmlyaW5nIHBlciBhcmVuYSwg d2l0aCBvbmx5IGEgc2luZ2xlIHRpY2tlcidzCisgKiB3b3J0aCBvZiBtZXRhZGF0YS4KKyAqLwor CisvKiBTZWUgdGlja2VyLmMgZm9yIGFuIGV4cGxhbmF0aW9uIG9mIHRoZXNlIGNvbnN0YW50cy4g Ki8KKyNkZWZpbmUgVElDS0VSX0dFT01fTkJJVFMgNgorI2RlZmluZSBUSUNLRVJfR0VPTV9NVUwg NjEKK2V4dGVybiBjb25zdCB1aW50OF90IHRpY2tlcl9nZW9tX3RhYmxlWzEgPDwgVElDS0VSX0dF T01fTkJJVFNdOworCisvKiBOb3QgYWN0dWFsbHkgYW55IGRpZmZlcmVudCBmcm9tIHRpY2tlcl90 OyBqdXN0IGZvciB0eXBlIHNhZmV0eS4gKi8KK3R5cGVkZWYgc3RydWN0IHRpY2tlcl9nZW9tX3Mg dGlja2VyX2dlb21fdDsKK3N0cnVjdCB0aWNrZXJfZ2VvbV9zIHsKKwlpbnQzMl90IHRpY2s7CisJ aW50MzJfdCBudGlja3M7Cit9OworCisvKgorICogSnVzdCBwaWNrIHRoZSBhdmVyYWdlIGRlbGF5 IGZvciB0aGUgZmlyc3QgY291bnRlci4gIFdlJ3JlIG1vcmUgY29uY2VybmVkIHdpdGgKKyAqIHRo ZSBiZWhhdmlvciBvdmVyIGxvbmcgcGVyaW9kcyBvZiB0aW1lIHJhdGhlciB0aGFuIHRoZSBleGFj dCB0aW1pbmcgb2YgdGhlCisgKiBpbml0aWFsIHRpY2tzLgorICovCisjZGVmaW5lIFRJQ0tFUl9H RU9NX0lOSVQobnRpY2tzKSB7bnRpY2tzLCBudGlja3N9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAor dGlja2VyX2dlb21faW5pdCh0aWNrZXJfZ2VvbV90ICp0aWNrZXIsIGludDMyX3QgbnRpY2tzKSB7 CisJLyoKKwkgKiBNYWtlIHN1cmUgdGhlcmUncyBubyBvdmVyZmxvdyBwb3NzaWJsZS4gIFRoaXMg c2hvdWxkbid0IHJlYWxseSBiZSBhCisJICogcHJvYmxlbSBmb3IgcmVhc29uYWJsZSBudGlja3Mg Y2hvaWNlcywgd2hpY2ggYXJlIGFsbCBzdGF0aWMgYW5kCisJICogcmVsYXRpdmVseSBzbWFsbC4K KwkgKi8KKwlhc3NlcnQoKHVpbnQ2NF90KW50aWNrcyAqICh1aW50NjRfdCkyNTUgLyAodWludDY0 X3QpVElDS0VSX0dFT01fTVVMCisJICAgIDw9ICh1aW50NjRfdClJTlQzMl9NQVgpOworCXRpY2tl ci0+dGljayA9IG50aWNrczsKKwl0aWNrZXItPm50aWNrcyA9IG50aWNrczsKK30KKworc3RhdGlj IGlubGluZSBpbnQzMl90Cit0aWNrZXJfZ2VvbV9yZWFkKGNvbnN0IHRpY2tlcl9nZW9tX3QgKnRp Y2tlcikgeworCXJldHVybiB0aWNrZXItPnRpY2s7Cit9CisKKy8qIFNhbWUgZGVhbCBhcyBhYm92 ZS4gKi8KKyNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAhZGVmaW5lZChfX2NsYW5nX18pCQkJCVwK KyAgICAmJiAoZGVmaW5lZChfX3g4Nl82NF9fKSB8fCBkZWZpbmVkKF9faTM4Nl9fKSkKK0pFTUFM TE9DX05PSU5MSU5FCisjZW5kaWYKK3N0YXRpYyBib29sCit0aWNrZXJfZ2VvbV9maXh1cCh0aWNr ZXJfZ2VvbV90ICp0aWNrZXIsIHVpbnQ2NF90ICpwcm5nX3N0YXRlKSB7CisJdWludDY0X3QgaWR4 ID0gcHJuZ19sZ19yYW5nZV91NjQocHJuZ19zdGF0ZSwgVElDS0VSX0dFT01fTkJJVFMpOworCXRp Y2tlci0+dGljayA9ICh1aW50MzJfdCkoCisJICAgICh1aW50NjRfdCl0aWNrZXItPm50aWNrcyAq ICh1aW50NjRfdCl0aWNrZXJfZ2VvbV90YWJsZVtpZHhdCisJICAgIC8gKHVpbnQ2NF90KVRJQ0tF Ul9HRU9NX01VTCk7CisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbAordGlj a2VyX2dlb21fdGlja3ModGlja2VyX2dlb21fdCAqdGlja2VyLCB1aW50NjRfdCAqcHJuZ19zdGF0 ZSwgaW50MzJfdCBudGlja3MpIHsKKwl0aWNrZXItPnRpY2sgLT0gbnRpY2tzOworCWlmICh1bmxp a2VseSh0aWNrZXItPnRpY2sgPCAwKSkgeworCQlyZXR1cm4gdGlja2VyX2dlb21fZml4dXAodGlj a2VyLCBwcm5nX3N0YXRlKTsKKwl9CisJcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgaW5saW5l IGJvb2wKK3RpY2tlcl9nZW9tX3RpY2sodGlja2VyX2dlb21fdCAqdGlja2VyLCB1aW50NjRfdCAq cHJuZ19zdGF0ZSkgeworCXJldHVybiB0aWNrZXJfZ2VvbV90aWNrcyh0aWNrZXIsIHBybmdfc3Rh dGUsIDEpOworfQorCisjZW5kaWYgLyogSkVNQUxMT0NfSU5URVJOQUxfVElDS0VSX0ggKi8KCmRp ZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRl L2plbWFsbG9jL2ludGVybmFsL3RzZC5oIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxs b2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC90c2QuaApuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwLi42NmQ2ODgyCi0tLSAvZGV2L251bGwKKysrIGIvMzg5LWRzLWJh c2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC90 c2QuaApAQCAtMCwwICsxLDUxOCBAQAorI2lmbmRlZiBKRU1BTExPQ19JTlRFUk5BTF9UU0RfSAor I2RlZmluZSBKRU1BTExPQ19JTlRFUk5BTF9UU0RfSAorCisjaW5jbHVkZSAiamVtYWxsb2MvaW50 ZXJuYWwvYWN0aXZpdHlfY2FsbGJhY2suaCIKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9h cmVuYV90eXBlcy5oIgorI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2Fzc2VydC5oIgorI2lu Y2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2Jpbl90eXBlcy5oIgorI2luY2x1ZGUgImplbWFsbG9j L2ludGVybmFsL2plbWFsbG9jX2ludGVybmFsX2V4dGVybnMuaCIKKyNpbmNsdWRlICJqZW1hbGxv Yy9pbnRlcm5hbC9wZWFrLmgiCisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvcHJvZl90eXBl cy5oIgorI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL3FsLmgiCisjaW5jbHVkZSAiamVtYWxs b2MvaW50ZXJuYWwvcnRyZWVfdHNkLmgiCisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvdGNh Y2hlX3R5cGVzLmgiCisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvdGNhY2hlX3N0cnVjdHMu aCIKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC91dGlsLmgiCisjaW5jbHVkZSAiamVtYWxs b2MvaW50ZXJuYWwvd2l0bmVzcy5oIgorCisvKgorICogVGhyZWFkLVNwZWNpZmljLURhdGEgbGF5 b3V0CisgKgorICogQXQgbGVhc3Qgc29tZSB0aHJlYWQtbG9jYWwgZGF0YSBnZXRzIHRvdWNoZWQg b24gdGhlIGZhc3QtcGF0aCBvZiBhbG1vc3QgYWxsCisgKiBtYWxsb2Mgb3BlcmF0aW9ucy4gIEJ1 dCBtdWNoIG9mIGl0IGlzIG9ubHkgbmVjZXNzYXJ5IGRvd24gc2xvdy1wYXRocywgb3IKKyAqIHRl c3RpbmcuICBXZSB3YW50IHRvIGNvbG9jYXRlIHRoZSBmYXN0LXBhdGggZGF0YSBzbyB0aGF0IGl0 IGNhbiBsaXZlIG9uIHRoZQorICogc2FtZSBjYWNoZWxpbmUgaWYgcG9zc2libGUuICBTbyB3ZSBk ZWZpbmUgdGhyZWUgdGllcnMgb2YgaG90bmVzczoKKyAqIFRTRF9EQVRBX0ZBU1Q6IFRvdWNoZWQg b24gdGhlIGFsbG9jL2RhbGxvYyBmYXN0IHBhdGhzLgorICogVFNEX0RBVEFfU0xPVzogVG91Y2hl ZCBkb3duIHNsb3cgcGF0aHMuICAiU2xvdyIgaGVyZSBpcyBzb3J0IG9mIGdlbmVyYWw7CisgKiAg ICAgdGhlcmUgYXJlICJzZW1pLXNsb3ciIHBhdGhzIGxpa2UgIm5vdCBhIHNpemVkIGRlYWxsb2Nh dGlvbiwgYnV0IGNhbiBzdGlsbAorICogICAgIGxpdmUgaW4gdGhlIHRjYWNoZSIuICBXZSdsbCB3 YW50IHRvIGtlZXAgdGhlc2UgY2xvc2VyIHRvIHRoZSBmYXN0LXBhdGgKKyAqICAgICBkYXRhLgor ICogVFNEX0RBVEFfU0xPV0VSOiBPbmx5IHRvdWNoZWQgaW4gdGVzdCBvciBkZWJ1ZyBtb2Rlcywg b3Igbm90IHRvdWNoZWQgYXQgYWxsLgorICoKKyAqIEFuIGFkZGl0aW9uYWwgY29uY2VybiBpcyB0 aGF0IHRoZSBsYXJnZXIgdGNhY2hlIGJpbnMgd29uJ3QgYmUgdXNlZCAod2UgaGF2ZSBhCisgKiBi aW4gcGVyIHNpemUgY2xhc3MsIGJ1dCBieSBkZWZhdWx0IG9ubHkgY2FjaGUgcmVsYXRpdmVseSBz bWFsbCBvYmplY3RzKS4gIFNvCisgKiB0aGUgZWFybGllciBiaW5zIGFyZSBpbiB0aGUgVFNEX0RB VEFfRkFTVCB0aWVyLCBidXQgdGhlIGxhdGVyIG9uZXMgYXJlIGluIHRoZQorICogVFNEX0RBVEFf U0xPV0VSIHRpZXIuCisgKgorICogQXMgYSByZXN1bHQgb2YgYWxsIHRoaXMsIHdlIHB1dCB0aGUg c2xvdyBkYXRhIGZpcnN0LCB0aGVuIHRoZSBmYXN0IGRhdGEsIHRoZW4KKyAqIHRoZSBzbG93ZXIg ZGF0YSwgd2hpbGUga2VlcGluZyB0aGUgdGNhY2hlIGFzIHRoZSBsYXN0IGVsZW1lbnQgb2YgdGhl IGZhc3QKKyAqIGRhdGEgKHNvIHRoYXQgdGhlIGZhc3QgLT4gc2xvd2VyIHRyYW5zaXRpb24gaGFw cGVucyBtaWR3YXkgdGhyb3VnaCB0aGUKKyAqIHRjYWNoZSkuICBXaGlsZSB3ZSBkb24ndCB5ZXQg cGxheSBhbGlnbm1lbnQgdHJpY2tzIHRvIGd1YXJhbnRlZSBpdCwgdGhpcworICogaW5jcmVhc2Vz IG91ciBvZGRzIG9mIGdldHRpbmcgc29tZSBjYWNoZS9wYWdlIGxvY2FsaXR5IG9uIGZhc3QgcGF0 aHMuCisgKi8KKworI2lmZGVmIEpFTUFMTE9DX0pFVAordHlwZWRlZiB2b2lkICgqdGVzdF9jYWxs YmFja190KShpbnQgKik7CisjICBkZWZpbmUgTUFMTE9DX1RTRF9URVNUX0RBVEFfSU5JVCAweDcy YjY1YzEwCisjICBkZWZpbmUgTUFMTE9DX1RFU1RfVFNEIFwKKyAgICBPKHRlc3RfZGF0YSwJCWlu dCwJCQlpbnQpCQlcCisgICAgTyh0ZXN0X2NhbGxiYWNrLAkJdGVzdF9jYWxsYmFja190LAlpbnQp CisjICBkZWZpbmUgTUFMTE9DX1RFU1RfVFNEX0lOSVRJQUxJWkVSICwgTUFMTE9DX1RTRF9URVNU X0RBVEFfSU5JVCwgTlVMTAorI2Vsc2UKKyMgIGRlZmluZSBNQUxMT0NfVEVTVF9UU0QKKyMgIGRl ZmluZSBNQUxMT0NfVEVTVF9UU0RfSU5JVElBTElaRVIKKyNlbmRpZgorCit0eXBlZGVmIHFsX2Vs bSh0c2RfdCkgdHNkX2xpbmtfdDsKKworLyogIE8obmFtZSwJCQl0eXBlLAkJCW51bGxhYmxlIHR5 cGUpICovCisjZGVmaW5lIFRTRF9EQVRBX1NMT1cJCQkJCQkJXAorICAgIE8odGNhY2hlX2VuYWJs ZWQsCQlib29sLAkJCWJvb2wpCQlcCisgICAgTyhyZWVudHJhbmN5X2xldmVsLAkJaW50OF90LAkJ CWludDhfdCkJCVwKKyAgICBPKHRocmVhZF9hbGxvY2F0ZWRfbGFzdF9ldmVudCwJdWludDY0X3Qs CXVpbnQ2NF90KQlcCisgICAgTyh0aHJlYWRfYWxsb2NhdGVkX25leHRfZXZlbnQsCXVpbnQ2NF90 LAl1aW50NjRfdCkJXAorICAgIE8odGhyZWFkX2RlYWxsb2NhdGVkX2xhc3RfZXZlbnQsCXVpbnQ2 NF90LAl1aW50NjRfdCkJXAorICAgIE8odGhyZWFkX2RlYWxsb2NhdGVkX25leHRfZXZlbnQsCXVp bnQ2NF90LAl1aW50NjRfdCkJXAorICAgIE8odGNhY2hlX2djX2V2ZW50X3dhaXQsCXVpbnQ2NF90 LAkJdWludDY0X3QpCVwKKyAgICBPKHRjYWNoZV9nY19kYWxsb2NfZXZlbnRfd2FpdCwJdWludDY0 X3QsCXVpbnQ2NF90KQlcCisgICAgTyhwcm9mX3NhbXBsZV9ldmVudF93YWl0LAl1aW50NjRfdCwJ CXVpbnQ2NF90KQlcCisgICAgTyhwcm9mX3NhbXBsZV9sYXN0X2V2ZW50LAl1aW50NjRfdCwJCXVp bnQ2NF90KQlcCisgICAgTyhzdGF0c19pbnRlcnZhbF9ldmVudF93YWl0LAl1aW50NjRfdCwJdWlu dDY0X3QpCVwKKyAgICBPKHN0YXRzX2ludGVydmFsX2xhc3RfZXZlbnQsCXVpbnQ2NF90LAl1aW50 NjRfdCkJXAorICAgIE8ocGVha19hbGxvY19ldmVudF93YWl0LAl1aW50NjRfdCwJCXVpbnQ2NF90 KQlcCisgICAgTyhwZWFrX2RhbGxvY19ldmVudF93YWl0LAl1aW50NjRfdCwJdWludDY0X3QpCQlc CisgICAgTyhwcm9mX3RkYXRhLAkJcHJvZl90ZGF0YV90ICosCQlwcm9mX3RkYXRhX3QgKikJXAor ICAgIE8ocHJuZ19zdGF0ZSwJCXVpbnQ2NF90LAkJdWludDY0X3QpCVwKKyAgICBPKHNhbl9leHRl bnRzX3VudGlsX2d1YXJkX3NtYWxsLAl1aW50NjRfdCwJdWludDY0X3QpCVwKKyAgICBPKHNhbl9l eHRlbnRzX3VudGlsX2d1YXJkX2xhcmdlLAl1aW50NjRfdCwJdWludDY0X3QpCVwKKyAgICBPKGlh cmVuYSwJCQlhcmVuYV90ICosCQlhcmVuYV90ICopCVwKKyAgICBPKGFyZW5hLAkJCWFyZW5hX3Qg KiwJCWFyZW5hX3QgKikJXAorICAgIE8oYXJlbmFfZGVjYXlfdGlja2VyLAl0aWNrZXJfZ2VvbV90 LAkJdGlja2VyX2dlb21fdCkJXAorICAgIE8oc2VjX3NoYXJkLAkJdWludDhfdCwJCXVpbnQ4X3Qp CVwKKyAgICBPKGJpbnNoYXJkcywJCXRzZF9iaW5zaGFyZHNfdCwJdHNkX2JpbnNoYXJkc190KVwK KyAgICBPKHRzZF9saW5rLAkJCXRzZF9saW5rX3QsCQl0c2RfbGlua190KQlcCisgICAgTyhpbl9o b29rLAkJCWJvb2wsCQkJYm9vbCkJCVwKKyAgICBPKHBlYWssCQkJcGVha190LAkJCXBlYWtfdCkJ CVwKKyAgICBPKGFjdGl2aXR5X2NhbGxiYWNrX3RodW5rLAlhY3Rpdml0eV9jYWxsYmFja190aHVu a190LAkJXAorCWFjdGl2aXR5X2NhbGxiYWNrX3RodW5rX3QpCQkJCQlcCisgICAgTyh0Y2FjaGVf c2xvdywJCXRjYWNoZV9zbG93X3QsCQl0Y2FjaGVfc2xvd190KQlcCisgICAgTyhydHJlZV9jdHgs CQlydHJlZV9jdHhfdCwJCXJ0cmVlX2N0eF90KQorCisjZGVmaW5lIFRTRF9EQVRBX1NMT1dfSU5J VElBTElaRVIJCQkJCVwKKyAgICAvKiB0Y2FjaGVfZW5hYmxlZCAqLwlUQ0FDSEVfRU5BQkxFRF9a RVJPX0lOSVRJQUxJWkVSLAlcCisgICAgLyogcmVlbnRyYW5jeV9sZXZlbCAqLwkwLAkJCQkJXAor ICAgIC8qIHRocmVhZF9hbGxvY2F0ZWRfbGFzdF9ldmVudCAqLwkwLAkJCQlcCisgICAgLyogdGhy ZWFkX2FsbG9jYXRlZF9uZXh0X2V2ZW50ICovCTAsCQkJCVwKKyAgICAvKiB0aHJlYWRfZGVhbGxv Y2F0ZWRfbGFzdF9ldmVudCAqLwkwLAkJCQlcCisgICAgLyogdGhyZWFkX2RlYWxsb2NhdGVkX25l eHRfZXZlbnQgKi8JMCwJCQkJXAorICAgIC8qIHRjYWNoZV9nY19ldmVudF93YWl0ICovCQkwLAkJ CQlcCisgICAgLyogdGNhY2hlX2djX2RhbGxvY19ldmVudF93YWl0ICovCTAsCQkJCVwKKyAgICAv KiBwcm9mX3NhbXBsZV9ldmVudF93YWl0ICovCTAsCQkJCVwKKyAgICAvKiBwcm9mX3NhbXBsZV9s YXN0X2V2ZW50ICovCTAsCQkJCVwKKyAgICAvKiBzdGF0c19pbnRlcnZhbF9ldmVudF93YWl0ICov CTAsCQkJCVwKKyAgICAvKiBzdGF0c19pbnRlcnZhbF9sYXN0X2V2ZW50ICovCTAsCQkJCVwKKyAg ICAvKiBwZWFrX2FsbG9jX2V2ZW50X3dhaXQgKi8JCTAsCQkJCVwKKyAgICAvKiBwZWFrX2RhbGxv Y19ldmVudF93YWl0ICovCTAsCQkJCVwKKyAgICAvKiBwcm9mX3RkYXRhICovCQlOVUxMLAkJCQkJ XAorICAgIC8qIHBybmdfc3RhdGUgKi8JCTAsCQkJCQlcCisgICAgLyogc2FuX2V4dGVudHNfdW50 aWxfZ3VhcmRfc21hbGwgKi8JMCwJCQkJXAorICAgIC8qIHNhbl9leHRlbnRzX3VudGlsX2d1YXJk X2xhcmdlICovCTAsCQkJCVwKKyAgICAvKiBpYXJlbmEgKi8JCU5VTEwsCQkJCQlcCisgICAgLyog YXJlbmEgKi8JCQlOVUxMLAkJCQkJXAorICAgIC8qIGFyZW5hX2RlY2F5X3RpY2tlciAqLwkJCQkJ CVwKKwlUSUNLRVJfR0VPTV9JTklUKEFSRU5BX0RFQ0FZX05USUNLU19QRVJfVVBEQVRFKSwJCVwK KyAgICAvKiBzZWNfc2hhcmQgKi8JCSh1aW50OF90KS0xLAkJCQlcCisgICAgLyogYmluc2hhcmRz ICovCQlUU0RfQklOU0hBUkRTX1pFUk9fSU5JVElBTElaRVIsCQlcCisgICAgLyogdHNkX2xpbmsg Ki8JCXtOVUxMfSwJCQkJCVwKKyAgICAvKiBpbl9ob29rICovCQlmYWxzZSwJCQkJCVwKKyAgICAv KiBwZWFrICovCQkJUEVBS19JTklUSUFMSVpFUiwJCQlcCisgICAgLyogYWN0aXZpdHlfY2FsbGJh Y2tfdGh1bmsgKi8JCQkJCVwKKwlBQ1RJVklUWV9DQUxMQkFDS19USFVOS19JTklUSUFMSVpFUiwJ CQkJXAorICAgIC8qIHRjYWNoZV9zbG93ICovCQlUQ0FDSEVfU0xPV19aRVJPX0lOSVRJQUxJWkVS LAkJXAorICAgIC8qIHJ0cmVlX2N0eCAqLwkJUlRSRUVfQ1RYX0lOSVRJQUxJWkVSLAorCisvKiAg TyhuYW1lLAkJCXR5cGUsCQkJbnVsbGFibGUgdHlwZSkgKi8KKyNkZWZpbmUgVFNEX0RBVEFfRkFT VAkJCQkJCQlcCisgICAgTyh0aHJlYWRfYWxsb2NhdGVkLAkJdWludDY0X3QsCQl1aW50NjRfdCkJ XAorICAgIE8odGhyZWFkX2FsbG9jYXRlZF9uZXh0X2V2ZW50X2Zhc3QsCXVpbnQ2NF90LAl1aW50 NjRfdCkJXAorICAgIE8odGhyZWFkX2RlYWxsb2NhdGVkLAl1aW50NjRfdCwJCXVpbnQ2NF90KQlc CisgICAgTyh0aHJlYWRfZGVhbGxvY2F0ZWRfbmV4dF9ldmVudF9mYXN0LCB1aW50NjRfdCwJdWlu dDY0X3QpCVwKKyAgICBPKHRjYWNoZSwJCQl0Y2FjaGVfdCwJCXRjYWNoZV90KQorCisjZGVmaW5l IFRTRF9EQVRBX0ZBU1RfSU5JVElBTElaRVIJCQkJCVwKKyAgICAvKiB0aHJlYWRfYWxsb2NhdGVk ICovCTAsCQkJCQlcCisgICAgLyogdGhyZWFkX2FsbG9jYXRlZF9uZXh0X2V2ZW50X2Zhc3QgKi8g MCwgCQkJCVwKKyAgICAvKiB0aHJlYWRfZGVhbGxvY2F0ZWQgKi8JMCwJCQkJCVwKKyAgICAvKiB0 aHJlYWRfZGVhbGxvY2F0ZWRfbmV4dF9ldmVudF9mYXN0ICovCTAsCQkJXAorICAgIC8qIHRjYWNo ZSAqLwkJVENBQ0hFX1pFUk9fSU5JVElBTElaRVIsCisKKy8qICBPKG5hbWUsCQkJdHlwZSwJCQlu dWxsYWJsZSB0eXBlKSAqLworI2RlZmluZSBUU0RfREFUQV9TTE9XRVIJCQkJCQkJXAorICAgIE8o d2l0bmVzc190c2QsICAgICAgICAgICAgICB3aXRuZXNzX3RzZF90LAkJd2l0bmVzc190c2RuX3Qp CVwKKyAgICBNQUxMT0NfVEVTVF9UU0QKKworI2RlZmluZSBUU0RfREFUQV9TTE9XRVJfSU5JVElB TElaRVIJCQkJCVwKKyAgICAvKiB3aXRuZXNzICovCQlXSVRORVNTX1RTRF9JTklUSUFMSVpFUgkJ CVwKKyAgICAvKiB0ZXN0IGRhdGEgKi8JCU1BTExPQ19URVNUX1RTRF9JTklUSUFMSVpFUgorCisK KyNkZWZpbmUgVFNEX0lOSVRJQUxJWkVSIHsJCQkJCQlcCisgICAgCQkJCVRTRF9EQVRBX1NMT1df SU5JVElBTElaRVIJCVwKKyAgICAvKiBzdGF0ZSAqLwkJCUFUT01JQ19JTklUKHRzZF9zdGF0ZV91 bmluaXRpYWxpemVkKSwJXAorICAgIAkJCQlUU0RfREFUQV9GQVNUX0lOSVRJQUxJWkVSCQlcCisg ICAgCQkJCVRTRF9EQVRBX1NMT1dFUl9JTklUSUFMSVpFUgkJXAorfQorCisjaWYgZGVmaW5lZChK RU1BTExPQ19NQUxMT0NfVEhSRUFEX0NMRUFOVVApIHx8IGRlZmluZWQoX1dJTjMyKQordm9pZCBf bWFsbG9jX3RzZF9jbGVhbnVwX3JlZ2lzdGVyKGJvb2wgKCpmKSh2b2lkKSk7CisjZW5kaWYKKwor dm9pZCAqbWFsbG9jX3RzZF9tYWxsb2Moc2l6ZV90IHNpemUpOwordm9pZCBtYWxsb2NfdHNkX2Rh bGxvYyh2b2lkICp3cmFwcGVyKTsKK3RzZF90ICptYWxsb2NfdHNkX2Jvb3QwKHZvaWQpOwordm9p ZCBtYWxsb2NfdHNkX2Jvb3QxKHZvaWQpOwordm9pZCB0c2RfY2xlYW51cCh2b2lkICphcmcpOwor dHNkX3QgKnRzZF9mZXRjaF9zbG93KHRzZF90ICp0c2QsIGJvb2wgaW50ZXJuYWwpOwordm9pZCB0 c2Rfc3RhdGVfc2V0KHRzZF90ICp0c2QsIHVpbnQ4X3QgbmV3X3N0YXRlKTsKK3ZvaWQgdHNkX3Ns b3dfdXBkYXRlKHRzZF90ICp0c2QpOwordm9pZCB0c2RfcHJlZm9yayh0c2RfdCAqdHNkKTsKK3Zv aWQgdHNkX3Bvc3Rmb3JrX3BhcmVudCh0c2RfdCAqdHNkKTsKK3ZvaWQgdHNkX3Bvc3Rmb3JrX2No aWxkKHRzZF90ICp0c2QpOworCisvKgorICogQ2FsbCAuLi5faW5jIHdoZW4geW91ciBtb2R1bGUg d2FudHMgdG8gdGFrZSBhbGwgdGhyZWFkcyBkb3duIHRoZSBzbG93IHBhdGhzLAorICogYW5kIC4u Ll9kZWMgd2hlbiBpdCBubyBsb25nZXIgbmVlZHMgdG8uCisgKi8KK3ZvaWQgdHNkX2dsb2JhbF9z bG93X2luYyh0c2RuX3QgKnRzZG4pOwordm9pZCB0c2RfZ2xvYmFsX3Nsb3dfZGVjKHRzZG5fdCAq dHNkbik7Citib29sIHRzZF9nbG9iYWxfc2xvdygpOworCitlbnVtIHsKKwkvKiBDb21tb24gY2Fz ZSAtLT4gam56LiAqLworCXRzZF9zdGF0ZV9ub21pbmFsID0gMCwKKwkvKiBJbml0aWFsaXplZCBi dXQgb24gc2xvdyBwYXRoLiAqLworCXRzZF9zdGF0ZV9ub21pbmFsX3Nsb3cgPSAxLAorCS8qCisJ ICogU29tZSB0aHJlYWQgaGFzIGNoYW5nZWQgZ2xvYmFsIHN0YXRlIGluIHN1Y2ggYSB3YXkgdGhh dCBhbGwgbm9taW5hbAorCSAqIHRocmVhZHMgbmVlZCB0byByZWNvbXB1dGUgdGhlaXIgZmFzdCAv IHNsb3cgc3RhdHVzIHRoZSBuZXh0IHRpbWUgdGhleQorCSAqIGdldCBhIGNoYW5jZS4KKwkgKgor CSAqIEFueSB0aHJlYWQgY2FuIGNoYW5nZSBhbm90aGVyIHRocmVhZCdzIHN0YXR1cyAqdG8qIHJl Y29tcHV0ZSwgYnV0CisJICogdGhyZWFkcyBhcmUgdGhlIG9ubHkgb25lcyB3aG8gY2FuIGNoYW5n ZSB0aGVpciBzdGF0dXMgKmZyb20qCisJICogcmVjb21wdXRlLgorCSAqLworCXRzZF9zdGF0ZV9u b21pbmFsX3JlY29tcHV0ZSA9IDIsCisJLyoKKwkgKiBUaGUgYWJvdmUgbm9taW5hbCBzdGF0ZXMg c2hvdWxkIGJlIGxvd2VyIHZhbHVlcy4gIFdlIHVzZQorCSAqIHRzZF9ub21pbmFsX21heCB0byBz ZXBhcmF0ZSBub21pbmFsIHN0YXRlcyBmcm9tIHRocmVhZHMgaW4gdGhlCisJICogcHJvY2VzcyBv ZiBiZWluZyBib3JuIC8gZHlpbmcuCisJICovCisJdHNkX3N0YXRlX25vbWluYWxfbWF4ID0gMiwK KworCS8qCisJICogQSB0aHJlYWQgbWlnaHQgZnJlZSgpIGR1cmluZyBpdHMgZGVhdGggYXMgaXRz IG9ubHkgYWxsb2NhdG9yIGFjdGlvbjsKKwkgKiBpbiBzdWNoIHNjZW5hcmlvcywgd2UgbmVlZCB0 c2QsIGJ1dCBzZXQgdXAgaW4gc3VjaCBhIHdheSB0aGF0IG5vCisJICogY2xlYW51cCBpcyBuZWNl c3NhcnkuCisJICovCisJdHNkX3N0YXRlX21pbmltYWxfaW5pdGlhbGl6ZWQgPSAzLAorCS8qIFN0 YXRlcyBkdXJpbmcgd2hpY2ggd2Uga25vdyB3ZSdyZSBpbiB0aHJlYWQgZGVhdGguICovCisJdHNk X3N0YXRlX3B1cmdhdG9yeSA9IDQsCisJdHNkX3N0YXRlX3JlaW5jYXJuYXRlZCA9IDUsCisJLyoK KwkgKiBXaGF0IGl0IHNheXMgb24gdGhlIHRpbjsgdHNkIHRoYXQgaGFzbid0IGJlZW4gaW5pdGlh bGl6ZWQuICBOb3RlCisJICogdGhhdCBldmVuIHdoZW4gdGhlIHRzZCBzdHJ1Y3QgbGl2ZXMgaW4g VExTLCB3aGVuIG5lZWQgdG8ga2VlcCB0cmFjaworCSAqIG9mIHN0dWZmIGxpa2Ugd2hldGhlciBv ciBub3Qgb3VyIHB0aHJlYWQgZGVzdHJ1Y3RvcnMgaGF2ZSBiZWVuCisJICogc2NoZWR1bGVkLCBz byB0aGlzIHJlYWxseSB0cnVseSBpcyBkaWZmZXJlbnQgdGhhbiB0aGUgbm9taW5hbCBzdGF0ZS4K KwkgKi8KKwl0c2Rfc3RhdGVfdW5pbml0aWFsaXplZCA9IDYKK307CisKKy8qCisgKiBTb21lIFRT RCBhY2Nlc3NlcyBjYW4gb25seSBiZSBkb25lIGluIGEgbm9taW5hbCBzdGF0ZS4gIFRvIGVuZm9y Y2UgdGhpcywgd2UKKyAqIHdyYXAgVFNEIG1lbWJlciBhY2Nlc3MgaW4gYSBmdW5jdGlvbiB0aGF0 IGFzc2VydHMgb24gVFNEIHN0YXRlLCBhbmQgbWFuZ2xlCisgKiBmaWVsZCBuYW1lcyB0byBwcmV2 ZW50IHRvdWNoaW5nIHRoZW0gYWNjaWRlbnRhbGx5LgorICovCisjZGVmaW5lIFRTRF9NQU5HTEUo bikgY2FudF9hY2Nlc3NfdHNkX2l0ZW1zX2RpcmVjdGx5X3VzZV9hX2dldHRlcl9vcl9zZXR0ZXJf IyNuCisKKyNpZmRlZiBKRU1BTExPQ19VOF9BVE9NSUNTCisjICBkZWZpbmUgdHNkX3N0YXRlX3Qg YXRvbWljX3U4X3QKKyMgIGRlZmluZSB0c2RfYXRvbWljX2xvYWQgYXRvbWljX2xvYWRfdTgKKyMg IGRlZmluZSB0c2RfYXRvbWljX3N0b3JlIGF0b21pY19zdG9yZV91OAorIyAgZGVmaW5lIHRzZF9h dG9taWNfZXhjaGFuZ2UgYXRvbWljX2V4Y2hhbmdlX3U4CisjZWxzZQorIyAgZGVmaW5lIHRzZF9z dGF0ZV90IGF0b21pY191MzJfdAorIyAgZGVmaW5lIHRzZF9hdG9taWNfbG9hZCBhdG9taWNfbG9h ZF91MzIKKyMgIGRlZmluZSB0c2RfYXRvbWljX3N0b3JlIGF0b21pY19zdG9yZV91MzIKKyMgIGRl ZmluZSB0c2RfYXRvbWljX2V4Y2hhbmdlIGF0b21pY19leGNoYW5nZV91MzIKKyNlbmRpZgorCisv KiBUaGUgYWN0dWFsIHRzZC4gKi8KK3N0cnVjdCB0c2RfcyB7CisJLyoKKwkgKiBUaGUgY29udGVu dHMgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgdG90YWxseSBvcGFxdWUgb3V0c2lkZSB0aGUgdHNkCisJ ICogbW9kdWxlLiAgQWNjZXNzIGFueSB0aHJlYWQtbG9jYWwgc3RhdGUgdGhyb3VnaCB0aGUgZ2V0 dGVycyBhbmQKKwkgKiBzZXR0ZXJzIGJlbG93LgorCSAqLworCisjZGVmaW5lIE8obiwgdCwgbnQp CQkJCQkJCVwKKwl0IFRTRF9NQU5HTEUobik7CisKKwlUU0RfREFUQV9TTE9XCisJLyoKKwkgKiBX ZSBtYW51YWxseSBsaW1pdCB0aGUgc3RhdGUgdG8ganVzdCBhIHNpbmdsZSBieXRlLiAgVW5sZXNz IHRoZSA4LWJpdAorCSAqIGF0b21pY3MgYXJlIHVuYXZhaWxhYmxlICh3aGljaCBpcyByYXJlKS4K KwkgKi8KKwl0c2Rfc3RhdGVfdCBzdGF0ZTsKKwlUU0RfREFUQV9GQVNUCisJVFNEX0RBVEFfU0xP V0VSCisjdW5kZWYgTworfTsKKworSkVNQUxMT0NfQUxXQVlTX0lOTElORSB1aW50OF90Cit0c2Rf c3RhdGVfZ2V0KHRzZF90ICp0c2QpIHsKKwkvKgorCSAqIFRoaXMgc2hvdWxkIGJlIGF0b21pYy4g IFVuZm9ydHVuYXRlbHksIGNvbXBpbGVycyByaWdodCBub3cgY2FuJ3QgdGVsbAorCSAqIHRoYXQg dGhpcyBjYW4gYmUgZG9uZSBhcyBhIG1lbW9yeSBjb21wYXJpc29uLCBhbmQgZm9yY2VzIGEgbG9h ZCBpbnRvCisJICogYSByZWdpc3RlciB0aGF0IGh1cnRzIGZhc3QtcGF0aCBwZXJmb3JtYW5jZS4K KwkgKi8KKwkvKiByZXR1cm4gYXRvbWljX2xvYWRfdTgoJnRzZC0+c3RhdGUsIEFUT01JQ19SRUxB WEVEKTsgKi8KKwlyZXR1cm4gKih1aW50OF90ICopJnRzZC0+c3RhdGU7Cit9CisKKy8qCisgKiBX cmFwcGVyIGFyb3VuZCB0c2RfdCB0aGF0IG1ha2VzIGl0IHBvc3NpYmxlIHRvIGF2b2lkIGltcGxp Y2l0IGNvbnZlcnNpb24KKyAqIGJldHdlZW4gdHNkX3QgYW5kIHRzZG5fdCwgd2hlcmUgdHNkbl90 IGlzICJudWxsYWJsZSIgYW5kIGhhcyB0byBiZQorICogZXhwbGljaXRseSBjb252ZXJ0ZWQgdG8g dHNkX3QsIHdoaWNoIGlzIG5vbi1udWxsYWJsZS4KKyAqLworc3RydWN0IHRzZG5fcyB7CisJdHNk X3QgdHNkOworfTsKKyNkZWZpbmUgVFNETl9OVUxMICgodHNkbl90ICopMCkKK0pFTUFMTE9DX0FM V0FZU19JTkxJTkUgdHNkbl90ICoKK3RzZF90c2RuKHRzZF90ICp0c2QpIHsKKwlyZXR1cm4gKHRz ZG5fdCAqKXRzZDsKK30KKworSkVNQUxMT0NfQUxXQVlTX0lOTElORSBib29sCit0c2RuX251bGwo Y29uc3QgdHNkbl90ICp0c2RuKSB7CisJcmV0dXJuIHRzZG4gPT0gTlVMTDsKK30KKworSkVNQUxM T0NfQUxXQVlTX0lOTElORSB0c2RfdCAqCit0c2RuX3RzZCh0c2RuX3QgKnRzZG4pIHsKKwlhc3Nl cnQoIXRzZG5fbnVsbCh0c2RuKSk7CisKKwlyZXR1cm4gJnRzZG4tPnRzZDsKK30KKworLyoKKyAq IFdlIHB1dCB0aGUgcGxhdGZvcm0tc3BlY2lmaWMgZGF0YSBkZWNsYXJhdGlvbnMgYW5kIGlubGlu ZXMgaW50byB0aGVpciBvd24KKyAqIGhlYWRlciBmaWxlcyB0byBhdm9pZCBjbHV0dGVyaW5nIHRo aXMgZmlsZS4gIFRoZXkgZGVmaW5lIHRzZF9ib290MCwKKyAqIHRzZF9ib290MSwgdHNkX2Jvb3Qs IHRzZF9ib290ZWRfZ2V0LCB0c2RfZ2V0X2FsbG9jYXRlcywgdHNkX2dldCwgYW5kIHRzZF9zZXQu CisgKi8KKyNpZmRlZiBKRU1BTExPQ19NQUxMT0NfVEhSRUFEX0NMRUFOVVAKKyNpbmNsdWRlICJq ZW1hbGxvYy9pbnRlcm5hbC90c2RfbWFsbG9jX3RocmVhZF9jbGVhbnVwLmgiCisjZWxpZiAoZGVm aW5lZChKRU1BTExPQ19UTFMpKQorI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL3RzZF90bHMu aCIKKyNlbGlmIChkZWZpbmVkKF9XSU4zMikpCisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwv dHNkX3dpbi5oIgorI2Vsc2UKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC90c2RfZ2VuZXJp Yy5oIgorI2VuZGlmCisKKy8qCisgKiB0c2RfZm9vcF9nZXRfdW5zYWZlKHRzZCkgcmV0dXJucyBh IHBvaW50ZXIgdG8gdGhlIHRocmVhZC1sb2NhbCBpbnN0YW5jZSBvZgorICogZm9vLiAgVGhpcyBv bWl0cyBzb21lIHNhZmV0eSBjaGVja3MsIGFuZCBzbyBjYW4gYmUgdXNlZCBkdXJpbmcgdHNkCisg KiBpbml0aWFsaXphdGlvbiBhbmQgY2xlYW51cC4KKyAqLworI2RlZmluZSBPKG4sIHQsIG50KQkJ CQkJCQlcCitKRU1BTExPQ19BTFdBWVNfSU5MSU5FIHQgKgkJCQkJCVwKK3RzZF8jI24jI3BfZ2V0 X3Vuc2FmZSh0c2RfdCAqdHNkKSB7CQkJCQlcCisJcmV0dXJuICZ0c2QtPlRTRF9NQU5HTEUobik7 CQkJCQlcCit9CitUU0RfREFUQV9TTE9XCitUU0RfREFUQV9GQVNUCitUU0RfREFUQV9TTE9XRVIK KyN1bmRlZiBPCisKKy8qIHRzZF9mb29wX2dldCh0c2QpIHJldHVybnMgYSBwb2ludGVyIHRvIHRo ZSB0aHJlYWQtbG9jYWwgaW5zdGFuY2Ugb2YgZm9vLiAqLworI2RlZmluZSBPKG4sIHQsIG50KQkJ CQkJCQlcCitKRU1BTExPQ19BTFdBWVNfSU5MSU5FIHQgKgkJCQkJCVwKK3RzZF8jI24jI3BfZ2V0 KHRzZF90ICp0c2QpIHsJCQkJCQlcCisJLyoJCQkJCQkJCVwKKwkgKiBCZWNhdXNlIHRoZSBzdGF0 ZSBtaWdodCBjaGFuZ2UgYXN5bmNocm9ub3VzbHkgaWYgaXQncwlcCisJICogbm9taW5hbCwgd2Ug bmVlZCB0byBtYWtlIHN1cmUgdGhhdCB3ZSBvbmx5IHJlYWQgaXQgb25jZS4JXAorCSAqLwkJCQkJ CQkJXAorCXVpbnQ4X3Qgc3RhdGUgPSB0c2Rfc3RhdGVfZ2V0KHRzZCk7CQkJCVwKKwlhc3NlcnQo c3RhdGUgPT0gdHNkX3N0YXRlX25vbWluYWwgfHwJCQkJXAorCSAgICBzdGF0ZSA9PSB0c2Rfc3Rh dGVfbm9taW5hbF9zbG93IHx8CQkJCVwKKwkgICAgc3RhdGUgPT0gdHNkX3N0YXRlX25vbWluYWxf cmVjb21wdXRlIHx8CQkJXAorCSAgICBzdGF0ZSA9PSB0c2Rfc3RhdGVfcmVpbmNhcm5hdGVkIHx8 CQkJCVwKKwkgICAgc3RhdGUgPT0gdHNkX3N0YXRlX21pbmltYWxfaW5pdGlhbGl6ZWQpOwkJCVwK KwlyZXR1cm4gdHNkXyMjbiMjcF9nZXRfdW5zYWZlKHRzZCk7CQkJCVwKK30KK1RTRF9EQVRBX1NM T1cKK1RTRF9EQVRBX0ZBU1QKK1RTRF9EQVRBX1NMT1dFUgorI3VuZGVmIE8KKworLyoKKyAqIHRz ZG5fZm9vcF9nZXQodHNkbikgcmV0dXJucyBlaXRoZXIgdGhlIHRocmVhZC1sb2NhbCBpbnN0YW5j ZSBvZiBmb28gKGlmIHRzZG4KKyAqIGlzbid0IE5VTEwpLCBvciBOVUxMIChpZiB0c2RuIGlzIE5V TEwpLCBjYXN0IHRvIHRoZSBudWxsYWJsZSBwb2ludGVyIHR5cGUuCisgKi8KKyNkZWZpbmUgTyhu LCB0LCBudCkJCQkJCQkJXAorSkVNQUxMT0NfQUxXQVlTX0lOTElORSBudCAqCQkJCQkJXAordHNk bl8jI24jI3BfZ2V0KHRzZG5fdCAqdHNkbikgewkJCQkJCVwKKwlpZiAodHNkbl9udWxsKHRzZG4p KSB7CQkJCQkJXAorCQlyZXR1cm4gTlVMTDsJCQkJCQlcCisJfQkJCQkJCQkJXAorCXRzZF90ICp0 c2QgPSB0c2RuX3RzZCh0c2RuKTsJCQkJCVwKKwlyZXR1cm4gKG50ICopdHNkXyMjbiMjcF9nZXQo dHNkKTsJCQkJXAorfQorVFNEX0RBVEFfU0xPVworVFNEX0RBVEFfRkFTVAorVFNEX0RBVEFfU0xP V0VSCisjdW5kZWYgTworCisvKiB0c2RfZm9vX2dldCh0c2QpIHJldHVybnMgdGhlIHZhbHVlIG9m IHRoZSB0aHJlYWQtbG9jYWwgaW5zdGFuY2Ugb2YgZm9vLiAqLworI2RlZmluZSBPKG4sIHQsIG50 KQkJCQkJCQlcCitKRU1BTExPQ19BTFdBWVNfSU5MSU5FIHQJCQkJCQlcCit0c2RfIyNuIyNfZ2V0 KHRzZF90ICp0c2QpIHsJCQkJCQlcCisJcmV0dXJuICp0c2RfIyNuIyNwX2dldCh0c2QpOwkJCQkJ XAorfQorVFNEX0RBVEFfU0xPVworVFNEX0RBVEFfRkFTVAorVFNEX0RBVEFfU0xPV0VSCisjdW5k ZWYgTworCisvKiB0c2RfZm9vX3NldCh0c2QsIHZhbCkgdXBkYXRlcyB0aGUgdGhyZWFkLWxvY2Fs IGluc3RhbmNlIG9mIGZvbyB0byBiZSB2YWwuICovCisjZGVmaW5lIE8obiwgdCwgbnQpCQkJCQkJ CVwKK0pFTUFMTE9DX0FMV0FZU19JTkxJTkUgdm9pZAkJCQkJCVwKK3RzZF8jI24jI19zZXQodHNk X3QgKnRzZCwgdCB2YWwpIHsJCQkJCVwKKwlhc3NlcnQodHNkX3N0YXRlX2dldCh0c2QpICE9IHRz ZF9zdGF0ZV9yZWluY2FybmF0ZWQgJiYJCVwKKwkgICAgdHNkX3N0YXRlX2dldCh0c2QpICE9IHRz ZF9zdGF0ZV9taW5pbWFsX2luaXRpYWxpemVkKTsJXAorCSp0c2RfIyNuIyNwX2dldCh0c2QpID0g dmFsOwkJCQkJXAorfQorVFNEX0RBVEFfU0xPVworVFNEX0RBVEFfRkFTVAorVFNEX0RBVEFfU0xP V0VSCisjdW5kZWYgTworCitKRU1BTExPQ19BTFdBWVNfSU5MSU5FIHZvaWQKK3RzZF9hc3NlcnRf ZmFzdCh0c2RfdCAqdHNkKSB7CisJLyoKKwkgKiBOb3RlIHRoYXQgb3VyIGZhc3RuZXNzIGFzc2Vy dGlvbiBkb2VzICpub3QqIGluY2x1ZGUgZ2xvYmFsIHNsb3duZXNzCisJICogY291bnRlcnM7IGl0 J3Mgbm90IGluIGdlbmVyYWwgcG9zc2libGUgdG8gZW5zdXJlIHRoYXQgdGhleSB3b24ndAorCSAq IGNoYW5nZSBhc3luY2hyb25vdXNseSBmcm9tIHVuZGVybmVhdGggdXMuCisJICovCisJYXNzZXJ0 KCFtYWxsb2Nfc2xvdyAmJiB0c2RfdGNhY2hlX2VuYWJsZWRfZ2V0KHRzZCkgJiYKKwkgICAgdHNk X3JlZW50cmFuY3lfbGV2ZWxfZ2V0KHRzZCkgPT0gMCk7Cit9CisKK0pFTUFMTE9DX0FMV0FZU19J TkxJTkUgYm9vbAordHNkX2Zhc3QodHNkX3QgKnRzZCkgeworCWJvb2wgZmFzdCA9ICh0c2Rfc3Rh dGVfZ2V0KHRzZCkgPT0gdHNkX3N0YXRlX25vbWluYWwpOworCWlmIChmYXN0KSB7CisJCXRzZF9h c3NlcnRfZmFzdCh0c2QpOworCX0KKworCXJldHVybiBmYXN0OworfQorCitKRU1BTExPQ19BTFdB WVNfSU5MSU5FIHRzZF90ICoKK3RzZF9mZXRjaF9pbXBsKGJvb2wgaW5pdCwgYm9vbCBtaW5pbWFs KSB7CisJdHNkX3QgKnRzZCA9IHRzZF9nZXQoaW5pdCk7CisKKwlpZiAoIWluaXQgJiYgdHNkX2dl dF9hbGxvY2F0ZXMoKSAmJiB0c2QgPT0gTlVMTCkgeworCQlyZXR1cm4gTlVMTDsKKwl9CisJYXNz ZXJ0KHRzZCAhPSBOVUxMKTsKKworCWlmICh1bmxpa2VseSh0c2Rfc3RhdGVfZ2V0KHRzZCkgIT0g dHNkX3N0YXRlX25vbWluYWwpKSB7CisJCXJldHVybiB0c2RfZmV0Y2hfc2xvdyh0c2QsIG1pbmlt YWwpOworCX0KKwlhc3NlcnQodHNkX2Zhc3QodHNkKSk7CisJdHNkX2Fzc2VydF9mYXN0KHRzZCk7 CisKKwlyZXR1cm4gdHNkOworfQorCisvKiBHZXQgYSBtaW5pbWFsIFRTRCB0aGF0IHJlcXVpcmVz IG5vIGNsZWFudXAuICBTZWUgY29tbWVudHMgaW4gZnJlZSgpLiAqLworSkVNQUxMT0NfQUxXQVlT X0lOTElORSB0c2RfdCAqCit0c2RfZmV0Y2hfbWluKHZvaWQpIHsKKwlyZXR1cm4gdHNkX2ZldGNo X2ltcGwodHJ1ZSwgdHJ1ZSk7Cit9CisKKy8qIEZvciBpbnRlcm5hbCBiYWNrZ3JvdW5kIHRocmVh ZHMgdXNlIG9ubHkuICovCitKRU1BTExPQ19BTFdBWVNfSU5MSU5FIHRzZF90ICoKK3RzZF9pbnRl cm5hbF9mZXRjaCh2b2lkKSB7CisJdHNkX3QgKnRzZCA9IHRzZF9mZXRjaF9taW4oKTsKKwkvKiBV c2UgcmVpbmNhcm5hdGVkIHN0YXRlIHRvIHByZXZlbnQgZnVsbCBpbml0aWFsaXphdGlvbi4gKi8K Kwl0c2Rfc3RhdGVfc2V0KHRzZCwgdHNkX3N0YXRlX3JlaW5jYXJuYXRlZCk7CisKKwlyZXR1cm4g dHNkOworfQorCitKRU1BTExPQ19BTFdBWVNfSU5MSU5FIHRzZF90ICoKK3RzZF9mZXRjaCh2b2lk KSB7CisJcmV0dXJuIHRzZF9mZXRjaF9pbXBsKHRydWUsIGZhbHNlKTsKK30KKworc3RhdGljIGlu bGluZSBib29sCit0c2Rfbm9taW5hbCh0c2RfdCAqdHNkKSB7CisJYm9vbCBub21pbmFsID0gdHNk X3N0YXRlX2dldCh0c2QpIDw9IHRzZF9zdGF0ZV9ub21pbmFsX21heDsKKwlhc3NlcnQobm9taW5h bCB8fCB0c2RfcmVlbnRyYW5jeV9sZXZlbF9nZXQodHNkKSA+IDApOworCisJcmV0dXJuIG5vbWlu YWw7Cit9CisKK0pFTUFMTE9DX0FMV0FZU19JTkxJTkUgdHNkbl90ICoKK3RzZG5fZmV0Y2godm9p ZCkgeworCWlmICghdHNkX2Jvb3RlZF9nZXQoKSkgeworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwly ZXR1cm4gdHNkX3RzZG4odHNkX2ZldGNoX2ltcGwoZmFsc2UsIGZhbHNlKSk7Cit9CisKK0pFTUFM TE9DX0FMV0FZU19JTkxJTkUgcnRyZWVfY3R4X3QgKgordHNkX3J0cmVlX2N0eCh0c2RfdCAqdHNk KSB7CisJcmV0dXJuIHRzZF9ydHJlZV9jdHhwX2dldCh0c2QpOworfQorCitKRU1BTExPQ19BTFdB WVNfSU5MSU5FIHJ0cmVlX2N0eF90ICoKK3RzZG5fcnRyZWVfY3R4KHRzZG5fdCAqdHNkbiwgcnRy ZWVfY3R4X3QgKmZhbGxiYWNrKSB7CisJLyoKKwkgKiBJZiB0c2QgY2Fubm90IGJlIGFjY2Vzc2Vk LCBpbml0aWFsaXplIHRoZSBmYWxsYmFjayBydHJlZV9jdHggYW5kCisJICogcmV0dXJuIGEgcG9p bnRlciB0byBpdC4KKwkgKi8KKwlpZiAodW5saWtlbHkodHNkbl9udWxsKHRzZG4pKSkgeworCQly dHJlZV9jdHhfZGF0YV9pbml0KGZhbGxiYWNrKTsKKwkJcmV0dXJuIGZhbGxiYWNrOworCX0KKwly ZXR1cm4gdHNkX3J0cmVlX2N0eCh0c2RuX3RzZCh0c2RuKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUg Ym9vbAordHNkX3N0YXRlX25vY2xlYW51cCh0c2RfdCAqdHNkKSB7CisJcmV0dXJuIHRzZF9zdGF0 ZV9nZXQodHNkKSA9PSB0c2Rfc3RhdGVfcmVpbmNhcm5hdGVkIHx8CisJICAgIHRzZF9zdGF0ZV9n ZXQodHNkKSA9PSB0c2Rfc3RhdGVfbWluaW1hbF9pbml0aWFsaXplZDsKK30KKworLyoKKyAqIFRo ZXNlICJyYXciIHRzZCByZWVudHJhbmN5IGZ1bmN0aW9ucyBkb24ndCBoYXZlIGFueSBkZWJ1ZyBj aGVja2luZyB0byBtYWtlCisgKiBzdXJlIHRoYXQgd2UncmUgbm90IHRvdWNoaW5nIGFyZW5hIDAu ICBCZXR0ZXIgaXMgdG8gY2FsbCBwcmVfcmVlbnRyYW5jeSBhbmQKKyAqIHBvc3RfcmVlbnRyYW5j eSBpZiB0aGlzIGlzIHBvc3NpYmxlLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQKK3RzZF9wcmVf cmVlbnRyYW5jeV9yYXcodHNkX3QgKnRzZCkgeworCWJvb2wgZmFzdCA9IHRzZF9mYXN0KHRzZCk7 CisJYXNzZXJ0KHRzZF9yZWVudHJhbmN5X2xldmVsX2dldCh0c2QpIDwgSU5UOF9NQVgpOworCSsr KnRzZF9yZWVudHJhbmN5X2xldmVscF9nZXQodHNkKTsKKwlpZiAoZmFzdCkgeworCQkvKiBQcmVw YXJlIHNsb3cgcGF0aCBmb3IgcmVlbnRyYW5jeS4gKi8KKwkJdHNkX3Nsb3dfdXBkYXRlKHRzZCk7 CisJCWFzc2VydCh0c2Rfc3RhdGVfZ2V0KHRzZCkgPT0gdHNkX3N0YXRlX25vbWluYWxfc2xvdyk7 CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3RzZF9wb3N0X3JlZW50cmFuY3lfcmF3KHRz ZF90ICp0c2QpIHsKKwlpbnQ4X3QgKnJlZW50cmFuY3lfbGV2ZWwgPSB0c2RfcmVlbnRyYW5jeV9s ZXZlbHBfZ2V0KHRzZCk7CisJYXNzZXJ0KCpyZWVudHJhbmN5X2xldmVsID4gMCk7CisJaWYgKC0t KnJlZW50cmFuY3lfbGV2ZWwgPT0gMCkgeworCQl0c2Rfc2xvd191cGRhdGUodHNkKTsKKwl9Cit9 CisKKyNlbmRpZiAvKiBKRU1BTExPQ19JTlRFUk5BTF9UU0RfSCAqLwoKZGlmZiAtLWdpdCBhLzM4 OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50 ZXJuYWwvdHNkX2dlbmVyaWMuaCBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUu My4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvdHNkX2dlbmVyaWMuaApuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzE4NDcyCi0tLSAvZGV2L251bGwKKysrIGIvMzg5LWRz LWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5h bC90c2RfZ2VuZXJpYy5oCkBAIC0wLDAgKzEsMTgyIEBACisjaWZkZWYgSkVNQUxMT0NfSU5URVJO QUxfVFNEX0dFTkVSSUNfSAorI2Vycm9yIFRoaXMgZmlsZSBzaG91bGQgYmUgaW5jbHVkZWQgb25s eSBvbmNlLCBieSB0c2QuaC4KKyNlbmRpZgorI2RlZmluZSBKRU1BTExPQ19JTlRFUk5BTF9UU0Rf R0VORVJJQ19ICisKK3R5cGVkZWYgc3RydWN0IHRzZF9pbml0X2Jsb2NrX3MgdHNkX2luaXRfYmxv Y2tfdDsKK3N0cnVjdCB0c2RfaW5pdF9ibG9ja19zIHsKKwlxbF9lbG0odHNkX2luaXRfYmxvY2tf dCkgbGluazsKKwlwdGhyZWFkX3QgdGhyZWFkOworCXZvaWQgKmRhdGE7Cit9OworCisvKiBEZWZp bmVkIGluIHRzZC5jLCB0byBhbGxvdyB0aGUgbXV0ZXggaGVhZGVycyB0byBoYXZlIHRzZCBkZXBl bmRlbmNpZXMuICovCit0eXBlZGVmIHN0cnVjdCB0c2RfaW5pdF9oZWFkX3MgdHNkX2luaXRfaGVh ZF90OworCit0eXBlZGVmIHN0cnVjdCB7CisJYm9vbCBpbml0aWFsaXplZDsKKwl0c2RfdCB2YWw7 Cit9IHRzZF93cmFwcGVyX3Q7CisKK3ZvaWQgKnRzZF9pbml0X2NoZWNrX3JlY3Vyc2lvbih0c2Rf aW5pdF9oZWFkX3QgKmhlYWQsCisgICAgdHNkX2luaXRfYmxvY2tfdCAqYmxvY2spOwordm9pZCB0 c2RfaW5pdF9maW5pc2godHNkX2luaXRfaGVhZF90ICpoZWFkLCB0c2RfaW5pdF9ibG9ja190ICpi bG9jayk7CisKK2V4dGVybiBwdGhyZWFkX2tleV90IHRzZF90c2Q7CitleHRlcm4gdHNkX2luaXRf aGVhZF90IHRzZF9pbml0X2hlYWQ7CitleHRlcm4gdHNkX3dyYXBwZXJfdCB0c2RfYm9vdF93cmFw cGVyOworZXh0ZXJuIGJvb2wgdHNkX2Jvb3RlZDsKKworLyogSW5pdGlhbGl6YXRpb24vY2xlYW51 cC4gKi8KK0pFTUFMTE9DX0FMV0FZU19JTkxJTkUgdm9pZAordHNkX2NsZWFudXBfd3JhcHBlcih2 b2lkICphcmcpIHsKKwl0c2Rfd3JhcHBlcl90ICp3cmFwcGVyID0gKHRzZF93cmFwcGVyX3QgKilh cmc7CisKKwlpZiAod3JhcHBlci0+aW5pdGlhbGl6ZWQpIHsKKwkJd3JhcHBlci0+aW5pdGlhbGl6 ZWQgPSBmYWxzZTsKKwkJdHNkX2NsZWFudXAoJndyYXBwZXItPnZhbCk7CisJCWlmICh3cmFwcGVy LT5pbml0aWFsaXplZCkgeworCQkJLyogVHJpZ2dlciBhbm90aGVyIGNsZWFudXAgcm91bmQuICov CisJCQlpZiAocHRocmVhZF9zZXRzcGVjaWZpYyh0c2RfdHNkLCAodm9pZCAqKXdyYXBwZXIpICE9 IDApCisJCQl7CisJCQkJbWFsbG9jX3dyaXRlKCI8amVtYWxsb2M+OiBFcnJvciBzZXR0aW5nIFRT RFxuIik7CisJCQkJaWYgKG9wdF9hYm9ydCkgeworCQkJCQlhYm9ydCgpOworCQkJCX0KKwkJCX0K KwkJCXJldHVybjsKKwkJfQorCX0KKwltYWxsb2NfdHNkX2RhbGxvYyh3cmFwcGVyKTsKK30KKwor SkVNQUxMT0NfQUxXQVlTX0lOTElORSB2b2lkCit0c2Rfd3JhcHBlcl9zZXQodHNkX3dyYXBwZXJf dCAqd3JhcHBlcikgeworCWlmICh1bmxpa2VseSghdHNkX2Jvb3RlZCkpIHsKKwkJcmV0dXJuOwor CX0KKwlpZiAocHRocmVhZF9zZXRzcGVjaWZpYyh0c2RfdHNkLCAodm9pZCAqKXdyYXBwZXIpICE9 IDApIHsKKwkJbWFsbG9jX3dyaXRlKCI8amVtYWxsb2M+OiBFcnJvciBzZXR0aW5nIFRTRFxuIik7 CisJCWFib3J0KCk7CisJfQorfQorCitKRU1BTExPQ19BTFdBWVNfSU5MSU5FIHRzZF93cmFwcGVy X3QgKgordHNkX3dyYXBwZXJfZ2V0KGJvb2wgaW5pdCkgeworCXRzZF93cmFwcGVyX3QgKndyYXBw ZXI7CisKKwlpZiAodW5saWtlbHkoIXRzZF9ib290ZWQpKSB7CisJCXJldHVybiAmdHNkX2Jvb3Rf d3JhcHBlcjsKKwl9CisKKwl3cmFwcGVyID0gKHRzZF93cmFwcGVyX3QgKilwdGhyZWFkX2dldHNw ZWNpZmljKHRzZF90c2QpOworCisJaWYgKGluaXQgJiYgdW5saWtlbHkod3JhcHBlciA9PSBOVUxM KSkgeworCQl0c2RfaW5pdF9ibG9ja190IGJsb2NrOworCQl3cmFwcGVyID0gKHRzZF93cmFwcGVy X3QgKikKKwkJICAgIHRzZF9pbml0X2NoZWNrX3JlY3Vyc2lvbigmdHNkX2luaXRfaGVhZCwgJmJs b2NrKTsKKwkJaWYgKHdyYXBwZXIpIHsKKwkJCXJldHVybiB3cmFwcGVyOworCQl9CisJCXdyYXBw ZXIgPSAodHNkX3dyYXBwZXJfdCAqKQorCQkgICAgbWFsbG9jX3RzZF9tYWxsb2Moc2l6ZW9mKHRz ZF93cmFwcGVyX3QpKTsKKwkJYmxvY2suZGF0YSA9ICh2b2lkICopd3JhcHBlcjsKKwkJaWYgKHdy YXBwZXIgPT0gTlVMTCkgeworCQkJbWFsbG9jX3dyaXRlKCI8amVtYWxsb2M+OiBFcnJvciBhbGxv Y2F0aW5nIFRTRFxuIik7CisJCQlhYm9ydCgpOworCQl9IGVsc2UgeworCQkJd3JhcHBlci0+aW5p dGlhbGl6ZWQgPSBmYWxzZTsKKyAgICAgIEpFTUFMTE9DX0RJQUdOT1NUSUNfUFVTSAorICAgICAg SkVNQUxMT0NfRElBR05PU1RJQ19JR05PUkVfTUlTU0lOR19TVFJVQ1RfRklFTERfSU5JVElBTEla RVJTCisJCQl0c2RfdCBpbml0aWFsaXplciA9IFRTRF9JTklUSUFMSVpFUjsKKyAgICAgIEpFTUFM TE9DX0RJQUdOT1NUSUNfUE9QCisJCQl3cmFwcGVyLT52YWwgPSBpbml0aWFsaXplcjsKKwkJfQor CQl0c2Rfd3JhcHBlcl9zZXQod3JhcHBlcik7CisJCXRzZF9pbml0X2ZpbmlzaCgmdHNkX2luaXRf aGVhZCwgJmJsb2NrKTsKKwl9CisJcmV0dXJuIHdyYXBwZXI7Cit9CisKK0pFTUFMTE9DX0FMV0FZ U19JTkxJTkUgYm9vbAordHNkX2Jvb3QwKHZvaWQpIHsKKwl0c2Rfd3JhcHBlcl90ICp3cmFwcGVy OworCXRzZF9pbml0X2Jsb2NrX3QgYmxvY2s7CisKKwl3cmFwcGVyID0gKHRzZF93cmFwcGVyX3Qg KikKKwkgICAgdHNkX2luaXRfY2hlY2tfcmVjdXJzaW9uKCZ0c2RfaW5pdF9oZWFkLCAmYmxvY2sp OworCWlmICh3cmFwcGVyKSB7CisJCXJldHVybiBmYWxzZTsKKwl9CisJYmxvY2suZGF0YSA9ICZ0 c2RfYm9vdF93cmFwcGVyOworCWlmIChwdGhyZWFkX2tleV9jcmVhdGUoJnRzZF90c2QsIHRzZF9j bGVhbnVwX3dyYXBwZXIpICE9IDApIHsKKwkJcmV0dXJuIHRydWU7CisJfQorCXRzZF9ib290ZWQg PSB0cnVlOworCXRzZF93cmFwcGVyX3NldCgmdHNkX2Jvb3Rfd3JhcHBlcik7CisJdHNkX2luaXRf ZmluaXNoKCZ0c2RfaW5pdF9oZWFkLCAmYmxvY2spOworCXJldHVybiBmYWxzZTsKK30KKworSkVN QUxMT0NfQUxXQVlTX0lOTElORSB2b2lkCit0c2RfYm9vdDEodm9pZCkgeworCXRzZF93cmFwcGVy X3QgKndyYXBwZXI7CisJd3JhcHBlciA9ICh0c2Rfd3JhcHBlcl90ICopbWFsbG9jX3RzZF9tYWxs b2Moc2l6ZW9mKHRzZF93cmFwcGVyX3QpKTsKKwlpZiAod3JhcHBlciA9PSBOVUxMKSB7CisJCW1h bGxvY193cml0ZSgiPGplbWFsbG9jPjogRXJyb3IgYWxsb2NhdGluZyBUU0RcbiIpOworCQlhYm9y dCgpOworCX0KKwl0c2RfYm9vdF93cmFwcGVyLmluaXRpYWxpemVkID0gZmFsc2U7CisJdHNkX2Ns ZWFudXAoJnRzZF9ib290X3dyYXBwZXIudmFsKTsKKwl3cmFwcGVyLT5pbml0aWFsaXplZCA9IGZh bHNlOworICBKRU1BTExPQ19ESUFHTk9TVElDX1BVU0gKKyAgSkVNQUxMT0NfRElBR05PU1RJQ19J R05PUkVfTUlTU0lOR19TVFJVQ1RfRklFTERfSU5JVElBTElaRVJTCisJdHNkX3QgaW5pdGlhbGl6 ZXIgPSBUU0RfSU5JVElBTElaRVI7CisgIEpFTUFMTE9DX0RJQUdOT1NUSUNfUE9QCisJd3JhcHBl ci0+dmFsID0gaW5pdGlhbGl6ZXI7CisJdHNkX3dyYXBwZXJfc2V0KHdyYXBwZXIpOworfQorCitK RU1BTExPQ19BTFdBWVNfSU5MSU5FIGJvb2wKK3RzZF9ib290KHZvaWQpIHsKKwlpZiAodHNkX2Jv b3QwKCkpIHsKKwkJcmV0dXJuIHRydWU7CisJfQorCXRzZF9ib290MSgpOworCXJldHVybiBmYWxz ZTsKK30KKworSkVNQUxMT0NfQUxXQVlTX0lOTElORSBib29sCit0c2RfYm9vdGVkX2dldCh2b2lk KSB7CisJcmV0dXJuIHRzZF9ib290ZWQ7Cit9CisKK0pFTUFMTE9DX0FMV0FZU19JTkxJTkUgYm9v bAordHNkX2dldF9hbGxvY2F0ZXModm9pZCkgeworCXJldHVybiB0cnVlOworfQorCisvKiBHZXQv c2V0LiAqLworSkVNQUxMT0NfQUxXQVlTX0lOTElORSB0c2RfdCAqCit0c2RfZ2V0KGJvb2wgaW5p dCkgeworCXRzZF93cmFwcGVyX3QgKndyYXBwZXI7CisKKwlhc3NlcnQodHNkX2Jvb3RlZCk7CisJ d3JhcHBlciA9IHRzZF93cmFwcGVyX2dldChpbml0KTsKKwlpZiAodHNkX2dldF9hbGxvY2F0ZXMo KSAmJiAhaW5pdCAmJiB3cmFwcGVyID09IE5VTEwpIHsKKwkJcmV0dXJuIE5VTEw7CisJfQorCXJl dHVybiAmd3JhcHBlci0+dmFsOworfQorCitKRU1BTExPQ19BTFdBWVNfSU5MSU5FIHZvaWQKK3Rz ZF9zZXQodHNkX3QgKnZhbCkgeworCXRzZF93cmFwcGVyX3QgKndyYXBwZXI7CisKKwlhc3NlcnQo dHNkX2Jvb3RlZCk7CisJd3JhcHBlciA9IHRzZF93cmFwcGVyX2dldCh0cnVlKTsKKwlpZiAobGlr ZWx5KCZ3cmFwcGVyLT52YWwgIT0gdmFsKSkgeworCQl3cmFwcGVyLT52YWwgPSAqKHZhbCk7CisJ fQorCXdyYXBwZXItPmluaXRpYWxpemVkID0gdHJ1ZTsKK30KCmRpZmYgLS1naXQgYS8zODktZHMt YmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFs L3RzZF9tYWxsb2NfdGhyZWFkX2NsZWFudXAuaCBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2pl bWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvdHNkX21hbGxvY190aHJlYWRf Y2xlYW51cC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4ZjNlZjEKLS0t IC9kZXYvbnVsbAorKysgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9p bmNsdWRlL2plbWFsbG9jL2ludGVybmFsL3RzZF9tYWxsb2NfdGhyZWFkX2NsZWFudXAuaApAQCAt MCwwICsxLDYxIEBACisjaWZkZWYgSkVNQUxMT0NfSU5URVJOQUxfVFNEX01BTExPQ19USFJFQURf Q0xFQU5VUF9ICisjZXJyb3IgVGhpcyBmaWxlIHNob3VsZCBiZSBpbmNsdWRlZCBvbmx5IG9uY2Us IGJ5IHRzZC5oLgorI2VuZGlmCisjZGVmaW5lIEpFTUFMTE9DX0lOVEVSTkFMX1RTRF9NQUxMT0Nf VEhSRUFEX0NMRUFOVVBfSAorCisjZGVmaW5lIEpFTUFMTE9DX1RTRF9UWVBFX0FUVFIodHlwZSkg X190aHJlYWQgdHlwZSBKRU1BTExPQ19UTFNfTU9ERUwKKworZXh0ZXJuIEpFTUFMTE9DX1RTRF9U WVBFX0FUVFIodHNkX3QpIHRzZF90bHM7CitleHRlcm4gSkVNQUxMT0NfVFNEX1RZUEVfQVRUUihi b29sKSB0c2RfaW5pdGlhbGl6ZWQ7CitleHRlcm4gYm9vbCB0c2RfYm9vdGVkOworCisvKiBJbml0 aWFsaXphdGlvbi9jbGVhbnVwLiAqLworSkVNQUxMT0NfQUxXQVlTX0lOTElORSBib29sCit0c2Rf Y2xlYW51cF93cmFwcGVyKHZvaWQpIHsKKwlpZiAodHNkX2luaXRpYWxpemVkKSB7CisJCXRzZF9p bml0aWFsaXplZCA9IGZhbHNlOworCQl0c2RfY2xlYW51cCgmdHNkX3Rscyk7CisJfQorCXJldHVy biB0c2RfaW5pdGlhbGl6ZWQ7Cit9CisKK0pFTUFMTE9DX0FMV0FZU19JTkxJTkUgYm9vbAordHNk X2Jvb3QwKHZvaWQpIHsKKwlfbWFsbG9jX3RzZF9jbGVhbnVwX3JlZ2lzdGVyKCZ0c2RfY2xlYW51 cF93cmFwcGVyKTsKKwl0c2RfYm9vdGVkID0gdHJ1ZTsKKwlyZXR1cm4gZmFsc2U7Cit9CisKK0pF TUFMTE9DX0FMV0FZU19JTkxJTkUgdm9pZAordHNkX2Jvb3QxKHZvaWQpIHsKKwkvKiBEbyBub3Ro aW5nLiAqLworfQorCitKRU1BTExPQ19BTFdBWVNfSU5MSU5FIGJvb2wKK3RzZF9ib290KHZvaWQp IHsKKwlyZXR1cm4gdHNkX2Jvb3QwKCk7Cit9CisKK0pFTUFMTE9DX0FMV0FZU19JTkxJTkUgYm9v bAordHNkX2Jvb3RlZF9nZXQodm9pZCkgeworCXJldHVybiB0c2RfYm9vdGVkOworfQorCitKRU1B TExPQ19BTFdBWVNfSU5MSU5FIGJvb2wKK3RzZF9nZXRfYWxsb2NhdGVzKHZvaWQpIHsKKwlyZXR1 cm4gZmFsc2U7Cit9CisKKy8qIEdldC9zZXQuICovCitKRU1BTExPQ19BTFdBWVNfSU5MSU5FIHRz ZF90ICoKK3RzZF9nZXQoYm9vbCBpbml0KSB7CisJcmV0dXJuICZ0c2RfdGxzOworfQorSkVNQUxM T0NfQUxXQVlTX0lOTElORSB2b2lkCit0c2Rfc2V0KHRzZF90ICp2YWwpIHsKKwlhc3NlcnQodHNk X2Jvb3RlZCk7CisJaWYgKGxpa2VseSgmdHNkX3RscyAhPSB2YWwpKSB7CisJCXRzZF90bHMgPSAo KnZhbCk7CisJfQorCXRzZF9pbml0aWFsaXplZCA9IHRydWU7Cit9CgpkaWZmIC0tZ2l0IGEvMzg5 LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRl cm5hbC90c2RfdGxzLmggYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9p bmNsdWRlL2plbWFsbG9jL2ludGVybmFsL3RzZF90bHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwLi43ZDZjODA1Ci0tLSAvZGV2L251bGwKKysrIGIvMzg5LWRzLWJhc2UtMy4z LjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC90c2RfdGxz LmgKQEAgLTAsMCArMSw2MCBAQAorI2lmZGVmIEpFTUFMTE9DX0lOVEVSTkFMX1RTRF9UTFNfSAor I2Vycm9yIFRoaXMgZmlsZSBzaG91bGQgYmUgaW5jbHVkZWQgb25seSBvbmNlLCBieSB0c2QuaC4K KyNlbmRpZgorI2RlZmluZSBKRU1BTExPQ19JTlRFUk5BTF9UU0RfVExTX0gKKworI2RlZmluZSBK RU1BTExPQ19UU0RfVFlQRV9BVFRSKHR5cGUpIF9fdGhyZWFkIHR5cGUgSkVNQUxMT0NfVExTX01P REVMCisKK2V4dGVybiBKRU1BTExPQ19UU0RfVFlQRV9BVFRSKHRzZF90KSB0c2RfdGxzOworZXh0 ZXJuIHB0aHJlYWRfa2V5X3QgdHNkX3RzZDsKK2V4dGVybiBib29sIHRzZF9ib290ZWQ7CisKKy8q IEluaXRpYWxpemF0aW9uL2NsZWFudXAuICovCitKRU1BTExPQ19BTFdBWVNfSU5MSU5FIGJvb2wK K3RzZF9ib290MCh2b2lkKSB7CisJaWYgKHB0aHJlYWRfa2V5X2NyZWF0ZSgmdHNkX3RzZCwgJnRz ZF9jbGVhbnVwKSAhPSAwKSB7CisJCXJldHVybiB0cnVlOworCX0KKwl0c2RfYm9vdGVkID0gdHJ1 ZTsKKwlyZXR1cm4gZmFsc2U7Cit9CisKK0pFTUFMTE9DX0FMV0FZU19JTkxJTkUgdm9pZAordHNk X2Jvb3QxKHZvaWQpIHsKKwkvKiBEbyBub3RoaW5nLiAqLworfQorCitKRU1BTExPQ19BTFdBWVNf SU5MSU5FIGJvb2wKK3RzZF9ib290KHZvaWQpIHsKKwlyZXR1cm4gdHNkX2Jvb3QwKCk7Cit9CisK K0pFTUFMTE9DX0FMV0FZU19JTkxJTkUgYm9vbAordHNkX2Jvb3RlZF9nZXQodm9pZCkgeworCXJl dHVybiB0c2RfYm9vdGVkOworfQorCitKRU1BTExPQ19BTFdBWVNfSU5MSU5FIGJvb2wKK3RzZF9n ZXRfYWxsb2NhdGVzKHZvaWQpIHsKKwlyZXR1cm4gZmFsc2U7Cit9CisKKy8qIEdldC9zZXQuICov CitKRU1BTExPQ19BTFdBWVNfSU5MSU5FIHRzZF90ICoKK3RzZF9nZXQoYm9vbCBpbml0KSB7CisJ cmV0dXJuICZ0c2RfdGxzOworfQorCitKRU1BTExPQ19BTFdBWVNfSU5MSU5FIHZvaWQKK3RzZF9z ZXQodHNkX3QgKnZhbCkgeworCWFzc2VydCh0c2RfYm9vdGVkKTsKKwlpZiAobGlrZWx5KCZ0c2Rf dGxzICE9IHZhbCkpIHsKKwkJdHNkX3RscyA9ICgqdmFsKTsKKwl9CisJaWYgKHB0aHJlYWRfc2V0 c3BlY2lmaWModHNkX3RzZCwgKHZvaWQgKikoJnRzZF90bHMpKSAhPSAwKSB7CisJCW1hbGxvY193 cml0ZSgiPGplbWFsbG9jPjogRXJyb3Igc2V0dGluZyB0c2QuXG4iKTsKKwkJaWYgKG9wdF9hYm9y dCkgeworCQkJYWJvcnQoKTsKKwkJfQorCX0KK30KCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0z LjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL3RzZF90 eXBlcy5oIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9q ZW1hbGxvYy9pbnRlcm5hbC90c2RfdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwLi5hNmFlMzdkCi0tLSAvZGV2L251bGwKKysrIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVp bGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC90c2RfdHlwZXMuaApA QCAtMCwwICsxLDEwIEBACisjaWZuZGVmIEpFTUFMTE9DX0lOVEVSTkFMX1RTRF9UWVBFU19ICisj ZGVmaW5lIEpFTUFMTE9DX0lOVEVSTkFMX1RTRF9UWVBFU19ICisKKyNkZWZpbmUgTUFMTE9DX1RT RF9DTEVBTlVQU19NQVgJNAorCit0eXBlZGVmIHN0cnVjdCB0c2RfcyB0c2RfdDsKK3R5cGVkZWYg c3RydWN0IHRzZG5fcyB0c2RuX3Q7Cit0eXBlZGVmIGJvb2wgKCptYWxsb2NfdHNkX2NsZWFudXBf dCkodm9pZCk7CisKKyNlbmRpZiAvKiBKRU1BTExPQ19JTlRFUk5BTF9UU0RfVFlQRVNfSCAqLwoK ZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1 ZGUvamVtYWxsb2MvaW50ZXJuYWwvdHNkX3dpbi5oIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQv amVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC90c2Rfd2luLmgKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTkxZGFjOAotLS0gL2Rldi9udWxsCisrKyBi LzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2Mv aW50ZXJuYWwvdHNkX3dpbi5oCkBAIC0wLDAgKzEsMTM5IEBACisjaWZkZWYgSkVNQUxMT0NfSU5U RVJOQUxfVFNEX1dJTl9ICisjZXJyb3IgVGhpcyBmaWxlIHNob3VsZCBiZSBpbmNsdWRlZCBvbmx5 IG9uY2UsIGJ5IHRzZC5oLgorI2VuZGlmCisjZGVmaW5lIEpFTUFMTE9DX0lOVEVSTkFMX1RTRF9X SU5fSAorCit0eXBlZGVmIHN0cnVjdCB7CisJYm9vbCBpbml0aWFsaXplZDsKKwl0c2RfdCB2YWw7 Cit9IHRzZF93cmFwcGVyX3Q7CisKK2V4dGVybiBEV09SRCB0c2RfdHNkOworZXh0ZXJuIHRzZF93 cmFwcGVyX3QgdHNkX2Jvb3Rfd3JhcHBlcjsKK2V4dGVybiBib29sIHRzZF9ib290ZWQ7CisKKy8q IEluaXRpYWxpemF0aW9uL2NsZWFudXAuICovCitKRU1BTExPQ19BTFdBWVNfSU5MSU5FIGJvb2wK K3RzZF9jbGVhbnVwX3dyYXBwZXIodm9pZCkgeworCURXT1JEIGVycm9yID0gR2V0TGFzdEVycm9y KCk7CisJdHNkX3dyYXBwZXJfdCAqd3JhcHBlciA9ICh0c2Rfd3JhcHBlcl90ICopVGxzR2V0VmFs dWUodHNkX3RzZCk7CisJU2V0TGFzdEVycm9yKGVycm9yKTsKKworCWlmICh3cmFwcGVyID09IE5V TEwpIHsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCWlmICh3cmFwcGVyLT5pbml0aWFsaXplZCkg eworCQl3cmFwcGVyLT5pbml0aWFsaXplZCA9IGZhbHNlOworCQl0c2RfY2xlYW51cCgmd3JhcHBl ci0+dmFsKTsKKwkJaWYgKHdyYXBwZXItPmluaXRpYWxpemVkKSB7CisJCQkvKiBUcmlnZ2VyIGFu b3RoZXIgY2xlYW51cCByb3VuZC4gKi8KKwkJCXJldHVybiB0cnVlOworCQl9CisJfQorCW1hbGxv Y190c2RfZGFsbG9jKHdyYXBwZXIpOworCXJldHVybiBmYWxzZTsKK30KKworSkVNQUxMT0NfQUxX QVlTX0lOTElORSB2b2lkCit0c2Rfd3JhcHBlcl9zZXQodHNkX3dyYXBwZXJfdCAqd3JhcHBlcikg eworCWlmICghVGxzU2V0VmFsdWUodHNkX3RzZCwgKHZvaWQgKil3cmFwcGVyKSkgeworCQltYWxs b2Nfd3JpdGUoIjxqZW1hbGxvYz46IEVycm9yIHNldHRpbmcgVFNEXG4iKTsKKwkJYWJvcnQoKTsK Kwl9Cit9CisKK0pFTUFMTE9DX0FMV0FZU19JTkxJTkUgdHNkX3dyYXBwZXJfdCAqCit0c2Rfd3Jh cHBlcl9nZXQoYm9vbCBpbml0KSB7CisJRFdPUkQgZXJyb3IgPSBHZXRMYXN0RXJyb3IoKTsKKwl0 c2Rfd3JhcHBlcl90ICp3cmFwcGVyID0gKHRzZF93cmFwcGVyX3QgKikgVGxzR2V0VmFsdWUodHNk X3RzZCk7CisJU2V0TGFzdEVycm9yKGVycm9yKTsKKworCWlmIChpbml0ICYmIHVubGlrZWx5KHdy YXBwZXIgPT0gTlVMTCkpIHsKKwkJd3JhcHBlciA9ICh0c2Rfd3JhcHBlcl90ICopCisJCSAgICBt YWxsb2NfdHNkX21hbGxvYyhzaXplb2YodHNkX3dyYXBwZXJfdCkpOworCQlpZiAod3JhcHBlciA9 PSBOVUxMKSB7CisJCQltYWxsb2Nfd3JpdGUoIjxqZW1hbGxvYz46IEVycm9yIGFsbG9jYXRpbmcg VFNEXG4iKTsKKwkJCWFib3J0KCk7CisJCX0gZWxzZSB7CisJCQl3cmFwcGVyLT5pbml0aWFsaXpl ZCA9IGZhbHNlOworCQkJLyogTVNWQyBpcyBmaW5pY2t5IGFib3V0IGFnZ3JlZ2F0ZSBpbml0aWFs aXphdGlvbi4gKi8KKwkJCXRzZF90IHRzZF9pbml0aWFsaXplciA9IFRTRF9JTklUSUFMSVpFUjsK KwkJCXdyYXBwZXItPnZhbCA9IHRzZF9pbml0aWFsaXplcjsKKwkJfQorCQl0c2Rfd3JhcHBlcl9z ZXQod3JhcHBlcik7CisJfQorCXJldHVybiB3cmFwcGVyOworfQorCitKRU1BTExPQ19BTFdBWVNf SU5MSU5FIGJvb2wKK3RzZF9ib290MCh2b2lkKSB7CisJdHNkX3RzZCA9IFRsc0FsbG9jKCk7CisJ aWYgKHRzZF90c2QgPT0gVExTX09VVF9PRl9JTkRFWEVTKSB7CisJCXJldHVybiB0cnVlOworCX0K KwlfbWFsbG9jX3RzZF9jbGVhbnVwX3JlZ2lzdGVyKCZ0c2RfY2xlYW51cF93cmFwcGVyKTsKKwl0 c2Rfd3JhcHBlcl9zZXQoJnRzZF9ib290X3dyYXBwZXIpOworCXRzZF9ib290ZWQgPSB0cnVlOwor CXJldHVybiBmYWxzZTsKK30KKworSkVNQUxMT0NfQUxXQVlTX0lOTElORSB2b2lkCit0c2RfYm9v dDEodm9pZCkgeworCXRzZF93cmFwcGVyX3QgKndyYXBwZXI7CisJd3JhcHBlciA9ICh0c2Rfd3Jh cHBlcl90ICopCisJICAgIG1hbGxvY190c2RfbWFsbG9jKHNpemVvZih0c2Rfd3JhcHBlcl90KSk7 CisJaWYgKHdyYXBwZXIgPT0gTlVMTCkgeworCQltYWxsb2Nfd3JpdGUoIjxqZW1hbGxvYz46IEVy cm9yIGFsbG9jYXRpbmcgVFNEXG4iKTsKKwkJYWJvcnQoKTsKKwl9CisJdHNkX2Jvb3Rfd3JhcHBl ci5pbml0aWFsaXplZCA9IGZhbHNlOworCXRzZF9jbGVhbnVwKCZ0c2RfYm9vdF93cmFwcGVyLnZh bCk7CisJd3JhcHBlci0+aW5pdGlhbGl6ZWQgPSBmYWxzZTsKKwl0c2RfdCBpbml0aWFsaXplciA9 IFRTRF9JTklUSUFMSVpFUjsKKwl3cmFwcGVyLT52YWwgPSBpbml0aWFsaXplcjsKKwl0c2Rfd3Jh cHBlcl9zZXQod3JhcHBlcik7Cit9CitKRU1BTExPQ19BTFdBWVNfSU5MSU5FIGJvb2wKK3RzZF9i b290KHZvaWQpIHsKKwlpZiAodHNkX2Jvb3QwKCkpIHsKKwkJcmV0dXJuIHRydWU7CisJfQorCXRz ZF9ib290MSgpOworCXJldHVybiBmYWxzZTsKK30KKworSkVNQUxMT0NfQUxXQVlTX0lOTElORSBi b29sCit0c2RfYm9vdGVkX2dldCh2b2lkKSB7CisJcmV0dXJuIHRzZF9ib290ZWQ7Cit9CisKK0pF TUFMTE9DX0FMV0FZU19JTkxJTkUgYm9vbAordHNkX2dldF9hbGxvY2F0ZXModm9pZCkgeworCXJl dHVybiB0cnVlOworfQorCisvKiBHZXQvc2V0LiAqLworSkVNQUxMT0NfQUxXQVlTX0lOTElORSB0 c2RfdCAqCit0c2RfZ2V0KGJvb2wgaW5pdCkgeworCXRzZF93cmFwcGVyX3QgKndyYXBwZXI7CisK Kwlhc3NlcnQodHNkX2Jvb3RlZCk7CisJd3JhcHBlciA9IHRzZF93cmFwcGVyX2dldChpbml0KTsK KwlpZiAodHNkX2dldF9hbGxvY2F0ZXMoKSAmJiAhaW5pdCAmJiB3cmFwcGVyID09IE5VTEwpIHsK KwkJcmV0dXJuIE5VTEw7CisJfQorCXJldHVybiAmd3JhcHBlci0+dmFsOworfQorCitKRU1BTExP Q19BTFdBWVNfSU5MSU5FIHZvaWQKK3RzZF9zZXQodHNkX3QgKnZhbCkgeworCXRzZF93cmFwcGVy X3QgKndyYXBwZXI7CisKKwlhc3NlcnQodHNkX2Jvb3RlZCk7CisJd3JhcHBlciA9IHRzZF93cmFw cGVyX2dldCh0cnVlKTsKKwlpZiAobGlrZWx5KCZ3cmFwcGVyLT52YWwgIT0gdmFsKSkgeworCQl3 cmFwcGVyLT52YWwgPSAqKHZhbCk7CisJfQorCXdyYXBwZXItPmluaXRpYWxpemVkID0gdHJ1ZTsK K30KCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9p bmNsdWRlL2plbWFsbG9jL2ludGVybmFsL3R5cGVkX2xpc3QuaCBiLzM4OS1kcy1iYXNlLTMuMy4w LWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvdHlwZWRfbGlz dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1MzUwNTUKLS0tIC9kZXYv bnVsbAorKysgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRl L2plbWFsbG9jL2ludGVybmFsL3R5cGVkX2xpc3QuaApAQCAtMCwwICsxLDU1IEBACisjaWZuZGVm IEpFTUFMTE9DX0lOVEVSTkFMX1RZUEVEX0xJU1RfSAorI2RlZmluZSBKRU1BTExPQ19JTlRFUk5B TF9UWVBFRF9MSVNUX0gKKworLyoKKyAqIFRoaXMgd3JhcHMgdGhlIHFsIG1vZHVsZSB0byBpbXBs ZW1lbnQgYSBsaXN0IGNsYXNzIGluIGEgd2F5IHRoYXQncyBhIGxpdHRsZQorICogYml0IGVhc2ll ciB0byB1c2U7IGl0IGhhbmRsZXMgcWxfZWxtX25ldyBjYWxscyBhbmQgcHJvdmlkZXMgdHlwZSBz YWZldHkuCisgKi8KKworI2RlZmluZSBUWVBFRF9MSVNUKGxpc3RfdHlwZSwgZWxfdHlwZSwgbGlu a2FnZSkJCQkJXAordHlwZWRlZiBzdHJ1Y3QgewkJCQkJCQlcCisJcWxfaGVhZChlbF90eXBlKSBo ZWFkOwkJCQkJCVwKK30gbGlzdF90eXBlIyNfdDsJCQkJCQkJXAorc3RhdGljIGlubGluZSB2b2lk CQkJCQkJCVwKK2xpc3RfdHlwZSMjX2luaXQobGlzdF90eXBlIyNfdCAqbGlzdCkgewkJCQkJXAor CXFsX25ldygmbGlzdC0+aGVhZCk7CQkJCQkJXAorfQkJCQkJCQkJCVwKK3N0YXRpYyBpbmxpbmUg ZWxfdHlwZSAqCQkJCQkJCVwKK2xpc3RfdHlwZSMjX2ZpcnN0KGNvbnN0IGxpc3RfdHlwZSMjX3Qg Kmxpc3QpIHsJCQkJXAorCXJldHVybiBxbF9maXJzdCgmbGlzdC0+aGVhZCk7CQkJCQlcCit9CQkJ CQkJCQkJXAorc3RhdGljIGlubGluZSBlbF90eXBlICoJCQkJCQkJXAorbGlzdF90eXBlIyNfbGFz dChjb25zdCBsaXN0X3R5cGUjI190ICpsaXN0KSB7CQkJCVwKKwlyZXR1cm4gcWxfbGFzdCgmbGlz dC0+aGVhZCwgbGlua2FnZSk7CQkJCVwKK30JCQkJCQkJCQlcCitzdGF0aWMgaW5saW5lIHZvaWQJ CQkJCQkJXAorbGlzdF90eXBlIyNfYXBwZW5kKGxpc3RfdHlwZSMjX3QgKmxpc3QsIGVsX3R5cGUg Kml0ZW0pIHsJCVwKKwlxbF9lbG1fbmV3KGl0ZW0sIGxpbmthZ2UpOwkJCQkJXAorCXFsX3RhaWxf aW5zZXJ0KCZsaXN0LT5oZWFkLCBpdGVtLCBsaW5rYWdlKTsJCQlcCit9CQkJCQkJCQkJXAorc3Rh dGljIGlubGluZSB2b2lkCQkJCQkJCVwKK2xpc3RfdHlwZSMjX3ByZXBlbmQobGlzdF90eXBlIyNf dCAqbGlzdCwgZWxfdHlwZSAqaXRlbSkgewkJXAorCXFsX2VsbV9uZXcoaXRlbSwgbGlua2FnZSk7 CQkJCQlcCisJcWxfaGVhZF9pbnNlcnQoJmxpc3QtPmhlYWQsIGl0ZW0sIGxpbmthZ2UpOwkJCVwK K30JCQkJCQkJCQlcCitzdGF0aWMgaW5saW5lIHZvaWQJCQkJCQkJXAorbGlzdF90eXBlIyNfcmVw bGFjZShsaXN0X3R5cGUjI190ICpsaXN0LCBlbF90eXBlICp0b19yZW1vdmUsCQlcCisgICAgZWxf dHlwZSAqdG9faW5zZXJ0KSB7CQkJCQkJXAorCXFsX2VsbV9uZXcodG9faW5zZXJ0LCBsaW5rYWdl KTsJCQkJCVwKKwlxbF9hZnRlcl9pbnNlcnQodG9fcmVtb3ZlLCB0b19pbnNlcnQsIGxpbmthZ2Up OwkJCVwKKwlxbF9yZW1vdmUoJmxpc3QtPmhlYWQsIHRvX3JlbW92ZSwgbGlua2FnZSk7CQkJXAor fQkJCQkJCQkJCVwKK3N0YXRpYyBpbmxpbmUgdm9pZAkJCQkJCQlcCitsaXN0X3R5cGUjI19yZW1v dmUobGlzdF90eXBlIyNfdCAqbGlzdCwgZWxfdHlwZSAqaXRlbSkgewkJXAorCXFsX3JlbW92ZSgm bGlzdC0+aGVhZCwgaXRlbSwgbGlua2FnZSk7CQkJCVwKK30JCQkJCQkJCQlcCitzdGF0aWMgaW5s aW5lIGJvb2wJCQkJCQkJXAorbGlzdF90eXBlIyNfZW1wdHkobGlzdF90eXBlIyNfdCAqbGlzdCkg ewkJCQlcCisJcmV0dXJuIHFsX2VtcHR5KCZsaXN0LT5oZWFkKTsJCQkJCVwKK30JCQkJCQkJCQlc CitzdGF0aWMgaW5saW5lIHZvaWQJCQkJCQkJXAorbGlzdF90eXBlIyNfY29uY2F0KGxpc3RfdHlw ZSMjX3QgKmxpc3RfYSwgbGlzdF90eXBlIyNfdCAqbGlzdF9iKSB7CVwKKwlxbF9jb25jYXQoJmxp c3RfYS0+aGVhZCwgJmxpc3RfYi0+aGVhZCwgbGlua2FnZSk7CQlcCit9CisKKyNlbmRpZiAvKiBK RU1BTExPQ19JTlRFUk5BTF9UWVBFRF9MSVNUX0ggKi8KCmRpZmYgLS1naXQgYS8zODktZHMtYmFz ZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL3V0 aWwuaCBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVt YWxsb2MvaW50ZXJuYWwvdXRpbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu LmRjYjFjMGEKLS0tIC9kZXYvbnVsbAorKysgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1h bGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL3V0aWwuaApAQCAtMCwwICsxLDEy MyBAQAorI2lmbmRlZiBKRU1BTExPQ19JTlRFUk5BTF9VVElMX0gKKyNkZWZpbmUgSkVNQUxMT0Nf SU5URVJOQUxfVVRJTF9ICisKKyNkZWZpbmUgVVRJTF9JTkxJTkUgc3RhdGljIGlubGluZQorCisv KiBKdW5rIGZpbGwgcGF0dGVybnMuICovCisjaWZuZGVmIEpFTUFMTE9DX0FMTE9DX0pVTksKKyMg IGRlZmluZSBKRU1BTExPQ19BTExPQ19KVU5LCSgodWludDhfdCkweGE1KQorI2VuZGlmCisjaWZu ZGVmIEpFTUFMTE9DX0ZSRUVfSlVOSworIyAgZGVmaW5lIEpFTUFMTE9DX0ZSRUVfSlVOSwkoKHVp bnQ4X3QpMHg1YSkKKyNlbmRpZgorCisvKgorICogV3JhcCBhIGNwcCBhcmd1bWVudCB0aGF0IGNv bnRhaW5zIGNvbW1hcyBzdWNoIHRoYXQgaXQgaXNuJ3QgYnJva2VuIHVwIGludG8KKyAqIG11bHRp cGxlIGFyZ3VtZW50cy4KKyAqLworI2RlZmluZSBKRU1BTExPQ19BUkdfQ09OQ0FUKC4uLikgX19W QV9BUkdTX18KKworLyogY3BwIG1hY3JvIGRlZmluaXRpb24gc3RyaW5naWZpY2F0aW9uLiAqLwor I2RlZmluZSBTVFJJTkdJRllfSEVMUEVSKHgpICN4CisjZGVmaW5lIFNUUklOR0lGWSh4KSBTVFJJ TkdJRllfSEVMUEVSKHgpCisKKy8qCisgKiBTaWxlbmNlIGNvbXBpbGVyIHdhcm5pbmdzIGR1ZSB0 byB1bmluaXRpYWxpemVkIHZhbHVlcy4gIFRoaXMgaXMgdXNlZAorICogd2hlcmV2ZXIgdGhlIGNv bXBpbGVyIGZhaWxzIHRvIHJlY29nbml6ZSB0aGF0IHRoZSB2YXJpYWJsZSBpcyBuZXZlciB1c2Vk CisgKiB1bmluaXRpYWxpemVkLgorICovCisjZGVmaW5lIEpFTUFMTE9DX0NDX1NJTEVOQ0VfSU5J VCh2KSA9IHYKKworI2lmZGVmIF9fR05VQ19fCisjICBkZWZpbmUgbGlrZWx5KHgpICAgX19idWls dGluX2V4cGVjdCghISh4KSwgMSkKKyMgIGRlZmluZSB1bmxpa2VseSh4KSBfX2J1aWx0aW5fZXhw ZWN0KCEhKHgpLCAwKQorI2Vsc2UKKyMgIGRlZmluZSBsaWtlbHkoeCkgICAhISh4KQorIyAgZGVm aW5lIHVubGlrZWx5KHgpICEhKHgpCisjZW5kaWYKKworI2lmICFkZWZpbmVkKEpFTUFMTE9DX0lO VEVSTkFMX1VOUkVBQ0hBQkxFKQorIyAgZXJyb3IgSkVNQUxMT0NfSU5URVJOQUxfVU5SRUFDSEFC TEUgc2hvdWxkIGhhdmUgYmVlbiBkZWZpbmVkIGJ5IGNvbmZpZ3VyZQorI2VuZGlmCisKKyNkZWZp bmUgdW5yZWFjaGFibGUoKSBKRU1BTExPQ19JTlRFUk5BTF9VTlJFQUNIQUJMRSgpCisKKy8qIFNl dCBlcnJvciBjb2RlLiAqLworVVRJTF9JTkxJTkUgdm9pZAorc2V0X2Vycm5vKGludCBlcnJudW0p IHsKKyNpZmRlZiBfV0lOMzIKKwlTZXRMYXN0RXJyb3IoZXJybnVtKTsKKyNlbHNlCisJZXJybm8g PSBlcnJudW07CisjZW5kaWYKK30KKworLyogR2V0IGxhc3QgZXJyb3IgY29kZS4gKi8KK1VUSUxf SU5MSU5FIGludAorZ2V0X2Vycm5vKHZvaWQpIHsKKyNpZmRlZiBfV0lOMzIKKwlyZXR1cm4gR2V0 TGFzdEVycm9yKCk7CisjZWxzZQorCXJldHVybiBlcnJubzsKKyNlbmRpZgorfQorCitKRU1BTExP Q19BTFdBWVNfSU5MSU5FIHZvaWQKK3V0aWxfYXNzdW1lKGJvb2wgYikgeworCWlmICghYikgewor CQl1bnJlYWNoYWJsZSgpOworCX0KK30KKworLyogcHRyIHNob3VsZCBiZSB2YWxpZC4gKi8KK0pF TUFMTE9DX0FMV0FZU19JTkxJTkUgdm9pZAordXRpbF9wcmVmZXRjaF9yZWFkKHZvaWQgKnB0cikg eworCS8qCisJICogVGhpcyBzaG91bGQgYXJndWFibHkgYmUgYSBjb25maWcgY2hlY2s7IGJ1dCBh bnkgdmVyc2lvbiBvZiBHQ0Mgc28gb2xkCisJICogdGhhdCBpdCBkb2Vzbid0IHN1cHBvcnQgX19i dWlsdGluX3ByZWZldGNoIGlzIGFsc28gdG9vIG9sZCB0byBidWlsZAorCSAqIGplbWFsbG9jLgor CSAqLworI2lmZGVmIF9fR05VQ19fCisJaWYgKGNvbmZpZ19kZWJ1ZykgeworCQkvKiBFbmZvcmNl IHRoZSAidmFsaWQgcHRyIiByZXF1aXJlbWVudC4gKi8KKwkJKih2b2xhdGlsZSBjaGFyICopcHRy OworCX0KKwlfX2J1aWx0aW5fcHJlZmV0Y2gocHRyLCAvKiByZWFkIG9yIHdyaXRlICovIDAsIC8q IGxvY2FsaXR5IGhpbnQgKi8gMyk7CisjZWxzZQorCSoodm9sYXRpbGUgY2hhciAqKXB0cjsKKyNl bmRpZgorfQorCitKRU1BTExPQ19BTFdBWVNfSU5MSU5FIHZvaWQKK3V0aWxfcHJlZmV0Y2hfd3Jp dGUodm9pZCAqcHRyKSB7CisjaWZkZWYgX19HTlVDX18KKwlpZiAoY29uZmlnX2RlYnVnKSB7CisJ CSoodm9sYXRpbGUgY2hhciAqKXB0cjsKKwl9CisJLyoKKwkgKiBUaGUgb25seSBkaWZmZXJlbmNl IGZyb20gdGhlIHJlYWQgdmFyaWFudCBpcyB0aGF0IHRoaXMgaGFzIGEgMSBhcyB0aGUKKwkgKiBz ZWNvbmQgYXJndW1lbnQgKHRoZSB3cml0ZSBoaW50KS4KKwkgKi8KKwlfX2J1aWx0aW5fcHJlZmV0 Y2gocHRyLCAxLCAzKTsKKyNlbHNlCisJKih2b2xhdGlsZSBjaGFyICopcHRyOworI2VuZGlmCit9 CisKK0pFTUFMTE9DX0FMV0FZU19JTkxJTkUgdm9pZAordXRpbF9wcmVmZXRjaF9yZWFkX3Jhbmdl KHZvaWQgKnB0ciwgc2l6ZV90IHN6KSB7CisJZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzejsgaSAr PSBDQUNIRUxJTkUpIHsKKwkJdXRpbF9wcmVmZXRjaF9yZWFkKCh2b2lkICopKCh1aW50cHRyX3Qp cHRyICsgaSkpOworCX0KK30KKworSkVNQUxMT0NfQUxXQVlTX0lOTElORSB2b2lkCit1dGlsX3By ZWZldGNoX3dyaXRlX3JhbmdlKHZvaWQgKnB0ciwgc2l6ZV90IHN6KSB7CisJZm9yIChzaXplX3Qg aSA9IDA7IGkgPCBzejsgaSArPSBDQUNIRUxJTkUpIHsKKwkJdXRpbF9wcmVmZXRjaF93cml0ZSgo dm9pZCAqKSgodWludHB0cl90KXB0ciArIGkpKTsKKwl9Cit9CisKKyN1bmRlZiBVVElMX0lOTElO RQorCisjZW5kaWYgLyogSkVNQUxMT0NfSU5URVJOQUxfVVRJTF9IICovCgpkaWZmIC0tZ2l0IGEv Mzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9p bnRlcm5hbC93aXRuZXNzLmggYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMu MC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL3dpdG5lc3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwLi5lODFiOWEwCi0tLSAvZGV2L251bGwKKysrIGIvMzg5LWRzLWJhc2Ut My4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC93aXRu ZXNzLmgKQEAgLTAsMCArMSwzNzggQEAKKyNpZm5kZWYgSkVNQUxMT0NfSU5URVJOQUxfV0lUTkVT U19ICisjZGVmaW5lIEpFTUFMTE9DX0lOVEVSTkFMX1dJVE5FU1NfSAorCisjaW5jbHVkZSAiamVt YWxsb2MvaW50ZXJuYWwvcWwuaCIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIExPQ0sg UkFOS1MgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2VudW0gd2l0bmVzc19yYW5rX2Ug eworCS8qCisJICogT3JkZXIgbWF0dGVycyB3aXRoaW4gdGhpcyBlbnVtIGxpc3RpbmcgLS0gaGln aGVyIHZhbHVlZCBsb2NrcyBjYW4KKwkgKiBvbmx5IGJlIGFjcXVpcmVkIGFmdGVyIGxvd2VyLXZh bHVlZCBvbmVzLiAgV2UgdXNlIHRoZQorCSAqIGF1dG8taW5jcmVtZW50aW5nLW5lc3Mgb2YgZW51 bSB2YWx1ZXMgdG8gZW5mb3JjZSB0aGlzLgorCSAqLworCisJLyoKKwkgKiBXaXRuZXNzZXMgd2l0 aCByYW5rIFdJVE5FU1NfUkFOS19PTUlUIGFyZSBjb21wbGV0ZWx5IGlnbm9yZWQgYnkgdGhlCisJ ICogd2l0bmVzcyBtYWNoaW5lcnkuCisJICovCisJV0lUTkVTU19SQU5LX09NSVQsCisJV0lUTkVT U19SQU5LX01JTiwKKwlXSVRORVNTX1JBTktfSU5JVCA9IFdJVE5FU1NfUkFOS19NSU4sCisJV0lU TkVTU19SQU5LX0NUTCwKKwlXSVRORVNTX1JBTktfVENBQ0hFUywKKwlXSVRORVNTX1JBTktfQVJF TkFTLAorCVdJVE5FU1NfUkFOS19CQUNLR1JPVU5EX1RIUkVBRF9HTE9CQUwsCisJV0lUTkVTU19S QU5LX1BST0ZfRFVNUCwKKwlXSVRORVNTX1JBTktfUFJPRl9CVDJHQ1RYLAorCVdJVE5FU1NfUkFO S19QUk9GX1REQVRBUywKKwlXSVRORVNTX1JBTktfUFJPRl9UREFUQSwKKwlXSVRORVNTX1JBTktf UFJPRl9MT0csCisJV0lUTkVTU19SQU5LX1BST0ZfR0NUWCwKKwlXSVRORVNTX1JBTktfUFJPRl9S RUNFTlRfRFVNUCwKKwlXSVRORVNTX1JBTktfQkFDS0dST1VORF9USFJFQUQsCisJLyoKKwkgKiBV c2VkIGFzIGFuIGFyZ3VtZW50IHRvIHdpdG5lc3NfYXNzZXJ0X2RlcHRoX3RvX3JhbmsoKSBpbiBv cmRlciB0bworCSAqIHZhbGlkYXRlIGRlcHRoIGV4Y2x1ZGluZyBub24tY29yZSBsb2NrcyB3aXRo IGxvd2VyIHJhbmtzLiAgU2luY2UgdGhlCisJICogcmFuayBhcmd1bWVudCB0byB3aXRuZXNzX2Fz c2VydF9kZXB0aF90b19yYW5rKCkgaXMgaW5jbHVzaXZlIHJhdGhlcgorCSAqIHRoYW4gZXhjbHVz aXZlLCB0aGlzIGRlZmluaXRpb24gY2FuIGhhdmUgdGhlIHNhbWUgdmFsdWUgYXMgdGhlCisJICog bWluaW1hbGx5IHJhbmtlZCBjb3JlIGxvY2suCisJICovCisJV0lUTkVTU19SQU5LX0NPUkUsCisJ V0lUTkVTU19SQU5LX0RFQ0FZID0gV0lUTkVTU19SQU5LX0NPUkUsCisJV0lUTkVTU19SQU5LX1RD QUNIRV9RTCwKKworCVdJVE5FU1NfUkFOS19TRUNfU0hBUkQsCisKKwlXSVRORVNTX1JBTktfRVhU RU5UX0dST1csCisJV0lUTkVTU19SQU5LX0hQQV9TSEFSRF9HUk9XID0gV0lUTkVTU19SQU5LX0VY VEVOVF9HUk9XLAorCVdJVE5FU1NfUkFOS19TQU5fQlVNUF9BTExPQyA9IFdJVE5FU1NfUkFOS19F WFRFTlRfR1JPVywKKworCVdJVE5FU1NfUkFOS19FWFRFTlRTLAorCVdJVE5FU1NfUkFOS19IUEFf U0hBUkQgPSBXSVRORVNTX1JBTktfRVhURU5UUywKKworCVdJVE5FU1NfUkFOS19IUEFfQ0VOVFJB TF9HUk9XLAorCVdJVE5FU1NfUkFOS19IUEFfQ0VOVFJBTCwKKworCVdJVE5FU1NfUkFOS19FREFU QV9DQUNIRSwKKworCVdJVE5FU1NfUkFOS19SVFJFRSwKKwlXSVRORVNTX1JBTktfQkFTRSwKKwlX SVRORVNTX1JBTktfQVJFTkFfTEFSR0UsCisJV0lUTkVTU19SQU5LX0hPT0ssCisKKwlXSVRORVNT X1JBTktfTEVBRj0weDEwMDAsCisJV0lUTkVTU19SQU5LX0JJTiA9IFdJVE5FU1NfUkFOS19MRUFG LAorCVdJVE5FU1NfUkFOS19BUkVOQV9TVEFUUyA9IFdJVE5FU1NfUkFOS19MRUFGLAorCVdJVE5F U1NfUkFOS19DT1VOVEVSX0FDQ1VNID0gV0lUTkVTU19SQU5LX0xFQUYsCisJV0lUTkVTU19SQU5L X0RTUyA9IFdJVE5FU1NfUkFOS19MRUFGLAorCVdJVE5FU1NfUkFOS19QUk9GX0FDVElWRSA9IFdJ VE5FU1NfUkFOS19MRUFGLAorCVdJVE5FU1NfUkFOS19QUk9GX0RVTVBfRklMRU5BTUUgPSBXSVRO RVNTX1JBTktfTEVBRiwKKwlXSVRORVNTX1JBTktfUFJPRl9HRFVNUCA9IFdJVE5FU1NfUkFOS19M RUFGLAorCVdJVE5FU1NfUkFOS19QUk9GX05FWFRfVEhSX1VJRCA9IFdJVE5FU1NfUkFOS19MRUFG LAorCVdJVE5FU1NfUkFOS19QUk9GX1JFQ0VOVF9BTExPQyA9IFdJVE5FU1NfUkFOS19MRUFGLAor CVdJVE5FU1NfUkFOS19QUk9GX1NUQVRTID0gV0lUTkVTU19SQU5LX0xFQUYsCisJV0lUTkVTU19S QU5LX1BST0ZfVEhSRUFEX0FDVElWRV9JTklUID0gV0lUTkVTU19SQU5LX0xFQUYsCit9OwordHlw ZWRlZiBlbnVtIHdpdG5lc3NfcmFua19lIHdpdG5lc3NfcmFua190OworCisvKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqLworLyogUEVSLVdJVE5FU1MgREFUQSAqLworLyoqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq Ki8KKyNpZiBkZWZpbmVkKEpFTUFMTE9DX0RFQlVHKQorIyAgZGVmaW5lIFdJVE5FU1NfSU5JVElB TElaRVIobmFtZSwgcmFuaykge25hbWUsIHJhbmssIE5VTEwsIE5VTEwsIHtOVUxMLCBOVUxMfX0K KyNlbHNlCisjICBkZWZpbmUgV0lUTkVTU19JTklUSUFMSVpFUihuYW1lLCByYW5rKQorI2VuZGlm CisKK3R5cGVkZWYgc3RydWN0IHdpdG5lc3NfcyB3aXRuZXNzX3Q7Cit0eXBlZGVmIHFsX2hlYWQo d2l0bmVzc190KSB3aXRuZXNzX2xpc3RfdDsKK3R5cGVkZWYgaW50IHdpdG5lc3NfY29tcF90IChj b25zdCB3aXRuZXNzX3QgKiwgdm9pZCAqLCBjb25zdCB3aXRuZXNzX3QgKiwKKyAgICB2b2lkICop OworCitzdHJ1Y3Qgd2l0bmVzc19zIHsKKwkvKiBOYW1lLCB1c2VkIGZvciBwcmludGluZyBsb2Nr IG9yZGVyIHJldmVyc2FsIG1lc3NhZ2VzLiAqLworCWNvbnN0IGNoYXIJCSpuYW1lOworCisJLyoK KwkgKiBXaXRuZXNzIHJhbmssIHdoZXJlIDAgaXMgbG93ZXN0IGFuZCBXSVRORVNTX1JBTktfTEVB RiBpcyBoaWdoZXN0LgorCSAqIFdpdG5lc3NlcyBtdXN0IGJlIGFjcXVpcmVkIGluIG9yZGVyIG9m IGluY3JlYXNpbmcgcmFuay4KKwkgKi8KKwl3aXRuZXNzX3JhbmtfdAkJcmFuazsKKworCS8qCisJ ICogSWYgdHdvIHdpdG5lc3NlcyBhcmUgb2YgZXF1YWwgcmFuayBhbmQgdGhleSBoYXZlIHRoZSBz YW1wIGNvbXAKKwkgKiBmdW5jdGlvbiBwb2ludGVyLCBpdCBpcyBjYWxsZWQgYXMgYSBsYXN0IGF0 dGVtcHQgdG8gZGlmZmVyZW50aWF0ZQorCSAqIGJldHdlZW4gd2l0bmVzc2VzIG9mIGVxdWFsIHJh bmsuCisJICovCisJd2l0bmVzc19jb21wX3QJCSpjb21wOworCisJLyogT3BhcXVlIGRhdGEsIHBh c3NlZCB0byBjb21wKCkuICovCisJdm9pZAkJCSpvcGFxdWU7CisKKwkvKiBMaW5rYWdlIGZvciB0 aHJlYWQncyBjdXJyZW50bHkgb3duZWQgbG9ja3MuICovCisJcWxfZWxtKHdpdG5lc3NfdCkJbGlu azsKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBQRVItVEhSRUFEIERBVEEgKi8K Ky8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKiovCit0eXBlZGVmIHN0cnVjdCB3aXRuZXNzX3RzZF9zIHdp dG5lc3NfdHNkX3Q7CitzdHJ1Y3Qgd2l0bmVzc190c2RfcyB7CisJd2l0bmVzc19saXN0X3Qgd2l0 bmVzc2VzOworCWJvb2wgZm9ya2luZzsKK307CisKKyNkZWZpbmUgV0lUTkVTU19UU0RfSU5JVElB TElaRVIgeyBxbF9oZWFkX2luaXRpYWxpemVyKHdpdG5lc3NlcyksIGZhbHNlIH0KKyNkZWZpbmUg V0lUTkVTU19UU0ROX05VTEwgKCh3aXRuZXNzX3RzZG5fdCAqKTApCisKKy8qKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKiovCisvKiAoUEVSLVRIUkVBRCkgTlVMTEFCSUxJVFkgSEVMUEVSUyAqLworLyoqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKi8KK3R5cGVkZWYgc3RydWN0IHdpdG5lc3NfdHNkbl9zIHdpdG5lc3Nf dHNkbl90Oworc3RydWN0IHdpdG5lc3NfdHNkbl9zIHsKKwl3aXRuZXNzX3RzZF90IHdpdG5lc3Nf dHNkOworfTsKKworSkVNQUxMT0NfQUxXQVlTX0lOTElORSB3aXRuZXNzX3RzZG5fdCAqCit3aXRu ZXNzX3RzZF90c2RuKHdpdG5lc3NfdHNkX3QgKndpdG5lc3NfdHNkKSB7CisJcmV0dXJuICh3aXRu ZXNzX3RzZG5fdCAqKXdpdG5lc3NfdHNkOworfQorCitKRU1BTExPQ19BTFdBWVNfSU5MSU5FIGJv b2wKK3dpdG5lc3NfdHNkbl9udWxsKHdpdG5lc3NfdHNkbl90ICp3aXRuZXNzX3RzZG4pIHsKKwly ZXR1cm4gd2l0bmVzc190c2RuID09IE5VTEw7Cit9CisKK0pFTUFMTE9DX0FMV0FZU19JTkxJTkUg d2l0bmVzc190c2RfdCAqCit3aXRuZXNzX3RzZG5fdHNkKHdpdG5lc3NfdHNkbl90ICp3aXRuZXNz X3RzZG4pIHsKKwlhc3NlcnQoIXdpdG5lc3NfdHNkbl9udWxsKHdpdG5lc3NfdHNkbikpOworCXJl dHVybiAmd2l0bmVzc190c2RuLT53aXRuZXNzX3RzZDsKK30KKworLyoqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKi8KKy8qIEFQSSAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgd2l0bmVzc19p bml0KHdpdG5lc3NfdCAqd2l0bmVzcywgY29uc3QgY2hhciAqbmFtZSwgd2l0bmVzc19yYW5rX3Qg cmFuaywKKyAgICB3aXRuZXNzX2NvbXBfdCAqY29tcCwgdm9pZCAqb3BhcXVlKTsKKwordHlwZWRl ZiB2b2lkICh3aXRuZXNzX2xvY2tfZXJyb3JfdCkoY29uc3Qgd2l0bmVzc19saXN0X3QgKiwgY29u c3Qgd2l0bmVzc190ICopOworZXh0ZXJuIHdpdG5lc3NfbG9ja19lcnJvcl90ICpKRVRfTVVUQUJM RSB3aXRuZXNzX2xvY2tfZXJyb3I7CisKK3R5cGVkZWYgdm9pZCAod2l0bmVzc19vd25lcl9lcnJv cl90KShjb25zdCB3aXRuZXNzX3QgKik7CitleHRlcm4gd2l0bmVzc19vd25lcl9lcnJvcl90ICpK RVRfTVVUQUJMRSB3aXRuZXNzX293bmVyX2Vycm9yOworCit0eXBlZGVmIHZvaWQgKHdpdG5lc3Nf bm90X293bmVyX2Vycm9yX3QpKGNvbnN0IHdpdG5lc3NfdCAqKTsKK2V4dGVybiB3aXRuZXNzX25v dF9vd25lcl9lcnJvcl90ICpKRVRfTVVUQUJMRSB3aXRuZXNzX25vdF9vd25lcl9lcnJvcjsKKwor dHlwZWRlZiB2b2lkICh3aXRuZXNzX2RlcHRoX2Vycm9yX3QpKGNvbnN0IHdpdG5lc3NfbGlzdF90 ICosCisgICAgd2l0bmVzc19yYW5rX3QgcmFua19pbmNsdXNpdmUsIHVuc2lnbmVkIGRlcHRoKTsK K2V4dGVybiB3aXRuZXNzX2RlcHRoX2Vycm9yX3QgKkpFVF9NVVRBQkxFIHdpdG5lc3NfZGVwdGhf ZXJyb3I7CisKK3ZvaWQgd2l0bmVzc2VzX2NsZWFudXAod2l0bmVzc190c2RfdCAqd2l0bmVzc190 c2QpOwordm9pZCB3aXRuZXNzX3ByZWZvcmsod2l0bmVzc190c2RfdCAqd2l0bmVzc190c2QpOwor dm9pZCB3aXRuZXNzX3Bvc3Rmb3JrX3BhcmVudCh3aXRuZXNzX3RzZF90ICp3aXRuZXNzX3RzZCk7 Cit2b2lkIHdpdG5lc3NfcG9zdGZvcmtfY2hpbGQod2l0bmVzc190c2RfdCAqd2l0bmVzc190c2Qp OworCisvKiBIZWxwZXIsIG5vdCBpbnRlbmRlZCBmb3IgZGlyZWN0IHVzZS4gKi8KK3N0YXRpYyBp bmxpbmUgYm9vbAord2l0bmVzc19vd25lcih3aXRuZXNzX3RzZF90ICp3aXRuZXNzX3RzZCwgY29u c3Qgd2l0bmVzc190ICp3aXRuZXNzKSB7CisJd2l0bmVzc19saXN0X3QgKndpdG5lc3NlczsKKwl3 aXRuZXNzX3QgKnc7CisKKwljYXNzZXJ0KGNvbmZpZ19kZWJ1Zyk7CisKKwl3aXRuZXNzZXMgPSAm d2l0bmVzc190c2QtPndpdG5lc3NlczsKKwlxbF9mb3JlYWNoKHcsIHdpdG5lc3NlcywgbGluaykg eworCQlpZiAodyA9PSB3aXRuZXNzKSB7CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCX0KKworCXJl dHVybiBmYWxzZTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCit3aXRuZXNzX2Fzc2VydF9vd25l cih3aXRuZXNzX3RzZG5fdCAqd2l0bmVzc190c2RuLCBjb25zdCB3aXRuZXNzX3QgKndpdG5lc3Mp IHsKKwl3aXRuZXNzX3RzZF90ICp3aXRuZXNzX3RzZDsKKworCWlmICghY29uZmlnX2RlYnVnKSB7 CisJCXJldHVybjsKKwl9CisKKwlpZiAod2l0bmVzc190c2RuX251bGwod2l0bmVzc190c2RuKSkg eworCQlyZXR1cm47CisJfQorCXdpdG5lc3NfdHNkID0gd2l0bmVzc190c2RuX3RzZCh3aXRuZXNz X3RzZG4pOworCWlmICh3aXRuZXNzLT5yYW5rID09IFdJVE5FU1NfUkFOS19PTUlUKSB7CisJCXJl dHVybjsKKwl9CisKKwlpZiAod2l0bmVzc19vd25lcih3aXRuZXNzX3RzZCwgd2l0bmVzcykpIHsK KwkJcmV0dXJuOworCX0KKwl3aXRuZXNzX293bmVyX2Vycm9yKHdpdG5lc3MpOworfQorCitzdGF0 aWMgaW5saW5lIHZvaWQKK3dpdG5lc3NfYXNzZXJ0X25vdF9vd25lcih3aXRuZXNzX3RzZG5fdCAq d2l0bmVzc190c2RuLAorICAgIGNvbnN0IHdpdG5lc3NfdCAqd2l0bmVzcykgeworCXdpdG5lc3Nf dHNkX3QgKndpdG5lc3NfdHNkOworCXdpdG5lc3NfbGlzdF90ICp3aXRuZXNzZXM7CisJd2l0bmVz c190ICp3OworCisJaWYgKCFjb25maWdfZGVidWcpIHsKKwkJcmV0dXJuOworCX0KKworCWlmICh3 aXRuZXNzX3RzZG5fbnVsbCh3aXRuZXNzX3RzZG4pKSB7CisJCXJldHVybjsKKwl9CisJd2l0bmVz c190c2QgPSB3aXRuZXNzX3RzZG5fdHNkKHdpdG5lc3NfdHNkbik7CisJaWYgKHdpdG5lc3MtPnJh bmsgPT0gV0lUTkVTU19SQU5LX09NSVQpIHsKKwkJcmV0dXJuOworCX0KKworCXdpdG5lc3NlcyA9 ICZ3aXRuZXNzX3RzZC0+d2l0bmVzc2VzOworCXFsX2ZvcmVhY2godywgd2l0bmVzc2VzLCBsaW5r KSB7CisJCWlmICh3ID09IHdpdG5lc3MpIHsKKwkJCXdpdG5lc3Nfbm90X293bmVyX2Vycm9yKHdp dG5lc3MpOworCQl9CisJfQorfQorCisvKiBSZXR1cm5zIGRlcHRoLiAgTm90IGludGVuZGVkIGZv ciBkaXJlY3QgdXNlLiAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZAord2l0bmVzc19kZXB0aF90 b19yYW5rKHdpdG5lc3NfbGlzdF90ICp3aXRuZXNzZXMsIHdpdG5lc3NfcmFua190IHJhbmtfaW5j bHVzaXZlKQoreworCXVuc2lnbmVkIGQgPSAwOworCXdpdG5lc3NfdCAqdyA9IHFsX2xhc3Qod2l0 bmVzc2VzLCBsaW5rKTsKKworCWlmICh3ICE9IE5VTEwpIHsKKwkJcWxfcmV2ZXJzZV9mb3JlYWNo KHcsIHdpdG5lc3NlcywgbGluaykgeworCQkJaWYgKHctPnJhbmsgPCByYW5rX2luY2x1c2l2ZSkg eworCQkJCWJyZWFrOworCQkJfQorCQkJZCsrOworCQl9CisJfQorCisJcmV0dXJuIGQ7Cit9CisK K3N0YXRpYyBpbmxpbmUgdm9pZAord2l0bmVzc19hc3NlcnRfZGVwdGhfdG9fcmFuayh3aXRuZXNz X3RzZG5fdCAqd2l0bmVzc190c2RuLAorICAgIHdpdG5lc3NfcmFua190IHJhbmtfaW5jbHVzaXZl LCB1bnNpZ25lZCBkZXB0aCkgeworCWlmICghY29uZmlnX2RlYnVnIHx8IHdpdG5lc3NfdHNkbl9u dWxsKHdpdG5lc3NfdHNkbikpIHsKKwkJcmV0dXJuOworCX0KKworCXdpdG5lc3NfbGlzdF90ICp3 aXRuZXNzZXMgPSAmd2l0bmVzc190c2RuX3RzZCh3aXRuZXNzX3RzZG4pLT53aXRuZXNzZXM7CisJ dW5zaWduZWQgZCA9IHdpdG5lc3NfZGVwdGhfdG9fcmFuayh3aXRuZXNzZXMsIHJhbmtfaW5jbHVz aXZlKTsKKworCWlmIChkICE9IGRlcHRoKSB7CisJCXdpdG5lc3NfZGVwdGhfZXJyb3Iod2l0bmVz c2VzLCByYW5rX2luY2x1c2l2ZSwgZGVwdGgpOworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lk Cit3aXRuZXNzX2Fzc2VydF9kZXB0aCh3aXRuZXNzX3RzZG5fdCAqd2l0bmVzc190c2RuLCB1bnNp Z25lZCBkZXB0aCkgeworCXdpdG5lc3NfYXNzZXJ0X2RlcHRoX3RvX3Jhbmsod2l0bmVzc190c2Ru LCBXSVRORVNTX1JBTktfTUlOLCBkZXB0aCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAord2l0 bmVzc19hc3NlcnRfbG9ja2xlc3Mod2l0bmVzc190c2RuX3QgKndpdG5lc3NfdHNkbikgeworCXdp dG5lc3NfYXNzZXJ0X2RlcHRoKHdpdG5lc3NfdHNkbiwgMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUg dm9pZAord2l0bmVzc19hc3NlcnRfcG9zaXRpdmVfZGVwdGhfdG9fcmFuayh3aXRuZXNzX3RzZG5f dCAqd2l0bmVzc190c2RuLAorICAgIHdpdG5lc3NfcmFua190IHJhbmtfaW5jbHVzaXZlKSB7CisJ aWYgKCFjb25maWdfZGVidWcgfHwgd2l0bmVzc190c2RuX251bGwod2l0bmVzc190c2RuKSkgewor CQlyZXR1cm47CisJfQorCisJd2l0bmVzc19saXN0X3QgKndpdG5lc3NlcyA9ICZ3aXRuZXNzX3Rz ZG5fdHNkKHdpdG5lc3NfdHNkbiktPndpdG5lc3NlczsKKwl1bnNpZ25lZCBkID0gd2l0bmVzc19k ZXB0aF90b19yYW5rKHdpdG5lc3NlcywgcmFua19pbmNsdXNpdmUpOworCisJaWYgKGQgPT0gMCkg eworCQl3aXRuZXNzX2RlcHRoX2Vycm9yKHdpdG5lc3NlcywgcmFua19pbmNsdXNpdmUsIDEpOwor CX0KK30KKworc3RhdGljIGlubGluZSB2b2lkCit3aXRuZXNzX2xvY2sod2l0bmVzc190c2RuX3Qg KndpdG5lc3NfdHNkbiwgd2l0bmVzc190ICp3aXRuZXNzKSB7CisJd2l0bmVzc190c2RfdCAqd2l0 bmVzc190c2Q7CisJd2l0bmVzc19saXN0X3QgKndpdG5lc3NlczsKKwl3aXRuZXNzX3QgKnc7CisK KwlpZiAoIWNvbmZpZ19kZWJ1ZykgeworCQlyZXR1cm47CisJfQorCisJaWYgKHdpdG5lc3NfdHNk bl9udWxsKHdpdG5lc3NfdHNkbikpIHsKKwkJcmV0dXJuOworCX0KKwl3aXRuZXNzX3RzZCA9IHdp dG5lc3NfdHNkbl90c2Qod2l0bmVzc190c2RuKTsKKwlpZiAod2l0bmVzcy0+cmFuayA9PSBXSVRO RVNTX1JBTktfT01JVCkgeworCQlyZXR1cm47CisJfQorCisJd2l0bmVzc19hc3NlcnRfbm90X293 bmVyKHdpdG5lc3NfdHNkbiwgd2l0bmVzcyk7CisKKwl3aXRuZXNzZXMgPSAmd2l0bmVzc190c2Qt PndpdG5lc3NlczsKKwl3ID0gcWxfbGFzdCh3aXRuZXNzZXMsIGxpbmspOworCWlmICh3ID09IE5V TEwpIHsKKwkJLyogTm8gb3RoZXIgbG9ja3M7IGRvIG5vdGhpbmcuICovCisJfSBlbHNlIGlmICh3 aXRuZXNzX3RzZC0+Zm9ya2luZyAmJiB3LT5yYW5rIDw9IHdpdG5lc3MtPnJhbmspIHsKKwkJLyog Rm9ya2luZywgYW5kIHJlbGF4ZWQgcmFua2luZyBzYXRpc2ZpZWQuICovCisJfSBlbHNlIGlmICh3 LT5yYW5rID4gd2l0bmVzcy0+cmFuaykgeworCQkvKiBOb3QgZm9ya2luZywgcmFuayBvcmRlciBy ZXZlcnNhbC4gKi8KKwkJd2l0bmVzc19sb2NrX2Vycm9yKHdpdG5lc3Nlcywgd2l0bmVzcyk7CisJ fSBlbHNlIGlmICh3LT5yYW5rID09IHdpdG5lc3MtPnJhbmsgJiYgKHctPmNvbXAgPT0gTlVMTCB8 fCB3LT5jb21wICE9CisJICAgIHdpdG5lc3MtPmNvbXAgfHwgdy0+Y29tcCh3LCB3LT5vcGFxdWUs IHdpdG5lc3MsIHdpdG5lc3MtPm9wYXF1ZSkgPgorCSAgICAwKSkgeworCQkvKgorCQkgKiBNaXNz aW5nL2luY29tcGF0aWJsZSBjb21wYXJpc29uIGZ1bmN0aW9uLCBvciBjb21wYXJpc29uCisJCSAq IGZ1bmN0aW9uIGluZGljYXRlcyByYW5rIG9yZGVyIHJldmVyc2FsLgorCQkgKi8KKwkJd2l0bmVz c19sb2NrX2Vycm9yKHdpdG5lc3Nlcywgd2l0bmVzcyk7CisJfQorCisJcWxfZWxtX25ldyh3aXRu ZXNzLCBsaW5rKTsKKwlxbF90YWlsX2luc2VydCh3aXRuZXNzZXMsIHdpdG5lc3MsIGxpbmspOwor fQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3dpdG5lc3NfdW5sb2NrKHdpdG5lc3NfdHNkbl90ICp3 aXRuZXNzX3RzZG4sIHdpdG5lc3NfdCAqd2l0bmVzcykgeworCXdpdG5lc3NfdHNkX3QgKndpdG5l c3NfdHNkOworCXdpdG5lc3NfbGlzdF90ICp3aXRuZXNzZXM7CisKKwlpZiAoIWNvbmZpZ19kZWJ1 ZykgeworCQlyZXR1cm47CisJfQorCisJaWYgKHdpdG5lc3NfdHNkbl9udWxsKHdpdG5lc3NfdHNk bikpIHsKKwkJcmV0dXJuOworCX0KKwl3aXRuZXNzX3RzZCA9IHdpdG5lc3NfdHNkbl90c2Qod2l0 bmVzc190c2RuKTsKKwlpZiAod2l0bmVzcy0+cmFuayA9PSBXSVRORVNTX1JBTktfT01JVCkgewor CQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBDaGVjayB3aGV0aGVyIG93bmVyIGJlZm9yZSByZW1v dmFsLCByYXRoZXIgdGhhbiByZWx5aW5nIG9uCisJICogd2l0bmVzc19hc3NlcnRfb3duZXIoKSB0 byBhYm9ydCwgc28gdGhhdCB1bml0IHRlc3RzIGNhbiB0ZXN0IHRoaXMKKwkgKiBmdW5jdGlvbidz IGZhaWx1cmUgbW9kZSB3aXRob3V0IGNhdXNpbmcgdW5kZWZpbmVkIGJlaGF2aW9yLgorCSAqLwor CWlmICh3aXRuZXNzX293bmVyKHdpdG5lc3NfdHNkLCB3aXRuZXNzKSkgeworCQl3aXRuZXNzZXMg PSAmd2l0bmVzc190c2QtPndpdG5lc3NlczsKKwkJcWxfcmVtb3ZlKHdpdG5lc3Nlcywgd2l0bmVz cywgbGluayk7CisJfSBlbHNlIHsKKwkJd2l0bmVzc19hc3NlcnRfb3duZXIod2l0bmVzc190c2Ru LCB3aXRuZXNzKTsKKwl9Cit9CisKKyNlbmRpZiAvKiBKRU1BTExPQ19JTlRFUk5BTF9XSVRORVNT X0ggKi8KCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMu MC9pbmNsdWRlL2plbWFsbG9jL2plbWFsbG9jLnNoIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQv amVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9qZW1hbGxvYy5zaApuZXcgZmlsZSBtb2Rl IDEwMDc1NQppbmRleCAwMDAwMDAwLi5iMTliMTU0Ci0tLSAvZGV2L251bGwKKysrIGIvMzg5LWRz LWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9qZW1hbGxv Yy5zaApAQCAtMCwwICsxLDI3IEBACisjIS9iaW4vc2gKKworb2Jqcm9vdD0kMQorCitjYXQgPDxF T0YKKyNpZm5kZWYgSkVNQUxMT0NfSF8KKyNkZWZpbmUgSkVNQUxMT0NfSF8KKyNpZmRlZiBfX2Nw bHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworRU9GCisKK2ZvciBoZHIgaW4gamVtYWxs b2NfZGVmcy5oIGplbWFsbG9jX3JlbmFtZS5oIGplbWFsbG9jX21hY3Jvcy5oIFwKKyAgICAgICAg ICAgamVtYWxsb2NfcHJvdG9zLmggamVtYWxsb2NfdHlwZWRlZnMuaCBqZW1hbGxvY19tYW5nbGUu aCA7IGRvCisgIGNhdCAiJHtvYmpyb290fWluY2x1ZGUvamVtYWxsb2MvJHtoZHJ9IiBcCisgICAg ICB8IGdyZXAgLXYgJ0dlbmVyYXRlZCBmcm9tIC4qIGJ5IGNvbmZpZ3VyZVwuJyBcCisgICAgICB8 IHNlZCAtZSAncy8gJC8vZycKKyAgZWNobworZG9uZQorCitjYXQgPDxFT0YKKyNpZmRlZiBfX2Nw bHVzcGx1cworfQorI2VuZGlmCisjZW5kaWYgLyogSkVNQUxMT0NfSF8gKi8KK0VPRgoKZGlmZiAt LWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVt YWxsb2MvamVtYWxsb2NfZGVmcy5oLmluIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxs b2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9qZW1hbGxvY19kZWZzLmguaW4KbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2JlMmZjYQotLS0gL2Rldi9udWxsCisrKyBiLzM4OS1k cy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvamVtYWxs b2NfZGVmcy5oLmluCkBAIC0wLDAgKzEsNTQgQEAKKy8qIERlZmluZWQgaWYgX19hdHRyaWJ1dGVf XygoLi4uKSkgc3ludGF4IGlzIHN1cHBvcnRlZC4gKi8KKyN1bmRlZiBKRU1BTExPQ19IQVZFX0FU VFIKKworLyogRGVmaW5lZCBpZiBhbGxvY19zaXplIGF0dHJpYnV0ZSBpcyBzdXBwb3J0ZWQuICov CisjdW5kZWYgSkVNQUxMT0NfSEFWRV9BVFRSX0FMTE9DX1NJWkUKKworLyogRGVmaW5lZCBpZiBm b3JtYXRfYXJnKC4uLikgYXR0cmlidXRlIGlzIHN1cHBvcnRlZC4gKi8KKyN1bmRlZiBKRU1BTExP Q19IQVZFX0FUVFJfRk9STUFUX0FSRworCisvKiBEZWZpbmVkIGlmIGZvcm1hdChnbnVfcHJpbnRm LCAuLi4pIGF0dHJpYnV0ZSBpcyBzdXBwb3J0ZWQuICovCisjdW5kZWYgSkVNQUxMT0NfSEFWRV9B VFRSX0ZPUk1BVF9HTlVfUFJJTlRGCisKKy8qIERlZmluZWQgaWYgZm9ybWF0KHByaW50ZiwgLi4u KSBhdHRyaWJ1dGUgaXMgc3VwcG9ydGVkLiAqLworI3VuZGVmIEpFTUFMTE9DX0hBVkVfQVRUUl9G T1JNQVRfUFJJTlRGCisKKy8qIERlZmluZWQgaWYgZmFsbHRocm91Z2ggYXR0cmlidXRlIGlzIHN1 cHBvcnRlZC4gKi8KKyN1bmRlZiBKRU1BTExPQ19IQVZFX0FUVFJfRkFMTFRIUk9VR0gKKworLyog RGVmaW5lZCBpZiBjb2xkIGF0dHJpYnV0ZSBpcyBzdXBwb3J0ZWQuICovCisjdW5kZWYgSkVNQUxM T0NfSEFWRV9BVFRSX0NPTEQKKworLyoKKyAqIERlZmluZSBvdmVycmlkZXMgZm9yIG5vbi1zdGFu ZGFyZCBhbGxvY2F0b3ItcmVsYXRlZCBmdW5jdGlvbnMgaWYgdGhleSBhcmUKKyAqIHByZXNlbnQg b24gdGhlIHN5c3RlbS4KKyAqLworI3VuZGVmIEpFTUFMTE9DX09WRVJSSURFX01FTUFMSUdOCisj dW5kZWYgSkVNQUxMT0NfT1ZFUlJJREVfVkFMTE9DCisKKy8qCisgKiBBdCBsZWFzdCBMaW51eCBv bWl0cyB0aGUgImNvbnN0IiBpbjoKKyAqCisgKiAgIHNpemVfdCBtYWxsb2NfdXNhYmxlX3NpemUo Y29uc3Qgdm9pZCAqcHRyKTsKKyAqCisgKiBNYXRjaCB0aGUgb3BlcmF0aW5nIHN5c3RlbSdzIHBy b3RvdHlwZS4KKyAqLworI3VuZGVmIEpFTUFMTE9DX1VTQUJMRV9TSVpFX0NPTlNUCisKKy8qCisg KiBJZiBkZWZpbmVkLCBzcGVjaWZ5IHRocm93KCkgZm9yIHRoZSBwdWJsaWMgZnVuY3Rpb24gcHJv dG90eXBlcyB3aGVuIGNvbXBpbGluZworICogd2l0aCBDKysuICBUaGUgb25seSBqdXN0aWZpY2F0 aW9uIGZvciB0aGlzIGlzIHRvIG1hdGNoIHRoZSBwcm90b3R5cGVzIHRoYXQKKyAqIGdsaWJjIGRl ZmluZXMuCisgKi8KKyN1bmRlZiBKRU1BTExPQ19VU0VfQ1hYX1RIUk9XCisKKyNpZmRlZiBfTVND X1ZFUgorIyAgaWZkZWYgX1dJTjY0CisjICAgIGRlZmluZSBMR19TSVpFT0ZfUFRSX1dJTiAzCisj ICBlbHNlCisjICAgIGRlZmluZSBMR19TSVpFT0ZfUFRSX1dJTiAyCisjICBlbmRpZgorI2VuZGlm CisKKy8qIHNpemVvZih2b2lkICopID09IDJeTEdfU0laRU9GX1BUUi4gKi8KKyN1bmRlZiBMR19T SVpFT0ZfUFRSCgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2Mt NS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9qZW1hbGxvY19tYWNyb3MuaC5pbiBiLzM4OS1kcy1iYXNl LTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvamVtYWxsb2NfbWFj cm9zLmguaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWJiMzEzNwotLS0g L2Rldi9udWxsCisrKyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2lu Y2x1ZGUvamVtYWxsb2MvamVtYWxsb2NfbWFjcm9zLmguaW4KQEAgLTAsMCArMSwxNDkgQEAKKyNp bmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRib29sLmg+CisjaW5jbHVkZSA8c3RkaW50 Lmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8c3RyaW5ncy5oPgorCisjZGVmaW5l IEpFTUFMTE9DX1ZFUlNJT04gIkBqZW1hbGxvY192ZXJzaW9uQCIKKyNkZWZpbmUgSkVNQUxMT0Nf VkVSU0lPTl9NQUpPUiBAamVtYWxsb2NfdmVyc2lvbl9tYWpvckAKKyNkZWZpbmUgSkVNQUxMT0Nf VkVSU0lPTl9NSU5PUiBAamVtYWxsb2NfdmVyc2lvbl9taW5vckAKKyNkZWZpbmUgSkVNQUxMT0Nf VkVSU0lPTl9CVUdGSVggQGplbWFsbG9jX3ZlcnNpb25fYnVnZml4QAorI2RlZmluZSBKRU1BTExP Q19WRVJTSU9OX05SRVYgQGplbWFsbG9jX3ZlcnNpb25fbnJldkAKKyNkZWZpbmUgSkVNQUxMT0Nf VkVSU0lPTl9HSUQgIkBqZW1hbGxvY192ZXJzaW9uX2dpZEAiCisjZGVmaW5lIEpFTUFMTE9DX1ZF UlNJT05fR0lEX0lERU5UIEBqZW1hbGxvY192ZXJzaW9uX2dpZEAKKworI2RlZmluZSBNQUxMT0NY X0xHX0FMSUdOKGxhKQkoKGludCkobGEpKQorI2lmIExHX1NJWkVPRl9QVFIgPT0gMgorIyAgZGVm aW5lIE1BTExPQ1hfQUxJR04oYSkJKChpbnQpKGZmcygoaW50KShhKSktMSkpCisjZWxzZQorIyAg ZGVmaW5lIE1BTExPQ1hfQUxJR04oYSkJCQkJCQlcCisgICAgICgoaW50KSgoKHNpemVfdCkoYSkg PCAoc2l6ZV90KUlOVF9NQVgpID8gZmZzKChpbnQpKGEpKS0xIDoJXAorICAgICBmZnMoKGludCko KChzaXplX3QpKGEpKT4+MzIpKSszMSkpCisjZW5kaWYKKyNkZWZpbmUgTUFMTE9DWF9aRVJPCSgo aW50KTB4NDApCisvKgorICogQmlhcyB0Y2FjaGUgaW5kZXggYml0cyBzbyB0aGF0IDAgZW5jb2Rl cyAiYXV0b21hdGljIHRjYWNoZSBtYW5hZ2VtZW50IiwgYW5kIDEKKyAqIGVuY29kZXMgTUFMTE9D WF9UQ0FDSEVfTk9ORS4KKyAqLworI2RlZmluZSBNQUxMT0NYX1RDQUNIRSh0YykJKChpbnQpKCgo dGMpKzIpIDw8IDgpKQorI2RlZmluZSBNQUxMT0NYX1RDQUNIRV9OT05FCU1BTExPQ1hfVENBQ0hF KC0xKQorLyoKKyAqIEJpYXMgYXJlbmEgaW5kZXggYml0cyBzbyB0aGF0IDAgZW5jb2RlcyAidXNl IGFuIGF1dG9tYXRpY2FsbHkgY2hvc2VuIGFyZW5hIi4KKyAqLworI2RlZmluZSBNQUxMT0NYX0FS RU5BKGEpCSgoKChpbnQpKGEpKSsxKSA8PCAyMCkKKworLyoKKyAqIFVzZSBhcyBhcmVuYSBpbmRl eCBpbiAiYXJlbmEuPGk+LntwdXJnZSxkZWNheSxkc3N9IiBhbmQKKyAqICJzdGF0cy5hcmVuYXMu PGk+LioiIG1hbGxjdGwgaW50ZXJmYWNlcyB0byBzZWxlY3QgYWxsIGFyZW5hcy4gIFRoaXMKKyAq IGRlZmluaXRpb24gaXMgaW50ZW50aW9uYWxseSBzcGVjaWZpZWQgaW4gcmF3IGRlY2ltYWwgZm9y bWF0IHRvIHN1cHBvcnQKKyAqIGNwcC1iYXNlZCBzdHJpbmcgY29uY2F0ZW5hdGlvbiwgZS5nLgor ICoKKyAqICAgI2RlZmluZSBTVFJJTkdJRllfSEVMUEVSKHgpICN4CisgKiAgICNkZWZpbmUgU1RS SU5HSUZZKHgpIFNUUklOR0lGWV9IRUxQRVIoeCkKKyAqCisgKiAgIG1hbGxjdGwoImFyZW5hLiIg U1RSSU5HSUZZKE1BTExDVExfQVJFTkFTX0FMTCkgIi5wdXJnZSIsIE5VTEwsIE5VTEwsIE5VTEws CisgKiAgICAgICAwKTsKKyAqLworI2RlZmluZSBNQUxMQ1RMX0FSRU5BU19BTEwJNDA5NgorLyoK KyAqIFVzZSBhcyBhcmVuYSBpbmRleCBpbiAic3RhdHMuYXJlbmFzLjxpPi4qIiBtYWxsY3RsIGlu dGVyZmFjZXMgdG8gc2VsZWN0CisgKiBkZXN0cm95ZWQgYXJlbmFzLgorICovCisjZGVmaW5lIE1B TExDVExfQVJFTkFTX0RFU1RST1lFRAk0MDk3CisKKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKSAm JiBkZWZpbmVkKEpFTUFMTE9DX1VTRV9DWFhfVEhST1cpCisjICBkZWZpbmUgSkVNQUxMT0NfQ1hY X1RIUk9XIHRocm93KCkKKyNlbHNlCisjICBkZWZpbmUgSkVNQUxMT0NfQ1hYX1RIUk9XCisjZW5k aWYKKworI2lmIGRlZmluZWQoX01TQ19WRVIpCisjICBkZWZpbmUgSkVNQUxMT0NfQVRUUihzKQor IyAgZGVmaW5lIEpFTUFMTE9DX0FMSUdORUQocykgX19kZWNsc3BlYyhhbGlnbihzKSkKKyMgIGRl ZmluZSBKRU1BTExPQ19BTExPQ19TSVpFKHMpCisjICBkZWZpbmUgSkVNQUxMT0NfQUxMT0NfU0la RTIoczEsIHMyKQorIyAgaWZuZGVmIEpFTUFMTE9DX0VYUE9SVAorIyAgICBpZmRlZiBETExFWFBP UlQKKyMgICAgICBkZWZpbmUgSkVNQUxMT0NfRVhQT1JUIF9fZGVjbHNwZWMoZGxsZXhwb3J0KQor IyAgICBlbHNlCisjICAgICAgZGVmaW5lIEpFTUFMTE9DX0VYUE9SVCBfX2RlY2xzcGVjKGRsbGlt cG9ydCkKKyMgICAgZW5kaWYKKyMgIGVuZGlmCisjICBkZWZpbmUgSkVNQUxMT0NfRk9STUFUX0FS RyhpKQorIyAgZGVmaW5lIEpFTUFMTE9DX0ZPUk1BVF9QUklOVEYocywgaSkKKyMgIGRlZmluZSBK RU1BTExPQ19GQUxMVEhST1VHSAorIyAgZGVmaW5lIEpFTUFMTE9DX05PSU5MSU5FIF9fZGVjbHNw ZWMobm9pbmxpbmUpCisjICBpZmRlZiBfX2NwbHVzcGx1cworIyAgICBkZWZpbmUgSkVNQUxMT0Nf Tk9USFJPVyBfX2RlY2xzcGVjKG5vdGhyb3cpCisjICBlbHNlCisjICAgIGRlZmluZSBKRU1BTExP Q19OT1RIUk9XCisjICBlbmRpZgorIyAgZGVmaW5lIEpFTUFMTE9DX1NFQ1RJT04ocykgX19kZWNs c3BlYyhhbGxvY2F0ZShzKSkKKyMgIGRlZmluZSBKRU1BTExPQ19SRVNUUklDVF9SRVRVUk4gX19k ZWNsc3BlYyhyZXN0cmljdCkKKyMgIGlmIF9NU0NfVkVSID49IDE5MDAgJiYgIWRlZmluZWQoX19F REdfXykKKyMgICAgZGVmaW5lIEpFTUFMTE9DX0FMTE9DQVRPUiBfX2RlY2xzcGVjKGFsbG9jYXRv cikKKyMgIGVsc2UKKyMgICAgZGVmaW5lIEpFTUFMTE9DX0FMTE9DQVRPUgorIyAgZW5kaWYKKyMg IGRlZmluZSBKRU1BTExPQ19DT0xECisjZWxpZiBkZWZpbmVkKEpFTUFMTE9DX0hBVkVfQVRUUikK KyMgIGRlZmluZSBKRU1BTExPQ19BVFRSKHMpIF9fYXR0cmlidXRlX18oKHMpKQorIyAgZGVmaW5l IEpFTUFMTE9DX0FMSUdORUQocykgSkVNQUxMT0NfQVRUUihhbGlnbmVkKHMpKQorIyAgaWZkZWYg SkVNQUxMT0NfSEFWRV9BVFRSX0FMTE9DX1NJWkUKKyMgICAgZGVmaW5lIEpFTUFMTE9DX0FMTE9D X1NJWkUocykgSkVNQUxMT0NfQVRUUihhbGxvY19zaXplKHMpKQorIyAgICBkZWZpbmUgSkVNQUxM T0NfQUxMT0NfU0laRTIoczEsIHMyKSBKRU1BTExPQ19BVFRSKGFsbG9jX3NpemUoczEsIHMyKSkK KyMgIGVsc2UKKyMgICAgZGVmaW5lIEpFTUFMTE9DX0FMTE9DX1NJWkUocykKKyMgICAgZGVmaW5l IEpFTUFMTE9DX0FMTE9DX1NJWkUyKHMxLCBzMikKKyMgIGVuZGlmCisjICBpZm5kZWYgSkVNQUxM T0NfRVhQT1JUCisjICAgIGRlZmluZSBKRU1BTExPQ19FWFBPUlQgSkVNQUxMT0NfQVRUUih2aXNp YmlsaXR5KCJkZWZhdWx0IikpCisjICBlbmRpZgorIyAgaWZkZWYgSkVNQUxMT0NfSEFWRV9BVFRS X0ZPUk1BVF9BUkcKKyMgICAgZGVmaW5lIEpFTUFMTE9DX0ZPUk1BVF9BUkcoaSkgSkVNQUxMT0Nf QVRUUihfX2Zvcm1hdF9hcmdfXygzKSkKKyMgIGVsc2UKKyMgICAgZGVmaW5lIEpFTUFMTE9DX0ZP Uk1BVF9BUkcoaSkKKyMgIGVuZGlmCisjICBpZmRlZiBKRU1BTExPQ19IQVZFX0FUVFJfRk9STUFU X0dOVV9QUklOVEYKKyMgICAgZGVmaW5lIEpFTUFMTE9DX0ZPUk1BVF9QUklOVEYocywgaSkgSkVN QUxMT0NfQVRUUihmb3JtYXQoZ251X3ByaW50ZiwgcywgaSkpCisjICBlbGlmIGRlZmluZWQoSkVN QUxMT0NfSEFWRV9BVFRSX0ZPUk1BVF9QUklOVEYpCisjICAgIGRlZmluZSBKRU1BTExPQ19GT1JN QVRfUFJJTlRGKHMsIGkpIEpFTUFMTE9DX0FUVFIoZm9ybWF0KHByaW50ZiwgcywgaSkpCisjICBl bHNlCisjICAgIGRlZmluZSBKRU1BTExPQ19GT1JNQVRfUFJJTlRGKHMsIGkpCisjICBlbmRpZgor IyAgaWZkZWYgSkVNQUxMT0NfSEFWRV9BVFRSX0ZBTExUSFJPVUdICisjICAgIGRlZmluZSBKRU1B TExPQ19GQUxMVEhST1VHSCBKRU1BTExPQ19BVFRSKGZhbGx0aHJvdWdoKQorIyAgZWxzZQorIyAg ICBkZWZpbmUgSkVNQUxMT0NfRkFMTFRIUk9VR0gKKyMgIGVuZGlmCisjICBkZWZpbmUgSkVNQUxM T0NfTk9JTkxJTkUgSkVNQUxMT0NfQVRUUihub2lubGluZSkKKyMgIGRlZmluZSBKRU1BTExPQ19O T1RIUk9XIEpFTUFMTE9DX0FUVFIobm90aHJvdykKKyMgIGRlZmluZSBKRU1BTExPQ19TRUNUSU9O KHMpIEpFTUFMTE9DX0FUVFIoc2VjdGlvbihzKSkKKyMgIGRlZmluZSBKRU1BTExPQ19SRVNUUklD VF9SRVRVUk4KKyMgIGRlZmluZSBKRU1BTExPQ19BTExPQ0FUT1IKKyMgIGlmZGVmIEpFTUFMTE9D X0hBVkVfQVRUUl9DT0xECisjICAgIGRlZmluZSBKRU1BTExPQ19DT0xEIEpFTUFMTE9DX0FUVFIo X19jb2xkX18pCisjICBlbHNlCisjICAgIGRlZmluZSBKRU1BTExPQ19DT0xECisjICBlbmRpZgor I2Vsc2UKKyMgIGRlZmluZSBKRU1BTExPQ19BVFRSKHMpCisjICBkZWZpbmUgSkVNQUxMT0NfQUxJ R05FRChzKQorIyAgZGVmaW5lIEpFTUFMTE9DX0FMTE9DX1NJWkUocykKKyMgIGRlZmluZSBKRU1B TExPQ19BTExPQ19TSVpFMihzMSwgczIpCisjICBkZWZpbmUgSkVNQUxMT0NfRVhQT1JUCisjICBk ZWZpbmUgSkVNQUxMT0NfRk9STUFUX1BSSU5URihzLCBpKQorIyAgZGVmaW5lIEpFTUFMTE9DX0ZB TExUSFJPVUdICisjICBkZWZpbmUgSkVNQUxMT0NfTk9JTkxJTkUKKyMgIGRlZmluZSBKRU1BTExP Q19OT1RIUk9XCisjICBkZWZpbmUgSkVNQUxMT0NfU0VDVElPTihzKQorIyAgZGVmaW5lIEpFTUFM TE9DX1JFU1RSSUNUX1JFVFVSTgorIyAgZGVmaW5lIEpFTUFMTE9DX0FMTE9DQVRPUgorIyAgZGVm aW5lIEpFTUFMTE9DX0NPTEQKKyNlbmRpZgorCisjaWYgKGRlZmluZWQoX19BUFBMRV9fKSB8fCBk ZWZpbmVkKF9fRnJlZUJTRF9fKSkgJiYgIWRlZmluZWQoSkVNQUxMT0NfTk9fUkVOQU1FKQorIyAg ZGVmaW5lIEpFTUFMTE9DX1NZU19OT1RIUk9XCisjZWxzZQorIyAgZGVmaW5lIEpFTUFMTE9DX1NZ U19OT1RIUk9XIEpFTUFMTE9DX05PVEhST1cKKyNlbmRpZgoKZGlmZiAtLWdpdCBhLzM4OS1kcy1i YXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvamVtYWxsb2Nf bWFuZ2xlLnNoIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVk ZS9qZW1hbGxvYy9qZW1hbGxvY19tYW5nbGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXgg MDAwMDAwMC4uYzY3NWJiNAotLS0gL2Rldi9udWxsCisrKyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1 aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvamVtYWxsb2NfbWFuZ2xlLnNoCkBA IC0wLDAgKzEsNDUgQEAKKyMhL2Jpbi9zaCAtZXUKKworcHVibGljX3N5bWJvbHNfdHh0PSQxCitz eW1ib2xfcHJlZml4PSQyCisKK2NhdCA8PEVPRgorLyoKKyAqIEJ5IGRlZmF1bHQgYXBwbGljYXRp b24gY29kZSBtdXN0IGV4cGxpY2l0bHkgcmVmZXIgdG8gbWFuZ2xlZCBzeW1ib2wgbmFtZXMsCisg KiBzbyB0aGF0IGl0IGlzIHBvc3NpYmxlIHRvIHVzZSBqZW1hbGxvYyBpbiBjb25qdW5jdGlvbiB3 aXRoIGFub3RoZXIgYWxsb2NhdG9yCisgKiBpbiB0aGUgc2FtZSBhcHBsaWNhdGlvbi4gIERlZmlu ZSBKRU1BTExPQ19NQU5HTEUgaW4gb3JkZXIgdG8gY2F1c2UgYXV0b21hdGljCisgKiBuYW1lIG1h bmdsaW5nIHRoYXQgbWF0Y2hlcyB0aGUgQVBJIHByZWZpeGluZyB0aGF0IGhhcHBlbmVkIGFzIGEg cmVzdWx0IG9mCisgKiAtLXdpdGgtbWFuZ2xpbmcgYW5kL29yIC0td2l0aC1qZW1hbGxvYy1wcmVm aXggY29uZmlndXJhdGlvbiBzZXR0aW5ncy4KKyAqLworI2lmZGVmIEpFTUFMTE9DX01BTkdMRQor IyAgaWZuZGVmIEpFTUFMTE9DX05PX0RFTUFOR0xFCisjICAgIGRlZmluZSBKRU1BTExPQ19OT19E RU1BTkdMRQorIyAgZW5kaWYKK0VPRgorCitmb3Igbm0gaW4gYGNhdCAke3B1YmxpY19zeW1ib2xz X3R4dH1gIDsgZG8KKyAgbj1gZWNobyAke25tfSB8dHIgJzonICcgJyB8YXdrICd7cHJpbnQgJDF9 J2AKKyAgZWNobyAiIyAgZGVmaW5lICR7bn0gJHtzeW1ib2xfcHJlZml4fSR7bn0iCitkb25lCisK K2NhdCA8PEVPRgorI2VuZGlmCisKKy8qCisgKiBUaGUgJHtzeW1ib2xfcHJlZml4fSogbWFjcm9z IGNhbiBiZSB1c2VkIGFzIHN0YWJsZSBhbHRlcm5hdGl2ZSBuYW1lcyBmb3IgdGhlCisgKiBwdWJs aWMgamVtYWxsb2MgQVBJIGlmIEpFTUFMTE9DX05PX0RFTUFOR0xFIGlzIGRlZmluZWQuICBUaGlz IGlzIHByaW1hcmlseQorICogbWVhbnQgZm9yIHVzZSBpbiBqZW1hbGxvYyBpdHNlbGYsIGJ1dCBp dCBjYW4gYmUgdXNlZCBieSBhcHBsaWNhdGlvbiBjb2RlIHRvCisgKiBwcm92aWRlIGlzb2xhdGlv biBmcm9tIHRoZSBuYW1lIG1hbmdsaW5nIHNwZWNpZmllZCB2aWEgLS13aXRoLW1hbmdsaW5nCisg KiBhbmQvb3IgLS13aXRoLWplbWFsbG9jLXByZWZpeC4KKyAqLworI2lmbmRlZiBKRU1BTExPQ19O T19ERU1BTkdMRQorRU9GCisKK2ZvciBubSBpbiBgY2F0ICR7cHVibGljX3N5bWJvbHNfdHh0fWAg OyBkbworICBuPWBlY2hvICR7bm19IHx0ciAnOicgJyAnIHxhd2sgJ3twcmludCAkMX0nYAorICBl Y2hvICIjICB1bmRlZiAke3N5bWJvbF9wcmVmaXh9JHtufSIKK2RvbmUKKworY2F0IDw8RU9GCisj ZW5kaWYKK0VPRgoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9j LTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvamVtYWxsb2NfcHJvdG9zLmguaW4gYi8zODktZHMtYmFz ZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2plbWFsbG9jX3By b3Rvcy5oLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1NjIyMWMKLS0t IC9kZXYvbnVsbAorKysgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9p bmNsdWRlL2plbWFsbG9jL2plbWFsbG9jX3Byb3Rvcy5oLmluCkBAIC0wLDAgKzEsNzEgQEAKKy8q CisgKiBUaGUgQGplX0AgcHJlZml4IG9uIHRoZSBmb2xsb3dpbmcgcHVibGljIHN5bWJvbCBkZWNs YXJhdGlvbnMgaXMgYW4gYXJ0aWZhY3QKKyAqIG9mIG5hbWVzcGFjZSBtYW5hZ2VtZW50LCBhbmQg c2hvdWxkIGJlIG9taXR0ZWQgaW4gYXBwbGljYXRpb24gY29kZSB1bmxlc3MKKyAqIEpFTUFMTE9D X05PX0RFTUFOR0xFIGlzIGRlZmluZWQgKHNlZSBqZW1hbGxvY19tYW5nbGVAaW5zdGFsbF9zdWZm aXhALmgpLgorICovCitleHRlcm4gSkVNQUxMT0NfRVhQT1JUIGNvbnN0IGNoYXIJKkBqZV9AbWFs bG9jX2NvbmY7CitleHRlcm4gSkVNQUxMT0NfRVhQT1JUIHZvaWQJCSgqQGplX0BtYWxsb2NfbWVz c2FnZSkodm9pZCAqY2JvcGFxdWUsCisgICAgY29uc3QgY2hhciAqcyk7CisKK0pFTUFMTE9DX0VY UE9SVCBKRU1BTExPQ19BTExPQ0FUT1IgSkVNQUxMT0NfUkVTVFJJQ1RfUkVUVVJOCisgICAgdm9p ZCBKRU1BTExPQ19TWVNfTk9USFJPVwkqQGplX0BtYWxsb2Moc2l6ZV90IHNpemUpCisgICAgSkVN QUxMT0NfQ1hYX1RIUk9XIEpFTUFMTE9DX0FUVFIobWFsbG9jKSBKRU1BTExPQ19BTExPQ19TSVpF KDEpOworSkVNQUxMT0NfRVhQT1JUIEpFTUFMTE9DX0FMTE9DQVRPUiBKRU1BTExPQ19SRVNUUklD VF9SRVRVUk4KKyAgICB2b2lkIEpFTUFMTE9DX1NZU19OT1RIUk9XCSpAamVfQGNhbGxvYyhzaXpl X3QgbnVtLCBzaXplX3Qgc2l6ZSkKKyAgICBKRU1BTExPQ19DWFhfVEhST1cgSkVNQUxMT0NfQVRU UihtYWxsb2MpIEpFTUFMTE9DX0FMTE9DX1NJWkUyKDEsIDIpOworSkVNQUxMT0NfRVhQT1JUIGlu dCBKRU1BTExPQ19TWVNfTk9USFJPVyBAamVfQHBvc2l4X21lbWFsaWduKAorICAgIHZvaWQgKipt ZW1wdHIsIHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKSBKRU1BTExPQ19DWFhfVEhST1cK KyAgICBKRU1BTExPQ19BVFRSKG5vbm51bGwoMSkpOworSkVNQUxMT0NfRVhQT1JUIEpFTUFMTE9D X0FMTE9DQVRPUiBKRU1BTExPQ19SRVNUUklDVF9SRVRVUk4KKyAgICB2b2lkIEpFTUFMTE9DX1NZ U19OT1RIUk9XCSpAamVfQGFsaWduZWRfYWxsb2Moc2l6ZV90IGFsaWdubWVudCwKKyAgICBzaXpl X3Qgc2l6ZSkgSkVNQUxMT0NfQ1hYX1RIUk9XIEpFTUFMTE9DX0FUVFIobWFsbG9jKQorICAgIEpF TUFMTE9DX0FMTE9DX1NJWkUoMik7CitKRU1BTExPQ19FWFBPUlQgSkVNQUxMT0NfQUxMT0NBVE9S IEpFTUFMTE9DX1JFU1RSSUNUX1JFVFVSTgorICAgIHZvaWQgSkVNQUxMT0NfU1lTX05PVEhST1cJ KkBqZV9AcmVhbGxvYyh2b2lkICpwdHIsIHNpemVfdCBzaXplKQorICAgIEpFTUFMTE9DX0NYWF9U SFJPVyBKRU1BTExPQ19BTExPQ19TSVpFKDIpOworSkVNQUxMT0NfRVhQT1JUIHZvaWQgSkVNQUxM T0NfU1lTX05PVEhST1cJQGplX0BmcmVlKHZvaWQgKnB0cikKKyAgICBKRU1BTExPQ19DWFhfVEhS T1c7CisKK0pFTUFMTE9DX0VYUE9SVCBKRU1BTExPQ19BTExPQ0FUT1IgSkVNQUxMT0NfUkVTVFJJ Q1RfUkVUVVJOCisgICAgdm9pZCBKRU1BTExPQ19OT1RIUk9XCSpAamVfQG1hbGxvY3goc2l6ZV90 IHNpemUsIGludCBmbGFncykKKyAgICBKRU1BTExPQ19BVFRSKG1hbGxvYykgSkVNQUxMT0NfQUxM T0NfU0laRSgxKTsKK0pFTUFMTE9DX0VYUE9SVCBKRU1BTExPQ19BTExPQ0FUT1IgSkVNQUxMT0Nf UkVTVFJJQ1RfUkVUVVJOCisgICAgdm9pZCBKRU1BTExPQ19OT1RIUk9XCSpAamVfQHJhbGxvY3go dm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSwKKyAgICBpbnQgZmxhZ3MpIEpFTUFMTE9DX0FMTE9DX1NJ WkUoMik7CitKRU1BTExPQ19FWFBPUlQgc2l6ZV90IEpFTUFMTE9DX05PVEhST1cJQGplX0B4YWxs b2N4KHZvaWQgKnB0ciwgc2l6ZV90IHNpemUsCisgICAgc2l6ZV90IGV4dHJhLCBpbnQgZmxhZ3Mp OworSkVNQUxMT0NfRVhQT1JUIHNpemVfdCBKRU1BTExPQ19OT1RIUk9XCUBqZV9Ac2FsbG9jeChj b25zdCB2b2lkICpwdHIsCisgICAgaW50IGZsYWdzKSBKRU1BTExPQ19BVFRSKHB1cmUpOworSkVN QUxMT0NfRVhQT1JUIHZvaWQgSkVNQUxMT0NfTk9USFJPVwlAamVfQGRhbGxvY3godm9pZCAqcHRy LCBpbnQgZmxhZ3MpOworSkVNQUxMT0NfRVhQT1JUIHZvaWQgSkVNQUxMT0NfTk9USFJPVwlAamVf QHNkYWxsb2N4KHZvaWQgKnB0ciwgc2l6ZV90IHNpemUsCisgICAgaW50IGZsYWdzKTsKK0pFTUFM TE9DX0VYUE9SVCBzaXplX3QgSkVNQUxMT0NfTk9USFJPVwlAamVfQG5hbGxvY3goc2l6ZV90IHNp emUsIGludCBmbGFncykKKyAgICBKRU1BTExPQ19BVFRSKHB1cmUpOworCitKRU1BTExPQ19FWFBP UlQgaW50IEpFTUFMTE9DX05PVEhST1cJQGplX0BtYWxsY3RsKGNvbnN0IGNoYXIgKm5hbWUsCisg ICAgdm9pZCAqb2xkcCwgc2l6ZV90ICpvbGRsZW5wLCB2b2lkICpuZXdwLCBzaXplX3QgbmV3bGVu KTsKK0pFTUFMTE9DX0VYUE9SVCBpbnQgSkVNQUxMT0NfTk9USFJPVwlAamVfQG1hbGxjdGxuYW1l dG9taWIoY29uc3QgY2hhciAqbmFtZSwKKyAgICBzaXplX3QgKm1pYnAsIHNpemVfdCAqbWlibGVu cCk7CitKRU1BTExPQ19FWFBPUlQgaW50IEpFTUFMTE9DX05PVEhST1cJQGplX0BtYWxsY3RsYnlt aWIoY29uc3Qgc2l6ZV90ICptaWIsCisgICAgc2l6ZV90IG1pYmxlbiwgdm9pZCAqb2xkcCwgc2l6 ZV90ICpvbGRsZW5wLCB2b2lkICpuZXdwLCBzaXplX3QgbmV3bGVuKTsKK0pFTUFMTE9DX0VYUE9S VCB2b2lkIEpFTUFMTE9DX05PVEhST1cJQGplX0BtYWxsb2Nfc3RhdHNfcHJpbnQoCisgICAgdm9p ZCAoKndyaXRlX2NiKSh2b2lkICosIGNvbnN0IGNoYXIgKiksIHZvaWQgKkBqZV9AY2JvcGFxdWUs CisgICAgY29uc3QgY2hhciAqb3B0cyk7CitKRU1BTExPQ19FWFBPUlQgc2l6ZV90IEpFTUFMTE9D X05PVEhST1cJQGplX0BtYWxsb2NfdXNhYmxlX3NpemUoCisgICAgSkVNQUxMT0NfVVNBQkxFX1NJ WkVfQ09OU1Qgdm9pZCAqcHRyKSBKRU1BTExPQ19DWFhfVEhST1c7CisjaWZkZWYgSkVNQUxMT0Nf SEFWRV9NQUxMT0NfU0laRQorSkVNQUxMT0NfRVhQT1JUIHNpemVfdCBKRU1BTExPQ19OT1RIUk9X CUBqZV9AbWFsbG9jX3NpemUoCisgICAgY29uc3Qgdm9pZCAqcHRyKTsKKyNlbmRpZgorCisjaWZk ZWYgSkVNQUxMT0NfT1ZFUlJJREVfTUVNQUxJR04KK0pFTUFMTE9DX0VYUE9SVCBKRU1BTExPQ19B TExPQ0FUT1IgSkVNQUxMT0NfUkVTVFJJQ1RfUkVUVVJOCisgICAgdm9pZCBKRU1BTExPQ19TWVNf Tk9USFJPVwkqQGplX0BtZW1hbGlnbihzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkKKyAg ICBKRU1BTExPQ19DWFhfVEhST1cgSkVNQUxMT0NfQVRUUihtYWxsb2MpOworI2VuZGlmCisKKyNp ZmRlZiBKRU1BTExPQ19PVkVSUklERV9WQUxMT0MKK0pFTUFMTE9DX0VYUE9SVCBKRU1BTExPQ19B TExPQ0FUT1IgSkVNQUxMT0NfUkVTVFJJQ1RfUkVUVVJOCisgICAgdm9pZCBKRU1BTExPQ19TWVNf Tk9USFJPVwkqQGplX0B2YWxsb2Moc2l6ZV90IHNpemUpIEpFTUFMTE9DX0NYWF9USFJPVworICAg IEpFTUFMTE9DX0FUVFIobWFsbG9jKTsKKyNlbmRpZgoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNl LTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvamVtYWxsb2NfcmVu YW1lLnNoIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9q ZW1hbGxvYy9qZW1hbGxvY19yZW5hbWUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAw MDAwMC4uZjk0Mzg5MQotLS0gL2Rldi9udWxsCisrKyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxk L2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvamVtYWxsb2NfcmVuYW1lLnNoCkBAIC0w LDAgKzEsMjIgQEAKKyMhL2Jpbi9zaAorCitwdWJsaWNfc3ltYm9sc190eHQ9JDEKKworY2F0IDw8 RU9GCisvKgorICogTmFtZSBtYW5nbGluZyBmb3IgcHVibGljIHN5bWJvbHMgaXMgY29udHJvbGxl ZCBieSAtLXdpdGgtbWFuZ2xpbmcgYW5kCisgKiAtLXdpdGgtamVtYWxsb2MtcHJlZml4LiAgV2l0 aCBkZWZhdWx0IHNldHRpbmdzIHRoZSBqZV8gcHJlZml4IGlzIHN0cmlwcGVkIGJ5CisgKiB0aGVz ZSBtYWNybyBkZWZpbml0aW9ucy4KKyAqLworI2lmbmRlZiBKRU1BTExPQ19OT19SRU5BTUUKK0VP RgorCitmb3Igbm0gaW4gYGNhdCAke3B1YmxpY19zeW1ib2xzX3R4dH1gIDsgZG8KKyAgbj1gZWNo byAke25tfSB8dHIgJzonICcgJyB8YXdrICd7cHJpbnQgJDF9J2AKKyAgbT1gZWNobyAke25tfSB8 dHIgJzonICcgJyB8YXdrICd7cHJpbnQgJDJ9J2AKKyAgZWNobyAiIyAgZGVmaW5lIGplXyR7bn0g JHttfSIKK2RvbmUKKworY2F0IDw8RU9GCisjZW5kaWYKK0VPRgoKZGlmZiAtLWdpdCBhLzM4OS1k cy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvamVtYWxs b2NfdHlwZWRlZnMuaC5pbiBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4w L2luY2x1ZGUvamVtYWxsb2MvamVtYWxsb2NfdHlwZWRlZnMuaC5pbgpuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwLi4xYTU4ODc0Ci0tLSAvZGV2L251bGwKKysrIGIvMzg5LWRzLWJh c2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9qZW1hbGxvY190 eXBlZGVmcy5oLmluCkBAIC0wLDAgKzEsNzcgQEAKK3R5cGVkZWYgc3RydWN0IGV4dGVudF9ob29r c19zIGV4dGVudF9ob29rc190OworCisvKgorICogdm9pZCAqCisgKiBleHRlbnRfYWxsb2MoZXh0 ZW50X2hvb2tzX3QgKmV4dGVudF9ob29rcywgdm9pZCAqbmV3X2FkZHIsIHNpemVfdCBzaXplLAor ICogICAgIHNpemVfdCBhbGlnbm1lbnQsIGJvb2wgKnplcm8sIGJvb2wgKmNvbW1pdCwgdW5zaWdu ZWQgYXJlbmFfaW5kKTsKKyAqLwordHlwZWRlZiB2b2lkICooZXh0ZW50X2FsbG9jX3QpKGV4dGVu dF9ob29rc190ICosIHZvaWQgKiwgc2l6ZV90LCBzaXplX3QsIGJvb2wgKiwKKyAgICBib29sICos IHVuc2lnbmVkKTsKKworLyoKKyAqIGJvb2wKKyAqIGV4dGVudF9kYWxsb2MoZXh0ZW50X2hvb2tz X3QgKmV4dGVudF9ob29rcywgdm9pZCAqYWRkciwgc2l6ZV90IHNpemUsCisgKiAgICAgYm9vbCBj b21taXR0ZWQsIHVuc2lnbmVkIGFyZW5hX2luZCk7CisgKi8KK3R5cGVkZWYgYm9vbCAoZXh0ZW50 X2RhbGxvY190KShleHRlbnRfaG9va3NfdCAqLCB2b2lkICosIHNpemVfdCwgYm9vbCwKKyAgICB1 bnNpZ25lZCk7CisKKy8qCisgKiB2b2lkCisgKiBleHRlbnRfZGVzdHJveShleHRlbnRfaG9va3Nf dCAqZXh0ZW50X2hvb2tzLCB2b2lkICphZGRyLCBzaXplX3Qgc2l6ZSwKKyAqICAgICBib29sIGNv bW1pdHRlZCwgdW5zaWduZWQgYXJlbmFfaW5kKTsKKyAqLwordHlwZWRlZiB2b2lkIChleHRlbnRf ZGVzdHJveV90KShleHRlbnRfaG9va3NfdCAqLCB2b2lkICosIHNpemVfdCwgYm9vbCwKKyAgICB1 bnNpZ25lZCk7CisKKy8qCisgKiBib29sCisgKiBleHRlbnRfY29tbWl0KGV4dGVudF9ob29rc190 ICpleHRlbnRfaG9va3MsIHZvaWQgKmFkZHIsIHNpemVfdCBzaXplLAorICogICAgIHNpemVfdCBv ZmZzZXQsIHNpemVfdCBsZW5ndGgsIHVuc2lnbmVkIGFyZW5hX2luZCk7CisgKi8KK3R5cGVkZWYg Ym9vbCAoZXh0ZW50X2NvbW1pdF90KShleHRlbnRfaG9va3NfdCAqLCB2b2lkICosIHNpemVfdCwg c2l6ZV90LCBzaXplX3QsCisgICAgdW5zaWduZWQpOworCisvKgorICogYm9vbAorICogZXh0ZW50 X2RlY29tbWl0KGV4dGVudF9ob29rc190ICpleHRlbnRfaG9va3MsIHZvaWQgKmFkZHIsIHNpemVf dCBzaXplLAorICogICAgIHNpemVfdCBvZmZzZXQsIHNpemVfdCBsZW5ndGgsIHVuc2lnbmVkIGFy ZW5hX2luZCk7CisgKi8KK3R5cGVkZWYgYm9vbCAoZXh0ZW50X2RlY29tbWl0X3QpKGV4dGVudF9o b29rc190ICosIHZvaWQgKiwgc2l6ZV90LCBzaXplX3QsCisgICAgc2l6ZV90LCB1bnNpZ25lZCk7 CisKKy8qCisgKiBib29sCisgKiBleHRlbnRfcHVyZ2UoZXh0ZW50X2hvb2tzX3QgKmV4dGVudF9o b29rcywgdm9pZCAqYWRkciwgc2l6ZV90IHNpemUsCisgKiAgICAgc2l6ZV90IG9mZnNldCwgc2l6 ZV90IGxlbmd0aCwgdW5zaWduZWQgYXJlbmFfaW5kKTsKKyAqLwordHlwZWRlZiBib29sIChleHRl bnRfcHVyZ2VfdCkoZXh0ZW50X2hvb2tzX3QgKiwgdm9pZCAqLCBzaXplX3QsIHNpemVfdCwgc2l6 ZV90LAorICAgIHVuc2lnbmVkKTsKKworLyoKKyAqIGJvb2wKKyAqIGV4dGVudF9zcGxpdChleHRl bnRfaG9va3NfdCAqZXh0ZW50X2hvb2tzLCB2b2lkICphZGRyLCBzaXplX3Qgc2l6ZSwKKyAqICAg ICBzaXplX3Qgc2l6ZV9hLCBzaXplX3Qgc2l6ZV9iLCBib29sIGNvbW1pdHRlZCwgdW5zaWduZWQg YXJlbmFfaW5kKTsKKyAqLwordHlwZWRlZiBib29sIChleHRlbnRfc3BsaXRfdCkoZXh0ZW50X2hv b2tzX3QgKiwgdm9pZCAqLCBzaXplX3QsIHNpemVfdCwgc2l6ZV90LAorICAgIGJvb2wsIHVuc2ln bmVkKTsKKworLyoKKyAqIGJvb2wKKyAqIGV4dGVudF9tZXJnZShleHRlbnRfaG9va3NfdCAqZXh0 ZW50X2hvb2tzLCB2b2lkICphZGRyX2EsIHNpemVfdCBzaXplX2EsCisgKiAgICAgdm9pZCAqYWRk cl9iLCBzaXplX3Qgc2l6ZV9iLCBib29sIGNvbW1pdHRlZCwgdW5zaWduZWQgYXJlbmFfaW5kKTsK KyAqLwordHlwZWRlZiBib29sIChleHRlbnRfbWVyZ2VfdCkoZXh0ZW50X2hvb2tzX3QgKiwgdm9p ZCAqLCBzaXplX3QsIHZvaWQgKiwgc2l6ZV90LAorICAgIGJvb2wsIHVuc2lnbmVkKTsKKworc3Ry dWN0IGV4dGVudF9ob29rc19zIHsKKwlleHRlbnRfYWxsb2NfdAkJKmFsbG9jOworCWV4dGVudF9k YWxsb2NfdAkJKmRhbGxvYzsKKwlleHRlbnRfZGVzdHJveV90CSpkZXN0cm95OworCWV4dGVudF9j b21taXRfdAkJKmNvbW1pdDsKKwlleHRlbnRfZGVjb21taXRfdAkqZGVjb21taXQ7CisJZXh0ZW50 X3B1cmdlX3QJCSpwdXJnZV9sYXp5OworCWV4dGVudF9wdXJnZV90CQkqcHVyZ2VfZm9yY2VkOwor CWV4dGVudF9zcGxpdF90CQkqc3BsaXQ7CisJZXh0ZW50X21lcmdlX3QJCSptZXJnZTsKK307Cgpk aWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVk ZS9tc3ZjX2NvbXBhdC9DOTkvc3RkYm9vbC5oIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVt YWxsb2MtNS4zLjAvaW5jbHVkZS9tc3ZjX2NvbXBhdC9DOTkvc3RkYm9vbC5oCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5MjE2MGUKLS0tIC9kZXYvbnVsbAorKysgYi8zODkt ZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL21zdmNfY29tcGF0L0M5 OS9zdGRib29sLmgKQEAgLTAsMCArMSwyMCBAQAorI2lmbmRlZiBzdGRib29sX2gKKyNkZWZpbmUg c3RkYm9vbF9oCisKKyNpbmNsdWRlIDx3dHlwZXMuaD4KKworLyogTVNWQyBkb2Vzbid0IGRlZmlu ZSBfQm9vbCBvciBib29sIGluIEMsIGJ1dCBkb2VzIGhhdmUgQk9PTCAqLworLyogTm90ZSB0aGlz IGRvZXNuJ3QgcGFzcyBhdXRvY29uZidzIHRlc3QgYmVjYXVzZSAoYm9vbCkgMC41ICE9IHRydWUg Ki8KKy8qIENsYW5nLWNsIHVzZXMgTVNWQyBoZWFkZXJzLCBzbyBuZWVkcyBtc3ZjX2NvbXBhdCwg YnV0IGhhcyBfQm9vbCBhcworICogYSBidWlsdC1pbiB0eXBlLiAqLworI2lmbmRlZiBfX2NsYW5n X18KK3R5cGVkZWYgQk9PTCBfQm9vbDsKKyNlbmRpZgorCisjZGVmaW5lIGJvb2wgX0Jvb2wKKyNk ZWZpbmUgdHJ1ZSAxCisjZGVmaW5lIGZhbHNlIDAKKworI2RlZmluZSBfX2Jvb2xfdHJ1ZV9mYWxz ZV9hcmVfZGVmaW5lZCAxCisKKyNlbmRpZiAvKiBzdGRib29sX2ggKi8KCmRpZmYgLS1naXQgYS8z ODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL21zdmNfY29tcGF0 L0M5OS9zdGRpbnQuaCBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2lu Y2x1ZGUvbXN2Y19jb21wYXQvQzk5L3N0ZGludC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAuLmQwMjYwOGEKLS0tIC9kZXYvbnVsbAorKysgYi8zODktZHMtYmFzZS0zLjMuMC1i dWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL21zdmNfY29tcGF0L0M5OS9zdGRpbnQuaApAQCAt MCwwICsxLDI0NyBAQAorLy8gSVNPIEM5eCAgY29tcGxpYW50IHN0ZGludC5oIGZvciBNaWNyb3Nv ZnQgVmlzdWFsIFN0dWRpbworLy8gQmFzZWQgb24gSVNPL0lFQyA5ODk5OlRDMiBDb21taXR0ZWUg ZHJhZnQgKE1heSA2LCAyMDA1KSBXRzE0L04xMTI0IAorLy8gCisvLyAgQ29weXJpZ2h0IChjKSAy MDA2LTIwMDggQWxleGFuZGVyIENoZW1lcmlzCisvLyAKKy8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1 c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorLy8gbW9kaWZp Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp b25zIGFyZSBtZXQ6CisvLyAKKy8vICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorLy8gICAgICB0aGlzIGxp c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLy8gCisvLyAg IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv dmUgY29weXJpZ2h0CisvLyAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKy8vICAgICAgZG9jdW1lbnRhdGlvbiBh bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKy8v IAorLy8gICAzLiBUaGUgbmFtZSBvZiB0aGUgYXV0aG9yIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug b3IgcHJvbW90ZSBwcm9kdWN0cworLy8gICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3 aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKy8vIAorLy8gVEhJUyBT T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJF U1MgT1IgSU1QTElFRAorLy8gV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKy8vIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PCisvLyBF VkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs IElOQ0lERU5UQUwsCisvLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisvLyBQUk9DVVJFTUVOVCBPRiBT VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU UzsKKy8vIE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO WSBUSEVPUlkgT0YgTElBQklMSVRZLCAKKy8vIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SCisvLyBPVEhFUldJU0Up IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO IElGCisvLyBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKy8vIAor Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisjaWZuZGVmIF9NU0NfVkVSIC8vIFsKKyNlcnJvciAi VXNlIHRoaXMgaGVhZGVyIG9ubHkgd2l0aCBNaWNyb3NvZnQgVmlzdWFsIEMrKyBjb21waWxlcnMh IgorI2VuZGlmIC8vIF9NU0NfVkVSIF0KKworI2lmbmRlZiBfTVNDX1NURElOVF9IXyAvLyBbCisj ZGVmaW5lIF9NU0NfU1RESU5UX0hfCisKKyNpZiBfTVNDX1ZFUiA+IDEwMDAKKyNwcmFnbWEgb25j ZQorI2VuZGlmCisKKyNpbmNsdWRlIDxsaW1pdHMuaD4KKworLy8gRm9yIFZpc3VhbCBTdHVkaW8g NiBpbiBDKysgbW9kZSBhbmQgZm9yIG1hbnkgVmlzdWFsIFN0dWRpbyB2ZXJzaW9ucyB3aGVuCisv LyBjb21waWxpbmcgZm9yIEFSTSB3ZSBzaG91bGQgd3JhcCA8d2NoYXIuaD4gaW5jbHVkZSB3aXRo ICdleHRlcm4gIkMrKyIge30nCisvLyBvciBjb21waWxlciBnaXZlIG1hbnkgZXJyb3JzIGxpa2Ug dGhpczoKKy8vICAgZXJyb3IgQzI3MzM6IHNlY29uZCBDIGxpbmthZ2Ugb2Ygb3ZlcmxvYWRlZCBm dW5jdGlvbiAnd21lbWNocicgbm90IGFsbG93ZWQKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJu ICJDIiB7CisjZW5kaWYKKyMgIGluY2x1ZGUgPHdjaGFyLmg+CisjaWZkZWYgX19jcGx1c3BsdXMK K30KKyNlbmRpZgorCisvLyBEZWZpbmUgX1c2NCBtYWNyb3MgdG8gbWFyayB0eXBlcyBjaGFuZ2lu ZyB0aGVpciBzaXplLCBsaWtlIGludHB0cl90LgorI2lmbmRlZiBfVzY0CisjICBpZiAhZGVmaW5l ZChfX21pZGwpICYmIChkZWZpbmVkKF9YODZfKSB8fCBkZWZpbmVkKF9NX0lYODYpKSAmJiBfTVND X1ZFUiA+PSAxMzAwCisjICAgICBkZWZpbmUgX1c2NCBfX3c2NAorIyAgZWxzZQorIyAgICAgZGVm aW5lIF9XNjQKKyMgIGVuZGlmCisjZW5kaWYKKworCisvLyA3LjE4LjEgSW50ZWdlciB0eXBlcwor CisvLyA3LjE4LjEuMSBFeGFjdC13aWR0aCBpbnRlZ2VyIHR5cGVzCisKKy8vIFZpc3VhbCBTdHVk aW8gNiBhbmQgRW1iZWRkZWQgVmlzdWFsIEMrKyA0IGRvZXNuJ3QKKy8vIHJlYWxpemUgdGhhdCwg ZS5nLiBjaGFyIGhhcyB0aGUgc2FtZSBzaXplIGFzIF9faW50OAorLy8gc28gd2UgZ2l2ZSB1cCBv biBfX2ludFggZm9yIHRoZW0uCisjaWYgKF9NU0NfVkVSIDwgMTMwMCkKKyAgIHR5cGVkZWYgc2ln bmVkIGNoYXIgICAgICAgaW50OF90OworICAgdHlwZWRlZiBzaWduZWQgc2hvcnQgICAgICBpbnQx Nl90OworICAgdHlwZWRlZiBzaWduZWQgaW50ICAgICAgICBpbnQzMl90OworICAgdHlwZWRlZiB1 bnNpZ25lZCBjaGFyICAgICB1aW50OF90OworICAgdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCAgICB1 aW50MTZfdDsKKyAgIHR5cGVkZWYgdW5zaWduZWQgaW50ICAgICAgdWludDMyX3Q7CisjZWxzZQor ICAgdHlwZWRlZiBzaWduZWQgX19pbnQ4ICAgICBpbnQ4X3Q7CisgICB0eXBlZGVmIHNpZ25lZCBf X2ludDE2ICAgIGludDE2X3Q7CisgICB0eXBlZGVmIHNpZ25lZCBfX2ludDMyICAgIGludDMyX3Q7 CisgICB0eXBlZGVmIHVuc2lnbmVkIF9faW50OCAgIHVpbnQ4X3Q7CisgICB0eXBlZGVmIHVuc2ln bmVkIF9faW50MTYgIHVpbnQxNl90OworICAgdHlwZWRlZiB1bnNpZ25lZCBfX2ludDMyICB1aW50 MzJfdDsKKyNlbmRpZgordHlwZWRlZiBzaWduZWQgX19pbnQ2NCAgICAgICBpbnQ2NF90OwordHlw ZWRlZiB1bnNpZ25lZCBfX2ludDY0ICAgICB1aW50NjRfdDsKKworCisvLyA3LjE4LjEuMiBNaW5p bXVtLXdpZHRoIGludGVnZXIgdHlwZXMKK3R5cGVkZWYgaW50OF90ICAgIGludF9sZWFzdDhfdDsK K3R5cGVkZWYgaW50MTZfdCAgIGludF9sZWFzdDE2X3Q7Cit0eXBlZGVmIGludDMyX3QgICBpbnRf bGVhc3QzMl90OwordHlwZWRlZiBpbnQ2NF90ICAgaW50X2xlYXN0NjRfdDsKK3R5cGVkZWYgdWlu dDhfdCAgIHVpbnRfbGVhc3Q4X3Q7Cit0eXBlZGVmIHVpbnQxNl90ICB1aW50X2xlYXN0MTZfdDsK K3R5cGVkZWYgdWludDMyX3QgIHVpbnRfbGVhc3QzMl90OwordHlwZWRlZiB1aW50NjRfdCAgdWlu dF9sZWFzdDY0X3Q7CisKKy8vIDcuMTguMS4zIEZhc3Rlc3QgbWluaW11bS13aWR0aCBpbnRlZ2Vy IHR5cGVzCit0eXBlZGVmIGludDhfdCAgICBpbnRfZmFzdDhfdDsKK3R5cGVkZWYgaW50MTZfdCAg IGludF9mYXN0MTZfdDsKK3R5cGVkZWYgaW50MzJfdCAgIGludF9mYXN0MzJfdDsKK3R5cGVkZWYg aW50NjRfdCAgIGludF9mYXN0NjRfdDsKK3R5cGVkZWYgdWludDhfdCAgIHVpbnRfZmFzdDhfdDsK K3R5cGVkZWYgdWludDE2X3QgIHVpbnRfZmFzdDE2X3Q7Cit0eXBlZGVmIHVpbnQzMl90ICB1aW50 X2Zhc3QzMl90OwordHlwZWRlZiB1aW50NjRfdCAgdWludF9mYXN0NjRfdDsKKworLy8gNy4xOC4x LjQgSW50ZWdlciB0eXBlcyBjYXBhYmxlIG9mIGhvbGRpbmcgb2JqZWN0IHBvaW50ZXJzCisjaWZk ZWYgX1dJTjY0IC8vIFsKKyAgIHR5cGVkZWYgc2lnbmVkIF9faW50NjQgICAgaW50cHRyX3Q7Cisg ICB0eXBlZGVmIHVuc2lnbmVkIF9faW50NjQgIHVpbnRwdHJfdDsKKyNlbHNlIC8vIF9XSU42NCBd WworICAgdHlwZWRlZiBfVzY0IHNpZ25lZCBpbnQgICBpbnRwdHJfdDsKKyAgIHR5cGVkZWYgX1c2 NCB1bnNpZ25lZCBpbnQgdWludHB0cl90OworI2VuZGlmIC8vIF9XSU42NCBdCisKKy8vIDcuMTgu MS41IEdyZWF0ZXN0LXdpZHRoIGludGVnZXIgdHlwZXMKK3R5cGVkZWYgaW50NjRfdCAgIGludG1h eF90OwordHlwZWRlZiB1aW50NjRfdCAgdWludG1heF90OworCisKKy8vIDcuMTguMiBMaW1pdHMg b2Ygc3BlY2lmaWVkLXdpZHRoIGludGVnZXIgdHlwZXMKKworI2lmICFkZWZpbmVkKF9fY3BsdXNw bHVzKSB8fCBkZWZpbmVkKF9fU1REQ19MSU1JVF9NQUNST1MpIC8vIFsgICBTZWUgZm9vdG5vdGUg MjIwIGF0IHBhZ2UgMjU3IGFuZCBmb290bm90ZSAyMjEgYXQgcGFnZSAyNTkKKworLy8gNy4xOC4y LjEgTGltaXRzIG9mIGV4YWN0LXdpZHRoIGludGVnZXIgdHlwZXMKKyNkZWZpbmUgSU5UOF9NSU4g ICAgICgoaW50OF90KV9JOF9NSU4pCisjZGVmaW5lIElOVDhfTUFYICAgICBfSThfTUFYCisjZGVm aW5lIElOVDE2X01JTiAgICAoKGludDE2X3QpX0kxNl9NSU4pCisjZGVmaW5lIElOVDE2X01BWCAg ICBfSTE2X01BWAorI2RlZmluZSBJTlQzMl9NSU4gICAgKChpbnQzMl90KV9JMzJfTUlOKQorI2Rl ZmluZSBJTlQzMl9NQVggICAgX0kzMl9NQVgKKyNkZWZpbmUgSU5UNjRfTUlOICAgICgoaW50NjRf dClfSTY0X01JTikKKyNkZWZpbmUgSU5UNjRfTUFYICAgIF9JNjRfTUFYCisjZGVmaW5lIFVJTlQ4 X01BWCAgICBfVUk4X01BWAorI2RlZmluZSBVSU5UMTZfTUFYICAgX1VJMTZfTUFYCisjZGVmaW5l IFVJTlQzMl9NQVggICBfVUkzMl9NQVgKKyNkZWZpbmUgVUlOVDY0X01BWCAgIF9VSTY0X01BWAor CisvLyA3LjE4LjIuMiBMaW1pdHMgb2YgbWluaW11bS13aWR0aCBpbnRlZ2VyIHR5cGVzCisjZGVm aW5lIElOVF9MRUFTVDhfTUlOICAgIElOVDhfTUlOCisjZGVmaW5lIElOVF9MRUFTVDhfTUFYICAg IElOVDhfTUFYCisjZGVmaW5lIElOVF9MRUFTVDE2X01JTiAgIElOVDE2X01JTgorI2RlZmluZSBJ TlRfTEVBU1QxNl9NQVggICBJTlQxNl9NQVgKKyNkZWZpbmUgSU5UX0xFQVNUMzJfTUlOICAgSU5U MzJfTUlOCisjZGVmaW5lIElOVF9MRUFTVDMyX01BWCAgIElOVDMyX01BWAorI2RlZmluZSBJTlRf TEVBU1Q2NF9NSU4gICBJTlQ2NF9NSU4KKyNkZWZpbmUgSU5UX0xFQVNUNjRfTUFYICAgSU5UNjRf TUFYCisjZGVmaW5lIFVJTlRfTEVBU1Q4X01BWCAgIFVJTlQ4X01BWAorI2RlZmluZSBVSU5UX0xF QVNUMTZfTUFYICBVSU5UMTZfTUFYCisjZGVmaW5lIFVJTlRfTEVBU1QzMl9NQVggIFVJTlQzMl9N QVgKKyNkZWZpbmUgVUlOVF9MRUFTVDY0X01BWCAgVUlOVDY0X01BWAorCisvLyA3LjE4LjIuMyBM aW1pdHMgb2YgZmFzdGVzdCBtaW5pbXVtLXdpZHRoIGludGVnZXIgdHlwZXMKKyNkZWZpbmUgSU5U X0ZBU1Q4X01JTiAgICBJTlQ4X01JTgorI2RlZmluZSBJTlRfRkFTVDhfTUFYICAgIElOVDhfTUFY CisjZGVmaW5lIElOVF9GQVNUMTZfTUlOICAgSU5UMTZfTUlOCisjZGVmaW5lIElOVF9GQVNUMTZf TUFYICAgSU5UMTZfTUFYCisjZGVmaW5lIElOVF9GQVNUMzJfTUlOICAgSU5UMzJfTUlOCisjZGVm aW5lIElOVF9GQVNUMzJfTUFYICAgSU5UMzJfTUFYCisjZGVmaW5lIElOVF9GQVNUNjRfTUlOICAg SU5UNjRfTUlOCisjZGVmaW5lIElOVF9GQVNUNjRfTUFYICAgSU5UNjRfTUFYCisjZGVmaW5lIFVJ TlRfRkFTVDhfTUFYICAgVUlOVDhfTUFYCisjZGVmaW5lIFVJTlRfRkFTVDE2X01BWCAgVUlOVDE2 X01BWAorI2RlZmluZSBVSU5UX0ZBU1QzMl9NQVggIFVJTlQzMl9NQVgKKyNkZWZpbmUgVUlOVF9G QVNUNjRfTUFYICBVSU5UNjRfTUFYCisKKy8vIDcuMTguMi40IExpbWl0cyBvZiBpbnRlZ2VyIHR5 cGVzIGNhcGFibGUgb2YgaG9sZGluZyBvYmplY3QgcG9pbnRlcnMKKyNpZmRlZiBfV0lONjQgLy8g WworIyAgZGVmaW5lIElOVFBUUl9NSU4gICBJTlQ2NF9NSU4KKyMgIGRlZmluZSBJTlRQVFJfTUFY ICAgSU5UNjRfTUFYCisjICBkZWZpbmUgVUlOVFBUUl9NQVggIFVJTlQ2NF9NQVgKKyNlbHNlIC8v IF9XSU42NCBdWworIyAgZGVmaW5lIElOVFBUUl9NSU4gICBJTlQzMl9NSU4KKyMgIGRlZmluZSBJ TlRQVFJfTUFYICAgSU5UMzJfTUFYCisjICBkZWZpbmUgVUlOVFBUUl9NQVggIFVJTlQzMl9NQVgK KyNlbmRpZiAvLyBfV0lONjQgXQorCisvLyA3LjE4LjIuNSBMaW1pdHMgb2YgZ3JlYXRlc3Qtd2lk dGggaW50ZWdlciB0eXBlcworI2RlZmluZSBJTlRNQVhfTUlOICAgSU5UNjRfTUlOCisjZGVmaW5l IElOVE1BWF9NQVggICBJTlQ2NF9NQVgKKyNkZWZpbmUgVUlOVE1BWF9NQVggIFVJTlQ2NF9NQVgK KworLy8gNy4xOC4zIExpbWl0cyBvZiBvdGhlciBpbnRlZ2VyIHR5cGVzCisKKyNpZmRlZiBfV0lO NjQgLy8gWworIyAgZGVmaW5lIFBUUkRJRkZfTUlOICBfSTY0X01JTgorIyAgZGVmaW5lIFBUUkRJ RkZfTUFYICBfSTY0X01BWAorI2Vsc2UgIC8vIF9XSU42NCBdWworIyAgZGVmaW5lIFBUUkRJRkZf TUlOICBfSTMyX01JTgorIyAgZGVmaW5lIFBUUkRJRkZfTUFYICBfSTMyX01BWAorI2VuZGlmICAv LyBfV0lONjQgXQorCisjZGVmaW5lIFNJR19BVE9NSUNfTUlOICBJTlRfTUlOCisjZGVmaW5lIFNJ R19BVE9NSUNfTUFYICBJTlRfTUFYCisKKyNpZm5kZWYgU0laRV9NQVggLy8gWworIyAgaWZkZWYg X1dJTjY0IC8vIFsKKyMgICAgIGRlZmluZSBTSVpFX01BWCAgX1VJNjRfTUFYCisjICBlbHNlIC8v IF9XSU42NCBdWworIyAgICAgZGVmaW5lIFNJWkVfTUFYICBfVUkzMl9NQVgKKyMgIGVuZGlmIC8v IF9XSU42NCBdCisjZW5kaWYgLy8gU0laRV9NQVggXQorCisvLyBXQ0hBUl9NSU4gYW5kIFdDSEFS X01BWCBhcmUgYWxzbyBkZWZpbmVkIGluIDx3Y2hhci5oPgorI2lmbmRlZiBXQ0hBUl9NSU4gLy8g WworIyAgZGVmaW5lIFdDSEFSX01JTiAgMAorI2VuZGlmICAvLyBXQ0hBUl9NSU4gXQorI2lmbmRl ZiBXQ0hBUl9NQVggLy8gWworIyAgZGVmaW5lIFdDSEFSX01BWCAgX1VJMTZfTUFYCisjZW5kaWYg IC8vIFdDSEFSX01BWCBdCisKKyNkZWZpbmUgV0lOVF9NSU4gIDAKKyNkZWZpbmUgV0lOVF9NQVgg IF9VSTE2X01BWAorCisjZW5kaWYgLy8gX19TVERDX0xJTUlUX01BQ1JPUyBdCisKKworLy8gNy4x OC40IExpbWl0cyBvZiBvdGhlciBpbnRlZ2VyIHR5cGVzCisKKyNpZiAhZGVmaW5lZChfX2NwbHVz cGx1cykgfHwgZGVmaW5lZChfX1NURENfQ09OU1RBTlRfTUFDUk9TKSAvLyBbICAgU2VlIGZvb3Ru b3RlIDIyNCBhdCBwYWdlIDI2MAorCisvLyA3LjE4LjQuMSBNYWNyb3MgZm9yIG1pbmltdW0td2lk dGggaW50ZWdlciBjb25zdGFudHMKKworI2RlZmluZSBJTlQ4X0ModmFsKSAgdmFsIyNpOAorI2Rl ZmluZSBJTlQxNl9DKHZhbCkgdmFsIyNpMTYKKyNkZWZpbmUgSU5UMzJfQyh2YWwpIHZhbCMjaTMy CisjZGVmaW5lIElOVDY0X0ModmFsKSB2YWwjI2k2NAorCisjZGVmaW5lIFVJTlQ4X0ModmFsKSAg dmFsIyN1aTgKKyNkZWZpbmUgVUlOVDE2X0ModmFsKSB2YWwjI3VpMTYKKyNkZWZpbmUgVUlOVDMy X0ModmFsKSB2YWwjI3VpMzIKKyNkZWZpbmUgVUlOVDY0X0ModmFsKSB2YWwjI3VpNjQKKworLy8g Ny4xOC40LjIgTWFjcm9zIGZvciBncmVhdGVzdC13aWR0aCBpbnRlZ2VyIGNvbnN0YW50cworI2Rl ZmluZSBJTlRNQVhfQyAgIElOVDY0X0MKKyNkZWZpbmUgVUlOVE1BWF9DICBVSU5UNjRfQworCisj ZW5kaWYgLy8gX19TVERDX0NPTlNUQU5UX01BQ1JPUyBdCisKKworI2VuZGlmIC8vIF9NU0NfU1RE SU5UX0hfIF0KCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01 LjMuMC9pbmNsdWRlL21zdmNfY29tcGF0L3N0cmluZ3MuaCBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1 aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvbXN2Y19jb21wYXQvc3RyaW5ncy5oCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5NmYyNTYKLS0tIC9kZXYvbnVsbAorKysgYi8z ODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL21zdmNfY29tcGF0 L3N0cmluZ3MuaApAQCAtMCwwICsxLDU4IEBACisjaWZuZGVmIHN0cmluZ3NfaAorI2RlZmluZSBz dHJpbmdzX2gKKworLyogTVNWQyBkb2Vzbid0IGRlZmluZSBmZnMvZmZzbC4gVGhpcyBkdW1teSBz dHJpbmdzLmggaGVhZGVyIGlzIHByb3ZpZGVkCisgKiBmb3IgYm90aCAqLworI2lmZGVmIF9NU0Nf VkVSCisjICBpbmNsdWRlIDxpbnRyaW4uaD4KKyMgIHByYWdtYSBpbnRyaW5zaWMoX0JpdFNjYW5G b3J3YXJkKQorc3RhdGljIF9fZm9yY2VpbmxpbmUgaW50IGZmc2wobG9uZyB4KSB7CisJdW5zaWdu ZWQgbG9uZyBpOworCisJaWYgKF9CaXRTY2FuRm9yd2FyZCgmaSwgeCkpIHsKKwkJcmV0dXJuIGkg KyAxOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIF9fZm9yY2VpbmxpbmUgaW50IGZmcyhp bnQgeCkgeworCXJldHVybiBmZnNsKHgpOworfQorCisjICBpZmRlZiAgX01fWDY0CisjICAgIHBy YWdtYSBpbnRyaW5zaWMoX0JpdFNjYW5Gb3J3YXJkNjQpCisjICBlbmRpZgorCitzdGF0aWMgX19m b3JjZWlubGluZSBpbnQgZmZzbGwodW5zaWduZWQgX19pbnQ2NCB4KSB7CisJdW5zaWduZWQgbG9u ZyBpOworI2lmZGVmICBfTV9YNjQKKwlpZiAoX0JpdFNjYW5Gb3J3YXJkNjQoJmksIHgpKSB7CisJ CXJldHVybiBpICsgMTsKKwl9CisJcmV0dXJuIDA7CisjZWxzZQorLy8gRmFsbGJhY2sgZm9yIDMy LWJpdCBidWlsZCB3aGVyZSA2NC1iaXQgdmVyc2lvbiBub3QgYXZhaWxhYmxlCisvLyBhc3N1bWlu ZyBsaXR0bGUgZW5kaWFuCisJdW5pb24geworCQl1bnNpZ25lZCBfX2ludDY0IGxsOworCQl1bnNp Z25lZCAgIGxvbmcgbFsyXTsKKwl9IHM7CisKKwlzLmxsID0geDsKKworCWlmIChfQml0U2NhbkZv cndhcmQoJmksIHMubFswXSkpIHsKKwkJcmV0dXJuIGkgKyAxOworCX0gZWxzZSBpZihfQml0U2Nh bkZvcndhcmQoJmksIHMubFsxXSkpIHsKKwkJcmV0dXJuIGkgKyAzMzsKKwl9CisJcmV0dXJuIDA7 CisjZW5kaWYKK30KKworI2Vsc2UKKyMgIGRlZmluZSBmZnNsbCh4KSBfX2J1aWx0aW5fZmZzbGwo eCkKKyMgIGRlZmluZSBmZnNsKHgpIF9fYnVpbHRpbl9mZnNsKHgpCisjICBkZWZpbmUgZmZzKHgp IF9fYnVpbHRpbl9mZnMoeCkKKyNlbmRpZgorCisjZW5kaWYgLyogc3RyaW5nc19oICovCgpkaWZm IC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9t c3ZjX2NvbXBhdC93aW5kb3dzX2V4dHJhLmggYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1h bGxvYy01LjMuMC9pbmNsdWRlL21zdmNfY29tcGF0L3dpbmRvd3NfZXh0cmEuaApuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNmViYjkzCi0tLSAvZGV2L251bGwKKysrIGIvMzg5 LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9tc3ZjX2NvbXBhdC93 aW5kb3dzX2V4dHJhLmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIE1TVkNfQ09NUEFUX1dJTkRP V1NfRVhUUkFfSAorI2RlZmluZSBNU1ZDX0NPTVBBVF9XSU5ET1dTX0VYVFJBX0gKKworI2luY2x1 ZGUgPGVycm5vLmg+CisKKyNlbmRpZiAvKiBNU1ZDX0NPTVBBVF9XSU5ET1dTX0VYVFJBX0ggKi8K CmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9qZW1h bGxvYy5wYy5pbiBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2plbWFs bG9jLnBjLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0MjhhODYKLS0t IC9kZXYvbnVsbAorKysgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9q ZW1hbGxvYy5wYy5pbgpAQCAtMCwwICsxLDEyIEBACitwcmVmaXg9QHByZWZpeEAKK2V4ZWNfcHJl Zml4PUBleGVjX3ByZWZpeEAKK2xpYmRpcj1AbGliZGlyQAoraW5jbHVkZWRpcj1AaW5jbHVkZWRp ckAKK2luc3RhbGxfc3VmZml4PUBpbnN0YWxsX3N1ZmZpeEAKKworTmFtZTogamVtYWxsb2MKK0Rl c2NyaXB0aW9uOiBBIGdlbmVyYWwgcHVycG9zZSBtYWxsb2MoMykgaW1wbGVtZW50YXRpb24gdGhh dCBlbXBoYXNpemVzIGZyYWdtZW50YXRpb24gYXZvaWRhbmNlIGFuZCBzY2FsYWJsZSBjb25jdXJy ZW5jeSBzdXBwb3J0LgorVVJMOiBodHRwOi8vamVtYWxsb2MubmV0LworVmVyc2lvbjogQGplbWFs bG9jX3ZlcnNpb25fbWFqb3JALkBqZW1hbGxvY192ZXJzaW9uX21pbm9yQC5AamVtYWxsb2NfdmVy c2lvbl9idWdmaXhAX0BqZW1hbGxvY192ZXJzaW9uX25yZXZACitDZmxhZ3M6IC1JJHtpbmNsdWRl ZGlyfQorTGliczogLUwke2xpYmRpcn0gLWxqZW1hbGxvYyR7aW5zdGFsbF9zdWZmaXh9CgpkaWZm IC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvbTQvYXhfY3h4 X2NvbXBpbGVfc3RkY3h4Lm00IGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4z LjAvbTQvYXhfY3h4X2NvbXBpbGVfc3RkY3h4Lm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAuLjQzMDg3YjIKLS0tIC9kZXYvbnVsbAorKysgYi8zODktZHMtYmFzZS0zLjMuMC1i dWlsZC9qZW1hbGxvYy01LjMuMC9tNC9heF9jeHhfY29tcGlsZV9zdGRjeHgubTQKQEAgLTAsMCAr MSw5NTEgQEAKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjICBodHRwczovL3d3dy5nbnUub3JnL3Nv ZnR3YXJlL2F1dG9jb25mLWFyY2hpdmUvYXhfY3h4X2NvbXBpbGVfc3RkY3h4Lmh0bWwKKyMgPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09CisjCisjIFNZTk9QU0lTCisjCisjICAgQVhfQ1hYX0NPTVBJTEVfU1RE Q1hYKFZFUlNJT04sIFtleHR8bm9leHRdLCBbbWFuZGF0b3J5fG9wdGlvbmFsXSkKKyMKKyMgREVT Q1JJUFRJT04KKyMKKyMgICBDaGVjayBmb3IgYmFzZWxpbmUgbGFuZ3VhZ2UgY292ZXJhZ2UgaW4g dGhlIGNvbXBpbGVyIGZvciB0aGUgc3BlY2lmaWVkCisjICAgdmVyc2lvbiBvZiB0aGUgQysrIHN0 YW5kYXJkLiAgSWYgbmVjZXNzYXJ5LCBhZGQgc3dpdGNoZXMgdG8gQ1hYIGFuZAorIyAgIENYWENQ UCB0byBlbmFibGUgc3VwcG9ydC4gIFZFUlNJT04gbWF5IGJlICcxMScgKGZvciB0aGUgQysrMTEg c3RhbmRhcmQpCisjICAgb3IgJzE0JyAoZm9yIHRoZSBDKysxNCBzdGFuZGFyZCkuCisjCisjICAg VGhlIHNlY29uZCBhcmd1bWVudCwgaWYgc3BlY2lmaWVkLCBpbmRpY2F0ZXMgd2hldGhlciB5b3Ug aW5zaXN0IG9uIGFuCisjICAgZXh0ZW5kZWQgbW9kZSAoZS5nLiAtc3RkPWdudSsrMTEpIG9yIGEg c3RyaWN0IGNvbmZvcm1hbmNlIG1vZGUgKGUuZy4KKyMgICAtc3RkPWMrKzExKS4gIElmIG5laXRo ZXIgaXMgc3BlY2lmaWVkLCB5b3UgZ2V0IHdoYXRldmVyIHdvcmtzLCB3aXRoCisjICAgcHJlZmVy ZW5jZSBmb3IgYW4gZXh0ZW5kZWQgbW9kZS4KKyMKKyMgICBUaGUgdGhpcmQgYXJndW1lbnQsIGlm IHNwZWNpZmllZCAnbWFuZGF0b3J5JyBvciBpZiBsZWZ0IHVuc3BlY2lmaWVkLAorIyAgIGluZGlj YXRlcyB0aGF0IGJhc2VsaW5lIHN1cHBvcnQgZm9yIHRoZSBzcGVjaWZpZWQgQysrIHN0YW5kYXJk IGlzCisjICAgcmVxdWlyZWQgYW5kIHRoYXQgdGhlIG1hY3JvIHNob3VsZCBlcnJvciBvdXQgaWYg bm8gbW9kZSB3aXRoIHRoYXQKKyMgICBzdXBwb3J0IGlzIGZvdW5kLiAgSWYgc3BlY2lmaWVkICdv cHRpb25hbCcsIHRoZW4gY29uZmlndXJhdGlvbiBwcm9jZWVkcworIyAgIHJlZ2FyZGxlc3MsIGFm dGVyIGRlZmluaW5nIEhBVkVfQ1hYJHtWRVJTSU9OfSBpZiBhbmQgb25seSBpZiBhCisjICAgc3Vw cG9ydGluZyBtb2RlIGlzIGZvdW5kLgorIworIyBMSUNFTlNFCisjCisjICAgQ29weXJpZ2h0IChj KSAyMDA4IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorIyAgIENvcHlyaWdodCAo YykgMjAxMiBaYWNrIFdlaW5iZXJnIDx6YWNrd0BwYW5peC5jb20+CisjICAgQ29weXJpZ2h0IChj KSAyMDEzIFJveSBTdG9nbmVyIDxyb3lzdGduckBpY2VzLnV0ZXhhcy5lZHU+CisjICAgQ29weXJp Z2h0IChjKSAyMDE0LCAyMDE1IEdvb2dsZSBJbmMuOyBjb250cmlidXRlZCBieSBBbGV4ZXkgU29r b2xvdiA8c29rb2xvdkBnb29nbGUuY29tPgorIyAgIENvcHlyaWdodCAoYykgMjAxNSBQYXVsIE5v cm1hbiA8cGVub3JtYW5AbWFjLmNvbT4KKyMgICBDb3B5cmlnaHQgKGMpIDIwMTUgTW9yaXR6IEts YW1tbGVyIDxtb3JpdHpAa2xhbW1sZXIuZXU+CisjICAgQ29weXJpZ2h0IChjKSAyMDE2LCAyMDE4 IEtyemVzaW1pciBOb3dhayA8cWRsYWN6QGdtYWlsLmNvbT4KKyMgICBDb3B5cmlnaHQgKGMpIDIw MTkgRW5qaSBDb29wZXIgPHlhbmV1cmFiZXlhQGdtYWlsLmNvbT4KKyMKKyMgICBDb3B5aW5nIGFu ZCBkaXN0cmlidXRpb24gb2YgdGhpcyBmaWxlLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9u LCBhcmUKKyMgICBwZXJtaXR0ZWQgaW4gYW55IG1lZGl1bSB3aXRob3V0IHJveWFsdHkgcHJvdmlk ZWQgdGhlIGNvcHlyaWdodCBub3RpY2UKKyMgICBhbmQgdGhpcyBub3RpY2UgYXJlIHByZXNlcnZl ZC4gIFRoaXMgZmlsZSBpcyBvZmZlcmVkIGFzLWlzLCB3aXRob3V0IGFueQorIyAgIHdhcnJhbnR5 LgorCisjc2VyaWFsIDExCisKK2RubCAgVGhpcyBtYWNybyBpcyBiYXNlZCBvbiB0aGUgY29kZSBm cm9tIHRoZSBBWF9DWFhfQ09NUElMRV9TVERDWFhfMTEgbWFjcm8KK2RubCAgKHNlcmlhbCB2ZXJz aW9uIG51bWJlciAxMykuCisKK0FDX0RFRlVOKFtBWF9DWFhfQ09NUElMRV9TVERDWFhdLCBbZG5s CisgIG00X2lmKFskMV0sIFsxMV0sIFtheF9jeHhfY29tcGlsZV9hbHRlcm5hdGl2ZXM9IjExIDB4 Il0sCisgICAgICAgIFskMV0sIFsxNF0sIFtheF9jeHhfY29tcGlsZV9hbHRlcm5hdGl2ZXM9IjE0 IDF5Il0sCisgICAgICAgIFskMV0sIFsxN10sIFtheF9jeHhfY29tcGlsZV9hbHRlcm5hdGl2ZXM9 IjE3IDF6Il0sCisgICAgICAgIFttNF9mYXRhbChbaW52YWxpZCBmaXJzdCBhcmd1bWVudCBgJDEn IHRvIEFYX0NYWF9DT01QSUxFX1NURENYWF0pXSlkbmwKKyAgbTRfaWYoWyQyXSwgW10sIFtdLAor ICAgICAgICBbJDJdLCBbZXh0XSwgW10sCisgICAgICAgIFskMl0sIFtub2V4dF0sIFtdLAorICAg ICAgICBbbTRfZmF0YWwoW2ludmFsaWQgc2Vjb25kIGFyZ3VtZW50IGAkMicgdG8gQVhfQ1hYX0NP TVBJTEVfU1REQ1hYXSldKWRubAorICBtNF9pZihbJDNdLCBbXSwgW2F4X2N4eF9jb21waWxlX2N4 eCQxX3JlcXVpcmVkPXRydWVdLAorICAgICAgICBbJDNdLCBbbWFuZGF0b3J5XSwgW2F4X2N4eF9j b21waWxlX2N4eCQxX3JlcXVpcmVkPXRydWVdLAorICAgICAgICBbJDNdLCBbb3B0aW9uYWxdLCBb YXhfY3h4X2NvbXBpbGVfY3h4JDFfcmVxdWlyZWQ9ZmFsc2VdLAorICAgICAgICBbbTRfZmF0YWwo W2ludmFsaWQgdGhpcmQgYXJndW1lbnQgYCQzJyB0byBBWF9DWFhfQ09NUElMRV9TVERDWFhdKV0p CisgIEFDX0xBTkdfUFVTSChbQysrXSlkbmwKKyAgYWNfc3VjY2Vzcz1ubworCisgIG00X2lmKFsk Ml0sIFtub2V4dF0sIFtdLCBbZG5sCisgIGlmIHRlc3QgeCRhY19zdWNjZXNzID0geG5vOyB0aGVu CisgICAgZm9yIGFsdGVybmF0aXZlIGluICR7YXhfY3h4X2NvbXBpbGVfYWx0ZXJuYXRpdmVzfTsg ZG8KKyAgICAgIHN3aXRjaD0iLXN0ZD1nbnUrKyR7YWx0ZXJuYXRpdmV9IgorICAgICAgY2FjaGV2 YXI9QVNfVFJfU0goW2F4X2N2X2N4eF9jb21waWxlX2N4eCQxXyRzd2l0Y2hdKQorICAgICAgQUNf Q0FDSEVfQ0hFQ0sod2hldGhlciAkQ1hYIHN1cHBvcnRzIEMrKyQxIGZlYXR1cmVzIHdpdGggJHN3 aXRjaCwKKyAgICAgICAgICAgICAgICAgICAgICRjYWNoZXZhciwKKyAgICAgICAgW2FjX3NhdmVf Q1hYPSIkQ1hYIgorICAgICAgICAgQ1hYPSIkQ1hYICRzd2l0Y2giCisgICAgICAgICBBQ19DT01Q SUxFX0lGRUxTRShbQUNfTEFOR19TT1VSQ0UoW19BWF9DWFhfQ09NUElMRV9TVERDWFhfdGVzdGJv ZHlfJDFdKV0sCisgICAgICAgICAgW2V2YWwgJGNhY2hldmFyPXllc10sCisgICAgICAgICAgW2V2 YWwgJGNhY2hldmFyPW5vXSkKKyAgICAgICAgIENYWD0iJGFjX3NhdmVfQ1hYIl0pCisgICAgICBp ZiBldmFsIHRlc3QgeFwkJGNhY2hldmFyID0geHllczsgdGhlbgorICAgICAgICBDWFg9IiRDWFgg JHN3aXRjaCIKKyAgICAgICAgaWYgdGVzdCAtbiAiJENYWENQUCIgOyB0aGVuCisgICAgICAgICAg Q1hYQ1BQPSIkQ1hYQ1BQICRzd2l0Y2giCisgICAgICAgIGZpCisgICAgICAgIGFjX3N1Y2Nlc3M9 eWVzCisgICAgICAgIGJyZWFrCisgICAgICBmaQorICAgIGRvbmUKKyAgZmldKQorCisgIG00X2lm KFskMl0sIFtleHRdLCBbXSwgW2RubAorICBpZiB0ZXN0IHgkYWNfc3VjY2VzcyA9IHhubzsgdGhl bgorICAgIGRubCBIUCdzIGFDQyBuZWVkcyArc3RkPWMrKzExIGFjY29yZGluZyB0bzoKKyAgICBk bmwgaHR0cDovL2gyMTAwNy53d3cyLmhwLmNvbS9wb3J0YWwvZG93bmxvYWQvZmlsZXMvdW5wcm90 L2FDeHgvUERGX1JlbGVhc2VfTm90ZXMvNzY5MTQ5LTAwMS5wZGYKKyAgICBkbmwgQ3JheSdzIGNy YXlDQyBuZWVkcyAiLWggc3RkPWMrKzExIgorICAgIGZvciBhbHRlcm5hdGl2ZSBpbiAke2F4X2N4 eF9jb21waWxlX2FsdGVybmF0aXZlc307IGRvCisgICAgICBmb3Igc3dpdGNoIGluIC1zdGQ9Yysr JHthbHRlcm5hdGl2ZX0gK3N0ZD1jKyske2FsdGVybmF0aXZlfSAiLWggc3RkPWMrKyR7YWx0ZXJu YXRpdmV9IjsgZG8KKyAgICAgICAgY2FjaGV2YXI9QVNfVFJfU0goW2F4X2N2X2N4eF9jb21waWxl X2N4eCQxXyRzd2l0Y2hdKQorICAgICAgICBBQ19DQUNIRV9DSEVDSyh3aGV0aGVyICRDWFggc3Vw cG9ydHMgQysrJDEgZmVhdHVyZXMgd2l0aCAkc3dpdGNoLAorICAgICAgICAgICAgICAgICAgICAg ICAkY2FjaGV2YXIsCisgICAgICAgICAgW2FjX3NhdmVfQ1hYPSIkQ1hYIgorICAgICAgICAgICBD WFg9IiRDWFggJHN3aXRjaCIKKyAgICAgICAgICAgQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdf U09VUkNFKFtfQVhfQ1hYX0NPTVBJTEVfU1REQ1hYX3Rlc3Rib2R5XyQxXSldLAorICAgICAgICAg ICAgW2V2YWwgJGNhY2hldmFyPXllc10sCisgICAgICAgICAgICBbZXZhbCAkY2FjaGV2YXI9bm9d KQorICAgICAgICAgICBDWFg9IiRhY19zYXZlX0NYWCJdKQorICAgICAgICBpZiBldmFsIHRlc3Qg eFwkJGNhY2hldmFyID0geHllczsgdGhlbgorICAgICAgICAgIENYWD0iJENYWCAkc3dpdGNoIgor ICAgICAgICAgIGlmIHRlc3QgLW4gIiRDWFhDUFAiIDsgdGhlbgorICAgICAgICAgICAgQ1hYQ1BQ PSIkQ1hYQ1BQICRzd2l0Y2giCisgICAgICAgICAgZmkKKyAgICAgICAgICBhY19zdWNjZXNzPXll cworICAgICAgICAgIGJyZWFrCisgICAgICAgIGZpCisgICAgICBkb25lCisgICAgICBpZiB0ZXN0 IHgkYWNfc3VjY2VzcyA9IHh5ZXM7IHRoZW4KKyAgICAgICAgYnJlYWsKKyAgICAgIGZpCisgICAg ZG9uZQorICBmaV0pCisgIEFDX0xBTkdfUE9QKFtDKytdKQorICBpZiB0ZXN0IHgkYXhfY3h4X2Nv bXBpbGVfY3h4JDFfcmVxdWlyZWQgPSB4dHJ1ZTsgdGhlbgorICAgIGlmIHRlc3QgeCRhY19zdWNj ZXNzID0geG5vOyB0aGVuCisgICAgICBBQ19NU0dfRVJST1IoWyoqKiBBIGNvbXBpbGVyIHdpdGgg c3VwcG9ydCBmb3IgQysrJDEgbGFuZ3VhZ2UgZmVhdHVyZXMgaXMgcmVxdWlyZWQuXSkKKyAgICBm aQorICBmaQorICBpZiB0ZXN0IHgkYWNfc3VjY2VzcyA9IHhubzsgdGhlbgorICAgIEhBVkVfQ1hY JDE9MAorICAgIEFDX01TR19OT1RJQ0UoW05vIGNvbXBpbGVyIHdpdGggQysrJDEgc3VwcG9ydCB3 YXMgZm91bmRdKQorICBlbHNlCisgICAgSEFWRV9DWFgkMT0xCisgICAgQUNfREVGSU5FKEhBVkVf Q1hYJDEsMSwKKyAgICAgICAgICAgICAgW2RlZmluZSBpZiB0aGUgY29tcGlsZXIgc3VwcG9ydHMg YmFzaWMgQysrJDEgc3ludGF4XSkKKyAgZmkKKyAgQUNfU1VCU1QoSEFWRV9DWFgkMSkKK10pCisK KworZG5sICBUZXN0IGJvZHkgZm9yIGNoZWNraW5nIEMrKzExIHN1cHBvcnQKKworbTRfZGVmaW5l KFtfQVhfQ1hYX0NPTVBJTEVfU1REQ1hYX3Rlc3Rib2R5XzExXSwKKyAgX0FYX0NYWF9DT01QSUxF X1NURENYWF90ZXN0Ym9keV9uZXdfaW5fMTEKKykKKworCitkbmwgIFRlc3QgYm9keSBmb3IgY2hl Y2tpbmcgQysrMTQgc3VwcG9ydAorCittNF9kZWZpbmUoW19BWF9DWFhfQ09NUElMRV9TVERDWFhf dGVzdGJvZHlfMTRdLAorICBfQVhfQ1hYX0NPTVBJTEVfU1REQ1hYX3Rlc3Rib2R5X25ld19pbl8x MQorICBfQVhfQ1hYX0NPTVBJTEVfU1REQ1hYX3Rlc3Rib2R5X25ld19pbl8xNAorKQorCittNF9k ZWZpbmUoW19BWF9DWFhfQ09NUElMRV9TVERDWFhfdGVzdGJvZHlfMTddLAorICBfQVhfQ1hYX0NP TVBJTEVfU1REQ1hYX3Rlc3Rib2R5X25ld19pbl8xMQorICBfQVhfQ1hYX0NPTVBJTEVfU1REQ1hY X3Rlc3Rib2R5X25ld19pbl8xNAorICBfQVhfQ1hYX0NPTVBJTEVfU1REQ1hYX3Rlc3Rib2R5X25l d19pbl8xNworKQorCitkbmwgIFRlc3RzIGZvciBuZXcgZmVhdHVyZXMgaW4gQysrMTEKKworbTRf ZGVmaW5lKFtfQVhfQ1hYX0NPTVBJTEVfU1REQ1hYX3Rlc3Rib2R5X25ld19pbl8xMV0sIFtbCisK Ky8vIElmIHRoZSBjb21waWxlciBhZG1pdHMgdGhhdCBpdCBpcyBub3QgcmVhZHkgZm9yIEMrKzEx LCB3aHkgdG9ydHVyZSBpdD8KKy8vIEhvcGVmdWxseSwgdGhpcyB3aWxsIHNwZWVkIHVwIHRoZSB0 ZXN0LgorCisjaWZuZGVmIF9fY3BsdXNwbHVzCisKKyNlcnJvciAiVGhpcyBpcyBub3QgYSBDKysg Y29tcGlsZXIiCisKKyNlbGlmIF9fY3BsdXNwbHVzIDwgMjAxMTAzTAorCisjZXJyb3IgIlRoaXMg aXMgbm90IGEgQysrMTEgY29tcGlsZXIiCisKKyNlbHNlCisKK25hbWVzcGFjZSBjeHgxMQorewor CisgIG5hbWVzcGFjZSB0ZXN0X3N0YXRpY19hc3NlcnQKKyAgeworCisgICAgdGVtcGxhdGUgPHR5 cGVuYW1lIFQ+CisgICAgc3RydWN0IGNoZWNrCisgICAgeworICAgICAgc3RhdGljX2Fzc2VydChz aXplb2YoaW50KSA8PSBzaXplb2YoVCksICJub3QgYmlnIGVub3VnaCIpOworICAgIH07CisKKyAg fQorCisgIG5hbWVzcGFjZSB0ZXN0X2ZpbmFsX292ZXJyaWRlCisgIHsKKworICAgIHN0cnVjdCBC YXNlCisgICAgeworICAgICAgdmlydHVhbCB+QmFzZSgpIHt9CisgICAgICB2aXJ0dWFsIHZvaWQg ZigpIHt9CisgICAgfTsKKworICAgIHN0cnVjdCBEZXJpdmVkIDogcHVibGljIEJhc2UKKyAgICB7 CisgICAgICB2aXJ0dWFsIH5EZXJpdmVkKCkgb3ZlcnJpZGUge30KKyAgICAgIHZpcnR1YWwgdm9p ZCBmKCkgb3ZlcnJpZGUge30KKyAgICB9OworCisgIH0KKworICBuYW1lc3BhY2UgdGVzdF9kb3Vi bGVfcmlnaHRfYW5nbGVfYnJhY2tldHMKKyAgeworCisgICAgdGVtcGxhdGUgPCB0eXBlbmFtZSBU ID4KKyAgICBzdHJ1Y3QgY2hlY2sge307CisKKyAgICB0eXBlZGVmIGNoZWNrPHZvaWQ+IHNpbmds ZV90eXBlOworICAgIHR5cGVkZWYgY2hlY2s8Y2hlY2s8dm9pZD4+IGRvdWJsZV90eXBlOworICAg IHR5cGVkZWYgY2hlY2s8Y2hlY2s8Y2hlY2s8dm9pZD4+PiB0cmlwbGVfdHlwZTsKKyAgICB0eXBl ZGVmIGNoZWNrPGNoZWNrPGNoZWNrPGNoZWNrPHZvaWQ+Pj4+IHF1YWRydXBsZV90eXBlOworCisg IH0KKworICBuYW1lc3BhY2UgdGVzdF9kZWNsdHlwZQorICB7CisKKyAgICBpbnQKKyAgICBmKCkK KyAgICB7CisgICAgICBpbnQgYSA9IDE7CisgICAgICBkZWNsdHlwZShhKSBiID0gMjsKKyAgICAg IHJldHVybiBhICsgYjsKKyAgICB9CisKKyAgfQorCisgIG5hbWVzcGFjZSB0ZXN0X3R5cGVfZGVk dWN0aW9uCisgIHsKKworICAgIHRlbXBsYXRlIDwgdHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyID4K KyAgICBzdHJ1Y3QgaXNfc2FtZQorICAgIHsKKyAgICAgIHN0YXRpYyBjb25zdCBib29sIHZhbHVl ID0gZmFsc2U7CisgICAgfTsKKworICAgIHRlbXBsYXRlIDwgdHlwZW5hbWUgVCA+CisgICAgc3Ry dWN0IGlzX3NhbWU8VCwgVD4KKyAgICB7CisgICAgICBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9 IHRydWU7CisgICAgfTsKKworICAgIHRlbXBsYXRlIDwgdHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQy ID4KKyAgICBhdXRvCisgICAgYWRkKFQxIGExLCBUMiBhMikgLT4gZGVjbHR5cGUoYTEgKyBhMikK KyAgICB7CisgICAgICByZXR1cm4gYTEgKyBhMjsKKyAgICB9CisKKyAgICBpbnQKKyAgICB0ZXN0 KGNvbnN0IGludCBjLCB2b2xhdGlsZSBpbnQgdikKKyAgICB7CisgICAgICBzdGF0aWNfYXNzZXJ0 KGlzX3NhbWU8aW50LCBkZWNsdHlwZSgwKT46OnZhbHVlID09IHRydWUsICIiKTsKKyAgICAgIHN0 YXRpY19hc3NlcnQoaXNfc2FtZTxpbnQsIGRlY2x0eXBlKGMpPjo6dmFsdWUgPT0gZmFsc2UsICIi KTsKKyAgICAgIHN0YXRpY19hc3NlcnQoaXNfc2FtZTxpbnQsIGRlY2x0eXBlKHYpPjo6dmFsdWUg PT0gZmFsc2UsICIiKTsKKyAgICAgIGF1dG8gYWMgPSBjOworICAgICAgYXV0byBhdiA9IHY7Cisg ICAgICBhdXRvIHN1bWkgPSBhYyArIGF2ICsgJ3gnOworICAgICAgYXV0byBzdW1mID0gYWMgKyBh diArIDEuMDsKKyAgICAgIHN0YXRpY19hc3NlcnQoaXNfc2FtZTxpbnQsIGRlY2x0eXBlKGFjKT46 OnZhbHVlID09IHRydWUsICIiKTsKKyAgICAgIHN0YXRpY19hc3NlcnQoaXNfc2FtZTxpbnQsIGRl Y2x0eXBlKGF2KT46OnZhbHVlID09IHRydWUsICIiKTsKKyAgICAgIHN0YXRpY19hc3NlcnQoaXNf c2FtZTxpbnQsIGRlY2x0eXBlKHN1bWkpPjo6dmFsdWUgPT0gdHJ1ZSwgIiIpOworICAgICAgc3Rh dGljX2Fzc2VydChpc19zYW1lPGludCwgZGVjbHR5cGUoc3VtZik+Ojp2YWx1ZSA9PSBmYWxzZSwg IiIpOworICAgICAgc3RhdGljX2Fzc2VydChpc19zYW1lPGludCwgZGVjbHR5cGUoYWRkKGMsIHYp KT46OnZhbHVlID09IHRydWUsICIiKTsKKyAgICAgIHJldHVybiAoc3VtZiA+IDAuMCkgPyBzdW1p IDogYWRkKGMsIHYpOworICAgIH0KKworICB9CisKKyAgbmFtZXNwYWNlIHRlc3Rfbm9leGNlcHQK KyAgeworCisgICAgaW50IGYoKSB7IHJldHVybiAwOyB9CisgICAgaW50IGcoKSBub2V4Y2VwdCB7 IHJldHVybiAwOyB9CisKKyAgICBzdGF0aWNfYXNzZXJ0KG5vZXhjZXB0KGYoKSkgPT0gZmFsc2Us ICIiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KG5vZXhjZXB0KGcoKSkgPT0gdHJ1ZSwgIiIpOworCisg IH0KKworICBuYW1lc3BhY2UgdGVzdF9jb25zdGV4cHIKKyAgeworCisgICAgdGVtcGxhdGUgPCB0 eXBlbmFtZSBDaGFyVCA+CisgICAgdW5zaWduZWQgbG9uZyBjb25zdGV4cHIKKyAgICBzdHJsZW5f Y19yKGNvbnN0IENoYXJUICpjb25zdCBzLCBjb25zdCB1bnNpZ25lZCBsb25nIGFjYykgbm9leGNl cHQKKyAgICB7CisgICAgICByZXR1cm4gKnMgPyBzdHJsZW5fY19yKHMgKyAxLCBhY2MgKyAxKSA6 IGFjYzsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8IHR5cGVuYW1lIENoYXJUID4KKyAgICB1bnNp Z25lZCBsb25nIGNvbnN0ZXhwcgorICAgIHN0cmxlbl9jKGNvbnN0IENoYXJUICpjb25zdCBzKSBu b2V4Y2VwdAorICAgIHsKKyAgICAgIHJldHVybiBzdHJsZW5fY19yKHMsIDBVTCk7CisgICAgfQor CisgICAgc3RhdGljX2Fzc2VydChzdHJsZW5fYygiIikgPT0gMFVMLCAiIik7CisgICAgc3RhdGlj X2Fzc2VydChzdHJsZW5fYygiMSIpID09IDFVTCwgIiIpOworICAgIHN0YXRpY19hc3NlcnQoc3Ry bGVuX2MoImV4YW1wbGUiKSA9PSA3VUwsICIiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KHN0cmxlbl9j KCJhbm90aGVyXDBleGFtcGxlIikgPT0gN1VMLCAiIik7CisKKyAgfQorCisgIG5hbWVzcGFjZSB0 ZXN0X3J2YWx1ZV9yZWZlcmVuY2VzCisgIHsKKworICAgIHRlbXBsYXRlIDwgaW50IE4gPgorICAg IHN0cnVjdCBhbnN3ZXIKKyAgICB7CisgICAgICBzdGF0aWMgY29uc3RleHByIGludCB2YWx1ZSA9 IE47CisgICAgfTsKKworICAgIGFuc3dlcjwxPiBmKGludCYpICAgICAgIHsgcmV0dXJuIGFuc3dl cjwxPigpOyB9CisgICAgYW5zd2VyPDI+IGYoY29uc3QgaW50JikgeyByZXR1cm4gYW5zd2VyPDI+ KCk7IH0KKyAgICBhbnN3ZXI8Mz4gZihpbnQmJikgICAgICB7IHJldHVybiBhbnN3ZXI8Mz4oKTsg fQorCisgICAgdm9pZAorICAgIHRlc3QoKQorICAgIHsKKyAgICAgIGludCBpID0gMDsKKyAgICAg IGNvbnN0IGludCBjID0gMDsKKyAgICAgIHN0YXRpY19hc3NlcnQoZGVjbHR5cGUoZihpKSk6OnZh bHVlID09IDEsICIiKTsKKyAgICAgIHN0YXRpY19hc3NlcnQoZGVjbHR5cGUoZihjKSk6OnZhbHVl ID09IDIsICIiKTsKKyAgICAgIHN0YXRpY19hc3NlcnQoZGVjbHR5cGUoZigwKSk6OnZhbHVlID09 IDMsICIiKTsKKyAgICB9CisKKyAgfQorCisgIG5hbWVzcGFjZSB0ZXN0X3VuaWZvcm1faW5pdGlh bGl6YXRpb24KKyAgeworCisgICAgc3RydWN0IHRlc3QKKyAgICB7CisgICAgICBzdGF0aWMgY29u c3QgaW50IHplcm8ge307CisgICAgICBzdGF0aWMgY29uc3QgaW50IG9uZSB7MX07CisgICAgfTsK KworICAgIHN0YXRpY19hc3NlcnQodGVzdDo6emVybyA9PSAwLCAiIik7CisgICAgc3RhdGljX2Fz c2VydCh0ZXN0OjpvbmUgPT0gMSwgIiIpOworCisgIH0KKworICBuYW1lc3BhY2UgdGVzdF9sYW1i ZGFzCisgIHsKKworICAgIHZvaWQKKyAgICB0ZXN0MSgpCisgICAgeworICAgICAgYXV0byBsYW1i ZGExID0gW10oKXt9OworICAgICAgYXV0byBsYW1iZGEyID0gbGFtYmRhMTsKKyAgICAgIGxhbWJk YTEoKTsKKyAgICAgIGxhbWJkYTIoKTsKKyAgICB9CisKKyAgICBpbnQKKyAgICB0ZXN0MigpCisg ICAgeworICAgICAgYXV0byBhID0gW10oaW50IGksIGludCBqKXsgcmV0dXJuIGkgKyBqOyB9KDEs IDIpOworICAgICAgYXV0byBiID0gW10oKSAtPiBpbnQgeyByZXR1cm4gJzAnOyB9KCk7CisgICAg ICBhdXRvIGMgPSBbPV0oKXsgcmV0dXJuIGEgKyBiOyB9KCk7CisgICAgICBhdXRvIGQgPSBbJl0o KXsgcmV0dXJuIGM7IH0oKTsKKyAgICAgIGF1dG8gZSA9IFthLCAmYl0oaW50IHgpIG11dGFibGUg eworICAgICAgICBjb25zdCBhdXRvIGlkZW50aXR5ID0gW10oaW50IHkpeyByZXR1cm4geTsgfTsK KyAgICAgICAgZm9yIChhdXRvIGkgPSAwOyBpIDwgYTsgKytpKQorICAgICAgICAgIGEgKz0gYi0t OworICAgICAgICByZXR1cm4geCArIGlkZW50aXR5KGEgKyBiKTsKKyAgICAgIH0oMCk7CisgICAg ICByZXR1cm4gYSArIGIgKyBjICsgZCArIGU7CisgICAgfQorCisgICAgaW50CisgICAgdGVzdDMo KQorICAgIHsKKyAgICAgIGNvbnN0IGF1dG8gbnVsbGFyeSA9IFtdKCl7IHJldHVybiAwOyB9Owor ICAgICAgY29uc3QgYXV0byB1bmFyeSA9IFtdKGludCB4KXsgcmV0dXJuIHg7IH07CisgICAgICB1 c2luZyBudWxsYXJ5X3QgPSBkZWNsdHlwZShudWxsYXJ5KTsKKyAgICAgIHVzaW5nIHVuYXJ5X3Qg PSBkZWNsdHlwZSh1bmFyeSk7CisgICAgICBjb25zdCBhdXRvIGhpZ2hlcjFzdCA9IFtdKG51bGxh cnlfdCBmKXsgcmV0dXJuIGYoKTsgfTsKKyAgICAgIGNvbnN0IGF1dG8gaGlnaGVyMm5kID0gW3Vu YXJ5XShudWxsYXJ5X3QgZjEpeworICAgICAgICByZXR1cm4gW3VuYXJ5LCBmMV0odW5hcnlfdCBm Mil7IHJldHVybiBmMih1bmFyeShmMSgpKSk7IH07CisgICAgICB9OworICAgICAgcmV0dXJuIGhp Z2hlcjFzdChudWxsYXJ5KSArIGhpZ2hlcjJuZChudWxsYXJ5KSh1bmFyeSk7CisgICAgfQorCisg IH0KKworICBuYW1lc3BhY2UgdGVzdF92YXJpYWRpY190ZW1wbGF0ZXMKKyAgeworCisgICAgdGVt cGxhdGUgPGludC4uLj4KKyAgICBzdHJ1Y3Qgc3VtOworCisgICAgdGVtcGxhdGUgPGludCBOMCwg aW50Li4uIE4xdG9OPgorICAgIHN0cnVjdCBzdW08TjAsIE4xdG9OLi4uPgorICAgIHsKKyAgICAg IHN0YXRpYyBjb25zdGV4cHIgYXV0byB2YWx1ZSA9IE4wICsgc3VtPE4xdG9OLi4uPjo6dmFsdWU7 CisgICAgfTsKKworICAgIHRlbXBsYXRlIDw+CisgICAgc3RydWN0IHN1bTw+CisgICAgeworICAg ICAgc3RhdGljIGNvbnN0ZXhwciBhdXRvIHZhbHVlID0gMDsKKyAgICB9OworCisgICAgc3RhdGlj X2Fzc2VydChzdW08Pjo6dmFsdWUgPT0gMCwgIiIpOworICAgIHN0YXRpY19hc3NlcnQoc3VtPDE+ Ojp2YWx1ZSA9PSAxLCAiIik7CisgICAgc3RhdGljX2Fzc2VydChzdW08MjM+Ojp2YWx1ZSA9PSAy MywgIiIpOworICAgIHN0YXRpY19hc3NlcnQoc3VtPDEsIDI+Ojp2YWx1ZSA9PSAzLCAiIik7Cisg ICAgc3RhdGljX2Fzc2VydChzdW08NSwgNSwgMTE+Ojp2YWx1ZSA9PSAyMSwgIiIpOworICAgIHN0 YXRpY19hc3NlcnQoc3VtPDIsIDMsIDUsIDcsIDExLCAxMz46OnZhbHVlID09IDQxLCAiIik7CisK KyAgfQorCisgIC8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTM3MjgxODQv dGVtcGxhdGUtYWxpYXNlcy1hbmQtc2ZpbmFlCisgIC8vIENsYW5nIDMuMSBmYWlscyB3aXRoIGhl YWRlcnMgb2YgbGlic3RkKysgNC44LjMgd2hlbiB1c2luZyBzdGQ6OmZ1bmN0aW9uCisgIC8vIGJl Y2F1c2Ugb2YgdGhpcy4KKyAgbmFtZXNwYWNlIHRlc3RfdGVtcGxhdGVfYWxpYXNfc2ZpbmFlCisg IHsKKworICAgIHN0cnVjdCBmb28ge307CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAg IHVzaW5nIG1lbWJlciA9IHR5cGVuYW1lIFQ6Om1lbWJlcl90eXBlOworCisgICAgdGVtcGxhdGU8 dHlwZW5hbWUgVD4KKyAgICB2b2lkIGZ1bmMoLi4uKSB7fQorCisgICAgdGVtcGxhdGU8dHlwZW5h bWUgVD4KKyAgICB2b2lkIGZ1bmMobWVtYmVyPFQ+Kikge30KKworICAgIHZvaWQgdGVzdCgpOwor CisgICAgdm9pZCB0ZXN0KCkgeyBmdW5jPGZvbz4oMCk7IH0KKworICB9CisKK30gIC8vIG5hbWVz cGFjZSBjeHgxMQorCisjZW5kaWYgIC8vIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKworXV0pCisK KworZG5sICBUZXN0cyBmb3IgbmV3IGZlYXR1cmVzIGluIEMrKzE0CisKK200X2RlZmluZShbX0FY X0NYWF9DT01QSUxFX1NURENYWF90ZXN0Ym9keV9uZXdfaW5fMTRdLCBbWworCisvLyBJZiB0aGUg Y29tcGlsZXIgYWRtaXRzIHRoYXQgaXQgaXMgbm90IHJlYWR5IGZvciBDKysxNCwgd2h5IHRvcnR1 cmUgaXQ/CisvLyBIb3BlZnVsbHksIHRoaXMgd2lsbCBzcGVlZCB1cCB0aGUgdGVzdC4KKworI2lm bmRlZiBfX2NwbHVzcGx1cworCisjZXJyb3IgIlRoaXMgaXMgbm90IGEgQysrIGNvbXBpbGVyIgor CisjZWxpZiBfX2NwbHVzcGx1cyA8IDIwMTQwMkwKKworI2Vycm9yICJUaGlzIGlzIG5vdCBhIEMr KzE0IGNvbXBpbGVyIgorCisjZWxzZQorCituYW1lc3BhY2UgY3h4MTQKK3sKKworICBuYW1lc3Bh Y2UgdGVzdF9wb2x5bW9ycGhpY19sYW1iZGFzCisgIHsKKworICAgIGludAorICAgIHRlc3QoKQor ICAgIHsKKyAgICAgIGNvbnN0IGF1dG8gbGFtYmRhID0gW10oYXV0byYmLi4uIGFyZ3MpeworICAg ICAgICBjb25zdCBhdXRvIGlzdGlueSA9IFtdKGF1dG8geCl7CisgICAgICAgICAgcmV0dXJuIChz aXplb2YoeCkgPT0gMVVMKSA/IDEgOiAwOworICAgICAgICB9OworICAgICAgICBjb25zdCBpbnQg YXJldGlueVtdID0geyBpc3RpbnkoYXJncykuLi4gfTsKKyAgICAgICAgcmV0dXJuIGFyZXRpbnlb MF07CisgICAgICB9OworICAgICAgcmV0dXJuIGxhbWJkYSgxLCAxTCwgMS4wZiwgJzEnKTsKKyAg ICB9CisKKyAgfQorCisgIG5hbWVzcGFjZSB0ZXN0X2JpbmFyeV9saXRlcmFscworICB7CisKKyAg ICBjb25zdGV4cHIgYXV0byBpdmlpID0gMGIwMDAwMDAwMDAwMTAxMDEwOworICAgIHN0YXRpY19h c3NlcnQoaXZpaSA9PSA0MiwgIndyb25nIHZhbHVlIik7CisKKyAgfQorCisgIG5hbWVzcGFjZSB0 ZXN0X2dlbmVyYWxpemVkX2NvbnN0ZXhwcgorICB7CisKKyAgICB0ZW1wbGF0ZSA8IHR5cGVuYW1l IENoYXJUID4KKyAgICBjb25zdGV4cHIgdW5zaWduZWQgbG9uZworICAgIHN0cmxlbl9jKGNvbnN0 IENoYXJUICpjb25zdCBzKSBub2V4Y2VwdAorICAgIHsKKyAgICAgIGF1dG8gbGVuZ3RoID0gMFVM OworICAgICAgZm9yIChhdXRvIHAgPSBzOyAqcDsgKytwKQorICAgICAgICArK2xlbmd0aDsKKyAg ICAgIHJldHVybiBsZW5ndGg7CisgICAgfQorCisgICAgc3RhdGljX2Fzc2VydChzdHJsZW5fYygi IikgPT0gMFVMLCAiIik7CisgICAgc3RhdGljX2Fzc2VydChzdHJsZW5fYygieCIpID09IDFVTCwg IiIpOworICAgIHN0YXRpY19hc3NlcnQoc3RybGVuX2MoInRlc3QiKSA9PSA0VUwsICIiKTsKKyAg ICBzdGF0aWNfYXNzZXJ0KHN0cmxlbl9jKCJhbm90aGVyXDB0ZXN0IikgPT0gN1VMLCAiIik7CisK KyAgfQorCisgIG5hbWVzcGFjZSB0ZXN0X2xhbWJkYV9pbml0X2NhcHR1cmUKKyAgeworCisgICAg aW50CisgICAgdGVzdCgpCisgICAgeworICAgICAgYXV0byB4ID0gMDsKKyAgICAgIGNvbnN0IGF1 dG8gbGFtYmRhMSA9IFthID0geF0oaW50IGIpeyByZXR1cm4gYSArIGI7IH07CisgICAgICBjb25z dCBhdXRvIGxhbWJkYTIgPSBbYSA9IGxhbWJkYTEoeCldKCl7IHJldHVybiBhOyB9OworICAgICAg cmV0dXJuIGxhbWJkYTIoKTsKKyAgICB9CisKKyAgfQorCisgIG5hbWVzcGFjZSB0ZXN0X2RpZ2l0 X3NlcGFyYXRvcnMKKyAgeworCisgICAgY29uc3RleHByIGF1dG8gdGVuX21pbGxpb24gPSAxMDAn MDAwJzAwMDsKKyAgICBzdGF0aWNfYXNzZXJ0KHRlbl9taWxsaW9uID09IDEwMDAwMDAwMCwgIiIp OworCisgIH0KKworICBuYW1lc3BhY2UgdGVzdF9yZXR1cm5fdHlwZV9kZWR1Y3Rpb24KKyAgewor CisgICAgYXV0byBmKGludCYgeCkgeyByZXR1cm4geDsgfQorICAgIGRlY2x0eXBlKGF1dG8pIGco aW50JiB4KSB7IHJldHVybiB4OyB9CisKKyAgICB0ZW1wbGF0ZSA8IHR5cGVuYW1lIFQxLCB0eXBl bmFtZSBUMiA+CisgICAgc3RydWN0IGlzX3NhbWUKKyAgICB7CisgICAgICBzdGF0aWMgY29uc3Rl eHByIGF1dG8gdmFsdWUgPSBmYWxzZTsKKyAgICB9OworCisgICAgdGVtcGxhdGUgPCB0eXBlbmFt ZSBUID4KKyAgICBzdHJ1Y3QgaXNfc2FtZTxULCBUPgorICAgIHsKKyAgICAgIHN0YXRpYyBjb25z dGV4cHIgYXV0byB2YWx1ZSA9IHRydWU7CisgICAgfTsKKworICAgIGludAorICAgIHRlc3QoKQor ICAgIHsKKyAgICAgIGF1dG8geCA9IDA7CisgICAgICBzdGF0aWNfYXNzZXJ0KGlzX3NhbWU8aW50 LCBkZWNsdHlwZShmKHgpKT46OnZhbHVlLCAiIik7CisgICAgICBzdGF0aWNfYXNzZXJ0KGlzX3Nh bWU8aW50JiwgZGVjbHR5cGUoZyh4KSk+Ojp2YWx1ZSwgIiIpOworICAgICAgcmV0dXJuIHg7Cisg ICAgfQorCisgIH0KKworfSAgLy8gbmFtZXNwYWNlIGN4eDE0CisKKyNlbmRpZiAgLy8gX19jcGx1 c3BsdXMgPj0gMjAxNDAyTAorCitdXSkKKworCitkbmwgIFRlc3RzIGZvciBuZXcgZmVhdHVyZXMg aW4gQysrMTcKKworbTRfZGVmaW5lKFtfQVhfQ1hYX0NPTVBJTEVfU1REQ1hYX3Rlc3Rib2R5X25l d19pbl8xN10sIFtbCisKKy8vIElmIHRoZSBjb21waWxlciBhZG1pdHMgdGhhdCBpdCBpcyBub3Qg cmVhZHkgZm9yIEMrKzE3LCB3aHkgdG9ydHVyZSBpdD8KKy8vIEhvcGVmdWxseSwgdGhpcyB3aWxs IHNwZWVkIHVwIHRoZSB0ZXN0LgorCisjaWZuZGVmIF9fY3BsdXNwbHVzCisKKyNlcnJvciAiVGhp cyBpcyBub3QgYSBDKysgY29tcGlsZXIiCisKKyNlbGlmIF9fY3BsdXNwbHVzIDwgMjAxNzAzTAor CisjZXJyb3IgIlRoaXMgaXMgbm90IGEgQysrMTcgY29tcGlsZXIiCisKKyNlbHNlCisKKyNpbmNs dWRlIDxpbml0aWFsaXplcl9saXN0PgorI2luY2x1ZGUgPHV0aWxpdHk+CisjaW5jbHVkZSA8dHlw ZV90cmFpdHM+CisKK25hbWVzcGFjZSBjeHgxNworeworCisgIG5hbWVzcGFjZSB0ZXN0X2NvbnN0 ZXhwcl9sYW1iZGFzCisgIHsKKworICAgIGNvbnN0ZXhwciBpbnQgZm9vID0gW10oKXtyZXR1cm4g NDI7fSgpOworCisgIH0KKworICBuYW1lc3BhY2UgdGVzdDo6bmVzdGVkX25hbWVzcGFjZTo6ZGVm aW5pdGlvbnMKKyAgeworCisgIH0KKworICBuYW1lc3BhY2UgdGVzdF9mb2xkX2V4cHJlc3Npb24K KyAgeworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJncz4KKyAgICBpbnQgbXVsdGlwbHko QXJncy4uLiBhcmdzKQorICAgIHsKKyAgICAgIHJldHVybiAoYXJncyAqIC4uLiAqIDEpOworICAg IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgYm9vbCBhbGwoQXJncy4u LiBhcmdzKQorICAgIHsKKyAgICAgIHJldHVybiAoYXJncyAmJiAuLi4pOworICAgIH0KKworICB9 CisKKyAgbmFtZXNwYWNlIHRlc3RfZXh0ZW5kZWRfc3RhdGljX2Fzc2VydAorICB7CisKKyAgICBz dGF0aWNfYXNzZXJ0ICh0cnVlKTsKKworICB9CisKKyAgbmFtZXNwYWNlIHRlc3RfYXV0b19icmFj ZV9pbml0X2xpc3QKKyAgeworCisgICAgYXV0byBmb28gPSB7NX07CisgICAgYXV0byBiYXIgezV9 OworCisgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8c3RkOjppbml0aWFsaXplcl9saXN0 PGludD4sIGRlY2x0eXBlKGZvbyk+Ojp2YWx1ZSk7CisgICAgc3RhdGljX2Fzc2VydChzdGQ6Omlz X3NhbWU8aW50LCBkZWNsdHlwZShiYXIpPjo6dmFsdWUpOworICB9CisKKyAgbmFtZXNwYWNlIHRl c3RfdHlwZW5hbWVfaW5fdGVtcGxhdGVfdGVtcGxhdGVfcGFyYW1ldGVyCisgIHsKKworICAgIHRl bXBsYXRlPHRlbXBsYXRlPHR5cGVuYW1lPiB0eXBlbmFtZSBYPiBzdHJ1Y3QgRDsKKworICB9CisK KyAgbmFtZXNwYWNlIHRlc3RfZmFsbHRocm91Z2hfbm9kaXNjYXJkX21heWJlX3VudXNlZF9hdHRy aWJ1dGVzCisgIHsKKworICAgIGludCBmMSgpCisgICAgeworICAgICAgcmV0dXJuIDQyOworICAg IH0KKworICAgIFtbbm9kaXNjYXJkXV0gaW50IGYyKCkKKyAgICB7CisgICAgICBbW21heWJlX3Vu dXNlZF1dIGF1dG8gdW51c2VkID0gZjEoKTsKKworICAgICAgc3dpdGNoIChmMSgpKQorICAgICAg eworICAgICAgY2FzZSAxNzoKKyAgICAgICAgZjEoKTsKKyAgICAgICAgW1tmYWxsdGhyb3VnaF1d OworICAgICAgY2FzZSA0MjoKKyAgICAgICAgZjEoKTsKKyAgICAgIH0KKyAgICAgIHJldHVybiBm MSgpOworICAgIH0KKworICB9CisKKyAgbmFtZXNwYWNlIHRlc3RfZXh0ZW5kZWRfYWdncmVnYXRl X2luaXRpYWxpemF0aW9uCisgIHsKKworICAgIHN0cnVjdCBiYXNlMQorICAgIHsKKyAgICAgIGlu dCBiMSwgYjIgPSA0MjsKKyAgICB9OworCisgICAgc3RydWN0IGJhc2UyCisgICAgeworICAgICAg YmFzZTIoKSB7CisgICAgICAgIGIzID0gNDI7CisgICAgICB9CisgICAgICBpbnQgYjM7CisgICAg fTsKKworICAgIHN0cnVjdCBkZXJpdmVkIDogYmFzZTEsIGJhc2UyCisgICAgeworICAgICAgICBp bnQgZDsKKyAgICB9OworCisgICAgZGVyaXZlZCBkMSB7ezEsIDJ9LCB7fSwgNH07ICAvLyBmdWxs IGluaXRpYWxpemF0aW9uCisgICAgZGVyaXZlZCBkMiB7e30sIHt9LCA0fTsgICAgICAvLyB2YWx1 ZS1pbml0aWFsaXplZCBiYXNlcworCisgIH0KKworICBuYW1lc3BhY2UgdGVzdF9nZW5lcmFsX3Jh bmdlX2Jhc2VkX2Zvcl9sb29wCisgIHsKKworICAgIHN0cnVjdCBpdGVyCisgICAgeworICAgICAg aW50IGk7CisKKyAgICAgIGludCYgb3BlcmF0b3IqICgpCisgICAgICB7CisgICAgICAgIHJldHVy biBpOworICAgICAgfQorCisgICAgICBjb25zdCBpbnQmIG9wZXJhdG9yKiAoKSBjb25zdAorICAg ICAgeworICAgICAgICByZXR1cm4gaTsKKyAgICAgIH0KKworICAgICAgaXRlciYgb3BlcmF0b3Ir KygpCisgICAgICB7CisgICAgICAgICsraTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAg fQorICAgIH07CisKKyAgICBzdHJ1Y3Qgc2VudGluZWwKKyAgICB7CisgICAgICBpbnQgaTsKKyAg ICB9OworCisgICAgYm9vbCBvcGVyYXRvcj09IChjb25zdCBpdGVyJiBpLCBjb25zdCBzZW50aW5l bCYgcykKKyAgICB7CisgICAgICByZXR1cm4gaS5pID09IHMuaTsKKyAgICB9CisKKyAgICBib29s IG9wZXJhdG9yIT0gKGNvbnN0IGl0ZXImIGksIGNvbnN0IHNlbnRpbmVsJiBzKQorICAgIHsKKyAg ICAgIHJldHVybiAhKGkgPT0gcyk7CisgICAgfQorCisgICAgc3RydWN0IHJhbmdlCisgICAgewor ICAgICAgaXRlciBiZWdpbigpIGNvbnN0CisgICAgICB7CisgICAgICAgIHJldHVybiB7MH07Cisg ICAgICB9CisKKyAgICAgIHNlbnRpbmVsIGVuZCgpIGNvbnN0CisgICAgICB7CisgICAgICAgIHJl dHVybiB7NX07CisgICAgICB9CisgICAgfTsKKworICAgIHZvaWQgZigpCisgICAgeworICAgICAg cmFuZ2UgciB7fTsKKworICAgICAgZm9yIChhdXRvIGkgOiByKQorICAgICAgeworICAgICAgICBb W21heWJlX3VudXNlZF1dIGF1dG8gdiA9IGk7CisgICAgICB9CisgICAgfQorCisgIH0KKworICBu YW1lc3BhY2UgdGVzdF9sYW1iZGFfY2FwdHVyZV9hc3Rlcmlza190aGlzX2J5X3ZhbHVlCisgIHsK KworICAgIHN0cnVjdCB0CisgICAgeworICAgICAgaW50IGk7CisgICAgICBpbnQgZm9vKCkKKyAg ICAgIHsKKyAgICAgICAgcmV0dXJuIFsqdGhpc10oKQorICAgICAgICB7CisgICAgICAgICAgcmV0 dXJuIGk7CisgICAgICAgIH0oKTsKKyAgICAgIH0KKyAgICB9OworCisgIH0KKworICBuYW1lc3Bh Y2UgdGVzdF9lbnVtX2NsYXNzX2NvbnN0cnVjdGlvbgorICB7CisKKyAgICBlbnVtIGNsYXNzIGJ5 dGUgOiB1bnNpZ25lZCBjaGFyCisgICAge307CisKKyAgICBieXRlIGZvbyB7NDJ9OworCisgIH0K KworICBuYW1lc3BhY2UgdGVzdF9jb25zdGV4cHJfaWYKKyAgeworCisgICAgdGVtcGxhdGUgPGJv b2wgY29uZD4KKyAgICBpbnQgZiAoKQorICAgIHsKKyAgICAgIGlmIGNvbnN0ZXhwcihjb25kKQor ICAgICAgeworICAgICAgICByZXR1cm4gMTM7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7 CisgICAgICAgIHJldHVybiA0MjsKKyAgICAgIH0KKyAgICB9CisKKyAgfQorCisgIG5hbWVzcGFj ZSB0ZXN0X3NlbGVjdGlvbl9zdGF0ZW1lbnRfd2l0aF9pbml0aWFsaXplcgorICB7CisKKyAgICBp bnQgZigpCisgICAgeworICAgICAgcmV0dXJuIDEzOworICAgIH0KKworICAgIGludCBmMigpCisg ICAgeworICAgICAgaWYgKGF1dG8gaSA9IGYoKTsgaSA+IDApCisgICAgICB7CisgICAgICAgIHJl dHVybiAzOworICAgICAgfQorCisgICAgICBzd2l0Y2ggKGF1dG8gaSA9IGYoKTsgaSArIDQpCisg ICAgICB7CisgICAgICBjYXNlIDE3OgorICAgICAgICByZXR1cm4gMjsKKworICAgICAgZGVmYXVs dDoKKyAgICAgICAgcmV0dXJuIDE7CisgICAgICB9CisgICAgfQorCisgIH0KKworICBuYW1lc3Bh Y2UgdGVzdF90ZW1wbGF0ZV9hcmd1bWVudF9kZWR1Y3Rpb25fZm9yX2NsYXNzX3RlbXBsYXRlcwor ICB7CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyPgorICAgIHN0cnVj dCBwYWlyCisgICAgeworICAgICAgcGFpciAoVDEgcDEsIFQyIHAyKQorICAgICAgICA6IG0xIHtw MX0sCisgICAgICAgICAgbTIge3AyfQorICAgICAge30KKworICAgICAgVDEgbTE7CisgICAgICBU MiBtMjsKKyAgICB9OworCisgICAgdm9pZCBmKCkKKyAgICB7CisgICAgICBbW21heWJlX3VudXNl ZF1dIGF1dG8gcCA9IHBhaXJ7MTMsIDQydX07CisgICAgfQorCisgIH0KKworICBuYW1lc3BhY2Ug dGVzdF9ub25fdHlwZV9hdXRvX3RlbXBsYXRlX3BhcmFtZXRlcnMKKyAgeworCisgICAgdGVtcGxh dGUgPGF1dG8gbj4KKyAgICBzdHJ1Y3QgQgorICAgIHt9OworCisgICAgQjw1PiBiMTsKKyAgICBC PCdhJz4gYjI7CisKKyAgfQorCisgIG5hbWVzcGFjZSB0ZXN0X3N0cnVjdHVyZWRfYmluZGluZ3MK KyAgeworCisgICAgaW50IGFyclsyXSA9IHsgMSwgMiB9OworICAgIHN0ZDo6cGFpcjxpbnQsIGlu dD4gcHIgPSB7IDEsIDIgfTsKKworICAgIGF1dG8gZjEoKSAtPiBpbnQoJilbMl0KKyAgICB7Cisg ICAgICByZXR1cm4gYXJyOworICAgIH0KKworICAgIGF1dG8gZjIoKSAtPiBzdGQ6OnBhaXI8aW50 LCBpbnQ+JgorICAgIHsKKyAgICAgIHJldHVybiBwcjsKKyAgICB9CisKKyAgICBzdHJ1Y3QgUwor ICAgIHsKKyAgICAgIGludCB4MSA6IDI7CisgICAgICB2b2xhdGlsZSBkb3VibGUgeTE7CisgICAg fTsKKworICAgIFMgZjMoKQorICAgIHsKKyAgICAgIHJldHVybiB7fTsKKyAgICB9CisKKyAgICBh dXRvIFsgeDEsIHkxIF0gPSBmMSgpOworICAgIGF1dG8mIFsgeHIxLCB5cjEgXSA9IGYxKCk7Cisg ICAgYXV0byBbIHgyLCB5MiBdID0gZjIoKTsKKyAgICBhdXRvJiBbIHhyMiwgeXIyIF0gPSBmMigp OworICAgIGNvbnN0IGF1dG8gWyB4MywgeTMgXSA9IGYzKCk7CisKKyAgfQorCisgIG5hbWVzcGFj ZSB0ZXN0X2V4Y2VwdGlvbl9zcGVjX3R5cGVfc3lzdGVtCisgIHsKKworICAgIHN0cnVjdCBHb29k IHt9OworICAgIHN0cnVjdCBCYWQge307CisKKyAgICB2b2lkIGcxKCkgbm9leGNlcHQ7CisgICAg dm9pZCBnMigpOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBCYWQKKyAgICBmKFQq LCBUKik7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDI+CisgICAgR29v ZAorICAgIGYoVDEqLCBUMiopOworCisgICAgc3RhdGljX2Fzc2VydCAoc3RkOjppc19zYW1lX3Y8 R29vZCwgZGVjbHR5cGUoZihnMSwgZzIpKT4pOworCisgIH0KKworICBuYW1lc3BhY2UgdGVzdF9p bmxpbmVfdmFyaWFibGVzCisgIHsKKworICAgIHRlbXBsYXRlPGNsYXNzIFQ+IHZvaWQgZihUKQor ICAgIHt9CisKKyAgICB0ZW1wbGF0ZTxjbGFzcyBUPiBpbmxpbmUgVCBnKFQpCisgICAgeworICAg ICAgcmV0dXJuIFR7fTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTw+IGlubGluZSB2b2lkIGY8Pihp bnQpCisgICAge30KKworICAgIHRlbXBsYXRlPD4gaW50IGc8PihpbnQpCisgICAgeworICAgICAg cmV0dXJuIDU7CisgICAgfQorCisgIH0KKworfSAgLy8gbmFtZXNwYWNlIGN4eDE3CisKKyNlbmRp ZiAgLy8gX19jcGx1c3BsdXMgPCAyMDE3MDNMCisKK11dKQoKZGlmZiAtLWdpdCBhLzM4OS1kcy1i YXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL21zdmMvUmVhZE1lLnR4dCBiLzM4OS1kcy1i YXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL21zdmMvUmVhZE1lLnR4dApuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzNhN2Q0Ci0tLSAvZGV2L251bGwKKysrIGIvMzg5 LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvbXN2Yy9SZWFkTWUudHh0CkBAIC0w LDAgKzEsMjMgQEAKKworSG93IHRvIGJ1aWxkIGplbWFsbG9jIGZvciBXaW5kb3dzCis9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworMS4gSW5zdGFsbCBDeWd3aW4gd2l0aCBhdCBs ZWFzdCB0aGUgZm9sbG93aW5nIHBhY2thZ2VzOgorICAgKiBhdXRvY29uZgorICAgKiBhdXRvZ2Vu CisgICAqIGdhd2sKKyAgICogZ3JlcAorICAgKiBzZWQKKworMi4gSW5zdGFsbCBWaXN1YWwgU3R1 ZGlvIDIwMTUgb3IgMjAxNyB3aXRoIFZpc3VhbCBDKysKKworMy4gQWRkIEN5Z3dpblxiaW4gdG8g dGhlIFBBVEggZW52aXJvbm1lbnQgdmFyaWFibGUKKworNC4gT3BlbiAieDY0IE5hdGl2ZSBUb29s cyBDb21tYW5kIFByb21wdCBmb3IgVlMgMjAxNyIKKyAgIChub3RlOiB4ODYveDY0IGRvZXNuJ3Qg bWF0dGVyIGF0IHRoaXMgcG9pbnQpCisKKzUuIEdlbmVyYXRlIGhlYWRlciBmaWxlczoKKyAgIHNo IC1jICJDQz1jbCAuL2F1dG9nZW4uc2giCisKKzYuIE5vdyB0aGUgcHJvamVjdCBjYW4gYmUgb3Bl bmVkIGFuZCBidWlsdCBpbiBWaXN1YWwgU3R1ZGlvOgorICAgbXN2Y1xqZW1hbGxvY192YzIwMTcu c2xuCgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAv bXN2Yy9qZW1hbGxvY192YzIwMTUuc2xuIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxs b2MtNS4zLjAvbXN2Yy9qZW1hbGxvY192YzIwMTUuc2xuCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAuLmFlZGQ1ZTUKLS0tIC9kZXYvbnVsbAorKysgYi8zODktZHMtYmFzZS0zLjMu MC1idWlsZC9qZW1hbGxvYy01LjMuMC9tc3ZjL2plbWFsbG9jX3ZjMjAxNS5zbG4KQEAgLTAsMCAr MSw2MyBAQAor77u/CitNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyBTb2x1dGlvbiBGaWxlLCBGb3Jt YXQgVmVyc2lvbiAxMi4wMAorIyBWaXN1YWwgU3R1ZGlvIDE0CitWaXN1YWxTdHVkaW9WZXJzaW9u ID0gMTQuMC4yNDcyMC4wCitNaW5pbXVtVmlzdWFsU3R1ZGlvVmVyc2lvbiA9IDEwLjAuNDAyMTku MQorUHJvamVjdCgiezIxNTBFMzMzLThGREMtNDJBMy05NDc0LTFBMzk1NkQ0NkRFOH0iKSA9ICJT b2x1dGlvbiBJdGVtcyIsICJTb2x1dGlvbiBJdGVtcyIsICJ7NzBBOTkwMDYtNkRFOS00NzJCLThG ODMtNENFRTZDNjE2REYzfSIKKwlQcm9qZWN0U2VjdGlvbihTb2x1dGlvbkl0ZW1zKSA9IHByZVBy b2plY3QKKwkJUmVhZE1lLnR4dCA9IFJlYWRNZS50eHQKKwlFbmRQcm9qZWN0U2VjdGlvbgorRW5k UHJvamVjdAorUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0i KSA9ICJqZW1hbGxvYyIsICJwcm9qZWN0c1x2YzIwMTVcamVtYWxsb2NcamVtYWxsb2MudmN4cHJv aiIsICJ7OEQ2QkIyOTItOUUxQy00MTNELTlGOTgtNDg2NEJEQzE1MTRBfSIKK0VuZFByb2plY3QK K1Byb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAidGVz dF90aHJlYWRzIiwgInByb2plY3RzXHZjMjAxNVx0ZXN0X3RocmVhZHNcdGVzdF90aHJlYWRzLnZj eHByb2oiLCAiezA5MDI4Q0ZELTRFQjctNDkxRC04NjlDLTA3MDhEQjk3RUQ0NH0iCitFbmRQcm9q ZWN0CitHbG9iYWwKKwlHbG9iYWxTZWN0aW9uKFNvbHV0aW9uQ29uZmlndXJhdGlvblBsYXRmb3Jt cykgPSBwcmVTb2x1dGlvbgorCQlEZWJ1Z3x4NjQgPSBEZWJ1Z3x4NjQKKwkJRGVidWd8eDg2ID0g RGVidWd8eDg2CisJCURlYnVnLXN0YXRpY3x4NjQgPSBEZWJ1Zy1zdGF0aWN8eDY0CisJCURlYnVn LXN0YXRpY3x4ODYgPSBEZWJ1Zy1zdGF0aWN8eDg2CisJCVJlbGVhc2V8eDY0ID0gUmVsZWFzZXx4 NjQKKwkJUmVsZWFzZXx4ODYgPSBSZWxlYXNlfHg4NgorCQlSZWxlYXNlLXN0YXRpY3x4NjQgPSBS ZWxlYXNlLXN0YXRpY3x4NjQKKwkJUmVsZWFzZS1zdGF0aWN8eDg2ID0gUmVsZWFzZS1zdGF0aWN8 eDg2CisJRW5kR2xvYmFsU2VjdGlvbgorCUdsb2JhbFNlY3Rpb24oUHJvamVjdENvbmZpZ3VyYXRp b25QbGF0Zm9ybXMpID0gcG9zdFNvbHV0aW9uCisJCXs4RDZCQjI5Mi05RTFDLTQxM0QtOUY5OC00 ODY0QkRDMTUxNEF9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQKKwkJezhENkJCMjky LTlFMUMtNDEzRC05Rjk4LTQ4NjRCREMxNTE0QX0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4 NjQKKwkJezhENkJCMjkyLTlFMUMtNDEzRC05Rjk4LTQ4NjRCREMxNTE0QX0uRGVidWd8eDg2LkFj dGl2ZUNmZyA9IERlYnVnfFdpbjMyCisJCXs4RDZCQjI5Mi05RTFDLTQxM0QtOUY5OC00ODY0QkRD MTUxNEF9LkRlYnVnfHg4Ni5CdWlsZC4wID0gRGVidWd8V2luMzIKKwkJezhENkJCMjkyLTlFMUMt NDEzRC05Rjk4LTQ4NjRCREMxNTE0QX0uRGVidWctc3RhdGljfHg2NC5BY3RpdmVDZmcgPSBEZWJ1 Zy1zdGF0aWN8eDY0CisJCXs4RDZCQjI5Mi05RTFDLTQxM0QtOUY5OC00ODY0QkRDMTUxNEF9LkRl YnVnLXN0YXRpY3x4NjQuQnVpbGQuMCA9IERlYnVnLXN0YXRpY3x4NjQKKwkJezhENkJCMjkyLTlF MUMtNDEzRC05Rjk4LTQ4NjRCREMxNTE0QX0uRGVidWctc3RhdGljfHg4Ni5BY3RpdmVDZmcgPSBE ZWJ1Zy1zdGF0aWN8V2luMzIKKwkJezhENkJCMjkyLTlFMUMtNDEzRC05Rjk4LTQ4NjRCREMxNTE0 QX0uRGVidWctc3RhdGljfHg4Ni5CdWlsZC4wID0gRGVidWctc3RhdGljfFdpbjMyCisJCXs4RDZC QjI5Mi05RTFDLTQxM0QtOUY5OC00ODY0QkRDMTUxNEF9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9 IFJlbGVhc2V8eDY0CisJCXs4RDZCQjI5Mi05RTFDLTQxM0QtOUY5OC00ODY0QkRDMTUxNEF9LlJl bGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NAorCQl7OEQ2QkIyOTItOUUxQy00MTNELTlG OTgtNDg2NEJEQzE1MTRBfS5SZWxlYXNlfHg4Ni5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyCisJ CXs4RDZCQjI5Mi05RTFDLTQxM0QtOUY5OC00ODY0QkRDMTUxNEF9LlJlbGVhc2V8eDg2LkJ1aWxk LjAgPSBSZWxlYXNlfFdpbjMyCisJCXs4RDZCQjI5Mi05RTFDLTQxM0QtOUY5OC00ODY0QkRDMTUx NEF9LlJlbGVhc2Utc3RhdGljfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlLXN0YXRpY3x4NjQKKwkJ ezhENkJCMjkyLTlFMUMtNDEzRC05Rjk4LTQ4NjRCREMxNTE0QX0uUmVsZWFzZS1zdGF0aWN8eDY0 LkJ1aWxkLjAgPSBSZWxlYXNlLXN0YXRpY3x4NjQKKwkJezhENkJCMjkyLTlFMUMtNDEzRC05Rjk4 LTQ4NjRCREMxNTE0QX0uUmVsZWFzZS1zdGF0aWN8eDg2LkFjdGl2ZUNmZyA9IFJlbGVhc2Utc3Rh dGljfFdpbjMyCisJCXs4RDZCQjI5Mi05RTFDLTQxM0QtOUY5OC00ODY0QkRDMTUxNEF9LlJlbGVh c2Utc3RhdGljfHg4Ni5CdWlsZC4wID0gUmVsZWFzZS1zdGF0aWN8V2luMzIKKwkJezA5MDI4Q0ZE LTRFQjctNDkxRC04NjlDLTA3MDhEQjk3RUQ0NH0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVn fHg2NAorCQl7MDkwMjhDRkQtNEVCNy00OTFELTg2OUMtMDcwOERCOTdFRDQ0fS5EZWJ1Z3x4NjQu QnVpbGQuMCA9IERlYnVnfHg2NAorCQl7MDkwMjhDRkQtNEVCNy00OTFELTg2OUMtMDcwOERCOTdF RDQ0fS5EZWJ1Z3x4ODYuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzIKKwkJezA5MDI4Q0ZELTRFQjct NDkxRC04NjlDLTA3MDhEQjk3RUQ0NH0uRGVidWd8eDg2LkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMgor CQl7MDkwMjhDRkQtNEVCNy00OTFELTg2OUMtMDcwOERCOTdFRDQ0fS5EZWJ1Zy1zdGF0aWN8eDY0 LkFjdGl2ZUNmZyA9IERlYnVnLXN0YXRpY3x4NjQKKwkJezA5MDI4Q0ZELTRFQjctNDkxRC04NjlD LTA3MDhEQjk3RUQ0NH0uRGVidWctc3RhdGljfHg2NC5CdWlsZC4wID0gRGVidWctc3RhdGljfHg2 NAorCQl7MDkwMjhDRkQtNEVCNy00OTFELTg2OUMtMDcwOERCOTdFRDQ0fS5EZWJ1Zy1zdGF0aWN8 eDg2LkFjdGl2ZUNmZyA9IERlYnVnLXN0YXRpY3xXaW4zMgorCQl7MDkwMjhDRkQtNEVCNy00OTFE LTg2OUMtMDcwOERCOTdFRDQ0fS5EZWJ1Zy1zdGF0aWN8eDg2LkJ1aWxkLjAgPSBEZWJ1Zy1zdGF0 aWN8V2luMzIKKwkJezA5MDI4Q0ZELTRFQjctNDkxRC04NjlDLTA3MDhEQjk3RUQ0NH0uUmVsZWFz ZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQKKwkJezA5MDI4Q0ZELTRFQjctNDkxRC04NjlD LTA3MDhEQjk3RUQ0NH0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0CisJCXswOTAy OENGRC00RUI3LTQ5MUQtODY5Qy0wNzA4REI5N0VENDR9LlJlbGVhc2V8eDg2LkFjdGl2ZUNmZyA9 IFJlbGVhc2V8V2luMzIKKwkJezA5MDI4Q0ZELTRFQjctNDkxRC04NjlDLTA3MDhEQjk3RUQ0NH0u UmVsZWFzZXx4ODYuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzIKKwkJezA5MDI4Q0ZELTRFQjctNDkx RC04NjlDLTA3MDhEQjk3RUQ0NH0uUmVsZWFzZS1zdGF0aWN8eDY0LkFjdGl2ZUNmZyA9IFJlbGVh c2Utc3RhdGljfHg2NAorCQl7MDkwMjhDRkQtNEVCNy00OTFELTg2OUMtMDcwOERCOTdFRDQ0fS5S ZWxlYXNlLXN0YXRpY3x4NjQuQnVpbGQuMCA9IFJlbGVhc2Utc3RhdGljfHg2NAorCQl7MDkwMjhD RkQtNEVCNy00OTFELTg2OUMtMDcwOERCOTdFRDQ0fS5SZWxlYXNlLXN0YXRpY3x4ODYuQWN0aXZl Q2ZnID0gUmVsZWFzZS1zdGF0aWN8V2luMzIKKwkJezA5MDI4Q0ZELTRFQjctNDkxRC04NjlDLTA3 MDhEQjk3RUQ0NH0uUmVsZWFzZS1zdGF0aWN8eDg2LkJ1aWxkLjAgPSBSZWxlYXNlLXN0YXRpY3xX aW4zMgorCUVuZEdsb2JhbFNlY3Rpb24KKwlHbG9iYWxTZWN0aW9uKFNvbHV0aW9uUHJvcGVydGll cykgPSBwcmVTb2x1dGlvbgorCQlIaWRlU29sdXRpb25Ob2RlID0gRkFMU0UKKwlFbmRHbG9iYWxT ZWN0aW9uCitFbmRHbG9iYWwKCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9q ZW1hbGxvYy01LjMuMC9tc3ZjL2plbWFsbG9jX3ZjMjAxNy5zbG4gYi8zODktZHMtYmFzZS0zLjMu MC1idWlsZC9qZW1hbGxvYy01LjMuMC9tc3ZjL2plbWFsbG9jX3ZjMjAxNy5zbG4KbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzIyZmNiNAotLS0gL2Rldi9udWxsCisrKyBiLzM4 OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL21zdmMvamVtYWxsb2NfdmMyMDE3 LnNsbgpAQCAtMCwwICsxLDYzIEBACivvu78KK01pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIFNvbHV0 aW9uIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDEyLjAwCisjIFZpc3VhbCBTdHVkaW8gMTQKK1Zpc3Vh bFN0dWRpb1ZlcnNpb24gPSAxNC4wLjI0NzIwLjAKK01pbmltdW1WaXN1YWxTdHVkaW9WZXJzaW9u ID0gMTAuMC40MDIxOS4xCitQcm9qZWN0KCJ7MjE1MEUzMzMtOEZEQy00MkEzLTk0NzQtMUEzOTU2 RDQ2REU4fSIpID0gIlNvbHV0aW9uIEl0ZW1zIiwgIlNvbHV0aW9uIEl0ZW1zIiwgIns3MEE5OTAw Ni02REU5LTQ3MkItOEY4My00Q0VFNkM2MTZERjN9IgorCVByb2plY3RTZWN0aW9uKFNvbHV0aW9u SXRlbXMpID0gcHJlUHJvamVjdAorCQlSZWFkTWUudHh0ID0gUmVhZE1lLnR4dAorCUVuZFByb2pl Y3RTZWN0aW9uCitFbmRQcm9qZWN0CitQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEt MDBBMEM5MUJDOTQyfSIpID0gImplbWFsbG9jIiwgInByb2plY3RzXHZjMjAxN1xqZW1hbGxvY1xq ZW1hbGxvYy52Y3hwcm9qIiwgIns4RDZCQjI5Mi05RTFDLTQxM0QtOUY5OC00ODY0QkRDMTUxNEF9 IgorRW5kUHJvamVjdAorUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFC Qzk0Mn0iKSA9ICJ0ZXN0X3RocmVhZHMiLCAicHJvamVjdHNcdmMyMDE3XHRlc3RfdGhyZWFkc1x0 ZXN0X3RocmVhZHMudmN4cHJvaiIsICJ7MDkwMjhDRkQtNEVCNy00OTFELTg2OUMtMDcwOERCOTdF RDQ0fSIKK0VuZFByb2plY3QKK0dsb2JhbAorCUdsb2JhbFNlY3Rpb24oU29sdXRpb25Db25maWd1 cmF0aW9uUGxhdGZvcm1zKSA9IHByZVNvbHV0aW9uCisJCURlYnVnfHg2NCA9IERlYnVnfHg2NAor CQlEZWJ1Z3x4ODYgPSBEZWJ1Z3x4ODYKKwkJRGVidWctc3RhdGljfHg2NCA9IERlYnVnLXN0YXRp Y3x4NjQKKwkJRGVidWctc3RhdGljfHg4NiA9IERlYnVnLXN0YXRpY3x4ODYKKwkJUmVsZWFzZXx4 NjQgPSBSZWxlYXNlfHg2NAorCQlSZWxlYXNlfHg4NiA9IFJlbGVhc2V8eDg2CisJCVJlbGVhc2Ut c3RhdGljfHg2NCA9IFJlbGVhc2Utc3RhdGljfHg2NAorCQlSZWxlYXNlLXN0YXRpY3x4ODYgPSBS ZWxlYXNlLXN0YXRpY3x4ODYKKwlFbmRHbG9iYWxTZWN0aW9uCisJR2xvYmFsU2VjdGlvbihQcm9q ZWN0Q29uZmlndXJhdGlvblBsYXRmb3JtcykgPSBwb3N0U29sdXRpb24KKwkJezhENkJCMjkyLTlF MUMtNDEzRC05Rjk4LTQ4NjRCREMxNTE0QX0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2 NAorCQl7OEQ2QkIyOTItOUUxQy00MTNELTlGOTgtNDg2NEJEQzE1MTRBfS5EZWJ1Z3x4NjQuQnVp bGQuMCA9IERlYnVnfHg2NAorCQl7OEQ2QkIyOTItOUUxQy00MTNELTlGOTgtNDg2NEJEQzE1MTRB fS5EZWJ1Z3x4ODYuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzIKKwkJezhENkJCMjkyLTlFMUMtNDEz RC05Rjk4LTQ4NjRCREMxNTE0QX0uRGVidWd8eDg2LkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMgorCQl7 OEQ2QkIyOTItOUUxQy00MTNELTlGOTgtNDg2NEJEQzE1MTRBfS5EZWJ1Zy1zdGF0aWN8eDY0LkFj dGl2ZUNmZyA9IERlYnVnLXN0YXRpY3x4NjQKKwkJezhENkJCMjkyLTlFMUMtNDEzRC05Rjk4LTQ4 NjRCREMxNTE0QX0uRGVidWctc3RhdGljfHg2NC5CdWlsZC4wID0gRGVidWctc3RhdGljfHg2NAor CQl7OEQ2QkIyOTItOUUxQy00MTNELTlGOTgtNDg2NEJEQzE1MTRBfS5EZWJ1Zy1zdGF0aWN8eDg2 LkFjdGl2ZUNmZyA9IERlYnVnLXN0YXRpY3xXaW4zMgorCQl7OEQ2QkIyOTItOUUxQy00MTNELTlG OTgtNDg2NEJEQzE1MTRBfS5EZWJ1Zy1zdGF0aWN8eDg2LkJ1aWxkLjAgPSBEZWJ1Zy1zdGF0aWN8 V2luMzIKKwkJezhENkJCMjkyLTlFMUMtNDEzRC05Rjk4LTQ4NjRCREMxNTE0QX0uUmVsZWFzZXx4 NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQKKwkJezhENkJCMjkyLTlFMUMtNDEzRC05Rjk4LTQ4 NjRCREMxNTE0QX0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0CisJCXs4RDZCQjI5 Mi05RTFDLTQxM0QtOUY5OC00ODY0QkRDMTUxNEF9LlJlbGVhc2V8eDg2LkFjdGl2ZUNmZyA9IFJl bGVhc2V8V2luMzIKKwkJezhENkJCMjkyLTlFMUMtNDEzRC05Rjk4LTQ4NjRCREMxNTE0QX0uUmVs ZWFzZXx4ODYuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzIKKwkJezhENkJCMjkyLTlFMUMtNDEzRC05 Rjk4LTQ4NjRCREMxNTE0QX0uUmVsZWFzZS1zdGF0aWN8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2Ut c3RhdGljfHg2NAorCQl7OEQ2QkIyOTItOUUxQy00MTNELTlGOTgtNDg2NEJEQzE1MTRBfS5SZWxl YXNlLXN0YXRpY3x4NjQuQnVpbGQuMCA9IFJlbGVhc2Utc3RhdGljfHg2NAorCQl7OEQ2QkIyOTIt OUUxQy00MTNELTlGOTgtNDg2NEJEQzE1MTRBfS5SZWxlYXNlLXN0YXRpY3x4ODYuQWN0aXZlQ2Zn ID0gUmVsZWFzZS1zdGF0aWN8V2luMzIKKwkJezhENkJCMjkyLTlFMUMtNDEzRC05Rjk4LTQ4NjRC REMxNTE0QX0uUmVsZWFzZS1zdGF0aWN8eDg2LkJ1aWxkLjAgPSBSZWxlYXNlLXN0YXRpY3xXaW4z MgorCQl7MDkwMjhDRkQtNEVCNy00OTFELTg2OUMtMDcwOERCOTdFRDQ0fS5EZWJ1Z3x4NjQuQWN0 aXZlQ2ZnID0gRGVidWd8eDY0CisJCXswOTAyOENGRC00RUI3LTQ5MUQtODY5Qy0wNzA4REI5N0VE NDR9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0CisJCXswOTAyOENGRC00RUI3LTQ5MUQt ODY5Qy0wNzA4REI5N0VENDR9LkRlYnVnfHg4Ni5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMgorCQl7 MDkwMjhDRkQtNEVCNy00OTFELTg2OUMtMDcwOERCOTdFRDQ0fS5EZWJ1Z3x4ODYuQnVpbGQuMCA9 IERlYnVnfFdpbjMyCisJCXswOTAyOENGRC00RUI3LTQ5MUQtODY5Qy0wNzA4REI5N0VENDR9LkRl YnVnLXN0YXRpY3x4NjQuQWN0aXZlQ2ZnID0gRGVidWctc3RhdGljfHg2NAorCQl7MDkwMjhDRkQt NEVCNy00OTFELTg2OUMtMDcwOERCOTdFRDQ0fS5EZWJ1Zy1zdGF0aWN8eDY0LkJ1aWxkLjAgPSBE ZWJ1Zy1zdGF0aWN8eDY0CisJCXswOTAyOENGRC00RUI3LTQ5MUQtODY5Qy0wNzA4REI5N0VENDR9 LkRlYnVnLXN0YXRpY3x4ODYuQWN0aXZlQ2ZnID0gRGVidWctc3RhdGljfFdpbjMyCisJCXswOTAy OENGRC00RUI3LTQ5MUQtODY5Qy0wNzA4REI5N0VENDR9LkRlYnVnLXN0YXRpY3x4ODYuQnVpbGQu MCA9IERlYnVnLXN0YXRpY3xXaW4zMgorCQl7MDkwMjhDRkQtNEVCNy00OTFELTg2OUMtMDcwOERC OTdFRDQ0fS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NAorCQl7MDkwMjhDRkQt NEVCNy00OTFELTg2OUMtMDcwOERCOTdFRDQ0fS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFz ZXx4NjQKKwkJezA5MDI4Q0ZELTRFQjctNDkxRC04NjlDLTA3MDhEQjk3RUQ0NH0uUmVsZWFzZXx4 ODYuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMgorCQl7MDkwMjhDRkQtNEVCNy00OTFELTg2OUMt MDcwOERCOTdFRDQ0fS5SZWxlYXNlfHg4Ni5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMgorCQl7MDkw MjhDRkQtNEVCNy00OTFELTg2OUMtMDcwOERCOTdFRDQ0fS5SZWxlYXNlLXN0YXRpY3x4NjQuQWN0 aXZlQ2ZnID0gUmVsZWFzZS1zdGF0aWN8eDY0CisJCXswOTAyOENGRC00RUI3LTQ5MUQtODY5Qy0w NzA4REI5N0VENDR9LlJlbGVhc2Utc3RhdGljfHg2NC5CdWlsZC4wID0gUmVsZWFzZS1zdGF0aWN8 eDY0CisJCXswOTAyOENGRC00RUI3LTQ5MUQtODY5Qy0wNzA4REI5N0VENDR9LlJlbGVhc2Utc3Rh dGljfHg4Ni5BY3RpdmVDZmcgPSBSZWxlYXNlLXN0YXRpY3xXaW4zMgorCQl7MDkwMjhDRkQtNEVC Ny00OTFELTg2OUMtMDcwOERCOTdFRDQ0fS5SZWxlYXNlLXN0YXRpY3x4ODYuQnVpbGQuMCA9IFJl bGVhc2Utc3RhdGljfFdpbjMyCisJRW5kR2xvYmFsU2VjdGlvbgorCUdsb2JhbFNlY3Rpb24oU29s dXRpb25Qcm9wZXJ0aWVzKSA9IHByZVNvbHV0aW9uCisJCUhpZGVTb2x1dGlvbk5vZGUgPSBGQUxT RQorCUVuZEdsb2JhbFNlY3Rpb24KK0VuZEdsb2JhbAoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNl LTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL21zdmMvcHJvamVjdHMvdmMyMDE1L2plbWFsbG9j L2plbWFsbG9jLnZjeHByb2ogYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMu MC9tc3ZjL3Byb2plY3RzL3ZjMjAxNS9qZW1hbGxvYy9qZW1hbGxvYy52Y3hwcm9qCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjMDI4YTEKLS0tIC9kZXYvbnVsbAorKysgYi8z ODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9tc3ZjL3Byb2plY3RzL3ZjMjAx NS9qZW1hbGxvYy9qZW1hbGxvYy52Y3hwcm9qCkBAIC0wLDAgKzEsMzgwIEBACivvu788P3htbCB2 ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPFByb2plY3QgRGVmYXVsdFRhcmdldHM9 IkJ1aWxkIiBUb29sc1ZlcnNpb249IjE0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3Nv ZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgorICA8SXRlbUdyb3VwIExhYmVsPSJQcm9q ZWN0Q29uZmlndXJhdGlvbnMiPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJE ZWJ1Zy1zdGF0aWN8V2luMzIiPgorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWctc3RhdGljPC9D b25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8L1By b2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJE ZWJ1Zy1zdGF0aWN8eDY0Ij4KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnLXN0YXRpYzwvQ29u ZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgorICAgIDwvUHJvamVj dENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVn fFdpbjMyIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAg ICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9u PgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlLXN0YXRpY3xXaW4z MiI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlLXN0YXRpYzwvQ29uZmlndXJhdGlvbj4K KyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJh dGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZS1zdGF0aWN8 eDY0Ij4KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2Utc3RhdGljPC9Db25maWd1cmF0aW9u PgorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJh dGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXxXaW4zMiI+ CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBs YXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAg IDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3x4NjQiPgorICAgICAgPENvbmZp Z3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0 Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJh dGlvbiBJbmNsdWRlPSJSZWxlYXNlfHg2NCI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNl PC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+CisgICAgPC9Q cm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAg PENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlwuLlxzcmNcYXJlbmEuYyIgLz4KKyAgICA8Q2xD b21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1xiYWNrZ3JvdW5kX3RocmVhZC5jIiAvPgor ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5cc3JjXGJhc2UuYyIgLz4KKyAgICA8 Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1xiaW4uYyIgLz4KKyAgICA8Q2xDb21w aWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1xiaW5faW5mby5jIiAvPgorICAgIDxDbENvbXBp bGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5cc3JjXGJpdG1hcC5jIiAvPgorICAgIDxDbENvbXBpbGUg SW5jbHVkZT0iLi5cLi5cLi5cLi5cc3JjXGJ1Zl93cml0ZXIuYyIgLz4KKyAgICA8Q2xDb21waWxl IEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1xjYWNoZV9iaW4uYyIgLz4KKyAgICA8Q2xDb21waWxl IEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1xja2guYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1 ZGU9Ii4uXC4uXC4uXC4uXHNyY1xjb3VudGVyLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRl PSIuLlwuLlwuLlwuLlxzcmNcY3RsLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwu LlwuLlwuLlxzcmNcZGVjYXkuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4u XC4uXHNyY1xkaXYuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNy Y1xlY2FjaGUuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1xl ZGF0YS5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5cc3JjXGVkYXRh X2NhY2hlLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlwuLlxzcmNcZWhv b2tzLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlwuLlxzcmNcZW1hcC5j IiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5cc3JjXGVzZXQuYyIgLz4K KyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1xleHBfZ3Jvdy5jIiAvPgor ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5cc3JjXGV4dGVudC5jIiAvPgorICAg IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5cc3JjXGV4dGVudF9kc3MuYyIgLz4KKyAg ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1xleHRlbnRfbW1hcC5jIiAvPgor ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5cc3JjXGZ4cC5jIiAvPgorICAgIDxD bENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5cc3JjXGhvb2suYyIgLz4KKyAgICA8Q2xDb21w aWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1xocGEuYyIgLz4KKyAgICA8Q2xDb21waWxlIElu Y2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1xocGFfaG9va3MuYyIgLz4KKyAgICA8Q2xDb21waWxlIElu Y2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1xocGRhdGEuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1 ZGU9Ii4uXC4uXC4uXC4uXHNyY1xpbnNwZWN0LmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRl PSIuLlwuLlwuLlwuLlxzcmNcamVtYWxsb2MuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9 Ii4uXC4uXC4uXC4uXHNyY1xsYXJnZS5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c Li5cLi5cLi5cc3JjXGxvZy5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5c Li5cc3JjXG1hbGxvY19pby5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5c Li5cc3JjXG11dGV4LmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlwuLlxz cmNcbnN0aW1lLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlwuLlxzcmNc cGEuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1xwYV9leHRy YS5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5cc3JjXHBhaS5jIiAv PgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5cc3JjXHBhYy5jIiAvPgorICAg IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5cc3JjXHBhZ2VzLmMiIC8+CisgICAgPENs Q29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlwuLlxzcmNccGVha19ldmVudC5jIiAvPgorICAgIDxD bENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5cc3JjXHByb2YuYyIgLz4KKyAgICA8Q2xDb21w aWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1xwcm9mX2RhdGEuYyIgLz4KKyAgICA8Q2xDb21w aWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1xwcm9mX2xvZy5jIiAvPgorICAgIDxDbENvbXBp bGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5cc3JjXHByb2ZfcmVjZW50LmMiIC8+CisgICAgPENsQ29t cGlsZSBJbmNsdWRlPSIuLlwuLlwuLlwuLlxzcmNccHJvZl9zdGF0cy5jIiAvPgorICAgIDxDbENv bXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5cc3JjXHByb2Zfc3lzLmMiIC8+CisgICAgPENsQ29t cGlsZSBJbmNsdWRlPSIuLlwuLlwuLlwuLlxzcmNccHNzZXQuYyIgLz4KKyAgICA8Q2xDb21waWxl IEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1xydHJlZS5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5j bHVkZT0iLi5cLi5cLi5cLi5cc3JjXHNhZmV0eV9jaGVjay5jIiAvPgorICAgIDxDbENvbXBpbGUg SW5jbHVkZT0iLi5cLi5cLi5cLi5cc3JjXHNhbi5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVk ZT0iLi5cLi5cLi5cLi5cc3JjXHNhbl9idW1wLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRl PSIuLlwuLlwuLlwuLlxzcmNcc2MuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4u XC4uXC4uXHNyY1xzZWMuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4u XHNyY1xzdGF0cy5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5cc3Jj XHN6LmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlwuLlxzcmNcdGNhY2hl LmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlwuLlxzcmNcdGVzdF9ob29r cy5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5cc3JjXHRocmVhZF9l dmVudC5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5cc3JjXHRpY2tl ci5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5cc3JjXHRzZC5jIiAv PgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5cc3JjXHdpdG5lc3MuYyIgLz4K KyAgPC9JdGVtR3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJHbG9iYWxzIj4KKyAgICA8 UHJvamVjdEd1aWQ+ezhENkJCMjkyLTlFMUMtNDEzRC05Rjk4LTQ4NjRCREMxNTE0QX08L1Byb2pl Y3RHdWlkPgorICAgIDxLZXl3b3JkPldpbjMyUHJvajwvS2V5d29yZD4KKyAgICA8Um9vdE5hbWVz cGFjZT5qZW1hbGxvYzwvUm9vdE5hbWVzcGFjZT4KKyAgICA8V2luZG93c1RhcmdldFBsYXRmb3Jt VmVyc2lvbj44LjE8L1dpbmRvd3NUYXJnZXRQbGF0Zm9ybVZlcnNpb24+CisgIDwvUHJvcGVydHlH cm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAu RGVmYXVsdC5wcm9wcyIgLz4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1 cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9u Ij4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25U eXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz50cnVlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAg ICA8UGxhdGZvcm1Ub29sc2V0PnYxNDA8L1BsYXRmb3JtVG9vbHNldD4KKyAgICA8Q2hhcmFjdGVy U2V0Pk11bHRpQnl0ZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9w ZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVi dWctc3RhdGljfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0 aW9uVHlwZT5TdGF0aWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdM aWJyYXJpZXM+dHJ1ZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFBsYXRmb3JtVG9vbHNldD52 MTQwPC9QbGF0Zm9ybVRvb2xzZXQ+CisgICAgPENoYXJhY3RlclNldD5NdWx0aUJ5dGU8L0NoYXJh Y3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249 IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiBMYWJlbD0i Q29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9D b25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+ZmFsc2U8L1VzZURlYnVn TGlicmFyaWVzPgorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+djE0MDwvUGxhdGZvcm1Ub29sc2V0Pgor ICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0 aW9uPgorICAgIDxDaGFyYWN0ZXJTZXQ+TXVsdGlCeXRlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJv cGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9u KXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlLXN0YXRpY3xXaW4zMiciIExhYmVsPSJDb25maWd1cmF0 aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+U3RhdGljTGlicmFyeTwvQ29uZmlndXJhdGlv blR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPmZhbHNlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4K KyAgICA8UGxhdGZvcm1Ub29sc2V0PnYxNDA8L1BsYXRmb3JtVG9vbHNldD4KKyAgICA8V2hvbGVQ cm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KKyAgICA8 Q2hhcmFjdGVyU2V0Pk11bHRpQnl0ZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+ CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9y bSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0 aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVn TGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+ djE0MDwvUGxhdGZvcm1Ub29sc2V0PgorICAgIDxDaGFyYWN0ZXJTZXQ+TXVsdGlCeXRlPC9DaGFy YWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9u PSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Zy1zdGF0aWN8eDY0JyIgTGFi ZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5TdGF0aWNMaWJyYXJ5 PC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+dHJ1ZTwvVXNlRGVi dWdMaWJyYXJpZXM+CisgICAgPFBsYXRmb3JtVG9vbHNldD52MTQwPC9QbGF0Zm9ybVRvb2xzZXQ+ CisgICAgPENoYXJhY3RlclNldD5NdWx0aUJ5dGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0 eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQo UGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxD b25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+CisgICAg PFVzZURlYnVnTGlicmFyaWVzPmZhbHNlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8UGxhdGZv cm1Ub29sc2V0PnYxNDA8L1BsYXRmb3JtVG9vbHNldD4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1p emF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KKyAgICA8Q2hhcmFjdGVyU2V0 Pk11bHRpQnl0ZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0 eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFz ZS1zdGF0aWN8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9u VHlwZT5TdGF0aWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJy YXJpZXM+ZmFsc2U8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+djE0 MDwvUGxhdGZvcm1Ub29sc2V0PgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwv V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgorICAgIDxDaGFyYWN0ZXJTZXQ+TXVsdGlCeXRlPC9D aGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZD VGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAucHJvcHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJl bD0iRXh0ZW5zaW9uU2V0dGluZ3MiPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAg TGFiZWw9IlNoYXJlZCI+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0i UHJvcGVydHlTaGVldHMiIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSkn PT0nRGVidWd8V2luMzInIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1p Y3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQo VXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJl bD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRH cm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnLXN0 YXRpY3xXaW4zMiciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0 PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENv bmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0p LnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9y dEdyb3VwPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIiBDb25kaXRpb249 IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8 SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSku dXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5D cHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0i IC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZp Z3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2Utc3RhdGljfFdpbjMyJyIgTGFiZWw9IlBy b3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jv c29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNl clJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0i TG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91 cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQ bGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290 RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhp c3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMn KSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8 SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdE ZWJ1Zy1zdGF0aWN8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFBy b2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9w cyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0 Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwv SW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiIENvbmRp dGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KKyAg ICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9y bSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29m dC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZv cm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENv bmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2Utc3RhdGljfHg2NCciIExhYmVsPSJQ cm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNy b3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVz ZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9 IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8UHJvcGVydHlH cm91cCBMYWJlbD0iVXNlck1hY3JvcyIgLz4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSIn JChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxPdXRE aXI+JChTb2x1dGlvbkRpcikkKFBsYXRmb3JtKVwkKENvbmZpZ3VyYXRpb24pXDwvT3V0RGlyPgor ICAgIDxJbnREaXI+JChQbGF0Zm9ybSlcJChDb25maWd1cmF0aW9uKVw8L0ludERpcj4KKyAgICA8 VGFyZ2V0TmFtZT4kKFByb2plY3ROYW1lKWQ8L1RhcmdldE5hbWU+CisgIDwvUHJvcGVydHlHcm91 cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRm b3JtKSc9PSdEZWJ1Zy1zdGF0aWN8V2luMzInIj4KKyAgICA8T3V0RGlyPiQoU29sdXRpb25EaXIp JChQbGF0Zm9ybSlcJChDb25maWd1cmF0aW9uKVw8L091dERpcj4KKyAgICA8SW50RGlyPiQoUGxh dGZvcm0pXCQoQ29uZmlndXJhdGlvbilcPC9JbnREaXI+CisgICAgPFRhcmdldE5hbWU+JChQcm9q ZWN0TmFtZSktJChQbGF0Zm9ybVRvb2xzZXQpLSQoQ29uZmlndXJhdGlvbik8L1RhcmdldE5hbWU+ CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25m aWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPE91dERpcj4k KFNvbHV0aW9uRGlyKSQoUGxhdGZvcm0pXCQoQ29uZmlndXJhdGlvbilcPC9PdXREaXI+CisgICAg PEludERpcj4kKFBsYXRmb3JtKVwkKENvbmZpZ3VyYXRpb24pXDwvSW50RGlyPgorICA8L1Byb3Bl cnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8 JChQbGF0Zm9ybSknPT0nUmVsZWFzZS1zdGF0aWN8V2luMzInIj4KKyAgICA8T3V0RGlyPiQoU29s dXRpb25EaXIpJChQbGF0Zm9ybSlcJChDb25maWd1cmF0aW9uKVw8L091dERpcj4KKyAgICA8SW50 RGlyPiQoUGxhdGZvcm0pXCQoQ29uZmlndXJhdGlvbilcPC9JbnREaXI+CisgICAgPFRhcmdldE5h bWU+JChQcm9qZWN0TmFtZSktJChQbGF0Zm9ybVRvb2xzZXQpLSQoQ29uZmlndXJhdGlvbik8L1Rh cmdldE5hbWU+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9u PSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KKyAgICA8T3V0 RGlyPiQoU29sdXRpb25EaXIpJChQbGF0Zm9ybSlcJChDb25maWd1cmF0aW9uKVw8L091dERpcj4K KyAgICA8SW50RGlyPiQoUGxhdGZvcm0pXCQoQ29uZmlndXJhdGlvbilcPC9JbnREaXI+CisgICAg PFRhcmdldE5hbWU+JChQcm9qZWN0TmFtZSlkPC9UYXJnZXROYW1lPgorICA8L1Byb3BlcnR5R3Jv dXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0 Zm9ybSknPT0nRGVidWctc3RhdGljfHg2NCciPgorICAgIDxPdXREaXI+JChTb2x1dGlvbkRpcikk KFBsYXRmb3JtKVwkKENvbmZpZ3VyYXRpb24pXDwvT3V0RGlyPgorICAgIDxJbnREaXI+JChQbGF0 Zm9ybSlcJChDb25maWd1cmF0aW9uKVw8L0ludERpcj4KKyAgICA8VGFyZ2V0TmFtZT4kKFByb2pl Y3ROYW1lKS12YyQoUGxhdGZvcm1Ub29sc2V0VmVyc2lvbiktJChDb25maWd1cmF0aW9uKTwvVGFy Z2V0TmFtZT4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249 IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+CisgICAgPE91 dERpcj4kKFNvbHV0aW9uRGlyKSQoUGxhdGZvcm0pXCQoQ29uZmlndXJhdGlvbilcPC9PdXREaXI+ CisgICAgPEludERpcj4kKFBsYXRmb3JtKVwkKENvbmZpZ3VyYXRpb24pXDwvSW50RGlyPgorICA8 L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJh dGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZS1zdGF0aWN8eDY0JyI+CisgICAgPE91dERpcj4k KFNvbHV0aW9uRGlyKSQoUGxhdGZvcm0pXCQoQ29uZmlndXJhdGlvbilcPC9PdXREaXI+CisgICAg PEludERpcj4kKFBsYXRmb3JtKVwkKENvbmZpZ3VyYXRpb24pXDwvSW50RGlyPgorICAgIDxUYXJn ZXROYW1lPiQoUHJvamVjdE5hbWUpLXZjJChQbGF0Zm9ybVRvb2xzZXRWZXJzaW9uKS0kKENvbmZp Z3VyYXRpb24pPC9UYXJnZXROYW1lPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJdGVtRGVmaW5p dGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVi dWd8V2luMzInIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgor ICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9X YXJuaW5nTGV2ZWw+CisgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+ CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+SkVNQUxMT0NfTk9fUFJJVkFURV9OQU1F U1BBQ0U7X1JFRU5UUkFOVDtfV0lORExMO0RMTEVYUE9SVDtKRU1BTExPQ19ERUJVRztfREVCVUc7 JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAg ICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li5cLi5cLi5cLi5caW5jbHVkZTsuLlwu LlwuLlwuLlxpbmNsdWRlXG1zdmNfY29tcGF0OyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmll cyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgICA8RGlzYWJsZVNwZWNpZmlj V2FybmluZ3M+NDA5MDs0MTQ2OzQyNjc7NDMzNDwvRGlzYWJsZVNwZWNpZmljV2FybmluZ3M+Cisg ICAgICA8UHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU+JChPdXRwdXRQYXRoKSQoVGFyZ2V0TmFtZSku cGRiPC9Qcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGlu az4KKyAgICAgIDxTdWJTeXN0ZW0+V2luZG93czwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRl RGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgPC9M aW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENv bmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWctc3RhdGljfFdp bjMyJyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAg IDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2Fybmlu Z0xldmVsPgorICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgorICAg ICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPkpFTUFMTE9DX05PX1BSSVZBVEVfTkFNRVNQQUNF O0pFTUFMTE9DX0RFQlVHO19SRUVOVFJBTlQ7SkVNQUxMT0NfRVhQT1JUPTtfREVCVUc7X0xJQjsl KFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAg ICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLlwuLlwuLlwuLlxpbmNsdWRlOy4uXC4u XC4uXC4uXGluY2x1ZGVcbXN2Y19jb21wYXQ7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVz KTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICAgIDxSdW50aW1lTGlicmFyeT5N dWx0aVRocmVhZGVkRGVidWc8L1J1bnRpbWVMaWJyYXJ5PgorICAgICAgPERpc2FibGVTcGVjaWZp Y1dhcm5pbmdzPjQwOTA7NDE0Njs0MjY3OzQzMzQ8L0Rpc2FibGVTcGVjaWZpY1dhcm5pbmdzPgor ICAgICAgPFByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPiQoT3V0cHV0UGF0aCkkKFRhcmdldE5hbWUp LnBkYjwvUHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExp bms+CisgICAgICA8U3ViU3lzdGVtPldpbmRvd3M8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0 ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgIDwv TGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBD b25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPgor ICAgIDxDbENvbXBpbGU+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNv bXBpbGVkSGVhZGVyPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4K KyAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxQcmVw cm9jZXNzb3JEZWZpbml0aW9ucz5KRU1BTExPQ19OT19QUklWQVRFX05BTUVTUEFDRTtfUkVFTlRS QU5UO19XSU5ETEw7RExMRVhQT1JUO0pFTUFMTE9DX0RFQlVHO19ERUJVRzslKFByZXByb2Nlc3Nv ckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25h bEluY2x1ZGVEaXJlY3Rvcmllcz4uLlwuLlwuLlwuLlxpbmNsdWRlOy4uXC4uXC4uXC4uXGluY2x1 ZGVcbXN2Y19jb21wYXQ7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25h bEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICAgIDxEaXNhYmxlU3BlY2lmaWNXYXJuaW5ncz40MDkw OzQxNDY7NDI2Nzs0MzM0PC9EaXNhYmxlU3BlY2lmaWNXYXJuaW5ncz4KKyAgICAgIDxQcm9ncmFt RGF0YUJhc2VGaWxlTmFtZT4kKE91dHB1dFBhdGgpJChUYXJnZXROYW1lKS5wZGI8L1Byb2dyYW1E YXRhQmFzZUZpbGVOYW1lPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1 YlN5c3RlbT5XaW5kb3dzPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0 aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICA8L0xpbms+CisgIDwvSXRl bURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChD b25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Zy1zdGF0aWN8eDY0JyI+CisgICAgPENs Q29tcGlsZT4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRI ZWFkZXI+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAg PE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPFByZXByb2Nlc3Nv ckRlZmluaXRpb25zPkpFTUFMTE9DX05PX1BSSVZBVEVfTkFNRVNQQUNFO0pFTUFMTE9DX0RFQlVH O19SRUVOVFJBTlQ7SkVNQUxMT0NfRVhQT1JUPTtfREVCVUc7X0xJQjslKFByZXByb2Nlc3NvckRl ZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbElu Y2x1ZGVEaXJlY3Rvcmllcz4uLlwuLlwuLlwuLlxpbmNsdWRlOy4uXC4uXC4uXC4uXGluY2x1ZGVc bXN2Y19jb21wYXQ7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbElu Y2x1ZGVEaXJlY3Rvcmllcz4KKyAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkRGVi dWc8L1J1bnRpbWVMaWJyYXJ5PgorICAgICAgPERpc2FibGVTcGVjaWZpY1dhcm5pbmdzPjQwOTA7 NDE0Njs0MjY3OzQzMzQ8L0Rpc2FibGVTcGVjaWZpY1dhcm5pbmdzPgorICAgICAgPERlYnVnSW5m b3JtYXRpb25Gb3JtYXQ+T2xkU3R5bGU8L0RlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+CisgICAgICA8 TWluaW1hbFJlYnVpbGQ+ZmFsc2U8L01pbmltYWxSZWJ1aWxkPgorICAgIDwvQ2xDb21waWxlPgor ICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5XaW5kb3dzPC9TdWJTeXN0ZW0+CisgICAgICA8 R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4K KyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9u R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNl fFdpbjMyJyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9X YXJuaW5nTGV2ZWw+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBp bGVkSGVhZGVyPgorICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgor ICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgor ICAgICAgPEludHJpbnNpY0Z1bmN0aW9ucz50cnVlPC9JbnRyaW5zaWNGdW5jdGlvbnM+CisgICAg ICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+SkVNQUxMT0NfTk9fUFJJVkFURV9OQU1FU1BBQ0U7 X1JFRU5UUkFOVDtfV0lORExMO0RMTEVYUE9SVDtOREVCVUc7JShQcmVwcm9jZXNzb3JEZWZpbml0 aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRl RGlyZWN0b3JpZXM+Li5cLi5cLi5cLi5caW5jbHVkZTsuLlwuLlwuLlwuLlxpbmNsdWRlXG1zdmNf Y29tcGF0OyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRl RGlyZWN0b3JpZXM+CisgICAgICA8RGlzYWJsZVNwZWNpZmljV2FybmluZ3M+NDA5MDs0MTQ2OzQy Njc7NDMzNDwvRGlzYWJsZVNwZWNpZmljV2FybmluZ3M+CisgICAgICA8UHJvZ3JhbURhdGFCYXNl RmlsZU5hbWU+JChPdXRwdXRQYXRoKSQoVGFyZ2V0TmFtZSkucGRiPC9Qcm9ncmFtRGF0YUJhc2VG aWxlTmFtZT4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+ V2luZG93czwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVl PC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8RW5hYmxlQ09NREFURm9sZGluZz50 cnVlPC9FbmFibGVDT01EQVRGb2xkaW5nPgorICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVl PC9PcHRpbWl6ZVJlZmVyZW5jZXM+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3Jv dXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8 JChQbGF0Zm9ybSknPT0nUmVsZWFzZS1zdGF0aWN8V2luMzInIj4KKyAgICA8Q2xDb21waWxlPgor ICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxQcmVjb21w aWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8T3B0aW1pemF0 aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+ dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+CisgICAgICA8SW50cmluc2ljRnVuY3Rpb25zPnRy dWU8L0ludHJpbnNpY0Z1bmN0aW9ucz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5K RU1BTExPQ19OT19QUklWQVRFX05BTUVTUEFDRTtfUkVFTlRSQU5UO0pFTUFMTE9DX0VYUE9SVD07 TkRFQlVHO19MSUI7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmlu aXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li5cLi5cLi5cLi5c aW5jbHVkZTsuLlwuLlwuLlwuLlxpbmNsdWRlXG1zdmNfY29tcGF0OyUoQWRkaXRpb25hbEluY2x1 ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgICA8UnVu dGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZDwvUnVudGltZUxpYnJhcnk+CisgICAgICA8RGlzYWJs ZVNwZWNpZmljV2FybmluZ3M+NDA5MDs0MTQ2OzQyNjc7NDMzNDwvRGlzYWJsZVNwZWNpZmljV2Fy bmluZ3M+CisgICAgICA8UHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU+JChPdXRwdXRQYXRoKSQoVGFy Z2V0TmFtZSkucGRiPC9Qcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT4KKyAgICA8L0NsQ29tcGlsZT4K KyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+V2luZG93czwvU3ViU3lzdGVtPgorICAgICAg PEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+ CisgICAgICA8RW5hYmxlQ09NREFURm9sZGluZz50cnVlPC9FbmFibGVDT01EQVRGb2xkaW5nPgor ICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+CisgICAg PC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3Vw IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQn Ij4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdM ZXZlbD4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFk ZXI+CisgICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8 RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+CisgICAgICA8 SW50cmluc2ljRnVuY3Rpb25zPnRydWU8L0ludHJpbnNpY0Z1bmN0aW9ucz4KKyAgICAgIDxBZGRp dGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uXC4uXC4uXC4uXGluY2x1ZGU7Li5cLi5cLi5cLi5c aW5jbHVkZVxtc3ZjX2NvbXBhdDslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRp dGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25z PkpFTUFMTE9DX05PX1BSSVZBVEVfTkFNRVNQQUNFO19SRUVOVFJBTlQ7X1dJTkRMTDtETExFWFBP UlQ7TkRFQlVHOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0 aW9ucz4KKyAgICAgIDxEaXNhYmxlU3BlY2lmaWNXYXJuaW5ncz40MDkwOzQxNDY7NDI2Nzs0MzM0 PC9EaXNhYmxlU3BlY2lmaWNXYXJuaW5ncz4KKyAgICAgIDxQcm9ncmFtRGF0YUJhc2VGaWxlTmFt ZT4kKE91dHB1dFBhdGgpJChUYXJnZXROYW1lKS5wZGI8L1Byb2dyYW1EYXRhQmFzZUZpbGVOYW1l PgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5XaW5kb3dz PC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVy YXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxFbmFibGVDT01EQVRGb2xkaW5nPnRydWU8L0Vu YWJsZUNPTURBVEZvbGRpbmc+CisgICAgICA8T3B0aW1pemVSZWZlcmVuY2VzPnRydWU8L09wdGlt aXplUmVmZXJlbmNlcz4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAg PEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRm b3JtKSc9PSdSZWxlYXNlLXN0YXRpY3x4NjQnIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFdh cm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRl cj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8T3B0aW1pemF0aW9uPk1heFNw ZWVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVu Y3Rpb25MZXZlbExpbmtpbmc+CisgICAgICA8SW50cmluc2ljRnVuY3Rpb25zPnRydWU8L0ludHJp bnNpY0Z1bmN0aW9ucz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5KRU1BTExPQ19O T19QUklWQVRFX05BTUVTUEFDRTtfUkVFTlRSQU5UO0pFTUFMTE9DX0VYUE9SVD07TkRFQlVHO19M SUI7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgor ICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li5cLi5cLi5cLi5caW5jbHVkZTsu LlwuLlwuLlwuLlxpbmNsdWRlXG1zdmNfY29tcGF0OyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rv cmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgICA8UnVudGltZUxpYnJh cnk+TXVsdGlUaHJlYWRlZDwvUnVudGltZUxpYnJhcnk+CisgICAgICA8RGlzYWJsZVNwZWNpZmlj V2FybmluZ3M+NDA5MDs0MTQ2OzQyNjc7NDMzNDwvRGlzYWJsZVNwZWNpZmljV2FybmluZ3M+Cisg ICAgICA8RGVidWdJbmZvcm1hdGlvbkZvcm1hdD5PbGRTdHlsZTwvRGVidWdJbmZvcm1hdGlvbkZv cm1hdD4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+V2lu ZG93czwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9H ZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8RW5hYmxlQ09NREFURm9sZGluZz50cnVl PC9FbmFibGVDT01EQVRGb2xkaW5nPgorICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9P cHRpbWl6ZVJlZmVyZW5jZXM+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+ CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdl dHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uVGFyZ2V0cyI+CisgIDwvSW1w b3J0R3JvdXA+Cis8L1Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQoKZGlmZiAt LWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL21zdmMvcHJvamVj dHMvdmMyMDE1L2plbWFsbG9jL2plbWFsbG9jLnZjeHByb2ouZmlsdGVycyBiLzM4OS1kcy1iYXNl LTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL21zdmMvcHJvamVjdHMvdmMyMDE1L2plbWFsbG9j L2plbWFsbG9jLnZjeHByb2ouZmlsdGVycwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwLi4xYjQzZTlmCi0tLSAvZGV2L251bGwKKysrIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQv amVtYWxsb2MtNS4zLjAvbXN2Yy9wcm9qZWN0cy92YzIwMTUvamVtYWxsb2MvamVtYWxsb2MudmN4 cHJvai5maWx0ZXJzCkBAIC0wLDAgKzEsMTk3IEBACivvu788P3htbCB2ZXJzaW9uPSIxLjAiIGVu Y29kaW5nPSJ1dGYtOCI/PgorPFByb2plY3QgVG9vbHNWZXJzaW9uPSI0LjAiIHhtbG5zPSJodHRw Oi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgorICA8SXRl bUdyb3VwPgorICAgIDxGaWx0ZXIgSW5jbHVkZT0iU291cmNlIEZpbGVzIj4KKyAgICAgIDxVbmlx dWVJZGVudGlmaWVyPns0RkM3MzdGMS1DN0E1LTQzNzYtQTA2Ni0yQTMyRDc1MkEyRkZ9PC9Vbmlx dWVJZGVudGlmaWVyPgorICAgICAgPEV4dGVuc2lvbnM+Y3BwO2M7Y2M7Y3h4O2RlZjtvZGw7aWRs O2hwajtiYXQ7YXNtO2FzbXg8L0V4dGVuc2lvbnM+CisgICAgPC9GaWx0ZXI+CisgIDwvSXRlbUdy b3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5c c3JjXGFyZW5hLmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KKyAgICA8 L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1xiYWNr Z3JvdW5kX3RocmVhZC5jIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+Cisg ICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlwuLlxzcmNc YmFzZS5jIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbENv bXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlwuLlxzcmNcYmluLmMiPgor ICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAg ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1xiaXRtYXAuYyI+CisgICAgICA8 RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENv bXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5cc3JjXGJ1Zl93cml0ZXIuYyI+CisgICAgICA8Rmls dGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBp bGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5cc3JjXGNhY2hlX2Jpbi5jIj4KKyAgICAgIDxGaWx0ZXI+ U291cmNlIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJ bmNsdWRlPSIuLlwuLlwuLlwuLlxzcmNcY2toLmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmls ZXM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u XC4uXC4uXC4uXHNyY1xjb3VudGVyLmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0Zp bHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4u XC4uXHNyY1xjdGwuYyI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgorICAg IDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5cc3JjXGRl Y2F5LmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsQ29t cGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1xkaXYuYyI+Cisg ICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAg IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5cc3JjXGVtYXAuYyI+CisgICAgICA8Rmls dGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBp bGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5cc3JjXGV4cF9ncm93LmMiPgorICAgICAgPEZpbHRlcj5T b3VyY2UgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIElu Y2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1xleHRlbnQuYyI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBG aWxlczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i Li5cLi5cLi5cLi5cc3JjXGV4dGVudF9kc3MuYyI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxl czwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c Li5cLi5cLi5cc3JjXGV4dGVudF9tbWFwLmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8 L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4u XC4uXC4uXHNyY1xmeHAuYyI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgor ICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5cc3Jj XGhvb2suYyI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xD b21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5cc3JjXGhwYS5jIj4K KyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+Cisg ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlwuLlxzcmNcaHBhX2hvb2tzLmMiPgorICAg ICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8 Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1xocGRhdGEuYyI+CisgICAgICA8Rmls dGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBp bGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5cc3JjXGluc3BlY3QuYyI+CisgICAgICA8RmlsdGVyPlNv dXJjZSBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5j bHVkZT0iLi5cLi5cLi5cLi5cc3JjXGplbWFsbG9jLmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2Ug RmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9 Ii4uXC4uXC4uXC4uXHNyY1xsYXJnZS5jIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9G aWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwu LlwuLlxzcmNcbG9nLmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KKyAg ICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1xt YWxsb2NfaW8uYyI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgorICAgIDwv Q2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5cc3JjXG11dGV4 LmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGls ZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1xuc3RpbWUuYyI+Cisg ICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAg IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5cc3JjXHBhLmMiPgorICAgICAgPEZpbHRl cj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxl IEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1xwYV9leHRyYS5jIj4KKyAgICAgIDxGaWx0ZXI+U291 cmNlIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNs dWRlPSIuLlwuLlwuLlwuLlxzcmNccGFpLmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8 L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4u XC4uXC4uXHNyY1xwYWMuYyI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgor ICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5cc3Jj XHBhZ2VzLmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0Ns Q29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1xwZWFrX2V2 ZW50LmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsQ29t cGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1xwcm9mLmMiPgor ICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAg ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1xwcm9mX2RhdGEuYyI+CisgICAg ICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxD bENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5cc3JjXHByb2ZfbG9nLmMiPgorICAgICAgPEZp bHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21w aWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1xwcm9mX3JlY2VudC5jIj4KKyAgICAgIDxGaWx0 ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGls ZSBJbmNsdWRlPSIuLlwuLlwuLlwuLlxzcmNccHJvZl9zdGF0cy5jIj4KKyAgICAgIDxGaWx0ZXI+ U291cmNlIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJ bmNsdWRlPSIuLlwuLlwuLlwuLlxzcmNccHJvZl9zeXMuYyI+CisgICAgICA8RmlsdGVyPlNvdXJj ZSBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVk ZT0iLi5cLi5cLi5cLi5cc3JjXHBzc2V0LmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8 L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4u XC4uXC4uXHNyY1xydHJlZS5jIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+ CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlwuLlxz cmNcc2FmZXR5X2NoZWNrLmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4K KyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNy Y1xzYy5jIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbENv bXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlwuLlxzcmNcc2VjLmMiPgor ICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAg ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1xzdGF0cy5jIj4KKyAgICAgIDxG aWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29t cGlsZSBJbmNsdWRlPSIuLlwuLlwuLlwuLlxzcmNcc3ouYyI+CisgICAgICA8RmlsdGVyPlNvdXJj ZSBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVk ZT0iLi5cLi5cLi5cLi5cc3JjXHRjYWNoZS5jIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVz PC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwu LlwuLlwuLlxzcmNcdGVzdF9ob29rcy5jIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9G aWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwu LlwuLlxzcmNcdGhyZWFkX2V2ZW50LmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0Zp bHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4u XC4uXHNyY1x0aWNrZXIuYyI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgor ICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5cc3Jj XHRzZC5jIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbENv bXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlwuLlxzcmNcd2l0bmVzcy5j Ij4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+ CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlwuLlxzcmNcYmluX2luZm8uYyI+Cisg ICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAg IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5cc3JjXGVjYWNoZS5jIj4KKyAgICAgIDxG aWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29t cGlsZSBJbmNsdWRlPSIuLlwuLlwuLlwuLlxzcmNcZWRhdGEuYyI+CisgICAgICA8RmlsdGVyPlNv dXJjZSBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5j bHVkZT0iLi5cLi5cLi5cLi5cc3JjXGVkYXRhX2NhY2hlLmMiPgorICAgICAgPEZpbHRlcj5Tb3Vy Y2UgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1 ZGU9Ii4uXC4uXC4uXC4uXHNyY1xlaG9va3MuYyI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxl czwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c Li5cLi5cLi5cc3JjXGVzZXQuYyI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVy PgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5c c3JjXHNhbi5jIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9D bENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlwuLlxzcmNcc2FuX2J1 bXAuYyI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xDb21w aWxlPgorICA8L0l0ZW1Hcm91cD4KKzwvUHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBm aWxlCgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAv bXN2Yy9wcm9qZWN0cy92YzIwMTUvdGVzdF90aHJlYWRzL3Rlc3RfdGhyZWFkcy52Y3hwcm9qIGIv Mzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvbXN2Yy9wcm9qZWN0cy92YzIw MTUvdGVzdF90aHJlYWRzL3Rlc3RfdGhyZWFkcy52Y3hwcm9qCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAuLjMyNTg3NmQKLS0tIC9kZXYvbnVsbAorKysgYi8zODktZHMtYmFzZS0z LjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9tc3ZjL3Byb2plY3RzL3ZjMjAxNS90ZXN0X3RocmVh ZHMvdGVzdF90aHJlYWRzLnZjeHByb2oKQEAgLTAsMCArMSwzMjcgQEAKK++7vzw/eG1sIHZlcnNp b249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8UHJvamVjdCBEZWZhdWx0VGFyZ2V0cz0iQnVp bGQiIFRvb2xzVmVyc2lvbj0iMTQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5j b20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+CisgIDxJdGVtR3JvdXAgTGFiZWw9IlByb2plY3RD b25maWd1cmF0aW9ucyI+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVn LXN0YXRpY3xXaW4zMiI+CisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1Zy1zdGF0aWM8L0NvbmZp Z3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgorICAgIDwvUHJvamVj dENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVn LXN0YXRpY3x4NjQiPgorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWctc3RhdGljPC9Db25maWd1 cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29u ZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8V2lu MzIiPgorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8 UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+Cisg ICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2Utc3RhdGljfFdpbjMyIj4K KyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2Utc3RhdGljPC9Db25maWd1cmF0aW9uPgorICAg ICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9u PgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlLXN0YXRpY3x4NjQi PgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZS1zdGF0aWM8L0NvbmZpZ3VyYXRpb24+Cisg ICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9u PgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfFdpbjMyIj4KKyAg ICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZv cm0+V2luMzI8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFBy b2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfHg2NCI+CisgICAgICA8Q29uZmlndXJh dGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3Jt PgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9u IEluY2x1ZGU9IlJlbGVhc2V8eDY0Ij4KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0Nv bmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KKyAgICA8L1Byb2pl Y3RDb25maWd1cmF0aW9uPgorICA8L0l0ZW1Hcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9 Ikdsb2JhbHMiPgorICAgIDxQcm9qZWN0R3VpZD57MDkwMjhDRkQtNEVCNy00OTFELTg2OUMtMDcw OERCOTdFRDQ0fTwvUHJvamVjdEd1aWQ+CisgICAgPEtleXdvcmQ+V2luMzJQcm9qPC9LZXl3b3Jk PgorICAgIDxSb290TmFtZXNwYWNlPnRlc3RfdGhyZWFkczwvUm9vdE5hbWVzcGFjZT4KKyAgICA8 V2luZG93c1RhcmdldFBsYXRmb3JtVmVyc2lvbj44LjE8L1dpbmRvd3NUYXJnZXRQbGF0Zm9ybVZl cnNpb24+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0 c1BhdGgpXE1pY3Jvc29mdC5DcHAuRGVmYXVsdC5wcm9wcyIgLz4KKyAgPFByb3BlcnR5R3JvdXAg Q29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMici IExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRp b248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz50cnVlPC9Vc2VE ZWJ1Z0xpYnJhcmllcz4KKyAgICA8UGxhdGZvcm1Ub29sc2V0PnYxNDA8L1BsYXRmb3JtVG9vbHNl dD4KKyAgICA8Q2hhcmFjdGVyU2V0Pk11bHRpQnl0ZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3Bl cnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8 JChQbGF0Zm9ybSknPT0nRGVidWctc3RhdGljfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24i PgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+ CisgICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxQ bGF0Zm9ybVRvb2xzZXQ+djE0MDwvUGxhdGZvcm1Ub29sc2V0PgorICAgIDxDaGFyYWN0ZXJTZXQ+ TXVsdGlCeXRlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5 R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNl fFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5B cHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPmZh bHNlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8UGxhdGZvcm1Ub29sc2V0PnYxNDA8L1BsYXRm b3JtVG9vbHNldD4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJv Z3JhbU9wdGltaXphdGlvbj4KKyAgICA8Q2hhcmFjdGVyU2V0Pk11bHRpQnl0ZTwvQ2hhcmFjdGVy U2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQo Q29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZS1zdGF0aWN8V2luMzInIiBMYWJl bD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9D b25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+ZmFsc2U8L1VzZURlYnVn TGlicmFyaWVzPgorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+djE0MDwvUGxhdGZvcm1Ub29sc2V0Pgor ICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0 aW9uPgorICAgIDxDaGFyYWN0ZXJTZXQ+TXVsdGlCeXRlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJv cGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9u KXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAg PENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8 VXNlRGVidWdMaWJyYXJpZXM+dHJ1ZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFBsYXRmb3Jt VG9vbHNldD52MTQwPC9QbGF0Zm9ybVRvb2xzZXQ+CisgICAgPENoYXJhY3RlclNldD5NdWx0aUJ5 dGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBD b25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnLXN0YXRpY3x4 NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxp Y2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+dHJ1ZTwv VXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFBsYXRmb3JtVG9vbHNldD52MTQwPC9QbGF0Zm9ybVRv b2xzZXQ+CisgICAgPENoYXJhY3RlclNldD5NdWx0aUJ5dGU8L0NoYXJhY3RlclNldD4KKyAgPC9Q cm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRp b24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgor ICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+Cisg ICAgPFVzZURlYnVnTGlicmFyaWVzPmZhbHNlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8UGxh dGZvcm1Ub29sc2V0PnYxNDA8L1BsYXRmb3JtVG9vbHNldD4KKyAgICA8V2hvbGVQcm9ncmFtT3B0 aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KKyAgICA8Q2hhcmFjdGVy U2V0Pk11bHRpQnl0ZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9w ZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVs ZWFzZS1zdGF0aWN8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0 aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGli cmFyaWVzPmZhbHNlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8UGxhdGZvcm1Ub29sc2V0PnYx NDA8L1BsYXRmb3JtVG9vbHNldD4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8 L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KKyAgICA8Q2hhcmFjdGVyU2V0Pk11bHRpQnl0ZTwv Q2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChW Q1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnByb3BzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFi ZWw9IkV4dGVuc2lvblNldHRpbmdzIj4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3Vw IExhYmVsPSJTaGFyZWQiPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9 IlByb3BlcnR5U2hlZXRzIiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0p Jz09J0RlYnVnfFdpbjMyJyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxN aWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCck KFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFi ZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0 R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Zy1z dGF0aWN8V2luMzInIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVj dD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBD b25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3Jt KS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBv cnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyIgQ29uZGl0aW9u PSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAg PEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0p LnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQu Q3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3Jt IiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25m aWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlLXN0YXRpY3xXaW4zMiciIExhYmVsPSJQ cm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNy b3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVz ZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9 IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3Jv dXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQo UGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9v dERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4 aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3Bz JykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAg PEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0n RGVidWctc3RhdGljfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQ cm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJv cHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxh dGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8 L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIiBDb25k aXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+Cisg ICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZv cm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3Nv ZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRm b3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChD b25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlLXN0YXRpY3x4NjQnIiBMYWJlbD0i UHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWlj cm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChV c2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVs PSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPFByb3BlcnR5 R3JvdXAgTGFiZWw9IlVzZXJNYWNyb3MiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0i JyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8T3V0 RGlyPiQoU29sdXRpb25EaXIpJChQbGF0Zm9ybSlcJChDb25maWd1cmF0aW9uKVw8L091dERpcj4K KyAgICA8SW50RGlyPiQoUGxhdGZvcm0pXCQoQ29uZmlndXJhdGlvbilcPC9JbnREaXI+CisgICAg PExpbmtJbmNyZW1lbnRhbD50cnVlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91 cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRm b3JtKSc9PSdEZWJ1Zy1zdGF0aWN8V2luMzInIj4KKyAgICA8T3V0RGlyPiQoU29sdXRpb25EaXIp JChQbGF0Zm9ybSlcJChDb25maWd1cmF0aW9uKVw8L091dERpcj4KKyAgICA8SW50RGlyPiQoUGxh dGZvcm0pXCQoQ29uZmlndXJhdGlvbilcPC9JbnREaXI+CisgICAgPExpbmtJbmNyZW1lbnRhbD50 cnVlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3Jv dXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQn Ij4KKyAgICA8TGlua0luY3JlbWVudGFsPnRydWU8L0xpbmtJbmNyZW1lbnRhbD4KKyAgICA8T3V0 RGlyPiQoU29sdXRpb25EaXIpJChQbGF0Zm9ybSlcJChDb25maWd1cmF0aW9uKVw8L091dERpcj4K KyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZp Z3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnLXN0YXRpY3x4NjQnIj4KKyAgICA8TGlua0lu Y3JlbWVudGFsPnRydWU8L0xpbmtJbmNyZW1lbnRhbD4KKyAgICA8T3V0RGlyPiQoU29sdXRpb25E aXIpJChQbGF0Zm9ybSlcJChDb25maWd1cmF0aW9uKVw8L091dERpcj4KKyAgPC9Qcm9wZXJ0eUdy b3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxh dGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8T3V0RGlyPiQoU29sdXRpb25EaXIpJChQ bGF0Zm9ybSlcJChDb25maWd1cmF0aW9uKVw8L091dERpcj4KKyAgICA8SW50RGlyPiQoUGxhdGZv cm0pXCQoQ29uZmlndXJhdGlvbilcPC9JbnREaXI+CisgICAgPExpbmtJbmNyZW1lbnRhbD5mYWxz ZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3Vw IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZS1zdGF0 aWN8V2luMzInIj4KKyAgICA8T3V0RGlyPiQoU29sdXRpb25EaXIpJChQbGF0Zm9ybSlcJChDb25m aWd1cmF0aW9uKVw8L091dERpcj4KKyAgICA8SW50RGlyPiQoUGxhdGZvcm0pXCQoQ29uZmlndXJh dGlvbilcPC9JbnREaXI+CisgICAgPExpbmtJbmNyZW1lbnRhbD5mYWxzZTwvTGlua0luY3JlbWVu dGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQo Q29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KKyAgICA8T3V0RGly PiQoU29sdXRpb25EaXIpJChQbGF0Zm9ybSlcJChDb25maWd1cmF0aW9uKVw8L091dERpcj4KKyAg ICA8SW50RGlyPiQoUGxhdGZvcm0pXCQoQ29uZmlndXJhdGlvbilcPC9JbnREaXI+CisgICAgPExp bmtJbmNyZW1lbnRhbD5mYWxzZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+ CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9y bSknPT0nUmVsZWFzZS1zdGF0aWN8eDY0JyI+CisgICAgPE91dERpcj4kKFNvbHV0aW9uRGlyKSQo UGxhdGZvcm0pXCQoQ29uZmlndXJhdGlvbilcPC9PdXREaXI+CisgICAgPEludERpcj4kKFBsYXRm b3JtKVwkKENvbmZpZ3VyYXRpb24pXDwvSW50RGlyPgorICAgIDxMaW5rSW5jcmVtZW50YWw+ZmFs c2U8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SXRlbURlZmluaXRp b25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVn fFdpbjMyJyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAg ICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2Fy bmluZ0xldmVsPgorICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgor ICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19ERUJVRztfQ09OU09MRTslKFBy ZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8 QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLlwuLlwuLlwuLlx0ZXN0XGluY2x1ZGU7Li5c Li5cLi5cLi5caW5jbHVkZTsuLlwuLlwuLlwuLlxpbmNsdWRlXG1zdmNfY29tcGF0OyUoQWRkaXRp b25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Cisg ICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1 YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVE ZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+JChT b2x1dGlvbkRpcikkKFBsYXRmb3JtKVwkKENvbmZpZ3VyYXRpb24pPC9BZGRpdGlvbmFsTGlicmFy eURpcmVjdG9yaWVzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+amVtYWxsb2NkLmxp YjtrZXJuZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7d2luc3Bvb2wubGliO2NvbWRsZzMy LmxpYjthZHZhcGkzMi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlk LmxpYjtvZGJjMzIubGliO29kYmNjcDMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9B ZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdy b3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24p fCQoUGxhdGZvcm0pJz09J0RlYnVnLXN0YXRpY3xXaW4zMiciPgorICAgIDxDbENvbXBpbGU+Cisg ICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAg ICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxPcHRpbWl6YXRp b24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9u cz5KRU1BTExPQ19FWFBPUlQ9O0pFTUFMTE9DX1NUQVRJQztfREVCVUc7X0NPTlNPTEU7JShQcmVw cm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFk ZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li5cLi5cLi5cLi5cdGVzdFxpbmNsdWRlOy4uXC4u XC4uXC4uXGluY2x1ZGU7Li5cLi5cLi5cLi5caW5jbHVkZVxtc3ZjX2NvbXBhdDslKEFkZGl0aW9u YWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAg ICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWREZWJ1ZzwvUnVudGltZUxpYnJhcnk+Cisg ICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1 YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVE ZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+JChT b2x1dGlvbkRpcikkKFBsYXRmb3JtKVwkKENvbmZpZ3VyYXRpb24pPC9BZGRpdGlvbmFsTGlicmFy eURpcmVjdG9yaWVzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+amVtYWxsb2MtJChQ bGF0Zm9ybVRvb2xzZXQpLSQoQ29uZmlndXJhdGlvbikubGliO2tlcm5lbDMyLmxpYjt1c2VyMzIu bGliO2dkaTMyLmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGliO2FkdmFwaTMyLmxpYjtzaGVs bDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGliO29kYmMzMi5saWI7b2RiY2Nw MzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+ CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlv bkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8 eDY0JyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAg IDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2Fybmlu Z0xldmVsPgorICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgorICAg ICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPl9ERUJVRzslKFByZXByb2Nlc3NvckRlZmluaXRp b25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVE aXJlY3Rvcmllcz4uLlwuLlwuLlwuLlx0ZXN0XGluY2x1ZGU7Li5cLi5cLi5cLi5caW5jbHVkZTsu LlwuLlwuLlwuLlxpbmNsdWRlXG1zdmNfY29tcGF0OyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rv cmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+Cisg ICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxH ZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgor ICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+amVtYWxsb2NkLmxpYjtrZXJuZWwzMi5saWI7 dXNlcjMyLmxpYjtnZGkzMi5saWI7d2luc3Bvb2wubGliO2NvbWRsZzMyLmxpYjthZHZhcGkzMi5s aWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjtvZGJjMzIubGli O29kYmNjcDMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5k ZW5jaWVzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+JChTb2x1dGlvbkRp cikkKFBsYXRmb3JtKVwkKENvbmZpZ3VyYXRpb24pPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9y aWVzPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmlu aXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0Rl YnVnLXN0YXRpY3x4NjQnIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFByZWNvbXBpbGVkSGVh ZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2 ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6 YXRpb24+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+SkVNQUxMT0NfRVhQT1JUPTtK RU1BTExPQ19TVEFUSUM7X0RFQlVHOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9j ZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4u XC4uXC4uXC4uXHRlc3RcaW5jbHVkZTsuLlwuLlwuLlwuLlxpbmNsdWRlOy4uXC4uXC4uXC4uXGlu Y2x1ZGVcbXN2Y19jb21wYXQ7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRp b25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVh ZGVkRGVidWc8L1J1bnRpbWVMaWJyYXJ5PgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgor ICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1 Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxBZGRp dGlvbmFsRGVwZW5kZW5jaWVzPmplbWFsbG9jLXZjJChQbGF0Zm9ybVRvb2xzZXRWZXJzaW9uKS0k KENvbmZpZ3VyYXRpb24pLmxpYjtrZXJuZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7d2lu c3Bvb2wubGliO2NvbWRsZzMyLmxpYjthZHZhcGkzMi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGli O29sZWF1dDMyLmxpYjt1dWlkLmxpYjtvZGJjMzIubGliO29kYmNjcDMyLmxpYjslKEFkZGl0aW9u YWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPEFkZGl0aW9u YWxMaWJyYXJ5RGlyZWN0b3JpZXM+JChTb2x1dGlvbkRpcikkKFBsYXRmb3JtKVwkKENvbmZpZ3Vy YXRpb24pPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgIDwvTGluaz4KKyAgPC9J dGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249Iick KENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8Q2xD b21waWxlPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAg IDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8 T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8RnVuY3Rpb25MZXZl bExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+CisgICAgICA8SW50cmluc2ljRnVu Y3Rpb25zPnRydWU8L0ludHJpbnNpY0Z1bmN0aW9ucz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZp bml0aW9ucz5XSU4zMjtOREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8 L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0 b3JpZXM+Li5cLi5cLi5cLi5cdGVzdFxpbmNsdWRlOy4uXC4uXC4uXC4uXGluY2x1ZGU7Li5cLi5c Li5cLi5caW5jbHVkZVxtc3ZjX2NvbXBhdDslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMp PC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxM aW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJh dGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAg IDxFbmFibGVDT01EQVRGb2xkaW5nPnRydWU8L0VuYWJsZUNPTURBVEZvbGRpbmc+CisgICAgICA8 T3B0aW1pemVSZWZlcmVuY2VzPnRydWU8L09wdGltaXplUmVmZXJlbmNlcz4KKyAgICAgIDxBZGRp dGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPiQoU29sdXRpb25EaXIpJChQbGF0Zm9ybSlcJChDb25m aWd1cmF0aW9uKTwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICAgIDxBZGRpdGlv bmFsRGVwZW5kZW5jaWVzPmplbWFsbG9jLmxpYjtrZXJuZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkz Mi5saWI7d2luc3Bvb2wubGliO2NvbWRsZzMyLmxpYjthZHZhcGkzMi5saWI7c2hlbGwzMi5saWI7 b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjtvZGJjMzIubGliO29kYmNjcDMyLmxpYjsl KEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgIDwv TGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBD b25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2Utc3RhdGlj fFdpbjMyJyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9X YXJuaW5nTGV2ZWw+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBp bGVkSGVhZGVyPgorICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgor ICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgor ICAgICAgPEludHJpbnNpY0Z1bmN0aW9ucz50cnVlPC9JbnRyaW5zaWNGdW5jdGlvbnM+CisgICAg ICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+SkVNQUxMT0NfRVhQT1JUPTtKRU1BTExPQ19TVEFU SUM7TkRFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNz b3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uXC4u XC4uXC4uXHRlc3RcaW5jbHVkZTsuLlwuLlwuLlwuLlxpbmNsdWRlOy4uXC4uXC4uXC4uXGluY2x1 ZGVcbXN2Y19jb21wYXQ7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25h bEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVk PC9SdW50aW1lTGlicmFyeT4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxT dWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1h dGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8RW5hYmxlQ09NREFU Rm9sZGluZz50cnVlPC9FbmFibGVDT01EQVRGb2xkaW5nPgorICAgICAgPE9wdGltaXplUmVmZXJl bmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlE aXJlY3Rvcmllcz4kKFNvbHV0aW9uRGlyKSQoUGxhdGZvcm0pXCQoQ29uZmlndXJhdGlvbik8L0Fk ZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2ll cz5qZW1hbGxvYy0kKFBsYXRmb3JtVG9vbHNldCktJChDb25maWd1cmF0aW9uKS5saWI7a2VybmVs MzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGliO3dpbnNwb29sLmxpYjtjb21kbGczMi5saWI7YWR2 YXBpMzIubGliO3NoZWxsMzIubGliO29sZTMyLmxpYjtvbGVhdXQzMi5saWI7dXVpZC5saWI7b2Ri YzMyLmxpYjtvZGJjY3AzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25h bERlcGVuZGVuY2llcz4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAg PEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRm b3JtKSc9PSdSZWxlYXNlfHg2NCciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8V2FybmluZ0xl dmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAg ICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09w dGltaXphdGlvbj4KKyAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxl dmVsTGlua2luZz4KKyAgICAgIDxJbnRyaW5zaWNGdW5jdGlvbnM+dHJ1ZTwvSW50cmluc2ljRnVu Y3Rpb25zPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPk5ERUJVRztfQ09OU09MRTsl KFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAg ICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLlwuLlwuLlwuLlx0ZXN0XGluY2x1ZGU7 Li5cLi5cLi5cLi5caW5jbHVkZTsuLlwuLlwuLlwuLlxpbmNsdWRlXG1zdmNfY29tcGF0OyUoQWRk aXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+ CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8 L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJh dGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPEVuYWJsZUNPTURBVEZvbGRpbmc+dHJ1ZTwvRW5h YmxlQ09NREFURm9sZGluZz4KKyAgICAgIDxPcHRpbWl6ZVJlZmVyZW5jZXM+dHJ1ZTwvT3B0aW1p emVSZWZlcmVuY2VzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+JChTb2x1 dGlvbkRpcikkKFBsYXRmb3JtKVwkKENvbmZpZ3VyYXRpb24pPC9BZGRpdGlvbmFsTGlicmFyeURp cmVjdG9yaWVzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+amVtYWxsb2MubGliO2tl cm5lbDMyLmxpYjt1c2VyMzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGli O2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGli O29kYmMzMi5saWI7b2RiY2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0 aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+ CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQ bGF0Zm9ybSknPT0nUmVsZWFzZS1zdGF0aWN8eDY0JyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAg IDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8UHJlY29tcGlsZWRI ZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPE9wdGltaXphdGlvbj5N YXhTcGVlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8 L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgorICAgICAgPEludHJpbnNpY0Z1bmN0aW9ucz50cnVlPC9J bnRyaW5zaWNGdW5jdGlvbnM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+SkVNQUxM T0NfRVhQT1JUPTtKRU1BTExPQ19TVEFUSUM7TkRFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29y RGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFs SW5jbHVkZURpcmVjdG9yaWVzPi4uXC4uXC4uXC4uXHRlc3RcaW5jbHVkZTsuLlwuLlwuLlwuLlxp bmNsdWRlOy4uXC4uXC4uXC4uXGluY2x1ZGVcbXN2Y19jb21wYXQ7JShBZGRpdGlvbmFsSW5jbHVk ZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICAgIDxSdW50 aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkPC9SdW50aW1lTGlicmFyeT4KKyAgICA8L0NsQ29tcGls ZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAg ICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRp b24+CisgICAgICA8RW5hYmxlQ09NREFURm9sZGluZz50cnVlPC9FbmFibGVDT01EQVRGb2xkaW5n PgorICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+Cisg ICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4kKFNvbHV0aW9uRGlyKSQoUGxhdGZv cm0pXCQoQ29uZmlndXJhdGlvbik8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAg ICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5qZW1hbGxvYy12YyQoUGxhdGZvcm1Ub29sc2V0VmVy c2lvbiktJChDb25maWd1cmF0aW9uKS5saWI7a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIu bGliO3dpbnNwb29sLmxpYjtjb21kbGczMi5saWI7YWR2YXBpMzIubGliO3NoZWxsMzIubGliO29s ZTMyLmxpYjtvbGVhdXQzMi5saWI7dXVpZC5saWI7b2RiYzMyLmxpYjtvZGJjY3AzMi5saWI7JShB ZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICA8L0xp bms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8Q2xDb21w aWxlIEluY2x1ZGU9Ii4uXC4uXC4uXHRlc3RfdGhyZWFkc1x0ZXN0X3RocmVhZHMuY3BwIiAvPgor ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cdGVzdF90aHJlYWRzXHRlc3RfdGhyZWFk c19tYWluLmNwcCIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPFByb2pl Y3RSZWZlcmVuY2UgSW5jbHVkZT0iLi5camVtYWxsb2NcamVtYWxsb2MudmN4cHJvaiI+CisgICAg ICA8UHJvamVjdD57OGQ2YmIyOTItOWUxYy00MTNkLTlmOTgtNDg2NGJkYzE1MTRhfTwvUHJvamVj dD4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3Vw PgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cLi5cdGVzdF90aHJlYWRzXHRlc3RfdGhy ZWFkcy5oIiAvPgorICA8L0l0ZW1Hcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0 c1BhdGgpXE1pY3Jvc29mdC5DcHAudGFyZ2V0cyIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJF eHRlbnNpb25UYXJnZXRzIj4KKyAgPC9JbXBvcnRHcm91cD4KKzwvUHJvamVjdD4KXCBObyBuZXds aW5lIGF0IGVuZCBvZiBmaWxlCgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQv amVtYWxsb2MtNS4zLjAvbXN2Yy9wcm9qZWN0cy92YzIwMTUvdGVzdF90aHJlYWRzL3Rlc3RfdGhy ZWFkcy52Y3hwcm9qLmZpbHRlcnMgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01 LjMuMC9tc3ZjL3Byb2plY3RzL3ZjMjAxNS90ZXN0X3RocmVhZHMvdGVzdF90aHJlYWRzLnZjeHBy b2ouZmlsdGVycwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTQ1ODhmCi0t LSAvZGV2L251bGwKKysrIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAv bXN2Yy9wcm9qZWN0cy92YzIwMTUvdGVzdF90aHJlYWRzL3Rlc3RfdGhyZWFkcy52Y3hwcm9qLmZp bHRlcnMKQEAgLTAsMCArMSwyNiBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0i dXRmLTgiPz4KKzxQcm9qZWN0IFRvb2xzVmVyc2lvbj0iNC4wIiB4bWxucz0iaHR0cDovL3NjaGVt YXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KKyAgPEl0ZW1Hcm91cD4K KyAgICA8RmlsdGVyIEluY2x1ZGU9IlNvdXJjZSBGaWxlcyI+CisgICAgICA8VW5pcXVlSWRlbnRp Zmllcj57NEZDNzM3RjEtQzdBNS00Mzc2LUEwNjYtMkEzMkQ3NTJBMkZGfTwvVW5pcXVlSWRlbnRp Zmllcj4KKyAgICAgIDxFeHRlbnNpb25zPmNwcDtjO2NjO2N4eDtkZWY7b2RsO2lkbDtocGo7YmF0 O2FzbTthc214PC9FeHRlbnNpb25zPgorICAgIDwvRmlsdGVyPgorICAgIDxGaWx0ZXIgSW5jbHVk ZT0iSGVhZGVyIEZpbGVzIj4KKyAgICAgIDxVbmlxdWVJZGVudGlmaWVyPns5Mzk5NTM4MC04OUJE LTRiMDQtODhFQi02MjVGQkU1MkVCRkJ9PC9VbmlxdWVJZGVudGlmaWVyPgorICAgICAgPEV4dGVu c2lvbnM+aDtoaDtocHA7aHh4O2htO2lubDtpbmM7eHNkPC9FeHRlbnNpb25zPgorICAgIDwvRmls dGVyPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8Q2xDb21waWxlIEluY2x1 ZGU9Ii4uXC4uXC4uXHRlc3RfdGhyZWFkc1x0ZXN0X3RocmVhZHMuY3BwIj4KKyAgICAgIDxGaWx0 ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGls ZSBJbmNsdWRlPSIuLlwuLlwuLlx0ZXN0X3RocmVhZHNcdGVzdF90aHJlYWRzX21haW4uY3BwIj4K KyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+Cisg IDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c Li5cLi5cdGVzdF90aHJlYWRzXHRlc3RfdGhyZWFkcy5oIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVy IEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgIDwvSXRlbUdyb3VwPgorPC9Qcm9q ZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKCmRpZmYgLS1naXQgYS8zODktZHMtYmFz ZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9tc3ZjL3Byb2plY3RzL3ZjMjAxNy9qZW1hbGxv Yy9qZW1hbGxvYy52Y3hwcm9qIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4z LjAvbXN2Yy9wcm9qZWN0cy92YzIwMTcvamVtYWxsb2MvamVtYWxsb2MudmN4cHJvagpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODAwNGRiCi0tLSAvZGV2L251bGwKKysrIGIv Mzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvbXN2Yy9wcm9qZWN0cy92YzIw MTcvamVtYWxsb2MvamVtYWxsb2MudmN4cHJvagpAQCAtMCwwICsxLDM3OSBAQAor77u/PD94bWwg dmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxQcm9qZWN0IERlZmF1bHRUYXJnZXRz PSJCdWlsZCIgVG9vbHNWZXJzaW9uPSIxNS4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9z b2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KKyAgPEl0ZW1Hcm91cCBMYWJlbD0iUHJv amVjdENvbmZpZ3VyYXRpb25zIj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0i RGVidWctc3RhdGljfFdpbjMyIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnLXN0YXRpYzwv Q29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Q cm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0i RGVidWctc3RhdGljfHg2NCI+CisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1Zy1zdGF0aWM8L0Nv bmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KKyAgICA8L1Byb2pl Y3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1 Z3xXaW4zMiI+CisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KKyAg ICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlv bj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZS1zdGF0aWN8V2lu MzIiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZS1zdGF0aWM8L0NvbmZpZ3VyYXRpb24+ CisgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3Vy YXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2Utc3RhdGlj fHg2NCI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlLXN0YXRpYzwvQ29uZmlndXJhdGlv bj4KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3Vy YXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8V2luMzIi PgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQ bGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAg ICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8eDY0Ij4KKyAgICAgIDxDb25m aWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPng2NDwvUGxh dGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3Vy YXRpb24gSW5jbHVkZT0iUmVsZWFzZXx4NjQiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFz ZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgorICAgIDwv UHJvamVjdENvbmZpZ3VyYXRpb24+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAg IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5cc3JjXGFyZW5hLmMiIC8+CisgICAgPENs Q29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlwuLlxzcmNcYmFja2dyb3VuZF90aHJlYWQuYyIgLz4K KyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1xiYXNlLmMiIC8+CisgICAg PENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlwuLlxzcmNcYmluLmMiIC8+CisgICAgPENsQ29t cGlsZSBJbmNsdWRlPSIuLlwuLlwuLlwuLlxzcmNcYmluX2luZm8uYyIgLz4KKyAgICA8Q2xDb21w aWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1xiaXRtYXAuYyIgLz4KKyAgICA8Q2xDb21waWxl IEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1xidWZfd3JpdGVyLmMiIC8+CisgICAgPENsQ29tcGls ZSBJbmNsdWRlPSIuLlwuLlwuLlwuLlxzcmNcY2FjaGVfYmluLmMiIC8+CisgICAgPENsQ29tcGls ZSBJbmNsdWRlPSIuLlwuLlwuLlwuLlxzcmNcY2toLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNs dWRlPSIuLlwuLlwuLlwuLlxzcmNcY291bnRlci5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVk ZT0iLi5cLi5cLi5cLi5cc3JjXGN0bC5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c Li5cLi5cLi5cc3JjXGRlY2F5LmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwu LlwuLlxzcmNcZGl2LmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlwuLlxz cmNcZWNhY2hlLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlwuLlxzcmNc ZWRhdGEuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1xlZGF0 YV9jYWNoZS5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5cc3JjXGVo b29rcy5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5cc3JjXGVtYXAu YyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1xlc2V0LmMiIC8+ CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlwuLlxzcmNcZXhwX2dyb3cuYyIgLz4K KyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1xleHRlbnQuYyIgLz4KKyAg ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1xleHRlbnRfZHNzLmMiIC8+Cisg ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlwuLlxzcmNcZXh0ZW50X21tYXAuYyIgLz4K KyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1xmeHAuYyIgLz4KKyAgICA8 Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1xob29rLmMiIC8+CisgICAgPENsQ29t cGlsZSBJbmNsdWRlPSIuLlwuLlwuLlwuLlxzcmNcaHBhLmMiIC8+CisgICAgPENsQ29tcGlsZSBJ bmNsdWRlPSIuLlwuLlwuLlwuLlxzcmNcaHBhX2hvb2tzLmMiIC8+CisgICAgPENsQ29tcGlsZSBJ bmNsdWRlPSIuLlwuLlwuLlwuLlxzcmNcaHBkYXRhLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNs dWRlPSIuLlwuLlwuLlwuLlxzcmNcaW5zcGVjdC5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVk ZT0iLi5cLi5cLi5cLi5cc3JjXGplbWFsbG9jLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRl PSIuLlwuLlwuLlwuLlxzcmNcbGFyZ2UuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u XC4uXC4uXC4uXHNyY1xsb2cuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4u XC4uXHNyY1xtYWxsb2NfaW8uYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4u XC4uXHNyY1xtdXRleC5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5c c3JjXG5zdGltZS5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5cc3Jj XHBhLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlwuLlxzcmNccGFfZXh0 cmEuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1xwYWkuYyIg Lz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1xwYWMuYyIgLz4KKyAg ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1xwYWdlcy5jIiAvPgorICAgIDxD bENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5cc3JjXHBlYWtfZXZlbnQuYyIgLz4KKyAgICA8 Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1xwcm9mLmMiIC8+CisgICAgPENsQ29t cGlsZSBJbmNsdWRlPSIuLlwuLlwuLlwuLlxzcmNccHJvZl9kYXRhLmMiIC8+CisgICAgPENsQ29t cGlsZSBJbmNsdWRlPSIuLlwuLlwuLlwuLlxzcmNccHJvZl9sb2cuYyIgLz4KKyAgICA8Q2xDb21w aWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1xwcm9mX3JlY2VudC5jIiAvPgorICAgIDxDbENv bXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5cc3JjXHByb2Zfc3RhdHMuYyIgLz4KKyAgICA8Q2xD b21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1xwcm9mX3N5cy5jIiAvPgorICAgIDxDbENv bXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5cc3JjXHBzc2V0LmMiIC8+CisgICAgPENsQ29tcGls ZSBJbmNsdWRlPSIuLlwuLlwuLlwuLlxzcmNccnRyZWUuYyIgLz4KKyAgICA8Q2xDb21waWxlIElu Y2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1xzYWZldHlfY2hlY2suYyIgLz4KKyAgICA8Q2xDb21waWxl IEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1xzYW4uYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1 ZGU9Ii4uXC4uXC4uXC4uXHNyY1xzYW5fYnVtcC5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVk ZT0iLi5cLi5cLi5cLi5cc3JjXHNjLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwu LlwuLlwuLlxzcmNcc2VjLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlwu LlxzcmNcc3RhdHMuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNy Y1xzei5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5cc3JjXHRjYWNo ZS5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5cc3JjXHRlc3RfaG9v a3MuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1x0aHJlYWRf ZXZlbnQuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1x0aWNr ZXIuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1x0c2QuYyIg Lz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1x3aXRuZXNzLmMiIC8+ CisgIDwvSXRlbUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iR2xvYmFscyI+CisgICAg PFByb2plY3RHdWlkPns4RDZCQjI5Mi05RTFDLTQxM0QtOUY5OC00ODY0QkRDMTUxNEF9PC9Qcm9q ZWN0R3VpZD4KKyAgICA8S2V5d29yZD5XaW4zMlByb2o8L0tleXdvcmQ+CisgICAgPFJvb3ROYW1l c3BhY2U+amVtYWxsb2M8L1Jvb3ROYW1lc3BhY2U+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPElt cG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAuRGVmYXVsdC5wcm9w cyIgLz4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBs YXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29u ZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxV c2VEZWJ1Z0xpYnJhcmllcz50cnVlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8UGxhdGZvcm1U b29sc2V0PnYxNDE8L1BsYXRmb3JtVG9vbHNldD4KKyAgICA8Q2hhcmFjdGVyU2V0Pk11bHRpQnl0 ZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENv bmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWctc3RhdGljfFdp bjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5TdGF0 aWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+dHJ1 ZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFBsYXRmb3JtVG9vbHNldD52MTQxPC9QbGF0Zm9y bVRvb2xzZXQ+CisgICAgPENoYXJhY3RlclNldD5NdWx0aUJ5dGU8L0NoYXJhY3RlclNldD4KKyAg PC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3Vy YXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlv biI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9u VHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+ZmFsc2U8L1VzZURlYnVnTGlicmFyaWVzPgor ICAgIDxQbGF0Zm9ybVRvb2xzZXQ+djE0MTwvUGxhdGZvcm1Ub29sc2V0PgorICAgIDxXaG9sZVBy b2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgorICAgIDxD aGFyYWN0ZXJTZXQ+TXVsdGlCeXRlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4K KyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3Jt KSc9PSdSZWxlYXNlLXN0YXRpY3xXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8 Q29uZmlndXJhdGlvblR5cGU+U3RhdGljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+CisgICAg PFVzZURlYnVnTGlicmFyaWVzPmZhbHNlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8UGxhdGZv cm1Ub29sc2V0PnYxNDE8L1BsYXRmb3JtVG9vbHNldD4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1p emF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KKyAgICA8Q2hhcmFjdGVyU2V0 Pk11bHRpQnl0ZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0 eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8 eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5h bWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPnRy dWU8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+djE0MTwvUGxhdGZv cm1Ub29sc2V0PgorICAgIDxDaGFyYWN0ZXJTZXQ+TXVsdGlCeXRlPC9DaGFyYWN0ZXJTZXQ+Cisg IDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1 cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Zy1zdGF0aWN8eDY0JyIgTGFiZWw9IkNvbmZpZ3Vy YXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5TdGF0aWNMaWJyYXJ5PC9Db25maWd1cmF0 aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+dHJ1ZTwvVXNlRGVidWdMaWJyYXJpZXM+ CisgICAgPFBsYXRmb3JtVG9vbHNldD52MTQxPC9QbGF0Zm9ybVRvb2xzZXQ+CisgICAgPENoYXJh Y3RlclNldD5NdWx0aUJ5dGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8 UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09 J1JlbGVhc2V8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9u VHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGli cmFyaWVzPmZhbHNlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8UGxhdGZvcm1Ub29sc2V0PnYx NDE8L1BsYXRmb3JtVG9vbHNldD4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8 L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KKyAgICA8Q2hhcmFjdGVyU2V0Pk11bHRpQnl0ZTwv Q2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRp dGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZS1zdGF0aWN8eDY0 JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5TdGF0aWNM aWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+ZmFsc2U8 L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+djE0MTwvUGxhdGZvcm1U b29sc2V0PgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFt T3B0aW1pemF0aW9uPgorICAgIDxDaGFyYWN0ZXJTZXQ+TXVsdGlCeXRlPC9DaGFyYWN0ZXJTZXQ+ CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgp XE1pY3Jvc29mdC5DcHAucHJvcHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9u U2V0dGluZ3MiPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlNoYXJl ZCI+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVl dHMiIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2lu MzInIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAu JChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIp XE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBE YXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBDb25kaXRp b249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnLXN0YXRpY3xXaW4zMici IExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290 RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhp c3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMn KSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8 SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIiBDb25kaXRpb249IickKENvbmZpZ3Vy YXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8SW1wb3J0IFByb2pl Y3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIg Q29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9y bSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1w b3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQo UGxhdGZvcm0pJz09J1JlbGVhc2Utc3RhdGljfFdpbjMyJyIgTGFiZWw9IlByb3BlcnR5U2hlZXRz Ij4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQ bGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1p Y3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRh UGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJv cGVydHlTaGVldHMiIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0n RGVidWd8eDY0JyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3Nv ZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJS b290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9Ikxv Y2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAg Q29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Zy1zdGF0aWN8 eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNl clJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9u PSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5w cm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+ CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiIENvbmRpdGlvbj0iJyQoQ29u ZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KKyAgICA8SW1wb3J0IFBy b2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9w cyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0 Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwv SW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24p fCQoUGxhdGZvcm0pJz09J1JlbGVhc2Utc3RhdGljfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0 cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQo UGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxN aWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0 YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0i VXNlck1hY3JvcyIgLz4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0 aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxPdXREaXI+JChTb2x1dGlv bkRpcikkKFBsYXRmb3JtKVwkKENvbmZpZ3VyYXRpb24pXDwvT3V0RGlyPgorICAgIDxJbnREaXI+ JChQbGF0Zm9ybSlcJChDb25maWd1cmF0aW9uKVw8L0ludERpcj4KKyAgICA8VGFyZ2V0TmFtZT4k KFByb2plY3ROYW1lKWQ8L1RhcmdldE5hbWU+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3Bl cnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1 Zy1zdGF0aWN8V2luMzInIj4KKyAgICA8T3V0RGlyPiQoU29sdXRpb25EaXIpJChQbGF0Zm9ybSlc JChDb25maWd1cmF0aW9uKVw8L091dERpcj4KKyAgICA8SW50RGlyPiQoUGxhdGZvcm0pXCQoQ29u ZmlndXJhdGlvbilcPC9JbnREaXI+CisgICAgPFRhcmdldE5hbWU+JChQcm9qZWN0TmFtZSktJChQ bGF0Zm9ybVRvb2xzZXQpLSQoQ29uZmlndXJhdGlvbik8L1RhcmdldE5hbWU+CisgIDwvUHJvcGVy dHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwk KFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPE91dERpcj4kKFNvbHV0aW9uRGly KSQoUGxhdGZvcm0pXCQoQ29uZmlndXJhdGlvbilcPC9PdXREaXI+CisgICAgPEludERpcj4kKFBs YXRmb3JtKVwkKENvbmZpZ3VyYXRpb24pXDwvSW50RGlyPgorICA8L1Byb3BlcnR5R3JvdXA+Cisg IDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSkn PT0nUmVsZWFzZS1zdGF0aWN8V2luMzInIj4KKyAgICA8T3V0RGlyPiQoU29sdXRpb25EaXIpJChQ bGF0Zm9ybSlcJChDb25maWd1cmF0aW9uKVw8L091dERpcj4KKyAgICA8SW50RGlyPiQoUGxhdGZv cm0pXCQoQ29uZmlndXJhdGlvbilcPC9JbnREaXI+CisgICAgPFRhcmdldE5hbWU+JChQcm9qZWN0 TmFtZSktJChQbGF0Zm9ybVRvb2xzZXQpLSQoQ29uZmlndXJhdGlvbik8L1RhcmdldE5hbWU+Cisg IDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1 cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KKyAgICA8T3V0RGlyPiQoU29sdXRp b25EaXIpJChQbGF0Zm9ybSlcJChDb25maWd1cmF0aW9uKVw8L091dERpcj4KKyAgICA8SW50RGly PiQoUGxhdGZvcm0pXCQoQ29uZmlndXJhdGlvbilcPC9JbnREaXI+CisgICAgPFRhcmdldE5hbWU+ JChQcm9qZWN0TmFtZSlkPC9UYXJnZXROYW1lPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9w ZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVi dWctc3RhdGljfHg2NCciPgorICAgIDxPdXREaXI+JChTb2x1dGlvbkRpcikkKFBsYXRmb3JtKVwk KENvbmZpZ3VyYXRpb24pXDwvT3V0RGlyPgorICAgIDxJbnREaXI+JChQbGF0Zm9ybSlcJChDb25m aWd1cmF0aW9uKVw8L0ludERpcj4KKyAgICA8VGFyZ2V0TmFtZT4kKFByb2plY3ROYW1lKS12YyQo UGxhdGZvcm1Ub29sc2V0VmVyc2lvbiktJChDb25maWd1cmF0aW9uKTwvVGFyZ2V0TmFtZT4KKyAg PC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3Vy YXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+CisgICAgPE91dERpcj4kKFNvbHV0 aW9uRGlyKSQoUGxhdGZvcm0pXCQoQ29uZmlndXJhdGlvbilcPC9PdXREaXI+CisgICAgPEludERp cj4kKFBsYXRmb3JtKVwkKENvbmZpZ3VyYXRpb24pXDwvSW50RGlyPgorICA8L1Byb3BlcnR5R3Jv dXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0 Zm9ybSknPT0nUmVsZWFzZS1zdGF0aWN8eDY0JyI+CisgICAgPE91dERpcj4kKFNvbHV0aW9uRGly KSQoUGxhdGZvcm0pXCQoQ29uZmlndXJhdGlvbilcPC9PdXREaXI+CisgICAgPEludERpcj4kKFBs YXRmb3JtKVwkKENvbmZpZ3VyYXRpb24pXDwvSW50RGlyPgorICAgIDxUYXJnZXROYW1lPiQoUHJv amVjdE5hbWUpLXZjJChQbGF0Zm9ybVRvb2xzZXRWZXJzaW9uKS0kKENvbmZpZ3VyYXRpb24pPC9U YXJnZXROYW1lPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENv bmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4K KyAgICA8Q2xDb21waWxlPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVj b21waWxlZEhlYWRlcj4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+ CisgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8UHJl cHJvY2Vzc29yRGVmaW5pdGlvbnM+X1JFRU5UUkFOVDtfV0lORExMO0RMTEVYUE9SVDtKRU1BTExP Q19ERUJVRztfREVCVUc7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRl ZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li5cLi5cLi5c Li5caW5jbHVkZTsuLlwuLlwuLlwuLlxpbmNsdWRlXG1zdmNfY29tcGF0OyUoQWRkaXRpb25hbElu Y2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgICA8 RGlzYWJsZVNwZWNpZmljV2FybmluZ3M+NDA5MDs0MTQ2OzQyNjc7NDMzNDwvRGlzYWJsZVNwZWNp ZmljV2FybmluZ3M+CisgICAgICA8UHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU+JChPdXRwdXRQYXRo KSQoVGFyZ2V0TmFtZSkucGRiPC9Qcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT4KKyAgICA8L0NsQ29t cGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+V2luZG93czwvU3ViU3lzdGVtPgor ICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3Jt YXRpb24+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVm aW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0n RGVidWctc3RhdGljfFdpbjMyJyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxQcmVjb21waWxl ZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8V2FybmluZ0xldmVs PkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0 aW1pemF0aW9uPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPkpFTUFMTE9DX0RFQlVH O19SRUVOVFJBTlQ7SkVNQUxMT0NfRVhQT1JUPTtfREVCVUc7X0xJQjslKFByZXByb2Nlc3NvckRl ZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbElu Y2x1ZGVEaXJlY3Rvcmllcz4uLlwuLlwuLlwuLlxpbmNsdWRlOy4uXC4uXC4uXC4uXGluY2x1ZGVc bXN2Y19jb21wYXQ7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbElu Y2x1ZGVEaXJlY3Rvcmllcz4KKyAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkRGVi dWc8L1J1bnRpbWVMaWJyYXJ5PgorICAgICAgPERpc2FibGVTcGVjaWZpY1dhcm5pbmdzPjQwOTA7 NDE0Njs0MjY3OzQzMzQ8L0Rpc2FibGVTcGVjaWZpY1dhcm5pbmdzPgorICAgICAgPFByb2dyYW1E YXRhQmFzZUZpbGVOYW1lPiQoT3V0cHV0UGF0aCkkKFRhcmdldE5hbWUpLnBkYjwvUHJvZ3JhbURh dGFCYXNlRmlsZU5hbWU+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3Vi U3lzdGVtPldpbmRvd3M8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRp b24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgIDwvTGluaz4KKyAgPC9JdGVt RGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENv bmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPgorICAgIDxDbENvbXBpbGU+ CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgor ICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxPcHRpbWl6 YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0 aW9ucz5KRU1BTExPQ19OT19QUklWQVRFX05BTUVTUEFDRTtfUkVFTlRSQU5UO19XSU5ETEw7RExM RVhQT1JUO0pFTUFMTE9DX0RFQlVHO19ERUJVRzslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwv UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rv cmllcz4uLlwuLlwuLlwuLlxpbmNsdWRlOy4uXC4uXC4uXC4uXGluY2x1ZGVcbXN2Y19jb21wYXQ7 JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rv cmllcz4KKyAgICAgIDxEaXNhYmxlU3BlY2lmaWNXYXJuaW5ncz40MDkwOzQxNDY7NDI2Nzs0MzM0 PC9EaXNhYmxlU3BlY2lmaWNXYXJuaW5ncz4KKyAgICAgIDxQcm9ncmFtRGF0YUJhc2VGaWxlTmFt ZT4kKE91dHB1dFBhdGgpJChUYXJnZXROYW1lKS5wZGI8L1Byb2dyYW1EYXRhQmFzZUZpbGVOYW1l PgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5XaW5kb3dz PC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVy YXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91 cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwk KFBsYXRmb3JtKSc9PSdEZWJ1Zy1zdGF0aWN8eDY0JyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAg IDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8 V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPE9wdGltaXphdGlvbj5E aXNhYmxlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPkpF TUFMTE9DX05PX1BSSVZBVEVfTkFNRVNQQUNFO0pFTUFMTE9DX0RFQlVHO19SRUVOVFJBTlQ7SkVN QUxMT0NfRVhQT1JUPTtfREVCVUc7X0xJQjslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJl cHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmll cz4uLlwuLlwuLlwuLlxpbmNsdWRlOy4uXC4uXC4uXC4uXGluY2x1ZGVcbXN2Y19jb21wYXQ7JShB ZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmll cz4KKyAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkRGVidWc8L1J1bnRpbWVMaWJy YXJ5PgorICAgICAgPERpc2FibGVTcGVjaWZpY1dhcm5pbmdzPjQwOTA7NDE0Njs0MjY3OzQzMzQ8 L0Rpc2FibGVTcGVjaWZpY1dhcm5pbmdzPgorICAgICAgPERlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+ T2xkU3R5bGU8L0RlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+CisgICAgICA8TWluaW1hbFJlYnVpbGQ+ ZmFsc2U8L01pbmltYWxSZWJ1aWxkPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAg ICAgPFN1YlN5c3RlbT5XaW5kb3dzPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0lu Zm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICA8L0xpbms+Cisg IDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9u PSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAg PENsQ29tcGlsZT4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+Cisg ICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAg ICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPEZ1bmN0aW9u TGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgorICAgICAgPEludHJpbnNp Y0Z1bmN0aW9ucz50cnVlPC9JbnRyaW5zaWNGdW5jdGlvbnM+CisgICAgICA8UHJlcHJvY2Vzc29y RGVmaW5pdGlvbnM+X1JFRU5UUkFOVDtfV0lORExMO0RMTEVYUE9SVDtOREVCVUc7JShQcmVwcm9j ZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0 aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li5cLi5cLi5cLi5caW5jbHVkZTsuLlwuLlwuLlwuLlxp bmNsdWRlXG1zdmNfY29tcGF0OyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0 aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgICA8RGlzYWJsZVNwZWNpZmljV2FybmluZ3M+ NDA5MDs0MTQ2OzQyNjc7NDMzNDwvRGlzYWJsZVNwZWNpZmljV2FybmluZ3M+CisgICAgICA8UHJv Z3JhbURhdGFCYXNlRmlsZU5hbWU+JChPdXRwdXRQYXRoKSQoVGFyZ2V0TmFtZSkucGRiPC9Qcm9n cmFtRGF0YUJhc2VGaWxlTmFtZT4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAg IDxTdWJTeXN0ZW0+V2luZG93czwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZv cm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8RW5hYmxlQ09N REFURm9sZGluZz50cnVlPC9FbmFibGVDT01EQVRGb2xkaW5nPgorICAgICAgPE9wdGltaXplUmVm ZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+CisgICAgPC9MaW5rPgorICA8L0l0ZW1E ZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29u ZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZS1zdGF0aWN8V2luMzInIj4KKyAgICA8 Q2xDb21waWxlPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAg ICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAg ICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8RnVuY3Rpb25M ZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+CisgICAgICA8SW50cmluc2lj RnVuY3Rpb25zPnRydWU8L0ludHJpbnNpY0Z1bmN0aW9ucz4KKyAgICAgIDxQcmVwcm9jZXNzb3JE ZWZpbml0aW9ucz5fUkVFTlRSQU5UO0pFTUFMTE9DX0VYUE9SVD07TkRFQlVHO19MSUI7JShQcmVw cm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFk ZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li5cLi5cLi5cLi5caW5jbHVkZTsuLlwuLlwuLlwu LlxpbmNsdWRlXG1zdmNfY29tcGF0OyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0Fk ZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlU aHJlYWRlZDwvUnVudGltZUxpYnJhcnk+CisgICAgICA8RGlzYWJsZVNwZWNpZmljV2FybmluZ3M+ NDA5MDs0MTQ2OzQyNjc7NDMzNDwvRGlzYWJsZVNwZWNpZmljV2FybmluZ3M+CisgICAgICA8UHJv Z3JhbURhdGFCYXNlRmlsZU5hbWU+JChPdXRwdXRQYXRoKSQoVGFyZ2V0TmFtZSkucGRiPC9Qcm9n cmFtRGF0YUJhc2VGaWxlTmFtZT4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAg IDxTdWJTeXN0ZW0+V2luZG93czwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZv cm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8RW5hYmxlQ09N REFURm9sZGluZz50cnVlPC9FbmFibGVDT01EQVRGb2xkaW5nPgorICAgICAgPE9wdGltaXplUmVm ZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+CisgICAgPC9MaW5rPgorICA8L0l0ZW1E ZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29u ZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KKyAgICA8Q2xDb21waWxl PgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxQcmVj b21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8T3B0aW1p emF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtp bmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+CisgICAgICA8SW50cmluc2ljRnVuY3Rpb25z PnRydWU8L0ludHJpbnNpY0Z1bmN0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVj dG9yaWVzPi4uXC4uXC4uXC4uXGluY2x1ZGU7Li5cLi5cLi5cLi5caW5jbHVkZVxtc3ZjX2NvbXBh dDslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVj dG9yaWVzPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPkpFTUFMTE9DX05PX1BSSVZB VEVfTkFNRVNQQUNFO19SRUVOVFJBTlQ7X1dJTkRMTDtETExFWFBPUlQ7TkRFQlVHOyUoUHJlcHJv Y2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxEaXNh YmxlU3BlY2lmaWNXYXJuaW5ncz40MDkwOzQxNDY7NDI2Nzs0MzM0PC9EaXNhYmxlU3BlY2lmaWNX YXJuaW5ncz4KKyAgICAgIDxQcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT4kKE91dHB1dFBhdGgpJChU YXJnZXROYW1lKS5wZGI8L1Byb2dyYW1EYXRhQmFzZUZpbGVOYW1lPgorICAgIDwvQ2xDb21waWxl PgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5XaW5kb3dzPC9TdWJTeXN0ZW0+CisgICAg ICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlv bj4KKyAgICAgIDxFbmFibGVDT01EQVRGb2xkaW5nPnRydWU8L0VuYWJsZUNPTURBVEZvbGRpbmc+ CisgICAgICA8T3B0aW1pemVSZWZlcmVuY2VzPnRydWU8L09wdGltaXplUmVmZXJlbmNlcz4KKyAg ICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3Jv dXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlLXN0 YXRpY3x4NjQnIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8 L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29t cGlsZWRIZWFkZXI+CisgICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+ CisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+ CisgICAgICA8SW50cmluc2ljRnVuY3Rpb25zPnRydWU8L0ludHJpbnNpY0Z1bmN0aW9ucz4KKyAg ICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5KRU1BTExPQ19OT19QUklWQVRFX05BTUVTUEFD RTtfUkVFTlRSQU5UO0pFTUFMTE9DX0VYUE9SVD07TkRFQlVHO19MSUI7JShQcmVwcm9jZXNzb3JE ZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJ bmNsdWRlRGlyZWN0b3JpZXM+Li5cLi5cLi5cLi5caW5jbHVkZTsuLlwuLlwuLlwuLlxpbmNsdWRl XG1zdmNfY29tcGF0OyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJ bmNsdWRlRGlyZWN0b3JpZXM+CisgICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZDwv UnVudGltZUxpYnJhcnk+CisgICAgICA8RGlzYWJsZVNwZWNpZmljV2FybmluZ3M+NDA5MDs0MTQ2 OzQyNjc7NDMzNDwvRGlzYWJsZVNwZWNpZmljV2FybmluZ3M+CisgICAgICA8RGVidWdJbmZvcm1h dGlvbkZvcm1hdD5PbGRTdHlsZTwvRGVidWdJbmZvcm1hdGlvbkZvcm1hdD4KKyAgICA8L0NsQ29t cGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+V2luZG93czwvU3ViU3lzdGVtPgor ICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3Jt YXRpb24+CisgICAgICA8RW5hYmxlQ09NREFURm9sZGluZz50cnVlPC9FbmFibGVDT01EQVRGb2xk aW5nPgorICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+ CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJbXBvcnQgUHJvamVj dD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+CisgIDxJbXBvcnRH cm91cCBMYWJlbD0iRXh0ZW5zaW9uVGFyZ2V0cyI+CisgIDwvSW1wb3J0R3JvdXA+Cis8L1Byb2pl Y3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNl LTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL21zdmMvcHJvamVjdHMvdmMyMDE3L2plbWFsbG9j L2plbWFsbG9jLnZjeHByb2ouZmlsdGVycyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFs bG9jLTUuMy4wL21zdmMvcHJvamVjdHMvdmMyMDE3L2plbWFsbG9jL2plbWFsbG9jLnZjeHByb2ou ZmlsdGVycwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjQzZTlmCi0tLSAv ZGV2L251bGwKKysrIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvbXN2 Yy9wcm9qZWN0cy92YzIwMTcvamVtYWxsb2MvamVtYWxsb2MudmN4cHJvai5maWx0ZXJzCkBAIC0w LDAgKzEsMTk3IEBACivvu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/Pgor PFByb2plY3QgVG9vbHNWZXJzaW9uPSI0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3Nv ZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgorICA8SXRlbUdyb3VwPgorICAgIDxGaWx0 ZXIgSW5jbHVkZT0iU291cmNlIEZpbGVzIj4KKyAgICAgIDxVbmlxdWVJZGVudGlmaWVyPns0RkM3 MzdGMS1DN0E1LTQzNzYtQTA2Ni0yQTMyRDc1MkEyRkZ9PC9VbmlxdWVJZGVudGlmaWVyPgorICAg ICAgPEV4dGVuc2lvbnM+Y3BwO2M7Y2M7Y3h4O2RlZjtvZGw7aWRsO2hwajtiYXQ7YXNtO2FzbXg8 L0V4dGVuc2lvbnM+CisgICAgPC9GaWx0ZXI+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3Vw PgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5cc3JjXGFyZW5hLmMiPgorICAg ICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8 Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1xiYWNrZ3JvdW5kX3RocmVhZC5jIj4K KyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+Cisg ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlwuLlxzcmNcYmFzZS5jIj4KKyAgICAgIDxG aWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29t cGlsZSBJbmNsdWRlPSIuLlwuLlwuLlwuLlxzcmNcYmluLmMiPgorICAgICAgPEZpbHRlcj5Tb3Vy Y2UgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1 ZGU9Ii4uXC4uXC4uXC4uXHNyY1xiaXRtYXAuYyI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxl czwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c Li5cLi5cLi5cc3JjXGJ1Zl93cml0ZXIuYyI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwv RmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5c Li5cLi5cc3JjXGNhY2hlX2Jpbi5jIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0 ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlwu LlxzcmNcY2toLmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KKyAgICA8 L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1xjb3Vu dGVyLmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsQ29t cGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1xjdGwuYyI+Cisg ICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAg IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5cc3JjXGRlY2F5LmMiPgorICAgICAgPEZp bHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21w aWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1xkaXYuYyI+CisgICAgICA8RmlsdGVyPlNvdXJj ZSBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVk ZT0iLi5cLi5cLi5cLi5cc3JjXGVtYXAuYyI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwv RmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5c Li5cLi5cc3JjXGV4cF9ncm93LmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRl cj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4u XHNyY1xleHRlbnQuYyI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgorICAg IDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5cc3JjXGV4 dGVudF9kc3MuYyI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgorICAgIDwv Q2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5cc3JjXGV4dGVu dF9tbWFwLmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0Ns Q29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1xmeHAuYyI+ CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgor ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5cc3JjXGhvb2suYyI+CisgICAgICA8 RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENv bXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5cc3JjXGhwYS5jIj4KKyAgICAgIDxGaWx0ZXI+U291 cmNlIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNs dWRlPSIuLlwuLlwuLlwuLlxzcmNcaHBhX2hvb2tzLmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2Ug RmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9 Ii4uXC4uXC4uXC4uXHNyY1xocGRhdGEuYyI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwv RmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5c Li5cLi5cc3JjXGluc3BlY3QuYyI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVy PgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5c c3JjXGplbWFsbG9jLmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KKyAg ICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1xs YXJnZS5jIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbENv bXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlwuLlxzcmNcbG9nLmMiPgor ICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAg ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1xtYWxsb2NfaW8uYyI+CisgICAg ICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxD bENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5cc3JjXG11dGV4LmMiPgorICAgICAgPEZpbHRl cj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxl IEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1xuc3RpbWUuYyI+CisgICAgICA8RmlsdGVyPlNvdXJj ZSBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVk ZT0iLi5cLi5cLi5cLi5cc3JjXHBhLmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0Zp bHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4u XC4uXHNyY1xwYV9leHRyYS5jIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+ CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlwuLlxz cmNccGFpLmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0Ns Q29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1xwYWMuYyI+ CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgor ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5cc3JjXHBhZ2VzLmMiPgorICAgICAg PEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xD b21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1xwZWFrX2V2ZW50LmMiPgorICAgICAgPEZp bHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21w aWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1xwcm9mLmMiPgorICAgICAgPEZpbHRlcj5Tb3Vy Y2UgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1 ZGU9Ii4uXC4uXC4uXC4uXHNyY1xwcm9mX2RhdGEuYyI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBG aWxlczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i Li5cLi5cLi5cLi5cc3JjXHByb2ZfbG9nLmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8 L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4u XC4uXC4uXHNyY1xwcm9mX3JlY2VudC5jIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9G aWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwu LlwuLlxzcmNccHJvZl9zdGF0cy5jIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0 ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlwu LlxzcmNccHJvZl9zeXMuYyI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgor ICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5cc3Jj XHBzc2V0LmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0Ns Q29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1xydHJlZS5j Ij4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+ CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlwuLlxzcmNcc2FmZXR5X2NoZWNrLmMi PgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4K KyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1xzYy5jIj4KKyAgICAgIDxG aWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29t cGlsZSBJbmNsdWRlPSIuLlwuLlwuLlwuLlxzcmNcc2VjLmMiPgorICAgICAgPEZpbHRlcj5Tb3Vy Y2UgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1 ZGU9Ii4uXC4uXC4uXC4uXHNyY1xzdGF0cy5jIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVz PC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwu LlwuLlwuLlxzcmNcc3ouYyI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgor ICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5cc3Jj XHRjYWNoZS5jIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9D bENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlwuLlxzcmNcdGVzdF9o b29rcy5jIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbENv bXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlwuLlxzcmNcdGhyZWFkX2V2 ZW50LmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsQ29t cGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1x0aWNrZXIuYyI+ CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgor ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5cc3JjXHRzZC5jIj4KKyAgICAgIDxG aWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29t cGlsZSBJbmNsdWRlPSIuLlwuLlwuLlwuLlxzcmNcd2l0bmVzcy5jIj4KKyAgICAgIDxGaWx0ZXI+ U291cmNlIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJ bmNsdWRlPSIuLlwuLlwuLlwuLlxzcmNcYmluX2luZm8uYyI+CisgICAgICA8RmlsdGVyPlNvdXJj ZSBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVk ZT0iLi5cLi5cLi5cLi5cc3JjXGVjYWNoZS5jIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVz PC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwu LlwuLlwuLlxzcmNcZWRhdGEuYyI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVy PgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5c c3JjXGVkYXRhX2NhY2hlLmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4K KyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNy Y1xlaG9va3MuYyI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgorICAgIDwv Q2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5cc3JjXGVzZXQu YyI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxl PgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5cc3JjXHNhbi5jIj4KKyAgICAg IDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENs Q29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlwuLlxzcmNcc2FuX2J1bXAuYyI+CisgICAgICA8Rmls dGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICA8L0l0ZW1Hcm91 cD4KKzwvUHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCgpkaWZmIC0tZ2l0IGEv Mzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvbXN2Yy9wcm9qZWN0cy92YzIw MTcvdGVzdF90aHJlYWRzL3Rlc3RfdGhyZWFkcy52Y3hwcm9qIGIvMzg5LWRzLWJhc2UtMy4zLjAt YnVpbGQvamVtYWxsb2MtNS4zLjAvbXN2Yy9wcm9qZWN0cy92YzIwMTcvdGVzdF90aHJlYWRzL3Rl c3RfdGhyZWFkcy52Y3hwcm9qCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMz NWIwZjUKLS0tIC9kZXYvbnVsbAorKysgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxv Yy01LjMuMC9tc3ZjL3Byb2plY3RzL3ZjMjAxNy90ZXN0X3RocmVhZHMvdGVzdF90aHJlYWRzLnZj eHByb2oKQEAgLTAsMCArMSwzMjYgQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9 InV0Zi04Ij8+Cis8UHJvamVjdCBEZWZhdWx0VGFyZ2V0cz0iQnVpbGQiIFRvb2xzVmVyc2lvbj0i MTUuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVp bGQvMjAwMyI+CisgIDxJdGVtR3JvdXAgTGFiZWw9IlByb2plY3RDb25maWd1cmF0aW9ucyI+Cisg ICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnLXN0YXRpY3xXaW4zMiI+Cisg ICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1Zy1zdGF0aWM8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8 UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+Cisg ICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnLXN0YXRpY3x4NjQiPgorICAg ICAgPENvbmZpZ3VyYXRpb24+RGVidWctc3RhdGljPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBs YXRmb3JtPng2NDwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8 UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8V2luMzIiPgorICAgICAgPENvbmZp Z3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+V2luMzI8L1Bs YXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1 cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2Utc3RhdGljfFdpbjMyIj4KKyAgICAgIDxDb25maWd1cmF0 aW9uPlJlbGVhc2Utc3RhdGljPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPldpbjMy PC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29u ZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlLXN0YXRpY3x4NjQiPgorICAgICAgPENvbmZpZ3Vy YXRpb24+UmVsZWFzZS1zdGF0aWM8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+eDY0 PC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29u ZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfFdpbjMyIj4KKyAgICAgIDxDb25maWd1cmF0aW9u PlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3Jt PgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9u IEluY2x1ZGU9IkRlYnVnfHg2NCI+CisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmln dXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENv bmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8 eDY0Ij4KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+CisgICAg ICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgor ICA8L0l0ZW1Hcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9Ikdsb2JhbHMiPgorICAgIDxQ cm9qZWN0R3VpZD57MDkwMjhDRkQtNEVCNy00OTFELTg2OUMtMDcwOERCOTdFRDQ0fTwvUHJvamVj dEd1aWQ+CisgICAgPEtleXdvcmQ+V2luMzJQcm9qPC9LZXl3b3JkPgorICAgIDxSb290TmFtZXNw YWNlPnRlc3RfdGhyZWFkczwvUm9vdE5hbWVzcGFjZT4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8 SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5EZWZhdWx0LnBy b3BzIiAvPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQo UGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxD b25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVz ZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxQbGF0Zm9ybVRv b2xzZXQ+djE0MTwvUGxhdGZvcm1Ub29sc2V0PgorICAgIDxDaGFyYWN0ZXJTZXQ+TXVsdGlCeXRl PC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29u ZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Zy1zdGF0aWN8V2lu MzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxp Y2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+dHJ1ZTwv VXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFBsYXRmb3JtVG9vbHNldD52MTQxPC9QbGF0Zm9ybVRv b2xzZXQ+CisgICAgPENoYXJhY3RlclNldD5NdWx0aUJ5dGU8L0NoYXJhY3RlclNldD4KKyAgPC9Q cm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRp b24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+ CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4K KyAgICA8VXNlRGVidWdMaWJyYXJpZXM+ZmFsc2U8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxQ bGF0Zm9ybVRvb2xzZXQ+djE0MTwvUGxhdGZvcm1Ub29sc2V0PgorICAgIDxXaG9sZVByb2dyYW1P cHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgorICAgIDxDaGFyYWN0 ZXJTZXQ+TXVsdGlCeXRlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFBy b3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdS ZWxlYXNlLXN0YXRpY3xXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmln dXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1 Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFBsYXRmb3JtVG9vbHNl dD52MTQxPC9QbGF0Zm9ybVRvb2xzZXQ+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50 cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgICAgPENoYXJhY3RlclNldD5NdWx0aUJ5 dGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBD b25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExh YmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248 L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz50cnVlPC9Vc2VEZWJ1 Z0xpYnJhcmllcz4KKyAgICA8UGxhdGZvcm1Ub29sc2V0PnYxNDE8L1BsYXRmb3JtVG9vbHNldD4K KyAgICA8Q2hhcmFjdGVyU2V0Pk11bHRpQnl0ZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5 R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQ bGF0Zm9ybSknPT0nRGVidWctc3RhdGljfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAg ICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAg IDxVc2VEZWJ1Z0xpYnJhcmllcz50cnVlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8UGxhdGZv cm1Ub29sc2V0PnYxNDE8L1BsYXRmb3JtVG9vbHNldD4KKyAgICA8Q2hhcmFjdGVyU2V0Pk11bHRp Qnl0ZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3Vw IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQn IiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0 aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+ZmFsc2U8L1Vz ZURlYnVnTGlicmFyaWVzPgorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+djE0MTwvUGxhdGZvcm1Ub29s c2V0PgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0 aW1pemF0aW9uPgorICAgIDxDaGFyYWN0ZXJTZXQ+TXVsdGlCeXRlPC9DaGFyYWN0ZXJTZXQ+Cisg IDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1 cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlLXN0YXRpY3x4NjQnIiBMYWJlbD0iQ29uZmln dXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0 aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+ZmFsc2U8L1VzZURlYnVnTGlicmFyaWVz PgorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+djE0MTwvUGxhdGZvcm1Ub29sc2V0PgorICAgIDxXaG9s ZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgorICAg IDxDaGFyYWN0ZXJTZXQ+TXVsdGlCeXRlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91 cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAucHJv cHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uU2V0dGluZ3MiPgorICA8L0lt cG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlNoYXJlZCI+CisgIDwvSW1wb3J0R3Jv dXA+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiIENvbmRpdGlvbj0iJyQo Q29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8SW1wb3J0 IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5w cm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQ bGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Cisg IDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRp b24pfCQoUGxhdGZvcm0pJz09J0RlYnVnLXN0YXRpY3xXaW4zMiciIExhYmVsPSJQcm9wZXJ0eVNo ZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3Bw LiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGly KVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBw RGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9 IlByb3BlcnR5U2hlZXRzIiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0p Jz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIp XE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMo JyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBM YWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBv cnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVh c2Utc3RhdGljfFdpbjMyJyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFBy b2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9w cyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0 Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwv SW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiIENvbmRp dGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+CisgICAg PEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0p LnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQu Q3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3Jt IiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25m aWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Zy1zdGF0aWN8eDY0JyIgTGFiZWw9IlByb3Bl cnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29m dC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJv b3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9j YWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBM YWJlbD0iUHJvcGVydHlTaGVldHMiIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0 Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3RE aXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlz dHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycp IiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJ bXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1Jl bGVhc2Utc3RhdGljfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQ cm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJv cHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxh dGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8 L0ltcG9ydEdyb3VwPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iVXNlck1hY3JvcyIgLz4KKyAg PFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9 PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxPdXREaXI+JChTb2x1dGlvbkRpcikkKFBsYXRmb3JtKVwk KENvbmZpZ3VyYXRpb24pXDwvT3V0RGlyPgorICAgIDxJbnREaXI+JChQbGF0Zm9ybSlcJChDb25m aWd1cmF0aW9uKVw8L0ludERpcj4KKyAgICA8TGlua0luY3JlbWVudGFsPnRydWU8L0xpbmtJbmNy ZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249 IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnLXN0YXRpY3xXaW4zMiciPgor ICAgIDxPdXREaXI+JChTb2x1dGlvbkRpcikkKFBsYXRmb3JtKVwkKENvbmZpZ3VyYXRpb24pXDwv T3V0RGlyPgorICAgIDxJbnREaXI+JChQbGF0Zm9ybSlcJChDb25maWd1cmF0aW9uKVw8L0ludERp cj4KKyAgICA8TGlua0luY3JlbWVudGFsPnRydWU8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9w ZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24p fCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+dHJ1ZTwv TGlua0luY3JlbWVudGFsPgorICAgIDxPdXREaXI+JChTb2x1dGlvbkRpcikkKFBsYXRmb3JtKVwk KENvbmZpZ3VyYXRpb24pXDwvT3V0RGlyPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0 eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWct c3RhdGljfHg2NCciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+dHJ1ZTwvTGlua0luY3JlbWVudGFs PgorICAgIDxPdXREaXI+JChTb2x1dGlvbkRpcikkKFBsYXRmb3JtKVwkKENvbmZpZ3VyYXRpb24p XDwvT3V0RGlyPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlv bj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAg IDxPdXREaXI+JChTb2x1dGlvbkRpcikkKFBsYXRmb3JtKVwkKENvbmZpZ3VyYXRpb24pXDwvT3V0 RGlyPgorICAgIDxJbnREaXI+JChQbGF0Zm9ybSlcJChDb25maWd1cmF0aW9uKVw8L0ludERpcj4K KyAgICA8TGlua0luY3JlbWVudGFsPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVy dHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwk KFBsYXRmb3JtKSc9PSdSZWxlYXNlLXN0YXRpY3xXaW4zMiciPgorICAgIDxPdXREaXI+JChTb2x1 dGlvbkRpcikkKFBsYXRmb3JtKVwkKENvbmZpZ3VyYXRpb24pXDwvT3V0RGlyPgorICAgIDxJbnRE aXI+JChQbGF0Zm9ybSlcJChDb25maWd1cmF0aW9uKVw8L0ludERpcj4KKyAgICA8TGlua0luY3Jl bWVudGFsPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFBy b3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdS ZWxlYXNlfHg2NCciPgorICAgIDxPdXREaXI+JChTb2x1dGlvbkRpcikkKFBsYXRmb3JtKVwkKENv bmZpZ3VyYXRpb24pXDwvT3V0RGlyPgorICAgIDxJbnREaXI+JChQbGF0Zm9ybSlcJChDb25maWd1 cmF0aW9uKVw8L0ludERpcj4KKyAgICA8TGlua0luY3JlbWVudGFsPmZhbHNlPC9MaW5rSW5jcmVt ZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSIn JChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlLXN0YXRpY3x4NjQnIj4KKyAg ICA8T3V0RGlyPiQoU29sdXRpb25EaXIpJChQbGF0Zm9ybSlcJChDb25maWd1cmF0aW9uKVw8L091 dERpcj4KKyAgICA8SW50RGlyPiQoUGxhdGZvcm0pXCQoQ29uZmlndXJhdGlvbilcPC9JbnREaXI+ CisgICAgPExpbmtJbmNyZW1lbnRhbD5mYWxzZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3Bl cnR5R3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJh dGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8Q2xDb21waWxlPgorICAg ICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAg IDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8T3B0aW1pemF0aW9u PkRpc2FibGVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+ V0lOMzI7X0RFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9j ZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4u XC4uXC4uXC4uXHRlc3RcaW5jbHVkZTsuLlwuLlwuLlwuLlxpbmNsdWRlOy4uXC4uXC4uXC4uXGlu Y2x1ZGVcbXN2Y19jb21wYXQ7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRp b25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAg ICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJ bmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8QWRkaXRp b25hbExpYnJhcnlEaXJlY3Rvcmllcz4kKFNvbHV0aW9uRGlyKSQoUGxhdGZvcm0pXCQoQ29uZmln dXJhdGlvbik8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgICA8QWRkaXRpb25h bERlcGVuZGVuY2llcz5qZW1hbGxvY2QubGliO2tlcm5lbDMyLmxpYjt1c2VyMzIubGliO2dkaTMy LmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGliO2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxpYjtv bGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGliO29kYmMzMi5saWI7b2RiY2NwMzIubGliOyUo QWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgPC9M aW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENv bmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWctc3RhdGljfFdp bjMyJyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAg IDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2Fybmlu Z0xldmVsPgorICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgorICAg ICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPkpFTUFMTE9DX0VYUE9SVD07SkVNQUxMT0NfU1RB VElDO19ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vz c29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLlwu LlwuLlwuLlx0ZXN0XGluY2x1ZGU7Li5cLi5cLi5cLi5caW5jbHVkZTsuLlwuLlwuLlwuLlxpbmNs dWRlXG1zdmNfY29tcGF0OyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9u YWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRl ZERlYnVnPC9SdW50aW1lTGlicmFyeT4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAg ICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJ bmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8QWRkaXRp b25hbExpYnJhcnlEaXJlY3Rvcmllcz4kKFNvbHV0aW9uRGlyKSQoUGxhdGZvcm0pXCQoQ29uZmln dXJhdGlvbik8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgICA8QWRkaXRpb25h bERlcGVuZGVuY2llcz5qZW1hbGxvYy0kKFBsYXRmb3JtVG9vbHNldCktJChDb25maWd1cmF0aW9u KS5saWI7a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGliO3dpbnNwb29sLmxpYjtjb21k bGczMi5saWI7YWR2YXBpMzIubGliO3NoZWxsMzIubGliO29sZTMyLmxpYjtvbGVhdXQzMi5saWI7 dXVpZC5saWI7b2RiYzMyLmxpYjtvZGJjY3AzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVz KTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRp b25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0 aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAg PFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxX YXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8T3B0aW1pemF0aW9uPkRp c2FibGVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+X0RF QlVHOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4K KyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uXC4uXC4uXC4uXHRlc3RcaW5j bHVkZTsuLlwuLlwuLlwuLlxpbmNsdWRlOy4uXC4uXC4uXC4uXGluY2x1ZGVcbXN2Y19jb21wYXQ7 JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rv cmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29u c29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9H ZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5q ZW1hbGxvY2QubGliO2tlcm5lbDMyLmxpYjt1c2VyMzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5s aWI7Y29tZGxnMzIubGliO2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0 MzIubGliO3V1aWQubGliO29kYmMzMi5saWI7b2RiY2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVu ZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJh cnlEaXJlY3Rvcmllcz4kKFNvbHV0aW9uRGlyKSQoUGxhdGZvcm0pXCQoQ29uZmlndXJhdGlvbik8 L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZp bml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmln dXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWctc3RhdGljfHg2NCciPgorICAgIDxDbENvbXBp bGU+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVy PgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxPcHRp bWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZp bml0aW9ucz5KRU1BTExPQ19FWFBPUlQ9O0pFTUFMTE9DX1NUQVRJQztfREVCVUc7JShQcmVwcm9j ZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0 aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li5cLi5cLi5cLi5cdGVzdFxpbmNsdWRlOy4uXC4uXC4u XC4uXGluY2x1ZGU7Li5cLi5cLi5cLi5caW5jbHVkZVxtc3ZjX2NvbXBhdDslKEFkZGl0aW9uYWxJ bmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgICAg PFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWREZWJ1ZzwvUnVudGltZUxpYnJhcnk+CisgICAg PC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5 c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1 Z0luZm9ybWF0aW9uPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+amVtYWxsb2MtdmMk KFBsYXRmb3JtVG9vbHNldFZlcnNpb24pLSQoQ29uZmlndXJhdGlvbikubGliO2tlcm5lbDMyLmxp Yjt1c2VyMzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGliO2FkdmFwaTMy LmxpYjtzaGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGliO29kYmMzMi5s aWI7b2RiY2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBl bmRlbmNpZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4kKFNvbHV0aW9u RGlyKSQoUGxhdGZvcm0pXCQoQ29uZmlndXJhdGlvbik8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0 b3JpZXM+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVm aW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0n UmVsZWFzZXxXaW4zMiciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8V2FybmluZ0xldmVsPkxl dmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9Q cmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXph dGlvbj4KKyAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlu a2luZz4KKyAgICAgIDxJbnRyaW5zaWNGdW5jdGlvbnM+dHJ1ZTwvSW50cmluc2ljRnVuY3Rpb25z PgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO05ERUJVRztfQ09OU09MRTsl KFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAg ICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLlwuLlwuLlwuLlx0ZXN0XGluY2x1ZGU7 Li5cLi5cLi5cLi5caW5jbHVkZTsuLlwuLlwuLlwuLlxpbmNsdWRlXG1zdmNfY29tcGF0OyUoQWRk aXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+ CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8 L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJh dGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPEVuYWJsZUNPTURBVEZvbGRpbmc+dHJ1ZTwvRW5h YmxlQ09NREFURm9sZGluZz4KKyAgICAgIDxPcHRpbWl6ZVJlZmVyZW5jZXM+dHJ1ZTwvT3B0aW1p emVSZWZlcmVuY2VzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+JChTb2x1 dGlvbkRpcikkKFBsYXRmb3JtKVwkKENvbmZpZ3VyYXRpb24pPC9BZGRpdGlvbmFsTGlicmFyeURp cmVjdG9yaWVzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+amVtYWxsb2MubGliO2tl cm5lbDMyLmxpYjt1c2VyMzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGli O2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGli O29kYmMzMi5saWI7b2RiY2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0 aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+ CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQ bGF0Zm9ybSknPT0nUmVsZWFzZS1zdGF0aWN8V2luMzInIj4KKyAgICA8Q2xDb21waWxlPgorICAg ICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxQcmVjb21waWxl ZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8T3B0aW1pemF0aW9u Pk1heFNwZWVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1 ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+CisgICAgICA8SW50cmluc2ljRnVuY3Rpb25zPnRydWU8 L0ludHJpbnNpY0Z1bmN0aW9ucz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5KRU1B TExPQ19FWFBPUlQ9O0pFTUFMTE9DX1NUQVRJQztOREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNz b3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9u YWxJbmNsdWRlRGlyZWN0b3JpZXM+Li5cLi5cLi5cLi5cdGVzdFxpbmNsdWRlOy4uXC4uXC4uXC4u XGluY2x1ZGU7Li5cLi5cLi5cLi5caW5jbHVkZVxtc3ZjX2NvbXBhdDslKEFkZGl0aW9uYWxJbmNs dWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgICAgPFJ1 bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWQ8L1J1bnRpbWVMaWJyYXJ5PgorICAgIDwvQ2xDb21w aWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+Cisg ICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1h dGlvbj4KKyAgICAgIDxFbmFibGVDT01EQVRGb2xkaW5nPnRydWU8L0VuYWJsZUNPTURBVEZvbGRp bmc+CisgICAgICA8T3B0aW1pemVSZWZlcmVuY2VzPnRydWU8L09wdGltaXplUmVmZXJlbmNlcz4K KyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPiQoU29sdXRpb25EaXIpJChQbGF0 Zm9ybSlcJChDb25maWd1cmF0aW9uKTwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAg ICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmplbWFsbG9jLSQoUGxhdGZvcm1Ub29sc2V0KS0k KENvbmZpZ3VyYXRpb24pLmxpYjtrZXJuZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7d2lu c3Bvb2wubGliO2NvbWRsZzMyLmxpYjthZHZhcGkzMi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGli O29sZWF1dDMyLmxpYjt1dWlkLmxpYjtvZGJjMzIubGliO29kYmNjcDMyLmxpYjslKEFkZGl0aW9u YWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgIDwvTGluaz4KKyAg PC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249 IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+CisgICAgPENs Q29tcGlsZT4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAg ICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAg PE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPEZ1bmN0aW9uTGV2 ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgorICAgICAgPEludHJpbnNpY0Z1 bmN0aW9ucz50cnVlPC9JbnRyaW5zaWNGdW5jdGlvbnM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVm aW5pdGlvbnM+TkRFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVw cm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVz Pi4uXC4uXC4uXC4uXHRlc3RcaW5jbHVkZTsuLlwuLlwuLlwuLlxpbmNsdWRlOy4uXC4uXC4uXC4u XGluY2x1ZGVcbXN2Y19jb21wYXQ7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRk aXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4K KyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVi dWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8RW5h YmxlQ09NREFURm9sZGluZz50cnVlPC9FbmFibGVDT01EQVRGb2xkaW5nPgorICAgICAgPE9wdGlt aXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+CisgICAgICA8QWRkaXRpb25h bExpYnJhcnlEaXJlY3Rvcmllcz4kKFNvbHV0aW9uRGlyKSQoUGxhdGZvcm0pXCQoQ29uZmlndXJh dGlvbik8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgICA8QWRkaXRpb25hbERl cGVuZGVuY2llcz5qZW1hbGxvYy5saWI7a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGli O3dpbnNwb29sLmxpYjtjb21kbGczMi5saWI7YWR2YXBpMzIubGliO3NoZWxsMzIubGliO29sZTMy LmxpYjtvbGVhdXQzMi5saWI7dXVpZC5saWI7b2RiYzMyLmxpYjtvZGJjY3AzMi5saWI7JShBZGRp dGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICA8L0xpbms+ CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0 aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlLXN0YXRpY3x4NjQn Ij4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdM ZXZlbD4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFk ZXI+CisgICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8 RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+CisgICAgICA8 SW50cmluc2ljRnVuY3Rpb25zPnRydWU8L0ludHJpbnNpY0Z1bmN0aW9ucz4KKyAgICAgIDxQcmVw cm9jZXNzb3JEZWZpbml0aW9ucz5KRU1BTExPQ19FWFBPUlQ9O0pFTUFMTE9DX1NUQVRJQztOREVC VUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmlu aXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li5cLi5cLi5cLi5c dGVzdFxpbmNsdWRlOy4uXC4uXC4uXC4uXGluY2x1ZGU7Li5cLi5cLi5cLi5caW5jbHVkZVxtc3Zj X2NvbXBhdDslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVk ZURpcmVjdG9yaWVzPgorICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWQ8L1J1bnRp bWVMaWJyYXJ5PgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3Rl bT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRy dWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxFbmFibGVDT01EQVRGb2xkaW5n PnRydWU8L0VuYWJsZUNPTURBVEZvbGRpbmc+CisgICAgICA8T3B0aW1pemVSZWZlcmVuY2VzPnRy dWU8L09wdGltaXplUmVmZXJlbmNlcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9y aWVzPiQoU29sdXRpb25EaXIpJChQbGF0Zm9ybSlcJChDb25maWd1cmF0aW9uKTwvQWRkaXRpb25h bExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmplbWFs bG9jLXZjJChQbGF0Zm9ybVRvb2xzZXRWZXJzaW9uKS0kKENvbmZpZ3VyYXRpb24pLmxpYjtrZXJu ZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7d2luc3Bvb2wubGliO2NvbWRsZzMyLmxpYjth ZHZhcGkzMi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjtv ZGJjMzIubGliO29kYmNjcDMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlv bmFsRGVwZW5kZW5jaWVzPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgor ICA8SXRlbUdyb3VwPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cdGVzdF90aHJl YWRzXHRlc3RfdGhyZWFkcy5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwu Llx0ZXN0X3RocmVhZHNcdGVzdF90aHJlYWRzX21haW4uY3BwIiAvPgorICA8L0l0ZW1Hcm91cD4K KyAgPEl0ZW1Hcm91cD4KKyAgICA8UHJvamVjdFJlZmVyZW5jZSBJbmNsdWRlPSIuLlxqZW1hbGxv Y1xqZW1hbGxvYy52Y3hwcm9qIj4KKyAgICAgIDxQcm9qZWN0Pns4ZDZiYjI5Mi05ZTFjLTQxM2Qt OWY5OC00ODY0YmRjMTUxNGF9PC9Qcm9qZWN0PgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAg PC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwu LlwuLlx0ZXN0X3RocmVhZHNcdGVzdF90aHJlYWRzLmgiIC8+CisgIDwvSXRlbUdyb3VwPgorICA8 SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC50YXJnZXRzIiAv PgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblRhcmdldHMiPgorICA8L0ltcG9ydEdy b3VwPgorPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKCmRpZmYgLS1naXQg YS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9tc3ZjL3Byb2plY3RzL3Zj MjAxNy90ZXN0X3RocmVhZHMvdGVzdF90aHJlYWRzLnZjeHByb2ouZmlsdGVycyBiLzM4OS1kcy1i YXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL21zdmMvcHJvamVjdHMvdmMyMDE3L3Rlc3Rf dGhyZWFkcy90ZXN0X3RocmVhZHMudmN4cHJvai5maWx0ZXJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAuLmZhNDU4OGYKLS0tIC9kZXYvbnVsbAorKysgYi8zODktZHMtYmFzZS0z LjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9tc3ZjL3Byb2plY3RzL3ZjMjAxNy90ZXN0X3RocmVh ZHMvdGVzdF90aHJlYWRzLnZjeHByb2ouZmlsdGVycwpAQCAtMCwwICsxLDI2IEBACivvu788P3ht bCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPFByb2plY3QgVG9vbHNWZXJzaW9u PSI0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1 aWxkLzIwMDMiPgorICA8SXRlbUdyb3VwPgorICAgIDxGaWx0ZXIgSW5jbHVkZT0iU291cmNlIEZp bGVzIj4KKyAgICAgIDxVbmlxdWVJZGVudGlmaWVyPns0RkM3MzdGMS1DN0E1LTQzNzYtQTA2Ni0y QTMyRDc1MkEyRkZ9PC9VbmlxdWVJZGVudGlmaWVyPgorICAgICAgPEV4dGVuc2lvbnM+Y3BwO2M7 Y2M7Y3h4O2RlZjtvZGw7aWRsO2hwajtiYXQ7YXNtO2FzbXg8L0V4dGVuc2lvbnM+CisgICAgPC9G aWx0ZXI+CisgICAgPEZpbHRlciBJbmNsdWRlPSJIZWFkZXIgRmlsZXMiPgorICAgICAgPFVuaXF1 ZUlkZW50aWZpZXI+ezkzOTk1MzgwLTg5QkQtNGIwNC04OEVCLTYyNUZCRTUyRUJGQn08L1VuaXF1 ZUlkZW50aWZpZXI+CisgICAgICA8RXh0ZW5zaW9ucz5oO2hoO2hwcDtoeHg7aG07aW5sO2luYzt4 c2Q8L0V4dGVuc2lvbnM+CisgICAgPC9GaWx0ZXI+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdy b3VwPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cdGVzdF90aHJlYWRzXHRlc3Rf dGhyZWFkcy5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KKyAgICA8 L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXHRlc3RfdGhyZWFk c1x0ZXN0X3RocmVhZHNfbWFpbi5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0Zp bHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+Cisg ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlwuLlx0ZXN0X3RocmVhZHNcdGVzdF90aHJlYWRz LmgiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVk ZT4KKyAgPC9JdGVtR3JvdXA+Cis8L1Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmls ZQoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL21z dmMvdGVzdF90aHJlYWRzL3Rlc3RfdGhyZWFkcy5jcHAgYi8zODktZHMtYmFzZS0zLjMuMC1idWls ZC9qZW1hbGxvYy01LjMuMC9tc3ZjL3Rlc3RfdGhyZWFkcy90ZXN0X3RocmVhZHMuY3BwCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlZWQwMjgKLS0tIC9kZXYvbnVsbAorKysg Yi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9tc3ZjL3Rlc3RfdGhyZWFk cy90ZXN0X3RocmVhZHMuY3BwCkBAIC0wLDAgKzEsODkgQEAKKy8vIGplbWFsbG9jIEMrKyB0aHJl YWRlZCB0ZXN0CisvLyBBdXRob3I6IFJ1c3RhbSBBYmR1bGxhZXYKKy8vIFB1YmxpYyBEb21haW4K KworI2luY2x1ZGUgPGF0b21pYz4KKyNpbmNsdWRlIDxmdW5jdGlvbmFsPgorI2luY2x1ZGUgPGZ1 dHVyZT4KKyNpbmNsdWRlIDxyYW5kb20+CisjaW5jbHVkZSA8dGhyZWFkPgorI2luY2x1ZGUgPHZl Y3Rvcj4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2RlZmluZSBKRU1BTExPQ19OT19ERU1BTkdMRQor I2luY2x1ZGUgPGplbWFsbG9jL2plbWFsbG9jLmg+CisKK3VzaW5nIHN0ZDo6dmVjdG9yOwordXNp bmcgc3RkOjp0aHJlYWQ7Cit1c2luZyBzdGQ6OnVuaWZvcm1faW50X2Rpc3RyaWJ1dGlvbjsKK3Vz aW5nIHN0ZDo6bWluc3RkX3JhbmQ7CisKK2ludCB0ZXN0X3RocmVhZHMoKSB7CisgIGplX21hbGxv Y19jb25mID0gIm5hcmVuYXM6MyI7CisgIGludCBuYXJlbmFzID0gMDsKKyAgc2l6ZV90IHN6ID0g c2l6ZW9mKG5hcmVuYXMpOworICBqZV9tYWxsY3RsKCJvcHQubmFyZW5hcyIsICh2b2lkICopJm5h cmVuYXMsICZzeiwgTlVMTCwgMCk7CisgIGlmIChuYXJlbmFzICE9IDMpIHsKKyAgICBwcmludGYo IkVycm9yOiB1bmV4cGVjdGVkIG51bWJlciBvZiBhcmVuYXM6ICVkXG4iLCBuYXJlbmFzKTsKKyAg ICByZXR1cm4gMTsKKyAgfQorICBzdGF0aWMgY29uc3QgaW50IHNpemVzW10gPSB7IDcsIDE2LCAz MiwgNjAsIDkxLCAxMDAsIDEyMCwgMTQ0LCAxNjksIDE5OSwgMjU1LCA0MDAsIDY3MCwgOTAwLCA5 MTcsIDEwMjUsIDMzMzMsIDUxOTAsIDEzMTMxLCA0OTE5MiwgOTk5OTksIDEyMzEyMywgMjU1MjY1 LCAyMzMzMTExIH07CisgIHN0YXRpYyBjb25zdCBpbnQgbnVtU2l6ZXMgPSAoaW50KShzaXplb2Yo c2l6ZXMpIC8gc2l6ZW9mKHNpemVzWzBdKSk7CisgIHZlY3Rvcjx0aHJlYWQ+IHdvcmtlcnM7Cisg IHN0YXRpYyBjb25zdCBpbnQgbnVtVGhyZWFkcyA9IG5hcmVuYXMgKyAxLCBudW1BbGxvY3NNYXgg PSAyNSwgbnVtSXRlcjEgPSA1MCwgbnVtSXRlcjIgPSA1MDsKKyAgamVfbWFsbG9jX3N0YXRzX3By aW50KE5VTEwsIE5VTEwsIE5VTEwpOworICBzaXplX3QgYWxsb2NhdGVkMTsKKyAgc2l6ZV90IHN6 MSA9IHNpemVvZihhbGxvY2F0ZWQxKTsKKyAgamVfbWFsbGN0bCgic3RhdHMuYWN0aXZlIiwgKHZv aWQgKikmYWxsb2NhdGVkMSwgJnN6MSwgTlVMTCwgMCk7CisgIHByaW50ZigiXG5QcmVzcyBFbnRl ciB0byBzdGFydCB0aHJlYWRzLi4uXG4iKTsKKyAgZ2V0Y2hhcigpOworICBwcmludGYoIlN0YXJ0 aW5nICVkIHRocmVhZHMgeCAlZCB4ICVkIGl0ZXJhdGlvbnMuLi5cbiIsIG51bVRocmVhZHMsIG51 bUl0ZXIxLCBudW1JdGVyMik7CisgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtVGhyZWFkczsgaSsr KSB7CisgICAgd29ya2Vycy5lbXBsYWNlX2JhY2soW3RpZD1pXSgpIHsKKyAgICAgIHVuaWZvcm1f aW50X2Rpc3RyaWJ1dGlvbjxpbnQ+IHNpemVEaXN0KDAsIG51bVNpemVzIC0gMSk7CisgICAgICBt aW5zdGRfcmFuZCBybmQodGlkICogMTcpOworICAgICAgdWludDhfdCogcHRyc1tudW1BbGxvY3NN YXhdOworICAgICAgaW50IHB0cnN6W251bUFsbG9jc01heF07CisgICAgICBmb3IgKGludCBpID0g MDsgaSA8IG51bUl0ZXIxOyArK2kpIHsKKyAgICAgICAgdGhyZWFkIHQoWyZdKCkgeworICAgICAg ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtSXRlcjI7ICsraSkgeworICAgICAgICAgICAgY29u c3QgaW50IG51bUFsbG9jcyA9IG51bUFsbG9jc01heCAtIHNpemVEaXN0KHJuZCk7CisgICAgICAg ICAgICBmb3IgKGludCBqID0gMDsgaiA8IG51bUFsbG9jczsgaiArPSA2NCkgeworICAgICAgICAg ICAgICBjb25zdCBpbnQgeCA9IHNpemVEaXN0KHJuZCk7CisgICAgICAgICAgICAgIGNvbnN0IGlu dCBzeiA9IHNpemVzW3hdOworICAgICAgICAgICAgICBwdHJzeltqXSA9IHN6OworICAgICAgICAg ICAgICBwdHJzW2pdID0gKHVpbnQ4X3QqKWplX21hbGxvYyhzeik7CisgICAgICAgICAgICAgIGlm ICghcHRyc1tqXSkgeworICAgICAgICAgICAgICAgIHByaW50ZigiVW5hYmxlIHRvIGFsbG9jYXRl ICVkIGJ5dGVzIGluIHRocmVhZCAlZCwgaXRlciAlZCwgYWxsb2MgJWQuICVkXG4iLCBzeiwgdGlk LCBpLCBqLCB4KTsKKyAgICAgICAgICAgICAgICBleGl0KDEpOworICAgICAgICAgICAgICB9Cisg ICAgICAgICAgICAgIGZvciAoaW50IGsgPSAwOyBrIDwgc3o7IGsrKykKKyAgICAgICAgICAgICAg ICBwdHJzW2pdW2tdID0gdGlkICsgazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvciAo aW50IGogPSAwOyBqIDwgbnVtQWxsb2NzOyBqICs9IDY0KSB7CisgICAgICAgICAgICAgIGZvciAo aW50IGsgPSAwLCBzeiA9IHB0cnN6W2pdOyBrIDwgc3o7IGsrKykKKyAgICAgICAgICAgICAgICBp ZiAocHRyc1tqXVtrXSAhPSAodWludDhfdCkodGlkICsgaykpIHsKKyAgICAgICAgICAgICAgICAg IHByaW50ZigiTWVtb3J5IGVycm9yIGluIHRocmVhZCAlZCwgaXRlciAlZCwgYWxsb2MgJWQgQCAl ZCA6ICUwMlghPSUwMlhcbiIsIHRpZCwgaSwgaiwgaywgcHRyc1tqXVtrXSwgKHVpbnQ4X3QpKHRp ZCArIGspKTsKKyAgICAgICAgICAgICAgICAgIGV4aXQoMSk7CisgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgICBqZV9mcmVlKHB0cnNbal0pOworICAgICAgICAgICAgfQorICAgICAgICAg IH0KKyAgICAgICAgfSk7CisgICAgICAgIHQuam9pbigpOworICAgICAgfQorICAgIH0pOworICB9 CisgIGZvciAodGhyZWFkJiB0IDogd29ya2VycykgeworICAgIHQuam9pbigpOworICB9CisgIGpl X21hbGxvY19zdGF0c19wcmludChOVUxMLCBOVUxMLCBOVUxMKTsKKyAgc2l6ZV90IGFsbG9jYXRl ZDI7CisgIGplX21hbGxjdGwoInN0YXRzLmFjdGl2ZSIsICh2b2lkICopJmFsbG9jYXRlZDIsICZz ejEsIE5VTEwsIDApOworICBzaXplX3QgbGVha2VkID0gYWxsb2NhdGVkMiAtIGFsbG9jYXRlZDE7 CisgIHByaW50ZigiXG5Eb25lLiBMZWFrZWQ6ICV6ZCBieXRlc1xuIiwgbGVha2VkKTsKKyAgYm9v bCBmYWlsZWQgPSBsZWFrZWQgPiA2NTUzNjsgLy8gaW4gY2FzZSBDKysgcnVudGltZSBhbGxvY2F0 ZWQgc29tZXRoaW5nIChlLmcuIGlvc3RyZWFtIGxvY2FsZSBvciBmYWNldCkKKyAgcHJpbnRmKCJc blRlc3QgJXMhXG4iLCAoZmFpbGVkID8gIkZBSUxFRCIgOiAic3VjY2Vzc2Z1bCIpKTsKKyAgcHJp bnRmKCJcblByZXNzIEVudGVyIHRvIGNvbnRpbnVlLi4uXG4iKTsKKyAgZ2V0Y2hhcigpOworICBy ZXR1cm4gZmFpbGVkID8gMSA6IDA7Cit9CgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAt YnVpbGQvamVtYWxsb2MtNS4zLjAvbXN2Yy90ZXN0X3RocmVhZHMvdGVzdF90aHJlYWRzLmggYi8z ODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9tc3ZjL3Rlc3RfdGhyZWFkcy90 ZXN0X3RocmVhZHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NGQwY2Ri Ci0tLSAvZGV2L251bGwKKysrIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4z LjAvbXN2Yy90ZXN0X3RocmVhZHMvdGVzdF90aHJlYWRzLmgKQEAgLTAsMCArMSwzIEBACisjcHJh Z21hIG9uY2UKKworaW50IHRlc3RfdGhyZWFkcygpOwoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNl LTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL21zdmMvdGVzdF90aHJlYWRzL3Rlc3RfdGhyZWFk c19tYWluLmNwcCBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL21zdmMv dGVzdF90aHJlYWRzL3Rlc3RfdGhyZWFkc19tYWluLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwLi4wYTAyMmZiCi0tLSAvZGV2L251bGwKKysrIGIvMzg5LWRzLWJhc2UtMy4z LjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvbXN2Yy90ZXN0X3RocmVhZHMvdGVzdF90aHJlYWRzX21h aW4uY3BwCkBAIC0wLDAgKzEsMTEgQEAKKyNpbmNsdWRlICJ0ZXN0X3RocmVhZHMuaCIKKyNpbmNs dWRlIDxmdXR1cmU+CisjaW5jbHVkZSA8ZnVuY3Rpb25hbD4KKyNpbmNsdWRlIDxjaHJvbm8+CisK K3VzaW5nIG5hbWVzcGFjZSBzdGQ6OmNocm9ub19saXRlcmFsczsKKworaW50IG1haW4oaW50IGFy Z2MsIGNoYXIqKiBhcmd2KSB7CisgIGludCByYyA9IHRlc3RfdGhyZWFkcygpOworICByZXR1cm4g cmM7Cit9CgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4z LjAvcnVuX3Rlc3RzLnNoIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAv cnVuX3Rlc3RzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmI0MzRmMTUK LS0tIC9kZXYvbnVsbAorKysgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMu MC9ydW5fdGVzdHMuc2gKQEAgLTAsMCArMSBAQAorJChkaXJuYW1lICIkKSIpL3NjcmlwdHMvZ2Vu X3J1bl90ZXN0cy5weSB8IGJhc2gKCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWls ZC9qZW1hbGxvYy01LjMuMC9zY3JpcHRzL2NoZWNrLWZvcm1hdHRpbmcuc2ggYi8zODktZHMtYmFz ZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9zY3JpcHRzL2NoZWNrLWZvcm1hdHRpbmcuc2gK bmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjhjYWZkOAotLS0gL2Rldi9udWxs CisrKyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3NjcmlwdHMvY2hl Y2stZm9ybWF0dGluZy5zaApAQCAtMCwwICsxLDI4IEBACisjIS9iaW4vYmFzaAorCisjIFRoZSBm aWxlcyB0aGF0IG5lZWQgdG8gYmUgcHJvcGVybHkgZm9ybWF0dGVkLiAgV2UnbGwgZ3JvdyB0aGlz IGluY3JlbWVudGFsbHkKKyMgdW50aWwgaXQgaW5jbHVkZXMgYWxsIHRoZSBqZW1hbGxvYyBzb3Vy Y2UgZmlsZXMgKGFzIHdlIGNvbnZlcnQgdGhpbmdzIG92ZXIpLAorIyBhbmQgdGhlbiBqdXN0IHJl cGxhY2UgaXQgd2l0aAorIyAgICBmaW5kIC1uYW1lICcqLmMnIC1vIC1uYW1lICcqLmgnIC1vIC1u YW1lICcqLmNwcAorRklMRVM9KAorKQorCitpZiBjb21tYW5kIC12IGNsYW5nLWZvcm1hdCAmPiAv ZGV2L251bGw7IHRoZW4KKyAgQ0xBTkdfRk9STUFUPSJjbGFuZy1mb3JtYXQiCitlbGlmIGNvbW1h bmQgLXYgY2xhbmctZm9ybWF0LTggJj4gL2Rldi9udWxsOyB0aGVuCisgIENMQU5HX0ZPUk1BVD0i Y2xhbmctZm9ybWF0LTgiCitlbHNlCisgIGVjaG8gIkNvdWxkbid0IGZpbmQgY2xhbmctZm9ybWF0 LiIKK2ZpCisKK2lmICEgJENMQU5HX0ZPUk1BVCAtdmVyc2lvbiB8IGdyZXAgInZlcnNpb24gOFwu IiAmPiAvZGV2L251bGw7IHRoZW4KKyAgZWNobyAiY2xhbmctZm9ybWF0IGlzIHRoZSB3cm9uZyB2 ZXJzaW9uLiIKKyAgZXhpdCAxCitmaQorCitmb3IgZmlsZSBpbiAke0ZJTEVTW0BdfTsgZG8KKyAg aWYgISBjbXAgLS1zaWxlbnQgJGZpbGUgPCgkQ0xBTkdfRk9STUFUICRmaWxlKSAmPiAvZGV2L251 bGw7IHRoZW4KKyAgICBlY2hvICJFcnJvcjogJGZpbGUgaXMgbm90IGNsYW5nLWZvcm1hdHRlZCIK KyAgICBleGl0IDEKKyAgZmkKK2RvbmUKCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1i dWlsZC9qZW1hbGxvYy01LjMuMC9zY3JpcHRzL2ZyZWVic2QvYmVmb3JlX2luc3RhbGwuc2ggYi8z ODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9zY3JpcHRzL2ZyZWVic2QvYmVm b3JlX2luc3RhbGwuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjJiZWUz MgotLS0gL2Rldi9udWxsCisrKyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUu My4wL3NjcmlwdHMvZnJlZWJzZC9iZWZvcmVfaW5zdGFsbC5zaApAQCAtMCwwICsxLDMgQEAKKyMh L2Jpbi90Y3NoCisKK3N1IC1tIHJvb3QgLWMgJ3BrZyBpbnN0YWxsIC15IGdpdCcKCmRpZmYgLS1n aXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9zY3JpcHRzL2ZyZWVi c2QvYmVmb3JlX3NjcmlwdC5zaCBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUu My4wL3NjcmlwdHMvZnJlZWJzZC9iZWZvcmVfc2NyaXB0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAuLjI5NDA2ZjYKLS0tIC9kZXYvbnVsbAorKysgYi8zODktZHMtYmFzZS0z LjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9zY3JpcHRzL2ZyZWVic2QvYmVmb3JlX3NjcmlwdC5z aApAQCAtMCwwICsxLDEwIEBACisjIS9iaW4vdGNzaAorCithdXRvY29uZgorIyBXZSBkb24ndCBw ZXJmZWN0bHkgdHJhY2sgZnJlZWJzZCBzdGRsaWIuaCBkZWZpbml0aW9ucy4gIFRoaXMgaXMgZmlu ZSB3aGVuCisjIHdlIGNvdW50IGFzIGEgc3lzdGVtIGhlYWRlciwgYnV0IGJyZWFrcyBvdGhlcndp c2UsIGxpa2UgZHVyaW5nIHRoZXNlCisjIHRlc3RzLgorLi9jb25maWd1cmUgLS13aXRoLWplbWFs bG9jLXByZWZpeD1jaV8gJHtDT01QSUxFUl9GTEFHUzorIENDPSIkQ0MgJENPTVBJTEVSX0ZMQUdT IiBDWFg9IiRDWFggJENPTVBJTEVSX0ZMQUdTIn0gJENPTkZJR1VSRV9GTEFHUworSkVfTkNQVVM9 YHN5c2N0bCAtbiBrZXJuLnNtcC5jcHVzYAorZ21ha2UgLWoke0pFX05DUFVTfQorZ21ha2UgLWok e0pFX05DUFVTfSB0ZXN0cwoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2pl bWFsbG9jLTUuMy4wL3NjcmlwdHMvZnJlZWJzZC9zY3JpcHQuc2ggYi8zODktZHMtYmFzZS0zLjMu MC1idWlsZC9qZW1hbGxvYy01LjMuMC9zY3JpcHRzL2ZyZWVic2Qvc2NyaXB0LnNoCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5YzUzYTIKLS0tIC9kZXYvbnVsbAorKysgYi8z ODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9zY3JpcHRzL2ZyZWVic2Qvc2Ny aXB0LnNoCkBAIC0wLDAgKzEsMyBAQAorIyEvYmluL3Rjc2gKKworZ21ha2UgY2hlY2sKCmRpZmYg LS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9zY3JpcHRzL2dl bl9ydW5fdGVzdHMucHkgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9z Y3JpcHRzL2dlbl9ydW5fdGVzdHMucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAw MC4uN2MzMDc1ZgotLS0gL2Rldi9udWxsCisrKyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2pl bWFsbG9jLTUuMy4wL3NjcmlwdHMvZ2VuX3J1bl90ZXN0cy5weQpAQCAtMCwwICsxLDEzMCBAQAor IyEvdXNyL2Jpbi9lbnYgcHl0aG9uMworCitpbXBvcnQgc3lzCitmcm9tIGl0ZXJ0b29scyBpbXBv cnQgY29tYmluYXRpb25zCitmcm9tIG9zIGltcG9ydCB1bmFtZQorZnJvbSBtdWx0aXByb2Nlc3Np bmcgaW1wb3J0IGNwdV9jb3VudAorZnJvbSBzdWJwcm9jZXNzIGltcG9ydCBjYWxsCisKKyMgTGF0 ZXIsIHdlIHdhbnQgdG8gdGVzdCBleHRlbmRlZCB2YWRkciBzdXBwb3J0LiAgQXBwYXJlbnRseSwg dGhlICJyZWFsIiB3YXkgb2YKKyMgY2hlY2tpbmcgdGhpcyBpcyBmbGFreSBvbiBPUyBYLgorYml0 c182NCA9IHN5cy5tYXhzaXplID4gMioqMzIKKworbnBhcmFsbGVsID0gY3B1X2NvdW50KCkgKiAy CisKK3VuYW1lID0gdW5hbWUoKVswXQorCitpZiBjYWxsKCJjb21tYW5kIC12IGdtYWtlIiwgc2hl bGw9VHJ1ZSkgPT0gMDoKKyAgICBtYWtlX2NtZCA9ICdnbWFrZScKK2Vsc2U6CisgICAgbWFrZV9j bWQgPSAnbWFrZScKKworZGVmIHBvd2Vyc2V0KGl0ZW1zKToKKyAgICByZXN1bHQgPSBbXQorICAg IGZvciBpIGluIHJhbmdlKGxlbihpdGVtcykgKyAxKToKKyAgICAgICAgcmVzdWx0ICs9IGNvbWJp bmF0aW9ucyhpdGVtcywgaSkKKyAgICByZXR1cm4gcmVzdWx0CisKK3Bvc3NpYmxlX2NvbXBpbGVy cyA9IFtdCitmb3IgY2MsIGN4eCBpbiAoWydnY2MnLCAnZysrJ10sIFsnY2xhbmcnLCAnY2xhbmcr KyddKToKKyAgICB0cnk6CisgICAgICAgIGNtZF9yZXQgPSBjYWxsKFtjYywgIi12Il0pCisgICAg ICAgIGlmIGNtZF9yZXQgPT0gMDoKKyAgICAgICAgICAgIHBvc3NpYmxlX2NvbXBpbGVycy5hcHBl bmQoKGNjLCBjeHgpKQorICAgIGV4Y2VwdDoKKyAgICAgICAgcGFzcworcG9zc2libGVfY29tcGls ZXJfb3B0cyA9IFsKKyAgICAnLW0zMicsCitdCitwb3NzaWJsZV9jb25maWdfb3B0cyA9IFsKKyAg ICAnLS1lbmFibGUtZGVidWcnLAorICAgICctLWVuYWJsZS1wcm9mJywKKyAgICAnLS1kaXNhYmxl LXN0YXRzJywKKyAgICAnLS1lbmFibGUtb3B0LXNhZmV0eS1jaGVja3MnLAorICAgICctLXdpdGgt bGctcGFnZT0xNicsCitdCitpZiBiaXRzXzY0OgorICAgIHBvc3NpYmxlX2NvbmZpZ19vcHRzLmFw cGVuZCgnLS13aXRoLWxnLXZhZGRyPTU2JykKKworcG9zc2libGVfbWFsbG9jX2NvbmZfb3B0cyA9 IFsKKyAgICAndGNhY2hlOmZhbHNlJywKKyAgICAnZHNzOnByaW1hcnknLAorICAgICdwZXJjcHVf YXJlbmE6cGVyY3B1JywKKyAgICAnYmFja2dyb3VuZF90aHJlYWQ6dHJ1ZScsCitdCisKK3ByaW50 KCdzZXQgLWUnKQorcHJpbnQoJ2lmIFsgLWYgTWFrZWZpbGUgXSA7IHRoZW4gJShtYWtlX2NtZClz IHJlbGNsZWFuIDsgZmknICUgeydtYWtlX2NtZCc6CisgICAgbWFrZV9jbWR9KQorcHJpbnQoJ2F1 dG9jb25mJykKK3ByaW50KCdybSAtcmYgcnVuX3Rlc3RzLm91dCcpCitwcmludCgnbWtkaXIgcnVu X3Rlc3RzLm91dCcpCitwcmludCgnY2QgcnVuX3Rlc3RzLm91dCcpCisKK2luZCA9IDAKK2ZvciBj YywgY3h4IGluIHBvc3NpYmxlX2NvbXBpbGVyczoKKyAgICBmb3IgY29tcGlsZXJfb3B0cyBpbiBw b3dlcnNldChwb3NzaWJsZV9jb21waWxlcl9vcHRzKToKKyAgICAgICAgZm9yIGNvbmZpZ19vcHRz IGluIHBvd2Vyc2V0KHBvc3NpYmxlX2NvbmZpZ19vcHRzKToKKyAgICAgICAgICAgIGZvciBtYWxs b2NfY29uZl9vcHRzIGluIHBvd2Vyc2V0KHBvc3NpYmxlX21hbGxvY19jb25mX29wdHMpOgorICAg ICAgICAgICAgICAgIGlmIGNjID09ICdjbGFuZycgXAorICAgICAgICAgICAgICAgICAgYW5kICct bTMyJyBpbiBwb3NzaWJsZV9jb21waWxlcl9vcHRzIFwKKyAgICAgICAgICAgICAgICAgIGFuZCAn LS1lbmFibGUtcHJvZicgaW4gY29uZmlnX29wdHM6CisgICAgICAgICAgICAgICAgICAgIGNvbnRp bnVlCisgICAgICAgICAgICAgICAgY29uZmlnX2xpbmUgPSAoCisgICAgICAgICAgICAgICAgICAg ICdFWFRSQV9DRkxBR1M9LVdlcnJvciBFWFRSQV9DWFhGTEFHUz0tV2Vycm9yICcKKyAgICAgICAg ICAgICAgICAgICAgKyAnQ0M9Int9IHt9IiAnLmZvcm1hdChjYywgIiAiLmpvaW4oY29tcGlsZXJf b3B0cykpCisgICAgICAgICAgICAgICAgICAgICsgJ0NYWD0ie30ge30iICcuZm9ybWF0KGN4eCwg IiAiLmpvaW4oY29tcGlsZXJfb3B0cykpCisgICAgICAgICAgICAgICAgICAgICsgJy4uLy4uL2Nv bmZpZ3VyZSAnCisgICAgICAgICAgICAgICAgICAgICsgIiAiLmpvaW4oY29uZmlnX29wdHMpICsg KCcgLS13aXRoLW1hbGxvYy1jb25mPScgKworICAgICAgICAgICAgICAgICAgICAiLCIuam9pbiht YWxsb2NfY29uZl9vcHRzKSBpZiBsZW4obWFsbG9jX2NvbmZfb3B0cykgPiAwCisgICAgICAgICAg ICAgICAgICAgIGVsc2UgJycpCisgICAgICAgICAgICAgICAgKQorCisgICAgICAgICAgICAgICAg IyBXZSBkb24ndCB3YW50IHRvIHRlc3QgbGFyZ2UgdmFkZHIgc3BhY2VzIGluIDMyLWJpdCBtb2Rl LgorICAgICAgICAgICAgICAgIGlmICgnLW0zMicgaW4gY29tcGlsZXJfb3B0cyBhbmQgJy0td2l0 aC1sZy12YWRkcj01NicgaW4KKyAgICAgICAgICAgICAgICAgICAgY29uZmlnX29wdHMpOgorICAg ICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgIyBQZXIgQ1BVIGFy ZW5hcyBhcmUgb25seSBzdXBwb3J0ZWQgb24gTGludXguCisgICAgICAgICAgICAgICAgbGludXhf c3VwcG9ydGVkID0gKCdwZXJjcHVfYXJlbmE6cGVyY3B1JyBpbiBtYWxsb2NfY29uZl9vcHRzIFwK KyAgICAgICAgICAgICAgICAgIG9yICdiYWNrZ3JvdW5kX3RocmVhZDp0cnVlJyBpbiBtYWxsb2Nf Y29uZl9vcHRzKQorICAgICAgICAgICAgICAgICMgSGVhcCBwcm9maWxpbmcgYW5kIGRzcyBhcmUg bm90IHN1cHBvcnRlZCBvbiBPUyBYLgorICAgICAgICAgICAgICAgIGRhcndpbl91bnN1cHBvcnRl ZCA9ICgnLS1lbmFibGUtcHJvZicgaW4gY29uZmlnX29wdHMgb3IgXAorICAgICAgICAgICAgICAg ICAgJ2RzczpwcmltYXJ5JyBpbiBtYWxsb2NfY29uZl9vcHRzKQorICAgICAgICAgICAgICAgIGlm ICh1bmFtZSA9PSAnTGludXgnIGFuZCBsaW51eF9zdXBwb3J0ZWQpIFwKKyAgICAgICAgICAgICAg ICAgIG9yIChub3QgbGludXhfc3VwcG9ydGVkIGFuZCAodW5hbWUgIT0gJ0Rhcndpbicgb3IgXAor ICAgICAgICAgICAgICAgICAgbm90IGRhcndpbl91bnN1cHBvcnRlZCkpOgorICAgICAgICAgICAg ICAgICAgICBwcmludCgiIiJjYXQgPDxFT0YgPiBydW5fdGVzdF8lKGluZClkLnNoCisjIS9iaW4v c2gKKworc2V0IC1lCisKK2Fib3J0KCkgeworICAgIGVjaG8gIj09PiBFcnJvciIgPj4gcnVuX3Rl c3QubG9nCisgICAgZWNobyAiRXJyb3I7IHNlZSBydW5fdGVzdHMub3V0L3J1bl90ZXN0XyUoaW5k KWQub3V0L3J1bl90ZXN0LmxvZyIKKyAgICBleGl0IDI1NSAjIFNwZWNpYWwgZXhpdCBjb2RlIHRl bGxzIHhhcmdzIHRvIHRlcm1pbmF0ZS4KK30KKworIyBFbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJl IG5vdCBzdXBwb3J0ZWQuCitydW5fY21kKCkgeworICAgIGVjaG8gIj09PiBcJEAiID4+IHJ1bl90 ZXN0LmxvZworICAgIFwkQCA+PiBydW5fdGVzdC5sb2cgMj4mMSB8fCBhYm9ydAorfQorCitlY2hv ICI9PiBydW5fdGVzdF8lKGluZClkOiAlKGNvbmZpZ19saW5lKXMiCitta2RpciBydW5fdGVzdF8l KGluZClkLm91dAorY2QgcnVuX3Rlc3RfJShpbmQpZC5vdXQKKworZWNobyAiPT0+ICUoY29uZmln X2xpbmUpcyIgPj4gcnVuX3Rlc3QubG9nCislKGNvbmZpZ19saW5lKXMgPj4gcnVuX3Rlc3QubG9n IDI+JjEgfHwgYWJvcnQKKworcnVuX2NtZCAlKG1ha2VfY21kKXMgYWxsIHRlc3RzCitydW5fY21k ICUobWFrZV9jbWQpcyBjaGVjaworcnVuX2NtZCAlKG1ha2VfY21kKXMgZGlzdGNsZWFuCitFT0YK K2NobW9kIDc1NSBydW5fdGVzdF8lKGluZClkLnNoIiIiICUgeydpbmQnOiBpbmQsICdjb25maWdf bGluZSc6IGNvbmZpZ19saW5lLAorICAgICAgJ21ha2VfY21kJzogbWFrZV9jbWR9KQorICAgICAg ICAgICAgICAgICAgICBpbmQgKz0gMQorCitwcmludCgnZm9yIGkgaW4gYHNlcSAwICUobGFzdF9p bmQpZGAgOyBkbyBlY2hvIHJ1bl90ZXN0XyR7aX0uc2ggOyBkb25lIHwgeGFyZ3MnCisgICAgJyAt UCAlKG5wYXJhbGxlbClkIC1uIDEgc2gnICUgeydsYXN0X2luZCc6IGluZC0xLCAnbnBhcmFsbGVs JzogbnBhcmFsbGVsfSkKCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1h bGxvYy01LjMuMC9zY3JpcHRzL2dlbl90cmF2aXMucHkgYi8zODktZHMtYmFzZS0zLjMuMC1idWls ZC9qZW1hbGxvYy01LjMuMC9zY3JpcHRzL2dlbl90cmF2aXMucHkKbmV3IGZpbGUgbW9kZSAxMDA3 NTUKaW5kZXggMDAwMDAwMC4uNDM2NmEwNgotLS0gL2Rldi9udWxsCisrKyBiLzM4OS1kcy1iYXNl LTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3NjcmlwdHMvZ2VuX3RyYXZpcy5weQpAQCAtMCww ICsxLDMyNyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMworCitmcm9tIGl0ZXJ0b29scyBpbXBv cnQgY29tYmluYXRpb25zLCBjaGFpbgorZnJvbSBlbnVtIGltcG9ydCBFbnVtLCBhdXRvCisKKwor TElOVVggPSAnbGludXgnCitPU1ggPSAnb3N4JworV0lORE9XUyA9ICd3aW5kb3dzJworRlJFRUJT RCA9ICdmcmVlYnNkJworCisKK0FNRDY0ID0gJ2FtZDY0JworQVJNNjQgPSAnYXJtNjQnCitQUEM2 NExFID0gJ3BwYzY0bGUnCisKKworVFJBVklTX1RFTVBMQVRFID0gIiIiXAorIyBUaGlzIGNvbmZp ZyBmaWxlIGlzIGdlbmVyYXRlZCBieSAuL3NjcmlwdHMvZ2VuX3RyYXZpcy5weS4KKyMgRG8gbm90 IGVkaXQgYnkgaGFuZC4KKworIyBXZSB1c2UgJ21pbmltYWwnLCBiZWNhdXNlICdnZW5lcmljJyBt YWtlcyBXaW5kb3dzIFZNcyBoYW5nIGF0IHN0YXJ0dXAuIEFsc28KKyMgdGhlIHNvZnR3YXJlIHBy b3ZpZGVkIGJ5ICdnZW5lcmljJyBpcyBzaW1wbHkgbm90IG5lZWRlZCBmb3Igb3VyIHRlc3RzLgor IyBEaWZmZXJlbmNlcyBhcmUgZXhwbGFpbmVkIGhlcmU6CisjIGh0dHBzOi8vZG9jcy50cmF2aXMt Y2kuY29tL3VzZXIvbGFuZ3VhZ2VzL21pbmltYWwtYW5kLWdlbmVyaWMvCitsYW5ndWFnZTogbWlu aW1hbAorZGlzdDogZm9jYWwKKworam9iczoKKyAgaW5jbHVkZToKK3tqb2JzfQorCitiZWZvcmVf aW5zdGFsbDoKKyAgLSB8LQorICAgIGlmIHRlc3QgLWYgIi4vc2NyaXB0cy8kVFJBVklTX09TX05B TUUvYmVmb3JlX2luc3RhbGwuc2giOyB0aGVuCisgICAgICBzb3VyY2UgLi9zY3JpcHRzLyRUUkFW SVNfT1NfTkFNRS9iZWZvcmVfaW5zdGFsbC5zaAorICAgIGZpCisKK2JlZm9yZV9zY3JpcHQ6Cisg IC0gfC0KKyAgICBpZiB0ZXN0IC1mICIuL3NjcmlwdHMvJFRSQVZJU19PU19OQU1FL2JlZm9yZV9z Y3JpcHQuc2giOyB0aGVuCisgICAgICBzb3VyY2UgLi9zY3JpcHRzLyRUUkFWSVNfT1NfTkFNRS9i ZWZvcmVfc2NyaXB0LnNoCisgICAgZWxzZQorICAgICAgc2NyaXB0cy9nZW5fdHJhdmlzLnB5ID4g dHJhdmlzX3NjcmlwdCAmJiBkaWZmIC50cmF2aXMueW1sIHRyYXZpc19zY3JpcHQKKyAgICAgIGF1 dG9jb25mCisgICAgICAjIElmIENPTVBJTEVSX0ZMQUdTIGFyZSBub3QgZW1wdHksIGFkZCB0aGVt IHRvIENDIGFuZCBDWFgKKyAgICAgIC4vY29uZmlndXJlICR7e0NPTVBJTEVSX0ZMQUdTOisgQ0M9 IiRDQyAkQ09NUElMRVJfRkxBR1MiIFwKK0NYWD0iJENYWCAkQ09NUElMRVJfRkxBR1MifX0gJENP TkZJR1VSRV9GTEFHUworICAgICAgbWFrZSAtajMKKyAgICAgIG1ha2UgLWozIHRlc3RzCisgICAg ZmkKKworc2NyaXB0OgorICAtIHwtCisgICAgaWYgdGVzdCAtZiAiLi9zY3JpcHRzLyRUUkFWSVNf T1NfTkFNRS9zY3JpcHQuc2giOyB0aGVuCisgICAgICBzb3VyY2UgLi9zY3JpcHRzLyRUUkFWSVNf T1NfTkFNRS9zY3JpcHQuc2gKKyAgICBlbHNlCisgICAgICBtYWtlIGNoZWNrCisgICAgZmkKKyIi IgorCisKK2NsYXNzIE9wdGlvbihvYmplY3QpOgorICAgIGNsYXNzIFR5cGU6CisgICAgICAgIENP TVBJTEVSID0gYXV0bygpCisgICAgICAgIENPTVBJTEVSX0ZMQUcgPSBhdXRvKCkKKyAgICAgICAg Q09ORklHVVJFX0ZMQUcgPSBhdXRvKCkKKyAgICAgICAgTUFMTE9DX0NPTkYgPSBhdXRvKCkKKyAg ICAgICAgRkVBVFVSRSA9IGF1dG8oKQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHR5cGUsIHZh bHVlKToKKyAgICAgICAgc2VsZi50eXBlID0gdHlwZQorICAgICAgICBzZWxmLnZhbHVlID0gdmFs dWUKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgYXNfY29tcGlsZXIodmFsdWUpOgorICAg ICAgICByZXR1cm4gT3B0aW9uKE9wdGlvbi5UeXBlLkNPTVBJTEVSLCB2YWx1ZSkKKworICAgIEBz dGF0aWNtZXRob2QKKyAgICBkZWYgYXNfY29tcGlsZXJfZmxhZyh2YWx1ZSk6CisgICAgICAgIHJl dHVybiBPcHRpb24oT3B0aW9uLlR5cGUuQ09NUElMRVJfRkxBRywgdmFsdWUpCisKKyAgICBAc3Rh dGljbWV0aG9kCisgICAgZGVmIGFzX2NvbmZpZ3VyZV9mbGFnKHZhbHVlKToKKyAgICAgICAgcmV0 dXJuIE9wdGlvbihPcHRpb24uVHlwZS5DT05GSUdVUkVfRkxBRywgdmFsdWUpCisKKyAgICBAc3Rh dGljbWV0aG9kCisgICAgZGVmIGFzX21hbGxvY19jb25mKHZhbHVlKToKKyAgICAgICAgcmV0dXJu IE9wdGlvbihPcHRpb24uVHlwZS5NQUxMT0NfQ09ORiwgdmFsdWUpCisKKyAgICBAc3RhdGljbWV0 aG9kCisgICAgZGVmIGFzX2ZlYXR1cmUodmFsdWUpOgorICAgICAgICByZXR1cm4gT3B0aW9uKE9w dGlvbi5UeXBlLkZFQVRVUkUsIHZhbHVlKQorCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvYmopOgor ICAgICAgICByZXR1cm4gKGlzaW5zdGFuY2Uob2JqLCBPcHRpb24pIGFuZCBvYmoudHlwZSA9PSBz ZWxmLnR5cGUKKyAgICAgICAgICAgICAgICBhbmQgb2JqLnZhbHVlID09IHNlbGYudmFsdWUpCisK KworIyBUaGUgJ2RlZmF1bHQnIGNvbmZpZ3VyYXRpb24gaXMgZ2NjLCBvbiBsaW51eCwgd2l0aCBu byBjb21waWxlciBvciBjb25maWd1cmUKKyMgZmxhZ3MuICBXZSBhbHNvIHRlc3Qgd2l0aCBjbGFu ZywgLW0zMiwgLS1lbmFibGUtZGVidWcsIC0tZW5hYmxlLXByb2YsCisjIC0tZGlzYWJsZS1zdGF0 cywgYW5kIC0td2l0aC1tYWxsb2MtY29uZj10Y2FjaGU6ZmFsc2UuICBUbyBhdm9pZCBhYnVzaW5n CisjIHRyYXZpcyB0aG91Z2gsIHdlIGRvbid0IHRlc3QgYWxsIDIqKjcgPSAxMjggcG9zc2libGUg Y29tYmluYXRpb25zIG9mIHRoZXNlOworIyBpbnN0ZWFkLCB3ZSBvbmx5IHRlc3QgY29tYmluYXRp b25zIG9mIHVwIHRvIDIgJ3VudXN1YWwnIHNldHRpbmdzLCB1bmRlciB0aGUKKyMgaG9wZSB0aGF0 IGJ1Z3MgaW52b2x2aW5nIGludGVyYWN0aW9ucyBvZiBzdWNoIHNldHRpbmdzIGFyZSByYXJlLgor TUFYX1VOVVNVQUxfT1BUSU9OUyA9IDIKKworCitHQ0MgPSBPcHRpb24uYXNfY29tcGlsZXIoJ0ND PWdjYyBDWFg9ZysrJykKK0NMQU5HID0gT3B0aW9uLmFzX2NvbXBpbGVyKCdDQz1jbGFuZyBDWFg9 Y2xhbmcrKycpCitDTCA9IE9wdGlvbi5hc19jb21waWxlcignQ0M9Y2wuZXhlIENYWD1jbC5leGUn KQorCisKK2NvbXBpbGVyc191bnVzdWFsID0gW0NMQU5HLF0KKworCitDUk9TU19DT01QSUxFXzMy QklUID0gT3B0aW9uLmFzX2ZlYXR1cmUoJ0NST1NTX0NPTVBJTEVfMzJCSVQnKQorZmVhdHVyZV91 bnVzdWFscyA9IFtDUk9TU19DT01QSUxFXzMyQklUXQorCisKK2NvbmZpZ3VyZV9mbGFnX3VudXN1 YWxzID0gW09wdGlvbi5hc19jb25maWd1cmVfZmxhZyhvcHQpIGZvciBvcHQgaW4gKAorICAgICct LWVuYWJsZS1kZWJ1ZycsCisgICAgJy0tZW5hYmxlLXByb2YnLAorICAgICctLWRpc2FibGUtc3Rh dHMnLAorICAgICctLWRpc2FibGUtbGliZGwnLAorICAgICctLWVuYWJsZS1vcHQtc2FmZXR5LWNo ZWNrcycsCisgICAgJy0td2l0aC1sZy1wYWdlPTE2JywKKyldCisKKworbWFsbG9jX2NvbmZfdW51 c3VhbHMgPSBbT3B0aW9uLmFzX21hbGxvY19jb25mKG9wdCkgZm9yIG9wdCBpbiAoCisgICAgJ3Rj YWNoZTpmYWxzZScsCisgICAgJ2RzczpwcmltYXJ5JywKKyAgICAncGVyY3B1X2FyZW5hOnBlcmNw dScsCisgICAgJ2JhY2tncm91bmRfdGhyZWFkOnRydWUnLAorKV0KKworCithbGxfdW51c3VhbHMg PSAoY29tcGlsZXJzX3VudXN1YWwgKyBmZWF0dXJlX3VudXN1YWxzCisgICAgKyBjb25maWd1cmVf ZmxhZ191bnVzdWFscyArIG1hbGxvY19jb25mX3VudXN1YWxzKQorCisKK2RlZiBnZXRfZXh0cmFf Y2ZsYWdzKG9zLCBjb21waWxlcik6CisgICAgaWYgb3MgPT0gRlJFRUJTRDoKKyAgICAgICAgcmV0 dXJuIFtdCisKKyAgICBpZiBvcyA9PSBXSU5ET1dTOgorICAgICAgICAjIEZvciBub24tQ0wgY29t cGlsZXJzIHVuZGVyIFdpbmRvd3MgKGZvciBub3cgaXQncyBvbmx5IE1pbkdXLUdDQyksCisgICAg ICAgICMgLWZjb21tb24gbmVlZHMgdG8gYmUgc3BlY2lmaWVkIHRvIGNvcnJlY3RseSBoYW5kbGUg bXVsdGlwbGUKKyAgICAgICAgIyAnbWFsbG9jX2NvbmYnIHN5bWJvbHMgYW5kIHN1Y2gsIHdoaWNo IGFyZSBkZWNsYXJlZCB3ZWFrIHVuZGVyIExpbnV4LgorICAgICAgICAjIFdlYWsgc3ltYm9scyBk b24ndCB3b3JrIHdpdGggTWluR1ctR0NDLgorICAgICAgICBpZiBjb21waWxlciAhPSBDTC52YWx1 ZToKKyAgICAgICAgICAgIHJldHVybiBbJy1mY29tbW9uJ10KKyAgICAgICAgZWxzZToKKyAgICAg ICAgICAgIHJldHVybiBbXQorCisgICAgIyBXZSBnZXQgc29tZSBzcHVyaW91cyBlcnJvcnMgd2hl biAtV2FycmF5LWJvdW5kcyBpcyBlbmFibGVkLgorICAgIGV4dHJhX2NmbGFncyA9IFsnLVdlcnJv cicsICctV25vLWFycmF5LWJvdW5kcyddCisgICAgaWYgY29tcGlsZXIgPT0gQ0xBTkcudmFsdWUg b3Igb3MgPT0gT1NYOgorICAgICAgICBleHRyYV9jZmxhZ3MgKz0gWworICAgICAgICAgICAgJy1X bm8tdW5rbm93bi13YXJuaW5nLW9wdGlvbicsCisgICAgICAgICAgICAnLVduby1pZ25vcmVkLWF0 dHJpYnV0ZXMnCisgICAgICAgIF0KKyAgICBpZiBvcyA9PSBPU1g6CisgICAgICAgIGV4dHJhX2Nm bGFncyArPSBbCisgICAgICAgICAgICAnLVduby1kZXByZWNhdGVkLWRlY2xhcmF0aW9ucycsCisg ICAgICAgIF0KKyAgICByZXR1cm4gZXh0cmFfY2ZsYWdzCisKKworIyBGb3JtYXRzIGEgam9iIGZy b20gYSBjb21iaW5hdGlvbiBvZiBmbGFncworZGVmIGZvcm1hdF9qb2Iob3MsIGFyY2gsIGNvbWJp bmF0aW9uKToKKyAgICBjb21waWxlcnMgPSBbeC52YWx1ZSBmb3IgeCBpbiBjb21iaW5hdGlvbiBp ZiB4LnR5cGUgPT0gT3B0aW9uLlR5cGUuQ09NUElMRVJdCisgICAgYXNzZXJ0KGxlbihjb21waWxl cnMpIDw9IDEpCisgICAgY29tcGlsZXJfZmxhZ3MgPSBbeC52YWx1ZSBmb3IgeCBpbiBjb21iaW5h dGlvbiBpZiB4LnR5cGUgPT0gT3B0aW9uLlR5cGUuQ09NUElMRVJfRkxBR10KKyAgICBjb25maWd1 cmVfZmxhZ3MgPSBbeC52YWx1ZSBmb3IgeCBpbiBjb21iaW5hdGlvbiBpZiB4LnR5cGUgPT0gT3B0 aW9uLlR5cGUuQ09ORklHVVJFX0ZMQUddCisgICAgbWFsbG9jX2NvbmYgPSBbeC52YWx1ZSBmb3Ig eCBpbiBjb21iaW5hdGlvbiBpZiB4LnR5cGUgPT0gT3B0aW9uLlR5cGUuTUFMTE9DX0NPTkZdCisg ICAgZmVhdHVyZXMgPSBbeC52YWx1ZSBmb3IgeCBpbiBjb21iaW5hdGlvbiBpZiB4LnR5cGUgPT0g T3B0aW9uLlR5cGUuRkVBVFVSRV0KKworICAgIGlmIGxlbihtYWxsb2NfY29uZikgPiAwOgorICAg ICAgICBjb25maWd1cmVfZmxhZ3MuYXBwZW5kKCctLXdpdGgtbWFsbG9jLWNvbmY9JyArICcsJy5q b2luKG1hbGxvY19jb25mKSkKKworICAgIGlmIG5vdCBjb21waWxlcnM6CisgICAgICAgIGNvbXBp bGVyID0gR0NDLnZhbHVlCisgICAgZWxzZToKKyAgICAgICAgY29tcGlsZXIgPSBjb21waWxlcnNb MF0KKworICAgIGV4dHJhX2Vudmlyb25tZW50X3ZhcnMgPSAnJworICAgIGNyb3NzX2NvbXBpbGUg PSBDUk9TU19DT01QSUxFXzMyQklULnZhbHVlIGluIGZlYXR1cmVzCisgICAgaWYgb3MgPT0gTElO VVggYW5kIGNyb3NzX2NvbXBpbGU6CisgICAgICAgIGNvbXBpbGVyX2ZsYWdzLmFwcGVuZCgnLW0z MicpCisKKyAgICBmZWF0dXJlc19zdHIgPSAnICcuam9pbihbJyB7fT15ZXMnLmZvcm1hdChmZWF0 dXJlKSBmb3IgZmVhdHVyZSBpbiBmZWF0dXJlc10pCisKKyAgICBzdHJpbmdpZnkgPSBsYW1iZGEg YXJyLCBuYW1lOiAnIHt9PSJ7fSInLmZvcm1hdChuYW1lLCAnICcuam9pbihhcnIpKSBpZiBhcnIg ZWxzZSAnJworICAgIGVudl9zdHJpbmcgPSAne317fXt9e317fXt9Jy5mb3JtYXQoCisgICAgICAg ICAgICBjb21waWxlciwKKyAgICAgICAgICAgIGZlYXR1cmVzX3N0ciwKKyAgICAgICAgICAgIHN0 cmluZ2lmeShjb21waWxlcl9mbGFncywgJ0NPTVBJTEVSX0ZMQUdTJyksCisgICAgICAgICAgICBz dHJpbmdpZnkoY29uZmlndXJlX2ZsYWdzLCAnQ09ORklHVVJFX0ZMQUdTJyksCisgICAgICAgICAg ICBzdHJpbmdpZnkoZ2V0X2V4dHJhX2NmbGFncyhvcywgY29tcGlsZXIpLCAnRVhUUkFfQ0ZMQUdT JyksCisgICAgICAgICAgICBleHRyYV9lbnZpcm9ubWVudF92YXJzKQorCisgICAgam9iID0gJyAg ICAtIG9zOiB7fVxuJy5mb3JtYXQob3MpCisgICAgam9iICs9ICcgICAgICBhcmNoOiB7fVxuJy5m b3JtYXQoYXJjaCkKKyAgICBqb2IgKz0gJyAgICAgIGVudjoge30nLmZvcm1hdChlbnZfc3RyaW5n KQorICAgIHJldHVybiBqb2IKKworCitkZWYgZ2VuZXJhdGVfdW51c3VhbF9jb21iaW5hdGlvbnMo dW51c3VhbHMsIG1heF91bnVzdWFsX29wdHMpOgorICAgICIiIgorICAgIEdlbmVyYXRlcyBkaWZm ZXJlbnQgY29tYmluYXRpb25zIG9mIG5vbi1zdGFuZGFyZCBjb21waWxlcnMsIGNvbXBpbGVyIGZs YWdzLAorICAgIGNvbmZpZ3VyZSBmbGFncyBhbmQgbWFsbG9jX2NvbmYgc2V0dGluZ3MuCisKKyAg ICBAcGFyYW0gbWF4X3VudXN1YWxfb3B0czogTGltaXQgb2YgdW51c3VhbCBvcHRpb25zIHBlciBj b21iaW5hdGlvbi4KKyAgICAiIiIKKyAgICByZXR1cm4gY2hhaW4uZnJvbV9pdGVyYWJsZSgKKyAg ICAgICAgICAgIFtjb21iaW5hdGlvbnModW51c3VhbHMsIGkpIGZvciBpIGluIHJhbmdlKG1heF91 bnVzdWFsX29wdHMgKyAxKV0pCisKKworZGVmIGluY2x1ZGVkKGNvbWJpbmF0aW9uLCBleGNsdWRl KToKKyAgICAiIiIKKyAgICBDaGVja3MgaWYgdGhlIGNvbWJpbmF0aW9uIG9mIG9wdGlvbnMgc2hv dWxkIGJlIGluY2x1ZGVkIGluIHRoZSBUcmF2aXMKKyAgICB0ZXN0aW5nIG1hdHJpeC4KKworICAg IEBwYXJhbSBleGNsdWRlOiBBIGxpc3Qgb2Ygb3B0aW9ucyB0byBiZSBhdm9pZGVkLgorICAgICIi IgorICAgIHJldHVybiBub3QgYW55KGV4Y2x1ZGVkIGluIGNvbWJpbmF0aW9uIGZvciBleGNsdWRl ZCBpbiBleGNsdWRlKQorCisKK2RlZiBnZW5lcmF0ZV9qb2JzKG9zLCBhcmNoLCBleGNsdWRlLCBt YXhfdW51c3VhbF9vcHRzLCB1bnVzdWFscz1hbGxfdW51c3VhbHMpOgorICAgIGpvYnMgPSBbXQor ICAgIGZvciBjb21iaW5hdGlvbiBpbiBnZW5lcmF0ZV91bnVzdWFsX2NvbWJpbmF0aW9ucyh1bnVz dWFscywgbWF4X3VudXN1YWxfb3B0cyk6CisgICAgICAgIGlmIGluY2x1ZGVkKGNvbWJpbmF0aW9u LCBleGNsdWRlKToKKyAgICAgICAgICAgIGpvYnMuYXBwZW5kKGZvcm1hdF9qb2Iob3MsIGFyY2gs IGNvbWJpbmF0aW9uKSkKKyAgICByZXR1cm4gJ1xuJy5qb2luKGpvYnMpCisKKworZGVmIGdlbmVy YXRlX2xpbnV4KGFyY2gpOgorICAgIG9zID0gTElOVVgKKworICAgICMgT25seSBnZW5lcmF0ZSAy IHVudXN1YWwgb3B0aW9ucyBmb3IgQU1ENjQgdG8gcmVkdWNlIG1hdHJpeCBzaXplCisgICAgbWF4 X3VudXN1YWxfb3B0cyA9IE1BWF9VTlVTVUFMX09QVElPTlMgaWYgYXJjaCA9PSBBTUQ2NCBlbHNl IDEKKworICAgIGV4Y2x1ZGUgPSBbXQorICAgIGlmIGFyY2ggPT0gUFBDNjRMRToKKyAgICAgICAg IyBBdm9pZCAzMiBiaXQgYnVpbGRzIGFuZCBjbGFuZyBvbiBQb3dlclBDCisgICAgICAgIGV4Y2x1 ZGUgPSAoQ1JPU1NfQ09NUElMRV8zMkJJVCwgQ0xBTkcsKQorCisgICAgcmV0dXJuIGdlbmVyYXRl X2pvYnMob3MsIGFyY2gsIGV4Y2x1ZGUsIG1heF91bnVzdWFsX29wdHMpCisKKworZGVmIGdlbmVy YXRlX21hY29zKGFyY2gpOgorICAgIG9zID0gT1NYCisKKyAgICBtYXhfdW51c3VhbF9vcHRzID0g MQorCisgICAgZXhjbHVkZSA9IChbT3B0aW9uLmFzX21hbGxvY19jb25mKG9wdCkgZm9yIG9wdCBp biAoCisgICAgICAgICAgICAnZHNzOnByaW1hcnknLAorICAgICAgICAgICAgJ3BlcmNwdV9hcmVu YTpwZXJjcHUnLAorICAgICAgICAgICAgJ2JhY2tncm91bmRfdGhyZWFkOnRydWUnKV0gKworICAg ICAgICBbT3B0aW9uLmFzX2NvbmZpZ3VyZV9mbGFnKCctLWVuYWJsZS1wcm9mJyldICsKKyAgICAg ICAgW0NMQU5HLF0pCisKKyAgICByZXR1cm4gZ2VuZXJhdGVfam9icyhvcywgYXJjaCwgZXhjbHVk ZSwgbWF4X3VudXN1YWxfb3B0cykKKworCitkZWYgZ2VuZXJhdGVfd2luZG93cyhhcmNoKToKKyAg ICBvcyA9IFdJTkRPV1MKKworICAgIG1heF91bnVzdWFsX29wdHMgPSAzCisgICAgdW51c3VhbHMg PSAoCisgICAgICAgIE9wdGlvbi5hc19jb25maWd1cmVfZmxhZygnLS1lbmFibGUtZGVidWcnKSwK KyAgICAgICAgQ0wsCisgICAgICAgIENST1NTX0NPTVBJTEVfMzJCSVQsCisgICAgKQorICAgIHJl dHVybiBnZW5lcmF0ZV9qb2JzKG9zLCBhcmNoLCAoKSwgbWF4X3VudXN1YWxfb3B0cywgdW51c3Vh bHMpCisKKworZGVmIGdlbmVyYXRlX2ZyZWVic2QoYXJjaCk6CisgICAgb3MgPSBGUkVFQlNECisK KyAgICBtYXhfdW51c3VhbF9vcHRzID0gNAorICAgIHVudXN1YWxzID0gKAorICAgICAgICBPcHRp b24uYXNfY29uZmlndXJlX2ZsYWcoJy0tZW5hYmxlLWRlYnVnJyksCisgICAgICAgIE9wdGlvbi5h c19jb25maWd1cmVfZmxhZygnLS1lbmFibGUtcHJvZiAtLWVuYWJsZS1wcm9mLWxpYnVud2luZCcp LAorICAgICAgICBPcHRpb24uYXNfY29uZmlndXJlX2ZsYWcoJy0td2l0aC1sZy1wYWdlPTE2IC0t d2l0aC1tYWxsb2MtY29uZj10Y2FjaGU6ZmFsc2UnKSwKKyAgICAgICAgQ1JPU1NfQ09NUElMRV8z MkJJVCwKKyAgICApCisgICAgcmV0dXJuIGdlbmVyYXRlX2pvYnMob3MsIGFyY2gsICgpLCBtYXhf dW51c3VhbF9vcHRzLCB1bnVzdWFscykKKworCisKK2RlZiBnZXRfbWFudWFsX2pvYnMoKToKKyAg ICByZXR1cm4gIiIiXAorICAgICMgRGV2ZWxvcG1lbnQgYnVpbGQKKyAgICAtIG9zOiBsaW51eAor ICAgICAgZW52OiBDQz1nY2MgQ1hYPWcrKyBDT05GSUdVUkVfRkxBR1M9Ii0tZW5hYmxlLWRlYnVn IFwKKy0tZGlzYWJsZS1jYWNoZS1vYmxpdmlvdXMgLS1lbmFibGUtc3RhdHMgLS1lbmFibGUtbG9n IC0tZW5hYmxlLXByb2YiIFwKK0VYVFJBX0NGTEFHUz0iLVdlcnJvciAtV25vLWFycmF5LWJvdW5k cyIKKyAgICAjIC0tZW5hYmxlLWV4cGVybWVudGFsLXNtYWxsb2N4OgorICAgIC0gb3M6IGxpbnV4 CisgICAgICBlbnY6IENDPWdjYyBDWFg9ZysrIENPTkZJR1VSRV9GTEFHUz0iLS1lbmFibGUtZGVi dWcgXAorLS1lbmFibGUtZXhwZXJpbWVudGFsLXNtYWxsb2N4IC0tZW5hYmxlLXN0YXRzIC0tZW5h YmxlLXByb2YiIFwKK0VYVFJBX0NGTEFHUz0iLVdlcnJvciAtV25vLWFycmF5LWJvdW5kcyIKKyIi IgorCisKK2RlZiBtYWluKCk6CisgICAgam9icyA9ICdcbicuam9pbigoCisgICAgICAgIGdlbmVy YXRlX3dpbmRvd3MoQU1ENjQpLAorCisgICAgICAgIGdlbmVyYXRlX2ZyZWVic2QoQU1ENjQpLAor CisgICAgICAgIGdlbmVyYXRlX2xpbnV4KEFNRDY0KSwKKyAgICAgICAgZ2VuZXJhdGVfbGludXgo UFBDNjRMRSksCisKKyAgICAgICAgZ2VuZXJhdGVfbWFjb3MoQU1ENjQpLAorCisgICAgICAgIGdl dF9tYW51YWxfam9icygpLAorICAgICkpCisKKyAgICBwcmludChUUkFWSVNfVEVNUExBVEUuZm9y bWF0KGpvYnM9am9icykpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBtYWlu KCkKCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9z Y3JpcHRzL2xpbnV4L2JlZm9yZV9pbnN0YWxsLnNoIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQv amVtYWxsb2MtNS4zLjAvc2NyaXB0cy9saW51eC9iZWZvcmVfaW5zdGFsbC5zaApuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzQxNzQ2Ci0tLSAvZGV2L251bGwKKysrIGIvMzg5 LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvc2NyaXB0cy9saW51eC9iZWZvcmVf aW5zdGFsbC5zaApAQCAtMCwwICsxLDEzIEBACisjIS9iaW4vYmFzaAorCitzZXQgLWV2CisKK2lm IFtbICIkVFJBVklTX09TX05BTUUiICE9ICJsaW51eCIgXV07IHRoZW4KKyAgICBlY2hvICJJbmNv cnJlY3QgXCRUUkFWSVNfT1NfTkFNRTogZXhwZWN0ZWQgbGludXgsIGdvdCAkVFJBVklTX09TX05B TUUiCisgICAgZXhpdCAxCitmaQorCitpZiBbWyAiJENST1NTX0NPTVBJTEVfMzJCSVQiID09ICJ5 ZXMiIF1dOyB0aGVuCisgICAgc3VkbyBhcHQtZ2V0IHVwZGF0ZQorICAgIHN1ZG8gYXB0LWdldCAt eSBpbnN0YWxsIGdjYy1tdWx0aWxpYiBnKystbXVsdGlsaWIKK2ZpCgpkaWZmIC0tZ2l0IGEvMzg5 LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvc2NyaXB0cy93aW5kb3dzL2JlZm9y ZV9pbnN0YWxsLnNoIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvc2Ny aXB0cy93aW5kb3dzL2JlZm9yZV9pbnN0YWxsLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAuLjI3NDBjNDUKLS0tIC9kZXYvbnVsbAorKysgYi8zODktZHMtYmFzZS0zLjMuMC1i dWlsZC9qZW1hbGxvYy01LjMuMC9zY3JpcHRzL3dpbmRvd3MvYmVmb3JlX2luc3RhbGwuc2gKQEAg LTAsMCArMSw4MyBAQAorIyEvYmluL2Jhc2gKKworc2V0IC1lCisKKyMgVGhlIHB1cnBvc2Ugb2Yg dGhpcyBzY3JpcHQgaXMgdG8gaW5zdGFsbCBidWlsZCBkZXBlbmRlbmNpZXMgYW5kIHNldAorIyAk YnVpbGRfZW52IHRvIGEgZnVuY3Rpb24gdGhhdCBzZXRzIGFwcHJvcHJpYXRlIGVudmlyb25tZW50 IHZhcmlhYmxlcywKKyMgdG8gZW5hYmxlIChtaW5ndzMyfG1pbmd3NjQpIGVudmlyb25tZW50IGlm IHdlIHdhbnQgdG8gY29tcGlsZSB3aXRoIGdjYywgb3IKKyMgKG1pbmd3MzJ8bWluZ3c2NCkgKyB2 Y3ZhcnNhbGwuYmF0IGlmIHdlIHdhbnQgdG8gY29tcGlsZSB3aXRoIGNsLmV4ZQorCitpZiBbWyAi JFRSQVZJU19PU19OQU1FIiAhPSAid2luZG93cyIgXV07IHRoZW4KKyAgICBlY2hvICJJbmNvcnJl Y3QgXCRUUkFWSVNfT1NfTkFNRTogZXhwZWN0ZWQgd2luZG93cywgZ290ICRUUkFWSVNfT1NfTkFN RSIKKyAgICBleGl0IDEKK2ZpCisKK1tbICEgLWYgQzovdG9vbHMvbXN5czY0L21zeXMyX3NoZWxs LmNtZCBdXSAmJiBybSAtcmYgQzovdG9vbHMvbXN5czY0CitjaG9jbyB1bmluc3RhbGwgLXkgbWlu Z3cKK2Nob2NvIHVwZ3JhZGUgLS1uby1wcm9ncmVzcyAteSBtc3lzMgorCittc3lzX3NoZWxsX2Nt ZD0iY21kIC8vQyBSZWZyZXNoRW52LmNtZCAmJiBzZXQgTVNZUz13aW5zeW1saW5rczpuYXRpdmVz dHJpY3QgJiYgQzpcXHRvb2xzXFxtc3lzNjRcXG1zeXMyX3NoZWxsLmNtZCIKKworbXN5czIoKSB7 ICRtc3lzX3NoZWxsX2NtZCAtZGVmdGVybSAtbm8tc3RhcnQgLW1zeXMyIC1jICIkKiI7IH0KK21p bmd3MzIoKSB7ICRtc3lzX3NoZWxsX2NtZCAtZGVmdGVybSAtbm8tc3RhcnQgLW1pbmd3MzIgLWMg IiQqIjsgfQorbWluZ3c2NCgpIHsgJG1zeXNfc2hlbGxfY21kIC1kZWZ0ZXJtIC1uby1zdGFydCAt bWluZ3c2NCAtYyAiJCoiOyB9CisKK2lmIFtbICIkQ1JPU1NfQ09NUElMRV8zMkJJVCIgPT0gInll cyIgXV07IHRoZW4KKyAgICBtaW5ndz1taW5ndzMyCisgICAgbWluZ3dfZ2NjX3BhY2thZ2VfYXJj aD1pNjg2CitlbHNlCisgICAgbWluZ3c9bWluZ3c2NAorICAgIG1pbmd3X2djY19wYWNrYWdlX2Fy Y2g9eDg2XzY0CitmaQorCitpZiBbWyAiJENDIiA9PSAqImdjYyIqIF1dOyB0aGVuCisgICAgJG1p bmd3IHBhY21hbiAtUyAtLW5vY29uZmlybSAtLW5lZWRlZCBcCisgICAgICAgIGF1dG90b29scyBc CisgICAgICAgIGdpdCBcCisgICAgICAgIG1pbmd3LXc2NC0ke21pbmd3X2djY19wYWNrYWdlX2Fy Y2h9LW1ha2UgXAorCSAgICBtaW5ndy13NjQtJHttaW5nd19nY2NfcGFja2FnZV9hcmNofS1nY2Mg XAorCSAgICBtaW5ndy13NjQtJHttaW5nd19nY2NfcGFja2FnZV9hcmNofS1iaW51dGlscworICAg IGJ1aWxkX2Vudj0kbWluZ3cKK2VsaWYgW1sgIiRDQyIgPT0gKiJjbCIqIF1dOyB0aGVuCisgICAg JG1pbmd3IHBhY21hbiAtUyAtLW5vY29uZmlybSAtLW5lZWRlZCBcCisgICAgICAgIGF1dG90b29s cyBcCisJICAgIGdpdCBcCisJICAgIG1pbmd3LXc2NC0ke21pbmd3X2djY19wYWNrYWdlX2FyY2h9 LW1ha2UgXAorCSAgICBtaW5ndy13NjQtJHttaW5nd19nY2NfcGFja2FnZV9hcmNofS1iaW51dGls cworCisgICAgIyBJbiBvcmRlciB0byB1c2UgTVNWQyBjb21waWxlciAoY2wuZXhlKSwgd2UgbmVl ZCB0byBjb3JyZWN0bHkgc2V0IHNvbWUgZW52aXJvbm1lbnQKKyAgICAjIHZhcmlhYmxlcywgbmFt ZWx5IFBBVEgsIElOQ0xVREUsIExJQiBhbmQgTElCUEFUSC4gVGhlIGNvcnJlY3QgdmFsdWVzIG9m IHRoZXNlCisgICAgIyB2YXJpYWJsZXMgYXJlIHNldCBieSBhIGJhdGNoIHNjcmlwdCAidmN2YXJz YWxsLmJhdCIuIFRoZSBjb2RlIGJlbG93IGdlbmVyYXRlcworICAgICMgYSBiYXRjaCBzY3JpcHQg dGhhdCBjYWxscyAidmN2YXJzYWxsLmJhdCIgYW5kIHByaW50cyB0aGUgZW52aXJvbm1lbnQgdmFy aWFibGVzLgorICAgICMKKyAgICAjIFRoZW4sIHRob3NlIGVudmlyb25tZW50IHZhcmlhYmxlcyBh cmUgdHJhbnNmb3JtZWQgZnJvbSBjbWQgdG8gYmFzaCBmb3JtYXQgYW5kIHB1dAorICAgICMgaW50 byBhIHNjcmlwdCAkYXBwbHlfdnNlbnYuIElmIGNsLmV4ZSBuZWVkcyB0byBiZSB1c2VkIGZyb20g YmFzaCwgb25lIGNhbgorICAgICMgJ3NvdXJjZSAkYXBwbHlfdnNlbnYnIGFuZCBpdCB3aWxsIGFw cGx5IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgbmVlZGVkIGZvciBjbC5leGUKKyAgICAjIHRv IGJlIGxvY2F0ZWQgYW5kIGZ1bmN0aW9uIGNvcnJlY3RseS4KKyAgICAjCisgICAgIyBBdCBsYXN0 LCBhIGZ1bmN0aW9uICJtaW5nd193aXRoX21zdmNfdmFycyIgaXMgZ2VuZXJhdGVkIHdoaWNoIGZv cndhcmRzIHVzZXIgaW5wdXQKKyAgICAjIGludG8gYSBjb3JyZWN0IG1pbmd3ICgzMiBvciA2NCkg c3Vic2hlbGwgdGhhdCBhdXRvbWF0aWNhbGx5IHBlcmZvcm1zICdzb3VyY2UgJGFwcGx5X3ZzZW52 JywKKyAgICAjIG1ha2luZyBpdCBwb3NzaWJsZSBmb3IgYXV0b3Rvb2xzIHRvIGRpc2NvdmVyIGFu ZCB1c2UgY2wuZXhlLgorICAgIHZjdmFyc2FsbD0idmN2YXJzYWxsLnRtcC5iYXQiCisgICAgZWNo byAiQGVjaG8gb2ZmIiA+ICR2Y3ZhcnNhbGwKKyAgICBlY2hvICJjYWxsIFwiYzpcUHJvZ3JhbSBG aWxlcyAoeDg2KVxNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyAxNC4wXFZDXFxcdmN2YXJzYWxsLmJh dFwiICRVU0VfTVNWQyIgPj4gJHZjdmFyc2FsbAorICAgIGVjaG8gInNldCIgPj4gJHZjdmFyc2Fs bAorCisgICAgYXBwbHlfdnNlbnY9Ii4vYXBwbHlfdnNlbnYuc2giCisgICAgY21kIC8vQyAkdmN2 YXJzYWxsIHwgZ3JlcCAtRSAiXlBBVEg9IiB8IHNlZCAtbiAtZSAncy9cKC4qXCk9XCguKlwpL2V4 cG9ydCBcMT0kUEFUSDoiXDIiL2cnIFwKKyAgICAgICAgLWUgJ3MvXChbYS16QS1aXVwpOltcXFwv XS9cL1wxXC8vZycgXAorICAgICAgICAtZSAncy9cXC9cLy9nJyBcCisgICAgICAgIC1lICdzLztc Ly86XC8vZ3AnID4gJGFwcGx5X3ZzZW52CisgICAgY21kIC8vQyAkdmN2YXJzYWxsIHwgZ3JlcCAt RSAiXihJTkNMVURFfExJQnxMSUJQQVRIKT0iIHwgc2VkIC1uIC1lICdzL1woLipcKT1cKC4qXCkv ZXhwb3J0IFwxPSJcMiIvZ3AnID4+ICRhcHBseV92c2VudgorCisgICAgY2F0ICRhcHBseV92c2Vu dgorICAgIG1pbmd3X3dpdGhfbXN2Y192YXJzKCkgeyAkbXN5c19zaGVsbF9jbWQgLWRlZnRlcm0g LW5vLXN0YXJ0IC0kbWluZ3cgLWMgInNvdXJjZSAkYXBwbHlfdnNlbnYgJiYgIiIkKiI7IH0KKyAg ICBidWlsZF9lbnY9bWluZ3dfd2l0aF9tc3ZjX3ZhcnMKKworICAgIHJtIC1mICR2Y3ZhcnNhbGwK K2Vsc2UKKyAgICBlY2hvICJVbmtub3duIEMgY29tcGlsZXI6ICRDQyIKKyAgICBleGl0IDEKK2Zp CisKK2VjaG8gIkJ1aWxkIGVudmlyb25tZW50IGZ1bmN0aW9uOiAkYnVpbGRfZW52IgoKZGlmZiAt LWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3NjcmlwdHMvd2lu ZG93cy9iZWZvcmVfc2NyaXB0LnNoIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2Mt NS4zLjAvc2NyaXB0cy93aW5kb3dzL2JlZm9yZV9zY3JpcHQuc2gKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMC4uOWQzMGFiYQotLS0gL2Rldi9udWxsCisrKyBiLzM4OS1kcy1iYXNl LTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3NjcmlwdHMvd2luZG93cy9iZWZvcmVfc2NyaXB0 LnNoCkBAIC0wLDAgKzEsMjAgQEAKKyMhL2Jpbi9iYXNoCisKK3NldCAtZQorCitpZiBbWyAiJFRS QVZJU19PU19OQU1FIiAhPSAid2luZG93cyIgXV07IHRoZW4KKyAgICBlY2hvICJJbmNvcnJlY3Qg XCRUUkFWSVNfT1NfTkFNRTogZXhwZWN0ZWQgd2luZG93cywgZ290ICRUUkFWSVNfT1NfTkFNRSIK KyAgICBleGl0IDEKK2ZpCisKKyRidWlsZF9lbnYgYXV0b2NvbmYKKyRidWlsZF9lbnYgLi9jb25m aWd1cmUgJENPTkZJR1VSRV9GTEFHUworIyBtaW5ndzMyLW1ha2Ugc2ltcGx5IG1lYW5zICJtYWtl IiwgdW5yZWxhdGVkIHRvIG1pbmd3MzIgdnMgbWluZ3c2NC4KKyMgU2ltcGx5IGRpc3JlZ2FyZCB0 aGUgcHJlZml4IGFuZCB0cmVhdCBpcyBhcyAibWFrZSIuCiskYnVpbGRfZW52IG1pbmd3MzItbWFr ZSAtajMKKyMgQXQgdGhlIG1vbWVudCwgaXQncyBpbXBvc3NpYmxlIHRvIG1ha2UgdGVzdHMgaW4g cGFyYWxsZWwsCisjIHNlZW1pbmdseSBkdWUgdG8gY29uY3VycmVudCB3cml0ZXMgdG8gJy5wZGIn IGZpbGUuIEkgZG9uJ3Qga25vdyB3aHkKKyMgdGhhdCBoYXBwZW5zLCBiZWNhdXNlIHdlIGV4cGxp Y2l0bHkgc3VwcGx5ICcvRnMnIHRvIHRoZSBjb21waWxlci4KKyMgVW50aWwgd2UgZmlndXJlIG91 dCBob3cgdG8gZml4IGl0LCB3ZSBzaG91bGQgYnVpbGQgdGVzdHMgc2VxdWVudGlhbGx5CisjIG9u IFdpbmRvd3MuCiskYnVpbGRfZW52IG1pbmd3MzItbWFrZSB0ZXN0cwoKZGlmZiAtLWdpdCBhLzM4 OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3NjcmlwdHMvd2luZG93cy9zY3Jp cHQuc2ggYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9zY3JpcHRzL3dp bmRvd3Mvc2NyaXB0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhMjdm NzAKLS0tIC9kZXYvbnVsbAorKysgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01 LjMuMC9zY3JpcHRzL3dpbmRvd3Mvc2NyaXB0LnNoCkBAIC0wLDAgKzEsMTAgQEAKKyMhL2Jpbi9i YXNoCisKK3NldCAtZQorCitpZiBbWyAiJFRSQVZJU19PU19OQU1FIiAhPSAid2luZG93cyIgXV07 IHRoZW4KKyAgICBlY2hvICJJbmNvcnJlY3QgXCRUUkFWSVNfT1NfTkFNRTogZXhwZWN0ZWQgd2lu ZG93cywgZ290ICRUUkFWSVNfT1NfTkFNRSIKKyAgICBleGl0IDEKK2ZpCisKKyRidWlsZF9lbnYg bWluZ3czMi1tYWtlIC1rIGNoZWNrCgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVp bGQvamVtYWxsb2MtNS4zLjAvc3JjL2FyZW5hLmMgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9q ZW1hbGxvYy01LjMuMC9zcmMvYXJlbmEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwLi44NTdiMjdjCi0tLSAvZGV2L251bGwKKysrIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQv amVtYWxsb2MtNS4zLjAvc3JjL2FyZW5hLmMKQEAgLTAsMCArMSwxODkxIEBACisjaW5jbHVkZSAi amVtYWxsb2MvaW50ZXJuYWwvamVtYWxsb2NfcHJlYW1ibGUuaCIKKyNpbmNsdWRlICJqZW1hbGxv Yy9pbnRlcm5hbC9qZW1hbGxvY19pbnRlcm5hbF9pbmNsdWRlcy5oIgorCisjaW5jbHVkZSAiamVt YWxsb2MvaW50ZXJuYWwvYXNzZXJ0LmgiCisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvZGVj YXkuaCIKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9laG9va3MuaCIKKyNpbmNsdWRlICJq ZW1hbGxvYy9pbnRlcm5hbC9leHRlbnRfZHNzLmgiCisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJu YWwvZXh0ZW50X21tYXAuaCIKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9zYW4uaCIKKyNp bmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9tdXRleC5oIgorI2luY2x1ZGUgImplbWFsbG9jL2lu dGVybmFsL3J0cmVlLmgiCisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvc2FmZXR5X2NoZWNr LmgiCisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvdXRpbC5oIgorCitKRU1BTExPQ19ESUFH Tk9TVElDX0RJU0FCTEVfU1BVUklPVVMKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIERh dGEuICovCisKKy8qCisgKiBEZWZpbmUgbmFtZXMgZm9yIGJvdGggdW5pbmluaXRpYWxpemVkIGFu ZCBpbml0aWFsaXplZCBwaGFzZXMsIHNvIHRoYXQKKyAqIG9wdGlvbnMgYW5kIG1hbGxjdGwgcHJv Y2Vzc2luZyBhcmUgc3RyYWlnaHRmb3J3YXJkLgorICovCitjb25zdCBjaGFyICpwZXJjcHVfYXJl bmFfbW9kZV9uYW1lc1tdID0geworCSJwZXJjcHUiLAorCSJwaHljcHUiLAorCSJkaXNhYmxlZCIs CisJInBlcmNwdSIsCisJInBoeWNwdSIKK307CitwZXJjcHVfYXJlbmFfbW9kZV90IG9wdF9wZXJj cHVfYXJlbmEgPSBQRVJDUFVfQVJFTkFfREVGQVVMVDsKKworc3NpemVfdCBvcHRfZGlydHlfZGVj YXlfbXMgPSBESVJUWV9ERUNBWV9NU19ERUZBVUxUOworc3NpemVfdCBvcHRfbXV6enlfZGVjYXlf bXMgPSBNVVpaWV9ERUNBWV9NU19ERUZBVUxUOworCitzdGF0aWMgYXRvbWljX3pkX3QgZGlydHlf ZGVjYXlfbXNfZGVmYXVsdDsKK3N0YXRpYyBhdG9taWNfemRfdCBtdXp6eV9kZWNheV9tc19kZWZh dWx0OworCitlbWFwX3QgYXJlbmFfZW1hcF9nbG9iYWw7CitwYV9jZW50cmFsX3QgYXJlbmFfcGFf Y2VudHJhbF9nbG9iYWw7CisKK2Rpdl9pbmZvX3QgYXJlbmFfYmluaW5kX2Rpdl9pbmZvW1NDX05C SU5TXTsKKworc2l6ZV90IG9wdF9vdmVyc2l6ZV90aHJlc2hvbGQgPSBPVkVSU0laRV9USFJFU0hP TERfREVGQVVMVDsKK3NpemVfdCBvdmVyc2l6ZV90aHJlc2hvbGQgPSBPVkVSU0laRV9USFJFU0hP TERfREVGQVVMVDsKKwordWludDMyX3QgYXJlbmFfYmluX29mZnNldHNbU0NfTkJJTlNdOworc3Rh dGljIHVuc2lnbmVkIG5iaW5zX3RvdGFsOworCitzdGF0aWMgdW5zaWduZWQgaHVnZV9hcmVuYV9p bmQ7CisKK2NvbnN0IGFyZW5hX2NvbmZpZ190IGFyZW5hX2NvbmZpZ19kZWZhdWx0ID0geworCS8q IC5leHRlbnRfaG9va3MgPSAqLyAoZXh0ZW50X2hvb2tzX3QgKikmZWhvb2tzX2RlZmF1bHRfZXh0 ZW50X2hvb2tzLAorCS8qIC5tZXRhZGF0YV91c2VfaG9va3MgPSAqLyB0cnVlLAorfTsKKworLyoq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiBGdW5jdGlvbiBwcm90b3R5cGVzIGZvciBzdGF0 aWMgZnVuY3Rpb25zIHRoYXQgYXJlIHJlZmVyZW5jZWQgcHJpb3IgdG8KKyAqIGRlZmluaXRpb24u CisgKi8KKworc3RhdGljIGJvb2wgYXJlbmFfZGVjYXlfZGlydHkodHNkbl90ICp0c2RuLCBhcmVu YV90ICphcmVuYSwKKyAgICBib29sIGlzX2JhY2tncm91bmRfdGhyZWFkLCBib29sIGFsbCk7Citz dGF0aWMgdm9pZCBhcmVuYV9iaW5fbG93ZXJfc2xhYih0c2RuX3QgKnRzZG4sIGFyZW5hX3QgKmFy ZW5hLCBlZGF0YV90ICpzbGFiLAorICAgIGJpbl90ICpiaW4pOworc3RhdGljIHZvaWQKK2FyZW5h X21heWJlX2RvX2RlZmVycmVkX3dvcmsodHNkbl90ICp0c2RuLCBhcmVuYV90ICphcmVuYSwgZGVj YXlfdCAqZGVjYXksCisgICAgc2l6ZV90IG5wYWdlc19uZXcpOworCisvKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqLworCit2b2lkCithcmVuYV9iYXNpY19zdGF0c19tZXJnZSh0c2RuX3QgKnRzZG4sIGFy ZW5hX3QgKmFyZW5hLCB1bnNpZ25lZCAqbnRocmVhZHMsCisgICAgY29uc3QgY2hhciAqKmRzcywg c3NpemVfdCAqZGlydHlfZGVjYXlfbXMsIHNzaXplX3QgKm11enp5X2RlY2F5X21zLAorICAgIHNp emVfdCAqbmFjdGl2ZSwgc2l6ZV90ICpuZGlydHksIHNpemVfdCAqbm11enp5KSB7CisJKm50aHJl YWRzICs9IGFyZW5hX250aHJlYWRzX2dldChhcmVuYSwgZmFsc2UpOworCSpkc3MgPSBkc3NfcHJl Y19uYW1lc1thcmVuYV9kc3NfcHJlY19nZXQoYXJlbmEpXTsKKwkqZGlydHlfZGVjYXlfbXMgPSBh cmVuYV9kZWNheV9tc19nZXQoYXJlbmEsIGV4dGVudF9zdGF0ZV9kaXJ0eSk7CisJKm11enp5X2Rl Y2F5X21zID0gYXJlbmFfZGVjYXlfbXNfZ2V0KGFyZW5hLCBleHRlbnRfc3RhdGVfbXV6enkpOwor CXBhX3NoYXJkX2Jhc2ljX3N0YXRzX21lcmdlKCZhcmVuYS0+cGFfc2hhcmQsIG5hY3RpdmUsIG5k aXJ0eSwgbm11enp5KTsKK30KKwordm9pZAorYXJlbmFfc3RhdHNfbWVyZ2UodHNkbl90ICp0c2Ru LCBhcmVuYV90ICphcmVuYSwgdW5zaWduZWQgKm50aHJlYWRzLAorICAgIGNvbnN0IGNoYXIgKipk c3MsIHNzaXplX3QgKmRpcnR5X2RlY2F5X21zLCBzc2l6ZV90ICptdXp6eV9kZWNheV9tcywKKyAg ICBzaXplX3QgKm5hY3RpdmUsIHNpemVfdCAqbmRpcnR5LCBzaXplX3QgKm5tdXp6eSwgYXJlbmFf c3RhdHNfdCAqYXN0YXRzLAorICAgIGJpbl9zdGF0c19kYXRhX3QgKmJzdGF0cywgYXJlbmFfc3Rh dHNfbGFyZ2VfdCAqbHN0YXRzLAorICAgIHBhY19lc3RhdHNfdCAqZXN0YXRzLCBocGFfc2hhcmRf c3RhdHNfdCAqaHBhc3RhdHMsIHNlY19zdGF0c190ICpzZWNzdGF0cykgeworCWNhc3NlcnQoY29u ZmlnX3N0YXRzKTsKKworCWFyZW5hX2Jhc2ljX3N0YXRzX21lcmdlKHRzZG4sIGFyZW5hLCBudGhy ZWFkcywgZHNzLCBkaXJ0eV9kZWNheV9tcywKKwkgICAgbXV6enlfZGVjYXlfbXMsIG5hY3RpdmUs IG5kaXJ0eSwgbm11enp5KTsKKworCXNpemVfdCBiYXNlX2FsbG9jYXRlZCwgYmFzZV9yZXNpZGVu dCwgYmFzZV9tYXBwZWQsIG1ldGFkYXRhX3RocDsKKwliYXNlX3N0YXRzX2dldCh0c2RuLCBhcmVu YS0+YmFzZSwgJmJhc2VfYWxsb2NhdGVkLCAmYmFzZV9yZXNpZGVudCwKKwkgICAgJmJhc2VfbWFw cGVkLCAmbWV0YWRhdGFfdGhwKTsKKwlzaXplX3QgcGFjX21hcHBlZF9zeiA9IHBhY19tYXBwZWQo JmFyZW5hLT5wYV9zaGFyZC5wYWMpOworCWFzdGF0cy0+bWFwcGVkICs9IGJhc2VfbWFwcGVkICsg cGFjX21hcHBlZF9zejsKKwlhc3RhdHMtPnJlc2lkZW50ICs9IGJhc2VfcmVzaWRlbnQ7CisKKwlM T0NLRURJTlRfTVRYX0xPQ0sodHNkbiwgYXJlbmEtPnN0YXRzLm10eCk7CisKKwlhc3RhdHMtPmJh c2UgKz0gYmFzZV9hbGxvY2F0ZWQ7CisJYXRvbWljX2xvYWRfYWRkX3N0b3JlX3p1KCZhc3RhdHMt PmludGVybmFsLCBhcmVuYV9pbnRlcm5hbF9nZXQoYXJlbmEpKTsKKwlhc3RhdHMtPm1ldGFkYXRh X3RocCArPSBtZXRhZGF0YV90aHA7CisKKwlmb3IgKHN6aW5kX3QgaSA9IDA7IGkgPCBTQ19OU0la RVMgLSBTQ19OQklOUzsgaSsrKSB7CisJCXVpbnQ2NF90IG5tYWxsb2MgPSBsb2NrZWRfcmVhZF91 NjQodHNkbiwKKwkJICAgIExPQ0tFRElOVF9NVFgoYXJlbmEtPnN0YXRzLm10eCksCisJCSAgICAm YXJlbmEtPnN0YXRzLmxzdGF0c1tpXS5ubWFsbG9jKTsKKwkJbG9ja2VkX2luY191NjRfdW5zeW5j aHJvbml6ZWQoJmxzdGF0c1tpXS5ubWFsbG9jLCBubWFsbG9jKTsKKwkJYXN0YXRzLT5ubWFsbG9j X2xhcmdlICs9IG5tYWxsb2M7CisKKwkJdWludDY0X3QgbmRhbGxvYyA9IGxvY2tlZF9yZWFkX3U2 NCh0c2RuLAorCQkgICAgTE9DS0VESU5UX01UWChhcmVuYS0+c3RhdHMubXR4KSwKKwkJICAgICZh cmVuYS0+c3RhdHMubHN0YXRzW2ldLm5kYWxsb2MpOworCQlsb2NrZWRfaW5jX3U2NF91bnN5bmNo cm9uaXplZCgmbHN0YXRzW2ldLm5kYWxsb2MsIG5kYWxsb2MpOworCQlhc3RhdHMtPm5kYWxsb2Nf bGFyZ2UgKz0gbmRhbGxvYzsKKworCQl1aW50NjRfdCBucmVxdWVzdHMgPSBsb2NrZWRfcmVhZF91 NjQodHNkbiwKKwkJICAgIExPQ0tFRElOVF9NVFgoYXJlbmEtPnN0YXRzLm10eCksCisJCSAgICAm YXJlbmEtPnN0YXRzLmxzdGF0c1tpXS5ucmVxdWVzdHMpOworCQlsb2NrZWRfaW5jX3U2NF91bnN5 bmNocm9uaXplZCgmbHN0YXRzW2ldLm5yZXF1ZXN0cywKKwkJICAgIG5tYWxsb2MgKyBucmVxdWVz dHMpOworCQlhc3RhdHMtPm5yZXF1ZXN0c19sYXJnZSArPSBubWFsbG9jICsgbnJlcXVlc3RzOwor CisJCS8qIG5maWxsID09IG5tYWxsb2MgZm9yIGxhcmdlIGN1cnJlbnRseS4gKi8KKwkJbG9ja2Vk X2luY191NjRfdW5zeW5jaHJvbml6ZWQoJmxzdGF0c1tpXS5uZmlsbHMsIG5tYWxsb2MpOworCQlh c3RhdHMtPm5maWxsc19sYXJnZSArPSBubWFsbG9jOworCisJCXVpbnQ2NF90IG5mbHVzaCA9IGxv Y2tlZF9yZWFkX3U2NCh0c2RuLAorCQkgICAgTE9DS0VESU5UX01UWChhcmVuYS0+c3RhdHMubXR4 KSwKKwkJICAgICZhcmVuYS0+c3RhdHMubHN0YXRzW2ldLm5mbHVzaGVzKTsKKwkJbG9ja2VkX2lu Y191NjRfdW5zeW5jaHJvbml6ZWQoJmxzdGF0c1tpXS5uZmx1c2hlcywgbmZsdXNoKTsKKwkJYXN0 YXRzLT5uZmx1c2hlc19sYXJnZSArPSBuZmx1c2g7CisKKwkJYXNzZXJ0KG5tYWxsb2MgPj0gbmRh bGxvYyk7CisJCWFzc2VydChubWFsbG9jIC0gbmRhbGxvYyA8PSBTSVpFX1RfTUFYKTsKKwkJc2l6 ZV90IGN1cmxleHRlbnRzID0gKHNpemVfdCkobm1hbGxvYyAtIG5kYWxsb2MpOworCQlsc3RhdHNb aV0uY3VybGV4dGVudHMgKz0gY3VybGV4dGVudHM7CisJCWFzdGF0cy0+YWxsb2NhdGVkX2xhcmdl ICs9CisJCSAgICBjdXJsZXh0ZW50cyAqIHN6X2luZGV4MnNpemUoU0NfTkJJTlMgKyBpKTsKKwl9 CisKKwlwYV9zaGFyZF9zdGF0c19tZXJnZSh0c2RuLCAmYXJlbmEtPnBhX3NoYXJkLCAmYXN0YXRz LT5wYV9zaGFyZF9zdGF0cywKKwkgICAgZXN0YXRzLCBocGFzdGF0cywgc2Vjc3RhdHMsICZhc3Rh dHMtPnJlc2lkZW50KTsKKworCUxPQ0tFRElOVF9NVFhfVU5MT0NLKHRzZG4sIGFyZW5hLT5zdGF0 cy5tdHgpOworCisJLyogQ3VycmVudGx5IGNhY2hlZCBieXRlcyBhbmQgc2FuaXRpemVyLXN0YXNo ZWQgYnl0ZXMgaW4gdGNhY2hlLiAqLworCWFzdGF0cy0+dGNhY2hlX2J5dGVzID0gMDsKKwlhc3Rh dHMtPnRjYWNoZV9zdGFzaGVkX2J5dGVzID0gMDsKKwltYWxsb2NfbXV0ZXhfbG9jayh0c2RuLCAm YXJlbmEtPnRjYWNoZV9xbF9tdHgpOworCWNhY2hlX2Jpbl9hcnJheV9kZXNjcmlwdG9yX3QgKmRl c2NyaXB0b3I7CisJcWxfZm9yZWFjaChkZXNjcmlwdG9yLCAmYXJlbmEtPmNhY2hlX2Jpbl9hcnJh eV9kZXNjcmlwdG9yX3FsLCBsaW5rKSB7CisJCWZvciAoc3ppbmRfdCBpID0gMDsgaSA8IG5oYmlu czsgaSsrKSB7CisJCQljYWNoZV9iaW5fdCAqY2FjaGVfYmluID0gJmRlc2NyaXB0b3ItPmJpbnNb aV07CisJCQljYWNoZV9iaW5fc3pfdCBuY2FjaGVkLCBuc3Rhc2hlZDsKKwkJCWNhY2hlX2Jpbl9u aXRlbXNfZ2V0X3JlbW90ZShjYWNoZV9iaW4sCisJCQkgICAgJnRjYWNoZV9iaW5faW5mb1tpXSwg Jm5jYWNoZWQsICZuc3Rhc2hlZCk7CisKKwkJCWFzdGF0cy0+dGNhY2hlX2J5dGVzICs9IG5jYWNo ZWQgKiBzel9pbmRleDJzaXplKGkpOworCQkJYXN0YXRzLT50Y2FjaGVfc3Rhc2hlZF9ieXRlcyAr PSBuc3Rhc2hlZCAqCisJCQkgICAgc3pfaW5kZXgyc2l6ZShpKTsKKwkJfQorCX0KKwltYWxsb2Nf bXV0ZXhfcHJvZl9yZWFkKHRzZG4sCisJICAgICZhc3RhdHMtPm11dGV4X3Byb2ZfZGF0YVthcmVu YV9wcm9mX211dGV4X3RjYWNoZV9saXN0XSwKKwkgICAgJmFyZW5hLT50Y2FjaGVfcWxfbXR4KTsK KwltYWxsb2NfbXV0ZXhfdW5sb2NrKHRzZG4sICZhcmVuYS0+dGNhY2hlX3FsX210eCk7CisKKyNk ZWZpbmUgUkVBRF9BUkVOQV9NVVRFWF9QUk9GX0RBVEEobXR4LCBpbmQpCQkJCVwKKyAgICBtYWxs b2NfbXV0ZXhfbG9jayh0c2RuLCAmYXJlbmEtPm10eCk7CQkJCVwKKyAgICBtYWxsb2NfbXV0ZXhf cHJvZl9yZWFkKHRzZG4sICZhc3RhdHMtPm11dGV4X3Byb2ZfZGF0YVtpbmRdLAkJXAorICAgICAg ICAmYXJlbmEtPm10eCk7CQkJCQkJCVwKKyAgICBtYWxsb2NfbXV0ZXhfdW5sb2NrKHRzZG4sICZh cmVuYS0+bXR4KTsKKworCS8qIEdhdGhlciBwZXIgYXJlbmEgbXV0ZXggcHJvZmlsaW5nIGRhdGEu ICovCisJUkVBRF9BUkVOQV9NVVRFWF9QUk9GX0RBVEEobGFyZ2VfbXR4LCBhcmVuYV9wcm9mX211 dGV4X2xhcmdlKTsKKwlSRUFEX0FSRU5BX01VVEVYX1BST0ZfREFUQShiYXNlLT5tdHgsCisJICAg IGFyZW5hX3Byb2ZfbXV0ZXhfYmFzZSk7CisjdW5kZWYgUkVBRF9BUkVOQV9NVVRFWF9QUk9GX0RB VEEKKwlwYV9zaGFyZF9tdHhfc3RhdHNfcmVhZCh0c2RuLCAmYXJlbmEtPnBhX3NoYXJkLAorCSAg ICBhc3RhdHMtPm11dGV4X3Byb2ZfZGF0YSk7CisKKwluc3RpbWVfY29weSgmYXN0YXRzLT51cHRp bWUsICZhcmVuYS0+Y3JlYXRlX3RpbWUpOworCW5zdGltZV91cGRhdGUoJmFzdGF0cy0+dXB0aW1l KTsKKwluc3RpbWVfc3VidHJhY3QoJmFzdGF0cy0+dXB0aW1lLCAmYXJlbmEtPmNyZWF0ZV90aW1l KTsKKworCWZvciAoc3ppbmRfdCBpID0gMDsgaSA8IFNDX05CSU5TOyBpKyspIHsKKwkJZm9yICh1 bnNpZ25lZCBqID0gMDsgaiA8IGJpbl9pbmZvc1tpXS5uX3NoYXJkczsgaisrKSB7CisJCQliaW5f c3RhdHNfbWVyZ2UodHNkbiwgJmJzdGF0c1tpXSwKKwkJCSAgICBhcmVuYV9nZXRfYmluKGFyZW5h LCBpLCBqKSk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkCithcmVuYV9iYWNrZ3JvdW5kX3Ro cmVhZF9pbmFjdGl2aXR5X2NoZWNrKHRzZG5fdCAqdHNkbiwgYXJlbmFfdCAqYXJlbmEsCisgICAg Ym9vbCBpc19iYWNrZ3JvdW5kX3RocmVhZCkgeworCWlmICghYmFja2dyb3VuZF90aHJlYWRfZW5h YmxlZCgpIHx8IGlzX2JhY2tncm91bmRfdGhyZWFkKSB7CisJCXJldHVybjsKKwl9CisJYmFja2dy b3VuZF90aHJlYWRfaW5mb190ICppbmZvID0KKwkgICAgYXJlbmFfYmFja2dyb3VuZF90aHJlYWRf aW5mb19nZXQoYXJlbmEpOworCWlmIChiYWNrZ3JvdW5kX3RocmVhZF9pbmRlZmluaXRlX3NsZWVw KGluZm8pKSB7CisJCWFyZW5hX21heWJlX2RvX2RlZmVycmVkX3dvcmsodHNkbiwgYXJlbmEsCisJ CSAgICAmYXJlbmEtPnBhX3NoYXJkLnBhYy5kZWNheV9kaXJ0eSwgMCk7CisJfQorfQorCisvKgor ICogUmVhY3QgdG8gZGVmZXJyZWQgd29yayBnZW5lcmF0ZWQgYnkgYSBQQUkgZnVuY3Rpb24uCisg Ki8KK3ZvaWQgYXJlbmFfaGFuZGxlX2RlZmVycmVkX3dvcmsodHNkbl90ICp0c2RuLCBhcmVuYV90 ICphcmVuYSkgeworCXdpdG5lc3NfYXNzZXJ0X2RlcHRoX3RvX3JhbmsodHNkbl93aXRuZXNzX3Rz ZHBfZ2V0KHRzZG4pLAorCSAgICBXSVRORVNTX1JBTktfQ09SRSwgMCk7CisKKwlpZiAoZGVjYXlf aW1tZWRpYXRlbHkoJmFyZW5hLT5wYV9zaGFyZC5wYWMuZGVjYXlfZGlydHkpKSB7CisJCWFyZW5h X2RlY2F5X2RpcnR5KHRzZG4sIGFyZW5hLCBmYWxzZSwgdHJ1ZSk7CisJfQorCWFyZW5hX2JhY2tn cm91bmRfdGhyZWFkX2luYWN0aXZpdHlfY2hlY2sodHNkbiwgYXJlbmEsIGZhbHNlKTsKK30KKwor c3RhdGljIHZvaWQgKgorYXJlbmFfc2xhYl9yZWdfYWxsb2MoZWRhdGFfdCAqc2xhYiwgY29uc3Qg YmluX2luZm9fdCAqYmluX2luZm8pIHsKKwl2b2lkICpyZXQ7CisJc2xhYl9kYXRhX3QgKnNsYWJf ZGF0YSA9IGVkYXRhX3NsYWJfZGF0YV9nZXQoc2xhYik7CisJc2l6ZV90IHJlZ2luZDsKKworCWFz c2VydChlZGF0YV9uZnJlZV9nZXQoc2xhYikgPiAwKTsKKwlhc3NlcnQoIWJpdG1hcF9mdWxsKHNs YWJfZGF0YS0+Yml0bWFwLCAmYmluX2luZm8tPmJpdG1hcF9pbmZvKSk7CisKKwlyZWdpbmQgPSBi aXRtYXBfc2Z1KHNsYWJfZGF0YS0+Yml0bWFwLCAmYmluX2luZm8tPmJpdG1hcF9pbmZvKTsKKwly ZXQgPSAodm9pZCAqKSgodWludHB0cl90KWVkYXRhX2FkZHJfZ2V0KHNsYWIpICsKKwkgICAgKHVp bnRwdHJfdCkoYmluX2luZm8tPnJlZ19zaXplICogcmVnaW5kKSk7CisJZWRhdGFfbmZyZWVfZGVj KHNsYWIpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkCithcmVuYV9zbGFiX3JlZ19h bGxvY19iYXRjaChlZGF0YV90ICpzbGFiLCBjb25zdCBiaW5faW5mb190ICpiaW5faW5mbywKKwkJ CSAgIHVuc2lnbmVkIGNudCwgdm9pZCoqIHB0cnMpIHsKKwlzbGFiX2RhdGFfdCAqc2xhYl9kYXRh ID0gZWRhdGFfc2xhYl9kYXRhX2dldChzbGFiKTsKKworCWFzc2VydChlZGF0YV9uZnJlZV9nZXQo c2xhYikgPj0gY250KTsKKwlhc3NlcnQoIWJpdG1hcF9mdWxsKHNsYWJfZGF0YS0+Yml0bWFwLCAm YmluX2luZm8tPmJpdG1hcF9pbmZvKSk7CisKKyNpZiAoISBkZWZpbmVkIEpFTUFMTE9DX0lOVEVS TkFMX1BPUENPVU5UTCkgfHwgKGRlZmluZWQgQklUTUFQX1VTRV9UUkVFKQorCWZvciAodW5zaWdu ZWQgaSA9IDA7IGkgPCBjbnQ7IGkrKykgeworCQlzaXplX3QgcmVnaW5kID0gYml0bWFwX3NmdShz bGFiX2RhdGEtPmJpdG1hcCwKKwkJCQkJICAgJmJpbl9pbmZvLT5iaXRtYXBfaW5mbyk7CisJCSoo cHRycyArIGkpID0gKHZvaWQgKikoKHVpbnRwdHJfdCllZGF0YV9hZGRyX2dldChzbGFiKSArCisJ CSAgICAodWludHB0cl90KShiaW5faW5mby0+cmVnX3NpemUgKiByZWdpbmQpKTsKKwl9CisjZWxz ZQorCXVuc2lnbmVkIGdyb3VwID0gMDsKKwliaXRtYXBfdCBnID0gc2xhYl9kYXRhLT5iaXRtYXBb Z3JvdXBdOworCXVuc2lnbmVkIGkgPSAwOworCXdoaWxlIChpIDwgY250KSB7CisJCXdoaWxlIChn ID09IDApIHsKKwkJCWcgPSBzbGFiX2RhdGEtPmJpdG1hcFsrK2dyb3VwXTsKKwkJfQorCQlzaXpl X3Qgc2hpZnQgPSBncm91cCA8PCBMR19CSVRNQVBfR1JPVVBfTkJJVFM7CisJCXNpemVfdCBwb3Ag PSBwb3Bjb3VudF9sdShnKTsKKwkJaWYgKHBvcCA+IChjbnQgLSBpKSkgeworCQkJcG9wID0gY250 IC0gaTsKKwkJfQorCisJCS8qCisJCSAqIExvYWQgZnJvbSBtZW1vcnkgbG9jYXRpb25zIG9ubHkg b25jZSwgb3V0c2lkZSB0aGUKKwkJICogaG90IGxvb3AgYmVsb3cuCisJCSAqLworCQl1aW50cHRy X3QgYmFzZSA9ICh1aW50cHRyX3QpZWRhdGFfYWRkcl9nZXQoc2xhYik7CisJCXVpbnRwdHJfdCBy ZWdzaXplID0gKHVpbnRwdHJfdCliaW5faW5mby0+cmVnX3NpemU7CisJCXdoaWxlIChwb3AtLSkg eworCQkJc2l6ZV90IGJpdCA9IGNmc19sdSgmZyk7CisJCQlzaXplX3QgcmVnaW5kID0gc2hpZnQg KyBiaXQ7CisJCQkqKHB0cnMgKyBpKSA9ICh2b2lkICopKGJhc2UgKyByZWdzaXplICogcmVnaW5k KTsKKworCQkJaSsrOworCQl9CisJCXNsYWJfZGF0YS0+Yml0bWFwW2dyb3VwXSA9IGc7CisJfQor I2VuZGlmCisJZWRhdGFfbmZyZWVfc3ViKHNsYWIsIGNudCk7Cit9CisKK3N0YXRpYyB2b2lkCith cmVuYV9sYXJnZV9tYWxsb2Nfc3RhdHNfdXBkYXRlKHRzZG5fdCAqdHNkbiwgYXJlbmFfdCAqYXJl bmEsIHNpemVfdCB1c2l6ZSkgeworCXN6aW5kX3QgaW5kZXgsIGhpbmRleDsKKworCWNhc3NlcnQo Y29uZmlnX3N0YXRzKTsKKworCWlmICh1c2l6ZSA8IFNDX0xBUkdFX01JTkNMQVNTKSB7CisJCXVz aXplID0gU0NfTEFSR0VfTUlOQ0xBU1M7CisJfQorCWluZGV4ID0gc3pfc2l6ZTJpbmRleCh1c2l6 ZSk7CisJaGluZGV4ID0gKGluZGV4ID49IFNDX05CSU5TKSA/IGluZGV4IC0gU0NfTkJJTlMgOiAw OworCisJbG9ja2VkX2luY191NjQodHNkbiwgTE9DS0VESU5UX01UWChhcmVuYS0+c3RhdHMubXR4 KSwKKwkgICAgJmFyZW5hLT5zdGF0cy5sc3RhdHNbaGluZGV4XS5ubWFsbG9jLCAxKTsKK30KKwor c3RhdGljIHZvaWQKK2FyZW5hX2xhcmdlX2RhbGxvY19zdGF0c191cGRhdGUodHNkbl90ICp0c2Ru LCBhcmVuYV90ICphcmVuYSwgc2l6ZV90IHVzaXplKSB7CisJc3ppbmRfdCBpbmRleCwgaGluZGV4 OworCisJY2Fzc2VydChjb25maWdfc3RhdHMpOworCisJaWYgKHVzaXplIDwgU0NfTEFSR0VfTUlO Q0xBU1MpIHsKKwkJdXNpemUgPSBTQ19MQVJHRV9NSU5DTEFTUzsKKwl9CisJaW5kZXggPSBzel9z aXplMmluZGV4KHVzaXplKTsKKwloaW5kZXggPSAoaW5kZXggPj0gU0NfTkJJTlMpID8gaW5kZXgg LSBTQ19OQklOUyA6IDA7CisKKwlsb2NrZWRfaW5jX3U2NCh0c2RuLCBMT0NLRURJTlRfTVRYKGFy ZW5hLT5zdGF0cy5tdHgpLAorCSAgICAmYXJlbmEtPnN0YXRzLmxzdGF0c1toaW5kZXhdLm5kYWxs b2MsIDEpOworfQorCitzdGF0aWMgdm9pZAorYXJlbmFfbGFyZ2VfcmFsbG9jX3N0YXRzX3VwZGF0 ZSh0c2RuX3QgKnRzZG4sIGFyZW5hX3QgKmFyZW5hLCBzaXplX3Qgb2xkdXNpemUsCisgICAgc2l6 ZV90IHVzaXplKSB7CisJYXJlbmFfbGFyZ2VfbWFsbG9jX3N0YXRzX3VwZGF0ZSh0c2RuLCBhcmVu YSwgdXNpemUpOworCWFyZW5hX2xhcmdlX2RhbGxvY19zdGF0c191cGRhdGUodHNkbiwgYXJlbmEs IG9sZHVzaXplKTsKK30KKworZWRhdGFfdCAqCithcmVuYV9leHRlbnRfYWxsb2NfbGFyZ2UodHNk bl90ICp0c2RuLCBhcmVuYV90ICphcmVuYSwgc2l6ZV90IHVzaXplLAorICAgIHNpemVfdCBhbGln bm1lbnQsIGJvb2wgemVybykgeworCWJvb2wgZGVmZXJyZWRfd29ya19nZW5lcmF0ZWQgPSBmYWxz ZTsKKwlzemluZF90IHN6aW5kID0gc3pfc2l6ZTJpbmRleCh1c2l6ZSk7CisJc2l6ZV90IGVzaXpl ID0gdXNpemUgKyBzel9sYXJnZV9wYWQ7CisKKwlib29sIGd1YXJkZWQgPSBzYW5fbGFyZ2VfZXh0 ZW50X2RlY2lkZV9ndWFyZCh0c2RuLAorCSAgICBhcmVuYV9nZXRfZWhvb2tzKGFyZW5hKSwgZXNp emUsIGFsaWdubWVudCk7CisJZWRhdGFfdCAqZWRhdGEgPSBwYV9hbGxvYyh0c2RuLCAmYXJlbmEt PnBhX3NoYXJkLCBlc2l6ZSwgYWxpZ25tZW50LAorCSAgICAvKiBzbGFiICovIGZhbHNlLCBzemlu ZCwgemVybywgZ3VhcmRlZCwgJmRlZmVycmVkX3dvcmtfZ2VuZXJhdGVkKTsKKwlhc3NlcnQoZGVm ZXJyZWRfd29ya19nZW5lcmF0ZWQgPT0gZmFsc2UpOworCisJaWYgKGVkYXRhICE9IE5VTEwpIHsK KwkJaWYgKGNvbmZpZ19zdGF0cykgeworCQkJTE9DS0VESU5UX01UWF9MT0NLKHRzZG4sIGFyZW5h LT5zdGF0cy5tdHgpOworCQkJYXJlbmFfbGFyZ2VfbWFsbG9jX3N0YXRzX3VwZGF0ZSh0c2RuLCBh cmVuYSwgdXNpemUpOworCQkJTE9DS0VESU5UX01UWF9VTkxPQ0sodHNkbiwgYXJlbmEtPnN0YXRz Lm10eCk7CisJCX0KKwl9CisKKwlpZiAoZWRhdGEgIT0gTlVMTCAmJiBzel9sYXJnZV9wYWQgIT0g MCkgeworCQlhcmVuYV9jYWNoZV9vYmxpdmlvdXNfcmFuZG9taXplKHRzZG4sIGFyZW5hLCBlZGF0 YSwgYWxpZ25tZW50KTsKKwl9CisKKwlyZXR1cm4gZWRhdGE7Cit9CisKK3ZvaWQKK2FyZW5hX2V4 dGVudF9kYWxsb2NfbGFyZ2VfcHJlcCh0c2RuX3QgKnRzZG4sIGFyZW5hX3QgKmFyZW5hLCBlZGF0 YV90ICplZGF0YSkgeworCWlmIChjb25maWdfc3RhdHMpIHsKKwkJTE9DS0VESU5UX01UWF9MT0NL KHRzZG4sIGFyZW5hLT5zdGF0cy5tdHgpOworCQlhcmVuYV9sYXJnZV9kYWxsb2Nfc3RhdHNfdXBk YXRlKHRzZG4sIGFyZW5hLAorCQkgICAgZWRhdGFfdXNpemVfZ2V0KGVkYXRhKSk7CisJCUxPQ0tF RElOVF9NVFhfVU5MT0NLKHRzZG4sIGFyZW5hLT5zdGF0cy5tdHgpOworCX0KK30KKwordm9pZAor YXJlbmFfZXh0ZW50X3JhbGxvY19sYXJnZV9zaHJpbmsodHNkbl90ICp0c2RuLCBhcmVuYV90ICph cmVuYSwgZWRhdGFfdCAqZWRhdGEsCisgICAgc2l6ZV90IG9sZHVzaXplKSB7CisJc2l6ZV90IHVz aXplID0gZWRhdGFfdXNpemVfZ2V0KGVkYXRhKTsKKworCWlmIChjb25maWdfc3RhdHMpIHsKKwkJ TE9DS0VESU5UX01UWF9MT0NLKHRzZG4sIGFyZW5hLT5zdGF0cy5tdHgpOworCQlhcmVuYV9sYXJn ZV9yYWxsb2Nfc3RhdHNfdXBkYXRlKHRzZG4sIGFyZW5hLCBvbGR1c2l6ZSwgdXNpemUpOworCQlM T0NLRURJTlRfTVRYX1VOTE9DSyh0c2RuLCBhcmVuYS0+c3RhdHMubXR4KTsKKwl9Cit9CisKK3Zv aWQKK2FyZW5hX2V4dGVudF9yYWxsb2NfbGFyZ2VfZXhwYW5kKHRzZG5fdCAqdHNkbiwgYXJlbmFf dCAqYXJlbmEsIGVkYXRhX3QgKmVkYXRhLAorICAgIHNpemVfdCBvbGR1c2l6ZSkgeworCXNpemVf dCB1c2l6ZSA9IGVkYXRhX3VzaXplX2dldChlZGF0YSk7CisKKwlpZiAoY29uZmlnX3N0YXRzKSB7 CisJCUxPQ0tFRElOVF9NVFhfTE9DSyh0c2RuLCBhcmVuYS0+c3RhdHMubXR4KTsKKwkJYXJlbmFf bGFyZ2VfcmFsbG9jX3N0YXRzX3VwZGF0ZSh0c2RuLCBhcmVuYSwgb2xkdXNpemUsIHVzaXplKTsK KwkJTE9DS0VESU5UX01UWF9VTkxPQ0sodHNkbiwgYXJlbmEtPnN0YXRzLm10eCk7CisJfQorfQor CisvKgorICogSW4gc2l0dWF0aW9ucyB3aGVyZSB3ZSdyZSBub3QgZm9yY2luZyBhIGRlY2F5IChp LmUuIGJlY2F1c2UgdGhlIHVzZXIKKyAqIHNwZWNpZmljYWxseSByZXF1ZXN0ZWQgaXQpLCBzaG91 bGQgd2UgcHVyZ2Ugb3Vyc2VsdmVzLCBvciB3YWl0IGZvciB0aGUKKyAqIGJhY2tncm91bmQgdGhy ZWFkIHRvIGdldCB0byBpdC4KKyAqLworc3RhdGljIHBhY19wdXJnZV9lYWdlcm5lc3NfdAorYXJl bmFfZGVjaWRlX3VuZm9yY2VkX3B1cmdlX2VhZ2VybmVzcyhib29sIGlzX2JhY2tncm91bmRfdGhy ZWFkKSB7CisJaWYgKGlzX2JhY2tncm91bmRfdGhyZWFkKSB7CisJCXJldHVybiBQQUNfUFVSR0Vf QUxXQVlTOworCX0gZWxzZSBpZiAoIWlzX2JhY2tncm91bmRfdGhyZWFkICYmIGJhY2tncm91bmRf dGhyZWFkX2VuYWJsZWQoKSkgeworCQlyZXR1cm4gUEFDX1BVUkdFX05FVkVSOworCX0gZWxzZSB7 CisJCXJldHVybiBQQUNfUFVSR0VfT05fRVBPQ0hfQURWQU5DRTsKKwl9Cit9CisKK2Jvb2wKK2Fy ZW5hX2RlY2F5X21zX3NldCh0c2RuX3QgKnRzZG4sIGFyZW5hX3QgKmFyZW5hLCBleHRlbnRfc3Rh dGVfdCBzdGF0ZSwKKyAgICBzc2l6ZV90IGRlY2F5X21zKSB7CisJcGFjX3B1cmdlX2VhZ2VybmVz c190IGVhZ2VybmVzcyA9IGFyZW5hX2RlY2lkZV91bmZvcmNlZF9wdXJnZV9lYWdlcm5lc3MoCisJ ICAgIC8qIGlzX2JhY2tncm91bmRfdGhyZWFkICovIGZhbHNlKTsKKwlyZXR1cm4gcGFfZGVjYXlf bXNfc2V0KHRzZG4sICZhcmVuYS0+cGFfc2hhcmQsIHN0YXRlLCBkZWNheV9tcywKKwkgICAgZWFn ZXJuZXNzKTsKK30KKworc3NpemVfdAorYXJlbmFfZGVjYXlfbXNfZ2V0KGFyZW5hX3QgKmFyZW5h LCBleHRlbnRfc3RhdGVfdCBzdGF0ZSkgeworCXJldHVybiBwYV9kZWNheV9tc19nZXQoJmFyZW5h LT5wYV9zaGFyZCwgc3RhdGUpOworfQorCitzdGF0aWMgYm9vbAorYXJlbmFfZGVjYXlfaW1wbCh0 c2RuX3QgKnRzZG4sIGFyZW5hX3QgKmFyZW5hLCBkZWNheV90ICpkZWNheSwKKyAgICBwYWNfZGVj YXlfc3RhdHNfdCAqZGVjYXlfc3RhdHMsIGVjYWNoZV90ICplY2FjaGUsCisgICAgYm9vbCBpc19i YWNrZ3JvdW5kX3RocmVhZCwgYm9vbCBhbGwpIHsKKwlpZiAoYWxsKSB7CisJCW1hbGxvY19tdXRl eF9sb2NrKHRzZG4sICZkZWNheS0+bXR4KTsKKwkJcGFjX2RlY2F5X2FsbCh0c2RuLCAmYXJlbmEt PnBhX3NoYXJkLnBhYywgZGVjYXksIGRlY2F5X3N0YXRzLAorCQkgICAgZWNhY2hlLCAvKiBmdWxs eV9kZWNheSAqLyBhbGwpOworCQltYWxsb2NfbXV0ZXhfdW5sb2NrKHRzZG4sICZkZWNheS0+bXR4 KTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCWlmIChtYWxsb2NfbXV0ZXhfdHJ5bG9jayh0c2Ru LCAmZGVjYXktPm10eCkpIHsKKwkJLyogTm8gbmVlZCB0byB3YWl0IGlmIGFub3RoZXIgdGhyZWFk IGlzIGluIHByb2dyZXNzLiAqLworCQlyZXR1cm4gdHJ1ZTsKKwl9CisJcGFjX3B1cmdlX2VhZ2Vy bmVzc190IGVhZ2VybmVzcyA9CisJICAgIGFyZW5hX2RlY2lkZV91bmZvcmNlZF9wdXJnZV9lYWdl cm5lc3MoaXNfYmFja2dyb3VuZF90aHJlYWQpOworCWJvb2wgZXBvY2hfYWR2YW5jZWQgPSBwYWNf bWF5YmVfZGVjYXlfcHVyZ2UodHNkbiwgJmFyZW5hLT5wYV9zaGFyZC5wYWMsCisJICAgIGRlY2F5 LCBkZWNheV9zdGF0cywgZWNhY2hlLCBlYWdlcm5lc3MpOworCXNpemVfdCBucGFnZXNfbmV3Owor CWlmIChlcG9jaF9hZHZhbmNlZCkgeworCQkvKiBCYWNrbG9nIGlzIHVwZGF0ZWQgb24gZXBvY2gg YWR2YW5jZS4gKi8KKwkJbnBhZ2VzX25ldyA9IGRlY2F5X2Vwb2NoX25wYWdlc19kZWx0YShkZWNh eSk7CisJfQorCW1hbGxvY19tdXRleF91bmxvY2sodHNkbiwgJmRlY2F5LT5tdHgpOworCisJaWYg KGhhdmVfYmFja2dyb3VuZF90aHJlYWQgJiYgYmFja2dyb3VuZF90aHJlYWRfZW5hYmxlZCgpICYm CisJICAgIGVwb2NoX2FkdmFuY2VkICYmICFpc19iYWNrZ3JvdW5kX3RocmVhZCkgeworCQlhcmVu YV9tYXliZV9kb19kZWZlcnJlZF93b3JrKHRzZG4sIGFyZW5hLCBkZWNheSwgbnBhZ2VzX25ldyk7 CisJfQorCisJcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgYm9vbAorYXJlbmFfZGVjYXlfZGly dHkodHNkbl90ICp0c2RuLCBhcmVuYV90ICphcmVuYSwgYm9vbCBpc19iYWNrZ3JvdW5kX3RocmVh ZCwKKyAgICBib29sIGFsbCkgeworCXJldHVybiBhcmVuYV9kZWNheV9pbXBsKHRzZG4sIGFyZW5h LCAmYXJlbmEtPnBhX3NoYXJkLnBhYy5kZWNheV9kaXJ0eSwKKwkgICAgJmFyZW5hLT5wYV9zaGFy ZC5wYWMuc3RhdHMtPmRlY2F5X2RpcnR5LAorCSAgICAmYXJlbmEtPnBhX3NoYXJkLnBhYy5lY2Fj aGVfZGlydHksIGlzX2JhY2tncm91bmRfdGhyZWFkLCBhbGwpOworfQorCitzdGF0aWMgYm9vbAor YXJlbmFfZGVjYXlfbXV6enkodHNkbl90ICp0c2RuLCBhcmVuYV90ICphcmVuYSwgYm9vbCBpc19i YWNrZ3JvdW5kX3RocmVhZCwKKyAgICBib29sIGFsbCkgeworCWlmIChwYV9zaGFyZF9kb250X2Rl Y2F5X211enp5KCZhcmVuYS0+cGFfc2hhcmQpKSB7CisJCXJldHVybiBmYWxzZTsKKwl9CisJcmV0 dXJuIGFyZW5hX2RlY2F5X2ltcGwodHNkbiwgYXJlbmEsICZhcmVuYS0+cGFfc2hhcmQucGFjLmRl Y2F5X211enp5LAorCSAgICAmYXJlbmEtPnBhX3NoYXJkLnBhYy5zdGF0cy0+ZGVjYXlfbXV6enks CisJICAgICZhcmVuYS0+cGFfc2hhcmQucGFjLmVjYWNoZV9tdXp6eSwgaXNfYmFja2dyb3VuZF90 aHJlYWQsIGFsbCk7Cit9CisKK3ZvaWQKK2FyZW5hX2RlY2F5KHRzZG5fdCAqdHNkbiwgYXJlbmFf dCAqYXJlbmEsIGJvb2wgaXNfYmFja2dyb3VuZF90aHJlYWQsIGJvb2wgYWxsKSB7CisJaWYgKGFs bCkgeworCQkvKgorCQkgKiBXZSBzaG91bGQgdGFrZSBhIHB1cmdlIG9mICJhbGwiIHRvIG1lYW4g InNhdmUgYXMgbXVjaCBtZW1vcnkKKwkJICogYXMgcG9zc2libGUiLCBpbmNsdWRpbmcgZmx1c2hp bmcgYW55IGNhY2hlcyAoZm9yIHNpdHVhdGlvbnMKKwkJICogbGlrZSB0aHJlYWQgZGVhdGgsIG9y IG1hbnVhbCBwdXJnZSBjYWxscykuCisJCSAqLworCQlzZWNfZmx1c2godHNkbiwgJmFyZW5hLT5w YV9zaGFyZC5ocGFfc2VjKTsKKwl9CisJaWYgKGFyZW5hX2RlY2F5X2RpcnR5KHRzZG4sIGFyZW5h LCBpc19iYWNrZ3JvdW5kX3RocmVhZCwgYWxsKSkgeworCQlyZXR1cm47CisJfQorCWFyZW5hX2Rl Y2F5X211enp5KHRzZG4sIGFyZW5hLCBpc19iYWNrZ3JvdW5kX3RocmVhZCwgYWxsKTsKK30KKwor c3RhdGljIGJvb2wKK2FyZW5hX3Nob3VsZF9kZWNheV9lYXJseSh0c2RuX3QgKnRzZG4sIGFyZW5h X3QgKmFyZW5hLCBkZWNheV90ICpkZWNheSwKKyAgICBiYWNrZ3JvdW5kX3RocmVhZF9pbmZvX3Qg KmluZm8sIG5zdGltZV90ICpyZW1haW5pbmdfc2xlZXAsCisgICAgc2l6ZV90IG5wYWdlc19uZXcp IHsKKwltYWxsb2NfbXV0ZXhfYXNzZXJ0X293bmVyKHRzZG4sICZpbmZvLT5tdHgpOworCisJaWYg KG1hbGxvY19tdXRleF90cnlsb2NrKHRzZG4sICZkZWNheS0+bXR4KSkgeworCQlyZXR1cm4gZmFs c2U7CisJfQorCisJaWYgKCFkZWNheV9ncmFkdWFsbHkoZGVjYXkpKSB7CisJCW1hbGxvY19tdXRl eF91bmxvY2sodHNkbiwgJmRlY2F5LT5tdHgpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJbnN0 aW1lX2luaXQocmVtYWluaW5nX3NsZWVwLCBiYWNrZ3JvdW5kX3RocmVhZF93YWtldXBfdGltZV9n ZXQoaW5mbykpOworCWlmIChuc3RpbWVfY29tcGFyZShyZW1haW5pbmdfc2xlZXAsICZkZWNheS0+ ZXBvY2gpIDw9IDApIHsKKwkJbWFsbG9jX211dGV4X3VubG9jayh0c2RuLCAmZGVjYXktPm10eCk7 CisJCXJldHVybiBmYWxzZTsKKwl9CisJbnN0aW1lX3N1YnRyYWN0KHJlbWFpbmluZ19zbGVlcCwg JmRlY2F5LT5lcG9jaCk7CisJaWYgKG5wYWdlc19uZXcgPiAwKSB7CisJCXVpbnQ2NF90IG5wdXJn ZV9uZXcgPSBkZWNheV9ucGFnZXNfcHVyZ2VfaW4oZGVjYXksCisJCSAgICByZW1haW5pbmdfc2xl ZXAsIG5wYWdlc19uZXcpOworCQlpbmZvLT5ucGFnZXNfdG9fcHVyZ2VfbmV3ICs9IG5wdXJnZV9u ZXc7CisJfQorCW1hbGxvY19tdXRleF91bmxvY2sodHNkbiwgJmRlY2F5LT5tdHgpOworCXJldHVy biBpbmZvLT5ucGFnZXNfdG9fcHVyZ2VfbmV3ID4KKwkgICAgQVJFTkFfREVGRVJSRURfUFVSR0Vf TlBBR0VTX1RIUkVTSE9MRDsKK30KKworLyoKKyAqIENoZWNrIGlmIGRlZmVycmVkIHdvcmsgbmVl ZHMgdG8gYmUgZG9uZSBzb29uZXIgdGhhbiBwbGFubmVkLgorICogRm9yIGRlY2F5IHdlIG1pZ2h0 IHdhbnQgdG8gd2FrZSB1cCBlYXJsaWVyIGJlY2F1c2Ugb2YgYW4gaW5mbHV4IG9mIGRpcnR5Cisg KiBwYWdlcy4gUmF0aGVyIHRoYW4gd2FpdGluZyBmb3IgcHJldmlvdXNseSBlc3RpbWF0ZWQgdGlt ZSwgd2UgcHJvYWN0aXZlbHkKKyAqIHB1cmdlIHRob3NlIHBhZ2VzLgorICogSWYgYmFja2dyb3Vu ZCB0aHJlYWQgc2xlZXBzIGluZGVmaW5pdGVseSwgYWx3YXlzIHdha2UgdXAgYmVjYXVzZSBzb21l CisgKiBkZWZlcnJlZCB3b3JrIGhhcyBiZWVuIGdlbmVyYXRlZC4KKyAqLworc3RhdGljIHZvaWQK K2FyZW5hX21heWJlX2RvX2RlZmVycmVkX3dvcmsodHNkbl90ICp0c2RuLCBhcmVuYV90ICphcmVu YSwgZGVjYXlfdCAqZGVjYXksCisgICAgc2l6ZV90IG5wYWdlc19uZXcpIHsKKwliYWNrZ3JvdW5k X3RocmVhZF9pbmZvX3QgKmluZm8gPSBhcmVuYV9iYWNrZ3JvdW5kX3RocmVhZF9pbmZvX2dldCgK KwkgICAgYXJlbmEpOworCWlmIChtYWxsb2NfbXV0ZXhfdHJ5bG9jayh0c2RuLCAmaW5mby0+bXR4 KSkgeworCQkvKgorCQkgKiBCYWNrZ3JvdW5kIHRocmVhZCBtYXkgaG9sZCB0aGUgbXV0ZXggZm9y IGEgbG9uZyBwZXJpb2Qgb2YKKwkJICogdGltZS4gIFdlJ2QgbGlrZSB0byBhdm9pZCB0aGUgdmFy aWFuY2Ugb24gYXBwbGljYXRpb24KKwkJICogdGhyZWFkcy4gIFNvIGtlZXAgdGhpcyBub24tYmxv Y2tpbmcsIGFuZCBsZWF2ZSB0aGUgd29yayB0byBhCisJCSAqIGZ1dHVyZSBlcG9jaC4KKwkJICov CisJCXJldHVybjsKKwl9CisJaWYgKCFiYWNrZ3JvdW5kX3RocmVhZF9pc19zdGFydGVkKGluZm8p KSB7CisJCWdvdG8gbGFiZWxfZG9uZTsKKwl9CisKKwluc3RpbWVfdCByZW1haW5pbmdfc2xlZXA7 CisJaWYgKGJhY2tncm91bmRfdGhyZWFkX2luZGVmaW5pdGVfc2xlZXAoaW5mbykpIHsKKwkJYmFj a2dyb3VuZF90aHJlYWRfd2FrZXVwX2Vhcmx5KGluZm8sIE5VTEwpOworCX0gZWxzZSBpZiAoYXJl bmFfc2hvdWxkX2RlY2F5X2Vhcmx5KHRzZG4sIGFyZW5hLCBkZWNheSwgaW5mbywKKwkgICAgJnJl bWFpbmluZ19zbGVlcCwgbnBhZ2VzX25ldykpIHsKKwkJaW5mby0+bnBhZ2VzX3RvX3B1cmdlX25l dyA9IDA7CisJCWJhY2tncm91bmRfdGhyZWFkX3dha2V1cF9lYXJseShpbmZvLCAmcmVtYWluaW5n X3NsZWVwKTsKKwl9CitsYWJlbF9kb25lOgorCW1hbGxvY19tdXRleF91bmxvY2sodHNkbiwgJmlu Zm8tPm10eCk7Cit9CisKKy8qIENhbGxlZCBmcm9tIGJhY2tncm91bmQgdGhyZWFkcy4gKi8KK3Zv aWQKK2FyZW5hX2RvX2RlZmVycmVkX3dvcmsodHNkbl90ICp0c2RuLCBhcmVuYV90ICphcmVuYSkg eworCWFyZW5hX2RlY2F5KHRzZG4sIGFyZW5hLCB0cnVlLCBmYWxzZSk7CisJcGFfc2hhcmRfZG9f ZGVmZXJyZWRfd29yayh0c2RuLCAmYXJlbmEtPnBhX3NoYXJkKTsKK30KKwordm9pZAorYXJlbmFf c2xhYl9kYWxsb2ModHNkbl90ICp0c2RuLCBhcmVuYV90ICphcmVuYSwgZWRhdGFfdCAqc2xhYikg eworCWJvb2wgZGVmZXJyZWRfd29ya19nZW5lcmF0ZWQgPSBmYWxzZTsKKwlwYV9kYWxsb2ModHNk biwgJmFyZW5hLT5wYV9zaGFyZCwgc2xhYiwgJmRlZmVycmVkX3dvcmtfZ2VuZXJhdGVkKTsKKwlp ZiAoZGVmZXJyZWRfd29ya19nZW5lcmF0ZWQpIHsKKwkJYXJlbmFfaGFuZGxlX2RlZmVycmVkX3dv cmsodHNkbiwgYXJlbmEpOworCX0KK30KKworc3RhdGljIHZvaWQKK2FyZW5hX2Jpbl9zbGFic19u b25mdWxsX2luc2VydChiaW5fdCAqYmluLCBlZGF0YV90ICpzbGFiKSB7CisJYXNzZXJ0KGVkYXRh X25mcmVlX2dldChzbGFiKSA+IDApOworCWVkYXRhX2hlYXBfaW5zZXJ0KCZiaW4tPnNsYWJzX25v bmZ1bGwsIHNsYWIpOworCWlmIChjb25maWdfc3RhdHMpIHsKKwkJYmluLT5zdGF0cy5ub25mdWxs X3NsYWJzKys7CisJfQorfQorCitzdGF0aWMgdm9pZAorYXJlbmFfYmluX3NsYWJzX25vbmZ1bGxf cmVtb3ZlKGJpbl90ICpiaW4sIGVkYXRhX3QgKnNsYWIpIHsKKwllZGF0YV9oZWFwX3JlbW92ZSgm YmluLT5zbGFic19ub25mdWxsLCBzbGFiKTsKKwlpZiAoY29uZmlnX3N0YXRzKSB7CisJCWJpbi0+ c3RhdHMubm9uZnVsbF9zbGFicy0tOworCX0KK30KKworc3RhdGljIGVkYXRhX3QgKgorYXJlbmFf YmluX3NsYWJzX25vbmZ1bGxfdHJ5Z2V0KGJpbl90ICpiaW4pIHsKKwllZGF0YV90ICpzbGFiID0g ZWRhdGFfaGVhcF9yZW1vdmVfZmlyc3QoJmJpbi0+c2xhYnNfbm9uZnVsbCk7CisJaWYgKHNsYWIg PT0gTlVMTCkgeworCQlyZXR1cm4gTlVMTDsKKwl9CisJaWYgKGNvbmZpZ19zdGF0cykgeworCQli aW4tPnN0YXRzLnJlc2xhYnMrKzsKKwkJYmluLT5zdGF0cy5ub25mdWxsX3NsYWJzLS07CisJfQor CXJldHVybiBzbGFiOworfQorCitzdGF0aWMgdm9pZAorYXJlbmFfYmluX3NsYWJzX2Z1bGxfaW5z ZXJ0KGFyZW5hX3QgKmFyZW5hLCBiaW5fdCAqYmluLCBlZGF0YV90ICpzbGFiKSB7CisJYXNzZXJ0 KGVkYXRhX25mcmVlX2dldChzbGFiKSA9PSAwKTsKKwkvKgorCSAqICBUcmFja2luZyBleHRlbnRz IGlzIHJlcXVpcmVkIGJ5IGFyZW5hX3Jlc2V0LCB3aGljaCBpcyBub3QgYWxsb3dlZAorCSAqICBm b3IgYXV0byBhcmVuYXMuICBCeXBhc3MgdGhpcyBzdGVwIHRvIGF2b2lkIHRvdWNoaW5nIHRoZSBl ZGF0YQorCSAqICBsaW5rYWdlIChvZnRlbiByZXN1bHRzIGluIGNhY2hlIG1pc3NlcykgZm9yIGF1 dG8gYXJlbmFzLgorCSAqLworCWlmIChhcmVuYV9pc19hdXRvKGFyZW5hKSkgeworCQlyZXR1cm47 CisJfQorCWVkYXRhX2xpc3RfYWN0aXZlX2FwcGVuZCgmYmluLT5zbGFic19mdWxsLCBzbGFiKTsK K30KKworc3RhdGljIHZvaWQKK2FyZW5hX2Jpbl9zbGFic19mdWxsX3JlbW92ZShhcmVuYV90ICph cmVuYSwgYmluX3QgKmJpbiwgZWRhdGFfdCAqc2xhYikgeworCWlmIChhcmVuYV9pc19hdXRvKGFy ZW5hKSkgeworCQlyZXR1cm47CisJfQorCWVkYXRhX2xpc3RfYWN0aXZlX3JlbW92ZSgmYmluLT5z bGFic19mdWxsLCBzbGFiKTsKK30KKworc3RhdGljIHZvaWQKK2FyZW5hX2Jpbl9yZXNldCh0c2Rf dCAqdHNkLCBhcmVuYV90ICphcmVuYSwgYmluX3QgKmJpbikgeworCWVkYXRhX3QgKnNsYWI7CisK KwltYWxsb2NfbXV0ZXhfbG9jayh0c2RfdHNkbih0c2QpLCAmYmluLT5sb2NrKTsKKwlpZiAoYmlu LT5zbGFiY3VyICE9IE5VTEwpIHsKKwkJc2xhYiA9IGJpbi0+c2xhYmN1cjsKKwkJYmluLT5zbGFi Y3VyID0gTlVMTDsKKwkJbWFsbG9jX211dGV4X3VubG9jayh0c2RfdHNkbih0c2QpLCAmYmluLT5s b2NrKTsKKwkJYXJlbmFfc2xhYl9kYWxsb2ModHNkX3RzZG4odHNkKSwgYXJlbmEsIHNsYWIpOwor CQltYWxsb2NfbXV0ZXhfbG9jayh0c2RfdHNkbih0c2QpLCAmYmluLT5sb2NrKTsKKwl9CisJd2hp bGUgKChzbGFiID0gZWRhdGFfaGVhcF9yZW1vdmVfZmlyc3QoJmJpbi0+c2xhYnNfbm9uZnVsbCkp ICE9IE5VTEwpIHsKKwkJbWFsbG9jX211dGV4X3VubG9jayh0c2RfdHNkbih0c2QpLCAmYmluLT5s b2NrKTsKKwkJYXJlbmFfc2xhYl9kYWxsb2ModHNkX3RzZG4odHNkKSwgYXJlbmEsIHNsYWIpOwor CQltYWxsb2NfbXV0ZXhfbG9jayh0c2RfdHNkbih0c2QpLCAmYmluLT5sb2NrKTsKKwl9CisJZm9y IChzbGFiID0gZWRhdGFfbGlzdF9hY3RpdmVfZmlyc3QoJmJpbi0+c2xhYnNfZnVsbCk7IHNsYWIg IT0gTlVMTDsKKwkgICAgIHNsYWIgPSBlZGF0YV9saXN0X2FjdGl2ZV9maXJzdCgmYmluLT5zbGFi c19mdWxsKSkgeworCQlhcmVuYV9iaW5fc2xhYnNfZnVsbF9yZW1vdmUoYXJlbmEsIGJpbiwgc2xh Yik7CisJCW1hbGxvY19tdXRleF91bmxvY2sodHNkX3RzZG4odHNkKSwgJmJpbi0+bG9jayk7CisJ CWFyZW5hX3NsYWJfZGFsbG9jKHRzZF90c2RuKHRzZCksIGFyZW5hLCBzbGFiKTsKKwkJbWFsbG9j X211dGV4X2xvY2sodHNkX3RzZG4odHNkKSwgJmJpbi0+bG9jayk7CisJfQorCWlmIChjb25maWdf c3RhdHMpIHsKKwkJYmluLT5zdGF0cy5jdXJyZWdzID0gMDsKKwkJYmluLT5zdGF0cy5jdXJzbGFi cyA9IDA7CisJfQorCW1hbGxvY19tdXRleF91bmxvY2sodHNkX3RzZG4odHNkKSwgJmJpbi0+bG9j ayk7Cit9CisKK3ZvaWQKK2FyZW5hX3Jlc2V0KHRzZF90ICp0c2QsIGFyZW5hX3QgKmFyZW5hKSB7 CisJLyoKKwkgKiBMb2NraW5nIGluIHRoaXMgZnVuY3Rpb24gaXMgdW5pbnR1aXRpdmUuICBUaGUg Y2FsbGVyIGd1YXJhbnRlZXMgdGhhdAorCSAqIG5vIGNvbmN1cnJlbnQgb3BlcmF0aW9ucyBhcmUg aGFwcGVuaW5nIGluIHRoaXMgYXJlbmEsIGJ1dCB0aGVyZSBhcmUKKwkgKiBzdGlsbCByZWFzb25z IHRoYXQgc29tZSBsb2NraW5nIGlzIG5lY2Vzc2FyeToKKwkgKgorCSAqIC0gU29tZSBvZiB0aGUg ZnVuY3Rpb25zIGluIHRoZSB0cmFuc2l0aXZlIGNsb3N1cmUgb2YgY2FsbHMgYXNzdW1lCisJICog ICBhcHByb3ByaWF0ZSBsb2NrcyBhcmUgaGVsZCwgYW5kIGluIHNvbWUgY2FzZXMgdGhlc2UgbG9j a3MgYXJlCisJICogICB0ZW1wb3JhcmlseSBkcm9wcGVkIHRvIGF2b2lkIGxvY2sgb3JkZXIgcmV2 ZXJzYWwgb3IgZGVhZGxvY2sgZHVlIHRvCisJICogICByZWVudHJ5LgorCSAqIC0gbWFsbGN0bCgi ZXBvY2giLCAuLi4pIG1heSBjb25jdXJyZW50bHkgcmVmcmVzaCBzdGF0cy4gIFdoaWxlCisJICog ICBzdHJpY3RseSBzcGVha2luZyB0aGlzIGlzIGEgImNvbmN1cnJlbnQgb3BlcmF0aW9uIiwgZGlz YWxsb3dpbmcKKwkgKiAgIHN0YXRzIHJlZnJlc2hlcyB3b3VsZCBpbXBvc2UgYW4gaW5jb252ZW5p ZW50IGJ1cmRlbi4KKwkgKi8KKworCS8qIExhcmdlIGFsbG9jYXRpb25zLiAqLworCW1hbGxvY19t dXRleF9sb2NrKHRzZF90c2RuKHRzZCksICZhcmVuYS0+bGFyZ2VfbXR4KTsKKworCWZvciAoZWRh dGFfdCAqZWRhdGEgPSBlZGF0YV9saXN0X2FjdGl2ZV9maXJzdCgmYXJlbmEtPmxhcmdlKTsKKwkg ICAgZWRhdGEgIT0gTlVMTDsgZWRhdGEgPSBlZGF0YV9saXN0X2FjdGl2ZV9maXJzdCgmYXJlbmEt PmxhcmdlKSkgeworCQl2b2lkICpwdHIgPSBlZGF0YV9iYXNlX2dldChlZGF0YSk7CisJCXNpemVf dCB1c2l6ZTsKKworCQltYWxsb2NfbXV0ZXhfdW5sb2NrKHRzZF90c2RuKHRzZCksICZhcmVuYS0+ bGFyZ2VfbXR4KTsKKwkJZW1hcF9hbGxvY19jdHhfdCBhbGxvY19jdHg7CisJCWVtYXBfYWxsb2Nf Y3R4X2xvb2t1cCh0c2RfdHNkbih0c2QpLCAmYXJlbmFfZW1hcF9nbG9iYWwsIHB0ciwKKwkJICAg ICZhbGxvY19jdHgpOworCQlhc3NlcnQoYWxsb2NfY3R4LnN6aW5kICE9IFNDX05TSVpFUyk7CisK KwkJaWYgKGNvbmZpZ19zdGF0cyB8fCAoY29uZmlnX3Byb2YgJiYgb3B0X3Byb2YpKSB7CisJCQl1 c2l6ZSA9IHN6X2luZGV4MnNpemUoYWxsb2NfY3R4LnN6aW5kKTsKKwkJCWFzc2VydCh1c2l6ZSA9 PSBpc2FsbG9jKHRzZF90c2RuKHRzZCksIHB0cikpOworCQl9CisJCS8qIFJlbW92ZSBsYXJnZSBh bGxvY2F0aW9uIGZyb20gcHJvZiBzYW1wbGUgc2V0LiAqLworCQlpZiAoY29uZmlnX3Byb2YgJiYg b3B0X3Byb2YpIHsKKwkJCXByb2ZfZnJlZSh0c2QsIHB0ciwgdXNpemUsICZhbGxvY19jdHgpOwor CQl9CisJCWxhcmdlX2RhbGxvYyh0c2RfdHNkbih0c2QpLCBlZGF0YSk7CisJCW1hbGxvY19tdXRl eF9sb2NrKHRzZF90c2RuKHRzZCksICZhcmVuYS0+bGFyZ2VfbXR4KTsKKwl9CisJbWFsbG9jX211 dGV4X3VubG9jayh0c2RfdHNkbih0c2QpLCAmYXJlbmEtPmxhcmdlX210eCk7CisKKwkvKiBCaW5z LiAqLworCWZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBTQ19OQklOUzsgaSsrKSB7CisJCWZvciAo dW5zaWduZWQgaiA9IDA7IGogPCBiaW5faW5mb3NbaV0ubl9zaGFyZHM7IGorKykgeworCQkJYXJl bmFfYmluX3Jlc2V0KHRzZCwgYXJlbmEsIGFyZW5hX2dldF9iaW4oYXJlbmEsIGksIGopKTsKKwkJ fQorCX0KKwlwYV9zaGFyZF9yZXNldCh0c2RfdHNkbih0c2QpLCAmYXJlbmEtPnBhX3NoYXJkKTsK K30KKworc3RhdGljIHZvaWQKK2FyZW5hX3ByZXBhcmVfYmFzZV9kZWxldGlvbl9zeW5jX2Zpbmlz aCh0c2RfdCAqdHNkLCBtYWxsb2NfbXV0ZXhfdCAqKm11dGV4ZXMsCisgICAgdW5zaWduZWQgbl9t dHgpIHsKKwlmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbl9tdHg7IGkrKykgeworCQltYWxsb2Nf bXV0ZXhfbG9jayh0c2RfdHNkbih0c2QpLCBtdXRleGVzW2ldKTsKKwkJbWFsbG9jX211dGV4X3Vu bG9jayh0c2RfdHNkbih0c2QpLCBtdXRleGVzW2ldKTsKKwl9Cit9CisKKyNkZWZpbmUgQVJFTkFf REVTVFJPWV9NQVhfREVMQVlFRF9NVFggMzIKK3N0YXRpYyB2b2lkCithcmVuYV9wcmVwYXJlX2Jh c2VfZGVsZXRpb25fc3luYyh0c2RfdCAqdHNkLCBtYWxsb2NfbXV0ZXhfdCAqbXR4LAorICAgIG1h bGxvY19tdXRleF90ICoqZGVsYXllZF9tdHgsIHVuc2lnbmVkICpuX2RlbGF5ZWQpIHsKKwlpZiAo IW1hbGxvY19tdXRleF90cnlsb2NrKHRzZF90c2RuKHRzZCksIG10eCkpIHsKKwkJLyogTm8gY29u dGVudGlvbi4gKi8KKwkJbWFsbG9jX211dGV4X3VubG9jayh0c2RfdHNkbih0c2QpLCBtdHgpOwor CQlyZXR1cm47CisJfQorCXVuc2lnbmVkIG4gPSAqbl9kZWxheWVkOworCWFzc2VydChuIDwgQVJF TkFfREVTVFJPWV9NQVhfREVMQVlFRF9NVFgpOworCS8qIEFkZCBhbm90aGVyIHRvIHRoZSBiYXRj aC4gKi8KKwlkZWxheWVkX210eFtuKytdID0gbXR4OworCisJaWYgKG4gPT0gQVJFTkFfREVTVFJP WV9NQVhfREVMQVlFRF9NVFgpIHsKKwkJYXJlbmFfcHJlcGFyZV9iYXNlX2RlbGV0aW9uX3N5bmNf ZmluaXNoKHRzZCwgZGVsYXllZF9tdHgsIG4pOworCQluID0gMDsKKwl9CisJKm5fZGVsYXllZCA9 IG47Cit9CisKK3N0YXRpYyB2b2lkCithcmVuYV9wcmVwYXJlX2Jhc2VfZGVsZXRpb24odHNkX3Qg KnRzZCwgYmFzZV90ICpiYXNlX3RvX2Rlc3Ryb3kpIHsKKwkvKgorCSAqIEluIG9yZGVyIHRvIGNv YWxlc2NlLCBlbWFwX3RyeV9hY3F1aXJlX2VkYXRhX25laWdoYm9yIHdpbGwgYXR0ZW1wdCB0bwor CSAqIGNoZWNrIG5laWdoYm9yIGVkYXRhJ3Mgc3RhdGUgdG8gZGV0ZXJtaW5lIGVsaWdpYmlsaXR5 LiAgVGhpcyBtZWFucworCSAqIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9ucywgdGhlIG1ldGFkYXRh IGZyb20gYW4gYXJlbmEgY2FuIGJlIGFjY2Vzc2VkCisJICogdy9vIGhvbGRpbmcgYW55IGxvY2tz IGZyb20gdGhhdCBhcmVuYS4gIEluIG9yZGVyIHRvIGd1YXJhbnRlZSBzYWZlCisJICogbWVtb3J5 IGFjY2VzcywgdGhlIG1ldGFkYXRhIGFuZCB0aGUgdW5kZXJseWluZyBiYXNlIGFsbG9jYXRvciBu ZWVkcworCSAqIHRvIGJlIGtlcHQgYWxpdmUsIHVudGlsIGFsbCBwZW5kaW5nIGFjY2Vzc2VzIGFy ZSBkb25lLgorCSAqCisJICogMSkgd2l0aCBvcHRfcmV0YWluLCB0aGUgYXJlbmEgYm91bmRhcnkg aW1wbGllcyB0aGUgaXNfaGVhZCBzdGF0ZQorCSAqICh0cmFja2VkIGluIHRoZSBydHJlZSBsZWFm KSwgYW5kIHRoZSBjb2FsZXNjZSBmbG93IHdpbGwgc3RvcCBhdCB0aGUKKwkgKiBoZWFkIHN0YXRl IGJyYW5jaC4gIFRoZXJlZm9yZSBubyBjcm9zcyBhcmVuYSBtZXRhZGF0YSBhY2Nlc3MKKwkgKiBw b3NzaWJsZS4KKwkgKgorCSAqIDIpIHcvbyBvcHRfcmV0YWluLCB0aGUgYXJlbmEgaWQgbmVlZHMg dG8gYmUgcmVhZCBmcm9tIHRoZSBlZGF0YV90LAorCSAqIG1lYW5pbmcgcmVhZCBvbmx5IGNyb3Nz LWFyZW5hIG1ldGFkYXRhIGFjY2VzcyBpcyBwb3NzaWJsZS4gIFRoZQorCSAqIGNvYWxlc2NlIGF0 dGVtcHQgd2lsbCBzdG9wIGF0IHRoZSBhcmVuYV9pZCBtaXNtYXRjaCwgYW5kIGlzIGFsd2F5cwor CSAqIHVuZGVyIG9uZSBvZiB0aGUgZWNhY2hlIGxvY2tzLiAgVG8gYWxsb3cgc2FmZSBwYXNzdGhy b3VnaCBvZiBzdWNoCisJICogbWV0YWRhdGEgYWNjZXNzZXMsIHRoZSBsb29wIGJlbG93IHdpbGwg aXRlcmF0ZSB0aHJvdWdoIGFsbCBtYW51YWwKKwkgKiBhcmVuYXMnIGVjYWNoZSBsb2Nrcy4gIEFz IGFsbCB0aGUgbWV0YWRhdGEgZnJvbSB0aGlzIGJhc2UgYWxsb2NhdG9yCisJICogaGF2ZSBiZWVu IHVubGlua2VkIGZyb20gdGhlIHJ0cmVlLCBhZnRlciBnb2luZyB0aHJvdWdoIGFsbCB0aGUKKwkg KiByZWxldmFudCBlY2FjaGUgbG9ja3MsIGl0J3Mgc2FmZSB0byBzYXkgdGhhdCBhKSBwZW5kaW5n IGFjY2Vzc2VzIGFyZQorCSAqIGFsbCBmaW5pc2hlZCwgYW5kIGIpIG5vIG5ldyBhY2Nlc3Mgd2ls bCBiZSBnZW5lcmF0ZWQuCisJICovCisJaWYgKG9wdF9yZXRhaW4pIHsKKwkJcmV0dXJuOworCX0K Kwl1bnNpZ25lZCBkZXN0cm95X2luZCA9IGJhc2VfaW5kX2dldChiYXNlX3RvX2Rlc3Ryb3kpOwor CWFzc2VydChkZXN0cm95X2luZCA+PSBtYW51YWxfYXJlbmFfYmFzZSk7CisKKwl0c2RuX3QgKnRz ZG4gPSB0c2RfdHNkbih0c2QpOworCW1hbGxvY19tdXRleF90ICpkZWxheWVkX210eFtBUkVOQV9E RVNUUk9ZX01BWF9ERUxBWUVEX01UWF07CisJdW5zaWduZWQgbl9kZWxheWVkID0gMCwgdG90YWwg PSBuYXJlbmFzX3RvdGFsX2dldCgpOworCWZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0b3RhbDsg aSsrKSB7CisJCWlmIChpID09IGRlc3Ryb3lfaW5kKSB7CisJCQljb250aW51ZTsKKwkJfQorCQlh cmVuYV90ICphcmVuYSA9IGFyZW5hX2dldCh0c2RuLCBpLCBmYWxzZSk7CisJCWlmIChhcmVuYSA9 PSBOVUxMKSB7CisJCQljb250aW51ZTsKKwkJfQorCQlwYWNfdCAqcGFjID0gJmFyZW5hLT5wYV9z aGFyZC5wYWM7CisJCWFyZW5hX3ByZXBhcmVfYmFzZV9kZWxldGlvbl9zeW5jKHRzZCwgJnBhYy0+ ZWNhY2hlX2RpcnR5Lm10eCwKKwkJICAgIGRlbGF5ZWRfbXR4LCAmbl9kZWxheWVkKTsKKwkJYXJl bmFfcHJlcGFyZV9iYXNlX2RlbGV0aW9uX3N5bmModHNkLCAmcGFjLT5lY2FjaGVfbXV6enkubXR4 LAorCQkgICAgZGVsYXllZF9tdHgsICZuX2RlbGF5ZWQpOworCQlhcmVuYV9wcmVwYXJlX2Jhc2Vf ZGVsZXRpb25fc3luYyh0c2QsICZwYWMtPmVjYWNoZV9yZXRhaW5lZC5tdHgsCisJCSAgICBkZWxh eWVkX210eCwgJm5fZGVsYXllZCk7CisJfQorCWFyZW5hX3ByZXBhcmVfYmFzZV9kZWxldGlvbl9z eW5jX2ZpbmlzaCh0c2QsIGRlbGF5ZWRfbXR4LCBuX2RlbGF5ZWQpOworfQorI3VuZGVmIEFSRU5B X0RFU1RST1lfTUFYX0RFTEFZRURfTVRYCisKK3ZvaWQKK2FyZW5hX2Rlc3Ryb3kodHNkX3QgKnRz ZCwgYXJlbmFfdCAqYXJlbmEpIHsKKwlhc3NlcnQoYmFzZV9pbmRfZ2V0KGFyZW5hLT5iYXNlKSA+ PSBuYXJlbmFzX2F1dG8pOworCWFzc2VydChhcmVuYV9udGhyZWFkc19nZXQoYXJlbmEsIGZhbHNl KSA9PSAwKTsKKwlhc3NlcnQoYXJlbmFfbnRocmVhZHNfZ2V0KGFyZW5hLCB0cnVlKSA9PSAwKTsK KworCS8qCisJICogTm8gYWxsb2NhdGlvbnMgaGF2ZSBvY2N1cnJlZCBzaW5jZSBhcmVuYV9yZXNl dCgpIHdhcyBjYWxsZWQuCisJICogRnVydGhlcm1vcmUsIHRoZSBjYWxsZXIgKGFyZW5hX2lfZGVz dHJveV9jdGwoKSkgcHVyZ2VkIGFsbCBjYWNoZWQKKwkgKiBleHRlbnRzLCBzbyBvbmx5IHJldGFp bmVkIGV4dGVudHMgbWF5IHJlbWFpbiBhbmQgaXQncyBzYWZlIHRvIGNhbGwKKwkgKiBwYV9zaGFy ZF9kZXN0cm95X3JldGFpbmVkLgorCSAqLworCXBhX3NoYXJkX2Rlc3Ryb3kodHNkX3RzZG4odHNk KSwgJmFyZW5hLT5wYV9zaGFyZCk7CisKKwkvKgorCSAqIFJlbW92ZSB0aGUgYXJlbmEgcG9pbnRl ciBmcm9tIHRoZSBhcmVuYXMgYXJyYXkuICBXZSByZWx5IG9uIHRoZSBmYWN0CisJICogdGhhdCB0 aGVyZSBpcyBubyB3YXkgZm9yIHRoZSBhcHBsaWNhdGlvbiB0byBnZXQgYSBkaXJ0eSByZWFkIGZy b20gdGhlCisJICogYXJlbmFzIGFycmF5IHVubGVzcyB0aGVyZSBpcyBhbiBpbmhlcmVudCByYWNl IGluIHRoZSBhcHBsaWNhdGlvbgorCSAqIGludm9sdmluZyBhY2Nlc3Mgb2YgYW4gYXJlbmEgYmVp bmcgY29uY3VycmVudGx5IGRlc3Ryb3llZC4gIFRoZQorCSAqIGFwcGxpY2F0aW9uIG11c3Qgc3lu Y2hyb25pemUga25vd2xlZGdlIG9mIHRoZSBhcmVuYSdzIHZhbGlkaXR5LCBzbyBhcworCSAqIGxv bmcgYXMgd2UgdXNlIGFuIGF0b21pYyB3cml0ZSB0byB1cGRhdGUgdGhlIGFyZW5hcyBhcnJheSwg dGhlCisJICogYXBwbGljYXRpb24gd2lsbCBnZXQgYSBjbGVhbiByZWFkIGFueSB0aW1lIGFmdGVy IGl0IHN5bmNocm9uaXplcworCSAqIGtub3dsZWRnZSB0aGF0IHRoZSBhcmVuYSBpcyBubyBsb25n ZXIgdmFsaWQuCisJICovCisJYXJlbmFfc2V0KGJhc2VfaW5kX2dldChhcmVuYS0+YmFzZSksIE5V TEwpOworCisJLyoKKwkgKiBEZXN0cm95IHRoZSBiYXNlIGFsbG9jYXRvciwgd2hpY2ggbWFuYWdl cyBhbGwgbWV0YWRhdGEgZXZlciBtYXBwZWQgYnkKKwkgKiB0aGlzIGFyZW5hLiAgVGhlIHByZXBh cmUgZnVuY3Rpb24gd2lsbCBtYWtlIHN1cmUgbm8gcGVuZGluZyBhY2Nlc3MgdG8KKwkgKiB0aGUg bWV0YWRhdGEgaW4gdGhpcyBiYXNlIGFueW1vcmUuCisJICovCisJYXJlbmFfcHJlcGFyZV9iYXNl X2RlbGV0aW9uKHRzZCwgYXJlbmEtPmJhc2UpOworCWJhc2VfZGVsZXRlKHRzZF90c2RuKHRzZCks IGFyZW5hLT5iYXNlKTsKK30KKworc3RhdGljIGVkYXRhX3QgKgorYXJlbmFfc2xhYl9hbGxvYyh0 c2RuX3QgKnRzZG4sIGFyZW5hX3QgKmFyZW5hLCBzemluZF90IGJpbmluZCwgdW5zaWduZWQgYmlu c2hhcmQsCisgICAgY29uc3QgYmluX2luZm9fdCAqYmluX2luZm8pIHsKKwlib29sIGRlZmVycmVk X3dvcmtfZ2VuZXJhdGVkID0gZmFsc2U7CisJd2l0bmVzc19hc3NlcnRfZGVwdGhfdG9fcmFuayh0 c2RuX3dpdG5lc3NfdHNkcF9nZXQodHNkbiksCisJICAgIFdJVE5FU1NfUkFOS19DT1JFLCAwKTsK KworCWJvb2wgZ3VhcmRlZCA9IHNhbl9zbGFiX2V4dGVudF9kZWNpZGVfZ3VhcmQodHNkbiwKKwkg ICAgYXJlbmFfZ2V0X2Vob29rcyhhcmVuYSkpOworCWVkYXRhX3QgKnNsYWIgPSBwYV9hbGxvYyh0 c2RuLCAmYXJlbmEtPnBhX3NoYXJkLCBiaW5faW5mby0+c2xhYl9zaXplLAorCSAgICAvKiBhbGln bm1lbnQgKi8gUEFHRSwgLyogc2xhYiAqLyB0cnVlLCAvKiBzemluZCAqLyBiaW5pbmQsCisJICAg ICAvKiB6ZXJvICovIGZhbHNlLCBndWFyZGVkLCAmZGVmZXJyZWRfd29ya19nZW5lcmF0ZWQpOwor CisJaWYgKGRlZmVycmVkX3dvcmtfZ2VuZXJhdGVkKSB7CisJCWFyZW5hX2hhbmRsZV9kZWZlcnJl ZF93b3JrKHRzZG4sIGFyZW5hKTsKKwl9CisKKwlpZiAoc2xhYiA9PSBOVUxMKSB7CisJCXJldHVy biBOVUxMOworCX0KKwlhc3NlcnQoZWRhdGFfc2xhYl9nZXQoc2xhYikpOworCisJLyogSW5pdGlh bGl6ZSBzbGFiIGludGVybmFscy4gKi8KKwlzbGFiX2RhdGFfdCAqc2xhYl9kYXRhID0gZWRhdGFf c2xhYl9kYXRhX2dldChzbGFiKTsKKwllZGF0YV9uZnJlZV9iaW5zaGFyZF9zZXQoc2xhYiwgYmlu X2luZm8tPm5yZWdzLCBiaW5zaGFyZCk7CisJYml0bWFwX2luaXQoc2xhYl9kYXRhLT5iaXRtYXAs ICZiaW5faW5mby0+Yml0bWFwX2luZm8sIGZhbHNlKTsKKworCXJldHVybiBzbGFiOworfQorCisv KgorICogQmVmb3JlIGF0dGVtcHRpbmcgdGhlIF93aXRoX2ZyZXNoX3NsYWIgYXBwcm9hY2hlcyBi ZWxvdywgdGhlIF9ub19mcmVzaF9zbGFiCisgKiB2YXJpYW50cyAoaS5lLiB0aHJvdWdoIHNsYWJj dXIgYW5kIG5vbmZ1bGwpIG11c3QgYmUgdHJpZWQgZmlyc3QuCisgKi8KK3N0YXRpYyB2b2lkCith cmVuYV9iaW5fcmVmaWxsX3NsYWJjdXJfd2l0aF9mcmVzaF9zbGFiKHRzZG5fdCAqdHNkbiwgYXJl bmFfdCAqYXJlbmEsCisgICAgYmluX3QgKmJpbiwgc3ppbmRfdCBiaW5pbmQsIGVkYXRhX3QgKmZy ZXNoX3NsYWIpIHsKKwltYWxsb2NfbXV0ZXhfYXNzZXJ0X293bmVyKHRzZG4sICZiaW4tPmxvY2sp OworCS8qIE9ubHkgY2FsbGVkIGFmdGVyIHNsYWJjdXIgYW5kIG5vbmZ1bGwgYm90aCBmYWlsZWQu ICovCisJYXNzZXJ0KGJpbi0+c2xhYmN1ciA9PSBOVUxMKTsKKwlhc3NlcnQoZWRhdGFfaGVhcF9m aXJzdCgmYmluLT5zbGFic19ub25mdWxsKSA9PSBOVUxMKTsKKwlhc3NlcnQoZnJlc2hfc2xhYiAh PSBOVUxMKTsKKworCS8qIEEgbmV3IHNsYWIgZnJvbSBhcmVuYV9zbGFiX2FsbG9jKCkgKi8KKwlh c3NlcnQoZWRhdGFfbmZyZWVfZ2V0KGZyZXNoX3NsYWIpID09IGJpbl9pbmZvc1tiaW5pbmRdLm5y ZWdzKTsKKwlpZiAoY29uZmlnX3N0YXRzKSB7CisJCWJpbi0+c3RhdHMubnNsYWJzKys7CisJCWJp bi0+c3RhdHMuY3Vyc2xhYnMrKzsKKwl9CisJYmluLT5zbGFiY3VyID0gZnJlc2hfc2xhYjsKK30K KworLyogUmVmaWxsIHNsYWJjdXIgYW5kIHRoZW4gYWxsb2MgdXNpbmcgdGhlIGZyZXNoIHNsYWIg Ki8KK3N0YXRpYyB2b2lkICoKK2FyZW5hX2Jpbl9tYWxsb2Nfd2l0aF9mcmVzaF9zbGFiKHRzZG5f dCAqdHNkbiwgYXJlbmFfdCAqYXJlbmEsIGJpbl90ICpiaW4sCisgICAgc3ppbmRfdCBiaW5pbmQs IGVkYXRhX3QgKmZyZXNoX3NsYWIpIHsKKwltYWxsb2NfbXV0ZXhfYXNzZXJ0X293bmVyKHRzZG4s ICZiaW4tPmxvY2spOworCWFyZW5hX2Jpbl9yZWZpbGxfc2xhYmN1cl93aXRoX2ZyZXNoX3NsYWIo dHNkbiwgYXJlbmEsIGJpbiwgYmluaW5kLAorCSAgICBmcmVzaF9zbGFiKTsKKworCXJldHVybiBh cmVuYV9zbGFiX3JlZ19hbGxvYyhiaW4tPnNsYWJjdXIsICZiaW5faW5mb3NbYmluaW5kXSk7Cit9 CisKK3N0YXRpYyBib29sCithcmVuYV9iaW5fcmVmaWxsX3NsYWJjdXJfbm9fZnJlc2hfc2xhYih0 c2RuX3QgKnRzZG4sIGFyZW5hX3QgKmFyZW5hLAorICAgIGJpbl90ICpiaW4pIHsKKwltYWxsb2Nf bXV0ZXhfYXNzZXJ0X293bmVyKHRzZG4sICZiaW4tPmxvY2spOworCS8qIE9ubHkgY2FsbGVkIGFm dGVyIGFyZW5hX3NsYWJfcmVnX2FsbG9jW19iYXRjaF0gZmFpbGVkLiAqLworCWFzc2VydChiaW4t PnNsYWJjdXIgPT0gTlVMTCB8fCBlZGF0YV9uZnJlZV9nZXQoYmluLT5zbGFiY3VyKSA9PSAwKTsK KworCWlmIChiaW4tPnNsYWJjdXIgIT0gTlVMTCkgeworCQlhcmVuYV9iaW5fc2xhYnNfZnVsbF9p bnNlcnQoYXJlbmEsIGJpbiwgYmluLT5zbGFiY3VyKTsKKwl9CisKKwkvKiBMb29rIGZvciBhIHVz YWJsZSBzbGFiLiAqLworCWJpbi0+c2xhYmN1ciA9IGFyZW5hX2Jpbl9zbGFic19ub25mdWxsX3Ry eWdldChiaW4pOworCWFzc2VydChiaW4tPnNsYWJjdXIgPT0gTlVMTCB8fCBlZGF0YV9uZnJlZV9n ZXQoYmluLT5zbGFiY3VyKSA+IDApOworCisJcmV0dXJuIChiaW4tPnNsYWJjdXIgPT0gTlVMTCk7 Cit9CisKK2Jpbl90ICoKK2FyZW5hX2Jpbl9jaG9vc2UodHNkbl90ICp0c2RuLCBhcmVuYV90ICph cmVuYSwgc3ppbmRfdCBiaW5pbmQsCisgICAgdW5zaWduZWQgKmJpbnNoYXJkX3ApIHsKKwl1bnNp Z25lZCBiaW5zaGFyZDsKKwlpZiAodHNkbl9udWxsKHRzZG4pIHx8IHRzZF9hcmVuYV9nZXQodHNk bl90c2QodHNkbikpID09IE5VTEwpIHsKKwkJYmluc2hhcmQgPSAwOworCX0gZWxzZSB7CisJCWJp bnNoYXJkID0gdHNkX2JpbnNoYXJkc3BfZ2V0KHRzZG5fdHNkKHRzZG4pKS0+Ymluc2hhcmRbYmlu aW5kXTsKKwl9CisJYXNzZXJ0KGJpbnNoYXJkIDwgYmluX2luZm9zW2JpbmluZF0ubl9zaGFyZHMp OworCWlmIChiaW5zaGFyZF9wICE9IE5VTEwpIHsKKwkJKmJpbnNoYXJkX3AgPSBiaW5zaGFyZDsK Kwl9CisJcmV0dXJuIGFyZW5hX2dldF9iaW4oYXJlbmEsIGJpbmluZCwgYmluc2hhcmQpOworfQor Cit2b2lkCithcmVuYV9jYWNoZV9iaW5fZmlsbF9zbWFsbCh0c2RuX3QgKnRzZG4sIGFyZW5hX3Qg KmFyZW5hLAorICAgIGNhY2hlX2Jpbl90ICpjYWNoZV9iaW4sIGNhY2hlX2Jpbl9pbmZvX3QgKmNh Y2hlX2Jpbl9pbmZvLCBzemluZF90IGJpbmluZCwKKyAgICBjb25zdCB1bnNpZ25lZCBuZmlsbCkg eworCWFzc2VydChjYWNoZV9iaW5fbmNhY2hlZF9nZXRfbG9jYWwoY2FjaGVfYmluLCBjYWNoZV9i aW5faW5mbykgPT0gMCk7CisKKwljb25zdCBiaW5faW5mb190ICpiaW5faW5mbyA9ICZiaW5faW5m b3NbYmluaW5kXTsKKworCUNBQ0hFX0JJTl9QVFJfQVJSQVlfREVDTEFSRShwdHJzLCBuZmlsbCk7 CisJY2FjaGVfYmluX2luaXRfcHRyX2FycmF5X2Zvcl9maWxsKGNhY2hlX2JpbiwgY2FjaGVfYmlu X2luZm8sICZwdHJzLAorCSAgICBuZmlsbCk7CisJLyoKKwkgKiBCaW4tbG9jYWwgcmVzb3VyY2Vz IGFyZSB1c2VkIGZpcnN0OiAxKSBiaW4tPnNsYWJjdXIsIGFuZCAyKSBub25mdWxsCisJICogc2xh YnMuICBBZnRlciBib3RoIGFyZSBleGhhdXN0ZWQsIG5ldyBzbGFicyB3aWxsIGJlIGFsbG9jYXRl ZCB0aHJvdWdoCisJICogYXJlbmFfc2xhYl9hbGxvYygpLgorCSAqCisJICogQmluIGxvY2sgaXMg b25seSB0YWtlbiAvIHJlbGVhc2VkIHJpZ2h0IGJlZm9yZSAvIGFmdGVyIHRoZSB3aGlsZSguLi4p CisJICogcmVmaWxsIGxvb3AsIHdpdGggbmV3IHNsYWIgYWxsb2NhdGlvbiAod2hpY2ggaGFzIGl0 cyBvd24gbG9ja2luZykKKwkgKiBrZXB0IG91dHNpZGUgb2YgdGhlIGxvb3AuICBUaGlzIHNldHVw IGZhY2lsaXRhdGVzIGZsYXQgY29tYmluaW5nLCBhdAorCSAqIHRoZSBjb3N0IG9mIHRoZSBuZXN0 ZWQgbG9vcCAodGhyb3VnaCBnb3RvIGxhYmVsX3JlZmlsbCkuCisJICoKKwkgKiBUbyBvcHRpbWl6 ZSBmb3IgY2FzZXMgd2l0aCBjb250ZW50aW9uIGFuZCBsaW1pdGVkIHJlc291cmNlcworCSAqIChl LmcuIGh1Z2VwYWdlLWJhY2tlZCBvciBub24tb3ZlcmNvbW1pdCBhcmVuYXMpLCBlYWNoIGZpbGwt aXRlcmF0aW9uCisJICogZ2V0cyBvbmUgY2hhbmNlIG9mIHNsYWJfYWxsb2MsIGFuZCBhIHJldHJ5 IG9mIGJpbiBsb2NhbCByZXNvdXJjZXMKKwkgKiBhZnRlciB0aGUgc2xhYiBhbGxvY2F0aW9uIChy ZWdhcmRsZXNzIGlmIHNsYWJfYWxsb2MgZmFpbGVkLCBiZWNhdXNlCisJICogdGhlIGJpbiBsb2Nr IGlzIGRyb3BwZWQgZHVyaW5nIHRoZSBzbGFiIGFsbG9jYXRpb24pLgorCSAqCisJICogSW4gb3Ro ZXIgd29yZHMsIG5ldyBzbGFiIGFsbG9jYXRpb24gaXMgYWxsb3dlZCwgYXMgbG9uZyBhcyB0aGVy ZSB3YXMKKwkgKiBwcm9ncmVzcyBzaW5jZSB0aGUgcHJldmlvdXMgc2xhYl9hbGxvYy4gIFRoaXMg aXMgdHJhY2tlZCB3aXRoCisJICogbWFkZV9wcm9ncmVzcyBiZWxvdywgaW5pdGlhbGl6ZWQgdG8g dHJ1ZSB0byBqdW1wIHN0YXJ0IHRoZSBmaXJzdAorCSAqIGl0ZXJhdGlvbi4KKwkgKgorCSAqIElu IG90aGVyIHdvcmRzIChhZ2FpbiksIHRoZSBsb29wIHdpbGwgb25seSB0ZXJtaW5hdGUgZWFybHkg KGkuZS4gc3RvcAorCSAqIHdpdGggZmlsbGVkIDwgbmZpbGwpIGFmdGVyIGdvaW5nIHRocm91Z2gg dGhlIHRocmVlIHN0ZXBzOiBhKSBiaW4KKwkgKiBsb2NhbCBleGhhdXN0ZWQsIGIpIHVubG9jayBh bmQgc2xhYl9hbGxvYyByZXR1cm5zIG51bGwsIGMpIHJlLWxvY2sKKwkgKiBhbmQgYmluIGxvY2Fs IGZhaWxzIGFnYWluLgorCSAqLworCWJvb2wgbWFkZV9wcm9ncmVzcyA9IHRydWU7CisJZWRhdGFf dCAqZnJlc2hfc2xhYiA9IE5VTEw7CisJYm9vbCBhbGxvY19hbmRfcmV0cnkgPSBmYWxzZTsKKwl1 bnNpZ25lZCBmaWxsZWQgPSAwOworCXVuc2lnbmVkIGJpbnNoYXJkOworCWJpbl90ICpiaW4gPSBh cmVuYV9iaW5fY2hvb3NlKHRzZG4sIGFyZW5hLCBiaW5pbmQsICZiaW5zaGFyZCk7CisKK2xhYmVs X3JlZmlsbDoKKwltYWxsb2NfbXV0ZXhfbG9jayh0c2RuLCAmYmluLT5sb2NrKTsKKworCXdoaWxl IChmaWxsZWQgPCBuZmlsbCkgeworCQkvKiBUcnkgYmF0Y2gtZmlsbCBmcm9tIHNsYWJjdXIgZmly c3QuICovCisJCWVkYXRhX3QgKnNsYWJjdXIgPSBiaW4tPnNsYWJjdXI7CisJCWlmIChzbGFiY3Vy ICE9IE5VTEwgJiYgZWRhdGFfbmZyZWVfZ2V0KHNsYWJjdXIpID4gMCkgeworCQkJdW5zaWduZWQg dG9maWxsID0gbmZpbGwgLSBmaWxsZWQ7CisJCQl1bnNpZ25lZCBuZnJlZSA9IGVkYXRhX25mcmVl X2dldChzbGFiY3VyKTsKKwkJCXVuc2lnbmVkIGNudCA9IHRvZmlsbCA8IG5mcmVlID8gdG9maWxs IDogbmZyZWU7CisKKwkJCWFyZW5hX3NsYWJfcmVnX2FsbG9jX2JhdGNoKHNsYWJjdXIsIGJpbl9p bmZvLCBjbnQsCisJCQkgICAgJnB0cnMucHRyW2ZpbGxlZF0pOworCQkJbWFkZV9wcm9ncmVzcyA9 IHRydWU7CisJCQlmaWxsZWQgKz0gY250OworCQkJY29udGludWU7CisJCX0KKwkJLyogTmV4dCB0 cnkgcmVmaWxsaW5nIHNsYWJjdXIgZnJvbSBub25mdWxsIHNsYWJzLiAqLworCQlpZiAoIWFyZW5h X2Jpbl9yZWZpbGxfc2xhYmN1cl9ub19mcmVzaF9zbGFiKHRzZG4sIGFyZW5hLCBiaW4pKSB7CisJ CQlhc3NlcnQoYmluLT5zbGFiY3VyICE9IE5VTEwpOworCQkJY29udGludWU7CisJCX0KKworCQkv KiBUaGVuIHNlZSBpZiBhIG5ldyBzbGFiIHdhcyByZXNlcnZlZCBhbHJlYWR5LiAqLworCQlpZiAo ZnJlc2hfc2xhYiAhPSBOVUxMKSB7CisJCQlhcmVuYV9iaW5fcmVmaWxsX3NsYWJjdXJfd2l0aF9m cmVzaF9zbGFiKHRzZG4sIGFyZW5hLAorCQkJICAgIGJpbiwgYmluaW5kLCBmcmVzaF9zbGFiKTsK KwkJCWFzc2VydChiaW4tPnNsYWJjdXIgIT0gTlVMTCk7CisJCQlmcmVzaF9zbGFiID0gTlVMTDsK KwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogVHJ5IHNsYWJfYWxsb2MgaWYgbWFkZSBwcm9ncmVz cyAob3IgbmV2ZXIgZGlkIHNsYWJfYWxsb2MpLiAqLworCQlpZiAobWFkZV9wcm9ncmVzcykgewor CQkJYXNzZXJ0KGJpbi0+c2xhYmN1ciA9PSBOVUxMKTsKKwkJCWFzc2VydChmcmVzaF9zbGFiID09 IE5VTEwpOworCQkJYWxsb2NfYW5kX3JldHJ5ID0gdHJ1ZTsKKwkJCS8qIEFsbG9jIGEgbmV3IHNs YWIgdGhlbiBjb21lIGJhY2suICovCisJCQlicmVhazsKKwkJfQorCisJCS8qIE9PTS4gKi8KKwor CQlhc3NlcnQoZnJlc2hfc2xhYiA9PSBOVUxMKTsKKwkJYXNzZXJ0KCFhbGxvY19hbmRfcmV0cnkp OworCQlicmVhazsKKwl9IC8qIHdoaWxlIChmaWxsZWQgPCBuZmlsbCkgbG9vcC4gKi8KKworCWlm IChjb25maWdfc3RhdHMgJiYgIWFsbG9jX2FuZF9yZXRyeSkgeworCQliaW4tPnN0YXRzLm5tYWxs b2MgKz0gZmlsbGVkOworCQliaW4tPnN0YXRzLm5yZXF1ZXN0cyArPSBjYWNoZV9iaW4tPnRzdGF0 cy5ucmVxdWVzdHM7CisJCWJpbi0+c3RhdHMuY3VycmVncyArPSBmaWxsZWQ7CisJCWJpbi0+c3Rh dHMubmZpbGxzKys7CisJCWNhY2hlX2Jpbi0+dHN0YXRzLm5yZXF1ZXN0cyA9IDA7CisJfQorCisJ bWFsbG9jX211dGV4X3VubG9jayh0c2RuLCAmYmluLT5sb2NrKTsKKworCWlmIChhbGxvY19hbmRf cmV0cnkpIHsKKwkJYXNzZXJ0KGZyZXNoX3NsYWIgPT0gTlVMTCk7CisJCWFzc2VydChmaWxsZWQg PCBuZmlsbCk7CisJCWFzc2VydChtYWRlX3Byb2dyZXNzKTsKKworCQlmcmVzaF9zbGFiID0gYXJl bmFfc2xhYl9hbGxvYyh0c2RuLCBhcmVuYSwgYmluaW5kLCBiaW5zaGFyZCwKKwkJICAgIGJpbl9p bmZvKTsKKwkJLyogZnJlc2hfc2xhYiBOVUxMIGNhc2UgaGFuZGxlZCBpbiB0aGUgZm9yIGxvb3Au ICovCisKKwkJYWxsb2NfYW5kX3JldHJ5ID0gZmFsc2U7CisJCW1hZGVfcHJvZ3Jlc3MgPSBmYWxz ZTsKKwkJZ290byBsYWJlbF9yZWZpbGw7CisJfQorCWFzc2VydChmaWxsZWQgPT0gbmZpbGwgfHwg KGZyZXNoX3NsYWIgPT0gTlVMTCAmJiAhbWFkZV9wcm9ncmVzcykpOworCisJLyogUmVsZWFzZSBp ZiBhbGxvY2F0ZWQgYnV0IG5vdCB1c2VkLiAqLworCWlmIChmcmVzaF9zbGFiICE9IE5VTEwpIHsK KwkJYXNzZXJ0KGVkYXRhX25mcmVlX2dldChmcmVzaF9zbGFiKSA9PSBiaW5faW5mby0+bnJlZ3Mp OworCQlhcmVuYV9zbGFiX2RhbGxvYyh0c2RuLCBhcmVuYSwgZnJlc2hfc2xhYik7CisJCWZyZXNo X3NsYWIgPSBOVUxMOworCX0KKworCWNhY2hlX2Jpbl9maW5pc2hfZmlsbChjYWNoZV9iaW4sIGNh Y2hlX2Jpbl9pbmZvLCAmcHRycywgZmlsbGVkKTsKKwlhcmVuYV9kZWNheV90aWNrKHRzZG4sIGFy ZW5hKTsKK30KKworc2l6ZV90CithcmVuYV9maWxsX3NtYWxsX2ZyZXNoKHRzZG5fdCAqdHNkbiwg YXJlbmFfdCAqYXJlbmEsIHN6aW5kX3QgYmluaW5kLAorICAgIHZvaWQgKipwdHJzLCBzaXplX3Qg bmZpbGwsIGJvb2wgemVybykgeworCWFzc2VydChiaW5pbmQgPCBTQ19OQklOUyk7CisJY29uc3Qg YmluX2luZm9fdCAqYmluX2luZm8gPSAmYmluX2luZm9zW2JpbmluZF07CisJY29uc3Qgc2l6ZV90 IG5yZWdzID0gYmluX2luZm8tPm5yZWdzOworCWFzc2VydChucmVncyA+IDApOworCWNvbnN0IHNp emVfdCB1c2l6ZSA9IGJpbl9pbmZvLT5yZWdfc2l6ZTsKKworCWNvbnN0IGJvb2wgbWFudWFsX2Fy ZW5hID0gIWFyZW5hX2lzX2F1dG8oYXJlbmEpOworCXVuc2lnbmVkIGJpbnNoYXJkOworCWJpbl90 ICpiaW4gPSBhcmVuYV9iaW5fY2hvb3NlKHRzZG4sIGFyZW5hLCBiaW5pbmQsICZiaW5zaGFyZCk7 CisKKwlzaXplX3QgbnNsYWIgPSAwOworCXNpemVfdCBmaWxsZWQgPSAwOworCWVkYXRhX3QgKnNs YWIgPSBOVUxMOworCWVkYXRhX2xpc3RfYWN0aXZlX3QgZnVsbHM7CisJZWRhdGFfbGlzdF9hY3Rp dmVfaW5pdCgmZnVsbHMpOworCisJd2hpbGUgKGZpbGxlZCA8IG5maWxsICYmIChzbGFiID0gYXJl bmFfc2xhYl9hbGxvYyh0c2RuLCBhcmVuYSwgYmluaW5kLAorCSAgICBiaW5zaGFyZCwgYmluX2lu Zm8pKSAhPSBOVUxMKSB7CisJCWFzc2VydCgoc2l6ZV90KWVkYXRhX25mcmVlX2dldChzbGFiKSA9 PSBucmVncyk7CisJCSsrbnNsYWI7CisJCXNpemVfdCBiYXRjaCA9IG5maWxsIC0gZmlsbGVkOwor CQlpZiAoYmF0Y2ggPiBucmVncykgeworCQkJYmF0Y2ggPSBucmVnczsKKwkJfQorCQlhc3NlcnQo YmF0Y2ggPiAwKTsKKwkJYXJlbmFfc2xhYl9yZWdfYWxsb2NfYmF0Y2goc2xhYiwgYmluX2luZm8s ICh1bnNpZ25lZCliYXRjaCwKKwkJICAgICZwdHJzW2ZpbGxlZF0pOworCQlhc3NlcnQoZWRhdGFf YWRkcl9nZXQoc2xhYikgPT0gcHRyc1tmaWxsZWRdKTsKKwkJaWYgKHplcm8pIHsKKwkJCW1lbXNl dChwdHJzW2ZpbGxlZF0sIDAsIGJhdGNoICogdXNpemUpOworCQl9CisJCWZpbGxlZCArPSBiYXRj aDsKKwkJaWYgKGJhdGNoID09IG5yZWdzKSB7CisJCQlpZiAobWFudWFsX2FyZW5hKSB7CisJCQkJ ZWRhdGFfbGlzdF9hY3RpdmVfYXBwZW5kKCZmdWxscywgc2xhYik7CisJCQl9CisJCQlzbGFiID0g TlVMTDsKKwkJfQorCX0KKworCW1hbGxvY19tdXRleF9sb2NrKHRzZG4sICZiaW4tPmxvY2spOwor CS8qCisJICogT25seSB0aGUgbGFzdCBzbGFiIGNhbiBiZSBub24tZW1wdHksIGFuZCB0aGUgbGFz dCBzbGFiIGlzIG5vbi1lbXB0eQorCSAqIGlmZiBzbGFiICE9IE5VTEwuCisJICovCisJaWYgKHNs YWIgIT0gTlVMTCkgeworCQlhcmVuYV9iaW5fbG93ZXJfc2xhYih0c2RuLCBhcmVuYSwgc2xhYiwg YmluKTsKKwl9CisJaWYgKG1hbnVhbF9hcmVuYSkgeworCQllZGF0YV9saXN0X2FjdGl2ZV9jb25j YXQoJmJpbi0+c2xhYnNfZnVsbCwgJmZ1bGxzKTsKKwl9CisJYXNzZXJ0KGVkYXRhX2xpc3RfYWN0 aXZlX2VtcHR5KCZmdWxscykpOworCWlmIChjb25maWdfc3RhdHMpIHsKKwkJYmluLT5zdGF0cy5u c2xhYnMgKz0gbnNsYWI7CisJCWJpbi0+c3RhdHMuY3Vyc2xhYnMgKz0gbnNsYWI7CisJCWJpbi0+ c3RhdHMubm1hbGxvYyArPSBmaWxsZWQ7CisJCWJpbi0+c3RhdHMubnJlcXVlc3RzICs9IGZpbGxl ZDsKKwkJYmluLT5zdGF0cy5jdXJyZWdzICs9IGZpbGxlZDsKKwl9CisJbWFsbG9jX211dGV4X3Vu bG9jayh0c2RuLCAmYmluLT5sb2NrKTsKKworCWFyZW5hX2RlY2F5X3RpY2sodHNkbiwgYXJlbmEp OworCXJldHVybiBmaWxsZWQ7Cit9CisKKy8qCisgKiBXaXRob3V0IGFsbG9jYXRpbmcgYSBuZXcg c2xhYiwgdHJ5IGFyZW5hX3NsYWJfcmVnX2FsbG9jKCkgYW5kIHJlLWZpbGwKKyAqIGJpbi0+c2xh YmN1ciBpZiBuZWNlc3NhcnkuCisgKi8KK3N0YXRpYyB2b2lkICoKK2FyZW5hX2Jpbl9tYWxsb2Nf bm9fZnJlc2hfc2xhYih0c2RuX3QgKnRzZG4sIGFyZW5hX3QgKmFyZW5hLCBiaW5fdCAqYmluLAor ICAgIHN6aW5kX3QgYmluaW5kKSB7CisJbWFsbG9jX211dGV4X2Fzc2VydF9vd25lcih0c2RuLCAm YmluLT5sb2NrKTsKKwlpZiAoYmluLT5zbGFiY3VyID09IE5VTEwgfHwgZWRhdGFfbmZyZWVfZ2V0 KGJpbi0+c2xhYmN1cikgPT0gMCkgeworCQlpZiAoYXJlbmFfYmluX3JlZmlsbF9zbGFiY3VyX25v X2ZyZXNoX3NsYWIodHNkbiwgYXJlbmEsIGJpbikpIHsKKwkJCXJldHVybiBOVUxMOworCQl9CisJ fQorCisJYXNzZXJ0KGJpbi0+c2xhYmN1ciAhPSBOVUxMICYmIGVkYXRhX25mcmVlX2dldChiaW4t PnNsYWJjdXIpID4gMCk7CisJcmV0dXJuIGFyZW5hX3NsYWJfcmVnX2FsbG9jKGJpbi0+c2xhYmN1 ciwgJmJpbl9pbmZvc1tiaW5pbmRdKTsKK30KKworc3RhdGljIHZvaWQgKgorYXJlbmFfbWFsbG9j X3NtYWxsKHRzZG5fdCAqdHNkbiwgYXJlbmFfdCAqYXJlbmEsIHN6aW5kX3QgYmluaW5kLCBib29s IHplcm8pIHsKKwlhc3NlcnQoYmluaW5kIDwgU0NfTkJJTlMpOworCWNvbnN0IGJpbl9pbmZvX3Qg KmJpbl9pbmZvID0gJmJpbl9pbmZvc1tiaW5pbmRdOworCXNpemVfdCB1c2l6ZSA9IHN6X2luZGV4 MnNpemUoYmluaW5kKTsKKwl1bnNpZ25lZCBiaW5zaGFyZDsKKwliaW5fdCAqYmluID0gYXJlbmFf YmluX2Nob29zZSh0c2RuLCBhcmVuYSwgYmluaW5kLCAmYmluc2hhcmQpOworCisJbWFsbG9jX211 dGV4X2xvY2sodHNkbiwgJmJpbi0+bG9jayk7CisJZWRhdGFfdCAqZnJlc2hfc2xhYiA9IE5VTEw7 CisJdm9pZCAqcmV0ID0gYXJlbmFfYmluX21hbGxvY19ub19mcmVzaF9zbGFiKHRzZG4sIGFyZW5h LCBiaW4sIGJpbmluZCk7CisJaWYgKHJldCA9PSBOVUxMKSB7CisJCW1hbGxvY19tdXRleF91bmxv Y2sodHNkbiwgJmJpbi0+bG9jayk7CisJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiov CisJCWZyZXNoX3NsYWIgPSBhcmVuYV9zbGFiX2FsbG9jKHRzZG4sIGFyZW5hLCBiaW5pbmQsIGJp bnNoYXJkLAorCQkgICAgYmluX2luZm8pOworCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKiovCisJCW1hbGxvY19tdXRleF9sb2NrKHRzZG4sICZiaW4tPmxvY2spOworCQkvKiBSZXRy eSBzaW5jZSB0aGUgbG9jayB3YXMgZHJvcHBlZC4gKi8KKwkJcmV0ID0gYXJlbmFfYmluX21hbGxv Y19ub19mcmVzaF9zbGFiKHRzZG4sIGFyZW5hLCBiaW4sIGJpbmluZCk7CisJCWlmIChyZXQgPT0g TlVMTCkgeworCQkJaWYgKGZyZXNoX3NsYWIgPT0gTlVMTCkgeworCQkJCS8qIE9PTSAqLworCQkJ CW1hbGxvY19tdXRleF91bmxvY2sodHNkbiwgJmJpbi0+bG9jayk7CisJCQkJcmV0dXJuIE5VTEw7 CisJCQl9CisJCQlyZXQgPSBhcmVuYV9iaW5fbWFsbG9jX3dpdGhfZnJlc2hfc2xhYih0c2RuLCBh cmVuYSwgYmluLAorCQkJICAgIGJpbmluZCwgZnJlc2hfc2xhYik7CisJCQlmcmVzaF9zbGFiID0g TlVMTDsKKwkJfQorCX0KKwlpZiAoY29uZmlnX3N0YXRzKSB7CisJCWJpbi0+c3RhdHMubm1hbGxv YysrOworCQliaW4tPnN0YXRzLm5yZXF1ZXN0cysrOworCQliaW4tPnN0YXRzLmN1cnJlZ3MrKzsK Kwl9CisJbWFsbG9jX211dGV4X3VubG9jayh0c2RuLCAmYmluLT5sb2NrKTsKKworCWlmIChmcmVz aF9zbGFiICE9IE5VTEwpIHsKKwkJYXJlbmFfc2xhYl9kYWxsb2ModHNkbiwgYXJlbmEsIGZyZXNo X3NsYWIpOworCX0KKwlpZiAoemVybykgeworCQltZW1zZXQocmV0LCAwLCB1c2l6ZSk7CisJfQor CWFyZW5hX2RlY2F5X3RpY2sodHNkbiwgYXJlbmEpOworCisJcmV0dXJuIHJldDsKK30KKwordm9p ZCAqCithcmVuYV9tYWxsb2NfaGFyZCh0c2RuX3QgKnRzZG4sIGFyZW5hX3QgKmFyZW5hLCBzaXpl X3Qgc2l6ZSwgc3ppbmRfdCBpbmQsCisgICAgYm9vbCB6ZXJvKSB7CisJYXNzZXJ0KCF0c2RuX251 bGwodHNkbikgfHwgYXJlbmEgIT0gTlVMTCk7CisKKwlpZiAobGlrZWx5KCF0c2RuX251bGwodHNk bikpKSB7CisJCWFyZW5hID0gYXJlbmFfY2hvb3NlX21heWJlX2h1Z2UodHNkbl90c2QodHNkbiks IGFyZW5hLCBzaXplKTsKKwl9CisJaWYgKHVubGlrZWx5KGFyZW5hID09IE5VTEwpKSB7CisJCXJl dHVybiBOVUxMOworCX0KKworCWlmIChsaWtlbHkoc2l6ZSA8PSBTQ19TTUFMTF9NQVhDTEFTUykp IHsKKwkJcmV0dXJuIGFyZW5hX21hbGxvY19zbWFsbCh0c2RuLCBhcmVuYSwgaW5kLCB6ZXJvKTsK Kwl9CisJcmV0dXJuIGxhcmdlX21hbGxvYyh0c2RuLCBhcmVuYSwgc3pfaW5kZXgyc2l6ZShpbmQp LCB6ZXJvKTsKK30KKwordm9pZCAqCithcmVuYV9wYWxsb2ModHNkbl90ICp0c2RuLCBhcmVuYV90 ICphcmVuYSwgc2l6ZV90IHVzaXplLCBzaXplX3QgYWxpZ25tZW50LAorICAgIGJvb2wgemVybywg dGNhY2hlX3QgKnRjYWNoZSkgeworCXZvaWQgKnJldDsKKworCWlmICh1c2l6ZSA8PSBTQ19TTUFM TF9NQVhDTEFTUykgeworCQkvKiBTbWFsbDsgYWxpZ25tZW50IGRvZXNuJ3QgcmVxdWlyZSBzcGVj aWFsIHNsYWIgcGxhY2VtZW50LiAqLworCisJCS8qIHVzaXplIHNob3VsZCBiZSBhIHJlc3VsdCBv ZiBzel9zYTJ1KCkgKi8KKwkJYXNzZXJ0KCh1c2l6ZSAmIChhbGlnbm1lbnQgLSAxKSkgPT0gMCk7 CisKKwkJLyoKKwkJICogU21hbGwgdXNpemUgY2FuJ3QgY29tZSBmcm9tIGFuIGFsaWdubWVudCBs YXJnZXIgdGhhbiBhIHBhZ2UuCisJCSAqLworCQlhc3NlcnQoYWxpZ25tZW50IDw9IFBBR0UpOwor CisJCXJldCA9IGFyZW5hX21hbGxvYyh0c2RuLCBhcmVuYSwgdXNpemUsIHN6X3NpemUyaW5kZXgo dXNpemUpLAorCQkgICAgemVybywgdGNhY2hlLCB0cnVlKTsKKwl9IGVsc2UgeworCQlpZiAobGlr ZWx5KGFsaWdubWVudCA8PSBDQUNIRUxJTkUpKSB7CisJCQlyZXQgPSBsYXJnZV9tYWxsb2ModHNk biwgYXJlbmEsIHVzaXplLCB6ZXJvKTsKKwkJfSBlbHNlIHsKKwkJCXJldCA9IGxhcmdlX3BhbGxv Yyh0c2RuLCBhcmVuYSwgdXNpemUsIGFsaWdubWVudCwgemVybyk7CisJCX0KKwl9CisJcmV0dXJu IHJldDsKK30KKwordm9pZAorYXJlbmFfcHJvZl9wcm9tb3RlKHRzZG5fdCAqdHNkbiwgdm9pZCAq cHRyLCBzaXplX3QgdXNpemUpIHsKKwljYXNzZXJ0KGNvbmZpZ19wcm9mKTsKKwlhc3NlcnQocHRy ICE9IE5VTEwpOworCWFzc2VydChpc2FsbG9jKHRzZG4sIHB0cikgPT0gU0NfTEFSR0VfTUlOQ0xB U1MpOworCWFzc2VydCh1c2l6ZSA8PSBTQ19TTUFMTF9NQVhDTEFTUyk7CisKKwlpZiAoY29uZmln X29wdF9zYWZldHlfY2hlY2tzKSB7CisJCXNhZmV0eV9jaGVja19zZXRfcmVkem9uZShwdHIsIHVz aXplLCBTQ19MQVJHRV9NSU5DTEFTUyk7CisJfQorCisJZWRhdGFfdCAqZWRhdGEgPSBlbWFwX2Vk YXRhX2xvb2t1cCh0c2RuLCAmYXJlbmFfZW1hcF9nbG9iYWwsIHB0cik7CisKKwlzemluZF90IHN6 aW5kID0gc3pfc2l6ZTJpbmRleCh1c2l6ZSk7CisJZWRhdGFfc3ppbmRfc2V0KGVkYXRhLCBzemlu ZCk7CisJZW1hcF9yZW1hcCh0c2RuLCAmYXJlbmFfZW1hcF9nbG9iYWwsIGVkYXRhLCBzemluZCwg Lyogc2xhYiAqLyBmYWxzZSk7CisKKwlhc3NlcnQoaXNhbGxvYyh0c2RuLCBwdHIpID09IHVzaXpl KTsKK30KKworc3RhdGljIHNpemVfdAorYXJlbmFfcHJvZl9kZW1vdGUodHNkbl90ICp0c2RuLCBl ZGF0YV90ICplZGF0YSwgY29uc3Qgdm9pZCAqcHRyKSB7CisJY2Fzc2VydChjb25maWdfcHJvZik7 CisJYXNzZXJ0KHB0ciAhPSBOVUxMKTsKKworCWVkYXRhX3N6aW5kX3NldChlZGF0YSwgU0NfTkJJ TlMpOworCWVtYXBfcmVtYXAodHNkbiwgJmFyZW5hX2VtYXBfZ2xvYmFsLCBlZGF0YSwgU0NfTkJJ TlMsIC8qIHNsYWIgKi8gZmFsc2UpOworCisJYXNzZXJ0KGlzYWxsb2ModHNkbiwgcHRyKSA9PSBT Q19MQVJHRV9NSU5DTEFTUyk7CisKKwlyZXR1cm4gU0NfTEFSR0VfTUlOQ0xBU1M7Cit9CisKK3Zv aWQKK2FyZW5hX2RhbGxvY19wcm9tb3RlZCh0c2RuX3QgKnRzZG4sIHZvaWQgKnB0ciwgdGNhY2hl X3QgKnRjYWNoZSwKKyAgICBib29sIHNsb3dfcGF0aCkgeworCWNhc3NlcnQoY29uZmlnX3Byb2Yp OworCWFzc2VydChvcHRfcHJvZik7CisKKwllZGF0YV90ICplZGF0YSA9IGVtYXBfZWRhdGFfbG9v a3VwKHRzZG4sICZhcmVuYV9lbWFwX2dsb2JhbCwgcHRyKTsKKwlzaXplX3QgdXNpemUgPSBlZGF0 YV91c2l6ZV9nZXQoZWRhdGEpOworCXNpemVfdCBidW1wZWRfdXNpemUgPSBhcmVuYV9wcm9mX2Rl bW90ZSh0c2RuLCBlZGF0YSwgcHRyKTsKKwlpZiAoY29uZmlnX29wdF9zYWZldHlfY2hlY2tzICYm IHVzaXplIDwgU0NfTEFSR0VfTUlOQ0xBU1MpIHsKKwkJLyoKKwkJICogQ3VycmVudGx5LCB3ZSBv bmx5IGRvIHJlZHpvbmluZyBmb3Igc21hbGwgc2FtcGxlZAorCQkgKiBhbGxvY2F0aW9ucy4KKwkJ ICovCisJCWFzc2VydChidW1wZWRfdXNpemUgPT0gU0NfTEFSR0VfTUlOQ0xBU1MpOworCQlzYWZl dHlfY2hlY2tfdmVyaWZ5X3JlZHpvbmUocHRyLCB1c2l6ZSwgYnVtcGVkX3VzaXplKTsKKwl9CisJ aWYgKGJ1bXBlZF91c2l6ZSA8PSB0Y2FjaGVfbWF4Y2xhc3MgJiYgdGNhY2hlICE9IE5VTEwpIHsK KwkJdGNhY2hlX2RhbGxvY19sYXJnZSh0c2RuX3RzZCh0c2RuKSwgdGNhY2hlLCBwdHIsCisJCSAg ICBzel9zaXplMmluZGV4KGJ1bXBlZF91c2l6ZSksIHNsb3dfcGF0aCk7CisJfSBlbHNlIHsKKwkJ bGFyZ2VfZGFsbG9jKHRzZG4sIGVkYXRhKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCithcmVuYV9k aXNzb2NpYXRlX2Jpbl9zbGFiKGFyZW5hX3QgKmFyZW5hLCBlZGF0YV90ICpzbGFiLCBiaW5fdCAq YmluKSB7CisJLyogRGlzc29jaWF0ZSBzbGFiIGZyb20gYmluLiAqLworCWlmIChzbGFiID09IGJp bi0+c2xhYmN1cikgeworCQliaW4tPnNsYWJjdXIgPSBOVUxMOworCX0gZWxzZSB7CisJCXN6aW5k X3QgYmluaW5kID0gZWRhdGFfc3ppbmRfZ2V0KHNsYWIpOworCQljb25zdCBiaW5faW5mb190ICpi aW5faW5mbyA9ICZiaW5faW5mb3NbYmluaW5kXTsKKworCQkvKgorCQkgKiBUaGUgZm9sbG93aW5n IGJsb2NrJ3MgY29uZGl0aW9uYWwgaXMgbmVjZXNzYXJ5IGJlY2F1c2UgaWYgdGhlCisJCSAqIHNs YWIgb25seSBjb250YWlucyBvbmUgcmVnaW9uLCB0aGVuIGl0IG5ldmVyIGdldHMgaW5zZXJ0ZWQK KwkJICogaW50byB0aGUgbm9uLWZ1bGwgc2xhYnMgaGVhcC4KKwkJICovCisJCWlmIChiaW5faW5m by0+bnJlZ3MgPT0gMSkgeworCQkJYXJlbmFfYmluX3NsYWJzX2Z1bGxfcmVtb3ZlKGFyZW5hLCBi aW4sIHNsYWIpOworCQl9IGVsc2UgeworCQkJYXJlbmFfYmluX3NsYWJzX25vbmZ1bGxfcmVtb3Zl KGJpbiwgc2xhYik7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkCithcmVuYV9iaW5fbG93ZXJf c2xhYih0c2RuX3QgKnRzZG4sIGFyZW5hX3QgKmFyZW5hLCBlZGF0YV90ICpzbGFiLAorICAgIGJp bl90ICpiaW4pIHsKKwlhc3NlcnQoZWRhdGFfbmZyZWVfZ2V0KHNsYWIpID4gMCk7CisKKwkvKgor CSAqIE1ha2Ugc3VyZSB0aGF0IGlmIGJpbi0+c2xhYmN1ciBpcyBub24tTlVMTCwgaXQgcmVmZXJz IHRvIHRoZQorCSAqIG9sZGVzdC9sb3dlc3Qgbm9uLWZ1bGwgc2xhYi4gIEl0IGlzIG9rYXkgdG8g TlVMTCBzbGFiY3VyIG91dCByYXRoZXIKKwkgKiB0aGFuIHByb2FjdGl2ZWx5IGtlZXBpbmcgaXQg cG9pbnRpbmcgYXQgdGhlIG9sZGVzdC9sb3dlc3Qgbm9uLWZ1bGwKKwkgKiBzbGFiLgorCSAqLwor CWlmIChiaW4tPnNsYWJjdXIgIT0gTlVMTCAmJiBlZGF0YV9zbmFkX2NvbXAoYmluLT5zbGFiY3Vy LCBzbGFiKSA+IDApIHsKKwkJLyogU3dpdGNoIHNsYWJjdXIuICovCisJCWlmIChlZGF0YV9uZnJl ZV9nZXQoYmluLT5zbGFiY3VyKSA+IDApIHsKKwkJCWFyZW5hX2Jpbl9zbGFic19ub25mdWxsX2lu c2VydChiaW4sIGJpbi0+c2xhYmN1cik7CisJCX0gZWxzZSB7CisJCQlhcmVuYV9iaW5fc2xhYnNf ZnVsbF9pbnNlcnQoYXJlbmEsIGJpbiwgYmluLT5zbGFiY3VyKTsKKwkJfQorCQliaW4tPnNsYWJj dXIgPSBzbGFiOworCQlpZiAoY29uZmlnX3N0YXRzKSB7CisJCQliaW4tPnN0YXRzLnJlc2xhYnMr KzsKKwkJfQorCX0gZWxzZSB7CisJCWFyZW5hX2Jpbl9zbGFic19ub25mdWxsX2luc2VydChiaW4s IHNsYWIpOworCX0KK30KKworc3RhdGljIHZvaWQKK2FyZW5hX2RhbGxvY19iaW5fc2xhYl9wcmVw YXJlKHRzZG5fdCAqdHNkbiwgZWRhdGFfdCAqc2xhYiwgYmluX3QgKmJpbikgeworCW1hbGxvY19t dXRleF9hc3NlcnRfb3duZXIodHNkbiwgJmJpbi0+bG9jayk7CisKKwlhc3NlcnQoc2xhYiAhPSBi aW4tPnNsYWJjdXIpOworCWlmIChjb25maWdfc3RhdHMpIHsKKwkJYmluLT5zdGF0cy5jdXJzbGFi cy0tOworCX0KK30KKwordm9pZAorYXJlbmFfZGFsbG9jX2Jpbl9sb2NrZWRfaGFuZGxlX25ld2x5 X2VtcHR5KHRzZG5fdCAqdHNkbiwgYXJlbmFfdCAqYXJlbmEsCisgICAgZWRhdGFfdCAqc2xhYiwg YmluX3QgKmJpbikgeworCWFyZW5hX2Rpc3NvY2lhdGVfYmluX3NsYWIoYXJlbmEsIHNsYWIsIGJp bik7CisJYXJlbmFfZGFsbG9jX2Jpbl9zbGFiX3ByZXBhcmUodHNkbiwgc2xhYiwgYmluKTsKK30K Kwordm9pZAorYXJlbmFfZGFsbG9jX2Jpbl9sb2NrZWRfaGFuZGxlX25ld2x5X25vbmVtcHR5KHRz ZG5fdCAqdHNkbiwgYXJlbmFfdCAqYXJlbmEsCisgICAgZWRhdGFfdCAqc2xhYiwgYmluX3QgKmJp bikgeworCWFyZW5hX2Jpbl9zbGFic19mdWxsX3JlbW92ZShhcmVuYSwgYmluLCBzbGFiKTsKKwlh cmVuYV9iaW5fbG93ZXJfc2xhYih0c2RuLCBhcmVuYSwgc2xhYiwgYmluKTsKK30KKworc3RhdGlj IHZvaWQKK2FyZW5hX2RhbGxvY19iaW4odHNkbl90ICp0c2RuLCBhcmVuYV90ICphcmVuYSwgZWRh dGFfdCAqZWRhdGEsIHZvaWQgKnB0cikgeworCXN6aW5kX3QgYmluaW5kID0gZWRhdGFfc3ppbmRf Z2V0KGVkYXRhKTsKKwl1bnNpZ25lZCBiaW5zaGFyZCA9IGVkYXRhX2JpbnNoYXJkX2dldChlZGF0 YSk7CisJYmluX3QgKmJpbiA9IGFyZW5hX2dldF9iaW4oYXJlbmEsIGJpbmluZCwgYmluc2hhcmQp OworCisJbWFsbG9jX211dGV4X2xvY2sodHNkbiwgJmJpbi0+bG9jayk7CisJYXJlbmFfZGFsbG9j X2Jpbl9sb2NrZWRfaW5mb190IGluZm87CisJYXJlbmFfZGFsbG9jX2Jpbl9sb2NrZWRfYmVnaW4o JmluZm8sIGJpbmluZCk7CisJYm9vbCByZXQgPSBhcmVuYV9kYWxsb2NfYmluX2xvY2tlZF9zdGVw KHRzZG4sIGFyZW5hLCBiaW4sCisJICAgICZpbmZvLCBiaW5pbmQsIGVkYXRhLCBwdHIpOworCWFy ZW5hX2RhbGxvY19iaW5fbG9ja2VkX2ZpbmlzaCh0c2RuLCBhcmVuYSwgYmluLCAmaW5mbyk7CisJ bWFsbG9jX211dGV4X3VubG9jayh0c2RuLCAmYmluLT5sb2NrKTsKKworCWlmIChyZXQpIHsKKwkJ YXJlbmFfc2xhYl9kYWxsb2ModHNkbiwgYXJlbmEsIGVkYXRhKTsKKwl9Cit9CisKK3ZvaWQKK2Fy ZW5hX2RhbGxvY19zbWFsbCh0c2RuX3QgKnRzZG4sIHZvaWQgKnB0cikgeworCWVkYXRhX3QgKmVk YXRhID0gZW1hcF9lZGF0YV9sb29rdXAodHNkbiwgJmFyZW5hX2VtYXBfZ2xvYmFsLCBwdHIpOwor CWFyZW5hX3QgKmFyZW5hID0gYXJlbmFfZ2V0X2Zyb21fZWRhdGEoZWRhdGEpOworCisJYXJlbmFf ZGFsbG9jX2Jpbih0c2RuLCBhcmVuYSwgZWRhdGEsIHB0cik7CisJYXJlbmFfZGVjYXlfdGljayh0 c2RuLCBhcmVuYSk7Cit9CisKK2Jvb2wKK2FyZW5hX3JhbGxvY19ub19tb3ZlKHRzZG5fdCAqdHNk biwgdm9pZCAqcHRyLCBzaXplX3Qgb2xkc2l6ZSwgc2l6ZV90IHNpemUsCisgICAgc2l6ZV90IGV4 dHJhLCBib29sIHplcm8sIHNpemVfdCAqbmV3c2l6ZSkgeworCWJvb2wgcmV0OworCS8qIENhbGxz IHdpdGggbm9uLXplcm8gZXh0cmEgaGFkIHRvIGNsYW1wIGV4dHJhLiAqLworCWFzc2VydChleHRy YSA9PSAwIHx8IHNpemUgKyBleHRyYSA8PSBTQ19MQVJHRV9NQVhDTEFTUyk7CisKKwllZGF0YV90 ICplZGF0YSA9IGVtYXBfZWRhdGFfbG9va3VwKHRzZG4sICZhcmVuYV9lbWFwX2dsb2JhbCwgcHRy KTsKKwlpZiAodW5saWtlbHkoc2l6ZSA+IFNDX0xBUkdFX01BWENMQVNTKSkgeworCQlyZXQgPSB0 cnVlOworCQlnb3RvIGRvbmU7CisJfQorCisJc2l6ZV90IHVzaXplX21pbiA9IHN6X3MydShzaXpl KTsKKwlzaXplX3QgdXNpemVfbWF4ID0gc3pfczJ1KHNpemUgKyBleHRyYSk7CisJaWYgKGxpa2Vs eShvbGRzaXplIDw9IFNDX1NNQUxMX01BWENMQVNTICYmIHVzaXplX21pbgorCSAgICA8PSBTQ19T TUFMTF9NQVhDTEFTUykpIHsKKwkJLyoKKwkJICogQXZvaWQgbW92aW5nIHRoZSBhbGxvY2F0aW9u IGlmIHRoZSBzaXplIGNsYXNzIGNhbiBiZSBsZWZ0IHRoZQorCQkgKiBzYW1lLgorCQkgKi8KKwkJ YXNzZXJ0KGJpbl9pbmZvc1tzel9zaXplMmluZGV4KG9sZHNpemUpXS5yZWdfc2l6ZSA9PQorCQkg ICAgb2xkc2l6ZSk7CisJCWlmICgodXNpemVfbWF4ID4gU0NfU01BTExfTUFYQ0xBU1MKKwkJICAg IHx8IHN6X3NpemUyaW5kZXgodXNpemVfbWF4KSAhPSBzel9zaXplMmluZGV4KG9sZHNpemUpKQor CQkgICAgJiYgKHNpemUgPiBvbGRzaXplIHx8IHVzaXplX21heCA8IG9sZHNpemUpKSB7CisJCQly ZXQgPSB0cnVlOworCQkJZ290byBkb25lOworCQl9CisKKwkJYXJlbmFfdCAqYXJlbmEgPSBhcmVu YV9nZXRfZnJvbV9lZGF0YShlZGF0YSk7CisJCWFyZW5hX2RlY2F5X3RpY2sodHNkbiwgYXJlbmEp OworCQlyZXQgPSBmYWxzZTsKKwl9IGVsc2UgaWYgKG9sZHNpemUgPj0gU0NfTEFSR0VfTUlOQ0xB U1MKKwkgICAgJiYgdXNpemVfbWF4ID49IFNDX0xBUkdFX01JTkNMQVNTKSB7CisJCXJldCA9IGxh cmdlX3JhbGxvY19ub19tb3ZlKHRzZG4sIGVkYXRhLCB1c2l6ZV9taW4sIHVzaXplX21heCwKKwkJ ICAgIHplcm8pOworCX0gZWxzZSB7CisJCXJldCA9IHRydWU7CisJfQorZG9uZToKKwlhc3NlcnQo ZWRhdGEgPT0gZW1hcF9lZGF0YV9sb29rdXAodHNkbiwgJmFyZW5hX2VtYXBfZ2xvYmFsLCBwdHIp KTsKKwkqbmV3c2l6ZSA9IGVkYXRhX3VzaXplX2dldChlZGF0YSk7CisKKwlyZXR1cm4gcmV0Owor fQorCitzdGF0aWMgdm9pZCAqCithcmVuYV9yYWxsb2NfbW92ZV9oZWxwZXIodHNkbl90ICp0c2Ru LCBhcmVuYV90ICphcmVuYSwgc2l6ZV90IHVzaXplLAorICAgIHNpemVfdCBhbGlnbm1lbnQsIGJv b2wgemVybywgdGNhY2hlX3QgKnRjYWNoZSkgeworCWlmIChhbGlnbm1lbnQgPT0gMCkgeworCQly ZXR1cm4gYXJlbmFfbWFsbG9jKHRzZG4sIGFyZW5hLCB1c2l6ZSwgc3pfc2l6ZTJpbmRleCh1c2l6 ZSksCisJCSAgICB6ZXJvLCB0Y2FjaGUsIHRydWUpOworCX0KKwl1c2l6ZSA9IHN6X3NhMnUodXNp emUsIGFsaWdubWVudCk7CisJaWYgKHVubGlrZWx5KHVzaXplID09IDAgfHwgdXNpemUgPiBTQ19M QVJHRV9NQVhDTEFTUykpIHsKKwkJcmV0dXJuIE5VTEw7CisJfQorCXJldHVybiBpcGFsbG9jdCh0 c2RuLCB1c2l6ZSwgYWxpZ25tZW50LCB6ZXJvLCB0Y2FjaGUsIGFyZW5hKTsKK30KKwordm9pZCAq CithcmVuYV9yYWxsb2ModHNkbl90ICp0c2RuLCBhcmVuYV90ICphcmVuYSwgdm9pZCAqcHRyLCBz aXplX3Qgb2xkc2l6ZSwKKyAgICBzaXplX3Qgc2l6ZSwgc2l6ZV90IGFsaWdubWVudCwgYm9vbCB6 ZXJvLCB0Y2FjaGVfdCAqdGNhY2hlLAorICAgIGhvb2tfcmFsbG9jX2FyZ3NfdCAqaG9va19hcmdz KSB7CisJc2l6ZV90IHVzaXplID0gYWxpZ25tZW50ID09IDAgPyBzel9zMnUoc2l6ZSkgOiBzel9z YTJ1KHNpemUsIGFsaWdubWVudCk7CisJaWYgKHVubGlrZWx5KHVzaXplID09IDAgfHwgc2l6ZSA+ IFNDX0xBUkdFX01BWENMQVNTKSkgeworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlpZiAobGlrZWx5 KHVzaXplIDw9IFNDX1NNQUxMX01BWENMQVNTKSkgeworCQkvKiBUcnkgdG8gYXZvaWQgbW92aW5n IHRoZSBhbGxvY2F0aW9uLiAqLworCQlVTlVTRUQgc2l6ZV90IG5ld3NpemU7CisJCWlmICghYXJl bmFfcmFsbG9jX25vX21vdmUodHNkbiwgcHRyLCBvbGRzaXplLCB1c2l6ZSwgMCwgemVybywKKwkJ ICAgICZuZXdzaXplKSkgeworCQkJaG9va19pbnZva2VfZXhwYW5kKGhvb2tfYXJncy0+aXNfcmVh bGxvYworCQkJICAgID8gaG9va19leHBhbmRfcmVhbGxvYyA6IGhvb2tfZXhwYW5kX3JhbGxvY3gs CisJCQkgICAgcHRyLCBvbGRzaXplLCB1c2l6ZSwgKHVpbnRwdHJfdClwdHIsCisJCQkgICAgaG9v a19hcmdzLT5hcmdzKTsKKwkJCXJldHVybiBwdHI7CisJCX0KKwl9CisKKwlpZiAob2xkc2l6ZSA+ PSBTQ19MQVJHRV9NSU5DTEFTUworCSAgICAmJiB1c2l6ZSA+PSBTQ19MQVJHRV9NSU5DTEFTUykg eworCQlyZXR1cm4gbGFyZ2VfcmFsbG9jKHRzZG4sIGFyZW5hLCBwdHIsIHVzaXplLAorCQkgICAg YWxpZ25tZW50LCB6ZXJvLCB0Y2FjaGUsIGhvb2tfYXJncyk7CisJfQorCisJLyoKKwkgKiBzaXpl IGFuZCBvbGRzaXplIGFyZSBkaWZmZXJlbnQgZW5vdWdoIHRoYXQgd2UgbmVlZCB0byBtb3ZlIHRo ZQorCSAqIG9iamVjdC4gIEluIHRoYXQgY2FzZSwgZmFsbCBiYWNrIHRvIGFsbG9jYXRpbmcgbmV3 IHNwYWNlIGFuZCBjb3B5aW5nLgorCSAqLworCXZvaWQgKnJldCA9IGFyZW5hX3JhbGxvY19tb3Zl X2hlbHBlcih0c2RuLCBhcmVuYSwgdXNpemUsIGFsaWdubWVudCwKKwkgICAgemVybywgdGNhY2hl KTsKKwlpZiAocmV0ID09IE5VTEwpIHsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJaG9va19pbnZv a2VfYWxsb2MoaG9va19hcmdzLT5pc19yZWFsbG9jCisJICAgID8gaG9va19hbGxvY19yZWFsbG9j IDogaG9va19hbGxvY19yYWxsb2N4LCByZXQsICh1aW50cHRyX3QpcmV0LAorCSAgICBob29rX2Fy Z3MtPmFyZ3MpOworCWhvb2tfaW52b2tlX2RhbGxvYyhob29rX2FyZ3MtPmlzX3JlYWxsb2MKKwkg ICAgPyBob29rX2RhbGxvY19yZWFsbG9jIDogaG9va19kYWxsb2NfcmFsbG9jeCwgcHRyLCBob29r X2FyZ3MtPmFyZ3MpOworCisJLyoKKwkgKiBKdW5rL3plcm8tZmlsbGluZyB3ZXJlIGFscmVhZHkg ZG9uZSBieQorCSAqIGlwYWxsb2MoKS9hcmVuYV9tYWxsb2MoKS4KKwkgKi8KKwlzaXplX3QgY29w eXNpemUgPSAodXNpemUgPCBvbGRzaXplKSA/IHVzaXplIDogb2xkc2l6ZTsKKwltZW1jcHkocmV0 LCBwdHIsIGNvcHlzaXplKTsKKwlpc2RhbGxvY3QodHNkbiwgcHRyLCBvbGRzaXplLCB0Y2FjaGUs IE5VTEwsIHRydWUpOworCXJldHVybiByZXQ7Cit9CisKK2Vob29rc190ICoKK2FyZW5hX2dldF9l aG9va3MoYXJlbmFfdCAqYXJlbmEpIHsKKwlyZXR1cm4gYmFzZV9laG9va3NfZ2V0KGFyZW5hLT5i YXNlKTsKK30KKworZXh0ZW50X2hvb2tzX3QgKgorYXJlbmFfc2V0X2V4dGVudF9ob29rcyh0c2Rf dCAqdHNkLCBhcmVuYV90ICphcmVuYSwKKyAgICBleHRlbnRfaG9va3NfdCAqZXh0ZW50X2hvb2tz KSB7CisJYmFja2dyb3VuZF90aHJlYWRfaW5mb190ICppbmZvOworCWlmIChoYXZlX2JhY2tncm91 bmRfdGhyZWFkKSB7CisJCWluZm8gPSBhcmVuYV9iYWNrZ3JvdW5kX3RocmVhZF9pbmZvX2dldChh cmVuYSk7CisJCW1hbGxvY19tdXRleF9sb2NrKHRzZF90c2RuKHRzZCksICZpbmZvLT5tdHgpOwor CX0KKwkvKiBObyB1c2luZyB0aGUgSFBBIG5vdyB0aGF0IHdlIGhhdmUgdGhlIGN1c3RvbSBob29r cy4gKi8KKwlwYV9zaGFyZF9kaXNhYmxlX2hwYSh0c2RfdHNkbih0c2QpLCAmYXJlbmEtPnBhX3No YXJkKTsKKwlleHRlbnRfaG9va3NfdCAqcmV0ID0gYmFzZV9leHRlbnRfaG9va3Nfc2V0KGFyZW5h LT5iYXNlLCBleHRlbnRfaG9va3MpOworCWlmIChoYXZlX2JhY2tncm91bmRfdGhyZWFkKSB7CisJ CW1hbGxvY19tdXRleF91bmxvY2sodHNkX3RzZG4odHNkKSwgJmluZm8tPm10eCk7CisJfQorCisJ cmV0dXJuIHJldDsKK30KKworZHNzX3ByZWNfdAorYXJlbmFfZHNzX3ByZWNfZ2V0KGFyZW5hX3Qg KmFyZW5hKSB7CisJcmV0dXJuIChkc3NfcHJlY190KWF0b21pY19sb2FkX3UoJmFyZW5hLT5kc3Nf cHJlYywgQVRPTUlDX0FDUVVJUkUpOworfQorCitib29sCithcmVuYV9kc3NfcHJlY19zZXQoYXJl bmFfdCAqYXJlbmEsIGRzc19wcmVjX3QgZHNzX3ByZWMpIHsKKwlpZiAoIWhhdmVfZHNzKSB7CisJ CXJldHVybiAoZHNzX3ByZWMgIT0gZHNzX3ByZWNfZGlzYWJsZWQpOworCX0KKwlhdG9taWNfc3Rv cmVfdSgmYXJlbmEtPmRzc19wcmVjLCAodW5zaWduZWQpZHNzX3ByZWMsIEFUT01JQ19SRUxFQVNF KTsKKwlyZXR1cm4gZmFsc2U7Cit9CisKK3NzaXplX3QKK2FyZW5hX2RpcnR5X2RlY2F5X21zX2Rl ZmF1bHRfZ2V0KHZvaWQpIHsKKwlyZXR1cm4gYXRvbWljX2xvYWRfemQoJmRpcnR5X2RlY2F5X21z X2RlZmF1bHQsIEFUT01JQ19SRUxBWEVEKTsKK30KKworYm9vbAorYXJlbmFfZGlydHlfZGVjYXlf bXNfZGVmYXVsdF9zZXQoc3NpemVfdCBkZWNheV9tcykgeworCWlmICghZGVjYXlfbXNfdmFsaWQo ZGVjYXlfbXMpKSB7CisJCXJldHVybiB0cnVlOworCX0KKwlhdG9taWNfc3RvcmVfemQoJmRpcnR5 X2RlY2F5X21zX2RlZmF1bHQsIGRlY2F5X21zLCBBVE9NSUNfUkVMQVhFRCk7CisJcmV0dXJuIGZh bHNlOworfQorCitzc2l6ZV90CithcmVuYV9tdXp6eV9kZWNheV9tc19kZWZhdWx0X2dldCh2b2lk KSB7CisJcmV0dXJuIGF0b21pY19sb2FkX3pkKCZtdXp6eV9kZWNheV9tc19kZWZhdWx0LCBBVE9N SUNfUkVMQVhFRCk7Cit9CisKK2Jvb2wKK2FyZW5hX211enp5X2RlY2F5X21zX2RlZmF1bHRfc2V0 KHNzaXplX3QgZGVjYXlfbXMpIHsKKwlpZiAoIWRlY2F5X21zX3ZhbGlkKGRlY2F5X21zKSkgewor CQlyZXR1cm4gdHJ1ZTsKKwl9CisJYXRvbWljX3N0b3JlX3pkKCZtdXp6eV9kZWNheV9tc19kZWZh dWx0LCBkZWNheV9tcywgQVRPTUlDX1JFTEFYRUQpOworCXJldHVybiBmYWxzZTsKK30KKworYm9v bAorYXJlbmFfcmV0YWluX2dyb3dfbGltaXRfZ2V0X3NldCh0c2RfdCAqdHNkLCBhcmVuYV90ICph cmVuYSwgc2l6ZV90ICpvbGRfbGltaXQsCisgICAgc2l6ZV90ICpuZXdfbGltaXQpIHsKKwlhc3Nl cnQob3B0X3JldGFpbik7CisJcmV0dXJuIHBhY19yZXRhaW5fZ3Jvd19saW1pdF9nZXRfc2V0KHRz ZF90c2RuKHRzZCksCisJICAgICZhcmVuYS0+cGFfc2hhcmQucGFjLCBvbGRfbGltaXQsIG5ld19s aW1pdCk7Cit9CisKK3Vuc2lnbmVkCithcmVuYV9udGhyZWFkc19nZXQoYXJlbmFfdCAqYXJlbmEs IGJvb2wgaW50ZXJuYWwpIHsKKwlyZXR1cm4gYXRvbWljX2xvYWRfdSgmYXJlbmEtPm50aHJlYWRz W2ludGVybmFsXSwgQVRPTUlDX1JFTEFYRUQpOworfQorCit2b2lkCithcmVuYV9udGhyZWFkc19p bmMoYXJlbmFfdCAqYXJlbmEsIGJvb2wgaW50ZXJuYWwpIHsKKwlhdG9taWNfZmV0Y2hfYWRkX3Uo JmFyZW5hLT5udGhyZWFkc1tpbnRlcm5hbF0sIDEsIEFUT01JQ19SRUxBWEVEKTsKK30KKwordm9p ZAorYXJlbmFfbnRocmVhZHNfZGVjKGFyZW5hX3QgKmFyZW5hLCBib29sIGludGVybmFsKSB7CisJ YXRvbWljX2ZldGNoX3N1Yl91KCZhcmVuYS0+bnRocmVhZHNbaW50ZXJuYWxdLCAxLCBBVE9NSUNf UkVMQVhFRCk7Cit9CisKK2FyZW5hX3QgKgorYXJlbmFfbmV3KHRzZG5fdCAqdHNkbiwgdW5zaWdu ZWQgaW5kLCBjb25zdCBhcmVuYV9jb25maWdfdCAqY29uZmlnKSB7CisJYXJlbmFfdCAqYXJlbmE7 CisJYmFzZV90ICpiYXNlOworCXVuc2lnbmVkIGk7CisKKwlpZiAoaW5kID09IDApIHsKKwkJYmFz ZSA9IGIwZ2V0KCk7CisJfSBlbHNlIHsKKwkJYmFzZSA9IGJhc2VfbmV3KHRzZG4sIGluZCwgY29u ZmlnLT5leHRlbnRfaG9va3MsCisJCSAgICBjb25maWctPm1ldGFkYXRhX3VzZV9ob29rcyk7CisJ CWlmIChiYXNlID09IE5VTEwpIHsKKwkJCXJldHVybiBOVUxMOworCQl9CisJfQorCisJc2l6ZV90 IGFyZW5hX3NpemUgPSBzaXplb2YoYXJlbmFfdCkgKyBzaXplb2YoYmluX3QpICogbmJpbnNfdG90 YWw7CisJYXJlbmEgPSAoYXJlbmFfdCAqKWJhc2VfYWxsb2ModHNkbiwgYmFzZSwgYXJlbmFfc2l6 ZSwgQ0FDSEVMSU5FKTsKKwlpZiAoYXJlbmEgPT0gTlVMTCkgeworCQlnb3RvIGxhYmVsX2Vycm9y OworCX0KKworCWF0b21pY19zdG9yZV91KCZhcmVuYS0+bnRocmVhZHNbMF0sIDAsIEFUT01JQ19S RUxBWEVEKTsKKwlhdG9taWNfc3RvcmVfdSgmYXJlbmEtPm50aHJlYWRzWzFdLCAwLCBBVE9NSUNf UkVMQVhFRCk7CisJYXJlbmEtPmxhc3RfdGhkID0gTlVMTDsKKworCWlmIChjb25maWdfc3RhdHMp IHsKKwkJaWYgKGFyZW5hX3N0YXRzX2luaXQodHNkbiwgJmFyZW5hLT5zdGF0cykpIHsKKwkJCWdv dG8gbGFiZWxfZXJyb3I7CisJCX0KKworCQlxbF9uZXcoJmFyZW5hLT50Y2FjaGVfcWwpOworCQlx bF9uZXcoJmFyZW5hLT5jYWNoZV9iaW5fYXJyYXlfZGVzY3JpcHRvcl9xbCk7CisJCWlmIChtYWxs b2NfbXV0ZXhfaW5pdCgmYXJlbmEtPnRjYWNoZV9xbF9tdHgsICJ0Y2FjaGVfcWwiLAorCQkgICAg V0lUTkVTU19SQU5LX1RDQUNIRV9RTCwgbWFsbG9jX211dGV4X3JhbmtfZXhjbHVzaXZlKSkgewor CQkJZ290byBsYWJlbF9lcnJvcjsKKwkJfQorCX0KKworCWF0b21pY19zdG9yZV91KCZhcmVuYS0+ ZHNzX3ByZWMsICh1bnNpZ25lZClleHRlbnRfZHNzX3ByZWNfZ2V0KCksCisJICAgIEFUT01JQ19S RUxBWEVEKTsKKworCWVkYXRhX2xpc3RfYWN0aXZlX2luaXQoJmFyZW5hLT5sYXJnZSk7CisJaWYg KG1hbGxvY19tdXRleF9pbml0KCZhcmVuYS0+bGFyZ2VfbXR4LCAiYXJlbmFfbGFyZ2UiLAorCSAg ICBXSVRORVNTX1JBTktfQVJFTkFfTEFSR0UsIG1hbGxvY19tdXRleF9yYW5rX2V4Y2x1c2l2ZSkp IHsKKwkJZ290byBsYWJlbF9lcnJvcjsKKwl9CisKKwluc3RpbWVfdCBjdXJfdGltZTsKKwluc3Rp bWVfaW5pdF91cGRhdGUoJmN1cl90aW1lKTsKKwlpZiAocGFfc2hhcmRfaW5pdCh0c2RuLCAmYXJl bmEtPnBhX3NoYXJkLCAmYXJlbmFfcGFfY2VudHJhbF9nbG9iYWwsCisJICAgICZhcmVuYV9lbWFw X2dsb2JhbCwgYmFzZSwgaW5kLCAmYXJlbmEtPnN0YXRzLnBhX3NoYXJkX3N0YXRzLAorCSAgICBM T0NLRURJTlRfTVRYKGFyZW5hLT5zdGF0cy5tdHgpLCAmY3VyX3RpbWUsIG92ZXJzaXplX3RocmVz aG9sZCwKKwkgICAgYXJlbmFfZGlydHlfZGVjYXlfbXNfZGVmYXVsdF9nZXQoKSwKKwkgICAgYXJl bmFfbXV6enlfZGVjYXlfbXNfZGVmYXVsdF9nZXQoKSkpIHsKKwkJZ290byBsYWJlbF9lcnJvcjsK Kwl9CisKKwkvKiBJbml0aWFsaXplIGJpbnMuICovCisJYXRvbWljX3N0b3JlX3UoJmFyZW5hLT5i aW5zaGFyZF9uZXh0LCAwLCBBVE9NSUNfUkVMRUFTRSk7CisJZm9yIChpID0gMDsgaSA8IG5iaW5z X3RvdGFsOyBpKyspIHsKKwkJYm9vbCBlcnIgPSBiaW5faW5pdCgmYXJlbmEtPmJpbnNbaV0pOwor CQlpZiAoZXJyKSB7CisJCQlnb3RvIGxhYmVsX2Vycm9yOworCQl9CisJfQorCisJYXJlbmEtPmJh c2UgPSBiYXNlOworCS8qIFNldCBhcmVuYSBiZWZvcmUgY3JlYXRpbmcgYmFja2dyb3VuZCB0aHJl YWRzLiAqLworCWFyZW5hX3NldChpbmQsIGFyZW5hKTsKKwlhcmVuYS0+aW5kID0gaW5kOworCisJ bnN0aW1lX2luaXRfdXBkYXRlKCZhcmVuYS0+Y3JlYXRlX3RpbWUpOworCisJLyoKKwkgKiBXZSB0 dXJuIG9uIHRoZSBIUEEgaWYgc2V0IHRvLiAgVGhlcmUgYXJlIHR3byBleGNlcHRpb25zOgorCSAq IC0gQ3VzdG9tIGV4dGVudCBob29rcyAod2Ugc2hvdWxkIG9ubHkgcmV0dXJuIG1lbW9yeSBhbGxv Y2F0ZWQgZnJvbQorCSAqICAgdGhlbSBpbiB0aGF0IGNhc2UpLgorCSAqIC0gQXJlbmEgMCBpbml0 aWFsaXphdGlvbi4gIEluIHRoaXMgY2FzZSwgd2UncmUgbWlkLWJvb3RzdHJhcHBpbmcsIGFuZAor CSAqICAgc28gYXJlbmFfaHBhX2dsb2JhbCBpcyBub3QgeWV0IGluaXRpYWxpemVkLgorCSAqLwor CWlmIChvcHRfaHBhICYmIGVob29rc19hcmVfZGVmYXVsdChiYXNlX2Vob29rc19nZXQoYmFzZSkp ICYmIGluZCAhPSAwKSB7CisJCWhwYV9zaGFyZF9vcHRzX3QgaHBhX3NoYXJkX29wdHMgPSBvcHRf aHBhX29wdHM7CisJCWhwYV9zaGFyZF9vcHRzLmRlZmVycmFsX2FsbG93ZWQgPSBiYWNrZ3JvdW5k X3RocmVhZF9lbmFibGVkKCk7CisJCWlmIChwYV9zaGFyZF9lbmFibGVfaHBhKHRzZG4sICZhcmVu YS0+cGFfc2hhcmQsCisJCSAgICAmaHBhX3NoYXJkX29wdHMsICZvcHRfaHBhX3NlY19vcHRzKSkg eworCQkJZ290byBsYWJlbF9lcnJvcjsKKwkJfQorCX0KKworCS8qIFdlIGRvbid0IHN1cHBvcnQg cmVlbnRyYW5jeSBmb3IgYXJlbmEgMCBib290c3RyYXBwaW5nLiAqLworCWlmIChpbmQgIT0gMCkg eworCQkvKgorCQkgKiBJZiB3ZSdyZSBoZXJlLCB0aGVuIGFyZW5hIDAgYWxyZWFkeSBleGlzdHMs IHNvIGJvb3RzdHJhcHBpbmcKKwkJICogaXMgZG9uZSBlbm91Z2ggdGhhdCB3ZSBzaG91bGQgaGF2 ZSB0c2QuCisJCSAqLworCQlhc3NlcnQoIXRzZG5fbnVsbCh0c2RuKSk7CisJCXByZV9yZWVudHJh bmN5KHRzZG5fdHNkKHRzZG4pLCBhcmVuYSk7CisJCWlmICh0ZXN0X2hvb2tzX2FyZW5hX25ld19o b29rKSB7CisJCQl0ZXN0X2hvb2tzX2FyZW5hX25ld19ob29rKCk7CisJCX0KKwkJcG9zdF9yZWVu dHJhbmN5KHRzZG5fdHNkKHRzZG4pKTsKKwl9CisKKwlyZXR1cm4gYXJlbmE7CitsYWJlbF9lcnJv cjoKKwlpZiAoaW5kICE9IDApIHsKKwkJYmFzZV9kZWxldGUodHNkbiwgYmFzZSk7CisJfQorCXJl dHVybiBOVUxMOworfQorCithcmVuYV90ICoKK2FyZW5hX2Nob29zZV9odWdlKHRzZF90ICp0c2Qp IHsKKwkvKiBodWdlX2FyZW5hX2luZCBjYW4gYmUgMCBkdXJpbmcgaW5pdCAod2lsbCB1c2UgYTAp LiAqLworCWlmIChodWdlX2FyZW5hX2luZCA9PSAwKSB7CisJCWFzc2VydCghbWFsbG9jX2luaXRp YWxpemVkKCkpOworCX0KKworCWFyZW5hX3QgKmh1Z2VfYXJlbmEgPSBhcmVuYV9nZXQodHNkX3Rz ZG4odHNkKSwgaHVnZV9hcmVuYV9pbmQsIGZhbHNlKTsKKwlpZiAoaHVnZV9hcmVuYSA9PSBOVUxM KSB7CisJCS8qIENyZWF0ZSB0aGUgaHVnZSBhcmVuYSBvbiBkZW1hbmQuICovCisJCWFzc2VydCho dWdlX2FyZW5hX2luZCAhPSAwKTsKKwkJaHVnZV9hcmVuYSA9IGFyZW5hX2dldCh0c2RfdHNkbih0 c2QpLCBodWdlX2FyZW5hX2luZCwgdHJ1ZSk7CisJCWlmIChodWdlX2FyZW5hID09IE5VTEwpIHsK KwkJCXJldHVybiBOVUxMOworCQl9CisJCS8qCisJCSAqIFB1cmdlIGVhZ2VybHkgZm9yIGh1Z2Ug YWxsb2NhdGlvbnMsIGJlY2F1c2U6IDEpIG51bWJlciBvZgorCQkgKiBodWdlIGFsbG9jYXRpb25z IGlzIHVzdWFsbHkgc21hbGwsIHdoaWNoIG1lYW5zIHRpY2tlciBiYXNlZAorCQkgKiBkZWNheSBp cyBub3QgcmVsaWFibGU7IGFuZCAyKSBsZXNzIGltbWVkaWF0ZSByZXVzZSBpcworCQkgKiBleHBl Y3RlZCBmb3IgaHVnZSBhbGxvY2F0aW9ucy4KKwkJICovCisJCWlmIChhcmVuYV9kaXJ0eV9kZWNh eV9tc19kZWZhdWx0X2dldCgpID4gMCkgeworCQkJYXJlbmFfZGVjYXlfbXNfc2V0KHRzZF90c2Ru KHRzZCksIGh1Z2VfYXJlbmEsCisJCQkgICAgZXh0ZW50X3N0YXRlX2RpcnR5LCAwKTsKKwkJfQor CQlpZiAoYXJlbmFfbXV6enlfZGVjYXlfbXNfZGVmYXVsdF9nZXQoKSA+IDApIHsKKwkJCWFyZW5h X2RlY2F5X21zX3NldCh0c2RfdHNkbih0c2QpLCBodWdlX2FyZW5hLAorCQkJICAgIGV4dGVudF9z dGF0ZV9tdXp6eSwgMCk7CisJCX0KKwl9CisKKwlyZXR1cm4gaHVnZV9hcmVuYTsKK30KKworYm9v bAorYXJlbmFfaW5pdF9odWdlKHZvaWQpIHsKKwlib29sIGh1Z2VfZW5hYmxlZDsKKworCS8qIFRo ZSB0aHJlc2hvbGQgc2hvdWxkIGJlIGxhcmdlIHNpemUgY2xhc3MuICovCisJaWYgKG9wdF9vdmVy c2l6ZV90aHJlc2hvbGQgPiBTQ19MQVJHRV9NQVhDTEFTUyB8fAorCSAgICBvcHRfb3ZlcnNpemVf dGhyZXNob2xkIDwgU0NfTEFSR0VfTUlOQ0xBU1MpIHsKKwkJb3B0X292ZXJzaXplX3RocmVzaG9s ZCA9IDA7CisJCW92ZXJzaXplX3RocmVzaG9sZCA9IFNDX0xBUkdFX01BWENMQVNTICsgUEFHRTsK KwkJaHVnZV9lbmFibGVkID0gZmFsc2U7CisJfSBlbHNlIHsKKwkJLyogUmVzZXJ2ZSB0aGUgaW5k ZXggZm9yIHRoZSBodWdlIGFyZW5hLiAqLworCQlodWdlX2FyZW5hX2luZCA9IG5hcmVuYXNfdG90 YWxfZ2V0KCk7CisJCW92ZXJzaXplX3RocmVzaG9sZCA9IG9wdF9vdmVyc2l6ZV90aHJlc2hvbGQ7 CisJCWh1Z2VfZW5hYmxlZCA9IHRydWU7CisJfQorCisJcmV0dXJuIGh1Z2VfZW5hYmxlZDsKK30K KworYm9vbAorYXJlbmFfaXNfaHVnZSh1bnNpZ25lZCBhcmVuYV9pbmQpIHsKKwlpZiAoaHVnZV9h cmVuYV9pbmQgPT0gMCkgeworCQlyZXR1cm4gZmFsc2U7CisJfQorCXJldHVybiAoYXJlbmFfaW5k ID09IGh1Z2VfYXJlbmFfaW5kKTsKK30KKworYm9vbAorYXJlbmFfYm9vdChzY19kYXRhX3QgKnNj X2RhdGEsIGJhc2VfdCAqYmFzZSwgYm9vbCBocGEpIHsKKwlhcmVuYV9kaXJ0eV9kZWNheV9tc19k ZWZhdWx0X3NldChvcHRfZGlydHlfZGVjYXlfbXMpOworCWFyZW5hX211enp5X2RlY2F5X21zX2Rl ZmF1bHRfc2V0KG9wdF9tdXp6eV9kZWNheV9tcyk7CisJZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8 IFNDX05CSU5TOyBpKyspIHsKKwkJc2NfdCAqc2MgPSAmc2NfZGF0YS0+c2NbaV07CisJCWRpdl9p bml0KCZhcmVuYV9iaW5pbmRfZGl2X2luZm9baV0sCisJCSAgICAoMVUgPDwgc2MtPmxnX2Jhc2Up ICsgKHNjLT5uZGVsdGEgPDwgc2MtPmxnX2RlbHRhKSk7CisJfQorCisJdWludDMyX3QgY3VyX29m ZnNldCA9ICh1aW50MzJfdClvZmZzZXRvZihhcmVuYV90LCBiaW5zKTsKKwlmb3IgKHN6aW5kX3Qg aSA9IDA7IGkgPCBTQ19OQklOUzsgaSsrKSB7CisJCWFyZW5hX2Jpbl9vZmZzZXRzW2ldID0gY3Vy X29mZnNldDsKKwkJbmJpbnNfdG90YWwgKz0gYmluX2luZm9zW2ldLm5fc2hhcmRzOworCQljdXJf b2Zmc2V0ICs9ICh1aW50MzJfdCkoYmluX2luZm9zW2ldLm5fc2hhcmRzICogc2l6ZW9mKGJpbl90 KSk7CisJfQorCXJldHVybiBwYV9jZW50cmFsX2luaXQoJmFyZW5hX3BhX2NlbnRyYWxfZ2xvYmFs LCBiYXNlLCBocGEsCisJICAgICZocGFfaG9va3NfZGVmYXVsdCk7Cit9CisKK3ZvaWQKK2FyZW5h X3ByZWZvcmswKHRzZG5fdCAqdHNkbiwgYXJlbmFfdCAqYXJlbmEpIHsKKwlwYV9zaGFyZF9wcmVm b3JrMCh0c2RuLCAmYXJlbmEtPnBhX3NoYXJkKTsKK30KKwordm9pZAorYXJlbmFfcHJlZm9yazEo dHNkbl90ICp0c2RuLCBhcmVuYV90ICphcmVuYSkgeworCWlmIChjb25maWdfc3RhdHMpIHsKKwkJ bWFsbG9jX211dGV4X3ByZWZvcmsodHNkbiwgJmFyZW5hLT50Y2FjaGVfcWxfbXR4KTsKKwl9Cit9 CisKK3ZvaWQKK2FyZW5hX3ByZWZvcmsyKHRzZG5fdCAqdHNkbiwgYXJlbmFfdCAqYXJlbmEpIHsK KwlwYV9zaGFyZF9wcmVmb3JrMih0c2RuLCAmYXJlbmEtPnBhX3NoYXJkKTsKK30KKwordm9pZAor YXJlbmFfcHJlZm9yazModHNkbl90ICp0c2RuLCBhcmVuYV90ICphcmVuYSkgeworCXBhX3NoYXJk X3ByZWZvcmszKHRzZG4sICZhcmVuYS0+cGFfc2hhcmQpOworfQorCit2b2lkCithcmVuYV9wcmVm b3JrNCh0c2RuX3QgKnRzZG4sIGFyZW5hX3QgKmFyZW5hKSB7CisJcGFfc2hhcmRfcHJlZm9yazQo dHNkbiwgJmFyZW5hLT5wYV9zaGFyZCk7Cit9CisKK3ZvaWQKK2FyZW5hX3ByZWZvcms1KHRzZG5f dCAqdHNkbiwgYXJlbmFfdCAqYXJlbmEpIHsKKwlwYV9zaGFyZF9wcmVmb3JrNSh0c2RuLCAmYXJl bmEtPnBhX3NoYXJkKTsKK30KKwordm9pZAorYXJlbmFfcHJlZm9yazYodHNkbl90ICp0c2RuLCBh cmVuYV90ICphcmVuYSkgeworCWJhc2VfcHJlZm9yayh0c2RuLCBhcmVuYS0+YmFzZSk7Cit9CisK K3ZvaWQKK2FyZW5hX3ByZWZvcms3KHRzZG5fdCAqdHNkbiwgYXJlbmFfdCAqYXJlbmEpIHsKKwlt YWxsb2NfbXV0ZXhfcHJlZm9yayh0c2RuLCAmYXJlbmEtPmxhcmdlX210eCk7Cit9CisKK3ZvaWQK K2FyZW5hX3ByZWZvcms4KHRzZG5fdCAqdHNkbiwgYXJlbmFfdCAqYXJlbmEpIHsKKwlmb3IgKHVu c2lnbmVkIGkgPSAwOyBpIDwgbmJpbnNfdG90YWw7IGkrKykgeworCQliaW5fcHJlZm9yayh0c2Ru LCAmYXJlbmEtPmJpbnNbaV0pOworCX0KK30KKwordm9pZAorYXJlbmFfcG9zdGZvcmtfcGFyZW50 KHRzZG5fdCAqdHNkbiwgYXJlbmFfdCAqYXJlbmEpIHsKKwlmb3IgKHVuc2lnbmVkIGkgPSAwOyBp IDwgbmJpbnNfdG90YWw7IGkrKykgeworCQliaW5fcG9zdGZvcmtfcGFyZW50KHRzZG4sICZhcmVu YS0+Ymluc1tpXSk7CisJfQorCisJbWFsbG9jX211dGV4X3Bvc3Rmb3JrX3BhcmVudCh0c2RuLCAm YXJlbmEtPmxhcmdlX210eCk7CisJYmFzZV9wb3N0Zm9ya19wYXJlbnQodHNkbiwgYXJlbmEtPmJh c2UpOworCXBhX3NoYXJkX3Bvc3Rmb3JrX3BhcmVudCh0c2RuLCAmYXJlbmEtPnBhX3NoYXJkKTsK KwlpZiAoY29uZmlnX3N0YXRzKSB7CisJCW1hbGxvY19tdXRleF9wb3N0Zm9ya19wYXJlbnQodHNk biwgJmFyZW5hLT50Y2FjaGVfcWxfbXR4KTsKKwl9Cit9CisKK3ZvaWQKK2FyZW5hX3Bvc3Rmb3Jr X2NoaWxkKHRzZG5fdCAqdHNkbiwgYXJlbmFfdCAqYXJlbmEpIHsKKwlhdG9taWNfc3RvcmVfdSgm YXJlbmEtPm50aHJlYWRzWzBdLCAwLCBBVE9NSUNfUkVMQVhFRCk7CisJYXRvbWljX3N0b3JlX3Uo JmFyZW5hLT5udGhyZWFkc1sxXSwgMCwgQVRPTUlDX1JFTEFYRUQpOworCWlmICh0c2RfYXJlbmFf Z2V0KHRzZG5fdHNkKHRzZG4pKSA9PSBhcmVuYSkgeworCQlhcmVuYV9udGhyZWFkc19pbmMoYXJl bmEsIGZhbHNlKTsKKwl9CisJaWYgKHRzZF9pYXJlbmFfZ2V0KHRzZG5fdHNkKHRzZG4pKSA9PSBh cmVuYSkgeworCQlhcmVuYV9udGhyZWFkc19pbmMoYXJlbmEsIHRydWUpOworCX0KKwlpZiAoY29u ZmlnX3N0YXRzKSB7CisJCXFsX25ldygmYXJlbmEtPnRjYWNoZV9xbCk7CisJCXFsX25ldygmYXJl bmEtPmNhY2hlX2Jpbl9hcnJheV9kZXNjcmlwdG9yX3FsKTsKKwkJdGNhY2hlX3Nsb3dfdCAqdGNh Y2hlX3Nsb3cgPSB0Y2FjaGVfc2xvd19nZXQodHNkbl90c2QodHNkbikpOworCQlpZiAodGNhY2hl X3Nsb3cgIT0gTlVMTCAmJiB0Y2FjaGVfc2xvdy0+YXJlbmEgPT0gYXJlbmEpIHsKKwkJCXRjYWNo ZV90ICp0Y2FjaGUgPSB0Y2FjaGVfc2xvdy0+dGNhY2hlOworCQkJcWxfZWxtX25ldyh0Y2FjaGVf c2xvdywgbGluayk7CisJCQlxbF90YWlsX2luc2VydCgmYXJlbmEtPnRjYWNoZV9xbCwgdGNhY2hl X3Nsb3csIGxpbmspOworCQkJY2FjaGVfYmluX2FycmF5X2Rlc2NyaXB0b3JfaW5pdCgKKwkJCSAg ICAmdGNhY2hlX3Nsb3ctPmNhY2hlX2Jpbl9hcnJheV9kZXNjcmlwdG9yLAorCQkJICAgIHRjYWNo ZS0+Ymlucyk7CisJCQlxbF90YWlsX2luc2VydCgmYXJlbmEtPmNhY2hlX2Jpbl9hcnJheV9kZXNj cmlwdG9yX3FsLAorCQkJICAgICZ0Y2FjaGVfc2xvdy0+Y2FjaGVfYmluX2FycmF5X2Rlc2NyaXB0 b3IsIGxpbmspOworCQl9CisJfQorCisJZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG5iaW5zX3Rv dGFsOyBpKyspIHsKKwkJYmluX3Bvc3Rmb3JrX2NoaWxkKHRzZG4sICZhcmVuYS0+Ymluc1tpXSk7 CisJfQorCisJbWFsbG9jX211dGV4X3Bvc3Rmb3JrX2NoaWxkKHRzZG4sICZhcmVuYS0+bGFyZ2Vf bXR4KTsKKwliYXNlX3Bvc3Rmb3JrX2NoaWxkKHRzZG4sIGFyZW5hLT5iYXNlKTsKKwlwYV9zaGFy ZF9wb3N0Zm9ya19jaGlsZCh0c2RuLCAmYXJlbmEtPnBhX3NoYXJkKTsKKwlpZiAoY29uZmlnX3N0 YXRzKSB7CisJCW1hbGxvY19tdXRleF9wb3N0Zm9ya19jaGlsZCh0c2RuLCAmYXJlbmEtPnRjYWNo ZV9xbF9tdHgpOworCX0KK30KCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9q ZW1hbGxvYy01LjMuMC9zcmMvYmFja2dyb3VuZF90aHJlYWQuYyBiLzM4OS1kcy1iYXNlLTMuMy4w LWJ1aWxkL2plbWFsbG9jLTUuMy4wL3NyYy9iYWNrZ3JvdW5kX3RocmVhZC5jCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiYjhkMjYKLS0tIC9kZXYvbnVsbAorKysgYi8zODkt ZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9zcmMvYmFja2dyb3VuZF90aHJlYWQu YwpAQCAtMCwwICsxLDgyMCBAQAorI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2plbWFsbG9j X3ByZWFtYmxlLmgiCisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvamVtYWxsb2NfaW50ZXJu YWxfaW5jbHVkZXMuaCIKKworI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2Fzc2VydC5oIgor CitKRU1BTExPQ19ESUFHTk9TVElDX0RJU0FCTEVfU1BVUklPVVMKKworLyoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKi8KKy8qIERhdGEuICovCisKKy8qIFRoaXMgb3B0aW9uIHNob3VsZCBiZSBvcHQtaW4g b25seS4gKi8KKyNkZWZpbmUgQkFDS0dST1VORF9USFJFQURfREVGQVVMVCBmYWxzZQorLyogUmVh ZC1vbmx5IGFmdGVyIGluaXRpYWxpemF0aW9uLiAqLworYm9vbCBvcHRfYmFja2dyb3VuZF90aHJl YWQgPSBCQUNLR1JPVU5EX1RIUkVBRF9ERUZBVUxUOworc2l6ZV90IG9wdF9tYXhfYmFja2dyb3Vu ZF90aHJlYWRzID0gTUFYX0JBQ0tHUk9VTkRfVEhSRUFEX0xJTUlUICsgMTsKKworLyogVXNlZCBm b3IgdGhyZWFkIGNyZWF0aW9uLCB0ZXJtaW5hdGlvbiBhbmQgc3RhdHMuICovCittYWxsb2NfbXV0 ZXhfdCBiYWNrZ3JvdW5kX3RocmVhZF9sb2NrOworLyogSW5kaWNhdGVzIGdsb2JhbCBzdGF0ZS4g IEF0b21pYyBiZWNhdXNlIGRlY2F5IHJlYWRzIHRoaXMgdy9vIGxvY2tpbmcuICovCithdG9taWNf Yl90IGJhY2tncm91bmRfdGhyZWFkX2VuYWJsZWRfc3RhdGU7CitzaXplX3Qgbl9iYWNrZ3JvdW5k X3RocmVhZHM7CitzaXplX3QgbWF4X2JhY2tncm91bmRfdGhyZWFkczsKKy8qIFRocmVhZCBpbmZv IHBlci1pbmRleC4gKi8KK2JhY2tncm91bmRfdGhyZWFkX2luZm9fdCAqYmFja2dyb3VuZF90aHJl YWRfaW5mbzsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmZGVmIEpFTUFMTE9DX1BU SFJFQURfQ1JFQVRFX1dSQVBQRVIKKworc3RhdGljIGludCAoKnB0aHJlYWRfY3JlYXRlX2ZwdHIp KHB0aHJlYWRfdCAqX19yZXN0cmljdCwgY29uc3QgcHRocmVhZF9hdHRyX3QgKiwKKyAgICB2b2lk ICooKikodm9pZCAqKSwgdm9pZCAqX19yZXN0cmljdCk7CisKK3N0YXRpYyB2b2lkCitwdGhyZWFk X2NyZWF0ZV93cmFwcGVyX2luaXQodm9pZCkgeworI2lmZGVmIEpFTUFMTE9DX0xBWllfTE9DSwor CWlmICghaXN0aHJlYWRlZCkgeworCQlpc3RocmVhZGVkID0gdHJ1ZTsKKwl9CisjZW5kaWYKK30K KworaW50CitwdGhyZWFkX2NyZWF0ZV93cmFwcGVyKHB0aHJlYWRfdCAqX19yZXN0cmljdCB0aHJl YWQsIGNvbnN0IHB0aHJlYWRfYXR0cl90ICphdHRyLAorICAgIHZvaWQgKigqc3RhcnRfcm91dGlu ZSkodm9pZCAqKSwgdm9pZCAqX19yZXN0cmljdCBhcmcpIHsKKwlwdGhyZWFkX2NyZWF0ZV93cmFw cGVyX2luaXQoKTsKKworCXJldHVybiBwdGhyZWFkX2NyZWF0ZV9mcHRyKHRocmVhZCwgYXR0ciwg c3RhcnRfcm91dGluZSwgYXJnKTsKK30KKyNlbmRpZiAvKiBKRU1BTExPQ19QVEhSRUFEX0NSRUFU RV9XUkFQUEVSICovCisKKyNpZm5kZWYgSkVNQUxMT0NfQkFDS0dST1VORF9USFJFQUQKKyNkZWZp bmUgTk9UX1JFQUNIRUQgeyBub3RfcmVhY2hlZCgpOyB9Citib29sIGJhY2tncm91bmRfdGhyZWFk X2NyZWF0ZSh0c2RfdCAqdHNkLCB1bnNpZ25lZCBhcmVuYV9pbmQpIE5PVF9SRUFDSEVECitib29s IGJhY2tncm91bmRfdGhyZWFkc19lbmFibGUodHNkX3QgKnRzZCkgTk9UX1JFQUNIRUQKK2Jvb2wg YmFja2dyb3VuZF90aHJlYWRzX2Rpc2FibGUodHNkX3QgKnRzZCkgTk9UX1JFQUNIRUQKK2Jvb2wg YmFja2dyb3VuZF90aHJlYWRfaXNfc3RhcnRlZChiYWNrZ3JvdW5kX3RocmVhZF9pbmZvX3QgKmlu Zm8pIE5PVF9SRUFDSEVECit2b2lkIGJhY2tncm91bmRfdGhyZWFkX3dha2V1cF9lYXJseShiYWNr Z3JvdW5kX3RocmVhZF9pbmZvX3QgKmluZm8sCisgICAgbnN0aW1lX3QgKnJlbWFpbmluZ19zbGVl cCkgTk9UX1JFQUNIRUQKK3ZvaWQgYmFja2dyb3VuZF90aHJlYWRfcHJlZm9yazAodHNkbl90ICp0 c2RuKSBOT1RfUkVBQ0hFRAordm9pZCBiYWNrZ3JvdW5kX3RocmVhZF9wcmVmb3JrMSh0c2RuX3Qg KnRzZG4pIE5PVF9SRUFDSEVECit2b2lkIGJhY2tncm91bmRfdGhyZWFkX3Bvc3Rmb3JrX3BhcmVu dCh0c2RuX3QgKnRzZG4pIE5PVF9SRUFDSEVECit2b2lkIGJhY2tncm91bmRfdGhyZWFkX3Bvc3Rm b3JrX2NoaWxkKHRzZG5fdCAqdHNkbikgTk9UX1JFQUNIRUQKK2Jvb2wgYmFja2dyb3VuZF90aHJl YWRfc3RhdHNfcmVhZCh0c2RuX3QgKnRzZG4sCisgICAgYmFja2dyb3VuZF90aHJlYWRfc3RhdHNf dCAqc3RhdHMpIE5PVF9SRUFDSEVECit2b2lkIGJhY2tncm91bmRfdGhyZWFkX2N0bF9pbml0KHRz ZG5fdCAqdHNkbikgTk9UX1JFQUNIRUQKKyN1bmRlZiBOT1RfUkVBQ0hFRAorI2Vsc2UKKworc3Rh dGljIGJvb2wgYmFja2dyb3VuZF90aHJlYWRfZW5hYmxlZF9hdF9mb3JrOworCitzdGF0aWMgdm9p ZAorYmFja2dyb3VuZF90aHJlYWRfaW5mb19pbml0KHRzZG5fdCAqdHNkbiwgYmFja2dyb3VuZF90 aHJlYWRfaW5mb190ICppbmZvKSB7CisJYmFja2dyb3VuZF90aHJlYWRfd2FrZXVwX3RpbWVfc2V0 KHRzZG4sIGluZm8sIDApOworCWluZm8tPm5wYWdlc190b19wdXJnZV9uZXcgPSAwOworCWlmIChj b25maWdfc3RhdHMpIHsKKwkJaW5mby0+dG90X25fcnVucyA9IDA7CisJCW5zdGltZV9pbml0X3pl cm8oJmluZm8tPnRvdF9zbGVlcF90aW1lKTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbAor c2V0X2N1cnJlbnRfdGhyZWFkX2FmZmluaXR5KGludCBjcHUpIHsKKyNpZiBkZWZpbmVkKEpFTUFM TE9DX0hBVkVfU0NIRURfU0VUQUZGSU5JVFkpCisJY3B1X3NldF90IGNwdXNldDsKKyNlbHNlCisj ICBpZm5kZWYgX19OZXRCU0RfXworCWNwdXNldF90IGNwdXNldDsKKyMgIGVsc2UKKwljcHVzZXRf dCAqY3B1c2V0OworIyAgZW5kaWYKKyNlbmRpZgorCisjaWZuZGVmIF9fTmV0QlNEX18KKwlDUFVf WkVSTygmY3B1c2V0KTsKKwlDUFVfU0VUKGNwdSwgJmNwdXNldCk7CisjZWxzZQorCWNwdXNldCA9 IGNwdXNldF9jcmVhdGUoKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChKRU1BTExPQ19IQVZFX1ND SEVEX1NFVEFGRklOSVRZKQorCXJldHVybiAoc2NoZWRfc2V0YWZmaW5pdHkoMCwgc2l6ZW9mKGNw dV9zZXRfdCksICZjcHVzZXQpICE9IDApOworI2Vsc2UKKyMgIGlmbmRlZiBfX05ldEJTRF9fCisJ aW50IHJldCA9IHB0aHJlYWRfc2V0YWZmaW5pdHlfbnAocHRocmVhZF9zZWxmKCksIHNpemVvZihj cHVzZXRfdCksCisJICAgICZjcHVzZXQpOworIyAgZWxzZQorCWludCByZXQgPSBwdGhyZWFkX3Nl dGFmZmluaXR5X25wKHB0aHJlYWRfc2VsZigpLCBjcHVzZXRfc2l6ZShjcHVzZXQpLAorCSAgICBj cHVzZXQpOworCWNwdXNldF9kZXN0cm95KGNwdXNldCk7CisjICBlbmRpZgorCXJldHVybiByZXQg IT0gMDsKKyNlbmRpZgorfQorCisjZGVmaW5lIEJJTExJT04gVUlOVDY0X0MoMTAwMDAwMDAwMCkK Ky8qIE1pbmltYWwgc2xlZXAgaW50ZXJ2YWwgMTAwIG1zLiAqLworI2RlZmluZSBCQUNLR1JPVU5E X1RIUkVBRF9NSU5fSU5URVJWQUxfTlMgKEJJTExJT04gLyAxMCkKKworc3RhdGljIHZvaWQKK2Jh Y2tncm91bmRfdGhyZWFkX3NsZWVwKHRzZG5fdCAqdHNkbiwgYmFja2dyb3VuZF90aHJlYWRfaW5m b190ICppbmZvLAorICAgIHVpbnQ2NF90IGludGVydmFsKSB7CisJaWYgKGNvbmZpZ19zdGF0cykg eworCQlpbmZvLT50b3Rfbl9ydW5zKys7CisJfQorCWluZm8tPm5wYWdlc190b19wdXJnZV9uZXcg PSAwOworCisJc3RydWN0IHRpbWV2YWwgdHY7CisJLyogU3BlY2lmaWMgY2xvY2sgcmVxdWlyZWQg YnkgdGltZWR3YWl0LiAqLworCWdldHRpbWVvZmRheSgmdHYsIE5VTEwpOworCW5zdGltZV90IGJl Zm9yZV9zbGVlcDsKKwluc3RpbWVfaW5pdDIoJmJlZm9yZV9zbGVlcCwgdHYudHZfc2VjLCB0di50 dl91c2VjICogMTAwMCk7CisKKwlpbnQgcmV0OworCWlmIChpbnRlcnZhbCA9PSBCQUNLR1JPVU5E X1RIUkVBRF9JTkRFRklOSVRFX1NMRUVQKSB7CisJCWJhY2tncm91bmRfdGhyZWFkX3dha2V1cF90 aW1lX3NldCh0c2RuLCBpbmZvLAorCQkgICAgQkFDS0dST1VORF9USFJFQURfSU5ERUZJTklURV9T TEVFUCk7CisJCXJldCA9IHB0aHJlYWRfY29uZF93YWl0KCZpbmZvLT5jb25kLCAmaW5mby0+bXR4 LmxvY2spOworCQlhc3NlcnQocmV0ID09IDApOworCX0gZWxzZSB7CisJCWFzc2VydChpbnRlcnZh bCA+PSBCQUNLR1JPVU5EX1RIUkVBRF9NSU5fSU5URVJWQUxfTlMgJiYKKwkJICAgIGludGVydmFs IDw9IEJBQ0tHUk9VTkRfVEhSRUFEX0lOREVGSU5JVEVfU0xFRVApOworCQkvKiBXZSBuZWVkIG1h bGxvYyBjbG9jayAoY2FuIGJlIGRpZmZlcmVudCBmcm9tIHR2KS4gKi8KKwkJbnN0aW1lX3QgbmV4 dF93YWtldXA7CisJCW5zdGltZV9pbml0X3VwZGF0ZSgmbmV4dF93YWtldXApOworCQluc3RpbWVf aWFkZCgmbmV4dF93YWtldXAsIGludGVydmFsKTsKKwkJYXNzZXJ0KG5zdGltZV9ucygmbmV4dF93 YWtldXApIDwKKwkJICAgIEJBQ0tHUk9VTkRfVEhSRUFEX0lOREVGSU5JVEVfU0xFRVApOworCQli YWNrZ3JvdW5kX3RocmVhZF93YWtldXBfdGltZV9zZXQodHNkbiwgaW5mbywKKwkJICAgIG5zdGlt ZV9ucygmbmV4dF93YWtldXApKTsKKworCQluc3RpbWVfdCB0c193YWtldXA7CisJCW5zdGltZV9j b3B5KCZ0c193YWtldXAsICZiZWZvcmVfc2xlZXApOworCQluc3RpbWVfaWFkZCgmdHNfd2FrZXVw LCBpbnRlcnZhbCk7CisJCXN0cnVjdCB0aW1lc3BlYyB0czsKKwkJdHMudHZfc2VjID0gKHNpemVf dCluc3RpbWVfc2VjKCZ0c193YWtldXApOworCQl0cy50dl9uc2VjID0gKHNpemVfdCluc3RpbWVf bnNlYygmdHNfd2FrZXVwKTsKKworCQlhc3NlcnQoIWJhY2tncm91bmRfdGhyZWFkX2luZGVmaW5p dGVfc2xlZXAoaW5mbykpOworCQlyZXQgPSBwdGhyZWFkX2NvbmRfdGltZWR3YWl0KCZpbmZvLT5j b25kLCAmaW5mby0+bXR4LmxvY2ssICZ0cyk7CisJCWFzc2VydChyZXQgPT0gRVRJTUVET1VUIHx8 IHJldCA9PSAwKTsKKwl9CisJaWYgKGNvbmZpZ19zdGF0cykgeworCQlnZXR0aW1lb2ZkYXkoJnR2 LCBOVUxMKTsKKwkJbnN0aW1lX3QgYWZ0ZXJfc2xlZXA7CisJCW5zdGltZV9pbml0MigmYWZ0ZXJf c2xlZXAsIHR2LnR2X3NlYywgdHYudHZfdXNlYyAqIDEwMDApOworCQlpZiAobnN0aW1lX2NvbXBh cmUoJmFmdGVyX3NsZWVwLCAmYmVmb3JlX3NsZWVwKSA+IDApIHsKKwkJCW5zdGltZV9zdWJ0cmFj dCgmYWZ0ZXJfc2xlZXAsICZiZWZvcmVfc2xlZXApOworCQkJbnN0aW1lX2FkZCgmaW5mby0+dG90 X3NsZWVwX3RpbWUsICZhZnRlcl9zbGVlcCk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBib29sCiti YWNrZ3JvdW5kX3RocmVhZF9wYXVzZV9jaGVjayh0c2RuX3QgKnRzZG4sIGJhY2tncm91bmRfdGhy ZWFkX2luZm9fdCAqaW5mbykgeworCWlmICh1bmxpa2VseShpbmZvLT5zdGF0ZSA9PSBiYWNrZ3Jv dW5kX3RocmVhZF9wYXVzZWQpKSB7CisJCW1hbGxvY19tdXRleF91bmxvY2sodHNkbiwgJmluZm8t Pm10eCk7CisJCS8qIFdhaXQgb24gZ2xvYmFsIGxvY2sgdG8gdXBkYXRlIHN0YXR1cy4gKi8KKwkJ bWFsbG9jX211dGV4X2xvY2sodHNkbiwgJmJhY2tncm91bmRfdGhyZWFkX2xvY2spOworCQltYWxs b2NfbXV0ZXhfdW5sb2NrKHRzZG4sICZiYWNrZ3JvdW5kX3RocmVhZF9sb2NrKTsKKwkJbWFsbG9j X211dGV4X2xvY2sodHNkbiwgJmluZm8tPm10eCk7CisJCXJldHVybiB0cnVlOworCX0KKworCXJl dHVybiBmYWxzZTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitiYWNrZ3JvdW5kX3dvcmtfc2xl ZXBfb25jZSh0c2RuX3QgKnRzZG4sIGJhY2tncm91bmRfdGhyZWFkX2luZm9fdCAqaW5mbywKKyAg ICB1bnNpZ25lZCBpbmQpIHsKKwl1aW50NjRfdCBuc191bnRpbF9kZWZlcnJlZCA9IEJBQ0tHUk9V TkRfVEhSRUFEX0RFRkVSUkVEX01BWDsKKwl1bnNpZ25lZCBuYXJlbmFzID0gbmFyZW5hc190b3Rh bF9nZXQoKTsKKwlib29sIHNsZXB0X2luZGVmaW5pdGVseSA9IGJhY2tncm91bmRfdGhyZWFkX2lu ZGVmaW5pdGVfc2xlZXAoaW5mbyk7CisKKwlmb3IgKHVuc2lnbmVkIGkgPSBpbmQ7IGkgPCBuYXJl bmFzOyBpICs9IG1heF9iYWNrZ3JvdW5kX3RocmVhZHMpIHsKKwkJYXJlbmFfdCAqYXJlbmEgPSBh cmVuYV9nZXQodHNkbiwgaSwgZmFsc2UpOworCQlpZiAoIWFyZW5hKSB7CisJCQljb250aW51ZTsK KwkJfQorCQkvKgorCQkgKiBJZiB0aHJlYWQgd2FzIHdva2VuIHVwIGZyb20gdGhlIGluZGVmaW5p dGUgc2xlZXAsIGRvbid0CisJCSAqIGRvIHRoZSB3b3JrIGluc3RhbnRseSwgYnV0IHJhdGhlciBj aGVjayB3aGVuIHRoZSBkZWZlcnJlZAorCQkgKiB3b3JrIHRoYXQgY2F1c2VkIHRoaXMgdGhyZWFk IHRvIHdha2UgdXAgaXMgc2NoZWR1bGVkIGZvci4KKwkJICovCisJCWlmICghc2xlcHRfaW5kZWZp bml0ZWx5KSB7CisJCQlhcmVuYV9kb19kZWZlcnJlZF93b3JrKHRzZG4sIGFyZW5hKTsKKwkJfQor CQlpZiAobnNfdW50aWxfZGVmZXJyZWQgPD0gQkFDS0dST1VORF9USFJFQURfTUlOX0lOVEVSVkFM X05TKSB7CisJCQkvKiBNaW4gaW50ZXJ2YWwgd2lsbCBiZSB1c2VkLiAqLworCQkJY29udGludWU7 CisJCX0KKwkJdWludDY0X3QgbnNfYXJlbmFfZGVmZXJyZWQgPSBwYV9zaGFyZF90aW1lX3VudGls X2RlZmVycmVkX3dvcmsoCisJCSAgICB0c2RuLCAmYXJlbmEtPnBhX3NoYXJkKTsKKwkJaWYgKG5z X2FyZW5hX2RlZmVycmVkIDwgbnNfdW50aWxfZGVmZXJyZWQpIHsKKwkJCW5zX3VudGlsX2RlZmVy cmVkID0gbnNfYXJlbmFfZGVmZXJyZWQ7CisJCX0KKwl9CisKKwl1aW50NjRfdCBzbGVlcF9uczsK KwlpZiAobnNfdW50aWxfZGVmZXJyZWQgPT0gQkFDS0dST1VORF9USFJFQURfREVGRVJSRURfTUFY KSB7CisJCXNsZWVwX25zID0gQkFDS0dST1VORF9USFJFQURfSU5ERUZJTklURV9TTEVFUDsKKwl9 IGVsc2UgeworCQlzbGVlcF9ucyA9CisJCSAgICAobnNfdW50aWxfZGVmZXJyZWQgPCBCQUNLR1JP VU5EX1RIUkVBRF9NSU5fSU5URVJWQUxfTlMpCisJCSAgICA/IEJBQ0tHUk9VTkRfVEhSRUFEX01J Tl9JTlRFUlZBTF9OUworCQkgICAgOiBuc191bnRpbF9kZWZlcnJlZDsKKworCX0KKworCWJhY2tn cm91bmRfdGhyZWFkX3NsZWVwKHRzZG4sIGluZm8sIHNsZWVwX25zKTsKK30KKworc3RhdGljIGJv b2wKK2JhY2tncm91bmRfdGhyZWFkc19kaXNhYmxlX3NpbmdsZSh0c2RfdCAqdHNkLCBiYWNrZ3Jv dW5kX3RocmVhZF9pbmZvX3QgKmluZm8pIHsKKwlpZiAoaW5mbyA9PSAmYmFja2dyb3VuZF90aHJl YWRfaW5mb1swXSkgeworCQltYWxsb2NfbXV0ZXhfYXNzZXJ0X293bmVyKHRzZF90c2RuKHRzZCks CisJCSAgICAmYmFja2dyb3VuZF90aHJlYWRfbG9jayk7CisJfSBlbHNlIHsKKwkJbWFsbG9jX211 dGV4X2Fzc2VydF9ub3Rfb3duZXIodHNkX3RzZG4odHNkKSwKKwkJICAgICZiYWNrZ3JvdW5kX3Ro cmVhZF9sb2NrKTsKKwl9CisKKwlwcmVfcmVlbnRyYW5jeSh0c2QsIE5VTEwpOworCW1hbGxvY19t dXRleF9sb2NrKHRzZF90c2RuKHRzZCksICZpbmZvLT5tdHgpOworCWJvb2wgaGFzX3RocmVhZDsK Kwlhc3NlcnQoaW5mby0+c3RhdGUgIT0gYmFja2dyb3VuZF90aHJlYWRfcGF1c2VkKTsKKwlpZiAo aW5mby0+c3RhdGUgPT0gYmFja2dyb3VuZF90aHJlYWRfc3RhcnRlZCkgeworCQloYXNfdGhyZWFk ID0gdHJ1ZTsKKwkJaW5mby0+c3RhdGUgPSBiYWNrZ3JvdW5kX3RocmVhZF9zdG9wcGVkOworCQlw dGhyZWFkX2NvbmRfc2lnbmFsKCZpbmZvLT5jb25kKTsKKwl9IGVsc2UgeworCQloYXNfdGhyZWFk ID0gZmFsc2U7CisJfQorCW1hbGxvY19tdXRleF91bmxvY2sodHNkX3RzZG4odHNkKSwgJmluZm8t Pm10eCk7CisKKwlpZiAoIWhhc190aHJlYWQpIHsKKwkJcG9zdF9yZWVudHJhbmN5KHRzZCk7CisJ CXJldHVybiBmYWxzZTsKKwl9CisJdm9pZCAqcmV0OworCWlmIChwdGhyZWFkX2pvaW4oaW5mby0+ dGhyZWFkLCAmcmV0KSkgeworCQlwb3N0X3JlZW50cmFuY3kodHNkKTsKKwkJcmV0dXJuIHRydWU7 CisJfQorCWFzc2VydChyZXQgPT0gTlVMTCk7CisJbl9iYWNrZ3JvdW5kX3RocmVhZHMtLTsKKwlw b3N0X3JlZW50cmFuY3kodHNkKTsKKworCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIHZvaWQg KmJhY2tncm91bmRfdGhyZWFkX2VudHJ5KHZvaWQgKmluZF9hcmcpOworCitzdGF0aWMgaW50Citi YWNrZ3JvdW5kX3RocmVhZF9jcmVhdGVfc2lnbmFsc19tYXNrZWQocHRocmVhZF90ICp0aHJlYWQs CisgICAgY29uc3QgcHRocmVhZF9hdHRyX3QgKmF0dHIsIHZvaWQgKigqc3RhcnRfcm91dGluZSko dm9pZCAqKSwgdm9pZCAqYXJnKSB7CisJLyoKKwkgKiBNYXNrIHNpZ25hbHMgZHVyaW5nIHRocmVh ZCBjcmVhdGlvbiBzbyB0aGF0IHRoZSB0aHJlYWQgaW5oZXJpdHMKKwkgKiBhbiBlbXB0eSBzaWdu YWwgc2V0LgorCSAqLworCXNpZ3NldF90IHNldDsKKwlzaWdmaWxsc2V0KCZzZXQpOworCXNpZ3Nl dF90IG9sZHNldDsKKwlpbnQgbWFza19lcnIgPSBwdGhyZWFkX3NpZ21hc2soU0lHX1NFVE1BU0ss ICZzZXQsICZvbGRzZXQpOworCWlmIChtYXNrX2VyciAhPSAwKSB7CisJCXJldHVybiBtYXNrX2Vy cjsKKwl9CisJaW50IGNyZWF0ZV9lcnIgPSBwdGhyZWFkX2NyZWF0ZV93cmFwcGVyKHRocmVhZCwg YXR0ciwgc3RhcnRfcm91dGluZSwKKwkgICAgYXJnKTsKKwkvKgorCSAqIFJlc3RvcmUgdGhlIHNp Z25hbCBtYXNrLiAgRmFpbHVyZSB0byByZXN0b3JlIHRoZSBzaWduYWwgbWFzayBoZXJlCisJICog Y2hhbmdlcyBwcm9ncmFtIGJlaGF2aW9yLgorCSAqLworCWludCByZXN0b3JlX2VyciA9IHB0aHJl YWRfc2lnbWFzayhTSUdfU0VUTUFTSywgJm9sZHNldCwgTlVMTCk7CisJaWYgKHJlc3RvcmVfZXJy ICE9IDApIHsKKwkJbWFsbG9jX3ByaW50ZigiPGplbWFsbG9jPjogYmFja2dyb3VuZCB0aHJlYWQg Y3JlYXRpb24gIgorCQkgICAgImZhaWxlZCAoJWQpLCBhbmQgc2lnbmFsIG1hc2sgcmVzdG9yYXRp b24gZmFpbGVkICIKKwkJICAgICIoJWQpXG4iLCBjcmVhdGVfZXJyLCByZXN0b3JlX2Vycik7CisJ CWlmIChvcHRfYWJvcnQpIHsKKwkJCWFib3J0KCk7CisJCX0KKwl9CisJcmV0dXJuIGNyZWF0ZV9l cnI7Cit9CisKK3N0YXRpYyBib29sCitjaGVja19iYWNrZ3JvdW5kX3RocmVhZF9jcmVhdGlvbih0 c2RfdCAqdHNkLCB1bnNpZ25lZCAqbl9jcmVhdGVkLAorICAgIGJvb2wgKmNyZWF0ZWRfdGhyZWFk cykgeworCWJvb2wgcmV0ID0gZmFsc2U7CisJaWYgKGxpa2VseSgqbl9jcmVhdGVkID09IG5fYmFj a2dyb3VuZF90aHJlYWRzKSkgeworCQlyZXR1cm4gcmV0OworCX0KKworCXRzZG5fdCAqdHNkbiA9 IHRzZF90c2RuKHRzZCk7CisJbWFsbG9jX211dGV4X3VubG9jayh0c2RuLCAmYmFja2dyb3VuZF90 aHJlYWRfaW5mb1swXS5tdHgpOworCWZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBtYXhfYmFja2dy b3VuZF90aHJlYWRzOyBpKyspIHsKKwkJaWYgKGNyZWF0ZWRfdGhyZWFkc1tpXSkgeworCQkJY29u dGludWU7CisJCX0KKwkJYmFja2dyb3VuZF90aHJlYWRfaW5mb190ICppbmZvID0gJmJhY2tncm91 bmRfdGhyZWFkX2luZm9baV07CisJCW1hbGxvY19tdXRleF9sb2NrKHRzZG4sICZpbmZvLT5tdHgp OworCQkvKgorCQkgKiBJbiBjYXNlIG9mIHRoZSBiYWNrZ3JvdW5kX3RocmVhZF9wYXVzZWQgc3Rh dGUgYmVjYXVzZSBvZgorCQkgKiBhcmVuYSByZXNldCwgZGVsYXkgdGhlIGNyZWF0aW9uLgorCQkg Ki8KKwkJYm9vbCBjcmVhdGUgPSAoaW5mby0+c3RhdGUgPT0gYmFja2dyb3VuZF90aHJlYWRfc3Rh cnRlZCk7CisJCW1hbGxvY19tdXRleF91bmxvY2sodHNkbiwgJmluZm8tPm10eCk7CisJCWlmICgh Y3JlYXRlKSB7CisJCQljb250aW51ZTsKKwkJfQorCisJCXByZV9yZWVudHJhbmN5KHRzZCwgTlVM TCk7CisJCWludCBlcnIgPSBiYWNrZ3JvdW5kX3RocmVhZF9jcmVhdGVfc2lnbmFsc19tYXNrZWQo JmluZm8tPnRocmVhZCwKKwkJICAgIE5VTEwsIGJhY2tncm91bmRfdGhyZWFkX2VudHJ5LCAodm9p ZCAqKSh1aW50cHRyX3QpaSk7CisJCXBvc3RfcmVlbnRyYW5jeSh0c2QpOworCisJCWlmIChlcnIg PT0gMCkgeworCQkJKCpuX2NyZWF0ZWQpKys7CisJCQljcmVhdGVkX3RocmVhZHNbaV0gPSB0cnVl OworCQl9IGVsc2UgeworCQkJbWFsbG9jX3ByaW50ZigiPGplbWFsbG9jPjogYmFja2dyb3VuZCB0 aHJlYWQgIgorCQkJICAgICJjcmVhdGlvbiBmYWlsZWQgKCVkKVxuIiwgZXJyKTsKKwkJCWlmIChv cHRfYWJvcnQpIHsKKwkJCQlhYm9ydCgpOworCQkJfQorCQl9CisJCS8qIFJldHVybiB0byByZXN0 YXJ0IHRoZSBsb29wIHNpbmNlIHdlIHVubG9ja2VkLiAqLworCQlyZXQgPSB0cnVlOworCQlicmVh azsKKwl9CisJbWFsbG9jX211dGV4X2xvY2sodHNkbiwgJmJhY2tncm91bmRfdGhyZWFkX2luZm9b MF0ubXR4KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkCitiYWNrZ3JvdW5kX3Ro cmVhZDBfd29yayh0c2RfdCAqdHNkKSB7CisJLyogVGhyZWFkMCBpcyBhbHNvIHJlc3BvbnNpYmxl IGZvciBsYXVuY2hpbmcgLyB0ZXJtaW5hdGluZyB0aHJlYWRzLiAqLworCVZBUklBQkxFX0FSUkFZ KGJvb2wsIGNyZWF0ZWRfdGhyZWFkcywgbWF4X2JhY2tncm91bmRfdGhyZWFkcyk7CisJdW5zaWdu ZWQgaTsKKwlmb3IgKGkgPSAxOyBpIDwgbWF4X2JhY2tncm91bmRfdGhyZWFkczsgaSsrKSB7CisJ CWNyZWF0ZWRfdGhyZWFkc1tpXSA9IGZhbHNlOworCX0KKwkvKiBTdGFydCB3b3JraW5nLCBhbmQg Y3JlYXRlIG1vcmUgdGhyZWFkcyB3aGVuIGFza2VkLiAqLworCXVuc2lnbmVkIG5fY3JlYXRlZCA9 IDE7CisJd2hpbGUgKGJhY2tncm91bmRfdGhyZWFkX2luZm9bMF0uc3RhdGUgIT0gYmFja2dyb3Vu ZF90aHJlYWRfc3RvcHBlZCkgeworCQlpZiAoYmFja2dyb3VuZF90aHJlYWRfcGF1c2VfY2hlY2so dHNkX3RzZG4odHNkKSwKKwkJICAgICZiYWNrZ3JvdW5kX3RocmVhZF9pbmZvWzBdKSkgeworCQkJ Y29udGludWU7CisJCX0KKwkJaWYgKGNoZWNrX2JhY2tncm91bmRfdGhyZWFkX2NyZWF0aW9uKHRz ZCwgJm5fY3JlYXRlZCwKKwkJICAgIChib29sICopJmNyZWF0ZWRfdGhyZWFkcykpIHsKKwkJCWNv bnRpbnVlOworCQl9CisJCWJhY2tncm91bmRfd29ya19zbGVlcF9vbmNlKHRzZF90c2RuKHRzZCks CisJCSAgICAmYmFja2dyb3VuZF90aHJlYWRfaW5mb1swXSwgMCk7CisJfQorCisJLyoKKwkgKiBT aHV0IGRvd24gb3RoZXIgdGhyZWFkcyBhdCBleGl0LiAgTm90ZSB0aGF0IHRoZSBjdGwgdGhyZWFk IGlzIGhvbGRpbmcKKwkgKiB0aGUgZ2xvYmFsIGJhY2tncm91bmRfdGhyZWFkIG11dGV4IChhbmQg aXMgd2FpdGluZykgZm9yIHVzLgorCSAqLworCWFzc2VydCghYmFja2dyb3VuZF90aHJlYWRfZW5h YmxlZCgpKTsKKwlmb3IgKGkgPSAxOyBpIDwgbWF4X2JhY2tncm91bmRfdGhyZWFkczsgaSsrKSB7 CisJCWJhY2tncm91bmRfdGhyZWFkX2luZm9fdCAqaW5mbyA9ICZiYWNrZ3JvdW5kX3RocmVhZF9p bmZvW2ldOworCQlhc3NlcnQoaW5mby0+c3RhdGUgIT0gYmFja2dyb3VuZF90aHJlYWRfcGF1c2Vk KTsKKwkJaWYgKGNyZWF0ZWRfdGhyZWFkc1tpXSkgeworCQkJYmFja2dyb3VuZF90aHJlYWRzX2Rp c2FibGVfc2luZ2xlKHRzZCwgaW5mbyk7CisJCX0gZWxzZSB7CisJCQltYWxsb2NfbXV0ZXhfbG9j ayh0c2RfdHNkbih0c2QpLCAmaW5mby0+bXR4KTsKKwkJCWlmIChpbmZvLT5zdGF0ZSAhPSBiYWNr Z3JvdW5kX3RocmVhZF9zdG9wcGVkKSB7CisJCQkJLyogVGhlIHRocmVhZCB3YXMgbm90IGNyZWF0 ZWQuICovCisJCQkJYXNzZXJ0KGluZm8tPnN0YXRlID09CisJCQkJICAgIGJhY2tncm91bmRfdGhy ZWFkX3N0YXJ0ZWQpOworCQkJCW5fYmFja2dyb3VuZF90aHJlYWRzLS07CisJCQkJaW5mby0+c3Rh dGUgPSBiYWNrZ3JvdW5kX3RocmVhZF9zdG9wcGVkOworCQkJfQorCQkJbWFsbG9jX211dGV4X3Vu bG9jayh0c2RfdHNkbih0c2QpLCAmaW5mby0+bXR4KTsKKwkJfQorCX0KKwliYWNrZ3JvdW5kX3Ro cmVhZF9pbmZvWzBdLnN0YXRlID0gYmFja2dyb3VuZF90aHJlYWRfc3RvcHBlZDsKKwlhc3NlcnQo bl9iYWNrZ3JvdW5kX3RocmVhZHMgPT0gMSk7Cit9CisKK3N0YXRpYyB2b2lkCitiYWNrZ3JvdW5k X3dvcmsodHNkX3QgKnRzZCwgdW5zaWduZWQgaW5kKSB7CisJYmFja2dyb3VuZF90aHJlYWRfaW5m b190ICppbmZvID0gJmJhY2tncm91bmRfdGhyZWFkX2luZm9baW5kXTsKKworCW1hbGxvY19tdXRl eF9sb2NrKHRzZF90c2RuKHRzZCksICZpbmZvLT5tdHgpOworCWJhY2tncm91bmRfdGhyZWFkX3dh a2V1cF90aW1lX3NldCh0c2RfdHNkbih0c2QpLCBpbmZvLAorCSAgICBCQUNLR1JPVU5EX1RIUkVB RF9JTkRFRklOSVRFX1NMRUVQKTsKKwlpZiAoaW5kID09IDApIHsKKwkJYmFja2dyb3VuZF90aHJl YWQwX3dvcmsodHNkKTsKKwl9IGVsc2UgeworCQl3aGlsZSAoaW5mby0+c3RhdGUgIT0gYmFja2dy b3VuZF90aHJlYWRfc3RvcHBlZCkgeworCQkJaWYgKGJhY2tncm91bmRfdGhyZWFkX3BhdXNlX2No ZWNrKHRzZF90c2RuKHRzZCksCisJCQkgICAgaW5mbykpIHsKKwkJCQljb250aW51ZTsKKwkJCX0K KwkJCWJhY2tncm91bmRfd29ya19zbGVlcF9vbmNlKHRzZF90c2RuKHRzZCksIGluZm8sIGluZCk7 CisJCX0KKwl9CisJYXNzZXJ0KGluZm8tPnN0YXRlID09IGJhY2tncm91bmRfdGhyZWFkX3N0b3Bw ZWQpOworCWJhY2tncm91bmRfdGhyZWFkX3dha2V1cF90aW1lX3NldCh0c2RfdHNkbih0c2QpLCBp bmZvLCAwKTsKKwltYWxsb2NfbXV0ZXhfdW5sb2NrKHRzZF90c2RuKHRzZCksICZpbmZvLT5tdHgp OworfQorCitzdGF0aWMgdm9pZCAqCitiYWNrZ3JvdW5kX3RocmVhZF9lbnRyeSh2b2lkICppbmRf YXJnKSB7CisJdW5zaWduZWQgdGhyZWFkX2luZCA9ICh1bnNpZ25lZCkodWludHB0cl90KWluZF9h cmc7CisJYXNzZXJ0KHRocmVhZF9pbmQgPCBtYXhfYmFja2dyb3VuZF90aHJlYWRzKTsKKyNpZmRl ZiBKRU1BTExPQ19IQVZFX1BUSFJFQURfU0VUTkFNRV9OUAorCXB0aHJlYWRfc2V0bmFtZV9ucChw dGhyZWFkX3NlbGYoKSwgImplbWFsbG9jX2JnX3RoZCIpOworI2VsaWYgZGVmaW5lZChfX0ZyZWVC U0RfXykgfHwgZGVmaW5lZChfX0RyYWdvbkZseV9fKQorCXB0aHJlYWRfc2V0X25hbWVfbnAocHRo cmVhZF9zZWxmKCksICJqZW1hbGxvY19iZ190aGQiKTsKKyNlbmRpZgorCWlmIChvcHRfcGVyY3B1 X2FyZW5hICE9IHBlcmNwdV9hcmVuYV9kaXNhYmxlZCkgeworCQlzZXRfY3VycmVudF90aHJlYWRf YWZmaW5pdHkoKGludCl0aHJlYWRfaW5kKTsKKwl9CisJLyoKKwkgKiBTdGFydCBwZXJpb2RpYyBi YWNrZ3JvdW5kIHdvcmsuICBXZSB1c2UgaW50ZXJuYWwgdHNkIHdoaWNoIGF2b2lkcworCSAqIHNp ZGUgZWZmZWN0cywgZm9yIGV4YW1wbGUgdHJpZ2dlcmluZyBuZXcgYXJlbmEgY3JlYXRpb24gKHdo aWNoIGluCisJICogdHVybiB0cmlnZ2VycyBhbm90aGVyIGJhY2tncm91bmQgdGhyZWFkIGNyZWF0 aW9uKS4KKwkgKi8KKwliYWNrZ3JvdW5kX3dvcmsodHNkX2ludGVybmFsX2ZldGNoKCksIHRocmVh ZF9pbmQpOworCWFzc2VydChwdGhyZWFkX2VxdWFsKHB0aHJlYWRfc2VsZigpLAorCSAgICBiYWNr Z3JvdW5kX3RocmVhZF9pbmZvW3RocmVhZF9pbmRdLnRocmVhZCkpOworCisJcmV0dXJuIE5VTEw7 Cit9CisKK3N0YXRpYyB2b2lkCitiYWNrZ3JvdW5kX3RocmVhZF9pbml0KHRzZF90ICp0c2QsIGJh Y2tncm91bmRfdGhyZWFkX2luZm9fdCAqaW5mbykgeworCW1hbGxvY19tdXRleF9hc3NlcnRfb3du ZXIodHNkX3RzZG4odHNkKSwgJmJhY2tncm91bmRfdGhyZWFkX2xvY2spOworCWluZm8tPnN0YXRl ID0gYmFja2dyb3VuZF90aHJlYWRfc3RhcnRlZDsKKwliYWNrZ3JvdW5kX3RocmVhZF9pbmZvX2lu aXQodHNkX3RzZG4odHNkKSwgaW5mbyk7CisJbl9iYWNrZ3JvdW5kX3RocmVhZHMrKzsKK30KKwor c3RhdGljIGJvb2wKK2JhY2tncm91bmRfdGhyZWFkX2NyZWF0ZV9sb2NrZWQodHNkX3QgKnRzZCwg dW5zaWduZWQgYXJlbmFfaW5kKSB7CisJYXNzZXJ0KGhhdmVfYmFja2dyb3VuZF90aHJlYWQpOwor CW1hbGxvY19tdXRleF9hc3NlcnRfb3duZXIodHNkX3RzZG4odHNkKSwgJmJhY2tncm91bmRfdGhy ZWFkX2xvY2spOworCisJLyogV2UgY3JlYXRlIGF0IG1vc3QgTkNQVXMgdGhyZWFkcy4gKi8KKwlz aXplX3QgdGhyZWFkX2luZCA9IGFyZW5hX2luZCAlIG1heF9iYWNrZ3JvdW5kX3RocmVhZHM7CisJ YmFja2dyb3VuZF90aHJlYWRfaW5mb190ICppbmZvID0gJmJhY2tncm91bmRfdGhyZWFkX2luZm9b dGhyZWFkX2luZF07CisKKwlib29sIG5lZWRfbmV3X3RocmVhZDsKKwltYWxsb2NfbXV0ZXhfbG9j ayh0c2RfdHNkbih0c2QpLCAmaW5mby0+bXR4KTsKKwluZWVkX25ld190aHJlYWQgPSBiYWNrZ3Jv dW5kX3RocmVhZF9lbmFibGVkKCkgJiYKKwkgICAgKGluZm8tPnN0YXRlID09IGJhY2tncm91bmRf dGhyZWFkX3N0b3BwZWQpOworCWlmIChuZWVkX25ld190aHJlYWQpIHsKKwkJYmFja2dyb3VuZF90 aHJlYWRfaW5pdCh0c2QsIGluZm8pOworCX0KKwltYWxsb2NfbXV0ZXhfdW5sb2NrKHRzZF90c2Ru KHRzZCksICZpbmZvLT5tdHgpOworCWlmICghbmVlZF9uZXdfdGhyZWFkKSB7CisJCXJldHVybiBm YWxzZTsKKwl9CisJaWYgKGFyZW5hX2luZCAhPSAwKSB7CisJCS8qIFRocmVhZHMgYXJlIGNyZWF0 ZWQgYXN5bmNocm9ub3VzbHkgYnkgVGhyZWFkIDAuICovCisJCWJhY2tncm91bmRfdGhyZWFkX2lu Zm9fdCAqdDAgPSAmYmFja2dyb3VuZF90aHJlYWRfaW5mb1swXTsKKwkJbWFsbG9jX211dGV4X2xv Y2sodHNkX3RzZG4odHNkKSwgJnQwLT5tdHgpOworCQlhc3NlcnQodDAtPnN0YXRlID09IGJhY2tn cm91bmRfdGhyZWFkX3N0YXJ0ZWQpOworCQlwdGhyZWFkX2NvbmRfc2lnbmFsKCZ0MC0+Y29uZCk7 CisJCW1hbGxvY19tdXRleF91bmxvY2sodHNkX3RzZG4odHNkKSwgJnQwLT5tdHgpOworCisJCXJl dHVybiBmYWxzZTsKKwl9CisKKwlwcmVfcmVlbnRyYW5jeSh0c2QsIE5VTEwpOworCS8qCisJICog VG8gYXZvaWQgY29tcGxpY2F0aW9ucyAoYmVzaWRlcyByZWVudHJhbmN5KSwgY3JlYXRlIGludGVy bmFsCisJICogYmFja2dyb3VuZCB0aHJlYWRzIHdpdGggdGhlIHVuZGVybHlpbmcgcHRocmVhZF9j cmVhdGUuCisJICovCisJaW50IGVyciA9IGJhY2tncm91bmRfdGhyZWFkX2NyZWF0ZV9zaWduYWxz X21hc2tlZCgmaW5mby0+dGhyZWFkLCBOVUxMLAorCSAgICBiYWNrZ3JvdW5kX3RocmVhZF9lbnRy eSwgKHZvaWQgKil0aHJlYWRfaW5kKTsKKwlwb3N0X3JlZW50cmFuY3kodHNkKTsKKworCWlmIChl cnIgIT0gMCkgeworCQltYWxsb2NfcHJpbnRmKCI8amVtYWxsb2M+OiBhcmVuYSAwIGJhY2tncm91 bmQgdGhyZWFkIGNyZWF0aW9uICIKKwkJICAgICJmYWlsZWQgKCVkKVxuIiwgZXJyKTsKKwkJbWFs bG9jX211dGV4X2xvY2sodHNkX3RzZG4odHNkKSwgJmluZm8tPm10eCk7CisJCWluZm8tPnN0YXRl ID0gYmFja2dyb3VuZF90aHJlYWRfc3RvcHBlZDsKKwkJbl9iYWNrZ3JvdW5kX3RocmVhZHMtLTsK KwkJbWFsbG9jX211dGV4X3VubG9jayh0c2RfdHNkbih0c2QpLCAmaW5mby0+bXR4KTsKKworCQly ZXR1cm4gdHJ1ZTsKKwl9CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKKy8qIENyZWF0ZSBhIG5ldyBi YWNrZ3JvdW5kIHRocmVhZCBpZiBuZWVkZWQuICovCitib29sCitiYWNrZ3JvdW5kX3RocmVhZF9j cmVhdGUodHNkX3QgKnRzZCwgdW5zaWduZWQgYXJlbmFfaW5kKSB7CisJYXNzZXJ0KGhhdmVfYmFj a2dyb3VuZF90aHJlYWQpOworCisJYm9vbCByZXQ7CisJbWFsbG9jX211dGV4X2xvY2sodHNkX3Rz ZG4odHNkKSwgJmJhY2tncm91bmRfdGhyZWFkX2xvY2spOworCXJldCA9IGJhY2tncm91bmRfdGhy ZWFkX2NyZWF0ZV9sb2NrZWQodHNkLCBhcmVuYV9pbmQpOworCW1hbGxvY19tdXRleF91bmxvY2so dHNkX3RzZG4odHNkKSwgJmJhY2tncm91bmRfdGhyZWFkX2xvY2spOworCisJcmV0dXJuIHJldDsK K30KKworYm9vbAorYmFja2dyb3VuZF90aHJlYWRzX2VuYWJsZSh0c2RfdCAqdHNkKSB7CisJYXNz ZXJ0KG5fYmFja2dyb3VuZF90aHJlYWRzID09IDApOworCWFzc2VydChiYWNrZ3JvdW5kX3RocmVh ZF9lbmFibGVkKCkpOworCW1hbGxvY19tdXRleF9hc3NlcnRfb3duZXIodHNkX3RzZG4odHNkKSwg JmJhY2tncm91bmRfdGhyZWFkX2xvY2spOworCisJVkFSSUFCTEVfQVJSQVkoYm9vbCwgbWFya2Vk LCBtYXhfYmFja2dyb3VuZF90aHJlYWRzKTsKKwl1bnNpZ25lZCBubWFya2VkOworCWZvciAodW5z aWduZWQgaSA9IDA7IGkgPCBtYXhfYmFja2dyb3VuZF90aHJlYWRzOyBpKyspIHsKKwkJbWFya2Vk W2ldID0gZmFsc2U7CisJfQorCW5tYXJrZWQgPSAwOworCS8qIFRocmVhZCAwIGlzIHJlcXVpcmVk IGFuZCBjcmVhdGVkIGF0IHRoZSBlbmQuICovCisJbWFya2VkWzBdID0gdHJ1ZTsKKwkvKiBNYXJr IHRoZSB0aHJlYWRzIHdlIG5lZWQgdG8gY3JlYXRlIGZvciB0aHJlYWQgMC4gKi8KKwl1bnNpZ25l ZCBuYXJlbmFzID0gbmFyZW5hc190b3RhbF9nZXQoKTsKKwlmb3IgKHVuc2lnbmVkIGkgPSAxOyBp IDwgbmFyZW5hczsgaSsrKSB7CisJCWlmIChtYXJrZWRbaSAlIG1heF9iYWNrZ3JvdW5kX3RocmVh ZHNdIHx8CisJCSAgICBhcmVuYV9nZXQodHNkX3RzZG4odHNkKSwgaSwgZmFsc2UpID09IE5VTEwp IHsKKwkJCWNvbnRpbnVlOworCQl9CisJCWJhY2tncm91bmRfdGhyZWFkX2luZm9fdCAqaW5mbyA9 ICZiYWNrZ3JvdW5kX3RocmVhZF9pbmZvWworCQkgICAgaSAlIG1heF9iYWNrZ3JvdW5kX3RocmVh ZHNdOworCQltYWxsb2NfbXV0ZXhfbG9jayh0c2RfdHNkbih0c2QpLCAmaW5mby0+bXR4KTsKKwkJ YXNzZXJ0KGluZm8tPnN0YXRlID09IGJhY2tncm91bmRfdGhyZWFkX3N0b3BwZWQpOworCQliYWNr Z3JvdW5kX3RocmVhZF9pbml0KHRzZCwgaW5mbyk7CisJCW1hbGxvY19tdXRleF91bmxvY2sodHNk X3RzZG4odHNkKSwgJmluZm8tPm10eCk7CisJCW1hcmtlZFtpICUgbWF4X2JhY2tncm91bmRfdGhy ZWFkc10gPSB0cnVlOworCQlpZiAoKytubWFya2VkID09IG1heF9iYWNrZ3JvdW5kX3RocmVhZHMp IHsKKwkJCWJyZWFrOworCQl9CisJfQorCisJYm9vbCBlcnIgPSBiYWNrZ3JvdW5kX3RocmVhZF9j cmVhdGVfbG9ja2VkKHRzZCwgMCk7CisJaWYgKGVycikgeworCQlyZXR1cm4gdHJ1ZTsKKwl9CisJ Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG5hcmVuYXM7IGkrKykgeworCQlhcmVuYV90ICphcmVu YSA9IGFyZW5hX2dldCh0c2RfdHNkbih0c2QpLCBpLCBmYWxzZSk7CisJCWlmIChhcmVuYSAhPSBO VUxMKSB7CisJCQlwYV9zaGFyZF9zZXRfZGVmZXJyYWxfYWxsb3dlZCh0c2RfdHNkbih0c2QpLAor CQkJICAgICZhcmVuYS0+cGFfc2hhcmQsIHRydWUpOworCQl9CisJfQorCXJldHVybiBmYWxzZTsK K30KKworYm9vbAorYmFja2dyb3VuZF90aHJlYWRzX2Rpc2FibGUodHNkX3QgKnRzZCkgeworCWFz c2VydCghYmFja2dyb3VuZF90aHJlYWRfZW5hYmxlZCgpKTsKKwltYWxsb2NfbXV0ZXhfYXNzZXJ0 X293bmVyKHRzZF90c2RuKHRzZCksICZiYWNrZ3JvdW5kX3RocmVhZF9sb2NrKTsKKworCS8qIFRo cmVhZCAwIHdpbGwgYmUgcmVzcG9uc2libGUgZm9yIHRlcm1pbmF0aW5nIG90aGVyIHRocmVhZHMu ICovCisJaWYgKGJhY2tncm91bmRfdGhyZWFkc19kaXNhYmxlX3NpbmdsZSh0c2QsCisJICAgICZi YWNrZ3JvdW5kX3RocmVhZF9pbmZvWzBdKSkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9CisJYXNzZXJ0 KG5fYmFja2dyb3VuZF90aHJlYWRzID09IDApOworCXVuc2lnbmVkIG5hcmVuYXMgPSBuYXJlbmFz X3RvdGFsX2dldCgpOworCWZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBuYXJlbmFzOyBpKyspIHsK KwkJYXJlbmFfdCAqYXJlbmEgPSBhcmVuYV9nZXQodHNkX3RzZG4odHNkKSwgaSwgZmFsc2UpOwor CQlpZiAoYXJlbmEgIT0gTlVMTCkgeworCQkJcGFfc2hhcmRfc2V0X2RlZmVycmFsX2FsbG93ZWQo dHNkX3RzZG4odHNkKSwKKwkJCSAgICAmYXJlbmEtPnBhX3NoYXJkLCBmYWxzZSk7CisJCX0KKwl9 CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wKK2JhY2tncm91bmRfdGhyZWFkX2lzX3N0YXJ0 ZWQoYmFja2dyb3VuZF90aHJlYWRfaW5mb190ICppbmZvKSB7CisJcmV0dXJuIGluZm8tPnN0YXRl ID09IGJhY2tncm91bmRfdGhyZWFkX3N0YXJ0ZWQ7Cit9CisKK3ZvaWQKK2JhY2tncm91bmRfdGhy ZWFkX3dha2V1cF9lYXJseShiYWNrZ3JvdW5kX3RocmVhZF9pbmZvX3QgKmluZm8sCisgICAgbnN0 aW1lX3QgKnJlbWFpbmluZ19zbGVlcCkgeworCS8qCisJICogVGhpcyBpcyBhbiBvcHRpbWl6YXRp b24gdG8gaW5jcmVhc2UgYmF0Y2hpbmcuIEF0IHRoaXMgcG9pbnQKKwkgKiB3ZSBrbm93IHRoYXQg YmFja2dyb3VuZCB0aHJlYWQgd2FrZXMgdXAgc29vbiwgc28gdGhlIHRpbWUgdG8gY2FjaGUKKwkg KiB0aGUganVzdCBmcmVlZCBtZW1vcnkgaXMgYm91bmRlZCBhbmQgbG93LgorCSAqLworCWlmIChy ZW1haW5pbmdfc2xlZXAgIT0gTlVMTCAmJiBuc3RpbWVfbnMocmVtYWluaW5nX3NsZWVwKSA8CisJ ICAgIEJBQ0tHUk9VTkRfVEhSRUFEX01JTl9JTlRFUlZBTF9OUykgeworCQlyZXR1cm47CisJfQor CXB0aHJlYWRfY29uZF9zaWduYWwoJmluZm8tPmNvbmQpOworfQorCit2b2lkCitiYWNrZ3JvdW5k X3RocmVhZF9wcmVmb3JrMCh0c2RuX3QgKnRzZG4pIHsKKwltYWxsb2NfbXV0ZXhfcHJlZm9yayh0 c2RuLCAmYmFja2dyb3VuZF90aHJlYWRfbG9jayk7CisJYmFja2dyb3VuZF90aHJlYWRfZW5hYmxl ZF9hdF9mb3JrID0gYmFja2dyb3VuZF90aHJlYWRfZW5hYmxlZCgpOworfQorCit2b2lkCitiYWNr Z3JvdW5kX3RocmVhZF9wcmVmb3JrMSh0c2RuX3QgKnRzZG4pIHsKKwlmb3IgKHVuc2lnbmVkIGkg PSAwOyBpIDwgbWF4X2JhY2tncm91bmRfdGhyZWFkczsgaSsrKSB7CisJCW1hbGxvY19tdXRleF9w cmVmb3JrKHRzZG4sICZiYWNrZ3JvdW5kX3RocmVhZF9pbmZvW2ldLm10eCk7CisJfQorfQorCit2 b2lkCitiYWNrZ3JvdW5kX3RocmVhZF9wb3N0Zm9ya19wYXJlbnQodHNkbl90ICp0c2RuKSB7CisJ Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1heF9iYWNrZ3JvdW5kX3RocmVhZHM7IGkrKykgewor CQltYWxsb2NfbXV0ZXhfcG9zdGZvcmtfcGFyZW50KHRzZG4sCisJCSAgICAmYmFja2dyb3VuZF90 aHJlYWRfaW5mb1tpXS5tdHgpOworCX0KKwltYWxsb2NfbXV0ZXhfcG9zdGZvcmtfcGFyZW50KHRz ZG4sICZiYWNrZ3JvdW5kX3RocmVhZF9sb2NrKTsKK30KKwordm9pZAorYmFja2dyb3VuZF90aHJl YWRfcG9zdGZvcmtfY2hpbGQodHNkbl90ICp0c2RuKSB7CisJZm9yICh1bnNpZ25lZCBpID0gMDsg aSA8IG1heF9iYWNrZ3JvdW5kX3RocmVhZHM7IGkrKykgeworCQltYWxsb2NfbXV0ZXhfcG9zdGZv cmtfY2hpbGQodHNkbiwKKwkJICAgICZiYWNrZ3JvdW5kX3RocmVhZF9pbmZvW2ldLm10eCk7CisJ fQorCW1hbGxvY19tdXRleF9wb3N0Zm9ya19jaGlsZCh0c2RuLCAmYmFja2dyb3VuZF90aHJlYWRf bG9jayk7CisJaWYgKCFiYWNrZ3JvdW5kX3RocmVhZF9lbmFibGVkX2F0X2ZvcmspIHsKKwkJcmV0 dXJuOworCX0KKworCS8qIENsZWFyIGJhY2tncm91bmRfdGhyZWFkIHN0YXRlIChyZXNldCB0byBk aXNhYmxlZCBmb3IgY2hpbGQpLiAqLworCW1hbGxvY19tdXRleF9sb2NrKHRzZG4sICZiYWNrZ3Jv dW5kX3RocmVhZF9sb2NrKTsKKwluX2JhY2tncm91bmRfdGhyZWFkcyA9IDA7CisJYmFja2dyb3Vu ZF90aHJlYWRfZW5hYmxlZF9zZXQodHNkbiwgZmFsc2UpOworCWZvciAodW5zaWduZWQgaSA9IDA7 IGkgPCBtYXhfYmFja2dyb3VuZF90aHJlYWRzOyBpKyspIHsKKwkJYmFja2dyb3VuZF90aHJlYWRf aW5mb190ICppbmZvID0gJmJhY2tncm91bmRfdGhyZWFkX2luZm9baV07CisJCW1hbGxvY19tdXRl eF9sb2NrKHRzZG4sICZpbmZvLT5tdHgpOworCQlpbmZvLT5zdGF0ZSA9IGJhY2tncm91bmRfdGhy ZWFkX3N0b3BwZWQ7CisJCWludCByZXQgPSBwdGhyZWFkX2NvbmRfaW5pdCgmaW5mby0+Y29uZCwg TlVMTCk7CisJCWFzc2VydChyZXQgPT0gMCk7CisJCWJhY2tncm91bmRfdGhyZWFkX2luZm9faW5p dCh0c2RuLCBpbmZvKTsKKwkJbWFsbG9jX211dGV4X3VubG9jayh0c2RuLCAmaW5mby0+bXR4KTsK Kwl9CisJbWFsbG9jX211dGV4X3VubG9jayh0c2RuLCAmYmFja2dyb3VuZF90aHJlYWRfbG9jayk7 Cit9CisKK2Jvb2wKK2JhY2tncm91bmRfdGhyZWFkX3N0YXRzX3JlYWQodHNkbl90ICp0c2RuLCBi YWNrZ3JvdW5kX3RocmVhZF9zdGF0c190ICpzdGF0cykgeworCWFzc2VydChjb25maWdfc3RhdHMp OworCW1hbGxvY19tdXRleF9sb2NrKHRzZG4sICZiYWNrZ3JvdW5kX3RocmVhZF9sb2NrKTsKKwlp ZiAoIWJhY2tncm91bmRfdGhyZWFkX2VuYWJsZWQoKSkgeworCQltYWxsb2NfbXV0ZXhfdW5sb2Nr KHRzZG4sICZiYWNrZ3JvdW5kX3RocmVhZF9sb2NrKTsKKwkJcmV0dXJuIHRydWU7CisJfQorCisJ bnN0aW1lX2luaXRfemVybygmc3RhdHMtPnJ1bl9pbnRlcnZhbCk7CisJbWVtc2V0KCZzdGF0cy0+ bWF4X2NvdW50ZXJfcGVyX2JnX3RoZCwgMCwgc2l6ZW9mKG11dGV4X3Byb2ZfZGF0YV90KSk7CisK Kwl1aW50NjRfdCBudW1fcnVucyA9IDA7CisJc3RhdHMtPm51bV90aHJlYWRzID0gbl9iYWNrZ3Jv dW5kX3RocmVhZHM7CisJZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1heF9iYWNrZ3JvdW5kX3Ro cmVhZHM7IGkrKykgeworCQliYWNrZ3JvdW5kX3RocmVhZF9pbmZvX3QgKmluZm8gPSAmYmFja2dy b3VuZF90aHJlYWRfaW5mb1tpXTsKKwkJaWYgKG1hbGxvY19tdXRleF90cnlsb2NrKHRzZG4sICZp bmZvLT5tdHgpKSB7CisJCQkvKgorCQkJICogRWFjaCBiYWNrZ3JvdW5kIHRocmVhZCBydW4gbWF5 IHRha2UgYSBsb25nIHRpbWU7CisJCQkgKiBhdm9pZCB3YWl0aW5nIG9uIHRoZSBzdGF0cyBpZiB0 aGUgdGhyZWFkIGlzIGFjdGl2ZS4KKwkJCSAqLworCQkJY29udGludWU7CisJCX0KKwkJaWYgKGlu Zm8tPnN0YXRlICE9IGJhY2tncm91bmRfdGhyZWFkX3N0b3BwZWQpIHsKKwkJCW51bV9ydW5zICs9 IGluZm8tPnRvdF9uX3J1bnM7CisJCQluc3RpbWVfYWRkKCZzdGF0cy0+cnVuX2ludGVydmFsLCAm aW5mby0+dG90X3NsZWVwX3RpbWUpOworCQkJbWFsbG9jX211dGV4X3Byb2ZfbWF4X3VwZGF0ZSh0 c2RuLAorCQkJICAgICZzdGF0cy0+bWF4X2NvdW50ZXJfcGVyX2JnX3RoZCwgJmluZm8tPm10eCk7 CisJCX0KKwkJbWFsbG9jX211dGV4X3VubG9jayh0c2RuLCAmaW5mby0+bXR4KTsKKwl9CisJc3Rh dHMtPm51bV9ydW5zID0gbnVtX3J1bnM7CisJaWYgKG51bV9ydW5zID4gMCkgeworCQluc3RpbWVf aWRpdmlkZSgmc3RhdHMtPnJ1bl9pbnRlcnZhbCwgbnVtX3J1bnMpOworCX0KKwltYWxsb2NfbXV0 ZXhfdW5sb2NrKHRzZG4sICZiYWNrZ3JvdW5kX3RocmVhZF9sb2NrKTsKKworCXJldHVybiBmYWxz ZTsKK30KKworI3VuZGVmIEJBQ0tHUk9VTkRfVEhSRUFEX05QQUdFU19USFJFU0hPTEQKKyN1bmRl ZiBCSUxMSU9OCisjdW5kZWYgQkFDS0dST1VORF9USFJFQURfTUlOX0lOVEVSVkFMX05TCisKKyNp ZmRlZiBKRU1BTExPQ19IQVZFX0RMU1lNCisjaW5jbHVkZSA8ZGxmY24uaD4KKyNlbmRpZgorCitz dGF0aWMgYm9vbAorcHRocmVhZF9jcmVhdGVfZnB0cl9pbml0KHZvaWQpIHsKKwlpZiAocHRocmVh ZF9jcmVhdGVfZnB0ciAhPSBOVUxMKSB7CisJCXJldHVybiBmYWxzZTsKKwl9CisJLyoKKwkgKiBU cnkgdGhlIG5leHQgc3ltYm9sIGZpcnN0LCBiZWNhdXNlIDEpIHdoZW4gdXNlIGxhenlfbG9jayB3 ZSBoYXZlIGEKKwkgKiB3cmFwcGVyIGZvciBwdGhyZWFkX2NyZWF0ZTsgYW5kIDIpIGFwcGxpY2F0 aW9uIG1heSBkZWZpbmUgaXRzIG93bgorCSAqIHdyYXBwZXIgYXMgd2VsbCAoYW5kIGNhbiBjYWxs IG1hbGxvYyB3aXRoaW4gdGhlIHdyYXBwZXIpLgorCSAqLworI2lmZGVmIEpFTUFMTE9DX0hBVkVf RExTWU0KKwlwdGhyZWFkX2NyZWF0ZV9mcHRyID0gZGxzeW0oUlRMRF9ORVhULCAicHRocmVhZF9j cmVhdGUiKTsKKyNlbHNlCisJcHRocmVhZF9jcmVhdGVfZnB0ciA9IE5VTEw7CisjZW5kaWYKKwlp ZiAocHRocmVhZF9jcmVhdGVfZnB0ciA9PSBOVUxMKSB7CisJCWlmIChjb25maWdfbGF6eV9sb2Nr KSB7CisJCQltYWxsb2Nfd3JpdGUoIjxqZW1hbGxvYz46IEVycm9yIGluIGRsc3ltKFJUTERfTkVY VCwgIgorCQkJICAgICJcInB0aHJlYWRfY3JlYXRlXCIpXG4iKTsKKwkJCWFib3J0KCk7CisJCX0g ZWxzZSB7CisJCQkvKiBGYWxsIGJhY2sgdG8gdGhlIGRlZmF1bHQgc3ltYm9sLiAqLworCQkJcHRo cmVhZF9jcmVhdGVfZnB0ciA9IHB0aHJlYWRfY3JlYXRlOworCQl9CisJfQorCisJcmV0dXJuIGZh bHNlOworfQorCisvKgorICogV2hlbiBsYXp5IGxvY2sgaXMgZW5hYmxlZCwgd2UgbmVlZCB0byBt YWtlIHN1cmUgc2V0dGluZyBpc3RocmVhZGVkIGJlZm9yZQorICogdGFraW5nIGFueSBiYWNrZ3Jv dW5kX3RocmVhZCBsb2Nrcy4gIFRoaXMgaXMgY2FsbGVkIGVhcmx5IGluIGN0bCAoaW5zdGVhZCBv ZgorICogd2FpdCBmb3IgdGhlIHB0aHJlYWRfY3JlYXRlIGNhbGxzIHRvIHRyaWdnZXIpIGJlY2F1 c2UgdGhlIG11dGV4IGlzIHJlcXVpcmVkCisgKiBiZWZvcmUgY3JlYXRpbmcgYmFja2dyb3VuZCB0 aHJlYWRzLgorICovCit2b2lkCitiYWNrZ3JvdW5kX3RocmVhZF9jdGxfaW5pdCh0c2RuX3QgKnRz ZG4pIHsKKwltYWxsb2NfbXV0ZXhfYXNzZXJ0X25vdF9vd25lcih0c2RuLCAmYmFja2dyb3VuZF90 aHJlYWRfbG9jayk7CisjaWZkZWYgSkVNQUxMT0NfUFRIUkVBRF9DUkVBVEVfV1JBUFBFUgorCXB0 aHJlYWRfY3JlYXRlX2ZwdHJfaW5pdCgpOworCXB0aHJlYWRfY3JlYXRlX3dyYXBwZXJfaW5pdCgp OworI2VuZGlmCit9CisKKyNlbmRpZiAvKiBkZWZpbmVkKEpFTUFMTE9DX0JBQ0tHUk9VTkRfVEhS RUFEKSAqLworCitib29sCitiYWNrZ3JvdW5kX3RocmVhZF9ib290MCh2b2lkKSB7CisJaWYgKCFo YXZlX2JhY2tncm91bmRfdGhyZWFkICYmIG9wdF9iYWNrZ3JvdW5kX3RocmVhZCkgeworCQltYWxs b2NfcHJpbnRmKCI8amVtYWxsb2M+OiBvcHRpb24gYmFja2dyb3VuZF90aHJlYWQgY3VycmVudGx5 ICIKKwkJICAgICJzdXBwb3J0cyBwdGhyZWFkIG9ubHlcbiIpOworCQlyZXR1cm4gdHJ1ZTsKKwl9 CisjaWZkZWYgSkVNQUxMT0NfUFRIUkVBRF9DUkVBVEVfV1JBUFBFUgorCWlmICgoY29uZmlnX2xh enlfbG9jayB8fCBvcHRfYmFja2dyb3VuZF90aHJlYWQpICYmCisJICAgIHB0aHJlYWRfY3JlYXRl X2ZwdHJfaW5pdCgpKSB7CisJCXJldHVybiB0cnVlOworCX0KKyNlbmRpZgorCXJldHVybiBmYWxz ZTsKK30KKworYm9vbAorYmFja2dyb3VuZF90aHJlYWRfYm9vdDEodHNkbl90ICp0c2RuLCBiYXNl X3QgKmJhc2UpIHsKKyNpZmRlZiBKRU1BTExPQ19CQUNLR1JPVU5EX1RIUkVBRAorCWFzc2VydCho YXZlX2JhY2tncm91bmRfdGhyZWFkKTsKKwlhc3NlcnQobmFyZW5hc190b3RhbF9nZXQoKSA+IDAp OworCisJaWYgKG9wdF9tYXhfYmFja2dyb3VuZF90aHJlYWRzID4gTUFYX0JBQ0tHUk9VTkRfVEhS RUFEX0xJTUlUKSB7CisJCW9wdF9tYXhfYmFja2dyb3VuZF90aHJlYWRzID0gREVGQVVMVF9OVU1f QkFDS0dST1VORF9USFJFQUQ7CisJfQorCW1heF9iYWNrZ3JvdW5kX3RocmVhZHMgPSBvcHRfbWF4 X2JhY2tncm91bmRfdGhyZWFkczsKKworCWJhY2tncm91bmRfdGhyZWFkX2VuYWJsZWRfc2V0KHRz ZG4sIG9wdF9iYWNrZ3JvdW5kX3RocmVhZCk7CisJaWYgKG1hbGxvY19tdXRleF9pbml0KCZiYWNr Z3JvdW5kX3RocmVhZF9sb2NrLAorCSAgICAiYmFja2dyb3VuZF90aHJlYWRfZ2xvYmFsIiwKKwkg ICAgV0lUTkVTU19SQU5LX0JBQ0tHUk9VTkRfVEhSRUFEX0dMT0JBTCwKKwkgICAgbWFsbG9jX211 dGV4X3JhbmtfZXhjbHVzaXZlKSkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwliYWNrZ3JvdW5k X3RocmVhZF9pbmZvID0gKGJhY2tncm91bmRfdGhyZWFkX2luZm9fdCAqKWJhc2VfYWxsb2ModHNk biwKKwkgICAgYmFzZSwgb3B0X21heF9iYWNrZ3JvdW5kX3RocmVhZHMgKgorCSAgICBzaXplb2Yo YmFja2dyb3VuZF90aHJlYWRfaW5mb190KSwgQ0FDSEVMSU5FKTsKKwlpZiAoYmFja2dyb3VuZF90 aHJlYWRfaW5mbyA9PSBOVUxMKSB7CisJCXJldHVybiB0cnVlOworCX0KKworCWZvciAodW5zaWdu ZWQgaSA9IDA7IGkgPCBtYXhfYmFja2dyb3VuZF90aHJlYWRzOyBpKyspIHsKKwkJYmFja2dyb3Vu ZF90aHJlYWRfaW5mb190ICppbmZvID0gJmJhY2tncm91bmRfdGhyZWFkX2luZm9baV07CisJCS8q IFRocmVhZCBtdXRleCBpcyByYW5rX2luY2x1c2l2ZSBiZWNhdXNlIG9mIHRocmVhZDAuICovCisJ CWlmIChtYWxsb2NfbXV0ZXhfaW5pdCgmaW5mby0+bXR4LCAiYmFja2dyb3VuZF90aHJlYWQiLAor CQkgICAgV0lUTkVTU19SQU5LX0JBQ0tHUk9VTkRfVEhSRUFELAorCQkgICAgbWFsbG9jX211dGV4 X2FkZHJlc3Nfb3JkZXJlZCkpIHsKKwkJCXJldHVybiB0cnVlOworCQl9CisJCWlmIChwdGhyZWFk X2NvbmRfaW5pdCgmaW5mby0+Y29uZCwgTlVMTCkpIHsKKwkJCXJldHVybiB0cnVlOworCQl9CisJ CW1hbGxvY19tdXRleF9sb2NrKHRzZG4sICZpbmZvLT5tdHgpOworCQlpbmZvLT5zdGF0ZSA9IGJh Y2tncm91bmRfdGhyZWFkX3N0b3BwZWQ7CisJCWJhY2tncm91bmRfdGhyZWFkX2luZm9faW5pdCh0 c2RuLCBpbmZvKTsKKwkJbWFsbG9jX211dGV4X3VubG9jayh0c2RuLCAmaW5mby0+bXR4KTsKKwl9 CisjZW5kaWYKKworCXJldHVybiBmYWxzZTsKK30KCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0z LjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9zcmMvYmFzZS5jIGIvMzg5LWRzLWJhc2UtMy4zLjAt YnVpbGQvamVtYWxsb2MtNS4zLjAvc3JjL2Jhc2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwLi43ZjRkNjc1Ci0tLSAvZGV2L251bGwKKysrIGIvMzg5LWRzLWJhc2UtMy4zLjAt YnVpbGQvamVtYWxsb2MtNS4zLjAvc3JjL2Jhc2UuYwpAQCAtMCwwICsxLDUyOSBAQAorI2luY2x1 ZGUgImplbWFsbG9jL2ludGVybmFsL2plbWFsbG9jX3ByZWFtYmxlLmgiCisjaW5jbHVkZSAiamVt YWxsb2MvaW50ZXJuYWwvamVtYWxsb2NfaW50ZXJuYWxfaW5jbHVkZXMuaCIKKworI2luY2x1ZGUg ImplbWFsbG9jL2ludGVybmFsL2Fzc2VydC5oIgorI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFs L2V4dGVudF9tbWFwLmgiCisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvbXV0ZXguaCIKKyNp bmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9zei5oIgorCisvKgorICogSW4gYXV0byBtb2RlLCBh cmVuYXMgc3dpdGNoIHRvIGh1Z2UgcGFnZXMgZm9yIHRoZSBiYXNlIGFsbG9jYXRvciBvbiB0aGUK KyAqIHNlY29uZCBiYXNlIGJsb2NrLiAgYTAgc3dpdGNoZXMgdG8gdGhwIG9uIHRoZSA1dGggYmxv Y2sgKGFmdGVyIDIwIG1lZ2FieXRlcworICogb2YgbWV0YWRhdGEpLCBzaW5jZSBtb3JlIG1ldGFk YXRhIChlLmcuIHJ0cmVlIG5vZGVzKSBjb21lIGZyb20gYTAncyBiYXNlLgorICovCisKKyNkZWZp bmUgQkFTRV9BVVRPX1RIUF9USFJFU0hPTEQgICAgMgorI2RlZmluZSBCQVNFX0FVVE9fVEhQX1RI UkVTSE9MRF9BMCA1CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBEYXRhLiAqLworCitz dGF0aWMgYmFzZV90ICpiMDsKKworbWV0YWRhdGFfdGhwX21vZGVfdCBvcHRfbWV0YWRhdGFfdGhw ID0gTUVUQURBVEFfVEhQX0RFRkFVTFQ7CisKK2NvbnN0IGNoYXIgKm1ldGFkYXRhX3RocF9tb2Rl X25hbWVzW10gPSB7CisJImRpc2FibGVkIiwKKwkiYXV0byIsCisJImFsd2F5cyIKK307CisKKy8q KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbmxpbmUgYm9vbAorbWV0YWRhdGFfdGhw X21hZHZpc2Uodm9pZCkgeworCXJldHVybiAobWV0YWRhdGFfdGhwX2VuYWJsZWQoKSAmJgorCSAg ICAoaW5pdF9zeXN0ZW1fdGhwX21vZGUgPT0gdGhwX21vZGVfZGVmYXVsdCkpOworfQorCitzdGF0 aWMgdm9pZCAqCitiYXNlX21hcCh0c2RuX3QgKnRzZG4sIGVob29rc190ICplaG9va3MsIHVuc2ln bmVkIGluZCwgc2l6ZV90IHNpemUpIHsKKwl2b2lkICphZGRyOworCWJvb2wgemVybyA9IHRydWU7 CisJYm9vbCBjb21taXQgPSB0cnVlOworCisJLyogVXNlIGh1Z2UgcGFnZSBzaXplcyBhbmQgYWxp Z25tZW50IHJlZ2FyZGxlc3Mgb2Ygb3B0X21ldGFkYXRhX3RocC4gKi8KKwlhc3NlcnQoc2l6ZSA9 PSBIVUdFUEFHRV9DRUlMSU5HKHNpemUpKTsKKwlzaXplX3QgYWxpZ25tZW50ID0gSFVHRVBBR0U7 CisJaWYgKGVob29rc19hcmVfZGVmYXVsdChlaG9va3MpKSB7CisJCWFkZHIgPSBleHRlbnRfYWxs b2NfbW1hcChOVUxMLCBzaXplLCBhbGlnbm1lbnQsICZ6ZXJvLCAmY29tbWl0KTsKKwkJaWYgKGhh dmVfbWFkdmlzZV9odWdlICYmIGFkZHIpIHsKKwkJCXBhZ2VzX3NldF90aHBfc3RhdGUoYWRkciwg c2l6ZSk7CisJCX0KKwl9IGVsc2UgeworCQlhZGRyID0gZWhvb2tzX2FsbG9jKHRzZG4sIGVob29r cywgTlVMTCwgc2l6ZSwgYWxpZ25tZW50LCAmemVybywKKwkJICAgICZjb21taXQpOworCX0KKwor CXJldHVybiBhZGRyOworfQorCitzdGF0aWMgdm9pZAorYmFzZV91bm1hcCh0c2RuX3QgKnRzZG4s IGVob29rc190ICplaG9va3MsIHVuc2lnbmVkIGluZCwgdm9pZCAqYWRkciwKKyAgICBzaXplX3Qg c2l6ZSkgeworCS8qCisJICogQ2FzY2FkZSB0aHJvdWdoIGRhbGxvYywgZGVjb21taXQsIHB1cmdl X2ZvcmNlZCwgYW5kIHB1cmdlX2xhenksCisJICogc3RvcHBpbmcgYXQgZmlyc3Qgc3VjY2Vzcy4g IFRoaXMgY2FzY2FkZSBpcyBwZXJmb3JtZWQgZm9yIGNvbnNpc3RlbmN5CisJICogd2l0aCB0aGUg Y2FzY2FkZSBpbiBleHRlbnRfZGFsbG9jX3dyYXBwZXIoKSBiZWNhdXNlIGFuIGFwcGxpY2F0aW9u J3MKKwkgKiBjdXN0b20gaG9va3MgbWF5IG5vdCBzdXBwb3J0IGUuZy4gZGFsbG9jLiAgVGhpcyBm dW5jdGlvbiBpcyBvbmx5IGV2ZXIKKwkgKiBjYWxsZWQgYXMgYSBzaWRlIGVmZmVjdCBvZiBhcmVu YSBkZXN0cnVjdGlvbiwgc28gYWx0aG91Z2ggaXQgbWlnaHQKKwkgKiBzZWVtIHBvaW50bGVzcyB0 byBkbyBhbnl0aGluZyBiZXNpZGVzIGRhbGxvYyBoZXJlLCB0aGUgYXBwbGljYXRpb24KKwkgKiBt YXkgaW4gZmFjdCB3YW50IHRoZSBlbmQgc3RhdGUgb2YgYWxsIGFzc29jaWF0ZWQgdmlydHVhbCBt ZW1vcnkgdG8gYmUKKwkgKiBpbiBzb21lIGNvbnNpc3RlbnQtYnV0LWFsbG9jYXRlZCBzdGF0ZS4K KwkgKi8KKwlpZiAoZWhvb2tzX2FyZV9kZWZhdWx0KGVob29rcykpIHsKKwkJaWYgKCFleHRlbnRf ZGFsbG9jX21tYXAoYWRkciwgc2l6ZSkpIHsKKwkJCWdvdG8gbGFiZWxfZG9uZTsKKwkJfQorCQlp ZiAoIXBhZ2VzX2RlY29tbWl0KGFkZHIsIHNpemUpKSB7CisJCQlnb3RvIGxhYmVsX2RvbmU7CisJ CX0KKwkJaWYgKCFwYWdlc19wdXJnZV9mb3JjZWQoYWRkciwgc2l6ZSkpIHsKKwkJCWdvdG8gbGFi ZWxfZG9uZTsKKwkJfQorCQlpZiAoIXBhZ2VzX3B1cmdlX2xhenkoYWRkciwgc2l6ZSkpIHsKKwkJ CWdvdG8gbGFiZWxfZG9uZTsKKwkJfQorCQkvKiBOb3RoaW5nIHdvcmtlZC4gIFRoaXMgc2hvdWxk IG5ldmVyIGhhcHBlbi4gKi8KKwkJbm90X3JlYWNoZWQoKTsKKwl9IGVsc2UgeworCQlpZiAoIWVo b29rc19kYWxsb2ModHNkbiwgZWhvb2tzLCBhZGRyLCBzaXplLCB0cnVlKSkgeworCQkJZ290byBs YWJlbF9kb25lOworCQl9CisJCWlmICghZWhvb2tzX2RlY29tbWl0KHRzZG4sIGVob29rcywgYWRk ciwgc2l6ZSwgMCwgc2l6ZSkpIHsKKwkJCWdvdG8gbGFiZWxfZG9uZTsKKwkJfQorCQlpZiAoIWVo b29rc19wdXJnZV9mb3JjZWQodHNkbiwgZWhvb2tzLCBhZGRyLCBzaXplLCAwLCBzaXplKSkgewor CQkJZ290byBsYWJlbF9kb25lOworCQl9CisJCWlmICghZWhvb2tzX3B1cmdlX2xhenkodHNkbiwg ZWhvb2tzLCBhZGRyLCBzaXplLCAwLCBzaXplKSkgeworCQkJZ290byBsYWJlbF9kb25lOworCQl9 CisJCS8qIE5vdGhpbmcgd29ya2VkLiAgVGhhdCdzIHRoZSBhcHBsaWNhdGlvbidzIHByb2JsZW0u ICovCisJfQorbGFiZWxfZG9uZToKKwlpZiAobWV0YWRhdGFfdGhwX21hZHZpc2UoKSkgeworCQkv KiBTZXQgTk9IVUdFUEFHRSBhZnRlciB1bm1hcCB0byBhdm9pZCBrZXJuZWwgZGVmcmFnLiAqLwor CQlhc3NlcnQoKCh1aW50cHRyX3QpYWRkciAmIEhVR0VQQUdFX01BU0spID09IDAgJiYKKwkJICAg IChzaXplICYgSFVHRVBBR0VfTUFTSykgPT0gMCk7CisJCXBhZ2VzX25vaHVnZShhZGRyLCBzaXpl KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiYXNlX2VkYXRhX2luaXQoc2l6ZV90ICpleHRlbnRf c25fbmV4dCwgZWRhdGFfdCAqZWRhdGEsIHZvaWQgKmFkZHIsCisgICAgc2l6ZV90IHNpemUpIHsK KwlzaXplX3Qgc247CisKKwlzbiA9ICpleHRlbnRfc25fbmV4dDsKKwkoKmV4dGVudF9zbl9uZXh0 KSsrOworCisJZWRhdGFfYmluaXQoZWRhdGEsIGFkZHIsIHNpemUsIHNuKTsKK30KKworc3RhdGlj IHNpemVfdAorYmFzZV9nZXRfbnVtX2Jsb2NrcyhiYXNlX3QgKmJhc2UsIGJvb2wgd2l0aF9uZXdf YmxvY2spIHsKKwliYXNlX2Jsb2NrX3QgKmIgPSBiYXNlLT5ibG9ja3M7CisJYXNzZXJ0KGIgIT0g TlVMTCk7CisKKwlzaXplX3Qgbl9ibG9ja3MgPSB3aXRoX25ld19ibG9jayA/IDIgOiAxOworCXdo aWxlIChiLT5uZXh0ICE9IE5VTEwpIHsKKwkJbl9ibG9ja3MrKzsKKwkJYiA9IGItPm5leHQ7CisJ fQorCisJcmV0dXJuIG5fYmxvY2tzOworfQorCitzdGF0aWMgdm9pZAorYmFzZV9hdXRvX3RocF9z d2l0Y2godHNkbl90ICp0c2RuLCBiYXNlX3QgKmJhc2UpIHsKKwlhc3NlcnQob3B0X21ldGFkYXRh X3RocCA9PSBtZXRhZGF0YV90aHBfYXV0byk7CisJbWFsbG9jX211dGV4X2Fzc2VydF9vd25lcih0 c2RuLCAmYmFzZS0+bXR4KTsKKwlpZiAoYmFzZS0+YXV0b190aHBfc3dpdGNoZWQpIHsKKwkJcmV0 dXJuOworCX0KKwkvKiBDYWxsZWQgd2hlbiBhZGRpbmcgYSBuZXcgYmxvY2suICovCisJYm9vbCBz aG91bGRfc3dpdGNoOworCWlmIChiYXNlX2luZF9nZXQoYmFzZSkgIT0gMCkgeworCQlzaG91bGRf c3dpdGNoID0gKGJhc2VfZ2V0X251bV9ibG9ja3MoYmFzZSwgdHJ1ZSkgPT0KKwkJICAgIEJBU0Vf QVVUT19USFBfVEhSRVNIT0xEKTsKKwl9IGVsc2UgeworCQlzaG91bGRfc3dpdGNoID0gKGJhc2Vf Z2V0X251bV9ibG9ja3MoYmFzZSwgdHJ1ZSkgPT0KKwkJICAgIEJBU0VfQVVUT19USFBfVEhSRVNI T0xEX0EwKTsKKwl9CisJaWYgKCFzaG91bGRfc3dpdGNoKSB7CisJCXJldHVybjsKKwl9CisKKwli YXNlLT5hdXRvX3RocF9zd2l0Y2hlZCA9IHRydWU7CisJYXNzZXJ0KCFjb25maWdfc3RhdHMgfHwg YmFzZS0+bl90aHAgPT0gMCk7CisJLyogTWFrZSB0aGUgaW5pdGlhbCBibG9ja3MgVEhQIGxhemls eS4gKi8KKwliYXNlX2Jsb2NrX3QgKmJsb2NrID0gYmFzZS0+YmxvY2tzOworCXdoaWxlIChibG9j ayAhPSBOVUxMKSB7CisJCWFzc2VydCgoYmxvY2stPnNpemUgJiBIVUdFUEFHRV9NQVNLKSA9PSAw KTsKKwkJcGFnZXNfaHVnZShibG9jaywgYmxvY2stPnNpemUpOworCQlpZiAoY29uZmlnX3N0YXRz KSB7CisJCQliYXNlLT5uX3RocCArPSBIVUdFUEFHRV9DRUlMSU5HKGJsb2NrLT5zaXplIC0KKwkJ CSAgICBlZGF0YV9ic2l6ZV9nZXQoJmJsb2NrLT5lZGF0YSkpID4+IExHX0hVR0VQQUdFOworCQl9 CisJCWJsb2NrID0gYmxvY2stPm5leHQ7CisJCWFzc2VydChibG9jayA9PSBOVUxMIHx8IChiYXNl X2luZF9nZXQoYmFzZSkgPT0gMCkpOworCX0KK30KKworc3RhdGljIHZvaWQgKgorYmFzZV9leHRl bnRfYnVtcF9hbGxvY19oZWxwZXIoZWRhdGFfdCAqZWRhdGEsIHNpemVfdCAqZ2FwX3NpemUsIHNp emVfdCBzaXplLAorICAgIHNpemVfdCBhbGlnbm1lbnQpIHsKKwl2b2lkICpyZXQ7CisKKwlhc3Nl cnQoYWxpZ25tZW50ID09IEFMSUdOTUVOVF9DRUlMSU5HKGFsaWdubWVudCwgUVVBTlRVTSkpOwor CWFzc2VydChzaXplID09IEFMSUdOTUVOVF9DRUlMSU5HKHNpemUsIGFsaWdubWVudCkpOworCisJ KmdhcF9zaXplID0gQUxJR05NRU5UX0NFSUxJTkcoKHVpbnRwdHJfdCllZGF0YV9hZGRyX2dldChl ZGF0YSksCisJICAgIGFsaWdubWVudCkgLSAodWludHB0cl90KWVkYXRhX2FkZHJfZ2V0KGVkYXRh KTsKKwlyZXQgPSAodm9pZCAqKSgodWludHB0cl90KWVkYXRhX2FkZHJfZ2V0KGVkYXRhKSArICpn YXBfc2l6ZSk7CisJYXNzZXJ0KGVkYXRhX2JzaXplX2dldChlZGF0YSkgPj0gKmdhcF9zaXplICsg c2l6ZSk7CisJZWRhdGFfYmluaXQoZWRhdGEsICh2b2lkICopKCh1aW50cHRyX3QpZWRhdGFfYWRk cl9nZXQoZWRhdGEpICsKKwkgICAgKmdhcF9zaXplICsgc2l6ZSksIGVkYXRhX2JzaXplX2dldChl ZGF0YSkgLSAqZ2FwX3NpemUgLSBzaXplLAorCSAgICBlZGF0YV9zbl9nZXQoZWRhdGEpKTsKKwly ZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZAorYmFzZV9leHRlbnRfYnVtcF9hbGxvY19wb3N0 KGJhc2VfdCAqYmFzZSwgZWRhdGFfdCAqZWRhdGEsIHNpemVfdCBnYXBfc2l6ZSwKKyAgICB2b2lk ICphZGRyLCBzaXplX3Qgc2l6ZSkgeworCWlmIChlZGF0YV9ic2l6ZV9nZXQoZWRhdGEpID4gMCkg eworCQkvKgorCQkgKiBDb21wdXRlIHRoZSBpbmRleCBmb3IgdGhlIGxhcmdlc3Qgc2l6ZSBjbGFz cyB0aGF0IGRvZXMgbm90CisJCSAqIGV4Y2VlZCBleHRlbnQncyBzaXplLgorCQkgKi8KKwkJc3pp bmRfdCBpbmRleF9mbG9vciA9CisJCSAgICBzel9zaXplMmluZGV4KGVkYXRhX2JzaXplX2dldChl ZGF0YSkgKyAxKSAtIDE7CisJCWVkYXRhX2hlYXBfaW5zZXJ0KCZiYXNlLT5hdmFpbFtpbmRleF9m bG9vcl0sIGVkYXRhKTsKKwl9CisKKwlpZiAoY29uZmlnX3N0YXRzKSB7CisJCWJhc2UtPmFsbG9j YXRlZCArPSBzaXplOworCQkvKgorCQkgKiBBZGQgb25lIFBBR0UgdG8gYmFzZV9yZXNpZGVudCBm b3IgZXZlcnkgcGFnZSBib3VuZGFyeSB0aGF0IGlzCisJCSAqIGNyb3NzZWQgYnkgdGhlIG5ldyBh bGxvY2F0aW9uLiBBZGp1c3Qgbl90aHAgc2ltaWxhcmx5IHdoZW4KKwkJICogbWV0YWRhdGFfdGhw IGlzIGVuYWJsZWQuCisJCSAqLworCQliYXNlLT5yZXNpZGVudCArPSBQQUdFX0NFSUxJTkcoKHVp bnRwdHJfdClhZGRyICsgc2l6ZSkgLQorCQkgICAgUEFHRV9DRUlMSU5HKCh1aW50cHRyX3QpYWRk ciAtIGdhcF9zaXplKTsKKwkJYXNzZXJ0KGJhc2UtPmFsbG9jYXRlZCA8PSBiYXNlLT5yZXNpZGVu dCk7CisJCWFzc2VydChiYXNlLT5yZXNpZGVudCA8PSBiYXNlLT5tYXBwZWQpOworCQlpZiAobWV0 YWRhdGFfdGhwX21hZHZpc2UoKSAmJiAob3B0X21ldGFkYXRhX3RocCA9PQorCQkgICAgbWV0YWRh dGFfdGhwX2Fsd2F5cyB8fCBiYXNlLT5hdXRvX3RocF9zd2l0Y2hlZCkpIHsKKwkJCWJhc2UtPm5f dGhwICs9IChIVUdFUEFHRV9DRUlMSU5HKCh1aW50cHRyX3QpYWRkciArIHNpemUpCisJCQkgICAg LSBIVUdFUEFHRV9DRUlMSU5HKCh1aW50cHRyX3QpYWRkciAtIGdhcF9zaXplKSkgPj4KKwkJCSAg ICBMR19IVUdFUEFHRTsKKwkJCWFzc2VydChiYXNlLT5tYXBwZWQgPj0gYmFzZS0+bl90aHAgPDwg TEdfSFVHRVBBR0UpOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCAqCitiYXNlX2V4dGVudF9i dW1wX2FsbG9jKGJhc2VfdCAqYmFzZSwgZWRhdGFfdCAqZWRhdGEsIHNpemVfdCBzaXplLAorICAg IHNpemVfdCBhbGlnbm1lbnQpIHsKKwl2b2lkICpyZXQ7CisJc2l6ZV90IGdhcF9zaXplOworCisJ cmV0ID0gYmFzZV9leHRlbnRfYnVtcF9hbGxvY19oZWxwZXIoZWRhdGEsICZnYXBfc2l6ZSwgc2l6 ZSwgYWxpZ25tZW50KTsKKwliYXNlX2V4dGVudF9idW1wX2FsbG9jX3Bvc3QoYmFzZSwgZWRhdGEs IGdhcF9zaXplLCByZXQsIHNpemUpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBBbGxvY2F0 ZSBhIGJsb2NrIG9mIHZpcnR1YWwgbWVtb3J5IHRoYXQgaXMgbGFyZ2UgZW5vdWdoIHRvIHN0YXJ0 IHdpdGggYQorICogYmFzZV9ibG9ja190IGhlYWRlciwgZm9sbG93ZWQgYnkgYW4gb2JqZWN0IG9m IHNwZWNpZmllZCBzaXplIGFuZCBhbGlnbm1lbnQuCisgKiBPbiBzdWNjZXNzIGEgcG9pbnRlciB0 byB0aGUgaW5pdGlhbGl6ZWQgYmFzZV9ibG9ja190IGhlYWRlciBpcyByZXR1cm5lZC4KKyAqLwor c3RhdGljIGJhc2VfYmxvY2tfdCAqCitiYXNlX2Jsb2NrX2FsbG9jKHRzZG5fdCAqdHNkbiwgYmFz ZV90ICpiYXNlLCBlaG9va3NfdCAqZWhvb2tzLCB1bnNpZ25lZCBpbmQsCisgICAgcHN6aW5kX3Qg KnBpbmRfbGFzdCwgc2l6ZV90ICpleHRlbnRfc25fbmV4dCwgc2l6ZV90IHNpemUsCisgICAgc2l6 ZV90IGFsaWdubWVudCkgeworCWFsaWdubWVudCA9IEFMSUdOTUVOVF9DRUlMSU5HKGFsaWdubWVu dCwgUVVBTlRVTSk7CisJc2l6ZV90IHVzaXplID0gQUxJR05NRU5UX0NFSUxJTkcoc2l6ZSwgYWxp Z25tZW50KTsKKwlzaXplX3QgaGVhZGVyX3NpemUgPSBzaXplb2YoYmFzZV9ibG9ja190KTsKKwlz aXplX3QgZ2FwX3NpemUgPSBBTElHTk1FTlRfQ0VJTElORyhoZWFkZXJfc2l6ZSwgYWxpZ25tZW50 KSAtCisJICAgIGhlYWRlcl9zaXplOworCS8qCisJICogQ3JlYXRlIGluY3JlYXNpbmdseSBsYXJn ZXIgYmxvY2tzIGluIG9yZGVyIHRvIGxpbWl0IHRoZSB0b3RhbCBudW1iZXIKKwkgKiBvZiBkaXNq b2ludCB2aXJ0dWFsIG1lbW9yeSByYW5nZXMuICBDaG9vc2UgdGhlIG5leHQgc2l6ZSBpbiB0aGUg cGFnZQorCSAqIHNpemUgY2xhc3Mgc2VyaWVzIChza2lwcGluZyBzaXplIGNsYXNzZXMgdGhhdCBh cmUgbm90IGEgbXVsdGlwbGUgb2YKKwkgKiBIVUdFUEFHRSksIG9yIGEgc2l6ZSBsYXJnZSBlbm91 Z2ggdG8gc2F0aXNmeSB0aGUgcmVxdWVzdGVkIHNpemUgYW5kCisJICogYWxpZ25tZW50LCB3aGlj aGV2ZXIgaXMgbGFyZ2VyLgorCSAqLworCXNpemVfdCBtaW5fYmxvY2tfc2l6ZSA9IEhVR0VQQUdF X0NFSUxJTkcoc3pfcHN6MnUoaGVhZGVyX3NpemUgKyBnYXBfc2l6ZQorCSAgICArIHVzaXplKSk7 CisJcHN6aW5kX3QgcGluZF9uZXh0ID0gKCpwaW5kX2xhc3QgKyAxIDwgc3pfcHN6MmluZChTQ19M QVJHRV9NQVhDTEFTUykpID8KKwkgICAgKnBpbmRfbGFzdCArIDEgOiAqcGluZF9sYXN0OworCXNp emVfdCBuZXh0X2Jsb2NrX3NpemUgPSBIVUdFUEFHRV9DRUlMSU5HKHN6X3BpbmQyc3oocGluZF9u ZXh0KSk7CisJc2l6ZV90IGJsb2NrX3NpemUgPSAobWluX2Jsb2NrX3NpemUgPiBuZXh0X2Jsb2Nr X3NpemUpID8gbWluX2Jsb2NrX3NpemUKKwkgICAgOiBuZXh0X2Jsb2NrX3NpemU7CisJYmFzZV9i bG9ja190ICpibG9jayA9IChiYXNlX2Jsb2NrX3QgKiliYXNlX21hcCh0c2RuLCBlaG9va3MsIGlu ZCwKKwkgICAgYmxvY2tfc2l6ZSk7CisJaWYgKGJsb2NrID09IE5VTEwpIHsKKwkJcmV0dXJuIE5V TEw7CisJfQorCisJaWYgKG1ldGFkYXRhX3RocF9tYWR2aXNlKCkpIHsKKwkJdm9pZCAqYWRkciA9 ICh2b2lkICopYmxvY2s7CisJCWFzc2VydCgoKHVpbnRwdHJfdClhZGRyICYgSFVHRVBBR0VfTUFT SykgPT0gMCAmJgorCQkgICAgKGJsb2NrX3NpemUgJiBIVUdFUEFHRV9NQVNLKSA9PSAwKTsKKwkJ aWYgKG9wdF9tZXRhZGF0YV90aHAgPT0gbWV0YWRhdGFfdGhwX2Fsd2F5cykgeworCQkJcGFnZXNf aHVnZShhZGRyLCBibG9ja19zaXplKTsKKwkJfSBlbHNlIGlmIChvcHRfbWV0YWRhdGFfdGhwID09 IG1ldGFkYXRhX3RocF9hdXRvICYmCisJCSAgICBiYXNlICE9IE5VTEwpIHsKKwkJCS8qIGJhc2Ug IT0gTlVMTCBpbmRpY2F0ZXMgdGhpcyBpcyBub3QgYSBuZXcgYmFzZS4gKi8KKwkJCW1hbGxvY19t dXRleF9sb2NrKHRzZG4sICZiYXNlLT5tdHgpOworCQkJYmFzZV9hdXRvX3RocF9zd2l0Y2godHNk biwgYmFzZSk7CisJCQlpZiAoYmFzZS0+YXV0b190aHBfc3dpdGNoZWQpIHsKKwkJCQlwYWdlc19o dWdlKGFkZHIsIGJsb2NrX3NpemUpOworCQkJfQorCQkJbWFsbG9jX211dGV4X3VubG9jayh0c2Ru LCAmYmFzZS0+bXR4KTsKKwkJfQorCX0KKworCSpwaW5kX2xhc3QgPSBzel9wc3oyaW5kKGJsb2Nr X3NpemUpOworCWJsb2NrLT5zaXplID0gYmxvY2tfc2l6ZTsKKwlibG9jay0+bmV4dCA9IE5VTEw7 CisJYXNzZXJ0KGJsb2NrX3NpemUgPj0gaGVhZGVyX3NpemUpOworCWJhc2VfZWRhdGFfaW5pdChl eHRlbnRfc25fbmV4dCwgJmJsb2NrLT5lZGF0YSwKKwkgICAgKHZvaWQgKikoKHVpbnRwdHJfdCli bG9jayArIGhlYWRlcl9zaXplKSwgYmxvY2tfc2l6ZSAtIGhlYWRlcl9zaXplKTsKKwlyZXR1cm4g YmxvY2s7Cit9CisKKy8qCisgKiBBbGxvY2F0ZSBhbiBleHRlbnQgdGhhdCBpcyBhdCBsZWFzdCBh cyBsYXJnZSBhcyBzcGVjaWZpZWQgc2l6ZSwgd2l0aAorICogc3BlY2lmaWVkIGFsaWdubWVudC4K KyAqLworc3RhdGljIGVkYXRhX3QgKgorYmFzZV9leHRlbnRfYWxsb2ModHNkbl90ICp0c2RuLCBi YXNlX3QgKmJhc2UsIHNpemVfdCBzaXplLCBzaXplX3QgYWxpZ25tZW50KSB7CisJbWFsbG9jX211 dGV4X2Fzc2VydF9vd25lcih0c2RuLCAmYmFzZS0+bXR4KTsKKworCWVob29rc190ICplaG9va3Mg PSBiYXNlX2Vob29rc19nZXRfZm9yX21ldGFkYXRhKGJhc2UpOworCS8qCisJICogRHJvcCBtdXRl eCBkdXJpbmcgYmFzZV9ibG9ja19hbGxvYygpLCBiZWNhdXNlIGFuIGV4dGVudCBob29rIHdpbGwg YmUKKwkgKiBjYWxsZWQuCisJICovCisJbWFsbG9jX211dGV4X3VubG9jayh0c2RuLCAmYmFzZS0+ bXR4KTsKKwliYXNlX2Jsb2NrX3QgKmJsb2NrID0gYmFzZV9ibG9ja19hbGxvYyh0c2RuLCBiYXNl LCBlaG9va3MsCisJICAgIGJhc2VfaW5kX2dldChiYXNlKSwgJmJhc2UtPnBpbmRfbGFzdCwgJmJh c2UtPmV4dGVudF9zbl9uZXh0LCBzaXplLAorCSAgICBhbGlnbm1lbnQpOworCW1hbGxvY19tdXRl eF9sb2NrKHRzZG4sICZiYXNlLT5tdHgpOworCWlmIChibG9jayA9PSBOVUxMKSB7CisJCXJldHVy biBOVUxMOworCX0KKwlibG9jay0+bmV4dCA9IGJhc2UtPmJsb2NrczsKKwliYXNlLT5ibG9ja3Mg PSBibG9jazsKKwlpZiAoY29uZmlnX3N0YXRzKSB7CisJCWJhc2UtPmFsbG9jYXRlZCArPSBzaXpl b2YoYmFzZV9ibG9ja190KTsKKwkJYmFzZS0+cmVzaWRlbnQgKz0gUEFHRV9DRUlMSU5HKHNpemVv ZihiYXNlX2Jsb2NrX3QpKTsKKwkJYmFzZS0+bWFwcGVkICs9IGJsb2NrLT5zaXplOworCQlpZiAo bWV0YWRhdGFfdGhwX21hZHZpc2UoKSAmJgorCQkgICAgIShvcHRfbWV0YWRhdGFfdGhwID09IG1l dGFkYXRhX3RocF9hdXRvCisJCSAgICAgICYmICFiYXNlLT5hdXRvX3RocF9zd2l0Y2hlZCkpIHsK KwkJCWFzc2VydChiYXNlLT5uX3RocCA+IDApOworCQkJYmFzZS0+bl90aHAgKz0gSFVHRVBBR0Vf Q0VJTElORyhzaXplb2YoYmFzZV9ibG9ja190KSkgPj4KKwkJCSAgICBMR19IVUdFUEFHRTsKKwkJ fQorCQlhc3NlcnQoYmFzZS0+YWxsb2NhdGVkIDw9IGJhc2UtPnJlc2lkZW50KTsKKwkJYXNzZXJ0 KGJhc2UtPnJlc2lkZW50IDw9IGJhc2UtPm1hcHBlZCk7CisJCWFzc2VydChiYXNlLT5uX3RocCA8 PCBMR19IVUdFUEFHRSA8PSBiYXNlLT5tYXBwZWQpOworCX0KKwlyZXR1cm4gJmJsb2NrLT5lZGF0 YTsKK30KKworYmFzZV90ICoKK2IwZ2V0KHZvaWQpIHsKKwlyZXR1cm4gYjA7Cit9CisKK2Jhc2Vf dCAqCitiYXNlX25ldyh0c2RuX3QgKnRzZG4sIHVuc2lnbmVkIGluZCwgY29uc3QgZXh0ZW50X2hv b2tzX3QgKmV4dGVudF9ob29rcywKKyAgICBib29sIG1ldGFkYXRhX3VzZV9ob29rcykgeworCXBz emluZF90IHBpbmRfbGFzdCA9IDA7CisJc2l6ZV90IGV4dGVudF9zbl9uZXh0ID0gMDsKKworCS8q CisJICogVGhlIGJhc2Ugd2lsbCBjb250YWluIHRoZSBlaG9va3MgZXZlbnR1YWxseSwgYnV0IGl0 IGl0c2VsZiBpcworCSAqIGFsbG9jYXRlZCB1c2luZyB0aGVtLiAgU28gd2UgdXNlIHNvbWUgc3Rh Y2sgZWhvb2tzIHRvIGJvb3RzdHJhcCBpdHMKKwkgKiBtZW1vcnksIGFuZCB0aGVuIGluaXRpYWxp emUgdGhlIGVob29rcyB3aXRoaW4gdGhlIGJhc2VfdC4KKwkgKi8KKwllaG9va3NfdCBmYWtlX2Vo b29rczsKKwllaG9va3NfaW5pdCgmZmFrZV9laG9va3MsIG1ldGFkYXRhX3VzZV9ob29rcyA/CisJ ICAgIChleHRlbnRfaG9va3NfdCAqKWV4dGVudF9ob29rcyA6CisJICAgIChleHRlbnRfaG9va3Nf dCAqKSZlaG9va3NfZGVmYXVsdF9leHRlbnRfaG9va3MsIGluZCk7CisKKwliYXNlX2Jsb2NrX3Qg KmJsb2NrID0gYmFzZV9ibG9ja19hbGxvYyh0c2RuLCBOVUxMLCAmZmFrZV9laG9va3MsIGluZCwK KwkgICAgJnBpbmRfbGFzdCwgJmV4dGVudF9zbl9uZXh0LCBzaXplb2YoYmFzZV90KSwgUVVBTlRV TSk7CisJaWYgKGJsb2NrID09IE5VTEwpIHsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJc2l6ZV90 IGdhcF9zaXplOworCXNpemVfdCBiYXNlX2FsaWdubWVudCA9IENBQ0hFTElORTsKKwlzaXplX3Qg YmFzZV9zaXplID0gQUxJR05NRU5UX0NFSUxJTkcoc2l6ZW9mKGJhc2VfdCksIGJhc2VfYWxpZ25t ZW50KTsKKwliYXNlX3QgKmJhc2UgPSAoYmFzZV90ICopYmFzZV9leHRlbnRfYnVtcF9hbGxvY19o ZWxwZXIoJmJsb2NrLT5lZGF0YSwKKwkgICAgJmdhcF9zaXplLCBiYXNlX3NpemUsIGJhc2VfYWxp Z25tZW50KTsKKwllaG9va3NfaW5pdCgmYmFzZS0+ZWhvb2tzLCAoZXh0ZW50X2hvb2tzX3QgKill eHRlbnRfaG9va3MsIGluZCk7CisJZWhvb2tzX2luaXQoJmJhc2UtPmVob29rc19iYXNlLCBtZXRh ZGF0YV91c2VfaG9va3MgPworCSAgICAoZXh0ZW50X2hvb2tzX3QgKilleHRlbnRfaG9va3MgOgor CSAgICAoZXh0ZW50X2hvb2tzX3QgKikmZWhvb2tzX2RlZmF1bHRfZXh0ZW50X2hvb2tzLCBpbmQp OworCWlmIChtYWxsb2NfbXV0ZXhfaW5pdCgmYmFzZS0+bXR4LCAiYmFzZSIsIFdJVE5FU1NfUkFO S19CQVNFLAorCSAgICBtYWxsb2NfbXV0ZXhfcmFua19leGNsdXNpdmUpKSB7CisJCWJhc2VfdW5t YXAodHNkbiwgJmZha2VfZWhvb2tzLCBpbmQsIGJsb2NrLCBibG9jay0+c2l6ZSk7CisJCXJldHVy biBOVUxMOworCX0KKwliYXNlLT5waW5kX2xhc3QgPSBwaW5kX2xhc3Q7CisJYmFzZS0+ZXh0ZW50 X3NuX25leHQgPSBleHRlbnRfc25fbmV4dDsKKwliYXNlLT5ibG9ja3MgPSBibG9jazsKKwliYXNl LT5hdXRvX3RocF9zd2l0Y2hlZCA9IGZhbHNlOworCWZvciAoc3ppbmRfdCBpID0gMDsgaSA8IFND X05TSVpFUzsgaSsrKSB7CisJCWVkYXRhX2hlYXBfbmV3KCZiYXNlLT5hdmFpbFtpXSk7CisJfQor CWlmIChjb25maWdfc3RhdHMpIHsKKwkJYmFzZS0+YWxsb2NhdGVkID0gc2l6ZW9mKGJhc2VfYmxv Y2tfdCk7CisJCWJhc2UtPnJlc2lkZW50ID0gUEFHRV9DRUlMSU5HKHNpemVvZihiYXNlX2Jsb2Nr X3QpKTsKKwkJYmFzZS0+bWFwcGVkID0gYmxvY2stPnNpemU7CisJCWJhc2UtPm5fdGhwID0gKG9w dF9tZXRhZGF0YV90aHAgPT0gbWV0YWRhdGFfdGhwX2Fsd2F5cykgJiYKKwkJICAgIG1ldGFkYXRh X3RocF9tYWR2aXNlKCkgPyBIVUdFUEFHRV9DRUlMSU5HKHNpemVvZihiYXNlX2Jsb2NrX3QpKQor CQkgICAgPj4gTEdfSFVHRVBBR0UgOiAwOworCQlhc3NlcnQoYmFzZS0+YWxsb2NhdGVkIDw9IGJh c2UtPnJlc2lkZW50KTsKKwkJYXNzZXJ0KGJhc2UtPnJlc2lkZW50IDw9IGJhc2UtPm1hcHBlZCk7 CisJCWFzc2VydChiYXNlLT5uX3RocCA8PCBMR19IVUdFUEFHRSA8PSBiYXNlLT5tYXBwZWQpOwor CX0KKwliYXNlX2V4dGVudF9idW1wX2FsbG9jX3Bvc3QoYmFzZSwgJmJsb2NrLT5lZGF0YSwgZ2Fw X3NpemUsIGJhc2UsCisJICAgIGJhc2Vfc2l6ZSk7CisKKwlyZXR1cm4gYmFzZTsKK30KKwordm9p ZAorYmFzZV9kZWxldGUodHNkbl90ICp0c2RuLCBiYXNlX3QgKmJhc2UpIHsKKwllaG9va3NfdCAq ZWhvb2tzID0gYmFzZV9laG9va3NfZ2V0X2Zvcl9tZXRhZGF0YShiYXNlKTsKKwliYXNlX2Jsb2Nr X3QgKm5leHQgPSBiYXNlLT5ibG9ja3M7CisJZG8geworCQliYXNlX2Jsb2NrX3QgKmJsb2NrID0g bmV4dDsKKwkJbmV4dCA9IGJsb2NrLT5uZXh0OworCQliYXNlX3VubWFwKHRzZG4sIGVob29rcywg YmFzZV9pbmRfZ2V0KGJhc2UpLCBibG9jaywKKwkJICAgIGJsb2NrLT5zaXplKTsKKwl9IHdoaWxl IChuZXh0ICE9IE5VTEwpOworfQorCitlaG9va3NfdCAqCitiYXNlX2Vob29rc19nZXQoYmFzZV90 ICpiYXNlKSB7CisJcmV0dXJuICZiYXNlLT5laG9va3M7Cit9CisKK2Vob29rc190ICoKK2Jhc2Vf ZWhvb2tzX2dldF9mb3JfbWV0YWRhdGEoYmFzZV90ICpiYXNlKSB7CisJcmV0dXJuICZiYXNlLT5l aG9va3NfYmFzZTsKK30KKworZXh0ZW50X2hvb2tzX3QgKgorYmFzZV9leHRlbnRfaG9va3Nfc2V0 KGJhc2VfdCAqYmFzZSwgZXh0ZW50X2hvb2tzX3QgKmV4dGVudF9ob29rcykgeworCWV4dGVudF9o b29rc190ICpvbGRfZXh0ZW50X2hvb2tzID0KKwkgICAgZWhvb2tzX2dldF9leHRlbnRfaG9va3Nf cHRyKCZiYXNlLT5laG9va3MpOworCWVob29rc19pbml0KCZiYXNlLT5laG9va3MsIGV4dGVudF9o b29rcywgZWhvb2tzX2luZF9nZXQoJmJhc2UtPmVob29rcykpOworCXJldHVybiBvbGRfZXh0ZW50 X2hvb2tzOworfQorCitzdGF0aWMgdm9pZCAqCitiYXNlX2FsbG9jX2ltcGwodHNkbl90ICp0c2Ru LCBiYXNlX3QgKmJhc2UsIHNpemVfdCBzaXplLCBzaXplX3QgYWxpZ25tZW50LAorICAgIHNpemVf dCAqZXNuKSB7CisJYWxpZ25tZW50ID0gUVVBTlRVTV9DRUlMSU5HKGFsaWdubWVudCk7CisJc2l6 ZV90IHVzaXplID0gQUxJR05NRU5UX0NFSUxJTkcoc2l6ZSwgYWxpZ25tZW50KTsKKwlzaXplX3Qg YXNpemUgPSB1c2l6ZSArIGFsaWdubWVudCAtIFFVQU5UVU07CisKKwllZGF0YV90ICplZGF0YSA9 IE5VTEw7CisJbWFsbG9jX211dGV4X2xvY2sodHNkbiwgJmJhc2UtPm10eCk7CisJZm9yIChzemlu ZF90IGkgPSBzel9zaXplMmluZGV4KGFzaXplKTsgaSA8IFNDX05TSVpFUzsgaSsrKSB7CisJCWVk YXRhID0gZWRhdGFfaGVhcF9yZW1vdmVfZmlyc3QoJmJhc2UtPmF2YWlsW2ldKTsKKwkJaWYgKGVk YXRhICE9IE5VTEwpIHsKKwkJCS8qIFVzZSBleGlzdGluZyBzcGFjZS4gKi8KKwkJCWJyZWFrOwor CQl9CisJfQorCWlmIChlZGF0YSA9PSBOVUxMKSB7CisJCS8qIFRyeSB0byBhbGxvY2F0ZSBtb3Jl IHNwYWNlLiAqLworCQllZGF0YSA9IGJhc2VfZXh0ZW50X2FsbG9jKHRzZG4sIGJhc2UsIHVzaXpl LCBhbGlnbm1lbnQpOworCX0KKwl2b2lkICpyZXQ7CisJaWYgKGVkYXRhID09IE5VTEwpIHsKKwkJ cmV0ID0gTlVMTDsKKwkJZ290byBsYWJlbF9yZXR1cm47CisJfQorCisJcmV0ID0gYmFzZV9leHRl bnRfYnVtcF9hbGxvYyhiYXNlLCBlZGF0YSwgdXNpemUsIGFsaWdubWVudCk7CisJaWYgKGVzbiAh PSBOVUxMKSB7CisJCSplc24gPSAoc2l6ZV90KWVkYXRhX3NuX2dldChlZGF0YSk7CisJfQorbGFi ZWxfcmV0dXJuOgorCW1hbGxvY19tdXRleF91bmxvY2sodHNkbiwgJmJhc2UtPm10eCk7CisJcmV0 dXJuIHJldDsKK30KKworLyoKKyAqIGJhc2VfYWxsb2MoKSByZXR1cm5zIHplcm9lZCBtZW1vcnks IHdoaWNoIGlzIGFsd2F5cyBkZW1hbmQtemVyb2VkIGZvciB0aGUKKyAqIGF1dG8gYXJlbmFzLCBp biBvcmRlciB0byBtYWtlIG11bHRpLXBhZ2Ugc3BhcnNlIGRhdGEgc3RydWN0dXJlcyBzdWNoIGFz IHJhZGl4CisgKiB0cmVlIG5vZGVzIGVmZmljaWVudCB3aXRoIHJlc3BlY3QgdG8gcGh5c2ljYWwg bWVtb3J5IHVzYWdlLiAgVXBvbiBzdWNjZXNzIGEKKyAqIHBvaW50ZXIgdG8gYXQgbGVhc3Qgc2l6 ZSBieXRlcyB3aXRoIHNwZWNpZmllZCBhbGlnbm1lbnQgaXMgcmV0dXJuZWQuICBOb3RlCisgKiB0 aGF0IHNpemUgaXMgcm91bmRlZCB1cCB0byB0aGUgbmVhcmVzdCBtdWx0aXBsZSBvZiBhbGlnbm1l bnQgdG8gYXZvaWQgZmFsc2UKKyAqIHNoYXJpbmcuCisgKi8KK3ZvaWQgKgorYmFzZV9hbGxvYyh0 c2RuX3QgKnRzZG4sIGJhc2VfdCAqYmFzZSwgc2l6ZV90IHNpemUsIHNpemVfdCBhbGlnbm1lbnQp IHsKKwlyZXR1cm4gYmFzZV9hbGxvY19pbXBsKHRzZG4sIGJhc2UsIHNpemUsIGFsaWdubWVudCwg TlVMTCk7Cit9CisKK2VkYXRhX3QgKgorYmFzZV9hbGxvY19lZGF0YSh0c2RuX3QgKnRzZG4sIGJh c2VfdCAqYmFzZSkgeworCXNpemVfdCBlc247CisJZWRhdGFfdCAqZWRhdGEgPSBiYXNlX2FsbG9j X2ltcGwodHNkbiwgYmFzZSwgc2l6ZW9mKGVkYXRhX3QpLAorCSAgICBFREFUQV9BTElHTk1FTlQs ICZlc24pOworCWlmIChlZGF0YSA9PSBOVUxMKSB7CisJCXJldHVybiBOVUxMOworCX0KKwllZGF0 YV9lc25fc2V0KGVkYXRhLCBlc24pOworCXJldHVybiBlZGF0YTsKK30KKwordm9pZAorYmFzZV9z dGF0c19nZXQodHNkbl90ICp0c2RuLCBiYXNlX3QgKmJhc2UsIHNpemVfdCAqYWxsb2NhdGVkLCBz aXplX3QgKnJlc2lkZW50LAorICAgIHNpemVfdCAqbWFwcGVkLCBzaXplX3QgKm5fdGhwKSB7CisJ Y2Fzc2VydChjb25maWdfc3RhdHMpOworCisJbWFsbG9jX211dGV4X2xvY2sodHNkbiwgJmJhc2Ut Pm10eCk7CisJYXNzZXJ0KGJhc2UtPmFsbG9jYXRlZCA8PSBiYXNlLT5yZXNpZGVudCk7CisJYXNz ZXJ0KGJhc2UtPnJlc2lkZW50IDw9IGJhc2UtPm1hcHBlZCk7CisJKmFsbG9jYXRlZCA9IGJhc2Ut PmFsbG9jYXRlZDsKKwkqcmVzaWRlbnQgPSBiYXNlLT5yZXNpZGVudDsKKwkqbWFwcGVkID0gYmFz ZS0+bWFwcGVkOworCSpuX3RocCA9IGJhc2UtPm5fdGhwOworCW1hbGxvY19tdXRleF91bmxvY2so dHNkbiwgJmJhc2UtPm10eCk7Cit9CisKK3ZvaWQKK2Jhc2VfcHJlZm9yayh0c2RuX3QgKnRzZG4s IGJhc2VfdCAqYmFzZSkgeworCW1hbGxvY19tdXRleF9wcmVmb3JrKHRzZG4sICZiYXNlLT5tdHgp OworfQorCit2b2lkCitiYXNlX3Bvc3Rmb3JrX3BhcmVudCh0c2RuX3QgKnRzZG4sIGJhc2VfdCAq YmFzZSkgeworCW1hbGxvY19tdXRleF9wb3N0Zm9ya19wYXJlbnQodHNkbiwgJmJhc2UtPm10eCk7 Cit9CisKK3ZvaWQKK2Jhc2VfcG9zdGZvcmtfY2hpbGQodHNkbl90ICp0c2RuLCBiYXNlX3QgKmJh c2UpIHsKKwltYWxsb2NfbXV0ZXhfcG9zdGZvcmtfY2hpbGQodHNkbiwgJmJhc2UtPm10eCk7Cit9 CisKK2Jvb2wKK2Jhc2VfYm9vdCh0c2RuX3QgKnRzZG4pIHsKKwliMCA9IGJhc2VfbmV3KHRzZG4s IDAsIChleHRlbnRfaG9va3NfdCAqKSZlaG9va3NfZGVmYXVsdF9leHRlbnRfaG9va3MsCisJICAg IC8qIG1ldGFkYXRhX3VzZV9ob29rcyAqLyB0cnVlKTsKKwlyZXR1cm4gKGIwID09IE5VTEwpOwor fQoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Ny Yy9iaW4uYyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3NyYy9iaW4u YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTIwNDU4Ci0tLSAvZGV2L251 bGwKKysrIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvc3JjL2Jpbi5j CkBAIC0wLDAgKzEsNjkgQEAKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9qZW1hbGxvY19w cmVhbWJsZS5oIgorI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2plbWFsbG9jX2ludGVybmFs X2luY2x1ZGVzLmgiCisKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9hc3NlcnQuaCIKKyNp bmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9iaW4uaCIKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRl cm5hbC9zYy5oIgorI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL3dpdG5lc3MuaCIKKworYm9v bAorYmluX3VwZGF0ZV9zaGFyZF9zaXplKHVuc2lnbmVkIGJpbl9zaGFyZF9zaXplc1tTQ19OQklO U10sIHNpemVfdCBzdGFydF9zaXplLAorICAgIHNpemVfdCBlbmRfc2l6ZSwgc2l6ZV90IG5zaGFy ZHMpIHsKKwlpZiAobnNoYXJkcyA+IEJJTl9TSEFSRFNfTUFYIHx8IG5zaGFyZHMgPT0gMCkgewor CQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwlpZiAoc3RhcnRfc2l6ZSA+IFNDX1NNQUxMX01BWENMQVNT KSB7CisJCXJldHVybiBmYWxzZTsKKwl9CisJaWYgKGVuZF9zaXplID4gU0NfU01BTExfTUFYQ0xB U1MpIHsKKwkJZW5kX3NpemUgPSBTQ19TTUFMTF9NQVhDTEFTUzsKKwl9CisKKwkvKiBDb21wdXRl IHRoZSBpbmRleCBzaW5jZSB0aGlzIG1heSBoYXBwZW4gYmVmb3JlIHN6IGluaXQuICovCisJc3pp bmRfdCBpbmQxID0gc3pfc2l6ZTJpbmRleF9jb21wdXRlKHN0YXJ0X3NpemUpOworCXN6aW5kX3Qg aW5kMiA9IHN6X3NpemUyaW5kZXhfY29tcHV0ZShlbmRfc2l6ZSk7CisJZm9yICh1bnNpZ25lZCBp ID0gaW5kMTsgaSA8PSBpbmQyOyBpKyspIHsKKwkJYmluX3NoYXJkX3NpemVzW2ldID0gKHVuc2ln bmVkKW5zaGFyZHM7CisJfQorCisJcmV0dXJuIGZhbHNlOworfQorCit2b2lkCitiaW5fc2hhcmRf c2l6ZXNfYm9vdCh1bnNpZ25lZCBiaW5fc2hhcmRfc2l6ZXNbU0NfTkJJTlNdKSB7CisJLyogTG9h ZCB0aGUgZGVmYXVsdCBudW1iZXIgb2Ygc2hhcmRzLiAqLworCWZvciAodW5zaWduZWQgaSA9IDA7 IGkgPCBTQ19OQklOUzsgaSsrKSB7CisJCWJpbl9zaGFyZF9zaXplc1tpXSA9IE5fQklOX1NIQVJE U19ERUZBVUxUOworCX0KK30KKworYm9vbAorYmluX2luaXQoYmluX3QgKmJpbikgeworCWlmICht YWxsb2NfbXV0ZXhfaW5pdCgmYmluLT5sb2NrLCAiYmluIiwgV0lUTkVTU19SQU5LX0JJTiwKKwkg ICAgbWFsbG9jX211dGV4X3JhbmtfZXhjbHVzaXZlKSkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9CisJ YmluLT5zbGFiY3VyID0gTlVMTDsKKwllZGF0YV9oZWFwX25ldygmYmluLT5zbGFic19ub25mdWxs KTsKKwllZGF0YV9saXN0X2FjdGl2ZV9pbml0KCZiaW4tPnNsYWJzX2Z1bGwpOworCWlmIChjb25m aWdfc3RhdHMpIHsKKwkJbWVtc2V0KCZiaW4tPnN0YXRzLCAwLCBzaXplb2YoYmluX3N0YXRzX3Qp KTsKKwl9CisJcmV0dXJuIGZhbHNlOworfQorCit2b2lkCitiaW5fcHJlZm9yayh0c2RuX3QgKnRz ZG4sIGJpbl90ICpiaW4pIHsKKwltYWxsb2NfbXV0ZXhfcHJlZm9yayh0c2RuLCAmYmluLT5sb2Nr KTsKK30KKwordm9pZAorYmluX3Bvc3Rmb3JrX3BhcmVudCh0c2RuX3QgKnRzZG4sIGJpbl90ICpi aW4pIHsKKwltYWxsb2NfbXV0ZXhfcG9zdGZvcmtfcGFyZW50KHRzZG4sICZiaW4tPmxvY2spOwor fQorCit2b2lkCitiaW5fcG9zdGZvcmtfY2hpbGQodHNkbl90ICp0c2RuLCBiaW5fdCAqYmluKSB7 CisJbWFsbG9jX211dGV4X3Bvc3Rmb3JrX2NoaWxkKHRzZG4sICZiaW4tPmxvY2spOworfQoKZGlm ZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3NyYy9iaW5f aW5mby5jIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvc3JjL2Jpbl9p bmZvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODYyOWVmOAotLS0gL2Rl di9udWxsCisrKyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3NyYy9i aW5faW5mby5jCkBAIC0wLDAgKzEsMzAgQEAKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9q ZW1hbGxvY19wcmVhbWJsZS5oIgorI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2plbWFsbG9j X2ludGVybmFsX2luY2x1ZGVzLmgiCisKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9iaW5f aW5mby5oIgorCitiaW5faW5mb190IGJpbl9pbmZvc1tTQ19OQklOU107CisKK3N0YXRpYyB2b2lk CitiaW5faW5mb3NfaW5pdChzY19kYXRhX3QgKnNjX2RhdGEsIHVuc2lnbmVkIGJpbl9zaGFyZF9z aXplc1tTQ19OQklOU10sCisgICAgYmluX2luZm9fdCBpbmZvc1tTQ19OQklOU10pIHsKKwlmb3Ig KHVuc2lnbmVkIGkgPSAwOyBpIDwgU0NfTkJJTlM7IGkrKykgeworCQliaW5faW5mb190ICpiaW5f aW5mbyA9ICZpbmZvc1tpXTsKKwkJc2NfdCAqc2MgPSAmc2NfZGF0YS0+c2NbaV07CisJCWJpbl9p bmZvLT5yZWdfc2l6ZSA9ICgoc2l6ZV90KTFVIDw8IHNjLT5sZ19iYXNlKQorCQkgICAgKyAoKHNp emVfdClzYy0+bmRlbHRhIDw8IHNjLT5sZ19kZWx0YSk7CisJCWJpbl9pbmZvLT5zbGFiX3NpemUg PSAoc2MtPnBncyA8PCBMR19QQUdFKTsKKwkJYmluX2luZm8tPm5yZWdzID0KKwkJICAgICh1aW50 MzJfdCkoYmluX2luZm8tPnNsYWJfc2l6ZSAvIGJpbl9pbmZvLT5yZWdfc2l6ZSk7CisJCWJpbl9p bmZvLT5uX3NoYXJkcyA9IGJpbl9zaGFyZF9zaXplc1tpXTsKKwkJYml0bWFwX2luZm9fdCBiaXRt YXBfaW5mbyA9IEJJVE1BUF9JTkZPX0lOSVRJQUxJWkVSKAorCQkgICAgYmluX2luZm8tPm5yZWdz KTsKKwkJYmluX2luZm8tPmJpdG1hcF9pbmZvID0gYml0bWFwX2luZm87CisJfQorfQorCit2b2lk CitiaW5faW5mb19ib290KHNjX2RhdGFfdCAqc2NfZGF0YSwgdW5zaWduZWQgYmluX3NoYXJkX3Np emVzW1NDX05CSU5TXSkgeworCWFzc2VydChzY19kYXRhLT5pbml0aWFsaXplZCk7CisJYmluX2lu Zm9zX2luaXQoc2NfZGF0YSwgYmluX3NoYXJkX3NpemVzLCBiaW5faW5mb3MpOworfQoKZGlmZiAt LWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3NyYy9iaXRtYXAu YyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3NyYy9iaXRtYXAuYwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wY2NlZGM1Ci0tLSAvZGV2L251bGwK KysrIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvc3JjL2JpdG1hcC5j CkBAIC0wLDAgKzEsMTIwIEBACisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvamVtYWxsb2Nf cHJlYW1ibGUuaCIKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9qZW1hbGxvY19pbnRlcm5h bF9pbmNsdWRlcy5oIgorCisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvYXNzZXJ0LmgiCisK Ky8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZmRlZiBCSVRNQVBfVVNFX1RSRUUKKwordm9p ZAorYml0bWFwX2luZm9faW5pdChiaXRtYXBfaW5mb190ICpiaW5mbywgc2l6ZV90IG5iaXRzKSB7 CisJdW5zaWduZWQgaTsKKwlzaXplX3QgZ3JvdXBfY291bnQ7CisKKwlhc3NlcnQobmJpdHMgPiAw KTsKKwlhc3NlcnQobmJpdHMgPD0gKFpVKDEpIDw8IExHX0JJVE1BUF9NQVhCSVRTKSk7CisKKwkv KgorCSAqIENvbXB1dGUgdGhlIG51bWJlciBvZiBncm91cHMgbmVjZXNzYXJ5IHRvIHN0b3JlIG5i aXRzIGJpdHMsIGFuZAorCSAqIHByb2dyZXNzaXZlbHkgd29yayB1cHdhcmQgdGhyb3VnaCB0aGUg bGV2ZWxzIHVudGlsIHJlYWNoaW5nIGEgbGV2ZWwKKwkgKiB0aGF0IHJlcXVpcmVzIG9ubHkgb25l IGdyb3VwLgorCSAqLworCWJpbmZvLT5sZXZlbHNbMF0uZ3JvdXBfb2Zmc2V0ID0gMDsKKwlncm91 cF9jb3VudCA9IEJJVE1BUF9CSVRTMkdST1VQUyhuYml0cyk7CisJZm9yIChpID0gMTsgZ3JvdXBf Y291bnQgPiAxOyBpKyspIHsKKwkJYXNzZXJ0KGkgPCBCSVRNQVBfTUFYX0xFVkVMUyk7CisJCWJp bmZvLT5sZXZlbHNbaV0uZ3JvdXBfb2Zmc2V0ID0gYmluZm8tPmxldmVsc1tpLTFdLmdyb3VwX29m ZnNldAorCQkgICAgKyBncm91cF9jb3VudDsKKwkJZ3JvdXBfY291bnQgPSBCSVRNQVBfQklUUzJH Uk9VUFMoZ3JvdXBfY291bnQpOworCX0KKwliaW5mby0+bGV2ZWxzW2ldLmdyb3VwX29mZnNldCA9 IGJpbmZvLT5sZXZlbHNbaS0xXS5ncm91cF9vZmZzZXQKKwkgICAgKyBncm91cF9jb3VudDsKKwlh c3NlcnQoYmluZm8tPmxldmVsc1tpXS5ncm91cF9vZmZzZXQgPD0gQklUTUFQX0dST1VQU19NQVgp OworCWJpbmZvLT5ubGV2ZWxzID0gaTsKKwliaW5mby0+bmJpdHMgPSBuYml0czsKK30KKworc3Rh dGljIHNpemVfdAorYml0bWFwX2luZm9fbmdyb3Vwcyhjb25zdCBiaXRtYXBfaW5mb190ICpiaW5m bykgeworCXJldHVybiBiaW5mby0+bGV2ZWxzW2JpbmZvLT5ubGV2ZWxzXS5ncm91cF9vZmZzZXQ7 Cit9CisKK3ZvaWQKK2JpdG1hcF9pbml0KGJpdG1hcF90ICpiaXRtYXAsIGNvbnN0IGJpdG1hcF9p bmZvX3QgKmJpbmZvLCBib29sIGZpbGwpIHsKKwlzaXplX3QgZXh0cmE7CisJdW5zaWduZWQgaTsK KworCS8qCisJICogQml0cyBhcmUgYWN0dWFsbHkgaW52ZXJ0ZWQgd2l0aCByZWdhcmQgdG8gdGhl IGV4dGVybmFsIGJpdG1hcAorCSAqIGludGVyZmFjZS4KKwkgKi8KKworCWlmIChmaWxsKSB7CisJ CS8qIFRoZSAiZmlsbGVkIiBiaXRtYXAgc3RhcnRzIG91dCB3aXRoIGFsbCAwIGJpdHMuICovCisJ CW1lbXNldChiaXRtYXAsIDAsIGJpdG1hcF9zaXplKGJpbmZvKSk7CisJCXJldHVybjsKKwl9CisK KwkvKgorCSAqIFRoZSAiZW1wdHkiIGJpdG1hcCBzdGFydHMgb3V0IHdpdGggYWxsIDEgYml0cywg ZXhjZXB0IGZvciB0cmFpbGluZworCSAqIHVudXNlZCBiaXRzIChpZiBhbnkpLiAgTm90ZSB0aGF0 IGVhY2ggZ3JvdXAgdXNlcyBiaXQgMCB0byBjb3JyZXNwb25kCisJICogdG8gdGhlIGZpcnN0IGxv Z2ljYWwgYml0IGluIHRoZSBncm91cCwgc28gZXh0cmEgYml0cyBhcmUgdGhlIG1vc3QKKwkgKiBz aWduaWZpY2FudCBiaXRzIG9mIHRoZSBsYXN0IGdyb3VwLgorCSAqLworCW1lbXNldChiaXRtYXAs IDB4ZmZVLCBiaXRtYXBfc2l6ZShiaW5mbykpOworCWV4dHJhID0gKEJJVE1BUF9HUk9VUF9OQklU UyAtIChiaW5mby0+bmJpdHMgJiBCSVRNQVBfR1JPVVBfTkJJVFNfTUFTSykpCisJICAgICYgQklU TUFQX0dST1VQX05CSVRTX01BU0s7CisJaWYgKGV4dHJhICE9IDApIHsKKwkJYml0bWFwW2JpbmZv LT5sZXZlbHNbMV0uZ3JvdXBfb2Zmc2V0IC0gMV0gPj49IGV4dHJhOworCX0KKwlmb3IgKGkgPSAx OyBpIDwgYmluZm8tPm5sZXZlbHM7IGkrKykgeworCQlzaXplX3QgZ3JvdXBfY291bnQgPSBiaW5m by0+bGV2ZWxzW2ldLmdyb3VwX29mZnNldCAtCisJCSAgICBiaW5mby0+bGV2ZWxzW2ktMV0uZ3Jv dXBfb2Zmc2V0OworCQlleHRyYSA9IChCSVRNQVBfR1JPVVBfTkJJVFMgLSAoZ3JvdXBfY291bnQg JgorCQkgICAgQklUTUFQX0dST1VQX05CSVRTX01BU0spKSAmIEJJVE1BUF9HUk9VUF9OQklUU19N QVNLOworCQlpZiAoZXh0cmEgIT0gMCkgeworCQkJYml0bWFwW2JpbmZvLT5sZXZlbHNbaSsxXS5n cm91cF9vZmZzZXQgLSAxXSA+Pj0gZXh0cmE7CisJCX0KKwl9Cit9CisKKyNlbHNlIC8qIEJJVE1B UF9VU0VfVFJFRSAqLworCit2b2lkCitiaXRtYXBfaW5mb19pbml0KGJpdG1hcF9pbmZvX3QgKmJp bmZvLCBzaXplX3QgbmJpdHMpIHsKKwlhc3NlcnQobmJpdHMgPiAwKTsKKwlhc3NlcnQobmJpdHMg PD0gKFpVKDEpIDw8IExHX0JJVE1BUF9NQVhCSVRTKSk7CisKKwliaW5mby0+bmdyb3VwcyA9IEJJ VE1BUF9CSVRTMkdST1VQUyhuYml0cyk7CisJYmluZm8tPm5iaXRzID0gbmJpdHM7Cit9CisKK3N0 YXRpYyBzaXplX3QKK2JpdG1hcF9pbmZvX25ncm91cHMoY29uc3QgYml0bWFwX2luZm9fdCAqYmlu Zm8pIHsKKwlyZXR1cm4gYmluZm8tPm5ncm91cHM7Cit9CisKK3ZvaWQKK2JpdG1hcF9pbml0KGJp dG1hcF90ICpiaXRtYXAsIGNvbnN0IGJpdG1hcF9pbmZvX3QgKmJpbmZvLCBib29sIGZpbGwpIHsK KwlzaXplX3QgZXh0cmE7CisKKwlpZiAoZmlsbCkgeworCQltZW1zZXQoYml0bWFwLCAwLCBiaXRt YXBfc2l6ZShiaW5mbykpOworCQlyZXR1cm47CisJfQorCisJbWVtc2V0KGJpdG1hcCwgMHhmZlUs IGJpdG1hcF9zaXplKGJpbmZvKSk7CisJZXh0cmEgPSAoQklUTUFQX0dST1VQX05CSVRTIC0gKGJp bmZvLT5uYml0cyAmIEJJVE1BUF9HUk9VUF9OQklUU19NQVNLKSkKKwkgICAgJiBCSVRNQVBfR1JP VVBfTkJJVFNfTUFTSzsKKwlpZiAoZXh0cmEgIT0gMCkgeworCQliaXRtYXBbYmluZm8tPm5ncm91 cHMgLSAxXSA+Pj0gZXh0cmE7CisJfQorfQorCisjZW5kaWYgLyogQklUTUFQX1VTRV9UUkVFICov CisKK3NpemVfdAorYml0bWFwX3NpemUoY29uc3QgYml0bWFwX2luZm9fdCAqYmluZm8pIHsKKwly ZXR1cm4gKGJpdG1hcF9pbmZvX25ncm91cHMoYmluZm8pIDw8IExHX1NJWkVPRl9CSVRNQVApOwor fQoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Ny Yy9idWZfd3JpdGVyLmMgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9z cmMvYnVmX3dyaXRlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjNmY3 OTQKLS0tIC9kZXYvbnVsbAorKysgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01 LjMuMC9zcmMvYnVmX3dyaXRlci5jCkBAIC0wLDAgKzEsMTQ0IEBACisjaW5jbHVkZSAiamVtYWxs b2MvaW50ZXJuYWwvamVtYWxsb2NfcHJlYW1ibGUuaCIKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRl cm5hbC9qZW1hbGxvY19pbnRlcm5hbF9pbmNsdWRlcy5oIgorCisjaW5jbHVkZSAiamVtYWxsb2Mv aW50ZXJuYWwvYnVmX3dyaXRlci5oIgorI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL21hbGxv Y19pby5oIgorCitzdGF0aWMgdm9pZCAqCitidWZfd3JpdGVyX2FsbG9jYXRlX2ludGVybmFsX2J1 Zih0c2RuX3QgKnRzZG4sIHNpemVfdCBidWZfbGVuKSB7CisjaWZkZWYgSkVNQUxMT0NfSkVUCisJ aWYgKGJ1Zl9sZW4gPiBTQ19MQVJHRV9NQVhDTEFTUykgeworCQlyZXR1cm4gTlVMTDsKKwl9Cisj ZWxzZQorCWFzc2VydChidWZfbGVuIDw9IFNDX0xBUkdFX01BWENMQVNTKTsKKyNlbmRpZgorCXJl dHVybiBpYWxsb2N6dG0odHNkbiwgYnVmX2xlbiwgc3pfc2l6ZTJpbmRleChidWZfbGVuKSwgZmFs c2UsIE5VTEwsCisJICAgIHRydWUsIGFyZW5hX2dldCh0c2RuLCAwLCBmYWxzZSksIHRydWUpOwor fQorCitzdGF0aWMgdm9pZAorYnVmX3dyaXRlcl9mcmVlX2ludGVybmFsX2J1Zih0c2RuX3QgKnRz ZG4sIHZvaWQgKmJ1ZikgeworCWlmIChidWYgIT0gTlVMTCkgeworCQlpZGFsbG9jdG0odHNkbiwg YnVmLCBOVUxMLCBOVUxMLCB0cnVlLCB0cnVlKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitidWZf d3JpdGVyX2Fzc2VydChidWZfd3JpdGVyX3QgKmJ1Zl93cml0ZXIpIHsKKwlhc3NlcnQoYnVmX3dy aXRlciAhPSBOVUxMKTsKKwlhc3NlcnQoYnVmX3dyaXRlci0+d3JpdGVfY2IgIT0gTlVMTCk7CisJ aWYgKGJ1Zl93cml0ZXItPmJ1ZiAhPSBOVUxMKSB7CisJCWFzc2VydChidWZfd3JpdGVyLT5idWZf c2l6ZSA+IDApOworCX0gZWxzZSB7CisJCWFzc2VydChidWZfd3JpdGVyLT5idWZfc2l6ZSA9PSAw KTsKKwkJYXNzZXJ0KGJ1Zl93cml0ZXItPmludGVybmFsX2J1Zik7CisJfQorCWFzc2VydChidWZf d3JpdGVyLT5idWZfZW5kIDw9IGJ1Zl93cml0ZXItPmJ1Zl9zaXplKTsKK30KKworYm9vbAorYnVm X3dyaXRlcl9pbml0KHRzZG5fdCAqdHNkbiwgYnVmX3dyaXRlcl90ICpidWZfd3JpdGVyLCB3cml0 ZV9jYl90ICp3cml0ZV9jYiwKKyAgICB2b2lkICpjYm9wYXF1ZSwgY2hhciAqYnVmLCBzaXplX3Qg YnVmX2xlbikgeworCWlmICh3cml0ZV9jYiAhPSBOVUxMKSB7CisJCWJ1Zl93cml0ZXItPndyaXRl X2NiID0gd3JpdGVfY2I7CisJfSBlbHNlIHsKKwkJYnVmX3dyaXRlci0+d3JpdGVfY2IgPSBqZV9t YWxsb2NfbWVzc2FnZSAhPSBOVUxMID8KKwkJICAgIGplX21hbGxvY19tZXNzYWdlIDogd3J0bWVz c2FnZTsKKwl9CisJYnVmX3dyaXRlci0+Y2JvcGFxdWUgPSBjYm9wYXF1ZTsKKwlhc3NlcnQoYnVm X2xlbiA+PSAyKTsKKwlpZiAoYnVmICE9IE5VTEwpIHsKKwkJYnVmX3dyaXRlci0+YnVmID0gYnVm OworCQlidWZfd3JpdGVyLT5pbnRlcm5hbF9idWYgPSBmYWxzZTsKKwl9IGVsc2UgeworCQlidWZf d3JpdGVyLT5idWYgPSBidWZfd3JpdGVyX2FsbG9jYXRlX2ludGVybmFsX2J1Zih0c2RuLAorCQkg ICAgYnVmX2xlbik7CisJCWJ1Zl93cml0ZXItPmludGVybmFsX2J1ZiA9IHRydWU7CisJfQorCWlm IChidWZfd3JpdGVyLT5idWYgIT0gTlVMTCkgeworCQlidWZfd3JpdGVyLT5idWZfc2l6ZSA9IGJ1 Zl9sZW4gLSAxOyAvKiBBbGxvd2luZyBmb3IgJ1wwJy4gKi8KKwl9IGVsc2UgeworCQlidWZfd3Jp dGVyLT5idWZfc2l6ZSA9IDA7CisJfQorCWJ1Zl93cml0ZXItPmJ1Zl9lbmQgPSAwOworCWJ1Zl93 cml0ZXJfYXNzZXJ0KGJ1Zl93cml0ZXIpOworCXJldHVybiBidWZfd3JpdGVyLT5idWYgPT0gTlVM TDsKK30KKwordm9pZAorYnVmX3dyaXRlcl9mbHVzaChidWZfd3JpdGVyX3QgKmJ1Zl93cml0ZXIp IHsKKwlidWZfd3JpdGVyX2Fzc2VydChidWZfd3JpdGVyKTsKKwlpZiAoYnVmX3dyaXRlci0+YnVm ID09IE5VTEwpIHsKKwkJcmV0dXJuOworCX0KKwlidWZfd3JpdGVyLT5idWZbYnVmX3dyaXRlci0+ YnVmX2VuZF0gPSAnXDAnOworCWJ1Zl93cml0ZXItPndyaXRlX2NiKGJ1Zl93cml0ZXItPmNib3Bh cXVlLCBidWZfd3JpdGVyLT5idWYpOworCWJ1Zl93cml0ZXItPmJ1Zl9lbmQgPSAwOworCWJ1Zl93 cml0ZXJfYXNzZXJ0KGJ1Zl93cml0ZXIpOworfQorCit2b2lkCitidWZfd3JpdGVyX2NiKHZvaWQg KmJ1Zl93cml0ZXJfYXJnLCBjb25zdCBjaGFyICpzKSB7CisJYnVmX3dyaXRlcl90ICpidWZfd3Jp dGVyID0gKGJ1Zl93cml0ZXJfdCAqKWJ1Zl93cml0ZXJfYXJnOworCWJ1Zl93cml0ZXJfYXNzZXJ0 KGJ1Zl93cml0ZXIpOworCWlmIChidWZfd3JpdGVyLT5idWYgPT0gTlVMTCkgeworCQlidWZfd3Jp dGVyLT53cml0ZV9jYihidWZfd3JpdGVyLT5jYm9wYXF1ZSwgcyk7CisJCXJldHVybjsKKwl9CisJ c2l6ZV90IGksIHNsZW4sIG47CisJZm9yIChpID0gMCwgc2xlbiA9IHN0cmxlbihzKTsgaSA8IHNs ZW47IGkgKz0gbikgeworCQlpZiAoYnVmX3dyaXRlci0+YnVmX2VuZCA9PSBidWZfd3JpdGVyLT5i dWZfc2l6ZSkgeworCQkJYnVmX3dyaXRlcl9mbHVzaChidWZfd3JpdGVyKTsKKwkJfQorCQlzaXpl X3Qgc19yZW1haW4gPSBzbGVuIC0gaTsKKwkJc2l6ZV90IGJ1Zl9yZW1haW4gPSBidWZfd3JpdGVy LT5idWZfc2l6ZSAtIGJ1Zl93cml0ZXItPmJ1Zl9lbmQ7CisJCW4gPSBzX3JlbWFpbiA8IGJ1Zl9y ZW1haW4gPyBzX3JlbWFpbiA6IGJ1Zl9yZW1haW47CisJCW1lbWNweShidWZfd3JpdGVyLT5idWYg KyBidWZfd3JpdGVyLT5idWZfZW5kLCBzICsgaSwgbik7CisJCWJ1Zl93cml0ZXItPmJ1Zl9lbmQg Kz0gbjsKKwkJYnVmX3dyaXRlcl9hc3NlcnQoYnVmX3dyaXRlcik7CisJfQorCWFzc2VydChpID09 IHNsZW4pOworfQorCit2b2lkCitidWZfd3JpdGVyX3Rlcm1pbmF0ZSh0c2RuX3QgKnRzZG4sIGJ1 Zl93cml0ZXJfdCAqYnVmX3dyaXRlcikgeworCWJ1Zl93cml0ZXJfYXNzZXJ0KGJ1Zl93cml0ZXIp OworCWJ1Zl93cml0ZXJfZmx1c2goYnVmX3dyaXRlcik7CisJaWYgKGJ1Zl93cml0ZXItPmludGVy bmFsX2J1ZikgeworCQlidWZfd3JpdGVyX2ZyZWVfaW50ZXJuYWxfYnVmKHRzZG4sIGJ1Zl93cml0 ZXItPmJ1Zik7CisJfQorfQorCit2b2lkCitidWZfd3JpdGVyX3BpcGUoYnVmX3dyaXRlcl90ICpi dWZfd3JpdGVyLCByZWFkX2NiX3QgKnJlYWRfY2IsCisgICAgdm9pZCAqcmVhZF9jYm9wYXF1ZSkg eworCS8qCisJICogQSB0aW55IGxvY2FsIGJ1ZmZlciBpbiBjYXNlIHRoZSBidWZmZXJlZCB3cml0 ZXIgZmFpbGVkIHRvIGFsbG9jYXRlCisJICogYXQgaW5pdC4KKwkgKi8KKwlzdGF0aWMgY2hhciBi YWNrdXBfYnVmWzE2XTsKKwlzdGF0aWMgYnVmX3dyaXRlcl90IGJhY2t1cF9idWZfd3JpdGVyOwor CisJYnVmX3dyaXRlcl9hc3NlcnQoYnVmX3dyaXRlcik7CisJYXNzZXJ0KHJlYWRfY2IgIT0gTlVM TCk7CisJaWYgKGJ1Zl93cml0ZXItPmJ1ZiA9PSBOVUxMKSB7CisJCWJ1Zl93cml0ZXJfaW5pdChU U0ROX05VTEwsICZiYWNrdXBfYnVmX3dyaXRlciwKKwkJICAgIGJ1Zl93cml0ZXItPndyaXRlX2Ni LCBidWZfd3JpdGVyLT5jYm9wYXF1ZSwgYmFja3VwX2J1ZiwKKwkJICAgIHNpemVvZihiYWNrdXBf YnVmKSk7CisJCWJ1Zl93cml0ZXIgPSAmYmFja3VwX2J1Zl93cml0ZXI7CisJfQorCWFzc2VydChi dWZfd3JpdGVyLT5idWYgIT0gTlVMTCk7CisJc3NpemVfdCBucmVhZCA9IDA7CisJZG8geworCQli dWZfd3JpdGVyLT5idWZfZW5kICs9IG5yZWFkOworCQlidWZfd3JpdGVyX2Fzc2VydChidWZfd3Jp dGVyKTsKKwkJaWYgKGJ1Zl93cml0ZXItPmJ1Zl9lbmQgPT0gYnVmX3dyaXRlci0+YnVmX3NpemUp IHsKKwkJCWJ1Zl93cml0ZXJfZmx1c2goYnVmX3dyaXRlcik7CisJCX0KKwkJbnJlYWQgPSByZWFk X2NiKHJlYWRfY2JvcGFxdWUsCisJCSAgICBidWZfd3JpdGVyLT5idWYgKyBidWZfd3JpdGVyLT5i dWZfZW5kLAorCQkgICAgYnVmX3dyaXRlci0+YnVmX3NpemUgLSBidWZfd3JpdGVyLT5idWZfZW5k KTsKKwl9IHdoaWxlIChucmVhZCA+IDApOworCWJ1Zl93cml0ZXJfZmx1c2goYnVmX3dyaXRlcik7 Cit9CgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAv c3JjL2NhY2hlX2Jpbi5jIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAv c3JjL2NhY2hlX2Jpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhZTA3 MmEKLS0tIC9kZXYvbnVsbAorKysgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01 LjMuMC9zcmMvY2FjaGVfYmluLmMKQEAgLTAsMCArMSw5OSBAQAorI2luY2x1ZGUgImplbWFsbG9j L2ludGVybmFsL2plbWFsbG9jX3ByZWFtYmxlLmgiCisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJu YWwvamVtYWxsb2NfaW50ZXJuYWxfaW5jbHVkZXMuaCIKKworI2luY2x1ZGUgImplbWFsbG9jL2lu dGVybmFsL2JpdF91dGlsLmgiCisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvY2FjaGVfYmlu LmgiCisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvc2FmZXR5X2NoZWNrLmgiCisKK3ZvaWQK K2NhY2hlX2Jpbl9pbmZvX2luaXQoY2FjaGVfYmluX2luZm9fdCAqaW5mbywKKyAgICBjYWNoZV9i aW5fc3pfdCBuY2FjaGVkX21heCkgeworCWFzc2VydChuY2FjaGVkX21heCA8PSBDQUNIRV9CSU5f TkNBQ0hFRF9NQVgpOworCXNpemVfdCBzdGFja19zaXplID0gKHNpemVfdCluY2FjaGVkX21heCAq IHNpemVvZih2b2lkICopOworCWFzc2VydChzdGFja19zaXplIDwgKChzaXplX3QpMSA8PCAoc2l6 ZW9mKGNhY2hlX2Jpbl9zel90KSAqIDgpKSk7CisJaW5mby0+bmNhY2hlZF9tYXggPSAoY2FjaGVf YmluX3N6X3QpbmNhY2hlZF9tYXg7Cit9CisKK3ZvaWQKK2NhY2hlX2Jpbl9pbmZvX2NvbXB1dGVf YWxsb2MoY2FjaGVfYmluX2luZm9fdCAqaW5mb3MsIHN6aW5kX3QgbmluZm9zLAorICAgIHNpemVf dCAqc2l6ZSwgc2l6ZV90ICphbGlnbm1lbnQpIHsKKwkvKiBGb3IgdGhlIHRvdGFsIGJpbiBzdGFj ayByZWdpb24gKHBlciB0Y2FjaGUpLCByZXNlcnZlIDIgbW9yZSBzbG90cyBzbworCSAqIHRoYXQK KwkgKiAxKSB0aGUgZW1wdHkgcG9zaXRpb24gY2FuIGJlIHNhZmVseSByZWFkIG9uIHRoZSBmYXN0 IHBhdGggYmVmb3JlCisJICogICAgY2hlY2tpbmcgImlzX2VtcHR5IjsgYW5kCisJICogMikgdGhl IGN1cl9wdHIgY2FuIGdvIGJleW9uZCB0aGUgZW1wdHkgcG9zaXRpb24gYnkgMSBzdGVwIHNhZmVs eSBvbgorCSAqIHRoZSBmYXN0IHBhdGggKGkuZS4gbm8gb3ZlcmZsb3cpLgorCSAqLworCSpzaXpl ID0gc2l6ZW9mKHZvaWQgKikgKiAyOworCWZvciAoc3ppbmRfdCBpID0gMDsgaSA8IG5pbmZvczsg aSsrKSB7CisJCWFzc2VydChpbmZvc1tpXS5uY2FjaGVkX21heCA+IDApOworCQkqc2l6ZSArPSBp bmZvc1tpXS5uY2FjaGVkX21heCAqIHNpemVvZih2b2lkICopOworCX0KKworCS8qCisJICogQWxp Z24gdG8gYXQgbGVhc3QgUEFHRSwgdG8gbWluaW1pemUgdGhlICMgb2YgVExCcyBuZWVkZWQgYnkg dGhlCisJICogc21hbGxlciBzaXplczsgYWxzbyBoZWxwcyBpZiB0aGUgbGFyZ2VyIHNpemVzIGRv bid0IGdldCB1c2VkIGF0IGFsbC4KKwkgKi8KKwkqYWxpZ25tZW50ID0gUEFHRTsKK30KKwordm9p ZAorY2FjaGVfYmluX3ByZWluY3JlbWVudChjYWNoZV9iaW5faW5mb190ICppbmZvcywgc3ppbmRf dCBuaW5mb3MsIHZvaWQgKmFsbG9jLAorICAgIHNpemVfdCAqY3VyX29mZnNldCkgeworCWlmIChj b25maWdfZGVidWcpIHsKKwkJc2l6ZV90IGNvbXB1dGVkX3NpemU7CisJCXNpemVfdCBjb21wdXRl ZF9hbGlnbm1lbnQ7CisKKwkJLyogUG9pbnRlciBzaG91bGQgYmUgYXMgYWxpZ25lZCBhcyB3ZSBh c2tlZCBmb3IuICovCisJCWNhY2hlX2Jpbl9pbmZvX2NvbXB1dGVfYWxsb2MoaW5mb3MsIG5pbmZv cywgJmNvbXB1dGVkX3NpemUsCisJCSAgICAmY29tcHV0ZWRfYWxpZ25tZW50KTsKKwkJYXNzZXJ0 KCgodWludHB0cl90KWFsbG9jICYgKGNvbXB1dGVkX2FsaWdubWVudCAtIDEpKSA9PSAwKTsKKwl9 CisKKwkqKHVpbnRwdHJfdCAqKSgodWludHB0cl90KWFsbG9jICsgKmN1cl9vZmZzZXQpID0KKwkg ICAgY2FjaGVfYmluX3ByZWNlZGluZ19qdW5rOworCSpjdXJfb2Zmc2V0ICs9IHNpemVvZih2b2lk ICopOworfQorCit2b2lkCitjYWNoZV9iaW5fcG9zdGluY3JlbWVudChjYWNoZV9iaW5faW5mb190 ICppbmZvcywgc3ppbmRfdCBuaW5mb3MsIHZvaWQgKmFsbG9jLAorICAgIHNpemVfdCAqY3VyX29m ZnNldCkgeworCSoodWludHB0cl90ICopKCh1aW50cHRyX3QpYWxsb2MgKyAqY3VyX29mZnNldCkg PQorCSAgICBjYWNoZV9iaW5fdHJhaWxpbmdfanVuazsKKwkqY3VyX29mZnNldCArPSBzaXplb2Yo dm9pZCAqKTsKK30KKwordm9pZAorY2FjaGVfYmluX2luaXQoY2FjaGVfYmluX3QgKmJpbiwgY2Fj aGVfYmluX2luZm9fdCAqaW5mbywgdm9pZCAqYWxsb2MsCisgICAgc2l6ZV90ICpjdXJfb2Zmc2V0 KSB7CisJLyoKKwkgKiBUaGUgZnVsbF9wb3NpdGlvbiBwb2ludHMgdG8gdGhlIGxvd2VzdCBhdmFp bGFibGUgc3BhY2UuICBBbGxvY2F0aW9ucworCSAqIHdpbGwgYWNjZXNzIHRoZSBzbG90cyB0b3dh cmQgaGlnaGVyIGFkZHJlc3NlcyAoZm9yIHRoZSBiZW5lZml0IG9mCisJICogYWRqYWNlbnQgcHJl ZmV0Y2gpLgorCSAqLworCXZvaWQgKnN0YWNrX2N1ciA9ICh2b2lkICopKCh1aW50cHRyX3QpYWxs b2MgKyAqY3VyX29mZnNldCk7CisJdm9pZCAqZnVsbF9wb3NpdGlvbiA9IHN0YWNrX2N1cjsKKwl1 aW50MTZfdCBiaW5fc3RhY2tfc2l6ZSA9IGluZm8tPm5jYWNoZWRfbWF4ICogc2l6ZW9mKHZvaWQg Kik7CisKKwkqY3VyX29mZnNldCArPSBiaW5fc3RhY2tfc2l6ZTsKKwl2b2lkICplbXB0eV9wb3Np dGlvbiA9ICh2b2lkICopKCh1aW50cHRyX3QpYWxsb2MgKyAqY3VyX29mZnNldCk7CisKKwkvKiBJ bml0IHRvIHRoZSBlbXB0eSBwb3NpdGlvbi4gKi8KKwliaW4tPnN0YWNrX2hlYWQgPSAodm9pZCAq KillbXB0eV9wb3NpdGlvbjsKKwliaW4tPmxvd19iaXRzX2xvd193YXRlciA9ICh1aW50MTZfdCko dWludHB0cl90KWJpbi0+c3RhY2tfaGVhZDsKKwliaW4tPmxvd19iaXRzX2Z1bGwgPSAodWludDE2 X3QpKHVpbnRwdHJfdClmdWxsX3Bvc2l0aW9uOworCWJpbi0+bG93X2JpdHNfZW1wdHkgPSAodWlu dDE2X3QpKHVpbnRwdHJfdCllbXB0eV9wb3NpdGlvbjsKKwljYWNoZV9iaW5fc3pfdCBmcmVlX3Nw b3RzID0gY2FjaGVfYmluX2RpZmYoYmluLAorCSAgICBiaW4tPmxvd19iaXRzX2Z1bGwsICh1aW50 MTZfdCkodWludHB0cl90KWJpbi0+c3RhY2tfaGVhZCwKKwkgICAgLyogcmFjeSAqLyBmYWxzZSk7 CisJYXNzZXJ0KGZyZWVfc3BvdHMgPT0gYmluX3N0YWNrX3NpemUpOworCWFzc2VydChjYWNoZV9i aW5fbmNhY2hlZF9nZXRfbG9jYWwoYmluLCBpbmZvKSA9PSAwKTsKKwlhc3NlcnQoY2FjaGVfYmlu X2VtcHR5X3Bvc2l0aW9uX2dldChiaW4pID09IGVtcHR5X3Bvc2l0aW9uKTsKKworCWFzc2VydChi aW5fc3RhY2tfc2l6ZSA+IDAgfHwgZW1wdHlfcG9zaXRpb24gPT0gZnVsbF9wb3NpdGlvbik7Cit9 CisKK2Jvb2wKK2NhY2hlX2Jpbl9zdGlsbF96ZXJvX2luaXRpYWxpemVkKGNhY2hlX2Jpbl90ICpi aW4pIHsKKwlyZXR1cm4gYmluLT5zdGFja19oZWFkID09IE5VTEw7Cit9CgpkaWZmIC0tZ2l0IGEv Mzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvc3JjL2NraC5jIGIvMzg5LWRz LWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvc3JjL2NraC5jCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkYjQzMTkKLS0tIC9kZXYvbnVsbAorKysgYi8zODktZHMt YmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9zcmMvY2toLmMKQEAgLTAsMCArMSw1Njkg QEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogSW1wbGVtZW50YXRpb24gb2YgKDJe MSssMikgY3Vja29vIGhhc2hpbmcsIHdoZXJlIDJeMSsgaW5kaWNhdGVzIHRoYXQgZWFjaAorICog aGFzaCBidWNrZXQgY29udGFpbnMgMl5uIGNlbGxzLCBmb3IgbiA+PSAxLCBhbmQgMiBpbmRpY2F0 ZXMgdGhhdCB0d28gaGFzaAorICogZnVuY3Rpb25zIGFyZSBlbXBsb3llZC4gIFRoZSBvcmlnaW5h bCBjdWNrb28gaGFzaGluZyBhbGdvcml0aG0gd2FzIGRlc2NyaWJlZAorICogaW46CisgKgorICog ICBQYWdoLCBSLiwgRi5GLiBSb2RsZXIgKDIwMDQpIEN1Y2tvbyBIYXNoaW5nLiAgSm91cm5hbCBv ZiBBbGdvcml0aG1zCisgKiAgICAgNTEoMik6MTIyLTE0NC4KKyAqCisgKiBHZW5lcmFsaXphdGlv biBvZiBjdWNrb28gaGFzaGluZyB3YXMgZGlzY3Vzc2VkIGluOgorICoKKyAqICAgRXJsaW5nc3Nv biwgVS4sIE0uIE1hbmFzc2UsIEYuIE1jU2hlcnJ5ICgyMDA2KSBBIGNvb2wgYW5kIHByYWN0aWNh bAorICogICAgIGFsdGVybmF0aXZlIHRvIHRyYWRpdGlvbmFsIGhhc2ggdGFibGVzLiAgSW4gUHJv Y2VlZGluZ3Mgb2YgdGhlIDd0aAorICogICAgIFdvcmtzaG9wIG9uIERpc3RyaWJ1dGVkIERhdGEg YW5kIFN0cnVjdHVyZXMgKFdEQVMnMDYpLCBTYW50YSBDbGFyYSwgQ0EsCisgKiAgICAgSmFudWFy eSAyMDA2LgorICoKKyAqIFRoaXMgaW1wbGVtZW50YXRpb24gdXNlcyBwcmVjaXNlbHkgdHdvIGhh c2ggZnVuY3Rpb25zIGJlY2F1c2UgdGhhdCBpcyB0aGUKKyAqIGZld2VzdCB0aGF0IGNhbiB3b3Jr LCBhbmQgc3VwcG9ydGluZyBtdWx0aXBsZSBoYXNoZXMgaXMgYW4gaW1wbGVtZW50YXRpb24KKyAq IGJ1cmRlbi4gIEhlcmUgaXMgYSByZXByb2R1Y3Rpb24gb2YgRmlndXJlIDEgZnJvbSBFcmxpbmdz c29uIGV0IGFsLiAoMjAwNikKKyAqIHRoYXQgc2hvd3MgYXBwcm94aW1hdGUgZXhwZWN0ZWQgbWF4 aW11bSBsb2FkIGZhY3RvcnMgZm9yIHZhcmlvdXMKKyAqIGNvbmZpZ3VyYXRpb25zOgorICoKKyAq ICAgICAgICAgICB8ICAgICAgICAgI2NlbGxzL2J1Y2tldCAgICAgICAgIHwKKyAqICAgI2hhc2hl cyB8ICAgMSAgIHwgICAyICAgfCAgIDQgICB8ICAgOCAgIHwKKyAqICAgLS0tLS0tLS0rLS0tLS0t LSstLS0tLS0tKy0tLS0tLS0rLS0tLS0tLSsKKyAqICAgICAgICAgMSB8IDAuMDA2IHwgMC4wMDYg fCAwLjAzICB8IDAuMTIgIHwKKyAqICAgICAgICAgMiB8IDAuNDkgIHwgMC44NiAgfD4wLjkzPCB8 PjAuOTY8IHwKKyAqICAgICAgICAgMyB8IDAuOTEgIHwgMC45NyAgfCAwLjk4ICB8IDAuOTk5IHwK KyAqICAgICAgICAgNCB8IDAuOTcgIHwgMC45OSAgfCAwLjk5OSB8ICAgICAgIHwKKyAqCisgKiBU aGUgbnVtYmVyIG9mIGNlbGxzIHBlciBidWNrZXQgaXMgY2hvc2VuIHN1Y2ggdGhhdCBhIGJ1Y2tl dCBmaXRzIGluIG9uZSBjYWNoZQorICogbGluZS4gIFNvLCBvbiAzMi0gYW5kIDY0LWJpdCBzeXN0 ZW1zLCB3ZSB1c2UgKDgsMikgYW5kICg0LDIpIGN1Y2tvbyBoYXNoaW5nLAorICogcmVzcGVjdGl2 ZWx5LgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSAiamVtYWxsb2MvaW50 ZXJuYWwvamVtYWxsb2NfcHJlYW1ibGUuaCIKKworI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFs L2NraC5oIgorCisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvamVtYWxsb2NfaW50ZXJuYWxf aW5jbHVkZXMuaCIKKworI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2Fzc2VydC5oIgorI2lu Y2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2hhc2guaCIKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRl cm5hbC9tYWxsb2NfaW8uaCIKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9wcm5nLmgiCisj aW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvdXRpbC5oIgorCisvKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqLworLyogRnVuY3Rpb24gcHJvdG90eXBlcyBmb3Igbm9uLWlubGluZSBzdGF0aWMgZnVuY3Rp b25zLiAqLworCitzdGF0aWMgYm9vbAlja2hfZ3Jvdyh0c2RfdCAqdHNkLCBja2hfdCAqY2toKTsK K3N0YXRpYyB2b2lkCWNraF9zaHJpbmsodHNkX3QgKnRzZCwgY2toX3QgKmNraCk7CisKKy8qKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBTZWFyY2ggYnVja2V0IGZvciBrZXkgYW5kIHJl dHVybiB0aGUgY2VsbCBudW1iZXIgaWYgZm91bmQ7IFNJWkVfVF9NQVgKKyAqIG90aGVyd2lzZS4K KyAqLworc3RhdGljIHNpemVfdAorY2toX2J1Y2tldF9zZWFyY2goY2toX3QgKmNraCwgc2l6ZV90 IGJ1Y2tldCwgY29uc3Qgdm9pZCAqa2V5KSB7CisJY2toY190ICpjZWxsOworCXVuc2lnbmVkIGk7 CisKKwlmb3IgKGkgPSAwOyBpIDwgKFpVKDEpIDw8IExHX0NLSF9CVUNLRVRfQ0VMTFMpOyBpKysp IHsKKwkJY2VsbCA9ICZja2gtPnRhYlsoYnVja2V0IDw8IExHX0NLSF9CVUNLRVRfQ0VMTFMpICsg aV07CisJCWlmIChjZWxsLT5rZXkgIT0gTlVMTCAmJiBja2gtPmtleWNvbXAoa2V5LCBjZWxsLT5r ZXkpKSB7CisJCQlyZXR1cm4gKGJ1Y2tldCA8PCBMR19DS0hfQlVDS0VUX0NFTExTKSArIGk7CisJ CX0KKwl9CisKKwlyZXR1cm4gU0laRV9UX01BWDsKK30KKworLyoKKyAqIFNlYXJjaCB0YWJsZSBm b3Iga2V5IGFuZCByZXR1cm4gY2VsbCBudW1iZXIgaWYgZm91bmQ7IFNJWkVfVF9NQVggb3RoZXJ3 aXNlLgorICovCitzdGF0aWMgc2l6ZV90Citja2hfaXNlYXJjaChja2hfdCAqY2toLCBjb25zdCB2 b2lkICprZXkpIHsKKwlzaXplX3QgaGFzaGVzWzJdLCBidWNrZXQsIGNlbGw7CisKKwlhc3NlcnQo Y2toICE9IE5VTEwpOworCisJY2toLT5oYXNoKGtleSwgaGFzaGVzKTsKKworCS8qIFNlYXJjaCBw cmltYXJ5IGJ1Y2tldC4gKi8KKwlidWNrZXQgPSBoYXNoZXNbMF0gJiAoKFpVKDEpIDw8IGNraC0+ bGdfY3VyYnVja2V0cykgLSAxKTsKKwljZWxsID0gY2toX2J1Y2tldF9zZWFyY2goY2toLCBidWNr ZXQsIGtleSk7CisJaWYgKGNlbGwgIT0gU0laRV9UX01BWCkgeworCQlyZXR1cm4gY2VsbDsKKwl9 CisKKwkvKiBTZWFyY2ggc2Vjb25kYXJ5IGJ1Y2tldC4gKi8KKwlidWNrZXQgPSBoYXNoZXNbMV0g JiAoKFpVKDEpIDw8IGNraC0+bGdfY3VyYnVja2V0cykgLSAxKTsKKwljZWxsID0gY2toX2J1Y2tl dF9zZWFyY2goY2toLCBidWNrZXQsIGtleSk7CisJcmV0dXJuIGNlbGw7Cit9CisKK3N0YXRpYyBi b29sCitja2hfdHJ5X2J1Y2tldF9pbnNlcnQoY2toX3QgKmNraCwgc2l6ZV90IGJ1Y2tldCwgY29u c3Qgdm9pZCAqa2V5LAorICAgIGNvbnN0IHZvaWQgKmRhdGEpIHsKKwlja2hjX3QgKmNlbGw7CisJ dW5zaWduZWQgb2Zmc2V0LCBpOworCisJLyoKKwkgKiBDeWNsZSB0aHJvdWdoIHRoZSBjZWxscyBp biB0aGUgYnVja2V0LCBzdGFydGluZyBhdCBhIHJhbmRvbSBwb3NpdGlvbi4KKwkgKiBUaGUgcmFu ZG9tbmVzcyBhdm9pZHMgd29yc3QtY2FzZSBzZWFyY2ggb3ZlcmhlYWQgYXMgYnVja2V0cyBmaWxs IHVwLgorCSAqLworCW9mZnNldCA9ICh1bnNpZ25lZClwcm5nX2xnX3JhbmdlX3U2NCgmY2toLT5w cm5nX3N0YXRlLAorCSAgICBMR19DS0hfQlVDS0VUX0NFTExTKTsKKwlmb3IgKGkgPSAwOyBpIDwg KFpVKDEpIDw8IExHX0NLSF9CVUNLRVRfQ0VMTFMpOyBpKyspIHsKKwkJY2VsbCA9ICZja2gtPnRh YlsoYnVja2V0IDw8IExHX0NLSF9CVUNLRVRfQ0VMTFMpICsKKwkJICAgICgoaSArIG9mZnNldCkg JiAoKFpVKDEpIDw8IExHX0NLSF9CVUNLRVRfQ0VMTFMpIC0gMSkpXTsKKwkJaWYgKGNlbGwtPmtl eSA9PSBOVUxMKSB7CisJCQljZWxsLT5rZXkgPSBrZXk7CisJCQljZWxsLT5kYXRhID0gZGF0YTsK KwkJCWNraC0+Y291bnQrKzsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCX0KKworCXJldHVybiB0 cnVlOworfQorCisvKgorICogTm8gc3BhY2UgaXMgYXZhaWxhYmxlIGluIGJ1Y2tldC4gIFJhbmRv bWx5IGV2aWN0IGFuIGl0ZW0sIHRoZW4gdHJ5IHRvIGZpbmQgYW4KKyAqIGFsdGVybmF0ZSBsb2Nh dGlvbiBmb3IgdGhhdCBpdGVtLiAgSXRlcmF0aXZlbHkgcmVwZWF0IHRoaXMKKyAqIGV2aWN0aW9u L3JlbG9jYXRpb24gcHJvY2VkdXJlIHVudGlsIGVpdGhlciBzdWNjZXNzIG9yIGRldGVjdGlvbiBv ZiBhbgorICogZXZpY3Rpb24vcmVsb2NhdGlvbiBidWNrZXQgY3ljbGUuCisgKi8KK3N0YXRpYyBi b29sCitja2hfZXZpY3RfcmVsb2NfaW5zZXJ0KGNraF90ICpja2gsIHNpemVfdCBhcmdidWNrZXQs IHZvaWQgY29uc3QgKiphcmdrZXksCisgICAgdm9pZCBjb25zdCAqKmFyZ2RhdGEpIHsKKwljb25z dCB2b2lkICprZXksICpkYXRhLCAqdGtleSwgKnRkYXRhOworCWNraGNfdCAqY2VsbDsKKwlzaXpl X3QgaGFzaGVzWzJdLCBidWNrZXQsIHRidWNrZXQ7CisJdW5zaWduZWQgaTsKKworCWJ1Y2tldCA9 IGFyZ2J1Y2tldDsKKwlrZXkgPSAqYXJna2V5OworCWRhdGEgPSAqYXJnZGF0YTsKKwl3aGlsZSAo dHJ1ZSkgeworCQkvKgorCQkgKiBDaG9vc2UgYSByYW5kb20gaXRlbSB3aXRoaW4gdGhlIGJ1Y2tl dCB0byBldmljdC4gIFRoaXMgaXMKKwkJICogY3JpdGljYWwgdG8gY29ycmVjdCBmdW5jdGlvbiwg YmVjYXVzZSB3aXRob3V0IChldmVudHVhbGx5KQorCQkgKiBldmljdGluZyBhbGwgaXRlbXMgd2l0 aGluIGEgYnVja2V0IGR1cmluZyBpdGVyYXRpb24sIGl0CisJCSAqIHdvdWxkIGJlIHBvc3NpYmxl IHRvIGdldCBzdHVjayBpbiBhbiBpbmZpbml0ZSBsb29wIGlmIHRoZXJlCisJCSAqIHdlcmUgYW4g aXRlbSBmb3Igd2hpY2ggYm90aCBoYXNoZXMgaW5kaWNhdGVkIHRoZSBzYW1lCisJCSAqIGJ1Y2tl dC4KKwkJICovCisJCWkgPSAodW5zaWduZWQpcHJuZ19sZ19yYW5nZV91NjQoJmNraC0+cHJuZ19z dGF0ZSwKKwkJICAgIExHX0NLSF9CVUNLRVRfQ0VMTFMpOworCQljZWxsID0gJmNraC0+dGFiWyhi dWNrZXQgPDwgTEdfQ0tIX0JVQ0tFVF9DRUxMUykgKyBpXTsKKwkJYXNzZXJ0KGNlbGwtPmtleSAh PSBOVUxMKTsKKworCQkvKiBTd2FwIGNlbGwtPntrZXksZGF0YX0gYW5kIHtrZXksZGF0YX0gKGV2 aWN0KS4gKi8KKwkJdGtleSA9IGNlbGwtPmtleTsgdGRhdGEgPSBjZWxsLT5kYXRhOworCQljZWxs LT5rZXkgPSBrZXk7IGNlbGwtPmRhdGEgPSBkYXRhOworCQlrZXkgPSB0a2V5OyBkYXRhID0gdGRh dGE7CisKKyNpZmRlZiBDS0hfQ09VTlQKKwkJY2toLT5ucmVsb2NzKys7CisjZW5kaWYKKworCQkv KiBGaW5kIHRoZSBhbHRlcm5hdGUgYnVja2V0IGZvciB0aGUgZXZpY3RlZCBpdGVtLiAqLworCQlj a2gtPmhhc2goa2V5LCBoYXNoZXMpOworCQl0YnVja2V0ID0gaGFzaGVzWzFdICYgKChaVSgxKSA8 PCBja2gtPmxnX2N1cmJ1Y2tldHMpIC0gMSk7CisJCWlmICh0YnVja2V0ID09IGJ1Y2tldCkgewor CQkJdGJ1Y2tldCA9IGhhc2hlc1swXSAmICgoWlUoMSkgPDwgY2toLT5sZ19jdXJidWNrZXRzKQor CQkJICAgIC0gMSk7CisJCQkvKgorCQkJICogSXQgbWF5IGJlIHRoYXQgKHRidWNrZXQgPT0gYnVj a2V0KSBzdGlsbCwgaWYgdGhlCisJCQkgKiBpdGVtJ3MgaGFzaGVzIGJvdGggaW5kaWNhdGUgdGhp cyBidWNrZXQuICBIb3dldmVyLAorCQkJICogd2UgYXJlIGd1YXJhbnRlZWQgdG8gZXZlbnR1YWxs eSBlc2NhcGUgdGhpcyBidWNrZXQKKwkJCSAqIGR1cmluZyBpdGVyYXRpb24sIGFzc3VtaW5nIHBz ZXVkby1yYW5kb20gaXRlbQorCQkJICogc2VsZWN0aW9uICh0cnVlIHJhbmRvbW5lc3Mgd291bGQg bWFrZSBpbmZpbml0ZQorCQkJICogbG9vcGluZyBhIHJlbW90ZSBwb3NzaWJpbGl0eSkuICBUaGUg cmVhc29uIHdlIGNhbgorCQkJICogbmV2ZXIgZ2V0IHRyYXBwZWQgZm9yZXZlciBpcyB0aGF0IHRo ZXJlIGFyZSB0d28KKwkJCSAqIGNhc2VzOgorCQkJICoKKwkJCSAqIDEpIFRoaXMgYnVja2V0ID09 IGFyZ2J1Y2tldCwgc28gd2Ugd2lsbCBxdWlja2x5CisJCQkgKiAgICBkZXRlY3QgYW4gZXZpY3Rp b24gY3ljbGUgYW5kIHRlcm1pbmF0ZS4KKwkJCSAqIDIpIEFuIGl0ZW0gd2FzIGV2aWN0ZWQgdG8g dGhpcyBidWNrZXQgZnJvbSBhbm90aGVyLAorCQkJICogICAgd2hpY2ggbWVhbnMgdGhhdCBhdCBs ZWFzdCBvbmUgaXRlbSBpbiB0aGlzIGJ1Y2tldAorCQkJICogICAgaGFzIGhhc2hlcyB0aGF0IGlu ZGljYXRlIGRpc3RpbmN0IGJ1Y2tldHMuCisJCQkgKi8KKwkJfQorCQkvKiBDaGVjayBmb3IgYSBj eWNsZS4gKi8KKwkJaWYgKHRidWNrZXQgPT0gYXJnYnVja2V0KSB7CisJCQkqYXJna2V5ID0ga2V5 OworCQkJKmFyZ2RhdGEgPSBkYXRhOworCQkJcmV0dXJuIHRydWU7CisJCX0KKworCQlidWNrZXQg PSB0YnVja2V0OworCQlpZiAoIWNraF90cnlfYnVja2V0X2luc2VydChja2gsIGJ1Y2tldCwga2V5 LCBkYXRhKSkgeworCQkJcmV0dXJuIGZhbHNlOworCQl9CisJfQorfQorCitzdGF0aWMgYm9vbAor Y2toX3RyeV9pbnNlcnQoY2toX3QgKmNraCwgdm9pZCBjb25zdCoqYXJna2V5LCB2b2lkIGNvbnN0 KiphcmdkYXRhKSB7CisJc2l6ZV90IGhhc2hlc1syXSwgYnVja2V0OworCWNvbnN0IHZvaWQgKmtl eSA9ICphcmdrZXk7CisJY29uc3Qgdm9pZCAqZGF0YSA9ICphcmdkYXRhOworCisJY2toLT5oYXNo KGtleSwgaGFzaGVzKTsKKworCS8qIFRyeSB0byBpbnNlcnQgaW4gcHJpbWFyeSBidWNrZXQuICov CisJYnVja2V0ID0gaGFzaGVzWzBdICYgKChaVSgxKSA8PCBja2gtPmxnX2N1cmJ1Y2tldHMpIC0g MSk7CisJaWYgKCFja2hfdHJ5X2J1Y2tldF9pbnNlcnQoY2toLCBidWNrZXQsIGtleSwgZGF0YSkp IHsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCS8qIFRyeSB0byBpbnNlcnQgaW4gc2Vjb25kYXJ5 IGJ1Y2tldC4gKi8KKwlidWNrZXQgPSBoYXNoZXNbMV0gJiAoKFpVKDEpIDw8IGNraC0+bGdfY3Vy YnVja2V0cykgLSAxKTsKKwlpZiAoIWNraF90cnlfYnVja2V0X2luc2VydChja2gsIGJ1Y2tldCwg a2V5LCBkYXRhKSkgeworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJLyoKKwkgKiBUcnkgdG8gZmlu ZCBhIHBsYWNlIGZvciB0aGlzIGl0ZW0gdmlhIGl0ZXJhdGl2ZSBldmljdGlvbi9yZWxvY2F0aW9u LgorCSAqLworCXJldHVybiBja2hfZXZpY3RfcmVsb2NfaW5zZXJ0KGNraCwgYnVja2V0LCBhcmdr ZXksIGFyZ2RhdGEpOworfQorCisvKgorICogVHJ5IHRvIHJlYnVpbGQgdGhlIGhhc2ggdGFibGUg ZnJvbSBzY3JhdGNoIGJ5IGluc2VydGluZyBhbGwgaXRlbXMgZnJvbSB0aGUKKyAqIG9sZCB0YWJs ZSBpbnRvIHRoZSBuZXcuCisgKi8KK3N0YXRpYyBib29sCitja2hfcmVidWlsZChja2hfdCAqY2to LCBja2hjX3QgKmFUYWIpIHsKKwlzaXplX3QgY291bnQsIGksIG5pbnM7CisJY29uc3Qgdm9pZCAq a2V5LCAqZGF0YTsKKworCWNvdW50ID0gY2toLT5jb3VudDsKKwlja2gtPmNvdW50ID0gMDsKKwlm b3IgKGkgPSBuaW5zID0gMDsgbmlucyA8IGNvdW50OyBpKyspIHsKKwkJaWYgKGFUYWJbaV0ua2V5 ICE9IE5VTEwpIHsKKwkJCWtleSA9IGFUYWJbaV0ua2V5OworCQkJZGF0YSA9IGFUYWJbaV0uZGF0 YTsKKwkJCWlmIChja2hfdHJ5X2luc2VydChja2gsICZrZXksICZkYXRhKSkgeworCQkJCWNraC0+ Y291bnQgPSBjb3VudDsKKwkJCQlyZXR1cm4gdHJ1ZTsKKwkJCX0KKwkJCW5pbnMrKzsKKwkJfQor CX0KKworCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGJvb2wKK2NraF9ncm93KHRzZF90ICp0 c2QsIGNraF90ICpja2gpIHsKKwlib29sIHJldDsKKwlja2hjX3QgKnRhYiwgKnR0YWI7CisJdW5z aWduZWQgbGdfcHJldmJ1Y2tldHMsIGxnX2N1cmNlbGxzOworCisjaWZkZWYgQ0tIX0NPVU5UCisJ Y2toLT5uZ3Jvd3MrKzsKKyNlbmRpZgorCisJLyoKKwkgKiBJdCBpcyBwb3NzaWJsZSAodGhvdWdo IHVubGlrZWx5LCBnaXZlbiB3ZWxsIGJlaGF2ZWQgaGFzaGVzKSB0aGF0IHRoZQorCSAqIHRhYmxl IHdpbGwgaGF2ZSB0byBiZSBkb3VibGVkIG1vcmUgdGhhbiBvbmNlIGluIG9yZGVyIHRvIGNyZWF0 ZSBhCisJICogdXNhYmxlIHRhYmxlLgorCSAqLworCWxnX3ByZXZidWNrZXRzID0gY2toLT5sZ19j dXJidWNrZXRzOworCWxnX2N1cmNlbGxzID0gY2toLT5sZ19jdXJidWNrZXRzICsgTEdfQ0tIX0JV Q0tFVF9DRUxMUzsKKwl3aGlsZSAodHJ1ZSkgeworCQlzaXplX3QgdXNpemU7CisKKwkJbGdfY3Vy Y2VsbHMrKzsKKwkJdXNpemUgPSBzel9zYTJ1KHNpemVvZihja2hjX3QpIDw8IGxnX2N1cmNlbGxz LCBDQUNIRUxJTkUpOworCQlpZiAodW5saWtlbHkodXNpemUgPT0gMAorCQkgICAgfHwgdXNpemUg PiBTQ19MQVJHRV9NQVhDTEFTUykpIHsKKwkJCXJldCA9IHRydWU7CisJCQlnb3RvIGxhYmVsX3Jl dHVybjsKKwkJfQorCQl0YWIgPSAoY2toY190ICopaXBhbGxvY3p0bSh0c2RfdHNkbih0c2QpLCB1 c2l6ZSwgQ0FDSEVMSU5FLAorCQkgICAgdHJ1ZSwgTlVMTCwgdHJ1ZSwgYXJlbmFfaWNob29zZSh0 c2QsIE5VTEwpKTsKKwkJaWYgKHRhYiA9PSBOVUxMKSB7CisJCQlyZXQgPSB0cnVlOworCQkJZ290 byBsYWJlbF9yZXR1cm47CisJCX0KKwkJLyogU3dhcCBpbiBuZXcgdGFibGUuICovCisJCXR0YWIg PSBja2gtPnRhYjsKKwkJY2toLT50YWIgPSB0YWI7CisJCXRhYiA9IHR0YWI7CisJCWNraC0+bGdf Y3VyYnVja2V0cyA9IGxnX2N1cmNlbGxzIC0gTEdfQ0tIX0JVQ0tFVF9DRUxMUzsKKworCQlpZiAo IWNraF9yZWJ1aWxkKGNraCwgdGFiKSkgeworCQkJaWRhbGxvY3RtKHRzZF90c2RuKHRzZCksIHRh YiwgTlVMTCwgTlVMTCwgdHJ1ZSwgdHJ1ZSk7CisJCQlicmVhazsKKwkJfQorCisJCS8qIFJlYnVp bGRpbmcgZmFpbGVkLCBzbyBiYWNrIG91dCBwYXJ0aWFsbHkgcmVidWlsdCB0YWJsZS4gKi8KKwkJ aWRhbGxvY3RtKHRzZF90c2RuKHRzZCksIGNraC0+dGFiLCBOVUxMLCBOVUxMLCB0cnVlLCB0cnVl KTsKKwkJY2toLT50YWIgPSB0YWI7CisJCWNraC0+bGdfY3VyYnVja2V0cyA9IGxnX3ByZXZidWNr ZXRzOworCX0KKworCXJldCA9IGZhbHNlOworbGFiZWxfcmV0dXJuOgorCXJldHVybiByZXQ7Cit9 CisKK3N0YXRpYyB2b2lkCitja2hfc2hyaW5rKHRzZF90ICp0c2QsIGNraF90ICpja2gpIHsKKwlj a2hjX3QgKnRhYiwgKnR0YWI7CisJc2l6ZV90IHVzaXplOworCXVuc2lnbmVkIGxnX3ByZXZidWNr ZXRzLCBsZ19jdXJjZWxsczsKKworCS8qCisJICogSXQgaXMgcG9zc2libGUgKHRob3VnaCB1bmxp a2VseSwgZ2l2ZW4gd2VsbCBiZWhhdmVkIGhhc2hlcykgdGhhdCB0aGUKKwkgKiB0YWJsZSByZWJ1 aWxkIHdpbGwgZmFpbC4KKwkgKi8KKwlsZ19wcmV2YnVja2V0cyA9IGNraC0+bGdfY3VyYnVja2V0 czsKKwlsZ19jdXJjZWxscyA9IGNraC0+bGdfY3VyYnVja2V0cyArIExHX0NLSF9CVUNLRVRfQ0VM TFMgLSAxOworCXVzaXplID0gc3pfc2EydShzaXplb2YoY2toY190KSA8PCBsZ19jdXJjZWxscywg Q0FDSEVMSU5FKTsKKwlpZiAodW5saWtlbHkodXNpemUgPT0gMCB8fCB1c2l6ZSA+IFNDX0xBUkdF X01BWENMQVNTKSkgeworCQlyZXR1cm47CisJfQorCXRhYiA9IChja2hjX3QgKilpcGFsbG9jenRt KHRzZF90c2RuKHRzZCksIHVzaXplLCBDQUNIRUxJTkUsIHRydWUsIE5VTEwsCisJICAgIHRydWUs IGFyZW5hX2ljaG9vc2UodHNkLCBOVUxMKSk7CisJaWYgKHRhYiA9PSBOVUxMKSB7CisJCS8qCisJ CSAqIEFuIE9PTSBlcnJvciBpc24ndCB3b3J0aCBwcm9wYWdhdGluZywgc2luY2UgaXQgZG9lc24n dAorCQkgKiBwcmV2ZW50IHRoaXMgb3IgZnV0dXJlIG9wZXJhdGlvbnMgZnJvbSBwcm9jZWVkaW5n LgorCQkgKi8KKwkJcmV0dXJuOworCX0KKwkvKiBTd2FwIGluIG5ldyB0YWJsZS4gKi8KKwl0dGFi ID0gY2toLT50YWI7CisJY2toLT50YWIgPSB0YWI7CisJdGFiID0gdHRhYjsKKwlja2gtPmxnX2N1 cmJ1Y2tldHMgPSBsZ19jdXJjZWxscyAtIExHX0NLSF9CVUNLRVRfQ0VMTFM7CisKKwlpZiAoIWNr aF9yZWJ1aWxkKGNraCwgdGFiKSkgeworCQlpZGFsbG9jdG0odHNkX3RzZG4odHNkKSwgdGFiLCBO VUxMLCBOVUxMLCB0cnVlLCB0cnVlKTsKKyNpZmRlZiBDS0hfQ09VTlQKKwkJY2toLT5uc2hyaW5r cysrOworI2VuZGlmCisJCXJldHVybjsKKwl9CisKKwkvKiBSZWJ1aWxkaW5nIGZhaWxlZCwgc28g YmFjayBvdXQgcGFydGlhbGx5IHJlYnVpbHQgdGFibGUuICovCisJaWRhbGxvY3RtKHRzZF90c2Ru KHRzZCksIGNraC0+dGFiLCBOVUxMLCBOVUxMLCB0cnVlLCB0cnVlKTsKKwlja2gtPnRhYiA9IHRh YjsKKwlja2gtPmxnX2N1cmJ1Y2tldHMgPSBsZ19wcmV2YnVja2V0czsKKyNpZmRlZiBDS0hfQ09V TlQKKwlja2gtPm5zaHJpbmtmYWlscysrOworI2VuZGlmCit9CisKK2Jvb2wKK2NraF9uZXcodHNk X3QgKnRzZCwgY2toX3QgKmNraCwgc2l6ZV90IG1pbml0ZW1zLCBja2hfaGFzaF90ICpja2hfaGFz aCwKKyAgICBja2hfa2V5Y29tcF90ICprZXljb21wKSB7CisJYm9vbCByZXQ7CisJc2l6ZV90IG1p bmNlbGxzLCB1c2l6ZTsKKwl1bnNpZ25lZCBsZ19taW5jZWxsczsKKworCWFzc2VydChtaW5pdGVt cyA+IDApOworCWFzc2VydChja2hfaGFzaCAhPSBOVUxMKTsKKwlhc3NlcnQoa2V5Y29tcCAhPSBO VUxMKTsKKworI2lmZGVmIENLSF9DT1VOVAorCWNraC0+bmdyb3dzID0gMDsKKwlja2gtPm5zaHJp bmtzID0gMDsKKwlja2gtPm5zaHJpbmtmYWlscyA9IDA7CisJY2toLT5uaW5zZXJ0cyA9IDA7CisJ Y2toLT5ucmVsb2NzID0gMDsKKyNlbmRpZgorCWNraC0+cHJuZ19zdGF0ZSA9IDQyOyAvKiBWYWx1 ZSBkb2Vzbid0IHJlYWxseSBtYXR0ZXIuICovCisJY2toLT5jb3VudCA9IDA7CisKKwkvKgorCSAq IEZpbmQgdGhlIG1pbmltdW0gcG93ZXIgb2YgMiB0aGF0IGlzIGxhcmdlIGVub3VnaCB0byBmaXQg bWluaXRlbXMKKwkgKiBlbnRyaWVzLiAgV2UgYXJlIHVzaW5nICgyKywyKSBjdWNrb28gaGFzaGlu Zywgd2hpY2ggaGFzIGFuIGV4cGVjdGVkCisJICogbWF4aW11bSBsb2FkIGZhY3RvciBvZiBhdCBs ZWFzdCB+MC44Niwgc28gMC43NSBpcyBhIGNvbnNlcnZhdGl2ZSBsb2FkCisJICogZmFjdG9yIHRo YXQgd2lsbCB0eXBpY2FsbHkgYWxsb3cgbWluY2VsbHMgaXRlbXMgdG8gZml0IHdpdGhvdXQgZXZl cgorCSAqIGdyb3dpbmcgdGhlIHRhYmxlLgorCSAqLworCWFzc2VydChMR19DS0hfQlVDS0VUX0NF TExTID4gMCk7CisJbWluY2VsbHMgPSAoKG1pbml0ZW1zICsgKDMgLSAobWluaXRlbXMgJSAzKSkp IC8gMykgPDwgMjsKKwlmb3IgKGxnX21pbmNlbGxzID0gTEdfQ0tIX0JVQ0tFVF9DRUxMUzsKKwkg ICAgKFpVKDEpIDw8IGxnX21pbmNlbGxzKSA8IG1pbmNlbGxzOworCSAgICBsZ19taW5jZWxscysr KSB7CisJCS8qIERvIG5vdGhpbmcuICovCisJfQorCWNraC0+bGdfbWluYnVja2V0cyA9IGxnX21p bmNlbGxzIC0gTEdfQ0tIX0JVQ0tFVF9DRUxMUzsKKwlja2gtPmxnX2N1cmJ1Y2tldHMgPSBsZ19t aW5jZWxscyAtIExHX0NLSF9CVUNLRVRfQ0VMTFM7CisJY2toLT5oYXNoID0gY2toX2hhc2g7CisJ Y2toLT5rZXljb21wID0ga2V5Y29tcDsKKworCXVzaXplID0gc3pfc2EydShzaXplb2YoY2toY190 KSA8PCBsZ19taW5jZWxscywgQ0FDSEVMSU5FKTsKKwlpZiAodW5saWtlbHkodXNpemUgPT0gMCB8 fCB1c2l6ZSA+IFNDX0xBUkdFX01BWENMQVNTKSkgeworCQlyZXQgPSB0cnVlOworCQlnb3RvIGxh YmVsX3JldHVybjsKKwl9CisJY2toLT50YWIgPSAoY2toY190ICopaXBhbGxvY3p0bSh0c2RfdHNk bih0c2QpLCB1c2l6ZSwgQ0FDSEVMSU5FLCB0cnVlLAorCSAgICBOVUxMLCB0cnVlLCBhcmVuYV9p Y2hvb3NlKHRzZCwgTlVMTCkpOworCWlmIChja2gtPnRhYiA9PSBOVUxMKSB7CisJCXJldCA9IHRy dWU7CisJCWdvdG8gbGFiZWxfcmV0dXJuOworCX0KKworCXJldCA9IGZhbHNlOworbGFiZWxfcmV0 dXJuOgorCXJldHVybiByZXQ7Cit9CisKK3ZvaWQKK2NraF9kZWxldGUodHNkX3QgKnRzZCwgY2to X3QgKmNraCkgeworCWFzc2VydChja2ggIT0gTlVMTCk7CisKKyNpZmRlZiBDS0hfVkVSQk9TRQor CW1hbGxvY19wcmludGYoCisJICAgICIlcyglcCk6IG5ncm93czogJSJGTVR1NjQiLCBuc2hyaW5r czogJSJGTVR1NjQiLCIKKwkgICAgIiBuc2hyaW5rZmFpbHM6ICUiRk1UdTY0Iiwgbmluc2VydHM6 ICUiRk1UdTY0IiwiCisJICAgICIgbnJlbG9jczogJSJGTVR1NjQiXG4iLCBfX2Z1bmNfXywgY2to LAorCSAgICAodW5zaWduZWQgbG9uZyBsb25nKWNraC0+bmdyb3dzLAorCSAgICAodW5zaWduZWQg bG9uZyBsb25nKWNraC0+bnNocmlua3MsCisJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpY2toLT5u c2hyaW5rZmFpbHMsCisJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpY2toLT5uaW5zZXJ0cywKKwkg ICAgKHVuc2lnbmVkIGxvbmcgbG9uZylja2gtPm5yZWxvY3MpOworI2VuZGlmCisKKwlpZGFsbG9j dG0odHNkX3RzZG4odHNkKSwgY2toLT50YWIsIE5VTEwsIE5VTEwsIHRydWUsIHRydWUpOworCWlm IChjb25maWdfZGVidWcpIHsKKwkJbWVtc2V0KGNraCwgSkVNQUxMT0NfRlJFRV9KVU5LLCBzaXpl b2YoY2toX3QpKTsKKwl9Cit9CisKK3NpemVfdAorY2toX2NvdW50KGNraF90ICpja2gpIHsKKwlh c3NlcnQoY2toICE9IE5VTEwpOworCisJcmV0dXJuIGNraC0+Y291bnQ7Cit9CisKK2Jvb2wKK2Nr aF9pdGVyKGNraF90ICpja2gsIHNpemVfdCAqdGFiaW5kLCB2b2lkICoqa2V5LCB2b2lkICoqZGF0 YSkgeworCXNpemVfdCBpLCBuY2VsbHM7CisKKwlmb3IgKGkgPSAqdGFiaW5kLCBuY2VsbHMgPSAo WlUoMSkgPDwgKGNraC0+bGdfY3VyYnVja2V0cyArCisJICAgIExHX0NLSF9CVUNLRVRfQ0VMTFMp KTsgaSA8IG5jZWxsczsgaSsrKSB7CisJCWlmIChja2gtPnRhYltpXS5rZXkgIT0gTlVMTCkgewor CQkJaWYgKGtleSAhPSBOVUxMKSB7CisJCQkJKmtleSA9ICh2b2lkICopY2toLT50YWJbaV0ua2V5 OworCQkJfQorCQkJaWYgKGRhdGEgIT0gTlVMTCkgeworCQkJCSpkYXRhID0gKHZvaWQgKilja2gt PnRhYltpXS5kYXRhOworCQkJfQorCQkJKnRhYmluZCA9IGkgKyAxOworCQkJcmV0dXJuIGZhbHNl OworCQl9CisJfQorCisJcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wKK2NraF9pbnNlcnQodHNkX3Qg KnRzZCwgY2toX3QgKmNraCwgY29uc3Qgdm9pZCAqa2V5LCBjb25zdCB2b2lkICpkYXRhKSB7CisJ Ym9vbCByZXQ7CisKKwlhc3NlcnQoY2toICE9IE5VTEwpOworCWFzc2VydChja2hfc2VhcmNoKGNr aCwga2V5LCBOVUxMLCBOVUxMKSk7CisKKyNpZmRlZiBDS0hfQ09VTlQKKwlja2gtPm5pbnNlcnRz Kys7CisjZW5kaWYKKworCXdoaWxlIChja2hfdHJ5X2luc2VydChja2gsICZrZXksICZkYXRhKSkg eworCQlpZiAoY2toX2dyb3codHNkLCBja2gpKSB7CisJCQlyZXQgPSB0cnVlOworCQkJZ290byBs YWJlbF9yZXR1cm47CisJCX0KKwl9CisKKwlyZXQgPSBmYWxzZTsKK2xhYmVsX3JldHVybjoKKwly ZXR1cm4gcmV0OworfQorCitib29sCitja2hfcmVtb3ZlKHRzZF90ICp0c2QsIGNraF90ICpja2gs IGNvbnN0IHZvaWQgKnNlYXJjaGtleSwgdm9pZCAqKmtleSwKKyAgICB2b2lkICoqZGF0YSkgewor CXNpemVfdCBjZWxsOworCisJYXNzZXJ0KGNraCAhPSBOVUxMKTsKKworCWNlbGwgPSBja2hfaXNl YXJjaChja2gsIHNlYXJjaGtleSk7CisJaWYgKGNlbGwgIT0gU0laRV9UX01BWCkgeworCQlpZiAo a2V5ICE9IE5VTEwpIHsKKwkJCSprZXkgPSAodm9pZCAqKWNraC0+dGFiW2NlbGxdLmtleTsKKwkJ fQorCQlpZiAoZGF0YSAhPSBOVUxMKSB7CisJCQkqZGF0YSA9ICh2b2lkICopY2toLT50YWJbY2Vs bF0uZGF0YTsKKwkJfQorCQlja2gtPnRhYltjZWxsXS5rZXkgPSBOVUxMOworCQlja2gtPnRhYltj ZWxsXS5kYXRhID0gTlVMTDsgLyogTm90IG5lY2Vzc2FyeS4gKi8KKworCQlja2gtPmNvdW50LS07 CisJCS8qIFRyeSB0byBoYWx2ZSB0aGUgdGFibGUgaWYgaXQgaXMgbGVzcyB0aGFuIDEvNCBmdWxs LiAqLworCQlpZiAoY2toLT5jb3VudCA8IChaVSgxKSA8PCAoY2toLT5sZ19jdXJidWNrZXRzCisJ CSAgICArIExHX0NLSF9CVUNLRVRfQ0VMTFMgLSAyKSkgJiYgY2toLT5sZ19jdXJidWNrZXRzCisJ CSAgICA+IGNraC0+bGdfbWluYnVja2V0cykgeworCQkJLyogSWdub3JlIGVycm9yIGR1ZSB0byBP T00uICovCisJCQlja2hfc2hyaW5rKHRzZCwgY2toKTsKKwkJfQorCisJCXJldHVybiBmYWxzZTsK Kwl9CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworYm9vbAorY2toX3NlYXJjaChja2hfdCAqY2toLCBj b25zdCB2b2lkICpzZWFyY2hrZXksIHZvaWQgKiprZXksIHZvaWQgKipkYXRhKSB7CisJc2l6ZV90 IGNlbGw7CisKKwlhc3NlcnQoY2toICE9IE5VTEwpOworCisJY2VsbCA9IGNraF9pc2VhcmNoKGNr aCwgc2VhcmNoa2V5KTsKKwlpZiAoY2VsbCAhPSBTSVpFX1RfTUFYKSB7CisJCWlmIChrZXkgIT0g TlVMTCkgeworCQkJKmtleSA9ICh2b2lkICopY2toLT50YWJbY2VsbF0ua2V5OworCQl9CisJCWlm IChkYXRhICE9IE5VTEwpIHsKKwkJCSpkYXRhID0gKHZvaWQgKilja2gtPnRhYltjZWxsXS5kYXRh OworCQl9CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlyZXR1cm4gdHJ1ZTsKK30KKwordm9pZAor Y2toX3N0cmluZ19oYXNoKGNvbnN0IHZvaWQgKmtleSwgc2l6ZV90IHJfaGFzaFsyXSkgeworCWhh c2goa2V5LCBzdHJsZW4oKGNvbnN0IGNoYXIgKilrZXkpLCAweDk0MTIyZjMzVSwgcl9oYXNoKTsK K30KKworYm9vbAorY2toX3N0cmluZ19rZXljb21wKGNvbnN0IHZvaWQgKmsxLCBjb25zdCB2b2lk ICprMikgeworCWFzc2VydChrMSAhPSBOVUxMKTsKKwlhc3NlcnQoazIgIT0gTlVMTCk7CisKKwly ZXR1cm4gIXN0cmNtcCgoY2hhciAqKWsxLCAoY2hhciAqKWsyKTsKK30KKwordm9pZAorY2toX3Bv aW50ZXJfaGFzaChjb25zdCB2b2lkICprZXksIHNpemVfdCByX2hhc2hbMl0pIHsKKwl1bmlvbiB7 CisJCWNvbnN0IHZvaWQJKnY7CisJCXNpemVfdAkJaTsKKwl9IHU7CisKKwlhc3NlcnQoc2l6ZW9m KHUudikgPT0gc2l6ZW9mKHUuaSkpOworCXUudiA9IGtleTsKKwloYXNoKCZ1LmksIHNpemVvZih1 LmkpLCAweGQ5ODMzOTZlVSwgcl9oYXNoKTsKK30KKworYm9vbAorY2toX3BvaW50ZXJfa2V5Y29t cChjb25zdCB2b2lkICprMSwgY29uc3Qgdm9pZCAqazIpIHsKKwlyZXR1cm4gKGsxID09IGsyKTsK K30KCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9z cmMvY291bnRlci5jIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvc3Jj L2NvdW50ZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjFhZTNhCi0t LSAvZGV2L251bGwKKysrIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAv c3JjL2NvdW50ZXIuYwpAQCAtMCwwICsxLDMwIEBACisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJu YWwvamVtYWxsb2NfcHJlYW1ibGUuaCIKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9qZW1h bGxvY19pbnRlcm5hbF9pbmNsdWRlcy5oIgorCisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwv Y291bnRlci5oIgorCitib29sCitjb3VudGVyX2FjY3VtX2luaXQoY291bnRlcl9hY2N1bV90ICpj b3VudGVyLCB1aW50NjRfdCBpbnRlcnZhbCkgeworCWlmIChMT0NLRURJTlRfTVRYX0lOSVQoY291 bnRlci0+bXR4LCAiY291bnRlcl9hY2N1bSIsCisJICAgIFdJVE5FU1NfUkFOS19DT1VOVEVSX0FD Q1VNLCBtYWxsb2NfbXV0ZXhfcmFua19leGNsdXNpdmUpKSB7CisJCXJldHVybiB0cnVlOworCX0K Kwlsb2NrZWRfaW5pdF91NjRfdW5zeW5jaHJvbml6ZWQoJmNvdW50ZXItPmFjY3VtYnl0ZXMsIDAp OworCWNvdW50ZXItPmludGVydmFsID0gaW50ZXJ2YWw7CisJcmV0dXJuIGZhbHNlOworfQorCit2 b2lkCitjb3VudGVyX3ByZWZvcmsodHNkbl90ICp0c2RuLCBjb3VudGVyX2FjY3VtX3QgKmNvdW50 ZXIpIHsKKwlMT0NLRURJTlRfTVRYX1BSRUZPUksodHNkbiwgY291bnRlci0+bXR4KTsKK30KKwor dm9pZAorY291bnRlcl9wb3N0Zm9ya19wYXJlbnQodHNkbl90ICp0c2RuLCBjb3VudGVyX2FjY3Vt X3QgKmNvdW50ZXIpIHsKKwlMT0NLRURJTlRfTVRYX1BPU1RGT1JLX1BBUkVOVCh0c2RuLCBjb3Vu dGVyLT5tdHgpOworfQorCit2b2lkCitjb3VudGVyX3Bvc3Rmb3JrX2NoaWxkKHRzZG5fdCAqdHNk biwgY291bnRlcl9hY2N1bV90ICpjb3VudGVyKSB7CisJTE9DS0VESU5UX01UWF9QT1NURk9SS19D SElMRCh0c2RuLCBjb3VudGVyLT5tdHgpOworfQoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMu My4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3NyYy9jdGwuYyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1 aWxkL2plbWFsbG9jLTUuMy4wL3NyYy9jdGwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwLi4xMzUyNzFiCi0tLSAvZGV2L251bGwKKysrIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVp bGQvamVtYWxsb2MtNS4zLjAvc3JjL2N0bC5jCkBAIC0wLDAgKzEsNDQxNCBAQAorI2luY2x1ZGUg ImplbWFsbG9jL2ludGVybmFsL2plbWFsbG9jX3ByZWFtYmxlLmgiCisjaW5jbHVkZSAiamVtYWxs b2MvaW50ZXJuYWwvamVtYWxsb2NfaW50ZXJuYWxfaW5jbHVkZXMuaCIKKworI2luY2x1ZGUgImpl bWFsbG9jL2ludGVybmFsL2Fzc2VydC5oIgorI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2N0 bC5oIgorI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2V4dGVudF9kc3MuaCIKKyNpbmNsdWRl ICJqZW1hbGxvYy9pbnRlcm5hbC9leHRlbnRfbW1hcC5oIgorI2luY2x1ZGUgImplbWFsbG9jL2lu dGVybmFsL2luc3BlY3QuaCIKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9tdXRleC5oIgor I2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL25zdGltZS5oIgorI2luY2x1ZGUgImplbWFsbG9j L2ludGVybmFsL3BlYWtfZXZlbnQuaCIKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9wcm9m X2RhdGEuaCIKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9wcm9mX2xvZy5oIgorI2luY2x1 ZGUgImplbWFsbG9jL2ludGVybmFsL3Byb2ZfcmVjZW50LmgiCisjaW5jbHVkZSAiamVtYWxsb2Mv aW50ZXJuYWwvcHJvZl9zdGF0cy5oIgorI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL3Byb2Zf c3lzLmgiCisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvc2FmZXR5X2NoZWNrLmgiCisjaW5j bHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvc2MuaCIKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5h bC91dGlsLmgiCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBEYXRhLiAqLworCisvKgor ICogY3RsX210eCBwcm90ZWN0cyB0aGUgZm9sbG93aW5nOgorICogLSBjdGxfc3RhdHMtPioKKyAq Lworc3RhdGljIG1hbGxvY19tdXRleF90CWN0bF9tdHg7CitzdGF0aWMgYm9vbAkJY3RsX2luaXRp YWxpemVkOworc3RhdGljIGN0bF9zdGF0c190CSpjdGxfc3RhdHM7CitzdGF0aWMgY3RsX2FyZW5h c190CSpjdGxfYXJlbmFzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogSGVscGVycyBm b3IgbmFtZWQgYW5kIGluZGV4ZWQgbm9kZXMuICovCisKK3N0YXRpYyBjb25zdCBjdGxfbmFtZWRf bm9kZV90ICoKK2N0bF9uYW1lZF9ub2RlKGNvbnN0IGN0bF9ub2RlX3QgKm5vZGUpIHsKKwlyZXR1 cm4gKChub2RlLT5uYW1lZCkgPyAoY29uc3QgY3RsX25hbWVkX25vZGVfdCAqKW5vZGUgOiBOVUxM KTsKK30KKworc3RhdGljIGNvbnN0IGN0bF9uYW1lZF9ub2RlX3QgKgorY3RsX25hbWVkX2NoaWxk cmVuKGNvbnN0IGN0bF9uYW1lZF9ub2RlX3QgKm5vZGUsIHNpemVfdCBpbmRleCkgeworCWNvbnN0 IGN0bF9uYW1lZF9ub2RlX3QgKmNoaWxkcmVuID0gY3RsX25hbWVkX25vZGUobm9kZS0+Y2hpbGRy ZW4pOworCisJcmV0dXJuIChjaGlsZHJlbiA/ICZjaGlsZHJlbltpbmRleF0gOiBOVUxMKTsKK30K Kworc3RhdGljIGNvbnN0IGN0bF9pbmRleGVkX25vZGVfdCAqCitjdGxfaW5kZXhlZF9ub2RlKGNv bnN0IGN0bF9ub2RlX3QgKm5vZGUpIHsKKwlyZXR1cm4gKCFub2RlLT5uYW1lZCA/IChjb25zdCBj dGxfaW5kZXhlZF9ub2RlX3QgKilub2RlIDogTlVMTCk7Cit9CisKKy8qKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKiovCisvKiBGdW5jdGlvbiBwcm90b3R5cGVzIGZvciBub24taW5saW5lIHN0YXRpYyBmdW5j dGlvbnMuICovCisKKyNkZWZpbmUgQ1RMX1BST1RPKG4pCQkJCQkJCVwKK3N0YXRpYyBpbnQJbiMj X2N0bCh0c2RfdCAqdHNkLCBjb25zdCBzaXplX3QgKm1pYiwgc2l6ZV90IG1pYmxlbiwJXAorICAg IHZvaWQgKm9sZHAsIHNpemVfdCAqb2xkbGVucCwgdm9pZCAqbmV3cCwgc2l6ZV90IG5ld2xlbik7 CisKKyNkZWZpbmUgSU5ERVhfUFJPVE8obikJCQkJCQkJXAorc3RhdGljIGNvbnN0IGN0bF9uYW1l ZF9ub2RlX3QJKm4jI19pbmRleCh0c2RuX3QgKnRzZG4sCQlcCisgICAgY29uc3Qgc2l6ZV90ICpt aWIsIHNpemVfdCBtaWJsZW4sIHNpemVfdCBpKTsKKworQ1RMX1BST1RPKHZlcnNpb24pCitDVExf UFJPVE8oZXBvY2gpCitDVExfUFJPVE8oYmFja2dyb3VuZF90aHJlYWQpCitDVExfUFJPVE8obWF4 X2JhY2tncm91bmRfdGhyZWFkcykKK0NUTF9QUk9UTyh0aHJlYWRfdGNhY2hlX2VuYWJsZWQpCitD VExfUFJPVE8odGhyZWFkX3RjYWNoZV9mbHVzaCkKK0NUTF9QUk9UTyh0aHJlYWRfcGVha19yZWFk KQorQ1RMX1BST1RPKHRocmVhZF9wZWFrX3Jlc2V0KQorQ1RMX1BST1RPKHRocmVhZF9wcm9mX25h bWUpCitDVExfUFJPVE8odGhyZWFkX3Byb2ZfYWN0aXZlKQorQ1RMX1BST1RPKHRocmVhZF9hcmVu YSkKK0NUTF9QUk9UTyh0aHJlYWRfYWxsb2NhdGVkKQorQ1RMX1BST1RPKHRocmVhZF9hbGxvY2F0 ZWRwKQorQ1RMX1BST1RPKHRocmVhZF9kZWFsbG9jYXRlZCkKK0NUTF9QUk9UTyh0aHJlYWRfZGVh bGxvY2F0ZWRwKQorQ1RMX1BST1RPKHRocmVhZF9pZGxlKQorQ1RMX1BST1RPKGNvbmZpZ19jYWNo ZV9vYmxpdmlvdXMpCitDVExfUFJPVE8oY29uZmlnX2RlYnVnKQorQ1RMX1BST1RPKGNvbmZpZ19m aWxsKQorQ1RMX1BST1RPKGNvbmZpZ19sYXp5X2xvY2spCitDVExfUFJPVE8oY29uZmlnX21hbGxv Y19jb25mKQorQ1RMX1BST1RPKGNvbmZpZ19vcHRfc2FmZXR5X2NoZWNrcykKK0NUTF9QUk9UTyhj b25maWdfcHJvZikKK0NUTF9QUk9UTyhjb25maWdfcHJvZl9saWJnY2MpCitDVExfUFJPVE8oY29u ZmlnX3Byb2ZfbGlidW53aW5kKQorQ1RMX1BST1RPKGNvbmZpZ19zdGF0cykKK0NUTF9QUk9UTyhj b25maWdfdXRyYWNlKQorQ1RMX1BST1RPKGNvbmZpZ194bWFsbG9jKQorQ1RMX1BST1RPKG9wdF9h Ym9ydCkKK0NUTF9QUk9UTyhvcHRfYWJvcnRfY29uZikKK0NUTF9QUk9UTyhvcHRfY2FjaGVfb2Js aXZpb3VzKQorQ1RMX1BST1RPKG9wdF90cnVzdF9tYWR2aXNlKQorQ1RMX1BST1RPKG9wdF9jb25m aXJtX2NvbmYpCitDVExfUFJPVE8ob3B0X2hwYSkKK0NUTF9QUk9UTyhvcHRfaHBhX3NsYWJfbWF4 X2FsbG9jKQorQ1RMX1BST1RPKG9wdF9ocGFfaHVnaWZpY2F0aW9uX3RocmVzaG9sZCkKK0NUTF9Q Uk9UTyhvcHRfaHBhX2h1Z2lmeV9kZWxheV9tcykKK0NUTF9QUk9UTyhvcHRfaHBhX21pbl9wdXJn ZV9pbnRlcnZhbF9tcykKK0NUTF9QUk9UTyhvcHRfaHBhX2RpcnR5X211bHQpCitDVExfUFJPVE8o b3B0X2hwYV9zZWNfbnNoYXJkcykKK0NUTF9QUk9UTyhvcHRfaHBhX3NlY19tYXhfYWxsb2MpCitD VExfUFJPVE8ob3B0X2hwYV9zZWNfbWF4X2J5dGVzKQorQ1RMX1BST1RPKG9wdF9ocGFfc2VjX2J5 dGVzX2FmdGVyX2ZsdXNoKQorQ1RMX1BST1RPKG9wdF9ocGFfc2VjX2JhdGNoX2ZpbGxfZXh0cmEp CitDVExfUFJPVE8ob3B0X21ldGFkYXRhX3RocCkKK0NUTF9QUk9UTyhvcHRfcmV0YWluKQorQ1RM X1BST1RPKG9wdF9kc3MpCitDVExfUFJPVE8ob3B0X25hcmVuYXMpCitDVExfUFJPVE8ob3B0X3Bl cmNwdV9hcmVuYSkKK0NUTF9QUk9UTyhvcHRfb3ZlcnNpemVfdGhyZXNob2xkKQorQ1RMX1BST1RP KG9wdF9iYWNrZ3JvdW5kX3RocmVhZCkKK0NUTF9QUk9UTyhvcHRfbXV0ZXhfbWF4X3NwaW4pCitD VExfUFJPVE8ob3B0X21heF9iYWNrZ3JvdW5kX3RocmVhZHMpCitDVExfUFJPVE8ob3B0X2RpcnR5 X2RlY2F5X21zKQorQ1RMX1BST1RPKG9wdF9tdXp6eV9kZWNheV9tcykKK0NUTF9QUk9UTyhvcHRf c3RhdHNfcHJpbnQpCitDVExfUFJPVE8ob3B0X3N0YXRzX3ByaW50X29wdHMpCitDVExfUFJPVE8o b3B0X3N0YXRzX2ludGVydmFsKQorQ1RMX1BST1RPKG9wdF9zdGF0c19pbnRlcnZhbF9vcHRzKQor Q1RMX1BST1RPKG9wdF9qdW5rKQorQ1RMX1BST1RPKG9wdF96ZXJvKQorQ1RMX1BST1RPKG9wdF91 dHJhY2UpCitDVExfUFJPVE8ob3B0X3htYWxsb2MpCitDVExfUFJPVE8ob3B0X2V4cGVyaW1lbnRh bF9pbmZhbGxpYmxlX25ldykKK0NUTF9QUk9UTyhvcHRfdGNhY2hlKQorQ1RMX1BST1RPKG9wdF90 Y2FjaGVfbWF4KQorQ1RMX1BST1RPKG9wdF90Y2FjaGVfbnNsb3RzX3NtYWxsX21pbikKK0NUTF9Q Uk9UTyhvcHRfdGNhY2hlX25zbG90c19zbWFsbF9tYXgpCitDVExfUFJPVE8ob3B0X3RjYWNoZV9u c2xvdHNfbGFyZ2UpCitDVExfUFJPVE8ob3B0X2xnX3RjYWNoZV9uc2xvdHNfbXVsKQorQ1RMX1BS T1RPKG9wdF90Y2FjaGVfZ2NfaW5jcl9ieXRlcykKK0NUTF9QUk9UTyhvcHRfdGNhY2hlX2djX2Rl bGF5X2J5dGVzKQorQ1RMX1BST1RPKG9wdF9sZ190Y2FjaGVfZmx1c2hfc21hbGxfZGl2KQorQ1RM X1BST1RPKG9wdF9sZ190Y2FjaGVfZmx1c2hfbGFyZ2VfZGl2KQorQ1RMX1BST1RPKG9wdF90aHAp CitDVExfUFJPVE8ob3B0X2xnX2V4dGVudF9tYXhfYWN0aXZlX2ZpdCkKK0NUTF9QUk9UTyhvcHRf cHJvZikKK0NUTF9QUk9UTyhvcHRfcHJvZl9wcmVmaXgpCitDVExfUFJPVE8ob3B0X3Byb2ZfYWN0 aXZlKQorQ1RMX1BST1RPKG9wdF9wcm9mX3RocmVhZF9hY3RpdmVfaW5pdCkKK0NUTF9QUk9UTyhv cHRfbGdfcHJvZl9zYW1wbGUpCitDVExfUFJPVE8ob3B0X2xnX3Byb2ZfaW50ZXJ2YWwpCitDVExf UFJPVE8ob3B0X3Byb2ZfZ2R1bXApCitDVExfUFJPVE8ob3B0X3Byb2ZfZmluYWwpCitDVExfUFJP VE8ob3B0X3Byb2ZfbGVhaykKK0NUTF9QUk9UTyhvcHRfcHJvZl9sZWFrX2Vycm9yKQorQ1RMX1BS T1RPKG9wdF9wcm9mX2FjY3VtKQorQ1RMX1BST1RPKG9wdF9wcm9mX3JlY2VudF9hbGxvY19tYXgp CitDVExfUFJPVE8ob3B0X3Byb2Zfc3RhdHMpCitDVExfUFJPVE8ob3B0X3Byb2Zfc3lzX3RocmVh ZF9uYW1lKQorQ1RMX1BST1RPKG9wdF9wcm9mX3RpbWVfcmVzKQorQ1RMX1BST1RPKG9wdF9sZ19z YW5fdWFmX2FsaWduKQorQ1RMX1BST1RPKG9wdF96ZXJvX3JlYWxsb2MpCitDVExfUFJPVE8odGNh Y2hlX2NyZWF0ZSkKK0NUTF9QUk9UTyh0Y2FjaGVfZmx1c2gpCitDVExfUFJPVE8odGNhY2hlX2Rl c3Ryb3kpCitDVExfUFJPVE8oYXJlbmFfaV9pbml0aWFsaXplZCkKK0NUTF9QUk9UTyhhcmVuYV9p X2RlY2F5KQorQ1RMX1BST1RPKGFyZW5hX2lfcHVyZ2UpCitDVExfUFJPVE8oYXJlbmFfaV9yZXNl dCkKK0NUTF9QUk9UTyhhcmVuYV9pX2Rlc3Ryb3kpCitDVExfUFJPVE8oYXJlbmFfaV9kc3MpCitD VExfUFJPVE8oYXJlbmFfaV9vdmVyc2l6ZV90aHJlc2hvbGQpCitDVExfUFJPVE8oYXJlbmFfaV9k aXJ0eV9kZWNheV9tcykKK0NUTF9QUk9UTyhhcmVuYV9pX211enp5X2RlY2F5X21zKQorQ1RMX1BS T1RPKGFyZW5hX2lfZXh0ZW50X2hvb2tzKQorQ1RMX1BST1RPKGFyZW5hX2lfcmV0YWluX2dyb3df bGltaXQpCitJTkRFWF9QUk9UTyhhcmVuYV9pKQorQ1RMX1BST1RPKGFyZW5hc19iaW5faV9zaXpl KQorQ1RMX1BST1RPKGFyZW5hc19iaW5faV9ucmVncykKK0NUTF9QUk9UTyhhcmVuYXNfYmluX2lf c2xhYl9zaXplKQorQ1RMX1BST1RPKGFyZW5hc19iaW5faV9uc2hhcmRzKQorSU5ERVhfUFJPVE8o YXJlbmFzX2Jpbl9pKQorQ1RMX1BST1RPKGFyZW5hc19sZXh0ZW50X2lfc2l6ZSkKK0lOREVYX1BS T1RPKGFyZW5hc19sZXh0ZW50X2kpCitDVExfUFJPVE8oYXJlbmFzX25hcmVuYXMpCitDVExfUFJP VE8oYXJlbmFzX2RpcnR5X2RlY2F5X21zKQorQ1RMX1BST1RPKGFyZW5hc19tdXp6eV9kZWNheV9t cykKK0NUTF9QUk9UTyhhcmVuYXNfcXVhbnR1bSkKK0NUTF9QUk9UTyhhcmVuYXNfcGFnZSkKK0NU TF9QUk9UTyhhcmVuYXNfdGNhY2hlX21heCkKK0NUTF9QUk9UTyhhcmVuYXNfbmJpbnMpCitDVExf UFJPVE8oYXJlbmFzX25oYmlucykKK0NUTF9QUk9UTyhhcmVuYXNfbmxleHRlbnRzKQorQ1RMX1BS T1RPKGFyZW5hc19jcmVhdGUpCitDVExfUFJPVE8oYXJlbmFzX2xvb2t1cCkKK0NUTF9QUk9UTyhw cm9mX3RocmVhZF9hY3RpdmVfaW5pdCkKK0NUTF9QUk9UTyhwcm9mX2FjdGl2ZSkKK0NUTF9QUk9U Tyhwcm9mX2R1bXApCitDVExfUFJPVE8ocHJvZl9nZHVtcCkKK0NUTF9QUk9UTyhwcm9mX3ByZWZp eCkKK0NUTF9QUk9UTyhwcm9mX3Jlc2V0KQorQ1RMX1BST1RPKHByb2ZfaW50ZXJ2YWwpCitDVExf UFJPVE8obGdfcHJvZl9zYW1wbGUpCitDVExfUFJPVE8ocHJvZl9sb2dfc3RhcnQpCitDVExfUFJP VE8ocHJvZl9sb2dfc3RvcCkKK0NUTF9QUk9UTyhwcm9mX3N0YXRzX2JpbnNfaV9saXZlKQorQ1RM X1BST1RPKHByb2Zfc3RhdHNfYmluc19pX2FjY3VtKQorSU5ERVhfUFJPVE8ocHJvZl9zdGF0c19i aW5zX2kpCitDVExfUFJPVE8ocHJvZl9zdGF0c19sZXh0ZW50c19pX2xpdmUpCitDVExfUFJPVE8o cHJvZl9zdGF0c19sZXh0ZW50c19pX2FjY3VtKQorSU5ERVhfUFJPVE8ocHJvZl9zdGF0c19sZXh0 ZW50c19pKQorQ1RMX1BST1RPKHN0YXRzX2FyZW5hc19pX3NtYWxsX2FsbG9jYXRlZCkKK0NUTF9Q Uk9UTyhzdGF0c19hcmVuYXNfaV9zbWFsbF9ubWFsbG9jKQorQ1RMX1BST1RPKHN0YXRzX2FyZW5h c19pX3NtYWxsX25kYWxsb2MpCitDVExfUFJPVE8oc3RhdHNfYXJlbmFzX2lfc21hbGxfbnJlcXVl c3RzKQorQ1RMX1BST1RPKHN0YXRzX2FyZW5hc19pX3NtYWxsX25maWxscykKK0NUTF9QUk9UTyhz dGF0c19hcmVuYXNfaV9zbWFsbF9uZmx1c2hlcykKK0NUTF9QUk9UTyhzdGF0c19hcmVuYXNfaV9s YXJnZV9hbGxvY2F0ZWQpCitDVExfUFJPVE8oc3RhdHNfYXJlbmFzX2lfbGFyZ2Vfbm1hbGxvYykK K0NUTF9QUk9UTyhzdGF0c19hcmVuYXNfaV9sYXJnZV9uZGFsbG9jKQorQ1RMX1BST1RPKHN0YXRz X2FyZW5hc19pX2xhcmdlX25yZXF1ZXN0cykKK0NUTF9QUk9UTyhzdGF0c19hcmVuYXNfaV9sYXJn ZV9uZmlsbHMpCitDVExfUFJPVE8oc3RhdHNfYXJlbmFzX2lfbGFyZ2VfbmZsdXNoZXMpCitDVExf UFJPVE8oc3RhdHNfYXJlbmFzX2lfYmluc19qX25tYWxsb2MpCitDVExfUFJPVE8oc3RhdHNfYXJl bmFzX2lfYmluc19qX25kYWxsb2MpCitDVExfUFJPVE8oc3RhdHNfYXJlbmFzX2lfYmluc19qX25y ZXF1ZXN0cykKK0NUTF9QUk9UTyhzdGF0c19hcmVuYXNfaV9iaW5zX2pfY3VycmVncykKK0NUTF9Q Uk9UTyhzdGF0c19hcmVuYXNfaV9iaW5zX2pfbmZpbGxzKQorQ1RMX1BST1RPKHN0YXRzX2FyZW5h c19pX2JpbnNfal9uZmx1c2hlcykKK0NUTF9QUk9UTyhzdGF0c19hcmVuYXNfaV9iaW5zX2pfbnNs YWJzKQorQ1RMX1BST1RPKHN0YXRzX2FyZW5hc19pX2JpbnNfal9ucmVzbGFicykKK0NUTF9QUk9U TyhzdGF0c19hcmVuYXNfaV9iaW5zX2pfY3Vyc2xhYnMpCitDVExfUFJPVE8oc3RhdHNfYXJlbmFz X2lfYmluc19qX25vbmZ1bGxfc2xhYnMpCitJTkRFWF9QUk9UTyhzdGF0c19hcmVuYXNfaV9iaW5z X2opCitDVExfUFJPVE8oc3RhdHNfYXJlbmFzX2lfbGV4dGVudHNfal9ubWFsbG9jKQorQ1RMX1BS T1RPKHN0YXRzX2FyZW5hc19pX2xleHRlbnRzX2pfbmRhbGxvYykKK0NUTF9QUk9UTyhzdGF0c19h cmVuYXNfaV9sZXh0ZW50c19qX25yZXF1ZXN0cykKK0NUTF9QUk9UTyhzdGF0c19hcmVuYXNfaV9s ZXh0ZW50c19qX2N1cmxleHRlbnRzKQorSU5ERVhfUFJPVE8oc3RhdHNfYXJlbmFzX2lfbGV4dGVu dHNfaikKK0NUTF9QUk9UTyhzdGF0c19hcmVuYXNfaV9leHRlbnRzX2pfbmRpcnR5KQorQ1RMX1BS T1RPKHN0YXRzX2FyZW5hc19pX2V4dGVudHNfal9ubXV6enkpCitDVExfUFJPVE8oc3RhdHNfYXJl bmFzX2lfZXh0ZW50c19qX25yZXRhaW5lZCkKK0NUTF9QUk9UTyhzdGF0c19hcmVuYXNfaV9leHRl bnRzX2pfZGlydHlfYnl0ZXMpCitDVExfUFJPVE8oc3RhdHNfYXJlbmFzX2lfZXh0ZW50c19qX211 enp5X2J5dGVzKQorQ1RMX1BST1RPKHN0YXRzX2FyZW5hc19pX2V4dGVudHNfal9yZXRhaW5lZF9i eXRlcykKK0lOREVYX1BST1RPKHN0YXRzX2FyZW5hc19pX2V4dGVudHNfaikKK0NUTF9QUk9UTyhz dGF0c19hcmVuYXNfaV9ocGFfc2hhcmRfbnB1cmdlX3Bhc3NlcykKK0NUTF9QUk9UTyhzdGF0c19h cmVuYXNfaV9ocGFfc2hhcmRfbnB1cmdlcykKK0NUTF9QUk9UTyhzdGF0c19hcmVuYXNfaV9ocGFf c2hhcmRfbmh1Z2lmaWVzKQorQ1RMX1BST1RPKHN0YXRzX2FyZW5hc19pX2hwYV9zaGFyZF9uZGVo dWdpZmllcykKKworLyogV2UgaGF2ZSBhIHNldCBvZiBzdGF0cyBmb3IgZnVsbCBzbGFicy4gKi8K K0NUTF9QUk9UTyhzdGF0c19hcmVuYXNfaV9ocGFfc2hhcmRfZnVsbF9zbGFic19ucGFnZXNsYWJz X25vbmh1Z2UpCitDVExfUFJPVE8oc3RhdHNfYXJlbmFzX2lfaHBhX3NoYXJkX2Z1bGxfc2xhYnNf bnBhZ2VzbGFic19odWdlKQorQ1RMX1BST1RPKHN0YXRzX2FyZW5hc19pX2hwYV9zaGFyZF9mdWxs X3NsYWJzX25hY3RpdmVfbm9uaHVnZSkKK0NUTF9QUk9UTyhzdGF0c19hcmVuYXNfaV9ocGFfc2hh cmRfZnVsbF9zbGFic19uYWN0aXZlX2h1Z2UpCitDVExfUFJPVE8oc3RhdHNfYXJlbmFzX2lfaHBh X3NoYXJkX2Z1bGxfc2xhYnNfbmRpcnR5X25vbmh1Z2UpCitDVExfUFJPVE8oc3RhdHNfYXJlbmFz X2lfaHBhX3NoYXJkX2Z1bGxfc2xhYnNfbmRpcnR5X2h1Z2UpCisKKy8qIEEgcGFyYWxsZWwgc2V0 IGZvciB0aGUgZW1wdHkgc2xhYnMuICovCitDVExfUFJPVE8oc3RhdHNfYXJlbmFzX2lfaHBhX3No YXJkX2VtcHR5X3NsYWJzX25wYWdlc2xhYnNfbm9uaHVnZSkKK0NUTF9QUk9UTyhzdGF0c19hcmVu YXNfaV9ocGFfc2hhcmRfZW1wdHlfc2xhYnNfbnBhZ2VzbGFic19odWdlKQorQ1RMX1BST1RPKHN0 YXRzX2FyZW5hc19pX2hwYV9zaGFyZF9lbXB0eV9zbGFic19uYWN0aXZlX25vbmh1Z2UpCitDVExf UFJPVE8oc3RhdHNfYXJlbmFzX2lfaHBhX3NoYXJkX2VtcHR5X3NsYWJzX25hY3RpdmVfaHVnZSkK K0NUTF9QUk9UTyhzdGF0c19hcmVuYXNfaV9ocGFfc2hhcmRfZW1wdHlfc2xhYnNfbmRpcnR5X25v bmh1Z2UpCitDVExfUFJPVE8oc3RhdHNfYXJlbmFzX2lfaHBhX3NoYXJkX2VtcHR5X3NsYWJzX25k aXJ0eV9odWdlKQorCisvKgorICogQW5kIG9uZSBmb3IgdGhlIHNsYWJzIHRoYXQgYXJlIG5laXRo ZXIgZW1wdHkgbm9yIGZ1bGwsIGJ1dCBpbmRleGVkIGJ5IGhvdworICogZnVsbCB0aGV5IGFyZS4K KyAqLworQ1RMX1BST1RPKHN0YXRzX2FyZW5hc19pX2hwYV9zaGFyZF9ub25mdWxsX3NsYWJzX2pf bnBhZ2VzbGFic19ub25odWdlKQorQ1RMX1BST1RPKHN0YXRzX2FyZW5hc19pX2hwYV9zaGFyZF9u b25mdWxsX3NsYWJzX2pfbnBhZ2VzbGFic19odWdlKQorQ1RMX1BST1RPKHN0YXRzX2FyZW5hc19p X2hwYV9zaGFyZF9ub25mdWxsX3NsYWJzX2pfbmFjdGl2ZV9ub25odWdlKQorQ1RMX1BST1RPKHN0 YXRzX2FyZW5hc19pX2hwYV9zaGFyZF9ub25mdWxsX3NsYWJzX2pfbmFjdGl2ZV9odWdlKQorQ1RM X1BST1RPKHN0YXRzX2FyZW5hc19pX2hwYV9zaGFyZF9ub25mdWxsX3NsYWJzX2pfbmRpcnR5X25v bmh1Z2UpCitDVExfUFJPVE8oc3RhdHNfYXJlbmFzX2lfaHBhX3NoYXJkX25vbmZ1bGxfc2xhYnNf al9uZGlydHlfaHVnZSkKKworSU5ERVhfUFJPVE8oc3RhdHNfYXJlbmFzX2lfaHBhX3NoYXJkX25v bmZ1bGxfc2xhYnNfaikKK0NUTF9QUk9UTyhzdGF0c19hcmVuYXNfaV9udGhyZWFkcykKK0NUTF9Q Uk9UTyhzdGF0c19hcmVuYXNfaV91cHRpbWUpCitDVExfUFJPVE8oc3RhdHNfYXJlbmFzX2lfZHNz KQorQ1RMX1BST1RPKHN0YXRzX2FyZW5hc19pX2RpcnR5X2RlY2F5X21zKQorQ1RMX1BST1RPKHN0 YXRzX2FyZW5hc19pX211enp5X2RlY2F5X21zKQorQ1RMX1BST1RPKHN0YXRzX2FyZW5hc19pX3Bh Y3RpdmUpCitDVExfUFJPVE8oc3RhdHNfYXJlbmFzX2lfcGRpcnR5KQorQ1RMX1BST1RPKHN0YXRz X2FyZW5hc19pX3BtdXp6eSkKK0NUTF9QUk9UTyhzdGF0c19hcmVuYXNfaV9tYXBwZWQpCitDVExf UFJPVE8oc3RhdHNfYXJlbmFzX2lfcmV0YWluZWQpCitDVExfUFJPVE8oc3RhdHNfYXJlbmFzX2lf ZXh0ZW50X2F2YWlsKQorQ1RMX1BST1RPKHN0YXRzX2FyZW5hc19pX2RpcnR5X25wdXJnZSkKK0NU TF9QUk9UTyhzdGF0c19hcmVuYXNfaV9kaXJ0eV9ubWFkdmlzZSkKK0NUTF9QUk9UTyhzdGF0c19h cmVuYXNfaV9kaXJ0eV9wdXJnZWQpCitDVExfUFJPVE8oc3RhdHNfYXJlbmFzX2lfbXV6enlfbnB1 cmdlKQorQ1RMX1BST1RPKHN0YXRzX2FyZW5hc19pX211enp5X25tYWR2aXNlKQorQ1RMX1BST1RP KHN0YXRzX2FyZW5hc19pX211enp5X3B1cmdlZCkKK0NUTF9QUk9UTyhzdGF0c19hcmVuYXNfaV9i YXNlKQorQ1RMX1BST1RPKHN0YXRzX2FyZW5hc19pX2ludGVybmFsKQorQ1RMX1BST1RPKHN0YXRz X2FyZW5hc19pX21ldGFkYXRhX3RocCkKK0NUTF9QUk9UTyhzdGF0c19hcmVuYXNfaV90Y2FjaGVf Ynl0ZXMpCitDVExfUFJPVE8oc3RhdHNfYXJlbmFzX2lfdGNhY2hlX3N0YXNoZWRfYnl0ZXMpCitD VExfUFJPVE8oc3RhdHNfYXJlbmFzX2lfcmVzaWRlbnQpCitDVExfUFJPVE8oc3RhdHNfYXJlbmFz X2lfYWJhbmRvbmVkX3ZtKQorQ1RMX1BST1RPKHN0YXRzX2FyZW5hc19pX2hwYV9zZWNfYnl0ZXMp CitJTkRFWF9QUk9UTyhzdGF0c19hcmVuYXNfaSkKK0NUTF9QUk9UTyhzdGF0c19hbGxvY2F0ZWQp CitDVExfUFJPVE8oc3RhdHNfYWN0aXZlKQorQ1RMX1BST1RPKHN0YXRzX2JhY2tncm91bmRfdGhy ZWFkX251bV90aHJlYWRzKQorQ1RMX1BST1RPKHN0YXRzX2JhY2tncm91bmRfdGhyZWFkX251bV9y dW5zKQorQ1RMX1BST1RPKHN0YXRzX2JhY2tncm91bmRfdGhyZWFkX3J1bl9pbnRlcnZhbCkKK0NU TF9QUk9UTyhzdGF0c19tZXRhZGF0YSkKK0NUTF9QUk9UTyhzdGF0c19tZXRhZGF0YV90aHApCitD VExfUFJPVE8oc3RhdHNfcmVzaWRlbnQpCitDVExfUFJPVE8oc3RhdHNfbWFwcGVkKQorQ1RMX1BS T1RPKHN0YXRzX3JldGFpbmVkKQorQ1RMX1BST1RPKHN0YXRzX3plcm9fcmVhbGxvY3MpCitDVExf UFJPVE8oZXhwZXJpbWVudGFsX2hvb2tzX2luc3RhbGwpCitDVExfUFJPVE8oZXhwZXJpbWVudGFs X2hvb2tzX3JlbW92ZSkKK0NUTF9QUk9UTyhleHBlcmltZW50YWxfaG9va3NfcHJvZl9iYWNrdHJh Y2UpCitDVExfUFJPVE8oZXhwZXJpbWVudGFsX2hvb2tzX3Byb2ZfZHVtcCkKK0NUTF9QUk9UTyhl eHBlcmltZW50YWxfaG9va3Nfc2FmZXR5X2NoZWNrX2Fib3J0KQorQ1RMX1BST1RPKGV4cGVyaW1l bnRhbF90aHJlYWRfYWN0aXZpdHlfY2FsbGJhY2spCitDVExfUFJPVE8oZXhwZXJpbWVudGFsX3V0 aWxpemF0aW9uX3F1ZXJ5KQorQ1RMX1BST1RPKGV4cGVyaW1lbnRhbF91dGlsaXphdGlvbl9iYXRj aF9xdWVyeSkKK0NUTF9QUk9UTyhleHBlcmltZW50YWxfYXJlbmFzX2lfcGFjdGl2ZXApCitJTkRF WF9QUk9UTyhleHBlcmltZW50YWxfYXJlbmFzX2kpCitDVExfUFJPVE8oZXhwZXJpbWVudGFsX3By b2ZfcmVjZW50X2FsbG9jX21heCkKK0NUTF9QUk9UTyhleHBlcmltZW50YWxfcHJvZl9yZWNlbnRf YWxsb2NfZHVtcCkKK0NUTF9QUk9UTyhleHBlcmltZW50YWxfYmF0Y2hfYWxsb2MpCitDVExfUFJP VE8oZXhwZXJpbWVudGFsX2FyZW5hc19jcmVhdGVfZXh0KQorCisjZGVmaW5lIE1VVEVYX1NUQVRT X0NUTF9QUk9UT19HRU4obikJCQkJCVwKK0NUTF9QUk9UTyhzdGF0c18jI24jI19udW1fb3BzKQkJ CQkJCVwKK0NUTF9QUk9UTyhzdGF0c18jI24jI19udW1fd2FpdCkJCQkJCQlcCitDVExfUFJPVE8o c3RhdHNfIyNuIyNfbnVtX3NwaW5fYWNxKQkJCQkJXAorQ1RMX1BST1RPKHN0YXRzXyMjbiMjX251 bV9vd25lcl9zd2l0Y2gpCQkJCQlcCitDVExfUFJPVE8oc3RhdHNfIyNuIyNfdG90YWxfd2FpdF90 aW1lKQkJCQkJXAorQ1RMX1BST1RPKHN0YXRzXyMjbiMjX21heF93YWl0X3RpbWUpCQkJCQlcCitD VExfUFJPVE8oc3RhdHNfIyNuIyNfbWF4X251bV90aGRzKQorCisvKiBHbG9iYWwgbXV0ZXhlcy4g Ki8KKyNkZWZpbmUgT1AobXR4KSBNVVRFWF9TVEFUU19DVExfUFJPVE9fR0VOKG11dGV4ZXNfIyNt dHgpCitNVVRFWF9QUk9GX0dMT0JBTF9NVVRFWEVTCisjdW5kZWYgT1AKKworLyogUGVyIGFyZW5h IG11dGV4ZXMuICovCisjZGVmaW5lIE9QKG10eCkgTVVURVhfU1RBVFNfQ1RMX1BST1RPX0dFTihh cmVuYXNfaV9tdXRleGVzXyMjbXR4KQorTVVURVhfUFJPRl9BUkVOQV9NVVRFWEVTCisjdW5kZWYg T1AKKworLyogQXJlbmEgYmluIG11dGV4ZXMuICovCitNVVRFWF9TVEFUU19DVExfUFJPVE9fR0VO KGFyZW5hc19pX2JpbnNfal9tdXRleCkKKyN1bmRlZiBNVVRFWF9TVEFUU19DVExfUFJPVE9fR0VO CisKK0NUTF9QUk9UTyhzdGF0c19tdXRleGVzX3Jlc2V0KQorCisvKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqLworLyogbWFsbGN0bCB0cmVlLiAqLworCisjZGVmaW5lIE5BTUUobikJe3RydWV9LAluCisj ZGVmaW5lIENISUxEKHQsIGMpCQkJCQkJCVwKKwlzaXplb2YoYyMjX25vZGUpIC8gc2l6ZW9mKGN0 bF8jI3QjI19ub2RlX3QpLAkJCVwKKwkoY3RsX25vZGVfdCAqKWMjI19ub2RlLAkJCQkJCVwKKwlO VUxMCisjZGVmaW5lIENUTChjKQkwLCBOVUxMLCBjIyNfY3RsCisKKy8qCisgKiBPbmx5IGhhbmRs ZXMgaW50ZXJuYWwgaW5kZXhlZCBub2Rlcywgc2luY2UgdGhlcmUgYXJlIGN1cnJlbnRseSBubyBl eHRlcm5hbAorICogb25lcy4KKyAqLworI2RlZmluZSBJTkRFWChpKQl7ZmFsc2V9LAlpIyNfaW5k ZXgKKworc3RhdGljIGNvbnN0IGN0bF9uYW1lZF9ub2RlX3QJdGhyZWFkX3RjYWNoZV9ub2RlW10g PSB7CisJe05BTUUoImVuYWJsZWQiKSwJQ1RMKHRocmVhZF90Y2FjaGVfZW5hYmxlZCl9LAorCXtO QU1FKCJmbHVzaCIpLAkJQ1RMKHRocmVhZF90Y2FjaGVfZmx1c2gpfQorfTsKKworc3RhdGljIGNv bnN0IGN0bF9uYW1lZF9ub2RlX3QJdGhyZWFkX3BlYWtfbm9kZVtdID0geworCXtOQU1FKCJyZWFk IiksCQlDVEwodGhyZWFkX3BlYWtfcmVhZCl9LAorCXtOQU1FKCJyZXNldCIpLAkJQ1RMKHRocmVh ZF9wZWFrX3Jlc2V0KX0sCit9OworCitzdGF0aWMgY29uc3QgY3RsX25hbWVkX25vZGVfdAl0aHJl YWRfcHJvZl9ub2RlW10gPSB7CisJe05BTUUoIm5hbWUiKSwJCUNUTCh0aHJlYWRfcHJvZl9uYW1l KX0sCisJe05BTUUoImFjdGl2ZSIpLAlDVEwodGhyZWFkX3Byb2ZfYWN0aXZlKX0KK307CisKK3N0 YXRpYyBjb25zdCBjdGxfbmFtZWRfbm9kZV90CXRocmVhZF9ub2RlW10gPSB7CisJe05BTUUoImFy ZW5hIiksCQlDVEwodGhyZWFkX2FyZW5hKX0sCisJe05BTUUoImFsbG9jYXRlZCIpLAlDVEwodGhy ZWFkX2FsbG9jYXRlZCl9LAorCXtOQU1FKCJhbGxvY2F0ZWRwIiksCUNUTCh0aHJlYWRfYWxsb2Nh dGVkcCl9LAorCXtOQU1FKCJkZWFsbG9jYXRlZCIpLAlDVEwodGhyZWFkX2RlYWxsb2NhdGVkKX0s CisJe05BTUUoImRlYWxsb2NhdGVkcCIpLAlDVEwodGhyZWFkX2RlYWxsb2NhdGVkcCl9LAorCXtO QU1FKCJ0Y2FjaGUiKSwJQ0hJTEQobmFtZWQsIHRocmVhZF90Y2FjaGUpfSwKKwl7TkFNRSgicGVh ayIpLAkJQ0hJTEQobmFtZWQsIHRocmVhZF9wZWFrKX0sCisJe05BTUUoInByb2YiKSwJCUNISUxE KG5hbWVkLCB0aHJlYWRfcHJvZil9LAorCXtOQU1FKCJpZGxlIiksCQlDVEwodGhyZWFkX2lkbGUp fQorfTsKKworc3RhdGljIGNvbnN0IGN0bF9uYW1lZF9ub2RlX3QJY29uZmlnX25vZGVbXSA9IHsK Kwl7TkFNRSgiY2FjaGVfb2JsaXZpb3VzIiksIENUTChjb25maWdfY2FjaGVfb2JsaXZpb3VzKX0s CisJe05BTUUoImRlYnVnIiksCQlDVEwoY29uZmlnX2RlYnVnKX0sCisJe05BTUUoImZpbGwiKSwJ CUNUTChjb25maWdfZmlsbCl9LAorCXtOQU1FKCJsYXp5X2xvY2siKSwJQ1RMKGNvbmZpZ19sYXp5 X2xvY2spfSwKKwl7TkFNRSgibWFsbG9jX2NvbmYiKSwJQ1RMKGNvbmZpZ19tYWxsb2NfY29uZil9 LAorCXtOQU1FKCJvcHRfc2FmZXR5X2NoZWNrcyIpLAlDVEwoY29uZmlnX29wdF9zYWZldHlfY2hl Y2tzKX0sCisJe05BTUUoInByb2YiKSwJCUNUTChjb25maWdfcHJvZil9LAorCXtOQU1FKCJwcm9m X2xpYmdjYyIpLAlDVEwoY29uZmlnX3Byb2ZfbGliZ2NjKX0sCisJe05BTUUoInByb2ZfbGlidW53 aW5kIiksIENUTChjb25maWdfcHJvZl9saWJ1bndpbmQpfSwKKwl7TkFNRSgic3RhdHMiKSwJCUNU TChjb25maWdfc3RhdHMpfSwKKwl7TkFNRSgidXRyYWNlIiksCUNUTChjb25maWdfdXRyYWNlKX0s CisJe05BTUUoInhtYWxsb2MiKSwJQ1RMKGNvbmZpZ194bWFsbG9jKX0KK307CisKK3N0YXRpYyBj b25zdCBjdGxfbmFtZWRfbm9kZV90IG9wdF9ub2RlW10gPSB7CisJe05BTUUoImFib3J0IiksCQlD VEwob3B0X2Fib3J0KX0sCisJe05BTUUoImFib3J0X2NvbmYiKSwJQ1RMKG9wdF9hYm9ydF9jb25m KX0sCisJe05BTUUoImNhY2hlX29ibGl2aW91cyIpLAlDVEwob3B0X2NhY2hlX29ibGl2aW91cyl9 LAorCXtOQU1FKCJ0cnVzdF9tYWR2aXNlIiksCUNUTChvcHRfdHJ1c3RfbWFkdmlzZSl9LAorCXtO QU1FKCJjb25maXJtX2NvbmYiKSwJQ1RMKG9wdF9jb25maXJtX2NvbmYpfSwKKwl7TkFNRSgiaHBh IiksCQlDVEwob3B0X2hwYSl9LAorCXtOQU1FKCJocGFfc2xhYl9tYXhfYWxsb2MiKSwJQ1RMKG9w dF9ocGFfc2xhYl9tYXhfYWxsb2MpfSwKKwl7TkFNRSgiaHBhX2h1Z2lmaWNhdGlvbl90aHJlc2hv bGQiKSwKKwkJQ1RMKG9wdF9ocGFfaHVnaWZpY2F0aW9uX3RocmVzaG9sZCl9LAorCXtOQU1FKCJo cGFfaHVnaWZ5X2RlbGF5X21zIiksIENUTChvcHRfaHBhX2h1Z2lmeV9kZWxheV9tcyl9LAorCXtO QU1FKCJocGFfbWluX3B1cmdlX2ludGVydmFsX21zIiksIENUTChvcHRfaHBhX21pbl9wdXJnZV9p bnRlcnZhbF9tcyl9LAorCXtOQU1FKCJocGFfZGlydHlfbXVsdCIpLCBDVEwob3B0X2hwYV9kaXJ0 eV9tdWx0KX0sCisJe05BTUUoImhwYV9zZWNfbnNoYXJkcyIpLAlDVEwob3B0X2hwYV9zZWNfbnNo YXJkcyl9LAorCXtOQU1FKCJocGFfc2VjX21heF9hbGxvYyIpLAlDVEwob3B0X2hwYV9zZWNfbWF4 X2FsbG9jKX0sCisJe05BTUUoImhwYV9zZWNfbWF4X2J5dGVzIiksCUNUTChvcHRfaHBhX3NlY19t YXhfYnl0ZXMpfSwKKwl7TkFNRSgiaHBhX3NlY19ieXRlc19hZnRlcl9mbHVzaCIpLAorCQlDVEwo b3B0X2hwYV9zZWNfYnl0ZXNfYWZ0ZXJfZmx1c2gpfSwKKwl7TkFNRSgiaHBhX3NlY19iYXRjaF9m aWxsX2V4dHJhIiksCisJCUNUTChvcHRfaHBhX3NlY19iYXRjaF9maWxsX2V4dHJhKX0sCisJe05B TUUoIm1ldGFkYXRhX3RocCIpLAlDVEwob3B0X21ldGFkYXRhX3RocCl9LAorCXtOQU1FKCJyZXRh aW4iKSwJQ1RMKG9wdF9yZXRhaW4pfSwKKwl7TkFNRSgiZHNzIiksCQlDVEwob3B0X2Rzcyl9LAor CXtOQU1FKCJuYXJlbmFzIiksCUNUTChvcHRfbmFyZW5hcyl9LAorCXtOQU1FKCJwZXJjcHVfYXJl bmEiKSwJQ1RMKG9wdF9wZXJjcHVfYXJlbmEpfSwKKwl7TkFNRSgib3ZlcnNpemVfdGhyZXNob2xk IiksCUNUTChvcHRfb3ZlcnNpemVfdGhyZXNob2xkKX0sCisJe05BTUUoIm11dGV4X21heF9zcGlu IiksCUNUTChvcHRfbXV0ZXhfbWF4X3NwaW4pfSwKKwl7TkFNRSgiYmFja2dyb3VuZF90aHJlYWQi KSwJQ1RMKG9wdF9iYWNrZ3JvdW5kX3RocmVhZCl9LAorCXtOQU1FKCJtYXhfYmFja2dyb3VuZF90 aHJlYWRzIiksCUNUTChvcHRfbWF4X2JhY2tncm91bmRfdGhyZWFkcyl9LAorCXtOQU1FKCJkaXJ0 eV9kZWNheV9tcyIpLCBDVEwob3B0X2RpcnR5X2RlY2F5X21zKX0sCisJe05BTUUoIm11enp5X2Rl Y2F5X21zIiksIENUTChvcHRfbXV6enlfZGVjYXlfbXMpfSwKKwl7TkFNRSgic3RhdHNfcHJpbnQi KSwJQ1RMKG9wdF9zdGF0c19wcmludCl9LAorCXtOQU1FKCJzdGF0c19wcmludF9vcHRzIiksCUNU TChvcHRfc3RhdHNfcHJpbnRfb3B0cyl9LAorCXtOQU1FKCJzdGF0c19pbnRlcnZhbCIpLAlDVEwo b3B0X3N0YXRzX2ludGVydmFsKX0sCisJe05BTUUoInN0YXRzX2ludGVydmFsX29wdHMiKSwJQ1RM KG9wdF9zdGF0c19pbnRlcnZhbF9vcHRzKX0sCisJe05BTUUoImp1bmsiKSwJCUNUTChvcHRfanVu ayl9LAorCXtOQU1FKCJ6ZXJvIiksCQlDVEwob3B0X3plcm8pfSwKKwl7TkFNRSgidXRyYWNlIiks CUNUTChvcHRfdXRyYWNlKX0sCisJe05BTUUoInhtYWxsb2MiKSwJQ1RMKG9wdF94bWFsbG9jKX0s CisJe05BTUUoImV4cGVyaW1lbnRhbF9pbmZhbGxpYmxlX25ldyIpLAorCQlDVEwob3B0X2V4cGVy aW1lbnRhbF9pbmZhbGxpYmxlX25ldyl9LAorCXtOQU1FKCJ0Y2FjaGUiKSwJQ1RMKG9wdF90Y2Fj aGUpfSwKKwl7TkFNRSgidGNhY2hlX21heCIpLAlDVEwob3B0X3RjYWNoZV9tYXgpfSwKKwl7TkFN RSgidGNhY2hlX25zbG90c19zbWFsbF9taW4iKSwKKwkJQ1RMKG9wdF90Y2FjaGVfbnNsb3RzX3Nt YWxsX21pbil9LAorCXtOQU1FKCJ0Y2FjaGVfbnNsb3RzX3NtYWxsX21heCIpLAorCQlDVEwob3B0 X3RjYWNoZV9uc2xvdHNfc21hbGxfbWF4KX0sCisJe05BTUUoInRjYWNoZV9uc2xvdHNfbGFyZ2Ui KSwJQ1RMKG9wdF90Y2FjaGVfbnNsb3RzX2xhcmdlKX0sCisJe05BTUUoImxnX3RjYWNoZV9uc2xv dHNfbXVsIiksCUNUTChvcHRfbGdfdGNhY2hlX25zbG90c19tdWwpfSwKKwl7TkFNRSgidGNhY2hl X2djX2luY3JfYnl0ZXMiKSwJQ1RMKG9wdF90Y2FjaGVfZ2NfaW5jcl9ieXRlcyl9LAorCXtOQU1F KCJ0Y2FjaGVfZ2NfZGVsYXlfYnl0ZXMiKSwJQ1RMKG9wdF90Y2FjaGVfZ2NfZGVsYXlfYnl0ZXMp fSwKKwl7TkFNRSgibGdfdGNhY2hlX2ZsdXNoX3NtYWxsX2RpdiIpLAorCQlDVEwob3B0X2xnX3Rj YWNoZV9mbHVzaF9zbWFsbF9kaXYpfSwKKwl7TkFNRSgibGdfdGNhY2hlX2ZsdXNoX2xhcmdlX2Rp diIpLAorCQlDVEwob3B0X2xnX3RjYWNoZV9mbHVzaF9sYXJnZV9kaXYpfSwKKwl7TkFNRSgidGhw IiksCQlDVEwob3B0X3RocCl9LAorCXtOQU1FKCJsZ19leHRlbnRfbWF4X2FjdGl2ZV9maXQiKSwg Q1RMKG9wdF9sZ19leHRlbnRfbWF4X2FjdGl2ZV9maXQpfSwKKwl7TkFNRSgicHJvZiIpLAkJQ1RM KG9wdF9wcm9mKX0sCisJe05BTUUoInByb2ZfcHJlZml4IiksCUNUTChvcHRfcHJvZl9wcmVmaXgp fSwKKwl7TkFNRSgicHJvZl9hY3RpdmUiKSwJQ1RMKG9wdF9wcm9mX2FjdGl2ZSl9LAorCXtOQU1F KCJwcm9mX3RocmVhZF9hY3RpdmVfaW5pdCIpLCBDVEwob3B0X3Byb2ZfdGhyZWFkX2FjdGl2ZV9p bml0KX0sCisJe05BTUUoImxnX3Byb2Zfc2FtcGxlIiksIENUTChvcHRfbGdfcHJvZl9zYW1wbGUp fSwKKwl7TkFNRSgibGdfcHJvZl9pbnRlcnZhbCIpLCBDVEwob3B0X2xnX3Byb2ZfaW50ZXJ2YWwp fSwKKwl7TkFNRSgicHJvZl9nZHVtcCIpLAlDVEwob3B0X3Byb2ZfZ2R1bXApfSwKKwl7TkFNRSgi cHJvZl9maW5hbCIpLAlDVEwob3B0X3Byb2ZfZmluYWwpfSwKKwl7TkFNRSgicHJvZl9sZWFrIiks CUNUTChvcHRfcHJvZl9sZWFrKX0sCisJe05BTUUoInByb2ZfbGVha19lcnJvciIpLAlDVEwob3B0 X3Byb2ZfbGVha19lcnJvcil9LAorCXtOQU1FKCJwcm9mX2FjY3VtIiksCUNUTChvcHRfcHJvZl9h Y2N1bSl9LAorCXtOQU1FKCJwcm9mX3JlY2VudF9hbGxvY19tYXgiKSwJQ1RMKG9wdF9wcm9mX3Jl Y2VudF9hbGxvY19tYXgpfSwKKwl7TkFNRSgicHJvZl9zdGF0cyIpLAlDVEwob3B0X3Byb2Zfc3Rh dHMpfSwKKwl7TkFNRSgicHJvZl9zeXNfdGhyZWFkX25hbWUiKSwJQ1RMKG9wdF9wcm9mX3N5c190 aHJlYWRfbmFtZSl9LAorCXtOQU1FKCJwcm9mX3RpbWVfcmVzb2x1dGlvbiIpLAlDVEwob3B0X3By b2ZfdGltZV9yZXMpfSwKKwl7TkFNRSgibGdfc2FuX3VhZl9hbGlnbiIpLAlDVEwob3B0X2xnX3Nh bl91YWZfYWxpZ24pfSwKKwl7TkFNRSgiemVyb19yZWFsbG9jIiksCUNUTChvcHRfemVyb19yZWFs bG9jKX0KK307CisKK3N0YXRpYyBjb25zdCBjdGxfbmFtZWRfbm9kZV90CXRjYWNoZV9ub2RlW10g PSB7CisJe05BTUUoImNyZWF0ZSIpLAlDVEwodGNhY2hlX2NyZWF0ZSl9LAorCXtOQU1FKCJmbHVz aCIpLAkJQ1RMKHRjYWNoZV9mbHVzaCl9LAorCXtOQU1FKCJkZXN0cm95IiksCUNUTCh0Y2FjaGVf ZGVzdHJveSl9Cit9OworCitzdGF0aWMgY29uc3QgY3RsX25hbWVkX25vZGVfdCBhcmVuYV9pX25v ZGVbXSA9IHsKKwl7TkFNRSgiaW5pdGlhbGl6ZWQiKSwJQ1RMKGFyZW5hX2lfaW5pdGlhbGl6ZWQp fSwKKwl7TkFNRSgiZGVjYXkiKSwJCUNUTChhcmVuYV9pX2RlY2F5KX0sCisJe05BTUUoInB1cmdl IiksCQlDVEwoYXJlbmFfaV9wdXJnZSl9LAorCXtOQU1FKCJyZXNldCIpLAkJQ1RMKGFyZW5hX2lf cmVzZXQpfSwKKwl7TkFNRSgiZGVzdHJveSIpLAlDVEwoYXJlbmFfaV9kZXN0cm95KX0sCisJe05B TUUoImRzcyIpLAkJQ1RMKGFyZW5hX2lfZHNzKX0sCisJLyoKKwkgKiBVbmRvY3VtZW50ZWQgZm9y IG5vdywgc2luY2Ugd2UgYW50aWNpcGF0ZSBhbiBhcmVuYSBBUEkgaW4gZmx1eCBhZnRlcgorCSAq IHdlIGN1dCB0aGUgbGFzdCA1LXNlcmllcyByZWxlYXNlLgorCSAqLworCXtOQU1FKCJvdmVyc2l6 ZV90aHJlc2hvbGQiKSwgQ1RMKGFyZW5hX2lfb3ZlcnNpemVfdGhyZXNob2xkKX0sCisJe05BTUUo ImRpcnR5X2RlY2F5X21zIiksIENUTChhcmVuYV9pX2RpcnR5X2RlY2F5X21zKX0sCisJe05BTUUo Im11enp5X2RlY2F5X21zIiksIENUTChhcmVuYV9pX211enp5X2RlY2F5X21zKX0sCisJe05BTUUo ImV4dGVudF9ob29rcyIpLAlDVEwoYXJlbmFfaV9leHRlbnRfaG9va3MpfSwKKwl7TkFNRSgicmV0 YWluX2dyb3dfbGltaXQiKSwJQ1RMKGFyZW5hX2lfcmV0YWluX2dyb3dfbGltaXQpfQorfTsKK3N0 YXRpYyBjb25zdCBjdGxfbmFtZWRfbm9kZV90IHN1cGVyX2FyZW5hX2lfbm9kZVtdID0geworCXtO QU1FKCIiKSwJCUNISUxEKG5hbWVkLCBhcmVuYV9pKX0KK307CisKK3N0YXRpYyBjb25zdCBjdGxf aW5kZXhlZF9ub2RlX3QgYXJlbmFfbm9kZVtdID0geworCXtJTkRFWChhcmVuYV9pKX0KK307CisK K3N0YXRpYyBjb25zdCBjdGxfbmFtZWRfbm9kZV90IGFyZW5hc19iaW5faV9ub2RlW10gPSB7CisJ e05BTUUoInNpemUiKSwJCUNUTChhcmVuYXNfYmluX2lfc2l6ZSl9LAorCXtOQU1FKCJucmVncyIp LAkJQ1RMKGFyZW5hc19iaW5faV9ucmVncyl9LAorCXtOQU1FKCJzbGFiX3NpemUiKSwJQ1RMKGFy ZW5hc19iaW5faV9zbGFiX3NpemUpfSwKKwl7TkFNRSgibnNoYXJkcyIpLAlDVEwoYXJlbmFzX2Jp bl9pX25zaGFyZHMpfQorfTsKK3N0YXRpYyBjb25zdCBjdGxfbmFtZWRfbm9kZV90IHN1cGVyX2Fy ZW5hc19iaW5faV9ub2RlW10gPSB7CisJe05BTUUoIiIpLAkJQ0hJTEQobmFtZWQsIGFyZW5hc19i aW5faSl9Cit9OworCitzdGF0aWMgY29uc3QgY3RsX2luZGV4ZWRfbm9kZV90IGFyZW5hc19iaW5f bm9kZVtdID0geworCXtJTkRFWChhcmVuYXNfYmluX2kpfQorfTsKKworc3RhdGljIGNvbnN0IGN0 bF9uYW1lZF9ub2RlX3QgYXJlbmFzX2xleHRlbnRfaV9ub2RlW10gPSB7CisJe05BTUUoInNpemUi KSwJCUNUTChhcmVuYXNfbGV4dGVudF9pX3NpemUpfQorfTsKK3N0YXRpYyBjb25zdCBjdGxfbmFt ZWRfbm9kZV90IHN1cGVyX2FyZW5hc19sZXh0ZW50X2lfbm9kZVtdID0geworCXtOQU1FKCIiKSwJ CUNISUxEKG5hbWVkLCBhcmVuYXNfbGV4dGVudF9pKX0KK307CisKK3N0YXRpYyBjb25zdCBjdGxf aW5kZXhlZF9ub2RlX3QgYXJlbmFzX2xleHRlbnRfbm9kZVtdID0geworCXtJTkRFWChhcmVuYXNf bGV4dGVudF9pKX0KK307CisKK3N0YXRpYyBjb25zdCBjdGxfbmFtZWRfbm9kZV90IGFyZW5hc19u b2RlW10gPSB7CisJe05BTUUoIm5hcmVuYXMiKSwJQ1RMKGFyZW5hc19uYXJlbmFzKX0sCisJe05B TUUoImRpcnR5X2RlY2F5X21zIiksIENUTChhcmVuYXNfZGlydHlfZGVjYXlfbXMpfSwKKwl7TkFN RSgibXV6enlfZGVjYXlfbXMiKSwgQ1RMKGFyZW5hc19tdXp6eV9kZWNheV9tcyl9LAorCXtOQU1F KCJxdWFudHVtIiksCUNUTChhcmVuYXNfcXVhbnR1bSl9LAorCXtOQU1FKCJwYWdlIiksCQlDVEwo YXJlbmFzX3BhZ2UpfSwKKwl7TkFNRSgidGNhY2hlX21heCIpLAlDVEwoYXJlbmFzX3RjYWNoZV9t YXgpfSwKKwl7TkFNRSgibmJpbnMiKSwJCUNUTChhcmVuYXNfbmJpbnMpfSwKKwl7TkFNRSgibmhi aW5zIiksCUNUTChhcmVuYXNfbmhiaW5zKX0sCisJe05BTUUoImJpbiIpLAkJQ0hJTEQoaW5kZXhl ZCwgYXJlbmFzX2Jpbil9LAorCXtOQU1FKCJubGV4dGVudHMiKSwJQ1RMKGFyZW5hc19ubGV4dGVu dHMpfSwKKwl7TkFNRSgibGV4dGVudCIpLAlDSElMRChpbmRleGVkLCBhcmVuYXNfbGV4dGVudCl9 LAorCXtOQU1FKCJjcmVhdGUiKSwJQ1RMKGFyZW5hc19jcmVhdGUpfSwKKwl7TkFNRSgibG9va3Vw IiksCUNUTChhcmVuYXNfbG9va3VwKX0KK307CisKK3N0YXRpYyBjb25zdCBjdGxfbmFtZWRfbm9k ZV90IHByb2Zfc3RhdHNfYmluc19pX25vZGVbXSA9IHsKKwl7TkFNRSgibGl2ZSIpLAkJQ1RMKHBy b2Zfc3RhdHNfYmluc19pX2xpdmUpfSwKKwl7TkFNRSgiYWNjdW0iKSwJCUNUTChwcm9mX3N0YXRz X2JpbnNfaV9hY2N1bSl9Cit9OworCitzdGF0aWMgY29uc3QgY3RsX25hbWVkX25vZGVfdCBzdXBl cl9wcm9mX3N0YXRzX2JpbnNfaV9ub2RlW10gPSB7CisJe05BTUUoIiIpLAkJQ0hJTEQobmFtZWQs IHByb2Zfc3RhdHNfYmluc19pKX0KK307CisKK3N0YXRpYyBjb25zdCBjdGxfaW5kZXhlZF9ub2Rl X3QgcHJvZl9zdGF0c19iaW5zX25vZGVbXSA9IHsKKwl7SU5ERVgocHJvZl9zdGF0c19iaW5zX2kp fQorfTsKKworc3RhdGljIGNvbnN0IGN0bF9uYW1lZF9ub2RlX3QgcHJvZl9zdGF0c19sZXh0ZW50 c19pX25vZGVbXSA9IHsKKwl7TkFNRSgibGl2ZSIpLAkJQ1RMKHByb2Zfc3RhdHNfbGV4dGVudHNf aV9saXZlKX0sCisJe05BTUUoImFjY3VtIiksCQlDVEwocHJvZl9zdGF0c19sZXh0ZW50c19pX2Fj Y3VtKX0KK307CisKK3N0YXRpYyBjb25zdCBjdGxfbmFtZWRfbm9kZV90IHN1cGVyX3Byb2Zfc3Rh dHNfbGV4dGVudHNfaV9ub2RlW10gPSB7CisJe05BTUUoIiIpLAkJQ0hJTEQobmFtZWQsIHByb2Zf c3RhdHNfbGV4dGVudHNfaSl9Cit9OworCitzdGF0aWMgY29uc3QgY3RsX2luZGV4ZWRfbm9kZV90 IHByb2Zfc3RhdHNfbGV4dGVudHNfbm9kZVtdID0geworCXtJTkRFWChwcm9mX3N0YXRzX2xleHRl bnRzX2kpfQorfTsKKworc3RhdGljIGNvbnN0IGN0bF9uYW1lZF9ub2RlX3QJcHJvZl9zdGF0c19u b2RlW10gPSB7CisJe05BTUUoImJpbnMiKSwJCUNISUxEKGluZGV4ZWQsIHByb2Zfc3RhdHNfYmlu cyl9LAorCXtOQU1FKCJsZXh0ZW50cyIpLAlDSElMRChpbmRleGVkLCBwcm9mX3N0YXRzX2xleHRl bnRzKX0sCit9OworCitzdGF0aWMgY29uc3QgY3RsX25hbWVkX25vZGVfdAlwcm9mX25vZGVbXSA9 IHsKKwl7TkFNRSgidGhyZWFkX2FjdGl2ZV9pbml0IiksIENUTChwcm9mX3RocmVhZF9hY3RpdmVf aW5pdCl9LAorCXtOQU1FKCJhY3RpdmUiKSwJQ1RMKHByb2ZfYWN0aXZlKX0sCisJe05BTUUoImR1 bXAiKSwJCUNUTChwcm9mX2R1bXApfSwKKwl7TkFNRSgiZ2R1bXAiKSwJCUNUTChwcm9mX2dkdW1w KX0sCisJe05BTUUoInByZWZpeCIpLAlDVEwocHJvZl9wcmVmaXgpfSwKKwl7TkFNRSgicmVzZXQi KSwJCUNUTChwcm9mX3Jlc2V0KX0sCisJe05BTUUoImludGVydmFsIiksCUNUTChwcm9mX2ludGVy dmFsKX0sCisJe05BTUUoImxnX3NhbXBsZSIpLAlDVEwobGdfcHJvZl9zYW1wbGUpfSwKKwl7TkFN RSgibG9nX3N0YXJ0IiksCUNUTChwcm9mX2xvZ19zdGFydCl9LAorCXtOQU1FKCJsb2dfc3RvcCIp LAlDVEwocHJvZl9sb2dfc3RvcCl9LAorCXtOQU1FKCJzdGF0cyIpLAkJQ0hJTEQobmFtZWQsIHBy b2Zfc3RhdHMpfQorfTsKKworc3RhdGljIGNvbnN0IGN0bF9uYW1lZF9ub2RlX3Qgc3RhdHNfYXJl bmFzX2lfc21hbGxfbm9kZVtdID0geworCXtOQU1FKCJhbGxvY2F0ZWQiKSwJQ1RMKHN0YXRzX2Fy ZW5hc19pX3NtYWxsX2FsbG9jYXRlZCl9LAorCXtOQU1FKCJubWFsbG9jIiksCUNUTChzdGF0c19h cmVuYXNfaV9zbWFsbF9ubWFsbG9jKX0sCisJe05BTUUoIm5kYWxsb2MiKSwJQ1RMKHN0YXRzX2Fy ZW5hc19pX3NtYWxsX25kYWxsb2MpfSwKKwl7TkFNRSgibnJlcXVlc3RzIiksCUNUTChzdGF0c19h cmVuYXNfaV9zbWFsbF9ucmVxdWVzdHMpfSwKKwl7TkFNRSgibmZpbGxzIiksCUNUTChzdGF0c19h cmVuYXNfaV9zbWFsbF9uZmlsbHMpfSwKKwl7TkFNRSgibmZsdXNoZXMiKSwJQ1RMKHN0YXRzX2Fy ZW5hc19pX3NtYWxsX25mbHVzaGVzKX0KK307CisKK3N0YXRpYyBjb25zdCBjdGxfbmFtZWRfbm9k ZV90IHN0YXRzX2FyZW5hc19pX2xhcmdlX25vZGVbXSA9IHsKKwl7TkFNRSgiYWxsb2NhdGVkIiks CUNUTChzdGF0c19hcmVuYXNfaV9sYXJnZV9hbGxvY2F0ZWQpfSwKKwl7TkFNRSgibm1hbGxvYyIp LAlDVEwoc3RhdHNfYXJlbmFzX2lfbGFyZ2Vfbm1hbGxvYyl9LAorCXtOQU1FKCJuZGFsbG9jIiks CUNUTChzdGF0c19hcmVuYXNfaV9sYXJnZV9uZGFsbG9jKX0sCisJe05BTUUoIm5yZXF1ZXN0cyIp LAlDVEwoc3RhdHNfYXJlbmFzX2lfbGFyZ2VfbnJlcXVlc3RzKX0sCisJe05BTUUoIm5maWxscyIp LAlDVEwoc3RhdHNfYXJlbmFzX2lfbGFyZ2VfbmZpbGxzKX0sCisJe05BTUUoIm5mbHVzaGVzIiks CUNUTChzdGF0c19hcmVuYXNfaV9sYXJnZV9uZmx1c2hlcyl9Cit9OworCisjZGVmaW5lIE1VVEVY X1BST0ZfREFUQV9OT0RFKHByZWZpeCkJCQkJCVwKK3N0YXRpYyBjb25zdCBjdGxfbmFtZWRfbm9k ZV90IHN0YXRzXyMjcHJlZml4IyNfbm9kZVtdID0gewkJXAorCXtOQU1FKCJudW1fb3BzIiksCQkJ CQkJXAorCSBDVEwoc3RhdHNfIyNwcmVmaXgjI19udW1fb3BzKX0sCQkJCVwKKwl7TkFNRSgibnVt X3dhaXQiKSwJCQkJCQlcCisJIENUTChzdGF0c18jI3ByZWZpeCMjX251bV93YWl0KX0sCQkJCVwK Kwl7TkFNRSgibnVtX3NwaW5fYWNxIiksCQkJCQkJXAorCSBDVEwoc3RhdHNfIyNwcmVmaXgjI19u dW1fc3Bpbl9hY3EpfSwJCQkJXAorCXtOQU1FKCJudW1fb3duZXJfc3dpdGNoIiksCQkJCQlcCisJ IENUTChzdGF0c18jI3ByZWZpeCMjX251bV9vd25lcl9zd2l0Y2gpfSwJCQlcCisJe05BTUUoInRv dGFsX3dhaXRfdGltZSIpLAkJCQkJXAorCSBDVEwoc3RhdHNfIyNwcmVmaXgjI190b3RhbF93YWl0 X3RpbWUpfSwJCQlcCisJe05BTUUoIm1heF93YWl0X3RpbWUiKSwJCQkJCQlcCisJIENUTChzdGF0 c18jI3ByZWZpeCMjX21heF93YWl0X3RpbWUpfSwJCQkJXAorCXtOQU1FKCJtYXhfbnVtX3RoZHMi KSwJCQkJCQlcCisJIENUTChzdGF0c18jI3ByZWZpeCMjX21heF9udW1fdGhkcyl9CQkJCVwKKwkv KiBOb3RlIHRoYXQgIyBvZiBjdXJyZW50IHdhaXRpbmcgdGhyZWFkIG5vdCBwcm92aWRlZC4gKi8J XAorfTsKKworTVVURVhfUFJPRl9EQVRBX05PREUoYXJlbmFzX2lfYmluc19qX211dGV4KQorCitz dGF0aWMgY29uc3QgY3RsX25hbWVkX25vZGVfdCBzdGF0c19hcmVuYXNfaV9iaW5zX2pfbm9kZVtd ID0geworCXtOQU1FKCJubWFsbG9jIiksCUNUTChzdGF0c19hcmVuYXNfaV9iaW5zX2pfbm1hbGxv Yyl9LAorCXtOQU1FKCJuZGFsbG9jIiksCUNUTChzdGF0c19hcmVuYXNfaV9iaW5zX2pfbmRhbGxv Yyl9LAorCXtOQU1FKCJucmVxdWVzdHMiKSwJQ1RMKHN0YXRzX2FyZW5hc19pX2JpbnNfal9ucmVx dWVzdHMpfSwKKwl7TkFNRSgiY3VycmVncyIpLAlDVEwoc3RhdHNfYXJlbmFzX2lfYmluc19qX2N1 cnJlZ3MpfSwKKwl7TkFNRSgibmZpbGxzIiksCUNUTChzdGF0c19hcmVuYXNfaV9iaW5zX2pfbmZp bGxzKX0sCisJe05BTUUoIm5mbHVzaGVzIiksCUNUTChzdGF0c19hcmVuYXNfaV9iaW5zX2pfbmZs dXNoZXMpfSwKKwl7TkFNRSgibnNsYWJzIiksCUNUTChzdGF0c19hcmVuYXNfaV9iaW5zX2pfbnNs YWJzKX0sCisJe05BTUUoIm5yZXNsYWJzIiksCUNUTChzdGF0c19hcmVuYXNfaV9iaW5zX2pfbnJl c2xhYnMpfSwKKwl7TkFNRSgiY3Vyc2xhYnMiKSwJQ1RMKHN0YXRzX2FyZW5hc19pX2JpbnNfal9j dXJzbGFicyl9LAorCXtOQU1FKCJub25mdWxsX3NsYWJzIiksCUNUTChzdGF0c19hcmVuYXNfaV9i aW5zX2pfbm9uZnVsbF9zbGFicyl9LAorCXtOQU1FKCJtdXRleCIpLAkJQ0hJTEQobmFtZWQsIHN0 YXRzX2FyZW5hc19pX2JpbnNfal9tdXRleCl9Cit9OworCitzdGF0aWMgY29uc3QgY3RsX25hbWVk X25vZGVfdCBzdXBlcl9zdGF0c19hcmVuYXNfaV9iaW5zX2pfbm9kZVtdID0geworCXtOQU1FKCIi KSwJCUNISUxEKG5hbWVkLCBzdGF0c19hcmVuYXNfaV9iaW5zX2opfQorfTsKKworc3RhdGljIGNv bnN0IGN0bF9pbmRleGVkX25vZGVfdCBzdGF0c19hcmVuYXNfaV9iaW5zX25vZGVbXSA9IHsKKwl7 SU5ERVgoc3RhdHNfYXJlbmFzX2lfYmluc19qKX0KK307CisKK3N0YXRpYyBjb25zdCBjdGxfbmFt ZWRfbm9kZV90IHN0YXRzX2FyZW5hc19pX2xleHRlbnRzX2pfbm9kZVtdID0geworCXtOQU1FKCJu bWFsbG9jIiksCUNUTChzdGF0c19hcmVuYXNfaV9sZXh0ZW50c19qX25tYWxsb2MpfSwKKwl7TkFN RSgibmRhbGxvYyIpLAlDVEwoc3RhdHNfYXJlbmFzX2lfbGV4dGVudHNfal9uZGFsbG9jKX0sCisJ e05BTUUoIm5yZXF1ZXN0cyIpLAlDVEwoc3RhdHNfYXJlbmFzX2lfbGV4dGVudHNfal9ucmVxdWVz dHMpfSwKKwl7TkFNRSgiY3VybGV4dGVudHMiKSwJQ1RMKHN0YXRzX2FyZW5hc19pX2xleHRlbnRz X2pfY3VybGV4dGVudHMpfQorfTsKK3N0YXRpYyBjb25zdCBjdGxfbmFtZWRfbm9kZV90IHN1cGVy X3N0YXRzX2FyZW5hc19pX2xleHRlbnRzX2pfbm9kZVtdID0geworCXtOQU1FKCIiKSwJCUNISUxE KG5hbWVkLCBzdGF0c19hcmVuYXNfaV9sZXh0ZW50c19qKX0KK307CisKK3N0YXRpYyBjb25zdCBj dGxfaW5kZXhlZF9ub2RlX3Qgc3RhdHNfYXJlbmFzX2lfbGV4dGVudHNfbm9kZVtdID0geworCXtJ TkRFWChzdGF0c19hcmVuYXNfaV9sZXh0ZW50c19qKX0KK307CisKK3N0YXRpYyBjb25zdCBjdGxf bmFtZWRfbm9kZV90IHN0YXRzX2FyZW5hc19pX2V4dGVudHNfal9ub2RlW10gPSB7CisJe05BTUUo Im5kaXJ0eSIpLAlDVEwoc3RhdHNfYXJlbmFzX2lfZXh0ZW50c19qX25kaXJ0eSl9LAorCXtOQU1F KCJubXV6enkiKSwJQ1RMKHN0YXRzX2FyZW5hc19pX2V4dGVudHNfal9ubXV6enkpfSwKKwl7TkFN RSgibnJldGFpbmVkIiksCUNUTChzdGF0c19hcmVuYXNfaV9leHRlbnRzX2pfbnJldGFpbmVkKX0s CisJe05BTUUoImRpcnR5X2J5dGVzIiksCUNUTChzdGF0c19hcmVuYXNfaV9leHRlbnRzX2pfZGly dHlfYnl0ZXMpfSwKKwl7TkFNRSgibXV6enlfYnl0ZXMiKSwJQ1RMKHN0YXRzX2FyZW5hc19pX2V4 dGVudHNfal9tdXp6eV9ieXRlcyl9LAorCXtOQU1FKCJyZXRhaW5lZF9ieXRlcyIpLCBDVEwoc3Rh dHNfYXJlbmFzX2lfZXh0ZW50c19qX3JldGFpbmVkX2J5dGVzKX0KK307CisKK3N0YXRpYyBjb25z dCBjdGxfbmFtZWRfbm9kZV90IHN1cGVyX3N0YXRzX2FyZW5hc19pX2V4dGVudHNfal9ub2RlW10g PSB7CisJe05BTUUoIiIpLAkJQ0hJTEQobmFtZWQsIHN0YXRzX2FyZW5hc19pX2V4dGVudHNfail9 Cit9OworCitzdGF0aWMgY29uc3QgY3RsX2luZGV4ZWRfbm9kZV90IHN0YXRzX2FyZW5hc19pX2V4 dGVudHNfbm9kZVtdID0geworCXtJTkRFWChzdGF0c19hcmVuYXNfaV9leHRlbnRzX2opfQorfTsK KworI2RlZmluZSBPUChtdHgpICBNVVRFWF9QUk9GX0RBVEFfTk9ERShhcmVuYXNfaV9tdXRleGVz XyMjbXR4KQorTVVURVhfUFJPRl9BUkVOQV9NVVRFWEVTCisjdW5kZWYgT1AKKworc3RhdGljIGNv bnN0IGN0bF9uYW1lZF9ub2RlX3Qgc3RhdHNfYXJlbmFzX2lfbXV0ZXhlc19ub2RlW10gPSB7Cisj ZGVmaW5lIE9QKG10eCkge05BTUUoI210eCksIENISUxEKG5hbWVkLCBzdGF0c19hcmVuYXNfaV9t dXRleGVzXyMjbXR4KX0sCitNVVRFWF9QUk9GX0FSRU5BX01VVEVYRVMKKyN1bmRlZiBPUAorfTsK Kworc3RhdGljIGNvbnN0IGN0bF9uYW1lZF9ub2RlX3Qgc3RhdHNfYXJlbmFzX2lfaHBhX3NoYXJk X2Z1bGxfc2xhYnNfbm9kZVtdID0geworCXtOQU1FKCJucGFnZXNsYWJzX25vbmh1Z2UiKSwKKwkJ Q1RMKHN0YXRzX2FyZW5hc19pX2hwYV9zaGFyZF9mdWxsX3NsYWJzX25wYWdlc2xhYnNfbm9uaHVn ZSl9LAorCXtOQU1FKCJucGFnZXNsYWJzX2h1Z2UiKSwKKwkJQ1RMKHN0YXRzX2FyZW5hc19pX2hw YV9zaGFyZF9mdWxsX3NsYWJzX25wYWdlc2xhYnNfaHVnZSl9LAorCXtOQU1FKCJuYWN0aXZlX25v bmh1Z2UiKSwKKwkJQ1RMKHN0YXRzX2FyZW5hc19pX2hwYV9zaGFyZF9mdWxsX3NsYWJzX25hY3Rp dmVfbm9uaHVnZSl9LAorCXtOQU1FKCJuYWN0aXZlX2h1Z2UiKSwKKwkJQ1RMKHN0YXRzX2FyZW5h c19pX2hwYV9zaGFyZF9mdWxsX3NsYWJzX25hY3RpdmVfaHVnZSl9LAorCXtOQU1FKCJuZGlydHlf bm9uaHVnZSIpLAorCQlDVEwoc3RhdHNfYXJlbmFzX2lfaHBhX3NoYXJkX2Z1bGxfc2xhYnNfbmRp cnR5X25vbmh1Z2UpfSwKKwl7TkFNRSgibmRpcnR5X2h1Z2UiKSwKKwkJQ1RMKHN0YXRzX2FyZW5h c19pX2hwYV9zaGFyZF9mdWxsX3NsYWJzX25kaXJ0eV9odWdlKX0KK307CisKK3N0YXRpYyBjb25z dCBjdGxfbmFtZWRfbm9kZV90IHN0YXRzX2FyZW5hc19pX2hwYV9zaGFyZF9lbXB0eV9zbGFic19u b2RlW10gPSB7CisJe05BTUUoIm5wYWdlc2xhYnNfbm9uaHVnZSIpLAorCQlDVEwoc3RhdHNfYXJl bmFzX2lfaHBhX3NoYXJkX2VtcHR5X3NsYWJzX25wYWdlc2xhYnNfbm9uaHVnZSl9LAorCXtOQU1F KCJucGFnZXNsYWJzX2h1Z2UiKSwKKwkJQ1RMKHN0YXRzX2FyZW5hc19pX2hwYV9zaGFyZF9lbXB0 eV9zbGFic19ucGFnZXNsYWJzX2h1Z2UpfSwKKwl7TkFNRSgibmFjdGl2ZV9ub25odWdlIiksCisJ CUNUTChzdGF0c19hcmVuYXNfaV9ocGFfc2hhcmRfZW1wdHlfc2xhYnNfbmFjdGl2ZV9ub25odWdl KX0sCisJe05BTUUoIm5hY3RpdmVfaHVnZSIpLAorCQlDVEwoc3RhdHNfYXJlbmFzX2lfaHBhX3No YXJkX2VtcHR5X3NsYWJzX25hY3RpdmVfaHVnZSl9LAorCXtOQU1FKCJuZGlydHlfbm9uaHVnZSIp LAorCQlDVEwoc3RhdHNfYXJlbmFzX2lfaHBhX3NoYXJkX2VtcHR5X3NsYWJzX25kaXJ0eV9ub25o dWdlKX0sCisJe05BTUUoIm5kaXJ0eV9odWdlIiksCisJCUNUTChzdGF0c19hcmVuYXNfaV9ocGFf c2hhcmRfZW1wdHlfc2xhYnNfbmRpcnR5X2h1Z2UpfQorfTsKKworc3RhdGljIGNvbnN0IGN0bF9u YW1lZF9ub2RlX3Qgc3RhdHNfYXJlbmFzX2lfaHBhX3NoYXJkX25vbmZ1bGxfc2xhYnNfal9ub2Rl W10gPSB7CisJe05BTUUoIm5wYWdlc2xhYnNfbm9uaHVnZSIpLAorCQlDVEwoc3RhdHNfYXJlbmFz X2lfaHBhX3NoYXJkX25vbmZ1bGxfc2xhYnNfal9ucGFnZXNsYWJzX25vbmh1Z2UpfSwKKwl7TkFN RSgibnBhZ2VzbGFic19odWdlIiksCisJCUNUTChzdGF0c19hcmVuYXNfaV9ocGFfc2hhcmRfbm9u ZnVsbF9zbGFic19qX25wYWdlc2xhYnNfaHVnZSl9LAorCXtOQU1FKCJuYWN0aXZlX25vbmh1Z2Ui KSwKKwkJQ1RMKHN0YXRzX2FyZW5hc19pX2hwYV9zaGFyZF9ub25mdWxsX3NsYWJzX2pfbmFjdGl2 ZV9ub25odWdlKX0sCisJe05BTUUoIm5hY3RpdmVfaHVnZSIpLAorCQlDVEwoc3RhdHNfYXJlbmFz X2lfaHBhX3NoYXJkX25vbmZ1bGxfc2xhYnNfal9uYWN0aXZlX2h1Z2UpfSwKKwl7TkFNRSgibmRp cnR5X25vbmh1Z2UiKSwKKwkJQ1RMKHN0YXRzX2FyZW5hc19pX2hwYV9zaGFyZF9ub25mdWxsX3Ns YWJzX2pfbmRpcnR5X25vbmh1Z2UpfSwKKwl7TkFNRSgibmRpcnR5X2h1Z2UiKSwKKwkJQ1RMKHN0 YXRzX2FyZW5hc19pX2hwYV9zaGFyZF9ub25mdWxsX3NsYWJzX2pfbmRpcnR5X2h1Z2UpfQorfTsK Kworc3RhdGljIGNvbnN0IGN0bF9uYW1lZF9ub2RlX3Qgc3VwZXJfc3RhdHNfYXJlbmFzX2lfaHBh X3NoYXJkX25vbmZ1bGxfc2xhYnNfal9ub2RlW10gPSB7CisJe05BTUUoIiIpLAorCQlDSElMRChu YW1lZCwgc3RhdHNfYXJlbmFzX2lfaHBhX3NoYXJkX25vbmZ1bGxfc2xhYnNfail9Cit9OworCitz dGF0aWMgY29uc3QgY3RsX2luZGV4ZWRfbm9kZV90IHN0YXRzX2FyZW5hc19pX2hwYV9zaGFyZF9u b25mdWxsX3NsYWJzX25vZGVbXSA9Cit7CisJe0lOREVYKHN0YXRzX2FyZW5hc19pX2hwYV9zaGFy ZF9ub25mdWxsX3NsYWJzX2opfQorfTsKKworc3RhdGljIGNvbnN0IGN0bF9uYW1lZF9ub2RlX3Qg c3RhdHNfYXJlbmFzX2lfaHBhX3NoYXJkX25vZGVbXSA9IHsKKwl7TkFNRSgiZnVsbF9zbGFicyIp LAlDSElMRChuYW1lZCwKKwkgICAgc3RhdHNfYXJlbmFzX2lfaHBhX3NoYXJkX2Z1bGxfc2xhYnMp fSwKKwl7TkFNRSgiZW1wdHlfc2xhYnMiKSwJQ0hJTEQobmFtZWQsCisJICAgIHN0YXRzX2FyZW5h c19pX2hwYV9zaGFyZF9lbXB0eV9zbGFicyl9LAorCXtOQU1FKCJub25mdWxsX3NsYWJzIiksCUNI SUxEKGluZGV4ZWQsCisJICAgIHN0YXRzX2FyZW5hc19pX2hwYV9zaGFyZF9ub25mdWxsX3NsYWJz KX0sCisKKwl7TkFNRSgibnB1cmdlX3Bhc3NlcyIpLAlDVEwoc3RhdHNfYXJlbmFzX2lfaHBhX3No YXJkX25wdXJnZV9wYXNzZXMpfSwKKwl7TkFNRSgibnB1cmdlcyIpLAlDVEwoc3RhdHNfYXJlbmFz X2lfaHBhX3NoYXJkX25wdXJnZXMpfSwKKwl7TkFNRSgibmh1Z2lmaWVzIiksCUNUTChzdGF0c19h cmVuYXNfaV9ocGFfc2hhcmRfbmh1Z2lmaWVzKX0sCisJe05BTUUoIm5kZWh1Z2lmaWVzIiksCUNU TChzdGF0c19hcmVuYXNfaV9ocGFfc2hhcmRfbmRlaHVnaWZpZXMpfQorfTsKKworc3RhdGljIGNv bnN0IGN0bF9uYW1lZF9ub2RlX3Qgc3RhdHNfYXJlbmFzX2lfbm9kZVtdID0geworCXtOQU1FKCJu dGhyZWFkcyIpLAlDVEwoc3RhdHNfYXJlbmFzX2lfbnRocmVhZHMpfSwKKwl7TkFNRSgidXB0aW1l IiksCUNUTChzdGF0c19hcmVuYXNfaV91cHRpbWUpfSwKKwl7TkFNRSgiZHNzIiksCQlDVEwoc3Rh dHNfYXJlbmFzX2lfZHNzKX0sCisJe05BTUUoImRpcnR5X2RlY2F5X21zIiksIENUTChzdGF0c19h cmVuYXNfaV9kaXJ0eV9kZWNheV9tcyl9LAorCXtOQU1FKCJtdXp6eV9kZWNheV9tcyIpLCBDVEwo c3RhdHNfYXJlbmFzX2lfbXV6enlfZGVjYXlfbXMpfSwKKwl7TkFNRSgicGFjdGl2ZSIpLAlDVEwo c3RhdHNfYXJlbmFzX2lfcGFjdGl2ZSl9LAorCXtOQU1FKCJwZGlydHkiKSwJQ1RMKHN0YXRzX2Fy ZW5hc19pX3BkaXJ0eSl9LAorCXtOQU1FKCJwbXV6enkiKSwJQ1RMKHN0YXRzX2FyZW5hc19pX3Bt dXp6eSl9LAorCXtOQU1FKCJtYXBwZWQiKSwJQ1RMKHN0YXRzX2FyZW5hc19pX21hcHBlZCl9LAor CXtOQU1FKCJyZXRhaW5lZCIpLAlDVEwoc3RhdHNfYXJlbmFzX2lfcmV0YWluZWQpfSwKKwl7TkFN RSgiZXh0ZW50X2F2YWlsIiksCUNUTChzdGF0c19hcmVuYXNfaV9leHRlbnRfYXZhaWwpfSwKKwl7 TkFNRSgiZGlydHlfbnB1cmdlIiksCUNUTChzdGF0c19hcmVuYXNfaV9kaXJ0eV9ucHVyZ2UpfSwK Kwl7TkFNRSgiZGlydHlfbm1hZHZpc2UiKSwgQ1RMKHN0YXRzX2FyZW5hc19pX2RpcnR5X25tYWR2 aXNlKX0sCisJe05BTUUoImRpcnR5X3B1cmdlZCIpLAlDVEwoc3RhdHNfYXJlbmFzX2lfZGlydHlf cHVyZ2VkKX0sCisJe05BTUUoIm11enp5X25wdXJnZSIpLAlDVEwoc3RhdHNfYXJlbmFzX2lfbXV6 enlfbnB1cmdlKX0sCisJe05BTUUoIm11enp5X25tYWR2aXNlIiksIENUTChzdGF0c19hcmVuYXNf aV9tdXp6eV9ubWFkdmlzZSl9LAorCXtOQU1FKCJtdXp6eV9wdXJnZWQiKSwJQ1RMKHN0YXRzX2Fy ZW5hc19pX211enp5X3B1cmdlZCl9LAorCXtOQU1FKCJiYXNlIiksCQlDVEwoc3RhdHNfYXJlbmFz X2lfYmFzZSl9LAorCXtOQU1FKCJpbnRlcm5hbCIpLAlDVEwoc3RhdHNfYXJlbmFzX2lfaW50ZXJu YWwpfSwKKwl7TkFNRSgibWV0YWRhdGFfdGhwIiksCUNUTChzdGF0c19hcmVuYXNfaV9tZXRhZGF0 YV90aHApfSwKKwl7TkFNRSgidGNhY2hlX2J5dGVzIiksCUNUTChzdGF0c19hcmVuYXNfaV90Y2Fj aGVfYnl0ZXMpfSwKKwl7TkFNRSgidGNhY2hlX3N0YXNoZWRfYnl0ZXMiKSwKKwkgICAgQ1RMKHN0 YXRzX2FyZW5hc19pX3RjYWNoZV9zdGFzaGVkX2J5dGVzKX0sCisJe05BTUUoInJlc2lkZW50Iiks CUNUTChzdGF0c19hcmVuYXNfaV9yZXNpZGVudCl9LAorCXtOQU1FKCJhYmFuZG9uZWRfdm0iKSwJ Q1RMKHN0YXRzX2FyZW5hc19pX2FiYW5kb25lZF92bSl9LAorCXtOQU1FKCJocGFfc2VjX2J5dGVz IiksCUNUTChzdGF0c19hcmVuYXNfaV9ocGFfc2VjX2J5dGVzKX0sCisJe05BTUUoInNtYWxsIiks CQlDSElMRChuYW1lZCwgc3RhdHNfYXJlbmFzX2lfc21hbGwpfSwKKwl7TkFNRSgibGFyZ2UiKSwJ CUNISUxEKG5hbWVkLCBzdGF0c19hcmVuYXNfaV9sYXJnZSl9LAorCXtOQU1FKCJiaW5zIiksCQlD SElMRChpbmRleGVkLCBzdGF0c19hcmVuYXNfaV9iaW5zKX0sCisJe05BTUUoImxleHRlbnRzIiks CUNISUxEKGluZGV4ZWQsIHN0YXRzX2FyZW5hc19pX2xleHRlbnRzKX0sCisJe05BTUUoImV4dGVu dHMiKSwJQ0hJTEQoaW5kZXhlZCwgc3RhdHNfYXJlbmFzX2lfZXh0ZW50cyl9LAorCXtOQU1FKCJt dXRleGVzIiksCUNISUxEKG5hbWVkLCBzdGF0c19hcmVuYXNfaV9tdXRleGVzKX0sCisJe05BTUUo ImhwYV9zaGFyZCIpLAlDSElMRChuYW1lZCwgc3RhdHNfYXJlbmFzX2lfaHBhX3NoYXJkKX0KK307 CitzdGF0aWMgY29uc3QgY3RsX25hbWVkX25vZGVfdCBzdXBlcl9zdGF0c19hcmVuYXNfaV9ub2Rl W10gPSB7CisJe05BTUUoIiIpLAkJQ0hJTEQobmFtZWQsIHN0YXRzX2FyZW5hc19pKX0KK307CisK K3N0YXRpYyBjb25zdCBjdGxfaW5kZXhlZF9ub2RlX3Qgc3RhdHNfYXJlbmFzX25vZGVbXSA9IHsK Kwl7SU5ERVgoc3RhdHNfYXJlbmFzX2kpfQorfTsKKworc3RhdGljIGNvbnN0IGN0bF9uYW1lZF9u b2RlX3Qgc3RhdHNfYmFja2dyb3VuZF90aHJlYWRfbm9kZVtdID0geworCXtOQU1FKCJudW1fdGhy ZWFkcyIpLAlDVEwoc3RhdHNfYmFja2dyb3VuZF90aHJlYWRfbnVtX3RocmVhZHMpfSwKKwl7TkFN RSgibnVtX3J1bnMiKSwJQ1RMKHN0YXRzX2JhY2tncm91bmRfdGhyZWFkX251bV9ydW5zKX0sCisJ e05BTUUoInJ1bl9pbnRlcnZhbCIpLAlDVEwoc3RhdHNfYmFja2dyb3VuZF90aHJlYWRfcnVuX2lu dGVydmFsKX0KK307CisKKyNkZWZpbmUgT1AobXR4KSBNVVRFWF9QUk9GX0RBVEFfTk9ERShtdXRl eGVzXyMjbXR4KQorTVVURVhfUFJPRl9HTE9CQUxfTVVURVhFUworI3VuZGVmIE9QCisKK3N0YXRp YyBjb25zdCBjdGxfbmFtZWRfbm9kZV90IHN0YXRzX211dGV4ZXNfbm9kZVtdID0geworI2RlZmlu ZSBPUChtdHgpIHtOQU1FKCNtdHgpLCBDSElMRChuYW1lZCwgc3RhdHNfbXV0ZXhlc18jI210eCl9 LAorTVVURVhfUFJPRl9HTE9CQUxfTVVURVhFUworI3VuZGVmIE9QCisJe05BTUUoInJlc2V0Iiks CQlDVEwoc3RhdHNfbXV0ZXhlc19yZXNldCl9Cit9OworI3VuZGVmIE1VVEVYX1BST0ZfREFUQV9O T0RFCisKK3N0YXRpYyBjb25zdCBjdGxfbmFtZWRfbm9kZV90IHN0YXRzX25vZGVbXSA9IHsKKwl7 TkFNRSgiYWxsb2NhdGVkIiksCUNUTChzdGF0c19hbGxvY2F0ZWQpfSwKKwl7TkFNRSgiYWN0aXZl IiksCUNUTChzdGF0c19hY3RpdmUpfSwKKwl7TkFNRSgibWV0YWRhdGEiKSwJQ1RMKHN0YXRzX21l dGFkYXRhKX0sCisJe05BTUUoIm1ldGFkYXRhX3RocCIpLAlDVEwoc3RhdHNfbWV0YWRhdGFfdGhw KX0sCisJe05BTUUoInJlc2lkZW50IiksCUNUTChzdGF0c19yZXNpZGVudCl9LAorCXtOQU1FKCJt YXBwZWQiKSwJQ1RMKHN0YXRzX21hcHBlZCl9LAorCXtOQU1FKCJyZXRhaW5lZCIpLAlDVEwoc3Rh dHNfcmV0YWluZWQpfSwKKwl7TkFNRSgiYmFja2dyb3VuZF90aHJlYWQiKSwKKwkgQ0hJTEQobmFt ZWQsIHN0YXRzX2JhY2tncm91bmRfdGhyZWFkKX0sCisJe05BTUUoIm11dGV4ZXMiKSwJQ0hJTEQo bmFtZWQsIHN0YXRzX211dGV4ZXMpfSwKKwl7TkFNRSgiYXJlbmFzIiksCUNISUxEKGluZGV4ZWQs IHN0YXRzX2FyZW5hcyl9LAorCXtOQU1FKCJ6ZXJvX3JlYWxsb2NzIiksCUNUTChzdGF0c196ZXJv X3JlYWxsb2NzKX0sCit9OworCitzdGF0aWMgY29uc3QgY3RsX25hbWVkX25vZGVfdCBleHBlcmlt ZW50YWxfaG9va3Nfbm9kZVtdID0geworCXtOQU1FKCJpbnN0YWxsIiksCUNUTChleHBlcmltZW50 YWxfaG9va3NfaW5zdGFsbCl9LAorCXtOQU1FKCJyZW1vdmUiKSwJQ1RMKGV4cGVyaW1lbnRhbF9o b29rc19yZW1vdmUpfSwKKwl7TkFNRSgicHJvZl9iYWNrdHJhY2UiKSwJQ1RMKGV4cGVyaW1lbnRh bF9ob29rc19wcm9mX2JhY2t0cmFjZSl9LAorCXtOQU1FKCJwcm9mX2R1bXAiKSwJQ1RMKGV4cGVy aW1lbnRhbF9ob29rc19wcm9mX2R1bXApfSwKKwl7TkFNRSgic2FmZXR5X2NoZWNrX2Fib3J0Iiks CUNUTChleHBlcmltZW50YWxfaG9va3Nfc2FmZXR5X2NoZWNrX2Fib3J0KX0sCit9OworCitzdGF0 aWMgY29uc3QgY3RsX25hbWVkX25vZGVfdCBleHBlcmltZW50YWxfdGhyZWFkX25vZGVbXSA9IHsK Kwl7TkFNRSgiYWN0aXZpdHlfY2FsbGJhY2siKSwKKwkJQ1RMKGV4cGVyaW1lbnRhbF90aHJlYWRf YWN0aXZpdHlfY2FsbGJhY2spfQorfTsKKworc3RhdGljIGNvbnN0IGN0bF9uYW1lZF9ub2RlX3Qg ZXhwZXJpbWVudGFsX3V0aWxpemF0aW9uX25vZGVbXSA9IHsKKwl7TkFNRSgicXVlcnkiKSwJCUNU TChleHBlcmltZW50YWxfdXRpbGl6YXRpb25fcXVlcnkpfSwKKwl7TkFNRSgiYmF0Y2hfcXVlcnki KSwJQ1RMKGV4cGVyaW1lbnRhbF91dGlsaXphdGlvbl9iYXRjaF9xdWVyeSl9Cit9OworCitzdGF0 aWMgY29uc3QgY3RsX25hbWVkX25vZGVfdCBleHBlcmltZW50YWxfYXJlbmFzX2lfbm9kZVtdID0g eworCXtOQU1FKCJwYWN0aXZlcCIpLAlDVEwoZXhwZXJpbWVudGFsX2FyZW5hc19pX3BhY3RpdmVw KX0KK307CitzdGF0aWMgY29uc3QgY3RsX25hbWVkX25vZGVfdCBzdXBlcl9leHBlcmltZW50YWxf YXJlbmFzX2lfbm9kZVtdID0geworCXtOQU1FKCIiKSwJCUNISUxEKG5hbWVkLCBleHBlcmltZW50 YWxfYXJlbmFzX2kpfQorfTsKKworc3RhdGljIGNvbnN0IGN0bF9pbmRleGVkX25vZGVfdCBleHBl cmltZW50YWxfYXJlbmFzX25vZGVbXSA9IHsKKwl7SU5ERVgoZXhwZXJpbWVudGFsX2FyZW5hc19p KX0KK307CisKK3N0YXRpYyBjb25zdCBjdGxfbmFtZWRfbm9kZV90IGV4cGVyaW1lbnRhbF9wcm9m X3JlY2VudF9ub2RlW10gPSB7CisJe05BTUUoImFsbG9jX21heCIpLAlDVEwoZXhwZXJpbWVudGFs X3Byb2ZfcmVjZW50X2FsbG9jX21heCl9LAorCXtOQU1FKCJhbGxvY19kdW1wIiksCUNUTChleHBl cmltZW50YWxfcHJvZl9yZWNlbnRfYWxsb2NfZHVtcCl9LAorfTsKKworc3RhdGljIGNvbnN0IGN0 bF9uYW1lZF9ub2RlX3QgZXhwZXJpbWVudGFsX25vZGVbXSA9IHsKKwl7TkFNRSgiaG9va3MiKSwJ CUNISUxEKG5hbWVkLCBleHBlcmltZW50YWxfaG9va3MpfSwKKwl7TkFNRSgidXRpbGl6YXRpb24i KSwJQ0hJTEQobmFtZWQsIGV4cGVyaW1lbnRhbF91dGlsaXphdGlvbil9LAorCXtOQU1FKCJhcmVu YXMiKSwJQ0hJTEQoaW5kZXhlZCwgZXhwZXJpbWVudGFsX2FyZW5hcyl9LAorCXtOQU1FKCJhcmVu YXNfY3JlYXRlX2V4dCIpLAlDVEwoZXhwZXJpbWVudGFsX2FyZW5hc19jcmVhdGVfZXh0KX0sCisJ e05BTUUoInByb2ZfcmVjZW50IiksCUNISUxEKG5hbWVkLCBleHBlcmltZW50YWxfcHJvZl9yZWNl bnQpfSwKKwl7TkFNRSgiYmF0Y2hfYWxsb2MiKSwJQ1RMKGV4cGVyaW1lbnRhbF9iYXRjaF9hbGxv Yyl9LAorCXtOQU1FKCJ0aHJlYWQiKSwJQ0hJTEQobmFtZWQsIGV4cGVyaW1lbnRhbF90aHJlYWQp fQorfTsKKworc3RhdGljIGNvbnN0IGN0bF9uYW1lZF9ub2RlX3QJcm9vdF9ub2RlW10gPSB7CisJ e05BTUUoInZlcnNpb24iKSwJQ1RMKHZlcnNpb24pfSwKKwl7TkFNRSgiZXBvY2giKSwJCUNUTChl cG9jaCl9LAorCXtOQU1FKCJiYWNrZ3JvdW5kX3RocmVhZCIpLAlDVEwoYmFja2dyb3VuZF90aHJl YWQpfSwKKwl7TkFNRSgibWF4X2JhY2tncm91bmRfdGhyZWFkcyIpLAlDVEwobWF4X2JhY2tncm91 bmRfdGhyZWFkcyl9LAorCXtOQU1FKCJ0aHJlYWQiKSwJQ0hJTEQobmFtZWQsIHRocmVhZCl9LAor CXtOQU1FKCJjb25maWciKSwJQ0hJTEQobmFtZWQsIGNvbmZpZyl9LAorCXtOQU1FKCJvcHQiKSwJ CUNISUxEKG5hbWVkLCBvcHQpfSwKKwl7TkFNRSgidGNhY2hlIiksCUNISUxEKG5hbWVkLCB0Y2Fj aGUpfSwKKwl7TkFNRSgiYXJlbmEiKSwJCUNISUxEKGluZGV4ZWQsIGFyZW5hKX0sCisJe05BTUUo ImFyZW5hcyIpLAlDSElMRChuYW1lZCwgYXJlbmFzKX0sCisJe05BTUUoInByb2YiKSwJCUNISUxE KG5hbWVkLCBwcm9mKX0sCisJe05BTUUoInN0YXRzIiksCQlDSElMRChuYW1lZCwgc3RhdHMpfSwK Kwl7TkFNRSgiZXhwZXJpbWVudGFsIiksCUNISUxEKG5hbWVkLCBleHBlcmltZW50YWwpfQorfTsK K3N0YXRpYyBjb25zdCBjdGxfbmFtZWRfbm9kZV90IHN1cGVyX3Jvb3Rfbm9kZVtdID0geworCXtO QU1FKCIiKSwJCUNISUxEKG5hbWVkLCByb290KX0KK307CisKKyN1bmRlZiBOQU1FCisjdW5kZWYg Q0hJTEQKKyN1bmRlZiBDVEwKKyN1bmRlZiBJTkRFWAorCisvKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq LworCisvKgorICogU2V0cyAqZHN0ICsgKnNyYyBub24tYXRvbWljYWxseS4gIFRoaXMgaXMgc2Fm ZSwgc2luY2UgZXZlcnl0aGluZyBpcworICogc3luY2hyb25pemVkIGJ5IHRoZSBjdGwgbXV0ZXgu CisgKi8KK3N0YXRpYyB2b2lkCitjdGxfYWNjdW1fbG9ja2VkX3U2NChsb2NrZWRfdTY0X3QgKmRz dCwgbG9ja2VkX3U2NF90ICpzcmMpIHsKKwlsb2NrZWRfaW5jX3U2NF91bnN5bmNocm9uaXplZChk c3QsCisJICAgIGxvY2tlZF9yZWFkX3U2NF91bnN5bmNocm9uaXplZChzcmMpKTsKK30KKworc3Rh dGljIHZvaWQKK2N0bF9hY2N1bV9hdG9taWNfenUoYXRvbWljX3p1X3QgKmRzdCwgYXRvbWljX3p1 X3QgKnNyYykgeworCXNpemVfdCBjdXJfZHN0ID0gYXRvbWljX2xvYWRfenUoZHN0LCBBVE9NSUNf UkVMQVhFRCk7CisJc2l6ZV90IGN1cl9zcmMgPSBhdG9taWNfbG9hZF96dShzcmMsIEFUT01JQ19S RUxBWEVEKTsKKwlhdG9taWNfc3RvcmVfenUoZHN0LCBjdXJfZHN0ICsgY3VyX3NyYywgQVRPTUlD X1JFTEFYRUQpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgdW5zaWdu ZWQKK2FyZW5hc19pMmFfaW1wbChzaXplX3QgaSwgYm9vbCBjb21wYXQsIGJvb2wgdmFsaWRhdGUp IHsKKwl1bnNpZ25lZCBhOworCisJc3dpdGNoIChpKSB7CisJY2FzZSBNQUxMQ1RMX0FSRU5BU19B TEw6CisJCWEgPSAwOworCQlicmVhazsKKwljYXNlIE1BTExDVExfQVJFTkFTX0RFU1RST1lFRDoK KwkJYSA9IDE7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWlmIChjb21wYXQgJiYgaSA9PSBjdGxf YXJlbmFzLT5uYXJlbmFzKSB7CisJCQkvKgorCQkJICogUHJvdmlkZSBkZXByZWNhdGVkIGJhY2t3 YXJkIGNvbXBhdGliaWxpdHkgZm9yCisJCQkgKiBhY2Nlc3NpbmcgdGhlIG1lcmdlZCBzdGF0cyBh dCBpbmRleCBuYXJlbmFzIHJhdGhlcgorCQkJICogdGhhbiB2aWEgTUFMTENUTF9BUkVOQVNfQUxM LiAgVGhpcyBpcyBzY2hlZHVsZWQgZm9yCisJCQkgKiByZW1vdmFsIGluIDYuMC4wLgorCQkJICov CisJCQlhID0gMDsKKwkJfSBlbHNlIGlmICh2YWxpZGF0ZSAmJiBpID49IGN0bF9hcmVuYXMtPm5h cmVuYXMpIHsKKwkJCWEgPSBVSU5UX01BWDsKKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKiBUaGlz IGZ1bmN0aW9uIHNob3VsZCBuZXZlciBiZSBjYWxsZWQgZm9yIGFuIGluZGV4CisJCQkgKiBtb3Jl IHRoYW4gb25lIHBhc3QgdGhlIHJhbmdlIG9mIGluZGljZXMgdGhhdCBoYXZlCisJCQkgKiBpbml0 aWFsaXplZCBjdGwgZGF0YS4KKwkJCSAqLworCQkJYXNzZXJ0KGkgPCBjdGxfYXJlbmFzLT5uYXJl bmFzIHx8ICghdmFsaWRhdGUgJiYgaSA9PQorCQkJICAgIGN0bF9hcmVuYXMtPm5hcmVuYXMpKTsK KwkJCWEgPSAodW5zaWduZWQpaSArIDI7CisJCX0KKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIGE7 Cit9CisKK3N0YXRpYyB1bnNpZ25lZAorYXJlbmFzX2kyYShzaXplX3QgaSkgeworCXJldHVybiBh cmVuYXNfaTJhX2ltcGwoaSwgdHJ1ZSwgZmFsc2UpOworfQorCitzdGF0aWMgY3RsX2FyZW5hX3Qg KgorYXJlbmFzX2lfaW1wbCh0c2RfdCAqdHNkLCBzaXplX3QgaSwgYm9vbCBjb21wYXQsIGJvb2wg aW5pdCkgeworCWN0bF9hcmVuYV90ICpyZXQ7CisKKwlhc3NlcnQoIWNvbXBhdCB8fCAhaW5pdCk7 CisKKwlyZXQgPSBjdGxfYXJlbmFzLT5hcmVuYXNbYXJlbmFzX2kyYV9pbXBsKGksIGNvbXBhdCwg ZmFsc2UpXTsKKwlpZiAoaW5pdCAmJiByZXQgPT0gTlVMTCkgeworCQlpZiAoY29uZmlnX3N0YXRz KSB7CisJCQlzdHJ1Y3QgY29udGFpbmVyX3MgeworCQkJCWN0bF9hcmVuYV90CQljdGxfYXJlbmE7 CisJCQkJY3RsX2FyZW5hX3N0YXRzX3QJYXN0YXRzOworCQkJfTsKKwkJCXN0cnVjdCBjb250YWlu ZXJfcyAqY29udCA9CisJCQkgICAgKHN0cnVjdCBjb250YWluZXJfcyAqKWJhc2VfYWxsb2ModHNk X3RzZG4odHNkKSwKKwkJCSAgICBiMGdldCgpLCBzaXplb2Yoc3RydWN0IGNvbnRhaW5lcl9zKSwg UVVBTlRVTSk7CisJCQlpZiAoY29udCA9PSBOVUxMKSB7CisJCQkJcmV0dXJuIE5VTEw7CisJCQl9 CisJCQlyZXQgPSAmY29udC0+Y3RsX2FyZW5hOworCQkJcmV0LT5hc3RhdHMgPSAmY29udC0+YXN0 YXRzOworCQl9IGVsc2UgeworCQkJcmV0ID0gKGN0bF9hcmVuYV90ICopYmFzZV9hbGxvYyh0c2Rf dHNkbih0c2QpLCBiMGdldCgpLAorCQkJICAgIHNpemVvZihjdGxfYXJlbmFfdCksIFFVQU5UVU0p OworCQkJaWYgKHJldCA9PSBOVUxMKSB7CisJCQkJcmV0dXJuIE5VTEw7CisJCQl9CisJCX0KKwkJ cmV0LT5hcmVuYV9pbmQgPSAodW5zaWduZWQpaTsKKwkJY3RsX2FyZW5hcy0+YXJlbmFzW2FyZW5h c19pMmFfaW1wbChpLCBjb21wYXQsIGZhbHNlKV0gPSByZXQ7CisJfQorCisJYXNzZXJ0KHJldCA9 PSBOVUxMIHx8IGFyZW5hc19pMmEocmV0LT5hcmVuYV9pbmQpID09IGFyZW5hc19pMmEoaSkpOwor CXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBjdGxfYXJlbmFfdCAqCithcmVuYXNfaShzaXplX3Qg aSkgeworCWN0bF9hcmVuYV90ICpyZXQgPSBhcmVuYXNfaV9pbXBsKHRzZF9mZXRjaCgpLCBpLCB0 cnVlLCBmYWxzZSk7CisJYXNzZXJ0KHJldCAhPSBOVUxMKTsKKwlyZXR1cm4gcmV0OworfQorCitz dGF0aWMgdm9pZAorY3RsX2FyZW5hX2NsZWFyKGN0bF9hcmVuYV90ICpjdGxfYXJlbmEpIHsKKwlj dGxfYXJlbmEtPm50aHJlYWRzID0gMDsKKwljdGxfYXJlbmEtPmRzcyA9IGRzc19wcmVjX25hbWVz W2Rzc19wcmVjX2xpbWl0XTsKKwljdGxfYXJlbmEtPmRpcnR5X2RlY2F5X21zID0gLTE7CisJY3Rs X2FyZW5hLT5tdXp6eV9kZWNheV9tcyA9IC0xOworCWN0bF9hcmVuYS0+cGFjdGl2ZSA9IDA7CisJ Y3RsX2FyZW5hLT5wZGlydHkgPSAwOworCWN0bF9hcmVuYS0+cG11enp5ID0gMDsKKwlpZiAoY29u ZmlnX3N0YXRzKSB7CisJCW1lbXNldCgmY3RsX2FyZW5hLT5hc3RhdHMtPmFzdGF0cywgMCwgc2l6 ZW9mKGFyZW5hX3N0YXRzX3QpKTsKKwkJY3RsX2FyZW5hLT5hc3RhdHMtPmFsbG9jYXRlZF9zbWFs bCA9IDA7CisJCWN0bF9hcmVuYS0+YXN0YXRzLT5ubWFsbG9jX3NtYWxsID0gMDsKKwkJY3RsX2Fy ZW5hLT5hc3RhdHMtPm5kYWxsb2Nfc21hbGwgPSAwOworCQljdGxfYXJlbmEtPmFzdGF0cy0+bnJl cXVlc3RzX3NtYWxsID0gMDsKKwkJY3RsX2FyZW5hLT5hc3RhdHMtPm5maWxsc19zbWFsbCA9IDA7 CisJCWN0bF9hcmVuYS0+YXN0YXRzLT5uZmx1c2hlc19zbWFsbCA9IDA7CisJCW1lbXNldChjdGxf YXJlbmEtPmFzdGF0cy0+YnN0YXRzLCAwLCBTQ19OQklOUyAqCisJCSAgICBzaXplb2YoYmluX3N0 YXRzX2RhdGFfdCkpOworCQltZW1zZXQoY3RsX2FyZW5hLT5hc3RhdHMtPmxzdGF0cywgMCwgKFND X05TSVpFUyAtIFNDX05CSU5TKSAqCisJCSAgICBzaXplb2YoYXJlbmFfc3RhdHNfbGFyZ2VfdCkp OworCQltZW1zZXQoY3RsX2FyZW5hLT5hc3RhdHMtPmVzdGF0cywgMCwgU0NfTlBTSVpFUyAqCisJ CSAgICBzaXplb2YocGFjX2VzdGF0c190KSk7CisJCW1lbXNldCgmY3RsX2FyZW5hLT5hc3RhdHMt PmhwYXN0YXRzLCAwLAorCQkgICAgc2l6ZW9mKGhwYV9zaGFyZF9zdGF0c190KSk7CisJCW1lbXNl dCgmY3RsX2FyZW5hLT5hc3RhdHMtPnNlY3N0YXRzLCAwLAorCQkgICAgc2l6ZW9mKHNlY19zdGF0 c190KSk7CisJfQorfQorCitzdGF0aWMgdm9pZAorY3RsX2FyZW5hX3N0YXRzX2FtZXJnZSh0c2Ru X3QgKnRzZG4sIGN0bF9hcmVuYV90ICpjdGxfYXJlbmEsIGFyZW5hX3QgKmFyZW5hKSB7CisJdW5z aWduZWQgaTsKKworCWlmIChjb25maWdfc3RhdHMpIHsKKwkJYXJlbmFfc3RhdHNfbWVyZ2UodHNk biwgYXJlbmEsICZjdGxfYXJlbmEtPm50aHJlYWRzLAorCQkgICAgJmN0bF9hcmVuYS0+ZHNzLCAm Y3RsX2FyZW5hLT5kaXJ0eV9kZWNheV9tcywKKwkJICAgICZjdGxfYXJlbmEtPm11enp5X2RlY2F5 X21zLCAmY3RsX2FyZW5hLT5wYWN0aXZlLAorCQkgICAgJmN0bF9hcmVuYS0+cGRpcnR5LCAmY3Rs X2FyZW5hLT5wbXV6enksCisJCSAgICAmY3RsX2FyZW5hLT5hc3RhdHMtPmFzdGF0cywgY3RsX2Fy ZW5hLT5hc3RhdHMtPmJzdGF0cywKKwkJICAgIGN0bF9hcmVuYS0+YXN0YXRzLT5sc3RhdHMsIGN0 bF9hcmVuYS0+YXN0YXRzLT5lc3RhdHMsCisJCSAgICAmY3RsX2FyZW5hLT5hc3RhdHMtPmhwYXN0 YXRzLCAmY3RsX2FyZW5hLT5hc3RhdHMtPnNlY3N0YXRzKTsKKworCQlmb3IgKGkgPSAwOyBpIDwg U0NfTkJJTlM7IGkrKykgeworCQkJYmluX3N0YXRzX3QgKmJzdGF0cyA9CisJCQkgICAgJmN0bF9h cmVuYS0+YXN0YXRzLT5ic3RhdHNbaV0uc3RhdHNfZGF0YTsKKwkJCWN0bF9hcmVuYS0+YXN0YXRz LT5hbGxvY2F0ZWRfc21hbGwgKz0gYnN0YXRzLT5jdXJyZWdzICoKKwkJCSAgICBzel9pbmRleDJz aXplKGkpOworCQkJY3RsX2FyZW5hLT5hc3RhdHMtPm5tYWxsb2Nfc21hbGwgKz0gYnN0YXRzLT5u bWFsbG9jOworCQkJY3RsX2FyZW5hLT5hc3RhdHMtPm5kYWxsb2Nfc21hbGwgKz0gYnN0YXRzLT5u ZGFsbG9jOworCQkJY3RsX2FyZW5hLT5hc3RhdHMtPm5yZXF1ZXN0c19zbWFsbCArPSBic3RhdHMt Pm5yZXF1ZXN0czsKKwkJCWN0bF9hcmVuYS0+YXN0YXRzLT5uZmlsbHNfc21hbGwgKz0gYnN0YXRz LT5uZmlsbHM7CisJCQljdGxfYXJlbmEtPmFzdGF0cy0+bmZsdXNoZXNfc21hbGwgKz0gYnN0YXRz LT5uZmx1c2hlczsKKwkJfQorCX0gZWxzZSB7CisJCWFyZW5hX2Jhc2ljX3N0YXRzX21lcmdlKHRz ZG4sIGFyZW5hLCAmY3RsX2FyZW5hLT5udGhyZWFkcywKKwkJICAgICZjdGxfYXJlbmEtPmRzcywg JmN0bF9hcmVuYS0+ZGlydHlfZGVjYXlfbXMsCisJCSAgICAmY3RsX2FyZW5hLT5tdXp6eV9kZWNh eV9tcywgJmN0bF9hcmVuYS0+cGFjdGl2ZSwKKwkJICAgICZjdGxfYXJlbmEtPnBkaXJ0eSwgJmN0 bF9hcmVuYS0+cG11enp5KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitjdGxfYXJlbmFfc3RhdHNf c2RtZXJnZShjdGxfYXJlbmFfdCAqY3RsX3NkYXJlbmEsIGN0bF9hcmVuYV90ICpjdGxfYXJlbmEs CisgICAgYm9vbCBkZXN0cm95ZWQpIHsKKwl1bnNpZ25lZCBpOworCisJaWYgKCFkZXN0cm95ZWQp IHsKKwkJY3RsX3NkYXJlbmEtPm50aHJlYWRzICs9IGN0bF9hcmVuYS0+bnRocmVhZHM7CisJCWN0 bF9zZGFyZW5hLT5wYWN0aXZlICs9IGN0bF9hcmVuYS0+cGFjdGl2ZTsKKwkJY3RsX3NkYXJlbmEt PnBkaXJ0eSArPSBjdGxfYXJlbmEtPnBkaXJ0eTsKKwkJY3RsX3NkYXJlbmEtPnBtdXp6eSArPSBj dGxfYXJlbmEtPnBtdXp6eTsKKwl9IGVsc2UgeworCQlhc3NlcnQoY3RsX2FyZW5hLT5udGhyZWFk cyA9PSAwKTsKKwkJYXNzZXJ0KGN0bF9hcmVuYS0+cGFjdGl2ZSA9PSAwKTsKKwkJYXNzZXJ0KGN0 bF9hcmVuYS0+cGRpcnR5ID09IDApOworCQlhc3NlcnQoY3RsX2FyZW5hLT5wbXV6enkgPT0gMCk7 CisJfQorCisJaWYgKGNvbmZpZ19zdGF0cykgeworCQljdGxfYXJlbmFfc3RhdHNfdCAqc2RzdGF0 cyA9IGN0bF9zZGFyZW5hLT5hc3RhdHM7CisJCWN0bF9hcmVuYV9zdGF0c190ICphc3RhdHMgPSBj dGxfYXJlbmEtPmFzdGF0czsKKworCQlpZiAoIWRlc3Ryb3llZCkgeworCQkJc2RzdGF0cy0+YXN0 YXRzLm1hcHBlZCArPSBhc3RhdHMtPmFzdGF0cy5tYXBwZWQ7CisJCQlzZHN0YXRzLT5hc3RhdHMu cGFfc2hhcmRfc3RhdHMucGFjX3N0YXRzLnJldGFpbmVkCisJCQkgICAgKz0gYXN0YXRzLT5hc3Rh dHMucGFfc2hhcmRfc3RhdHMucGFjX3N0YXRzLnJldGFpbmVkOworCQkJc2RzdGF0cy0+YXN0YXRz LnBhX3NoYXJkX3N0YXRzLmVkYXRhX2F2YWlsCisJCQkgICAgKz0gYXN0YXRzLT5hc3RhdHMucGFf c2hhcmRfc3RhdHMuZWRhdGFfYXZhaWw7CisJCX0KKworCQljdGxfYWNjdW1fbG9ja2VkX3U2NCgK KwkJICAgICZzZHN0YXRzLT5hc3RhdHMucGFfc2hhcmRfc3RhdHMucGFjX3N0YXRzLmRlY2F5X2Rp cnR5Lm5wdXJnZSwKKwkJICAgICZhc3RhdHMtPmFzdGF0cy5wYV9zaGFyZF9zdGF0cy5wYWNfc3Rh dHMuZGVjYXlfZGlydHkubnB1cmdlKTsKKwkJY3RsX2FjY3VtX2xvY2tlZF91NjQoCisJCSAgICAm c2RzdGF0cy0+YXN0YXRzLnBhX3NoYXJkX3N0YXRzLnBhY19zdGF0cy5kZWNheV9kaXJ0eS5ubWFk dmlzZSwKKwkJICAgICZhc3RhdHMtPmFzdGF0cy5wYV9zaGFyZF9zdGF0cy5wYWNfc3RhdHMuZGVj YXlfZGlydHkubm1hZHZpc2UpOworCQljdGxfYWNjdW1fbG9ja2VkX3U2NCgKKwkJICAgICZzZHN0 YXRzLT5hc3RhdHMucGFfc2hhcmRfc3RhdHMucGFjX3N0YXRzLmRlY2F5X2RpcnR5LnB1cmdlZCwK KwkJICAgICZhc3RhdHMtPmFzdGF0cy5wYV9zaGFyZF9zdGF0cy5wYWNfc3RhdHMuZGVjYXlfZGly dHkucHVyZ2VkKTsKKworCQljdGxfYWNjdW1fbG9ja2VkX3U2NCgKKwkJICAgICZzZHN0YXRzLT5h c3RhdHMucGFfc2hhcmRfc3RhdHMucGFjX3N0YXRzLmRlY2F5X211enp5Lm5wdXJnZSwKKwkJICAg ICZhc3RhdHMtPmFzdGF0cy5wYV9zaGFyZF9zdGF0cy5wYWNfc3RhdHMuZGVjYXlfbXV6enkubnB1 cmdlKTsKKwkJY3RsX2FjY3VtX2xvY2tlZF91NjQoCisJCSAgICAmc2RzdGF0cy0+YXN0YXRzLnBh X3NoYXJkX3N0YXRzLnBhY19zdGF0cy5kZWNheV9tdXp6eS5ubWFkdmlzZSwKKwkJICAgICZhc3Rh dHMtPmFzdGF0cy5wYV9zaGFyZF9zdGF0cy5wYWNfc3RhdHMuZGVjYXlfbXV6enkubm1hZHZpc2Up OworCQljdGxfYWNjdW1fbG9ja2VkX3U2NCgKKwkJICAgICZzZHN0YXRzLT5hc3RhdHMucGFfc2hh cmRfc3RhdHMucGFjX3N0YXRzLmRlY2F5X211enp5LnB1cmdlZCwKKwkJICAgICZhc3RhdHMtPmFz dGF0cy5wYV9zaGFyZF9zdGF0cy5wYWNfc3RhdHMuZGVjYXlfbXV6enkucHVyZ2VkKTsKKworI2Rl ZmluZSBPUChtdHgpIG1hbGxvY19tdXRleF9wcm9mX21lcmdlKAkJCQlcCisJCSAgICAmKHNkc3Rh dHMtPmFzdGF0cy5tdXRleF9wcm9mX2RhdGFbCQkJXAorCQkgICAgICAgIGFyZW5hX3Byb2ZfbXV0 ZXhfIyNtdHhdKSwJCQlcCisJCSAgICAmKGFzdGF0cy0+YXN0YXRzLm11dGV4X3Byb2ZfZGF0YVsJ CQlcCisJCSAgICAgICAgYXJlbmFfcHJvZl9tdXRleF8jI210eF0pKTsKK01VVEVYX1BST0ZfQVJF TkFfTVVURVhFUworI3VuZGVmIE9QCisJCWlmICghZGVzdHJveWVkKSB7CisJCQlzZHN0YXRzLT5h c3RhdHMuYmFzZSArPSBhc3RhdHMtPmFzdGF0cy5iYXNlOworCQkJc2RzdGF0cy0+YXN0YXRzLnJl c2lkZW50ICs9IGFzdGF0cy0+YXN0YXRzLnJlc2lkZW50OworCQkJc2RzdGF0cy0+YXN0YXRzLm1l dGFkYXRhX3RocCArPSBhc3RhdHMtPmFzdGF0cy5tZXRhZGF0YV90aHA7CisJCQljdGxfYWNjdW1f YXRvbWljX3p1KCZzZHN0YXRzLT5hc3RhdHMuaW50ZXJuYWwsCisJCQkgICAgJmFzdGF0cy0+YXN0 YXRzLmludGVybmFsKTsKKwkJfSBlbHNlIHsKKwkJCWFzc2VydChhdG9taWNfbG9hZF96dSgKKwkJ CSAgICAmYXN0YXRzLT5hc3RhdHMuaW50ZXJuYWwsIEFUT01JQ19SRUxBWEVEKSA9PSAwKTsKKwkJ fQorCisJCWlmICghZGVzdHJveWVkKSB7CisJCQlzZHN0YXRzLT5hbGxvY2F0ZWRfc21hbGwgKz0g YXN0YXRzLT5hbGxvY2F0ZWRfc21hbGw7CisJCX0gZWxzZSB7CisJCQlhc3NlcnQoYXN0YXRzLT5h bGxvY2F0ZWRfc21hbGwgPT0gMCk7CisJCX0KKwkJc2RzdGF0cy0+bm1hbGxvY19zbWFsbCArPSBh c3RhdHMtPm5tYWxsb2Nfc21hbGw7CisJCXNkc3RhdHMtPm5kYWxsb2Nfc21hbGwgKz0gYXN0YXRz LT5uZGFsbG9jX3NtYWxsOworCQlzZHN0YXRzLT5ucmVxdWVzdHNfc21hbGwgKz0gYXN0YXRzLT5u cmVxdWVzdHNfc21hbGw7CisJCXNkc3RhdHMtPm5maWxsc19zbWFsbCArPSBhc3RhdHMtPm5maWxs c19zbWFsbDsKKwkJc2RzdGF0cy0+bmZsdXNoZXNfc21hbGwgKz0gYXN0YXRzLT5uZmx1c2hlc19z bWFsbDsKKworCQlpZiAoIWRlc3Ryb3llZCkgeworCQkJc2RzdGF0cy0+YXN0YXRzLmFsbG9jYXRl ZF9sYXJnZSArPQorCQkJICAgIGFzdGF0cy0+YXN0YXRzLmFsbG9jYXRlZF9sYXJnZTsKKwkJfSBl bHNlIHsKKwkJCWFzc2VydChhc3RhdHMtPmFzdGF0cy5hbGxvY2F0ZWRfbGFyZ2UgPT0gMCk7CisJ CX0KKwkJc2RzdGF0cy0+YXN0YXRzLm5tYWxsb2NfbGFyZ2UgKz0gYXN0YXRzLT5hc3RhdHMubm1h bGxvY19sYXJnZTsKKwkJc2RzdGF0cy0+YXN0YXRzLm5kYWxsb2NfbGFyZ2UgKz0gYXN0YXRzLT5h c3RhdHMubmRhbGxvY19sYXJnZTsKKwkJc2RzdGF0cy0+YXN0YXRzLm5yZXF1ZXN0c19sYXJnZQor CQkgICAgKz0gYXN0YXRzLT5hc3RhdHMubnJlcXVlc3RzX2xhcmdlOworCQlzZHN0YXRzLT5hc3Rh dHMubmZsdXNoZXNfbGFyZ2UgKz0gYXN0YXRzLT5hc3RhdHMubmZsdXNoZXNfbGFyZ2U7CisJCWN0 bF9hY2N1bV9hdG9taWNfenUoCisJCSAgICAmc2RzdGF0cy0+YXN0YXRzLnBhX3NoYXJkX3N0YXRz LnBhY19zdGF0cy5hYmFuZG9uZWRfdm0sCisJCSAgICAmYXN0YXRzLT5hc3RhdHMucGFfc2hhcmRf c3RhdHMucGFjX3N0YXRzLmFiYW5kb25lZF92bSk7CisKKwkJc2RzdGF0cy0+YXN0YXRzLnRjYWNo ZV9ieXRlcyArPSBhc3RhdHMtPmFzdGF0cy50Y2FjaGVfYnl0ZXM7CisJCXNkc3RhdHMtPmFzdGF0 cy50Y2FjaGVfc3Rhc2hlZF9ieXRlcyArPQorCQkgICAgYXN0YXRzLT5hc3RhdHMudGNhY2hlX3N0 YXNoZWRfYnl0ZXM7CisKKwkJaWYgKGN0bF9hcmVuYS0+YXJlbmFfaW5kID09IDApIHsKKwkJCXNk c3RhdHMtPmFzdGF0cy51cHRpbWUgPSBhc3RhdHMtPmFzdGF0cy51cHRpbWU7CisJCX0KKworCQkv KiBNZXJnZSBiaW4gc3RhdHMuICovCisJCWZvciAoaSA9IDA7IGkgPCBTQ19OQklOUzsgaSsrKSB7 CisJCQliaW5fc3RhdHNfdCAqYnN0YXRzID0gJmFzdGF0cy0+YnN0YXRzW2ldLnN0YXRzX2RhdGE7 CisJCQliaW5fc3RhdHNfdCAqbWVyZ2VkID0gJnNkc3RhdHMtPmJzdGF0c1tpXS5zdGF0c19kYXRh OworCQkJbWVyZ2VkLT5ubWFsbG9jICs9IGJzdGF0cy0+bm1hbGxvYzsKKwkJCW1lcmdlZC0+bmRh bGxvYyArPSBic3RhdHMtPm5kYWxsb2M7CisJCQltZXJnZWQtPm5yZXF1ZXN0cyArPSBic3RhdHMt Pm5yZXF1ZXN0czsKKwkJCWlmICghZGVzdHJveWVkKSB7CisJCQkJbWVyZ2VkLT5jdXJyZWdzICs9 IGJzdGF0cy0+Y3VycmVnczsKKwkJCX0gZWxzZSB7CisJCQkJYXNzZXJ0KGJzdGF0cy0+Y3VycmVn cyA9PSAwKTsKKwkJCX0KKwkJCW1lcmdlZC0+bmZpbGxzICs9IGJzdGF0cy0+bmZpbGxzOworCQkJ bWVyZ2VkLT5uZmx1c2hlcyArPSBic3RhdHMtPm5mbHVzaGVzOworCQkJbWVyZ2VkLT5uc2xhYnMg Kz0gYnN0YXRzLT5uc2xhYnM7CisJCQltZXJnZWQtPnJlc2xhYnMgKz0gYnN0YXRzLT5yZXNsYWJz OworCQkJaWYgKCFkZXN0cm95ZWQpIHsKKwkJCQltZXJnZWQtPmN1cnNsYWJzICs9IGJzdGF0cy0+ Y3Vyc2xhYnM7CisJCQkJbWVyZ2VkLT5ub25mdWxsX3NsYWJzICs9IGJzdGF0cy0+bm9uZnVsbF9z bGFiczsKKwkJCX0gZWxzZSB7CisJCQkJYXNzZXJ0KGJzdGF0cy0+Y3Vyc2xhYnMgPT0gMCk7CisJ CQkJYXNzZXJ0KGJzdGF0cy0+bm9uZnVsbF9zbGFicyA9PSAwKTsKKwkJCX0KKwkJCW1hbGxvY19t dXRleF9wcm9mX21lcmdlKCZzZHN0YXRzLT5ic3RhdHNbaV0ubXV0ZXhfZGF0YSwKKwkJCSAgICAm YXN0YXRzLT5ic3RhdHNbaV0ubXV0ZXhfZGF0YSk7CisJCX0KKworCQkvKiBNZXJnZSBzdGF0cyBm b3IgbGFyZ2UgYWxsb2NhdGlvbnMuICovCisJCWZvciAoaSA9IDA7IGkgPCBTQ19OU0laRVMgLSBT Q19OQklOUzsgaSsrKSB7CisJCQljdGxfYWNjdW1fbG9ja2VkX3U2NCgmc2RzdGF0cy0+bHN0YXRz W2ldLm5tYWxsb2MsCisJCQkgICAgJmFzdGF0cy0+bHN0YXRzW2ldLm5tYWxsb2MpOworCQkJY3Rs X2FjY3VtX2xvY2tlZF91NjQoJnNkc3RhdHMtPmxzdGF0c1tpXS5uZGFsbG9jLAorCQkJICAgICZh c3RhdHMtPmxzdGF0c1tpXS5uZGFsbG9jKTsKKwkJCWN0bF9hY2N1bV9sb2NrZWRfdTY0KCZzZHN0 YXRzLT5sc3RhdHNbaV0ubnJlcXVlc3RzLAorCQkJICAgICZhc3RhdHMtPmxzdGF0c1tpXS5ucmVx dWVzdHMpOworCQkJaWYgKCFkZXN0cm95ZWQpIHsKKwkJCQlzZHN0YXRzLT5sc3RhdHNbaV0uY3Vy bGV4dGVudHMgKz0KKwkJCQkgICAgYXN0YXRzLT5sc3RhdHNbaV0uY3VybGV4dGVudHM7CisJCQl9 IGVsc2UgeworCQkJCWFzc2VydChhc3RhdHMtPmxzdGF0c1tpXS5jdXJsZXh0ZW50cyA9PSAwKTsK KwkJCX0KKwkJfQorCisJCS8qIE1lcmdlIGV4dGVudHMgc3RhdHMuICovCisJCWZvciAoaSA9IDA7 IGkgPCBTQ19OUFNJWkVTOyBpKyspIHsKKwkJCXNkc3RhdHMtPmVzdGF0c1tpXS5uZGlydHkgKz0g YXN0YXRzLT5lc3RhdHNbaV0ubmRpcnR5OworCQkJc2RzdGF0cy0+ZXN0YXRzW2ldLm5tdXp6eSAr PSBhc3RhdHMtPmVzdGF0c1tpXS5ubXV6enk7CisJCQlzZHN0YXRzLT5lc3RhdHNbaV0ubnJldGFp bmVkCisJCQkgICAgKz0gYXN0YXRzLT5lc3RhdHNbaV0ubnJldGFpbmVkOworCQkJc2RzdGF0cy0+ ZXN0YXRzW2ldLmRpcnR5X2J5dGVzCisJCQkgICAgKz0gYXN0YXRzLT5lc3RhdHNbaV0uZGlydHlf Ynl0ZXM7CisJCQlzZHN0YXRzLT5lc3RhdHNbaV0ubXV6enlfYnl0ZXMKKwkJCSAgICArPSBhc3Rh dHMtPmVzdGF0c1tpXS5tdXp6eV9ieXRlczsKKwkJCXNkc3RhdHMtPmVzdGF0c1tpXS5yZXRhaW5l ZF9ieXRlcworCQkJICAgICs9IGFzdGF0cy0+ZXN0YXRzW2ldLnJldGFpbmVkX2J5dGVzOworCQl9 CisKKwkJLyogTWVyZ2UgSFBBIHN0YXRzLiAqLworCQlocGFfc2hhcmRfc3RhdHNfYWNjdW0oJnNk c3RhdHMtPmhwYXN0YXRzLCAmYXN0YXRzLT5ocGFzdGF0cyk7CisJCXNlY19zdGF0c19hY2N1bSgm c2RzdGF0cy0+c2Vjc3RhdHMsICZhc3RhdHMtPnNlY3N0YXRzKTsKKwl9Cit9CisKK3N0YXRpYyB2 b2lkCitjdGxfYXJlbmFfcmVmcmVzaCh0c2RuX3QgKnRzZG4sIGFyZW5hX3QgKmFyZW5hLCBjdGxf YXJlbmFfdCAqY3RsX3NkYXJlbmEsCisgICAgdW5zaWduZWQgaSwgYm9vbCBkZXN0cm95ZWQpIHsK KwljdGxfYXJlbmFfdCAqY3RsX2FyZW5hID0gYXJlbmFzX2koaSk7CisKKwljdGxfYXJlbmFfY2xl YXIoY3RsX2FyZW5hKTsKKwljdGxfYXJlbmFfc3RhdHNfYW1lcmdlKHRzZG4sIGN0bF9hcmVuYSwg YXJlbmEpOworCS8qIE1lcmdlIGludG8gc3VtIHN0YXRzIGFzIHdlbGwuICovCisJY3RsX2FyZW5h X3N0YXRzX3NkbWVyZ2UoY3RsX3NkYXJlbmEsIGN0bF9hcmVuYSwgZGVzdHJveWVkKTsKK30KKwor c3RhdGljIHVuc2lnbmVkCitjdGxfYXJlbmFfaW5pdCh0c2RfdCAqdHNkLCBjb25zdCBhcmVuYV9j b25maWdfdCAqY29uZmlnKSB7CisJdW5zaWduZWQgYXJlbmFfaW5kOworCWN0bF9hcmVuYV90ICpj dGxfYXJlbmE7CisKKwlpZiAoKGN0bF9hcmVuYSA9IHFsX2xhc3QoJmN0bF9hcmVuYXMtPmRlc3Ry b3llZCwgZGVzdHJveWVkX2xpbmspKSAhPQorCSAgICBOVUxMKSB7CisJCXFsX3JlbW92ZSgmY3Rs X2FyZW5hcy0+ZGVzdHJveWVkLCBjdGxfYXJlbmEsIGRlc3Ryb3llZF9saW5rKTsKKwkJYXJlbmFf aW5kID0gY3RsX2FyZW5hLT5hcmVuYV9pbmQ7CisJfSBlbHNlIHsKKwkJYXJlbmFfaW5kID0gY3Rs X2FyZW5hcy0+bmFyZW5hczsKKwl9CisKKwkvKiBUcmlnZ2VyIHN0YXRzIGFsbG9jYXRpb24uICov CisJaWYgKGFyZW5hc19pX2ltcGwodHNkLCBhcmVuYV9pbmQsIGZhbHNlLCB0cnVlKSA9PSBOVUxM KSB7CisJCXJldHVybiBVSU5UX01BWDsKKwl9CisKKwkvKiBJbml0aWFsaXplIG5ldyBhcmVuYS4g Ki8KKwlpZiAoYXJlbmFfaW5pdCh0c2RfdHNkbih0c2QpLCBhcmVuYV9pbmQsIGNvbmZpZykgPT0g TlVMTCkgeworCQlyZXR1cm4gVUlOVF9NQVg7CisJfQorCisJaWYgKGFyZW5hX2luZCA9PSBjdGxf YXJlbmFzLT5uYXJlbmFzKSB7CisJCWN0bF9hcmVuYXMtPm5hcmVuYXMrKzsKKwl9CisKKwlyZXR1 cm4gYXJlbmFfaW5kOworfQorCitzdGF0aWMgdm9pZAorY3RsX2JhY2tncm91bmRfdGhyZWFkX3N0 YXRzX3JlYWQodHNkbl90ICp0c2RuKSB7CisJYmFja2dyb3VuZF90aHJlYWRfc3RhdHNfdCAqc3Rh dHMgPSAmY3RsX3N0YXRzLT5iYWNrZ3JvdW5kX3RocmVhZDsKKwlpZiAoIWhhdmVfYmFja2dyb3Vu ZF90aHJlYWQgfHwKKwkgICAgYmFja2dyb3VuZF90aHJlYWRfc3RhdHNfcmVhZCh0c2RuLCBzdGF0 cykpIHsKKwkJbWVtc2V0KHN0YXRzLCAwLCBzaXplb2YoYmFja2dyb3VuZF90aHJlYWRfc3RhdHNf dCkpOworCQluc3RpbWVfaW5pdF96ZXJvKCZzdGF0cy0+cnVuX2ludGVydmFsKTsKKwl9CisJbWFs bG9jX211dGV4X3Byb2ZfY29weSgKKwkgICAgJmN0bF9zdGF0cy0+bXV0ZXhfcHJvZl9kYXRhW2ds b2JhbF9wcm9mX211dGV4X21heF9wZXJfYmdfdGhkXSwKKwkgICAgJnN0YXRzLT5tYXhfY291bnRl cl9wZXJfYmdfdGhkKTsKK30KKworc3RhdGljIHZvaWQKK2N0bF9yZWZyZXNoKHRzZG5fdCAqdHNk bikgeworCXVuc2lnbmVkIGk7CisJY3RsX2FyZW5hX3QgKmN0bF9zYXJlbmEgPSBhcmVuYXNfaShN QUxMQ1RMX0FSRU5BU19BTEwpOworCVZBUklBQkxFX0FSUkFZKGFyZW5hX3QgKiwgdGFyZW5hcywg Y3RsX2FyZW5hcy0+bmFyZW5hcyk7CisKKwkvKgorCSAqIENsZWFyIHN1bSBzdGF0cywgc2luY2Ug dGhleSB3aWxsIGJlIG1lcmdlZCBpbnRvIGJ5CisJICogY3RsX2FyZW5hX3JlZnJlc2goKS4KKwkg Ki8KKwljdGxfYXJlbmFfY2xlYXIoY3RsX3NhcmVuYSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgY3Rs X2FyZW5hcy0+bmFyZW5hczsgaSsrKSB7CisJCXRhcmVuYXNbaV0gPSBhcmVuYV9nZXQodHNkbiwg aSwgZmFsc2UpOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBjdGxfYXJlbmFzLT5uYXJlbmFzOyBp KyspIHsKKwkJY3RsX2FyZW5hX3QgKmN0bF9hcmVuYSA9IGFyZW5hc19pKGkpOworCQlib29sIGlu aXRpYWxpemVkID0gKHRhcmVuYXNbaV0gIT0gTlVMTCk7CisKKwkJY3RsX2FyZW5hLT5pbml0aWFs aXplZCA9IGluaXRpYWxpemVkOworCQlpZiAoaW5pdGlhbGl6ZWQpIHsKKwkJCWN0bF9hcmVuYV9y ZWZyZXNoKHRzZG4sIHRhcmVuYXNbaV0sIGN0bF9zYXJlbmEsIGksCisJCQkgICAgZmFsc2UpOwor CQl9CisJfQorCisJaWYgKGNvbmZpZ19zdGF0cykgeworCQljdGxfc3RhdHMtPmFsbG9jYXRlZCA9 IGN0bF9zYXJlbmEtPmFzdGF0cy0+YWxsb2NhdGVkX3NtYWxsICsKKwkJICAgIGN0bF9zYXJlbmEt PmFzdGF0cy0+YXN0YXRzLmFsbG9jYXRlZF9sYXJnZTsKKwkJY3RsX3N0YXRzLT5hY3RpdmUgPSAo Y3RsX3NhcmVuYS0+cGFjdGl2ZSA8PCBMR19QQUdFKTsKKwkJY3RsX3N0YXRzLT5tZXRhZGF0YSA9 IGN0bF9zYXJlbmEtPmFzdGF0cy0+YXN0YXRzLmJhc2UgKworCQkgICAgYXRvbWljX2xvYWRfenUo JmN0bF9zYXJlbmEtPmFzdGF0cy0+YXN0YXRzLmludGVybmFsLAorCQkJQVRPTUlDX1JFTEFYRUQp OworCQljdGxfc3RhdHMtPnJlc2lkZW50ID0gY3RsX3NhcmVuYS0+YXN0YXRzLT5hc3RhdHMucmVz aWRlbnQ7CisJCWN0bF9zdGF0cy0+bWV0YWRhdGFfdGhwID0KKwkJICAgIGN0bF9zYXJlbmEtPmFz dGF0cy0+YXN0YXRzLm1ldGFkYXRhX3RocDsKKwkJY3RsX3N0YXRzLT5tYXBwZWQgPSBjdGxfc2Fy ZW5hLT5hc3RhdHMtPmFzdGF0cy5tYXBwZWQ7CisJCWN0bF9zdGF0cy0+cmV0YWluZWQgPSBjdGxf c2FyZW5hLT5hc3RhdHMtPmFzdGF0cworCQkgICAgLnBhX3NoYXJkX3N0YXRzLnBhY19zdGF0cy5y ZXRhaW5lZDsKKworCQljdGxfYmFja2dyb3VuZF90aHJlYWRfc3RhdHNfcmVhZCh0c2RuKTsKKwor I2RlZmluZSBSRUFEX0dMT0JBTF9NVVRFWF9QUk9GX0RBVEEoaSwgbXR4KQkJCQlcCisgICAgbWFs bG9jX211dGV4X2xvY2sodHNkbiwgJm10eCk7CQkJCQlcCisgICAgbWFsbG9jX211dGV4X3Byb2Zf cmVhZCh0c2RuLCAmY3RsX3N0YXRzLT5tdXRleF9wcm9mX2RhdGFbaV0sICZtdHgpOwlcCisgICAg bWFsbG9jX211dGV4X3VubG9jayh0c2RuLCAmbXR4KTsKKworCQlpZiAoY29uZmlnX3Byb2YgJiYg b3B0X3Byb2YpIHsKKwkJCVJFQURfR0xPQkFMX01VVEVYX1BST0ZfREFUQSgKKwkJCSAgICBnbG9i YWxfcHJvZl9tdXRleF9wcm9mLCBidDJnY3R4X210eCk7CisJCQlSRUFEX0dMT0JBTF9NVVRFWF9Q Uk9GX0RBVEEoCisJCQkgICAgZ2xvYmFsX3Byb2ZfbXV0ZXhfcHJvZl90aGRzX2RhdGEsIHRkYXRh c19tdHgpOworCQkJUkVBRF9HTE9CQUxfTVVURVhfUFJPRl9EQVRBKAorCQkJICAgIGdsb2JhbF9w cm9mX211dGV4X3Byb2ZfZHVtcCwgcHJvZl9kdW1wX210eCk7CisJCQlSRUFEX0dMT0JBTF9NVVRF WF9QUk9GX0RBVEEoCisJCQkgICAgZ2xvYmFsX3Byb2ZfbXV0ZXhfcHJvZl9yZWNlbnRfYWxsb2Ms CisJCQkgICAgcHJvZl9yZWNlbnRfYWxsb2NfbXR4KTsKKwkJCVJFQURfR0xPQkFMX01VVEVYX1BS T0ZfREFUQSgKKwkJCSAgICBnbG9iYWxfcHJvZl9tdXRleF9wcm9mX3JlY2VudF9kdW1wLAorCQkJ ICAgIHByb2ZfcmVjZW50X2R1bXBfbXR4KTsKKwkJCVJFQURfR0xPQkFMX01VVEVYX1BST0ZfREFU QSgKKwkJCSAgICBnbG9iYWxfcHJvZl9tdXRleF9wcm9mX3N0YXRzLCBwcm9mX3N0YXRzX210eCk7 CisJCX0KKwkJaWYgKGhhdmVfYmFja2dyb3VuZF90aHJlYWQpIHsKKwkJCVJFQURfR0xPQkFMX01V VEVYX1BST0ZfREFUQSgKKwkJCSAgICBnbG9iYWxfcHJvZl9tdXRleF9iYWNrZ3JvdW5kX3RocmVh ZCwKKwkJCSAgICBiYWNrZ3JvdW5kX3RocmVhZF9sb2NrKTsKKwkJfSBlbHNlIHsKKwkJCW1lbXNl dCgmY3RsX3N0YXRzLT5tdXRleF9wcm9mX2RhdGFbCisJCQkgICAgZ2xvYmFsX3Byb2ZfbXV0ZXhf YmFja2dyb3VuZF90aHJlYWRdLCAwLAorCQkJICAgIHNpemVvZihtdXRleF9wcm9mX2RhdGFfdCkp OworCQl9CisJCS8qIFdlIG93biBjdGwgbXV0ZXggYWxyZWFkeS4gKi8KKwkJbWFsbG9jX211dGV4 X3Byb2ZfcmVhZCh0c2RuLAorCQkgICAgJmN0bF9zdGF0cy0+bXV0ZXhfcHJvZl9kYXRhW2dsb2Jh bF9wcm9mX211dGV4X2N0bF0sCisJCSAgICAmY3RsX210eCk7CisjdW5kZWYgUkVBRF9HTE9CQUxf TVVURVhfUFJPRl9EQVRBCisJfQorCWN0bF9hcmVuYXMtPmVwb2NoKys7Cit9CisKK3N0YXRpYyBi b29sCitjdGxfaW5pdCh0c2RfdCAqdHNkKSB7CisJYm9vbCByZXQ7CisJdHNkbl90ICp0c2RuID0g dHNkX3RzZG4odHNkKTsKKworCW1hbGxvY19tdXRleF9sb2NrKHRzZG4sICZjdGxfbXR4KTsKKwlp ZiAoIWN0bF9pbml0aWFsaXplZCkgeworCQljdGxfYXJlbmFfdCAqY3RsX3NhcmVuYSwgKmN0bF9k YXJlbmE7CisJCXVuc2lnbmVkIGk7CisKKwkJLyoKKwkJICogQWxsb2NhdGUgZGVtYW5kLXplcm9l ZCBzcGFjZSBmb3IgcG9pbnRlcnMgdG8gdGhlIGZ1bGwKKwkJICogcmFuZ2Ugb2Ygc3VwcG9ydGVk IGFyZW5hIGluZGljZXMuCisJCSAqLworCQlpZiAoY3RsX2FyZW5hcyA9PSBOVUxMKSB7CisJCQlj dGxfYXJlbmFzID0gKGN0bF9hcmVuYXNfdCAqKWJhc2VfYWxsb2ModHNkbiwKKwkJCSAgICBiMGdl dCgpLCBzaXplb2YoY3RsX2FyZW5hc190KSwgUVVBTlRVTSk7CisJCQlpZiAoY3RsX2FyZW5hcyA9 PSBOVUxMKSB7CisJCQkJcmV0ID0gdHJ1ZTsKKwkJCQlnb3RvIGxhYmVsX3JldHVybjsKKwkJCX0K KwkJfQorCisJCWlmIChjb25maWdfc3RhdHMgJiYgY3RsX3N0YXRzID09IE5VTEwpIHsKKwkJCWN0 bF9zdGF0cyA9IChjdGxfc3RhdHNfdCAqKWJhc2VfYWxsb2ModHNkbiwgYjBnZXQoKSwKKwkJCSAg ICBzaXplb2YoY3RsX3N0YXRzX3QpLCBRVUFOVFVNKTsKKwkJCWlmIChjdGxfc3RhdHMgPT0gTlVM TCkgeworCQkJCXJldCA9IHRydWU7CisJCQkJZ290byBsYWJlbF9yZXR1cm47CisJCQl9CisJCX0K KworCQkvKgorCQkgKiBBbGxvY2F0ZSBzcGFjZSBmb3IgdGhlIGN1cnJlbnQgZnVsbCByYW5nZSBv ZiBhcmVuYXMKKwkJICogaGVyZSByYXRoZXIgdGhhbiBkb2luZyBpdCBsYXppbHkgZWxzZXdoZXJl LCBpbiBvcmRlcgorCQkgKiB0byBsaW1pdCB3aGVuIE9PTS1jYXVzZWQgZXJyb3JzIGNhbiBvY2N1 ci4KKwkJICovCisJCWlmICgoY3RsX3NhcmVuYSA9IGFyZW5hc19pX2ltcGwodHNkLCBNQUxMQ1RM X0FSRU5BU19BTEwsIGZhbHNlLAorCQkgICAgdHJ1ZSkpID09IE5VTEwpIHsKKwkJCXJldCA9IHRy dWU7CisJCQlnb3RvIGxhYmVsX3JldHVybjsKKwkJfQorCQljdGxfc2FyZW5hLT5pbml0aWFsaXpl ZCA9IHRydWU7CisKKwkJaWYgKChjdGxfZGFyZW5hID0gYXJlbmFzX2lfaW1wbCh0c2QsIE1BTExD VExfQVJFTkFTX0RFU1RST1lFRCwKKwkJICAgIGZhbHNlLCB0cnVlKSkgPT0gTlVMTCkgeworCQkJ cmV0ID0gdHJ1ZTsKKwkJCWdvdG8gbGFiZWxfcmV0dXJuOworCQl9CisJCWN0bF9hcmVuYV9jbGVh cihjdGxfZGFyZW5hKTsKKwkJLyoKKwkJICogRG9uJ3QgdG9nZ2xlIGN0bF9kYXJlbmEgdG8gaW5p dGlhbGl6ZWQgdW50aWwgYW4gYXJlbmEgaXMKKwkJICogYWN0dWFsbHkgZGVzdHJveWVkLCBzbyB0 aGF0IGFyZW5hLjxpPi5pbml0aWFsaXplZCBjYW4gYmUgdXNlZAorCQkgKiB0byBxdWVyeSB3aGV0 aGVyIHRoZSBzdGF0cyBhcmUgcmVsZXZhbnQuCisJCSAqLworCisJCWN0bF9hcmVuYXMtPm5hcmVu YXMgPSBuYXJlbmFzX3RvdGFsX2dldCgpOworCQlmb3IgKGkgPSAwOyBpIDwgY3RsX2FyZW5hcy0+ bmFyZW5hczsgaSsrKSB7CisJCQlpZiAoYXJlbmFzX2lfaW1wbCh0c2QsIGksIGZhbHNlLCB0cnVl KSA9PSBOVUxMKSB7CisJCQkJcmV0ID0gdHJ1ZTsKKwkJCQlnb3RvIGxhYmVsX3JldHVybjsKKwkJ CX0KKwkJfQorCisJCXFsX25ldygmY3RsX2FyZW5hcy0+ZGVzdHJveWVkKTsKKwkJY3RsX3JlZnJl c2godHNkbik7CisKKwkJY3RsX2luaXRpYWxpemVkID0gdHJ1ZTsKKwl9CisKKwlyZXQgPSBmYWxz ZTsKK2xhYmVsX3JldHVybjoKKwltYWxsb2NfbXV0ZXhfdW5sb2NrKHRzZG4sICZjdGxfbXR4KTsK KwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50CitjdGxfbG9va3VwKHRzZG5fdCAqdHNkbiwg Y29uc3QgY3RsX25hbWVkX25vZGVfdCAqc3RhcnRpbmdfbm9kZSwKKyAgICBjb25zdCBjaGFyICpu YW1lLCBjb25zdCBjdGxfbmFtZWRfbm9kZV90ICoqZW5kaW5nX25vZGVwLCBzaXplX3QgKm1pYnAs CisgICAgc2l6ZV90ICpkZXB0aHApIHsKKwlpbnQgcmV0OworCWNvbnN0IGNoYXIgKmVsbSwgKnRk b3QsICpkb3Q7CisJc2l6ZV90IGVsZW4sIGksIGo7CisJY29uc3QgY3RsX25hbWVkX25vZGVfdCAq bm9kZTsKKworCWVsbSA9IG5hbWU7CisJLyogRXF1aXZhbGVudCB0byBzdHJjaHJudWwoKS4gKi8K Kwlkb3QgPSAoKHRkb3QgPSBzdHJjaHIoZWxtLCAnLicpKSAhPSBOVUxMKSA/IHRkb3QgOiBzdHJj aHIoZWxtLCAnXDAnKTsKKwllbGVuID0gKHNpemVfdCkoKHVpbnRwdHJfdClkb3QgLSAodWludHB0 cl90KWVsbSk7CisJaWYgKGVsZW4gPT0gMCkgeworCQlyZXQgPSBFTk9FTlQ7CisJCWdvdG8gbGFi ZWxfcmV0dXJuOworCX0KKwlub2RlID0gc3RhcnRpbmdfbm9kZTsKKwlmb3IgKGkgPSAwOyBpIDwg KmRlcHRocDsgaSsrKSB7CisJCWFzc2VydChub2RlKTsKKwkJYXNzZXJ0KG5vZGUtPm5jaGlsZHJl biA+IDApOworCQlpZiAoY3RsX25hbWVkX25vZGUobm9kZS0+Y2hpbGRyZW4pICE9IE5VTEwpIHsK KwkJCWNvbnN0IGN0bF9uYW1lZF9ub2RlX3QgKnBub2RlID0gbm9kZTsKKworCQkJLyogQ2hpbGRy ZW4gYXJlIG5hbWVkLiAqLworCQkJZm9yIChqID0gMDsgaiA8IG5vZGUtPm5jaGlsZHJlbjsgaisr KSB7CisJCQkJY29uc3QgY3RsX25hbWVkX25vZGVfdCAqY2hpbGQgPQorCQkJCSAgICBjdGxfbmFt ZWRfY2hpbGRyZW4obm9kZSwgaik7CisJCQkJaWYgKHN0cmxlbihjaGlsZC0+bmFtZSkgPT0gZWxl biAmJgorCQkJCSAgICBzdHJuY21wKGVsbSwgY2hpbGQtPm5hbWUsIGVsZW4pID09IDApIHsKKwkJ CQkJbm9kZSA9IGNoaWxkOworCQkJCQltaWJwW2ldID0gajsKKwkJCQkJYnJlYWs7CisJCQkJfQor CQkJfQorCQkJaWYgKG5vZGUgPT0gcG5vZGUpIHsKKwkJCQlyZXQgPSBFTk9FTlQ7CisJCQkJZ290 byBsYWJlbF9yZXR1cm47CisJCQl9CisJCX0gZWxzZSB7CisJCQl1aW50bWF4X3QgaW5kZXg7CisJ CQljb25zdCBjdGxfaW5kZXhlZF9ub2RlX3QgKmlub2RlOworCisJCQkvKiBDaGlsZHJlbiBhcmUg aW5kZXhlZC4gKi8KKwkJCWluZGV4ID0gbWFsbG9jX3N0cnRvdW1heChlbG0sIE5VTEwsIDEwKTsK KwkJCWlmIChpbmRleCA9PSBVSU5UTUFYX01BWCB8fCBpbmRleCA+IFNJWkVfVF9NQVgpIHsKKwkJ CQlyZXQgPSBFTk9FTlQ7CisJCQkJZ290byBsYWJlbF9yZXR1cm47CisJCQl9CisKKwkJCWlub2Rl ID0gY3RsX2luZGV4ZWRfbm9kZShub2RlLT5jaGlsZHJlbik7CisJCQlub2RlID0gaW5vZGUtPmlu ZGV4KHRzZG4sIG1pYnAsICpkZXB0aHAsIChzaXplX3QpaW5kZXgpOworCQkJaWYgKG5vZGUgPT0g TlVMTCkgeworCQkJCXJldCA9IEVOT0VOVDsKKwkJCQlnb3RvIGxhYmVsX3JldHVybjsKKwkJCX0K KworCQkJbWlicFtpXSA9IChzaXplX3QpaW5kZXg7CisJCX0KKworCQkvKiBSZWFjaGVkIHRoZSBl bmQ/ICovCisJCWlmIChub2RlLT5jdGwgIT0gTlVMTCB8fCAqZG90ID09ICdcMCcpIHsKKwkJCS8q IFRlcm1pbmFsIG5vZGUuICovCisJCQlpZiAoKmRvdCAhPSAnXDAnKSB7CisJCQkJLyoKKwkJCQkg KiBUaGUgbmFtZSBjb250YWlucyBtb3JlIGVsZW1lbnRzIHRoYW4gYXJlCisJCQkJICogaW4gdGhp cyBwYXRoIHRocm91Z2ggdGhlIHRyZWUuCisJCQkJICovCisJCQkJcmV0ID0gRU5PRU5UOworCQkJ CWdvdG8gbGFiZWxfcmV0dXJuOworCQkJfQorCQkJLyogQ29tcGxldGUgbG9va3VwIHN1Y2Nlc3Nm dWwuICovCisJCQkqZGVwdGhwID0gaSArIDE7CisJCQlicmVhazsKKwkJfQorCisJCS8qIFVwZGF0 ZSBlbG0uICovCisJCWVsbSA9ICZkb3RbMV07CisJCWRvdCA9ICgodGRvdCA9IHN0cmNocihlbG0s ICcuJykpICE9IE5VTEwpID8gdGRvdCA6CisJCSAgICBzdHJjaHIoZWxtLCAnXDAnKTsKKwkJZWxl biA9IChzaXplX3QpKCh1aW50cHRyX3QpZG90IC0gKHVpbnRwdHJfdCllbG0pOworCX0KKwlpZiAo ZW5kaW5nX25vZGVwICE9IE5VTEwpIHsKKwkJKmVuZGluZ19ub2RlcCA9IG5vZGU7CisJfQorCisJ cmV0ID0gMDsKK2xhYmVsX3JldHVybjoKKwlyZXR1cm4gcmV0OworfQorCitpbnQKK2N0bF9ieW5h bWUodHNkX3QgKnRzZCwgY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqb2xkcCwgc2l6ZV90ICpvbGRs ZW5wLAorICAgIHZvaWQgKm5ld3AsIHNpemVfdCBuZXdsZW4pIHsKKwlpbnQgcmV0OworCXNpemVf dCBkZXB0aDsKKwlzaXplX3QgbWliW0NUTF9NQVhfREVQVEhdOworCWNvbnN0IGN0bF9uYW1lZF9u b2RlX3QgKm5vZGU7CisKKwlpZiAoIWN0bF9pbml0aWFsaXplZCAmJiBjdGxfaW5pdCh0c2QpKSB7 CisJCXJldCA9IEVBR0FJTjsKKwkJZ290byBsYWJlbF9yZXR1cm47CisJfQorCisJZGVwdGggPSBD VExfTUFYX0RFUFRIOworCXJldCA9IGN0bF9sb29rdXAodHNkX3RzZG4odHNkKSwgc3VwZXJfcm9v dF9ub2RlLCBuYW1lLCAmbm9kZSwgbWliLAorCSAgICAmZGVwdGgpOworCWlmIChyZXQgIT0gMCkg eworCQlnb3RvIGxhYmVsX3JldHVybjsKKwl9CisKKwlpZiAobm9kZSAhPSBOVUxMICYmIG5vZGUt PmN0bCkgeworCQlyZXQgPSBub2RlLT5jdGwodHNkLCBtaWIsIGRlcHRoLCBvbGRwLCBvbGRsZW5w LCBuZXdwLCBuZXdsZW4pOworCX0gZWxzZSB7CisJCS8qIFRoZSBuYW1lIHJlZmVycyB0byBhIHBh cnRpYWwgcGF0aCB0aHJvdWdoIHRoZSBjdGwgdHJlZS4gKi8KKwkJcmV0ID0gRU5PRU5UOworCX0K KworbGFiZWxfcmV0dXJuOgorCXJldHVybihyZXQpOworfQorCitpbnQKK2N0bF9uYW1ldG9taWIo dHNkX3QgKnRzZCwgY29uc3QgY2hhciAqbmFtZSwgc2l6ZV90ICptaWJwLCBzaXplX3QgKm1pYmxl bnApIHsKKwlpbnQgcmV0OworCisJaWYgKCFjdGxfaW5pdGlhbGl6ZWQgJiYgY3RsX2luaXQodHNk KSkgeworCQlyZXQgPSBFQUdBSU47CisJCWdvdG8gbGFiZWxfcmV0dXJuOworCX0KKworCXJldCA9 IGN0bF9sb29rdXAodHNkX3RzZG4odHNkKSwgc3VwZXJfcm9vdF9ub2RlLCBuYW1lLCBOVUxMLCBt aWJwLAorCSAgICBtaWJsZW5wKTsKK2xhYmVsX3JldHVybjoKKwlyZXR1cm4ocmV0KTsKK30KKwor c3RhdGljIGludAorY3RsX2xvb2t1cGJ5bWliKHRzZG5fdCAqdHNkbiwgY29uc3QgY3RsX25hbWVk X25vZGVfdCAqKmVuZGluZ19ub2RlcCwKKyAgICBjb25zdCBzaXplX3QgKm1pYiwgc2l6ZV90IG1p YmxlbikgeworCWludCByZXQ7CisKKwljb25zdCBjdGxfbmFtZWRfbm9kZV90ICpub2RlID0gc3Vw ZXJfcm9vdF9ub2RlOworCWZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbWlibGVuOyBpKyspIHsKKwkJ YXNzZXJ0KG5vZGUpOworCQlhc3NlcnQobm9kZS0+bmNoaWxkcmVuID4gMCk7CisJCWlmIChjdGxf bmFtZWRfbm9kZShub2RlLT5jaGlsZHJlbikgIT0gTlVMTCkgeworCQkJLyogQ2hpbGRyZW4gYXJl IG5hbWVkLiAqLworCQkJaWYgKG5vZGUtPm5jaGlsZHJlbiA8PSBtaWJbaV0pIHsKKwkJCQlyZXQg PSBFTk9FTlQ7CisJCQkJZ290byBsYWJlbF9yZXR1cm47CisJCQl9CisJCQlub2RlID0gY3RsX25h bWVkX2NoaWxkcmVuKG5vZGUsIG1pYltpXSk7CisJCX0gZWxzZSB7CisJCQljb25zdCBjdGxfaW5k ZXhlZF9ub2RlX3QgKmlub2RlOworCisJCQkvKiBJbmRleGVkIGVsZW1lbnQuICovCisJCQlpbm9k ZSA9IGN0bF9pbmRleGVkX25vZGUobm9kZS0+Y2hpbGRyZW4pOworCQkJbm9kZSA9IGlub2RlLT5p bmRleCh0c2RuLCBtaWIsIG1pYmxlbiwgbWliW2ldKTsKKwkJCWlmIChub2RlID09IE5VTEwpIHsK KwkJCQlyZXQgPSBFTk9FTlQ7CisJCQkJZ290byBsYWJlbF9yZXR1cm47CisJCQl9CisJCX0KKwl9 CisJYXNzZXJ0KGVuZGluZ19ub2RlcCAhPSBOVUxMKTsKKwkqZW5kaW5nX25vZGVwID0gbm9kZTsK KwlyZXQgPSAwOworCitsYWJlbF9yZXR1cm46CisJcmV0dXJuKHJldCk7Cit9CisKK2ludAorY3Rs X2J5bWliKHRzZF90ICp0c2QsIGNvbnN0IHNpemVfdCAqbWliLCBzaXplX3QgbWlibGVuLCB2b2lk ICpvbGRwLAorICAgIHNpemVfdCAqb2xkbGVucCwgdm9pZCAqbmV3cCwgc2l6ZV90IG5ld2xlbikg eworCWludCByZXQ7CisJY29uc3QgY3RsX25hbWVkX25vZGVfdCAqbm9kZTsKKworCWlmICghY3Rs X2luaXRpYWxpemVkICYmIGN0bF9pbml0KHRzZCkpIHsKKwkJcmV0ID0gRUFHQUlOOworCQlnb3Rv IGxhYmVsX3JldHVybjsKKwl9CisKKwlyZXQgPSBjdGxfbG9va3VwYnltaWIodHNkX3RzZG4odHNk KSwgJm5vZGUsIG1pYiwgbWlibGVuKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJZ290byBsYWJlbF9y ZXR1cm47CisJfQorCisJLyogQ2FsbCB0aGUgY3RsIGZ1bmN0aW9uLiAqLworCWlmIChub2RlICYm IG5vZGUtPmN0bCkgeworCQlyZXQgPSBub2RlLT5jdGwodHNkLCBtaWIsIG1pYmxlbiwgb2xkcCwg b2xkbGVucCwgbmV3cCwgbmV3bGVuKTsKKwl9IGVsc2UgeworCQkvKiBQYXJ0aWFsIE1JQi4gKi8K KwkJcmV0ID0gRU5PRU5UOworCX0KKworbGFiZWxfcmV0dXJuOgorCXJldHVybihyZXQpOworfQor CitpbnQKK2N0bF9taWJuYW1ldG9taWIodHNkX3QgKnRzZCwgc2l6ZV90ICptaWIsIHNpemVfdCBt aWJsZW4sIGNvbnN0IGNoYXIgKm5hbWUsCisgICAgc2l6ZV90ICptaWJsZW5wKSB7CisJaW50IHJl dDsKKwljb25zdCBjdGxfbmFtZWRfbm9kZV90ICpub2RlOworCisJaWYgKCFjdGxfaW5pdGlhbGl6 ZWQgJiYgY3RsX2luaXQodHNkKSkgeworCQlyZXQgPSBFQUdBSU47CisJCWdvdG8gbGFiZWxfcmV0 dXJuOworCX0KKworCXJldCA9IGN0bF9sb29rdXBieW1pYih0c2RfdHNkbih0c2QpLCAmbm9kZSwg bWliLCBtaWJsZW4pOworCWlmIChyZXQgIT0gMCkgeworCQlnb3RvIGxhYmVsX3JldHVybjsKKwl9 CisJaWYgKG5vZGUgPT0gTlVMTCB8fCBub2RlLT5jdGwgIT0gTlVMTCkgeworCQlyZXQgPSBFTk9F TlQ7CisJCWdvdG8gbGFiZWxfcmV0dXJuOworCX0KKworCWFzc2VydChtaWJsZW5wICE9IE5VTEwp OworCWFzc2VydCgqbWlibGVucCA+PSBtaWJsZW4pOworCSptaWJsZW5wIC09IG1pYmxlbjsKKwly ZXQgPSBjdGxfbG9va3VwKHRzZF90c2RuKHRzZCksIG5vZGUsIG5hbWUsIE5VTEwsIG1pYiArIG1p YmxlbiwKKwkgICAgbWlibGVucCk7CisJKm1pYmxlbnAgKz0gbWlibGVuOworbGFiZWxfcmV0dXJu OgorCXJldHVybihyZXQpOworfQorCitpbnQKK2N0bF9ieW1pYm5hbWUodHNkX3QgKnRzZCwgc2l6 ZV90ICptaWIsIHNpemVfdCBtaWJsZW4sIGNvbnN0IGNoYXIgKm5hbWUsCisgICAgc2l6ZV90ICpt aWJsZW5wLCB2b2lkICpvbGRwLCBzaXplX3QgKm9sZGxlbnAsIHZvaWQgKm5ld3AsIHNpemVfdCBu ZXdsZW4pIHsKKwlpbnQgcmV0OworCWNvbnN0IGN0bF9uYW1lZF9ub2RlX3QgKm5vZGU7CisKKwlp ZiAoIWN0bF9pbml0aWFsaXplZCAmJiBjdGxfaW5pdCh0c2QpKSB7CisJCXJldCA9IEVBR0FJTjsK KwkJZ290byBsYWJlbF9yZXR1cm47CisJfQorCisJcmV0ID0gY3RsX2xvb2t1cGJ5bWliKHRzZF90 c2RuKHRzZCksICZub2RlLCBtaWIsIG1pYmxlbik7CisJaWYgKHJldCAhPSAwKSB7CisJCWdvdG8g bGFiZWxfcmV0dXJuOworCX0KKwlpZiAobm9kZSA9PSBOVUxMIHx8IG5vZGUtPmN0bCAhPSBOVUxM KSB7CisJCXJldCA9IEVOT0VOVDsKKwkJZ290byBsYWJlbF9yZXR1cm47CisJfQorCisJYXNzZXJ0 KG1pYmxlbnAgIT0gTlVMTCk7CisJYXNzZXJ0KCptaWJsZW5wID49IG1pYmxlbik7CisJKm1pYmxl bnAgLT0gbWlibGVuOworCS8qCisJICogVGhlIHNhbWUgbm9kZSBzdXBwbGllcyB0aGUgc3RhcnRp bmcgbm9kZSBhbmQgc3RvcmVzIHRoZSBlbmRpbmcgbm9kZS4KKwkgKi8KKwlyZXQgPSBjdGxfbG9v a3VwKHRzZF90c2RuKHRzZCksIG5vZGUsIG5hbWUsICZub2RlLCBtaWIgKyBtaWJsZW4sCisJICAg IG1pYmxlbnApOworCSptaWJsZW5wICs9IG1pYmxlbjsKKwlpZiAocmV0ICE9IDApIHsKKwkJZ290 byBsYWJlbF9yZXR1cm47CisJfQorCisJaWYgKG5vZGUgIT0gTlVMTCAmJiBub2RlLT5jdGwpIHsK KwkJcmV0ID0gbm9kZS0+Y3RsKHRzZCwgbWliLCAqbWlibGVucCwgb2xkcCwgb2xkbGVucCwgbmV3 cCwKKwkJICAgIG5ld2xlbik7CisJfSBlbHNlIHsKKwkJLyogVGhlIG5hbWUgcmVmZXJzIHRvIGEg cGFydGlhbCBwYXRoIHRocm91Z2ggdGhlIGN0bCB0cmVlLiAqLworCQlyZXQgPSBFTk9FTlQ7CisJ fQorCitsYWJlbF9yZXR1cm46CisJcmV0dXJuKHJldCk7Cit9CisKK2Jvb2wKK2N0bF9ib290KHZv aWQpIHsKKwlpZiAobWFsbG9jX211dGV4X2luaXQoJmN0bF9tdHgsICJjdGwiLCBXSVRORVNTX1JB TktfQ1RMLAorCSAgICBtYWxsb2NfbXV0ZXhfcmFua19leGNsdXNpdmUpKSB7CisJCXJldHVybiB0 cnVlOworCX0KKworCWN0bF9pbml0aWFsaXplZCA9IGZhbHNlOworCisJcmV0dXJuIGZhbHNlOwor fQorCit2b2lkCitjdGxfcHJlZm9yayh0c2RuX3QgKnRzZG4pIHsKKwltYWxsb2NfbXV0ZXhfcHJl Zm9yayh0c2RuLCAmY3RsX210eCk7Cit9CisKK3ZvaWQKK2N0bF9wb3N0Zm9ya19wYXJlbnQodHNk bl90ICp0c2RuKSB7CisJbWFsbG9jX211dGV4X3Bvc3Rmb3JrX3BhcmVudCh0c2RuLCAmY3RsX210 eCk7Cit9CisKK3ZvaWQKK2N0bF9wb3N0Zm9ya19jaGlsZCh0c2RuX3QgKnRzZG4pIHsKKwltYWxs b2NfbXV0ZXhfcG9zdGZvcmtfY2hpbGQodHNkbiwgJmN0bF9tdHgpOworfQorCit2b2lkCitjdGxf bXR4X2Fzc2VydF9oZWxkKHRzZG5fdCAqdHNkbikgeworCW1hbGxvY19tdXRleF9hc3NlcnRfb3du ZXIodHNkbiwgJmN0bF9tdHgpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogKl9j dGwoKSBmdW5jdGlvbnMuICovCisKKyNkZWZpbmUgUkVBRE9OTFkoKQlkbyB7CQkJCQkJXAorCWlm IChuZXdwICE9IE5VTEwgfHwgbmV3bGVuICE9IDApIHsJCQkJXAorCQlyZXQgPSBFUEVSTTsJCQkJ CQlcCisJCWdvdG8gbGFiZWxfcmV0dXJuOwkJCQkJXAorCX0JCQkJCQkJCVwKK30gd2hpbGUgKDAp CisKKyNkZWZpbmUgV1JJVEVPTkxZKCkJZG8gewkJCQkJCVwKKwlpZiAob2xkcCAhPSBOVUxMIHx8 IG9sZGxlbnAgIT0gTlVMTCkgewkJCQlcCisJCXJldCA9IEVQRVJNOwkJCQkJCVwKKwkJZ290byBs YWJlbF9yZXR1cm47CQkJCQlcCisJfQkJCQkJCQkJXAorfSB3aGlsZSAoMCkKKworLyogQ2FuIHJl YWQgb3Igd3JpdGUsIGJ1dCBub3QgYm90aC4gKi8KKyNkZWZpbmUgUkVBRF9YT1JfV1JJVEUoKQlk byB7CQkJCQlcCisJaWYgKChvbGRwICE9IE5VTEwgJiYgb2xkbGVucCAhPSBOVUxMKSAmJiAobmV3 cCAhPSBOVUxMIHx8CVwKKwkgICAgbmV3bGVuICE9IDApKSB7CQkJCQkJXAorCQlyZXQgPSBFUEVS TTsJCQkJCQlcCisJCWdvdG8gbGFiZWxfcmV0dXJuOwkJCQkJXAorCX0JCQkJCQkJCVwKK30gd2hp bGUgKDApCisKKy8qIENhbiBuZWl0aGVyIHJlYWQgbm9yIHdyaXRlLiAqLworI2RlZmluZSBORUlU SEVSX1JFQURfTk9SX1dSSVRFKCkJZG8gewkJCQlcCisJaWYgKG9sZHAgIT0gTlVMTCB8fCBvbGRs ZW5wICE9IE5VTEwgfHwgbmV3cCAhPSBOVUxMIHx8CQlcCisJICAgIG5ld2xlbiAhPSAwKSB7CQkJ CQkJXAorCQlyZXQgPSBFUEVSTTsJCQkJCQlcCisJCWdvdG8gbGFiZWxfcmV0dXJuOwkJCQkJXAor CX0JCQkJCQkJCVwKK30gd2hpbGUgKDApCisKKy8qIFZlcmlmeSB0aGF0IHRoZSBzcGFjZSBwcm92 aWRlZCBpcyBlbm91Z2guICovCisjZGVmaW5lIFZFUklGWV9SRUFEKHQpCWRvIHsJCQkJCQlcCisJ aWYgKG9sZHAgPT0gTlVMTCB8fCBvbGRsZW5wID09IE5VTEwgfHwgKm9sZGxlbnAgIT0gc2l6ZW9m KHQpKSB7CVwKKwkJKm9sZGxlbnAgPSAwOwkJCQkJCVwKKwkJcmV0ID0gRUlOVkFMOwkJCQkJCVwK KwkJZ290byBsYWJlbF9yZXR1cm47CQkJCQlcCisJfQkJCQkJCQkJXAorfSB3aGlsZSAoMCkKKwor I2RlZmluZSBSRUFEKHYsIHQpCWRvIHsJCQkJCQlcCisJaWYgKG9sZHAgIT0gTlVMTCAmJiBvbGRs ZW5wICE9IE5VTEwpIHsJCQkJXAorCQlpZiAoKm9sZGxlbnAgIT0gc2l6ZW9mKHQpKSB7CQkJCVwK KwkJCXNpemVfdAljb3B5bGVuID0gKHNpemVvZih0KSA8PSAqb2xkbGVucCkJXAorCQkJICAgID8g c2l6ZW9mKHQpIDogKm9sZGxlbnA7CQkJXAorCQkJbWVtY3B5KG9sZHAsICh2b2lkICopJih2KSwg Y29weWxlbik7CQlcCisJCQkqb2xkbGVucCA9IGNvcHlsZW47CQkJCVwKKwkJCXJldCA9IEVJTlZB TDsJCQkJCVwKKwkJCWdvdG8gbGFiZWxfcmV0dXJuOwkJCQlcCisJCX0JCQkJCQkJXAorCQkqKHQg KilvbGRwID0gKHYpOwkJCQkJXAorCX0JCQkJCQkJCVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUg V1JJVEUodiwgdCkJZG8gewkJCQkJCVwKKwlpZiAobmV3cCAhPSBOVUxMKSB7CQkJCQkJXAorCQlp ZiAobmV3bGVuICE9IHNpemVvZih0KSkgewkJCQlcCisJCQlyZXQgPSBFSU5WQUw7CQkJCQlcCisJ CQlnb3RvIGxhYmVsX3JldHVybjsJCQkJXAorCQl9CQkJCQkJCVwKKwkJKHYpID0gKih0ICopbmV3 cDsJCQkJCVwKKwl9CQkJCQkJCQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIEFTU1VSRURfV1JJ VEUodiwgdCkJZG8gewkJCQkJXAorCWlmIChuZXdwID09IE5VTEwgfHwgbmV3bGVuICE9IHNpemVv Zih0KSkgewkJCVwKKwkJcmV0ID0gRUlOVkFMOwkJCQkJCVwKKwkJZ290byBsYWJlbF9yZXR1cm47 CQkJCQlcCisJfQkJCQkJCQkJXAorCSh2KSA9ICoodCAqKW5ld3A7CQkJCQkJXAorfSB3aGlsZSAo MCkKKworI2RlZmluZSBNSUJfVU5TSUdORUQodiwgaSkgZG8gewkJCQkJCVwKKwlpZiAobWliW2ld ID4gVUlOVF9NQVgpIHsJCQkJCVwKKwkJcmV0ID0gRUZBVUxUOwkJCQkJCVwKKwkJZ290byBsYWJl bF9yZXR1cm47CQkJCQlcCisJfQkJCQkJCQkJXAorCXYgPSAodW5zaWduZWQpbWliW2ldOwkJCQkJ CVwKK30gd2hpbGUgKDApCisKKy8qCisgKiBUaGVyZSdzIGEgbG90IG9mIGNvZGUgZHVwbGljYXRp b24gaW4gdGhlIGZvbGxvd2luZyBtYWNyb3MgZHVlIHRvIGxpbWl0YXRpb25zCisgKiBpbiBob3cg bmVzdGVkIGNwcCBtYWNyb3MgYXJlIGV4cGFuZGVkLgorICovCisjZGVmaW5lIENUTF9ST19DTEdF TihjLCBsLCBuLCB2LCB0KQkJCQkJXAorc3RhdGljIGludAkJCQkJCQkJXAorbiMjX2N0bCh0c2Rf dCAqdHNkLCBjb25zdCBzaXplX3QgKm1pYiwgc2l6ZV90IG1pYmxlbiwgdm9pZCAqb2xkcCwJXAor ICAgIHNpemVfdCAqb2xkbGVucCwgdm9pZCAqbmV3cCwgc2l6ZV90IG5ld2xlbikgewkJCVwKKwlp bnQgcmV0OwkJCQkJCQlcCisJdCBvbGR2YWw7CQkJCQkJCVwKKwkJCQkJCQkJCVwKKwlpZiAoIShj KSkgewkJCQkJCQlcCisJCXJldHVybiBFTk9FTlQ7CQkJCQkJXAorCX0JCQkJCQkJCVwKKwlpZiAo bCkgewkJCQkJCQlcCisJCW1hbGxvY19tdXRleF9sb2NrKHRzZF90c2RuKHRzZCksICZjdGxfbXR4 KTsJCVwKKwl9CQkJCQkJCQlcCisJUkVBRE9OTFkoKTsJCQkJCQkJXAorCW9sZHZhbCA9ICh2KTsJ CQkJCQkJXAorCVJFQUQob2xkdmFsLCB0KTsJCQkJCQlcCisJCQkJCQkJCQlcCisJcmV0ID0gMDsJ CQkJCQkJXAorbGFiZWxfcmV0dXJuOgkJCQkJCQkJXAorCWlmIChsKSB7CQkJCQkJCVwKKwkJbWFs bG9jX211dGV4X3VubG9jayh0c2RfdHNkbih0c2QpLCAmY3RsX210eCk7CQlcCisJfQkJCQkJCQkJ XAorCXJldHVybiByZXQ7CQkJCQkJCVwKK30KKworI2RlZmluZSBDVExfUk9fQ0dFTihjLCBuLCB2 LCB0KQkJCQkJCVwKK3N0YXRpYyBpbnQJCQkJCQkJCVwKK24jI19jdGwodHNkX3QgKnRzZCwgY29u c3Qgc2l6ZV90ICptaWIsIHNpemVfdCBtaWJsZW4sCQkJXAorICAgIHZvaWQgKm9sZHAsIHNpemVf dCAqb2xkbGVucCwgdm9pZCAqbmV3cCwgc2l6ZV90IG5ld2xlbikgewkJXAorCWludCByZXQ7CQkJ CQkJCVwKKwl0IG9sZHZhbDsJCQkJCQkJXAorCQkJCQkJCQkJXAorCWlmICghKGMpKSB7CQkJCQkJ CVwKKwkJcmV0dXJuIEVOT0VOVDsJCQkJCQlcCisJfQkJCQkJCQkJXAorCW1hbGxvY19tdXRleF9s b2NrKHRzZF90c2RuKHRzZCksICZjdGxfbXR4KTsJCQlcCisJUkVBRE9OTFkoKTsJCQkJCQkJXAor CW9sZHZhbCA9ICh2KTsJCQkJCQkJXAorCVJFQUQob2xkdmFsLCB0KTsJCQkJCQlcCisJCQkJCQkJ CQlcCisJcmV0ID0gMDsJCQkJCQkJXAorbGFiZWxfcmV0dXJuOgkJCQkJCQkJXAorCW1hbGxvY19t dXRleF91bmxvY2sodHNkX3RzZG4odHNkKSwgJmN0bF9tdHgpOwkJCVwKKwlyZXR1cm4gcmV0OwkJ CQkJCQlcCit9CisKKyNkZWZpbmUgQ1RMX1JPX0dFTihuLCB2LCB0KQkJCQkJCVwKK3N0YXRpYyBp bnQJCQkJCQkJCVwKK24jI19jdGwodHNkX3QgKnRzZCwgY29uc3Qgc2l6ZV90ICptaWIsIHNpemVf dCBtaWJsZW4sIHZvaWQgKm9sZHAsCVwKKyAgICBzaXplX3QgKm9sZGxlbnAsIHZvaWQgKm5ld3As IHNpemVfdCBuZXdsZW4pIHsJCQlcCisJaW50IHJldDsJCQkJCQkJXAorCXQgb2xkdmFsOwkJCQkJ CQlcCisJCQkJCQkJCQlcCisJbWFsbG9jX211dGV4X2xvY2sodHNkX3RzZG4odHNkKSwgJmN0bF9t dHgpOwkJCVwKKwlSRUFET05MWSgpOwkJCQkJCQlcCisJb2xkdmFsID0gKHYpOwkJCQkJCQlcCisJ UkVBRChvbGR2YWwsIHQpOwkJCQkJCVwKKwkJCQkJCQkJCVwKKwlyZXQgPSAwOwkJCQkJCQlcCits YWJlbF9yZXR1cm46CQkJCQkJCQlcCisJbWFsbG9jX211dGV4X3VubG9jayh0c2RfdHNkbih0c2Qp LCAmY3RsX210eCk7CQkJXAorCXJldHVybiByZXQ7CQkJCQkJCVwKK30KKworLyoKKyAqIGN0bF9t dHggaXMgbm90IGFjcXVpcmVkLCB1bmRlciB0aGUgYXNzdW1wdGlvbiB0aGF0IG5vIHBlcnRpbmVu dCBkYXRhIHdpbGwKKyAqIG11dGF0ZSBkdXJpbmcgdGhlIGNhbGwuCisgKi8KKyNkZWZpbmUgQ1RM X1JPX05MX0NHRU4oYywgbiwgdiwgdCkJCQkJCVwKK3N0YXRpYyBpbnQJCQkJCQkJCVwKK24jI19j dGwodHNkX3QgKnRzZCwgY29uc3Qgc2l6ZV90ICptaWIsIHNpemVfdCBtaWJsZW4sCQkJXAorICAg IHZvaWQgKm9sZHAsIHNpemVfdCAqb2xkbGVucCwgdm9pZCAqbmV3cCwgc2l6ZV90IG5ld2xlbikg ewkJXAorCWludCByZXQ7CQkJCQkJCVwKKwl0IG9sZHZhbDsJCQkJCQkJXAorCQkJCQkJCQkJXAor CWlmICghKGMpKSB7CQkJCQkJCVwKKwkJcmV0dXJuIEVOT0VOVDsJCQkJCQlcCisJfQkJCQkJCQkJ XAorCVJFQURPTkxZKCk7CQkJCQkJCVwKKwlvbGR2YWwgPSAodik7CQkJCQkJCVwKKwlSRUFEKG9s ZHZhbCwgdCk7CQkJCQkJXAorCQkJCQkJCQkJXAorCXJldCA9IDA7CQkJCQkJCVwKK2xhYmVsX3Jl dHVybjoJCQkJCQkJCVwKKwlyZXR1cm4gcmV0OwkJCQkJCQlcCit9CisKKyNkZWZpbmUgQ1RMX1JP X05MX0dFTihuLCB2LCB0KQkJCQkJCVwKK3N0YXRpYyBpbnQJCQkJCQkJCVwKK24jI19jdGwodHNk X3QgKnRzZCwgY29uc3Qgc2l6ZV90ICptaWIsIHNpemVfdCBtaWJsZW4sCQkJXAorICAgIHZvaWQg Km9sZHAsIHNpemVfdCAqb2xkbGVucCwgdm9pZCAqbmV3cCwgc2l6ZV90IG5ld2xlbikgewkJXAor CWludCByZXQ7CQkJCQkJCVwKKwl0IG9sZHZhbDsJCQkJCQkJXAorCQkJCQkJCQkJXAorCVJFQURP TkxZKCk7CQkJCQkJCVwKKwlvbGR2YWwgPSAodik7CQkJCQkJCVwKKwlSRUFEKG9sZHZhbCwgdCk7 CQkJCQkJXAorCQkJCQkJCQkJXAorCXJldCA9IDA7CQkJCQkJCVwKK2xhYmVsX3JldHVybjoJCQkJ CQkJCVwKKwlyZXR1cm4gcmV0OwkJCQkJCQlcCit9CisKKyNkZWZpbmUgQ1RMX1JPX0NPTkZJR19H RU4obiwgdCkJCQkJCQlcCitzdGF0aWMgaW50CQkJCQkJCQlcCituIyNfY3RsKHRzZF90ICp0c2Qs IGNvbnN0IHNpemVfdCAqbWliLCBzaXplX3QgbWlibGVuLAkJCVwKKyAgICB2b2lkICpvbGRwLCBz aXplX3QgKm9sZGxlbnAsIHZvaWQgKm5ld3AsIHNpemVfdCBuZXdsZW4pIHsJCVwKKwlpbnQgcmV0 OwkJCQkJCQlcCisJdCBvbGR2YWw7CQkJCQkJCVwKKwkJCQkJCQkJCVwKKwlSRUFET05MWSgpOwkJ CQkJCQlcCisJb2xkdmFsID0gbjsJCQkJCQkJXAorCVJFQUQob2xkdmFsLCB0KTsJCQkJCQlcCisJ CQkJCQkJCQlcCisJcmV0ID0gMDsJCQkJCQkJXAorbGFiZWxfcmV0dXJuOgkJCQkJCQkJXAorCXJl dHVybiByZXQ7CQkJCQkJCVwKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworQ1RMX1JP X05MX0dFTih2ZXJzaW9uLCBKRU1BTExPQ19WRVJTSU9OLCBjb25zdCBjaGFyICopCisKK3N0YXRp YyBpbnQKK2Vwb2NoX2N0bCh0c2RfdCAqdHNkLCBjb25zdCBzaXplX3QgKm1pYiwgc2l6ZV90IG1p YmxlbiwKKyAgICB2b2lkICpvbGRwLCBzaXplX3QgKm9sZGxlbnAsIHZvaWQgKm5ld3AsIHNpemVf dCBuZXdsZW4pIHsKKwlpbnQgcmV0OworCVVOVVNFRCB1aW50NjRfdCBuZXd2YWw7CisKKwltYWxs b2NfbXV0ZXhfbG9jayh0c2RfdHNkbih0c2QpLCAmY3RsX210eCk7CisJV1JJVEUobmV3dmFsLCB1 aW50NjRfdCk7CisJaWYgKG5ld3AgIT0gTlVMTCkgeworCQljdGxfcmVmcmVzaCh0c2RfdHNkbih0 c2QpKTsKKwl9CisJUkVBRChjdGxfYXJlbmFzLT5lcG9jaCwgdWludDY0X3QpOworCisJcmV0ID0g MDsKK2xhYmVsX3JldHVybjoKKwltYWxsb2NfbXV0ZXhfdW5sb2NrKHRzZF90c2RuKHRzZCksICZj dGxfbXR4KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50CitiYWNrZ3JvdW5kX3RocmVh ZF9jdGwodHNkX3QgKnRzZCwgY29uc3Qgc2l6ZV90ICptaWIsCisgICAgc2l6ZV90IG1pYmxlbiwg dm9pZCAqb2xkcCwgc2l6ZV90ICpvbGRsZW5wLAorICAgIHZvaWQgKm5ld3AsIHNpemVfdCBuZXds ZW4pIHsKKwlpbnQgcmV0OworCWJvb2wgb2xkdmFsOworCisJaWYgKCFoYXZlX2JhY2tncm91bmRf dGhyZWFkKSB7CisJCXJldHVybiBFTk9FTlQ7CisJfQorCWJhY2tncm91bmRfdGhyZWFkX2N0bF9p bml0KHRzZF90c2RuKHRzZCkpOworCisJbWFsbG9jX211dGV4X2xvY2sodHNkX3RzZG4odHNkKSwg JmN0bF9tdHgpOworCW1hbGxvY19tdXRleF9sb2NrKHRzZF90c2RuKHRzZCksICZiYWNrZ3JvdW5k X3RocmVhZF9sb2NrKTsKKwlpZiAobmV3cCA9PSBOVUxMKSB7CisJCW9sZHZhbCA9IGJhY2tncm91 bmRfdGhyZWFkX2VuYWJsZWQoKTsKKwkJUkVBRChvbGR2YWwsIGJvb2wpOworCX0gZWxzZSB7CisJ CWlmIChuZXdsZW4gIT0gc2l6ZW9mKGJvb2wpKSB7CisJCQlyZXQgPSBFSU5WQUw7CisJCQlnb3Rv IGxhYmVsX3JldHVybjsKKwkJfQorCQlvbGR2YWwgPSBiYWNrZ3JvdW5kX3RocmVhZF9lbmFibGVk KCk7CisJCVJFQUQob2xkdmFsLCBib29sKTsKKworCQlib29sIG5ld3ZhbCA9ICooYm9vbCAqKW5l d3A7CisJCWlmIChuZXd2YWwgPT0gb2xkdmFsKSB7CisJCQlyZXQgPSAwOworCQkJZ290byBsYWJl bF9yZXR1cm47CisJCX0KKworCQliYWNrZ3JvdW5kX3RocmVhZF9lbmFibGVkX3NldCh0c2RfdHNk bih0c2QpLCBuZXd2YWwpOworCQlpZiAobmV3dmFsKSB7CisJCQlpZiAoYmFja2dyb3VuZF90aHJl YWRzX2VuYWJsZSh0c2QpKSB7CisJCQkJcmV0ID0gRUZBVUxUOworCQkJCWdvdG8gbGFiZWxfcmV0 dXJuOworCQkJfQorCQl9IGVsc2UgeworCQkJaWYgKGJhY2tncm91bmRfdGhyZWFkc19kaXNhYmxl KHRzZCkpIHsKKwkJCQlyZXQgPSBFRkFVTFQ7CisJCQkJZ290byBsYWJlbF9yZXR1cm47CisJCQl9 CisJCX0KKwl9CisJcmV0ID0gMDsKK2xhYmVsX3JldHVybjoKKwltYWxsb2NfbXV0ZXhfdW5sb2Nr KHRzZF90c2RuKHRzZCksICZiYWNrZ3JvdW5kX3RocmVhZF9sb2NrKTsKKwltYWxsb2NfbXV0ZXhf dW5sb2NrKHRzZF90c2RuKHRzZCksICZjdGxfbXR4KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0 YXRpYyBpbnQKK21heF9iYWNrZ3JvdW5kX3RocmVhZHNfY3RsKHRzZF90ICp0c2QsIGNvbnN0IHNp emVfdCAqbWliLAorICAgIHNpemVfdCBtaWJsZW4sIHZvaWQgKm9sZHAsIHNpemVfdCAqb2xkbGVu cCwgdm9pZCAqbmV3cCwKKyAgICBzaXplX3QgbmV3bGVuKSB7CisJaW50IHJldDsKKwlzaXplX3Qg b2xkdmFsOworCisJaWYgKCFoYXZlX2JhY2tncm91bmRfdGhyZWFkKSB7CisJCXJldHVybiBFTk9F TlQ7CisJfQorCWJhY2tncm91bmRfdGhyZWFkX2N0bF9pbml0KHRzZF90c2RuKHRzZCkpOworCisJ bWFsbG9jX211dGV4X2xvY2sodHNkX3RzZG4odHNkKSwgJmN0bF9tdHgpOworCW1hbGxvY19tdXRl eF9sb2NrKHRzZF90c2RuKHRzZCksICZiYWNrZ3JvdW5kX3RocmVhZF9sb2NrKTsKKwlpZiAobmV3 cCA9PSBOVUxMKSB7CisJCW9sZHZhbCA9IG1heF9iYWNrZ3JvdW5kX3RocmVhZHM7CisJCVJFQUQo b2xkdmFsLCBzaXplX3QpOworCX0gZWxzZSB7CisJCWlmIChuZXdsZW4gIT0gc2l6ZW9mKHNpemVf dCkpIHsKKwkJCXJldCA9IEVJTlZBTDsKKwkJCWdvdG8gbGFiZWxfcmV0dXJuOworCQl9CisJCW9s ZHZhbCA9IG1heF9iYWNrZ3JvdW5kX3RocmVhZHM7CisJCVJFQUQob2xkdmFsLCBzaXplX3QpOwor CisJCXNpemVfdCBuZXd2YWwgPSAqKHNpemVfdCAqKW5ld3A7CisJCWlmIChuZXd2YWwgPT0gb2xk dmFsKSB7CisJCQlyZXQgPSAwOworCQkJZ290byBsYWJlbF9yZXR1cm47CisJCX0KKwkJaWYgKG5l d3ZhbCA+IG9wdF9tYXhfYmFja2dyb3VuZF90aHJlYWRzKSB7CisJCQlyZXQgPSBFSU5WQUw7CisJ CQlnb3RvIGxhYmVsX3JldHVybjsKKwkJfQorCisJCWlmIChiYWNrZ3JvdW5kX3RocmVhZF9lbmFi bGVkKCkpIHsKKwkJCWJhY2tncm91bmRfdGhyZWFkX2VuYWJsZWRfc2V0KHRzZF90c2RuKHRzZCks IGZhbHNlKTsKKwkJCWlmIChiYWNrZ3JvdW5kX3RocmVhZHNfZGlzYWJsZSh0c2QpKSB7CisJCQkJ cmV0ID0gRUZBVUxUOworCQkJCWdvdG8gbGFiZWxfcmV0dXJuOworCQkJfQorCQkJbWF4X2JhY2tn cm91bmRfdGhyZWFkcyA9IG5ld3ZhbDsKKwkJCWJhY2tncm91bmRfdGhyZWFkX2VuYWJsZWRfc2V0 KHRzZF90c2RuKHRzZCksIHRydWUpOworCQkJaWYgKGJhY2tncm91bmRfdGhyZWFkc19lbmFibGUo dHNkKSkgeworCQkJCXJldCA9IEVGQVVMVDsKKwkJCQlnb3RvIGxhYmVsX3JldHVybjsKKwkJCX0K KwkJfSBlbHNlIHsKKwkJCW1heF9iYWNrZ3JvdW5kX3RocmVhZHMgPSBuZXd2YWw7CisJCX0KKwl9 CisJcmV0ID0gMDsKK2xhYmVsX3JldHVybjoKKwltYWxsb2NfbXV0ZXhfdW5sb2NrKHRzZF90c2Ru KHRzZCksICZiYWNrZ3JvdW5kX3RocmVhZF9sb2NrKTsKKwltYWxsb2NfbXV0ZXhfdW5sb2NrKHRz ZF90c2RuKHRzZCksICZjdGxfbXR4KTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKiovCisKK0NUTF9ST19DT05GSUdfR0VOKGNvbmZpZ19jYWNoZV9vYmxpdmlvdXMs IGJvb2wpCitDVExfUk9fQ09ORklHX0dFTihjb25maWdfZGVidWcsIGJvb2wpCitDVExfUk9fQ09O RklHX0dFTihjb25maWdfZmlsbCwgYm9vbCkKK0NUTF9ST19DT05GSUdfR0VOKGNvbmZpZ19sYXp5 X2xvY2ssIGJvb2wpCitDVExfUk9fQ09ORklHX0dFTihjb25maWdfbWFsbG9jX2NvbmYsIGNvbnN0 IGNoYXIgKikKK0NUTF9ST19DT05GSUdfR0VOKGNvbmZpZ19vcHRfc2FmZXR5X2NoZWNrcywgYm9v bCkKK0NUTF9ST19DT05GSUdfR0VOKGNvbmZpZ19wcm9mLCBib29sKQorQ1RMX1JPX0NPTkZJR19H RU4oY29uZmlnX3Byb2ZfbGliZ2NjLCBib29sKQorQ1RMX1JPX0NPTkZJR19HRU4oY29uZmlnX3By b2ZfbGlidW53aW5kLCBib29sKQorQ1RMX1JPX0NPTkZJR19HRU4oY29uZmlnX3N0YXRzLCBib29s KQorQ1RMX1JPX0NPTkZJR19HRU4oY29uZmlnX3V0cmFjZSwgYm9vbCkKK0NUTF9ST19DT05GSUdf R0VOKGNvbmZpZ194bWFsbG9jLCBib29sKQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitD VExfUk9fTkxfR0VOKG9wdF9hYm9ydCwgb3B0X2Fib3J0LCBib29sKQorQ1RMX1JPX05MX0dFTihv cHRfYWJvcnRfY29uZiwgb3B0X2Fib3J0X2NvbmYsIGJvb2wpCitDVExfUk9fTkxfR0VOKG9wdF9j YWNoZV9vYmxpdmlvdXMsIG9wdF9jYWNoZV9vYmxpdmlvdXMsIGJvb2wpCitDVExfUk9fTkxfR0VO KG9wdF90cnVzdF9tYWR2aXNlLCBvcHRfdHJ1c3RfbWFkdmlzZSwgYm9vbCkKK0NUTF9ST19OTF9H RU4ob3B0X2NvbmZpcm1fY29uZiwgb3B0X2NvbmZpcm1fY29uZiwgYm9vbCkKKworLyogSFBBIG9w dGlvbnMuICovCitDVExfUk9fTkxfR0VOKG9wdF9ocGEsIG9wdF9ocGEsIGJvb2wpCitDVExfUk9f TkxfR0VOKG9wdF9ocGFfaHVnaWZpY2F0aW9uX3RocmVzaG9sZCwKKyAgICBvcHRfaHBhX29wdHMu aHVnaWZpY2F0aW9uX3RocmVzaG9sZCwgc2l6ZV90KQorQ1RMX1JPX05MX0dFTihvcHRfaHBhX2h1 Z2lmeV9kZWxheV9tcywgb3B0X2hwYV9vcHRzLmh1Z2lmeV9kZWxheV9tcywgdWludDY0X3QpCitD VExfUk9fTkxfR0VOKG9wdF9ocGFfbWluX3B1cmdlX2ludGVydmFsX21zLCBvcHRfaHBhX29wdHMu bWluX3B1cmdlX2ludGVydmFsX21zLAorICAgIHVpbnQ2NF90KQorCisvKgorICogVGhpcyB3aWxs IGhhdmUgdG8gY2hhbmdlIGJlZm9yZSB3ZSBwdWJsaWNseSBkb2N1bWVudCB0aGlzIG9wdGlvbjsg ZnhwX3QgYW5kCisgKiBpdHMgcmVwcmVzZW50YXRpb24gYXJlIGludGVybmFsIGltcGxlbWVudGF0 aW9uIGRldGFpbHMuCisgKi8KK0NUTF9ST19OTF9HRU4ob3B0X2hwYV9kaXJ0eV9tdWx0LCBvcHRf aHBhX29wdHMuZGlydHlfbXVsdCwgZnhwX3QpCitDVExfUk9fTkxfR0VOKG9wdF9ocGFfc2xhYl9t YXhfYWxsb2MsIG9wdF9ocGFfb3B0cy5zbGFiX21heF9hbGxvYywgc2l6ZV90KQorCisvKiBIUEEg U0VDIG9wdGlvbnMgKi8KK0NUTF9ST19OTF9HRU4ob3B0X2hwYV9zZWNfbnNoYXJkcywgb3B0X2hw YV9zZWNfb3B0cy5uc2hhcmRzLCBzaXplX3QpCitDVExfUk9fTkxfR0VOKG9wdF9ocGFfc2VjX21h eF9hbGxvYywgb3B0X2hwYV9zZWNfb3B0cy5tYXhfYWxsb2MsIHNpemVfdCkKK0NUTF9ST19OTF9H RU4ob3B0X2hwYV9zZWNfbWF4X2J5dGVzLCBvcHRfaHBhX3NlY19vcHRzLm1heF9ieXRlcywgc2l6 ZV90KQorQ1RMX1JPX05MX0dFTihvcHRfaHBhX3NlY19ieXRlc19hZnRlcl9mbHVzaCwgb3B0X2hw YV9zZWNfb3B0cy5ieXRlc19hZnRlcl9mbHVzaCwKKyAgICBzaXplX3QpCitDVExfUk9fTkxfR0VO KG9wdF9ocGFfc2VjX2JhdGNoX2ZpbGxfZXh0cmEsIG9wdF9ocGFfc2VjX29wdHMuYmF0Y2hfZmls bF9leHRyYSwKKyAgICBzaXplX3QpCisKK0NUTF9ST19OTF9HRU4ob3B0X21ldGFkYXRhX3RocCwg bWV0YWRhdGFfdGhwX21vZGVfbmFtZXNbb3B0X21ldGFkYXRhX3RocF0sCisgICAgY29uc3QgY2hh ciAqKQorQ1RMX1JPX05MX0dFTihvcHRfcmV0YWluLCBvcHRfcmV0YWluLCBib29sKQorQ1RMX1JP X05MX0dFTihvcHRfZHNzLCBvcHRfZHNzLCBjb25zdCBjaGFyICopCitDVExfUk9fTkxfR0VOKG9w dF9uYXJlbmFzLCBvcHRfbmFyZW5hcywgdW5zaWduZWQpCitDVExfUk9fTkxfR0VOKG9wdF9wZXJj cHVfYXJlbmEsIHBlcmNwdV9hcmVuYV9tb2RlX25hbWVzW29wdF9wZXJjcHVfYXJlbmFdLAorICAg IGNvbnN0IGNoYXIgKikKK0NUTF9ST19OTF9HRU4ob3B0X211dGV4X21heF9zcGluLCBvcHRfbXV0 ZXhfbWF4X3NwaW4sIGludDY0X3QpCitDVExfUk9fTkxfR0VOKG9wdF9vdmVyc2l6ZV90aHJlc2hv bGQsIG9wdF9vdmVyc2l6ZV90aHJlc2hvbGQsIHNpemVfdCkKK0NUTF9ST19OTF9HRU4ob3B0X2Jh Y2tncm91bmRfdGhyZWFkLCBvcHRfYmFja2dyb3VuZF90aHJlYWQsIGJvb2wpCitDVExfUk9fTkxf R0VOKG9wdF9tYXhfYmFja2dyb3VuZF90aHJlYWRzLCBvcHRfbWF4X2JhY2tncm91bmRfdGhyZWFk cywgc2l6ZV90KQorQ1RMX1JPX05MX0dFTihvcHRfZGlydHlfZGVjYXlfbXMsIG9wdF9kaXJ0eV9k ZWNheV9tcywgc3NpemVfdCkKK0NUTF9ST19OTF9HRU4ob3B0X211enp5X2RlY2F5X21zLCBvcHRf bXV6enlfZGVjYXlfbXMsIHNzaXplX3QpCitDVExfUk9fTkxfR0VOKG9wdF9zdGF0c19wcmludCwg b3B0X3N0YXRzX3ByaW50LCBib29sKQorQ1RMX1JPX05MX0dFTihvcHRfc3RhdHNfcHJpbnRfb3B0 cywgb3B0X3N0YXRzX3ByaW50X29wdHMsIGNvbnN0IGNoYXIgKikKK0NUTF9ST19OTF9HRU4ob3B0 X3N0YXRzX2ludGVydmFsLCBvcHRfc3RhdHNfaW50ZXJ2YWwsIGludDY0X3QpCitDVExfUk9fTkxf R0VOKG9wdF9zdGF0c19pbnRlcnZhbF9vcHRzLCBvcHRfc3RhdHNfaW50ZXJ2YWxfb3B0cywgY29u c3QgY2hhciAqKQorQ1RMX1JPX05MX0NHRU4oY29uZmlnX2ZpbGwsIG9wdF9qdW5rLCBvcHRfanVu aywgY29uc3QgY2hhciAqKQorQ1RMX1JPX05MX0NHRU4oY29uZmlnX2ZpbGwsIG9wdF96ZXJvLCBv cHRfemVybywgYm9vbCkKK0NUTF9ST19OTF9DR0VOKGNvbmZpZ191dHJhY2UsIG9wdF91dHJhY2Us IG9wdF91dHJhY2UsIGJvb2wpCitDVExfUk9fTkxfQ0dFTihjb25maWdfeG1hbGxvYywgb3B0X3ht YWxsb2MsIG9wdF94bWFsbG9jLCBib29sKQorQ1RMX1JPX05MX0NHRU4oY29uZmlnX2VuYWJsZV9j eHgsIG9wdF9leHBlcmltZW50YWxfaW5mYWxsaWJsZV9uZXcsCisgICAgb3B0X2V4cGVyaW1lbnRh bF9pbmZhbGxpYmxlX25ldywgYm9vbCkKK0NUTF9ST19OTF9HRU4ob3B0X3RjYWNoZSwgb3B0X3Rj YWNoZSwgYm9vbCkKK0NUTF9ST19OTF9HRU4ob3B0X3RjYWNoZV9tYXgsIG9wdF90Y2FjaGVfbWF4 LCBzaXplX3QpCitDVExfUk9fTkxfR0VOKG9wdF90Y2FjaGVfbnNsb3RzX3NtYWxsX21pbiwgb3B0 X3RjYWNoZV9uc2xvdHNfc21hbGxfbWluLAorICAgIHVuc2lnbmVkKQorQ1RMX1JPX05MX0dFTihv cHRfdGNhY2hlX25zbG90c19zbWFsbF9tYXgsIG9wdF90Y2FjaGVfbnNsb3RzX3NtYWxsX21heCwK KyAgICB1bnNpZ25lZCkKK0NUTF9ST19OTF9HRU4ob3B0X3RjYWNoZV9uc2xvdHNfbGFyZ2UsIG9w dF90Y2FjaGVfbnNsb3RzX2xhcmdlLCB1bnNpZ25lZCkKK0NUTF9ST19OTF9HRU4ob3B0X2xnX3Rj YWNoZV9uc2xvdHNfbXVsLCBvcHRfbGdfdGNhY2hlX25zbG90c19tdWwsIHNzaXplX3QpCitDVExf Uk9fTkxfR0VOKG9wdF90Y2FjaGVfZ2NfaW5jcl9ieXRlcywgb3B0X3RjYWNoZV9nY19pbmNyX2J5 dGVzLCBzaXplX3QpCitDVExfUk9fTkxfR0VOKG9wdF90Y2FjaGVfZ2NfZGVsYXlfYnl0ZXMsIG9w dF90Y2FjaGVfZ2NfZGVsYXlfYnl0ZXMsIHNpemVfdCkKK0NUTF9ST19OTF9HRU4ob3B0X2xnX3Rj YWNoZV9mbHVzaF9zbWFsbF9kaXYsIG9wdF9sZ190Y2FjaGVfZmx1c2hfc21hbGxfZGl2LAorICAg IHVuc2lnbmVkKQorQ1RMX1JPX05MX0dFTihvcHRfbGdfdGNhY2hlX2ZsdXNoX2xhcmdlX2Rpdiwg b3B0X2xnX3RjYWNoZV9mbHVzaF9sYXJnZV9kaXYsCisgICAgdW5zaWduZWQpCitDVExfUk9fTkxf R0VOKG9wdF90aHAsIHRocF9tb2RlX25hbWVzW29wdF90aHBdLCBjb25zdCBjaGFyICopCitDVExf Uk9fTkxfR0VOKG9wdF9sZ19leHRlbnRfbWF4X2FjdGl2ZV9maXQsIG9wdF9sZ19leHRlbnRfbWF4 X2FjdGl2ZV9maXQsCisgICAgc2l6ZV90KQorQ1RMX1JPX05MX0NHRU4oY29uZmlnX3Byb2YsIG9w dF9wcm9mLCBvcHRfcHJvZiwgYm9vbCkKK0NUTF9ST19OTF9DR0VOKGNvbmZpZ19wcm9mLCBvcHRf cHJvZl9wcmVmaXgsIG9wdF9wcm9mX3ByZWZpeCwgY29uc3QgY2hhciAqKQorQ1RMX1JPX05MX0NH RU4oY29uZmlnX3Byb2YsIG9wdF9wcm9mX2FjdGl2ZSwgb3B0X3Byb2ZfYWN0aXZlLCBib29sKQor Q1RMX1JPX05MX0NHRU4oY29uZmlnX3Byb2YsIG9wdF9wcm9mX3RocmVhZF9hY3RpdmVfaW5pdCwK KyAgICBvcHRfcHJvZl90aHJlYWRfYWN0aXZlX2luaXQsIGJvb2wpCitDVExfUk9fTkxfQ0dFTihj b25maWdfcHJvZiwgb3B0X2xnX3Byb2Zfc2FtcGxlLCBvcHRfbGdfcHJvZl9zYW1wbGUsIHNpemVf dCkKK0NUTF9ST19OTF9DR0VOKGNvbmZpZ19wcm9mLCBvcHRfcHJvZl9hY2N1bSwgb3B0X3Byb2Zf YWNjdW0sIGJvb2wpCitDVExfUk9fTkxfQ0dFTihjb25maWdfcHJvZiwgb3B0X2xnX3Byb2ZfaW50 ZXJ2YWwsIG9wdF9sZ19wcm9mX2ludGVydmFsLCBzc2l6ZV90KQorQ1RMX1JPX05MX0NHRU4oY29u ZmlnX3Byb2YsIG9wdF9wcm9mX2dkdW1wLCBvcHRfcHJvZl9nZHVtcCwgYm9vbCkKK0NUTF9ST19O TF9DR0VOKGNvbmZpZ19wcm9mLCBvcHRfcHJvZl9maW5hbCwgb3B0X3Byb2ZfZmluYWwsIGJvb2wp CitDVExfUk9fTkxfQ0dFTihjb25maWdfcHJvZiwgb3B0X3Byb2ZfbGVhaywgb3B0X3Byb2ZfbGVh aywgYm9vbCkKK0NUTF9ST19OTF9DR0VOKGNvbmZpZ19wcm9mLCBvcHRfcHJvZl9sZWFrX2Vycm9y LCBvcHRfcHJvZl9sZWFrX2Vycm9yLCBib29sKQorQ1RMX1JPX05MX0NHRU4oY29uZmlnX3Byb2Ys IG9wdF9wcm9mX3JlY2VudF9hbGxvY19tYXgsCisgICAgb3B0X3Byb2ZfcmVjZW50X2FsbG9jX21h eCwgc3NpemVfdCkKK0NUTF9ST19OTF9DR0VOKGNvbmZpZ19wcm9mLCBvcHRfcHJvZl9zdGF0cywg b3B0X3Byb2Zfc3RhdHMsIGJvb2wpCitDVExfUk9fTkxfQ0dFTihjb25maWdfcHJvZiwgb3B0X3By b2Zfc3lzX3RocmVhZF9uYW1lLCBvcHRfcHJvZl9zeXNfdGhyZWFkX25hbWUsCisgICAgYm9vbCkK K0NUTF9ST19OTF9DR0VOKGNvbmZpZ19wcm9mLCBvcHRfcHJvZl90aW1lX3JlcywKKyAgICBwcm9m X3RpbWVfcmVzX21vZGVfbmFtZXNbb3B0X3Byb2ZfdGltZV9yZXNdLCBjb25zdCBjaGFyICopCitD VExfUk9fTkxfQ0dFTihjb25maWdfdWFmX2RldGVjdGlvbiwgb3B0X2xnX3Nhbl91YWZfYWxpZ24s CisgICAgb3B0X2xnX3Nhbl91YWZfYWxpZ24sIHNzaXplX3QpCitDVExfUk9fTkxfR0VOKG9wdF96 ZXJvX3JlYWxsb2MsCisgICAgemVyb19yZWFsbG9jX21vZGVfbmFtZXNbb3B0X3plcm9fcmVhbGxv Y19hY3Rpb25dLCBjb25zdCBjaGFyICopCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0 YXRpYyBpbnQKK3RocmVhZF9hcmVuYV9jdGwodHNkX3QgKnRzZCwgY29uc3Qgc2l6ZV90ICptaWIs IHNpemVfdCBtaWJsZW4sCisgICAgdm9pZCAqb2xkcCwgc2l6ZV90ICpvbGRsZW5wLCB2b2lkICpu ZXdwLCBzaXplX3QgbmV3bGVuKSB7CisJaW50IHJldDsKKwlhcmVuYV90ICpvbGRhcmVuYTsKKwl1 bnNpZ25lZCBuZXdpbmQsIG9sZGluZDsKKworCW9sZGFyZW5hID0gYXJlbmFfY2hvb3NlKHRzZCwg TlVMTCk7CisJaWYgKG9sZGFyZW5hID09IE5VTEwpIHsKKwkJcmV0dXJuIEVBR0FJTjsKKwl9CisJ bmV3aW5kID0gb2xkaW5kID0gYXJlbmFfaW5kX2dldChvbGRhcmVuYSk7CisJV1JJVEUobmV3aW5k LCB1bnNpZ25lZCk7CisJUkVBRChvbGRpbmQsIHVuc2lnbmVkKTsKKworCWlmIChuZXdpbmQgIT0g b2xkaW5kKSB7CisJCWFyZW5hX3QgKm5ld2FyZW5hOworCisJCWlmIChuZXdpbmQgPj0gbmFyZW5h c190b3RhbF9nZXQoKSkgeworCQkJLyogTmV3IGFyZW5hIGluZGV4IGlzIG91dCBvZiByYW5nZS4g Ki8KKwkJCXJldCA9IEVGQVVMVDsKKwkJCWdvdG8gbGFiZWxfcmV0dXJuOworCQl9CisKKwkJaWYg KGhhdmVfcGVyY3B1X2FyZW5hICYmCisJCSAgICBQRVJDUFVfQVJFTkFfRU5BQkxFRChvcHRfcGVy Y3B1X2FyZW5hKSkgeworCQkJaWYgKG5ld2luZCA8IHBlcmNwdV9hcmVuYV9pbmRfbGltaXQob3B0 X3BlcmNwdV9hcmVuYSkpIHsKKwkJCQkvKgorCQkJCSAqIElmIHBlckNQVSBhcmVuYSBpcyBlbmFi bGVkLCB0aHJlYWRfYXJlbmEKKwkJCQkgKiBjb250cm9sIGlzIG5vdCBhbGxvd2VkIGZvciB0aGUg YXV0byBhcmVuYQorCQkJCSAqIHJhbmdlLgorCQkJCSAqLworCQkJCXJldCA9IEVQRVJNOworCQkJ CWdvdG8gbGFiZWxfcmV0dXJuOworCQkJfQorCQl9CisKKwkJLyogSW5pdGlhbGl6ZSBhcmVuYSBp ZiBuZWNlc3NhcnkuICovCisJCW5ld2FyZW5hID0gYXJlbmFfZ2V0KHRzZF90c2RuKHRzZCksIG5l d2luZCwgdHJ1ZSk7CisJCWlmIChuZXdhcmVuYSA9PSBOVUxMKSB7CisJCQlyZXQgPSBFQUdBSU47 CisJCQlnb3RvIGxhYmVsX3JldHVybjsKKwkJfQorCQkvKiBTZXQgbmV3IGFyZW5hL3RjYWNoZSBh c3NvY2lhdGlvbnMuICovCisJCWFyZW5hX21pZ3JhdGUodHNkLCBvbGRhcmVuYSwgbmV3YXJlbmEp OworCQlpZiAodGNhY2hlX2F2YWlsYWJsZSh0c2QpKSB7CisJCQl0Y2FjaGVfYXJlbmFfcmVhc3Nv Y2lhdGUodHNkX3RzZG4odHNkKSwKKwkJCSAgICB0c2RfdGNhY2hlX3Nsb3dwX2dldCh0c2QpLCB0 c2RfdGNhY2hlcF9nZXQodHNkKSwKKwkJCSAgICBuZXdhcmVuYSk7CisJCX0KKwl9CisKKwlyZXQg PSAwOworbGFiZWxfcmV0dXJuOgorCXJldHVybiByZXQ7Cit9CisKK0NUTF9ST19OTF9HRU4odGhy ZWFkX2FsbG9jYXRlZCwgdHNkX3RocmVhZF9hbGxvY2F0ZWRfZ2V0KHRzZCksIHVpbnQ2NF90KQor Q1RMX1JPX05MX0dFTih0aHJlYWRfYWxsb2NhdGVkcCwgdHNkX3RocmVhZF9hbGxvY2F0ZWRwX2dl dCh0c2QpLCB1aW50NjRfdCAqKQorQ1RMX1JPX05MX0dFTih0aHJlYWRfZGVhbGxvY2F0ZWQsIHRz ZF90aHJlYWRfZGVhbGxvY2F0ZWRfZ2V0KHRzZCksIHVpbnQ2NF90KQorQ1RMX1JPX05MX0dFTih0 aHJlYWRfZGVhbGxvY2F0ZWRwLCB0c2RfdGhyZWFkX2RlYWxsb2NhdGVkcF9nZXQodHNkKSwgdWlu dDY0X3QgKikKKworc3RhdGljIGludAordGhyZWFkX3RjYWNoZV9lbmFibGVkX2N0bCh0c2RfdCAq dHNkLCBjb25zdCBzaXplX3QgKm1pYiwKKyAgICBzaXplX3QgbWlibGVuLCB2b2lkICpvbGRwLCBz aXplX3QgKm9sZGxlbnAsIHZvaWQgKm5ld3AsCisgICAgc2l6ZV90IG5ld2xlbikgeworCWludCBy ZXQ7CisJYm9vbCBvbGR2YWw7CisKKwlvbGR2YWwgPSB0Y2FjaGVfZW5hYmxlZF9nZXQodHNkKTsK KwlpZiAobmV3cCAhPSBOVUxMKSB7CisJCWlmIChuZXdsZW4gIT0gc2l6ZW9mKGJvb2wpKSB7CisJ CQlyZXQgPSBFSU5WQUw7CisJCQlnb3RvIGxhYmVsX3JldHVybjsKKwkJfQorCQl0Y2FjaGVfZW5h YmxlZF9zZXQodHNkLCAqKGJvb2wgKiluZXdwKTsKKwl9CisJUkVBRChvbGR2YWwsIGJvb2wpOwor CisJcmV0ID0gMDsKK2xhYmVsX3JldHVybjoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50 Cit0aHJlYWRfdGNhY2hlX2ZsdXNoX2N0bCh0c2RfdCAqdHNkLCBjb25zdCBzaXplX3QgKm1pYiwK KyAgICBzaXplX3QgbWlibGVuLCB2b2lkICpvbGRwLCBzaXplX3QgKm9sZGxlbnAsIHZvaWQgKm5l d3AsCisgICAgc2l6ZV90IG5ld2xlbikgeworCWludCByZXQ7CisKKwlpZiAoIXRjYWNoZV9hdmFp bGFibGUodHNkKSkgeworCQlyZXQgPSBFRkFVTFQ7CisJCWdvdG8gbGFiZWxfcmV0dXJuOworCX0K KworCU5FSVRIRVJfUkVBRF9OT1JfV1JJVEUoKTsKKworCXRjYWNoZV9mbHVzaCh0c2QpOworCisJ cmV0ID0gMDsKK2xhYmVsX3JldHVybjoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50Cit0 aHJlYWRfcGVha19yZWFkX2N0bCh0c2RfdCAqdHNkLCBjb25zdCBzaXplX3QgKm1pYiwKKyAgICBz aXplX3QgbWlibGVuLCB2b2lkICpvbGRwLCBzaXplX3QgKm9sZGxlbnAsIHZvaWQgKm5ld3AsCisg ICAgc2l6ZV90IG5ld2xlbikgeworCWludCByZXQ7CisJaWYgKCFjb25maWdfc3RhdHMpIHsKKwkJ cmV0dXJuIEVOT0VOVDsKKwl9CisJUkVBRE9OTFkoKTsKKwlwZWFrX2V2ZW50X3VwZGF0ZSh0c2Qp OworCXVpbnQ2NF90IHJlc3VsdCA9IHBlYWtfZXZlbnRfbWF4KHRzZCk7CisJUkVBRChyZXN1bHQs IHVpbnQ2NF90KTsKKwlyZXQgPSAwOworbGFiZWxfcmV0dXJuOgorCXJldHVybiByZXQ7Cit9CisK K3N0YXRpYyBpbnQKK3RocmVhZF9wZWFrX3Jlc2V0X2N0bCh0c2RfdCAqdHNkLCBjb25zdCBzaXpl X3QgKm1pYiwKKyAgICBzaXplX3QgbWlibGVuLCB2b2lkICpvbGRwLCBzaXplX3QgKm9sZGxlbnAs IHZvaWQgKm5ld3AsCisgICAgc2l6ZV90IG5ld2xlbikgeworCWludCByZXQ7CisJaWYgKCFjb25m aWdfc3RhdHMpIHsKKwkJcmV0dXJuIEVOT0VOVDsKKwl9CisJTkVJVEhFUl9SRUFEX05PUl9XUklU RSgpOworCXBlYWtfZXZlbnRfemVybyh0c2QpOworCXJldCA9IDA7CitsYWJlbF9yZXR1cm46CisJ cmV0dXJuIHJldDsKK30KKworc3RhdGljIGludAordGhyZWFkX3Byb2ZfbmFtZV9jdGwodHNkX3Qg KnRzZCwgY29uc3Qgc2l6ZV90ICptaWIsCisgICAgc2l6ZV90IG1pYmxlbiwgdm9pZCAqb2xkcCwg c2l6ZV90ICpvbGRsZW5wLCB2b2lkICpuZXdwLAorICAgIHNpemVfdCBuZXdsZW4pIHsKKwlpbnQg cmV0OworCisJaWYgKCFjb25maWdfcHJvZiB8fCAhb3B0X3Byb2YpIHsKKwkJcmV0dXJuIEVOT0VO VDsKKwl9CisKKwlSRUFEX1hPUl9XUklURSgpOworCisJaWYgKG5ld3AgIT0gTlVMTCkgeworCQlp ZiAobmV3bGVuICE9IHNpemVvZihjb25zdCBjaGFyICopKSB7CisJCQlyZXQgPSBFSU5WQUw7CisJ CQlnb3RvIGxhYmVsX3JldHVybjsKKwkJfQorCisJCWlmICgocmV0ID0gcHJvZl90aHJlYWRfbmFt ZV9zZXQodHNkLCAqKGNvbnN0IGNoYXIgKiopbmV3cCkpICE9CisJCSAgICAwKSB7CisJCQlnb3Rv IGxhYmVsX3JldHVybjsKKwkJfQorCX0gZWxzZSB7CisJCWNvbnN0IGNoYXIgKm9sZG5hbWUgPSBw cm9mX3RocmVhZF9uYW1lX2dldCh0c2QpOworCQlSRUFEKG9sZG5hbWUsIGNvbnN0IGNoYXIgKik7 CisJfQorCisJcmV0ID0gMDsKK2xhYmVsX3JldHVybjoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0 aWMgaW50Cit0aHJlYWRfcHJvZl9hY3RpdmVfY3RsKHRzZF90ICp0c2QsIGNvbnN0IHNpemVfdCAq bWliLAorICAgIHNpemVfdCBtaWJsZW4sIHZvaWQgKm9sZHAsIHNpemVfdCAqb2xkbGVucCwgdm9p ZCAqbmV3cCwKKyAgICBzaXplX3QgbmV3bGVuKSB7CisJaW50IHJldDsKKwlib29sIG9sZHZhbDsK KworCWlmICghY29uZmlnX3Byb2YpIHsKKwkJcmV0dXJuIEVOT0VOVDsKKwl9CisKKwlvbGR2YWwg PSBvcHRfcHJvZiA/IHByb2ZfdGhyZWFkX2FjdGl2ZV9nZXQodHNkKSA6IGZhbHNlOworCWlmIChu ZXdwICE9IE5VTEwpIHsKKwkJaWYgKCFvcHRfcHJvZikgeworCQkJcmV0ID0gRU5PRU5UOworCQkJ Z290byBsYWJlbF9yZXR1cm47CisJCX0KKwkJaWYgKG5ld2xlbiAhPSBzaXplb2YoYm9vbCkpIHsK KwkJCXJldCA9IEVJTlZBTDsKKwkJCWdvdG8gbGFiZWxfcmV0dXJuOworCQl9CisJCWlmIChwcm9m X3RocmVhZF9hY3RpdmVfc2V0KHRzZCwgKihib29sICopbmV3cCkpIHsKKwkJCXJldCA9IEVBR0FJ TjsKKwkJCWdvdG8gbGFiZWxfcmV0dXJuOworCQl9CisJfQorCVJFQUQob2xkdmFsLCBib29sKTsK KworCXJldCA9IDA7CitsYWJlbF9yZXR1cm46CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlu dAordGhyZWFkX2lkbGVfY3RsKHRzZF90ICp0c2QsIGNvbnN0IHNpemVfdCAqbWliLAorICAgIHNp emVfdCBtaWJsZW4sIHZvaWQgKm9sZHAsIHNpemVfdCAqb2xkbGVucCwgdm9pZCAqbmV3cCwKKyAg ICBzaXplX3QgbmV3bGVuKSB7CisJaW50IHJldDsKKworCU5FSVRIRVJfUkVBRF9OT1JfV1JJVEUo KTsKKworCWlmICh0Y2FjaGVfYXZhaWxhYmxlKHRzZCkpIHsKKwkJdGNhY2hlX2ZsdXNoKHRzZCk7 CisJfQorCS8qCisJICogVGhpcyBoZXVyaXN0aWMgaXMgcGVyaGFwcyBub3QgdGhlIG1vc3Qgd2Vs bC1jb25zaWRlcmVkLiAgQnV0IGl0CisJICogbWF0Y2hlcyB0aGUgb25seSBpZGxpbmcgcG9saWN5 IHdlIGhhdmUgZXhwZXJpZW5jZSB3aXRoIGluIHRoZSBzdGF0dXMKKwkgKiBxdW8uICBPdmVyIHRp bWUgd2Ugc2hvdWxkIGludmVzdGlnYXRlIG1vcmUgcHJpbmNpcGxlZCBhcHByb2FjaGVzLgorCSAq LworCWlmIChvcHRfbmFyZW5hcyA+IG5jcHVzICogMikgeworCQlhcmVuYV90ICphcmVuYSA9IGFy ZW5hX2Nob29zZSh0c2QsIE5VTEwpOworCQlpZiAoYXJlbmEgIT0gTlVMTCkgeworCQkJYXJlbmFf ZGVjYXkodHNkX3RzZG4odHNkKSwgYXJlbmEsIGZhbHNlLCB0cnVlKTsKKwkJfQorCQkvKgorCQkg KiBUaGUgbWlzc2luZyBhcmVuYSBjYXNlIGlzIG5vdCBhY3R1YWxseSBhbiBlcnJvcjsgYSB0aHJl YWQKKwkJICogbWlnaHQgYmUgaWRsZSBiZWZvcmUgaXQgYXNzb2NpYXRlcyBpdHNlbGYgdG8gb25l LiAgVGhpcyBpcworCQkgKiB1bnVzdWFsLCBidXQgbm90IHdyb25nLgorCQkgKi8KKwl9CisKKwly ZXQgPSAwOworbGFiZWxfcmV0dXJuOgorCXJldHVybiByZXQ7Cit9CisKKy8qKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKiovCisKK3N0YXRpYyBpbnQKK3RjYWNoZV9jcmVhdGVfY3RsKHRzZF90ICp0c2QsIGNv bnN0IHNpemVfdCAqbWliLCBzaXplX3QgbWlibGVuLAorICAgIHZvaWQgKm9sZHAsIHNpemVfdCAq b2xkbGVucCwgdm9pZCAqbmV3cCwgc2l6ZV90IG5ld2xlbikgeworCWludCByZXQ7CisJdW5zaWdu ZWQgdGNhY2hlX2luZDsKKworCVJFQURPTkxZKCk7CisJVkVSSUZZX1JFQUQodW5zaWduZWQpOwor CWlmICh0Y2FjaGVzX2NyZWF0ZSh0c2QsIGIwZ2V0KCksICZ0Y2FjaGVfaW5kKSkgeworCQlyZXQg PSBFRkFVTFQ7CisJCWdvdG8gbGFiZWxfcmV0dXJuOworCX0KKwlSRUFEKHRjYWNoZV9pbmQsIHVu c2lnbmVkKTsKKworCXJldCA9IDA7CitsYWJlbF9yZXR1cm46CisJcmV0dXJuIHJldDsKK30KKwor c3RhdGljIGludAordGNhY2hlX2ZsdXNoX2N0bCh0c2RfdCAqdHNkLCBjb25zdCBzaXplX3QgKm1p Yiwgc2l6ZV90IG1pYmxlbiwKKyAgICB2b2lkICpvbGRwLCBzaXplX3QgKm9sZGxlbnAsIHZvaWQg Km5ld3AsIHNpemVfdCBuZXdsZW4pIHsKKwlpbnQgcmV0OworCXVuc2lnbmVkIHRjYWNoZV9pbmQ7 CisKKwlXUklURU9OTFkoKTsKKwlBU1NVUkVEX1dSSVRFKHRjYWNoZV9pbmQsIHVuc2lnbmVkKTsK Kwl0Y2FjaGVzX2ZsdXNoKHRzZCwgdGNhY2hlX2luZCk7CisKKwlyZXQgPSAwOworbGFiZWxfcmV0 dXJuOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQKK3RjYWNoZV9kZXN0cm95X2N0bCh0 c2RfdCAqdHNkLCBjb25zdCBzaXplX3QgKm1pYiwgc2l6ZV90IG1pYmxlbiwKKyAgICB2b2lkICpv bGRwLCBzaXplX3QgKm9sZGxlbnAsIHZvaWQgKm5ld3AsIHNpemVfdCBuZXdsZW4pIHsKKwlpbnQg cmV0OworCXVuc2lnbmVkIHRjYWNoZV9pbmQ7CisKKwlXUklURU9OTFkoKTsKKwlBU1NVUkVEX1dS SVRFKHRjYWNoZV9pbmQsIHVuc2lnbmVkKTsKKwl0Y2FjaGVzX2Rlc3Ryb3kodHNkLCB0Y2FjaGVf aW5kKTsKKworCXJldCA9IDA7CitsYWJlbF9yZXR1cm46CisJcmV0dXJuIHJldDsKK30KKworLyoq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGludAorYXJlbmFfaV9pbml0aWFsaXplZF9j dGwodHNkX3QgKnRzZCwgY29uc3Qgc2l6ZV90ICptaWIsIHNpemVfdCBtaWJsZW4sCisgICAgdm9p ZCAqb2xkcCwgc2l6ZV90ICpvbGRsZW5wLCB2b2lkICpuZXdwLCBzaXplX3QgbmV3bGVuKSB7CisJ aW50IHJldDsKKwl0c2RuX3QgKnRzZG4gPSB0c2RfdHNkbih0c2QpOworCXVuc2lnbmVkIGFyZW5h X2luZDsKKwlib29sIGluaXRpYWxpemVkOworCisJUkVBRE9OTFkoKTsKKwlNSUJfVU5TSUdORUQo YXJlbmFfaW5kLCAxKTsKKworCW1hbGxvY19tdXRleF9sb2NrKHRzZG4sICZjdGxfbXR4KTsKKwlp bml0aWFsaXplZCA9IGFyZW5hc19pKGFyZW5hX2luZCktPmluaXRpYWxpemVkOworCW1hbGxvY19t dXRleF91bmxvY2sodHNkbiwgJmN0bF9tdHgpOworCisJUkVBRChpbml0aWFsaXplZCwgYm9vbCk7 CisKKwlyZXQgPSAwOworbGFiZWxfcmV0dXJuOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2 b2lkCithcmVuYV9pX2RlY2F5KHRzZG5fdCAqdHNkbiwgdW5zaWduZWQgYXJlbmFfaW5kLCBib29s IGFsbCkgeworCW1hbGxvY19tdXRleF9sb2NrKHRzZG4sICZjdGxfbXR4KTsKKwl7CisJCXVuc2ln bmVkIG5hcmVuYXMgPSBjdGxfYXJlbmFzLT5uYXJlbmFzOworCisJCS8qCisJCSAqIEFjY2VzcyB2 aWEgaW5kZXggbmFyZW5hcyBpcyBkZXByZWNhdGVkLCBhbmQgc2NoZWR1bGVkIGZvcgorCQkgKiBy ZW1vdmFsIGluIDYuMC4wLgorCQkgKi8KKwkJaWYgKGFyZW5hX2luZCA9PSBNQUxMQ1RMX0FSRU5B U19BTEwgfHwgYXJlbmFfaW5kID09IG5hcmVuYXMpIHsKKwkJCXVuc2lnbmVkIGk7CisJCQlWQVJJ QUJMRV9BUlJBWShhcmVuYV90ICosIHRhcmVuYXMsIG5hcmVuYXMpOworCisJCQlmb3IgKGkgPSAw OyBpIDwgbmFyZW5hczsgaSsrKSB7CisJCQkJdGFyZW5hc1tpXSA9IGFyZW5hX2dldCh0c2RuLCBp LCBmYWxzZSk7CisJCQl9CisKKwkJCS8qCisJCQkgKiBObyBmdXJ0aGVyIG5lZWQgdG8gaG9sZCBj dGxfbXR4LCBzaW5jZSBuYXJlbmFzIGFuZAorCQkJICogdGFyZW5hcyBjb250YWluIGV2ZXJ5dGhp bmcgbmVlZGVkIGJlbG93LgorCQkJICovCisJCQltYWxsb2NfbXV0ZXhfdW5sb2NrKHRzZG4sICZj dGxfbXR4KTsKKworCQkJZm9yIChpID0gMDsgaSA8IG5hcmVuYXM7IGkrKykgeworCQkJCWlmICh0 YXJlbmFzW2ldICE9IE5VTEwpIHsKKwkJCQkJYXJlbmFfZGVjYXkodHNkbiwgdGFyZW5hc1tpXSwg ZmFsc2UsCisJCQkJCSAgICBhbGwpOworCQkJCX0KKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWFyZW5h X3QgKnRhcmVuYTsKKworCQkJYXNzZXJ0KGFyZW5hX2luZCA8IG5hcmVuYXMpOworCisJCQl0YXJl bmEgPSBhcmVuYV9nZXQodHNkbiwgYXJlbmFfaW5kLCBmYWxzZSk7CisKKwkJCS8qIE5vIGZ1cnRo ZXIgbmVlZCB0byBob2xkIGN0bF9tdHguICovCisJCQltYWxsb2NfbXV0ZXhfdW5sb2NrKHRzZG4s ICZjdGxfbXR4KTsKKworCQkJaWYgKHRhcmVuYSAhPSBOVUxMKSB7CisJCQkJYXJlbmFfZGVjYXko dHNkbiwgdGFyZW5hLCBmYWxzZSwgYWxsKTsKKwkJCX0KKwkJfQorCX0KK30KKworc3RhdGljIGlu dAorYXJlbmFfaV9kZWNheV9jdGwodHNkX3QgKnRzZCwgY29uc3Qgc2l6ZV90ICptaWIsIHNpemVf dCBtaWJsZW4sIHZvaWQgKm9sZHAsCisgICAgc2l6ZV90ICpvbGRsZW5wLCB2b2lkICpuZXdwLCBz aXplX3QgbmV3bGVuKSB7CisJaW50IHJldDsKKwl1bnNpZ25lZCBhcmVuYV9pbmQ7CisKKwlORUlU SEVSX1JFQURfTk9SX1dSSVRFKCk7CisJTUlCX1VOU0lHTkVEKGFyZW5hX2luZCwgMSk7CisJYXJl bmFfaV9kZWNheSh0c2RfdHNkbih0c2QpLCBhcmVuYV9pbmQsIGZhbHNlKTsKKworCXJldCA9IDA7 CitsYWJlbF9yZXR1cm46CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludAorYXJlbmFfaV9w dXJnZV9jdGwodHNkX3QgKnRzZCwgY29uc3Qgc2l6ZV90ICptaWIsIHNpemVfdCBtaWJsZW4sIHZv aWQgKm9sZHAsCisgICAgc2l6ZV90ICpvbGRsZW5wLCB2b2lkICpuZXdwLCBzaXplX3QgbmV3bGVu KSB7CisJaW50IHJldDsKKwl1bnNpZ25lZCBhcmVuYV9pbmQ7CisKKwlORUlUSEVSX1JFQURfTk9S X1dSSVRFKCk7CisJTUlCX1VOU0lHTkVEKGFyZW5hX2luZCwgMSk7CisJYXJlbmFfaV9kZWNheSh0 c2RfdHNkbih0c2QpLCBhcmVuYV9pbmQsIHRydWUpOworCisJcmV0ID0gMDsKK2xhYmVsX3JldHVy bjoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50CithcmVuYV9pX3Jlc2V0X2Rlc3Ryb3lf aGVscGVyKHRzZF90ICp0c2QsIGNvbnN0IHNpemVfdCAqbWliLCBzaXplX3QgbWlibGVuLAorICAg IHZvaWQgKm9sZHAsIHNpemVfdCAqb2xkbGVucCwgdm9pZCAqbmV3cCwgc2l6ZV90IG5ld2xlbiwg dW5zaWduZWQgKmFyZW5hX2luZCwKKyAgICBhcmVuYV90ICoqYXJlbmEpIHsKKwlpbnQgcmV0Owor CisJTkVJVEhFUl9SRUFEX05PUl9XUklURSgpOworCU1JQl9VTlNJR05FRCgqYXJlbmFfaW5kLCAx KTsKKworCSphcmVuYSA9IGFyZW5hX2dldCh0c2RfdHNkbih0c2QpLCAqYXJlbmFfaW5kLCBmYWxz ZSk7CisJaWYgKCphcmVuYSA9PSBOVUxMIHx8IGFyZW5hX2lzX2F1dG8oKmFyZW5hKSkgeworCQly ZXQgPSBFRkFVTFQ7CisJCWdvdG8gbGFiZWxfcmV0dXJuOworCX0KKworCXJldCA9IDA7CitsYWJl bF9yZXR1cm46CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQKK2FyZW5hX3Jlc2V0X3By ZXBhcmVfYmFja2dyb3VuZF90aHJlYWQodHNkX3QgKnRzZCwgdW5zaWduZWQgYXJlbmFfaW5kKSB7 CisJLyogVGVtcG9yYXJpbHkgZGlzYWJsZSB0aGUgYmFja2dyb3VuZCB0aHJlYWQgZHVyaW5nIGFy ZW5hIHJlc2V0LiAqLworCWlmIChoYXZlX2JhY2tncm91bmRfdGhyZWFkKSB7CisJCW1hbGxvY19t dXRleF9sb2NrKHRzZF90c2RuKHRzZCksICZiYWNrZ3JvdW5kX3RocmVhZF9sb2NrKTsKKwkJaWYg KGJhY2tncm91bmRfdGhyZWFkX2VuYWJsZWQoKSkgeworCQkJYmFja2dyb3VuZF90aHJlYWRfaW5m b190ICppbmZvID0KKwkJCSAgICBiYWNrZ3JvdW5kX3RocmVhZF9pbmZvX2dldChhcmVuYV9pbmQp OworCQkJYXNzZXJ0KGluZm8tPnN0YXRlID09IGJhY2tncm91bmRfdGhyZWFkX3N0YXJ0ZWQpOwor CQkJbWFsbG9jX211dGV4X2xvY2sodHNkX3RzZG4odHNkKSwgJmluZm8tPm10eCk7CisJCQlpbmZv LT5zdGF0ZSA9IGJhY2tncm91bmRfdGhyZWFkX3BhdXNlZDsKKwkJCW1hbGxvY19tdXRleF91bmxv Y2sodHNkX3RzZG4odHNkKSwgJmluZm8tPm10eCk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lk CithcmVuYV9yZXNldF9maW5pc2hfYmFja2dyb3VuZF90aHJlYWQodHNkX3QgKnRzZCwgdW5zaWdu ZWQgYXJlbmFfaW5kKSB7CisJaWYgKGhhdmVfYmFja2dyb3VuZF90aHJlYWQpIHsKKwkJaWYgKGJh Y2tncm91bmRfdGhyZWFkX2VuYWJsZWQoKSkgeworCQkJYmFja2dyb3VuZF90aHJlYWRfaW5mb190 ICppbmZvID0KKwkJCSAgICBiYWNrZ3JvdW5kX3RocmVhZF9pbmZvX2dldChhcmVuYV9pbmQpOwor CQkJYXNzZXJ0KGluZm8tPnN0YXRlID09IGJhY2tncm91bmRfdGhyZWFkX3BhdXNlZCk7CisJCQlt YWxsb2NfbXV0ZXhfbG9jayh0c2RfdHNkbih0c2QpLCAmaW5mby0+bXR4KTsKKwkJCWluZm8tPnN0 YXRlID0gYmFja2dyb3VuZF90aHJlYWRfc3RhcnRlZDsKKwkJCW1hbGxvY19tdXRleF91bmxvY2so dHNkX3RzZG4odHNkKSwgJmluZm8tPm10eCk7CisJCX0KKwkJbWFsbG9jX211dGV4X3VubG9jayh0 c2RfdHNkbih0c2QpLCAmYmFja2dyb3VuZF90aHJlYWRfbG9jayk7CisJfQorfQorCitzdGF0aWMg aW50CithcmVuYV9pX3Jlc2V0X2N0bCh0c2RfdCAqdHNkLCBjb25zdCBzaXplX3QgKm1pYiwgc2l6 ZV90IG1pYmxlbiwgdm9pZCAqb2xkcCwKKyAgICBzaXplX3QgKm9sZGxlbnAsIHZvaWQgKm5ld3As IHNpemVfdCBuZXdsZW4pIHsKKwlpbnQgcmV0OworCXVuc2lnbmVkIGFyZW5hX2luZDsKKwlhcmVu YV90ICphcmVuYTsKKworCXJldCA9IGFyZW5hX2lfcmVzZXRfZGVzdHJveV9oZWxwZXIodHNkLCBt aWIsIG1pYmxlbiwgb2xkcCwgb2xkbGVucCwKKwkgICAgbmV3cCwgbmV3bGVuLCAmYXJlbmFfaW5k LCAmYXJlbmEpOworCWlmIChyZXQgIT0gMCkgeworCQlyZXR1cm4gcmV0OworCX0KKworCWFyZW5h X3Jlc2V0X3ByZXBhcmVfYmFja2dyb3VuZF90aHJlYWQodHNkLCBhcmVuYV9pbmQpOworCWFyZW5h X3Jlc2V0KHRzZCwgYXJlbmEpOworCWFyZW5hX3Jlc2V0X2ZpbmlzaF9iYWNrZ3JvdW5kX3RocmVh ZCh0c2QsIGFyZW5hX2luZCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50CithcmVu YV9pX2Rlc3Ryb3lfY3RsKHRzZF90ICp0c2QsIGNvbnN0IHNpemVfdCAqbWliLCBzaXplX3QgbWli bGVuLCB2b2lkICpvbGRwLAorICAgIHNpemVfdCAqb2xkbGVucCwgdm9pZCAqbmV3cCwgc2l6ZV90 IG5ld2xlbikgeworCWludCByZXQ7CisJdW5zaWduZWQgYXJlbmFfaW5kOworCWFyZW5hX3QgKmFy ZW5hOworCWN0bF9hcmVuYV90ICpjdGxfZGFyZW5hLCAqY3RsX2FyZW5hOworCisJbWFsbG9jX211 dGV4X2xvY2sodHNkX3RzZG4odHNkKSwgJmN0bF9tdHgpOworCisJcmV0ID0gYXJlbmFfaV9yZXNl dF9kZXN0cm95X2hlbHBlcih0c2QsIG1pYiwgbWlibGVuLCBvbGRwLCBvbGRsZW5wLAorCSAgICBu ZXdwLCBuZXdsZW4sICZhcmVuYV9pbmQsICZhcmVuYSk7CisJaWYgKHJldCAhPSAwKSB7CisJCWdv dG8gbGFiZWxfcmV0dXJuOworCX0KKworCWlmIChhcmVuYV9udGhyZWFkc19nZXQoYXJlbmEsIGZh bHNlKSAhPSAwIHx8IGFyZW5hX250aHJlYWRzX2dldChhcmVuYSwKKwkgICAgdHJ1ZSkgIT0gMCkg eworCQlyZXQgPSBFRkFVTFQ7CisJCWdvdG8gbGFiZWxfcmV0dXJuOworCX0KKworCWFyZW5hX3Jl c2V0X3ByZXBhcmVfYmFja2dyb3VuZF90aHJlYWQodHNkLCBhcmVuYV9pbmQpOworCS8qIE1lcmdl IHN0YXRzIGFmdGVyIHJlc2V0dGluZyBhbmQgcHVyZ2luZyBhcmVuYS4gKi8KKwlhcmVuYV9yZXNl dCh0c2QsIGFyZW5hKTsKKwlhcmVuYV9kZWNheSh0c2RfdHNkbih0c2QpLCBhcmVuYSwgZmFsc2Us IHRydWUpOworCWN0bF9kYXJlbmEgPSBhcmVuYXNfaShNQUxMQ1RMX0FSRU5BU19ERVNUUk9ZRUQp OworCWN0bF9kYXJlbmEtPmluaXRpYWxpemVkID0gdHJ1ZTsKKwljdGxfYXJlbmFfcmVmcmVzaCh0 c2RfdHNkbih0c2QpLCBhcmVuYSwgY3RsX2RhcmVuYSwgYXJlbmFfaW5kLCB0cnVlKTsKKwkvKiBE ZXN0cm95IGFyZW5hLiAqLworCWFyZW5hX2Rlc3Ryb3kodHNkLCBhcmVuYSk7CisJY3RsX2FyZW5h ID0gYXJlbmFzX2koYXJlbmFfaW5kKTsKKwljdGxfYXJlbmEtPmluaXRpYWxpemVkID0gZmFsc2U7 CisJLyogUmVjb3JkIGFyZW5hIGluZGV4IGZvciBsYXRlciByZWN5Y2xpbmcgdmlhIGFyZW5hcy5j cmVhdGUuICovCisJcWxfZWxtX25ldyhjdGxfYXJlbmEsIGRlc3Ryb3llZF9saW5rKTsKKwlxbF90 YWlsX2luc2VydCgmY3RsX2FyZW5hcy0+ZGVzdHJveWVkLCBjdGxfYXJlbmEsIGRlc3Ryb3llZF9s aW5rKTsKKwlhcmVuYV9yZXNldF9maW5pc2hfYmFja2dyb3VuZF90aHJlYWQodHNkLCBhcmVuYV9p bmQpOworCisJYXNzZXJ0KHJldCA9PSAwKTsKK2xhYmVsX3JldHVybjoKKwltYWxsb2NfbXV0ZXhf dW5sb2NrKHRzZF90c2RuKHRzZCksICZjdGxfbXR4KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0 YXRpYyBpbnQKK2FyZW5hX2lfZHNzX2N0bCh0c2RfdCAqdHNkLCBjb25zdCBzaXplX3QgKm1pYiwg c2l6ZV90IG1pYmxlbiwgdm9pZCAqb2xkcCwKKyAgICBzaXplX3QgKm9sZGxlbnAsIHZvaWQgKm5l d3AsIHNpemVfdCBuZXdsZW4pIHsKKwlpbnQgcmV0OworCWNvbnN0IGNoYXIgKmRzcyA9IE5VTEw7 CisJdW5zaWduZWQgYXJlbmFfaW5kOworCWRzc19wcmVjX3QgZHNzX3ByZWNfb2xkID0gZHNzX3By ZWNfbGltaXQ7CisJZHNzX3ByZWNfdCBkc3NfcHJlYyA9IGRzc19wcmVjX2xpbWl0OworCisJbWFs bG9jX211dGV4X2xvY2sodHNkX3RzZG4odHNkKSwgJmN0bF9tdHgpOworCVdSSVRFKGRzcywgY29u c3QgY2hhciAqKTsKKwlNSUJfVU5TSUdORUQoYXJlbmFfaW5kLCAxKTsKKwlpZiAoZHNzICE9IE5V TEwpIHsKKwkJaW50IGk7CisJCWJvb2wgbWF0Y2ggPSBmYWxzZTsKKworCQlmb3IgKGkgPSAwOyBp IDwgZHNzX3ByZWNfbGltaXQ7IGkrKykgeworCQkJaWYgKHN0cmNtcChkc3NfcHJlY19uYW1lc1tp XSwgZHNzKSA9PSAwKSB7CisJCQkJZHNzX3ByZWMgPSBpOworCQkJCW1hdGNoID0gdHJ1ZTsKKwkJ CQlicmVhazsKKwkJCX0KKwkJfQorCisJCWlmICghbWF0Y2gpIHsKKwkJCXJldCA9IEVJTlZBTDsK KwkJCWdvdG8gbGFiZWxfcmV0dXJuOworCQl9CisJfQorCisJLyoKKwkgKiBBY2Nlc3MgdmlhIGlu ZGV4IG5hcmVuYXMgaXMgZGVwcmVjYXRlZCwgYW5kIHNjaGVkdWxlZCBmb3IgcmVtb3ZhbCBpbgor CSAqIDYuMC4wLgorCSAqLworCWlmIChhcmVuYV9pbmQgPT0gTUFMTENUTF9BUkVOQVNfQUxMIHx8 IGFyZW5hX2luZCA9PQorCSAgICBjdGxfYXJlbmFzLT5uYXJlbmFzKSB7CisJCWlmIChkc3NfcHJl YyAhPSBkc3NfcHJlY19saW1pdCAmJgorCQkgICAgZXh0ZW50X2Rzc19wcmVjX3NldChkc3NfcHJl YykpIHsKKwkJCXJldCA9IEVGQVVMVDsKKwkJCWdvdG8gbGFiZWxfcmV0dXJuOworCQl9CisJCWRz c19wcmVjX29sZCA9IGV4dGVudF9kc3NfcHJlY19nZXQoKTsKKwl9IGVsc2UgeworCQlhcmVuYV90 ICphcmVuYSA9IGFyZW5hX2dldCh0c2RfdHNkbih0c2QpLCBhcmVuYV9pbmQsIGZhbHNlKTsKKwkJ aWYgKGFyZW5hID09IE5VTEwgfHwgKGRzc19wcmVjICE9IGRzc19wcmVjX2xpbWl0ICYmCisJCSAg ICBhcmVuYV9kc3NfcHJlY19zZXQoYXJlbmEsIGRzc19wcmVjKSkpIHsKKwkJCXJldCA9IEVGQVVM VDsKKwkJCWdvdG8gbGFiZWxfcmV0dXJuOworCQl9CisJCWRzc19wcmVjX29sZCA9IGFyZW5hX2Rz c19wcmVjX2dldChhcmVuYSk7CisJfQorCisJZHNzID0gZHNzX3ByZWNfbmFtZXNbZHNzX3ByZWNf b2xkXTsKKwlSRUFEKGRzcywgY29uc3QgY2hhciAqKTsKKworCXJldCA9IDA7CitsYWJlbF9yZXR1 cm46CisJbWFsbG9jX211dGV4X3VubG9jayh0c2RfdHNkbih0c2QpLCAmY3RsX210eCk7CisJcmV0 dXJuIHJldDsKK30KKworc3RhdGljIGludAorYXJlbmFfaV9vdmVyc2l6ZV90aHJlc2hvbGRfY3Rs KHRzZF90ICp0c2QsIGNvbnN0IHNpemVfdCAqbWliLCBzaXplX3QgbWlibGVuLAorICAgIHZvaWQg Km9sZHAsIHNpemVfdCAqb2xkbGVucCwgdm9pZCAqbmV3cCwgc2l6ZV90IG5ld2xlbikgeworCWlu dCByZXQ7CisKKwl1bnNpZ25lZCBhcmVuYV9pbmQ7CisJTUlCX1VOU0lHTkVEKGFyZW5hX2luZCwg MSk7CisKKwlhcmVuYV90ICphcmVuYSA9IGFyZW5hX2dldCh0c2RfdHNkbih0c2QpLCBhcmVuYV9p bmQsIGZhbHNlKTsKKwlpZiAoYXJlbmEgPT0gTlVMTCkgeworCQlyZXQgPSBFRkFVTFQ7CisJCWdv dG8gbGFiZWxfcmV0dXJuOworCX0KKworCWlmIChvbGRwICE9IE5VTEwgJiYgb2xkbGVucCAhPSBO VUxMKSB7CisJCXNpemVfdCBvbGR2YWwgPSBhdG9taWNfbG9hZF96dSgKKwkJICAgICZhcmVuYS0+ cGFfc2hhcmQucGFjLm92ZXJzaXplX3RocmVzaG9sZCwgQVRPTUlDX1JFTEFYRUQpOworCQlSRUFE KG9sZHZhbCwgc2l6ZV90KTsKKwl9CisJaWYgKG5ld3AgIT0gTlVMTCkgeworCQlpZiAobmV3bGVu ICE9IHNpemVvZihzaXplX3QpKSB7CisJCQlyZXQgPSBFSU5WQUw7CisJCQlnb3RvIGxhYmVsX3Jl dHVybjsKKwkJfQorCQlhdG9taWNfc3RvcmVfenUoJmFyZW5hLT5wYV9zaGFyZC5wYWMub3ZlcnNp emVfdGhyZXNob2xkLAorCQkgICAgKihzaXplX3QgKiluZXdwLCBBVE9NSUNfUkVMQVhFRCk7CisJ fQorCXJldCA9IDA7CitsYWJlbF9yZXR1cm46CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlu dAorYXJlbmFfaV9kZWNheV9tc19jdGxfaW1wbCh0c2RfdCAqdHNkLCBjb25zdCBzaXplX3QgKm1p Yiwgc2l6ZV90IG1pYmxlbiwKKyAgICB2b2lkICpvbGRwLCBzaXplX3QgKm9sZGxlbnAsIHZvaWQg Km5ld3AsIHNpemVfdCBuZXdsZW4sIGJvb2wgZGlydHkpIHsKKwlpbnQgcmV0OworCXVuc2lnbmVk IGFyZW5hX2luZDsKKwlhcmVuYV90ICphcmVuYTsKKworCU1JQl9VTlNJR05FRChhcmVuYV9pbmQs IDEpOworCWFyZW5hID0gYXJlbmFfZ2V0KHRzZF90c2RuKHRzZCksIGFyZW5hX2luZCwgZmFsc2Up OworCWlmIChhcmVuYSA9PSBOVUxMKSB7CisJCXJldCA9IEVGQVVMVDsKKwkJZ290byBsYWJlbF9y ZXR1cm47CisJfQorCWV4dGVudF9zdGF0ZV90IHN0YXRlID0gZGlydHkgPyBleHRlbnRfc3RhdGVf ZGlydHkgOiBleHRlbnRfc3RhdGVfbXV6enk7CisKKwlpZiAob2xkcCAhPSBOVUxMICYmIG9sZGxl bnAgIT0gTlVMTCkgeworCQlzaXplX3Qgb2xkdmFsID0gYXJlbmFfZGVjYXlfbXNfZ2V0KGFyZW5h LCBzdGF0ZSk7CisJCVJFQUQob2xkdmFsLCBzc2l6ZV90KTsKKwl9CisJaWYgKG5ld3AgIT0gTlVM TCkgeworCQlpZiAobmV3bGVuICE9IHNpemVvZihzc2l6ZV90KSkgeworCQkJcmV0ID0gRUlOVkFM OworCQkJZ290byBsYWJlbF9yZXR1cm47CisJCX0KKwkJaWYgKGFyZW5hX2lzX2h1Z2UoYXJlbmFf aW5kKSAmJiAqKHNzaXplX3QgKiluZXdwID4gMCkgeworCQkJLyoKKwkJCSAqIEJ5IGRlZmF1bHQg dGhlIGh1Z2UgYXJlbmEgcHVyZ2VzIGVhZ2VybHkuICBJZiBpdCBpcworCQkJICogc2V0IHRvIG5v bi16ZXJvIGRlY2F5IHRpbWUgYWZ0ZXJ3YXJkcywgYmFja2dyb3VuZAorCQkJICogdGhyZWFkIG1p Z2h0IGJlIG5lZWRlZC4KKwkJCSAqLworCQkJaWYgKGJhY2tncm91bmRfdGhyZWFkX2NyZWF0ZSh0 c2QsIGFyZW5hX2luZCkpIHsKKwkJCQlyZXQgPSBFRkFVTFQ7CisJCQkJZ290byBsYWJlbF9yZXR1 cm47CisJCQl9CisJCX0KKworCQlpZiAoYXJlbmFfZGVjYXlfbXNfc2V0KHRzZF90c2RuKHRzZCks IGFyZW5hLCBzdGF0ZSwKKwkJICAgICooc3NpemVfdCAqKW5ld3ApKSB7CisJCQlyZXQgPSBFRkFV TFQ7CisJCQlnb3RvIGxhYmVsX3JldHVybjsKKwkJfQorCX0KKworCXJldCA9IDA7CitsYWJlbF9y ZXR1cm46CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludAorYXJlbmFfaV9kaXJ0eV9kZWNh eV9tc19jdGwodHNkX3QgKnRzZCwgY29uc3Qgc2l6ZV90ICptaWIsIHNpemVfdCBtaWJsZW4sCisg ICAgdm9pZCAqb2xkcCwgc2l6ZV90ICpvbGRsZW5wLCB2b2lkICpuZXdwLCBzaXplX3QgbmV3bGVu KSB7CisJcmV0dXJuIGFyZW5hX2lfZGVjYXlfbXNfY3RsX2ltcGwodHNkLCBtaWIsIG1pYmxlbiwg b2xkcCwgb2xkbGVucCwgbmV3cCwKKwkgICAgbmV3bGVuLCB0cnVlKTsKK30KKworc3RhdGljIGlu dAorYXJlbmFfaV9tdXp6eV9kZWNheV9tc19jdGwodHNkX3QgKnRzZCwgY29uc3Qgc2l6ZV90ICpt aWIsIHNpemVfdCBtaWJsZW4sCisgICAgdm9pZCAqb2xkcCwgc2l6ZV90ICpvbGRsZW5wLCB2b2lk ICpuZXdwLCBzaXplX3QgbmV3bGVuKSB7CisJcmV0dXJuIGFyZW5hX2lfZGVjYXlfbXNfY3RsX2lt cGwodHNkLCBtaWIsIG1pYmxlbiwgb2xkcCwgb2xkbGVucCwgbmV3cCwKKwkgICAgbmV3bGVuLCBm YWxzZSk7Cit9CisKK3N0YXRpYyBpbnQKK2FyZW5hX2lfZXh0ZW50X2hvb2tzX2N0bCh0c2RfdCAq dHNkLCBjb25zdCBzaXplX3QgKm1pYiwgc2l6ZV90IG1pYmxlbiwKKyAgICB2b2lkICpvbGRwLCBz aXplX3QgKm9sZGxlbnAsIHZvaWQgKm5ld3AsIHNpemVfdCBuZXdsZW4pIHsKKwlpbnQgcmV0Owor CXVuc2lnbmVkIGFyZW5hX2luZDsKKwlhcmVuYV90ICphcmVuYTsKKworCW1hbGxvY19tdXRleF9s b2NrKHRzZF90c2RuKHRzZCksICZjdGxfbXR4KTsKKwlNSUJfVU5TSUdORUQoYXJlbmFfaW5kLCAx KTsKKwlpZiAoYXJlbmFfaW5kIDwgbmFyZW5hc190b3RhbF9nZXQoKSkgeworCQlleHRlbnRfaG9v a3NfdCAqb2xkX2V4dGVudF9ob29rczsKKwkJYXJlbmEgPSBhcmVuYV9nZXQodHNkX3RzZG4odHNk KSwgYXJlbmFfaW5kLCBmYWxzZSk7CisJCWlmIChhcmVuYSA9PSBOVUxMKSB7CisJCQlpZiAoYXJl bmFfaW5kID49IG5hcmVuYXNfYXV0bykgeworCQkJCXJldCA9IEVGQVVMVDsKKwkJCQlnb3RvIGxh YmVsX3JldHVybjsKKwkJCX0KKwkJCW9sZF9leHRlbnRfaG9va3MgPQorCQkJICAgIChleHRlbnRf aG9va3NfdCAqKSZlaG9va3NfZGVmYXVsdF9leHRlbnRfaG9va3M7CisJCQlSRUFEKG9sZF9leHRl bnRfaG9va3MsIGV4dGVudF9ob29rc190ICopOworCQkJaWYgKG5ld3AgIT0gTlVMTCkgeworCQkJ CS8qIEluaXRpYWxpemUgYSBuZXcgYXJlbmEgYXMgYSBzaWRlIGVmZmVjdC4gKi8KKwkJCQlleHRl bnRfaG9va3NfdCAqbmV3X2V4dGVudF9ob29rcworCQkJCSAgICBKRU1BTExPQ19DQ19TSUxFTkNF X0lOSVQoTlVMTCk7CisJCQkJV1JJVEUobmV3X2V4dGVudF9ob29rcywgZXh0ZW50X2hvb2tzX3Qg Kik7CisJCQkJYXJlbmFfY29uZmlnX3QgY29uZmlnID0gYXJlbmFfY29uZmlnX2RlZmF1bHQ7CisJ CQkJY29uZmlnLmV4dGVudF9ob29rcyA9IG5ld19leHRlbnRfaG9va3M7CisKKwkJCQlhcmVuYSA9 IGFyZW5hX2luaXQodHNkX3RzZG4odHNkKSwgYXJlbmFfaW5kLAorCQkJCSAgICAmY29uZmlnKTsK KwkJCQlpZiAoYXJlbmEgPT0gTlVMTCkgeworCQkJCQlyZXQgPSBFRkFVTFQ7CisJCQkJCWdvdG8g bGFiZWxfcmV0dXJuOworCQkJCX0KKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlmIChuZXdwICE9IE5V TEwpIHsKKwkJCQlleHRlbnRfaG9va3NfdCAqbmV3X2V4dGVudF9ob29rcworCQkJCSAgICBKRU1B TExPQ19DQ19TSUxFTkNFX0lOSVQoTlVMTCk7CisJCQkJV1JJVEUobmV3X2V4dGVudF9ob29rcywg ZXh0ZW50X2hvb2tzX3QgKik7CisJCQkJb2xkX2V4dGVudF9ob29rcyA9IGFyZW5hX3NldF9leHRl bnRfaG9va3ModHNkLAorCQkJCSAgICBhcmVuYSwgbmV3X2V4dGVudF9ob29rcyk7CisJCQkJUkVB RChvbGRfZXh0ZW50X2hvb2tzLCBleHRlbnRfaG9va3NfdCAqKTsKKwkJCX0gZWxzZSB7CisJCQkJ b2xkX2V4dGVudF9ob29rcyA9CisJCQkJICAgIGVob29rc19nZXRfZXh0ZW50X2hvb2tzX3B0cigK KwkJCQkJYXJlbmFfZ2V0X2Vob29rcyhhcmVuYSkpOworCQkJCVJFQUQob2xkX2V4dGVudF9ob29r cywgZXh0ZW50X2hvb2tzX3QgKik7CisJCQl9CisJCX0KKwl9IGVsc2UgeworCQlyZXQgPSBFRkFV TFQ7CisJCWdvdG8gbGFiZWxfcmV0dXJuOworCX0KKwlyZXQgPSAwOworbGFiZWxfcmV0dXJuOgor CW1hbGxvY19tdXRleF91bmxvY2sodHNkX3RzZG4odHNkKSwgJmN0bF9tdHgpOworCXJldHVybiBy ZXQ7Cit9CisKK3N0YXRpYyBpbnQKK2FyZW5hX2lfcmV0YWluX2dyb3dfbGltaXRfY3RsKHRzZF90 ICp0c2QsIGNvbnN0IHNpemVfdCAqbWliLAorICAgIHNpemVfdCBtaWJsZW4sIHZvaWQgKm9sZHAs IHNpemVfdCAqb2xkbGVucCwgdm9pZCAqbmV3cCwKKyAgICBzaXplX3QgbmV3bGVuKSB7CisJaW50 IHJldDsKKwl1bnNpZ25lZCBhcmVuYV9pbmQ7CisJYXJlbmFfdCAqYXJlbmE7CisKKwlpZiAoIW9w dF9yZXRhaW4pIHsKKwkJLyogT25seSByZWxldmFudCB3aGVuIHJldGFpbiBpcyBlbmFibGVkLiAq LworCQlyZXR1cm4gRU5PRU5UOworCX0KKworCW1hbGxvY19tdXRleF9sb2NrKHRzZF90c2RuKHRz ZCksICZjdGxfbXR4KTsKKwlNSUJfVU5TSUdORUQoYXJlbmFfaW5kLCAxKTsKKwlpZiAoYXJlbmFf aW5kIDwgbmFyZW5hc190b3RhbF9nZXQoKSAmJiAoYXJlbmEgPQorCSAgICBhcmVuYV9nZXQodHNk X3RzZG4odHNkKSwgYXJlbmFfaW5kLCBmYWxzZSkpICE9IE5VTEwpIHsKKwkJc2l6ZV90IG9sZF9s aW1pdCwgbmV3X2xpbWl0OworCQlpZiAobmV3cCAhPSBOVUxMKSB7CisJCQlXUklURShuZXdfbGlt aXQsIHNpemVfdCk7CisJCX0KKwkJYm9vbCBlcnIgPSBhcmVuYV9yZXRhaW5fZ3Jvd19saW1pdF9n ZXRfc2V0KHRzZCwgYXJlbmEsCisJCSAgICAmb2xkX2xpbWl0LCBuZXdwICE9IE5VTEwgPyAmbmV3 X2xpbWl0IDogTlVMTCk7CisJCWlmICghZXJyKSB7CisJCQlSRUFEKG9sZF9saW1pdCwgc2l6ZV90 KTsKKwkJCXJldCA9IDA7CisJCX0gZWxzZSB7CisJCQlyZXQgPSBFRkFVTFQ7CisJCX0KKwl9IGVs c2UgeworCQlyZXQgPSBFRkFVTFQ7CisJfQorbGFiZWxfcmV0dXJuOgorCW1hbGxvY19tdXRleF91 bmxvY2sodHNkX3RzZG4odHNkKSwgJmN0bF9tdHgpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRp YyBjb25zdCBjdGxfbmFtZWRfbm9kZV90ICoKK2FyZW5hX2lfaW5kZXgodHNkbl90ICp0c2RuLCBj b25zdCBzaXplX3QgKm1pYiwgc2l6ZV90IG1pYmxlbiwKKyAgICBzaXplX3QgaSkgeworCWNvbnN0 IGN0bF9uYW1lZF9ub2RlX3QgKnJldDsKKworCW1hbGxvY19tdXRleF9sb2NrKHRzZG4sICZjdGxf bXR4KTsKKwlzd2l0Y2ggKGkpIHsKKwljYXNlIE1BTExDVExfQVJFTkFTX0FMTDoKKwljYXNlIE1B TExDVExfQVJFTkFTX0RFU1RST1lFRDoKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJaWYgKGkgPiBj dGxfYXJlbmFzLT5uYXJlbmFzKSB7CisJCQlyZXQgPSBOVUxMOworCQkJZ290byBsYWJlbF9yZXR1 cm47CisJCX0KKwkJYnJlYWs7CisJfQorCisJcmV0ID0gc3VwZXJfYXJlbmFfaV9ub2RlOworbGFi ZWxfcmV0dXJuOgorCW1hbGxvY19tdXRleF91bmxvY2sodHNkbiwgJmN0bF9tdHgpOworCXJldHVy biByZXQ7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbnQKK2FyZW5h c19uYXJlbmFzX2N0bCh0c2RfdCAqdHNkLCBjb25zdCBzaXplX3QgKm1pYiwgc2l6ZV90IG1pYmxl biwKKyAgICB2b2lkICpvbGRwLCBzaXplX3QgKm9sZGxlbnAsIHZvaWQgKm5ld3AsIHNpemVfdCBu ZXdsZW4pIHsKKwlpbnQgcmV0OworCXVuc2lnbmVkIG5hcmVuYXM7CisKKwltYWxsb2NfbXV0ZXhf bG9jayh0c2RfdHNkbih0c2QpLCAmY3RsX210eCk7CisJUkVBRE9OTFkoKTsKKwluYXJlbmFzID0g Y3RsX2FyZW5hcy0+bmFyZW5hczsKKwlSRUFEKG5hcmVuYXMsIHVuc2lnbmVkKTsKKworCXJldCA9 IDA7CitsYWJlbF9yZXR1cm46CisJbWFsbG9jX211dGV4X3VubG9jayh0c2RfdHNkbih0c2QpLCAm Y3RsX210eCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludAorYXJlbmFzX2RlY2F5X21z X2N0bF9pbXBsKHRzZF90ICp0c2QsIGNvbnN0IHNpemVfdCAqbWliLAorICAgIHNpemVfdCBtaWJs ZW4sIHZvaWQgKm9sZHAsIHNpemVfdCAqb2xkbGVucCwgdm9pZCAqbmV3cCwKKyAgICBzaXplX3Qg bmV3bGVuLCBib29sIGRpcnR5KSB7CisJaW50IHJldDsKKworCWlmIChvbGRwICE9IE5VTEwgJiYg b2xkbGVucCAhPSBOVUxMKSB7CisJCXNpemVfdCBvbGR2YWwgPSAoZGlydHkgPyBhcmVuYV9kaXJ0 eV9kZWNheV9tc19kZWZhdWx0X2dldCgpIDoKKwkJICAgIGFyZW5hX211enp5X2RlY2F5X21zX2Rl ZmF1bHRfZ2V0KCkpOworCQlSRUFEKG9sZHZhbCwgc3NpemVfdCk7CisJfQorCWlmIChuZXdwICE9 IE5VTEwpIHsKKwkJaWYgKG5ld2xlbiAhPSBzaXplb2Yoc3NpemVfdCkpIHsKKwkJCXJldCA9IEVJ TlZBTDsKKwkJCWdvdG8gbGFiZWxfcmV0dXJuOworCQl9CisJCWlmIChkaXJ0eSA/IGFyZW5hX2Rp cnR5X2RlY2F5X21zX2RlZmF1bHRfc2V0KCooc3NpemVfdCAqKW5ld3ApCisJCSAgICA6IGFyZW5h X211enp5X2RlY2F5X21zX2RlZmF1bHRfc2V0KCooc3NpemVfdCAqKW5ld3ApKSB7CisJCQlyZXQg PSBFRkFVTFQ7CisJCQlnb3RvIGxhYmVsX3JldHVybjsKKwkJfQorCX0KKworCXJldCA9IDA7Cits YWJlbF9yZXR1cm46CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludAorYXJlbmFzX2RpcnR5 X2RlY2F5X21zX2N0bCh0c2RfdCAqdHNkLCBjb25zdCBzaXplX3QgKm1pYiwgc2l6ZV90IG1pYmxl biwKKyAgICB2b2lkICpvbGRwLCBzaXplX3QgKm9sZGxlbnAsIHZvaWQgKm5ld3AsIHNpemVfdCBu ZXdsZW4pIHsKKwlyZXR1cm4gYXJlbmFzX2RlY2F5X21zX2N0bF9pbXBsKHRzZCwgbWliLCBtaWJs ZW4sIG9sZHAsIG9sZGxlbnAsIG5ld3AsCisJICAgIG5ld2xlbiwgdHJ1ZSk7Cit9CisKK3N0YXRp YyBpbnQKK2FyZW5hc19tdXp6eV9kZWNheV9tc19jdGwodHNkX3QgKnRzZCwgY29uc3Qgc2l6ZV90 ICptaWIsIHNpemVfdCBtaWJsZW4sCisgICAgdm9pZCAqb2xkcCwgc2l6ZV90ICpvbGRsZW5wLCB2 b2lkICpuZXdwLCBzaXplX3QgbmV3bGVuKSB7CisJcmV0dXJuIGFyZW5hc19kZWNheV9tc19jdGxf aW1wbCh0c2QsIG1pYiwgbWlibGVuLCBvbGRwLCBvbGRsZW5wLCBuZXdwLAorCSAgICBuZXdsZW4s IGZhbHNlKTsKK30KKworQ1RMX1JPX05MX0dFTihhcmVuYXNfcXVhbnR1bSwgUVVBTlRVTSwgc2l6 ZV90KQorQ1RMX1JPX05MX0dFTihhcmVuYXNfcGFnZSwgUEFHRSwgc2l6ZV90KQorQ1RMX1JPX05M X0dFTihhcmVuYXNfdGNhY2hlX21heCwgdGNhY2hlX21heGNsYXNzLCBzaXplX3QpCitDVExfUk9f TkxfR0VOKGFyZW5hc19uYmlucywgU0NfTkJJTlMsIHVuc2lnbmVkKQorQ1RMX1JPX05MX0dFTihh cmVuYXNfbmhiaW5zLCBuaGJpbnMsIHVuc2lnbmVkKQorQ1RMX1JPX05MX0dFTihhcmVuYXNfYmlu X2lfc2l6ZSwgYmluX2luZm9zW21pYlsyXV0ucmVnX3NpemUsIHNpemVfdCkKK0NUTF9ST19OTF9H RU4oYXJlbmFzX2Jpbl9pX25yZWdzLCBiaW5faW5mb3NbbWliWzJdXS5ucmVncywgdWludDMyX3Qp CitDVExfUk9fTkxfR0VOKGFyZW5hc19iaW5faV9zbGFiX3NpemUsIGJpbl9pbmZvc1ttaWJbMl1d LnNsYWJfc2l6ZSwgc2l6ZV90KQorQ1RMX1JPX05MX0dFTihhcmVuYXNfYmluX2lfbnNoYXJkcywg YmluX2luZm9zW21pYlsyXV0ubl9zaGFyZHMsIHVpbnQzMl90KQorc3RhdGljIGNvbnN0IGN0bF9u YW1lZF9ub2RlX3QgKgorYXJlbmFzX2Jpbl9pX2luZGV4KHRzZG5fdCAqdHNkbiwgY29uc3Qgc2l6 ZV90ICptaWIsCisgICAgc2l6ZV90IG1pYmxlbiwgc2l6ZV90IGkpIHsKKwlpZiAoaSA+IFNDX05C SU5TKSB7CisJCXJldHVybiBOVUxMOworCX0KKwlyZXR1cm4gc3VwZXJfYXJlbmFzX2Jpbl9pX25v ZGU7Cit9CisKK0NUTF9ST19OTF9HRU4oYXJlbmFzX25sZXh0ZW50cywgU0NfTlNJWkVTIC0gU0Nf TkJJTlMsIHVuc2lnbmVkKQorQ1RMX1JPX05MX0dFTihhcmVuYXNfbGV4dGVudF9pX3NpemUsIHN6 X2luZGV4MnNpemUoU0NfTkJJTlMrKHN6aW5kX3QpbWliWzJdKSwKKyAgICBzaXplX3QpCitzdGF0 aWMgY29uc3QgY3RsX25hbWVkX25vZGVfdCAqCithcmVuYXNfbGV4dGVudF9pX2luZGV4KHRzZG5f dCAqdHNkbiwgY29uc3Qgc2l6ZV90ICptaWIsCisgICAgc2l6ZV90IG1pYmxlbiwgc2l6ZV90IGkp IHsKKwlpZiAoaSA+IFNDX05TSVpFUyAtIFNDX05CSU5TKSB7CisJCXJldHVybiBOVUxMOworCX0K KwlyZXR1cm4gc3VwZXJfYXJlbmFzX2xleHRlbnRfaV9ub2RlOworfQorCitzdGF0aWMgaW50Cith cmVuYXNfY3JlYXRlX2N0bCh0c2RfdCAqdHNkLCBjb25zdCBzaXplX3QgKm1pYiwgc2l6ZV90IG1p YmxlbiwKKyAgICB2b2lkICpvbGRwLCBzaXplX3QgKm9sZGxlbnAsIHZvaWQgKm5ld3AsIHNpemVf dCBuZXdsZW4pIHsKKwlpbnQgcmV0OworCXVuc2lnbmVkIGFyZW5hX2luZDsKKworCW1hbGxvY19t dXRleF9sb2NrKHRzZF90c2RuKHRzZCksICZjdGxfbXR4KTsKKworCVZFUklGWV9SRUFEKHVuc2ln bmVkKTsKKwlhcmVuYV9jb25maWdfdCBjb25maWcgPSBhcmVuYV9jb25maWdfZGVmYXVsdDsKKwlX UklURShjb25maWcuZXh0ZW50X2hvb2tzLCBleHRlbnRfaG9va3NfdCAqKTsKKwlpZiAoKGFyZW5h X2luZCA9IGN0bF9hcmVuYV9pbml0KHRzZCwgJmNvbmZpZykpID09IFVJTlRfTUFYKSB7CisJCXJl dCA9IEVBR0FJTjsKKwkJZ290byBsYWJlbF9yZXR1cm47CisJfQorCVJFQUQoYXJlbmFfaW5kLCB1 bnNpZ25lZCk7CisKKwlyZXQgPSAwOworbGFiZWxfcmV0dXJuOgorCW1hbGxvY19tdXRleF91bmxv Y2sodHNkX3RzZG4odHNkKSwgJmN0bF9tdHgpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBp bnQKK2V4cGVyaW1lbnRhbF9hcmVuYXNfY3JlYXRlX2V4dF9jdGwodHNkX3QgKnRzZCwKKyAgICBj b25zdCBzaXplX3QgKm1pYiwgc2l6ZV90IG1pYmxlbiwKKyAgICB2b2lkICpvbGRwLCBzaXplX3Qg Km9sZGxlbnAsIHZvaWQgKm5ld3AsIHNpemVfdCBuZXdsZW4pIHsKKwlpbnQgcmV0OworCXVuc2ln bmVkIGFyZW5hX2luZDsKKworCW1hbGxvY19tdXRleF9sb2NrKHRzZF90c2RuKHRzZCksICZjdGxf bXR4KTsKKworCWFyZW5hX2NvbmZpZ190IGNvbmZpZyA9IGFyZW5hX2NvbmZpZ19kZWZhdWx0Owor CVZFUklGWV9SRUFEKHVuc2lnbmVkKTsKKwlXUklURShjb25maWcsIGFyZW5hX2NvbmZpZ190KTsK KworCWlmICgoYXJlbmFfaW5kID0gY3RsX2FyZW5hX2luaXQodHNkLCAmY29uZmlnKSkgPT0gVUlO VF9NQVgpIHsKKwkJcmV0ID0gRUFHQUlOOworCQlnb3RvIGxhYmVsX3JldHVybjsKKwl9CisJUkVB RChhcmVuYV9pbmQsIHVuc2lnbmVkKTsKKwlyZXQgPSAwOworbGFiZWxfcmV0dXJuOgorCW1hbGxv Y19tdXRleF91bmxvY2sodHNkX3RzZG4odHNkKSwgJmN0bF9tdHgpOworCXJldHVybiByZXQ7Cit9 CisKK3N0YXRpYyBpbnQKK2FyZW5hc19sb29rdXBfY3RsKHRzZF90ICp0c2QsIGNvbnN0IHNpemVf dCAqbWliLAorICAgIHNpemVfdCBtaWJsZW4sIHZvaWQgKm9sZHAsIHNpemVfdCAqb2xkbGVucCwg dm9pZCAqbmV3cCwKKyAgICBzaXplX3QgbmV3bGVuKSB7CisJaW50IHJldDsKKwl1bnNpZ25lZCBh cmVuYV9pbmQ7CisJdm9pZCAqcHRyOworCWVkYXRhX3QgKmVkYXRhOworCWFyZW5hX3QgKmFyZW5h OworCisJcHRyID0gTlVMTDsKKwlyZXQgPSBFSU5WQUw7CisJbWFsbG9jX211dGV4X2xvY2sodHNk X3RzZG4odHNkKSwgJmN0bF9tdHgpOworCVdSSVRFKHB0ciwgdm9pZCAqKTsKKwllZGF0YSA9IGVt YXBfZWRhdGFfbG9va3VwKHRzZF90c2RuKHRzZCksICZhcmVuYV9lbWFwX2dsb2JhbCwgcHRyKTsK KwlpZiAoZWRhdGEgPT0gTlVMTCkgeworCQlnb3RvIGxhYmVsX3JldHVybjsKKwl9CisKKwlhcmVu YSA9IGFyZW5hX2dldF9mcm9tX2VkYXRhKGVkYXRhKTsKKwlpZiAoYXJlbmEgPT0gTlVMTCkgewor CQlnb3RvIGxhYmVsX3JldHVybjsKKwl9CisKKwlhcmVuYV9pbmQgPSBhcmVuYV9pbmRfZ2V0KGFy ZW5hKTsKKwlSRUFEKGFyZW5hX2luZCwgdW5zaWduZWQpOworCisJcmV0ID0gMDsKK2xhYmVsX3Jl dHVybjoKKwltYWxsb2NfbXV0ZXhfdW5sb2NrKHRzZF90c2RuKHRzZCksICZjdGxfbXR4KTsKKwly ZXR1cm4gcmV0OworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaW50Citw cm9mX3RocmVhZF9hY3RpdmVfaW5pdF9jdGwodHNkX3QgKnRzZCwgY29uc3Qgc2l6ZV90ICptaWIs CisgICAgc2l6ZV90IG1pYmxlbiwgdm9pZCAqb2xkcCwgc2l6ZV90ICpvbGRsZW5wLCB2b2lkICpu ZXdwLAorICAgIHNpemVfdCBuZXdsZW4pIHsKKwlpbnQgcmV0OworCWJvb2wgb2xkdmFsOworCisJ aWYgKCFjb25maWdfcHJvZikgeworCQlyZXR1cm4gRU5PRU5UOworCX0KKworCWlmIChuZXdwICE9 IE5VTEwpIHsKKwkJaWYgKCFvcHRfcHJvZikgeworCQkJcmV0ID0gRU5PRU5UOworCQkJZ290byBs YWJlbF9yZXR1cm47CisJCX0KKwkJaWYgKG5ld2xlbiAhPSBzaXplb2YoYm9vbCkpIHsKKwkJCXJl dCA9IEVJTlZBTDsKKwkJCWdvdG8gbGFiZWxfcmV0dXJuOworCQl9CisJCW9sZHZhbCA9IHByb2Zf dGhyZWFkX2FjdGl2ZV9pbml0X3NldCh0c2RfdHNkbih0c2QpLAorCQkgICAgKihib29sICopbmV3 cCk7CisJfSBlbHNlIHsKKwkJb2xkdmFsID0gb3B0X3Byb2YgPyBwcm9mX3RocmVhZF9hY3RpdmVf aW5pdF9nZXQodHNkX3RzZG4odHNkKSkgOgorCQkgICAgZmFsc2U7CisJfQorCVJFQUQob2xkdmFs LCBib29sKTsKKworCXJldCA9IDA7CitsYWJlbF9yZXR1cm46CisJcmV0dXJuIHJldDsKK30KKwor c3RhdGljIGludAorcHJvZl9hY3RpdmVfY3RsKHRzZF90ICp0c2QsIGNvbnN0IHNpemVfdCAqbWli LCBzaXplX3QgbWlibGVuLAorICAgIHZvaWQgKm9sZHAsIHNpemVfdCAqb2xkbGVucCwgdm9pZCAq bmV3cCwgc2l6ZV90IG5ld2xlbikgeworCWludCByZXQ7CisJYm9vbCBvbGR2YWw7CisKKwlpZiAo IWNvbmZpZ19wcm9mKSB7CisJCXJldCA9IEVOT0VOVDsKKwkJZ290byBsYWJlbF9yZXR1cm47CisJ fQorCisJaWYgKG5ld3AgIT0gTlVMTCkgeworCQlpZiAobmV3bGVuICE9IHNpemVvZihib29sKSkg eworCQkJcmV0ID0gRUlOVkFMOworCQkJZ290byBsYWJlbF9yZXR1cm47CisJCX0KKwkJYm9vbCB2 YWwgPSAqKGJvb2wgKiluZXdwOworCQlpZiAoIW9wdF9wcm9mKSB7CisJCQlpZiAodmFsKSB7CisJ CQkJcmV0ID0gRU5PRU5UOworCQkJCWdvdG8gbGFiZWxfcmV0dXJuOworCQkJfSBlbHNlIHsKKwkJ CQkvKiBObyBjaGFuZ2UgbmVlZGVkIChhbHJlYWR5IG9mZikuICovCisJCQkJb2xkdmFsID0gZmFs c2U7CisJCQl9CisJCX0gZWxzZSB7CisJCQlvbGR2YWwgPSBwcm9mX2FjdGl2ZV9zZXQodHNkX3Rz ZG4odHNkKSwgdmFsKTsKKwkJfQorCX0gZWxzZSB7CisJCW9sZHZhbCA9IG9wdF9wcm9mID8gcHJv Zl9hY3RpdmVfZ2V0KHRzZF90c2RuKHRzZCkpIDogZmFsc2U7CisJfQorCVJFQUQob2xkdmFsLCBi b29sKTsKKworCXJldCA9IDA7CitsYWJlbF9yZXR1cm46CisJcmV0dXJuIHJldDsKK30KKworc3Rh dGljIGludAorcHJvZl9kdW1wX2N0bCh0c2RfdCAqdHNkLCBjb25zdCBzaXplX3QgKm1pYiwgc2l6 ZV90IG1pYmxlbiwKKyAgICB2b2lkICpvbGRwLCBzaXplX3QgKm9sZGxlbnAsIHZvaWQgKm5ld3As IHNpemVfdCBuZXdsZW4pIHsKKwlpbnQgcmV0OworCWNvbnN0IGNoYXIgKmZpbGVuYW1lID0gTlVM TDsKKworCWlmICghY29uZmlnX3Byb2YgfHwgIW9wdF9wcm9mKSB7CisJCXJldHVybiBFTk9FTlQ7 CisJfQorCisJV1JJVEVPTkxZKCk7CisJV1JJVEUoZmlsZW5hbWUsIGNvbnN0IGNoYXIgKik7CisK KwlpZiAocHJvZl9tZHVtcCh0c2QsIGZpbGVuYW1lKSkgeworCQlyZXQgPSBFRkFVTFQ7CisJCWdv dG8gbGFiZWxfcmV0dXJuOworCX0KKworCXJldCA9IDA7CitsYWJlbF9yZXR1cm46CisJcmV0dXJu IHJldDsKK30KKworc3RhdGljIGludAorcHJvZl9nZHVtcF9jdGwodHNkX3QgKnRzZCwgY29uc3Qg c2l6ZV90ICptaWIsIHNpemVfdCBtaWJsZW4sCisgICAgdm9pZCAqb2xkcCwgc2l6ZV90ICpvbGRs ZW5wLCB2b2lkICpuZXdwLCBzaXplX3QgbmV3bGVuKSB7CisJaW50IHJldDsKKwlib29sIG9sZHZh bDsKKworCWlmICghY29uZmlnX3Byb2YpIHsKKwkJcmV0dXJuIEVOT0VOVDsKKwl9CisKKwlpZiAo bmV3cCAhPSBOVUxMKSB7CisJCWlmICghb3B0X3Byb2YpIHsKKwkJCXJldCA9IEVOT0VOVDsKKwkJ CWdvdG8gbGFiZWxfcmV0dXJuOworCQl9CisJCWlmIChuZXdsZW4gIT0gc2l6ZW9mKGJvb2wpKSB7 CisJCQlyZXQgPSBFSU5WQUw7CisJCQlnb3RvIGxhYmVsX3JldHVybjsKKwkJfQorCQlvbGR2YWwg PSBwcm9mX2dkdW1wX3NldCh0c2RfdHNkbih0c2QpLCAqKGJvb2wgKiluZXdwKTsKKwl9IGVsc2Ug eworCQlvbGR2YWwgPSBvcHRfcHJvZiA/IHByb2ZfZ2R1bXBfZ2V0KHRzZF90c2RuKHRzZCkpIDog ZmFsc2U7CisJfQorCVJFQUQob2xkdmFsLCBib29sKTsKKworCXJldCA9IDA7CitsYWJlbF9yZXR1 cm46CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludAorcHJvZl9wcmVmaXhfY3RsKHRzZF90 ICp0c2QsIGNvbnN0IHNpemVfdCAqbWliLCBzaXplX3QgbWlibGVuLAorICAgIHZvaWQgKm9sZHAs IHNpemVfdCAqb2xkbGVucCwgdm9pZCAqbmV3cCwgc2l6ZV90IG5ld2xlbikgeworCWludCByZXQ7 CisJY29uc3QgY2hhciAqcHJlZml4ID0gTlVMTDsKKworCWlmICghY29uZmlnX3Byb2YgfHwgIW9w dF9wcm9mKSB7CisJCXJldHVybiBFTk9FTlQ7CisJfQorCisJbWFsbG9jX211dGV4X2xvY2sodHNk X3RzZG4odHNkKSwgJmN0bF9tdHgpOworCVdSSVRFT05MWSgpOworCVdSSVRFKHByZWZpeCwgY29u c3QgY2hhciAqKTsKKworCXJldCA9IHByb2ZfcHJlZml4X3NldCh0c2RfdHNkbih0c2QpLCBwcmVm aXgpID8gRUZBVUxUIDogMDsKK2xhYmVsX3JldHVybjoKKwltYWxsb2NfbXV0ZXhfdW5sb2NrKHRz ZF90c2RuKHRzZCksICZjdGxfbXR4KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50Citw cm9mX3Jlc2V0X2N0bCh0c2RfdCAqdHNkLCBjb25zdCBzaXplX3QgKm1pYiwgc2l6ZV90IG1pYmxl biwKKyAgICB2b2lkICpvbGRwLCBzaXplX3QgKm9sZGxlbnAsIHZvaWQgKm5ld3AsIHNpemVfdCBu ZXdsZW4pIHsKKwlpbnQgcmV0OworCXNpemVfdCBsZ19zYW1wbGUgPSBsZ19wcm9mX3NhbXBsZTsK KworCWlmICghY29uZmlnX3Byb2YgfHwgIW9wdF9wcm9mKSB7CisJCXJldHVybiBFTk9FTlQ7CisJ fQorCisJV1JJVEVPTkxZKCk7CisJV1JJVEUobGdfc2FtcGxlLCBzaXplX3QpOworCWlmIChsZ19z YW1wbGUgPj0gKHNpemVvZih1aW50NjRfdCkgPDwgMykpIHsKKwkJbGdfc2FtcGxlID0gKHNpemVv Zih1aW50NjRfdCkgPDwgMykgLSAxOworCX0KKworCXByb2ZfcmVzZXQodHNkLCBsZ19zYW1wbGUp OworCisJcmV0ID0gMDsKK2xhYmVsX3JldHVybjoKKwlyZXR1cm4gcmV0OworfQorCitDVExfUk9f TkxfQ0dFTihjb25maWdfcHJvZiwgcHJvZl9pbnRlcnZhbCwgcHJvZl9pbnRlcnZhbCwgdWludDY0 X3QpCitDVExfUk9fTkxfQ0dFTihjb25maWdfcHJvZiwgbGdfcHJvZl9zYW1wbGUsIGxnX3Byb2Zf c2FtcGxlLCBzaXplX3QpCisKK3N0YXRpYyBpbnQKK3Byb2ZfbG9nX3N0YXJ0X2N0bCh0c2RfdCAq dHNkLCBjb25zdCBzaXplX3QgKm1pYiwgc2l6ZV90IG1pYmxlbiwgdm9pZCAqb2xkcCwKKyAgICBz aXplX3QgKm9sZGxlbnAsIHZvaWQgKm5ld3AsIHNpemVfdCBuZXdsZW4pIHsKKwlpbnQgcmV0Owor CisJY29uc3QgY2hhciAqZmlsZW5hbWUgPSBOVUxMOworCisJaWYgKCFjb25maWdfcHJvZiB8fCAh b3B0X3Byb2YpIHsKKwkJcmV0dXJuIEVOT0VOVDsKKwl9CisKKwlXUklURU9OTFkoKTsKKwlXUklU RShmaWxlbmFtZSwgY29uc3QgY2hhciAqKTsKKworCWlmIChwcm9mX2xvZ19zdGFydCh0c2RfdHNk bih0c2QpLCBmaWxlbmFtZSkpIHsKKwkJcmV0ID0gRUZBVUxUOworCQlnb3RvIGxhYmVsX3JldHVy bjsKKwl9CisKKwlyZXQgPSAwOworbGFiZWxfcmV0dXJuOgorCXJldHVybiByZXQ7Cit9CisKK3N0 YXRpYyBpbnQKK3Byb2ZfbG9nX3N0b3BfY3RsKHRzZF90ICp0c2QsIGNvbnN0IHNpemVfdCAqbWli LCBzaXplX3QgbWlibGVuLCB2b2lkICpvbGRwLAorICAgIHNpemVfdCAqb2xkbGVucCwgdm9pZCAq bmV3cCwgc2l6ZV90IG5ld2xlbikgeworCWlmICghY29uZmlnX3Byb2YgfHwgIW9wdF9wcm9mKSB7 CisJCXJldHVybiBFTk9FTlQ7CisJfQorCisJaWYgKHByb2ZfbG9nX3N0b3AodHNkX3RzZG4odHNk KSkpIHsKKwkJcmV0dXJuIEVGQVVMVDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlu dAorZXhwZXJpbWVudGFsX2hvb2tzX3Byb2ZfYmFja3RyYWNlX2N0bCh0c2RfdCAqdHNkLCBjb25z dCBzaXplX3QgKm1pYiwKKyAgICBzaXplX3QgbWlibGVuLCB2b2lkICpvbGRwLCBzaXplX3QgKm9s ZGxlbnAsIHZvaWQgKm5ld3AsIHNpemVfdCBuZXdsZW4pIHsKKwlpbnQgcmV0OworCisJaWYgKG9s ZHAgPT0gTlVMTCAmJiBuZXdwID09IE5VTEwpIHsKKwkJcmV0ID0gRUlOVkFMOworCQlnb3RvIGxh YmVsX3JldHVybjsKKwl9CisJaWYgKG9sZHAgIT0gTlVMTCkgeworCQlwcm9mX2JhY2t0cmFjZV9o b29rX3Qgb2xkX2hvb2sgPQorCQkgICAgcHJvZl9iYWNrdHJhY2VfaG9va19nZXQoKTsKKwkJUkVB RChvbGRfaG9vaywgcHJvZl9iYWNrdHJhY2VfaG9va190KTsKKwl9CisJaWYgKG5ld3AgIT0gTlVM TCkgeworCQlpZiAoIW9wdF9wcm9mKSB7CisJCQlyZXQgPSBFTk9FTlQ7CisJCQlnb3RvIGxhYmVs X3JldHVybjsKKwkJfQorCQlwcm9mX2JhY2t0cmFjZV9ob29rX3QgbmV3X2hvb2sgSkVNQUxMT0Nf Q0NfU0lMRU5DRV9JTklUKE5VTEwpOworCQlXUklURShuZXdfaG9vaywgcHJvZl9iYWNrdHJhY2Vf aG9va190KTsKKwkJaWYgKG5ld19ob29rID09IE5VTEwpIHsKKwkJCXJldCA9IEVJTlZBTDsKKwkJ CWdvdG8gbGFiZWxfcmV0dXJuOworCQl9CisJCXByb2ZfYmFja3RyYWNlX2hvb2tfc2V0KG5ld19o b29rKTsKKwl9CisJcmV0ID0gMDsKK2xhYmVsX3JldHVybjoKKwlyZXR1cm4gcmV0OworfQorCitz dGF0aWMgaW50CitleHBlcmltZW50YWxfaG9va3NfcHJvZl9kdW1wX2N0bCh0c2RfdCAqdHNkLCBj b25zdCBzaXplX3QgKm1pYiwKKyAgICBzaXplX3QgbWlibGVuLCB2b2lkICpvbGRwLCBzaXplX3Qg Km9sZGxlbnAsIHZvaWQgKm5ld3AsIHNpemVfdCBuZXdsZW4pIHsKKwlpbnQgcmV0OworCisJaWYg KG9sZHAgPT0gTlVMTCAmJiBuZXdwID09IE5VTEwpIHsKKwkJcmV0ID0gRUlOVkFMOworCQlnb3Rv IGxhYmVsX3JldHVybjsKKwl9CisJaWYgKG9sZHAgIT0gTlVMTCkgeworCQlwcm9mX2R1bXBfaG9v a190IG9sZF9ob29rID0KKwkJICAgIHByb2ZfZHVtcF9ob29rX2dldCgpOworCQlSRUFEKG9sZF9o b29rLCBwcm9mX2R1bXBfaG9va190KTsKKwl9CisJaWYgKG5ld3AgIT0gTlVMTCkgeworCQlpZiAo IW9wdF9wcm9mKSB7CisJCQlyZXQgPSBFTk9FTlQ7CisJCQlnb3RvIGxhYmVsX3JldHVybjsKKwkJ fQorCQlwcm9mX2R1bXBfaG9va190IG5ld19ob29rIEpFTUFMTE9DX0NDX1NJTEVOQ0VfSU5JVChO VUxMKTsKKwkJV1JJVEUobmV3X2hvb2ssIHByb2ZfZHVtcF9ob29rX3QpOworCQlwcm9mX2R1bXBf aG9va19zZXQobmV3X2hvb2spOworCX0KKwlyZXQgPSAwOworbGFiZWxfcmV0dXJuOgorCXJldHVy biByZXQ7Cit9CisKKy8qIEZvciBpbnRlZ3JhdGlvbiB0ZXN0IHB1cnBvc2Ugb25seS4gIE5vIHBs YW4gdG8gbW92ZSBvdXQgb2YgZXhwZXJpbWVudGFsLiAqLworc3RhdGljIGludAorZXhwZXJpbWVu dGFsX2hvb2tzX3NhZmV0eV9jaGVja19hYm9ydF9jdGwodHNkX3QgKnRzZCwgY29uc3Qgc2l6ZV90 ICptaWIsCisgICAgc2l6ZV90IG1pYmxlbiwgdm9pZCAqb2xkcCwgc2l6ZV90ICpvbGRsZW5wLCB2 b2lkICpuZXdwLCBzaXplX3QgbmV3bGVuKSB7CisJaW50IHJldDsKKworCVdSSVRFT05MWSgpOwor CWlmIChuZXdwICE9IE5VTEwpIHsKKwkJaWYgKG5ld2xlbiAhPSBzaXplb2Yoc2FmZXR5X2NoZWNr X2Fib3J0X2hvb2tfdCkpIHsKKwkJCXJldCA9IEVJTlZBTDsKKwkJCWdvdG8gbGFiZWxfcmV0dXJu OworCQl9CisJCXNhZmV0eV9jaGVja19hYm9ydF9ob29rX3QgaG9vayBKRU1BTExPQ19DQ19TSUxF TkNFX0lOSVQoTlVMTCk7CisJCVdSSVRFKGhvb2ssIHNhZmV0eV9jaGVja19hYm9ydF9ob29rX3Qp OworCQlzYWZldHlfY2hlY2tfc2V0X2Fib3J0KGhvb2spOworCX0KKwlyZXQgPSAwOworbGFiZWxf cmV0dXJuOgorCXJldHVybiByZXQ7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK0NU TF9ST19DR0VOKGNvbmZpZ19zdGF0cywgc3RhdHNfYWxsb2NhdGVkLCBjdGxfc3RhdHMtPmFsbG9j YXRlZCwgc2l6ZV90KQorQ1RMX1JPX0NHRU4oY29uZmlnX3N0YXRzLCBzdGF0c19hY3RpdmUsIGN0 bF9zdGF0cy0+YWN0aXZlLCBzaXplX3QpCitDVExfUk9fQ0dFTihjb25maWdfc3RhdHMsIHN0YXRz X21ldGFkYXRhLCBjdGxfc3RhdHMtPm1ldGFkYXRhLCBzaXplX3QpCitDVExfUk9fQ0dFTihjb25m aWdfc3RhdHMsIHN0YXRzX21ldGFkYXRhX3RocCwgY3RsX3N0YXRzLT5tZXRhZGF0YV90aHAsIHNp emVfdCkKK0NUTF9ST19DR0VOKGNvbmZpZ19zdGF0cywgc3RhdHNfcmVzaWRlbnQsIGN0bF9zdGF0 cy0+cmVzaWRlbnQsIHNpemVfdCkKK0NUTF9ST19DR0VOKGNvbmZpZ19zdGF0cywgc3RhdHNfbWFw cGVkLCBjdGxfc3RhdHMtPm1hcHBlZCwgc2l6ZV90KQorQ1RMX1JPX0NHRU4oY29uZmlnX3N0YXRz LCBzdGF0c19yZXRhaW5lZCwgY3RsX3N0YXRzLT5yZXRhaW5lZCwgc2l6ZV90KQorCitDVExfUk9f Q0dFTihjb25maWdfc3RhdHMsIHN0YXRzX2JhY2tncm91bmRfdGhyZWFkX251bV90aHJlYWRzLAor ICAgIGN0bF9zdGF0cy0+YmFja2dyb3VuZF90aHJlYWQubnVtX3RocmVhZHMsIHNpemVfdCkKK0NU TF9ST19DR0VOKGNvbmZpZ19zdGF0cywgc3RhdHNfYmFja2dyb3VuZF90aHJlYWRfbnVtX3J1bnMs CisgICAgY3RsX3N0YXRzLT5iYWNrZ3JvdW5kX3RocmVhZC5udW1fcnVucywgdWludDY0X3QpCitD VExfUk9fQ0dFTihjb25maWdfc3RhdHMsIHN0YXRzX2JhY2tncm91bmRfdGhyZWFkX3J1bl9pbnRl cnZhbCwKKyAgICBuc3RpbWVfbnMoJmN0bF9zdGF0cy0+YmFja2dyb3VuZF90aHJlYWQucnVuX2lu dGVydmFsKSwgdWludDY0X3QpCisKK0NUTF9ST19DR0VOKGNvbmZpZ19zdGF0cywgc3RhdHNfemVy b19yZWFsbG9jcywKKyAgICBhdG9taWNfbG9hZF96dSgmemVyb19yZWFsbG9jX2NvdW50LCBBVE9N SUNfUkVMQVhFRCksIHNpemVfdCkKKworQ1RMX1JPX0dFTihzdGF0c19hcmVuYXNfaV9kc3MsIGFy ZW5hc19pKG1pYlsyXSktPmRzcywgY29uc3QgY2hhciAqKQorQ1RMX1JPX0dFTihzdGF0c19hcmVu YXNfaV9kaXJ0eV9kZWNheV9tcywgYXJlbmFzX2kobWliWzJdKS0+ZGlydHlfZGVjYXlfbXMsCisg ICAgc3NpemVfdCkKK0NUTF9ST19HRU4oc3RhdHNfYXJlbmFzX2lfbXV6enlfZGVjYXlfbXMsIGFy ZW5hc19pKG1pYlsyXSktPm11enp5X2RlY2F5X21zLAorICAgIHNzaXplX3QpCitDVExfUk9fR0VO KHN0YXRzX2FyZW5hc19pX250aHJlYWRzLCBhcmVuYXNfaShtaWJbMl0pLT5udGhyZWFkcywgdW5z aWduZWQpCitDVExfUk9fR0VOKHN0YXRzX2FyZW5hc19pX3VwdGltZSwKKyAgICBuc3RpbWVfbnMo JmFyZW5hc19pKG1pYlsyXSktPmFzdGF0cy0+YXN0YXRzLnVwdGltZSksIHVpbnQ2NF90KQorQ1RM X1JPX0dFTihzdGF0c19hcmVuYXNfaV9wYWN0aXZlLCBhcmVuYXNfaShtaWJbMl0pLT5wYWN0aXZl LCBzaXplX3QpCitDVExfUk9fR0VOKHN0YXRzX2FyZW5hc19pX3BkaXJ0eSwgYXJlbmFzX2kobWli WzJdKS0+cGRpcnR5LCBzaXplX3QpCitDVExfUk9fR0VOKHN0YXRzX2FyZW5hc19pX3BtdXp6eSwg YXJlbmFzX2kobWliWzJdKS0+cG11enp5LCBzaXplX3QpCitDVExfUk9fQ0dFTihjb25maWdfc3Rh dHMsIHN0YXRzX2FyZW5hc19pX21hcHBlZCwKKyAgICBhcmVuYXNfaShtaWJbMl0pLT5hc3RhdHMt PmFzdGF0cy5tYXBwZWQsIHNpemVfdCkKK0NUTF9ST19DR0VOKGNvbmZpZ19zdGF0cywgc3RhdHNf YXJlbmFzX2lfcmV0YWluZWQsCisgICAgYXJlbmFzX2kobWliWzJdKS0+YXN0YXRzLT5hc3RhdHMu cGFfc2hhcmRfc3RhdHMucGFjX3N0YXRzLnJldGFpbmVkLCBzaXplX3QpCitDVExfUk9fQ0dFTihj b25maWdfc3RhdHMsIHN0YXRzX2FyZW5hc19pX2V4dGVudF9hdmFpbCwKKyAgICBhcmVuYXNfaSht aWJbMl0pLT5hc3RhdHMtPmFzdGF0cy5wYV9zaGFyZF9zdGF0cy5lZGF0YV9hdmFpbCwgc2l6ZV90 KQorCitDVExfUk9fQ0dFTihjb25maWdfc3RhdHMsIHN0YXRzX2FyZW5hc19pX2RpcnR5X25wdXJn ZSwKKyAgICBsb2NrZWRfcmVhZF91NjRfdW5zeW5jaHJvbml6ZWQoCisgICAgJmFyZW5hc19pKG1p YlsyXSktPmFzdGF0cy0+YXN0YXRzLnBhX3NoYXJkX3N0YXRzLnBhY19zdGF0cy5kZWNheV9kaXJ0 eS5ucHVyZ2UpLAorICAgIHVpbnQ2NF90KQorQ1RMX1JPX0NHRU4oY29uZmlnX3N0YXRzLCBzdGF0 c19hcmVuYXNfaV9kaXJ0eV9ubWFkdmlzZSwKKyAgICBsb2NrZWRfcmVhZF91NjRfdW5zeW5jaHJv bml6ZWQoCisgICAgJmFyZW5hc19pKG1pYlsyXSktPmFzdGF0cy0+YXN0YXRzLnBhX3NoYXJkX3N0 YXRzLnBhY19zdGF0cy5kZWNheV9kaXJ0eS5ubWFkdmlzZSksCisgICAgdWludDY0X3QpCitDVExf Uk9fQ0dFTihjb25maWdfc3RhdHMsIHN0YXRzX2FyZW5hc19pX2RpcnR5X3B1cmdlZCwKKyAgICBs b2NrZWRfcmVhZF91NjRfdW5zeW5jaHJvbml6ZWQoCisgICAgJmFyZW5hc19pKG1pYlsyXSktPmFz dGF0cy0+YXN0YXRzLnBhX3NoYXJkX3N0YXRzLnBhY19zdGF0cy5kZWNheV9kaXJ0eS5wdXJnZWQp LAorICAgIHVpbnQ2NF90KQorCitDVExfUk9fQ0dFTihjb25maWdfc3RhdHMsIHN0YXRzX2FyZW5h c19pX211enp5X25wdXJnZSwKKyAgICBsb2NrZWRfcmVhZF91NjRfdW5zeW5jaHJvbml6ZWQoCisg ICAgJmFyZW5hc19pKG1pYlsyXSktPmFzdGF0cy0+YXN0YXRzLnBhX3NoYXJkX3N0YXRzLnBhY19z dGF0cy5kZWNheV9tdXp6eS5ucHVyZ2UpLAorICAgIHVpbnQ2NF90KQorQ1RMX1JPX0NHRU4oY29u ZmlnX3N0YXRzLCBzdGF0c19hcmVuYXNfaV9tdXp6eV9ubWFkdmlzZSwKKyAgICBsb2NrZWRfcmVh ZF91NjRfdW5zeW5jaHJvbml6ZWQoCisgICAgJmFyZW5hc19pKG1pYlsyXSktPmFzdGF0cy0+YXN0 YXRzLnBhX3NoYXJkX3N0YXRzLnBhY19zdGF0cy5kZWNheV9tdXp6eS5ubWFkdmlzZSksCisgICAg dWludDY0X3QpCitDVExfUk9fQ0dFTihjb25maWdfc3RhdHMsIHN0YXRzX2FyZW5hc19pX211enp5 X3B1cmdlZCwKKyAgICBsb2NrZWRfcmVhZF91NjRfdW5zeW5jaHJvbml6ZWQoCisgICAgJmFyZW5h c19pKG1pYlsyXSktPmFzdGF0cy0+YXN0YXRzLnBhX3NoYXJkX3N0YXRzLnBhY19zdGF0cy5kZWNh eV9tdXp6eS5wdXJnZWQpLAorICAgIHVpbnQ2NF90KQorCitDVExfUk9fQ0dFTihjb25maWdfc3Rh dHMsIHN0YXRzX2FyZW5hc19pX2Jhc2UsCisgICAgYXJlbmFzX2kobWliWzJdKS0+YXN0YXRzLT5h c3RhdHMuYmFzZSwKKyAgICBzaXplX3QpCitDVExfUk9fQ0dFTihjb25maWdfc3RhdHMsIHN0YXRz X2FyZW5hc19pX2ludGVybmFsLAorICAgIGF0b21pY19sb2FkX3p1KCZhcmVuYXNfaShtaWJbMl0p LT5hc3RhdHMtPmFzdGF0cy5pbnRlcm5hbCwgQVRPTUlDX1JFTEFYRUQpLAorICAgIHNpemVfdCkK K0NUTF9ST19DR0VOKGNvbmZpZ19zdGF0cywgc3RhdHNfYXJlbmFzX2lfbWV0YWRhdGFfdGhwLAor ICAgIGFyZW5hc19pKG1pYlsyXSktPmFzdGF0cy0+YXN0YXRzLm1ldGFkYXRhX3RocCwgc2l6ZV90 KQorQ1RMX1JPX0NHRU4oY29uZmlnX3N0YXRzLCBzdGF0c19hcmVuYXNfaV90Y2FjaGVfYnl0ZXMs CisgICAgYXJlbmFzX2kobWliWzJdKS0+YXN0YXRzLT5hc3RhdHMudGNhY2hlX2J5dGVzLCBzaXpl X3QpCitDVExfUk9fQ0dFTihjb25maWdfc3RhdHMsIHN0YXRzX2FyZW5hc19pX3RjYWNoZV9zdGFz aGVkX2J5dGVzLAorICAgIGFyZW5hc19pKG1pYlsyXSktPmFzdGF0cy0+YXN0YXRzLnRjYWNoZV9z dGFzaGVkX2J5dGVzLCBzaXplX3QpCitDVExfUk9fQ0dFTihjb25maWdfc3RhdHMsIHN0YXRzX2Fy ZW5hc19pX3Jlc2lkZW50LAorICAgIGFyZW5hc19pKG1pYlsyXSktPmFzdGF0cy0+YXN0YXRzLnJl c2lkZW50LAorICAgIHNpemVfdCkKK0NUTF9ST19DR0VOKGNvbmZpZ19zdGF0cywgc3RhdHNfYXJl bmFzX2lfYWJhbmRvbmVkX3ZtLAorICAgIGF0b21pY19sb2FkX3p1KAorICAgICZhcmVuYXNfaSht aWJbMl0pLT5hc3RhdHMtPmFzdGF0cy5wYV9zaGFyZF9zdGF0cy5wYWNfc3RhdHMuYWJhbmRvbmVk X3ZtLAorICAgIEFUT01JQ19SRUxBWEVEKSwgc2l6ZV90KQorCitDVExfUk9fQ0dFTihjb25maWdf c3RhdHMsIHN0YXRzX2FyZW5hc19pX2hwYV9zZWNfYnl0ZXMsCisgICAgYXJlbmFzX2kobWliWzJd KS0+YXN0YXRzLT5zZWNzdGF0cy5ieXRlcywgc2l6ZV90KQorCitDVExfUk9fQ0dFTihjb25maWdf c3RhdHMsIHN0YXRzX2FyZW5hc19pX3NtYWxsX2FsbG9jYXRlZCwKKyAgICBhcmVuYXNfaShtaWJb Ml0pLT5hc3RhdHMtPmFsbG9jYXRlZF9zbWFsbCwgc2l6ZV90KQorQ1RMX1JPX0NHRU4oY29uZmln X3N0YXRzLCBzdGF0c19hcmVuYXNfaV9zbWFsbF9ubWFsbG9jLAorICAgIGFyZW5hc19pKG1pYlsy XSktPmFzdGF0cy0+bm1hbGxvY19zbWFsbCwgdWludDY0X3QpCitDVExfUk9fQ0dFTihjb25maWdf c3RhdHMsIHN0YXRzX2FyZW5hc19pX3NtYWxsX25kYWxsb2MsCisgICAgYXJlbmFzX2kobWliWzJd KS0+YXN0YXRzLT5uZGFsbG9jX3NtYWxsLCB1aW50NjRfdCkKK0NUTF9ST19DR0VOKGNvbmZpZ19z dGF0cywgc3RhdHNfYXJlbmFzX2lfc21hbGxfbnJlcXVlc3RzLAorICAgIGFyZW5hc19pKG1pYlsy XSktPmFzdGF0cy0+bnJlcXVlc3RzX3NtYWxsLCB1aW50NjRfdCkKK0NUTF9ST19DR0VOKGNvbmZp Z19zdGF0cywgc3RhdHNfYXJlbmFzX2lfc21hbGxfbmZpbGxzLAorICAgIGFyZW5hc19pKG1pYlsy XSktPmFzdGF0cy0+bmZpbGxzX3NtYWxsLCB1aW50NjRfdCkKK0NUTF9ST19DR0VOKGNvbmZpZ19z dGF0cywgc3RhdHNfYXJlbmFzX2lfc21hbGxfbmZsdXNoZXMsCisgICAgYXJlbmFzX2kobWliWzJd KS0+YXN0YXRzLT5uZmx1c2hlc19zbWFsbCwgdWludDY0X3QpCitDVExfUk9fQ0dFTihjb25maWdf c3RhdHMsIHN0YXRzX2FyZW5hc19pX2xhcmdlX2FsbG9jYXRlZCwKKyAgICBhcmVuYXNfaShtaWJb Ml0pLT5hc3RhdHMtPmFzdGF0cy5hbGxvY2F0ZWRfbGFyZ2UsIHNpemVfdCkKK0NUTF9ST19DR0VO KGNvbmZpZ19zdGF0cywgc3RhdHNfYXJlbmFzX2lfbGFyZ2Vfbm1hbGxvYywKKyAgICBhcmVuYXNf aShtaWJbMl0pLT5hc3RhdHMtPmFzdGF0cy5ubWFsbG9jX2xhcmdlLCB1aW50NjRfdCkKK0NUTF9S T19DR0VOKGNvbmZpZ19zdGF0cywgc3RhdHNfYXJlbmFzX2lfbGFyZ2VfbmRhbGxvYywKKyAgICBh cmVuYXNfaShtaWJbMl0pLT5hc3RhdHMtPmFzdGF0cy5uZGFsbG9jX2xhcmdlLCB1aW50NjRfdCkK K0NUTF9ST19DR0VOKGNvbmZpZ19zdGF0cywgc3RhdHNfYXJlbmFzX2lfbGFyZ2VfbnJlcXVlc3Rz LAorICAgIGFyZW5hc19pKG1pYlsyXSktPmFzdGF0cy0+YXN0YXRzLm5yZXF1ZXN0c19sYXJnZSwg dWludDY0X3QpCisvKgorICogTm90ZTogIm5tYWxsb2NfbGFyZ2UiIGhlcmUgaW5zdGVhZCBvZiAi bmZpbGxzIiBpbiB0aGUgcmVhZC4gIFRoaXMgaXMKKyAqIGludGVudGlvbmFsIChsYXJnZSBoYXMg bm8gYmF0Y2ggZmlsbCkuCisgKi8KK0NUTF9ST19DR0VOKGNvbmZpZ19zdGF0cywgc3RhdHNfYXJl bmFzX2lfbGFyZ2VfbmZpbGxzLAorICAgIGFyZW5hc19pKG1pYlsyXSktPmFzdGF0cy0+YXN0YXRz Lm5tYWxsb2NfbGFyZ2UsIHVpbnQ2NF90KQorQ1RMX1JPX0NHRU4oY29uZmlnX3N0YXRzLCBzdGF0 c19hcmVuYXNfaV9sYXJnZV9uZmx1c2hlcywKKyAgICBhcmVuYXNfaShtaWJbMl0pLT5hc3RhdHMt PmFzdGF0cy5uZmx1c2hlc19sYXJnZSwgdWludDY0X3QpCisKKy8qIExvY2sgcHJvZmlsaW5nIHJl bGF0ZWQgQVBJcyBiZWxvdy4gKi8KKyNkZWZpbmUgUk9fTVVURVhfQ1RMX0dFTihuLCBsKQkJCQkJ CVwKK0NUTF9ST19DR0VOKGNvbmZpZ19zdGF0cywgc3RhdHNfIyNuIyNfbnVtX29wcywJCQkJXAor ICAgIGwubl9sb2NrX29wcywgdWludDY0X3QpCQkJCQkJXAorQ1RMX1JPX0NHRU4oY29uZmlnX3N0 YXRzLCBzdGF0c18jI24jI19udW1fd2FpdCwJCQkJXAorICAgIGwubl93YWl0X3RpbWVzLCB1aW50 NjRfdCkJCQkJCQlcCitDVExfUk9fQ0dFTihjb25maWdfc3RhdHMsIHN0YXRzXyMjbiMjX251bV9z cGluX2FjcSwJCQlcCisgICAgbC5uX3NwaW5fYWNxdWlyZWQsIHVpbnQ2NF90KQkJCQkJXAorQ1RM X1JPX0NHRU4oY29uZmlnX3N0YXRzLCBzdGF0c18jI24jI19udW1fb3duZXJfc3dpdGNoLAkJCVwK KyAgICBsLm5fb3duZXJfc3dpdGNoZXMsIHVpbnQ2NF90KSAJCQkJCVwKK0NUTF9ST19DR0VOKGNv bmZpZ19zdGF0cywgc3RhdHNfIyNuIyNfdG90YWxfd2FpdF90aW1lLAkJCVwKKyAgICBuc3RpbWVf bnMoJmwudG90X3dhaXRfdGltZSksIHVpbnQ2NF90KQkJCQlcCitDVExfUk9fQ0dFTihjb25maWdf c3RhdHMsIHN0YXRzXyMjbiMjX21heF93YWl0X3RpbWUsCQkJXAorICAgIG5zdGltZV9ucygmbC5t YXhfd2FpdF90aW1lKSwgdWludDY0X3QpCQkJCVwKK0NUTF9ST19DR0VOKGNvbmZpZ19zdGF0cywg c3RhdHNfIyNuIyNfbWF4X251bV90aGRzLAkJCVwKKyAgICBsLm1heF9uX3RoZHMsIHVpbnQzMl90 KQorCisvKiBHbG9iYWwgbXV0ZXhlcy4gKi8KKyNkZWZpbmUgT1AobXR4KQkJCQkJCQkJXAorICAg IFJPX01VVEVYX0NUTF9HRU4obXV0ZXhlc18jI210eCwJCQkJCVwKKyAgICAgICAgY3RsX3N0YXRz LT5tdXRleF9wcm9mX2RhdGFbZ2xvYmFsX3Byb2ZfbXV0ZXhfIyNtdHhdKQorTVVURVhfUFJPRl9H TE9CQUxfTVVURVhFUworI3VuZGVmIE9QCisKKy8qIFBlciBhcmVuYSBtdXRleGVzICovCisjZGVm aW5lIE9QKG10eCkgUk9fTVVURVhfQ1RMX0dFTihhcmVuYXNfaV9tdXRleGVzXyMjbXR4LAkJXAor ICAgIGFyZW5hc19pKG1pYlsyXSktPmFzdGF0cy0+YXN0YXRzLm11dGV4X3Byb2ZfZGF0YVthcmVu YV9wcm9mX211dGV4XyMjbXR4XSkKK01VVEVYX1BST0ZfQVJFTkFfTVVURVhFUworI3VuZGVmIE9Q CisKKy8qIHRjYWNoZSBiaW4gbXV0ZXggKi8KK1JPX01VVEVYX0NUTF9HRU4oYXJlbmFzX2lfYmlu c19qX211dGV4LAorICAgIGFyZW5hc19pKG1pYlsyXSktPmFzdGF0cy0+YnN0YXRzW21pYls0XV0u bXV0ZXhfZGF0YSkKKyN1bmRlZiBST19NVVRFWF9DVExfR0VOCisKKy8qIFJlc2V0cyBhbGwgbXV0 ZXggc3RhdHMsIGluY2x1ZGluZyBnbG9iYWwsIGFyZW5hIGFuZCBiaW4gbXV0ZXhlcy4gKi8KK3N0 YXRpYyBpbnQKK3N0YXRzX211dGV4ZXNfcmVzZXRfY3RsKHRzZF90ICp0c2QsIGNvbnN0IHNpemVf dCAqbWliLAorICAgIHNpemVfdCBtaWJsZW4sIHZvaWQgKm9sZHAsIHNpemVfdCAqb2xkbGVucCwK KyAgICB2b2lkICpuZXdwLCBzaXplX3QgbmV3bGVuKSB7CisJaWYgKCFjb25maWdfc3RhdHMpIHsK KwkJcmV0dXJuIEVOT0VOVDsKKwl9CisKKwl0c2RuX3QgKnRzZG4gPSB0c2RfdHNkbih0c2QpOwor CisjZGVmaW5lIE1VVEVYX1BST0ZfUkVTRVQobXR4KQkJCQkJCVwKKyAgICBtYWxsb2NfbXV0ZXhf bG9jayh0c2RuLCAmbXR4KTsJCQkJCVwKKyAgICBtYWxsb2NfbXV0ZXhfcHJvZl9kYXRhX3Jlc2V0 KHRzZG4sICZtdHgpOwkJCQlcCisgICAgbWFsbG9jX211dGV4X3VubG9jayh0c2RuLCAmbXR4KTsK KworCS8qIEdsb2JhbCBtdXRleGVzOiBjdGwgYW5kIHByb2YuICovCisJTVVURVhfUFJPRl9SRVNF VChjdGxfbXR4KTsKKwlpZiAoaGF2ZV9iYWNrZ3JvdW5kX3RocmVhZCkgeworCQlNVVRFWF9QUk9G X1JFU0VUKGJhY2tncm91bmRfdGhyZWFkX2xvY2spOworCX0KKwlpZiAoY29uZmlnX3Byb2YgJiYg b3B0X3Byb2YpIHsKKwkJTVVURVhfUFJPRl9SRVNFVChidDJnY3R4X210eCk7CisJCU1VVEVYX1BS T0ZfUkVTRVQodGRhdGFzX210eCk7CisJCU1VVEVYX1BST0ZfUkVTRVQocHJvZl9kdW1wX210eCk7 CisJCU1VVEVYX1BST0ZfUkVTRVQocHJvZl9yZWNlbnRfYWxsb2NfbXR4KTsKKwkJTVVURVhfUFJP Rl9SRVNFVChwcm9mX3JlY2VudF9kdW1wX210eCk7CisJCU1VVEVYX1BST0ZfUkVTRVQocHJvZl9z dGF0c19tdHgpOworCX0KKworCS8qIFBlciBhcmVuYSBtdXRleGVzLiAqLworCXVuc2lnbmVkIG4g PSBuYXJlbmFzX3RvdGFsX2dldCgpOworCisJZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG47IGkr KykgeworCQlhcmVuYV90ICphcmVuYSA9IGFyZW5hX2dldCh0c2RuLCBpLCBmYWxzZSk7CisJCWlm ICghYXJlbmEpIHsKKwkJCWNvbnRpbnVlOworCQl9CisJCU1VVEVYX1BST0ZfUkVTRVQoYXJlbmEt PmxhcmdlX210eCk7CisJCU1VVEVYX1BST0ZfUkVTRVQoYXJlbmEtPnBhX3NoYXJkLmVkYXRhX2Nh Y2hlLm10eCk7CisJCU1VVEVYX1BST0ZfUkVTRVQoYXJlbmEtPnBhX3NoYXJkLnBhYy5lY2FjaGVf ZGlydHkubXR4KTsKKwkJTVVURVhfUFJPRl9SRVNFVChhcmVuYS0+cGFfc2hhcmQucGFjLmVjYWNo ZV9tdXp6eS5tdHgpOworCQlNVVRFWF9QUk9GX1JFU0VUKGFyZW5hLT5wYV9zaGFyZC5wYWMuZWNh Y2hlX3JldGFpbmVkLm10eCk7CisJCU1VVEVYX1BST0ZfUkVTRVQoYXJlbmEtPnBhX3NoYXJkLnBh Yy5kZWNheV9kaXJ0eS5tdHgpOworCQlNVVRFWF9QUk9GX1JFU0VUKGFyZW5hLT5wYV9zaGFyZC5w YWMuZGVjYXlfbXV6enkubXR4KTsKKwkJTVVURVhfUFJPRl9SRVNFVChhcmVuYS0+dGNhY2hlX3Fs X210eCk7CisJCU1VVEVYX1BST0ZfUkVTRVQoYXJlbmEtPmJhc2UtPm10eCk7CisKKwkJZm9yIChz emluZF90IGogPSAwOyBqIDwgU0NfTkJJTlM7IGorKykgeworCQkJZm9yICh1bnNpZ25lZCBrID0g MDsgayA8IGJpbl9pbmZvc1tqXS5uX3NoYXJkczsgaysrKSB7CisJCQkJYmluX3QgKmJpbiA9IGFy ZW5hX2dldF9iaW4oYXJlbmEsIGosIGspOworCQkJCU1VVEVYX1BST0ZfUkVTRVQoYmluLT5sb2Nr KTsKKwkJCX0KKwkJfQorCX0KKyN1bmRlZiBNVVRFWF9QUk9GX1JFU0VUCisJcmV0dXJuIDA7Cit9 CisKK0NUTF9ST19DR0VOKGNvbmZpZ19zdGF0cywgc3RhdHNfYXJlbmFzX2lfYmluc19qX25tYWxs b2MsCisgICAgYXJlbmFzX2kobWliWzJdKS0+YXN0YXRzLT5ic3RhdHNbbWliWzRdXS5zdGF0c19k YXRhLm5tYWxsb2MsIHVpbnQ2NF90KQorQ1RMX1JPX0NHRU4oY29uZmlnX3N0YXRzLCBzdGF0c19h cmVuYXNfaV9iaW5zX2pfbmRhbGxvYywKKyAgICBhcmVuYXNfaShtaWJbMl0pLT5hc3RhdHMtPmJz dGF0c1ttaWJbNF1dLnN0YXRzX2RhdGEubmRhbGxvYywgdWludDY0X3QpCitDVExfUk9fQ0dFTihj b25maWdfc3RhdHMsIHN0YXRzX2FyZW5hc19pX2JpbnNfal9ucmVxdWVzdHMsCisgICAgYXJlbmFz X2kobWliWzJdKS0+YXN0YXRzLT5ic3RhdHNbbWliWzRdXS5zdGF0c19kYXRhLm5yZXF1ZXN0cywg dWludDY0X3QpCitDVExfUk9fQ0dFTihjb25maWdfc3RhdHMsIHN0YXRzX2FyZW5hc19pX2JpbnNf al9jdXJyZWdzLAorICAgIGFyZW5hc19pKG1pYlsyXSktPmFzdGF0cy0+YnN0YXRzW21pYls0XV0u c3RhdHNfZGF0YS5jdXJyZWdzLCBzaXplX3QpCitDVExfUk9fQ0dFTihjb25maWdfc3RhdHMsIHN0 YXRzX2FyZW5hc19pX2JpbnNfal9uZmlsbHMsCisgICAgYXJlbmFzX2kobWliWzJdKS0+YXN0YXRz LT5ic3RhdHNbbWliWzRdXS5zdGF0c19kYXRhLm5maWxscywgdWludDY0X3QpCitDVExfUk9fQ0dF Tihjb25maWdfc3RhdHMsIHN0YXRzX2FyZW5hc19pX2JpbnNfal9uZmx1c2hlcywKKyAgICBhcmVu YXNfaShtaWJbMl0pLT5hc3RhdHMtPmJzdGF0c1ttaWJbNF1dLnN0YXRzX2RhdGEubmZsdXNoZXMs IHVpbnQ2NF90KQorQ1RMX1JPX0NHRU4oY29uZmlnX3N0YXRzLCBzdGF0c19hcmVuYXNfaV9iaW5z X2pfbnNsYWJzLAorICAgIGFyZW5hc19pKG1pYlsyXSktPmFzdGF0cy0+YnN0YXRzW21pYls0XV0u c3RhdHNfZGF0YS5uc2xhYnMsIHVpbnQ2NF90KQorQ1RMX1JPX0NHRU4oY29uZmlnX3N0YXRzLCBz dGF0c19hcmVuYXNfaV9iaW5zX2pfbnJlc2xhYnMsCisgICAgYXJlbmFzX2kobWliWzJdKS0+YXN0 YXRzLT5ic3RhdHNbbWliWzRdXS5zdGF0c19kYXRhLnJlc2xhYnMsIHVpbnQ2NF90KQorQ1RMX1JP X0NHRU4oY29uZmlnX3N0YXRzLCBzdGF0c19hcmVuYXNfaV9iaW5zX2pfY3Vyc2xhYnMsCisgICAg YXJlbmFzX2kobWliWzJdKS0+YXN0YXRzLT5ic3RhdHNbbWliWzRdXS5zdGF0c19kYXRhLmN1cnNs YWJzLCBzaXplX3QpCitDVExfUk9fQ0dFTihjb25maWdfc3RhdHMsIHN0YXRzX2FyZW5hc19pX2Jp bnNfal9ub25mdWxsX3NsYWJzLAorICAgIGFyZW5hc19pKG1pYlsyXSktPmFzdGF0cy0+YnN0YXRz W21pYls0XV0uc3RhdHNfZGF0YS5ub25mdWxsX3NsYWJzLCBzaXplX3QpCisKK3N0YXRpYyBjb25z dCBjdGxfbmFtZWRfbm9kZV90ICoKK3N0YXRzX2FyZW5hc19pX2JpbnNfal9pbmRleCh0c2RuX3Qg KnRzZG4sIGNvbnN0IHNpemVfdCAqbWliLAorICAgIHNpemVfdCBtaWJsZW4sIHNpemVfdCBqKSB7 CisJaWYgKGogPiBTQ19OQklOUykgeworCQlyZXR1cm4gTlVMTDsKKwl9CisJcmV0dXJuIHN1cGVy X3N0YXRzX2FyZW5hc19pX2JpbnNfal9ub2RlOworfQorCitDVExfUk9fQ0dFTihjb25maWdfc3Rh dHMsIHN0YXRzX2FyZW5hc19pX2xleHRlbnRzX2pfbm1hbGxvYywKKyAgICBsb2NrZWRfcmVhZF91 NjRfdW5zeW5jaHJvbml6ZWQoCisgICAgJmFyZW5hc19pKG1pYlsyXSktPmFzdGF0cy0+bHN0YXRz W21pYls0XV0ubm1hbGxvYyksIHVpbnQ2NF90KQorQ1RMX1JPX0NHRU4oY29uZmlnX3N0YXRzLCBz dGF0c19hcmVuYXNfaV9sZXh0ZW50c19qX25kYWxsb2MsCisgICAgbG9ja2VkX3JlYWRfdTY0X3Vu c3luY2hyb25pemVkKAorICAgICZhcmVuYXNfaShtaWJbMl0pLT5hc3RhdHMtPmxzdGF0c1ttaWJb NF1dLm5kYWxsb2MpLCB1aW50NjRfdCkKK0NUTF9ST19DR0VOKGNvbmZpZ19zdGF0cywgc3RhdHNf YXJlbmFzX2lfbGV4dGVudHNfal9ucmVxdWVzdHMsCisgICAgbG9ja2VkX3JlYWRfdTY0X3Vuc3lu Y2hyb25pemVkKAorICAgICZhcmVuYXNfaShtaWJbMl0pLT5hc3RhdHMtPmxzdGF0c1ttaWJbNF1d Lm5yZXF1ZXN0cyksIHVpbnQ2NF90KQorQ1RMX1JPX0NHRU4oY29uZmlnX3N0YXRzLCBzdGF0c19h cmVuYXNfaV9sZXh0ZW50c19qX2N1cmxleHRlbnRzLAorICAgIGFyZW5hc19pKG1pYlsyXSktPmFz dGF0cy0+bHN0YXRzW21pYls0XV0uY3VybGV4dGVudHMsIHNpemVfdCkKKworc3RhdGljIGNvbnN0 IGN0bF9uYW1lZF9ub2RlX3QgKgorc3RhdHNfYXJlbmFzX2lfbGV4dGVudHNfal9pbmRleCh0c2Ru X3QgKnRzZG4sIGNvbnN0IHNpemVfdCAqbWliLAorICAgIHNpemVfdCBtaWJsZW4sIHNpemVfdCBq KSB7CisJaWYgKGogPiBTQ19OU0laRVMgLSBTQ19OQklOUykgeworCQlyZXR1cm4gTlVMTDsKKwl9 CisJcmV0dXJuIHN1cGVyX3N0YXRzX2FyZW5hc19pX2xleHRlbnRzX2pfbm9kZTsKK30KKworQ1RM X1JPX0NHRU4oY29uZmlnX3N0YXRzLCBzdGF0c19hcmVuYXNfaV9leHRlbnRzX2pfbmRpcnR5LAor ICAgICAgICBhcmVuYXNfaShtaWJbMl0pLT5hc3RhdHMtPmVzdGF0c1ttaWJbNF1dLm5kaXJ0eSwg c2l6ZV90KTsKK0NUTF9ST19DR0VOKGNvbmZpZ19zdGF0cywgc3RhdHNfYXJlbmFzX2lfZXh0ZW50 c19qX25tdXp6eSwKKyAgICAgICAgYXJlbmFzX2kobWliWzJdKS0+YXN0YXRzLT5lc3RhdHNbbWli WzRdXS5ubXV6enksIHNpemVfdCk7CitDVExfUk9fQ0dFTihjb25maWdfc3RhdHMsIHN0YXRzX2Fy ZW5hc19pX2V4dGVudHNfal9ucmV0YWluZWQsCisgICAgICAgIGFyZW5hc19pKG1pYlsyXSktPmFz dGF0cy0+ZXN0YXRzW21pYls0XV0ubnJldGFpbmVkLCBzaXplX3QpOworQ1RMX1JPX0NHRU4oY29u ZmlnX3N0YXRzLCBzdGF0c19hcmVuYXNfaV9leHRlbnRzX2pfZGlydHlfYnl0ZXMsCisgICAgICAg IGFyZW5hc19pKG1pYlsyXSktPmFzdGF0cy0+ZXN0YXRzW21pYls0XV0uZGlydHlfYnl0ZXMsIHNp emVfdCk7CitDVExfUk9fQ0dFTihjb25maWdfc3RhdHMsIHN0YXRzX2FyZW5hc19pX2V4dGVudHNf al9tdXp6eV9ieXRlcywKKyAgICAgICAgYXJlbmFzX2kobWliWzJdKS0+YXN0YXRzLT5lc3RhdHNb bWliWzRdXS5tdXp6eV9ieXRlcywgc2l6ZV90KTsKK0NUTF9ST19DR0VOKGNvbmZpZ19zdGF0cywg c3RhdHNfYXJlbmFzX2lfZXh0ZW50c19qX3JldGFpbmVkX2J5dGVzLAorICAgICAgICBhcmVuYXNf aShtaWJbMl0pLT5hc3RhdHMtPmVzdGF0c1ttaWJbNF1dLnJldGFpbmVkX2J5dGVzLCBzaXplX3Qp OworCitzdGF0aWMgY29uc3QgY3RsX25hbWVkX25vZGVfdCAqCitzdGF0c19hcmVuYXNfaV9leHRl bnRzX2pfaW5kZXgodHNkbl90ICp0c2RuLCBjb25zdCBzaXplX3QgKm1pYiwKKyAgICBzaXplX3Qg bWlibGVuLCBzaXplX3QgaikgeworCWlmIChqID49IFNDX05QU0laRVMpIHsKKwkJcmV0dXJuIE5V TEw7CisJfQorCXJldHVybiBzdXBlcl9zdGF0c19hcmVuYXNfaV9leHRlbnRzX2pfbm9kZTsKK30K KworQ1RMX1JPX0NHRU4oY29uZmlnX3N0YXRzLCBzdGF0c19hcmVuYXNfaV9ocGFfc2hhcmRfbnB1 cmdlX3Bhc3NlcywKKyAgICBhcmVuYXNfaShtaWJbMl0pLT5hc3RhdHMtPmhwYXN0YXRzLm5vbmRl cml2ZWRfc3RhdHMubnB1cmdlX3Bhc3NlcywgdWludDY0X3QpOworQ1RMX1JPX0NHRU4oY29uZmln X3N0YXRzLCBzdGF0c19hcmVuYXNfaV9ocGFfc2hhcmRfbnB1cmdlcywKKyAgICBhcmVuYXNfaSht aWJbMl0pLT5hc3RhdHMtPmhwYXN0YXRzLm5vbmRlcml2ZWRfc3RhdHMubnB1cmdlcywgdWludDY0 X3QpOworQ1RMX1JPX0NHRU4oY29uZmlnX3N0YXRzLCBzdGF0c19hcmVuYXNfaV9ocGFfc2hhcmRf bmh1Z2lmaWVzLAorICAgIGFyZW5hc19pKG1pYlsyXSktPmFzdGF0cy0+aHBhc3RhdHMubm9uZGVy aXZlZF9zdGF0cy5uaHVnaWZpZXMsIHVpbnQ2NF90KTsKK0NUTF9ST19DR0VOKGNvbmZpZ19zdGF0 cywgc3RhdHNfYXJlbmFzX2lfaHBhX3NoYXJkX25kZWh1Z2lmaWVzLAorICAgIGFyZW5hc19pKG1p YlsyXSktPmFzdGF0cy0+aHBhc3RhdHMubm9uZGVyaXZlZF9zdGF0cy5uZGVodWdpZmllcywgdWlu dDY0X3QpOworCisvKiBGdWxsLCBub25odWdlICovCitDVExfUk9fQ0dFTihjb25maWdfc3RhdHMs IHN0YXRzX2FyZW5hc19pX2hwYV9zaGFyZF9mdWxsX3NsYWJzX25wYWdlc2xhYnNfbm9uaHVnZSwK KyAgICBhcmVuYXNfaShtaWJbMl0pLT5hc3RhdHMtPmhwYXN0YXRzLnBzc2V0X3N0YXRzLmZ1bGxf c2xhYnNbMF0ubnBhZ2VzbGFicywKKyAgICBzaXplX3QpOworQ1RMX1JPX0NHRU4oY29uZmlnX3N0 YXRzLCBzdGF0c19hcmVuYXNfaV9ocGFfc2hhcmRfZnVsbF9zbGFic19uYWN0aXZlX25vbmh1Z2Us CisgICAgYXJlbmFzX2kobWliWzJdKS0+YXN0YXRzLT5ocGFzdGF0cy5wc3NldF9zdGF0cy5mdWxs X3NsYWJzWzBdLm5hY3RpdmUsIHNpemVfdCk7CitDVExfUk9fQ0dFTihjb25maWdfc3RhdHMsIHN0 YXRzX2FyZW5hc19pX2hwYV9zaGFyZF9mdWxsX3NsYWJzX25kaXJ0eV9ub25odWdlLAorICAgIGFy ZW5hc19pKG1pYlsyXSktPmFzdGF0cy0+aHBhc3RhdHMucHNzZXRfc3RhdHMuZnVsbF9zbGFic1sw XS5uZGlydHksIHNpemVfdCk7CisKKy8qIEZ1bGwsIGh1Z2UgKi8KK0NUTF9ST19DR0VOKGNvbmZp Z19zdGF0cywgc3RhdHNfYXJlbmFzX2lfaHBhX3NoYXJkX2Z1bGxfc2xhYnNfbnBhZ2VzbGFic19o dWdlLAorICAgIGFyZW5hc19pKG1pYlsyXSktPmFzdGF0cy0+aHBhc3RhdHMucHNzZXRfc3RhdHMu ZnVsbF9zbGFic1sxXS5ucGFnZXNsYWJzLAorICAgIHNpemVfdCk7CitDVExfUk9fQ0dFTihjb25m aWdfc3RhdHMsIHN0YXRzX2FyZW5hc19pX2hwYV9zaGFyZF9mdWxsX3NsYWJzX25hY3RpdmVfaHVn ZSwKKyAgICBhcmVuYXNfaShtaWJbMl0pLT5hc3RhdHMtPmhwYXN0YXRzLnBzc2V0X3N0YXRzLmZ1 bGxfc2xhYnNbMV0ubmFjdGl2ZSwgc2l6ZV90KTsKK0NUTF9ST19DR0VOKGNvbmZpZ19zdGF0cywg c3RhdHNfYXJlbmFzX2lfaHBhX3NoYXJkX2Z1bGxfc2xhYnNfbmRpcnR5X2h1Z2UsCisgICAgYXJl bmFzX2kobWliWzJdKS0+YXN0YXRzLT5ocGFzdGF0cy5wc3NldF9zdGF0cy5mdWxsX3NsYWJzWzFd Lm5kaXJ0eSwgc2l6ZV90KTsKKworLyogRW1wdHksIG5vbmh1Z2UgKi8KK0NUTF9ST19DR0VOKGNv bmZpZ19zdGF0cywgc3RhdHNfYXJlbmFzX2lfaHBhX3NoYXJkX2VtcHR5X3NsYWJzX25wYWdlc2xh YnNfbm9uaHVnZSwKKyAgICBhcmVuYXNfaShtaWJbMl0pLT5hc3RhdHMtPmhwYXN0YXRzLnBzc2V0 X3N0YXRzLmVtcHR5X3NsYWJzWzBdLm5wYWdlc2xhYnMsCisgICAgc2l6ZV90KTsKK0NUTF9ST19D R0VOKGNvbmZpZ19zdGF0cywgc3RhdHNfYXJlbmFzX2lfaHBhX3NoYXJkX2VtcHR5X3NsYWJzX25h Y3RpdmVfbm9uaHVnZSwKKyAgICBhcmVuYXNfaShtaWJbMl0pLT5hc3RhdHMtPmhwYXN0YXRzLnBz c2V0X3N0YXRzLmVtcHR5X3NsYWJzWzBdLm5hY3RpdmUsIHNpemVfdCk7CitDVExfUk9fQ0dFTihj b25maWdfc3RhdHMsIHN0YXRzX2FyZW5hc19pX2hwYV9zaGFyZF9lbXB0eV9zbGFic19uZGlydHlf bm9uaHVnZSwKKyAgICBhcmVuYXNfaShtaWJbMl0pLT5hc3RhdHMtPmhwYXN0YXRzLnBzc2V0X3N0 YXRzLmVtcHR5X3NsYWJzWzBdLm5kaXJ0eSwgc2l6ZV90KTsKKworLyogRW1wdHksIGh1Z2UgKi8K K0NUTF9ST19DR0VOKGNvbmZpZ19zdGF0cywgc3RhdHNfYXJlbmFzX2lfaHBhX3NoYXJkX2VtcHR5 X3NsYWJzX25wYWdlc2xhYnNfaHVnZSwKKyAgICBhcmVuYXNfaShtaWJbMl0pLT5hc3RhdHMtPmhw YXN0YXRzLnBzc2V0X3N0YXRzLmVtcHR5X3NsYWJzWzFdLm5wYWdlc2xhYnMsCisgICAgc2l6ZV90 KTsKK0NUTF9ST19DR0VOKGNvbmZpZ19zdGF0cywgc3RhdHNfYXJlbmFzX2lfaHBhX3NoYXJkX2Vt cHR5X3NsYWJzX25hY3RpdmVfaHVnZSwKKyAgICBhcmVuYXNfaShtaWJbMl0pLT5hc3RhdHMtPmhw YXN0YXRzLnBzc2V0X3N0YXRzLmVtcHR5X3NsYWJzWzFdLm5hY3RpdmUsIHNpemVfdCk7CitDVExf Uk9fQ0dFTihjb25maWdfc3RhdHMsIHN0YXRzX2FyZW5hc19pX2hwYV9zaGFyZF9lbXB0eV9zbGFi c19uZGlydHlfaHVnZSwKKyAgICBhcmVuYXNfaShtaWJbMl0pLT5hc3RhdHMtPmhwYXN0YXRzLnBz c2V0X3N0YXRzLmVtcHR5X3NsYWJzWzFdLm5kaXJ0eSwgc2l6ZV90KTsKKworLyogTm9uZnVsbCwg bm9uaHVnZSAqLworQ1RMX1JPX0NHRU4oY29uZmlnX3N0YXRzLCBzdGF0c19hcmVuYXNfaV9ocGFf c2hhcmRfbm9uZnVsbF9zbGFic19qX25wYWdlc2xhYnNfbm9uaHVnZSwKKyAgICBhcmVuYXNfaSht aWJbMl0pLT5hc3RhdHMtPmhwYXN0YXRzLnBzc2V0X3N0YXRzLm5vbmZ1bGxfc2xhYnNbbWliWzVd XVswXS5ucGFnZXNsYWJzLAorICAgIHNpemVfdCk7CitDVExfUk9fQ0dFTihjb25maWdfc3RhdHMs IHN0YXRzX2FyZW5hc19pX2hwYV9zaGFyZF9ub25mdWxsX3NsYWJzX2pfbmFjdGl2ZV9ub25odWdl LAorICAgIGFyZW5hc19pKG1pYlsyXSktPmFzdGF0cy0+aHBhc3RhdHMucHNzZXRfc3RhdHMubm9u ZnVsbF9zbGFic1ttaWJbNV1dWzBdLm5hY3RpdmUsCisgICAgc2l6ZV90KTsKK0NUTF9ST19DR0VO KGNvbmZpZ19zdGF0cywgc3RhdHNfYXJlbmFzX2lfaHBhX3NoYXJkX25vbmZ1bGxfc2xhYnNfal9u ZGlydHlfbm9uaHVnZSwKKyAgICBhcmVuYXNfaShtaWJbMl0pLT5hc3RhdHMtPmhwYXN0YXRzLnBz c2V0X3N0YXRzLm5vbmZ1bGxfc2xhYnNbbWliWzVdXVswXS5uZGlydHksCisgICAgc2l6ZV90KTsK KworLyogTm9uZnVsbCwgaHVnZSAqLworQ1RMX1JPX0NHRU4oY29uZmlnX3N0YXRzLCBzdGF0c19h cmVuYXNfaV9ocGFfc2hhcmRfbm9uZnVsbF9zbGFic19qX25wYWdlc2xhYnNfaHVnZSwKKyAgICBh cmVuYXNfaShtaWJbMl0pLT5hc3RhdHMtPmhwYXN0YXRzLnBzc2V0X3N0YXRzLm5vbmZ1bGxfc2xh YnNbbWliWzVdXVsxXS5ucGFnZXNsYWJzLAorICAgIHNpemVfdCk7CitDVExfUk9fQ0dFTihjb25m aWdfc3RhdHMsIHN0YXRzX2FyZW5hc19pX2hwYV9zaGFyZF9ub25mdWxsX3NsYWJzX2pfbmFjdGl2 ZV9odWdlLAorICAgIGFyZW5hc19pKG1pYlsyXSktPmFzdGF0cy0+aHBhc3RhdHMucHNzZXRfc3Rh dHMubm9uZnVsbF9zbGFic1ttaWJbNV1dWzFdLm5hY3RpdmUsCisgICAgc2l6ZV90KTsKK0NUTF9S T19DR0VOKGNvbmZpZ19zdGF0cywgc3RhdHNfYXJlbmFzX2lfaHBhX3NoYXJkX25vbmZ1bGxfc2xh YnNfal9uZGlydHlfaHVnZSwKKyAgICBhcmVuYXNfaShtaWJbMl0pLT5hc3RhdHMtPmhwYXN0YXRz LnBzc2V0X3N0YXRzLm5vbmZ1bGxfc2xhYnNbbWliWzVdXVsxXS5uZGlydHksCisgICAgc2l6ZV90 KTsKKworc3RhdGljIGNvbnN0IGN0bF9uYW1lZF9ub2RlX3QgKgorc3RhdHNfYXJlbmFzX2lfaHBh X3NoYXJkX25vbmZ1bGxfc2xhYnNfal9pbmRleCh0c2RuX3QgKnRzZG4sIGNvbnN0IHNpemVfdCAq bWliLAorICAgIHNpemVfdCBtaWJsZW4sIHNpemVfdCBqKSB7CisJaWYgKGogPj0gUFNTRVRfTlBT SVpFUykgeworCQlyZXR1cm4gTlVMTDsKKwl9CisJcmV0dXJuIHN1cGVyX3N0YXRzX2FyZW5hc19p X2hwYV9zaGFyZF9ub25mdWxsX3NsYWJzX2pfbm9kZTsKK30KKworc3RhdGljIGJvb2wKK2N0bF9h cmVuYXNfaV92ZXJpZnkoc2l6ZV90IGkpIHsKKwlzaXplX3QgYSA9IGFyZW5hc19pMmFfaW1wbChp LCB0cnVlLCB0cnVlKTsKKwlpZiAoYSA9PSBVSU5UX01BWCB8fCAhY3RsX2FyZW5hcy0+YXJlbmFz W2FdLT5pbml0aWFsaXplZCkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwlyZXR1cm4gZmFsc2U7 Cit9CisKK3N0YXRpYyBjb25zdCBjdGxfbmFtZWRfbm9kZV90ICoKK3N0YXRzX2FyZW5hc19pX2lu ZGV4KHRzZG5fdCAqdHNkbiwgY29uc3Qgc2l6ZV90ICptaWIsCisgICAgc2l6ZV90IG1pYmxlbiwg c2l6ZV90IGkpIHsKKwljb25zdCBjdGxfbmFtZWRfbm9kZV90ICpyZXQ7CisKKwltYWxsb2NfbXV0 ZXhfbG9jayh0c2RuLCAmY3RsX210eCk7CisJaWYgKGN0bF9hcmVuYXNfaV92ZXJpZnkoaSkpIHsK KwkJcmV0ID0gTlVMTDsKKwkJZ290byBsYWJlbF9yZXR1cm47CisJfQorCisJcmV0ID0gc3VwZXJf c3RhdHNfYXJlbmFzX2lfbm9kZTsKK2xhYmVsX3JldHVybjoKKwltYWxsb2NfbXV0ZXhfdW5sb2Nr KHRzZG4sICZjdGxfbXR4KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50CitleHBlcmlt ZW50YWxfaG9va3NfaW5zdGFsbF9jdGwodHNkX3QgKnRzZCwgY29uc3Qgc2l6ZV90ICptaWIsIHNp emVfdCBtaWJsZW4sCisgICAgdm9pZCAqb2xkcCwgc2l6ZV90ICpvbGRsZW5wLCB2b2lkICpuZXdw LCBzaXplX3QgbmV3bGVuKSB7CisJaW50IHJldDsKKwlpZiAob2xkcCA9PSBOVUxMIHx8IG9sZGxl bnAgPT0gTlVMTHx8IG5ld3AgPT0gTlVMTCkgeworCQlyZXQgPSBFSU5WQUw7CisJCWdvdG8gbGFi ZWxfcmV0dXJuOworCX0KKwkvKgorCSAqIE5vdGU6IHRoaXMgaXMgYSAqcHJpdmF0ZSogc3RydWN0 LiAgVGhpcyBpcyBhbiBleHBlcmltZW50YWwgaW50ZXJmYWNlOworCSAqIGZvcmNpbmcgdGhlIHVz ZXIgdG8ga25vdyB0aGUgamVtYWxsb2MgaW50ZXJuYWxzIHdlbGwgZW5vdWdoIHRvCisJICogZXh0 cmFjdCB0aGUgQUJJIGhvcGVmdWxseSBlbnN1cmVzIG5vYm9keSBnZXRzIHRvbyBjb21mb3J0YWJs ZSB3aXRoCisJICogdGhpcyBBUEksIHdoaWNoIGNhbiBjaGFuZ2UgYXQgYSBtb21lbnQncyBub3Rp Y2UuCisJICovCisJaG9va3NfdCBob29rczsKKwlXUklURShob29rcywgaG9va3NfdCk7CisJdm9p ZCAqaGFuZGxlID0gaG9va19pbnN0YWxsKHRzZF90c2RuKHRzZCksICZob29rcyk7CisJaWYgKGhh bmRsZSA9PSBOVUxMKSB7CisJCXJldCA9IEVBR0FJTjsKKwkJZ290byBsYWJlbF9yZXR1cm47CisJ fQorCVJFQUQoaGFuZGxlLCB2b2lkICopOworCisJcmV0ID0gMDsKK2xhYmVsX3JldHVybjoKKwly ZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50CitleHBlcmltZW50YWxfaG9va3NfcmVtb3ZlX2N0 bCh0c2RfdCAqdHNkLCBjb25zdCBzaXplX3QgKm1pYiwgc2l6ZV90IG1pYmxlbiwKKyAgICB2b2lk ICpvbGRwLCBzaXplX3QgKm9sZGxlbnAsIHZvaWQgKm5ld3AsIHNpemVfdCBuZXdsZW4pIHsKKwlp bnQgcmV0OworCVdSSVRFT05MWSgpOworCXZvaWQgKmhhbmRsZSA9IE5VTEw7CisJV1JJVEUoaGFu ZGxlLCB2b2lkICopOworCWlmIChoYW5kbGUgPT0gTlVMTCkgeworCQlyZXQgPSBFSU5WQUw7CisJ CWdvdG8gbGFiZWxfcmV0dXJuOworCX0KKwlob29rX3JlbW92ZSh0c2RfdHNkbih0c2QpLCBoYW5k bGUpOworCXJldCA9IDA7CitsYWJlbF9yZXR1cm46CisJcmV0dXJuIHJldDsKK30KKworc3RhdGlj IGludAorZXhwZXJpbWVudGFsX3RocmVhZF9hY3Rpdml0eV9jYWxsYmFja19jdGwodHNkX3QgKnRz ZCwgY29uc3Qgc2l6ZV90ICptaWIsCisgICAgc2l6ZV90IG1pYmxlbiwgdm9pZCAqb2xkcCwgc2l6 ZV90ICpvbGRsZW5wLCB2b2lkICpuZXdwLCBzaXplX3QgbmV3bGVuKSB7CisJaW50IHJldDsKKwor CWlmICghY29uZmlnX3N0YXRzKSB7CisJCXJldHVybiBFTk9FTlQ7CisJfQorCisJYWN0aXZpdHlf Y2FsbGJhY2tfdGh1bmtfdCB0X29sZCA9IHRzZF9hY3Rpdml0eV9jYWxsYmFja190aHVua19nZXQo dHNkKTsKKwlSRUFEKHRfb2xkLCBhY3Rpdml0eV9jYWxsYmFja190aHVua190KTsKKworCWlmIChu ZXdwICE9IE5VTEwpIHsKKwkJLyoKKwkJICogVGhpcyBpbml0aWFsaXphdGlvbiBpcyB1bm5lY2Vz c2FyeS4gIElmIGl0J3Mgb21pdHRlZCwgdGhvdWdoLAorCQkgKiBjbGFuZyBnZXRzIGNvbmZ1c2Vk IGFuZCB3YXJucyBvbiB0aGUgc3Vic2VxdWVudCB1c2Ugb2YgdF9uZXcuCisJCSAqLworCQlhY3Rp dml0eV9jYWxsYmFja190aHVua190IHRfbmV3ID0ge05VTEwsIE5VTEx9OworCQlXUklURSh0X25l dywgYWN0aXZpdHlfY2FsbGJhY2tfdGh1bmtfdCk7CisJCXRzZF9hY3Rpdml0eV9jYWxsYmFja190 aHVua19zZXQodHNkLCB0X25ldyk7CisJfQorCXJldCA9IDA7CitsYWJlbF9yZXR1cm46CisJcmV0 dXJuIHJldDsKK30KKworLyoKKyAqIE91dHB1dCBzaXggbWVtb3J5IHV0aWxpemF0aW9uIGVudHJp ZXMgZm9yIGFuIGlucHV0IHBvaW50ZXIsIHRoZSBmaXJzdCBvbmUgb2YKKyAqIHR5cGUgKHZvaWQg KikgYW5kIHRoZSByZW1haW5pbmcgZml2ZSBvZiB0eXBlIHNpemVfdCwgZGVzY3JpYmluZyB0aGUg Zm9sbG93aW5nCisgKiAoaW4gdGhlIHNhbWUgb3JkZXIpOgorICoKKyAqIChhKSBtZW1vcnkgYWRk cmVzcyBvZiB0aGUgZXh0ZW50IGEgcG90ZW50aWFsIHJlYWxsb2NhdGlvbiB3b3VsZCBnbyBpbnRv LAorICogPT0gdGhlIGZpdmUgZmllbGRzIGJlbG93IGRlc2NyaWJlIGFib3V0IHRoZSBleHRlbnQg dGhlIHBvaW50ZXIgcmVzaWRlcyBpbiA9PQorICogKGIpIG51bWJlciBvZiBmcmVlIHJlZ2lvbnMg aW4gdGhlIGV4dGVudCwKKyAqIChjKSBudW1iZXIgb2YgcmVnaW9ucyBpbiB0aGUgZXh0ZW50LAor ICogKGQpIHNpemUgb2YgdGhlIGV4dGVudCBpbiB0ZXJtcyBvZiBieXRlcywKKyAqIChlKSB0b3Rh bCBudW1iZXIgb2YgZnJlZSByZWdpb25zIGluIHRoZSBiaW4gdGhlIGV4dGVudCBiZWxvbmdzIHRv LCBhbmQKKyAqIChmKSB0b3RhbCBudW1iZXIgb2YgcmVnaW9ucyBpbiB0aGUgYmluIHRoZSBleHRl bnQgYmVsb25ncyB0by4KKyAqCisgKiBOb3RlIHRoYXQgIihlKSIgYW5kICIoZikiIGFyZSBvbmx5 IGF2YWlsYWJsZSB3aGVuIHN0YXRzIGFyZSBlbmFibGVkOworICogb3RoZXJ3aXNlIHRoZWlyIHZh bHVlcyBhcmUgdW5kZWZpbmVkLgorICoKKyAqIFRoaXMgQVBJIGlzIG1haW5seSBpbnRlbmRlZCBm b3Igc21hbGwgY2xhc3MgYWxsb2NhdGlvbnMsIHdoZXJlIGV4dGVudHMgYXJlCisgKiB1c2VkIGFz IHNsYWIuICBOb3RlIHRoYXQgaWYgdGhlIGJpbiB0aGUgZXh0ZW50IGJlbG9uZ3MgdG8gaXMgY29t cGxldGVseQorICogZnVsbCwgIihhKSIgd2lsbCBiZSBOVUxMLgorICoKKyAqIEluIGNhc2Ugb2Yg bGFyZ2UgY2xhc3MgYWxsb2NhdGlvbnMsICIoYSkiIHdpbGwgYmUgTlVMTCwgYW5kICIoZSkiIGFu ZCAiKGYpIgorICogd2lsbCBiZSB6ZXJvIChpZiBzdGF0cyBhcmUgZW5hYmxlZDsgb3RoZXJ3aXNl IHVuZGVmaW5lZCkuICBUaGUgb3RoZXIgdGhyZWUKKyAqIGZpZWxkcyB3aWxsIGJlIHByb3Blcmx5 IHNldCB0aG91Z2ggdGhlIHZhbHVlcyBhcmUgdHJpdmlhbDogIihiKSIgd2lsbCBiZSAwLAorICog IihjKSIgd2lsbCBiZSAxLCBhbmQgIihkKSIgd2lsbCBiZSB0aGUgdXNhYmxlIHNpemUuCisgKgor ICogVGhlIGlucHV0IHBvaW50ZXIgYW5kIHNpemUgYXJlIHJlc3BlY3RpdmVseSBwYXNzZWQgaW4g YnkgbmV3cCBhbmQgbmV3bGVuLAorICogYW5kIHRoZSBvdXRwdXQgZmllbGRzIGFuZCBzaXplIGFy ZSByZXNwZWN0aXZlbHkgb2xkcCBhbmQgKm9sZGxlbnAuCisgKgorICogSXQgY2FuIGJlIGJlbmVm aWNpYWwgdG8gZGVmaW5lIHRoZSBmb2xsb3dpbmcgbWFjcm9zIHRvIG1ha2UgaXQgZWFzaWVyIHRv CisgKiBhY2Nlc3MgdGhlIG91dHB1dDoKKyAqCisgKiAjZGVmaW5lIFNMQUJDVVJfUkVBRChvdXQp ICgqKHZvaWQgKiopb3V0KQorICogI2RlZmluZSBDT1VOVFMob3V0KSAoKHNpemVfdCAqKSgodm9p ZCAqKilvdXQgKyAxKSkKKyAqICNkZWZpbmUgTkZSRUVfUkVBRChvdXQpIENPVU5UUyhvdXQpWzBd CisgKiAjZGVmaW5lIE5SRUdTX1JFQUQob3V0KSBDT1VOVFMob3V0KVsxXQorICogI2RlZmluZSBT SVpFX1JFQUQob3V0KSBDT1VOVFMob3V0KVsyXQorICogI2RlZmluZSBCSU5fTkZSRUVfUkVBRChv dXQpIENPVU5UUyhvdXQpWzNdCisgKiAjZGVmaW5lIEJJTl9OUkVHU19SRUFEKG91dCkgQ09VTlRT KG91dClbNF0KKyAqCisgKiBhbmQgdGhlbiB3cml0ZSBlLmcuIE5GUkVFX1JFQUQob2xkcCkgdG8g ZmV0Y2ggdGhlIG91dHB1dC4gIFNlZSB0aGUgdW5pdCB0ZXN0CisgKiB0ZXN0X3F1ZXJ5IGluIHRl c3QvdW5pdC9leHRlbnRfdXRpbC5jIGZvciBhbiBleGFtcGxlLgorICoKKyAqIEZvciBhIHR5cGlj YWwgZGVmcmFnbWVudGF0aW9uIHdvcmtmbG93IG1ha2luZyB1c2Ugb2YgdGhpcyBBUEkgZm9yCisg KiB1bmRlcnN0YW5kaW5nIHRoZSBmcmFnbWVudGF0aW9uIGxldmVsLCBwbGVhc2UgcmVmZXIgdG8g dGhlIGNvbW1lbnQgZm9yCisgKiBleHBlcmltZW50YWxfdXRpbGl6YXRpb25fYmF0Y2hfcXVlcnlf Y3RsLgorICoKKyAqIEl0J3MgdXAgdG8gdGhlIGFwcGxpY2F0aW9uIGhvdyB0byBkZXRlcm1pbmUg dGhlIHNpZ25pZmljYW5jZSBvZgorICogZnJhZ21lbnRhdGlvbiByZWx5aW5nIG9uIHRoZSBvdXRw dXRzIHJldHVybmVkLiAgUG9zc2libGUgY2hvaWNlcyBhcmU6CisgKgorICogKGEpIGlmIGV4dGVu dCB1dGlsaXphdGlvbiByYXRpbyBpcyBiZWxvdyBjZXJ0YWluIHRocmVzaG9sZCwKKyAqIChiKSBp ZiBleHRlbnQgbWVtb3J5IGNvbnN1bXB0aW9uIGlzIGFib3ZlIGNlcnRhaW4gdGhyZXNob2xkLAor ICogKGMpIGlmIGV4dGVudCB1dGlsaXphdGlvbiByYXRpbyBpcyBzaWduaWZpY2FudGx5IGJlbG93 IGJpbiB1dGlsaXphdGlvbiByYXRpbywKKyAqIChkKSBpZiBpbnB1dCBwb2ludGVyIGRldmlhdGVz IGEgbG90IGZyb20gcG90ZW50aWFsIHJlYWxsb2NhdGlvbiBhZGRyZXNzLCBvcgorICogKGUpIHNv bWUgc2VsZWN0aW9uL2NvbWJpbmF0aW9uIG9mIHRoZSBhYm92ZS4KKyAqCisgKiBUaGUgY2FsbGVy IG5lZWRzIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBpbnB1dC9vdXRwdXQgYXJndW1lbnRzIGFyZSB2 YWxpZCwKKyAqIGluIHBhcnRpY3VsYXIsIHRoYXQgdGhlIHNpemUgb2YgdGhlIG91dHB1dCBpcyBj b3JyZWN0LCBpLmUuOgorICoKKyAqICAgICAqb2xkbGVucCA9IHNpemVvZih2b2lkICopICsgc2l6 ZW9mKHNpemVfdCkgKiA1CisgKgorICogT3RoZXJ3aXNlLCB0aGUgZnVuY3Rpb24gaW1tZWRpYXRl bHkgcmV0dXJucyBFSU5WQUwgd2l0aG91dCB0b3VjaGluZyBhbnl0aGluZy4KKyAqCisgKiBJbiB0 aGUgcmFyZSBjYXNlIHdoZXJlIHRoZXJlJ3Mgbm8gYXNzb2NpYXRlZCBleHRlbnQgZm91bmQgZm9y IHRoZSBpbnB1dAorICogcG9pbnRlciwgdGhlIGZ1bmN0aW9uIHplcm9zIG91dCBhbGwgb3V0cHV0 IGZpZWxkcyBhbmQgcmV0dXJuLiAgUGxlYXNlIHJlZmVyCisgKiB0byB0aGUgY29tbWVudCBmb3Ig ZXhwZXJpbWVudGFsX3V0aWxpemF0aW9uX2JhdGNoX3F1ZXJ5X2N0bCB0byB1bmRlcnN0YW5kIHRo ZQorICogbW90aXZhdGlvbiBmcm9tIEMrKy4KKyAqLworc3RhdGljIGludAorZXhwZXJpbWVudGFs X3V0aWxpemF0aW9uX3F1ZXJ5X2N0bCh0c2RfdCAqdHNkLCBjb25zdCBzaXplX3QgKm1pYiwKKyAg ICBzaXplX3QgbWlibGVuLCB2b2lkICpvbGRwLCBzaXplX3QgKm9sZGxlbnAsIHZvaWQgKm5ld3As IHNpemVfdCBuZXdsZW4pIHsKKwlpbnQgcmV0OworCisJYXNzZXJ0KHNpemVvZihpbnNwZWN0X2V4 dGVudF91dGlsX3N0YXRzX3ZlcmJvc2VfdCkKKwkgICAgPT0gc2l6ZW9mKHZvaWQgKikgKyBzaXpl b2Yoc2l6ZV90KSAqIDUpOworCisJaWYgKG9sZHAgPT0gTlVMTCB8fCBvbGRsZW5wID09IE5VTEwK KwkgICAgfHwgKm9sZGxlbnAgIT0gc2l6ZW9mKGluc3BlY3RfZXh0ZW50X3V0aWxfc3RhdHNfdmVy Ym9zZV90KQorCSAgICB8fCBuZXdwID09IE5VTEwpIHsKKwkJcmV0ID0gRUlOVkFMOworCQlnb3Rv IGxhYmVsX3JldHVybjsKKwl9CisKKwl2b2lkICpwdHIgPSBOVUxMOworCVdSSVRFKHB0ciwgdm9p ZCAqKTsKKwlpbnNwZWN0X2V4dGVudF91dGlsX3N0YXRzX3ZlcmJvc2VfdCAqdXRpbF9zdGF0cwor CSAgICA9IChpbnNwZWN0X2V4dGVudF91dGlsX3N0YXRzX3ZlcmJvc2VfdCAqKW9sZHA7CisJaW5z cGVjdF9leHRlbnRfdXRpbF9zdGF0c192ZXJib3NlX2dldCh0c2RfdHNkbih0c2QpLCBwdHIsCisJ ICAgICZ1dGlsX3N0YXRzLT5uZnJlZSwgJnV0aWxfc3RhdHMtPm5yZWdzLCAmdXRpbF9zdGF0cy0+ c2l6ZSwKKwkgICAgJnV0aWxfc3RhdHMtPmJpbl9uZnJlZSwgJnV0aWxfc3RhdHMtPmJpbl9ucmVn cywKKwkgICAgJnV0aWxfc3RhdHMtPnNsYWJjdXJfYWRkcik7CisJcmV0ID0gMDsKKworbGFiZWxf cmV0dXJuOgorCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBHaXZlbiBhbiBpbnB1dCBhcnJheSBv ZiBwb2ludGVycywgb3V0cHV0IHRocmVlIG1lbW9yeSB1dGlsaXphdGlvbiBlbnRyaWVzIG9mCisg KiB0eXBlIHNpemVfdCBmb3IgZWFjaCBpbnB1dCBwb2ludGVyIGFib3V0IHRoZSBleHRlbnQgaXQg cmVzaWRlcyBpbjoKKyAqCisgKiAoYSkgbnVtYmVyIG9mIGZyZWUgcmVnaW9ucyBpbiB0aGUgZXh0 ZW50LAorICogKGIpIG51bWJlciBvZiByZWdpb25zIGluIHRoZSBleHRlbnQsIGFuZAorICogKGMp IHNpemUgb2YgdGhlIGV4dGVudCBpbiB0ZXJtcyBvZiBieXRlcy4KKyAqCisgKiBUaGlzIEFQSSBp cyBtYWlubHkgaW50ZW5kZWQgZm9yIHNtYWxsIGNsYXNzIGFsbG9jYXRpb25zLCB3aGVyZSBleHRl bnRzIGFyZQorICogdXNlZCBhcyBzbGFiLiAgSW4gY2FzZSBvZiBsYXJnZSBjbGFzcyBhbGxvY2F0 aW9ucywgdGhlIG91dHB1dHMgYXJlIHRyaXZpYWw6CisgKiAiKGEpIiB3aWxsIGJlIDAsICIoYiki IHdpbGwgYmUgMSwgYW5kICIoYykiIHdpbGwgYmUgdGhlIHVzYWJsZSBzaXplLgorICoKKyAqIE5v dGUgdGhhdCBtdWx0aXBsZSBpbnB1dCBwb2ludGVycyBtYXkgcmVzaWRlIG9uIGEgc2FtZSBleHRl bnQgc28gdGhlIG91dHB1dAorICogZmllbGRzIG1heSBjb250YWluIGR1cGxpY2F0ZXMuCisgKgor ICogVGhlIGZvcm1hdCBvZiB0aGUgaW5wdXQvb3V0cHV0IGxvb2tzIGxpa2U6CisgKgorICogaW5w dXRbMF06ICAxc3RfcG9pbnRlcl90b19xdWVyeQl8ICBvdXRwdXRbMF06IDFzdF9leHRlbnRfbl9m cmVlX3JlZ2lvbnMKKyAqCQkJCQl8ICBvdXRwdXRbMV06IDFzdF9leHRlbnRfbl9yZWdpb25zCisg KgkJCQkJfCAgb3V0cHV0WzJdOiAxc3RfZXh0ZW50X3NpemUKKyAqIGlucHV0WzFdOiAgMm5kX3Bv aW50ZXJfdG9fcXVlcnkJfCAgb3V0cHV0WzNdOiAybmRfZXh0ZW50X25fZnJlZV9yZWdpb25zCisg KgkJCQkJfCAgb3V0cHV0WzRdOiAybmRfZXh0ZW50X25fcmVnaW9ucworICoJCQkJCXwgIG91dHB1 dFs1XTogMm5kX2V4dGVudF9zaXplCisgKiAuLi4JCQkJCXwgIC4uLgorICoKKyAqIFRoZSBpbnB1 dCBhcnJheSBhbmQgc2l6ZSBhcmUgcmVzcGVjdGl2ZWx5IHBhc3NlZCBpbiBieSBuZXdwIGFuZCBu ZXdsZW4sIGFuZAorICogdGhlIG91dHB1dCBhcnJheSBhbmQgc2l6ZSBhcmUgcmVzcGVjdGl2ZWx5 IG9sZHAgYW5kICpvbGRsZW5wLgorICoKKyAqIEl0IGNhbiBiZSBiZW5lZmljaWFsIHRvIGRlZmlu ZSB0aGUgZm9sbG93aW5nIG1hY3JvcyB0byBtYWtlIGl0IGVhc2llciB0bworICogYWNjZXNzIHRo ZSBvdXRwdXQ6CisgKgorICogI2RlZmluZSBORlJFRV9SRUFEKG91dCwgaSkgb3V0WyhpKSAqIDNd CisgKiAjZGVmaW5lIE5SRUdTX1JFQUQob3V0LCBpKSBvdXRbKGkpICogMyArIDFdCisgKiAjZGVm aW5lIFNJWkVfUkVBRChvdXQsIGkpIG91dFsoaSkgKiAzICsgMl0KKyAqCisgKiBhbmQgdGhlbiB3 cml0ZSBlLmcuIE5GUkVFX1JFQUQob2xkcCwgaSkgdG8gZmV0Y2ggdGhlIG91dHB1dC4gIFNlZSB0 aGUgdW5pdAorICogdGVzdCB0ZXN0X2JhdGNoIGluIHRlc3QvdW5pdC9leHRlbnRfdXRpbC5jIGZv ciBhIGNvbmNyZXRlIGV4YW1wbGUuCisgKgorICogQSB0eXBpY2FsIHdvcmtmbG93IHdvdWxkIGJl IGNvbXBvc2VkIG9mIHRoZSBmb2xsb3dpbmcgc3RlcHM6CisgKgorICogKDEpIGZsdXNoIHRjYWNo ZTogbWFsbGN0bCgidGhyZWFkLnRjYWNoZS5mbHVzaCIsIC4uLikKKyAqICgyKSBpbml0aWFsaXpl IGlucHV0IGFycmF5IG9mIHBvaW50ZXJzIHRvIHF1ZXJ5IGZyYWdtZW50YXRpb24KKyAqICgzKSBh bGxvY2F0ZSBvdXRwdXQgYXJyYXkgdG8gaG9sZCB1dGlsaXphdGlvbiBzdGF0aXN0aWNzCisgKiAo NCkgcXVlcnkgdXRpbGl6YXRpb246IG1hbGxjdGwoImV4cGVyaW1lbnRhbC51dGlsaXphdGlvbi5i YXRjaF9xdWVyeSIsIC4uLikKKyAqICg1KSAob3B0aW9uYWwpIGRlY2lkZSBpZiBpdCdzIHdvcnRo d2hpbGUgdG8gZGVmcmFnbWVudDsgb3RoZXJ3aXNlIHN0b3AgaGVyZQorICogKDYpIGRpc2FibGUg dGNhY2hlOiBtYWxsY3RsKCJ0aHJlYWQudGNhY2hlLmVuYWJsZWQiLCAuLi4pCisgKiAoNykgZGVm cmFnbWVudCBhbGxvY2F0aW9ucyB3aXRoIHNpZ25pZmljYW50IGZyYWdtZW50YXRpb24sIGUuZy46 CisgKiAgICAgICAgIGZvciBlYWNoIGFsbG9jYXRpb24geworICogICAgICAgICAgICAgaWYgaXQn cyBmcmFnbWVudGVkIHsKKyAqICAgICAgICAgICAgICAgICBtYWxsb2MoLi4uKTsKKyAqICAgICAg ICAgICAgICAgICBtZW1jcHkoLi4uKTsKKyAqICAgICAgICAgICAgICAgICBmcmVlKC4uLik7Cisg KiAgICAgICAgICAgICB9CisgKiAgICAgICAgIH0KKyAqICg4KSBlbmFibGUgdGNhY2hlOiBtYWxs Y3RsKCJ0aHJlYWQudGNhY2hlLmVuYWJsZWQiLCAuLi4pCisgKgorICogVGhlIGFwcGxpY2F0aW9u IGNhbiBkZXRlcm1pbmUgdGhlIHNpZ25pZmljYW5jZSBvZiBmcmFnbWVudGF0aW9uIHRoZW1zZWx2 ZXMKKyAqIHJlbHlpbmcgb24gdGhlIHN0YXRpc3RpY3MgcmV0dXJuZWQsIGJvdGggYXQgdGhlIG92 ZXJhbGwgbGV2ZWwgaS5lLiBzdGVwICIoNSkiCisgKiBhbmQgYXQgaW5kaXZpZHVhbCBhbGxvY2F0 aW9uIGxldmVsIGkuZS4gd2l0aGluIHN0ZXAgIig3KSIuICBQb3NzaWJsZSBjaG9pY2VzCisgKiBh cmU6CisgKgorICogKGEpIHdoZXRoZXIgbWVtb3J5IHV0aWxpemF0aW9uIHJhdGlvIGlzIGJlbG93 IGNlcnRhaW4gdGhyZXNob2xkLAorICogKGIpIHdoZXRoZXIgbWVtb3J5IGNvbnN1bXB0aW9uIGlz IGFib3ZlIGNlcnRhaW4gdGhyZXNob2xkLCBvcgorICogKGMpIHNvbWUgY29tYmluYXRpb24gb2Yg dGhlIHR3by4KKyAqCisgKiBUaGUgY2FsbGVyIG5lZWRzIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBp bnB1dC9vdXRwdXQgYXJyYXlzIGFyZSB2YWxpZCBhbmQKKyAqIHRoZWlyIHNpemVzIGFyZSBwcm9w ZXIgYXMgd2VsbCBhcyBtYXRjaGVkLCBtZWFuaW5nOgorICoKKyAqIChhKSBuZXdsZW4gPSBuX3Bv aW50ZXJzICogc2l6ZW9mKGNvbnN0IHZvaWQgKikKKyAqIChiKSAqb2xkbGVucCA9IG5fcG9pbnRl cnMgKiBzaXplb2Yoc2l6ZV90KSAqIDMKKyAqIChjKSBuX3BvaW50ZXJzID4gMAorICoKKyAqIE90 aGVyd2lzZSwgdGhlIGZ1bmN0aW9uIGltbWVkaWF0ZWx5IHJldHVybnMgRUlOVkFMIHdpdGhvdXQg dG91Y2hpbmcgYW55dGhpbmcuCisgKgorICogSW4gdGhlIHJhcmUgY2FzZSB3aGVyZSB0aGVyZSdz IG5vIGFzc29jaWF0ZWQgZXh0ZW50IGZvdW5kIGZvciBzb21lIHBvaW50ZXJzLAorICogcmF0aGVy IHRoYW4gaW1tZWRpYXRlbHkgdGVybWluYXRpbmcgdGhlIGNvbXB1dGF0aW9uIGFuZCByYWlzaW5n IGFuIGVycm9yLAorICogdGhlIGZ1bmN0aW9uIHNpbXBseSB6ZXJvcyBvdXQgdGhlIGNvcnJlc3Bv bmRpbmcgb3V0cHV0IGZpZWxkcyBhbmQgY29udGludWVzCisgKiB0aGUgY29tcHV0YXRpb24gdW50 aWwgYWxsIGlucHV0IHBvaW50ZXJzIGFyZSBoYW5kbGVkLiAgVGhlIG1vdGl2YXRpb25zIG9mCisg KiBzdWNoIGEgZGVzaWduIGFyZSBhcyBmb2xsb3dzOgorICoKKyAqIChhKSBUaGUgZnVuY3Rpb24g YWx3YXlzIGVpdGhlciBwcm9jZXNzZXMgbm90aGluZyBvciBwcm9jZXNzZXMgZXZlcnl0aGluZywg YW5kCisgKiBuZXZlciBsZWF2ZXMgdGhlIG91dHB1dCBoYWxmIHRvdWNoZWQgYW5kIGhhbGYgdW50 b3VjaGVkLgorICoKKyAqIChiKSBJdCBmYWNpbGl0YXRlcyB1c2FnZSBuZWVkcyBlc3BlY2lhbGx5 IGNvbW1vbiBpbiBDKysuICBBIHZhc3QgdmFyaWV0eSBvZgorICogQysrIG9iamVjdHMgYXJlIGlu c3RhbnRpYXRlZCB3aXRoIG11bHRpcGxlIGR5bmFtaWMgbWVtb3J5IGFsbG9jYXRpb25zLiAgRm9y CisgKiBleGFtcGxlLCBzdGQ6OnN0cmluZyBhbmQgc3RkOjp2ZWN0b3IgdHlwaWNhbGx5IHVzZSBh dCBsZWFzdCB0d28gYWxsb2NhdGlvbnMsCisgKiBvbmUgZm9yIHRoZSBtZXRhZGF0YSBhbmQgb25l IGZvciB0aGUgYWN0dWFsIGNvbnRlbnQuICBPdGhlciB0eXBlcyBtYXkgdXNlCisgKiBldmVuIG1v cmUgYWxsb2NhdGlvbnMuICBXaGVuIGlucXVpcmluZyBhYm91dCB1dGlsaXphdGlvbiBzdGF0aXN0 aWNzLCB0aGUKKyAqIGNhbGxlciBvZnRlbiB3YW50cyB0byBleGFtaW5lIGludG8gYWxsIHN1Y2gg YWxsb2NhdGlvbnMsIGVzcGVjaWFsbHkgaW50ZXJuYWwKKyAqIG9uZShzKSwgcmF0aGVyIHRoYW4g anVzdCB0aGUgdG9wbW9zdCBvbmUuICBUaGUgaXNzdWUgY29tZXMgd2hlbiBzb21lCisgKiBpbXBs ZW1lbnRhdGlvbnMgZG8gY2VydGFpbiBvcHRpbWl6YXRpb25zIHRvIHJlZHVjZS9hZ2dyZWdhdGUg c29tZSBpbnRlcm5hbAorICogYWxsb2NhdGlvbnMsIGUuZy4gcHV0dGluZyBzaG9ydCBzdHJpbmdz IGRpcmVjdGx5IGludG8gdGhlIG1ldGFkYXRhLCBhbmQgc3VjaAorICogZGVjaXNpb25zIGFyZSBu b3Qga25vd24gdG8gdGhlIGNhbGxlci4gIFRoZXJlZm9yZSwgd2UgcGVybWl0IHBvaW50ZXJzIHRv CisgKiBtZW1vcnkgdXNhZ2VzIHRoYXQgbWF5IG5vdCBiZSByZXR1cm5lZCBieSBwcmV2aW91cyBt YWxsb2MgY2FsbHMsIGFuZCB3ZQorICogcHJvdmlkZSB0aGUgY2FsbGVyIGEgY29udmVuaWVudCB3 YXkgdG8gaWRlbnRpZnkgc3VjaCBjYXNlcy4KKyAqLworc3RhdGljIGludAorZXhwZXJpbWVudGFs X3V0aWxpemF0aW9uX2JhdGNoX3F1ZXJ5X2N0bCh0c2RfdCAqdHNkLCBjb25zdCBzaXplX3QgKm1p YiwKKyAgICBzaXplX3QgbWlibGVuLCB2b2lkICpvbGRwLCBzaXplX3QgKm9sZGxlbnAsIHZvaWQg Km5ld3AsIHNpemVfdCBuZXdsZW4pIHsKKwlpbnQgcmV0OworCisJYXNzZXJ0KHNpemVvZihpbnNw ZWN0X2V4dGVudF91dGlsX3N0YXRzX3QpID09IHNpemVvZihzaXplX3QpICogMyk7CisKKwljb25z dCBzaXplX3QgbGVuID0gbmV3bGVuIC8gc2l6ZW9mKGNvbnN0IHZvaWQgKik7CisJaWYgKG9sZHAg PT0gTlVMTCB8fCBvbGRsZW5wID09IE5VTEwgfHwgbmV3cCA9PSBOVUxMIHx8IG5ld2xlbiA9PSAw CisJICAgIHx8IG5ld2xlbiAhPSBsZW4gKiBzaXplb2YoY29uc3Qgdm9pZCAqKQorCSAgICB8fCAq b2xkbGVucCAhPSBsZW4gKiBzaXplb2YoaW5zcGVjdF9leHRlbnRfdXRpbF9zdGF0c190KSkgewor CQlyZXQgPSBFSU5WQUw7CisJCWdvdG8gbGFiZWxfcmV0dXJuOworCX0KKworCXZvaWQgKipwdHJz ID0gKHZvaWQgKiopbmV3cDsKKwlpbnNwZWN0X2V4dGVudF91dGlsX3N0YXRzX3QgKnV0aWxfc3Rh dHMgPQorCSAgICAoaW5zcGVjdF9leHRlbnRfdXRpbF9zdGF0c190ICopb2xkcDsKKwlzaXplX3Qg aTsKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKKwkJaW5zcGVjdF9leHRlbnRfdXRpbF9z dGF0c19nZXQodHNkX3RzZG4odHNkKSwgcHRyc1tpXSwKKwkJICAgICZ1dGlsX3N0YXRzW2ldLm5m cmVlLCAmdXRpbF9zdGF0c1tpXS5ucmVncywKKwkJICAgICZ1dGlsX3N0YXRzW2ldLnNpemUpOwor CX0KKwlyZXQgPSAwOworCitsYWJlbF9yZXR1cm46CisJcmV0dXJuIHJldDsKK30KKworc3RhdGlj IGNvbnN0IGN0bF9uYW1lZF9ub2RlX3QgKgorZXhwZXJpbWVudGFsX2FyZW5hc19pX2luZGV4KHRz ZG5fdCAqdHNkbiwgY29uc3Qgc2l6ZV90ICptaWIsCisgICAgc2l6ZV90IG1pYmxlbiwgc2l6ZV90 IGkpIHsKKwljb25zdCBjdGxfbmFtZWRfbm9kZV90ICpyZXQ7CisKKwltYWxsb2NfbXV0ZXhfbG9j ayh0c2RuLCAmY3RsX210eCk7CisJaWYgKGN0bF9hcmVuYXNfaV92ZXJpZnkoaSkpIHsKKwkJcmV0 ID0gTlVMTDsKKwkJZ290byBsYWJlbF9yZXR1cm47CisJfQorCXJldCA9IHN1cGVyX2V4cGVyaW1l bnRhbF9hcmVuYXNfaV9ub2RlOworbGFiZWxfcmV0dXJuOgorCW1hbGxvY19tdXRleF91bmxvY2so dHNkbiwgJmN0bF9tdHgpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQKK2V4cGVyaW1l bnRhbF9hcmVuYXNfaV9wYWN0aXZlcF9jdGwodHNkX3QgKnRzZCwgY29uc3Qgc2l6ZV90ICptaWIs CisgICAgc2l6ZV90IG1pYmxlbiwgdm9pZCAqb2xkcCwgc2l6ZV90ICpvbGRsZW5wLCB2b2lkICpu ZXdwLCBzaXplX3QgbmV3bGVuKSB7CisJaWYgKCFjb25maWdfc3RhdHMpIHsKKwkJcmV0dXJuIEVO T0VOVDsKKwl9CisJaWYgKG9sZHAgPT0gTlVMTCB8fCBvbGRsZW5wID09IE5VTEwgfHwgKm9sZGxl bnAgIT0gc2l6ZW9mKHNpemVfdCAqKSkgeworCQlyZXR1cm4gRUlOVkFMOworCX0KKworCXVuc2ln bmVkIGFyZW5hX2luZDsKKwlhcmVuYV90ICphcmVuYTsKKwlpbnQgcmV0OworCXNpemVfdCAqcGFj dGl2ZXA7CisKKwltYWxsb2NfbXV0ZXhfbG9jayh0c2RfdHNkbih0c2QpLCAmY3RsX210eCk7CisJ UkVBRE9OTFkoKTsKKwlNSUJfVU5TSUdORUQoYXJlbmFfaW5kLCAyKTsKKwlpZiAoYXJlbmFfaW5k IDwgbmFyZW5hc190b3RhbF9nZXQoKSAmJiAoYXJlbmEgPQorCSAgICBhcmVuYV9nZXQodHNkX3Rz ZG4odHNkKSwgYXJlbmFfaW5kLCBmYWxzZSkpICE9IE5VTEwpIHsKKyNpZiBkZWZpbmVkKEpFTUFM TE9DX0dDQ19BVE9NSUNfQVRPTUlDUykgfHwJCQkJXAorICAgIGRlZmluZWQoSkVNQUxMT0NfR0ND X1NZTkNfQVRPTUlDUykgfHwgZGVmaW5lZChfTVNDX1ZFUikKKwkJLyogRXhwb3NlIHRoZSB1bmRl cmx5aW5nIGNvdW50ZXIgZm9yIGZhc3QgcmVhZC4gKi8KKwkJcGFjdGl2ZXAgPSAoc2l6ZV90ICop JihhcmVuYS0+cGFfc2hhcmQubmFjdGl2ZS5yZXByKTsKKwkJUkVBRChwYWN0aXZlcCwgc2l6ZV90 ICopOworCQlyZXQgPSAwOworI2Vsc2UKKwkJcmV0ID0gRUZBVUxUOworI2VuZGlmCisJfSBlbHNl IHsKKwkJcmV0ID0gRUZBVUxUOworCX0KK2xhYmVsX3JldHVybjoKKwltYWxsb2NfbXV0ZXhfdW5s b2NrKHRzZF90c2RuKHRzZCksICZjdGxfbXR4KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMg aW50CitleHBlcmltZW50YWxfcHJvZl9yZWNlbnRfYWxsb2NfbWF4X2N0bCh0c2RfdCAqdHNkLCBj b25zdCBzaXplX3QgKm1pYiwKKyAgICBzaXplX3QgbWlibGVuLCB2b2lkICpvbGRwLCBzaXplX3Qg Km9sZGxlbnAsIHZvaWQgKm5ld3AsIHNpemVfdCBuZXdsZW4pIHsKKwlpbnQgcmV0OworCisJaWYg KCEoY29uZmlnX3Byb2YgJiYgb3B0X3Byb2YpKSB7CisJCXJldCA9IEVOT0VOVDsKKwkJZ290byBs YWJlbF9yZXR1cm47CisJfQorCisJc3NpemVfdCBvbGRfbWF4OworCWlmIChuZXdwICE9IE5VTEwp IHsKKwkJaWYgKG5ld2xlbiAhPSBzaXplb2Yoc3NpemVfdCkpIHsKKwkJCXJldCA9IEVJTlZBTDsK KwkJCWdvdG8gbGFiZWxfcmV0dXJuOworCQl9CisJCXNzaXplX3QgbWF4ID0gKihzc2l6ZV90ICop bmV3cDsKKwkJaWYgKG1heCA8IC0xKSB7CisJCQlyZXQgPSBFSU5WQUw7CisJCQlnb3RvIGxhYmVs X3JldHVybjsKKwkJfQorCQlvbGRfbWF4ID0gcHJvZl9yZWNlbnRfYWxsb2NfbWF4X2N0bF93cml0 ZSh0c2QsIG1heCk7CisJfSBlbHNlIHsKKwkJb2xkX21heCA9IHByb2ZfcmVjZW50X2FsbG9jX21h eF9jdGxfcmVhZCgpOworCX0KKwlSRUFEKG9sZF9tYXgsIHNzaXplX3QpOworCisJcmV0ID0gMDsK KworbGFiZWxfcmV0dXJuOgorCXJldHVybiByZXQ7Cit9CisKK3R5cGVkZWYgc3RydWN0IHdyaXRl X2NiX3BhY2tldF9zIHdyaXRlX2NiX3BhY2tldF90Oworc3RydWN0IHdyaXRlX2NiX3BhY2tldF9z IHsKKwl3cml0ZV9jYl90ICp3cml0ZV9jYjsKKwl2b2lkICpjYm9wYXF1ZTsKK307CisKK3N0YXRp YyBpbnQKK2V4cGVyaW1lbnRhbF9wcm9mX3JlY2VudF9hbGxvY19kdW1wX2N0bCh0c2RfdCAqdHNk LCBjb25zdCBzaXplX3QgKm1pYiwKKyAgICBzaXplX3QgbWlibGVuLCB2b2lkICpvbGRwLCBzaXpl X3QgKm9sZGxlbnAsIHZvaWQgKm5ld3AsIHNpemVfdCBuZXdsZW4pIHsKKwlpbnQgcmV0OworCisJ aWYgKCEoY29uZmlnX3Byb2YgJiYgb3B0X3Byb2YpKSB7CisJCXJldCA9IEVOT0VOVDsKKwkJZ290 byBsYWJlbF9yZXR1cm47CisJfQorCisJYXNzZXJ0KHNpemVvZih3cml0ZV9jYl9wYWNrZXRfdCkg PT0gc2l6ZW9mKHZvaWQgKikgKiAyKTsKKworCVdSSVRFT05MWSgpOworCXdyaXRlX2NiX3BhY2tl dF90IHdyaXRlX2NiX3BhY2tldDsKKwlBU1NVUkVEX1dSSVRFKHdyaXRlX2NiX3BhY2tldCwgd3Jp dGVfY2JfcGFja2V0X3QpOworCisJcHJvZl9yZWNlbnRfYWxsb2NfZHVtcCh0c2QsIHdyaXRlX2Ni X3BhY2tldC53cml0ZV9jYiwKKwkgICAgd3JpdGVfY2JfcGFja2V0LmNib3BhcXVlKTsKKworCXJl dCA9IDA7CisKK2xhYmVsX3JldHVybjoKKwlyZXR1cm4gcmV0OworfQorCit0eXBlZGVmIHN0cnVj dCBiYXRjaF9hbGxvY19wYWNrZXRfcyBiYXRjaF9hbGxvY19wYWNrZXRfdDsKK3N0cnVjdCBiYXRj aF9hbGxvY19wYWNrZXRfcyB7CisJdm9pZCAqKnB0cnM7CisJc2l6ZV90IG51bTsKKwlzaXplX3Qg c2l6ZTsKKwlpbnQgZmxhZ3M7Cit9OworCitzdGF0aWMgaW50CitleHBlcmltZW50YWxfYmF0Y2hf YWxsb2NfY3RsKHRzZF90ICp0c2QsIGNvbnN0IHNpemVfdCAqbWliLAorICAgIHNpemVfdCBtaWJs ZW4sIHZvaWQgKm9sZHAsIHNpemVfdCAqb2xkbGVucCwgdm9pZCAqbmV3cCwgc2l6ZV90IG5ld2xl bikgeworCWludCByZXQ7CisKKwlWRVJJRllfUkVBRChzaXplX3QpOworCisJYmF0Y2hfYWxsb2Nf cGFja2V0X3QgYmF0Y2hfYWxsb2NfcGFja2V0OworCUFTU1VSRURfV1JJVEUoYmF0Y2hfYWxsb2Nf cGFja2V0LCBiYXRjaF9hbGxvY19wYWNrZXRfdCk7CisJc2l6ZV90IGZpbGxlZCA9IGJhdGNoX2Fs bG9jKGJhdGNoX2FsbG9jX3BhY2tldC5wdHJzLAorCSAgICBiYXRjaF9hbGxvY19wYWNrZXQubnVt LCBiYXRjaF9hbGxvY19wYWNrZXQuc2l6ZSwKKwkgICAgYmF0Y2hfYWxsb2NfcGFja2V0LmZsYWdz KTsKKwlSRUFEKGZpbGxlZCwgc2l6ZV90KTsKKworCXJldCA9IDA7CisKK2xhYmVsX3JldHVybjoK KwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50Citwcm9mX3N0YXRzX2JpbnNfaV9saXZlX2N0 bCh0c2RfdCAqdHNkLCBjb25zdCBzaXplX3QgKm1pYiwgc2l6ZV90IG1pYmxlbiwKKyAgICB2b2lk ICpvbGRwLCBzaXplX3QgKm9sZGxlbnAsIHZvaWQgKm5ld3AsIHNpemVfdCBuZXdsZW4pIHsKKwlp bnQgcmV0OworCXVuc2lnbmVkIGJpbmluZDsKKwlwcm9mX3N0YXRzX3Qgc3RhdHM7CisKKwlpZiAo IShjb25maWdfcHJvZiAmJiBvcHRfcHJvZiAmJiBvcHRfcHJvZl9zdGF0cykpIHsKKwkJcmV0ID0g RU5PRU5UOworCQlnb3RvIGxhYmVsX3JldHVybjsKKwl9CisKKwlSRUFET05MWSgpOworCU1JQl9V TlNJR05FRChiaW5pbmQsIDMpOworCWlmIChiaW5pbmQgPj0gU0NfTkJJTlMpIHsKKwkJcmV0ID0g RUlOVkFMOworCQlnb3RvIGxhYmVsX3JldHVybjsKKwl9CisJcHJvZl9zdGF0c19nZXRfbGl2ZSh0 c2QsIChzemluZF90KWJpbmluZCwgJnN0YXRzKTsKKwlSRUFEKHN0YXRzLCBwcm9mX3N0YXRzX3Qp OworCisJcmV0ID0gMDsKK2xhYmVsX3JldHVybjoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMg aW50Citwcm9mX3N0YXRzX2JpbnNfaV9hY2N1bV9jdGwodHNkX3QgKnRzZCwgY29uc3Qgc2l6ZV90 ICptaWIsIHNpemVfdCBtaWJsZW4sCisgICAgdm9pZCAqb2xkcCwgc2l6ZV90ICpvbGRsZW5wLCB2 b2lkICpuZXdwLCBzaXplX3QgbmV3bGVuKSB7CisJaW50IHJldDsKKwl1bnNpZ25lZCBiaW5pbmQ7 CisJcHJvZl9zdGF0c190IHN0YXRzOworCisJaWYgKCEoY29uZmlnX3Byb2YgJiYgb3B0X3Byb2Yg JiYgb3B0X3Byb2Zfc3RhdHMpKSB7CisJCXJldCA9IEVOT0VOVDsKKwkJZ290byBsYWJlbF9yZXR1 cm47CisJfQorCisJUkVBRE9OTFkoKTsKKwlNSUJfVU5TSUdORUQoYmluaW5kLCAzKTsKKwlpZiAo YmluaW5kID49IFNDX05CSU5TKSB7CisJCXJldCA9IEVJTlZBTDsKKwkJZ290byBsYWJlbF9yZXR1 cm47CisJfQorCXByb2Zfc3RhdHNfZ2V0X2FjY3VtKHRzZCwgKHN6aW5kX3QpYmluaW5kLCAmc3Rh dHMpOworCVJFQUQoc3RhdHMsIHByb2Zfc3RhdHNfdCk7CisKKwlyZXQgPSAwOworbGFiZWxfcmV0 dXJuOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBjb25zdCBjdGxfbmFtZWRfbm9kZV90ICoK K3Byb2Zfc3RhdHNfYmluc19pX2luZGV4KHRzZG5fdCAqdHNkbiwgY29uc3Qgc2l6ZV90ICptaWIs IHNpemVfdCBtaWJsZW4sCisgICAgc2l6ZV90IGkpIHsKKwlpZiAoIShjb25maWdfcHJvZiAmJiBv cHRfcHJvZiAmJiBvcHRfcHJvZl9zdGF0cykpIHsKKwkJcmV0dXJuIE5VTEw7CisJfQorCWlmIChp ID49IFNDX05CSU5TKSB7CisJCXJldHVybiBOVUxMOworCX0KKwlyZXR1cm4gc3VwZXJfcHJvZl9z dGF0c19iaW5zX2lfbm9kZTsKK30KKworc3RhdGljIGludAorcHJvZl9zdGF0c19sZXh0ZW50c19p X2xpdmVfY3RsKHRzZF90ICp0c2QsIGNvbnN0IHNpemVfdCAqbWliLCBzaXplX3QgbWlibGVuLAor ICAgIHZvaWQgKm9sZHAsIHNpemVfdCAqb2xkbGVucCwgdm9pZCAqbmV3cCwgc2l6ZV90IG5ld2xl bikgeworCWludCByZXQ7CisJdW5zaWduZWQgbGV4dGVudF9pbmQ7CisJcHJvZl9zdGF0c190IHN0 YXRzOworCisJaWYgKCEoY29uZmlnX3Byb2YgJiYgb3B0X3Byb2YgJiYgb3B0X3Byb2Zfc3RhdHMp KSB7CisJCXJldCA9IEVOT0VOVDsKKwkJZ290byBsYWJlbF9yZXR1cm47CisJfQorCisJUkVBRE9O TFkoKTsKKwlNSUJfVU5TSUdORUQobGV4dGVudF9pbmQsIDMpOworCWlmIChsZXh0ZW50X2luZCA+ PSBTQ19OU0laRVMgLSBTQ19OQklOUykgeworCQlyZXQgPSBFSU5WQUw7CisJCWdvdG8gbGFiZWxf cmV0dXJuOworCX0KKwlwcm9mX3N0YXRzX2dldF9saXZlKHRzZCwgKHN6aW5kX3QpKGxleHRlbnRf aW5kICsgU0NfTkJJTlMpLCAmc3RhdHMpOworCVJFQUQoc3RhdHMsIHByb2Zfc3RhdHNfdCk7CisK KwlyZXQgPSAwOworbGFiZWxfcmV0dXJuOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQK K3Byb2Zfc3RhdHNfbGV4dGVudHNfaV9hY2N1bV9jdGwodHNkX3QgKnRzZCwgY29uc3Qgc2l6ZV90 ICptaWIsIHNpemVfdCBtaWJsZW4sCisgICAgdm9pZCAqb2xkcCwgc2l6ZV90ICpvbGRsZW5wLCB2 b2lkICpuZXdwLCBzaXplX3QgbmV3bGVuKSB7CisJaW50IHJldDsKKwl1bnNpZ25lZCBsZXh0ZW50 X2luZDsKKwlwcm9mX3N0YXRzX3Qgc3RhdHM7CisKKwlpZiAoIShjb25maWdfcHJvZiAmJiBvcHRf cHJvZiAmJiBvcHRfcHJvZl9zdGF0cykpIHsKKwkJcmV0ID0gRU5PRU5UOworCQlnb3RvIGxhYmVs X3JldHVybjsKKwl9CisKKwlSRUFET05MWSgpOworCU1JQl9VTlNJR05FRChsZXh0ZW50X2luZCwg Myk7CisJaWYgKGxleHRlbnRfaW5kID49IFNDX05TSVpFUyAtIFNDX05CSU5TKSB7CisJCXJldCA9 IEVJTlZBTDsKKwkJZ290byBsYWJlbF9yZXR1cm47CisJfQorCXByb2Zfc3RhdHNfZ2V0X2FjY3Vt KHRzZCwgKHN6aW5kX3QpKGxleHRlbnRfaW5kICsgU0NfTkJJTlMpLCAmc3RhdHMpOworCVJFQUQo c3RhdHMsIHByb2Zfc3RhdHNfdCk7CisKKwlyZXQgPSAwOworbGFiZWxfcmV0dXJuOgorCXJldHVy biByZXQ7Cit9CisKK3N0YXRpYyBjb25zdCBjdGxfbmFtZWRfbm9kZV90ICoKK3Byb2Zfc3RhdHNf bGV4dGVudHNfaV9pbmRleCh0c2RuX3QgKnRzZG4sIGNvbnN0IHNpemVfdCAqbWliLCBzaXplX3Qg bWlibGVuLAorICAgIHNpemVfdCBpKSB7CisJaWYgKCEoY29uZmlnX3Byb2YgJiYgb3B0X3Byb2Yg JiYgb3B0X3Byb2Zfc3RhdHMpKSB7CisJCXJldHVybiBOVUxMOworCX0KKwlpZiAoaSA+PSBTQ19O U0laRVMgLSBTQ19OQklOUykgeworCQlyZXR1cm4gTlVMTDsKKwl9CisJcmV0dXJuIHN1cGVyX3By b2Zfc3RhdHNfbGV4dGVudHNfaV9ub2RlOworfQoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMu My4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3NyYy9kZWNheS5jIGIvMzg5LWRzLWJhc2UtMy4zLjAt YnVpbGQvamVtYWxsb2MtNS4zLjAvc3JjL2RlY2F5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMC4uZDgwMWIyYgotLS0gL2Rldi9udWxsCisrKyBiLzM4OS1kcy1iYXNlLTMuMy4w LWJ1aWxkL2plbWFsbG9jLTUuMy4wL3NyYy9kZWNheS5jCkBAIC0wLDAgKzEsMjk1IEBACisjaW5j bHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvamVtYWxsb2NfcHJlYW1ibGUuaCIKKyNpbmNsdWRlICJq ZW1hbGxvYy9pbnRlcm5hbC9qZW1hbGxvY19pbnRlcm5hbF9pbmNsdWRlcy5oIgorCisjaW5jbHVk ZSAiamVtYWxsb2MvaW50ZXJuYWwvZGVjYXkuaCIKKworc3RhdGljIGNvbnN0IHVpbnQ2NF90IGhf c3RlcHNbU01PT1RIU1RFUF9OU1RFUFNdID0geworI2RlZmluZSBTVEVQKHN0ZXAsIGgsIHgsIHkp CQkJXAorCQloLAorCQlTTU9PVEhTVEVQCisjdW5kZWYgU1RFUAorfTsKKworLyoKKyAqIEdlbmVy YXRlIGEgbmV3IGRlYWRsaW5lIHRoYXQgaXMgdW5pZm9ybWx5IHJhbmRvbSB3aXRoaW4gdGhlIG5l eHQgZXBvY2ggYWZ0ZXIKKyAqIHRoZSBjdXJyZW50IG9uZS4KKyAqLwordm9pZAorZGVjYXlfZGVh ZGxpbmVfaW5pdChkZWNheV90ICpkZWNheSkgeworCW5zdGltZV9jb3B5KCZkZWNheS0+ZGVhZGxp bmUsICZkZWNheS0+ZXBvY2gpOworCW5zdGltZV9hZGQoJmRlY2F5LT5kZWFkbGluZSwgJmRlY2F5 LT5pbnRlcnZhbCk7CisJaWYgKGRlY2F5X21zX3JlYWQoZGVjYXkpID4gMCkgeworCQluc3RpbWVf dCBqaXR0ZXI7CisKKwkJbnN0aW1lX2luaXQoJmppdHRlciwgcHJuZ19yYW5nZV91NjQoJmRlY2F5 LT5qaXR0ZXJfc3RhdGUsCisJCSAgICBuc3RpbWVfbnMoJmRlY2F5LT5pbnRlcnZhbCkpKTsKKwkJ bnN0aW1lX2FkZCgmZGVjYXktPmRlYWRsaW5lLCAmaml0dGVyKTsKKwl9Cit9CisKK3ZvaWQKK2Rl Y2F5X3JlaW5pdChkZWNheV90ICpkZWNheSwgbnN0aW1lX3QgKmN1cl90aW1lLCBzc2l6ZV90IGRl Y2F5X21zKSB7CisJYXRvbWljX3N0b3JlX3pkKCZkZWNheS0+dGltZV9tcywgZGVjYXlfbXMsIEFU T01JQ19SRUxBWEVEKTsKKwlpZiAoZGVjYXlfbXMgPiAwKSB7CisJCW5zdGltZV9pbml0KCZkZWNh eS0+aW50ZXJ2YWwsICh1aW50NjRfdClkZWNheV9tcyAqCisJCSAgICBLUVUoMTAwMDAwMCkpOwor CQluc3RpbWVfaWRpdmlkZSgmZGVjYXktPmludGVydmFsLCBTTU9PVEhTVEVQX05TVEVQUyk7CisJ fQorCisJbnN0aW1lX2NvcHkoJmRlY2F5LT5lcG9jaCwgY3VyX3RpbWUpOworCWRlY2F5LT5qaXR0 ZXJfc3RhdGUgPSAodWludDY0X3QpKHVpbnRwdHJfdClkZWNheTsKKwlkZWNheV9kZWFkbGluZV9p bml0KGRlY2F5KTsKKwlkZWNheS0+bnVucHVyZ2VkID0gMDsKKwltZW1zZXQoZGVjYXktPmJhY2ts b2csIDAsIFNNT09USFNURVBfTlNURVBTICogc2l6ZW9mKHNpemVfdCkpOworfQorCitib29sCitk ZWNheV9pbml0KGRlY2F5X3QgKmRlY2F5LCBuc3RpbWVfdCAqY3VyX3RpbWUsIHNzaXplX3QgZGVj YXlfbXMpIHsKKwlpZiAoY29uZmlnX2RlYnVnKSB7CisJCWZvciAoc2l6ZV90IGkgPSAwOyBpIDwg c2l6ZW9mKGRlY2F5X3QpOyBpKyspIHsKKwkJCWFzc2VydCgoKGNoYXIgKilkZWNheSlbaV0gPT0g MCk7CisJCX0KKwkJZGVjYXktPmNlaWxfbnBhZ2VzID0gMDsKKwl9CisJaWYgKG1hbGxvY19tdXRl eF9pbml0KCZkZWNheS0+bXR4LCAiZGVjYXkiLCBXSVRORVNTX1JBTktfREVDQVksCisJICAgIG1h bGxvY19tdXRleF9yYW5rX2V4Y2x1c2l2ZSkpIHsKKwkJcmV0dXJuIHRydWU7CisJfQorCWRlY2F5 LT5wdXJnaW5nID0gZmFsc2U7CisJZGVjYXlfcmVpbml0KGRlY2F5LCBjdXJfdGltZSwgZGVjYXlf bXMpOworCXJldHVybiBmYWxzZTsKK30KKworYm9vbAorZGVjYXlfbXNfdmFsaWQoc3NpemVfdCBk ZWNheV9tcykgeworCWlmIChkZWNheV9tcyA8IC0xKSB7CisJCXJldHVybiBmYWxzZTsKKwl9CisJ aWYgKGRlY2F5X21zID09IC0xIHx8ICh1aW50NjRfdClkZWNheV9tcyA8PSBOU1RJTUVfU0VDX01B WCAqCisJICAgIEtRVSgxMDAwKSkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9CisJcmV0dXJuIGZhbHNl OworfQorCitzdGF0aWMgdm9pZAorZGVjYXlfbWF5YmVfdXBkYXRlX3RpbWUoZGVjYXlfdCAqZGVj YXksIG5zdGltZV90ICpuZXdfdGltZSkgeworCWlmICh1bmxpa2VseSghbnN0aW1lX21vbm90b25p YygpICYmIG5zdGltZV9jb21wYXJlKCZkZWNheS0+ZXBvY2gsCisJICAgIG5ld190aW1lKSA+IDAp KSB7CisJCS8qCisJCSAqIFRpbWUgd2VudCBiYWNrd2FyZHMuICBNb3ZlIHRoZSBlcG9jaCBiYWNr IGluIHRpbWUgYW5kCisJCSAqIGdlbmVyYXRlIGEgbmV3IGRlYWRsaW5lLCB3aXRoIHRoZSBleHBl Y3RhdGlvbiB0aGF0IHRpbWUKKwkJICogdHlwaWNhbGx5IGZsb3dzIGZvcndhcmQgZm9yIGxvbmcg ZW5vdWdoIHBlcmlvZHMgb2YgdGltZSB0aGF0CisJCSAqIGVwb2NocyBjb21wbGV0ZS4gIFVuZm9y dHVuYXRlbHksIHRoaXMgc3RyYXRlZ3kgaXMgc3VzY2VwdGlibGUKKwkJICogdG8gY2xvY2sgaml0 dGVyIHRyaWdnZXJpbmcgcHJlbWF0dXJlIGVwb2NoIGFkdmFuY2VzLCBidXQKKwkJICogY2xvY2sg aml0dGVyIGVzdGltYXRpb24gYW5kIGNvbXBlbnNhdGlvbiBpc24ndCBmZWFzaWJsZSBoZXJlCisJ CSAqIGJlY2F1c2UgY2FsbHMgaW50byB0aGlzIGNvZGUgYXJlIGV2ZW50LWRyaXZlbi4KKwkJICov CisJCW5zdGltZV9jb3B5KCZkZWNheS0+ZXBvY2gsIG5ld190aW1lKTsKKwkJZGVjYXlfZGVhZGxp bmVfaW5pdChkZWNheSk7CisJfSBlbHNlIHsKKwkJLyogVmVyaWZ5IHRoYXQgdGltZSBkb2VzIG5v dCBnbyBiYWNrd2FyZHMuICovCisJCWFzc2VydChuc3RpbWVfY29tcGFyZSgmZGVjYXktPmVwb2No LCBuZXdfdGltZSkgPD0gMCk7CisJfQorfQorCitzdGF0aWMgc2l6ZV90CitkZWNheV9iYWNrbG9n X25wYWdlc19saW1pdChjb25zdCBkZWNheV90ICpkZWNheSkgeworCS8qCisJICogRm9yIGVhY2gg ZWxlbWVudCBvZiBkZWNheV9iYWNrbG9nLCBtdWx0aXBseSBieSB0aGUgY29ycmVzcG9uZGluZwor CSAqIGZpeGVkLXBvaW50IHNtb290aHN0ZXAgZGVjYXkgZmFjdG9yLiAgU3VtIHRoZSBwcm9kdWN0 cywgdGhlbiBkaXZpZGUKKwkgKiB0byByb3VuZCBkb3duIHRvIHRoZSBuZWFyZXN0IHdob2xlIG51 bWJlciBvZiBwYWdlcy4KKwkgKi8KKwl1aW50NjRfdCBzdW0gPSAwOworCWZvciAodW5zaWduZWQg aSA9IDA7IGkgPCBTTU9PVEhTVEVQX05TVEVQUzsgaSsrKSB7CisJCXN1bSArPSBkZWNheS0+YmFj a2xvZ1tpXSAqIGhfc3RlcHNbaV07CisJfQorCXNpemVfdCBucGFnZXNfbGltaXRfYmFja2xvZyA9 IChzaXplX3QpKHN1bSA+PiBTTU9PVEhTVEVQX0JGUCk7CisKKwlyZXR1cm4gbnBhZ2VzX2xpbWl0 X2JhY2tsb2c7Cit9CisKKy8qCisgKiBVcGRhdGUgYmFja2xvZywgYXNzdW1pbmcgdGhhdCAnbmFk dmFuY2VfdTY0JyB0aW1lIGludGVydmFscyBoYXZlIHBhc3NlZC4KKyAqIFRyYWlsaW5nICduYWR2 YW5jZV91NjQnIHJlY29yZHMgc2hvdWxkIGJlIGVyYXNlZCBhbmQgJ2N1cnJlbnRfbnBhZ2VzJyBp cworICogcGxhY2VkIGFzIHRoZSBuZXdlc3QgcmVjb3JkLgorICovCitzdGF0aWMgdm9pZAorZGVj YXlfYmFja2xvZ191cGRhdGUoZGVjYXlfdCAqZGVjYXksIHVpbnQ2NF90IG5hZHZhbmNlX3U2NCwK KyAgICBzaXplX3QgY3VycmVudF9ucGFnZXMpIHsKKwlpZiAobmFkdmFuY2VfdTY0ID49IFNNT09U SFNURVBfTlNURVBTKSB7CisJCW1lbXNldChkZWNheS0+YmFja2xvZywgMCwgKFNNT09USFNURVBf TlNURVBTLTEpICoKKwkJICAgIHNpemVvZihzaXplX3QpKTsKKwl9IGVsc2UgeworCQlzaXplX3Qg bmFkdmFuY2VfeiA9IChzaXplX3QpbmFkdmFuY2VfdTY0OworCisJCWFzc2VydCgodWludDY0X3Qp bmFkdmFuY2VfeiA9PSBuYWR2YW5jZV91NjQpOworCisJCW1lbW1vdmUoZGVjYXktPmJhY2tsb2cs ICZkZWNheS0+YmFja2xvZ1tuYWR2YW5jZV96XSwKKwkJICAgIChTTU9PVEhTVEVQX05TVEVQUyAt IG5hZHZhbmNlX3opICogc2l6ZW9mKHNpemVfdCkpOworCQlpZiAobmFkdmFuY2VfeiA+IDEpIHsK KwkJCW1lbXNldCgmZGVjYXktPmJhY2tsb2dbU01PT1RIU1RFUF9OU1RFUFMgLQorCQkJICAgIG5h ZHZhbmNlX3pdLCAwLCAobmFkdmFuY2Vfei0xKSAqIHNpemVvZihzaXplX3QpKTsKKwkJfQorCX0K KworCXNpemVfdCBucGFnZXNfZGVsdGEgPSAoY3VycmVudF9ucGFnZXMgPiBkZWNheS0+bnVucHVy Z2VkKSA/CisJICAgIGN1cnJlbnRfbnBhZ2VzIC0gZGVjYXktPm51bnB1cmdlZCA6IDA7CisJZGVj YXktPmJhY2tsb2dbU01PT1RIU1RFUF9OU1RFUFMtMV0gPSBucGFnZXNfZGVsdGE7CisKKwlpZiAo Y29uZmlnX2RlYnVnKSB7CisJCWlmIChjdXJyZW50X25wYWdlcyA+IGRlY2F5LT5jZWlsX25wYWdl cykgeworCQkJZGVjYXktPmNlaWxfbnBhZ2VzID0gY3VycmVudF9ucGFnZXM7CisJCX0KKwkJc2l6 ZV90IG5wYWdlc19saW1pdCA9IGRlY2F5X2JhY2tsb2dfbnBhZ2VzX2xpbWl0KGRlY2F5KTsKKwkJ YXNzZXJ0KGRlY2F5LT5jZWlsX25wYWdlcyA+PSBucGFnZXNfbGltaXQpOworCQlpZiAoZGVjYXkt PmNlaWxfbnBhZ2VzID4gbnBhZ2VzX2xpbWl0KSB7CisJCQlkZWNheS0+Y2VpbF9ucGFnZXMgPSBu cGFnZXNfbGltaXQ7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbAorZGVjYXlfZGVh ZGxpbmVfcmVhY2hlZChjb25zdCBkZWNheV90ICpkZWNheSwgY29uc3QgbnN0aW1lX3QgKnRpbWUp IHsKKwlyZXR1cm4gKG5zdGltZV9jb21wYXJlKCZkZWNheS0+ZGVhZGxpbmUsIHRpbWUpIDw9IDAp OworfQorCit1aW50NjRfdAorZGVjYXlfbnBhZ2VzX3B1cmdlX2luKGRlY2F5X3QgKmRlY2F5LCBu c3RpbWVfdCAqdGltZSwgc2l6ZV90IG5wYWdlc19uZXcpIHsKKwl1aW50NjRfdCBkZWNheV9pbnRl cnZhbF9ucyA9IGRlY2F5X2Vwb2NoX2R1cmF0aW9uX25zKGRlY2F5KTsKKwlzaXplX3Qgbl9lcG9j aCA9IChzaXplX3QpKG5zdGltZV9ucyh0aW1lKSAvIGRlY2F5X2ludGVydmFsX25zKTsKKworCXVp bnQ2NF90IG5wYWdlc19wdXJnZTsKKwlpZiAobl9lcG9jaCA+PSBTTU9PVEhTVEVQX05TVEVQUykg eworCQlucGFnZXNfcHVyZ2UgPSBucGFnZXNfbmV3OworCX0gZWxzZSB7CisJCXVpbnQ2NF90IGhf c3RlcHNfbWF4ID0gaF9zdGVwc1tTTU9PVEhTVEVQX05TVEVQUyAtIDFdOworCQlhc3NlcnQoaF9z dGVwc19tYXggPj0KKwkJICAgIGhfc3RlcHNbU01PT1RIU1RFUF9OU1RFUFMgLSAxIC0gbl9lcG9j aF0pOworCQlucGFnZXNfcHVyZ2UgPSBucGFnZXNfbmV3ICogKGhfc3RlcHNfbWF4IC0KKwkJICAg IGhfc3RlcHNbU01PT1RIU1RFUF9OU1RFUFMgLSAxIC0gbl9lcG9jaF0pOworCQlucGFnZXNfcHVy Z2UgPj49IFNNT09USFNURVBfQkZQOworCX0KKwlyZXR1cm4gbnBhZ2VzX3B1cmdlOworfQorCiti b29sCitkZWNheV9tYXliZV9hZHZhbmNlX2Vwb2NoKGRlY2F5X3QgKmRlY2F5LCBuc3RpbWVfdCAq bmV3X3RpbWUsCisgICAgc2l6ZV90IG5wYWdlc19jdXJyZW50KSB7CisJLyogSGFuZGxlIHBvc3Np YmxlIG5vbi1tb25vdG9uaWNpdHkgb2YgdGltZS4gKi8KKwlkZWNheV9tYXliZV91cGRhdGVfdGlt ZShkZWNheSwgbmV3X3RpbWUpOworCisJaWYgKCFkZWNheV9kZWFkbGluZV9yZWFjaGVkKGRlY2F5 LCBuZXdfdGltZSkpIHsKKwkJcmV0dXJuIGZhbHNlOworCX0KKwluc3RpbWVfdCBkZWx0YTsKKwlu c3RpbWVfY29weSgmZGVsdGEsIG5ld190aW1lKTsKKwluc3RpbWVfc3VidHJhY3QoJmRlbHRhLCAm ZGVjYXktPmVwb2NoKTsKKworCXVpbnQ2NF90IG5hZHZhbmNlX3U2NCA9IG5zdGltZV9kaXZpZGUo JmRlbHRhLCAmZGVjYXktPmludGVydmFsKTsKKwlhc3NlcnQobmFkdmFuY2VfdTY0ID4gMCk7CisK KwkvKiBBZGQgbmFkdmFuY2VfdTY0IGRlY2F5IGludGVydmFscyB0byBlcG9jaC4gKi8KKwluc3Rp bWVfY29weSgmZGVsdGEsICZkZWNheS0+aW50ZXJ2YWwpOworCW5zdGltZV9pbXVsdGlwbHkoJmRl bHRhLCBuYWR2YW5jZV91NjQpOworCW5zdGltZV9hZGQoJmRlY2F5LT5lcG9jaCwgJmRlbHRhKTsK KworCS8qIFNldCBhIG5ldyBkZWFkbGluZS4gKi8KKwlkZWNheV9kZWFkbGluZV9pbml0KGRlY2F5 KTsKKworCS8qIFVwZGF0ZSB0aGUgYmFja2xvZy4gKi8KKwlkZWNheV9iYWNrbG9nX3VwZGF0ZShk ZWNheSwgbmFkdmFuY2VfdTY0LCBucGFnZXNfY3VycmVudCk7CisKKwlkZWNheS0+bnBhZ2VzX2xp bWl0ID0gZGVjYXlfYmFja2xvZ19ucGFnZXNfbGltaXQoZGVjYXkpOworCWRlY2F5LT5udW5wdXJn ZWQgPSAoZGVjYXktPm5wYWdlc19saW1pdCA+IG5wYWdlc19jdXJyZW50KSA/CisJICAgIGRlY2F5 LT5ucGFnZXNfbGltaXQgOiBucGFnZXNfY3VycmVudDsKKworCXJldHVybiB0cnVlOworfQorCisv KgorICogQ2FsY3VsYXRlIGhvdyBtYW55IHBhZ2VzIHNob3VsZCBiZSBwdXJnZWQgYWZ0ZXIgJ2lu dGVydmFsJy4KKyAqCisgKiBGaXJzdCwgY2FsY3VsYXRlIGhvdyBtYW55IHBhZ2VzIHNob3VsZCBy ZW1haW4gYXQgdGhlIG1vbWVudCwgdGhlbiBzdWJ0cmFjdAorICogdGhlIG51bWJlciBvZiBwYWdl cyB0aGF0IHNob3VsZCByZW1haW4gYWZ0ZXIgJ2ludGVydmFsJy4gVGhlIGRpZmZlcmVuY2UgaXMK KyAqIGhvdyBtYW55IHBhZ2VzIHNob3VsZCBiZSBwdXJnZWQgdW50aWwgdGhlbi4KKyAqCisgKiBU aGUgbnVtYmVyIG9mIHBhZ2VzIHRoYXQgc2hvdWxkIHJlbWFpbiBhdCBhIHNwZWNpZmljIG1vbWVu dCBpcyBjYWxjdWxhdGVkCisgKiBsaWtlIHRoaXM6IHBhZ2VzKG5vdykgPSBzdW0oYmFja2xvZ1tp XSAqIGhfc3RlcHNbaV0pLiBBZnRlciAnaW50ZXJ2YWwnCisgKiBwYXNzZXMsIGJhY2tsb2cgd291 bGQgc2hpZnQgJ2ludGVydmFsJyBwb3NpdGlvbnMgdG8gdGhlIGxlZnQgYW5kIHNpZ21vaWQKKyAq IGN1cnZlIHdvdWxkIGJlIGFwcGxpZWQgc3RhcnRpbmcgd2l0aCBiYWNrbG9nW2ludGVydmFsXS4K KyAqCisgKiBUaGUgaW1wbGVtZW50YXRpb24gZG9lc24ndCBkaXJlY3RseSBtYXAgdG8gdGhlIGRl c2NyaXB0aW9uLCBidXQgaXQncworICogZXNzZW50aWFsbHkgdGhlIHNhbWUgY2FsY3VsYXRpb24s IG9wdGltaXplZCB0byBhdm9pZCBpdGVyYXRpbmcgb3ZlcgorICogW2ludGVydmFsLi5TTU9PVEhT VEVQX05TVEVQUykgdHdpY2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgc2l6ZV90CitkZWNheV9ucHVy Z2VfYWZ0ZXJfaW50ZXJ2YWwoZGVjYXlfdCAqZGVjYXksIHNpemVfdCBpbnRlcnZhbCkgeworCXNp emVfdCBpOworCXVpbnQ2NF90IHN1bSA9IDA7CisJZm9yIChpID0gMDsgaSA8IGludGVydmFsOyBp KyspIHsKKwkJc3VtICs9IGRlY2F5LT5iYWNrbG9nW2ldICogaF9zdGVwc1tpXTsKKwl9CisJZm9y ICg7IGkgPCBTTU9PVEhTVEVQX05TVEVQUzsgaSsrKSB7CisJCXN1bSArPSBkZWNheS0+YmFja2xv Z1tpXSAqCisJCSAgICAoaF9zdGVwc1tpXSAtIGhfc3RlcHNbaSAtIGludGVydmFsXSk7CisJfQor CisJcmV0dXJuIChzaXplX3QpKHN1bSA+PiBTTU9PVEhTVEVQX0JGUCk7Cit9CisKK3VpbnQ2NF90 IGRlY2F5X25zX3VudGlsX3B1cmdlKGRlY2F5X3QgKmRlY2F5LCBzaXplX3QgbnBhZ2VzX2N1cnJl bnQsCisgICAgdWludDY0X3QgbnBhZ2VzX3RocmVzaG9sZCkgeworCWlmICghZGVjYXlfZ3JhZHVh bGx5KGRlY2F5KSkgeworCQlyZXR1cm4gREVDQVlfVU5CT1VOREVEX1RJTUVfVE9fUFVSR0U7CisJ fQorCXVpbnQ2NF90IGRlY2F5X2ludGVydmFsX25zID0gZGVjYXlfZXBvY2hfZHVyYXRpb25fbnMo ZGVjYXkpOworCWFzc2VydChkZWNheV9pbnRlcnZhbF9ucyA+IDApOworCWlmIChucGFnZXNfY3Vy cmVudCA9PSAwKSB7CisJCXVuc2lnbmVkIGk7CisJCWZvciAoaSA9IDA7IGkgPCBTTU9PVEhTVEVQ X05TVEVQUzsgaSsrKSB7CisJCQlpZiAoZGVjYXktPmJhY2tsb2dbaV0gPiAwKSB7CisJCQkJYnJl YWs7CisJCQl9CisJCX0KKwkJaWYgKGkgPT0gU01PT1RIU1RFUF9OU1RFUFMpIHsKKwkJCS8qIE5v IGRpcnR5IHBhZ2VzIHJlY29yZGVkLiAgU2xlZXAgaW5kZWZpbml0ZWx5LiAqLworCQkJcmV0dXJu IERFQ0FZX1VOQk9VTkRFRF9USU1FX1RPX1BVUkdFOworCQl9CisJfQorCWlmIChucGFnZXNfY3Vy cmVudCA8PSBucGFnZXNfdGhyZXNob2xkKSB7CisJCS8qIFVzZSBtYXggaW50ZXJ2YWwuICovCisJ CXJldHVybiBkZWNheV9pbnRlcnZhbF9ucyAqIFNNT09USFNURVBfTlNURVBTOworCX0KKworCS8q IE1pbmltYWwgMiBpbnRlcnZhbHMgdG8gZW5zdXJlIHJlYWNoaW5nIG5leHQgZXBvY2ggZGVhZGxp bmUuICovCisJc2l6ZV90IGxiID0gMjsKKwlzaXplX3QgdWIgPSBTTU9PVEhTVEVQX05TVEVQUzsK KworCXNpemVfdCBucHVyZ2VfbGIsIG5wdXJnZV91YjsKKwlucHVyZ2VfbGIgPSBkZWNheV9ucHVy Z2VfYWZ0ZXJfaW50ZXJ2YWwoZGVjYXksIGxiKTsKKwlpZiAobnB1cmdlX2xiID4gbnBhZ2VzX3Ro cmVzaG9sZCkgeworCQlyZXR1cm4gZGVjYXlfaW50ZXJ2YWxfbnMgKiBsYjsKKwl9CisJbnB1cmdl X3ViID0gZGVjYXlfbnB1cmdlX2FmdGVyX2ludGVydmFsKGRlY2F5LCB1Yik7CisJaWYgKG5wdXJn ZV91YiA8IG5wYWdlc190aHJlc2hvbGQpIHsKKwkJcmV0dXJuIGRlY2F5X2ludGVydmFsX25zICog dWI7CisJfQorCisJdW5zaWduZWQgbl9zZWFyY2ggPSAwOworCXNpemVfdCB0YXJnZXQsIG5wdXJn ZTsKKwl3aGlsZSAoKG5wdXJnZV9sYiArIG5wYWdlc190aHJlc2hvbGQgPCBucHVyZ2VfdWIpICYm IChsYiArIDIgPCB1YikpIHsKKwkJdGFyZ2V0ID0gKGxiICsgdWIpIC8gMjsKKwkJbnB1cmdlID0g ZGVjYXlfbnB1cmdlX2FmdGVyX2ludGVydmFsKGRlY2F5LCB0YXJnZXQpOworCQlpZiAobnB1cmdl ID4gbnBhZ2VzX3RocmVzaG9sZCkgeworCQkJdWIgPSB0YXJnZXQ7CisJCQlucHVyZ2VfdWIgPSBu cHVyZ2U7CisJCX0gZWxzZSB7CisJCQlsYiA9IHRhcmdldDsKKwkJCW5wdXJnZV9sYiA9IG5wdXJn ZTsKKwkJfQorCQlhc3NlcnQobl9zZWFyY2ggPCBsZ19mbG9vcihTTU9PVEhTVEVQX05TVEVQUykg KyAxKTsKKwkJKytuX3NlYXJjaDsKKwl9CisJcmV0dXJuIGRlY2F5X2ludGVydmFsX25zICogKHVi ICsgbGIpIC8gMjsKK30KCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1h bGxvYy01LjMuMC9zcmMvZGl2LmMgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01 LjMuMC9zcmMvZGl2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODA4ODky YQotLS0gL2Rldi9udWxsCisrKyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUu My4wL3NyYy9kaXYuYwpAQCAtMCwwICsxLDU1IEBACisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJu YWwvamVtYWxsb2NfcHJlYW1ibGUuaCIKKworI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2Rp di5oIgorCisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvYXNzZXJ0LmgiCisKKy8qCisgKiBT dXBwb3NlIHdlIGhhdmUgbiA9IHEgKiBkLCBhbGwgaW50ZWdlcnMuIFdlIGtub3cgbiBhbmQgZCwg YW5kIHdhbnQgcSA9IG4gLyBkLgorICoKKyAqIEZvciBhbnkgaywgd2UgaGF2ZSAoaGVyZSwgYWxs IGRpdmlzaW9uIGlzIGV4YWN0OyBub3QgQy1zdHlsZSByb3VuZGluZyk6CisgKiBmbG9vcihjZWls KDJeayAvIGQpICogbiAvIDJeaykgPSBmbG9vcigoMl5rICsgcikgLyBkICogbiAvIDJeayksIHdo ZXJlCisgKiByID0gKC0yXmspIG1vZCBkLgorICoKKyAqIEV4cGFuZGluZyB0aGlzIG91dDoKKyAq IC4uLiA9IGZsb29yKDJeayAvIGQgKiBuIC8gMl5rICsgciAvIGQgKiBuIC8gMl5rKQorICogICAg ID0gZmxvb3IobiAvIGQgKyAociAvIGQpICogKG4gLyAyXmspKS4KKyAqCisgKiBUaGUgZnJhY3Rp b25hbCBwYXJ0IG9mIG4gLyBkIGlzIDAgKGJlY2F1c2Ugb2YgdGhlIGFzc3VtcHRpb24gdGhhdCBk IGRpdmlkZXMgbgorICogZXhhY3RseSksIHNvIHdlIGhhdmU6CisgKiAuLi4gPSBuIC8gZCArIGZs b29yKChyIC8gZCkgKiAobiAvIDJeaykpCisgKgorICogU28gdGhhdCBvdXIgaW5pdGlhbCBleHBy ZXNzaW9uIGlzIGVxdWFsIHRvIHRoZSBxdWFudGl0eSB3ZSBzZWVrLCBzbyBsb25nIGFzCisgKiAo ciAvIGQpICogKG4gLyAyXmspIDwgMS4KKyAqCisgKiByIGlzIGEgcmVtYWluZGVyIG1vZCBkLCBz byByIDwgZCBhbmQgciAvIGQgPCAxIGFsd2F5cy4gV2UgY2FuIG1ha2UKKyAqIG4gLyAyIF4gayA8 IDEgYnkgc2V0dGluZyBrID0gMzIuIFRoaXMgZ2V0cyB1cyBhIHZhbHVlIG9mIG1hZ2ljIHRoYXQg d29ya3MuCisgKi8KKwordm9pZAorZGl2X2luaXQoZGl2X2luZm9fdCAqZGl2X2luZm8sIHNpemVf dCBkKSB7CisJLyogTm9uc2Vuc2ljYWwuICovCisJYXNzZXJ0KGQgIT0gMCk7CisJLyoKKwkgKiBU aGlzIHdvdWxkIG1ha2UgdGhlIHZhbHVlIG9mIG1hZ2ljIHRvbyBoaWdoIHRvIGZpdCBpbnRvIGEg dWludDMyX3QKKwkgKiAod2Ugd291bGQgd2FudCBtYWdpYyA9IDJeMzIgZXhhY3RseSkuIFRoaXMg d291bGQgbWVzcyB3aXRoIGNvZGUgZ2VuCisJICogb24gMzItYml0IG1hY2hpbmVzLgorCSAqLwor CWFzc2VydChkICE9IDEpOworCisJdWludDY0X3QgdHdvX3RvX2sgPSAoKHVpbnQ2NF90KTEgPDwg MzIpOworCXVpbnQzMl90IG1hZ2ljID0gKHVpbnQzMl90KSh0d29fdG9fayAvIGQpOworCisJLyoK KwkgKiBXZSB3YW50IG1hZ2ljID0gY2VpbCgyXmsgLyBkKSwgYnV0IEMgZ2l2ZXMgdXMgZmxvb3Iu IFdlIGhhdmUgdG8KKwkgKiBpbmNyZW1lbnQgaXQgdW5sZXNzIHRoZSByZXN1bHQgd2FzIGV4YWN0 IChpLmUuIHVubGVzcyBkIGlzIGEgcG93ZXIgb2YKKwkgKiB0d28pLgorCSAqLworCWlmICh0d29f dG9fayAlIGQgIT0gMCkgeworCQltYWdpYysrOworCX0KKwlkaXZfaW5mby0+bWFnaWMgPSBtYWdp YzsKKyNpZmRlZiBKRU1BTExPQ19ERUJVRworCWRpdl9pbmZvLT5kID0gZDsKKyNlbmRpZgorfQoK ZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3NyYy9l Y2FjaGUuYyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3NyYy9lY2Fj aGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjQyMjI3Ci0tLSAvZGV2 L251bGwKKysrIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvc3JjL2Vj YWNoZS5jCkBAIC0wLDAgKzEsMzUgQEAKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9qZW1h bGxvY19wcmVhbWJsZS5oIgorI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2plbWFsbG9jX2lu dGVybmFsX2luY2x1ZGVzLmgiCisKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9zYW4uaCIK KworYm9vbAorZWNhY2hlX2luaXQodHNkbl90ICp0c2RuLCBlY2FjaGVfdCAqZWNhY2hlLCBleHRl bnRfc3RhdGVfdCBzdGF0ZSwgdW5zaWduZWQgaW5kLAorICAgIGJvb2wgZGVsYXlfY29hbGVzY2Up IHsKKwlpZiAobWFsbG9jX211dGV4X2luaXQoJmVjYWNoZS0+bXR4LCAiZXh0ZW50cyIsIFdJVE5F U1NfUkFOS19FWFRFTlRTLAorCSAgICBtYWxsb2NfbXV0ZXhfcmFua19leGNsdXNpdmUpKSB7CisJ CXJldHVybiB0cnVlOworCX0KKwllY2FjaGUtPnN0YXRlID0gc3RhdGU7CisJZWNhY2hlLT5pbmQg PSBpbmQ7CisJZWNhY2hlLT5kZWxheV9jb2FsZXNjZSA9IGRlbGF5X2NvYWxlc2NlOworCWVzZXRf aW5pdCgmZWNhY2hlLT5lc2V0LCBzdGF0ZSk7CisJZXNldF9pbml0KCZlY2FjaGUtPmd1YXJkZWRf ZXNldCwgc3RhdGUpOworCisJcmV0dXJuIGZhbHNlOworfQorCit2b2lkCitlY2FjaGVfcHJlZm9y ayh0c2RuX3QgKnRzZG4sIGVjYWNoZV90ICplY2FjaGUpIHsKKwltYWxsb2NfbXV0ZXhfcHJlZm9y ayh0c2RuLCAmZWNhY2hlLT5tdHgpOworfQorCit2b2lkCitlY2FjaGVfcG9zdGZvcmtfcGFyZW50 KHRzZG5fdCAqdHNkbiwgZWNhY2hlX3QgKmVjYWNoZSkgeworCW1hbGxvY19tdXRleF9wb3N0Zm9y a19wYXJlbnQodHNkbiwgJmVjYWNoZS0+bXR4KTsKK30KKwordm9pZAorZWNhY2hlX3Bvc3Rmb3Jr X2NoaWxkKHRzZG5fdCAqdHNkbiwgZWNhY2hlX3QgKmVjYWNoZSkgeworCW1hbGxvY19tdXRleF9w b3N0Zm9ya19jaGlsZCh0c2RuLCAmZWNhY2hlLT5tdHgpOworfQoKZGlmZiAtLWdpdCBhLzM4OS1k cy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3NyYy9lZGF0YS5jIGIvMzg5LWRzLWJh c2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvc3JjL2VkYXRhLmMKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMC4uODJiNmY1NgotLS0gL2Rldi9udWxsCisrKyBiLzM4OS1kcy1i YXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3NyYy9lZGF0YS5jCkBAIC0wLDAgKzEsNiBA QAorI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2plbWFsbG9jX3ByZWFtYmxlLmgiCisjaW5j bHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvamVtYWxsb2NfaW50ZXJuYWxfaW5jbHVkZXMuaCIKKwor cGhfZ2VuKCwgZWRhdGFfYXZhaWwsIGVkYXRhX3QsIGF2YWlsX2xpbmssCisgICAgZWRhdGFfZXNu ZWFkX2NvbXApCitwaF9nZW4oLCBlZGF0YV9oZWFwLCBlZGF0YV90LCBoZWFwX2xpbmssIGVkYXRh X3NuYWRfY29tcCkKCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxv Yy01LjMuMC9zcmMvZWRhdGFfY2FjaGUuYyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFs bG9jLTUuMy4wL3NyYy9lZGF0YV9jYWNoZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAuLjZiYzE4NDgKLS0tIC9kZXYvbnVsbAorKysgYi8zODktZHMtYmFzZS0zLjMuMC1idWls ZC9qZW1hbGxvYy01LjMuMC9zcmMvZWRhdGFfY2FjaGUuYwpAQCAtMCwwICsxLDE1NCBAQAorI2lu Y2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2plbWFsbG9jX3ByZWFtYmxlLmgiCisjaW5jbHVkZSAi amVtYWxsb2MvaW50ZXJuYWwvamVtYWxsb2NfaW50ZXJuYWxfaW5jbHVkZXMuaCIKKworYm9vbAor ZWRhdGFfY2FjaGVfaW5pdChlZGF0YV9jYWNoZV90ICplZGF0YV9jYWNoZSwgYmFzZV90ICpiYXNl KSB7CisJZWRhdGFfYXZhaWxfbmV3KCZlZGF0YV9jYWNoZS0+YXZhaWwpOworCS8qCisJICogVGhp cyBpcyBub3Qgc3RyaWN0bHkgbmVjZXNzYXJ5LCBzaW5jZSB0aGUgZWRhdGFfY2FjaGVfdCBpcyBv bmx5CisJICogY3JlYXRlZCBpbnNpZGUgYW4gYXJlbmEsIHdoaWNoIGlzIHplcm9lZCBvbiBjcmVh dGlvbi4gIEJ1dCB0aGlzIGlzCisJICogaGFuZHkgYXMgYSBzYWZldHkgbWVhc3VyZS4KKwkgKi8K KwlhdG9taWNfc3RvcmVfenUoJmVkYXRhX2NhY2hlLT5jb3VudCwgMCwgQVRPTUlDX1JFTEFYRUQp OworCWlmIChtYWxsb2NfbXV0ZXhfaW5pdCgmZWRhdGFfY2FjaGUtPm10eCwgImVkYXRhX2NhY2hl IiwKKwkgICAgV0lUTkVTU19SQU5LX0VEQVRBX0NBQ0hFLCBtYWxsb2NfbXV0ZXhfcmFua19leGNs dXNpdmUpKSB7CisJCXJldHVybiB0cnVlOworCX0KKwllZGF0YV9jYWNoZS0+YmFzZSA9IGJhc2U7 CisJcmV0dXJuIGZhbHNlOworfQorCitlZGF0YV90ICoKK2VkYXRhX2NhY2hlX2dldCh0c2RuX3Qg KnRzZG4sIGVkYXRhX2NhY2hlX3QgKmVkYXRhX2NhY2hlKSB7CisJbWFsbG9jX211dGV4X2xvY2so dHNkbiwgJmVkYXRhX2NhY2hlLT5tdHgpOworCWVkYXRhX3QgKmVkYXRhID0gZWRhdGFfYXZhaWxf Zmlyc3QoJmVkYXRhX2NhY2hlLT5hdmFpbCk7CisJaWYgKGVkYXRhID09IE5VTEwpIHsKKwkJbWFs bG9jX211dGV4X3VubG9jayh0c2RuLCAmZWRhdGFfY2FjaGUtPm10eCk7CisJCXJldHVybiBiYXNl X2FsbG9jX2VkYXRhKHRzZG4sIGVkYXRhX2NhY2hlLT5iYXNlKTsKKwl9CisJZWRhdGFfYXZhaWxf cmVtb3ZlKCZlZGF0YV9jYWNoZS0+YXZhaWwsIGVkYXRhKTsKKwlhdG9taWNfbG9hZF9zdWJfc3Rv cmVfenUoJmVkYXRhX2NhY2hlLT5jb3VudCwgMSk7CisJbWFsbG9jX211dGV4X3VubG9jayh0c2Ru LCAmZWRhdGFfY2FjaGUtPm10eCk7CisJcmV0dXJuIGVkYXRhOworfQorCit2b2lkCitlZGF0YV9j YWNoZV9wdXQodHNkbl90ICp0c2RuLCBlZGF0YV9jYWNoZV90ICplZGF0YV9jYWNoZSwgZWRhdGFf dCAqZWRhdGEpIHsKKwltYWxsb2NfbXV0ZXhfbG9jayh0c2RuLCAmZWRhdGFfY2FjaGUtPm10eCk7 CisJZWRhdGFfYXZhaWxfaW5zZXJ0KCZlZGF0YV9jYWNoZS0+YXZhaWwsIGVkYXRhKTsKKwlhdG9t aWNfbG9hZF9hZGRfc3RvcmVfenUoJmVkYXRhX2NhY2hlLT5jb3VudCwgMSk7CisJbWFsbG9jX211 dGV4X3VubG9jayh0c2RuLCAmZWRhdGFfY2FjaGUtPm10eCk7Cit9CisKK3ZvaWQKK2VkYXRhX2Nh Y2hlX3ByZWZvcmsodHNkbl90ICp0c2RuLCBlZGF0YV9jYWNoZV90ICplZGF0YV9jYWNoZSkgewor CW1hbGxvY19tdXRleF9wcmVmb3JrKHRzZG4sICZlZGF0YV9jYWNoZS0+bXR4KTsKK30KKwordm9p ZAorZWRhdGFfY2FjaGVfcG9zdGZvcmtfcGFyZW50KHRzZG5fdCAqdHNkbiwgZWRhdGFfY2FjaGVf dCAqZWRhdGFfY2FjaGUpIHsKKwltYWxsb2NfbXV0ZXhfcG9zdGZvcmtfcGFyZW50KHRzZG4sICZl ZGF0YV9jYWNoZS0+bXR4KTsKK30KKwordm9pZAorZWRhdGFfY2FjaGVfcG9zdGZvcmtfY2hpbGQo dHNkbl90ICp0c2RuLCBlZGF0YV9jYWNoZV90ICplZGF0YV9jYWNoZSkgeworCW1hbGxvY19tdXRl eF9wb3N0Zm9ya19jaGlsZCh0c2RuLCAmZWRhdGFfY2FjaGUtPm10eCk7Cit9CisKK3ZvaWQKK2Vk YXRhX2NhY2hlX2Zhc3RfaW5pdChlZGF0YV9jYWNoZV9mYXN0X3QgKmVjcywgZWRhdGFfY2FjaGVf dCAqZmFsbGJhY2spIHsKKwllZGF0YV9saXN0X2luYWN0aXZlX2luaXQoJmVjcy0+bGlzdCk7CisJ ZWNzLT5mYWxsYmFjayA9IGZhbGxiYWNrOworCWVjcy0+ZGlzYWJsZWQgPSBmYWxzZTsKK30KKwor c3RhdGljIHZvaWQKK2VkYXRhX2NhY2hlX2Zhc3RfdHJ5X2ZpbGxfZnJvbV9mYWxsYmFjayh0c2Ru X3QgKnRzZG4sCisgICAgZWRhdGFfY2FjaGVfZmFzdF90ICplY3MpIHsKKwllZGF0YV90ICplZGF0 YTsKKwltYWxsb2NfbXV0ZXhfbG9jayh0c2RuLCAmZWNzLT5mYWxsYmFjay0+bXR4KTsKKwlmb3Ig KGludCBpID0gMDsgaSA8IEVEQVRBX0NBQ0hFX0ZBU1RfRklMTDsgaSsrKSB7CisJCWVkYXRhID0g ZWRhdGFfYXZhaWxfcmVtb3ZlX2ZpcnN0KCZlY3MtPmZhbGxiYWNrLT5hdmFpbCk7CisJCWlmIChl ZGF0YSA9PSBOVUxMKSB7CisJCQlicmVhazsKKwkJfQorCQllZGF0YV9saXN0X2luYWN0aXZlX2Fw cGVuZCgmZWNzLT5saXN0LCBlZGF0YSk7CisJCWF0b21pY19sb2FkX3N1Yl9zdG9yZV96dSgmZWNz LT5mYWxsYmFjay0+Y291bnQsIDEpOworCX0KKwltYWxsb2NfbXV0ZXhfdW5sb2NrKHRzZG4sICZl Y3MtPmZhbGxiYWNrLT5tdHgpOworfQorCitlZGF0YV90ICoKK2VkYXRhX2NhY2hlX2Zhc3RfZ2V0 KHRzZG5fdCAqdHNkbiwgZWRhdGFfY2FjaGVfZmFzdF90ICplY3MpIHsKKwl3aXRuZXNzX2Fzc2Vy dF9kZXB0aF90b19yYW5rKHRzZG5fd2l0bmVzc190c2RwX2dldCh0c2RuKSwKKwkgICAgV0lUTkVT U19SQU5LX0VEQVRBX0NBQ0hFLCAwKTsKKworCWlmIChlY3MtPmRpc2FibGVkKSB7CisJCWFzc2Vy dChlZGF0YV9saXN0X2luYWN0aXZlX2ZpcnN0KCZlY3MtPmxpc3QpID09IE5VTEwpOworCQlyZXR1 cm4gZWRhdGFfY2FjaGVfZ2V0KHRzZG4sIGVjcy0+ZmFsbGJhY2spOworCX0KKworCWVkYXRhX3Qg KmVkYXRhID0gZWRhdGFfbGlzdF9pbmFjdGl2ZV9maXJzdCgmZWNzLT5saXN0KTsKKwlpZiAoZWRh dGEgIT0gTlVMTCkgeworCQllZGF0YV9saXN0X2luYWN0aXZlX3JlbW92ZSgmZWNzLT5saXN0LCBl ZGF0YSk7CisJCXJldHVybiBlZGF0YTsKKwl9CisJLyogU2xvdyBwYXRoOyByZXF1aXJlcyBzeW5j aHJvbml6YXRpb24uICovCisJZWRhdGFfY2FjaGVfZmFzdF90cnlfZmlsbF9mcm9tX2ZhbGxiYWNr KHRzZG4sIGVjcyk7CisJZWRhdGEgPSBlZGF0YV9saXN0X2luYWN0aXZlX2ZpcnN0KCZlY3MtPmxp c3QpOworCWlmIChlZGF0YSAhPSBOVUxMKSB7CisJCWVkYXRhX2xpc3RfaW5hY3RpdmVfcmVtb3Zl KCZlY3MtPmxpc3QsIGVkYXRhKTsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBTbG93ZXN0IHBhdGgg KGZhbGxiYWNrIHdhcyBhbHNvIGVtcHR5KTsgYWxsb2NhdGUgc29tZXRoaW5nCisJCSAqIG5ldy4K KwkJICovCisJCWVkYXRhID0gYmFzZV9hbGxvY19lZGF0YSh0c2RuLCBlY3MtPmZhbGxiYWNrLT5i YXNlKTsKKwl9CisJcmV0dXJuIGVkYXRhOworfQorCitzdGF0aWMgdm9pZAorZWRhdGFfY2FjaGVf ZmFzdF9mbHVzaF9hbGwodHNkbl90ICp0c2RuLCBlZGF0YV9jYWNoZV9mYXN0X3QgKmVjcykgewor CS8qCisJICogWW91IGNvdWxkIGltYWdpbmUgc21hcnRlciBjYWNoZSBtYW5hZ2VtZW50IHBvbGlj aWVzIChsaWtlCisJICogb25seSBmbHVzaGluZyBkb3duIHRvIHNvbWUgdGhyZXNob2xkIGluIGFu dGljaXBhdGlvbiBvZgorCSAqIGZ1dHVyZSBnZXQgcmVxdWVzdHMpLiAgQnV0IGp1c3QgZmx1c2hp bmcgZXZlcnl0aGluZyBwcm92aWRlcworCSAqIGEgZ29vZCBvcHBvcnR1bml0eSB0byBkZWZyYWcg dG9vLCBhbmQgbGV0cyB1cyBzaGFyZSBjb2RlIGJldHdlZW4gdGhlCisJICogZmx1c2ggYW5kIGRp c2FibGUgcGF0aHdheXMuCisJICovCisJZWRhdGFfdCAqZWRhdGE7CisJc2l6ZV90IG5mbHVzaGVk ID0gMDsKKwltYWxsb2NfbXV0ZXhfbG9jayh0c2RuLCAmZWNzLT5mYWxsYmFjay0+bXR4KTsKKwl3 aGlsZSAoKGVkYXRhID0gZWRhdGFfbGlzdF9pbmFjdGl2ZV9maXJzdCgmZWNzLT5saXN0KSkgIT0g TlVMTCkgeworCQllZGF0YV9saXN0X2luYWN0aXZlX3JlbW92ZSgmZWNzLT5saXN0LCBlZGF0YSk7 CisJCWVkYXRhX2F2YWlsX2luc2VydCgmZWNzLT5mYWxsYmFjay0+YXZhaWwsIGVkYXRhKTsKKwkJ bmZsdXNoZWQrKzsKKwl9CisJYXRvbWljX2xvYWRfYWRkX3N0b3JlX3p1KCZlY3MtPmZhbGxiYWNr LT5jb3VudCwgbmZsdXNoZWQpOworCW1hbGxvY19tdXRleF91bmxvY2sodHNkbiwgJmVjcy0+ZmFs bGJhY2stPm10eCk7Cit9CisKK3ZvaWQKK2VkYXRhX2NhY2hlX2Zhc3RfcHV0KHRzZG5fdCAqdHNk biwgZWRhdGFfY2FjaGVfZmFzdF90ICplY3MsIGVkYXRhX3QgKmVkYXRhKSB7CisJd2l0bmVzc19h c3NlcnRfZGVwdGhfdG9fcmFuayh0c2RuX3dpdG5lc3NfdHNkcF9nZXQodHNkbiksCisJICAgIFdJ VE5FU1NfUkFOS19FREFUQV9DQUNIRSwgMCk7CisKKwlpZiAoZWNzLT5kaXNhYmxlZCkgeworCQlh c3NlcnQoZWRhdGFfbGlzdF9pbmFjdGl2ZV9maXJzdCgmZWNzLT5saXN0KSA9PSBOVUxMKTsKKwkJ ZWRhdGFfY2FjaGVfcHV0KHRzZG4sIGVjcy0+ZmFsbGJhY2ssIGVkYXRhKTsKKwkJcmV0dXJuOwor CX0KKworCS8qCisJICogUHJlcGVuZCByYXRoZXIgdGhhbiBhcHBlbmQsIHRvIGRvIExJRk8gb3Jk ZXJpbmcgaW4gdGhlIGhvcGVzIG9mIHNvbWUKKwkgKiBjYWNoZSBsb2NhbGl0eS4KKwkgKi8KKwll ZGF0YV9saXN0X2luYWN0aXZlX3ByZXBlbmQoJmVjcy0+bGlzdCwgZWRhdGEpOworfQorCit2b2lk CitlZGF0YV9jYWNoZV9mYXN0X2Rpc2FibGUodHNkbl90ICp0c2RuLCBlZGF0YV9jYWNoZV9mYXN0 X3QgKmVjcykgeworCWVkYXRhX2NhY2hlX2Zhc3RfZmx1c2hfYWxsKHRzZG4sIGVjcyk7CisJZWNz LT5kaXNhYmxlZCA9IHRydWU7Cit9CgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVp bGQvamVtYWxsb2MtNS4zLjAvc3JjL2Vob29rcy5jIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQv amVtYWxsb2MtNS4zLjAvc3JjL2Vob29rcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAuLjM4M2U5ZGUKLS0tIC9kZXYvbnVsbAorKysgYi8zODktZHMtYmFzZS0zLjMuMC1idWls ZC9qZW1hbGxvYy01LjMuMC9zcmMvZWhvb2tzLmMKQEAgLTAsMCArMSwyNzUgQEAKKyNpbmNsdWRl ICJqZW1hbGxvYy9pbnRlcm5hbC9qZW1hbGxvY19wcmVhbWJsZS5oIgorI2luY2x1ZGUgImplbWFs bG9jL2ludGVybmFsL2plbWFsbG9jX2ludGVybmFsX2luY2x1ZGVzLmgiCisKKyNpbmNsdWRlICJq ZW1hbGxvYy9pbnRlcm5hbC9laG9va3MuaCIKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9l eHRlbnRfbW1hcC5oIgorCit2b2lkCitlaG9va3NfaW5pdChlaG9va3NfdCAqZWhvb2tzLCBleHRl bnRfaG9va3NfdCAqZXh0ZW50X2hvb2tzLCB1bnNpZ25lZCBpbmQpIHsKKwkvKiBBbGwgb3RoZXIg aG9va3MgYXJlIG9wdGlvbmFsOyB0aGlzIG9uZSBpcyBub3QuICovCisJYXNzZXJ0KGV4dGVudF9o b29rcy0+YWxsb2MgIT0gTlVMTCk7CisJZWhvb2tzLT5pbmQgPSBpbmQ7CisJZWhvb2tzX3NldF9l eHRlbnRfaG9va3NfcHRyKGVob29rcywgZXh0ZW50X2hvb2tzKTsKK30KKworLyoKKyAqIElmIHRo ZSBjYWxsZXIgc3BlY2lmaWVzICghKnplcm8pLCBpdCBpcyBzdGlsbCBwb3NzaWJsZSB0byByZWNl aXZlIHplcm9lZAorICogbWVtb3J5LCBpbiB3aGljaCBjYXNlICp6ZXJvIGlzIHRvZ2dsZWQgdG8g dHJ1ZS4gIGFyZW5hX2V4dGVudF9hbGxvYygpIHRha2VzCisgKiBhZHZhbnRhZ2Ugb2YgdGhpcyB0 byBhdm9pZCBkZW1hbmRpbmcgemVyb2VkIGV4dGVudHMsIGJ1dCB0YWtpbmcgYWR2YW50YWdlIG9m CisgKiB0aGVtIGlmIHRoZXkgYXJlIHJldHVybmVkLgorICovCitzdGF0aWMgdm9pZCAqCitleHRl bnRfYWxsb2NfY29yZSh0c2RuX3QgKnRzZG4sIGFyZW5hX3QgKmFyZW5hLCB2b2lkICpuZXdfYWRk ciwgc2l6ZV90IHNpemUsCisgICAgc2l6ZV90IGFsaWdubWVudCwgYm9vbCAqemVybywgYm9vbCAq Y29tbWl0LCBkc3NfcHJlY190IGRzc19wcmVjKSB7CisJdm9pZCAqcmV0OworCisJYXNzZXJ0KHNp emUgIT0gMCk7CisJYXNzZXJ0KGFsaWdubWVudCAhPSAwKTsKKworCS8qICJwcmltYXJ5IiBkc3Mu ICovCisJaWYgKGhhdmVfZHNzICYmIGRzc19wcmVjID09IGRzc19wcmVjX3ByaW1hcnkgJiYgKHJl dCA9CisJICAgIGV4dGVudF9hbGxvY19kc3ModHNkbiwgYXJlbmEsIG5ld19hZGRyLCBzaXplLCBh bGlnbm1lbnQsIHplcm8sCisJICAgIGNvbW1pdCkpICE9IE5VTEwpIHsKKwkJcmV0dXJuIHJldDsK Kwl9CisJLyogbW1hcC4gKi8KKwlpZiAoKHJldCA9IGV4dGVudF9hbGxvY19tbWFwKG5ld19hZGRy LCBzaXplLCBhbGlnbm1lbnQsIHplcm8sIGNvbW1pdCkpCisJICAgICE9IE5VTEwpIHsKKwkJcmV0 dXJuIHJldDsKKwl9CisJLyogInNlY29uZGFyeSIgZHNzLiAqLworCWlmIChoYXZlX2RzcyAmJiBk c3NfcHJlYyA9PSBkc3NfcHJlY19zZWNvbmRhcnkgJiYgKHJldCA9CisJICAgIGV4dGVudF9hbGxv Y19kc3ModHNkbiwgYXJlbmEsIG5ld19hZGRyLCBzaXplLCBhbGlnbm1lbnQsIHplcm8sCisJICAg IGNvbW1pdCkpICE9IE5VTEwpIHsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBBbGwgc3RyYXRl Z2llcyBmb3IgYWxsb2NhdGlvbiBmYWlsZWQuICovCisJcmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQg KgorZWhvb2tzX2RlZmF1bHRfYWxsb2NfaW1wbCh0c2RuX3QgKnRzZG4sIHZvaWQgKm5ld19hZGRy LCBzaXplX3Qgc2l6ZSwKKyAgICBzaXplX3QgYWxpZ25tZW50LCBib29sICp6ZXJvLCBib29sICpj b21taXQsIHVuc2lnbmVkIGFyZW5hX2luZCkgeworCWFyZW5hX3QgKmFyZW5hID0gYXJlbmFfZ2V0 KHRzZG4sIGFyZW5hX2luZCwgZmFsc2UpOworCS8qIE5VTEwgYXJlbmEgaW5kaWNhdGVzIGFyZW5h X2NyZWF0ZS4gKi8KKwlhc3NlcnQoYXJlbmEgIT0gTlVMTCB8fCBhbGlnbm1lbnQgPT0gSFVHRVBB R0UpOworCWRzc19wcmVjX3QgZHNzID0gKGFyZW5hID09IE5VTEwpID8gZHNzX3ByZWNfZGlzYWJs ZWQgOgorCSAgICAoZHNzX3ByZWNfdClhdG9taWNfbG9hZF91KCZhcmVuYS0+ZHNzX3ByZWMsIEFU T01JQ19SRUxBWEVEKTsKKwl2b2lkICpyZXQgPSBleHRlbnRfYWxsb2NfY29yZSh0c2RuLCBhcmVu YSwgbmV3X2FkZHIsIHNpemUsIGFsaWdubWVudCwKKwkgICAgemVybywgY29tbWl0LCBkc3MpOwor CWlmIChoYXZlX21hZHZpc2VfaHVnZSAmJiByZXQpIHsKKwkJcGFnZXNfc2V0X3RocF9zdGF0ZShy ZXQsIHNpemUpOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCAqCitlaG9va3Nf ZGVmYXVsdF9hbGxvYyhleHRlbnRfaG9va3NfdCAqZXh0ZW50X2hvb2tzLCB2b2lkICpuZXdfYWRk ciwgc2l6ZV90IHNpemUsCisgICAgc2l6ZV90IGFsaWdubWVudCwgYm9vbCAqemVybywgYm9vbCAq Y29tbWl0LCB1bnNpZ25lZCBhcmVuYV9pbmQpIHsKKwlyZXR1cm4gZWhvb2tzX2RlZmF1bHRfYWxs b2NfaW1wbCh0c2RuX2ZldGNoKCksIG5ld19hZGRyLCBzaXplLAorCSAgICBBTElHTk1FTlRfQ0VJ TElORyhhbGlnbm1lbnQsIFBBR0UpLCB6ZXJvLCBjb21taXQsIGFyZW5hX2luZCk7Cit9CisKK2Jv b2wKK2Vob29rc19kZWZhdWx0X2RhbGxvY19pbXBsKHZvaWQgKmFkZHIsIHNpemVfdCBzaXplKSB7 CisJaWYgKCFoYXZlX2RzcyB8fCAhZXh0ZW50X2luX2RzcyhhZGRyKSkgeworCQlyZXR1cm4gZXh0 ZW50X2RhbGxvY19tbWFwKGFkZHIsIHNpemUpOworCX0KKwlyZXR1cm4gdHJ1ZTsKK30KKworc3Rh dGljIGJvb2wKK2Vob29rc19kZWZhdWx0X2RhbGxvYyhleHRlbnRfaG9va3NfdCAqZXh0ZW50X2hv b2tzLCB2b2lkICphZGRyLCBzaXplX3Qgc2l6ZSwKKyAgICBib29sIGNvbW1pdHRlZCwgdW5zaWdu ZWQgYXJlbmFfaW5kKSB7CisJcmV0dXJuIGVob29rc19kZWZhdWx0X2RhbGxvY19pbXBsKGFkZHIs IHNpemUpOworfQorCit2b2lkCitlaG9va3NfZGVmYXVsdF9kZXN0cm95X2ltcGwodm9pZCAqYWRk ciwgc2l6ZV90IHNpemUpIHsKKwlpZiAoIWhhdmVfZHNzIHx8ICFleHRlbnRfaW5fZHNzKGFkZHIp KSB7CisJCXBhZ2VzX3VubWFwKGFkZHIsIHNpemUpOworCX0KK30KKworc3RhdGljIHZvaWQKK2Vo b29rc19kZWZhdWx0X2Rlc3Ryb3koZXh0ZW50X2hvb2tzX3QgKmV4dGVudF9ob29rcywgdm9pZCAq YWRkciwgc2l6ZV90IHNpemUsCisgICAgYm9vbCBjb21taXR0ZWQsIHVuc2lnbmVkIGFyZW5hX2lu ZCkgeworCWVob29rc19kZWZhdWx0X2Rlc3Ryb3lfaW1wbChhZGRyLCBzaXplKTsKK30KKworYm9v bAorZWhvb2tzX2RlZmF1bHRfY29tbWl0X2ltcGwodm9pZCAqYWRkciwgc2l6ZV90IG9mZnNldCwg c2l6ZV90IGxlbmd0aCkgeworCXJldHVybiBwYWdlc19jb21taXQoKHZvaWQgKikoKHVpbnRwdHJf dClhZGRyICsgKHVpbnRwdHJfdClvZmZzZXQpLAorCSAgICBsZW5ndGgpOworfQorCitzdGF0aWMg Ym9vbAorZWhvb2tzX2RlZmF1bHRfY29tbWl0KGV4dGVudF9ob29rc190ICpleHRlbnRfaG9va3Ms IHZvaWQgKmFkZHIsIHNpemVfdCBzaXplLAorICAgIHNpemVfdCBvZmZzZXQsIHNpemVfdCBsZW5n dGgsIHVuc2lnbmVkIGFyZW5hX2luZCkgeworCXJldHVybiBlaG9va3NfZGVmYXVsdF9jb21taXRf aW1wbChhZGRyLCBvZmZzZXQsIGxlbmd0aCk7Cit9CisKK2Jvb2wKK2Vob29rc19kZWZhdWx0X2Rl Y29tbWl0X2ltcGwodm9pZCAqYWRkciwgc2l6ZV90IG9mZnNldCwgc2l6ZV90IGxlbmd0aCkgewor CXJldHVybiBwYWdlc19kZWNvbW1pdCgodm9pZCAqKSgodWludHB0cl90KWFkZHIgKyAodWludHB0 cl90KW9mZnNldCksCisJICAgIGxlbmd0aCk7Cit9CisKK3N0YXRpYyBib29sCitlaG9va3NfZGVm YXVsdF9kZWNvbW1pdChleHRlbnRfaG9va3NfdCAqZXh0ZW50X2hvb2tzLCB2b2lkICphZGRyLCBz aXplX3Qgc2l6ZSwKKyAgICBzaXplX3Qgb2Zmc2V0LCBzaXplX3QgbGVuZ3RoLCB1bnNpZ25lZCBh cmVuYV9pbmQpIHsKKwlyZXR1cm4gZWhvb2tzX2RlZmF1bHRfZGVjb21taXRfaW1wbChhZGRyLCBv ZmZzZXQsIGxlbmd0aCk7Cit9CisKKyNpZmRlZiBQQUdFU19DQU5fUFVSR0VfTEFaWQorYm9vbAor ZWhvb2tzX2RlZmF1bHRfcHVyZ2VfbGF6eV9pbXBsKHZvaWQgKmFkZHIsIHNpemVfdCBvZmZzZXQs IHNpemVfdCBsZW5ndGgpIHsKKwlyZXR1cm4gcGFnZXNfcHVyZ2VfbGF6eSgodm9pZCAqKSgodWlu dHB0cl90KWFkZHIgKyAodWludHB0cl90KW9mZnNldCksCisJICAgIGxlbmd0aCk7Cit9CisKK3N0 YXRpYyBib29sCitlaG9va3NfZGVmYXVsdF9wdXJnZV9sYXp5KGV4dGVudF9ob29rc190ICpleHRl bnRfaG9va3MsIHZvaWQgKmFkZHIsIHNpemVfdCBzaXplLAorICAgIHNpemVfdCBvZmZzZXQsIHNp emVfdCBsZW5ndGgsIHVuc2lnbmVkIGFyZW5hX2luZCkgeworCWFzc2VydChhZGRyICE9IE5VTEwp OworCWFzc2VydCgob2Zmc2V0ICYgUEFHRV9NQVNLKSA9PSAwKTsKKwlhc3NlcnQobGVuZ3RoICE9 IDApOworCWFzc2VydCgobGVuZ3RoICYgUEFHRV9NQVNLKSA9PSAwKTsKKwlyZXR1cm4gZWhvb2tz X2RlZmF1bHRfcHVyZ2VfbGF6eV9pbXBsKGFkZHIsIG9mZnNldCwgbGVuZ3RoKTsKK30KKyNlbmRp ZgorCisjaWZkZWYgUEFHRVNfQ0FOX1BVUkdFX0ZPUkNFRAorYm9vbAorZWhvb2tzX2RlZmF1bHRf cHVyZ2VfZm9yY2VkX2ltcGwodm9pZCAqYWRkciwgc2l6ZV90IG9mZnNldCwgc2l6ZV90IGxlbmd0 aCkgeworCXJldHVybiBwYWdlc19wdXJnZV9mb3JjZWQoKHZvaWQgKikoKHVpbnRwdHJfdClhZGRy ICsKKwkgICAgKHVpbnRwdHJfdClvZmZzZXQpLCBsZW5ndGgpOworfQorCitzdGF0aWMgYm9vbAor ZWhvb2tzX2RlZmF1bHRfcHVyZ2VfZm9yY2VkKGV4dGVudF9ob29rc190ICpleHRlbnRfaG9va3Ms IHZvaWQgKmFkZHIsCisgICAgc2l6ZV90IHNpemUsIHNpemVfdCBvZmZzZXQsIHNpemVfdCBsZW5n dGgsIHVuc2lnbmVkIGFyZW5hX2luZCkgeworCWFzc2VydChhZGRyICE9IE5VTEwpOworCWFzc2Vy dCgob2Zmc2V0ICYgUEFHRV9NQVNLKSA9PSAwKTsKKwlhc3NlcnQobGVuZ3RoICE9IDApOworCWFz c2VydCgobGVuZ3RoICYgUEFHRV9NQVNLKSA9PSAwKTsKKwlyZXR1cm4gZWhvb2tzX2RlZmF1bHRf cHVyZ2VfZm9yY2VkX2ltcGwoYWRkciwgb2Zmc2V0LCBsZW5ndGgpOworfQorI2VuZGlmCisKK2Jv b2wKK2Vob29rc19kZWZhdWx0X3NwbGl0X2ltcGwoKSB7CisJaWYgKCFtYXBzX2NvYWxlc2NlKSB7 CisJCS8qCisJCSAqIFdpdGhvdXQgcmV0YWluLCBvbmx5IHdob2xlIHJlZ2lvbnMgY2FuIGJlIHB1 cmdlZCAocmVxdWlyZWQgYnkKKwkJICogTUVNX1JFTEVBU0Ugb24gV2luZG93cykgLS0gdGhlcmVm b3JlIGRpc2FsbG93IHNwbGl0dGluZy4gIFNlZQorCQkgKiBjb21tZW50cyBpbiBleHRlbnRfaGVh ZF9ub19tZXJnZSgpLgorCQkgKi8KKwkJcmV0dXJuICFvcHRfcmV0YWluOworCX0KKworCXJldHVy biBmYWxzZTsKK30KKworc3RhdGljIGJvb2wKK2Vob29rc19kZWZhdWx0X3NwbGl0KGV4dGVudF9o b29rc190ICpleHRlbnRfaG9va3MsIHZvaWQgKmFkZHIsIHNpemVfdCBzaXplLAorICAgIHNpemVf dCBzaXplX2EsIHNpemVfdCBzaXplX2IsIGJvb2wgY29tbWl0dGVkLCB1bnNpZ25lZCBhcmVuYV9p bmQpIHsKKwlyZXR1cm4gZWhvb2tzX2RlZmF1bHRfc3BsaXRfaW1wbCgpOworfQorCitib29sCitl aG9va3NfZGVmYXVsdF9tZXJnZV9pbXBsKHRzZG5fdCAqdHNkbiwgdm9pZCAqYWRkcl9hLCB2b2lk ICphZGRyX2IpIHsKKwlhc3NlcnQoYWRkcl9hIDwgYWRkcl9iKTsKKwkvKgorCSAqIEZvciBub24t RFNTIGNhc2VzIC0tCisJICogYSkgVy9vIG1hcHNfY29hbGVzY2UsIG1lcmdlIGlzIG5vdCBhbHdh eXMgYWxsb3dlZCAoV2luZG93cyk6CisJICogICAxKSB3L28gcmV0YWluLCBuZXZlciBtZXJnZSAo Zmlyc3QgYnJhbmNoIGJlbG93KS4KKwkgKiAgIDIpIHdpdGggcmV0YWluLCBvbmx5IG1lcmdlIGV4 dGVudHMgZnJvbSB0aGUgc2FtZSBWaXJ0dWFsQWxsb2MKKwkgKiAgICAgIHJlZ2lvbiAoaW4gd2hp Y2ggY2FzZSBNRU1fREVDT01NSVQgaXMgdXRpbGl6ZWQgZm9yIHB1cmdpbmcpLgorCSAqCisJICog YikgV2l0aCBtYXBzX2NvYWxlc2NlLCBpdCdzIGFsd2F5cyBwb3NzaWJsZSB0byBtZXJnZS4KKwkg KiAgIDEpIHcvbyByZXRhaW4sIGFsd2F5cyBhbGxvdyBtZXJnZSAob25seSBhYm91dCBkaXJ0eSAv IG11enp5KS4KKwkgKiAgIDIpIHdpdGggcmV0YWluLCB0byBwcmVzZXJ2ZSB0aGUgU04gLyBmaXJz dC1maXQsIG1lcmdlIGlzIHN0aWxsCisJICogICAgICBkaXNhbGxvd2VkIGlmIGIgaXMgYSBoZWFk IGV4dGVudCwgaS5lLiBubyBtZXJnaW5nIGFjcm9zcworCSAqICAgICAgZGlmZmVyZW50IG1tYXAg cmVnaW9ucy4KKwkgKgorCSAqIGEyKSBhbmQgYjIpIGFyZSBpbXBsZW1lbnRlZCBpbiBlbWFwX3Ry eV9hY3F1aXJlX2VkYXRhX25laWdoYm9yLCBhbmQKKwkgKiBzYW5pdHkgY2hlY2tlZCBpbiB0aGUg c2Vjb25kIGJyYW5jaCBiZWxvdy4KKwkgKi8KKwlpZiAoIW1hcHNfY29hbGVzY2UgJiYgIW9wdF9y ZXRhaW4pIHsKKwkJcmV0dXJuIHRydWU7CisJfQorCWlmIChjb25maWdfZGVidWcpIHsKKwkJZWRh dGFfdCAqYSA9IGVtYXBfZWRhdGFfbG9va3VwKHRzZG4sICZhcmVuYV9lbWFwX2dsb2JhbCwKKwkJ ICAgIGFkZHJfYSk7CisJCWJvb2wgaGVhZF9hID0gZWRhdGFfaXNfaGVhZF9nZXQoYSk7CisJCWVk YXRhX3QgKmIgPSBlbWFwX2VkYXRhX2xvb2t1cCh0c2RuLCAmYXJlbmFfZW1hcF9nbG9iYWwsCisJ CSAgICBhZGRyX2IpOworCQlib29sIGhlYWRfYiA9IGVkYXRhX2lzX2hlYWRfZ2V0KGIpOworCQll bWFwX2Fzc2VydF9tYXBwZWQodHNkbiwgJmFyZW5hX2VtYXBfZ2xvYmFsLCBhKTsKKwkJZW1hcF9h c3NlcnRfbWFwcGVkKHRzZG4sICZhcmVuYV9lbWFwX2dsb2JhbCwgYik7CisJCWFzc2VydChleHRl bnRfbmVpZ2hib3JfaGVhZF9zdGF0ZV9tZXJnZWFibGUoaGVhZF9hLCBoZWFkX2IsCisJCSAgICAv KiBmb3J3YXJkICovIHRydWUpKTsKKwl9CisJaWYgKGhhdmVfZHNzICYmICFleHRlbnRfZHNzX21l cmdlYWJsZShhZGRyX2EsIGFkZHJfYikpIHsKKwkJcmV0dXJuIHRydWU7CisJfQorCisJcmV0dXJu IGZhbHNlOworfQorCitib29sCitlaG9va3NfZGVmYXVsdF9tZXJnZShleHRlbnRfaG9va3NfdCAq ZXh0ZW50X2hvb2tzLCB2b2lkICphZGRyX2EsIHNpemVfdCBzaXplX2EsCisgICAgdm9pZCAqYWRk cl9iLCBzaXplX3Qgc2l6ZV9iLCBib29sIGNvbW1pdHRlZCwgdW5zaWduZWQgYXJlbmFfaW5kKSB7 CisJdHNkbl90ICp0c2RuID0gdHNkbl9mZXRjaCgpOworCisJcmV0dXJuIGVob29rc19kZWZhdWx0 X21lcmdlX2ltcGwodHNkbiwgYWRkcl9hLCBhZGRyX2IpOworfQorCit2b2lkCitlaG9va3NfZGVm YXVsdF96ZXJvX2ltcGwodm9pZCAqYWRkciwgc2l6ZV90IHNpemUpIHsKKwkvKgorCSAqIEJ5IGRl ZmF1bHQsIHdlIHRyeSB0byB6ZXJvIG91dCBtZW1vcnkgdXNpbmcgT1MtcHJvdmlkZWQgZGVtYW5k LXplcm9lZAorCSAqIHBhZ2VzLiAgSWYgdGhlIHVzZXIgaGFzIHNwZWNpZmljYWxseSByZXF1ZXN0 ZWQgaHVnZXBhZ2VzLCB0aG91Z2gsIHdlCisJICogZG9uJ3Qgd2FudCB0byBwdXJnZSBpbiB0aGUg bWlkZGxlIG9mIGEgaHVnZXBhZ2UgKHdoaWNoIHdvdWxkIGJyZWFrIGl0CisJICogdXApLCBzbyB3 ZSBhY3QgY29uc2VydmF0aXZlbHkgYW5kIHVzZSBtZW1zZXQuCisJICovCisJYm9vbCBuZWVkc19t ZW1zZXQgPSB0cnVlOworCWlmIChvcHRfdGhwICE9IHRocF9tb2RlX2Fsd2F5cykgeworCQluZWVk c19tZW1zZXQgPSBwYWdlc19wdXJnZV9mb3JjZWQoYWRkciwgc2l6ZSk7CisJfQorCWlmIChuZWVk c19tZW1zZXQpIHsKKwkJbWVtc2V0KGFkZHIsIDAsIHNpemUpOworCX0KK30KKwordm9pZAorZWhv b2tzX2RlZmF1bHRfZ3VhcmRfaW1wbCh2b2lkICpndWFyZDEsIHZvaWQgKmd1YXJkMikgeworCXBh Z2VzX21hcmtfZ3VhcmRzKGd1YXJkMSwgZ3VhcmQyKTsKK30KKwordm9pZAorZWhvb2tzX2RlZmF1 bHRfdW5ndWFyZF9pbXBsKHZvaWQgKmd1YXJkMSwgdm9pZCAqZ3VhcmQyKSB7CisJcGFnZXNfdW5t YXJrX2d1YXJkcyhndWFyZDEsIGd1YXJkMik7Cit9CisKK2NvbnN0IGV4dGVudF9ob29rc190IGVo b29rc19kZWZhdWx0X2V4dGVudF9ob29rcyA9IHsKKwllaG9va3NfZGVmYXVsdF9hbGxvYywKKwll aG9va3NfZGVmYXVsdF9kYWxsb2MsCisJZWhvb2tzX2RlZmF1bHRfZGVzdHJveSwKKwllaG9va3Nf ZGVmYXVsdF9jb21taXQsCisJZWhvb2tzX2RlZmF1bHRfZGVjb21taXQsCisjaWZkZWYgUEFHRVNf Q0FOX1BVUkdFX0xBWlkKKwllaG9va3NfZGVmYXVsdF9wdXJnZV9sYXp5LAorI2Vsc2UKKwlOVUxM LAorI2VuZGlmCisjaWZkZWYgUEFHRVNfQ0FOX1BVUkdFX0ZPUkNFRAorCWVob29rc19kZWZhdWx0 X3B1cmdlX2ZvcmNlZCwKKyNlbHNlCisJTlVMTCwKKyNlbmRpZgorCWVob29rc19kZWZhdWx0X3Nw bGl0LAorCWVob29rc19kZWZhdWx0X21lcmdlCit9OwoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNl LTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3NyYy9lbWFwLmMgYi8zODktZHMtYmFzZS0zLjMu MC1idWlsZC9qZW1hbGxvYy01LjMuMC9zcmMvZW1hcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAuLjljYzk1YTcKLS0tIC9kZXYvbnVsbAorKysgYi8zODktZHMtYmFzZS0zLjMu MC1idWlsZC9qZW1hbGxvYy01LjMuMC9zcmMvZW1hcC5jCkBAIC0wLDAgKzEsMzg2IEBACisjaW5j bHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvamVtYWxsb2NfcHJlYW1ibGUuaCIKKyNpbmNsdWRlICJq ZW1hbGxvYy9pbnRlcm5hbC9qZW1hbGxvY19pbnRlcm5hbF9pbmNsdWRlcy5oIgorCisjaW5jbHVk ZSAiamVtYWxsb2MvaW50ZXJuYWwvZW1hcC5oIgorCitlbnVtIGVtYXBfbG9ja19yZXN1bHRfZSB7 CisJZW1hcF9sb2NrX3Jlc3VsdF9zdWNjZXNzLAorCWVtYXBfbG9ja19yZXN1bHRfZmFpbHVyZSwK KwllbWFwX2xvY2tfcmVzdWx0X25vX2V4dGVudAorfTsKK3R5cGVkZWYgZW51bSBlbWFwX2xvY2tf cmVzdWx0X2UgZW1hcF9sb2NrX3Jlc3VsdF90OworCitib29sCitlbWFwX2luaXQoZW1hcF90ICpl bWFwLCBiYXNlX3QgKmJhc2UsIGJvb2wgemVyb2VkKSB7CisJcmV0dXJuIHJ0cmVlX25ldygmZW1h cC0+cnRyZWUsIGJhc2UsIHplcm9lZCk7Cit9CisKK3ZvaWQKK2VtYXBfdXBkYXRlX2VkYXRhX3N0 YXRlKHRzZG5fdCAqdHNkbiwgZW1hcF90ICplbWFwLCBlZGF0YV90ICplZGF0YSwKKyAgICBleHRl bnRfc3RhdGVfdCBzdGF0ZSkgeworCXdpdG5lc3NfYXNzZXJ0X3Bvc2l0aXZlX2RlcHRoX3RvX3Jh bmsodHNkbl93aXRuZXNzX3RzZHBfZ2V0KHRzZG4pLAorCSAgICBXSVRORVNTX1JBTktfQ09SRSk7 CisKKwllZGF0YV9zdGF0ZV9zZXQoZWRhdGEsIHN0YXRlKTsKKworCUVNQVBfREVDTEFSRV9SVFJF RV9DVFg7CisJcnRyZWVfbGVhZl9lbG1fdCAqZWxtMSA9IHJ0cmVlX2xlYWZfZWxtX2xvb2t1cCh0 c2RuLCAmZW1hcC0+cnRyZWUsCisJICAgIHJ0cmVlX2N0eCwgKHVpbnRwdHJfdCllZGF0YV9iYXNl X2dldChlZGF0YSksIC8qIGRlcGVuZGVudCAqLyB0cnVlLAorCSAgICAvKiBpbml0X21pc3Npbmcg Ki8gZmFsc2UpOworCWFzc2VydChlbG0xICE9IE5VTEwpOworCXJ0cmVlX2xlYWZfZWxtX3QgKmVs bTIgPSBlZGF0YV9zaXplX2dldChlZGF0YSkgPT0gUEFHRSA/IE5VTEwgOgorCSAgICBydHJlZV9s ZWFmX2VsbV9sb29rdXAodHNkbiwgJmVtYXAtPnJ0cmVlLCBydHJlZV9jdHgsCisJICAgICh1aW50 cHRyX3QpZWRhdGFfbGFzdF9nZXQoZWRhdGEpLCAvKiBkZXBlbmRlbnQgKi8gdHJ1ZSwKKwkgICAg LyogaW5pdF9taXNzaW5nICovIGZhbHNlKTsKKworCXJ0cmVlX2xlYWZfZWxtX3N0YXRlX3VwZGF0 ZSh0c2RuLCAmZW1hcC0+cnRyZWUsIGVsbTEsIGVsbTIsIHN0YXRlKTsKKworCWVtYXBfYXNzZXJ0 X21hcHBlZCh0c2RuLCBlbWFwLCBlZGF0YSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgZWRhdGFfdCAq CitlbWFwX3RyeV9hY3F1aXJlX2VkYXRhX25laWdoYm9yX2ltcGwodHNkbl90ICp0c2RuLCBlbWFw X3QgKmVtYXAsIGVkYXRhX3QgKmVkYXRhLAorICAgIGV4dGVudF9wYWlfdCBwYWksIGV4dGVudF9z dGF0ZV90IGV4cGVjdGVkX3N0YXRlLCBib29sIGZvcndhcmQsCisgICAgYm9vbCBleHBhbmRpbmcp IHsKKwl3aXRuZXNzX2Fzc2VydF9wb3NpdGl2ZV9kZXB0aF90b19yYW5rKHRzZG5fd2l0bmVzc190 c2RwX2dldCh0c2RuKSwKKwkgICAgV0lUTkVTU19SQU5LX0NPUkUpOworCWFzc2VydCghZWRhdGFf Z3VhcmRlZF9nZXQoZWRhdGEpKTsKKwlhc3NlcnQoIWV4cGFuZGluZyB8fCBmb3J3YXJkKTsKKwlh c3NlcnQoIWVkYXRhX3N0YXRlX2luX3RyYW5zaXRpb24oZXhwZWN0ZWRfc3RhdGUpKTsKKwlhc3Nl cnQoZXhwZWN0ZWRfc3RhdGUgPT0gZXh0ZW50X3N0YXRlX2RpcnR5IHx8CisJICAgICAgIGV4cGVj dGVkX3N0YXRlID09IGV4dGVudF9zdGF0ZV9tdXp6eSB8fAorCSAgICAgICBleHBlY3RlZF9zdGF0 ZSA9PSBleHRlbnRfc3RhdGVfcmV0YWluZWQpOworCisJdm9pZCAqbmVpZ2hib3JfYWRkciA9IGZv cndhcmQgPyBlZGF0YV9wYXN0X2dldChlZGF0YSkgOgorCSAgICBlZGF0YV9iZWZvcmVfZ2V0KGVk YXRhKTsKKwkvKgorCSAqIFRoaXMgaXMgc3VidGxlOyB0aGUgcnRyZWUgY29kZSBhc3NlcnRzIHRo YXQgaXRzIGlucHV0IHBvaW50ZXIgaXMKKwkgKiBub24tTlVMTCwgYW5kIHRoaXMgaXMgYSB1c2Vm dWwgdGhpbmcgdG8gY2hlY2suICBCdXQgaXQncyBwb3NzaWJsZQorCSAqIHRoYXQgZWRhdGEgY29y cmVzcG9uZHMgdG8gYW4gYWRkcmVzcyBvZiAodm9pZCAqKVBBR0UgKGluIHByYWN0aWNlLAorCSAq IHRoaXMgaGFzIG9ubHkgYmVlbiBvYnNlcnZlZCBvbiBGcmVlQlNEIHdoZW4gYWRkcmVzcy1zcGFj ZQorCSAqIHJhbmRvbWl6YXRpb24gaXMgb24sIGJ1dCBpdCBjb3VsZCBpbiBwcmluY2lwbGUgaGFw cGVuIGFueXdoZXJlKS4gIEluCisJICogdGhpcyBjYXNlLCBlZGF0YV9iZWZvcmVfZ2V0KGVkYXRh KSBpcyBOVUxMLCB0cmlnZ2VyaW5nIHRoZSBhc3NlcnQuCisJICovCisJaWYgKG5laWdoYm9yX2Fk ZHIgPT0gTlVMTCkgeworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlFTUFQX0RFQ0xBUkVfUlRSRUVf Q1RYOworCXJ0cmVlX2xlYWZfZWxtX3QgKmVsbSA9IHJ0cmVlX2xlYWZfZWxtX2xvb2t1cCh0c2Ru LCAmZW1hcC0+cnRyZWUsCisJICAgIHJ0cmVlX2N0eCwgKHVpbnRwdHJfdCluZWlnaGJvcl9hZGRy LCAvKiBkZXBlbmRlbnQqLyBmYWxzZSwKKwkgICAgLyogaW5pdF9taXNzaW5nICovIGZhbHNlKTsK KwlpZiAoZWxtID09IE5VTEwpIHsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJcnRyZWVfY29udGVu dHNfdCBuZWlnaGJvcl9jb250ZW50cyA9IHJ0cmVlX2xlYWZfZWxtX3JlYWQodHNkbiwKKwkgICAg JmVtYXAtPnJ0cmVlLCBlbG0sIC8qIGRlcGVuZGVudCAqLyB0cnVlKTsKKwlpZiAoIWV4dGVudF9j YW5fYWNxdWlyZV9uZWlnaGJvcihlZGF0YSwgbmVpZ2hib3JfY29udGVudHMsIHBhaSwKKwkgICAg ZXhwZWN0ZWRfc3RhdGUsIGZvcndhcmQsIGV4cGFuZGluZykpIHsKKwkJcmV0dXJuIE5VTEw7CisJ fQorCisJLyogRnJvbSB0aGlzIHBvaW50LCB0aGUgbmVpZ2hib3IgZWRhdGEgY2FuIGJlIHNhZmVs eSBhY3F1aXJlZC4gKi8KKwllZGF0YV90ICpuZWlnaGJvciA9IG5laWdoYm9yX2NvbnRlbnRzLmVk YXRhOworCWFzc2VydChlZGF0YV9zdGF0ZV9nZXQobmVpZ2hib3IpID09IGV4cGVjdGVkX3N0YXRl KTsKKwllbWFwX3VwZGF0ZV9lZGF0YV9zdGF0ZSh0c2RuLCBlbWFwLCBuZWlnaGJvciwgZXh0ZW50 X3N0YXRlX21lcmdpbmcpOworCWlmIChleHBhbmRpbmcpIHsKKwkJZXh0ZW50X2Fzc2VydF9jYW5f ZXhwYW5kKGVkYXRhLCBuZWlnaGJvcik7CisJfSBlbHNlIHsKKwkJZXh0ZW50X2Fzc2VydF9jYW5f Y29hbGVzY2UoZWRhdGEsIG5laWdoYm9yKTsKKwl9CisKKwlyZXR1cm4gbmVpZ2hib3I7Cit9CisK K2VkYXRhX3QgKgorZW1hcF90cnlfYWNxdWlyZV9lZGF0YV9uZWlnaGJvcih0c2RuX3QgKnRzZG4s IGVtYXBfdCAqZW1hcCwgZWRhdGFfdCAqZWRhdGEsCisgICAgZXh0ZW50X3BhaV90IHBhaSwgZXh0 ZW50X3N0YXRlX3QgZXhwZWN0ZWRfc3RhdGUsIGJvb2wgZm9yd2FyZCkgeworCXJldHVybiBlbWFw X3RyeV9hY3F1aXJlX2VkYXRhX25laWdoYm9yX2ltcGwodHNkbiwgZW1hcCwgZWRhdGEsIHBhaSwK KwkgICAgZXhwZWN0ZWRfc3RhdGUsIGZvcndhcmQsIC8qIGV4cGFuZCAqLyBmYWxzZSk7Cit9CisK K2VkYXRhX3QgKgorZW1hcF90cnlfYWNxdWlyZV9lZGF0YV9uZWlnaGJvcl9leHBhbmQodHNkbl90 ICp0c2RuLCBlbWFwX3QgKmVtYXAsCisgICAgZWRhdGFfdCAqZWRhdGEsIGV4dGVudF9wYWlfdCBw YWksIGV4dGVudF9zdGF0ZV90IGV4cGVjdGVkX3N0YXRlKSB7CisJLyogVHJ5IGV4cGFuZGluZyBm b3J3YXJkLiAqLworCXJldHVybiBlbWFwX3RyeV9hY3F1aXJlX2VkYXRhX25laWdoYm9yX2ltcGwo dHNkbiwgZW1hcCwgZWRhdGEsIHBhaSwKKwkgICAgZXhwZWN0ZWRfc3RhdGUsIC8qIGZvcndhcmQg Ki8gdHJ1ZSwgLyogZXhwYW5kICovIHRydWUpOworfQorCit2b2lkCitlbWFwX3JlbGVhc2VfZWRh dGEodHNkbl90ICp0c2RuLCBlbWFwX3QgKmVtYXAsIGVkYXRhX3QgKmVkYXRhLAorICAgIGV4dGVu dF9zdGF0ZV90IG5ld19zdGF0ZSkgeworCWFzc2VydChlbWFwX2VkYXRhX2luX3RyYW5zaXRpb24o dHNkbiwgZW1hcCwgZWRhdGEpKTsKKwlhc3NlcnQoZW1hcF9lZGF0YV9pc19hY3F1aXJlZCh0c2Ru LCBlbWFwLCBlZGF0YSkpOworCisJZW1hcF91cGRhdGVfZWRhdGFfc3RhdGUodHNkbiwgZW1hcCwg ZWRhdGEsIG5ld19zdGF0ZSk7Cit9CisKK3N0YXRpYyBib29sCitlbWFwX3J0cmVlX2xlYWZfZWxt c19sb29rdXAodHNkbl90ICp0c2RuLCBlbWFwX3QgKmVtYXAsIHJ0cmVlX2N0eF90ICpydHJlZV9j dHgsCisgICAgY29uc3QgZWRhdGFfdCAqZWRhdGEsIGJvb2wgZGVwZW5kZW50LCBib29sIGluaXRf bWlzc2luZywKKyAgICBydHJlZV9sZWFmX2VsbV90ICoqcl9lbG1fYSwgcnRyZWVfbGVhZl9lbG1f dCAqKnJfZWxtX2IpIHsKKwkqcl9lbG1fYSA9IHJ0cmVlX2xlYWZfZWxtX2xvb2t1cCh0c2RuLCAm ZW1hcC0+cnRyZWUsIHJ0cmVlX2N0eCwKKwkgICAgKHVpbnRwdHJfdCllZGF0YV9iYXNlX2dldChl ZGF0YSksIGRlcGVuZGVudCwgaW5pdF9taXNzaW5nKTsKKwlpZiAoIWRlcGVuZGVudCAmJiAqcl9l bG1fYSA9PSBOVUxMKSB7CisJCXJldHVybiB0cnVlOworCX0KKwlhc3NlcnQoKnJfZWxtX2EgIT0g TlVMTCk7CisKKwkqcl9lbG1fYiA9IHJ0cmVlX2xlYWZfZWxtX2xvb2t1cCh0c2RuLCAmZW1hcC0+ cnRyZWUsIHJ0cmVlX2N0eCwKKwkgICAgKHVpbnRwdHJfdCllZGF0YV9sYXN0X2dldChlZGF0YSks IGRlcGVuZGVudCwgaW5pdF9taXNzaW5nKTsKKwlpZiAoIWRlcGVuZGVudCAmJiAqcl9lbG1fYiA9 PSBOVUxMKSB7CisJCXJldHVybiB0cnVlOworCX0KKwlhc3NlcnQoKnJfZWxtX2IgIT0gTlVMTCk7 CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyB2b2lkCitlbWFwX3J0cmVlX3dyaXRlX2Fj cXVpcmVkKHRzZG5fdCAqdHNkbiwgZW1hcF90ICplbWFwLCBydHJlZV9sZWFmX2VsbV90ICplbG1f YSwKKyAgICBydHJlZV9sZWFmX2VsbV90ICplbG1fYiwgZWRhdGFfdCAqZWRhdGEsIHN6aW5kX3Qg c3ppbmQsIGJvb2wgc2xhYikgeworCXJ0cmVlX2NvbnRlbnRzX3QgY29udGVudHM7CisJY29udGVu dHMuZWRhdGEgPSBlZGF0YTsKKwljb250ZW50cy5tZXRhZGF0YS5zemluZCA9IHN6aW5kOworCWNv bnRlbnRzLm1ldGFkYXRhLnNsYWIgPSBzbGFiOworCWNvbnRlbnRzLm1ldGFkYXRhLmlzX2hlYWQg PSAoZWRhdGEgPT0gTlVMTCkgPyBmYWxzZSA6CisJICAgIGVkYXRhX2lzX2hlYWRfZ2V0KGVkYXRh KTsKKwljb250ZW50cy5tZXRhZGF0YS5zdGF0ZSA9IChlZGF0YSA9PSBOVUxMKSA/IDAgOiBlZGF0 YV9zdGF0ZV9nZXQoZWRhdGEpOworCXJ0cmVlX2xlYWZfZWxtX3dyaXRlKHRzZG4sICZlbWFwLT5y dHJlZSwgZWxtX2EsIGNvbnRlbnRzKTsKKwlpZiAoZWxtX2IgIT0gTlVMTCkgeworCQlydHJlZV9s ZWFmX2VsbV93cml0ZSh0c2RuLCAmZW1hcC0+cnRyZWUsIGVsbV9iLCBjb250ZW50cyk7CisJfQor fQorCitib29sCitlbWFwX3JlZ2lzdGVyX2JvdW5kYXJ5KHRzZG5fdCAqdHNkbiwgZW1hcF90ICpl bWFwLCBlZGF0YV90ICplZGF0YSwKKyAgICBzemluZF90IHN6aW5kLCBib29sIHNsYWIpIHsKKwlh c3NlcnQoZWRhdGFfc3RhdGVfZ2V0KGVkYXRhKSA9PSBleHRlbnRfc3RhdGVfYWN0aXZlKTsKKwlF TUFQX0RFQ0xBUkVfUlRSRUVfQ1RYOworCisJcnRyZWVfbGVhZl9lbG1fdCAqZWxtX2EsICplbG1f YjsKKwlib29sIGVyciA9IGVtYXBfcnRyZWVfbGVhZl9lbG1zX2xvb2t1cCh0c2RuLCBlbWFwLCBy dHJlZV9jdHgsIGVkYXRhLAorCSAgICBmYWxzZSwgdHJ1ZSwgJmVsbV9hLCAmZWxtX2IpOworCWlm IChlcnIpIHsKKwkJcmV0dXJuIHRydWU7CisJfQorCWFzc2VydChydHJlZV9sZWFmX2VsbV9yZWFk KHRzZG4sICZlbWFwLT5ydHJlZSwgZWxtX2EsCisJICAgIC8qIGRlcGVuZGVudCAqLyBmYWxzZSku ZWRhdGEgPT0gTlVMTCk7CisJYXNzZXJ0KHJ0cmVlX2xlYWZfZWxtX3JlYWQodHNkbiwgJmVtYXAt PnJ0cmVlLCBlbG1fYiwKKwkgICAgLyogZGVwZW5kZW50ICovIGZhbHNlKS5lZGF0YSA9PSBOVUxM KTsKKwllbWFwX3J0cmVlX3dyaXRlX2FjcXVpcmVkKHRzZG4sIGVtYXAsIGVsbV9hLCBlbG1fYiwg ZWRhdGEsIHN6aW5kLCBzbGFiKTsKKwlyZXR1cm4gZmFsc2U7Cit9CisKKy8qIEludm9rZWQgKmFm dGVyKiBlbWFwX3JlZ2lzdGVyX2JvdW5kYXJ5LiAqLwordm9pZAorZW1hcF9yZWdpc3Rlcl9pbnRl cmlvcih0c2RuX3QgKnRzZG4sIGVtYXBfdCAqZW1hcCwgZWRhdGFfdCAqZWRhdGEsCisgICAgc3pp bmRfdCBzemluZCkgeworCUVNQVBfREVDTEFSRV9SVFJFRV9DVFg7CisKKwlhc3NlcnQoZWRhdGFf c2xhYl9nZXQoZWRhdGEpKTsKKwlhc3NlcnQoZWRhdGFfc3RhdGVfZ2V0KGVkYXRhKSA9PSBleHRl bnRfc3RhdGVfYWN0aXZlKTsKKworCWlmIChjb25maWdfZGVidWcpIHsKKwkJLyogTWFraW5nIHN1 cmUgdGhlIGJvdW5kYXJ5IGlzIHJlZ2lzdGVyZWQgYWxyZWFkeS4gKi8KKwkJcnRyZWVfbGVhZl9l bG1fdCAqZWxtX2EsICplbG1fYjsKKwkJYm9vbCBlcnIgPSBlbWFwX3J0cmVlX2xlYWZfZWxtc19s b29rdXAodHNkbiwgZW1hcCwgcnRyZWVfY3R4LAorCQkgICAgZWRhdGEsIC8qIGRlcGVuZGVudCAq LyB0cnVlLCAvKiBpbml0X21pc3NpbmcgKi8gZmFsc2UsCisJCSAgICAmZWxtX2EsICZlbG1fYik7 CisJCWFzc2VydCghZXJyKTsKKwkJcnRyZWVfY29udGVudHNfdCBjb250ZW50c19hLCBjb250ZW50 c19iOworCQljb250ZW50c19hID0gcnRyZWVfbGVhZl9lbG1fcmVhZCh0c2RuLCAmZW1hcC0+cnRy ZWUsIGVsbV9hLAorCQkgICAgLyogZGVwZW5kZW50ICovIHRydWUpOworCQljb250ZW50c19iID0g cnRyZWVfbGVhZl9lbG1fcmVhZCh0c2RuLCAmZW1hcC0+cnRyZWUsIGVsbV9iLAorCQkgICAgLyog ZGVwZW5kZW50ICovIHRydWUpOworCQlhc3NlcnQoY29udGVudHNfYS5lZGF0YSA9PSBlZGF0YSAm JiBjb250ZW50c19iLmVkYXRhID09IGVkYXRhKTsKKwkJYXNzZXJ0KGNvbnRlbnRzX2EubWV0YWRh dGEuc2xhYiAmJiBjb250ZW50c19iLm1ldGFkYXRhLnNsYWIpOworCX0KKworCXJ0cmVlX2NvbnRl bnRzX3QgY29udGVudHM7CisJY29udGVudHMuZWRhdGEgPSBlZGF0YTsKKwljb250ZW50cy5tZXRh ZGF0YS5zemluZCA9IHN6aW5kOworCWNvbnRlbnRzLm1ldGFkYXRhLnNsYWIgPSB0cnVlOworCWNv bnRlbnRzLm1ldGFkYXRhLnN0YXRlID0gZXh0ZW50X3N0YXRlX2FjdGl2ZTsKKwljb250ZW50cy5t ZXRhZGF0YS5pc19oZWFkID0gZmFsc2U7IC8qIE5vdCBhbGxvd2VkIHRvIGFjY2Vzcy4gKi8KKwor CWFzc2VydChlZGF0YV9zaXplX2dldChlZGF0YSkgPiAoMiA8PCBMR19QQUdFKSk7CisJcnRyZWVf d3JpdGVfcmFuZ2UodHNkbiwgJmVtYXAtPnJ0cmVlLCBydHJlZV9jdHgsCisJICAgICh1aW50cHRy X3QpZWRhdGFfYmFzZV9nZXQoZWRhdGEpICsgUEFHRSwKKwkgICAgKHVpbnRwdHJfdCllZGF0YV9s YXN0X2dldChlZGF0YSkgLSBQQUdFLCBjb250ZW50cyk7Cit9CisKK3ZvaWQKK2VtYXBfZGVyZWdp c3Rlcl9ib3VuZGFyeSh0c2RuX3QgKnRzZG4sIGVtYXBfdCAqZW1hcCwgZWRhdGFfdCAqZWRhdGEp IHsKKwkvKgorCSAqIFRoZSBlZGF0YSBtdXN0IGJlIGVpdGhlciBpbiBhbiBhY3F1aXJlZCBzdGF0 ZSwgb3IgcHJvdGVjdGVkIGJ5IHN0YXRlCisJICogYmFzZWQgbG9ja3MuCisJICovCisJaWYgKCFl bWFwX2VkYXRhX2lzX2FjcXVpcmVkKHRzZG4sIGVtYXAsIGVkYXRhKSkgeworCQl3aXRuZXNzX2Fz c2VydF9wb3NpdGl2ZV9kZXB0aF90b19yYW5rKAorCQkgICAgdHNkbl93aXRuZXNzX3RzZHBfZ2V0 KHRzZG4pLCBXSVRORVNTX1JBTktfQ09SRSk7CisJfQorCisJRU1BUF9ERUNMQVJFX1JUUkVFX0NU WDsKKwlydHJlZV9sZWFmX2VsbV90ICplbG1fYSwgKmVsbV9iOworCisJZW1hcF9ydHJlZV9sZWFm X2VsbXNfbG9va3VwKHRzZG4sIGVtYXAsIHJ0cmVlX2N0eCwgZWRhdGEsCisJICAgIHRydWUsIGZh bHNlLCAmZWxtX2EsICZlbG1fYik7CisJZW1hcF9ydHJlZV93cml0ZV9hY3F1aXJlZCh0c2RuLCBl bWFwLCBlbG1fYSwgZWxtX2IsIE5VTEwsIFNDX05TSVpFUywKKwkgICAgZmFsc2UpOworfQorCit2 b2lkCitlbWFwX2RlcmVnaXN0ZXJfaW50ZXJpb3IodHNkbl90ICp0c2RuLCBlbWFwX3QgKmVtYXAs IGVkYXRhX3QgKmVkYXRhKSB7CisJRU1BUF9ERUNMQVJFX1JUUkVFX0NUWDsKKworCWFzc2VydChl ZGF0YV9zbGFiX2dldChlZGF0YSkpOworCWlmIChlZGF0YV9zaXplX2dldChlZGF0YSkgPiAoMiA8 PCBMR19QQUdFKSkgeworCQlydHJlZV9jbGVhcl9yYW5nZSh0c2RuLCAmZW1hcC0+cnRyZWUsIHJ0 cmVlX2N0eCwKKwkJICAgICh1aW50cHRyX3QpZWRhdGFfYmFzZV9nZXQoZWRhdGEpICsgUEFHRSwK KwkJICAgICh1aW50cHRyX3QpZWRhdGFfbGFzdF9nZXQoZWRhdGEpIC0gUEFHRSk7CisJfQorfQor Cit2b2lkCitlbWFwX3JlbWFwKHRzZG5fdCAqdHNkbiwgZW1hcF90ICplbWFwLCBlZGF0YV90ICpl ZGF0YSwgc3ppbmRfdCBzemluZCwKKyAgICBib29sIHNsYWIpIHsKKwlFTUFQX0RFQ0xBUkVfUlRS RUVfQ1RYOworCisJaWYgKHN6aW5kICE9IFNDX05TSVpFUykgeworCQlydHJlZV9jb250ZW50c190 IGNvbnRlbnRzOworCQljb250ZW50cy5lZGF0YSA9IGVkYXRhOworCQljb250ZW50cy5tZXRhZGF0 YS5zemluZCA9IHN6aW5kOworCQljb250ZW50cy5tZXRhZGF0YS5zbGFiID0gc2xhYjsKKwkJY29u dGVudHMubWV0YWRhdGEuaXNfaGVhZCA9IGVkYXRhX2lzX2hlYWRfZ2V0KGVkYXRhKTsKKwkJY29u dGVudHMubWV0YWRhdGEuc3RhdGUgPSBlZGF0YV9zdGF0ZV9nZXQoZWRhdGEpOworCisJCXJ0cmVl X3dyaXRlKHRzZG4sICZlbWFwLT5ydHJlZSwgcnRyZWVfY3R4LAorCQkgICAgKHVpbnRwdHJfdCll ZGF0YV9hZGRyX2dldChlZGF0YSksIGNvbnRlbnRzKTsKKwkJLyoKKwkJICogUmVjYWxsIHRoYXQg dGhpcyBpcyBjYWxsZWQgb25seSBmb3IgYWN0aXZlLT5pbmFjdGl2ZSBhbmQKKwkJICogaW5hY3Rp dmUtPmFjdGl2ZSB0cmFuc2l0aW9ucyAoc2luY2Ugb25seSBhY3RpdmUgZXh0ZW50cyBoYXZlCisJ CSAqIG1lYW5pbmdmdWwgdmFsdWVzIGZvciBzemluZCBhbmQgc2xhYikuICBBY3RpdmUsIG5vbi1z bGFiCisJCSAqIGV4dGVudHMgb25seSBuZWVkIHRvIGhhbmRsZSBsb29rdXBzIGF0IHRoZWlyIGhl YWQgKG9uCisJCSAqIGRlYWxsb2NhdGlvbiksIHNvIHdlIGRvbid0IGJvdGhlciBmaWxsaW5nIGlu IHRoZSBlbmQKKwkJICogYm91bmRhcnkuCisJCSAqCisJCSAqIEZvciBzbGFiIGV4dGVudHMsIHdl IGRvIHRoZSBlbmQtbWFwcGluZyBjaGFuZ2UuICBUaGlzIHN0aWxsCisJCSAqIGxlYXZlcyB0aGUg aW50ZXJpb3IgdW5tb2RpZmllZDsgYW4gZW1hcF9yZWdpc3Rlcl9pbnRlcmlvcgorCQkgKiBjYWxs IGlzIGNvbWluZyBpbiB0aG9zZSBjYXNlcywgdGhvdWdoLgorCQkgKi8KKwkJaWYgKHNsYWIgJiYg ZWRhdGFfc2l6ZV9nZXQoZWRhdGEpID4gUEFHRSkgeworCQkJdWludHB0cl90IGtleSA9ICh1aW50 cHRyX3QpZWRhdGFfcGFzdF9nZXQoZWRhdGEpCisJCQkgICAgLSAodWludHB0cl90KVBBR0U7CisJ CQlydHJlZV93cml0ZSh0c2RuLCAmZW1hcC0+cnRyZWUsIHJ0cmVlX2N0eCwga2V5LAorCQkJICAg IGNvbnRlbnRzKTsKKwkJfQorCX0KK30KKworYm9vbAorZW1hcF9zcGxpdF9wcmVwYXJlKHRzZG5f dCAqdHNkbiwgZW1hcF90ICplbWFwLCBlbWFwX3ByZXBhcmVfdCAqcHJlcGFyZSwKKyAgICBlZGF0 YV90ICplZGF0YSwgc2l6ZV90IHNpemVfYSwgZWRhdGFfdCAqdHJhaWwsIHNpemVfdCBzaXplX2Ip IHsKKwlFTUFQX0RFQ0xBUkVfUlRSRUVfQ1RYOworCisJLyoKKwkgKiBXZSB1c2UgaW5jb3JyZWN0 IGNvbnN0YW50cyBmb3IgdGhpbmdzIGxpa2UgYXJlbmEgaW5kLCB6ZXJvLCByYW5nZWQsCisJICog YW5kIGNvbW1pdCBzdGF0ZSwgYW5kIGhlYWQgc3RhdHVzLiAgVGhpcyBpcyBhIGZha2UgZWRhdGFf dCwgdXNlZCB0bworCSAqIGZhY2lsaXRhdGUgYSBsb29rdXAuCisJICovCisJZWRhdGFfdCBsZWFk ID0gezB9OworCWVkYXRhX2luaXQoJmxlYWQsIDBVLCBlZGF0YV9hZGRyX2dldChlZGF0YSksIHNp emVfYSwgZmFsc2UsIDAsIDAsCisJICAgIGV4dGVudF9zdGF0ZV9hY3RpdmUsIGZhbHNlLCBmYWxz ZSwgRVhURU5UX1BBSV9QQUMsIEVYVEVOVF9OT1RfSEVBRCk7CisKKwllbWFwX3J0cmVlX2xlYWZf ZWxtc19sb29rdXAodHNkbiwgZW1hcCwgcnRyZWVfY3R4LCAmbGVhZCwgZmFsc2UsIHRydWUsCisJ ICAgICZwcmVwYXJlLT5sZWFkX2VsbV9hLCAmcHJlcGFyZS0+bGVhZF9lbG1fYik7CisJZW1hcF9y dHJlZV9sZWFmX2VsbXNfbG9va3VwKHRzZG4sIGVtYXAsIHJ0cmVlX2N0eCwgdHJhaWwsIGZhbHNl LCB0cnVlLAorCSAgICAmcHJlcGFyZS0+dHJhaWxfZWxtX2EsICZwcmVwYXJlLT50cmFpbF9lbG1f Yik7CisKKwlpZiAocHJlcGFyZS0+bGVhZF9lbG1fYSA9PSBOVUxMIHx8IHByZXBhcmUtPmxlYWRf ZWxtX2IgPT0gTlVMTAorCSAgICB8fCBwcmVwYXJlLT50cmFpbF9lbG1fYSA9PSBOVUxMIHx8IHBy ZXBhcmUtPnRyYWlsX2VsbV9iID09IE5VTEwpIHsKKwkJcmV0dXJuIHRydWU7CisJfQorCXJldHVy biBmYWxzZTsKK30KKwordm9pZAorZW1hcF9zcGxpdF9jb21taXQodHNkbl90ICp0c2RuLCBlbWFw X3QgKmVtYXAsIGVtYXBfcHJlcGFyZV90ICpwcmVwYXJlLAorICAgIGVkYXRhX3QgKmxlYWQsIHNp emVfdCBzaXplX2EsIGVkYXRhX3QgKnRyYWlsLCBzaXplX3Qgc2l6ZV9iKSB7CisJLyoKKwkgKiBX ZSBzaG91bGQgdGhpbmsgYWJvdXQgbm90IHdyaXRpbmcgdG8gdGhlIGxlYWQgbGVhZiBlbGVtZW50 LiAgV2UgY2FuCisJICogZ2V0IGludG8gc2l0dWF0aW9ucyB3aGVyZSBhIHJhY2luZyByZWFsbG9j LWxpa2UgY2FsbCBjYW4gZGlzYWdyZWUKKwkgKiB3aXRoIGEgc2l6ZSBsb29rdXAgcmVxdWVzdC4g IEkgdGhpbmsgaXQncyBmaW5lIHRvIGRlY2xhcmUgdGhhdCB0aGVzZQorCSAqIHNpdHVhdGlvbnMg YXJlIHJhY2UgYnVncywgYnV0IHRoZXJlJ3MgYW4gYXJndW1lbnQgdG8gYmUgbWFkZSB0aGF0IGZv cgorCSAqIHRoaW5ncyBsaWtlIHhhbGxvY3gsIGEgc2l6ZSBsb29rdXAgY2FsbCBzaG91bGQgcmV0 dXJuIGVpdGhlciB0aGUgb2xkCisJICogc2l6ZSBvciB0aGUgbmV3IHNpemUsIGJ1dCBub3QgYW55 dGhpbmcgZWxzZS4KKwkgKi8KKwllbWFwX3J0cmVlX3dyaXRlX2FjcXVpcmVkKHRzZG4sIGVtYXAs IHByZXBhcmUtPmxlYWRfZWxtX2EsCisJICAgIHByZXBhcmUtPmxlYWRfZWxtX2IsIGxlYWQsIFND X05TSVpFUywgLyogc2xhYiAqLyBmYWxzZSk7CisJZW1hcF9ydHJlZV93cml0ZV9hY3F1aXJlZCh0 c2RuLCBlbWFwLCBwcmVwYXJlLT50cmFpbF9lbG1fYSwKKwkgICAgcHJlcGFyZS0+dHJhaWxfZWxt X2IsIHRyYWlsLCBTQ19OU0laRVMsIC8qIHNsYWIgKi8gZmFsc2UpOworfQorCit2b2lkCitlbWFw X21lcmdlX3ByZXBhcmUodHNkbl90ICp0c2RuLCBlbWFwX3QgKmVtYXAsIGVtYXBfcHJlcGFyZV90 ICpwcmVwYXJlLAorICAgIGVkYXRhX3QgKmxlYWQsIGVkYXRhX3QgKnRyYWlsKSB7CisJRU1BUF9E RUNMQVJFX1JUUkVFX0NUWDsKKwllbWFwX3J0cmVlX2xlYWZfZWxtc19sb29rdXAodHNkbiwgZW1h cCwgcnRyZWVfY3R4LCBsZWFkLCB0cnVlLCBmYWxzZSwKKwkgICAgJnByZXBhcmUtPmxlYWRfZWxt X2EsICZwcmVwYXJlLT5sZWFkX2VsbV9iKTsKKwllbWFwX3J0cmVlX2xlYWZfZWxtc19sb29rdXAo dHNkbiwgZW1hcCwgcnRyZWVfY3R4LCB0cmFpbCwgdHJ1ZSwgZmFsc2UsCisJICAgICZwcmVwYXJl LT50cmFpbF9lbG1fYSwgJnByZXBhcmUtPnRyYWlsX2VsbV9iKTsKK30KKwordm9pZAorZW1hcF9t ZXJnZV9jb21taXQodHNkbl90ICp0c2RuLCBlbWFwX3QgKmVtYXAsIGVtYXBfcHJlcGFyZV90ICpw cmVwYXJlLAorICAgIGVkYXRhX3QgKmxlYWQsIGVkYXRhX3QgKnRyYWlsKSB7CisJcnRyZWVfY29u dGVudHNfdCBjbGVhcl9jb250ZW50czsKKwljbGVhcl9jb250ZW50cy5lZGF0YSA9IE5VTEw7CisJ Y2xlYXJfY29udGVudHMubWV0YWRhdGEuc3ppbmQgPSBTQ19OU0laRVM7CisJY2xlYXJfY29udGVu dHMubWV0YWRhdGEuc2xhYiA9IGZhbHNlOworCWNsZWFyX2NvbnRlbnRzLm1ldGFkYXRhLmlzX2hl YWQgPSBmYWxzZTsKKwljbGVhcl9jb250ZW50cy5tZXRhZGF0YS5zdGF0ZSA9IChleHRlbnRfc3Rh dGVfdCkwOworCisJaWYgKHByZXBhcmUtPmxlYWRfZWxtX2IgIT0gTlVMTCkgeworCQlydHJlZV9s ZWFmX2VsbV93cml0ZSh0c2RuLCAmZW1hcC0+cnRyZWUsCisJCSAgICBwcmVwYXJlLT5sZWFkX2Vs bV9iLCBjbGVhcl9jb250ZW50cyk7CisJfQorCisJcnRyZWVfbGVhZl9lbG1fdCAqbWVyZ2VkX2I7 CisJaWYgKHByZXBhcmUtPnRyYWlsX2VsbV9iICE9IE5VTEwpIHsKKwkJcnRyZWVfbGVhZl9lbG1f d3JpdGUodHNkbiwgJmVtYXAtPnJ0cmVlLAorCQkgICAgcHJlcGFyZS0+dHJhaWxfZWxtX2EsIGNs ZWFyX2NvbnRlbnRzKTsKKwkJbWVyZ2VkX2IgPSBwcmVwYXJlLT50cmFpbF9lbG1fYjsKKwl9IGVs c2UgeworCQltZXJnZWRfYiA9IHByZXBhcmUtPnRyYWlsX2VsbV9hOworCX0KKworCWVtYXBfcnRy ZWVfd3JpdGVfYWNxdWlyZWQodHNkbiwgZW1hcCwgcHJlcGFyZS0+bGVhZF9lbG1fYSwgbWVyZ2Vk X2IsCisJICAgIGxlYWQsIFNDX05TSVpFUywgZmFsc2UpOworfQorCit2b2lkCitlbWFwX2RvX2Fz c2VydF9tYXBwZWQodHNkbl90ICp0c2RuLCBlbWFwX3QgKmVtYXAsIGVkYXRhX3QgKmVkYXRhKSB7 CisJRU1BUF9ERUNMQVJFX1JUUkVFX0NUWDsKKworCXJ0cmVlX2NvbnRlbnRzX3QgY29udGVudHMg PSBydHJlZV9yZWFkKHRzZG4sICZlbWFwLT5ydHJlZSwgcnRyZWVfY3R4LAorCSAgICAodWludHB0 cl90KWVkYXRhX2Jhc2VfZ2V0KGVkYXRhKSk7CisJYXNzZXJ0KGNvbnRlbnRzLmVkYXRhID09IGVk YXRhKTsKKwlhc3NlcnQoY29udGVudHMubWV0YWRhdGEuaXNfaGVhZCA9PSBlZGF0YV9pc19oZWFk X2dldChlZGF0YSkpOworCWFzc2VydChjb250ZW50cy5tZXRhZGF0YS5zdGF0ZSA9PSBlZGF0YV9z dGF0ZV9nZXQoZWRhdGEpKTsKK30KKwordm9pZAorZW1hcF9kb19hc3NlcnRfbm90X21hcHBlZCh0 c2RuX3QgKnRzZG4sIGVtYXBfdCAqZW1hcCwgZWRhdGFfdCAqZWRhdGEpIHsKKwllbWFwX2Z1bGxf YWxsb2NfY3R4X3QgY29udGV4dDEgPSB7MH07CisJZW1hcF9mdWxsX2FsbG9jX2N0eF90cnlfbG9v a3VwKHRzZG4sIGVtYXAsIGVkYXRhX2Jhc2VfZ2V0KGVkYXRhKSwKKwkgICAgJmNvbnRleHQxKTsK Kwlhc3NlcnQoY29udGV4dDEuZWRhdGEgPT0gTlVMTCk7CisKKwllbWFwX2Z1bGxfYWxsb2NfY3R4 X3QgY29udGV4dDIgPSB7MH07CisJZW1hcF9mdWxsX2FsbG9jX2N0eF90cnlfbG9va3VwKHRzZG4s IGVtYXAsIGVkYXRhX2xhc3RfZ2V0KGVkYXRhKSwKKwkgICAgJmNvbnRleHQyKTsKKwlhc3NlcnQo Y29udGV4dDIuZWRhdGEgPT0gTlVMTCk7Cit9CgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4z LjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvc3JjL2VzZXQuYyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1 aWxkL2plbWFsbG9jLTUuMy4wL3NyYy9lc2V0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMC4uNmY4ZjMzNQotLS0gL2Rldi9udWxsCisrKyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1 aWxkL2plbWFsbG9jLTUuMy4wL3NyYy9lc2V0LmMKQEAgLTAsMCArMSwyODIgQEAKKyNpbmNsdWRl ICJqZW1hbGxvYy9pbnRlcm5hbC9qZW1hbGxvY19wcmVhbWJsZS5oIgorI2luY2x1ZGUgImplbWFs bG9jL2ludGVybmFsL2plbWFsbG9jX2ludGVybmFsX2luY2x1ZGVzLmgiCisKKyNpbmNsdWRlICJq ZW1hbGxvYy9pbnRlcm5hbC9lc2V0LmgiCisKKyNkZWZpbmUgRVNFVF9OUFNJWkVTIChTQ19OUFNJ WkVTICsgMSkKKworc3RhdGljIHZvaWQKK2VzZXRfYmluX2luaXQoZXNldF9iaW5fdCAqYmluKSB7 CisJZWRhdGFfaGVhcF9uZXcoJmJpbi0+aGVhcCk7CisJLyoKKwkgKiBoZWFwX21pbiBkb2Vzbid0 IG5lZWQgaW5pdGlhbGl6YXRpb247IGl0IGdldHMgZmlsbGVkIGluIHdoZW4gdGhlIGJpbgorCSAq IGdvZXMgZnJvbSBub24tZW1wdHkgdG8gZW1wdHkuCisJICovCit9CisKK3N0YXRpYyB2b2lkCitl c2V0X2Jpbl9zdGF0c19pbml0KGVzZXRfYmluX3N0YXRzX3QgKmJpbl9zdGF0cykgeworCWF0b21p Y19zdG9yZV96dSgmYmluX3N0YXRzLT5uZXh0ZW50cywgMCwgQVRPTUlDX1JFTEFYRUQpOworCWF0 b21pY19zdG9yZV96dSgmYmluX3N0YXRzLT5uYnl0ZXMsIDAsIEFUT01JQ19SRUxBWEVEKTsKK30K Kwordm9pZAorZXNldF9pbml0KGVzZXRfdCAqZXNldCwgZXh0ZW50X3N0YXRlX3Qgc3RhdGUpIHsK Kwlmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgRVNFVF9OUFNJWkVTOyBpKyspIHsKKwkJZXNldF9i aW5faW5pdCgmZXNldC0+Ymluc1tpXSk7CisJCWVzZXRfYmluX3N0YXRzX2luaXQoJmVzZXQtPmJp bl9zdGF0c1tpXSk7CisJfQorCWZiX2luaXQoZXNldC0+Yml0bWFwLCBFU0VUX05QU0laRVMpOwor CWVkYXRhX2xpc3RfaW5hY3RpdmVfaW5pdCgmZXNldC0+bHJ1KTsKKwllc2V0LT5zdGF0ZSA9IHN0 YXRlOworfQorCitzaXplX3QKK2VzZXRfbnBhZ2VzX2dldChlc2V0X3QgKmVzZXQpIHsKKwlyZXR1 cm4gYXRvbWljX2xvYWRfenUoJmVzZXQtPm5wYWdlcywgQVRPTUlDX1JFTEFYRUQpOworfQorCitz aXplX3QKK2VzZXRfbmV4dGVudHNfZ2V0KGVzZXRfdCAqZXNldCwgcHN6aW5kX3QgcGluZCkgewor CXJldHVybiBhdG9taWNfbG9hZF96dSgmZXNldC0+YmluX3N0YXRzW3BpbmRdLm5leHRlbnRzLCBB VE9NSUNfUkVMQVhFRCk7Cit9CisKK3NpemVfdAorZXNldF9uYnl0ZXNfZ2V0KGVzZXRfdCAqZXNl dCwgcHN6aW5kX3QgcGluZCkgeworCXJldHVybiBhdG9taWNfbG9hZF96dSgmZXNldC0+YmluX3N0 YXRzW3BpbmRdLm5ieXRlcywgQVRPTUlDX1JFTEFYRUQpOworfQorCitzdGF0aWMgdm9pZAorZXNl dF9zdGF0c19hZGQoZXNldF90ICplc2V0LCBwc3ppbmRfdCBwaW5kLCBzaXplX3Qgc3opIHsKKwlz aXplX3QgY3VyID0gYXRvbWljX2xvYWRfenUoJmVzZXQtPmJpbl9zdGF0c1twaW5kXS5uZXh0ZW50 cywKKwkgICAgQVRPTUlDX1JFTEFYRUQpOworCWF0b21pY19zdG9yZV96dSgmZXNldC0+YmluX3N0 YXRzW3BpbmRdLm5leHRlbnRzLCBjdXIgKyAxLAorCSAgICBBVE9NSUNfUkVMQVhFRCk7CisJY3Vy ID0gYXRvbWljX2xvYWRfenUoJmVzZXQtPmJpbl9zdGF0c1twaW5kXS5uYnl0ZXMsIEFUT01JQ19S RUxBWEVEKTsKKwlhdG9taWNfc3RvcmVfenUoJmVzZXQtPmJpbl9zdGF0c1twaW5kXS5uYnl0ZXMs IGN1ciArIHN6LAorCSAgICBBVE9NSUNfUkVMQVhFRCk7Cit9CisKK3N0YXRpYyB2b2lkCitlc2V0 X3N0YXRzX3N1Yihlc2V0X3QgKmVzZXQsIHBzemluZF90IHBpbmQsIHNpemVfdCBzeikgeworCXNp emVfdCBjdXIgPSBhdG9taWNfbG9hZF96dSgmZXNldC0+YmluX3N0YXRzW3BpbmRdLm5leHRlbnRz LAorCSAgICBBVE9NSUNfUkVMQVhFRCk7CisJYXRvbWljX3N0b3JlX3p1KCZlc2V0LT5iaW5fc3Rh dHNbcGluZF0ubmV4dGVudHMsIGN1ciAtIDEsCisJICAgIEFUT01JQ19SRUxBWEVEKTsKKwljdXIg PSBhdG9taWNfbG9hZF96dSgmZXNldC0+YmluX3N0YXRzW3BpbmRdLm5ieXRlcywgQVRPTUlDX1JF TEFYRUQpOworCWF0b21pY19zdG9yZV96dSgmZXNldC0+YmluX3N0YXRzW3BpbmRdLm5ieXRlcywg Y3VyIC0gc3osCisJICAgIEFUT01JQ19SRUxBWEVEKTsKK30KKwordm9pZAorZXNldF9pbnNlcnQo ZXNldF90ICplc2V0LCBlZGF0YV90ICplZGF0YSkgeworCWFzc2VydChlZGF0YV9zdGF0ZV9nZXQo ZWRhdGEpID09IGVzZXQtPnN0YXRlKTsKKworCXNpemVfdCBzaXplID0gZWRhdGFfc2l6ZV9nZXQo ZWRhdGEpOworCXNpemVfdCBwc3ogPSBzel9wc3pfcXVhbnRpemVfZmxvb3Ioc2l6ZSk7CisJcHN6 aW5kX3QgcGluZCA9IHN6X3BzejJpbmQocHN6KTsKKworCWVkYXRhX2NtcF9zdW1tYXJ5X3QgZWRh dGFfY21wX3N1bW1hcnkgPSBlZGF0YV9jbXBfc3VtbWFyeV9nZXQoZWRhdGEpOworCWlmIChlZGF0 YV9oZWFwX2VtcHR5KCZlc2V0LT5iaW5zW3BpbmRdLmhlYXApKSB7CisJCWZiX3NldChlc2V0LT5i aXRtYXAsIEVTRVRfTlBTSVpFUywgKHNpemVfdClwaW5kKTsKKwkJLyogT25seSBlbGVtZW50IGlz IGF1dG9tYXRpY2FsbHkgdGhlIG1pbiBlbGVtZW50LiAqLworCQllc2V0LT5iaW5zW3BpbmRdLmhl YXBfbWluID0gZWRhdGFfY21wX3N1bW1hcnk7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogVGhlcmUn cyBhbHJlYWR5IGEgbWluIGVsZW1lbnQ7IHVwZGF0ZSB0aGUgc3VtbWFyeSBpZiB3ZSdyZQorCQkg KiBhYm91dCB0byBpbnNlcnQgYSBsb3dlciBvbmUuCisJCSAqLworCQlpZiAoZWRhdGFfY21wX3N1 bW1hcnlfY29tcChlZGF0YV9jbXBfc3VtbWFyeSwKKwkJICAgIGVzZXQtPmJpbnNbcGluZF0uaGVh cF9taW4pIDwgMCkgeworCQkJZXNldC0+Ymluc1twaW5kXS5oZWFwX21pbiA9IGVkYXRhX2NtcF9z dW1tYXJ5OworCQl9CisJfQorCWVkYXRhX2hlYXBfaW5zZXJ0KCZlc2V0LT5iaW5zW3BpbmRdLmhl YXAsIGVkYXRhKTsKKworCWlmIChjb25maWdfc3RhdHMpIHsKKwkJZXNldF9zdGF0c19hZGQoZXNl dCwgcGluZCwgc2l6ZSk7CisJfQorCisJZWRhdGFfbGlzdF9pbmFjdGl2ZV9hcHBlbmQoJmVzZXQt PmxydSwgZWRhdGEpOworCXNpemVfdCBucGFnZXMgPSBzaXplID4+IExHX1BBR0U7CisJLyoKKwkg KiBBbGwgbW9kaWZpY2F0aW9ucyB0byBucGFnZXMgaG9sZCB0aGUgbXV0ZXggKGFzIGFzc2VydGVk IGFib3ZlKSwgc28gd2UKKwkgKiBkb24ndCBuZWVkIGFuIGF0b21pYyBmZXRjaC1hZGQ7IHdlIGNh biBnZXQgYnkgd2l0aCBhIGxvYWQgZm9sbG93ZWQgYnkKKwkgKiBhIHN0b3JlLgorCSAqLworCXNp emVfdCBjdXJfZXNldF9ucGFnZXMgPQorCSAgICBhdG9taWNfbG9hZF96dSgmZXNldC0+bnBhZ2Vz LCBBVE9NSUNfUkVMQVhFRCk7CisJYXRvbWljX3N0b3JlX3p1KCZlc2V0LT5ucGFnZXMsIGN1cl9l c2V0X25wYWdlcyArIG5wYWdlcywKKwkgICAgQVRPTUlDX1JFTEFYRUQpOworfQorCit2b2lkCitl c2V0X3JlbW92ZShlc2V0X3QgKmVzZXQsIGVkYXRhX3QgKmVkYXRhKSB7CisJYXNzZXJ0KGVkYXRh X3N0YXRlX2dldChlZGF0YSkgPT0gZXNldC0+c3RhdGUgfHwKKwkgICAgZWRhdGFfc3RhdGVfaW5f dHJhbnNpdGlvbihlZGF0YV9zdGF0ZV9nZXQoZWRhdGEpKSk7CisKKwlzaXplX3Qgc2l6ZSA9IGVk YXRhX3NpemVfZ2V0KGVkYXRhKTsKKwlzaXplX3QgcHN6ID0gc3pfcHN6X3F1YW50aXplX2Zsb29y KHNpemUpOworCXBzemluZF90IHBpbmQgPSBzel9wc3oyaW5kKHBzeik7CisJaWYgKGNvbmZpZ19z dGF0cykgeworCQllc2V0X3N0YXRzX3N1Yihlc2V0LCBwaW5kLCBzaXplKTsKKwl9CisKKwllZGF0 YV9jbXBfc3VtbWFyeV90IGVkYXRhX2NtcF9zdW1tYXJ5ID0gZWRhdGFfY21wX3N1bW1hcnlfZ2V0 KGVkYXRhKTsKKwllZGF0YV9oZWFwX3JlbW92ZSgmZXNldC0+Ymluc1twaW5kXS5oZWFwLCBlZGF0 YSk7CisJaWYgKGVkYXRhX2hlYXBfZW1wdHkoJmVzZXQtPmJpbnNbcGluZF0uaGVhcCkpIHsKKwkJ ZmJfdW5zZXQoZXNldC0+Yml0bWFwLCBFU0VUX05QU0laRVMsIChzaXplX3QpcGluZCk7CisJfSBl bHNlIHsKKwkJLyoKKwkJICogVGhpcyBpcyBhIGxpdHRsZSB3ZWlyZDsgd2UgY29tcGFyZSBpZiB0 aGUgc3VtbWFyaWVzIGFyZQorCQkgKiBlcXVhbCwgcmF0aGVyIHRoYW4gaWYgdGhlIGVkYXRhIHdl IHJlbW92ZWQgd2FzIHRoZSBoZWFwCisJCSAqIG1pbmltdW0uICBUaGUgcmVhc29uIHdoeSBpcyB0 aGF0IGdldHRpbmcgdGhlIGhlYXAgbWluaW11bQorCQkgKiBjYW4gY2F1c2UgYSBwYWlyaW5nIGhl YXAgbWVyZ2Ugb3BlcmF0aW9uLiAgV2UgY2FuIGF2b2lkIHRoaXMKKwkJICogaWYgd2Ugb25seSB1 cGRhdGUgdGhlIG1pbiBpZiBpdCdzIGNoYW5nZWQsIGluIHdoaWNoIGNhc2UgdGhlCisJCSAqIHN1 bW1hcmllcyBvZiB0aGUgcmVtb3ZlZCBlbGVtZW50IGFuZCB0aGUgbWluIGVsZW1lbnQgc2hvdWxk CisJCSAqIGNvbXBhcmUgZXF1YWwuCisJCSAqLworCQlpZiAoZWRhdGFfY21wX3N1bW1hcnlfY29t cChlZGF0YV9jbXBfc3VtbWFyeSwKKwkJICAgIGVzZXQtPmJpbnNbcGluZF0uaGVhcF9taW4pID09 IDApIHsKKwkJCWVzZXQtPmJpbnNbcGluZF0uaGVhcF9taW4gPSBlZGF0YV9jbXBfc3VtbWFyeV9n ZXQoCisJCQkgICAgZWRhdGFfaGVhcF9maXJzdCgmZXNldC0+Ymluc1twaW5kXS5oZWFwKSk7CisJ CX0KKwl9CisJZWRhdGFfbGlzdF9pbmFjdGl2ZV9yZW1vdmUoJmVzZXQtPmxydSwgZWRhdGEpOwor CXNpemVfdCBucGFnZXMgPSBzaXplID4+IExHX1BBR0U7CisJLyoKKwkgKiBBcyBpbiBlc2V0X2lu c2VydCwgd2UgaG9sZCBlc2V0LT5tdHggYW5kIHNvIGRvbid0IG5lZWQgYXRvbWljCisJICogb3Bl cmF0aW9ucyBmb3IgdXBkYXRpbmcgZXNldC0+bnBhZ2VzLgorCSAqLworCXNpemVfdCBjdXJfZXh0 ZW50c19ucGFnZXMgPQorCSAgICBhdG9taWNfbG9hZF96dSgmZXNldC0+bnBhZ2VzLCBBVE9NSUNf UkVMQVhFRCk7CisJYXNzZXJ0KGN1cl9leHRlbnRzX25wYWdlcyA+PSBucGFnZXMpOworCWF0b21p Y19zdG9yZV96dSgmZXNldC0+bnBhZ2VzLAorCSAgICBjdXJfZXh0ZW50c19ucGFnZXMgLSAoc2l6 ZSA+PiBMR19QQUdFKSwgQVRPTUlDX1JFTEFYRUQpOworfQorCisvKgorICogRmluZCBhbiBleHRl bnQgd2l0aCBzaXplIFttaW5fc2l6ZSwgbWF4X3NpemUpIHRvIHNhdGlzZnkgdGhlIGFsaWdubWVu dAorICogcmVxdWlyZW1lbnQuICBGb3IgZWFjaCBzaXplLCB0cnkgb25seSB0aGUgZmlyc3QgZXh0 ZW50IGluIHRoZSBoZWFwLgorICovCitzdGF0aWMgZWRhdGFfdCAqCitlc2V0X2ZpdF9hbGlnbm1l bnQoZXNldF90ICplc2V0LCBzaXplX3QgbWluX3NpemUsIHNpemVfdCBtYXhfc2l6ZSwKKyAgICBz aXplX3QgYWxpZ25tZW50KSB7CisgICAgICAgIHBzemluZF90IHBpbmQgPSBzel9wc3oyaW5kKHN6 X3Bzel9xdWFudGl6ZV9jZWlsKG1pbl9zaXplKSk7CisgICAgICAgIHBzemluZF90IHBpbmRfbWF4 ID0gc3pfcHN6MmluZChzel9wc3pfcXVhbnRpemVfY2VpbChtYXhfc2l6ZSkpOworCisJZm9yIChw c3ppbmRfdCBpID0KKwkgICAgKHBzemluZF90KWZiX2Zmcyhlc2V0LT5iaXRtYXAsIEVTRVRfTlBT SVpFUywgKHNpemVfdClwaW5kKTsKKwkgICAgaSA8IHBpbmRfbWF4OworCSAgICBpID0gKHBzemlu ZF90KWZiX2Zmcyhlc2V0LT5iaXRtYXAsIEVTRVRfTlBTSVpFUywgKHNpemVfdClpICsgMSkpIHsK KwkJYXNzZXJ0KGkgPCBTQ19OUFNJWkVTKTsKKwkJYXNzZXJ0KCFlZGF0YV9oZWFwX2VtcHR5KCZl c2V0LT5iaW5zW2ldLmhlYXApKTsKKwkJZWRhdGFfdCAqZWRhdGEgPSBlZGF0YV9oZWFwX2ZpcnN0 KCZlc2V0LT5iaW5zW2ldLmhlYXApOworCQl1aW50cHRyX3QgYmFzZSA9ICh1aW50cHRyX3QpZWRh dGFfYmFzZV9nZXQoZWRhdGEpOworCQlzaXplX3QgY2FuZGlkYXRlX3NpemUgPSBlZGF0YV9zaXpl X2dldChlZGF0YSk7CisJCWFzc2VydChjYW5kaWRhdGVfc2l6ZSA+PSBtaW5fc2l6ZSk7CisKKwkJ dWludHB0cl90IG5leHRfYWxpZ24gPSBBTElHTk1FTlRfQ0VJTElORygodWludHB0cl90KWJhc2Us CisJCSAgICBQQUdFX0NFSUxJTkcoYWxpZ25tZW50KSk7CisJCWlmIChiYXNlID4gbmV4dF9hbGln biB8fCBiYXNlICsgY2FuZGlkYXRlX3NpemUgPD0gbmV4dF9hbGlnbikgeworCQkJLyogT3ZlcmZs b3cgb3Igbm90IGNyb3NzaW5nIHRoZSBuZXh0IGFsaWdubWVudC4gKi8KKwkJCWNvbnRpbnVlOwor CQl9CisKKwkJc2l6ZV90IGxlYWRzaXplID0gbmV4dF9hbGlnbiAtIGJhc2U7CisJCWlmIChjYW5k aWRhdGVfc2l6ZSAtIGxlYWRzaXplID49IG1pbl9zaXplKSB7CisJCQlyZXR1cm4gZWRhdGE7CisJ CX0KKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIERvIGZpcnN0LWZpdCBleHRlbnQg c2VsZWN0aW9uLCBpLmUuIHNlbGVjdCB0aGUgb2xkZXN0L2xvd2VzdCBleHRlbnQgdGhhdCBpcwor ICogbGFyZ2UgZW5vdWdoLgorICoKKyAqIGxnX21heF9maXQgaXMgdGhlIChsb2cgb2YgdGhlKSBt YXhpbXVtIHJhdGlvIGJldHdlZW4gdGhlIHJlcXVlc3RlZCBzaXplIGFuZAorICogdGhlIHJldHVy bmVkIHNpemUgdGhhdCB3ZSdsbCBhbGxvdy4gIFRoaXMgY2FuIHJlZHVjZSBmcmFnbWVudGF0aW9u IGJ5CisgKiBhdm9pZGluZyByZXVzaW5nIGFuZCBzcGxpdHRpbmcgbGFyZ2UgZXh0ZW50cyBmb3Ig c21hbGxlciBzaXplcy4gIEluIHByYWN0aWNlLAorICogaXQncyBzZXQgdG8gb3B0X2xnX2V4dGVu dF9tYXhfYWN0aXZlX2ZpdCBmb3IgdGhlIGRpcnR5IGVzZXQgYW5kIFNDX1BUUl9CSVRTCisgKiBm b3Igb3RoZXJzLgorICovCitzdGF0aWMgZWRhdGFfdCAqCitlc2V0X2ZpcnN0X2ZpdChlc2V0X3Qg KmVzZXQsIHNpemVfdCBzaXplLCBib29sIGV4YWN0X29ubHksCisgICAgdW5zaWduZWQgbGdfbWF4 X2ZpdCkgeworCWVkYXRhX3QgKnJldCA9IE5VTEw7CisJZWRhdGFfY21wX3N1bW1hcnlfdCByZXRf c3VtbSBKRU1BTExPQ19DQ19TSUxFTkNFX0lOSVQoezB9KTsKKworCXBzemluZF90IHBpbmQgPSBz el9wc3oyaW5kKHN6X3Bzel9xdWFudGl6ZV9jZWlsKHNpemUpKTsKKworCWlmIChleGFjdF9vbmx5 KSB7CisJCXJldHVybiBlZGF0YV9oZWFwX2VtcHR5KCZlc2V0LT5iaW5zW3BpbmRdLmhlYXApID8g TlVMTCA6CisJCSAgICBlZGF0YV9oZWFwX2ZpcnN0KCZlc2V0LT5iaW5zW3BpbmRdLmhlYXApOwor CX0KKworCWZvciAocHN6aW5kX3QgaSA9CisJICAgIChwc3ppbmRfdClmYl9mZnMoZXNldC0+Yml0 bWFwLCBFU0VUX05QU0laRVMsIChzaXplX3QpcGluZCk7CisJICAgIGkgPCBFU0VUX05QU0laRVM7 CisJICAgIGkgPSAocHN6aW5kX3QpZmJfZmZzKGVzZXQtPmJpdG1hcCwgRVNFVF9OUFNJWkVTLCAo c2l6ZV90KWkgKyAxKSkgeworCQlhc3NlcnQoIWVkYXRhX2hlYXBfZW1wdHkoJmVzZXQtPmJpbnNb aV0uaGVhcCkpOworCQlpZiAobGdfbWF4X2ZpdCA9PSBTQ19QVFJfQklUUykgeworCQkJLyoKKwkJ CSAqIFdlJ2xsIHNoaWZ0IGJ5IHRoaXMgYmVsb3csIGFuZCBzaGlmdGluZyBvdXQgYWxsIHRoZQor CQkJICogYml0cyBpcyB1bmRlZmluZWQuICBEZWNyZWFzaW5nIGlzIHNhZmUsIHNpbmNlIHRoZQor CQkJICogcGFnZSBzaXplIGlzIGxhcmdlciB0aGFuIDEgYnl0ZS4KKwkJCSAqLworCQkJbGdfbWF4 X2ZpdCA9IFNDX1BUUl9CSVRTIC0gMTsKKwkJfQorCQlpZiAoKHN6X3BpbmQyc3ooaSkgPj4gbGdf bWF4X2ZpdCkgPiBzaXplKSB7CisJCQlicmVhazsKKwkJfQorCQlpZiAocmV0ID09IE5VTEwgfHwg ZWRhdGFfY21wX3N1bW1hcnlfY29tcCgKKwkJICAgIGVzZXQtPmJpbnNbaV0uaGVhcF9taW4sIHJl dF9zdW1tKSA8IDApIHsKKwkJCS8qCisJCQkgKiBXZSBncmFiIHRoZSBlZGF0YSBhcyBlYXJseSBh cyBwb3NzaWJsZSwgZXZlbiB0aG91Z2gKKwkJCSAqIHdlIG1pZ2h0IGNoYW5nZSBpdCBsYXRlci4g IFByYWN0aWNhbGx5LCBhIGxhcmdlCisJCQkgKiBwb3J0aW9uIG9mIGVzZXRfZml0IGNhbGxzIHN1 Y2NlZWQgYXQgdGhlIGZpcnN0IHZhbGlkCisJCQkgKiBpbmRleCwgc28gdGhpcyBkb2Vzbid0IGNv c3QgbXVjaCwgYW5kIHdlIGdldCB0aGUKKwkJCSAqIGVmZmVjdCBvZiBwcmVmZXRjaGluZyB0aGUg ZWRhdGEgYXMgZWFybHkgYXMgcG9zc2libGUuCisJCQkgKi8KKwkJCWVkYXRhX3QgKmVkYXRhID0g ZWRhdGFfaGVhcF9maXJzdCgmZXNldC0+Ymluc1tpXS5oZWFwKTsKKwkJCWFzc2VydChlZGF0YV9z aXplX2dldChlZGF0YSkgPj0gc2l6ZSk7CisJCQlhc3NlcnQocmV0ID09IE5VTEwgfHwgZWRhdGFf c25hZF9jb21wKGVkYXRhLCByZXQpIDwgMCk7CisJCQlhc3NlcnQocmV0ID09IE5VTEwgfHwgZWRh dGFfY21wX3N1bW1hcnlfY29tcCgKKwkJCSAgICBlc2V0LT5iaW5zW2ldLmhlYXBfbWluLAorCQkJ ICAgIGVkYXRhX2NtcF9zdW1tYXJ5X2dldChlZGF0YSkpID09IDApOworCQkJcmV0ID0gZWRhdGE7 CisJCQlyZXRfc3VtbSA9IGVzZXQtPmJpbnNbaV0uaGVhcF9taW47CisJCX0KKwkJaWYgKGkgPT0g U0NfTlBTSVpFUykgeworCQkJYnJlYWs7CisJCX0KKwkJYXNzZXJ0KGkgPCBTQ19OUFNJWkVTKTsK Kwl9CisKKwlyZXR1cm4gcmV0OworfQorCitlZGF0YV90ICoKK2VzZXRfZml0KGVzZXRfdCAqZXNl dCwgc2l6ZV90IGVzaXplLCBzaXplX3QgYWxpZ25tZW50LCBib29sIGV4YWN0X29ubHksCisgICAg dW5zaWduZWQgbGdfbWF4X2ZpdCkgeworCXNpemVfdCBtYXhfc2l6ZSA9IGVzaXplICsgUEFHRV9D RUlMSU5HKGFsaWdubWVudCkgLSBQQUdFOworCS8qIEJld2FyZSBzaXplX3Qgd3JhcC1hcm91bmQu ICovCisJaWYgKG1heF9zaXplIDwgZXNpemUpIHsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJZWRh dGFfdCAqZWRhdGEgPSBlc2V0X2ZpcnN0X2ZpdChlc2V0LCBtYXhfc2l6ZSwgZXhhY3Rfb25seSwg bGdfbWF4X2ZpdCk7CisKKwlpZiAoYWxpZ25tZW50ID4gUEFHRSAmJiBlZGF0YSA9PSBOVUxMKSB7 CisJCS8qCisJCSAqIG1heF9zaXplIGd1YXJhbnRlZXMgdGhlIGFsaWdubWVudCByZXF1aXJlbWVu dCBidXQgaXMgcmF0aGVyCisJCSAqIHBlc3NpbWlzdGljLiAgTmV4dCB3ZSB0cnkgdG8gc2F0aXNm eSB0aGUgYWxpZ25lZCBhbGxvY2F0aW9uCisJCSAqIHdpdGggc2l6ZXMgaW4gW2VzaXplLCBtYXhf c2l6ZSkuCisJCSAqLworCQllZGF0YSA9IGVzZXRfZml0X2FsaWdubWVudChlc2V0LCBlc2l6ZSwg bWF4X3NpemUsIGFsaWdubWVudCk7CisJfQorCisJcmV0dXJuIGVkYXRhOworfQoKZGlmZiAtLWdp dCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3NyYy9leHBfZ3Jvdy5j IGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvc3JjL2V4cF9ncm93LmMK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzg2NDcxZgotLS0gL2Rldi9udWxs CisrKyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3NyYy9leHBfZ3Jv dy5jCkBAIC0wLDAgKzEsOCBAQAorI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2plbWFsbG9j X3ByZWFtYmxlLmgiCisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvamVtYWxsb2NfaW50ZXJu YWxfaW5jbHVkZXMuaCIKKwordm9pZAorZXhwX2dyb3dfaW5pdChleHBfZ3Jvd190ICpleHBfZ3Jv dykgeworCWV4cF9ncm93LT5uZXh0ID0gc3pfcHN6MmluZChIVUdFUEFHRSk7CisJZXhwX2dyb3ct PmxpbWl0ID0gc3pfcHN6MmluZChTQ19MQVJHRV9NQVhDTEFTUyk7Cit9CgpkaWZmIC0tZ2l0IGEv Mzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvc3JjL2V4dGVudC5jIGIvMzg5 LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvc3JjL2V4dGVudC5jCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmM2QxZjMKLS0tIC9kZXYvbnVsbAorKysgYi8z ODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9zcmMvZXh0ZW50LmMKQEAgLTAs MCArMSwxMzI2IEBACisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvamVtYWxsb2NfcHJlYW1i bGUuaCIKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9qZW1hbGxvY19pbnRlcm5hbF9pbmNs dWRlcy5oIgorCisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvYXNzZXJ0LmgiCisjaW5jbHVk ZSAiamVtYWxsb2MvaW50ZXJuYWwvZW1hcC5oIgorI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFs L2V4dGVudF9kc3MuaCIKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9leHRlbnRfbW1hcC5o IgorI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL3BoLmgiCisjaW5jbHVkZSAiamVtYWxsb2Mv aW50ZXJuYWwvbXV0ZXguaCIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIERhdGEuICov CisKK3NpemVfdCBvcHRfbGdfZXh0ZW50X21heF9hY3RpdmVfZml0ID0gTEdfRVhURU5UX01BWF9B Q1RJVkVfRklUX0RFRkFVTFQ7CisKK3N0YXRpYyBib29sIGV4dGVudF9jb21taXRfaW1wbCh0c2Ru X3QgKnRzZG4sIGVob29rc190ICplaG9va3MsIGVkYXRhX3QgKmVkYXRhLAorICAgIHNpemVfdCBv ZmZzZXQsIHNpemVfdCBsZW5ndGgsIGJvb2wgZ3Jvd2luZ19yZXRhaW5lZCk7CitzdGF0aWMgYm9v bCBleHRlbnRfcHVyZ2VfbGF6eV9pbXBsKHRzZG5fdCAqdHNkbiwgZWhvb2tzX3QgKmVob29rcywK KyAgICBlZGF0YV90ICplZGF0YSwgc2l6ZV90IG9mZnNldCwgc2l6ZV90IGxlbmd0aCwgYm9vbCBn cm93aW5nX3JldGFpbmVkKTsKK3N0YXRpYyBib29sIGV4dGVudF9wdXJnZV9mb3JjZWRfaW1wbCh0 c2RuX3QgKnRzZG4sIGVob29rc190ICplaG9va3MsCisgICAgZWRhdGFfdCAqZWRhdGEsIHNpemVf dCBvZmZzZXQsIHNpemVfdCBsZW5ndGgsIGJvb2wgZ3Jvd2luZ19yZXRhaW5lZCk7CitzdGF0aWMg ZWRhdGFfdCAqZXh0ZW50X3NwbGl0X2ltcGwodHNkbl90ICp0c2RuLCBwYWNfdCAqcGFjLCBlaG9v a3NfdCAqZWhvb2tzLAorICAgIGVkYXRhX3QgKmVkYXRhLCBzaXplX3Qgc2l6ZV9hLCBzaXplX3Qg c2l6ZV9iLCBib29sIGhvbGRpbmdfY29yZV9sb2Nrcyk7CitzdGF0aWMgYm9vbCBleHRlbnRfbWVy Z2VfaW1wbCh0c2RuX3QgKnRzZG4sIHBhY190ICpwYWMsIGVob29rc190ICplaG9va3MsCisgICAg ZWRhdGFfdCAqYSwgZWRhdGFfdCAqYiwgYm9vbCBob2xkaW5nX2NvcmVfbG9ja3MpOworCisvKiBV c2VkIGV4Y2x1c2l2ZWx5IGZvciBnZHVtcCB0cmlnZ2VyaW5nLiAqLworc3RhdGljIGF0b21pY196 dV90IGN1cnBhZ2VzOworc3RhdGljIGF0b21pY196dV90IGhpZ2hwYWdlczsKKworLyoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKi8KKy8qCisgKiBGdW5jdGlvbiBwcm90b3R5cGVzIGZvciBzdGF0aWMgZnVu Y3Rpb25zIHRoYXQgYXJlIHJlZmVyZW5jZWQgcHJpb3IgdG8KKyAqIGRlZmluaXRpb24uCisgKi8K Kworc3RhdGljIHZvaWQgZXh0ZW50X2RlcmVnaXN0ZXIodHNkbl90ICp0c2RuLCBwYWNfdCAqcGFj LCBlZGF0YV90ICplZGF0YSk7CitzdGF0aWMgZWRhdGFfdCAqZXh0ZW50X3JlY3ljbGUodHNkbl90 ICp0c2RuLCBwYWNfdCAqcGFjLCBlaG9va3NfdCAqZWhvb2tzLAorICAgIGVjYWNoZV90ICplY2Fj aGUsIGVkYXRhX3QgKmV4cGFuZF9lZGF0YSwgc2l6ZV90IHVzaXplLCBzaXplX3QgYWxpZ25tZW50 LAorICAgIGJvb2wgemVybywgYm9vbCAqY29tbWl0LCBib29sIGdyb3dpbmdfcmV0YWluZWQsIGJv b2wgZ3VhcmRlZCk7CitzdGF0aWMgZWRhdGFfdCAqZXh0ZW50X3RyeV9jb2FsZXNjZSh0c2RuX3Qg KnRzZG4sIHBhY190ICpwYWMsIGVob29rc190ICplaG9va3MsCisgICAgZWNhY2hlX3QgKmVjYWNo ZSwgZWRhdGFfdCAqZWRhdGEsIGJvb2wgKmNvYWxlc2NlZCk7CitzdGF0aWMgZWRhdGFfdCAqZXh0 ZW50X2FsbG9jX3JldGFpbmVkKHRzZG5fdCAqdHNkbiwgcGFjX3QgKnBhYywKKyAgICBlaG9va3Nf dCAqZWhvb2tzLCBlZGF0YV90ICpleHBhbmRfZWRhdGEsIHNpemVfdCBzaXplLCBzaXplX3QgYWxp Z25tZW50LAorICAgIGJvb2wgemVybywgYm9vbCAqY29tbWl0LCBib29sIGd1YXJkZWQpOworCisv KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqLworCitzaXplX3QKK2V4dGVudF9zbl9uZXh0KHBhY190ICpw YWMpIHsKKwlyZXR1cm4gYXRvbWljX2ZldGNoX2FkZF96dSgmcGFjLT5leHRlbnRfc25fbmV4dCwg MSwgQVRPTUlDX1JFTEFYRUQpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wKK2V4dGVudF9tYXlf Zm9yY2VfZGVjYXkocGFjX3QgKnBhYykgeworCXJldHVybiAhKHBhY19kZWNheV9tc19nZXQocGFj LCBleHRlbnRfc3RhdGVfZGlydHkpID09IC0xCisJICAgIHx8IHBhY19kZWNheV9tc19nZXQocGFj LCBleHRlbnRfc3RhdGVfbXV6enkpID09IC0xKTsKK30KKworc3RhdGljIGJvb2wKK2V4dGVudF90 cnlfZGVsYXllZF9jb2FsZXNjZSh0c2RuX3QgKnRzZG4sIHBhY190ICpwYWMsIGVob29rc190ICpl aG9va3MsCisgICAgZWNhY2hlX3QgKmVjYWNoZSwgZWRhdGFfdCAqZWRhdGEpIHsKKwllbWFwX3Vw ZGF0ZV9lZGF0YV9zdGF0ZSh0c2RuLCBwYWMtPmVtYXAsIGVkYXRhLCBleHRlbnRfc3RhdGVfYWN0 aXZlKTsKKworCWJvb2wgY29hbGVzY2VkOworCWVkYXRhID0gZXh0ZW50X3RyeV9jb2FsZXNjZSh0 c2RuLCBwYWMsIGVob29rcywgZWNhY2hlLAorCSAgICBlZGF0YSwgJmNvYWxlc2NlZCk7CisJZW1h cF91cGRhdGVfZWRhdGFfc3RhdGUodHNkbiwgcGFjLT5lbWFwLCBlZGF0YSwgZWNhY2hlLT5zdGF0 ZSk7CisKKwlpZiAoIWNvYWxlc2NlZCkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9CisJZXNldF9pbnNl cnQoJmVjYWNoZS0+ZXNldCwgZWRhdGEpOworCXJldHVybiBmYWxzZTsKK30KKworZWRhdGFfdCAq CitlY2FjaGVfYWxsb2ModHNkbl90ICp0c2RuLCBwYWNfdCAqcGFjLCBlaG9va3NfdCAqZWhvb2tz LCBlY2FjaGVfdCAqZWNhY2hlLAorICAgIGVkYXRhX3QgKmV4cGFuZF9lZGF0YSwgc2l6ZV90IHNp emUsIHNpemVfdCBhbGlnbm1lbnQsIGJvb2wgemVybywKKyAgICBib29sIGd1YXJkZWQpIHsKKwlh c3NlcnQoc2l6ZSAhPSAwKTsKKwlhc3NlcnQoYWxpZ25tZW50ICE9IDApOworCXdpdG5lc3NfYXNz ZXJ0X2RlcHRoX3RvX3JhbmsodHNkbl93aXRuZXNzX3RzZHBfZ2V0KHRzZG4pLAorCSAgICBXSVRO RVNTX1JBTktfQ09SRSwgMCk7CisKKwlib29sIGNvbW1pdCA9IHRydWU7CisJZWRhdGFfdCAqZWRh dGEgPSBleHRlbnRfcmVjeWNsZSh0c2RuLCBwYWMsIGVob29rcywgZWNhY2hlLCBleHBhbmRfZWRh dGEsCisJICAgIHNpemUsIGFsaWdubWVudCwgemVybywgJmNvbW1pdCwgZmFsc2UsIGd1YXJkZWQp OworCWFzc2VydChlZGF0YSA9PSBOVUxMIHx8IGVkYXRhX3BhaV9nZXQoZWRhdGEpID09IEVYVEVO VF9QQUlfUEFDKTsKKwlhc3NlcnQoZWRhdGEgPT0gTlVMTCB8fCBlZGF0YV9ndWFyZGVkX2dldChl ZGF0YSkgPT0gZ3VhcmRlZCk7CisJcmV0dXJuIGVkYXRhOworfQorCitlZGF0YV90ICoKK2VjYWNo ZV9hbGxvY19ncm93KHRzZG5fdCAqdHNkbiwgcGFjX3QgKnBhYywgZWhvb2tzX3QgKmVob29rcywg ZWNhY2hlX3QgKmVjYWNoZSwKKyAgICBlZGF0YV90ICpleHBhbmRfZWRhdGEsIHNpemVfdCBzaXpl LCBzaXplX3QgYWxpZ25tZW50LCBib29sIHplcm8sCisgICAgYm9vbCBndWFyZGVkKSB7CisJYXNz ZXJ0KHNpemUgIT0gMCk7CisJYXNzZXJ0KGFsaWdubWVudCAhPSAwKTsKKwl3aXRuZXNzX2Fzc2Vy dF9kZXB0aF90b19yYW5rKHRzZG5fd2l0bmVzc190c2RwX2dldCh0c2RuKSwKKwkgICAgV0lUTkVT U19SQU5LX0NPUkUsIDApOworCisJYm9vbCBjb21taXQgPSB0cnVlOworCWVkYXRhX3QgKmVkYXRh ID0gZXh0ZW50X2FsbG9jX3JldGFpbmVkKHRzZG4sIHBhYywgZWhvb2tzLCBleHBhbmRfZWRhdGEs CisJICAgIHNpemUsIGFsaWdubWVudCwgemVybywgJmNvbW1pdCwgZ3VhcmRlZCk7CisJaWYgKGVk YXRhID09IE5VTEwpIHsKKwkJaWYgKG9wdF9yZXRhaW4gJiYgZXhwYW5kX2VkYXRhICE9IE5VTEwp IHsKKwkJCS8qCisJCQkgKiBXaGVuIHJldGFpbiBpcyBlbmFibGVkIGFuZCB0cnlpbmcgdG8gZXhw YW5kLCB3ZSBkbworCQkJICogbm90IGF0dGVtcHQgZXh0ZW50X2FsbG9jX3dyYXBwZXIgd2hpY2gg ZG9lcyBtbWFwIHRoYXQKKwkJCSAqIGlzIHZlcnkgdW5saWtlbHkgdG8gc3VjY2VlZCAodW5sZXNz IGl0IGhhcHBlbnMgdG8gYmUKKwkJCSAqIGF0IHRoZSBlbmQpLgorCQkJICovCisJCQlyZXR1cm4g TlVMTDsKKwkJfQorCQlpZiAoZ3VhcmRlZCkgeworCQkJLyoKKwkJCSAqIE1lYW5zIG5vIGNhY2hl ZCBndWFyZGVkIGV4dGVudHMgYXZhaWxhYmxlIChhbmQgbm8KKwkJCSAqIGdyb3dfcmV0YWluZWQg d2FzIGF0dGVtcHRlZCkuICBUaGUgcGFjX2FsbG9jIGZsb3cKKwkJCSAqIHdpbGwgYWxsb2MgcmVn dWxhciBleHRlbnRzIHRvIG1ha2UgbmV3IGd1YXJkZWQgb25lcy4KKwkJCSAqLworCQkJcmV0dXJu IE5VTEw7CisJCX0KKwkJdm9pZCAqbmV3X2FkZHIgPSAoZXhwYW5kX2VkYXRhID09IE5VTEwpID8g TlVMTCA6CisJCSAgICBlZGF0YV9wYXN0X2dldChleHBhbmRfZWRhdGEpOworCQllZGF0YSA9IGV4 dGVudF9hbGxvY193cmFwcGVyKHRzZG4sIHBhYywgZWhvb2tzLCBuZXdfYWRkciwKKwkJICAgIHNp emUsIGFsaWdubWVudCwgemVybywgJmNvbW1pdCwKKwkJICAgIC8qIGdyb3dpbmdfcmV0YWluZWQg Ki8gZmFsc2UpOworCX0KKworCWFzc2VydChlZGF0YSA9PSBOVUxMIHx8IGVkYXRhX3BhaV9nZXQo ZWRhdGEpID09IEVYVEVOVF9QQUlfUEFDKTsKKwlyZXR1cm4gZWRhdGE7Cit9CisKK3ZvaWQKK2Vj YWNoZV9kYWxsb2ModHNkbl90ICp0c2RuLCBwYWNfdCAqcGFjLCBlaG9va3NfdCAqZWhvb2tzLCBl Y2FjaGVfdCAqZWNhY2hlLAorICAgIGVkYXRhX3QgKmVkYXRhKSB7CisJYXNzZXJ0KGVkYXRhX2Jh c2VfZ2V0KGVkYXRhKSAhPSBOVUxMKTsKKwlhc3NlcnQoZWRhdGFfc2l6ZV9nZXQoZWRhdGEpICE9 IDApOworCWFzc2VydChlZGF0YV9wYWlfZ2V0KGVkYXRhKSA9PSBFWFRFTlRfUEFJX1BBQyk7CisJ d2l0bmVzc19hc3NlcnRfZGVwdGhfdG9fcmFuayh0c2RuX3dpdG5lc3NfdHNkcF9nZXQodHNkbiks CisJICAgIFdJVE5FU1NfUkFOS19DT1JFLCAwKTsKKworCWVkYXRhX2FkZHJfc2V0KGVkYXRhLCBl ZGF0YV9iYXNlX2dldChlZGF0YSkpOworCWVkYXRhX3plcm9lZF9zZXQoZWRhdGEsIGZhbHNlKTsK KworCWV4dGVudF9yZWNvcmQodHNkbiwgcGFjLCBlaG9va3MsIGVjYWNoZSwgZWRhdGEpOworfQor CitlZGF0YV90ICoKK2VjYWNoZV9ldmljdCh0c2RuX3QgKnRzZG4sIHBhY190ICpwYWMsIGVob29r c190ICplaG9va3MsCisgICAgZWNhY2hlX3QgKmVjYWNoZSwgc2l6ZV90IG5wYWdlc19taW4pIHsK KwltYWxsb2NfbXV0ZXhfbG9jayh0c2RuLCAmZWNhY2hlLT5tdHgpOworCisJLyoKKwkgKiBHZXQg dGhlIExSVSBjb2FsZXNjZWQgZXh0ZW50LCBpZiBhbnkuICBJZiBjb2FsZXNjaW5nIHdhcyBkZWxh eWVkLAorCSAqIHRoZSBsb29wIHdpbGwgaXRlcmF0ZSB1bnRpbCB0aGUgTFJVIGV4dGVudCBpcyBm dWxseSBjb2FsZXNjZWQuCisJICovCisJZWRhdGFfdCAqZWRhdGE7CisJd2hpbGUgKHRydWUpIHsK KwkJLyogR2V0IHRoZSBMUlUgZXh0ZW50LCBpZiBhbnkuICovCisJCWVzZXRfdCAqZXNldCA9ICZl Y2FjaGUtPmVzZXQ7CisJCWVkYXRhID0gZWRhdGFfbGlzdF9pbmFjdGl2ZV9maXJzdCgmZXNldC0+ bHJ1KTsKKwkJaWYgKGVkYXRhID09IE5VTEwpIHsKKwkJCS8qCisJCQkgKiBOZXh0IGNoZWNrIGlm IHRoZXJlIGFyZSBndWFyZGVkIGV4dGVudHMuICBUaGV5IGFyZQorCQkJICogbW9yZSBleHBlbnNp dmUgdG8gcHVyZ2UgKHNpbmNlIHRoZXkgYXJlIG5vdAorCQkJICogbWVyZ2VhYmxlKSwgdGh1cyBp biBmYXZvciBvZiBjYWNoaW5nIHRoZW0gbG9uZ2VyLgorCQkJICovCisJCQllc2V0ID0gJmVjYWNo ZS0+Z3VhcmRlZF9lc2V0OworCQkJZWRhdGEgPSBlZGF0YV9saXN0X2luYWN0aXZlX2ZpcnN0KCZl c2V0LT5scnUpOworCQkJaWYgKGVkYXRhID09IE5VTEwpIHsKKwkJCQlnb3RvIGxhYmVsX3JldHVy bjsKKwkJCX0KKwkJfQorCQkvKiBDaGVjayB0aGUgZXZpY3Rpb24gbGltaXQuICovCisJCXNpemVf dCBleHRlbnRzX25wYWdlcyA9IGVjYWNoZV9ucGFnZXNfZ2V0KGVjYWNoZSk7CisJCWlmIChleHRl bnRzX25wYWdlcyA8PSBucGFnZXNfbWluKSB7CisJCQllZGF0YSA9IE5VTEw7CisJCQlnb3RvIGxh YmVsX3JldHVybjsKKwkJfQorCQllc2V0X3JlbW92ZShlc2V0LCBlZGF0YSk7CisJCWlmICghZWNh Y2hlLT5kZWxheV9jb2FsZXNjZSB8fCBlZGF0YV9ndWFyZGVkX2dldChlZGF0YSkpIHsKKwkJCWJy ZWFrOworCQl9CisJCS8qIFRyeSB0byBjb2FsZXNjZS4gKi8KKwkJaWYgKGV4dGVudF90cnlfZGVs YXllZF9jb2FsZXNjZSh0c2RuLCBwYWMsIGVob29rcywgZWNhY2hlLAorCQkgICAgZWRhdGEpKSB7 CisJCQlicmVhazsKKwkJfQorCQkvKgorCQkgKiBUaGUgTFJVIGV4dGVudCB3YXMganVzdCBjb2Fs ZXNjZWQgYW5kIHRoZSByZXN1bHQgcGxhY2VkIGluCisJCSAqIHRoZSBMUlUgYXQgaXRzIG5laWdo Ym9yJ3MgcG9zaXRpb24uICBTdGFydCBvdmVyLgorCQkgKi8KKwl9CisKKwkvKgorCSAqIEVpdGhl ciBtYXJrIHRoZSBleHRlbnQgYWN0aXZlIG9yIGRlcmVnaXN0ZXIgaXQgdG8gcHJvdGVjdCBhZ2Fp bnN0CisJICogY29uY3VycmVudCBvcGVyYXRpb25zLgorCSAqLworCXN3aXRjaCAoZWNhY2hlLT5z dGF0ZSkgeworCWNhc2UgZXh0ZW50X3N0YXRlX2FjdGl2ZToKKwkJbm90X3JlYWNoZWQoKTsKKwlj YXNlIGV4dGVudF9zdGF0ZV9kaXJ0eToKKwljYXNlIGV4dGVudF9zdGF0ZV9tdXp6eToKKwkJZW1h cF91cGRhdGVfZWRhdGFfc3RhdGUodHNkbiwgcGFjLT5lbWFwLCBlZGF0YSwKKwkJICAgIGV4dGVu dF9zdGF0ZV9hY3RpdmUpOworCQlicmVhazsKKwljYXNlIGV4dGVudF9zdGF0ZV9yZXRhaW5lZDoK KwkJZXh0ZW50X2RlcmVnaXN0ZXIodHNkbiwgcGFjLCBlZGF0YSk7CisJCWJyZWFrOworCWRlZmF1 bHQ6CisJCW5vdF9yZWFjaGVkKCk7CisJfQorCitsYWJlbF9yZXR1cm46CisJbWFsbG9jX211dGV4 X3VubG9jayh0c2RuLCAmZWNhY2hlLT5tdHgpOworCXJldHVybiBlZGF0YTsKK30KKworLyoKKyAq IFRoaXMgY2FuIG9ubHkgaGFwcGVuIHdoZW4gd2UgZmFpbCB0byBhbGxvY2F0ZSBhIG5ldyBleHRl bnQgc3RydWN0ICh3aGljaAorICogaW5kaWNhdGVzIE9PTSksIGUuZy4gd2hlbiB0cnlpbmcgdG8g c3BsaXQgYW4gZXhpc3RpbmcgZXh0ZW50LgorICovCitzdGF0aWMgdm9pZAorZXh0ZW50c19hYmFu ZG9uX3ZtKHRzZG5fdCAqdHNkbiwgcGFjX3QgKnBhYywgZWhvb2tzX3QgKmVob29rcywgZWNhY2hl X3QgKmVjYWNoZSwKKyAgICBlZGF0YV90ICplZGF0YSwgYm9vbCBncm93aW5nX3JldGFpbmVkKSB7 CisJc2l6ZV90IHN6ID0gZWRhdGFfc2l6ZV9nZXQoZWRhdGEpOworCWlmIChjb25maWdfc3RhdHMp IHsKKwkJYXRvbWljX2ZldGNoX2FkZF96dSgmcGFjLT5zdGF0cy0+YWJhbmRvbmVkX3ZtLCBzeiwK KwkJICAgIEFUT01JQ19SRUxBWEVEKTsKKwl9CisJLyoKKwkgKiBMZWFrIGV4dGVudCBhZnRlciBt YWtpbmcgc3VyZSBpdHMgcGFnZXMgaGF2ZSBhbHJlYWR5IGJlZW4gcHVyZ2VkLCBzbworCSAqIHRo YXQgdGhpcyBpcyBvbmx5IGEgdmlydHVhbCBtZW1vcnkgbGVhay4KKwkgKi8KKwlpZiAoZWNhY2hl LT5zdGF0ZSA9PSBleHRlbnRfc3RhdGVfZGlydHkpIHsKKwkJaWYgKGV4dGVudF9wdXJnZV9sYXp5 X2ltcGwodHNkbiwgZWhvb2tzLCBlZGF0YSwgMCwgc3osCisJCSAgICBncm93aW5nX3JldGFpbmVk KSkgeworCQkJZXh0ZW50X3B1cmdlX2ZvcmNlZF9pbXBsKHRzZG4sIGVob29rcywgZWRhdGEsIDAs CisJCQkgICAgZWRhdGFfc2l6ZV9nZXQoZWRhdGEpLCBncm93aW5nX3JldGFpbmVkKTsKKwkJfQor CX0KKwllZGF0YV9jYWNoZV9wdXQodHNkbiwgcGFjLT5lZGF0YV9jYWNoZSwgZWRhdGEpOworfQor CitzdGF0aWMgdm9pZAorZXh0ZW50X2RlYWN0aXZhdGVfbG9ja2VkX2ltcGwodHNkbl90ICp0c2Ru LCBwYWNfdCAqcGFjLCBlY2FjaGVfdCAqZWNhY2hlLAorICAgIGVkYXRhX3QgKmVkYXRhKSB7CisJ bWFsbG9jX211dGV4X2Fzc2VydF9vd25lcih0c2RuLCAmZWNhY2hlLT5tdHgpOworCWFzc2VydChl ZGF0YV9hcmVuYV9pbmRfZ2V0KGVkYXRhKSA9PSBlY2FjaGVfaW5kX2dldChlY2FjaGUpKTsKKwor CWVtYXBfdXBkYXRlX2VkYXRhX3N0YXRlKHRzZG4sIHBhYy0+ZW1hcCwgZWRhdGEsIGVjYWNoZS0+ c3RhdGUpOworCWVzZXRfdCAqZXNldCA9IGVkYXRhX2d1YXJkZWRfZ2V0KGVkYXRhKSA/ICZlY2Fj aGUtPmd1YXJkZWRfZXNldCA6CisJICAgICZlY2FjaGUtPmVzZXQ7CisJZXNldF9pbnNlcnQoZXNl dCwgZWRhdGEpOworfQorCitzdGF0aWMgdm9pZAorZXh0ZW50X2RlYWN0aXZhdGVfbG9ja2VkKHRz ZG5fdCAqdHNkbiwgcGFjX3QgKnBhYywgZWNhY2hlX3QgKmVjYWNoZSwKKyAgICBlZGF0YV90ICpl ZGF0YSkgeworCWFzc2VydChlZGF0YV9zdGF0ZV9nZXQoZWRhdGEpID09IGV4dGVudF9zdGF0ZV9h Y3RpdmUpOworCWV4dGVudF9kZWFjdGl2YXRlX2xvY2tlZF9pbXBsKHRzZG4sIHBhYywgZWNhY2hl LCBlZGF0YSk7Cit9CisKK3N0YXRpYyB2b2lkCitleHRlbnRfZGVhY3RpdmF0ZV9jaGVja19zdGF0 ZV9sb2NrZWQodHNkbl90ICp0c2RuLCBwYWNfdCAqcGFjLCBlY2FjaGVfdCAqZWNhY2hlLAorICAg IGVkYXRhX3QgKmVkYXRhLCBleHRlbnRfc3RhdGVfdCBleHBlY3RlZF9zdGF0ZSkgeworCWFzc2Vy dChlZGF0YV9zdGF0ZV9nZXQoZWRhdGEpID09IGV4cGVjdGVkX3N0YXRlKTsKKwlleHRlbnRfZGVh Y3RpdmF0ZV9sb2NrZWRfaW1wbCh0c2RuLCBwYWMsIGVjYWNoZSwgZWRhdGEpOworfQorCitzdGF0 aWMgdm9pZAorZXh0ZW50X2FjdGl2YXRlX2xvY2tlZCh0c2RuX3QgKnRzZG4sIHBhY190ICpwYWMs IGVjYWNoZV90ICplY2FjaGUsIGVzZXRfdCAqZXNldCwKKyAgICBlZGF0YV90ICplZGF0YSkgewor CWFzc2VydChlZGF0YV9hcmVuYV9pbmRfZ2V0KGVkYXRhKSA9PSBlY2FjaGVfaW5kX2dldChlY2Fj aGUpKTsKKwlhc3NlcnQoZWRhdGFfc3RhdGVfZ2V0KGVkYXRhKSA9PSBlY2FjaGUtPnN0YXRlIHx8 CisJICAgIGVkYXRhX3N0YXRlX2dldChlZGF0YSkgPT0gZXh0ZW50X3N0YXRlX21lcmdpbmcpOwor CisJZXNldF9yZW1vdmUoZXNldCwgZWRhdGEpOworCWVtYXBfdXBkYXRlX2VkYXRhX3N0YXRlKHRz ZG4sIHBhYy0+ZW1hcCwgZWRhdGEsIGV4dGVudF9zdGF0ZV9hY3RpdmUpOworfQorCit2b2lkCitl eHRlbnRfZ2R1bXBfYWRkKHRzZG5fdCAqdHNkbiwgY29uc3QgZWRhdGFfdCAqZWRhdGEpIHsKKwlj YXNzZXJ0KGNvbmZpZ19wcm9mKTsKKwkvKiBwcm9mX2dkdW1wKCkgcmVxdWlyZW1lbnQuICovCisJ d2l0bmVzc19hc3NlcnRfZGVwdGhfdG9fcmFuayh0c2RuX3dpdG5lc3NfdHNkcF9nZXQodHNkbiks CisJICAgIFdJVE5FU1NfUkFOS19DT1JFLCAwKTsKKworCWlmIChvcHRfcHJvZiAmJiBlZGF0YV9z dGF0ZV9nZXQoZWRhdGEpID09IGV4dGVudF9zdGF0ZV9hY3RpdmUpIHsKKwkJc2l6ZV90IG5hZGQg PSBlZGF0YV9zaXplX2dldChlZGF0YSkgPj4gTEdfUEFHRTsKKwkJc2l6ZV90IGN1ciA9IGF0b21p Y19mZXRjaF9hZGRfenUoJmN1cnBhZ2VzLCBuYWRkLAorCQkgICAgQVRPTUlDX1JFTEFYRUQpICsg bmFkZDsKKwkJc2l6ZV90IGhpZ2ggPSBhdG9taWNfbG9hZF96dSgmaGlnaHBhZ2VzLCBBVE9NSUNf UkVMQVhFRCk7CisJCXdoaWxlIChjdXIgPiBoaWdoICYmICFhdG9taWNfY29tcGFyZV9leGNoYW5n ZV93ZWFrX3p1KAorCQkgICAgJmhpZ2hwYWdlcywgJmhpZ2gsIGN1ciwgQVRPTUlDX1JFTEFYRUQs IEFUT01JQ19SRUxBWEVEKSkgeworCQkJLyoKKwkJCSAqIERvbid0IHJlZnJlc2ggY3VyLCBiZWNh dXNlIGl0IG1heSBoYXZlIGRlY3JlYXNlZAorCQkJICogc2luY2UgdGhpcyB0aHJlYWQgbG9zdCB0 aGUgaGlnaHBhZ2VzIHVwZGF0ZSByYWNlLgorCQkJICogTm90ZSB0aGF0IGhpZ2ggaXMgdXBkYXRl ZCBpbiBjYXNlIG9mIENBUyBmYWlsdXJlLgorCQkJICovCisJCX0KKwkJaWYgKGN1ciA+IGhpZ2gg JiYgcHJvZl9nZHVtcF9nZXRfdW5sb2NrZWQoKSkgeworCQkJcHJvZl9nZHVtcCh0c2RuKTsKKwkJ fQorCX0KK30KKworc3RhdGljIHZvaWQKK2V4dGVudF9nZHVtcF9zdWIodHNkbl90ICp0c2RuLCBj b25zdCBlZGF0YV90ICplZGF0YSkgeworCWNhc3NlcnQoY29uZmlnX3Byb2YpOworCisJaWYgKG9w dF9wcm9mICYmIGVkYXRhX3N0YXRlX2dldChlZGF0YSkgPT0gZXh0ZW50X3N0YXRlX2FjdGl2ZSkg eworCQlzaXplX3QgbnN1YiA9IGVkYXRhX3NpemVfZ2V0KGVkYXRhKSA+PiBMR19QQUdFOworCQlh c3NlcnQoYXRvbWljX2xvYWRfenUoJmN1cnBhZ2VzLCBBVE9NSUNfUkVMQVhFRCkgPj0gbnN1Yik7 CisJCWF0b21pY19mZXRjaF9zdWJfenUoJmN1cnBhZ2VzLCBuc3ViLCBBVE9NSUNfUkVMQVhFRCk7 CisJfQorfQorCitzdGF0aWMgYm9vbAorZXh0ZW50X3JlZ2lzdGVyX2ltcGwodHNkbl90ICp0c2Ru LCBwYWNfdCAqcGFjLCBlZGF0YV90ICplZGF0YSwgYm9vbCBnZHVtcF9hZGQpIHsKKwlhc3NlcnQo ZWRhdGFfc3RhdGVfZ2V0KGVkYXRhKSA9PSBleHRlbnRfc3RhdGVfYWN0aXZlKTsKKwkvKgorCSAq IE5vIGxvY2tpbmcgbmVlZGVkLCBhcyB0aGUgZWRhdGEgbXVzdCBiZSBpbiBhY3RpdmUgc3RhdGUs IHdoaWNoCisJICogcHJldmVudHMgb3RoZXIgdGhyZWFkcyBmcm9tIGFjY2Vzc2luZyB0aGUgZWRh dGEuCisJICovCisJaWYgKGVtYXBfcmVnaXN0ZXJfYm91bmRhcnkodHNkbiwgcGFjLT5lbWFwLCBl ZGF0YSwgU0NfTlNJWkVTLAorCSAgICAvKiBzbGFiICovIGZhbHNlKSkgeworCQlyZXR1cm4gdHJ1 ZTsKKwl9CisKKwlpZiAoY29uZmlnX3Byb2YgJiYgZ2R1bXBfYWRkKSB7CisJCWV4dGVudF9nZHVt cF9hZGQodHNkbiwgZWRhdGEpOworCX0KKworCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGJv b2wKK2V4dGVudF9yZWdpc3Rlcih0c2RuX3QgKnRzZG4sIHBhY190ICpwYWMsIGVkYXRhX3QgKmVk YXRhKSB7CisJcmV0dXJuIGV4dGVudF9yZWdpc3Rlcl9pbXBsKHRzZG4sIHBhYywgZWRhdGEsIHRy dWUpOworfQorCitzdGF0aWMgYm9vbAorZXh0ZW50X3JlZ2lzdGVyX25vX2dkdW1wX2FkZCh0c2Ru X3QgKnRzZG4sIHBhY190ICpwYWMsIGVkYXRhX3QgKmVkYXRhKSB7CisJcmV0dXJuIGV4dGVudF9y ZWdpc3Rlcl9pbXBsKHRzZG4sIHBhYywgZWRhdGEsIGZhbHNlKTsKK30KKworc3RhdGljIHZvaWQK K2V4dGVudF9yZXJlZ2lzdGVyKHRzZG5fdCAqdHNkbiwgcGFjX3QgKnBhYywgZWRhdGFfdCAqZWRh dGEpIHsKKwlib29sIGVyciA9IGV4dGVudF9yZWdpc3Rlcih0c2RuLCBwYWMsIGVkYXRhKTsKKwlh c3NlcnQoIWVycik7Cit9CisKKy8qCisgKiBSZW1vdmVzIGFsbCBwb2ludGVycyB0byB0aGUgZ2l2 ZW4gZXh0ZW50IGZyb20gdGhlIGdsb2JhbCBydHJlZS4KKyAqLworc3RhdGljIHZvaWQKK2V4dGVu dF9kZXJlZ2lzdGVyX2ltcGwodHNkbl90ICp0c2RuLCBwYWNfdCAqcGFjLCBlZGF0YV90ICplZGF0 YSwKKyAgICBib29sIGdkdW1wKSB7CisJZW1hcF9kZXJlZ2lzdGVyX2JvdW5kYXJ5KHRzZG4sIHBh Yy0+ZW1hcCwgZWRhdGEpOworCisJaWYgKGNvbmZpZ19wcm9mICYmIGdkdW1wKSB7CisJCWV4dGVu dF9nZHVtcF9zdWIodHNkbiwgZWRhdGEpOworCX0KK30KKworc3RhdGljIHZvaWQKK2V4dGVudF9k ZXJlZ2lzdGVyKHRzZG5fdCAqdHNkbiwgcGFjX3QgKnBhYywgZWRhdGFfdCAqZWRhdGEpIHsKKwll eHRlbnRfZGVyZWdpc3Rlcl9pbXBsKHRzZG4sIHBhYywgZWRhdGEsIHRydWUpOworfQorCitzdGF0 aWMgdm9pZAorZXh0ZW50X2RlcmVnaXN0ZXJfbm9fZ2R1bXBfc3ViKHRzZG5fdCAqdHNkbiwgcGFj X3QgKnBhYywKKyAgICBlZGF0YV90ICplZGF0YSkgeworCWV4dGVudF9kZXJlZ2lzdGVyX2ltcGwo dHNkbiwgcGFjLCBlZGF0YSwgZmFsc2UpOworfQorCisvKgorICogVHJpZXMgdG8gZmluZCBhbmQg cmVtb3ZlIGFuIGV4dGVudCBmcm9tIGVjYWNoZSB0aGF0IGNhbiBiZSB1c2VkIGZvciB0aGUKKyAq IGdpdmVuIGFsbG9jYXRpb24gcmVxdWVzdC4KKyAqLworc3RhdGljIGVkYXRhX3QgKgorZXh0ZW50 X3JlY3ljbGVfZXh0cmFjdCh0c2RuX3QgKnRzZG4sIHBhY190ICpwYWMsIGVob29rc190ICplaG9v a3MsCisgICAgZWNhY2hlX3QgKmVjYWNoZSwgZWRhdGFfdCAqZXhwYW5kX2VkYXRhLCBzaXplX3Qg c2l6ZSwgc2l6ZV90IGFsaWdubWVudCwKKyAgICBib29sIGd1YXJkZWQpIHsKKwltYWxsb2NfbXV0 ZXhfYXNzZXJ0X293bmVyKHRzZG4sICZlY2FjaGUtPm10eCk7CisJYXNzZXJ0KGFsaWdubWVudCA+ IDApOworCWlmIChjb25maWdfZGVidWcgJiYgZXhwYW5kX2VkYXRhICE9IE5VTEwpIHsKKwkJLyoK KwkJICogTm9uLU5VTEwgZXhwYW5kX2VkYXRhIGluZGljYXRlcyBpbi1wbGFjZSBleHBhbmRpbmcg cmVhbGxvYy4KKwkJICogbmV3X2FkZHIgbXVzdCBlaXRoZXIgcmVmZXIgdG8gYSBub24tZXhpc3Rp bmcgZXh0ZW50LCBvciB0bworCQkgKiB0aGUgYmFzZSBvZiBhbiBleHRhbnQgZXh0ZW50LCBzaW5j ZSBvbmx5IGFjdGl2ZSBzbGFicyBzdXBwb3J0CisJCSAqIGludGVyaW9yIGxvb2t1cHMgKHdoaWNo IG9mIGNvdXJzZSBjYW5ub3QgYmUgcmVjeWNsZWQpLgorCQkgKi8KKwkJdm9pZCAqbmV3X2FkZHIg PSBlZGF0YV9wYXN0X2dldChleHBhbmRfZWRhdGEpOworCQlhc3NlcnQoUEFHRV9BRERSMkJBU0Uo bmV3X2FkZHIpID09IG5ld19hZGRyKTsKKwkJYXNzZXJ0KGFsaWdubWVudCA8PSBQQUdFKTsKKwl9 CisKKwllZGF0YV90ICplZGF0YTsKKwllc2V0X3QgKmVzZXQgPSBndWFyZGVkID8gJmVjYWNoZS0+ Z3VhcmRlZF9lc2V0IDogJmVjYWNoZS0+ZXNldDsKKwlpZiAoZXhwYW5kX2VkYXRhICE9IE5VTEwp IHsKKwkJZWRhdGEgPSBlbWFwX3RyeV9hY3F1aXJlX2VkYXRhX25laWdoYm9yX2V4cGFuZCh0c2Ru LCBwYWMtPmVtYXAsCisJCSAgICBleHBhbmRfZWRhdGEsIEVYVEVOVF9QQUlfUEFDLCBlY2FjaGUt PnN0YXRlKTsKKwkJaWYgKGVkYXRhICE9IE5VTEwpIHsKKwkJCWV4dGVudF9hc3NlcnRfY2FuX2V4 cGFuZChleHBhbmRfZWRhdGEsIGVkYXRhKTsKKwkJCWlmIChlZGF0YV9zaXplX2dldChlZGF0YSkg PCBzaXplKSB7CisJCQkJZW1hcF9yZWxlYXNlX2VkYXRhKHRzZG4sIHBhYy0+ZW1hcCwgZWRhdGEs CisJCQkJICAgIGVjYWNoZS0+c3RhdGUpOworCQkJCWVkYXRhID0gTlVMTDsKKwkJCX0KKwkJfQor CX0gZWxzZSB7CisJCS8qCisJCSAqIEEgbGFyZ2UgZXh0ZW50IG1pZ2h0IGJlIGJyb2tlbiB1cCBm cm9tIGl0cyBvcmlnaW5hbCBzaXplIHRvCisJCSAqIHNvbWUgc21hbGwgc2l6ZSB0byBzYXRpc2Z5 IGEgc21hbGwgcmVxdWVzdC4gIFdoZW4gdGhhdCBzbWFsbAorCQkgKiByZXF1ZXN0IGlzIGZyZWVk LCB0aG91Z2gsIGl0IHdvbid0IG1lcmdlIGJhY2sgd2l0aCB0aGUgbGFyZ2VyCisJCSAqIGV4dGVu dCBpZiBkZWxheWVkIGNvYWxlc2NpbmcgaXMgb24uICBUaGUgbGFyZ2UgZXh0ZW50IGNhbgorCQkg KiB0aGVuIG5vIGxvbmdlciBzYXRpZnkgYSByZXF1ZXN0IGZvciBpdHMgb3JpZ2luYWwgc2l6ZS4g IFRvCisJCSAqIGxpbWl0IHRoaXMgZWZmZWN0LCB3aGVuIGRlbGF5ZWQgY29hbGVzY2luZyBpcyBl bmFibGVkLCB3ZQorCQkgKiBwdXQgYSBjYXAgb24gaG93IGJpZyBhbiBleHRlbnQgd2UgY2FuIHNw bGl0IGZvciBhIHJlcXVlc3QuCisJCSAqLworCQl1bnNpZ25lZCBsZ19tYXhfZml0ID0gZWNhY2hl LT5kZWxheV9jb2FsZXNjZQorCQkgICAgPyAodW5zaWduZWQpb3B0X2xnX2V4dGVudF9tYXhfYWN0 aXZlX2ZpdCA6IFNDX1BUUl9CSVRTOworCisJCS8qCisJCSAqIElmIHNwbGl0IGFuZCBtZXJnZSBh cmUgbm90IGFsbG93ZWQgKFdpbmRvd3Mgdy9vIHJldGFpbiksIHRyeQorCQkgKiBleGFjdCBmaXQg b25seS4KKwkJICoKKwkJICogRm9yIHNpbXBsaWNpdHkgcHVycG9zZXMsIHNwbGl0dGluZyBndWFy ZGVkIGV4dGVudHMgaXMgbm90CisJCSAqIHN1cHBvcnRlZC4gIEhlbmNlLCB3ZSBkbyBvbmx5IGV4 YWN0IGZpdCBmb3IgZ3VhcmRlZAorCQkgKiBhbGxvY2F0aW9ucy4KKwkJICovCisJCWJvb2wgZXhh Y3Rfb25seSA9ICghbWFwc19jb2FsZXNjZSAmJiAhb3B0X3JldGFpbikgfHwgZ3VhcmRlZDsKKwkJ ZWRhdGEgPSBlc2V0X2ZpdChlc2V0LCBzaXplLCBhbGlnbm1lbnQsIGV4YWN0X29ubHksCisJCSAg ICBsZ19tYXhfZml0KTsKKwl9CisJaWYgKGVkYXRhID09IE5VTEwpIHsKKwkJcmV0dXJuIE5VTEw7 CisJfQorCWFzc2VydCghZ3VhcmRlZCB8fCBlZGF0YV9ndWFyZGVkX2dldChlZGF0YSkpOworCWV4 dGVudF9hY3RpdmF0ZV9sb2NrZWQodHNkbiwgcGFjLCBlY2FjaGUsIGVzZXQsIGVkYXRhKTsKKwor CXJldHVybiBlZGF0YTsKK30KKworLyoKKyAqIEdpdmVuIGFuIGFsbG9jYXRpb24gcmVxdWVzdCBh bmQgYW4gZXh0ZW50IGd1YXJhbnRlZWQgdG8gYmUgYWJsZSB0byBzYXRpc2Z5CisgKiBpdCwgdGhp cyBzcGxpdHMgb2ZmIGxlYWQgYW5kIHRyYWlsIGV4dGVudHMsIGxlYXZpbmcgZWRhdGEgcG9pbnRp bmcgdG8gYW4KKyAqIGV4dGVudCBzYXRpc2Z5aW5nIHRoZSBhbGxvY2F0aW9uLgorICogVGhpcyBm dW5jdGlvbiBkb2Vzbid0IHB1dCBsZWFkIG9yIHRyYWlsIGludG8gYW55IGVjYWNoZTsgaXQncyB0 aGUgY2FsbGVyJ3MKKyAqIGpvYiB0byBlbnN1cmUgdGhhdCB0aGV5IGNhbiBiZSByZXVzZWQuCisg Ki8KK3R5cGVkZWYgZW51bSB7CisJLyoKKwkgKiBTcGxpdCBzdWNjZXNzZnVsbHkuICBsZWFkLCBl ZGF0YSwgYW5kIHRyYWlsLCBhcmUgbW9kaWZpZWQgdG8gZXh0ZW50cworCSAqIGRlc2NyaWJpbmcg dGhlIHJhbmdlcyBiZWZvcmUsIGluLCBhbmQgYWZ0ZXIgdGhlIGdpdmVuIGFsbG9jYXRpb24uCisJ ICovCisJZXh0ZW50X3NwbGl0X2ludGVyaW9yX29rLAorCS8qCisJICogVGhlIGV4dGVudCBjYW4n dCBzYXRpc2Z5IHRoZSBnaXZlbiBhbGxvY2F0aW9uIHJlcXVlc3QuICBOb25lIG9mIHRoZQorCSAq IGlucHV0IGVkYXRhX3QgKnMgYXJlIHRvdWNoZWQuCisJICovCisJZXh0ZW50X3NwbGl0X2ludGVy aW9yX2NhbnRfYWxsb2MsCisJLyoKKwkgKiBJbiBhIHBvdGVudGlhbGx5IGludmFsaWQgc3RhdGUu ICBNdXN0IGxlYWsgKGlmICp0b19sZWFrIGlzIG5vbi1OVUxMKSwKKwkgKiBhbmQgc2FsdmFnZSB3 aGF0J3Mgc3RpbGwgc2FsdmFnZWFibGUgKGlmICp0b19zYWx2YWdlIGlzIG5vbi1OVUxMKS4KKwkg KiBOb25lIG9mIGxlYWQsIGVkYXRhLCBvciB0cmFpbCBhcmUgdmFsaWQuCisJICovCisJZXh0ZW50 X3NwbGl0X2ludGVyaW9yX2Vycm9yCit9IGV4dGVudF9zcGxpdF9pbnRlcmlvcl9yZXN1bHRfdDsK Kworc3RhdGljIGV4dGVudF9zcGxpdF9pbnRlcmlvcl9yZXN1bHRfdAorZXh0ZW50X3NwbGl0X2lu dGVyaW9yKHRzZG5fdCAqdHNkbiwgcGFjX3QgKnBhYywgZWhvb2tzX3QgKmVob29rcywKKyAgICAv KiBUaGUgcmVzdWx0IG9mIHNwbGl0dGluZywgaW4gY2FzZSBvZiBzdWNjZXNzLiAqLworICAgIGVk YXRhX3QgKiplZGF0YSwgZWRhdGFfdCAqKmxlYWQsIGVkYXRhX3QgKip0cmFpbCwKKyAgICAvKiBU aGUgbWVzcyB0byBjbGVhbiB1cCwgaW4gY2FzZSBvZiBlcnJvci4gKi8KKyAgICBlZGF0YV90ICoq dG9fbGVhaywgZWRhdGFfdCAqKnRvX3NhbHZhZ2UsCisgICAgZWRhdGFfdCAqZXhwYW5kX2VkYXRh LCBzaXplX3Qgc2l6ZSwgc2l6ZV90IGFsaWdubWVudCkgeworCXNpemVfdCBsZWFkc2l6ZSA9IEFM SUdOTUVOVF9DRUlMSU5HKCh1aW50cHRyX3QpZWRhdGFfYmFzZV9nZXQoKmVkYXRhKSwKKwkgICAg UEFHRV9DRUlMSU5HKGFsaWdubWVudCkpIC0gKHVpbnRwdHJfdCllZGF0YV9iYXNlX2dldCgqZWRh dGEpOworCWFzc2VydChleHBhbmRfZWRhdGEgPT0gTlVMTCB8fCBsZWFkc2l6ZSA9PSAwKTsKKwlp ZiAoZWRhdGFfc2l6ZV9nZXQoKmVkYXRhKSA8IGxlYWRzaXplICsgc2l6ZSkgeworCQlyZXR1cm4g ZXh0ZW50X3NwbGl0X2ludGVyaW9yX2NhbnRfYWxsb2M7CisJfQorCXNpemVfdCB0cmFpbHNpemUg PSBlZGF0YV9zaXplX2dldCgqZWRhdGEpIC0gbGVhZHNpemUgLSBzaXplOworCisJKmxlYWQgPSBO VUxMOworCSp0cmFpbCA9IE5VTEw7CisJKnRvX2xlYWsgPSBOVUxMOworCSp0b19zYWx2YWdlID0g TlVMTDsKKworCS8qIFNwbGl0IHRoZSBsZWFkLiAqLworCWlmIChsZWFkc2l6ZSAhPSAwKSB7CisJ CWFzc2VydCghZWRhdGFfZ3VhcmRlZF9nZXQoKmVkYXRhKSk7CisJCSpsZWFkID0gKmVkYXRhOwor CQkqZWRhdGEgPSBleHRlbnRfc3BsaXRfaW1wbCh0c2RuLCBwYWMsIGVob29rcywgKmxlYWQsIGxl YWRzaXplLAorCQkgICAgc2l6ZSArIHRyYWlsc2l6ZSwgLyogaG9sZGluZ19jb3JlX2xvY2tzKi8g dHJ1ZSk7CisJCWlmICgqZWRhdGEgPT0gTlVMTCkgeworCQkJKnRvX2xlYWsgPSAqbGVhZDsKKwkJ CSpsZWFkID0gTlVMTDsKKwkJCXJldHVybiBleHRlbnRfc3BsaXRfaW50ZXJpb3JfZXJyb3I7CisJ CX0KKwl9CisKKwkvKiBTcGxpdCB0aGUgdHJhaWwuICovCisJaWYgKHRyYWlsc2l6ZSAhPSAwKSB7 CisJCWFzc2VydCghZWRhdGFfZ3VhcmRlZF9nZXQoKmVkYXRhKSk7CisJCSp0cmFpbCA9IGV4dGVu dF9zcGxpdF9pbXBsKHRzZG4sIHBhYywgZWhvb2tzLCAqZWRhdGEsIHNpemUsCisJCSAgICB0cmFp bHNpemUsIC8qIGhvbGRpbmdfY29yZV9sb2NrcyAqLyB0cnVlKTsKKwkJaWYgKCp0cmFpbCA9PSBO VUxMKSB7CisJCQkqdG9fbGVhayA9ICplZGF0YTsKKwkJCSp0b19zYWx2YWdlID0gKmxlYWQ7CisJ CQkqbGVhZCA9IE5VTEw7CisJCQkqZWRhdGEgPSBOVUxMOworCQkJcmV0dXJuIGV4dGVudF9zcGxp dF9pbnRlcmlvcl9lcnJvcjsKKwkJfQorCX0KKworCXJldHVybiBleHRlbnRfc3BsaXRfaW50ZXJp b3Jfb2s7Cit9CisKKy8qCisgKiBUaGlzIGZ1bGZpbGxzIHRoZSBpbmRpY2F0ZWQgYWxsb2NhdGlv biByZXF1ZXN0IG91dCBvZiB0aGUgZ2l2ZW4gZXh0ZW50ICh3aGljaAorICogdGhlIGNhbGxlciBz aG91bGQgaGF2ZSBlbnN1cmVkIHdhcyBiaWcgZW5vdWdoKS4gIElmIHRoZXJlJ3MgYW55IHVudXNl ZCBzcGFjZQorICogYmVmb3JlIG9yIGFmdGVyIHRoZSByZXN1bHRpbmcgYWxsb2NhdGlvbiwgdGhh dCBzcGFjZSBpcyBnaXZlbiBpdHMgb3duIGV4dGVudAorICogYW5kIHB1dCBiYWNrIGludG8gZWNh Y2hlLgorICovCitzdGF0aWMgZWRhdGFfdCAqCitleHRlbnRfcmVjeWNsZV9zcGxpdCh0c2RuX3Qg KnRzZG4sIHBhY190ICpwYWMsIGVob29rc190ICplaG9va3MsCisgICAgZWNhY2hlX3QgKmVjYWNo ZSwgZWRhdGFfdCAqZXhwYW5kX2VkYXRhLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IGFsaWdubWVudCwK KyAgICBlZGF0YV90ICplZGF0YSwgYm9vbCBncm93aW5nX3JldGFpbmVkKSB7CisJYXNzZXJ0KCFl ZGF0YV9ndWFyZGVkX2dldChlZGF0YSkgfHwgc2l6ZSA9PSBlZGF0YV9zaXplX2dldChlZGF0YSkp OworCW1hbGxvY19tdXRleF9hc3NlcnRfb3duZXIodHNkbiwgJmVjYWNoZS0+bXR4KTsKKworCWVk YXRhX3QgKmxlYWQ7CisJZWRhdGFfdCAqdHJhaWw7CisJZWRhdGFfdCAqdG9fbGVhayBKRU1BTExP Q19DQ19TSUxFTkNFX0lOSVQoTlVMTCk7CisJZWRhdGFfdCAqdG9fc2FsdmFnZSBKRU1BTExPQ19D Q19TSUxFTkNFX0lOSVQoTlVMTCk7CisKKwlleHRlbnRfc3BsaXRfaW50ZXJpb3JfcmVzdWx0X3Qg cmVzdWx0ID0gZXh0ZW50X3NwbGl0X2ludGVyaW9yKAorCSAgICB0c2RuLCBwYWMsIGVob29rcywg JmVkYXRhLCAmbGVhZCwgJnRyYWlsLCAmdG9fbGVhaywgJnRvX3NhbHZhZ2UsCisJICAgIGV4cGFu ZF9lZGF0YSwgc2l6ZSwgYWxpZ25tZW50KTsKKworCWlmICghbWFwc19jb2FsZXNjZSAmJiByZXN1 bHQgIT0gZXh0ZW50X3NwbGl0X2ludGVyaW9yX29rCisJICAgICYmICFvcHRfcmV0YWluKSB7CisJ CS8qCisJCSAqIFNwbGl0IGlzbid0IHN1cHBvcnRlZCAoaW1wbGllcyBXaW5kb3dzIHcvbyByZXRh aW4pLiAgQXZvaWQKKwkJICogbGVha2luZyB0aGUgZXh0ZW50LgorCQkgKi8KKwkJYXNzZXJ0KHRv X2xlYWsgIT0gTlVMTCAmJiBsZWFkID09IE5VTEwgJiYgdHJhaWwgPT0gTlVMTCk7CisJCWV4dGVu dF9kZWFjdGl2YXRlX2xvY2tlZCh0c2RuLCBwYWMsIGVjYWNoZSwgdG9fbGVhayk7CisJCXJldHVy biBOVUxMOworCX0KKworCWlmIChyZXN1bHQgPT0gZXh0ZW50X3NwbGl0X2ludGVyaW9yX29rKSB7 CisJCWlmIChsZWFkICE9IE5VTEwpIHsKKwkJCWV4dGVudF9kZWFjdGl2YXRlX2xvY2tlZCh0c2Ru LCBwYWMsIGVjYWNoZSwgbGVhZCk7CisJCX0KKwkJaWYgKHRyYWlsICE9IE5VTEwpIHsKKwkJCWV4 dGVudF9kZWFjdGl2YXRlX2xvY2tlZCh0c2RuLCBwYWMsIGVjYWNoZSwgdHJhaWwpOworCQl9CisJ CXJldHVybiBlZGF0YTsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBXZSBzaG91bGQgaGF2ZSBwaWNr ZWQgYW4gZXh0ZW50IHRoYXQgd2FzIGxhcmdlIGVub3VnaCB0bworCQkgKiBmdWxmaWxsIG91ciBh bGxvY2F0aW9uIHJlcXVlc3QuCisJCSAqLworCQlhc3NlcnQocmVzdWx0ID09IGV4dGVudF9zcGxp dF9pbnRlcmlvcl9lcnJvcik7CisJCWlmICh0b19zYWx2YWdlICE9IE5VTEwpIHsKKwkJCWV4dGVu dF9kZXJlZ2lzdGVyKHRzZG4sIHBhYywgdG9fc2FsdmFnZSk7CisJCX0KKwkJaWYgKHRvX2xlYWsg IT0gTlVMTCkgeworCQkJZXh0ZW50X2RlcmVnaXN0ZXJfbm9fZ2R1bXBfc3ViKHRzZG4sIHBhYywg dG9fbGVhayk7CisJCQkvKgorCQkJICogTWF5IGdvIGRvd24gdGhlIHB1cmdlIHBhdGggKHdoaWNo IGFzc3VtZSBubyBlY2FjaGUKKwkJCSAqIGxvY2tzKS4gIE9ubHkgaGFwcGVucyB3aXRoIE9PTSBj YXVzZWQgc3BsaXQgZmFpbHVyZXMuCisJCQkgKi8KKwkJCW1hbGxvY19tdXRleF91bmxvY2sodHNk biwgJmVjYWNoZS0+bXR4KTsKKwkJCWV4dGVudHNfYWJhbmRvbl92bSh0c2RuLCBwYWMsIGVob29r cywgZWNhY2hlLCB0b19sZWFrLAorCQkJICAgIGdyb3dpbmdfcmV0YWluZWQpOworCQkJbWFsbG9j X211dGV4X2xvY2sodHNkbiwgJmVjYWNoZS0+bXR4KTsKKwkJfQorCQlyZXR1cm4gTlVMTDsKKwl9 CisJdW5yZWFjaGFibGUoKTsKK30KKworLyoKKyAqIFRyaWVzIHRvIHNhdGlzZnkgdGhlIGdpdmVu IGFsbG9jYXRpb24gcmVxdWVzdCBieSByZXVzaW5nIG9uZSBvZiB0aGUgZXh0ZW50cworICogaW4g dGhlIGdpdmVuIGVjYWNoZV90LgorICovCitzdGF0aWMgZWRhdGFfdCAqCitleHRlbnRfcmVjeWNs ZSh0c2RuX3QgKnRzZG4sIHBhY190ICpwYWMsIGVob29rc190ICplaG9va3MsIGVjYWNoZV90ICpl Y2FjaGUsCisgICAgZWRhdGFfdCAqZXhwYW5kX2VkYXRhLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IGFs aWdubWVudCwgYm9vbCB6ZXJvLAorICAgIGJvb2wgKmNvbW1pdCwgYm9vbCBncm93aW5nX3JldGFp bmVkLCBib29sIGd1YXJkZWQpIHsKKwl3aXRuZXNzX2Fzc2VydF9kZXB0aF90b19yYW5rKHRzZG5f d2l0bmVzc190c2RwX2dldCh0c2RuKSwKKwkgICAgV0lUTkVTU19SQU5LX0NPUkUsIGdyb3dpbmdf cmV0YWluZWQgPyAxIDogMCk7CisJYXNzZXJ0KCFndWFyZGVkIHx8IGV4cGFuZF9lZGF0YSA9PSBO VUxMKTsKKwlhc3NlcnQoIWd1YXJkZWQgfHwgYWxpZ25tZW50IDw9IFBBR0UpOworCisJbWFsbG9j X211dGV4X2xvY2sodHNkbiwgJmVjYWNoZS0+bXR4KTsKKworCWVkYXRhX3QgKmVkYXRhID0gZXh0 ZW50X3JlY3ljbGVfZXh0cmFjdCh0c2RuLCBwYWMsIGVob29rcywgZWNhY2hlLAorCSAgICBleHBh bmRfZWRhdGEsIHNpemUsIGFsaWdubWVudCwgZ3VhcmRlZCk7CisJaWYgKGVkYXRhID09IE5VTEwp IHsKKwkJbWFsbG9jX211dGV4X3VubG9jayh0c2RuLCAmZWNhY2hlLT5tdHgpOworCQlyZXR1cm4g TlVMTDsKKwl9CisKKwllZGF0YSA9IGV4dGVudF9yZWN5Y2xlX3NwbGl0KHRzZG4sIHBhYywgZWhv b2tzLCBlY2FjaGUsIGV4cGFuZF9lZGF0YSwKKwkgICAgc2l6ZSwgYWxpZ25tZW50LCBlZGF0YSwg Z3Jvd2luZ19yZXRhaW5lZCk7CisJbWFsbG9jX211dGV4X3VubG9jayh0c2RuLCAmZWNhY2hlLT5t dHgpOworCWlmIChlZGF0YSA9PSBOVUxMKSB7CisJCXJldHVybiBOVUxMOworCX0KKworCWFzc2Vy dChlZGF0YV9zdGF0ZV9nZXQoZWRhdGEpID09IGV4dGVudF9zdGF0ZV9hY3RpdmUpOworCWlmIChl eHRlbnRfY29tbWl0X3plcm8odHNkbiwgZWhvb2tzLCBlZGF0YSwgKmNvbW1pdCwgemVybywKKwkg ICAgZ3Jvd2luZ19yZXRhaW5lZCkpIHsKKwkJZXh0ZW50X3JlY29yZCh0c2RuLCBwYWMsIGVob29r cywgZWNhY2hlLCBlZGF0YSk7CisJCXJldHVybiBOVUxMOworCX0KKwlpZiAoZWRhdGFfY29tbWl0 dGVkX2dldChlZGF0YSkpIHsKKwkJLyoKKwkJICogVGhpcyByZXZlcnNlcyB0aGUgcHVycG9zZSBv ZiB0aGlzIHZhcmlhYmxlIC0gcHJldmlvdXNseSBpdAorCQkgKiB3YXMgdHJlYXRlZCBhcyBhbiBp bnB1dCBwYXJhbWV0ZXIsIG5vdyBpdCB0dXJucyBpbnRvIGFuCisJCSAqIG91dHB1dCBwYXJhbWV0 ZXIsIHJlcG9ydGluZyBpZiB0aGUgZWRhdGEgaGFzIGFjdHVhbGx5IGJlZW4KKwkJICogY29tbWl0 dGVkLgorCQkgKi8KKwkJKmNvbW1pdCA9IHRydWU7CisJfQorCXJldHVybiBlZGF0YTsKK30KKwor LyoKKyAqIElmIHZpcnR1YWwgbWVtb3J5IGlzIHJldGFpbmVkLCBjcmVhdGUgaW5jcmVhc2luZ2x5 IGxhcmdlciBleHRlbnRzIGZyb20gd2hpY2gKKyAqIHRvIHNwbGl0IHJlcXVlc3RlZCBleHRlbnRz IGluIG9yZGVyIHRvIGxpbWl0IHRoZSB0b3RhbCBudW1iZXIgb2YgZGlzam9pbnQKKyAqIHZpcnR1 YWwgbWVtb3J5IHJhbmdlcyByZXRhaW5lZCBieSBlYWNoIHNoYXJkLgorICovCitzdGF0aWMgZWRh dGFfdCAqCitleHRlbnRfZ3Jvd19yZXRhaW5lZCh0c2RuX3QgKnRzZG4sIHBhY190ICpwYWMsIGVo b29rc190ICplaG9va3MsCisgICAgc2l6ZV90IHNpemUsIHNpemVfdCBhbGlnbm1lbnQsIGJvb2wg emVybywgYm9vbCAqY29tbWl0KSB7CisJbWFsbG9jX211dGV4X2Fzc2VydF9vd25lcih0c2RuLCAm cGFjLT5ncm93X210eCk7CisKKwlzaXplX3QgYWxsb2Nfc2l6ZV9taW4gPSBzaXplICsgUEFHRV9D RUlMSU5HKGFsaWdubWVudCkgLSBQQUdFOworCS8qIEJld2FyZSBzaXplX3Qgd3JhcC1hcm91bmQu ICovCisJaWYgKGFsbG9jX3NpemVfbWluIDwgc2l6ZSkgeworCQlnb3RvIGxhYmVsX2VycjsKKwl9 CisJLyoKKwkgKiBGaW5kIHRoZSBuZXh0IGV4dGVudCBzaXplIGluIHRoZSBzZXJpZXMgdGhhdCB3 b3VsZCBiZSBsYXJnZSBlbm91Z2ggdG8KKwkgKiBzYXRpc2Z5IHRoaXMgcmVxdWVzdC4KKwkgKi8K KwlzaXplX3QgYWxsb2Nfc2l6ZTsKKwlwc3ppbmRfdCBleHBfZ3Jvd19za2lwOworCWJvb2wgZXJy ID0gZXhwX2dyb3dfc2l6ZV9wcmVwYXJlKCZwYWMtPmV4cF9ncm93LCBhbGxvY19zaXplX21pbiwK KwkgICAgJmFsbG9jX3NpemUsICZleHBfZ3Jvd19za2lwKTsKKwlpZiAoZXJyKSB7CisJCWdvdG8g bGFiZWxfZXJyOworCX0KKworCWVkYXRhX3QgKmVkYXRhID0gZWRhdGFfY2FjaGVfZ2V0KHRzZG4s IHBhYy0+ZWRhdGFfY2FjaGUpOworCWlmIChlZGF0YSA9PSBOVUxMKSB7CisJCWdvdG8gbGFiZWxf ZXJyOworCX0KKwlib29sIHplcm9lZCA9IGZhbHNlOworCWJvb2wgY29tbWl0dGVkID0gZmFsc2U7 CisKKwl2b2lkICpwdHIgPSBlaG9va3NfYWxsb2ModHNkbiwgZWhvb2tzLCBOVUxMLCBhbGxvY19z aXplLCBQQUdFLCAmemVyb2VkLAorCSAgICAmY29tbWl0dGVkKTsKKworCWlmIChwdHIgPT0gTlVM TCkgeworCQllZGF0YV9jYWNoZV9wdXQodHNkbiwgcGFjLT5lZGF0YV9jYWNoZSwgZWRhdGEpOwor CQlnb3RvIGxhYmVsX2VycjsKKwl9CisKKwllZGF0YV9pbml0KGVkYXRhLCBlY2FjaGVfaW5kX2dl dCgmcGFjLT5lY2FjaGVfcmV0YWluZWQpLCBwdHIsCisJICAgIGFsbG9jX3NpemUsIGZhbHNlLCBT Q19OU0laRVMsIGV4dGVudF9zbl9uZXh0KHBhYyksCisJICAgIGV4dGVudF9zdGF0ZV9hY3RpdmUs IHplcm9lZCwgY29tbWl0dGVkLCBFWFRFTlRfUEFJX1BBQywKKwkgICAgRVhURU5UX0lTX0hFQUQp OworCisJaWYgKGV4dGVudF9yZWdpc3Rlcl9ub19nZHVtcF9hZGQodHNkbiwgcGFjLCBlZGF0YSkp IHsKKwkJZWRhdGFfY2FjaGVfcHV0KHRzZG4sIHBhYy0+ZWRhdGFfY2FjaGUsIGVkYXRhKTsKKwkJ Z290byBsYWJlbF9lcnI7CisJfQorCisJaWYgKGVkYXRhX2NvbW1pdHRlZF9nZXQoZWRhdGEpKSB7 CisJCSpjb21taXQgPSB0cnVlOworCX0KKworCWVkYXRhX3QgKmxlYWQ7CisJZWRhdGFfdCAqdHJh aWw7CisJZWRhdGFfdCAqdG9fbGVhayBKRU1BTExPQ19DQ19TSUxFTkNFX0lOSVQoTlVMTCk7CisJ ZWRhdGFfdCAqdG9fc2FsdmFnZSBKRU1BTExPQ19DQ19TSUxFTkNFX0lOSVQoTlVMTCk7CisKKwll eHRlbnRfc3BsaXRfaW50ZXJpb3JfcmVzdWx0X3QgcmVzdWx0ID0gZXh0ZW50X3NwbGl0X2ludGVy aW9yKHRzZG4sCisJICAgIHBhYywgZWhvb2tzLCAmZWRhdGEsICZsZWFkLCAmdHJhaWwsICZ0b19s ZWFrLCAmdG9fc2FsdmFnZSwgTlVMTCwKKwkgICAgc2l6ZSwgYWxpZ25tZW50KTsKKworCWlmIChy ZXN1bHQgPT0gZXh0ZW50X3NwbGl0X2ludGVyaW9yX29rKSB7CisJCWlmIChsZWFkICE9IE5VTEwp IHsKKwkJCWV4dGVudF9yZWNvcmQodHNkbiwgcGFjLCBlaG9va3MsICZwYWMtPmVjYWNoZV9yZXRh aW5lZCwKKwkJCSAgICBsZWFkKTsKKwkJfQorCQlpZiAodHJhaWwgIT0gTlVMTCkgeworCQkJZXh0 ZW50X3JlY29yZCh0c2RuLCBwYWMsIGVob29rcywgJnBhYy0+ZWNhY2hlX3JldGFpbmVkLAorCQkJ ICAgIHRyYWlsKTsKKwkJfQorCX0gZWxzZSB7CisJCS8qCisJCSAqIFdlIHNob3VsZCBoYXZlIGFs bG9jYXRlZCBhIHN1ZmZpY2llbnRseSBsYXJnZSBleHRlbnQ7IHRoZQorCQkgKiBjYW50X2FsbG9j IGNhc2Ugc2hvdWxkIG5vdCBvY2N1ci4KKwkJICovCisJCWFzc2VydChyZXN1bHQgPT0gZXh0ZW50 X3NwbGl0X2ludGVyaW9yX2Vycm9yKTsKKwkJaWYgKHRvX3NhbHZhZ2UgIT0gTlVMTCkgeworCQkJ aWYgKGNvbmZpZ19wcm9mKSB7CisJCQkJZXh0ZW50X2dkdW1wX2FkZCh0c2RuLCB0b19zYWx2YWdl KTsKKwkJCX0KKwkJCWV4dGVudF9yZWNvcmQodHNkbiwgcGFjLCBlaG9va3MsICZwYWMtPmVjYWNo ZV9yZXRhaW5lZCwKKwkJCSAgICB0b19zYWx2YWdlKTsKKwkJfQorCQlpZiAodG9fbGVhayAhPSBO VUxMKSB7CisJCQlleHRlbnRfZGVyZWdpc3Rlcl9ub19nZHVtcF9zdWIodHNkbiwgcGFjLCB0b19s ZWFrKTsKKwkJCWV4dGVudHNfYWJhbmRvbl92bSh0c2RuLCBwYWMsIGVob29rcywKKwkJCSAgICAm cGFjLT5lY2FjaGVfcmV0YWluZWQsIHRvX2xlYWssIHRydWUpOworCQl9CisJCWdvdG8gbGFiZWxf ZXJyOworCX0KKworCWlmICgqY29tbWl0ICYmICFlZGF0YV9jb21taXR0ZWRfZ2V0KGVkYXRhKSkg eworCQlpZiAoZXh0ZW50X2NvbW1pdF9pbXBsKHRzZG4sIGVob29rcywgZWRhdGEsIDAsCisJCSAg ICBlZGF0YV9zaXplX2dldChlZGF0YSksIHRydWUpKSB7CisJCQlleHRlbnRfcmVjb3JkKHRzZG4s IHBhYywgZWhvb2tzLAorCQkJICAgICZwYWMtPmVjYWNoZV9yZXRhaW5lZCwgZWRhdGEpOworCQkJ Z290byBsYWJlbF9lcnI7CisJCX0KKwkJLyogQSBzdWNjZXNzZnVsIGNvbW1pdCBzaG91bGQgcmV0 dXJuIHplcm9lZCBtZW1vcnkuICovCisJCWlmIChjb25maWdfZGVidWcpIHsKKwkJCXZvaWQgKmFk ZHIgPSBlZGF0YV9hZGRyX2dldChlZGF0YSk7CisJCQlzaXplX3QgKnAgPSAoc2l6ZV90ICopKHVp bnRwdHJfdClhZGRyOworCQkJLyogQ2hlY2sgdGhlIGZpcnN0IHBhZ2Ugb25seS4gKi8KKwkJCWZv ciAoc2l6ZV90IGkgPSAwOyBpIDwgUEFHRSAvIHNpemVvZihzaXplX3QpOyBpKyspIHsKKwkJCQlh c3NlcnQocFtpXSA9PSAwKTsKKwkJCX0KKwkJfQorCX0KKworCS8qCisJICogSW5jcmVtZW50IGV4 dGVudF9ncm93X25leHQgaWYgZG9pbmcgc28gd291bGRuJ3QgZXhjZWVkIHRoZSBhbGxvd2VkCisJ ICogcmFuZ2UuCisJICovCisJLyogQWxsIG9wcG9ydHVuaXRpZXMgZm9yIGZhaWx1cmUgYXJlIHBh c3QuICovCisJZXhwX2dyb3dfc2l6ZV9jb21taXQoJnBhYy0+ZXhwX2dyb3csIGV4cF9ncm93X3Nr aXApOworCW1hbGxvY19tdXRleF91bmxvY2sodHNkbiwgJnBhYy0+Z3Jvd19tdHgpOworCisJaWYg KGNvbmZpZ19wcm9mKSB7CisJCS8qIEFkanVzdCBnZHVtcCBzdGF0cyBub3cgdGhhdCBleHRlbnQg aXMgZmluYWwgc2l6ZS4gKi8KKwkJZXh0ZW50X2dkdW1wX2FkZCh0c2RuLCBlZGF0YSk7CisJfQor CWlmICh6ZXJvICYmICFlZGF0YV96ZXJvZWRfZ2V0KGVkYXRhKSkgeworCQllaG9va3NfemVybyh0 c2RuLCBlaG9va3MsIGVkYXRhX2Jhc2VfZ2V0KGVkYXRhKSwKKwkJICAgIGVkYXRhX3NpemVfZ2V0 KGVkYXRhKSk7CisJfQorCXJldHVybiBlZGF0YTsKK2xhYmVsX2VycjoKKwltYWxsb2NfbXV0ZXhf dW5sb2NrKHRzZG4sICZwYWMtPmdyb3dfbXR4KTsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGlj IGVkYXRhX3QgKgorZXh0ZW50X2FsbG9jX3JldGFpbmVkKHRzZG5fdCAqdHNkbiwgcGFjX3QgKnBh YywgZWhvb2tzX3QgKmVob29rcywKKyAgICBlZGF0YV90ICpleHBhbmRfZWRhdGEsIHNpemVfdCBz aXplLCBzaXplX3QgYWxpZ25tZW50LCBib29sIHplcm8sCisgICAgYm9vbCAqY29tbWl0LCBib29s IGd1YXJkZWQpIHsKKwlhc3NlcnQoc2l6ZSAhPSAwKTsKKwlhc3NlcnQoYWxpZ25tZW50ICE9IDAp OworCisJbWFsbG9jX211dGV4X2xvY2sodHNkbiwgJnBhYy0+Z3Jvd19tdHgpOworCisJZWRhdGFf dCAqZWRhdGEgPSBleHRlbnRfcmVjeWNsZSh0c2RuLCBwYWMsIGVob29rcywKKwkgICAgJnBhYy0+ ZWNhY2hlX3JldGFpbmVkLCBleHBhbmRfZWRhdGEsIHNpemUsIGFsaWdubWVudCwgemVybywgY29t bWl0LAorCSAgICAvKiBncm93aW5nX3JldGFpbmVkICovIHRydWUsIGd1YXJkZWQpOworCWlmIChl ZGF0YSAhPSBOVUxMKSB7CisJCW1hbGxvY19tdXRleF91bmxvY2sodHNkbiwgJnBhYy0+Z3Jvd19t dHgpOworCQlpZiAoY29uZmlnX3Byb2YpIHsKKwkJCWV4dGVudF9nZHVtcF9hZGQodHNkbiwgZWRh dGEpOworCQl9CisJfSBlbHNlIGlmIChvcHRfcmV0YWluICYmIGV4cGFuZF9lZGF0YSA9PSBOVUxM ICYmICFndWFyZGVkKSB7CisJCWVkYXRhID0gZXh0ZW50X2dyb3dfcmV0YWluZWQodHNkbiwgcGFj LCBlaG9va3MsIHNpemUsCisJCSAgICBhbGlnbm1lbnQsIHplcm8sIGNvbW1pdCk7CisJCS8qIGV4 dGVudF9ncm93X3JldGFpbmVkKCkgYWx3YXlzIHJlbGVhc2VzIHBhYy0+Z3Jvd19tdHguICovCisJ fSBlbHNlIHsKKwkJbWFsbG9jX211dGV4X3VubG9jayh0c2RuLCAmcGFjLT5ncm93X210eCk7CisJ fQorCW1hbGxvY19tdXRleF9hc3NlcnRfbm90X293bmVyKHRzZG4sICZwYWMtPmdyb3dfbXR4KTsK KworCXJldHVybiBlZGF0YTsKK30KKworc3RhdGljIGJvb2wKK2V4dGVudF9jb2FsZXNjZSh0c2Ru X3QgKnRzZG4sIHBhY190ICpwYWMsIGVob29rc190ICplaG9va3MsIGVjYWNoZV90ICplY2FjaGUs CisgICAgZWRhdGFfdCAqaW5uZXIsIGVkYXRhX3QgKm91dGVyLCBib29sIGZvcndhcmQpIHsKKwll eHRlbnRfYXNzZXJ0X2Nhbl9jb2FsZXNjZShpbm5lciwgb3V0ZXIpOworCWVzZXRfcmVtb3ZlKCZl Y2FjaGUtPmVzZXQsIG91dGVyKTsKKworCWJvb2wgZXJyID0gZXh0ZW50X21lcmdlX2ltcGwodHNk biwgcGFjLCBlaG9va3MsCisJICAgIGZvcndhcmQgPyBpbm5lciA6IG91dGVyLCBmb3J3YXJkID8g b3V0ZXIgOiBpbm5lciwKKwkgICAgLyogaG9sZGluZ19jb3JlX2xvY2tzICovIHRydWUpOworCWlm IChlcnIpIHsKKwkJZXh0ZW50X2RlYWN0aXZhdGVfY2hlY2tfc3RhdGVfbG9ja2VkKHRzZG4sIHBh YywgZWNhY2hlLCBvdXRlciwKKwkJICAgIGV4dGVudF9zdGF0ZV9tZXJnaW5nKTsKKwl9CisKKwly ZXR1cm4gZXJyOworfQorCitzdGF0aWMgZWRhdGFfdCAqCitleHRlbnRfdHJ5X2NvYWxlc2NlX2lt cGwodHNkbl90ICp0c2RuLCBwYWNfdCAqcGFjLCBlaG9va3NfdCAqZWhvb2tzLAorICAgIGVjYWNo ZV90ICplY2FjaGUsIGVkYXRhX3QgKmVkYXRhLCBib29sICpjb2FsZXNjZWQpIHsKKwlhc3NlcnQo IWVkYXRhX2d1YXJkZWRfZ2V0KGVkYXRhKSk7CisJLyoKKwkgKiBXZSBhdm9pZCBjaGVja2luZyAv IGxvY2tpbmcgaW5hY3RpdmUgbmVpZ2hib3JzIGZvciBsYXJnZSBzaXplCisJICogY2xhc3Nlcywg c2luY2UgdGhleSBhcmUgZWFnZXJseSBjb2FsZXNjZWQgb24gZGVhbGxvY2F0aW9uIHdoaWNoIGNh bgorCSAqIGNhdXNlIGxvY2sgY29udGVudGlvbi4KKwkgKi8KKwkvKgorCSAqIENvbnRpbnVlIGF0 dGVtcHRpbmcgdG8gY29hbGVzY2UgdW50aWwgZmFpbHVyZSwgdG8gcHJvdGVjdCBhZ2FpbnN0CisJ ICogcmFjZXMgd2l0aCBvdGhlciB0aHJlYWRzIHRoYXQgYXJlIHRod2FydGVkIGJ5IHRoaXMgb25l LgorCSAqLworCWJvb2wgYWdhaW47CisJZG8geworCQlhZ2FpbiA9IGZhbHNlOworCisJCS8qIFRy eSB0byBjb2FsZXNjZSBmb3J3YXJkLiAqLworCQllZGF0YV90ICpuZXh0ID0gZW1hcF90cnlfYWNx dWlyZV9lZGF0YV9uZWlnaGJvcih0c2RuLCBwYWMtPmVtYXAsCisJCSAgICBlZGF0YSwgRVhURU5U X1BBSV9QQUMsIGVjYWNoZS0+c3RhdGUsIC8qIGZvcndhcmQgKi8gdHJ1ZSk7CisJCWlmIChuZXh0 ICE9IE5VTEwpIHsKKwkJCWlmICghZXh0ZW50X2NvYWxlc2NlKHRzZG4sIHBhYywgZWhvb2tzLCBl Y2FjaGUsIGVkYXRhLAorCQkJICAgIG5leHQsIHRydWUpKSB7CisJCQkJaWYgKGVjYWNoZS0+ZGVs YXlfY29hbGVzY2UpIHsKKwkJCQkJLyogRG8gbWluaW1hbCBjb2FsZXNjaW5nLiAqLworCQkJCQkq Y29hbGVzY2VkID0gdHJ1ZTsKKwkJCQkJcmV0dXJuIGVkYXRhOworCQkJCX0KKwkJCQlhZ2FpbiA9 IHRydWU7CisJCQl9CisJCX0KKworCQkvKiBUcnkgdG8gY29hbGVzY2UgYmFja3dhcmQuICovCisJ CWVkYXRhX3QgKnByZXYgPSBlbWFwX3RyeV9hY3F1aXJlX2VkYXRhX25laWdoYm9yKHRzZG4sIHBh Yy0+ZW1hcCwKKwkJICAgIGVkYXRhLCBFWFRFTlRfUEFJX1BBQywgZWNhY2hlLT5zdGF0ZSwgLyog Zm9yd2FyZCAqLyBmYWxzZSk7CisJCWlmIChwcmV2ICE9IE5VTEwpIHsKKwkJCWlmICghZXh0ZW50 X2NvYWxlc2NlKHRzZG4sIHBhYywgZWhvb2tzLCBlY2FjaGUsIGVkYXRhLAorCQkJICAgIHByZXYs IGZhbHNlKSkgeworCQkJCWVkYXRhID0gcHJldjsKKwkJCQlpZiAoZWNhY2hlLT5kZWxheV9jb2Fs ZXNjZSkgeworCQkJCQkvKiBEbyBtaW5pbWFsIGNvYWxlc2NpbmcuICovCisJCQkJCSpjb2FsZXNj ZWQgPSB0cnVlOworCQkJCQlyZXR1cm4gZWRhdGE7CisJCQkJfQorCQkJCWFnYWluID0gdHJ1ZTsK KwkJCX0KKwkJfQorCX0gd2hpbGUgKGFnYWluKTsKKworCWlmIChlY2FjaGUtPmRlbGF5X2NvYWxl c2NlKSB7CisJCSpjb2FsZXNjZWQgPSBmYWxzZTsKKwl9CisJcmV0dXJuIGVkYXRhOworfQorCitz dGF0aWMgZWRhdGFfdCAqCitleHRlbnRfdHJ5X2NvYWxlc2NlKHRzZG5fdCAqdHNkbiwgcGFjX3Qg KnBhYywgZWhvb2tzX3QgKmVob29rcywKKyAgICBlY2FjaGVfdCAqZWNhY2hlLCBlZGF0YV90ICpl ZGF0YSwgYm9vbCAqY29hbGVzY2VkKSB7CisJcmV0dXJuIGV4dGVudF90cnlfY29hbGVzY2VfaW1w bCh0c2RuLCBwYWMsIGVob29rcywgZWNhY2hlLCBlZGF0YSwKKwkgICAgY29hbGVzY2VkKTsKK30K Kworc3RhdGljIGVkYXRhX3QgKgorZXh0ZW50X3RyeV9jb2FsZXNjZV9sYXJnZSh0c2RuX3QgKnRz ZG4sIHBhY190ICpwYWMsIGVob29rc190ICplaG9va3MsCisgICAgZWNhY2hlX3QgKmVjYWNoZSwg ZWRhdGFfdCAqZWRhdGEsIGJvb2wgKmNvYWxlc2NlZCkgeworCXJldHVybiBleHRlbnRfdHJ5X2Nv YWxlc2NlX2ltcGwodHNkbiwgcGFjLCBlaG9va3MsIGVjYWNoZSwgZWRhdGEsCisJICAgIGNvYWxl c2NlZCk7Cit9CisKKy8qIFB1cmdlIGEgc2luZ2xlIGV4dGVudCB0byByZXRhaW5lZCAvIHVubWFw cGVkIGRpcmVjdGx5LiAqLworc3RhdGljIHZvaWQKK2V4dGVudF9tYXhpbWFsbHlfcHVyZ2UodHNk bl90ICp0c2RuLCBwYWNfdCAqcGFjLCBlaG9va3NfdCAqZWhvb2tzLAorICAgIGVkYXRhX3QgKmVk YXRhKSB7CisJc2l6ZV90IGV4dGVudF9zaXplID0gZWRhdGFfc2l6ZV9nZXQoZWRhdGEpOworCWV4 dGVudF9kYWxsb2Nfd3JhcHBlcih0c2RuLCBwYWMsIGVob29rcywgZWRhdGEpOworCWlmIChjb25m aWdfc3RhdHMpIHsKKwkJLyogVXBkYXRlIHN0YXRzIGFjY29yZGluZ2x5LiAqLworCQlMT0NLRURJ TlRfTVRYX0xPQ0sodHNkbiwgKnBhYy0+c3RhdHNfbXR4KTsKKwkJbG9ja2VkX2luY191NjQodHNk biwKKwkJICAgIExPQ0tFRElOVF9NVFgoKnBhYy0+c3RhdHNfbXR4KSwKKwkJICAgICZwYWMtPnN0 YXRzLT5kZWNheV9kaXJ0eS5ubWFkdmlzZSwgMSk7CisJCWxvY2tlZF9pbmNfdTY0KHRzZG4sCisJ CSAgICBMT0NLRURJTlRfTVRYKCpwYWMtPnN0YXRzX210eCksCisJCSAgICAmcGFjLT5zdGF0cy0+ ZGVjYXlfZGlydHkucHVyZ2VkLAorCQkgICAgZXh0ZW50X3NpemUgPj4gTEdfUEFHRSk7CisJCUxP Q0tFRElOVF9NVFhfVU5MT0NLKHRzZG4sICpwYWMtPnN0YXRzX210eCk7CisJCWF0b21pY19mZXRj aF9zdWJfenUoJnBhYy0+c3RhdHMtPnBhY19tYXBwZWQsIGV4dGVudF9zaXplLAorCQkgICAgQVRP TUlDX1JFTEFYRUQpOworCX0KK30KKworLyoKKyAqIERvZXMgdGhlIG1ldGFkYXRhIG1hbmFnZW1l bnQgcG9ydGlvbnMgb2YgcHV0dGluZyBhbiB1bnVzZWQgZXh0ZW50IGludG8gdGhlCisgKiBnaXZl biBlY2FjaGVfdCAoY29hbGVzY2VzIGFuZCBpbnNlcnRzIGludG8gdGhlIGVzZXQpLgorICovCit2 b2lkCitleHRlbnRfcmVjb3JkKHRzZG5fdCAqdHNkbiwgcGFjX3QgKnBhYywgZWhvb2tzX3QgKmVo b29rcywgZWNhY2hlX3QgKmVjYWNoZSwKKyAgICBlZGF0YV90ICplZGF0YSkgeworCWFzc2VydCgo ZWNhY2hlLT5zdGF0ZSAhPSBleHRlbnRfc3RhdGVfZGlydHkgJiYKKwkgICAgZWNhY2hlLT5zdGF0 ZSAhPSBleHRlbnRfc3RhdGVfbXV6enkpIHx8CisJICAgICFlZGF0YV96ZXJvZWRfZ2V0KGVkYXRh KSk7CisKKwltYWxsb2NfbXV0ZXhfbG9jayh0c2RuLCAmZWNhY2hlLT5tdHgpOworCisJZW1hcF9h c3NlcnRfbWFwcGVkKHRzZG4sIHBhYy0+ZW1hcCwgZWRhdGEpOworCisJaWYgKGVkYXRhX2d1YXJk ZWRfZ2V0KGVkYXRhKSkgeworCQlnb3RvIGxhYmVsX3NraXBfY29hbGVzY2U7CisJfQorCWlmICgh ZWNhY2hlLT5kZWxheV9jb2FsZXNjZSkgeworCQllZGF0YSA9IGV4dGVudF90cnlfY29hbGVzY2Uo dHNkbiwgcGFjLCBlaG9va3MsIGVjYWNoZSwgZWRhdGEsCisJCSAgICBOVUxMKTsKKwl9IGVsc2Ug aWYgKGVkYXRhX3NpemVfZ2V0KGVkYXRhKSA+PSBTQ19MQVJHRV9NSU5DTEFTUykgeworCQlhc3Nl cnQoZWNhY2hlID09ICZwYWMtPmVjYWNoZV9kaXJ0eSk7CisJCS8qIEFsd2F5cyBjb2FsZXNjZSBs YXJnZSBleHRlbnRzIGVhZ2VybHkuICovCisJCWJvb2wgY29hbGVzY2VkOworCQlkbyB7CisJCQlh c3NlcnQoZWRhdGFfc3RhdGVfZ2V0KGVkYXRhKSA9PSBleHRlbnRfc3RhdGVfYWN0aXZlKTsKKwkJ CWVkYXRhID0gZXh0ZW50X3RyeV9jb2FsZXNjZV9sYXJnZSh0c2RuLCBwYWMsIGVob29rcywKKwkJ CSAgICBlY2FjaGUsIGVkYXRhLCAmY29hbGVzY2VkKTsKKwkJfSB3aGlsZSAoY29hbGVzY2VkKTsK KwkJaWYgKGVkYXRhX3NpemVfZ2V0KGVkYXRhKSA+PQorCQkgICAgYXRvbWljX2xvYWRfenUoJnBh Yy0+b3ZlcnNpemVfdGhyZXNob2xkLCBBVE9NSUNfUkVMQVhFRCkKKwkJICAgICYmIGV4dGVudF9t YXlfZm9yY2VfZGVjYXkocGFjKSkgeworCQkJLyogU2hvcnRjdXQgdG8gcHVyZ2UgdGhlIG92ZXJz aXplIGV4dGVudCBlYWdlcmx5LiAqLworCQkJbWFsbG9jX211dGV4X3VubG9jayh0c2RuLCAmZWNh Y2hlLT5tdHgpOworCQkJZXh0ZW50X21heGltYWxseV9wdXJnZSh0c2RuLCBwYWMsIGVob29rcywg ZWRhdGEpOworCQkJcmV0dXJuOworCQl9CisJfQorbGFiZWxfc2tpcF9jb2FsZXNjZToKKwlleHRl bnRfZGVhY3RpdmF0ZV9sb2NrZWQodHNkbiwgcGFjLCBlY2FjaGUsIGVkYXRhKTsKKworCW1hbGxv Y19tdXRleF91bmxvY2sodHNkbiwgJmVjYWNoZS0+bXR4KTsKK30KKwordm9pZAorZXh0ZW50X2Rh bGxvY19nYXAodHNkbl90ICp0c2RuLCBwYWNfdCAqcGFjLCBlaG9va3NfdCAqZWhvb2tzLAorICAg IGVkYXRhX3QgKmVkYXRhKSB7CisJd2l0bmVzc19hc3NlcnRfZGVwdGhfdG9fcmFuayh0c2RuX3dp dG5lc3NfdHNkcF9nZXQodHNkbiksCisJICAgIFdJVE5FU1NfUkFOS19DT1JFLCAwKTsKKworCWlm IChleHRlbnRfcmVnaXN0ZXIodHNkbiwgcGFjLCBlZGF0YSkpIHsKKwkJZWRhdGFfY2FjaGVfcHV0 KHRzZG4sIHBhYy0+ZWRhdGFfY2FjaGUsIGVkYXRhKTsKKwkJcmV0dXJuOworCX0KKwlleHRlbnRf ZGFsbG9jX3dyYXBwZXIodHNkbiwgcGFjLCBlaG9va3MsIGVkYXRhKTsKK30KKworc3RhdGljIGJv b2wKK2V4dGVudF9kYWxsb2Nfd3JhcHBlcl90cnkodHNkbl90ICp0c2RuLCBwYWNfdCAqcGFjLCBl aG9va3NfdCAqZWhvb2tzLAorICAgIGVkYXRhX3QgKmVkYXRhKSB7CisJYm9vbCBlcnI7CisKKwlh c3NlcnQoZWRhdGFfYmFzZV9nZXQoZWRhdGEpICE9IE5VTEwpOworCWFzc2VydChlZGF0YV9zaXpl X2dldChlZGF0YSkgIT0gMCk7CisJd2l0bmVzc19hc3NlcnRfZGVwdGhfdG9fcmFuayh0c2RuX3dp dG5lc3NfdHNkcF9nZXQodHNkbiksCisJICAgIFdJVE5FU1NfUkFOS19DT1JFLCAwKTsKKworCWVk YXRhX2FkZHJfc2V0KGVkYXRhLCBlZGF0YV9iYXNlX2dldChlZGF0YSkpOworCisJLyogVHJ5IHRv IGRlYWxsb2NhdGUuICovCisJZXJyID0gZWhvb2tzX2RhbGxvYyh0c2RuLCBlaG9va3MsIGVkYXRh X2Jhc2VfZ2V0KGVkYXRhKSwKKwkgICAgZWRhdGFfc2l6ZV9nZXQoZWRhdGEpLCBlZGF0YV9jb21t aXR0ZWRfZ2V0KGVkYXRhKSk7CisKKwlpZiAoIWVycikgeworCQllZGF0YV9jYWNoZV9wdXQodHNk biwgcGFjLT5lZGF0YV9jYWNoZSwgZWRhdGEpOworCX0KKworCXJldHVybiBlcnI7Cit9CisKK2Vk YXRhX3QgKgorZXh0ZW50X2FsbG9jX3dyYXBwZXIodHNkbl90ICp0c2RuLCBwYWNfdCAqcGFjLCBl aG9va3NfdCAqZWhvb2tzLAorICAgIHZvaWQgKm5ld19hZGRyLCBzaXplX3Qgc2l6ZSwgc2l6ZV90 IGFsaWdubWVudCwgYm9vbCB6ZXJvLCBib29sICpjb21taXQsCisgICAgYm9vbCBncm93aW5nX3Jl dGFpbmVkKSB7CisJd2l0bmVzc19hc3NlcnRfZGVwdGhfdG9fcmFuayh0c2RuX3dpdG5lc3NfdHNk cF9nZXQodHNkbiksCisJICAgIFdJVE5FU1NfUkFOS19DT1JFLCBncm93aW5nX3JldGFpbmVkID8g MSA6IDApOworCisJZWRhdGFfdCAqZWRhdGEgPSBlZGF0YV9jYWNoZV9nZXQodHNkbiwgcGFjLT5l ZGF0YV9jYWNoZSk7CisJaWYgKGVkYXRhID09IE5VTEwpIHsKKwkJcmV0dXJuIE5VTEw7CisJfQor CXNpemVfdCBwYWxpZ25tZW50ID0gQUxJR05NRU5UX0NFSUxJTkcoYWxpZ25tZW50LCBQQUdFKTsK Kwl2b2lkICphZGRyID0gZWhvb2tzX2FsbG9jKHRzZG4sIGVob29rcywgbmV3X2FkZHIsIHNpemUs IHBhbGlnbm1lbnQsCisJICAgICZ6ZXJvLCBjb21taXQpOworCWlmIChhZGRyID09IE5VTEwpIHsK KwkJZWRhdGFfY2FjaGVfcHV0KHRzZG4sIHBhYy0+ZWRhdGFfY2FjaGUsIGVkYXRhKTsKKwkJcmV0 dXJuIE5VTEw7CisJfQorCWVkYXRhX2luaXQoZWRhdGEsIGVjYWNoZV9pbmRfZ2V0KCZwYWMtPmVj YWNoZV9kaXJ0eSksIGFkZHIsCisJICAgIHNpemUsIC8qIHNsYWIgKi8gZmFsc2UsIFNDX05TSVpF UywgZXh0ZW50X3NuX25leHQocGFjKSwKKwkgICAgZXh0ZW50X3N0YXRlX2FjdGl2ZSwgemVybywg KmNvbW1pdCwgRVhURU5UX1BBSV9QQUMsCisJICAgIG9wdF9yZXRhaW4gPyBFWFRFTlRfSVNfSEVB RCA6IEVYVEVOVF9OT1RfSEVBRCk7CisJLyoKKwkgKiBSZXRhaW5lZCBtZW1vcnkgaXMgbm90IGNv dW50ZWQgdG93YXJkcyBnZHVtcC4gIE9ubHkgaWYgYW4gZXh0ZW50IGlzCisJICogYWxsb2NhdGVk IGFzIGEgc2VwYXJhdGUgbWFwcGluZywgaS5lLiBncm93aW5nX3JldGFpbmVkIGlzIGZhbHNlLCB0 aGVuCisJICogZ2R1bXAgc2hvdWxkIGJlIHVwZGF0ZWQuCisJICovCisJYm9vbCBnZHVtcF9hZGQg PSAhZ3Jvd2luZ19yZXRhaW5lZDsKKwlpZiAoZXh0ZW50X3JlZ2lzdGVyX2ltcGwodHNkbiwgcGFj LCBlZGF0YSwgZ2R1bXBfYWRkKSkgeworCQllZGF0YV9jYWNoZV9wdXQodHNkbiwgcGFjLT5lZGF0 YV9jYWNoZSwgZWRhdGEpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlyZXR1cm4gZWRhdGE7Cit9 CisKK3ZvaWQKK2V4dGVudF9kYWxsb2Nfd3JhcHBlcih0c2RuX3QgKnRzZG4sIHBhY190ICpwYWMs IGVob29rc190ICplaG9va3MsCisgICAgZWRhdGFfdCAqZWRhdGEpIHsKKwlhc3NlcnQoZWRhdGFf cGFpX2dldChlZGF0YSkgPT0gRVhURU5UX1BBSV9QQUMpOworCXdpdG5lc3NfYXNzZXJ0X2RlcHRo X3RvX3JhbmsodHNkbl93aXRuZXNzX3RzZHBfZ2V0KHRzZG4pLAorCSAgICBXSVRORVNTX1JBTktf Q09SRSwgMCk7CisKKwkvKiBBdm9pZCBjYWxsaW5nIHRoZSBkZWZhdWx0IGV4dGVudF9kYWxsb2Mg dW5sZXNzIGhhdmUgdG8uICovCisJaWYgKCFlaG9va3NfZGFsbG9jX3dpbGxfZmFpbChlaG9va3Mp KSB7CisJCS8qIFJlbW92ZSBndWFyZCBwYWdlcyBmb3IgZGFsbG9jIC8gdW5tYXAuICovCisJCWlm IChlZGF0YV9ndWFyZGVkX2dldChlZGF0YSkpIHsKKwkJCWFzc2VydChlaG9va3NfYXJlX2RlZmF1 bHQoZWhvb2tzKSk7CisJCQlzYW5fdW5ndWFyZF9wYWdlc190d29fc2lkZWQodHNkbiwgZWhvb2tz LCBlZGF0YSwKKwkJCSAgICBwYWMtPmVtYXApOworCQl9CisJCS8qCisJCSAqIERlcmVnaXN0ZXIg Zmlyc3QgdG8gYXZvaWQgYSByYWNlIHdpdGggb3RoZXIgYWxsb2NhdGluZworCQkgKiB0aHJlYWRz LCBhbmQgcmVyZWdpc3RlciBpZiBkZWFsbG9jYXRpb24gZmFpbHMuCisJCSAqLworCQlleHRlbnRf ZGVyZWdpc3Rlcih0c2RuLCBwYWMsIGVkYXRhKTsKKwkJaWYgKCFleHRlbnRfZGFsbG9jX3dyYXBw ZXJfdHJ5KHRzZG4sIHBhYywgZWhvb2tzLCBlZGF0YSkpIHsKKwkJCXJldHVybjsKKwkJfQorCQll eHRlbnRfcmVyZWdpc3Rlcih0c2RuLCBwYWMsIGVkYXRhKTsKKwl9CisKKwkvKiBUcnkgdG8gZGVj b21taXQ7IHB1cmdlIGlmIHRoYXQgZmFpbHMuICovCisJYm9vbCB6ZXJvZWQ7CisJaWYgKCFlZGF0 YV9jb21taXR0ZWRfZ2V0KGVkYXRhKSkgeworCQl6ZXJvZWQgPSB0cnVlOworCX0gZWxzZSBpZiAo IWV4dGVudF9kZWNvbW1pdF93cmFwcGVyKHRzZG4sIGVob29rcywgZWRhdGEsIDAsCisJICAgIGVk YXRhX3NpemVfZ2V0KGVkYXRhKSkpIHsKKwkJemVyb2VkID0gdHJ1ZTsKKwl9IGVsc2UgaWYgKCFl aG9va3NfcHVyZ2VfZm9yY2VkKHRzZG4sIGVob29rcywgZWRhdGFfYmFzZV9nZXQoZWRhdGEpLAor CSAgICBlZGF0YV9zaXplX2dldChlZGF0YSksIDAsIGVkYXRhX3NpemVfZ2V0KGVkYXRhKSkpIHsK KwkJemVyb2VkID0gdHJ1ZTsKKwl9IGVsc2UgaWYgKGVkYXRhX3N0YXRlX2dldChlZGF0YSkgPT0g ZXh0ZW50X3N0YXRlX211enp5IHx8CisJICAgICFlaG9va3NfcHVyZ2VfbGF6eSh0c2RuLCBlaG9v a3MsIGVkYXRhX2Jhc2VfZ2V0KGVkYXRhKSwKKwkgICAgZWRhdGFfc2l6ZV9nZXQoZWRhdGEpLCAw LCBlZGF0YV9zaXplX2dldChlZGF0YSkpKSB7CisJCXplcm9lZCA9IGZhbHNlOworCX0gZWxzZSB7 CisJCXplcm9lZCA9IGZhbHNlOworCX0KKwllZGF0YV96ZXJvZWRfc2V0KGVkYXRhLCB6ZXJvZWQp OworCisJaWYgKGNvbmZpZ19wcm9mKSB7CisJCWV4dGVudF9nZHVtcF9zdWIodHNkbiwgZWRhdGEp OworCX0KKworCWV4dGVudF9yZWNvcmQodHNkbiwgcGFjLCBlaG9va3MsICZwYWMtPmVjYWNoZV9y ZXRhaW5lZCwgZWRhdGEpOworfQorCit2b2lkCitleHRlbnRfZGVzdHJveV93cmFwcGVyKHRzZG5f dCAqdHNkbiwgcGFjX3QgKnBhYywgZWhvb2tzX3QgKmVob29rcywKKyAgICBlZGF0YV90ICplZGF0 YSkgeworCWFzc2VydChlZGF0YV9iYXNlX2dldChlZGF0YSkgIT0gTlVMTCk7CisJYXNzZXJ0KGVk YXRhX3NpemVfZ2V0KGVkYXRhKSAhPSAwKTsKKwlleHRlbnRfc3RhdGVfdCBzdGF0ZSA9IGVkYXRh X3N0YXRlX2dldChlZGF0YSk7CisJYXNzZXJ0KHN0YXRlID09IGV4dGVudF9zdGF0ZV9yZXRhaW5l ZCB8fCBzdGF0ZSA9PSBleHRlbnRfc3RhdGVfYWN0aXZlKTsKKwlhc3NlcnQoZW1hcF9lZGF0YV9p c19hY3F1aXJlZCh0c2RuLCBwYWMtPmVtYXAsIGVkYXRhKSk7CisJd2l0bmVzc19hc3NlcnRfZGVw dGhfdG9fcmFuayh0c2RuX3dpdG5lc3NfdHNkcF9nZXQodHNkbiksCisJICAgIFdJVE5FU1NfUkFO S19DT1JFLCAwKTsKKworCWlmIChlZGF0YV9ndWFyZGVkX2dldChlZGF0YSkpIHsKKwkJYXNzZXJ0 KG9wdF9yZXRhaW4pOworCQlzYW5fdW5ndWFyZF9wYWdlc19wcmVfZGVzdHJveSh0c2RuLCBlaG9v a3MsIGVkYXRhLCBwYWMtPmVtYXApOworCX0KKwllZGF0YV9hZGRyX3NldChlZGF0YSwgZWRhdGFf YmFzZV9nZXQoZWRhdGEpKTsKKworCS8qIFRyeSB0byBkZXN0cm95OyBzaWxlbnRseSBmYWlsIG90 aGVyd2lzZS4gKi8KKwllaG9va3NfZGVzdHJveSh0c2RuLCBlaG9va3MsIGVkYXRhX2Jhc2VfZ2V0 KGVkYXRhKSwKKwkgICAgZWRhdGFfc2l6ZV9nZXQoZWRhdGEpLCBlZGF0YV9jb21taXR0ZWRfZ2V0 KGVkYXRhKSk7CisKKwllZGF0YV9jYWNoZV9wdXQodHNkbiwgcGFjLT5lZGF0YV9jYWNoZSwgZWRh dGEpOworfQorCitzdGF0aWMgYm9vbAorZXh0ZW50X2NvbW1pdF9pbXBsKHRzZG5fdCAqdHNkbiwg ZWhvb2tzX3QgKmVob29rcywgZWRhdGFfdCAqZWRhdGEsCisgICAgc2l6ZV90IG9mZnNldCwgc2l6 ZV90IGxlbmd0aCwgYm9vbCBncm93aW5nX3JldGFpbmVkKSB7CisJd2l0bmVzc19hc3NlcnRfZGVw dGhfdG9fcmFuayh0c2RuX3dpdG5lc3NfdHNkcF9nZXQodHNkbiksCisJICAgIFdJVE5FU1NfUkFO S19DT1JFLCBncm93aW5nX3JldGFpbmVkID8gMSA6IDApOworCWJvb2wgZXJyID0gZWhvb2tzX2Nv bW1pdCh0c2RuLCBlaG9va3MsIGVkYXRhX2Jhc2VfZ2V0KGVkYXRhKSwKKwkgICAgZWRhdGFfc2l6 ZV9nZXQoZWRhdGEpLCBvZmZzZXQsIGxlbmd0aCk7CisJZWRhdGFfY29tbWl0dGVkX3NldChlZGF0 YSwgZWRhdGFfY29tbWl0dGVkX2dldChlZGF0YSkgfHwgIWVycik7CisJcmV0dXJuIGVycjsKK30K KworYm9vbAorZXh0ZW50X2NvbW1pdF93cmFwcGVyKHRzZG5fdCAqdHNkbiwgZWhvb2tzX3QgKmVo b29rcywgZWRhdGFfdCAqZWRhdGEsCisgICAgc2l6ZV90IG9mZnNldCwgc2l6ZV90IGxlbmd0aCkg eworCXJldHVybiBleHRlbnRfY29tbWl0X2ltcGwodHNkbiwgZWhvb2tzLCBlZGF0YSwgb2Zmc2V0 LCBsZW5ndGgsCisJICAgIC8qIGdyb3dpbmdfcmV0YWluZWQgKi8gZmFsc2UpOworfQorCitib29s CitleHRlbnRfZGVjb21taXRfd3JhcHBlcih0c2RuX3QgKnRzZG4sIGVob29rc190ICplaG9va3Ms IGVkYXRhX3QgKmVkYXRhLAorICAgIHNpemVfdCBvZmZzZXQsIHNpemVfdCBsZW5ndGgpIHsKKwl3 aXRuZXNzX2Fzc2VydF9kZXB0aF90b19yYW5rKHRzZG5fd2l0bmVzc190c2RwX2dldCh0c2RuKSwK KwkgICAgV0lUTkVTU19SQU5LX0NPUkUsIDApOworCWJvb2wgZXJyID0gZWhvb2tzX2RlY29tbWl0 KHRzZG4sIGVob29rcywgZWRhdGFfYmFzZV9nZXQoZWRhdGEpLAorCSAgICBlZGF0YV9zaXplX2dl dChlZGF0YSksIG9mZnNldCwgbGVuZ3RoKTsKKwllZGF0YV9jb21taXR0ZWRfc2V0KGVkYXRhLCBl ZGF0YV9jb21taXR0ZWRfZ2V0KGVkYXRhKSAmJiBlcnIpOworCXJldHVybiBlcnI7Cit9CisKK3N0 YXRpYyBib29sCitleHRlbnRfcHVyZ2VfbGF6eV9pbXBsKHRzZG5fdCAqdHNkbiwgZWhvb2tzX3Qg KmVob29rcywgZWRhdGFfdCAqZWRhdGEsCisgICAgc2l6ZV90IG9mZnNldCwgc2l6ZV90IGxlbmd0 aCwgYm9vbCBncm93aW5nX3JldGFpbmVkKSB7CisJd2l0bmVzc19hc3NlcnRfZGVwdGhfdG9fcmFu ayh0c2RuX3dpdG5lc3NfdHNkcF9nZXQodHNkbiksCisJICAgIFdJVE5FU1NfUkFOS19DT1JFLCBn cm93aW5nX3JldGFpbmVkID8gMSA6IDApOworCWJvb2wgZXJyID0gZWhvb2tzX3B1cmdlX2xhenko dHNkbiwgZWhvb2tzLCBlZGF0YV9iYXNlX2dldChlZGF0YSksCisJICAgIGVkYXRhX3NpemVfZ2V0 KGVkYXRhKSwgb2Zmc2V0LCBsZW5ndGgpOworCXJldHVybiBlcnI7Cit9CisKK2Jvb2wKK2V4dGVu dF9wdXJnZV9sYXp5X3dyYXBwZXIodHNkbl90ICp0c2RuLCBlaG9va3NfdCAqZWhvb2tzLCBlZGF0 YV90ICplZGF0YSwKKyAgICBzaXplX3Qgb2Zmc2V0LCBzaXplX3QgbGVuZ3RoKSB7CisJcmV0dXJu IGV4dGVudF9wdXJnZV9sYXp5X2ltcGwodHNkbiwgZWhvb2tzLCBlZGF0YSwgb2Zmc2V0LAorCSAg ICBsZW5ndGgsIGZhbHNlKTsKK30KKworc3RhdGljIGJvb2wKK2V4dGVudF9wdXJnZV9mb3JjZWRf aW1wbCh0c2RuX3QgKnRzZG4sIGVob29rc190ICplaG9va3MsIGVkYXRhX3QgKmVkYXRhLAorICAg IHNpemVfdCBvZmZzZXQsIHNpemVfdCBsZW5ndGgsIGJvb2wgZ3Jvd2luZ19yZXRhaW5lZCkgewor CXdpdG5lc3NfYXNzZXJ0X2RlcHRoX3RvX3JhbmsodHNkbl93aXRuZXNzX3RzZHBfZ2V0KHRzZG4p LAorCSAgICBXSVRORVNTX1JBTktfQ09SRSwgZ3Jvd2luZ19yZXRhaW5lZCA/IDEgOiAwKTsKKwli b29sIGVyciA9IGVob29rc19wdXJnZV9mb3JjZWQodHNkbiwgZWhvb2tzLCBlZGF0YV9iYXNlX2dl dChlZGF0YSksCisJICAgIGVkYXRhX3NpemVfZ2V0KGVkYXRhKSwgb2Zmc2V0LCBsZW5ndGgpOwor CXJldHVybiBlcnI7Cit9CisKK2Jvb2wKK2V4dGVudF9wdXJnZV9mb3JjZWRfd3JhcHBlcih0c2Ru X3QgKnRzZG4sIGVob29rc190ICplaG9va3MsIGVkYXRhX3QgKmVkYXRhLAorICAgIHNpemVfdCBv ZmZzZXQsIHNpemVfdCBsZW5ndGgpIHsKKwlyZXR1cm4gZXh0ZW50X3B1cmdlX2ZvcmNlZF9pbXBs KHRzZG4sIGVob29rcywgZWRhdGEsIG9mZnNldCwgbGVuZ3RoLAorCSAgICBmYWxzZSk7Cit9CisK Ky8qCisgKiBBY2NlcHRzIHRoZSBleHRlbnQgdG8gc3BsaXQsIGFuZCB0aGUgY2hhcmFjdGVyaXN0 aWNzIG9mIGVhY2ggc2lkZSBvZiB0aGUKKyAqIHNwbGl0LiAgVGhlICdhJyBwYXJhbWV0ZXJzIGdv IHdpdGggdGhlICdsZWFkJyBvZiB0aGUgcmVzdWx0aW5nIHBhaXIgb2YKKyAqIGV4dGVudHMgKHRo ZSBsb3dlciBhZGRyZXNzZWQgcG9ydGlvbiBvZiB0aGUgc3BsaXQpLCBhbmQgdGhlICdiJyBwYXJh bWV0ZXJzIGdvCisgKiB3aXRoIHRoZSB0cmFpbCAodGhlIGhpZ2hlciBhZGRyZXNzZWQgcG9ydGlv bikuICBUaGlzIG1ha2VzICdleHRlbnQnIHRoZSBsZWFkLAorICogYW5kIHJldHVybnMgdGhlIHRy YWlsIChleGNlcHQgaW4gY2FzZSBvZiBlcnJvcikuCisgKi8KK3N0YXRpYyBlZGF0YV90ICoKK2V4 dGVudF9zcGxpdF9pbXBsKHRzZG5fdCAqdHNkbiwgcGFjX3QgKnBhYywgZWhvb2tzX3QgKmVob29r cywKKyAgICBlZGF0YV90ICplZGF0YSwgc2l6ZV90IHNpemVfYSwgc2l6ZV90IHNpemVfYiwgYm9v bCBob2xkaW5nX2NvcmVfbG9ja3MpIHsKKwlhc3NlcnQoZWRhdGFfc2l6ZV9nZXQoZWRhdGEpID09 IHNpemVfYSArIHNpemVfYik7CisJLyogT25seSB0aGUgc2hyaW5rIHBhdGggbWF5IHNwbGl0IHcv byBob2xkaW5nIGNvcmUgbG9ja3MuICovCisJaWYgKGhvbGRpbmdfY29yZV9sb2NrcykgeworCQl3 aXRuZXNzX2Fzc2VydF9wb3NpdGl2ZV9kZXB0aF90b19yYW5rKAorCQkgICAgdHNkbl93aXRuZXNz X3RzZHBfZ2V0KHRzZG4pLCBXSVRORVNTX1JBTktfQ09SRSk7CisJfSBlbHNlIHsKKwkJd2l0bmVz c19hc3NlcnRfZGVwdGhfdG9fcmFuayh0c2RuX3dpdG5lc3NfdHNkcF9nZXQodHNkbiksCisJCSAg ICBXSVRORVNTX1JBTktfQ09SRSwgMCk7CisJfQorCisJaWYgKGVob29rc19zcGxpdF93aWxsX2Zh aWwoZWhvb2tzKSkgeworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwllZGF0YV90ICp0cmFpbCA9IGVk YXRhX2NhY2hlX2dldCh0c2RuLCBwYWMtPmVkYXRhX2NhY2hlKTsKKwlpZiAodHJhaWwgPT0gTlVM TCkgeworCQlnb3RvIGxhYmVsX2Vycm9yX2E7CisJfQorCisJZWRhdGFfaW5pdCh0cmFpbCwgZWRh dGFfYXJlbmFfaW5kX2dldChlZGF0YSksCisJICAgICh2b2lkICopKCh1aW50cHRyX3QpZWRhdGFf YmFzZV9nZXQoZWRhdGEpICsgc2l6ZV9hKSwgc2l6ZV9iLAorCSAgICAvKiBzbGFiICovIGZhbHNl LCBTQ19OU0laRVMsIGVkYXRhX3NuX2dldChlZGF0YSksCisJICAgIGVkYXRhX3N0YXRlX2dldChl ZGF0YSksIGVkYXRhX3plcm9lZF9nZXQoZWRhdGEpLAorCSAgICBlZGF0YV9jb21taXR0ZWRfZ2V0 KGVkYXRhKSwgRVhURU5UX1BBSV9QQUMsIEVYVEVOVF9OT1RfSEVBRCk7CisJZW1hcF9wcmVwYXJl X3QgcHJlcGFyZTsKKwlib29sIGVyciA9IGVtYXBfc3BsaXRfcHJlcGFyZSh0c2RuLCBwYWMtPmVt YXAsICZwcmVwYXJlLCBlZGF0YSwKKwkgICAgc2l6ZV9hLCB0cmFpbCwgc2l6ZV9iKTsKKwlpZiAo ZXJyKSB7CisJCWdvdG8gbGFiZWxfZXJyb3JfYjsKKwl9CisKKwkvKgorCSAqIE5vIG5lZWQgdG8g YWNxdWlyZSB0cmFpbCBvciBlZGF0YSwgYmVjYXVzZTogMSkgdHJhaWwgd2FzIG5ldyAoanVzdAor CSAqIGFsbG9jYXRlZCk7IGFuZCAyKSBlZGF0YSBpcyBlaXRoZXIgYW4gYWN0aXZlIGFsbG9jYXRp b24gKHRoZSBzaHJpbmsKKwkgKiBwYXRoKSwgb3IgaW4gYW4gYWNxdWlyZWQgc3RhdGUgKGV4dHJh Y3RlZCBmcm9tIHRoZSBlY2FjaGUgb24gdGhlCisJICogZXh0ZW50X3JlY3ljbGVfc3BsaXQgcGF0 aCkuCisJICovCisJYXNzZXJ0KGVtYXBfZWRhdGFfaXNfYWNxdWlyZWQodHNkbiwgcGFjLT5lbWFw LCBlZGF0YSkpOworCWFzc2VydChlbWFwX2VkYXRhX2lzX2FjcXVpcmVkKHRzZG4sIHBhYy0+ZW1h cCwgdHJhaWwpKTsKKworCWVyciA9IGVob29rc19zcGxpdCh0c2RuLCBlaG9va3MsIGVkYXRhX2Jh c2VfZ2V0KGVkYXRhKSwgc2l6ZV9hICsgc2l6ZV9iLAorCSAgICBzaXplX2EsIHNpemVfYiwgZWRh dGFfY29tbWl0dGVkX2dldChlZGF0YSkpOworCisJaWYgKGVycikgeworCQlnb3RvIGxhYmVsX2Vy cm9yX2I7CisJfQorCisJZWRhdGFfc2l6ZV9zZXQoZWRhdGEsIHNpemVfYSk7CisJZW1hcF9zcGxp dF9jb21taXQodHNkbiwgcGFjLT5lbWFwLCAmcHJlcGFyZSwgZWRhdGEsIHNpemVfYSwgdHJhaWws CisJICAgIHNpemVfYik7CisKKwlyZXR1cm4gdHJhaWw7CitsYWJlbF9lcnJvcl9iOgorCWVkYXRh X2NhY2hlX3B1dCh0c2RuLCBwYWMtPmVkYXRhX2NhY2hlLCB0cmFpbCk7CitsYWJlbF9lcnJvcl9h OgorCXJldHVybiBOVUxMOworfQorCitlZGF0YV90ICoKK2V4dGVudF9zcGxpdF93cmFwcGVyKHRz ZG5fdCAqdHNkbiwgcGFjX3QgKnBhYywgZWhvb2tzX3QgKmVob29rcywgZWRhdGFfdCAqZWRhdGEs CisgICAgc2l6ZV90IHNpemVfYSwgc2l6ZV90IHNpemVfYiwgYm9vbCBob2xkaW5nX2NvcmVfbG9j a3MpIHsKKwlyZXR1cm4gZXh0ZW50X3NwbGl0X2ltcGwodHNkbiwgcGFjLCBlaG9va3MsIGVkYXRh LCBzaXplX2EsIHNpemVfYiwKKwkgICAgaG9sZGluZ19jb3JlX2xvY2tzKTsKK30KKworc3RhdGlj IGJvb2wKK2V4dGVudF9tZXJnZV9pbXBsKHRzZG5fdCAqdHNkbiwgcGFjX3QgKnBhYywgZWhvb2tz X3QgKmVob29rcywgZWRhdGFfdCAqYSwKKyAgICBlZGF0YV90ICpiLCBib29sIGhvbGRpbmdfY29y ZV9sb2NrcykgeworCS8qIE9ubHkgdGhlIGV4cGFuZGluZyBwYXRoIG1heSBtZXJnZSB3L28gaG9s ZGluZyBlY2FjaGUgbG9ja3MuICovCisJaWYgKGhvbGRpbmdfY29yZV9sb2NrcykgeworCQl3aXRu ZXNzX2Fzc2VydF9wb3NpdGl2ZV9kZXB0aF90b19yYW5rKAorCQkgICAgdHNkbl93aXRuZXNzX3Rz ZHBfZ2V0KHRzZG4pLCBXSVRORVNTX1JBTktfQ09SRSk7CisJfSBlbHNlIHsKKwkJd2l0bmVzc19h c3NlcnRfZGVwdGhfdG9fcmFuayh0c2RuX3dpdG5lc3NfdHNkcF9nZXQodHNkbiksCisJCSAgICBX SVRORVNTX1JBTktfQ09SRSwgMCk7CisJfQorCisJYXNzZXJ0KGVkYXRhX2Jhc2VfZ2V0KGEpIDwg ZWRhdGFfYmFzZV9nZXQoYikpOworCWFzc2VydChlZGF0YV9hcmVuYV9pbmRfZ2V0KGEpID09IGVk YXRhX2FyZW5hX2luZF9nZXQoYikpOworCWFzc2VydChlZGF0YV9hcmVuYV9pbmRfZ2V0KGEpID09 IGVob29rc19pbmRfZ2V0KGVob29rcykpOworCWVtYXBfYXNzZXJ0X21hcHBlZCh0c2RuLCBwYWMt PmVtYXAsIGEpOworCWVtYXBfYXNzZXJ0X21hcHBlZCh0c2RuLCBwYWMtPmVtYXAsIGIpOworCisJ Ym9vbCBlcnIgPSBlaG9va3NfbWVyZ2UodHNkbiwgZWhvb2tzLCBlZGF0YV9iYXNlX2dldChhKSwK KwkgICAgZWRhdGFfc2l6ZV9nZXQoYSksIGVkYXRhX2Jhc2VfZ2V0KGIpLCBlZGF0YV9zaXplX2dl dChiKSwKKwkgICAgZWRhdGFfY29tbWl0dGVkX2dldChhKSk7CisKKwlpZiAoZXJyKSB7CisJCXJl dHVybiB0cnVlOworCX0KKworCS8qCisJICogVGhlIHJ0cmVlIHdyaXRlcyBtdXN0IGhhcHBlbiB3 aGlsZSBhbGwgdGhlIHJlbGV2YW50IGVsZW1lbnRzIGFyZQorCSAqIG93bmVkLCBzbyB0aGUgZm9s bG93aW5nIGNvZGUgdXNlcyBkZWNvbXBvc2VkIGhlbHBlciBmdW5jdGlvbnMgcmF0aGVyCisJICog dGhhbiBleHRlbnRfeyxkZX1yZWdpc3RlcigpIHRvIGRvIHRoaW5ncyBpbiB0aGUgcmlnaHQgb3Jk ZXIuCisJICovCisJZW1hcF9wcmVwYXJlX3QgcHJlcGFyZTsKKwllbWFwX21lcmdlX3ByZXBhcmUo dHNkbiwgcGFjLT5lbWFwLCAmcHJlcGFyZSwgYSwgYik7CisKKwlhc3NlcnQoZWRhdGFfc3RhdGVf Z2V0KGEpID09IGV4dGVudF9zdGF0ZV9hY3RpdmUgfHwKKwkgICAgZWRhdGFfc3RhdGVfZ2V0KGEp ID09IGV4dGVudF9zdGF0ZV9tZXJnaW5nKTsKKwllZGF0YV9zdGF0ZV9zZXQoYSwgZXh0ZW50X3N0 YXRlX2FjdGl2ZSk7CisJZWRhdGFfc2l6ZV9zZXQoYSwgZWRhdGFfc2l6ZV9nZXQoYSkgKyBlZGF0 YV9zaXplX2dldChiKSk7CisJZWRhdGFfc25fc2V0KGEsIChlZGF0YV9zbl9nZXQoYSkgPCBlZGF0 YV9zbl9nZXQoYikpID8KKwkgICAgZWRhdGFfc25fZ2V0KGEpIDogZWRhdGFfc25fZ2V0KGIpKTsK KwllZGF0YV96ZXJvZWRfc2V0KGEsIGVkYXRhX3plcm9lZF9nZXQoYSkgJiYgZWRhdGFfemVyb2Vk X2dldChiKSk7CisKKwllbWFwX21lcmdlX2NvbW1pdCh0c2RuLCBwYWMtPmVtYXAsICZwcmVwYXJl LCBhLCBiKTsKKworCWVkYXRhX2NhY2hlX3B1dCh0c2RuLCBwYWMtPmVkYXRhX2NhY2hlLCBiKTsK KworCXJldHVybiBmYWxzZTsKK30KKworYm9vbAorZXh0ZW50X21lcmdlX3dyYXBwZXIodHNkbl90 ICp0c2RuLCBwYWNfdCAqcGFjLCBlaG9va3NfdCAqZWhvb2tzLAorICAgIGVkYXRhX3QgKmEsIGVk YXRhX3QgKmIpIHsKKwlyZXR1cm4gZXh0ZW50X21lcmdlX2ltcGwodHNkbiwgcGFjLCBlaG9va3Ms IGEsIGIsCisJICAgIC8qIGhvbGRpbmdfY29yZV9sb2NrcyAqLyBmYWxzZSk7Cit9CisKK2Jvb2wK K2V4dGVudF9jb21taXRfemVybyh0c2RuX3QgKnRzZG4sIGVob29rc190ICplaG9va3MsIGVkYXRh X3QgKmVkYXRhLAorICAgIGJvb2wgY29tbWl0LCBib29sIHplcm8sIGJvb2wgZ3Jvd2luZ19yZXRh aW5lZCkgeworCXdpdG5lc3NfYXNzZXJ0X2RlcHRoX3RvX3JhbmsodHNkbl93aXRuZXNzX3RzZHBf Z2V0KHRzZG4pLAorCSAgICBXSVRORVNTX1JBTktfQ09SRSwgZ3Jvd2luZ19yZXRhaW5lZCA/IDEg OiAwKTsKKworCWlmIChjb21taXQgJiYgIWVkYXRhX2NvbW1pdHRlZF9nZXQoZWRhdGEpKSB7CisJ CWlmIChleHRlbnRfY29tbWl0X2ltcGwodHNkbiwgZWhvb2tzLCBlZGF0YSwgMCwKKwkJICAgIGVk YXRhX3NpemVfZ2V0KGVkYXRhKSwgZ3Jvd2luZ19yZXRhaW5lZCkpIHsKKwkJCXJldHVybiB0cnVl OworCQl9CisJfQorCWlmICh6ZXJvICYmICFlZGF0YV96ZXJvZWRfZ2V0KGVkYXRhKSkgeworCQl2 b2lkICphZGRyID0gZWRhdGFfYmFzZV9nZXQoZWRhdGEpOworCQlzaXplX3Qgc2l6ZSA9IGVkYXRh X3NpemVfZ2V0KGVkYXRhKTsKKwkJZWhvb2tzX3plcm8odHNkbiwgZWhvb2tzLCBhZGRyLCBzaXpl KTsKKwl9CisJcmV0dXJuIGZhbHNlOworfQorCitib29sCitleHRlbnRfYm9vdCh2b2lkKSB7CisJ YXNzZXJ0KHNpemVvZihzbGFiX2RhdGFfdCkgPj0gc2l6ZW9mKGVfcHJvZl9pbmZvX3QpKTsKKwor CWlmIChoYXZlX2RzcykgeworCQlleHRlbnRfZHNzX2Jvb3QoKTsKKwl9CisKKwlyZXR1cm4gZmFs c2U7Cit9CgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4z LjAvc3JjL2V4dGVudF9kc3MuYyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUu My4wL3NyYy9leHRlbnRfZHNzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u OWEzNWJhYwotLS0gL2Rldi9udWxsCisrKyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFs bG9jLTUuMy4wL3NyYy9leHRlbnRfZHNzLmMKQEAgLTAsMCArMSwyNzcgQEAKKyNpbmNsdWRlICJq ZW1hbGxvYy9pbnRlcm5hbC9qZW1hbGxvY19wcmVhbWJsZS5oIgorI2luY2x1ZGUgImplbWFsbG9j L2ludGVybmFsL2plbWFsbG9jX2ludGVybmFsX2luY2x1ZGVzLmgiCisKKyNpbmNsdWRlICJqZW1h bGxvYy9pbnRlcm5hbC9hc3NlcnQuaCIKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9leHRl bnRfZHNzLmgiCisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvc3Bpbi5oIgorCisvKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqLworLyogRGF0YS4gKi8KKworY29uc3QgY2hhcgkqb3B0X2RzcyA9IERT U19ERUZBVUxUOworCitjb25zdCBjaGFyCSpkc3NfcHJlY19uYW1lc1tdID0geworCSJkaXNhYmxl ZCIsCisJInByaW1hcnkiLAorCSJzZWNvbmRhcnkiLAorCSJOL0EiCit9OworCisvKgorICogQ3Vy cmVudCBkc3MgcHJlY2VkZW5jZSBkZWZhdWx0LCB1c2VkIHdoZW4gY3JlYXRpbmcgbmV3IGFyZW5h cy4gIE5COiBUaGlzIGlzCisgKiBzdG9yZWQgYXMgdW5zaWduZWQgcmF0aGVyIHRoYW4gZHNzX3By ZWNfdCBiZWNhdXNlIGluIHByaW5jaXBsZSB0aGVyZSdzIG5vCisgKiBndWFyYW50ZWUgdGhhdCBz aXplb2YoZHNzX3ByZWNfdCkgaXMgdGhlIHNhbWUgYXMgc2l6ZW9mKHVuc2lnbmVkKSwgYW5kIHdl IHVzZQorICogYXRvbWljIG9wZXJhdGlvbnMgdG8gc3luY2hyb25pemUgdGhlIHNldHRpbmcuCisg Ki8KK3N0YXRpYyBhdG9taWNfdV90CWRzc19wcmVjX2RlZmF1bHQgPSBBVE9NSUNfSU5JVCgKKyAg ICAodW5zaWduZWQpRFNTX1BSRUNfREVGQVVMVCk7CisKKy8qIEJhc2UgYWRkcmVzcyBvZiB0aGUg RFNTLiAqLworc3RhdGljIHZvaWQJCSpkc3NfYmFzZTsKKy8qIEF0b21pYyBib29sZWFuIGluZGlj YXRpbmcgd2hldGhlciBhIHRocmVhZCBpcyBjdXJyZW50bHkgZXh0ZW5kaW5nIERTUy4gKi8KK3N0 YXRpYyBhdG9taWNfYl90CWRzc19leHRlbmRpbmc7CisvKiBBdG9taWMgYm9vbGVhbiBpbmRpY2F0 aW5nIHdoZXRoZXIgdGhlIERTUyBpcyBleGhhdXN0ZWQuICovCitzdGF0aWMgYXRvbWljX2JfdAlk c3NfZXhoYXVzdGVkOworLyogQXRvbWljIGN1cnJlbnQgdXBwZXIgbGltaXQgb24gRFNTIGFkZHJl c3Nlcy4gKi8KK3N0YXRpYyBhdG9taWNfcF90CWRzc19tYXg7CisKKy8qKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKiovCisKK3N0YXRpYyB2b2lkICoKK2V4dGVudF9kc3Nfc2JyayhpbnRwdHJfdCBpbmNyZW1l bnQpIHsKKyNpZmRlZiBKRU1BTExPQ19EU1MKKwlyZXR1cm4gc2JyayhpbmNyZW1lbnQpOworI2Vs c2UKKwlub3RfaW1wbGVtZW50ZWQoKTsKKwlyZXR1cm4gTlVMTDsKKyNlbmRpZgorfQorCitkc3Nf cHJlY190CitleHRlbnRfZHNzX3ByZWNfZ2V0KHZvaWQpIHsKKwlkc3NfcHJlY190IHJldDsKKwor CWlmICghaGF2ZV9kc3MpIHsKKwkJcmV0dXJuIGRzc19wcmVjX2Rpc2FibGVkOworCX0KKwlyZXQg PSAoZHNzX3ByZWNfdClhdG9taWNfbG9hZF91KCZkc3NfcHJlY19kZWZhdWx0LCBBVE9NSUNfQUNR VUlSRSk7CisJcmV0dXJuIHJldDsKK30KKworYm9vbAorZXh0ZW50X2Rzc19wcmVjX3NldChkc3Nf cHJlY190IGRzc19wcmVjKSB7CisJaWYgKCFoYXZlX2RzcykgeworCQlyZXR1cm4gKGRzc19wcmVj ICE9IGRzc19wcmVjX2Rpc2FibGVkKTsKKwl9CisJYXRvbWljX3N0b3JlX3UoJmRzc19wcmVjX2Rl ZmF1bHQsICh1bnNpZ25lZClkc3NfcHJlYywgQVRPTUlDX1JFTEVBU0UpOworCXJldHVybiBmYWxz ZTsKK30KKworc3RhdGljIHZvaWQKK2V4dGVudF9kc3NfZXh0ZW5kaW5nX3N0YXJ0KHZvaWQpIHsK KwlzcGluX3Qgc3Bpbm5lciA9IFNQSU5fSU5JVElBTElaRVI7CisJd2hpbGUgKHRydWUpIHsKKwkJ Ym9vbCBleHBlY3RlZCA9IGZhbHNlOworCQlpZiAoYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfd2Vh a19iKCZkc3NfZXh0ZW5kaW5nLCAmZXhwZWN0ZWQsCisJCSAgICB0cnVlLCBBVE9NSUNfQUNRX1JF TCwgQVRPTUlDX1JFTEFYRUQpKSB7CisJCQlicmVhazsKKwkJfQorCQlzcGluX2FkYXB0aXZlKCZz cGlubmVyKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitleHRlbnRfZHNzX2V4dGVuZGluZ19maW5p c2godm9pZCkgeworCWFzc2VydChhdG9taWNfbG9hZF9iKCZkc3NfZXh0ZW5kaW5nLCBBVE9NSUNf UkVMQVhFRCkpOworCisJYXRvbWljX3N0b3JlX2IoJmRzc19leHRlbmRpbmcsIGZhbHNlLCBBVE9N SUNfUkVMRUFTRSk7Cit9CisKK3N0YXRpYyB2b2lkICoKK2V4dGVudF9kc3NfbWF4X3VwZGF0ZSh2 b2lkICpuZXdfYWRkcikgeworCS8qCisJICogR2V0IHRoZSBjdXJyZW50IGVuZCBvZiB0aGUgRFNT IGFzIG1heF9jdXIgYW5kIGFzc3VyZSB0aGF0IGRzc19tYXggaXMKKwkgKiB1cCB0byBkYXRlLgor CSAqLworCXZvaWQgKm1heF9jdXIgPSBleHRlbnRfZHNzX3NicmsoMCk7CisJaWYgKG1heF9jdXIg PT0gKHZvaWQgKiktMSkgeworCQlyZXR1cm4gTlVMTDsKKwl9CisJYXRvbWljX3N0b3JlX3AoJmRz c19tYXgsIG1heF9jdXIsIEFUT01JQ19SRUxFQVNFKTsKKwkvKiBGaXhlZCBuZXdfYWRkciBjYW4g b25seSBiZSBzdXBwb3J0ZWQgaWYgaXQgaXMgYXQgdGhlIGVkZ2Ugb2YgRFNTLiAqLworCWlmIChu ZXdfYWRkciAhPSBOVUxMICYmIG1heF9jdXIgIT0gbmV3X2FkZHIpIHsKKwkJcmV0dXJuIE5VTEw7 CisJfQorCXJldHVybiBtYXhfY3VyOworfQorCit2b2lkICoKK2V4dGVudF9hbGxvY19kc3ModHNk bl90ICp0c2RuLCBhcmVuYV90ICphcmVuYSwgdm9pZCAqbmV3X2FkZHIsIHNpemVfdCBzaXplLAor ICAgIHNpemVfdCBhbGlnbm1lbnQsIGJvb2wgKnplcm8sIGJvb2wgKmNvbW1pdCkgeworCWVkYXRh X3QgKmdhcDsKKworCWNhc3NlcnQoaGF2ZV9kc3MpOworCWFzc2VydChzaXplID4gMCk7CisJYXNz ZXJ0KGFsaWdubWVudCA9PSBBTElHTk1FTlRfQ0VJTElORyhhbGlnbm1lbnQsIFBBR0UpKTsKKwor CS8qCisJICogc2JyaygpIHVzZXMgYSBzaWduZWQgaW5jcmVtZW50IGFyZ3VtZW50LCBzbyB0YWtl IGNhcmUgbm90IHRvCisJICogaW50ZXJwcmV0IGEgbGFyZ2UgYWxsb2NhdGlvbiByZXF1ZXN0IGFz IGEgbmVnYXRpdmUgaW5jcmVtZW50LgorCSAqLworCWlmICgoaW50cHRyX3Qpc2l6ZSA8IDApIHsK KwkJcmV0dXJuIE5VTEw7CisJfQorCisJZ2FwID0gZWRhdGFfY2FjaGVfZ2V0KHRzZG4sICZhcmVu YS0+cGFfc2hhcmQuZWRhdGFfY2FjaGUpOworCWlmIChnYXAgPT0gTlVMTCkgeworCQlyZXR1cm4g TlVMTDsKKwl9CisKKwlleHRlbnRfZHNzX2V4dGVuZGluZ19zdGFydCgpOworCWlmICghYXRvbWlj X2xvYWRfYigmZHNzX2V4aGF1c3RlZCwgQVRPTUlDX0FDUVVJUkUpKSB7CisJCS8qCisJCSAqIFRo ZSBsb29wIGlzIG5lY2Vzc2FyeSB0byByZWNvdmVyIGZyb20gcmFjZXMgd2l0aCBvdGhlcgorCQkg KiB0aHJlYWRzIHRoYXQgYXJlIHVzaW5nIHRoZSBEU1MgZm9yIHNvbWV0aGluZyBvdGhlciB0aGFu CisJCSAqIG1hbGxvYy4KKwkJICovCisJCXdoaWxlICh0cnVlKSB7CisJCQl2b2lkICptYXhfY3Vy ID0gZXh0ZW50X2Rzc19tYXhfdXBkYXRlKG5ld19hZGRyKTsKKwkJCWlmIChtYXhfY3VyID09IE5V TEwpIHsKKwkJCQlnb3RvIGxhYmVsX29vbTsKKwkJCX0KKworCQkJYm9vbCBoZWFkX3N0YXRlID0g b3B0X3JldGFpbiA/IEVYVEVOVF9JU19IRUFEIDoKKwkJCSAgICBFWFRFTlRfTk9UX0hFQUQ7CisJ CQkvKgorCQkJICogQ29tcHV0ZSBob3cgbXVjaCBwYWdlLWFsaWduZWQgZ2FwIHNwYWNlIChpZiBh bnkpIGlzCisJCQkgKiBuZWNlc3NhcnkgdG8gc2F0aXNmeSBhbGlnbm1lbnQuICBUaGlzIHNwYWNl IGNhbiBiZQorCQkJICogcmVjeWNsZWQgZm9yIGxhdGVyIHVzZS4KKwkJCSAqLworCQkJdm9pZCAq Z2FwX2FkZHJfcGFnZSA9ICh2b2lkICopKFBBR0VfQ0VJTElORygKKwkJCSAgICAodWludHB0cl90 KW1heF9jdXIpKTsKKwkJCXZvaWQgKnJldCA9ICh2b2lkICopQUxJR05NRU5UX0NFSUxJTkcoCisJ CQkgICAgKHVpbnRwdHJfdClnYXBfYWRkcl9wYWdlLCBhbGlnbm1lbnQpOworCQkJc2l6ZV90IGdh cF9zaXplX3BhZ2UgPSAodWludHB0cl90KXJldCAtCisJCQkgICAgKHVpbnRwdHJfdClnYXBfYWRk cl9wYWdlOworCQkJaWYgKGdhcF9zaXplX3BhZ2UgIT0gMCkgeworCQkJCWVkYXRhX2luaXQoZ2Fw LCBhcmVuYV9pbmRfZ2V0KGFyZW5hKSwKKwkJCQkgICAgZ2FwX2FkZHJfcGFnZSwgZ2FwX3NpemVf cGFnZSwgZmFsc2UsCisJCQkJICAgIFNDX05TSVpFUywgZXh0ZW50X3NuX25leHQoCisJCQkJCSZh cmVuYS0+cGFfc2hhcmQucGFjKSwKKwkJCQkgICAgZXh0ZW50X3N0YXRlX2FjdGl2ZSwgZmFsc2Us IHRydWUsCisJCQkJICAgIEVYVEVOVF9QQUlfUEFDLCBoZWFkX3N0YXRlKTsKKwkJCX0KKwkJCS8q CisJCQkgKiBDb21wdXRlIHRoZSBhZGRyZXNzIGp1c3QgcGFzdCB0aGUgZW5kIG9mIHRoZSBkZXNp cmVkCisJCQkgKiBhbGxvY2F0aW9uIHNwYWNlLgorCQkJICovCisJCQl2b2lkICpkc3NfbmV4dCA9 ICh2b2lkICopKCh1aW50cHRyX3QpcmV0ICsgc2l6ZSk7CisJCQlpZiAoKHVpbnRwdHJfdClyZXQg PCAodWludHB0cl90KW1heF9jdXIgfHwKKwkJCSAgICAodWludHB0cl90KWRzc19uZXh0IDwgKHVp bnRwdHJfdCltYXhfY3VyKSB7CisJCQkJZ290byBsYWJlbF9vb207IC8qIFdyYXAtYXJvdW5kLiAq LworCQkJfQorCQkJLyogQ29tcHV0ZSB0aGUgaW5jcmVtZW50LCBpbmNsdWRpbmcgc3VicGFnZSBi eXRlcy4gKi8KKwkJCXZvaWQgKmdhcF9hZGRyX3N1YnBhZ2UgPSBtYXhfY3VyOworCQkJc2l6ZV90 IGdhcF9zaXplX3N1YnBhZ2UgPSAodWludHB0cl90KXJldCAtCisJCQkgICAgKHVpbnRwdHJfdCln YXBfYWRkcl9zdWJwYWdlOworCQkJaW50cHRyX3QgaW5jciA9IGdhcF9zaXplX3N1YnBhZ2UgKyBz aXplOworCisJCQlhc3NlcnQoKHVpbnRwdHJfdCltYXhfY3VyICsgaW5jciA9PSAodWludHB0cl90 KXJldCArCisJCQkgICAgc2l6ZSk7CisKKwkJCS8qIFRyeSB0byBhbGxvY2F0ZS4gKi8KKwkJCXZv aWQgKmRzc19wcmV2ID0gZXh0ZW50X2Rzc19zYnJrKGluY3IpOworCQkJaWYgKGRzc19wcmV2ID09 IG1heF9jdXIpIHsKKwkJCQkvKiBTdWNjZXNzLiAqLworCQkJCWF0b21pY19zdG9yZV9wKCZkc3Nf bWF4LCBkc3NfbmV4dCwKKwkJCQkgICAgQVRPTUlDX1JFTEVBU0UpOworCQkJCWV4dGVudF9kc3Nf ZXh0ZW5kaW5nX2ZpbmlzaCgpOworCisJCQkJaWYgKGdhcF9zaXplX3BhZ2UgIT0gMCkgeworCQkJ CQllaG9va3NfdCAqZWhvb2tzID0gYXJlbmFfZ2V0X2Vob29rcygKKwkJCQkJICAgIGFyZW5hKTsK KwkJCQkJZXh0ZW50X2RhbGxvY19nYXAodHNkbiwKKwkJCQkJICAgICZhcmVuYS0+cGFfc2hhcmQu cGFjLCBlaG9va3MsIGdhcCk7CisJCQkJfSBlbHNlIHsKKwkJCQkJZWRhdGFfY2FjaGVfcHV0KHRz ZG4sCisJCQkJCSAgICAmYXJlbmEtPnBhX3NoYXJkLmVkYXRhX2NhY2hlLCBnYXApOworCQkJCX0K KwkJCQlpZiAoISpjb21taXQpIHsKKwkJCQkJKmNvbW1pdCA9IHBhZ2VzX2RlY29tbWl0KHJldCwg c2l6ZSk7CisJCQkJfQorCQkJCWlmICgqemVybyAmJiAqY29tbWl0KSB7CisJCQkJCWVkYXRhX3Qg ZWRhdGEgPSB7MH07CisJCQkJCWVob29rc190ICplaG9va3MgPSBhcmVuYV9nZXRfZWhvb2tzKAor CQkJCQkgICAgYXJlbmEpOworCisJCQkJCWVkYXRhX2luaXQoJmVkYXRhLAorCQkJCQkgICAgYXJl bmFfaW5kX2dldChhcmVuYSksIHJldCwgc2l6ZSwKKwkJCQkJICAgIHNpemUsIGZhbHNlLCBTQ19O U0laRVMsCisJCQkJCSAgICBleHRlbnRfc3RhdGVfYWN0aXZlLCBmYWxzZSwgdHJ1ZSwKKwkJCQkJ ICAgIEVYVEVOVF9QQUlfUEFDLCBoZWFkX3N0YXRlKTsKKwkJCQkJaWYgKGV4dGVudF9wdXJnZV9m b3JjZWRfd3JhcHBlcih0c2RuLAorCQkJCQkgICAgZWhvb2tzLCAmZWRhdGEsIDAsIHNpemUpKSB7 CisJCQkJCQltZW1zZXQocmV0LCAwLCBzaXplKTsKKwkJCQkJfQorCQkJCX0KKwkJCQlyZXR1cm4g cmV0OworCQkJfQorCQkJLyoKKwkJCSAqIEZhaWx1cmUsIHdoZXRoZXIgZHVlIHRvIE9PTSBvciBh IHJhY2Ugd2l0aCBhIHJhdworCQkJICogc2JyaygpIGNhbGwgZnJvbSBvdXRzaWRlIHRoZSBhbGxv Y2F0b3IuCisJCQkgKi8KKwkJCWlmIChkc3NfcHJldiA9PSAodm9pZCAqKS0xKSB7CisJCQkJLyog T09NLiAqLworCQkJCWF0b21pY19zdG9yZV9iKCZkc3NfZXhoYXVzdGVkLCB0cnVlLAorCQkJCSAg ICBBVE9NSUNfUkVMRUFTRSk7CisJCQkJZ290byBsYWJlbF9vb207CisJCQl9CisJCX0KKwl9Cits YWJlbF9vb206CisJZXh0ZW50X2Rzc19leHRlbmRpbmdfZmluaXNoKCk7CisJZWRhdGFfY2FjaGVf cHV0KHRzZG4sICZhcmVuYS0+cGFfc2hhcmQuZWRhdGFfY2FjaGUsIGdhcCk7CisJcmV0dXJuIE5V TEw7Cit9CisKK3N0YXRpYyBib29sCitleHRlbnRfaW5fZHNzX2hlbHBlcih2b2lkICphZGRyLCB2 b2lkICptYXgpIHsKKwlyZXR1cm4gKCh1aW50cHRyX3QpYWRkciA+PSAodWludHB0cl90KWRzc19i YXNlICYmICh1aW50cHRyX3QpYWRkciA8CisJICAgICh1aW50cHRyX3QpbWF4KTsKK30KKworYm9v bAorZXh0ZW50X2luX2Rzcyh2b2lkICphZGRyKSB7CisJY2Fzc2VydChoYXZlX2Rzcyk7CisKKwly ZXR1cm4gZXh0ZW50X2luX2Rzc19oZWxwZXIoYWRkciwgYXRvbWljX2xvYWRfcCgmZHNzX21heCwK KwkgICAgQVRPTUlDX0FDUVVJUkUpKTsKK30KKworYm9vbAorZXh0ZW50X2Rzc19tZXJnZWFibGUo dm9pZCAqYWRkcl9hLCB2b2lkICphZGRyX2IpIHsKKwl2b2lkICptYXg7CisKKwljYXNzZXJ0KGhh dmVfZHNzKTsKKworCWlmICgodWludHB0cl90KWFkZHJfYSA8ICh1aW50cHRyX3QpZHNzX2Jhc2Ug JiYgKHVpbnRwdHJfdClhZGRyX2IgPAorCSAgICAodWludHB0cl90KWRzc19iYXNlKSB7CisJCXJl dHVybiB0cnVlOworCX0KKworCW1heCA9IGF0b21pY19sb2FkX3AoJmRzc19tYXgsIEFUT01JQ19B Q1FVSVJFKTsKKwlyZXR1cm4gKGV4dGVudF9pbl9kc3NfaGVscGVyKGFkZHJfYSwgbWF4KSA9PQor CSAgICBleHRlbnRfaW5fZHNzX2hlbHBlcihhZGRyX2IsIG1heCkpOworfQorCit2b2lkCitleHRl bnRfZHNzX2Jvb3Qodm9pZCkgeworCWNhc3NlcnQoaGF2ZV9kc3MpOworCisJZHNzX2Jhc2UgPSBl eHRlbnRfZHNzX3NicmsoMCk7CisJYXRvbWljX3N0b3JlX2IoJmRzc19leHRlbmRpbmcsIGZhbHNl LCBBVE9NSUNfUkVMQVhFRCk7CisJYXRvbWljX3N0b3JlX2IoJmRzc19leGhhdXN0ZWQsIGRzc19i YXNlID09ICh2b2lkICopLTEsIEFUT01JQ19SRUxBWEVEKTsKKwlhdG9taWNfc3RvcmVfcCgmZHNz X21heCwgZHNzX2Jhc2UsIEFUT01JQ19SRUxBWEVEKTsKK30KKworLyoqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKi8KCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMu MC9zcmMvZXh0ZW50X21tYXAuYyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUu My4wL3NyYy9leHRlbnRfbW1hcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu LjVmMGVlMmQKLS0tIC9kZXYvbnVsbAorKysgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1h bGxvYy01LjMuMC9zcmMvZXh0ZW50X21tYXAuYwpAQCAtMCwwICsxLDQxIEBACisjaW5jbHVkZSAi amVtYWxsb2MvaW50ZXJuYWwvamVtYWxsb2NfcHJlYW1ibGUuaCIKKyNpbmNsdWRlICJqZW1hbGxv Yy9pbnRlcm5hbC9qZW1hbGxvY19pbnRlcm5hbF9pbmNsdWRlcy5oIgorCisjaW5jbHVkZSAiamVt YWxsb2MvaW50ZXJuYWwvYXNzZXJ0LmgiCisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvZXh0 ZW50X21tYXAuaCIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIERhdGEuICovCisKK2Jv b2wJb3B0X3JldGFpbiA9CisjaWZkZWYgSkVNQUxMT0NfUkVUQUlOCisgICAgdHJ1ZQorI2Vsc2UK KyAgICBmYWxzZQorI2VuZGlmCisgICAgOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit2 b2lkICoKK2V4dGVudF9hbGxvY19tbWFwKHZvaWQgKm5ld19hZGRyLCBzaXplX3Qgc2l6ZSwgc2l6 ZV90IGFsaWdubWVudCwgYm9vbCAqemVybywKKyAgICBib29sICpjb21taXQpIHsKKwlhc3NlcnQo YWxpZ25tZW50ID09IEFMSUdOTUVOVF9DRUlMSU5HKGFsaWdubWVudCwgUEFHRSkpOworCXZvaWQg KnJldCA9IHBhZ2VzX21hcChuZXdfYWRkciwgc2l6ZSwgYWxpZ25tZW50LCBjb21taXQpOworCWlm IChyZXQgPT0gTlVMTCkgeworCQlyZXR1cm4gTlVMTDsKKwl9CisJYXNzZXJ0KHJldCAhPSBOVUxM KTsKKwlpZiAoKmNvbW1pdCkgeworCQkqemVybyA9IHRydWU7CisJfQorCXJldHVybiByZXQ7Cit9 CisKK2Jvb2wKK2V4dGVudF9kYWxsb2NfbW1hcCh2b2lkICphZGRyLCBzaXplX3Qgc2l6ZSkgewor CWlmICghb3B0X3JldGFpbikgeworCQlwYWdlc191bm1hcChhZGRyLCBzaXplKTsKKwl9CisJcmV0 dXJuIG9wdF9yZXRhaW47Cit9CgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQv amVtYWxsb2MtNS4zLjAvc3JjL2Z4cC5jIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxs b2MtNS4zLjAvc3JjL2Z4cC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2 NTg1ZjAKLS0tIC9kZXYvbnVsbAorKysgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxv Yy01LjMuMC9zcmMvZnhwLmMKQEAgLTAsMCArMSwxMjQgQEAKKyNpbmNsdWRlICJqZW1hbGxvYy9p bnRlcm5hbC9qZW1hbGxvY19wcmVhbWJsZS5oIgorI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFs L2plbWFsbG9jX2ludGVybmFsX2luY2x1ZGVzLmgiCisKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRl cm5hbC9meHAuaCIKKworc3RhdGljIGJvb2wKK2Z4cF9pc2RpZ2l0KGNoYXIgYykgeworCXJldHVy biAnMCcgPD0gYyAmJiBjIDw9ICc5JzsKK30KKworYm9vbAorZnhwX3BhcnNlKGZ4cF90ICpyZXN1 bHQsIGNvbnN0IGNoYXIgKnN0ciwgY2hhciAqKmVuZCkgeworCS8qCisJICogVXNpbmcgbWFsbG9j X3N0cnRvdW1heCBpbiB0aGlzIG1ldGhvZCBpc24ndCBhcyBoYW5keSBhcyB5b3UgbWlnaHQKKwkg KiBleHBlY3QgKEkgdHJpZWQpLiBJbiB0aGUgZnJhY3Rpb25hbCBwYXJ0LCBzaWduaWZpY2FudCBs ZWFkaW5nIHplcm9zCisJICogbWVhbiB0aGF0IHlvdSBzdGlsbCBuZWVkIHRvIGRvIHlvdXIgb3du IHBhcnNpbmcsIG5vdyB3aXRoIHRyaWNraWVyCisJICogbWF0aC4gIEluIHRoZSBpbnRlZ2VyIHBh cnQsIHRoZSBjYXN0aW5nICh1aW50bWF4X3QgdG8gdWludDMyX3QpCisJICogZm9yY2VzIG1vcmUg cmVhc29uaW5nIGFib3V0IGJvdW5kcyB0aGFuIGp1c3QgY2hlY2tpbmcgZm9yIG92ZXJmbG93IGFz CisJICogd2UgcGFyc2UuCisJICovCisJdWludDMyX3QgaW50ZWdlcl9wYXJ0ID0gMDsKKworCWNv bnN0IGNoYXIgKmN1ciA9IHN0cjsKKworCS8qIFRoZSBzdHJpbmcgbXVzdCBzdGFydCB3aXRoIGEg ZGlnaXQgb3IgYSBkZWNpbWFsIHBvaW50LiAqLworCWlmICgqY3VyICE9ICcuJyAmJiAhZnhwX2lz ZGlnaXQoKmN1cikpIHsKKwkJcmV0dXJuIHRydWU7CisJfQorCisJd2hpbGUgKCcwJyA8PSAqY3Vy ICYmICpjdXIgPD0gJzknKSB7CisJCWludGVnZXJfcGFydCAqPSAxMDsKKwkJaW50ZWdlcl9wYXJ0 ICs9ICpjdXIgLSAnMCc7CisJCWlmIChpbnRlZ2VyX3BhcnQgPj0gKDFVIDw8IDE2KSkgeworCQkJ cmV0dXJuIHRydWU7CisJCX0KKwkJY3VyKys7CisJfQorCisJLyoKKwkgKiBXZSd2ZSBwYXJzZWQg YWxsIGRpZ2l0cyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzdHJpbmcsIHdpdGhvdXQKKwkgKiBv dmVyZmxvdy4gIEVpdGhlciB3ZSdyZSBkb25lLCBvciB0aGVyZSdzIGEgZnJhY3Rpb25hbCBwYXJ0 LgorCSAqLworCWlmICgqY3VyICE9ICcuJykgeworCQkqcmVzdWx0ID0gKGludGVnZXJfcGFydCA8 PCAxNik7CisJCWlmIChlbmQgIT0gTlVMTCkgeworCQkJKmVuZCA9IChjaGFyICopY3VyOworCQl9 CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwkvKiBUaGVyZSdzIGEgZnJhY3Rpb25hbCBwYXJ0LiAq LworCWN1cisrOworCWlmICghZnhwX2lzZGlnaXQoKmN1cikpIHsKKwkJLyogU2hvdWxkbid0IGVu ZCBvbiB0aGUgZGVjaW1hbCBwb2ludC4gKi8KKwkJcmV0dXJuIHRydWU7CisJfQorCisJLyoKKwkg KiBXZSB1c2UgYSBsb3Qgb2YgcHJlY2lzaW9uIGZvciB0aGUgZnJhY3Rpb25hbCBwYXJ0LCBldmVu IHRob3VnaCB3ZSdsbAorCSAqIGRpc2NhcmQgbW9zdCBvZiBpdDsgdGhpcyBsZXRzIHVzIGdldCBl eGFjdCB2YWx1ZXMgZm9yIHRoZSBpbXBvcnRhbnQKKwkgKiBzcGVjaWFsIGNhc2Ugd2hlcmUgdGhl IGRlbm9taW5hdG9yIGlzIGEgc21hbGwgcG93ZXIgb2YgMiAoZm9yCisJICogaW5zdGFuY2UsIDEv NTEyID09IDAuMDAxOTUzMTI1IGlzIGV4YWN0bHkgcmVwcmVzZW50YWJsZSBldmVuIHdpdGgKKwkg KiBvbmx5IDE2IGJpdHMgb2YgZnJhY3Rpb25hbCBwcmVjaXNpb24pLiAgV2UgbmVlZCB0byBsZWZ0 LXNoaWZ0IGJ5IDE2CisJICogYmVmb3JlIGRpdmlkaW5nIHNvIHdlIHBpY2sgdGhlIG51bWJlciBv ZiBkaWdpdHMgdG8gYmUKKwkgKiBmbG9vcihsb2coMioqNDgpKSA9IDE0LgorCSAqLworCXVpbnQ2 NF90IGZyYWN0aW9uYWxfcGFydCA9IDA7CisJdWludDY0X3QgZnJhY19kaXYgPSAxOworCWZvciAo aW50IGkgPSAwOyBpIDwgRlhQX0ZSQUNUSU9OQUxfUEFSVF9ESUdJVFM7IGkrKykgeworCQlmcmFj dGlvbmFsX3BhcnQgKj0gMTA7CisJCWZyYWNfZGl2ICo9IDEwOworCQlpZiAoZnhwX2lzZGlnaXQo KmN1cikpIHsKKwkJCWZyYWN0aW9uYWxfcGFydCArPSAqY3VyIC0gJzAnOworCQkJY3VyKys7CisJ CX0KKwl9CisJLyoKKwkgKiBXZSBvbmx5IHBhcnNlIHRoZSBmaXJzdCBtYXhkaWdpdHMgY2hhcmFj dGVycywgYnV0IHdlIGNhbiBzdGlsbCBpZ25vcmUKKwkgKiBhbnkgZGlnaXRzIGFmdGVyIHRoYXQu CisJICovCisJd2hpbGUgKGZ4cF9pc2RpZ2l0KCpjdXIpKSB7CisJCWN1cisrOworCX0KKworCWFz c2VydChmcmFjdGlvbmFsX3BhcnQgPCBmcmFjX2Rpdik7CisJdWludDMyX3QgZnJhY3Rpb25hbF9y ZXByID0gKHVpbnQzMl90KSgKKwkgICAgKGZyYWN0aW9uYWxfcGFydCA8PCAxNikgLyBmcmFjX2Rp dik7CisKKwkvKiBTdWNjZXNzISAqLworCSpyZXN1bHQgPSAoaW50ZWdlcl9wYXJ0IDw8IDE2KSAr IGZyYWN0aW9uYWxfcmVwcjsKKwlpZiAoZW5kICE9IE5VTEwpIHsKKwkJKmVuZCA9IChjaGFyICop Y3VyOworCX0KKwlyZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQKK2Z4cF9wcmludChmeHBfdCBhLCBj aGFyIGJ1ZltGWFBfQlVGX1NJWkVdKSB7CisJdWludDMyX3QgaW50ZWdlcl9wYXJ0ID0gZnhwX3Jv dW5kX2Rvd24oYSk7CisJdWludDMyX3QgZnJhY3Rpb25hbF9wYXJ0ID0gKGEgJiAoKDFVIDw8IDE2 KSAtIDEpKTsKKworCWludCBsZWFkaW5nX2ZyYWN0aW9uX3plcm9zID0gMDsKKwl1aW50NjRfdCBm cmFjdGlvbl9kaWdpdHMgPSBmcmFjdGlvbmFsX3BhcnQ7CisJZm9yIChpbnQgaSA9IDA7IGkgPCBG WFBfRlJBQ1RJT05BTF9QQVJUX0RJR0lUUzsgaSsrKSB7CisJCWlmIChmcmFjdGlvbl9kaWdpdHMg PCAoMVUgPDwgMTYpCisJCSAgICAmJiBmcmFjdGlvbl9kaWdpdHMgKiAxMCA+PSAoMVUgPDwgMTYp KSB7CisJCQlsZWFkaW5nX2ZyYWN0aW9uX3plcm9zID0gaTsKKwkJfQorCQlmcmFjdGlvbl9kaWdp dHMgKj0gMTA7CisJfQorCWZyYWN0aW9uX2RpZ2l0cyA+Pj0gMTY7CisJd2hpbGUgKGZyYWN0aW9u X2RpZ2l0cyA+IDAgJiYgZnJhY3Rpb25fZGlnaXRzICUgMTAgPT0gMCkgeworCQlmcmFjdGlvbl9k aWdpdHMgLz0gMTA7CisJfQorCisJc2l6ZV90IHByaW50ZWQgPSBtYWxsb2Nfc25wcmludGYoYnVm LCBGWFBfQlVGX1NJWkUsICIlIkZNVHUzMiIuIiwKKwkgICAgaW50ZWdlcl9wYXJ0KTsKKwlmb3Ig KGludCBpID0gMDsgaSA8IGxlYWRpbmdfZnJhY3Rpb25femVyb3M7IGkrKykgeworCQlidWZbcHJp bnRlZF0gPSAnMCc7CisJCXByaW50ZWQrKzsKKwl9CisJbWFsbG9jX3NucHJpbnRmKCZidWZbcHJp bnRlZF0sIEZYUF9CVUZfU0laRSAtIHByaW50ZWQsICIlIkZNVHU2NCwKKwkgICAgZnJhY3Rpb25f ZGlnaXRzKTsKK30KCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxv Yy01LjMuMC9zcmMvaG9vay5jIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4z LjAvc3JjL2hvb2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTNlZGJi Ci0tLSAvZGV2L251bGwKKysrIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4z LjAvc3JjL2hvb2suYwpAQCAtMCwwICsxLDE5NSBAQAorI2luY2x1ZGUgImplbWFsbG9jL2ludGVy bmFsL2plbWFsbG9jX3ByZWFtYmxlLmgiCisKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9o b29rLmgiCisKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9hdG9taWMuaCIKKyNpbmNsdWRl ICJqZW1hbGxvYy9pbnRlcm5hbC9tdXRleC5oIgorI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFs L3NlcS5oIgorCit0eXBlZGVmIHN0cnVjdCBob29rc19pbnRlcm5hbF9zIGhvb2tzX2ludGVybmFs X3Q7CitzdHJ1Y3QgaG9va3NfaW50ZXJuYWxfcyB7CisJaG9va3NfdCBob29rczsKKwlib29sIGlu X3VzZTsKK307CisKK3NlcV9kZWZpbmUoaG9va3NfaW50ZXJuYWxfdCwgaG9va3MpCisKK3N0YXRp YyBhdG9taWNfdV90IG5ob29rcyA9IEFUT01JQ19JTklUKDApOworc3RhdGljIHNlcV9ob29rc190 IGhvb2tzW0hPT0tfTUFYXTsKK3N0YXRpYyBtYWxsb2NfbXV0ZXhfdCBob29rc19tdTsKKworYm9v bAoraG9va19ib290KCkgeworCXJldHVybiBtYWxsb2NfbXV0ZXhfaW5pdCgmaG9va3NfbXUsICJo b29rcyIsIFdJVE5FU1NfUkFOS19IT09LLAorCSAgICBtYWxsb2NfbXV0ZXhfcmFua19leGNsdXNp dmUpOworfQorCitzdGF0aWMgdm9pZCAqCitob29rX2luc3RhbGxfbG9ja2VkKGhvb2tzX3QgKnRv X2luc3RhbGwpIHsKKwlob29rc19pbnRlcm5hbF90IGhvb2tzX2ludGVybmFsOworCWZvciAoaW50 IGkgPSAwOyBpIDwgSE9PS19NQVg7IGkrKykgeworCQlib29sIHN1Y2Nlc3MgPSBzZXFfdHJ5X2xv YWRfaG9va3MoJmhvb2tzX2ludGVybmFsLCAmaG9va3NbaV0pOworCQkvKiBXZSBob2xkIG11OyBu byBjb25jdXJyZW50IGFjY2Vzcy4gKi8KKwkJYXNzZXJ0KHN1Y2Nlc3MpOworCQlpZiAoIWhvb2tz X2ludGVybmFsLmluX3VzZSkgeworCQkJaG9va3NfaW50ZXJuYWwuaG9va3MgPSAqdG9faW5zdGFs bDsKKwkJCWhvb2tzX2ludGVybmFsLmluX3VzZSA9IHRydWU7CisJCQlzZXFfc3RvcmVfaG9va3Mo Jmhvb2tzW2ldLCAmaG9va3NfaW50ZXJuYWwpOworCQkJYXRvbWljX3N0b3JlX3UoJm5ob29rcywK KwkJCSAgICBhdG9taWNfbG9hZF91KCZuaG9va3MsIEFUT01JQ19SRUxBWEVEKSArIDEsCisJCQkg ICAgQVRPTUlDX1JFTEFYRUQpOworCQkJcmV0dXJuICZob29rc1tpXTsKKwkJfQorCX0KKwlyZXR1 cm4gTlVMTDsKK30KKwordm9pZCAqCitob29rX2luc3RhbGwodHNkbl90ICp0c2RuLCBob29rc190 ICp0b19pbnN0YWxsKSB7CisJbWFsbG9jX211dGV4X2xvY2sodHNkbiwgJmhvb2tzX211KTsKKwl2 b2lkICpyZXQgPSBob29rX2luc3RhbGxfbG9ja2VkKHRvX2luc3RhbGwpOworCWlmIChyZXQgIT0g TlVMTCkgeworCQl0c2RfZ2xvYmFsX3Nsb3dfaW5jKHRzZG4pOworCX0KKwltYWxsb2NfbXV0ZXhf dW5sb2NrKHRzZG4sICZob29rc19tdSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQK K2hvb2tfcmVtb3ZlX2xvY2tlZChzZXFfaG9va3NfdCAqdG9fcmVtb3ZlKSB7CisJaG9va3NfaW50 ZXJuYWxfdCBob29rc19pbnRlcm5hbDsKKwlib29sIHN1Y2Nlc3MgPSBzZXFfdHJ5X2xvYWRfaG9v a3MoJmhvb2tzX2ludGVybmFsLCB0b19yZW1vdmUpOworCS8qIFdlIGhvbGQgbXU7IG5vIGNvbmN1 cnJlbnQgYWNjZXNzLiAqLworCWFzc2VydChzdWNjZXNzKTsKKwkvKiBTaG91bGQgb25seSByZW1v dmUgaG9va3MgdGhhdCB3ZXJlIGFkZGVkLiAqLworCWFzc2VydChob29rc19pbnRlcm5hbC5pbl91 c2UpOworCWhvb2tzX2ludGVybmFsLmluX3VzZSA9IGZhbHNlOworCXNlcV9zdG9yZV9ob29rcyh0 b19yZW1vdmUsICZob29rc19pbnRlcm5hbCk7CisJYXRvbWljX3N0b3JlX3UoJm5ob29rcywgYXRv bWljX2xvYWRfdSgmbmhvb2tzLCBBVE9NSUNfUkVMQVhFRCkgLSAxLAorCSAgICBBVE9NSUNfUkVM QVhFRCk7Cit9CisKK3ZvaWQKK2hvb2tfcmVtb3ZlKHRzZG5fdCAqdHNkbiwgdm9pZCAqb3BhcXVl KSB7CisJaWYgKGNvbmZpZ19kZWJ1ZykgeworCQljaGFyICpob29rc19iZWdpbiA9IChjaGFyICop Jmhvb2tzWzBdOworCQljaGFyICpob29rc19lbmQgPSAoY2hhciAqKSZob29rc1tIT09LX01BWF07 CisJCWNoYXIgKmhvb2sgPSAoY2hhciAqKW9wYXF1ZTsKKwkJYXNzZXJ0KGhvb2tzX2JlZ2luIDw9 IGhvb2sgJiYgaG9vayA8IGhvb2tzX2VuZAorCQkgICAgJiYgKGhvb2sgLSBob29rc19iZWdpbikg JSBzaXplb2Yoc2VxX2hvb2tzX3QpID09IDApOworCX0KKwltYWxsb2NfbXV0ZXhfbG9jayh0c2Ru LCAmaG9va3NfbXUpOworCWhvb2tfcmVtb3ZlX2xvY2tlZCgoc2VxX2hvb2tzX3QgKilvcGFxdWUp OworCXRzZF9nbG9iYWxfc2xvd19kZWModHNkbik7CisJbWFsbG9jX211dGV4X3VubG9jayh0c2Ru LCAmaG9va3NfbXUpOworfQorCisjZGVmaW5lIEZPUl9FQUNIX0hPT0tfQkVHSU4oaG9va3NfaW50 ZXJuYWxfcHRyKQkJCQlcCitmb3IgKGludCBmb3JfZWFjaF9ob29rX2NvdW50ZXIgPSAwOwkJCQkJ XAorICAgIGZvcl9lYWNoX2hvb2tfY291bnRlciA8IEhPT0tfTUFYOwkJCQkJXAorICAgIGZvcl9l YWNoX2hvb2tfY291bnRlcisrKSB7CQkJCQkJXAorCWJvb2wgZm9yX2VhY2hfaG9va19zdWNjZXNz ID0gc2VxX3RyeV9sb2FkX2hvb2tzKAkJXAorCSAgICAoaG9va3NfaW50ZXJuYWxfcHRyKSwgJmhv b2tzW2Zvcl9lYWNoX2hvb2tfY291bnRlcl0pOwlcCisJaWYgKCFmb3JfZWFjaF9ob29rX3N1Y2Nl c3MpIHsJCQkJCVwKKwkJY29udGludWU7CQkJCQkJXAorCX0JCQkJCQkJCVwKKwlpZiAoIShob29r c19pbnRlcm5hbF9wdHIpLT5pbl91c2UpIHsJCQkJXAorCQljb250aW51ZTsJCQkJCQlcCisJfQor I2RlZmluZSBGT1JfRUFDSF9IT09LX0VORAkJCQkJCVwKK30KKworc3RhdGljIGJvb2wgKgoraG9v a19yZWVudHJhbnRwKCkgeworCS8qCisJICogV2UgcHJldmVudCB1c2VyIHJlZW50cmFuY3kgd2l0 aGluIGhvb2tzLiAgVGhpcyBpcyBiYXNpY2FsbHkganVzdCBhCisJICogdGhyZWFkLWxvY2FsIGJv b2wgdGhhdCB0cmlnZ2VycyBhbiBlYXJseS1leGl0LgorCSAqCisJICogV2UgZG9uJ3QgZm9sZCBp bl9ob29rIGludG8gcmVlbnRyYW5jeS4gIFRoZXJlIGFyZSB0d28gcmVhc29ucyBmb3IKKwkgKiB0 aGlzOgorCSAqIC0gUmlnaHQgbm93LCB3ZSB0dXJuIG9uIHJlZW50cmFuY3kgZHVyaW5nIHRoaW5n cyBsaWtlIGV4dGVudCBob29rCisJICogICBleGVjdXRpb24uICBBbGxvY2F0aW5nIGR1cmluZyBl eHRlbnQgaG9va3MgaXMgbm90IG9mZmljaWFsbHkKKwkgKiAgIHN1cHBvcnRlZCwgYnV0IHdlIGRv bid0IHdhbnQgdG8gYnJlYWsgaXQgZm9yIHRoZSB0aW1lIGJlaW5nLiAgVGhlc2UKKwkgKiAgIHNv cnRzIG9mIGFsbG9jYXRpb25zIHNob3VsZCBwcm9iYWJseSBzdGlsbCBiZSBob29rZWQsIHRob3Vn aC4KKwkgKiAtIElmIGEgaG9vayBhbGxvY2F0ZXMsIHdlIG1heSB3YW50IGl0IHRvIGJlIHJlbGF0 aXZlbHkgZmFzdCAoYWZ0ZXIKKwkgKiAgIGFsbCwgaXQgZXhlY3V0ZXMgb24gZXZlcnkgYWxsb2Nh dG9yIG9wZXJhdGlvbikuICBUdXJuaW5nIG9uCisJICogICByZWVudHJhbmN5IGlzIGEgZmFpcmx5 IGhlYXZ5d2VpZ2h0IG1vZGUgKGRpc2FibGluZyB0Y2FjaGUsCisJICogICByZWRpcmVjdGluZyB0 byBhcmVuYSAwLCBldGMuKS4gIEl0J3MgcG9zc2libGUgd2UgbWF5IG9uZSBkYXkgd2FudAorCSAq ICAgdG8gdHVybiBvbiByZWVudHJhbnQgbW9kZSBoZXJlLCBpZiBpdCBwcm92ZXMgdG9vIGRpZmZp Y3VsdCB0byBrZWVwCisJICogICB0aGlzIHdvcmtpbmcuICBCdXQgdGhhdCdzIGZhaXJseSBlYXN5 IGZvciB1cyB0byBzZWU7IE9UT0gsIHBlb3BsZQorCSAqICAgbm90IHVzaW5nIGhvb2tzIGJlY2F1 c2UgdGhleSdyZSB0b28gc2xvdyBpcyBlYXN5IGZvciB1cyB0byBtaXNzLgorCSAqCisJICogVGhl IHRyaWNreSBwYXJ0IGlzCisJICogdGhhdCB0aGlzIGNvZGUgbWlnaHQgZ2V0IGludm9rZWQgZXZl biBpZiB3ZSBkb24ndCBoYXZlIGFjY2VzcyB0byB0c2QuCisJICogVGhpcyBmdW5jdGlvbiBtaW1p Y3MgZ2V0dGluZyBhIHBvaW50ZXIgdG8gdGhyZWFkLWxvY2FsIGRhdGEsIGV4Y2VwdAorCSAqIHRo YXQgaXQgbWlnaHQgc2VjcmV0bHkgcmV0dXJuIGEgcG9pbnRlciB0byBzb21lIGdsb2JhbCBkYXRh IGlmIHdlCisJICoga25vdyB0aGF0IHRoZSBjYWxsZXIgd2lsbCB0YWtlIHRoZSBlYXJseS1leGl0 IHBhdGguCisJICogSWYgd2UgcmV0dXJuIGEgYm9vbCB0aGF0IGluZGljYXRlcyB0aGF0IHdlIGFy ZSByZWVudHJhbnQsIHRoZW4gdGhlCisJICogY2FsbGVyIHdpbGwgZ28gZG93biB0aGUgZWFybHkg ZXhpdCBwYXRoLCBsZWF2aW5nIHRoZSBnbG9iYWwKKwkgKiB1bnRvdWNoZWQuCisJICovCisJc3Rh dGljIGJvb2wgaW5faG9va19nbG9iYWwgPSB0cnVlOworCXRzZG5fdCAqdHNkbiA9IHRzZG5fZmV0 Y2goKTsKKwlib29sICppbl9ob29rID0gdHNkbl9pbl9ob29rcF9nZXQodHNkbik7CisJaWYgKGlu X2hvb2shPSBOVUxMKSB7CisJCXJldHVybiBpbl9ob29rOworCX0KKwlyZXR1cm4gJmluX2hvb2tf Z2xvYmFsOworfQorCisjZGVmaW5lIEhPT0tfUFJPTE9HVUUJCQkJCQkJXAorCWlmIChsaWtlbHko YXRvbWljX2xvYWRfdSgmbmhvb2tzLCBBVE9NSUNfUkVMQVhFRCkgPT0gMCkpIHsJXAorCQlyZXR1 cm47CQkJCQkJCVwKKwl9CQkJCQkJCQlcCisJYm9vbCAqaW5faG9vayA9IGhvb2tfcmVlbnRyYW50 cCgpOwkJCQlcCisJaWYgKCppbl9ob29rKSB7CQkJCQkJCVwKKwkJcmV0dXJuOwkJCQkJCQlcCisJ fQkJCQkJCQkJXAorCSppbl9ob29rID0gdHJ1ZTsKKworI2RlZmluZSBIT09LX0VQSUxPR1VFCQkJ CQkJCVwKKwkqaW5faG9vayA9IGZhbHNlOworCit2b2lkCitob29rX2ludm9rZV9hbGxvYyhob29r X2FsbG9jX3QgdHlwZSwgdm9pZCAqcmVzdWx0LCB1aW50cHRyX3QgcmVzdWx0X3JhdywKKyAgICB1 aW50cHRyX3QgYXJnc19yYXdbM10pIHsKKwlIT09LX1BST0xPR1VFCisKKwlob29rc19pbnRlcm5h bF90IGhvb2s7CisJRk9SX0VBQ0hfSE9PS19CRUdJTigmaG9vaykKKwkJaG9va19hbGxvYyBoID0g aG9vay5ob29rcy5hbGxvY19ob29rOworCQlpZiAoaCAhPSBOVUxMKSB7CisJCQloKGhvb2suaG9v a3MuZXh0cmEsIHR5cGUsIHJlc3VsdCwgcmVzdWx0X3JhdywgYXJnc19yYXcpOworCQl9CisJRk9S X0VBQ0hfSE9PS19FTkQKKworCUhPT0tfRVBJTE9HVUUKK30KKwordm9pZAoraG9va19pbnZva2Vf ZGFsbG9jKGhvb2tfZGFsbG9jX3QgdHlwZSwgdm9pZCAqYWRkcmVzcywgdWludHB0cl90IGFyZ3Nf cmF3WzNdKSB7CisJSE9PS19QUk9MT0dVRQorCWhvb2tzX2ludGVybmFsX3QgaG9vazsKKwlGT1Jf RUFDSF9IT09LX0JFR0lOKCZob29rKQorCQlob29rX2RhbGxvYyBoID0gaG9vay5ob29rcy5kYWxs b2NfaG9vazsKKwkJaWYgKGggIT0gTlVMTCkgeworCQkJaChob29rLmhvb2tzLmV4dHJhLCB0eXBl LCBhZGRyZXNzLCBhcmdzX3Jhdyk7CisJCX0KKwlGT1JfRUFDSF9IT09LX0VORAorCUhPT0tfRVBJ TE9HVUUKK30KKwordm9pZAoraG9va19pbnZva2VfZXhwYW5kKGhvb2tfZXhwYW5kX3QgdHlwZSwg dm9pZCAqYWRkcmVzcywgc2l6ZV90IG9sZF91c2l6ZSwKKyAgICBzaXplX3QgbmV3X3VzaXplLCB1 aW50cHRyX3QgcmVzdWx0X3JhdywgdWludHB0cl90IGFyZ3NfcmF3WzRdKSB7CisJSE9PS19QUk9M T0dVRQorCWhvb2tzX2ludGVybmFsX3QgaG9vazsKKwlGT1JfRUFDSF9IT09LX0JFR0lOKCZob29r KQorCQlob29rX2V4cGFuZCBoID0gaG9vay5ob29rcy5leHBhbmRfaG9vazsKKwkJaWYgKGggIT0g TlVMTCkgeworCQkJaChob29rLmhvb2tzLmV4dHJhLCB0eXBlLCBhZGRyZXNzLCBvbGRfdXNpemUs IG5ld191c2l6ZSwKKwkJCSAgICByZXN1bHRfcmF3LCBhcmdzX3Jhdyk7CisJCX0KKwlGT1JfRUFD SF9IT09LX0VORAorCUhPT0tfRVBJTE9HVUUKK30KCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0z LjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9zcmMvaHBhLmMgYi8zODktZHMtYmFzZS0zLjMuMC1i dWlsZC9qZW1hbGxvYy01LjMuMC9zcmMvaHBhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMC4uN2UyYWViYQotLS0gL2Rldi9udWxsCisrKyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1 aWxkL2plbWFsbG9jLTUuMy4wL3NyYy9ocGEuYwpAQCAtMCwwICsxLDEwNDQgQEAKKyNpbmNsdWRl ICJqZW1hbGxvYy9pbnRlcm5hbC9qZW1hbGxvY19wcmVhbWJsZS5oIgorI2luY2x1ZGUgImplbWFs bG9jL2ludGVybmFsL2plbWFsbG9jX2ludGVybmFsX2luY2x1ZGVzLmgiCisKKyNpbmNsdWRlICJq ZW1hbGxvYy9pbnRlcm5hbC9ocGEuaCIKKworI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2Zi LmgiCisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvd2l0bmVzcy5oIgorCisjZGVmaW5lIEhQ QV9FREVOX1NJWkUgKDEyOCAqIEhVR0VQQUdFKQorCitzdGF0aWMgZWRhdGFfdCAqaHBhX2FsbG9j KHRzZG5fdCAqdHNkbiwgcGFpX3QgKnNlbGYsIHNpemVfdCBzaXplLAorICAgIHNpemVfdCBhbGln bm1lbnQsIGJvb2wgemVybywgYm9vbCBndWFyZGVkLCBib29sIGZyZXF1ZW50X3JldXNlLAorICAg IGJvb2wgKmRlZmVycmVkX3dvcmtfZ2VuZXJhdGVkKTsKK3N0YXRpYyBzaXplX3QgaHBhX2FsbG9j X2JhdGNoKHRzZG5fdCAqdHNkbiwgcGFpX3QgKnNlbGYsIHNpemVfdCBzaXplLAorICAgIHNpemVf dCBuYWxsb2NzLCBlZGF0YV9saXN0X2FjdGl2ZV90ICpyZXN1bHRzLCBib29sICpkZWZlcnJlZF93 b3JrX2dlbmVyYXRlZCk7CitzdGF0aWMgYm9vbCBocGFfZXhwYW5kKHRzZG5fdCAqdHNkbiwgcGFp X3QgKnNlbGYsIGVkYXRhX3QgKmVkYXRhLAorICAgIHNpemVfdCBvbGRfc2l6ZSwgc2l6ZV90IG5l d19zaXplLCBib29sIHplcm8sIGJvb2wgKmRlZmVycmVkX3dvcmtfZ2VuZXJhdGVkKTsKK3N0YXRp YyBib29sIGhwYV9zaHJpbmsodHNkbl90ICp0c2RuLCBwYWlfdCAqc2VsZiwgZWRhdGFfdCAqZWRh dGEsCisgICAgc2l6ZV90IG9sZF9zaXplLCBzaXplX3QgbmV3X3NpemUsIGJvb2wgKmRlZmVycmVk X3dvcmtfZ2VuZXJhdGVkKTsKK3N0YXRpYyB2b2lkIGhwYV9kYWxsb2ModHNkbl90ICp0c2RuLCBw YWlfdCAqc2VsZiwgZWRhdGFfdCAqZWRhdGEsCisgICAgYm9vbCAqZGVmZXJyZWRfd29ya19nZW5l cmF0ZWQpOworc3RhdGljIHZvaWQgaHBhX2RhbGxvY19iYXRjaCh0c2RuX3QgKnRzZG4sIHBhaV90 ICpzZWxmLAorICAgIGVkYXRhX2xpc3RfYWN0aXZlX3QgKmxpc3QsIGJvb2wgKmRlZmVycmVkX3dv cmtfZ2VuZXJhdGVkKTsKK3N0YXRpYyB1aW50NjRfdCBocGFfdGltZV91bnRpbF9kZWZlcnJlZF93 b3JrKHRzZG5fdCAqdHNkbiwgcGFpX3QgKnNlbGYpOworCitib29sCitocGFfc3VwcG9ydGVkKCkg eworI2lmZGVmIF9XSU4zMgorCS8qCisJICogQXQgbGVhc3QgdW50aWwgdGhlIEFQSSBhbmQgaW1w bGVtZW50YXRpb24gaXMgc29tZXdoYXQgc2V0dGxlZCwgd2UKKwkgKiBkb24ndCB3YW50IHRvIHRy eSB0byBkZWJ1ZyB0aGUgVk0gc3Vic3lzdGVtIG9uIHRoZSBoYXJkZXN0LXRvLXRlc3QKKwkgKiBw bGF0Zm9ybS4KKwkgKi8KKwlyZXR1cm4gZmFsc2U7CisjZW5kaWYKKwlpZiAoIXBhZ2VzX2Nhbl9o dWdpZnkpIHsKKwkJcmV0dXJuIGZhbHNlOworCX0KKwkvKgorCSAqIFdlIGZ1bmRhbWVudGFsbHkg cmVseSBvbiBhIGFkZHJlc3Mtc3BhY2UtaHVuZ3J5IGdyb3d0aCBzdHJhdGVneSBmb3IKKwkgKiBo dWdlcGFnZXMuCisJICovCisJaWYgKExHX1NJWkVPRl9QVFIgIT0gMykgeworCQlyZXR1cm4gZmFs c2U7CisJfQorCS8qCisJICogSWYgd2UgY291bGRuJ3QgZGV0ZWN0IHRoZSB2YWx1ZSBvZiBIVUdF UEFHRSwgSFVHRVBBR0VfUEFHRVMgYmVjb21lcworCSAqIHRoaXMgc2VudGluZWwgdmFsdWUgLS0g c2VlIHRoZSBjb21tZW50IGluIHBhZ2VzLmguCisJICovCisJaWYgKEhVR0VQQUdFX1BBR0VTID09 IDEpIHsKKwkJcmV0dXJuIGZhbHNlOworCX0KKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIHZv aWQKK2hwYV9kb19jb25zaXN0ZW5jeV9jaGVja3MoaHBhX3NoYXJkX3QgKnNoYXJkKSB7CisJYXNz ZXJ0KHNoYXJkLT5iYXNlICE9IE5VTEwpOworfQorCitib29sCitocGFfY2VudHJhbF9pbml0KGhw YV9jZW50cmFsX3QgKmNlbnRyYWwsIGJhc2VfdCAqYmFzZSwgY29uc3QgaHBhX2hvb2tzX3QgKmhv b2tzKSB7CisJLyogbWFsbG9jX2NvbmYgcHJvY2Vzc2luZyBzaG91bGQgaGF2ZSBmaWx0ZXJlZCBv dXQgdGhlc2UgY2FzZXMuICovCisJYXNzZXJ0KGhwYV9zdXBwb3J0ZWQoKSk7CisJYm9vbCBlcnI7 CisJZXJyID0gbWFsbG9jX211dGV4X2luaXQoJmNlbnRyYWwtPmdyb3dfbXR4LCAiaHBhX2NlbnRy YWxfZ3JvdyIsCisJICAgIFdJVE5FU1NfUkFOS19IUEFfQ0VOVFJBTF9HUk9XLCBtYWxsb2NfbXV0 ZXhfcmFua19leGNsdXNpdmUpOworCWlmIChlcnIpIHsKKwkJcmV0dXJuIHRydWU7CisJfQorCWVy ciA9IG1hbGxvY19tdXRleF9pbml0KCZjZW50cmFsLT5tdHgsICJocGFfY2VudHJhbCIsCisJICAg IFdJVE5FU1NfUkFOS19IUEFfQ0VOVFJBTCwgbWFsbG9jX211dGV4X3JhbmtfZXhjbHVzaXZlKTsK KwlpZiAoZXJyKSB7CisJCXJldHVybiB0cnVlOworCX0KKwljZW50cmFsLT5iYXNlID0gYmFzZTsK KwljZW50cmFsLT5lZGVuID0gTlVMTDsKKwljZW50cmFsLT5lZGVuX2xlbiA9IDA7CisJY2VudHJh bC0+YWdlX2NvdW50ZXIgPSAwOworCWNlbnRyYWwtPmhvb2tzID0gKmhvb2tzOworCXJldHVybiBm YWxzZTsKK30KKworc3RhdGljIGhwZGF0YV90ICoKK2hwYV9hbGxvY19wcyh0c2RuX3QgKnRzZG4s IGhwYV9jZW50cmFsX3QgKmNlbnRyYWwpIHsKKwlyZXR1cm4gKGhwZGF0YV90ICopYmFzZV9hbGxv Yyh0c2RuLCBjZW50cmFsLT5iYXNlLCBzaXplb2YoaHBkYXRhX3QpLAorCSAgICBDQUNIRUxJTkUp OworfQorCitocGRhdGFfdCAqCitocGFfY2VudHJhbF9leHRyYWN0KHRzZG5fdCAqdHNkbiwgaHBh X2NlbnRyYWxfdCAqY2VudHJhbCwgc2l6ZV90IHNpemUsCisgICAgYm9vbCAqb29tKSB7CisJLyog RG9uJ3QgeWV0IHN1cHBvcnQgYmlnIGFsbG9jYXRpb25zOyB0aGVzZSBzaG91bGQgZ2V0IGZpbHRl cmVkIG91dC4gKi8KKwlhc3NlcnQoc2l6ZSA8PSBIVUdFUEFHRSk7CisJLyoKKwkgKiBTaG91bGQg b25seSB0cnkgdG8gZXh0cmFjdCBmcm9tIHRoZSBjZW50cmFsIGFsbG9jYXRvciBpZiB0aGUgbG9j YWwKKwkgKiBzaGFyZCBpcyBleGhhdXN0ZWQuICBXZSBzaG91bGQgaG9sZCB0aGUgZ3Jvd19tdHgg b24gdGhhdCBzaGFyZC4KKwkgKi8KKwl3aXRuZXNzX2Fzc2VydF9wb3NpdGl2ZV9kZXB0aF90b19y YW5rKAorCSAgICB0c2RuX3dpdG5lc3NfdHNkcF9nZXQodHNkbiksIFdJVE5FU1NfUkFOS19IUEFf U0hBUkRfR1JPVyk7CisKKwltYWxsb2NfbXV0ZXhfbG9jayh0c2RuLCAmY2VudHJhbC0+Z3Jvd19t dHgpOworCSpvb20gPSBmYWxzZTsKKworCWhwZGF0YV90ICpwcyA9IE5VTEw7CisKKwkvKiBJcyBl ZGVuIGEgcGVyZmVjdCBmaXQ/ICovCisJaWYgKGNlbnRyYWwtPmVkZW4gIT0gTlVMTCAmJiBjZW50 cmFsLT5lZGVuX2xlbiA9PSBIVUdFUEFHRSkgeworCQlwcyA9IGhwYV9hbGxvY19wcyh0c2RuLCBj ZW50cmFsKTsKKwkJaWYgKHBzID09IE5VTEwpIHsKKwkJCSpvb20gPSB0cnVlOworCQkJbWFsbG9j X211dGV4X3VubG9jayh0c2RuLCAmY2VudHJhbC0+Z3Jvd19tdHgpOworCQkJcmV0dXJuIE5VTEw7 CisJCX0KKwkJaHBkYXRhX2luaXQocHMsIGNlbnRyYWwtPmVkZW4sIGNlbnRyYWwtPmFnZV9jb3Vu dGVyKyspOworCQljZW50cmFsLT5lZGVuID0gTlVMTDsKKwkJY2VudHJhbC0+ZWRlbl9sZW4gPSAw OworCQltYWxsb2NfbXV0ZXhfdW5sb2NrKHRzZG4sICZjZW50cmFsLT5ncm93X210eCk7CisJCXJl dHVybiBwczsKKwl9CisKKwkvKgorCSAqIFdlJ3JlIGFib3V0IHRvIHRyeSB0byBhbGxvY2F0ZSBm cm9tIGVkZW4gYnkgc3BsaXR0aW5nLiAgSWYgZWRlbiBpcworCSAqIE5VTEwsIHdlIGhhdmUgdG8g YWxsb2NhdGUgaXQgdG9vLiAgT3RoZXJ3aXNlLCB3ZSBqdXN0IGhhdmUgdG8KKwkgKiBhbGxvY2F0 ZSBhbiBlZGF0YV90IGZvciB0aGUgbmV3IHBzc2V0LgorCSAqLworCWlmIChjZW50cmFsLT5lZGVu ID09IE5VTEwpIHsKKwkJLyoKKwkJICogRHVyaW5nIGRldmVsb3BtZW50LCB3ZSdyZSBwcmltYXJp bHkgY29uY2VybmVkIHdpdGggc3lzdGVtcworCQkgKiB3aXRoIG92ZXJjb21taXQuICBFdmVudHVh bGx5LCB3ZSBzaG91bGQgYmUgbW9yZSBjYXJlZnVsIGhlcmUuCisJCSAqLworCQlib29sIGNvbW1p dCA9IHRydWU7CisJCS8qIEFsbG9jYXRlIGFkZHJlc3Mgc3BhY2UsIGJhaWxpbmcgaWYgd2UgZmFp bC4gKi8KKwkJdm9pZCAqbmV3X2VkZW4gPSBwYWdlc19tYXAoTlVMTCwgSFBBX0VERU5fU0laRSwg SFVHRVBBR0UsCisJCSAgICAmY29tbWl0KTsKKwkJaWYgKG5ld19lZGVuID09IE5VTEwpIHsKKwkJ CSpvb20gPSB0cnVlOworCQkJbWFsbG9jX211dGV4X3VubG9jayh0c2RuLCAmY2VudHJhbC0+Z3Jv d19tdHgpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwkJcHMgPSBocGFfYWxsb2NfcHModHNkbiwg Y2VudHJhbCk7CisJCWlmIChwcyA9PSBOVUxMKSB7CisJCQlwYWdlc191bm1hcChuZXdfZWRlbiwg SFBBX0VERU5fU0laRSk7CisJCQkqb29tID0gdHJ1ZTsKKwkJCW1hbGxvY19tdXRleF91bmxvY2so dHNkbiwgJmNlbnRyYWwtPmdyb3dfbXR4KTsKKwkJCXJldHVybiBOVUxMOworCQl9CisJCWNlbnRy YWwtPmVkZW4gPSBuZXdfZWRlbjsKKwkJY2VudHJhbC0+ZWRlbl9sZW4gPSBIUEFfRURFTl9TSVpF OworCX0gZWxzZSB7CisJCS8qIEVkZW4gaXMgYWxyZWFkeSBub25lbXB0eTsgb25seSBuZWVkIGFu IGVkYXRhIGZvciBwcy4gKi8KKwkJcHMgPSBocGFfYWxsb2NfcHModHNkbiwgY2VudHJhbCk7CisJ CWlmIChwcyA9PSBOVUxMKSB7CisJCQkqb29tID0gdHJ1ZTsKKwkJCW1hbGxvY19tdXRleF91bmxv Y2sodHNkbiwgJmNlbnRyYWwtPmdyb3dfbXR4KTsKKwkJCXJldHVybiBOVUxMOworCQl9CisJfQor CWFzc2VydChwcyAhPSBOVUxMKTsKKwlhc3NlcnQoY2VudHJhbC0+ZWRlbiAhPSBOVUxMKTsKKwlh c3NlcnQoY2VudHJhbC0+ZWRlbl9sZW4gPiBIVUdFUEFHRSk7CisJYXNzZXJ0KGNlbnRyYWwtPmVk ZW5fbGVuICUgSFVHRVBBR0UgPT0gMCk7CisJYXNzZXJ0KEhVR0VQQUdFX0FERFIyQkFTRShjZW50 cmFsLT5lZGVuKSA9PSBjZW50cmFsLT5lZGVuKTsKKworCWhwZGF0YV9pbml0KHBzLCBjZW50cmFs LT5lZGVuLCBjZW50cmFsLT5hZ2VfY291bnRlcisrKTsKKworCWNoYXIgKmVkZW5fY2hhciA9IChj aGFyICopY2VudHJhbC0+ZWRlbjsKKwllZGVuX2NoYXIgKz0gSFVHRVBBR0U7CisJY2VudHJhbC0+ ZWRlbiA9ICh2b2lkICopZWRlbl9jaGFyOworCWNlbnRyYWwtPmVkZW5fbGVuIC09IEhVR0VQQUdF OworCisJbWFsbG9jX211dGV4X3VubG9jayh0c2RuLCAmY2VudHJhbC0+Z3Jvd19tdHgpOworCisJ cmV0dXJuIHBzOworfQorCitib29sCitocGFfc2hhcmRfaW5pdChocGFfc2hhcmRfdCAqc2hhcmQs IGhwYV9jZW50cmFsX3QgKmNlbnRyYWwsIGVtYXBfdCAqZW1hcCwKKyAgICBiYXNlX3QgKmJhc2Us IGVkYXRhX2NhY2hlX3QgKmVkYXRhX2NhY2hlLCB1bnNpZ25lZCBpbmQsCisgICAgY29uc3QgaHBh X3NoYXJkX29wdHNfdCAqb3B0cykgeworCS8qIG1hbGxvY19jb25mIHByb2Nlc3Npbmcgc2hvdWxk IGhhdmUgZmlsdGVyZWQgb3V0IHRoZXNlIGNhc2VzLiAqLworCWFzc2VydChocGFfc3VwcG9ydGVk KCkpOworCWJvb2wgZXJyOworCWVyciA9IG1hbGxvY19tdXRleF9pbml0KCZzaGFyZC0+Z3Jvd19t dHgsICJocGFfc2hhcmRfZ3JvdyIsCisJICAgIFdJVE5FU1NfUkFOS19IUEFfU0hBUkRfR1JPVywg bWFsbG9jX211dGV4X3JhbmtfZXhjbHVzaXZlKTsKKwlpZiAoZXJyKSB7CisJCXJldHVybiB0cnVl OworCX0KKwllcnIgPSBtYWxsb2NfbXV0ZXhfaW5pdCgmc2hhcmQtPm10eCwgImhwYV9zaGFyZCIs CisJICAgIFdJVE5FU1NfUkFOS19IUEFfU0hBUkQsIG1hbGxvY19tdXRleF9yYW5rX2V4Y2x1c2l2 ZSk7CisJaWYgKGVycikgeworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwlhc3NlcnQoZWRhdGFfY2Fj aGUgIT0gTlVMTCk7CisJc2hhcmQtPmNlbnRyYWwgPSBjZW50cmFsOworCXNoYXJkLT5iYXNlID0g YmFzZTsKKwllZGF0YV9jYWNoZV9mYXN0X2luaXQoJnNoYXJkLT5lY2YsIGVkYXRhX2NhY2hlKTsK Kwlwc3NldF9pbml0KCZzaGFyZC0+cHNzZXQpOworCXNoYXJkLT5hZ2VfY291bnRlciA9IDA7CisJ c2hhcmQtPmluZCA9IGluZDsKKwlzaGFyZC0+ZW1hcCA9IGVtYXA7CisKKwlzaGFyZC0+b3B0cyA9 ICpvcHRzOworCisJc2hhcmQtPm5wZW5kaW5nX3B1cmdlID0gMDsKKwluc3RpbWVfaW5pdF96ZXJv KCZzaGFyZC0+bGFzdF9wdXJnZSk7CisKKwlzaGFyZC0+c3RhdHMubnB1cmdlX3Bhc3NlcyA9IDA7 CisJc2hhcmQtPnN0YXRzLm5wdXJnZXMgPSAwOworCXNoYXJkLT5zdGF0cy5uaHVnaWZpZXMgPSAw OworCXNoYXJkLT5zdGF0cy5uZGVodWdpZmllcyA9IDA7CisKKwkvKgorCSAqIEZpbGwgdGhlc2Ug aW4gbGFzdCwgc28gdGhhdCBpZiBhbiBocGFfc2hhcmQgZ2V0cyB1c2VkIGRlc3BpdGUKKwkgKiBp bml0aWFsaXphdGlvbiBmYWlsaW5nLCB3ZSdsbCBhdCBsZWFzdCBjcmFzaCBpbnN0ZWFkIG9mIGp1 c3QKKwkgKiBvcGVyYXRpbmcgb24gY29ycnVwdGVkIGRhdGEuCisJICovCisJc2hhcmQtPnBhaS5h bGxvYyA9ICZocGFfYWxsb2M7CisJc2hhcmQtPnBhaS5hbGxvY19iYXRjaCA9ICZocGFfYWxsb2Nf YmF0Y2g7CisJc2hhcmQtPnBhaS5leHBhbmQgPSAmaHBhX2V4cGFuZDsKKwlzaGFyZC0+cGFpLnNo cmluayA9ICZocGFfc2hyaW5rOworCXNoYXJkLT5wYWkuZGFsbG9jID0gJmhwYV9kYWxsb2M7CisJ c2hhcmQtPnBhaS5kYWxsb2NfYmF0Y2ggPSAmaHBhX2RhbGxvY19iYXRjaDsKKwlzaGFyZC0+cGFp LnRpbWVfdW50aWxfZGVmZXJyZWRfd29yayA9ICZocGFfdGltZV91bnRpbF9kZWZlcnJlZF93b3Jr OworCisJaHBhX2RvX2NvbnNpc3RlbmN5X2NoZWNrcyhzaGFyZCk7CisKKwlyZXR1cm4gZmFsc2U7 Cit9CisKKy8qCisgKiBOb3RlIHRoYXQgdGhlIHN0YXRzIGZ1bmN0aW9ucyBoZXJlIGZvbGxvdyB0 aGUgdXN1YWwgc3RhdHMgbmFtaW5nIGNvbnZlbnRpb25zOworICogIm1lcmdlIiBvYnRhaW5zIHRo ZSBzdGF0cyBmcm9tIHNvbWUgbGl2ZSBvYmplY3Qgb2YgaW5zdGFuY2UsIHdoaWxlICJhY2N1bSIK KyAqIG9ubHkgY29tYmluZXMgdGhlIHN0YXRzIGZyb20gb25lIHN0YXRzIG9iamV0IHRvIGFub3Ro ZXIuICBIZW5jZSB0aGUgbGFjayBvZgorICogbG9ja2luZyBoZXJlLgorICovCitzdGF0aWMgdm9p ZAoraHBhX3NoYXJkX25vbmRlcml2ZWRfc3RhdHNfYWNjdW0oaHBhX3NoYXJkX25vbmRlcml2ZWRf c3RhdHNfdCAqZHN0LAorICAgIGhwYV9zaGFyZF9ub25kZXJpdmVkX3N0YXRzX3QgKnNyYykgewor CWRzdC0+bnB1cmdlX3Bhc3NlcyArPSBzcmMtPm5wdXJnZV9wYXNzZXM7CisJZHN0LT5ucHVyZ2Vz ICs9IHNyYy0+bnB1cmdlczsKKwlkc3QtPm5odWdpZmllcyArPSBzcmMtPm5odWdpZmllczsKKwlk c3QtPm5kZWh1Z2lmaWVzICs9IHNyYy0+bmRlaHVnaWZpZXM7Cit9CisKK3ZvaWQKK2hwYV9zaGFy ZF9zdGF0c19hY2N1bShocGFfc2hhcmRfc3RhdHNfdCAqZHN0LCBocGFfc2hhcmRfc3RhdHNfdCAq c3JjKSB7CisJcHNzZXRfc3RhdHNfYWNjdW0oJmRzdC0+cHNzZXRfc3RhdHMsICZzcmMtPnBzc2V0 X3N0YXRzKTsKKwlocGFfc2hhcmRfbm9uZGVyaXZlZF9zdGF0c19hY2N1bSgmZHN0LT5ub25kZXJp dmVkX3N0YXRzLAorCSAgICAmc3JjLT5ub25kZXJpdmVkX3N0YXRzKTsKK30KKwordm9pZAoraHBh X3NoYXJkX3N0YXRzX21lcmdlKHRzZG5fdCAqdHNkbiwgaHBhX3NoYXJkX3QgKnNoYXJkLAorICAg IGhwYV9zaGFyZF9zdGF0c190ICpkc3QpIHsKKwlocGFfZG9fY29uc2lzdGVuY3lfY2hlY2tzKHNo YXJkKTsKKworCW1hbGxvY19tdXRleF9sb2NrKHRzZG4sICZzaGFyZC0+Z3Jvd19tdHgpOworCW1h bGxvY19tdXRleF9sb2NrKHRzZG4sICZzaGFyZC0+bXR4KTsKKwlwc3NldF9zdGF0c19hY2N1bSgm ZHN0LT5wc3NldF9zdGF0cywgJnNoYXJkLT5wc3NldC5zdGF0cyk7CisJaHBhX3NoYXJkX25vbmRl cml2ZWRfc3RhdHNfYWNjdW0oJmRzdC0+bm9uZGVyaXZlZF9zdGF0cywgJnNoYXJkLT5zdGF0cyk7 CisJbWFsbG9jX211dGV4X3VubG9jayh0c2RuLCAmc2hhcmQtPm10eCk7CisJbWFsbG9jX211dGV4 X3VubG9jayh0c2RuLCAmc2hhcmQtPmdyb3dfbXR4KTsKK30KKworc3RhdGljIGJvb2wKK2hwYV9n b29kX2h1Z2lmaWNhdGlvbl9jYW5kaWRhdGUoaHBhX3NoYXJkX3QgKnNoYXJkLCBocGRhdGFfdCAq cHMpIHsKKwkvKgorCSAqIE5vdGUgdGhhdCB0aGlzIG5lZWRzIHRvIGJlID49IHJhdGhlciB0aGFu IGp1c3QgPiwgYmVjYXVzZSBvZiB0aGUKKwkgKiBpbXBvcnRhbnQgc3BlY2lhbCBjYXNlIGluIHdo aWNoIHRoZSBodWdpZmljYXRpb24gdGhyZXNob2xkIGlzIGV4YWN0bHkKKwkgKiBIVUdFUEFHRS4K KwkgKi8KKwlyZXR1cm4gaHBkYXRhX25hY3RpdmVfZ2V0KHBzKSAqIFBBR0UKKwkgICAgPj0gc2hh cmQtPm9wdHMuaHVnaWZpY2F0aW9uX3RocmVzaG9sZDsKK30KKworc3RhdGljIHNpemVfdAoraHBh X2FkanVzdGVkX25kaXJ0eSh0c2RuX3QgKnRzZG4sIGhwYV9zaGFyZF90ICpzaGFyZCkgeworCW1h bGxvY19tdXRleF9hc3NlcnRfb3duZXIodHNkbiwgJnNoYXJkLT5tdHgpOworCXJldHVybiBwc3Nl dF9uZGlydHkoJnNoYXJkLT5wc3NldCkgLSBzaGFyZC0+bnBlbmRpbmdfcHVyZ2U7Cit9CisKK3N0 YXRpYyBzaXplX3QKK2hwYV9uZGlydHlfbWF4KHRzZG5fdCAqdHNkbiwgaHBhX3NoYXJkX3QgKnNo YXJkKSB7CisJbWFsbG9jX211dGV4X2Fzc2VydF9vd25lcih0c2RuLCAmc2hhcmQtPm10eCk7CisJ aWYgKHNoYXJkLT5vcHRzLmRpcnR5X211bHQgPT0gKGZ4cF90KS0xKSB7CisJCXJldHVybiAoc2l6 ZV90KS0xOworCX0KKwlyZXR1cm4gZnhwX211bF9mcmFjKHBzc2V0X25hY3RpdmUoJnNoYXJkLT5w c3NldCksCisJICAgIHNoYXJkLT5vcHRzLmRpcnR5X211bHQpOworfQorCitzdGF0aWMgYm9vbAor aHBhX2h1Z2lmeV9ibG9ja2VkX2J5X25kaXJ0eSh0c2RuX3QgKnRzZG4sIGhwYV9zaGFyZF90ICpz aGFyZCkgeworCW1hbGxvY19tdXRleF9hc3NlcnRfb3duZXIodHNkbiwgJnNoYXJkLT5tdHgpOwor CWhwZGF0YV90ICp0b19odWdpZnkgPSBwc3NldF9waWNrX2h1Z2lmeSgmc2hhcmQtPnBzc2V0KTsK KwlpZiAodG9faHVnaWZ5ID09IE5VTEwpIHsKKwkJcmV0dXJuIGZhbHNlOworCX0KKwlyZXR1cm4g aHBhX2FkanVzdGVkX25kaXJ0eSh0c2RuLCBzaGFyZCkKKwkgICAgKyBocGRhdGFfbnJldGFpbmVk X2dldCh0b19odWdpZnkpID4gaHBhX25kaXJ0eV9tYXgodHNkbiwgc2hhcmQpOworfQorCitzdGF0 aWMgYm9vbAoraHBhX3Nob3VsZF9wdXJnZSh0c2RuX3QgKnRzZG4sIGhwYV9zaGFyZF90ICpzaGFy ZCkgeworCW1hbGxvY19tdXRleF9hc3NlcnRfb3duZXIodHNkbiwgJnNoYXJkLT5tdHgpOworCWlm IChocGFfYWRqdXN0ZWRfbmRpcnR5KHRzZG4sIHNoYXJkKSA+IGhwYV9uZGlydHlfbWF4KHRzZG4s IHNoYXJkKSkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9CisJaWYgKGhwYV9odWdpZnlfYmxvY2tlZF9i eV9uZGlydHkodHNkbiwgc2hhcmQpKSB7CisJCXJldHVybiB0cnVlOworCX0KKwlyZXR1cm4gZmFs c2U7Cit9CisKK3N0YXRpYyB2b2lkCitocGFfdXBkYXRlX3B1cmdlX2h1Z2lmeV9lbGlnaWJpbGl0 eSh0c2RuX3QgKnRzZG4sIGhwYV9zaGFyZF90ICpzaGFyZCwKKyAgICBocGRhdGFfdCAqcHMpIHsK KwltYWxsb2NfbXV0ZXhfYXNzZXJ0X293bmVyKHRzZG4sICZzaGFyZC0+bXR4KTsKKwlpZiAoaHBk YXRhX2NoYW5naW5nX3N0YXRlX2dldChwcykpIHsKKwkJaHBkYXRhX3B1cmdlX2FsbG93ZWRfc2V0 KHBzLCBmYWxzZSk7CisJCWhwZGF0YV9kaXNhbGxvd19odWdpZnkocHMpOworCQlyZXR1cm47CisJ fQorCS8qCisJICogSHVnZXBhZ2VzIGFyZSBkaXN0aW5jdGx5IGNvc3RseSB0byBwdXJnZSwgc28g dHJ5IHRvIGF2b2lkIGl0IHVubGVzcworCSAqIHRoZXkncmUgKnBhcnRpY3VsYXJseSogZnVsbCBv ZiBkaXJ0eSBwYWdlcy4gIEV2ZW50dWFsbHksIHdlIHNob3VsZAorCSAqIHVzZSBhIHNtYXJ0ZXIg LyBtb3JlIGR5bmFtaWMgaGV1cmlzdGljIGZvciBzaXR1YXRpb25zIHdoZXJlIHdlIGhhdmUKKwkg KiB0byBtYW51YWxseSBodWdpZnkuCisJICoKKwkgKiBJbiBzaXR1YXRpb25zIHdoZXJlIHdlIGRv bid0IG1hbnVhbGx5IGh1Z2lmeSwgdGhpcyBwcm9ibGVtIGlzCisJICogcmVkdWNlZC4gIFRoZSAi YmFkIiBzaXR1YXRpb24gd2UncmUgdHJ5aW5nIHRvIGF2b2lkIGlzIG9uZSdzIHRoYXQncworCSAq IGNvbW1vbiBpbiBzb21lIExpbnV4IGNvbmZpZ3VyYXRpb25zICh3aGVyZSBib3RoIGVuYWJsZWQg YW5kIGRlZnJhZworCSAqIGFyZSBzZXQgdG8gbWFkdmlzZSkgdGhhdCBjYW4gbGVhZCB0byBsb25n IGxhdGVuY3kgc3Bpa2VzIG9uIHRoZSBmaXJzdAorCSAqIGFjY2VzcyBhZnRlciBhIGh1Z2lmaWNh dGlvbi4gIFRoZSBpZGVhbCBwb2xpY3kgaW4gc3VjaCBjb25maWd1cmF0aW9ucworCSAqIGlzIHBy b2JhYmx5IHRpbWUtYmFzZWQgZm9yIGJvdGggcHVyZ2luZyBhbmQgaHVnaWZ5aW5nOyBvbmx5IGh1 Z2lmeSBhCisJICogaHVnZXBhZ2UgaWYgaXQncyBtZXQgdGhlIGNyaXRlcmlhIGZvciBzb21lIGV4 dGVuZGVkIHBlcmlvZCBvZiB0aW1lLAorCSAqIGFuZCBvbmx5IGRlaHVnaWZ5IGl0IGlmIGl0J3Mg ZmFpbGVkIHRvIG1lZXQgdGhlIGNyaXRlcmlhIGZvciBhbgorCSAqIGV4dGVuZGVkIHBlcmlvZCBv ZiB0aW1lLiAgV2hlbiBiYWNrZ3JvdW5kIHRocmVhZHMgYXJlIG9uLCB3ZSBzaG91bGQKKwkgKiB0 cnkgdG8gdGFrZSB0aGlzIGhpdCBvbiBvbmUgb2YgdGhlbSwgYXMgd2VsbC4KKwkgKgorCSAqIEkg dGhpbmsgdGhlIGlkZWFsIHNldHRpbmcgaXMgVEhQIGFsd2F5cyBlbmFibGVkLCBhbmQgZGVmcmFn IHNldCB0bworCSAqIGRlZmVycmVkOyBpbiB0aGF0IGNhc2Ugd2UgZG9uJ3QgbmVlZCBhbnkgZXhw bGljaXQgY2FsbHMgb24gdGhlCisJICogYWxsb2NhdG9yJ3MgZW5kIGF0IGFsbDsgd2UganVzdCB0 cnkgdG8gcGFjayBhbGxvY2F0aW9ucyBpbiBhCisJICogaHVnZXBhZ2UtZnJpZW5kbHkgbWFubmVy IGFuZCBsZXQgdGhlIE9TIGh1Z2lmeSBpbiB0aGUgYmFja2dyb3VuZC4KKwkgKi8KKwlocGRhdGFf cHVyZ2VfYWxsb3dlZF9zZXQocHMsIGhwZGF0YV9uZGlydHlfZ2V0KHBzKSA+IDApOworCWlmICho cGFfZ29vZF9odWdpZmljYXRpb25fY2FuZGlkYXRlKHNoYXJkLCBwcykKKwkgICAgJiYgIWhwZGF0 YV9odWdlX2dldChwcykpIHsKKwkJbnN0aW1lX3Qgbm93OworCQlzaGFyZC0+Y2VudHJhbC0+aG9v a3MuY3VydGltZSgmbm93LCAvKiBmaXJzdF9yZWFkaW5nICovIHRydWUpOworCQlocGRhdGFfYWxs b3dfaHVnaWZ5KHBzLCBub3cpOworCX0KKwkvKgorCSAqIE9uY2UgYSBodWdlcGFnZSBoYXMgYmVj b21lIGVsaWdpYmxlIGZvciBodWdpZmljYXRpb24sIHdlIGRvbid0IG1hcmsKKwkgKiBpdCBhcyBp bmVsaWdpYmxlIGp1c3QgYmVjYXVzZSBpdCBzdG9wcyBtZWV0aW5nIHRoZSBjcml0ZXJpYSAodGhp cworCSAqIGNvdWxkIGxlYWQgdG8gc2l0dWF0aW9ucyB3aGVyZSBhIGh1Z2VwYWdlIHRoYXQgc3Bl bmRzIG1vc3Qgb2YgaXRzCisJICogdGltZSBtZWV0aW5nIHRoZSBjcml0ZXJpYSBuZXZlciBxdWl0 ZSBnZXR0aW5nIGh1Z2lmaWVkIGlmIHRoZXJlIGFyZQorCSAqIGludGVydmVuaW5nIGRlYWxsb2Nh dGlvbnMpLiAgVGhlIGlkZWEgaXMgdGhhdCB0aGUgaHVnaWZpY2F0aW9uIGRlbGF5CisJICogd2ls bCBhbGxvdyB0aGVtIHRvIGdldCBwdXJnZWQsIHJlc2V0aW5nIHRoZWlyICJodWdpZnktYWxsb3dl ZCIgYml0LgorCSAqIElmIHRoZXkgZG9uJ3QgZ2V0IHB1cmdlZCwgdGhlbiB0aGUgaHVnaWZpY2F0 aW9uIGlzbid0IGh1cnRpbmcgYW5kCisJICogbWlnaHQgaGVscC4gIEFzIGFuIGV4Y2VwdGlvbiwg d2UgZG9uJ3QgaHVnaWZ5IGh1Z2VwYWdlcyB0aGF0IGFyZSBub3cKKwkgKiBlbXB0eTsgaXQgZGVm aW5pdGVseSBkb2Vzbid0IGhlbHAgdGhlcmUgdW50aWwgdGhlIGh1Z2VwYWdlIGdldHMKKwkgKiBy ZXVzZWQsIHdoaWNoIGlzIGxpa2VseSBub3QgZm9yIGEgd2hpbGUuCisJICovCisJaWYgKGhwZGF0 YV9uYWN0aXZlX2dldChwcykgPT0gMCkgeworCQlocGRhdGFfZGlzYWxsb3dfaHVnaWZ5KHBzKTsK Kwl9Cit9CisKK3N0YXRpYyBib29sCitocGFfc2hhcmRfaGFzX2RlZmVycmVkX3dvcmsodHNkbl90 ICp0c2RuLCBocGFfc2hhcmRfdCAqc2hhcmQpIHsKKwltYWxsb2NfbXV0ZXhfYXNzZXJ0X293bmVy KHRzZG4sICZzaGFyZC0+bXR4KTsKKwlocGRhdGFfdCAqdG9faHVnaWZ5ID0gcHNzZXRfcGlja19o dWdpZnkoJnNoYXJkLT5wc3NldCk7CisJcmV0dXJuIHRvX2h1Z2lmeSAhPSBOVUxMIHx8IGhwYV9z aG91bGRfcHVyZ2UodHNkbiwgc2hhcmQpOworfQorCisvKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90 IHdlIHB1cmdlZCBhbnl0aGluZy4gKi8KK3N0YXRpYyBib29sCitocGFfdHJ5X3B1cmdlKHRzZG5f dCAqdHNkbiwgaHBhX3NoYXJkX3QgKnNoYXJkKSB7CisJbWFsbG9jX211dGV4X2Fzc2VydF9vd25l cih0c2RuLCAmc2hhcmQtPm10eCk7CisKKwlocGRhdGFfdCAqdG9fcHVyZ2UgPSBwc3NldF9waWNr X3B1cmdlKCZzaGFyZC0+cHNzZXQpOworCWlmICh0b19wdXJnZSA9PSBOVUxMKSB7CisJCXJldHVy biBmYWxzZTsKKwl9CisJYXNzZXJ0KGhwZGF0YV9wdXJnZV9hbGxvd2VkX2dldCh0b19wdXJnZSkp OworCWFzc2VydCghaHBkYXRhX2NoYW5naW5nX3N0YXRlX2dldCh0b19wdXJnZSkpOworCisJLyoK KwkgKiBEb24ndCBsZXQgYW55b25lIGVsc2UgcHVyZ2Ugb3IgaHVnaWZ5IHRoaXMgcGFnZSB3aGls ZQorCSAqIHdlJ3JlIHB1cmdpbmcgaXQgKGFsbG9jYXRpb25zIGFuZCBkZWFsbG9jYXRpb25zIGFy ZQorCSAqIE9LKS4KKwkgKi8KKwlwc3NldF91cGRhdGVfYmVnaW4oJnNoYXJkLT5wc3NldCwgdG9f cHVyZ2UpOworCWFzc2VydChocGRhdGFfYWxsb2NfYWxsb3dlZF9nZXQodG9fcHVyZ2UpKTsKKwlo cGRhdGFfbWlkX3B1cmdlX3NldCh0b19wdXJnZSwgdHJ1ZSk7CisJaHBkYXRhX3B1cmdlX2FsbG93 ZWRfc2V0KHRvX3B1cmdlLCBmYWxzZSk7CisJaHBkYXRhX2Rpc2FsbG93X2h1Z2lmeSh0b19wdXJn ZSk7CisJLyoKKwkgKiBVbmxpa2Ugd2l0aCBodWdpZmljYXRpb24gKHdoZXJlIGNvbmN1cnJlbnQK KwkgKiBhbGxvY2F0aW9ucyBhcmUgYWxsb3dlZCksIGNvbmN1cnJlbnQgYWxsb2NhdGlvbiBvdXQK KwkgKiBvZiBhIGh1Z2VwYWdlIGJlaW5nIHB1cmdlZCBpcyB1bnNhZmU7IHdlIG1pZ2h0IGhhbmQK KwkgKiBvdXQgYW4gZXh0ZW50IGZvciBhbiBhbGxvY2F0aW9uIGFuZCB0aGVuIHB1cmdlIGl0CisJ ICogKGNsZWFyaW5nIG91dCB1c2VyIGRhdGEpLgorCSAqLworCWhwZGF0YV9hbGxvY19hbGxvd2Vk X3NldCh0b19wdXJnZSwgZmFsc2UpOworCXBzc2V0X3VwZGF0ZV9lbmQoJnNoYXJkLT5wc3NldCwg dG9fcHVyZ2UpOworCisJLyogR2F0aGVyIGFsbCB0aGUgbWV0YWRhdGEgd2UnbGwgbmVlZCBkdXJp bmcgdGhlIHB1cmdlLiAqLworCWJvb2wgZGVodWdpZnkgPSBocGRhdGFfaHVnZV9nZXQodG9fcHVy Z2UpOworCWhwZGF0YV9wdXJnZV9zdGF0ZV90IHB1cmdlX3N0YXRlOworCXNpemVfdCBudW1fdG9f cHVyZ2UgPSBocGRhdGFfcHVyZ2VfYmVnaW4odG9fcHVyZ2UsICZwdXJnZV9zdGF0ZSk7CisKKwlz aGFyZC0+bnBlbmRpbmdfcHVyZ2UgKz0gbnVtX3RvX3B1cmdlOworCisJbWFsbG9jX211dGV4X3Vu bG9jayh0c2RuLCAmc2hhcmQtPm10eCk7CisKKwkvKiBBY3R1YWxseSBkbyB0aGUgcHVyZ2luZywg bm93IHRoYXQgdGhlIGxvY2sgaXMgZHJvcHBlZC4gKi8KKwlpZiAoZGVodWdpZnkpIHsKKwkJc2hh cmQtPmNlbnRyYWwtPmhvb2tzLmRlaHVnaWZ5KGhwZGF0YV9hZGRyX2dldCh0b19wdXJnZSksCisJ CSAgICBIVUdFUEFHRSk7CisJfQorCXNpemVfdCB0b3RhbF9wdXJnZWQgPSAwOworCXVpbnQ2NF90 IHB1cmdlc190aGlzX3Bhc3MgPSAwOworCXZvaWQgKnB1cmdlX2FkZHI7CisJc2l6ZV90IHB1cmdl X3NpemU7CisJd2hpbGUgKGhwZGF0YV9wdXJnZV9uZXh0KHRvX3B1cmdlLCAmcHVyZ2Vfc3RhdGUs ICZwdXJnZV9hZGRyLAorCSAgICAmcHVyZ2Vfc2l6ZSkpIHsKKwkJdG90YWxfcHVyZ2VkICs9IHB1 cmdlX3NpemU7CisJCWFzc2VydCh0b3RhbF9wdXJnZWQgPD0gSFVHRVBBR0UpOworCQlwdXJnZXNf dGhpc19wYXNzKys7CisJCXNoYXJkLT5jZW50cmFsLT5ob29rcy5wdXJnZShwdXJnZV9hZGRyLCBw dXJnZV9zaXplKTsKKwl9CisKKwltYWxsb2NfbXV0ZXhfbG9jayh0c2RuLCAmc2hhcmQtPm10eCk7 CisJLyogVGhlIHNoYXJkIHVwZGF0ZXMgKi8KKwlzaGFyZC0+bnBlbmRpbmdfcHVyZ2UgLT0gbnVt X3RvX3B1cmdlOworCXNoYXJkLT5zdGF0cy5ucHVyZ2VfcGFzc2VzKys7CisJc2hhcmQtPnN0YXRz Lm5wdXJnZXMgKz0gcHVyZ2VzX3RoaXNfcGFzczsKKwlzaGFyZC0+Y2VudHJhbC0+aG9va3MuY3Vy dGltZSgmc2hhcmQtPmxhc3RfcHVyZ2UsCisJICAgIC8qIGZpcnN0X3JlYWRpbmcgKi8gZmFsc2Up OworCWlmIChkZWh1Z2lmeSkgeworCQlzaGFyZC0+c3RhdHMubmRlaHVnaWZpZXMrKzsKKwl9CisK KwkvKiBUaGUgaHBkYXRhIHVwZGF0ZXMuICovCisJcHNzZXRfdXBkYXRlX2JlZ2luKCZzaGFyZC0+ cHNzZXQsIHRvX3B1cmdlKTsKKwlpZiAoZGVodWdpZnkpIHsKKwkJaHBkYXRhX2RlaHVnaWZ5KHRv X3B1cmdlKTsKKwl9CisJaHBkYXRhX3B1cmdlX2VuZCh0b19wdXJnZSwgJnB1cmdlX3N0YXRlKTsK KwlocGRhdGFfbWlkX3B1cmdlX3NldCh0b19wdXJnZSwgZmFsc2UpOworCisJaHBkYXRhX2FsbG9j X2FsbG93ZWRfc2V0KHRvX3B1cmdlLCB0cnVlKTsKKwlocGFfdXBkYXRlX3B1cmdlX2h1Z2lmeV9l bGlnaWJpbGl0eSh0c2RuLCBzaGFyZCwgdG9fcHVyZ2UpOworCisJcHNzZXRfdXBkYXRlX2VuZCgm c2hhcmQtPnBzc2V0LCB0b19wdXJnZSk7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworLyogUmV0dXJu cyB3aGV0aGVyIG9yIG5vdCB3ZSBodWdpZmllZCBhbnl0aGluZy4gKi8KK3N0YXRpYyBib29sCito cGFfdHJ5X2h1Z2lmeSh0c2RuX3QgKnRzZG4sIGhwYV9zaGFyZF90ICpzaGFyZCkgeworCW1hbGxv Y19tdXRleF9hc3NlcnRfb3duZXIodHNkbiwgJnNoYXJkLT5tdHgpOworCisJaWYgKGhwYV9odWdp ZnlfYmxvY2tlZF9ieV9uZGlydHkodHNkbiwgc2hhcmQpKSB7CisJCXJldHVybiBmYWxzZTsKKwl9 CisKKwlocGRhdGFfdCAqdG9faHVnaWZ5ID0gcHNzZXRfcGlja19odWdpZnkoJnNoYXJkLT5wc3Nl dCk7CisJaWYgKHRvX2h1Z2lmeSA9PSBOVUxMKSB7CisJCXJldHVybiBmYWxzZTsKKwl9CisJYXNz ZXJ0KGhwZGF0YV9odWdpZnlfYWxsb3dlZF9nZXQodG9faHVnaWZ5KSk7CisJYXNzZXJ0KCFocGRh dGFfY2hhbmdpbmdfc3RhdGVfZ2V0KHRvX2h1Z2lmeSkpOworCisJLyogTWFrZSBzdXJlIHRoYXQg aXQncyBiZWVuIGh1Z2lmaWFibGUgZm9yIGxvbmcgZW5vdWdoLiAqLworCW5zdGltZV90IHRpbWVf aHVnaWZ5X2FsbG93ZWQgPSBocGRhdGFfdGltZV9odWdpZnlfYWxsb3dlZCh0b19odWdpZnkpOwor CXVpbnQ2NF90IG1pbGxpcyA9IHNoYXJkLT5jZW50cmFsLT5ob29rcy5tc19zaW5jZSgmdGltZV9o dWdpZnlfYWxsb3dlZCk7CisJaWYgKG1pbGxpcyA8IHNoYXJkLT5vcHRzLmh1Z2lmeV9kZWxheV9t cykgeworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJLyoKKwkgKiBEb24ndCBsZXQgYW55b25lIGVs c2UgcHVyZ2Ugb3IgaHVnaWZ5IHRoaXMgcGFnZSB3aGlsZQorCSAqIHdlJ3JlIGh1Z2lmeWluZyBp dCAoYWxsb2NhdGlvbnMgYW5kIGRlYWxsb2NhdGlvbnMgYXJlCisJICogT0spLgorCSAqLworCXBz c2V0X3VwZGF0ZV9iZWdpbigmc2hhcmQtPnBzc2V0LCB0b19odWdpZnkpOworCWhwZGF0YV9taWRf aHVnaWZ5X3NldCh0b19odWdpZnksIHRydWUpOworCWhwZGF0YV9wdXJnZV9hbGxvd2VkX3NldCh0 b19odWdpZnksIGZhbHNlKTsKKwlocGRhdGFfZGlzYWxsb3dfaHVnaWZ5KHRvX2h1Z2lmeSk7CisJ YXNzZXJ0KGhwZGF0YV9hbGxvY19hbGxvd2VkX2dldCh0b19odWdpZnkpKTsKKwlwc3NldF91cGRh dGVfZW5kKCZzaGFyZC0+cHNzZXQsIHRvX2h1Z2lmeSk7CisKKwltYWxsb2NfbXV0ZXhfdW5sb2Nr KHRzZG4sICZzaGFyZC0+bXR4KTsKKworCXNoYXJkLT5jZW50cmFsLT5ob29rcy5odWdpZnkoaHBk YXRhX2FkZHJfZ2V0KHRvX2h1Z2lmeSksIEhVR0VQQUdFKTsKKworCW1hbGxvY19tdXRleF9sb2Nr KHRzZG4sICZzaGFyZC0+bXR4KTsKKwlzaGFyZC0+c3RhdHMubmh1Z2lmaWVzKys7CisKKwlwc3Nl dF91cGRhdGVfYmVnaW4oJnNoYXJkLT5wc3NldCwgdG9faHVnaWZ5KTsKKwlocGRhdGFfaHVnaWZ5 KHRvX2h1Z2lmeSk7CisJaHBkYXRhX21pZF9odWdpZnlfc2V0KHRvX2h1Z2lmeSwgZmFsc2UpOwor CWhwYV91cGRhdGVfcHVyZ2VfaHVnaWZ5X2VsaWdpYmlsaXR5KHRzZG4sIHNoYXJkLCB0b19odWdp ZnkpOworCXBzc2V0X3VwZGF0ZV9lbmQoJnNoYXJkLT5wc3NldCwgdG9faHVnaWZ5KTsKKworCXJl dHVybiB0cnVlOworfQorCisvKgorICogRXhlY3V0aW9uIG9mIGRlZmVycmVkIHdvcmsgaXMgZm9y Y2VkIGlmIGl0J3MgdHJpZ2dlcmVkIGJ5IGFuIGV4cGxpY2l0CisgKiBocGFfc2hhcmRfZG9fZGVm ZXJyZWRfd29yaygpIGNhbGwuCisgKi8KK3N0YXRpYyB2b2lkCitocGFfc2hhcmRfbWF5YmVfZG9f ZGVmZXJyZWRfd29yayh0c2RuX3QgKnRzZG4sIGhwYV9zaGFyZF90ICpzaGFyZCwKKyAgICBib29s IGZvcmNlZCkgeworCW1hbGxvY19tdXRleF9hc3NlcnRfb3duZXIodHNkbiwgJnNoYXJkLT5tdHgp OworCWlmICghZm9yY2VkICYmIHNoYXJkLT5vcHRzLmRlZmVycmFsX2FsbG93ZWQpIHsKKwkJcmV0 dXJuOworCX0KKwkvKgorCSAqIElmIHdlJ3JlIG9uIGEgYmFja2dyb3VuZCB0aHJlYWQsIGRvIHdv cmsgc28gbG9uZyBhcyB0aGVyZSdzIHdvcmsgdG8KKwkgKiBiZSBkb25lLiAgT3RoZXJ3aXNlLCBi b3VuZCBsYXRlbmN5IHRvIG5vdCBiZSAqdG9vKiBiYWQgYnkgZG9pbmcgYXQKKwkgKiBtb3N0IGEg c21hbGwgZml4ZWQgbnVtYmVyIG9mIG9wZXJhdGlvbnMuCisJICovCisJYm9vbCBodWdpZmllZCA9 IGZhbHNlOworCWJvb2wgcHVyZ2VkID0gZmFsc2U7CisJc2l6ZV90IG1heF9vcHMgPSAoZm9yY2Vk ID8gKHNpemVfdCktMSA6IDE2KTsKKwlzaXplX3Qgbm9wcyA9IDA7CisJZG8geworCQkvKgorCQkg KiBBbHdheXMgcHVyZ2UgYmVmb3JlIGh1Z2lmeWluZywgdG8gbWFrZSBzdXJlIHdlIGdldCBzb21l CisJCSAqIGFiaWxpdHkgdG8gaGl0IG91ciBxdWllc2NlbmNlIHRhcmdldHMuCisJCSAqLworCQlw dXJnZWQgPSBmYWxzZTsKKwkJd2hpbGUgKGhwYV9zaG91bGRfcHVyZ2UodHNkbiwgc2hhcmQpICYm IG5vcHMgPCBtYXhfb3BzKSB7CisJCQlwdXJnZWQgPSBocGFfdHJ5X3B1cmdlKHRzZG4sIHNoYXJk KTsKKwkJCWlmIChwdXJnZWQpIHsKKwkJCQlub3BzKys7CisJCQl9CisJCX0KKwkJaHVnaWZpZWQg PSBocGFfdHJ5X2h1Z2lmeSh0c2RuLCBzaGFyZCk7CisJCWlmIChodWdpZmllZCkgeworCQkJbm9w cysrOworCQl9CisJCW1hbGxvY19tdXRleF9hc3NlcnRfb3duZXIodHNkbiwgJnNoYXJkLT5tdHgp OworCQltYWxsb2NfbXV0ZXhfYXNzZXJ0X293bmVyKHRzZG4sICZzaGFyZC0+bXR4KTsKKwl9IHdo aWxlICgoaHVnaWZpZWQgfHwgcHVyZ2VkKSAmJiBub3BzIDwgbWF4X29wcyk7Cit9CisKK3N0YXRp YyBlZGF0YV90ICoKK2hwYV90cnlfYWxsb2Nfb25lX25vX2dyb3codHNkbl90ICp0c2RuLCBocGFf c2hhcmRfdCAqc2hhcmQsIHNpemVfdCBzaXplLAorICAgIGJvb2wgKm9vbSkgeworCWJvb2wgZXJy OworCWVkYXRhX3QgKmVkYXRhID0gZWRhdGFfY2FjaGVfZmFzdF9nZXQodHNkbiwgJnNoYXJkLT5l Y2YpOworCWlmIChlZGF0YSA9PSBOVUxMKSB7CisJCSpvb20gPSB0cnVlOworCQlyZXR1cm4gTlVM TDsKKwl9CisKKwlocGRhdGFfdCAqcHMgPSBwc3NldF9waWNrX2FsbG9jKCZzaGFyZC0+cHNzZXQs IHNpemUpOworCWlmIChwcyA9PSBOVUxMKSB7CisJCWVkYXRhX2NhY2hlX2Zhc3RfcHV0KHRzZG4s ICZzaGFyZC0+ZWNmLCBlZGF0YSk7CisJCXJldHVybiBOVUxMOworCX0KKworCXBzc2V0X3VwZGF0 ZV9iZWdpbigmc2hhcmQtPnBzc2V0LCBwcyk7CisKKwlpZiAoaHBkYXRhX2VtcHR5KHBzKSkgewor CQkvKgorCQkgKiBJZiB0aGUgcGFnZXNsYWIgdXNlZCB0byBiZSBlbXB0eSwgdHJlYXQgaXQgYXMg dGhvdWdoIGl0J3MKKwkJICogYnJhbmQgbmV3IGZvciBmcmFnbWVudGF0aW9uLWF2b2lkYW5jZSBw dXJwb3Nlczsgd2hhdCB3ZSdyZQorCQkgKiB0cnlpbmcgdG8gYXBwcm94aW1hdGUgaXMgdGhlIGFn ZSBvZiB0aGUgYWxsb2NhdGlvbnMgKmluKiB0aGF0CisJCSAqIHBhZ2VzbGFiLCBhbmQgdGhlIGFs bG9jYXRpb25zIGluIHRoZSBuZXcgcGFnZXNsYWIgYXJlCisJCSAqIGRlZmluaXRpb25hbGx5IHRo ZSB5b3VuZ2VzdCBpbiB0aGlzIGhwYSBzaGFyZC4KKwkJICovCisJCWhwZGF0YV9hZ2Vfc2V0KHBz LCBzaGFyZC0+YWdlX2NvdW50ZXIrKyk7CisJfQorCisJdm9pZCAqYWRkciA9IGhwZGF0YV9yZXNl cnZlX2FsbG9jKHBzLCBzaXplKTsKKwllZGF0YV9pbml0KGVkYXRhLCBzaGFyZC0+aW5kLCBhZGRy LCBzaXplLCAvKiBzbGFiICovIGZhbHNlLAorCSAgICBTQ19OU0laRVMsIC8qIHNuICovIGhwZGF0 YV9hZ2VfZ2V0KHBzKSwgZXh0ZW50X3N0YXRlX2FjdGl2ZSwKKwkgICAgLyogemVyb2VkICovIGZh bHNlLCAvKiBjb21taXR0ZWQgKi8gdHJ1ZSwgRVhURU5UX1BBSV9IUEEsCisJICAgIEVYVEVOVF9O T1RfSEVBRCk7CisJZWRhdGFfcHNfc2V0KGVkYXRhLCBwcyk7CisKKwkvKgorCSAqIFRoaXMgY291 bGQgdGhlb3JldGljYWxseSBiZSBtb3ZlZCBvdXRzaWRlIG9mIHRoZSBjcml0aWNhbCBzZWN0aW9u LAorCSAqIGJ1dCB0aGF0IGludHJvZHVjZXMgdGhlIHBvdGVudGlhbCBmb3IgYSByYWNlLiAgV2l0 aG91dCB0aGUgbG9jaywgdGhlCisJICogKGluaXRpYWxseSBub25lbXB0eSwgc2luY2UgdGhpcyBp cyB0aGUgcmV1c2UgcGF0aHdheSkgcGFnZXNsYWIgd2UKKwkgKiBhbGxvY2F0ZWQgb3V0IG9mIGNv dWxkIGJlY29tZSBvdGhlcndpc2UgZW1wdHkgd2hpbGUgdGhlIGxvY2sgaXMKKwkgKiBkcm9wcGVk LiAgVGhpcyB3b3VsZCBmb3JjZSB1cyB0byBkZWFsIHdpdGggYSBwYWdlc2xhYiBldmljdGlvbiBk b3duCisJICogdGhlIGVycm9yIHBhdGh3YXksIHdoaWNoIGlzIGEgcGFpbi4KKwkgKi8KKwllcnIg PSBlbWFwX3JlZ2lzdGVyX2JvdW5kYXJ5KHRzZG4sIHNoYXJkLT5lbWFwLCBlZGF0YSwKKwkgICAg U0NfTlNJWkVTLCAvKiBzbGFiICovIGZhbHNlKTsKKwlpZiAoZXJyKSB7CisJCWhwZGF0YV91bnJl c2VydmUocHMsIGVkYXRhX2FkZHJfZ2V0KGVkYXRhKSwKKwkJICAgIGVkYXRhX3NpemVfZ2V0KGVk YXRhKSk7CisJCS8qCisJCSAqIFdlIHNob3VsZCBhcmd1YWJseSByZXNldCBkaXJ0eSBzdGF0ZSBo ZXJlLCBidXQgdGhpcyB3b3VsZAorCQkgKiByZXF1aXJlIHNvbWUgc29ydCBvZiBwcmVwYXJlICsg Y29tbWl0IGZ1bmN0aW9uYWxpdHkgdGhhdCdzIGEKKwkJICogbGl0dGxlIG11Y2ggdG8gZGVhbCB3 aXRoIGZvciBub3cuCisJCSAqCisJCSAqIFdlIGRvbid0IGhhdmUgYSBkb19kZWZlcnJlZF93b3Jr IGRvd24gdGhpcyBwYXRod2F5LCBvbiB0aGUKKwkJICogcHJpbmNpcGxlIHRoYXQgd2UgZGlkbid0 ICpyZWFsbHkqIGFmZmVjdCBzaGFyZCBzdGF0ZSAod2UKKwkJICogdHdlYWtlZCB0aGUgc3RhdHMs IGJ1dCBvdXIgdHdlYWtzIHdlcmVuJ3QgcmVhbGx5IGFjY3VyYXRlKS4KKwkJICovCisJCXBzc2V0 X3VwZGF0ZV9lbmQoJnNoYXJkLT5wc3NldCwgcHMpOworCQllZGF0YV9jYWNoZV9mYXN0X3B1dCh0 c2RuLCAmc2hhcmQtPmVjZiwgZWRhdGEpOworCQkqb29tID0gdHJ1ZTsKKwkJcmV0dXJuIE5VTEw7 CisJfQorCisJaHBhX3VwZGF0ZV9wdXJnZV9odWdpZnlfZWxpZ2liaWxpdHkodHNkbiwgc2hhcmQs IHBzKTsKKwlwc3NldF91cGRhdGVfZW5kKCZzaGFyZC0+cHNzZXQsIHBzKTsKKwlyZXR1cm4gZWRh dGE7Cit9CisKK3N0YXRpYyBzaXplX3QKK2hwYV90cnlfYWxsb2NfYmF0Y2hfbm9fZ3Jvdyh0c2Ru X3QgKnRzZG4sIGhwYV9zaGFyZF90ICpzaGFyZCwgc2l6ZV90IHNpemUsCisgICAgYm9vbCAqb29t LCBzaXplX3QgbmFsbG9jcywgZWRhdGFfbGlzdF9hY3RpdmVfdCAqcmVzdWx0cywKKyAgICBib29s ICpkZWZlcnJlZF93b3JrX2dlbmVyYXRlZCkgeworCW1hbGxvY19tdXRleF9sb2NrKHRzZG4sICZz aGFyZC0+bXR4KTsKKwlzaXplX3QgbnN1Y2Nlc3MgPSAwOworCWZvciAoOyBuc3VjY2VzcyA8IG5h bGxvY3M7IG5zdWNjZXNzKyspIHsKKwkJZWRhdGFfdCAqZWRhdGEgPSBocGFfdHJ5X2FsbG9jX29u ZV9ub19ncm93KHRzZG4sIHNoYXJkLCBzaXplLAorCQkgICAgb29tKTsKKwkJaWYgKGVkYXRhID09 IE5VTEwpIHsKKwkJCWJyZWFrOworCQl9CisJCWVkYXRhX2xpc3RfYWN0aXZlX2FwcGVuZChyZXN1 bHRzLCBlZGF0YSk7CisJfQorCisJaHBhX3NoYXJkX21heWJlX2RvX2RlZmVycmVkX3dvcmsodHNk biwgc2hhcmQsIC8qIGZvcmNlZCAqLyBmYWxzZSk7CisJKmRlZmVycmVkX3dvcmtfZ2VuZXJhdGVk ID0gaHBhX3NoYXJkX2hhc19kZWZlcnJlZF93b3JrKHRzZG4sIHNoYXJkKTsKKwltYWxsb2NfbXV0 ZXhfdW5sb2NrKHRzZG4sICZzaGFyZC0+bXR4KTsKKwlyZXR1cm4gbnN1Y2Nlc3M7Cit9CisKK3N0 YXRpYyBzaXplX3QKK2hwYV9hbGxvY19iYXRjaF9wc3NldCh0c2RuX3QgKnRzZG4sIGhwYV9zaGFy ZF90ICpzaGFyZCwgc2l6ZV90IHNpemUsCisgICAgc2l6ZV90IG5hbGxvY3MsIGVkYXRhX2xpc3Rf YWN0aXZlX3QgKnJlc3VsdHMsCisgICAgYm9vbCAqZGVmZXJyZWRfd29ya19nZW5lcmF0ZWQpIHsK Kwlhc3NlcnQoc2l6ZSA8PSBzaGFyZC0+b3B0cy5zbGFiX21heF9hbGxvYyk7CisJYm9vbCBvb20g PSBmYWxzZTsKKworCXNpemVfdCBuc3VjY2VzcyA9IGhwYV90cnlfYWxsb2NfYmF0Y2hfbm9fZ3Jv dyh0c2RuLCBzaGFyZCwgc2l6ZSwgJm9vbSwKKwkgICAgbmFsbG9jcywgcmVzdWx0cywgZGVmZXJy ZWRfd29ya19nZW5lcmF0ZWQpOworCisJaWYgKG5zdWNjZXNzID09IG5hbGxvY3MgfHwgb29tKSB7 CisJCXJldHVybiBuc3VjY2VzczsKKwl9CisKKwkvKgorCSAqIFdlIGRpZG4ndCBPT00sIGJ1dCB3 ZXJlbid0IGFibGUgdG8gZmlsbCBldmVyeXRoaW5nIHJlcXVlc3RlZCBvZiB1czsKKwkgKiB0cnkg dG8gZ3Jvdy4KKwkgKi8KKwltYWxsb2NfbXV0ZXhfbG9jayh0c2RuLCAmc2hhcmQtPmdyb3dfbXR4 KTsKKwkvKgorCSAqIENoZWNrIGZvciBncm93IHJhY2VzOyBtYXliZSBzb21lIGVhcmxpZXIgdGhy ZWFkIGV4cGFuZGVkIHRoZSBwc3NldAorCSAqIGluIGJldHdlZW4gd2hlbiB3ZSBkcm9wcGVkIHRo ZSBtYWluIG11dGV4IGFuZCBncmFiYmVkIHRoZSBncm93IG11dGV4LgorCSAqLworCW5zdWNjZXNz ICs9IGhwYV90cnlfYWxsb2NfYmF0Y2hfbm9fZ3Jvdyh0c2RuLCBzaGFyZCwgc2l6ZSwgJm9vbSwK KwkgICAgbmFsbG9jcyAtIG5zdWNjZXNzLCByZXN1bHRzLCBkZWZlcnJlZF93b3JrX2dlbmVyYXRl ZCk7CisJaWYgKG5zdWNjZXNzID09IG5hbGxvY3MgfHwgb29tKSB7CisJCW1hbGxvY19tdXRleF91 bmxvY2sodHNkbiwgJnNoYXJkLT5ncm93X210eCk7CisJCXJldHVybiBuc3VjY2VzczsKKwl9CisK KwkvKgorCSAqIE5vdGUgdGhhdCB3ZSBkb24ndCBob2xkIHNoYXJkLT5tdHggaGVyZSAod2hpbGUg Z3Jvd2luZyk7CisJICogZGVhbGxvY2F0aW9ucyAoYW5kIGFsbG9jYXRpb25zIG9mIHNtYWxsZXIg c2l6ZXMpIG1heSBzdGlsbCBzdWNjZWVkCisJICogd2hpbGUgd2UncmUgZG9pbmcgdGhpcyBwb3Rl bnRpYWxseSBleHBlbnNpdmUgc3lzdGVtIGNhbGwuCisJICovCisJaHBkYXRhX3QgKnBzID0gaHBh X2NlbnRyYWxfZXh0cmFjdCh0c2RuLCBzaGFyZC0+Y2VudHJhbCwgc2l6ZSwgJm9vbSk7CisJaWYg KHBzID09IE5VTEwpIHsKKwkJbWFsbG9jX211dGV4X3VubG9jayh0c2RuLCAmc2hhcmQtPmdyb3df bXR4KTsKKwkJcmV0dXJuIG5zdWNjZXNzOworCX0KKworCS8qCisJICogV2UgZ290IHRoZSBwYWdl c2xhYjsgYWxsb2NhdGUgZnJvbSBpdC4gIFRoaXMgZG9lcyBhbiB1bmxvY2sgZm9sbG93ZWQKKwkg KiBieSBhIGxvY2sgb24gdGhlIHNhbWUgbXV0ZXgsIGFuZCBob2xkcyB0aGUgZ3JvdyBtdXRleCB3 aGlsZSBkb2luZworCSAqIGRlZmVycmVkIHdvcmssIGJ1dCB0aGlzIGlzIGFuIHVuY29tbW9uIHBh dGg7IHRoZSBzaW1wbGljaXR5IGlzIHdvcnRoCisJICogaXQuCisJICovCisJbWFsbG9jX211dGV4 X2xvY2sodHNkbiwgJnNoYXJkLT5tdHgpOworCXBzc2V0X2luc2VydCgmc2hhcmQtPnBzc2V0LCBw cyk7CisJbWFsbG9jX211dGV4X3VubG9jayh0c2RuLCAmc2hhcmQtPm10eCk7CisKKwluc3VjY2Vz cyArPSBocGFfdHJ5X2FsbG9jX2JhdGNoX25vX2dyb3codHNkbiwgc2hhcmQsIHNpemUsICZvb20s CisJICAgIG5hbGxvY3MgLSBuc3VjY2VzcywgcmVzdWx0cywgZGVmZXJyZWRfd29ya19nZW5lcmF0 ZWQpOworCS8qCisJICogRHJvcCBncm93X210eCBiZWZvcmUgZG9pbmcgZGVmZXJyZWQgd29yazsg b3RoZXIgdGhyZWFkcyBibG9ja2VkIG9uIGl0CisJICogc2hvdWxkIGJlIGFsbG93ZWQgdG8gcHJv Y2VlZCB3aGlsZSB3ZSdyZSB3b3JraW5nLgorCSAqLworCW1hbGxvY19tdXRleF91bmxvY2sodHNk biwgJnNoYXJkLT5ncm93X210eCk7CisKKwlyZXR1cm4gbnN1Y2Nlc3M7Cit9CisKK3N0YXRpYyBo cGFfc2hhcmRfdCAqCitocGFfZnJvbV9wYWkocGFpX3QgKnNlbGYpIHsKKwlhc3NlcnQoc2VsZi0+ YWxsb2MgPSAmaHBhX2FsbG9jKTsKKwlhc3NlcnQoc2VsZi0+ZXhwYW5kID0gJmhwYV9leHBhbmQp OworCWFzc2VydChzZWxmLT5zaHJpbmsgPSAmaHBhX3Nocmluayk7CisJYXNzZXJ0KHNlbGYtPmRh bGxvYyA9ICZocGFfZGFsbG9jKTsKKwlyZXR1cm4gKGhwYV9zaGFyZF90ICopc2VsZjsKK30KKwor c3RhdGljIHNpemVfdAoraHBhX2FsbG9jX2JhdGNoKHRzZG5fdCAqdHNkbiwgcGFpX3QgKnNlbGYs IHNpemVfdCBzaXplLCBzaXplX3QgbmFsbG9jcywKKyAgICBlZGF0YV9saXN0X2FjdGl2ZV90ICpy ZXN1bHRzLCBib29sICpkZWZlcnJlZF93b3JrX2dlbmVyYXRlZCkgeworCWFzc2VydChuYWxsb2Nz ID4gMCk7CisJYXNzZXJ0KChzaXplICYgUEFHRV9NQVNLKSA9PSAwKTsKKwl3aXRuZXNzX2Fzc2Vy dF9kZXB0aF90b19yYW5rKHRzZG5fd2l0bmVzc190c2RwX2dldCh0c2RuKSwKKwkgICAgV0lUTkVT U19SQU5LX0NPUkUsIDApOworCWhwYV9zaGFyZF90ICpzaGFyZCA9IGhwYV9mcm9tX3BhaShzZWxm KTsKKworCWlmIChzaXplID4gc2hhcmQtPm9wdHMuc2xhYl9tYXhfYWxsb2MpIHsKKwkJcmV0dXJu IDA7CisJfQorCisJc2l6ZV90IG5zdWNjZXNzID0gaHBhX2FsbG9jX2JhdGNoX3Bzc2V0KHRzZG4s IHNoYXJkLCBzaXplLCBuYWxsb2NzLAorCSAgICByZXN1bHRzLCBkZWZlcnJlZF93b3JrX2dlbmVy YXRlZCk7CisKKwl3aXRuZXNzX2Fzc2VydF9kZXB0aF90b19yYW5rKHRzZG5fd2l0bmVzc190c2Rw X2dldCh0c2RuKSwKKwkgICAgV0lUTkVTU19SQU5LX0NPUkUsIDApOworCisJLyoKKwkgKiBHdWFy ZCB0aGUgc2FuaXR5IGNoZWNrcyB3aXRoIGNvbmZpZ19kZWJ1ZyBiZWNhdXNlIHRoZSBsb29wIGNh bm5vdCBiZQorCSAqIHByb3ZlbiBub24tY2lyY3VsYXIgYnkgdGhlIGNvbXBpbGVyLCBldmVuIGlm IGV2ZXJ5dGhpbmcgd2l0aGluIHRoZQorCSAqIGxvb3AgaXMgb3B0aW1pemVkIGF3YXkuCisJICov CisJaWYgKGNvbmZpZ19kZWJ1ZykgeworCQllZGF0YV90ICplZGF0YTsKKwkJcWxfZm9yZWFjaChl ZGF0YSwgJnJlc3VsdHMtPmhlYWQsIHFsX2xpbmtfYWN0aXZlKSB7CisJCQllbWFwX2Fzc2VydF9t YXBwZWQodHNkbiwgc2hhcmQtPmVtYXAsIGVkYXRhKTsKKwkJCWFzc2VydChlZGF0YV9wYWlfZ2V0 KGVkYXRhKSA9PSBFWFRFTlRfUEFJX0hQQSk7CisJCQlhc3NlcnQoZWRhdGFfc3RhdGVfZ2V0KGVk YXRhKSA9PSBleHRlbnRfc3RhdGVfYWN0aXZlKTsKKwkJCWFzc2VydChlZGF0YV9hcmVuYV9pbmRf Z2V0KGVkYXRhKSA9PSBzaGFyZC0+aW5kKTsKKwkJCWFzc2VydChlZGF0YV9zemluZF9nZXRfbWF5 YmVfaW52YWxpZChlZGF0YSkgPT0KKwkJCSAgICBTQ19OU0laRVMpOworCQkJYXNzZXJ0KCFlZGF0 YV9zbGFiX2dldChlZGF0YSkpOworCQkJYXNzZXJ0KGVkYXRhX2NvbW1pdHRlZF9nZXQoZWRhdGEp KTsKKwkJCWFzc2VydChlZGF0YV9iYXNlX2dldChlZGF0YSkgPT0gZWRhdGFfYWRkcl9nZXQoZWRh dGEpKTsKKwkJCWFzc2VydChlZGF0YV9iYXNlX2dldChlZGF0YSkgIT0gTlVMTCk7CisJCX0KKwl9 CisJcmV0dXJuIG5zdWNjZXNzOworfQorCitzdGF0aWMgZWRhdGFfdCAqCitocGFfYWxsb2ModHNk bl90ICp0c2RuLCBwYWlfdCAqc2VsZiwgc2l6ZV90IHNpemUsIHNpemVfdCBhbGlnbm1lbnQsIGJv b2wgemVybywKKyAgICBib29sIGd1YXJkZWQsIGJvb2wgZnJlcXVlbnRfcmV1c2UsIGJvb2wgKmRl ZmVycmVkX3dvcmtfZ2VuZXJhdGVkKSB7CisJYXNzZXJ0KChzaXplICYgUEFHRV9NQVNLKSA9PSAw KTsKKwlhc3NlcnQoIWd1YXJkZWQpOworCXdpdG5lc3NfYXNzZXJ0X2RlcHRoX3RvX3JhbmsodHNk bl93aXRuZXNzX3RzZHBfZ2V0KHRzZG4pLAorCSAgICBXSVRORVNTX1JBTktfQ09SRSwgMCk7CisK KwkvKiBXZSBkb24ndCBoYW5kbGUgYWxpZ25tZW50IG9yIHplcm9pbmcgZm9yIG5vdy4gKi8KKwlp ZiAoYWxpZ25tZW50ID4gUEFHRSB8fCB6ZXJvKSB7CisJCXJldHVybiBOVUxMOworCX0KKwkvKgor CSAqIEFuIGFsbG9jIHdpdGggYWxpZ25tZW50ID09IFBBR0UgYW5kIHplcm8gPT0gZmFsc2UgaXMg ZXF1aXZhbGVudCB0byBhCisJICogYmF0Y2ggYWxsb2Mgb2YgMS4gIEp1c3QgZG8gdGhhdCwgc28g d2UgY2FuIHNoYXJlIGNvZGUuCisJICovCisJZWRhdGFfbGlzdF9hY3RpdmVfdCByZXN1bHRzOwor CWVkYXRhX2xpc3RfYWN0aXZlX2luaXQoJnJlc3VsdHMpOworCXNpemVfdCBuYWxsb2NzID0gaHBh X2FsbG9jX2JhdGNoKHRzZG4sIHNlbGYsIHNpemUsIC8qIG5hbGxvY3MgKi8gMSwKKwkgICAgJnJl c3VsdHMsIGRlZmVycmVkX3dvcmtfZ2VuZXJhdGVkKTsKKwlhc3NlcnQobmFsbG9jcyA9PSAwIHx8 IG5hbGxvY3MgPT0gMSk7CisJZWRhdGFfdCAqZWRhdGEgPSBlZGF0YV9saXN0X2FjdGl2ZV9maXJz dCgmcmVzdWx0cyk7CisJcmV0dXJuIGVkYXRhOworfQorCitzdGF0aWMgYm9vbAoraHBhX2V4cGFu ZCh0c2RuX3QgKnRzZG4sIHBhaV90ICpzZWxmLCBlZGF0YV90ICplZGF0YSwgc2l6ZV90IG9sZF9z aXplLAorICAgIHNpemVfdCBuZXdfc2l6ZSwgYm9vbCB6ZXJvLCBib29sICpkZWZlcnJlZF93b3Jr X2dlbmVyYXRlZCkgeworCS8qIEV4cGFuZCBub3QgeWV0IHN1cHBvcnRlZC4gKi8KKwlyZXR1cm4g dHJ1ZTsKK30KKworc3RhdGljIGJvb2wKK2hwYV9zaHJpbmsodHNkbl90ICp0c2RuLCBwYWlfdCAq c2VsZiwgZWRhdGFfdCAqZWRhdGEsCisgICAgc2l6ZV90IG9sZF9zaXplLCBzaXplX3QgbmV3X3Np emUsIGJvb2wgKmRlZmVycmVkX3dvcmtfZ2VuZXJhdGVkKSB7CisJLyogU2hyaW5rIG5vdCB5ZXQg c3VwcG9ydGVkLiAqLworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgdm9pZAoraHBhX2RhbGxv Y19wcmVwYXJlX3VubG9ja2VkKHRzZG5fdCAqdHNkbiwgaHBhX3NoYXJkX3QgKnNoYXJkLCBlZGF0 YV90ICplZGF0YSkgeworCW1hbGxvY19tdXRleF9hc3NlcnRfbm90X293bmVyKHRzZG4sICZzaGFy ZC0+bXR4KTsKKworCWFzc2VydChlZGF0YV9wYWlfZ2V0KGVkYXRhKSA9PSBFWFRFTlRfUEFJX0hQ QSk7CisJYXNzZXJ0KGVkYXRhX3N0YXRlX2dldChlZGF0YSkgPT0gZXh0ZW50X3N0YXRlX2FjdGl2 ZSk7CisJYXNzZXJ0KGVkYXRhX2FyZW5hX2luZF9nZXQoZWRhdGEpID09IHNoYXJkLT5pbmQpOwor CWFzc2VydChlZGF0YV9zemluZF9nZXRfbWF5YmVfaW52YWxpZChlZGF0YSkgPT0gU0NfTlNJWkVT KTsKKwlhc3NlcnQoZWRhdGFfY29tbWl0dGVkX2dldChlZGF0YSkpOworCWFzc2VydChlZGF0YV9i YXNlX2dldChlZGF0YSkgIT0gTlVMTCk7CisKKwkvKgorCSAqIEFub3RoZXIgdGhyZWFkIHNob3Vs ZG4ndCBiZSB0cnlpbmcgdG8gdG91Y2ggdGhlIG1ldGFkYXRhIG9mIGFuCisJICogYWxsb2NhdGlv biBiZWluZyBmcmVlZC4gIFRoZSBvbmUgZXhjZXB0aW9uIGlzIGEgbWVyZ2UgYXR0ZW1wdCBmcm9t IGEKKwkgKiBsb3dlci1hZGRyZXNzZWQgUEFDIGV4dGVudDsgaW4gdGhpcyBjYXNlIHdlIGhhdmUg YSBub21pbmFsIHJhY2Ugb24KKwkgKiB0aGUgZWRhdGEgbWV0YWRhdGEgYml0cywgYnV0IGluIHBy YWN0aWNlIHRoZSBmYWN0IHRoYXQgdGhlIFBBSSBiaXRzCisJICogYXJlIGRpZmZlcmVudCB3aWxs IHByZXZlbnQgYW55IGZ1cnRoZXIgYWNjZXNzLiAgVGhlIHJhY2UgaXMgYmFkLCBidXQKKwkgKiBi ZW5pZ24gaW4gcHJhY3RpY2UsIGFuZCB0aGUgbG9uZyB0ZXJtIHBsYW4gaXMgdG8gdHJhY2sgZW5v dWdoIHN0YXRlCisJICogaW4gdGhlIHJ0cmVlIHRvIHByZXZlbnQgdGhlc2UgbWVyZ2UgYXR0ZW1w dHMgaW4gdGhlIGZpcnN0IHBsYWNlLgorCSAqLworCWVkYXRhX2FkZHJfc2V0KGVkYXRhLCBlZGF0 YV9iYXNlX2dldChlZGF0YSkpOworCWVkYXRhX3plcm9lZF9zZXQoZWRhdGEsIGZhbHNlKTsKKwll bWFwX2RlcmVnaXN0ZXJfYm91bmRhcnkodHNkbiwgc2hhcmQtPmVtYXAsIGVkYXRhKTsKK30KKwor c3RhdGljIHZvaWQKK2hwYV9kYWxsb2NfbG9ja2VkKHRzZG5fdCAqdHNkbiwgaHBhX3NoYXJkX3Qg KnNoYXJkLCBlZGF0YV90ICplZGF0YSkgeworCW1hbGxvY19tdXRleF9hc3NlcnRfb3duZXIodHNk biwgJnNoYXJkLT5tdHgpOworCisJLyoKKwkgKiBSZWxlYXNlIHRoZSBtZXRhZGF0YSBlYXJseSwg dG8gYXZvaWQgaGF2aW5nIHRvIHJlbWVtYmVyIHRvIGRvIGl0CisJICogd2hpbGUgd2UncmUgYWxz byBkb2luZyB0cmlja3kgcHVyZ2luZyBsb2dpYy4gIEZpcnN0LCB3ZSBuZWVkIHRvIGdyYWIKKwkg KiBhIGZldyBiaXRzIG9mIG1ldGFkYXRhIGZyb20gaXQuCisJICoKKwkgKiBOb3RlIHRoYXQgdGhl IHNoYXJkIG11dGV4IHByb3RlY3RzIHBzJ3MgbWV0YWRhdGEgdG9vOyBpdCB3b3VsZG4ndCBiZQor CSAqIGNvcnJlY3QgdG8gdHJ5IHRvIHJlYWQgbW9zdCBpbmZvcm1hdGlvbiBvdXQgb2YgaXQgd2l0 aG91dCB0aGUgbG9jay4KKwkgKi8KKwlocGRhdGFfdCAqcHMgPSBlZGF0YV9wc19nZXQoZWRhdGEp OworCS8qIEN1cnJlbnRseSwgYWxsIGVkYXRhcyBjb21lIGZyb20gcGFnZXNsYWJzLiAqLworCWFz c2VydChwcyAhPSBOVUxMKTsKKwl2b2lkICp1bnJlc2VydmVfYWRkciA9IGVkYXRhX2FkZHJfZ2V0 KGVkYXRhKTsKKwlzaXplX3QgdW5yZXNlcnZlX3NpemUgPSBlZGF0YV9zaXplX2dldChlZGF0YSk7 CisJZWRhdGFfY2FjaGVfZmFzdF9wdXQodHNkbiwgJnNoYXJkLT5lY2YsIGVkYXRhKTsKKworCXBz c2V0X3VwZGF0ZV9iZWdpbigmc2hhcmQtPnBzc2V0LCBwcyk7CisJaHBkYXRhX3VucmVzZXJ2ZShw cywgdW5yZXNlcnZlX2FkZHIsIHVucmVzZXJ2ZV9zaXplKTsKKwlocGFfdXBkYXRlX3B1cmdlX2h1 Z2lmeV9lbGlnaWJpbGl0eSh0c2RuLCBzaGFyZCwgcHMpOworCXBzc2V0X3VwZGF0ZV9lbmQoJnNo YXJkLT5wc3NldCwgcHMpOworfQorCitzdGF0aWMgdm9pZAoraHBhX2RhbGxvY19iYXRjaCh0c2Ru X3QgKnRzZG4sIHBhaV90ICpzZWxmLCBlZGF0YV9saXN0X2FjdGl2ZV90ICpsaXN0LAorICAgIGJv b2wgKmRlZmVycmVkX3dvcmtfZ2VuZXJhdGVkKSB7CisJaHBhX3NoYXJkX3QgKnNoYXJkID0gaHBh X2Zyb21fcGFpKHNlbGYpOworCisJZWRhdGFfdCAqZWRhdGE7CisJcWxfZm9yZWFjaChlZGF0YSwg Jmxpc3QtPmhlYWQsIHFsX2xpbmtfYWN0aXZlKSB7CisJCWhwYV9kYWxsb2NfcHJlcGFyZV91bmxv Y2tlZCh0c2RuLCBzaGFyZCwgZWRhdGEpOworCX0KKworCW1hbGxvY19tdXRleF9sb2NrKHRzZG4s ICZzaGFyZC0+bXR4KTsKKwkvKiBOb3csIHJlbW92ZSBmcm9tIHRoZSBsaXN0LiAqLworCXdoaWxl ICgoZWRhdGEgPSBlZGF0YV9saXN0X2FjdGl2ZV9maXJzdChsaXN0KSkgIT0gTlVMTCkgeworCQll ZGF0YV9saXN0X2FjdGl2ZV9yZW1vdmUobGlzdCwgZWRhdGEpOworCQlocGFfZGFsbG9jX2xvY2tl ZCh0c2RuLCBzaGFyZCwgZWRhdGEpOworCX0KKwlocGFfc2hhcmRfbWF5YmVfZG9fZGVmZXJyZWRf d29yayh0c2RuLCBzaGFyZCwgLyogZm9yY2VkICovIGZhbHNlKTsKKwkqZGVmZXJyZWRfd29ya19n ZW5lcmF0ZWQgPQorCSAgICBocGFfc2hhcmRfaGFzX2RlZmVycmVkX3dvcmsodHNkbiwgc2hhcmQp OworCisJbWFsbG9jX211dGV4X3VubG9jayh0c2RuLCAmc2hhcmQtPm10eCk7Cit9CisKK3N0YXRp YyB2b2lkCitocGFfZGFsbG9jKHRzZG5fdCAqdHNkbiwgcGFpX3QgKnNlbGYsIGVkYXRhX3QgKmVk YXRhLAorICAgIGJvb2wgKmRlZmVycmVkX3dvcmtfZ2VuZXJhdGVkKSB7CisJYXNzZXJ0KCFlZGF0 YV9ndWFyZGVkX2dldChlZGF0YSkpOworCS8qIEp1c3QgYSBkYWxsb2NfYmF0Y2ggb2Ygc2l6ZSAx OyB0aGlzIGxldHMgdXMgc2hhcmUgbG9naWMuICovCisJZWRhdGFfbGlzdF9hY3RpdmVfdCBkYWxs b2NfbGlzdDsKKwllZGF0YV9saXN0X2FjdGl2ZV9pbml0KCZkYWxsb2NfbGlzdCk7CisJZWRhdGFf bGlzdF9hY3RpdmVfYXBwZW5kKCZkYWxsb2NfbGlzdCwgZWRhdGEpOworCWhwYV9kYWxsb2NfYmF0 Y2godHNkbiwgc2VsZiwgJmRhbGxvY19saXN0LCBkZWZlcnJlZF93b3JrX2dlbmVyYXRlZCk7Cit9 CisKKy8qCisgKiBDYWxjdWxhdGUgdGltZSB1bnRpbCBlaXRoZXIgcHVyZ2luZyBvciBodWdpZmlj YXRpb24gb3VnaHQgdG8gaGFwcGVuLgorICogQ2FsbGVkIGJ5IGJhY2tncm91bmQgdGhyZWFkcy4K KyAqLworc3RhdGljIHVpbnQ2NF90CitocGFfdGltZV91bnRpbF9kZWZlcnJlZF93b3JrKHRzZG5f dCAqdHNkbiwgcGFpX3QgKnNlbGYpIHsKKwlocGFfc2hhcmRfdCAqc2hhcmQgPSBocGFfZnJvbV9w YWkoc2VsZik7CisJdWludDY0X3QgdGltZV9ucyA9IEJBQ0tHUk9VTkRfVEhSRUFEX0RFRkVSUkVE X01BWDsKKworCW1hbGxvY19tdXRleF9sb2NrKHRzZG4sICZzaGFyZC0+bXR4KTsKKworCWhwZGF0 YV90ICp0b19odWdpZnkgPSBwc3NldF9waWNrX2h1Z2lmeSgmc2hhcmQtPnBzc2V0KTsKKwlpZiAo dG9faHVnaWZ5ICE9IE5VTEwpIHsKKwkJbnN0aW1lX3QgdGltZV9odWdpZnlfYWxsb3dlZCA9CisJ CSAgICBocGRhdGFfdGltZV9odWdpZnlfYWxsb3dlZCh0b19odWdpZnkpOworCQl1aW50NjRfdCBz aW5jZV9odWdpZnlfYWxsb3dlZF9tcyA9CisJCSAgICBzaGFyZC0+Y2VudHJhbC0+aG9va3MubXNf c2luY2UoJnRpbWVfaHVnaWZ5X2FsbG93ZWQpOworCQkvKgorCQkgKiBJZiBub3QgZW5vdWdoIHRp bWUgaGFzIHBhc3NlZCBzaW5jZSBodWdpZmljYXRpb24gd2FzIGFsbG93ZWQsCisJCSAqIHNsZWVw IGZvciB0aGUgcmVzdC4KKwkJICovCisJCWlmIChzaW5jZV9odWdpZnlfYWxsb3dlZF9tcyA8IHNo YXJkLT5vcHRzLmh1Z2lmeV9kZWxheV9tcykgeworCQkJdGltZV9ucyA9IHNoYXJkLT5vcHRzLmh1 Z2lmeV9kZWxheV9tcyAtCisJCQkgICAgc2luY2VfaHVnaWZ5X2FsbG93ZWRfbXM7CisJCQl0aW1l X25zICo9IDEwMDAgKiAxMDAwOworCQl9IGVsc2UgeworCQkJbWFsbG9jX211dGV4X3VubG9jayh0 c2RuLCAmc2hhcmQtPm10eCk7CisJCQlyZXR1cm4gQkFDS0dST1VORF9USFJFQURfREVGRVJSRURf TUlOOworCQl9CisJfQorCisJaWYgKGhwYV9zaG91bGRfcHVyZ2UodHNkbiwgc2hhcmQpKSB7CisJ CS8qCisJCSAqIElmIHdlIGhhdmVuJ3QgcHVyZ2VkIGJlZm9yZSwgbm8gbmVlZCB0byBjaGVjayBp bnRlcnZhbAorCQkgKiBiZXR3ZWVuIHB1cmdlcy4gU2ltcGx5IHB1cmdlIGFzIHNvb24gYXMgcG9z c2libGUuCisJCSAqLworCQlpZiAoc2hhcmQtPnN0YXRzLm5wdXJnZV9wYXNzZXMgPT0gMCkgewor CQkJbWFsbG9jX211dGV4X3VubG9jayh0c2RuLCAmc2hhcmQtPm10eCk7CisJCQlyZXR1cm4gQkFD S0dST1VORF9USFJFQURfREVGRVJSRURfTUlOOworCQl9CisJCXVpbnQ2NF90IHNpbmNlX2xhc3Rf cHVyZ2VfbXMgPSBzaGFyZC0+Y2VudHJhbC0+aG9va3MubXNfc2luY2UoCisJCSAgICAmc2hhcmQt Pmxhc3RfcHVyZ2UpOworCisJCWlmIChzaW5jZV9sYXN0X3B1cmdlX21zIDwgc2hhcmQtPm9wdHMu bWluX3B1cmdlX2ludGVydmFsX21zKSB7CisJCQl1aW50NjRfdCB1bnRpbF9wdXJnZV9uczsKKwkJ CXVudGlsX3B1cmdlX25zID0gc2hhcmQtPm9wdHMubWluX3B1cmdlX2ludGVydmFsX21zIC0KKwkJ CSAgICBzaW5jZV9sYXN0X3B1cmdlX21zOworCQkJdW50aWxfcHVyZ2VfbnMgKj0gMTAwMCAqIDEw MDA7CisKKwkJCWlmICh1bnRpbF9wdXJnZV9ucyA8IHRpbWVfbnMpIHsKKwkJCQl0aW1lX25zID0g dW50aWxfcHVyZ2VfbnM7CisJCQl9CisJCX0gZWxzZSB7CisJCQl0aW1lX25zID0gQkFDS0dST1VO RF9USFJFQURfREVGRVJSRURfTUlOOworCQl9CisJfQorCW1hbGxvY19tdXRleF91bmxvY2sodHNk biwgJnNoYXJkLT5tdHgpOworCXJldHVybiB0aW1lX25zOworfQorCit2b2lkCitocGFfc2hhcmRf ZGlzYWJsZSh0c2RuX3QgKnRzZG4sIGhwYV9zaGFyZF90ICpzaGFyZCkgeworCWhwYV9kb19jb25z aXN0ZW5jeV9jaGVja3Moc2hhcmQpOworCisJbWFsbG9jX211dGV4X2xvY2sodHNkbiwgJnNoYXJk LT5tdHgpOworCWVkYXRhX2NhY2hlX2Zhc3RfZGlzYWJsZSh0c2RuLCAmc2hhcmQtPmVjZik7CisJ bWFsbG9jX211dGV4X3VubG9jayh0c2RuLCAmc2hhcmQtPm10eCk7Cit9CisKK3N0YXRpYyB2b2lk CitocGFfc2hhcmRfYXNzZXJ0X3N0YXRzX2VtcHR5KHBzc2V0X2Jpbl9zdGF0c190ICpiaW5fc3Rh dHMpIHsKKwlhc3NlcnQoYmluX3N0YXRzLT5ucGFnZXNsYWJzID09IDApOworCWFzc2VydChiaW5f c3RhdHMtPm5hY3RpdmUgPT0gMCk7Cit9CisKK3N0YXRpYyB2b2lkCitocGFfYXNzZXJ0X2VtcHR5 KHRzZG5fdCAqdHNkbiwgaHBhX3NoYXJkX3QgKnNoYXJkLCBwc3NldF90ICpwc3NldCkgeworCW1h bGxvY19tdXRleF9hc3NlcnRfb3duZXIodHNkbiwgJnNoYXJkLT5tdHgpOworCWZvciAoaW50IGh1 Z2UgPSAwOyBodWdlIDw9IDE7IGh1Z2UrKykgeworCQlocGFfc2hhcmRfYXNzZXJ0X3N0YXRzX2Vt cHR5KCZwc3NldC0+c3RhdHMuZnVsbF9zbGFic1todWdlXSk7CisJCWZvciAocHN6aW5kX3QgaSA9 IDA7IGkgPCBQU1NFVF9OUFNJWkVTOyBpKyspIHsKKwkJCWhwYV9zaGFyZF9hc3NlcnRfc3RhdHNf ZW1wdHkoCisJCQkgICAgJnBzc2V0LT5zdGF0cy5ub25mdWxsX3NsYWJzW2ldW2h1Z2VdKTsKKwkJ fQorCX0KK30KKwordm9pZAoraHBhX3NoYXJkX2Rlc3Ryb3kodHNkbl90ICp0c2RuLCBocGFfc2hh cmRfdCAqc2hhcmQpIHsKKwlocGFfZG9fY29uc2lzdGVuY3lfY2hlY2tzKHNoYXJkKTsKKwkvKgor CSAqIEJ5IHRoZSB0aW1lIHdlJ3JlIGhlcmUsIHRoZSBhcmVuYSBjb2RlIHNob3VsZCBoYXZlIGRh bGxvYydkIGFsbCB0aGUKKwkgKiBhY3RpdmUgZXh0ZW50cywgd2hpY2ggbWVhbnMgd2Ugc2hvdWxk IGhhdmUgZXZlbnR1YWxseSBldmljdGVkCisJICogZXZlcnl0aGluZyBmcm9tIHRoZSBwc3NldCwg c28gaXQgc2hvdWxkbid0IGJlIGFibGUgdG8gc2VydmUgZXZlbiBhCisJICogMS1wYWdlIGFsbG9j YXRpb24uCisJICovCisJaWYgKGNvbmZpZ19kZWJ1ZykgeworCQltYWxsb2NfbXV0ZXhfbG9jayh0 c2RuLCAmc2hhcmQtPm10eCk7CisJCWhwYV9hc3NlcnRfZW1wdHkodHNkbiwgc2hhcmQsICZzaGFy ZC0+cHNzZXQpOworCQltYWxsb2NfbXV0ZXhfdW5sb2NrKHRzZG4sICZzaGFyZC0+bXR4KTsKKwl9 CisJaHBkYXRhX3QgKnBzOworCXdoaWxlICgocHMgPSBwc3NldF9waWNrX2FsbG9jKCZzaGFyZC0+ cHNzZXQsIFBBR0UpKSAhPSBOVUxMKSB7CisJCS8qIFRoZXJlIHNob3VsZCBiZSBubyBhbGxvY2F0 aW9ucyBhbnl3aGVyZS4gKi8KKwkJYXNzZXJ0KGhwZGF0YV9lbXB0eShwcykpOworCQlwc3NldF9y ZW1vdmUoJnNoYXJkLT5wc3NldCwgcHMpOworCQlzaGFyZC0+Y2VudHJhbC0+aG9va3MudW5tYXAo aHBkYXRhX2FkZHJfZ2V0KHBzKSwgSFVHRVBBR0UpOworCX0KK30KKwordm9pZAoraHBhX3NoYXJk X3NldF9kZWZlcnJhbF9hbGxvd2VkKHRzZG5fdCAqdHNkbiwgaHBhX3NoYXJkX3QgKnNoYXJkLAor ICAgIGJvb2wgZGVmZXJyYWxfYWxsb3dlZCkgeworCWhwYV9kb19jb25zaXN0ZW5jeV9jaGVja3Mo c2hhcmQpOworCisJbWFsbG9jX211dGV4X2xvY2sodHNkbiwgJnNoYXJkLT5tdHgpOworCWJvb2wg ZGVmZXJyYWxfcHJldmlvdXNseV9hbGxvd2VkID0gc2hhcmQtPm9wdHMuZGVmZXJyYWxfYWxsb3dl ZDsKKwlzaGFyZC0+b3B0cy5kZWZlcnJhbF9hbGxvd2VkID0gZGVmZXJyYWxfYWxsb3dlZDsKKwlp ZiAoZGVmZXJyYWxfcHJldmlvdXNseV9hbGxvd2VkICYmICFkZWZlcnJhbF9hbGxvd2VkKSB7CisJ CWhwYV9zaGFyZF9tYXliZV9kb19kZWZlcnJlZF93b3JrKHRzZG4sIHNoYXJkLAorCQkgICAgLyog Zm9yY2VkICovIHRydWUpOworCX0KKwltYWxsb2NfbXV0ZXhfdW5sb2NrKHRzZG4sICZzaGFyZC0+ bXR4KTsKK30KKwordm9pZAoraHBhX3NoYXJkX2RvX2RlZmVycmVkX3dvcmsodHNkbl90ICp0c2Ru LCBocGFfc2hhcmRfdCAqc2hhcmQpIHsKKwlocGFfZG9fY29uc2lzdGVuY3lfY2hlY2tzKHNoYXJk KTsKKworCW1hbGxvY19tdXRleF9sb2NrKHRzZG4sICZzaGFyZC0+bXR4KTsKKwlocGFfc2hhcmRf bWF5YmVfZG9fZGVmZXJyZWRfd29yayh0c2RuLCBzaGFyZCwgLyogZm9yY2VkICovIHRydWUpOwor CW1hbGxvY19tdXRleF91bmxvY2sodHNkbiwgJnNoYXJkLT5tdHgpOworfQorCit2b2lkCitocGFf c2hhcmRfcHJlZm9yazModHNkbl90ICp0c2RuLCBocGFfc2hhcmRfdCAqc2hhcmQpIHsKKwlocGFf ZG9fY29uc2lzdGVuY3lfY2hlY2tzKHNoYXJkKTsKKworCW1hbGxvY19tdXRleF9wcmVmb3JrKHRz ZG4sICZzaGFyZC0+Z3Jvd19tdHgpOworfQorCit2b2lkCitocGFfc2hhcmRfcHJlZm9yazQodHNk bl90ICp0c2RuLCBocGFfc2hhcmRfdCAqc2hhcmQpIHsKKwlocGFfZG9fY29uc2lzdGVuY3lfY2hl Y2tzKHNoYXJkKTsKKworCW1hbGxvY19tdXRleF9wcmVmb3JrKHRzZG4sICZzaGFyZC0+bXR4KTsK K30KKwordm9pZAoraHBhX3NoYXJkX3Bvc3Rmb3JrX3BhcmVudCh0c2RuX3QgKnRzZG4sIGhwYV9z aGFyZF90ICpzaGFyZCkgeworCWhwYV9kb19jb25zaXN0ZW5jeV9jaGVja3Moc2hhcmQpOworCisJ bWFsbG9jX211dGV4X3Bvc3Rmb3JrX3BhcmVudCh0c2RuLCAmc2hhcmQtPmdyb3dfbXR4KTsKKwlt YWxsb2NfbXV0ZXhfcG9zdGZvcmtfcGFyZW50KHRzZG4sICZzaGFyZC0+bXR4KTsKK30KKwordm9p ZAoraHBhX3NoYXJkX3Bvc3Rmb3JrX2NoaWxkKHRzZG5fdCAqdHNkbiwgaHBhX3NoYXJkX3QgKnNo YXJkKSB7CisJaHBhX2RvX2NvbnNpc3RlbmN5X2NoZWNrcyhzaGFyZCk7CisKKwltYWxsb2NfbXV0 ZXhfcG9zdGZvcmtfY2hpbGQodHNkbiwgJnNoYXJkLT5ncm93X210eCk7CisJbWFsbG9jX211dGV4 X3Bvc3Rmb3JrX2NoaWxkKHRzZG4sICZzaGFyZC0+bXR4KTsKK30KCmRpZmYgLS1naXQgYS8zODkt ZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9zcmMvaHBhX2hvb2tzLmMgYi8zODkt ZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9zcmMvaHBhX2hvb2tzLmMKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWRlNTgxZQotLS0gL2Rldi9udWxsCisrKyBi LzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3NyYy9ocGFfaG9va3MuYwpA QCAtMCwwICsxLDYzIEBACisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvamVtYWxsb2NfcHJl YW1ibGUuaCIKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9qZW1hbGxvY19pbnRlcm5hbF9p bmNsdWRlcy5oIgorCisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvaHBhX2hvb2tzLmgiCisK K3N0YXRpYyB2b2lkICpocGFfaG9va3NfbWFwKHNpemVfdCBzaXplKTsKK3N0YXRpYyB2b2lkIGhw YV9ob29rc191bm1hcCh2b2lkICpwdHIsIHNpemVfdCBzaXplKTsKK3N0YXRpYyB2b2lkIGhwYV9o b29rc19wdXJnZSh2b2lkICpwdHIsIHNpemVfdCBzaXplKTsKK3N0YXRpYyB2b2lkIGhwYV9ob29r c19odWdpZnkodm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSk7CitzdGF0aWMgdm9pZCBocGFfaG9va3Nf ZGVodWdpZnkodm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSk7CitzdGF0aWMgdm9pZCBocGFfaG9va3Nf Y3VydGltZShuc3RpbWVfdCAqcl9uc3RpbWUsIGJvb2wgZmlyc3RfcmVhZGluZyk7CitzdGF0aWMg dWludDY0X3QgaHBhX2hvb2tzX21zX3NpbmNlKG5zdGltZV90ICpwYXN0X25zdGltZSk7CisKK2hw YV9ob29rc190IGhwYV9ob29rc19kZWZhdWx0ID0geworCSZocGFfaG9va3NfbWFwLAorCSZocGFf aG9va3NfdW5tYXAsCisJJmhwYV9ob29rc19wdXJnZSwKKwkmaHBhX2hvb2tzX2h1Z2lmeSwKKwkm aHBhX2hvb2tzX2RlaHVnaWZ5LAorCSZocGFfaG9va3NfY3VydGltZSwKKwkmaHBhX2hvb2tzX21z X3NpbmNlCit9OworCitzdGF0aWMgdm9pZCAqCitocGFfaG9va3NfbWFwKHNpemVfdCBzaXplKSB7 CisJYm9vbCBjb21taXQgPSB0cnVlOworCXJldHVybiBwYWdlc19tYXAoTlVMTCwgc2l6ZSwgSFVH RVBBR0UsICZjb21taXQpOworfQorCitzdGF0aWMgdm9pZAoraHBhX2hvb2tzX3VubWFwKHZvaWQg KnB0ciwgc2l6ZV90IHNpemUpIHsKKwlwYWdlc191bm1hcChwdHIsIHNpemUpOworfQorCitzdGF0 aWMgdm9pZAoraHBhX2hvb2tzX3B1cmdlKHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpIHsKKwlwYWdl c19wdXJnZV9mb3JjZWQocHRyLCBzaXplKTsKK30KKworc3RhdGljIHZvaWQKK2hwYV9ob29rc19o dWdpZnkodm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSkgeworCWJvb2wgZXJyID0gcGFnZXNfaHVnZShw dHIsIHNpemUpOworCSh2b2lkKWVycjsKK30KKworc3RhdGljIHZvaWQKK2hwYV9ob29rc19kZWh1 Z2lmeSh2b2lkICpwdHIsIHNpemVfdCBzaXplKSB7CisJYm9vbCBlcnIgPSBwYWdlc19ub2h1Z2Uo cHRyLCBzaXplKTsKKwkodm9pZCllcnI7Cit9CisKK3N0YXRpYyB2b2lkCitocGFfaG9va3NfY3Vy dGltZShuc3RpbWVfdCAqcl9uc3RpbWUsIGJvb2wgZmlyc3RfcmVhZGluZykgeworCWlmIChmaXJz dF9yZWFkaW5nKSB7CisJCW5zdGltZV9pbml0X3plcm8ocl9uc3RpbWUpOworCX0KKwluc3RpbWVf dXBkYXRlKHJfbnN0aW1lKTsKK30KKworc3RhdGljIHVpbnQ2NF90CitocGFfaG9va3NfbXNfc2lu Y2UobnN0aW1lX3QgKnBhc3RfbnN0aW1lKSB7CisJcmV0dXJuIG5zdGltZV9uc19zaW5jZShwYXN0 X25zdGltZSkgLyAxMDAwIC8gMTAwMDsKK30KCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMu MC1idWlsZC9qZW1hbGxvYy01LjMuMC9zcmMvaHBkYXRhLmMgYi8zODktZHMtYmFzZS0zLjMuMC1i dWlsZC9qZW1hbGxvYy01LjMuMC9zcmMvaHBkYXRhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMC4uZTdkNzI5NAotLS0gL2Rldi9udWxsCisrKyBiLzM4OS1kcy1iYXNlLTMuMy4w LWJ1aWxkL2plbWFsbG9jLTUuMy4wL3NyYy9ocGRhdGEuYwpAQCAtMCwwICsxLDMyNSBAQAorI2lu Y2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2plbWFsbG9jX3ByZWFtYmxlLmgiCisjaW5jbHVkZSAi amVtYWxsb2MvaW50ZXJuYWwvamVtYWxsb2NfaW50ZXJuYWxfaW5jbHVkZXMuaCIKKworI2luY2x1 ZGUgImplbWFsbG9jL2ludGVybmFsL2hwZGF0YS5oIgorCitzdGF0aWMgaW50CitocGRhdGFfYWdl X2NvbXAoY29uc3QgaHBkYXRhX3QgKmEsIGNvbnN0IGhwZGF0YV90ICpiKSB7CisJdWludDY0X3Qg YV9hZ2UgPSBocGRhdGFfYWdlX2dldChhKTsKKwl1aW50NjRfdCBiX2FnZSA9IGhwZGF0YV9hZ2Vf Z2V0KGIpOworCS8qCisJICogaHBkYXRhIGFnZXMgYXJlIG9wZXJhdGlvbiBjb3VudHMgaW4gdGhl IHBzc2V0OyBubyB0d28gc2hvdWxkIGJlIHRoZQorCSAqIHNhbWUuCisJICovCisJYXNzZXJ0KGFf YWdlICE9IGJfYWdlKTsKKwlyZXR1cm4gKGFfYWdlID4gYl9hZ2UpIC0gKGFfYWdlIDwgYl9hZ2Up OworfQorCitwaF9nZW4oLCBocGRhdGFfYWdlX2hlYXAsIGhwZGF0YV90LCBhZ2VfbGluaywgaHBk YXRhX2FnZV9jb21wKQorCit2b2lkCitocGRhdGFfaW5pdChocGRhdGFfdCAqaHBkYXRhLCB2b2lk ICphZGRyLCB1aW50NjRfdCBhZ2UpIHsKKwlocGRhdGFfYWRkcl9zZXQoaHBkYXRhLCBhZGRyKTsK KwlocGRhdGFfYWdlX3NldChocGRhdGEsIGFnZSk7CisJaHBkYXRhLT5oX2h1Z2UgPSBmYWxzZTsK KwlocGRhdGEtPmhfYWxsb2NfYWxsb3dlZCA9IHRydWU7CisJaHBkYXRhLT5oX2luX3Bzc2V0X2Fs bG9jX2NvbnRhaW5lciA9IGZhbHNlOworCWhwZGF0YS0+aF9wdXJnZV9hbGxvd2VkID0gZmFsc2U7 CisJaHBkYXRhLT5oX2h1Z2lmeV9hbGxvd2VkID0gZmFsc2U7CisJaHBkYXRhLT5oX2luX3Bzc2V0 X2h1Z2lmeV9jb250YWluZXIgPSBmYWxzZTsKKwlocGRhdGEtPmhfbWlkX3B1cmdlID0gZmFsc2U7 CisJaHBkYXRhLT5oX21pZF9odWdpZnkgPSBmYWxzZTsKKwlocGRhdGEtPmhfdXBkYXRpbmcgPSBm YWxzZTsKKwlocGRhdGEtPmhfaW5fcHNzZXQgPSBmYWxzZTsKKwlocGRhdGFfbG9uZ2VzdF9mcmVl X3JhbmdlX3NldChocGRhdGEsIEhVR0VQQUdFX1BBR0VTKTsKKwlocGRhdGEtPmhfbmFjdGl2ZSA9 IDA7CisJZmJfaW5pdChocGRhdGEtPmFjdGl2ZV9wYWdlcywgSFVHRVBBR0VfUEFHRVMpOworCWhw ZGF0YS0+aF9udG91Y2hlZCA9IDA7CisJZmJfaW5pdChocGRhdGEtPnRvdWNoZWRfcGFnZXMsIEhV R0VQQUdFX1BBR0VTKTsKKworCWhwZGF0YV9hc3NlcnRfY29uc2lzdGVudChocGRhdGEpOworfQor Cit2b2lkICoKK2hwZGF0YV9yZXNlcnZlX2FsbG9jKGhwZGF0YV90ICpocGRhdGEsIHNpemVfdCBz eikgeworCWhwZGF0YV9hc3NlcnRfY29uc2lzdGVudChocGRhdGEpOworCS8qCisJICogVGhpcyBp cyBhIG1ldGFkYXRhIGNoYW5nZTsgdGhlIGhwZGF0YSBzaG91bGQgdGhlcmVmb3JlIGVpdGhlciBu b3QgYmUKKwkgKiBpbiB0aGUgcHNzZXQsIG9yIHNob3VsZCBoYXZlIGV4cGxpY2l0bHkgbWFya2Vk IGl0c2VsZiBhcyBiZWluZworCSAqIG1pZC11cGRhdGUuCisJICovCisJYXNzZXJ0KCFocGRhdGEt PmhfaW5fcHNzZXQgfHwgaHBkYXRhLT5oX3VwZGF0aW5nKTsKKwlhc3NlcnQoaHBkYXRhLT5oX2Fs bG9jX2FsbG93ZWQpOworCWFzc2VydCgoc3ogJiBQQUdFX01BU0spID09IDApOworCXNpemVfdCBu cGFnZXMgPSBzeiA+PiBMR19QQUdFOworCWFzc2VydChucGFnZXMgPD0gaHBkYXRhX2xvbmdlc3Rf ZnJlZV9yYW5nZV9nZXQoaHBkYXRhKSk7CisKKwlzaXplX3QgcmVzdWx0OworCisJc2l6ZV90IHN0 YXJ0ID0gMDsKKwkvKgorCSAqIFRoZXNlIGFyZSBkZWFkIHN0b3JlcywgYnV0IHRoZSBjb21waWxl ciB3aWxsIGlzc3VlIHdhcm5pbmdzIG9uIHRoZW0KKwkgKiBzaW5jZSBpdCBjYW4ndCB0ZWxsIHN0 YXRpY2FsbHkgdGhhdCBmb3VuZCBpcyBhbHdheXMgdHJ1ZSBiZWxvdy4KKwkgKi8KKwlzaXplX3Qg YmVnaW4gPSAwOworCXNpemVfdCBsZW4gPSAwOworCisJc2l6ZV90IGxhcmdlc3RfdW5jaG9zZW5f cmFuZ2UgPSAwOworCXdoaWxlICh0cnVlKSB7CisJCWJvb2wgZm91bmQgPSBmYl91cmFuZ2VfaXRl cihocGRhdGEtPmFjdGl2ZV9wYWdlcywKKwkJICAgIEhVR0VQQUdFX1BBR0VTLCBzdGFydCwgJmJl Z2luLCAmbGVuKTsKKwkJLyoKKwkJICogQSBwcmVjb25kaXRpb24gdG8gdGhpcyBmdW5jdGlvbiBp cyB0aGF0IGhwZGF0YSBtdXN0IGJlIGFibGUKKwkJICogdG8gc2VydmUgdGhlIGFsbG9jYXRpb24u CisJCSAqLworCQlhc3NlcnQoZm91bmQpOworCQlhc3NlcnQobGVuIDw9IGhwZGF0YV9sb25nZXN0 X2ZyZWVfcmFuZ2VfZ2V0KGhwZGF0YSkpOworCQlpZiAobGVuID49IG5wYWdlcykgeworCQkJLyoK KwkJCSAqIFdlIHVzZSBmaXJzdC1maXQgd2l0aGluIHRoZSBwYWdlIHNsYWJzOyB0aGlzIGdpdmVz CisJCQkgKiBib3VuZGVkIHdvcnN0LWNhc2UgZnJhZ21lbnRhdGlvbiB3aXRoaW4gYSBzbGFiLiAg SXQncworCQkJICogbm90IG5lY2Vzc2FyaWx5IHJpZ2h0OyB3ZSBjb3VsZCBleHBlcmltZW50IHdp dGgKKwkJCSAqIHZhcmlvdXMgb3RoZXIgb3B0aW9ucy4KKwkJCSAqLworCQkJYnJlYWs7CisJCX0K KwkJaWYgKGxlbiA+IGxhcmdlc3RfdW5jaG9zZW5fcmFuZ2UpIHsKKwkJCWxhcmdlc3RfdW5jaG9z ZW5fcmFuZ2UgPSBsZW47CisJCX0KKwkJc3RhcnQgPSBiZWdpbiArIGxlbjsKKwl9CisJLyogV2Ug Zm91bmQgYSByYW5nZTsgcmVtZW1iZXIgaXQuICovCisJcmVzdWx0ID0gYmVnaW47CisJZmJfc2V0 X3JhbmdlKGhwZGF0YS0+YWN0aXZlX3BhZ2VzLCBIVUdFUEFHRV9QQUdFUywgYmVnaW4sIG5wYWdl cyk7CisJaHBkYXRhLT5oX25hY3RpdmUgKz0gbnBhZ2VzOworCisJLyoKKwkgKiBXZSBtaWdodCBi ZSBhYm91dCB0byBkaXJ0eSBzb21lIG1lbW9yeSBmb3IgdGhlIGZpcnN0IHRpbWU7IHVwZGF0ZSBv dXIKKwkgKiBjb3VudCBpZiBzby4KKwkgKi8KKwlzaXplX3QgbmV3X2RpcnR5ID0gZmJfdWNvdW50 KGhwZGF0YS0+dG91Y2hlZF9wYWdlcywgIEhVR0VQQUdFX1BBR0VTLAorCSAgICByZXN1bHQsIG5w YWdlcyk7CisJZmJfc2V0X3JhbmdlKGhwZGF0YS0+dG91Y2hlZF9wYWdlcywgSFVHRVBBR0VfUEFH RVMsIHJlc3VsdCwgbnBhZ2VzKTsKKwlocGRhdGEtPmhfbnRvdWNoZWQgKz0gbmV3X2RpcnR5Owor CisJLyoKKwkgKiBJZiB3ZSBhbGxvY2F0ZWQgb3V0IG9mIGEgcmFuZ2UgdGhhdCB3YXMgdGhlIGxv bmdlc3QgaW4gdGhlIGhwZGF0YSwgaXQKKwkgKiBtaWdodCBiZSB0aGUgb25seSBvbmUgb2YgdGhh dCBzaXplIGFuZCB3ZSdsbCBoYXZlIHRvIGFkanVzdCB0aGUKKwkgKiBtZXRhZGF0YS4KKwkgKi8K KwlpZiAobGVuID09IGhwZGF0YV9sb25nZXN0X2ZyZWVfcmFuZ2VfZ2V0KGhwZGF0YSkpIHsKKwkJ c3RhcnQgPSBiZWdpbiArIG5wYWdlczsKKwkJd2hpbGUgKHN0YXJ0IDwgSFVHRVBBR0VfUEFHRVMp IHsKKwkJCWJvb2wgZm91bmQgPSBmYl91cmFuZ2VfaXRlcihocGRhdGEtPmFjdGl2ZV9wYWdlcywK KwkJCSAgICBIVUdFUEFHRV9QQUdFUywgc3RhcnQsICZiZWdpbiwgJmxlbik7CisJCQlpZiAoIWZv dW5kKSB7CisJCQkJYnJlYWs7CisJCQl9CisJCQlhc3NlcnQobGVuIDw9IGhwZGF0YV9sb25nZXN0 X2ZyZWVfcmFuZ2VfZ2V0KGhwZGF0YSkpOworCQkJaWYgKGxlbiA9PSBocGRhdGFfbG9uZ2VzdF9m cmVlX3JhbmdlX2dldChocGRhdGEpKSB7CisJCQkJbGFyZ2VzdF91bmNob3Nlbl9yYW5nZSA9IGxl bjsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWlmIChsZW4gPiBsYXJnZXN0X3VuY2hvc2VuX3Jhbmdl KSB7CisJCQkJbGFyZ2VzdF91bmNob3Nlbl9yYW5nZSA9IGxlbjsKKwkJCX0KKwkJCXN0YXJ0ID0g YmVnaW4gKyBsZW47CisJCX0KKwkJaHBkYXRhX2xvbmdlc3RfZnJlZV9yYW5nZV9zZXQoaHBkYXRh LCBsYXJnZXN0X3VuY2hvc2VuX3JhbmdlKTsKKwl9CisKKwlocGRhdGFfYXNzZXJ0X2NvbnNpc3Rl bnQoaHBkYXRhKTsKKwlyZXR1cm4gKHZvaWQgKikoCisJICAgICh1aW50cHRyX3QpaHBkYXRhX2Fk ZHJfZ2V0KGhwZGF0YSkgKyAocmVzdWx0IDw8IExHX1BBR0UpKTsKK30KKwordm9pZAoraHBkYXRh X3VucmVzZXJ2ZShocGRhdGFfdCAqaHBkYXRhLCB2b2lkICphZGRyLCBzaXplX3Qgc3opIHsKKwlo cGRhdGFfYXNzZXJ0X2NvbnNpc3RlbnQoaHBkYXRhKTsKKwkvKiBTZWUgdGhlIGNvbW1lbnQgaW4g cmVzZXJ2ZS4gKi8KKwlhc3NlcnQoIWhwZGF0YS0+aF9pbl9wc3NldCB8fCBocGRhdGEtPmhfdXBk YXRpbmcpOworCWFzc2VydCgoKHVpbnRwdHJfdClhZGRyICYgUEFHRV9NQVNLKSA9PSAwKTsKKwlh c3NlcnQoKHN6ICYgUEFHRV9NQVNLKSA9PSAwKTsKKwlzaXplX3QgYmVnaW4gPSAoKHVpbnRwdHJf dClhZGRyIC0gKHVpbnRwdHJfdClocGRhdGFfYWRkcl9nZXQoaHBkYXRhKSkKKwkgICAgPj4gTEdf UEFHRTsKKwlhc3NlcnQoYmVnaW4gPCBIVUdFUEFHRV9QQUdFUyk7CisJc2l6ZV90IG5wYWdlcyA9 IHN6ID4+IExHX1BBR0U7CisJc2l6ZV90IG9sZF9sb25nZXN0X3JhbmdlID0gaHBkYXRhX2xvbmdl c3RfZnJlZV9yYW5nZV9nZXQoaHBkYXRhKTsKKworCWZiX3Vuc2V0X3JhbmdlKGhwZGF0YS0+YWN0 aXZlX3BhZ2VzLCBIVUdFUEFHRV9QQUdFUywgYmVnaW4sIG5wYWdlcyk7CisJLyogV2UgbWlnaHQg aGF2ZSBqdXN0IGNyZWF0ZWQgYSBuZXcsIGxhcmdlciByYW5nZS4gKi8KKwlzaXplX3QgbmV3X2Jl Z2luID0gKGZiX2ZscyhocGRhdGEtPmFjdGl2ZV9wYWdlcywgSFVHRVBBR0VfUEFHRVMsCisJICAg IGJlZ2luKSArIDEpOworCXNpemVfdCBuZXdfZW5kID0gZmJfZmZzKGhwZGF0YS0+YWN0aXZlX3Bh Z2VzLCBIVUdFUEFHRV9QQUdFUywKKwkgICAgYmVnaW4gKyBucGFnZXMgLSAxKTsKKwlzaXplX3Qg bmV3X3JhbmdlX2xlbiA9IG5ld19lbmQgLSBuZXdfYmVnaW47CisKKwlpZiAobmV3X3JhbmdlX2xl biA+IG9sZF9sb25nZXN0X3JhbmdlKSB7CisJCWhwZGF0YV9sb25nZXN0X2ZyZWVfcmFuZ2Vfc2V0 KGhwZGF0YSwgbmV3X3JhbmdlX2xlbik7CisJfQorCisJaHBkYXRhLT5oX25hY3RpdmUgLT0gbnBh Z2VzOworCisJaHBkYXRhX2Fzc2VydF9jb25zaXN0ZW50KGhwZGF0YSk7Cit9CisKK3NpemVfdAor aHBkYXRhX3B1cmdlX2JlZ2luKGhwZGF0YV90ICpocGRhdGEsIGhwZGF0YV9wdXJnZV9zdGF0ZV90 ICpwdXJnZV9zdGF0ZSkgeworCWhwZGF0YV9hc3NlcnRfY29uc2lzdGVudChocGRhdGEpOworCS8q CisJICogU2VlIHRoZSBjb21tZW50IGJlbG93OyB3ZSBtaWdodCBwdXJnZSBhbnkgaW5hY3RpdmUg ZXh0ZW50LCBzbyBpdCdzCisJICogdW5zYWZlIGZvciBhbnkgb3RoZXIgdGhyZWFkIHRvIHR1cm4g YW55IGluYWN0aXZlIGV4dGVudCBhY3RpdmUgd2hpbGUKKwkgKiB3ZSdyZSBvcGVyYXRpbmcgb24g aXQuCisJICovCisJYXNzZXJ0KCFocGRhdGFfYWxsb2NfYWxsb3dlZF9nZXQoaHBkYXRhKSk7CisK KwlwdXJnZV9zdGF0ZS0+bnB1cmdlZCA9IDA7CisJcHVyZ2Vfc3RhdGUtPm5leHRfcHVyZ2Vfc2Vh cmNoX2JlZ2luID0gMDsKKworCS8qCisJICogSW5pdGlhbGl6ZSB0b19wdXJnZS4KKwkgKgorCSAq IEl0J3MgcG9zc2libGUgdG8gZW5kIHVwIGluIHNpdHVhdGlvbnMgd2hlcmUgdHdvIGRpcnR5IGV4 dGVudHMgYXJlCisJICogc2VwYXJhdGVkIGJ5IGEgcmV0YWluZWQgZXh0ZW50OgorCSAqIC0gMSBw YWdlIGFsbG9jYXRlZC4KKwkgKiAtIDEgcGFnZSBhbGxvY2F0ZWQuCisJICogLSAxIHBhZ2VzIGFs bG9jYXRlZC4KKwkgKgorCSAqIElmIHRoZSBtaWRkbGUgcGFnZSBpcyBmcmVlZCBhbmQgcHVyZ2Vk LCBhbmQgdGhlbiB0aGUgZmlyc3QgYW5kIHRoaXJkCisJICogcGFnZXMgYXJlIGZyZWVkLCBhbmQg dGhlbiBhbm90aGVyIHB1cmdlIHBhc3MgaGFwcGVucywgdGhlIGhwZGF0YQorCSAqIGxvb2tzIGxp a2UgdGhpczoKKwkgKiAtIDEgcGFnZSBkaXJ0eS4KKwkgKiAtIDEgcGFnZSByZXRhaW5lZC4KKwkg KiAtIDEgcGFnZSBkaXJ0eS4KKwkgKgorCSAqIEJ1dCBpdCdzIHNhZmUgdG8gZG8gYSBzaW5nbGUg My1wYWdlIHB1cmdlLgorCSAqCisJICogV2UgZG8gdGhpcyBieSBmaXJzdCBjb21wdXRpbmcgdGhl IGRpcnR5IHBhZ2VzLCBhbmQgdGhlbiBmaWxsaW5nIGluCisJICogYW55IGdhcHMgYnkgZXh0ZW5k aW5nIGVhY2ggcmFuZ2UgaW4gdGhlIGRpcnR5IGJpdG1hcCB0byBleHRlbmQgdW50aWwKKwkgKiB0 aGUgbmV4dCBhY3RpdmUgcGFnZS4gIFRoaXMgcHVyZ2VzIG1vcmUgcGFnZXMsIGJ1dCB0aGUgZXhw ZW5zaXZlIHBhcnQKKwkgKiBvZiBwdXJnaW5nIGlzIHRoZSBUTEIgc2hvb3Rkb3ducywgcmF0aGVy IHRoYW4gdGhlIGtlcm5lbCBzdGF0ZQorCSAqIHRyYWNraW5nOyBkb2luZyBhIGxpdHRsZSBiaXQg bW9yZSBvZiB0aGUgbGF0dGVyIGlzIGZpbmUgaWYgaXQgc2F2ZXMKKwkgKiB1cyBmcm9tIGRvaW5n IHNvbWUgb2YgdGhlIGZvcm1lci4KKwkgKi8KKworCS8qCisJICogVGhlIGRpcnR5IHBhZ2VzIGFy ZSB0aG9zZSB0aGF0IGFyZSB0b3VjaGVkIGJ1dCBub3QgYWN0aXZlLiAgTm90ZSB0aGF0CisJICog aW4gYSBub3JtYWwtaXNoIGNhc2UsIEhVR0VQQUdFX1BBR0VTIGlzIHNvbWV0aGluZyBsaWtlIDUx MiBhbmQgdGhlCisJICogZmJfZ3JvdXBfdCBpcyA2NCBiaXRzLCBzbyB0aGlzIGlzIDY0IGJ5dGVz LCBzcHJlYWQgYWNyb3NzIDgKKwkgKiBmYl9ncm91cF90cy4KKwkgKi8KKwlmYl9ncm91cF90IGRp cnR5X3BhZ2VzW0ZCX05HUk9VUFMoSFVHRVBBR0VfUEFHRVMpXTsKKwlmYl9pbml0KGRpcnR5X3Bh Z2VzLCBIVUdFUEFHRV9QQUdFUyk7CisJZmJfYml0X25vdChkaXJ0eV9wYWdlcywgaHBkYXRhLT5h Y3RpdmVfcGFnZXMsIEhVR0VQQUdFX1BBR0VTKTsKKwlmYl9iaXRfYW5kKGRpcnR5X3BhZ2VzLCBk aXJ0eV9wYWdlcywgaHBkYXRhLT50b3VjaGVkX3BhZ2VzLAorCSAgICBIVUdFUEFHRV9QQUdFUyk7 CisKKwlmYl9pbml0KHB1cmdlX3N0YXRlLT50b19wdXJnZSwgSFVHRVBBR0VfUEFHRVMpOworCXNp emVfdCBuZXh0X2JpdCA9IDA7CisJd2hpbGUgKG5leHRfYml0IDwgSFVHRVBBR0VfUEFHRVMpIHsK KwkJc2l6ZV90IG5leHRfZGlydHkgPSBmYl9mZnMoZGlydHlfcGFnZXMsIEhVR0VQQUdFX1BBR0VT LAorCQkgICAgbmV4dF9iaXQpOworCQkvKiBSZWNhbGwgdGhhdCBmYl9mZnMgcmV0dXJucyBuYml0 cyBpZiBubyBzZXQgYml0IGlzIGZvdW5kLiAqLworCQlpZiAobmV4dF9kaXJ0eSA9PSBIVUdFUEFH RV9QQUdFUykgeworCQkJYnJlYWs7CisJCX0KKwkJc2l6ZV90IG5leHRfYWN0aXZlID0gZmJfZmZz KGhwZGF0YS0+YWN0aXZlX3BhZ2VzLAorCQkgICAgSFVHRVBBR0VfUEFHRVMsIG5leHRfZGlydHkp OworCQkvKgorCQkgKiBEb24ndCBwdXJnZSBwYXN0IHRoZSBlbmQgb2YgdGhlIGRpcnR5IGV4dGVu dCwgaW50byByZXRhaW5lZAorCQkgKiBwYWdlcy4gIFRoaXMgaGVscHMgdGhlIGtlcm5lbCBhIHRp bnkgYml0LCBidXQgaG9uZXN0bHkgaXQncworCQkgKiBtb3N0bHkgaGVscGZ1bCBmb3IgdGVzdGlu ZyAod2hlcmUgd2UgdGVuZCB0byB3cml0ZSB0ZXN0IGNhc2VzCisJCSAqIHRoYXQgdGhpbmsgaW4g dGVybXMgb2YgdGhlIGRpcnR5IHJhbmdlcykuCisJCSAqLworCQlzc2l6ZV90IGxhc3RfZGlydHkg PSBmYl9mbHMoZGlydHlfcGFnZXMsIEhVR0VQQUdFX1BBR0VTLAorCQkgICAgbmV4dF9hY3RpdmUg LSAxKTsKKwkJYXNzZXJ0KGxhc3RfZGlydHkgPj0gMCk7CisJCWFzc2VydCgoc2l6ZV90KWxhc3Rf ZGlydHkgPj0gbmV4dF9kaXJ0eSk7CisJCWFzc2VydCgoc2l6ZV90KWxhc3RfZGlydHkgLSBuZXh0 X2RpcnR5ICsgMSA8PSBIVUdFUEFHRV9QQUdFUyk7CisKKwkJZmJfc2V0X3JhbmdlKHB1cmdlX3N0 YXRlLT50b19wdXJnZSwgSFVHRVBBR0VfUEFHRVMsIG5leHRfZGlydHksCisJCSAgICBsYXN0X2Rp cnR5IC0gbmV4dF9kaXJ0eSArIDEpOworCQluZXh0X2JpdCA9IG5leHRfYWN0aXZlICsgMTsKKwl9 CisKKwkvKiBXZSBzaG91bGQgcHVyZ2UsIGF0IGxlYXN0LCBldmVyeXRoaW5nIGRpcnR5LiAqLwor CXNpemVfdCBuZGlydHkgPSBocGRhdGEtPmhfbnRvdWNoZWQgLSBocGRhdGEtPmhfbmFjdGl2ZTsK KwlwdXJnZV9zdGF0ZS0+bmRpcnR5X3RvX3B1cmdlID0gbmRpcnR5OworCWFzc2VydChuZGlydHkg PD0gZmJfc2NvdW50KAorCSAgICBwdXJnZV9zdGF0ZS0+dG9fcHVyZ2UsIEhVR0VQQUdFX1BBR0VT LCAwLCBIVUdFUEFHRV9QQUdFUykpOworCWFzc2VydChuZGlydHkgPT0gZmJfc2NvdW50KGRpcnR5 X3BhZ2VzLCBIVUdFUEFHRV9QQUdFUywgMCwKKwkgICAgSFVHRVBBR0VfUEFHRVMpKTsKKworCWhw ZGF0YV9hc3NlcnRfY29uc2lzdGVudChocGRhdGEpOworCisJcmV0dXJuIG5kaXJ0eTsKK30KKwor Ym9vbAoraHBkYXRhX3B1cmdlX25leHQoaHBkYXRhX3QgKmhwZGF0YSwgaHBkYXRhX3B1cmdlX3N0 YXRlX3QgKnB1cmdlX3N0YXRlLAorICAgIHZvaWQgKipyX3B1cmdlX2FkZHIsIHNpemVfdCAqcl9w dXJnZV9zaXplKSB7CisJLyoKKwkgKiBOb3RlIHRoYXQgd2UgZG9uJ3QgaGF2ZSBhIGNvbnNpc3Rl bmN5IGNoZWNrIGhlcmU7IHdlJ3JlIGFjY2Vzc2luZworCSAqIGhwZGF0YSB3aXRob3V0IHN5bmNo cm9uaXphdGlvbiwgYW5kIHRoZXJlZm9yZSBoYXZlIG5vIHJpZ2h0IHRvIGV4cGVjdAorCSAqIGEg Y29uc2lzdGVudCBzdGF0ZS4KKwkgKi8KKwlhc3NlcnQoIWhwZGF0YV9hbGxvY19hbGxvd2VkX2dl dChocGRhdGEpKTsKKworCWlmIChwdXJnZV9zdGF0ZS0+bmV4dF9wdXJnZV9zZWFyY2hfYmVnaW4g PT0gSFVHRVBBR0VfUEFHRVMpIHsKKwkJcmV0dXJuIGZhbHNlOworCX0KKwlzaXplX3QgcHVyZ2Vf YmVnaW47CisJc2l6ZV90IHB1cmdlX2xlbjsKKwlib29sIGZvdW5kX3JhbmdlID0gZmJfc3Jhbmdl X2l0ZXIocHVyZ2Vfc3RhdGUtPnRvX3B1cmdlLCBIVUdFUEFHRV9QQUdFUywKKwkgICAgcHVyZ2Vf c3RhdGUtPm5leHRfcHVyZ2Vfc2VhcmNoX2JlZ2luLCAmcHVyZ2VfYmVnaW4sICZwdXJnZV9sZW4p OworCWlmICghZm91bmRfcmFuZ2UpIHsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCSpyX3B1cmdl X2FkZHIgPSAodm9pZCAqKSgKKwkgICAgKHVpbnRwdHJfdClocGRhdGFfYWRkcl9nZXQoaHBkYXRh KSArIHB1cmdlX2JlZ2luICogUEFHRSk7CisJKnJfcHVyZ2Vfc2l6ZSA9IHB1cmdlX2xlbiAqIFBB R0U7CisKKwlwdXJnZV9zdGF0ZS0+bmV4dF9wdXJnZV9zZWFyY2hfYmVnaW4gPSBwdXJnZV9iZWdp biArIHB1cmdlX2xlbjsKKwlwdXJnZV9zdGF0ZS0+bnB1cmdlZCArPSBwdXJnZV9sZW47CisJYXNz ZXJ0KHB1cmdlX3N0YXRlLT5ucHVyZ2VkIDw9IEhVR0VQQUdFX1BBR0VTKTsKKworCXJldHVybiB0 cnVlOworfQorCit2b2lkCitocGRhdGFfcHVyZ2VfZW5kKGhwZGF0YV90ICpocGRhdGEsIGhwZGF0 YV9wdXJnZV9zdGF0ZV90ICpwdXJnZV9zdGF0ZSkgeworCWFzc2VydCghaHBkYXRhX2FsbG9jX2Fs bG93ZWRfZ2V0KGhwZGF0YSkpOworCWhwZGF0YV9hc3NlcnRfY29uc2lzdGVudChocGRhdGEpOwor CS8qIFNlZSB0aGUgY29tbWVudCBpbiByZXNlcnZlLiAqLworCWFzc2VydCghaHBkYXRhLT5oX2lu X3Bzc2V0IHx8IGhwZGF0YS0+aF91cGRhdGluZyk7CisKKwlhc3NlcnQocHVyZ2Vfc3RhdGUtPm5w dXJnZWQgPT0gZmJfc2NvdW50KHB1cmdlX3N0YXRlLT50b19wdXJnZSwKKwkgICAgSFVHRVBBR0Vf UEFHRVMsIDAsIEhVR0VQQUdFX1BBR0VTKSk7CisJYXNzZXJ0KHB1cmdlX3N0YXRlLT5ucHVyZ2Vk ID49IHB1cmdlX3N0YXRlLT5uZGlydHlfdG9fcHVyZ2UpOworCisJZmJfYml0X25vdChwdXJnZV9z dGF0ZS0+dG9fcHVyZ2UsIHB1cmdlX3N0YXRlLT50b19wdXJnZSwKKwkgICAgSFVHRVBBR0VfUEFH RVMpOworCWZiX2JpdF9hbmQoaHBkYXRhLT50b3VjaGVkX3BhZ2VzLCBocGRhdGEtPnRvdWNoZWRf cGFnZXMsCisJICAgIHB1cmdlX3N0YXRlLT50b19wdXJnZSwgSFVHRVBBR0VfUEFHRVMpOworCWFz c2VydChocGRhdGEtPmhfbnRvdWNoZWQgPj0gcHVyZ2Vfc3RhdGUtPm5kaXJ0eV90b19wdXJnZSk7 CisJaHBkYXRhLT5oX250b3VjaGVkIC09IHB1cmdlX3N0YXRlLT5uZGlydHlfdG9fcHVyZ2U7CisK KwlocGRhdGFfYXNzZXJ0X2NvbnNpc3RlbnQoaHBkYXRhKTsKK30KKwordm9pZAoraHBkYXRhX2h1 Z2lmeShocGRhdGFfdCAqaHBkYXRhKSB7CisJaHBkYXRhX2Fzc2VydF9jb25zaXN0ZW50KGhwZGF0 YSk7CisJaHBkYXRhLT5oX2h1Z2UgPSB0cnVlOworCWZiX3NldF9yYW5nZShocGRhdGEtPnRvdWNo ZWRfcGFnZXMsIEhVR0VQQUdFX1BBR0VTLCAwLCBIVUdFUEFHRV9QQUdFUyk7CisJaHBkYXRhLT5o X250b3VjaGVkID0gSFVHRVBBR0VfUEFHRVM7CisJaHBkYXRhX2Fzc2VydF9jb25zaXN0ZW50KGhw ZGF0YSk7Cit9CisKK3ZvaWQKK2hwZGF0YV9kZWh1Z2lmeShocGRhdGFfdCAqaHBkYXRhKSB7CisJ aHBkYXRhX2Fzc2VydF9jb25zaXN0ZW50KGhwZGF0YSk7CisJaHBkYXRhLT5oX2h1Z2UgPSBmYWxz ZTsKKwlocGRhdGFfYXNzZXJ0X2NvbnNpc3RlbnQoaHBkYXRhKTsKK30KCmRpZmYgLS1naXQgYS8z ODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9zcmMvaW5zcGVjdC5jIGIvMzg5 LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvc3JjL2luc3BlY3QuYwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTFiNWQ1Ci0tLSAvZGV2L251bGwKKysrIGIv Mzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvc3JjL2luc3BlY3QuYwpAQCAt MCwwICsxLDc3IEBACisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvamVtYWxsb2NfcHJlYW1i bGUuaCIKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9qZW1hbGxvY19pbnRlcm5hbF9pbmNs dWRlcy5oIgorCit2b2lkCitpbnNwZWN0X2V4dGVudF91dGlsX3N0YXRzX2dldCh0c2RuX3QgKnRz ZG4sIGNvbnN0IHZvaWQgKnB0ciwgc2l6ZV90ICpuZnJlZSwKKyAgICBzaXplX3QgKm5yZWdzLCBz aXplX3QgKnNpemUpIHsKKwlhc3NlcnQocHRyICE9IE5VTEwgJiYgbmZyZWUgIT0gTlVMTCAmJiBu cmVncyAhPSBOVUxMICYmIHNpemUgIT0gTlVMTCk7CisKKwljb25zdCBlZGF0YV90ICplZGF0YSA9 IGVtYXBfZWRhdGFfbG9va3VwKHRzZG4sICZhcmVuYV9lbWFwX2dsb2JhbCwgcHRyKTsKKwlpZiAo dW5saWtlbHkoZWRhdGEgPT0gTlVMTCkpIHsKKwkJKm5mcmVlID0gKm5yZWdzID0gKnNpemUgPSAw OworCQlyZXR1cm47CisJfQorCisJKnNpemUgPSBlZGF0YV9zaXplX2dldChlZGF0YSk7CisJaWYg KCFlZGF0YV9zbGFiX2dldChlZGF0YSkpIHsKKwkJKm5mcmVlID0gMDsKKwkJKm5yZWdzID0gMTsK Kwl9IGVsc2UgeworCQkqbmZyZWUgPSBlZGF0YV9uZnJlZV9nZXQoZWRhdGEpOworCQkqbnJlZ3Mg PSBiaW5faW5mb3NbZWRhdGFfc3ppbmRfZ2V0KGVkYXRhKV0ubnJlZ3M7CisJCWFzc2VydCgqbmZy ZWUgPD0gKm5yZWdzKTsKKwkJYXNzZXJ0KCpuZnJlZSAqIGVkYXRhX3VzaXplX2dldChlZGF0YSkg PD0gKnNpemUpOworCX0KK30KKwordm9pZAoraW5zcGVjdF9leHRlbnRfdXRpbF9zdGF0c192ZXJi b3NlX2dldCh0c2RuX3QgKnRzZG4sIGNvbnN0IHZvaWQgKnB0ciwKKyAgICBzaXplX3QgKm5mcmVl LCBzaXplX3QgKm5yZWdzLCBzaXplX3QgKnNpemUsIHNpemVfdCAqYmluX25mcmVlLAorICAgIHNp emVfdCAqYmluX25yZWdzLCB2b2lkICoqc2xhYmN1cl9hZGRyKSB7CisJYXNzZXJ0KHB0ciAhPSBO VUxMICYmIG5mcmVlICE9IE5VTEwgJiYgbnJlZ3MgIT0gTlVMTCAmJiBzaXplICE9IE5VTEwKKwkg ICAgJiYgYmluX25mcmVlICE9IE5VTEwgJiYgYmluX25yZWdzICE9IE5VTEwgJiYgc2xhYmN1cl9h ZGRyICE9IE5VTEwpOworCisJY29uc3QgZWRhdGFfdCAqZWRhdGEgPSBlbWFwX2VkYXRhX2xvb2t1 cCh0c2RuLCAmYXJlbmFfZW1hcF9nbG9iYWwsIHB0cik7CisJaWYgKHVubGlrZWx5KGVkYXRhID09 IE5VTEwpKSB7CisJCSpuZnJlZSA9ICpucmVncyA9ICpzaXplID0gKmJpbl9uZnJlZSA9ICpiaW5f bnJlZ3MgPSAwOworCQkqc2xhYmN1cl9hZGRyID0gTlVMTDsKKwkJcmV0dXJuOworCX0KKworCSpz aXplID0gZWRhdGFfc2l6ZV9nZXQoZWRhdGEpOworCWlmICghZWRhdGFfc2xhYl9nZXQoZWRhdGEp KSB7CisJCSpuZnJlZSA9ICpiaW5fbmZyZWUgPSAqYmluX25yZWdzID0gMDsKKwkJKm5yZWdzID0g MTsKKwkJKnNsYWJjdXJfYWRkciA9IE5VTEw7CisJCXJldHVybjsKKwl9CisKKwkqbmZyZWUgPSBl ZGF0YV9uZnJlZV9nZXQoZWRhdGEpOworCWNvbnN0IHN6aW5kX3Qgc3ppbmQgPSBlZGF0YV9zemlu ZF9nZXQoZWRhdGEpOworCSpucmVncyA9IGJpbl9pbmZvc1tzemluZF0ubnJlZ3M7CisJYXNzZXJ0 KCpuZnJlZSA8PSAqbnJlZ3MpOworCWFzc2VydCgqbmZyZWUgKiBlZGF0YV91c2l6ZV9nZXQoZWRh dGEpIDw9ICpzaXplKTsKKworCWFyZW5hX3QgKmFyZW5hID0gKGFyZW5hX3QgKilhdG9taWNfbG9h ZF9wKAorCSAgICAmYXJlbmFzW2VkYXRhX2FyZW5hX2luZF9nZXQoZWRhdGEpXSwgQVRPTUlDX1JF TEFYRUQpOworCWFzc2VydChhcmVuYSAhPSBOVUxMKTsKKwljb25zdCB1bnNpZ25lZCBiaW5zaGFy ZCA9IGVkYXRhX2JpbnNoYXJkX2dldChlZGF0YSk7CisJYmluX3QgKmJpbiA9IGFyZW5hX2dldF9i aW4oYXJlbmEsIHN6aW5kLCBiaW5zaGFyZCk7CisKKwltYWxsb2NfbXV0ZXhfbG9jayh0c2RuLCAm YmluLT5sb2NrKTsKKwlpZiAoY29uZmlnX3N0YXRzKSB7CisJCSpiaW5fbnJlZ3MgPSAqbnJlZ3Mg KiBiaW4tPnN0YXRzLmN1cnNsYWJzOworCQlhc3NlcnQoKmJpbl9ucmVncyA+PSBiaW4tPnN0YXRz LmN1cnJlZ3MpOworCQkqYmluX25mcmVlID0gKmJpbl9ucmVncyAtIGJpbi0+c3RhdHMuY3VycmVn czsKKwl9IGVsc2UgeworCQkqYmluX25mcmVlID0gKmJpbl9ucmVncyA9IDA7CisJfQorCWVkYXRh X3QgKnNsYWI7CisJaWYgKGJpbi0+c2xhYmN1ciAhPSBOVUxMKSB7CisJCXNsYWIgPSBiaW4tPnNs YWJjdXI7CisJfSBlbHNlIHsKKwkJc2xhYiA9IGVkYXRhX2hlYXBfZmlyc3QoJmJpbi0+c2xhYnNf bm9uZnVsbCk7CisJfQorCSpzbGFiY3VyX2FkZHIgPSBzbGFiICE9IE5VTEwgPyBlZGF0YV9hZGRy X2dldChzbGFiKSA6IE5VTEw7CisJbWFsbG9jX211dGV4X3VubG9jayh0c2RuLCAmYmluLT5sb2Nr KTsKK30KCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMu MC9zcmMvamVtYWxsb2MuYyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4w L3NyYy9qZW1hbGxvYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2NTVk ZTQKLS0tIC9kZXYvbnVsbAorKysgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01 LjMuMC9zcmMvamVtYWxsb2MuYwpAQCAtMCwwICsxLDQ0NzYgQEAKKyNkZWZpbmUgSkVNQUxMT0Nf Q18KKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9qZW1hbGxvY19wcmVhbWJsZS5oIgorI2lu Y2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2plbWFsbG9jX2ludGVybmFsX2luY2x1ZGVzLmgiCisK KyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9hc3NlcnQuaCIKKyNpbmNsdWRlICJqZW1hbGxv Yy9pbnRlcm5hbC9hdG9taWMuaCIKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9idWZfd3Jp dGVyLmgiCisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvY3RsLmgiCisjaW5jbHVkZSAiamVt YWxsb2MvaW50ZXJuYWwvZW1hcC5oIgorI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2V4dGVu dF9kc3MuaCIKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9leHRlbnRfbW1hcC5oIgorI2lu Y2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2Z4cC5oIgorI2luY2x1ZGUgImplbWFsbG9jL2ludGVy bmFsL3Nhbi5oIgorI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2hvb2suaCIKKyNpbmNsdWRl ICJqZW1hbGxvYy9pbnRlcm5hbC9qZW1hbGxvY19pbnRlcm5hbF90eXBlcy5oIgorI2luY2x1ZGUg ImplbWFsbG9jL2ludGVybmFsL2xvZy5oIgorI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL21h bGxvY19pby5oIgorI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL211dGV4LmgiCisjaW5jbHVk ZSAiamVtYWxsb2MvaW50ZXJuYWwvbnN0aW1lLmgiCisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJu YWwvcnRyZWUuaCIKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9zYWZldHlfY2hlY2suaCIK KyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9zYy5oIgorI2luY2x1ZGUgImplbWFsbG9jL2lu dGVybmFsL3NwaW4uaCIKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9zei5oIgorI2luY2x1 ZGUgImplbWFsbG9jL2ludGVybmFsL3RpY2tlci5oIgorI2luY2x1ZGUgImplbWFsbG9jL2ludGVy bmFsL3RocmVhZF9ldmVudC5oIgorI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL3V0aWwuaCIK KworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIERhdGEuICovCisKKy8qIFJ1bnRpbWUgY29u ZmlndXJhdGlvbiBvcHRpb25zLiAqLworY29uc3QgY2hhcgkqamVfbWFsbG9jX2NvbmYKKyNpZm5k ZWYgX1dJTjMyCisgICAgSkVNQUxMT0NfQVRUUih3ZWFrKQorI2VuZGlmCisgICAgOworLyoKKyAq IFRoZSB1c3VhbCBydWxlIGlzIHRoYXQgdGhlIGNsb3NlciB0byBydW50aW1lIHlvdSBhcmUsIHRo ZSBoaWdoZXIgcHJpb3JpdHkKKyAqIHlvdXIgY29uZmlndXJhdGlvbiBzZXR0aW5ncyBhcmUgKHNv IHRoZSBqZW1hbGxvYyBjb25maWcgb3B0aW9ucyBnZXQgbG93ZXIKKyAqIHByaW9yaXR5IHRoYW4g dGhlIHBlci1iaW5hcnkgc2V0dGluZywgd2hpY2ggZ2V0cyBsb3dlciBwcmlvcml0eSB0aGFuIHRo ZSAvZXRjCisgKiBzZXR0aW5nLCB3aGljaCBnZXRzIGxvd2VyIHByaW9yaXR5IHRoYW4gdGhlIGVu dmlyb25tZW50IHNldHRpbmdzKS4KKyAqCisgKiBCdXQgaXQncyBhIGZhaXJseSBjb21tb24gdXNl IGNhc2UgaW4gc29tZSB0ZXN0aW5nIGVudmlyb25tZW50cyBmb3IgYSB1c2VyIHRvCisgKiBiZSBh YmxlIHRvIGNvbnRyb2wgdGhlIGJpbmFyeSwgYnV0IG5vdGhpbmcgZWxzZSAoZS5nLiBhIHBlcmZv cm1hbmN5IGNhbmFyeQorICogdXNlcyB0aGUgcHJvZHVjdGlvbiBPUyBhbmQgZW52aXJvbm1lbnQg dmFyaWFibGVzLCBidXQgY2FuIHJ1biBhbnkgYmluYXJ5IGluCisgKiB0aG9zZSBjaXJjdW1zdGFu Y2VzKS4gIEZvciB0aGVzZSB1c2UgY2FzZXMsIGl0J3MgaGFuZHkgdG8gaGF2ZSBhbiBpbi1iaW5h cnkKKyAqIG1lY2hhbmlzbSBmb3Igb3ZlcnJpZGluZyBlbnZpcm9ubWVudCB2YXJpYWJsZSBzZXR0 aW5ncywgd2l0aCB0aGUgaWRlYSB0aGF0IGlmCisgKiB0aGUgcmVzdWx0cyBhcmUgcG9zaXRpdmUg dGhleSBnZXQgcHJvbW90ZWQgdG8gdGhlIG9mZmljaWFsIHNldHRpbmdzLCBhbmQKKyAqIG1vdmVk IGZyb20gdGhlIGJpbmFyeSB0byB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUuCisgKgorICogV2Ug ZG9uJ3QgYWN0dWFsbHkgd2FudCB0aGlzIHRvIGJlIHdpZGVzcHJlYWQsIHNvIHdlJ2xsIGdpdmUg aXQgYSBzaWxseSBuYW1lCisgKiBhbmQgbm90IG1lbnRpb24gaXQgaW4gaGVhZGVycyBvciBkb2N1 bWVudGF0aW9uLgorICovCitjb25zdCBjaGFyCSpqZV9tYWxsb2NfY29uZl8yX2NvbmZfaGFyZGVy CisjaWZuZGVmIF9XSU4zMgorICAgIEpFTUFMTE9DX0FUVFIod2VhaykKKyNlbmRpZgorICAgIDsK KworYm9vbAlvcHRfYWJvcnQgPQorI2lmZGVmIEpFTUFMTE9DX0RFQlVHCisgICAgdHJ1ZQorI2Vs c2UKKyAgICBmYWxzZQorI2VuZGlmCisgICAgOworYm9vbAlvcHRfYWJvcnRfY29uZiA9CisjaWZk ZWYgSkVNQUxMT0NfREVCVUcKKyAgICB0cnVlCisjZWxzZQorICAgIGZhbHNlCisjZW5kaWYKKyAg ICA7CisvKiBJbnRlbnRpb25hbGx5IGRlZmF1bHQgb2ZmLCBldmVuIHdpdGggZGVidWcgYnVpbGRz LiAqLworYm9vbAlvcHRfY29uZmlybV9jb25mID0gZmFsc2U7Citjb25zdCBjaGFyCSpvcHRfanVu ayA9CisjaWYgKGRlZmluZWQoSkVNQUxMT0NfREVCVUcpICYmIGRlZmluZWQoSkVNQUxMT0NfRklM TCkpCisgICAgInRydWUiCisjZWxzZQorICAgICJmYWxzZSIKKyNlbmRpZgorICAgIDsKK2Jvb2wJ b3B0X2p1bmtfYWxsb2MgPQorI2lmIChkZWZpbmVkKEpFTUFMTE9DX0RFQlVHKSAmJiBkZWZpbmVk KEpFTUFMTE9DX0ZJTEwpKQorICAgIHRydWUKKyNlbHNlCisgICAgZmFsc2UKKyNlbmRpZgorICAg IDsKK2Jvb2wJb3B0X2p1bmtfZnJlZSA9CisjaWYgKGRlZmluZWQoSkVNQUxMT0NfREVCVUcpICYm IGRlZmluZWQoSkVNQUxMT0NfRklMTCkpCisgICAgdHJ1ZQorI2Vsc2UKKyAgICBmYWxzZQorI2Vu ZGlmCisgICAgOworYm9vbAlvcHRfdHJ1c3RfbWFkdmlzZSA9CisjaWZkZWYgSkVNQUxMT0NfUFVS R0VfTUFEVklTRV9ET05UTkVFRF9aRVJPUworICAgIGZhbHNlCisjZWxzZQorICAgIHRydWUKKyNl bmRpZgorICAgIDsKKworYm9vbCBvcHRfY2FjaGVfb2JsaXZpb3VzID0KKyNpZmRlZiBKRU1BTExP Q19DQUNIRV9PQkxJVklPVVMKKyAgICB0cnVlCisjZWxzZQorICAgIGZhbHNlCisjZW5kaWYKKyAg ICA7CisKK3plcm9fcmVhbGxvY19hY3Rpb25fdCBvcHRfemVyb19yZWFsbG9jX2FjdGlvbiA9Cisj aWZkZWYgSkVNQUxMT0NfWkVST19SRUFMTE9DX0RFRkFVTFRfRlJFRQorICAgIHplcm9fcmVhbGxv Y19hY3Rpb25fZnJlZQorI2Vsc2UKKyAgICB6ZXJvX3JlYWxsb2NfYWN0aW9uX2FsbG9jCisjZW5k aWYKKyAgICA7CisKK2F0b21pY196dV90IHplcm9fcmVhbGxvY19jb3VudCA9IEFUT01JQ19JTklU KDApOworCitjb25zdCBjaGFyICp6ZXJvX3JlYWxsb2NfbW9kZV9uYW1lc1tdID0geworCSJhbGxv YyIsCisJImZyZWUiLAorCSJhYm9ydCIsCit9OworCisvKgorICogVGhlc2UgYXJlIHRoZSBkb2N1 bWVudGVkIHZhbHVlcyBmb3IganVuayBmaWxsIGRlYnVnZ2luZyBmYWNpbGl0aWVzIC0tIHNlZSB0 aGUKKyAqIG1hbiBwYWdlLgorICovCitzdGF0aWMgY29uc3QgdWludDhfdCBqdW5rX2FsbG9jX2J5 dGUgPSAweGE1Oworc3RhdGljIGNvbnN0IHVpbnQ4X3QganVua19mcmVlX2J5dGUgPSAweDVhOwor CitzdGF0aWMgdm9pZCBkZWZhdWx0X2p1bmtfYWxsb2Modm9pZCAqcHRyLCBzaXplX3QgdXNpemUp IHsKKwltZW1zZXQocHRyLCBqdW5rX2FsbG9jX2J5dGUsIHVzaXplKTsKK30KKworc3RhdGljIHZv aWQgZGVmYXVsdF9qdW5rX2ZyZWUodm9pZCAqcHRyLCBzaXplX3QgdXNpemUpIHsKKwltZW1zZXQo cHRyLCBqdW5rX2ZyZWVfYnl0ZSwgdXNpemUpOworfQorCit2b2lkICgqanVua19hbGxvY19jYWxs YmFjaykodm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSkgPSAmZGVmYXVsdF9qdW5rX2FsbG9jOwordm9p ZCAoKmp1bmtfZnJlZV9jYWxsYmFjaykodm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSkgPSAmZGVmYXVs dF9qdW5rX2ZyZWU7CisKK2Jvb2wJb3B0X3V0cmFjZSA9IGZhbHNlOworYm9vbAlvcHRfeG1hbGxv YyA9IGZhbHNlOworYm9vbAlvcHRfZXhwZXJpbWVudGFsX2luZmFsbGlibGVfbmV3ID0gZmFsc2U7 Citib29sCW9wdF96ZXJvID0gZmFsc2U7Cit1bnNpZ25lZAlvcHRfbmFyZW5hcyA9IDA7CitmeHBf dAkJb3B0X25hcmVuYXNfcmF0aW8gPSBGWFBfSU5JVF9JTlQoNCk7CisKK3Vuc2lnbmVkCW5jcHVz OworCisvKiBQcm90ZWN0cyBhcmVuYXMgaW5pdGlhbGl6YXRpb24uICovCittYWxsb2NfbXV0ZXhf dCBhcmVuYXNfbG9jazsKKworLyogVGhlIGdsb2JhbCBocGEsIGFuZCB3aGV0aGVyIGl0J3Mgb24u ICovCitib29sIG9wdF9ocGEgPSBmYWxzZTsKK2hwYV9zaGFyZF9vcHRzX3Qgb3B0X2hwYV9vcHRz ID0gSFBBX1NIQVJEX09QVFNfREVGQVVMVDsKK3NlY19vcHRzX3Qgb3B0X2hwYV9zZWNfb3B0cyA9 IFNFQ19PUFRTX0RFRkFVTFQ7CisKKy8qCisgKiBBcmVuYXMgdGhhdCBhcmUgdXNlZCB0byBzZXJ2 aWNlIGV4dGVybmFsIHJlcXVlc3RzLiAgTm90IGFsbCBlbGVtZW50cyBvZiB0aGUKKyAqIGFyZW5h cyBhcnJheSBhcmUgbmVjZXNzYXJpbHkgdXNlZDsgYXJlbmFzIGFyZSBjcmVhdGVkIGxhemlseSBh cyBuZWVkZWQuCisgKgorICogYXJlbmFzWzAuLm5hcmVuYXNfYXV0bykgYXJlIHVzZWQgZm9yIGF1 dG9tYXRpYyBtdWx0aXBsZXhpbmcgb2YgdGhyZWFkcyBhbmQKKyAqIGFyZW5hcy4gIGFyZW5hc1tu YXJlbmFzX2F1dG8uLm5hcmVuYXNfdG90YWwpIGFyZSBvbmx5IHVzZWQgaWYgdGhlIGFwcGxpY2F0 aW9uCisgKiB0YWtlcyBzb21lIGFjdGlvbiB0byBjcmVhdGUgdGhlbSBhbmQgYWxsb2NhdGUgZnJv bSB0aGVtLgorICoKKyAqIFBvaW50cyB0byBhbiBhcmVuYV90LgorICovCitKRU1BTExPQ19BTElH TkVEKENBQ0hFTElORSkKK2F0b21pY19wX3QJCWFyZW5hc1tNQUxMT0NYX0FSRU5BX0xJTUlUXTsK K3N0YXRpYyBhdG9taWNfdV90CW5hcmVuYXNfdG90YWw7IC8qIFVzZSBuYXJlbmFzX3RvdGFsXyoo KS4gKi8KKy8qIEJlbG93IHRocmVlIGFyZSByZWFkLW9ubHkgYWZ0ZXIgaW5pdGlhbGl6YXRpb24u ICovCitzdGF0aWMgYXJlbmFfdAkJKmEwOyAvKiBhcmVuYXNbMF0uICovCit1bnNpZ25lZAkJbmFy ZW5hc19hdXRvOwordW5zaWduZWQJCW1hbnVhbF9hcmVuYV9iYXNlOworCittYWxsb2NfaW5pdF90 IG1hbGxvY19pbml0X3N0YXRlID0gbWFsbG9jX2luaXRfdW5pbml0aWFsaXplZDsKKworLyogRmFs c2Ugc2hvdWxkIGJlIHRoZSBjb21tb24gY2FzZS4gIFNldCB0byB0cnVlIHRvIHRyaWdnZXIgaW5p dGlhbGl6YXRpb24uICovCitib29sCQkJbWFsbG9jX3Nsb3cgPSB0cnVlOworCisvKiBXaGVuIG1h bGxvY19zbG93IGlzIHRydWUsIHNldCB0aGUgY29ycmVzcG9uZGluZyBiaXRzIGZvciBzYW5pdHkg Y2hlY2suICovCitlbnVtIHsKKwlmbGFnX29wdF9qdW5rX2FsbG9jCT0gKDFVKSwKKwlmbGFnX29w dF9qdW5rX2ZyZWUJPSAoMVUgPDwgMSksCisJZmxhZ19vcHRfemVybwkJPSAoMVUgPDwgMiksCisJ ZmxhZ19vcHRfdXRyYWNlCQk9ICgxVSA8PCAzKSwKKwlmbGFnX29wdF94bWFsbG9jCT0gKDFVIDw8 IDQpCit9Oworc3RhdGljIHVpbnQ4X3QJbWFsbG9jX3Nsb3dfZmxhZ3M7CisKKyNpZmRlZiBKRU1B TExPQ19USFJFQURFRF9JTklUCisvKiBVc2VkIHRvIGxldCB0aGUgaW5pdGlhbGl6aW5nIHRocmVh ZCByZWN1cnNpdmVseSBhbGxvY2F0ZS4gKi8KKyMgIGRlZmluZSBOT19JTklUSUFMSVpFUgkoKHVu c2lnbmVkIGxvbmcpMCkKKyMgIGRlZmluZSBJTklUSUFMSVpFUgkJcHRocmVhZF9zZWxmKCkKKyMg IGRlZmluZSBJU19JTklUSUFMSVpFUgkobWFsbG9jX2luaXRpYWxpemVyID09IHB0aHJlYWRfc2Vs ZigpKQorc3RhdGljIHB0aHJlYWRfdAkJbWFsbG9jX2luaXRpYWxpemVyID0gTk9fSU5JVElBTEla RVI7CisjZWxzZQorIyAgZGVmaW5lIE5PX0lOSVRJQUxJWkVSCWZhbHNlCisjICBkZWZpbmUgSU5J VElBTElaRVIJCXRydWUKKyMgIGRlZmluZSBJU19JTklUSUFMSVpFUgltYWxsb2NfaW5pdGlhbGl6 ZXIKK3N0YXRpYyBib29sCQkJbWFsbG9jX2luaXRpYWxpemVyID0gTk9fSU5JVElBTElaRVI7Cisj ZW5kaWYKKworLyogVXNlZCB0byBhdm9pZCBpbml0aWFsaXphdGlvbiByYWNlcy4gKi8KKyNpZmRl ZiBfV0lOMzIKKyNpZiBfV0lOMzJfV0lOTlQgPj0gMHgwNjAwCitzdGF0aWMgbWFsbG9jX211dGV4 X3QJaW5pdF9sb2NrID0gU1JXTE9DS19JTklUOworI2Vsc2UKK3N0YXRpYyBtYWxsb2NfbXV0ZXhf dAlpbml0X2xvY2s7CitzdGF0aWMgYm9vbCBpbml0X2xvY2tfaW5pdGlhbGl6ZWQgPSBmYWxzZTsK KworSkVNQUxMT0NfQVRUUihjb25zdHJ1Y3RvcikKK3N0YXRpYyB2b2lkIFdJTkFQSQorX2luaXRf aW5pdF9sb2NrKHZvaWQpIHsKKwkvKgorCSAqIElmIGFub3RoZXIgY29uc3RydWN0b3IgaW4gdGhl IHNhbWUgYmluYXJ5IGlzIHVzaW5nIG1hbGxjdGwgdG8gZS5nLgorCSAqIHNldCB1cCBleHRlbnQg aG9va3MsIGl0IG1heSBlbmQgdXAgcnVubmluZyBiZWZvcmUgdGhpcyBvbmUsIGFuZAorCSAqIG1h bGxvY19pbml0X2hhcmQgd2lsbCBjcmFzaCB0cnlpbmcgdG8gbG9jayB0aGUgdW5pbml0aWFsaXpl ZCBsb2NrLiBTbworCSAqIHdlIGZvcmNlIGFuIGluaXRpYWxpemF0aW9uIG9mIHRoZSBsb2NrIGlu IG1hbGxvY19pbml0X2hhcmQgYXMgd2VsbC4KKwkgKiBXZSBkb24ndCB0cnkgdG8gY2FyZSBhYm91 dCBhdG9taWNpdHkgb2YgdGhlIGFjY2Vzc2VkIHRvIHRoZQorCSAqIGluaXRfbG9ja19pbml0aWFs aXplZCBib29sZWFuLCBzaW5jZSBpdCByZWFsbHkgb25seSBtYXR0ZXJzIGVhcmx5IGluCisJICog dGhlIHByb2Nlc3MgY3JlYXRpb24sIGJlZm9yZSBhbnkgc2VwYXJhdGUgdGhyZWFkIG5vcm1hbGx5 IHN0YXJ0cworCSAqIGRvaW5nIGFueXRoaW5nLgorCSAqLworCWlmICghaW5pdF9sb2NrX2luaXRp YWxpemVkKSB7CisJCW1hbGxvY19tdXRleF9pbml0KCZpbml0X2xvY2ssICJpbml0IiwgV0lUTkVT U19SQU5LX0lOSVQsCisJCSAgICBtYWxsb2NfbXV0ZXhfcmFua19leGNsdXNpdmUpOworCX0KKwlp bml0X2xvY2tfaW5pdGlhbGl6ZWQgPSB0cnVlOworfQorCisjaWZkZWYgX01TQ19WRVIKKyMgIHBy YWdtYSBzZWN0aW9uKCIuQ1JUJFhDVSIsIHJlYWQpCitKRU1BTExPQ19TRUNUSU9OKCIuQ1JUJFhD VSIpIEpFTUFMTE9DX0FUVFIodXNlZCkKK3N0YXRpYyBjb25zdCB2b2lkIChXSU5BUEkgKmluaXRf aW5pdF9sb2NrKSh2b2lkKSA9IF9pbml0X2luaXRfbG9jazsKKyNlbmRpZgorI2VuZGlmCisjZWxz ZQorc3RhdGljIG1hbGxvY19tdXRleF90CWluaXRfbG9jayA9IE1BTExPQ19NVVRFWF9JTklUSUFM SVpFUjsKKyNlbmRpZgorCit0eXBlZGVmIHN0cnVjdCB7CisJdm9pZAkqcDsJLyogSW5wdXQgcG9p bnRlciAoYXMgaW4gcmVhbGxvYyhwLCBzKSkuICovCisJc2l6ZV90CXM7CS8qIFJlcXVlc3Qgc2l6 ZS4gKi8KKwl2b2lkCSpyOwkvKiBSZXN1bHQgcG9pbnRlci4gKi8KK30gbWFsbG9jX3V0cmFjZV90 OworCisjaWZkZWYgSkVNQUxMT0NfVVRSQUNFCisjICBkZWZpbmUgVVRSQUNFKGEsIGIsIGMpIGRv IHsJCQkJCQlcCisJaWYgKHVubGlrZWx5KG9wdF91dHJhY2UpKSB7CQkJCQlcCisJCWludCB1dHJh Y2Vfc2Vycm5vID0gZXJybm87CQkJCVwKKwkJbWFsbG9jX3V0cmFjZV90IHV0OwkJCQkJXAorCQl1 dC5wID0gKGEpOwkJCQkJCVwKKwkJdXQucyA9IChiKTsJCQkJCQlcCisJCXV0LnIgPSAoYyk7CQkJ CQkJXAorCQlVVFJBQ0VfQ0FMTCgmdXQsIHNpemVvZih1dCkpOwkJCQlcCisJCWVycm5vID0gdXRy YWNlX3NlcnJubzsJCQkJCVwKKwl9CQkJCQkJCQlcCit9IHdoaWxlICgwKQorI2Vsc2UKKyMgIGRl ZmluZSBVVFJBQ0UoYSwgYiwgYykKKyNlbmRpZgorCisvKiBXaGV0aGVyIGVuY291bnRlcmVkIGFu eSBpbnZhbGlkIGNvbmZpZyBvcHRpb25zLiAqLworc3RhdGljIGJvb2wgaGFkX2NvbmZfZXJyb3Ig PSBmYWxzZTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiBGdW5jdGlvbiBwcm90 b3R5cGVzIGZvciBzdGF0aWMgZnVuY3Rpb25zIHRoYXQgYXJlIHJlZmVyZW5jZWQgcHJpb3IgdG8K KyAqIGRlZmluaXRpb24uCisgKi8KKworc3RhdGljIGJvb2wJbWFsbG9jX2luaXRfaGFyZF9hMCh2 b2lkKTsKK3N0YXRpYyBib29sCW1hbGxvY19pbml0X2hhcmQodm9pZCk7CisKKy8qKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKiovCisvKgorICogQmVnaW4gbWlzY2VsbGFuZW91cyBzdXBwb3J0IGZ1bmN0aW9u cy4KKyAqLworCitKRU1BTExPQ19BTFdBWVNfSU5MSU5FIGJvb2wKK21hbGxvY19pbml0X2EwKHZv aWQpIHsKKwlpZiAodW5saWtlbHkobWFsbG9jX2luaXRfc3RhdGUgPT0gbWFsbG9jX2luaXRfdW5p bml0aWFsaXplZCkpIHsKKwkJcmV0dXJuIG1hbGxvY19pbml0X2hhcmRfYTAoKTsKKwl9CisJcmV0 dXJuIGZhbHNlOworfQorCitKRU1BTExPQ19BTFdBWVNfSU5MSU5FIGJvb2wKK21hbGxvY19pbml0 KHZvaWQpIHsKKwlpZiAodW5saWtlbHkoIW1hbGxvY19pbml0aWFsaXplZCgpKSAmJiBtYWxsb2Nf aW5pdF9oYXJkKCkpIHsKKwkJcmV0dXJuIHRydWU7CisJfQorCXJldHVybiBmYWxzZTsKK30KKwor LyoKKyAqIFRoZSBhMCooKSBmdW5jdGlvbnMgYXJlIHVzZWQgaW5zdGVhZCBvZiBpe2QsfWFsbG9j KCkgaW4gc2l0dWF0aW9ucyB0aGF0CisgKiBjYW5ub3QgdG9sZXJhdGUgVExTIHZhcmlhYmxlIGFj Y2Vzcy4KKyAqLworCitzdGF0aWMgdm9pZCAqCithMGlhbGxvYyhzaXplX3Qgc2l6ZSwgYm9vbCB6 ZXJvLCBib29sIGlzX2ludGVybmFsKSB7CisJaWYgKHVubGlrZWx5KG1hbGxvY19pbml0X2EwKCkp KSB7CisJCXJldHVybiBOVUxMOworCX0KKworCXJldHVybiBpYWxsb2N6dG0oVFNETl9OVUxMLCBz aXplLCBzel9zaXplMmluZGV4KHNpemUpLCB6ZXJvLCBOVUxMLAorCSAgICBpc19pbnRlcm5hbCwg YXJlbmFfZ2V0KFRTRE5fTlVMTCwgMCwgdHJ1ZSksIHRydWUpOworfQorCitzdGF0aWMgdm9pZAor YTBpZGFsbG9jKHZvaWQgKnB0ciwgYm9vbCBpc19pbnRlcm5hbCkgeworCWlkYWxsb2N0bShUU0RO X05VTEwsIHB0ciwgTlVMTCwgTlVMTCwgaXNfaW50ZXJuYWwsIHRydWUpOworfQorCit2b2lkICoK K2EwbWFsbG9jKHNpemVfdCBzaXplKSB7CisJcmV0dXJuIGEwaWFsbG9jKHNpemUsIGZhbHNlLCB0 cnVlKTsKK30KKwordm9pZAorYTBkYWxsb2Modm9pZCAqcHRyKSB7CisJYTBpZGFsbG9jKHB0ciwg dHJ1ZSk7Cit9CisKKy8qCisgKiBGcmVlQlNEJ3MgbGliYyB1c2VzIHRoZSBib290c3RyYXBfKigp IGZ1bmN0aW9ucyBpbiBib290c3RyYXAtc2Vuc2l0aXZlCisgKiBzaXR1YXRpb25zIHRoYXQgY2Fu bm90IHRvbGVyYXRlIFRMUyB2YXJpYWJsZSBhY2Nlc3MgKFRMUyBhbGxvY2F0aW9uIGFuZCB2ZXJ5 CisgKiBlYXJseSBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbikuCisgKi8K Kwordm9pZCAqCitib290c3RyYXBfbWFsbG9jKHNpemVfdCBzaXplKSB7CisJaWYgKHVubGlrZWx5 KHNpemUgPT0gMCkpIHsKKwkJc2l6ZSA9IDE7CisJfQorCisJcmV0dXJuIGEwaWFsbG9jKHNpemUs IGZhbHNlLCBmYWxzZSk7Cit9CisKK3ZvaWQgKgorYm9vdHN0cmFwX2NhbGxvYyhzaXplX3QgbnVt LCBzaXplX3Qgc2l6ZSkgeworCXNpemVfdCBudW1fc2l6ZTsKKworCW51bV9zaXplID0gbnVtICog c2l6ZTsKKwlpZiAodW5saWtlbHkobnVtX3NpemUgPT0gMCkpIHsKKwkJYXNzZXJ0KG51bSA9PSAw IHx8IHNpemUgPT0gMCk7CisJCW51bV9zaXplID0gMTsKKwl9CisKKwlyZXR1cm4gYTBpYWxsb2Mo bnVtX3NpemUsIHRydWUsIGZhbHNlKTsKK30KKwordm9pZAorYm9vdHN0cmFwX2ZyZWUodm9pZCAq cHRyKSB7CisJaWYgKHVubGlrZWx5KHB0ciA9PSBOVUxMKSkgeworCQlyZXR1cm47CisJfQorCisJ YTBpZGFsbG9jKHB0ciwgZmFsc2UpOworfQorCit2b2lkCithcmVuYV9zZXQodW5zaWduZWQgaW5k LCBhcmVuYV90ICphcmVuYSkgeworCWF0b21pY19zdG9yZV9wKCZhcmVuYXNbaW5kXSwgYXJlbmEs IEFUT01JQ19SRUxFQVNFKTsKK30KKworc3RhdGljIHZvaWQKK25hcmVuYXNfdG90YWxfc2V0KHVu c2lnbmVkIG5hcmVuYXMpIHsKKwlhdG9taWNfc3RvcmVfdSgmbmFyZW5hc190b3RhbCwgbmFyZW5h cywgQVRPTUlDX1JFTEVBU0UpOworfQorCitzdGF0aWMgdm9pZAorbmFyZW5hc190b3RhbF9pbmMo dm9pZCkgeworCWF0b21pY19mZXRjaF9hZGRfdSgmbmFyZW5hc190b3RhbCwgMSwgQVRPTUlDX1JF TEVBU0UpOworfQorCit1bnNpZ25lZAorbmFyZW5hc190b3RhbF9nZXQodm9pZCkgeworCXJldHVy biBhdG9taWNfbG9hZF91KCZuYXJlbmFzX3RvdGFsLCBBVE9NSUNfQUNRVUlSRSk7Cit9CisKKy8q IENyZWF0ZSBhIG5ldyBhcmVuYSBhbmQgaW5zZXJ0IGl0IGludG8gdGhlIGFyZW5hcyBhcnJheSBh dCBpbmRleCBpbmQuICovCitzdGF0aWMgYXJlbmFfdCAqCithcmVuYV9pbml0X2xvY2tlZCh0c2Ru X3QgKnRzZG4sIHVuc2lnbmVkIGluZCwgY29uc3QgYXJlbmFfY29uZmlnX3QgKmNvbmZpZykgewor CWFyZW5hX3QgKmFyZW5hOworCisJYXNzZXJ0KGluZCA8PSBuYXJlbmFzX3RvdGFsX2dldCgpKTsK KwlpZiAoaW5kID49IE1BTExPQ1hfQVJFTkFfTElNSVQpIHsKKwkJcmV0dXJuIE5VTEw7CisJfQor CWlmIChpbmQgPT0gbmFyZW5hc190b3RhbF9nZXQoKSkgeworCQluYXJlbmFzX3RvdGFsX2luYygp OworCX0KKworCS8qCisJICogQW5vdGhlciB0aHJlYWQgbWF5IGhhdmUgYWxyZWFkeSBpbml0aWFs aXplZCBhcmVuYXNbaW5kXSBpZiBpdCdzIGFuCisJICogYXV0byBhcmVuYS4KKwkgKi8KKwlhcmVu YSA9IGFyZW5hX2dldCh0c2RuLCBpbmQsIGZhbHNlKTsKKwlpZiAoYXJlbmEgIT0gTlVMTCkgewor CQlhc3NlcnQoYXJlbmFfaXNfYXV0byhhcmVuYSkpOworCQlyZXR1cm4gYXJlbmE7CisJfQorCisJ LyogQWN0dWFsbHkgaW5pdGlhbGl6ZSB0aGUgYXJlbmEuICovCisJYXJlbmEgPSBhcmVuYV9uZXco dHNkbiwgaW5kLCBjb25maWcpOworCisJcmV0dXJuIGFyZW5hOworfQorCitzdGF0aWMgdm9pZAor YXJlbmFfbmV3X2NyZWF0ZV9iYWNrZ3JvdW5kX3RocmVhZCh0c2RuX3QgKnRzZG4sIHVuc2lnbmVk IGluZCkgeworCWlmIChpbmQgPT0gMCkgeworCQlyZXR1cm47CisJfQorCS8qCisJICogQXZvaWQg Y3JlYXRpbmcgYSBuZXcgYmFja2dyb3VuZCB0aHJlYWQganVzdCBmb3IgdGhlIGh1Z2UgYXJlbmEs IHdoaWNoCisJICogcHVyZ2VzIGVhZ2VybHkgYnkgZGVmYXVsdC4KKwkgKi8KKwlpZiAoaGF2ZV9i YWNrZ3JvdW5kX3RocmVhZCAmJiAhYXJlbmFfaXNfaHVnZShpbmQpKSB7CisJCWlmIChiYWNrZ3Jv dW5kX3RocmVhZF9jcmVhdGUodHNkbl90c2QodHNkbiksIGluZCkpIHsKKwkJCW1hbGxvY19wcmlu dGYoIjxqZW1hbGxvYz46IGVycm9yIGluIGJhY2tncm91bmQgdGhyZWFkICIKKwkJCQkgICAgICAi Y3JlYXRpb24gZm9yIGFyZW5hICV1LiBBYm9ydC5cbiIsIGluZCk7CisJCQlhYm9ydCgpOworCQl9 CisJfQorfQorCithcmVuYV90ICoKK2FyZW5hX2luaXQodHNkbl90ICp0c2RuLCB1bnNpZ25lZCBp bmQsIGNvbnN0IGFyZW5hX2NvbmZpZ190ICpjb25maWcpIHsKKwlhcmVuYV90ICphcmVuYTsKKwor CW1hbGxvY19tdXRleF9sb2NrKHRzZG4sICZhcmVuYXNfbG9jayk7CisJYXJlbmEgPSBhcmVuYV9p bml0X2xvY2tlZCh0c2RuLCBpbmQsIGNvbmZpZyk7CisJbWFsbG9jX211dGV4X3VubG9jayh0c2Ru LCAmYXJlbmFzX2xvY2spOworCisJYXJlbmFfbmV3X2NyZWF0ZV9iYWNrZ3JvdW5kX3RocmVhZCh0 c2RuLCBpbmQpOworCisJcmV0dXJuIGFyZW5hOworfQorCitzdGF0aWMgdm9pZAorYXJlbmFfYmlu ZCh0c2RfdCAqdHNkLCB1bnNpZ25lZCBpbmQsIGJvb2wgaW50ZXJuYWwpIHsKKwlhcmVuYV90ICph cmVuYSA9IGFyZW5hX2dldCh0c2RfdHNkbih0c2QpLCBpbmQsIGZhbHNlKTsKKwlhcmVuYV9udGhy ZWFkc19pbmMoYXJlbmEsIGludGVybmFsKTsKKworCWlmIChpbnRlcm5hbCkgeworCQl0c2RfaWFy ZW5hX3NldCh0c2QsIGFyZW5hKTsKKwl9IGVsc2UgeworCQl0c2RfYXJlbmFfc2V0KHRzZCwgYXJl bmEpOworCQl1bnNpZ25lZCBzaGFyZCA9IGF0b21pY19mZXRjaF9hZGRfdSgmYXJlbmEtPmJpbnNo YXJkX25leHQsIDEsCisJCSAgICBBVE9NSUNfUkVMQVhFRCk7CisJCXRzZF9iaW5zaGFyZHNfdCAq YmlucyA9IHRzZF9iaW5zaGFyZHNwX2dldCh0c2QpOworCQlmb3IgKHVuc2lnbmVkIGkgPSAwOyBp IDwgU0NfTkJJTlM7IGkrKykgeworCQkJYXNzZXJ0KGJpbl9pbmZvc1tpXS5uX3NoYXJkcyA+IDAg JiYKKwkJCSAgICBiaW5faW5mb3NbaV0ubl9zaGFyZHMgPD0gQklOX1NIQVJEU19NQVgpOworCQkJ Ymlucy0+Ymluc2hhcmRbaV0gPSBzaGFyZCAlIGJpbl9pbmZvc1tpXS5uX3NoYXJkczsKKwkJfQor CX0KK30KKwordm9pZAorYXJlbmFfbWlncmF0ZSh0c2RfdCAqdHNkLCBhcmVuYV90ICpvbGRhcmVu YSwgYXJlbmFfdCAqbmV3YXJlbmEpIHsKKwlhc3NlcnQob2xkYXJlbmEgIT0gTlVMTCk7CisJYXNz ZXJ0KG5ld2FyZW5hICE9IE5VTEwpOworCisJYXJlbmFfbnRocmVhZHNfZGVjKG9sZGFyZW5hLCBm YWxzZSk7CisJYXJlbmFfbnRocmVhZHNfaW5jKG5ld2FyZW5hLCBmYWxzZSk7CisJdHNkX2FyZW5h X3NldCh0c2QsIG5ld2FyZW5hKTsKKworCWlmIChhcmVuYV9udGhyZWFkc19nZXQob2xkYXJlbmEs IGZhbHNlKSA9PSAwKSB7CisJCS8qIFB1cmdlIGlmIHRoZSBvbGQgYXJlbmEgaGFzIG5vIGFzc29j aWF0ZWQgdGhyZWFkcyBhbnltb3JlLiAqLworCQlhcmVuYV9kZWNheSh0c2RfdHNkbih0c2QpLCBv bGRhcmVuYSwKKwkJICAgIC8qIGlzX2JhY2tncm91bmRfdGhyZWFkICovIGZhbHNlLCAvKiBhbGwg Ki8gdHJ1ZSk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYXJlbmFfdW5iaW5kKHRzZF90ICp0c2Qs IHVuc2lnbmVkIGluZCwgYm9vbCBpbnRlcm5hbCkgeworCWFyZW5hX3QgKmFyZW5hOworCisJYXJl bmEgPSBhcmVuYV9nZXQodHNkX3RzZG4odHNkKSwgaW5kLCBmYWxzZSk7CisJYXJlbmFfbnRocmVh ZHNfZGVjKGFyZW5hLCBpbnRlcm5hbCk7CisKKwlpZiAoaW50ZXJuYWwpIHsKKwkJdHNkX2lhcmVu YV9zZXQodHNkLCBOVUxMKTsKKwl9IGVsc2UgeworCQl0c2RfYXJlbmFfc2V0KHRzZCwgTlVMTCk7 CisJfQorfQorCisvKiBTbG93IHBhdGgsIGNhbGxlZCBvbmx5IGJ5IGFyZW5hX2Nob29zZSgpLiAq LworYXJlbmFfdCAqCithcmVuYV9jaG9vc2VfaGFyZCh0c2RfdCAqdHNkLCBib29sIGludGVybmFs KSB7CisJYXJlbmFfdCAqcmV0IEpFTUFMTE9DX0NDX1NJTEVOQ0VfSU5JVChOVUxMKTsKKworCWlm IChoYXZlX3BlcmNwdV9hcmVuYSAmJiBQRVJDUFVfQVJFTkFfRU5BQkxFRChvcHRfcGVyY3B1X2Fy ZW5hKSkgeworCQl1bnNpZ25lZCBjaG9vc2UgPSBwZXJjcHVfYXJlbmFfY2hvb3NlKCk7CisJCXJl dCA9IGFyZW5hX2dldCh0c2RfdHNkbih0c2QpLCBjaG9vc2UsIHRydWUpOworCQlhc3NlcnQocmV0 ICE9IE5VTEwpOworCQlhcmVuYV9iaW5kKHRzZCwgYXJlbmFfaW5kX2dldChyZXQpLCBmYWxzZSk7 CisJCWFyZW5hX2JpbmQodHNkLCBhcmVuYV9pbmRfZ2V0KHJldCksIHRydWUpOworCisJCXJldHVy biByZXQ7CisJfQorCisJaWYgKG5hcmVuYXNfYXV0byA+IDEpIHsKKwkJdW5zaWduZWQgaSwgaiwg Y2hvb3NlWzJdLCBmaXJzdF9udWxsOworCQlib29sIGlzX25ld19hcmVuYVsyXTsKKworCQkvKgor CQkgKiBEZXRlcm1pbmUgYmluZGluZyBmb3IgYm90aCBub24taW50ZXJuYWwgYW5kIGludGVybmFs CisJCSAqIGFsbG9jYXRpb24uCisJCSAqCisJCSAqICAgY2hvb3NlWzBdOiBGb3IgYXBwbGljYXRp b24gYWxsb2NhdGlvbi4KKwkJICogICBjaG9vc2VbMV06IEZvciBpbnRlcm5hbCBtZXRhZGF0YSBh bGxvY2F0aW9uLgorCQkgKi8KKworCQlmb3IgKGogPSAwOyBqIDwgMjsgaisrKSB7CisJCQljaG9v c2Vbal0gPSAwOworCQkJaXNfbmV3X2FyZW5hW2pdID0gZmFsc2U7CisJCX0KKworCQlmaXJzdF9u dWxsID0gbmFyZW5hc19hdXRvOworCQltYWxsb2NfbXV0ZXhfbG9jayh0c2RfdHNkbih0c2QpLCAm YXJlbmFzX2xvY2spOworCQlhc3NlcnQoYXJlbmFfZ2V0KHRzZF90c2RuKHRzZCksIDAsIGZhbHNl KSAhPSBOVUxMKTsKKwkJZm9yIChpID0gMTsgaSA8IG5hcmVuYXNfYXV0bzsgaSsrKSB7CisJCQlp ZiAoYXJlbmFfZ2V0KHRzZF90c2RuKHRzZCksIGksIGZhbHNlKSAhPSBOVUxMKSB7CisJCQkJLyoK KwkJCQkgKiBDaG9vc2UgdGhlIGZpcnN0IGFyZW5hIHRoYXQgaGFzIHRoZSBsb3dlc3QKKwkJCQkg KiBudW1iZXIgb2YgdGhyZWFkcyBhc3NpZ25lZCB0byBpdC4KKwkJCQkgKi8KKwkJCQlmb3IgKGog PSAwOyBqIDwgMjsgaisrKSB7CisJCQkJCWlmIChhcmVuYV9udGhyZWFkc19nZXQoYXJlbmFfZ2V0 KAorCQkJCQkgICAgdHNkX3RzZG4odHNkKSwgaSwgZmFsc2UpLCAhIWopIDwKKwkJCQkJICAgIGFy ZW5hX250aHJlYWRzX2dldChhcmVuYV9nZXQoCisJCQkJCSAgICB0c2RfdHNkbih0c2QpLCBjaG9v c2Vbal0sIGZhbHNlKSwKKwkJCQkJICAgICEhaikpIHsKKwkJCQkJCWNob29zZVtqXSA9IGk7CisJ CQkJCX0KKwkJCQl9CisJCQl9IGVsc2UgaWYgKGZpcnN0X251bGwgPT0gbmFyZW5hc19hdXRvKSB7 CisJCQkJLyoKKwkJCQkgKiBSZWNvcmQgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCB1bmluaXRpYWxp emVkCisJCQkJICogYXJlbmEsIGluIGNhc2UgYWxsIGV4dGFudCBhcmVuYXMgYXJlIGluIHVzZS4K KwkJCQkgKgorCQkJCSAqIE5COiBJdCBpcyBwb3NzaWJsZSBmb3IgdGhlcmUgdG8gYmUKKwkJCQkg KiBkaXNjb250aW51aXRpZXMgaW4gdGVybXMgb2YgaW5pdGlhbGl6ZWQKKwkJCQkgKiB2ZXJzdXMg dW5pbml0aWFsaXplZCBhcmVuYXMsIGR1ZSB0byB0aGUKKwkJCQkgKiAidGhyZWFkLmFyZW5hIiBt YWxsY3RsLgorCQkJCSAqLworCQkJCWZpcnN0X251bGwgPSBpOworCQkJfQorCQl9CisKKwkJZm9y IChqID0gMDsgaiA8IDI7IGorKykgeworCQkJaWYgKGFyZW5hX250aHJlYWRzX2dldChhcmVuYV9n ZXQodHNkX3RzZG4odHNkKSwKKwkJCSAgICBjaG9vc2Vbal0sIGZhbHNlKSwgISFqKSA9PSAwIHx8 IGZpcnN0X251bGwgPT0KKwkJCSAgICBuYXJlbmFzX2F1dG8pIHsKKwkJCQkvKgorCQkJCSAqIFVz ZSBhbiB1bmxvYWRlZCBhcmVuYSwgb3IgdGhlIGxlYXN0IGxvYWRlZAorCQkJCSAqIGFyZW5hIGlm IGFsbCBhcmVuYXMgYXJlIGFscmVhZHkgaW5pdGlhbGl6ZWQuCisJCQkJICovCisJCQkJaWYgKCEh aiA9PSBpbnRlcm5hbCkgeworCQkJCQlyZXQgPSBhcmVuYV9nZXQodHNkX3RzZG4odHNkKSwKKwkJ CQkJICAgIGNob29zZVtqXSwgZmFsc2UpOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJYXJlbmFf dCAqYXJlbmE7CisKKwkJCQkvKiBJbml0aWFsaXplIGEgbmV3IGFyZW5hLiAqLworCQkJCWNob29z ZVtqXSA9IGZpcnN0X251bGw7CisJCQkJYXJlbmEgPSBhcmVuYV9pbml0X2xvY2tlZCh0c2RfdHNk bih0c2QpLAorCQkJCSAgICBjaG9vc2Vbal0sICZhcmVuYV9jb25maWdfZGVmYXVsdCk7CisJCQkJ aWYgKGFyZW5hID09IE5VTEwpIHsKKwkJCQkJbWFsbG9jX211dGV4X3VubG9jayh0c2RfdHNkbih0 c2QpLAorCQkJCQkgICAgJmFyZW5hc19sb2NrKTsKKwkJCQkJcmV0dXJuIE5VTEw7CisJCQkJfQor CQkJCWlzX25ld19hcmVuYVtqXSA9IHRydWU7CisJCQkJaWYgKCEhaiA9PSBpbnRlcm5hbCkgewor CQkJCQlyZXQgPSBhcmVuYTsKKwkJCQl9CisJCQl9CisJCQlhcmVuYV9iaW5kKHRzZCwgY2hvb3Nl W2pdLCAhIWopOworCQl9CisJCW1hbGxvY19tdXRleF91bmxvY2sodHNkX3RzZG4odHNkKSwgJmFy ZW5hc19sb2NrKTsKKworCQlmb3IgKGogPSAwOyBqIDwgMjsgaisrKSB7CisJCQlpZiAoaXNfbmV3 X2FyZW5hW2pdKSB7CisJCQkJYXNzZXJ0KGNob29zZVtqXSA+IDApOworCQkJCWFyZW5hX25ld19j cmVhdGVfYmFja2dyb3VuZF90aHJlYWQoCisJCQkJICAgIHRzZF90c2RuKHRzZCksIGNob29zZVtq XSk7CisJCQl9CisJCX0KKworCX0gZWxzZSB7CisJCXJldCA9IGFyZW5hX2dldCh0c2RfdHNkbih0 c2QpLCAwLCBmYWxzZSk7CisJCWFyZW5hX2JpbmQodHNkLCAwLCBmYWxzZSk7CisJCWFyZW5hX2Jp bmQodHNkLCAwLCB0cnVlKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCit2b2lkCitpYXJlbmFf Y2xlYW51cCh0c2RfdCAqdHNkKSB7CisJYXJlbmFfdCAqaWFyZW5hOworCisJaWFyZW5hID0gdHNk X2lhcmVuYV9nZXQodHNkKTsKKwlpZiAoaWFyZW5hICE9IE5VTEwpIHsKKwkJYXJlbmFfdW5iaW5k KHRzZCwgYXJlbmFfaW5kX2dldChpYXJlbmEpLCB0cnVlKTsKKwl9Cit9CisKK3ZvaWQKK2FyZW5h X2NsZWFudXAodHNkX3QgKnRzZCkgeworCWFyZW5hX3QgKmFyZW5hOworCisJYXJlbmEgPSB0c2Rf YXJlbmFfZ2V0KHRzZCk7CisJaWYgKGFyZW5hICE9IE5VTEwpIHsKKwkJYXJlbmFfdW5iaW5kKHRz ZCwgYXJlbmFfaW5kX2dldChhcmVuYSksIGZhbHNlKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitz dGF0c19wcmludF9hdGV4aXQodm9pZCkgeworCWlmIChjb25maWdfc3RhdHMpIHsKKwkJdHNkbl90 ICp0c2RuOworCQl1bnNpZ25lZCBuYXJlbmFzLCBpOworCisJCXRzZG4gPSB0c2RuX2ZldGNoKCk7 CisKKwkJLyoKKwkJICogTWVyZ2Ugc3RhdHMgZnJvbSBleHRhbnQgdGhyZWFkcy4gIFRoaXMgaXMg cmFjeSwgc2luY2UKKwkJICogaW5kaXZpZHVhbCB0aHJlYWRzIGRvIG5vdCBsb2NrIHdoZW4gcmVj b3JkaW5nIHRjYWNoZSBzdGF0cworCQkgKiBldmVudHMuICBBcyBhIGNvbnNlcXVlbmNlLCB0aGUg ZmluYWwgc3RhdHMgbWF5IGJlIHNsaWdodGx5CisJCSAqIG91dCBvZiBkYXRlIGJ5IHRoZSB0aW1l IHRoZXkgYXJlIHJlcG9ydGVkLCBpZiBvdGhlciB0aHJlYWRzCisJCSAqIGNvbnRpbnVlIHRvIGFs bG9jYXRlLgorCQkgKi8KKwkJZm9yIChpID0gMCwgbmFyZW5hcyA9IG5hcmVuYXNfdG90YWxfZ2V0 KCk7IGkgPCBuYXJlbmFzOyBpKyspIHsKKwkJCWFyZW5hX3QgKmFyZW5hID0gYXJlbmFfZ2V0KHRz ZG4sIGksIGZhbHNlKTsKKwkJCWlmIChhcmVuYSAhPSBOVUxMKSB7CisJCQkJdGNhY2hlX3Nsb3df dCAqdGNhY2hlX3Nsb3c7CisKKwkJCQltYWxsb2NfbXV0ZXhfbG9jayh0c2RuLCAmYXJlbmEtPnRj YWNoZV9xbF9tdHgpOworCQkJCXFsX2ZvcmVhY2godGNhY2hlX3Nsb3csICZhcmVuYS0+dGNhY2hl X3FsLAorCQkJCSAgICBsaW5rKSB7CisJCQkJCXRjYWNoZV9zdGF0c19tZXJnZSh0c2RuLAorCQkJ CQkgICAgdGNhY2hlX3Nsb3ctPnRjYWNoZSwgYXJlbmEpOworCQkJCX0KKwkJCQltYWxsb2NfbXV0 ZXhfdW5sb2NrKHRzZG4sCisJCQkJICAgICZhcmVuYS0+dGNhY2hlX3FsX210eCk7CisJCQl9CisJ CX0KKwl9CisJamVfbWFsbG9jX3N0YXRzX3ByaW50KE5VTEwsIE5VTEwsIG9wdF9zdGF0c19wcmlu dF9vcHRzKTsKK30KKworLyoKKyAqIEVuc3VyZSB0aGF0IHdlIGRvbid0IGhvbGQgYW55IGxvY2tz IHVwb24gZW50cnkgdG8gb3IgZXhpdCBmcm9tIGFsbG9jYXRvcgorICogY29kZSAoaW4gYSAiYnJv YWQiIHNlbnNlIHRoYXQgZG9lc24ndCBjb3VudCBhIHJlZW50cmFudCBhbGxvY2F0aW9uIGFzIGFu CisgKiBlbnRyYW5jZSBvciBleGl0KS4KKyAqLworSkVNQUxMT0NfQUxXQVlTX0lOTElORSB2b2lk CitjaGVja19lbnRyeV9leGl0X2xvY2tpbmcodHNkbl90ICp0c2RuKSB7CisJaWYgKCFjb25maWdf ZGVidWcpIHsKKwkJcmV0dXJuOworCX0KKwlpZiAodHNkbl9udWxsKHRzZG4pKSB7CisJCXJldHVy bjsKKwl9CisJdHNkX3QgKnRzZCA9IHRzZG5fdHNkKHRzZG4pOworCS8qCisJICogSXQncyBwb3Nz aWJsZSB3ZSBob2xkIGxvY2tzIGF0IGVudHJ5L2V4aXQgaWYgd2UncmUgaW4gYSBuZXN0ZWQKKwkg KiBhbGxvY2F0aW9uLgorCSAqLworCWludDhfdCByZWVudHJhbmN5X2xldmVsID0gdHNkX3JlZW50 cmFuY3lfbGV2ZWxfZ2V0KHRzZCk7CisJaWYgKHJlZW50cmFuY3lfbGV2ZWwgIT0gMCkgeworCQly ZXR1cm47CisJfQorCXdpdG5lc3NfYXNzZXJ0X2xvY2tsZXNzKHRzZG5fd2l0bmVzc190c2RwX2dl dCh0c2RuKSk7Cit9CisKKy8qCisgKiBFbmQgbWlzY2VsbGFuZW91cyBzdXBwb3J0IGZ1bmN0aW9u cy4KKyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiBCZWdpbiBpbml0aWFsaXph dGlvbiBmdW5jdGlvbnMuCisgKi8KKworc3RhdGljIGNoYXIgKgoramVtYWxsb2Nfc2VjdXJlX2dl dGVudihjb25zdCBjaGFyICpuYW1lKSB7CisjaWZkZWYgSkVNQUxMT0NfSEFWRV9TRUNVUkVfR0VU RU5WCisJcmV0dXJuIHNlY3VyZV9nZXRlbnYobmFtZSk7CisjZWxzZQorIyAgaWZkZWYgSkVNQUxM T0NfSEFWRV9JU1NFVFVHSUQKKwlpZiAoaXNzZXR1Z2lkKCkgIT0gMCkgeworCQlyZXR1cm4gTlVM TDsKKwl9CisjICBlbmRpZgorCXJldHVybiBnZXRlbnYobmFtZSk7CisjZW5kaWYKK30KKworc3Rh dGljIHVuc2lnbmVkCittYWxsb2NfbmNwdXModm9pZCkgeworCWxvbmcgcmVzdWx0OworCisjaWZk ZWYgX1dJTjMyCisJU1lTVEVNX0lORk8gc2k7CisJR2V0U3lzdGVtSW5mbygmc2kpOworCXJlc3Vs dCA9IHNpLmR3TnVtYmVyT2ZQcm9jZXNzb3JzOworI2VsaWYgZGVmaW5lZChDUFVfQ09VTlQpCisJ LyoKKwkgKiBnbGliYyA+PSAyLjYgaGFzIHRoZSBDUFVfQ09VTlQgbWFjcm8uCisJICoKKwkgKiBn bGliYydzIHN5c2NvbmYoKSB1c2VzIGlzc3BhY2UoKS4gIGdsaWJjIGFsbG9jYXRlcyBmb3IgdGhl IGZpcnN0IHRpbWUKKwkgKiAqYmVmb3JlKiBzZXR0aW5nIHVwIHRoZSBpc3NwYWNlIHRhYmxlcy4g IFRoZXJlZm9yZSB3ZSBuZWVkIGEKKwkgKiBkaWZmZXJlbnQgbWV0aG9kIHRvIGdldCB0aGUgbnVt YmVyIG9mIENQVXMuCisJICoKKwkgKiBUaGUgZ2V0YWZmaW5pdHkgYXBwcm9hY2ggaXMgYWxzbyBw cmVmZXJyZWQgd2hlbiBvbmx5IGEgc3Vic2V0IG9mIENQVXMKKwkgKiBpcyBhdmFpbGFibGUsIHRv IGF2b2lkIHVzaW5nIG1vcmUgYXJlbmFzIHRoYW4gbmVjZXNzYXJ5LgorCSAqLworCXsKKyMgIGlm IGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19EcmFnb25GbHlfXykKKwkJY3B1c2V0 X3Qgc2V0OworIyAgZWxzZQorCQljcHVfc2V0X3Qgc2V0OworIyAgZW5kaWYKKyMgIGlmIGRlZmlu ZWQoSkVNQUxMT0NfSEFWRV9TQ0hFRF9TRVRBRkZJTklUWSkKKwkJc2NoZWRfZ2V0YWZmaW5pdHko MCwgc2l6ZW9mKHNldCksICZzZXQpOworIyAgZWxzZQorCQlwdGhyZWFkX2dldGFmZmluaXR5X25w KHB0aHJlYWRfc2VsZigpLCBzaXplb2Yoc2V0KSwgJnNldCk7CisjICBlbmRpZgorCQlyZXN1bHQg PSBDUFVfQ09VTlQoJnNldCk7CisJfQorI2Vsc2UKKwlyZXN1bHQgPSBzeXNjb25mKF9TQ19OUFJP Q0VTU09SU19PTkxOKTsKKyNlbmRpZgorCXJldHVybiAoKHJlc3VsdCA9PSAtMSkgPyAxIDogKHVu c2lnbmVkKXJlc3VsdCk7Cit9CisKKy8qCisgKiBFbnN1cmUgdGhhdCBudW1iZXIgb2YgQ1BVcyBp cyBkZXRlcm1pc3RpbmMsIGkuZS4gaXQgaXMgdGhlIHNhbWUgYmFzZWQgb246CisgKiAtIHNjaGVk X2dldGFmZmluaXR5KCkKKyAqIC0gX1NDX05QUk9DRVNTT1JTX09OTE4KKyAqIC0gX1NDX05QUk9D RVNTT1JTX0NPTkYKKyAqIFNpbmNlIG90aGVyd2lzZSB0cmlja3kgdGhpbmdzIGlzIHBvc3NpYmxl IHdpdGggcGVyY3B1IGFyZW5hcyBpbiB1c2UuCisgKi8KK3N0YXRpYyBib29sCittYWxsb2NfY3B1 X2NvdW50X2lzX2RldGVybWluaXN0aWMoKQoreworI2lmZGVmIF9XSU4zMgorCXJldHVybiB0cnVl OworI2Vsc2UKKwlsb25nIGNwdV9vbmxuID0gc3lzY29uZihfU0NfTlBST0NFU1NPUlNfT05MTik7 CisJbG9uZyBjcHVfY29uZiA9IHN5c2NvbmYoX1NDX05QUk9DRVNTT1JTX0NPTkYpOworCWlmIChj cHVfb25sbiAhPSBjcHVfY29uZikgeworCQlyZXR1cm4gZmFsc2U7CisJfQorIyAgaWYgZGVmaW5l ZChDUFVfQ09VTlQpCisjICAgIGlmIGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19E cmFnb25GbHlfXykKKwljcHVzZXRfdCBzZXQ7CisjICAgIGVsc2UKKwljcHVfc2V0X3Qgc2V0Owor IyAgICBlbmRpZiAvKiBfX0ZyZWVCU0RfXyAqLworIyAgICBpZiBkZWZpbmVkKEpFTUFMTE9DX0hB VkVfU0NIRURfU0VUQUZGSU5JVFkpCisJc2NoZWRfZ2V0YWZmaW5pdHkoMCwgc2l6ZW9mKHNldCks ICZzZXQpOworIyAgICBlbHNlIC8qICFKRU1BTExPQ19IQVZFX1NDSEVEX1NFVEFGRklOSVRZICov CisJcHRocmVhZF9nZXRhZmZpbml0eV9ucChwdGhyZWFkX3NlbGYoKSwgc2l6ZW9mKHNldCksICZz ZXQpOworIyAgICBlbmRpZiAvKiBKRU1BTExPQ19IQVZFX1NDSEVEX1NFVEFGRklOSVRZICovCisJ bG9uZyBjcHVfYWZmaW5pdHkgPSBDUFVfQ09VTlQoJnNldCk7CisJaWYgKGNwdV9hZmZpbml0eSAh PSBjcHVfY29uZikgeworCQlyZXR1cm4gZmFsc2U7CisJfQorIyAgZW5kaWYgLyogQ1BVX0NPVU5U ICovCisJcmV0dXJuIHRydWU7CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQKK2luaXRfb3B0X3N0 YXRzX29wdHMoY29uc3QgY2hhciAqdiwgc2l6ZV90IHZsZW4sIGNoYXIgKmRlc3QpIHsKKwlzaXpl X3Qgb3B0c19sZW4gPSBzdHJsZW4oZGVzdCk7CisJYXNzZXJ0KG9wdHNfbGVuIDw9IHN0YXRzX3By aW50X3RvdF9udW1fb3B0aW9ucyk7CisKKwlmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZsZW47IGkr KykgeworCQlzd2l0Y2ggKHZbaV0pIHsKKyNkZWZpbmUgT1BUSU9OKG8sIHYsIGQsIHMpIGNhc2Ug bzogYnJlYWs7CisJCQlTVEFUU19QUklOVF9PUFRJT05TCisjdW5kZWYgT1BUSU9OCisJCWRlZmF1 bHQ6IGNvbnRpbnVlOworCQl9CisKKwkJaWYgKHN0cmNocihkZXN0LCB2W2ldKSAhPSBOVUxMKSB7 CisJCQkvKiBJZ25vcmUgcmVwZWF0ZWQuICovCisJCQljb250aW51ZTsKKwkJfQorCisJCWRlc3Rb b3B0c19sZW4rK10gPSB2W2ldOworCQlkZXN0W29wdHNfbGVuXSA9ICdcMCc7CisJCWFzc2VydChv cHRzX2xlbiA8PSBzdGF0c19wcmludF90b3RfbnVtX29wdGlvbnMpOworCX0KKwlhc3NlcnQob3B0 c19sZW4gPT0gc3RybGVuKGRlc3QpKTsKK30KKworLyogUmVhZHMgdGhlIG5leHQgc2l6ZSBwYWly IGluIGEgbXVsdGktc2l6ZWQgb3B0aW9uLiAqLworc3RhdGljIGJvb2wKK21hbGxvY19jb25mX211 bHRpX3NpemVzX25leHQoY29uc3QgY2hhciAqKnNsYWJfc2l6ZV9zZWdtZW50X2N1ciwKKyAgICBz aXplX3QgKnZsZW5fbGVmdCwgc2l6ZV90ICpzbGFiX3N0YXJ0LCBzaXplX3QgKnNsYWJfZW5kLCBz aXplX3QgKm5ld19zaXplKSB7CisJY29uc3QgY2hhciAqY3VyID0gKnNsYWJfc2l6ZV9zZWdtZW50 X2N1cjsKKwljaGFyICplbmQ7CisJdWludG1heF90IHVtOworCisJc2V0X2Vycm5vKDApOworCisJ LyogRmlyc3QgbnVtYmVyLCB0aGVuICctJyAqLworCXVtID0gbWFsbG9jX3N0cnRvdW1heChjdXIs ICZlbmQsIDApOworCWlmIChnZXRfZXJybm8oKSAhPSAwIHx8ICplbmQgIT0gJy0nKSB7CisJCXJl dHVybiB0cnVlOworCX0KKwkqc2xhYl9zdGFydCA9IChzaXplX3QpdW07CisJY3VyID0gZW5kICsg MTsKKworCS8qIFNlY29uZCBudW1iZXIsIHRoZW4gJzonICovCisJdW0gPSBtYWxsb2Nfc3RydG91 bWF4KGN1ciwgJmVuZCwgMCk7CisJaWYgKGdldF9lcnJubygpICE9IDAgfHwgKmVuZCAhPSAnOicp IHsKKwkJcmV0dXJuIHRydWU7CisJfQorCSpzbGFiX2VuZCA9IChzaXplX3QpdW07CisJY3VyID0g ZW5kICsgMTsKKworCS8qIExhc3QgbnVtYmVyICovCisJdW0gPSBtYWxsb2Nfc3RydG91bWF4KGN1 ciwgJmVuZCwgMCk7CisJaWYgKGdldF9lcnJubygpICE9IDApIHsKKwkJcmV0dXJuIHRydWU7CisJ fQorCSpuZXdfc2l6ZSA9IChzaXplX3QpdW07CisKKwkvKiBDb25zdW1lIHRoZSBzZXBhcmF0b3Ig aWYgdGhlcmUgaXMgb25lLiAqLworCWlmICgqZW5kID09ICd8JykgeworCQllbmQrKzsKKwl9CisK Kwkqdmxlbl9sZWZ0IC09IGVuZCAtICpzbGFiX3NpemVfc2VnbWVudF9jdXI7CisJKnNsYWJfc2l6 ZV9zZWdtZW50X2N1ciA9IGVuZDsKKworCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGJvb2wK K21hbGxvY19jb25mX25leHQoY2hhciBjb25zdCAqKm9wdHNfcCwgY2hhciBjb25zdCAqKmtfcCwg c2l6ZV90ICprbGVuX3AsCisgICAgY2hhciBjb25zdCAqKnZfcCwgc2l6ZV90ICp2bGVuX3ApIHsK Kwlib29sIGFjY2VwdDsKKwljb25zdCBjaGFyICpvcHRzID0gKm9wdHNfcDsKKworCSprX3AgPSBv cHRzOworCisJZm9yIChhY2NlcHQgPSBmYWxzZTsgIWFjY2VwdDspIHsKKwkJc3dpdGNoICgqb3B0 cykgeworCQljYXNlICdBJzogY2FzZSAnQic6IGNhc2UgJ0MnOiBjYXNlICdEJzogY2FzZSAnRSc6 IGNhc2UgJ0YnOgorCQljYXNlICdHJzogY2FzZSAnSCc6IGNhc2UgJ0knOiBjYXNlICdKJzogY2Fz ZSAnSyc6IGNhc2UgJ0wnOgorCQljYXNlICdNJzogY2FzZSAnTic6IGNhc2UgJ08nOiBjYXNlICdQ JzogY2FzZSAnUSc6IGNhc2UgJ1InOgorCQljYXNlICdTJzogY2FzZSAnVCc6IGNhc2UgJ1UnOiBj YXNlICdWJzogY2FzZSAnVyc6IGNhc2UgJ1gnOgorCQljYXNlICdZJzogY2FzZSAnWic6CisJCWNh c2UgJ2EnOiBjYXNlICdiJzogY2FzZSAnYyc6IGNhc2UgJ2QnOiBjYXNlICdlJzogY2FzZSAnZic6 CisJCWNhc2UgJ2cnOiBjYXNlICdoJzogY2FzZSAnaSc6IGNhc2UgJ2onOiBjYXNlICdrJzogY2Fz ZSAnbCc6CisJCWNhc2UgJ20nOiBjYXNlICduJzogY2FzZSAnbyc6IGNhc2UgJ3AnOiBjYXNlICdx JzogY2FzZSAncic6CisJCWNhc2UgJ3MnOiBjYXNlICd0JzogY2FzZSAndSc6IGNhc2UgJ3YnOiBj YXNlICd3JzogY2FzZSAneCc6CisJCWNhc2UgJ3knOiBjYXNlICd6JzoKKwkJY2FzZSAnMCc6IGNh c2UgJzEnOiBjYXNlICcyJzogY2FzZSAnMyc6IGNhc2UgJzQnOiBjYXNlICc1JzoKKwkJY2FzZSAn Nic6IGNhc2UgJzcnOiBjYXNlICc4JzogY2FzZSAnOSc6CisJCWNhc2UgJ18nOgorCQkJb3B0cysr OworCQkJYnJlYWs7CisJCWNhc2UgJzonOgorCQkJb3B0cysrOworCQkJKmtsZW5fcCA9ICh1aW50 cHRyX3Qpb3B0cyAtIDEgLSAodWludHB0cl90KSprX3A7CisJCQkqdl9wID0gb3B0czsKKwkJCWFj Y2VwdCA9IHRydWU7CisJCQlicmVhazsKKwkJY2FzZSAnXDAnOgorCQkJaWYgKG9wdHMgIT0gKm9w dHNfcCkgeworCQkJCW1hbGxvY193cml0ZSgiPGplbWFsbG9jPjogQ29uZiBzdHJpbmcgZW5kcyAi CisJCQkJICAgICJ3aXRoIGtleVxuIik7CisJCQkJaGFkX2NvbmZfZXJyb3IgPSB0cnVlOworCQkJ fQorCQkJcmV0dXJuIHRydWU7CisJCWRlZmF1bHQ6CisJCQltYWxsb2Nfd3JpdGUoIjxqZW1hbGxv Yz46IE1hbGZvcm1lZCBjb25mIHN0cmluZ1xuIik7CisJCQloYWRfY29uZl9lcnJvciA9IHRydWU7 CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCX0KKworCWZvciAoYWNjZXB0ID0gZmFsc2U7ICFhY2Nl cHQ7KSB7CisJCXN3aXRjaCAoKm9wdHMpIHsKKwkJY2FzZSAnLCc6CisJCQlvcHRzKys7CisJCQkv KgorCQkJICogTG9vayBhaGVhZCBvbmUgY2hhcmFjdGVyIGhlcmUsIGJlY2F1c2UgdGhlIG5leHQg dGltZQorCQkJICogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQsIGl0IHdpbGwgYXNzdW1lIHRoYXQg ZW5kIG9mCisJCQkgKiBpbnB1dCBoYXMgYmVlbiBjbGVhbmx5IHJlYWNoZWQgaWYgbm8gaW5wdXQg cmVtYWlucywKKwkJCSAqIGJ1dCB3ZSBoYXZlIG9wdGltaXN0aWNhbGx5IGFscmVhZHkgY29uc3Vt ZWQgdGhlCisJCQkgKiBjb21tYSBpZiBvbmUgZXhpc3RzLgorCQkJICovCisJCQlpZiAoKm9wdHMg PT0gJ1wwJykgeworCQkJCW1hbGxvY193cml0ZSgiPGplbWFsbG9jPjogQ29uZiBzdHJpbmcgZW5k cyAiCisJCQkJICAgICJ3aXRoIGNvbW1hXG4iKTsKKwkJCQloYWRfY29uZl9lcnJvciA9IHRydWU7 CisJCQl9CisJCQkqdmxlbl9wID0gKHVpbnRwdHJfdClvcHRzIC0gMSAtICh1aW50cHRyX3QpKnZf cDsKKwkJCWFjY2VwdCA9IHRydWU7CisJCQlicmVhazsKKwkJY2FzZSAnXDAnOgorCQkJKnZsZW5f cCA9ICh1aW50cHRyX3Qpb3B0cyAtICh1aW50cHRyX3QpKnZfcDsKKwkJCWFjY2VwdCA9IHRydWU7 CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCW9wdHMrKzsKKwkJCWJyZWFrOworCQl9CisJfQor CisJKm9wdHNfcCA9IG9wdHM7CisJcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgdm9pZAorbWFs bG9jX2Fib3J0X2ludmFsaWRfY29uZih2b2lkKSB7CisJYXNzZXJ0KG9wdF9hYm9ydF9jb25mKTsK KwltYWxsb2NfcHJpbnRmKCI8amVtYWxsb2M+OiBBYm9ydCAoYWJvcnRfY29uZjp0cnVlKSBvbiBp bnZhbGlkIGNvbmYgIgorCSAgICAidmFsdWUgKHNlZSBhYm92ZSkuXG4iKTsKKwlhYm9ydCgpOwor fQorCitzdGF0aWMgdm9pZAorbWFsbG9jX2NvbmZfZXJyb3IoY29uc3QgY2hhciAqbXNnLCBjb25z dCBjaGFyICprLCBzaXplX3Qga2xlbiwgY29uc3QgY2hhciAqdiwKKyAgICBzaXplX3Qgdmxlbikg eworCW1hbGxvY19wcmludGYoIjxqZW1hbGxvYz46ICVzOiAlLipzOiUuKnNcbiIsIG1zZywgKGlu dClrbGVuLCBrLAorCSAgICAoaW50KXZsZW4sIHYpOworCS8qIElmIGFib3J0X2NvbmYgaXMgc2V0 LCBlcnJvciBvdXQgYWZ0ZXIgcHJvY2Vzc2luZyBhbGwgb3B0aW9ucy4gKi8KKwljb25zdCBjaGFy ICpleHBlcmltZW50YWwgPSAiZXhwZXJpbWVudGFsXyI7CisJaWYgKHN0cm5jbXAoaywgZXhwZXJp bWVudGFsLCBzdHJsZW4oZXhwZXJpbWVudGFsKSkgPT0gMCkgeworCQkvKiBIb3dldmVyLCB0b2xl cmF0ZSBleHBlcmltZW50YWwgZmVhdHVyZXMuICovCisJCXJldHVybjsKKwl9CisJaGFkX2NvbmZf ZXJyb3IgPSB0cnVlOworfQorCitzdGF0aWMgdm9pZAorbWFsbG9jX3Nsb3dfZmxhZ19pbml0KHZv aWQpIHsKKwkvKgorCSAqIENvbWJpbmUgdGhlIHJ1bnRpbWUgb3B0aW9ucyBpbnRvIG1hbGxvY19z bG93IGZvciBmYXN0IHBhdGguICBDYWxsZWQKKwkgKiBhZnRlciBwcm9jZXNzaW5nIGFsbCB0aGUg b3B0aW9ucy4KKwkgKi8KKwltYWxsb2Nfc2xvd19mbGFncyB8PSAob3B0X2p1bmtfYWxsb2MgPyBm bGFnX29wdF9qdW5rX2FsbG9jIDogMCkKKwkgICAgfCAob3B0X2p1bmtfZnJlZSA/IGZsYWdfb3B0 X2p1bmtfZnJlZSA6IDApCisJICAgIHwgKG9wdF96ZXJvID8gZmxhZ19vcHRfemVybyA6IDApCisJ ICAgIHwgKG9wdF91dHJhY2UgPyBmbGFnX29wdF91dHJhY2UgOiAwKQorCSAgICB8IChvcHRfeG1h bGxvYyA/IGZsYWdfb3B0X3htYWxsb2MgOiAwKTsKKworCW1hbGxvY19zbG93ID0gKG1hbGxvY19z bG93X2ZsYWdzICE9IDApOworfQorCisvKiBOdW1iZXIgb2Ygc291cmNlcyBmb3IgaW5pdGlhbGl6 aW5nIG1hbGxvY19jb25mICovCisjZGVmaW5lIE1BTExPQ19DT05GX05TT1VSQ0VTIDUKKworc3Rh dGljIGNvbnN0IGNoYXIgKgorb2J0YWluX21hbGxvY19jb25mKHVuc2lnbmVkIHdoaWNoX3NvdXJj ZSwgY2hhciBidWZbUEFUSF9NQVggKyAxXSkgeworCWlmIChjb25maWdfZGVidWcpIHsKKwkJc3Rh dGljIHVuc2lnbmVkIHJlYWRfc291cmNlID0gMDsKKwkJLyoKKwkJICogRWFjaCBzb3VyY2Ugc2hv dWxkIG9ubHkgYmUgcmVhZCBvbmNlLCB0byBtaW5pbWl6ZSAjIG9mCisJCSAqIHN5c2NhbGxzIG9u IGluaXQuCisJCSAqLworCQlhc3NlcnQocmVhZF9zb3VyY2UrKyA9PSB3aGljaF9zb3VyY2UpOwor CX0KKwlhc3NlcnQod2hpY2hfc291cmNlIDwgTUFMTE9DX0NPTkZfTlNPVVJDRVMpOworCisJY29u c3QgY2hhciAqcmV0OworCXN3aXRjaCAod2hpY2hfc291cmNlKSB7CisJY2FzZSAwOgorCQlyZXQg PSBjb25maWdfbWFsbG9jX2NvbmY7CisJCWJyZWFrOworCWNhc2UgMToKKwkJaWYgKGplX21hbGxv Y19jb25mICE9IE5VTEwpIHsKKwkJCS8qIFVzZSBvcHRpb25zIHRoYXQgd2VyZSBjb21waWxlZCBp bnRvIHRoZSBwcm9ncmFtLiAqLworCQkJcmV0ID0gamVfbWFsbG9jX2NvbmY7CisJCX0gZWxzZSB7 CisJCQkvKiBObyBjb25maWd1cmF0aW9uIHNwZWNpZmllZC4gKi8KKwkJCXJldCA9IE5VTEw7CisJ CX0KKwkJYnJlYWs7CisJY2FzZSAyOiB7CisJCXNzaXplX3QgbGlua2xlbiA9IDA7CisjaWZuZGVm IF9XSU4zMgorCQlpbnQgc2F2ZWRfZXJybm8gPSBlcnJubzsKKwkJY29uc3QgY2hhciAqbGlua25h bWUgPQorIyAgaWZkZWYgSkVNQUxMT0NfUFJFRklYCisJCSAgICAiL2V0Yy8iSkVNQUxMT0NfUFJF RklYIm1hbGxvYy5jb25mIgorIyAgZWxzZQorCQkgICAgIi9ldGMvbWFsbG9jLmNvbmYiCisjICBl bmRpZgorCQkgICAgOworCisJCS8qCisJCSAqIFRyeSB0byB1c2UgdGhlIGNvbnRlbnRzIG9mIHRo ZSAiL2V0Yy9tYWxsb2MuY29uZiIgc3ltYm9saWMKKwkJICogbGluaydzIG5hbWUuCisJCSAqLwor I2lmbmRlZiBKRU1BTExPQ19SRUFETElOS0FUCisJCWxpbmtsZW4gPSByZWFkbGluayhsaW5rbmFt ZSwgYnVmLCBQQVRIX01BWCk7CisjZWxzZQorCQlsaW5rbGVuID0gcmVhZGxpbmthdChBVF9GRENX RCwgbGlua25hbWUsIGJ1ZiwgUEFUSF9NQVgpOworI2VuZGlmCisJCWlmIChsaW5rbGVuID09IC0x KSB7CisJCQkvKiBObyBjb25maWd1cmF0aW9uIHNwZWNpZmllZC4gKi8KKwkJCWxpbmtsZW4gPSAw OworCQkJLyogUmVzdG9yZSBlcnJuby4gKi8KKwkJCXNldF9lcnJubyhzYXZlZF9lcnJubyk7CisJ CX0KKyNlbmRpZgorCQlidWZbbGlua2xlbl0gPSAnXDAnOworCQlyZXQgPSBidWY7CisJCWJyZWFr OworCX0gY2FzZSAzOiB7CisJCWNvbnN0IGNoYXIgKmVudm5hbWUgPQorI2lmZGVmIEpFTUFMTE9D X1BSRUZJWAorCQkgICAgSkVNQUxMT0NfQ1BSRUZJWCJNQUxMT0NfQ09ORiIKKyNlbHNlCisJCSAg ICAiTUFMTE9DX0NPTkYiCisjZW5kaWYKKwkJICAgIDsKKworCQlpZiAoKHJldCA9IGplbWFsbG9j X3NlY3VyZV9nZXRlbnYoZW52bmFtZSkpICE9IE5VTEwpIHsKKwkJCS8qCisJCQkgKiBEbyBub3Ro aW5nOyBvcHRzIGlzIGFscmVhZHkgaW5pdGlhbGl6ZWQgdG8gdGhlIHZhbHVlCisJCQkgKiBvZiB0 aGUgTUFMTE9DX0NPTkYgZW52aXJvbm1lbnQgdmFyaWFibGUuCisJCQkgKi8KKwkJfSBlbHNlIHsK KwkJCS8qIE5vIGNvbmZpZ3VyYXRpb24gc3BlY2lmaWVkLiAqLworCQkJcmV0ID0gTlVMTDsKKwkJ fQorCQlicmVhazsKKwl9IGNhc2UgNDogeworCQlyZXQgPSBqZV9tYWxsb2NfY29uZl8yX2NvbmZf aGFyZGVyOworCQlicmVhazsKKwl9IGRlZmF1bHQ6CisJCW5vdF9yZWFjaGVkKCk7CisJCXJldCA9 IE5VTEw7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkCittYWxsb2NfY29uZl9p bml0X2hlbHBlcihzY19kYXRhX3QgKnNjX2RhdGEsIHVuc2lnbmVkIGJpbl9zaGFyZF9zaXplc1tT Q19OQklOU10sCisgICAgYm9vbCBpbml0aWFsX2NhbGwsIGNvbnN0IGNoYXIgKm9wdHNfY2FjaGVb TUFMTE9DX0NPTkZfTlNPVVJDRVNdLAorICAgIGNoYXIgYnVmW1BBVEhfTUFYICsgMV0pIHsKKwlz dGF0aWMgY29uc3QgY2hhciAqb3B0c19leHBsYWluW01BTExPQ19DT05GX05TT1VSQ0VTXSA9IHsK KwkJInN0cmluZyBzcGVjaWZpZWQgdmlhIC0td2l0aC1tYWxsb2MtY29uZiIsCisJCSJzdHJpbmcg cG9pbnRlZCB0byBieSB0aGUgZ2xvYmFsIHZhcmlhYmxlIG1hbGxvY19jb25mIiwKKwkJIlwibmFt ZVwiIG9mIHRoZSBmaWxlIHJlZmVyZW5jZWQgYnkgdGhlIHN5bWJvbGljIGxpbmsgbmFtZWQgIgor CQkgICAgIi9ldGMvbWFsbG9jLmNvbmYiLAorCQkidmFsdWUgb2YgdGhlIGVudmlyb25tZW50IHZh cmlhYmxlIE1BTExPQ19DT05GIiwKKwkJInN0cmluZyBwb2ludGVkIHRvIGJ5IHRoZSBnbG9iYWwg dmFyaWFibGUgIgorCQkgICAgIm1hbGxvY19jb25mXzJfY29uZl9oYXJkZXIiLAorCX07CisJdW5z aWduZWQgaTsKKwljb25zdCBjaGFyICpvcHRzLCAqaywgKnY7CisJc2l6ZV90IGtsZW4sIHZsZW47 CisKKwlmb3IgKGkgPSAwOyBpIDwgTUFMTE9DX0NPTkZfTlNPVVJDRVM7IGkrKykgeworCQkvKiBH ZXQgcnVudGltZSBjb25maWd1cmF0aW9uLiAqLworCQlpZiAoaW5pdGlhbF9jYWxsKSB7CisJCQlv cHRzX2NhY2hlW2ldID0gb2J0YWluX21hbGxvY19jb25mKGksIGJ1Zik7CisJCX0KKwkJb3B0cyA9 IG9wdHNfY2FjaGVbaV07CisJCWlmICghaW5pdGlhbF9jYWxsICYmIG9wdF9jb25maXJtX2NvbmYp IHsKKwkJCW1hbGxvY19wcmludGYoCisJCQkgICAgIjxqZW1hbGxvYz46IG1hbGxvY19jb25mICMl dSAoJXMpOiBcIiVzXCJcbiIsCisJCQkgICAgaSArIDEsIG9wdHNfZXhwbGFpbltpXSwgb3B0cyAh PSBOVUxMID8gb3B0cyA6ICIiKTsKKwkJfQorCQlpZiAob3B0cyA9PSBOVUxMKSB7CisJCQljb250 aW51ZTsKKwkJfQorCisJCXdoaWxlICgqb3B0cyAhPSAnXDAnICYmICFtYWxsb2NfY29uZl9uZXh0 KCZvcHRzLCAmaywgJmtsZW4sICZ2LAorCQkgICAgJnZsZW4pKSB7CisKKyNkZWZpbmUgQ09ORl9F UlJPUihtc2csIGssIGtsZW4sIHYsIHZsZW4pCQkJCVwKKwkJCWlmICghaW5pdGlhbF9jYWxsKSB7 CQkJCVwKKwkJCQltYWxsb2NfY29uZl9lcnJvcigJCQlcCisJCQkJICAgIG1zZywgaywga2xlbiwg diwgdmxlbik7CQlcCisJCQkJY3VyX29wdF92YWxpZCA9IGZhbHNlOwkJCVwKKwkJCX0KKyNkZWZp bmUgQ09ORl9DT05USU5VRQl7CQkJCQkJXAorCQkJCWlmICghaW5pdGlhbF9jYWxsICYmIG9wdF9j b25maXJtX2NvbmYJXAorCQkJCSAgICAmJiBjdXJfb3B0X3ZhbGlkKSB7CQkJXAorCQkJCQltYWxs b2NfcHJpbnRmKCI8amVtYWxsb2M+OiAtLSAiCVwKKwkJCQkJICAgICJTZXQgY29uZiB2YWx1ZTog JS4qczolLipzIglcCisJCQkJCSAgICAiXG4iLCAoaW50KWtsZW4sIGssCQlcCisJCQkJCSAgICAo aW50KXZsZW4sIHYpOwkJXAorCQkJCX0JCQkJCVwKKwkJCQljb250aW51ZTsJCQkJXAorCQkJfQor I2RlZmluZSBDT05GX01BVENIKG4pCQkJCQkJCVwKKwkoc2l6ZW9mKG4pLTEgPT0ga2xlbiAmJiBz dHJuY21wKG4sIGssIGtsZW4pID09IDApCisjZGVmaW5lIENPTkZfTUFUQ0hfVkFMVUUobikJCQkJ CQlcCisJKHNpemVvZihuKS0xID09IHZsZW4gJiYgc3RybmNtcChuLCB2LCB2bGVuKSA9PSAwKQor I2RlZmluZSBDT05GX0hBTkRMRV9CT09MKG8sIG4pCQkJCQkJXAorCQkJaWYgKENPTkZfTUFUQ0go bikpIHsJCQkJXAorCQkJCWlmIChDT05GX01BVENIX1ZBTFVFKCJ0cnVlIikpIHsJCVwKKwkJCQkJ byA9IHRydWU7CQkJXAorCQkJCX0gZWxzZSBpZiAoQ09ORl9NQVRDSF9WQUxVRSgiZmFsc2UiKSkg ewlcCisJCQkJCW8gPSBmYWxzZTsJCQlcCisJCQkJfSBlbHNlIHsJCQkJXAorCQkJCQlDT05GX0VS Uk9SKCJJbnZhbGlkIGNvbmYgdmFsdWUiLFwKKwkJCQkJICAgIGssIGtsZW4sIHYsIHZsZW4pOwkJ XAorCQkJCX0JCQkJCVwKKwkJCQlDT05GX0NPTlRJTlVFOwkJCQlcCisJCQl9CisgICAgICAvKgor ICAgICAgICogT25lIG9mIHRoZSBDT05GX01JTiBtYWNyb3MgYmVsb3cgZXhwYW5kcywgaW4gb25l IG9mIHRoZSB1c2UgcG9pbnRzLAorICAgICAgICogdG8gInVuc2lnbmVkIGludGVnZXIgPCAwIiwg d2hpY2ggaXMgYWx3YXlzIGZhbHNlLCB0cmlnZ2VyaW5nIHRoZQorICAgICAgICogR0NDIC1XdHlw ZS1saW1pdHMgd2FybmluZywgd2hpY2ggd2UgZGlzYWJsZSBoZXJlIGFuZCByZS1lbmFibGUgYmVs b3cuCisgICAgICAgKi8KKyAgICAgIEpFTUFMTE9DX0RJQUdOT1NUSUNfUFVTSAorICAgICAgSkVN QUxMT0NfRElBR05PU1RJQ19JR05PUkVfVFlQRV9MSU1JVFMKKworI2RlZmluZSBDT05GX0RPTlRf Q0hFQ0tfTUlOKHVtLCBtaW4pCWZhbHNlCisjZGVmaW5lIENPTkZfQ0hFQ0tfTUlOKHVtLCBtaW4p CSgodW0pIDwgKG1pbikpCisjZGVmaW5lIENPTkZfRE9OVF9DSEVDS19NQVgodW0sIG1heCkJZmFs c2UKKyNkZWZpbmUgQ09ORl9DSEVDS19NQVgodW0sIG1heCkJKCh1bSkgPiAobWF4KSkKKworI2Rl ZmluZSBDT05GX1ZBTFVFX1JFQUQobWF4X3QsIHJlc3VsdCkJCQkJCVwKKwkgICAgICBjaGFyICpl bmQ7CQkJCQkJXAorCSAgICAgIHNldF9lcnJubygwKTsJCQkJCQlcCisJICAgICAgcmVzdWx0ID0g KG1heF90KW1hbGxvY19zdHJ0b3VtYXgodiwgJmVuZCwgMCk7CisjZGVmaW5lIENPTkZfVkFMVUVf UkVBRF9GQUlMKCkJCQkJCQlcCisJICAgICAgKGdldF9lcnJubygpICE9IDAgfHwgKHVpbnRwdHJf dCllbmQgLSAodWludHB0cl90KXYgIT0gdmxlbikKKworI2RlZmluZSBDT05GX0hBTkRMRV9UKHQs IG1heF90LCBvLCBuLCBtaW4sIG1heCwgY2hlY2tfbWluLCBjaGVja19tYXgsIGNsaXApIFwKKwkJ CWlmIChDT05GX01BVENIKG4pKSB7CQkJCVwKKwkJCQltYXhfdCBtdjsJCQkJXAorCQkJCUNPTkZf VkFMVUVfUkVBRChtYXhfdCwgbXYpCQlcCisJCQkJaWYgKENPTkZfVkFMVUVfUkVBRF9GQUlMKCkp IHsJCVwKKwkJCQkJQ09ORl9FUlJPUigiSW52YWxpZCBjb25mIHZhbHVlIixcCisJCQkJCSAgICBr LCBrbGVuLCB2LCB2bGVuKTsJCVwKKwkJCQl9IGVsc2UgaWYgKGNsaXApIHsJCQlcCisJCQkJCWlm IChjaGVja19taW4obXYsICh0KShtaW4pKSkgewlcCisJCQkJCQlvID0gKHQpKG1pbik7CQlcCisJ CQkJCX0gZWxzZSBpZiAoCQkJXAorCQkJCQkgICAgY2hlY2tfbWF4KG12LCAodCkobWF4KSkpIHsJ XAorCQkJCQkJbyA9ICh0KShtYXgpOwkJXAorCQkJCQl9IGVsc2UgewkJCVwKKwkJCQkJCW8gPSAo dCltdjsJCVwKKwkJCQkJfQkJCQlcCisJCQkJfSBlbHNlIHsJCQkJXAorCQkJCQlpZiAoY2hlY2tf bWluKG12LCAodCkobWluKSkgfHwJXAorCQkJCQkgICAgY2hlY2tfbWF4KG12LCAodCkobWF4KSkp IHsJXAorCQkJCQkJQ09ORl9FUlJPUigJCVwKKwkJCQkJCSAgICAiT3V0LW9mLXJhbmdlICIJXAor CQkJCQkJICAgICJjb25mIHZhbHVlIiwJXAorCQkJCQkJICAgIGssIGtsZW4sIHYsIHZsZW4pOwlc CisJCQkJCX0gZWxzZSB7CQkJXAorCQkJCQkJbyA9ICh0KW12OwkJXAorCQkJCQl9CQkJCVwKKwkJ CQl9CQkJCQlcCisJCQkJQ09ORl9DT05USU5VRTsJCQkJXAorCQkJfQorI2RlZmluZSBDT05GX0hB TkRMRV9UX1UodCwgbywgbiwgbWluLCBtYXgsIGNoZWNrX21pbiwgY2hlY2tfbWF4LCBjbGlwKQlc CisJICAgICAgQ09ORl9IQU5ETEVfVCh0LCB1aW50bWF4X3QsIG8sIG4sIG1pbiwgbWF4LCBjaGVj a19taW4sCVwKKwkJCSAgICBjaGVja19tYXgsIGNsaXApCisjZGVmaW5lIENPTkZfSEFORExFX1Rf U0lHTkVEKHQsIG8sIG4sIG1pbiwgbWF4LCBjaGVja19taW4sIGNoZWNrX21heCwgY2xpcClcCisJ ICAgICAgQ09ORl9IQU5ETEVfVCh0LCBpbnRtYXhfdCwgbywgbiwgbWluLCBtYXgsIGNoZWNrX21p biwJXAorCQkJICAgIGNoZWNrX21heCwgY2xpcCkKKworI2RlZmluZSBDT05GX0hBTkRMRV9VTlNJ R05FRChvLCBuLCBtaW4sIG1heCwgY2hlY2tfbWluLCBjaGVja19tYXgsCVwKKyAgICBjbGlwKQkJ CQkJCQkJXAorCQkJQ09ORl9IQU5ETEVfVF9VKHVuc2lnbmVkLCBvLCBuLCBtaW4sIG1heCwJXAor CQkJICAgIGNoZWNrX21pbiwgY2hlY2tfbWF4LCBjbGlwKQorI2RlZmluZSBDT05GX0hBTkRMRV9T SVpFX1QobywgbiwgbWluLCBtYXgsIGNoZWNrX21pbiwgY2hlY2tfbWF4LCBjbGlwKQlcCisJCQlD T05GX0hBTkRMRV9UX1Uoc2l6ZV90LCBvLCBuLCBtaW4sIG1heCwJCVwKKwkJCSAgICBjaGVja19t aW4sIGNoZWNrX21heCwgY2xpcCkKKyNkZWZpbmUgQ09ORl9IQU5ETEVfSU5UNjRfVChvLCBuLCBt aW4sIG1heCwgY2hlY2tfbWluLCBjaGVja19tYXgsIGNsaXApCVwKKwkJCUNPTkZfSEFORExFX1Rf U0lHTkVEKGludDY0X3QsIG8sIG4sIG1pbiwgbWF4LAlcCisJCQkgICAgY2hlY2tfbWluLCBjaGVj a19tYXgsIGNsaXApCisjZGVmaW5lIENPTkZfSEFORExFX1VJTlQ2NF9UKG8sIG4sIG1pbiwgbWF4 LCBjaGVja19taW4sIGNoZWNrX21heCwgY2xpcClcCisJCQlDT05GX0hBTkRMRV9UX1UodWludDY0 X3QsIG8sIG4sIG1pbiwgbWF4LAlcCisJCQkgICAgY2hlY2tfbWluLCBjaGVja19tYXgsIGNsaXAp CisjZGVmaW5lIENPTkZfSEFORExFX1NTSVpFX1QobywgbiwgbWluLCBtYXgpCQkJCVwKKwkJCUNP TkZfSEFORExFX1RfU0lHTkVEKHNzaXplX3QsIG8sIG4sIG1pbiwgbWF4LAlcCisJCQkgICAgQ09O Rl9DSEVDS19NSU4sIENPTkZfQ0hFQ0tfTUFYLCBmYWxzZSkKKyNkZWZpbmUgQ09ORl9IQU5ETEVf Q0hBUl9QKG8sIG4sIGQpCQkJCQlcCisJCQlpZiAoQ09ORl9NQVRDSChuKSkgewkJCQlcCisJCQkJ c2l6ZV90IGNweWxlbiA9ICh2bGVuIDw9CQlcCisJCQkJICAgIHNpemVvZihvKS0xKSA/IHZsZW4g OgkJXAorCQkJCSAgICBzaXplb2YobyktMTsJCQlcCisJCQkJc3RybmNweShvLCB2LCBjcHlsZW4p OwkJCVwKKwkJCQlvW2NweWxlbl0gPSAnXDAnOwkJCVwKKwkJCQlDT05GX0NPTlRJTlVFOwkJCQlc CisJCQl9CisKKwkJCWJvb2wgY3VyX29wdF92YWxpZCA9IHRydWU7CisKKwkJCUNPTkZfSEFORExF X0JPT0wob3B0X2NvbmZpcm1fY29uZiwgImNvbmZpcm1fY29uZiIpCisJCQlpZiAoaW5pdGlhbF9j YWxsKSB7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCUNPTkZfSEFORExFX0JPT0wob3B0X2Fi b3J0LCAiYWJvcnQiKQorCQkJQ09ORl9IQU5ETEVfQk9PTChvcHRfYWJvcnRfY29uZiwgImFib3J0 X2NvbmYiKQorCQkJQ09ORl9IQU5ETEVfQk9PTChvcHRfdHJ1c3RfbWFkdmlzZSwgInRydXN0X21h ZHZpc2UiKQorCQkJaWYgKHN0cm5jbXAoIm1ldGFkYXRhX3RocCIsIGssIGtsZW4pID09IDApIHsK KwkJCQlpbnQgbTsKKwkJCQlib29sIG1hdGNoID0gZmFsc2U7CisJCQkJZm9yIChtID0gMDsgbSA8 IG1ldGFkYXRhX3RocF9tb2RlX2xpbWl0OyBtKyspIHsKKwkJCQkJaWYgKHN0cm5jbXAobWV0YWRh dGFfdGhwX21vZGVfbmFtZXNbbV0sCisJCQkJCSAgICB2LCB2bGVuKSA9PSAwKSB7CisJCQkJCQlv cHRfbWV0YWRhdGFfdGhwID0gbTsKKwkJCQkJCW1hdGNoID0gdHJ1ZTsKKwkJCQkJCWJyZWFrOwor CQkJCQl9CisJCQkJfQorCQkJCWlmICghbWF0Y2gpIHsKKwkJCQkJQ09ORl9FUlJPUigiSW52YWxp ZCBjb25mIHZhbHVlIiwKKwkJCQkJICAgIGssIGtsZW4sIHYsIHZsZW4pOworCQkJCX0KKwkJCQlD T05GX0NPTlRJTlVFOworCQkJfQorCQkJQ09ORl9IQU5ETEVfQk9PTChvcHRfcmV0YWluLCAicmV0 YWluIikKKwkJCWlmIChzdHJuY21wKCJkc3MiLCBrLCBrbGVuKSA9PSAwKSB7CisJCQkJaW50IG07 CisJCQkJYm9vbCBtYXRjaCA9IGZhbHNlOworCQkJCWZvciAobSA9IDA7IG0gPCBkc3NfcHJlY19s aW1pdDsgbSsrKSB7CisJCQkJCWlmIChzdHJuY21wKGRzc19wcmVjX25hbWVzW21dLCB2LCB2bGVu KQorCQkJCQkgICAgPT0gMCkgeworCQkJCQkJaWYgKGV4dGVudF9kc3NfcHJlY19zZXQobSkpIHsK KwkJCQkJCQlDT05GX0VSUk9SKAorCQkJCQkJCSAgICAiRXJyb3Igc2V0dGluZyBkc3MiLAorCQkJ CQkJCSAgICBrLCBrbGVuLCB2LCB2bGVuKTsKKwkJCQkJCX0gZWxzZSB7CisJCQkJCQkJb3B0X2Rz cyA9CisJCQkJCQkJICAgIGRzc19wcmVjX25hbWVzW21dOworCQkJCQkJCW1hdGNoID0gdHJ1ZTsK KwkJCQkJCQlicmVhazsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCQlpZiAoIW1hdGNoKSB7 CisJCQkJCUNPTkZfRVJST1IoIkludmFsaWQgY29uZiB2YWx1ZSIsCisJCQkJCSAgICBrLCBrbGVu LCB2LCB2bGVuKTsKKwkJCQl9CisJCQkJQ09ORl9DT05USU5VRTsKKwkJCX0KKwkJCWlmIChDT05G X01BVENIKCJuYXJlbmFzIikpIHsKKwkJCQlpZiAoQ09ORl9NQVRDSF9WQUxVRSgiZGVmYXVsdCIp KSB7CisJCQkJCW9wdF9uYXJlbmFzID0gMDsKKwkJCQkJQ09ORl9DT05USU5VRTsKKwkJCQl9IGVs c2UgeworCQkJCQlDT05GX0hBTkRMRV9VTlNJR05FRChvcHRfbmFyZW5hcywKKwkJCQkJICAgICJu YXJlbmFzIiwgMSwgVUlOVF9NQVgsCisJCQkJCSAgICBDT05GX0NIRUNLX01JTiwgQ09ORl9ET05U X0NIRUNLX01BWCwKKwkJCQkJICAgIC8qIGNsaXAgKi8gZmFsc2UpCisJCQkJfQorCQkJfQorCQkJ aWYgKENPTkZfTUFUQ0goIm5hcmVuYXNfcmF0aW8iKSkgeworCQkJCWNoYXIgKmVuZDsKKwkJCQli b29sIGVyciA9IGZ4cF9wYXJzZSgmb3B0X25hcmVuYXNfcmF0aW8sIHYsCisJCQkJICAgICZlbmQp OworCQkJCWlmIChlcnIgfHwgKHNpemVfdCkoZW5kIC0gdikgIT0gdmxlbikgeworCQkJCQlDT05G X0VSUk9SKCJJbnZhbGlkIGNvbmYgdmFsdWUiLAorCQkJCQkgICAgaywga2xlbiwgdiwgdmxlbik7 CisJCQkJfQorCQkJCUNPTkZfQ09OVElOVUU7CisJCQl9CisJCQlpZiAoQ09ORl9NQVRDSCgiYmlu X3NoYXJkcyIpKSB7CisJCQkJY29uc3QgY2hhciAqYmluX3NoYXJkc19zZWdtZW50X2N1ciA9IHY7 CisJCQkJc2l6ZV90IHZsZW5fbGVmdCA9IHZsZW47CisJCQkJZG8geworCQkJCQlzaXplX3Qgc2l6 ZV9zdGFydDsKKwkJCQkJc2l6ZV90IHNpemVfZW5kOworCQkJCQlzaXplX3QgbnNoYXJkczsKKwkJ CQkJYm9vbCBlcnIgPSBtYWxsb2NfY29uZl9tdWx0aV9zaXplc19uZXh0KAorCQkJCQkgICAgJmJp bl9zaGFyZHNfc2VnbWVudF9jdXIsICZ2bGVuX2xlZnQsCisJCQkJCSAgICAmc2l6ZV9zdGFydCwg JnNpemVfZW5kLCAmbnNoYXJkcyk7CisJCQkJCWlmIChlcnIgfHwgYmluX3VwZGF0ZV9zaGFyZF9z aXplKAorCQkJCQkgICAgYmluX3NoYXJkX3NpemVzLCBzaXplX3N0YXJ0LAorCQkJCQkgICAgc2l6 ZV9lbmQsIG5zaGFyZHMpKSB7CisJCQkJCQlDT05GX0VSUk9SKAorCQkJCQkJICAgICJJbnZhbGlk IHNldHRpbmdzIGZvciAiCisJCQkJCQkgICAgImJpbl9zaGFyZHMiLCBrLCBrbGVuLCB2LAorCQkJ CQkJICAgIHZsZW4pOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9IHdoaWxlICh2bGVuX2xl ZnQgPiAwKTsKKwkJCQlDT05GX0NPTlRJTlVFOworCQkJfQorCQkJQ09ORl9IQU5ETEVfSU5UNjRf VChvcHRfbXV0ZXhfbWF4X3NwaW4sCisJCQkgICAgIm11dGV4X21heF9zcGluIiwgLTEsIElOVDY0 X01BWCwgQ09ORl9DSEVDS19NSU4sCisJCQkgICAgQ09ORl9ET05UX0NIRUNLX01BWCwgZmFsc2Up OworCQkJQ09ORl9IQU5ETEVfU1NJWkVfVChvcHRfZGlydHlfZGVjYXlfbXMsCisJCQkgICAgImRp cnR5X2RlY2F5X21zIiwgLTEsIE5TVElNRV9TRUNfTUFYICogS1FVKDEwMDApIDwKKwkJCSAgICBR VShTU0laRV9NQVgpID8gTlNUSU1FX1NFQ19NQVggKiBLUVUoMTAwMCkgOgorCQkJICAgIFNTSVpF X01BWCk7CisJCQlDT05GX0hBTkRMRV9TU0laRV9UKG9wdF9tdXp6eV9kZWNheV9tcywKKwkJCSAg ICAibXV6enlfZGVjYXlfbXMiLCAtMSwgTlNUSU1FX1NFQ19NQVggKiBLUVUoMTAwMCkgPAorCQkJ ICAgIFFVKFNTSVpFX01BWCkgPyBOU1RJTUVfU0VDX01BWCAqIEtRVSgxMDAwKSA6CisJCQkgICAg U1NJWkVfTUFYKTsKKwkJCUNPTkZfSEFORExFX0JPT0wob3B0X3N0YXRzX3ByaW50LCAic3RhdHNf cHJpbnQiKQorCQkJaWYgKENPTkZfTUFUQ0goInN0YXRzX3ByaW50X29wdHMiKSkgeworCQkJCWlu aXRfb3B0X3N0YXRzX29wdHModiwgdmxlbiwKKwkJCQkgICAgb3B0X3N0YXRzX3ByaW50X29wdHMp OworCQkJCUNPTkZfQ09OVElOVUU7CisJCQl9CisJCQlDT05GX0hBTkRMRV9JTlQ2NF9UKG9wdF9z dGF0c19pbnRlcnZhbCwKKwkJCSAgICAic3RhdHNfaW50ZXJ2YWwiLCAtMSwgSU5UNjRfTUFYLAor CQkJICAgIENPTkZfQ0hFQ0tfTUlOLCBDT05GX0RPTlRfQ0hFQ0tfTUFYLCBmYWxzZSkKKwkJCWlm IChDT05GX01BVENIKCJzdGF0c19pbnRlcnZhbF9vcHRzIikpIHsKKwkJCQlpbml0X29wdF9zdGF0 c19vcHRzKHYsIHZsZW4sCisJCQkJICAgIG9wdF9zdGF0c19pbnRlcnZhbF9vcHRzKTsKKwkJCQlD T05GX0NPTlRJTlVFOworCQkJfQorCQkJaWYgKGNvbmZpZ19maWxsKSB7CisJCQkJaWYgKENPTkZf TUFUQ0goImp1bmsiKSkgeworCQkJCQlpZiAoQ09ORl9NQVRDSF9WQUxVRSgidHJ1ZSIpKSB7CisJ CQkJCQlvcHRfanVuayA9ICJ0cnVlIjsKKwkJCQkJCW9wdF9qdW5rX2FsbG9jID0gb3B0X2p1bmtf ZnJlZSA9CisJCQkJCQkgICAgdHJ1ZTsKKwkJCQkJfSBlbHNlIGlmIChDT05GX01BVENIX1ZBTFVF KCJmYWxzZSIpKSB7CisJCQkJCQlvcHRfanVuayA9ICJmYWxzZSI7CisJCQkJCQlvcHRfanVua19h bGxvYyA9IG9wdF9qdW5rX2ZyZWUgPQorCQkJCQkJICAgIGZhbHNlOworCQkJCQl9IGVsc2UgaWYg KENPTkZfTUFUQ0hfVkFMVUUoImFsbG9jIikpIHsKKwkJCQkJCW9wdF9qdW5rID0gImFsbG9jIjsK KwkJCQkJCW9wdF9qdW5rX2FsbG9jID0gdHJ1ZTsKKwkJCQkJCW9wdF9qdW5rX2ZyZWUgPSBmYWxz ZTsKKwkJCQkJfSBlbHNlIGlmIChDT05GX01BVENIX1ZBTFVFKCJmcmVlIikpIHsKKwkJCQkJCW9w dF9qdW5rID0gImZyZWUiOworCQkJCQkJb3B0X2p1bmtfYWxsb2MgPSBmYWxzZTsKKwkJCQkJCW9w dF9qdW5rX2ZyZWUgPSB0cnVlOworCQkJCQl9IGVsc2UgeworCQkJCQkJQ09ORl9FUlJPUigKKwkJ CQkJCSAgICAiSW52YWxpZCBjb25mIHZhbHVlIiwKKwkJCQkJCSAgICBrLCBrbGVuLCB2LCB2bGVu KTsKKwkJCQkJfQorCQkJCQlDT05GX0NPTlRJTlVFOworCQkJCX0KKwkJCQlDT05GX0hBTkRMRV9C T09MKG9wdF96ZXJvLCAiemVybyIpCisJCQl9CisJCQlpZiAoY29uZmlnX3V0cmFjZSkgeworCQkJ CUNPTkZfSEFORExFX0JPT0wob3B0X3V0cmFjZSwgInV0cmFjZSIpCisJCQl9CisJCQlpZiAoY29u ZmlnX3htYWxsb2MpIHsKKwkJCQlDT05GX0hBTkRMRV9CT09MKG9wdF94bWFsbG9jLCAieG1hbGxv YyIpCisJCQl9CisJCQlpZiAoY29uZmlnX2VuYWJsZV9jeHgpIHsKKwkJCQlDT05GX0hBTkRMRV9C T09MKAorCQkJCSAgICBvcHRfZXhwZXJpbWVudGFsX2luZmFsbGlibGVfbmV3LAorCQkJCSAgICAi ZXhwZXJpbWVudGFsX2luZmFsbGlibGVfbmV3IikKKwkJCX0KKworCQkJQ09ORl9IQU5ETEVfQk9P TChvcHRfdGNhY2hlLCAidGNhY2hlIikKKwkJCUNPTkZfSEFORExFX1NJWkVfVChvcHRfdGNhY2hl X21heCwgInRjYWNoZV9tYXgiLAorCQkJICAgIDAsIFRDQUNIRV9NQVhDTEFTU19MSU1JVCwgQ09O Rl9ET05UX0NIRUNLX01JTiwKKwkJCSAgICBDT05GX0NIRUNLX01BWCwgLyogY2xpcCAqLyB0cnVl KQorCQkJaWYgKENPTkZfTUFUQ0goImxnX3RjYWNoZV9tYXgiKSkgeworCQkJCXNpemVfdCBtOwor CQkJCUNPTkZfVkFMVUVfUkVBRChzaXplX3QsIG0pCisJCQkJaWYgKENPTkZfVkFMVUVfUkVBRF9G QUlMKCkpIHsKKwkJCQkJQ09ORl9FUlJPUigiSW52YWxpZCBjb25mIHZhbHVlIiwKKwkJCQkJICAg IGssIGtsZW4sIHYsIHZsZW4pOworCQkJCX0gZWxzZSB7CisJCQkJCS8qIGNsaXAgaWYgbmVjZXNz YXJ5ICovCisJCQkJCWlmIChtID4gVENBQ0hFX0xHX01BWENMQVNTX0xJTUlUKSB7CisJCQkJCQlt ID0gVENBQ0hFX0xHX01BWENMQVNTX0xJTUlUOworCQkJCQl9CisJCQkJCW9wdF90Y2FjaGVfbWF4 ID0gKHNpemVfdCkxIDw8IG07CisJCQkJfQorCQkJCUNPTkZfQ09OVElOVUU7CisJCQl9CisJCQkv KgorCQkJICogQW55b25lIHRyeWluZyB0byBzZXQgYSB2YWx1ZSBvdXRzaWRlIC0xNiB0byAxNiBp cworCQkJICogZGVlcGx5IGNvbmZ1c2VkLgorCQkJICovCisJCQlDT05GX0hBTkRMRV9TU0laRV9U KG9wdF9sZ190Y2FjaGVfbnNsb3RzX211bCwKKwkJCSAgICAibGdfdGNhY2hlX25zbG90c19tdWwi LCAtMTYsIDE2KQorCQkJLyogRGl0dG8gd2l0aCB2YWx1ZXMgcGFzdCAyMDQ4LiAqLworCQkJQ09O Rl9IQU5ETEVfVU5TSUdORUQob3B0X3RjYWNoZV9uc2xvdHNfc21hbGxfbWluLAorCQkJICAgICJ0 Y2FjaGVfbnNsb3RzX3NtYWxsX21pbiIsIDEsIDIwNDgsCisJCQkgICAgQ09ORl9DSEVDS19NSU4s IENPTkZfQ0hFQ0tfTUFYLCAvKiBjbGlwICovIHRydWUpCisJCQlDT05GX0hBTkRMRV9VTlNJR05F RChvcHRfdGNhY2hlX25zbG90c19zbWFsbF9tYXgsCisJCQkgICAgInRjYWNoZV9uc2xvdHNfc21h bGxfbWF4IiwgMSwgMjA0OCwKKwkJCSAgICBDT05GX0NIRUNLX01JTiwgQ09ORl9DSEVDS19NQVgs IC8qIGNsaXAgKi8gdHJ1ZSkKKwkJCUNPTkZfSEFORExFX1VOU0lHTkVEKG9wdF90Y2FjaGVfbnNs b3RzX2xhcmdlLAorCQkJICAgICJ0Y2FjaGVfbnNsb3RzX2xhcmdlIiwgMSwgMjA0OCwKKwkJCSAg ICBDT05GX0NIRUNLX01JTiwgQ09ORl9DSEVDS19NQVgsIC8qIGNsaXAgKi8gdHJ1ZSkKKwkJCUNP TkZfSEFORExFX1NJWkVfVChvcHRfdGNhY2hlX2djX2luY3JfYnl0ZXMsCisJCQkgICAgInRjYWNo ZV9nY19pbmNyX2J5dGVzIiwgMTAyNCwgU0laRV9UX01BWCwKKwkJCSAgICBDT05GX0NIRUNLX01J TiwgQ09ORl9ET05UX0NIRUNLX01BWCwKKwkJCSAgICAvKiBjbGlwICovIHRydWUpCisJCQlDT05G X0hBTkRMRV9TSVpFX1Qob3B0X3RjYWNoZV9nY19kZWxheV9ieXRlcywKKwkJCSAgICAidGNhY2hl X2djX2RlbGF5X2J5dGVzIiwgMCwgU0laRV9UX01BWCwKKwkJCSAgICBDT05GX0RPTlRfQ0hFQ0tf TUlOLCBDT05GX0RPTlRfQ0hFQ0tfTUFYLAorCQkJICAgIC8qIGNsaXAgKi8gZmFsc2UpCisJCQlD T05GX0hBTkRMRV9VTlNJR05FRChvcHRfbGdfdGNhY2hlX2ZsdXNoX3NtYWxsX2RpdiwKKwkJCSAg ICAibGdfdGNhY2hlX2ZsdXNoX3NtYWxsX2RpdiIsIDEsIDE2LAorCQkJICAgIENPTkZfQ0hFQ0tf TUlOLCBDT05GX0NIRUNLX01BWCwgLyogY2xpcCAqLyB0cnVlKQorCQkJQ09ORl9IQU5ETEVfVU5T SUdORUQob3B0X2xnX3RjYWNoZV9mbHVzaF9sYXJnZV9kaXYsCisJCQkgICAgImxnX3RjYWNoZV9m bHVzaF9sYXJnZV9kaXYiLCAxLCAxNiwKKwkJCSAgICBDT05GX0NIRUNLX01JTiwgQ09ORl9DSEVD S19NQVgsIC8qIGNsaXAgKi8gdHJ1ZSkKKworCQkJLyoKKwkJCSAqIFRoZSBydW50aW1lIG9wdGlv biBvZiBvdmVyc2l6ZV90aHJlc2hvbGQgcmVtYWlucworCQkJICogdW5kb2N1bWVudGVkLiAgSXQg bWF5IGJlIHR3ZWFrZWQgaW4gdGhlIG5leHQgbWFqb3IKKwkJCSAqIHJlbGVhc2UgKDYuMCkuICBU aGUgZGVmYXVsdCB2YWx1ZSA4TSBpcyByYXRoZXIKKwkJCSAqIGNvbnNlcnZhdGl2ZSAvIHNhZmUu ICBUdW5pbmcgaXQgZnVydGhlciBkb3duIG1heQorCQkJICogaW1wcm92ZSBmcmFnbWVudGF0aW9u IGEgYml0IG1vcmUsIGJ1dCBtYXkgYWxzbyBjYXVzZQorCQkJICogY29udGVudGlvbiBvbiB0aGUg aHVnZSBhcmVuYS4KKwkJCSAqLworCQkJQ09ORl9IQU5ETEVfU0laRV9UKG9wdF9vdmVyc2l6ZV90 aHJlc2hvbGQsCisJCQkgICAgIm92ZXJzaXplX3RocmVzaG9sZCIsIDAsIFNDX0xBUkdFX01BWENM QVNTLAorCQkJICAgIENPTkZfRE9OVF9DSEVDS19NSU4sIENPTkZfQ0hFQ0tfTUFYLCBmYWxzZSkK KwkJCUNPTkZfSEFORExFX1NJWkVfVChvcHRfbGdfZXh0ZW50X21heF9hY3RpdmVfZml0LAorCQkJ ICAgICJsZ19leHRlbnRfbWF4X2FjdGl2ZV9maXQiLCAwLAorCQkJICAgIChzaXplb2Yoc2l6ZV90 KSA8PCAzKSwgQ09ORl9ET05UX0NIRUNLX01JTiwKKwkJCSAgICBDT05GX0NIRUNLX01BWCwgZmFs c2UpCisKKwkJCWlmIChzdHJuY21wKCJwZXJjcHVfYXJlbmEiLCBrLCBrbGVuKSA9PSAwKSB7CisJ CQkJYm9vbCBtYXRjaCA9IGZhbHNlOworCQkJCWZvciAoaW50IG0gPSBwZXJjcHVfYXJlbmFfbW9k ZV9uYW1lc19iYXNlOyBtIDwKKwkJCQkgICAgcGVyY3B1X2FyZW5hX21vZGVfbmFtZXNfbGltaXQ7 IG0rKykgeworCQkJCQlpZiAoc3RybmNtcChwZXJjcHVfYXJlbmFfbW9kZV9uYW1lc1ttXSwKKwkJ CQkJICAgIHYsIHZsZW4pID09IDApIHsKKwkJCQkJCWlmICghaGF2ZV9wZXJjcHVfYXJlbmEpIHsK KwkJCQkJCQlDT05GX0VSUk9SKAorCQkJCQkJCSAgICAiTm8gZ2V0Y3B1IHN1cHBvcnQiLAorCQkJ CQkJCSAgICBrLCBrbGVuLCB2LCB2bGVuKTsKKwkJCQkJCX0KKwkJCQkJCW9wdF9wZXJjcHVfYXJl bmEgPSBtOworCQkJCQkJbWF0Y2ggPSB0cnVlOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9 CisJCQkJaWYgKCFtYXRjaCkgeworCQkJCQlDT05GX0VSUk9SKCJJbnZhbGlkIGNvbmYgdmFsdWUi LAorCQkJCQkgICAgaywga2xlbiwgdiwgdmxlbik7CisJCQkJfQorCQkJCUNPTkZfQ09OVElOVUU7 CisJCQl9CisJCQlDT05GX0hBTkRMRV9CT09MKG9wdF9iYWNrZ3JvdW5kX3RocmVhZCwKKwkJCSAg ICAiYmFja2dyb3VuZF90aHJlYWQiKTsKKwkJCUNPTkZfSEFORExFX1NJWkVfVChvcHRfbWF4X2Jh Y2tncm91bmRfdGhyZWFkcywKKwkJCQkJICAgIm1heF9iYWNrZ3JvdW5kX3RocmVhZHMiLCAxLAor CQkJCQkgICBvcHRfbWF4X2JhY2tncm91bmRfdGhyZWFkcywKKwkJCQkJICAgQ09ORl9DSEVDS19N SU4sIENPTkZfQ0hFQ0tfTUFYLAorCQkJCQkgICB0cnVlKTsKKwkJCUNPTkZfSEFORExFX0JPT0wo b3B0X2hwYSwgImhwYSIpCisJCQlDT05GX0hBTkRMRV9TSVpFX1Qob3B0X2hwYV9vcHRzLnNsYWJf bWF4X2FsbG9jLAorCQkJICAgICJocGFfc2xhYl9tYXhfYWxsb2MiLCBQQUdFLCBIVUdFUEFHRSwK KwkJCSAgICBDT05GX0NIRUNLX01JTiwgQ09ORl9DSEVDS19NQVgsIHRydWUpOworCisJCQkvKgor CQkJICogQWNjZXB0IGVpdGhlciBhIHJhdGlvLWJhc2VkIG9yIGFuIGV4YWN0IGh1Z2lmaWNhdGlv bgorCQkJICogdGhyZXNob2xkLgorCQkJICovCisJCQlDT05GX0hBTkRMRV9TSVpFX1Qob3B0X2hw YV9vcHRzLmh1Z2lmaWNhdGlvbl90aHJlc2hvbGQsCisJCQkgICAgImhwYV9odWdpZmljYXRpb25f dGhyZXNob2xkIiwgUEFHRSwgSFVHRVBBR0UsCisJCQkgICAgQ09ORl9DSEVDS19NSU4sIENPTkZf Q0hFQ0tfTUFYLCB0cnVlKTsKKwkJCWlmIChDT05GX01BVENIKCJocGFfaHVnaWZpY2F0aW9uX3Ro cmVzaG9sZF9yYXRpbyIpKSB7CisJCQkJZnhwX3QgcmF0aW87CisJCQkJY2hhciAqZW5kOworCQkJ CWJvb2wgZXJyID0gZnhwX3BhcnNlKCZyYXRpbywgdiwKKwkJCQkgICAgJmVuZCk7CisJCQkJaWYg KGVyciB8fCAoc2l6ZV90KShlbmQgLSB2KSAhPSB2bGVuCisJCQkJICAgIHx8IHJhdGlvID4gRlhQ X0lOSVRfSU5UKDEpKSB7CisJCQkJCUNPTkZfRVJST1IoIkludmFsaWQgY29uZiB2YWx1ZSIsCisJ CQkJCSAgICBrLCBrbGVuLCB2LCB2bGVuKTsKKwkJCQl9IGVsc2UgeworCQkJCQlvcHRfaHBhX29w dHMuaHVnaWZpY2F0aW9uX3RocmVzaG9sZCA9CisJCQkJCSAgICBmeHBfbXVsX2ZyYWMoSFVHRVBB R0UsIHJhdGlvKTsKKwkJCQl9CisJCQkJQ09ORl9DT05USU5VRTsKKwkJCX0KKworCQkJQ09ORl9I QU5ETEVfVUlOVDY0X1QoCisJCQkgICAgb3B0X2hwYV9vcHRzLmh1Z2lmeV9kZWxheV9tcywgImhw YV9odWdpZnlfZGVsYXlfbXMiLAorCQkJICAgIDAsIDAsIENPTkZfRE9OVF9DSEVDS19NSU4sIENP TkZfRE9OVF9DSEVDS19NQVgsCisJCQkgICAgZmFsc2UpOworCisJCQlDT05GX0hBTkRMRV9VSU5U NjRfVCgKKwkJCSAgICBvcHRfaHBhX29wdHMubWluX3B1cmdlX2ludGVydmFsX21zLAorCQkJICAg ICJocGFfbWluX3B1cmdlX2ludGVydmFsX21zIiwgMCwgMCwKKwkJCSAgICBDT05GX0RPTlRfQ0hF Q0tfTUlOLCBDT05GX0RPTlRfQ0hFQ0tfTUFYLCBmYWxzZSk7CisKKwkJCWlmIChDT05GX01BVENI KCJocGFfZGlydHlfbXVsdCIpKSB7CisJCQkJaWYgKENPTkZfTUFUQ0hfVkFMVUUoIi0xIikpIHsK KwkJCQkJb3B0X2hwYV9vcHRzLmRpcnR5X211bHQgPSAoZnhwX3QpLTE7CisJCQkJCUNPTkZfQ09O VElOVUU7CisJCQkJfQorCQkJCWZ4cF90IHJhdGlvOworCQkJCWNoYXIgKmVuZDsKKwkJCQlib29s IGVyciA9IGZ4cF9wYXJzZSgmcmF0aW8sIHYsCisJCQkJICAgICZlbmQpOworCQkJCWlmIChlcnIg fHwgKHNpemVfdCkoZW5kIC0gdikgIT0gdmxlbikgeworCQkJCQlDT05GX0VSUk9SKCJJbnZhbGlk IGNvbmYgdmFsdWUiLAorCQkJCQkgICAgaywga2xlbiwgdiwgdmxlbik7CisJCQkJfSBlbHNlIHsK KwkJCQkJb3B0X2hwYV9vcHRzLmRpcnR5X211bHQgPSByYXRpbzsKKwkJCQl9CisJCQkJQ09ORl9D T05USU5VRTsKKwkJCX0KKworCQkJQ09ORl9IQU5ETEVfU0laRV9UKG9wdF9ocGFfc2VjX29wdHMu bnNoYXJkcywKKwkJCSAgICAiaHBhX3NlY19uc2hhcmRzIiwgMCwgMCwgQ09ORl9DSEVDS19NSU4s CisJCQkgICAgQ09ORl9ET05UX0NIRUNLX01BWCwgdHJ1ZSk7CisJCQlDT05GX0hBTkRMRV9TSVpF X1Qob3B0X2hwYV9zZWNfb3B0cy5tYXhfYWxsb2MsCisJCQkgICAgImhwYV9zZWNfbWF4X2FsbG9j IiwgUEFHRSwgMCwgQ09ORl9DSEVDS19NSU4sCisJCQkgICAgQ09ORl9ET05UX0NIRUNLX01BWCwg dHJ1ZSk7CisJCQlDT05GX0hBTkRMRV9TSVpFX1Qob3B0X2hwYV9zZWNfb3B0cy5tYXhfYnl0ZXMs CisJCQkgICAgImhwYV9zZWNfbWF4X2J5dGVzIiwgUEFHRSwgMCwgQ09ORl9DSEVDS19NSU4sCisJ CQkgICAgQ09ORl9ET05UX0NIRUNLX01BWCwgdHJ1ZSk7CisJCQlDT05GX0hBTkRMRV9TSVpFX1Qo b3B0X2hwYV9zZWNfb3B0cy5ieXRlc19hZnRlcl9mbHVzaCwKKwkJCSAgICAiaHBhX3NlY19ieXRl c19hZnRlcl9mbHVzaCIsIFBBR0UsIDAsCisJCQkgICAgQ09ORl9DSEVDS19NSU4sIENPTkZfRE9O VF9DSEVDS19NQVgsIHRydWUpOworCQkJQ09ORl9IQU5ETEVfU0laRV9UKG9wdF9ocGFfc2VjX29w dHMuYmF0Y2hfZmlsbF9leHRyYSwKKwkJCSAgICAiaHBhX3NlY19iYXRjaF9maWxsX2V4dHJhIiwg MCwgSFVHRVBBR0VfUEFHRVMsCisJCQkgICAgQ09ORl9DSEVDS19NSU4sIENPTkZfQ0hFQ0tfTUFY LCB0cnVlKTsKKworCQkJaWYgKENPTkZfTUFUQ0goInNsYWJfc2l6ZXMiKSkgeworCQkJCWlmIChD T05GX01BVENIX1ZBTFVFKCJkZWZhdWx0IikpIHsKKwkJCQkJc2NfZGF0YV9pbml0KHNjX2RhdGEp OworCQkJCQlDT05GX0NPTlRJTlVFOworCQkJCX0KKwkJCQlib29sIGVycjsKKwkJCQljb25zdCBj aGFyICpzbGFiX3NpemVfc2VnbWVudF9jdXIgPSB2OworCQkJCXNpemVfdCB2bGVuX2xlZnQgPSB2 bGVuOworCQkJCWRvIHsKKwkJCQkJc2l6ZV90IHNsYWJfc3RhcnQ7CisJCQkJCXNpemVfdCBzbGFi X2VuZDsKKwkJCQkJc2l6ZV90IHBnczsKKwkJCQkJZXJyID0gbWFsbG9jX2NvbmZfbXVsdGlfc2l6 ZXNfbmV4dCgKKwkJCQkJICAgICZzbGFiX3NpemVfc2VnbWVudF9jdXIsCisJCQkJCSAgICAmdmxl bl9sZWZ0LCAmc2xhYl9zdGFydCwgJnNsYWJfZW5kLAorCQkJCQkgICAgJnBncyk7CisJCQkJCWlm ICghZXJyKSB7CisJCQkJCQlzY19kYXRhX3VwZGF0ZV9zbGFiX3NpemUoCisJCQkJCQkgICAgc2Nf ZGF0YSwgc2xhYl9zdGFydCwKKwkJCQkJCSAgICBzbGFiX2VuZCwgKGludClwZ3MpOworCQkJCQl9 IGVsc2UgeworCQkJCQkJQ09ORl9FUlJPUigiSW52YWxpZCBzZXR0aW5ncyAiCisJCQkJCQkgICAg ImZvciBzbGFiX3NpemVzIiwKKwkJCQkJCSAgICBrLCBrbGVuLCB2LCB2bGVuKTsKKwkJCQkJfQor CQkJCX0gd2hpbGUgKCFlcnIgJiYgdmxlbl9sZWZ0ID4gMCk7CisJCQkJQ09ORl9DT05USU5VRTsK KwkJCX0KKwkJCWlmIChjb25maWdfcHJvZikgeworCQkJCUNPTkZfSEFORExFX0JPT0wob3B0X3By b2YsICJwcm9mIikKKwkJCQlDT05GX0hBTkRMRV9DSEFSX1Aob3B0X3Byb2ZfcHJlZml4LAorCQkJ CSAgICAicHJvZl9wcmVmaXgiLCAiamVwcm9mIikKKwkJCQlDT05GX0hBTkRMRV9CT09MKG9wdF9w cm9mX2FjdGl2ZSwgInByb2ZfYWN0aXZlIikKKwkJCQlDT05GX0hBTkRMRV9CT09MKG9wdF9wcm9m X3RocmVhZF9hY3RpdmVfaW5pdCwKKwkJCQkgICAgInByb2ZfdGhyZWFkX2FjdGl2ZV9pbml0IikK KwkJCQlDT05GX0hBTkRMRV9TSVpFX1Qob3B0X2xnX3Byb2Zfc2FtcGxlLAorCQkJCSAgICAibGdf cHJvZl9zYW1wbGUiLCAwLCAoc2l6ZW9mKHVpbnQ2NF90KSA8PCAzKQorCQkJCSAgICAtIDEsIENP TkZfRE9OVF9DSEVDS19NSU4sIENPTkZfQ0hFQ0tfTUFYLAorCQkJCSAgICB0cnVlKQorCQkJCUNP TkZfSEFORExFX0JPT0wob3B0X3Byb2ZfYWNjdW0sICJwcm9mX2FjY3VtIikKKwkJCQlDT05GX0hB TkRMRV9TU0laRV9UKG9wdF9sZ19wcm9mX2ludGVydmFsLAorCQkJCSAgICAibGdfcHJvZl9pbnRl cnZhbCIsIC0xLAorCQkJCSAgICAoc2l6ZW9mKHVpbnQ2NF90KSA8PCAzKSAtIDEpCisJCQkJQ09O Rl9IQU5ETEVfQk9PTChvcHRfcHJvZl9nZHVtcCwgInByb2ZfZ2R1bXAiKQorCQkJCUNPTkZfSEFO RExFX0JPT0wob3B0X3Byb2ZfZmluYWwsICJwcm9mX2ZpbmFsIikKKwkJCQlDT05GX0hBTkRMRV9C T09MKG9wdF9wcm9mX2xlYWssICJwcm9mX2xlYWsiKQorCQkJCUNPTkZfSEFORExFX0JPT0wob3B0 X3Byb2ZfbGVha19lcnJvciwKKwkJCQkgICAgInByb2ZfbGVha19lcnJvciIpCisJCQkJQ09ORl9I QU5ETEVfQk9PTChvcHRfcHJvZl9sb2csICJwcm9mX2xvZyIpCisJCQkJQ09ORl9IQU5ETEVfU1NJ WkVfVChvcHRfcHJvZl9yZWNlbnRfYWxsb2NfbWF4LAorCQkJCSAgICAicHJvZl9yZWNlbnRfYWxs b2NfbWF4IiwgLTEsIFNTSVpFX01BWCkKKwkJCQlDT05GX0hBTkRMRV9CT09MKG9wdF9wcm9mX3N0 YXRzLCAicHJvZl9zdGF0cyIpCisJCQkJQ09ORl9IQU5ETEVfQk9PTChvcHRfcHJvZl9zeXNfdGhy ZWFkX25hbWUsCisJCQkJICAgICJwcm9mX3N5c190aHJlYWRfbmFtZSIpCisJCQkJaWYgKENPTkZf TUFUQ0goInByb2ZfdGltZV9yZXNvbHV0aW9uIikpIHsKKwkJCQkJaWYgKENPTkZfTUFUQ0hfVkFM VUUoImRlZmF1bHQiKSkgeworCQkJCQkJb3B0X3Byb2ZfdGltZV9yZXMgPQorCQkJCQkJICAgIHBy b2ZfdGltZV9yZXNfZGVmYXVsdDsKKwkJCQkJfSBlbHNlIGlmIChDT05GX01BVENIX1ZBTFVFKCJo aWdoIikpIHsKKwkJCQkJCWlmICghY29uZmlnX2hpZ2hfcmVzX3RpbWVyKSB7CisJCQkJCQkJQ09O Rl9FUlJPUigKKwkJCQkJCQkgICAgIk5vIGhpZ2ggcmVzb2x1dGlvbiIKKwkJCQkJCQkgICAgIiB0 aW1lciBzdXBwb3J0IiwKKwkJCQkJCQkgICAgaywga2xlbiwgdiwgdmxlbik7CisJCQkJCQl9IGVs c2UgeworCQkJCQkJCW9wdF9wcm9mX3RpbWVfcmVzID0KKwkJCQkJCQkgICAgcHJvZl90aW1lX3Jl c19oaWdoOworCQkJCQkJfQorCQkJCQl9IGVsc2UgeworCQkJCQkJQ09ORl9FUlJPUigiSW52YWxp ZCBjb25mIHZhbHVlIiwKKwkJCQkJCSAgICBrLCBrbGVuLCB2LCB2bGVuKTsKKwkJCQkJfQorCQkJ CQlDT05GX0NPTlRJTlVFOworCQkJCX0KKwkJCQkvKgorCQkJCSAqIFVuZG9jdW1lbnRlZC4gIFdo ZW4gc2V0IHRvIGZhbHNlLCBkb24ndAorCQkJCSAqIGNvcnJlY3QgZm9yIGFuIHVuYmlhc2luZyBi dWcgaW4gamVwcm9mCisJCQkJICogYXR0cmlidXRpb24uICBUaGlzIGNhbiBiZSBoYW5keSBpZiB5 b3Ugd2FudAorCQkJCSAqIHRvIGdldCBjb25zaXN0ZW50IG51bWJlcnMgZnJvbSB5b3VyIGJpbmFy eQorCQkJCSAqIGFjcm9zcyBkaWZmZXJlbnQgamVtYWxsb2MgdmVyc2lvbnMsIGV2ZW4gaWYKKwkJ CQkgKiB0aG9zZSBudW1iZXJzIGFyZSBpbmNvcnJlY3QuICBUaGUgZGVmYXVsdCBpcworCQkJCSAq IHRydWUuCisJCQkJICovCisJCQkJQ09ORl9IQU5ETEVfQk9PTChvcHRfcHJvZl91bmJpYXMsICJw cm9mX3VuYmlhcyIpCisJCQl9CisJCQlpZiAoY29uZmlnX2xvZykgeworCQkJCWlmIChDT05GX01B VENIKCJsb2ciKSkgeworCQkJCQlzaXplX3QgY3B5bGVuID0gKAorCQkJCQkgICAgdmxlbiA8PSBz aXplb2YobG9nX3Zhcl9uYW1lcykgPworCQkJCQkgICAgdmxlbiA6IHNpemVvZihsb2dfdmFyX25h bWVzKSAtIDEpOworCQkJCQlzdHJuY3B5KGxvZ192YXJfbmFtZXMsIHYsIGNweWxlbik7CisJCQkJ CWxvZ192YXJfbmFtZXNbY3B5bGVuXSA9ICdcMCc7CisJCQkJCUNPTkZfQ09OVElOVUU7CisJCQkJ fQorCQkJfQorCQkJaWYgKENPTkZfTUFUQ0goInRocCIpKSB7CisJCQkJYm9vbCBtYXRjaCA9IGZh bHNlOworCQkJCWZvciAoaW50IG0gPSAwOyBtIDwgdGhwX21vZGVfbmFtZXNfbGltaXQ7IG0rKykg eworCQkJCQlpZiAoc3RybmNtcCh0aHBfbW9kZV9uYW1lc1ttXSx2LCB2bGVuKQorCQkJCQkgICAg PT0gMCkgeworCQkJCQkJaWYgKCFoYXZlX21hZHZpc2VfaHVnZSAmJiAhaGF2ZV9tZW1jbnRsKSB7 CisJCQkJCQkJQ09ORl9FUlJPUigKKwkJCQkJCQkgICAgIk5vIFRIUCBzdXBwb3J0IiwKKwkJCQkJ CQkgICAgaywga2xlbiwgdiwgdmxlbik7CisJCQkJCQl9CisJCQkJCQlvcHRfdGhwID0gbTsKKwkJ CQkJCW1hdGNoID0gdHJ1ZTsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfQorCQkJCWlmICgh bWF0Y2gpIHsKKwkJCQkJQ09ORl9FUlJPUigiSW52YWxpZCBjb25mIHZhbHVlIiwKKwkJCQkJICAg IGssIGtsZW4sIHYsIHZsZW4pOworCQkJCX0KKwkJCQlDT05GX0NPTlRJTlVFOworCQkJfQorCQkJ aWYgKENPTkZfTUFUQ0goInplcm9fcmVhbGxvYyIpKSB7CisJCQkJaWYgKENPTkZfTUFUQ0hfVkFM VUUoImFsbG9jIikpIHsKKwkJCQkJb3B0X3plcm9fcmVhbGxvY19hY3Rpb24KKwkJCQkJICAgID0g emVyb19yZWFsbG9jX2FjdGlvbl9hbGxvYzsKKwkJCQl9IGVsc2UgaWYgKENPTkZfTUFUQ0hfVkFM VUUoImZyZWUiKSkgeworCQkJCQlvcHRfemVyb19yZWFsbG9jX2FjdGlvbgorCQkJCQkgICAgPSB6 ZXJvX3JlYWxsb2NfYWN0aW9uX2ZyZWU7CisJCQkJfSBlbHNlIGlmIChDT05GX01BVENIX1ZBTFVF KCJhYm9ydCIpKSB7CisJCQkJCW9wdF96ZXJvX3JlYWxsb2NfYWN0aW9uCisJCQkJCSAgICA9IHpl cm9fcmVhbGxvY19hY3Rpb25fYWJvcnQ7CisJCQkJfSBlbHNlIHsKKwkJCQkJQ09ORl9FUlJPUigi SW52YWxpZCBjb25mIHZhbHVlIiwKKwkJCQkJICAgIGssIGtsZW4sIHYsIHZsZW4pOworCQkJCX0K KwkJCQlDT05GX0NPTlRJTlVFOworCQkJfQorCQkJaWYgKGNvbmZpZ191YWZfZGV0ZWN0aW9uICYm CisJCQkgICAgQ09ORl9NQVRDSCgibGdfc2FuX3VhZl9hbGlnbiIpKSB7CisJCQkJc3NpemVfdCBh OworCQkJCUNPTkZfVkFMVUVfUkVBRChzc2l6ZV90LCBhKQorCQkJCWlmIChDT05GX1ZBTFVFX1JF QURfRkFJTCgpIHx8IGEgPCAtMSkgeworCQkJCQlDT05GX0VSUk9SKCJJbnZhbGlkIGNvbmYgdmFs dWUiLAorCQkJCQkgICAgaywga2xlbiwgdiwgdmxlbik7CisJCQkJfQorCQkJCWlmIChhID09IC0x KSB7CisJCQkJCW9wdF9sZ19zYW5fdWFmX2FsaWduID0gLTE7CisJCQkJCUNPTkZfQ09OVElOVUU7 CisJCQkJfQorCisJCQkJLyogY2xpcCBpZiBuZWNlc3NhcnkgKi8KKwkJCQlzc2l6ZV90IG1heF9h bGxvd2VkID0gKHNpemVvZihzaXplX3QpIDw8IDMpIC0gMTsKKwkJCQlzc2l6ZV90IG1pbl9hbGxv d2VkID0gTEdfUEFHRTsKKwkJCQlpZiAoYSA+IG1heF9hbGxvd2VkKSB7CisJCQkJCWEgPSBtYXhf YWxsb3dlZDsKKwkJCQl9IGVsc2UgaWYgKGEgPCBtaW5fYWxsb3dlZCkgeworCQkJCQlhID0gbWlu X2FsbG93ZWQ7CisJCQkJfQorCisJCQkJb3B0X2xnX3Nhbl91YWZfYWxpZ24gPSBhOworCQkJCUNP TkZfQ09OVElOVUU7CisJCQl9CisKKwkJCUNPTkZfSEFORExFX1NJWkVfVChvcHRfc2FuX2d1YXJk X3NtYWxsLAorCQkJICAgICJzYW5fZ3VhcmRfc21hbGwiLCAwLCBTSVpFX1RfTUFYLAorCQkJICAg IENPTkZfRE9OVF9DSEVDS19NSU4sIENPTkZfRE9OVF9DSEVDS19NQVgsIGZhbHNlKQorCQkJQ09O Rl9IQU5ETEVfU0laRV9UKG9wdF9zYW5fZ3VhcmRfbGFyZ2UsCisJCQkgICAgInNhbl9ndWFyZF9s YXJnZSIsIDAsIFNJWkVfVF9NQVgsCisJCQkgICAgQ09ORl9ET05UX0NIRUNLX01JTiwgQ09ORl9E T05UX0NIRUNLX01BWCwgZmFsc2UpCisKKwkJCUNPTkZfRVJST1IoIkludmFsaWQgY29uZiBwYWly Iiwgaywga2xlbiwgdiwgdmxlbik7CisjdW5kZWYgQ09ORl9FUlJPUgorI3VuZGVmIENPTkZfQ09O VElOVUUKKyN1bmRlZiBDT05GX01BVENICisjdW5kZWYgQ09ORl9NQVRDSF9WQUxVRQorI3VuZGVm IENPTkZfSEFORExFX0JPT0wKKyN1bmRlZiBDT05GX0RPTlRfQ0hFQ0tfTUlOCisjdW5kZWYgQ09O Rl9DSEVDS19NSU4KKyN1bmRlZiBDT05GX0RPTlRfQ0hFQ0tfTUFYCisjdW5kZWYgQ09ORl9DSEVD S19NQVgKKyN1bmRlZiBDT05GX0hBTkRMRV9UCisjdW5kZWYgQ09ORl9IQU5ETEVfVF9VCisjdW5k ZWYgQ09ORl9IQU5ETEVfVF9TSUdORUQKKyN1bmRlZiBDT05GX0hBTkRMRV9VTlNJR05FRAorI3Vu ZGVmIENPTkZfSEFORExFX1NJWkVfVAorI3VuZGVmIENPTkZfSEFORExFX1NTSVpFX1QKKyN1bmRl ZiBDT05GX0hBTkRMRV9DSEFSX1AKKyAgICAvKiBSZS1lbmFibGUgZGlhZ25vc3RpYyAiLVd0eXBl LWxpbWl0cyIgKi8KKyAgICBKRU1BTExPQ19ESUFHTk9TVElDX1BPUAorCQl9CisJCWlmIChvcHRf YWJvcnRfY29uZiAmJiBoYWRfY29uZl9lcnJvcikgeworCQkJbWFsbG9jX2Fib3J0X2ludmFsaWRf Y29uZigpOworCQl9CisJfQorCWF0b21pY19zdG9yZV9iKCZsb2dfaW5pdF9kb25lLCB0cnVlLCBB VE9NSUNfUkVMRUFTRSk7Cit9CisKK3N0YXRpYyBib29sCittYWxsb2NfY29uZl9pbml0X2NoZWNr X2RlcHModm9pZCkgeworCWlmIChvcHRfcHJvZl9sZWFrX2Vycm9yICYmICFvcHRfcHJvZl9maW5h bCkgeworCQltYWxsb2NfcHJpbnRmKCI8amVtYWxsb2M+OiBwcm9mX2xlYWtfZXJyb3IgaXMgc2V0 IHcvbyAiCisJCSAgICAicHJvZl9maW5hbC5cbiIpOworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwly ZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyB2b2lkCittYWxsb2NfY29uZl9pbml0KHNjX2RhdGFf dCAqc2NfZGF0YSwgdW5zaWduZWQgYmluX3NoYXJkX3NpemVzW1NDX05CSU5TXSkgeworCWNvbnN0 IGNoYXIgKm9wdHNfY2FjaGVbTUFMTE9DX0NPTkZfTlNPVVJDRVNdID0ge05VTEwsIE5VTEwsIE5V TEwsIE5VTEwsCisJCU5VTEx9OworCWNoYXIgYnVmW1BBVEhfTUFYICsgMV07CisKKwkvKiBUaGUg Zmlyc3QgY2FsbCBvbmx5IHNldCB0aGUgY29uZmlybV9jb25mIG9wdGlvbiBhbmQgb3B0c19jYWNo ZSAqLworCW1hbGxvY19jb25mX2luaXRfaGVscGVyKE5VTEwsIE5VTEwsIHRydWUsIG9wdHNfY2Fj aGUsIGJ1Zik7CisJbWFsbG9jX2NvbmZfaW5pdF9oZWxwZXIoc2NfZGF0YSwgYmluX3NoYXJkX3Np emVzLCBmYWxzZSwgb3B0c19jYWNoZSwKKwkgICAgTlVMTCk7CisJaWYgKG1hbGxvY19jb25mX2lu aXRfY2hlY2tfZGVwcygpKSB7CisJCS8qIGNoZWNrX2RlcHMgZG9lcyB3YXJuaW5nIG1zZyBvbmx5 OyBhYm9ydCBiZWxvdyBpZiBuZWVkZWQuICovCisJCWlmIChvcHRfYWJvcnRfY29uZikgeworCQkJ bWFsbG9jX2Fib3J0X2ludmFsaWRfY29uZigpOworCQl9CisJfQorfQorCisjdW5kZWYgTUFMTE9D X0NPTkZfTlNPVVJDRVMKKworc3RhdGljIGJvb2wKK21hbGxvY19pbml0X2hhcmRfbmVlZGVkKHZv aWQpIHsKKwlpZiAobWFsbG9jX2luaXRpYWxpemVkKCkgfHwgKElTX0lOSVRJQUxJWkVSICYmIG1h bGxvY19pbml0X3N0YXRlID09CisJICAgIG1hbGxvY19pbml0X3JlY3Vyc2libGUpKSB7CisJCS8q CisJCSAqIEFub3RoZXIgdGhyZWFkIGluaXRpYWxpemVkIHRoZSBhbGxvY2F0b3IgYmVmb3JlIHRo aXMgb25lCisJCSAqIGFjcXVpcmVkIGluaXRfbG9jaywgb3IgdGhpcyB0aHJlYWQgaXMgdGhlIGlu aXRpYWxpemluZworCQkgKiB0aHJlYWQsIGFuZCBpdCBpcyByZWN1cnNpdmVseSBhbGxvY2F0aW5n LgorCQkgKi8KKwkJcmV0dXJuIGZhbHNlOworCX0KKyNpZmRlZiBKRU1BTExPQ19USFJFQURFRF9J TklUCisJaWYgKG1hbGxvY19pbml0aWFsaXplciAhPSBOT19JTklUSUFMSVpFUiAmJiAhSVNfSU5J VElBTElaRVIpIHsKKwkJLyogQnVzeS13YWl0IHVudGlsIHRoZSBpbml0aWFsaXppbmcgdGhyZWFk IGNvbXBsZXRlcy4gKi8KKwkJc3Bpbl90IHNwaW5uZXIgPSBTUElOX0lOSVRJQUxJWkVSOworCQlk byB7CisJCQltYWxsb2NfbXV0ZXhfdW5sb2NrKFRTRE5fTlVMTCwgJmluaXRfbG9jayk7CisJCQlz cGluX2FkYXB0aXZlKCZzcGlubmVyKTsKKwkJCW1hbGxvY19tdXRleF9sb2NrKFRTRE5fTlVMTCwg JmluaXRfbG9jayk7CisJCX0gd2hpbGUgKCFtYWxsb2NfaW5pdGlhbGl6ZWQoKSk7CisJCXJldHVy biBmYWxzZTsKKwl9CisjZW5kaWYKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wKK21h bGxvY19pbml0X2hhcmRfYTBfbG9ja2VkKCkgeworCW1hbGxvY19pbml0aWFsaXplciA9IElOSVRJ QUxJWkVSOworCisJSkVNQUxMT0NfRElBR05PU1RJQ19QVVNICisJSkVNQUxMT0NfRElBR05PU1RJ Q19JR05PUkVfTUlTU0lOR19TVFJVQ1RfRklFTERfSU5JVElBTElaRVJTCisJc2NfZGF0YV90IHNj X2RhdGEgPSB7MH07CisJSkVNQUxMT0NfRElBR05PU1RJQ19QT1AKKworCS8qCisJICogT3JkZXJp bmcgaGVyZSBpcyBzb21ld2hhdCB0cmlja3k7IHdlIG5lZWQgc2NfYm9vdCgpIGZpcnN0LCBzaW5j ZSB0aGF0CisJICogZGV0ZXJtaW5lcyB3aGF0IHRoZSBzaXplIGNsYXNzZXMgd2lsbCBiZSwgYW5k IHRoZW4KKwkgKiBtYWxsb2NfY29uZl9pbml0KCksIHNpbmNlIGFueSBzbGFiIHNpemUgdHdlYWtp bmcgd2lsbCBuZWVkIHRvIGJlIGRvbmUKKwkgKiBiZWZvcmUgc3pfYm9vdCBhbmQgYmluX2luZm9f Ym9vdCwgd2hpY2ggYXNzdW1lIHRoYXQgdGhlIHZhbHVlcyB0aGV5CisJICogcmVhZCBvdXQgb2Yg c2NfZGF0YV9nbG9iYWwgYXJlIGZpbmFsLgorCSAqLworCXNjX2Jvb3QoJnNjX2RhdGEpOworCXVu c2lnbmVkIGJpbl9zaGFyZF9zaXplc1tTQ19OQklOU107CisJYmluX3NoYXJkX3NpemVzX2Jvb3Qo YmluX3NoYXJkX3NpemVzKTsKKwkvKgorCSAqIHByb2ZfYm9vdDAgb25seSBpbml0aWFsaXplcyBv cHRfcHJvZl9wcmVmaXguICBXZSBuZWVkIHRvIGRvIGl0IGJlZm9yZQorCSAqIHdlIHBhcnNlIG1h bGxvY19jb25mIG9wdGlvbnMsIGluIGNhc2UgbWFsbG9jX2NvbmYgcGFyc2luZyBvdmVyd3JpdGVz CisJICogaXQuCisJICovCisJaWYgKGNvbmZpZ19wcm9mKSB7CisJCXByb2ZfYm9vdDAoKTsKKwl9 CisJbWFsbG9jX2NvbmZfaW5pdCgmc2NfZGF0YSwgYmluX3NoYXJkX3NpemVzKTsKKwlzYW5faW5p dChvcHRfbGdfc2FuX3VhZl9hbGlnbik7CisJc3pfYm9vdCgmc2NfZGF0YSwgb3B0X2NhY2hlX29i bGl2aW91cyk7CisJYmluX2luZm9fYm9vdCgmc2NfZGF0YSwgYmluX3NoYXJkX3NpemVzKTsKKwor CWlmIChvcHRfc3RhdHNfcHJpbnQpIHsKKwkJLyogUHJpbnQgc3RhdGlzdGljcyBhdCBleGl0LiAq LworCQlpZiAoYXRleGl0KHN0YXRzX3ByaW50X2F0ZXhpdCkgIT0gMCkgeworCQkJbWFsbG9jX3dy aXRlKCI8amVtYWxsb2M+OiBFcnJvciBpbiBhdGV4aXQoKVxuIik7CisJCQlpZiAob3B0X2Fib3J0 KSB7CisJCQkJYWJvcnQoKTsKKwkJCX0KKwkJfQorCX0KKworCWlmIChzdGF0c19ib290KCkpIHsK KwkJcmV0dXJuIHRydWU7CisJfQorCWlmIChwYWdlc19ib290KCkpIHsKKwkJcmV0dXJuIHRydWU7 CisJfQorCWlmIChiYXNlX2Jvb3QoVFNETl9OVUxMKSkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9CisJ LyogZW1hcF9nbG9iYWwgaXMgc3RhdGljLCBoZW5jZSB6ZXJvZWQuICovCisJaWYgKGVtYXBfaW5p dCgmYXJlbmFfZW1hcF9nbG9iYWwsIGIwZ2V0KCksIC8qIHplcm9lZCAqLyB0cnVlKSkgeworCQly ZXR1cm4gdHJ1ZTsKKwl9CisJaWYgKGV4dGVudF9ib290KCkpIHsKKwkJcmV0dXJuIHRydWU7CisJ fQorCWlmIChjdGxfYm9vdCgpKSB7CisJCXJldHVybiB0cnVlOworCX0KKwlpZiAoY29uZmlnX3By b2YpIHsKKwkJcHJvZl9ib290MSgpOworCX0KKwlpZiAob3B0X2hwYSAmJiAhaHBhX3N1cHBvcnRl ZCgpKSB7CisJCW1hbGxvY19wcmludGYoIjxqZW1hbGxvYz46IEhQQSBub3Qgc3VwcG9ydGVkIGlu IHRoZSBjdXJyZW50ICIKKwkJICAgICJjb25maWd1cmF0aW9uOyAlcy4iLAorCQkgICAgb3B0X2Fi b3J0X2NvbmYgPyAiYWJvcnRpbmciIDogImRpc2FibGluZyIpOworCQlpZiAob3B0X2Fib3J0X2Nv bmYpIHsKKwkJCW1hbGxvY19hYm9ydF9pbnZhbGlkX2NvbmYoKTsKKwkJfSBlbHNlIHsKKwkJCW9w dF9ocGEgPSBmYWxzZTsKKwkJfQorCX0KKwlpZiAoYXJlbmFfYm9vdCgmc2NfZGF0YSwgYjBnZXQo KSwgb3B0X2hwYSkpIHsKKwkJcmV0dXJuIHRydWU7CisJfQorCWlmICh0Y2FjaGVfYm9vdChUU0RO X05VTEwsIGIwZ2V0KCkpKSB7CisJCXJldHVybiB0cnVlOworCX0KKwlpZiAobWFsbG9jX211dGV4 X2luaXQoJmFyZW5hc19sb2NrLCAiYXJlbmFzIiwgV0lUTkVTU19SQU5LX0FSRU5BUywKKwkgICAg bWFsbG9jX211dGV4X3JhbmtfZXhjbHVzaXZlKSkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9CisJaG9v a19ib290KCk7CisJLyoKKwkgKiBDcmVhdGUgZW5vdWdoIHNjYWZmb2xkaW5nIHRvIGFsbG93IHJl Y3Vyc2l2ZSBhbGxvY2F0aW9uIGluCisJICogbWFsbG9jX25jcHVzKCkuCisJICovCisJbmFyZW5h c19hdXRvID0gMTsKKwltYW51YWxfYXJlbmFfYmFzZSA9IG5hcmVuYXNfYXV0byArIDE7CisJbWVt c2V0KGFyZW5hcywgMCwgc2l6ZW9mKGFyZW5hX3QgKikgKiBuYXJlbmFzX2F1dG8pOworCS8qCisJ ICogSW5pdGlhbGl6ZSBvbmUgYXJlbmEgaGVyZS4gIFRoZSByZXN0IGFyZSBsYXppbHkgY3JlYXRl ZCBpbgorCSAqIGFyZW5hX2Nob29zZV9oYXJkKCkuCisJICovCisJaWYgKGFyZW5hX2luaXQoVFNE Tl9OVUxMLCAwLCAmYXJlbmFfY29uZmlnX2RlZmF1bHQpID09IE5VTEwpIHsKKwkJcmV0dXJuIHRy dWU7CisJfQorCWEwID0gYXJlbmFfZ2V0KFRTRE5fTlVMTCwgMCwgZmFsc2UpOworCisJaWYgKG9w dF9ocGEgJiYgIWhwYV9zdXBwb3J0ZWQoKSkgeworCQltYWxsb2NfcHJpbnRmKCI8amVtYWxsb2M+ OiBIUEEgbm90IHN1cHBvcnRlZCBpbiB0aGUgY3VycmVudCAiCisJCSAgICAiY29uZmlndXJhdGlv bjsgJXMuIiwKKwkJICAgIG9wdF9hYm9ydF9jb25mID8gImFib3J0aW5nIiA6ICJkaXNhYmxpbmci KTsKKwkJaWYgKG9wdF9hYm9ydF9jb25mKSB7CisJCQltYWxsb2NfYWJvcnRfaW52YWxpZF9jb25m KCk7CisJCX0gZWxzZSB7CisJCQlvcHRfaHBhID0gZmFsc2U7CisJCX0KKwl9IGVsc2UgaWYgKG9w dF9ocGEpIHsKKwkJaHBhX3NoYXJkX29wdHNfdCBocGFfc2hhcmRfb3B0cyA9IG9wdF9ocGFfb3B0 czsKKwkJaHBhX3NoYXJkX29wdHMuZGVmZXJyYWxfYWxsb3dlZCA9IGJhY2tncm91bmRfdGhyZWFk X2VuYWJsZWQoKTsKKwkJaWYgKHBhX3NoYXJkX2VuYWJsZV9ocGEoVFNETl9OVUxMLCAmYTAtPnBh X3NoYXJkLAorCQkgICAgJmhwYV9zaGFyZF9vcHRzLCAmb3B0X2hwYV9zZWNfb3B0cykpIHsKKwkJ CXJldHVybiB0cnVlOworCQl9CisJfQorCisJbWFsbG9jX2luaXRfc3RhdGUgPSBtYWxsb2NfaW5p dF9hMF9pbml0aWFsaXplZDsKKworCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGJvb2wKK21h bGxvY19pbml0X2hhcmRfYTAodm9pZCkgeworCWJvb2wgcmV0OworCisJbWFsbG9jX211dGV4X2xv Y2soVFNETl9OVUxMLCAmaW5pdF9sb2NrKTsKKwlyZXQgPSBtYWxsb2NfaW5pdF9oYXJkX2EwX2xv Y2tlZCgpOworCW1hbGxvY19tdXRleF91bmxvY2soVFNETl9OVUxMLCAmaW5pdF9sb2NrKTsKKwly ZXR1cm4gcmV0OworfQorCisvKiBJbml0aWFsaXplIGRhdGEgc3RydWN0dXJlcyB3aGljaCBtYXkg dHJpZ2dlciByZWN1cnNpdmUgYWxsb2NhdGlvbi4gKi8KK3N0YXRpYyBib29sCittYWxsb2NfaW5p dF9oYXJkX3JlY3Vyc2libGUodm9pZCkgeworCW1hbGxvY19pbml0X3N0YXRlID0gbWFsbG9jX2lu aXRfcmVjdXJzaWJsZTsKKworCW5jcHVzID0gbWFsbG9jX25jcHVzKCk7CisJaWYgKG9wdF9wZXJj cHVfYXJlbmEgIT0gcGVyY3B1X2FyZW5hX2Rpc2FibGVkKSB7CisJCWJvb2wgY3B1X2NvdW50X2lz X2RldGVybWluaXN0aWMgPQorCQkgICAgbWFsbG9jX2NwdV9jb3VudF9pc19kZXRlcm1pbmlzdGlj KCk7CisJCWlmICghY3B1X2NvdW50X2lzX2RldGVybWluaXN0aWMpIHsKKwkJCS8qCisJCQkgKiBJ ZiAjIG9mIENQVSBpcyBub3QgZGV0ZXJtaW5pc3RpYywgYW5kIG5hcmVuYXMgbm90CisJCQkgKiBz cGVjaWZpZWQsIGRpc2FibGVzIHBlciBjcHUgYXJlbmEgc2luY2UgaXQgbWF5IG5vdAorCQkJICog ZGV0ZWN0IENQVSBJRHMgcHJvcGVybHkuCisJCQkgKi8KKwkJCWlmIChvcHRfbmFyZW5hcyA9PSAw KSB7CisJCQkJb3B0X3BlcmNwdV9hcmVuYSA9IHBlcmNwdV9hcmVuYV9kaXNhYmxlZDsKKwkJCQlt YWxsb2Nfd3JpdGUoIjxqZW1hbGxvYz46IE51bWJlciBvZiBDUFVzICIKKwkJCQkgICAgImRldGVj dGVkIGlzIG5vdCBkZXRlcm1pbmlzdGljLiBQZXItQ1BVICIKKwkJCQkgICAgImFyZW5hIGRpc2Fi bGVkLlxuIik7CisJCQkJaWYgKG9wdF9hYm9ydF9jb25mKSB7CisJCQkJCW1hbGxvY19hYm9ydF9p bnZhbGlkX2NvbmYoKTsKKwkJCQl9CisJCQkJaWYgKG9wdF9hYm9ydCkgeworCQkJCQlhYm9ydCgp OworCQkJCX0KKwkJCX0KKwkJfQorCX0KKworI2lmIChkZWZpbmVkKEpFTUFMTE9DX0hBVkVfUFRI UkVBRF9BVEZPUkspICYmICFkZWZpbmVkKEpFTUFMTE9DX01VVEVYX0lOSVRfQ0IpIFwKKyAgICAm JiAhZGVmaW5lZChKRU1BTExPQ19aT05FKSAmJiAhZGVmaW5lZChfV0lOMzIpICYmIFwKKyAgICAh ZGVmaW5lZChfX25hdGl2ZV9jbGllbnRfXykpCisJLyogTGludXhUaHJlYWRzJyBwdGhyZWFkX2F0 Zm9yaygpIGFsbG9jYXRlcy4gKi8KKwlpZiAocHRocmVhZF9hdGZvcmsoamVtYWxsb2NfcHJlZm9y aywgamVtYWxsb2NfcG9zdGZvcmtfcGFyZW50LAorCSAgICBqZW1hbGxvY19wb3N0Zm9ya19jaGls ZCkgIT0gMCkgeworCQltYWxsb2Nfd3JpdGUoIjxqZW1hbGxvYz46IEVycm9yIGluIHB0aHJlYWRf YXRmb3JrKClcbiIpOworCQlpZiAob3B0X2Fib3J0KSB7CisJCQlhYm9ydCgpOworCQl9CisJCXJl dHVybiB0cnVlOworCX0KKyNlbmRpZgorCisJaWYgKGJhY2tncm91bmRfdGhyZWFkX2Jvb3QwKCkp IHsKKwkJcmV0dXJuIHRydWU7CisJfQorCisJcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgdW5z aWduZWQKK21hbGxvY19uYXJlbmFzX2RlZmF1bHQodm9pZCkgeworCWFzc2VydChuY3B1cyA+IDAp OworCS8qCisJICogRm9yIFNNUCBzeXN0ZW1zLCBjcmVhdGUgbW9yZSB0aGFuIG9uZSBhcmVuYSBw ZXIgQ1BVIGJ5CisJICogZGVmYXVsdC4KKwkgKi8KKwlpZiAobmNwdXMgPiAxKSB7CisJCWZ4cF90 IGZ4cF9uY3B1cyA9IEZYUF9JTklUX0lOVChuY3B1cyk7CisJCWZ4cF90IGdvYWwgPSBmeHBfbXVs KGZ4cF9uY3B1cywgb3B0X25hcmVuYXNfcmF0aW8pOworCQl1aW50MzJfdCBpbnRfZ29hbCA9IGZ4 cF9yb3VuZF9uZWFyZXN0KGdvYWwpOworCQlpZiAoaW50X2dvYWwgPT0gMCkgeworCQkJcmV0dXJu IDE7CisJCX0KKwkJcmV0dXJuIGludF9nb2FsOworCX0gZWxzZSB7CisJCXJldHVybiAxOworCX0K K30KKworc3RhdGljIHBlcmNwdV9hcmVuYV9tb2RlX3QKK3BlcmNwdV9hcmVuYV9hc19pbml0aWFs aXplZChwZXJjcHVfYXJlbmFfbW9kZV90IG1vZGUpIHsKKwlhc3NlcnQoIW1hbGxvY19pbml0aWFs aXplZCgpKTsKKwlhc3NlcnQobW9kZSA8PSBwZXJjcHVfYXJlbmFfZGlzYWJsZWQpOworCisJaWYg KG1vZGUgIT0gcGVyY3B1X2FyZW5hX2Rpc2FibGVkKSB7CisJCW1vZGUgKz0gcGVyY3B1X2FyZW5h X21vZGVfZW5hYmxlZF9iYXNlOworCX0KKworCXJldHVybiBtb2RlOworfQorCitzdGF0aWMgYm9v bAorbWFsbG9jX2luaXRfbmFyZW5hcyh2b2lkKSB7CisJYXNzZXJ0KG5jcHVzID4gMCk7CisKKwlp ZiAob3B0X3BlcmNwdV9hcmVuYSAhPSBwZXJjcHVfYXJlbmFfZGlzYWJsZWQpIHsKKwkJaWYgKCFo YXZlX3BlcmNwdV9hcmVuYSB8fCBtYWxsb2NfZ2V0Y3B1KCkgPCAwKSB7CisJCQlvcHRfcGVyY3B1 X2FyZW5hID0gcGVyY3B1X2FyZW5hX2Rpc2FibGVkOworCQkJbWFsbG9jX3ByaW50ZigiPGplbWFs bG9jPjogcGVyQ1BVIGFyZW5hIGdldGNwdSgpIG5vdCAiCisJCQkgICAgImF2YWlsYWJsZS4gU2V0 dGluZyBuYXJlbmFzIHRvICV1LlxuIiwgb3B0X25hcmVuYXMgPworCQkJICAgIG9wdF9uYXJlbmFz IDogbWFsbG9jX25hcmVuYXNfZGVmYXVsdCgpKTsKKwkJCWlmIChvcHRfYWJvcnQpIHsKKwkJCQlh Ym9ydCgpOworCQkJfQorCQl9IGVsc2UgeworCQkJaWYgKG5jcHVzID49IE1BTExPQ1hfQVJFTkFf TElNSVQpIHsKKwkJCQltYWxsb2NfcHJpbnRmKCI8amVtYWxsb2M+OiBuYXJlbmFzIHcvIHBlcmNw dSIKKwkJCQkgICAgImFyZW5hIGJleW9uZCBsaW1pdCAoJWQpXG4iLCBuY3B1cyk7CisJCQkJaWYg KG9wdF9hYm9ydCkgeworCQkJCQlhYm9ydCgpOworCQkJCX0KKwkJCQlyZXR1cm4gdHJ1ZTsKKwkJ CX0KKwkJCS8qIE5COiBvcHRfcGVyY3B1X2FyZW5hIGlzbid0IGZ1bGx5IGluaXRpYWxpemVkIHll dC4gKi8KKwkJCWlmIChwZXJjcHVfYXJlbmFfYXNfaW5pdGlhbGl6ZWQob3B0X3BlcmNwdV9hcmVu YSkgPT0KKwkJCSAgICBwZXJfcGh5Y3B1X2FyZW5hICYmIG5jcHVzICUgMiAhPSAwKSB7CisJCQkJ bWFsbG9jX3ByaW50ZigiPGplbWFsbG9jPjogaW52YWxpZCAiCisJCQkJICAgICJjb25maWd1cmF0 aW9uIC0tIHBlciBwaHlzaWNhbCBDUFUgYXJlbmEgIgorCQkJCSAgICAid2l0aCBvZGQgbnVtYmVy ICgldSkgb2YgQ1BVcyAobm8gaHlwZXIgIgorCQkJCSAgICAidGhyZWFkaW5nPykuXG4iLCBuY3B1 cyk7CisJCQkJaWYgKG9wdF9hYm9ydCkKKwkJCQkJYWJvcnQoKTsKKwkJCX0KKwkJCXVuc2lnbmVk IG4gPSBwZXJjcHVfYXJlbmFfaW5kX2xpbWl0KAorCQkJICAgIHBlcmNwdV9hcmVuYV9hc19pbml0 aWFsaXplZChvcHRfcGVyY3B1X2FyZW5hKSk7CisJCQlpZiAob3B0X25hcmVuYXMgPCBuKSB7CisJ CQkJLyoKKwkJCQkgKiBJZiBuYXJlbmFzIGlzIHNwZWNpZmllZCB3aXRoIHBlcmNwdV9hcmVuYQor CQkJCSAqIGVuYWJsZWQsIGFjdHVhbCBuYXJlbmFzIGlzIHNldCBhcyB0aGUgZ3JlYXRlcgorCQkJ CSAqIG9mIHRoZSB0d28uIHBlcmNwdV9hcmVuYV9jaG9vc2Ugd2lsbCBiZSBmcmVlCisJCQkJICog dG8gdXNlIGFueSBvZiB0aGUgYXJlbmFzIGJhc2VkIG9uIENQVQorCQkJCSAqIGlkLiBUaGlzIGlz IGNvbnNlcnZhdGl2ZSAoYXQgYSBzbWFsbCBjb3N0KQorCQkJCSAqIGJ1dCBlbnN1cmVzIGNvcnJl Y3RuZXNzLgorCQkJCSAqCisJCQkJICogSWYgZm9yIHNvbWUgcmVhc29uIHRoZSBuY3B1cyBkZXRl cm1pbmVkIGF0CisJCQkJICogYm9vdCBpcyBub3QgdGhlIGFjdHVhbCBudW1iZXIgKGUuZy4gYmVj YXVzZQorCQkJCSAqIG9mIGFmZmluaXR5IHNldHRpbmcgZnJvbSBudW1hY3RsKSwgcmVzZXJ2aW5n CisJCQkJICogbmFyZW5hcyB0aGlzIHdheSBwcm92aWRlcyBhIHdvcmthcm91bmQgZm9yCisJCQkJ ICogcGVyY3B1X2FyZW5hLgorCQkJCSAqLworCQkJCW9wdF9uYXJlbmFzID0gbjsKKwkJCX0KKwkJ fQorCX0KKwlpZiAob3B0X25hcmVuYXMgPT0gMCkgeworCQlvcHRfbmFyZW5hcyA9IG1hbGxvY19u YXJlbmFzX2RlZmF1bHQoKTsKKwl9CisJYXNzZXJ0KG9wdF9uYXJlbmFzID4gMCk7CisKKwluYXJl bmFzX2F1dG8gPSBvcHRfbmFyZW5hczsKKwkvKgorCSAqIExpbWl0IHRoZSBudW1iZXIgb2YgYXJl bmFzIHRvIHRoZSBpbmRleGluZyByYW5nZSBvZiBNQUxMT0NYX0FSRU5BKCkuCisJICovCisJaWYg KG5hcmVuYXNfYXV0byA+PSBNQUxMT0NYX0FSRU5BX0xJTUlUKSB7CisJCW5hcmVuYXNfYXV0byA9 IE1BTExPQ1hfQVJFTkFfTElNSVQgLSAxOworCQltYWxsb2NfcHJpbnRmKCI8amVtYWxsb2M+OiBS ZWR1Y2luZyBuYXJlbmFzIHRvIGxpbWl0ICglZClcbiIsCisJCSAgICBuYXJlbmFzX2F1dG8pOwor CX0KKwluYXJlbmFzX3RvdGFsX3NldChuYXJlbmFzX2F1dG8pOworCWlmIChhcmVuYV9pbml0X2h1 Z2UoKSkgeworCQluYXJlbmFzX3RvdGFsX2luYygpOworCX0KKwltYW51YWxfYXJlbmFfYmFzZSA9 IG5hcmVuYXNfdG90YWxfZ2V0KCk7CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyB2b2lk CittYWxsb2NfaW5pdF9wZXJjcHUodm9pZCkgeworCW9wdF9wZXJjcHVfYXJlbmEgPSBwZXJjcHVf YXJlbmFfYXNfaW5pdGlhbGl6ZWQob3B0X3BlcmNwdV9hcmVuYSk7Cit9CisKK3N0YXRpYyBib29s CittYWxsb2NfaW5pdF9oYXJkX2ZpbmlzaCh2b2lkKSB7CisJaWYgKG1hbGxvY19tdXRleF9ib290 KCkpIHsKKwkJcmV0dXJuIHRydWU7CisJfQorCisJbWFsbG9jX2luaXRfc3RhdGUgPSBtYWxsb2Nf aW5pdF9pbml0aWFsaXplZDsKKwltYWxsb2Nfc2xvd19mbGFnX2luaXQoKTsKKworCXJldHVybiBm YWxzZTsKK30KKworc3RhdGljIHZvaWQKK21hbGxvY19pbml0X2hhcmRfY2xlYW51cCh0c2RuX3Qg KnRzZG4sIGJvb2wgcmVlbnRyYW5jeV9zZXQpIHsKKwltYWxsb2NfbXV0ZXhfYXNzZXJ0X293bmVy KHRzZG4sICZpbml0X2xvY2spOworCW1hbGxvY19tdXRleF91bmxvY2sodHNkbiwgJmluaXRfbG9j ayk7CisJaWYgKHJlZW50cmFuY3lfc2V0KSB7CisJCWFzc2VydCghdHNkbl9udWxsKHRzZG4pKTsK KwkJdHNkX3QgKnRzZCA9IHRzZG5fdHNkKHRzZG4pOworCQlhc3NlcnQodHNkX3JlZW50cmFuY3lf bGV2ZWxfZ2V0KHRzZCkgPiAwKTsKKwkJcG9zdF9yZWVudHJhbmN5KHRzZCk7CisJfQorfQorCitz dGF0aWMgYm9vbAorbWFsbG9jX2luaXRfaGFyZCh2b2lkKSB7CisJdHNkX3QgKnRzZDsKKworI2lm IGRlZmluZWQoX1dJTjMyKSAmJiBfV0lOMzJfV0lOTlQgPCAweDA2MDAKKwlfaW5pdF9pbml0X2xv Y2soKTsKKyNlbmRpZgorCW1hbGxvY19tdXRleF9sb2NrKFRTRE5fTlVMTCwgJmluaXRfbG9jayk7 CisKKyNkZWZpbmUgVU5MT0NLX1JFVFVSTih0c2RuLCByZXQsIHJlZW50cmFuY3kpCQlcCisJbWFs bG9jX2luaXRfaGFyZF9jbGVhbnVwKHRzZG4sIHJlZW50cmFuY3kpOwlcCisJcmV0dXJuIHJldDsK KworCWlmICghbWFsbG9jX2luaXRfaGFyZF9uZWVkZWQoKSkgeworCQlVTkxPQ0tfUkVUVVJOKFRT RE5fTlVMTCwgZmFsc2UsIGZhbHNlKQorCX0KKworCWlmIChtYWxsb2NfaW5pdF9zdGF0ZSAhPSBt YWxsb2NfaW5pdF9hMF9pbml0aWFsaXplZCAmJgorCSAgICBtYWxsb2NfaW5pdF9oYXJkX2EwX2xv Y2tlZCgpKSB7CisJCVVOTE9DS19SRVRVUk4oVFNETl9OVUxMLCB0cnVlLCBmYWxzZSkKKwl9CisK KwltYWxsb2NfbXV0ZXhfdW5sb2NrKFRTRE5fTlVMTCwgJmluaXRfbG9jayk7CisJLyogUmVjdXJz aXZlIGFsbG9jYXRpb24gcmVsaWVzIG9uIGZ1bmN0aW9uYWwgdHNkLiAqLworCXRzZCA9IG1hbGxv Y190c2RfYm9vdDAoKTsKKwlpZiAodHNkID09IE5VTEwpIHsKKwkJcmV0dXJuIHRydWU7CisJfQor CWlmIChtYWxsb2NfaW5pdF9oYXJkX3JlY3Vyc2libGUoKSkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9 CisKKwltYWxsb2NfbXV0ZXhfbG9jayh0c2RfdHNkbih0c2QpLCAmaW5pdF9sb2NrKTsKKwkvKiBT ZXQgcmVlbnRyYW5jeSBsZXZlbCB0byAxIGR1cmluZyBpbml0LiAqLworCXByZV9yZWVudHJhbmN5 KHRzZCwgTlVMTCk7CisJLyogSW5pdGlhbGl6ZSBuYXJlbmFzIGJlZm9yZSBwcm9mX2Jvb3QyIChm b3IgYWxsb2NhdGlvbikuICovCisJaWYgKG1hbGxvY19pbml0X25hcmVuYXMoKQorCSAgICB8fCBi YWNrZ3JvdW5kX3RocmVhZF9ib290MSh0c2RfdHNkbih0c2QpLCBiMGdldCgpKSkgeworCQlVTkxP Q0tfUkVUVVJOKHRzZF90c2RuKHRzZCksIHRydWUsIHRydWUpCisJfQorCWlmIChjb25maWdfcHJv ZiAmJiBwcm9mX2Jvb3QyKHRzZCwgYjBnZXQoKSkpIHsKKwkJVU5MT0NLX1JFVFVSTih0c2RfdHNk bih0c2QpLCB0cnVlLCB0cnVlKQorCX0KKworCW1hbGxvY19pbml0X3BlcmNwdSgpOworCisJaWYg KG1hbGxvY19pbml0X2hhcmRfZmluaXNoKCkpIHsKKwkJVU5MT0NLX1JFVFVSTih0c2RfdHNkbih0 c2QpLCB0cnVlLCB0cnVlKQorCX0KKwlwb3N0X3JlZW50cmFuY3kodHNkKTsKKwltYWxsb2NfbXV0 ZXhfdW5sb2NrKHRzZF90c2RuKHRzZCksICZpbml0X2xvY2spOworCisJd2l0bmVzc19hc3NlcnRf bG9ja2xlc3Mod2l0bmVzc190c2RfdHNkbigKKwkgICAgdHNkX3dpdG5lc3NfdHNkcF9nZXRfdW5z YWZlKHRzZCkpKTsKKwltYWxsb2NfdHNkX2Jvb3QxKCk7CisJLyogVXBkYXRlIFRTRCBhZnRlciB0 c2RfYm9vdDEuICovCisJdHNkID0gdHNkX2ZldGNoKCk7CisJaWYgKG9wdF9iYWNrZ3JvdW5kX3Ro cmVhZCkgeworCQlhc3NlcnQoaGF2ZV9iYWNrZ3JvdW5kX3RocmVhZCk7CisJCS8qCisJCSAqIE5l ZWQgdG8gZmluaXNoIGluaXQgJiB1bmxvY2sgZmlyc3QgYmVmb3JlIGNyZWF0aW5nIGJhY2tncm91 bmQKKwkJICogdGhyZWFkcyAocHRocmVhZF9jcmVhdGUgZGVwZW5kcyBvbiBtYWxsb2MpLiAgY3Rs X2luaXQgKHdoaWNoCisJCSAqIHNldHMgaXN0aHJlYWRlZCkgbmVlZHMgdG8gYmUgY2FsbGVkIHdp dGhvdXQgaG9sZGluZyBhbnkgbG9jay4KKwkJICovCisJCWJhY2tncm91bmRfdGhyZWFkX2N0bF9p bml0KHRzZF90c2RuKHRzZCkpOworCQlpZiAoYmFja2dyb3VuZF90aHJlYWRfY3JlYXRlKHRzZCwg MCkpIHsKKwkJCXJldHVybiB0cnVlOworCQl9CisJfQorI3VuZGVmIFVOTE9DS19SRVRVUk4KKwly ZXR1cm4gZmFsc2U7Cit9CisKKy8qCisgKiBFbmQgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zLgor ICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqIEJlZ2luIGFsbG9jYXRpb24tcGF0 aCBpbnRlcm5hbCBmdW5jdGlvbnMgYW5kIGRhdGEgc3RydWN0dXJlcy4KKyAqLworCisvKgorICog U2V0dGluZ3MgZGV0ZXJtaW5lZCBieSB0aGUgZG9jdW1lbnRlZCBiZWhhdmlvciBvZiB0aGUgYWxs b2NhdGlvbiBmdW5jdGlvbnMuCisgKi8KK3R5cGVkZWYgc3RydWN0IHN0YXRpY19vcHRzX3Mgc3Rh dGljX29wdHNfdDsKK3N0cnVjdCBzdGF0aWNfb3B0c19zIHsKKwkvKiBXaGV0aGVyIG9yIG5vdCBh bGxvY2F0aW9uIHNpemUgbWF5IG92ZXJmbG93LiAqLworCWJvb2wgbWF5X292ZXJmbG93OworCisJ LyoKKwkgKiBXaGV0aGVyIG9yIG5vdCBhbGxvY2F0aW9ucyAod2l0aCBhbGlnbm1lbnQpIG9mIHNp emUgMCBzaG91bGQgYmUKKwkgKiB0cmVhdGVkIGFzIHNpemUgMS4KKwkgKi8KKwlib29sIGJ1bXBf ZW1wdHlfYWxpZ25lZF9hbGxvYzsKKwkvKgorCSAqIFdoZXRoZXIgdG8gYXNzZXJ0IHRoYXQgYWxs b2NhdGlvbnMgYXJlIG5vdCBvZiBzaXplIDAgKGFmdGVyIGFueQorCSAqIGJ1bXBpbmcpLgorCSAq LworCWJvb2wgYXNzZXJ0X25vbmVtcHR5X2FsbG9jOworCisJLyoKKwkgKiBXaGV0aGVyIG9yIG5v dCB0byBtb2RpZnkgdGhlICdyZXN1bHQnIGFyZ3VtZW50IHRvIG1hbGxvYyBpbiBjYXNlIG9mCisJ ICogZXJyb3IuCisJICovCisJYm9vbCBudWxsX291dF9yZXN1bHRfb25fZXJyb3I7CisJLyogV2hl dGhlciB0byBzZXQgZXJybm8gd2hlbiB3ZSBlbmNvdW50ZXIgYW4gZXJyb3IgY29uZGl0aW9uLiAq LworCWJvb2wgc2V0X2Vycm5vX29uX2Vycm9yOworCisJLyoKKwkgKiBUaGUgbWluaW11bSB2YWxp ZCBhbGlnbm1lbnQgZm9yIGZ1bmN0aW9ucyByZXF1ZXN0aW5nIGFsaWduZWQgc3RvcmFnZS4KKwkg Ki8KKwlzaXplX3QgbWluX2FsaWdubWVudDsKKworCS8qIFRoZSBlcnJvciBzdHJpbmcgdG8gdXNl IGlmIHdlIG9vbS4gKi8KKwljb25zdCBjaGFyICpvb21fc3RyaW5nOworCS8qIFRoZSBlcnJvciBz dHJpbmcgdG8gdXNlIGlmIHRoZSBwYXNzZWQtaW4gYWxpZ25tZW50IGlzIGludmFsaWQuICovCisJ Y29uc3QgY2hhciAqaW52YWxpZF9hbGlnbm1lbnRfc3RyaW5nOworCisJLyoKKwkgKiBGYWxzZSBp ZiB3ZSdyZSBjb25maWd1cmVkIHRvIHNraXAgc29tZSB0aW1lLWNvbnN1bWluZyBvcGVyYXRpb25z LgorCSAqCisJICogVGhpcyBpc24ndCByZWFsbHkgYSBtYWxsb2MgImJlaGF2aW9yIiwgYnV0IGl0 IGFjdHMgYXMgYSB1c2VmdWwKKwkgKiBzdW1tYXJ5IG9mIHNldmVyYWwgb3RoZXIgc3RhdGljIChv ciBhdCBsZWFzdCwgc3RhdGljIGFmdGVyIHByb2dyYW0KKwkgKiBpbml0aWFsaXphdGlvbikgb3B0 aW9ucy4KKwkgKi8KKwlib29sIHNsb3c7CisJLyoKKwkgKiBSZXR1cm4gc2l6ZS4KKwkgKi8KKwli b29sIHVzaXplOworfTsKKworSkVNQUxMT0NfQUxXQVlTX0lOTElORSB2b2lkCitzdGF0aWNfb3B0 c19pbml0KHN0YXRpY19vcHRzX3QgKnN0YXRpY19vcHRzKSB7CisJc3RhdGljX29wdHMtPm1heV9v dmVyZmxvdyA9IGZhbHNlOworCXN0YXRpY19vcHRzLT5idW1wX2VtcHR5X2FsaWduZWRfYWxsb2Mg PSBmYWxzZTsKKwlzdGF0aWNfb3B0cy0+YXNzZXJ0X25vbmVtcHR5X2FsbG9jID0gZmFsc2U7CisJ c3RhdGljX29wdHMtPm51bGxfb3V0X3Jlc3VsdF9vbl9lcnJvciA9IGZhbHNlOworCXN0YXRpY19v cHRzLT5zZXRfZXJybm9fb25fZXJyb3IgPSBmYWxzZTsKKwlzdGF0aWNfb3B0cy0+bWluX2FsaWdu bWVudCA9IDA7CisJc3RhdGljX29wdHMtPm9vbV9zdHJpbmcgPSAiIjsKKwlzdGF0aWNfb3B0cy0+ aW52YWxpZF9hbGlnbm1lbnRfc3RyaW5nID0gIiI7CisJc3RhdGljX29wdHMtPnNsb3cgPSBmYWxz ZTsKKwlzdGF0aWNfb3B0cy0+dXNpemUgPSBmYWxzZTsKK30KKworLyoKKyAqIFRoZXNlIGNvcnJl c3BvbmQgdG8gdGhlIG1hY3JvcyBpbiBqZW1hbGxvYy9qZW1hbGxvY19tYWNyb3MuaC4gIEJyb2Fk bHksIHdlCisgKiBzaG91bGQgaGF2ZSBvbmUgY29uc3RhbnQgaGVyZSBwZXIgbWFnaWMgdmFsdWUg dGhlcmUuICBOb3RlIGhvd2V2ZXIgdGhhdCB0aGUKKyAqIHJlcHJlc2VudGF0aW9ucyBuZWVkIG5v dCBiZSByZWxhdGVkLgorICovCisjZGVmaW5lIFRDQUNIRV9JTkRfTk9ORSAoKHVuc2lnbmVkKS0x KQorI2RlZmluZSBUQ0FDSEVfSU5EX0FVVE9NQVRJQyAoKHVuc2lnbmVkKS0yKQorI2RlZmluZSBB UkVOQV9JTkRfQVVUT01BVElDICgodW5zaWduZWQpLTEpCisKK3R5cGVkZWYgc3RydWN0IGR5bmFt aWNfb3B0c19zIGR5bmFtaWNfb3B0c190Oworc3RydWN0IGR5bmFtaWNfb3B0c19zIHsKKwl2b2lk ICoqcmVzdWx0OworCXNpemVfdCB1c2l6ZTsKKwlzaXplX3QgbnVtX2l0ZW1zOworCXNpemVfdCBp dGVtX3NpemU7CisJc2l6ZV90IGFsaWdubWVudDsKKwlib29sIHplcm87CisJdW5zaWduZWQgdGNh Y2hlX2luZDsKKwl1bnNpZ25lZCBhcmVuYV9pbmQ7Cit9OworCitKRU1BTExPQ19BTFdBWVNfSU5M SU5FIHZvaWQKK2R5bmFtaWNfb3B0c19pbml0KGR5bmFtaWNfb3B0c190ICpkeW5hbWljX29wdHMp IHsKKwlkeW5hbWljX29wdHMtPnJlc3VsdCA9IE5VTEw7CisJZHluYW1pY19vcHRzLT51c2l6ZSA9 IDA7CisJZHluYW1pY19vcHRzLT5udW1faXRlbXMgPSAwOworCWR5bmFtaWNfb3B0cy0+aXRlbV9z aXplID0gMDsKKwlkeW5hbWljX29wdHMtPmFsaWdubWVudCA9IDA7CisJZHluYW1pY19vcHRzLT56 ZXJvID0gZmFsc2U7CisJZHluYW1pY19vcHRzLT50Y2FjaGVfaW5kID0gVENBQ0hFX0lORF9BVVRP TUFUSUM7CisJZHluYW1pY19vcHRzLT5hcmVuYV9pbmQgPSBBUkVOQV9JTkRfQVVUT01BVElDOwor fQorCisvKgorICogaW5kIHBhcmFtZXRlciBpcyBvcHRpb25hbCBhbmQgaXMgb25seSBjaGVja2Vk IGFuZCBmaWxsZWQgaWYgYWxpZ25tZW50ID09IDA7CisgKiByZXR1cm4gdHJ1ZSBpZiByZXN1bHQg aXMgb3V0IG9mIHJhbmdlLgorICovCitKRU1BTExPQ19BTFdBWVNfSU5MSU5FIGJvb2wKK2FsaWdu ZWRfdXNpemVfZ2V0KHNpemVfdCBzaXplLCBzaXplX3QgYWxpZ25tZW50LCBzaXplX3QgKnVzaXpl LCBzemluZF90ICppbmQsCisgICAgYm9vbCBidW1wX2VtcHR5X2FsaWduZWRfYWxsb2MpIHsKKwlh c3NlcnQodXNpemUgIT0gTlVMTCk7CisJaWYgKGFsaWdubWVudCA9PSAwKSB7CisJCWlmIChpbmQg IT0gTlVMTCkgeworCQkJKmluZCA9IHN6X3NpemUyaW5kZXgoc2l6ZSk7CisJCQlpZiAodW5saWtl bHkoKmluZCA+PSBTQ19OU0laRVMpKSB7CisJCQkJcmV0dXJuIHRydWU7CisJCQl9CisJCQkqdXNp emUgPSBzel9pbmRleDJzaXplKCppbmQpOworCQkJYXNzZXJ0KCp1c2l6ZSA+IDAgJiYgKnVzaXpl IDw9IFNDX0xBUkdFX01BWENMQVNTKTsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCQkqdXNpemUg PSBzel9zMnUoc2l6ZSk7CisJfSBlbHNlIHsKKwkJaWYgKGJ1bXBfZW1wdHlfYWxpZ25lZF9hbGxv YyAmJiB1bmxpa2VseShzaXplID09IDApKSB7CisJCQlzaXplID0gMTsKKwkJfQorCQkqdXNpemUg PSBzel9zYTJ1KHNpemUsIGFsaWdubWVudCk7CisJfQorCWlmICh1bmxpa2VseSgqdXNpemUgPT0g MCB8fCAqdXNpemUgPiBTQ19MQVJHRV9NQVhDTEFTUykpIHsKKwkJcmV0dXJuIHRydWU7CisJfQor CXJldHVybiBmYWxzZTsKK30KKworSkVNQUxMT0NfQUxXQVlTX0lOTElORSBib29sCit6ZXJvX2dl dChib29sIGd1YXJhbnRlZSwgYm9vbCBzbG93KSB7CisJaWYgKGNvbmZpZ19maWxsICYmIHNsb3cg JiYgdW5saWtlbHkob3B0X3plcm8pKSB7CisJCXJldHVybiB0cnVlOworCX0gZWxzZSB7CisJCXJl dHVybiBndWFyYW50ZWU7CisJfQorfQorCitKRU1BTExPQ19BTFdBWVNfSU5MSU5FIHRjYWNoZV90 ICoKK3RjYWNoZV9nZXRfZnJvbV9pbmQodHNkX3QgKnRzZCwgdW5zaWduZWQgdGNhY2hlX2luZCwg Ym9vbCBzbG93LCBib29sIGlzX2FsbG9jKSB7CisJdGNhY2hlX3QgKnRjYWNoZTsKKwlpZiAodGNh Y2hlX2luZCA9PSBUQ0FDSEVfSU5EX0FVVE9NQVRJQykgeworCQlpZiAobGlrZWx5KCFzbG93KSkg eworCQkJLyogR2V0dGluZyB0Y2FjaGUgcHRyIHVuY29uZGl0aW9uYWxseS4gKi8KKwkJCXRjYWNo ZSA9IHRzZF90Y2FjaGVwX2dldCh0c2QpOworCQkJYXNzZXJ0KHRjYWNoZSA9PSB0Y2FjaGVfZ2V0 KHRzZCkpOworCQl9IGVsc2UgaWYgKGlzX2FsbG9jIHx8CisJCSAgICBsaWtlbHkodHNkX3JlZW50 cmFuY3lfbGV2ZWxfZ2V0KHRzZCkgPT0gMCkpIHsKKwkJCXRjYWNoZSA9IHRjYWNoZV9nZXQodHNk KTsKKwkJfSBlbHNlIHsKKwkJCXRjYWNoZSA9IE5VTEw7CisJCX0KKwl9IGVsc2UgeworCQkvKgor CQkgKiBTaG91bGQgbm90IHNwZWNpZnkgdGNhY2hlIG9uIGRlYWxsb2NhdGlvbiBwYXRoIHdoZW4g YmVpbmcKKwkJICogcmVlbnRyYW50LgorCQkgKi8KKwkJYXNzZXJ0KGlzX2FsbG9jIHx8IHRzZF9y ZWVudHJhbmN5X2xldmVsX2dldCh0c2QpID09IDAgfHwKKwkJICAgIHRzZF9zdGF0ZV9ub2NsZWFu dXAodHNkKSk7CisJCWlmICh0Y2FjaGVfaW5kID09IFRDQUNIRV9JTkRfTk9ORSkgeworCQkJdGNh Y2hlID0gTlVMTDsKKwkJfSBlbHNlIHsKKwkJCXRjYWNoZSA9IHRjYWNoZXNfZ2V0KHRzZCwgdGNh Y2hlX2luZCk7CisJCX0KKwl9CisJcmV0dXJuIHRjYWNoZTsKK30KKworLyogUmV0dXJuIHRydWUg aWYgYSBtYW51YWwgYXJlbmEgaXMgc3BlY2lmaWVkIGFuZCBhcmVuYV9nZXQoKSBPT01zLiAqLwor SkVNQUxMT0NfQUxXQVlTX0lOTElORSBib29sCithcmVuYV9nZXRfZnJvbV9pbmQodHNkX3QgKnRz ZCwgdW5zaWduZWQgYXJlbmFfaW5kLCBhcmVuYV90ICoqYXJlbmFfcCkgeworCWlmIChhcmVuYV9p bmQgPT0gQVJFTkFfSU5EX0FVVE9NQVRJQykgeworCQkvKgorCQkgKiBJbiBjYXNlIG9mIGF1dG9t YXRpYyBhcmVuYSBtYW5hZ2VtZW50LCB3ZSBkZWZlciBhcmVuYQorCQkgKiBjb21wdXRhdGlvbiB1 bnRpbCBhcyBsYXRlIGFzIHdlIGNhbiwgaG9waW5nIHRvIGZpbGwgdGhlCisJCSAqIGFsbG9jYXRp b24gb3V0IG9mIHRoZSB0Y2FjaGUuCisJCSAqLworCQkqYXJlbmFfcCA9IE5VTEw7CisJfSBlbHNl IHsKKwkJKmFyZW5hX3AgPSBhcmVuYV9nZXQodHNkX3RzZG4odHNkKSwgYXJlbmFfaW5kLCB0cnVl KTsKKwkJaWYgKHVubGlrZWx5KCphcmVuYV9wID09IE5VTEwpICYmIGFyZW5hX2luZCA+PSBuYXJl bmFzX2F1dG8pIHsKKwkJCXJldHVybiB0cnVlOworCQl9CisJfQorCXJldHVybiBmYWxzZTsKK30K KworLyogaW5kIGlzIGlnbm9yZWQgaWYgZG9wdHMtPmFsaWdubWVudCA+IDAuICovCitKRU1BTExP Q19BTFdBWVNfSU5MSU5FIHZvaWQgKgoraW1hbGxvY19ub19zYW1wbGUoc3RhdGljX29wdHNfdCAq c29wdHMsIGR5bmFtaWNfb3B0c190ICpkb3B0cywgdHNkX3QgKnRzZCwKKyAgICBzaXplX3Qgc2l6 ZSwgc2l6ZV90IHVzaXplLCBzemluZF90IGluZCkgeworCS8qIEZpbGwgaW4gdGhlIHRjYWNoZS4g Ki8KKwl0Y2FjaGVfdCAqdGNhY2hlID0gdGNhY2hlX2dldF9mcm9tX2luZCh0c2QsIGRvcHRzLT50 Y2FjaGVfaW5kLAorCSAgICBzb3B0cy0+c2xvdywgLyogaXNfYWxsb2MgKi8gdHJ1ZSk7CisKKwkv KiBGaWxsIGluIHRoZSBhcmVuYS4gKi8KKwlhcmVuYV90ICphcmVuYTsKKwlpZiAoYXJlbmFfZ2V0 X2Zyb21faW5kKHRzZCwgZG9wdHMtPmFyZW5hX2luZCwgJmFyZW5hKSkgeworCQlyZXR1cm4gTlVM TDsKKwl9CisKKwlpZiAodW5saWtlbHkoZG9wdHMtPmFsaWdubWVudCAhPSAwKSkgeworCQlyZXR1 cm4gaXBhbGxvY3QodHNkX3RzZG4odHNkKSwgdXNpemUsIGRvcHRzLT5hbGlnbm1lbnQsCisJCSAg ICBkb3B0cy0+emVybywgdGNhY2hlLCBhcmVuYSk7CisJfQorCisJcmV0dXJuIGlhbGxvY3p0bSh0 c2RfdHNkbih0c2QpLCBzaXplLCBpbmQsIGRvcHRzLT56ZXJvLCB0Y2FjaGUsIGZhbHNlLAorCSAg ICBhcmVuYSwgc29wdHMtPnNsb3cpOworfQorCitKRU1BTExPQ19BTFdBWVNfSU5MSU5FIHZvaWQg KgoraW1hbGxvY19zYW1wbGUoc3RhdGljX29wdHNfdCAqc29wdHMsIGR5bmFtaWNfb3B0c190ICpk b3B0cywgdHNkX3QgKnRzZCwKKyAgICBzaXplX3QgdXNpemUsIHN6aW5kX3QgaW5kKSB7CisJdm9p ZCAqcmV0OworCisJLyoKKwkgKiBGb3Igc21hbGwgYWxsb2NhdGlvbnMsIHNhbXBsaW5nIGJ1bXBz IHRoZSB1c2l6ZS4gIElmIHNvLCB3ZSBhbGxvY2F0ZQorCSAqIGZyb20gdGhlIGluZF9sYXJnZSBi dWNrZXQuCisJICovCisJc3ppbmRfdCBpbmRfbGFyZ2U7CisJc2l6ZV90IGJ1bXBlZF91c2l6ZSA9 IHVzaXplOworCisJZG9wdHMtPmFsaWdubWVudCA9IHByb2Zfc2FtcGxlX2FsaWduKGRvcHRzLT5h bGlnbm1lbnQpOworCWlmICh1c2l6ZSA8PSBTQ19TTUFMTF9NQVhDTEFTUykgeworCQlhc3NlcnQo KChkb3B0cy0+YWxpZ25tZW50ID09IDApID8KKwkJICAgIHN6X3MydShTQ19MQVJHRV9NSU5DTEFT UykgOgorCQkgICAgc3pfc2EydShTQ19MQVJHRV9NSU5DTEFTUywgZG9wdHMtPmFsaWdubWVudCkp CisJCQk9PSBTQ19MQVJHRV9NSU5DTEFTUyk7CisJCWluZF9sYXJnZSA9IHN6X3NpemUyaW5kZXgo U0NfTEFSR0VfTUlOQ0xBU1MpOworCQlidW1wZWRfdXNpemUgPSBzel9zMnUoU0NfTEFSR0VfTUlO Q0xBU1MpOworCQlyZXQgPSBpbWFsbG9jX25vX3NhbXBsZShzb3B0cywgZG9wdHMsIHRzZCwgYnVt cGVkX3VzaXplLAorCQkgICAgYnVtcGVkX3VzaXplLCBpbmRfbGFyZ2UpOworCQlpZiAodW5saWtl bHkocmV0ID09IE5VTEwpKSB7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCQlhcmVuYV9wcm9mX3By b21vdGUodHNkX3RzZG4odHNkKSwgcmV0LCB1c2l6ZSk7CisJfSBlbHNlIHsKKwkJcmV0ID0gaW1h bGxvY19ub19zYW1wbGUoc29wdHMsIGRvcHRzLCB0c2QsIHVzaXplLCB1c2l6ZSwgaW5kKTsKKwl9 CisJYXNzZXJ0KHByb2Zfc2FtcGxlX2FsaWduZWQocmV0KSk7CisKKwlyZXR1cm4gcmV0OworfQor CisvKgorICogUmV0dXJucyB0cnVlIGlmIHRoZSBhbGxvY2F0aW9uIHdpbGwgb3ZlcmZsb3csIGFu ZCBmYWxzZSBvdGhlcndpc2UuICBTZXRzCisgKiAqc2l6ZSB0byB0aGUgcHJvZHVjdCBlaXRoZXIg d2F5LgorICovCitKRU1BTExPQ19BTFdBWVNfSU5MSU5FIGJvb2wKK2NvbXB1dGVfc2l6ZV93aXRo X292ZXJmbG93KGJvb2wgbWF5X292ZXJmbG93LCBkeW5hbWljX29wdHNfdCAqZG9wdHMsCisgICAg c2l6ZV90ICpzaXplKSB7CisJLyoKKwkgKiBUaGlzIGZ1bmN0aW9uIGlzIGp1c3QgbnVtX2l0ZW1z ICogaXRlbV9zaXplLCBleGNlcHQgdGhhdCB3ZSBtYXkgaGF2ZQorCSAqIHRvIGNoZWNrIGZvciBv dmVyZmxvdy4KKwkgKi8KKworCWlmICghbWF5X292ZXJmbG93KSB7CisJCWFzc2VydChkb3B0cy0+ bnVtX2l0ZW1zID09IDEpOworCQkqc2l6ZSA9IGRvcHRzLT5pdGVtX3NpemU7CisJCXJldHVybiBm YWxzZTsKKwl9CisKKwkvKiBBIHNpemVfdCB3aXRoIGl0cyBoaWdoLWhhbGYgYml0cyBhbGwgc2V0 IHRvIDEuICovCisJc3RhdGljIGNvbnN0IHNpemVfdCBoaWdoX2JpdHMgPSBTSVpFX1RfTUFYIDw8 IChzaXplb2Yoc2l6ZV90KSAqIDggLyAyKTsKKworCSpzaXplID0gZG9wdHMtPml0ZW1fc2l6ZSAq IGRvcHRzLT5udW1faXRlbXM7CisKKwlpZiAodW5saWtlbHkoKnNpemUgPT0gMCkpIHsKKwkJcmV0 dXJuIChkb3B0cy0+bnVtX2l0ZW1zICE9IDAgJiYgZG9wdHMtPml0ZW1fc2l6ZSAhPSAwKTsKKwl9 CisKKwkvKgorCSAqIFdlIGdvdCBhIG5vbi16ZXJvIHNpemUsIGJ1dCB3ZSBkb24ndCBrbm93IGlm IHdlIG92ZXJmbG93ZWQgdG8gZ2V0CisJICogdGhlcmUuICBUbyBhdm9pZCBoYXZpbmcgdG8gZG8g YSBkaXZpZGUsIHdlJ2xsIGJlIGNsZXZlciBhbmQgbm90ZSB0aGF0CisJICogaWYgYm90aCBBIGFu ZCBCIGNhbiBiZSByZXByZXNlbnRlZCBpbiBOLzIgYml0cywgdGhlbiB0aGVpciBwcm9kdWN0CisJ ICogY2FuIGJlIHJlcHJlc2VudGVkIGluIE4gYml0cyAod2l0aG91dCB0aGUgcG9zc2liaWxpdHkg b2Ygb3ZlcmZsb3cpLgorCSAqLworCWlmIChsaWtlbHkoKGhpZ2hfYml0cyAmIChkb3B0cy0+bnVt X2l0ZW1zIHwgZG9wdHMtPml0ZW1fc2l6ZSkpID09IDApKSB7CisJCXJldHVybiBmYWxzZTsKKwl9 CisJaWYgKGxpa2VseSgqc2l6ZSAvIGRvcHRzLT5pdGVtX3NpemUgPT0gZG9wdHMtPm51bV9pdGVt cykpIHsKKwkJcmV0dXJuIGZhbHNlOworCX0KKwlyZXR1cm4gdHJ1ZTsKK30KKworSkVNQUxMT0Nf QUxXQVlTX0lOTElORSBpbnQKK2ltYWxsb2NfYm9keShzdGF0aWNfb3B0c190ICpzb3B0cywgZHlu YW1pY19vcHRzX3QgKmRvcHRzLCB0c2RfdCAqdHNkKSB7CisJLyogV2hlcmUgdGhlIGFjdHVhbCBh bGxvY2F0ZWQgbWVtb3J5IHdpbGwgbGl2ZS4gKi8KKwl2b2lkICphbGxvY2F0aW9uID0gTlVMTDsK KwkvKiBGaWxsZWQgaW4gYnkgY29tcHV0ZV9zaXplX3dpdGhfb3ZlcmZsb3cgYmVsb3cuICovCisJ c2l6ZV90IHNpemUgPSAwOworCS8qCisJICogVGhlIHplcm8gaW5pdGlhbGl6YXRpb24gZm9yIGlu ZCBpcyBhY3R1YWxseSBkZWFkIHN0b3JlLCBpbiB0aGF0IGl0cworCSAqIHZhbHVlIGlzIHJlc2V0 IGJlZm9yZSBhbnkgYnJhbmNoIG9uIGl0cyB2YWx1ZSBpcyB0YWtlbi4gIFNvbWV0aW1lcworCSAq IHRob3VnaCwgaXQncyBjb252ZW5pZW50IHRvIHBhc3MgaXQgYXMgYXJndW1lbnRzIGJlZm9yZSB0 aGlzIHBvaW50LgorCSAqIFRvIGF2b2lkIHVuZGVmaW5lZCBiZWhhdmlvciB0aGVuLCB3ZSBpbml0 aWFsaXplIGl0IHdpdGggZHVtbXkgc3RvcmVzLgorCSAqLworCXN6aW5kX3QgaW5kID0gMDsKKwkv KiB1c2l6ZSB3aWxsIGFsd2F5cyBiZSBwcm9wZXJseSBpbml0aWFsaXplZC4gKi8KKwlzaXplX3Qg dXNpemU7CisKKwkvKiBSZWVudHJhbmN5IGlzIG9ubHkgY2hlY2tlZCBvbiBzbG93IHBhdGguICov CisJaW50OF90IHJlZW50cmFuY3lfbGV2ZWw7CisKKwkvKiBDb21wdXRlIHRoZSBhbW91bnQgb2Yg bWVtb3J5IHRoZSB1c2VyIHdhbnRzLiAqLworCWlmICh1bmxpa2VseShjb21wdXRlX3NpemVfd2l0 aF9vdmVyZmxvdyhzb3B0cy0+bWF5X292ZXJmbG93LCBkb3B0cywKKwkgICAgJnNpemUpKSkgewor CQlnb3RvIGxhYmVsX29vbTsKKwl9CisKKwlpZiAodW5saWtlbHkoZG9wdHMtPmFsaWdubWVudCA8 IHNvcHRzLT5taW5fYWxpZ25tZW50CisJICAgIHx8IChkb3B0cy0+YWxpZ25tZW50ICYgKGRvcHRz LT5hbGlnbm1lbnQgLSAxKSkgIT0gMCkpIHsKKwkJZ290byBsYWJlbF9pbnZhbGlkX2FsaWdubWVu dDsKKwl9CisKKwkvKiBUaGlzIGlzIHRoZSBiZWdpbm5pbmcgb2YgdGhlICJjb3JlIiBhbGdvcml0 aG0uICovCisJZG9wdHMtPnplcm8gPSB6ZXJvX2dldChkb3B0cy0+emVybywgc29wdHMtPnNsb3cp OworCWlmIChhbGlnbmVkX3VzaXplX2dldChzaXplLCBkb3B0cy0+YWxpZ25tZW50LCAmdXNpemUs ICZpbmQsCisJICAgIHNvcHRzLT5idW1wX2VtcHR5X2FsaWduZWRfYWxsb2MpKSB7CisJCWdvdG8g bGFiZWxfb29tOworCX0KKwlkb3B0cy0+dXNpemUgPSB1c2l6ZTsKKwkvKiBWYWxpZGF0ZSB0aGUg dXNlciBpbnB1dC4gKi8KKwlpZiAoc29wdHMtPmFzc2VydF9ub25lbXB0eV9hbGxvYykgeworCQlh c3NlcnQgKHNpemUgIT0gMCk7CisJfQorCisJY2hlY2tfZW50cnlfZXhpdF9sb2NraW5nKHRzZF90 c2RuKHRzZCkpOworCisJLyoKKwkgKiBJZiB3ZSBuZWVkIHRvIGhhbmRsZSByZWVudHJhbmN5LCB3 ZSBjYW4gZG8gaXQgb3V0IG9mIGEKKwkgKiBrbm93bi1pbml0aWFsaXplZCBhcmVuYSAoaS5lLiBh cmVuYSAwKS4KKwkgKi8KKwlyZWVudHJhbmN5X2xldmVsID0gdHNkX3JlZW50cmFuY3lfbGV2ZWxf Z2V0KHRzZCk7CisJaWYgKHNvcHRzLT5zbG93ICYmIHVubGlrZWx5KHJlZW50cmFuY3lfbGV2ZWwg PiAwKSkgeworCQkvKgorCQkgKiBXZSBzaG91bGQgbmV2ZXIgc3BlY2lmeSBwYXJ0aWN1bGFyIGFy ZW5hcyBvciB0Y2FjaGVzIGZyb20KKwkJICogd2l0aGluIG91ciBpbnRlcm5hbCBhbGxvY2F0aW9u cy4KKwkJICovCisJCWFzc2VydChkb3B0cy0+dGNhY2hlX2luZCA9PSBUQ0FDSEVfSU5EX0FVVE9N QVRJQyB8fAorCQkgICAgZG9wdHMtPnRjYWNoZV9pbmQgPT0gVENBQ0hFX0lORF9OT05FKTsKKwkJ YXNzZXJ0KGRvcHRzLT5hcmVuYV9pbmQgPT0gQVJFTkFfSU5EX0FVVE9NQVRJQyk7CisJCWRvcHRz LT50Y2FjaGVfaW5kID0gVENBQ0hFX0lORF9OT05FOworCQkvKiBXZSBrbm93IHRoYXQgYXJlbmEg MCBoYXMgYWxyZWFkeSBiZWVuIGluaXRpYWxpemVkLiAqLworCQlkb3B0cy0+YXJlbmFfaW5kID0g MDsKKwl9CisKKwkvKgorCSAqIElmIGRvcHRzLT5hbGlnbm1lbnQgPiAwLCB0aGVuIGluZCBpcyBz dGlsbCAwLCBidXQgdXNpemUgd2FzIGNvbXB1dGVkCisJICogaW4gdGhlIHByZXZpb3VzIGlmIHN0 YXRlbWVudC4gIERvd24gdGhlIHBvc2l0aXZlIGFsaWdubWVudCBwYXRoLAorCSAqIGltYWxsb2Nf bm9fc2FtcGxlIGFuZCBpbWFsbG9jX3NhbXBsZSB3aWxsIGlnbm9yZSBpbmQuCisJICovCisKKwkv KiBJZiBwcm9maWxpbmcgaXMgb24sIGdldCBvdXIgcHJvZmlsaW5nIGNvbnRleHQuICovCisJaWYg KGNvbmZpZ19wcm9mICYmIG9wdF9wcm9mKSB7CisJCWJvb2wgcHJvZl9hY3RpdmUgPSBwcm9mX2Fj dGl2ZV9nZXRfdW5sb2NrZWQoKTsKKwkJYm9vbCBzYW1wbGVfZXZlbnQgPSB0ZV9wcm9mX3NhbXBs ZV9ldmVudF9sb29rYWhlYWQodHNkLCB1c2l6ZSk7CisJCXByb2ZfdGN0eF90ICp0Y3R4ID0gcHJv Zl9hbGxvY19wcmVwKHRzZCwgcHJvZl9hY3RpdmUsCisJCSAgICBzYW1wbGVfZXZlbnQpOworCisJ CWVtYXBfYWxsb2NfY3R4X3QgYWxsb2NfY3R4OworCQlpZiAobGlrZWx5KCh1aW50cHRyX3QpdGN0 eCA9PSAodWludHB0cl90KTFVKSkgeworCQkJYWxsb2NfY3R4LnNsYWIgPSAodXNpemUgPD0gU0Nf U01BTExfTUFYQ0xBU1MpOworCQkJYWxsb2NhdGlvbiA9IGltYWxsb2Nfbm9fc2FtcGxlKAorCQkJ ICAgIHNvcHRzLCBkb3B0cywgdHNkLCB1c2l6ZSwgdXNpemUsIGluZCk7CisJCX0gZWxzZSBpZiAo KHVpbnRwdHJfdCl0Y3R4ID4gKHVpbnRwdHJfdCkxVSkgeworCQkJYWxsb2NhdGlvbiA9IGltYWxs b2Nfc2FtcGxlKAorCQkJICAgIHNvcHRzLCBkb3B0cywgdHNkLCB1c2l6ZSwgaW5kKTsKKwkJCWFs bG9jX2N0eC5zbGFiID0gZmFsc2U7CisJCX0gZWxzZSB7CisJCQlhbGxvY2F0aW9uID0gTlVMTDsK KwkJfQorCisJCWlmICh1bmxpa2VseShhbGxvY2F0aW9uID09IE5VTEwpKSB7CisJCQlwcm9mX2Fs bG9jX3JvbGxiYWNrKHRzZCwgdGN0eCk7CisJCQlnb3RvIGxhYmVsX29vbTsKKwkJfQorCQlwcm9m X21hbGxvYyh0c2QsIGFsbG9jYXRpb24sIHNpemUsIHVzaXplLCAmYWxsb2NfY3R4LCB0Y3R4KTsK Kwl9IGVsc2UgeworCQlhc3NlcnQoIW9wdF9wcm9mKTsKKwkJYWxsb2NhdGlvbiA9IGltYWxsb2Nf bm9fc2FtcGxlKHNvcHRzLCBkb3B0cywgdHNkLCBzaXplLCB1c2l6ZSwKKwkJICAgIGluZCk7CisJ CWlmICh1bmxpa2VseShhbGxvY2F0aW9uID09IE5VTEwpKSB7CisJCQlnb3RvIGxhYmVsX29vbTsK KwkJfQorCX0KKworCS8qCisJICogQWxsb2NhdGlvbiBoYXMgYmVlbiBkb25lIGF0IHRoaXMgcG9p bnQuICBXZSBzdGlsbCBoYXZlIHNvbWUKKwkgKiBwb3N0LWFsbG9jYXRpb24gd29yayB0byBkbyB0 aG91Z2guCisJICovCisKKwl0aHJlYWRfYWxsb2NfZXZlbnQodHNkLCB1c2l6ZSk7CisKKwlhc3Nl cnQoZG9wdHMtPmFsaWdubWVudCA9PSAwCisJICAgIHx8ICgodWludHB0cl90KWFsbG9jYXRpb24g JiAoZG9wdHMtPmFsaWdubWVudCAtIDEpKSA9PSBaVSgwKSk7CisKKwlhc3NlcnQodXNpemUgPT0g aXNhbGxvYyh0c2RfdHNkbih0c2QpLCBhbGxvY2F0aW9uKSk7CisKKwlpZiAoY29uZmlnX2ZpbGwg JiYgc29wdHMtPnNsb3cgJiYgIWRvcHRzLT56ZXJvCisJICAgICYmIHVubGlrZWx5KG9wdF9qdW5r X2FsbG9jKSkgeworCQlqdW5rX2FsbG9jX2NhbGxiYWNrKGFsbG9jYXRpb24sIHVzaXplKTsKKwl9 CisKKwlpZiAoc29wdHMtPnNsb3cpIHsKKwkJVVRSQUNFKDAsIHNpemUsIGFsbG9jYXRpb24pOwor CX0KKworCS8qIFN1Y2Nlc3MhICovCisJY2hlY2tfZW50cnlfZXhpdF9sb2NraW5nKHRzZF90c2Ru KHRzZCkpOworCSpkb3B0cy0+cmVzdWx0ID0gYWxsb2NhdGlvbjsKKwlyZXR1cm4gMDsKKworbGFi ZWxfb29tOgorCWlmICh1bmxpa2VseShzb3B0cy0+c2xvdykgJiYgY29uZmlnX3htYWxsb2MgJiYg dW5saWtlbHkob3B0X3htYWxsb2MpKSB7CisJCW1hbGxvY193cml0ZShzb3B0cy0+b29tX3N0cmlu Zyk7CisJCWFib3J0KCk7CisJfQorCisJaWYgKHNvcHRzLT5zbG93KSB7CisJCVVUUkFDRShOVUxM LCBzaXplLCBOVUxMKTsKKwl9CisKKwljaGVja19lbnRyeV9leGl0X2xvY2tpbmcodHNkX3RzZG4o dHNkKSk7CisKKwlpZiAoc29wdHMtPnNldF9lcnJub19vbl9lcnJvcikgeworCQlzZXRfZXJybm8o RU5PTUVNKTsKKwl9CisKKwlpZiAoc29wdHMtPm51bGxfb3V0X3Jlc3VsdF9vbl9lcnJvcikgewor CQkqZG9wdHMtPnJlc3VsdCA9IE5VTEw7CisJfQorCisJcmV0dXJuIEVOT01FTTsKKworCS8qCisJ ICogVGhpcyBsYWJlbCBpcyBvbmx5IGp1bXBlZCB0byBieSBvbmUgZ290bzsgd2UgbW92ZSBpdCBv dXQgb2YgbGluZQorCSAqIGFueXdheXMgdG8gYXZvaWQgb2JzY3VyaW5nIHRoZSBub24tZXJyb3Ig cGF0aHMsIGFuZCBmb3Igc3ltbWV0cnkgd2l0aAorCSAqIHRoZSBvb20gY2FzZS4KKwkgKi8KK2xh YmVsX2ludmFsaWRfYWxpZ25tZW50OgorCWlmIChjb25maWdfeG1hbGxvYyAmJiB1bmxpa2VseShv cHRfeG1hbGxvYykpIHsKKwkJbWFsbG9jX3dyaXRlKHNvcHRzLT5pbnZhbGlkX2FsaWdubWVudF9z dHJpbmcpOworCQlhYm9ydCgpOworCX0KKworCWlmIChzb3B0cy0+c2V0X2Vycm5vX29uX2Vycm9y KSB7CisJCXNldF9lcnJubyhFSU5WQUwpOworCX0KKworCWlmIChzb3B0cy0+c2xvdykgeworCQlV VFJBQ0UoTlVMTCwgc2l6ZSwgTlVMTCk7CisJfQorCisJY2hlY2tfZW50cnlfZXhpdF9sb2NraW5n KHRzZF90c2RuKHRzZCkpOworCisJaWYgKHNvcHRzLT5udWxsX291dF9yZXN1bHRfb25fZXJyb3Ip IHsKKwkJKmRvcHRzLT5yZXN1bHQgPSBOVUxMOworCX0KKworCXJldHVybiBFSU5WQUw7Cit9CisK K0pFTUFMTE9DX0FMV0FZU19JTkxJTkUgYm9vbAoraW1hbGxvY19pbml0X2NoZWNrKHN0YXRpY19v cHRzX3QgKnNvcHRzLCBkeW5hbWljX29wdHNfdCAqZG9wdHMpIHsKKwlpZiAodW5saWtlbHkoIW1h bGxvY19pbml0aWFsaXplZCgpKSAmJiB1bmxpa2VseShtYWxsb2NfaW5pdCgpKSkgeworCQlpZiAo Y29uZmlnX3htYWxsb2MgJiYgdW5saWtlbHkob3B0X3htYWxsb2MpKSB7CisJCQltYWxsb2Nfd3Jp dGUoc29wdHMtPm9vbV9zdHJpbmcpOworCQkJYWJvcnQoKTsKKwkJfQorCQlVVFJBQ0UoTlVMTCwg ZG9wdHMtPm51bV9pdGVtcyAqIGRvcHRzLT5pdGVtX3NpemUsIE5VTEwpOworCQlzZXRfZXJybm8o RU5PTUVNKTsKKwkJKmRvcHRzLT5yZXN1bHQgPSBOVUxMOworCisJCXJldHVybiBmYWxzZTsKKwl9 CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworLyogUmV0dXJucyB0aGUgZXJybm8tc3R5bGUgZXJyb3Ig Y29kZSBvZiB0aGUgYWxsb2NhdGlvbi4gKi8KK0pFTUFMTE9DX0FMV0FZU19JTkxJTkUgaW50Citp bWFsbG9jKHN0YXRpY19vcHRzX3QgKnNvcHRzLCBkeW5hbWljX29wdHNfdCAqZG9wdHMpIHsKKwlp ZiAodHNkX2dldF9hbGxvY2F0ZXMoKSAmJiAhaW1hbGxvY19pbml0X2NoZWNrKHNvcHRzLCBkb3B0 cykpIHsKKwkJcmV0dXJuIEVOT01FTTsKKwl9CisKKwkvKiBXZSBhbHdheXMgbmVlZCB0aGUgdHNk LiAgTGV0J3MgZ3JhYiBpdCByaWdodCBhd2F5LiAqLworCXRzZF90ICp0c2QgPSB0c2RfZmV0Y2go KTsKKwlhc3NlcnQodHNkKTsKKwlpZiAobGlrZWx5KHRzZF9mYXN0KHRzZCkpKSB7CisJCS8qIEZh c3QgYW5kIGNvbW1vbiBwYXRoLiAqLworCQl0c2RfYXNzZXJ0X2Zhc3QodHNkKTsKKwkJc29wdHMt PnNsb3cgPSBmYWxzZTsKKwkJcmV0dXJuIGltYWxsb2NfYm9keShzb3B0cywgZG9wdHMsIHRzZCk7 CisJfSBlbHNlIHsKKwkJaWYgKCF0c2RfZ2V0X2FsbG9jYXRlcygpICYmICFpbWFsbG9jX2luaXRf Y2hlY2soc29wdHMsIGRvcHRzKSkgeworCQkJcmV0dXJuIEVOT01FTTsKKwkJfQorCisJCXNvcHRz LT5zbG93ID0gdHJ1ZTsKKwkJcmV0dXJuIGltYWxsb2NfYm9keShzb3B0cywgZG9wdHMsIHRzZCk7 CisJfQorfQorCitKRU1BTExPQ19OT0lOTElORQordm9pZCAqCittYWxsb2NfZGVmYXVsdChzaXpl X3Qgc2l6ZSkgeworCXZvaWQgKnJldDsKKwlzdGF0aWNfb3B0c190IHNvcHRzOworCWR5bmFtaWNf b3B0c190IGRvcHRzOworCisJLyoKKwkgKiBUaGlzIHZhcmlhbnQgaGFzIGxvZ2dpbmcgaG9vayBv biBleGl0IGJ1dCBub3Qgb24gZW50cnkuICBJdCdzIGNhbGxsZWQKKwkgKiBvbmx5IGJ5IGplX21h bGxvYywgYmVsb3csIHdoaWNoIGVtaXRzIHRoZSBlbnRyeSBvbmUgZm9yIHVzIChhbmQsIGlmCisJ ICogaXQgY2FsbHMgdXMsIGRvZXMgc28gb25seSB2aWEgdGFpbCBjYWxsKS4KKwkgKi8KKworCXN0 YXRpY19vcHRzX2luaXQoJnNvcHRzKTsKKwlkeW5hbWljX29wdHNfaW5pdCgmZG9wdHMpOworCisJ c29wdHMubnVsbF9vdXRfcmVzdWx0X29uX2Vycm9yID0gdHJ1ZTsKKwlzb3B0cy5zZXRfZXJybm9f b25fZXJyb3IgPSB0cnVlOworCXNvcHRzLm9vbV9zdHJpbmcgPSAiPGplbWFsbG9jPjogRXJyb3Ig aW4gbWFsbG9jKCk6IG91dCBvZiBtZW1vcnlcbiI7CisKKwlkb3B0cy5yZXN1bHQgPSAmcmV0Owor CWRvcHRzLm51bV9pdGVtcyA9IDE7CisJZG9wdHMuaXRlbV9zaXplID0gc2l6ZTsKKworCWltYWxs b2MoJnNvcHRzLCAmZG9wdHMpOworCS8qCisJICogTm90ZSB0aGF0IHRoaXMgYnJhbmNoIGdldHMg b3B0aW1pemVkIGF3YXkgLS0gaXQgaW1tZWRpYXRlbHkgZm9sbG93cworCSAqIHRoZSBjaGVjayBv biB0c2RfZmFzdCB0aGF0IHNldHMgc29wdHMuc2xvdy4KKwkgKi8KKwlpZiAoc29wdHMuc2xvdykg eworCQl1aW50cHRyX3QgYXJnc1szXSA9IHtzaXplfTsKKwkJaG9va19pbnZva2VfYWxsb2MoaG9v a19hbGxvY19tYWxsb2MsIHJldCwgKHVpbnRwdHJfdClyZXQsIGFyZ3MpOworCX0KKworCUxPRygi Y29yZS5tYWxsb2MuZXhpdCIsICJyZXN1bHQ6ICVwIiwgcmV0KTsKKworCXJldHVybiByZXQ7Cit9 CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogQmVnaW4gbWFsbG9jKDMpLWNvbXBh dGlibGUgZnVuY3Rpb25zLgorICovCisKK0pFTUFMTE9DX0VYUE9SVCBKRU1BTExPQ19BTExPQ0FU T1IgSkVNQUxMT0NfUkVTVFJJQ1RfUkVUVVJOCit2b2lkIEpFTUFMTE9DX05PVEhST1cgKgorSkVN QUxMT0NfQVRUUihtYWxsb2MpIEpFTUFMTE9DX0FMTE9DX1NJWkUoMSkKK2plX21hbGxvYyhzaXpl X3Qgc2l6ZSkgeworCXJldHVybiBpbWFsbG9jX2Zhc3RwYXRoKHNpemUsICZtYWxsb2NfZGVmYXVs dCk7Cit9CisKK0pFTUFMTE9DX0VYUE9SVCBpbnQgSkVNQUxMT0NfTk9USFJPVworSkVNQUxMT0Nf QVRUUihub25udWxsKDEpKQoramVfcG9zaXhfbWVtYWxpZ24odm9pZCAqKm1lbXB0ciwgc2l6ZV90 IGFsaWdubWVudCwgc2l6ZV90IHNpemUpIHsKKwlpbnQgcmV0OworCXN0YXRpY19vcHRzX3Qgc29w dHM7CisJZHluYW1pY19vcHRzX3QgZG9wdHM7CisKKwlMT0coImNvcmUucG9zaXhfbWVtYWxpZ24u ZW50cnkiLCAibWVtIHB0cjogJXAsIGFsaWdubWVudDogJXp1LCAiCisJICAgICJzaXplOiAlenUi LCBtZW1wdHIsIGFsaWdubWVudCwgc2l6ZSk7CisKKwlzdGF0aWNfb3B0c19pbml0KCZzb3B0cyk7 CisJZHluYW1pY19vcHRzX2luaXQoJmRvcHRzKTsKKworCXNvcHRzLmJ1bXBfZW1wdHlfYWxpZ25l ZF9hbGxvYyA9IHRydWU7CisJc29wdHMubWluX2FsaWdubWVudCA9IHNpemVvZih2b2lkICopOwor CXNvcHRzLm9vbV9zdHJpbmcgPQorCSAgICAiPGplbWFsbG9jPjogRXJyb3IgYWxsb2NhdGluZyBh bGlnbmVkIG1lbW9yeTogb3V0IG9mIG1lbW9yeVxuIjsKKwlzb3B0cy5pbnZhbGlkX2FsaWdubWVu dF9zdHJpbmcgPQorCSAgICAiPGplbWFsbG9jPjogRXJyb3IgYWxsb2NhdGluZyBhbGlnbmVkIG1l bW9yeTogaW52YWxpZCBhbGlnbm1lbnRcbiI7CisKKwlkb3B0cy5yZXN1bHQgPSBtZW1wdHI7CisJ ZG9wdHMubnVtX2l0ZW1zID0gMTsKKwlkb3B0cy5pdGVtX3NpemUgPSBzaXplOworCWRvcHRzLmFs aWdubWVudCA9IGFsaWdubWVudDsKKworCXJldCA9IGltYWxsb2MoJnNvcHRzLCAmZG9wdHMpOwor CWlmIChzb3B0cy5zbG93KSB7CisJCXVpbnRwdHJfdCBhcmdzWzNdID0geyh1aW50cHRyX3QpbWVt cHRyLCAodWludHB0cl90KWFsaWdubWVudCwKKwkJCSh1aW50cHRyX3Qpc2l6ZX07CisJCWhvb2tf aW52b2tlX2FsbG9jKGhvb2tfYWxsb2NfcG9zaXhfbWVtYWxpZ24sICptZW1wdHIsCisJCSAgICAo dWludHB0cl90KXJldCwgYXJncyk7CisJfQorCisJTE9HKCJjb3JlLnBvc2l4X21lbWFsaWduLmV4 aXQiLCAicmVzdWx0OiAlZCwgYWxsb2MgcHRyOiAlcCIsIHJldCwKKwkgICAgKm1lbXB0cik7CisK KwlyZXR1cm4gcmV0OworfQorCitKRU1BTExPQ19FWFBPUlQgSkVNQUxMT0NfQUxMT0NBVE9SIEpF TUFMTE9DX1JFU1RSSUNUX1JFVFVSTgordm9pZCBKRU1BTExPQ19OT1RIUk9XICoKK0pFTUFMTE9D X0FUVFIobWFsbG9jKSBKRU1BTExPQ19BTExPQ19TSVpFKDIpCitqZV9hbGlnbmVkX2FsbG9jKHNp emVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKSB7CisJdm9pZCAqcmV0OworCisJc3RhdGljX29w dHNfdCBzb3B0czsKKwlkeW5hbWljX29wdHNfdCBkb3B0czsKKworCUxPRygiY29yZS5hbGlnbmVk X2FsbG9jLmVudHJ5IiwgImFsaWdubWVudDogJXp1LCBzaXplOiAlenVcbiIsCisJICAgIGFsaWdu bWVudCwgc2l6ZSk7CisKKwlzdGF0aWNfb3B0c19pbml0KCZzb3B0cyk7CisJZHluYW1pY19vcHRz X2luaXQoJmRvcHRzKTsKKworCXNvcHRzLmJ1bXBfZW1wdHlfYWxpZ25lZF9hbGxvYyA9IHRydWU7 CisJc29wdHMubnVsbF9vdXRfcmVzdWx0X29uX2Vycm9yID0gdHJ1ZTsKKwlzb3B0cy5zZXRfZXJy bm9fb25fZXJyb3IgPSB0cnVlOworCXNvcHRzLm1pbl9hbGlnbm1lbnQgPSAxOworCXNvcHRzLm9v bV9zdHJpbmcgPQorCSAgICAiPGplbWFsbG9jPjogRXJyb3IgYWxsb2NhdGluZyBhbGlnbmVkIG1l bW9yeTogb3V0IG9mIG1lbW9yeVxuIjsKKwlzb3B0cy5pbnZhbGlkX2FsaWdubWVudF9zdHJpbmcg PQorCSAgICAiPGplbWFsbG9jPjogRXJyb3IgYWxsb2NhdGluZyBhbGlnbmVkIG1lbW9yeTogaW52 YWxpZCBhbGlnbm1lbnRcbiI7CisKKwlkb3B0cy5yZXN1bHQgPSAmcmV0OworCWRvcHRzLm51bV9p dGVtcyA9IDE7CisJZG9wdHMuaXRlbV9zaXplID0gc2l6ZTsKKwlkb3B0cy5hbGlnbm1lbnQgPSBh bGlnbm1lbnQ7CisKKwlpbWFsbG9jKCZzb3B0cywgJmRvcHRzKTsKKwlpZiAoc29wdHMuc2xvdykg eworCQl1aW50cHRyX3QgYXJnc1szXSA9IHsodWludHB0cl90KWFsaWdubWVudCwgKHVpbnRwdHJf dClzaXplfTsKKwkJaG9va19pbnZva2VfYWxsb2MoaG9va19hbGxvY19hbGlnbmVkX2FsbG9jLCBy ZXQsCisJCSAgICAodWludHB0cl90KXJldCwgYXJncyk7CisJfQorCisJTE9HKCJjb3JlLmFsaWdu ZWRfYWxsb2MuZXhpdCIsICJyZXN1bHQ6ICVwIiwgcmV0KTsKKworCXJldHVybiByZXQ7Cit9CisK K0pFTUFMTE9DX0VYUE9SVCBKRU1BTExPQ19BTExPQ0FUT1IgSkVNQUxMT0NfUkVTVFJJQ1RfUkVU VVJOCit2b2lkIEpFTUFMTE9DX05PVEhST1cgKgorSkVNQUxMT0NfQVRUUihtYWxsb2MpIEpFTUFM TE9DX0FMTE9DX1NJWkUyKDEsIDIpCitqZV9jYWxsb2Moc2l6ZV90IG51bSwgc2l6ZV90IHNpemUp IHsKKwl2b2lkICpyZXQ7CisJc3RhdGljX29wdHNfdCBzb3B0czsKKwlkeW5hbWljX29wdHNfdCBk b3B0czsKKworCUxPRygiY29yZS5jYWxsb2MuZW50cnkiLCAibnVtOiAlenUsIHNpemU6ICV6dVxu IiwgbnVtLCBzaXplKTsKKworCXN0YXRpY19vcHRzX2luaXQoJnNvcHRzKTsKKwlkeW5hbWljX29w dHNfaW5pdCgmZG9wdHMpOworCisJc29wdHMubWF5X292ZXJmbG93ID0gdHJ1ZTsKKwlzb3B0cy5u dWxsX291dF9yZXN1bHRfb25fZXJyb3IgPSB0cnVlOworCXNvcHRzLnNldF9lcnJub19vbl9lcnJv ciA9IHRydWU7CisJc29wdHMub29tX3N0cmluZyA9ICI8amVtYWxsb2M+OiBFcnJvciBpbiBjYWxs b2MoKTogb3V0IG9mIG1lbW9yeVxuIjsKKworCWRvcHRzLnJlc3VsdCA9ICZyZXQ7CisJZG9wdHMu bnVtX2l0ZW1zID0gbnVtOworCWRvcHRzLml0ZW1fc2l6ZSA9IHNpemU7CisJZG9wdHMuemVybyA9 IHRydWU7CisKKwlpbWFsbG9jKCZzb3B0cywgJmRvcHRzKTsKKwlpZiAoc29wdHMuc2xvdykgewor CQl1aW50cHRyX3QgYXJnc1szXSA9IHsodWludHB0cl90KW51bSwgKHVpbnRwdHJfdClzaXplfTsK KwkJaG9va19pbnZva2VfYWxsb2MoaG9va19hbGxvY19jYWxsb2MsIHJldCwgKHVpbnRwdHJfdCly ZXQsIGFyZ3MpOworCX0KKworCUxPRygiY29yZS5jYWxsb2MuZXhpdCIsICJyZXN1bHQ6ICVwIiwg cmV0KTsKKworCXJldHVybiByZXQ7Cit9CisKK0pFTUFMTE9DX0FMV0FZU19JTkxJTkUgdm9pZAor aWZyZWUodHNkX3QgKnRzZCwgdm9pZCAqcHRyLCB0Y2FjaGVfdCAqdGNhY2hlLCBib29sIHNsb3df cGF0aCkgeworCWlmICghc2xvd19wYXRoKSB7CisJCXRzZF9hc3NlcnRfZmFzdCh0c2QpOworCX0K KwljaGVja19lbnRyeV9leGl0X2xvY2tpbmcodHNkX3RzZG4odHNkKSk7CisJaWYgKHRzZF9yZWVu dHJhbmN5X2xldmVsX2dldCh0c2QpICE9IDApIHsKKwkJYXNzZXJ0KHNsb3dfcGF0aCk7CisJfQor CisJYXNzZXJ0KHB0ciAhPSBOVUxMKTsKKwlhc3NlcnQobWFsbG9jX2luaXRpYWxpemVkKCkgfHwg SVNfSU5JVElBTElaRVIpOworCisJZW1hcF9hbGxvY19jdHhfdCBhbGxvY19jdHg7CisJZW1hcF9h bGxvY19jdHhfbG9va3VwKHRzZF90c2RuKHRzZCksICZhcmVuYV9lbWFwX2dsb2JhbCwgcHRyLAor CSAgICAmYWxsb2NfY3R4KTsKKwlhc3NlcnQoYWxsb2NfY3R4LnN6aW5kICE9IFNDX05TSVpFUyk7 CisKKwlzaXplX3QgdXNpemUgPSBzel9pbmRleDJzaXplKGFsbG9jX2N0eC5zemluZCk7CisJaWYg KGNvbmZpZ19wcm9mICYmIG9wdF9wcm9mKSB7CisJCXByb2ZfZnJlZSh0c2QsIHB0ciwgdXNpemUs ICZhbGxvY19jdHgpOworCX0KKworCWlmIChsaWtlbHkoIXNsb3dfcGF0aCkpIHsKKwkJaWRhbGxv Y3RtKHRzZF90c2RuKHRzZCksIHB0ciwgdGNhY2hlLCAmYWxsb2NfY3R4LCBmYWxzZSwKKwkJICAg IGZhbHNlKTsKKwl9IGVsc2UgeworCQlpZiAoY29uZmlnX2ZpbGwgJiYgc2xvd19wYXRoICYmIG9w dF9qdW5rX2ZyZWUpIHsKKwkJCWp1bmtfZnJlZV9jYWxsYmFjayhwdHIsIHVzaXplKTsKKwkJfQor CQlpZGFsbG9jdG0odHNkX3RzZG4odHNkKSwgcHRyLCB0Y2FjaGUsICZhbGxvY19jdHgsIGZhbHNl LAorCQkgICAgdHJ1ZSk7CisJfQorCXRocmVhZF9kYWxsb2NfZXZlbnQodHNkLCB1c2l6ZSk7Cit9 CisKK0pFTUFMTE9DX0FMV0FZU19JTkxJTkUgYm9vbAorbWF5YmVfY2hlY2tfYWxsb2NfY3R4KHRz ZF90ICp0c2QsIHZvaWQgKnB0ciwgZW1hcF9hbGxvY19jdHhfdCAqYWxsb2NfY3R4KSB7CisJaWYg KGNvbmZpZ19vcHRfc2l6ZV9jaGVja3MpIHsKKwkJZW1hcF9hbGxvY19jdHhfdCBkYmdfY3R4Owor CQllbWFwX2FsbG9jX2N0eF9sb29rdXAodHNkX3RzZG4odHNkKSwgJmFyZW5hX2VtYXBfZ2xvYmFs LCBwdHIsCisJCSAgICAmZGJnX2N0eCk7CisJCWlmIChhbGxvY19jdHgtPnN6aW5kICE9IGRiZ19j dHguc3ppbmQpIHsKKwkJCXNhZmV0eV9jaGVja19mYWlsX3NpemVkX2RlYWxsb2MoCisJCQkgICAg LyogY3VycmVudF9kZWFsbG9jICovIHRydWUsIHB0ciwKKwkJCSAgICAvKiB0cnVlX3NpemUgKi8g c3pfc2l6ZTJpbmRleChkYmdfY3R4LnN6aW5kKSwKKwkJCSAgICAvKiBpbnB1dF9zaXplICovIHN6 X3NpemUyaW5kZXgoYWxsb2NfY3R4LT5zemluZCkpOworCQkJcmV0dXJuIHRydWU7CisJCX0KKwkJ aWYgKGFsbG9jX2N0eC0+c2xhYiAhPSBkYmdfY3R4LnNsYWIpIHsKKwkJCXNhZmV0eV9jaGVja19m YWlsKAorCQkJICAgICJJbnRlcm5hbCBoZWFwIGNvcnJ1cHRpb24gZGV0ZWN0ZWQ6ICIKKwkJCSAg ICAibWlzbWF0Y2ggaW4gc2xhYiBiaXQiKTsKKwkJCXJldHVybiB0cnVlOworCQl9CisJfQorCXJl dHVybiBmYWxzZTsKK30KKworSkVNQUxMT0NfQUxXQVlTX0lOTElORSB2b2lkCitpc2ZyZWUodHNk X3QgKnRzZCwgdm9pZCAqcHRyLCBzaXplX3QgdXNpemUsIHRjYWNoZV90ICp0Y2FjaGUsIGJvb2wg c2xvd19wYXRoKSB7CisJaWYgKCFzbG93X3BhdGgpIHsKKwkJdHNkX2Fzc2VydF9mYXN0KHRzZCk7 CisJfQorCWNoZWNrX2VudHJ5X2V4aXRfbG9ja2luZyh0c2RfdHNkbih0c2QpKTsKKwlpZiAodHNk X3JlZW50cmFuY3lfbGV2ZWxfZ2V0KHRzZCkgIT0gMCkgeworCQlhc3NlcnQoc2xvd19wYXRoKTsK Kwl9CisKKwlhc3NlcnQocHRyICE9IE5VTEwpOworCWFzc2VydChtYWxsb2NfaW5pdGlhbGl6ZWQo KSB8fCBJU19JTklUSUFMSVpFUik7CisKKwllbWFwX2FsbG9jX2N0eF90IGFsbG9jX2N0eDsKKwlp ZiAoIWNvbmZpZ19wcm9mKSB7CisJCWFsbG9jX2N0eC5zemluZCA9IHN6X3NpemUyaW5kZXgodXNp emUpOworCQlhbGxvY19jdHguc2xhYiA9IChhbGxvY19jdHguc3ppbmQgPCBTQ19OQklOUyk7CisJ fSBlbHNlIHsKKwkJaWYgKGxpa2VseSghcHJvZl9zYW1wbGVfYWxpZ25lZChwdHIpKSkgeworCQkJ LyoKKwkJCSAqIFdoZW4gdGhlIHB0ciBpcyBub3QgcGFnZSBhbGlnbmVkLCBpdCB3YXMgbm90IHNh bXBsZWQuCisJCQkgKiB1c2l6ZSBjYW4gYmUgdHJ1c3RlZCB0byBkZXRlcm1pbmUgc3ppbmQgYW5k IHNsYWIuCisJCQkgKi8KKwkJCWFsbG9jX2N0eC5zemluZCA9IHN6X3NpemUyaW5kZXgodXNpemUp OworCQkJYWxsb2NfY3R4LnNsYWIgPSAoYWxsb2NfY3R4LnN6aW5kIDwgU0NfTkJJTlMpOworCQl9 IGVsc2UgaWYgKG9wdF9wcm9mKSB7CisJCQllbWFwX2FsbG9jX2N0eF9sb29rdXAodHNkX3RzZG4o dHNkKSwgJmFyZW5hX2VtYXBfZ2xvYmFsLAorCQkJICAgIHB0ciwgJmFsbG9jX2N0eCk7CisKKwkJ CWlmIChjb25maWdfb3B0X3NhZmV0eV9jaGVja3MpIHsKKwkJCQkvKiBTbWFsbCBhbGxvYyBtYXkg aGF2ZSAhc2xhYiAoc2FtcGxlZCkuICovCisJCQkJaWYgKHVubGlrZWx5KGFsbG9jX2N0eC5zemlu ZCAhPQorCQkJCSAgICBzel9zaXplMmluZGV4KHVzaXplKSkpIHsKKwkJCQkJc2FmZXR5X2NoZWNr X2ZhaWxfc2l6ZWRfZGVhbGxvYygKKwkJCQkJICAgIC8qIGN1cnJlbnRfZGVhbGxvYyAqLyB0cnVl LCBwdHIsCisJCQkJCSAgICAvKiB0cnVlX3NpemUgKi8gc3pfaW5kZXgyc2l6ZSgKKwkJCQkJICAg IGFsbG9jX2N0eC5zemluZCksCisJCQkJCSAgICAvKiBpbnB1dF9zaXplICovIHVzaXplKTsKKwkJ CQl9CisJCQl9CisJCX0gZWxzZSB7CisJCQlhbGxvY19jdHguc3ppbmQgPSBzel9zaXplMmluZGV4 KHVzaXplKTsKKwkJCWFsbG9jX2N0eC5zbGFiID0gKGFsbG9jX2N0eC5zemluZCA8IFNDX05CSU5T KTsKKwkJfQorCX0KKwlib29sIGZhaWwgPSBtYXliZV9jaGVja19hbGxvY19jdHgodHNkLCBwdHIs ICZhbGxvY19jdHgpOworCWlmIChmYWlsKSB7CisJCS8qCisJCSAqIFRoaXMgaXMgYSBoZWFwIGNv cnJ1cHRpb24gYnVnLiAgSW4gcmVhbCBsaWZlIHdlJ2xsIGNyYXNoOyBmb3IKKwkJICogdGhlIHVu aXQgdGVzdCB3ZSBqdXN0IHdhbnQgdG8gYXZvaWQgYnJlYWtpbmcgYW55dGhpbmcgdG9vCisJCSAq IGJhZGx5IHRvIGdldCBhIHRlc3QgcmVzdWx0IG91dC4gIExldCdzIGxlYWsgaW5zdGVhZCBvZiB0 cnlpbmcKKwkJICogdG8gZnJlZS4KKwkJICovCisJCXJldHVybjsKKwl9CisKKwlpZiAoY29uZmln X3Byb2YgJiYgb3B0X3Byb2YpIHsKKwkJcHJvZl9mcmVlKHRzZCwgcHRyLCB1c2l6ZSwgJmFsbG9j X2N0eCk7CisJfQorCWlmIChsaWtlbHkoIXNsb3dfcGF0aCkpIHsKKwkJaXNkYWxsb2N0KHRzZF90 c2RuKHRzZCksIHB0ciwgdXNpemUsIHRjYWNoZSwgJmFsbG9jX2N0eCwKKwkJICAgIGZhbHNlKTsK Kwl9IGVsc2UgeworCQlpZiAoY29uZmlnX2ZpbGwgJiYgc2xvd19wYXRoICYmIG9wdF9qdW5rX2Zy ZWUpIHsKKwkJCWp1bmtfZnJlZV9jYWxsYmFjayhwdHIsIHVzaXplKTsKKwkJfQorCQlpc2RhbGxv Y3QodHNkX3RzZG4odHNkKSwgcHRyLCB1c2l6ZSwgdGNhY2hlLCAmYWxsb2NfY3R4LAorCQkgICAg dHJ1ZSk7CisJfQorCXRocmVhZF9kYWxsb2NfZXZlbnQodHNkLCB1c2l6ZSk7Cit9CisKK0pFTUFM TE9DX05PSU5MSU5FCit2b2lkCitmcmVlX2RlZmF1bHQodm9pZCAqcHRyKSB7CisJVVRSQUNFKHB0 ciwgMCwgMCk7CisJaWYgKGxpa2VseShwdHIgIT0gTlVMTCkpIHsKKwkJLyoKKwkJICogV2UgYXZv aWQgc2V0dGluZyB1cCB0c2QgZnVsbHkgKGUuZy4gdGNhY2hlLCBhcmVuYSBiaW5kaW5nKQorCQkg KiBiYXNlZCBvbiBvbmx5IGZyZWUoKSBjYWxscyAtLSBvdGhlciBhY3Rpdml0aWVzIHRyaWdnZXIg dGhlCisJCSAqIG1pbmltYWwgdG8gZnVsbCB0cmFuc2l0aW9uLiAgVGhpcyBpcyBiZWNhdXNlIGZy ZWUoKSBtYXkKKwkJICogaGFwcGVuIGR1cmluZyB0aHJlYWQgc2h1dGRvd24gYWZ0ZXIgdGxzIGRl YWxsb2NhdGlvbjogaWYgYQorCQkgKiB0aHJlYWQgbmV2ZXIgaGFkIGFueSBtYWxsb2MgYWN0aXZp dGllcyB1bnRpbCB0aGVuLCBhCisJCSAqIGZ1bGx5LXNldHVwIHRzZCB3b24ndCBiZSBkZXN0cnVj dGVkIHByb3Blcmx5LgorCQkgKi8KKwkJdHNkX3QgKnRzZCA9IHRzZF9mZXRjaF9taW4oKTsKKwkJ Y2hlY2tfZW50cnlfZXhpdF9sb2NraW5nKHRzZF90c2RuKHRzZCkpOworCisJCWlmIChsaWtlbHko dHNkX2Zhc3QodHNkKSkpIHsKKwkJCXRjYWNoZV90ICp0Y2FjaGUgPSB0Y2FjaGVfZ2V0X2Zyb21f aW5kKHRzZCwKKwkJCSAgICBUQ0FDSEVfSU5EX0FVVE9NQVRJQywgLyogc2xvdyAqLyBmYWxzZSwK KwkJCSAgICAvKiBpc19hbGxvYyAqLyBmYWxzZSk7CisJCQlpZnJlZSh0c2QsIHB0ciwgdGNhY2hl LCAvKiBzbG93ICovIGZhbHNlKTsKKwkJfSBlbHNlIHsKKwkJCXRjYWNoZV90ICp0Y2FjaGUgPSB0 Y2FjaGVfZ2V0X2Zyb21faW5kKHRzZCwKKwkJCSAgICBUQ0FDSEVfSU5EX0FVVE9NQVRJQywgLyog c2xvdyAqLyB0cnVlLAorCQkJICAgIC8qIGlzX2FsbG9jICovIGZhbHNlKTsKKwkJCXVpbnRwdHJf dCBhcmdzX3Jhd1szXSA9IHsodWludHB0cl90KXB0cn07CisJCQlob29rX2ludm9rZV9kYWxsb2Mo aG9va19kYWxsb2NfZnJlZSwgcHRyLCBhcmdzX3Jhdyk7CisJCQlpZnJlZSh0c2QsIHB0ciwgdGNh Y2hlLCAvKiBzbG93ICovIHRydWUpOworCQl9CisKKwkJY2hlY2tfZW50cnlfZXhpdF9sb2NraW5n KHRzZF90c2RuKHRzZCkpOworCX0KK30KKworSkVNQUxMT0NfQUxXQVlTX0lOTElORSBib29sCitm cmVlX2Zhc3RwYXRoX25vbmZhc3RfYWxpZ25lZCh2b2lkICpwdHIsIGJvb2wgY2hlY2tfcHJvZikg eworCS8qCisJICogZnJlZV9mYXN0cGF0aCBkbyBub3QgaGFuZGxlIHR3byB1bmNvbW1vbiBjYXNl czogMSkgc2FtcGxlZCBwcm9maWxlZAorCSAqIG9iamVjdHMgYW5kIDIpIHNhbXBsZWQganVuayAm IHN0YXNoIGZvciB1c2UtYWZ0ZXItZnJlZSBkZXRlY3Rpb24uCisJICogQm90aCBoYXZlIHNwZWNp YWwgYWxpZ25tZW50cyB3aGljaCBhcmUgdXNlZCB0byBlc2NhcGUgdGhlIGZhc3RwYXRoLgorCSAq CisJICogcHJvZl9zYW1wbGUgaXMgcGFnZS1hbGlnbmVkLCB3aGljaCBjb3ZlcnMgdGhlIFVBRiBj aGVjayB3aGVuIGJvdGgKKwkgKiBhcmUgZW5hYmxlZCAodGhlIGFzc2VydGlvbiBiZWxvdykuICBB dm9pZGluZyByZWR1bmRhbnQgY2hlY2tzIHNpbmNlCisJICogdGhpcyBpcyBvbiB0aGUgZmFzdHBh dGggLS0gYXQgbW9zdCBvbmUgcnVudGltZSBicmFuY2ggZnJvbSB0aGlzLgorCSAqLworCWlmIChj b25maWdfZGVidWcgJiYgY2FjaGVfYmluX25vbmZhc3RfYWxpZ25lZChwdHIpKSB7CisJCWFzc2Vy dChwcm9mX3NhbXBsZV9hbGlnbmVkKHB0cikpOworCX0KKworCWlmIChjb25maWdfcHJvZiAmJiBj aGVja19wcm9mKSB7CisJCS8qIFdoZW4gcHJvZiBpcyBlbmFibGVkLCB0aGUgcHJvZl9zYW1wbGUg YWxpZ25tZW50IGlzIGVub3VnaC4gKi8KKwkJaWYgKHByb2Zfc2FtcGxlX2FsaWduZWQocHRyKSkg eworCQkJcmV0dXJuIHRydWU7CisJCX0gZWxzZSB7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKwl9 CisKKwlpZiAoY29uZmlnX3VhZl9kZXRlY3Rpb24pIHsKKwkJaWYgKGNhY2hlX2Jpbl9ub25mYXN0 X2FsaWduZWQocHRyKSkgeworCQkJcmV0dXJuIHRydWU7CisJCX0gZWxzZSB7CisJCQlyZXR1cm4g ZmFsc2U7CisJCX0KKwl9CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKKy8qIFJldHVybnMgd2hldGhl ciBvciBub3QgdGhlIGZyZWUgYXR0ZW1wdCB3YXMgc3VjY2Vzc2Z1bC4gKi8KK0pFTUFMTE9DX0FM V0FZU19JTkxJTkUKK2Jvb2wgZnJlZV9mYXN0cGF0aCh2b2lkICpwdHIsIHNpemVfdCBzaXplLCBi b29sIHNpemVfaGludCkgeworCXRzZF90ICp0c2QgPSB0c2RfZ2V0KGZhbHNlKTsKKwkvKiBUaGUg YnJhbmNoIGdldHMgb3B0aW1pemVkIGF3YXkgdW5sZXNzIHRzZF9nZXRfYWxsb2NhdGVzKCkuICov CisJaWYgKHVubGlrZWx5KHRzZCA9PSBOVUxMKSkgeworCQlyZXR1cm4gZmFsc2U7CisJfQorCS8q CisJICogIFRoZSB0c2RfZmFzdCgpIC8gaW5pdGlhbGl6ZWQgY2hlY2tzIGFyZSBmb2xkZWQgaW50 byB0aGUgYnJhbmNoCisJICogIHRlc3RpbmcgKGRlYWxsb2NhdGVkX2FmdGVyID49IHRocmVzaG9s ZCkgbGF0ZXIgaW4gdGhpcyBmdW5jdGlvbi4KKwkgKiAgVGhlIHRocmVzaG9sZCB3aWxsIGJlIHNl dCB0byAwIHdoZW4gIXRzZF9mYXN0LgorCSAqLworCWFzc2VydCh0c2RfZmFzdCh0c2QpIHx8CisJ ICAgICp0c2RfdGhyZWFkX2RlYWxsb2NhdGVkX25leHRfZXZlbnRfZmFzdHBfZ2V0X3Vuc2FmZSh0 c2QpID09IDApOworCisJZW1hcF9hbGxvY19jdHhfdCBhbGxvY19jdHg7CisJaWYgKCFzaXplX2hp bnQpIHsKKwkJYm9vbCBlcnIgPSBlbWFwX2FsbG9jX2N0eF90cnlfbG9va3VwX2Zhc3QodHNkLAor CQkgICAgJmFyZW5hX2VtYXBfZ2xvYmFsLCBwdHIsICZhbGxvY19jdHgpOworCisJCS8qIE5vdGU6 IHByb2ZpbGVkIG9iamVjdHMgd2lsbCBoYXZlIGFsbG9jX2N0eC5zbGFiIHNldCAqLworCQlpZiAo dW5saWtlbHkoZXJyIHx8ICFhbGxvY19jdHguc2xhYiB8fAorCQkgICAgZnJlZV9mYXN0cGF0aF9u b25mYXN0X2FsaWduZWQocHRyLAorCQkgICAgLyogY2hlY2tfcHJvZiAqLyBmYWxzZSkpKSB7CisJ CQlyZXR1cm4gZmFsc2U7CisJCX0KKwkJYXNzZXJ0KGFsbG9jX2N0eC5zemluZCAhPSBTQ19OU0la RVMpOworCX0gZWxzZSB7CisJCS8qCisJCSAqIENoZWNrIGZvciBib3RoIHNpemVzIHRoYXQgYXJl IHRvbyBsYXJnZSwgYW5kIGZvciBzYW1wbGVkIC8KKwkJICogc3BlY2lhbCBhbGlnbmVkIG9iamVj dHMuICBUaGUgYWxpZ25tZW50IGNoZWNrIHdpbGwgYWxzbyBjaGVjaworCQkgKiBmb3IgbnVsbCBw dHIuCisJCSAqLworCQlpZiAodW5saWtlbHkoc2l6ZSA+IFNDX0xPT0tVUF9NQVhDTEFTUyB8fAor CQkgICAgZnJlZV9mYXN0cGF0aF9ub25mYXN0X2FsaWduZWQocHRyLAorCQkgICAgLyogY2hlY2tf cHJvZiAqLyB0cnVlKSkpIHsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCQlhbGxvY19jdHguc3pp bmQgPSBzel9zaXplMmluZGV4X2xvb2t1cChzaXplKTsKKwkJLyogTWF4IGxvb2t1cCBjbGFzcyBt dXN0IGJlIHNtYWxsLiAqLworCQlhc3NlcnQoYWxsb2NfY3R4LnN6aW5kIDwgU0NfTkJJTlMpOwor CQkvKiBUaGlzIGlzIGEgZGVhZCBzdG9yZSwgZXhjZXB0IHdoZW4gb3B0IHNpemUgY2hlY2tpbmcg aXMgb24uICovCisJCWFsbG9jX2N0eC5zbGFiID0gdHJ1ZTsKKwl9CisJLyoKKwkgKiBDdXJyZW50 bHkgdGhlIGZhc3RwYXRoIG9ubHkgaGFuZGxlcyBzbWFsbCBzaXplcy4gIFRoZSBicmFuY2ggb24K KwkgKiBTQ19MT09LVVBfTUFYQ0xBU1MgbWFrZXMgc3VyZSBvZiBpdC4gIFRoaXMgbGV0cyB1cyBh dm9pZCBjaGVja2luZworCSAqIHRjYWNoZSBzemluZCB1cHBlciBsaW1pdCAoaS5lLiB0Y2FjaGVf bWF4Y2xhc3MpIGFzIHdlbGwuCisJICovCisJYXNzZXJ0KGFsbG9jX2N0eC5zbGFiKTsKKworCXVp bnQ2NF90IGRlYWxsb2NhdGVkLCB0aHJlc2hvbGQ7CisJdGVfZnJlZV9mYXN0cGF0aF9jdHgodHNk LCAmZGVhbGxvY2F0ZWQsICZ0aHJlc2hvbGQpOworCisJc2l6ZV90IHVzaXplID0gc3pfaW5kZXgy c2l6ZShhbGxvY19jdHguc3ppbmQpOworCXVpbnQ2NF90IGRlYWxsb2NhdGVkX2FmdGVyID0gZGVh bGxvY2F0ZWQgKyB1c2l6ZTsKKwkvKgorCSAqIENoZWNrIGZvciBldmVudHMgYW5kIHRzZCBub24t bm9taW5hbCAoZmFzdF90aHJlc2hvbGQgd2lsbCBiZSBzZXQgdG8KKwkgKiAwKSBpbiBhIHNpbmds ZSBicmFuY2guICBOb3RlIHRoYXQgdGhpcyBoYW5kbGVzIHRoZSB1bmluaXRpYWxpemVkIGNhc2UK KwkgKiBhcyB3ZWxsIChUU0QgaW5pdCB3aWxsIGJlIHRyaWdnZXJlZCBvbiB0aGUgbm9uLWZhc3Rw YXRoKS4gIFRoZXJlZm9yZQorCSAqIGFueXRoaW5nIGRlcGVuZHMgb24gYSBmdW5jdGlvbmFsIFRT RCAoZS5nLiB0aGUgYWxsb2NfY3R4IHNhbml0eSBjaGVjaworCSAqIGJlbG93KSBuZWVkcyB0byBi ZSBhZnRlciB0aGlzIGJyYW5jaC4KKwkgKi8KKwlpZiAodW5saWtlbHkoZGVhbGxvY2F0ZWRfYWZ0 ZXIgPj0gdGhyZXNob2xkKSkgeworCQlyZXR1cm4gZmFsc2U7CisJfQorCWFzc2VydCh0c2RfZmFz dCh0c2QpKTsKKwlib29sIGZhaWwgPSBtYXliZV9jaGVja19hbGxvY19jdHgodHNkLCBwdHIsICZh bGxvY19jdHgpOworCWlmIChmYWlsKSB7CisJCS8qIFNlZSB0aGUgY29tbWVudCBpbiBpc2ZyZWUu ICovCisJCXJldHVybiB0cnVlOworCX0KKworCXRjYWNoZV90ICp0Y2FjaGUgPSB0Y2FjaGVfZ2V0 X2Zyb21faW5kKHRzZCwgVENBQ0hFX0lORF9BVVRPTUFUSUMsCisJICAgIC8qIHNsb3cgKi8gZmFs c2UsIC8qIGlzX2FsbG9jICovIGZhbHNlKTsKKwljYWNoZV9iaW5fdCAqYmluID0gJnRjYWNoZS0+ Ymluc1thbGxvY19jdHguc3ppbmRdOworCisJLyoKKwkgKiBJZiBqdW5raW5nIHdlcmUgZW5hYmxl ZCwgdGhpcyBpcyB3aGVyZSB3ZSB3b3VsZCBkbyBpdC4gIEl0J3Mgbm90CisJICogdGhvdWdoLCBz aW5jZSB3ZSBlbnN1cmVkIGFib3ZlIHRoYXQgd2UncmUgb24gdGhlIGZhc3QgcGF0aC4gIEFzc2Vy dAorCSAqIHRoYXQgdG8gZG91YmxlLWNoZWNrLgorCSAqLworCWFzc2VydCghb3B0X2p1bmtfZnJl ZSk7CisKKwlpZiAoIWNhY2hlX2Jpbl9kYWxsb2NfZWFzeShiaW4sIHB0cikpIHsKKwkJcmV0dXJu IGZhbHNlOworCX0KKworCSp0c2RfdGhyZWFkX2RlYWxsb2NhdGVkcF9nZXQodHNkKSA9IGRlYWxs b2NhdGVkX2FmdGVyOworCisJcmV0dXJuIHRydWU7Cit9CisKK0pFTUFMTE9DX0VYUE9SVCB2b2lk IEpFTUFMTE9DX05PVEhST1cKK2plX2ZyZWUodm9pZCAqcHRyKSB7CisJTE9HKCJjb3JlLmZyZWUu ZW50cnkiLCAicHRyOiAlcCIsIHB0cik7CisKKwlpZiAoIWZyZWVfZmFzdHBhdGgocHRyLCAwLCBm YWxzZSkpIHsKKwkJZnJlZV9kZWZhdWx0KHB0cik7CisJfQorCisJTE9HKCJjb3JlLmZyZWUuZXhp dCIsICIiKTsKK30KKworLyoKKyAqIEVuZCBtYWxsb2MoMyktY29tcGF0aWJsZSBmdW5jdGlvbnMu CisgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogQmVnaW4gbm9uLXN0YW5kYXJk IG92ZXJyaWRlIGZ1bmN0aW9ucy4KKyAqLworCisjaWZkZWYgSkVNQUxMT0NfT1ZFUlJJREVfTUVN QUxJR04KK0pFTUFMTE9DX0VYUE9SVCBKRU1BTExPQ19BTExPQ0FUT1IgSkVNQUxMT0NfUkVTVFJJ Q1RfUkVUVVJOCit2b2lkIEpFTUFMTE9DX05PVEhST1cgKgorSkVNQUxMT0NfQVRUUihtYWxsb2Mp CitqZV9tZW1hbGlnbihzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkgeworCXZvaWQgKnJl dDsKKwlzdGF0aWNfb3B0c190IHNvcHRzOworCWR5bmFtaWNfb3B0c190IGRvcHRzOworCisJTE9H KCJjb3JlLm1lbWFsaWduLmVudHJ5IiwgImFsaWdubWVudDogJXp1LCBzaXplOiAlenVcbiIsIGFs aWdubWVudCwKKwkgICAgc2l6ZSk7CisKKwlzdGF0aWNfb3B0c19pbml0KCZzb3B0cyk7CisJZHlu YW1pY19vcHRzX2luaXQoJmRvcHRzKTsKKworCXNvcHRzLm1pbl9hbGlnbm1lbnQgPSAxOworCXNv cHRzLm9vbV9zdHJpbmcgPQorCSAgICAiPGplbWFsbG9jPjogRXJyb3IgYWxsb2NhdGluZyBhbGln bmVkIG1lbW9yeTogb3V0IG9mIG1lbW9yeVxuIjsKKwlzb3B0cy5pbnZhbGlkX2FsaWdubWVudF9z dHJpbmcgPQorCSAgICAiPGplbWFsbG9jPjogRXJyb3IgYWxsb2NhdGluZyBhbGlnbmVkIG1lbW9y eTogaW52YWxpZCBhbGlnbm1lbnRcbiI7CisJc29wdHMubnVsbF9vdXRfcmVzdWx0X29uX2Vycm9y ID0gdHJ1ZTsKKworCWRvcHRzLnJlc3VsdCA9ICZyZXQ7CisJZG9wdHMubnVtX2l0ZW1zID0gMTsK Kwlkb3B0cy5pdGVtX3NpemUgPSBzaXplOworCWRvcHRzLmFsaWdubWVudCA9IGFsaWdubWVudDsK KworCWltYWxsb2MoJnNvcHRzLCAmZG9wdHMpOworCWlmIChzb3B0cy5zbG93KSB7CisJCXVpbnRw dHJfdCBhcmdzWzNdID0ge2FsaWdubWVudCwgc2l6ZX07CisJCWhvb2tfaW52b2tlX2FsbG9jKGhv b2tfYWxsb2NfbWVtYWxpZ24sIHJldCwgKHVpbnRwdHJfdClyZXQsCisJCSAgICBhcmdzKTsKKwl9 CisKKwlMT0coImNvcmUubWVtYWxpZ24uZXhpdCIsICJyZXN1bHQ6ICVwIiwgcmV0KTsKKwlyZXR1 cm4gcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBKRU1BTExPQ19PVkVSUklERV9WQUxMT0MKK0pF TUFMTE9DX0VYUE9SVCBKRU1BTExPQ19BTExPQ0FUT1IgSkVNQUxMT0NfUkVTVFJJQ1RfUkVUVVJO Cit2b2lkIEpFTUFMTE9DX05PVEhST1cgKgorSkVNQUxMT0NfQVRUUihtYWxsb2MpCitqZV92YWxs b2Moc2l6ZV90IHNpemUpIHsKKwl2b2lkICpyZXQ7CisKKwlzdGF0aWNfb3B0c190IHNvcHRzOwor CWR5bmFtaWNfb3B0c190IGRvcHRzOworCisJTE9HKCJjb3JlLnZhbGxvYy5lbnRyeSIsICJzaXpl OiAlenVcbiIsIHNpemUpOworCisJc3RhdGljX29wdHNfaW5pdCgmc29wdHMpOworCWR5bmFtaWNf b3B0c19pbml0KCZkb3B0cyk7CisKKwlzb3B0cy5udWxsX291dF9yZXN1bHRfb25fZXJyb3IgPSB0 cnVlOworCXNvcHRzLm1pbl9hbGlnbm1lbnQgPSBQQUdFOworCXNvcHRzLm9vbV9zdHJpbmcgPQor CSAgICAiPGplbWFsbG9jPjogRXJyb3IgYWxsb2NhdGluZyBhbGlnbmVkIG1lbW9yeTogb3V0IG9m IG1lbW9yeVxuIjsKKwlzb3B0cy5pbnZhbGlkX2FsaWdubWVudF9zdHJpbmcgPQorCSAgICAiPGpl bWFsbG9jPjogRXJyb3IgYWxsb2NhdGluZyBhbGlnbmVkIG1lbW9yeTogaW52YWxpZCBhbGlnbm1l bnRcbiI7CisKKwlkb3B0cy5yZXN1bHQgPSAmcmV0OworCWRvcHRzLm51bV9pdGVtcyA9IDE7CisJ ZG9wdHMuaXRlbV9zaXplID0gc2l6ZTsKKwlkb3B0cy5hbGlnbm1lbnQgPSBQQUdFOworCisJaW1h bGxvYygmc29wdHMsICZkb3B0cyk7CisJaWYgKHNvcHRzLnNsb3cpIHsKKwkJdWludHB0cl90IGFy Z3NbM10gPSB7c2l6ZX07CisJCWhvb2tfaW52b2tlX2FsbG9jKGhvb2tfYWxsb2NfdmFsbG9jLCBy ZXQsICh1aW50cHRyX3QpcmV0LCBhcmdzKTsKKwl9CisKKwlMT0coImNvcmUudmFsbG9jLmV4aXQi LCAicmVzdWx0OiAlcFxuIiwgcmV0KTsKKwlyZXR1cm4gcmV0OworfQorI2VuZGlmCisKKyNpZiBk ZWZpbmVkKEpFTUFMTE9DX0lTX01BTExPQykgJiYgZGVmaW5lZChKRU1BTExPQ19HTElCQ19NQUxM T0NfSE9PSykKKy8qCisgKiBnbGliYyBwcm92aWRlcyB0aGUgUlRMRF9ERUVQQklORCBmbGFnIGZv ciBkbG9wZW4gd2hpY2ggY2FuIG1ha2UgaXQgcG9zc2libGUKKyAqIHRvIGluY29uc2lzdGVudGx5 IHJlZmVyZW5jZSBsaWJjJ3MgbWFsbG9jKDMpLWNvbXBhdGlibGUgZnVuY3Rpb25zCisgKiAoaHR0 cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDkzNTQxKS4KKyAqCisg KiBUaGVzZSBkZWZpbml0aW9ucyBpbnRlcnBvc2UgaG9va3MgaW4gZ2xpYmMuICBUaGUgZnVuY3Rp b25zIGFyZSBhY3R1YWxseQorICogcGFzc2VkIGFuIGV4dHJhIGFyZ3VtZW50IGZvciB0aGUgY2Fs bGVyIHJldHVybiBhZGRyZXNzLCB3aGljaCB3aWxsIGJlCisgKiBpZ25vcmVkLgorICovCisjaW5j bHVkZSA8ZmVhdHVyZXMuaD4gLy8gZGVmaW5lcyBfX0dMSUJDX18gaWYgd2UgYXJlIGNvbXBpbGlu ZyBhZ2FpbnN0IGdsaWJjCisKK0pFTUFMTE9DX0VYUE9SVCB2b2lkICgqX19mcmVlX2hvb2spKHZv aWQgKnB0cikgPSBqZV9mcmVlOworSkVNQUxMT0NfRVhQT1JUIHZvaWQgKigqX19tYWxsb2NfaG9v aykoc2l6ZV90IHNpemUpID0gamVfbWFsbG9jOworSkVNQUxMT0NfRVhQT1JUIHZvaWQgKigqX19y ZWFsbG9jX2hvb2spKHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpID0gamVfcmVhbGxvYzsKKyMgIGlm ZGVmIEpFTUFMTE9DX0dMSUJDX01FTUFMSUdOX0hPT0sKK0pFTUFMTE9DX0VYUE9SVCB2b2lkICoo Kl9fbWVtYWxpZ25faG9vaykoc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUpID0KKyAgICBq ZV9tZW1hbGlnbjsKKyMgIGVuZGlmCisKKyMgIGlmZGVmIF9fR0xJQkNfXworLyoKKyAqIFRvIGVu YWJsZSBzdGF0aWMgbGlua2luZyB3aXRoIGdsaWJjLCB0aGUgbGliYyBzcGVjaWZpYyBtYWxsb2Mg aW50ZXJmYWNlIG11c3QKKyAqIGJlIGltcGxlbWVudGVkIGFsc28sIHNvIG5vbmUgb2YgZ2xpYmMn cyBtYWxsb2MubyBmdW5jdGlvbnMgYXJlIGFkZGVkIHRvIHRoZQorICogbGluay4KKyAqLworIyAg ICBkZWZpbmUgQUxJQVMoamVfZm4pCV9fYXR0cmlidXRlX18oKGFsaWFzICgjamVfZm4pLCB1c2Vk KSkKKy8qIFRvIGZvcmNlIG1hY3JvIGV4cGFuc2lvbiBvZiBqZV8gcHJlZml4IGJlZm9yZSBzdHJp bmdpZmljYXRpb24uICovCisjICAgIGRlZmluZSBQUkVBTElBUyhqZV9mbikJQUxJQVMoamVfZm4p CisjICAgIGlmZGVmIEpFTUFMTE9DX09WRVJSSURFX19fTElCQ19DQUxMT0MKK3ZvaWQgKl9fbGli Y19jYWxsb2Moc2l6ZV90IG4sIHNpemVfdCBzaXplKSBQUkVBTElBUyhqZV9jYWxsb2MpOworIyAg ICBlbmRpZgorIyAgICBpZmRlZiBKRU1BTExPQ19PVkVSUklERV9fX0xJQkNfRlJFRQordm9pZCBf X2xpYmNfZnJlZSh2b2lkKiBwdHIpIFBSRUFMSUFTKGplX2ZyZWUpOworIyAgICBlbmRpZgorIyAg ICBpZmRlZiBKRU1BTExPQ19PVkVSUklERV9fX0xJQkNfTUFMTE9DCit2b2lkICpfX2xpYmNfbWFs bG9jKHNpemVfdCBzaXplKSBQUkVBTElBUyhqZV9tYWxsb2MpOworIyAgICBlbmRpZgorIyAgICBp ZmRlZiBKRU1BTExPQ19PVkVSUklERV9fX0xJQkNfTUVNQUxJR04KK3ZvaWQgKl9fbGliY19tZW1h bGlnbihzaXplX3QgYWxpZ24sIHNpemVfdCBzKSBQUkVBTElBUyhqZV9tZW1hbGlnbik7CisjICAg IGVuZGlmCisjICAgIGlmZGVmIEpFTUFMTE9DX09WRVJSSURFX19fTElCQ19SRUFMTE9DCit2b2lk ICpfX2xpYmNfcmVhbGxvYyh2b2lkKiBwdHIsIHNpemVfdCBzaXplKSBQUkVBTElBUyhqZV9yZWFs bG9jKTsKKyMgICAgZW5kaWYKKyMgICAgaWZkZWYgSkVNQUxMT0NfT1ZFUlJJREVfX19MSUJDX1ZB TExPQwordm9pZCAqX19saWJjX3ZhbGxvYyhzaXplX3Qgc2l6ZSkgUFJFQUxJQVMoamVfdmFsbG9j KTsKKyMgICAgZW5kaWYKKyMgICAgaWZkZWYgSkVNQUxMT0NfT1ZFUlJJREVfX19QT1NJWF9NRU1B TElHTgoraW50IF9fcG9zaXhfbWVtYWxpZ24odm9pZCoqIHIsIHNpemVfdCBhLCBzaXplX3Qgcykg UFJFQUxJQVMoamVfcG9zaXhfbWVtYWxpZ24pOworIyAgICBlbmRpZgorIyAgICB1bmRlZiBQUkVB TElBUworIyAgICB1bmRlZiBBTElBUworIyAgZW5kaWYKKyNlbmRpZgorCisvKgorICogRW5kIG5v bi1zdGFuZGFyZCBvdmVycmlkZSBmdW5jdGlvbnMuCisgKi8KKy8qKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KiovCisvKgorICogQmVnaW4gbm9uLXN0YW5kYXJkIGZ1bmN0aW9ucy4KKyAqLworCitKRU1BTExP Q19BTFdBWVNfSU5MSU5FIHVuc2lnbmVkCittYWxsb2N4X3RjYWNoZV9nZXQoaW50IGZsYWdzKSB7 CisJaWYgKGxpa2VseSgoZmxhZ3MgJiBNQUxMT0NYX1RDQUNIRV9NQVNLKSA9PSAwKSkgeworCQly ZXR1cm4gVENBQ0hFX0lORF9BVVRPTUFUSUM7CisJfSBlbHNlIGlmICgoZmxhZ3MgJiBNQUxMT0NY X1RDQUNIRV9NQVNLKSA9PSBNQUxMT0NYX1RDQUNIRV9OT05FKSB7CisJCXJldHVybiBUQ0FDSEVf SU5EX05PTkU7CisJfSBlbHNlIHsKKwkJcmV0dXJuIE1BTExPQ1hfVENBQ0hFX0dFVChmbGFncyk7 CisJfQorfQorCitKRU1BTExPQ19BTFdBWVNfSU5MSU5FIHVuc2lnbmVkCittYWxsb2N4X2FyZW5h X2dldChpbnQgZmxhZ3MpIHsKKwlpZiAodW5saWtlbHkoKGZsYWdzICYgTUFMTE9DWF9BUkVOQV9N QVNLKSAhPSAwKSkgeworCQlyZXR1cm4gTUFMTE9DWF9BUkVOQV9HRVQoZmxhZ3MpOworCX0gZWxz ZSB7CisJCXJldHVybiBBUkVOQV9JTkRfQVVUT01BVElDOworCX0KK30KKworI2lmZGVmIEpFTUFM TE9DX0VYUEVSSU1FTlRBTF9TTUFMTE9DWF9BUEkKKworI2RlZmluZSBKRU1BTExPQ19TTUFMTE9D WF9DT05DQVRfSEVMUEVSKHgsIHkpIHggIyMgeQorI2RlZmluZSBKRU1BTExPQ19TTUFMTE9DWF9D T05DQVRfSEVMUEVSMih4LCB5KSAgXAorICBKRU1BTExPQ19TTUFMTE9DWF9DT05DQVRfSEVMUEVS KHgsIHkpCisKK3R5cGVkZWYgc3RydWN0IHsKKwl2b2lkICpwdHI7CisJc2l6ZV90IHNpemU7Cit9 IHNtYWxsb2N4X3JldHVybl90OworCitKRU1BTExPQ19FWFBPUlQgSkVNQUxMT0NfQUxMT0NBVE9S IEpFTUFMTE9DX1JFU1RSSUNUX1JFVFVSTgorc21hbGxvY3hfcmV0dXJuX3QgSkVNQUxMT0NfTk9U SFJPVworLyoKKyAqIFRoZSBhdHRyaWJ1dGUgSkVNQUxMT0NfQVRUUihtYWxsb2MpIGNhbm5vdCBi ZSB1c2VkIGR1ZSB0bzoKKyAqICAtIGh0dHBzOi8vZ2NjLmdudS5vcmcvYnVnemlsbGEvc2hvd19i dWcuY2dpP2lkPTg2NDg4CisgKi8KK0pFTUFMTE9DX1NNQUxMT0NYX0NPTkNBVF9IRUxQRVIyKGpl X3NtYWxsb2N4XywgSkVNQUxMT0NfVkVSU0lPTl9HSURfSURFTlQpCisgIChzaXplX3Qgc2l6ZSwg aW50IGZsYWdzKSB7CisJLyoKKwkgKiBOb3RlOiB0aGUgYXR0cmlidXRlIEpFTUFMTE9DX0FMTE9D X1NJWkUoMSkgY2Fubm90IGJlCisJICogdXNlZCBoZXJlIGJlY2F1c2UgaXQgbWFrZXMgd3JpdGlu ZyBiZXlvbmQgdGhlIGBzaXplYAorCSAqIG9mIHRoZSBgcHRyYCB1bmRlZmluZWQgYmVoYXZpb3Is IGJ1dCB0aGUgb2JqZWN0aXZlCisJICogb2YgdGhpcyBmdW5jdGlvbiBpcyB0byBhbGxvdyB3cml0 aW5nIGJleW9uZCBgc2l6ZWAKKwkgKiB1cCB0byBgc21hbGxvY3hfcmV0dXJuX3Q6OnNpemVgLgor CSAqLworCXNtYWxsb2N4X3JldHVybl90IHJldDsKKwlzdGF0aWNfb3B0c190IHNvcHRzOworCWR5 bmFtaWNfb3B0c190IGRvcHRzOworCisJTE9HKCJjb3JlLnNtYWxsb2N4LmVudHJ5IiwgInNpemU6 ICV6dSwgZmxhZ3M6ICVkIiwgc2l6ZSwgZmxhZ3MpOworCisJc3RhdGljX29wdHNfaW5pdCgmc29w dHMpOworCWR5bmFtaWNfb3B0c19pbml0KCZkb3B0cyk7CisKKwlzb3B0cy5hc3NlcnRfbm9uZW1w dHlfYWxsb2MgPSB0cnVlOworCXNvcHRzLm51bGxfb3V0X3Jlc3VsdF9vbl9lcnJvciA9IHRydWU7 CisJc29wdHMub29tX3N0cmluZyA9ICI8amVtYWxsb2M+OiBFcnJvciBpbiBtYWxsb2N4KCk6IG91 dCBvZiBtZW1vcnlcbiI7CisJc29wdHMudXNpemUgPSB0cnVlOworCisJZG9wdHMucmVzdWx0ID0g JnJldC5wdHI7CisJZG9wdHMubnVtX2l0ZW1zID0gMTsKKwlkb3B0cy5pdGVtX3NpemUgPSBzaXpl OworCWlmICh1bmxpa2VseShmbGFncyAhPSAwKSkgeworCQlkb3B0cy5hbGlnbm1lbnQgPSBNQUxM T0NYX0FMSUdOX0dFVChmbGFncyk7CisJCWRvcHRzLnplcm8gPSBNQUxMT0NYX1pFUk9fR0VUKGZs YWdzKTsKKwkJZG9wdHMudGNhY2hlX2luZCA9IG1hbGxvY3hfdGNhY2hlX2dldChmbGFncyk7CisJ CWRvcHRzLmFyZW5hX2luZCA9IG1hbGxvY3hfYXJlbmFfZ2V0KGZsYWdzKTsKKwl9CisKKwlpbWFs bG9jKCZzb3B0cywgJmRvcHRzKTsKKwlhc3NlcnQoZG9wdHMudXNpemUgPT0gamVfbmFsbG9jeChz aXplLCBmbGFncykpOworCXJldC5zaXplID0gZG9wdHMudXNpemU7CisKKwlMT0coImNvcmUuc21h bGxvY3guZXhpdCIsICJyZXN1bHQ6ICVwLCBzaXplOiAlenUiLCByZXQucHRyLCByZXQuc2l6ZSk7 CisJcmV0dXJuIHJldDsKK30KKyN1bmRlZiBKRU1BTExPQ19TTUFMTE9DWF9DT05DQVRfSEVMUEVS CisjdW5kZWYgSkVNQUxMT0NfU01BTExPQ1hfQ09OQ0FUX0hFTFBFUjIKKyNlbmRpZgorCitKRU1B TExPQ19FWFBPUlQgSkVNQUxMT0NfQUxMT0NBVE9SIEpFTUFMTE9DX1JFU1RSSUNUX1JFVFVSTgor dm9pZCBKRU1BTExPQ19OT1RIUk9XICoKK0pFTUFMTE9DX0FUVFIobWFsbG9jKSBKRU1BTExPQ19B TExPQ19TSVpFKDEpCitqZV9tYWxsb2N4KHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpIHsKKwl2b2lk ICpyZXQ7CisJc3RhdGljX29wdHNfdCBzb3B0czsKKwlkeW5hbWljX29wdHNfdCBkb3B0czsKKwor CUxPRygiY29yZS5tYWxsb2N4LmVudHJ5IiwgInNpemU6ICV6dSwgZmxhZ3M6ICVkIiwgc2l6ZSwg ZmxhZ3MpOworCisJc3RhdGljX29wdHNfaW5pdCgmc29wdHMpOworCWR5bmFtaWNfb3B0c19pbml0 KCZkb3B0cyk7CisKKwlzb3B0cy5hc3NlcnRfbm9uZW1wdHlfYWxsb2MgPSB0cnVlOworCXNvcHRz Lm51bGxfb3V0X3Jlc3VsdF9vbl9lcnJvciA9IHRydWU7CisJc29wdHMub29tX3N0cmluZyA9ICI8 amVtYWxsb2M+OiBFcnJvciBpbiBtYWxsb2N4KCk6IG91dCBvZiBtZW1vcnlcbiI7CisKKwlkb3B0 cy5yZXN1bHQgPSAmcmV0OworCWRvcHRzLm51bV9pdGVtcyA9IDE7CisJZG9wdHMuaXRlbV9zaXpl ID0gc2l6ZTsKKwlpZiAodW5saWtlbHkoZmxhZ3MgIT0gMCkpIHsKKwkJZG9wdHMuYWxpZ25tZW50 ID0gTUFMTE9DWF9BTElHTl9HRVQoZmxhZ3MpOworCQlkb3B0cy56ZXJvID0gTUFMTE9DWF9aRVJP X0dFVChmbGFncyk7CisJCWRvcHRzLnRjYWNoZV9pbmQgPSBtYWxsb2N4X3RjYWNoZV9nZXQoZmxh Z3MpOworCQlkb3B0cy5hcmVuYV9pbmQgPSBtYWxsb2N4X2FyZW5hX2dldChmbGFncyk7CisJfQor CisJaW1hbGxvYygmc29wdHMsICZkb3B0cyk7CisJaWYgKHNvcHRzLnNsb3cpIHsKKwkJdWludHB0 cl90IGFyZ3NbM10gPSB7c2l6ZSwgZmxhZ3N9OworCQlob29rX2ludm9rZV9hbGxvYyhob29rX2Fs bG9jX21hbGxvY3gsIHJldCwgKHVpbnRwdHJfdClyZXQsCisJCSAgICBhcmdzKTsKKwl9CisKKwlM T0coImNvcmUubWFsbG9jeC5leGl0IiwgInJlc3VsdDogJXAiLCByZXQpOworCXJldHVybiByZXQ7 Cit9CisKK3N0YXRpYyB2b2lkICoKK2lyYWxsb2N4X3Byb2Zfc2FtcGxlKHRzZG5fdCAqdHNkbiwg dm9pZCAqb2xkX3B0ciwgc2l6ZV90IG9sZF91c2l6ZSwKKyAgICBzaXplX3QgdXNpemUsIHNpemVf dCBhbGlnbm1lbnQsIGJvb2wgemVybywgdGNhY2hlX3QgKnRjYWNoZSwgYXJlbmFfdCAqYXJlbmEs CisgICAgcHJvZl90Y3R4X3QgKnRjdHgsIGhvb2tfcmFsbG9jX2FyZ3NfdCAqaG9va19hcmdzKSB7 CisJdm9pZCAqcDsKKworCWlmICh0Y3R4ID09IE5VTEwpIHsKKwkJcmV0dXJuIE5VTEw7CisJfQor CisJYWxpZ25tZW50ID0gcHJvZl9zYW1wbGVfYWxpZ24oYWxpZ25tZW50KTsKKwlpZiAodXNpemUg PD0gU0NfU01BTExfTUFYQ0xBU1MpIHsKKwkJcCA9IGlyYWxsb2N0KHRzZG4sIG9sZF9wdHIsIG9s ZF91c2l6ZSwKKwkJICAgIFNDX0xBUkdFX01JTkNMQVNTLCBhbGlnbm1lbnQsIHplcm8sIHRjYWNo ZSwKKwkJICAgIGFyZW5hLCBob29rX2FyZ3MpOworCQlpZiAocCA9PSBOVUxMKSB7CisJCQlyZXR1 cm4gTlVMTDsKKwkJfQorCQlhcmVuYV9wcm9mX3Byb21vdGUodHNkbiwgcCwgdXNpemUpOworCX0g ZWxzZSB7CisJCXAgPSBpcmFsbG9jdCh0c2RuLCBvbGRfcHRyLCBvbGRfdXNpemUsIHVzaXplLCBh bGlnbm1lbnQsIHplcm8sCisJCSAgICB0Y2FjaGUsIGFyZW5hLCBob29rX2FyZ3MpOworCX0KKwlh c3NlcnQocHJvZl9zYW1wbGVfYWxpZ25lZChwKSk7CisKKwlyZXR1cm4gcDsKK30KKworSkVNQUxM T0NfQUxXQVlTX0lOTElORSB2b2lkICoKK2lyYWxsb2N4X3Byb2YodHNkX3QgKnRzZCwgdm9pZCAq b2xkX3B0ciwgc2l6ZV90IG9sZF91c2l6ZSwgc2l6ZV90IHNpemUsCisgICAgc2l6ZV90IGFsaWdu bWVudCwgc2l6ZV90IHVzaXplLCBib29sIHplcm8sIHRjYWNoZV90ICp0Y2FjaGUsCisgICAgYXJl bmFfdCAqYXJlbmEsIGVtYXBfYWxsb2NfY3R4X3QgKmFsbG9jX2N0eCwKKyAgICBob29rX3JhbGxv Y19hcmdzX3QgKmhvb2tfYXJncykgeworCXByb2ZfaW5mb190IG9sZF9wcm9mX2luZm87CisJcHJv Zl9pbmZvX2dldF9hbmRfcmVzZXRfcmVjZW50KHRzZCwgb2xkX3B0ciwgYWxsb2NfY3R4LCAmb2xk X3Byb2ZfaW5mbyk7CisJYm9vbCBwcm9mX2FjdGl2ZSA9IHByb2ZfYWN0aXZlX2dldF91bmxvY2tl ZCgpOworCWJvb2wgc2FtcGxlX2V2ZW50ID0gdGVfcHJvZl9zYW1wbGVfZXZlbnRfbG9va2FoZWFk KHRzZCwgdXNpemUpOworCXByb2ZfdGN0eF90ICp0Y3R4ID0gcHJvZl9hbGxvY19wcmVwKHRzZCwg cHJvZl9hY3RpdmUsIHNhbXBsZV9ldmVudCk7CisJdm9pZCAqcDsKKwlpZiAodW5saWtlbHkoKHVp bnRwdHJfdCl0Y3R4ICE9ICh1aW50cHRyX3QpMVUpKSB7CisJCXAgPSBpcmFsbG9jeF9wcm9mX3Nh bXBsZSh0c2RfdHNkbih0c2QpLCBvbGRfcHRyLCBvbGRfdXNpemUsCisJCSAgICB1c2l6ZSwgYWxp Z25tZW50LCB6ZXJvLCB0Y2FjaGUsIGFyZW5hLCB0Y3R4LCBob29rX2FyZ3MpOworCX0gZWxzZSB7 CisJCXAgPSBpcmFsbG9jdCh0c2RfdHNkbih0c2QpLCBvbGRfcHRyLCBvbGRfdXNpemUsIHNpemUs IGFsaWdubWVudCwKKwkJICAgIHplcm8sIHRjYWNoZSwgYXJlbmEsIGhvb2tfYXJncyk7CisJfQor CWlmICh1bmxpa2VseShwID09IE5VTEwpKSB7CisJCXByb2ZfYWxsb2Nfcm9sbGJhY2sodHNkLCB0 Y3R4KTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCWFzc2VydCh1c2l6ZSA9PSBpc2FsbG9jKHRzZF90 c2RuKHRzZCksIHApKTsKKwlwcm9mX3JlYWxsb2ModHNkLCBwLCBzaXplLCB1c2l6ZSwgdGN0eCwg cHJvZl9hY3RpdmUsIG9sZF9wdHIsCisJICAgIG9sZF91c2l6ZSwgJm9sZF9wcm9mX2luZm8sIHNh bXBsZV9ldmVudCk7CisKKwlyZXR1cm4gcDsKK30KKworc3RhdGljIHZvaWQgKgorZG9fcmFsbG9j eCh2b2lkICpwdHIsIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MsIGJvb2wgaXNfcmVhbGxvYykgewor CXZvaWQgKnA7CisJdHNkX3QgKnRzZDsKKwlzaXplX3QgdXNpemU7CisJc2l6ZV90IG9sZF91c2l6 ZTsKKwlzaXplX3QgYWxpZ25tZW50ID0gTUFMTE9DWF9BTElHTl9HRVQoZmxhZ3MpOworCWFyZW5h X3QgKmFyZW5hOworCisJYXNzZXJ0KHB0ciAhPSBOVUxMKTsKKwlhc3NlcnQoc2l6ZSAhPSAwKTsK Kwlhc3NlcnQobWFsbG9jX2luaXRpYWxpemVkKCkgfHwgSVNfSU5JVElBTElaRVIpOworCXRzZCA9 IHRzZF9mZXRjaCgpOworCWNoZWNrX2VudHJ5X2V4aXRfbG9ja2luZyh0c2RfdHNkbih0c2QpKTsK KworCWJvb2wgemVybyA9IHplcm9fZ2V0KE1BTExPQ1hfWkVST19HRVQoZmxhZ3MpLCAvKiBzbG93 ICovIHRydWUpOworCisJdW5zaWduZWQgYXJlbmFfaW5kID0gbWFsbG9jeF9hcmVuYV9nZXQoZmxh Z3MpOworCWlmIChhcmVuYV9nZXRfZnJvbV9pbmQodHNkLCBhcmVuYV9pbmQsICZhcmVuYSkpIHsK KwkJZ290byBsYWJlbF9vb207CisJfQorCisJdW5zaWduZWQgdGNhY2hlX2luZCA9IG1hbGxvY3hf dGNhY2hlX2dldChmbGFncyk7CisJdGNhY2hlX3QgKnRjYWNoZSA9IHRjYWNoZV9nZXRfZnJvbV9p bmQodHNkLCB0Y2FjaGVfaW5kLAorCSAgICAvKiBzbG93ICovIHRydWUsIC8qIGlzX2FsbG9jICov IHRydWUpOworCisJZW1hcF9hbGxvY19jdHhfdCBhbGxvY19jdHg7CisJZW1hcF9hbGxvY19jdHhf bG9va3VwKHRzZF90c2RuKHRzZCksICZhcmVuYV9lbWFwX2dsb2JhbCwgcHRyLAorCSAgICAmYWxs b2NfY3R4KTsKKwlhc3NlcnQoYWxsb2NfY3R4LnN6aW5kICE9IFNDX05TSVpFUyk7CisJb2xkX3Vz aXplID0gc3pfaW5kZXgyc2l6ZShhbGxvY19jdHguc3ppbmQpOworCWFzc2VydChvbGRfdXNpemUg PT0gaXNhbGxvYyh0c2RfdHNkbih0c2QpLCBwdHIpKTsKKwlpZiAoYWxpZ25lZF91c2l6ZV9nZXQo c2l6ZSwgYWxpZ25tZW50LCAmdXNpemUsIE5VTEwsIGZhbHNlKSkgeworCQlnb3RvIGxhYmVsX29v bTsKKwl9CisKKwlob29rX3JhbGxvY19hcmdzX3QgaG9va19hcmdzID0ge2lzX3JlYWxsb2MsIHso dWludHB0cl90KXB0ciwgc2l6ZSwKKwkJZmxhZ3MsIDB9fTsKKwlpZiAoY29uZmlnX3Byb2YgJiYg b3B0X3Byb2YpIHsKKwkJcCA9IGlyYWxsb2N4X3Byb2YodHNkLCBwdHIsIG9sZF91c2l6ZSwgc2l6 ZSwgYWxpZ25tZW50LCB1c2l6ZSwKKwkJICAgIHplcm8sIHRjYWNoZSwgYXJlbmEsICZhbGxvY19j dHgsICZob29rX2FyZ3MpOworCQlpZiAodW5saWtlbHkocCA9PSBOVUxMKSkgeworCQkJZ290byBs YWJlbF9vb207CisJCX0KKwl9IGVsc2UgeworCQlwID0gaXJhbGxvY3QodHNkX3RzZG4odHNkKSwg cHRyLCBvbGRfdXNpemUsIHNpemUsIGFsaWdubWVudCwKKwkJICAgIHplcm8sIHRjYWNoZSwgYXJl bmEsICZob29rX2FyZ3MpOworCQlpZiAodW5saWtlbHkocCA9PSBOVUxMKSkgeworCQkJZ290byBs YWJlbF9vb207CisJCX0KKwkJYXNzZXJ0KHVzaXplID09IGlzYWxsb2ModHNkX3RzZG4odHNkKSwg cCkpOworCX0KKwlhc3NlcnQoYWxpZ25tZW50ID09IDAgfHwgKCh1aW50cHRyX3QpcCAmIChhbGln bm1lbnQgLSAxKSkgPT0gWlUoMCkpOworCXRocmVhZF9hbGxvY19ldmVudCh0c2QsIHVzaXplKTsK Kwl0aHJlYWRfZGFsbG9jX2V2ZW50KHRzZCwgb2xkX3VzaXplKTsKKworCVVUUkFDRShwdHIsIHNp emUsIHApOworCWNoZWNrX2VudHJ5X2V4aXRfbG9ja2luZyh0c2RfdHNkbih0c2QpKTsKKworCWlm IChjb25maWdfZmlsbCAmJiB1bmxpa2VseShvcHRfanVua19hbGxvYykgJiYgdXNpemUgPiBvbGRf dXNpemUKKwkgICAgJiYgIXplcm8pIHsKKwkJc2l6ZV90IGV4Y2Vzc19sZW4gPSB1c2l6ZSAtIG9s ZF91c2l6ZTsKKwkJdm9pZCAqZXhjZXNzX3N0YXJ0ID0gKHZvaWQgKikoKHVpbnRwdHJfdClwICsg b2xkX3VzaXplKTsKKwkJanVua19hbGxvY19jYWxsYmFjayhleGNlc3Nfc3RhcnQsIGV4Y2Vzc19s ZW4pOworCX0KKworCXJldHVybiBwOworbGFiZWxfb29tOgorCWlmIChjb25maWdfeG1hbGxvYyAm JiB1bmxpa2VseShvcHRfeG1hbGxvYykpIHsKKwkJbWFsbG9jX3dyaXRlKCI8amVtYWxsb2M+OiBF cnJvciBpbiByYWxsb2N4KCk6IG91dCBvZiBtZW1vcnlcbiIpOworCQlhYm9ydCgpOworCX0KKwlV VFJBQ0UocHRyLCBzaXplLCAwKTsKKwljaGVja19lbnRyeV9leGl0X2xvY2tpbmcodHNkX3RzZG4o dHNkKSk7CisKKwlyZXR1cm4gTlVMTDsKK30KKworSkVNQUxMT0NfRVhQT1JUIEpFTUFMTE9DX0FM TE9DQVRPUiBKRU1BTExPQ19SRVNUUklDVF9SRVRVUk4KK3ZvaWQgSkVNQUxMT0NfTk9USFJPVyAq CitKRU1BTExPQ19BTExPQ19TSVpFKDIpCitqZV9yYWxsb2N4KHZvaWQgKnB0ciwgc2l6ZV90IHNp emUsIGludCBmbGFncykgeworCUxPRygiY29yZS5yYWxsb2N4LmVudHJ5IiwgInB0cjogJXAsIHNp emU6ICV6dSwgZmxhZ3M6ICVkIiwgcHRyLAorCSAgICBzaXplLCBmbGFncyk7CisJdm9pZCAqcmV0 ID0gZG9fcmFsbG9jeChwdHIsIHNpemUsIGZsYWdzLCBmYWxzZSk7CisJTE9HKCJjb3JlLnJhbGxv Y3guZXhpdCIsICJyZXN1bHQ6ICVwIiwgcmV0KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMg dm9pZCAqCitkb19yZWFsbG9jX25vbm51bGxfemVybyh2b2lkICpwdHIpIHsKKwlpZiAoY29uZmln X3N0YXRzKSB7CisJCWF0b21pY19mZXRjaF9hZGRfenUoJnplcm9fcmVhbGxvY19jb3VudCwgMSwg QVRPTUlDX1JFTEFYRUQpOworCX0KKwlpZiAob3B0X3plcm9fcmVhbGxvY19hY3Rpb24gPT0gemVy b19yZWFsbG9jX2FjdGlvbl9hbGxvYykgeworCQkvKgorCQkgKiBUaGUgdXNlciBtaWdodCBoYXZl IGdvdHRlbiBhbiBhbGxvYyBzZXR0aW5nIHdoaWxlIGV4cGVjdGluZyBhCisJCSAqIGZyZWUgc2V0 dGluZy4gIElmIHRoYXQncyB0aGUgY2FzZSwgd2UgYXQgbGVhc3QgdHJ5IHRvCisJCSAqIHJlZHVj ZSB0aGUgaGFybSwgYW5kIHR1cm4gb2ZmIHRoZSB0Y2FjaGUgd2hpbGUgYWxsb2NhdGluZywgc28K KwkJICogdGhhdCB3ZSdsbCBnZXQgYSB0cnVlIGZpcnN0IGZpdC4KKwkJICovCisJCXJldHVybiBk b19yYWxsb2N4KHB0ciwgMSwgTUFMTE9DWF9UQ0FDSEVfTk9ORSwgdHJ1ZSk7CisJfSBlbHNlIGlm IChvcHRfemVyb19yZWFsbG9jX2FjdGlvbiA9PSB6ZXJvX3JlYWxsb2NfYWN0aW9uX2ZyZWUpIHsK KwkJVVRSQUNFKHB0ciwgMCwgMCk7CisJCXRzZF90ICp0c2QgPSB0c2RfZmV0Y2goKTsKKwkJY2hl Y2tfZW50cnlfZXhpdF9sb2NraW5nKHRzZF90c2RuKHRzZCkpOworCisJCXRjYWNoZV90ICp0Y2Fj aGUgPSB0Y2FjaGVfZ2V0X2Zyb21faW5kKHRzZCwKKwkJICAgIFRDQUNIRV9JTkRfQVVUT01BVElD LCAvKiBzbG93ICovIHRydWUsCisJCSAgICAvKiBpc19hbGxvYyAqLyBmYWxzZSk7CisJCXVpbnRw dHJfdCBhcmdzWzNdID0geyh1aW50cHRyX3QpcHRyLCAwfTsKKwkJaG9va19pbnZva2VfZGFsbG9j KGhvb2tfZGFsbG9jX3JlYWxsb2MsIHB0ciwgYXJncyk7CisJCWlmcmVlKHRzZCwgcHRyLCB0Y2Fj aGUsIHRydWUpOworCisJCWNoZWNrX2VudHJ5X2V4aXRfbG9ja2luZyh0c2RfdHNkbih0c2QpKTsK KwkJcmV0dXJuIE5VTEw7CisJfSBlbHNlIHsKKwkJc2FmZXR5X2NoZWNrX2ZhaWwoIkNhbGxlZCBy ZWFsbG9jKG5vbi1udWxsLXB0ciwgMCkgd2l0aCAiCisJCSAgICAiemVyb19yZWFsbG9jOmFib3J0 IHNldFxuIik7CisJCS8qIEluIHJlYWwgY29kZSwgdGhpcyB3aWxsIG5ldmVyIHJ1bjsgdGhlIHNh ZmV0eSBjaGVjayBmYWlsdXJlCisJCSAqIHdpbGwgY2FsbCBhYm9ydC4gIEluIHRoZSB1bml0IHRl c3QsIHdlIGp1c3Qgd2FudCB0byBiYWlsIG91dAorCQkgKiB3aXRob3V0IGNvcnJ1cHRpbmcgaW50 ZXJuYWwgc3RhdGUgdGhhdCB0aGUgdGVzdCBuZWVkcyB0bworCQkgKiBmaW5pc2guCisJCSAqLwor CQlyZXR1cm4gTlVMTDsKKwl9Cit9CisKK0pFTUFMTE9DX0VYUE9SVCBKRU1BTExPQ19BTExPQ0FU T1IgSkVNQUxMT0NfUkVTVFJJQ1RfUkVUVVJOCit2b2lkIEpFTUFMTE9DX05PVEhST1cgKgorSkVN QUxMT0NfQUxMT0NfU0laRSgyKQoramVfcmVhbGxvYyh2b2lkICpwdHIsIHNpemVfdCBzaXplKSB7 CisJTE9HKCJjb3JlLnJlYWxsb2MuZW50cnkiLCAicHRyOiAlcCwgc2l6ZTogJXp1XG4iLCBwdHIs IHNpemUpOworCisJaWYgKGxpa2VseShwdHIgIT0gTlVMTCAmJiBzaXplICE9IDApKSB7CisJCXZv aWQgKnJldCA9IGRvX3JhbGxvY3gocHRyLCBzaXplLCAwLCB0cnVlKTsKKwkJTE9HKCJjb3JlLnJl YWxsb2MuZXhpdCIsICJyZXN1bHQ6ICVwIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9IGVsc2Ug aWYgKHB0ciAhPSBOVUxMICYmIHNpemUgPT0gMCkgeworCQl2b2lkICpyZXQgPSBkb19yZWFsbG9j X25vbm51bGxfemVybyhwdHIpOworCQlMT0coImNvcmUucmVhbGxvYy5leGl0IiwgInJlc3VsdDog JXAiLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0gZWxzZSB7CisJCS8qIHJlYWxsb2MoTlVMTCwg c2l6ZSkgaXMgZXF1aXZhbGVudCB0byBtYWxsb2Moc2l6ZSkuICovCisJCXZvaWQgKnJldDsKKwor CQlzdGF0aWNfb3B0c190IHNvcHRzOworCQlkeW5hbWljX29wdHNfdCBkb3B0czsKKworCQlzdGF0 aWNfb3B0c19pbml0KCZzb3B0cyk7CisJCWR5bmFtaWNfb3B0c19pbml0KCZkb3B0cyk7CisKKwkJ c29wdHMubnVsbF9vdXRfcmVzdWx0X29uX2Vycm9yID0gdHJ1ZTsKKwkJc29wdHMuc2V0X2Vycm5v X29uX2Vycm9yID0gdHJ1ZTsKKwkJc29wdHMub29tX3N0cmluZyA9CisJCSAgICAiPGplbWFsbG9j PjogRXJyb3IgaW4gcmVhbGxvYygpOiBvdXQgb2YgbWVtb3J5XG4iOworCisJCWRvcHRzLnJlc3Vs dCA9ICZyZXQ7CisJCWRvcHRzLm51bV9pdGVtcyA9IDE7CisJCWRvcHRzLml0ZW1fc2l6ZSA9IHNp emU7CisKKwkJaW1hbGxvYygmc29wdHMsICZkb3B0cyk7CisJCWlmIChzb3B0cy5zbG93KSB7CisJ CQl1aW50cHRyX3QgYXJnc1szXSA9IHsodWludHB0cl90KXB0ciwgc2l6ZX07CisJCQlob29rX2lu dm9rZV9hbGxvYyhob29rX2FsbG9jX3JlYWxsb2MsIHJldCwKKwkJCSAgICAodWludHB0cl90KXJl dCwgYXJncyk7CisJCX0KKwkJTE9HKCJjb3JlLnJlYWxsb2MuZXhpdCIsICJyZXN1bHQ6ICVwIiwg cmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9Cit9CisKK0pFTUFMTE9DX0FMV0FZU19JTkxJTkUgc2l6 ZV90CitpeGFsbG9jeF9oZWxwZXIodHNkbl90ICp0c2RuLCB2b2lkICpwdHIsIHNpemVfdCBvbGRf dXNpemUsIHNpemVfdCBzaXplLAorICAgIHNpemVfdCBleHRyYSwgc2l6ZV90IGFsaWdubWVudCwg Ym9vbCB6ZXJvKSB7CisJc2l6ZV90IG5ld3NpemU7CisKKwlpZiAoaXhhbGxvYyh0c2RuLCBwdHIs IG9sZF91c2l6ZSwgc2l6ZSwgZXh0cmEsIGFsaWdubWVudCwgemVybywKKwkgICAgJm5ld3NpemUp KSB7CisJCXJldHVybiBvbGRfdXNpemU7CisJfQorCisJcmV0dXJuIG5ld3NpemU7Cit9CisKK3N0 YXRpYyBzaXplX3QKK2l4YWxsb2N4X3Byb2Zfc2FtcGxlKHRzZG5fdCAqdHNkbiwgdm9pZCAqcHRy LCBzaXplX3Qgb2xkX3VzaXplLCBzaXplX3Qgc2l6ZSwKKyAgICBzaXplX3QgZXh0cmEsIHNpemVf dCBhbGlnbm1lbnQsIGJvb2wgemVybywgcHJvZl90Y3R4X3QgKnRjdHgpIHsKKwkvKiBTYW1wbGVk IGFsbG9jYXRpb24gbmVlZHMgdG8gYmUgcGFnZSBhbGlnbmVkLiAqLworCWlmICh0Y3R4ID09IE5V TEwgfHwgIXByb2Zfc2FtcGxlX2FsaWduZWQocHRyKSkgeworCQlyZXR1cm4gb2xkX3VzaXplOwor CX0KKworCXJldHVybiBpeGFsbG9jeF9oZWxwZXIodHNkbiwgcHRyLCBvbGRfdXNpemUsIHNpemUs IGV4dHJhLCBhbGlnbm1lbnQsCisJICAgIHplcm8pOworfQorCitKRU1BTExPQ19BTFdBWVNfSU5M SU5FIHNpemVfdAoraXhhbGxvY3hfcHJvZih0c2RfdCAqdHNkLCB2b2lkICpwdHIsIHNpemVfdCBv bGRfdXNpemUsIHNpemVfdCBzaXplLAorICAgIHNpemVfdCBleHRyYSwgc2l6ZV90IGFsaWdubWVu dCwgYm9vbCB6ZXJvLCBlbWFwX2FsbG9jX2N0eF90ICphbGxvY19jdHgpIHsKKwkvKgorCSAqIG9s ZF9wcm9mX2luZm8gaXMgb25seSB1c2VkIGZvciBhc3NlcnRpbmcgdGhhdCB0aGUgcHJvZmlsaW5n IGluZm8KKwkgKiBpc24ndCBjaGFuZ2VkIGJ5IHRoZSBpeGFsbG9jKCkgY2FsbC4KKwkgKi8KKwlw cm9mX2luZm9fdCBvbGRfcHJvZl9pbmZvOworCXByb2ZfaW5mb19nZXQodHNkLCBwdHIsIGFsbG9j X2N0eCwgJm9sZF9wcm9mX2luZm8pOworCisJLyoKKwkgKiB1c2l6ZSBpc24ndCBrbm93YWJsZSBi ZWZvcmUgaXhhbGxvYygpIHJldHVybnMgd2hlbiBleHRyYSBpcyBub24temVyby4KKwkgKiBUaGVy ZWZvcmUsIGNvbXB1dGUgaXRzIG1heGltdW0gcG9zc2libGUgdmFsdWUgYW5kIHVzZSB0aGF0IGlu CisJICogcHJvZl9hbGxvY19wcmVwKCkgdG8gZGVjaWRlIHdoZXRoZXIgdG8gY2FwdHVyZSBhIGJh Y2t0cmFjZS4KKwkgKiBwcm9mX3JlYWxsb2MoKSB3aWxsIHVzZSB0aGUgYWN0dWFsIHVzaXplIHRv IGRlY2lkZSB3aGV0aGVyIHRvIHNhbXBsZS4KKwkgKi8KKwlzaXplX3QgdXNpemVfbWF4OworCWlm IChhbGlnbmVkX3VzaXplX2dldChzaXplICsgZXh0cmEsIGFsaWdubWVudCwgJnVzaXplX21heCwg TlVMTCwKKwkgICAgZmFsc2UpKSB7CisJCS8qCisJCSAqIHVzaXplX21heCBpcyBvdXQgb2YgcmFu Z2UsIGFuZCBjaGFuY2VzIGFyZSB0aGF0IGFsbG9jYXRpb24KKwkJICogd2lsbCBmYWlsLCBidXQg dXNlIHRoZSBtYXhpbXVtIHBvc3NpYmxlIHZhbHVlIGFuZCBjYXJyeSBvbgorCQkgKiB3aXRoIHBy b2ZfYWxsb2NfcHJlcCgpLCBqdXN0IGluIGNhc2UgYWxsb2NhdGlvbiBzdWNjZWVkcy4KKwkJICov CisJCXVzaXplX21heCA9IFNDX0xBUkdFX01BWENMQVNTOworCX0KKwlib29sIHByb2ZfYWN0aXZl ID0gcHJvZl9hY3RpdmVfZ2V0X3VubG9ja2VkKCk7CisJYm9vbCBzYW1wbGVfZXZlbnQgPSB0ZV9w cm9mX3NhbXBsZV9ldmVudF9sb29rYWhlYWQodHNkLCB1c2l6ZV9tYXgpOworCXByb2ZfdGN0eF90 ICp0Y3R4ID0gcHJvZl9hbGxvY19wcmVwKHRzZCwgcHJvZl9hY3RpdmUsIHNhbXBsZV9ldmVudCk7 CisKKwlzaXplX3QgdXNpemU7CisJaWYgKHVubGlrZWx5KCh1aW50cHRyX3QpdGN0eCAhPSAodWlu dHB0cl90KTFVKSkgeworCQl1c2l6ZSA9IGl4YWxsb2N4X3Byb2Zfc2FtcGxlKHRzZF90c2RuKHRz ZCksIHB0ciwgb2xkX3VzaXplLAorCQkgICAgc2l6ZSwgZXh0cmEsIGFsaWdubWVudCwgemVybywg dGN0eCk7CisJfSBlbHNlIHsKKwkJdXNpemUgPSBpeGFsbG9jeF9oZWxwZXIodHNkX3RzZG4odHNk KSwgcHRyLCBvbGRfdXNpemUsIHNpemUsCisJCSAgICBleHRyYSwgYWxpZ25tZW50LCB6ZXJvKTsK Kwl9CisKKwkvKgorCSAqIEF0IHRoaXMgcG9pbnQgd2UgY2FuIHN0aWxsIHNhZmVseSBnZXQgdGhl IG9yaWdpbmFsIHByb2ZpbGluZworCSAqIGluZm9ybWF0aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGUg cHRyLCBiZWNhdXNlIChhKSB0aGUgZWRhdGFfdCBvYmplY3QKKwkgKiBhc3NvY2lhdGVkIHdpdGgg dGhlIHB0ciBzdGlsbCBsaXZlcyBhbmQgKGIpIHRoZSBwcm9maWxpbmcgaW5mbworCSAqIGZpZWxk cyBhcmUgbm90IHRvdWNoZWQuICAiKGEpIiBpcyBhc3NlcnRlZCBpbiB0aGUgb3V0ZXIgamVfeGFs bG9jeCgpCisJICogZnVuY3Rpb24sIGFuZCAiKGIpIiBpcyBpbmRpcmVjdGx5IHZlcmlmaWVkIGJl bG93IGJ5IGNoZWNraW5nIHRoYXQKKwkgKiB0aGUgYWxsb2NfdGN0eCBmaWVsZCBpcyB1bmNoYW5n ZWQuCisJICovCisJcHJvZl9pbmZvX3QgcHJvZl9pbmZvOworCWlmICh1c2l6ZSA9PSBvbGRfdXNp emUpIHsKKwkJcHJvZl9pbmZvX2dldCh0c2QsIHB0ciwgYWxsb2NfY3R4LCAmcHJvZl9pbmZvKTsK KwkJcHJvZl9hbGxvY19yb2xsYmFjayh0c2QsIHRjdHgpOworCX0gZWxzZSB7CisJCXByb2ZfaW5m b19nZXRfYW5kX3Jlc2V0X3JlY2VudCh0c2QsIHB0ciwgYWxsb2NfY3R4LCAmcHJvZl9pbmZvKTsK KwkJYXNzZXJ0KHVzaXplIDw9IHVzaXplX21heCk7CisJCXNhbXBsZV9ldmVudCA9IHRlX3Byb2Zf c2FtcGxlX2V2ZW50X2xvb2thaGVhZCh0c2QsIHVzaXplKTsKKwkJcHJvZl9yZWFsbG9jKHRzZCwg cHRyLCBzaXplLCB1c2l6ZSwgdGN0eCwgcHJvZl9hY3RpdmUsIHB0ciwKKwkJICAgIG9sZF91c2l6 ZSwgJnByb2ZfaW5mbywgc2FtcGxlX2V2ZW50KTsKKwl9CisKKwlhc3NlcnQob2xkX3Byb2ZfaW5m by5hbGxvY190Y3R4ID09IHByb2ZfaW5mby5hbGxvY190Y3R4KTsKKwlyZXR1cm4gdXNpemU7Cit9 CisKK0pFTUFMTE9DX0VYUE9SVCBzaXplX3QgSkVNQUxMT0NfTk9USFJPVworamVfeGFsbG9jeCh2 b2lkICpwdHIsIHNpemVfdCBzaXplLCBzaXplX3QgZXh0cmEsIGludCBmbGFncykgeworCXRzZF90 ICp0c2Q7CisJc2l6ZV90IHVzaXplLCBvbGRfdXNpemU7CisJc2l6ZV90IGFsaWdubWVudCA9IE1B TExPQ1hfQUxJR05fR0VUKGZsYWdzKTsKKwlib29sIHplcm8gPSB6ZXJvX2dldChNQUxMT0NYX1pF Uk9fR0VUKGZsYWdzKSwgLyogc2xvdyAqLyB0cnVlKTsKKworCUxPRygiY29yZS54YWxsb2N4LmVu dHJ5IiwgInB0cjogJXAsIHNpemU6ICV6dSwgZXh0cmE6ICV6dSwgIgorCSAgICAiZmxhZ3M6ICVk IiwgcHRyLCBzaXplLCBleHRyYSwgZmxhZ3MpOworCisJYXNzZXJ0KHB0ciAhPSBOVUxMKTsKKwlh c3NlcnQoc2l6ZSAhPSAwKTsKKwlhc3NlcnQoU0laRV9UX01BWCAtIHNpemUgPj0gZXh0cmEpOwor CWFzc2VydChtYWxsb2NfaW5pdGlhbGl6ZWQoKSB8fCBJU19JTklUSUFMSVpFUik7CisJdHNkID0g dHNkX2ZldGNoKCk7CisJY2hlY2tfZW50cnlfZXhpdF9sb2NraW5nKHRzZF90c2RuKHRzZCkpOwor CisJLyoKKwkgKiBvbGRfZWRhdGEgaXMgb25seSBmb3IgdmVyaWZ5aW5nIHRoYXQgeGFsbG9jeCgp IGtlZXBzIHRoZSBlZGF0YV90CisJICogb2JqZWN0IGFzc29jaWF0ZWQgd2l0aCB0aGUgcHRyICh0 aG91Z2ggdGhlIGNvbnRlbnQgb2YgdGhlIGVkYXRhX3QKKwkgKiBvYmplY3QgY2FuIGJlIGNoYW5n ZWQpLgorCSAqLworCWVkYXRhX3QgKm9sZF9lZGF0YSA9IGVtYXBfZWRhdGFfbG9va3VwKHRzZF90 c2RuKHRzZCksCisJICAgICZhcmVuYV9lbWFwX2dsb2JhbCwgcHRyKTsKKworCWVtYXBfYWxsb2Nf Y3R4X3QgYWxsb2NfY3R4OworCWVtYXBfYWxsb2NfY3R4X2xvb2t1cCh0c2RfdHNkbih0c2QpLCAm YXJlbmFfZW1hcF9nbG9iYWwsIHB0ciwKKwkgICAgJmFsbG9jX2N0eCk7CisJYXNzZXJ0KGFsbG9j X2N0eC5zemluZCAhPSBTQ19OU0laRVMpOworCW9sZF91c2l6ZSA9IHN6X2luZGV4MnNpemUoYWxs b2NfY3R4LnN6aW5kKTsKKwlhc3NlcnQob2xkX3VzaXplID09IGlzYWxsb2ModHNkX3RzZG4odHNk KSwgcHRyKSk7CisJLyoKKwkgKiBUaGUgQVBJIGV4cGxpY2l0bHkgYWJzb2x2ZXMgaXRzZWxmIG9m IHByb3RlY3RpbmcgYWdhaW5zdCAoc2l6ZSArCisJICogZXh0cmEpIG51bWVyaWNhbCBvdmVyZmxv dywgYnV0IHdlIG1heSBuZWVkIHRvIGNsYW1wIGV4dHJhIHRvIGF2b2lkCisJICogZXhjZWVkaW5n IFNDX0xBUkdFX01BWENMQVNTLgorCSAqCisJICogT3JkaW5hcmlseSwgc2l6ZSBsaW1pdCBjaGVj a2luZyBpcyBoYW5kbGVkIGRlZXBlciBkb3duLCBidXQgaGVyZSB3ZQorCSAqIGhhdmUgdG8gY2hl Y2sgYXMgcGFydCBvZiAoc2l6ZSArIGV4dHJhKSBjbGFtcGluZywgc2luY2Ugd2UgbmVlZCB0aGUK KwkgKiBjbGFtcGVkIHZhbHVlIGluIHRoZSBhYm92ZSBoZWxwZXIgZnVuY3Rpb25zLgorCSAqLwor CWlmICh1bmxpa2VseShzaXplID4gU0NfTEFSR0VfTUFYQ0xBU1MpKSB7CisJCXVzaXplID0gb2xk X3VzaXplOworCQlnb3RvIGxhYmVsX25vdF9yZXNpemVkOworCX0KKwlpZiAodW5saWtlbHkoU0Nf TEFSR0VfTUFYQ0xBU1MgLSBzaXplIDwgZXh0cmEpKSB7CisJCWV4dHJhID0gU0NfTEFSR0VfTUFY Q0xBU1MgLSBzaXplOworCX0KKworCWlmIChjb25maWdfcHJvZiAmJiBvcHRfcHJvZikgeworCQl1 c2l6ZSA9IGl4YWxsb2N4X3Byb2YodHNkLCBwdHIsIG9sZF91c2l6ZSwgc2l6ZSwgZXh0cmEsCisJ CSAgICBhbGlnbm1lbnQsIHplcm8sICZhbGxvY19jdHgpOworCX0gZWxzZSB7CisJCXVzaXplID0g aXhhbGxvY3hfaGVscGVyKHRzZF90c2RuKHRzZCksIHB0ciwgb2xkX3VzaXplLCBzaXplLAorCQkg ICAgZXh0cmEsIGFsaWdubWVudCwgemVybyk7CisJfQorCisJLyoKKwkgKiB4YWxsb2N4KCkgc2hv dWxkIGtlZXAgdXNpbmcgdGhlIHNhbWUgZWRhdGFfdCBvYmplY3QgKHRob3VnaCBpdHMKKwkgKiBj b250ZW50IGNhbiBiZSBjaGFuZ2VkKS4KKwkgKi8KKwlhc3NlcnQoZW1hcF9lZGF0YV9sb29rdXAo dHNkX3RzZG4odHNkKSwgJmFyZW5hX2VtYXBfZ2xvYmFsLCBwdHIpCisJICAgID09IG9sZF9lZGF0 YSk7CisKKwlpZiAodW5saWtlbHkodXNpemUgPT0gb2xkX3VzaXplKSkgeworCQlnb3RvIGxhYmVs X25vdF9yZXNpemVkOworCX0KKwl0aHJlYWRfYWxsb2NfZXZlbnQodHNkLCB1c2l6ZSk7CisJdGhy ZWFkX2RhbGxvY19ldmVudCh0c2QsIG9sZF91c2l6ZSk7CisKKwlpZiAoY29uZmlnX2ZpbGwgJiYg dW5saWtlbHkob3B0X2p1bmtfYWxsb2MpICYmIHVzaXplID4gb2xkX3VzaXplICYmCisJICAgICF6 ZXJvKSB7CisJCXNpemVfdCBleGNlc3NfbGVuID0gdXNpemUgLSBvbGRfdXNpemU7CisJCXZvaWQg KmV4Y2Vzc19zdGFydCA9ICh2b2lkICopKCh1aW50cHRyX3QpcHRyICsgb2xkX3VzaXplKTsKKwkJ anVua19hbGxvY19jYWxsYmFjayhleGNlc3Nfc3RhcnQsIGV4Y2Vzc19sZW4pOworCX0KK2xhYmVs X25vdF9yZXNpemVkOgorCWlmICh1bmxpa2VseSghdHNkX2Zhc3QodHNkKSkpIHsKKwkJdWludHB0 cl90IGFyZ3NbNF0gPSB7KHVpbnRwdHJfdClwdHIsIHNpemUsIGV4dHJhLCBmbGFnc307CisJCWhv b2tfaW52b2tlX2V4cGFuZChob29rX2V4cGFuZF94YWxsb2N4LCBwdHIsIG9sZF91c2l6ZSwKKwkJ ICAgIHVzaXplLCAodWludHB0cl90KXVzaXplLCBhcmdzKTsKKwl9CisKKwlVVFJBQ0UocHRyLCBz aXplLCBwdHIpOworCWNoZWNrX2VudHJ5X2V4aXRfbG9ja2luZyh0c2RfdHNkbih0c2QpKTsKKwor CUxPRygiY29yZS54YWxsb2N4LmV4aXQiLCAicmVzdWx0OiAlenUiLCB1c2l6ZSk7CisJcmV0dXJu IHVzaXplOworfQorCitKRU1BTExPQ19FWFBPUlQgc2l6ZV90IEpFTUFMTE9DX05PVEhST1cKK0pF TUFMTE9DX0FUVFIocHVyZSkKK2plX3NhbGxvY3goY29uc3Qgdm9pZCAqcHRyLCBpbnQgZmxhZ3Mp IHsKKwlzaXplX3QgdXNpemU7CisJdHNkbl90ICp0c2RuOworCisJTE9HKCJjb3JlLnNhbGxvY3gu ZW50cnkiLCAicHRyOiAlcCwgZmxhZ3M6ICVkIiwgcHRyLCBmbGFncyk7CisKKwlhc3NlcnQobWFs bG9jX2luaXRpYWxpemVkKCkgfHwgSVNfSU5JVElBTElaRVIpOworCWFzc2VydChwdHIgIT0gTlVM TCk7CisKKwl0c2RuID0gdHNkbl9mZXRjaCgpOworCWNoZWNrX2VudHJ5X2V4aXRfbG9ja2luZyh0 c2RuKTsKKworCWlmIChjb25maWdfZGVidWcgfHwgZm9yY2VfaXZzYWxsb2MpIHsKKwkJdXNpemUg PSBpdnNhbGxvYyh0c2RuLCBwdHIpOworCQlhc3NlcnQoZm9yY2VfaXZzYWxsb2MgfHwgdXNpemUg IT0gMCk7CisJfSBlbHNlIHsKKwkJdXNpemUgPSBpc2FsbG9jKHRzZG4sIHB0cik7CisJfQorCisJ Y2hlY2tfZW50cnlfZXhpdF9sb2NraW5nKHRzZG4pOworCisJTE9HKCJjb3JlLnNhbGxvY3guZXhp dCIsICJyZXN1bHQ6ICV6dSIsIHVzaXplKTsKKwlyZXR1cm4gdXNpemU7Cit9CisKK0pFTUFMTE9D X0VYUE9SVCB2b2lkIEpFTUFMTE9DX05PVEhST1cKK2plX2RhbGxvY3godm9pZCAqcHRyLCBpbnQg ZmxhZ3MpIHsKKwlMT0coImNvcmUuZGFsbG9jeC5lbnRyeSIsICJwdHI6ICVwLCBmbGFnczogJWQi LCBwdHIsIGZsYWdzKTsKKworCWFzc2VydChwdHIgIT0gTlVMTCk7CisJYXNzZXJ0KG1hbGxvY19p bml0aWFsaXplZCgpIHx8IElTX0lOSVRJQUxJWkVSKTsKKworCXRzZF90ICp0c2QgPSB0c2RfZmV0 Y2hfbWluKCk7CisJYm9vbCBmYXN0ID0gdHNkX2Zhc3QodHNkKTsKKwljaGVja19lbnRyeV9leGl0 X2xvY2tpbmcodHNkX3RzZG4odHNkKSk7CisKKwl1bnNpZ25lZCB0Y2FjaGVfaW5kID0gbWFsbG9j eF90Y2FjaGVfZ2V0KGZsYWdzKTsKKwl0Y2FjaGVfdCAqdGNhY2hlID0gdGNhY2hlX2dldF9mcm9t X2luZCh0c2QsIHRjYWNoZV9pbmQsICFmYXN0LAorCSAgICAvKiBpc19hbGxvYyAqLyBmYWxzZSk7 CisKKwlVVFJBQ0UocHRyLCAwLCAwKTsKKwlpZiAobGlrZWx5KGZhc3QpKSB7CisJCXRzZF9hc3Nl cnRfZmFzdCh0c2QpOworCQlpZnJlZSh0c2QsIHB0ciwgdGNhY2hlLCBmYWxzZSk7CisJfSBlbHNl IHsKKwkJdWludHB0cl90IGFyZ3NfcmF3WzNdID0geyh1aW50cHRyX3QpcHRyLCBmbGFnc307CisJ CWhvb2tfaW52b2tlX2RhbGxvYyhob29rX2RhbGxvY19kYWxsb2N4LCBwdHIsIGFyZ3NfcmF3KTsK KwkJaWZyZWUodHNkLCBwdHIsIHRjYWNoZSwgdHJ1ZSk7CisJfQorCWNoZWNrX2VudHJ5X2V4aXRf bG9ja2luZyh0c2RfdHNkbih0c2QpKTsKKworCUxPRygiY29yZS5kYWxsb2N4LmV4aXQiLCAiIik7 Cit9CisKK0pFTUFMTE9DX0FMV0FZU19JTkxJTkUgc2l6ZV90CitpbmFsbG9jeCh0c2RuX3QgKnRz ZG4sIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpIHsKKwljaGVja19lbnRyeV9leGl0X2xvY2tpbmco dHNkbik7CisJc2l6ZV90IHVzaXplOworCS8qIEluIGNhc2Ugb2Ygb3V0IG9mIHJhbmdlLCBsZXQg dGhlIHVzZXIgc2VlIGl0IHJhdGhlciB0aGFuIGZhaWwuICovCisJYWxpZ25lZF91c2l6ZV9nZXQo c2l6ZSwgTUFMTE9DWF9BTElHTl9HRVQoZmxhZ3MpLCAmdXNpemUsIE5VTEwsIGZhbHNlKTsKKwlj aGVja19lbnRyeV9leGl0X2xvY2tpbmcodHNkbik7CisJcmV0dXJuIHVzaXplOworfQorCitKRU1B TExPQ19OT0lOTElORSB2b2lkCitzZGFsbG9jeF9kZWZhdWx0KHZvaWQgKnB0ciwgc2l6ZV90IHNp emUsIGludCBmbGFncykgeworCWFzc2VydChwdHIgIT0gTlVMTCk7CisJYXNzZXJ0KG1hbGxvY19p bml0aWFsaXplZCgpIHx8IElTX0lOSVRJQUxJWkVSKTsKKworCXRzZF90ICp0c2QgPSB0c2RfZmV0 Y2hfbWluKCk7CisJYm9vbCBmYXN0ID0gdHNkX2Zhc3QodHNkKTsKKwlzaXplX3QgdXNpemUgPSBp bmFsbG9jeCh0c2RfdHNkbih0c2QpLCBzaXplLCBmbGFncyk7CisJY2hlY2tfZW50cnlfZXhpdF9s b2NraW5nKHRzZF90c2RuKHRzZCkpOworCisJdW5zaWduZWQgdGNhY2hlX2luZCA9IG1hbGxvY3hf dGNhY2hlX2dldChmbGFncyk7CisJdGNhY2hlX3QgKnRjYWNoZSA9IHRjYWNoZV9nZXRfZnJvbV9p bmQodHNkLCB0Y2FjaGVfaW5kLCAhZmFzdCwKKwkgICAgLyogaXNfYWxsb2MgKi8gZmFsc2UpOwor CisJVVRSQUNFKHB0ciwgMCwgMCk7CisJaWYgKGxpa2VseShmYXN0KSkgeworCQl0c2RfYXNzZXJ0 X2Zhc3QodHNkKTsKKwkJaXNmcmVlKHRzZCwgcHRyLCB1c2l6ZSwgdGNhY2hlLCBmYWxzZSk7CisJ fSBlbHNlIHsKKwkJdWludHB0cl90IGFyZ3NfcmF3WzNdID0geyh1aW50cHRyX3QpcHRyLCBzaXpl LCBmbGFnc307CisJCWhvb2tfaW52b2tlX2RhbGxvYyhob29rX2RhbGxvY19zZGFsbG9jeCwgcHRy LCBhcmdzX3Jhdyk7CisJCWlzZnJlZSh0c2QsIHB0ciwgdXNpemUsIHRjYWNoZSwgdHJ1ZSk7CisJ fQorCWNoZWNrX2VudHJ5X2V4aXRfbG9ja2luZyh0c2RfdHNkbih0c2QpKTsKK30KKworSkVNQUxM T0NfRVhQT1JUIHZvaWQgSkVNQUxMT0NfTk9USFJPVworamVfc2RhbGxvY3godm9pZCAqcHRyLCBz aXplX3Qgc2l6ZSwgaW50IGZsYWdzKSB7CisJTE9HKCJjb3JlLnNkYWxsb2N4LmVudHJ5IiwgInB0 cjogJXAsIHNpemU6ICV6dSwgZmxhZ3M6ICVkIiwgcHRyLAorCQlzaXplLCBmbGFncyk7CisKKwlp ZiAoZmxhZ3MgIT0gMCB8fCAhZnJlZV9mYXN0cGF0aChwdHIsIHNpemUsIHRydWUpKSB7CisJCXNk YWxsb2N4X2RlZmF1bHQocHRyLCBzaXplLCBmbGFncyk7CisJfQorCisJTE9HKCJjb3JlLnNkYWxs b2N4LmV4aXQiLCAiIik7Cit9CisKK3ZvaWQgSkVNQUxMT0NfTk9USFJPVworamVfc2RhbGxvY3hf bm9mbGFncyh2b2lkICpwdHIsIHNpemVfdCBzaXplKSB7CisJTE9HKCJjb3JlLnNkYWxsb2N4LmVu dHJ5IiwgInB0cjogJXAsIHNpemU6ICV6dSwgZmxhZ3M6IDAiLCBwdHIsCisJCXNpemUpOworCisJ aWYgKCFmcmVlX2Zhc3RwYXRoKHB0ciwgc2l6ZSwgdHJ1ZSkpIHsKKwkJc2RhbGxvY3hfZGVmYXVs dChwdHIsIHNpemUsIDApOworCX0KKworCUxPRygiY29yZS5zZGFsbG9jeC5leGl0IiwgIiIpOwor fQorCitKRU1BTExPQ19FWFBPUlQgc2l6ZV90IEpFTUFMTE9DX05PVEhST1cKK0pFTUFMTE9DX0FU VFIocHVyZSkKK2plX25hbGxvY3goc2l6ZV90IHNpemUsIGludCBmbGFncykgeworCXNpemVfdCB1 c2l6ZTsKKwl0c2RuX3QgKnRzZG47CisKKwlhc3NlcnQoc2l6ZSAhPSAwKTsKKworCWlmICh1bmxp a2VseShtYWxsb2NfaW5pdCgpKSkgeworCQlMT0coImNvcmUubmFsbG9jeC5leGl0IiwgInJlc3Vs dDogJXp1IiwgWlUoMCkpOworCQlyZXR1cm4gMDsKKwl9CisKKwl0c2RuID0gdHNkbl9mZXRjaCgp OworCWNoZWNrX2VudHJ5X2V4aXRfbG9ja2luZyh0c2RuKTsKKworCXVzaXplID0gaW5hbGxvY3go dHNkbiwgc2l6ZSwgZmxhZ3MpOworCWlmICh1bmxpa2VseSh1c2l6ZSA+IFNDX0xBUkdFX01BWENM QVNTKSkgeworCQlMT0coImNvcmUubmFsbG9jeC5leGl0IiwgInJlc3VsdDogJXp1IiwgWlUoMCkp OworCQlyZXR1cm4gMDsKKwl9CisKKwljaGVja19lbnRyeV9leGl0X2xvY2tpbmcodHNkbik7CisJ TE9HKCJjb3JlLm5hbGxvY3guZXhpdCIsICJyZXN1bHQ6ICV6dSIsIHVzaXplKTsKKwlyZXR1cm4g dXNpemU7Cit9CisKK0pFTUFMTE9DX0VYUE9SVCBpbnQgSkVNQUxMT0NfTk9USFJPVworamVfbWFs bGN0bChjb25zdCBjaGFyICpuYW1lLCB2b2lkICpvbGRwLCBzaXplX3QgKm9sZGxlbnAsIHZvaWQg Km5ld3AsCisgICAgc2l6ZV90IG5ld2xlbikgeworCWludCByZXQ7CisJdHNkX3QgKnRzZDsKKwor CUxPRygiY29yZS5tYWxsY3RsLmVudHJ5IiwgIm5hbWU6ICVzIiwgbmFtZSk7CisKKwlpZiAodW5s aWtlbHkobWFsbG9jX2luaXQoKSkpIHsKKwkJTE9HKCJjb3JlLm1hbGxjdGwuZXhpdCIsICJyZXN1 bHQ6ICVkIiwgRUFHQUlOKTsKKwkJcmV0dXJuIEVBR0FJTjsKKwl9CisKKwl0c2QgPSB0c2RfZmV0 Y2goKTsKKwljaGVja19lbnRyeV9leGl0X2xvY2tpbmcodHNkX3RzZG4odHNkKSk7CisJcmV0ID0g Y3RsX2J5bmFtZSh0c2QsIG5hbWUsIG9sZHAsIG9sZGxlbnAsIG5ld3AsIG5ld2xlbik7CisJY2hl Y2tfZW50cnlfZXhpdF9sb2NraW5nKHRzZF90c2RuKHRzZCkpOworCisJTE9HKCJjb3JlLm1hbGxj dGwuZXhpdCIsICJyZXN1bHQ6ICVkIiwgcmV0KTsKKwlyZXR1cm4gcmV0OworfQorCitKRU1BTExP Q19FWFBPUlQgaW50IEpFTUFMTE9DX05PVEhST1cKK2plX21hbGxjdGxuYW1ldG9taWIoY29uc3Qg Y2hhciAqbmFtZSwgc2l6ZV90ICptaWJwLCBzaXplX3QgKm1pYmxlbnApIHsKKwlpbnQgcmV0Owor CisJTE9HKCJjb3JlLm1hbGxjdGxuYW1ldG9taWIuZW50cnkiLCAibmFtZTogJXMiLCBuYW1lKTsK KworCWlmICh1bmxpa2VseShtYWxsb2NfaW5pdCgpKSkgeworCQlMT0coImNvcmUubWFsbGN0bG5h bWV0b21pYi5leGl0IiwgInJlc3VsdDogJWQiLCBFQUdBSU4pOworCQlyZXR1cm4gRUFHQUlOOwor CX0KKworCXRzZF90ICp0c2QgPSB0c2RfZmV0Y2goKTsKKwljaGVja19lbnRyeV9leGl0X2xvY2tp bmcodHNkX3RzZG4odHNkKSk7CisJcmV0ID0gY3RsX25hbWV0b21pYih0c2QsIG5hbWUsIG1pYnAs IG1pYmxlbnApOworCWNoZWNrX2VudHJ5X2V4aXRfbG9ja2luZyh0c2RfdHNkbih0c2QpKTsKKwor CUxPRygiY29yZS5tYWxsY3RsbmFtZXRvbWliLmV4aXQiLCAicmVzdWx0OiAlZCIsIHJldCk7CisJ cmV0dXJuIHJldDsKK30KKworSkVNQUxMT0NfRVhQT1JUIGludCBKRU1BTExPQ19OT1RIUk9XCitq ZV9tYWxsY3RsYnltaWIoY29uc3Qgc2l6ZV90ICptaWIsIHNpemVfdCBtaWJsZW4sIHZvaWQgKm9s ZHAsIHNpemVfdCAqb2xkbGVucCwKKyAgdm9pZCAqbmV3cCwgc2l6ZV90IG5ld2xlbikgeworCWlu dCByZXQ7CisJdHNkX3QgKnRzZDsKKworCUxPRygiY29yZS5tYWxsY3RsYnltaWIuZW50cnkiLCAi Iik7CisKKwlpZiAodW5saWtlbHkobWFsbG9jX2luaXQoKSkpIHsKKwkJTE9HKCJjb3JlLm1hbGxj dGxieW1pYi5leGl0IiwgInJlc3VsdDogJWQiLCBFQUdBSU4pOworCQlyZXR1cm4gRUFHQUlOOwor CX0KKworCXRzZCA9IHRzZF9mZXRjaCgpOworCWNoZWNrX2VudHJ5X2V4aXRfbG9ja2luZyh0c2Rf dHNkbih0c2QpKTsKKwlyZXQgPSBjdGxfYnltaWIodHNkLCBtaWIsIG1pYmxlbiwgb2xkcCwgb2xk bGVucCwgbmV3cCwgbmV3bGVuKTsKKwljaGVja19lbnRyeV9leGl0X2xvY2tpbmcodHNkX3RzZG4o dHNkKSk7CisJTE9HKCJjb3JlLm1hbGxjdGxieW1pYi5leGl0IiwgInJlc3VsdDogJWQiLCByZXQp OworCXJldHVybiByZXQ7Cit9CisKKyNkZWZpbmUgU1RBVFNfUFJJTlRfQlVGU0laRSA2NTUzNgor SkVNQUxMT0NfRVhQT1JUIHZvaWQgSkVNQUxMT0NfTk9USFJPVworamVfbWFsbG9jX3N0YXRzX3By aW50KHZvaWQgKCp3cml0ZV9jYikodm9pZCAqLCBjb25zdCBjaGFyICopLCB2b2lkICpjYm9wYXF1 ZSwKKyAgICBjb25zdCBjaGFyICpvcHRzKSB7CisJdHNkbl90ICp0c2RuOworCisJTE9HKCJjb3Jl Lm1hbGxvY19zdGF0c19wcmludC5lbnRyeSIsICIiKTsKKworCXRzZG4gPSB0c2RuX2ZldGNoKCk7 CisJY2hlY2tfZW50cnlfZXhpdF9sb2NraW5nKHRzZG4pOworCisJaWYgKGNvbmZpZ19kZWJ1Zykg eworCQlzdGF0c19wcmludCh3cml0ZV9jYiwgY2JvcGFxdWUsIG9wdHMpOworCX0gZWxzZSB7CisJ CWJ1Zl93cml0ZXJfdCBidWZfd3JpdGVyOworCQlidWZfd3JpdGVyX2luaXQodHNkbiwgJmJ1Zl93 cml0ZXIsIHdyaXRlX2NiLCBjYm9wYXF1ZSwgTlVMTCwKKwkJICAgIFNUQVRTX1BSSU5UX0JVRlNJ WkUpOworCQlzdGF0c19wcmludChidWZfd3JpdGVyX2NiLCAmYnVmX3dyaXRlciwgb3B0cyk7CisJ CWJ1Zl93cml0ZXJfdGVybWluYXRlKHRzZG4sICZidWZfd3JpdGVyKTsKKwl9CisKKwljaGVja19l bnRyeV9leGl0X2xvY2tpbmcodHNkbik7CisJTE9HKCJjb3JlLm1hbGxvY19zdGF0c19wcmludC5l eGl0IiwgIiIpOworfQorI3VuZGVmIFNUQVRTX1BSSU5UX0JVRlNJWkUKKworSkVNQUxMT0NfQUxX QVlTX0lOTElORSBzaXplX3QKK2plX21hbGxvY191c2FibGVfc2l6ZV9pbXBsKEpFTUFMTE9DX1VT QUJMRV9TSVpFX0NPTlNUIHZvaWQgKnB0cikgeworCWFzc2VydChtYWxsb2NfaW5pdGlhbGl6ZWQo KSB8fCBJU19JTklUSUFMSVpFUik7CisKKwl0c2RuX3QgKnRzZG4gPSB0c2RuX2ZldGNoKCk7CisJ Y2hlY2tfZW50cnlfZXhpdF9sb2NraW5nKHRzZG4pOworCisJc2l6ZV90IHJldDsKKwlpZiAodW5s aWtlbHkocHRyID09IE5VTEwpKSB7CisJCXJldCA9IDA7CisJfSBlbHNlIHsKKwkJaWYgKGNvbmZp Z19kZWJ1ZyB8fCBmb3JjZV9pdnNhbGxvYykgeworCQkJcmV0ID0gaXZzYWxsb2ModHNkbiwgcHRy KTsKKwkJCWFzc2VydChmb3JjZV9pdnNhbGxvYyB8fCByZXQgIT0gMCk7CisJCX0gZWxzZSB7CisJ CQlyZXQgPSBpc2FsbG9jKHRzZG4sIHB0cik7CisJCX0KKwl9CisJY2hlY2tfZW50cnlfZXhpdF9s b2NraW5nKHRzZG4pOworCisJcmV0dXJuIHJldDsKK30KKworSkVNQUxMT0NfRVhQT1JUIHNpemVf dCBKRU1BTExPQ19OT1RIUk9XCitqZV9tYWxsb2NfdXNhYmxlX3NpemUoSkVNQUxMT0NfVVNBQkxF X1NJWkVfQ09OU1Qgdm9pZCAqcHRyKSB7CisJTE9HKCJjb3JlLm1hbGxvY191c2FibGVfc2l6ZS5l bnRyeSIsICJwdHI6ICVwIiwgcHRyKTsKKworCXNpemVfdCByZXQgPSBqZV9tYWxsb2NfdXNhYmxl X3NpemVfaW1wbChwdHIpOworCisJTE9HKCJjb3JlLm1hbGxvY191c2FibGVfc2l6ZS5leGl0Iiwg InJlc3VsdDogJXp1IiwgcmV0KTsKKwlyZXR1cm4gcmV0OworfQorCisjaWZkZWYgSkVNQUxMT0Nf SEFWRV9NQUxMT0NfU0laRQorSkVNQUxMT0NfRVhQT1JUIHNpemVfdCBKRU1BTExPQ19OT1RIUk9X CitqZV9tYWxsb2Nfc2l6ZShjb25zdCB2b2lkICpwdHIpIHsKKwlMT0coImNvcmUubWFsbG9jX3Np emUuZW50cnkiLCAicHRyOiAlcCIsIHB0cik7CisKKwlzaXplX3QgcmV0ID0gamVfbWFsbG9jX3Vz YWJsZV9zaXplX2ltcGwocHRyKTsKKworCUxPRygiY29yZS5tYWxsb2Nfc2l6ZS5leGl0IiwgInJl c3VsdDogJXp1IiwgcmV0KTsKKwlyZXR1cm4gcmV0OworfQorI2VuZGlmCisKK3N0YXRpYyB2b2lk CitiYXRjaF9hbGxvY19wcm9mX3NhbXBsZV9hc3NlcnQodHNkX3QgKnRzZCwgc2l6ZV90IGJhdGNo LCBzaXplX3QgdXNpemUpIHsKKwlhc3NlcnQoY29uZmlnX3Byb2YgJiYgb3B0X3Byb2YpOworCWJv b2wgcHJvZl9zYW1wbGVfZXZlbnQgPSB0ZV9wcm9mX3NhbXBsZV9ldmVudF9sb29rYWhlYWQodHNk LAorCSAgICBiYXRjaCAqIHVzaXplKTsKKwlhc3NlcnQoIXByb2Zfc2FtcGxlX2V2ZW50KTsKKwlz aXplX3Qgc3VycGx1czsKKwlwcm9mX3NhbXBsZV9ldmVudCA9IHRlX3Byb2Zfc2FtcGxlX2V2ZW50 X2xvb2thaGVhZF9zdXJwbHVzKHRzZCwKKwkgICAgKGJhdGNoICsgMSkgKiB1c2l6ZSwgJnN1cnBs dXMpOworCWFzc2VydChwcm9mX3NhbXBsZV9ldmVudCk7CisJYXNzZXJ0KHN1cnBsdXMgPCB1c2l6 ZSk7Cit9CisKK3NpemVfdAorYmF0Y2hfYWxsb2Modm9pZCAqKnB0cnMsIHNpemVfdCBudW0sIHNp emVfdCBzaXplLCBpbnQgZmxhZ3MpIHsKKwlMT0coImNvcmUuYmF0Y2hfYWxsb2MuZW50cnkiLAor CSAgICAicHRyczogJXAsIG51bTogJXp1LCBzaXplOiAlenUsIGZsYWdzOiAlZCIsIHB0cnMsIG51 bSwgc2l6ZSwgZmxhZ3MpOworCisJdHNkX3QgKnRzZCA9IHRzZF9mZXRjaCgpOworCWNoZWNrX2Vu dHJ5X2V4aXRfbG9ja2luZyh0c2RfdHNkbih0c2QpKTsKKworCXNpemVfdCBmaWxsZWQgPSAwOwor CisJaWYgKHVubGlrZWx5KHRzZCA9PSBOVUxMIHx8IHRzZF9yZWVudHJhbmN5X2xldmVsX2dldCh0 c2QpID4gMCkpIHsKKwkJZ290byBsYWJlbF9kb25lOworCX0KKworCXNpemVfdCBhbGlnbm1lbnQg PSBNQUxMT0NYX0FMSUdOX0dFVChmbGFncyk7CisJc2l6ZV90IHVzaXplOworCWlmIChhbGlnbmVk X3VzaXplX2dldChzaXplLCBhbGlnbm1lbnQsICZ1c2l6ZSwgTlVMTCwgZmFsc2UpKSB7CisJCWdv dG8gbGFiZWxfZG9uZTsKKwl9CisJc3ppbmRfdCBpbmQgPSBzel9zaXplMmluZGV4KHVzaXplKTsK Kwlib29sIHplcm8gPSB6ZXJvX2dldChNQUxMT0NYX1pFUk9fR0VUKGZsYWdzKSwgLyogc2xvdyAq LyB0cnVlKTsKKworCS8qCisJICogVGhlIGNhY2hlIGJpbiBhbmQgYXJlbmEgd2lsbCBiZSBsYXpp bHkgaW5pdGlhbGl6ZWQ7IGl0J3MgaGFyZCB0bworCSAqIGtub3cgaW4gYWR2YW5jZSB3aGV0aGVy IGVhY2ggb2YgdGhlbSBuZWVkcyB0byBiZSBpbml0aWFsaXplZC4KKwkgKi8KKwljYWNoZV9iaW5f dCAqYmluID0gTlVMTDsKKwlhcmVuYV90ICphcmVuYSA9IE5VTEw7CisKKwlzaXplX3QgbnJlZ3Mg PSAwOworCWlmIChsaWtlbHkoaW5kIDwgU0NfTkJJTlMpKSB7CisJCW5yZWdzID0gYmluX2luZm9z W2luZF0ubnJlZ3M7CisJCWFzc2VydChucmVncyA+IDApOworCX0KKworCXdoaWxlIChmaWxsZWQg PCBudW0pIHsKKwkJc2l6ZV90IGJhdGNoID0gbnVtIC0gZmlsbGVkOworCQlzaXplX3Qgc3VycGx1 cyA9IFNJWkVfTUFYOyAvKiBEZWFkIHN0b3JlLiAqLworCQlib29sIHByb2Zfc2FtcGxlX2V2ZW50 ID0gY29uZmlnX3Byb2YgJiYgb3B0X3Byb2YKKwkJICAgICYmIHByb2ZfYWN0aXZlX2dldF91bmxv Y2tlZCgpCisJCSAgICAmJiB0ZV9wcm9mX3NhbXBsZV9ldmVudF9sb29rYWhlYWRfc3VycGx1cyh0 c2QsCisJCSAgICBiYXRjaCAqIHVzaXplLCAmc3VycGx1cyk7CisKKwkJaWYgKHByb2Zfc2FtcGxl X2V2ZW50KSB7CisJCQkvKgorCQkJICogQWRqdXN0IHNvIHRoYXQgdGhlIGJhdGNoIGRvZXMgbm90 IHRyaWdnZXIgcHJvZgorCQkJICogc2FtcGxpbmcuCisJCQkgKi8KKwkJCWJhdGNoIC09IHN1cnBs dXMgLyB1c2l6ZSArIDE7CisJCQliYXRjaF9hbGxvY19wcm9mX3NhbXBsZV9hc3NlcnQodHNkLCBi YXRjaCwgdXNpemUpOworCQl9CisKKwkJc2l6ZV90IHByb2dyZXNzID0gMDsKKworCQlpZiAobGlr ZWx5KGluZCA8IFNDX05CSU5TKSAmJiBiYXRjaCA+PSBucmVncykgeworCQkJaWYgKGFyZW5hID09 IE5VTEwpIHsKKwkJCQl1bnNpZ25lZCBhcmVuYV9pbmQgPSBtYWxsb2N4X2FyZW5hX2dldChmbGFn cyk7CisJCQkJaWYgKGFyZW5hX2dldF9mcm9tX2luZCh0c2QsIGFyZW5hX2luZCwKKwkJCQkgICAg JmFyZW5hKSkgeworCQkJCQlnb3RvIGxhYmVsX2RvbmU7CisJCQkJfQorCQkJCWlmIChhcmVuYSA9 PSBOVUxMKSB7CisJCQkJCWFyZW5hID0gYXJlbmFfY2hvb3NlKHRzZCwgTlVMTCk7CisJCQkJfQor CQkJCWlmICh1bmxpa2VseShhcmVuYSA9PSBOVUxMKSkgeworCQkJCQlnb3RvIGxhYmVsX2RvbmU7 CisJCQkJfQorCQkJfQorCQkJc2l6ZV90IGFyZW5hX2JhdGNoID0gYmF0Y2ggLSBiYXRjaCAlIG5y ZWdzOworCQkJc2l6ZV90IG4gPSBhcmVuYV9maWxsX3NtYWxsX2ZyZXNoKHRzZF90c2RuKHRzZCks IGFyZW5hLAorCQkJICAgIGluZCwgcHRycyArIGZpbGxlZCwgYXJlbmFfYmF0Y2gsIHplcm8pOwor CQkJcHJvZ3Jlc3MgKz0gbjsKKwkJCWZpbGxlZCArPSBuOworCQl9CisKKwkJaWYgKGxpa2VseShp bmQgPCBuaGJpbnMpICYmIHByb2dyZXNzIDwgYmF0Y2gpIHsKKwkJCWlmIChiaW4gPT0gTlVMTCkg eworCQkJCXVuc2lnbmVkIHRjYWNoZV9pbmQgPSBtYWxsb2N4X3RjYWNoZV9nZXQoZmxhZ3MpOwor CQkJCXRjYWNoZV90ICp0Y2FjaGUgPSB0Y2FjaGVfZ2V0X2Zyb21faW5kKHRzZCwKKwkJCQkgICAg dGNhY2hlX2luZCwgLyogc2xvdyAqLyB0cnVlLAorCQkJCSAgICAvKiBpc19hbGxvYyAqLyB0cnVl KTsKKwkJCQlpZiAodGNhY2hlICE9IE5VTEwpIHsKKwkJCQkJYmluID0gJnRjYWNoZS0+Ymluc1tp bmRdOworCQkJCX0KKwkJCX0KKwkJCS8qCisJCQkgKiBJZiB3ZSBkb24ndCBoYXZlIGEgdGNhY2hl IGJpbiwgd2UgZG9uJ3Qgd2FudCB0bworCQkJICogaW1tZWRpYXRlbHkgZ2l2ZSB1cCwgYmVjYXVz ZSB0aGVyZSdzIHRoZSBwb3NzaWJpbGl0eQorCQkJICogdGhhdCB0aGUgdXNlciBleHBsaWNpdGx5 IHJlcXVlc3RlZCB0byBieXBhc3MgdGhlCisJCQkgKiB0Y2FjaGUsIG9yIHRoYXQgdGhlIHVzZXIg ZXhwbGljaXRseSB0dXJuZWQgb2ZmIHRoZQorCQkJICogdGNhY2hlOyBpbiBzdWNoIGNhc2VzLCB3 ZSBnbyB0aHJvdWdoIHRoZSBzbG93IHBhdGgsCisJCQkgKiBpLmUuIHRoZSBtYWxsb2N4KCkgY2Fs bCBhdCB0aGUgZW5kIG9mIHRoZSB3aGlsZSBsb29wLgorCQkJICovCisJCQlpZiAoYmluICE9IE5V TEwpIHsKKwkJCQlzaXplX3QgYmluX2JhdGNoID0gYmF0Y2ggLSBwcm9ncmVzczsKKwkJCQkvKgor CQkJCSAqIG4gY2FuIGJlIGxlc3MgdGhhbiBiaW5fYmF0Y2gsIG1lYW5pbmcgdGhhdAorCQkJCSAq IHRoZSBjYWNoZSBiaW4gZG9lcyBub3QgaGF2ZSBlbm91Z2ggbWVtb3J5LgorCQkJCSAqIEluIHN1 Y2ggY2FzZXMsIHdlIHJlbHkgb24gdGhlIHNsb3cgcGF0aCwKKwkJCQkgKiBpLmUuIHRoZSBtYWxs b2N4KCkgY2FsbCBhdCB0aGUgZW5kIG9mIHRoZQorCQkJCSAqIHdoaWxlIGxvb3AsIHRvIGZpbGwg aW4gdGhlIGNhY2hlLCBhbmQgaW4gdGhlCisJCQkJICogbmV4dCBpdGVyYXRpb24gb2YgdGhlIHdo aWxlIGxvb3AsIHRoZSB0Y2FjaGUKKwkJCQkgKiB3aWxsIGNvbnRhaW4gYSBsb3Qgb2YgbWVtb3J5 LCBhbmQgd2UgY2FuCisJCQkJICogaGFydmVzdCB0aGVtIGhlcmUuICBDb21wYXJlZCB0byB0aGUK KwkJCQkgKiBhbHRlcm5hdGl2ZSBhcHByb2FjaCB3aGVyZSB3ZSBkaXJlY3RseSBnbyB0bworCQkJ CSAqIHRoZSBhcmVuYSBiaW5zIGhlcmUsIHRoZSBvdmVyaGVhZCBvZiBvdXIKKwkJCQkgKiBjdXJy ZW50IGFwcHJvYWNoIHNob3VsZCB1c3VhbGx5IGJlIG1pbmltYWwsCisJCQkJICogc2luY2Ugd2Ug bmV2ZXIgdHJ5IHRvIGZldGNoIG1vcmUgbWVtb3J5IHRoYW4KKwkJCQkgKiB3aGF0IGEgc2xhYiBj b250YWlucyB2aWEgdGhlIHRjYWNoZS4gIEFuCisJCQkJICogYWRkaXRpb25hbCBiZW5lZml0IGlz IHRoYXQgdGhlIHRjYWNoZSB3aWxsCisJCQkJICogbm90IGJlIGVtcHR5IGZvciB0aGUgbmV4dCBh bGxvY2F0aW9uIHJlcXVlc3QuCisJCQkJICovCisJCQkJc2l6ZV90IG4gPSBjYWNoZV9iaW5fYWxs b2NfYmF0Y2goYmluLCBiaW5fYmF0Y2gsCisJCQkJICAgIHB0cnMgKyBmaWxsZWQpOworCQkJCWlm IChjb25maWdfc3RhdHMpIHsKKwkJCQkJYmluLT50c3RhdHMubnJlcXVlc3RzICs9IG47CisJCQkJ fQorCQkJCWlmICh6ZXJvKSB7CisJCQkJCWZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbjsgKytpKSB7 CisJCQkJCQltZW1zZXQocHRyc1tmaWxsZWQgKyBpXSwgMCwKKwkJCQkJCSAgICB1c2l6ZSk7CisJ CQkJCX0KKwkJCQl9CisJCQkJaWYgKGNvbmZpZ19wcm9mICYmIG9wdF9wcm9mCisJCQkJICAgICYm IHVubGlrZWx5KGluZCA+PSBTQ19OQklOUykpIHsKKwkJCQkJZm9yIChzaXplX3QgaSA9IDA7IGkg PCBuOyArK2kpIHsKKwkJCQkJCXByb2ZfdGN0eF9yZXNldF9zYW1wbGVkKHRzZCwKKwkJCQkJCSAg ICBwdHJzW2ZpbGxlZCArIGldKTsKKwkJCQkJfQorCQkJCX0KKwkJCQlwcm9ncmVzcyArPSBuOwor CQkJCWZpbGxlZCArPSBuOworCQkJfQorCQl9CisKKwkJLyoKKwkJICogRm9yIHRocmVhZCBldmVu dHMgb3RoZXIgdGhhbiBwcm9mIHNhbXBsaW5nLCB0cmlnZ2VyIHRoZW0gYXMKKwkJICogaWYgdGhl cmUncyBhIHNpbmdsZSBhbGxvY2F0aW9uIG9mIHNpemUgKG4gKiB1c2l6ZSkuICBUaGlzIGlzCisJ CSAqIGZpbmUgYmVjYXVzZToKKwkJICogKGEpIHRoZXNlIGV2ZW50cyBkbyBub3QgYWx0ZXIgdGhl IGFsbG9jYXRpb24gaXRzZWxmLCBhbmQKKwkJICogKGIpIGl0J3MgcG9zc2libGUgdGhhdCBzb21l IGV2ZW50IHdvdWxkIGhhdmUgYmVlbiB0cmlnZ2VyZWQKKwkJICogICAgIG11bHRpcGxlIHRpbWVz LCBpbnN0ZWFkIG9mIG9ubHkgb25jZSwgaWYgdGhlIGFsbG9jYXRpb25zCisJCSAqICAgICB3ZXJl IGhhbmRsZWQgaW5kaXZpZHVhbGx5LCBidXQgaXQgd291bGQgZG8gbm8gaGFybSAob3IKKwkJICog ICAgIGV2ZW4gYmUgYmVuZWZpY2lhbCkgdG8gY29hbGVzY2UgdGhlIHRyaWdnZXJpbmdzLgorCQkg Ki8KKwkJdGhyZWFkX2FsbG9jX2V2ZW50KHRzZCwgcHJvZ3Jlc3MgKiB1c2l6ZSk7CisKKwkJaWYg KHByb2dyZXNzIDwgYmF0Y2ggfHwgcHJvZl9zYW1wbGVfZXZlbnQpIHsKKwkJCXZvaWQgKnAgPSBq ZV9tYWxsb2N4KHNpemUsIGZsYWdzKTsKKwkJCWlmIChwID09IE5VTEwpIHsgLyogT09NICovCisJ CQkJYnJlYWs7CisJCQl9CisJCQlpZiAocHJvZ3Jlc3MgPT0gYmF0Y2gpIHsKKwkJCQlhc3NlcnQo cHJvZl9zYW1wbGVkKHRzZCwgcCkpOworCQkJfQorCQkJcHRyc1tmaWxsZWQrK10gPSBwOworCQl9 CisJfQorCitsYWJlbF9kb25lOgorCWNoZWNrX2VudHJ5X2V4aXRfbG9ja2luZyh0c2RfdHNkbih0 c2QpKTsKKwlMT0coImNvcmUuYmF0Y2hfYWxsb2MuZXhpdCIsICJyZXN1bHQ6ICV6dSIsIGZpbGxl ZCk7CisJcmV0dXJuIGZpbGxlZDsKK30KKworLyoKKyAqIEVuZCBub24tc3RhbmRhcmQgZnVuY3Rp b25zLgorICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqIFRoZSBmb2xsb3dpbmcg ZnVuY3Rpb25zIGFyZSB1c2VkIGJ5IHRocmVhZGluZyBsaWJyYXJpZXMgZm9yIHByb3RlY3Rpb24g b2YKKyAqIG1hbGxvYyBkdXJpbmcgZm9yaygpLgorICovCisKKy8qCisgKiBJZiBhbiBhcHBsaWNh dGlvbiBjcmVhdGVzIGEgdGhyZWFkIGJlZm9yZSBkb2luZyBhbnkgYWxsb2NhdGlvbiBpbiB0aGUg bWFpbgorICogdGhyZWFkLCB0aGVuIGNhbGxzIGZvcmsoMikgaW4gdGhlIG1haW4gdGhyZWFkIGZv bGxvd2VkIGJ5IG1lbW9yeSBhbGxvY2F0aW9uCisgKiBpbiB0aGUgY2hpbGQgcHJvY2VzcywgYSBy YWNlIGNhbiBvY2N1ciB0aGF0IHJlc3VsdHMgaW4gZGVhZGxvY2sgd2l0aGluIHRoZQorICogY2hp bGQ6IHRoZSBtYWluIHRocmVhZCBtYXkgaGF2ZSBmb3JrZWQgd2hpbGUgdGhlIGNyZWF0ZWQgdGhy ZWFkIGhhZAorICogcGFydGlhbGx5IGluaXRpYWxpemVkIHRoZSBhbGxvY2F0b3IuICBPcmRpbmFy aWx5IGplbWFsbG9jIHByZXZlbnRzCisgKiBmb3JrL21hbGxvYyByYWNlcyB2aWEgdGhlIGZvbGxv d2luZyBmdW5jdGlvbnMgaXQgcmVnaXN0ZXJzIGR1cmluZworICogaW5pdGlhbGl6YXRpb24gdXNp bmcgcHRocmVhZF9hdGZvcmsoKSwgYnV0IG9mIGNvdXJzZSB0aGF0IGRvZXMgbm8gZ29vZCBpZgor ICogdGhlIGFsbG9jYXRvciBpc24ndCBmdWxseSBpbml0aWFsaXplZCBhdCBmb3JrIHRpbWUuICBU aGUgZm9sbG93aW5nIGxpYnJhcnkKKyAqIGNvbnN0cnVjdG9yIGlzIGEgcGFydGlhbCBzb2x1dGlv biB0byB0aGlzIHByb2JsZW0uICBJdCBtYXkgc3RpbGwgYmUgcG9zc2libGUKKyAqIHRvIHRyaWdn ZXIgdGhlIGRlYWRsb2NrIGRlc2NyaWJlZCBhYm92ZSwgYnV0IGRvaW5nIHNvIHdvdWxkIGludm9s dmUgZm9ya2luZworICogdmlhIGEgbGlicmFyeSBjb25zdHJ1Y3RvciB0aGF0IHJ1bnMgYmVmb3Jl IGplbWFsbG9jJ3MgcnVucy4KKyAqLworI2lmbmRlZiBKRU1BTExPQ19KRVQKK0pFTUFMTE9DX0FU VFIoY29uc3RydWN0b3IpCitzdGF0aWMgdm9pZAoramVtYWxsb2NfY29uc3RydWN0b3Iodm9pZCkg eworCW1hbGxvY19pbml0KCk7Cit9CisjZW5kaWYKKworI2lmbmRlZiBKRU1BTExPQ19NVVRFWF9J TklUX0NCCit2b2lkCitqZW1hbGxvY19wcmVmb3JrKHZvaWQpCisjZWxzZQorSkVNQUxMT0NfRVhQ T1JUIHZvaWQKK19tYWxsb2NfcHJlZm9yayh2b2lkKQorI2VuZGlmCit7CisJdHNkX3QgKnRzZDsK Kwl1bnNpZ25lZCBpLCBqLCBuYXJlbmFzOworCWFyZW5hX3QgKmFyZW5hOworCisjaWZkZWYgSkVN QUxMT0NfTVVURVhfSU5JVF9DQgorCWlmICghbWFsbG9jX2luaXRpYWxpemVkKCkpIHsKKwkJcmV0 dXJuOworCX0KKyNlbmRpZgorCWFzc2VydChtYWxsb2NfaW5pdGlhbGl6ZWQoKSk7CisKKwl0c2Qg PSB0c2RfZmV0Y2goKTsKKworCW5hcmVuYXMgPSBuYXJlbmFzX3RvdGFsX2dldCgpOworCisJd2l0 bmVzc19wcmVmb3JrKHRzZF93aXRuZXNzX3RzZHBfZ2V0KHRzZCkpOworCS8qIEFjcXVpcmUgYWxs IG11dGV4ZXMgaW4gYSBzYWZlIG9yZGVyLiAqLworCWN0bF9wcmVmb3JrKHRzZF90c2RuKHRzZCkp OworCXRjYWNoZV9wcmVmb3JrKHRzZF90c2RuKHRzZCkpOworCW1hbGxvY19tdXRleF9wcmVmb3Jr KHRzZF90c2RuKHRzZCksICZhcmVuYXNfbG9jayk7CisJaWYgKGhhdmVfYmFja2dyb3VuZF90aHJl YWQpIHsKKwkJYmFja2dyb3VuZF90aHJlYWRfcHJlZm9yazAodHNkX3RzZG4odHNkKSk7CisJfQor CXByb2ZfcHJlZm9yazAodHNkX3RzZG4odHNkKSk7CisJaWYgKGhhdmVfYmFja2dyb3VuZF90aHJl YWQpIHsKKwkJYmFja2dyb3VuZF90aHJlYWRfcHJlZm9yazEodHNkX3RzZG4odHNkKSk7CisJfQor CS8qIEJyZWFrIGFyZW5hIHByZWZvcmsgaW50byBzdGFnZXMgdG8gcHJlc2VydmUgbG9jayBvcmRl ci4gKi8KKwlmb3IgKGkgPSAwOyBpIDwgOTsgaSsrKSB7CisJCWZvciAoaiA9IDA7IGogPCBuYXJl bmFzOyBqKyspIHsKKwkJCWlmICgoYXJlbmEgPSBhcmVuYV9nZXQodHNkX3RzZG4odHNkKSwgaiwg ZmFsc2UpKSAhPQorCQkJICAgIE5VTEwpIHsKKwkJCQlzd2l0Y2ggKGkpIHsKKwkJCQljYXNlIDA6 CisJCQkJCWFyZW5hX3ByZWZvcmswKHRzZF90c2RuKHRzZCksIGFyZW5hKTsKKwkJCQkJYnJlYWs7 CisJCQkJY2FzZSAxOgorCQkJCQlhcmVuYV9wcmVmb3JrMSh0c2RfdHNkbih0c2QpLCBhcmVuYSk7 CisJCQkJCWJyZWFrOworCQkJCWNhc2UgMjoKKwkJCQkJYXJlbmFfcHJlZm9yazIodHNkX3RzZG4o dHNkKSwgYXJlbmEpOworCQkJCQlicmVhazsKKwkJCQljYXNlIDM6CisJCQkJCWFyZW5hX3ByZWZv cmszKHRzZF90c2RuKHRzZCksIGFyZW5hKTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSA0OgorCQkJ CQlhcmVuYV9wcmVmb3JrNCh0c2RfdHNkbih0c2QpLCBhcmVuYSk7CisJCQkJCWJyZWFrOworCQkJ CWNhc2UgNToKKwkJCQkJYXJlbmFfcHJlZm9yazUodHNkX3RzZG4odHNkKSwgYXJlbmEpOworCQkJ CQlicmVhazsKKwkJCQljYXNlIDY6CisJCQkJCWFyZW5hX3ByZWZvcms2KHRzZF90c2RuKHRzZCks IGFyZW5hKTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSA3OgorCQkJCQlhcmVuYV9wcmVmb3JrNyh0 c2RfdHNkbih0c2QpLCBhcmVuYSk7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgODoKKwkJCQkJYXJl bmFfcHJlZm9yazgodHNkX3RzZG4odHNkKSwgYXJlbmEpOworCQkJCQlicmVhazsKKwkJCQlkZWZh dWx0OiBub3RfcmVhY2hlZCgpOworCQkJCX0KKwkJCX0KKwkJfQorCisJfQorCXByb2ZfcHJlZm9y azEodHNkX3RzZG4odHNkKSk7CisJc3RhdHNfcHJlZm9yayh0c2RfdHNkbih0c2QpKTsKKwl0c2Rf cHJlZm9yayh0c2QpOworfQorCisjaWZuZGVmIEpFTUFMTE9DX01VVEVYX0lOSVRfQ0IKK3ZvaWQK K2plbWFsbG9jX3Bvc3Rmb3JrX3BhcmVudCh2b2lkKQorI2Vsc2UKK0pFTUFMTE9DX0VYUE9SVCB2 b2lkCitfbWFsbG9jX3Bvc3Rmb3JrKHZvaWQpCisjZW5kaWYKK3sKKwl0c2RfdCAqdHNkOworCXVu c2lnbmVkIGksIG5hcmVuYXM7CisKKyNpZmRlZiBKRU1BTExPQ19NVVRFWF9JTklUX0NCCisJaWYg KCFtYWxsb2NfaW5pdGlhbGl6ZWQoKSkgeworCQlyZXR1cm47CisJfQorI2VuZGlmCisJYXNzZXJ0 KG1hbGxvY19pbml0aWFsaXplZCgpKTsKKworCXRzZCA9IHRzZF9mZXRjaCgpOworCisJdHNkX3Bv c3Rmb3JrX3BhcmVudCh0c2QpOworCisJd2l0bmVzc19wb3N0Zm9ya19wYXJlbnQodHNkX3dpdG5l c3NfdHNkcF9nZXQodHNkKSk7CisJLyogUmVsZWFzZSBhbGwgbXV0ZXhlcywgbm93IHRoYXQgZm9y aygpIGhhcyBjb21wbGV0ZWQuICovCisJc3RhdHNfcG9zdGZvcmtfcGFyZW50KHRzZF90c2RuKHRz ZCkpOworCWZvciAoaSA9IDAsIG5hcmVuYXMgPSBuYXJlbmFzX3RvdGFsX2dldCgpOyBpIDwgbmFy ZW5hczsgaSsrKSB7CisJCWFyZW5hX3QgKmFyZW5hOworCisJCWlmICgoYXJlbmEgPSBhcmVuYV9n ZXQodHNkX3RzZG4odHNkKSwgaSwgZmFsc2UpKSAhPSBOVUxMKSB7CisJCQlhcmVuYV9wb3N0Zm9y a19wYXJlbnQodHNkX3RzZG4odHNkKSwgYXJlbmEpOworCQl9CisJfQorCXByb2ZfcG9zdGZvcmtf cGFyZW50KHRzZF90c2RuKHRzZCkpOworCWlmIChoYXZlX2JhY2tncm91bmRfdGhyZWFkKSB7CisJ CWJhY2tncm91bmRfdGhyZWFkX3Bvc3Rmb3JrX3BhcmVudCh0c2RfdHNkbih0c2QpKTsKKwl9CisJ bWFsbG9jX211dGV4X3Bvc3Rmb3JrX3BhcmVudCh0c2RfdHNkbih0c2QpLCAmYXJlbmFzX2xvY2sp OworCXRjYWNoZV9wb3N0Zm9ya19wYXJlbnQodHNkX3RzZG4odHNkKSk7CisJY3RsX3Bvc3Rmb3Jr X3BhcmVudCh0c2RfdHNkbih0c2QpKTsKK30KKwordm9pZAoramVtYWxsb2NfcG9zdGZvcmtfY2hp bGQodm9pZCkgeworCXRzZF90ICp0c2Q7CisJdW5zaWduZWQgaSwgbmFyZW5hczsKKworCWFzc2Vy dChtYWxsb2NfaW5pdGlhbGl6ZWQoKSk7CisKKwl0c2QgPSB0c2RfZmV0Y2goKTsKKworCXRzZF9w b3N0Zm9ya19jaGlsZCh0c2QpOworCisJd2l0bmVzc19wb3N0Zm9ya19jaGlsZCh0c2Rfd2l0bmVz c190c2RwX2dldCh0c2QpKTsKKwkvKiBSZWxlYXNlIGFsbCBtdXRleGVzLCBub3cgdGhhdCBmb3Jr KCkgaGFzIGNvbXBsZXRlZC4gKi8KKwlzdGF0c19wb3N0Zm9ya19jaGlsZCh0c2RfdHNkbih0c2Qp KTsKKwlmb3IgKGkgPSAwLCBuYXJlbmFzID0gbmFyZW5hc190b3RhbF9nZXQoKTsgaSA8IG5hcmVu YXM7IGkrKykgeworCQlhcmVuYV90ICphcmVuYTsKKworCQlpZiAoKGFyZW5hID0gYXJlbmFfZ2V0 KHRzZF90c2RuKHRzZCksIGksIGZhbHNlKSkgIT0gTlVMTCkgeworCQkJYXJlbmFfcG9zdGZvcmtf Y2hpbGQodHNkX3RzZG4odHNkKSwgYXJlbmEpOworCQl9CisJfQorCXByb2ZfcG9zdGZvcmtfY2hp bGQodHNkX3RzZG4odHNkKSk7CisJaWYgKGhhdmVfYmFja2dyb3VuZF90aHJlYWQpIHsKKwkJYmFj a2dyb3VuZF90aHJlYWRfcG9zdGZvcmtfY2hpbGQodHNkX3RzZG4odHNkKSk7CisJfQorCW1hbGxv Y19tdXRleF9wb3N0Zm9ya19jaGlsZCh0c2RfdHNkbih0c2QpLCAmYXJlbmFzX2xvY2spOworCXRj YWNoZV9wb3N0Zm9ya19jaGlsZCh0c2RfdHNkbih0c2QpKTsKKwljdGxfcG9zdGZvcmtfY2hpbGQo dHNkX3RzZG4odHNkKSk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgpkaWZmIC0tZ2l0 IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvc3JjL2plbWFsbG9jX2Nw cC5jcHAgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9zcmMvamVtYWxs b2NfY3BwLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTE2NTVmCi0t LSAvZGV2L251bGwKKysrIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAv c3JjL2plbWFsbG9jX2NwcC5jcHAKQEAgLTAsMCArMSwyNTQgQEAKKyNpbmNsdWRlIDxtdXRleD4K KyNpbmNsdWRlIDxuZXc+CisKKyNkZWZpbmUgSkVNQUxMT0NfQ1BQX0NQUF8KKyNpZmRlZiBfX2Nw bHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworI2luY2x1ZGUgImplbWFsbG9jL2ludGVy bmFsL2plbWFsbG9jX3ByZWFtYmxlLmgiCisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvamVt YWxsb2NfaW50ZXJuYWxfaW5jbHVkZXMuaCIKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5k aWYKKworLy8gQWxsIG9wZXJhdG9ycyBpbiB0aGlzIGZpbGUgYXJlIGV4cG9ydGVkLgorCisvLyBQ b3NzaWJseSBhbGlhcyBoaWRkZW4gdmVyc2lvbnMgb2YgbWFsbG9jIGFuZCBzZGFsbG9jeCB0byBh dm9pZCBhbiBleHRyYSBwbHQKKy8vIHRodW5rPworLy8KKy8vIGV4dGVybiBfX3R5cGVvZiAoc2Rh bGxvY3gpIHNkYWxsb2N4X2ludAorLy8gIF9fYXR0cmlidXRlICgoYWxpYXMgKCJzZGFsbG9jeCIp LAorLy8JCXZpc2liaWxpdHkgKCJoaWRkZW4iKSkpOworLy8KKy8vIC4uLiBidXQgaXQgbmVlZHMg dG8gd29yayB3aXRoIGplbWFsbG9jIG5hbWVzcGFjZXMuCisKK3ZvaWQJKm9wZXJhdG9yIG5ldyhz dGQ6OnNpemVfdCBzaXplKTsKK3ZvaWQJKm9wZXJhdG9yIG5ld1tdKHN0ZDo6c2l6ZV90IHNpemUp Owordm9pZAkqb3BlcmF0b3IgbmV3KHN0ZDo6c2l6ZV90IHNpemUsIGNvbnN0IHN0ZDo6bm90aHJv d190ICYpIG5vZXhjZXB0Owordm9pZAkqb3BlcmF0b3IgbmV3W10oc3RkOjpzaXplX3Qgc2l6ZSwg Y29uc3Qgc3RkOjpub3Rocm93X3QgJikgbm9leGNlcHQ7Cit2b2lkCW9wZXJhdG9yIGRlbGV0ZSh2 b2lkICpwdHIpIG5vZXhjZXB0Owordm9pZAlvcGVyYXRvciBkZWxldGVbXSh2b2lkICpwdHIpIG5v ZXhjZXB0Owordm9pZAlvcGVyYXRvciBkZWxldGUodm9pZCAqcHRyLCBjb25zdCBzdGQ6Om5vdGhy b3dfdCAmKSBub2V4Y2VwdDsKK3ZvaWQJb3BlcmF0b3IgZGVsZXRlW10odm9pZCAqcHRyLCBjb25z dCBzdGQ6Om5vdGhyb3dfdCAmKSBub2V4Y2VwdDsKKworI2lmIF9fY3BwX3NpemVkX2RlYWxsb2Nh dGlvbiA+PSAyMDEzMDkKKy8qIEMrKzE0J3Mgc2l6ZWQtZGVsZXRlIG9wZXJhdG9ycy4gKi8KK3Zv aWQJb3BlcmF0b3IgZGVsZXRlKHZvaWQgKnB0ciwgc3RkOjpzaXplX3Qgc2l6ZSkgbm9leGNlcHQ7 Cit2b2lkCW9wZXJhdG9yIGRlbGV0ZVtdKHZvaWQgKnB0ciwgc3RkOjpzaXplX3Qgc2l6ZSkgbm9l eGNlcHQ7CisjZW5kaWYKKworI2lmIF9fY3BwX2FsaWduZWRfbmV3ID49IDIwMTYwNgorLyogQysr MTcncyBvdmVyLWFsaWduZWQgb3BlcmF0b3JzLiAqLwordm9pZAkqb3BlcmF0b3IgbmV3KHN0ZDo6 c2l6ZV90IHNpemUsIHN0ZDo6YWxpZ25fdmFsX3QpOwordm9pZAkqb3BlcmF0b3IgbmV3KHN0ZDo6 c2l6ZV90IHNpemUsIHN0ZDo6YWxpZ25fdmFsX3QsIGNvbnN0IHN0ZDo6bm90aHJvd190ICYpIG5v ZXhjZXB0Owordm9pZAkqb3BlcmF0b3IgbmV3W10oc3RkOjpzaXplX3Qgc2l6ZSwgc3RkOjphbGln bl92YWxfdCk7Cit2b2lkCSpvcGVyYXRvciBuZXdbXShzdGQ6OnNpemVfdCBzaXplLCBzdGQ6OmFs aWduX3ZhbF90LCBjb25zdCBzdGQ6Om5vdGhyb3dfdCAmKSBub2V4Y2VwdDsKK3ZvaWQJb3BlcmF0 b3IgZGVsZXRlKHZvaWQqIHB0ciwgc3RkOjphbGlnbl92YWxfdCkgbm9leGNlcHQ7Cit2b2lkCW9w ZXJhdG9yIGRlbGV0ZSh2b2lkKiBwdHIsIHN0ZDo6YWxpZ25fdmFsX3QsIGNvbnN0IHN0ZDo6bm90 aHJvd190ICYpIG5vZXhjZXB0Owordm9pZAlvcGVyYXRvciBkZWxldGUodm9pZCogcHRyLCBzdGQ6 OnNpemVfdCBzaXplLCBzdGQ6OmFsaWduX3ZhbF90IGFsKSBub2V4Y2VwdDsKK3ZvaWQJb3BlcmF0 b3IgZGVsZXRlW10odm9pZCogcHRyLCBzdGQ6OmFsaWduX3ZhbF90KSBub2V4Y2VwdDsKK3ZvaWQJ b3BlcmF0b3IgZGVsZXRlW10odm9pZCogcHRyLCBzdGQ6OmFsaWduX3ZhbF90LCBjb25zdCBzdGQ6 Om5vdGhyb3dfdCAmKSBub2V4Y2VwdDsKK3ZvaWQJb3BlcmF0b3IgZGVsZXRlW10odm9pZCogcHRy LCBzdGQ6OnNpemVfdCBzaXplLCBzdGQ6OmFsaWduX3ZhbF90IGFsKSBub2V4Y2VwdDsKKyNlbmRp ZgorCitKRU1BTExPQ19OT0lOTElORQorc3RhdGljIHZvaWQgKgoraGFuZGxlT09NKHN0ZDo6c2l6 ZV90IHNpemUsIGJvb2wgbm90aHJvdykgeworCWlmIChvcHRfZXhwZXJpbWVudGFsX2luZmFsbGli bGVfbmV3KSB7CisJCXNhZmV0eV9jaGVja19mYWlsKCI8amVtYWxsb2M+OiBBbGxvY2F0aW9uIGZh aWxlZCBhbmQgIgorCQkgICAgIm9wdC5leHBlcmltZW50YWxfaW5mYWxsaWJsZV9uZXcgaXMgdHJ1 ZS4gQWJvcnRpbmcuXG4iKTsKKwkJcmV0dXJuIG51bGxwdHI7CisJfQorCisJdm9pZCAqcHRyID0g bnVsbHB0cjsKKworCXdoaWxlIChwdHIgPT0gbnVsbHB0cikgeworCQlzdGQ6Om5ld19oYW5kbGVy IGhhbmRsZXI7CisJCS8vIEdDQy00LjggYW5kIGNsYW5nIDQuMCBkbyBub3QgaGF2ZSBzdGQ6Omdl dF9uZXdfaGFuZGxlci4KKwkJeworCQkJc3RhdGljIHN0ZDo6bXV0ZXggbXR4OworCQkJc3RkOjps b2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobXR4KTsKKworCQkJaGFuZGxlciA9IHN0ZDo6c2V0 X25ld19oYW5kbGVyKG51bGxwdHIpOworCQkJc3RkOjpzZXRfbmV3X2hhbmRsZXIoaGFuZGxlcik7 CisJCX0KKwkJaWYgKGhhbmRsZXIgPT0gbnVsbHB0cikKKwkJCWJyZWFrOworCisJCXRyeSB7CisJ CQloYW5kbGVyKCk7CisJCX0gY2F0Y2ggKGNvbnN0IHN0ZDo6YmFkX2FsbG9jICYpIHsKKwkJCWJy ZWFrOworCQl9CisKKwkJcHRyID0gamVfbWFsbG9jKHNpemUpOworCX0KKworCWlmIChwdHIgPT0g bnVsbHB0ciAmJiAhbm90aHJvdykKKwkJc3RkOjpfX3Rocm93X2JhZF9hbGxvYygpOworCXJldHVy biBwdHI7Cit9CisKK3RlbXBsYXRlIDxib29sIElzTm9FeGNlcHQ+CitKRU1BTExPQ19OT0lOTElO RQorc3RhdGljIHZvaWQgKgorZmFsbGJhY2tfaW1wbChzdGQ6OnNpemVfdCBzaXplKSBub2V4Y2Vw dChJc05vRXhjZXB0KSB7CisJdm9pZCAqcHRyID0gbWFsbG9jX2RlZmF1bHQoc2l6ZSk7CisJaWYg KGxpa2VseShwdHIgIT0gbnVsbHB0cikpIHsKKwkJcmV0dXJuIHB0cjsKKwl9CisJcmV0dXJuIGhh bmRsZU9PTShzaXplLCBJc05vRXhjZXB0KTsKK30KKwordGVtcGxhdGUgPGJvb2wgSXNOb0V4Y2Vw dD4KK0pFTUFMTE9DX0FMV0FZU19JTkxJTkUKK3ZvaWQgKgorbmV3SW1wbChzdGQ6OnNpemVfdCBz aXplKSBub2V4Y2VwdChJc05vRXhjZXB0KSB7CisJcmV0dXJuIGltYWxsb2NfZmFzdHBhdGgoc2l6 ZSwgJmZhbGxiYWNrX2ltcGw8SXNOb0V4Y2VwdD4pOworfQorCit2b2lkICoKK29wZXJhdG9yIG5l dyhzdGQ6OnNpemVfdCBzaXplKSB7CisJcmV0dXJuIG5ld0ltcGw8ZmFsc2U+KHNpemUpOworfQor Cit2b2lkICoKK29wZXJhdG9yIG5ld1tdKHN0ZDo6c2l6ZV90IHNpemUpIHsKKwlyZXR1cm4gbmV3 SW1wbDxmYWxzZT4oc2l6ZSk7Cit9CisKK3ZvaWQgKgorb3BlcmF0b3IgbmV3KHN0ZDo6c2l6ZV90 IHNpemUsIGNvbnN0IHN0ZDo6bm90aHJvd190ICYpIG5vZXhjZXB0IHsKKwlyZXR1cm4gbmV3SW1w bDx0cnVlPihzaXplKTsKK30KKwordm9pZCAqCitvcGVyYXRvciBuZXdbXShzdGQ6OnNpemVfdCBz aXplLCBjb25zdCBzdGQ6Om5vdGhyb3dfdCAmKSBub2V4Y2VwdCB7CisJcmV0dXJuIG5ld0ltcGw8 dHJ1ZT4oc2l6ZSk7Cit9CisKKyNpZiBfX2NwcF9hbGlnbmVkX25ldyA+PSAyMDE2MDYKKwordGVt cGxhdGUgPGJvb2wgSXNOb0V4Y2VwdD4KK0pFTUFMTE9DX0FMV0FZU19JTkxJTkUKK3ZvaWQgKgor YWxpZ25lZE5ld0ltcGwoc3RkOjpzaXplX3Qgc2l6ZSwgc3RkOjphbGlnbl92YWxfdCBhbGlnbm1l bnQpIG5vZXhjZXB0KElzTm9FeGNlcHQpIHsKKwl2b2lkICpwdHIgPSBqZV9hbGlnbmVkX2FsbG9j KHN0YXRpY19jYXN0PHN0ZDo6c2l6ZV90PihhbGlnbm1lbnQpLCBzaXplKTsKKwlpZiAobGlrZWx5 KHB0ciAhPSBudWxscHRyKSkgeworCQlyZXR1cm4gcHRyOworCX0KKworCXJldHVybiBoYW5kbGVP T00oc2l6ZSwgSXNOb0V4Y2VwdCk7Cit9CisKK3ZvaWQgKgorb3BlcmF0b3IgbmV3KHN0ZDo6c2l6 ZV90IHNpemUsIHN0ZDo6YWxpZ25fdmFsX3QgYWxpZ25tZW50KSB7CisJcmV0dXJuIGFsaWduZWRO ZXdJbXBsPGZhbHNlPihzaXplLCBhbGlnbm1lbnQpOworfQorCit2b2lkICoKK29wZXJhdG9yIG5l d1tdKHN0ZDo6c2l6ZV90IHNpemUsIHN0ZDo6YWxpZ25fdmFsX3QgYWxpZ25tZW50KSB7CisJcmV0 dXJuIGFsaWduZWROZXdJbXBsPGZhbHNlPihzaXplLCBhbGlnbm1lbnQpOworfQorCit2b2lkICoK K29wZXJhdG9yIG5ldyhzdGQ6OnNpemVfdCBzaXplLCBzdGQ6OmFsaWduX3ZhbF90IGFsaWdubWVu dCwgY29uc3Qgc3RkOjpub3Rocm93X3QgJikgbm9leGNlcHQgeworCXJldHVybiBhbGlnbmVkTmV3 SW1wbDx0cnVlPihzaXplLCBhbGlnbm1lbnQpOworfQorCit2b2lkICoKK29wZXJhdG9yIG5ld1td KHN0ZDo6c2l6ZV90IHNpemUsIHN0ZDo6YWxpZ25fdmFsX3QgYWxpZ25tZW50LCBjb25zdCBzdGQ6 Om5vdGhyb3dfdCAmKSBub2V4Y2VwdCB7CisJcmV0dXJuIGFsaWduZWROZXdJbXBsPHRydWU+KHNp emUsIGFsaWdubWVudCk7Cit9CisKKyNlbmRpZiAgLy8gX19jcHBfYWxpZ25lZF9uZXcKKwordm9p ZAorb3BlcmF0b3IgZGVsZXRlKHZvaWQgKnB0cikgbm9leGNlcHQgeworCWplX2ZyZWUocHRyKTsK K30KKwordm9pZAorb3BlcmF0b3IgZGVsZXRlW10odm9pZCAqcHRyKSBub2V4Y2VwdCB7CisJamVf ZnJlZShwdHIpOworfQorCit2b2lkCitvcGVyYXRvciBkZWxldGUodm9pZCAqcHRyLCBjb25zdCBz dGQ6Om5vdGhyb3dfdCAmKSBub2V4Y2VwdCB7CisJamVfZnJlZShwdHIpOworfQorCit2b2lkIG9w ZXJhdG9yIGRlbGV0ZVtdKHZvaWQgKnB0ciwgY29uc3Qgc3RkOjpub3Rocm93X3QgJikgbm9leGNl cHQgeworCWplX2ZyZWUocHRyKTsKK30KKworI2lmIF9fY3BwX3NpemVkX2RlYWxsb2NhdGlvbiA+ PSAyMDEzMDkKKworSkVNQUxMT0NfQUxXQVlTX0lOTElORQordm9pZAorc2l6ZWREZWxldGVJbXBs KHZvaWQqIHB0ciwgc3RkOjpzaXplX3Qgc2l6ZSkgbm9leGNlcHQgeworCWlmICh1bmxpa2VseShw dHIgPT0gbnVsbHB0cikpIHsKKwkJcmV0dXJuOworCX0KKwlqZV9zZGFsbG9jeF9ub2ZsYWdzKHB0 ciwgc2l6ZSk7Cit9CisKK3ZvaWQKK29wZXJhdG9yIGRlbGV0ZSh2b2lkICpwdHIsIHN0ZDo6c2l6 ZV90IHNpemUpIG5vZXhjZXB0IHsKKwlzaXplZERlbGV0ZUltcGwocHRyLCBzaXplKTsKK30KKwor dm9pZAorb3BlcmF0b3IgZGVsZXRlW10odm9pZCAqcHRyLCBzdGQ6OnNpemVfdCBzaXplKSBub2V4 Y2VwdCB7CisJc2l6ZWREZWxldGVJbXBsKHB0ciwgc2l6ZSk7Cit9CisKKyNlbmRpZiAgLy8gX19j cHBfc2l6ZWRfZGVhbGxvY2F0aW9uCisKKyNpZiBfX2NwcF9hbGlnbmVkX25ldyA+PSAyMDE2MDYK KworSkVNQUxMT0NfQUxXQVlTX0lOTElORQordm9pZAorYWxpZ25lZFNpemVkRGVsZXRlSW1wbCh2 b2lkKiBwdHIsIHN0ZDo6c2l6ZV90IHNpemUsIHN0ZDo6YWxpZ25fdmFsX3QgYWxpZ25tZW50KSBu b2V4Y2VwdCB7CisJaWYgKGNvbmZpZ19kZWJ1ZykgeworCQlhc3NlcnQoKChzaXplX3QpYWxpZ25t ZW50ICYgKChzaXplX3QpYWxpZ25tZW50IC0gMSkpID09IDApOworCX0KKwlpZiAodW5saWtlbHko cHRyID09IG51bGxwdHIpKSB7CisJCXJldHVybjsKKwl9CisJamVfc2RhbGxvY3gocHRyLCBzaXpl LCBNQUxMT0NYX0FMSUdOKGFsaWdubWVudCkpOworfQorCit2b2lkCitvcGVyYXRvciBkZWxldGUo dm9pZCogcHRyLCBzdGQ6OmFsaWduX3ZhbF90KSBub2V4Y2VwdCB7CisJamVfZnJlZShwdHIpOwor fQorCit2b2lkCitvcGVyYXRvciBkZWxldGVbXSh2b2lkKiBwdHIsIHN0ZDo6YWxpZ25fdmFsX3Qp IG5vZXhjZXB0IHsKKwlqZV9mcmVlKHB0cik7Cit9CisKK3ZvaWQKK29wZXJhdG9yIGRlbGV0ZSh2 b2lkKiBwdHIsIHN0ZDo6YWxpZ25fdmFsX3QsIGNvbnN0IHN0ZDo6bm90aHJvd190Jikgbm9leGNl cHQgeworCWplX2ZyZWUocHRyKTsKK30KKwordm9pZAorb3BlcmF0b3IgZGVsZXRlW10odm9pZCog cHRyLCBzdGQ6OmFsaWduX3ZhbF90LCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIG5vZXhjZXB0IHsK KwlqZV9mcmVlKHB0cik7Cit9CisKK3ZvaWQKK29wZXJhdG9yIGRlbGV0ZSh2b2lkKiBwdHIsIHN0 ZDo6c2l6ZV90IHNpemUsIHN0ZDo6YWxpZ25fdmFsX3QgYWxpZ25tZW50KSBub2V4Y2VwdCB7CisJ YWxpZ25lZFNpemVkRGVsZXRlSW1wbChwdHIsIHNpemUsIGFsaWdubWVudCk7Cit9CisKK3ZvaWQK K29wZXJhdG9yIGRlbGV0ZVtdKHZvaWQqIHB0ciwgc3RkOjpzaXplX3Qgc2l6ZSwgc3RkOjphbGln bl92YWxfdCBhbGlnbm1lbnQpIG5vZXhjZXB0IHsKKwlhbGlnbmVkU2l6ZWREZWxldGVJbXBsKHB0 ciwgc2l6ZSwgYWxpZ25tZW50KTsKK30KKworI2VuZGlmICAvLyBfX2NwcF9hbGlnbmVkX25ldwoK ZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3NyYy9s YXJnZS5jIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvc3JjL2xhcmdl LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWZjNGJmNQotLS0gL2Rldi9u dWxsCisrKyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3NyYy9sYXJn ZS5jCkBAIC0wLDAgKzEsMzIyIEBACisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvamVtYWxs b2NfcHJlYW1ibGUuaCIKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9qZW1hbGxvY19pbnRl cm5hbF9pbmNsdWRlcy5oIgorCisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvYXNzZXJ0Lmgi CisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvZW1hcC5oIgorI2luY2x1ZGUgImplbWFsbG9j L2ludGVybmFsL2V4dGVudF9tbWFwLmgiCisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvbXV0 ZXguaCIKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9wcm9mX3JlY2VudC5oIgorI2luY2x1 ZGUgImplbWFsbG9jL2ludGVybmFsL3V0aWwuaCIKKworLyoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8K Kwordm9pZCAqCitsYXJnZV9tYWxsb2ModHNkbl90ICp0c2RuLCBhcmVuYV90ICphcmVuYSwgc2l6 ZV90IHVzaXplLCBib29sIHplcm8pIHsKKwlhc3NlcnQodXNpemUgPT0gc3pfczJ1KHVzaXplKSk7 CisKKwlyZXR1cm4gbGFyZ2VfcGFsbG9jKHRzZG4sIGFyZW5hLCB1c2l6ZSwgQ0FDSEVMSU5FLCB6 ZXJvKTsKK30KKwordm9pZCAqCitsYXJnZV9wYWxsb2ModHNkbl90ICp0c2RuLCBhcmVuYV90ICph cmVuYSwgc2l6ZV90IHVzaXplLCBzaXplX3QgYWxpZ25tZW50LAorICAgIGJvb2wgemVybykgewor CXNpemVfdCBhdXNpemU7CisJZWRhdGFfdCAqZWRhdGE7CisJVU5VU0VEIGJvb2wgaWR1bXAgSkVN QUxMT0NfQ0NfU0lMRU5DRV9JTklUKGZhbHNlKTsKKworCWFzc2VydCghdHNkbl9udWxsKHRzZG4p IHx8IGFyZW5hICE9IE5VTEwpOworCisJYXVzaXplID0gc3pfc2EydSh1c2l6ZSwgYWxpZ25tZW50 KTsKKwlpZiAodW5saWtlbHkoYXVzaXplID09IDAgfHwgYXVzaXplID4gU0NfTEFSR0VfTUFYQ0xB U1MpKSB7CisJCXJldHVybiBOVUxMOworCX0KKworCWlmIChsaWtlbHkoIXRzZG5fbnVsbCh0c2Ru KSkpIHsKKwkJYXJlbmEgPSBhcmVuYV9jaG9vc2VfbWF5YmVfaHVnZSh0c2RuX3RzZCh0c2RuKSwg YXJlbmEsIHVzaXplKTsKKwl9CisJaWYgKHVubGlrZWx5KGFyZW5hID09IE5VTEwpIHx8IChlZGF0 YSA9IGFyZW5hX2V4dGVudF9hbGxvY19sYXJnZSh0c2RuLAorCSAgICBhcmVuYSwgdXNpemUsIGFs aWdubWVudCwgemVybykpID09IE5VTEwpIHsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJLyogU2Vl IGNvbW1lbnRzIGluIGFyZW5hX2Jpbl9zbGFic19mdWxsX2luc2VydCgpLiAqLworCWlmICghYXJl bmFfaXNfYXV0byhhcmVuYSkpIHsKKwkJLyogSW5zZXJ0IGVkYXRhIGludG8gbGFyZ2UuICovCisJ CW1hbGxvY19tdXRleF9sb2NrKHRzZG4sICZhcmVuYS0+bGFyZ2VfbXR4KTsKKwkJZWRhdGFfbGlz dF9hY3RpdmVfYXBwZW5kKCZhcmVuYS0+bGFyZ2UsIGVkYXRhKTsKKwkJbWFsbG9jX211dGV4X3Vu bG9jayh0c2RuLCAmYXJlbmEtPmxhcmdlX210eCk7CisJfQorCisJYXJlbmFfZGVjYXlfdGljayh0 c2RuLCBhcmVuYSk7CisJcmV0dXJuIGVkYXRhX2FkZHJfZ2V0KGVkYXRhKTsKK30KKworc3RhdGlj IGJvb2wKK2xhcmdlX3JhbGxvY19ub19tb3ZlX3Nocmluayh0c2RuX3QgKnRzZG4sIGVkYXRhX3Qg KmVkYXRhLCBzaXplX3QgdXNpemUpIHsKKwlhcmVuYV90ICphcmVuYSA9IGFyZW5hX2dldF9mcm9t X2VkYXRhKGVkYXRhKTsKKwllaG9va3NfdCAqZWhvb2tzID0gYXJlbmFfZ2V0X2Vob29rcyhhcmVu YSk7CisJc2l6ZV90IG9sZF9zaXplID0gZWRhdGFfc2l6ZV9nZXQoZWRhdGEpOworCXNpemVfdCBv bGRfdXNpemUgPSBlZGF0YV91c2l6ZV9nZXQoZWRhdGEpOworCisJYXNzZXJ0KG9sZF91c2l6ZSA+ IHVzaXplKTsKKworCWlmIChlaG9va3Nfc3BsaXRfd2lsbF9mYWlsKGVob29rcykpIHsKKwkJcmV0 dXJuIHRydWU7CisJfQorCisJYm9vbCBkZWZlcnJlZF93b3JrX2dlbmVyYXRlZCA9IGZhbHNlOwor CWJvb2wgZXJyID0gcGFfc2hyaW5rKHRzZG4sICZhcmVuYS0+cGFfc2hhcmQsIGVkYXRhLCBvbGRf c2l6ZSwKKwkgICAgdXNpemUgKyBzel9sYXJnZV9wYWQsIHN6X3NpemUyaW5kZXgodXNpemUpLAor CSAgICAmZGVmZXJyZWRfd29ya19nZW5lcmF0ZWQpOworCWlmIChlcnIpIHsKKwkJcmV0dXJuIHRy dWU7CisJfQorCWlmIChkZWZlcnJlZF93b3JrX2dlbmVyYXRlZCkgeworCQlhcmVuYV9oYW5kbGVf ZGVmZXJyZWRfd29yayh0c2RuLCBhcmVuYSk7CisJfQorCWFyZW5hX2V4dGVudF9yYWxsb2NfbGFy Z2Vfc2hyaW5rKHRzZG4sIGFyZW5hLCBlZGF0YSwgb2xkX3VzaXplKTsKKworCXJldHVybiBmYWxz ZTsKK30KKworc3RhdGljIGJvb2wKK2xhcmdlX3JhbGxvY19ub19tb3ZlX2V4cGFuZCh0c2RuX3Qg KnRzZG4sIGVkYXRhX3QgKmVkYXRhLCBzaXplX3QgdXNpemUsCisgICAgYm9vbCB6ZXJvKSB7CisJ YXJlbmFfdCAqYXJlbmEgPSBhcmVuYV9nZXRfZnJvbV9lZGF0YShlZGF0YSk7CisKKwlzaXplX3Qg b2xkX3NpemUgPSBlZGF0YV9zaXplX2dldChlZGF0YSk7CisJc2l6ZV90IG9sZF91c2l6ZSA9IGVk YXRhX3VzaXplX2dldChlZGF0YSk7CisJc2l6ZV90IG5ld19zaXplID0gdXNpemUgKyBzel9sYXJn ZV9wYWQ7CisKKwlzemluZF90IHN6aW5kID0gc3pfc2l6ZTJpbmRleCh1c2l6ZSk7CisKKwlib29s IGRlZmVycmVkX3dvcmtfZ2VuZXJhdGVkID0gZmFsc2U7CisJYm9vbCBlcnIgPSBwYV9leHBhbmQo dHNkbiwgJmFyZW5hLT5wYV9zaGFyZCwgZWRhdGEsIG9sZF9zaXplLCBuZXdfc2l6ZSwKKwkgICAg c3ppbmQsIHplcm8sICZkZWZlcnJlZF93b3JrX2dlbmVyYXRlZCk7CisKKwlpZiAoZGVmZXJyZWRf d29ya19nZW5lcmF0ZWQpIHsKKwkJYXJlbmFfaGFuZGxlX2RlZmVycmVkX3dvcmsodHNkbiwgYXJl bmEpOworCX0KKworCWlmIChlcnIpIHsKKwkJcmV0dXJuIHRydWU7CisJfQorCisJaWYgKHplcm8p IHsKKwkJaWYgKG9wdF9jYWNoZV9vYmxpdmlvdXMpIHsKKwkJCWFzc2VydChzel9sYXJnZV9wYWQg PT0gUEFHRSk7CisJCQkvKgorCQkJICogWmVybyB0aGUgdHJhaWxpbmcgYnl0ZXMgb2YgdGhlIG9y aWdpbmFsIGFsbG9jYXRpb24ncworCQkJICogbGFzdCBwYWdlLCBzaW5jZSB0aGV5IGFyZSBpbiBh biBpbmRldGVybWluYXRlIHN0YXRlLgorCQkJICogVGhlcmUgd2lsbCBhbHdheXMgYmUgdHJhaWxp bmcgYnl0ZXMsIGJlY2F1c2UgcHRyJ3MKKwkJCSAqIG9mZnNldCBmcm9tIHRoZSBiZWdpbm5pbmcg b2YgdGhlIGV4dGVudCBpcyBhIG11bHRpcGxlCisJCQkgKiBvZiBDQUNIRUxJTkUgaW4gWzAgLi4g UEFHRSkuCisJCQkgKi8KKwkJCXZvaWQgKnpiYXNlID0gKHZvaWQgKikKKwkJCSAgICAoKHVpbnRw dHJfdCllZGF0YV9hZGRyX2dldChlZGF0YSkgKyBvbGRfdXNpemUpOworCQkJdm9pZCAqenBhc3Qg PSBQQUdFX0FERFIyQkFTRSgodm9pZCAqKSgodWludHB0cl90KXpiYXNlICsKKwkJCSAgICBQQUdF KSk7CisJCQlzaXplX3Qgbnplcm8gPSAodWludHB0cl90KXpwYXN0IC0gKHVpbnRwdHJfdCl6YmFz ZTsKKwkJCWFzc2VydChuemVybyA+IDApOworCQkJbWVtc2V0KHpiYXNlLCAwLCBuemVybyk7CisJ CX0KKwl9CisJYXJlbmFfZXh0ZW50X3JhbGxvY19sYXJnZV9leHBhbmQodHNkbiwgYXJlbmEsIGVk YXRhLCBvbGRfdXNpemUpOworCisJcmV0dXJuIGZhbHNlOworfQorCitib29sCitsYXJnZV9yYWxs b2Nfbm9fbW92ZSh0c2RuX3QgKnRzZG4sIGVkYXRhX3QgKmVkYXRhLCBzaXplX3QgdXNpemVfbWlu LAorICAgIHNpemVfdCB1c2l6ZV9tYXgsIGJvb2wgemVybykgeworCXNpemVfdCBvbGR1c2l6ZSA9 IGVkYXRhX3VzaXplX2dldChlZGF0YSk7CisKKwkvKiBUaGUgZm9sbG93aW5nIHNob3VsZCBoYXZl IGJlZW4gY2F1Z2h0IGJ5IGNhbGxlcnMuICovCisJYXNzZXJ0KHVzaXplX21pbiA+IDAgJiYgdXNp emVfbWF4IDw9IFNDX0xBUkdFX01BWENMQVNTKTsKKwkvKiBCb3RoIGFsbG9jYXRpb24gc2l6ZXMg bXVzdCBiZSBsYXJnZSB0byBhdm9pZCBhIG1vdmUuICovCisJYXNzZXJ0KG9sZHVzaXplID49IFND X0xBUkdFX01JTkNMQVNTCisJICAgICYmIHVzaXplX21heCA+PSBTQ19MQVJHRV9NSU5DTEFTUyk7 CisKKwlpZiAodXNpemVfbWF4ID4gb2xkdXNpemUpIHsKKwkJLyogQXR0ZW1wdCB0byBleHBhbmQg dGhlIGFsbG9jYXRpb24gaW4tcGxhY2UuICovCisJCWlmICghbGFyZ2VfcmFsbG9jX25vX21vdmVf ZXhwYW5kKHRzZG4sIGVkYXRhLCB1c2l6ZV9tYXgsCisJCSAgICB6ZXJvKSkgeworCQkJYXJlbmFf ZGVjYXlfdGljayh0c2RuLCBhcmVuYV9nZXRfZnJvbV9lZGF0YShlZGF0YSkpOworCQkJcmV0dXJu IGZhbHNlOworCQl9CisJCS8qIFRyeSBhZ2FpbiwgdGhpcyB0aW1lIHdpdGggdXNpemVfbWluLiAq LworCQlpZiAodXNpemVfbWluIDwgdXNpemVfbWF4ICYmIHVzaXplX21pbiA+IG9sZHVzaXplICYm CisJCSAgICBsYXJnZV9yYWxsb2Nfbm9fbW92ZV9leHBhbmQodHNkbiwgZWRhdGEsIHVzaXplX21p biwgemVybykpIHsKKwkJCWFyZW5hX2RlY2F5X3RpY2sodHNkbiwgYXJlbmFfZ2V0X2Zyb21fZWRh dGEoZWRhdGEpKTsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCX0KKworCS8qCisJICogQXZvaWQg bW92aW5nIHRoZSBhbGxvY2F0aW9uIGlmIHRoZSBleGlzdGluZyBleHRlbnQgc2l6ZSBhY2NvbW1v ZGF0ZXMKKwkgKiB0aGUgbmV3IHNpemUuCisJICovCisJaWYgKG9sZHVzaXplID49IHVzaXplX21p biAmJiBvbGR1c2l6ZSA8PSB1c2l6ZV9tYXgpIHsKKwkJYXJlbmFfZGVjYXlfdGljayh0c2RuLCBh cmVuYV9nZXRfZnJvbV9lZGF0YShlZGF0YSkpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJLyog QXR0ZW1wdCB0byBzaHJpbmsgdGhlIGFsbG9jYXRpb24gaW4tcGxhY2UuICovCisJaWYgKG9sZHVz aXplID4gdXNpemVfbWF4KSB7CisJCWlmICghbGFyZ2VfcmFsbG9jX25vX21vdmVfc2hyaW5rKHRz ZG4sIGVkYXRhLCB1c2l6ZV9tYXgpKSB7CisJCQlhcmVuYV9kZWNheV90aWNrKHRzZG4sIGFyZW5h X2dldF9mcm9tX2VkYXRhKGVkYXRhKSk7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKwl9CisJcmV0 dXJuIHRydWU7Cit9CisKK3N0YXRpYyB2b2lkICoKK2xhcmdlX3JhbGxvY19tb3ZlX2hlbHBlcih0 c2RuX3QgKnRzZG4sIGFyZW5hX3QgKmFyZW5hLCBzaXplX3QgdXNpemUsCisgICAgc2l6ZV90IGFs aWdubWVudCwgYm9vbCB6ZXJvKSB7CisJaWYgKGFsaWdubWVudCA8PSBDQUNIRUxJTkUpIHsKKwkJ cmV0dXJuIGxhcmdlX21hbGxvYyh0c2RuLCBhcmVuYSwgdXNpemUsIHplcm8pOworCX0KKwlyZXR1 cm4gbGFyZ2VfcGFsbG9jKHRzZG4sIGFyZW5hLCB1c2l6ZSwgYWxpZ25tZW50LCB6ZXJvKTsKK30K Kwordm9pZCAqCitsYXJnZV9yYWxsb2ModHNkbl90ICp0c2RuLCBhcmVuYV90ICphcmVuYSwgdm9p ZCAqcHRyLCBzaXplX3QgdXNpemUsCisgICAgc2l6ZV90IGFsaWdubWVudCwgYm9vbCB6ZXJvLCB0 Y2FjaGVfdCAqdGNhY2hlLAorICAgIGhvb2tfcmFsbG9jX2FyZ3NfdCAqaG9va19hcmdzKSB7CisJ ZWRhdGFfdCAqZWRhdGEgPSBlbWFwX2VkYXRhX2xvb2t1cCh0c2RuLCAmYXJlbmFfZW1hcF9nbG9i YWwsIHB0cik7CisKKwlzaXplX3Qgb2xkdXNpemUgPSBlZGF0YV91c2l6ZV9nZXQoZWRhdGEpOwor CS8qIFRoZSBmb2xsb3dpbmcgc2hvdWxkIGhhdmUgYmVlbiBjYXVnaHQgYnkgY2FsbGVycy4gKi8K Kwlhc3NlcnQodXNpemUgPiAwICYmIHVzaXplIDw9IFNDX0xBUkdFX01BWENMQVNTKTsKKwkvKiBC b3RoIGFsbG9jYXRpb24gc2l6ZXMgbXVzdCBiZSBsYXJnZSB0byBhdm9pZCBhIG1vdmUuICovCisJ YXNzZXJ0KG9sZHVzaXplID49IFNDX0xBUkdFX01JTkNMQVNTCisJICAgICYmIHVzaXplID49IFND X0xBUkdFX01JTkNMQVNTKTsKKworCS8qIFRyeSB0byBhdm9pZCBtb3ZpbmcgdGhlIGFsbG9jYXRp b24uICovCisJaWYgKCFsYXJnZV9yYWxsb2Nfbm9fbW92ZSh0c2RuLCBlZGF0YSwgdXNpemUsIHVz aXplLCB6ZXJvKSkgeworCQlob29rX2ludm9rZV9leHBhbmQoaG9va19hcmdzLT5pc19yZWFsbG9j CisJCSAgICA/IGhvb2tfZXhwYW5kX3JlYWxsb2MgOiBob29rX2V4cGFuZF9yYWxsb2N4LCBwdHIs IG9sZHVzaXplLAorCQkgICAgdXNpemUsICh1aW50cHRyX3QpcHRyLCBob29rX2FyZ3MtPmFyZ3Mp OworCQlyZXR1cm4gZWRhdGFfYWRkcl9nZXQoZWRhdGEpOworCX0KKworCS8qCisJICogdXNpemUg YW5kIG9sZCBzaXplIGFyZSBkaWZmZXJlbnQgZW5vdWdoIHRoYXQgd2UgbmVlZCB0byB1c2UgYQor CSAqIGRpZmZlcmVudCBzaXplIGNsYXNzLiAgSW4gdGhhdCBjYXNlLCBmYWxsIGJhY2sgdG8gYWxs b2NhdGluZyBuZXcKKwkgKiBzcGFjZSBhbmQgY29weWluZy4KKwkgKi8KKwl2b2lkICpyZXQgPSBs YXJnZV9yYWxsb2NfbW92ZV9oZWxwZXIodHNkbiwgYXJlbmEsIHVzaXplLCBhbGlnbm1lbnQsCisJ ICAgIHplcm8pOworCWlmIChyZXQgPT0gTlVMTCkgeworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlo b29rX2ludm9rZV9hbGxvYyhob29rX2FyZ3MtPmlzX3JlYWxsb2MKKwkgICAgPyBob29rX2FsbG9j X3JlYWxsb2MgOiBob29rX2FsbG9jX3JhbGxvY3gsIHJldCwgKHVpbnRwdHJfdClyZXQsCisJICAg IGhvb2tfYXJncy0+YXJncyk7CisJaG9va19pbnZva2VfZGFsbG9jKGhvb2tfYXJncy0+aXNfcmVh bGxvYworCSAgICA/IGhvb2tfZGFsbG9jX3JlYWxsb2MgOiBob29rX2RhbGxvY19yYWxsb2N4LCBw dHIsIGhvb2tfYXJncy0+YXJncyk7CisKKwlzaXplX3QgY29weXNpemUgPSAodXNpemUgPCBvbGR1 c2l6ZSkgPyB1c2l6ZSA6IG9sZHVzaXplOworCW1lbWNweShyZXQsIGVkYXRhX2FkZHJfZ2V0KGVk YXRhKSwgY29weXNpemUpOworCWlzZGFsbG9jdCh0c2RuLCBlZGF0YV9hZGRyX2dldChlZGF0YSks IG9sZHVzaXplLCB0Y2FjaGUsIE5VTEwsIHRydWUpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisg KiBsb2NrZWQgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIGFyZW5hJ3MgbGFyZ2VfbXR4IGlzIGN1cnJl bnRseSBoZWxkLgorICovCitzdGF0aWMgdm9pZAorbGFyZ2VfZGFsbG9jX3ByZXBfaW1wbCh0c2Ru X3QgKnRzZG4sIGFyZW5hX3QgKmFyZW5hLCBlZGF0YV90ICplZGF0YSwKKyAgICBib29sIGxvY2tl ZCkgeworCWlmICghbG9ja2VkKSB7CisJCS8qIFNlZSBjb21tZW50cyBpbiBhcmVuYV9iaW5fc2xh YnNfZnVsbF9pbnNlcnQoKS4gKi8KKwkJaWYgKCFhcmVuYV9pc19hdXRvKGFyZW5hKSkgeworCQkJ bWFsbG9jX211dGV4X2xvY2sodHNkbiwgJmFyZW5hLT5sYXJnZV9tdHgpOworCQkJZWRhdGFfbGlz dF9hY3RpdmVfcmVtb3ZlKCZhcmVuYS0+bGFyZ2UsIGVkYXRhKTsKKwkJCW1hbGxvY19tdXRleF91 bmxvY2sodHNkbiwgJmFyZW5hLT5sYXJnZV9tdHgpOworCQl9CisJfSBlbHNlIHsKKwkJLyogT25s eSBob2xkIHRoZSBsYXJnZV9tdHggaWYgbmVjZXNzYXJ5LiAqLworCQlpZiAoIWFyZW5hX2lzX2F1 dG8oYXJlbmEpKSB7CisJCQltYWxsb2NfbXV0ZXhfYXNzZXJ0X293bmVyKHRzZG4sICZhcmVuYS0+ bGFyZ2VfbXR4KTsKKwkJCWVkYXRhX2xpc3RfYWN0aXZlX3JlbW92ZSgmYXJlbmEtPmxhcmdlLCBl ZGF0YSk7CisJCX0KKwl9CisJYXJlbmFfZXh0ZW50X2RhbGxvY19sYXJnZV9wcmVwKHRzZG4sIGFy ZW5hLCBlZGF0YSk7Cit9CisKK3N0YXRpYyB2b2lkCitsYXJnZV9kYWxsb2NfZmluaXNoX2ltcGwo dHNkbl90ICp0c2RuLCBhcmVuYV90ICphcmVuYSwgZWRhdGFfdCAqZWRhdGEpIHsKKwlib29sIGRl ZmVycmVkX3dvcmtfZ2VuZXJhdGVkID0gZmFsc2U7CisJcGFfZGFsbG9jKHRzZG4sICZhcmVuYS0+ cGFfc2hhcmQsIGVkYXRhLCAmZGVmZXJyZWRfd29ya19nZW5lcmF0ZWQpOworCWlmIChkZWZlcnJl ZF93b3JrX2dlbmVyYXRlZCkgeworCQlhcmVuYV9oYW5kbGVfZGVmZXJyZWRfd29yayh0c2RuLCBh cmVuYSk7CisJfQorfQorCit2b2lkCitsYXJnZV9kYWxsb2NfcHJlcF9sb2NrZWQodHNkbl90ICp0 c2RuLCBlZGF0YV90ICplZGF0YSkgeworCWxhcmdlX2RhbGxvY19wcmVwX2ltcGwodHNkbiwgYXJl bmFfZ2V0X2Zyb21fZWRhdGEoZWRhdGEpLCBlZGF0YSwgdHJ1ZSk7Cit9CisKK3ZvaWQKK2xhcmdl X2RhbGxvY19maW5pc2godHNkbl90ICp0c2RuLCBlZGF0YV90ICplZGF0YSkgeworCWxhcmdlX2Rh bGxvY19maW5pc2hfaW1wbCh0c2RuLCBhcmVuYV9nZXRfZnJvbV9lZGF0YShlZGF0YSksIGVkYXRh KTsKK30KKwordm9pZAorbGFyZ2VfZGFsbG9jKHRzZG5fdCAqdHNkbiwgZWRhdGFfdCAqZWRhdGEp IHsKKwlhcmVuYV90ICphcmVuYSA9IGFyZW5hX2dldF9mcm9tX2VkYXRhKGVkYXRhKTsKKwlsYXJn ZV9kYWxsb2NfcHJlcF9pbXBsKHRzZG4sIGFyZW5hLCBlZGF0YSwgZmFsc2UpOworCWxhcmdlX2Rh bGxvY19maW5pc2hfaW1wbCh0c2RuLCBhcmVuYSwgZWRhdGEpOworCWFyZW5hX2RlY2F5X3RpY2so dHNkbiwgYXJlbmEpOworfQorCitzaXplX3QKK2xhcmdlX3NhbGxvYyh0c2RuX3QgKnRzZG4sIGNv bnN0IGVkYXRhX3QgKmVkYXRhKSB7CisJcmV0dXJuIGVkYXRhX3VzaXplX2dldChlZGF0YSk7Cit9 CisKK3ZvaWQKK2xhcmdlX3Byb2ZfaW5mb19nZXQodHNkX3QgKnRzZCwgZWRhdGFfdCAqZWRhdGEs IHByb2ZfaW5mb190ICpwcm9mX2luZm8sCisgICAgYm9vbCByZXNldF9yZWNlbnQpIHsKKwlhc3Nl cnQocHJvZl9pbmZvICE9IE5VTEwpOworCisJcHJvZl90Y3R4X3QgKmFsbG9jX3RjdHggPSBlZGF0 YV9wcm9mX3RjdHhfZ2V0KGVkYXRhKTsKKwlwcm9mX2luZm8tPmFsbG9jX3RjdHggPSBhbGxvY190 Y3R4OworCisJaWYgKCh1aW50cHRyX3QpYWxsb2NfdGN0eCA+ICh1aW50cHRyX3QpMVUpIHsKKwkJ bnN0aW1lX2NvcHkoJnByb2ZfaW5mby0+YWxsb2NfdGltZSwKKwkJICAgIGVkYXRhX3Byb2ZfYWxs b2NfdGltZV9nZXQoZWRhdGEpKTsKKwkJcHJvZl9pbmZvLT5hbGxvY19zaXplID0gZWRhdGFfcHJv Zl9hbGxvY19zaXplX2dldChlZGF0YSk7CisJCWlmIChyZXNldF9yZWNlbnQpIHsKKwkJCS8qCisJ CQkgKiBSZXNldCB0aGUgcG9pbnRlciBvbiB0aGUgcmVjZW50IGFsbG9jYXRpb24gcmVjb3JkLAor CQkJICogc28gdGhhdCB0aGlzIGFsbG9jYXRpb24gaXMgcmVjb3JkZWQgYXMgcmVsZWFzZWQuCisJ CQkgKi8KKwkJCXByb2ZfcmVjZW50X2FsbG9jX3Jlc2V0KHRzZCwgZWRhdGEpOworCQl9CisJfQor fQorCitzdGF0aWMgdm9pZAorbGFyZ2VfcHJvZl90Y3R4X3NldChlZGF0YV90ICplZGF0YSwgcHJv Zl90Y3R4X3QgKnRjdHgpIHsKKwllZGF0YV9wcm9mX3RjdHhfc2V0KGVkYXRhLCB0Y3R4KTsKK30K Kwordm9pZAorbGFyZ2VfcHJvZl90Y3R4X3Jlc2V0KGVkYXRhX3QgKmVkYXRhKSB7CisJbGFyZ2Vf cHJvZl90Y3R4X3NldChlZGF0YSwgKHByb2ZfdGN0eF90ICopKHVpbnRwdHJfdCkxVSk7Cit9CisK K3ZvaWQKK2xhcmdlX3Byb2ZfaW5mb19zZXQoZWRhdGFfdCAqZWRhdGEsIHByb2ZfdGN0eF90ICp0 Y3R4LCBzaXplX3Qgc2l6ZSkgeworCW5zdGltZV90IHQ7CisJbnN0aW1lX3Byb2ZfaW5pdF91cGRh dGUoJnQpOworCWVkYXRhX3Byb2ZfYWxsb2NfdGltZV9zZXQoZWRhdGEsICZ0KTsKKwllZGF0YV9w cm9mX2FsbG9jX3NpemVfc2V0KGVkYXRhLCBzaXplKTsKKwllZGF0YV9wcm9mX3JlY2VudF9hbGxv Y19pbml0KGVkYXRhKTsKKwlsYXJnZV9wcm9mX3RjdHhfc2V0KGVkYXRhLCB0Y3R4KTsKK30KCmRp ZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9zcmMvbG9n LmMgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9zcmMvbG9nLmMKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzc4OTAyZgotLS0gL2Rldi9udWxsCisr KyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3NyYy9sb2cuYwpAQCAt MCwwICsxLDc4IEBACisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvamVtYWxsb2NfcHJlYW1i bGUuaCIKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9qZW1hbGxvY19pbnRlcm5hbF9pbmNs dWRlcy5oIgorCisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvbG9nLmgiCisKK2NoYXIgbG9n X3Zhcl9uYW1lc1tKRU1BTExPQ19MT0dfVkFSX0JVRlNJWkVdOworYXRvbWljX2JfdCBsb2dfaW5p dF9kb25lID0gQVRPTUlDX0lOSVQoZmFsc2UpOworCisvKgorICogUmV0dXJucyB0cnVlIGlmIHdl IHdlcmUgYWJsZSB0byBwaWNrIG91dCBhIHNlZ21lbnQuICBGaWxscyBpbiByX3NlZ21lbnRfZW5k CisgKiB3aXRoIGEgcG9pbnRlciB0byB0aGUgZmlyc3QgY2hhcmFjdGVyIGFmdGVyIHRoZSBlbmQg b2YgdGhlIHN0cmluZy4KKyAqLworc3RhdGljIGNvbnN0IGNoYXIgKgorbG9nX3Zhcl9leHRyYWN0 X3NlZ21lbnQoY29uc3QgY2hhciogc2VnbWVudF9iZWdpbikgeworCWNvbnN0IGNoYXIgKmVuZDsK Kwlmb3IgKGVuZCA9IHNlZ21lbnRfYmVnaW47ICplbmQgIT0gJ1wwJyAmJiAqZW5kICE9ICd8Jzsg ZW5kKyspIHsKKwl9CisJcmV0dXJuIGVuZDsKK30KKworc3RhdGljIGJvb2wKK2xvZ192YXJfbWF0 Y2hlc19zZWdtZW50KGNvbnN0IGNoYXIgKnNlZ21lbnRfYmVnaW4sIGNvbnN0IGNoYXIgKnNlZ21l bnRfZW5kLAorICAgIGNvbnN0IGNoYXIgKmxvZ192YXJfYmVnaW4sIGNvbnN0IGNoYXIgKmxvZ192 YXJfZW5kKSB7CisJYXNzZXJ0KHNlZ21lbnRfYmVnaW4gPD0gc2VnbWVudF9lbmQpOworCWFzc2Vy dChsb2dfdmFyX2JlZ2luIDwgbG9nX3Zhcl9lbmQpOworCisJcHRyZGlmZl90IHNlZ21lbnRfbGVu ID0gc2VnbWVudF9lbmQgLSBzZWdtZW50X2JlZ2luOworCXB0cmRpZmZfdCBsb2dfdmFyX2xlbiA9 IGxvZ192YXJfZW5kIC0gbG9nX3Zhcl9iZWdpbjsKKwkvKiBUaGUgc3BlY2lhbCAnLicgc2VnbWVu dCBtYXRjaGVzIGV2ZXJ5dGhpbmcuICovCisJaWYgKHNlZ21lbnRfbGVuID09IDEgJiYgKnNlZ21l bnRfYmVnaW4gPT0gJy4nKSB7CisJCXJldHVybiB0cnVlOworCX0KKyAgICAgICAgaWYgKHNlZ21l bnRfbGVuID09IGxvZ192YXJfbGVuKSB7CisJCXJldHVybiBzdHJuY21wKHNlZ21lbnRfYmVnaW4s IGxvZ192YXJfYmVnaW4sIHNlZ21lbnRfbGVuKSA9PSAwOworCX0gZWxzZSBpZiAoc2VnbWVudF9s ZW4gPCBsb2dfdmFyX2xlbikgeworCQlyZXR1cm4gc3RybmNtcChzZWdtZW50X2JlZ2luLCBsb2df dmFyX2JlZ2luLCBzZWdtZW50X2xlbikgPT0gMAorCQkgICAgJiYgbG9nX3Zhcl9iZWdpbltzZWdt ZW50X2xlbl0gPT0gJy4nOworICAgICAgICB9IGVsc2UgeworCQlyZXR1cm4gZmFsc2U7CisJfQor fQorCit1bnNpZ25lZAorbG9nX3Zhcl91cGRhdGVfc3RhdGUobG9nX3Zhcl90ICpsb2dfdmFyKSB7 CisJY29uc3QgY2hhciAqbG9nX3Zhcl9iZWdpbiA9IGxvZ192YXItPm5hbWU7CisJY29uc3QgY2hh ciAqbG9nX3Zhcl9lbmQgPSBsb2dfdmFyLT5uYW1lICsgc3RybGVuKGxvZ192YXItPm5hbWUpOwor CisJLyogUG9pbnRlciB0byBvbmUgYmVmb3JlIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGN1cnJlbnQg c2VnbWVudC4gKi8KKwljb25zdCBjaGFyICpzZWdtZW50X2JlZ2luID0gbG9nX3Zhcl9uYW1lczsK KworCS8qCisJICogSWYgbG9nX2luaXQgZG9uZSBpcyBmYWxzZSwgd2UgaGF2ZW4ndCBwYXJzZWQg dGhlIG1hbGxvYyBjb25mIHlldC4gIFRvCisJICogYXZvaWQgbG9nLXNwZXcsIHdlIGRlZmF1bHQg dG8gbm90IGRpc3BsYXlpbmcgYW55dGhpbmcuCisJICovCisJaWYgKCFhdG9taWNfbG9hZF9iKCZs b2dfaW5pdF9kb25lLCBBVE9NSUNfQUNRVUlSRSkpIHsKKwkJcmV0dXJuIExPR19JTklUSUFMSVpF RF9OT1RfRU5BQkxFRDsKKwl9CisKKwl3aGlsZSAodHJ1ZSkgeworCQljb25zdCBjaGFyICpzZWdt ZW50X2VuZCA9IGxvZ192YXJfZXh0cmFjdF9zZWdtZW50KAorCQkgICAgc2VnbWVudF9iZWdpbik7 CisJCWFzc2VydChzZWdtZW50X2VuZCA8IGxvZ192YXJfbmFtZXMgKyBKRU1BTExPQ19MT0dfVkFS X0JVRlNJWkUpOworCQlpZiAobG9nX3Zhcl9tYXRjaGVzX3NlZ21lbnQoc2VnbWVudF9iZWdpbiwg c2VnbWVudF9lbmQsCisJCSAgICBsb2dfdmFyX2JlZ2luLCBsb2dfdmFyX2VuZCkpIHsKKwkJCWF0 b21pY19zdG9yZV91KCZsb2dfdmFyLT5zdGF0ZSwgTE9HX0VOQUJMRUQsCisJCQkgICAgQVRPTUlD X1JFTEFYRUQpOworCQkJcmV0dXJuIExPR19FTkFCTEVEOworCQl9CisJCWlmICgqc2VnbWVudF9l bmQgPT0gJ1wwJykgeworCQkJLyogSGl0IHRoZSBlbmQgb2YgdGhlIHNlZ21lbnQgc3RyaW5nIHdp dGggbm8gbWF0Y2guICovCisJCQlhdG9taWNfc3RvcmVfdSgmbG9nX3Zhci0+c3RhdGUsCisJCQkg ICAgTE9HX0lOSVRJQUxJWkVEX05PVF9FTkFCTEVELCBBVE9NSUNfUkVMQVhFRCk7CisJCQlyZXR1 cm4gTE9HX0lOSVRJQUxJWkVEX05PVF9FTkFCTEVEOworCQl9CisJCS8qIE90aGVyd2lzZSwgc2tp cCB0aGUgZGVsaW1pdGVyIGFuZCBjb250aW51ZS4gKi8KKwkJc2VnbWVudF9iZWdpbiA9IHNlZ21l bnRfZW5kICsgMTsKKwl9Cit9CgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQv amVtYWxsb2MtNS4zLjAvc3JjL21hbGxvY19pby5jIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQv amVtYWxsb2MtNS4zLjAvc3JjL21hbGxvY19pby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAuLmI3Njg4NWMKLS0tIC9kZXYvbnVsbAorKysgYi8zODktZHMtYmFzZS0zLjMuMC1i dWlsZC9qZW1hbGxvYy01LjMuMC9zcmMvbWFsbG9jX2lvLmMKQEAgLTAsMCArMSw2OTcgQEAKKyNp bmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9qZW1hbGxvY19wcmVhbWJsZS5oIgorI2luY2x1ZGUg ImplbWFsbG9jL2ludGVybmFsL2plbWFsbG9jX2ludGVybmFsX2luY2x1ZGVzLmgiCisKKyNpbmNs dWRlICJqZW1hbGxvYy9pbnRlcm5hbC9tYWxsb2NfaW8uaCIKKyNpbmNsdWRlICJqZW1hbGxvYy9p bnRlcm5hbC91dGlsLmgiCisKKyNpZmRlZiBhc3NlcnQKKyMgIHVuZGVmIGFzc2VydAorI2VuZGlm CisjaWZkZWYgbm90X3JlYWNoZWQKKyMgIHVuZGVmIG5vdF9yZWFjaGVkCisjZW5kaWYKKyNpZmRl ZiBub3RfaW1wbGVtZW50ZWQKKyMgIHVuZGVmIG5vdF9pbXBsZW1lbnRlZAorI2VuZGlmCisjaWZk ZWYgYXNzZXJ0X25vdF9pbXBsZW1lbnRlZAorIyAgdW5kZWYgYXNzZXJ0X25vdF9pbXBsZW1lbnRl ZAorI2VuZGlmCisKKy8qCisgKiBEZWZpbmUgc2ltcGxlIHZlcnNpb25zIG9mIGFzc2VydGlvbiBt YWNyb3MgdGhhdCB3b24ndCByZWN1cnNlIGluIGNhc2UKKyAqIG9mIGFzc2VydGlvbiBmYWlsdXJl cyBpbiBtYWxsb2NfKnByaW50ZigpLgorICovCisjZGVmaW5lIGFzc2VydChlKSBkbyB7CQkJCQkJ CVwKKwlpZiAoY29uZmlnX2RlYnVnICYmICEoZSkpIHsJCQkJCVwKKwkJbWFsbG9jX3dyaXRlKCI8 amVtYWxsb2M+OiBGYWlsZWQgYXNzZXJ0aW9uXG4iKTsJCVwKKwkJYWJvcnQoKTsJCQkJCQlcCisJ fQkJCQkJCQkJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBub3RfcmVhY2hlZCgpIGRvIHsJCQkJ CQlcCisJaWYgKGNvbmZpZ19kZWJ1ZykgewkJCQkJCVwKKwkJbWFsbG9jX3dyaXRlKCI8amVtYWxs b2M+OiBVbnJlYWNoYWJsZSBjb2RlIHJlYWNoZWRcbiIpOwlcCisJCWFib3J0KCk7CQkJCQkJXAor CX0JCQkJCQkJCVwKKwl1bnJlYWNoYWJsZSgpOwkJCQkJCQlcCit9IHdoaWxlICgwKQorCisjZGVm aW5lIG5vdF9pbXBsZW1lbnRlZCgpIGRvIHsJCQkJCQlcCisJaWYgKGNvbmZpZ19kZWJ1ZykgewkJ CQkJCVwKKwkJbWFsbG9jX3dyaXRlKCI8amVtYWxsb2M+OiBOb3QgaW1wbGVtZW50ZWRcbiIpOwkJ XAorCQlhYm9ydCgpOwkJCQkJCVwKKwl9CQkJCQkJCQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5l IGFzc2VydF9ub3RfaW1wbGVtZW50ZWQoZSkgZG8gewkJCQkJXAorCWlmICh1bmxpa2VseShjb25m aWdfZGVidWcgJiYgIShlKSkpIHsJCQkJXAorCQlub3RfaW1wbGVtZW50ZWQoKTsJCQkJCVwKKwl9 CQkJCQkJCQlcCit9IHdoaWxlICgwKQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogRnVu Y3Rpb24gcHJvdG90eXBlcyBmb3Igbm9uLWlubGluZSBzdGF0aWMgZnVuY3Rpb25zLiAqLworCisj ZGVmaW5lIFUyU19CVUZTSVpFICgoMVUgPDwgKExHX1NJWkVPRl9JTlRNQVhfVCArIDMpKSArIDEp CitzdGF0aWMgY2hhciAqdTJzKHVpbnRtYXhfdCB4LCB1bnNpZ25lZCBiYXNlLCBib29sIHVwcGVy Y2FzZSwgY2hhciAqcywKKyAgICBzaXplX3QgKnNsZW5fcCk7CisjZGVmaW5lIEQyU19CVUZTSVpF ICgxICsgVTJTX0JVRlNJWkUpCitzdGF0aWMgY2hhciAqZDJzKGludG1heF90IHgsIGNoYXIgc2ln biwgY2hhciAqcywgc2l6ZV90ICpzbGVuX3ApOworI2RlZmluZSBPMlNfQlVGU0laRSAoMSArIFUy U19CVUZTSVpFKQorc3RhdGljIGNoYXIgKm8ycyh1aW50bWF4X3QgeCwgYm9vbCBhbHRfZm9ybSwg Y2hhciAqcywgc2l6ZV90ICpzbGVuX3ApOworI2RlZmluZSBYMlNfQlVGU0laRSAoMiArIFUyU19C VUZTSVpFKQorc3RhdGljIGNoYXIgKngycyh1aW50bWF4X3QgeCwgYm9vbCBhbHRfZm9ybSwgYm9v bCB1cHBlcmNhc2UsIGNoYXIgKnMsCisgICAgc2l6ZV90ICpzbGVuX3ApOworCisvKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqLworCisvKiBtYWxsb2NfbWVzc2FnZSgpIHNldHVwLiAqLwordm9pZAord3J0 bWVzc2FnZSh2b2lkICpjYm9wYXF1ZSwgY29uc3QgY2hhciAqcykgeworCW1hbGxvY193cml0ZV9m ZChTVERFUlJfRklMRU5PLCBzLCBzdHJsZW4ocykpOworfQorCitKRU1BTExPQ19FWFBPUlQgdm9p ZAkoKmplX21hbGxvY19tZXNzYWdlKSh2b2lkICosIGNvbnN0IGNoYXIgKnMpOworCisvKgorICog V3JhcHBlciBhcm91bmQgbWFsbG9jX21lc3NhZ2UoKSB0aGF0IGF2b2lkcyB0aGUgbmVlZCBmb3IK KyAqIGplX21hbGxvY19tZXNzYWdlKC4uLikgdGhyb3VnaG91dCB0aGUgY29kZS4KKyAqLwordm9p ZAorbWFsbG9jX3dyaXRlKGNvbnN0IGNoYXIgKnMpIHsKKwlpZiAoamVfbWFsbG9jX21lc3NhZ2Ug IT0gTlVMTCkgeworCQlqZV9tYWxsb2NfbWVzc2FnZShOVUxMLCBzKTsKKwl9IGVsc2UgeworCQl3 cnRtZXNzYWdlKE5VTEwsIHMpOworCX0KK30KKworLyoKKyAqIGdsaWJjIHByb3ZpZGVzIGEgbm9u LXN0YW5kYXJkIHN0cmVycm9yX3IoKSB3aGVuIF9HTlVfU09VUkNFIGlzIGRlZmluZWQsIHNvCisg KiBwcm92aWRlIGEgd3JhcHBlci4KKyAqLworaW50CitidWZlcnJvcihpbnQgZXJyLCBjaGFyICpi dWYsIHNpemVfdCBidWZsZW4pIHsKKyNpZmRlZiBfV0lOMzIKKwlGb3JtYXRNZXNzYWdlQShGT1JN QVRfTUVTU0FHRV9GUk9NX1NZU1RFTSwgTlVMTCwgZXJyLCAwLAorCSAgICAoTFBTVFIpYnVmLCAo RFdPUkQpYnVmbGVuLCBOVUxMKTsKKwlyZXR1cm4gMDsKKyNlbGlmIGRlZmluZWQoSkVNQUxMT0Nf U1RSRVJST1JfUl9SRVRVUk5TX0NIQVJfV0lUSF9HTlVfU09VUkNFKSAmJiBkZWZpbmVkKF9HTlVf U09VUkNFKQorCWNoYXIgKmIgPSBzdHJlcnJvcl9yKGVyciwgYnVmLCBidWZsZW4pOworCWlmIChi ICE9IGJ1ZikgeworCQlzdHJuY3B5KGJ1ZiwgYiwgYnVmbGVuKTsKKwkJYnVmW2J1Zmxlbi0xXSA9 ICdcMCc7CisJfQorCXJldHVybiAwOworI2Vsc2UKKwlyZXR1cm4gc3RyZXJyb3JfcihlcnIsIGJ1 ZiwgYnVmbGVuKTsKKyNlbmRpZgorfQorCit1aW50bWF4X3QKK21hbGxvY19zdHJ0b3VtYXgoY29u c3QgY2hhciAqcmVzdHJpY3QgbnB0ciwgY2hhciAqKnJlc3RyaWN0IGVuZHB0ciwgaW50IGJhc2Up IHsKKwl1aW50bWF4X3QgcmV0LCBkaWdpdDsKKwl1bnNpZ25lZCBiOworCWJvb2wgbmVnOworCWNv bnN0IGNoYXIgKnAsICpuczsKKworCXAgPSBucHRyOworCWlmIChiYXNlIDwgMCB8fCBiYXNlID09 IDEgfHwgYmFzZSA+IDM2KSB7CisJCW5zID0gcDsKKwkJc2V0X2Vycm5vKEVJTlZBTCk7CisJCXJl dCA9IFVJTlRNQVhfTUFYOworCQlnb3RvIGxhYmVsX3JldHVybjsKKwl9CisJYiA9IGJhc2U7CisK KwkvKiBTd2FsbG93IGxlYWRpbmcgd2hpdGVzcGFjZSBhbmQgZ2V0IHNpZ24sIGlmIGFueS4gKi8K KwluZWcgPSBmYWxzZTsKKwl3aGlsZSAodHJ1ZSkgeworCQlzd2l0Y2ggKCpwKSB7CisJCWNhc2Ug J1x0JzogY2FzZSAnXG4nOiBjYXNlICdcdic6IGNhc2UgJ1xmJzogY2FzZSAnXHInOiBjYXNlICcg JzoKKwkJCXArKzsKKwkJCWJyZWFrOworCQljYXNlICctJzoKKwkJCW5lZyA9IHRydWU7CisJCQlK RU1BTExPQ19GQUxMVEhST1VHSDsKKwkJY2FzZSAnKyc6CisJCQlwKys7CisJCQlKRU1BTExPQ19G QUxMVEhST1VHSDsKKwkJZGVmYXVsdDoKKwkJCWdvdG8gbGFiZWxfcHJlZml4OworCQl9CisJfQor CisJLyogR2V0IHByZWZpeCwgaWYgYW55LiAqLworCWxhYmVsX3ByZWZpeDoKKwkvKgorCSAqIE5v dGUgd2hlcmUgdGhlIGZpcnN0IG5vbi13aGl0ZXNwYWNlL3NpZ24gY2hhcmFjdGVyIGlzIHNvIHRo YXQgaXQgaXMKKwkgKiBwb3NzaWJsZSB0byB0ZWxsIHdoZXRoZXIgYW55IGRpZ2l0cyBhcmUgY29u c3VtZWQgKGUuZy4sICIgIDAiIHZzLgorCSAqICIgIC14IikuCisJICovCisJbnMgPSBwOworCWlm ICgqcCA9PSAnMCcpIHsKKwkJc3dpdGNoIChwWzFdKSB7CisJCWNhc2UgJzAnOiBjYXNlICcxJzog Y2FzZSAnMic6IGNhc2UgJzMnOiBjYXNlICc0JzogY2FzZSAnNSc6CisJCWNhc2UgJzYnOiBjYXNl ICc3JzoKKwkJCWlmIChiID09IDApIHsKKwkJCQliID0gODsKKwkJCX0KKwkJCWlmIChiID09IDgp IHsKKwkJCQlwKys7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSAnWCc6IGNhc2UgJ3gnOgorCQkJ c3dpdGNoIChwWzJdKSB7CisJCQljYXNlICcwJzogY2FzZSAnMSc6IGNhc2UgJzInOiBjYXNlICcz JzogY2FzZSAnNCc6CisJCQljYXNlICc1JzogY2FzZSAnNic6IGNhc2UgJzcnOiBjYXNlICc4Jzog Y2FzZSAnOSc6CisJCQljYXNlICdBJzogY2FzZSAnQic6IGNhc2UgJ0MnOiBjYXNlICdEJzogY2Fz ZSAnRSc6CisJCQljYXNlICdGJzoKKwkJCWNhc2UgJ2EnOiBjYXNlICdiJzogY2FzZSAnYyc6IGNh c2UgJ2QnOiBjYXNlICdlJzoKKwkJCWNhc2UgJ2YnOgorCQkJCWlmIChiID09IDApIHsKKwkJCQkJ YiA9IDE2OworCQkJCX0KKwkJCQlpZiAoYiA9PSAxNikgeworCQkJCQlwICs9IDI7CisJCQkJfQor CQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlicmVhazsKKwkJCX0KKwkJCWJyZWFrOworCQlk ZWZhdWx0OgorCQkJcCsrOworCQkJcmV0ID0gMDsKKwkJCWdvdG8gbGFiZWxfcmV0dXJuOworCQl9 CisJfQorCWlmIChiID09IDApIHsKKwkJYiA9IDEwOworCX0KKworCS8qIENvbnZlcnQuICovCisJ cmV0ID0gMDsKKwl3aGlsZSAoKCpwID49ICcwJyAmJiAqcCA8PSAnOScgJiYgKGRpZ2l0ID0gKnAg LSAnMCcpIDwgYikKKwkgICAgfHwgKCpwID49ICdBJyAmJiAqcCA8PSAnWicgJiYgKGRpZ2l0ID0g MTAgKyAqcCAtICdBJykgPCBiKQorCSAgICB8fCAoKnAgPj0gJ2EnICYmICpwIDw9ICd6JyAmJiAo ZGlnaXQgPSAxMCArICpwIC0gJ2EnKSA8IGIpKSB7CisJCXVpbnRtYXhfdCBwcmV0ID0gcmV0Owor CQlyZXQgKj0gYjsKKwkJcmV0ICs9IGRpZ2l0OworCQlpZiAocmV0IDwgcHJldCkgeworCQkJLyog T3ZlcmZsb3cuICovCisJCQlzZXRfZXJybm8oRVJBTkdFKTsKKwkJCXJldCA9IFVJTlRNQVhfTUFY OworCQkJZ290byBsYWJlbF9yZXR1cm47CisJCX0KKwkJcCsrOworCX0KKwlpZiAobmVnKSB7CisJ CXJldCA9ICh1aW50bWF4X3QpKC0oKGludG1heF90KXJldCkpOworCX0KKworCWlmIChwID09IG5z KSB7CisJCS8qIE5vIGNvbnZlcnNpb24gcGVyZm9ybWVkLiAqLworCQlzZXRfZXJybm8oRUlOVkFM KTsKKwkJcmV0ID0gVUlOVE1BWF9NQVg7CisJCWdvdG8gbGFiZWxfcmV0dXJuOworCX0KKworbGFi ZWxfcmV0dXJuOgorCWlmIChlbmRwdHIgIT0gTlVMTCkgeworCQlpZiAocCA9PSBucykgeworCQkJ LyogTm8gY2hhcmFjdGVycyB3ZXJlIGNvbnZlcnRlZC4gKi8KKwkJCSplbmRwdHIgPSAoY2hhciAq KW5wdHI7CisJCX0gZWxzZSB7CisJCQkqZW5kcHRyID0gKGNoYXIgKilwOworCQl9CisJfQorCXJl dHVybiByZXQ7Cit9CisKK3N0YXRpYyBjaGFyICoKK3Uycyh1aW50bWF4X3QgeCwgdW5zaWduZWQg YmFzZSwgYm9vbCB1cHBlcmNhc2UsIGNoYXIgKnMsIHNpemVfdCAqc2xlbl9wKSB7CisJdW5zaWdu ZWQgaTsKKworCWkgPSBVMlNfQlVGU0laRSAtIDE7CisJc1tpXSA9ICdcMCc7CisJc3dpdGNoIChi YXNlKSB7CisJY2FzZSAxMDoKKwkJZG8geworCQkJaS0tOworCQkJc1tpXSA9ICIwMTIzNDU2Nzg5 Ilt4ICUgKHVpbnQ2NF90KTEwXTsKKwkJCXggLz0gKHVpbnQ2NF90KTEwOworCQl9IHdoaWxlICh4 ID4gMCk7CisJCWJyZWFrOworCWNhc2UgMTY6IHsKKwkJY29uc3QgY2hhciAqZGlnaXRzID0gKHVw cGVyY2FzZSkKKwkJICAgID8gIjAxMjM0NTY3ODlBQkNERUYiCisJCSAgICA6ICIwMTIzNDU2Nzg5 YWJjZGVmIjsKKworCQlkbyB7CisJCQlpLS07CisJCQlzW2ldID0gZGlnaXRzW3ggJiAweGZdOwor CQkJeCA+Pj0gNDsKKwkJfSB3aGlsZSAoeCA+IDApOworCQlicmVhazsKKwl9IGRlZmF1bHQ6IHsK KwkJY29uc3QgY2hhciAqZGlnaXRzID0gKHVwcGVyY2FzZSkKKwkJICAgID8gIjAxMjM0NTY3ODlB QkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiIKKwkJICAgIDogIjAxMjM0NTY3ODlhYmNkZWZnaGlq a2xtbm9wcXJzdHV2d3h5eiI7CisKKwkJYXNzZXJ0KGJhc2UgPj0gMiAmJiBiYXNlIDw9IDM2KTsK KwkJZG8geworCQkJaS0tOworCQkJc1tpXSA9IGRpZ2l0c1t4ICUgKHVpbnQ2NF90KWJhc2VdOwor CQkJeCAvPSAodWludDY0X3QpYmFzZTsKKwkJfSB3aGlsZSAoeCA+IDApOworCX19CisKKwkqc2xl bl9wID0gVTJTX0JVRlNJWkUgLSAxIC0gaTsKKwlyZXR1cm4gJnNbaV07Cit9CisKK3N0YXRpYyBj aGFyICoKK2QycyhpbnRtYXhfdCB4LCBjaGFyIHNpZ24sIGNoYXIgKnMsIHNpemVfdCAqc2xlbl9w KSB7CisJYm9vbCBuZWc7CisKKwlpZiAoKG5lZyA9ICh4IDwgMCkpKSB7CisJCXggPSAteDsKKwl9 CisJcyA9IHUycyh4LCAxMCwgZmFsc2UsIHMsIHNsZW5fcCk7CisJaWYgKG5lZykgeworCQlzaWdu ID0gJy0nOworCX0KKwlzd2l0Y2ggKHNpZ24pIHsKKwljYXNlICctJzoKKwkJaWYgKCFuZWcpIHsK KwkJCWJyZWFrOworCQl9CisJCUpFTUFMTE9DX0ZBTExUSFJPVUdIOworCWNhc2UgJyAnOgorCWNh c2UgJysnOgorCQlzLS07CisJCSgqc2xlbl9wKSsrOworCQkqcyA9IHNpZ247CisJCWJyZWFrOwor CWRlZmF1bHQ6IG5vdF9yZWFjaGVkKCk7CisJfQorCXJldHVybiBzOworfQorCitzdGF0aWMgY2hh ciAqCitvMnModWludG1heF90IHgsIGJvb2wgYWx0X2Zvcm0sIGNoYXIgKnMsIHNpemVfdCAqc2xl bl9wKSB7CisJcyA9IHUycyh4LCA4LCBmYWxzZSwgcywgc2xlbl9wKTsKKwlpZiAoYWx0X2Zvcm0g JiYgKnMgIT0gJzAnKSB7CisJCXMtLTsKKwkJKCpzbGVuX3ApKys7CisJCSpzID0gJzAnOworCX0K KwlyZXR1cm4gczsKK30KKworc3RhdGljIGNoYXIgKgoreDJzKHVpbnRtYXhfdCB4LCBib29sIGFs dF9mb3JtLCBib29sIHVwcGVyY2FzZSwgY2hhciAqcywgc2l6ZV90ICpzbGVuX3ApIHsKKwlzID0g dTJzKHgsIDE2LCB1cHBlcmNhc2UsIHMsIHNsZW5fcCk7CisJaWYgKGFsdF9mb3JtKSB7CisJCXMg LT0gMjsKKwkJKCpzbGVuX3ApICs9IDI7CisJCW1lbWNweShzLCB1cHBlcmNhc2UgPyAiMFgiIDog IjB4IiwgMik7CisJfQorCXJldHVybiBzOworfQorCitKRU1BTExPQ19DT0xECitzaXplX3QKK21h bGxvY192c25wcmludGYoY2hhciAqc3RyLCBzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciAqZm9ybWF0 LCB2YV9saXN0IGFwKSB7CisJc2l6ZV90IGk7CisJY29uc3QgY2hhciAqZjsKKworI2RlZmluZSBB UFBFTkRfQyhjKSBkbyB7CQkJCQkJXAorCWlmIChpIDwgc2l6ZSkgewkJCQkJCQlcCisJCXN0cltp XSA9IChjKTsJCQkJCQlcCisJfQkJCQkJCQkJXAorCWkrKzsJCQkJCQkJCVwKK30gd2hpbGUgKDAp CisjZGVmaW5lIEFQUEVORF9TKHMsIHNsZW4pIGRvIHsJCQkJCQlcCisJaWYgKGkgPCBzaXplKSB7 CQkJCQkJCVwKKwkJc2l6ZV90IGNweWxlbiA9IChzbGVuIDw9IHNpemUgLSBpKSA/IHNsZW4gOiBz aXplIC0gaTsJXAorCQltZW1jcHkoJnN0cltpXSwgcywgY3B5bGVuKTsJCQkJXAorCX0JCQkJCQkJ CVwKKwlpICs9IHNsZW47CQkJCQkJCVwKK30gd2hpbGUgKDApCisjZGVmaW5lIEFQUEVORF9QQURE RURfUyhzLCBzbGVuLCB3aWR0aCwgbGVmdF9qdXN0aWZ5KSBkbyB7CQlcCisJLyogTGVmdCBwYWRk aW5nLiAqLwkJCQkJCVwKKwlzaXplX3QgcGFkX2xlbiA9ICh3aWR0aCA9PSAtMSkgPyAwIDogKChz bGVuIDwgKHNpemVfdCl3aWR0aCkgPwlcCisJICAgIChzaXplX3Qpd2lkdGggLSBzbGVuIDogMCk7 CQkJCQlcCisJaWYgKCFsZWZ0X2p1c3RpZnkgJiYgcGFkX2xlbiAhPSAwKSB7CQkJCVwKKwkJc2l6 ZV90IGo7CQkJCQkJXAorCQlmb3IgKGogPSAwOyBqIDwgcGFkX2xlbjsgaisrKSB7CQkJCVwKKwkJ CWlmIChwYWRfemVybykgewkJCQkJXAorCQkJCUFQUEVORF9DKCcwJyk7CQkJCVwKKwkJCX0gZWxz ZSB7CQkJCQlcCisJCQkJQVBQRU5EX0MoJyAnKTsJCQkJXAorCQkJfQkJCQkJCVwKKwkJfQkJCQkJ CQlcCisJfQkJCQkJCQkJXAorCS8qIFZhbHVlLiAqLwkJCQkJCQlcCisJQVBQRU5EX1Mocywgc2xl bik7CQkJCQkJXAorCS8qIFJpZ2h0IHBhZGRpbmcuICovCQkJCQkJXAorCWlmIChsZWZ0X2p1c3Rp ZnkgJiYgcGFkX2xlbiAhPSAwKSB7CQkJCVwKKwkJc2l6ZV90IGo7CQkJCQkJXAorCQlmb3IgKGog PSAwOyBqIDwgcGFkX2xlbjsgaisrKSB7CQkJCVwKKwkJCUFQUEVORF9DKCcgJyk7CQkJCQlcCisJ CX0JCQkJCQkJXAorCX0JCQkJCQkJCVwKK30gd2hpbGUgKDApCisjZGVmaW5lIEdFVF9BUkdfTlVN RVJJQyh2YWwsIGxlbikgZG8gewkJCQkJXAorCXN3aXRjaCAoKHVuc2lnbmVkIGNoYXIpbGVuKSB7 CQkJCQlcCisJY2FzZSAnPyc6CQkJCQkJCVwKKwkJdmFsID0gdmFfYXJnKGFwLCBpbnQpOwkJCQkJ XAorCQlicmVhazsJCQkJCQkJXAorCWNhc2UgJz8nIHwgMHg4MDoJCQkJCQlcCisJCXZhbCA9IHZh X2FyZyhhcCwgdW5zaWduZWQgaW50KTsJCQkJXAorCQlicmVhazsJCQkJCQkJXAorCWNhc2UgJ2wn OgkJCQkJCQlcCisJCXZhbCA9IHZhX2FyZyhhcCwgbG9uZyk7CQkJCQlcCisJCWJyZWFrOwkJCQkJ CQlcCisJY2FzZSAnbCcgfCAweDgwOgkJCQkJCVwKKwkJdmFsID0gdmFfYXJnKGFwLCB1bnNpZ25l ZCBsb25nKTsJCQlcCisJCWJyZWFrOwkJCQkJCQlcCisJY2FzZSAncSc6CQkJCQkJCVwKKwkJdmFs ID0gdmFfYXJnKGFwLCBsb25nIGxvbmcpOwkJCQlcCisJCWJyZWFrOwkJCQkJCQlcCisJY2FzZSAn cScgfCAweDgwOgkJCQkJCVwKKwkJdmFsID0gdmFfYXJnKGFwLCB1bnNpZ25lZCBsb25nIGxvbmcp OwkJCVwKKwkJYnJlYWs7CQkJCQkJCVwKKwljYXNlICdqJzoJCQkJCQkJXAorCQl2YWwgPSB2YV9h cmcoYXAsIGludG1heF90KTsJCQkJXAorCQlicmVhazsJCQkJCQkJXAorCWNhc2UgJ2onIHwgMHg4 MDoJCQkJCQlcCisJCXZhbCA9IHZhX2FyZyhhcCwgdWludG1heF90KTsJCQkJXAorCQlicmVhazsJ CQkJCQkJXAorCWNhc2UgJ3QnOgkJCQkJCQlcCisJCXZhbCA9IHZhX2FyZyhhcCwgcHRyZGlmZl90 KTsJCQkJXAorCQlicmVhazsJCQkJCQkJXAorCWNhc2UgJ3onOgkJCQkJCQlcCisJCXZhbCA9IHZh X2FyZyhhcCwgc3NpemVfdCk7CQkJCVwKKwkJYnJlYWs7CQkJCQkJCVwKKwljYXNlICd6JyB8IDB4 ODA6CQkJCQkJXAorCQl2YWwgPSB2YV9hcmcoYXAsIHNpemVfdCk7CQkJCVwKKwkJYnJlYWs7CQkJ CQkJCVwKKwljYXNlICdwJzogLyogU3ludGhldGljOyB1c2VkIGZvciAlcC4gKi8JCQkJXAorCQl2 YWwgPSB2YV9hcmcoYXAsIHVpbnRwdHJfdCk7CQkJCVwKKwkJYnJlYWs7CQkJCQkJCVwKKwlkZWZh dWx0OgkJCQkJCQlcCisJCW5vdF9yZWFjaGVkKCk7CQkJCQkJXAorCQl2YWwgPSAwOwkJCQkJCVwK Kwl9CQkJCQkJCQlcCit9IHdoaWxlICgwKQorCisJaSA9IDA7CisJZiA9IGZvcm1hdDsKKwl3aGls ZSAodHJ1ZSkgeworCQlzd2l0Y2ggKCpmKSB7CisJCWNhc2UgJ1wwJzogZ290byBsYWJlbF9vdXQ7 CisJCWNhc2UgJyUnOiB7CisJCQlib29sIGFsdF9mb3JtID0gZmFsc2U7CisJCQlib29sIGxlZnRf anVzdGlmeSA9IGZhbHNlOworCQkJYm9vbCBwbHVzX3NwYWNlID0gZmFsc2U7CisJCQlib29sIHBs dXNfcGx1cyA9IGZhbHNlOworCQkJaW50IHByZWMgPSAtMTsKKwkJCWludCB3aWR0aCA9IC0xOwor CQkJdW5zaWduZWQgY2hhciBsZW4gPSAnPyc7CisJCQljaGFyICpzOworCQkJc2l6ZV90IHNsZW47 CisJCQlib29sIGZpcnN0X3dpZHRoX2RpZ2l0ID0gdHJ1ZTsKKwkJCWJvb2wgcGFkX3plcm8gPSBm YWxzZTsKKworCQkJZisrOworCQkJLyogRmxhZ3MuICovCisJCQl3aGlsZSAodHJ1ZSkgeworCQkJ CXN3aXRjaCAoKmYpIHsKKwkJCQljYXNlICcjJzoKKwkJCQkJYXNzZXJ0KCFhbHRfZm9ybSk7CisJ CQkJCWFsdF9mb3JtID0gdHJ1ZTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSAnLSc6CisJCQkJCWFz c2VydCghbGVmdF9qdXN0aWZ5KTsKKwkJCQkJbGVmdF9qdXN0aWZ5ID0gdHJ1ZTsKKwkJCQkJYnJl YWs7CisJCQkJY2FzZSAnICc6CisJCQkJCWFzc2VydCghcGx1c19zcGFjZSk7CisJCQkJCXBsdXNf c3BhY2UgPSB0cnVlOworCQkJCQlicmVhazsKKwkJCQljYXNlICcrJzoKKwkJCQkJYXNzZXJ0KCFw bHVzX3BsdXMpOworCQkJCQlwbHVzX3BsdXMgPSB0cnVlOworCQkJCQlicmVhazsKKwkJCQlkZWZh dWx0OiBnb3RvIGxhYmVsX3dpZHRoOworCQkJCX0KKwkJCQlmKys7CisJCQl9CisJCQkvKiBXaWR0 aC4gKi8KKwkJCWxhYmVsX3dpZHRoOgorCQkJc3dpdGNoICgqZikgeworCQkJY2FzZSAnKic6CisJ CQkJd2lkdGggPSB2YV9hcmcoYXAsIGludCk7CisJCQkJZisrOworCQkJCWlmICh3aWR0aCA8IDAp IHsKKwkJCQkJbGVmdF9qdXN0aWZ5ID0gdHJ1ZTsKKwkJCQkJd2lkdGggPSAtd2lkdGg7CisJCQkJ fQorCQkJCWJyZWFrOworCQkJY2FzZSAnMCc6CisJCQkJaWYgKGZpcnN0X3dpZHRoX2RpZ2l0KSB7 CisJCQkJCXBhZF96ZXJvID0gdHJ1ZTsKKwkJCQl9CisJCQkJSkVNQUxMT0NfRkFMTFRIUk9VR0g7 CisJCQljYXNlICcxJzogY2FzZSAnMic6IGNhc2UgJzMnOiBjYXNlICc0JzoKKwkJCWNhc2UgJzUn OiBjYXNlICc2JzogY2FzZSAnNyc6IGNhc2UgJzgnOiBjYXNlICc5JzogeworCQkJCXVpbnRtYXhf dCB1d2lkdGg7CisJCQkJc2V0X2Vycm5vKDApOworCQkJCXV3aWR0aCA9IG1hbGxvY19zdHJ0b3Vt YXgoZiwgKGNoYXIgKiopJmYsIDEwKTsKKwkJCQlhc3NlcnQodXdpZHRoICE9IFVJTlRNQVhfTUFY IHx8IGdldF9lcnJubygpICE9CisJCQkJICAgIEVSQU5HRSk7CisJCQkJd2lkdGggPSAoaW50KXV3 aWR0aDsKKwkJCQlmaXJzdF93aWR0aF9kaWdpdCA9IGZhbHNlOworCQkJCWJyZWFrOworCQkJfSBk ZWZhdWx0OgorCQkJCWJyZWFrOworCQkJfQorCQkJLyogV2lkdGgvcHJlY2lzaW9uIHNlcGFyYXRv ci4gKi8KKwkJCWlmICgqZiA9PSAnLicpIHsKKwkJCQlmKys7CisJCQl9IGVsc2UgeworCQkJCWdv dG8gbGFiZWxfbGVuZ3RoOworCQkJfQorCQkJLyogUHJlY2lzaW9uLiAqLworCQkJc3dpdGNoICgq ZikgeworCQkJY2FzZSAnKic6CisJCQkJcHJlYyA9IHZhX2FyZyhhcCwgaW50KTsKKwkJCQlmKys7 CisJCQkJYnJlYWs7CisJCQljYXNlICcwJzogY2FzZSAnMSc6IGNhc2UgJzInOiBjYXNlICczJzog Y2FzZSAnNCc6CisJCQljYXNlICc1JzogY2FzZSAnNic6IGNhc2UgJzcnOiBjYXNlICc4JzogY2Fz ZSAnOSc6IHsKKwkJCQl1aW50bWF4X3QgdXByZWM7CisJCQkJc2V0X2Vycm5vKDApOworCQkJCXVw cmVjID0gbWFsbG9jX3N0cnRvdW1heChmLCAoY2hhciAqKikmZiwgMTApOworCQkJCWFzc2VydCh1 cHJlYyAhPSBVSU5UTUFYX01BWCB8fCBnZXRfZXJybm8oKSAhPQorCQkJCSAgICBFUkFOR0UpOwor CQkJCXByZWMgPSAoaW50KXVwcmVjOworCQkJCWJyZWFrOworCQkJfQorCQkJZGVmYXVsdDogYnJl YWs7CisJCQl9CisJCQkvKiBMZW5ndGguICovCisJCQlsYWJlbF9sZW5ndGg6CisJCQlzd2l0Y2gg KCpmKSB7CisJCQljYXNlICdsJzoKKwkJCQlmKys7CisJCQkJaWYgKCpmID09ICdsJykgeworCQkJ CQlsZW4gPSAncSc7CisJCQkJCWYrKzsKKwkJCQl9IGVsc2UgeworCQkJCQlsZW4gPSAnbCc7CisJ CQkJfQorCQkJCWJyZWFrOworCQkJY2FzZSAncSc6IGNhc2UgJ2onOiBjYXNlICd0JzogY2FzZSAn eic6CisJCQkJbGVuID0gKmY7CisJCQkJZisrOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDogYnJl YWs7CisJCQl9CisJCQkvKiBDb252ZXJzaW9uIHNwZWNpZmllci4gKi8KKwkJCXN3aXRjaCAoKmYp IHsKKwkJCWNhc2UgJyUnOgorCQkJCS8qICUlICovCisJCQkJQVBQRU5EX0MoKmYpOworCQkJCWYr KzsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ2QnOiBjYXNlICdpJzogeworCQkJCWludG1heF90IHZh bCBKRU1BTExPQ19DQ19TSUxFTkNFX0lOSVQoMCk7CisJCQkJY2hhciBidWZbRDJTX0JVRlNJWkVd OworCisJCQkJLyoKKwkJCQkgKiBPdXRwdXR0aW5nIG5lZ2F0aXZlLCB6ZXJvLXBhZGRlZCBudW1i ZXJzCisJCQkJICogd291bGQgcmVxdWlyZSBhIG5vbnRyaXZpYWwgcmV3b3JrIG9mIHRoZQorCQkJ CSAqIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIHdpZHRoIGFuZCBwYWRkaW5nCisJCQkJICogKHNp bmNlIDAgcGFkZGluZyBnb2VzIGJldHdlZW4gdGhlICctJyBhbmQgdGhlCisJCQkJICogbnVtYmVy LCB3aGlsZSAnICcgcGFkZGluZyBnb2VzIGVpdGhlciBiZWZvcmUKKwkJCQkgKiB0aGUgLSBvciBh ZnRlciB0aGUgbnVtYmVyLiAgU2luY2Ugd2UKKwkJCQkgKiBjdXJyZW50bHkgZG9uJ3QgZXZlciBu ZWVkIDAtcGFkZGVkIG5lZ2F0aXZlCisJCQkJICogbnVtYmVycywganVzdCBkb24ndCBib3RoZXIg c3VwcG9ydGluZyBpdC4KKwkJCQkgKi8KKwkJCQlhc3NlcnQoIXBhZF96ZXJvKTsKKworCQkJCUdF VF9BUkdfTlVNRVJJQyh2YWwsIGxlbik7CisJCQkJcyA9IGQycyh2YWwsIChwbHVzX3BsdXMgPyAn KycgOiAocGx1c19zcGFjZSA/CisJCQkJICAgICcgJyA6ICctJykpLCBidWYsICZzbGVuKTsKKwkJ CQlBUFBFTkRfUEFEREVEX1Mocywgc2xlbiwgd2lkdGgsIGxlZnRfanVzdGlmeSk7CisJCQkJZisr OworCQkJCWJyZWFrOworCQkJfSBjYXNlICdvJzogeworCQkJCXVpbnRtYXhfdCB2YWwgSkVNQUxM T0NfQ0NfU0lMRU5DRV9JTklUKDApOworCQkJCWNoYXIgYnVmW08yU19CVUZTSVpFXTsKKworCQkJ CUdFVF9BUkdfTlVNRVJJQyh2YWwsIGxlbiB8IDB4ODApOworCQkJCXMgPSBvMnModmFsLCBhbHRf Zm9ybSwgYnVmLCAmc2xlbik7CisJCQkJQVBQRU5EX1BBRERFRF9TKHMsIHNsZW4sIHdpZHRoLCBs ZWZ0X2p1c3RpZnkpOworCQkJCWYrKzsKKwkJCQlicmVhazsKKwkJCX0gY2FzZSAndSc6IHsKKwkJ CQl1aW50bWF4X3QgdmFsIEpFTUFMTE9DX0NDX1NJTEVOQ0VfSU5JVCgwKTsKKwkJCQljaGFyIGJ1 ZltVMlNfQlVGU0laRV07CisKKwkJCQlHRVRfQVJHX05VTUVSSUModmFsLCBsZW4gfCAweDgwKTsK KwkJCQlzID0gdTJzKHZhbCwgMTAsIGZhbHNlLCBidWYsICZzbGVuKTsKKwkJCQlBUFBFTkRfUEFE REVEX1Mocywgc2xlbiwgd2lkdGgsIGxlZnRfanVzdGlmeSk7CisJCQkJZisrOworCQkJCWJyZWFr OworCQkJfSBjYXNlICd4JzogY2FzZSAnWCc6IHsKKwkJCQl1aW50bWF4X3QgdmFsIEpFTUFMTE9D X0NDX1NJTEVOQ0VfSU5JVCgwKTsKKwkJCQljaGFyIGJ1ZltYMlNfQlVGU0laRV07CisKKwkJCQlH RVRfQVJHX05VTUVSSUModmFsLCBsZW4gfCAweDgwKTsKKwkJCQlzID0geDJzKHZhbCwgYWx0X2Zv cm0sICpmID09ICdYJywgYnVmLCAmc2xlbik7CisJCQkJQVBQRU5EX1BBRERFRF9TKHMsIHNsZW4s IHdpZHRoLCBsZWZ0X2p1c3RpZnkpOworCQkJCWYrKzsKKwkJCQlicmVhazsKKwkJCX0gY2FzZSAn Yyc6IHsKKwkJCQl1bnNpZ25lZCBjaGFyIHZhbDsKKwkJCQljaGFyIGJ1ZlsyXTsKKworCQkJCWFz c2VydChsZW4gPT0gJz8nIHx8IGxlbiA9PSAnbCcpOworCQkJCWFzc2VydF9ub3RfaW1wbGVtZW50 ZWQobGVuICE9ICdsJyk7CisJCQkJdmFsID0gdmFfYXJnKGFwLCBpbnQpOworCQkJCWJ1ZlswXSA9 IHZhbDsKKwkJCQlidWZbMV0gPSAnXDAnOworCQkJCUFQUEVORF9QQURERURfUyhidWYsIDEsIHdp ZHRoLCBsZWZ0X2p1c3RpZnkpOworCQkJCWYrKzsKKwkJCQlicmVhazsKKwkJCX0gY2FzZSAncyc6 CisJCQkJYXNzZXJ0KGxlbiA9PSAnPycgfHwgbGVuID09ICdsJyk7CisJCQkJYXNzZXJ0X25vdF9p bXBsZW1lbnRlZChsZW4gIT0gJ2wnKTsKKwkJCQlzID0gdmFfYXJnKGFwLCBjaGFyICopOworCQkJ CXNsZW4gPSAocHJlYyA8IDApID8gc3RybGVuKHMpIDogKHNpemVfdClwcmVjOworCQkJCUFQUEVO RF9QQURERURfUyhzLCBzbGVuLCB3aWR0aCwgbGVmdF9qdXN0aWZ5KTsKKwkJCQlmKys7CisJCQkJ YnJlYWs7CisJCQljYXNlICdwJzogeworCQkJCXVpbnRtYXhfdCB2YWw7CisJCQkJY2hhciBidWZb WDJTX0JVRlNJWkVdOworCisJCQkJR0VUX0FSR19OVU1FUklDKHZhbCwgJ3AnKTsKKwkJCQlzID0g eDJzKHZhbCwgdHJ1ZSwgZmFsc2UsIGJ1ZiwgJnNsZW4pOworCQkJCUFQUEVORF9QQURERURfUyhz LCBzbGVuLCB3aWR0aCwgbGVmdF9qdXN0aWZ5KTsKKwkJCQlmKys7CisJCQkJYnJlYWs7CisJCQl9 IGRlZmF1bHQ6IG5vdF9yZWFjaGVkKCk7CisJCQl9CisJCQlicmVhazsKKwkJfSBkZWZhdWx0OiB7 CisJCQlBUFBFTkRfQygqZik7CisJCQlmKys7CisJCQlicmVhazsKKwkJfX0KKwl9CisJbGFiZWxf b3V0OgorCWlmIChpIDwgc2l6ZSkgeworCQlzdHJbaV0gPSAnXDAnOworCX0gZWxzZSB7CisJCXN0 cltzaXplIC0gMV0gPSAnXDAnOworCX0KKworI3VuZGVmIEFQUEVORF9DCisjdW5kZWYgQVBQRU5E X1MKKyN1bmRlZiBBUFBFTkRfUEFEREVEX1MKKyN1bmRlZiBHRVRfQVJHX05VTUVSSUMKKwlyZXR1 cm4gaTsKK30KKworSkVNQUxMT0NfRk9STUFUX1BSSU5URigzLCA0KQorc2l6ZV90CittYWxsb2Nf c25wcmludGYoY2hhciAqc3RyLCBzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4p IHsKKwlzaXplX3QgcmV0OworCXZhX2xpc3QgYXA7CisKKwl2YV9zdGFydChhcCwgZm9ybWF0KTsK KwlyZXQgPSBtYWxsb2NfdnNucHJpbnRmKHN0ciwgc2l6ZSwgZm9ybWF0LCBhcCk7CisJdmFfZW5k KGFwKTsKKworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQKK21hbGxvY192Y3ByaW50Zih3cml0ZV9j Yl90ICp3cml0ZV9jYiwgdm9pZCAqY2JvcGFxdWUsIGNvbnN0IGNoYXIgKmZvcm1hdCwKKyAgICB2 YV9saXN0IGFwKSB7CisJY2hhciBidWZbTUFMTE9DX1BSSU5URl9CVUZTSVpFXTsKKworCWlmICh3 cml0ZV9jYiA9PSBOVUxMKSB7CisJCS8qCisJCSAqIFRoZSBjYWxsZXIgZGlkIG5vdCBwcm92aWRl IGFuIGFsdGVybmF0ZSB3cml0ZV9jYiBjYWxsYmFjaworCQkgKiBmdW5jdGlvbiwgc28gdXNlIHRo ZSBkZWZhdWx0IG9uZS4gIG1hbGxvY193cml0ZSgpIGlzIGFuCisJCSAqIGlubGluZSBmdW5jdGlv biwgc28gdXNlIG1hbGxvY19tZXNzYWdlKCkgZGlyZWN0bHkgaGVyZS4KKwkJICovCisJCXdyaXRl X2NiID0gKGplX21hbGxvY19tZXNzYWdlICE9IE5VTEwpID8gamVfbWFsbG9jX21lc3NhZ2UgOgor CQkgICAgd3J0bWVzc2FnZTsKKwl9CisKKwltYWxsb2NfdnNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1 ZiksIGZvcm1hdCwgYXApOworCXdyaXRlX2NiKGNib3BhcXVlLCBidWYpOworfQorCisvKgorICog UHJpbnQgdG8gYSBjYWxsYmFjayBmdW5jdGlvbiBpbiBzdWNoIGEgd2F5IGFzIHRvIChob3BlZnVs bHkpIGF2b2lkIG1lbW9yeQorICogYWxsb2NhdGlvbi4KKyAqLworSkVNQUxMT0NfRk9STUFUX1BS SU5URigzLCA0KQordm9pZAorbWFsbG9jX2NwcmludGYod3JpdGVfY2JfdCAqd3JpdGVfY2IsIHZv aWQgKmNib3BhcXVlLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikgeworCXZhX2xpc3QgYXA7CisK Kwl2YV9zdGFydChhcCwgZm9ybWF0KTsKKwltYWxsb2NfdmNwcmludGYod3JpdGVfY2IsIGNib3Bh cXVlLCBmb3JtYXQsIGFwKTsKKwl2YV9lbmQoYXApOworfQorCisvKiBQcmludCB0byBzdGRlcnIg aW4gc3VjaCBhIHdheSBhcyB0byBhdm9pZCBtZW1vcnkgYWxsb2NhdGlvbi4gKi8KK0pFTUFMTE9D X0ZPUk1BVF9QUklOVEYoMSwgMikKK3ZvaWQKK21hbGxvY19wcmludGYoY29uc3QgY2hhciAqZm9y bWF0LCAuLi4pIHsKKwl2YV9saXN0IGFwOworCisJdmFfc3RhcnQoYXAsIGZvcm1hdCk7CisJbWFs bG9jX3ZjcHJpbnRmKE5VTEwsIE5VTEwsIGZvcm1hdCwgYXApOworCXZhX2VuZChhcCk7Cit9CisK Ky8qCisgKiBSZXN0b3JlIG5vcm1hbCBhc3NlcnRpb24gbWFjcm9zLCBpbiBvcmRlciB0byBtYWtl IGl0IHBvc3NpYmxlIHRvIGNvbXBpbGUgYWxsCisgKiBDIGZpbGVzIGFzIGEgc2luZ2xlIGNvbmNh dGVuYXRpb24uCisgKi8KKyN1bmRlZiBhc3NlcnQKKyN1bmRlZiBub3RfcmVhY2hlZAorI3VuZGVm IG5vdF9pbXBsZW1lbnRlZAorI3VuZGVmIGFzc2VydF9ub3RfaW1wbGVtZW50ZWQKKyNpbmNsdWRl ICJqZW1hbGxvYy9pbnRlcm5hbC9hc3NlcnQuaCIKCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0z LjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9zcmMvbXV0ZXguYyBiLzM4OS1kcy1iYXNlLTMuMy4w LWJ1aWxkL2plbWFsbG9jLTUuMy4wL3NyYy9tdXRleC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAuLjBiMzU0N2EKLS0tIC9kZXYvbnVsbAorKysgYi8zODktZHMtYmFzZS0zLjMu MC1idWlsZC9qZW1hbGxvYy01LjMuMC9zcmMvbXV0ZXguYwpAQCAtMCwwICsxLDIyOCBAQAorI2lu Y2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2plbWFsbG9jX3ByZWFtYmxlLmgiCisjaW5jbHVkZSAi amVtYWxsb2MvaW50ZXJuYWwvamVtYWxsb2NfaW50ZXJuYWxfaW5jbHVkZXMuaCIKKworI2luY2x1 ZGUgImplbWFsbG9jL2ludGVybmFsL2Fzc2VydC5oIgorI2luY2x1ZGUgImplbWFsbG9jL2ludGVy bmFsL21hbGxvY19pby5oIgorI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL3NwaW4uaCIKKwor I2lmbmRlZiBfQ1JUX1NQSU5DT1VOVAorI2RlZmluZSBfQ1JUX1NQSU5DT1VOVCA0MDAwCisjZW5k aWYKKworLyoKKyAqIEJhc2VkIG9uIGJlbmNobWFyayByZXN1bHRzLCBhIGZpeGVkIHNwaW4gd2l0 aCB0aGlzIGFtb3VudCBvZiByZXRyaWVzIHdvcmtzCisgKiB3ZWxsIGZvciBvdXIgY3JpdGljYWwg c2VjdGlvbnMuCisgKi8KK2ludDY0X3Qgb3B0X211dGV4X21heF9zcGluID0gNjAwOworCisvKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqLworLyogRGF0YS4gKi8KKworI2lmZGVmIEpFTUFMTE9DX0xBWllf TE9DSworYm9vbCBpc3RocmVhZGVkID0gZmFsc2U7CisjZW5kaWYKKyNpZmRlZiBKRU1BTExPQ19N VVRFWF9JTklUX0NCCitzdGF0aWMgYm9vbAkJcG9zdHBvbmVfaW5pdCA9IHRydWU7CitzdGF0aWMg bWFsbG9jX211dGV4X3QJKnBvc3Rwb25lZF9tdXRleGVzID0gTlVMTDsKKyNlbmRpZgorCisvKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqLworLyoKKyAqIFdlIGludGVyY2VwdCBwdGhyZWFkX2NyZWF0ZSgp IGNhbGxzIGluIG9yZGVyIHRvIHRvZ2dsZSBpc3RocmVhZGVkIGlmIHRoZQorICogcHJvY2VzcyBn b2VzIG11bHRpLXRocmVhZGVkLgorICovCisKKyNpZiBkZWZpbmVkKEpFTUFMTE9DX0xBWllfTE9D SykgJiYgIWRlZmluZWQoX1dJTjMyKQorSkVNQUxMT0NfRVhQT1JUIGludAorcHRocmVhZF9jcmVh dGUocHRocmVhZF90ICpfX3Jlc3RyaWN0IHRocmVhZCwKKyAgICBjb25zdCBwdGhyZWFkX2F0dHJf dCAqX19yZXN0cmljdCBhdHRyLCB2b2lkICooKnN0YXJ0X3JvdXRpbmUpKHZvaWQgKiksCisgICAg dm9pZCAqX19yZXN0cmljdCBhcmcpIHsKKwlyZXR1cm4gcHRocmVhZF9jcmVhdGVfd3JhcHBlcih0 aHJlYWQsIGF0dHIsIHN0YXJ0X3JvdXRpbmUsIGFyZyk7Cit9CisjZW5kaWYKKworLyoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKi8KKworI2lmZGVmIEpFTUFMTE9DX01VVEVYX0lOSVRfQ0IKK0pFTUFMTE9D X0VYUE9SVCBpbnQJX3B0aHJlYWRfbXV0ZXhfaW5pdF9jYWxsb2NfY2IocHRocmVhZF9tdXRleF90 ICptdXRleCwKKyAgICB2b2lkICooY2FsbG9jX2NiKShzaXplX3QsIHNpemVfdCkpOworI2VuZGlm CisKK3ZvaWQKK21hbGxvY19tdXRleF9sb2NrX3Nsb3cobWFsbG9jX211dGV4X3QgKm11dGV4KSB7 CisJbXV0ZXhfcHJvZl9kYXRhX3QgKmRhdGEgPSAmbXV0ZXgtPnByb2ZfZGF0YTsKKwluc3RpbWVf dCBiZWZvcmU7CisKKwlpZiAobmNwdXMgPT0gMSkgeworCQlnb3RvIGxhYmVsX3NwaW5fZG9uZTsK Kwl9CisKKwlpbnQgY250ID0gMDsKKwlkbyB7CisJCXNwaW5fY3B1X3NwaW53YWl0KCk7CisJCWlm ICghYXRvbWljX2xvYWRfYigmbXV0ZXgtPmxvY2tlZCwgQVRPTUlDX1JFTEFYRUQpCisgICAgICAg ICAgICAgICAgICAgICYmICFtYWxsb2NfbXV0ZXhfdHJ5bG9ja19maW5hbChtdXRleCkpIHsKKwkJ CWRhdGEtPm5fc3Bpbl9hY3F1aXJlZCsrOworCQkJcmV0dXJuOworCQl9CisJfSB3aGlsZSAoY250 KysgPCBvcHRfbXV0ZXhfbWF4X3NwaW4gfHwgb3B0X211dGV4X21heF9zcGluID09IC0xKTsKKwor CWlmICghY29uZmlnX3N0YXRzKSB7CisJCS8qIE9ubHkgc3BpbiBpcyB1c2VmdWwgd2hlbiBzdGF0 cyBpcyBvZmYuICovCisJCW1hbGxvY19tdXRleF9sb2NrX2ZpbmFsKG11dGV4KTsKKwkJcmV0dXJu OworCX0KK2xhYmVsX3NwaW5fZG9uZToKKwluc3RpbWVfaW5pdF91cGRhdGUoJmJlZm9yZSk7CisJ LyogQ29weSBiZWZvcmUgdG8gYWZ0ZXIgdG8gYXZvaWQgY2xvY2sgc2tld3MuICovCisJbnN0aW1l X3QgYWZ0ZXI7CisJbnN0aW1lX2NvcHkoJmFmdGVyLCAmYmVmb3JlKTsKKwl1aW50MzJfdCBuX3Ro ZHMgPSBhdG9taWNfZmV0Y2hfYWRkX3UzMigmZGF0YS0+bl93YWl0aW5nX3RoZHMsIDEsCisJICAg IEFUT01JQ19SRUxBWEVEKSArIDE7CisJLyogT25lIGxhc3QgdHJ5IGFzIGFib3ZlIHR3byBjYWxs cyBtYXkgdGFrZSBxdWl0ZSBzb21lIGN5Y2xlcy4gKi8KKwlpZiAoIW1hbGxvY19tdXRleF90cnls b2NrX2ZpbmFsKG11dGV4KSkgeworCQlhdG9taWNfZmV0Y2hfc3ViX3UzMigmZGF0YS0+bl93YWl0 aW5nX3RoZHMsIDEsIEFUT01JQ19SRUxBWEVEKTsKKwkJZGF0YS0+bl9zcGluX2FjcXVpcmVkKys7 CisJCXJldHVybjsKKwl9CisKKwkvKiBUcnVlIHNsb3cgcGF0aC4gKi8KKwltYWxsb2NfbXV0ZXhf bG9ja19maW5hbChtdXRleCk7CisJLyogVXBkYXRlIG1vcmUgc2xvdy1wYXRoIG9ubHkgY291bnRl cnMuICovCisJYXRvbWljX2ZldGNoX3N1Yl91MzIoJmRhdGEtPm5fd2FpdGluZ190aGRzLCAxLCBB VE9NSUNfUkVMQVhFRCk7CisJbnN0aW1lX3VwZGF0ZSgmYWZ0ZXIpOworCisJbnN0aW1lX3QgZGVs dGE7CisJbnN0aW1lX2NvcHkoJmRlbHRhLCAmYWZ0ZXIpOworCW5zdGltZV9zdWJ0cmFjdCgmZGVs dGEsICZiZWZvcmUpOworCisJZGF0YS0+bl93YWl0X3RpbWVzKys7CisJbnN0aW1lX2FkZCgmZGF0 YS0+dG90X3dhaXRfdGltZSwgJmRlbHRhKTsKKwlpZiAobnN0aW1lX2NvbXBhcmUoJmRhdGEtPm1h eF93YWl0X3RpbWUsICZkZWx0YSkgPCAwKSB7CisJCW5zdGltZV9jb3B5KCZkYXRhLT5tYXhfd2Fp dF90aW1lLCAmZGVsdGEpOworCX0KKwlpZiAobl90aGRzID4gZGF0YS0+bWF4X25fdGhkcykgewor CQlkYXRhLT5tYXhfbl90aGRzID0gbl90aGRzOworCX0KK30KKworc3RhdGljIHZvaWQKK211dGV4 X3Byb2ZfZGF0YV9pbml0KG11dGV4X3Byb2ZfZGF0YV90ICpkYXRhKSB7CisJbWVtc2V0KGRhdGEs IDAsIHNpemVvZihtdXRleF9wcm9mX2RhdGFfdCkpOworCW5zdGltZV9pbml0X3plcm8oJmRhdGEt Pm1heF93YWl0X3RpbWUpOworCW5zdGltZV9pbml0X3plcm8oJmRhdGEtPnRvdF93YWl0X3RpbWUp OworCWRhdGEtPnByZXZfb3duZXIgPSBOVUxMOworfQorCit2b2lkCittYWxsb2NfbXV0ZXhfcHJv Zl9kYXRhX3Jlc2V0KHRzZG5fdCAqdHNkbiwgbWFsbG9jX211dGV4X3QgKm11dGV4KSB7CisJbWFs bG9jX211dGV4X2Fzc2VydF9vd25lcih0c2RuLCBtdXRleCk7CisJbXV0ZXhfcHJvZl9kYXRhX2lu aXQoJm11dGV4LT5wcm9mX2RhdGEpOworfQorCitzdGF0aWMgaW50CittdXRleF9hZGRyX2NvbXAo Y29uc3Qgd2l0bmVzc190ICp3aXRuZXNzMSwgdm9pZCAqbXV0ZXgxLAorICAgIGNvbnN0IHdpdG5l c3NfdCAqd2l0bmVzczIsIHZvaWQgKm11dGV4MikgeworCWFzc2VydChtdXRleDEgIT0gTlVMTCk7 CisJYXNzZXJ0KG11dGV4MiAhPSBOVUxMKTsKKwl1aW50cHRyX3QgbXUxaW50ID0gKHVpbnRwdHJf dCltdXRleDE7CisJdWludHB0cl90IG11MmludCA9ICh1aW50cHRyX3QpbXV0ZXgyOworCWlmICht dTFpbnQgPCBtdTJpbnQpIHsKKwkJcmV0dXJuIC0xOworCX0gZWxzZSBpZiAobXUxaW50ID09IG11 MmludCkgeworCQlyZXR1cm4gMDsKKwl9IGVsc2UgeworCQlyZXR1cm4gMTsKKwl9Cit9CisKK2Jv b2wKK21hbGxvY19tdXRleF9pbml0KG1hbGxvY19tdXRleF90ICptdXRleCwgY29uc3QgY2hhciAq bmFtZSwKKyAgICB3aXRuZXNzX3JhbmtfdCByYW5rLCBtYWxsb2NfbXV0ZXhfbG9ja19vcmRlcl90 IGxvY2tfb3JkZXIpIHsKKwltdXRleF9wcm9mX2RhdGFfaW5pdCgmbXV0ZXgtPnByb2ZfZGF0YSk7 CisjaWZkZWYgX1dJTjMyCisjICBpZiBfV0lOMzJfV0lOTlQgPj0gMHgwNjAwCisJSW5pdGlhbGl6 ZVNSV0xvY2soJm11dGV4LT5sb2NrKTsKKyMgIGVsc2UKKwlpZiAoIUluaXRpYWxpemVDcml0aWNh bFNlY3Rpb25BbmRTcGluQ291bnQoJm11dGV4LT5sb2NrLAorCSAgICBfQ1JUX1NQSU5DT1VOVCkp IHsKKwkJcmV0dXJuIHRydWU7CisJfQorIyAgZW5kaWYKKyNlbGlmIChkZWZpbmVkKEpFTUFMTE9D X09TX1VORkFJUl9MT0NLKSkKKyAgICAgICBtdXRleC0+bG9jayA9IE9TX1VORkFJUl9MT0NLX0lO SVQ7CisjZWxpZiAoZGVmaW5lZChKRU1BTExPQ19NVVRFWF9JTklUX0NCKSkKKwlpZiAocG9zdHBv bmVfaW5pdCkgeworCQltdXRleC0+cG9zdHBvbmVkX25leHQgPSBwb3N0cG9uZWRfbXV0ZXhlczsK KwkJcG9zdHBvbmVkX211dGV4ZXMgPSBtdXRleDsKKwl9IGVsc2UgeworCQlpZiAoX3B0aHJlYWRf bXV0ZXhfaW5pdF9jYWxsb2NfY2IoJm11dGV4LT5sb2NrLAorCQkgICAgYm9vdHN0cmFwX2NhbGxv YykgIT0gMCkgeworCQkJcmV0dXJuIHRydWU7CisJCX0KKwl9CisjZWxzZQorCXB0aHJlYWRfbXV0 ZXhhdHRyX3QgYXR0cjsKKworCWlmIChwdGhyZWFkX211dGV4YXR0cl9pbml0KCZhdHRyKSAhPSAw KSB7CisJCXJldHVybiB0cnVlOworCX0KKwlwdGhyZWFkX211dGV4YXR0cl9zZXR0eXBlKCZhdHRy LCBNQUxMT0NfTVVURVhfVFlQRSk7CisJaWYgKHB0aHJlYWRfbXV0ZXhfaW5pdCgmbXV0ZXgtPmxv Y2ssICZhdHRyKSAhPSAwKSB7CisJCXB0aHJlYWRfbXV0ZXhhdHRyX2Rlc3Ryb3koJmF0dHIpOwor CQlyZXR1cm4gdHJ1ZTsKKwl9CisJcHRocmVhZF9tdXRleGF0dHJfZGVzdHJveSgmYXR0cik7Cisj ZW5kaWYKKwlpZiAoY29uZmlnX2RlYnVnKSB7CisJCW11dGV4LT5sb2NrX29yZGVyID0gbG9ja19v cmRlcjsKKwkJaWYgKGxvY2tfb3JkZXIgPT0gbWFsbG9jX211dGV4X2FkZHJlc3Nfb3JkZXJlZCkg eworCQkJd2l0bmVzc19pbml0KCZtdXRleC0+d2l0bmVzcywgbmFtZSwgcmFuaywKKwkJCSAgICBt dXRleF9hZGRyX2NvbXAsIG11dGV4KTsKKwkJfSBlbHNlIHsKKwkJCXdpdG5lc3NfaW5pdCgmbXV0 ZXgtPndpdG5lc3MsIG5hbWUsIHJhbmssIE5VTEwsIE5VTEwpOworCQl9CisJfQorCXJldHVybiBm YWxzZTsKK30KKwordm9pZAorbWFsbG9jX211dGV4X3ByZWZvcmsodHNkbl90ICp0c2RuLCBtYWxs b2NfbXV0ZXhfdCAqbXV0ZXgpIHsKKwltYWxsb2NfbXV0ZXhfbG9jayh0c2RuLCBtdXRleCk7Cit9 CisKK3ZvaWQKK21hbGxvY19tdXRleF9wb3N0Zm9ya19wYXJlbnQodHNkbl90ICp0c2RuLCBtYWxs b2NfbXV0ZXhfdCAqbXV0ZXgpIHsKKwltYWxsb2NfbXV0ZXhfdW5sb2NrKHRzZG4sIG11dGV4KTsK K30KKwordm9pZAorbWFsbG9jX211dGV4X3Bvc3Rmb3JrX2NoaWxkKHRzZG5fdCAqdHNkbiwgbWFs bG9jX211dGV4X3QgKm11dGV4KSB7CisjaWZkZWYgSkVNQUxMT0NfTVVURVhfSU5JVF9DQgorCW1h bGxvY19tdXRleF91bmxvY2sodHNkbiwgbXV0ZXgpOworI2Vsc2UKKwlpZiAobWFsbG9jX211dGV4 X2luaXQobXV0ZXgsIG11dGV4LT53aXRuZXNzLm5hbWUsCisJICAgIG11dGV4LT53aXRuZXNzLnJh bmssIG11dGV4LT5sb2NrX29yZGVyKSkgeworCQltYWxsb2NfcHJpbnRmKCI8amVtYWxsb2M+OiBF cnJvciByZS1pbml0aWFsaXppbmcgbXV0ZXggaW4gIgorCQkgICAgImNoaWxkXG4iKTsKKwkJaWYg KG9wdF9hYm9ydCkgeworCQkJYWJvcnQoKTsKKwkJfQorCX0KKyNlbmRpZgorfQorCitib29sCitt YWxsb2NfbXV0ZXhfYm9vdCh2b2lkKSB7CisjaWZkZWYgSkVNQUxMT0NfTVVURVhfSU5JVF9DQgor CXBvc3Rwb25lX2luaXQgPSBmYWxzZTsKKwl3aGlsZSAocG9zdHBvbmVkX211dGV4ZXMgIT0gTlVM TCkgeworCQlpZiAoX3B0aHJlYWRfbXV0ZXhfaW5pdF9jYWxsb2NfY2IoJnBvc3Rwb25lZF9tdXRl eGVzLT5sb2NrLAorCQkgICAgYm9vdHN0cmFwX2NhbGxvYykgIT0gMCkgeworCQkJcmV0dXJuIHRy dWU7CisJCX0KKwkJcG9zdHBvbmVkX211dGV4ZXMgPSBwb3N0cG9uZWRfbXV0ZXhlcy0+cG9zdHBv bmVkX25leHQ7CisJfQorI2VuZGlmCisJcmV0dXJuIGZhbHNlOworfQoKZGlmZiAtLWdpdCBhLzM4 OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3NyYy9uc3RpbWUuYyBiLzM4OS1k cy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3NyYy9uc3RpbWUuYwpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMWE1Mzc3Ci0tLSAvZGV2L251bGwKKysrIGIvMzg5 LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvc3JjL25zdGltZS5jCkBAIC0wLDAg KzEsMjg5IEBACisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvamVtYWxsb2NfcHJlYW1ibGUu aCIKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9qZW1hbGxvY19pbnRlcm5hbF9pbmNsdWRl cy5oIgorCisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvbnN0aW1lLmgiCisKKyNpbmNsdWRl ICJqZW1hbGxvYy9pbnRlcm5hbC9hc3NlcnQuaCIKKworI2RlZmluZSBCSUxMSU9OCVVJTlQ2NF9D KDEwMDAwMDAwMDApCisjZGVmaW5lIE1JTExJT04JVUlOVDY0X0MoMTAwMDAwMCkKKworc3RhdGlj IHZvaWQKK25zdGltZV9zZXRfaW5pdGlhbGl6ZWQobnN0aW1lX3QgKnRpbWUpIHsKKyNpZmRlZiBK RU1BTExPQ19ERUJVRworCXRpbWUtPm1hZ2ljID0gTlNUSU1FX01BR0lDOworI2VuZGlmCit9CisK K3N0YXRpYyB2b2lkCituc3RpbWVfYXNzZXJ0X2luaXRpYWxpemVkKGNvbnN0IG5zdGltZV90ICp0 aW1lKSB7CisjaWZkZWYgSkVNQUxMT0NfREVCVUcKKwkvKgorCSAqIFNvbWUgcGFydHMgKGUuZy4g c3RhdHMpIHJlbHkgb24gbWVtc2V0IHRvIHplcm8gaW5pdGlhbGl6ZS4gIFRyZWF0CisJICogdGhl c2UgYXMgdmFsaWQgaW5pdGlhbGl6YXRpb24uCisJICovCisJYXNzZXJ0KHRpbWUtPm1hZ2ljID09 IE5TVElNRV9NQUdJQyB8fAorCSAgICAodGltZS0+bWFnaWMgPT0gMCAmJiB0aW1lLT5ucyA9PSAw KSk7CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQKK25zdGltZV9wYWlyX2Fzc2VydF9pbml0aWFs aXplZChjb25zdCBuc3RpbWVfdCAqdDEsIGNvbnN0IG5zdGltZV90ICp0MikgeworCW5zdGltZV9h c3NlcnRfaW5pdGlhbGl6ZWQodDEpOworCW5zdGltZV9hc3NlcnRfaW5pdGlhbGl6ZWQodDIpOwor fQorCitzdGF0aWMgdm9pZAorbnN0aW1lX2luaXRpYWxpemVfb3BlcmFuZChuc3RpbWVfdCAqdGlt ZSkgeworCS8qCisJICogT3BlcmF0aW9ucyBsaWtlIG5zdGltZV9hZGQgbWF5IGhhdmUgdGhlIGlu aXRpYWwgb3BlcmFuZCBiZWluZyB6ZXJvCisJICogaW5pdGlhbGl6ZWQgKGNvdmVyZWQgYnkgdGhl IGFzc2VydCBiZWxvdykuICBGdWxsLWluaXRpYWxpemUgbmVlZGVkCisJICogYmVmb3JlIGNoYW5n aW5nIGl0IHRvIG5vbi16ZXJvLgorCSAqLworCW5zdGltZV9hc3NlcnRfaW5pdGlhbGl6ZWQodGlt ZSk7CisJbnN0aW1lX3NldF9pbml0aWFsaXplZCh0aW1lKTsKK30KKwordm9pZAorbnN0aW1lX2lu aXQobnN0aW1lX3QgKnRpbWUsIHVpbnQ2NF90IG5zKSB7CisJbnN0aW1lX3NldF9pbml0aWFsaXpl ZCh0aW1lKTsKKwl0aW1lLT5ucyA9IG5zOworfQorCit2b2lkCituc3RpbWVfaW5pdDIobnN0aW1l X3QgKnRpbWUsIHVpbnQ2NF90IHNlYywgdWludDY0X3QgbnNlYykgeworCW5zdGltZV9zZXRfaW5p dGlhbGl6ZWQodGltZSk7CisJdGltZS0+bnMgPSBzZWMgKiBCSUxMSU9OICsgbnNlYzsKK30KKwor dWludDY0X3QKK25zdGltZV9ucyhjb25zdCBuc3RpbWVfdCAqdGltZSkgeworCW5zdGltZV9hc3Nl cnRfaW5pdGlhbGl6ZWQodGltZSk7CisJcmV0dXJuIHRpbWUtPm5zOworfQorCit1aW50NjRfdAor bnN0aW1lX21zZWMoY29uc3QgbnN0aW1lX3QgKnRpbWUpIHsKKwluc3RpbWVfYXNzZXJ0X2luaXRp YWxpemVkKHRpbWUpOworCXJldHVybiB0aW1lLT5ucyAvIE1JTExJT047Cit9CisKK3VpbnQ2NF90 Cituc3RpbWVfc2VjKGNvbnN0IG5zdGltZV90ICp0aW1lKSB7CisJbnN0aW1lX2Fzc2VydF9pbml0 aWFsaXplZCh0aW1lKTsKKwlyZXR1cm4gdGltZS0+bnMgLyBCSUxMSU9OOworfQorCit1aW50NjRf dAorbnN0aW1lX25zZWMoY29uc3QgbnN0aW1lX3QgKnRpbWUpIHsKKwluc3RpbWVfYXNzZXJ0X2lu aXRpYWxpemVkKHRpbWUpOworCXJldHVybiB0aW1lLT5ucyAlIEJJTExJT047Cit9CisKK3ZvaWQK K25zdGltZV9jb3B5KG5zdGltZV90ICp0aW1lLCBjb25zdCBuc3RpbWVfdCAqc291cmNlKSB7CisJ LyogU291cmNlIGlzIHJlcXVpcmVkIHRvIGJlIGluaXRpYWxpemVkLiAqLworCW5zdGltZV9hc3Nl cnRfaW5pdGlhbGl6ZWQoc291cmNlKTsKKwkqdGltZSA9ICpzb3VyY2U7CisJbnN0aW1lX2Fzc2Vy dF9pbml0aWFsaXplZCh0aW1lKTsKK30KKworaW50Cituc3RpbWVfY29tcGFyZShjb25zdCBuc3Rp bWVfdCAqYSwgY29uc3QgbnN0aW1lX3QgKmIpIHsKKwluc3RpbWVfcGFpcl9hc3NlcnRfaW5pdGlh bGl6ZWQoYSwgYik7CisJcmV0dXJuIChhLT5ucyA+IGItPm5zKSAtIChhLT5ucyA8IGItPm5zKTsK K30KKwordm9pZAorbnN0aW1lX2FkZChuc3RpbWVfdCAqdGltZSwgY29uc3QgbnN0aW1lX3QgKmFk ZGVuZCkgeworCW5zdGltZV9wYWlyX2Fzc2VydF9pbml0aWFsaXplZCh0aW1lLCBhZGRlbmQpOwor CWFzc2VydChVSU5UNjRfTUFYIC0gdGltZS0+bnMgPj0gYWRkZW5kLT5ucyk7CisKKwluc3RpbWVf aW5pdGlhbGl6ZV9vcGVyYW5kKHRpbWUpOworCXRpbWUtPm5zICs9IGFkZGVuZC0+bnM7Cit9CisK K3ZvaWQKK25zdGltZV9pYWRkKG5zdGltZV90ICp0aW1lLCB1aW50NjRfdCBhZGRlbmQpIHsKKwlu c3RpbWVfYXNzZXJ0X2luaXRpYWxpemVkKHRpbWUpOworCWFzc2VydChVSU5UNjRfTUFYIC0gdGlt ZS0+bnMgPj0gYWRkZW5kKTsKKworCW5zdGltZV9pbml0aWFsaXplX29wZXJhbmQodGltZSk7CisJ dGltZS0+bnMgKz0gYWRkZW5kOworfQorCit2b2lkCituc3RpbWVfc3VidHJhY3QobnN0aW1lX3Qg KnRpbWUsIGNvbnN0IG5zdGltZV90ICpzdWJ0cmFoZW5kKSB7CisJbnN0aW1lX3BhaXJfYXNzZXJ0 X2luaXRpYWxpemVkKHRpbWUsIHN1YnRyYWhlbmQpOworCWFzc2VydChuc3RpbWVfY29tcGFyZSh0 aW1lLCBzdWJ0cmFoZW5kKSA+PSAwKTsKKworCS8qIE5vIGluaXRpYWxpemUgb3BlcmFuZCAtLSBz dWJ0cmFjdGlvbiBtdXN0IGJlIGluaXRpYWxpemVkLiAqLworCXRpbWUtPm5zIC09IHN1YnRyYWhl bmQtPm5zOworfQorCit2b2lkCituc3RpbWVfaXN1YnRyYWN0KG5zdGltZV90ICp0aW1lLCB1aW50 NjRfdCBzdWJ0cmFoZW5kKSB7CisJbnN0aW1lX2Fzc2VydF9pbml0aWFsaXplZCh0aW1lKTsKKwlh c3NlcnQodGltZS0+bnMgPj0gc3VidHJhaGVuZCk7CisKKwkvKiBObyBpbml0aWFsaXplIG9wZXJh bmQgLS0gc3VidHJhY3Rpb24gbXVzdCBiZSBpbml0aWFsaXplZC4gKi8KKwl0aW1lLT5ucyAtPSBz dWJ0cmFoZW5kOworfQorCit2b2lkCituc3RpbWVfaW11bHRpcGx5KG5zdGltZV90ICp0aW1lLCB1 aW50NjRfdCBtdWx0aXBsaWVyKSB7CisJbnN0aW1lX2Fzc2VydF9pbml0aWFsaXplZCh0aW1lKTsK Kwlhc3NlcnQoKCgodGltZS0+bnMgfCBtdWx0aXBsaWVyKSAmIChVSU5UNjRfTUFYIDw8IChzaXpl b2YodWludDY0X3QpIDw8CisJICAgIDIpKSkgPT0gMCkgfHwgKCh0aW1lLT5ucyAqIG11bHRpcGxp ZXIpIC8gbXVsdGlwbGllciA9PSB0aW1lLT5ucykpOworCisJbnN0aW1lX2luaXRpYWxpemVfb3Bl cmFuZCh0aW1lKTsKKwl0aW1lLT5ucyAqPSBtdWx0aXBsaWVyOworfQorCit2b2lkCituc3RpbWVf aWRpdmlkZShuc3RpbWVfdCAqdGltZSwgdWludDY0X3QgZGl2aXNvcikgeworCW5zdGltZV9hc3Nl cnRfaW5pdGlhbGl6ZWQodGltZSk7CisJYXNzZXJ0KGRpdmlzb3IgIT0gMCk7CisKKwluc3RpbWVf aW5pdGlhbGl6ZV9vcGVyYW5kKHRpbWUpOworCXRpbWUtPm5zIC89IGRpdmlzb3I7Cit9CisKK3Vp bnQ2NF90Cituc3RpbWVfZGl2aWRlKGNvbnN0IG5zdGltZV90ICp0aW1lLCBjb25zdCBuc3RpbWVf dCAqZGl2aXNvcikgeworCW5zdGltZV9wYWlyX2Fzc2VydF9pbml0aWFsaXplZCh0aW1lLCBkaXZp c29yKTsKKwlhc3NlcnQoZGl2aXNvci0+bnMgIT0gMCk7CisKKwkvKiBObyBpbml0aWFsaXplIG9w ZXJhbmQgLS0gKnRpbWUgaXRzZWxmIHJlbWFpbnMgdW5jaGFuZ2VkLiAqLworCXJldHVybiB0aW1l LT5ucyAvIGRpdmlzb3ItPm5zOworfQorCisvKiBSZXR1cm5zIHRpbWUgc2luY2UgKnBhc3QsIHcv byB1cGRhdGluZyAqcGFzdC4gKi8KK3VpbnQ2NF90Cituc3RpbWVfbnNfc2luY2UoY29uc3QgbnN0 aW1lX3QgKnBhc3QpIHsKKwluc3RpbWVfYXNzZXJ0X2luaXRpYWxpemVkKHBhc3QpOworCisJbnN0 aW1lX3Qgbm93OworCW5zdGltZV9jb3B5KCZub3csIHBhc3QpOworCW5zdGltZV91cGRhdGUoJm5v dyk7CisKKwlhc3NlcnQobnN0aW1lX2NvbXBhcmUoJm5vdywgcGFzdCkgPj0gMCk7CisJcmV0dXJu IG5vdy5ucyAtIHBhc3QtPm5zOworfQorCisjaWZkZWYgX1dJTjMyCisjICBkZWZpbmUgTlNUSU1F X01PTk9UT05JQyB0cnVlCitzdGF0aWMgdm9pZAorbnN0aW1lX2dldChuc3RpbWVfdCAqdGltZSkg eworCUZJTEVUSU1FIGZ0OworCXVpbnQ2NF90IHRpY2tzXzEwMG5zOworCisJR2V0U3lzdGVtVGlt ZUFzRmlsZVRpbWUoJmZ0KTsKKwl0aWNrc18xMDBucyA9ICgoKHVpbnQ2NF90KWZ0LmR3SGlnaERh dGVUaW1lKSA8PCAzMikgfCBmdC5kd0xvd0RhdGVUaW1lOworCisJbnN0aW1lX2luaXQodGltZSwg dGlja3NfMTAwbnMgKiAxMDApOworfQorI2VsaWYgZGVmaW5lZChKRU1BTExPQ19IQVZFX0NMT0NL X01PTk9UT05JQ19DT0FSU0UpCisjICBkZWZpbmUgTlNUSU1FX01PTk9UT05JQyB0cnVlCitzdGF0 aWMgdm9pZAorbnN0aW1lX2dldChuc3RpbWVfdCAqdGltZSkgeworCXN0cnVjdCB0aW1lc3BlYyB0 czsKKworCWNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDX0NPQVJTRSwgJnRzKTsKKwluc3Rp bWVfaW5pdDIodGltZSwgdHMudHZfc2VjLCB0cy50dl9uc2VjKTsKK30KKyNlbGlmIGRlZmluZWQo SkVNQUxMT0NfSEFWRV9DTE9DS19NT05PVE9OSUMpCisjICBkZWZpbmUgTlNUSU1FX01PTk9UT05J QyB0cnVlCitzdGF0aWMgdm9pZAorbnN0aW1lX2dldChuc3RpbWVfdCAqdGltZSkgeworCXN0cnVj dCB0aW1lc3BlYyB0czsKKworCWNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDLCAmdHMpOwor CW5zdGltZV9pbml0Mih0aW1lLCB0cy50dl9zZWMsIHRzLnR2X25zZWMpOworfQorI2VsaWYgZGVm aW5lZChKRU1BTExPQ19IQVZFX01BQ0hfQUJTT0xVVEVfVElNRSkKKyMgIGRlZmluZSBOU1RJTUVf TU9OT1RPTklDIHRydWUKK3N0YXRpYyB2b2lkCituc3RpbWVfZ2V0KG5zdGltZV90ICp0aW1lKSB7 CisJbnN0aW1lX2luaXQodGltZSwgbWFjaF9hYnNvbHV0ZV90aW1lKCkpOworfQorI2Vsc2UKKyMg IGRlZmluZSBOU1RJTUVfTU9OT1RPTklDIGZhbHNlCitzdGF0aWMgdm9pZAorbnN0aW1lX2dldChu c3RpbWVfdCAqdGltZSkgeworCXN0cnVjdCB0aW1ldmFsIHR2OworCisJZ2V0dGltZW9mZGF5KCZ0 diwgTlVMTCk7CisJbnN0aW1lX2luaXQyKHRpbWUsIHR2LnR2X3NlYywgdHYudHZfdXNlYyAqIDEw MDApOworfQorI2VuZGlmCisKK3N0YXRpYyBib29sCituc3RpbWVfbW9ub3RvbmljX2ltcGwodm9p ZCkgeworCXJldHVybiBOU1RJTUVfTU9OT1RPTklDOworI3VuZGVmIE5TVElNRV9NT05PVE9OSUMK K30KK25zdGltZV9tb25vdG9uaWNfdCAqSkVUX01VVEFCTEUgbnN0aW1lX21vbm90b25pYyA9IG5z dGltZV9tb25vdG9uaWNfaW1wbDsKKworcHJvZl90aW1lX3Jlc190IG9wdF9wcm9mX3RpbWVfcmVz ID0KKwlwcm9mX3RpbWVfcmVzX2RlZmF1bHQ7CisKK2NvbnN0IGNoYXIgKnByb2ZfdGltZV9yZXNf bW9kZV9uYW1lc1tdID0geworCSJkZWZhdWx0IiwKKwkiaGlnaCIsCit9OworCisKK3N0YXRpYyB2 b2lkCituc3RpbWVfZ2V0X3JlYWx0aW1lKG5zdGltZV90ICp0aW1lKSB7CisjaWYgZGVmaW5lZChK RU1BTExPQ19IQVZFX0NMT0NLX1JFQUxUSU1FKSAmJiAhZGVmaW5lZChfV0lOMzIpCisJc3RydWN0 IHRpbWVzcGVjIHRzOworCisJY2xvY2tfZ2V0dGltZShDTE9DS19SRUFMVElNRSwgJnRzKTsKKwlu c3RpbWVfaW5pdDIodGltZSwgdHMudHZfc2VjLCB0cy50dl9uc2VjKTsKKyNlbHNlCisJdW5yZWFj aGFibGUoKTsKKyNlbmRpZgorfQorCitzdGF0aWMgdm9pZAorbnN0aW1lX3Byb2ZfdXBkYXRlX2lt cGwobnN0aW1lX3QgKnRpbWUpIHsKKwluc3RpbWVfdCBvbGRfdGltZTsKKworCW5zdGltZV9jb3B5 KCZvbGRfdGltZSwgdGltZSk7CisKKwlpZiAob3B0X3Byb2ZfdGltZV9yZXMgPT0gcHJvZl90aW1l X3Jlc19oaWdoKSB7CisJCW5zdGltZV9nZXRfcmVhbHRpbWUodGltZSk7CisJfSBlbHNlIHsKKwkJ bnN0aW1lX2dldCh0aW1lKTsKKwl9Cit9Cituc3RpbWVfcHJvZl91cGRhdGVfdCAqSkVUX01VVEFC TEUgbnN0aW1lX3Byb2ZfdXBkYXRlID0gbnN0aW1lX3Byb2ZfdXBkYXRlX2ltcGw7CisKK3N0YXRp YyB2b2lkCituc3RpbWVfdXBkYXRlX2ltcGwobnN0aW1lX3QgKnRpbWUpIHsKKwluc3RpbWVfdCBv bGRfdGltZTsKKworCW5zdGltZV9jb3B5KCZvbGRfdGltZSwgdGltZSk7CisJbnN0aW1lX2dldCh0 aW1lKTsKKworCS8qIEhhbmRsZSBub24tbW9ub3RvbmljIGNsb2Nrcy4gKi8KKwlpZiAodW5saWtl bHkobnN0aW1lX2NvbXBhcmUoJm9sZF90aW1lLCB0aW1lKSA+IDApKSB7CisJCW5zdGltZV9jb3B5 KHRpbWUsICZvbGRfdGltZSk7CisJfQorfQorbnN0aW1lX3VwZGF0ZV90ICpKRVRfTVVUQUJMRSBu c3RpbWVfdXBkYXRlID0gbnN0aW1lX3VwZGF0ZV9pbXBsOworCit2b2lkCituc3RpbWVfaW5pdF91 cGRhdGUobnN0aW1lX3QgKnRpbWUpIHsKKwluc3RpbWVfaW5pdF96ZXJvKHRpbWUpOworCW5zdGlt ZV91cGRhdGUodGltZSk7Cit9CisKK3ZvaWQKK25zdGltZV9wcm9mX2luaXRfdXBkYXRlKG5zdGlt ZV90ICp0aW1lKSB7CisJbnN0aW1lX2luaXRfemVybyh0aW1lKTsKKwluc3RpbWVfcHJvZl91cGRh dGUodGltZSk7Cit9CisKKwoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2pl bWFsbG9jLTUuMy4wL3NyYy9wYS5jIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2Mt NS4zLjAvc3JjL3BhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWI3ZTQ2 MgotLS0gL2Rldi9udWxsCisrKyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUu My4wL3NyYy9wYS5jCkBAIC0wLDAgKzEsMjc3IEBACisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJu YWwvamVtYWxsb2NfcHJlYW1ibGUuaCIKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9qZW1h bGxvY19pbnRlcm5hbF9pbmNsdWRlcy5oIgorCisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwv c2FuLmgiCisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvaHBhLmgiCisKK3N0YXRpYyB2b2lk CitwYV9uYWN0aXZlX2FkZChwYV9zaGFyZF90ICpzaGFyZCwgc2l6ZV90IGFkZF9wYWdlcykgewor CWF0b21pY19mZXRjaF9hZGRfenUoJnNoYXJkLT5uYWN0aXZlLCBhZGRfcGFnZXMsIEFUT01JQ19S RUxBWEVEKTsKK30KKworc3RhdGljIHZvaWQKK3BhX25hY3RpdmVfc3ViKHBhX3NoYXJkX3QgKnNo YXJkLCBzaXplX3Qgc3ViX3BhZ2VzKSB7CisJYXNzZXJ0KGF0b21pY19sb2FkX3p1KCZzaGFyZC0+ bmFjdGl2ZSwgQVRPTUlDX1JFTEFYRUQpID49IHN1Yl9wYWdlcyk7CisJYXRvbWljX2ZldGNoX3N1 Yl96dSgmc2hhcmQtPm5hY3RpdmUsIHN1Yl9wYWdlcywgQVRPTUlDX1JFTEFYRUQpOworfQorCiti b29sCitwYV9jZW50cmFsX2luaXQocGFfY2VudHJhbF90ICpjZW50cmFsLCBiYXNlX3QgKmJhc2Us IGJvb2wgaHBhLAorICAgIGhwYV9ob29rc190ICpocGFfaG9va3MpIHsKKwlib29sIGVycjsKKwlp ZiAoaHBhKSB7CisJCWVyciA9IGhwYV9jZW50cmFsX2luaXQoJmNlbnRyYWwtPmhwYSwgYmFzZSwg aHBhX2hvb2tzKTsKKwkJaWYgKGVycikgeworCQkJcmV0dXJuIHRydWU7CisJCX0KKwl9CisJcmV0 dXJuIGZhbHNlOworfQorCitib29sCitwYV9zaGFyZF9pbml0KHRzZG5fdCAqdHNkbiwgcGFfc2hh cmRfdCAqc2hhcmQsIHBhX2NlbnRyYWxfdCAqY2VudHJhbCwKKyAgICBlbWFwX3QgKmVtYXAsIGJh c2VfdCAqYmFzZSwgdW5zaWduZWQgaW5kLCBwYV9zaGFyZF9zdGF0c190ICpzdGF0cywKKyAgICBt YWxsb2NfbXV0ZXhfdCAqc3RhdHNfbXR4LCBuc3RpbWVfdCAqY3VyX3RpbWUsCisgICAgc2l6ZV90 IHBhY19vdmVyc2l6ZV90aHJlc2hvbGQsIHNzaXplX3QgZGlydHlfZGVjYXlfbXMsCisgICAgc3Np emVfdCBtdXp6eV9kZWNheV9tcykgeworCS8qIFRoaXMgd2lsbCBjaGFuZ2UgZXZlbnR1YWxseSwg YnV0IGZvciBub3cgaXQgc2hvdWxkIGhvbGQuICovCisJYXNzZXJ0KGJhc2VfaW5kX2dldChiYXNl KSA9PSBpbmQpOworCWlmIChlZGF0YV9jYWNoZV9pbml0KCZzaGFyZC0+ZWRhdGFfY2FjaGUsIGJh c2UpKSB7CisJCXJldHVybiB0cnVlOworCX0KKworCWlmIChwYWNfaW5pdCh0c2RuLCAmc2hhcmQt PnBhYywgYmFzZSwgZW1hcCwgJnNoYXJkLT5lZGF0YV9jYWNoZSwKKwkgICAgY3VyX3RpbWUsIHBh Y19vdmVyc2l6ZV90aHJlc2hvbGQsIGRpcnR5X2RlY2F5X21zLCBtdXp6eV9kZWNheV9tcywKKwkg ICAgJnN0YXRzLT5wYWNfc3RhdHMsIHN0YXRzX210eCkpIHsKKwkJcmV0dXJuIHRydWU7CisJfQor CisJc2hhcmQtPmluZCA9IGluZDsKKworCXNoYXJkLT5ldmVyX3VzZWRfaHBhID0gZmFsc2U7CisJ YXRvbWljX3N0b3JlX2IoJnNoYXJkLT51c2VfaHBhLCBmYWxzZSwgQVRPTUlDX1JFTEFYRUQpOwor CisJYXRvbWljX3N0b3JlX3p1KCZzaGFyZC0+bmFjdGl2ZSwgMCwgQVRPTUlDX1JFTEFYRUQpOwor CisJc2hhcmQtPnN0YXRzX210eCA9IHN0YXRzX210eDsKKwlzaGFyZC0+c3RhdHMgPSBzdGF0czsK KwltZW1zZXQoc2hhcmQtPnN0YXRzLCAwLCBzaXplb2YoKnNoYXJkLT5zdGF0cykpOworCisJc2hh cmQtPmNlbnRyYWwgPSBjZW50cmFsOworCXNoYXJkLT5lbWFwID0gZW1hcDsKKwlzaGFyZC0+YmFz ZSA9IGJhc2U7CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wKK3BhX3NoYXJkX2VuYWJsZV9o cGEodHNkbl90ICp0c2RuLCBwYV9zaGFyZF90ICpzaGFyZCwKKyAgICBjb25zdCBocGFfc2hhcmRf b3B0c190ICpocGFfb3B0cywgY29uc3Qgc2VjX29wdHNfdCAqaHBhX3NlY19vcHRzKSB7CisJaWYg KGhwYV9zaGFyZF9pbml0KCZzaGFyZC0+aHBhX3NoYXJkLCAmc2hhcmQtPmNlbnRyYWwtPmhwYSwg c2hhcmQtPmVtYXAsCisJICAgIHNoYXJkLT5iYXNlLCAmc2hhcmQtPmVkYXRhX2NhY2hlLCBzaGFy ZC0+aW5kLCBocGFfb3B0cykpIHsKKwkJcmV0dXJuIHRydWU7CisJfQorCWlmIChzZWNfaW5pdCh0 c2RuLCAmc2hhcmQtPmhwYV9zZWMsIHNoYXJkLT5iYXNlLCAmc2hhcmQtPmhwYV9zaGFyZC5wYWks CisJICAgIGhwYV9zZWNfb3B0cykpIHsKKwkJcmV0dXJuIHRydWU7CisJfQorCXNoYXJkLT5ldmVy X3VzZWRfaHBhID0gdHJ1ZTsKKwlhdG9taWNfc3RvcmVfYigmc2hhcmQtPnVzZV9ocGEsIHRydWUs IEFUT01JQ19SRUxBWEVEKTsKKworCXJldHVybiBmYWxzZTsKK30KKwordm9pZAorcGFfc2hhcmRf ZGlzYWJsZV9ocGEodHNkbl90ICp0c2RuLCBwYV9zaGFyZF90ICpzaGFyZCkgeworCWF0b21pY19z dG9yZV9iKCZzaGFyZC0+dXNlX2hwYSwgZmFsc2UsIEFUT01JQ19SRUxBWEVEKTsKKwlpZiAoc2hh cmQtPmV2ZXJfdXNlZF9ocGEpIHsKKwkJc2VjX2Rpc2FibGUodHNkbiwgJnNoYXJkLT5ocGFfc2Vj KTsKKwkJaHBhX3NoYXJkX2Rpc2FibGUodHNkbiwgJnNoYXJkLT5ocGFfc2hhcmQpOworCX0KK30K Kwordm9pZAorcGFfc2hhcmRfcmVzZXQodHNkbl90ICp0c2RuLCBwYV9zaGFyZF90ICpzaGFyZCkg eworCWF0b21pY19zdG9yZV96dSgmc2hhcmQtPm5hY3RpdmUsIDAsIEFUT01JQ19SRUxBWEVEKTsK KwlpZiAoc2hhcmQtPmV2ZXJfdXNlZF9ocGEpIHsKKwkJc2VjX2ZsdXNoKHRzZG4sICZzaGFyZC0+ aHBhX3NlYyk7CisJfQorfQorCitzdGF0aWMgYm9vbAorcGFfc2hhcmRfdXNlc19ocGEocGFfc2hh cmRfdCAqc2hhcmQpIHsKKwlyZXR1cm4gYXRvbWljX2xvYWRfYigmc2hhcmQtPnVzZV9ocGEsIEFU T01JQ19SRUxBWEVEKTsKK30KKwordm9pZAorcGFfc2hhcmRfZGVzdHJveSh0c2RuX3QgKnRzZG4s IHBhX3NoYXJkX3QgKnNoYXJkKSB7CisJcGFjX2Rlc3Ryb3kodHNkbiwgJnNoYXJkLT5wYWMpOwor CWlmIChzaGFyZC0+ZXZlcl91c2VkX2hwYSkgeworCQlzZWNfZmx1c2godHNkbiwgJnNoYXJkLT5o cGFfc2VjKTsKKwkJaHBhX3NoYXJkX2Rpc2FibGUodHNkbiwgJnNoYXJkLT5ocGFfc2hhcmQpOwor CX0KK30KKworc3RhdGljIHBhaV90ICoKK3BhX2dldF9wYWkocGFfc2hhcmRfdCAqc2hhcmQsIGVk YXRhX3QgKmVkYXRhKSB7CisJcmV0dXJuIChlZGF0YV9wYWlfZ2V0KGVkYXRhKSA9PSBFWFRFTlRf UEFJX1BBQworCSAgICA/ICZzaGFyZC0+cGFjLnBhaSA6ICZzaGFyZC0+aHBhX3NlYy5wYWkpOwor fQorCitlZGF0YV90ICoKK3BhX2FsbG9jKHRzZG5fdCAqdHNkbiwgcGFfc2hhcmRfdCAqc2hhcmQs IHNpemVfdCBzaXplLCBzaXplX3QgYWxpZ25tZW50LAorICAgIGJvb2wgc2xhYiwgc3ppbmRfdCBz emluZCwgYm9vbCB6ZXJvLCBib29sIGd1YXJkZWQsCisgICAgYm9vbCAqZGVmZXJyZWRfd29ya19n ZW5lcmF0ZWQpIHsKKwl3aXRuZXNzX2Fzc2VydF9kZXB0aF90b19yYW5rKHRzZG5fd2l0bmVzc190 c2RwX2dldCh0c2RuKSwKKwkgICAgV0lUTkVTU19SQU5LX0NPUkUsIDApOworCWFzc2VydCghZ3Vh cmRlZCB8fCBhbGlnbm1lbnQgPD0gUEFHRSk7CisKKwllZGF0YV90ICplZGF0YSA9IE5VTEw7CisJ aWYgKCFndWFyZGVkICYmIHBhX3NoYXJkX3VzZXNfaHBhKHNoYXJkKSkgeworCQllZGF0YSA9IHBh aV9hbGxvYyh0c2RuLCAmc2hhcmQtPmhwYV9zZWMucGFpLCBzaXplLCBhbGlnbm1lbnQsCisJCSAg ICB6ZXJvLCAvKiBndWFyZGVkICovIGZhbHNlLCBzbGFiLCBkZWZlcnJlZF93b3JrX2dlbmVyYXRl ZCk7CisJfQorCS8qCisJICogRmFsbCBiYWNrIHRvIHRoZSBQQUMgaWYgdGhlIEhQQSBpcyBvZmYg b3IgY291bGRuJ3Qgc2VydmUgdGhlIGdpdmVuCisJICogYWxsb2NhdGlvbiByZXF1ZXN0LgorCSAq LworCWlmIChlZGF0YSA9PSBOVUxMKSB7CisJCWVkYXRhID0gcGFpX2FsbG9jKHRzZG4sICZzaGFy ZC0+cGFjLnBhaSwgc2l6ZSwgYWxpZ25tZW50LCB6ZXJvLAorCQkgICAgZ3VhcmRlZCwgc2xhYiwg ZGVmZXJyZWRfd29ya19nZW5lcmF0ZWQpOworCX0KKwlpZiAoZWRhdGEgIT0gTlVMTCkgeworCQlh c3NlcnQoZWRhdGFfc2l6ZV9nZXQoZWRhdGEpID09IHNpemUpOworCQlwYV9uYWN0aXZlX2FkZChz aGFyZCwgc2l6ZSA+PiBMR19QQUdFKTsKKwkJZW1hcF9yZW1hcCh0c2RuLCBzaGFyZC0+ZW1hcCwg ZWRhdGEsIHN6aW5kLCBzbGFiKTsKKwkJZWRhdGFfc3ppbmRfc2V0KGVkYXRhLCBzemluZCk7CisJ CWVkYXRhX3NsYWJfc2V0KGVkYXRhLCBzbGFiKTsKKwkJaWYgKHNsYWIgJiYgKHNpemUgPiAyICog UEFHRSkpIHsKKwkJCWVtYXBfcmVnaXN0ZXJfaW50ZXJpb3IodHNkbiwgc2hhcmQtPmVtYXAsIGVk YXRhLCBzemluZCk7CisJCX0KKwkJYXNzZXJ0KGVkYXRhX2FyZW5hX2luZF9nZXQoZWRhdGEpID09 IHNoYXJkLT5pbmQpOworCX0KKwlyZXR1cm4gZWRhdGE7Cit9CisKK2Jvb2wKK3BhX2V4cGFuZCh0 c2RuX3QgKnRzZG4sIHBhX3NoYXJkX3QgKnNoYXJkLCBlZGF0YV90ICplZGF0YSwgc2l6ZV90IG9s ZF9zaXplLAorICAgIHNpemVfdCBuZXdfc2l6ZSwgc3ppbmRfdCBzemluZCwgYm9vbCB6ZXJvLCBi b29sICpkZWZlcnJlZF93b3JrX2dlbmVyYXRlZCkgeworCWFzc2VydChuZXdfc2l6ZSA+IG9sZF9z aXplKTsKKwlhc3NlcnQoZWRhdGFfc2l6ZV9nZXQoZWRhdGEpID09IG9sZF9zaXplKTsKKwlhc3Nl cnQoKG5ld19zaXplICYgUEFHRV9NQVNLKSA9PSAwKTsKKwlpZiAoZWRhdGFfZ3VhcmRlZF9nZXQo ZWRhdGEpKSB7CisJCXJldHVybiB0cnVlOworCX0KKwlzaXplX3QgZXhwYW5kX2Ftb3VudCA9IG5l d19zaXplIC0gb2xkX3NpemU7CisKKwlwYWlfdCAqcGFpID0gcGFfZ2V0X3BhaShzaGFyZCwgZWRh dGEpOworCisJYm9vbCBlcnJvciA9IHBhaV9leHBhbmQodHNkbiwgcGFpLCBlZGF0YSwgb2xkX3Np emUsIG5ld19zaXplLCB6ZXJvLAorCSAgICBkZWZlcnJlZF93b3JrX2dlbmVyYXRlZCk7CisJaWYg KGVycm9yKSB7CisJCXJldHVybiB0cnVlOworCX0KKworCXBhX25hY3RpdmVfYWRkKHNoYXJkLCBl eHBhbmRfYW1vdW50ID4+IExHX1BBR0UpOworCWVkYXRhX3N6aW5kX3NldChlZGF0YSwgc3ppbmQp OworCWVtYXBfcmVtYXAodHNkbiwgc2hhcmQtPmVtYXAsIGVkYXRhLCBzemluZCwgLyogc2xhYiAq LyBmYWxzZSk7CisJcmV0dXJuIGZhbHNlOworfQorCitib29sCitwYV9zaHJpbmsodHNkbl90ICp0 c2RuLCBwYV9zaGFyZF90ICpzaGFyZCwgZWRhdGFfdCAqZWRhdGEsIHNpemVfdCBvbGRfc2l6ZSwK KyAgICBzaXplX3QgbmV3X3NpemUsIHN6aW5kX3Qgc3ppbmQsIGJvb2wgKmRlZmVycmVkX3dvcmtf Z2VuZXJhdGVkKSB7CisJYXNzZXJ0KG5ld19zaXplIDwgb2xkX3NpemUpOworCWFzc2VydChlZGF0 YV9zaXplX2dldChlZGF0YSkgPT0gb2xkX3NpemUpOworCWFzc2VydCgobmV3X3NpemUgJiBQQUdF X01BU0spID09IDApOworCWlmIChlZGF0YV9ndWFyZGVkX2dldChlZGF0YSkpIHsKKwkJcmV0dXJu IHRydWU7CisJfQorCXNpemVfdCBzaHJpbmtfYW1vdW50ID0gb2xkX3NpemUgLSBuZXdfc2l6ZTsK KworCXBhaV90ICpwYWkgPSBwYV9nZXRfcGFpKHNoYXJkLCBlZGF0YSk7CisJYm9vbCBlcnJvciA9 IHBhaV9zaHJpbmsodHNkbiwgcGFpLCBlZGF0YSwgb2xkX3NpemUsIG5ld19zaXplLAorCSAgICBk ZWZlcnJlZF93b3JrX2dlbmVyYXRlZCk7CisJaWYgKGVycm9yKSB7CisJCXJldHVybiB0cnVlOwor CX0KKwlwYV9uYWN0aXZlX3N1YihzaGFyZCwgc2hyaW5rX2Ftb3VudCA+PiBMR19QQUdFKTsKKwor CWVkYXRhX3N6aW5kX3NldChlZGF0YSwgc3ppbmQpOworCWVtYXBfcmVtYXAodHNkbiwgc2hhcmQt PmVtYXAsIGVkYXRhLCBzemluZCwgLyogc2xhYiAqLyBmYWxzZSk7CisJcmV0dXJuIGZhbHNlOwor fQorCit2b2lkCitwYV9kYWxsb2ModHNkbl90ICp0c2RuLCBwYV9zaGFyZF90ICpzaGFyZCwgZWRh dGFfdCAqZWRhdGEsCisgICAgYm9vbCAqZGVmZXJyZWRfd29ya19nZW5lcmF0ZWQpIHsKKwllbWFw X3JlbWFwKHRzZG4sIHNoYXJkLT5lbWFwLCBlZGF0YSwgU0NfTlNJWkVTLCAvKiBzbGFiICovIGZh bHNlKTsKKwlpZiAoZWRhdGFfc2xhYl9nZXQoZWRhdGEpKSB7CisJCWVtYXBfZGVyZWdpc3Rlcl9p bnRlcmlvcih0c2RuLCBzaGFyZC0+ZW1hcCwgZWRhdGEpOworCQkvKgorCQkgKiBUaGUgc2xhYiBz dGF0ZSBvZiB0aGUgZXh0ZW50IGlzbid0IGNsZWFyZWQuICBJdCBtYXkgYmUgdXNlZAorCQkgKiBi eSB0aGUgcGFpIGltcGxlbWVudGF0aW9uLCBlLmcuIHRvIG1ha2UgY2FjaGluZyBkZWNpc2lvbnMu CisJCSAqLworCX0KKwllZGF0YV9hZGRyX3NldChlZGF0YSwgZWRhdGFfYmFzZV9nZXQoZWRhdGEp KTsKKwllZGF0YV9zemluZF9zZXQoZWRhdGEsIFNDX05TSVpFUyk7CisJcGFfbmFjdGl2ZV9zdWIo c2hhcmQsIGVkYXRhX3NpemVfZ2V0KGVkYXRhKSA+PiBMR19QQUdFKTsKKwlwYWlfdCAqcGFpID0g cGFfZ2V0X3BhaShzaGFyZCwgZWRhdGEpOworCXBhaV9kYWxsb2ModHNkbiwgcGFpLCBlZGF0YSwg ZGVmZXJyZWRfd29ya19nZW5lcmF0ZWQpOworfQorCitib29sCitwYV9zaGFyZF9yZXRhaW5fZ3Jv d19saW1pdF9nZXRfc2V0KHRzZG5fdCAqdHNkbiwgcGFfc2hhcmRfdCAqc2hhcmQsCisgICAgc2l6 ZV90ICpvbGRfbGltaXQsIHNpemVfdCAqbmV3X2xpbWl0KSB7CisJcmV0dXJuIHBhY19yZXRhaW5f Z3Jvd19saW1pdF9nZXRfc2V0KHRzZG4sICZzaGFyZC0+cGFjLCBvbGRfbGltaXQsCisJICAgIG5l d19saW1pdCk7Cit9CisKK2Jvb2wKK3BhX2RlY2F5X21zX3NldCh0c2RuX3QgKnRzZG4sIHBhX3No YXJkX3QgKnNoYXJkLCBleHRlbnRfc3RhdGVfdCBzdGF0ZSwKKyAgICBzc2l6ZV90IGRlY2F5X21z LCBwYWNfcHVyZ2VfZWFnZXJuZXNzX3QgZWFnZXJuZXNzKSB7CisJcmV0dXJuIHBhY19kZWNheV9t c19zZXQodHNkbiwgJnNoYXJkLT5wYWMsIHN0YXRlLCBkZWNheV9tcywgZWFnZXJuZXNzKTsKK30K Kworc3NpemVfdAorcGFfZGVjYXlfbXNfZ2V0KHBhX3NoYXJkX3QgKnNoYXJkLCBleHRlbnRfc3Rh dGVfdCBzdGF0ZSkgeworCXJldHVybiBwYWNfZGVjYXlfbXNfZ2V0KCZzaGFyZC0+cGFjLCBzdGF0 ZSk7Cit9CisKK3ZvaWQKK3BhX3NoYXJkX3NldF9kZWZlcnJhbF9hbGxvd2VkKHRzZG5fdCAqdHNk biwgcGFfc2hhcmRfdCAqc2hhcmQsCisgICAgYm9vbCBkZWZlcnJhbF9hbGxvd2VkKSB7CisJaWYg KHBhX3NoYXJkX3VzZXNfaHBhKHNoYXJkKSkgeworCQlocGFfc2hhcmRfc2V0X2RlZmVycmFsX2Fs bG93ZWQodHNkbiwgJnNoYXJkLT5ocGFfc2hhcmQsCisJCSAgICBkZWZlcnJhbF9hbGxvd2VkKTsK Kwl9Cit9CisKK3ZvaWQKK3BhX3NoYXJkX2RvX2RlZmVycmVkX3dvcmsodHNkbl90ICp0c2RuLCBw YV9zaGFyZF90ICpzaGFyZCkgeworCWlmIChwYV9zaGFyZF91c2VzX2hwYShzaGFyZCkpIHsKKwkJ aHBhX3NoYXJkX2RvX2RlZmVycmVkX3dvcmsodHNkbiwgJnNoYXJkLT5ocGFfc2hhcmQpOworCX0K K30KKworLyoKKyAqIEdldCB0aW1lIHVudGlsIG5leHQgZGVmZXJyZWQgd29yayBvdWdodCB0byBo YXBwZW4uIElmIHRoZXJlIGFyZSBtdWx0aXBsZQorICogdGhpbmdzIHRoYXQgaGF2ZSBiZWVuIGRl ZmVycmVkLCB0aGlzIGZ1bmN0aW9uIGNhbGN1bGF0ZXMgdGhlIHRpbWUgdW50aWwKKyAqIHRoZSBz b29uZXN0IG9mIHRob3NlIHRoaW5ncy4KKyAqLwordWludDY0X3QKK3BhX3NoYXJkX3RpbWVfdW50 aWxfZGVmZXJyZWRfd29yayh0c2RuX3QgKnRzZG4sIHBhX3NoYXJkX3QgKnNoYXJkKSB7CisJdWlu dDY0X3QgdGltZSA9IHBhaV90aW1lX3VudGlsX2RlZmVycmVkX3dvcmsodHNkbiwgJnNoYXJkLT5w YWMucGFpKTsKKwlpZiAodGltZSA9PSBCQUNLR1JPVU5EX1RIUkVBRF9ERUZFUlJFRF9NSU4pIHsK KwkJcmV0dXJuIHRpbWU7CisJfQorCisJaWYgKHBhX3NoYXJkX3VzZXNfaHBhKHNoYXJkKSkgewor CQl1aW50NjRfdCBocGEgPQorCQkgICAgcGFpX3RpbWVfdW50aWxfZGVmZXJyZWRfd29yayh0c2Ru LCAmc2hhcmQtPmhwYV9zaGFyZC5wYWkpOworCQlpZiAoaHBhIDwgdGltZSkgeworCQkJdGltZSA9 IGhwYTsKKwkJfQorCX0KKwlyZXR1cm4gdGltZTsKK30KCmRpZmYgLS1naXQgYS8zODktZHMtYmFz ZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9zcmMvcGFfZXh0cmEuYyBiLzM4OS1kcy1iYXNl LTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3NyYy9wYV9leHRyYS5jCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmNDg4YmUKLS0tIC9kZXYvbnVsbAorKysgYi8zODktZHMt YmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9zcmMvcGFfZXh0cmEuYwpAQCAtMCwwICsx LDE5MSBAQAorI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2plbWFsbG9jX3ByZWFtYmxlLmgi CisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvamVtYWxsb2NfaW50ZXJuYWxfaW5jbHVkZXMu aCIKKworLyoKKyAqIFRoaXMgZmlsZSBpcyBsb2dpY2FsbHkgcGFydCBvZiB0aGUgUEEgbW9kdWxl LiAgV2hpbGUgcGEuYyBjb250YWlucyB0aGUgY29yZQorICogYWxsb2NhdG9yIGZ1bmN0aW9uYWxp dHksIHRoaXMgZmlsZSBjb250YWlucyBib3JpbmcgaW50ZWdyYXRpb24gZnVuY3Rpb25hbGl0eTsK KyAqIHRoaW5ncyBsaWtlIHRoZSBwcmUtIGFuZCBwb3N0LSBmb3JrIGhhbmRsZXJzLCBhbmQgc3Rh dHMgbWVyZ2luZyBmb3IgQ1RMCisgKiByZWZyZXNoZXMuCisgKi8KKwordm9pZAorcGFfc2hhcmRf cHJlZm9yazAodHNkbl90ICp0c2RuLCBwYV9zaGFyZF90ICpzaGFyZCkgeworCW1hbGxvY19tdXRl eF9wcmVmb3JrKHRzZG4sICZzaGFyZC0+cGFjLmRlY2F5X2RpcnR5Lm10eCk7CisJbWFsbG9jX211 dGV4X3ByZWZvcmsodHNkbiwgJnNoYXJkLT5wYWMuZGVjYXlfbXV6enkubXR4KTsKK30KKwordm9p ZAorcGFfc2hhcmRfcHJlZm9yazIodHNkbl90ICp0c2RuLCBwYV9zaGFyZF90ICpzaGFyZCkgewor CWlmIChzaGFyZC0+ZXZlcl91c2VkX2hwYSkgeworCQlzZWNfcHJlZm9yazIodHNkbiwgJnNoYXJk LT5ocGFfc2VjKTsKKwl9Cit9CisKK3ZvaWQKK3BhX3NoYXJkX3ByZWZvcmszKHRzZG5fdCAqdHNk biwgcGFfc2hhcmRfdCAqc2hhcmQpIHsKKwltYWxsb2NfbXV0ZXhfcHJlZm9yayh0c2RuLCAmc2hh cmQtPnBhYy5ncm93X210eCk7CisJaWYgKHNoYXJkLT5ldmVyX3VzZWRfaHBhKSB7CisJCWhwYV9z aGFyZF9wcmVmb3JrMyh0c2RuLCAmc2hhcmQtPmhwYV9zaGFyZCk7CisJfQorfQorCit2b2lkCitw YV9zaGFyZF9wcmVmb3JrNCh0c2RuX3QgKnRzZG4sIHBhX3NoYXJkX3QgKnNoYXJkKSB7CisJZWNh Y2hlX3ByZWZvcmsodHNkbiwgJnNoYXJkLT5wYWMuZWNhY2hlX2RpcnR5KTsKKwllY2FjaGVfcHJl Zm9yayh0c2RuLCAmc2hhcmQtPnBhYy5lY2FjaGVfbXV6enkpOworCWVjYWNoZV9wcmVmb3JrKHRz ZG4sICZzaGFyZC0+cGFjLmVjYWNoZV9yZXRhaW5lZCk7CisJaWYgKHNoYXJkLT5ldmVyX3VzZWRf aHBhKSB7CisJCWhwYV9zaGFyZF9wcmVmb3JrNCh0c2RuLCAmc2hhcmQtPmhwYV9zaGFyZCk7CisJ fQorfQorCit2b2lkCitwYV9zaGFyZF9wcmVmb3JrNSh0c2RuX3QgKnRzZG4sIHBhX3NoYXJkX3Qg KnNoYXJkKSB7CisJZWRhdGFfY2FjaGVfcHJlZm9yayh0c2RuLCAmc2hhcmQtPmVkYXRhX2NhY2hl KTsKK30KKwordm9pZAorcGFfc2hhcmRfcG9zdGZvcmtfcGFyZW50KHRzZG5fdCAqdHNkbiwgcGFf c2hhcmRfdCAqc2hhcmQpIHsKKwllZGF0YV9jYWNoZV9wb3N0Zm9ya19wYXJlbnQodHNkbiwgJnNo YXJkLT5lZGF0YV9jYWNoZSk7CisJZWNhY2hlX3Bvc3Rmb3JrX3BhcmVudCh0c2RuLCAmc2hhcmQt PnBhYy5lY2FjaGVfZGlydHkpOworCWVjYWNoZV9wb3N0Zm9ya19wYXJlbnQodHNkbiwgJnNoYXJk LT5wYWMuZWNhY2hlX211enp5KTsKKwllY2FjaGVfcG9zdGZvcmtfcGFyZW50KHRzZG4sICZzaGFy ZC0+cGFjLmVjYWNoZV9yZXRhaW5lZCk7CisJbWFsbG9jX211dGV4X3Bvc3Rmb3JrX3BhcmVudCh0 c2RuLCAmc2hhcmQtPnBhYy5ncm93X210eCk7CisJbWFsbG9jX211dGV4X3Bvc3Rmb3JrX3BhcmVu dCh0c2RuLCAmc2hhcmQtPnBhYy5kZWNheV9kaXJ0eS5tdHgpOworCW1hbGxvY19tdXRleF9wb3N0 Zm9ya19wYXJlbnQodHNkbiwgJnNoYXJkLT5wYWMuZGVjYXlfbXV6enkubXR4KTsKKwlpZiAoc2hh cmQtPmV2ZXJfdXNlZF9ocGEpIHsKKwkJc2VjX3Bvc3Rmb3JrX3BhcmVudCh0c2RuLCAmc2hhcmQt PmhwYV9zZWMpOworCQlocGFfc2hhcmRfcG9zdGZvcmtfcGFyZW50KHRzZG4sICZzaGFyZC0+aHBh X3NoYXJkKTsKKwl9Cit9CisKK3ZvaWQKK3BhX3NoYXJkX3Bvc3Rmb3JrX2NoaWxkKHRzZG5fdCAq dHNkbiwgcGFfc2hhcmRfdCAqc2hhcmQpIHsKKwllZGF0YV9jYWNoZV9wb3N0Zm9ya19jaGlsZCh0 c2RuLCAmc2hhcmQtPmVkYXRhX2NhY2hlKTsKKwllY2FjaGVfcG9zdGZvcmtfY2hpbGQodHNkbiwg JnNoYXJkLT5wYWMuZWNhY2hlX2RpcnR5KTsKKwllY2FjaGVfcG9zdGZvcmtfY2hpbGQodHNkbiwg JnNoYXJkLT5wYWMuZWNhY2hlX211enp5KTsKKwllY2FjaGVfcG9zdGZvcmtfY2hpbGQodHNkbiwg JnNoYXJkLT5wYWMuZWNhY2hlX3JldGFpbmVkKTsKKwltYWxsb2NfbXV0ZXhfcG9zdGZvcmtfY2hp bGQodHNkbiwgJnNoYXJkLT5wYWMuZ3Jvd19tdHgpOworCW1hbGxvY19tdXRleF9wb3N0Zm9ya19j aGlsZCh0c2RuLCAmc2hhcmQtPnBhYy5kZWNheV9kaXJ0eS5tdHgpOworCW1hbGxvY19tdXRleF9w b3N0Zm9ya19jaGlsZCh0c2RuLCAmc2hhcmQtPnBhYy5kZWNheV9tdXp6eS5tdHgpOworCWlmIChz aGFyZC0+ZXZlcl91c2VkX2hwYSkgeworCQlzZWNfcG9zdGZvcmtfY2hpbGQodHNkbiwgJnNoYXJk LT5ocGFfc2VjKTsKKwkJaHBhX3NoYXJkX3Bvc3Rmb3JrX2NoaWxkKHRzZG4sICZzaGFyZC0+aHBh X3NoYXJkKTsKKwl9Cit9CisKK3ZvaWQKK3BhX3NoYXJkX2Jhc2ljX3N0YXRzX21lcmdlKHBhX3No YXJkX3QgKnNoYXJkLCBzaXplX3QgKm5hY3RpdmUsIHNpemVfdCAqbmRpcnR5LAorICAgIHNpemVf dCAqbm11enp5KSB7CisJKm5hY3RpdmUgKz0gYXRvbWljX2xvYWRfenUoJnNoYXJkLT5uYWN0aXZl LCBBVE9NSUNfUkVMQVhFRCk7CisJKm5kaXJ0eSArPSBlY2FjaGVfbnBhZ2VzX2dldCgmc2hhcmQt PnBhYy5lY2FjaGVfZGlydHkpOworCSpubXV6enkgKz0gZWNhY2hlX25wYWdlc19nZXQoJnNoYXJk LT5wYWMuZWNhY2hlX211enp5KTsKK30KKwordm9pZAorcGFfc2hhcmRfc3RhdHNfbWVyZ2UodHNk bl90ICp0c2RuLCBwYV9zaGFyZF90ICpzaGFyZCwKKyAgICBwYV9zaGFyZF9zdGF0c190ICpwYV9z aGFyZF9zdGF0c19vdXQsIHBhY19lc3RhdHNfdCAqZXN0YXRzX291dCwKKyAgICBocGFfc2hhcmRf c3RhdHNfdCAqaHBhX3N0YXRzX291dCwgc2VjX3N0YXRzX3QgKnNlY19zdGF0c19vdXQsCisgICAg c2l6ZV90ICpyZXNpZGVudCkgeworCWNhc3NlcnQoY29uZmlnX3N0YXRzKTsKKworCXBhX3NoYXJk X3N0YXRzX291dC0+cGFjX3N0YXRzLnJldGFpbmVkICs9CisJICAgIGVjYWNoZV9ucGFnZXNfZ2V0 KCZzaGFyZC0+cGFjLmVjYWNoZV9yZXRhaW5lZCkgPDwgTEdfUEFHRTsKKwlwYV9zaGFyZF9zdGF0 c19vdXQtPmVkYXRhX2F2YWlsICs9IGF0b21pY19sb2FkX3p1KAorCSAgICAmc2hhcmQtPmVkYXRh X2NhY2hlLmNvdW50LCBBVE9NSUNfUkVMQVhFRCk7CisKKwlzaXplX3QgcmVzaWRlbnRfcGdzID0g MDsKKwlyZXNpZGVudF9wZ3MgKz0gYXRvbWljX2xvYWRfenUoJnNoYXJkLT5uYWN0aXZlLCBBVE9N SUNfUkVMQVhFRCk7CisJcmVzaWRlbnRfcGdzICs9IGVjYWNoZV9ucGFnZXNfZ2V0KCZzaGFyZC0+ cGFjLmVjYWNoZV9kaXJ0eSk7CisJKnJlc2lkZW50ICs9IChyZXNpZGVudF9wZ3MgPDwgTEdfUEFH RSk7CisKKwkvKiBEaXJ0eSBkZWNheSBzdGF0cyAqLworCWxvY2tlZF9pbmNfdTY0X3Vuc3luY2hy b25pemVkKAorCSAgICAmcGFfc2hhcmRfc3RhdHNfb3V0LT5wYWNfc3RhdHMuZGVjYXlfZGlydHku bnB1cmdlLAorCSAgICBsb2NrZWRfcmVhZF91NjQodHNkbiwgTE9DS0VESU5UX01UWCgqc2hhcmQt PnN0YXRzX210eCksCisJICAgICZzaGFyZC0+cGFjLnN0YXRzLT5kZWNheV9kaXJ0eS5ucHVyZ2Up KTsKKwlsb2NrZWRfaW5jX3U2NF91bnN5bmNocm9uaXplZCgKKwkgICAgJnBhX3NoYXJkX3N0YXRz X291dC0+cGFjX3N0YXRzLmRlY2F5X2RpcnR5Lm5tYWR2aXNlLAorCSAgICBsb2NrZWRfcmVhZF91 NjQodHNkbiwgTE9DS0VESU5UX01UWCgqc2hhcmQtPnN0YXRzX210eCksCisJICAgICZzaGFyZC0+ cGFjLnN0YXRzLT5kZWNheV9kaXJ0eS5ubWFkdmlzZSkpOworCWxvY2tlZF9pbmNfdTY0X3Vuc3lu Y2hyb25pemVkKAorCSAgICAmcGFfc2hhcmRfc3RhdHNfb3V0LT5wYWNfc3RhdHMuZGVjYXlfZGly dHkucHVyZ2VkLAorCSAgICBsb2NrZWRfcmVhZF91NjQodHNkbiwgTE9DS0VESU5UX01UWCgqc2hh cmQtPnN0YXRzX210eCksCisJICAgICZzaGFyZC0+cGFjLnN0YXRzLT5kZWNheV9kaXJ0eS5wdXJn ZWQpKTsKKworCS8qIE11enp5IGRlY2F5IHN0YXRzICovCisJbG9ja2VkX2luY191NjRfdW5zeW5j aHJvbml6ZWQoCisJICAgICZwYV9zaGFyZF9zdGF0c19vdXQtPnBhY19zdGF0cy5kZWNheV9tdXp6 eS5ucHVyZ2UsCisJICAgIGxvY2tlZF9yZWFkX3U2NCh0c2RuLCBMT0NLRURJTlRfTVRYKCpzaGFy ZC0+c3RhdHNfbXR4KSwKKwkgICAgJnNoYXJkLT5wYWMuc3RhdHMtPmRlY2F5X211enp5Lm5wdXJn ZSkpOworCWxvY2tlZF9pbmNfdTY0X3Vuc3luY2hyb25pemVkKAorCSAgICAmcGFfc2hhcmRfc3Rh dHNfb3V0LT5wYWNfc3RhdHMuZGVjYXlfbXV6enkubm1hZHZpc2UsCisJICAgIGxvY2tlZF9yZWFk X3U2NCh0c2RuLCBMT0NLRURJTlRfTVRYKCpzaGFyZC0+c3RhdHNfbXR4KSwKKwkgICAgJnNoYXJk LT5wYWMuc3RhdHMtPmRlY2F5X211enp5Lm5tYWR2aXNlKSk7CisJbG9ja2VkX2luY191NjRfdW5z eW5jaHJvbml6ZWQoCisJICAgICZwYV9zaGFyZF9zdGF0c19vdXQtPnBhY19zdGF0cy5kZWNheV9t dXp6eS5wdXJnZWQsCisJICAgIGxvY2tlZF9yZWFkX3U2NCh0c2RuLCBMT0NLRURJTlRfTVRYKCpz aGFyZC0+c3RhdHNfbXR4KSwKKwkgICAgJnNoYXJkLT5wYWMuc3RhdHMtPmRlY2F5X211enp5LnB1 cmdlZCkpOworCisJYXRvbWljX2xvYWRfYWRkX3N0b3JlX3p1KCZwYV9zaGFyZF9zdGF0c19vdXQt PnBhY19zdGF0cy5hYmFuZG9uZWRfdm0sCisJICAgIGF0b21pY19sb2FkX3p1KCZzaGFyZC0+cGFj LnN0YXRzLT5hYmFuZG9uZWRfdm0sIEFUT01JQ19SRUxBWEVEKSk7CisKKwlmb3IgKHBzemluZF90 IGkgPSAwOyBpIDwgU0NfTlBTSVpFUzsgaSsrKSB7CisJCXNpemVfdCBkaXJ0eSwgbXV6enksIHJl dGFpbmVkLCBkaXJ0eV9ieXRlcywgbXV6enlfYnl0ZXMsCisJCSAgICByZXRhaW5lZF9ieXRlczsK KwkJZGlydHkgPSBlY2FjaGVfbmV4dGVudHNfZ2V0KCZzaGFyZC0+cGFjLmVjYWNoZV9kaXJ0eSwg aSk7CisJCW11enp5ID0gZWNhY2hlX25leHRlbnRzX2dldCgmc2hhcmQtPnBhYy5lY2FjaGVfbXV6 enksIGkpOworCQlyZXRhaW5lZCA9IGVjYWNoZV9uZXh0ZW50c19nZXQoJnNoYXJkLT5wYWMuZWNh Y2hlX3JldGFpbmVkLCBpKTsKKwkJZGlydHlfYnl0ZXMgPSBlY2FjaGVfbmJ5dGVzX2dldCgmc2hh cmQtPnBhYy5lY2FjaGVfZGlydHksIGkpOworCQltdXp6eV9ieXRlcyA9IGVjYWNoZV9uYnl0ZXNf Z2V0KCZzaGFyZC0+cGFjLmVjYWNoZV9tdXp6eSwgaSk7CisJCXJldGFpbmVkX2J5dGVzID0gZWNh Y2hlX25ieXRlc19nZXQoJnNoYXJkLT5wYWMuZWNhY2hlX3JldGFpbmVkLAorCQkgICAgaSk7CisK KwkJZXN0YXRzX291dFtpXS5uZGlydHkgPSBkaXJ0eTsKKwkJZXN0YXRzX291dFtpXS5ubXV6enkg PSBtdXp6eTsKKwkJZXN0YXRzX291dFtpXS5ucmV0YWluZWQgPSByZXRhaW5lZDsKKwkJZXN0YXRz X291dFtpXS5kaXJ0eV9ieXRlcyA9IGRpcnR5X2J5dGVzOworCQllc3RhdHNfb3V0W2ldLm11enp5 X2J5dGVzID0gbXV6enlfYnl0ZXM7CisJCWVzdGF0c19vdXRbaV0ucmV0YWluZWRfYnl0ZXMgPSBy ZXRhaW5lZF9ieXRlczsKKwl9CisKKwlpZiAoc2hhcmQtPmV2ZXJfdXNlZF9ocGEpIHsKKwkJaHBh X3NoYXJkX3N0YXRzX21lcmdlKHRzZG4sICZzaGFyZC0+aHBhX3NoYXJkLCBocGFfc3RhdHNfb3V0 KTsKKwkJc2VjX3N0YXRzX21lcmdlKHRzZG4sICZzaGFyZC0+aHBhX3NlYywgc2VjX3N0YXRzX291 dCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorcGFfc2hhcmRfbXR4X3N0YXRzX3JlYWRfc2luZ2xl KHRzZG5fdCAqdHNkbiwgbXV0ZXhfcHJvZl9kYXRhX3QgKm11dGV4X3Byb2ZfZGF0YSwKKyAgICBt YWxsb2NfbXV0ZXhfdCAqbXR4LCBpbnQgaW5kKSB7CisJbWFsbG9jX211dGV4X2xvY2sodHNkbiwg bXR4KTsKKwltYWxsb2NfbXV0ZXhfcHJvZl9yZWFkKHRzZG4sICZtdXRleF9wcm9mX2RhdGFbaW5k XSwgbXR4KTsKKwltYWxsb2NfbXV0ZXhfdW5sb2NrKHRzZG4sIG10eCk7Cit9CisKK3ZvaWQKK3Bh X3NoYXJkX210eF9zdGF0c19yZWFkKHRzZG5fdCAqdHNkbiwgcGFfc2hhcmRfdCAqc2hhcmQsCisg ICAgbXV0ZXhfcHJvZl9kYXRhX3QgbXV0ZXhfcHJvZl9kYXRhW211dGV4X3Byb2ZfbnVtX2FyZW5h X211dGV4ZXNdKSB7CisJcGFfc2hhcmRfbXR4X3N0YXRzX3JlYWRfc2luZ2xlKHRzZG4sIG11dGV4 X3Byb2ZfZGF0YSwKKwkgICAgJnNoYXJkLT5lZGF0YV9jYWNoZS5tdHgsIGFyZW5hX3Byb2ZfbXV0 ZXhfZXh0ZW50X2F2YWlsKTsKKwlwYV9zaGFyZF9tdHhfc3RhdHNfcmVhZF9zaW5nbGUodHNkbiwg bXV0ZXhfcHJvZl9kYXRhLAorCSAgICAmc2hhcmQtPnBhYy5lY2FjaGVfZGlydHkubXR4LCBhcmVu YV9wcm9mX211dGV4X2V4dGVudHNfZGlydHkpOworCXBhX3NoYXJkX210eF9zdGF0c19yZWFkX3Np bmdsZSh0c2RuLCBtdXRleF9wcm9mX2RhdGEsCisJICAgICZzaGFyZC0+cGFjLmVjYWNoZV9tdXp6 eS5tdHgsIGFyZW5hX3Byb2ZfbXV0ZXhfZXh0ZW50c19tdXp6eSk7CisJcGFfc2hhcmRfbXR4X3N0 YXRzX3JlYWRfc2luZ2xlKHRzZG4sIG11dGV4X3Byb2ZfZGF0YSwKKwkgICAgJnNoYXJkLT5wYWMu ZWNhY2hlX3JldGFpbmVkLm10eCwgYXJlbmFfcHJvZl9tdXRleF9leHRlbnRzX3JldGFpbmVkKTsK KwlwYV9zaGFyZF9tdHhfc3RhdHNfcmVhZF9zaW5nbGUodHNkbiwgbXV0ZXhfcHJvZl9kYXRhLAor CSAgICAmc2hhcmQtPnBhYy5kZWNheV9kaXJ0eS5tdHgsIGFyZW5hX3Byb2ZfbXV0ZXhfZGVjYXlf ZGlydHkpOworCXBhX3NoYXJkX210eF9zdGF0c19yZWFkX3NpbmdsZSh0c2RuLCBtdXRleF9wcm9m X2RhdGEsCisJICAgICZzaGFyZC0+cGFjLmRlY2F5X211enp5Lm10eCwgYXJlbmFfcHJvZl9tdXRl eF9kZWNheV9tdXp6eSk7CisKKwlpZiAoc2hhcmQtPmV2ZXJfdXNlZF9ocGEpIHsKKwkJcGFfc2hh cmRfbXR4X3N0YXRzX3JlYWRfc2luZ2xlKHRzZG4sIG11dGV4X3Byb2ZfZGF0YSwKKwkJICAgICZz aGFyZC0+aHBhX3NoYXJkLm10eCwgYXJlbmFfcHJvZl9tdXRleF9ocGFfc2hhcmQpOworCQlwYV9z aGFyZF9tdHhfc3RhdHNfcmVhZF9zaW5nbGUodHNkbiwgbXV0ZXhfcHJvZl9kYXRhLAorCQkgICAg JnNoYXJkLT5ocGFfc2hhcmQuZ3Jvd19tdHgsCisJCSAgICBhcmVuYV9wcm9mX211dGV4X2hwYV9z aGFyZF9ncm93KTsKKwkJc2VjX211dGV4X3N0YXRzX3JlYWQodHNkbiwgJnNoYXJkLT5ocGFfc2Vj LAorCQkgICAgJm11dGV4X3Byb2ZfZGF0YVthcmVuYV9wcm9mX211dGV4X2hwYV9zZWNdKTsKKwl9 Cit9CgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAv c3JjL3BhYy5jIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvc3JjL3Bh Yy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzZTNkODIKLS0tIC9kZXYv bnVsbAorKysgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9zcmMvcGFj LmMKQEAgLTAsMCArMSw1ODcgQEAKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9qZW1hbGxv Y19wcmVhbWJsZS5oIgorI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2plbWFsbG9jX2ludGVy bmFsX2luY2x1ZGVzLmgiCisKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9wYWMuaCIKKyNp bmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9zYW4uaCIKKworc3RhdGljIGVkYXRhX3QgKnBhY19h bGxvY19pbXBsKHRzZG5fdCAqdHNkbiwgcGFpX3QgKnNlbGYsIHNpemVfdCBzaXplLAorICAgIHNp emVfdCBhbGlnbm1lbnQsIGJvb2wgemVybywgYm9vbCBndWFyZGVkLCBib29sIGZyZXF1ZW50X3Jl dXNlLAorICAgIGJvb2wgKmRlZmVycmVkX3dvcmtfZ2VuZXJhdGVkKTsKK3N0YXRpYyBib29sIHBh Y19leHBhbmRfaW1wbCh0c2RuX3QgKnRzZG4sIHBhaV90ICpzZWxmLCBlZGF0YV90ICplZGF0YSwK KyAgICBzaXplX3Qgb2xkX3NpemUsIHNpemVfdCBuZXdfc2l6ZSwgYm9vbCB6ZXJvLCBib29sICpk ZWZlcnJlZF93b3JrX2dlbmVyYXRlZCk7CitzdGF0aWMgYm9vbCBwYWNfc2hyaW5rX2ltcGwodHNk bl90ICp0c2RuLCBwYWlfdCAqc2VsZiwgZWRhdGFfdCAqZWRhdGEsCisgICAgc2l6ZV90IG9sZF9z aXplLCBzaXplX3QgbmV3X3NpemUsIGJvb2wgKmRlZmVycmVkX3dvcmtfZ2VuZXJhdGVkKTsKK3N0 YXRpYyB2b2lkIHBhY19kYWxsb2NfaW1wbCh0c2RuX3QgKnRzZG4sIHBhaV90ICpzZWxmLCBlZGF0 YV90ICplZGF0YSwKKyAgICBib29sICpkZWZlcnJlZF93b3JrX2dlbmVyYXRlZCk7CitzdGF0aWMg dWludDY0X3QgcGFjX3RpbWVfdW50aWxfZGVmZXJyZWRfd29yayh0c2RuX3QgKnRzZG4sIHBhaV90 ICpzZWxmKTsKKworc3RhdGljIGlubGluZSB2b2lkCitwYWNfZGVjYXlfZGF0YV9nZXQocGFjX3Qg KnBhYywgZXh0ZW50X3N0YXRlX3Qgc3RhdGUsCisgICAgZGVjYXlfdCAqKnJfZGVjYXksIHBhY19k ZWNheV9zdGF0c190ICoqcl9kZWNheV9zdGF0cywgZWNhY2hlX3QgKipyX2VjYWNoZSkgeworCXN3 aXRjaChzdGF0ZSkgeworCWNhc2UgZXh0ZW50X3N0YXRlX2RpcnR5OgorCQkqcl9kZWNheSA9ICZw YWMtPmRlY2F5X2RpcnR5OworCQkqcl9kZWNheV9zdGF0cyA9ICZwYWMtPnN0YXRzLT5kZWNheV9k aXJ0eTsKKwkJKnJfZWNhY2hlID0gJnBhYy0+ZWNhY2hlX2RpcnR5OworCQlyZXR1cm47CisJY2Fz ZSBleHRlbnRfc3RhdGVfbXV6enk6CisJCSpyX2RlY2F5ID0gJnBhYy0+ZGVjYXlfbXV6enk7CisJ CSpyX2RlY2F5X3N0YXRzID0gJnBhYy0+c3RhdHMtPmRlY2F5X211enp5OworCQkqcl9lY2FjaGUg PSAmcGFjLT5lY2FjaGVfbXV6enk7CisJCXJldHVybjsKKwlkZWZhdWx0OgorCQl1bnJlYWNoYWJs ZSgpOworCX0KK30KKworYm9vbAorcGFjX2luaXQodHNkbl90ICp0c2RuLCBwYWNfdCAqcGFjLCBi YXNlX3QgKmJhc2UsIGVtYXBfdCAqZW1hcCwKKyAgICBlZGF0YV9jYWNoZV90ICplZGF0YV9jYWNo ZSwgbnN0aW1lX3QgKmN1cl90aW1lLAorICAgIHNpemVfdCBwYWNfb3ZlcnNpemVfdGhyZXNob2xk LCBzc2l6ZV90IGRpcnR5X2RlY2F5X21zLAorICAgIHNzaXplX3QgbXV6enlfZGVjYXlfbXMsIHBh Y19zdGF0c190ICpwYWNfc3RhdHMsIG1hbGxvY19tdXRleF90ICpzdGF0c19tdHgpIHsKKwl1bnNp Z25lZCBpbmQgPSBiYXNlX2luZF9nZXQoYmFzZSk7CisJLyoKKwkgKiBEZWxheSBjb2FsZXNjaW5n IGZvciBkaXJ0eSBleHRlbnRzIGRlc3BpdGUgdGhlIGRpc3J1cHRpdmUgZWZmZWN0IG9uCisJICog bWVtb3J5IGxheW91dCBmb3IgYmVzdC1maXQgZXh0ZW50IGFsbG9jYXRpb24sIHNpbmNlIGNhY2hl ZCBleHRlbnRzCisJICogYXJlIGxpa2VseSB0byBiZSByZXVzZWQgc29vbiBhZnRlciBkZWFsbG9j YXRpb24sIGFuZCB0aGUgY29zdCBvZgorCSAqIG1lcmdpbmcvc3BsaXR0aW5nIGV4dGVudHMgaXMg bm9uLXRyaXZpYWwuCisJICovCisJaWYgKGVjYWNoZV9pbml0KHRzZG4sICZwYWMtPmVjYWNoZV9k aXJ0eSwgZXh0ZW50X3N0YXRlX2RpcnR5LCBpbmQsCisJICAgIC8qIGRlbGF5X2NvYWxlc2NlICov IHRydWUpKSB7CisJCXJldHVybiB0cnVlOworCX0KKwkvKgorCSAqIENvYWxlc2NlIG11enp5IGV4 dGVudHMgaW1tZWRpYXRlbHksIGJlY2F1c2Ugb3BlcmF0aW9ucyBvbiB0aGVtIGFyZSBpbgorCSAq IHRoZSBjcml0aWNhbCBwYXRoIG11Y2ggbGVzcyBvZnRlbiB0aGFuIGZvciBkaXJ0eSBleHRlbnRz LgorCSAqLworCWlmIChlY2FjaGVfaW5pdCh0c2RuLCAmcGFjLT5lY2FjaGVfbXV6enksIGV4dGVu dF9zdGF0ZV9tdXp6eSwgaW5kLAorCSAgICAvKiBkZWxheV9jb2FsZXNjZSAqLyBmYWxzZSkpIHsK KwkJcmV0dXJuIHRydWU7CisJfQorCS8qCisJICogQ29hbGVzY2UgcmV0YWluZWQgZXh0ZW50cyBp bW1lZGlhdGVseSwgaW4gcGFydCBiZWNhdXNlIHRoZXkgd2lsbAorCSAqIG5ldmVyIGJlIGV2aWN0 ZWQgKGFuZCB0aGVyZWZvcmUgdGhlcmUncyBubyBvcHBvcnR1bml0eSBmb3IgZGVsYXllZAorCSAq IGNvYWxlc2NpbmcpLCBidXQgYWxzbyBiZWNhdXNlIG9wZXJhdGlvbnMgb24gcmV0YWluZWQgZXh0 ZW50cyBhcmUgbm90CisJICogaW4gdGhlIGNyaXRpY2FsIHBhdGguCisJICovCisJaWYgKGVjYWNo ZV9pbml0KHRzZG4sICZwYWMtPmVjYWNoZV9yZXRhaW5lZCwgZXh0ZW50X3N0YXRlX3JldGFpbmVk LAorCSAgICBpbmQsIC8qIGRlbGF5X2NvYWxlc2NlICovIGZhbHNlKSkgeworCQlyZXR1cm4gdHJ1 ZTsKKwl9CisJZXhwX2dyb3dfaW5pdCgmcGFjLT5leHBfZ3Jvdyk7CisJaWYgKG1hbGxvY19tdXRl eF9pbml0KCZwYWMtPmdyb3dfbXR4LCAiZXh0ZW50X2dyb3ciLAorCSAgICBXSVRORVNTX1JBTktf RVhURU5UX0dST1csIG1hbGxvY19tdXRleF9yYW5rX2V4Y2x1c2l2ZSkpIHsKKwkJcmV0dXJuIHRy dWU7CisJfQorCWF0b21pY19zdG9yZV96dSgmcGFjLT5vdmVyc2l6ZV90aHJlc2hvbGQsIHBhY19v dmVyc2l6ZV90aHJlc2hvbGQsCisJICAgIEFUT01JQ19SRUxBWEVEKTsKKwlpZiAoZGVjYXlfaW5p dCgmcGFjLT5kZWNheV9kaXJ0eSwgY3VyX3RpbWUsIGRpcnR5X2RlY2F5X21zKSkgeworCQlyZXR1 cm4gdHJ1ZTsKKwl9CisJaWYgKGRlY2F5X2luaXQoJnBhYy0+ZGVjYXlfbXV6enksIGN1cl90aW1l LCBtdXp6eV9kZWNheV9tcykpIHsKKwkJcmV0dXJuIHRydWU7CisJfQorCWlmIChzYW5fYnVtcF9h bGxvY19pbml0KCZwYWMtPnNiYSkpIHsKKwkJcmV0dXJuIHRydWU7CisJfQorCisJcGFjLT5iYXNl ID0gYmFzZTsKKwlwYWMtPmVtYXAgPSBlbWFwOworCXBhYy0+ZWRhdGFfY2FjaGUgPSBlZGF0YV9j YWNoZTsKKwlwYWMtPnN0YXRzID0gcGFjX3N0YXRzOworCXBhYy0+c3RhdHNfbXR4ID0gc3RhdHNf bXR4OworCWF0b21pY19zdG9yZV96dSgmcGFjLT5leHRlbnRfc25fbmV4dCwgMCwgQVRPTUlDX1JF TEFYRUQpOworCisJcGFjLT5wYWkuYWxsb2MgPSAmcGFjX2FsbG9jX2ltcGw7CisJcGFjLT5wYWku YWxsb2NfYmF0Y2ggPSAmcGFpX2FsbG9jX2JhdGNoX2RlZmF1bHQ7CisJcGFjLT5wYWkuZXhwYW5k ID0gJnBhY19leHBhbmRfaW1wbDsKKwlwYWMtPnBhaS5zaHJpbmsgPSAmcGFjX3Nocmlua19pbXBs OworCXBhYy0+cGFpLmRhbGxvYyA9ICZwYWNfZGFsbG9jX2ltcGw7CisJcGFjLT5wYWkuZGFsbG9j X2JhdGNoID0gJnBhaV9kYWxsb2NfYmF0Y2hfZGVmYXVsdDsKKwlwYWMtPnBhaS50aW1lX3VudGls X2RlZmVycmVkX3dvcmsgPSAmcGFjX3RpbWVfdW50aWxfZGVmZXJyZWRfd29yazsKKworCXJldHVy biBmYWxzZTsKK30KKworc3RhdGljIGlubGluZSBib29sCitwYWNfbWF5X2hhdmVfbXV6enkocGFj X3QgKnBhYykgeworCXJldHVybiBwYWNfZGVjYXlfbXNfZ2V0KHBhYywgZXh0ZW50X3N0YXRlX211 enp5KSAhPSAwOworfQorCitzdGF0aWMgZWRhdGFfdCAqCitwYWNfYWxsb2NfcmVhbCh0c2RuX3Qg KnRzZG4sIHBhY190ICpwYWMsIGVob29rc190ICplaG9va3MsIHNpemVfdCBzaXplLAorICAgIHNp emVfdCBhbGlnbm1lbnQsIGJvb2wgemVybywgYm9vbCBndWFyZGVkKSB7CisJYXNzZXJ0KCFndWFy ZGVkIHx8IGFsaWdubWVudCA8PSBQQUdFKTsKKworCWVkYXRhX3QgKmVkYXRhID0gZWNhY2hlX2Fs bG9jKHRzZG4sIHBhYywgZWhvb2tzLCAmcGFjLT5lY2FjaGVfZGlydHksCisJICAgIE5VTEwsIHNp emUsIGFsaWdubWVudCwgemVybywgZ3VhcmRlZCk7CisKKwlpZiAoZWRhdGEgPT0gTlVMTCAmJiBw YWNfbWF5X2hhdmVfbXV6enkocGFjKSkgeworCQllZGF0YSA9IGVjYWNoZV9hbGxvYyh0c2RuLCBw YWMsIGVob29rcywgJnBhYy0+ZWNhY2hlX211enp5LAorCQkgICAgTlVMTCwgc2l6ZSwgYWxpZ25t ZW50LCB6ZXJvLCBndWFyZGVkKTsKKwl9CisJaWYgKGVkYXRhID09IE5VTEwpIHsKKwkJZWRhdGEg PSBlY2FjaGVfYWxsb2NfZ3Jvdyh0c2RuLCBwYWMsIGVob29rcywKKwkJICAgICZwYWMtPmVjYWNo ZV9yZXRhaW5lZCwgTlVMTCwgc2l6ZSwgYWxpZ25tZW50LCB6ZXJvLAorCQkgICAgZ3VhcmRlZCk7 CisJCWlmIChjb25maWdfc3RhdHMgJiYgZWRhdGEgIT0gTlVMTCkgeworCQkJYXRvbWljX2ZldGNo X2FkZF96dSgmcGFjLT5zdGF0cy0+cGFjX21hcHBlZCwgc2l6ZSwKKwkJCSAgICBBVE9NSUNfUkVM QVhFRCk7CisJCX0KKwl9CisKKwlyZXR1cm4gZWRhdGE7Cit9CisKK3N0YXRpYyBlZGF0YV90ICoK K3BhY19hbGxvY19uZXdfZ3VhcmRlZCh0c2RuX3QgKnRzZG4sIHBhY190ICpwYWMsIGVob29rc190 ICplaG9va3MsIHNpemVfdCBzaXplLAorICAgIHNpemVfdCBhbGlnbm1lbnQsIGJvb2wgemVybywg Ym9vbCBmcmVxdWVudF9yZXVzZSkgeworCWFzc2VydChhbGlnbm1lbnQgPD0gUEFHRSk7CisKKwll ZGF0YV90ICplZGF0YTsKKwlpZiAoc2FuX2J1bXBfZW5hYmxlZCgpICYmIGZyZXF1ZW50X3JldXNl KSB7CisJCWVkYXRhID0gc2FuX2J1bXBfYWxsb2ModHNkbiwgJnBhYy0+c2JhLCBwYWMsIGVob29r cywgc2l6ZSwKKwkJICAgIHplcm8pOworCX0gZWxzZSB7CisJCXNpemVfdCBzaXplX3dpdGhfZ3Vh cmRzID0gc2FuX3R3b19zaWRlX2d1YXJkZWRfc3ooc2l6ZSk7CisJCS8qIEFsbG9jIGEgbm9uLWd1 YXJkZWQgZXh0ZW50IGZpcnN0LiovCisJCWVkYXRhID0gcGFjX2FsbG9jX3JlYWwodHNkbiwgcGFj LCBlaG9va3MsIHNpemVfd2l0aF9ndWFyZHMsCisJCSAgICAvKiBhbGlnbm1lbnQgKi8gUEFHRSwg emVybywgLyogZ3VhcmRlZCAqLyBmYWxzZSk7CisJCWlmIChlZGF0YSAhPSBOVUxMKSB7CisJCQkv KiBBZGQgZ3VhcmRzIGFyb3VuZCBpdC4gKi8KKwkJCWFzc2VydChlZGF0YV9zaXplX2dldChlZGF0 YSkgPT0gc2l6ZV93aXRoX2d1YXJkcyk7CisJCQlzYW5fZ3VhcmRfcGFnZXNfdHdvX3NpZGVkKHRz ZG4sIGVob29rcywgZWRhdGEsCisJCQkgICAgcGFjLT5lbWFwLCB0cnVlKTsKKwkJfQorCX0KKwlh c3NlcnQoZWRhdGEgPT0gTlVMTCB8fCAoZWRhdGFfZ3VhcmRlZF9nZXQoZWRhdGEpICYmCisJICAg IGVkYXRhX3NpemVfZ2V0KGVkYXRhKSA9PSBzaXplKSk7CisKKwlyZXR1cm4gZWRhdGE7Cit9CisK K3N0YXRpYyBlZGF0YV90ICoKK3BhY19hbGxvY19pbXBsKHRzZG5fdCAqdHNkbiwgcGFpX3QgKnNl bGYsIHNpemVfdCBzaXplLCBzaXplX3QgYWxpZ25tZW50LAorICAgIGJvb2wgemVybywgYm9vbCBn dWFyZGVkLCBib29sIGZyZXF1ZW50X3JldXNlLAorICAgIGJvb2wgKmRlZmVycmVkX3dvcmtfZ2Vu ZXJhdGVkKSB7CisJcGFjX3QgKnBhYyA9IChwYWNfdCAqKXNlbGY7CisJZWhvb2tzX3QgKmVob29r cyA9IHBhY19laG9va3NfZ2V0KHBhYyk7CisKKwllZGF0YV90ICplZGF0YSA9IE5VTEw7CisJLyoK KwkgKiBUaGUgY29uZGl0aW9uIGlzIGFuIG9wdGltaXphdGlvbiAtIG5vdCBmcmVxdWVudGx5IHJl dXNlZCBndWFyZGVkCisJICogYWxsb2NhdGlvbnMgYXJlIG5ldmVyIHB1dCBpbiB0aGUgZWNhY2hl LiAgcGFjX2FsbG9jX3JlYWwgYWxzbworCSAqIGRvZXNuJ3QgZ3JvdyByZXRhaW5lZCBmb3IgZ3Vh cmRlZCBhbGxvY2F0aW9ucy4gIFNvIHBhY19hbGxvY19yZWFsCisJICogZm9yIHN1Y2ggYWxsb2Nh dGlvbnMgd291bGQgYWx3YXlzIHJldHVybiBOVUxMLgorCSAqICovCisJaWYgKCFndWFyZGVkIHx8 IGZyZXF1ZW50X3JldXNlKSB7CisJCWVkYXRhID0JcGFjX2FsbG9jX3JlYWwodHNkbiwgcGFjLCBl aG9va3MsIHNpemUsIGFsaWdubWVudCwKKwkJICAgIHplcm8sIGd1YXJkZWQpOworCX0KKwlpZiAo ZWRhdGEgPT0gTlVMTCAmJiBndWFyZGVkKSB7CisJCS8qIE5vIGNhY2hlZCBndWFyZGVkIGV4dGVu dHM7IGNyZWF0aW5nIGEgbmV3IG9uZS4gKi8KKwkJZWRhdGEgPSBwYWNfYWxsb2NfbmV3X2d1YXJk ZWQodHNkbiwgcGFjLCBlaG9va3MsIHNpemUsCisJCSAgICBhbGlnbm1lbnQsIHplcm8sIGZyZXF1 ZW50X3JldXNlKTsKKwl9CisKKwlyZXR1cm4gZWRhdGE7Cit9CisKK3N0YXRpYyBib29sCitwYWNf ZXhwYW5kX2ltcGwodHNkbl90ICp0c2RuLCBwYWlfdCAqc2VsZiwgZWRhdGFfdCAqZWRhdGEsIHNp emVfdCBvbGRfc2l6ZSwKKyAgICBzaXplX3QgbmV3X3NpemUsIGJvb2wgemVybywgYm9vbCAqZGVm ZXJyZWRfd29ya19nZW5lcmF0ZWQpIHsKKwlwYWNfdCAqcGFjID0gKHBhY190ICopc2VsZjsKKwll aG9va3NfdCAqZWhvb2tzID0gcGFjX2Vob29rc19nZXQocGFjKTsKKworCXNpemVfdCBtYXBwZWRf YWRkID0gMDsKKwlzaXplX3QgZXhwYW5kX2Ftb3VudCA9IG5ld19zaXplIC0gb2xkX3NpemU7CisK KwlpZiAoZWhvb2tzX21lcmdlX3dpbGxfZmFpbChlaG9va3MpKSB7CisJCXJldHVybiB0cnVlOwor CX0KKwllZGF0YV90ICp0cmFpbCA9IGVjYWNoZV9hbGxvYyh0c2RuLCBwYWMsIGVob29rcywgJnBh Yy0+ZWNhY2hlX2RpcnR5LAorCSAgICBlZGF0YSwgZXhwYW5kX2Ftb3VudCwgUEFHRSwgemVybywg LyogZ3VhcmRlZCovIGZhbHNlKTsKKwlpZiAodHJhaWwgPT0gTlVMTCkgeworCQl0cmFpbCA9IGVj YWNoZV9hbGxvYyh0c2RuLCBwYWMsIGVob29rcywgJnBhYy0+ZWNhY2hlX211enp5LAorCQkgICAg ZWRhdGEsIGV4cGFuZF9hbW91bnQsIFBBR0UsIHplcm8sIC8qIGd1YXJkZWQqLyBmYWxzZSk7CisJ fQorCWlmICh0cmFpbCA9PSBOVUxMKSB7CisJCXRyYWlsID0gZWNhY2hlX2FsbG9jX2dyb3codHNk biwgcGFjLCBlaG9va3MsCisJCSAgICAmcGFjLT5lY2FjaGVfcmV0YWluZWQsIGVkYXRhLCBleHBh bmRfYW1vdW50LCBQQUdFLCB6ZXJvLAorCQkgICAgLyogZ3VhcmRlZCAqLyBmYWxzZSk7CisJCW1h cHBlZF9hZGQgPSBleHBhbmRfYW1vdW50OworCX0KKwlpZiAodHJhaWwgPT0gTlVMTCkgeworCQly ZXR1cm4gdHJ1ZTsKKwl9CisJaWYgKGV4dGVudF9tZXJnZV93cmFwcGVyKHRzZG4sIHBhYywgZWhv b2tzLCBlZGF0YSwgdHJhaWwpKSB7CisJCWV4dGVudF9kYWxsb2Nfd3JhcHBlcih0c2RuLCBwYWMs IGVob29rcywgdHJhaWwpOworCQlyZXR1cm4gdHJ1ZTsKKwl9CisJaWYgKGNvbmZpZ19zdGF0cyAm JiBtYXBwZWRfYWRkID4gMCkgeworCQlhdG9taWNfZmV0Y2hfYWRkX3p1KCZwYWMtPnN0YXRzLT5w YWNfbWFwcGVkLCBtYXBwZWRfYWRkLAorCQkgICAgQVRPTUlDX1JFTEFYRUQpOworCX0KKwlyZXR1 cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBib29sCitwYWNfc2hyaW5rX2ltcGwodHNkbl90ICp0c2Ru LCBwYWlfdCAqc2VsZiwgZWRhdGFfdCAqZWRhdGEsIHNpemVfdCBvbGRfc2l6ZSwKKyAgICBzaXpl X3QgbmV3X3NpemUsIGJvb2wgKmRlZmVycmVkX3dvcmtfZ2VuZXJhdGVkKSB7CisJcGFjX3QgKnBh YyA9IChwYWNfdCAqKXNlbGY7CisJZWhvb2tzX3QgKmVob29rcyA9IHBhY19laG9va3NfZ2V0KHBh Yyk7CisKKwlzaXplX3Qgc2hyaW5rX2Ftb3VudCA9IG9sZF9zaXplIC0gbmV3X3NpemU7CisKKwlp ZiAoZWhvb2tzX3NwbGl0X3dpbGxfZmFpbChlaG9va3MpKSB7CisJCXJldHVybiB0cnVlOworCX0K KworCWVkYXRhX3QgKnRyYWlsID0gZXh0ZW50X3NwbGl0X3dyYXBwZXIodHNkbiwgcGFjLCBlaG9v a3MsIGVkYXRhLAorCSAgICBuZXdfc2l6ZSwgc2hyaW5rX2Ftb3VudCwgLyogaG9sZGluZ19jb3Jl X2xvY2tzICovIGZhbHNlKTsKKwlpZiAodHJhaWwgPT0gTlVMTCkgeworCQlyZXR1cm4gdHJ1ZTsK Kwl9CisJZWNhY2hlX2RhbGxvYyh0c2RuLCBwYWMsIGVob29rcywgJnBhYy0+ZWNhY2hlX2RpcnR5 LCB0cmFpbCk7CisJKmRlZmVycmVkX3dvcmtfZ2VuZXJhdGVkID0gdHJ1ZTsKKwlyZXR1cm4gZmFs c2U7Cit9CisKK3N0YXRpYyB2b2lkCitwYWNfZGFsbG9jX2ltcGwodHNkbl90ICp0c2RuLCBwYWlf dCAqc2VsZiwgZWRhdGFfdCAqZWRhdGEsCisgICAgYm9vbCAqZGVmZXJyZWRfd29ya19nZW5lcmF0 ZWQpIHsKKwlwYWNfdCAqcGFjID0gKHBhY190ICopc2VsZjsKKwllaG9va3NfdCAqZWhvb2tzID0g cGFjX2Vob29rc19nZXQocGFjKTsKKworCWlmIChlZGF0YV9ndWFyZGVkX2dldChlZGF0YSkpIHsK KwkJLyoKKwkJICogQmVjYXVzZSBjYWNoZWQgZ3VhcmRlZCBleHRlbnRzIGRvIGV4YWN0IGZpdCBv bmx5LCBsYXJnZQorCQkgKiBndWFyZGVkIGV4dGVudHMgYXJlIHJlc3RvcmVkIG9uIGRhbGxvYyBl YWdlcmx5IChvdGhlcndpc2UKKwkJICogdGhleSB3aWxsIG5vdCBiZSByZXVzZWQgZWZmaWNpZW50 bHkpLiAgU2xhYiBzaXplcyBoYXZlIGEKKwkJICogbGltaXRlZCBudW1iZXIgb2Ygc2l6ZSBjbGFz c2VzLCBhbmQgdGVuZCB0byBjeWNsZSBmYXN0ZXIuCisJCSAqCisJCSAqIEluIHRoZSBjYXNlIHdo ZXJlIGNvYWxlc2NlIGlzIHJlc3RyYWluZWQgKFZpcnR1YWxGcmVlIG9uCisJCSAqIFdpbmRvd3Mp LCBndWFyZGVkIGV4dGVudHMgYXJlIGFsc28gbm90IGNhY2hlZCAtLSBvdGhlcndpc2UKKwkJICog ZHVyaW5nIGFyZW5hIGRlc3Ryb3kgLyByZXNldCwgdGhlIHJldGFpbmVkIGV4dGVudHMgd291bGQg bm90CisJCSAqIGJlIHdob2xlIHJlZ2lvbnMgKGkuZS4gdGhleSBhcmUgc3BsaXQgYmV0d2VlbiBy ZWd1bGFyIGFuZAorCQkgKiBndWFyZGVkKS4KKwkJICovCisJCWlmICghZWRhdGFfc2xhYl9nZXQo ZWRhdGEpIHx8ICFtYXBzX2NvYWxlc2NlKSB7CisJCQlhc3NlcnQoZWRhdGFfc2l6ZV9nZXQoZWRh dGEpID49IFNDX0xBUkdFX01JTkNMQVNTIHx8CisJCQkgICAgIW1hcHNfY29hbGVzY2UpOworCQkJ c2FuX3VuZ3VhcmRfcGFnZXNfdHdvX3NpZGVkKHRzZG4sIGVob29rcywgZWRhdGEsCisJCQkgICAg cGFjLT5lbWFwKTsKKwkJfQorCX0KKworCWVjYWNoZV9kYWxsb2ModHNkbiwgcGFjLCBlaG9va3Ms ICZwYWMtPmVjYWNoZV9kaXJ0eSwgZWRhdGEpOworCS8qIFB1cmdpbmcgb2YgZGVhbGxvY2F0ZWQg cGFnZXMgaXMgZGVmZXJyZWQgKi8KKwkqZGVmZXJyZWRfd29ya19nZW5lcmF0ZWQgPSB0cnVlOwor fQorCitzdGF0aWMgaW5saW5lIHVpbnQ2NF90CitwYWNfbnNfdW50aWxfcHVyZ2UodHNkbl90ICp0 c2RuLCBkZWNheV90ICpkZWNheSwgc2l6ZV90IG5wYWdlcykgeworCWlmIChtYWxsb2NfbXV0ZXhf dHJ5bG9jayh0c2RuLCAmZGVjYXktPm10eCkpIHsKKwkJLyogVXNlIG1pbmltYWwgaW50ZXJ2YWwg aWYgZGVjYXkgaXMgY29udGVuZGVkLiAqLworCQlyZXR1cm4gQkFDS0dST1VORF9USFJFQURfREVG RVJSRURfTUlOOworCX0KKwl1aW50NjRfdCByZXN1bHQgPSBkZWNheV9uc191bnRpbF9wdXJnZShk ZWNheSwgbnBhZ2VzLAorCSAgICBBUkVOQV9ERUZFUlJFRF9QVVJHRV9OUEFHRVNfVEhSRVNIT0xE KTsKKworCW1hbGxvY19tdXRleF91bmxvY2sodHNkbiwgJmRlY2F5LT5tdHgpOworCXJldHVybiBy ZXN1bHQ7Cit9CisKK3N0YXRpYyB1aW50NjRfdAorcGFjX3RpbWVfdW50aWxfZGVmZXJyZWRfd29y ayh0c2RuX3QgKnRzZG4sIHBhaV90ICpzZWxmKSB7CisJdWludDY0X3QgdGltZTsKKwlwYWNfdCAq cGFjID0gKHBhY190ICopc2VsZjsKKworCXRpbWUgPSBwYWNfbnNfdW50aWxfcHVyZ2UodHNkbiwK KwkgICAgJnBhYy0+ZGVjYXlfZGlydHksCisJICAgIGVjYWNoZV9ucGFnZXNfZ2V0KCZwYWMtPmVj YWNoZV9kaXJ0eSkpOworCWlmICh0aW1lID09IEJBQ0tHUk9VTkRfVEhSRUFEX0RFRkVSUkVEX01J TikgeworCQlyZXR1cm4gdGltZTsKKwl9CisKKwl1aW50NjRfdCBtdXp6eSA9IHBhY19uc191bnRp bF9wdXJnZSh0c2RuLAorCSAgICAmcGFjLT5kZWNheV9tdXp6eSwKKwkgICAgZWNhY2hlX25wYWdl c19nZXQoJnBhYy0+ZWNhY2hlX211enp5KSk7CisJaWYgKG11enp5IDwgdGltZSkgeworCQl0aW1l ID0gbXV6enk7CisJfQorCXJldHVybiB0aW1lOworfQorCitib29sCitwYWNfcmV0YWluX2dyb3df bGltaXRfZ2V0X3NldCh0c2RuX3QgKnRzZG4sIHBhY190ICpwYWMsIHNpemVfdCAqb2xkX2xpbWl0 LAorICAgIHNpemVfdCAqbmV3X2xpbWl0KSB7CisJcHN6aW5kX3QgbmV3X2luZCBKRU1BTExPQ19D Q19TSUxFTkNFX0lOSVQoMCk7CisJaWYgKG5ld19saW1pdCAhPSBOVUxMKSB7CisJCXNpemVfdCBs aW1pdCA9ICpuZXdfbGltaXQ7CisJCS8qIEdyb3cgbm8gbW9yZSB0aGFuIHRoZSBuZXcgbGltaXQu ICovCisJCWlmICgobmV3X2luZCA9IHN6X3BzejJpbmQobGltaXQgKyAxKSAtIDEpID49IFNDX05Q U0laRVMpIHsKKwkJCXJldHVybiB0cnVlOworCQl9CisJfQorCisJbWFsbG9jX211dGV4X2xvY2so dHNkbiwgJnBhYy0+Z3Jvd19tdHgpOworCWlmIChvbGRfbGltaXQgIT0gTlVMTCkgeworCQkqb2xk X2xpbWl0ID0gc3pfcGluZDJzeihwYWMtPmV4cF9ncm93LmxpbWl0KTsKKwl9CisJaWYgKG5ld19s aW1pdCAhPSBOVUxMKSB7CisJCXBhYy0+ZXhwX2dyb3cubGltaXQgPSBuZXdfaW5kOworCX0KKwlt YWxsb2NfbXV0ZXhfdW5sb2NrKHRzZG4sICZwYWMtPmdyb3dfbXR4KTsKKworCXJldHVybiBmYWxz ZTsKK30KKworc3RhdGljIHNpemVfdAorcGFjX3N0YXNoX2RlY2F5ZWQodHNkbl90ICp0c2RuLCBw YWNfdCAqcGFjLCBlY2FjaGVfdCAqZWNhY2hlLAorICAgIHNpemVfdCBucGFnZXNfbGltaXQsIHNp emVfdCBucGFnZXNfZGVjYXlfbWF4LAorICAgIGVkYXRhX2xpc3RfaW5hY3RpdmVfdCAqcmVzdWx0 KSB7CisJd2l0bmVzc19hc3NlcnRfZGVwdGhfdG9fcmFuayh0c2RuX3dpdG5lc3NfdHNkcF9nZXQo dHNkbiksCisJICAgIFdJVE5FU1NfUkFOS19DT1JFLCAwKTsKKwllaG9va3NfdCAqZWhvb2tzID0g cGFjX2Vob29rc19nZXQocGFjKTsKKworCS8qIFN0YXNoIGV4dGVudHMgYWNjb3JkaW5nIHRvIG5w YWdlc19saW1pdC4gKi8KKwlzaXplX3QgbnN0YXNoZWQgPSAwOworCXdoaWxlIChuc3Rhc2hlZCA8 IG5wYWdlc19kZWNheV9tYXgpIHsKKwkJZWRhdGFfdCAqZWRhdGEgPSBlY2FjaGVfZXZpY3QodHNk biwgcGFjLCBlaG9va3MsIGVjYWNoZSwKKwkJICAgIG5wYWdlc19saW1pdCk7CisJCWlmIChlZGF0 YSA9PSBOVUxMKSB7CisJCQlicmVhazsKKwkJfQorCQllZGF0YV9saXN0X2luYWN0aXZlX2FwcGVu ZChyZXN1bHQsIGVkYXRhKTsKKwkJbnN0YXNoZWQgKz0gZWRhdGFfc2l6ZV9nZXQoZWRhdGEpID4+ IExHX1BBR0U7CisJfQorCXJldHVybiBuc3Rhc2hlZDsKK30KKworc3RhdGljIHNpemVfdAorcGFj X2RlY2F5X3N0YXNoZWQodHNkbl90ICp0c2RuLCBwYWNfdCAqcGFjLCBkZWNheV90ICpkZWNheSwK KyAgICBwYWNfZGVjYXlfc3RhdHNfdCAqZGVjYXlfc3RhdHMsIGVjYWNoZV90ICplY2FjaGUsIGJv b2wgZnVsbHlfZGVjYXksCisgICAgZWRhdGFfbGlzdF9pbmFjdGl2ZV90ICpkZWNheV9leHRlbnRz KSB7CisJYm9vbCBlcnI7CisKKwlzaXplX3Qgbm1hZHZpc2UgPSAwOworCXNpemVfdCBudW5tYXBw ZWQgPSAwOworCXNpemVfdCBucHVyZ2VkID0gMDsKKworCWVob29rc190ICplaG9va3MgPSBwYWNf ZWhvb2tzX2dldChwYWMpOworCisJYm9vbCB0cnlfbXV6enkgPSAhZnVsbHlfZGVjYXkKKwkgICAg JiYgcGFjX2RlY2F5X21zX2dldChwYWMsIGV4dGVudF9zdGF0ZV9tdXp6eSkgIT0gMDsKKworCWZv ciAoZWRhdGFfdCAqZWRhdGEgPSBlZGF0YV9saXN0X2luYWN0aXZlX2ZpcnN0KGRlY2F5X2V4dGVu dHMpOyBlZGF0YSAhPQorCSAgICBOVUxMOyBlZGF0YSA9IGVkYXRhX2xpc3RfaW5hY3RpdmVfZmly c3QoZGVjYXlfZXh0ZW50cykpIHsKKwkJZWRhdGFfbGlzdF9pbmFjdGl2ZV9yZW1vdmUoZGVjYXlf ZXh0ZW50cywgZWRhdGEpOworCisJCXNpemVfdCBzaXplID0gZWRhdGFfc2l6ZV9nZXQoZWRhdGEp OworCQlzaXplX3QgbnBhZ2VzID0gc2l6ZSA+PiBMR19QQUdFOworCisJCW5tYWR2aXNlKys7CisJ CW5wdXJnZWQgKz0gbnBhZ2VzOworCisJCXN3aXRjaCAoZWNhY2hlLT5zdGF0ZSkgeworCQljYXNl IGV4dGVudF9zdGF0ZV9hY3RpdmU6CisJCQlub3RfcmVhY2hlZCgpOworCQljYXNlIGV4dGVudF9z dGF0ZV9kaXJ0eToKKwkJCWlmICh0cnlfbXV6enkpIHsKKwkJCQllcnIgPSBleHRlbnRfcHVyZ2Vf bGF6eV93cmFwcGVyKHRzZG4sIGVob29rcywKKwkJCQkgICAgZWRhdGEsIC8qIG9mZnNldCAqLyAw LCBzaXplKTsKKwkJCQlpZiAoIWVycikgeworCQkJCQllY2FjaGVfZGFsbG9jKHRzZG4sIHBhYywg ZWhvb2tzLAorCQkJCQkgICAgJnBhYy0+ZWNhY2hlX211enp5LCBlZGF0YSk7CisJCQkJCWJyZWFr OworCQkJCX0KKwkJCX0KKwkJCUpFTUFMTE9DX0ZBTExUSFJPVUdIOworCQljYXNlIGV4dGVudF9z dGF0ZV9tdXp6eToKKwkJCWV4dGVudF9kYWxsb2Nfd3JhcHBlcih0c2RuLCBwYWMsIGVob29rcywg ZWRhdGEpOworCQkJbnVubWFwcGVkICs9IG5wYWdlczsKKwkJCWJyZWFrOworCQljYXNlIGV4dGVu dF9zdGF0ZV9yZXRhaW5lZDoKKwkJZGVmYXVsdDoKKwkJCW5vdF9yZWFjaGVkKCk7CisJCX0KKwl9 CisKKwlpZiAoY29uZmlnX3N0YXRzKSB7CisJCUxPQ0tFRElOVF9NVFhfTE9DSyh0c2RuLCAqcGFj LT5zdGF0c19tdHgpOworCQlsb2NrZWRfaW5jX3U2NCh0c2RuLCBMT0NLRURJTlRfTVRYKCpwYWMt PnN0YXRzX210eCksCisJCSAgICAmZGVjYXlfc3RhdHMtPm5wdXJnZSwgMSk7CisJCWxvY2tlZF9p bmNfdTY0KHRzZG4sIExPQ0tFRElOVF9NVFgoKnBhYy0+c3RhdHNfbXR4KSwKKwkJICAgICZkZWNh eV9zdGF0cy0+bm1hZHZpc2UsIG5tYWR2aXNlKTsKKwkJbG9ja2VkX2luY191NjQodHNkbiwgTE9D S0VESU5UX01UWCgqcGFjLT5zdGF0c19tdHgpLAorCQkgICAgJmRlY2F5X3N0YXRzLT5wdXJnZWQs IG5wdXJnZWQpOworCQlMT0NLRURJTlRfTVRYX1VOTE9DSyh0c2RuLCAqcGFjLT5zdGF0c19tdHgp OworCQlhdG9taWNfZmV0Y2hfc3ViX3p1KCZwYWMtPnN0YXRzLT5wYWNfbWFwcGVkLAorCQkgICAg bnVubWFwcGVkIDw8IExHX1BBR0UsIEFUT01JQ19SRUxBWEVEKTsKKwl9CisKKwlyZXR1cm4gbnB1 cmdlZDsKK30KKworLyoKKyAqIG5wYWdlc19saW1pdDogRGVjYXkgYXQgbW9zdCBucGFnZXNfZGVj YXlfbWF4IHBhZ2VzIHdpdGhvdXQgdmlvbGF0aW5nIHRoZQorICogaW52YXJpYW50OiAoZWNhY2hl X25wYWdlc19nZXQoZWNhY2hlKSA+PSBucGFnZXNfbGltaXQpLiAgV2UgbmVlZCBhbiB1cHBlcgor ICogYm91bmQgb24gbnVtYmVyIG9mIHBhZ2VzIGluIG9yZGVyIHRvIHByZXZlbnQgdW5ib3VuZGVk IGdyb3d0aCAobmFtZWx5IGluCisgKiBzdGFzaGVkKSwgb3RoZXJ3aXNlIHVuYm91bmRlZCBuZXcg cGFnZXMgY291bGQgYmUgYWRkZWQgdG8gZXh0ZW50cyBkdXJpbmcgdGhlCisgKiBjdXJyZW50IGRl Y2F5IHJ1biwgc28gdGhhdCB0aGUgcHVyZ2luZyB0aHJlYWQgbmV2ZXIgZmluaXNoZXMuCisgKi8K K3N0YXRpYyB2b2lkCitwYWNfZGVjYXlfdG9fbGltaXQodHNkbl90ICp0c2RuLCBwYWNfdCAqcGFj LCBkZWNheV90ICpkZWNheSwKKyAgICBwYWNfZGVjYXlfc3RhdHNfdCAqZGVjYXlfc3RhdHMsIGVj YWNoZV90ICplY2FjaGUsIGJvb2wgZnVsbHlfZGVjYXksCisgICAgc2l6ZV90IG5wYWdlc19saW1p dCwgc2l6ZV90IG5wYWdlc19kZWNheV9tYXgpIHsKKwl3aXRuZXNzX2Fzc2VydF9kZXB0aF90b19y YW5rKHRzZG5fd2l0bmVzc190c2RwX2dldCh0c2RuKSwKKwkgICAgV0lUTkVTU19SQU5LX0NPUkUs IDEpOworCisJaWYgKGRlY2F5LT5wdXJnaW5nIHx8IG5wYWdlc19kZWNheV9tYXggPT0gMCkgewor CQlyZXR1cm47CisJfQorCWRlY2F5LT5wdXJnaW5nID0gdHJ1ZTsKKwltYWxsb2NfbXV0ZXhfdW5s b2NrKHRzZG4sICZkZWNheS0+bXR4KTsKKworCWVkYXRhX2xpc3RfaW5hY3RpdmVfdCBkZWNheV9l eHRlbnRzOworCWVkYXRhX2xpc3RfaW5hY3RpdmVfaW5pdCgmZGVjYXlfZXh0ZW50cyk7CisJc2l6 ZV90IG5wdXJnZSA9IHBhY19zdGFzaF9kZWNheWVkKHRzZG4sIHBhYywgZWNhY2hlLCBucGFnZXNf bGltaXQsCisJICAgIG5wYWdlc19kZWNheV9tYXgsICZkZWNheV9leHRlbnRzKTsKKwlpZiAobnB1 cmdlICE9IDApIHsKKwkJc2l6ZV90IG5wdXJnZWQgPSBwYWNfZGVjYXlfc3Rhc2hlZCh0c2RuLCBw YWMsIGRlY2F5LAorCQkgICAgZGVjYXlfc3RhdHMsIGVjYWNoZSwgZnVsbHlfZGVjYXksICZkZWNh eV9leHRlbnRzKTsKKwkJYXNzZXJ0KG5wdXJnZWQgPT0gbnB1cmdlKTsKKwl9CisKKwltYWxsb2Nf bXV0ZXhfbG9jayh0c2RuLCAmZGVjYXktPm10eCk7CisJZGVjYXktPnB1cmdpbmcgPSBmYWxzZTsK K30KKwordm9pZAorcGFjX2RlY2F5X2FsbCh0c2RuX3QgKnRzZG4sIHBhY190ICpwYWMsIGRlY2F5 X3QgKmRlY2F5LAorICAgIHBhY19kZWNheV9zdGF0c190ICpkZWNheV9zdGF0cywgZWNhY2hlX3Qg KmVjYWNoZSwgYm9vbCBmdWxseV9kZWNheSkgeworCW1hbGxvY19tdXRleF9hc3NlcnRfb3duZXIo dHNkbiwgJmRlY2F5LT5tdHgpOworCXBhY19kZWNheV90b19saW1pdCh0c2RuLCBwYWMsIGRlY2F5 LCBkZWNheV9zdGF0cywgZWNhY2hlLCBmdWxseV9kZWNheSwKKwkgICAgLyogbnBhZ2VzX2xpbWl0 ICovIDAsIGVjYWNoZV9ucGFnZXNfZ2V0KGVjYWNoZSkpOworfQorCitzdGF0aWMgdm9pZAorcGFj X2RlY2F5X3RyeV9wdXJnZSh0c2RuX3QgKnRzZG4sIHBhY190ICpwYWMsIGRlY2F5X3QgKmRlY2F5 LAorICAgIHBhY19kZWNheV9zdGF0c190ICpkZWNheV9zdGF0cywgZWNhY2hlX3QgKmVjYWNoZSwK KyAgICBzaXplX3QgY3VycmVudF9ucGFnZXMsIHNpemVfdCBucGFnZXNfbGltaXQpIHsKKwlpZiAo Y3VycmVudF9ucGFnZXMgPiBucGFnZXNfbGltaXQpIHsKKwkJcGFjX2RlY2F5X3RvX2xpbWl0KHRz ZG4sIHBhYywgZGVjYXksIGRlY2F5X3N0YXRzLCBlY2FjaGUsCisJCSAgICAvKiBmdWxseV9kZWNh eSAqLyBmYWxzZSwgbnBhZ2VzX2xpbWl0LAorCQkgICAgY3VycmVudF9ucGFnZXMgLSBucGFnZXNf bGltaXQpOworCX0KK30KKworYm9vbAorcGFjX21heWJlX2RlY2F5X3B1cmdlKHRzZG5fdCAqdHNk biwgcGFjX3QgKnBhYywgZGVjYXlfdCAqZGVjYXksCisgICAgcGFjX2RlY2F5X3N0YXRzX3QgKmRl Y2F5X3N0YXRzLCBlY2FjaGVfdCAqZWNhY2hlLAorICAgIHBhY19wdXJnZV9lYWdlcm5lc3NfdCBl YWdlcm5lc3MpIHsKKwltYWxsb2NfbXV0ZXhfYXNzZXJ0X293bmVyKHRzZG4sICZkZWNheS0+bXR4 KTsKKworCS8qIFB1cmdlIGFsbCBvciBub3RoaW5nIGlmIHRoZSBvcHRpb24gaXMgZGlzYWJsZWQu ICovCisJc3NpemVfdCBkZWNheV9tcyA9IGRlY2F5X21zX3JlYWQoZGVjYXkpOworCWlmIChkZWNh eV9tcyA8PSAwKSB7CisJCWlmIChkZWNheV9tcyA9PSAwKSB7CisJCQlwYWNfZGVjYXlfdG9fbGlt aXQodHNkbiwgcGFjLCBkZWNheSwgZGVjYXlfc3RhdHMsCisJCQkgICAgZWNhY2hlLCAvKiBmdWxs eV9kZWNheSAqLyBmYWxzZSwKKwkJCSAgICAvKiBucGFnZXNfbGltaXQgKi8gMCwgZWNhY2hlX25w YWdlc19nZXQoZWNhY2hlKSk7CisJCX0KKwkJcmV0dXJuIGZhbHNlOworCX0KKworCS8qCisJICog SWYgdGhlIGRlYWRsaW5lIGhhcyBiZWVuIHJlYWNoZWQsIGFkdmFuY2UgdG8gdGhlIGN1cnJlbnQg ZXBvY2ggYW5kCisJICogcHVyZ2UgdG8gdGhlIG5ldyBsaW1pdCBpZiBuZWNlc3NhcnkuICBOb3Rl IHRoYXQgZGlydHkgcGFnZXMgY3JlYXRlZAorCSAqIGR1cmluZyB0aGUgY3VycmVudCBlcG9jaCBh cmUgbm90IHN1YmplY3QgdG8gcHVyZ2UgdW50aWwgYSBmdXR1cmUKKwkgKiBlcG9jaCwgc28gYXMg YSByZXN1bHQgcHVyZ2luZyBvbmx5IGhhcHBlbnMgZHVyaW5nIGVwb2NoIGFkdmFuY2VzLCBvcgor CSAqIGJlaW5nIHRyaWdnZXJlZCBieSBiYWNrZ3JvdW5kIHRocmVhZHMgKHNjaGVkdWxlZCBldmVu dCkuCisJICovCisJbnN0aW1lX3QgdGltZTsKKwluc3RpbWVfaW5pdF91cGRhdGUoJnRpbWUpOwor CXNpemVfdCBucGFnZXNfY3VycmVudCA9IGVjYWNoZV9ucGFnZXNfZ2V0KGVjYWNoZSk7CisJYm9v bCBlcG9jaF9hZHZhbmNlZCA9IGRlY2F5X21heWJlX2FkdmFuY2VfZXBvY2goZGVjYXksICZ0aW1l LAorCSAgICBucGFnZXNfY3VycmVudCk7CisJaWYgKGVhZ2VybmVzcyA9PSBQQUNfUFVSR0VfQUxX QVlTCisJICAgIHx8IChlcG9jaF9hZHZhbmNlZCAmJiBlYWdlcm5lc3MgPT0gUEFDX1BVUkdFX09O X0VQT0NIX0FEVkFOQ0UpKSB7CisJCXNpemVfdCBucGFnZXNfbGltaXQgPSBkZWNheV9ucGFnZXNf bGltaXRfZ2V0KGRlY2F5KTsKKwkJcGFjX2RlY2F5X3RyeV9wdXJnZSh0c2RuLCBwYWMsIGRlY2F5 LCBkZWNheV9zdGF0cywgZWNhY2hlLAorCQkgICAgbnBhZ2VzX2N1cnJlbnQsIG5wYWdlc19saW1p dCk7CisJfQorCisJcmV0dXJuIGVwb2NoX2FkdmFuY2VkOworfQorCitib29sCitwYWNfZGVjYXlf bXNfc2V0KHRzZG5fdCAqdHNkbiwgcGFjX3QgKnBhYywgZXh0ZW50X3N0YXRlX3Qgc3RhdGUsCisg ICAgc3NpemVfdCBkZWNheV9tcywgcGFjX3B1cmdlX2VhZ2VybmVzc190IGVhZ2VybmVzcykgewor CWRlY2F5X3QgKmRlY2F5OworCXBhY19kZWNheV9zdGF0c190ICpkZWNheV9zdGF0czsKKwllY2Fj aGVfdCAqZWNhY2hlOworCXBhY19kZWNheV9kYXRhX2dldChwYWMsIHN0YXRlLCAmZGVjYXksICZk ZWNheV9zdGF0cywgJmVjYWNoZSk7CisKKwlpZiAoIWRlY2F5X21zX3ZhbGlkKGRlY2F5X21zKSkg eworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwltYWxsb2NfbXV0ZXhfbG9jayh0c2RuLCAmZGVjYXkt Pm10eCk7CisJLyoKKwkgKiBSZXN0YXJ0IGRlY2F5IGJhY2tsb2cgZnJvbSBzY3JhdGNoLCB3aGlj aCBtYXkgY2F1c2UgbWFueSBkaXJ0eSBwYWdlcworCSAqIHRvIGJlIGltbWVkaWF0ZWx5IHB1cmdl ZC4gIEl0IHdvdWxkIGNvbmNlcHR1YWxseSBiZSBwb3NzaWJsZSB0byBtYXAKKwkgKiB0aGUgb2xk IGJhY2tsb2cgb250byB0aGUgbmV3IGJhY2tsb2csIGJ1dCB0aGVyZSBpcyBubyBqdXN0aWZpY2F0 aW9uCisJICogZm9yIHN1Y2ggY29tcGxleGl0eSBzaW5jZSBkZWNheV9tcyBjaGFuZ2VzIGFyZSBp bnRlbmRlZCB0byBiZQorCSAqIGluZnJlcXVlbnQsIGVpdGhlciBiZXR3ZWVuIHRoZSB7LTEsIDAs ID4wfSBzdGF0ZXMsIG9yIGEgb25lLXRpbWUKKwkgKiBhcmJpdHJhcnkgY2hhbmdlIGR1cmluZyBp bml0aWFsIGFyZW5hIGNvbmZpZ3VyYXRpb24uCisJICovCisJbnN0aW1lX3QgY3VyX3RpbWU7CisJ bnN0aW1lX2luaXRfdXBkYXRlKCZjdXJfdGltZSk7CisJZGVjYXlfcmVpbml0KGRlY2F5LCAmY3Vy X3RpbWUsIGRlY2F5X21zKTsKKwlwYWNfbWF5YmVfZGVjYXlfcHVyZ2UodHNkbiwgcGFjLCBkZWNh eSwgZGVjYXlfc3RhdHMsIGVjYWNoZSwgZWFnZXJuZXNzKTsKKwltYWxsb2NfbXV0ZXhfdW5sb2Nr KHRzZG4sICZkZWNheS0+bXR4KTsKKworCXJldHVybiBmYWxzZTsKK30KKworc3NpemVfdAorcGFj X2RlY2F5X21zX2dldChwYWNfdCAqcGFjLCBleHRlbnRfc3RhdGVfdCBzdGF0ZSkgeworCWRlY2F5 X3QgKmRlY2F5OworCXBhY19kZWNheV9zdGF0c190ICpkZWNheV9zdGF0czsKKwllY2FjaGVfdCAq ZWNhY2hlOworCXBhY19kZWNheV9kYXRhX2dldChwYWMsIHN0YXRlLCAmZGVjYXksICZkZWNheV9z dGF0cywgJmVjYWNoZSk7CisJcmV0dXJuIGRlY2F5X21zX3JlYWQoZGVjYXkpOworfQorCit2b2lk CitwYWNfcmVzZXQodHNkbl90ICp0c2RuLCBwYWNfdCAqcGFjKSB7CisJLyoKKwkgKiBOby1vcCBm b3Igbm93OyBwdXJnaW5nIGlzIHN0aWxsIGRvbmUgYXQgdGhlIGFyZW5hLWxldmVsLiAgSXQgc2hv dWxkCisJICogZ2V0IG1vdmVkIGluIGhlcmUsIHRob3VnaC4KKwkgKi8KKwkodm9pZCl0c2RuOwor CSh2b2lkKXBhYzsKK30KKwordm9pZAorcGFjX2Rlc3Ryb3kodHNkbl90ICp0c2RuLCBwYWNfdCAq cGFjKSB7CisJYXNzZXJ0KGVjYWNoZV9ucGFnZXNfZ2V0KCZwYWMtPmVjYWNoZV9kaXJ0eSkgPT0g MCk7CisJYXNzZXJ0KGVjYWNoZV9ucGFnZXNfZ2V0KCZwYWMtPmVjYWNoZV9tdXp6eSkgPT0gMCk7 CisJLyoKKwkgKiBJdGVyYXRlIG92ZXIgdGhlIHJldGFpbmVkIGV4dGVudHMgYW5kIGRlc3Ryb3kg dGhlbS4gIFRoaXMgZ2l2ZXMgdGhlCisJICogZXh0ZW50IGFsbG9jYXRvciB1bmRlcmx5aW5nIHRo ZSBleHRlbnQgaG9va3MgYW4gb3Bwb3J0dW5pdHkgdG8gdW5tYXAKKwkgKiBhbGwgcmV0YWluZWQg bWVtb3J5IHdpdGhvdXQgaGF2aW5nIHRvIGtlZXAgaXRzIG93biBtZXRhZGF0YQorCSAqIHN0cnVj dHVyZXMuICBJbiBwcmFjdGljZSwgdmlydHVhbCBtZW1vcnkgZm9yIGRzcy1hbGxvY2F0ZWQgZXh0 ZW50cyBpcworCSAqIGxlYWtlZCBoZXJlLCBzbyBiZXN0IHByYWN0aWNlIGlzIHRvIGF2b2lkIGRz cyBmb3IgYXJlbmFzIHRvIGJlCisJICogZGVzdHJveWVkLCBvciBwcm92aWRlIGN1c3RvbSBleHRl bnQgaG9va3MgdGhhdCB0cmFjayByZXRhaW5lZAorCSAqIGRzcy1iYXNlZCBleHRlbnRzIGZvciBs YXRlciByZXVzZS4KKwkgKi8KKwllaG9va3NfdCAqZWhvb2tzID0gcGFjX2Vob29rc19nZXQocGFj KTsKKwllZGF0YV90ICplZGF0YTsKKwl3aGlsZSAoKGVkYXRhID0gZWNhY2hlX2V2aWN0KHRzZG4s IHBhYywgZWhvb2tzLAorCSAgICAmcGFjLT5lY2FjaGVfcmV0YWluZWQsIDApKSAhPSBOVUxMKSB7 CisJCWV4dGVudF9kZXN0cm95X3dyYXBwZXIodHNkbiwgcGFjLCBlaG9va3MsIGVkYXRhKTsKKwl9 Cit9CgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAv c3JjL3BhZ2VzLmMgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9zcmMv cGFnZXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzgzYTdkCi0tLSAv ZGV2L251bGwKKysrIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvc3Jj L3BhZ2VzLmMKQEAgLTAsMCArMSw4MjQgQEAKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9q ZW1hbGxvY19wcmVhbWJsZS5oIgorCisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvcGFnZXMu aCIKKworI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2plbWFsbG9jX2ludGVybmFsX2luY2x1 ZGVzLmgiCisKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9hc3NlcnQuaCIKKyNpbmNsdWRl ICJqZW1hbGxvYy9pbnRlcm5hbC9tYWxsb2NfaW8uaCIKKworI2lmZGVmIEpFTUFMTE9DX1NZU0NU TF9WTV9PVkVSQ09NTUlUCisjaW5jbHVkZSA8c3lzL3N5c2N0bC5oPgorI2lmZGVmIF9fRnJlZUJT RF9fCisjaW5jbHVkZSA8dm0vdm1fcGFyYW0uaD4KKyNlbmRpZgorI2VuZGlmCisjaWZkZWYgX19O ZXRCU0RfXworI2luY2x1ZGUgPHN5cy9iaXRvcHMuaD4JLyogaWxvZzIgKi8KKyNlbmRpZgorI2lm ZGVmIEpFTUFMTE9DX0hBVkVfVk1fTUFLRV9UQUcKKyNkZWZpbmUgUEFHRVNfRkRfVEFHIFZNX01B S0VfVEFHKDEwMVUpCisjZWxzZQorI2RlZmluZSBQQUdFU19GRF9UQUcgLTEKKyNlbmRpZgorCisv KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqLworLyogRGF0YS4gKi8KKworLyogQWN0dWFsIG9wZXJhdGlu ZyBzeXN0ZW0gcGFnZSBzaXplLCBkZXRlY3RlZCBkdXJpbmcgYm9vdHN0cmFwLCA8PSBQQUdFLiAq Lworc3RhdGljIHNpemVfdAlvc19wYWdlOworCisjaWZuZGVmIF9XSU4zMgorIyAgZGVmaW5lIFBB R0VTX1BST1RfQ09NTUlUIChQUk9UX1JFQUQgfCBQUk9UX1dSSVRFKQorIyAgZGVmaW5lIFBBR0VT X1BST1RfREVDT01NSVQgKFBST1RfTk9ORSkKK3N0YXRpYyBpbnQJbW1hcF9mbGFnczsKKyNlbmRp Zgorc3RhdGljIGJvb2wJb3Nfb3ZlcmNvbW1pdHM7CisKK2NvbnN0IGNoYXIgKnRocF9tb2RlX25h bWVzW10gPSB7CisJImRlZmF1bHQiLAorCSJhbHdheXMiLAorCSJuZXZlciIsCisJIm5vdCBzdXBw b3J0ZWQiCit9OwordGhwX21vZGVfdCBvcHRfdGhwID0gVEhQX01PREVfREVGQVVMVDsKK3RocF9t b2RlX3QgaW5pdF9zeXN0ZW1fdGhwX21vZGU7CisKKy8qIFJ1bnRpbWUgc3VwcG9ydCBmb3IgbGF6 eSBwdXJnZS4gSXJyZWxldmFudCB3aGVuICFwYWdlc19jYW5fcHVyZ2VfbGF6eS4gKi8KK3N0YXRp YyBib29sIHBhZ2VzX2Nhbl9wdXJnZV9sYXp5X3J1bnRpbWUgPSB0cnVlOworCisjaWZkZWYgSkVN QUxMT0NfUFVSR0VfTUFEVklTRV9ET05UTkVFRF9aRVJPUworc3RhdGljIGludCBtYWR2aXNlX2Rv bnRfbmVlZF96ZXJvc19pc19mYXVsdHkgPSAtMTsKKy8qKgorICogQ2hlY2sgdGhhdCBNQURWX0RP TlRORUVEIHdpbGwgYWN0dWFsbHkgemVybyBwYWdlcyBvbiBzdWJzZXF1ZW50IGFjY2Vzcy4KKyAq CisgKiBTaW5jZSBxZW11IGRvZXMgbm90IHN1cHBvcnQgdGhpcywgeWV0IFsxXSwgYW5kIHlvdSBj YW4gZ2V0IHZlcnkgdHJpY2t5CisgKiBhc3NlcnQgaWYgeW91IHdpbGwgcnVuIHByb2dyYW0gd2l0 aCBqZW1hbGxvYyBpbiB1c2UgdW5kZXIgcWVtdToKKyAqCisgKiAgICAgPGplbWFsbG9jPjogLi4v Y29udHJpYi9qZW1hbGxvYy9zcmMvZXh0ZW50LmM6MTE5NTogRmFpbGVkIGFzc2VydGlvbjogInBb aV0gPT0gMCIKKyAqCisgKiAgIFsxXTogaHR0cHM6Ly9wYXRjaHdvcmsua2VybmVsLm9yZy9wYXRj aC8xMDU3NjYzNy8KKyAqLworc3RhdGljIGludCBtYWR2aXNlX01BRFZfRE9OVE5FRURfemVyb2Vz X3BhZ2VzKCkKK3sKKwlpbnQgd29ya3MgPSAtMTsKKwlzaXplX3Qgc2l6ZSA9IFBBR0U7CisKKwl2 b2lkICogYWRkciA9IG1tYXAoTlVMTCwgc2l6ZSwgUFJPVF9SRUFEfFBST1RfV1JJVEUsCisJICAg IE1BUF9QUklWQVRFfE1BUF9BTk9OWU1PVVMsIC0xLCAwKTsKKworCWlmIChhZGRyID09IE1BUF9G QUlMRUQpIHsKKwkJbWFsbG9jX3dyaXRlKCI8amVtYWxsb2M+OiBDYW5ub3QgYWxsb2NhdGUgbWVt b3J5IGZvciAiCisJCSAgICAiTUFEVl9ET05UTkVFRCBjaGVja1xuIik7CisJCWlmIChvcHRfYWJv cnQpIHsKKwkJCWFib3J0KCk7CisJCX0KKwl9CisKKwltZW1zZXQoYWRkciwgJ0EnLCBzaXplKTsK KwlpZiAobWFkdmlzZShhZGRyLCBzaXplLCBNQURWX0RPTlRORUVEKSA9PSAwKSB7CisJCXdvcmtz ID0gbWVtY2hyKGFkZHIsICdBJywgc2l6ZSkgPT0gTlVMTDsKKwl9IGVsc2UgeworCQkvKgorCQkg KiBJZiBtYWR2aXNlKCkgZG9lcyBub3Qgc3VwcG9ydCBNQURWX0RPTlRORUVELCB0aGVuIHdlIGNh bgorCQkgKiBjYWxsIGl0IGFueXdheSwgYW5kIHVzZSBpdCdzIHJldHVybiBjb2RlLgorCQkgKi8K KwkJd29ya3MgPSAxOworCX0KKworCWlmIChtdW5tYXAoYWRkciwgc2l6ZSkgIT0gMCkgeworCQlt YWxsb2Nfd3JpdGUoIjxqZW1hbGxvYz46IENhbm5vdCBkZWFsbG9jYXRlIG1lbW9yeSBmb3IgIgor CQkgICAgIk1BRFZfRE9OVE5FRUQgY2hlY2tcbiIpOworCQlpZiAob3B0X2Fib3J0KSB7CisJCQlh Ym9ydCgpOworCQl9CisJfQorCisJcmV0dXJuIHdvcmtzOworfQorI2VuZGlmCisKKy8qKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKiovCisvKgorICogRnVuY3Rpb24gcHJvdG90eXBlcyBmb3Igc3RhdGljIGZ1 bmN0aW9ucyB0aGF0IGFyZSByZWZlcmVuY2VkIHByaW9yIHRvCisgKiBkZWZpbml0aW9uLgorICov CisKK3N0YXRpYyB2b2lkIG9zX3BhZ2VzX3VubWFwKHZvaWQgKmFkZHIsIHNpemVfdCBzaXplKTsK KworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHZvaWQgKgorb3NfcGFnZXNfbWFw KHZvaWQgKmFkZHIsIHNpemVfdCBzaXplLCBzaXplX3QgYWxpZ25tZW50LCBib29sICpjb21taXQp IHsKKwlhc3NlcnQoQUxJR05NRU5UX0FERFIyQkFTRShhZGRyLCBvc19wYWdlKSA9PSBhZGRyKTsK Kwlhc3NlcnQoQUxJR05NRU5UX0NFSUxJTkcoc2l6ZSwgb3NfcGFnZSkgPT0gc2l6ZSk7CisJYXNz ZXJ0KHNpemUgIT0gMCk7CisKKwlpZiAob3Nfb3ZlcmNvbW1pdHMpIHsKKwkJKmNvbW1pdCA9IHRy dWU7CisJfQorCisJdm9pZCAqcmV0OworI2lmZGVmIF9XSU4zMgorCS8qCisJICogSWYgVmlydHVh bEFsbG9jIGNhbid0IGFsbG9jYXRlIGF0IHRoZSBnaXZlbiBhZGRyZXNzIHdoZW4gb25lIGlzCisJ ICogZ2l2ZW4sIGl0IGZhaWxzIGFuZCByZXR1cm5zIE5VTEwuCisJICovCisJcmV0ID0gVmlydHVh bEFsbG9jKGFkZHIsIHNpemUsIE1FTV9SRVNFUlZFIHwgKCpjb21taXQgPyBNRU1fQ09NTUlUIDog MCksCisJICAgIFBBR0VfUkVBRFdSSVRFKTsKKyNlbHNlCisJLyoKKwkgKiBXZSBkb24ndCB1c2Ug TUFQX0ZJWEVEIGhlcmUsIGJlY2F1c2UgaXQgY2FuIGNhdXNlIHRoZSAqcmVwbGFjZW1lbnQqCisJ ICogb2YgZXhpc3RpbmcgbWFwcGluZ3MsIGFuZCB3ZSBvbmx5IHdhbnQgdG8gY3JlYXRlIG5ldyBt YXBwaW5ncy4KKwkgKi8KKwl7CisjaWZkZWYgX19OZXRCU0RfXworCQkvKgorCQkgKiBPbiBOZXRC U0QgUEFHRSBmb3IgYSBwbGF0Zm9ybSBpcyBkZWZpbmVkIHRvIHRoZQorCQkgKiBtYXhpbXVtIHBh Z2Ugc2l6ZSBvZiBhbGwgbWFjaGluZSBhcmNoaXRlY3R1cmVzCisJCSAqIGZvciB0aGF0IHBsYXRm b3JtLCBzbyB0aGF0IHdlIGNhbiB1c2UgdGhlIHNhbWUKKwkJICogYmluYXJpZXMgYWNyb3NzIGFs bCBtYWNoaW5lIGFyY2hpdGVjdHVyZXMuCisJCSAqLworCQlpZiAoYWxpZ25tZW50ID4gb3NfcGFn ZSB8fCBQQUdFID4gb3NfcGFnZSkgeworCQkJdW5zaWduZWQgaW50IGEgPSBpbG9nMihNQVgoYWxp Z25tZW50LCBQQUdFKSk7CisJCQltbWFwX2ZsYWdzIHw9IE1BUF9BTElHTkVEKGEpOworCQl9Cisj ZW5kaWYKKwkJaW50IHByb3QgPSAqY29tbWl0ID8gUEFHRVNfUFJPVF9DT01NSVQgOiBQQUdFU19Q Uk9UX0RFQ09NTUlUOworCisJCXJldCA9IG1tYXAoYWRkciwgc2l6ZSwgcHJvdCwgbW1hcF9mbGFn cywgUEFHRVNfRkRfVEFHLCAwKTsKKwl9CisJYXNzZXJ0KHJldCAhPSBOVUxMKTsKKworCWlmIChy ZXQgPT0gTUFQX0ZBSUxFRCkgeworCQlyZXQgPSBOVUxMOworCX0gZWxzZSBpZiAoYWRkciAhPSBO VUxMICYmIHJldCAhPSBhZGRyKSB7CisJCS8qCisJCSAqIFdlIHN1Y2NlZWRlZCBpbiBtYXBwaW5n IG1lbW9yeSwgYnV0IG5vdCBpbiB0aGUgcmlnaHQgcGxhY2UuCisJCSAqLworCQlvc19wYWdlc191 bm1hcChyZXQsIHNpemUpOworCQlyZXQgPSBOVUxMOworCX0KKyNlbmRpZgorCWFzc2VydChyZXQg PT0gTlVMTCB8fCAoYWRkciA9PSBOVUxMICYmIHJldCAhPSBhZGRyKSB8fCAoYWRkciAhPSBOVUxM ICYmCisJICAgIHJldCA9PSBhZGRyKSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQg Kgorb3NfcGFnZXNfdHJpbSh2b2lkICphZGRyLCBzaXplX3QgYWxsb2Nfc2l6ZSwgc2l6ZV90IGxl YWRzaXplLCBzaXplX3Qgc2l6ZSwKKyAgICBib29sICpjb21taXQpIHsKKwl2b2lkICpyZXQgPSAo dm9pZCAqKSgodWludHB0cl90KWFkZHIgKyBsZWFkc2l6ZSk7CisKKwlhc3NlcnQoYWxsb2Nfc2l6 ZSA+PSBsZWFkc2l6ZSArIHNpemUpOworI2lmZGVmIF9XSU4zMgorCW9zX3BhZ2VzX3VubWFwKGFk ZHIsIGFsbG9jX3NpemUpOworCXZvaWQgKm5ld19hZGRyID0gb3NfcGFnZXNfbWFwKHJldCwgc2l6 ZSwgUEFHRSwgY29tbWl0KTsKKwlpZiAobmV3X2FkZHIgPT0gcmV0KSB7CisJCXJldHVybiByZXQ7 CisJfQorCWlmIChuZXdfYWRkciAhPSBOVUxMKSB7CisJCW9zX3BhZ2VzX3VubWFwKG5ld19hZGRy LCBzaXplKTsKKwl9CisJcmV0dXJuIE5VTEw7CisjZWxzZQorCXNpemVfdCB0cmFpbHNpemUgPSBh bGxvY19zaXplIC0gbGVhZHNpemUgLSBzaXplOworCisJaWYgKGxlYWRzaXplICE9IDApIHsKKwkJ b3NfcGFnZXNfdW5tYXAoYWRkciwgbGVhZHNpemUpOworCX0KKwlpZiAodHJhaWxzaXplICE9IDAp IHsKKwkJb3NfcGFnZXNfdW5tYXAoKHZvaWQgKikoKHVpbnRwdHJfdClyZXQgKyBzaXplKSwgdHJh aWxzaXplKTsKKwl9CisJcmV0dXJuIHJldDsKKyNlbmRpZgorfQorCitzdGF0aWMgdm9pZAorb3Nf cGFnZXNfdW5tYXAodm9pZCAqYWRkciwgc2l6ZV90IHNpemUpIHsKKwlhc3NlcnQoQUxJR05NRU5U X0FERFIyQkFTRShhZGRyLCBvc19wYWdlKSA9PSBhZGRyKTsKKwlhc3NlcnQoQUxJR05NRU5UX0NF SUxJTkcoc2l6ZSwgb3NfcGFnZSkgPT0gc2l6ZSk7CisKKyNpZmRlZiBfV0lOMzIKKwlpZiAoVmly dHVhbEZyZWUoYWRkciwgMCwgTUVNX1JFTEVBU0UpID09IDApCisjZWxzZQorCWlmIChtdW5tYXAo YWRkciwgc2l6ZSkgPT0gLTEpCisjZW5kaWYKKwl7CisJCWNoYXIgYnVmW0JVRkVSUk9SX0JVRl07 CisKKwkJYnVmZXJyb3IoZ2V0X2Vycm5vKCksIGJ1Ziwgc2l6ZW9mKGJ1ZikpOworCQltYWxsb2Nf cHJpbnRmKCI8amVtYWxsb2M+OiBFcnJvciBpbiAiCisjaWZkZWYgX1dJTjMyCisJCSAgICAiVmly dHVhbEZyZWUiCisjZWxzZQorCQkgICAgIm11bm1hcCIKKyNlbmRpZgorCQkgICAgIigpOiAlc1xu IiwgYnVmKTsKKwkJaWYgKG9wdF9hYm9ydCkgeworCQkJYWJvcnQoKTsKKwkJfQorCX0KK30KKwor c3RhdGljIHZvaWQgKgorcGFnZXNfbWFwX3Nsb3coc2l6ZV90IHNpemUsIHNpemVfdCBhbGlnbm1l bnQsIGJvb2wgKmNvbW1pdCkgeworCXNpemVfdCBhbGxvY19zaXplID0gc2l6ZSArIGFsaWdubWVu dCAtIG9zX3BhZ2U7CisJLyogQmV3YXJlIHNpemVfdCB3cmFwLWFyb3VuZC4gKi8KKwlpZiAoYWxs b2Nfc2l6ZSA8IHNpemUpIHsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJdm9pZCAqcmV0OworCWRv IHsKKwkJdm9pZCAqcGFnZXMgPSBvc19wYWdlc19tYXAoTlVMTCwgYWxsb2Nfc2l6ZSwgYWxpZ25t ZW50LCBjb21taXQpOworCQlpZiAocGFnZXMgPT0gTlVMTCkgeworCQkJcmV0dXJuIE5VTEw7CisJ CX0KKwkJc2l6ZV90IGxlYWRzaXplID0gQUxJR05NRU5UX0NFSUxJTkcoKHVpbnRwdHJfdClwYWdl cywgYWxpZ25tZW50KQorCQkgICAgLSAodWludHB0cl90KXBhZ2VzOworCQlyZXQgPSBvc19wYWdl c190cmltKHBhZ2VzLCBhbGxvY19zaXplLCBsZWFkc2l6ZSwgc2l6ZSwgY29tbWl0KTsKKwl9IHdo aWxlIChyZXQgPT0gTlVMTCk7CisKKwlhc3NlcnQocmV0ICE9IE5VTEwpOworCWFzc2VydChQQUdF X0FERFIyQkFTRShyZXQpID09IHJldCk7CisJcmV0dXJuIHJldDsKK30KKwordm9pZCAqCitwYWdl c19tYXAodm9pZCAqYWRkciwgc2l6ZV90IHNpemUsIHNpemVfdCBhbGlnbm1lbnQsIGJvb2wgKmNv bW1pdCkgeworCWFzc2VydChhbGlnbm1lbnQgPj0gUEFHRSk7CisJYXNzZXJ0KEFMSUdOTUVOVF9B RERSMkJBU0UoYWRkciwgYWxpZ25tZW50KSA9PSBhZGRyKTsKKworI2lmIGRlZmluZWQoX19GcmVl QlNEX18pICYmIGRlZmluZWQoTUFQX0VYQ0wpCisJLyoKKwkgKiBGcmVlQlNEIGhhcyBtZWNoYW5p c21zIGJvdGggdG8gbW1hcCBhdCBzcGVjaWZpYyBhZGRyZXNzIHdpdGhvdXQKKwkgKiB0b3VjaGlu ZyBleGlzdGluZyBtYXBwaW5ncywgYW5kIHRvIG1tYXAgd2l0aCBzcGVjaWZpYyBhbGlnbm1lbnQu CisJICovCisJeworCQlpZiAob3Nfb3ZlcmNvbW1pdHMpIHsKKwkJCSpjb21taXQgPSB0cnVlOwor CQl9CisKKwkJaW50IHByb3QgPSAqY29tbWl0ID8gUEFHRVNfUFJPVF9DT01NSVQgOiBQQUdFU19Q Uk9UX0RFQ09NTUlUOworCQlpbnQgZmxhZ3MgPSBtbWFwX2ZsYWdzOworCisJCWlmIChhZGRyICE9 IE5VTEwpIHsKKwkJCWZsYWdzIHw9IE1BUF9GSVhFRCB8IE1BUF9FWENMOworCQl9IGVsc2Ugewor CQkJdW5zaWduZWQgYWxpZ25tZW50X2JpdHMgPSBmZnNfenUoYWxpZ25tZW50KTsKKwkJCWFzc2Vy dChhbGlnbm1lbnRfYml0cyA+IDApOworCQkJZmxhZ3MgfD0gTUFQX0FMSUdORUQoYWxpZ25tZW50 X2JpdHMpOworCQl9CisKKwkJdm9pZCAqcmV0ID0gbW1hcChhZGRyLCBzaXplLCBwcm90LCBmbGFn cywgLTEsIDApOworCQlpZiAocmV0ID09IE1BUF9GQUlMRUQpIHsKKwkJCXJldCA9IE5VTEw7CisJ CX0KKworCQlyZXR1cm4gcmV0OworCX0KKyNlbmRpZgorCS8qCisJICogSWRlYWxseSwgdGhlcmUg d291bGQgYmUgYSB3YXkgdG8gc3BlY2lmeSBhbGlnbm1lbnQgdG8gbW1hcCgpIChsaWtlCisJICog TmV0QlNEIGhhcyksIGJ1dCBpbiB0aGUgYWJzZW5jZSBvZiBzdWNoIGEgZmVhdHVyZSwgd2UgaGF2 ZSB0byB3b3JrCisJICogaGFyZCB0byBlZmZpY2llbnRseSBjcmVhdGUgYWxpZ25lZCBtYXBwaW5n cy4gIFRoZSByZWxpYWJsZSwgYnV0CisJICogc2xvdyBtZXRob2QgaXMgdG8gY3JlYXRlIGEgbWFw cGluZyB0aGF0IGlzIG92ZXItc2l6ZWQsIHRoZW4gdHJpbSB0aGUKKwkgKiBleGNlc3MuICBIb3dl dmVyLCB0aGF0IGFsd2F5cyByZXN1bHRzIGluIG9uZSBvciB0d28gY2FsbHMgdG8KKwkgKiBvc19w YWdlc191bm1hcCgpLCBhbmQgaXQgY2FuIGxlYXZlIGhvbGVzIGluIHRoZSBwcm9jZXNzJ3Mgdmly dHVhbAorCSAqIG1lbW9yeSBtYXAgaWYgbWVtb3J5IGdyb3dzIGRvd253YXJkLgorCSAqCisJICog T3B0aW1pc3RpY2FsbHkgdHJ5IG1hcHBpbmcgcHJlY2lzZWx5IHRoZSByaWdodCBhbW91bnQgYmVm b3JlIGZhbGxpbmcKKwkgKiBiYWNrIHRvIHRoZSBzbG93IG1ldGhvZCwgd2l0aCB0aGUgZXhwZWN0 YXRpb24gdGhhdCB0aGUgb3B0aW1pc3RpYworCSAqIGFwcHJvYWNoIHdvcmtzIG1vc3Qgb2YgdGhl IHRpbWUuCisJICovCisKKwl2b2lkICpyZXQgPSBvc19wYWdlc19tYXAoYWRkciwgc2l6ZSwgb3Nf cGFnZSwgY29tbWl0KTsKKwlpZiAocmV0ID09IE5VTEwgfHwgcmV0ID09IGFkZHIpIHsKKwkJcmV0 dXJuIHJldDsKKwl9CisJYXNzZXJ0KGFkZHIgPT0gTlVMTCk7CisJaWYgKEFMSUdOTUVOVF9BRERS Mk9GRlNFVChyZXQsIGFsaWdubWVudCkgIT0gMCkgeworCQlvc19wYWdlc191bm1hcChyZXQsIHNp emUpOworCQlyZXR1cm4gcGFnZXNfbWFwX3Nsb3coc2l6ZSwgYWxpZ25tZW50LCBjb21taXQpOwor CX0KKworCWFzc2VydChQQUdFX0FERFIyQkFTRShyZXQpID09IHJldCk7CisJcmV0dXJuIHJldDsK K30KKwordm9pZAorcGFnZXNfdW5tYXAodm9pZCAqYWRkciwgc2l6ZV90IHNpemUpIHsKKwlhc3Nl cnQoUEFHRV9BRERSMkJBU0UoYWRkcikgPT0gYWRkcik7CisJYXNzZXJ0KFBBR0VfQ0VJTElORyhz aXplKSA9PSBzaXplKTsKKworCW9zX3BhZ2VzX3VubWFwKGFkZHIsIHNpemUpOworfQorCitzdGF0 aWMgYm9vbAorb3NfcGFnZXNfY29tbWl0KHZvaWQgKmFkZHIsIHNpemVfdCBzaXplLCBib29sIGNv bW1pdCkgeworCWFzc2VydChQQUdFX0FERFIyQkFTRShhZGRyKSA9PSBhZGRyKTsKKwlhc3NlcnQo UEFHRV9DRUlMSU5HKHNpemUpID09IHNpemUpOworCisjaWZkZWYgX1dJTjMyCisJcmV0dXJuIChj b21taXQgPyAoYWRkciAhPSBWaXJ0dWFsQWxsb2MoYWRkciwgc2l6ZSwgTUVNX0NPTU1JVCwKKwkg ICAgUEFHRV9SRUFEV1JJVEUpKSA6ICghVmlydHVhbEZyZWUoYWRkciwgc2l6ZSwgTUVNX0RFQ09N TUlUKSkpOworI2Vsc2UKKwl7CisJCWludCBwcm90ID0gY29tbWl0ID8gUEFHRVNfUFJPVF9DT01N SVQgOiBQQUdFU19QUk9UX0RFQ09NTUlUOworCQl2b2lkICpyZXN1bHQgPSBtbWFwKGFkZHIsIHNp emUsIHByb3QsIG1tYXBfZmxhZ3MgfCBNQVBfRklYRUQsCisJCSAgICBQQUdFU19GRF9UQUcsIDAp OworCQlpZiAocmVzdWx0ID09IE1BUF9GQUlMRUQpIHsKKwkJCXJldHVybiB0cnVlOworCQl9CisJ CWlmIChyZXN1bHQgIT0gYWRkcikgeworCQkJLyoKKwkJCSAqIFdlIHN1Y2NlZWRlZCBpbiBtYXBw aW5nIG1lbW9yeSwgYnV0IG5vdCBpbiB0aGUgcmlnaHQKKwkJCSAqIHBsYWNlLgorCQkJICovCisJ CQlvc19wYWdlc191bm1hcChyZXN1bHQsIHNpemUpOworCQkJcmV0dXJuIHRydWU7CisJCX0KKwkJ cmV0dXJuIGZhbHNlOworCX0KKyNlbmRpZgorfQorCitzdGF0aWMgYm9vbAorcGFnZXNfY29tbWl0 X2ltcGwodm9pZCAqYWRkciwgc2l6ZV90IHNpemUsIGJvb2wgY29tbWl0KSB7CisJaWYgKG9zX292 ZXJjb21taXRzKSB7CisJCXJldHVybiB0cnVlOworCX0KKworCXJldHVybiBvc19wYWdlc19jb21t aXQoYWRkciwgc2l6ZSwgY29tbWl0KTsKK30KKworYm9vbAorcGFnZXNfY29tbWl0KHZvaWQgKmFk ZHIsIHNpemVfdCBzaXplKSB7CisJcmV0dXJuIHBhZ2VzX2NvbW1pdF9pbXBsKGFkZHIsIHNpemUs IHRydWUpOworfQorCitib29sCitwYWdlc19kZWNvbW1pdCh2b2lkICphZGRyLCBzaXplX3Qgc2l6 ZSkgeworCXJldHVybiBwYWdlc19jb21taXRfaW1wbChhZGRyLCBzaXplLCBmYWxzZSk7Cit9CisK K3ZvaWQKK3BhZ2VzX21hcmtfZ3VhcmRzKHZvaWQgKmhlYWQsIHZvaWQgKnRhaWwpIHsKKwlhc3Nl cnQoaGVhZCAhPSBOVUxMIHx8IHRhaWwgIT0gTlVMTCk7CisJYXNzZXJ0KGhlYWQgPT0gTlVMTCB8 fCB0YWlsID09IE5VTEwgfHwKKwkgICAgKHVpbnRwdHJfdCloZWFkIDwgKHVpbnRwdHJfdCl0YWls KTsKKyNpZmRlZiBKRU1BTExPQ19IQVZFX01QUk9URUNUCisJaWYgKGhlYWQgIT0gTlVMTCkgewor CQltcHJvdGVjdChoZWFkLCBQQUdFLCBQUk9UX05PTkUpOworCX0KKwlpZiAodGFpbCAhPSBOVUxM KSB7CisJCW1wcm90ZWN0KHRhaWwsIFBBR0UsIFBST1RfTk9ORSk7CisJfQorI2Vsc2UKKwkvKiBE ZWNvbW1pdCBzZXRzIHRvIFBST1RfTk9ORSAvIE1FTV9ERUNPTU1JVC4gKi8KKwlpZiAoaGVhZCAh PSBOVUxMKSB7CisJCW9zX3BhZ2VzX2NvbW1pdChoZWFkLCBQQUdFLCBmYWxzZSk7CisJfQorCWlm ICh0YWlsICE9IE5VTEwpIHsKKwkJb3NfcGFnZXNfY29tbWl0KHRhaWwsIFBBR0UsIGZhbHNlKTsK Kwl9CisjZW5kaWYKK30KKwordm9pZAorcGFnZXNfdW5tYXJrX2d1YXJkcyh2b2lkICpoZWFkLCB2 b2lkICp0YWlsKSB7CisJYXNzZXJ0KGhlYWQgIT0gTlVMTCB8fCB0YWlsICE9IE5VTEwpOworCWFz c2VydChoZWFkID09IE5VTEwgfHwgdGFpbCA9PSBOVUxMIHx8CisJICAgICh1aW50cHRyX3QpaGVh ZCA8ICh1aW50cHRyX3QpdGFpbCk7CisjaWZkZWYgSkVNQUxMT0NfSEFWRV9NUFJPVEVDVAorCWJv b2wgaGVhZF9hbmRfdGFpbCA9IChoZWFkICE9IE5VTEwpICYmICh0YWlsICE9IE5VTEwpOworCXNp emVfdCByYW5nZSA9IGhlYWRfYW5kX3RhaWwgPworCSAgICAodWludHB0cl90KXRhaWwgLSAodWlu dHB0cl90KWhlYWQgKyBQQUdFIDoKKwkgICAgU0laRV9UX01BWDsKKwkvKgorCSAqIFRoZSBhbW91 bnQgb2Ygd29yayB0aGF0IHRoZSBrZXJuZWwgZG9lcyBpbiBtcHJvdGVjdCBkZXBlbmRzIG9uIHRo ZQorCSAqIHJhbmdlIGFyZ3VtZW50LiAgU0NfTEFSR0VfTUlOQ0xBU1MgaXMgYW4gYXJiaXRyYXJ5 IHRocmVzaG9sZCBjaG9zZW4KKwkgKiB0byBwcmV2ZW50IGtlcm5lbCBmcm9tIGRvaW5nIHRvbyBt dWNoIHdvcmsgdGhhdCB3b3VsZCBvdXR3ZWlnaCB0aGUKKwkgKiBzYXZpbmdzIG9mIHBlcmZvcm1p bmcgb25lIGxlc3Mgc3lzdGVtIGNhbGwuCisJICovCisJYm9vbCByYW5nZWRfbXByb3RlY3QgPSBo ZWFkX2FuZF90YWlsICYmIHJhbmdlIDw9IFNDX0xBUkdFX01JTkNMQVNTOworCWlmIChyYW5nZWRf bXByb3RlY3QpIHsKKwkJbXByb3RlY3QoaGVhZCwgcmFuZ2UsIFBST1RfUkVBRCB8IFBST1RfV1JJ VEUpOworCX0gZWxzZSB7CisJCWlmIChoZWFkICE9IE5VTEwpIHsKKwkJCW1wcm90ZWN0KGhlYWQs IFBBR0UsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUpOworCQl9CisJCWlmICh0YWlsICE9IE5VTEwp IHsKKwkJCW1wcm90ZWN0KHRhaWwsIFBBR0UsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUpOworCQl9 CisJfQorI2Vsc2UKKwlpZiAoaGVhZCAhPSBOVUxMKSB7CisJCW9zX3BhZ2VzX2NvbW1pdChoZWFk LCBQQUdFLCB0cnVlKTsKKwl9CisJaWYgKHRhaWwgIT0gTlVMTCkgeworCQlvc19wYWdlc19jb21t aXQodGFpbCwgUEFHRSwgdHJ1ZSk7CisJfQorI2VuZGlmCit9CisKK2Jvb2wKK3BhZ2VzX3B1cmdl X2xhenkodm9pZCAqYWRkciwgc2l6ZV90IHNpemUpIHsKKwlhc3NlcnQoQUxJR05NRU5UX0FERFIy QkFTRShhZGRyLCBvc19wYWdlKSA9PSBhZGRyKTsKKwlhc3NlcnQoUEFHRV9DRUlMSU5HKHNpemUp ID09IHNpemUpOworCisJaWYgKCFwYWdlc19jYW5fcHVyZ2VfbGF6eSkgeworCQlyZXR1cm4gdHJ1 ZTsKKwl9CisJaWYgKCFwYWdlc19jYW5fcHVyZ2VfbGF6eV9ydW50aW1lKSB7CisJCS8qCisJCSAq IEJ1aWx0IHdpdGggbGF6eSBwdXJnZSBlbmFibGVkLCBidXQgZGV0ZWN0ZWQgaXQgd2FzIG5vdAor CQkgKiBzdXBwb3J0ZWQgb24gdGhlIGN1cnJlbnQgc3lzdGVtLgorCQkgKi8KKwkJcmV0dXJuIHRy dWU7CisJfQorCisjaWZkZWYgX1dJTjMyCisJVmlydHVhbEFsbG9jKGFkZHIsIHNpemUsIE1FTV9S RVNFVCwgUEFHRV9SRUFEV1JJVEUpOworCXJldHVybiBmYWxzZTsKKyNlbGlmIGRlZmluZWQoSkVN QUxMT0NfUFVSR0VfTUFEVklTRV9GUkVFKQorCXJldHVybiAobWFkdmlzZShhZGRyLCBzaXplLAor IyAgaWZkZWYgTUFEVl9GUkVFCisJICAgIE1BRFZfRlJFRQorIyAgZWxzZQorCSAgICBKRU1BTExP Q19NQURWX0ZSRUUKKyMgIGVuZGlmCisJICAgICkgIT0gMCk7CisjZWxpZiBkZWZpbmVkKEpFTUFM TE9DX1BVUkdFX01BRFZJU0VfRE9OVE5FRUQpICYmIFwKKyAgICAhZGVmaW5lZChKRU1BTExPQ19Q VVJHRV9NQURWSVNFX0RPTlRORUVEX1pFUk9TKQorCXJldHVybiAobWFkdmlzZShhZGRyLCBzaXpl LCBNQURWX0RPTlRORUVEKSAhPSAwKTsKKyNlbGlmIGRlZmluZWQoSkVNQUxMT0NfUFVSR0VfUE9T SVhfTUFEVklTRV9ET05UTkVFRCkgJiYgXAorICAgICFkZWZpbmVkKEpFTUFMTE9DX1BVUkdFX1BP U0lYX01BRFZJU0VfRE9OVE5FRURfWkVST1MpCisJcmV0dXJuIChwb3NpeF9tYWR2aXNlKGFkZHIs IHNpemUsIFBPU0lYX01BRFZfRE9OVE5FRUQpICE9IDApOworI2Vsc2UKKwlub3RfcmVhY2hlZCgp OworI2VuZGlmCit9CisKK2Jvb2wKK3BhZ2VzX3B1cmdlX2ZvcmNlZCh2b2lkICphZGRyLCBzaXpl X3Qgc2l6ZSkgeworCWFzc2VydChQQUdFX0FERFIyQkFTRShhZGRyKSA9PSBhZGRyKTsKKwlhc3Nl cnQoUEFHRV9DRUlMSU5HKHNpemUpID09IHNpemUpOworCisJaWYgKCFwYWdlc19jYW5fcHVyZ2Vf Zm9yY2VkKSB7CisJCXJldHVybiB0cnVlOworCX0KKworI2lmIGRlZmluZWQoSkVNQUxMT0NfUFVS R0VfTUFEVklTRV9ET05UTkVFRCkgJiYgXAorICAgIGRlZmluZWQoSkVNQUxMT0NfUFVSR0VfTUFE VklTRV9ET05UTkVFRF9aRVJPUykKKwlyZXR1cm4gKHVubGlrZWx5KG1hZHZpc2VfZG9udF9uZWVk X3plcm9zX2lzX2ZhdWx0eSkgfHwKKwkgICAgbWFkdmlzZShhZGRyLCBzaXplLCBNQURWX0RPTlRO RUVEKSAhPSAwKTsKKyNlbGlmIGRlZmluZWQoSkVNQUxMT0NfUFVSR0VfUE9TSVhfTUFEVklTRV9E T05UTkVFRCkgJiYgXAorICAgIGRlZmluZWQoSkVNQUxMT0NfUFVSR0VfUE9TSVhfTUFEVklTRV9E T05UTkVFRF9aRVJPUykKKwlyZXR1cm4gKHVubGlrZWx5KG1hZHZpc2VfZG9udF9uZWVkX3plcm9z X2lzX2ZhdWx0eSkgfHwKKwkgICAgcG9zaXhfbWFkdmlzZShhZGRyLCBzaXplLCBQT1NJWF9NQURW X0RPTlRORUVEKSAhPSAwKTsKKyNlbGlmIGRlZmluZWQoSkVNQUxMT0NfTUFQU19DT0FMRVNDRSkK KwkvKiBUcnkgdG8gb3ZlcmxheSBhIG5ldyBkZW1hbmQtemVyb2VkIG1hcHBpbmcuICovCisJcmV0 dXJuIHBhZ2VzX2NvbW1pdChhZGRyLCBzaXplKTsKKyNlbHNlCisJbm90X3JlYWNoZWQoKTsKKyNl bmRpZgorfQorCitzdGF0aWMgYm9vbAorcGFnZXNfaHVnZV9pbXBsKHZvaWQgKmFkZHIsIHNpemVf dCBzaXplLCBib29sIGFsaWduZWQpIHsKKwlpZiAoYWxpZ25lZCkgeworCQlhc3NlcnQoSFVHRVBB R0VfQUREUjJCQVNFKGFkZHIpID09IGFkZHIpOworCQlhc3NlcnQoSFVHRVBBR0VfQ0VJTElORyhz aXplKSA9PSBzaXplKTsKKwl9CisjaWYgZGVmaW5lZChKRU1BTExPQ19IQVZFX01BRFZJU0VfSFVH RSkKKwlyZXR1cm4gKG1hZHZpc2UoYWRkciwgc2l6ZSwgTUFEVl9IVUdFUEFHRSkgIT0gMCk7Cisj ZWxpZiBkZWZpbmVkKEpFTUFMTE9DX0hBVkVfTUVNQ05UTCkKKwlzdHJ1Y3QgbWVtY250bF9taGEg bSA9IHswfTsKKwltLm1oYV9jbWQgPSBNSEFfTUFQU0laRV9WQTsKKwltLm1oYV9wYWdlc2l6ZSA9 IEhVR0VQQUdFOworCXJldHVybiAobWVtY250bChhZGRyLCBzaXplLCBNQ19IQVRfQURWSVNFLCAo Y2FkZHJfdCkmbSwgMCwgMCkgPT0gMCk7CisjZWxzZQorCXJldHVybiB0cnVlOworI2VuZGlmCit9 CisKK2Jvb2wKK3BhZ2VzX2h1Z2Uodm9pZCAqYWRkciwgc2l6ZV90IHNpemUpIHsKKwlyZXR1cm4g cGFnZXNfaHVnZV9pbXBsKGFkZHIsIHNpemUsIHRydWUpOworfQorCitzdGF0aWMgYm9vbAorcGFn ZXNfaHVnZV91bmFsaWduZWQodm9pZCAqYWRkciwgc2l6ZV90IHNpemUpIHsKKwlyZXR1cm4gcGFn ZXNfaHVnZV9pbXBsKGFkZHIsIHNpemUsIGZhbHNlKTsKK30KKworc3RhdGljIGJvb2wKK3BhZ2Vz X25vaHVnZV9pbXBsKHZvaWQgKmFkZHIsIHNpemVfdCBzaXplLCBib29sIGFsaWduZWQpIHsKKwlp ZiAoYWxpZ25lZCkgeworCQlhc3NlcnQoSFVHRVBBR0VfQUREUjJCQVNFKGFkZHIpID09IGFkZHIp OworCQlhc3NlcnQoSFVHRVBBR0VfQ0VJTElORyhzaXplKSA9PSBzaXplKTsKKwl9CisKKyNpZmRl ZiBKRU1BTExPQ19IQVZFX01BRFZJU0VfSFVHRQorCXJldHVybiAobWFkdmlzZShhZGRyLCBzaXpl LCBNQURWX05PSFVHRVBBR0UpICE9IDApOworI2Vsc2UKKwlyZXR1cm4gZmFsc2U7CisjZW5kaWYK K30KKworYm9vbAorcGFnZXNfbm9odWdlKHZvaWQgKmFkZHIsIHNpemVfdCBzaXplKSB7CisJcmV0 dXJuIHBhZ2VzX25vaHVnZV9pbXBsKGFkZHIsIHNpemUsIHRydWUpOworfQorCitzdGF0aWMgYm9v bAorcGFnZXNfbm9odWdlX3VuYWxpZ25lZCh2b2lkICphZGRyLCBzaXplX3Qgc2l6ZSkgeworCXJl dHVybiBwYWdlc19ub2h1Z2VfaW1wbChhZGRyLCBzaXplLCBmYWxzZSk7Cit9CisKK2Jvb2wKK3Bh Z2VzX2RvbnRkdW1wKHZvaWQgKmFkZHIsIHNpemVfdCBzaXplKSB7CisJYXNzZXJ0KFBBR0VfQURE UjJCQVNFKGFkZHIpID09IGFkZHIpOworCWFzc2VydChQQUdFX0NFSUxJTkcoc2l6ZSkgPT0gc2l6 ZSk7CisjaWYgZGVmaW5lZChKRU1BTExPQ19NQURWSVNFX0RPTlREVU1QKQorCXJldHVybiBtYWR2 aXNlKGFkZHIsIHNpemUsIE1BRFZfRE9OVERVTVApICE9IDA7CisjZWxpZiBkZWZpbmVkKEpFTUFM TE9DX01BRFZJU0VfTk9DT1JFKQorCXJldHVybiBtYWR2aXNlKGFkZHIsIHNpemUsIE1BRFZfTk9D T1JFKSAhPSAwOworI2Vsc2UKKwlyZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKworYm9vbAorcGFn ZXNfZG9kdW1wKHZvaWQgKmFkZHIsIHNpemVfdCBzaXplKSB7CisJYXNzZXJ0KFBBR0VfQUREUjJC QVNFKGFkZHIpID09IGFkZHIpOworCWFzc2VydChQQUdFX0NFSUxJTkcoc2l6ZSkgPT0gc2l6ZSk7 CisjaWYgZGVmaW5lZChKRU1BTExPQ19NQURWSVNFX0RPTlREVU1QKQorCXJldHVybiBtYWR2aXNl KGFkZHIsIHNpemUsIE1BRFZfRE9EVU1QKSAhPSAwOworI2VsaWYgZGVmaW5lZChKRU1BTExPQ19N QURWSVNFX05PQ09SRSkKKwlyZXR1cm4gbWFkdmlzZShhZGRyLCBzaXplLCBNQURWX0NPUkUpICE9 IDA7CisjZWxzZQorCXJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCisKK3N0YXRpYyBzaXplX3QK K29zX3BhZ2VfZGV0ZWN0KHZvaWQpIHsKKyNpZmRlZiBfV0lOMzIKKwlTWVNURU1fSU5GTyBzaTsK KwlHZXRTeXN0ZW1JbmZvKCZzaSk7CisJcmV0dXJuIHNpLmR3UGFnZVNpemU7CisjZWxpZiBkZWZp bmVkKF9fRnJlZUJTRF9fKQorCS8qCisJICogVGhpcyByZXR1cm5zIHRoZSB2YWx1ZSBvYnRhaW5l ZCBmcm9tCisJICogdGhlIGF1eHYgdmVjdG9yLCBhdm9pZGluZyBhIHN5c2NhbGwuCisJICovCisJ cmV0dXJuIGdldHBhZ2VzaXplKCk7CisjZWxzZQorCWxvbmcgcmVzdWx0ID0gc3lzY29uZihfU0Nf UEFHRVNJWkUpOworCWlmIChyZXN1bHQgPT0gLTEpIHsKKwkJcmV0dXJuIExHX1BBR0U7CisJfQor CXJldHVybiAoc2l6ZV90KXJlc3VsdDsKKyNlbmRpZgorfQorCisjaWZkZWYgSkVNQUxMT0NfU1lT Q1RMX1ZNX09WRVJDT01NSVQKK3N0YXRpYyBib29sCitvc19vdmVyY29tbWl0c19zeXNjdGwodm9p ZCkgeworCWludCB2bV9vdmVyY29tbWl0OworCXNpemVfdCBzejsKKworCXN6ID0gc2l6ZW9mKHZt X292ZXJjb21taXQpOworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIGRlZmluZWQoVk1fT1ZF UkNPTU1JVCkKKwlpbnQgbWliWzJdOworCisJbWliWzBdID0gQ1RMX1ZNOworCW1pYlsxXSA9IFZN X09WRVJDT01NSVQ7CisJaWYgKHN5c2N0bChtaWIsIDIsICZ2bV9vdmVyY29tbWl0LCAmc3osIE5V TEwsIDApICE9IDApIHsKKwkJcmV0dXJuIGZhbHNlOyAvKiBFcnJvci4gKi8KKwl9CisjZWxzZQor CWlmIChzeXNjdGxieW5hbWUoInZtLm92ZXJjb21taXQiLCAmdm1fb3ZlcmNvbW1pdCwgJnN6LCBO VUxMLCAwKSAhPSAwKSB7CisJCXJldHVybiBmYWxzZTsgLyogRXJyb3IuICovCisJfQorI2VuZGlm CisKKwlyZXR1cm4gKCh2bV9vdmVyY29tbWl0ICYgMHgzKSA9PSAwKTsKK30KKyNlbmRpZgorCisj aWZkZWYgSkVNQUxMT0NfUFJPQ19TWVNfVk1fT1ZFUkNPTU1JVF9NRU1PUlkKKy8qCisgKiBVc2Ug c3lzY2FsbCgyKSByYXRoZXIgdGhhbiB7b3BlbixyZWFkLGNsb3NlfSgyKSB3aGVuIHBvc3NpYmxl IHRvIGF2b2lkCisgKiByZWVudHJ5IGR1cmluZyBib290c3RyYXBwaW5nIGlmIGFub3RoZXIgbGli cmFyeSBoYXMgaW50ZXJwb3NlZCBzeXN0ZW0gY2FsbAorICogd3JhcHBlcnMuCisgKi8KK3N0YXRp YyBib29sCitvc19vdmVyY29tbWl0c19wcm9jKHZvaWQpIHsKKwlpbnQgZmQ7CisJY2hhciBidWZb MV07CisKKyNpZiBkZWZpbmVkKEpFTUFMTE9DX1VTRV9TWVNDQUxMKSAmJiBkZWZpbmVkKFNZU19v cGVuKQorCSNpZiBkZWZpbmVkKE9fQ0xPRVhFQykKKwkJZmQgPSAoaW50KXN5c2NhbGwoU1lTX29w ZW4sICIvcHJvYy9zeXMvdm0vb3ZlcmNvbW1pdF9tZW1vcnkiLCBPX1JET05MWSB8CisJCQlPX0NM T0VYRUMpOworCSNlbHNlCisJCWZkID0gKGludClzeXNjYWxsKFNZU19vcGVuLCAiL3Byb2Mvc3lz L3ZtL292ZXJjb21taXRfbWVtb3J5IiwgT19SRE9OTFkpOworCQlpZiAoZmQgIT0gLTEpIHsKKwkJ CWZjbnRsKGZkLCBGX1NFVEZELCBmY250bChmZCwgRl9HRVRGRCkgfCBGRF9DTE9FWEVDKTsKKwkJ fQorCSNlbmRpZgorI2VsaWYgZGVmaW5lZChKRU1BTExPQ19VU0VfU1lTQ0FMTCkgJiYgZGVmaW5l ZChTWVNfb3BlbmF0KQorCSNpZiBkZWZpbmVkKE9fQ0xPRVhFQykKKwkJZmQgPSAoaW50KXN5c2Nh bGwoU1lTX29wZW5hdCwKKwkJCUFUX0ZEQ1dELCAiL3Byb2Mvc3lzL3ZtL292ZXJjb21taXRfbWVt b3J5IiwgT19SRE9OTFkgfCBPX0NMT0VYRUMpOworCSNlbHNlCisJCWZkID0gKGludClzeXNjYWxs KFNZU19vcGVuYXQsCisJCQlBVF9GRENXRCwgIi9wcm9jL3N5cy92bS9vdmVyY29tbWl0X21lbW9y eSIsIE9fUkRPTkxZKTsKKwkJaWYgKGZkICE9IC0xKSB7CisJCQlmY250bChmZCwgRl9TRVRGRCwg ZmNudGwoZmQsIEZfR0VURkQpIHwgRkRfQ0xPRVhFQyk7CisJCX0KKwkjZW5kaWYKKyNlbHNlCisJ I2lmIGRlZmluZWQoT19DTE9FWEVDKQorCQlmZCA9IG9wZW4oIi9wcm9jL3N5cy92bS9vdmVyY29t bWl0X21lbW9yeSIsIE9fUkRPTkxZIHwgT19DTE9FWEVDKTsKKwkjZWxzZQorCQlmZCA9IG9wZW4o Ii9wcm9jL3N5cy92bS9vdmVyY29tbWl0X21lbW9yeSIsIE9fUkRPTkxZKTsKKwkJaWYgKGZkICE9 IC0xKSB7CisJCQlmY250bChmZCwgRl9TRVRGRCwgZmNudGwoZmQsIEZfR0VURkQpIHwgRkRfQ0xP RVhFQyk7CisJCX0KKwkjZW5kaWYKKyNlbmRpZgorCisJaWYgKGZkID09IC0xKSB7CisJCXJldHVy biBmYWxzZTsgLyogRXJyb3IuICovCisJfQorCisJc3NpemVfdCBucmVhZCA9IG1hbGxvY19yZWFk X2ZkKGZkLCAmYnVmLCBzaXplb2YoYnVmKSk7CisjaWYgZGVmaW5lZChKRU1BTExPQ19VU0VfU1lT Q0FMTCkgJiYgZGVmaW5lZChTWVNfY2xvc2UpCisJc3lzY2FsbChTWVNfY2xvc2UsIGZkKTsKKyNl bHNlCisJY2xvc2UoZmQpOworI2VuZGlmCisKKwlpZiAobnJlYWQgPCAxKSB7CisJCXJldHVybiBm YWxzZTsgLyogRXJyb3IuICovCisJfQorCS8qCisJICogL3Byb2Mvc3lzL3ZtL292ZXJjb21taXRf bWVtb3J5IG1lYW5pbmdzOgorCSAqIDA6IEhldXJpc3RpYyBvdmVyY29tbWl0LgorCSAqIDE6IEFs d2F5cyBvdmVyY29tbWl0LgorCSAqIDI6IE5ldmVyIG92ZXJjb21taXQuCisJICovCisJcmV0dXJu IChidWZbMF0gPT0gJzAnIHx8IGJ1ZlswXSA9PSAnMScpOworfQorI2VuZGlmCisKK3ZvaWQKK3Bh Z2VzX3NldF90aHBfc3RhdGUgKHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpIHsKKwlpZiAob3B0X3Ro cCA9PSB0aHBfbW9kZV9kZWZhdWx0IHx8IG9wdF90aHAgPT0gaW5pdF9zeXN0ZW1fdGhwX21vZGUp IHsKKwkJcmV0dXJuOworCX0KKwlhc3NlcnQob3B0X3RocCAhPSB0aHBfbW9kZV9ub3Rfc3VwcG9y dGVkICYmCisJICAgIGluaXRfc3lzdGVtX3RocF9tb2RlICE9IHRocF9tb2RlX25vdF9zdXBwb3J0 ZWQpOworCisJaWYgKG9wdF90aHAgPT0gdGhwX21vZGVfYWx3YXlzCisJICAgICYmIGluaXRfc3lz dGVtX3RocF9tb2RlICE9IHRocF9tb2RlX25ldmVyKSB7CisJCWFzc2VydChpbml0X3N5c3RlbV90 aHBfbW9kZSA9PSB0aHBfbW9kZV9kZWZhdWx0KTsKKwkJcGFnZXNfaHVnZV91bmFsaWduZWQocHRy LCBzaXplKTsKKwl9IGVsc2UgaWYgKG9wdF90aHAgPT0gdGhwX21vZGVfbmV2ZXIpIHsKKwkJYXNz ZXJ0KGluaXRfc3lzdGVtX3RocF9tb2RlID09IHRocF9tb2RlX2RlZmF1bHQgfHwKKwkJICAgIGlu aXRfc3lzdGVtX3RocF9tb2RlID09IHRocF9tb2RlX2Fsd2F5cyk7CisJCXBhZ2VzX25vaHVnZV91 bmFsaWduZWQocHRyLCBzaXplKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitpbml0X3RocF9zdGF0 ZSh2b2lkKSB7CisJaWYgKCFoYXZlX21hZHZpc2VfaHVnZSAmJiAhaGF2ZV9tZW1jbnRsKSB7CisJ CWlmIChtZXRhZGF0YV90aHBfZW5hYmxlZCgpICYmIG9wdF9hYm9ydCkgeworCQkJbWFsbG9jX3dy aXRlKCI8amVtYWxsb2M+OiBubyBNQURWX0hVR0VQQUdFIHN1cHBvcnRcbiIpOworCQkJYWJvcnQo KTsKKwkJfQorCQlnb3RvIGxhYmVsX2Vycm9yOworCX0KKyNpZiBkZWZpbmVkKEpFTUFMTE9DX0hB VkVfTUFEVklTRV9IVUdFKQorCXN0YXRpYyBjb25zdCBjaGFyIHN5c19zdGF0ZV9tYWR2aXNlW10g PSAiYWx3YXlzIFttYWR2aXNlXSBuZXZlclxuIjsKKwlzdGF0aWMgY29uc3QgY2hhciBzeXNfc3Rh dGVfYWx3YXlzW10gPSAiW2Fsd2F5c10gbWFkdmlzZSBuZXZlclxuIjsKKwlzdGF0aWMgY29uc3Qg Y2hhciBzeXNfc3RhdGVfbmV2ZXJbXSA9ICJhbHdheXMgbWFkdmlzZSBbbmV2ZXJdXG4iOworCWNo YXIgYnVmW3NpemVvZihzeXNfc3RhdGVfbWFkdmlzZSldOworCisjaWYgZGVmaW5lZChKRU1BTExP Q19VU0VfU1lTQ0FMTCkgJiYgZGVmaW5lZChTWVNfb3BlbikKKwlpbnQgZmQgPSAoaW50KXN5c2Nh bGwoU1lTX29wZW4sCisJICAgICIvc3lzL2tlcm5lbC9tbS90cmFuc3BhcmVudF9odWdlcGFnZS9l bmFibGVkIiwgT19SRE9OTFkpOworI2VsaWYgZGVmaW5lZChKRU1BTExPQ19VU0VfU1lTQ0FMTCkg JiYgZGVmaW5lZChTWVNfb3BlbmF0KQorCWludCBmZCA9IChpbnQpc3lzY2FsbChTWVNfb3BlbmF0 LAorCQkgICAgQVRfRkRDV0QsICIvc3lzL2tlcm5lbC9tbS90cmFuc3BhcmVudF9odWdlcGFnZS9l bmFibGVkIiwgT19SRE9OTFkpOworI2Vsc2UKKwlpbnQgZmQgPSBvcGVuKCIvc3lzL2tlcm5lbC9t bS90cmFuc3BhcmVudF9odWdlcGFnZS9lbmFibGVkIiwgT19SRE9OTFkpOworI2VuZGlmCisJaWYg KGZkID09IC0xKSB7CisJCWdvdG8gbGFiZWxfZXJyb3I7CisJfQorCisJc3NpemVfdCBucmVhZCA9 IG1hbGxvY19yZWFkX2ZkKGZkLCAmYnVmLCBzaXplb2YoYnVmKSk7CisjaWYgZGVmaW5lZChKRU1B TExPQ19VU0VfU1lTQ0FMTCkgJiYgZGVmaW5lZChTWVNfY2xvc2UpCisJc3lzY2FsbChTWVNfY2xv c2UsIGZkKTsKKyNlbHNlCisJY2xvc2UoZmQpOworI2VuZGlmCisKKyAgICAgICAgaWYgKG5yZWFk IDwgMCkgeworCQlnb3RvIGxhYmVsX2Vycm9yOworICAgICAgICB9CisKKwlpZiAoc3RybmNtcChi dWYsIHN5c19zdGF0ZV9tYWR2aXNlLCAoc2l6ZV90KW5yZWFkKSA9PSAwKSB7CisJCWluaXRfc3lz dGVtX3RocF9tb2RlID0gdGhwX21vZGVfZGVmYXVsdDsKKwl9IGVsc2UgaWYgKHN0cm5jbXAoYnVm LCBzeXNfc3RhdGVfYWx3YXlzLCAoc2l6ZV90KW5yZWFkKSA9PSAwKSB7CisJCWluaXRfc3lzdGVt X3RocF9tb2RlID0gdGhwX21vZGVfYWx3YXlzOworCX0gZWxzZSBpZiAoc3RybmNtcChidWYsIHN5 c19zdGF0ZV9uZXZlciwgKHNpemVfdClucmVhZCkgPT0gMCkgeworCQlpbml0X3N5c3RlbV90aHBf bW9kZSA9IHRocF9tb2RlX25ldmVyOworCX0gZWxzZSB7CisJCWdvdG8gbGFiZWxfZXJyb3I7CisJ fQorCXJldHVybjsKKyNlbGlmIGRlZmluZWQoSkVNQUxMT0NfSEFWRV9NRU1DTlRMKQorCWluaXRf c3lzdGVtX3RocF9tb2RlID0gdGhwX21vZGVfZGVmYXVsdDsKKwlyZXR1cm47CisjZW5kaWYKK2xh YmVsX2Vycm9yOgorCW9wdF90aHAgPSBpbml0X3N5c3RlbV90aHBfbW9kZSA9IHRocF9tb2RlX25v dF9zdXBwb3J0ZWQ7Cit9CisKK2Jvb2wKK3BhZ2VzX2Jvb3Qodm9pZCkgeworCW9zX3BhZ2UgPSBv c19wYWdlX2RldGVjdCgpOworCWlmIChvc19wYWdlID4gUEFHRSkgeworCQltYWxsb2Nfd3JpdGUo IjxqZW1hbGxvYz46IFVuc3VwcG9ydGVkIHN5c3RlbSBwYWdlIHNpemVcbiIpOworCQlpZiAob3B0 X2Fib3J0KSB7CisJCQlhYm9ydCgpOworCQl9CisJCXJldHVybiB0cnVlOworCX0KKworI2lmZGVm IEpFTUFMTE9DX1BVUkdFX01BRFZJU0VfRE9OVE5FRURfWkVST1MKKwlpZiAoIW9wdF90cnVzdF9t YWR2aXNlKSB7CisJCW1hZHZpc2VfZG9udF9uZWVkX3plcm9zX2lzX2ZhdWx0eSA9ICFtYWR2aXNl X01BRFZfRE9OVE5FRURfemVyb2VzX3BhZ2VzKCk7CisJCWlmIChtYWR2aXNlX2RvbnRfbmVlZF96 ZXJvc19pc19mYXVsdHkpIHsKKwkJCW1hbGxvY193cml0ZSgiPGplbWFsbG9jPjogTUFEVl9ET05U TkVFRCBkb2VzIG5vdCB3b3JrIChtZW1zZXQgd2lsbCBiZSB1c2VkIGluc3RlYWQpXG4iKTsKKwkJ CW1hbGxvY193cml0ZSgiPGplbWFsbG9jPjogKFRoaXMgaXMgdGhlIGV4cGVjdGVkIGJlaGF2aW91 ciBpZiB5b3UgYXJlIHJ1bm5pbmcgdW5kZXIgUUVNVSlcbiIpOworCQl9CisJfSBlbHNlIHsKKwkJ LyogSW4gY2FzZSBvcHRfdHJ1c3RfbWFkdmlzZSBpcyBkaXNhYmxlLAorCQkgKiBkbyBub3QgZG8g cnVudGltZSBjaGVjayAqLworCQltYWR2aXNlX2RvbnRfbmVlZF96ZXJvc19pc19mYXVsdHkgPSAw OworCX0KKyNlbmRpZgorCisjaWZuZGVmIF9XSU4zMgorCW1tYXBfZmxhZ3MgPSBNQVBfUFJJVkFU RSB8IE1BUF9BTk9OOworI2VuZGlmCisKKyNpZmRlZiBKRU1BTExPQ19TWVNDVExfVk1fT1ZFUkNP TU1JVAorCW9zX292ZXJjb21taXRzID0gb3Nfb3ZlcmNvbW1pdHNfc3lzY3RsKCk7CisjZWxpZiBk ZWZpbmVkKEpFTUFMTE9DX1BST0NfU1lTX1ZNX09WRVJDT01NSVRfTUVNT1JZKQorCW9zX292ZXJj b21taXRzID0gb3Nfb3ZlcmNvbW1pdHNfcHJvYygpOworIyAgaWZkZWYgTUFQX05PUkVTRVJWRQor CWlmIChvc19vdmVyY29tbWl0cykgeworCQltbWFwX2ZsYWdzIHw9IE1BUF9OT1JFU0VSVkU7CisJ fQorIyAgZW5kaWYKKyNlbGlmIGRlZmluZWQoX19OZXRCU0RfXykKKwlvc19vdmVyY29tbWl0cyA9 IHRydWU7CisjZWxzZQorCW9zX292ZXJjb21taXRzID0gZmFsc2U7CisjZW5kaWYKKworCWluaXRf dGhwX3N0YXRlKCk7CisKKyNpZmRlZiBfX0ZyZWVCU0RfXworCS8qCisJICogRnJlZUJTRCBkb2Vz bid0IG5lZWQgdGhlIGNoZWNrOyBtYWR2aXNlKDIpIGlzIGtub3duIHRvIHdvcmsuCisJICovCisj ZWxzZQorCS8qIERldGVjdCBsYXp5IHB1cmdlIHJ1bnRpbWUgc3VwcG9ydC4gKi8KKwlpZiAocGFn ZXNfY2FuX3B1cmdlX2xhenkpIHsKKwkJYm9vbCBjb21taXR0ZWQgPSBmYWxzZTsKKwkJdm9pZCAq bWFkdl9mcmVlX3BhZ2UgPSBvc19wYWdlc19tYXAoTlVMTCwgUEFHRSwgUEFHRSwgJmNvbW1pdHRl ZCk7CisJCWlmIChtYWR2X2ZyZWVfcGFnZSA9PSBOVUxMKSB7CisJCQlyZXR1cm4gdHJ1ZTsKKwkJ fQorCQlhc3NlcnQocGFnZXNfY2FuX3B1cmdlX2xhenlfcnVudGltZSk7CisJCWlmIChwYWdlc19w dXJnZV9sYXp5KG1hZHZfZnJlZV9wYWdlLCBQQUdFKSkgeworCQkJcGFnZXNfY2FuX3B1cmdlX2xh enlfcnVudGltZSA9IGZhbHNlOworCQl9CisJCW9zX3BhZ2VzX3VubWFwKG1hZHZfZnJlZV9wYWdl LCBQQUdFKTsKKwl9CisjZW5kaWYKKworCXJldHVybiBmYWxzZTsKK30KCmRpZmYgLS1naXQgYS8z ODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9zcmMvcGFpLmMgYi8zODktZHMt YmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9zcmMvcGFpLmMKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMC4uNDVjODc3MgotLS0gL2Rldi9udWxsCisrKyBiLzM4OS1kcy1i YXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3NyYy9wYWkuYwpAQCAtMCwwICsxLDMxIEBA CisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvamVtYWxsb2NfcHJlYW1ibGUuaCIKKyNpbmNs dWRlICJqZW1hbGxvYy9pbnRlcm5hbC9qZW1hbGxvY19pbnRlcm5hbF9pbmNsdWRlcy5oIgorCitz aXplX3QKK3BhaV9hbGxvY19iYXRjaF9kZWZhdWx0KHRzZG5fdCAqdHNkbiwgcGFpX3QgKnNlbGYs IHNpemVfdCBzaXplLCBzaXplX3QgbmFsbG9jcywKKyAgICBlZGF0YV9saXN0X2FjdGl2ZV90ICpy ZXN1bHRzLCBib29sICpkZWZlcnJlZF93b3JrX2dlbmVyYXRlZCkgeworCWZvciAoc2l6ZV90IGkg PSAwOyBpIDwgbmFsbG9jczsgaSsrKSB7CisJCWJvb2wgZGVmZXJyZWRfYnlfYWxsb2MgPSBmYWxz ZTsKKwkJZWRhdGFfdCAqZWRhdGEgPSBwYWlfYWxsb2ModHNkbiwgc2VsZiwgc2l6ZSwgUEFHRSwK KwkJICAgIC8qIHplcm8gKi8gZmFsc2UsIC8qIGd1YXJkZWQgKi8gZmFsc2UsCisJCSAgICAvKiBm cmVxdWVudF9yZXVzZSAqLyBmYWxzZSwgJmRlZmVycmVkX2J5X2FsbG9jKTsKKwkJKmRlZmVycmVk X3dvcmtfZ2VuZXJhdGVkIHw9IGRlZmVycmVkX2J5X2FsbG9jOworCQlpZiAoZWRhdGEgPT0gTlVM TCkgeworCQkJcmV0dXJuIGk7CisJCX0KKwkJZWRhdGFfbGlzdF9hY3RpdmVfYXBwZW5kKHJlc3Vs dHMsIGVkYXRhKTsKKwl9CisJcmV0dXJuIG5hbGxvY3M7Cit9CisKK3ZvaWQKK3BhaV9kYWxsb2Nf YmF0Y2hfZGVmYXVsdCh0c2RuX3QgKnRzZG4sIHBhaV90ICpzZWxmLAorICAgIGVkYXRhX2xpc3Rf YWN0aXZlX3QgKmxpc3QsIGJvb2wgKmRlZmVycmVkX3dvcmtfZ2VuZXJhdGVkKSB7CisJZWRhdGFf dCAqZWRhdGE7CisJd2hpbGUgKChlZGF0YSA9IGVkYXRhX2xpc3RfYWN0aXZlX2ZpcnN0KGxpc3Qp KSAhPSBOVUxMKSB7CisJCWJvb2wgZGVmZXJyZWRfYnlfZGFsbG9jID0gZmFsc2U7CisJCWVkYXRh X2xpc3RfYWN0aXZlX3JlbW92ZShsaXN0LCBlZGF0YSk7CisJCXBhaV9kYWxsb2ModHNkbiwgc2Vs ZiwgZWRhdGEsICZkZWZlcnJlZF9ieV9kYWxsb2MpOworCQkqZGVmZXJyZWRfd29ya19nZW5lcmF0 ZWQgfD0gZGVmZXJyZWRfYnlfZGFsbG9jOworCX0KK30KCmRpZmYgLS1naXQgYS8zODktZHMtYmFz ZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9zcmMvcGVha19ldmVudC5jIGIvMzg5LWRzLWJh c2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvc3JjL3BlYWtfZXZlbnQuYwpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDkzZmJjCi0tLSAvZGV2L251bGwKKysrIGIvMzg5 LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvc3JjL3BlYWtfZXZlbnQuYwpAQCAt MCwwICsxLDgyIEBACisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvamVtYWxsb2NfcHJlYW1i bGUuaCIKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9qZW1hbGxvY19pbnRlcm5hbF9pbmNs dWRlcy5oIgorCisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvcGVha19ldmVudC5oIgorCisj aW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvYWN0aXZpdHlfY2FsbGJhY2suaCIKKyNpbmNsdWRl ICJqZW1hbGxvYy9pbnRlcm5hbC9wZWFrLmgiCisKKy8qCisgKiBVcGRhdGUgZXZlcnkgNjRLIGJ5 IGRlZmF1bHQuICBXZSdyZSBub3QgZXhwb3NpbmcgdGhpcyBhcyBhIGNvbmZpZ3VyYXRpb24KKyAq IG9wdGlvbiBmb3Igbm93OyB3ZSBkb24ndCB3YW50IHRvIGJpbmQgb3Vyc2VsdmVzIHRvbyB0aWdo dGx5IHRvIGFueSBwYXJ0aWN1bGFyCisgKiBwZXJmb3JtYW5jZSByZXF1aXJlbWVudHMgZm9yIHNt YWxsIHZhbHVlcywgb3IgZ3VhcmFudGVlIHRoYXQgd2UnbGwgZXZlbiBiZQorICogYWJsZSB0byBw cm92aWRlIGZpbmUtZ3JhaW5lZCBhY2N1cmFjeS4KKyAqLworI2RlZmluZSBQRUFLX0VWRU5UX1dB SVQgKDY0ICogMTAyNCkKKworLyogVXBkYXRlIHRoZSBwZWFrIHdpdGggY3VycmVudCB0c2Qgc3Rh dGUuICovCit2b2lkCitwZWFrX2V2ZW50X3VwZGF0ZSh0c2RfdCAqdHNkKSB7CisJdWludDY0X3Qg YWxsb2MgPSB0c2RfdGhyZWFkX2FsbG9jYXRlZF9nZXQodHNkKTsKKwl1aW50NjRfdCBkYWxsb2Mg PSB0c2RfdGhyZWFkX2RlYWxsb2NhdGVkX2dldCh0c2QpOworCXBlYWtfdCAqcGVhayA9IHRzZF9w ZWFrcF9nZXQodHNkKTsKKwlwZWFrX3VwZGF0ZShwZWFrLCBhbGxvYywgZGFsbG9jKTsKK30KKwor c3RhdGljIHZvaWQKK3BlYWtfZXZlbnRfYWN0aXZpdHlfY2FsbGJhY2sodHNkX3QgKnRzZCkgewor CWFjdGl2aXR5X2NhbGxiYWNrX3RodW5rX3QgKnRodW5rID0gdHNkX2FjdGl2aXR5X2NhbGxiYWNr X3RodW5rcF9nZXQoCisJICAgIHRzZCk7CisJdWludDY0X3QgYWxsb2MgPSB0c2RfdGhyZWFkX2Fs bG9jYXRlZF9nZXQodHNkKTsKKwl1aW50NjRfdCBkYWxsb2MgPSB0c2RfdGhyZWFkX2RlYWxsb2Nh dGVkX2dldCh0c2QpOworCWlmICh0aHVuay0+Y2FsbGJhY2sgIT0gTlVMTCkgeworCQl0aHVuay0+ Y2FsbGJhY2sodGh1bmstPnVjdHgsIGFsbG9jLCBkYWxsb2MpOworCX0KK30KKworLyogU2V0IGN1 cnJlbnQgc3RhdGUgdG8gemVyby4gKi8KK3ZvaWQKK3BlYWtfZXZlbnRfemVybyh0c2RfdCAqdHNk KSB7CisJdWludDY0X3QgYWxsb2MgPSB0c2RfdGhyZWFkX2FsbG9jYXRlZF9nZXQodHNkKTsKKwl1 aW50NjRfdCBkYWxsb2MgPSB0c2RfdGhyZWFkX2RlYWxsb2NhdGVkX2dldCh0c2QpOworCXBlYWtf dCAqcGVhayA9IHRzZF9wZWFrcF9nZXQodHNkKTsKKwlwZWFrX3NldF96ZXJvKHBlYWssIGFsbG9j LCBkYWxsb2MpOworfQorCit1aW50NjRfdAorcGVha19ldmVudF9tYXgodHNkX3QgKnRzZCkgewor CXBlYWtfdCAqcGVhayA9IHRzZF9wZWFrcF9nZXQodHNkKTsKKwlyZXR1cm4gcGVha19tYXgocGVh ayk7Cit9CisKK3VpbnQ2NF90CitwZWFrX2FsbG9jX25ld19ldmVudF93YWl0KHRzZF90ICp0c2Qp IHsKKwlyZXR1cm4gUEVBS19FVkVOVF9XQUlUOworfQorCit1aW50NjRfdAorcGVha19hbGxvY19w b3N0cG9uZWRfZXZlbnRfd2FpdCh0c2RfdCAqdHNkKSB7CisJcmV0dXJuIFRFX01JTl9TVEFSVF9X QUlUOworfQorCit2b2lkCitwZWFrX2FsbG9jX2V2ZW50X2hhbmRsZXIodHNkX3QgKnRzZCwgdWlu dDY0X3QgZWxhcHNlZCkgeworCXBlYWtfZXZlbnRfdXBkYXRlKHRzZCk7CisJcGVha19ldmVudF9h Y3Rpdml0eV9jYWxsYmFjayh0c2QpOworfQorCit1aW50NjRfdAorcGVha19kYWxsb2NfbmV3X2V2 ZW50X3dhaXQodHNkX3QgKnRzZCkgeworCXJldHVybiBQRUFLX0VWRU5UX1dBSVQ7Cit9CisKK3Vp bnQ2NF90CitwZWFrX2RhbGxvY19wb3N0cG9uZWRfZXZlbnRfd2FpdCh0c2RfdCAqdHNkKSB7CisJ cmV0dXJuIFRFX01JTl9TVEFSVF9XQUlUOworfQorCit2b2lkCitwZWFrX2RhbGxvY19ldmVudF9o YW5kbGVyKHRzZF90ICp0c2QsIHVpbnQ2NF90IGVsYXBzZWQpIHsKKwlwZWFrX2V2ZW50X3VwZGF0 ZSh0c2QpOworCXBlYWtfZXZlbnRfYWN0aXZpdHlfY2FsbGJhY2sodHNkKTsKK30KCmRpZmYgLS1n aXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9zcmMvcHJvZi5jIGIv Mzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvc3JjL3Byb2YuYwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTZkNWQ1Ci0tLSAvZGV2L251bGwKKysrIGIv Mzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvc3JjL3Byb2YuYwpAQCAtMCww ICsxLDc4OSBAQAorI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2plbWFsbG9jX3ByZWFtYmxl LmgiCisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvamVtYWxsb2NfaW50ZXJuYWxfaW5jbHVk ZXMuaCIKKworI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2N0bC5oIgorI2luY2x1ZGUgImpl bWFsbG9jL2ludGVybmFsL2Fzc2VydC5oIgorI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL211 dGV4LmgiCisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvY291bnRlci5oIgorI2luY2x1ZGUg ImplbWFsbG9jL2ludGVybmFsL3Byb2ZfZGF0YS5oIgorI2luY2x1ZGUgImplbWFsbG9jL2ludGVy bmFsL3Byb2ZfbG9nLmgiCisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvcHJvZl9yZWNlbnQu aCIKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9wcm9mX3N0YXRzLmgiCisjaW5jbHVkZSAi amVtYWxsb2MvaW50ZXJuYWwvcHJvZl9zeXMuaCIKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5h bC9wcm9mX2hvb2suaCIKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC90aHJlYWRfZXZlbnQu aCIKKworLyoKKyAqIFRoaXMgZmlsZSBpbXBsZW1lbnRzIHRoZSBwcm9maWxpbmcgIkFQSXMiIG5l ZWRlZCBieSBvdGhlciBwYXJ0cyBvZiBqZW1hbGxvYywKKyAqIGFuZCBhbHNvIG1hbmFnZXMgdGhl IHJlbGV2YW50ICJvcGVyYXRpb25hbCIgZGF0YSwgbWFpbmx5IG9wdGlvbnMgYW5kIG11dGV4ZXM7 CisgKiB0aGUgY29yZSBwcm9maWxpbmcgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBlbmNhcHN1bGF0ZWQg aW4gcHJvZl9kYXRhLmMuCisgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogRGF0 YS4gKi8KKworYm9vbCBvcHRfcHJvZiA9IGZhbHNlOworYm9vbCBvcHRfcHJvZl9hY3RpdmUgPSB0 cnVlOworYm9vbCBvcHRfcHJvZl90aHJlYWRfYWN0aXZlX2luaXQgPSB0cnVlOworc2l6ZV90IG9w dF9sZ19wcm9mX3NhbXBsZSA9IExHX1BST0ZfU0FNUExFX0RFRkFVTFQ7Citzc2l6ZV90IG9wdF9s Z19wcm9mX2ludGVydmFsID0gTEdfUFJPRl9JTlRFUlZBTF9ERUZBVUxUOworYm9vbCBvcHRfcHJv Zl9nZHVtcCA9IGZhbHNlOworYm9vbCBvcHRfcHJvZl9maW5hbCA9IGZhbHNlOworYm9vbCBvcHRf cHJvZl9sZWFrID0gZmFsc2U7Citib29sIG9wdF9wcm9mX2xlYWtfZXJyb3IgPSBmYWxzZTsKK2Jv b2wgb3B0X3Byb2ZfYWNjdW0gPSBmYWxzZTsKK2NoYXIgb3B0X3Byb2ZfcHJlZml4W1BST0ZfRFVN UF9GSUxFTkFNRV9MRU5dOworYm9vbCBvcHRfcHJvZl9zeXNfdGhyZWFkX25hbWUgPSBmYWxzZTsK K2Jvb2wgb3B0X3Byb2ZfdW5iaWFzID0gdHJ1ZTsKKworLyogQWNjZXNzZWQgdmlhIHByb2Zfc2Ft cGxlX2V2ZW50X2hhbmRsZXIoKS4gKi8KK3N0YXRpYyBjb3VudGVyX2FjY3VtX3QgcHJvZl9pZHVt cF9hY2N1bXVsYXRlZDsKKworLyoKKyAqIEluaXRpYWxpemVkIGFzIG9wdF9wcm9mX2FjdGl2ZSwg YW5kIGFjY2Vzc2VkIHZpYQorICogcHJvZl9hY3RpdmVfW2dzXWV0e191bmxvY2tlZCx9KCkuCisg Ki8KK2Jvb2wgcHJvZl9hY3RpdmVfc3RhdGU7CitzdGF0aWMgbWFsbG9jX211dGV4X3QgcHJvZl9h Y3RpdmVfbXR4OworCisvKgorICogSW5pdGlhbGl6ZWQgYXMgb3B0X3Byb2ZfdGhyZWFkX2FjdGl2 ZV9pbml0LCBhbmQgYWNjZXNzZWQgdmlhCisgKiBwcm9mX3RocmVhZF9hY3RpdmVfaW5pdF9bZ3Nd ZXQoKS4KKyAqLworc3RhdGljIGJvb2wgcHJvZl90aHJlYWRfYWN0aXZlX2luaXQ7CitzdGF0aWMg bWFsbG9jX211dGV4X3QgcHJvZl90aHJlYWRfYWN0aXZlX2luaXRfbXR4OworCisvKgorICogSW5p dGlhbGl6ZWQgYXMgb3B0X3Byb2ZfZ2R1bXAsIGFuZCBhY2Nlc3NlZCB2aWEKKyAqIHByb2ZfZ2R1 bXBfW2dzXWV0e191bmxvY2tlZCx9KCkuCisgKi8KK2Jvb2wgcHJvZl9nZHVtcF92YWw7CitzdGF0 aWMgbWFsbG9jX211dGV4X3QgcHJvZl9nZHVtcF9tdHg7CisKK3VpbnQ2NF90IHByb2ZfaW50ZXJ2 YWwgPSAwOworCitzaXplX3QgbGdfcHJvZl9zYW1wbGU7CisKK3N0YXRpYyB1aW50NjRfdCBuZXh0 X3Rocl91aWQ7CitzdGF0aWMgbWFsbG9jX211dGV4X3QgbmV4dF90aHJfdWlkX210eDsKKworLyog RG8gbm90IGR1bXAgYW55IHByb2ZpbGVzIHVudGlsIGJvb3RzdHJhcHBpbmcgaXMgY29tcGxldGUu ICovCitib29sIHByb2ZfYm9vdGVkID0gZmFsc2U7CisKKy8qIExvZ2ljYWxseSBhIHByb2ZfYmFj a3RyYWNlX2hvb2tfdC4gKi8KK2F0b21pY19wX3QgcHJvZl9iYWNrdHJhY2VfaG9vazsKKworLyog TG9naWNhbGx5IGEgcHJvZl9kdW1wX2hvb2tfdC4gKi8KK2F0b21pY19wX3QgcHJvZl9kdW1wX2hv b2s7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3ZvaWQKK3Byb2ZfYWxsb2Nfcm9sbGJh Y2sodHNkX3QgKnRzZCwgcHJvZl90Y3R4X3QgKnRjdHgpIHsKKwljYXNzZXJ0KGNvbmZpZ19wcm9m KTsKKworCWlmICh0c2RfcmVlbnRyYW5jeV9sZXZlbF9nZXQodHNkKSA+IDApIHsKKwkJYXNzZXJ0 KCh1aW50cHRyX3QpdGN0eCA9PSAodWludHB0cl90KTFVKTsKKwkJcmV0dXJuOworCX0KKworCWlm ICgodWludHB0cl90KXRjdHggPiAodWludHB0cl90KTFVKSB7CisJCW1hbGxvY19tdXRleF9sb2Nr KHRzZF90c2RuKHRzZCksIHRjdHgtPnRkYXRhLT5sb2NrKTsKKwkJdGN0eC0+cHJlcGFyZWQgPSBm YWxzZTsKKwkJcHJvZl90Y3R4X3RyeV9kZXN0cm95KHRzZCwgdGN0eCk7CisJfQorfQorCit2b2lk Citwcm9mX21hbGxvY19zYW1wbGVfb2JqZWN0KHRzZF90ICp0c2QsIGNvbnN0IHZvaWQgKnB0ciwg c2l6ZV90IHNpemUsCisgICAgc2l6ZV90IHVzaXplLCBwcm9mX3RjdHhfdCAqdGN0eCkgeworCWNh c3NlcnQoY29uZmlnX3Byb2YpOworCisJaWYgKG9wdF9wcm9mX3N5c190aHJlYWRfbmFtZSkgewor CQlwcm9mX3N5c190aHJlYWRfbmFtZV9mZXRjaCh0c2QpOworCX0KKworCWVkYXRhX3QgKmVkYXRh ID0gZW1hcF9lZGF0YV9sb29rdXAodHNkX3RzZG4odHNkKSwgJmFyZW5hX2VtYXBfZ2xvYmFsLAor CSAgICBwdHIpOworCXByb2ZfaW5mb19zZXQodHNkLCBlZGF0YSwgdGN0eCwgc2l6ZSk7CisKKwlz emluZF90IHN6aW5kID0gc3pfc2l6ZTJpbmRleCh1c2l6ZSk7CisKKwltYWxsb2NfbXV0ZXhfbG9j ayh0c2RfdHNkbih0c2QpLCB0Y3R4LT50ZGF0YS0+bG9jayk7CisJLyoKKwkgKiBXZSBuZWVkIHRv IGRvIHRoZXNlIG1hcCBsb29rdXBzIHdoaWxlIGhvbGRpbmcgdGhlIGxvY2ssIHRvIGF2b2lkIHRo ZQorCSAqIHBvc3NpYmlsaXR5IG9mIHJhY2VzIHdpdGggcHJvZl9yZXNldCBjYWxscywgd2hpY2gg dXBkYXRlIHRoZSBtYXAgYW5kCisJICogdGhlbiBhY3F1aXJlIHRoZSBsb2NrLiAgVGhpcyBhY3R1 YWxseSBzdGlsbCBsZWF2ZXMgYSBkYXRhIHJhY2Ugb24gdGhlCisJICogY29udGVudHMgb2YgdGhl IHVuYmlhcyBtYXAsIGJ1dCB3ZSBoYXZlIG5vdCB5ZXQgZ29uZSB0aHJvdWdoIGFuZAorCSAqIGF0 b21pYy1pZmllZCB0aGUgcHJvZiBtb2R1bGUsIGFuZCBjb21waWxlcnMgYXJlIG5vdCB5ZXQgY2F1 c2luZyB1cworCSAqIGlzc3Vlcy4gIFRoZSBrZXkgdGhpbmcgaXMgdG8gbWFrZSBzdXJlIHRoYXQs IGlmIHdlIHJlYWQgZ2FyYmFnZSBkYXRhLAorCSAqIHRoZSBwcm9mX3Jlc2V0IGNhbGwgaXMgYWJv dXQgdG8gbWFyayBvdXIgdGN0eCBhcyBleHBpcmVkIGJlZm9yZSBhbnkKKwkgKiBkdW1waW5nIG9m IG91ciBjb3JydXB0ZWQgb3V0cHV0IGlzIGF0dGVtcHRlZC4KKwkgKi8KKwlzaXplX3Qgc2hpZnRl ZF91bmJpYXNlZF9jbnQgPSBwcm9mX3NoaWZ0ZWRfdW5iaWFzZWRfY250W3N6aW5kXTsKKwlzaXpl X3QgdW5iaWFzZWRfYnl0ZXMgPSBwcm9mX3VuYmlhc2VkX3N6W3N6aW5kXTsKKwl0Y3R4LT5jbnRz LmN1cm9ianMrKzsKKwl0Y3R4LT5jbnRzLmN1cm9ianNfc2hpZnRlZF91bmJpYXNlZCArPSBzaGlm dGVkX3VuYmlhc2VkX2NudDsKKwl0Y3R4LT5jbnRzLmN1cmJ5dGVzICs9IHVzaXplOworCXRjdHgt PmNudHMuY3VyYnl0ZXNfdW5iaWFzZWQgKz0gdW5iaWFzZWRfYnl0ZXM7CisJaWYgKG9wdF9wcm9m X2FjY3VtKSB7CisJCXRjdHgtPmNudHMuYWNjdW1vYmpzKys7CisJCXRjdHgtPmNudHMuYWNjdW1v YmpzX3NoaWZ0ZWRfdW5iaWFzZWQgKz0gc2hpZnRlZF91bmJpYXNlZF9jbnQ7CisJCXRjdHgtPmNu dHMuYWNjdW1ieXRlcyArPSB1c2l6ZTsKKwkJdGN0eC0+Y250cy5hY2N1bWJ5dGVzX3VuYmlhc2Vk ICs9IHVuYmlhc2VkX2J5dGVzOworCX0KKwlib29sIHJlY29yZF9yZWNlbnQgPSBwcm9mX3JlY2Vu dF9hbGxvY19wcmVwYXJlKHRzZCwgdGN0eCk7CisJdGN0eC0+cHJlcGFyZWQgPSBmYWxzZTsKKwlt YWxsb2NfbXV0ZXhfdW5sb2NrKHRzZF90c2RuKHRzZCksIHRjdHgtPnRkYXRhLT5sb2NrKTsKKwlp ZiAocmVjb3JkX3JlY2VudCkgeworCQlhc3NlcnQodGN0eCA9PSBlZGF0YV9wcm9mX3RjdHhfZ2V0 KGVkYXRhKSk7CisJCXByb2ZfcmVjZW50X2FsbG9jKHRzZCwgZWRhdGEsIHNpemUsIHVzaXplKTsK Kwl9CisKKwlpZiAob3B0X3Byb2Zfc3RhdHMpIHsKKwkJcHJvZl9zdGF0c19pbmModHNkLCBzemlu ZCwgc2l6ZSk7CisJfQorfQorCit2b2lkCitwcm9mX2ZyZWVfc2FtcGxlZF9vYmplY3QodHNkX3Qg KnRzZCwgc2l6ZV90IHVzaXplLCBwcm9mX2luZm9fdCAqcHJvZl9pbmZvKSB7CisJY2Fzc2VydChj b25maWdfcHJvZik7CisKKwlhc3NlcnQocHJvZl9pbmZvICE9IE5VTEwpOworCXByb2ZfdGN0eF90 ICp0Y3R4ID0gcHJvZl9pbmZvLT5hbGxvY190Y3R4OworCWFzc2VydCgodWludHB0cl90KXRjdHgg PiAodWludHB0cl90KTFVKTsKKworCXN6aW5kX3Qgc3ppbmQgPSBzel9zaXplMmluZGV4KHVzaXpl KTsKKwltYWxsb2NfbXV0ZXhfbG9jayh0c2RfdHNkbih0c2QpLCB0Y3R4LT50ZGF0YS0+bG9jayk7 CisKKwlhc3NlcnQodGN0eC0+Y250cy5jdXJvYmpzID4gMCk7CisJYXNzZXJ0KHRjdHgtPmNudHMu Y3VyYnl0ZXMgPj0gdXNpemUpOworCS8qCisJICogSXQncyBub3QgY29ycmVjdCB0byBkbyBlcXVp dmFsZW50IGFzc2VydHMgZm9yIHVuYmlhc2VkIGJ5dGVzLCBiZWNhdXNlCisJICogb2YgdGhlIHBv dGVudGlhbCBmb3IgcmFjZXMgd2l0aCBwcm9mLnJlc2V0IGNhbGxzLiAgVGhlIG1hcCBjb250ZW50 cworCSAqIHNob3VsZCByZWFsbHkgYmUgYXRvbWljLCBidXQgd2UgaGF2ZSBub3QgYXRvbWljLWlm aWVkIHRoZSBwcm9mIG1vZHVsZQorCSAqIHlldC4KKwkgKi8KKwl0Y3R4LT5jbnRzLmN1cm9ianMt LTsKKwl0Y3R4LT5jbnRzLmN1cm9ianNfc2hpZnRlZF91bmJpYXNlZCAtPSBwcm9mX3NoaWZ0ZWRf dW5iaWFzZWRfY250W3N6aW5kXTsKKwl0Y3R4LT5jbnRzLmN1cmJ5dGVzIC09IHVzaXplOworCXRj dHgtPmNudHMuY3VyYnl0ZXNfdW5iaWFzZWQgLT0gcHJvZl91bmJpYXNlZF9zeltzemluZF07CisK Kwlwcm9mX3RyeV9sb2codHNkLCB1c2l6ZSwgcHJvZl9pbmZvKTsKKworCXByb2ZfdGN0eF90cnlf ZGVzdHJveSh0c2QsIHRjdHgpOworCisJaWYgKG9wdF9wcm9mX3N0YXRzKSB7CisJCXByb2Zfc3Rh dHNfZGVjKHRzZCwgc3ppbmQsIHByb2ZfaW5mby0+YWxsb2Nfc2l6ZSk7CisJfQorfQorCitwcm9m X3RjdHhfdCAqCitwcm9mX3RjdHhfY3JlYXRlKHRzZF90ICp0c2QpIHsKKwlpZiAoIXRzZF9ub21p bmFsKHRzZCkgfHwgdHNkX3JlZW50cmFuY3lfbGV2ZWxfZ2V0KHRzZCkgPiAwKSB7CisJCXJldHVy biBOVUxMOworCX0KKworCXByb2ZfdGRhdGFfdCAqdGRhdGEgPSBwcm9mX3RkYXRhX2dldCh0c2Qs IHRydWUpOworCWlmICh0ZGF0YSA9PSBOVUxMKSB7CisJCXJldHVybiBOVUxMOworCX0KKworCXBy b2ZfYnRfdCBidDsKKwlidF9pbml0KCZidCwgdGRhdGEtPnZlYyk7CisJcHJvZl9iYWNrdHJhY2Uo dHNkLCAmYnQpOworCXJldHVybiBwcm9mX2xvb2t1cCh0c2QsICZidCk7Cit9CisKKy8qCisgKiBU aGUgYm9kaWVzIG9mIHRoaXMgZnVuY3Rpb24gYW5kIHByb2ZfbGVha2NoZWNrKCkgYXJlIGNvbXBp bGVkIG91dCB1bmxlc3MgaGVhcAorICogcHJvZmlsaW5nIGlzIGVuYWJsZWQsIHNvIHRoYXQgaXQg aXMgcG9zc2libGUgdG8gY29tcGlsZSBqZW1hbGxvYyB3aXRoCisgKiBmbG9hdGluZyBwb2ludCBz dXBwb3J0IGNvbXBsZXRlbHkgZGlzYWJsZWQuICBBdm9pZGluZyBmbG9hdGluZyBwb2ludCBjb2Rl IGlzCisgKiBpbXBvcnRhbnQgb24gbWVtb3J5LWNvbnN0cmFpbmVkIHN5c3RlbXMsIGJ1dCBpdCBh bHNvIGVuYWJsZXMgYSB3b3JrYXJvdW5kIGZvcgorICogdmVyc2lvbnMgb2YgZ2xpYmMgdGhhdCBk b24ndCBwcm9wZXJseSBzYXZlL3Jlc3RvcmUgZmxvYXRpbmcgcG9pbnQgcmVnaXN0ZXJzCisgKiBk dXJpbmcgZHluYW1pYyBsYXp5IHN5bWJvbCBsb2FkaW5nICh3aGljaCBpbnRlcm5hbGx5IGNhbGxz IGludG8gd2hhdGV2ZXIKKyAqIG1hbGxvYyBpbXBsZW1lbnRhdGlvbiBoYXBwZW5zIHRvIGJlIGlu dGVncmF0ZWQgaW50byB0aGUgYXBwbGljYXRpb24pLiAgTm90ZQorICogdGhhdCBzb21lIGNvbXBp bGVycyAoZS5nLiAgZ2NjIDQuOCkgbWF5IHVzZSBmbG9hdGluZyBwb2ludCByZWdpc3RlcnMgZm9y IGZhc3QKKyAqIG1lbW9yeSBtb3Zlcywgc28gamVtYWxsb2MgbXVzdCBiZSBjb21waWxlZCB3aXRo IHN1Y2ggb3B0aW1pemF0aW9ucyBkaXNhYmxlZAorICogKGUuZy4KKyAqIC1tbm8tc3NlKSBpbiBv cmRlciBmb3IgdGhlIHdvcmthcm91bmQgdG8gYmUgY29tcGxldGUuCisgKi8KK3VpbnQ2NF90Citw cm9mX3NhbXBsZV9uZXdfZXZlbnRfd2FpdCh0c2RfdCAqdHNkKSB7CisjaWZkZWYgSkVNQUxMT0Nf UFJPRgorCWlmIChsZ19wcm9mX3NhbXBsZSA9PSAwKSB7CisJCXJldHVybiBURV9NSU5fU1RBUlRf V0FJVDsKKwl9CisKKwkvKgorCSAqIENvbXB1dGUgc2FtcGxlIGludGVydmFsIGFzIGEgZ2VvbWV0 cmljYWxseSBkaXN0cmlidXRlZCByYW5kb20KKwkgKiB2YXJpYWJsZSB3aXRoIG1lYW4gKDJebGdf cHJvZl9zYW1wbGUpLgorCSAqCisJICogICAgICAgICAgICAgICAgICAgICAgX18gICAgICAgIF9f CisJICogICAgICAgICAgICAgICAgICAgICAgfCAgbG9nKHUpICB8ICAgICAgICAgICAgICAgICAg ICAgMQorCSAqIGJ5dGVzX3VudGlsX3NhbXBsZSA9IHwgLS0tLS0tLS0gfCwgd2hlcmUgcCA9IC0t LS0tLS0tLS0tLS0tLQorCSAqICAgICAgICAgICAgICAgICAgICAgIHwgbG9nKDEtcCkgfCAgICAg ICAgICAgICBsZ19wcm9mX3NhbXBsZQorCSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDIKKwkgKgorCSAqIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBt YXRoLCBzZWU6CisJICoKKwkgKiAgIE5vbi1Vbmlmb3JtIFJhbmRvbSBWYXJpYXRlIEdlbmVyYXRp b24KKwkgKiAgIEx1YyBEZXZyb3llCisJICogICBTcHJpbmdlci1WZXJsYWcsIE5ldyBZb3JrLCAx OTg2CisJICogICBwcCA1MDAKKwkgKiAgIChodHRwOi8vbHVjLmRldnJveWUub3JnL3JuYm9va2lu ZGV4Lmh0bWwpCisJICoKKwkgKiBJbiB0aGUgYWN0dWFsIGNvbXB1dGF0aW9uLCB0aGVyZSdzIGEg bm9uLXplcm8gcHJvYmFiaWxpdHkgdGhhdCBvdXIKKwkgKiBwc2V1ZG8gcmFuZG9tIG51bWJlciBn ZW5lcmF0b3IgZ2VuZXJhdGVzIGFuIGV4YWN0IDAsIGFuZCB0byBhdm9pZAorCSAqIGxvZygwKSwg d2Ugc2V0IHUgdG8gMS4wIGluIGNhc2UgciBpcyAwLiAgVGhlcmVmb3JlIHUgZWZmZWN0aXZlbHkg aXMKKwkgKiB1bmlmb3JtbHkgZGlzdHJpYnV0ZWQgaW4gKDAsIDFdIGluc3RlYWQgb2YgWzAsIDEp LiAgRnVydGhlciwgcmF0aGVyCisJICogdGhhbiB0YWtpbmcgdGhlIGNlaWxpbmcsIHdlIHRha2Ug dGhlIGZsb29yIGFuZCB0aGVuIGFkZCAxLCBzaW5jZQorCSAqIG90aGVyd2lzZSBieXRlc191bnRp bF9zYW1wbGUgd291bGQgYmUgMCBpZiB1IGlzIGV4YWN0bHkgMS4wLgorCSAqLworCXVpbnQ2NF90 IHIgPSBwcm5nX2xnX3JhbmdlX3U2NCh0c2RfcHJuZ19zdGF0ZXBfZ2V0KHRzZCksIDUzKTsKKwlk b3VibGUgdSA9IChyID09IDBVKSA/IDEuMCA6IChkb3VibGUpciAqICgxLjAvOTAwNzE5OTI1NDc0 MDk5Mi4wTCk7CisJcmV0dXJuICh1aW50NjRfdCkobG9nKHUpIC8KKwkgICAgbG9nKDEuMCAtICgx LjAgLyAoZG91YmxlKSgodWludDY0X3QpMVUgPDwgbGdfcHJvZl9zYW1wbGUpKSkpCisJICAgICsg KHVpbnQ2NF90KTFVOworI2Vsc2UKKwlub3RfcmVhY2hlZCgpOworCXJldHVybiBURV9NQVhfU1RB UlRfV0FJVDsKKyNlbmRpZgorfQorCit1aW50NjRfdAorcHJvZl9zYW1wbGVfcG9zdHBvbmVkX2V2 ZW50X3dhaXQodHNkX3QgKnRzZCkgeworCS8qCisJICogVGhlIHBvc3Rwb25lZCB3YWl0IHRpbWUg Zm9yIHByb2Ygc2FtcGxlIGV2ZW50IGlzIGNvbXB1dGVkIGFzIGlmIHdlCisJICogd2FudCBhIG5l dyB3YWl0IHRpbWUgKGkuZS4gYXMgaWYgdGhlIGV2ZW50IHdlcmUgdHJpZ2dlcmVkKS4gIElmIHdl CisJICogaW5zdGVhZCBwb3N0cG9uZSB0byB0aGUgaW1tZWRpYXRlIG5leHQgYWxsb2NhdGlvbiwg bGlrZSBob3cgd2UncmUKKwkgKiBoYW5kbGluZyB0aGUgb3RoZXIgZXZlbnRzLCB0aGVuIHdlIGNh biBoYXZlIHNhbXBsaW5nIGJpYXMsIGlmIGUuZy4KKwkgKiB0aGUgYWxsb2NhdGlvbiBpbW1lZGlh dGVseSBmb2xsb3dpbmcgYSByZWVudHJhbmN5IGFsd2F5cyBjb21lcyBmcm9tCisJICogdGhlIHNh bWUgc3RhY2sgdHJhY2UuCisJICovCisJcmV0dXJuIHByb2Zfc2FtcGxlX25ld19ldmVudF93YWl0 KHRzZCk7Cit9CisKK3ZvaWQKK3Byb2Zfc2FtcGxlX2V2ZW50X2hhbmRsZXIodHNkX3QgKnRzZCwg dWludDY0X3QgZWxhcHNlZCkgeworCWNhc3NlcnQoY29uZmlnX3Byb2YpOworCWFzc2VydChlbGFw c2VkID4gMCAmJiBlbGFwc2VkICE9IFRFX0lOVkFMSURfRUxBUFNFRCk7CisJaWYgKHByb2ZfaW50 ZXJ2YWwgPT0gMCB8fCAhcHJvZl9hY3RpdmVfZ2V0X3VubG9ja2VkKCkpIHsKKwkJcmV0dXJuOwor CX0KKwlpZiAoY291bnRlcl9hY2N1bSh0c2RfdHNkbih0c2QpLCAmcHJvZl9pZHVtcF9hY2N1bXVs YXRlZCwgZWxhcHNlZCkpIHsKKwkJcHJvZl9pZHVtcCh0c2RfdHNkbih0c2QpKTsKKwl9Cit9CisK K3N0YXRpYyB2b2lkCitwcm9mX2ZkdW1wKHZvaWQpIHsKKwl0c2RfdCAqdHNkOworCisJY2Fzc2Vy dChjb25maWdfcHJvZik7CisJYXNzZXJ0KG9wdF9wcm9mX2ZpbmFsKTsKKworCWlmICghcHJvZl9i b290ZWQpIHsKKwkJcmV0dXJuOworCX0KKwl0c2QgPSB0c2RfZmV0Y2goKTsKKwlhc3NlcnQodHNk X3JlZW50cmFuY3lfbGV2ZWxfZ2V0KHRzZCkgPT0gMCk7CisKKwlwcm9mX2ZkdW1wX2ltcGwodHNk KTsKK30KKworc3RhdGljIGJvb2wKK3Byb2ZfaWR1bXBfYWNjdW1faW5pdCh2b2lkKSB7CisJY2Fz c2VydChjb25maWdfcHJvZik7CisKKwlyZXR1cm4gY291bnRlcl9hY2N1bV9pbml0KCZwcm9mX2lk dW1wX2FjY3VtdWxhdGVkLCBwcm9mX2ludGVydmFsKTsKK30KKwordm9pZAorcHJvZl9pZHVtcCh0 c2RuX3QgKnRzZG4pIHsKKwl0c2RfdCAqdHNkOworCXByb2ZfdGRhdGFfdCAqdGRhdGE7CisKKwlj YXNzZXJ0KGNvbmZpZ19wcm9mKTsKKworCWlmICghcHJvZl9ib290ZWQgfHwgdHNkbl9udWxsKHRz ZG4pIHx8ICFwcm9mX2FjdGl2ZV9nZXRfdW5sb2NrZWQoKSkgeworCQlyZXR1cm47CisJfQorCXRz ZCA9IHRzZG5fdHNkKHRzZG4pOworCWlmICh0c2RfcmVlbnRyYW5jeV9sZXZlbF9nZXQodHNkKSA+ IDApIHsKKwkJcmV0dXJuOworCX0KKworCXRkYXRhID0gcHJvZl90ZGF0YV9nZXQodHNkLCB0cnVl KTsKKwlpZiAodGRhdGEgPT0gTlVMTCkgeworCQlyZXR1cm47CisJfQorCWlmICh0ZGF0YS0+ZW5x KSB7CisJCXRkYXRhLT5lbnFfaWR1bXAgPSB0cnVlOworCQlyZXR1cm47CisJfQorCisJcHJvZl9p ZHVtcF9pbXBsKHRzZCk7Cit9CisKK2Jvb2wKK3Byb2ZfbWR1bXAodHNkX3QgKnRzZCwgY29uc3Qg Y2hhciAqZmlsZW5hbWUpIHsKKwljYXNzZXJ0KGNvbmZpZ19wcm9mKTsKKwlhc3NlcnQodHNkX3Jl ZW50cmFuY3lfbGV2ZWxfZ2V0KHRzZCkgPT0gMCk7CisKKwlpZiAoIW9wdF9wcm9mIHx8ICFwcm9m X2Jvb3RlZCkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwlyZXR1cm4gcHJvZl9tZHVtcF9pbXBs KHRzZCwgZmlsZW5hbWUpOworfQorCit2b2lkCitwcm9mX2dkdW1wKHRzZG5fdCAqdHNkbikgewor CXRzZF90ICp0c2Q7CisJcHJvZl90ZGF0YV90ICp0ZGF0YTsKKworCWNhc3NlcnQoY29uZmlnX3By b2YpOworCisJaWYgKCFwcm9mX2Jvb3RlZCB8fCB0c2RuX251bGwodHNkbikgfHwgIXByb2ZfYWN0 aXZlX2dldF91bmxvY2tlZCgpKSB7CisJCXJldHVybjsKKwl9CisJdHNkID0gdHNkbl90c2QodHNk bik7CisJaWYgKHRzZF9yZWVudHJhbmN5X2xldmVsX2dldCh0c2QpID4gMCkgeworCQlyZXR1cm47 CisJfQorCisJdGRhdGEgPSBwcm9mX3RkYXRhX2dldCh0c2QsIGZhbHNlKTsKKwlpZiAodGRhdGEg PT0gTlVMTCkgeworCQlyZXR1cm47CisJfQorCWlmICh0ZGF0YS0+ZW5xKSB7CisJCXRkYXRhLT5l bnFfZ2R1bXAgPSB0cnVlOworCQlyZXR1cm47CisJfQorCisJcHJvZl9nZHVtcF9pbXBsKHRzZCk7 Cit9CisKK3N0YXRpYyB1aW50NjRfdAorcHJvZl90aHJfdWlkX2FsbG9jKHRzZG5fdCAqdHNkbikg eworCXVpbnQ2NF90IHRocl91aWQ7CisKKwltYWxsb2NfbXV0ZXhfbG9jayh0c2RuLCAmbmV4dF90 aHJfdWlkX210eCk7CisJdGhyX3VpZCA9IG5leHRfdGhyX3VpZDsKKwluZXh0X3Rocl91aWQrKzsK KwltYWxsb2NfbXV0ZXhfdW5sb2NrKHRzZG4sICZuZXh0X3Rocl91aWRfbXR4KTsKKworCXJldHVy biB0aHJfdWlkOworfQorCitwcm9mX3RkYXRhX3QgKgorcHJvZl90ZGF0YV9pbml0KHRzZF90ICp0 c2QpIHsKKwlyZXR1cm4gcHJvZl90ZGF0YV9pbml0X2ltcGwodHNkLCBwcm9mX3Rocl91aWRfYWxs b2ModHNkX3RzZG4odHNkKSksIDAsCisJICAgIE5VTEwsIHByb2ZfdGhyZWFkX2FjdGl2ZV9pbml0 X2dldCh0c2RfdHNkbih0c2QpKSk7Cit9CisKK3Byb2ZfdGRhdGFfdCAqCitwcm9mX3RkYXRhX3Jl aW5pdCh0c2RfdCAqdHNkLCBwcm9mX3RkYXRhX3QgKnRkYXRhKSB7CisJdWludDY0X3QgdGhyX3Vp ZCA9IHRkYXRhLT50aHJfdWlkOworCXVpbnQ2NF90IHRocl9kaXNjcmltID0gdGRhdGEtPnRocl9k aXNjcmltICsgMTsKKwljaGFyICp0aHJlYWRfbmFtZSA9ICh0ZGF0YS0+dGhyZWFkX25hbWUgIT0g TlVMTCkgPworCSAgICBwcm9mX3RocmVhZF9uYW1lX2FsbG9jKHRzZCwgdGRhdGEtPnRocmVhZF9u YW1lKSA6IE5VTEw7CisJYm9vbCBhY3RpdmUgPSB0ZGF0YS0+YWN0aXZlOworCisJcHJvZl90ZGF0 YV9kZXRhY2godHNkLCB0ZGF0YSk7CisJcmV0dXJuIHByb2ZfdGRhdGFfaW5pdF9pbXBsKHRzZCwg dGhyX3VpZCwgdGhyX2Rpc2NyaW0sIHRocmVhZF9uYW1lLAorCSAgICBhY3RpdmUpOworfQorCit2 b2lkCitwcm9mX3RkYXRhX2NsZWFudXAodHNkX3QgKnRzZCkgeworCXByb2ZfdGRhdGFfdCAqdGRh dGE7CisKKwlpZiAoIWNvbmZpZ19wcm9mKSB7CisJCXJldHVybjsKKwl9CisKKwl0ZGF0YSA9IHRz ZF9wcm9mX3RkYXRhX2dldCh0c2QpOworCWlmICh0ZGF0YSAhPSBOVUxMKSB7CisJCXByb2ZfdGRh dGFfZGV0YWNoKHRzZCwgdGRhdGEpOworCX0KK30KKworYm9vbAorcHJvZl9hY3RpdmVfZ2V0KHRz ZG5fdCAqdHNkbikgeworCWJvb2wgcHJvZl9hY3RpdmVfY3VycmVudDsKKworCXByb2ZfYWN0aXZl X2Fzc2VydCgpOworCW1hbGxvY19tdXRleF9sb2NrKHRzZG4sICZwcm9mX2FjdGl2ZV9tdHgpOwor CXByb2ZfYWN0aXZlX2N1cnJlbnQgPSBwcm9mX2FjdGl2ZV9zdGF0ZTsKKwltYWxsb2NfbXV0ZXhf dW5sb2NrKHRzZG4sICZwcm9mX2FjdGl2ZV9tdHgpOworCXJldHVybiBwcm9mX2FjdGl2ZV9jdXJy ZW50OworfQorCitib29sCitwcm9mX2FjdGl2ZV9zZXQodHNkbl90ICp0c2RuLCBib29sIGFjdGl2 ZSkgeworCWJvb2wgcHJvZl9hY3RpdmVfb2xkOworCisJcHJvZl9hY3RpdmVfYXNzZXJ0KCk7CisJ bWFsbG9jX211dGV4X2xvY2sodHNkbiwgJnByb2ZfYWN0aXZlX210eCk7CisJcHJvZl9hY3RpdmVf b2xkID0gcHJvZl9hY3RpdmVfc3RhdGU7CisJcHJvZl9hY3RpdmVfc3RhdGUgPSBhY3RpdmU7CisJ bWFsbG9jX211dGV4X3VubG9jayh0c2RuLCAmcHJvZl9hY3RpdmVfbXR4KTsKKwlwcm9mX2FjdGl2 ZV9hc3NlcnQoKTsKKwlyZXR1cm4gcHJvZl9hY3RpdmVfb2xkOworfQorCitjb25zdCBjaGFyICoK K3Byb2ZfdGhyZWFkX25hbWVfZ2V0KHRzZF90ICp0c2QpIHsKKwlhc3NlcnQodHNkX3JlZW50cmFu Y3lfbGV2ZWxfZ2V0KHRzZCkgPT0gMCk7CisKKwlwcm9mX3RkYXRhX3QgKnRkYXRhOworCisJdGRh dGEgPSBwcm9mX3RkYXRhX2dldCh0c2QsIHRydWUpOworCWlmICh0ZGF0YSA9PSBOVUxMKSB7CisJ CXJldHVybiAiIjsKKwl9CisJcmV0dXJuICh0ZGF0YS0+dGhyZWFkX25hbWUgIT0gTlVMTCA/IHRk YXRhLT50aHJlYWRfbmFtZSA6ICIiKTsKK30KKworaW50Citwcm9mX3RocmVhZF9uYW1lX3NldCh0 c2RfdCAqdHNkLCBjb25zdCBjaGFyICp0aHJlYWRfbmFtZSkgeworCWlmIChvcHRfcHJvZl9zeXNf dGhyZWFkX25hbWUpIHsKKwkJcmV0dXJuIEVOT0VOVDsKKwl9IGVsc2UgeworCQlyZXR1cm4gcHJv Zl90aHJlYWRfbmFtZV9zZXRfaW1wbCh0c2QsIHRocmVhZF9uYW1lKTsKKwl9Cit9CisKK2Jvb2wK K3Byb2ZfdGhyZWFkX2FjdGl2ZV9nZXQodHNkX3QgKnRzZCkgeworCWFzc2VydCh0c2RfcmVlbnRy YW5jeV9sZXZlbF9nZXQodHNkKSA9PSAwKTsKKworCXByb2ZfdGRhdGFfdCAqdGRhdGE7CisKKwl0 ZGF0YSA9IHByb2ZfdGRhdGFfZ2V0KHRzZCwgdHJ1ZSk7CisJaWYgKHRkYXRhID09IE5VTEwpIHsK KwkJcmV0dXJuIGZhbHNlOworCX0KKwlyZXR1cm4gdGRhdGEtPmFjdGl2ZTsKK30KKworYm9vbAor cHJvZl90aHJlYWRfYWN0aXZlX3NldCh0c2RfdCAqdHNkLCBib29sIGFjdGl2ZSkgeworCWFzc2Vy dCh0c2RfcmVlbnRyYW5jeV9sZXZlbF9nZXQodHNkKSA9PSAwKTsKKworCXByb2ZfdGRhdGFfdCAq dGRhdGE7CisKKwl0ZGF0YSA9IHByb2ZfdGRhdGFfZ2V0KHRzZCwgdHJ1ZSk7CisJaWYgKHRkYXRh ID09IE5VTEwpIHsKKwkJcmV0dXJuIHRydWU7CisJfQorCXRkYXRhLT5hY3RpdmUgPSBhY3RpdmU7 CisJcmV0dXJuIGZhbHNlOworfQorCitib29sCitwcm9mX3RocmVhZF9hY3RpdmVfaW5pdF9nZXQo dHNkbl90ICp0c2RuKSB7CisJYm9vbCBhY3RpdmVfaW5pdDsKKworCW1hbGxvY19tdXRleF9sb2Nr KHRzZG4sICZwcm9mX3RocmVhZF9hY3RpdmVfaW5pdF9tdHgpOworCWFjdGl2ZV9pbml0ID0gcHJv Zl90aHJlYWRfYWN0aXZlX2luaXQ7CisJbWFsbG9jX211dGV4X3VubG9jayh0c2RuLCAmcHJvZl90 aHJlYWRfYWN0aXZlX2luaXRfbXR4KTsKKwlyZXR1cm4gYWN0aXZlX2luaXQ7Cit9CisKK2Jvb2wK K3Byb2ZfdGhyZWFkX2FjdGl2ZV9pbml0X3NldCh0c2RuX3QgKnRzZG4sIGJvb2wgYWN0aXZlX2lu aXQpIHsKKwlib29sIGFjdGl2ZV9pbml0X29sZDsKKworCW1hbGxvY19tdXRleF9sb2NrKHRzZG4s ICZwcm9mX3RocmVhZF9hY3RpdmVfaW5pdF9tdHgpOworCWFjdGl2ZV9pbml0X29sZCA9IHByb2Zf dGhyZWFkX2FjdGl2ZV9pbml0OworCXByb2ZfdGhyZWFkX2FjdGl2ZV9pbml0ID0gYWN0aXZlX2lu aXQ7CisJbWFsbG9jX211dGV4X3VubG9jayh0c2RuLCAmcHJvZl90aHJlYWRfYWN0aXZlX2luaXRf bXR4KTsKKwlyZXR1cm4gYWN0aXZlX2luaXRfb2xkOworfQorCitib29sCitwcm9mX2dkdW1wX2dl dCh0c2RuX3QgKnRzZG4pIHsKKwlib29sIHByb2ZfZ2R1bXBfY3VycmVudDsKKworCW1hbGxvY19t dXRleF9sb2NrKHRzZG4sICZwcm9mX2dkdW1wX210eCk7CisJcHJvZl9nZHVtcF9jdXJyZW50ID0g cHJvZl9nZHVtcF92YWw7CisJbWFsbG9jX211dGV4X3VubG9jayh0c2RuLCAmcHJvZl9nZHVtcF9t dHgpOworCXJldHVybiBwcm9mX2dkdW1wX2N1cnJlbnQ7Cit9CisKK2Jvb2wKK3Byb2ZfZ2R1bXBf c2V0KHRzZG5fdCAqdHNkbiwgYm9vbCBnZHVtcCkgeworCWJvb2wgcHJvZl9nZHVtcF9vbGQ7CisK KwltYWxsb2NfbXV0ZXhfbG9jayh0c2RuLCAmcHJvZl9nZHVtcF9tdHgpOworCXByb2ZfZ2R1bXBf b2xkID0gcHJvZl9nZHVtcF92YWw7CisJcHJvZl9nZHVtcF92YWwgPSBnZHVtcDsKKwltYWxsb2Nf bXV0ZXhfdW5sb2NrKHRzZG4sICZwcm9mX2dkdW1wX210eCk7CisJcmV0dXJuIHByb2ZfZ2R1bXBf b2xkOworfQorCit2b2lkCitwcm9mX2JhY2t0cmFjZV9ob29rX3NldChwcm9mX2JhY2t0cmFjZV9o b29rX3QgaG9vaykgeworCWF0b21pY19zdG9yZV9wKCZwcm9mX2JhY2t0cmFjZV9ob29rLCBob29r LCBBVE9NSUNfUkVMRUFTRSk7Cit9CisKK3Byb2ZfYmFja3RyYWNlX2hvb2tfdAorcHJvZl9iYWNr dHJhY2VfaG9va19nZXQoKSB7CisJcmV0dXJuIChwcm9mX2JhY2t0cmFjZV9ob29rX3QpYXRvbWlj X2xvYWRfcCgmcHJvZl9iYWNrdHJhY2VfaG9vaywKKwkgICAgQVRPTUlDX0FDUVVJUkUpOworfQor Cit2b2lkCitwcm9mX2R1bXBfaG9va19zZXQocHJvZl9kdW1wX2hvb2tfdCBob29rKSB7CisJYXRv bWljX3N0b3JlX3AoJnByb2ZfZHVtcF9ob29rLCBob29rLCBBVE9NSUNfUkVMRUFTRSk7Cit9CisK K3Byb2ZfZHVtcF9ob29rX3QKK3Byb2ZfZHVtcF9ob29rX2dldCgpIHsKKwlyZXR1cm4gKHByb2Zf ZHVtcF9ob29rX3QpYXRvbWljX2xvYWRfcCgmcHJvZl9kdW1wX2hvb2ssCisJICAgIEFUT01JQ19B Q1FVSVJFKTsKK30KKwordm9pZAorcHJvZl9ib290MCh2b2lkKSB7CisJY2Fzc2VydChjb25maWdf cHJvZik7CisKKwltZW1jcHkob3B0X3Byb2ZfcHJlZml4LCBQUk9GX1BSRUZJWF9ERUZBVUxULAor CSAgICBzaXplb2YoUFJPRl9QUkVGSVhfREVGQVVMVCkpOworfQorCit2b2lkCitwcm9mX2Jvb3Qx KHZvaWQpIHsKKwljYXNzZXJ0KGNvbmZpZ19wcm9mKTsKKworCS8qCisJICogb3B0X3Byb2YgbXVz dCBiZSBpbiBpdHMgZmluYWwgc3RhdGUgYmVmb3JlIGFueSBhcmVuYXMgYXJlCisJICogaW5pdGlh bGl6ZWQsIHNvIHRoaXMgZnVuY3Rpb24gbXVzdCBiZSBleGVjdXRlZCBlYXJseS4KKwkgKi8KKwlp ZiAob3B0X3Byb2ZfbGVha19lcnJvciAmJiAhb3B0X3Byb2ZfbGVhaykgeworCQlvcHRfcHJvZl9s ZWFrID0gdHJ1ZTsKKwl9CisKKwlpZiAob3B0X3Byb2ZfbGVhayAmJiAhb3B0X3Byb2YpIHsKKwkJ LyoKKwkJICogRW5hYmxlIG9wdF9wcm9mLCBidXQgaW4gc3VjaCBhIHdheSB0aGF0IHByb2ZpbGVz IGFyZSBuZXZlcgorCQkgKiBhdXRvbWF0aWNhbGx5IGR1bXBlZC4KKwkJICovCisJCW9wdF9wcm9m ID0gdHJ1ZTsKKwkJb3B0X3Byb2ZfZ2R1bXAgPSBmYWxzZTsKKwl9IGVsc2UgaWYgKG9wdF9wcm9m KSB7CisJCWlmIChvcHRfbGdfcHJvZl9pbnRlcnZhbCA+PSAwKSB7CisJCQlwcm9mX2ludGVydmFs ID0gKCgodWludDY0X3QpMVUpIDw8CisJCQkgICAgb3B0X2xnX3Byb2ZfaW50ZXJ2YWwpOworCQl9 CisJfQorfQorCitib29sCitwcm9mX2Jvb3QyKHRzZF90ICp0c2QsIGJhc2VfdCAqYmFzZSkgewor CWNhc3NlcnQoY29uZmlnX3Byb2YpOworCisJLyoKKwkgKiBJbml0aWFsaXplIHRoZSBnbG9iYWwg bXV0ZXhlcyB1bmNvbmRpdGlvbmFsbHkgdG8gbWFpbnRhaW4gY29ycmVjdAorCSAqIHN0YXRzIHdo ZW4gb3B0X3Byb2YgaXMgZmFsc2UuCisJICovCisJaWYgKG1hbGxvY19tdXRleF9pbml0KCZwcm9m X2FjdGl2ZV9tdHgsICJwcm9mX2FjdGl2ZSIsCisJICAgIFdJVE5FU1NfUkFOS19QUk9GX0FDVElW RSwgbWFsbG9jX211dGV4X3JhbmtfZXhjbHVzaXZlKSkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9CisJ aWYgKG1hbGxvY19tdXRleF9pbml0KCZwcm9mX2dkdW1wX210eCwgInByb2ZfZ2R1bXAiLAorCSAg ICBXSVRORVNTX1JBTktfUFJPRl9HRFVNUCwgbWFsbG9jX211dGV4X3JhbmtfZXhjbHVzaXZlKSkg eworCQlyZXR1cm4gdHJ1ZTsKKwl9CisJaWYgKG1hbGxvY19tdXRleF9pbml0KCZwcm9mX3RocmVh ZF9hY3RpdmVfaW5pdF9tdHgsCisJICAgICJwcm9mX3RocmVhZF9hY3RpdmVfaW5pdCIsIFdJVE5F U1NfUkFOS19QUk9GX1RIUkVBRF9BQ1RJVkVfSU5JVCwKKwkgICAgbWFsbG9jX211dGV4X3Jhbmtf ZXhjbHVzaXZlKSkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9CisJaWYgKG1hbGxvY19tdXRleF9pbml0 KCZidDJnY3R4X210eCwgInByb2ZfYnQyZ2N0eCIsCisJICAgIFdJVE5FU1NfUkFOS19QUk9GX0JU MkdDVFgsIG1hbGxvY19tdXRleF9yYW5rX2V4Y2x1c2l2ZSkpIHsKKwkJcmV0dXJuIHRydWU7CisJ fQorCWlmIChtYWxsb2NfbXV0ZXhfaW5pdCgmdGRhdGFzX210eCwgInByb2ZfdGRhdGFzIiwKKwkg ICAgV0lUTkVTU19SQU5LX1BST0ZfVERBVEFTLCBtYWxsb2NfbXV0ZXhfcmFua19leGNsdXNpdmUp KSB7CisJCXJldHVybiB0cnVlOworCX0KKwlpZiAobWFsbG9jX211dGV4X2luaXQoJm5leHRfdGhy X3VpZF9tdHgsICJwcm9mX25leHRfdGhyX3VpZCIsCisJICAgIFdJVE5FU1NfUkFOS19QUk9GX05F WFRfVEhSX1VJRCwgbWFsbG9jX211dGV4X3JhbmtfZXhjbHVzaXZlKSkgeworCQlyZXR1cm4gdHJ1 ZTsKKwl9CisJaWYgKG1hbGxvY19tdXRleF9pbml0KCZwcm9mX3N0YXRzX210eCwgInByb2Zfc3Rh dHMiLAorCSAgICBXSVRORVNTX1JBTktfUFJPRl9TVEFUUywgbWFsbG9jX211dGV4X3JhbmtfZXhj bHVzaXZlKSkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9CisJaWYgKG1hbGxvY19tdXRleF9pbml0KCZw cm9mX2R1bXBfZmlsZW5hbWVfbXR4LAorCSAgICAicHJvZl9kdW1wX2ZpbGVuYW1lIiwgV0lUTkVT U19SQU5LX1BST0ZfRFVNUF9GSUxFTkFNRSwKKwkgICAgbWFsbG9jX211dGV4X3JhbmtfZXhjbHVz aXZlKSkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9CisJaWYgKG1hbGxvY19tdXRleF9pbml0KCZwcm9m X2R1bXBfbXR4LCAicHJvZl9kdW1wIiwKKwkgICAgV0lUTkVTU19SQU5LX1BST0ZfRFVNUCwgbWFs bG9jX211dGV4X3JhbmtfZXhjbHVzaXZlKSkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwlpZiAo b3B0X3Byb2YpIHsKKwkJbGdfcHJvZl9zYW1wbGUgPSBvcHRfbGdfcHJvZl9zYW1wbGU7CisJCXBy b2ZfdW5iaWFzX21hcF9pbml0KCk7CisJCXByb2ZfYWN0aXZlX3N0YXRlID0gb3B0X3Byb2ZfYWN0 aXZlOworCQlwcm9mX2dkdW1wX3ZhbCA9IG9wdF9wcm9mX2dkdW1wOworCQlwcm9mX3RocmVhZF9h Y3RpdmVfaW5pdCA9IG9wdF9wcm9mX3RocmVhZF9hY3RpdmVfaW5pdDsKKworCQlpZiAocHJvZl9k YXRhX2luaXQodHNkKSkgeworCQkJcmV0dXJuIHRydWU7CisJCX0KKworCQluZXh0X3Rocl91aWQg PSAwOworCQlpZiAocHJvZl9pZHVtcF9hY2N1bV9pbml0KCkpIHsKKwkJCXJldHVybiB0cnVlOwor CQl9CisKKwkJaWYgKG9wdF9wcm9mX2ZpbmFsICYmIG9wdF9wcm9mX3ByZWZpeFswXSAhPSAnXDAn ICYmCisJCSAgICBhdGV4aXQocHJvZl9mZHVtcCkgIT0gMCkgeworCQkJbWFsbG9jX3dyaXRlKCI8 amVtYWxsb2M+OiBFcnJvciBpbiBhdGV4aXQoKVxuIik7CisJCQlpZiAob3B0X2Fib3J0KSB7CisJ CQkJYWJvcnQoKTsKKwkJCX0KKwkJfQorCisJCWlmIChwcm9mX2xvZ19pbml0KHRzZCkpIHsKKwkJ CXJldHVybiB0cnVlOworCQl9CisKKwkJaWYgKHByb2ZfcmVjZW50X2luaXQoKSkgeworCQkJcmV0 dXJuIHRydWU7CisJCX0KKworCQlwcm9mX2Jhc2UgPSBiYXNlOworCisJCWdjdHhfbG9ja3MgPSAo bWFsbG9jX211dGV4X3QgKiliYXNlX2FsbG9jKHRzZF90c2RuKHRzZCksIGJhc2UsCisJCSAgICBQ Uk9GX05DVFhfTE9DS1MgKiBzaXplb2YobWFsbG9jX211dGV4X3QpLCBDQUNIRUxJTkUpOworCQlp ZiAoZ2N0eF9sb2NrcyA9PSBOVUxMKSB7CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCQlmb3IgKHVu c2lnbmVkIGkgPSAwOyBpIDwgUFJPRl9OQ1RYX0xPQ0tTOyBpKyspIHsKKwkJCWlmIChtYWxsb2Nf bXV0ZXhfaW5pdCgmZ2N0eF9sb2Nrc1tpXSwgInByb2ZfZ2N0eCIsCisJCQkgICAgV0lUTkVTU19S QU5LX1BST0ZfR0NUWCwKKwkJCSAgICBtYWxsb2NfbXV0ZXhfcmFua19leGNsdXNpdmUpKSB7CisJ CQkJcmV0dXJuIHRydWU7CisJCQl9CisJCX0KKworCQl0ZGF0YV9sb2NrcyA9IChtYWxsb2NfbXV0 ZXhfdCAqKWJhc2VfYWxsb2ModHNkX3RzZG4odHNkKSwgYmFzZSwKKwkJICAgIFBST0ZfTlREQVRB X0xPQ0tTICogc2l6ZW9mKG1hbGxvY19tdXRleF90KSwgQ0FDSEVMSU5FKTsKKwkJaWYgKHRkYXRh X2xvY2tzID09IE5VTEwpIHsKKwkJCXJldHVybiB0cnVlOworCQl9CisJCWZvciAodW5zaWduZWQg aSA9IDA7IGkgPCBQUk9GX05UREFUQV9MT0NLUzsgaSsrKSB7CisJCQlpZiAobWFsbG9jX211dGV4 X2luaXQoJnRkYXRhX2xvY2tzW2ldLCAicHJvZl90ZGF0YSIsCisJCQkgICAgV0lUTkVTU19SQU5L X1BST0ZfVERBVEEsCisJCQkgICAgbWFsbG9jX211dGV4X3JhbmtfZXhjbHVzaXZlKSkgeworCQkJ CXJldHVybiB0cnVlOworCQkJfQorCQl9CisKKwkJcHJvZl91bndpbmRfaW5pdCgpOworCQlwcm9m X2hvb2tzX2luaXQoKTsKKwl9CisJcHJvZl9ib290ZWQgPSB0cnVlOworCisJcmV0dXJuIGZhbHNl OworfQorCit2b2lkCitwcm9mX3ByZWZvcmswKHRzZG5fdCAqdHNkbikgeworCWlmIChjb25maWdf cHJvZiAmJiBvcHRfcHJvZikgeworCQl1bnNpZ25lZCBpOworCisJCW1hbGxvY19tdXRleF9wcmVm b3JrKHRzZG4sICZwcm9mX2R1bXBfbXR4KTsKKwkJbWFsbG9jX211dGV4X3ByZWZvcmsodHNkbiwg JmJ0MmdjdHhfbXR4KTsKKwkJbWFsbG9jX211dGV4X3ByZWZvcmsodHNkbiwgJnRkYXRhc19tdHgp OworCQlmb3IgKGkgPSAwOyBpIDwgUFJPRl9OVERBVEFfTE9DS1M7IGkrKykgeworCQkJbWFsbG9j X211dGV4X3ByZWZvcmsodHNkbiwgJnRkYXRhX2xvY2tzW2ldKTsKKwkJfQorCQltYWxsb2NfbXV0 ZXhfcHJlZm9yayh0c2RuLCAmbG9nX210eCk7CisJCWZvciAoaSA9IDA7IGkgPCBQUk9GX05DVFhf TE9DS1M7IGkrKykgeworCQkJbWFsbG9jX211dGV4X3ByZWZvcmsodHNkbiwgJmdjdHhfbG9ja3Nb aV0pOworCQl9CisJCW1hbGxvY19tdXRleF9wcmVmb3JrKHRzZG4sICZwcm9mX3JlY2VudF9kdW1w X210eCk7CisJfQorfQorCit2b2lkCitwcm9mX3ByZWZvcmsxKHRzZG5fdCAqdHNkbikgeworCWlm IChjb25maWdfcHJvZiAmJiBvcHRfcHJvZikgeworCQljb3VudGVyX3ByZWZvcmsodHNkbiwgJnBy b2ZfaWR1bXBfYWNjdW11bGF0ZWQpOworCQltYWxsb2NfbXV0ZXhfcHJlZm9yayh0c2RuLCAmcHJv Zl9hY3RpdmVfbXR4KTsKKwkJbWFsbG9jX211dGV4X3ByZWZvcmsodHNkbiwgJnByb2ZfZHVtcF9m aWxlbmFtZV9tdHgpOworCQltYWxsb2NfbXV0ZXhfcHJlZm9yayh0c2RuLCAmcHJvZl9nZHVtcF9t dHgpOworCQltYWxsb2NfbXV0ZXhfcHJlZm9yayh0c2RuLCAmcHJvZl9yZWNlbnRfYWxsb2NfbXR4 KTsKKwkJbWFsbG9jX211dGV4X3ByZWZvcmsodHNkbiwgJnByb2Zfc3RhdHNfbXR4KTsKKwkJbWFs bG9jX211dGV4X3ByZWZvcmsodHNkbiwgJm5leHRfdGhyX3VpZF9tdHgpOworCQltYWxsb2NfbXV0 ZXhfcHJlZm9yayh0c2RuLCAmcHJvZl90aHJlYWRfYWN0aXZlX2luaXRfbXR4KTsKKwl9Cit9CisK K3ZvaWQKK3Byb2ZfcG9zdGZvcmtfcGFyZW50KHRzZG5fdCAqdHNkbikgeworCWlmIChjb25maWdf cHJvZiAmJiBvcHRfcHJvZikgeworCQl1bnNpZ25lZCBpOworCisJCW1hbGxvY19tdXRleF9wb3N0 Zm9ya19wYXJlbnQodHNkbiwKKwkJICAgICZwcm9mX3RocmVhZF9hY3RpdmVfaW5pdF9tdHgpOwor CQltYWxsb2NfbXV0ZXhfcG9zdGZvcmtfcGFyZW50KHRzZG4sICZuZXh0X3Rocl91aWRfbXR4KTsK KwkJbWFsbG9jX211dGV4X3Bvc3Rmb3JrX3BhcmVudCh0c2RuLCAmcHJvZl9zdGF0c19tdHgpOwor CQltYWxsb2NfbXV0ZXhfcG9zdGZvcmtfcGFyZW50KHRzZG4sICZwcm9mX3JlY2VudF9hbGxvY19t dHgpOworCQltYWxsb2NfbXV0ZXhfcG9zdGZvcmtfcGFyZW50KHRzZG4sICZwcm9mX2dkdW1wX210 eCk7CisJCW1hbGxvY19tdXRleF9wb3N0Zm9ya19wYXJlbnQodHNkbiwgJnByb2ZfZHVtcF9maWxl bmFtZV9tdHgpOworCQltYWxsb2NfbXV0ZXhfcG9zdGZvcmtfcGFyZW50KHRzZG4sICZwcm9mX2Fj dGl2ZV9tdHgpOworCQljb3VudGVyX3Bvc3Rmb3JrX3BhcmVudCh0c2RuLCAmcHJvZl9pZHVtcF9h Y2N1bXVsYXRlZCk7CisJCW1hbGxvY19tdXRleF9wb3N0Zm9ya19wYXJlbnQodHNkbiwgJnByb2Zf cmVjZW50X2R1bXBfbXR4KTsKKwkJZm9yIChpID0gMDsgaSA8IFBST0ZfTkNUWF9MT0NLUzsgaSsr KSB7CisJCQltYWxsb2NfbXV0ZXhfcG9zdGZvcmtfcGFyZW50KHRzZG4sICZnY3R4X2xvY2tzW2ld KTsKKwkJfQorCQltYWxsb2NfbXV0ZXhfcG9zdGZvcmtfcGFyZW50KHRzZG4sICZsb2dfbXR4KTsK KwkJZm9yIChpID0gMDsgaSA8IFBST0ZfTlREQVRBX0xPQ0tTOyBpKyspIHsKKwkJCW1hbGxvY19t dXRleF9wb3N0Zm9ya19wYXJlbnQodHNkbiwgJnRkYXRhX2xvY2tzW2ldKTsKKwkJfQorCQltYWxs b2NfbXV0ZXhfcG9zdGZvcmtfcGFyZW50KHRzZG4sICZ0ZGF0YXNfbXR4KTsKKwkJbWFsbG9jX211 dGV4X3Bvc3Rmb3JrX3BhcmVudCh0c2RuLCAmYnQyZ2N0eF9tdHgpOworCQltYWxsb2NfbXV0ZXhf cG9zdGZvcmtfcGFyZW50KHRzZG4sICZwcm9mX2R1bXBfbXR4KTsKKwl9Cit9CisKK3ZvaWQKK3By b2ZfcG9zdGZvcmtfY2hpbGQodHNkbl90ICp0c2RuKSB7CisJaWYgKGNvbmZpZ19wcm9mICYmIG9w dF9wcm9mKSB7CisJCXVuc2lnbmVkIGk7CisKKwkJbWFsbG9jX211dGV4X3Bvc3Rmb3JrX2NoaWxk KHRzZG4sICZwcm9mX3RocmVhZF9hY3RpdmVfaW5pdF9tdHgpOworCQltYWxsb2NfbXV0ZXhfcG9z dGZvcmtfY2hpbGQodHNkbiwgJm5leHRfdGhyX3VpZF9tdHgpOworCQltYWxsb2NfbXV0ZXhfcG9z dGZvcmtfY2hpbGQodHNkbiwgJnByb2Zfc3RhdHNfbXR4KTsKKwkJbWFsbG9jX211dGV4X3Bvc3Rm b3JrX2NoaWxkKHRzZG4sICZwcm9mX3JlY2VudF9hbGxvY19tdHgpOworCQltYWxsb2NfbXV0ZXhf cG9zdGZvcmtfY2hpbGQodHNkbiwgJnByb2ZfZ2R1bXBfbXR4KTsKKwkJbWFsbG9jX211dGV4X3Bv c3Rmb3JrX2NoaWxkKHRzZG4sICZwcm9mX2R1bXBfZmlsZW5hbWVfbXR4KTsKKwkJbWFsbG9jX211 dGV4X3Bvc3Rmb3JrX2NoaWxkKHRzZG4sICZwcm9mX2FjdGl2ZV9tdHgpOworCQljb3VudGVyX3Bv c3Rmb3JrX2NoaWxkKHRzZG4sICZwcm9mX2lkdW1wX2FjY3VtdWxhdGVkKTsKKwkJbWFsbG9jX211 dGV4X3Bvc3Rmb3JrX2NoaWxkKHRzZG4sICZwcm9mX3JlY2VudF9kdW1wX210eCk7CisJCWZvciAo aSA9IDA7IGkgPCBQUk9GX05DVFhfTE9DS1M7IGkrKykgeworCQkJbWFsbG9jX211dGV4X3Bvc3Rm b3JrX2NoaWxkKHRzZG4sICZnY3R4X2xvY2tzW2ldKTsKKwkJfQorCQltYWxsb2NfbXV0ZXhfcG9z dGZvcmtfY2hpbGQodHNkbiwgJmxvZ19tdHgpOworCQlmb3IgKGkgPSAwOyBpIDwgUFJPRl9OVERB VEFfTE9DS1M7IGkrKykgeworCQkJbWFsbG9jX211dGV4X3Bvc3Rmb3JrX2NoaWxkKHRzZG4sICZ0 ZGF0YV9sb2Nrc1tpXSk7CisJCX0KKwkJbWFsbG9jX211dGV4X3Bvc3Rmb3JrX2NoaWxkKHRzZG4s ICZ0ZGF0YXNfbXR4KTsKKwkJbWFsbG9jX211dGV4X3Bvc3Rmb3JrX2NoaWxkKHRzZG4sICZidDJn Y3R4X210eCk7CisJCW1hbGxvY19tdXRleF9wb3N0Zm9ya19jaGlsZCh0c2RuLCAmcHJvZl9kdW1w X210eCk7CisJfQorfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKZGlmZiAtLWdpdCBhLzM4 OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3NyYy9wcm9mX2RhdGEuYyBiLzM4 OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3NyYy9wcm9mX2RhdGEuYwpuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZmE1NWJlCi0tLSAvZGV2L251bGwKKysr IGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvc3JjL3Byb2ZfZGF0YS5j CkBAIC0wLDAgKzEsMTQ0NyBAQAorI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2plbWFsbG9j X3ByZWFtYmxlLmgiCisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvamVtYWxsb2NfaW50ZXJu YWxfaW5jbHVkZXMuaCIKKworI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2Fzc2VydC5oIgor I2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2NraC5oIgorI2luY2x1ZGUgImplbWFsbG9jL2lu dGVybmFsL2hhc2guaCIKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9tYWxsb2NfaW8uaCIK KyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9wcm9mX2RhdGEuaCIKKworLyoKKyAqIFRoaXMg ZmlsZSBkZWZpbmVzIGFuZCBtYW5hZ2VzIHRoZSBjb3JlIHByb2ZpbGluZyBkYXRhIHN0cnVjdHVy ZXMuCisgKgorICogQ29uY2VwdHVhbGx5LCBwcm9maWxpbmcgZGF0YSBjYW4gYmUgaW1hZ2luZWQg YXMgYSB0YWJsZSB3aXRoIHRocmVlIGNvbHVtbnM6CisgKiB0aHJlYWQsIHN0YWNrIHRyYWNlLCBh bmQgY3VycmVudCBhbGxvY2F0aW9uIHNpemUuICAoV2hlbiBwcm9mX2FjY3VtIGlzIG9uLAorICog dGhlcmUncyBvbmUgYWRkaXRpb25hbCBjb2x1bW4gd2hpY2ggaXMgdGhlIGN1bXVsYXRpdmUgYWxs b2NhdGlvbiBzaXplLikKKyAqCisgKiBJbXBsZW1lbnRhdGlvbiB3aXNlLCBlYWNoIHRocmVhZCBt YWludGFpbnMgYSBoYXNoIHJlY29yZGluZyB0aGUgc3RhY2sgdHJhY2UKKyAqIHRvIGFsbG9jYXRp b24gc2l6ZSBjb3JyZXNwb25kZW5jZXMsIHdoaWNoIGFyZSBiYXNpY2FsbHkgdGhlIGluZGl2aWR1 YWwgcm93cworICogaW4gdGhlIHRhYmxlLiAgSW4gYWRkaXRpb24sIHR3byBnbG9iYWwgImluZGlj ZXMiIGFyZSBidWlsdCB0byBtYWtlIGRhdGEKKyAqIGFnZ3JlZ2F0aW9uIGVmZmljaWVudCAoZm9y IGR1bXBpbmcpOiBidDJnY3R4IGFuZCB0ZGF0YXMsIHdoaWNoIGFyZSBiYXNpY2FsbHkKKyAqIHRo ZSAiZ3JvdXBlZCBieSBzdGFjayB0cmFjZSIgYW5kICJncm91cGVkIGJ5IHRocmVhZCIgdmlld3Mg b2YgdGhlIHNhbWUgdGFibGUsCisgKiByZXNwZWN0aXZlbHkuICBOb3RlIHRoYXQgdGhlIGFsbG9j YXRpb24gc2l6ZSBpcyBvbmx5IGFnZ3JlZ2F0ZWQgdG8gdGhlIHR3bworICogaW5kaWNlcyBhdCBk dW1waW5nIHRpbWUsIHNvIGFzIHRvIG9wdGltaXplIGZvciBwZXJmb3JtYW5jZS4KKyAqLworCisv KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqLworCittYWxsb2NfbXV0ZXhfdCBidDJnY3R4X210eDsKK21h bGxvY19tdXRleF90IHRkYXRhc19tdHg7CittYWxsb2NfbXV0ZXhfdCBwcm9mX2R1bXBfbXR4Owor CisvKgorICogVGFibGUgb2YgbXV0ZXhlcyB0aGF0IGFyZSBzaGFyZWQgYW1vbmcgZ2N0eCdzLiAg VGhlc2UgYXJlIGxlYWYgbG9ja3MsIHNvCisgKiB0aGVyZSBpcyBubyBwcm9ibGVtIHdpdGggdXNp bmcgdGhlbSBmb3IgbW9yZSB0aGFuIG9uZSBnY3R4IGF0IHRoZSBzYW1lIHRpbWUuCisgKiBUaGUg cHJpbWFyeSBtb3RpdmF0aW9uIGZvciB0aGlzIHNoYXJpbmcgdGhvdWdoIGlzIHRoYXQgZ2N0eCdz IGFyZSBlcGhlbWVyYWwsCisgKiBhbmQgZGVzdHJveWluZyBtdXRleGVzIGNhdXNlcyBjb21wbGlj YXRpb25zIGZvciBzeXN0ZW1zIHRoYXQgYWxsb2NhdGUgd2hlbgorICogY3JlYXRpbmcvZGVzdHJv eWluZyBtdXRleGVzLgorICovCittYWxsb2NfbXV0ZXhfdCAqZ2N0eF9sb2NrczsKK3N0YXRpYyBh dG9taWNfdV90IGN1bV9nY3R4czsgLyogQXRvbWljIGNvdW50ZXIuICovCisKKy8qCisgKiBUYWJs ZSBvZiBtdXRleGVzIHRoYXQgYXJlIHNoYXJlZCBhbW9uZyB0ZGF0YSdzLiAgTm8gb3BlcmF0aW9u cyByZXF1aXJlCisgKiBob2xkaW5nIG11bHRpcGxlIHRkYXRhIGxvY2tzLCBzbyB0aGVyZSBpcyBu byBwcm9ibGVtIHdpdGggdXNpbmcgdGhlbSBmb3IgbW9yZQorICogdGhhbiBvbmUgdGRhdGEgYXQg dGhlIHNhbWUgdGltZSwgZXZlbiB0aG91Z2ggYSBnY3R4IGxvY2sgbWF5IGJlIGFjcXVpcmVkCisg KiB3aGlsZSBob2xkaW5nIGEgdGRhdGEgbG9jay4KKyAqLworbWFsbG9jX211dGV4X3QgKnRkYXRh X2xvY2tzOworCisvKgorICogR2xvYmFsIGhhc2ggb2YgKHByb2ZfYnRfdCAqKS0tPihwcm9mX2dj dHhfdCAqKS4gIFRoaXMgaXMgdGhlIG1hc3RlciBkYXRhCisgKiBzdHJ1Y3R1cmUgdGhhdCBrbm93 cyBhYm91dCBhbGwgYmFja3RyYWNlcyBjdXJyZW50bHkgY2FwdHVyZWQuCisgKi8KK3N0YXRpYyBj a2hfdCBidDJnY3R4OworCisvKgorICogVHJlZSBvZiBhbGwgZXh0YW50IHByb2ZfdGRhdGFfdCBz dHJ1Y3R1cmVzLCByZWdhcmRsZXNzIG9mIHN0YXRlLAorICoge2F0dGFjaGVkLGRldGFjaGVkLGV4 cGlyZWR9LgorICovCitzdGF0aWMgcHJvZl90ZGF0YV90cmVlX3QgdGRhdGFzOworCitzaXplX3Qg cHJvZl91bmJpYXNlZF9zeltQUk9GX1NDX05TSVpFU107CitzaXplX3QgcHJvZl9zaGlmdGVkX3Vu Ymlhc2VkX2NudFtQUk9GX1NDX05TSVpFU107CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisv KiBSZWQtYmxhY2sgdHJlZXMuICovCisKK3N0YXRpYyBpbnQKK3Byb2ZfdGN0eF9jb21wKGNvbnN0 IHByb2ZfdGN0eF90ICphLCBjb25zdCBwcm9mX3RjdHhfdCAqYikgeworCXVpbnQ2NF90IGFfdGhy X3VpZCA9IGEtPnRocl91aWQ7CisJdWludDY0X3QgYl90aHJfdWlkID0gYi0+dGhyX3VpZDsKKwlp bnQgcmV0ID0gKGFfdGhyX3VpZCA+IGJfdGhyX3VpZCkgLSAoYV90aHJfdWlkIDwgYl90aHJfdWlk KTsKKwlpZiAocmV0ID09IDApIHsKKwkJdWludDY0X3QgYV90aHJfZGlzY3JpbSA9IGEtPnRocl9k aXNjcmltOworCQl1aW50NjRfdCBiX3Rocl9kaXNjcmltID0gYi0+dGhyX2Rpc2NyaW07CisJCXJl dCA9IChhX3Rocl9kaXNjcmltID4gYl90aHJfZGlzY3JpbSkgLSAoYV90aHJfZGlzY3JpbSA8CisJ CSAgICBiX3Rocl9kaXNjcmltKTsKKwkJaWYgKHJldCA9PSAwKSB7CisJCQl1aW50NjRfdCBhX3Rj dHhfdWlkID0gYS0+dGN0eF91aWQ7CisJCQl1aW50NjRfdCBiX3RjdHhfdWlkID0gYi0+dGN0eF91 aWQ7CisJCQlyZXQgPSAoYV90Y3R4X3VpZCA+IGJfdGN0eF91aWQpIC0gKGFfdGN0eF91aWQgPAor CQkJICAgIGJfdGN0eF91aWQpOworCQl9CisJfQorCXJldHVybiByZXQ7Cit9CisKK3JiX2dlbihz dGF0aWMgVU5VU0VELCB0Y3R4X3RyZWVfLCBwcm9mX3RjdHhfdHJlZV90LCBwcm9mX3RjdHhfdCwK KyAgICB0Y3R4X2xpbmssIHByb2ZfdGN0eF9jb21wKQorCitzdGF0aWMgaW50Citwcm9mX2djdHhf Y29tcChjb25zdCBwcm9mX2djdHhfdCAqYSwgY29uc3QgcHJvZl9nY3R4X3QgKmIpIHsKKwl1bnNp Z25lZCBhX2xlbiA9IGEtPmJ0LmxlbjsKKwl1bnNpZ25lZCBiX2xlbiA9IGItPmJ0LmxlbjsKKwl1 bnNpZ25lZCBjb21wX2xlbiA9IChhX2xlbiA8IGJfbGVuKSA/IGFfbGVuIDogYl9sZW47CisJaW50 IHJldCA9IG1lbWNtcChhLT5idC52ZWMsIGItPmJ0LnZlYywgY29tcF9sZW4gKiBzaXplb2Yodm9p ZCAqKSk7CisJaWYgKHJldCA9PSAwKSB7CisJCXJldCA9IChhX2xlbiA+IGJfbGVuKSAtIChhX2xl biA8IGJfbGVuKTsKKwl9CisJcmV0dXJuIHJldDsKK30KKworcmJfZ2VuKHN0YXRpYyBVTlVTRUQs IGdjdHhfdHJlZV8sIHByb2ZfZ2N0eF90cmVlX3QsIHByb2ZfZ2N0eF90LCBkdW1wX2xpbmssCisg ICAgcHJvZl9nY3R4X2NvbXApCisKK3N0YXRpYyBpbnQKK3Byb2ZfdGRhdGFfY29tcChjb25zdCBw cm9mX3RkYXRhX3QgKmEsIGNvbnN0IHByb2ZfdGRhdGFfdCAqYikgeworCWludCByZXQ7CisJdWlu dDY0X3QgYV91aWQgPSBhLT50aHJfdWlkOworCXVpbnQ2NF90IGJfdWlkID0gYi0+dGhyX3VpZDsK KworCXJldCA9ICgoYV91aWQgPiBiX3VpZCkgLSAoYV91aWQgPCBiX3VpZCkpOworCWlmIChyZXQg PT0gMCkgeworCQl1aW50NjRfdCBhX2Rpc2NyaW0gPSBhLT50aHJfZGlzY3JpbTsKKwkJdWludDY0 X3QgYl9kaXNjcmltID0gYi0+dGhyX2Rpc2NyaW07CisKKwkJcmV0ID0gKChhX2Rpc2NyaW0gPiBi X2Rpc2NyaW0pIC0gKGFfZGlzY3JpbSA8IGJfZGlzY3JpbSkpOworCX0KKwlyZXR1cm4gcmV0Owor fQorCityYl9nZW4oc3RhdGljIFVOVVNFRCwgdGRhdGFfdHJlZV8sIHByb2ZfdGRhdGFfdHJlZV90 LCBwcm9mX3RkYXRhX3QsIHRkYXRhX2xpbmssCisgICAgcHJvZl90ZGF0YV9jb21wKQorCisvKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgbWFsbG9jX211dGV4X3QgKgorcHJvZl9nY3R4 X211dGV4X2Nob29zZSh2b2lkKSB7CisJdW5zaWduZWQgbmdjdHhzID0gYXRvbWljX2ZldGNoX2Fk ZF91KCZjdW1fZ2N0eHMsIDEsIEFUT01JQ19SRUxBWEVEKTsKKworCXJldHVybiAmZ2N0eF9sb2Nr c1sobmdjdHhzIC0gMSkgJSBQUk9GX05DVFhfTE9DS1NdOworfQorCitzdGF0aWMgbWFsbG9jX211 dGV4X3QgKgorcHJvZl90ZGF0YV9tdXRleF9jaG9vc2UodWludDY0X3QgdGhyX3VpZCkgeworCXJl dHVybiAmdGRhdGFfbG9ja3NbdGhyX3VpZCAlIFBST0ZfTlREQVRBX0xPQ0tTXTsKK30KKworYm9v bAorcHJvZl9kYXRhX2luaXQodHNkX3QgKnRzZCkgeworCXRkYXRhX3RyZWVfbmV3KCZ0ZGF0YXMp OworCXJldHVybiBja2hfbmV3KHRzZCwgJmJ0MmdjdHgsIFBST0ZfQ0tIX01JTklURU1TLAorCSAg ICBwcm9mX2J0X2hhc2gsIHByb2ZfYnRfa2V5Y29tcCk7Cit9CisKK3N0YXRpYyB2b2lkCitwcm9m X2VudGVyKHRzZF90ICp0c2QsIHByb2ZfdGRhdGFfdCAqdGRhdGEpIHsKKwljYXNzZXJ0KGNvbmZp Z19wcm9mKTsKKwlhc3NlcnQodGRhdGEgPT0gcHJvZl90ZGF0YV9nZXQodHNkLCBmYWxzZSkpOwor CisJaWYgKHRkYXRhICE9IE5VTEwpIHsKKwkJYXNzZXJ0KCF0ZGF0YS0+ZW5xKTsKKwkJdGRhdGEt PmVucSA9IHRydWU7CisJfQorCisJbWFsbG9jX211dGV4X2xvY2sodHNkX3RzZG4odHNkKSwgJmJ0 MmdjdHhfbXR4KTsKK30KKworc3RhdGljIHZvaWQKK3Byb2ZfbGVhdmUodHNkX3QgKnRzZCwgcHJv Zl90ZGF0YV90ICp0ZGF0YSkgeworCWNhc3NlcnQoY29uZmlnX3Byb2YpOworCWFzc2VydCh0ZGF0 YSA9PSBwcm9mX3RkYXRhX2dldCh0c2QsIGZhbHNlKSk7CisKKwltYWxsb2NfbXV0ZXhfdW5sb2Nr KHRzZF90c2RuKHRzZCksICZidDJnY3R4X210eCk7CisKKwlpZiAodGRhdGEgIT0gTlVMTCkgewor CQlib29sIGlkdW1wLCBnZHVtcDsKKworCQlhc3NlcnQodGRhdGEtPmVucSk7CisJCXRkYXRhLT5l bnEgPSBmYWxzZTsKKwkJaWR1bXAgPSB0ZGF0YS0+ZW5xX2lkdW1wOworCQl0ZGF0YS0+ZW5xX2lk dW1wID0gZmFsc2U7CisJCWdkdW1wID0gdGRhdGEtPmVucV9nZHVtcDsKKwkJdGRhdGEtPmVucV9n ZHVtcCA9IGZhbHNlOworCisJCWlmIChpZHVtcCkgeworCQkJcHJvZl9pZHVtcCh0c2RfdHNkbih0 c2QpKTsKKwkJfQorCQlpZiAoZ2R1bXApIHsKKwkJCXByb2ZfZ2R1bXAodHNkX3RzZG4odHNkKSk7 CisJCX0KKwl9Cit9CisKK3N0YXRpYyBwcm9mX2djdHhfdCAqCitwcm9mX2djdHhfY3JlYXRlKHRz ZG5fdCAqdHNkbiwgcHJvZl9idF90ICpidCkgeworCS8qCisJICogQ3JlYXRlIGEgc2luZ2xlIGFs bG9jYXRpb24gdGhhdCBoYXMgc3BhY2UgZm9yIHZlYyBvZiBsZW5ndGggYnQtPmxlbi4KKwkgKi8K KwlzaXplX3Qgc2l6ZSA9IG9mZnNldG9mKHByb2ZfZ2N0eF90LCB2ZWMpICsgKGJ0LT5sZW4gKiBz aXplb2Yodm9pZCAqKSk7CisJcHJvZl9nY3R4X3QgKmdjdHggPSAocHJvZl9nY3R4X3QgKilpYWxs b2N6dG0odHNkbiwgc2l6ZSwKKwkgICAgc3pfc2l6ZTJpbmRleChzaXplKSwgZmFsc2UsIE5VTEws IHRydWUsIGFyZW5hX2dldChUU0ROX05VTEwsIDAsIHRydWUpLAorCSAgICB0cnVlKTsKKwlpZiAo Z2N0eCA9PSBOVUxMKSB7CisJCXJldHVybiBOVUxMOworCX0KKwlnY3R4LT5sb2NrID0gcHJvZl9n Y3R4X211dGV4X2Nob29zZSgpOworCS8qCisJICogU2V0IG5saW1ibyB0byAxLCBpbiBvcmRlciB0 byBhdm9pZCBhIHJhY2UgY29uZGl0aW9uIHdpdGgKKwkgKiBwcm9mX3RjdHhfZGVzdHJveSgpL3By b2ZfZ2N0eF90cnlfZGVzdHJveSgpLgorCSAqLworCWdjdHgtPm5saW1ibyA9IDE7CisJdGN0eF90 cmVlX25ldygmZ2N0eC0+dGN0eHMpOworCS8qIER1cGxpY2F0ZSBidC4gKi8KKwltZW1jcHkoZ2N0 eC0+dmVjLCBidC0+dmVjLCBidC0+bGVuICogc2l6ZW9mKHZvaWQgKikpOworCWdjdHgtPmJ0LnZl YyA9IGdjdHgtPnZlYzsKKwlnY3R4LT5idC5sZW4gPSBidC0+bGVuOworCXJldHVybiBnY3R4Owor fQorCitzdGF0aWMgdm9pZAorcHJvZl9nY3R4X3RyeV9kZXN0cm95KHRzZF90ICp0c2QsIHByb2Zf dGRhdGFfdCAqdGRhdGFfc2VsZiwKKyAgICBwcm9mX2djdHhfdCAqZ2N0eCkgeworCWNhc3NlcnQo Y29uZmlnX3Byb2YpOworCisJLyoKKwkgKiBDaGVjayB0aGF0IGdjdHggaXMgc3RpbGwgdW51c2Vk IGJ5IGFueSB0aHJlYWQgY2FjaGUgYmVmb3JlIGRlc3Ryb3lpbmcKKwkgKiBpdC4gIHByb2ZfbG9v a3VwKCkgaW5jcmVtZW50cyBnY3R4LT5ubGltYm8gaW4gb3JkZXIgdG8gYXZvaWQgYSByYWNlCisJ ICogY29uZGl0aW9uIHdpdGggdGhpcyBmdW5jdGlvbiwgYXMgZG9lcyBwcm9mX3RjdHhfZGVzdHJv eSgpIGluIG9yZGVyIHRvCisJICogYXZvaWQgYSByYWNlIGJldHdlZW4gdGhlIG1haW4gYm9keSBv ZiBwcm9mX3RjdHhfZGVzdHJveSgpIGFuZCBlbnRyeQorCSAqIGludG8gdGhpcyBmdW5jdGlvbi4K KwkgKi8KKwlwcm9mX2VudGVyKHRzZCwgdGRhdGFfc2VsZik7CisJbWFsbG9jX211dGV4X2xvY2so dHNkX3RzZG4odHNkKSwgZ2N0eC0+bG9jayk7CisJYXNzZXJ0KGdjdHgtPm5saW1ibyAhPSAwKTsK KwlpZiAodGN0eF90cmVlX2VtcHR5KCZnY3R4LT50Y3R4cykgJiYgZ2N0eC0+bmxpbWJvID09IDEp IHsKKwkJLyogUmVtb3ZlIGdjdHggZnJvbSBidDJnY3R4LiAqLworCQlpZiAoY2toX3JlbW92ZSh0 c2QsICZidDJnY3R4LCAmZ2N0eC0+YnQsIE5VTEwsIE5VTEwpKSB7CisJCQlub3RfcmVhY2hlZCgp OworCQl9CisJCXByb2ZfbGVhdmUodHNkLCB0ZGF0YV9zZWxmKTsKKwkJLyogRGVzdHJveSBnY3R4 LiAqLworCQltYWxsb2NfbXV0ZXhfdW5sb2NrKHRzZF90c2RuKHRzZCksIGdjdHgtPmxvY2spOwor CQlpZGFsbG9jdG0odHNkX3RzZG4odHNkKSwgZ2N0eCwgTlVMTCwgTlVMTCwgdHJ1ZSwgdHJ1ZSk7 CisJfSBlbHNlIHsKKwkJLyoKKwkJICogQ29tcGVuc2F0ZSBmb3IgaW5jcmVtZW50IGluIHByb2Zf dGN0eF9kZXN0cm95KCkgb3IKKwkJICogcHJvZl9sb29rdXAoKS4KKwkJICovCisJCWdjdHgtPm5s aW1iby0tOworCQltYWxsb2NfbXV0ZXhfdW5sb2NrKHRzZF90c2RuKHRzZCksIGdjdHgtPmxvY2sp OworCQlwcm9mX2xlYXZlKHRzZCwgdGRhdGFfc2VsZik7CisJfQorfQorCitzdGF0aWMgYm9vbAor cHJvZl9nY3R4X3Nob3VsZF9kZXN0cm95KHByb2ZfZ2N0eF90ICpnY3R4KSB7CisJaWYgKG9wdF9w cm9mX2FjY3VtKSB7CisJCXJldHVybiBmYWxzZTsKKwl9CisJaWYgKCF0Y3R4X3RyZWVfZW1wdHko JmdjdHgtPnRjdHhzKSkgeworCQlyZXR1cm4gZmFsc2U7CisJfQorCWlmIChnY3R4LT5ubGltYm8g IT0gMCkgeworCQlyZXR1cm4gZmFsc2U7CisJfQorCXJldHVybiB0cnVlOworfQorCitzdGF0aWMg Ym9vbAorcHJvZl9sb29rdXBfZ2xvYmFsKHRzZF90ICp0c2QsIHByb2ZfYnRfdCAqYnQsIHByb2Zf dGRhdGFfdCAqdGRhdGEsCisgICAgdm9pZCAqKnBfYnRrZXksIHByb2ZfZ2N0eF90ICoqcF9nY3R4 LCBib29sICpwX25ld19nY3R4KSB7CisJdW5pb24geworCQlwcm9mX2djdHhfdAkqcDsKKwkJdm9p ZAkJKnY7CisJfSBnY3R4LCB0Z2N0eDsKKwl1bmlvbiB7CisJCXByb2ZfYnRfdAkqcDsKKwkJdm9p ZAkJKnY7CisJfSBidGtleTsKKwlib29sIG5ld19nY3R4OworCisJcHJvZl9lbnRlcih0c2QsIHRk YXRhKTsKKwlpZiAoY2toX3NlYXJjaCgmYnQyZ2N0eCwgYnQsICZidGtleS52LCAmZ2N0eC52KSkg eworCQkvKiBidCBoYXMgbmV2ZXIgYmVlbiBzZWVuIGJlZm9yZS4gIEluc2VydCBpdC4gKi8KKwkJ cHJvZl9sZWF2ZSh0c2QsIHRkYXRhKTsKKwkJdGdjdHgucCA9IHByb2ZfZ2N0eF9jcmVhdGUodHNk X3RzZG4odHNkKSwgYnQpOworCQlpZiAodGdjdHgudiA9PSBOVUxMKSB7CisJCQlyZXR1cm4gdHJ1 ZTsKKwkJfQorCQlwcm9mX2VudGVyKHRzZCwgdGRhdGEpOworCQlpZiAoY2toX3NlYXJjaCgmYnQy Z2N0eCwgYnQsICZidGtleS52LCAmZ2N0eC52KSkgeworCQkJZ2N0eC5wID0gdGdjdHgucDsKKwkJ CWJ0a2V5LnAgPSAmZ2N0eC5wLT5idDsKKwkJCWlmIChja2hfaW5zZXJ0KHRzZCwgJmJ0MmdjdHgs IGJ0a2V5LnYsIGdjdHgudikpIHsKKwkJCQkvKiBPT00uICovCisJCQkJcHJvZl9sZWF2ZSh0c2Qs IHRkYXRhKTsKKwkJCQlpZGFsbG9jdG0odHNkX3RzZG4odHNkKSwgZ2N0eC52LCBOVUxMLCBOVUxM LAorCQkJCSAgICB0cnVlLCB0cnVlKTsKKwkJCQlyZXR1cm4gdHJ1ZTsKKwkJCX0KKwkJCW5ld19n Y3R4ID0gdHJ1ZTsKKwkJfSBlbHNlIHsKKwkJCW5ld19nY3R4ID0gZmFsc2U7CisJCX0KKwl9IGVs c2UgeworCQl0Z2N0eC52ID0gTlVMTDsKKwkJbmV3X2djdHggPSBmYWxzZTsKKwl9CisKKwlpZiAo IW5ld19nY3R4KSB7CisJCS8qCisJCSAqIEluY3JlbWVudCBubGltYm8sIGluIG9yZGVyIHRvIGF2 b2lkIGEgcmFjZSBjb25kaXRpb24gd2l0aAorCQkgKiBwcm9mX3RjdHhfZGVzdHJveSgpL3Byb2Zf Z2N0eF90cnlfZGVzdHJveSgpLgorCQkgKi8KKwkJbWFsbG9jX211dGV4X2xvY2sodHNkX3RzZG4o dHNkKSwgZ2N0eC5wLT5sb2NrKTsKKwkJZ2N0eC5wLT5ubGltYm8rKzsKKwkJbWFsbG9jX211dGV4 X3VubG9jayh0c2RfdHNkbih0c2QpLCBnY3R4LnAtPmxvY2spOworCQluZXdfZ2N0eCA9IGZhbHNl OworCisJCWlmICh0Z2N0eC52ICE9IE5VTEwpIHsKKwkJCS8qIExvc3QgcmFjZSB0byBpbnNlcnQu ICovCisJCQlpZGFsbG9jdG0odHNkX3RzZG4odHNkKSwgdGdjdHgudiwgTlVMTCwgTlVMTCwgdHJ1 ZSwKKwkJCSAgICB0cnVlKTsKKwkJfQorCX0KKwlwcm9mX2xlYXZlKHRzZCwgdGRhdGEpOworCisJ KnBfYnRrZXkgPSBidGtleS52OworCSpwX2djdHggPSBnY3R4LnA7CisJKnBfbmV3X2djdHggPSBu ZXdfZ2N0eDsKKwlyZXR1cm4gZmFsc2U7Cit9CisKK3Byb2ZfdGN0eF90ICoKK3Byb2ZfbG9va3Vw KHRzZF90ICp0c2QsIHByb2ZfYnRfdCAqYnQpIHsKKwl1bmlvbiB7CisJCXByb2ZfdGN0eF90CSpw OworCQl2b2lkCQkqdjsKKwl9IHJldDsKKwlwcm9mX3RkYXRhX3QgKnRkYXRhOworCWJvb2wgbm90 X2ZvdW5kOworCisJY2Fzc2VydChjb25maWdfcHJvZik7CisKKwl0ZGF0YSA9IHByb2ZfdGRhdGFf Z2V0KHRzZCwgZmFsc2UpOworCWFzc2VydCh0ZGF0YSAhPSBOVUxMKTsKKworCW1hbGxvY19tdXRl eF9sb2NrKHRzZF90c2RuKHRzZCksIHRkYXRhLT5sb2NrKTsKKwlub3RfZm91bmQgPSBja2hfc2Vh cmNoKCZ0ZGF0YS0+YnQydGN0eCwgYnQsIE5VTEwsICZyZXQudik7CisJaWYgKCFub3RfZm91bmQp IHsgLyogTm90ZSBkb3VibGUgbmVnYXRpdmUhICovCisJCXJldC5wLT5wcmVwYXJlZCA9IHRydWU7 CisJfQorCW1hbGxvY19tdXRleF91bmxvY2sodHNkX3RzZG4odHNkKSwgdGRhdGEtPmxvY2spOwor CWlmIChub3RfZm91bmQpIHsKKwkJdm9pZCAqYnRrZXk7CisJCXByb2ZfZ2N0eF90ICpnY3R4Owor CQlib29sIG5ld19nY3R4LCBlcnJvcjsKKworCQkvKgorCQkgKiBUaGlzIHRocmVhZCdzIGNhY2hl IGxhY2tzIGJ0LiAgTG9vayBmb3IgaXQgaW4gdGhlIGdsb2JhbAorCQkgKiBjYWNoZS4KKwkJICov CisJCWlmIChwcm9mX2xvb2t1cF9nbG9iYWwodHNkLCBidCwgdGRhdGEsICZidGtleSwgJmdjdHgs CisJCSAgICAmbmV3X2djdHgpKSB7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCisJCS8qIExpbmsg YSBwcm9mX3RjdHhfdCBpbnRvIGdjdHggZm9yIHRoaXMgdGhyZWFkLiAqLworCQlyZXQudiA9IGlh bGxvY3p0bSh0c2RfdHNkbih0c2QpLCBzaXplb2YocHJvZl90Y3R4X3QpLAorCQkgICAgc3pfc2l6 ZTJpbmRleChzaXplb2YocHJvZl90Y3R4X3QpKSwgZmFsc2UsIE5VTEwsIHRydWUsCisJCSAgICBh cmVuYV9pY2hvb3NlKHRzZCwgTlVMTCksIHRydWUpOworCQlpZiAocmV0LnAgPT0gTlVMTCkgewor CQkJaWYgKG5ld19nY3R4KSB7CisJCQkJcHJvZl9nY3R4X3RyeV9kZXN0cm95KHRzZCwgdGRhdGEs IGdjdHgpOworCQkJfQorCQkJcmV0dXJuIE5VTEw7CisJCX0KKwkJcmV0LnAtPnRkYXRhID0gdGRh dGE7CisJCXJldC5wLT50aHJfdWlkID0gdGRhdGEtPnRocl91aWQ7CisJCXJldC5wLT50aHJfZGlz Y3JpbSA9IHRkYXRhLT50aHJfZGlzY3JpbTsKKwkJcmV0LnAtPnJlY2VudF9jb3VudCA9IDA7CisJ CW1lbXNldCgmcmV0LnAtPmNudHMsIDAsIHNpemVvZihwcm9mX2NudF90KSk7CisJCXJldC5wLT5n Y3R4ID0gZ2N0eDsKKwkJcmV0LnAtPnRjdHhfdWlkID0gdGRhdGEtPnRjdHhfdWlkX25leHQrKzsK KwkJcmV0LnAtPnByZXBhcmVkID0gdHJ1ZTsKKwkJcmV0LnAtPnN0YXRlID0gcHJvZl90Y3R4X3N0 YXRlX2luaXRpYWxpemluZzsKKwkJbWFsbG9jX211dGV4X2xvY2sodHNkX3RzZG4odHNkKSwgdGRh dGEtPmxvY2spOworCQllcnJvciA9IGNraF9pbnNlcnQodHNkLCAmdGRhdGEtPmJ0MnRjdHgsIGJ0 a2V5LCByZXQudik7CisJCW1hbGxvY19tdXRleF91bmxvY2sodHNkX3RzZG4odHNkKSwgdGRhdGEt PmxvY2spOworCQlpZiAoZXJyb3IpIHsKKwkJCWlmIChuZXdfZ2N0eCkgeworCQkJCXByb2ZfZ2N0 eF90cnlfZGVzdHJveSh0c2QsIHRkYXRhLCBnY3R4KTsKKwkJCX0KKwkJCWlkYWxsb2N0bSh0c2Rf dHNkbih0c2QpLCByZXQudiwgTlVMTCwgTlVMTCwgdHJ1ZSwgdHJ1ZSk7CisJCQlyZXR1cm4gTlVM TDsKKwkJfQorCQltYWxsb2NfbXV0ZXhfbG9jayh0c2RfdHNkbih0c2QpLCBnY3R4LT5sb2NrKTsK KwkJcmV0LnAtPnN0YXRlID0gcHJvZl90Y3R4X3N0YXRlX25vbWluYWw7CisJCXRjdHhfdHJlZV9p bnNlcnQoJmdjdHgtPnRjdHhzLCByZXQucCk7CisJCWdjdHgtPm5saW1iby0tOworCQltYWxsb2Nf bXV0ZXhfdW5sb2NrKHRzZF90c2RuKHRzZCksIGdjdHgtPmxvY2spOworCX0KKworCXJldHVybiBy ZXQucDsKK30KKworLyogVXNlZCBpbiB1bml0IHRlc3RzLiAqLworc3RhdGljIHByb2ZfdGRhdGFf dCAqCitwcm9mX3RkYXRhX2NvdW50X2l0ZXIocHJvZl90ZGF0YV90cmVlX3QgKnRkYXRhc19wdHIs IHByb2ZfdGRhdGFfdCAqdGRhdGEsCisgICAgdm9pZCAqYXJnKSB7CisJc2l6ZV90ICp0ZGF0YV9j b3VudCA9IChzaXplX3QgKilhcmc7CisKKwkoKnRkYXRhX2NvdW50KSsrOworCisJcmV0dXJuIE5V TEw7Cit9CisKKy8qIFVzZWQgaW4gdW5pdCB0ZXN0cy4gKi8KK3NpemVfdAorcHJvZl90ZGF0YV9j b3VudCh2b2lkKSB7CisJc2l6ZV90IHRkYXRhX2NvdW50ID0gMDsKKwl0c2RuX3QgKnRzZG47CisK Kwl0c2RuID0gdHNkbl9mZXRjaCgpOworCW1hbGxvY19tdXRleF9sb2NrKHRzZG4sICZ0ZGF0YXNf bXR4KTsKKwl0ZGF0YV90cmVlX2l0ZXIoJnRkYXRhcywgTlVMTCwgcHJvZl90ZGF0YV9jb3VudF9p dGVyLAorCSAgICAodm9pZCAqKSZ0ZGF0YV9jb3VudCk7CisJbWFsbG9jX211dGV4X3VubG9jayh0 c2RuLCAmdGRhdGFzX210eCk7CisKKwlyZXR1cm4gdGRhdGFfY291bnQ7Cit9CisKKy8qIFVzZWQg aW4gdW5pdCB0ZXN0cy4gKi8KK3NpemVfdAorcHJvZl9idF9jb3VudCh2b2lkKSB7CisJc2l6ZV90 IGJ0X2NvdW50OworCXRzZF90ICp0c2Q7CisJcHJvZl90ZGF0YV90ICp0ZGF0YTsKKworCXRzZCA9 IHRzZF9mZXRjaCgpOworCXRkYXRhID0gcHJvZl90ZGF0YV9nZXQodHNkLCBmYWxzZSk7CisJaWYg KHRkYXRhID09IE5VTEwpIHsKKwkJcmV0dXJuIDA7CisJfQorCisJbWFsbG9jX211dGV4X2xvY2so dHNkX3RzZG4odHNkKSwgJmJ0MmdjdHhfbXR4KTsKKwlidF9jb3VudCA9IGNraF9jb3VudCgmYnQy Z2N0eCk7CisJbWFsbG9jX211dGV4X3VubG9jayh0c2RfdHNkbih0c2QpLCAmYnQyZ2N0eF9tdHgp OworCisJcmV0dXJuIGJ0X2NvdW50OworfQorCitjaGFyICoKK3Byb2ZfdGhyZWFkX25hbWVfYWxs b2ModHNkX3QgKnRzZCwgY29uc3QgY2hhciAqdGhyZWFkX25hbWUpIHsKKwljaGFyICpyZXQ7CisJ c2l6ZV90IHNpemU7CisKKwlpZiAodGhyZWFkX25hbWUgPT0gTlVMTCkgeworCQlyZXR1cm4gTlVM TDsKKwl9CisKKwlzaXplID0gc3RybGVuKHRocmVhZF9uYW1lKSArIDE7CisJaWYgKHNpemUgPT0g MSkgeworCQlyZXR1cm4gIiI7CisJfQorCisJcmV0ID0gaWFsbG9jenRtKHRzZF90c2RuKHRzZCks IHNpemUsIHN6X3NpemUyaW5kZXgoc2l6ZSksIGZhbHNlLCBOVUxMLAorCSAgICB0cnVlLCBhcmVu YV9nZXQoVFNETl9OVUxMLCAwLCB0cnVlKSwgdHJ1ZSk7CisJaWYgKHJldCA9PSBOVUxMKSB7CisJ CXJldHVybiBOVUxMOworCX0KKwltZW1jcHkocmV0LCB0aHJlYWRfbmFtZSwgc2l6ZSk7CisJcmV0 dXJuIHJldDsKK30KKworaW50Citwcm9mX3RocmVhZF9uYW1lX3NldF9pbXBsKHRzZF90ICp0c2Qs IGNvbnN0IGNoYXIgKnRocmVhZF9uYW1lKSB7CisJYXNzZXJ0KHRzZF9yZWVudHJhbmN5X2xldmVs X2dldCh0c2QpID09IDApOworCisJcHJvZl90ZGF0YV90ICp0ZGF0YTsKKwl1bnNpZ25lZCBpOwor CWNoYXIgKnM7CisKKwl0ZGF0YSA9IHByb2ZfdGRhdGFfZ2V0KHRzZCwgdHJ1ZSk7CisJaWYgKHRk YXRhID09IE5VTEwpIHsKKwkJcmV0dXJuIEVBR0FJTjsKKwl9CisKKwkvKiBWYWxpZGF0ZSBpbnB1 dC4gKi8KKwlpZiAodGhyZWFkX25hbWUgPT0gTlVMTCkgeworCQlyZXR1cm4gRUZBVUxUOworCX0K Kwlmb3IgKGkgPSAwOyB0aHJlYWRfbmFtZVtpXSAhPSAnXDAnOyBpKyspIHsKKwkJY2hhciBjID0g dGhyZWFkX25hbWVbaV07CisJCWlmICghaXNncmFwaChjKSAmJiAhaXNibGFuayhjKSkgeworCQkJ cmV0dXJuIEVGQVVMVDsKKwkJfQorCX0KKworCXMgPSBwcm9mX3RocmVhZF9uYW1lX2FsbG9jKHRz ZCwgdGhyZWFkX25hbWUpOworCWlmIChzID09IE5VTEwpIHsKKwkJcmV0dXJuIEVBR0FJTjsKKwl9 CisKKwlpZiAodGRhdGEtPnRocmVhZF9uYW1lICE9IE5VTEwpIHsKKwkJaWRhbGxvY3RtKHRzZF90 c2RuKHRzZCksIHRkYXRhLT50aHJlYWRfbmFtZSwgTlVMTCwgTlVMTCwgdHJ1ZSwKKwkJICAgIHRy dWUpOworCQl0ZGF0YS0+dGhyZWFkX25hbWUgPSBOVUxMOworCX0KKwlpZiAoc3RybGVuKHMpID4g MCkgeworCQl0ZGF0YS0+dGhyZWFkX25hbWUgPSBzOworCX0KKwlyZXR1cm4gMDsKK30KKworSkVN QUxMT0NfRk9STUFUX1BSSU5URigzLCA0KQorc3RhdGljIHZvaWQKK3Byb2ZfZHVtcF9wcmludGYo d3JpdGVfY2JfdCAqcHJvZl9kdW1wX3dyaXRlLCB2b2lkICpjYm9wYXF1ZSwKKyAgICBjb25zdCBj aGFyICpmb3JtYXQsIC4uLikgeworCXZhX2xpc3QgYXA7CisJY2hhciBidWZbUFJPRl9QUklOVEZf QlVGU0laRV07CisKKwl2YV9zdGFydChhcCwgZm9ybWF0KTsKKwltYWxsb2NfdnNucHJpbnRmKGJ1 Ziwgc2l6ZW9mKGJ1ZiksIGZvcm1hdCwgYXApOworCXZhX2VuZChhcCk7CisJcHJvZl9kdW1wX3dy aXRlKGNib3BhcXVlLCBidWYpOworfQorCisvKgorICogQ2FzdGluZyBhIGRvdWJsZSB0byBhIHVp bnQ2NF90IG1heSBub3QgbmVjZXNzYXJpbHkgYmUgaW4gcmFuZ2U7IHRoaXMgY2FuIGJlCisgKiBV Qi4gIEkgZG9uJ3QgdGhpbmsgdGhpcyBpcyBwcmFjdGljYWxseSBwb3NzaWJsZSB3aXRoIHRoZSBj dXIgY291bnRlcnMsIGJ1dAorICogcGxhdXNpYmx5IGNvdWxkIGJlIHdpdGggdGhlIGFjY3VtIGNv dW50ZXJzLgorICovCisjaWZkZWYgSkVNQUxMT0NfUFJPRgorc3RhdGljIHVpbnQ2NF90Citwcm9m X2RvdWJsZV91aW50NjRfY2FzdChkb3VibGUgZCkgeworCS8qCisJICogTm90ZTogVUlOVDY0X01B WCArIDEgaXMgZXhhY3RseSByZXByZXNlbnRhYmxlIGFzIGEgZG91YmxlIG9uIGFsbAorCSAqIHJl YXNvbmFibGUgcGxhdGZvcm1zIChjZXJ0YWlubHkgdGhvc2Ugd2UnbGwgc3VwcG9ydCkuICBXcml0 aW5nIHRoaXMKKwkgKiBhcyAhKGEgPCBiKSBpbnN0ZWFkIG9mIChhID49IGIpIG1lYW5zIHRoYXQg d2UncmUgTmFOLXNhZmUuCisJICovCisJZG91YmxlIHJvdW5kZWQgPSByb3VuZChkKTsKKwlpZiAo IShyb3VuZGVkIDwgKGRvdWJsZSlVSU5UNjRfTUFYKSkgeworCQlyZXR1cm4gVUlOVDY0X01BWDsK Kwl9CisJcmV0dXJuICh1aW50NjRfdClyb3VuZGVkOworfQorI2VuZGlmCisKK3ZvaWQgcHJvZl91 bmJpYXNfbWFwX2luaXQoKSB7CisJLyogU2VlIHRoZSBjb21tZW50IGluIHByb2Zfc2FtcGxlX25l d19ldmVudF93YWl0ICovCisjaWZkZWYgSkVNQUxMT0NfUFJPRgorCWZvciAoc3ppbmRfdCBpID0g MDsgaSA8IFNDX05TSVpFUzsgaSsrKSB7CisJCWRvdWJsZSBzeiA9IChkb3VibGUpc3pfaW5kZXgy c2l6ZShpKTsKKwkJZG91YmxlIHJhdGUgPSAoZG91YmxlKShaVSgxKSA8PCBsZ19wcm9mX3NhbXBs ZSk7CisJCWRvdWJsZSBkaXZfdmFsID0gMS4wIC0gZXhwKC1zeiAvIHJhdGUpOworCQlkb3VibGUg dW5iaWFzZWRfc3ogPSBzeiAvIGRpdl92YWw7CisJCS8qCisJCSAqIFRoZSAidHJ1ZSIgcmlnaHQg dmFsdWUgZm9yIHRoZSB1bmJpYXNlZCBjb3VudCBpcworCQkgKiAxLjAvKDEgLSBleHAoLXN6L3Jh dGUpKS4gIFRoZSBwcm9ibGVtIGlzLCB3ZSBrZWVwIHRoZSBjb3VudHMKKwkJICogYXMgaW50ZWdl cnMgKGZvciBhIHZhcmlldHkgb2YgcmVhc29ucyAtLSByb3VuZGluZyBlcnJvcnMKKwkJICogY291 bGQgdHJpZ2dlciBhc3NlcnRzLCBhbmQgbm90IGFsbCBsaWJjcyBjYW4gcHJvcGVybHkgaGFuZGxl CisJCSAqIGZsb2F0aW5nIHBvaW50IGFyaXRobWV0aWMgZHVyaW5nIG1hbGxvYyBjYWxscyBpbnNp ZGUgbGliYykuCisJCSAqIFJvdW5kaW5nIHRvIGFuIGludGVnZXIsIHRob3VnaCwgY2FuIGxlYWQg dG8gcm91bmRpbmcgZXJyb3JzCisJCSAqIG9mIG92ZXIgMzAlIGZvciBzaXplcyBjbG9zZSB0byB0 aGUgc2FtcGxpbmcgcmF0ZS4gIFNvCisJCSAqIGluc3RlYWQsIHdlIG11bHRpcGx5IGJ5IGEgY29u c3RhbnQsIGRpdmlkaW5nIHRoZSBtYXhpbXVtCisJCSAqIHBvc3NpYmxlIHJvdW5kb2ZmIGVycm9y IGJ5IHRoYXQgY29uc3RhbnQuICBUbyBhdm9pZCBvdmVyZmxvdworCQkgKiBpbiBzdW1taW5nIHVw IHNpemVfdCB2YWx1ZXMsIHRoZSBsYXJnZXN0IHNhZmUgY29uc3RhbnQgd2UgY2FuCisJCSAqIHBp Y2sgaXMgdGhlIHNpemUgb2YgdGhlIHNtYWxsZXN0IGFsbG9jYXRpb24uCisJCSAqLworCQlkb3Vi bGUgY250X3NoaWZ0ID0gKGRvdWJsZSkoWlUoMSkgPDwgU0NfTEdfVElOWV9NSU4pOworCQlkb3Vi bGUgc2hpZnRlZF91bmJpYXNlZF9jbnQgPSBjbnRfc2hpZnQgLyBkaXZfdmFsOworCQlwcm9mX3Vu Ymlhc2VkX3N6W2ldID0gKHNpemVfdClyb3VuZCh1bmJpYXNlZF9zeik7CisJCXByb2Zfc2hpZnRl ZF91bmJpYXNlZF9jbnRbaV0gPSAoc2l6ZV90KXJvdW5kKAorCQkgICAgc2hpZnRlZF91bmJpYXNl ZF9jbnQpOworCX0KKyNlbHNlCisJdW5yZWFjaGFibGUoKTsKKyNlbmRpZgorfQorCisvKgorICog VGhlIHVuYmlhc2luZyBzdG9yeSBpcyBsb25nLiAgVGhlIGplcHJvZiB1bmJpYXNpbmcgbG9naWMg d2FzIGNvcGllZCBmcm9tCisgKiBwcHJvZi4gIEJvdGggc2hhcmVkIGFuIGlzc3VlOiB0aGV5IHVu Ymlhc2VkIHVzaW5nIHRoZSBhdmVyYWdlIHNpemUgb2YgdGhlCisgKiBhbGxvY2F0aW9ucyBhdCBh IHBhcnRpY3VsYXIgc3RhY2sgdHJhY2UuICBUaGlzIGNhbiB3b3JrIG91dCBPSyBpZiBhbGxvY2F0 aW9ucworICogYXJlIG1vc3RseSBvZiB0aGUgc2FtZSBzaXplIGdpdmVuIHNvbWUgc3RhY2ssIGJ1 dCBub3Qgb3RoZXJ3aXNlLiAgV2Ugbm93CisgKiBpbnRlcm5hbGx5IHRyYWNrIHdoYXQgdGhlIHVu Ymlhc2VkIHJlc3VsdHMgb3VnaHQgdG8gYmUuICBXZSBjYW4ndCBqdXN0IHJlcG9ydAorICogdGhl bSBhcyB0aGV5IGFyZSB0aG91Z2g7IHRoZXknbGwgc3RpbGwgZ28gdGhyb3VnaCB0aGUgamVwcm9m IHVuYmlhc2luZworICogcHJvY2Vzcy4gIEluc3RlYWQsIHdlIGZpZ3VyZSBvdXQgd2hhdCB2YWx1 ZXMgd2UgY2FuIGZlZWQgKmludG8qIGplcHJvZidzCisgKiB1bmJpYXNpbmcgbWVjaGFuaXNtIHRo YXQgd2lsbCBsZWFkIHRvIGdldHRpbmcgdGhlIHJpZ2h0IHZhbHVlcyBvdXQuCisgKgorICogSXQn bGwgdW5iaWFzIGNvdW50IGFuZCBhZ2dyZWdhdGUgc2l6ZSBhczoKKyAqCisgKiAgIGNfb3V0ID0g Y19pbiAqIDEvKDEtZXhwKC1zX2luL2NfaW4vUikKKyAqICAgc19vdXQgPSBzX2luICogMS8oMS1l eHAoLXNfaW4vY19pbi9SKQorICoKKyAqIFdlIHdhbnQgdG8gc29sdmUgZm9yIHRoZSB2YWx1ZXMg b2YgY19pbiBhbmQgc19pbiB0aGF0IHdpbGwKKyAqIGdpdmUgdGhlIGNfb3V0IGFuZCBzX291dCB0 aGF0IHdlJ3ZlIGNvbXB1dGVkIGludGVybmFsbHkuCisgKgorICogTGV0J3MgZG8gYSBjaGFuZ2Ug b2YgdmFyaWFibGVzIChib3RoIHRvIG1ha2UgdGhlIG1hdGggZWFzaWVyIGFuZCB0byBtYWtlIGl0 CisgKiBlYXNpZXIgdG8gd3JpdGUpOgorICogICB4ID0gc19pbiAvIGNfaW4KKyAqICAgeSA9IHNf aW4KKyAqICAgayA9IDEvUi4KKyAqCisgKiBUaGVuCisgKiAgIGNfb3V0ID0geS94ICogMS8oMS1l eHAoLWsqeCkpCisgKiAgIHNfb3V0ID0geSAqIDEvKDEtZXhwKC1rKngpKQorICoKKyAqIFRoZSBm aXJzdCBlcXVhdGlvbiBnaXZlczoKKyAqICAgeSA9IHggKiBjX291dCAqICgxLWV4cCgtayp4KSkK KyAqIFRoZSBzZWNvbmQgZ2l2ZXM6CisgKiAgIHkgPSBzX291dCAqICgxLWV4cCgtayp4KSkKKyAq IFNvIHdlIGhhdmUKKyAqICAgeCA9IHNfb3V0IC8gY19vdXQuCisgKiBBbmQgYWxsIHRoZSBvdGhl ciB2YWx1ZXMgZmFsbCBvdXQgZnJvbSB0aGF0LgorICoKKyAqIFRoaXMgaXMgYWxsIGEgZmFpciBi aXQgb2Ygd29yay4gIFRoZSB0aGluZyB3ZSBnZXQgb3V0IG9mIGl0IGlzIHRoYXQgd2UgZG9uJ3QK KyAqIGJyZWFrIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGggamVwcm9mIChhbmQgdGhlIHZh cmlvdXMgdG9vbHMgdGhhdCBoYXZlCisgKiBjb3BpZWQgaXRzIHVuYmlhc2luZyBsb2dpYykuICBF dmVudHVhbGx5LCB3ZSBhbnRpY2lwYXRlIGEgdjMgaGVhcCBwcm9maWxlCisgKiBkdW1wIGZvcm1h dCBiYXNlZCBvbiBKU09OLCBhdCB3aGljaCBwb2ludCBJIHRoaW5rIG11Y2ggb2YgdGhpcyBsb2dp YyBjYW4gZ2V0CisgKiBjbGVhbmVkIHVwIChzaW5jZSB3ZSdsbCBiZSB0YWtpbmcgYSBjb21wYXRp YmlsaXR5IGJyZWFrIHRoZXJlIGFueXdheXMpLgorICovCitzdGF0aWMgdm9pZAorcHJvZl9kb191 bmJpYXModWludDY0X3QgY19vdXRfc2hpZnRlZF9pLCB1aW50NjRfdCBzX291dF9pLCB1aW50NjRf dCAqcl9jX2luLAorICAgIHVpbnQ2NF90ICpyX3NfaW4pIHsKKyNpZmRlZiBKRU1BTExPQ19QUk9G CisJaWYgKGNfb3V0X3NoaWZ0ZWRfaSA9PSAwIHx8IHNfb3V0X2kgPT0gMCkgeworCQkqcl9jX2lu ID0gMDsKKwkJKnJfc19pbiA9IDA7CisJCXJldHVybjsKKwl9CisJLyoKKwkgKiBTZWUgdGhlIG5v dGUgaW4gcHJvZl91bmJpYXNfbWFwX2luaXQoKSB0byBzZWUgd2h5IHdlIHRha2UgY19vdXQgaW4g YQorCSAqIHNoaWZ0ZWQgZm9ybS4KKwkgKi8KKwlkb3VibGUgY19vdXQgPSAoZG91YmxlKWNfb3V0 X3NoaWZ0ZWRfaQorCSAgICAvIChkb3VibGUpKFpVKDEpIDw8IFNDX0xHX1RJTllfTUlOKTsKKwlk b3VibGUgc19vdXQgPSAoZG91YmxlKXNfb3V0X2k7CisJZG91YmxlIFIgPSAoZG91YmxlKShaVSgx KSA8PCBsZ19wcm9mX3NhbXBsZSk7CisKKwlkb3VibGUgeCA9IHNfb3V0IC8gY19vdXQ7CisJZG91 YmxlIHkgPSBzX291dCAqICgxLjAgLSBleHAoLXggLyBSKSk7CisKKwlkb3VibGUgY19pbiA9IHkg LyB4OworCWRvdWJsZSBzX2luID0geTsKKworCSpyX2NfaW4gPSBwcm9mX2RvdWJsZV91aW50NjRf Y2FzdChjX2luKTsKKwkqcl9zX2luID0gcHJvZl9kb3VibGVfdWludDY0X2Nhc3Qoc19pbik7Cisj ZWxzZQorCXVucmVhY2hhYmxlKCk7CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQKK3Byb2ZfZHVt cF9wcmludF9jbnRzKHdyaXRlX2NiX3QgKnByb2ZfZHVtcF93cml0ZSwgdm9pZCAqY2JvcGFxdWUs CisgICAgY29uc3QgcHJvZl9jbnRfdCAqY250cykgeworCXVpbnQ2NF90IGN1cm9ianM7CisJdWlu dDY0X3QgY3VyYnl0ZXM7CisJdWludDY0X3QgYWNjdW1vYmpzOworCXVpbnQ2NF90IGFjY3VtYnl0 ZXM7CisJaWYgKG9wdF9wcm9mX3VuYmlhcykgeworCQlwcm9mX2RvX3VuYmlhcyhjbnRzLT5jdXJv YmpzX3NoaWZ0ZWRfdW5iaWFzZWQsCisJCSAgICBjbnRzLT5jdXJieXRlc191bmJpYXNlZCwgJmN1 cm9ianMsICZjdXJieXRlcyk7CisJCXByb2ZfZG9fdW5iaWFzKGNudHMtPmFjY3Vtb2Jqc19zaGlm dGVkX3VuYmlhc2VkLAorCQkgICAgY250cy0+YWNjdW1ieXRlc191bmJpYXNlZCwgJmFjY3Vtb2Jq cywgJmFjY3VtYnl0ZXMpOworCX0gZWxzZSB7CisJCWN1cm9ianMgPSBjbnRzLT5jdXJvYmpzOwor CQljdXJieXRlcyA9IGNudHMtPmN1cmJ5dGVzOworCQlhY2N1bW9ianMgPSBjbnRzLT5hY2N1bW9i anM7CisJCWFjY3VtYnl0ZXMgPSBjbnRzLT5hY2N1bWJ5dGVzOworCX0KKwlwcm9mX2R1bXBfcHJp bnRmKHByb2ZfZHVtcF93cml0ZSwgY2JvcGFxdWUsCisJICAgICIlIkZNVHU2NCI6ICUiRk1UdTY0 IiBbJSJGTVR1NjQiOiAlIkZNVHU2NCJdIiwKKwkgICAgY3Vyb2JqcywgY3VyYnl0ZXMsIGFjY3Vt b2JqcywgYWNjdW1ieXRlcyk7Cit9CisKK3N0YXRpYyB2b2lkCitwcm9mX3RjdHhfbWVyZ2VfdGRh dGEodHNkbl90ICp0c2RuLCBwcm9mX3RjdHhfdCAqdGN0eCwgcHJvZl90ZGF0YV90ICp0ZGF0YSkg eworCW1hbGxvY19tdXRleF9hc3NlcnRfb3duZXIodHNkbiwgdGN0eC0+dGRhdGEtPmxvY2spOwor CisJbWFsbG9jX211dGV4X2xvY2sodHNkbiwgdGN0eC0+Z2N0eC0+bG9jayk7CisKKwlzd2l0Y2gg KHRjdHgtPnN0YXRlKSB7CisJY2FzZSBwcm9mX3RjdHhfc3RhdGVfaW5pdGlhbGl6aW5nOgorCQlt YWxsb2NfbXV0ZXhfdW5sb2NrKHRzZG4sIHRjdHgtPmdjdHgtPmxvY2spOworCQlyZXR1cm47CisJ Y2FzZSBwcm9mX3RjdHhfc3RhdGVfbm9taW5hbDoKKwkJdGN0eC0+c3RhdGUgPSBwcm9mX3RjdHhf c3RhdGVfZHVtcGluZzsKKwkJbWFsbG9jX211dGV4X3VubG9jayh0c2RuLCB0Y3R4LT5nY3R4LT5s b2NrKTsKKworCQltZW1jcHkoJnRjdHgtPmR1bXBfY250cywgJnRjdHgtPmNudHMsIHNpemVvZihw cm9mX2NudF90KSk7CisKKwkJdGRhdGEtPmNudF9zdW1tZWQuY3Vyb2JqcyArPSB0Y3R4LT5kdW1w X2NudHMuY3Vyb2JqczsKKwkJdGRhdGEtPmNudF9zdW1tZWQuY3Vyb2Jqc19zaGlmdGVkX3VuYmlh c2VkCisJCSAgICArPSB0Y3R4LT5kdW1wX2NudHMuY3Vyb2Jqc19zaGlmdGVkX3VuYmlhc2VkOwor CQl0ZGF0YS0+Y250X3N1bW1lZC5jdXJieXRlcyArPSB0Y3R4LT5kdW1wX2NudHMuY3VyYnl0ZXM7 CisJCXRkYXRhLT5jbnRfc3VtbWVkLmN1cmJ5dGVzX3VuYmlhc2VkCisJCSAgICArPSB0Y3R4LT5k dW1wX2NudHMuY3VyYnl0ZXNfdW5iaWFzZWQ7CisJCWlmIChvcHRfcHJvZl9hY2N1bSkgeworCQkJ dGRhdGEtPmNudF9zdW1tZWQuYWNjdW1vYmpzICs9CisJCQkgICAgdGN0eC0+ZHVtcF9jbnRzLmFj Y3Vtb2JqczsKKwkJCXRkYXRhLT5jbnRfc3VtbWVkLmFjY3Vtb2Jqc19zaGlmdGVkX3VuYmlhc2Vk ICs9CisJCQkgICAgdGN0eC0+ZHVtcF9jbnRzLmFjY3Vtb2Jqc19zaGlmdGVkX3VuYmlhc2VkOwor CQkJdGRhdGEtPmNudF9zdW1tZWQuYWNjdW1ieXRlcyArPQorCQkJICAgIHRjdHgtPmR1bXBfY250 cy5hY2N1bWJ5dGVzOworCQkJdGRhdGEtPmNudF9zdW1tZWQuYWNjdW1ieXRlc191bmJpYXNlZCAr PQorCQkJICAgIHRjdHgtPmR1bXBfY250cy5hY2N1bWJ5dGVzX3VuYmlhc2VkOworCQl9CisJCWJy ZWFrOworCWNhc2UgcHJvZl90Y3R4X3N0YXRlX2R1bXBpbmc6CisJY2FzZSBwcm9mX3RjdHhfc3Rh dGVfcHVyZ2F0b3J5OgorCQlub3RfcmVhY2hlZCgpOworCX0KK30KKworc3RhdGljIHZvaWQKK3By b2ZfdGN0eF9tZXJnZV9nY3R4KHRzZG5fdCAqdHNkbiwgcHJvZl90Y3R4X3QgKnRjdHgsIHByb2Zf Z2N0eF90ICpnY3R4KSB7CisJbWFsbG9jX211dGV4X2Fzc2VydF9vd25lcih0c2RuLCBnY3R4LT5s b2NrKTsKKworCWdjdHgtPmNudF9zdW1tZWQuY3Vyb2JqcyArPSB0Y3R4LT5kdW1wX2NudHMuY3Vy b2JqczsKKwlnY3R4LT5jbnRfc3VtbWVkLmN1cm9ianNfc2hpZnRlZF91bmJpYXNlZAorCSAgICAr PSB0Y3R4LT5kdW1wX2NudHMuY3Vyb2Jqc19zaGlmdGVkX3VuYmlhc2VkOworCWdjdHgtPmNudF9z dW1tZWQuY3VyYnl0ZXMgKz0gdGN0eC0+ZHVtcF9jbnRzLmN1cmJ5dGVzOworCWdjdHgtPmNudF9z dW1tZWQuY3VyYnl0ZXNfdW5iaWFzZWQgKz0gdGN0eC0+ZHVtcF9jbnRzLmN1cmJ5dGVzX3VuYmlh c2VkOworCWlmIChvcHRfcHJvZl9hY2N1bSkgeworCQlnY3R4LT5jbnRfc3VtbWVkLmFjY3Vtb2Jq cyArPSB0Y3R4LT5kdW1wX2NudHMuYWNjdW1vYmpzOworCQlnY3R4LT5jbnRfc3VtbWVkLmFjY3Vt b2Jqc19zaGlmdGVkX3VuYmlhc2VkCisJCSAgICArPSB0Y3R4LT5kdW1wX2NudHMuYWNjdW1vYmpz X3NoaWZ0ZWRfdW5iaWFzZWQ7CisJCWdjdHgtPmNudF9zdW1tZWQuYWNjdW1ieXRlcyArPSB0Y3R4 LT5kdW1wX2NudHMuYWNjdW1ieXRlczsKKwkJZ2N0eC0+Y250X3N1bW1lZC5hY2N1bWJ5dGVzX3Vu Ymlhc2VkCisJCSAgICArPSB0Y3R4LT5kdW1wX2NudHMuYWNjdW1ieXRlc191bmJpYXNlZDsKKwl9 Cit9CisKK3N0YXRpYyBwcm9mX3RjdHhfdCAqCitwcm9mX3RjdHhfbWVyZ2VfaXRlcihwcm9mX3Rj dHhfdHJlZV90ICp0Y3R4cywgcHJvZl90Y3R4X3QgKnRjdHgsIHZvaWQgKmFyZykgeworCXRzZG5f dCAqdHNkbiA9ICh0c2RuX3QgKilhcmc7CisKKwltYWxsb2NfbXV0ZXhfYXNzZXJ0X293bmVyKHRz ZG4sIHRjdHgtPmdjdHgtPmxvY2spOworCisJc3dpdGNoICh0Y3R4LT5zdGF0ZSkgeworCWNhc2Ug cHJvZl90Y3R4X3N0YXRlX25vbWluYWw6CisJCS8qIE5ldyBzaW5jZSBkdW1waW5nIHN0YXJ0ZWQ7 IGlnbm9yZS4gKi8KKwkJYnJlYWs7CisJY2FzZSBwcm9mX3RjdHhfc3RhdGVfZHVtcGluZzoKKwlj YXNlIHByb2ZfdGN0eF9zdGF0ZV9wdXJnYXRvcnk6CisJCXByb2ZfdGN0eF9tZXJnZV9nY3R4KHRz ZG4sIHRjdHgsIHRjdHgtPmdjdHgpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlub3RfcmVhY2hl ZCgpOworCX0KKworCXJldHVybiBOVUxMOworfQorCit0eXBlZGVmIHN0cnVjdCBwcm9mX2R1bXBf aXRlcl9hcmdfcyBwcm9mX2R1bXBfaXRlcl9hcmdfdDsKK3N0cnVjdCBwcm9mX2R1bXBfaXRlcl9h cmdfcyB7CisJdHNkbl90ICp0c2RuOworCXdyaXRlX2NiX3QgKnByb2ZfZHVtcF93cml0ZTsKKwl2 b2lkICpjYm9wYXF1ZTsKK307CisKK3N0YXRpYyBwcm9mX3RjdHhfdCAqCitwcm9mX3RjdHhfZHVt cF9pdGVyKHByb2ZfdGN0eF90cmVlX3QgKnRjdHhzLCBwcm9mX3RjdHhfdCAqdGN0eCwgdm9pZCAq b3BhcXVlKSB7CisJcHJvZl9kdW1wX2l0ZXJfYXJnX3QgKmFyZyA9IChwcm9mX2R1bXBfaXRlcl9h cmdfdCAqKW9wYXF1ZTsKKwltYWxsb2NfbXV0ZXhfYXNzZXJ0X293bmVyKGFyZy0+dHNkbiwgdGN0 eC0+Z2N0eC0+bG9jayk7CisKKwlzd2l0Y2ggKHRjdHgtPnN0YXRlKSB7CisJY2FzZSBwcm9mX3Rj dHhfc3RhdGVfaW5pdGlhbGl6aW5nOgorCWNhc2UgcHJvZl90Y3R4X3N0YXRlX25vbWluYWw6CisJ CS8qIE5vdCBjYXB0dXJlZCBieSB0aGlzIGR1bXAuICovCisJCWJyZWFrOworCWNhc2UgcHJvZl90 Y3R4X3N0YXRlX2R1bXBpbmc6CisJY2FzZSBwcm9mX3RjdHhfc3RhdGVfcHVyZ2F0b3J5OgorCQlw cm9mX2R1bXBfcHJpbnRmKGFyZy0+cHJvZl9kdW1wX3dyaXRlLCBhcmctPmNib3BhcXVlLAorCQkg ICAgIiAgdCUiRk1UdTY0IjogIiwgdGN0eC0+dGhyX3VpZCk7CisJCXByb2ZfZHVtcF9wcmludF9j bnRzKGFyZy0+cHJvZl9kdW1wX3dyaXRlLCBhcmctPmNib3BhcXVlLAorCQkgICAgJnRjdHgtPmR1 bXBfY250cyk7CisJCWFyZy0+cHJvZl9kdW1wX3dyaXRlKGFyZy0+Y2JvcGFxdWUsICJcbiIpOwor CQlicmVhazsKKwlkZWZhdWx0OgorCQlub3RfcmVhY2hlZCgpOworCX0KKwlyZXR1cm4gTlVMTDsK K30KKworc3RhdGljIHByb2ZfdGN0eF90ICoKK3Byb2ZfdGN0eF9maW5pc2hfaXRlcihwcm9mX3Rj dHhfdHJlZV90ICp0Y3R4cywgcHJvZl90Y3R4X3QgKnRjdHgsIHZvaWQgKmFyZykgeworCXRzZG5f dCAqdHNkbiA9ICh0c2RuX3QgKilhcmc7CisJcHJvZl90Y3R4X3QgKnJldDsKKworCW1hbGxvY19t dXRleF9hc3NlcnRfb3duZXIodHNkbiwgdGN0eC0+Z2N0eC0+bG9jayk7CisKKwlzd2l0Y2ggKHRj dHgtPnN0YXRlKSB7CisJY2FzZSBwcm9mX3RjdHhfc3RhdGVfbm9taW5hbDoKKwkJLyogTmV3IHNp bmNlIGR1bXBpbmcgc3RhcnRlZDsgaWdub3JlLiAqLworCQlicmVhazsKKwljYXNlIHByb2ZfdGN0 eF9zdGF0ZV9kdW1waW5nOgorCQl0Y3R4LT5zdGF0ZSA9IHByb2ZfdGN0eF9zdGF0ZV9ub21pbmFs OworCQlicmVhazsKKwljYXNlIHByb2ZfdGN0eF9zdGF0ZV9wdXJnYXRvcnk6CisJCXJldCA9IHRj dHg7CisJCWdvdG8gbGFiZWxfcmV0dXJuOworCWRlZmF1bHQ6CisJCW5vdF9yZWFjaGVkKCk7CisJ fQorCisJcmV0ID0gTlVMTDsKK2xhYmVsX3JldHVybjoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0 aWMgdm9pZAorcHJvZl9kdW1wX2djdHhfcHJlcCh0c2RuX3QgKnRzZG4sIHByb2ZfZ2N0eF90ICpn Y3R4LCBwcm9mX2djdHhfdHJlZV90ICpnY3R4cykgeworCWNhc3NlcnQoY29uZmlnX3Byb2YpOwor CisJbWFsbG9jX211dGV4X2xvY2sodHNkbiwgZ2N0eC0+bG9jayk7CisKKwkvKgorCSAqIEluY3Jl bWVudCBubGltYm8gc28gdGhhdCBnY3R4IHdvbid0IGdvIGF3YXkgYmVmb3JlIGR1bXAuCisJICog QWRkaXRpb25hbGx5LCBsaW5rIGdjdHggaW50byB0aGUgZHVtcCBsaXN0IHNvIHRoYXQgaXQgaXMg aW5jbHVkZWQgaW4KKwkgKiBwcm9mX2R1bXAoKSdzIHNlY29uZCBwYXNzLgorCSAqLworCWdjdHgt Pm5saW1ibysrOworCWdjdHhfdHJlZV9pbnNlcnQoZ2N0eHMsIGdjdHgpOworCisJbWVtc2V0KCZn Y3R4LT5jbnRfc3VtbWVkLCAwLCBzaXplb2YocHJvZl9jbnRfdCkpOworCisJbWFsbG9jX211dGV4 X3VubG9jayh0c2RuLCBnY3R4LT5sb2NrKTsKK30KKwordHlwZWRlZiBzdHJ1Y3QgcHJvZl9nY3R4 X21lcmdlX2l0ZXJfYXJnX3MgcHJvZl9nY3R4X21lcmdlX2l0ZXJfYXJnX3Q7CitzdHJ1Y3QgcHJv Zl9nY3R4X21lcmdlX2l0ZXJfYXJnX3MgeworCXRzZG5fdCAqdHNkbjsKKwlzaXplX3QgKmxlYWtf bmdjdHg7Cit9OworCitzdGF0aWMgcHJvZl9nY3R4X3QgKgorcHJvZl9nY3R4X21lcmdlX2l0ZXIo cHJvZl9nY3R4X3RyZWVfdCAqZ2N0eHMsIHByb2ZfZ2N0eF90ICpnY3R4LCB2b2lkICpvcGFxdWUp IHsKKwlwcm9mX2djdHhfbWVyZ2VfaXRlcl9hcmdfdCAqYXJnID0gKHByb2ZfZ2N0eF9tZXJnZV9p dGVyX2FyZ190ICopb3BhcXVlOworCisJbWFsbG9jX211dGV4X2xvY2soYXJnLT50c2RuLCBnY3R4 LT5sb2NrKTsKKwl0Y3R4X3RyZWVfaXRlcigmZ2N0eC0+dGN0eHMsIE5VTEwsIHByb2ZfdGN0eF9t ZXJnZV9pdGVyLAorCSAgICAodm9pZCAqKWFyZy0+dHNkbik7CisJaWYgKGdjdHgtPmNudF9zdW1t ZWQuY3Vyb2JqcyAhPSAwKSB7CisJCSgqYXJnLT5sZWFrX25nY3R4KSsrOworCX0KKwltYWxsb2Nf bXV0ZXhfdW5sb2NrKGFyZy0+dHNkbiwgZ2N0eC0+bG9jayk7CisKKwlyZXR1cm4gTlVMTDsKK30K Kworc3RhdGljIHZvaWQKK3Byb2ZfZ2N0eF9maW5pc2godHNkX3QgKnRzZCwgcHJvZl9nY3R4X3Ry ZWVfdCAqZ2N0eHMpIHsKKwlwcm9mX3RkYXRhX3QgKnRkYXRhID0gcHJvZl90ZGF0YV9nZXQodHNk LCBmYWxzZSk7CisJcHJvZl9nY3R4X3QgKmdjdHg7CisKKwkvKgorCSAqIFN0YW5kYXJkIHRyZWUg aXRlcmF0aW9uIHdvbid0IHdvcmsgaGVyZSwgYmVjYXVzZSBhcyBzb29uIGFzIHdlCisJICogZGVj cmVtZW50IGdjdHgtPm5saW1ibyBhbmQgdW5sb2NrIGdjdHgsIGFub3RoZXIgdGhyZWFkIGNhbgor CSAqIGNvbmN1cnJlbnRseSBkZXN0cm95IGl0LCB3aGljaCB3aWxsIGNvcnJ1cHQgdGhlIHRyZWUu ICBUaGVyZWZvcmUsCisJICogdGVhciBkb3duIHRoZSB0cmVlIG9uZSBub2RlIGF0IGEgdGltZSBk dXJpbmcgaXRlcmF0aW9uLgorCSAqLworCXdoaWxlICgoZ2N0eCA9IGdjdHhfdHJlZV9maXJzdChn Y3R4cykpICE9IE5VTEwpIHsKKwkJZ2N0eF90cmVlX3JlbW92ZShnY3R4cywgZ2N0eCk7CisJCW1h bGxvY19tdXRleF9sb2NrKHRzZF90c2RuKHRzZCksIGdjdHgtPmxvY2spOworCQl7CisJCQlwcm9m X3RjdHhfdCAqbmV4dDsKKworCQkJbmV4dCA9IE5VTEw7CisJCQlkbyB7CisJCQkJcHJvZl90Y3R4 X3QgKnRvX2Rlc3Ryb3kgPQorCQkJCSAgICB0Y3R4X3RyZWVfaXRlcigmZ2N0eC0+dGN0eHMsIG5l eHQsCisJCQkJICAgIHByb2ZfdGN0eF9maW5pc2hfaXRlciwKKwkJCQkgICAgKHZvaWQgKil0c2Rf dHNkbih0c2QpKTsKKwkJCQlpZiAodG9fZGVzdHJveSAhPSBOVUxMKSB7CisJCQkJCW5leHQgPSB0 Y3R4X3RyZWVfbmV4dCgmZ2N0eC0+dGN0eHMsCisJCQkJCSAgICB0b19kZXN0cm95KTsKKwkJCQkJ dGN0eF90cmVlX3JlbW92ZSgmZ2N0eC0+dGN0eHMsCisJCQkJCSAgICB0b19kZXN0cm95KTsKKwkJ CQkJaWRhbGxvY3RtKHRzZF90c2RuKHRzZCksIHRvX2Rlc3Ryb3ksCisJCQkJCSAgICBOVUxMLCBO VUxMLCB0cnVlLCB0cnVlKTsKKwkJCQl9IGVsc2UgeworCQkJCQluZXh0ID0gTlVMTDsKKwkJCQl9 CisJCQl9IHdoaWxlIChuZXh0ICE9IE5VTEwpOworCQl9CisJCWdjdHgtPm5saW1iby0tOworCQlp ZiAocHJvZl9nY3R4X3Nob3VsZF9kZXN0cm95KGdjdHgpKSB7CisJCQlnY3R4LT5ubGltYm8rKzsK KwkJCW1hbGxvY19tdXRleF91bmxvY2sodHNkX3RzZG4odHNkKSwgZ2N0eC0+bG9jayk7CisJCQlw cm9mX2djdHhfdHJ5X2Rlc3Ryb3kodHNkLCB0ZGF0YSwgZ2N0eCk7CisJCX0gZWxzZSB7CisJCQlt YWxsb2NfbXV0ZXhfdW5sb2NrKHRzZF90c2RuKHRzZCksIGdjdHgtPmxvY2spOworCQl9CisJfQor fQorCit0eXBlZGVmIHN0cnVjdCBwcm9mX3RkYXRhX21lcmdlX2l0ZXJfYXJnX3MgcHJvZl90ZGF0 YV9tZXJnZV9pdGVyX2FyZ190Oworc3RydWN0IHByb2ZfdGRhdGFfbWVyZ2VfaXRlcl9hcmdfcyB7 CisJdHNkbl90ICp0c2RuOworCXByb2ZfY250X3QgKmNudF9hbGw7Cit9OworCitzdGF0aWMgcHJv Zl90ZGF0YV90ICoKK3Byb2ZfdGRhdGFfbWVyZ2VfaXRlcihwcm9mX3RkYXRhX3RyZWVfdCAqdGRh dGFzX3B0ciwgcHJvZl90ZGF0YV90ICp0ZGF0YSwKKyAgICB2b2lkICpvcGFxdWUpIHsKKwlwcm9m X3RkYXRhX21lcmdlX2l0ZXJfYXJnX3QgKmFyZyA9CisJICAgIChwcm9mX3RkYXRhX21lcmdlX2l0 ZXJfYXJnX3QgKilvcGFxdWU7CisKKwltYWxsb2NfbXV0ZXhfbG9jayhhcmctPnRzZG4sIHRkYXRh LT5sb2NrKTsKKwlpZiAoIXRkYXRhLT5leHBpcmVkKSB7CisJCXNpemVfdCB0YWJpbmQ7CisJCXVu aW9uIHsKKwkJCXByb2ZfdGN0eF90CSpwOworCQkJdm9pZAkJKnY7CisJCX0gdGN0eDsKKworCQl0 ZGF0YS0+ZHVtcGluZyA9IHRydWU7CisJCW1lbXNldCgmdGRhdGEtPmNudF9zdW1tZWQsIDAsIHNp emVvZihwcm9mX2NudF90KSk7CisJCWZvciAodGFiaW5kID0gMDsgIWNraF9pdGVyKCZ0ZGF0YS0+ YnQydGN0eCwgJnRhYmluZCwgTlVMTCwKKwkJICAgICZ0Y3R4LnYpOykgeworCQkJcHJvZl90Y3R4 X21lcmdlX3RkYXRhKGFyZy0+dHNkbiwgdGN0eC5wLCB0ZGF0YSk7CisJCX0KKworCQlhcmctPmNu dF9hbGwtPmN1cm9ianMgKz0gdGRhdGEtPmNudF9zdW1tZWQuY3Vyb2JqczsKKwkJYXJnLT5jbnRf YWxsLT5jdXJvYmpzX3NoaWZ0ZWRfdW5iaWFzZWQKKwkJICAgICs9IHRkYXRhLT5jbnRfc3VtbWVk LmN1cm9ianNfc2hpZnRlZF91bmJpYXNlZDsKKwkJYXJnLT5jbnRfYWxsLT5jdXJieXRlcyArPSB0 ZGF0YS0+Y250X3N1bW1lZC5jdXJieXRlczsKKwkJYXJnLT5jbnRfYWxsLT5jdXJieXRlc191bmJp YXNlZAorCQkgICAgKz0gdGRhdGEtPmNudF9zdW1tZWQuY3VyYnl0ZXNfdW5iaWFzZWQ7CisJCWlm IChvcHRfcHJvZl9hY2N1bSkgeworCQkJYXJnLT5jbnRfYWxsLT5hY2N1bW9ianMgKz0gdGRhdGEt PmNudF9zdW1tZWQuYWNjdW1vYmpzOworCQkJYXJnLT5jbnRfYWxsLT5hY2N1bW9ianNfc2hpZnRl ZF91bmJpYXNlZAorCQkJICAgICs9IHRkYXRhLT5jbnRfc3VtbWVkLmFjY3Vtb2Jqc19zaGlmdGVk X3VuYmlhc2VkOworCQkJYXJnLT5jbnRfYWxsLT5hY2N1bWJ5dGVzICs9CisJCQkgICAgdGRhdGEt PmNudF9zdW1tZWQuYWNjdW1ieXRlczsKKwkJCWFyZy0+Y250X2FsbC0+YWNjdW1ieXRlc191bmJp YXNlZCArPQorCQkJICAgIHRkYXRhLT5jbnRfc3VtbWVkLmFjY3VtYnl0ZXNfdW5iaWFzZWQ7CisJ CX0KKwl9IGVsc2UgeworCQl0ZGF0YS0+ZHVtcGluZyA9IGZhbHNlOworCX0KKwltYWxsb2NfbXV0 ZXhfdW5sb2NrKGFyZy0+dHNkbiwgdGRhdGEtPmxvY2spOworCisJcmV0dXJuIE5VTEw7Cit9CisK K3N0YXRpYyBwcm9mX3RkYXRhX3QgKgorcHJvZl90ZGF0YV9kdW1wX2l0ZXIocHJvZl90ZGF0YV90 cmVlX3QgKnRkYXRhc19wdHIsIHByb2ZfdGRhdGFfdCAqdGRhdGEsCisgICAgdm9pZCAqb3BhcXVl KSB7CisJaWYgKCF0ZGF0YS0+ZHVtcGluZykgeworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlwcm9m X2R1bXBfaXRlcl9hcmdfdCAqYXJnID0gKHByb2ZfZHVtcF9pdGVyX2FyZ190ICopb3BhcXVlOwor CXByb2ZfZHVtcF9wcmludGYoYXJnLT5wcm9mX2R1bXBfd3JpdGUsIGFyZy0+Y2JvcGFxdWUsICIg IHQlIkZNVHU2NCI6ICIsCisJICAgIHRkYXRhLT50aHJfdWlkKTsKKwlwcm9mX2R1bXBfcHJpbnRf Y250cyhhcmctPnByb2ZfZHVtcF93cml0ZSwgYXJnLT5jYm9wYXF1ZSwKKwkgICAgJnRkYXRhLT5j bnRfc3VtbWVkKTsKKwlpZiAodGRhdGEtPnRocmVhZF9uYW1lICE9IE5VTEwpIHsKKwkJYXJnLT5w cm9mX2R1bXBfd3JpdGUoYXJnLT5jYm9wYXF1ZSwgIiAiKTsKKwkJYXJnLT5wcm9mX2R1bXBfd3Jp dGUoYXJnLT5jYm9wYXF1ZSwgdGRhdGEtPnRocmVhZF9uYW1lKTsKKwl9CisJYXJnLT5wcm9mX2R1 bXBfd3JpdGUoYXJnLT5jYm9wYXF1ZSwgIlxuIik7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRp YyB2b2lkCitwcm9mX2R1bXBfaGVhZGVyKHByb2ZfZHVtcF9pdGVyX2FyZ190ICphcmcsIGNvbnN0 IHByb2ZfY250X3QgKmNudF9hbGwpIHsKKwlwcm9mX2R1bXBfcHJpbnRmKGFyZy0+cHJvZl9kdW1w X3dyaXRlLCBhcmctPmNib3BhcXVlLAorCSAgICAiaGVhcF92Mi8lIkZNVHU2NCJcbiAgdCo6ICIs ICgodWludDY0X3QpMVUgPDwgbGdfcHJvZl9zYW1wbGUpKTsKKwlwcm9mX2R1bXBfcHJpbnRfY250 cyhhcmctPnByb2ZfZHVtcF93cml0ZSwgYXJnLT5jYm9wYXF1ZSwgY250X2FsbCk7CisJYXJnLT5w cm9mX2R1bXBfd3JpdGUoYXJnLT5jYm9wYXF1ZSwgIlxuIik7CisKKwltYWxsb2NfbXV0ZXhfbG9j ayhhcmctPnRzZG4sICZ0ZGF0YXNfbXR4KTsKKwl0ZGF0YV90cmVlX2l0ZXIoJnRkYXRhcywgTlVM TCwgcHJvZl90ZGF0YV9kdW1wX2l0ZXIsIGFyZyk7CisJbWFsbG9jX211dGV4X3VubG9jayhhcmct PnRzZG4sICZ0ZGF0YXNfbXR4KTsKK30KKworc3RhdGljIHZvaWQKK3Byb2ZfZHVtcF9nY3R4KHBy b2ZfZHVtcF9pdGVyX2FyZ190ICphcmcsIHByb2ZfZ2N0eF90ICpnY3R4LAorICAgIGNvbnN0IHBy b2ZfYnRfdCAqYnQsIHByb2ZfZ2N0eF90cmVlX3QgKmdjdHhzKSB7CisJY2Fzc2VydChjb25maWdf cHJvZik7CisJbWFsbG9jX211dGV4X2Fzc2VydF9vd25lcihhcmctPnRzZG4sIGdjdHgtPmxvY2sp OworCisJLyogQXZvaWQgZHVtcGluZyBzdWNoIGdjdHgncyB0aGF0IGhhdmUgbm8gdXNlZnVsIGRh dGEuICovCisJaWYgKCghb3B0X3Byb2ZfYWNjdW0gJiYgZ2N0eC0+Y250X3N1bW1lZC5jdXJvYmpz ID09IDApIHx8CisJICAgIChvcHRfcHJvZl9hY2N1bSAmJiBnY3R4LT5jbnRfc3VtbWVkLmFjY3Vt b2JqcyA9PSAwKSkgeworCQlhc3NlcnQoZ2N0eC0+Y250X3N1bW1lZC5jdXJvYmpzID09IDApOwor CQlhc3NlcnQoZ2N0eC0+Y250X3N1bW1lZC5jdXJieXRlcyA9PSAwKTsKKwkJLyoKKwkJICogVGhl c2UgYXNzZXJ0cyB3b3VsZCBub3QgYmUgY29ycmVjdCAtLSBzZWUgdGhlIGNvbW1lbnQgb24gcmFj ZXMKKwkJICogaW4gcHJvZi5jCisJCSAqIGFzc2VydChnY3R4LT5jbnRfc3VtbWVkLmN1cm9ianNf dW5iaWFzZWQgPT0gMCk7CisJCSAqIGFzc2VydChnY3R4LT5jbnRfc3VtbWVkLmN1cmJ5dGVzX3Vu Ymlhc2VkID09IDApOworCQkqLworCQlhc3NlcnQoZ2N0eC0+Y250X3N1bW1lZC5hY2N1bW9ianMg PT0gMCk7CisJCWFzc2VydChnY3R4LT5jbnRfc3VtbWVkLmFjY3Vtb2Jqc19zaGlmdGVkX3VuYmlh c2VkID09IDApOworCQlhc3NlcnQoZ2N0eC0+Y250X3N1bW1lZC5hY2N1bWJ5dGVzID09IDApOwor CQlhc3NlcnQoZ2N0eC0+Y250X3N1bW1lZC5hY2N1bWJ5dGVzX3VuYmlhc2VkID09IDApOworCQly ZXR1cm47CisJfQorCisJYXJnLT5wcm9mX2R1bXBfd3JpdGUoYXJnLT5jYm9wYXF1ZSwgIkAiKTsK Kwlmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYnQtPmxlbjsgaSsrKSB7CisJCXByb2ZfZHVtcF9w cmludGYoYXJnLT5wcm9mX2R1bXBfd3JpdGUsIGFyZy0+Y2JvcGFxdWUsCisJCSAgICAiICUjIkZN VHhQVFIsICh1aW50cHRyX3QpYnQtPnZlY1tpXSk7CisJfQorCisJYXJnLT5wcm9mX2R1bXBfd3Jp dGUoYXJnLT5jYm9wYXF1ZSwgIlxuICB0KjogIik7CisJcHJvZl9kdW1wX3ByaW50X2NudHMoYXJn LT5wcm9mX2R1bXBfd3JpdGUsIGFyZy0+Y2JvcGFxdWUsCisJICAgICZnY3R4LT5jbnRfc3VtbWVk KTsKKwlhcmctPnByb2ZfZHVtcF93cml0ZShhcmctPmNib3BhcXVlLCAiXG4iKTsKKworCXRjdHhf dHJlZV9pdGVyKCZnY3R4LT50Y3R4cywgTlVMTCwgcHJvZl90Y3R4X2R1bXBfaXRlciwgYXJnKTsK K30KKworLyoKKyAqIFNlZSBwcm9mX3NhbXBsZV9uZXdfZXZlbnRfd2FpdCgpIGNvbW1lbnQgZm9y IHdoeSB0aGUgYm9keSBvZiB0aGlzIGZ1bmN0aW9uCisgKiBpcyBjb25kaXRpb25hbGx5IGNvbXBp bGVkLgorICovCitzdGF0aWMgdm9pZAorcHJvZl9sZWFrY2hlY2soY29uc3QgcHJvZl9jbnRfdCAq Y250X2FsbCwgc2l6ZV90IGxlYWtfbmdjdHgpIHsKKyNpZmRlZiBKRU1BTExPQ19QUk9GCisJLyoK KwkgKiBTY2FsaW5nIGlzIGVxdWl2YWxlbnQgQWRqdXN0U2FtcGxlcygpIGluIGplcHJvZiwgYnV0 IHRoZSByZXN1bHQgbWF5CisJICogZGlmZmVyIHNsaWdodGx5IGZyb20gd2hhdCBqZXByb2YgcmVw b3J0cywgYmVjYXVzZSBoZXJlIHdlIHNjYWxlIHRoZQorCSAqIHN1bW1hcnkgdmFsdWVzLCB3aGVy ZWFzIGplcHJvZiBzY2FsZXMgZWFjaCBjb250ZXh0IGluZGl2aWR1YWxseSBhbmQKKwkgKiByZXBv cnRzIHRoZSBzdW1zIG9mIHRoZSBzY2FsZWQgdmFsdWVzLgorCSAqLworCWlmIChjbnRfYWxsLT5j dXJieXRlcyAhPSAwKSB7CisJCWRvdWJsZSBzYW1wbGVfcGVyaW9kID0gKGRvdWJsZSkoKHVpbnQ2 NF90KTEgPDwgbGdfcHJvZl9zYW1wbGUpOworCQlkb3VibGUgcmF0aW8gPSAoKChkb3VibGUpY250 X2FsbC0+Y3VyYnl0ZXMpIC8KKwkJICAgIChkb3VibGUpY250X2FsbC0+Y3Vyb2JqcykgLyBzYW1w bGVfcGVyaW9kOworCQlkb3VibGUgc2NhbGVfZmFjdG9yID0gMS4wIC8gKDEuMCAtIGV4cCgtcmF0 aW8pKTsKKwkJdWludDY0X3QgY3VyYnl0ZXMgPSAodWludDY0X3Qpcm91bmQoKChkb3VibGUpY250 X2FsbC0+Y3VyYnl0ZXMpCisJCSAgICAqIHNjYWxlX2ZhY3Rvcik7CisJCXVpbnQ2NF90IGN1cm9i anMgPSAodWludDY0X3Qpcm91bmQoKChkb3VibGUpY250X2FsbC0+Y3Vyb2JqcykgKgorCQkgICAg c2NhbGVfZmFjdG9yKTsKKworCQltYWxsb2NfcHJpbnRmKCI8amVtYWxsb2M+OiBMZWFrIGFwcHJv eGltYXRpb24gc3VtbWFyeTogfiUiRk1UdTY0CisJCSAgICAiIGJ5dGUlcywgfiUiRk1UdTY0IiBv YmplY3QlcywgPj0gJXp1IGNvbnRleHQlc1xuIiwKKwkJICAgIGN1cmJ5dGVzLCAoY3VyYnl0ZXMg IT0gMSkgPyAicyIgOiAiIiwgY3Vyb2JqcywgKGN1cm9ianMgIT0KKwkJICAgIDEpID8gInMiIDog IiIsIGxlYWtfbmdjdHgsIChsZWFrX25nY3R4ICE9IDEpID8gInMiIDogIiIpOworCQltYWxsb2Nf cHJpbnRmKAorCQkgICAgIjxqZW1hbGxvYz46IFJ1biBqZXByb2Ygb24gZHVtcCBvdXRwdXQgZm9y IGxlYWsgZGV0YWlsXG4iKTsKKwkJaWYgKG9wdF9wcm9mX2xlYWtfZXJyb3IpIHsKKwkJCW1hbGxv Y19wcmludGYoCisJCQkgICAgIjxqZW1hbGxvYz46IEV4aXRpbmcgd2l0aCBlcnJvciBjb2RlIGJl Y2F1c2UgbWVtb3J5IgorCQkJICAgICIgbGVha3Mgd2VyZSBkZXRlY3RlZFxuIik7CisJCQkvKgor CQkJICogVXNlIF9leGl0KCkgd2l0aCB1bmRlcnNjb3JlIHRvIGF2b2lkIGNhbGxpbmcgYXRleGl0 KCkKKwkJCSAqIGFuZCBlbnRlcmluZyBlbmRsZXNzIGN5Y2xlLgorCQkJICovCisJCQlfZXhpdCgx KTsKKwkJfQorCX0KKyNlbmRpZgorfQorCitzdGF0aWMgcHJvZl9nY3R4X3QgKgorcHJvZl9nY3R4 X2R1bXBfaXRlcihwcm9mX2djdHhfdHJlZV90ICpnY3R4cywgcHJvZl9nY3R4X3QgKmdjdHgsIHZv aWQgKm9wYXF1ZSkgeworCXByb2ZfZHVtcF9pdGVyX2FyZ190ICphcmcgPSAocHJvZl9kdW1wX2l0 ZXJfYXJnX3QgKilvcGFxdWU7CisJbWFsbG9jX211dGV4X2xvY2soYXJnLT50c2RuLCBnY3R4LT5s b2NrKTsKKwlwcm9mX2R1bXBfZ2N0eChhcmcsIGdjdHgsICZnY3R4LT5idCwgZ2N0eHMpOworCW1h bGxvY19tdXRleF91bmxvY2soYXJnLT50c2RuLCBnY3R4LT5sb2NrKTsKKwlyZXR1cm4gTlVMTDsK K30KKworc3RhdGljIHZvaWQKK3Byb2ZfZHVtcF9wcmVwKHRzZF90ICp0c2QsIHByb2ZfdGRhdGFf dCAqdGRhdGEsIHByb2ZfY250X3QgKmNudF9hbGwsCisgICAgc2l6ZV90ICpsZWFrX25nY3R4LCBw cm9mX2djdHhfdHJlZV90ICpnY3R4cykgeworCXNpemVfdCB0YWJpbmQ7CisJdW5pb24geworCQlw cm9mX2djdHhfdAkqcDsKKwkJdm9pZAkJKnY7CisJfSBnY3R4OworCisJcHJvZl9lbnRlcih0c2Qs IHRkYXRhKTsKKworCS8qCisJICogUHV0IGdjdHgncyBpbiBsaW1ibyBhbmQgY2xlYXIgdGhlaXIg Y291bnRlcnMgaW4gcHJlcGFyYXRpb24gZm9yCisJICogc3VtbWluZy4KKwkgKi8KKwlnY3R4X3Ry ZWVfbmV3KGdjdHhzKTsKKwlmb3IgKHRhYmluZCA9IDA7ICFja2hfaXRlcigmYnQyZ2N0eCwgJnRh YmluZCwgTlVMTCwgJmdjdHgudik7KSB7CisJCXByb2ZfZHVtcF9nY3R4X3ByZXAodHNkX3RzZG4o dHNkKSwgZ2N0eC5wLCBnY3R4cyk7CisJfQorCisJLyoKKwkgKiBJdGVyYXRlIG92ZXIgdGRhdGFz LCBhbmQgZm9yIHRoZSBub24tZXhwaXJlZCBvbmVzIHNuYXBzaG90IHRoZWlyIHRjdHgKKwkgKiBz dGF0cyBhbmQgbWVyZ2UgdGhlbSBpbnRvIHRoZSBhc3NvY2lhdGVkIGdjdHgncy4KKwkgKi8KKwlt ZW1zZXQoY250X2FsbCwgMCwgc2l6ZW9mKHByb2ZfY250X3QpKTsKKwlwcm9mX3RkYXRhX21lcmdl X2l0ZXJfYXJnX3QgcHJvZl90ZGF0YV9tZXJnZV9pdGVyX2FyZyA9IHt0c2RfdHNkbih0c2QpLAor CSAgICBjbnRfYWxsfTsKKwltYWxsb2NfbXV0ZXhfbG9jayh0c2RfdHNkbih0c2QpLCAmdGRhdGFz X210eCk7CisJdGRhdGFfdHJlZV9pdGVyKCZ0ZGF0YXMsIE5VTEwsIHByb2ZfdGRhdGFfbWVyZ2Vf aXRlciwKKwkgICAgJnByb2ZfdGRhdGFfbWVyZ2VfaXRlcl9hcmcpOworCW1hbGxvY19tdXRleF91 bmxvY2sodHNkX3RzZG4odHNkKSwgJnRkYXRhc19tdHgpOworCisJLyogTWVyZ2UgdGN0eCBzdGF0 cyBpbnRvIGdjdHgncy4gKi8KKwkqbGVha19uZ2N0eCA9IDA7CisJcHJvZl9nY3R4X21lcmdlX2l0 ZXJfYXJnX3QgcHJvZl9nY3R4X21lcmdlX2l0ZXJfYXJnID0ge3RzZF90c2RuKHRzZCksCisJICAg IGxlYWtfbmdjdHh9OworCWdjdHhfdHJlZV9pdGVyKGdjdHhzLCBOVUxMLCBwcm9mX2djdHhfbWVy Z2VfaXRlciwKKwkgICAgJnByb2ZfZ2N0eF9tZXJnZV9pdGVyX2FyZyk7CisKKwlwcm9mX2xlYXZl KHRzZCwgdGRhdGEpOworfQorCit2b2lkCitwcm9mX2R1bXBfaW1wbCh0c2RfdCAqdHNkLCB3cml0 ZV9jYl90ICpwcm9mX2R1bXBfd3JpdGUsIHZvaWQgKmNib3BhcXVlLAorICAgIHByb2ZfdGRhdGFf dCAqdGRhdGEsIGJvb2wgbGVha2NoZWNrKSB7CisJbWFsbG9jX211dGV4X2Fzc2VydF9vd25lcih0 c2RfdHNkbih0c2QpLCAmcHJvZl9kdW1wX210eCk7CisJcHJvZl9jbnRfdCBjbnRfYWxsOworCXNp emVfdCBsZWFrX25nY3R4OworCXByb2ZfZ2N0eF90cmVlX3QgZ2N0eHM7CisJcHJvZl9kdW1wX3By ZXAodHNkLCB0ZGF0YSwgJmNudF9hbGwsICZsZWFrX25nY3R4LCAmZ2N0eHMpOworCXByb2ZfZHVt cF9pdGVyX2FyZ190IHByb2ZfZHVtcF9pdGVyX2FyZyA9IHt0c2RfdHNkbih0c2QpLAorCSAgICBw cm9mX2R1bXBfd3JpdGUsIGNib3BhcXVlfTsKKwlwcm9mX2R1bXBfaGVhZGVyKCZwcm9mX2R1bXBf aXRlcl9hcmcsICZjbnRfYWxsKTsKKwlnY3R4X3RyZWVfaXRlcigmZ2N0eHMsIE5VTEwsIHByb2Zf Z2N0eF9kdW1wX2l0ZXIsICZwcm9mX2R1bXBfaXRlcl9hcmcpOworCXByb2ZfZ2N0eF9maW5pc2go dHNkLCAmZ2N0eHMpOworCWlmIChsZWFrY2hlY2spIHsKKwkJcHJvZl9sZWFrY2hlY2soJmNudF9h bGwsIGxlYWtfbmdjdHgpOworCX0KK30KKworLyogVXNlZCBpbiB1bml0IHRlc3RzLiAqLwordm9p ZAorcHJvZl9jbnRfYWxsKHByb2ZfY250X3QgKmNudF9hbGwpIHsKKwl0c2RfdCAqdHNkID0gdHNk X2ZldGNoKCk7CisJcHJvZl90ZGF0YV90ICp0ZGF0YSA9IHByb2ZfdGRhdGFfZ2V0KHRzZCwgZmFs c2UpOworCWlmICh0ZGF0YSA9PSBOVUxMKSB7CisJCW1lbXNldChjbnRfYWxsLCAwLCBzaXplb2Yo cHJvZl9jbnRfdCkpOworCX0gZWxzZSB7CisJCXNpemVfdCBsZWFrX25nY3R4OworCQlwcm9mX2dj dHhfdHJlZV90IGdjdHhzOworCQlwcm9mX2R1bXBfcHJlcCh0c2QsIHRkYXRhLCBjbnRfYWxsLCAm bGVha19uZ2N0eCwgJmdjdHhzKTsKKwkJcHJvZl9nY3R4X2ZpbmlzaCh0c2QsICZnY3R4cyk7CisJ fQorfQorCit2b2lkCitwcm9mX2J0X2hhc2goY29uc3Qgdm9pZCAqa2V5LCBzaXplX3Qgcl9oYXNo WzJdKSB7CisJcHJvZl9idF90ICpidCA9IChwcm9mX2J0X3QgKilrZXk7CisKKwljYXNzZXJ0KGNv bmZpZ19wcm9mKTsKKworCWhhc2goYnQtPnZlYywgYnQtPmxlbiAqIHNpemVvZih2b2lkICopLCAw eDk0MTIyZjMzVSwgcl9oYXNoKTsKK30KKworYm9vbAorcHJvZl9idF9rZXljb21wKGNvbnN0IHZv aWQgKmsxLCBjb25zdCB2b2lkICprMikgeworCWNvbnN0IHByb2ZfYnRfdCAqYnQxID0gKHByb2Zf YnRfdCAqKWsxOworCWNvbnN0IHByb2ZfYnRfdCAqYnQyID0gKHByb2ZfYnRfdCAqKWsyOworCisJ Y2Fzc2VydChjb25maWdfcHJvZik7CisKKwlpZiAoYnQxLT5sZW4gIT0gYnQyLT5sZW4pIHsKKwkJ cmV0dXJuIGZhbHNlOworCX0KKwlyZXR1cm4gKG1lbWNtcChidDEtPnZlYywgYnQyLT52ZWMsIGJ0 MS0+bGVuICogc2l6ZW9mKHZvaWQgKikpID09IDApOworfQorCitwcm9mX3RkYXRhX3QgKgorcHJv Zl90ZGF0YV9pbml0X2ltcGwodHNkX3QgKnRzZCwgdWludDY0X3QgdGhyX3VpZCwgdWludDY0X3Qg dGhyX2Rpc2NyaW0sCisgICAgY2hhciAqdGhyZWFkX25hbWUsIGJvb2wgYWN0aXZlKSB7CisJYXNz ZXJ0KHRzZF9yZWVudHJhbmN5X2xldmVsX2dldCh0c2QpID09IDApOworCisJcHJvZl90ZGF0YV90 ICp0ZGF0YTsKKworCWNhc3NlcnQoY29uZmlnX3Byb2YpOworCisJLyogSW5pdGlhbGl6ZSBhbiBl bXB0eSBjYWNoZSBmb3IgdGhpcyB0aHJlYWQuICovCisJdGRhdGEgPSAocHJvZl90ZGF0YV90ICop aWFsbG9jenRtKHRzZF90c2RuKHRzZCksIHNpemVvZihwcm9mX3RkYXRhX3QpLAorCSAgICBzel9z aXplMmluZGV4KHNpemVvZihwcm9mX3RkYXRhX3QpKSwgZmFsc2UsIE5VTEwsIHRydWUsCisJICAg IGFyZW5hX2dldChUU0ROX05VTEwsIDAsIHRydWUpLCB0cnVlKTsKKwlpZiAodGRhdGEgPT0gTlVM TCkgeworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwl0ZGF0YS0+bG9jayA9IHByb2ZfdGRhdGFfbXV0 ZXhfY2hvb3NlKHRocl91aWQpOworCXRkYXRhLT50aHJfdWlkID0gdGhyX3VpZDsKKwl0ZGF0YS0+ dGhyX2Rpc2NyaW0gPSB0aHJfZGlzY3JpbTsKKwl0ZGF0YS0+dGhyZWFkX25hbWUgPSB0aHJlYWRf bmFtZTsKKwl0ZGF0YS0+YXR0YWNoZWQgPSB0cnVlOworCXRkYXRhLT5leHBpcmVkID0gZmFsc2U7 CisJdGRhdGEtPnRjdHhfdWlkX25leHQgPSAwOworCisJaWYgKGNraF9uZXcodHNkLCAmdGRhdGEt PmJ0MnRjdHgsIFBST0ZfQ0tIX01JTklURU1TLCBwcm9mX2J0X2hhc2gsCisJICAgIHByb2ZfYnRf a2V5Y29tcCkpIHsKKwkJaWRhbGxvY3RtKHRzZF90c2RuKHRzZCksIHRkYXRhLCBOVUxMLCBOVUxM LCB0cnVlLCB0cnVlKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJdGRhdGEtPmVucSA9IGZhbHNl OworCXRkYXRhLT5lbnFfaWR1bXAgPSBmYWxzZTsKKwl0ZGF0YS0+ZW5xX2dkdW1wID0gZmFsc2U7 CisKKwl0ZGF0YS0+ZHVtcGluZyA9IGZhbHNlOworCXRkYXRhLT5hY3RpdmUgPSBhY3RpdmU7CisK KwltYWxsb2NfbXV0ZXhfbG9jayh0c2RfdHNkbih0c2QpLCAmdGRhdGFzX210eCk7CisJdGRhdGFf dHJlZV9pbnNlcnQoJnRkYXRhcywgdGRhdGEpOworCW1hbGxvY19tdXRleF91bmxvY2sodHNkX3Rz ZG4odHNkKSwgJnRkYXRhc19tdHgpOworCisJcmV0dXJuIHRkYXRhOworfQorCitzdGF0aWMgYm9v bAorcHJvZl90ZGF0YV9zaG91bGRfZGVzdHJveV91bmxvY2tlZChwcm9mX3RkYXRhX3QgKnRkYXRh LCBib29sIGV2ZW5faWZfYXR0YWNoZWQpIHsKKwlpZiAodGRhdGEtPmF0dGFjaGVkICYmICFldmVu X2lmX2F0dGFjaGVkKSB7CisJCXJldHVybiBmYWxzZTsKKwl9CisJaWYgKGNraF9jb3VudCgmdGRh dGEtPmJ0MnRjdHgpICE9IDApIHsKKwkJcmV0dXJuIGZhbHNlOworCX0KKwlyZXR1cm4gdHJ1ZTsK K30KKworc3RhdGljIGJvb2wKK3Byb2ZfdGRhdGFfc2hvdWxkX2Rlc3Ryb3kodHNkbl90ICp0c2Ru LCBwcm9mX3RkYXRhX3QgKnRkYXRhLAorICAgIGJvb2wgZXZlbl9pZl9hdHRhY2hlZCkgeworCW1h bGxvY19tdXRleF9hc3NlcnRfb3duZXIodHNkbiwgdGRhdGEtPmxvY2spOworCisJcmV0dXJuIHBy b2ZfdGRhdGFfc2hvdWxkX2Rlc3Ryb3lfdW5sb2NrZWQodGRhdGEsIGV2ZW5faWZfYXR0YWNoZWQp OworfQorCitzdGF0aWMgdm9pZAorcHJvZl90ZGF0YV9kZXN0cm95X2xvY2tlZCh0c2RfdCAqdHNk LCBwcm9mX3RkYXRhX3QgKnRkYXRhLAorICAgIGJvb2wgZXZlbl9pZl9hdHRhY2hlZCkgeworCW1h bGxvY19tdXRleF9hc3NlcnRfb3duZXIodHNkX3RzZG4odHNkKSwgJnRkYXRhc19tdHgpOworCW1h bGxvY19tdXRleF9hc3NlcnRfbm90X293bmVyKHRzZF90c2RuKHRzZCksIHRkYXRhLT5sb2NrKTsK KworCXRkYXRhX3RyZWVfcmVtb3ZlKCZ0ZGF0YXMsIHRkYXRhKTsKKworCWFzc2VydChwcm9mX3Rk YXRhX3Nob3VsZF9kZXN0cm95X3VubG9ja2VkKHRkYXRhLCBldmVuX2lmX2F0dGFjaGVkKSk7CisK KwlpZiAodGRhdGEtPnRocmVhZF9uYW1lICE9IE5VTEwpIHsKKwkJaWRhbGxvY3RtKHRzZF90c2Ru KHRzZCksIHRkYXRhLT50aHJlYWRfbmFtZSwgTlVMTCwgTlVMTCwgdHJ1ZSwKKwkJICAgIHRydWUp OworCX0KKwlja2hfZGVsZXRlKHRzZCwgJnRkYXRhLT5idDJ0Y3R4KTsKKwlpZGFsbG9jdG0odHNk X3RzZG4odHNkKSwgdGRhdGEsIE5VTEwsIE5VTEwsIHRydWUsIHRydWUpOworfQorCitzdGF0aWMg dm9pZAorcHJvZl90ZGF0YV9kZXN0cm95KHRzZF90ICp0c2QsIHByb2ZfdGRhdGFfdCAqdGRhdGEs IGJvb2wgZXZlbl9pZl9hdHRhY2hlZCkgeworCW1hbGxvY19tdXRleF9sb2NrKHRzZF90c2RuKHRz ZCksICZ0ZGF0YXNfbXR4KTsKKwlwcm9mX3RkYXRhX2Rlc3Ryb3lfbG9ja2VkKHRzZCwgdGRhdGEs IGV2ZW5faWZfYXR0YWNoZWQpOworCW1hbGxvY19tdXRleF91bmxvY2sodHNkX3RzZG4odHNkKSwg JnRkYXRhc19tdHgpOworfQorCit2b2lkCitwcm9mX3RkYXRhX2RldGFjaCh0c2RfdCAqdHNkLCBw cm9mX3RkYXRhX3QgKnRkYXRhKSB7CisJYm9vbCBkZXN0cm95X3RkYXRhOworCisJbWFsbG9jX211 dGV4X2xvY2sodHNkX3RzZG4odHNkKSwgdGRhdGEtPmxvY2spOworCWlmICh0ZGF0YS0+YXR0YWNo ZWQpIHsKKwkJZGVzdHJveV90ZGF0YSA9IHByb2ZfdGRhdGFfc2hvdWxkX2Rlc3Ryb3kodHNkX3Rz ZG4odHNkKSwgdGRhdGEsCisJCSAgICB0cnVlKTsKKwkJLyoKKwkJICogT25seSBkZXRhY2ggaWYg IWRlc3Ryb3lfdGRhdGEsIGJlY2F1c2UgZGV0YWNoaW5nIHdvdWxkIGFsbG93CisJCSAqIGFub3Ro ZXIgdGhyZWFkIHRvIHdpbiB0aGUgcmFjZSB0byBkZXN0cm95IHRkYXRhLgorCQkgKi8KKwkJaWYg KCFkZXN0cm95X3RkYXRhKSB7CisJCQl0ZGF0YS0+YXR0YWNoZWQgPSBmYWxzZTsKKwkJfQorCQl0 c2RfcHJvZl90ZGF0YV9zZXQodHNkLCBOVUxMKTsKKwl9IGVsc2UgeworCQlkZXN0cm95X3RkYXRh ID0gZmFsc2U7CisJfQorCW1hbGxvY19tdXRleF91bmxvY2sodHNkX3RzZG4odHNkKSwgdGRhdGEt PmxvY2spOworCWlmIChkZXN0cm95X3RkYXRhKSB7CisJCXByb2ZfdGRhdGFfZGVzdHJveSh0c2Qs IHRkYXRhLCB0cnVlKTsKKwl9Cit9CisKK3N0YXRpYyBib29sCitwcm9mX3RkYXRhX2V4cGlyZSh0 c2RuX3QgKnRzZG4sIHByb2ZfdGRhdGFfdCAqdGRhdGEpIHsKKwlib29sIGRlc3Ryb3lfdGRhdGE7 CisKKwltYWxsb2NfbXV0ZXhfbG9jayh0c2RuLCB0ZGF0YS0+bG9jayk7CisJaWYgKCF0ZGF0YS0+ ZXhwaXJlZCkgeworCQl0ZGF0YS0+ZXhwaXJlZCA9IHRydWU7CisJCWRlc3Ryb3lfdGRhdGEgPSBw cm9mX3RkYXRhX3Nob3VsZF9kZXN0cm95KHRzZG4sIHRkYXRhLCBmYWxzZSk7CisJfSBlbHNlIHsK KwkJZGVzdHJveV90ZGF0YSA9IGZhbHNlOworCX0KKwltYWxsb2NfbXV0ZXhfdW5sb2NrKHRzZG4s IHRkYXRhLT5sb2NrKTsKKworCXJldHVybiBkZXN0cm95X3RkYXRhOworfQorCitzdGF0aWMgcHJv Zl90ZGF0YV90ICoKK3Byb2ZfdGRhdGFfcmVzZXRfaXRlcihwcm9mX3RkYXRhX3RyZWVfdCAqdGRh dGFzX3B0ciwgcHJvZl90ZGF0YV90ICp0ZGF0YSwKKyAgICB2b2lkICphcmcpIHsKKwl0c2RuX3Qg KnRzZG4gPSAodHNkbl90ICopYXJnOworCisJcmV0dXJuIChwcm9mX3RkYXRhX2V4cGlyZSh0c2Ru LCB0ZGF0YSkgPyB0ZGF0YSA6IE5VTEwpOworfQorCit2b2lkCitwcm9mX3Jlc2V0KHRzZF90ICp0 c2QsIHNpemVfdCBsZ19zYW1wbGUpIHsKKwlwcm9mX3RkYXRhX3QgKm5leHQ7CisKKwlhc3NlcnQo bGdfc2FtcGxlIDwgKHNpemVvZih1aW50NjRfdCkgPDwgMykpOworCisJbWFsbG9jX211dGV4X2xv Y2sodHNkX3RzZG4odHNkKSwgJnByb2ZfZHVtcF9tdHgpOworCW1hbGxvY19tdXRleF9sb2NrKHRz ZF90c2RuKHRzZCksICZ0ZGF0YXNfbXR4KTsKKworCWxnX3Byb2Zfc2FtcGxlID0gbGdfc2FtcGxl OworCXByb2ZfdW5iaWFzX21hcF9pbml0KCk7CisKKwluZXh0ID0gTlVMTDsKKwlkbyB7CisJCXBy b2ZfdGRhdGFfdCAqdG9fZGVzdHJveSA9IHRkYXRhX3RyZWVfaXRlcigmdGRhdGFzLCBuZXh0LAor CQkgICAgcHJvZl90ZGF0YV9yZXNldF9pdGVyLCAodm9pZCAqKXRzZCk7CisJCWlmICh0b19kZXN0 cm95ICE9IE5VTEwpIHsKKwkJCW5leHQgPSB0ZGF0YV90cmVlX25leHQoJnRkYXRhcywgdG9fZGVz dHJveSk7CisJCQlwcm9mX3RkYXRhX2Rlc3Ryb3lfbG9ja2VkKHRzZCwgdG9fZGVzdHJveSwgZmFs c2UpOworCQl9IGVsc2UgeworCQkJbmV4dCA9IE5VTEw7CisJCX0KKwl9IHdoaWxlIChuZXh0ICE9 IE5VTEwpOworCisJbWFsbG9jX211dGV4X3VubG9jayh0c2RfdHNkbih0c2QpLCAmdGRhdGFzX210 eCk7CisJbWFsbG9jX211dGV4X3VubG9jayh0c2RfdHNkbih0c2QpLCAmcHJvZl9kdW1wX210eCk7 Cit9CisKK3N0YXRpYyBib29sCitwcm9mX3RjdHhfc2hvdWxkX2Rlc3Ryb3kodHNkX3QgKnRzZCwg cHJvZl90Y3R4X3QgKnRjdHgpIHsKKwltYWxsb2NfbXV0ZXhfYXNzZXJ0X293bmVyKHRzZF90c2Ru KHRzZCksIHRjdHgtPnRkYXRhLT5sb2NrKTsKKworCWlmIChvcHRfcHJvZl9hY2N1bSkgeworCQly ZXR1cm4gZmFsc2U7CisJfQorCWlmICh0Y3R4LT5jbnRzLmN1cm9ianMgIT0gMCkgeworCQlyZXR1 cm4gZmFsc2U7CisJfQorCWlmICh0Y3R4LT5wcmVwYXJlZCkgeworCQlyZXR1cm4gZmFsc2U7CisJ fQorCWlmICh0Y3R4LT5yZWNlbnRfY291bnQgIT0gMCkgeworCQlyZXR1cm4gZmFsc2U7CisJfQor CXJldHVybiB0cnVlOworfQorCitzdGF0aWMgdm9pZAorcHJvZl90Y3R4X2Rlc3Ryb3kodHNkX3Qg KnRzZCwgcHJvZl90Y3R4X3QgKnRjdHgpIHsKKwltYWxsb2NfbXV0ZXhfYXNzZXJ0X293bmVyKHRz ZF90c2RuKHRzZCksIHRjdHgtPnRkYXRhLT5sb2NrKTsKKworCWFzc2VydCh0Y3R4LT5jbnRzLmN1 cm9ianMgPT0gMCk7CisJYXNzZXJ0KHRjdHgtPmNudHMuY3VyYnl0ZXMgPT0gMCk7CisJLyoKKwkg KiBUaGVzZSBhc3NlcnRzIGFyZSBub3QgY29ycmVjdCAtLSBzZWUgdGhlIGNvbW1lbnQgYWJvdXQg cmFjZXMgaW4KKwkgKiBwcm9mLmMKKwkgKgorCSAqIGFzc2VydCh0Y3R4LT5jbnRzLmN1cm9ianNf c2hpZnRlZF91bmJpYXNlZCA9PSAwKTsKKwkgKiBhc3NlcnQodGN0eC0+Y250cy5jdXJieXRlc191 bmJpYXNlZCA9PSAwKTsKKwkgKi8KKwlhc3NlcnQoIW9wdF9wcm9mX2FjY3VtKTsKKwlhc3NlcnQo dGN0eC0+Y250cy5hY2N1bW9ianMgPT0gMCk7CisJYXNzZXJ0KHRjdHgtPmNudHMuYWNjdW1ieXRl cyA9PSAwKTsKKwkvKgorCSAqIFRoZXNlIG9uZXMgYXJlLCBzaW5jZSBhY2N1bWJ5dGUgY291bnRz IG5ldmVyIGdvIGRvd24uICBFaXRoZXIKKwkgKiBwcm9mX2FjY3VtIGlzIG9mZiAoaW4gd2hpY2gg Y2FzZSB0aGVzZSBzaG91bGQgbmV2ZXIgaGF2ZSBjaGFuZ2VkIGZyb20KKwkgKiB0aGVpciBpbml0 aWFsIHZhbHVlIG9mIHplcm8pLCBvciBpdCdzIG9uIChpbiB3aGljaCBjYXNlIHdlIHNob3VsZG4n dAorCSAqIGJlIGRlc3Ryb3lpbmcgdGhpcyB0Y3R4KS4KKwkgKi8KKwlhc3NlcnQodGN0eC0+Y250 cy5hY2N1bW9ianNfc2hpZnRlZF91bmJpYXNlZCA9PSAwKTsKKwlhc3NlcnQodGN0eC0+Y250cy5h Y2N1bWJ5dGVzX3VuYmlhc2VkID09IDApOworCisJcHJvZl9nY3R4X3QgKmdjdHggPSB0Y3R4LT5n Y3R4OworCisJeworCQlwcm9mX3RkYXRhX3QgKnRkYXRhID0gdGN0eC0+dGRhdGE7CisJCXRjdHgt PnRkYXRhID0gTlVMTDsKKwkJY2toX3JlbW92ZSh0c2QsICZ0ZGF0YS0+YnQydGN0eCwgJmdjdHgt PmJ0LCBOVUxMLCBOVUxMKTsKKwkJYm9vbCBkZXN0cm95X3RkYXRhID0gcHJvZl90ZGF0YV9zaG91 bGRfZGVzdHJveSh0c2RfdHNkbih0c2QpLAorCQkgICAgdGRhdGEsIGZhbHNlKTsKKwkJbWFsbG9j X211dGV4X3VubG9jayh0c2RfdHNkbih0c2QpLCB0ZGF0YS0+bG9jayk7CisJCWlmIChkZXN0cm95 X3RkYXRhKSB7CisJCQlwcm9mX3RkYXRhX2Rlc3Ryb3kodHNkLCB0ZGF0YSwgZmFsc2UpOworCQl9 CisJfQorCisJYm9vbCBkZXN0cm95X3RjdHgsIGRlc3Ryb3lfZ2N0eDsKKworCW1hbGxvY19tdXRl eF9sb2NrKHRzZF90c2RuKHRzZCksIGdjdHgtPmxvY2spOworCXN3aXRjaCAodGN0eC0+c3RhdGUp IHsKKwljYXNlIHByb2ZfdGN0eF9zdGF0ZV9ub21pbmFsOgorCQl0Y3R4X3RyZWVfcmVtb3ZlKCZn Y3R4LT50Y3R4cywgdGN0eCk7CisJCWRlc3Ryb3lfdGN0eCA9IHRydWU7CisJCWlmIChwcm9mX2dj dHhfc2hvdWxkX2Rlc3Ryb3koZ2N0eCkpIHsKKwkJCS8qCisJCQkgKiBJbmNyZW1lbnQgZ2N0eC0+ bmxpbWJvIGluIG9yZGVyIHRvIGtlZXAgYW5vdGhlcgorCQkJICogdGhyZWFkIGZyb20gd2lubmlu ZyB0aGUgcmFjZSB0byBkZXN0cm95IGdjdHggd2hpbGUKKwkJCSAqIHRoaXMgb25lIGhhcyBnY3R4 LT5sb2NrIGRyb3BwZWQuICBXaXRob3V0IHRoaXMsIGl0CisJCQkgKiB3b3VsZCBiZSBwb3NzaWJs ZSBmb3IgYW5vdGhlciB0aHJlYWQgdG86CisJCQkgKgorCQkJICogMSkgU2FtcGxlIGFuIGFsbG9j YXRpb24gYXNzb2NpYXRlZCB3aXRoIGdjdHguCisJCQkgKiAyKSBEZWFsbG9jYXRlIHRoZSBzYW1w bGVkIG9iamVjdC4KKwkJCSAqIDMpIFN1Y2Nlc3NmdWxseSBwcm9mX2djdHhfdHJ5X2Rlc3Ryb3ko Z2N0eCkuCisJCQkgKgorCQkJICogVGhlIHJlc3VsdCB3b3VsZCBiZSB0aGF0IGdjdHggbm8gbG9u Z2VyIGV4aXN0cyBieSB0aGUKKwkJCSAqIHRpbWUgdGhpcyB0aHJlYWQgYWNjZXNzZXMgaXQgaW4K KwkJCSAqIHByb2ZfZ2N0eF90cnlfZGVzdHJveSgpLgorCQkJICovCisJCQlnY3R4LT5ubGltYm8r KzsKKwkJCWRlc3Ryb3lfZ2N0eCA9IHRydWU7CisJCX0gZWxzZSB7CisJCQlkZXN0cm95X2djdHgg PSBmYWxzZTsKKwkJfQorCQlicmVhazsKKwljYXNlIHByb2ZfdGN0eF9zdGF0ZV9kdW1waW5nOgor CQkvKgorCQkgKiBBIGR1bXBpbmcgdGhyZWFkIG5lZWRzIHRjdHggdG8gcmVtYWluIHZhbGlkIHVu dGlsIGR1bXBpbmcKKwkJICogaGFzIGZpbmlzaGVkLiAgQ2hhbmdlIHN0YXRlIHN1Y2ggdGhhdCB0 aGUgZHVtcGluZyB0aHJlYWQgd2lsbAorCQkgKiBjb21wbGV0ZSBkZXN0cnVjdGlvbiBkdXJpbmcg YSBsYXRlIGR1bXAgaXRlcmF0aW9uIHBoYXNlLgorCQkgKi8KKwkJdGN0eC0+c3RhdGUgPSBwcm9m X3RjdHhfc3RhdGVfcHVyZ2F0b3J5OworCQlkZXN0cm95X3RjdHggPSBmYWxzZTsKKwkJZGVzdHJv eV9nY3R4ID0gZmFsc2U7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCW5vdF9yZWFjaGVkKCk7CisJ CWRlc3Ryb3lfdGN0eCA9IGZhbHNlOworCQlkZXN0cm95X2djdHggPSBmYWxzZTsKKwl9CisJbWFs bG9jX211dGV4X3VubG9jayh0c2RfdHNkbih0c2QpLCBnY3R4LT5sb2NrKTsKKwlpZiAoZGVzdHJv eV9nY3R4KSB7CisJCXByb2ZfZ2N0eF90cnlfZGVzdHJveSh0c2QsIHByb2ZfdGRhdGFfZ2V0KHRz ZCwgZmFsc2UpLCBnY3R4KTsKKwl9CisJaWYgKGRlc3Ryb3lfdGN0eCkgeworCQlpZGFsbG9jdG0o dHNkX3RzZG4odHNkKSwgdGN0eCwgTlVMTCwgTlVMTCwgdHJ1ZSwgdHJ1ZSk7CisJfQorfQorCit2 b2lkCitwcm9mX3RjdHhfdHJ5X2Rlc3Ryb3kodHNkX3QgKnRzZCwgcHJvZl90Y3R4X3QgKnRjdHgp IHsKKwltYWxsb2NfbXV0ZXhfYXNzZXJ0X293bmVyKHRzZF90c2RuKHRzZCksIHRjdHgtPnRkYXRh LT5sb2NrKTsKKwlpZiAocHJvZl90Y3R4X3Nob3VsZF9kZXN0cm95KHRzZCwgdGN0eCkpIHsKKwkJ LyogdGN0eC0+dGRhdGEtPmxvY2sgd2lsbCBiZSByZWxlYXNlZCBpbiBwcm9mX3RjdHhfZGVzdHJv eSgpLiAqLworCQlwcm9mX3RjdHhfZGVzdHJveSh0c2QsIHRjdHgpOworCX0gZWxzZSB7CisJCW1h bGxvY19tdXRleF91bmxvY2sodHNkX3RzZG4odHNkKSwgdGN0eC0+dGRhdGEtPmxvY2spOworCX0K K30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0z LjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9zcmMvcHJvZl9sb2cuYyBiLzM4OS1kcy1iYXNlLTMu My4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3NyYy9wcm9mX2xvZy5jCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAuLjA2MzJjM2IKLS0tIC9kZXYvbnVsbAorKysgYi8zODktZHMtYmFz ZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9zcmMvcHJvZl9sb2cuYwpAQCAtMCwwICsxLDcx NyBAQAorI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2plbWFsbG9jX3ByZWFtYmxlLmgiCisj aW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvamVtYWxsb2NfaW50ZXJuYWxfaW5jbHVkZXMuaCIK KworI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2Fzc2VydC5oIgorI2luY2x1ZGUgImplbWFs bG9jL2ludGVybmFsL2J1Zl93cml0ZXIuaCIKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9j a2guaCIKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9lbWl0dGVyLmgiCisjaW5jbHVkZSAi amVtYWxsb2MvaW50ZXJuYWwvaGFzaC5oIgorI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL21h bGxvY19pby5oIgorI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL211dGV4LmgiCisjaW5jbHVk ZSAiamVtYWxsb2MvaW50ZXJuYWwvcHJvZl9kYXRhLmgiCisjaW5jbHVkZSAiamVtYWxsb2MvaW50 ZXJuYWwvcHJvZl9sb2cuaCIKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9wcm9mX3N5cy5o IgorCitib29sIG9wdF9wcm9mX2xvZyA9IGZhbHNlOwordHlwZWRlZiBlbnVtIHByb2ZfbG9nZ2lu Z19zdGF0ZV9lIHByb2ZfbG9nZ2luZ19zdGF0ZV90OworZW51bSBwcm9mX2xvZ2dpbmdfc3RhdGVf ZSB7CisJcHJvZl9sb2dnaW5nX3N0YXRlX3N0b3BwZWQsCisJcHJvZl9sb2dnaW5nX3N0YXRlX3N0 YXJ0ZWQsCisJcHJvZl9sb2dnaW5nX3N0YXRlX2R1bXBpbmcKK307CisKKy8qCisgKiAtIHN0b3Bw ZWQ6IGxvZ19zdGFydCBuZXZlciBjYWxsZWQsIG9yIHByZXZpb3VzIGxvZ19zdG9wIGhhcyBjb21w bGV0ZWQuCisgKiAtIHN0YXJ0ZWQ6IGxvZ19zdGFydCBjYWxsZWQsIGxvZ19zdG9wIG5vdCBjYWxs ZWQgeWV0LiBBbGxvY2F0aW9ucyBhcmUgbG9nZ2VkLgorICogLSBkdW1waW5nOiBsb2dfc3RvcCBj YWxsZWQgYnV0IG5vdCBmaW5pc2hlZDsgc2FtcGxlcyBhcmUgbm90IGxvZ2dlZCBhbnltb3JlLgor ICovCitwcm9mX2xvZ2dpbmdfc3RhdGVfdCBwcm9mX2xvZ2dpbmdfc3RhdGUgPSBwcm9mX2xvZ2dp bmdfc3RhdGVfc3RvcHBlZDsKKworLyogVXNlZCBpbiB1bml0IHRlc3RzLiAqLworc3RhdGljIGJv b2wgcHJvZl9sb2dfZHVtbXkgPSBmYWxzZTsKKworLyogSW5jcmVtZW50ZWQgZm9yIGV2ZXJ5IGxv ZyBmaWxlIHRoYXQgaXMgb3V0cHV0LiAqLworc3RhdGljIHVpbnQ2NF90IGxvZ19zZXEgPSAwOwor c3RhdGljIGNoYXIgbG9nX2ZpbGVuYW1lWworICAgIC8qIE1pbmltaXplIG1lbW9yeSBibG9hdCBm b3Igbm9uLXByb2YgYnVpbGRzLiAqLworI2lmZGVmIEpFTUFMTE9DX1BST0YKKyAgICBQQVRIX01B WCArCisjZW5kaWYKKyAgICAxXTsKKworLyogVGltZXN0YW1wIGZvciBtb3N0IHJlY2VudCBjYWxs IHRvIGxvZ19zdGFydCgpLiAqLworc3RhdGljIG5zdGltZV90IGxvZ19zdGFydF90aW1lc3RhbXA7 CisKKy8qIEluY3JlbWVudCB0aGVzZSB3aGVuIGFkZGluZyB0byB0aGUgbG9nX2J0IGFuZCBsb2df dGhyIGxpbmtlZCBsaXN0cy4gKi8KK3N0YXRpYyBzaXplX3QgbG9nX2J0X2luZGV4ID0gMDsKK3N0 YXRpYyBzaXplX3QgbG9nX3Rocl9pbmRleCA9IDA7CisKKy8qIExpbmtlZCBsaXN0IG5vZGUgZGVm aW5pdGlvbnMuIFRoZXNlIGFyZSBvbmx5IHVzZWQgaW4gdGhpcyBmaWxlLiAqLwordHlwZWRlZiBz dHJ1Y3QgcHJvZl9idF9ub2RlX3MgcHJvZl9idF9ub2RlX3Q7CisKK3N0cnVjdCBwcm9mX2J0X25v ZGVfcyB7CisJcHJvZl9idF9ub2RlX3QgKm5leHQ7CisJc2l6ZV90IGluZGV4OworCXByb2ZfYnRf dCBidDsKKwkvKiBWYXJpYWJsZSBzaXplIGJhY2t0cmFjZSB2ZWN0b3IgcG9pbnRlZCB0byBieSBi dC4gKi8KKwl2b2lkICp2ZWNbMV07Cit9OworCit0eXBlZGVmIHN0cnVjdCBwcm9mX3Rocl9ub2Rl X3MgcHJvZl90aHJfbm9kZV90OworCitzdHJ1Y3QgcHJvZl90aHJfbm9kZV9zIHsKKwlwcm9mX3Ro cl9ub2RlX3QgKm5leHQ7CisJc2l6ZV90IGluZGV4OworCXVpbnQ2NF90IHRocl91aWQ7CisJLyog VmFyaWFibGUgc2l6ZSBiYXNlZCBvbiB0aHJfbmFtZV9zei4gKi8KKwljaGFyIG5hbWVbMV07Cit9 OworCit0eXBlZGVmIHN0cnVjdCBwcm9mX2FsbG9jX25vZGVfcyBwcm9mX2FsbG9jX25vZGVfdDsK KworLyogVGhpcyBpcyBvdXRwdXQgd2hlbiBsb2dnaW5nIHNhbXBsZWQgYWxsb2NhdGlvbnMuICov CitzdHJ1Y3QgcHJvZl9hbGxvY19ub2RlX3MgeworCXByb2ZfYWxsb2Nfbm9kZV90ICpuZXh0Owor CS8qIEluZGljZXMgaW50byBhbiBhcnJheSBvZiB0aHJlYWQgZGF0YS4gKi8KKwlzaXplX3QgYWxs b2NfdGhyX2luZDsKKwlzaXplX3QgZnJlZV90aHJfaW5kOworCisJLyogSW5kaWNlcyBpbnRvIGFu IGFycmF5IG9mIGJhY2t0cmFjZXMuICovCisJc2l6ZV90IGFsbG9jX2J0X2luZDsKKwlzaXplX3Qg ZnJlZV9idF9pbmQ7CisKKwl1aW50NjRfdCBhbGxvY190aW1lX25zOworCXVpbnQ2NF90IGZyZWVf dGltZV9uczsKKworCXNpemVfdCB1c2l6ZTsKK307CisKKy8qCisgKiBDcmVhdGVkIG9uIHRoZSBm aXJzdCBjYWxsIHRvIHByb2ZfdHJ5X2xvZyBhbmQgZGVsZXRlZCBvbiBwcm9mX2xvZ19zdG9wLgor ICogVGhlc2UgYXJlIHRoZSBiYWNrdHJhY2VzIGFuZCB0aHJlYWRzIHRoYXQgaGF2ZSBhbHJlYWR5 IGJlZW4gbG9nZ2VkIGJ5IGFuCisgKiBhbGxvY2F0aW9uLgorICovCitzdGF0aWMgYm9vbCBsb2df dGFibGVzX2luaXRpYWxpemVkID0gZmFsc2U7CitzdGF0aWMgY2toX3QgbG9nX2J0X25vZGVfc2V0 Oworc3RhdGljIGNraF90IGxvZ190aHJfbm9kZV9zZXQ7CisKKy8qIFN0b3JlIGxpbmtlZCBsaXN0 cyBmb3IgbG9nZ2VkIGRhdGEuICovCitzdGF0aWMgcHJvZl9idF9ub2RlX3QgKmxvZ19idF9maXJz dCA9IE5VTEw7CitzdGF0aWMgcHJvZl9idF9ub2RlX3QgKmxvZ19idF9sYXN0ID0gTlVMTDsKK3N0 YXRpYyBwcm9mX3Rocl9ub2RlX3QgKmxvZ190aHJfZmlyc3QgPSBOVUxMOworc3RhdGljIHByb2Zf dGhyX25vZGVfdCAqbG9nX3Rocl9sYXN0ID0gTlVMTDsKK3N0YXRpYyBwcm9mX2FsbG9jX25vZGVf dCAqbG9nX2FsbG9jX2ZpcnN0ID0gTlVMTDsKK3N0YXRpYyBwcm9mX2FsbG9jX25vZGVfdCAqbG9n X2FsbG9jX2xhc3QgPSBOVUxMOworCisvKiBQcm90ZWN0cyB0aGUgcHJvZl9sb2dnaW5nX3N0YXRl IGFuZCBhbnkgbG9nX3suLi59IHZhcmlhYmxlLiAqLworbWFsbG9jX211dGV4X3QgbG9nX210eDsK KworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiBGdW5jdGlvbiBwcm90b3R5cGVzIGZv ciBzdGF0aWMgZnVuY3Rpb25zIHRoYXQgYXJlIHJlZmVyZW5jZWQgcHJpb3IgdG8KKyAqIGRlZmlu aXRpb24uCisgKi8KKworLyogSGFzaHRhYmxlIGZ1bmN0aW9ucyBmb3IgbG9nX2J0X25vZGVfc2V0 IGFuZCBsb2dfdGhyX25vZGVfc2V0LiAqLworc3RhdGljIHZvaWQgcHJvZl90aHJfbm9kZV9oYXNo KGNvbnN0IHZvaWQgKmtleSwgc2l6ZV90IHJfaGFzaFsyXSk7CitzdGF0aWMgYm9vbCBwcm9mX3Ro cl9ub2RlX2tleWNvbXAoY29uc3Qgdm9pZCAqazEsIGNvbnN0IHZvaWQgKmsyKTsKK3N0YXRpYyB2 b2lkIHByb2ZfYnRfbm9kZV9oYXNoKGNvbnN0IHZvaWQgKmtleSwgc2l6ZV90IHJfaGFzaFsyXSk7 CitzdGF0aWMgYm9vbCBwcm9mX2J0X25vZGVfa2V5Y29tcChjb25zdCB2b2lkICprMSwgY29uc3Qg dm9pZCAqazIpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgc2l6ZV90Citw cm9mX2xvZ19idF9pbmRleCh0c2RfdCAqdHNkLCBwcm9mX2J0X3QgKmJ0KSB7CisJYXNzZXJ0KHBy b2ZfbG9nZ2luZ19zdGF0ZSA9PSBwcm9mX2xvZ2dpbmdfc3RhdGVfc3RhcnRlZCk7CisJbWFsbG9j X211dGV4X2Fzc2VydF9vd25lcih0c2RfdHNkbih0c2QpLCAmbG9nX210eCk7CisKKwlwcm9mX2J0 X25vZGVfdCBkdW1teV9ub2RlOworCWR1bW15X25vZGUuYnQgPSAqYnQ7CisJcHJvZl9idF9ub2Rl X3QgKm5vZGU7CisKKwkvKiBTZWUgaWYgdGhpcyBiYWNrdHJhY2UgaXMgYWxyZWFkeSBjYWNoZWQg aW4gdGhlIHRhYmxlLiAqLworCWlmIChja2hfc2VhcmNoKCZsb2dfYnRfbm9kZV9zZXQsICh2b2lk ICopKCZkdW1teV9ub2RlKSwKKwkgICAgKHZvaWQgKiopKCZub2RlKSwgTlVMTCkpIHsKKwkJc2l6 ZV90IHN6ID0gb2Zmc2V0b2YocHJvZl9idF9ub2RlX3QsIHZlYykgKworCQkJICAgICAgICAoYnQt PmxlbiAqIHNpemVvZih2b2lkICopKTsKKwkJcHJvZl9idF9ub2RlX3QgKm5ld19ub2RlID0gKHBy b2ZfYnRfbm9kZV90ICopCisJCSAgICBpYWxsb2N6dG0odHNkX3RzZG4odHNkKSwgc3osIHN6X3Np emUyaW5kZXgoc3opLCBmYWxzZSwgTlVMTCwKKwkJICAgIHRydWUsIGFyZW5hX2dldChUU0ROX05V TEwsIDAsIHRydWUpLCB0cnVlKTsKKwkJaWYgKGxvZ19idF9maXJzdCA9PSBOVUxMKSB7CisJCQls b2dfYnRfZmlyc3QgPSBuZXdfbm9kZTsKKwkJCWxvZ19idF9sYXN0ID0gbmV3X25vZGU7CisJCX0g ZWxzZSB7CisJCQlsb2dfYnRfbGFzdC0+bmV4dCA9IG5ld19ub2RlOworCQkJbG9nX2J0X2xhc3Qg PSBuZXdfbm9kZTsKKwkJfQorCisJCW5ld19ub2RlLT5uZXh0ID0gTlVMTDsKKwkJbmV3X25vZGUt PmluZGV4ID0gbG9nX2J0X2luZGV4OworCQkvKgorCQkgKiBDb3B5IHRoZSBiYWNrdHJhY2U6IGJ0 IGlzIGluc2lkZSBhIHRkYXRhIG9yIGdjdHgsIHdoaWNoCisJCSAqIG1pZ2h0IGRpZSBiZWZvcmUg cHJvZl9sb2dfc3RvcCBpcyBjYWxsZWQuCisJCSAqLworCQluZXdfbm9kZS0+YnQubGVuID0gYnQt PmxlbjsKKwkJbWVtY3B5KG5ld19ub2RlLT52ZWMsIGJ0LT52ZWMsIGJ0LT5sZW4gKiBzaXplb2Yo dm9pZCAqKSk7CisJCW5ld19ub2RlLT5idC52ZWMgPSBuZXdfbm9kZS0+dmVjOworCisJCWxvZ19i dF9pbmRleCsrOworCQlja2hfaW5zZXJ0KHRzZCwgJmxvZ19idF9ub2RlX3NldCwgKHZvaWQgKilu ZXdfbm9kZSwgTlVMTCk7CisJCXJldHVybiBuZXdfbm9kZS0+aW5kZXg7CisJfSBlbHNlIHsKKwkJ cmV0dXJuIG5vZGUtPmluZGV4OworCX0KK30KKworc3RhdGljIHNpemVfdAorcHJvZl9sb2dfdGhy X2luZGV4KHRzZF90ICp0c2QsIHVpbnQ2NF90IHRocl91aWQsIGNvbnN0IGNoYXIgKm5hbWUpIHsK Kwlhc3NlcnQocHJvZl9sb2dnaW5nX3N0YXRlID09IHByb2ZfbG9nZ2luZ19zdGF0ZV9zdGFydGVk KTsKKwltYWxsb2NfbXV0ZXhfYXNzZXJ0X293bmVyKHRzZF90c2RuKHRzZCksICZsb2dfbXR4KTsK KworCXByb2ZfdGhyX25vZGVfdCBkdW1teV9ub2RlOworCWR1bW15X25vZGUudGhyX3VpZCA9IHRo cl91aWQ7CisJcHJvZl90aHJfbm9kZV90ICpub2RlOworCisJLyogU2VlIGlmIHRoaXMgdGhyZWFk IGlzIGFscmVhZHkgY2FjaGVkIGluIHRoZSB0YWJsZS4gKi8KKwlpZiAoY2toX3NlYXJjaCgmbG9n X3Rocl9ub2RlX3NldCwgKHZvaWQgKikoJmR1bW15X25vZGUpLAorCSAgICAodm9pZCAqKikoJm5v ZGUpLCBOVUxMKSkgeworCQlzaXplX3Qgc3ogPSBvZmZzZXRvZihwcm9mX3Rocl9ub2RlX3QsIG5h bWUpICsgc3RybGVuKG5hbWUpICsgMTsKKwkJcHJvZl90aHJfbm9kZV90ICpuZXdfbm9kZSA9IChw cm9mX3Rocl9ub2RlX3QgKikKKwkJICAgIGlhbGxvY3p0bSh0c2RfdHNkbih0c2QpLCBzeiwgc3pf c2l6ZTJpbmRleChzeiksIGZhbHNlLCBOVUxMLAorCQkgICAgdHJ1ZSwgYXJlbmFfZ2V0KFRTRE5f TlVMTCwgMCwgdHJ1ZSksIHRydWUpOworCQlpZiAobG9nX3Rocl9maXJzdCA9PSBOVUxMKSB7CisJ CQlsb2dfdGhyX2ZpcnN0ID0gbmV3X25vZGU7CisJCQlsb2dfdGhyX2xhc3QgPSBuZXdfbm9kZTsK KwkJfSBlbHNlIHsKKwkJCWxvZ190aHJfbGFzdC0+bmV4dCA9IG5ld19ub2RlOworCQkJbG9nX3Ro cl9sYXN0ID0gbmV3X25vZGU7CisJCX0KKworCQluZXdfbm9kZS0+bmV4dCA9IE5VTEw7CisJCW5l d19ub2RlLT5pbmRleCA9IGxvZ190aHJfaW5kZXg7CisJCW5ld19ub2RlLT50aHJfdWlkID0gdGhy X3VpZDsKKwkJc3RyY3B5KG5ld19ub2RlLT5uYW1lLCBuYW1lKTsKKworCQlsb2dfdGhyX2luZGV4 Kys7CisJCWNraF9pbnNlcnQodHNkLCAmbG9nX3Rocl9ub2RlX3NldCwgKHZvaWQgKiluZXdfbm9k ZSwgTlVMTCk7CisJCXJldHVybiBuZXdfbm9kZS0+aW5kZXg7CisJfSBlbHNlIHsKKwkJcmV0dXJu IG5vZGUtPmluZGV4OworCX0KK30KKworSkVNQUxMT0NfQ09MRAordm9pZAorcHJvZl90cnlfbG9n KHRzZF90ICp0c2QsIHNpemVfdCB1c2l6ZSwgcHJvZl9pbmZvX3QgKnByb2ZfaW5mbykgeworCWNh c3NlcnQoY29uZmlnX3Byb2YpOworCXByb2ZfdGN0eF90ICp0Y3R4ID0gcHJvZl9pbmZvLT5hbGxv Y190Y3R4OworCW1hbGxvY19tdXRleF9hc3NlcnRfb3duZXIodHNkX3RzZG4odHNkKSwgdGN0eC0+ dGRhdGEtPmxvY2spOworCisJcHJvZl90ZGF0YV90ICpjb25zX3RkYXRhID0gcHJvZl90ZGF0YV9n ZXQodHNkLCBmYWxzZSk7CisJaWYgKGNvbnNfdGRhdGEgPT0gTlVMTCkgeworCQkvKgorCQkgKiBX ZSBkZWNpZGUgbm90IHRvIGxvZyB0aGVzZSBhbGxvY2F0aW9ucy4gY29uc190ZGF0YSB3aWxsIGJl CisJCSAqIE5VTEwgb25seSB3aGVuIHRoZSBjdXJyZW50IHRocmVhZCBpcyBpbiBhIHdlaXJkIHN0 YXRlIChlLmcuCisJCSAqIGl0J3MgYmVpbmcgZGVzdHJveWVkKS4KKwkJICovCisJCXJldHVybjsK Kwl9CisKKwltYWxsb2NfbXV0ZXhfbG9jayh0c2RfdHNkbih0c2QpLCAmbG9nX210eCk7CisKKwlp ZiAocHJvZl9sb2dnaW5nX3N0YXRlICE9IHByb2ZfbG9nZ2luZ19zdGF0ZV9zdGFydGVkKSB7CisJ CWdvdG8gbGFiZWxfZG9uZTsKKwl9CisKKwlpZiAoIWxvZ190YWJsZXNfaW5pdGlhbGl6ZWQpIHsK KwkJYm9vbCBlcnIxID0gY2toX25ldyh0c2QsICZsb2dfYnRfbm9kZV9zZXQsIFBST0ZfQ0tIX01J TklURU1TLAorCQkJCXByb2ZfYnRfbm9kZV9oYXNoLCBwcm9mX2J0X25vZGVfa2V5Y29tcCk7CisJ CWJvb2wgZXJyMiA9IGNraF9uZXcodHNkLCAmbG9nX3Rocl9ub2RlX3NldCwgUFJPRl9DS0hfTUlO SVRFTVMsCisJCQkJcHJvZl90aHJfbm9kZV9oYXNoLCBwcm9mX3Rocl9ub2RlX2tleWNvbXApOwor CQlpZiAoZXJyMSB8fCBlcnIyKSB7CisJCQlnb3RvIGxhYmVsX2RvbmU7CisJCX0KKwkJbG9nX3Rh Ymxlc19pbml0aWFsaXplZCA9IHRydWU7CisJfQorCisJbnN0aW1lX3QgYWxsb2NfdGltZSA9IHBy b2ZfaW5mby0+YWxsb2NfdGltZTsKKwluc3RpbWVfdCBmcmVlX3RpbWU7CisJbnN0aW1lX3Byb2Zf aW5pdF91cGRhdGUoJmZyZWVfdGltZSk7CisKKwlzaXplX3Qgc3ogPSBzaXplb2YocHJvZl9hbGxv Y19ub2RlX3QpOworCXByb2ZfYWxsb2Nfbm9kZV90ICpuZXdfbm9kZSA9IChwcm9mX2FsbG9jX25v ZGVfdCAqKQorCSAgICBpYWxsb2N6dG0odHNkX3RzZG4odHNkKSwgc3osIHN6X3NpemUyaW5kZXgo c3opLCBmYWxzZSwgTlVMTCwgdHJ1ZSwKKwkgICAgYXJlbmFfZ2V0KFRTRE5fTlVMTCwgMCwgdHJ1 ZSksIHRydWUpOworCisJY29uc3QgY2hhciAqcHJvZF90aHJfbmFtZSA9ICh0Y3R4LT50ZGF0YS0+ dGhyZWFkX25hbWUgPT0gTlVMTCk/CisJCQkJICAgICAgICAiIiA6IHRjdHgtPnRkYXRhLT50aHJl YWRfbmFtZTsKKwljb25zdCBjaGFyICpjb25zX3Rocl9uYW1lID0gcHJvZl90aHJlYWRfbmFtZV9n ZXQodHNkKTsKKworCXByb2ZfYnRfdCBidDsKKwkvKiBJbml0aWFsaXplIHRoZSBiYWNrdHJhY2Us IHVzaW5nIHRoZSBidWZmZXIgaW4gdGRhdGEgdG8gc3RvcmUgaXQuICovCisJYnRfaW5pdCgmYnQs IGNvbnNfdGRhdGEtPnZlYyk7CisJcHJvZl9iYWNrdHJhY2UodHNkLCAmYnQpOworCXByb2ZfYnRf dCAqY29uc19idCA9ICZidDsKKworCS8qIFdlIGhhdmVuJ3QgZGVzdHJveWVkIHRjdHggeWV0LCBz byBnY3R4IHNob3VsZCBiZSBnb29kIHRvIHJlYWQuICovCisJcHJvZl9idF90ICpwcm9kX2J0ID0g JnRjdHgtPmdjdHgtPmJ0OworCisJbmV3X25vZGUtPm5leHQgPSBOVUxMOworCW5ld19ub2RlLT5h bGxvY190aHJfaW5kID0gcHJvZl9sb2dfdGhyX2luZGV4KHRzZCwgdGN0eC0+dGRhdGEtPnRocl91 aWQsCisJCQkJICAgICAgcHJvZF90aHJfbmFtZSk7CisJbmV3X25vZGUtPmZyZWVfdGhyX2luZCA9 IHByb2ZfbG9nX3Rocl9pbmRleCh0c2QsIGNvbnNfdGRhdGEtPnRocl91aWQsCisJCQkJICAgICBj b25zX3Rocl9uYW1lKTsKKwluZXdfbm9kZS0+YWxsb2NfYnRfaW5kID0gcHJvZl9sb2dfYnRfaW5k ZXgodHNkLCBwcm9kX2J0KTsKKwluZXdfbm9kZS0+ZnJlZV9idF9pbmQgPSBwcm9mX2xvZ19idF9p bmRleCh0c2QsIGNvbnNfYnQpOworCW5ld19ub2RlLT5hbGxvY190aW1lX25zID0gbnN0aW1lX25z KCZhbGxvY190aW1lKTsKKwluZXdfbm9kZS0+ZnJlZV90aW1lX25zID0gbnN0aW1lX25zKCZmcmVl X3RpbWUpOworCW5ld19ub2RlLT51c2l6ZSA9IHVzaXplOworCisJaWYgKGxvZ19hbGxvY19maXJz dCA9PSBOVUxMKSB7CisJCWxvZ19hbGxvY19maXJzdCA9IG5ld19ub2RlOworCQlsb2dfYWxsb2Nf bGFzdCA9IG5ld19ub2RlOworCX0gZWxzZSB7CisJCWxvZ19hbGxvY19sYXN0LT5uZXh0ID0gbmV3 X25vZGU7CisJCWxvZ19hbGxvY19sYXN0ID0gbmV3X25vZGU7CisJfQorCitsYWJlbF9kb25lOgor CW1hbGxvY19tdXRleF91bmxvY2sodHNkX3RzZG4odHNkKSwgJmxvZ19tdHgpOworfQorCitzdGF0 aWMgdm9pZAorcHJvZl9idF9ub2RlX2hhc2goY29uc3Qgdm9pZCAqa2V5LCBzaXplX3Qgcl9oYXNo WzJdKSB7CisJY29uc3QgcHJvZl9idF9ub2RlX3QgKmJ0X25vZGUgPSAocHJvZl9idF9ub2RlX3Qg KilrZXk7CisJcHJvZl9idF9oYXNoKCh2b2lkICopKCZidF9ub2RlLT5idCksIHJfaGFzaCk7Cit9 CisKK3N0YXRpYyBib29sCitwcm9mX2J0X25vZGVfa2V5Y29tcChjb25zdCB2b2lkICprMSwgY29u c3Qgdm9pZCAqazIpIHsKKwljb25zdCBwcm9mX2J0X25vZGVfdCAqYnRfbm9kZTEgPSAocHJvZl9i dF9ub2RlX3QgKilrMTsKKwljb25zdCBwcm9mX2J0X25vZGVfdCAqYnRfbm9kZTIgPSAocHJvZl9i dF9ub2RlX3QgKilrMjsKKwlyZXR1cm4gcHJvZl9idF9rZXljb21wKCh2b2lkICopKCZidF9ub2Rl MS0+YnQpLAorCSAgICAodm9pZCAqKSgmYnRfbm9kZTItPmJ0KSk7Cit9CisKK3N0YXRpYyB2b2lk Citwcm9mX3Rocl9ub2RlX2hhc2goY29uc3Qgdm9pZCAqa2V5LCBzaXplX3Qgcl9oYXNoWzJdKSB7 CisJY29uc3QgcHJvZl90aHJfbm9kZV90ICp0aHJfbm9kZSA9IChwcm9mX3Rocl9ub2RlX3QgKilr ZXk7CisJaGFzaCgmdGhyX25vZGUtPnRocl91aWQsIHNpemVvZih1aW50NjRfdCksIDB4OTQxMjJm MzVVLCByX2hhc2gpOworfQorCitzdGF0aWMgYm9vbAorcHJvZl90aHJfbm9kZV9rZXljb21wKGNv bnN0IHZvaWQgKmsxLCBjb25zdCB2b2lkICprMikgeworCWNvbnN0IHByb2ZfdGhyX25vZGVfdCAq dGhyX25vZGUxID0gKHByb2ZfdGhyX25vZGVfdCAqKWsxOworCWNvbnN0IHByb2ZfdGhyX25vZGVf dCAqdGhyX25vZGUyID0gKHByb2ZfdGhyX25vZGVfdCAqKWsyOworCXJldHVybiB0aHJfbm9kZTEt PnRocl91aWQgPT0gdGhyX25vZGUyLT50aHJfdWlkOworfQorCisvKiBVc2VkIGluIHVuaXQgdGVz dHMuICovCitzaXplX3QKK3Byb2ZfbG9nX2J0X2NvdW50KHZvaWQpIHsKKwljYXNzZXJ0KGNvbmZp Z19wcm9mKTsKKwlzaXplX3QgY250ID0gMDsKKwlwcm9mX2J0X25vZGVfdCAqbm9kZSA9IGxvZ19i dF9maXJzdDsKKwl3aGlsZSAobm9kZSAhPSBOVUxMKSB7CisJCWNudCsrOworCQlub2RlID0gbm9k ZS0+bmV4dDsKKwl9CisJcmV0dXJuIGNudDsKK30KKworLyogVXNlZCBpbiB1bml0IHRlc3RzLiAq Lworc2l6ZV90Citwcm9mX2xvZ19hbGxvY19jb3VudCh2b2lkKSB7CisJY2Fzc2VydChjb25maWdf cHJvZik7CisJc2l6ZV90IGNudCA9IDA7CisJcHJvZl9hbGxvY19ub2RlX3QgKm5vZGUgPSBsb2df YWxsb2NfZmlyc3Q7CisJd2hpbGUgKG5vZGUgIT0gTlVMTCkgeworCQljbnQrKzsKKwkJbm9kZSA9 IG5vZGUtPm5leHQ7CisJfQorCXJldHVybiBjbnQ7Cit9CisKKy8qIFVzZWQgaW4gdW5pdCB0ZXN0 cy4gKi8KK3NpemVfdAorcHJvZl9sb2dfdGhyX2NvdW50KHZvaWQpIHsKKwljYXNzZXJ0KGNvbmZp Z19wcm9mKTsKKwlzaXplX3QgY250ID0gMDsKKwlwcm9mX3Rocl9ub2RlX3QgKm5vZGUgPSBsb2df dGhyX2ZpcnN0OworCXdoaWxlIChub2RlICE9IE5VTEwpIHsKKwkJY250Kys7CisJCW5vZGUgPSBu b2RlLT5uZXh0OworCX0KKwlyZXR1cm4gY250OworfQorCisvKiBVc2VkIGluIHVuaXQgdGVzdHMu ICovCitib29sCitwcm9mX2xvZ19pc19sb2dnaW5nKHZvaWQpIHsKKwljYXNzZXJ0KGNvbmZpZ19w cm9mKTsKKwlyZXR1cm4gcHJvZl9sb2dnaW5nX3N0YXRlID09IHByb2ZfbG9nZ2luZ19zdGF0ZV9z dGFydGVkOworfQorCisvKiBVc2VkIGluIHVuaXQgdGVzdHMuICovCitib29sCitwcm9mX2xvZ19y ZXBfY2hlY2sodm9pZCkgeworCWNhc3NlcnQoY29uZmlnX3Byb2YpOworCWlmIChwcm9mX2xvZ2dp bmdfc3RhdGUgPT0gcHJvZl9sb2dnaW5nX3N0YXRlX3N0b3BwZWQKKwkgICAgJiYgbG9nX3RhYmxl c19pbml0aWFsaXplZCkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwlpZiAobG9nX2J0X2xhc3Qg IT0gTlVMTCAmJiBsb2dfYnRfbGFzdC0+bmV4dCAhPSBOVUxMKSB7CisJCXJldHVybiB0cnVlOwor CX0KKwlpZiAobG9nX3Rocl9sYXN0ICE9IE5VTEwgJiYgbG9nX3Rocl9sYXN0LT5uZXh0ICE9IE5V TEwpIHsKKwkJcmV0dXJuIHRydWU7CisJfQorCWlmIChsb2dfYWxsb2NfbGFzdCAhPSBOVUxMICYm IGxvZ19hbGxvY19sYXN0LT5uZXh0ICE9IE5VTEwpIHsKKwkJcmV0dXJuIHRydWU7CisJfQorCisJ c2l6ZV90IGJ0X2NvdW50ID0gcHJvZl9sb2dfYnRfY291bnQoKTsKKwlzaXplX3QgdGhyX2NvdW50 ID0gcHJvZl9sb2dfdGhyX2NvdW50KCk7CisJc2l6ZV90IGFsbG9jX2NvdW50ID0gcHJvZl9sb2df YWxsb2NfY291bnQoKTsKKworCisJaWYgKHByb2ZfbG9nZ2luZ19zdGF0ZSA9PSBwcm9mX2xvZ2dp bmdfc3RhdGVfc3RvcHBlZCkgeworCQlpZiAoYnRfY291bnQgIT0gMCB8fCB0aHJfY291bnQgIT0g MCB8fCBhbGxvY19jb3VudCB8fCAwKSB7CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCX0KKworCXBy b2ZfYWxsb2Nfbm9kZV90ICpub2RlID0gbG9nX2FsbG9jX2ZpcnN0OworCXdoaWxlIChub2RlICE9 IE5VTEwpIHsKKwkJaWYgKG5vZGUtPmFsbG9jX2J0X2luZCA+PSBidF9jb3VudCkgeworCQkJcmV0 dXJuIHRydWU7CisJCX0KKwkJaWYgKG5vZGUtPmZyZWVfYnRfaW5kID49IGJ0X2NvdW50KSB7CisJ CQlyZXR1cm4gdHJ1ZTsKKwkJfQorCQlpZiAobm9kZS0+YWxsb2NfdGhyX2luZCA+PSB0aHJfY291 bnQpIHsKKwkJCXJldHVybiB0cnVlOworCQl9CisJCWlmIChub2RlLT5mcmVlX3Rocl9pbmQgPj0g dGhyX2NvdW50KSB7CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCQlpZiAobm9kZS0+YWxsb2NfdGlt ZV9ucyA+IG5vZGUtPmZyZWVfdGltZV9ucykgeworCQkJcmV0dXJuIHRydWU7CisJCX0KKwkJbm9k ZSA9IG5vZGUtPm5leHQ7CisJfQorCisJcmV0dXJuIGZhbHNlOworfQorCisvKiBVc2VkIGluIHVu aXQgdGVzdHMuICovCit2b2lkCitwcm9mX2xvZ19kdW1teV9zZXQoYm9vbCBuZXdfdmFsdWUpIHsK KwljYXNzZXJ0KGNvbmZpZ19wcm9mKTsKKwlwcm9mX2xvZ19kdW1teSA9IG5ld192YWx1ZTsKK30K KworLyogVXNlZCBhcyBhbiBhdGV4aXQgZnVuY3Rpb24gdG8gc3RvcCBsb2dnaW5nIG9uIGV4aXQu ICovCitzdGF0aWMgdm9pZAorcHJvZl9sb2dfc3RvcF9maW5hbCh2b2lkKSB7CisJdHNkX3QgKnRz ZCA9IHRzZF9mZXRjaCgpOworCXByb2ZfbG9nX3N0b3AodHNkX3RzZG4odHNkKSk7Cit9CisKK0pF TUFMTE9DX0NPTEQKK2Jvb2wKK3Byb2ZfbG9nX3N0YXJ0KHRzZG5fdCAqdHNkbiwgY29uc3QgY2hh ciAqZmlsZW5hbWUpIHsKKwljYXNzZXJ0KGNvbmZpZ19wcm9mKTsKKworCWlmICghb3B0X3Byb2Yp IHsKKwkJcmV0dXJuIHRydWU7CisJfQorCisJYm9vbCByZXQgPSBmYWxzZTsKKworCW1hbGxvY19t dXRleF9sb2NrKHRzZG4sICZsb2dfbXR4KTsKKworCXN0YXRpYyBib29sIHByb2ZfbG9nX2F0ZXhp dF9jYWxsZWQgPSBmYWxzZTsKKwlpZiAoIXByb2ZfbG9nX2F0ZXhpdF9jYWxsZWQpIHsKKwkJcHJv Zl9sb2dfYXRleGl0X2NhbGxlZCA9IHRydWU7CisJCWlmIChhdGV4aXQocHJvZl9sb2dfc3RvcF9m aW5hbCkgIT0gMCkgeworCQkJbWFsbG9jX3dyaXRlKCI8amVtYWxsb2M+OiBFcnJvciBpbiBhdGV4 aXQoKSAiCisJCQkgICAgImZvciBsb2dnaW5nXG4iKTsKKwkJCWlmIChvcHRfYWJvcnQpIHsKKwkJ CQlhYm9ydCgpOworCQkJfQorCQkJcmV0ID0gdHJ1ZTsKKwkJCWdvdG8gbGFiZWxfZG9uZTsKKwkJ fQorCX0KKworCWlmIChwcm9mX2xvZ2dpbmdfc3RhdGUgIT0gcHJvZl9sb2dnaW5nX3N0YXRlX3N0 b3BwZWQpIHsKKwkJcmV0ID0gdHJ1ZTsKKwl9IGVsc2UgaWYgKGZpbGVuYW1lID09IE5VTEwpIHsK KwkJLyogTWFrZSBkZWZhdWx0IG5hbWUuICovCisJCXByb2ZfZ2V0X2RlZmF1bHRfZmlsZW5hbWUo dHNkbiwgbG9nX2ZpbGVuYW1lLCBsb2dfc2VxKTsKKwkJbG9nX3NlcSsrOworCQlwcm9mX2xvZ2dp bmdfc3RhdGUgPSBwcm9mX2xvZ2dpbmdfc3RhdGVfc3RhcnRlZDsKKwl9IGVsc2UgaWYgKHN0cmxl bihmaWxlbmFtZSkgPj0gUFJPRl9EVU1QX0ZJTEVOQU1FX0xFTikgeworCQlyZXQgPSB0cnVlOwor CX0gZWxzZSB7CisJCXN0cmNweShsb2dfZmlsZW5hbWUsIGZpbGVuYW1lKTsKKwkJcHJvZl9sb2dn aW5nX3N0YXRlID0gcHJvZl9sb2dnaW5nX3N0YXRlX3N0YXJ0ZWQ7CisJfQorCisJaWYgKCFyZXQp IHsKKwkJbnN0aW1lX3Byb2ZfaW5pdF91cGRhdGUoJmxvZ19zdGFydF90aW1lc3RhbXApOworCX0K K2xhYmVsX2RvbmU6CisJbWFsbG9jX211dGV4X3VubG9jayh0c2RuLCAmbG9nX210eCk7CisKKwly ZXR1cm4gcmV0OworfQorCitzdHJ1Y3QgcHJvZl9lbWl0dGVyX2NiX2FyZ19zIHsKKwlpbnQgZmQ7 CisJc3NpemVfdCByZXQ7Cit9OworCitzdGF0aWMgdm9pZAorcHJvZl9lbWl0dGVyX3dyaXRlX2Ni KHZvaWQgKm9wYXF1ZSwgY29uc3QgY2hhciAqdG9fd3JpdGUpIHsKKwlzdHJ1Y3QgcHJvZl9lbWl0 dGVyX2NiX2FyZ19zICphcmcgPQorCSAgICAoc3RydWN0IHByb2ZfZW1pdHRlcl9jYl9hcmdfcyAq KW9wYXF1ZTsKKwlzaXplX3QgYnl0ZXMgPSBzdHJsZW4odG9fd3JpdGUpOworCWlmIChwcm9mX2xv Z19kdW1teSkgeworCQlyZXR1cm47CisJfQorCWFyZy0+cmV0ID0gbWFsbG9jX3dyaXRlX2ZkKGFy Zy0+ZmQsIHRvX3dyaXRlLCBieXRlcyk7Cit9CisKKy8qCisgKiBwcm9mX2xvZ19lbWl0X3suLi59 IGdvZXMgdGhyb3VnaCB0aGUgYXBwcm9wcmlhdGUgbGlua2VkIGxpc3QsIGVtaXR0aW5nIGVhY2gK KyAqIG5vZGUgdG8gdGhlIGpzb24gYW5kIGRlYWxsb2NhdGluZyBpdC4KKyAqLworc3RhdGljIHZv aWQKK3Byb2ZfbG9nX2VtaXRfdGhyZWFkcyh0c2RfdCAqdHNkLCBlbWl0dGVyX3QgKmVtaXR0ZXIp IHsKKwllbWl0dGVyX2pzb25fYXJyYXlfa3ZfYmVnaW4oZW1pdHRlciwgInRocmVhZHMiKTsKKwlw cm9mX3Rocl9ub2RlX3QgKnRocl9ub2RlID0gbG9nX3Rocl9maXJzdDsKKwlwcm9mX3Rocl9ub2Rl X3QgKnRocl9vbGRfbm9kZTsKKwl3aGlsZSAodGhyX25vZGUgIT0gTlVMTCkgeworCQllbWl0dGVy X2pzb25fb2JqZWN0X2JlZ2luKGVtaXR0ZXIpOworCisJCWVtaXR0ZXJfanNvbl9rdihlbWl0dGVy LCAidGhyX3VpZCIsIGVtaXR0ZXJfdHlwZV91aW50NjQsCisJCSAgICAmdGhyX25vZGUtPnRocl91 aWQpOworCisJCWNoYXIgKnRocl9uYW1lID0gdGhyX25vZGUtPm5hbWU7CisKKwkJZW1pdHRlcl9q c29uX2t2KGVtaXR0ZXIsICJ0aHJfbmFtZSIsIGVtaXR0ZXJfdHlwZV9zdHJpbmcsCisJCSAgICAm dGhyX25hbWUpOworCisJCWVtaXR0ZXJfanNvbl9vYmplY3RfZW5kKGVtaXR0ZXIpOworCQl0aHJf b2xkX25vZGUgPSB0aHJfbm9kZTsKKwkJdGhyX25vZGUgPSB0aHJfbm9kZS0+bmV4dDsKKwkJaWRh bGxvY3RtKHRzZF90c2RuKHRzZCksIHRocl9vbGRfbm9kZSwgTlVMTCwgTlVMTCwgdHJ1ZSwgdHJ1 ZSk7CisJfQorCWVtaXR0ZXJfanNvbl9hcnJheV9lbmQoZW1pdHRlcik7Cit9CisKK3N0YXRpYyB2 b2lkCitwcm9mX2xvZ19lbWl0X3RyYWNlcyh0c2RfdCAqdHNkLCBlbWl0dGVyX3QgKmVtaXR0ZXIp IHsKKwllbWl0dGVyX2pzb25fYXJyYXlfa3ZfYmVnaW4oZW1pdHRlciwgInN0YWNrX3RyYWNlcyIp OworCXByb2ZfYnRfbm9kZV90ICpidF9ub2RlID0gbG9nX2J0X2ZpcnN0OworCXByb2ZfYnRfbm9k ZV90ICpidF9vbGRfbm9kZTsKKwkvKgorCSAqIENhbGN1bGF0ZSBob3cgbWFueSBoZXggZGlnaXRz IHdlIG5lZWQ6IHR3aWNlIG51bWJlciBvZiBieXRlcywgdHdvIGZvcgorCSAqICIweCIsIGFuZCB0 aGVuIG9uZSBtb3JlIGZvciB0ZXJtaW5hdGluZyAnXDAnLgorCSAqLworCWNoYXIgYnVmWzIgKiBz aXplb2YoaW50cHRyX3QpICsgM107CisJc2l6ZV90IGJ1Zl9zeiA9IHNpemVvZihidWYpOworCXdo aWxlIChidF9ub2RlICE9IE5VTEwpIHsKKwkJZW1pdHRlcl9qc29uX2FycmF5X2JlZ2luKGVtaXR0 ZXIpOworCQlzaXplX3QgaTsKKwkJZm9yIChpID0gMDsgaSA8IGJ0X25vZGUtPmJ0LmxlbjsgaSsr KSB7CisJCQltYWxsb2Nfc25wcmludGYoYnVmLCBidWZfc3osICIlcCIsIGJ0X25vZGUtPmJ0LnZl Y1tpXSk7CisJCQljaGFyICp0cmFjZV9zdHIgPSBidWY7CisJCQllbWl0dGVyX2pzb25fdmFsdWUo ZW1pdHRlciwgZW1pdHRlcl90eXBlX3N0cmluZywKKwkJCSAgICAmdHJhY2Vfc3RyKTsKKwkJfQor CQllbWl0dGVyX2pzb25fYXJyYXlfZW5kKGVtaXR0ZXIpOworCisJCWJ0X29sZF9ub2RlID0gYnRf bm9kZTsKKwkJYnRfbm9kZSA9IGJ0X25vZGUtPm5leHQ7CisJCWlkYWxsb2N0bSh0c2RfdHNkbih0 c2QpLCBidF9vbGRfbm9kZSwgTlVMTCwgTlVMTCwgdHJ1ZSwgdHJ1ZSk7CisJfQorCWVtaXR0ZXJf anNvbl9hcnJheV9lbmQoZW1pdHRlcik7Cit9CisKK3N0YXRpYyB2b2lkCitwcm9mX2xvZ19lbWl0 X2FsbG9jcyh0c2RfdCAqdHNkLCBlbWl0dGVyX3QgKmVtaXR0ZXIpIHsKKwllbWl0dGVyX2pzb25f YXJyYXlfa3ZfYmVnaW4oZW1pdHRlciwgImFsbG9jYXRpb25zIik7CisJcHJvZl9hbGxvY19ub2Rl X3QgKmFsbG9jX25vZGUgPSBsb2dfYWxsb2NfZmlyc3Q7CisJcHJvZl9hbGxvY19ub2RlX3QgKmFs bG9jX29sZF9ub2RlOworCXdoaWxlIChhbGxvY19ub2RlICE9IE5VTEwpIHsKKwkJZW1pdHRlcl9q c29uX29iamVjdF9iZWdpbihlbWl0dGVyKTsKKworCQllbWl0dGVyX2pzb25fa3YoZW1pdHRlciwg ImFsbG9jX3RocmVhZCIsIGVtaXR0ZXJfdHlwZV9zaXplLAorCQkgICAgJmFsbG9jX25vZGUtPmFs bG9jX3Rocl9pbmQpOworCisJCWVtaXR0ZXJfanNvbl9rdihlbWl0dGVyLCAiZnJlZV90aHJlYWQi LCBlbWl0dGVyX3R5cGVfc2l6ZSwKKwkJICAgICZhbGxvY19ub2RlLT5mcmVlX3Rocl9pbmQpOwor CisJCWVtaXR0ZXJfanNvbl9rdihlbWl0dGVyLCAiYWxsb2NfdHJhY2UiLCBlbWl0dGVyX3R5cGVf c2l6ZSwKKwkJICAgICZhbGxvY19ub2RlLT5hbGxvY19idF9pbmQpOworCisJCWVtaXR0ZXJfanNv bl9rdihlbWl0dGVyLCAiZnJlZV90cmFjZSIsIGVtaXR0ZXJfdHlwZV9zaXplLAorCQkgICAgJmFs bG9jX25vZGUtPmZyZWVfYnRfaW5kKTsKKworCQllbWl0dGVyX2pzb25fa3YoZW1pdHRlciwgImFs bG9jX3RpbWVzdGFtcCIsCisJCSAgICBlbWl0dGVyX3R5cGVfdWludDY0LCAmYWxsb2Nfbm9kZS0+ YWxsb2NfdGltZV9ucyk7CisKKwkJZW1pdHRlcl9qc29uX2t2KGVtaXR0ZXIsICJmcmVlX3RpbWVz dGFtcCIsIGVtaXR0ZXJfdHlwZV91aW50NjQsCisJCSAgICAmYWxsb2Nfbm9kZS0+ZnJlZV90aW1l X25zKTsKKworCQllbWl0dGVyX2pzb25fa3YoZW1pdHRlciwgInVzaXplIiwgZW1pdHRlcl90eXBl X3VpbnQ2NCwKKwkJICAgICZhbGxvY19ub2RlLT51c2l6ZSk7CisKKwkJZW1pdHRlcl9qc29uX29i amVjdF9lbmQoZW1pdHRlcik7CisKKwkJYWxsb2Nfb2xkX25vZGUgPSBhbGxvY19ub2RlOworCQlh bGxvY19ub2RlID0gYWxsb2Nfbm9kZS0+bmV4dDsKKwkJaWRhbGxvY3RtKHRzZF90c2RuKHRzZCks IGFsbG9jX29sZF9ub2RlLCBOVUxMLCBOVUxMLCB0cnVlLAorCQkgICAgdHJ1ZSk7CisJfQorCWVt aXR0ZXJfanNvbl9hcnJheV9lbmQoZW1pdHRlcik7Cit9CisKK3N0YXRpYyB2b2lkCitwcm9mX2xv Z19lbWl0X21ldGFkYXRhKGVtaXR0ZXJfdCAqZW1pdHRlcikgeworCWVtaXR0ZXJfanNvbl9vYmpl Y3Rfa3ZfYmVnaW4oZW1pdHRlciwgImluZm8iKTsKKworCW5zdGltZV90IG5vdzsKKworCW5zdGlt ZV9wcm9mX2luaXRfdXBkYXRlKCZub3cpOworCXVpbnQ2NF90IG5zID0gbnN0aW1lX25zKCZub3cp IC0gbnN0aW1lX25zKCZsb2dfc3RhcnRfdGltZXN0YW1wKTsKKwllbWl0dGVyX2pzb25fa3YoZW1p dHRlciwgImR1cmF0aW9uIiwgZW1pdHRlcl90eXBlX3VpbnQ2NCwgJm5zKTsKKworCWNoYXIgKnZl cnMgPSBKRU1BTExPQ19WRVJTSU9OOworCWVtaXR0ZXJfanNvbl9rdihlbWl0dGVyLCAidmVyc2lv biIsCisJICAgIGVtaXR0ZXJfdHlwZV9zdHJpbmcsICZ2ZXJzKTsKKworCWVtaXR0ZXJfanNvbl9r dihlbWl0dGVyLCAibGdfc2FtcGxlX3JhdGUiLAorCSAgICBlbWl0dGVyX3R5cGVfaW50LCAmbGdf cHJvZl9zYW1wbGUpOworCisJY29uc3QgY2hhciAqcmVzX3R5cGUgPSBwcm9mX3RpbWVfcmVzX21v ZGVfbmFtZXNbb3B0X3Byb2ZfdGltZV9yZXNdOworCWVtaXR0ZXJfanNvbl9rdihlbWl0dGVyLCAi cHJvZl90aW1lX3Jlc29sdXRpb24iLCBlbWl0dGVyX3R5cGVfc3RyaW5nLAorCSAgICAmcmVzX3R5 cGUpOworCisJaW50IHBpZCA9IHByb2ZfZ2V0cGlkKCk7CisJZW1pdHRlcl9qc29uX2t2KGVtaXR0 ZXIsICJwaWQiLCBlbWl0dGVyX3R5cGVfaW50LCAmcGlkKTsKKworCWVtaXR0ZXJfanNvbl9vYmpl Y3RfZW5kKGVtaXR0ZXIpOworfQorCisjZGVmaW5lIFBST0ZfTE9HX1NUT1BfQlVGU0laRSBQUk9G X0RVTVBfQlVGU0laRQorSkVNQUxMT0NfQ09MRAorYm9vbAorcHJvZl9sb2dfc3RvcCh0c2RuX3Qg KnRzZG4pIHsKKwljYXNzZXJ0KGNvbmZpZ19wcm9mKTsKKwlpZiAoIW9wdF9wcm9mIHx8ICFwcm9m X2Jvb3RlZCkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwl0c2RfdCAqdHNkID0gdHNkbl90c2Qo dHNkbik7CisJbWFsbG9jX211dGV4X2xvY2sodHNkbiwgJmxvZ19tdHgpOworCisJaWYgKHByb2Zf bG9nZ2luZ19zdGF0ZSAhPSBwcm9mX2xvZ2dpbmdfc3RhdGVfc3RhcnRlZCkgeworCQltYWxsb2Nf bXV0ZXhfdW5sb2NrKHRzZG4sICZsb2dfbXR4KTsKKwkJcmV0dXJuIHRydWU7CisJfQorCisJLyoK KwkgKiBTZXQgdGhlIHN0YXRlIHRvIGR1bXBpbmcuIFdlJ2xsIHNldCBpdCB0byBzdG9wcGVkIHdo ZW4gd2UncmUgZG9uZS4KKwkgKiBTaW5jZSBvdGhlciB0aHJlYWRzIHdvbid0IGJlIGFibGUgdG8g c3RhcnQvc3RvcC9sb2cgd2hlbiB0aGUgc3RhdGUgaXMKKwkgKiBkdW1waW5nLCB3ZSBkb24ndCBo YXZlIHRvIGhvbGQgdGhlIGxvY2sgZHVyaW5nIHRoZSB3aG9sZSBtZXRob2QuCisJICovCisJcHJv Zl9sb2dnaW5nX3N0YXRlID0gcHJvZl9sb2dnaW5nX3N0YXRlX2R1bXBpbmc7CisJbWFsbG9jX211 dGV4X3VubG9jayh0c2RuLCAmbG9nX210eCk7CisKKworCWVtaXR0ZXJfdCBlbWl0dGVyOworCisJ LyogQ3JlYXRlIGEgZmlsZS4gKi8KKworCWludCBmZDsKKwlpZiAocHJvZl9sb2dfZHVtbXkpIHsK KwkJZmQgPSAwOworCX0gZWxzZSB7CisJCWZkID0gY3JlYXQobG9nX2ZpbGVuYW1lLCAwNjQ0KTsK Kwl9CisKKwlpZiAoZmQgPT0gLTEpIHsKKwkJbWFsbG9jX3ByaW50ZigiPGplbWFsbG9jPjogY3Jl YXQoKSBmb3IgbG9nIGZpbGUgXCIlc1wiICIKKwkJCSAgICAgICIgZmFpbGVkIHdpdGggJWRcbiIs IGxvZ19maWxlbmFtZSwgZXJybm8pOworCQlpZiAob3B0X2Fib3J0KSB7CisJCQlhYm9ydCgpOwor CQl9CisJCXJldHVybiB0cnVlOworCX0KKworCXN0cnVjdCBwcm9mX2VtaXR0ZXJfY2JfYXJnX3Mg YXJnOworCWFyZy5mZCA9IGZkOworCisJYnVmX3dyaXRlcl90IGJ1Zl93cml0ZXI7CisJYnVmX3dy aXRlcl9pbml0KHRzZG4sICZidWZfd3JpdGVyLCBwcm9mX2VtaXR0ZXJfd3JpdGVfY2IsICZhcmcs IE5VTEwsCisJICAgIFBST0ZfTE9HX1NUT1BfQlVGU0laRSk7CisJZW1pdHRlcl9pbml0KCZlbWl0 dGVyLCBlbWl0dGVyX291dHB1dF9qc29uX2NvbXBhY3QsIGJ1Zl93cml0ZXJfY2IsCisJICAgICZi dWZfd3JpdGVyKTsKKworCWVtaXR0ZXJfYmVnaW4oJmVtaXR0ZXIpOworCXByb2ZfbG9nX2VtaXRf bWV0YWRhdGEoJmVtaXR0ZXIpOworCXByb2ZfbG9nX2VtaXRfdGhyZWFkcyh0c2QsICZlbWl0dGVy KTsKKwlwcm9mX2xvZ19lbWl0X3RyYWNlcyh0c2QsICZlbWl0dGVyKTsKKwlwcm9mX2xvZ19lbWl0 X2FsbG9jcyh0c2QsICZlbWl0dGVyKTsKKwllbWl0dGVyX2VuZCgmZW1pdHRlcik7CisKKwlidWZf d3JpdGVyX3Rlcm1pbmF0ZSh0c2RuLCAmYnVmX3dyaXRlcik7CisKKwkvKiBSZXNldCBnbG9iYWwg c3RhdGUuICovCisJaWYgKGxvZ190YWJsZXNfaW5pdGlhbGl6ZWQpIHsKKwkJY2toX2RlbGV0ZSh0 c2QsICZsb2dfYnRfbm9kZV9zZXQpOworCQlja2hfZGVsZXRlKHRzZCwgJmxvZ190aHJfbm9kZV9z ZXQpOworCX0KKwlsb2dfdGFibGVzX2luaXRpYWxpemVkID0gZmFsc2U7CisJbG9nX2J0X2luZGV4 ID0gMDsKKwlsb2dfdGhyX2luZGV4ID0gMDsKKwlsb2dfYnRfZmlyc3QgPSBOVUxMOworCWxvZ19i dF9sYXN0ID0gTlVMTDsKKwlsb2dfdGhyX2ZpcnN0ID0gTlVMTDsKKwlsb2dfdGhyX2xhc3QgPSBO VUxMOworCWxvZ19hbGxvY19maXJzdCA9IE5VTEw7CisJbG9nX2FsbG9jX2xhc3QgPSBOVUxMOwor CisJbWFsbG9jX211dGV4X2xvY2sodHNkbiwgJmxvZ19tdHgpOworCXByb2ZfbG9nZ2luZ19zdGF0 ZSA9IHByb2ZfbG9nZ2luZ19zdGF0ZV9zdG9wcGVkOworCW1hbGxvY19tdXRleF91bmxvY2sodHNk biwgJmxvZ19tdHgpOworCisJaWYgKHByb2ZfbG9nX2R1bW15KSB7CisJCXJldHVybiBmYWxzZTsK Kwl9CisJcmV0dXJuIGNsb3NlKGZkKSB8fCBhcmcucmV0ID09IC0xOworfQorI3VuZGVmIFBST0Zf TE9HX1NUT1BfQlVGU0laRQorCitKRU1BTExPQ19DT0xECitib29sCitwcm9mX2xvZ19pbml0KHRz ZF90ICp0c2QpIHsKKwljYXNzZXJ0KGNvbmZpZ19wcm9mKTsKKwlpZiAobWFsbG9jX211dGV4X2lu aXQoJmxvZ19tdHgsICJwcm9mX2xvZyIsCisJICAgIFdJVE5FU1NfUkFOS19QUk9GX0xPRywgbWFs bG9jX211dGV4X3JhbmtfZXhjbHVzaXZlKSkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwlpZiAo b3B0X3Byb2ZfbG9nKSB7CisJCXByb2ZfbG9nX3N0YXJ0KHRzZF90c2RuKHRzZCksIE5VTEwpOwor CX0KKworCXJldHVybiBmYWxzZTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCmRpZmYg LS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9zcmMvcHJvZl9y ZWNlbnQuYyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3NyYy9wcm9m X3JlY2VudC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzNGE5NDQKLS0t IC9kZXYvbnVsbAorKysgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9z cmMvcHJvZl9yZWNlbnQuYwpAQCAtMCwwICsxLDYwMCBAQAorI2luY2x1ZGUgImplbWFsbG9jL2lu dGVybmFsL2plbWFsbG9jX3ByZWFtYmxlLmgiCisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwv amVtYWxsb2NfaW50ZXJuYWxfaW5jbHVkZXMuaCIKKworI2luY2x1ZGUgImplbWFsbG9jL2ludGVy bmFsL2Fzc2VydC5oIgorI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2J1Zl93cml0ZXIuaCIK KyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9lbWl0dGVyLmgiCisjaW5jbHVkZSAiamVtYWxs b2MvaW50ZXJuYWwvcHJvZl9kYXRhLmgiCisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvcHJv Zl9yZWNlbnQuaCIKKworc3NpemVfdCBvcHRfcHJvZl9yZWNlbnRfYWxsb2NfbWF4ID0gUFJPRl9S RUNFTlRfQUxMT0NfTUFYX0RFRkFVTFQ7CittYWxsb2NfbXV0ZXhfdCBwcm9mX3JlY2VudF9hbGxv Y19tdHg7IC8qIFByb3RlY3RzIHRoZSBmaWVsZHMgYmVsb3cgKi8KK3N0YXRpYyBhdG9taWNfemRf dCBwcm9mX3JlY2VudF9hbGxvY19tYXg7CitzdGF0aWMgc3NpemVfdCBwcm9mX3JlY2VudF9hbGxv Y19jb3VudCA9IDA7Citwcm9mX3JlY2VudF9saXN0X3QgcHJvZl9yZWNlbnRfYWxsb2NfbGlzdDsK KworbWFsbG9jX211dGV4X3QgcHJvZl9yZWNlbnRfZHVtcF9tdHg7IC8qIFByb3RlY3RzIGR1bXBp bmcuICovCisKK3N0YXRpYyB2b2lkCitwcm9mX3JlY2VudF9hbGxvY19tYXhfaW5pdCgpIHsKKwlh dG9taWNfc3RvcmVfemQoJnByb2ZfcmVjZW50X2FsbG9jX21heCwgb3B0X3Byb2ZfcmVjZW50X2Fs bG9jX21heCwKKwkgICAgQVRPTUlDX1JFTEFYRUQpOworfQorCitzdGF0aWMgaW5saW5lIHNzaXpl X3QKK3Byb2ZfcmVjZW50X2FsbG9jX21heF9nZXRfbm9fbG9jaygpIHsKKwlyZXR1cm4gYXRvbWlj X2xvYWRfemQoJnByb2ZfcmVjZW50X2FsbG9jX21heCwgQVRPTUlDX1JFTEFYRUQpOworfQorCitz dGF0aWMgaW5saW5lIHNzaXplX3QKK3Byb2ZfcmVjZW50X2FsbG9jX21heF9nZXQodHNkX3QgKnRz ZCkgeworCW1hbGxvY19tdXRleF9hc3NlcnRfb3duZXIodHNkX3RzZG4odHNkKSwgJnByb2ZfcmVj ZW50X2FsbG9jX210eCk7CisJcmV0dXJuIHByb2ZfcmVjZW50X2FsbG9jX21heF9nZXRfbm9fbG9j aygpOworfQorCitzdGF0aWMgaW5saW5lIHNzaXplX3QKK3Byb2ZfcmVjZW50X2FsbG9jX21heF91 cGRhdGUodHNkX3QgKnRzZCwgc3NpemVfdCBtYXgpIHsKKwltYWxsb2NfbXV0ZXhfYXNzZXJ0X293 bmVyKHRzZF90c2RuKHRzZCksICZwcm9mX3JlY2VudF9hbGxvY19tdHgpOworCXNzaXplX3Qgb2xk X21heCA9IHByb2ZfcmVjZW50X2FsbG9jX21heF9nZXQodHNkKTsKKwlhdG9taWNfc3RvcmVfemQo JnByb2ZfcmVjZW50X2FsbG9jX21heCwgbWF4LCBBVE9NSUNfUkVMQVhFRCk7CisJcmV0dXJuIG9s ZF9tYXg7Cit9CisKK3N0YXRpYyBwcm9mX3JlY2VudF90ICoKK3Byb2ZfcmVjZW50X2FsbG9jYXRl X25vZGUodHNkbl90ICp0c2RuKSB7CisJcmV0dXJuIChwcm9mX3JlY2VudF90ICopaWFsbG9jenRt KHRzZG4sIHNpemVvZihwcm9mX3JlY2VudF90KSwKKwkgICAgc3pfc2l6ZTJpbmRleChzaXplb2Yo cHJvZl9yZWNlbnRfdCkpLCBmYWxzZSwgTlVMTCwgdHJ1ZSwKKwkgICAgYXJlbmFfZ2V0KHRzZG4s IDAsIGZhbHNlKSwgdHJ1ZSk7Cit9CisKK3N0YXRpYyB2b2lkCitwcm9mX3JlY2VudF9mcmVlX25v ZGUodHNkbl90ICp0c2RuLCBwcm9mX3JlY2VudF90ICpub2RlKSB7CisJYXNzZXJ0KG5vZGUgIT0g TlVMTCk7CisJYXNzZXJ0KGlzYWxsb2ModHNkbiwgbm9kZSkgPT0gc3pfczJ1KHNpemVvZihwcm9m X3JlY2VudF90KSkpOworCWlkYWxsb2N0bSh0c2RuLCBub2RlLCBOVUxMLCBOVUxMLCB0cnVlLCB0 cnVlKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitpbmNyZW1lbnRfcmVjZW50X2NvdW50KHRz ZF90ICp0c2QsIHByb2ZfdGN0eF90ICp0Y3R4KSB7CisJbWFsbG9jX211dGV4X2Fzc2VydF9vd25l cih0c2RfdHNkbih0c2QpLCB0Y3R4LT50ZGF0YS0+bG9jayk7CisJKyt0Y3R4LT5yZWNlbnRfY291 bnQ7CisJYXNzZXJ0KHRjdHgtPnJlY2VudF9jb3VudCA+IDApOworfQorCitib29sCitwcm9mX3Jl Y2VudF9hbGxvY19wcmVwYXJlKHRzZF90ICp0c2QsIHByb2ZfdGN0eF90ICp0Y3R4KSB7CisJY2Fz c2VydChjb25maWdfcHJvZik7CisJYXNzZXJ0KG9wdF9wcm9mICYmIHByb2ZfYm9vdGVkKTsKKwlt YWxsb2NfbXV0ZXhfYXNzZXJ0X293bmVyKHRzZF90c2RuKHRzZCksIHRjdHgtPnRkYXRhLT5sb2Nr KTsKKwltYWxsb2NfbXV0ZXhfYXNzZXJ0X25vdF9vd25lcih0c2RfdHNkbih0c2QpLCAmcHJvZl9y ZWNlbnRfYWxsb2NfbXR4KTsKKworCS8qCisJICogQ2hlY2sgd2hldGhlciBsYXN0LU4gbW9kZSBp cyB0dXJuZWQgb24gd2l0aG91dCB0cnlpbmcgdG8gYWNxdWlyZSB0aGUKKwkgKiBsb2NrLCBzbyBh cyB0byBvcHRpbWl6ZSBmb3IgdGhlIGZvbGxvd2luZyB0d28gc2NlbmFyaW9zOgorCSAqICgxKSBM YXN0LU4gbW9kZSBpcyBzd2l0Y2hlZCBvZmY7CisJICogKDIpIER1bXBpbmcsIGR1cmluZyB3aGlj aCBsYXN0LU4gbW9kZSBpcyB0ZW1wb3JhcmlseSB0dXJuZWQgb2ZmIHNvCisJICogICAgIGFzIG5v dCB0byBibG9jayBzYW1wbGVkIGFsbG9jYXRpb25zLgorCSAqLworCWlmIChwcm9mX3JlY2VudF9h bGxvY19tYXhfZ2V0X25vX2xvY2soKSA9PSAwKSB7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwkv KgorCSAqIEluY3JlbWVudCByZWNlbnRfY291bnQgdG8gaG9sZCB0aGUgdGN0eCBzbyB0aGF0IGl0 IHdvbid0IGJlIGdvbmUKKwkgKiBldmVuIGFmdGVyIHRjdHgtPnRkYXRhLT5sb2NrIGlzIHJlbGVh c2VkLiAgVGhpcyBhY3RzIGFzIGEKKwkgKiAicGxhY2Vob2xkZXIiOyB0aGUgcmVhbCByZWNvcmRp bmcgb2YgdGhlIGFsbG9jYXRpb24gcmVxdWlyZXMgYSBsb2NrCisJICogb24gcHJvZl9yZWNlbnRf YWxsb2NfbXR4IGFuZCBpcyBkb25lIGluIHByb2ZfcmVjZW50X2FsbG9jICh3aGVuCisJICogdGN0 eC0+dGRhdGEtPmxvY2sgaGFzIGJlZW4gcmVsZWFzZWQpLgorCSAqLworCWluY3JlbWVudF9yZWNl bnRfY291bnQodHNkLCB0Y3R4KTsKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIHZvaWQKK2Rl Y3JlbWVudF9yZWNlbnRfY291bnQodHNkX3QgKnRzZCwgcHJvZl90Y3R4X3QgKnRjdHgpIHsKKwlt YWxsb2NfbXV0ZXhfYXNzZXJ0X25vdF9vd25lcih0c2RfdHNkbih0c2QpLCAmcHJvZl9yZWNlbnRf YWxsb2NfbXR4KTsKKwlhc3NlcnQodGN0eCAhPSBOVUxMKTsKKwltYWxsb2NfbXV0ZXhfbG9jayh0 c2RfdHNkbih0c2QpLCB0Y3R4LT50ZGF0YS0+bG9jayk7CisJYXNzZXJ0KHRjdHgtPnJlY2VudF9j b3VudCA+IDApOworCS0tdGN0eC0+cmVjZW50X2NvdW50OworCXByb2ZfdGN0eF90cnlfZGVzdHJv eSh0c2QsIHRjdHgpOworfQorCitzdGF0aWMgaW5saW5lIGVkYXRhX3QgKgorcHJvZl9yZWNlbnRf YWxsb2NfZWRhdGFfZ2V0X25vX2xvY2soY29uc3QgcHJvZl9yZWNlbnRfdCAqbikgeworCXJldHVy biAoZWRhdGFfdCAqKWF0b21pY19sb2FkX3AoJm4tPmFsbG9jX2VkYXRhLCBBVE9NSUNfQUNRVUlS RSk7Cit9CisKK2VkYXRhX3QgKgorcHJvZl9yZWNlbnRfYWxsb2NfZWRhdGFfZ2V0X25vX2xvY2tf dGVzdChjb25zdCBwcm9mX3JlY2VudF90ICpuKSB7CisJY2Fzc2VydChjb25maWdfcHJvZik7CisJ cmV0dXJuIHByb2ZfcmVjZW50X2FsbG9jX2VkYXRhX2dldF9ub19sb2NrKG4pOworfQorCitzdGF0 aWMgaW5saW5lIGVkYXRhX3QgKgorcHJvZl9yZWNlbnRfYWxsb2NfZWRhdGFfZ2V0KHRzZF90ICp0 c2QsIGNvbnN0IHByb2ZfcmVjZW50X3QgKm4pIHsKKwltYWxsb2NfbXV0ZXhfYXNzZXJ0X293bmVy KHRzZF90c2RuKHRzZCksICZwcm9mX3JlY2VudF9hbGxvY19tdHgpOworCXJldHVybiBwcm9mX3Jl Y2VudF9hbGxvY19lZGF0YV9nZXRfbm9fbG9jayhuKTsKK30KKworc3RhdGljIHZvaWQKK3Byb2Zf cmVjZW50X2FsbG9jX2VkYXRhX3NldCh0c2RfdCAqdHNkLCBwcm9mX3JlY2VudF90ICpuLCBlZGF0 YV90ICplZGF0YSkgeworCW1hbGxvY19tdXRleF9hc3NlcnRfb3duZXIodHNkX3RzZG4odHNkKSwg JnByb2ZfcmVjZW50X2FsbG9jX210eCk7CisJYXRvbWljX3N0b3JlX3AoJm4tPmFsbG9jX2VkYXRh LCBlZGF0YSwgQVRPTUlDX1JFTEVBU0UpOworfQorCit2b2lkCitlZGF0YV9wcm9mX3JlY2VudF9h bGxvY19pbml0KGVkYXRhX3QgKmVkYXRhKSB7CisJY2Fzc2VydChjb25maWdfcHJvZik7CisJZWRh dGFfcHJvZl9yZWNlbnRfYWxsb2Nfc2V0X2RvbnRfY2FsbF9kaXJlY3RseShlZGF0YSwgTlVMTCk7 Cit9CisKK3N0YXRpYyBpbmxpbmUgcHJvZl9yZWNlbnRfdCAqCitlZGF0YV9wcm9mX3JlY2VudF9h bGxvY19nZXRfbm9fbG9jayhjb25zdCBlZGF0YV90ICplZGF0YSkgeworCWNhc3NlcnQoY29uZmln X3Byb2YpOworCXJldHVybiBlZGF0YV9wcm9mX3JlY2VudF9hbGxvY19nZXRfZG9udF9jYWxsX2Rp cmVjdGx5KGVkYXRhKTsKK30KKworcHJvZl9yZWNlbnRfdCAqCitlZGF0YV9wcm9mX3JlY2VudF9h bGxvY19nZXRfbm9fbG9ja190ZXN0KGNvbnN0IGVkYXRhX3QgKmVkYXRhKSB7CisJY2Fzc2VydChj b25maWdfcHJvZik7CisJcmV0dXJuIGVkYXRhX3Byb2ZfcmVjZW50X2FsbG9jX2dldF9ub19sb2Nr KGVkYXRhKTsKK30KKworc3RhdGljIGlubGluZSBwcm9mX3JlY2VudF90ICoKK2VkYXRhX3Byb2Zf cmVjZW50X2FsbG9jX2dldCh0c2RfdCAqdHNkLCBjb25zdCBlZGF0YV90ICplZGF0YSkgeworCW1h bGxvY19tdXRleF9hc3NlcnRfb3duZXIodHNkX3RzZG4odHNkKSwgJnByb2ZfcmVjZW50X2FsbG9j X210eCk7CisJcHJvZl9yZWNlbnRfdCAqcmVjZW50X2FsbG9jID0KKwkgICAgZWRhdGFfcHJvZl9y ZWNlbnRfYWxsb2NfZ2V0X25vX2xvY2soZWRhdGEpOworCWFzc2VydChyZWNlbnRfYWxsb2MgPT0g TlVMTCB8fAorCSAgICBwcm9mX3JlY2VudF9hbGxvY19lZGF0YV9nZXQodHNkLCByZWNlbnRfYWxs b2MpID09IGVkYXRhKTsKKwlyZXR1cm4gcmVjZW50X2FsbG9jOworfQorCitzdGF0aWMgcHJvZl9y ZWNlbnRfdCAqCitlZGF0YV9wcm9mX3JlY2VudF9hbGxvY191cGRhdGVfaW50ZXJuYWwodHNkX3Qg KnRzZCwgZWRhdGFfdCAqZWRhdGEsCisgICAgcHJvZl9yZWNlbnRfdCAqcmVjZW50X2FsbG9jKSB7 CisJbWFsbG9jX211dGV4X2Fzc2VydF9vd25lcih0c2RfdHNkbih0c2QpLCAmcHJvZl9yZWNlbnRf YWxsb2NfbXR4KTsKKwlwcm9mX3JlY2VudF90ICpvbGRfcmVjZW50X2FsbG9jID0KKwkgICAgZWRh dGFfcHJvZl9yZWNlbnRfYWxsb2NfZ2V0KHRzZCwgZWRhdGEpOworCWVkYXRhX3Byb2ZfcmVjZW50 X2FsbG9jX3NldF9kb250X2NhbGxfZGlyZWN0bHkoZWRhdGEsIHJlY2VudF9hbGxvYyk7CisJcmV0 dXJuIG9sZF9yZWNlbnRfYWxsb2M7Cit9CisKK3N0YXRpYyB2b2lkCitlZGF0YV9wcm9mX3JlY2Vu dF9hbGxvY19zZXQodHNkX3QgKnRzZCwgZWRhdGFfdCAqZWRhdGEsCisgICAgcHJvZl9yZWNlbnRf dCAqcmVjZW50X2FsbG9jKSB7CisJbWFsbG9jX211dGV4X2Fzc2VydF9vd25lcih0c2RfdHNkbih0 c2QpLCAmcHJvZl9yZWNlbnRfYWxsb2NfbXR4KTsKKwlhc3NlcnQocmVjZW50X2FsbG9jICE9IE5V TEwpOworCXByb2ZfcmVjZW50X3QgKm9sZF9yZWNlbnRfYWxsb2MgPQorCSAgICBlZGF0YV9wcm9m X3JlY2VudF9hbGxvY191cGRhdGVfaW50ZXJuYWwodHNkLCBlZGF0YSwgcmVjZW50X2FsbG9jKTsK Kwlhc3NlcnQob2xkX3JlY2VudF9hbGxvYyA9PSBOVUxMKTsKKwlwcm9mX3JlY2VudF9hbGxvY19l ZGF0YV9zZXQodHNkLCByZWNlbnRfYWxsb2MsIGVkYXRhKTsKK30KKworc3RhdGljIHZvaWQKK2Vk YXRhX3Byb2ZfcmVjZW50X2FsbG9jX3Jlc2V0KHRzZF90ICp0c2QsIGVkYXRhX3QgKmVkYXRhLAor ICAgIHByb2ZfcmVjZW50X3QgKnJlY2VudF9hbGxvYykgeworCW1hbGxvY19tdXRleF9hc3NlcnRf b3duZXIodHNkX3RzZG4odHNkKSwgJnByb2ZfcmVjZW50X2FsbG9jX210eCk7CisJYXNzZXJ0KHJl Y2VudF9hbGxvYyAhPSBOVUxMKTsKKwlwcm9mX3JlY2VudF90ICpvbGRfcmVjZW50X2FsbG9jID0K KwkgICAgZWRhdGFfcHJvZl9yZWNlbnRfYWxsb2NfdXBkYXRlX2ludGVybmFsKHRzZCwgZWRhdGEs IE5VTEwpOworCWFzc2VydChvbGRfcmVjZW50X2FsbG9jID09IHJlY2VudF9hbGxvYyk7CisJYXNz ZXJ0KGVkYXRhID09IHByb2ZfcmVjZW50X2FsbG9jX2VkYXRhX2dldCh0c2QsIHJlY2VudF9hbGxv YykpOworCXByb2ZfcmVjZW50X2FsbG9jX2VkYXRhX3NldCh0c2QsIHJlY2VudF9hbGxvYywgTlVM TCk7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgcmlnaHQgYmVm b3JlIGFuIGFsbG9jYXRpb24gaXMgcmVsZWFzZWQsIHNvCisgKiB0aGF0IHRoZSBhc3NvY2lhdGVk IHJlY2VudCBhbGxvY2F0aW9uIHJlY29yZCBjYW4gY29udGFpbiB0aGUgZm9sbG93aW5nCisgKiBp bmZvcm1hdGlvbjoKKyAqICgxKSBUaGUgYWxsb2NhdGlvbiBpcyByZWxlYXNlZDsKKyAqICgyKSBU aGUgdGltZSBvZiB0aGUgZGVhbGxvY2F0aW9uOyBhbmQKKyAqICgzKSBUaGUgcHJvZl90Y3R4IGFz c29jaWF0ZWQgd2l0aCB0aGUgZGVhbGxvY2F0aW9uLgorICovCit2b2lkCitwcm9mX3JlY2VudF9h bGxvY19yZXNldCh0c2RfdCAqdHNkLCBlZGF0YV90ICplZGF0YSkgeworCWNhc3NlcnQoY29uZmln X3Byb2YpOworCS8qCisJICogQ2hlY2sgd2hldGhlciB0aGUgcmVjZW50IGFsbG9jYXRpb24gcmVj b3JkIHN0aWxsIGV4aXN0cyB3aXRob3V0CisJICogdHJ5aW5nIHRvIGFjcXVpcmUgdGhlIGxvY2su CisJICovCisJaWYgKGVkYXRhX3Byb2ZfcmVjZW50X2FsbG9jX2dldF9ub19sb2NrKGVkYXRhKSA9 PSBOVUxMKSB7CisJCXJldHVybjsKKwl9CisKKwlwcm9mX3RjdHhfdCAqZGFsbG9jX3RjdHggPSBw cm9mX3RjdHhfY3JlYXRlKHRzZCk7CisJLyoKKwkgKiBJbiBjYXNlIGRhbGxvY190Y3R4IGlzIE5V TEwsIGUuZy4gZHVlIHRvIE9PTSwgd2Ugd2lsbCBub3QgcmVjb3JkIHRoZQorCSAqIGRlYWxsb2Nh dGlvbiB0aW1lIC8gdGN0eCwgd2hpY2ggaXMgaGFuZGxlZCBsYXRlciwgYWZ0ZXIgd2UgY2hlY2sK KwkgKiBhZ2FpbiB3aGVuIGhvbGRpbmcgdGhlIGxvY2suCisJICovCisKKwlpZiAoZGFsbG9jX3Rj dHggIT0gTlVMTCkgeworCQltYWxsb2NfbXV0ZXhfbG9jayh0c2RfdHNkbih0c2QpLCBkYWxsb2Nf dGN0eC0+dGRhdGEtPmxvY2spOworCQlpbmNyZW1lbnRfcmVjZW50X2NvdW50KHRzZCwgZGFsbG9j X3RjdHgpOworCQlkYWxsb2NfdGN0eC0+cHJlcGFyZWQgPSBmYWxzZTsKKwkJbWFsbG9jX211dGV4 X3VubG9jayh0c2RfdHNkbih0c2QpLCBkYWxsb2NfdGN0eC0+dGRhdGEtPmxvY2spOworCX0KKwor CW1hbGxvY19tdXRleF9sb2NrKHRzZF90c2RuKHRzZCksICZwcm9mX3JlY2VudF9hbGxvY19tdHgp OworCS8qIENoZWNrIGFnYWluIGFmdGVyIGFjcXVpcmluZyB0aGUgbG9jay4gICovCisJcHJvZl9y ZWNlbnRfdCAqcmVjZW50ID0gZWRhdGFfcHJvZl9yZWNlbnRfYWxsb2NfZ2V0KHRzZCwgZWRhdGEp OworCWlmIChyZWNlbnQgIT0gTlVMTCkgeworCQlhc3NlcnQobnN0aW1lX2VxdWFsc196ZXJvKCZy ZWNlbnQtPmRhbGxvY190aW1lKSk7CisJCWFzc2VydChyZWNlbnQtPmRhbGxvY190Y3R4ID09IE5V TEwpOworCQlpZiAoZGFsbG9jX3RjdHggIT0gTlVMTCkgeworCQkJbnN0aW1lX3Byb2ZfdXBkYXRl KCZyZWNlbnQtPmRhbGxvY190aW1lKTsKKwkJCXJlY2VudC0+ZGFsbG9jX3RjdHggPSBkYWxsb2Nf dGN0eDsKKwkJCWRhbGxvY190Y3R4ID0gTlVMTDsKKwkJfQorCQllZGF0YV9wcm9mX3JlY2VudF9h bGxvY19yZXNldCh0c2QsIGVkYXRhLCByZWNlbnQpOworCX0KKwltYWxsb2NfbXV0ZXhfdW5sb2Nr KHRzZF90c2RuKHRzZCksICZwcm9mX3JlY2VudF9hbGxvY19tdHgpOworCisJaWYgKGRhbGxvY190 Y3R4ICE9IE5VTEwpIHsKKwkJLyogV2UgbG9zdCB0aGUgcmFzZSAtIHRoZSBhbGxvY2F0aW9uIHJl Y29yZCB3YXMganVzdCBnb25lLiAqLworCQlkZWNyZW1lbnRfcmVjZW50X2NvdW50KHRzZCwgZGFs bG9jX3RjdHgpOworCX0KK30KKworc3RhdGljIHZvaWQKK3Byb2ZfcmVjZW50X2FsbG9jX2V2aWN0 X2VkYXRhKHRzZF90ICp0c2QsIHByb2ZfcmVjZW50X3QgKnJlY2VudF9hbGxvYykgeworCW1hbGxv Y19tdXRleF9hc3NlcnRfb3duZXIodHNkX3RzZG4odHNkKSwgJnByb2ZfcmVjZW50X2FsbG9jX210 eCk7CisJZWRhdGFfdCAqZWRhdGEgPSBwcm9mX3JlY2VudF9hbGxvY19lZGF0YV9nZXQodHNkLCBy ZWNlbnRfYWxsb2MpOworCWlmIChlZGF0YSAhPSBOVUxMKSB7CisJCWVkYXRhX3Byb2ZfcmVjZW50 X2FsbG9jX3Jlc2V0KHRzZCwgZWRhdGEsIHJlY2VudF9hbGxvYyk7CisJfQorfQorCitzdGF0aWMg Ym9vbAorcHJvZl9yZWNlbnRfYWxsb2NfaXNfZW1wdHkodHNkX3QgKnRzZCkgeworCW1hbGxvY19t dXRleF9hc3NlcnRfb3duZXIodHNkX3RzZG4odHNkKSwgJnByb2ZfcmVjZW50X2FsbG9jX210eCk7 CisJaWYgKHFsX2VtcHR5KCZwcm9mX3JlY2VudF9hbGxvY19saXN0KSkgeworCQlhc3NlcnQocHJv Zl9yZWNlbnRfYWxsb2NfY291bnQgPT0gMCk7CisJCXJldHVybiB0cnVlOworCX0gZWxzZSB7CisJ CWFzc2VydChwcm9mX3JlY2VudF9hbGxvY19jb3VudCA+IDApOworCQlyZXR1cm4gZmFsc2U7CisJ fQorfQorCitzdGF0aWMgdm9pZAorcHJvZl9yZWNlbnRfYWxsb2NfYXNzZXJ0X2NvdW50KHRzZF90 ICp0c2QpIHsKKwltYWxsb2NfbXV0ZXhfYXNzZXJ0X293bmVyKHRzZF90c2RuKHRzZCksICZwcm9m X3JlY2VudF9hbGxvY19tdHgpOworCWlmICghY29uZmlnX2RlYnVnKSB7CisJCXJldHVybjsKKwl9 CisJc3NpemVfdCBjb3VudCA9IDA7CisJcHJvZl9yZWNlbnRfdCAqbjsKKwlxbF9mb3JlYWNoKG4s ICZwcm9mX3JlY2VudF9hbGxvY19saXN0LCBsaW5rKSB7CisJCSsrY291bnQ7CisJfQorCWFzc2Vy dChjb3VudCA9PSBwcm9mX3JlY2VudF9hbGxvY19jb3VudCk7CisJYXNzZXJ0KHByb2ZfcmVjZW50 X2FsbG9jX21heF9nZXQodHNkKSA9PSAtMSB8fAorCSAgICBjb3VudCA8PSBwcm9mX3JlY2VudF9h bGxvY19tYXhfZ2V0KHRzZCkpOworfQorCit2b2lkCitwcm9mX3JlY2VudF9hbGxvYyh0c2RfdCAq dHNkLCBlZGF0YV90ICplZGF0YSwgc2l6ZV90IHNpemUsIHNpemVfdCB1c2l6ZSkgeworCWNhc3Nl cnQoY29uZmlnX3Byb2YpOworCWFzc2VydChlZGF0YSAhPSBOVUxMKTsKKwlwcm9mX3RjdHhfdCAq dGN0eCA9IGVkYXRhX3Byb2ZfdGN0eF9nZXQoZWRhdGEpOworCisJbWFsbG9jX211dGV4X2Fzc2Vy dF9ub3Rfb3duZXIodHNkX3RzZG4odHNkKSwgdGN0eC0+dGRhdGEtPmxvY2spOworCW1hbGxvY19t dXRleF9sb2NrKHRzZF90c2RuKHRzZCksICZwcm9mX3JlY2VudF9hbGxvY19tdHgpOworCXByb2Zf cmVjZW50X2FsbG9jX2Fzc2VydF9jb3VudCh0c2QpOworCisJLyoKKwkgKiBSZXNlcnZlIGEgbmV3 IHByb2ZfcmVjZW50X3Qgbm9kZSBpZiBuZWVkZWQuICBJZiBuZWVkZWQsIHdlIHJlbGVhc2UKKwkg KiB0aGUgcHJvZl9yZWNlbnRfYWxsb2NfbXR4IGxvY2sgYW5kIGFsbG9jYXRlLiAgVGhlbiwgcmF0 aGVyIHRoYW4KKwkgKiBpbW1lZGlhdGVseSBjaGVja2luZyBmb3IgT09NLCB3ZSByZWdhaW4gdGhl IGxvY2sgYW5kIHRyeSB0byBtYWtlIHVzZQorCSAqIG9mIHRoZSByZXNlcnZlIG5vZGUgaWYgbmVl ZGVkLiAgVGhlcmUgYXJlIHNpeCBzY2VuYXJpb3M6CisJICoKKwkgKiAgICAgICAgICBcIG5vdyB8 IG5vIG5lZWQgfCBuZWVkIGJ1dCBPT01lZCB8IG5lZWQgYW5kIGFsbG9jYXRlZAorCSAqICAgICBs YXRlciBcICAgIHwgICAgICAgICB8ICAgICAgICAgICAgICAgIHwKKwkgKiAgICAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkgKiAg ICAgbm8gbmVlZCAgICB8ICAgKDEpICAgfCAgICAgICgyKSAgICAgICB8ICAgICAgICAgKDMpCisJ ICogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisJICogICAgIG5lZWQgICAgICAgfCAgICg0KSAgIHwgICAgICAoNSkgICAgICAg fCAgICAgICAgICg2KQorCSAqCisJICogRmlyc3QsICIoNCkiIG5ldmVyIGhhcHBlbnMsIGJlY2F1 c2Ugd2UgZG9uJ3QgcmVsZWFzZSB0aGUgbG9jayBpbiB0aGUKKwkgKiBtaWRkbGUgaWYgdGhlcmUn cyBubyBuZWVkIGZvciBhIG5ldyBub2RlOyBpbiBzdWNoIGNhc2VzICIoMSkiIGFsd2F5cworCSAq IHRha2VzIHBsYWNlLCB3aGljaCBpcyB0cml2aWFsLgorCSAqCisJICogT3V0IG9mIHRoZSByZW1h aW5pbmcgZm91ciBzY2VuYXJpb3MsICIoNikiIGlzIHRoZSBjb21tb24gY2FzZSBhbmQgaXMKKwkg KiB0cml2aWFsLiAgIig1KSIgaXMgYWxzbyB0cml2aWFsLCBpbiB3aGljaCBjYXNlIHdlJ2xsIHJv bGxiYWNrIHRoZQorCSAqIGVmZmVjdCBvZiBwcm9mX3JlY2VudF9hbGxvY19wcmVwYXJlKCkgYXMg ZXhwZWN0ZWQuCisJICoKKwkgKiAiKDIpIiAvICIoMykiIG9jY3VycyB3aGVuIHRoZSBuZWVkIGZv ciBhIG5ldyBub2RlIGlzIGdvbmUgYWZ0ZXIgd2UKKwkgKiByZWdhaW4gdGhlIGxvY2suICBJZiB0 aGUgbmV3IG5vZGUgaXMgc3VjY2Vzc2Z1bGx5IGFsbG9jYXRlZCwgaS5lLiBpbgorCSAqIHRoZSBj YXNlIG9mICIoMykiLCB3ZSdsbCByZWxlYXNlIGl0IGluIHRoZSBlbmQ7IG90aGVyd2lzZSwgaS5l LiBpbgorCSAqIHRoZSBjYXNlIG9mICIoMikiLCB3ZSBkbyBub3RoaW5nIC0gd2UncmUgbHVja3kg dGhhdCB0aGUgT09NIGVuZHMgdXAKKwkgKiBkb2luZyBubyBoYXJtIGF0IGFsbC4KKwkgKgorCSAq IFRoZXJlZm9yZSwgdGhlIG9ubHkgcGVyZm9ybWFuY2UgY29zdCBvZiB0aGUgInJlbGVhc2UgbG9j ayIgLT4KKwkgKiAiYWxsb2NhdGUiIC0+ICJyZWdhaW4gbG9jayIgZGVzaWduIGlzIHRoZSAiKDMp IiBjYXNlLCBidXQgaXQgaGFwcGVucworCSAqIHZlcnkgcmFyZWx5LCBzbyB0aGUgY29zdCBpcyBy ZWxhdGl2ZWx5IHNtYWxsIGNvbXBhcmVkIHRvIHRoZSBnYWluIG9mCisJICogbm90IGhhdmluZyB0 byBoYXZlIHRoZSBsb2NrIG9yZGVyIG9mIHByb2ZfcmVjZW50X2FsbG9jX210eCBhYm92ZSBhbGwK KwkgKiB0aGUgYWxsb2NhdGlvbiBsb2Nrcy4KKwkgKi8KKwlwcm9mX3JlY2VudF90ICpyZXNlcnZl ID0gTlVMTDsKKwlpZiAocHJvZl9yZWNlbnRfYWxsb2NfbWF4X2dldCh0c2QpID09IC0xIHx8CisJ ICAgIHByb2ZfcmVjZW50X2FsbG9jX2NvdW50IDwgcHJvZl9yZWNlbnRfYWxsb2NfbWF4X2dldCh0 c2QpKSB7CisJCWFzc2VydChwcm9mX3JlY2VudF9hbGxvY19tYXhfZ2V0KHRzZCkgIT0gMCk7CisJ CW1hbGxvY19tdXRleF91bmxvY2sodHNkX3RzZG4odHNkKSwgJnByb2ZfcmVjZW50X2FsbG9jX210 eCk7CisJCXJlc2VydmUgPSBwcm9mX3JlY2VudF9hbGxvY2F0ZV9ub2RlKHRzZF90c2RuKHRzZCkp OworCQltYWxsb2NfbXV0ZXhfbG9jayh0c2RfdHNkbih0c2QpLCAmcHJvZl9yZWNlbnRfYWxsb2Nf bXR4KTsKKwkJcHJvZl9yZWNlbnRfYWxsb2NfYXNzZXJ0X2NvdW50KHRzZCk7CisJfQorCisJaWYg KHByb2ZfcmVjZW50X2FsbG9jX21heF9nZXQodHNkKSA9PSAwKSB7CisJCWFzc2VydChwcm9mX3Jl Y2VudF9hbGxvY19pc19lbXB0eSh0c2QpKTsKKwkJZ290byBsYWJlbF9yb2xsYmFjazsKKwl9CisK Kwlwcm9mX3RjdHhfdCAqb2xkX2FsbG9jX3RjdHgsICpvbGRfZGFsbG9jX3RjdHg7CisJaWYgKHBy b2ZfcmVjZW50X2FsbG9jX2NvdW50ID09IHByb2ZfcmVjZW50X2FsbG9jX21heF9nZXQodHNkKSkg eworCQkvKiBJZiB1cHBlciBsaW1pdCBpcyByZWFjaGVkLCByb3RhdGUgdGhlIGhlYWQuICovCisJ CWFzc2VydChwcm9mX3JlY2VudF9hbGxvY19tYXhfZ2V0KHRzZCkgIT0gLTEpOworCQlhc3NlcnQo IXByb2ZfcmVjZW50X2FsbG9jX2lzX2VtcHR5KHRzZCkpOworCQlwcm9mX3JlY2VudF90ICpoZWFk ID0gcWxfZmlyc3QoJnByb2ZfcmVjZW50X2FsbG9jX2xpc3QpOworCQlvbGRfYWxsb2NfdGN0eCA9 IGhlYWQtPmFsbG9jX3RjdHg7CisJCWFzc2VydChvbGRfYWxsb2NfdGN0eCAhPSBOVUxMKTsKKwkJ b2xkX2RhbGxvY190Y3R4ID0gaGVhZC0+ZGFsbG9jX3RjdHg7CisJCXByb2ZfcmVjZW50X2FsbG9j X2V2aWN0X2VkYXRhKHRzZCwgaGVhZCk7CisJCXFsX3JvdGF0ZSgmcHJvZl9yZWNlbnRfYWxsb2Nf bGlzdCwgbGluayk7CisJfSBlbHNlIHsKKwkJLyogT3RoZXJ3aXNlIG1ha2UgdXNlIG9mIHRoZSBu ZXcgbm9kZS4gKi8KKwkJYXNzZXJ0KHByb2ZfcmVjZW50X2FsbG9jX21heF9nZXQodHNkKSA9PSAt MSB8fAorCQkgICAgcHJvZl9yZWNlbnRfYWxsb2NfY291bnQgPCBwcm9mX3JlY2VudF9hbGxvY19t YXhfZ2V0KHRzZCkpOworCQlpZiAocmVzZXJ2ZSA9PSBOVUxMKSB7CisJCQlnb3RvIGxhYmVsX3Jv bGxiYWNrOworCQl9CisJCXFsX2VsbV9uZXcocmVzZXJ2ZSwgbGluayk7CisJCXFsX3RhaWxfaW5z ZXJ0KCZwcm9mX3JlY2VudF9hbGxvY19saXN0LCByZXNlcnZlLCBsaW5rKTsKKwkJcmVzZXJ2ZSA9 IE5VTEw7CisJCW9sZF9hbGxvY190Y3R4ID0gTlVMTDsKKwkJb2xkX2RhbGxvY190Y3R4ID0gTlVM TDsKKwkJKytwcm9mX3JlY2VudF9hbGxvY19jb3VudDsKKwl9CisKKwkvKiBGaWxsIGNvbnRlbnQg aW50byB0aGUgdGFpbCBub2RlLiAqLworCXByb2ZfcmVjZW50X3QgKnRhaWwgPSBxbF9sYXN0KCZw cm9mX3JlY2VudF9hbGxvY19saXN0LCBsaW5rKTsKKwlhc3NlcnQodGFpbCAhPSBOVUxMKTsKKwl0 YWlsLT5zaXplID0gc2l6ZTsKKwl0YWlsLT51c2l6ZSA9IHVzaXplOworCW5zdGltZV9jb3B5KCZ0 YWlsLT5hbGxvY190aW1lLCBlZGF0YV9wcm9mX2FsbG9jX3RpbWVfZ2V0KGVkYXRhKSk7CisJdGFp bC0+YWxsb2NfdGN0eCA9IHRjdHg7CisJbnN0aW1lX2luaXRfemVybygmdGFpbC0+ZGFsbG9jX3Rp bWUpOworCXRhaWwtPmRhbGxvY190Y3R4ID0gTlVMTDsKKwllZGF0YV9wcm9mX3JlY2VudF9hbGxv Y19zZXQodHNkLCBlZGF0YSwgdGFpbCk7CisKKwlhc3NlcnQoIXByb2ZfcmVjZW50X2FsbG9jX2lz X2VtcHR5KHRzZCkpOworCXByb2ZfcmVjZW50X2FsbG9jX2Fzc2VydF9jb3VudCh0c2QpOworCW1h bGxvY19tdXRleF91bmxvY2sodHNkX3RzZG4odHNkKSwgJnByb2ZfcmVjZW50X2FsbG9jX210eCk7 CisKKwlpZiAocmVzZXJ2ZSAhPSBOVUxMKSB7CisJCXByb2ZfcmVjZW50X2ZyZWVfbm9kZSh0c2Rf dHNkbih0c2QpLCByZXNlcnZlKTsKKwl9CisKKwkvKgorCSAqIEFzeW5jaHJvbm91c2x5IGhhbmRs ZSB0aGUgdGN0eCBvZiB0aGUgb2xkIG5vZGUsIHNvIHRoYXQgdGhlcmUncyBubworCSAqIHNpbXVs dGFuZW91cyBob2xkaW5ncyBvZiBwcm9mX3JlY2VudF9hbGxvY19tdHggYW5kIHRkYXRhLT5sb2Nr LgorCSAqIEluIHRoZSB3b3JzdCBjYXNlIHRoaXMgbWF5IGRlbGF5IHRoZSB0Y3R4IHJlbGVhc2Ug YnV0IGl0J3MgYmV0dGVyCisJICogdGhhbiBob2xkaW5nIHByb2ZfcmVjZW50X2FsbG9jX210eCBm b3IgbG9uZ2VyLgorCSAqLworCWlmIChvbGRfYWxsb2NfdGN0eCAhPSBOVUxMKSB7CisJCWRlY3Jl bWVudF9yZWNlbnRfY291bnQodHNkLCBvbGRfYWxsb2NfdGN0eCk7CisJfQorCWlmIChvbGRfZGFs bG9jX3RjdHggIT0gTlVMTCkgeworCQlkZWNyZW1lbnRfcmVjZW50X2NvdW50KHRzZCwgb2xkX2Rh bGxvY190Y3R4KTsKKwl9CisJcmV0dXJuOworCitsYWJlbF9yb2xsYmFjazoKKwlhc3NlcnQoZWRh dGFfcHJvZl9yZWNlbnRfYWxsb2NfZ2V0KHRzZCwgZWRhdGEpID09IE5VTEwpOworCXByb2ZfcmVj ZW50X2FsbG9jX2Fzc2VydF9jb3VudCh0c2QpOworCW1hbGxvY19tdXRleF91bmxvY2sodHNkX3Rz ZG4odHNkKSwgJnByb2ZfcmVjZW50X2FsbG9jX210eCk7CisJaWYgKHJlc2VydmUgIT0gTlVMTCkg eworCQlwcm9mX3JlY2VudF9mcmVlX25vZGUodHNkX3RzZG4odHNkKSwgcmVzZXJ2ZSk7CisJfQor CWRlY3JlbWVudF9yZWNlbnRfY291bnQodHNkLCB0Y3R4KTsKK30KKworc3NpemVfdAorcHJvZl9y ZWNlbnRfYWxsb2NfbWF4X2N0bF9yZWFkKCkgeworCWNhc3NlcnQoY29uZmlnX3Byb2YpOworCS8q IERvbid0IGJvdGhlciB0byBhY3F1aXJlIHRoZSBsb2NrLiAqLworCXJldHVybiBwcm9mX3JlY2Vu dF9hbGxvY19tYXhfZ2V0X25vX2xvY2soKTsKK30KKworc3RhdGljIHZvaWQKK3Byb2ZfcmVjZW50 X2FsbG9jX3Jlc3RvcmVfbG9ja2VkKHRzZF90ICp0c2QsIHByb2ZfcmVjZW50X2xpc3RfdCAqdG9f ZGVsZXRlKSB7CisJbWFsbG9jX211dGV4X2Fzc2VydF9vd25lcih0c2RfdHNkbih0c2QpLCAmcHJv Zl9yZWNlbnRfYWxsb2NfbXR4KTsKKwlzc2l6ZV90IG1heCA9IHByb2ZfcmVjZW50X2FsbG9jX21h eF9nZXQodHNkKTsKKwlpZiAobWF4ID09IC0xIHx8IHByb2ZfcmVjZW50X2FsbG9jX2NvdW50IDw9 IG1heCkgeworCQkvKiBFYXN5IGNhc2UgLSBubyBuZWVkIHRvIGFsdGVyIHRoZSBsaXN0LiAqLwor CQlxbF9uZXcodG9fZGVsZXRlKTsKKwkJcHJvZl9yZWNlbnRfYWxsb2NfYXNzZXJ0X2NvdW50KHRz ZCk7CisJCXJldHVybjsKKwl9CisKKwlwcm9mX3JlY2VudF90ICpub2RlOworCXFsX2ZvcmVhY2go bm9kZSwgJnByb2ZfcmVjZW50X2FsbG9jX2xpc3QsIGxpbmspIHsKKwkJaWYgKHByb2ZfcmVjZW50 X2FsbG9jX2NvdW50ID09IG1heCkgeworCQkJYnJlYWs7CisJCX0KKwkJcHJvZl9yZWNlbnRfYWxs b2NfZXZpY3RfZWRhdGEodHNkLCBub2RlKTsKKwkJLS1wcm9mX3JlY2VudF9hbGxvY19jb3VudDsK Kwl9CisJYXNzZXJ0KHByb2ZfcmVjZW50X2FsbG9jX2NvdW50ID09IG1heCk7CisKKwlxbF9tb3Zl KHRvX2RlbGV0ZSwgJnByb2ZfcmVjZW50X2FsbG9jX2xpc3QpOworCWlmIChtYXggPT0gMCkgewor CQlhc3NlcnQobm9kZSA9PSBOVUxMKTsKKwl9IGVsc2UgeworCQlhc3NlcnQobm9kZSAhPSBOVUxM KTsKKwkJcWxfc3BsaXQodG9fZGVsZXRlLCBub2RlLCAmcHJvZl9yZWNlbnRfYWxsb2NfbGlzdCwg bGluayk7CisJfQorCWFzc2VydCghcWxfZW1wdHkodG9fZGVsZXRlKSk7CisJcHJvZl9yZWNlbnRf YWxsb2NfYXNzZXJ0X2NvdW50KHRzZCk7Cit9CisKK3N0YXRpYyB2b2lkCitwcm9mX3JlY2VudF9h bGxvY19hc3luY19jbGVhbnVwKHRzZF90ICp0c2QsIHByb2ZfcmVjZW50X2xpc3RfdCAqdG9fZGVs ZXRlKSB7CisJbWFsbG9jX211dGV4X2Fzc2VydF9ub3Rfb3duZXIodHNkX3RzZG4odHNkKSwgJnBy b2ZfcmVjZW50X2R1bXBfbXR4KTsKKwltYWxsb2NfbXV0ZXhfYXNzZXJ0X25vdF9vd25lcih0c2Rf dHNkbih0c2QpLCAmcHJvZl9yZWNlbnRfYWxsb2NfbXR4KTsKKwl3aGlsZSAoIXFsX2VtcHR5KHRv X2RlbGV0ZSkpIHsKKwkJcHJvZl9yZWNlbnRfdCAqbm9kZSA9IHFsX2ZpcnN0KHRvX2RlbGV0ZSk7 CisJCXFsX3JlbW92ZSh0b19kZWxldGUsIG5vZGUsIGxpbmspOworCQlkZWNyZW1lbnRfcmVjZW50 X2NvdW50KHRzZCwgbm9kZS0+YWxsb2NfdGN0eCk7CisJCWlmIChub2RlLT5kYWxsb2NfdGN0eCAh PSBOVUxMKSB7CisJCQlkZWNyZW1lbnRfcmVjZW50X2NvdW50KHRzZCwgbm9kZS0+ZGFsbG9jX3Rj dHgpOworCQl9CisJCXByb2ZfcmVjZW50X2ZyZWVfbm9kZSh0c2RfdHNkbih0c2QpLCBub2RlKTsK Kwl9Cit9CisKK3NzaXplX3QKK3Byb2ZfcmVjZW50X2FsbG9jX21heF9jdGxfd3JpdGUodHNkX3Qg KnRzZCwgc3NpemVfdCBtYXgpIHsKKwljYXNzZXJ0KGNvbmZpZ19wcm9mKTsKKwlhc3NlcnQobWF4 ID49IC0xKTsKKwltYWxsb2NfbXV0ZXhfbG9jayh0c2RfdHNkbih0c2QpLCAmcHJvZl9yZWNlbnRf YWxsb2NfbXR4KTsKKwlwcm9mX3JlY2VudF9hbGxvY19hc3NlcnRfY291bnQodHNkKTsKKwljb25z dCBzc2l6ZV90IG9sZF9tYXggPSBwcm9mX3JlY2VudF9hbGxvY19tYXhfdXBkYXRlKHRzZCwgbWF4 KTsKKwlwcm9mX3JlY2VudF9saXN0X3QgdG9fZGVsZXRlOworCXByb2ZfcmVjZW50X2FsbG9jX3Jl c3RvcmVfbG9ja2VkKHRzZCwgJnRvX2RlbGV0ZSk7CisJbWFsbG9jX211dGV4X3VubG9jayh0c2Rf dHNkbih0c2QpLCAmcHJvZl9yZWNlbnRfYWxsb2NfbXR4KTsKKwlwcm9mX3JlY2VudF9hbGxvY19h c3luY19jbGVhbnVwKHRzZCwgJnRvX2RlbGV0ZSk7CisJcmV0dXJuIG9sZF9tYXg7Cit9CisKK3N0 YXRpYyB2b2lkCitwcm9mX3JlY2VudF9hbGxvY19kdW1wX2J0KGVtaXR0ZXJfdCAqZW1pdHRlciwg cHJvZl90Y3R4X3QgKnRjdHgpIHsKKwljaGFyIGJ0X2J1ZlsyICogc2l6ZW9mKGludHB0cl90KSAr IDNdOworCWNoYXIgKnMgPSBidF9idWY7CisJYXNzZXJ0KHRjdHggIT0gTlVMTCk7CisJcHJvZl9i dF90ICpidCA9ICZ0Y3R4LT5nY3R4LT5idDsKKwlmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJ0LT5s ZW47ICsraSkgeworCQltYWxsb2Nfc25wcmludGYoYnRfYnVmLCBzaXplb2YoYnRfYnVmKSwgIiVw IiwgYnQtPnZlY1tpXSk7CisJCWVtaXR0ZXJfanNvbl92YWx1ZShlbWl0dGVyLCBlbWl0dGVyX3R5 cGVfc3RyaW5nLCAmcyk7CisJfQorfQorCitzdGF0aWMgdm9pZAorcHJvZl9yZWNlbnRfYWxsb2Nf ZHVtcF9ub2RlKGVtaXR0ZXJfdCAqZW1pdHRlciwgcHJvZl9yZWNlbnRfdCAqbm9kZSkgeworCWVt aXR0ZXJfanNvbl9vYmplY3RfYmVnaW4oZW1pdHRlcik7CisKKwllbWl0dGVyX2pzb25fa3YoZW1p dHRlciwgInNpemUiLCBlbWl0dGVyX3R5cGVfc2l6ZSwgJm5vZGUtPnNpemUpOworCWVtaXR0ZXJf anNvbl9rdihlbWl0dGVyLCAidXNpemUiLCBlbWl0dGVyX3R5cGVfc2l6ZSwgJm5vZGUtPnVzaXpl KTsKKwlib29sIHJlbGVhc2VkID0gcHJvZl9yZWNlbnRfYWxsb2NfZWRhdGFfZ2V0X25vX2xvY2so bm9kZSkgPT0gTlVMTDsKKwllbWl0dGVyX2pzb25fa3YoZW1pdHRlciwgInJlbGVhc2VkIiwgZW1p dHRlcl90eXBlX2Jvb2wsICZyZWxlYXNlZCk7CisKKwllbWl0dGVyX2pzb25fa3YoZW1pdHRlciwg ImFsbG9jX3RocmVhZF91aWQiLCBlbWl0dGVyX3R5cGVfdWludDY0LAorCSAgICAmbm9kZS0+YWxs b2NfdGN0eC0+dGhyX3VpZCk7CisJcHJvZl90ZGF0YV90ICphbGxvY190ZGF0YSA9IG5vZGUtPmFs bG9jX3RjdHgtPnRkYXRhOworCWFzc2VydChhbGxvY190ZGF0YSAhPSBOVUxMKTsKKwlpZiAoYWxs b2NfdGRhdGEtPnRocmVhZF9uYW1lICE9IE5VTEwpIHsKKwkJZW1pdHRlcl9qc29uX2t2KGVtaXR0 ZXIsICJhbGxvY190aHJlYWRfbmFtZSIsCisJCSAgICBlbWl0dGVyX3R5cGVfc3RyaW5nLCAmYWxs b2NfdGRhdGEtPnRocmVhZF9uYW1lKTsKKwl9CisJdWludDY0X3QgYWxsb2NfdGltZV9ucyA9IG5z dGltZV9ucygmbm9kZS0+YWxsb2NfdGltZSk7CisJZW1pdHRlcl9qc29uX2t2KGVtaXR0ZXIsICJh bGxvY190aW1lIiwgZW1pdHRlcl90eXBlX3VpbnQ2NCwKKwkgICAgJmFsbG9jX3RpbWVfbnMpOwor CWVtaXR0ZXJfanNvbl9hcnJheV9rdl9iZWdpbihlbWl0dGVyLCAiYWxsb2NfdHJhY2UiKTsKKwlw cm9mX3JlY2VudF9hbGxvY19kdW1wX2J0KGVtaXR0ZXIsIG5vZGUtPmFsbG9jX3RjdHgpOworCWVt aXR0ZXJfanNvbl9hcnJheV9lbmQoZW1pdHRlcik7CisKKwlpZiAocmVsZWFzZWQgJiYgbm9kZS0+ ZGFsbG9jX3RjdHggIT0gTlVMTCkgeworCQllbWl0dGVyX2pzb25fa3YoZW1pdHRlciwgImRhbGxv Y190aHJlYWRfdWlkIiwKKwkJICAgIGVtaXR0ZXJfdHlwZV91aW50NjQsICZub2RlLT5kYWxsb2Nf dGN0eC0+dGhyX3VpZCk7CisJCXByb2ZfdGRhdGFfdCAqZGFsbG9jX3RkYXRhID0gbm9kZS0+ZGFs bG9jX3RjdHgtPnRkYXRhOworCQlhc3NlcnQoZGFsbG9jX3RkYXRhICE9IE5VTEwpOworCQlpZiAo ZGFsbG9jX3RkYXRhLT50aHJlYWRfbmFtZSAhPSBOVUxMKSB7CisJCQllbWl0dGVyX2pzb25fa3Yo ZW1pdHRlciwgImRhbGxvY190aHJlYWRfbmFtZSIsCisJCQkgICAgZW1pdHRlcl90eXBlX3N0cmlu ZywgJmRhbGxvY190ZGF0YS0+dGhyZWFkX25hbWUpOworCQl9CisJCWFzc2VydCghbnN0aW1lX2Vx dWFsc196ZXJvKCZub2RlLT5kYWxsb2NfdGltZSkpOworCQl1aW50NjRfdCBkYWxsb2NfdGltZV9u cyA9IG5zdGltZV9ucygmbm9kZS0+ZGFsbG9jX3RpbWUpOworCQllbWl0dGVyX2pzb25fa3YoZW1p dHRlciwgImRhbGxvY190aW1lIiwgZW1pdHRlcl90eXBlX3VpbnQ2NCwKKwkJICAgICZkYWxsb2Nf dGltZV9ucyk7CisJCWVtaXR0ZXJfanNvbl9hcnJheV9rdl9iZWdpbihlbWl0dGVyLCAiZGFsbG9j X3RyYWNlIik7CisJCXByb2ZfcmVjZW50X2FsbG9jX2R1bXBfYnQoZW1pdHRlciwgbm9kZS0+ZGFs bG9jX3RjdHgpOworCQllbWl0dGVyX2pzb25fYXJyYXlfZW5kKGVtaXR0ZXIpOworCX0KKworCWVt aXR0ZXJfanNvbl9vYmplY3RfZW5kKGVtaXR0ZXIpOworfQorCisjZGVmaW5lIFBST0ZfUkVDRU5U X1BSSU5UX0JVRlNJWkUgNjU1MzYKK0pFTUFMTE9DX0NPTEQKK3ZvaWQKK3Byb2ZfcmVjZW50X2Fs bG9jX2R1bXAodHNkX3QgKnRzZCwgd3JpdGVfY2JfdCAqd3JpdGVfY2IsIHZvaWQgKmNib3BhcXVl KSB7CisJY2Fzc2VydChjb25maWdfcHJvZik7CisJbWFsbG9jX211dGV4X2xvY2sodHNkX3RzZG4o dHNkKSwgJnByb2ZfcmVjZW50X2R1bXBfbXR4KTsKKwlidWZfd3JpdGVyX3QgYnVmX3dyaXRlcjsK KwlidWZfd3JpdGVyX2luaXQodHNkX3RzZG4odHNkKSwgJmJ1Zl93cml0ZXIsIHdyaXRlX2NiLCBj Ym9wYXF1ZSwgTlVMTCwKKwkgICAgUFJPRl9SRUNFTlRfUFJJTlRfQlVGU0laRSk7CisJZW1pdHRl cl90IGVtaXR0ZXI7CisJZW1pdHRlcl9pbml0KCZlbWl0dGVyLCBlbWl0dGVyX291dHB1dF9qc29u X2NvbXBhY3QsIGJ1Zl93cml0ZXJfY2IsCisJICAgICZidWZfd3JpdGVyKTsKKwlwcm9mX3JlY2Vu dF9saXN0X3QgdGVtcF9saXN0OworCisJbWFsbG9jX211dGV4X2xvY2sodHNkX3RzZG4odHNkKSwg JnByb2ZfcmVjZW50X2FsbG9jX210eCk7CisJcHJvZl9yZWNlbnRfYWxsb2NfYXNzZXJ0X2NvdW50 KHRzZCk7CisJc3NpemVfdCBkdW1wX21heCA9IHByb2ZfcmVjZW50X2FsbG9jX21heF9nZXQodHNk KTsKKwlxbF9tb3ZlKCZ0ZW1wX2xpc3QsICZwcm9mX3JlY2VudF9hbGxvY19saXN0KTsKKwlzc2l6 ZV90IGR1bXBfY291bnQgPSBwcm9mX3JlY2VudF9hbGxvY19jb3VudDsKKwlwcm9mX3JlY2VudF9h bGxvY19jb3VudCA9IDA7CisJcHJvZl9yZWNlbnRfYWxsb2NfYXNzZXJ0X2NvdW50KHRzZCk7CisJ bWFsbG9jX211dGV4X3VubG9jayh0c2RfdHNkbih0c2QpLCAmcHJvZl9yZWNlbnRfYWxsb2NfbXR4 KTsKKworCWVtaXR0ZXJfYmVnaW4oJmVtaXR0ZXIpOworCXVpbnQ2NF90IHNhbXBsZV9pbnRlcnZh bCA9ICh1aW50NjRfdCkxVSA8PCBsZ19wcm9mX3NhbXBsZTsKKwllbWl0dGVyX2pzb25fa3YoJmVt aXR0ZXIsICJzYW1wbGVfaW50ZXJ2YWwiLCBlbWl0dGVyX3R5cGVfdWludDY0LAorCSAgICAmc2Ft cGxlX2ludGVydmFsKTsKKwllbWl0dGVyX2pzb25fa3YoJmVtaXR0ZXIsICJyZWNlbnRfYWxsb2Nf bWF4IiwgZW1pdHRlcl90eXBlX3NzaXplLAorCSAgICAmZHVtcF9tYXgpOworCWVtaXR0ZXJfanNv bl9hcnJheV9rdl9iZWdpbigmZW1pdHRlciwgInJlY2VudF9hbGxvYyIpOworCXByb2ZfcmVjZW50 X3QgKm5vZGU7CisJcWxfZm9yZWFjaChub2RlLCAmdGVtcF9saXN0LCBsaW5rKSB7CisJCXByb2Zf cmVjZW50X2FsbG9jX2R1bXBfbm9kZSgmZW1pdHRlciwgbm9kZSk7CisJfQorCWVtaXR0ZXJfanNv bl9hcnJheV9lbmQoJmVtaXR0ZXIpOworCWVtaXR0ZXJfZW5kKCZlbWl0dGVyKTsKKworCW1hbGxv Y19tdXRleF9sb2NrKHRzZF90c2RuKHRzZCksICZwcm9mX3JlY2VudF9hbGxvY19tdHgpOworCXBy b2ZfcmVjZW50X2FsbG9jX2Fzc2VydF9jb3VudCh0c2QpOworCXFsX2NvbmNhdCgmdGVtcF9saXN0 LCAmcHJvZl9yZWNlbnRfYWxsb2NfbGlzdCwgbGluayk7CisJcWxfbW92ZSgmcHJvZl9yZWNlbnRf YWxsb2NfbGlzdCwgJnRlbXBfbGlzdCk7CisJcHJvZl9yZWNlbnRfYWxsb2NfY291bnQgKz0gZHVt cF9jb3VudDsKKwlwcm9mX3JlY2VudF9hbGxvY19yZXN0b3JlX2xvY2tlZCh0c2QsICZ0ZW1wX2xp c3QpOworCW1hbGxvY19tdXRleF91bmxvY2sodHNkX3RzZG4odHNkKSwgJnByb2ZfcmVjZW50X2Fs bG9jX210eCk7CisKKwlidWZfd3JpdGVyX3Rlcm1pbmF0ZSh0c2RfdHNkbih0c2QpLCAmYnVmX3dy aXRlcik7CisJbWFsbG9jX211dGV4X3VubG9jayh0c2RfdHNkbih0c2QpLCAmcHJvZl9yZWNlbnRf ZHVtcF9tdHgpOworCisJcHJvZl9yZWNlbnRfYWxsb2NfYXN5bmNfY2xlYW51cCh0c2QsICZ0ZW1w X2xpc3QpOworfQorI3VuZGVmIFBST0ZfUkVDRU5UX1BSSU5UX0JVRlNJWkUKKworYm9vbAorcHJv Zl9yZWNlbnRfaW5pdCgpIHsKKwljYXNzZXJ0KGNvbmZpZ19wcm9mKTsKKwlwcm9mX3JlY2VudF9h bGxvY19tYXhfaW5pdCgpOworCisJaWYgKG1hbGxvY19tdXRleF9pbml0KCZwcm9mX3JlY2VudF9h bGxvY19tdHgsICJwcm9mX3JlY2VudF9hbGxvYyIsCisJICAgIFdJVE5FU1NfUkFOS19QUk9GX1JF Q0VOVF9BTExPQywgbWFsbG9jX211dGV4X3JhbmtfZXhjbHVzaXZlKSkgeworCQlyZXR1cm4gdHJ1 ZTsKKwl9CisKKwlpZiAobWFsbG9jX211dGV4X2luaXQoJnByb2ZfcmVjZW50X2R1bXBfbXR4LCAi cHJvZl9yZWNlbnRfZHVtcCIsCisJICAgIFdJVE5FU1NfUkFOS19QUk9GX1JFQ0VOVF9EVU1QLCBt YWxsb2NfbXV0ZXhfcmFua19leGNsdXNpdmUpKSB7CisJCXJldHVybiB0cnVlOworCX0KKworCXFs X25ldygmcHJvZl9yZWNlbnRfYWxsb2NfbGlzdCk7CisKKwlyZXR1cm4gZmFsc2U7Cit9CgpkaWZm IC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvc3JjL3Byb2Zf c3RhdHMuYyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3NyYy9wcm9m X3N0YXRzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQxYTUwNgotLS0g L2Rldi9udWxsCisrKyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Ny Yy9wcm9mX3N0YXRzLmMKQEAgLTAsMCArMSw1NyBAQAorI2luY2x1ZGUgImplbWFsbG9jL2ludGVy bmFsL2plbWFsbG9jX3ByZWFtYmxlLmgiCisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvamVt YWxsb2NfaW50ZXJuYWxfaW5jbHVkZXMuaCIKKworI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFs L3Byb2Zfc3RhdHMuaCIKKworYm9vbCBvcHRfcHJvZl9zdGF0cyA9IGZhbHNlOworbWFsbG9jX211 dGV4X3QgcHJvZl9zdGF0c19tdHg7CitzdGF0aWMgcHJvZl9zdGF0c190IHByb2Zfc3RhdHNfbGl2 ZVtQUk9GX1NDX05TSVpFU107CitzdGF0aWMgcHJvZl9zdGF0c190IHByb2Zfc3RhdHNfYWNjdW1b UFJPRl9TQ19OU0laRVNdOworCitzdGF0aWMgdm9pZAorcHJvZl9zdGF0c19lbnRlcih0c2RfdCAq dHNkLCBzemluZF90IGluZCkgeworCWFzc2VydChvcHRfcHJvZiAmJiBvcHRfcHJvZl9zdGF0cyk7 CisJYXNzZXJ0KGluZCA8IFNDX05TSVpFUyk7CisJbWFsbG9jX211dGV4X2xvY2sodHNkX3RzZG4o dHNkKSwgJnByb2Zfc3RhdHNfbXR4KTsKK30KKworc3RhdGljIHZvaWQKK3Byb2Zfc3RhdHNfbGVh dmUodHNkX3QgKnRzZCkgeworCW1hbGxvY19tdXRleF91bmxvY2sodHNkX3RzZG4odHNkKSwgJnBy b2Zfc3RhdHNfbXR4KTsKK30KKwordm9pZAorcHJvZl9zdGF0c19pbmModHNkX3QgKnRzZCwgc3pp bmRfdCBpbmQsIHNpemVfdCBzaXplKSB7CisJY2Fzc2VydChjb25maWdfcHJvZik7CisJcHJvZl9z dGF0c19lbnRlcih0c2QsIGluZCk7CisJcHJvZl9zdGF0c19saXZlW2luZF0ucmVxX3N1bSArPSBz aXplOworCXByb2Zfc3RhdHNfbGl2ZVtpbmRdLmNvdW50Kys7CisJcHJvZl9zdGF0c19hY2N1bVtp bmRdLnJlcV9zdW0gKz0gc2l6ZTsKKwlwcm9mX3N0YXRzX2FjY3VtW2luZF0uY291bnQrKzsKKwlw cm9mX3N0YXRzX2xlYXZlKHRzZCk7Cit9CisKK3ZvaWQKK3Byb2Zfc3RhdHNfZGVjKHRzZF90ICp0 c2QsIHN6aW5kX3QgaW5kLCBzaXplX3Qgc2l6ZSkgeworCWNhc3NlcnQoY29uZmlnX3Byb2YpOwor CXByb2Zfc3RhdHNfZW50ZXIodHNkLCBpbmQpOworCXByb2Zfc3RhdHNfbGl2ZVtpbmRdLnJlcV9z dW0gLT0gc2l6ZTsKKwlwcm9mX3N0YXRzX2xpdmVbaW5kXS5jb3VudC0tOworCXByb2Zfc3RhdHNf bGVhdmUodHNkKTsKK30KKwordm9pZAorcHJvZl9zdGF0c19nZXRfbGl2ZSh0c2RfdCAqdHNkLCBz emluZF90IGluZCwgcHJvZl9zdGF0c190ICpzdGF0cykgeworCWNhc3NlcnQoY29uZmlnX3Byb2Yp OworCXByb2Zfc3RhdHNfZW50ZXIodHNkLCBpbmQpOworCW1lbWNweShzdGF0cywgJnByb2Zfc3Rh dHNfbGl2ZVtpbmRdLCBzaXplb2YocHJvZl9zdGF0c190KSk7CisJcHJvZl9zdGF0c19sZWF2ZSh0 c2QpOworfQorCit2b2lkCitwcm9mX3N0YXRzX2dldF9hY2N1bSh0c2RfdCAqdHNkLCBzemluZF90 IGluZCwgcHJvZl9zdGF0c190ICpzdGF0cykgeworCWNhc3NlcnQoY29uZmlnX3Byb2YpOworCXBy b2Zfc3RhdHNfZW50ZXIodHNkLCBpbmQpOworCW1lbWNweShzdGF0cywgJnByb2Zfc3RhdHNfYWNj dW1baW5kXSwgc2l6ZW9mKHByb2Zfc3RhdHNfdCkpOworCXByb2Zfc3RhdHNfbGVhdmUodHNkKTsK K30KCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9z cmMvcHJvZl9zeXMuYyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Ny Yy9wcm9mX3N5cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1ZjFmNWIK LS0tIC9kZXYvbnVsbAorKysgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMu MC9zcmMvcHJvZl9zeXMuYwpAQCAtMCwwICsxLDY2OSBAQAorI2RlZmluZSBKRU1BTExPQ19QUk9G X1NZU19DXworI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2plbWFsbG9jX3ByZWFtYmxlLmgi CisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvamVtYWxsb2NfaW50ZXJuYWxfaW5jbHVkZXMu aCIKKworI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2J1Zl93cml0ZXIuaCIKKyNpbmNsdWRl ICJqZW1hbGxvYy9pbnRlcm5hbC9jdGwuaCIKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9w cm9mX2RhdGEuaCIKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9wcm9mX3N5cy5oIgorCisj aWZkZWYgSkVNQUxMT0NfUFJPRl9MSUJVTldJTkQKKyNkZWZpbmUgVU5XX0xPQ0FMX09OTFkKKyNp bmNsdWRlIDxsaWJ1bndpbmQuaD4KKyNlbmRpZgorCisjaWZkZWYgSkVNQUxMT0NfUFJPRl9MSUJH Q0MKKy8qCisgKiBXZSBoYXZlIGEgY2lyY3VsYXIgZGVwZW5kZW5jeSAtLSBqZW1hbGxvY19pbnRl cm5hbC5oIHRlbGxzIHVzIGlmIHdlIHNob3VsZAorICogdXNlIGxpYmdjYydzIHVud2luZGluZyBm dW5jdGlvbmFsaXR5LCBidXQgYWZ0ZXIgd2UndmUgaW5jbHVkZWQgdGhhdCwgd2UndmUKKyAqIGFs cmVhZHkgaG9va2VkIF9VbndpbmRfQmFja3RyYWNlLiAgV2UnbGwgdGVtcG9yYXJpbHkgZGlzYWJs ZSBob29raW5nLgorICovCisjdW5kZWYgX1Vud2luZF9CYWNrdHJhY2UKKyNpbmNsdWRlIDx1bndp bmQuaD4KKyNkZWZpbmUgX1Vud2luZF9CYWNrdHJhY2UgSkVNQUxMT0NfVEVTVF9IT09LKF9Vbndp bmRfQmFja3RyYWNlLCB0ZXN0X2hvb2tzX2xpYmNfaG9vaykKKyNlbmRpZgorCisvKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqLworCittYWxsb2NfbXV0ZXhfdCBwcm9mX2R1bXBfZmlsZW5hbWVfbXR4Owor Citib29sIHByb2ZfZG9fbW9jayA9IGZhbHNlOworCitzdGF0aWMgdWludDY0X3QgcHJvZl9kdW1w X3NlcTsKK3N0YXRpYyB1aW50NjRfdCBwcm9mX2R1bXBfaXNlcTsKK3N0YXRpYyB1aW50NjRfdCBw cm9mX2R1bXBfbXNlcTsKK3N0YXRpYyB1aW50NjRfdCBwcm9mX2R1bXBfdXNlcTsKKworc3RhdGlj IGNoYXIgKnByb2ZfcHJlZml4ID0gTlVMTDsKKworLyogVGhlIGZhbGxiYWNrIGFsbG9jYXRvciBw cm9maWxpbmcgZnVuY3Rpb25hbGl0eSB3aWxsIHVzZS4gKi8KK2Jhc2VfdCAqcHJvZl9iYXNlOwor Cit2b2lkCitidF9pbml0KHByb2ZfYnRfdCAqYnQsIHZvaWQgKip2ZWMpIHsKKwljYXNzZXJ0KGNv bmZpZ19wcm9mKTsKKworCWJ0LT52ZWMgPSB2ZWM7CisJYnQtPmxlbiA9IDA7Cit9CisKKyNpZmRl ZiBKRU1BTExPQ19QUk9GX0xJQlVOV0lORAorc3RhdGljIHZvaWQKK3Byb2ZfYmFja3RyYWNlX2lt cGwodm9pZCAqKnZlYywgdW5zaWduZWQgKmxlbiwgdW5zaWduZWQgbWF4X2xlbikgeworCWludCBu ZnJhbWVzOworCisJY2Fzc2VydChjb25maWdfcHJvZik7CisJYXNzZXJ0KCpsZW4gPT0gMCk7CisJ YXNzZXJ0KHZlYyAhPSBOVUxMKTsKKwlhc3NlcnQobWF4X2xlbiA9PSBQUk9GX0JUX01BWCk7CisK KwluZnJhbWVzID0gdW53X2JhY2t0cmFjZSh2ZWMsIFBST0ZfQlRfTUFYKTsKKwlpZiAobmZyYW1l cyA8PSAwKSB7CisJCXJldHVybjsKKwl9CisJKmxlbiA9IG5mcmFtZXM7Cit9CisjZWxpZiAoZGVm aW5lZChKRU1BTExPQ19QUk9GX0xJQkdDQykpCitzdGF0aWMgX1Vud2luZF9SZWFzb25fQ29kZQor cHJvZl91bndpbmRfaW5pdF9jYWxsYmFjayhzdHJ1Y3QgX1Vud2luZF9Db250ZXh0ICpjb250ZXh0 LCB2b2lkICphcmcpIHsKKwljYXNzZXJ0KGNvbmZpZ19wcm9mKTsKKworCXJldHVybiBfVVJDX05P X1JFQVNPTjsKK30KKworc3RhdGljIF9VbndpbmRfUmVhc29uX0NvZGUKK3Byb2ZfdW53aW5kX2Nh bGxiYWNrKHN0cnVjdCBfVW53aW5kX0NvbnRleHQgKmNvbnRleHQsIHZvaWQgKmFyZykgeworCXBy b2ZfdW53aW5kX2RhdGFfdCAqZGF0YSA9IChwcm9mX3Vud2luZF9kYXRhX3QgKilhcmc7CisJdm9p ZCAqaXA7CisKKwljYXNzZXJ0KGNvbmZpZ19wcm9mKTsKKworCWlwID0gKHZvaWQgKilfVW53aW5k X0dldElQKGNvbnRleHQpOworCWlmIChpcCA9PSBOVUxMKSB7CisJCXJldHVybiBfVVJDX0VORF9P Rl9TVEFDSzsKKwl9CisJZGF0YS0+dmVjWypkYXRhLT5sZW5dID0gaXA7CisJKCpkYXRhLT5sZW4p Kys7CisJaWYgKCpkYXRhLT5sZW4gPT0gZGF0YS0+bWF4KSB7CisJCXJldHVybiBfVVJDX0VORF9P Rl9TVEFDSzsKKwl9CisKKwlyZXR1cm4gX1VSQ19OT19SRUFTT047Cit9CisKK3N0YXRpYyB2b2lk Citwcm9mX2JhY2t0cmFjZV9pbXBsKHZvaWQgKip2ZWMsIHVuc2lnbmVkICpsZW4sIHVuc2lnbmVk IG1heF9sZW4pIHsKKwlwcm9mX3Vud2luZF9kYXRhX3QgZGF0YSA9IHt2ZWMsIGxlbiwgbWF4X2xl bn07CisKKwljYXNzZXJ0KGNvbmZpZ19wcm9mKTsKKwlhc3NlcnQodmVjICE9IE5VTEwpOworCWFz c2VydChtYXhfbGVuID09IFBST0ZfQlRfTUFYKTsKKworCV9VbndpbmRfQmFja3RyYWNlKHByb2Zf dW53aW5kX2NhbGxiYWNrLCAmZGF0YSk7Cit9CisjZWxpZiAoZGVmaW5lZChKRU1BTExPQ19QUk9G X0dDQykpCitzdGF0aWMgdm9pZAorcHJvZl9iYWNrdHJhY2VfaW1wbCh2b2lkICoqdmVjLCB1bnNp Z25lZCAqbGVuLCB1bnNpZ25lZCBtYXhfbGVuKSB7CisjZGVmaW5lIEJUX0ZSQU1FKGkpCQkJCQkJ CVwKKwlpZiAoKGkpIDwgbWF4X2xlbikgewkJCQkJCVwKKwkJdm9pZCAqcDsJCQkJCQlcCisJCWlm IChfX2J1aWx0aW5fZnJhbWVfYWRkcmVzcyhpKSA9PSAwKSB7CQkJXAorCQkJcmV0dXJuOwkJCQkJ CVwKKwkJfQkJCQkJCQlcCisJCXAgPSBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoaSk7CQkJXAor CQlpZiAocCA9PSBOVUxMKSB7CQkJCQlcCisJCQlyZXR1cm47CQkJCQkJXAorCQl9CQkJCQkJCVwK KwkJdmVjWyhpKV0gPSBwOwkJCQkJCVwKKwkJKmxlbiA9IChpKSArIDE7CQkJCQkJXAorCX0gZWxz ZSB7CQkJCQkJCVwKKwkJcmV0dXJuOwkJCQkJCQlcCisJfQorCisJY2Fzc2VydChjb25maWdfcHJv Zik7CisJYXNzZXJ0KHZlYyAhPSBOVUxMKTsKKwlhc3NlcnQobWF4X2xlbiA9PSBQUk9GX0JUX01B WCk7CisKKwlCVF9GUkFNRSgwKQorCUJUX0ZSQU1FKDEpCisJQlRfRlJBTUUoMikKKwlCVF9GUkFN RSgzKQorCUJUX0ZSQU1FKDQpCisJQlRfRlJBTUUoNSkKKwlCVF9GUkFNRSg2KQorCUJUX0ZSQU1F KDcpCisJQlRfRlJBTUUoOCkKKwlCVF9GUkFNRSg5KQorCisJQlRfRlJBTUUoMTApCisJQlRfRlJB TUUoMTEpCisJQlRfRlJBTUUoMTIpCisJQlRfRlJBTUUoMTMpCisJQlRfRlJBTUUoMTQpCisJQlRf RlJBTUUoMTUpCisJQlRfRlJBTUUoMTYpCisJQlRfRlJBTUUoMTcpCisJQlRfRlJBTUUoMTgpCisJ QlRfRlJBTUUoMTkpCisKKwlCVF9GUkFNRSgyMCkKKwlCVF9GUkFNRSgyMSkKKwlCVF9GUkFNRSgy MikKKwlCVF9GUkFNRSgyMykKKwlCVF9GUkFNRSgyNCkKKwlCVF9GUkFNRSgyNSkKKwlCVF9GUkFN RSgyNikKKwlCVF9GUkFNRSgyNykKKwlCVF9GUkFNRSgyOCkKKwlCVF9GUkFNRSgyOSkKKworCUJU X0ZSQU1FKDMwKQorCUJUX0ZSQU1FKDMxKQorCUJUX0ZSQU1FKDMyKQorCUJUX0ZSQU1FKDMzKQor CUJUX0ZSQU1FKDM0KQorCUJUX0ZSQU1FKDM1KQorCUJUX0ZSQU1FKDM2KQorCUJUX0ZSQU1FKDM3 KQorCUJUX0ZSQU1FKDM4KQorCUJUX0ZSQU1FKDM5KQorCisJQlRfRlJBTUUoNDApCisJQlRfRlJB TUUoNDEpCisJQlRfRlJBTUUoNDIpCisJQlRfRlJBTUUoNDMpCisJQlRfRlJBTUUoNDQpCisJQlRf RlJBTUUoNDUpCisJQlRfRlJBTUUoNDYpCisJQlRfRlJBTUUoNDcpCisJQlRfRlJBTUUoNDgpCisJ QlRfRlJBTUUoNDkpCisKKwlCVF9GUkFNRSg1MCkKKwlCVF9GUkFNRSg1MSkKKwlCVF9GUkFNRSg1 MikKKwlCVF9GUkFNRSg1MykKKwlCVF9GUkFNRSg1NCkKKwlCVF9GUkFNRSg1NSkKKwlCVF9GUkFN RSg1NikKKwlCVF9GUkFNRSg1NykKKwlCVF9GUkFNRSg1OCkKKwlCVF9GUkFNRSg1OSkKKworCUJU X0ZSQU1FKDYwKQorCUJUX0ZSQU1FKDYxKQorCUJUX0ZSQU1FKDYyKQorCUJUX0ZSQU1FKDYzKQor CUJUX0ZSQU1FKDY0KQorCUJUX0ZSQU1FKDY1KQorCUJUX0ZSQU1FKDY2KQorCUJUX0ZSQU1FKDY3 KQorCUJUX0ZSQU1FKDY4KQorCUJUX0ZSQU1FKDY5KQorCisJQlRfRlJBTUUoNzApCisJQlRfRlJB TUUoNzEpCisJQlRfRlJBTUUoNzIpCisJQlRfRlJBTUUoNzMpCisJQlRfRlJBTUUoNzQpCisJQlRf RlJBTUUoNzUpCisJQlRfRlJBTUUoNzYpCisJQlRfRlJBTUUoNzcpCisJQlRfRlJBTUUoNzgpCisJ QlRfRlJBTUUoNzkpCisKKwlCVF9GUkFNRSg4MCkKKwlCVF9GUkFNRSg4MSkKKwlCVF9GUkFNRSg4 MikKKwlCVF9GUkFNRSg4MykKKwlCVF9GUkFNRSg4NCkKKwlCVF9GUkFNRSg4NSkKKwlCVF9GUkFN RSg4NikKKwlCVF9GUkFNRSg4NykKKwlCVF9GUkFNRSg4OCkKKwlCVF9GUkFNRSg4OSkKKworCUJU X0ZSQU1FKDkwKQorCUJUX0ZSQU1FKDkxKQorCUJUX0ZSQU1FKDkyKQorCUJUX0ZSQU1FKDkzKQor CUJUX0ZSQU1FKDk0KQorCUJUX0ZSQU1FKDk1KQorCUJUX0ZSQU1FKDk2KQorCUJUX0ZSQU1FKDk3 KQorCUJUX0ZSQU1FKDk4KQorCUJUX0ZSQU1FKDk5KQorCisJQlRfRlJBTUUoMTAwKQorCUJUX0ZS QU1FKDEwMSkKKwlCVF9GUkFNRSgxMDIpCisJQlRfRlJBTUUoMTAzKQorCUJUX0ZSQU1FKDEwNCkK KwlCVF9GUkFNRSgxMDUpCisJQlRfRlJBTUUoMTA2KQorCUJUX0ZSQU1FKDEwNykKKwlCVF9GUkFN RSgxMDgpCisJQlRfRlJBTUUoMTA5KQorCisJQlRfRlJBTUUoMTEwKQorCUJUX0ZSQU1FKDExMSkK KwlCVF9GUkFNRSgxMTIpCisJQlRfRlJBTUUoMTEzKQorCUJUX0ZSQU1FKDExNCkKKwlCVF9GUkFN RSgxMTUpCisJQlRfRlJBTUUoMTE2KQorCUJUX0ZSQU1FKDExNykKKwlCVF9GUkFNRSgxMTgpCisJ QlRfRlJBTUUoMTE5KQorCisJQlRfRlJBTUUoMTIwKQorCUJUX0ZSQU1FKDEyMSkKKwlCVF9GUkFN RSgxMjIpCisJQlRfRlJBTUUoMTIzKQorCUJUX0ZSQU1FKDEyNCkKKwlCVF9GUkFNRSgxMjUpCisJ QlRfRlJBTUUoMTI2KQorCUJUX0ZSQU1FKDEyNykKKyN1bmRlZiBCVF9GUkFNRQorfQorI2Vsc2UK K3N0YXRpYyB2b2lkCitwcm9mX2JhY2t0cmFjZV9pbXBsKHZvaWQgKip2ZWMsIHVuc2lnbmVkICps ZW4sIHVuc2lnbmVkIG1heF9sZW4pIHsKKwljYXNzZXJ0KGNvbmZpZ19wcm9mKTsKKwlub3RfcmVh Y2hlZCgpOworfQorI2VuZGlmCisKK3ZvaWQKK3Byb2ZfYmFja3RyYWNlKHRzZF90ICp0c2QsIHBy b2ZfYnRfdCAqYnQpIHsKKwljYXNzZXJ0KGNvbmZpZ19wcm9mKTsKKwlwcm9mX2JhY2t0cmFjZV9o b29rX3QgcHJvZl9iYWNrdHJhY2VfaG9vayA9IHByb2ZfYmFja3RyYWNlX2hvb2tfZ2V0KCk7CisJ YXNzZXJ0KHByb2ZfYmFja3RyYWNlX2hvb2sgIT0gTlVMTCk7CisKKwlwcmVfcmVlbnRyYW5jeSh0 c2QsIE5VTEwpOworCXByb2ZfYmFja3RyYWNlX2hvb2soYnQtPnZlYywgJmJ0LT5sZW4sIFBST0Zf QlRfTUFYKTsKKwlwb3N0X3JlZW50cmFuY3kodHNkKTsKK30KKwordm9pZAorcHJvZl9ob29rc19p bml0KCkgeworCXByb2ZfYmFja3RyYWNlX2hvb2tfc2V0KCZwcm9mX2JhY2t0cmFjZV9pbXBsKTsK Kwlwcm9mX2R1bXBfaG9va19zZXQoTlVMTCk7Cit9CisKK3ZvaWQKK3Byb2ZfdW53aW5kX2luaXQo KSB7CisjaWZkZWYgSkVNQUxMT0NfUFJPRl9MSUJHQ0MKKwkvKgorCSAqIENhdXNlIHRoZSBiYWNr dHJhY2luZyBtYWNoaW5lcnkgdG8gYWxsb2NhdGUgaXRzIGludGVybmFsCisJICogc3RhdGUgYmVm b3JlIGVuYWJsaW5nIHByb2ZpbGluZy4KKwkgKi8KKwlfVW53aW5kX0JhY2t0cmFjZShwcm9mX3Vu d2luZF9pbml0X2NhbGxiYWNrLCBOVUxMKTsKKyNlbmRpZgorfQorCitzdGF0aWMgaW50Citwcm9m X3N5c190aHJlYWRfbmFtZV9yZWFkX2ltcGwoY2hhciAqYnVmLCBzaXplX3QgbGltaXQpIHsKKyNp ZiBkZWZpbmVkKEpFTUFMTE9DX0hBVkVfUFRIUkVBRF9HRVROQU1FX05QKQorCXJldHVybiBwdGhy ZWFkX2dldG5hbWVfbnAocHRocmVhZF9zZWxmKCksIGJ1ZiwgbGltaXQpOworI2VsaWYgZGVmaW5l ZChKRU1BTExPQ19IQVZFX1BUSFJFQURfR0VUX05BTUVfTlApCisJcHRocmVhZF9nZXRfbmFtZV9u cChwdGhyZWFkX3NlbGYoKSwgYnVmLCBsaW1pdCk7CisJcmV0dXJuIDA7CisjZWxzZQorCXJldHVy biBFTk9TWVM7CisjZW5kaWYKK30KK3Byb2Zfc3lzX3RocmVhZF9uYW1lX3JlYWRfdCAqSkVUX01V VEFCTEUgcHJvZl9zeXNfdGhyZWFkX25hbWVfcmVhZCA9CisgICAgcHJvZl9zeXNfdGhyZWFkX25h bWVfcmVhZF9pbXBsOworCit2b2lkCitwcm9mX3N5c190aHJlYWRfbmFtZV9mZXRjaCh0c2RfdCAq dHNkKSB7CisjZGVmaW5lIFRIUkVBRF9OQU1FX01BWF9MRU4gMTYKKwljaGFyIGJ1ZltUSFJFQURf TkFNRV9NQVhfTEVOXTsKKwlpZiAoIXByb2Zfc3lzX3RocmVhZF9uYW1lX3JlYWQoYnVmLCBUSFJF QURfTkFNRV9NQVhfTEVOKSkgeworCQlwcm9mX3RocmVhZF9uYW1lX3NldF9pbXBsKHRzZCwgYnVm KTsKKwl9CisjdW5kZWYgVEhSRUFEX05BTUVfTUFYX0xFTgorfQorCitpbnQKK3Byb2ZfZ2V0cGlk KHZvaWQpIHsKKyNpZmRlZiBfV0lOMzIKKwlyZXR1cm4gR2V0Q3VycmVudFByb2Nlc3NJZCgpOwor I2Vsc2UKKwlyZXR1cm4gZ2V0cGlkKCk7CisjZW5kaWYKK30KKworLyoKKyAqIFRoaXMgYnVmZmVy IGlzIHJhdGhlciBsYXJnZSBmb3Igc3RhY2sgYWxsb2NhdGlvbiwgc28gdXNlIGEgc2luZ2xlIGJ1 ZmZlciBmb3IKKyAqIGFsbCBwcm9maWxlIGR1bXBzOyBwcm90ZWN0ZWQgYnkgcHJvZl9kdW1wX210 eC4KKyAqLworc3RhdGljIGNoYXIgcHJvZl9kdW1wX2J1ZltQUk9GX0RVTVBfQlVGU0laRV07CisK K3R5cGVkZWYgc3RydWN0IHByb2ZfZHVtcF9hcmdfcyBwcm9mX2R1bXBfYXJnX3Q7CitzdHJ1Y3Qg cHJvZl9kdW1wX2FyZ19zIHsKKwkvKgorCSAqIFdoZXRoZXIgZXJyb3Igc2hvdWxkIGJlIGhhbmRs ZWQgbG9jYWxseTogaWYgdHJ1ZSwgdGhlbiB3ZSBwcmludCBvdXQKKwkgKiBlcnJvciBtZXNzYWdl IGFzIHdlbGwgYXMgYWJvcnQgKGlmIG9wdF9hYm9ydCBpcyB0cnVlKSB3aGVuIGFuIGVycm9yCisJ ICogb2NjdXJyZWQsIGFuZCB3ZSBhbHNvIHJlcG9ydCB0aGUgZXJyb3IgYmFjayB0byB0aGUgY2Fs bGVyIGluIHRoZSBlbmQ7CisJICogaWYgZmFsc2UsIHRoZW4gd2Ugb25seSByZXBvcnQgdGhlIGVy cm9yIGJhY2sgdG8gdGhlIGNhbGxlciBpbiB0aGUKKwkgKiBlbmQuCisJICovCisJY29uc3QgYm9v bCBoYW5kbGVfZXJyb3JfbG9jYWxseTsKKwkvKgorCSAqIFdoZXRoZXIgdGhlcmUgaGFzIGJlZW4g YW4gZXJyb3IgaW4gdGhlIGR1bXBpbmcgcHJvY2Vzcywgd2hpY2ggY291bGQKKwkgKiBoYXZlIGhh cHBlbmVkIGVpdGhlciBpbiBmaWxlIG9wZW5pbmcgb3IgaW4gZmlsZSB3cml0aW5nLiAgV2hlbiBh bgorCSAqIGVycm9yIGhhcyBhbHJlYWR5IG9jY3VycmVkLCB3ZSB3aWxsIHN0b3AgZnVydGhlciB3 cml0aW5nIHRvIHRoZSBmaWxlLgorCSAqLworCWJvb2wgZXJyb3I7CisJLyogRmlsZSBkZXNjcmlw dG9yIG9mIHRoZSBkdW1wIGZpbGUuICovCisJaW50IHByb2ZfZHVtcF9mZDsKK307CisKK3N0YXRp YyB2b2lkCitwcm9mX2R1bXBfY2hlY2tfcG9zc2libGVfZXJyb3IocHJvZl9kdW1wX2FyZ190ICph cmcsIGJvb2wgZXJyX2NvbmQsCisgICAgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pIHsKKwlhc3Nl cnQoIWFyZy0+ZXJyb3IpOworCWlmICghZXJyX2NvbmQpIHsKKwkJcmV0dXJuOworCX0KKworCWFy Zy0+ZXJyb3IgPSB0cnVlOworCWlmICghYXJnLT5oYW5kbGVfZXJyb3JfbG9jYWxseSkgeworCQly ZXR1cm47CisJfQorCisJdmFfbGlzdCBhcDsKKwljaGFyIGJ1ZltQUk9GX1BSSU5URl9CVUZTSVpF XTsKKwl2YV9zdGFydChhcCwgZm9ybWF0KTsKKwltYWxsb2NfdnNucHJpbnRmKGJ1Ziwgc2l6ZW9m KGJ1ZiksIGZvcm1hdCwgYXApOworCXZhX2VuZChhcCk7CisJbWFsbG9jX3dyaXRlKGJ1Zik7CisK KwlpZiAob3B0X2Fib3J0KSB7CisJCWFib3J0KCk7CisJfQorfQorCitzdGF0aWMgaW50Citwcm9m X2R1bXBfb3Blbl9maWxlX2ltcGwoY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBtb2RlKSB7CisJ cmV0dXJuIGNyZWF0KGZpbGVuYW1lLCBtb2RlKTsKK30KK3Byb2ZfZHVtcF9vcGVuX2ZpbGVfdCAq SkVUX01VVEFCTEUgcHJvZl9kdW1wX29wZW5fZmlsZSA9CisgICAgcHJvZl9kdW1wX29wZW5fZmls ZV9pbXBsOworCitzdGF0aWMgdm9pZAorcHJvZl9kdW1wX29wZW4ocHJvZl9kdW1wX2FyZ190ICph cmcsIGNvbnN0IGNoYXIgKmZpbGVuYW1lKSB7CisJYXJnLT5wcm9mX2R1bXBfZmQgPSBwcm9mX2R1 bXBfb3Blbl9maWxlKGZpbGVuYW1lLCAwNjQ0KTsKKwlwcm9mX2R1bXBfY2hlY2tfcG9zc2libGVf ZXJyb3IoYXJnLCBhcmctPnByb2ZfZHVtcF9mZCA9PSAtMSwKKwkgICAgIjxqZW1hbGxvYz46IGZh aWxlZCB0byBvcGVuIFwiJXNcIlxuIiwgZmlsZW5hbWUpOworfQorCitwcm9mX2R1bXBfd3JpdGVf ZmlsZV90ICpKRVRfTVVUQUJMRSBwcm9mX2R1bXBfd3JpdGVfZmlsZSA9IG1hbGxvY193cml0ZV9m ZDsKKworc3RhdGljIHZvaWQKK3Byb2ZfZHVtcF9mbHVzaCh2b2lkICpvcGFxdWUsIGNvbnN0IGNo YXIgKnMpIHsKKwljYXNzZXJ0KGNvbmZpZ19wcm9mKTsKKwlwcm9mX2R1bXBfYXJnX3QgKmFyZyA9 IChwcm9mX2R1bXBfYXJnX3QgKilvcGFxdWU7CisJaWYgKCFhcmctPmVycm9yKSB7CisJCXNzaXpl X3QgZXJyID0gcHJvZl9kdW1wX3dyaXRlX2ZpbGUoYXJnLT5wcm9mX2R1bXBfZmQsIHMsCisJCSAg ICBzdHJsZW4ocykpOworCQlwcm9mX2R1bXBfY2hlY2tfcG9zc2libGVfZXJyb3IoYXJnLCBlcnIg PT0gLTEsCisJCSAgICAiPGplbWFsbG9jPjogZmFpbGVkIHRvIHdyaXRlIGR1cmluZyBoZWFwIHBy b2ZpbGUgZmx1c2hcbiIpOworCX0KK30KKworc3RhdGljIHZvaWQKK3Byb2ZfZHVtcF9jbG9zZShw cm9mX2R1bXBfYXJnX3QgKmFyZykgeworCWlmIChhcmctPnByb2ZfZHVtcF9mZCAhPSAtMSkgewor CQljbG9zZShhcmctPnByb2ZfZHVtcF9mZCk7CisJfQorfQorCisjaWZuZGVmIF9XSU4zMgorSkVN QUxMT0NfRk9STUFUX1BSSU5URigxLCAyKQorc3RhdGljIGludAorcHJvZl9vcGVuX21hcHNfaW50 ZXJuYWwoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pIHsKKwlpbnQgbWZkOworCXZhX2xpc3QgYXA7 CisJY2hhciBmaWxlbmFtZVtQQVRIX01BWCArIDFdOworCisJdmFfc3RhcnQoYXAsIGZvcm1hdCk7 CisJbWFsbG9jX3ZzbnByaW50ZihmaWxlbmFtZSwgc2l6ZW9mKGZpbGVuYW1lKSwgZm9ybWF0LCBh cCk7CisJdmFfZW5kKGFwKTsKKworI2lmIGRlZmluZWQoT19DTE9FWEVDKQorCW1mZCA9IG9wZW4o ZmlsZW5hbWUsIE9fUkRPTkxZIHwgT19DTE9FWEVDKTsKKyNlbHNlCisJbWZkID0gb3BlbihmaWxl bmFtZSwgT19SRE9OTFkpOworCWlmIChtZmQgIT0gLTEpIHsKKwkJZmNudGwobWZkLCBGX1NFVEZE LCBmY250bChtZmQsIEZfR0VURkQpIHwgRkRfQ0xPRVhFQyk7CisJfQorI2VuZGlmCisKKwlyZXR1 cm4gbWZkOworfQorI2VuZGlmCisKK3N0YXRpYyBpbnQKK3Byb2ZfZHVtcF9vcGVuX21hcHNfaW1w bCgpIHsKKwlpbnQgbWZkOworCisJY2Fzc2VydChjb25maWdfcHJvZik7CisjaWYgZGVmaW5lZChf X0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX0RyYWdvbkZseV9fKQorCW1mZCA9IHByb2Zfb3Blbl9t YXBzX2ludGVybmFsKCIvcHJvYy9jdXJwcm9jL21hcCIpOworI2VsaWYgZGVmaW5lZChfV0lOMzIp CisJbWZkID0gLTE7IC8vIE5vdCBpbXBsZW1lbnRlZAorI2Vsc2UKKwlpbnQgcGlkID0gcHJvZl9n ZXRwaWQoKTsKKworCW1mZCA9IHByb2Zfb3Blbl9tYXBzX2ludGVybmFsKCIvcHJvYy8lZC90YXNr LyVkL21hcHMiLCBwaWQsIHBpZCk7CisJaWYgKG1mZCA9PSAtMSkgeworCQltZmQgPSBwcm9mX29w ZW5fbWFwc19pbnRlcm5hbCgiL3Byb2MvJWQvbWFwcyIsIHBpZCk7CisJfQorI2VuZGlmCisJcmV0 dXJuIG1mZDsKK30KK3Byb2ZfZHVtcF9vcGVuX21hcHNfdCAqSkVUX01VVEFCTEUgcHJvZl9kdW1w X29wZW5fbWFwcyA9CisgICAgcHJvZl9kdW1wX29wZW5fbWFwc19pbXBsOworCitzdGF0aWMgc3Np emVfdAorcHJvZl9kdW1wX3JlYWRfbWFwc19jYih2b2lkICpyZWFkX2Nib3BhcXVlLCB2b2lkICpi dWYsIHNpemVfdCBsaW1pdCkgeworCWludCBtZmQgPSAqKGludCAqKXJlYWRfY2JvcGFxdWU7CisJ YXNzZXJ0KG1mZCAhPSAtMSk7CisJcmV0dXJuIG1hbGxvY19yZWFkX2ZkKG1mZCwgYnVmLCBsaW1p dCk7Cit9CisKK3N0YXRpYyB2b2lkCitwcm9mX2R1bXBfbWFwcyhidWZfd3JpdGVyX3QgKmJ1Zl93 cml0ZXIpIHsKKwlpbnQgbWZkID0gcHJvZl9kdW1wX29wZW5fbWFwcygpOworCWlmIChtZmQgPT0g LTEpIHsKKwkJcmV0dXJuOworCX0KKworCWJ1Zl93cml0ZXJfY2IoYnVmX3dyaXRlciwgIlxuTUFQ UEVEX0xJQlJBUklFUzpcbiIpOworCWJ1Zl93cml0ZXJfcGlwZShidWZfd3JpdGVyLCBwcm9mX2R1 bXBfcmVhZF9tYXBzX2NiLCAmbWZkKTsKKwljbG9zZShtZmQpOworfQorCitzdGF0aWMgYm9vbAor cHJvZl9kdW1wKHRzZF90ICp0c2QsIGJvb2wgcHJvcGFnYXRlX2VyciwgY29uc3QgY2hhciAqZmls ZW5hbWUsCisgICAgYm9vbCBsZWFrY2hlY2spIHsKKwljYXNzZXJ0KGNvbmZpZ19wcm9mKTsKKwlh c3NlcnQodHNkX3JlZW50cmFuY3lfbGV2ZWxfZ2V0KHRzZCkgPT0gMCk7CisKKwlwcm9mX3RkYXRh X3QgKiB0ZGF0YSA9IHByb2ZfdGRhdGFfZ2V0KHRzZCwgdHJ1ZSk7CisJaWYgKHRkYXRhID09IE5V TEwpIHsKKwkJcmV0dXJuIHRydWU7CisJfQorCisJcHJvZl9kdW1wX2FyZ190IGFyZyA9IHsvKiBo YW5kbGVfZXJyb3JfbG9jYWxseSAqLyAhcHJvcGFnYXRlX2VyciwKKwkgICAgLyogZXJyb3IgKi8g ZmFsc2UsIC8qIHByb2ZfZHVtcF9mZCAqLyAtMX07CisKKwlwcmVfcmVlbnRyYW5jeSh0c2QsIE5V TEwpOworCW1hbGxvY19tdXRleF9sb2NrKHRzZF90c2RuKHRzZCksICZwcm9mX2R1bXBfbXR4KTsK KworCXByb2ZfZHVtcF9vcGVuKCZhcmcsIGZpbGVuYW1lKTsKKwlidWZfd3JpdGVyX3QgYnVmX3dy aXRlcjsKKwlib29sIGVyciA9IGJ1Zl93cml0ZXJfaW5pdCh0c2RfdHNkbih0c2QpLCAmYnVmX3dy aXRlciwgcHJvZl9kdW1wX2ZsdXNoLAorCSAgICAmYXJnLCBwcm9mX2R1bXBfYnVmLCBQUk9GX0RV TVBfQlVGU0laRSk7CisJYXNzZXJ0KCFlcnIpOworCXByb2ZfZHVtcF9pbXBsKHRzZCwgYnVmX3dy aXRlcl9jYiwgJmJ1Zl93cml0ZXIsIHRkYXRhLCBsZWFrY2hlY2spOworCXByb2ZfZHVtcF9tYXBz KCZidWZfd3JpdGVyKTsKKwlidWZfd3JpdGVyX3Rlcm1pbmF0ZSh0c2RfdHNkbih0c2QpLCAmYnVm X3dyaXRlcik7CisJcHJvZl9kdW1wX2Nsb3NlKCZhcmcpOworCisJcHJvZl9kdW1wX2hvb2tfdCBk dW1wX2hvb2sgPSBwcm9mX2R1bXBfaG9va19nZXQoKTsKKwlpZiAoZHVtcF9ob29rICE9IE5VTEwp IHsKKwkJZHVtcF9ob29rKGZpbGVuYW1lKTsKKwl9CisJbWFsbG9jX211dGV4X3VubG9jayh0c2Rf dHNkbih0c2QpLCAmcHJvZl9kdW1wX210eCk7CisJcG9zdF9yZWVudHJhbmN5KHRzZCk7CisKKwly ZXR1cm4gYXJnLmVycm9yOworfQorCisvKgorICogSWYgcHJvZmlsaW5nIGlzIG9mZiwgdGhlbiBQ Uk9GX0RVTVBfRklMRU5BTUVfTEVOIGlzIDEsIHNvIHdlJ2xsIGVuZCB1cAorICogY2FsbGluZyBz dHJuY3B5IHdpdGggYSBzaXplIG9mIDAsIHdoaWNoIHRyaWdnZXJzIGEgLVdzdHJpbmdvcC10cnVu Y2F0aW9uCisgKiB3YXJuaW5nIChzdHJuY3B5IGNhbiBuZXZlciBhY3R1YWxseSBiZSBjYWxsZWQg aW4gdGhpcyBjYXNlLCBzaW5jZSB3ZSBiYWlsIG91dAorICogbXVjaCBlYXJsaWVyIHdoZW4gY29u ZmlnX3Byb2YgaXMgZmFsc2UpLiAgVGhpcyBmdW5jdGlvbiB3b3JrcyBhcm91bmQgdGhlCisgKiB3 YXJuaW5nIHRvIGxldCB1cyBsZWF2ZSB0aGUgd2FybmluZyBvbi4KKyAqLworc3RhdGljIGlubGlu ZSB2b2lkCitwcm9mX3N0cm5jcHkoY2hhciAqVU5VU0VEIGRlc3QsIGNvbnN0IGNoYXIgKlVOVVNF RCBzcmMsIHNpemVfdCBVTlVTRUQgc2l6ZSkgeworCWNhc3NlcnQoY29uZmlnX3Byb2YpOworI2lm ZGVmIEpFTUFMTE9DX1BST0YKKwlzdHJuY3B5KGRlc3QsIHNyYywgc2l6ZSk7CisjZW5kaWYKK30K Kworc3RhdGljIGNvbnN0IGNoYXIgKgorcHJvZl9wcmVmaXhfZ2V0KHRzZG5fdCogdHNkbikgewor CW1hbGxvY19tdXRleF9hc3NlcnRfb3duZXIodHNkbiwgJnByb2ZfZHVtcF9maWxlbmFtZV9tdHgp OworCisJcmV0dXJuIHByb2ZfcHJlZml4ID09IE5VTEwgPyBvcHRfcHJvZl9wcmVmaXggOiBwcm9m X3ByZWZpeDsKK30KKworc3RhdGljIGJvb2wKK3Byb2ZfcHJlZml4X2lzX2VtcHR5KHRzZG5fdCAq dHNkbikgeworCW1hbGxvY19tdXRleF9sb2NrKHRzZG4sICZwcm9mX2R1bXBfZmlsZW5hbWVfbXR4 KTsKKwlib29sIHJldCA9IChwcm9mX3ByZWZpeF9nZXQodHNkbilbMF0gPT0gJ1wwJyk7CisJbWFs bG9jX211dGV4X3VubG9jayh0c2RuLCAmcHJvZl9kdW1wX2ZpbGVuYW1lX210eCk7CisJcmV0dXJu IHJldDsKK30KKworI2RlZmluZSBEVU1QX0ZJTEVOQU1FX0JVRlNJWkUgKFBBVEhfTUFYICsgMSkK KyNkZWZpbmUgVlNFUV9JTlZBTElEIFVJTlQ2NF9DKDB4ZmZmZmZmZmZmZmZmZmZmZikKK3N0YXRp YyB2b2lkCitwcm9mX2R1bXBfZmlsZW5hbWUodHNkX3QgKnRzZCwgY2hhciAqZmlsZW5hbWUsIGNo YXIgdiwgdWludDY0X3QgdnNlcSkgeworCWNhc3NlcnQoY29uZmlnX3Byb2YpOworCisJYXNzZXJ0 KHRzZF9yZWVudHJhbmN5X2xldmVsX2dldCh0c2QpID09IDApOworCWNvbnN0IGNoYXIgKnByZWZp eCA9IHByb2ZfcHJlZml4X2dldCh0c2RfdHNkbih0c2QpKTsKKworCWlmICh2c2VxICE9IFZTRVFf SU5WQUxJRCkgeworCSAgICAgICAgLyogIjxwcmVmaXg+LjxwaWQ+LjxzZXE+LnY8dnNlcT4uaGVh cCIgKi8KKwkJbWFsbG9jX3NucHJpbnRmKGZpbGVuYW1lLCBEVU1QX0ZJTEVOQU1FX0JVRlNJWkUs CisJCSAgICAiJXMuJWQuJSJGTVR1NjQiLiVjJSJGTVR1NjQiLmhlYXAiLCBwcmVmaXgsIHByb2Zf Z2V0cGlkKCksCisJCSAgICBwcm9mX2R1bXBfc2VxLCB2LCB2c2VxKTsKKwl9IGVsc2UgeworCSAg ICAgICAgLyogIjxwcmVmaXg+LjxwaWQ+LjxzZXE+Ljx2Pi5oZWFwIiAqLworCQltYWxsb2Nfc25w cmludGYoZmlsZW5hbWUsIERVTVBfRklMRU5BTUVfQlVGU0laRSwKKwkJICAgICIlcy4lZC4lIkZN VHU2NCIuJWMuaGVhcCIsIHByZWZpeCwgcHJvZl9nZXRwaWQoKSwKKwkJICAgIHByb2ZfZHVtcF9z ZXEsIHYpOworCX0KKwlwcm9mX2R1bXBfc2VxKys7Cit9CisKK3ZvaWQKK3Byb2ZfZ2V0X2RlZmF1 bHRfZmlsZW5hbWUodHNkbl90ICp0c2RuLCBjaGFyICpmaWxlbmFtZSwgdWludDY0X3QgaW5kKSB7 CisJbWFsbG9jX211dGV4X2xvY2sodHNkbiwgJnByb2ZfZHVtcF9maWxlbmFtZV9tdHgpOworCW1h bGxvY19zbnByaW50ZihmaWxlbmFtZSwgUFJPRl9EVU1QX0ZJTEVOQU1FX0xFTiwKKwkgICAgIiVz LiVkLiUiRk1UdTY0Ii5qc29uIiwgcHJvZl9wcmVmaXhfZ2V0KHRzZG4pLCBwcm9mX2dldHBpZCgp LCBpbmQpOworCW1hbGxvY19tdXRleF91bmxvY2sodHNkbiwgJnByb2ZfZHVtcF9maWxlbmFtZV9t dHgpOworfQorCit2b2lkCitwcm9mX2ZkdW1wX2ltcGwodHNkX3QgKnRzZCkgeworCWNoYXIgZmls ZW5hbWVbRFVNUF9GSUxFTkFNRV9CVUZTSVpFXTsKKworCWFzc2VydCghcHJvZl9wcmVmaXhfaXNf ZW1wdHkodHNkX3RzZG4odHNkKSkpOworCW1hbGxvY19tdXRleF9sb2NrKHRzZF90c2RuKHRzZCks ICZwcm9mX2R1bXBfZmlsZW5hbWVfbXR4KTsKKwlwcm9mX2R1bXBfZmlsZW5hbWUodHNkLCBmaWxl bmFtZSwgJ2YnLCBWU0VRX0lOVkFMSUQpOworCW1hbGxvY19tdXRleF91bmxvY2sodHNkX3RzZG4o dHNkKSwgJnByb2ZfZHVtcF9maWxlbmFtZV9tdHgpOworCXByb2ZfZHVtcCh0c2QsIGZhbHNlLCBm aWxlbmFtZSwgb3B0X3Byb2ZfbGVhayk7Cit9CisKK2Jvb2wKK3Byb2ZfcHJlZml4X3NldCh0c2Ru X3QgKnRzZG4sIGNvbnN0IGNoYXIgKnByZWZpeCkgeworCWNhc3NlcnQoY29uZmlnX3Byb2YpOwor CWN0bF9tdHhfYXNzZXJ0X2hlbGQodHNkbik7CisJbWFsbG9jX211dGV4X2xvY2sodHNkbiwgJnBy b2ZfZHVtcF9maWxlbmFtZV9tdHgpOworCWlmIChwcm9mX3ByZWZpeCA9PSBOVUxMKSB7CisJCW1h bGxvY19tdXRleF91bmxvY2sodHNkbiwgJnByb2ZfZHVtcF9maWxlbmFtZV9tdHgpOworCQkvKiBF dmVyeXRoaW5nIGlzIHN0aWxsIGd1YXJkZWQgYnkgY3RsX210eC4gKi8KKwkJY2hhciAqYnVmZmVy ID0gYmFzZV9hbGxvYyh0c2RuLCBwcm9mX2Jhc2UsCisJCSAgICBQUk9GX0RVTVBfRklMRU5BTUVf TEVOLCBRVUFOVFVNKTsKKwkJaWYgKGJ1ZmZlciA9PSBOVUxMKSB7CisJCQlyZXR1cm4gdHJ1ZTsK KwkJfQorCQltYWxsb2NfbXV0ZXhfbG9jayh0c2RuLCAmcHJvZl9kdW1wX2ZpbGVuYW1lX210eCk7 CisJCXByb2ZfcHJlZml4ID0gYnVmZmVyOworCX0KKwlhc3NlcnQocHJvZl9wcmVmaXggIT0gTlVM TCk7CisKKwlwcm9mX3N0cm5jcHkocHJvZl9wcmVmaXgsIHByZWZpeCwgUFJPRl9EVU1QX0ZJTEVO QU1FX0xFTiAtIDEpOworCXByb2ZfcHJlZml4W1BST0ZfRFVNUF9GSUxFTkFNRV9MRU4gLSAxXSA9 ICdcMCc7CisJbWFsbG9jX211dGV4X3VubG9jayh0c2RuLCAmcHJvZl9kdW1wX2ZpbGVuYW1lX210 eCk7CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQKK3Byb2ZfaWR1bXBfaW1wbCh0c2RfdCAq dHNkKSB7CisJbWFsbG9jX211dGV4X2xvY2sodHNkX3RzZG4odHNkKSwgJnByb2ZfZHVtcF9maWxl bmFtZV9tdHgpOworCWlmIChwcm9mX3ByZWZpeF9nZXQodHNkX3RzZG4odHNkKSlbMF0gPT0gJ1ww JykgeworCQltYWxsb2NfbXV0ZXhfdW5sb2NrKHRzZF90c2RuKHRzZCksICZwcm9mX2R1bXBfZmls ZW5hbWVfbXR4KTsKKwkJcmV0dXJuOworCX0KKwljaGFyIGZpbGVuYW1lW1BBVEhfTUFYICsgMV07 CisJcHJvZl9kdW1wX2ZpbGVuYW1lKHRzZCwgZmlsZW5hbWUsICdpJywgcHJvZl9kdW1wX2lzZXEp OworCXByb2ZfZHVtcF9pc2VxKys7CisJbWFsbG9jX211dGV4X3VubG9jayh0c2RfdHNkbih0c2Qp LCAmcHJvZl9kdW1wX2ZpbGVuYW1lX210eCk7CisJcHJvZl9kdW1wKHRzZCwgZmFsc2UsIGZpbGVu YW1lLCBmYWxzZSk7Cit9CisKK2Jvb2wKK3Byb2ZfbWR1bXBfaW1wbCh0c2RfdCAqdHNkLCBjb25z dCBjaGFyICpmaWxlbmFtZSkgeworCWNoYXIgZmlsZW5hbWVfYnVmW0RVTVBfRklMRU5BTUVfQlVG U0laRV07CisJaWYgKGZpbGVuYW1lID09IE5VTEwpIHsKKwkJLyogTm8gZmlsZW5hbWUgc3BlY2lm aWVkLCBzbyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlIG9uZS4gKi8KKwkJbWFsbG9jX211dGV4X2xv Y2sodHNkX3RzZG4odHNkKSwgJnByb2ZfZHVtcF9maWxlbmFtZV9tdHgpOworCQlpZiAocHJvZl9w cmVmaXhfZ2V0KHRzZF90c2RuKHRzZCkpWzBdID09ICdcMCcpIHsKKwkJCW1hbGxvY19tdXRleF91 bmxvY2sodHNkX3RzZG4odHNkKSwgJnByb2ZfZHVtcF9maWxlbmFtZV9tdHgpOworCQkJcmV0dXJu IHRydWU7CisJCX0KKwkJcHJvZl9kdW1wX2ZpbGVuYW1lKHRzZCwgZmlsZW5hbWVfYnVmLCAnbScs IHByb2ZfZHVtcF9tc2VxKTsKKwkJcHJvZl9kdW1wX21zZXErKzsKKwkJbWFsbG9jX211dGV4X3Vu bG9jayh0c2RfdHNkbih0c2QpLCAmcHJvZl9kdW1wX2ZpbGVuYW1lX210eCk7CisJCWZpbGVuYW1l ID0gZmlsZW5hbWVfYnVmOworCX0KKwlyZXR1cm4gcHJvZl9kdW1wKHRzZCwgdHJ1ZSwgZmlsZW5h bWUsIGZhbHNlKTsKK30KKwordm9pZAorcHJvZl9nZHVtcF9pbXBsKHRzZF90ICp0c2QpIHsKKwl0 c2RuX3QgKnRzZG4gPSB0c2RfdHNkbih0c2QpOworCW1hbGxvY19tdXRleF9sb2NrKHRzZG4sICZw cm9mX2R1bXBfZmlsZW5hbWVfbXR4KTsKKwlpZiAocHJvZl9wcmVmaXhfZ2V0KHRzZG4pWzBdID09 ICdcMCcpIHsKKwkJbWFsbG9jX211dGV4X3VubG9jayh0c2RuLCAmcHJvZl9kdW1wX2ZpbGVuYW1l X210eCk7CisJCXJldHVybjsKKwl9CisJY2hhciBmaWxlbmFtZVtEVU1QX0ZJTEVOQU1FX0JVRlNJ WkVdOworCXByb2ZfZHVtcF9maWxlbmFtZSh0c2QsIGZpbGVuYW1lLCAndScsIHByb2ZfZHVtcF91 c2VxKTsKKwlwcm9mX2R1bXBfdXNlcSsrOworCW1hbGxvY19tdXRleF91bmxvY2sodHNkbiwgJnBy b2ZfZHVtcF9maWxlbmFtZV9tdHgpOworCXByb2ZfZHVtcCh0c2QsIGZhbHNlLCBmaWxlbmFtZSwg ZmFsc2UpOworfQoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9j LTUuMy4wL3NyYy9wc3NldC5jIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4z LjAvc3JjL3Bzc2V0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWE4ZjA1 NAotLS0gL2Rldi9udWxsCisrKyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUu My4wL3NyYy9wc3NldC5jCkBAIC0wLDAgKzEsMzg1IEBACisjaW5jbHVkZSAiamVtYWxsb2MvaW50 ZXJuYWwvamVtYWxsb2NfcHJlYW1ibGUuaCIKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9q ZW1hbGxvY19pbnRlcm5hbF9pbmNsdWRlcy5oIgorCisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJu YWwvcHNzZXQuaCIKKworI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2ZiLmgiCisKK3ZvaWQK K3Bzc2V0X2luaXQocHNzZXRfdCAqcHNzZXQpIHsKKwlmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg UFNTRVRfTlBTSVpFUzsgaSsrKSB7CisJCWhwZGF0YV9hZ2VfaGVhcF9uZXcoJnBzc2V0LT5wYWdl c2xhYnNbaV0pOworCX0KKwlmYl9pbml0KHBzc2V0LT5wYWdlc2xhYl9iaXRtYXAsIFBTU0VUX05Q U0laRVMpOworCW1lbXNldCgmcHNzZXQtPm1lcmdlZF9zdGF0cywgMCwgc2l6ZW9mKHBzc2V0LT5t ZXJnZWRfc3RhdHMpKTsKKwltZW1zZXQoJnBzc2V0LT5zdGF0cywgMCwgc2l6ZW9mKHBzc2V0LT5z dGF0cykpOworCWhwZGF0YV9lbXB0eV9saXN0X2luaXQoJnBzc2V0LT5lbXB0eSk7CisJZm9yIChp bnQgaSA9IDA7IGkgPCBQU1NFVF9OUFVSR0VfTElTVFM7IGkrKykgeworCQlocGRhdGFfcHVyZ2Vf bGlzdF9pbml0KCZwc3NldC0+dG9fcHVyZ2VbaV0pOworCX0KKwlmYl9pbml0KHBzc2V0LT5wdXJn ZV9iaXRtYXAsIFBTU0VUX05QVVJHRV9MSVNUUyk7CisJaHBkYXRhX2h1Z2lmeV9saXN0X2luaXQo JnBzc2V0LT50b19odWdpZnkpOworfQorCitzdGF0aWMgdm9pZAorcHNzZXRfYmluX3N0YXRzX2Fj Y3VtKHBzc2V0X2Jpbl9zdGF0c190ICpkc3QsIHBzc2V0X2Jpbl9zdGF0c190ICpzcmMpIHsKKwlk c3QtPm5wYWdlc2xhYnMgKz0gc3JjLT5ucGFnZXNsYWJzOworCWRzdC0+bmFjdGl2ZSArPSBzcmMt Pm5hY3RpdmU7CisJZHN0LT5uZGlydHkgKz0gc3JjLT5uZGlydHk7Cit9CisKK3ZvaWQKK3Bzc2V0 X3N0YXRzX2FjY3VtKHBzc2V0X3N0YXRzX3QgKmRzdCwgcHNzZXRfc3RhdHNfdCAqc3JjKSB7CisJ cHNzZXRfYmluX3N0YXRzX2FjY3VtKCZkc3QtPmZ1bGxfc2xhYnNbMF0sICZzcmMtPmZ1bGxfc2xh YnNbMF0pOworCXBzc2V0X2Jpbl9zdGF0c19hY2N1bSgmZHN0LT5mdWxsX3NsYWJzWzFdLCAmc3Jj LT5mdWxsX3NsYWJzWzFdKTsKKwlwc3NldF9iaW5fc3RhdHNfYWNjdW0oJmRzdC0+ZW1wdHlfc2xh YnNbMF0sICZzcmMtPmVtcHR5X3NsYWJzWzBdKTsKKwlwc3NldF9iaW5fc3RhdHNfYWNjdW0oJmRz dC0+ZW1wdHlfc2xhYnNbMV0sICZzcmMtPmVtcHR5X3NsYWJzWzFdKTsKKwlmb3IgKHBzemluZF90 IGkgPSAwOyBpIDwgUFNTRVRfTlBTSVpFUzsgaSsrKSB7CisJCXBzc2V0X2Jpbl9zdGF0c19hY2N1 bSgmZHN0LT5ub25mdWxsX3NsYWJzW2ldWzBdLAorCQkgICAgJnNyYy0+bm9uZnVsbF9zbGFic1tp XVswXSk7CisJCXBzc2V0X2Jpbl9zdGF0c19hY2N1bSgmZHN0LT5ub25mdWxsX3NsYWJzW2ldWzFd LAorCQkgICAgJnNyYy0+bm9uZnVsbF9zbGFic1tpXVsxXSk7CisJfQorfQorCisvKgorICogVGhl IHN0YXRzIG1haW50ZW5hbmNlIHN0cmF0ZWd5IGlzIHRvIHJlbW92ZSBhIHBhZ2VzbGFiJ3MgY29u dHJpYnV0aW9uIHRvIHRoZQorICogc3RhdHMgd2hlbiB3ZSBjYWxsIHBzc2V0X3VwZGF0ZV9iZWdp biwgYW5kIHJlLWFkZCBpdCAodG8gYSBwb3RlbnRpYWxseSBuZXcKKyAqIGJpbikgd2hlbiB3ZSBj YWxsIHBzc2V0X3VwZGF0ZV9lbmQuCisgKi8KK0pFTUFMTE9DX0FMV0FZU19JTkxJTkUgdm9pZAor cHNzZXRfYmluX3N0YXRzX2luc2VydF9yZW1vdmUocHNzZXRfdCAqcHNzZXQsIHBzc2V0X2Jpbl9z dGF0c190ICpiaW5zdGF0cywKKyAgICBocGRhdGFfdCAqcHMsIGJvb2wgaW5zZXJ0KSB7CisJc2l6 ZV90IG11bCA9IGluc2VydCA/IChzaXplX3QpMSA6IChzaXplX3QpLTE7CisJc2l6ZV90IGh1Z2Vf aWR4ID0gKHNpemVfdClocGRhdGFfaHVnZV9nZXQocHMpOworCisJYmluc3RhdHNbaHVnZV9pZHhd Lm5wYWdlc2xhYnMgKz0gbXVsICogMTsKKwliaW5zdGF0c1todWdlX2lkeF0ubmFjdGl2ZSArPSBt dWwgKiBocGRhdGFfbmFjdGl2ZV9nZXQocHMpOworCWJpbnN0YXRzW2h1Z2VfaWR4XS5uZGlydHkg Kz0gbXVsICogaHBkYXRhX25kaXJ0eV9nZXQocHMpOworCisJcHNzZXQtPm1lcmdlZF9zdGF0cy5u cGFnZXNsYWJzICs9IG11bCAqIDE7CisJcHNzZXQtPm1lcmdlZF9zdGF0cy5uYWN0aXZlICs9IG11 bCAqIGhwZGF0YV9uYWN0aXZlX2dldChwcyk7CisJcHNzZXQtPm1lcmdlZF9zdGF0cy5uZGlydHkg Kz0gbXVsICogaHBkYXRhX25kaXJ0eV9nZXQocHMpOworCisJaWYgKGNvbmZpZ19kZWJ1Zykgewor CQlwc3NldF9iaW5fc3RhdHNfdCBjaGVja19zdGF0cyA9IHswfTsKKwkJZm9yIChzaXplX3QgaHVn ZSA9IDA7IGh1Z2UgPD0gMTsgaHVnZSsrKSB7CisJCQlwc3NldF9iaW5fc3RhdHNfYWNjdW0oJmNo ZWNrX3N0YXRzLAorCQkJICAgICZwc3NldC0+c3RhdHMuZnVsbF9zbGFic1todWdlXSk7CisJCQlw c3NldF9iaW5fc3RhdHNfYWNjdW0oJmNoZWNrX3N0YXRzLAorCQkJICAgICZwc3NldC0+c3RhdHMu ZW1wdHlfc2xhYnNbaHVnZV0pOworCQkJZm9yIChwc3ppbmRfdCBwaW5kID0gMDsgcGluZCA8IFBT U0VUX05QU0laRVM7IHBpbmQrKykgeworCQkJCXBzc2V0X2Jpbl9zdGF0c19hY2N1bSgmY2hlY2tf c3RhdHMsCisJCQkJICAgICZwc3NldC0+c3RhdHMubm9uZnVsbF9zbGFic1twaW5kXVtodWdlXSk7 CisJCQl9CisJCX0KKwkJYXNzZXJ0KHBzc2V0LT5tZXJnZWRfc3RhdHMubnBhZ2VzbGFicworCQkg ICAgPT0gY2hlY2tfc3RhdHMubnBhZ2VzbGFicyk7CisJCWFzc2VydChwc3NldC0+bWVyZ2VkX3N0 YXRzLm5hY3RpdmUgPT0gY2hlY2tfc3RhdHMubmFjdGl2ZSk7CisJCWFzc2VydChwc3NldC0+bWVy Z2VkX3N0YXRzLm5kaXJ0eSA9PSBjaGVja19zdGF0cy5uZGlydHkpOworCX0KK30KKworc3RhdGlj IHZvaWQKK3Bzc2V0X2Jpbl9zdGF0c19pbnNlcnQocHNzZXRfdCAqcHNzZXQsIHBzc2V0X2Jpbl9z dGF0c190ICpiaW5zdGF0cywKKyAgICBocGRhdGFfdCAqcHMpIHsKKwlwc3NldF9iaW5fc3RhdHNf aW5zZXJ0X3JlbW92ZShwc3NldCwgYmluc3RhdHMsIHBzLCB0cnVlKTsKK30KKworc3RhdGljIHZv aWQKK3Bzc2V0X2Jpbl9zdGF0c19yZW1vdmUocHNzZXRfdCAqcHNzZXQsIHBzc2V0X2Jpbl9zdGF0 c190ICpiaW5zdGF0cywKKyAgICBocGRhdGFfdCAqcHMpIHsKKwlwc3NldF9iaW5fc3RhdHNfaW5z ZXJ0X3JlbW92ZShwc3NldCwgYmluc3RhdHMsIHBzLCBmYWxzZSk7Cit9CisKK3N0YXRpYyB2b2lk Citwc3NldF9ocGRhdGFfaGVhcF9yZW1vdmUocHNzZXRfdCAqcHNzZXQsIHBzemluZF90IHBpbmQs IGhwZGF0YV90ICpwcykgeworCWhwZGF0YV9hZ2VfaGVhcF9yZW1vdmUoJnBzc2V0LT5wYWdlc2xh YnNbcGluZF0sIHBzKTsKKwlpZiAoaHBkYXRhX2FnZV9oZWFwX2VtcHR5KCZwc3NldC0+cGFnZXNs YWJzW3BpbmRdKSkgeworCQlmYl91bnNldChwc3NldC0+cGFnZXNsYWJfYml0bWFwLCBQU1NFVF9O UFNJWkVTLCAoc2l6ZV90KXBpbmQpOworCX0KK30KKworc3RhdGljIHZvaWQKK3Bzc2V0X2hwZGF0 YV9oZWFwX2luc2VydChwc3NldF90ICpwc3NldCwgcHN6aW5kX3QgcGluZCwgaHBkYXRhX3QgKnBz KSB7CisJaWYgKGhwZGF0YV9hZ2VfaGVhcF9lbXB0eSgmcHNzZXQtPnBhZ2VzbGFic1twaW5kXSkp IHsKKwkJZmJfc2V0KHBzc2V0LT5wYWdlc2xhYl9iaXRtYXAsIFBTU0VUX05QU0laRVMsIChzaXpl X3QpcGluZCk7CisJfQorCWhwZGF0YV9hZ2VfaGVhcF9pbnNlcnQoJnBzc2V0LT5wYWdlc2xhYnNb cGluZF0sIHBzKTsKK30KKworc3RhdGljIHZvaWQKK3Bzc2V0X3N0YXRzX2luc2VydChwc3NldF90 KiBwc3NldCwgaHBkYXRhX3QgKnBzKSB7CisJaWYgKGhwZGF0YV9lbXB0eShwcykpIHsKKwkJcHNz ZXRfYmluX3N0YXRzX2luc2VydChwc3NldCwgcHNzZXQtPnN0YXRzLmVtcHR5X3NsYWJzLCBwcyk7 CisJfSBlbHNlIGlmIChocGRhdGFfZnVsbChwcykpIHsKKwkJcHNzZXRfYmluX3N0YXRzX2luc2Vy dChwc3NldCwgcHNzZXQtPnN0YXRzLmZ1bGxfc2xhYnMsIHBzKTsKKwl9IGVsc2UgeworCQlzaXpl X3QgbG9uZ2VzdF9mcmVlX3JhbmdlID0gaHBkYXRhX2xvbmdlc3RfZnJlZV9yYW5nZV9nZXQocHMp OworCisJCXBzemluZF90IHBpbmQgPSBzel9wc3oyaW5kKHN6X3Bzel9xdWFudGl6ZV9mbG9vcigK KwkJICAgIGxvbmdlc3RfZnJlZV9yYW5nZSA8PCBMR19QQUdFKSk7CisJCWFzc2VydChwaW5kIDwg UFNTRVRfTlBTSVpFUyk7CisKKwkJcHNzZXRfYmluX3N0YXRzX2luc2VydChwc3NldCwgcHNzZXQt PnN0YXRzLm5vbmZ1bGxfc2xhYnNbcGluZF0sCisJCSAgICBwcyk7CisJfQorfQorCitzdGF0aWMg dm9pZAorcHNzZXRfc3RhdHNfcmVtb3ZlKHBzc2V0X3QgKnBzc2V0LCBocGRhdGFfdCAqcHMpIHsK KwlpZiAoaHBkYXRhX2VtcHR5KHBzKSkgeworCQlwc3NldF9iaW5fc3RhdHNfcmVtb3ZlKHBzc2V0 LCBwc3NldC0+c3RhdHMuZW1wdHlfc2xhYnMsIHBzKTsKKwl9IGVsc2UgaWYgKGhwZGF0YV9mdWxs KHBzKSkgeworCQlwc3NldF9iaW5fc3RhdHNfcmVtb3ZlKHBzc2V0LCBwc3NldC0+c3RhdHMuZnVs bF9zbGFicywgcHMpOworCX0gZWxzZSB7CisJCXNpemVfdCBsb25nZXN0X2ZyZWVfcmFuZ2UgPSBo cGRhdGFfbG9uZ2VzdF9mcmVlX3JhbmdlX2dldChwcyk7CisKKwkJcHN6aW5kX3QgcGluZCA9IHN6 X3BzejJpbmQoc3pfcHN6X3F1YW50aXplX2Zsb29yKAorCQkgICAgbG9uZ2VzdF9mcmVlX3Jhbmdl IDw8IExHX1BBR0UpKTsKKwkJYXNzZXJ0KHBpbmQgPCBQU1NFVF9OUFNJWkVTKTsKKworCQlwc3Nl dF9iaW5fc3RhdHNfcmVtb3ZlKHBzc2V0LCBwc3NldC0+c3RhdHMubm9uZnVsbF9zbGFic1twaW5k XSwKKwkJICAgIHBzKTsKKwl9Cit9CisKKy8qCisgKiBQdXQgcHMgaW50byBzb21lIGNvbnRhaW5l ciBzbyB0aGF0IGl0IGNhbiBiZSBmb3VuZCBkdXJpbmcgZnV0dXJlIGFsbG9jYXRpb24KKyAqIHJl cXVlc3RzLgorICovCitzdGF0aWMgdm9pZAorcHNzZXRfYWxsb2NfY29udGFpbmVyX2luc2VydChw c3NldF90ICpwc3NldCwgaHBkYXRhX3QgKnBzKSB7CisJYXNzZXJ0KCFocGRhdGFfaW5fcHNzZXRf YWxsb2NfY29udGFpbmVyX2dldChwcykpOworCWhwZGF0YV9pbl9wc3NldF9hbGxvY19jb250YWlu ZXJfc2V0KHBzLCB0cnVlKTsKKwlpZiAoaHBkYXRhX2VtcHR5KHBzKSkgeworCQkvKgorCQkgKiBU aGlzIHByZXBlbmQsIHBhaXJlZCB3aXRoIHBvcHBpbmcgdGhlIGhlYWQgaW4gcHNzZXRfZml0LAor CQkgKiBtZWFucyB3ZSBpbXBsZW1lbnQgTElGTyBvcmRlcmluZyBmb3IgdGhlIGVtcHR5IHNsYWJz IHNldCwKKwkJICogd2hpY2ggc2VlbXMgcmVhc29uYWJsZS4KKwkJICovCisJCWhwZGF0YV9lbXB0 eV9saXN0X3ByZXBlbmQoJnBzc2V0LT5lbXB0eSwgcHMpOworCX0gZWxzZSBpZiAoaHBkYXRhX2Z1 bGwocHMpKSB7CisJCS8qCisJCSAqIFdlIGRvbid0IG5lZWQgdG8ga2VlcCB0cmFjayBvZiB0aGUg ZnVsbCBzbGFiczsgd2UncmUgbmV2ZXIKKwkJICogZ29pbmcgdG8gcmV0dXJuIHRoZW0gZnJvbSBh IHBzc2V0X3BpY2tfYWxsb2MgY2FsbC4KKwkJICovCisJfSBlbHNlIHsKKwkJc2l6ZV90IGxvbmdl c3RfZnJlZV9yYW5nZSA9IGhwZGF0YV9sb25nZXN0X2ZyZWVfcmFuZ2VfZ2V0KHBzKTsKKworCQlw c3ppbmRfdCBwaW5kID0gc3pfcHN6MmluZChzel9wc3pfcXVhbnRpemVfZmxvb3IoCisJCSAgICBs b25nZXN0X2ZyZWVfcmFuZ2UgPDwgTEdfUEFHRSkpOworCQlhc3NlcnQocGluZCA8IFBTU0VUX05Q U0laRVMpOworCisJCXBzc2V0X2hwZGF0YV9oZWFwX2luc2VydChwc3NldCwgcGluZCwgcHMpOwor CX0KK30KKworLyogUmVtb3ZlIHBzIGZyb20gdGhvc2UgY29sbGVjdGlvbnMuICovCitzdGF0aWMg dm9pZAorcHNzZXRfYWxsb2NfY29udGFpbmVyX3JlbW92ZShwc3NldF90ICpwc3NldCwgaHBkYXRh X3QgKnBzKSB7CisJYXNzZXJ0KGhwZGF0YV9pbl9wc3NldF9hbGxvY19jb250YWluZXJfZ2V0KHBz KSk7CisJaHBkYXRhX2luX3Bzc2V0X2FsbG9jX2NvbnRhaW5lcl9zZXQocHMsIGZhbHNlKTsKKwor CWlmIChocGRhdGFfZW1wdHkocHMpKSB7CisJCWhwZGF0YV9lbXB0eV9saXN0X3JlbW92ZSgmcHNz ZXQtPmVtcHR5LCBwcyk7CisJfSBlbHNlIGlmIChocGRhdGFfZnVsbChwcykpIHsKKwkJLyogU2Ft ZSBhcyBhYm92ZSAtLSBkbyBub3RoaW5nIGluIHRoaXMgY2FzZS4gKi8KKwl9IGVsc2UgeworCQlz aXplX3QgbG9uZ2VzdF9mcmVlX3JhbmdlID0gaHBkYXRhX2xvbmdlc3RfZnJlZV9yYW5nZV9nZXQo cHMpOworCisJCXBzemluZF90IHBpbmQgPSBzel9wc3oyaW5kKHN6X3Bzel9xdWFudGl6ZV9mbG9v cigKKwkJICAgIGxvbmdlc3RfZnJlZV9yYW5nZSA8PCBMR19QQUdFKSk7CisJCWFzc2VydChwaW5k IDwgUFNTRVRfTlBTSVpFUyk7CisKKwkJcHNzZXRfaHBkYXRhX2hlYXBfcmVtb3ZlKHBzc2V0LCBw aW5kLCBwcyk7CisJfQorfQorCitzdGF0aWMgc2l6ZV90Citwc3NldF9wdXJnZV9saXN0X2luZCho cGRhdGFfdCAqcHMpIHsKKwlzaXplX3QgbmRpcnR5ID0gaHBkYXRhX25kaXJ0eV9nZXQocHMpOwor CS8qIFNob3VsZG4ndCBoYXZlIHNvbWV0aGluZyB3aXRoIG5vIGRpcnR5IHBhZ2VzIHB1cmdlYWJs ZS4gKi8KKwlhc3NlcnQobmRpcnR5ID4gMCk7CisJLyoKKwkgKiBIaWdoZXIgaW5kaWNlcyBjb3Jy ZXNwb25kIHRvIGxpc3RzIHdlJ2QgbGlrZSB0byBwdXJnZSBlYXJsaWVyOyBtYWtlCisJICogdGhl IHR3byBoaWdoZXN0IGluZGljZXMgY29ycmVzcG9uZCB0byBlbXB0eSBsaXN0cywgd2hpY2ggd2Ug YXR0ZW1wdAorCSAqIHRvIHB1cmdlIGJlZm9yZSBwdXJnaW5nIGFueSBub24tZW1wdHkgbGlzdC4g IFRoaXMgaGFzIHR3byBhZHZhbnRhZ2VzOgorCSAqIC0gRW1wdHkgcGFnZSBzbGFicyBhcmUgdGhl IGxlYXN0IGxpa2VseSB0byBnZXQgcmV1c2VkICh3ZSdsbCBvbmx5CisJICogICBwaWNrIHRoZW0g Zm9yIGFuIGFsbG9jYXRpb24gaWYgd2UgaGF2ZSBubyBvdGhlciBjaG9pY2UpLgorCSAqIC0gRW1w dHkgcGFnZSBzbGFicyBjYW4gcHVyZ2UgZXZlcnkgZGlydHkgcGFnZSB0aGV5IGNvbnRhaW4gaW4g YQorCSAqICAgc2luZ2xlIGNhbGwsIHdoaWNoIGlzIG5vdCB1c3VhbGx5IHRoZSBjYXNlLgorCSAq CisJICogV2UgcHVyZ2UgaHVnZWlmaWVkIGVtcHR5IHNsYWJzIGJlZm9yZSBub25odWdlaWZpZWQg b25lcywgb24gdGhlIGJhc2lzCisJICogdGhhdCB0aGV5IGFyZSBmdWxseSBkaXJ0eSwgd2hpbGUg bm9uaHVnaWZpZWQgc2xhYnMgbWlnaHQgbm90IGJlLCBzbworCSAqIHdlIGZyZWUgdXAgbW9yZSBw YWdlcyBtb3JlIGVhc2lseS4KKwkgKi8KKwlpZiAoaHBkYXRhX25hY3RpdmVfZ2V0KHBzKSA9PSAw KSB7CisJCWlmIChocGRhdGFfaHVnZV9nZXQocHMpKSB7CisJCQlyZXR1cm4gUFNTRVRfTlBVUkdF X0xJU1RTIC0gMTsKKwkJfSBlbHNlIHsKKwkJCXJldHVybiBQU1NFVF9OUFVSR0VfTElTVFMgLSAy OworCQl9CisJfQorCisJcHN6aW5kX3QgcGluZCA9IHN6X3BzejJpbmQoc3pfcHN6X3F1YW50aXpl X2Zsb29yKG5kaXJ0eSA8PCBMR19QQUdFKSk7CisJLyoKKwkgKiBGb3Igbm9uLWVtcHR5IHNsYWJz LCB3ZSBtYXkgcmV1c2UgdGhlbSBhZ2Fpbi4gIFByZWZlciBwdXJnaW5nCisJICogbm9uLWh1Z2Vp ZmllZCBzbGFicyBiZWZvcmUgaHVnZWlmaWVkIG9uZXMgdGhlbiwgYW1vbmcgcGFnZXMgb2YKKwkg KiBzaW1pbGFyIGRpcnRpbmVzcy4gIFdlIHN0aWxsIGdldCBzb21lIGJlbmVmaXQgZnJvbSB0aGUg aHVnaWZpY2F0aW9uLgorCSAqLworCXJldHVybiAoc2l6ZV90KXBpbmQgKiAyICsgKGhwZGF0YV9o dWdlX2dldChwcykgPyAwIDogMSk7Cit9CisKK3N0YXRpYyB2b2lkCitwc3NldF9tYXliZV9yZW1v dmVfcHVyZ2VfbGlzdChwc3NldF90ICpwc3NldCwgaHBkYXRhX3QgKnBzKSB7CisJLyoKKwkgKiBS ZW1vdmUgdGhlIGhwZGF0YSBmcm9tIGl0cyBwdXJnZSBsaXN0IChpZiBpdCdzIGluIG9uZSkuICBF dmVuIGlmIGl0J3MKKwkgKiBnb2luZyB0byBzdGF5IGluIHRoZSBzYW1lIG9uZSwgYnkgYXBwZW5k aW5nIGl0IGR1cmluZworCSAqIHBzc2V0X3VwZGF0ZV9lbmQsIHdlIG1vdmUgaXQgdG8gdGhlIGVu ZCBvZiBpdHMgcXVldWUsIHNvIHRoYXQgd2UKKwkgKiBwdXJnZSBMUlUgd2l0aGluIGEgZ2l2ZW4g ZGlydGluZXNzIGJ1Y2tldC4KKwkgKi8KKwlpZiAoaHBkYXRhX3B1cmdlX2FsbG93ZWRfZ2V0KHBz KSkgeworCQlzaXplX3QgaW5kID0gcHNzZXRfcHVyZ2VfbGlzdF9pbmQocHMpOworCQlocGRhdGFf cHVyZ2VfbGlzdF90ICpwdXJnZV9saXN0ID0gJnBzc2V0LT50b19wdXJnZVtpbmRdOworCQlocGRh dGFfcHVyZ2VfbGlzdF9yZW1vdmUocHVyZ2VfbGlzdCwgcHMpOworCQlpZiAoaHBkYXRhX3B1cmdl X2xpc3RfZW1wdHkocHVyZ2VfbGlzdCkpIHsKKwkJCWZiX3Vuc2V0KHBzc2V0LT5wdXJnZV9iaXRt YXAsIFBTU0VUX05QVVJHRV9MSVNUUywgaW5kKTsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQK K3Bzc2V0X21heWJlX2luc2VydF9wdXJnZV9saXN0KHBzc2V0X3QgKnBzc2V0LCBocGRhdGFfdCAq cHMpIHsKKwlpZiAoaHBkYXRhX3B1cmdlX2FsbG93ZWRfZ2V0KHBzKSkgeworCQlzaXplX3QgaW5k ID0gcHNzZXRfcHVyZ2VfbGlzdF9pbmQocHMpOworCQlocGRhdGFfcHVyZ2VfbGlzdF90ICpwdXJn ZV9saXN0ID0gJnBzc2V0LT50b19wdXJnZVtpbmRdOworCQlpZiAoaHBkYXRhX3B1cmdlX2xpc3Rf ZW1wdHkocHVyZ2VfbGlzdCkpIHsKKwkJCWZiX3NldChwc3NldC0+cHVyZ2VfYml0bWFwLCBQU1NF VF9OUFVSR0VfTElTVFMsIGluZCk7CisJCX0KKwkJaHBkYXRhX3B1cmdlX2xpc3RfYXBwZW5kKHB1 cmdlX2xpc3QsIHBzKTsKKwl9CisKK30KKwordm9pZAorcHNzZXRfdXBkYXRlX2JlZ2luKHBzc2V0 X3QgKnBzc2V0LCBocGRhdGFfdCAqcHMpIHsKKwlocGRhdGFfYXNzZXJ0X2NvbnNpc3RlbnQocHMp OworCWFzc2VydChocGRhdGFfaW5fcHNzZXRfZ2V0KHBzKSk7CisJaHBkYXRhX3VwZGF0aW5nX3Nl dChwcywgdHJ1ZSk7CisJcHNzZXRfc3RhdHNfcmVtb3ZlKHBzc2V0LCBwcyk7CisJaWYgKGhwZGF0 YV9pbl9wc3NldF9hbGxvY19jb250YWluZXJfZ2V0KHBzKSkgeworCQkvKgorCQkgKiBTb21lIG1l dGFkYXRhIHVwZGF0ZXMgY2FuIGJyZWFrIGFsbG9jIGNvbnRhaW5lciBpbnZhcmlhbnRzCisJCSAq IChlLmcuIHRoZSBsb25nZXN0IGZyZWUgcmFuZ2UgZGV0ZXJtaW5lcyB0aGUgaHBkYXRhX2hlYXBf dCB0aGUKKwkJICogcGFnZXNsYWIgbGl2ZXMgaW4pLgorCQkgKi8KKwkJYXNzZXJ0KGhwZGF0YV9h bGxvY19hbGxvd2VkX2dldChwcykpOworCQlwc3NldF9hbGxvY19jb250YWluZXJfcmVtb3ZlKHBz c2V0LCBwcyk7CisJfQorCXBzc2V0X21heWJlX3JlbW92ZV9wdXJnZV9saXN0KHBzc2V0LCBwcyk7 CisJLyoKKwkgKiBXZSBkb24ndCB1cGRhdGUgcHJlc2VuY2UgaW4gdGhlIGh1Z2lmeSBsaXN0OyB3 ZSB0cnkgdG8ga2VlcCBpdCBGSUZPLAorCSAqIGV2ZW4gaW4gdGhlIHByZXNlbmNlIG9mIG90aGVy IG1ldGFkYXRhIHVwZGF0ZXMuICBXZSdsbCB1cGRhdGUKKwkgKiBwcmVzZW5jZSBhdCB0aGUgZW5k IG9mIHRoZSBtZXRhZGF0YSB1cGRhdGUgaWYgbmVjZXNzYXJ5LgorCSAqLworfQorCit2b2lkCitw c3NldF91cGRhdGVfZW5kKHBzc2V0X3QgKnBzc2V0LCBocGRhdGFfdCAqcHMpIHsKKwlhc3NlcnQo aHBkYXRhX2luX3Bzc2V0X2dldChwcykpOworCWhwZGF0YV91cGRhdGluZ19zZXQocHMsIGZhbHNl KTsKKwlwc3NldF9zdGF0c19pbnNlcnQocHNzZXQsIHBzKTsKKworCS8qCisJICogVGhlIHVwZGF0 ZSBiZWdpbiBzaG91bGQgaGF2ZSByZW1vdmVkIHBzIGZyb20gd2hhdGV2ZXIgYWxsb2MgY29udGFp bmVyCisJICogaXQgd2FzIGluLgorCSAqLworCWFzc2VydCghaHBkYXRhX2luX3Bzc2V0X2FsbG9j X2NvbnRhaW5lcl9nZXQocHMpKTsKKwlpZiAoaHBkYXRhX2FsbG9jX2FsbG93ZWRfZ2V0KHBzKSkg eworCQlwc3NldF9hbGxvY19jb250YWluZXJfaW5zZXJ0KHBzc2V0LCBwcyk7CisJfQorCXBzc2V0 X21heWJlX2luc2VydF9wdXJnZV9saXN0KHBzc2V0LCBwcyk7CisKKwlpZiAoaHBkYXRhX2h1Z2lm eV9hbGxvd2VkX2dldChwcykKKwkgICAgJiYgIWhwZGF0YV9pbl9wc3NldF9odWdpZnlfY29udGFp bmVyX2dldChwcykpIHsKKwkJaHBkYXRhX2luX3Bzc2V0X2h1Z2lmeV9jb250YWluZXJfc2V0KHBz LCB0cnVlKTsKKwkJaHBkYXRhX2h1Z2lmeV9saXN0X2FwcGVuZCgmcHNzZXQtPnRvX2h1Z2lmeSwg cHMpOworCX0gZWxzZSBpZiAoIWhwZGF0YV9odWdpZnlfYWxsb3dlZF9nZXQocHMpCisJICAgICYm IGhwZGF0YV9pbl9wc3NldF9odWdpZnlfY29udGFpbmVyX2dldChwcykpIHsKKwkJaHBkYXRhX2lu X3Bzc2V0X2h1Z2lmeV9jb250YWluZXJfc2V0KHBzLCBmYWxzZSk7CisJCWhwZGF0YV9odWdpZnlf bGlzdF9yZW1vdmUoJnBzc2V0LT50b19odWdpZnksIHBzKTsKKwl9CisJaHBkYXRhX2Fzc2VydF9j b25zaXN0ZW50KHBzKTsKK30KKworaHBkYXRhX3QgKgorcHNzZXRfcGlja19hbGxvYyhwc3NldF90 ICpwc3NldCwgc2l6ZV90IHNpemUpIHsKKwlhc3NlcnQoKHNpemUgJiBQQUdFX01BU0spID09IDAp OworCWFzc2VydChzaXplIDw9IEhVR0VQQUdFKTsKKworCXBzemluZF90IG1pbl9waW5kID0gc3pf cHN6MmluZChzel9wc3pfcXVhbnRpemVfY2VpbChzaXplKSk7CisJcHN6aW5kX3QgcGluZCA9IChw c3ppbmRfdClmYl9mZnMocHNzZXQtPnBhZ2VzbGFiX2JpdG1hcCwgUFNTRVRfTlBTSVpFUywKKwkg ICAgKHNpemVfdCltaW5fcGluZCk7CisJaWYgKHBpbmQgPT0gUFNTRVRfTlBTSVpFUykgeworCQly ZXR1cm4gaHBkYXRhX2VtcHR5X2xpc3RfZmlyc3QoJnBzc2V0LT5lbXB0eSk7CisJfQorCWhwZGF0 YV90ICpwcyA9IGhwZGF0YV9hZ2VfaGVhcF9maXJzdCgmcHNzZXQtPnBhZ2VzbGFic1twaW5kXSk7 CisJaWYgKHBzID09IE5VTEwpIHsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJaHBkYXRhX2Fzc2Vy dF9jb25zaXN0ZW50KHBzKTsKKworCXJldHVybiBwczsKK30KKworaHBkYXRhX3QgKgorcHNzZXRf cGlja19wdXJnZShwc3NldF90ICpwc3NldCkgeworCXNzaXplX3QgaW5kX3NzeiA9IGZiX2Zscyhw c3NldC0+cHVyZ2VfYml0bWFwLCBQU1NFVF9OUFVSR0VfTElTVFMsCisJICAgIFBTU0VUX05QVVJH RV9MSVNUUyAtIDEpOworCWlmIChpbmRfc3N6IDwgMCkgeworCQlyZXR1cm4gTlVMTDsKKwl9CisJ cHN6aW5kX3QgaW5kID0gKHBzemluZF90KWluZF9zc3o7CisJYXNzZXJ0KGluZCA8IFBTU0VUX05Q VVJHRV9MSVNUUyk7CisJaHBkYXRhX3QgKnBzID0gaHBkYXRhX3B1cmdlX2xpc3RfZmlyc3QoJnBz c2V0LT50b19wdXJnZVtpbmRdKTsKKwlhc3NlcnQocHMgIT0gTlVMTCk7CisJcmV0dXJuIHBzOwor fQorCitocGRhdGFfdCAqCitwc3NldF9waWNrX2h1Z2lmeShwc3NldF90ICpwc3NldCkgeworCXJl dHVybiBocGRhdGFfaHVnaWZ5X2xpc3RfZmlyc3QoJnBzc2V0LT50b19odWdpZnkpOworfQorCit2 b2lkCitwc3NldF9pbnNlcnQocHNzZXRfdCAqcHNzZXQsIGhwZGF0YV90ICpwcykgeworCWhwZGF0 YV9pbl9wc3NldF9zZXQocHMsIHRydWUpOworCisJcHNzZXRfc3RhdHNfaW5zZXJ0KHBzc2V0LCBw cyk7CisJaWYgKGhwZGF0YV9hbGxvY19hbGxvd2VkX2dldChwcykpIHsKKwkJcHNzZXRfYWxsb2Nf Y29udGFpbmVyX2luc2VydChwc3NldCwgcHMpOworCX0KKwlwc3NldF9tYXliZV9pbnNlcnRfcHVy Z2VfbGlzdChwc3NldCwgcHMpOworCisJaWYgKGhwZGF0YV9odWdpZnlfYWxsb3dlZF9nZXQocHMp KSB7CisJCWhwZGF0YV9pbl9wc3NldF9odWdpZnlfY29udGFpbmVyX3NldChwcywgdHJ1ZSk7CisJ CWhwZGF0YV9odWdpZnlfbGlzdF9hcHBlbmQoJnBzc2V0LT50b19odWdpZnksIHBzKTsKKwl9Cit9 CisKK3ZvaWQKK3Bzc2V0X3JlbW92ZShwc3NldF90ICpwc3NldCwgaHBkYXRhX3QgKnBzKSB7CisJ aHBkYXRhX2luX3Bzc2V0X3NldChwcywgZmFsc2UpOworCisJcHNzZXRfc3RhdHNfcmVtb3ZlKHBz c2V0LCBwcyk7CisJaWYgKGhwZGF0YV9pbl9wc3NldF9hbGxvY19jb250YWluZXJfZ2V0KHBzKSkg eworCQlwc3NldF9hbGxvY19jb250YWluZXJfcmVtb3ZlKHBzc2V0LCBwcyk7CisJfQorCXBzc2V0 X21heWJlX3JlbW92ZV9wdXJnZV9saXN0KHBzc2V0LCBwcyk7CisJaWYgKGhwZGF0YV9pbl9wc3Nl dF9odWdpZnlfY29udGFpbmVyX2dldChwcykpIHsKKwkJaHBkYXRhX2luX3Bzc2V0X2h1Z2lmeV9j b250YWluZXJfc2V0KHBzLCBmYWxzZSk7CisJCWhwZGF0YV9odWdpZnlfbGlzdF9yZW1vdmUoJnBz c2V0LT50b19odWdpZnksIHBzKTsKKwl9Cit9CgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4z LjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvc3JjL3J0cmVlLmMgYi8zODktZHMtYmFzZS0zLjMuMC1i dWlsZC9qZW1hbGxvYy01LjMuMC9zcmMvcnRyZWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwLi42NDk2YjVhCi0tLSAvZGV2L251bGwKKysrIGIvMzg5LWRzLWJhc2UtMy4zLjAt YnVpbGQvamVtYWxsb2MtNS4zLjAvc3JjL3J0cmVlLmMKQEAgLTAsMCArMSwyNjEgQEAKKyNpbmNs dWRlICJqZW1hbGxvYy9pbnRlcm5hbC9qZW1hbGxvY19wcmVhbWJsZS5oIgorI2luY2x1ZGUgImpl bWFsbG9jL2ludGVybmFsL2plbWFsbG9jX2ludGVybmFsX2luY2x1ZGVzLmgiCisKKyNpbmNsdWRl ICJqZW1hbGxvYy9pbnRlcm5hbC9hc3NlcnQuaCIKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5h bC9tdXRleC5oIgorCisvKgorICogT25seSB0aGUgbW9zdCBzaWduaWZpY2FudCBiaXRzIG9mIGtl eXMgcGFzc2VkIHRvIHJ0cmVlX3tyZWFkLHdyaXRlfSgpIGFyZQorICogdXNlZC4KKyAqLworYm9v bAorcnRyZWVfbmV3KHJ0cmVlX3QgKnJ0cmVlLCBiYXNlX3QgKmJhc2UsIGJvb2wgemVyb2VkKSB7 CisjaWZkZWYgSkVNQUxMT0NfSkVUCisJaWYgKCF6ZXJvZWQpIHsKKwkJbWVtc2V0KHJ0cmVlLCAw LCBzaXplb2YocnRyZWVfdCkpOyAvKiBDbGVhciByb290LiAqLworCX0KKyNlbHNlCisJYXNzZXJ0 KHplcm9lZCk7CisjZW5kaWYKKwlydHJlZS0+YmFzZSA9IGJhc2U7CisKKwlpZiAobWFsbG9jX211 dGV4X2luaXQoJnJ0cmVlLT5pbml0X2xvY2ssICJydHJlZSIsIFdJVE5FU1NfUkFOS19SVFJFRSwK KwkgICAgbWFsbG9jX211dGV4X3JhbmtfZXhjbHVzaXZlKSkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9 CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBydHJlZV9ub2RlX2VsbV90ICoKK3J0cmVl X25vZGVfYWxsb2ModHNkbl90ICp0c2RuLCBydHJlZV90ICpydHJlZSwgc2l6ZV90IG5lbG1zKSB7 CisJcmV0dXJuIChydHJlZV9ub2RlX2VsbV90ICopYmFzZV9hbGxvYyh0c2RuLCBydHJlZS0+YmFz ZSwKKwkgICAgbmVsbXMgKiBzaXplb2YocnRyZWVfbm9kZV9lbG1fdCksIENBQ0hFTElORSk7Cit9 CisKK3N0YXRpYyBydHJlZV9sZWFmX2VsbV90ICoKK3J0cmVlX2xlYWZfYWxsb2ModHNkbl90ICp0 c2RuLCBydHJlZV90ICpydHJlZSwgc2l6ZV90IG5lbG1zKSB7CisJcmV0dXJuIChydHJlZV9sZWFm X2VsbV90ICopYmFzZV9hbGxvYyh0c2RuLCBydHJlZS0+YmFzZSwKKwkgICAgbmVsbXMgKiBzaXpl b2YocnRyZWVfbGVhZl9lbG1fdCksIENBQ0hFTElORSk7Cit9CisKK3N0YXRpYyBydHJlZV9ub2Rl X2VsbV90ICoKK3J0cmVlX25vZGVfaW5pdCh0c2RuX3QgKnRzZG4sIHJ0cmVlX3QgKnJ0cmVlLCB1 bnNpZ25lZCBsZXZlbCwKKyAgICBhdG9taWNfcF90ICplbG1wKSB7CisJbWFsbG9jX211dGV4X2xv Y2sodHNkbiwgJnJ0cmVlLT5pbml0X2xvY2spOworCS8qCisJICogSWYgKmVsbXAgaXMgbm9uLW51 bGwsIHRoZW4gaXQgd2FzIGluaXRpYWxpemVkIHdpdGggdGhlIGluaXQgbG9jaworCSAqIGhlbGQs IHNvIHdlIGNhbiBnZXQgYnkgd2l0aCAncmVsYXhlZCcgaGVyZS4KKwkgKi8KKwlydHJlZV9ub2Rl X2VsbV90ICpub2RlID0gYXRvbWljX2xvYWRfcChlbG1wLCBBVE9NSUNfUkVMQVhFRCk7CisJaWYg KG5vZGUgPT0gTlVMTCkgeworCQlub2RlID0gcnRyZWVfbm9kZV9hbGxvYyh0c2RuLCBydHJlZSwg WlUoMSkgPDwKKwkJICAgIHJ0cmVlX2xldmVsc1tsZXZlbF0uYml0cyk7CisJCWlmIChub2RlID09 IE5VTEwpIHsKKwkJCW1hbGxvY19tdXRleF91bmxvY2sodHNkbiwgJnJ0cmVlLT5pbml0X2xvY2sp OworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwkJLyoKKwkJICogRXZlbiB0aG91Z2ggd2UgaG9sZCB0 aGUgbG9jaywgYSBsYXRlciByZWFkZXIgbWlnaHQgbm90OyB3ZQorCQkgKiBuZWVkIHJlbGVhc2Ug c2VtYW50aWNzLgorCQkgKi8KKwkJYXRvbWljX3N0b3JlX3AoZWxtcCwgbm9kZSwgQVRPTUlDX1JF TEVBU0UpOworCX0KKwltYWxsb2NfbXV0ZXhfdW5sb2NrKHRzZG4sICZydHJlZS0+aW5pdF9sb2Nr KTsKKworCXJldHVybiBub2RlOworfQorCitzdGF0aWMgcnRyZWVfbGVhZl9lbG1fdCAqCitydHJl ZV9sZWFmX2luaXQodHNkbl90ICp0c2RuLCBydHJlZV90ICpydHJlZSwgYXRvbWljX3BfdCAqZWxt cCkgeworCW1hbGxvY19tdXRleF9sb2NrKHRzZG4sICZydHJlZS0+aW5pdF9sb2NrKTsKKwkvKgor CSAqIElmICplbG1wIGlzIG5vbi1udWxsLCB0aGVuIGl0IHdhcyBpbml0aWFsaXplZCB3aXRoIHRo ZSBpbml0IGxvY2sKKwkgKiBoZWxkLCBzbyB3ZSBjYW4gZ2V0IGJ5IHdpdGggJ3JlbGF4ZWQnIGhl cmUuCisJICovCisJcnRyZWVfbGVhZl9lbG1fdCAqbGVhZiA9IGF0b21pY19sb2FkX3AoZWxtcCwg QVRPTUlDX1JFTEFYRUQpOworCWlmIChsZWFmID09IE5VTEwpIHsKKwkJbGVhZiA9IHJ0cmVlX2xl YWZfYWxsb2ModHNkbiwgcnRyZWUsIFpVKDEpIDw8CisJCSAgICBydHJlZV9sZXZlbHNbUlRSRUVf SEVJR0hULTFdLmJpdHMpOworCQlpZiAobGVhZiA9PSBOVUxMKSB7CisJCQltYWxsb2NfbXV0ZXhf dW5sb2NrKHRzZG4sICZydHJlZS0+aW5pdF9sb2NrKTsKKwkJCXJldHVybiBOVUxMOworCQl9CisJ CS8qCisJCSAqIEV2ZW4gdGhvdWdoIHdlIGhvbGQgdGhlIGxvY2ssIGEgbGF0ZXIgcmVhZGVyIG1p Z2h0IG5vdDsgd2UKKwkJICogbmVlZCByZWxlYXNlIHNlbWFudGljcy4KKwkJICovCisJCWF0b21p Y19zdG9yZV9wKGVsbXAsIGxlYWYsIEFUT01JQ19SRUxFQVNFKTsKKwl9CisJbWFsbG9jX211dGV4 X3VubG9jayh0c2RuLCAmcnRyZWUtPmluaXRfbG9jayk7CisKKwlyZXR1cm4gbGVhZjsKK30KKwor c3RhdGljIGJvb2wKK3J0cmVlX25vZGVfdmFsaWQocnRyZWVfbm9kZV9lbG1fdCAqbm9kZSkgewor CXJldHVybiAoKHVpbnRwdHJfdClub2RlICE9ICh1aW50cHRyX3QpMCk7Cit9CisKK3N0YXRpYyBi b29sCitydHJlZV9sZWFmX3ZhbGlkKHJ0cmVlX2xlYWZfZWxtX3QgKmxlYWYpIHsKKwlyZXR1cm4g KCh1aW50cHRyX3QpbGVhZiAhPSAodWludHB0cl90KTApOworfQorCitzdGF0aWMgcnRyZWVfbm9k ZV9lbG1fdCAqCitydHJlZV9jaGlsZF9ub2RlX3RyeXJlYWQocnRyZWVfbm9kZV9lbG1fdCAqZWxt LCBib29sIGRlcGVuZGVudCkgeworCXJ0cmVlX25vZGVfZWxtX3QgKm5vZGU7CisKKwlpZiAoZGVw ZW5kZW50KSB7CisJCW5vZGUgPSAocnRyZWVfbm9kZV9lbG1fdCAqKWF0b21pY19sb2FkX3AoJmVs bS0+Y2hpbGQsCisJCSAgICBBVE9NSUNfUkVMQVhFRCk7CisJfSBlbHNlIHsKKwkJbm9kZSA9IChy dHJlZV9ub2RlX2VsbV90ICopYXRvbWljX2xvYWRfcCgmZWxtLT5jaGlsZCwKKwkJICAgIEFUT01J Q19BQ1FVSVJFKTsKKwl9CisKKwlhc3NlcnQoIWRlcGVuZGVudCB8fCBub2RlICE9IE5VTEwpOwor CXJldHVybiBub2RlOworfQorCitzdGF0aWMgcnRyZWVfbm9kZV9lbG1fdCAqCitydHJlZV9jaGls ZF9ub2RlX3JlYWQodHNkbl90ICp0c2RuLCBydHJlZV90ICpydHJlZSwgcnRyZWVfbm9kZV9lbG1f dCAqZWxtLAorICAgIHVuc2lnbmVkIGxldmVsLCBib29sIGRlcGVuZGVudCkgeworCXJ0cmVlX25v ZGVfZWxtX3QgKm5vZGU7CisKKwlub2RlID0gcnRyZWVfY2hpbGRfbm9kZV90cnlyZWFkKGVsbSwg ZGVwZW5kZW50KTsKKwlpZiAoIWRlcGVuZGVudCAmJiB1bmxpa2VseSghcnRyZWVfbm9kZV92YWxp ZChub2RlKSkpIHsKKwkJbm9kZSA9IHJ0cmVlX25vZGVfaW5pdCh0c2RuLCBydHJlZSwgbGV2ZWwg KyAxLCAmZWxtLT5jaGlsZCk7CisJfQorCWFzc2VydCghZGVwZW5kZW50IHx8IG5vZGUgIT0gTlVM TCk7CisJcmV0dXJuIG5vZGU7Cit9CisKK3N0YXRpYyBydHJlZV9sZWFmX2VsbV90ICoKK3J0cmVl X2NoaWxkX2xlYWZfdHJ5cmVhZChydHJlZV9ub2RlX2VsbV90ICplbG0sIGJvb2wgZGVwZW5kZW50 KSB7CisJcnRyZWVfbGVhZl9lbG1fdCAqbGVhZjsKKworCWlmIChkZXBlbmRlbnQpIHsKKwkJbGVh ZiA9IChydHJlZV9sZWFmX2VsbV90ICopYXRvbWljX2xvYWRfcCgmZWxtLT5jaGlsZCwKKwkJICAg IEFUT01JQ19SRUxBWEVEKTsKKwl9IGVsc2UgeworCQlsZWFmID0gKHJ0cmVlX2xlYWZfZWxtX3Qg KilhdG9taWNfbG9hZF9wKCZlbG0tPmNoaWxkLAorCQkgICAgQVRPTUlDX0FDUVVJUkUpOworCX0K KworCWFzc2VydCghZGVwZW5kZW50IHx8IGxlYWYgIT0gTlVMTCk7CisJcmV0dXJuIGxlYWY7Cit9 CisKK3N0YXRpYyBydHJlZV9sZWFmX2VsbV90ICoKK3J0cmVlX2NoaWxkX2xlYWZfcmVhZCh0c2Ru X3QgKnRzZG4sIHJ0cmVlX3QgKnJ0cmVlLCBydHJlZV9ub2RlX2VsbV90ICplbG0sCisgICAgdW5z aWduZWQgbGV2ZWwsIGJvb2wgZGVwZW5kZW50KSB7CisJcnRyZWVfbGVhZl9lbG1fdCAqbGVhZjsK KworCWxlYWYgPSBydHJlZV9jaGlsZF9sZWFmX3RyeXJlYWQoZWxtLCBkZXBlbmRlbnQpOworCWlm ICghZGVwZW5kZW50ICYmIHVubGlrZWx5KCFydHJlZV9sZWFmX3ZhbGlkKGxlYWYpKSkgeworCQls ZWFmID0gcnRyZWVfbGVhZl9pbml0KHRzZG4sIHJ0cmVlLCAmZWxtLT5jaGlsZCk7CisJfQorCWFz c2VydCghZGVwZW5kZW50IHx8IGxlYWYgIT0gTlVMTCk7CisJcmV0dXJuIGxlYWY7Cit9CisKK3J0 cmVlX2xlYWZfZWxtX3QgKgorcnRyZWVfbGVhZl9lbG1fbG9va3VwX2hhcmQodHNkbl90ICp0c2Ru LCBydHJlZV90ICpydHJlZSwgcnRyZWVfY3R4X3QgKnJ0cmVlX2N0eCwKKyAgICB1aW50cHRyX3Qg a2V5LCBib29sIGRlcGVuZGVudCwgYm9vbCBpbml0X21pc3NpbmcpIHsKKwlydHJlZV9ub2RlX2Vs bV90ICpub2RlOworCXJ0cmVlX2xlYWZfZWxtX3QgKmxlYWY7CisjaWYgUlRSRUVfSEVJR0hUID4g MQorCW5vZGUgPSBydHJlZS0+cm9vdDsKKyNlbHNlCisJbGVhZiA9IHJ0cmVlLT5yb290OworI2Vu ZGlmCisKKwlpZiAoY29uZmlnX2RlYnVnKSB7CisJCXVpbnRwdHJfdCBsZWFma2V5ID0gcnRyZWVf bGVhZmtleShrZXkpOworCQlmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgUlRSRUVfQ1RYX05DQUNI RTsgaSsrKSB7CisJCQlhc3NlcnQocnRyZWVfY3R4LT5jYWNoZVtpXS5sZWFma2V5ICE9IGxlYWZr ZXkpOworCQl9CisJCWZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBSVFJFRV9DVFhfTkNBQ0hFX0wy OyBpKyspIHsKKwkJCWFzc2VydChydHJlZV9jdHgtPmwyX2NhY2hlW2ldLmxlYWZrZXkgIT0gbGVh ZmtleSk7CisJCX0KKwl9CisKKyNkZWZpbmUgUlRSRUVfR0VUX0NISUxEKGxldmVsKSB7CQkJCQlc CisJCWFzc2VydChsZXZlbCA8IFJUUkVFX0hFSUdIVC0xKTsJCQkJXAorCQlpZiAobGV2ZWwgIT0g MCAmJiAhZGVwZW5kZW50ICYmCQkJCVwKKwkJICAgIHVubGlrZWx5KCFydHJlZV9ub2RlX3ZhbGlk KG5vZGUpKSkgewkJXAorCQkJcmV0dXJuIE5VTEw7CQkJCQlcCisJCX0JCQkJCQkJXAorCQl1aW50 cHRyX3Qgc3Via2V5ID0gcnRyZWVfc3Via2V5KGtleSwgbGV2ZWwpOwkJXAorCQlpZiAobGV2ZWwg KyAyIDwgUlRSRUVfSEVJR0hUKSB7CQkJCVwKKwkJCW5vZGUgPSBpbml0X21pc3NpbmcgPwkJCQlc CisJCQkgICAgcnRyZWVfY2hpbGRfbm9kZV9yZWFkKHRzZG4sIHJ0cmVlLAkJXAorCQkJICAgICZu b2RlW3N1YmtleV0sIGxldmVsLCBkZXBlbmRlbnQpIDoJCVwKKwkJCSAgICBydHJlZV9jaGlsZF9u b2RlX3RyeXJlYWQoJm5vZGVbc3Via2V5XSwJXAorCQkJICAgIGRlcGVuZGVudCk7CQkJCQlcCisJ CX0gZWxzZSB7CQkJCQkJXAorCQkJbGVhZiA9IGluaXRfbWlzc2luZyA/CQkJCVwKKwkJCSAgICBy dHJlZV9jaGlsZF9sZWFmX3JlYWQodHNkbiwgcnRyZWUsCQlcCisJCQkgICAgJm5vZGVbc3Via2V5 XSwgbGV2ZWwsIGRlcGVuZGVudCkgOgkJXAorCQkJICAgIHJ0cmVlX2NoaWxkX2xlYWZfdHJ5cmVh ZCgmbm9kZVtzdWJrZXldLAlcCisJCQkgICAgZGVwZW5kZW50KTsJCQkJCVwKKwkJfQkJCQkJCQlc CisJfQorCS8qCisJICogQ2FjaGUgcmVwbGFjZW1lbnQgdXBvbiBoYXJkIGxvb2t1cCAoaS5lLiBM MSAmIEwyIHJ0cmVlIGNhY2hlIG1pc3MpOgorCSAqICgxKSBldmljdCBsYXN0IGVudHJ5IGluIEwy IGNhY2hlOyAoMikgbW92ZSB0aGUgY29sbGlzaW9uIHNsb3QgZnJvbSBMMQorCSAqIGNhY2hlIGRv d24gdG8gTDI7IGFuZCAzKSBmaWxsIEwxLgorCSAqLworI2RlZmluZSBSVFJFRV9HRVRfTEVBRihs ZXZlbCkgewkJCQkJCVwKKwkJYXNzZXJ0KGxldmVsID09IFJUUkVFX0hFSUdIVC0xKTsJCQlcCisJ CWlmICghZGVwZW5kZW50ICYmIHVubGlrZWx5KCFydHJlZV9sZWFmX3ZhbGlkKGxlYWYpKSkgewlc CisJCQlyZXR1cm4gTlVMTDsJCQkJCVwKKwkJfQkJCQkJCQlcCisJCWlmIChSVFJFRV9DVFhfTkNB Q0hFX0wyID4gMSkgewkJCQlcCisJCQltZW1tb3ZlKCZydHJlZV9jdHgtPmwyX2NhY2hlWzFdLAkJ XAorCQkJICAgICZydHJlZV9jdHgtPmwyX2NhY2hlWzBdLAkJCVwKKwkJCSAgICBzaXplb2YocnRy ZWVfY3R4X2NhY2hlX2VsbV90KSAqCQlcCisJCQkgICAgKFJUUkVFX0NUWF9OQ0FDSEVfTDIgLSAx KSk7CQkJXAorCQl9CQkJCQkJCVwKKwkJc2l6ZV90IHNsb3QgPSBydHJlZV9jYWNoZV9kaXJlY3Rf bWFwKGtleSk7CQlcCisJCXJ0cmVlX2N0eC0+bDJfY2FjaGVbMF0ubGVhZmtleSA9CQkJXAorCQkg ICAgcnRyZWVfY3R4LT5jYWNoZVtzbG90XS5sZWFma2V5OwkJCVwKKwkJcnRyZWVfY3R4LT5sMl9j YWNoZVswXS5sZWFmID0JCQkJXAorCQkgICAgcnRyZWVfY3R4LT5jYWNoZVtzbG90XS5sZWFmOwkJ CVwKKwkJdWludHB0cl90IGxlYWZrZXkgPSBydHJlZV9sZWFma2V5KGtleSk7CQkJXAorCQlydHJl ZV9jdHgtPmNhY2hlW3Nsb3RdLmxlYWZrZXkgPSBsZWFma2V5OwkJXAorCQlydHJlZV9jdHgtPmNh Y2hlW3Nsb3RdLmxlYWYgPSBsZWFmOwkJCVwKKwkJdWludHB0cl90IHN1YmtleSA9IHJ0cmVlX3N1 YmtleShrZXksIGxldmVsKTsJCVwKKwkJcmV0dXJuICZsZWFmW3N1YmtleV07CQkJCQlcCisJfQor CWlmIChSVFJFRV9IRUlHSFQgPiAxKSB7CisJCVJUUkVFX0dFVF9DSElMRCgwKQorCX0KKwlpZiAo UlRSRUVfSEVJR0hUID4gMikgeworCQlSVFJFRV9HRVRfQ0hJTEQoMSkKKwl9CisJaWYgKFJUUkVF X0hFSUdIVCA+IDMpIHsKKwkJZm9yICh1bnNpZ25lZCBpID0gMjsgaSA8IFJUUkVFX0hFSUdIVC0x OyBpKyspIHsKKwkJCVJUUkVFX0dFVF9DSElMRChpKQorCQl9CisJfQorCVJUUkVFX0dFVF9MRUFG KFJUUkVFX0hFSUdIVC0xKQorI3VuZGVmIFJUUkVFX0dFVF9DSElMRAorI3VuZGVmIFJUUkVFX0dF VF9MRUFGCisJbm90X3JlYWNoZWQoKTsKK30KKwordm9pZAorcnRyZWVfY3R4X2RhdGFfaW5pdChy dHJlZV9jdHhfdCAqY3R4KSB7CisJZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IFJUUkVFX0NUWF9O Q0FDSEU7IGkrKykgeworCQlydHJlZV9jdHhfY2FjaGVfZWxtX3QgKmNhY2hlID0gJmN0eC0+Y2Fj aGVbaV07CisJCWNhY2hlLT5sZWFma2V5ID0gUlRSRUVfTEVBRktFWV9JTlZBTElEOworCQljYWNo ZS0+bGVhZiA9IE5VTEw7CisJfQorCWZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBSVFJFRV9DVFhf TkNBQ0hFX0wyOyBpKyspIHsKKwkJcnRyZWVfY3R4X2NhY2hlX2VsbV90ICpjYWNoZSA9ICZjdHgt PmwyX2NhY2hlW2ldOworCQljYWNoZS0+bGVhZmtleSA9IFJUUkVFX0xFQUZLRVlfSU5WQUxJRDsK KwkJY2FjaGUtPmxlYWYgPSBOVUxMOworCX0KK30KCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0z LjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9zcmMvc2FmZXR5X2NoZWNrLmMgYi8zODktZHMtYmFz ZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9zcmMvc2FmZXR5X2NoZWNrLmMKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjA5ZmRkYQotLS0gL2Rldi9udWxsCisrKyBiLzM4 OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3NyYy9zYWZldHlfY2hlY2suYwpA QCAtMCwwICsxLDM2IEBACisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvamVtYWxsb2NfcHJl YW1ibGUuaCIKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9qZW1hbGxvY19pbnRlcm5hbF9p bmNsdWRlcy5oIgorCitzdGF0aWMgc2FmZXR5X2NoZWNrX2Fib3J0X2hvb2tfdCBzYWZldHlfY2hl Y2tfYWJvcnQ7CisKK3ZvaWQgc2FmZXR5X2NoZWNrX2ZhaWxfc2l6ZWRfZGVhbGxvYyhib29sIGN1 cnJlbnRfZGVhbGxvYywgY29uc3Qgdm9pZCAqcHRyLAorICAgIHNpemVfdCB0cnVlX3NpemUsIHNp emVfdCBpbnB1dF9zaXplKSB7CisJY2hhciAqc3JjID0gY3VycmVudF9kZWFsbG9jID8gInRoZSBj dXJyZW50IHBvaW50ZXIgYmVpbmcgZnJlZWQiIDoKKwkgICAgImluIHRocmVhZCBjYWNoZSwgcG9z c2libHkgZnJvbSBwcmV2aW91cyBkZWFsbG9jYXRpb25zIjsKKworCXNhZmV0eV9jaGVja19mYWls KCI8amVtYWxsb2M+OiBzaXplIG1pc21hdGNoIGRldGVjdGVkICh0cnVlIHNpemUgJXp1ICIKKwkg ICAgInZzIGlucHV0IHNpemUgJXp1KSwgbGlrZWx5IGNhdXNlZCBieSBhcHBsaWNhdGlvbiBzaXpl ZCAiCisJICAgICJkZWFsbG9jYXRpb24gYnVncyAoc291cmNlIGFkZHJlc3M6ICVwLCAlcykuIFN1 Z2dlc3QgYnVpbGRpbmcgd2l0aCAiCisJICAgICItLWVuYWJsZS1kZWJ1ZyBvciBhZGRyZXNzIHNh bml0aXplciBmb3IgZGVidWdnaW5nLiBBYm9ydC5cbiIsCisJICAgIHRydWVfc2l6ZSwgaW5wdXRf c2l6ZSwgcHRyLCBzcmMpOworfQorCit2b2lkIHNhZmV0eV9jaGVja19zZXRfYWJvcnQoc2FmZXR5 X2NoZWNrX2Fib3J0X2hvb2tfdCBhYm9ydF9mbikgeworCXNhZmV0eV9jaGVja19hYm9ydCA9IGFi b3J0X2ZuOworfQorCit2b2lkIHNhZmV0eV9jaGVja19mYWlsKGNvbnN0IGNoYXIgKmZvcm1hdCwg Li4uKSB7CisJY2hhciBidWZbTUFMTE9DX1BSSU5URl9CVUZTSVpFXTsKKworCXZhX2xpc3QgYXA7 CisJdmFfc3RhcnQoYXAsIGZvcm1hdCk7CisJbWFsbG9jX3ZzbnByaW50ZihidWYsIE1BTExPQ19Q UklOVEZfQlVGU0laRSwgZm9ybWF0LCBhcCk7CisJdmFfZW5kKGFwKTsKKworCWlmIChzYWZldHlf Y2hlY2tfYWJvcnQgPT0gTlVMTCkgeworCQltYWxsb2Nfd3JpdGUoYnVmKTsKKwkJYWJvcnQoKTsK Kwl9IGVsc2UgeworCQlzYWZldHlfY2hlY2tfYWJvcnQoYnVmKTsKKwl9Cit9CgpkaWZmIC0tZ2l0 IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvc3JjL3Nhbi5jIGIvMzg5 LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvc3JjL3Nhbi5jCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlNTEyOTEKLS0tIC9kZXYvbnVsbAorKysgYi8zODkt ZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9zcmMvc2FuLmMKQEAgLTAsMCArMSwy MDggQEAKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9qZW1hbGxvY19wcmVhbWJsZS5oIgor I2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2plbWFsbG9jX2ludGVybmFsX2luY2x1ZGVzLmgi CisKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9hc3NlcnQuaCIKKyNpbmNsdWRlICJqZW1h bGxvYy9pbnRlcm5hbC9laG9va3MuaCIKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9zYW4u aCIKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC90c2QuaCIKKworLyogVGhlIHNhbml0aXpl ciBvcHRpb25zLiAqLworc2l6ZV90IG9wdF9zYW5fZ3VhcmRfbGFyZ2UgPSBTQU5fR1VBUkRfTEFS R0VfRVZFUllfTl9FWFRFTlRTX0RFRkFVTFQ7CitzaXplX3Qgb3B0X3Nhbl9ndWFyZF9zbWFsbCA9 IFNBTl9HVUFSRF9TTUFMTF9FVkVSWV9OX0VYVEVOVFNfREVGQVVMVDsKKworLyogQWxpZ25lZCAo LTEgaXMgb2ZmKSBwdHJzIHdpbGwgYmUganVua2VkICYgc3Rhc2hlZCBvbiBkZWFsbG9jLiAqLwor c3NpemVfdCBvcHRfbGdfc2FuX3VhZl9hbGlnbiA9IFNBTl9MR19VQUZfQUxJR05fREVGQVVMVDsK KworLyoKKyAqICBJbml0aWFsaXplZCBpbiBzYW5faW5pdCgpLiAgV2hlbiBkaXNhYmxlZCwgdGhl IG1hc2sgaXMgc2V0IHRvICh1aW50cHRyX3QpLTEKKyAqICB0byBhbHdheXMgZmFpbCB0aGUgbm9u ZmFzdF9hbGlnbiBjaGVjay4KKyAqLwordWludHB0cl90IHNhbl9jYWNoZV9iaW5fbm9uZmFzdF9t YXNrID0gU0FOX0NBQ0hFX0JJTl9OT05GQVNUX01BU0tfREVGQVVMVDsKKworc3RhdGljIGlubGlu ZSB2b2lkCitzYW5fZmluZF9ndWFyZGVkX2FkZHIoZWRhdGFfdCAqZWRhdGEsIHVpbnRwdHJfdCAq Z3VhcmQxLCB1aW50cHRyX3QgKmd1YXJkMiwKKyAgICB1aW50cHRyX3QgKmFkZHIsIHNpemVfdCBz aXplLCBib29sIGxlZnQsIGJvb2wgcmlnaHQpIHsKKwlhc3NlcnQoIWVkYXRhX2d1YXJkZWRfZ2V0 KGVkYXRhKSk7CisJYXNzZXJ0KHNpemUgJSBQQUdFID09IDApOworCSphZGRyID0gKHVpbnRwdHJf dCllZGF0YV9iYXNlX2dldChlZGF0YSk7CisJaWYgKGxlZnQpIHsKKwkJKmd1YXJkMSA9ICphZGRy OworCQkqYWRkciArPSBTQU5fUEFHRV9HVUFSRDsKKwl9IGVsc2UgeworCQkqZ3VhcmQxID0gMDsK Kwl9CisKKwlpZiAocmlnaHQpIHsKKwkJKmd1YXJkMiA9ICphZGRyICsgc2l6ZTsKKwl9IGVsc2Ug eworCQkqZ3VhcmQyID0gMDsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorc2FuX2ZpbmRf dW5ndWFyZGVkX2FkZHIoZWRhdGFfdCAqZWRhdGEsIHVpbnRwdHJfdCAqZ3VhcmQxLCB1aW50cHRy X3QgKmd1YXJkMiwKKyAgICB1aW50cHRyX3QgKmFkZHIsIHNpemVfdCBzaXplLCBib29sIGxlZnQs IGJvb2wgcmlnaHQpIHsKKwlhc3NlcnQoZWRhdGFfZ3VhcmRlZF9nZXQoZWRhdGEpKTsKKwlhc3Nl cnQoc2l6ZSAlIFBBR0UgPT0gMCk7CisJKmFkZHIgPSAodWludHB0cl90KWVkYXRhX2Jhc2VfZ2V0 KGVkYXRhKTsKKwlpZiAocmlnaHQpIHsKKwkJKmd1YXJkMiA9ICphZGRyICsgc2l6ZTsKKwl9IGVs c2UgeworCQkqZ3VhcmQyID0gMDsKKwl9CisKKwlpZiAobGVmdCkgeworCQkqZ3VhcmQxID0gKmFk ZHIgLSBTQU5fUEFHRV9HVUFSRDsKKwkJYXNzZXJ0KCpndWFyZDEgIT0gMCk7CisJCSphZGRyID0g Kmd1YXJkMTsKKwl9IGVsc2UgeworCQkqZ3VhcmQxID0gMDsKKwl9Cit9CisKK3ZvaWQKK3Nhbl9n dWFyZF9wYWdlcyh0c2RuX3QgKnRzZG4sIGVob29rc190ICplaG9va3MsIGVkYXRhX3QgKmVkYXRh LCBlbWFwX3QgKmVtYXAsCisgICAgYm9vbCBsZWZ0LCBib29sIHJpZ2h0LCBib29sIHJlbWFwKSB7 CisJYXNzZXJ0KGxlZnQgfHwgcmlnaHQpOworCWlmIChyZW1hcCkgeworCQllbWFwX2RlcmVnaXN0 ZXJfYm91bmRhcnkodHNkbiwgZW1hcCwgZWRhdGEpOworCX0KKworCXNpemVfdCBzaXplX3dpdGhf Z3VhcmRzID0gZWRhdGFfc2l6ZV9nZXQoZWRhdGEpOworCXNpemVfdCB1c2l6ZSA9IChsZWZ0ICYm IHJpZ2h0KQorCSAgICA/IHNhbl90d29fc2lkZV91bmd1YXJkZWRfc3ooc2l6ZV93aXRoX2d1YXJk cykKKwkgICAgOiBzYW5fb25lX3NpZGVfdW5ndWFyZGVkX3N6KHNpemVfd2l0aF9ndWFyZHMpOwor CisJdWludHB0cl90IGd1YXJkMSwgZ3VhcmQyLCBhZGRyOworCXNhbl9maW5kX2d1YXJkZWRfYWRk cihlZGF0YSwgJmd1YXJkMSwgJmd1YXJkMiwgJmFkZHIsIHVzaXplLCBsZWZ0LAorCSAgICByaWdo dCk7CisKKwlhc3NlcnQoZWRhdGFfc3RhdGVfZ2V0KGVkYXRhKSA9PSBleHRlbnRfc3RhdGVfYWN0 aXZlKTsKKwllaG9va3NfZ3VhcmQodHNkbiwgZWhvb2tzLCAodm9pZCAqKWd1YXJkMSwgKHZvaWQg KilndWFyZDIpOworCisJLyogVXBkYXRlIHRoZSBndWFyZGVkIGFkZHIgYW5kIHVzYWJsZSBzaXpl IG9mIHRoZSBlZGF0YS4gKi8KKwllZGF0YV9zaXplX3NldChlZGF0YSwgdXNpemUpOworCWVkYXRh X2FkZHJfc2V0KGVkYXRhLCAodm9pZCAqKWFkZHIpOworCWVkYXRhX2d1YXJkZWRfc2V0KGVkYXRh LCB0cnVlKTsKKworCWlmIChyZW1hcCkgeworCQllbWFwX3JlZ2lzdGVyX2JvdW5kYXJ5KHRzZG4s IGVtYXAsIGVkYXRhLCBTQ19OU0laRVMsCisJCSAgICAvKiBzbGFiICovIGZhbHNlKTsKKwl9Cit9 CisKK3N0YXRpYyB2b2lkCitzYW5fdW5ndWFyZF9wYWdlc19pbXBsKHRzZG5fdCAqdHNkbiwgZWhv b2tzX3QgKmVob29rcywgZWRhdGFfdCAqZWRhdGEsCisgICAgZW1hcF90ICplbWFwLCBib29sIGxl ZnQsIGJvb2wgcmlnaHQsIGJvb2wgcmVtYXApIHsKKwlhc3NlcnQobGVmdCB8fCByaWdodCk7CisJ LyogUmVtb3ZlIHRoZSBpbm5lciBib3VuZGFyeSB3aGljaCBubyBsb25nZXIgZXhpc3RzLiAqLwor CWlmIChyZW1hcCkgeworCQlhc3NlcnQoZWRhdGFfc3RhdGVfZ2V0KGVkYXRhKSA9PSBleHRlbnRf c3RhdGVfYWN0aXZlKTsKKwkJZW1hcF9kZXJlZ2lzdGVyX2JvdW5kYXJ5KHRzZG4sIGVtYXAsIGVk YXRhKTsKKwl9IGVsc2UgeworCQlhc3NlcnQoZWRhdGFfc3RhdGVfZ2V0KGVkYXRhKSA9PSBleHRl bnRfc3RhdGVfcmV0YWluZWQpOworCX0KKworCXNpemVfdCBzaXplID0gZWRhdGFfc2l6ZV9nZXQo ZWRhdGEpOworCXNpemVfdCBzaXplX3dpdGhfZ3VhcmRzID0gKGxlZnQgJiYgcmlnaHQpCisJICAg ID8gc2FuX3R3b19zaWRlX2d1YXJkZWRfc3ooc2l6ZSkKKwkgICAgOiBzYW5fb25lX3NpZGVfZ3Vh cmRlZF9zeihzaXplKTsKKworCXVpbnRwdHJfdCBndWFyZDEsIGd1YXJkMiwgYWRkcjsKKwlzYW5f ZmluZF91bmd1YXJkZWRfYWRkcihlZGF0YSwgJmd1YXJkMSwgJmd1YXJkMiwgJmFkZHIsIHNpemUs IGxlZnQsCisJICAgIHJpZ2h0KTsKKworCWVob29rc191bmd1YXJkKHRzZG4sIGVob29rcywgKHZv aWQgKilndWFyZDEsICh2b2lkICopZ3VhcmQyKTsKKworCS8qIFVwZGF0ZSB0aGUgdHJ1ZSBhZGRy IGFuZCB1c2FibGUgc2l6ZSBvZiB0aGUgZWRhdGEuICovCisJZWRhdGFfc2l6ZV9zZXQoZWRhdGEs IHNpemVfd2l0aF9ndWFyZHMpOworCWVkYXRhX2FkZHJfc2V0KGVkYXRhLCAodm9pZCAqKWFkZHIp OworCWVkYXRhX2d1YXJkZWRfc2V0KGVkYXRhLCBmYWxzZSk7CisKKwkvKgorCSAqIFRoZW4gcmUt cmVnaXN0ZXIgdGhlIG91dGVyIGJvdW5kYXJ5IGluY2x1ZGluZyB0aGUgZ3VhcmRzLCBpZgorCSAq IHJlcXVlc3RlZC4KKwkgKi8KKwlpZiAocmVtYXApIHsKKwkJZW1hcF9yZWdpc3Rlcl9ib3VuZGFy eSh0c2RuLCBlbWFwLCBlZGF0YSwgU0NfTlNJWkVTLAorCQkgICAgLyogc2xhYiAqLyBmYWxzZSk7 CisJfQorfQorCit2b2lkCitzYW5fdW5ndWFyZF9wYWdlcyh0c2RuX3QgKnRzZG4sIGVob29rc190 ICplaG9va3MsIGVkYXRhX3QgKmVkYXRhLAorICAgIGVtYXBfdCAqZW1hcCwgYm9vbCBsZWZ0LCBi b29sIHJpZ2h0KSB7CisJc2FuX3VuZ3VhcmRfcGFnZXNfaW1wbCh0c2RuLCBlaG9va3MsIGVkYXRh LCBlbWFwLCBsZWZ0LCByaWdodCwKKwkgICAgLyogcmVtYXAgKi8gdHJ1ZSk7Cit9CisKK3ZvaWQK K3Nhbl91bmd1YXJkX3BhZ2VzX3ByZV9kZXN0cm95KHRzZG5fdCAqdHNkbiwgZWhvb2tzX3QgKmVo b29rcywgZWRhdGFfdCAqZWRhdGEsCisgICAgZW1hcF90ICplbWFwKSB7CisJZW1hcF9hc3NlcnRf bm90X21hcHBlZCh0c2RuLCBlbWFwLCBlZGF0YSk7CisJLyoKKwkgKiBXZSBkb24ndCB3YW50IHRv IHRvdWNoIHRoZSBlbWFwIG9mIGFib3V0IHRvIGJlIGRlc3Ryb3llZCBleHRlbnRzLCBhcworCSAq IHRoZXkgaGF2ZSBiZWVuIHVubWFwcGVkIHVwb24gZXZpY3Rpb24gZnJvbSB0aGUgcmV0YWluZWQg ZWNhY2hlLiBBbHNvLAorCSAqIHdlIHVuZ3VhcmQgdGhlIGV4dGVudHMgdG8gdGhlIHJpZ2h0LCBi ZWNhdXNlIHJldGFpbmVkIGV4dGVudHMgb25seQorCSAqIG93biB0aGVpciByaWdodCBndWFyZCBw YWdlIHBlciBzYW5fYnVtcF9hbGxvYydzIGxvZ2ljLgorCSAqLworCSBzYW5fdW5ndWFyZF9wYWdl c19pbXBsKHRzZG4sIGVob29rcywgZWRhdGEsIGVtYXAsIC8qIGxlZnQgKi8gZmFsc2UsCisJICAg IC8qIHJpZ2h0ICovIHRydWUsIC8qIHJlbWFwICovIGZhbHNlKTsKK30KKworc3RhdGljIGJvb2wK K3Nhbl9zdGFzaGVkX2NvcnJ1cHRlZCh2b2lkICpwdHIsIHNpemVfdCBzaXplKSB7CisJaWYgKHNh bl9qdW5rX3B0cl9zaG91bGRfc2xvdygpKSB7CisJCWZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6 ZTsgaSsrKSB7CisJCQlpZiAoKChjaGFyICopcHRyKVtpXSAhPSAoY2hhcil1YWZfZGV0ZWN0X2p1 bmspIHsKKwkJCQlyZXR1cm4gdHJ1ZTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gZmFsc2U7CisJfQor CisJdm9pZCAqZmlyc3QsICptaWQsICpsYXN0OworCXNhbl9qdW5rX3B0cl9sb2NhdGlvbnMocHRy LCBzaXplLCAmZmlyc3QsICZtaWQsICZsYXN0KTsKKwlpZiAoKih1aW50cHRyX3QgKilmaXJzdCAh PSB1YWZfZGV0ZWN0X2p1bmsgfHwKKwkgICAgKih1aW50cHRyX3QgKiltaWQgIT0gdWFmX2RldGVj dF9qdW5rIHx8CisJICAgICoodWludHB0cl90ICopbGFzdCAhPSB1YWZfZGV0ZWN0X2p1bmspIHsK KwkJcmV0dXJuIHRydWU7CisJfQorCisJcmV0dXJuIGZhbHNlOworfQorCit2b2lkCitzYW5fY2hl Y2tfc3Rhc2hlZF9wdHJzKHZvaWQgKipwdHJzLCBzaXplX3QgbnN0YXNoZWQsIHNpemVfdCB1c2l6 ZSkgeworCS8qCisJICogVmVyaWZ5IHRoYXQgdGhlIGp1bmtlZC1maWxsZWQgJiBzdGFzaGVkIHBv aW50ZXJzIHJlbWFpbiB1bmNoYW5nZWQsIHRvCisJICogZGV0ZWN0IHdyaXRlLWFmdGVyLWZyZWUu CisJICovCisJZm9yIChzaXplX3QgbiA9IDA7IG4gPCBuc3Rhc2hlZDsgbisrKSB7CisJCXZvaWQg KnN0YXNoZWQgPSBwdHJzW25dOworCQlhc3NlcnQoc3Rhc2hlZCAhPSBOVUxMKTsKKwkJYXNzZXJ0 KGNhY2hlX2Jpbl9ub25mYXN0X2FsaWduZWQoc3Rhc2hlZCkpOworCQlpZiAodW5saWtlbHkoc2Fu X3N0YXNoZWRfY29ycnVwdGVkKHN0YXNoZWQsIHVzaXplKSkpIHsKKwkJCXNhZmV0eV9jaGVja19m YWlsKCI8amVtYWxsb2M+OiBXcml0ZS1hZnRlci1mcmVlICIKKwkJCSAgICAiZGV0ZWN0ZWQgb24g ZGVhbGxvY2F0ZWQgcG9pbnRlciAlcCAoc2l6ZSAlenUpLlxuIiwKKwkJCSAgICBzdGFzaGVkLCB1 c2l6ZSk7CisJCX0KKwl9Cit9CisKK3ZvaWQKK3RzZF9zYW5faW5pdCh0c2RfdCAqdHNkKSB7CisJ KnRzZF9zYW5fZXh0ZW50c191bnRpbF9ndWFyZF9zbWFsbHBfZ2V0KHRzZCkgPSBvcHRfc2FuX2d1 YXJkX3NtYWxsOworCSp0c2Rfc2FuX2V4dGVudHNfdW50aWxfZ3VhcmRfbGFyZ2VwX2dldCh0c2Qp ID0gb3B0X3Nhbl9ndWFyZF9sYXJnZTsKK30KKwordm9pZAorc2FuX2luaXQoc3NpemVfdCBsZ19z YW5fdWFmX2FsaWduKSB7CisJYXNzZXJ0KGxnX3Nhbl91YWZfYWxpZ24gPT0gLTEgfHwgbGdfc2Fu X3VhZl9hbGlnbiA+PSBMR19QQUdFKTsKKwlpZiAobGdfc2FuX3VhZl9hbGlnbiA9PSAtMSkgewor CQlzYW5fY2FjaGVfYmluX25vbmZhc3RfbWFzayA9ICh1aW50cHRyX3QpLTE7CisJCXJldHVybjsK Kwl9CisKKwlzYW5fY2FjaGVfYmluX25vbmZhc3RfbWFzayA9ICgodWludHB0cl90KTEgPDwgbGdf c2FuX3VhZl9hbGlnbikgLSAxOworfQoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1 aWxkL2plbWFsbG9jLTUuMy4wL3NyYy9zYW5fYnVtcC5jIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVp bGQvamVtYWxsb2MtNS4zLjAvc3JjL3Nhbl9idW1wLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMC4uODg4OTc0NQotLS0gL2Rldi9udWxsCisrKyBiLzM4OS1kcy1iYXNlLTMuMy4w LWJ1aWxkL2plbWFsbG9jLTUuMy4wL3NyYy9zYW5fYnVtcC5jCkBAIC0wLDAgKzEsMTA0IEBACisj aW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvamVtYWxsb2NfcHJlYW1ibGUuaCIKKyNpbmNsdWRl ICJqZW1hbGxvYy9pbnRlcm5hbC9qZW1hbGxvY19pbnRlcm5hbF9pbmNsdWRlcy5oIgorCisjaW5j bHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvc2FuX2J1bXAuaCIKKyNpbmNsdWRlICJqZW1hbGxvYy9p bnRlcm5hbC9wYWMuaCIKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9zYW4uaCIKKyNpbmNs dWRlICJqZW1hbGxvYy9pbnRlcm5hbC9laG9va3MuaCIKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRl cm5hbC9lZGF0YV9jYWNoZS5oIgorCitzdGF0aWMgYm9vbAorc2FuX2J1bXBfZ3Jvd19sb2NrZWQo dHNkbl90ICp0c2RuLCBzYW5fYnVtcF9hbGxvY190ICpzYmEsIHBhY190ICpwYWMsCisgICAgZWhv b2tzX3QgKmVob29rcywgc2l6ZV90IHNpemUpOworCitlZGF0YV90ICoKK3Nhbl9idW1wX2FsbG9j KHRzZG5fdCAqdHNkbiwgc2FuX2J1bXBfYWxsb2NfdCogc2JhLCBwYWNfdCAqcGFjLAorICAgIGVo b29rc190ICplaG9va3MsIHNpemVfdCBzaXplLCBib29sIHplcm8pIHsKKwlhc3NlcnQoc2FuX2J1 bXBfZW5hYmxlZCgpKTsKKworCWVkYXRhX3QqIHRvX2Rlc3Ryb3k7CisJc2l6ZV90IGd1YXJkZWRf c2l6ZSA9IHNhbl9vbmVfc2lkZV9ndWFyZGVkX3N6KHNpemUpOworCisJbWFsbG9jX211dGV4X2xv Y2sodHNkbiwgJnNiYS0+bXR4KTsKKworCWlmIChzYmEtPmN1cnJfcmVnID09IE5VTEwgfHwKKwkg ICAgZWRhdGFfc2l6ZV9nZXQoc2JhLT5jdXJyX3JlZykgPCBndWFyZGVkX3NpemUpIHsKKwkJLyoK KwkJICogSWYgdGhlIGN1cnJlbnQgcmVnaW9uIGNhbid0IGFjY29tbW9kYXRlIHRoZSBhbGxvY2F0 aW9uLAorCQkgKiB0cnkgcmVwbGFjaW5nIGl0IHdpdGggYSBsYXJnZXIgb25lIGFuZCBkZXN0cm95 IGN1cnJlbnQgaWYgdGhlCisJCSAqIHJlcGxhY2VtZW50IHN1Y2NlZWRzLgorCQkgKi8KKwkJdG9f ZGVzdHJveSA9IHNiYS0+Y3Vycl9yZWc7CisJCWJvb2wgZXJyID0gc2FuX2J1bXBfZ3Jvd19sb2Nr ZWQodHNkbiwgc2JhLCBwYWMsIGVob29rcywKKwkJICAgIGd1YXJkZWRfc2l6ZSk7CisJCWlmIChl cnIpIHsKKwkJCWdvdG8gbGFiZWxfZXJyOworCQl9CisJfSBlbHNlIHsKKwkJdG9fZGVzdHJveSA9 IE5VTEw7CisJfQorCWFzc2VydChndWFyZGVkX3NpemUgPD0gZWRhdGFfc2l6ZV9nZXQoc2JhLT5j dXJyX3JlZykpOworCXNpemVfdCB0cmFpbF9zaXplID0gZWRhdGFfc2l6ZV9nZXQoc2JhLT5jdXJy X3JlZykgLSBndWFyZGVkX3NpemU7CisKKwllZGF0YV90KiBlZGF0YTsKKwlpZiAodHJhaWxfc2l6 ZSAhPSAwKSB7CisJCWVkYXRhX3QqIGN1cnJfcmVnX3RyYWlsID0gZXh0ZW50X3NwbGl0X3dyYXBw ZXIodHNkbiwgcGFjLAorCQkgICAgZWhvb2tzLCBzYmEtPmN1cnJfcmVnLCBndWFyZGVkX3NpemUs IHRyYWlsX3NpemUsCisJCSAgICAvKiBob2xkaW5nX2NvcmVfbG9ja3MgKi8gdHJ1ZSk7CisJCWlm IChjdXJyX3JlZ190cmFpbCA9PSBOVUxMKSB7CisJCQlnb3RvIGxhYmVsX2VycjsKKwkJfQorCQll ZGF0YSA9IHNiYS0+Y3Vycl9yZWc7CisJCXNiYS0+Y3Vycl9yZWcgPSBjdXJyX3JlZ190cmFpbDsK Kwl9IGVsc2UgeworCQllZGF0YSA9IHNiYS0+Y3Vycl9yZWc7CisJCXNiYS0+Y3Vycl9yZWcgPSBO VUxMOworCX0KKworCW1hbGxvY19tdXRleF91bmxvY2sodHNkbiwgJnNiYS0+bXR4KTsKKworCWFz c2VydCghZWRhdGFfZ3VhcmRlZF9nZXQoZWRhdGEpKTsKKwlhc3NlcnQoc2JhLT5jdXJyX3JlZyA9 PSBOVUxMIHx8ICFlZGF0YV9ndWFyZGVkX2dldChzYmEtPmN1cnJfcmVnKSk7CisJYXNzZXJ0KHRv X2Rlc3Ryb3kgPT0gTlVMTCB8fCAhZWRhdGFfZ3VhcmRlZF9nZXQodG9fZGVzdHJveSkpOworCisJ aWYgKHRvX2Rlc3Ryb3kgIT0gTlVMTCkgeworCQlleHRlbnRfZGVzdHJveV93cmFwcGVyKHRzZG4s IHBhYywgZWhvb2tzLCB0b19kZXN0cm95KTsKKwl9CisKKwlzYW5fZ3VhcmRfcGFnZXModHNkbiwg ZWhvb2tzLCBlZGF0YSwgcGFjLT5lbWFwLCAvKiBsZWZ0ICovIGZhbHNlLAorCSAgICAvKiByaWdo dCAqLyB0cnVlLCAvKiByZW1hcCAqLyB0cnVlKTsKKworCWlmIChleHRlbnRfY29tbWl0X3plcm8o dHNkbiwgZWhvb2tzLCBlZGF0YSwgLyogY29tbWl0ICovIHRydWUsIHplcm8sCisJICAgIC8qIGdy b3dpbmdfcmV0YWluZWQgKi8gZmFsc2UpKSB7CisJCWV4dGVudF9yZWNvcmQodHNkbiwgcGFjLCBl aG9va3MsICZwYWMtPmVjYWNoZV9yZXRhaW5lZCwKKwkJICAgIGVkYXRhKTsKKwkJcmV0dXJuIE5V TEw7CisJfQorCisJaWYgKGNvbmZpZ19wcm9mKSB7CisJCWV4dGVudF9nZHVtcF9hZGQodHNkbiwg ZWRhdGEpOworCX0KKworCXJldHVybiBlZGF0YTsKK2xhYmVsX2VycjoKKwltYWxsb2NfbXV0ZXhf dW5sb2NrKHRzZG4sICZzYmEtPm10eCk7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBib29s CitzYW5fYnVtcF9ncm93X2xvY2tlZCh0c2RuX3QgKnRzZG4sIHNhbl9idW1wX2FsbG9jX3QgKnNi YSwgcGFjX3QgKnBhYywKKyAgICBlaG9va3NfdCAqZWhvb2tzLCBzaXplX3Qgc2l6ZSkgeworCW1h bGxvY19tdXRleF9hc3NlcnRfb3duZXIodHNkbiwgJnNiYS0+bXR4KTsKKworCWJvb2wgY29tbWl0 dGVkID0gZmFsc2UsIHplcm9lZCA9IGZhbHNlOworCXNpemVfdCBhbGxvY19zaXplID0gc2l6ZSA+ IFNCQV9SRVRBSU5FRF9BTExPQ19TSVpFID8gc2l6ZSA6CisJICAgIFNCQV9SRVRBSU5FRF9BTExP Q19TSVpFOworCWFzc2VydCgoYWxsb2Nfc2l6ZSAmIFBBR0VfTUFTSykgPT0gMCk7CisJc2JhLT5j dXJyX3JlZyA9IGV4dGVudF9hbGxvY193cmFwcGVyKHRzZG4sIHBhYywgZWhvb2tzLCBOVUxMLAor CSAgICBhbGxvY19zaXplLCBQQUdFLCB6ZXJvZWQsICZjb21taXR0ZWQsCisJICAgIC8qIGdyb3dp bmdfcmV0YWluZWQgKi8gdHJ1ZSk7CisJaWYgKHNiYS0+Y3Vycl9yZWcgPT0gTlVMTCkgeworCQly ZXR1cm4gdHJ1ZTsKKwl9CisJcmV0dXJuIGZhbHNlOworfQoKZGlmZiAtLWdpdCBhLzM4OS1kcy1i YXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3NyYy9zYy5jIGIvMzg5LWRzLWJhc2UtMy4z LjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvc3JjL3NjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMC4uZTRhOTRkOAotLS0gL2Rldi9udWxsCisrKyBiLzM4OS1kcy1iYXNlLTMuMy4w LWJ1aWxkL2plbWFsbG9jLTUuMy4wL3NyYy9zYy5jCkBAIC0wLDAgKzEsMzA2IEBACisjaW5jbHVk ZSAiamVtYWxsb2MvaW50ZXJuYWwvamVtYWxsb2NfcHJlYW1ibGUuaCIKKworI2luY2x1ZGUgImpl bWFsbG9jL2ludGVybmFsL2Fzc2VydC5oIgorI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2Jp dF91dGlsLmgiCisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvYml0bWFwLmgiCisjaW5jbHVk ZSAiamVtYWxsb2MvaW50ZXJuYWwvcGFnZXMuaCIKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5h bC9zYy5oIgorCisvKgorICogVGhpcyBtb2R1bGUgY29tcHV0ZXMgdGhlIHNpemUgY2xhc3NlcyB1 c2VkIHRvIHNhdGlzZnkgYWxsb2NhdGlvbnMuICBUaGUgbG9naWMKKyAqIGhlcmUgd2FzIHBvcnRl ZCBtb3JlIG9yIGxlc3MgbGluZS1ieS1saW5lIGZyb20gYSBzaGVsbCBzY3JpcHQsIGFuZCBiZWNh dXNlIG9mCisgKiB0aGF0IGlzIG5vdCB0aGUgbW9zdCBpZGlvbWF0aWMgQy4gIEV2ZW50dWFsbHkg d2Ugc2hvdWxkIGZpeCB0aGlzLCBidXQgZm9yIG5vdworICogYXQgbGVhc3QgdGhlIGRhbWFnZSBp cyBjb21wYXJ0bWVudGFsaXplZCB0byB0aGlzIGZpbGUuCisgKi8KKworc2l6ZV90CityZWdfc2l6 ZV9jb21wdXRlKGludCBsZ19iYXNlLCBpbnQgbGdfZGVsdGEsIGludCBuZGVsdGEpIHsKKwlyZXR1 cm4gKFpVKDEpIDw8IGxnX2Jhc2UpICsgKFpVKG5kZWx0YSkgPDwgbGdfZGVsdGEpOworfQorCisv KiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgcGFnZXMgaW4gdGhlIHNsYWIuICovCitzdGF0aWMgaW50 CitzbGFiX3NpemUoaW50IGxnX3BhZ2UsIGludCBsZ19iYXNlLCBpbnQgbGdfZGVsdGEsIGludCBu ZGVsdGEpIHsKKwlzaXplX3QgcGFnZSA9IChaVSgxKSA8PCBsZ19wYWdlKTsKKwlzaXplX3QgcmVn X3NpemUgPSByZWdfc2l6ZV9jb21wdXRlKGxnX2Jhc2UsIGxnX2RlbHRhLCBuZGVsdGEpOworCisJ c2l6ZV90IHRyeV9zbGFiX3NpemUgPSBwYWdlOworCXNpemVfdCB0cnlfbnJlZ3MgPSB0cnlfc2xh Yl9zaXplIC8gcmVnX3NpemU7CisJc2l6ZV90IHBlcmZlY3Rfc2xhYl9zaXplID0gMDsKKwlib29s IHBlcmZlY3QgPSBmYWxzZTsKKwkvKgorCSAqIFRoaXMgbG9vcCBjb250aW51ZXMgdW50aWwgd2Ug ZmluZCB0aGUgbGVhc3QgY29tbW9uIG11bHRpcGxlIG9mIHRoZQorCSAqIHBhZ2Ugc2l6ZSBhbmQg c2l6ZSBjbGFzcyBzaXplLiAgU2l6ZSBjbGFzc2VzIGFyZSBhbGwgb2YgdGhlIGZvcm0KKwkgKiBi YXNlICsgbmRlbHRhICogZGVsdGEgPT0gKG5kZWx0YSArIGJhc2UvbmRlbHRhKSAqIGRlbHRhLCB3 aGljaCBpcworCSAqIChuZGVsdGEgKyBuZ3JvdXApICogZGVsdGEuICBUaGUgd2F5IHdlIGNob29z ZSBzbGFiYmluZyBzdHJhdGVnaWVzCisJICogbWVhbnMgdGhhdCBkZWx0YSBpcyBhdCBtb3N0IHRo ZSBwYWdlIHNpemUgYW5kIG5kZWx0YSA8IG5ncm91cC4gIFNvCisJICogdGhlIGxvb3AgZXhlY3V0 ZXMgZm9yIGF0IG1vc3QgMiAqIG5ncm91cCAtIDEgaXRlcmF0aW9ucywgd2hpY2ggaXMKKwkgKiBh bHNvIHRoZSBib3VuZCBvbiB0aGUgbnVtYmVyIG9mIHBhZ2VzIGluIGEgc2xhYiBjaG9zZW4gYnkg ZGVmYXVsdC4KKwkgKiBXaXRoIHRoZSBjdXJyZW50IGRlZmF1bHQgc2V0dGluZ3MsIHRoaXMgaXMg YXQgbW9zdCA3LgorCSAqLworCXdoaWxlICghcGVyZmVjdCkgeworCQlwZXJmZWN0X3NsYWJfc2l6 ZSA9IHRyeV9zbGFiX3NpemU7CisJCXNpemVfdCBwZXJmZWN0X25yZWdzID0gdHJ5X25yZWdzOwor CQl0cnlfc2xhYl9zaXplICs9IHBhZ2U7CisJCXRyeV9ucmVncyA9IHRyeV9zbGFiX3NpemUgLyBy ZWdfc2l6ZTsKKwkJaWYgKHBlcmZlY3Rfc2xhYl9zaXplID09IHBlcmZlY3RfbnJlZ3MgKiByZWdf c2l6ZSkgeworCQkJcGVyZmVjdCA9IHRydWU7CisJCX0KKwl9CisJcmV0dXJuIChpbnQpKHBlcmZl Y3Rfc2xhYl9zaXplIC8gcGFnZSk7Cit9CisKK3N0YXRpYyB2b2lkCitzaXplX2NsYXNzKAorICAg IC8qIE91dHB1dC4gKi8KKyAgICBzY190ICpzYywKKyAgICAvKiBDb25maWd1cmF0aW9uIGRlY2lz aW9ucy4gKi8KKyAgICBpbnQgbGdfbWF4X2xvb2t1cCwgaW50IGxnX3BhZ2UsIGludCBsZ19uZ3Jv dXAsCisgICAgLyogSW5wdXRzIHNwZWNpZmljIHRvIHRoZSBzaXplIGNsYXNzLiAqLworICAgIGlu dCBpbmRleCwgaW50IGxnX2Jhc2UsIGludCBsZ19kZWx0YSwgaW50IG5kZWx0YSkgeworCXNjLT5p bmRleCA9IGluZGV4OworCXNjLT5sZ19iYXNlID0gbGdfYmFzZTsKKwlzYy0+bGdfZGVsdGEgPSBs Z19kZWx0YTsKKwlzYy0+bmRlbHRhID0gbmRlbHRhOworCXNpemVfdCBzaXplID0gcmVnX3NpemVf Y29tcHV0ZShsZ19iYXNlLCBsZ19kZWx0YSwgbmRlbHRhKTsKKwlzYy0+cHN6ID0gKHNpemUgJSAo WlUoMSkgPDwgbGdfcGFnZSkgPT0gMCk7CisJaWYgKGluZGV4ID09IDApIHsKKwkJYXNzZXJ0KCFz Yy0+cHN6KTsKKwl9CisJaWYgKHNpemUgPCAoWlUoMSkgPDwgKGxnX3BhZ2UgKyBsZ19uZ3JvdXAp KSkgeworCQlzYy0+YmluID0gdHJ1ZTsKKwkJc2MtPnBncyA9IHNsYWJfc2l6ZShsZ19wYWdlLCBs Z19iYXNlLCBsZ19kZWx0YSwgbmRlbHRhKTsKKwl9IGVsc2UgeworCQlzYy0+YmluID0gZmFsc2U7 CisJCXNjLT5wZ3MgPSAwOworCX0KKwlpZiAoc2l6ZSA8PSAoWlUoMSkgPDwgbGdfbWF4X2xvb2t1 cCkpIHsKKwkJc2MtPmxnX2RlbHRhX2xvb2t1cCA9IGxnX2RlbHRhOworCX0gZWxzZSB7CisJCXNj LT5sZ19kZWx0YV9sb29rdXAgPSAwOworCX0KK30KKworc3RhdGljIHZvaWQKK3NpemVfY2xhc3Nl cygKKyAgICAvKiBPdXRwdXQuICovCisgICAgc2NfZGF0YV90ICpzY19kYXRhLAorICAgIC8qIERl dGVybWluZWQgYnkgdGhlIHN5c3RlbS4gKi8KKyAgICBzaXplX3QgbGdfcHRyX3NpemUsIGludCBs Z19xdWFudHVtLAorICAgIC8qIENvbmZpZ3VyYXRpb24gZGVjaXNpb25zLiAqLworICAgIGludCBs Z190aW55X21pbiwgaW50IGxnX21heF9sb29rdXAsIGludCBsZ19wYWdlLCBpbnQgbGdfbmdyb3Vw KSB7CisJaW50IHB0cl9iaXRzID0gKDEgPDwgbGdfcHRyX3NpemUpICogODsKKwlpbnQgbmdyb3Vw ID0gKDEgPDwgbGdfbmdyb3VwKTsKKwlpbnQgbnRpbnkgPSAwOworCWludCBubGJpbnMgPSAwOwor CWludCBsZ190aW55X21heGNsYXNzID0gKHVuc2lnbmVkKS0xOworCWludCBuYmlucyA9IDA7CisJ aW50IG5wc2l6ZXMgPSAwOworCisJaW50IGluZGV4ID0gMDsKKworCWludCBuZGVsdGEgPSAwOwor CWludCBsZ19iYXNlID0gbGdfdGlueV9taW47CisJaW50IGxnX2RlbHRhID0gbGdfYmFzZTsKKwor CS8qIE91dHB1dHMgdGhhdCB3ZSB1cGRhdGUgYXMgd2UgZ28uICovCisJc2l6ZV90IGxvb2t1cF9t YXhjbGFzcyA9IDA7CisJc2l6ZV90IHNtYWxsX21heGNsYXNzID0gMDsKKwlpbnQgbGdfbGFyZ2Vf bWluY2xhc3MgPSAwOworCXNpemVfdCBsYXJnZV9tYXhjbGFzcyA9IDA7CisKKwkvKiBUaW55IHNp emUgY2xhc3Nlcy4gKi8KKwl3aGlsZSAobGdfYmFzZSA8IGxnX3F1YW50dW0pIHsKKwkJc2NfdCAq c2MgPSAmc2NfZGF0YS0+c2NbaW5kZXhdOworCQlzaXplX2NsYXNzKHNjLCBsZ19tYXhfbG9va3Vw LCBsZ19wYWdlLCBsZ19uZ3JvdXAsIGluZGV4LAorCQkgICAgbGdfYmFzZSwgbGdfZGVsdGEsIG5k ZWx0YSk7CisJCWlmIChzYy0+bGdfZGVsdGFfbG9va3VwICE9IDApIHsKKwkJCW5sYmlucyA9IGlu ZGV4ICsgMTsKKwkJfQorCQlpZiAoc2MtPnBzeikgeworCQkJbnBzaXplcysrOworCQl9CisJCWlm IChzYy0+YmluKSB7CisJCQluYmlucysrOworCQl9CisJCW50aW55Kys7CisJCS8qIEZpbmFsIHdy aXR0ZW4gdmFsdWUgaXMgY29ycmVjdC4gKi8KKwkJbGdfdGlueV9tYXhjbGFzcyA9IGxnX2Jhc2U7 CisJCWluZGV4Kys7CisJCWxnX2RlbHRhID0gbGdfYmFzZTsKKwkJbGdfYmFzZSsrOworCX0KKwor CS8qIEZpcnN0IG5vbi10aW55IChwc2V1ZG8pIGdyb3VwLiAqLworCWlmIChudGlueSAhPSAwKSB7 CisJCXNjX3QgKnNjID0gJnNjX2RhdGEtPnNjW2luZGV4XTsKKwkJLyoKKwkJICogU2VlIHRoZSBu b3RlIGluIHNjLmg7IHRoZSBmaXJzdCBub24tdGlueSBzaXplIGNsYXNzIGhhcyBhbgorCQkgKiB1 bnVzdWFsIGVuY29kaW5nLgorCQkgKi8KKwkJbGdfYmFzZS0tOworCQluZGVsdGEgPSAxOworCQlz aXplX2NsYXNzKHNjLCBsZ19tYXhfbG9va3VwLCBsZ19wYWdlLCBsZ19uZ3JvdXAsIGluZGV4LAor CQkgICAgbGdfYmFzZSwgbGdfZGVsdGEsIG5kZWx0YSk7CisJCWluZGV4Kys7CisJCWxnX2Jhc2Ur KzsKKwkJbGdfZGVsdGErKzsKKwkJaWYgKHNjLT5wc3opIHsKKwkJCW5wc2l6ZXMrKzsKKwkJfQor CQlpZiAoc2MtPmJpbikgeworCQkJbmJpbnMrKzsKKwkJfQorCX0KKwl3aGlsZSAobmRlbHRhIDwg bmdyb3VwKSB7CisJCXNjX3QgKnNjID0gJnNjX2RhdGEtPnNjW2luZGV4XTsKKwkJc2l6ZV9jbGFz cyhzYywgbGdfbWF4X2xvb2t1cCwgbGdfcGFnZSwgbGdfbmdyb3VwLCBpbmRleCwKKwkJICAgIGxn X2Jhc2UsIGxnX2RlbHRhLCBuZGVsdGEpOworCQlpbmRleCsrOworCQluZGVsdGErKzsKKwkJaWYg KHNjLT5wc3opIHsKKwkJCW5wc2l6ZXMrKzsKKwkJfQorCQlpZiAoc2MtPmJpbikgeworCQkJbmJp bnMrKzsKKwkJfQorCX0KKworCS8qIEFsbCByZW1haW5pbmcgZ3JvdXBzLiAqLworCWxnX2Jhc2Ug PSBsZ19iYXNlICsgbGdfbmdyb3VwOworCXdoaWxlIChsZ19iYXNlIDwgcHRyX2JpdHMgLSAxKSB7 CisJCW5kZWx0YSA9IDE7CisJCWludCBuZGVsdGFfbGltaXQ7CisJCWlmIChsZ19iYXNlID09IHB0 cl9iaXRzIC0gMikgeworCQkJbmRlbHRhX2xpbWl0ID0gbmdyb3VwIC0gMTsKKwkJfSBlbHNlIHsK KwkJCW5kZWx0YV9saW1pdCA9IG5ncm91cDsKKwkJfQorCQl3aGlsZSAobmRlbHRhIDw9IG5kZWx0 YV9saW1pdCkgeworCQkJc2NfdCAqc2MgPSAmc2NfZGF0YS0+c2NbaW5kZXhdOworCQkJc2l6ZV9j bGFzcyhzYywgbGdfbWF4X2xvb2t1cCwgbGdfcGFnZSwgbGdfbmdyb3VwLCBpbmRleCwKKwkJCSAg ICBsZ19iYXNlLCBsZ19kZWx0YSwgbmRlbHRhKTsKKwkJCWlmIChzYy0+bGdfZGVsdGFfbG9va3Vw ICE9IDApIHsKKwkJCQlubGJpbnMgPSBpbmRleCArIDE7CisJCQkJLyogRmluYWwgd3JpdHRlbiB2 YWx1ZSBpcyBjb3JyZWN0LiAqLworCQkJCWxvb2t1cF9tYXhjbGFzcyA9IChaVSgxKSA8PCBsZ19i YXNlKQorCQkJCSAgICArIChaVShuZGVsdGEpIDw8IGxnX2RlbHRhKTsKKwkJCX0KKwkJCWlmIChz Yy0+cHN6KSB7CisJCQkJbnBzaXplcysrOworCQkJfQorCQkJaWYgKHNjLT5iaW4pIHsKKwkJCQlu YmlucysrOworCQkJCS8qIEZpbmFsIHdyaXR0ZW4gdmFsdWUgaXMgY29ycmVjdC4gKi8KKwkJCQlz bWFsbF9tYXhjbGFzcyA9IChaVSgxKSA8PCBsZ19iYXNlKQorCQkJCSAgICArIChaVShuZGVsdGEp IDw8IGxnX2RlbHRhKTsKKwkJCQlpZiAobGdfbmdyb3VwID4gMCkgeworCQkJCQlsZ19sYXJnZV9t aW5jbGFzcyA9IGxnX2Jhc2UgKyAxOworCQkJCX0gZWxzZSB7CisJCQkJCWxnX2xhcmdlX21pbmNs YXNzID0gbGdfYmFzZSArIDI7CisJCQkJfQorCQkJfQorCQkJbGFyZ2VfbWF4Y2xhc3MgPSAoWlUo MSkgPDwgbGdfYmFzZSkKKwkJCSAgICArIChaVShuZGVsdGEpIDw8IGxnX2RlbHRhKTsKKwkJCWlu ZGV4Kys7CisJCQluZGVsdGErKzsKKwkJfQorCQlsZ19iYXNlKys7CisJCWxnX2RlbHRhKys7CisJ fQorCS8qIEFkZGl0aW9uYWwgb3V0cHV0cy4gKi8KKwlpbnQgbnNpemVzID0gaW5kZXg7CisJdW5z aWduZWQgbGdfY2VpbF9uc2l6ZXMgPSBsZ19jZWlsKG5zaXplcyk7CisKKwkvKiBGaWxsIGluIHRo ZSBvdXRwdXQgZGF0YS4gKi8KKwlzY19kYXRhLT5udGlueSA9IG50aW55OworCXNjX2RhdGEtPm5s YmlucyA9IG5sYmluczsKKwlzY19kYXRhLT5uYmlucyA9IG5iaW5zOworCXNjX2RhdGEtPm5zaXpl cyA9IG5zaXplczsKKwlzY19kYXRhLT5sZ19jZWlsX25zaXplcyA9IGxnX2NlaWxfbnNpemVzOwor CXNjX2RhdGEtPm5wc2l6ZXMgPSBucHNpemVzOworCXNjX2RhdGEtPmxnX3RpbnlfbWF4Y2xhc3Mg PSBsZ190aW55X21heGNsYXNzOworCXNjX2RhdGEtPmxvb2t1cF9tYXhjbGFzcyA9IGxvb2t1cF9t YXhjbGFzczsKKwlzY19kYXRhLT5zbWFsbF9tYXhjbGFzcyA9IHNtYWxsX21heGNsYXNzOworCXNj X2RhdGEtPmxnX2xhcmdlX21pbmNsYXNzID0gbGdfbGFyZ2VfbWluY2xhc3M7CisJc2NfZGF0YS0+ bGFyZ2VfbWluY2xhc3MgPSAoWlUoMSkgPDwgbGdfbGFyZ2VfbWluY2xhc3MpOworCXNjX2RhdGEt PmxhcmdlX21heGNsYXNzID0gbGFyZ2VfbWF4Y2xhc3M7CisKKwkvKgorCSAqIFdlIGNvbXB1dGUg dGhlc2UgdmFsdWVzIGluIHR3byB3YXlzOgorCSAqICAgLSBJbmNyZW1lbnRhbGx5LCBhcyBhYm92 ZS4KKwkgKiAgIC0gSW4gbWFjcm9zLCBpbiBzYy5oLgorCSAqIFRoZSBjb21wdXRhdGlvbiBpcyBl YXNpZXIgd2hlbiBkb25lIGluY3JlbWVudGFsbHksIGJ1dCBwdXR0aW5nIGl0IGluCisJICogYSBj b25zdGFudCBtYWtlcyBpdCBhdmFpbGFibGUgdG8gdGhlIGZhc3QgcGF0aHMgd2l0aG91dCBoYXZp bmcgdG8KKwkgKiB0b3VjaCB0aGUgZXh0cmEgZ2xvYmFsIGNhY2hlbGluZS4gIFdlIGFzc2VydCwg aG93ZXZlciwgdGhhdCB0aGUgdHdvCisJICogY29tcHV0YXRpb25zIGFyZSBlcXVpdmFsZW50Lgor CSAqLworCWFzc2VydChzY19kYXRhLT5ucHNpemVzID09IFNDX05QU0laRVMpOworCWFzc2VydChz Y19kYXRhLT5sZ190aW55X21heGNsYXNzID09IFNDX0xHX1RJTllfTUFYQ0xBU1MpOworCWFzc2Vy dChzY19kYXRhLT5zbWFsbF9tYXhjbGFzcyA9PSBTQ19TTUFMTF9NQVhDTEFTUyk7CisJYXNzZXJ0 KHNjX2RhdGEtPmxhcmdlX21pbmNsYXNzID09IFNDX0xBUkdFX01JTkNMQVNTKTsKKwlhc3NlcnQo c2NfZGF0YS0+bGdfbGFyZ2VfbWluY2xhc3MgPT0gU0NfTEdfTEFSR0VfTUlOQ0xBU1MpOworCWFz c2VydChzY19kYXRhLT5sYXJnZV9tYXhjbGFzcyA9PSBTQ19MQVJHRV9NQVhDTEFTUyk7CisKKwkv KgorCSAqIEluIHRoZSBhbGxvY2F0aW9uIGZhc3RwYXRoLCB3ZSB3YW50IHRvIGFzc3VtZSB0aGF0 IHdlIGNhbgorCSAqIHVuY29uZGl0aW9uYWxseSBzdWJ0cmFjdCB0aGUgcmVxdWVzdGVkIGFsbG9j YXRpb24gc2l6ZSBmcm9tCisJICogYSBzc2l6ZV90LCBhbmQgZGV0ZWN0IHBhc3NpbmcgdGhyb3Vn aCAwIGNvcnJlY3RseS4gIFRoaXMKKwkgKiByZXN1bHRzIGluIG9wdGltYWwgZ2VuZXJhdGVkIGNv ZGUuICBGb3IgdGhpcyB0byB3b3JrLCB0aGUKKwkgKiBtYXhpbXVtIGFsbG9jYXRpb24gc2l6ZSBt dXN0IGJlIGxlc3MgdGhhbiBTU0laRV9NQVguCisJICovCisJYXNzZXJ0KFNDX0xBUkdFX01BWENM QVNTIDwgU1NJWkVfTUFYKTsKK30KKwordm9pZAorc2NfZGF0YV9pbml0KHNjX2RhdGFfdCAqc2Nf ZGF0YSkgeworCXNpemVfY2xhc3NlcyhzY19kYXRhLCBMR19TSVpFT0ZfUFRSLCBMR19RVUFOVFVN LCBTQ19MR19USU5ZX01JTiwKKwkgICAgU0NfTEdfTUFYX0xPT0tVUCwgTEdfUEFHRSwgU0NfTEdf TkdST1VQKTsKKworCXNjX2RhdGEtPmluaXRpYWxpemVkID0gdHJ1ZTsKK30KKworc3RhdGljIHZv aWQKK3NjX2RhdGFfdXBkYXRlX3NjX3NsYWJfc2l6ZShzY190ICpzYywgc2l6ZV90IHJlZ19zaXpl LCBzaXplX3QgcGdzX2d1ZXNzKSB7CisJc2l6ZV90IG1pbl9wZ3MgPSByZWdfc2l6ZSAvIFBBR0U7 CisJaWYgKHJlZ19zaXplICUgUEFHRSAhPSAwKSB7CisJCW1pbl9wZ3MrKzsKKwl9CisJLyoKKwkg KiBCSVRNQVBfTUFYQklUUyBpcyBhY3R1YWxseSBkZXRlcm1pbmVkIGJ5IHB1dHRpbmcgdGhlIHNt YWxsZXN0CisJICogcG9zc2libGUgc2l6ZS1jbGFzcyBvbiBvbmUgcGFnZSwgc28gdGhpcyBjYW4g bmV2ZXIgYmUgMC4KKwkgKi8KKwlzaXplX3QgbWF4X3BncyA9IEJJVE1BUF9NQVhCSVRTICogcmVn X3NpemUgLyBQQUdFOworCisJYXNzZXJ0KG1pbl9wZ3MgPD0gbWF4X3Bncyk7CisJYXNzZXJ0KG1p bl9wZ3MgPiAwKTsKKwlhc3NlcnQobWF4X3BncyA+PSAxKTsKKwlpZiAocGdzX2d1ZXNzIDwgbWlu X3BncykgeworCQlzYy0+cGdzID0gKGludCltaW5fcGdzOworCX0gZWxzZSBpZiAocGdzX2d1ZXNz ID4gbWF4X3BncykgeworCQlzYy0+cGdzID0gKGludCltYXhfcGdzOworCX0gZWxzZSB7CisJCXNj LT5wZ3MgPSAoaW50KXBnc19ndWVzczsKKwl9Cit9CisKK3ZvaWQKK3NjX2RhdGFfdXBkYXRlX3Ns YWJfc2l6ZShzY19kYXRhX3QgKmRhdGEsIHNpemVfdCBiZWdpbiwgc2l6ZV90IGVuZCwgaW50IHBn cykgeworCWFzc2VydChkYXRhLT5pbml0aWFsaXplZCk7CisJZm9yIChpbnQgaSA9IDA7IGkgPCBk YXRhLT5uc2l6ZXM7IGkrKykgeworCQlzY190ICpzYyA9ICZkYXRhLT5zY1tpXTsKKwkJaWYgKCFz Yy0+YmluKSB7CisJCQlicmVhazsKKwkJfQorCQlzaXplX3QgcmVnX3NpemUgPSByZWdfc2l6ZV9j b21wdXRlKHNjLT5sZ19iYXNlLCBzYy0+bGdfZGVsdGEsCisJCSAgICBzYy0+bmRlbHRhKTsKKwkJ aWYgKGJlZ2luIDw9IHJlZ19zaXplICYmIHJlZ19zaXplIDw9IGVuZCkgeworCQkJc2NfZGF0YV91 cGRhdGVfc2Nfc2xhYl9zaXplKHNjLCByZWdfc2l6ZSwgcGdzKTsKKwkJfQorCX0KK30KKwordm9p ZAorc2NfYm9vdChzY19kYXRhX3QgKmRhdGEpIHsKKwlzY19kYXRhX2luaXQoZGF0YSk7Cit9Cgpk aWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvc3JjL3Nl Yy5jIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvc3JjL3NlYy5jCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmNjc1NTkKLS0tIC9kZXYvbnVsbAor KysgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9zcmMvc2VjLmMKQEAg LTAsMCArMSw0MjIgQEAKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9qZW1hbGxvY19wcmVh bWJsZS5oIgorI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2plbWFsbG9jX2ludGVybmFsX2lu Y2x1ZGVzLmgiCisKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9zZWMuaCIKKworc3RhdGlj IGVkYXRhX3QgKnNlY19hbGxvYyh0c2RuX3QgKnRzZG4sIHBhaV90ICpzZWxmLCBzaXplX3Qgc2l6 ZSwKKyAgICBzaXplX3QgYWxpZ25tZW50LCBib29sIHplcm8sIGJvb2wgZ3VhcmRlZCwgYm9vbCBm cmVxdWVudF9yZXVzZSwKKyAgICBib29sICpkZWZlcnJlZF93b3JrX2dlbmVyYXRlZCk7CitzdGF0 aWMgYm9vbCBzZWNfZXhwYW5kKHRzZG5fdCAqdHNkbiwgcGFpX3QgKnNlbGYsIGVkYXRhX3QgKmVk YXRhLAorICAgIHNpemVfdCBvbGRfc2l6ZSwgc2l6ZV90IG5ld19zaXplLCBib29sIHplcm8sIGJv b2wgKmRlZmVycmVkX3dvcmtfZ2VuZXJhdGVkKTsKK3N0YXRpYyBib29sIHNlY19zaHJpbmsodHNk bl90ICp0c2RuLCBwYWlfdCAqc2VsZiwgZWRhdGFfdCAqZWRhdGEsCisgICAgc2l6ZV90IG9sZF9z aXplLCBzaXplX3QgbmV3X3NpemUsIGJvb2wgKmRlZmVycmVkX3dvcmtfZ2VuZXJhdGVkKTsKK3N0 YXRpYyB2b2lkIHNlY19kYWxsb2ModHNkbl90ICp0c2RuLCBwYWlfdCAqc2VsZiwgZWRhdGFfdCAq ZWRhdGEsCisgICAgYm9vbCAqZGVmZXJyZWRfd29ya19nZW5lcmF0ZWQpOworCitzdGF0aWMgdm9p ZAorc2VjX2Jpbl9pbml0KHNlY19iaW5fdCAqYmluKSB7CisJYmluLT5iZWluZ19iYXRjaF9maWxs ZWQgPSBmYWxzZTsKKwliaW4tPmJ5dGVzX2N1ciA9IDA7CisJZWRhdGFfbGlzdF9hY3RpdmVfaW5p dCgmYmluLT5mcmVlbGlzdCk7Cit9CisKK2Jvb2wKK3NlY19pbml0KHRzZG5fdCAqdHNkbiwgc2Vj X3QgKnNlYywgYmFzZV90ICpiYXNlLCBwYWlfdCAqZmFsbGJhY2ssCisgICAgY29uc3Qgc2VjX29w dHNfdCAqb3B0cykgeworCWFzc2VydChvcHRzLT5tYXhfYWxsb2MgPj0gUEFHRSk7CisKKwlzaXpl X3QgbWF4X2FsbG9jID0gUEFHRV9GTE9PUihvcHRzLT5tYXhfYWxsb2MpOworCXBzemluZF90IG5w c2l6ZXMgPSBzel9wc3oyaW5kKG1heF9hbGxvYykgKyAxOworCisJc2l6ZV90IHN6X3NoYXJkcyA9 IG9wdHMtPm5zaGFyZHMgKiBzaXplb2Yoc2VjX3NoYXJkX3QpOworCXNpemVfdCBzel9iaW5zID0g b3B0cy0+bnNoYXJkcyAqIChzaXplX3QpbnBzaXplcyAqIHNpemVvZihzZWNfYmluX3QpOworCXNp emVfdCBzel9hbGxvYyA9IHN6X3NoYXJkcyArIHN6X2JpbnM7CisJdm9pZCAqZHluYWxsb2MgPSBi YXNlX2FsbG9jKHRzZG4sIGJhc2UsIHN6X2FsbG9jLCBDQUNIRUxJTkUpOworCWlmIChkeW5hbGxv YyA9PSBOVUxMKSB7CisJCXJldHVybiB0cnVlOworCX0KKwlzZWNfc2hhcmRfdCAqc2hhcmRfY3Vy ID0gKHNlY19zaGFyZF90ICopZHluYWxsb2M7CisJc2VjLT5zaGFyZHMgPSBzaGFyZF9jdXI7CisJ c2VjX2Jpbl90ICpiaW5fY3VyID0gKHNlY19iaW5fdCAqKSZzaGFyZF9jdXJbb3B0cy0+bnNoYXJk c107CisJLyogSnVzdCBmb3IgYXNzZXJ0cywgYmVsb3cuICovCisJc2VjX2Jpbl90ICpiaW5fc3Rh cnQgPSBiaW5fY3VyOworCisJZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvcHRzLT5uc2hhcmRzOyBp KyspIHsKKwkJc2VjX3NoYXJkX3QgKnNoYXJkID0gc2hhcmRfY3VyOworCQlzaGFyZF9jdXIrKzsK KwkJYm9vbCBlcnIgPSBtYWxsb2NfbXV0ZXhfaW5pdCgmc2hhcmQtPm10eCwgInNlY19zaGFyZCIs CisJCSAgICBXSVRORVNTX1JBTktfU0VDX1NIQVJELCBtYWxsb2NfbXV0ZXhfcmFua19leGNsdXNp dmUpOworCQlpZiAoZXJyKSB7CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCQlzaGFyZC0+ZW5hYmxl ZCA9IHRydWU7CisJCXNoYXJkLT5iaW5zID0gYmluX2N1cjsKKwkJZm9yIChwc3ppbmRfdCBqID0g MDsgaiA8IG5wc2l6ZXM7IGorKykgeworCQkJc2VjX2Jpbl9pbml0KCZzaGFyZC0+Ymluc1tqXSk7 CisJCQliaW5fY3VyKys7CisJCX0KKwkJc2hhcmQtPmJ5dGVzX2N1ciA9IDA7CisJCXNoYXJkLT50 b19mbHVzaF9uZXh0ID0gMDsKKwl9CisJLyoKKwkgKiBTaG91bGQgaGF2ZSBleGFjdGx5IG1hdGNo ZWQgdGhlIGJpbl9zdGFydCB0byB0aGUgZmlyc3QgdW51c2VkIGJ5dGUKKwkgKiBhZnRlciB0aGUg c2hhcmRzLgorCSAqLworCWFzc2VydCgodm9pZCAqKXNoYXJkX2N1ciA9PSAodm9pZCAqKWJpbl9z dGFydCk7CisJLyogQW5kIHRoZSBsYXN0IGJpbiB0byB1c2UgdXAgdGhlIGxhc3QgYnl0ZXMgb2Yg dGhlIGFsbG9jYXRpb24uICovCisJYXNzZXJ0KChjaGFyICopYmluX2N1ciA9PSAoKGNoYXIgKilk eW5hbGxvYyArIHN6X2FsbG9jKSk7CisJc2VjLT5mYWxsYmFjayA9IGZhbGxiYWNrOworCisKKwlz ZWMtPm9wdHMgPSAqb3B0czsKKwlzZWMtPm5wc2l6ZXMgPSBucHNpemVzOworCisJLyoKKwkgKiBJ bml0aWFsaXplIHRoZXNlIGxhc3Qgc28gdGhhdCBhbiBpbXByb3BlciB1c2Ugb2YgYW4gU0VDIHdo b3NlCisJICogaW5pdGlhbGl6YXRpb24gZmFpbGVkIHdpbGwgc2VnZmF1bHQgaW4gYW4gZWFzeS10 by1zcG90IHdheS4KKwkgKi8KKwlzZWMtPnBhaS5hbGxvYyA9ICZzZWNfYWxsb2M7CisJc2VjLT5w YWkuYWxsb2NfYmF0Y2ggPSAmcGFpX2FsbG9jX2JhdGNoX2RlZmF1bHQ7CisJc2VjLT5wYWkuZXhw YW5kID0gJnNlY19leHBhbmQ7CisJc2VjLT5wYWkuc2hyaW5rID0gJnNlY19zaHJpbms7CisJc2Vj LT5wYWkuZGFsbG9jID0gJnNlY19kYWxsb2M7CisJc2VjLT5wYWkuZGFsbG9jX2JhdGNoID0gJnBh aV9kYWxsb2NfYmF0Y2hfZGVmYXVsdDsKKworCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIHNl Y19zaGFyZF90ICoKK3NlY19zaGFyZF9waWNrKHRzZG5fdCAqdHNkbiwgc2VjX3QgKnNlYykgewor CS8qCisJICogRXZlbnR1YWxseSwgd2Ugc2hvdWxkIGltcGxlbWVudCBhZmZpbml0eSwgdHJhY2tp bmcgc291cmNlIHNoYXJkIHVzaW5nCisJICogdGhlIGVkYXRhX3QncyBuZXdseSBmcmVlZCB1cCBm aWVsZHMuICBGb3Igbm93LCBqdXN0IHJhbmRvbWx5CisJICogZGlzdHJpYnV0ZSBhY3Jvc3MgYWxs IHNoYXJkcy4KKwkgKi8KKwlpZiAodHNkbl9udWxsKHRzZG4pKSB7CisJCXJldHVybiAmc2VjLT5z aGFyZHNbMF07CisJfQorCXRzZF90ICp0c2QgPSB0c2RuX3RzZCh0c2RuKTsKKwl1aW50OF90ICpp ZHhwID0gdHNkX3NlY19zaGFyZHBfZ2V0KHRzZCk7CisJaWYgKCppZHhwID09ICh1aW50OF90KS0x KSB7CisJCS8qCisJCSAqIEZpcnN0IHVzZTsgaW5pdGlhbGl6ZSB1c2luZyB0aGUgdHJpY2sgZnJv bSBEYW5pZWwgTGVtaXJlJ3MKKwkJICogIkEgZmFzdCBhbHRlcm5hdGl2ZSB0byB0aGUgbW9kdWxv IHJlZHVjdGlvbi4gIFVzZSBhIDY0IGJpdAorCQkgKiBudW1iZXIgdG8gc3RvcmUgMzIgYml0cywg c2luY2Ugd2UnbGwgZGVsaWJlcmF0ZWx5IG92ZXJmbG93CisJCSAqIHdoZW4gd2UgbXVsdGlwbHkg YnkgdGhlIG51bWJlciBvZiBzaGFyZHMuCisJCSAqLworCQl1aW50NjRfdCByYW5kMzIgPSBwcm5n X2xnX3JhbmdlX3U2NCh0c2RfcHJuZ19zdGF0ZXBfZ2V0KHRzZCksIDMyKTsKKwkJdWludDMyX3Qg aWR4ID0KKwkJICAgICh1aW50MzJfdCkoKHJhbmQzMiAqICh1aW50NjRfdClzZWMtPm9wdHMubnNo YXJkcykgPj4gMzIpOworCQlhc3NlcnQoaWR4IDwgKHVpbnQzMl90KXNlYy0+b3B0cy5uc2hhcmRz KTsKKwkJKmlkeHAgPSAodWludDhfdClpZHg7CisJfQorCXJldHVybiAmc2VjLT5zaGFyZHNbKmlk eHBdOworfQorCisvKgorICogUGVyaGFwcyBzdXJwcmlzaW5nbHksIHRoaXMgY2FuIGJlIGNhbGxl ZCBvbiB0aGUgYWxsb2MgcGF0aHdheXM7IGlmIHdlIGhpdCBhbgorICogZW1wdHkgY2FjaGUsIHdl J2xsIHRyeSB0byBmaWxsIGl0LCB3aGljaCBjYW4gcHVzaCB0aGUgc2hhcmQgb3ZlciBpdCdzIGxp bWl0LgorICovCitzdGF0aWMgdm9pZAorc2VjX2ZsdXNoX3NvbWVfYW5kX3VubG9jayh0c2RuX3Qg KnRzZG4sIHNlY190ICpzZWMsIHNlY19zaGFyZF90ICpzaGFyZCkgeworCW1hbGxvY19tdXRleF9h c3NlcnRfb3duZXIodHNkbiwgJnNoYXJkLT5tdHgpOworCWVkYXRhX2xpc3RfYWN0aXZlX3QgdG9f Zmx1c2g7CisJZWRhdGFfbGlzdF9hY3RpdmVfaW5pdCgmdG9fZmx1c2gpOworCXdoaWxlIChzaGFy ZC0+Ynl0ZXNfY3VyID4gc2VjLT5vcHRzLmJ5dGVzX2FmdGVyX2ZsdXNoKSB7CisJCS8qIFBpY2sg YSB2aWN0aW0uICovCisJCXNlY19iaW5fdCAqYmluID0gJnNoYXJkLT5iaW5zW3NoYXJkLT50b19m bHVzaF9uZXh0XTsKKworCQkvKiBVcGRhdGUgb3VyIHZpY3RpbS1waWNraW5nIHN0YXRlLiAqLwor CQlzaGFyZC0+dG9fZmx1c2hfbmV4dCsrOworCQlpZiAoc2hhcmQtPnRvX2ZsdXNoX25leHQgPT0g c2VjLT5ucHNpemVzKSB7CisJCQlzaGFyZC0+dG9fZmx1c2hfbmV4dCA9IDA7CisJCX0KKworCQlh c3NlcnQoc2hhcmQtPmJ5dGVzX2N1ciA+PSBiaW4tPmJ5dGVzX2N1cik7CisJCWlmIChiaW4tPmJ5 dGVzX2N1ciAhPSAwKSB7CisJCQlzaGFyZC0+Ynl0ZXNfY3VyIC09IGJpbi0+Ynl0ZXNfY3VyOwor CQkJYmluLT5ieXRlc19jdXIgPSAwOworCQkJZWRhdGFfbGlzdF9hY3RpdmVfY29uY2F0KCZ0b19m bHVzaCwgJmJpbi0+ZnJlZWxpc3QpOworCQl9CisJCS8qCisJCSAqIEVpdGhlciBiaW4tPmJ5dGVz X2N1ciB3YXMgMCwgaW4gd2hpY2ggY2FzZSB3ZSBkaWRuJ3QgdG91Y2gKKwkJICogdGhlIGJpbiBs aXN0IGJ1dCBpdCBzaG91bGQgYmUgZW1wdHkgYW55d2F5cyAob3IgZWxzZSB3ZQorCQkgKiBtaXNz ZWQgYSBieXRlc19jdXIgdXBkYXRlIG9uIGEgbGlzdCBtb2RpZmljYXRpb24pLCBvciBpdAorCQkg KiAqd2FzKiAwIGFuZCB3ZSBlbXB0aWVkIGl0IG91cnNlbHZlcy4gIEVpdGhlciB3YXksIGl0IHNo b3VsZAorCQkgKiBiZSBlbXB0eSBub3cuCisJCSAqLworCQlhc3NlcnQoZWRhdGFfbGlzdF9hY3Rp dmVfZW1wdHkoJmJpbi0+ZnJlZWxpc3QpKTsKKwl9CisKKwltYWxsb2NfbXV0ZXhfdW5sb2NrKHRz ZG4sICZzaGFyZC0+bXR4KTsKKwlib29sIGRlZmVycmVkX3dvcmtfZ2VuZXJhdGVkID0gZmFsc2U7 CisJcGFpX2RhbGxvY19iYXRjaCh0c2RuLCBzZWMtPmZhbGxiYWNrLCAmdG9fZmx1c2gsCisJICAg ICZkZWZlcnJlZF93b3JrX2dlbmVyYXRlZCk7Cit9CisKK3N0YXRpYyBlZGF0YV90ICoKK3NlY19z aGFyZF9hbGxvY19sb2NrZWQodHNkbl90ICp0c2RuLCBzZWNfdCAqc2VjLCBzZWNfc2hhcmRfdCAq c2hhcmQsCisgICAgc2VjX2Jpbl90ICpiaW4pIHsKKwltYWxsb2NfbXV0ZXhfYXNzZXJ0X293bmVy KHRzZG4sICZzaGFyZC0+bXR4KTsKKwlpZiAoIXNoYXJkLT5lbmFibGVkKSB7CisJCXJldHVybiBO VUxMOworCX0KKwllZGF0YV90ICplZGF0YSA9IGVkYXRhX2xpc3RfYWN0aXZlX2ZpcnN0KCZiaW4t PmZyZWVsaXN0KTsKKwlpZiAoZWRhdGEgIT0gTlVMTCkgeworCQllZGF0YV9saXN0X2FjdGl2ZV9y ZW1vdmUoJmJpbi0+ZnJlZWxpc3QsIGVkYXRhKTsKKwkJYXNzZXJ0KGVkYXRhX3NpemVfZ2V0KGVk YXRhKSA8PSBiaW4tPmJ5dGVzX2N1cik7CisJCWJpbi0+Ynl0ZXNfY3VyIC09IGVkYXRhX3NpemVf Z2V0KGVkYXRhKTsKKwkJYXNzZXJ0KGVkYXRhX3NpemVfZ2V0KGVkYXRhKSA8PSBzaGFyZC0+Ynl0 ZXNfY3VyKTsKKwkJc2hhcmQtPmJ5dGVzX2N1ciAtPSBlZGF0YV9zaXplX2dldChlZGF0YSk7CisJ fQorCXJldHVybiBlZGF0YTsKK30KKworc3RhdGljIGVkYXRhX3QgKgorc2VjX2JhdGNoX2ZpbGxf YW5kX2FsbG9jKHRzZG5fdCAqdHNkbiwgc2VjX3QgKnNlYywgc2VjX3NoYXJkX3QgKnNoYXJkLAor ICAgIHNlY19iaW5fdCAqYmluLCBzaXplX3Qgc2l6ZSkgeworCW1hbGxvY19tdXRleF9hc3NlcnRf bm90X293bmVyKHRzZG4sICZzaGFyZC0+bXR4KTsKKworCWVkYXRhX2xpc3RfYWN0aXZlX3QgcmVz dWx0OworCWVkYXRhX2xpc3RfYWN0aXZlX2luaXQoJnJlc3VsdCk7CisJYm9vbCBkZWZlcnJlZF93 b3JrX2dlbmVyYXRlZCA9IGZhbHNlOworCXNpemVfdCBuYWxsb2MgPSBwYWlfYWxsb2NfYmF0Y2go dHNkbiwgc2VjLT5mYWxsYmFjaywgc2l6ZSwKKwkgICAgMSArIHNlYy0+b3B0cy5iYXRjaF9maWxs X2V4dHJhLCAmcmVzdWx0LCAmZGVmZXJyZWRfd29ya19nZW5lcmF0ZWQpOworCisJZWRhdGFfdCAq cmV0ID0gZWRhdGFfbGlzdF9hY3RpdmVfZmlyc3QoJnJlc3VsdCk7CisJaWYgKHJldCAhPSBOVUxM KSB7CisJCWVkYXRhX2xpc3RfYWN0aXZlX3JlbW92ZSgmcmVzdWx0LCByZXQpOworCX0KKworCW1h bGxvY19tdXRleF9sb2NrKHRzZG4sICZzaGFyZC0+bXR4KTsKKwliaW4tPmJlaW5nX2JhdGNoX2Zp bGxlZCA9IGZhbHNlOworCS8qCisJICogSGFuZGxlIHRoZSBlYXN5IGNhc2UgZmlyc3Q6IG5vdGhp bmcgdG8gY2FjaGUuICBOb3RlIHRoYXQgdGhpcyBjYW4KKwkgKiBvbmx5IGhhcHBlbiBpbiBjYXNl IG9mIE9PTSwgc2luY2Ugc2VjX2FsbG9jIGNoZWNrcyB0aGUgZXhwZWN0ZWQKKwkgKiBudW1iZXIg b2YgYWxsb2NzLCBhbmQgZG9lc24ndCBib3RoZXIgZ29pbmcgZG93biB0aGUgYmF0Y2hfZmlsbAor CSAqIHBhdGh3YXkgaWYgdGhlcmUgd29uJ3QgYmUgYW55dGhpbmcgbGVmdCB0byBjYWNoZS4gIFNv IHRvIGJlIGluIHRoaXMKKwkgKiBjb2RlIHBhdGgsIHdlIG11c3QgaGF2ZSBhc2tlZCBmb3IgPiAx IGFsbG9jLCBidXQgb25seSBnb3R0ZW4gMSBiYWNrLgorCSAqLworCWlmIChuYWxsb2MgPD0gMSkg eworCQltYWxsb2NfbXV0ZXhfdW5sb2NrKHRzZG4sICZzaGFyZC0+bXR4KTsKKwkJcmV0dXJuIHJl dDsKKwl9CisKKwlzaXplX3QgbmV3X2NhY2hlZF9ieXRlcyA9IChuYWxsb2MgLSAxKSAqIHNpemU7 CisKKwllZGF0YV9saXN0X2FjdGl2ZV9jb25jYXQoJmJpbi0+ZnJlZWxpc3QsICZyZXN1bHQpOwor CWJpbi0+Ynl0ZXNfY3VyICs9IG5ld19jYWNoZWRfYnl0ZXM7CisJc2hhcmQtPmJ5dGVzX2N1ciAr PSBuZXdfY2FjaGVkX2J5dGVzOworCisJaWYgKHNoYXJkLT5ieXRlc19jdXIgPiBzZWMtPm9wdHMu bWF4X2J5dGVzKSB7CisJCXNlY19mbHVzaF9zb21lX2FuZF91bmxvY2sodHNkbiwgc2VjLCBzaGFy ZCk7CisJfSBlbHNlIHsKKwkJbWFsbG9jX211dGV4X3VubG9jayh0c2RuLCAmc2hhcmQtPm10eCk7 CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGVkYXRhX3QgKgorc2VjX2FsbG9jKHRz ZG5fdCAqdHNkbiwgcGFpX3QgKnNlbGYsIHNpemVfdCBzaXplLCBzaXplX3QgYWxpZ25tZW50LCBi b29sIHplcm8sCisgICAgYm9vbCBndWFyZGVkLCBib29sIGZyZXF1ZW50X3JldXNlLCBib29sICpk ZWZlcnJlZF93b3JrX2dlbmVyYXRlZCkgeworCWFzc2VydCgoc2l6ZSAmIFBBR0VfTUFTSykgPT0g MCk7CisJYXNzZXJ0KCFndWFyZGVkKTsKKworCXNlY190ICpzZWMgPSAoc2VjX3QgKilzZWxmOwor CisJaWYgKHplcm8gfHwgYWxpZ25tZW50ID4gUEFHRSB8fCBzZWMtPm9wdHMubnNoYXJkcyA9PSAw CisJICAgIHx8IHNpemUgPiBzZWMtPm9wdHMubWF4X2FsbG9jKSB7CisJCXJldHVybiBwYWlfYWxs b2ModHNkbiwgc2VjLT5mYWxsYmFjaywgc2l6ZSwgYWxpZ25tZW50LCB6ZXJvLAorCQkgICAgLyog Z3VhcmRlZCAqLyBmYWxzZSwgZnJlcXVlbnRfcmV1c2UsCisJCSAgICBkZWZlcnJlZF93b3JrX2dl bmVyYXRlZCk7CisJfQorCXBzemluZF90IHBzemluZCA9IHN6X3BzejJpbmQoc2l6ZSk7CisJYXNz ZXJ0KHBzemluZCA8IHNlYy0+bnBzaXplcyk7CisKKwlzZWNfc2hhcmRfdCAqc2hhcmQgPSBzZWNf c2hhcmRfcGljayh0c2RuLCBzZWMpOworCXNlY19iaW5fdCAqYmluID0gJnNoYXJkLT5iaW5zW3Bz emluZF07CisJYm9vbCBkb19iYXRjaF9maWxsID0gZmFsc2U7CisKKwltYWxsb2NfbXV0ZXhfbG9j ayh0c2RuLCAmc2hhcmQtPm10eCk7CisJZWRhdGFfdCAqZWRhdGEgPSBzZWNfc2hhcmRfYWxsb2Nf bG9ja2VkKHRzZG4sIHNlYywgc2hhcmQsIGJpbik7CisJaWYgKGVkYXRhID09IE5VTEwpIHsKKwkJ aWYgKCFiaW4tPmJlaW5nX2JhdGNoX2ZpbGxlZAorCQkgICAgJiYgc2VjLT5vcHRzLmJhdGNoX2Zp bGxfZXh0cmEgPiAwKSB7CisJCQliaW4tPmJlaW5nX2JhdGNoX2ZpbGxlZCA9IHRydWU7CisJCQlk b19iYXRjaF9maWxsID0gdHJ1ZTsKKwkJfQorCX0KKwltYWxsb2NfbXV0ZXhfdW5sb2NrKHRzZG4s ICZzaGFyZC0+bXR4KTsKKwlpZiAoZWRhdGEgPT0gTlVMTCkgeworCQlpZiAoZG9fYmF0Y2hfZmls bCkgeworCQkJZWRhdGEgPSBzZWNfYmF0Y2hfZmlsbF9hbmRfYWxsb2ModHNkbiwgc2VjLCBzaGFy ZCwgYmluLAorCQkJICAgIHNpemUpOworCQl9IGVsc2UgeworCQkJZWRhdGEgPSBwYWlfYWxsb2Mo dHNkbiwgc2VjLT5mYWxsYmFjaywgc2l6ZSwgYWxpZ25tZW50LAorCQkJICAgIHplcm8sIC8qIGd1 YXJkZWQgKi8gZmFsc2UsIGZyZXF1ZW50X3JldXNlLAorCQkJICAgIGRlZmVycmVkX3dvcmtfZ2Vu ZXJhdGVkKTsKKwkJfQorCX0KKwlyZXR1cm4gZWRhdGE7Cit9CisKK3N0YXRpYyBib29sCitzZWNf ZXhwYW5kKHRzZG5fdCAqdHNkbiwgcGFpX3QgKnNlbGYsIGVkYXRhX3QgKmVkYXRhLCBzaXplX3Qg b2xkX3NpemUsCisgICAgc2l6ZV90IG5ld19zaXplLCBib29sIHplcm8sIGJvb2wgKmRlZmVycmVk X3dvcmtfZ2VuZXJhdGVkKSB7CisJc2VjX3QgKnNlYyA9IChzZWNfdCAqKXNlbGY7CisJcmV0dXJu IHBhaV9leHBhbmQodHNkbiwgc2VjLT5mYWxsYmFjaywgZWRhdGEsIG9sZF9zaXplLCBuZXdfc2l6 ZSwgemVybywKKwkgICAgZGVmZXJyZWRfd29ya19nZW5lcmF0ZWQpOworfQorCitzdGF0aWMgYm9v bAorc2VjX3Nocmluayh0c2RuX3QgKnRzZG4sIHBhaV90ICpzZWxmLCBlZGF0YV90ICplZGF0YSwg c2l6ZV90IG9sZF9zaXplLAorICAgIHNpemVfdCBuZXdfc2l6ZSwgYm9vbCAqZGVmZXJyZWRfd29y a19nZW5lcmF0ZWQpIHsKKwlzZWNfdCAqc2VjID0gKHNlY190ICopc2VsZjsKKwlyZXR1cm4gcGFp X3Nocmluayh0c2RuLCBzZWMtPmZhbGxiYWNrLCBlZGF0YSwgb2xkX3NpemUsIG5ld19zaXplLAor CSAgICBkZWZlcnJlZF93b3JrX2dlbmVyYXRlZCk7Cit9CisKK3N0YXRpYyB2b2lkCitzZWNfZmx1 c2hfYWxsX2xvY2tlZCh0c2RuX3QgKnRzZG4sIHNlY190ICpzZWMsIHNlY19zaGFyZF90ICpzaGFy ZCkgeworCW1hbGxvY19tdXRleF9hc3NlcnRfb3duZXIodHNkbiwgJnNoYXJkLT5tdHgpOworCXNo YXJkLT5ieXRlc19jdXIgPSAwOworCWVkYXRhX2xpc3RfYWN0aXZlX3QgdG9fZmx1c2g7CisJZWRh dGFfbGlzdF9hY3RpdmVfaW5pdCgmdG9fZmx1c2gpOworCWZvciAocHN6aW5kX3QgaSA9IDA7IGkg PCBzZWMtPm5wc2l6ZXM7IGkrKykgeworCQlzZWNfYmluX3QgKmJpbiA9ICZzaGFyZC0+Ymluc1tp XTsKKwkJYmluLT5ieXRlc19jdXIgPSAwOworCQllZGF0YV9saXN0X2FjdGl2ZV9jb25jYXQoJnRv X2ZsdXNoLCAmYmluLT5mcmVlbGlzdCk7CisJfQorCisJLyoKKwkgKiBPcmRpbmFyaWx5IHdlIHdv dWxkIHRyeSB0byBhdm9pZCBkb2luZyB0aGUgYmF0Y2ggZGVhbGxvY2F0aW9uIHdoaWxlCisJICog aG9sZGluZyB0aGUgc2hhcmQgbXV0ZXgsIGJ1dCB0aGUgZmx1c2hfYWxsIHBhdGh3YXlzIG9ubHkg aGFwcGVuIHdoZW4KKwkgKiB3ZSdyZSBkaXNhYmxpbmcgdGhlIEhQQSBvciByZXNldHRpbmcgdGhl IGFyZW5hLCBib3RoIG9mIHdoaWNoIGFyZQorCSAqIHJhcmUgcGF0aHdheXMuCisJICovCisJYm9v bCBkZWZlcnJlZF93b3JrX2dlbmVyYXRlZCA9IGZhbHNlOworCXBhaV9kYWxsb2NfYmF0Y2godHNk biwgc2VjLT5mYWxsYmFjaywgJnRvX2ZsdXNoLAorCSAgICAmZGVmZXJyZWRfd29ya19nZW5lcmF0 ZWQpOworfQorCitzdGF0aWMgdm9pZAorc2VjX3NoYXJkX2RhbGxvY19hbmRfdW5sb2NrKHRzZG5f dCAqdHNkbiwgc2VjX3QgKnNlYywgc2VjX3NoYXJkX3QgKnNoYXJkLAorICAgIGVkYXRhX3QgKmVk YXRhKSB7CisJbWFsbG9jX211dGV4X2Fzc2VydF9vd25lcih0c2RuLCAmc2hhcmQtPm10eCk7CisJ YXNzZXJ0KHNoYXJkLT5ieXRlc19jdXIgPD0gc2VjLT5vcHRzLm1heF9ieXRlcyk7CisJc2l6ZV90 IHNpemUgPSBlZGF0YV9zaXplX2dldChlZGF0YSk7CisJcHN6aW5kX3QgcHN6aW5kID0gc3pfcHN6 MmluZChzaXplKTsKKwlhc3NlcnQocHN6aW5kIDwgc2VjLT5ucHNpemVzKTsKKwkvKgorCSAqIFBy ZXBlbmRpbmcgaGVyZSByZXN1bHRzIGluIExJRk8gYWxsb2NhdGlvbiBwZXIgYmluLCB3aGljaCBz ZWVtcworCSAqIHJlYXNvbmFibGUuCisJICovCisJc2VjX2Jpbl90ICpiaW4gPSAmc2hhcmQtPmJp bnNbcHN6aW5kXTsKKwllZGF0YV9saXN0X2FjdGl2ZV9wcmVwZW5kKCZiaW4tPmZyZWVsaXN0LCBl ZGF0YSk7CisJYmluLT5ieXRlc19jdXIgKz0gc2l6ZTsKKwlzaGFyZC0+Ynl0ZXNfY3VyICs9IHNp emU7CisJaWYgKHNoYXJkLT5ieXRlc19jdXIgPiBzZWMtPm9wdHMubWF4X2J5dGVzKSB7CisJCS8q CisJCSAqIFdlJ3ZlIGV4Y2VlZGVkIHRoZSBzaGFyZCBsaW1pdC4gIFdlIG1ha2UgdHdvIG5vZHMg aW4gdGhlCisJCSAqIGRpcmVjdGlvbiBvZiBmcmFnbWVudGF0aW9uIGF2b2lkYW5jZTogd2UgZmx1 c2ggZXZlcnl0aGluZyBpbgorCQkgKiB0aGUgc2hhcmQsIHJhdGhlciB0aGFuIG9uZSBwYXJ0aWN1 bGFyIGJpbiwgYW5kIHdlIGhvbGQgdGhlCisJCSAqIGxvY2sgd2hpbGUgZmx1c2hpbmcgKGluIGNh c2Ugb25lIG9mIHRoZSBleHRlbnRzIHdlIGZsdXNoIGlzCisJCSAqIGhpZ2hseSBwcmVmZXJyZWQg ZnJvbSBhIGZyYWdtZW50YXRpb24tYXZvaWRhbmNlIHBlcnNwZWN0aXZlCisJCSAqIGluIHRoZSBi YWNraW5nIGFsbG9jYXRvcikuICBUaGlzIGhhcyB0aGUgZXh0cmEgYWR2YW50YWdlIG9mCisJCSAq IG5vdCByZXF1aXJpbmcgYWR2YW5jZWQgY2FjaGUgYmFsYW5jaW5nIHN0cmF0ZWdpZXMuCisJCSAq LworCQlzZWNfZmx1c2hfc29tZV9hbmRfdW5sb2NrKHRzZG4sIHNlYywgc2hhcmQpOworCQltYWxs b2NfbXV0ZXhfYXNzZXJ0X25vdF9vd25lcih0c2RuLCAmc2hhcmQtPm10eCk7CisJfSBlbHNlIHsK KwkJbWFsbG9jX211dGV4X3VubG9jayh0c2RuLCAmc2hhcmQtPm10eCk7CisJfQorfQorCitzdGF0 aWMgdm9pZAorc2VjX2RhbGxvYyh0c2RuX3QgKnRzZG4sIHBhaV90ICpzZWxmLCBlZGF0YV90ICpl ZGF0YSwKKyAgICBib29sICpkZWZlcnJlZF93b3JrX2dlbmVyYXRlZCkgeworCXNlY190ICpzZWMg PSAoc2VjX3QgKilzZWxmOworCWlmIChzZWMtPm9wdHMubnNoYXJkcyA9PSAwCisJICAgIHx8IGVk YXRhX3NpemVfZ2V0KGVkYXRhKSA+IHNlYy0+b3B0cy5tYXhfYWxsb2MpIHsKKwkJcGFpX2RhbGxv Yyh0c2RuLCBzZWMtPmZhbGxiYWNrLCBlZGF0YSwKKwkJICAgIGRlZmVycmVkX3dvcmtfZ2VuZXJh dGVkKTsKKwkJcmV0dXJuOworCX0KKwlzZWNfc2hhcmRfdCAqc2hhcmQgPSBzZWNfc2hhcmRfcGlj ayh0c2RuLCBzZWMpOworCW1hbGxvY19tdXRleF9sb2NrKHRzZG4sICZzaGFyZC0+bXR4KTsKKwlp ZiAoc2hhcmQtPmVuYWJsZWQpIHsKKwkJc2VjX3NoYXJkX2RhbGxvY19hbmRfdW5sb2NrKHRzZG4s IHNlYywgc2hhcmQsIGVkYXRhKTsKKwl9IGVsc2UgeworCQltYWxsb2NfbXV0ZXhfdW5sb2NrKHRz ZG4sICZzaGFyZC0+bXR4KTsKKwkJcGFpX2RhbGxvYyh0c2RuLCBzZWMtPmZhbGxiYWNrLCBlZGF0 YSwKKwkJICAgIGRlZmVycmVkX3dvcmtfZ2VuZXJhdGVkKTsKKwl9Cit9CisKK3ZvaWQKK3NlY19m bHVzaCh0c2RuX3QgKnRzZG4sIHNlY190ICpzZWMpIHsKKwlmb3IgKHNpemVfdCBpID0gMDsgaSA8 IHNlYy0+b3B0cy5uc2hhcmRzOyBpKyspIHsKKwkJbWFsbG9jX211dGV4X2xvY2sodHNkbiwgJnNl Yy0+c2hhcmRzW2ldLm10eCk7CisJCXNlY19mbHVzaF9hbGxfbG9ja2VkKHRzZG4sIHNlYywgJnNl Yy0+c2hhcmRzW2ldKTsKKwkJbWFsbG9jX211dGV4X3VubG9jayh0c2RuLCAmc2VjLT5zaGFyZHNb aV0ubXR4KTsKKwl9Cit9CisKK3ZvaWQKK3NlY19kaXNhYmxlKHRzZG5fdCAqdHNkbiwgc2VjX3Qg KnNlYykgeworCWZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2VjLT5vcHRzLm5zaGFyZHM7IGkrKykg eworCQltYWxsb2NfbXV0ZXhfbG9jayh0c2RuLCAmc2VjLT5zaGFyZHNbaV0ubXR4KTsKKwkJc2Vj LT5zaGFyZHNbaV0uZW5hYmxlZCA9IGZhbHNlOworCQlzZWNfZmx1c2hfYWxsX2xvY2tlZCh0c2Ru LCBzZWMsICZzZWMtPnNoYXJkc1tpXSk7CisJCW1hbGxvY19tdXRleF91bmxvY2sodHNkbiwgJnNl Yy0+c2hhcmRzW2ldLm10eCk7CisJfQorfQorCit2b2lkCitzZWNfc3RhdHNfbWVyZ2UodHNkbl90 ICp0c2RuLCBzZWNfdCAqc2VjLCBzZWNfc3RhdHNfdCAqc3RhdHMpIHsKKwlzaXplX3Qgc3VtID0g MDsKKwlmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNlYy0+b3B0cy5uc2hhcmRzOyBpKyspIHsKKwkJ LyoKKwkJICogV2UgY291bGQgc2F2ZSB0aGVzZSBsb2NrIGFjcXVpc2l0aW9ucyBieSBtYWtpbmcg Ynl0ZXNfY3VyCisJCSAqIGF0b21pYywgYnV0IHN0YXRzIGNvbGxlY3Rpb24gaXMgcmFyZSBhbnl3 YXlzIGFuZCB3ZSBleHBlY3QKKwkJICogdGhlIG51bWJlciBhbmQgdHlwZSBvZiBzdGF0cyB0byBn ZXQgbW9yZSBpbnRlcmVzdGluZy4KKwkJICovCisJCW1hbGxvY19tdXRleF9sb2NrKHRzZG4sICZz ZWMtPnNoYXJkc1tpXS5tdHgpOworCQlzdW0gKz0gc2VjLT5zaGFyZHNbaV0uYnl0ZXNfY3VyOwor CQltYWxsb2NfbXV0ZXhfdW5sb2NrKHRzZG4sICZzZWMtPnNoYXJkc1tpXS5tdHgpOworCX0KKwlz dGF0cy0+Ynl0ZXMgKz0gc3VtOworfQorCit2b2lkCitzZWNfbXV0ZXhfc3RhdHNfcmVhZCh0c2Ru X3QgKnRzZG4sIHNlY190ICpzZWMsCisgICAgbXV0ZXhfcHJvZl9kYXRhX3QgKm11dGV4X3Byb2Zf ZGF0YSkgeworCWZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2VjLT5vcHRzLm5zaGFyZHM7IGkrKykg eworCQltYWxsb2NfbXV0ZXhfbG9jayh0c2RuLCAmc2VjLT5zaGFyZHNbaV0ubXR4KTsKKwkJbWFs bG9jX211dGV4X3Byb2ZfYWNjdW0odHNkbiwgbXV0ZXhfcHJvZl9kYXRhLAorCQkgICAgJnNlYy0+ c2hhcmRzW2ldLm10eCk7CisJCW1hbGxvY19tdXRleF91bmxvY2sodHNkbiwgJnNlYy0+c2hhcmRz W2ldLm10eCk7CisJfQorfQorCit2b2lkCitzZWNfcHJlZm9yazIodHNkbl90ICp0c2RuLCBzZWNf dCAqc2VjKSB7CisJZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzZWMtPm9wdHMubnNoYXJkczsgaSsr KSB7CisJCW1hbGxvY19tdXRleF9wcmVmb3JrKHRzZG4sICZzZWMtPnNoYXJkc1tpXS5tdHgpOwor CX0KK30KKwordm9pZAorc2VjX3Bvc3Rmb3JrX3BhcmVudCh0c2RuX3QgKnRzZG4sIHNlY190ICpz ZWMpIHsKKwlmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNlYy0+b3B0cy5uc2hhcmRzOyBpKyspIHsK KwkJbWFsbG9jX211dGV4X3Bvc3Rmb3JrX3BhcmVudCh0c2RuLCAmc2VjLT5zaGFyZHNbaV0ubXR4 KTsKKwl9Cit9CisKK3ZvaWQKK3NlY19wb3N0Zm9ya19jaGlsZCh0c2RuX3QgKnRzZG4sIHNlY190 ICpzZWMpIHsKKwlmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNlYy0+b3B0cy5uc2hhcmRzOyBpKysp IHsKKwkJbWFsbG9jX211dGV4X3Bvc3Rmb3JrX2NoaWxkKHRzZG4sICZzZWMtPnNoYXJkc1tpXS5t dHgpOworCX0KK30KCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxv Yy01LjMuMC9zcmMvc3RhdHMuYyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUu My4wL3NyYy9zdGF0cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmYzcw ZmQKLS0tIC9kZXYvbnVsbAorKysgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01 LjMuMC9zcmMvc3RhdHMuYwpAQCAtMCwwICsxLDE5NzMgQEAKKyNpbmNsdWRlICJqZW1hbGxvYy9p bnRlcm5hbC9qZW1hbGxvY19wcmVhbWJsZS5oIgorI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFs L2plbWFsbG9jX2ludGVybmFsX2luY2x1ZGVzLmgiCisKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRl cm5hbC9hc3NlcnQuaCIKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9jdGwuaCIKKyNpbmNs dWRlICJqZW1hbGxvYy9pbnRlcm5hbC9lbWl0dGVyLmgiCisjaW5jbHVkZSAiamVtYWxsb2MvaW50 ZXJuYWwvZnhwLmgiCisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvbXV0ZXguaCIKKyNpbmNs dWRlICJqZW1hbGxvYy9pbnRlcm5hbC9tdXRleF9wcm9mLmgiCisjaW5jbHVkZSAiamVtYWxsb2Mv aW50ZXJuYWwvcHJvZl9zdGF0cy5oIgorCitjb25zdCBjaGFyICpnbG9iYWxfbXV0ZXhfbmFtZXNb bXV0ZXhfcHJvZl9udW1fZ2xvYmFsX211dGV4ZXNdID0geworI2RlZmluZSBPUChtdHgpICNtdHgs CisJTVVURVhfUFJPRl9HTE9CQUxfTVVURVhFUworI3VuZGVmIE9QCit9OworCitjb25zdCBjaGFy ICphcmVuYV9tdXRleF9uYW1lc1ttdXRleF9wcm9mX251bV9hcmVuYV9tdXRleGVzXSA9IHsKKyNk ZWZpbmUgT1AobXR4KSAjbXR4LAorCU1VVEVYX1BST0ZfQVJFTkFfTVVURVhFUworI3VuZGVmIE9Q Cit9OworCisjZGVmaW5lIENUTF9HRVQobiwgdiwgdCkgZG8gewkJCQkJCVwKKwlzaXplX3Qgc3og PSBzaXplb2YodCk7CQkJCQkJXAorCXhtYWxsY3RsKG4sICh2b2lkICopdiwgJnN6LCBOVUxMLCAw KTsJCQkJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBDVExfTEVBRl9QUkVQQVJFKG1pYiwgbWli bGVuLCBuYW1lKSBkbyB7CQkJXAorCWFzc2VydChtaWJsZW4gPCBDVExfTUFYX0RFUFRIKTsJCQkJ CVwKKwlzaXplX3QgbWlibGVuX25ldyA9IENUTF9NQVhfREVQVEg7CQkJCVwKKwl4bWFsbGN0bG1p Ym5hbWV0b21pYihtaWIsIG1pYmxlbiwgbmFtZSwgJm1pYmxlbl9uZXcpOwkJXAorCWFzc2VydCht aWJsZW5fbmV3ID4gbWlibGVuKTsJCQkJCVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgQ1RMX0xF QUYobWliLCBtaWJsZW4sIGxlYWYsIHYsIHQpIGRvIHsJCQlcCisJYXNzZXJ0KG1pYmxlbiA8IENU TF9NQVhfREVQVEgpOwkJCQkJXAorCXNpemVfdCBtaWJsZW5fbmV3ID0gQ1RMX01BWF9ERVBUSDsJ CQkJXAorCXNpemVfdCBzeiA9IHNpemVvZih0KTsJCQkJCQlcCisJeG1hbGxjdGxieW1pYm5hbWUo bWliLCBtaWJsZW4sIGxlYWYsICZtaWJsZW5fbmV3LCAodm9pZCAqKXYsCVwKKwkgICAgJnN6LCBO VUxMLCAwKTsJCQkJCQlcCisJYXNzZXJ0KG1pYmxlbl9uZXcgPT0gbWlibGVuICsgMSk7CQkJCVwK K30gd2hpbGUgKDApCisKKyNkZWZpbmUgQ1RMX00yX0dFVChuLCBpLCB2LCB0KSBkbyB7CQkJCQlc CisJc2l6ZV90IG1pYltDVExfTUFYX0RFUFRIXTsJCQkJCVwKKwlzaXplX3QgbWlibGVuID0gc2l6 ZW9mKG1pYikgLyBzaXplb2Yoc2l6ZV90KTsJCQlcCisJc2l6ZV90IHN6ID0gc2l6ZW9mKHQpOwkJ CQkJCVwKKwl4bWFsbGN0bG5hbWV0b21pYihuLCBtaWIsICZtaWJsZW4pOwkJCQlcCisJbWliWzJd ID0gKGkpOwkJCQkJCQlcCisJeG1hbGxjdGxieW1pYihtaWIsIG1pYmxlbiwgKHZvaWQgKil2LCAm c3osIE5VTEwsIDApOwkJXAorfSB3aGlsZSAoMCkKKworLyoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8K Ky8qIERhdGEuICovCisKK2Jvb2wgb3B0X3N0YXRzX3ByaW50ID0gZmFsc2U7CitjaGFyIG9wdF9z dGF0c19wcmludF9vcHRzW3N0YXRzX3ByaW50X3RvdF9udW1fb3B0aW9ucysxXSA9ICIiOworCitp bnQ2NF90IG9wdF9zdGF0c19pbnRlcnZhbCA9IFNUQVRTX0lOVEVSVkFMX0RFRkFVTFQ7CitjaGFy IG9wdF9zdGF0c19pbnRlcnZhbF9vcHRzW3N0YXRzX3ByaW50X3RvdF9udW1fb3B0aW9ucysxXSA9 ICIiOworCitzdGF0aWMgY291bnRlcl9hY2N1bV90IHN0YXRzX2ludGVydmFsX2FjY3VtdWxhdGVk OworLyogUGVyIHRocmVhZCBiYXRjaCBhY2N1bSBzaXplIGZvciBzdGF0c19pbnRlcnZhbC4gKi8K K3N0YXRpYyB1aW50NjRfdCBzdGF0c19pbnRlcnZhbF9hY2N1bV9iYXRjaDsKKworLyoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKi8KKworc3RhdGljIHVpbnQ2NF90CityYXRlX3Blcl9zZWNvbmQodWludDY0 X3QgdmFsdWUsIHVpbnQ2NF90IHVwdGltZV9ucykgeworCXVpbnQ2NF90IGJpbGxpb24gPSAxMDAw MDAwMDAwOworCWlmICh1cHRpbWVfbnMgPT0gMCB8fCB2YWx1ZSA9PSAwKSB7CisJCXJldHVybiAw OworCX0KKwlpZiAodXB0aW1lX25zIDwgYmlsbGlvbikgeworCQlyZXR1cm4gdmFsdWU7CisJfSBl bHNlIHsKKwkJdWludDY0X3QgdXB0aW1lX3MgPSB1cHRpbWVfbnMgLyBiaWxsaW9uOworCQlyZXR1 cm4gdmFsdWUgLyB1cHRpbWVfczsKKwl9Cit9CisKKy8qIENhbGN1bGF0ZSB4Lnl5eSBhbmQgb3V0 cHV0IGEgc3RyaW5nICh0YWtlcyBhIGZpeGVkIHNpemVkIGNoYXIgYXJyYXkpLiAqLworc3RhdGlj IGJvb2wKK2dldF9yYXRlX3N0cih1aW50NjRfdCBkaXZpZGVuZCwgdWludDY0X3QgZGl2aXNvciwg Y2hhciBzdHJbNl0pIHsKKwlpZiAoZGl2aXNvciA9PSAwIHx8IGRpdmlkZW5kID4gZGl2aXNvcikg eworCQkvKiBUaGUgcmF0ZSBpcyBub3Qgc3VwcG9zZWQgdG8gYmUgZ3JlYXRlciB0aGFuIDEuICov CisJCXJldHVybiB0cnVlOworCX0KKwlpZiAoZGl2aWRlbmQgPiAwKSB7CisJCWFzc2VydChVSU5U NjRfTUFYIC8gZGl2aWRlbmQgPj0gMTAwMCk7CisJfQorCisJdW5zaWduZWQgbiA9ICh1bnNpZ25l ZCkoKGRpdmlkZW5kICogMTAwMCkgLyBkaXZpc29yKTsKKwlpZiAobiA8IDEwKSB7CisJCW1hbGxv Y19zbnByaW50ZihzdHIsIDYsICIwLjAwJXUiLCBuKTsKKwl9IGVsc2UgaWYgKG4gPCAxMDApIHsK KwkJbWFsbG9jX3NucHJpbnRmKHN0ciwgNiwgIjAuMCV1Iiwgbik7CisJfSBlbHNlIGlmIChuIDwg MTAwMCkgeworCQltYWxsb2Nfc25wcmludGYoc3RyLCA2LCAiMC4ldSIsIG4pOworCX0gZWxzZSB7 CisJCW1hbGxvY19zbnByaW50ZihzdHIsIDYsICIxIik7CisJfQorCisJcmV0dXJuIGZhbHNlOwor fQorCitzdGF0aWMgdm9pZAorbXV0ZXhfc3RhdHNfaW5pdF9jb2xzKGVtaXR0ZXJfcm93X3QgKnJv dywgY29uc3QgY2hhciAqdGFibGVfbmFtZSwKKyAgICBlbWl0dGVyX2NvbF90ICpuYW1lLAorICAg IGVtaXR0ZXJfY29sX3QgY29sX3VpbnQ2NF90W211dGV4X3Byb2ZfbnVtX3VpbnQ2NF90X2NvdW50 ZXJzXSwKKyAgICBlbWl0dGVyX2NvbF90IGNvbF91aW50MzJfdFttdXRleF9wcm9mX251bV91aW50 MzJfdF9jb3VudGVyc10pIHsKKwltdXRleF9wcm9mX3VpbnQ2NF90X2NvdW50ZXJfaW5kX3Qga191 aW50NjRfdCA9IDA7CisJbXV0ZXhfcHJvZl91aW50MzJfdF9jb3VudGVyX2luZF90IGtfdWludDMy X3QgPSAwOworCisJZW1pdHRlcl9jb2xfdCAqY29sOworCisJaWYgKG5hbWUgIT0gTlVMTCkgewor CQllbWl0dGVyX2NvbF9pbml0KG5hbWUsIHJvdyk7CisJCW5hbWUtPmp1c3RpZnkgPSBlbWl0dGVy X2p1c3RpZnlfbGVmdDsKKwkJbmFtZS0+d2lkdGggPSAyMTsKKwkJbmFtZS0+dHlwZSA9IGVtaXR0 ZXJfdHlwZV90aXRsZTsKKwkJbmFtZS0+c3RyX3ZhbCA9IHRhYmxlX25hbWU7CisJfQorCisjZGVm aW5lIFdJRFRIX3VpbnQzMl90IDEyCisjZGVmaW5lIFdJRFRIX3VpbnQ2NF90IDE2CisjZGVmaW5l IE9QKGNvdW50ZXIsIGNvdW50ZXJfdHlwZSwgaHVtYW4sIGRlcml2ZWQsIGJhc2VfY291bnRlcikJ CVwKKwljb2wgPSAmY29sXyMjY291bnRlcl90eXBlW2tfIyNjb3VudGVyX3R5cGVdOwkJCVwKKwkr K2tfIyNjb3VudGVyX3R5cGU7CQkJCQkJXAorCWVtaXR0ZXJfY29sX2luaXQoY29sLCByb3cpOwkJ CQkJXAorCWNvbC0+anVzdGlmeSA9IGVtaXR0ZXJfanVzdGlmeV9yaWdodDsJCQkJXAorCWNvbC0+ d2lkdGggPSBkZXJpdmVkID8gOCA6IFdJRFRIXyMjY291bnRlcl90eXBlOwkJXAorCWNvbC0+dHlw ZSA9IGVtaXR0ZXJfdHlwZV90aXRsZTsJCQkJCVwKKwljb2wtPnN0cl92YWwgPSBodW1hbjsKKwlN VVRFWF9QUk9GX0NPVU5URVJTCisjdW5kZWYgT1AKKyN1bmRlZiBXSURUSF91aW50MzJfdAorI3Vu ZGVmIFdJRFRIX3VpbnQ2NF90CisJY29sX3VpbnQ2NF90W211dGV4X2NvdW50ZXJfdG90YWxfd2Fp dF90aW1lX3BzXS53aWR0aCA9IDEwOworfQorCitzdGF0aWMgdm9pZAorbXV0ZXhfc3RhdHNfcmVh ZF9nbG9iYWwoc2l6ZV90IG1pYltdLCBzaXplX3QgbWlibGVuLCBjb25zdCBjaGFyICpuYW1lLAor ICAgIGVtaXR0ZXJfY29sX3QgKmNvbF9uYW1lLAorICAgIGVtaXR0ZXJfY29sX3QgY29sX3VpbnQ2 NF90W211dGV4X3Byb2ZfbnVtX3VpbnQ2NF90X2NvdW50ZXJzXSwKKyAgICBlbWl0dGVyX2NvbF90 IGNvbF91aW50MzJfdFttdXRleF9wcm9mX251bV91aW50MzJfdF9jb3VudGVyc10sCisgICAgdWlu dDY0X3QgdXB0aW1lKSB7CisJQ1RMX0xFQUZfUFJFUEFSRShtaWIsIG1pYmxlbiwgbmFtZSk7CisJ c2l6ZV90IG1pYmxlbl9uYW1lID0gbWlibGVuICsgMTsKKworCWNvbF9uYW1lLT5zdHJfdmFsID0g bmFtZTsKKworCWVtaXR0ZXJfY29sX3QgKmRzdDsKKyNkZWZpbmUgRU1JVFRFUl9UWVBFX3VpbnQz Ml90IGVtaXR0ZXJfdHlwZV91aW50MzIKKyNkZWZpbmUgRU1JVFRFUl9UWVBFX3VpbnQ2NF90IGVt aXR0ZXJfdHlwZV91aW50NjQKKyNkZWZpbmUgT1AoY291bnRlciwgY291bnRlcl90eXBlLCBodW1h biwgZGVyaXZlZCwgYmFzZV9jb3VudGVyKQkJXAorCWRzdCA9ICZjb2xfIyNjb3VudGVyX3R5cGVb bXV0ZXhfY291bnRlcl8jI2NvdW50ZXJdOwkJXAorCWRzdC0+dHlwZSA9IEVNSVRURVJfVFlQRV8j I2NvdW50ZXJfdHlwZTsJCQlcCisJaWYgKCFkZXJpdmVkKSB7CQkJCQkJCVwKKwkJQ1RMX0xFQUYo bWliLCBtaWJsZW5fbmFtZSwgI2NvdW50ZXIsCQkJXAorCQkgICAgKGNvdW50ZXJfdHlwZSAqKSZk c3QtPmJvb2xfdmFsLCBjb3VudGVyX3R5cGUpOwlcCisJfSBlbHNlIHsJCQkJCQkJXAorCQllbWl0 dGVyX2NvbF90ICpiYXNlID0JCQkJCVwKKwkJICAgICZjb2xfIyNjb3VudGVyX3R5cGVbbXV0ZXhf Y291bnRlcl8jI2Jhc2VfY291bnRlcl07CVwKKwkJZHN0LT5jb3VudGVyX3R5cGUjI192YWwgPQkJ CQlcCisJCSAgICAoY291bnRlcl90eXBlKXJhdGVfcGVyX3NlY29uZCgJCQlcCisJCSAgICBiYXNl LT5jb3VudGVyX3R5cGUjI192YWwsIHVwdGltZSk7CQkJXAorCX0KKwlNVVRFWF9QUk9GX0NPVU5U RVJTCisjdW5kZWYgT1AKKyN1bmRlZiBFTUlUVEVSX1RZUEVfdWludDMyX3QKKyN1bmRlZiBFTUlU VEVSX1RZUEVfdWludDY0X3QKK30KKworc3RhdGljIHZvaWQKK211dGV4X3N0YXRzX3JlYWRfYXJl bmEoc2l6ZV90IG1pYltdLCBzaXplX3QgbWlibGVuLCBjb25zdCBjaGFyICpuYW1lLAorICAgIGVt aXR0ZXJfY29sX3QgKmNvbF9uYW1lLAorICAgIGVtaXR0ZXJfY29sX3QgY29sX3VpbnQ2NF90W211 dGV4X3Byb2ZfbnVtX3VpbnQ2NF90X2NvdW50ZXJzXSwKKyAgICBlbWl0dGVyX2NvbF90IGNvbF91 aW50MzJfdFttdXRleF9wcm9mX251bV91aW50MzJfdF9jb3VudGVyc10sCisgICAgdWludDY0X3Qg dXB0aW1lKSB7CisJQ1RMX0xFQUZfUFJFUEFSRShtaWIsIG1pYmxlbiwgbmFtZSk7CisJc2l6ZV90 IG1pYmxlbl9uYW1lID0gbWlibGVuICsgMTsKKworCWNvbF9uYW1lLT5zdHJfdmFsID0gbmFtZTsK KworCWVtaXR0ZXJfY29sX3QgKmRzdDsKKyNkZWZpbmUgRU1JVFRFUl9UWVBFX3VpbnQzMl90IGVt aXR0ZXJfdHlwZV91aW50MzIKKyNkZWZpbmUgRU1JVFRFUl9UWVBFX3VpbnQ2NF90IGVtaXR0ZXJf dHlwZV91aW50NjQKKyNkZWZpbmUgT1AoY291bnRlciwgY291bnRlcl90eXBlLCBodW1hbiwgZGVy aXZlZCwgYmFzZV9jb3VudGVyKQkJXAorCWRzdCA9ICZjb2xfIyNjb3VudGVyX3R5cGVbbXV0ZXhf Y291bnRlcl8jI2NvdW50ZXJdOwkJXAorCWRzdC0+dHlwZSA9IEVNSVRURVJfVFlQRV8jI2NvdW50 ZXJfdHlwZTsJCQlcCisJaWYgKCFkZXJpdmVkKSB7CQkJCQkJCVwKKwkJQ1RMX0xFQUYobWliLCBt aWJsZW5fbmFtZSwgI2NvdW50ZXIsCQkJXAorCQkgICAgKGNvdW50ZXJfdHlwZSAqKSZkc3QtPmJv b2xfdmFsLCBjb3VudGVyX3R5cGUpOwlcCisJfSBlbHNlIHsJCQkJCQkJXAorCQllbWl0dGVyX2Nv bF90ICpiYXNlID0JCQkJCVwKKwkJICAgICZjb2xfIyNjb3VudGVyX3R5cGVbbXV0ZXhfY291bnRl cl8jI2Jhc2VfY291bnRlcl07CVwKKwkJZHN0LT5jb3VudGVyX3R5cGUjI192YWwgPQkJCQlcCisJ CSAgICAoY291bnRlcl90eXBlKXJhdGVfcGVyX3NlY29uZCgJCQlcCisJCSAgICBiYXNlLT5jb3Vu dGVyX3R5cGUjI192YWwsIHVwdGltZSk7CQkJXAorCX0KKwlNVVRFWF9QUk9GX0NPVU5URVJTCisj dW5kZWYgT1AKKyN1bmRlZiBFTUlUVEVSX1RZUEVfdWludDMyX3QKKyN1bmRlZiBFTUlUVEVSX1RZ UEVfdWludDY0X3QKK30KKworc3RhdGljIHZvaWQKK211dGV4X3N0YXRzX3JlYWRfYXJlbmFfYmlu KHNpemVfdCBtaWJbXSwgc2l6ZV90IG1pYmxlbiwKKyAgICBlbWl0dGVyX2NvbF90IGNvbF91aW50 NjRfdFttdXRleF9wcm9mX251bV91aW50NjRfdF9jb3VudGVyc10sCisgICAgZW1pdHRlcl9jb2xf dCBjb2xfdWludDMyX3RbbXV0ZXhfcHJvZl9udW1fdWludDMyX3RfY291bnRlcnNdLAorICAgIHVp bnQ2NF90IHVwdGltZSkgeworCUNUTF9MRUFGX1BSRVBBUkUobWliLCBtaWJsZW4sICJtdXRleCIp OworCXNpemVfdCBtaWJsZW5fbXV0ZXggPSBtaWJsZW4gKyAxOworCisJZW1pdHRlcl9jb2xfdCAq ZHN0OworCisjZGVmaW5lIEVNSVRURVJfVFlQRV91aW50MzJfdCBlbWl0dGVyX3R5cGVfdWludDMy CisjZGVmaW5lIEVNSVRURVJfVFlQRV91aW50NjRfdCBlbWl0dGVyX3R5cGVfdWludDY0CisjZGVm aW5lIE9QKGNvdW50ZXIsIGNvdW50ZXJfdHlwZSwgaHVtYW4sIGRlcml2ZWQsIGJhc2VfY291bnRl cikJCVwKKwlkc3QgPSAmY29sXyMjY291bnRlcl90eXBlW211dGV4X2NvdW50ZXJfIyNjb3VudGVy XTsJCVwKKwlkc3QtPnR5cGUgPSBFTUlUVEVSX1RZUEVfIyNjb3VudGVyX3R5cGU7CQkJXAorCWlm ICghZGVyaXZlZCkgewkJCQkJCQlcCisJCUNUTF9MRUFGKG1pYiwgbWlibGVuX211dGV4LCAjY291 bnRlciwJCQlcCisJCSAgICAoY291bnRlcl90eXBlICopJmRzdC0+Ym9vbF92YWwsIGNvdW50ZXJf dHlwZSk7CVwKKwl9IGVsc2UgewkJCQkJCQlcCisJCWVtaXR0ZXJfY29sX3QgKmJhc2UgPQkJCQkJ XAorCQkgICAgJmNvbF8jI2NvdW50ZXJfdHlwZVttdXRleF9jb3VudGVyXyMjYmFzZV9jb3VudGVy XTsJXAorCQlkc3QtPmNvdW50ZXJfdHlwZSMjX3ZhbCA9CQkJCVwKKwkJICAgIChjb3VudGVyX3R5 cGUpcmF0ZV9wZXJfc2Vjb25kKAkJCVwKKwkJICAgIGJhc2UtPmNvdW50ZXJfdHlwZSMjX3ZhbCwg dXB0aW1lKTsJCQlcCisJfQorCU1VVEVYX1BST0ZfQ09VTlRFUlMKKyN1bmRlZiBPUAorI3VuZGVm IEVNSVRURVJfVFlQRV91aW50MzJfdAorI3VuZGVmIEVNSVRURVJfVFlQRV91aW50NjRfdAorfQor CisvKiAicm93IiBjYW4gYmUgTlVMTCB0byBhdm9pZCBlbWl0dGluZyBpbiB0YWJsZSBtb2RlLiAq Lworc3RhdGljIHZvaWQKK211dGV4X3N0YXRzX2VtaXQoZW1pdHRlcl90ICplbWl0dGVyLCBlbWl0 dGVyX3Jvd190ICpyb3csCisgICAgZW1pdHRlcl9jb2xfdCBjb2xfdWludDY0X3RbbXV0ZXhfcHJv Zl9udW1fdWludDY0X3RfY291bnRlcnNdLAorICAgIGVtaXR0ZXJfY29sX3QgY29sX3VpbnQzMl90 W211dGV4X3Byb2ZfbnVtX3VpbnQzMl90X2NvdW50ZXJzXSkgeworCWlmIChyb3cgIT0gTlVMTCkg eworCQllbWl0dGVyX3RhYmxlX3JvdyhlbWl0dGVyLCByb3cpOworCX0KKworCW11dGV4X3Byb2Zf dWludDY0X3RfY291bnRlcl9pbmRfdCBrX3VpbnQ2NF90ID0gMDsKKwltdXRleF9wcm9mX3VpbnQz Ml90X2NvdW50ZXJfaW5kX3Qga191aW50MzJfdCA9IDA7CisKKwllbWl0dGVyX2NvbF90ICpjb2w7 CisKKyNkZWZpbmUgRU1JVFRFUl9UWVBFX3VpbnQzMl90IGVtaXR0ZXJfdHlwZV91aW50MzIKKyNk ZWZpbmUgRU1JVFRFUl9UWVBFX3VpbnQ2NF90IGVtaXR0ZXJfdHlwZV91aW50NjQKKyNkZWZpbmUg T1AoY291bnRlciwgdHlwZSwgaHVtYW4sIGRlcml2ZWQsIGJhc2VfY291bnRlcikJCVwKKwlpZiAo IWRlcml2ZWQpIHsgICAgICAgICAgICAgICAgICAgIFwKKwkJY29sID0gJmNvbF8jI3R5cGVba18j I3R5cGVdOyAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJKytrXyMjdHlwZTsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAorCQllbWl0dGVyX2pzb25fa3YoZW1pdHRlciwgI2NvdW50ZXIs IEVNSVRURVJfVFlQRV8jI3R5cGUsICAgICAgICBcCisJCSAgICAoY29uc3Qgdm9pZCAqKSZjb2wt PmJvb2xfdmFsKTsgXAorCX0KKwlNVVRFWF9QUk9GX0NPVU5URVJTOworI3VuZGVmIE9QCisjdW5k ZWYgRU1JVFRFUl9UWVBFX3VpbnQzMl90CisjdW5kZWYgRU1JVFRFUl9UWVBFX3VpbnQ2NF90Cit9 CisKKyNkZWZpbmUgQ09MX0RFQ0xBUkUoY29sdW1uX25hbWUpCQkJCQlcCisJZW1pdHRlcl9jb2xf dCBjb2xfIyNjb2x1bW5fbmFtZTsKKworI2RlZmluZSBDT0xfSU5JVChyb3dfbmFtZSwgY29sdW1u X25hbWUsIGxlZnRfb3JfcmlnaHQsIGNvbF93aWR0aCwgZXR5cGUpXAorCWVtaXR0ZXJfY29sX2lu aXQoJmNvbF8jI2NvbHVtbl9uYW1lLCAmcm93X25hbWUpOwkJXAorCWNvbF8jI2NvbHVtbl9uYW1l Lmp1c3RpZnkgPSBlbWl0dGVyX2p1c3RpZnlfIyNsZWZ0X29yX3JpZ2h0OwlcCisJY29sXyMjY29s dW1uX25hbWUud2lkdGggPSBjb2xfd2lkdGg7CQkJCVwKKwljb2xfIyNjb2x1bW5fbmFtZS50eXBl ID0gZW1pdHRlcl90eXBlXyMjZXR5cGU7CisKKyNkZWZpbmUgQ09MKHJvd19uYW1lLCBjb2x1bW5f bmFtZSwgbGVmdF9vcl9yaWdodCwgY29sX3dpZHRoLCBldHlwZSkJXAorCUNPTF9ERUNMQVJFKGNv bHVtbl9uYW1lKTsJCQkJCVwKKwlDT0xfSU5JVChyb3dfbmFtZSwgY29sdW1uX25hbWUsIGxlZnRf b3JfcmlnaHQsIGNvbF93aWR0aCwgZXR5cGUpCisKKyNkZWZpbmUgQ09MX0hEUl9ERUNMQVJFKGNv bHVtbl9uYW1lKQkJCQkJXAorCUNPTF9ERUNMQVJFKGNvbHVtbl9uYW1lKTsJCQkJCVwKKwllbWl0 dGVyX2NvbF90IGhlYWRlcl8jI2NvbHVtbl9uYW1lOworCisjZGVmaW5lIENPTF9IRFJfSU5JVChy b3dfbmFtZSwgY29sdW1uX25hbWUsIGh1bWFuLCBsZWZ0X29yX3JpZ2h0LAlcCisJY29sX3dpZHRo LCBldHlwZSkJCQkJCQlcCisJQ09MX0lOSVQocm93X25hbWUsIGNvbHVtbl9uYW1lLCBsZWZ0X29y X3JpZ2h0LCBjb2xfd2lkdGgsIGV0eXBlKVwKKwllbWl0dGVyX2NvbF9pbml0KCZoZWFkZXJfIyNj b2x1bW5fbmFtZSwgJmhlYWRlcl8jI3Jvd19uYW1lKTsJXAorCWhlYWRlcl8jI2NvbHVtbl9uYW1l Lmp1c3RpZnkgPSBlbWl0dGVyX2p1c3RpZnlfIyNsZWZ0X29yX3JpZ2h0OwlcCisJaGVhZGVyXyMj Y29sdW1uX25hbWUud2lkdGggPSBjb2xfd2lkdGg7CQkJCVwKKwloZWFkZXJfIyNjb2x1bW5fbmFt ZS50eXBlID0gZW1pdHRlcl90eXBlX3RpdGxlOwkJCVwKKwloZWFkZXJfIyNjb2x1bW5fbmFtZS5z dHJfdmFsID0gaHVtYW4gPyBodW1hbiA6ICNjb2x1bW5fbmFtZTsKKworI2RlZmluZSBDT0xfSERS KHJvd19uYW1lLCBjb2x1bW5fbmFtZSwgaHVtYW4sIGxlZnRfb3JfcmlnaHQsIGNvbF93aWR0aCwJ XAorICAgIGV0eXBlKQkJCQkJCQkJXAorCUNPTF9IRFJfREVDTEFSRShjb2x1bW5fbmFtZSkJCQkJ CVwKKwlDT0xfSERSX0lOSVQocm93X25hbWUsIGNvbHVtbl9uYW1lLCBodW1hbiwgbGVmdF9vcl9y aWdodCwJXAorCSAgICBjb2xfd2lkdGgsIGV0eXBlKQorCitKRU1BTExPQ19DT0xECitzdGF0aWMg dm9pZAorc3RhdHNfYXJlbmFfYmluc19wcmludChlbWl0dGVyX3QgKmVtaXR0ZXIsIGJvb2wgbXV0 ZXgsIHVuc2lnbmVkIGksCisgICAgdWludDY0X3QgdXB0aW1lKSB7CisJc2l6ZV90IHBhZ2U7CisJ Ym9vbCBpbl9nYXAsIGluX2dhcF9wcmV2OworCXVuc2lnbmVkIG5iaW5zLCBqOworCisJQ1RMX0dF VCgiYXJlbmFzLnBhZ2UiLCAmcGFnZSwgc2l6ZV90KTsKKworCUNUTF9HRVQoImFyZW5hcy5uYmlu cyIsICZuYmlucywgdW5zaWduZWQpOworCisJZW1pdHRlcl9yb3dfdCBoZWFkZXJfcm93OworCWVt aXR0ZXJfcm93X2luaXQoJmhlYWRlcl9yb3cpOworCisJZW1pdHRlcl9yb3dfdCByb3c7CisJZW1p dHRlcl9yb3dfaW5pdCgmcm93KTsKKworCWJvb2wgcHJvZl9zdGF0c19vbiA9IGNvbmZpZ19wcm9m ICYmIG9wdF9wcm9mICYmIG9wdF9wcm9mX3N0YXRzCisJICAgICYmIGkgPT0gTUFMTENUTF9BUkVO QVNfQUxMOworCisJQ09MX0hEUihyb3csIHNpemUsIE5VTEwsIHJpZ2h0LCAyMCwgc2l6ZSkKKwlD T0xfSERSKHJvdywgaW5kLCBOVUxMLCByaWdodCwgNCwgdW5zaWduZWQpCisJQ09MX0hEUihyb3cs IGFsbG9jYXRlZCwgTlVMTCwgcmlnaHQsIDEzLCB1aW50NjQpCisJQ09MX0hEUihyb3csIG5tYWxs b2MsIE5VTEwsIHJpZ2h0LCAxMywgdWludDY0KQorCUNPTF9IRFIocm93LCBubWFsbG9jX3BzLCAi KCMvc2VjKSIsIHJpZ2h0LCA4LCB1aW50NjQpCisJQ09MX0hEUihyb3csIG5kYWxsb2MsIE5VTEws IHJpZ2h0LCAxMywgdWludDY0KQorCUNPTF9IRFIocm93LCBuZGFsbG9jX3BzLCAiKCMvc2VjKSIs IHJpZ2h0LCA4LCB1aW50NjQpCisJQ09MX0hEUihyb3csIG5yZXF1ZXN0cywgTlVMTCwgcmlnaHQs IDEzLCB1aW50NjQpCisJQ09MX0hEUihyb3csIG5yZXF1ZXN0c19wcywgIigjL3NlYykiLCByaWdo dCwgMTAsIHVpbnQ2NCkKKwlDT0xfSERSX0RFQ0xBUkUocHJvZl9saXZlX3JlcXVlc3RlZCk7CisJ Q09MX0hEUl9ERUNMQVJFKHByb2ZfbGl2ZV9jb3VudCk7CisJQ09MX0hEUl9ERUNMQVJFKHByb2Zf YWNjdW1fcmVxdWVzdGVkKTsKKwlDT0xfSERSX0RFQ0xBUkUocHJvZl9hY2N1bV9jb3VudCk7CisJ aWYgKHByb2Zfc3RhdHNfb24pIHsKKwkJQ09MX0hEUl9JTklUKHJvdywgcHJvZl9saXZlX3JlcXVl c3RlZCwgTlVMTCwgcmlnaHQsIDIxLCB1aW50NjQpCisJCUNPTF9IRFJfSU5JVChyb3csIHByb2Zf bGl2ZV9jb3VudCwgTlVMTCwgcmlnaHQsIDE3LCB1aW50NjQpCisJCUNPTF9IRFJfSU5JVChyb3cs IHByb2ZfYWNjdW1fcmVxdWVzdGVkLCBOVUxMLCByaWdodCwgMjEsIHVpbnQ2NCkKKwkJQ09MX0hE Ul9JTklUKHJvdywgcHJvZl9hY2N1bV9jb3VudCwgTlVMTCwgcmlnaHQsIDE3LCB1aW50NjQpCisJ fQorCUNPTF9IRFIocm93LCBuc2hhcmRzLCBOVUxMLCByaWdodCwgOSwgdW5zaWduZWQpCisJQ09M X0hEUihyb3csIGN1cnJlZ3MsIE5VTEwsIHJpZ2h0LCAxMywgc2l6ZSkKKwlDT0xfSERSKHJvdywg Y3Vyc2xhYnMsIE5VTEwsIHJpZ2h0LCAxMywgc2l6ZSkKKwlDT0xfSERSKHJvdywgbm9uZnVsbF9z bGFicywgTlVMTCwgcmlnaHQsIDE1LCBzaXplKQorCUNPTF9IRFIocm93LCByZWdzLCBOVUxMLCBy aWdodCwgNSwgdW5zaWduZWQpCisJQ09MX0hEUihyb3csIHBncywgTlVMTCwgcmlnaHQsIDQsIHNp emUpCisJLyogVG8gYnVmZmVyIGEgcmlnaHQtIGFuZCBsZWZ0LWp1c3RpZmllZCBjb2x1bW4uICov CisJQ09MX0hEUihyb3csIGp1c3RpZnlfc3BhY2VyLCBOVUxMLCByaWdodCwgMSwgdGl0bGUpCisJ Q09MX0hEUihyb3csIHV0aWwsIE5VTEwsIHJpZ2h0LCA2LCB0aXRsZSkKKwlDT0xfSERSKHJvdywg bmZpbGxzLCBOVUxMLCByaWdodCwgMTMsIHVpbnQ2NCkKKwlDT0xfSERSKHJvdywgbmZpbGxzX3Bz LCAiKCMvc2VjKSIsIHJpZ2h0LCA4LCB1aW50NjQpCisJQ09MX0hEUihyb3csIG5mbHVzaGVzLCBO VUxMLCByaWdodCwgMTMsIHVpbnQ2NCkKKwlDT0xfSERSKHJvdywgbmZsdXNoZXNfcHMsICIoIy9z ZWMpIiwgcmlnaHQsIDgsIHVpbnQ2NCkKKwlDT0xfSERSKHJvdywgbnNsYWJzLCBOVUxMLCByaWdo dCwgMTMsIHVpbnQ2NCkKKwlDT0xfSERSKHJvdywgbnJlc2xhYnMsIE5VTEwsIHJpZ2h0LCAxMywg dWludDY0KQorCUNPTF9IRFIocm93LCBucmVzbGFic19wcywgIigjL3NlYykiLCByaWdodCwgOCwg dWludDY0KQorCisJLyogRG9uJ3Qgd2FudCB0byBhY3R1YWxseSBwcmludCB0aGUgbmFtZS4gKi8K KwloZWFkZXJfanVzdGlmeV9zcGFjZXIuc3RyX3ZhbCA9ICIgIjsKKwljb2xfanVzdGlmeV9zcGFj ZXIuc3RyX3ZhbCA9ICIgIjsKKworCWVtaXR0ZXJfY29sX3QgY29sX211dGV4NjRbbXV0ZXhfcHJv Zl9udW1fdWludDY0X3RfY291bnRlcnNdOworCWVtaXR0ZXJfY29sX3QgY29sX211dGV4MzJbbXV0 ZXhfcHJvZl9udW1fdWludDMyX3RfY291bnRlcnNdOworCisJZW1pdHRlcl9jb2xfdCBoZWFkZXJf bXV0ZXg2NFttdXRleF9wcm9mX251bV91aW50NjRfdF9jb3VudGVyc107CisJZW1pdHRlcl9jb2xf dCBoZWFkZXJfbXV0ZXgzMlttdXRleF9wcm9mX251bV91aW50MzJfdF9jb3VudGVyc107CisKKwlp ZiAobXV0ZXgpIHsKKwkJbXV0ZXhfc3RhdHNfaW5pdF9jb2xzKCZyb3csIE5VTEwsIE5VTEwsIGNv bF9tdXRleDY0LAorCQkgICAgY29sX211dGV4MzIpOworCQltdXRleF9zdGF0c19pbml0X2NvbHMo JmhlYWRlcl9yb3csIE5VTEwsIE5VTEwsIGhlYWRlcl9tdXRleDY0LAorCQkgICAgaGVhZGVyX211 dGV4MzIpOworCX0KKworCS8qCisJICogV2UgcHJpbnQgYSAiYmluczoiIGhlYWRlciBhcyBwYXJ0 IG9mIHRoZSB0YWJsZSByb3c7IHdlIG5lZWQgdG8gYWRqdXN0CisJICogdGhlIGhlYWRlciBzaXpl IGNvbHVtbiB0byBjb21wZW5zYXRlLgorCSAqLworCWhlYWRlcl9zaXplLndpZHRoIC09NTsKKwll bWl0dGVyX3RhYmxlX3ByaW50ZihlbWl0dGVyLCAiYmluczoiKTsKKwllbWl0dGVyX3RhYmxlX3Jv dyhlbWl0dGVyLCAmaGVhZGVyX3Jvdyk7CisJZW1pdHRlcl9qc29uX2FycmF5X2t2X2JlZ2luKGVt aXR0ZXIsICJiaW5zIik7CisKKwlzaXplX3Qgc3RhdHNfYXJlbmFzX21pYltDVExfTUFYX0RFUFRI XTsKKwlDVExfTEVBRl9QUkVQQVJFKHN0YXRzX2FyZW5hc19taWIsIDAsICJzdGF0cy5hcmVuYXMi KTsKKwlzdGF0c19hcmVuYXNfbWliWzJdID0gaTsKKwlDVExfTEVBRl9QUkVQQVJFKHN0YXRzX2Fy ZW5hc19taWIsIDMsICJiaW5zIik7CisKKwlzaXplX3QgYXJlbmFzX2Jpbl9taWJbQ1RMX01BWF9E RVBUSF07CisJQ1RMX0xFQUZfUFJFUEFSRShhcmVuYXNfYmluX21pYiwgMCwgImFyZW5hcy5iaW4i KTsKKworCXNpemVfdCBwcm9mX3N0YXRzX21pYltDVExfTUFYX0RFUFRIXTsKKwlpZiAocHJvZl9z dGF0c19vbikgeworCQlDVExfTEVBRl9QUkVQQVJFKHByb2Zfc3RhdHNfbWliLCAwLCAicHJvZi5z dGF0cy5iaW5zIik7CisJfQorCisJZm9yIChqID0gMCwgaW5fZ2FwID0gZmFsc2U7IGogPCBuYmlu czsgaisrKSB7CisJCXVpbnQ2NF90IG5zbGFiczsKKwkJc2l6ZV90IHJlZ19zaXplLCBzbGFiX3Np emUsIGN1cnJlZ3M7CisJCXNpemVfdCBjdXJzbGFiczsKKwkJc2l6ZV90IG5vbmZ1bGxfc2xhYnM7 CisJCXVpbnQzMl90IG5yZWdzLCBuc2hhcmRzOworCQl1aW50NjRfdCBubWFsbG9jLCBuZGFsbG9j LCBucmVxdWVzdHMsIG5maWxscywgbmZsdXNoZXM7CisJCXVpbnQ2NF90IG5yZXNsYWJzOworCQlw cm9mX3N0YXRzX3QgcHJvZl9saXZlOworCQlwcm9mX3N0YXRzX3QgcHJvZl9hY2N1bTsKKworCQlz dGF0c19hcmVuYXNfbWliWzRdID0gajsKKwkJYXJlbmFzX2Jpbl9taWJbMl0gPSBqOworCisJCUNU TF9MRUFGKHN0YXRzX2FyZW5hc19taWIsIDUsICJuc2xhYnMiLCAmbnNsYWJzLCB1aW50NjRfdCk7 CisKKwkJaWYgKHByb2Zfc3RhdHNfb24pIHsKKwkJCXByb2Zfc3RhdHNfbWliWzNdID0gajsKKwkJ CUNUTF9MRUFGKHByb2Zfc3RhdHNfbWliLCA0LCAibGl2ZSIsICZwcm9mX2xpdmUsCisJCQkgICAg cHJvZl9zdGF0c190KTsKKwkJCUNUTF9MRUFGKHByb2Zfc3RhdHNfbWliLCA0LCAiYWNjdW0iLCAm cHJvZl9hY2N1bSwKKwkJCSAgICBwcm9mX3N0YXRzX3QpOworCQl9CisKKwkJaW5fZ2FwX3ByZXYg PSBpbl9nYXA7CisJCWlmIChwcm9mX3N0YXRzX29uKSB7CisJCQlpbl9nYXAgPSAobnNsYWJzID09 IDAgJiYgcHJvZl9hY2N1bS5jb3VudCA9PSAwKTsKKwkJfSBlbHNlIHsKKwkJCWluX2dhcCA9IChu c2xhYnMgPT0gMCk7CisJCX0KKworCQlpZiAoaW5fZ2FwX3ByZXYgJiYgIWluX2dhcCkgeworCQkJ ZW1pdHRlcl90YWJsZV9wcmludGYoZW1pdHRlciwKKwkJCSAgICAiICAgICAgICAgICAgICAgICAg ICAgLS0tXG4iKTsKKwkJfQorCisJCWlmIChpbl9nYXAgJiYgIWVtaXR0ZXJfb3V0cHV0c19qc29u KGVtaXR0ZXIpKSB7CisJCQljb250aW51ZTsKKwkJfQorCisJCUNUTF9MRUFGKGFyZW5hc19iaW5f bWliLCAzLCAic2l6ZSIsICZyZWdfc2l6ZSwgc2l6ZV90KTsKKwkJQ1RMX0xFQUYoYXJlbmFzX2Jp bl9taWIsIDMsICJucmVncyIsICZucmVncywgdWludDMyX3QpOworCQlDVExfTEVBRihhcmVuYXNf YmluX21pYiwgMywgInNsYWJfc2l6ZSIsICZzbGFiX3NpemUsIHNpemVfdCk7CisJCUNUTF9MRUFG KGFyZW5hc19iaW5fbWliLCAzLCAibnNoYXJkcyIsICZuc2hhcmRzLCB1aW50MzJfdCk7CisJCUNU TF9MRUFGKHN0YXRzX2FyZW5hc19taWIsIDUsICJubWFsbG9jIiwgJm5tYWxsb2MsIHVpbnQ2NF90 KTsKKwkJQ1RMX0xFQUYoc3RhdHNfYXJlbmFzX21pYiwgNSwgIm5kYWxsb2MiLCAmbmRhbGxvYywg dWludDY0X3QpOworCQlDVExfTEVBRihzdGF0c19hcmVuYXNfbWliLCA1LCAiY3VycmVncyIsICZj dXJyZWdzLCBzaXplX3QpOworCQlDVExfTEVBRihzdGF0c19hcmVuYXNfbWliLCA1LCAibnJlcXVl c3RzIiwgJm5yZXF1ZXN0cywKKwkJICAgIHVpbnQ2NF90KTsKKwkJQ1RMX0xFQUYoc3RhdHNfYXJl bmFzX21pYiwgNSwgIm5maWxscyIsICZuZmlsbHMsIHVpbnQ2NF90KTsKKwkJQ1RMX0xFQUYoc3Rh dHNfYXJlbmFzX21pYiwgNSwgIm5mbHVzaGVzIiwgJm5mbHVzaGVzLCB1aW50NjRfdCk7CisJCUNU TF9MRUFGKHN0YXRzX2FyZW5hc19taWIsIDUsICJucmVzbGFicyIsICZucmVzbGFicywgdWludDY0 X3QpOworCQlDVExfTEVBRihzdGF0c19hcmVuYXNfbWliLCA1LCAiY3Vyc2xhYnMiLCAmY3Vyc2xh YnMsIHNpemVfdCk7CisJCUNUTF9MRUFGKHN0YXRzX2FyZW5hc19taWIsIDUsICJub25mdWxsX3Ns YWJzIiwgJm5vbmZ1bGxfc2xhYnMsCisJCSAgICBzaXplX3QpOworCisJCWlmIChtdXRleCkgewor CQkJbXV0ZXhfc3RhdHNfcmVhZF9hcmVuYV9iaW4oc3RhdHNfYXJlbmFzX21pYiwgNSwKKwkJCSAg ICBjb2xfbXV0ZXg2NCwgY29sX211dGV4MzIsIHVwdGltZSk7CisJCX0KKworCQllbWl0dGVyX2pz b25fb2JqZWN0X2JlZ2luKGVtaXR0ZXIpOworCQllbWl0dGVyX2pzb25fa3YoZW1pdHRlciwgIm5t YWxsb2MiLCBlbWl0dGVyX3R5cGVfdWludDY0LAorCQkgICAgJm5tYWxsb2MpOworCQllbWl0dGVy X2pzb25fa3YoZW1pdHRlciwgIm5kYWxsb2MiLCBlbWl0dGVyX3R5cGVfdWludDY0LAorCQkgICAg Jm5kYWxsb2MpOworCQllbWl0dGVyX2pzb25fa3YoZW1pdHRlciwgImN1cnJlZ3MiLCBlbWl0dGVy X3R5cGVfc2l6ZSwKKwkJICAgICZjdXJyZWdzKTsKKwkJZW1pdHRlcl9qc29uX2t2KGVtaXR0ZXIs ICJucmVxdWVzdHMiLCBlbWl0dGVyX3R5cGVfdWludDY0LAorCQkgICAgJm5yZXF1ZXN0cyk7CisJ CWlmIChwcm9mX3N0YXRzX29uKSB7CisJCQllbWl0dGVyX2pzb25fa3YoZW1pdHRlciwgInByb2Zf bGl2ZV9yZXF1ZXN0ZWQiLAorCQkJICAgIGVtaXR0ZXJfdHlwZV91aW50NjQsICZwcm9mX2xpdmUu cmVxX3N1bSk7CisJCQllbWl0dGVyX2pzb25fa3YoZW1pdHRlciwgInByb2ZfbGl2ZV9jb3VudCIs CisJCQkgICAgZW1pdHRlcl90eXBlX3VpbnQ2NCwgJnByb2ZfbGl2ZS5jb3VudCk7CisJCQllbWl0 dGVyX2pzb25fa3YoZW1pdHRlciwgInByb2ZfYWNjdW1fcmVxdWVzdGVkIiwKKwkJCSAgICBlbWl0 dGVyX3R5cGVfdWludDY0LCAmcHJvZl9hY2N1bS5yZXFfc3VtKTsKKwkJCWVtaXR0ZXJfanNvbl9r dihlbWl0dGVyLCAicHJvZl9hY2N1bV9jb3VudCIsCisJCQkgICAgZW1pdHRlcl90eXBlX3VpbnQ2 NCwgJnByb2ZfYWNjdW0uY291bnQpOworCQl9CisJCWVtaXR0ZXJfanNvbl9rdihlbWl0dGVyLCAi bmZpbGxzIiwgZW1pdHRlcl90eXBlX3VpbnQ2NCwKKwkJICAgICZuZmlsbHMpOworCQllbWl0dGVy X2pzb25fa3YoZW1pdHRlciwgIm5mbHVzaGVzIiwgZW1pdHRlcl90eXBlX3VpbnQ2NCwKKwkJICAg ICZuZmx1c2hlcyk7CisJCWVtaXR0ZXJfanNvbl9rdihlbWl0dGVyLCAibnJlc2xhYnMiLCBlbWl0 dGVyX3R5cGVfdWludDY0LAorCQkgICAgJm5yZXNsYWJzKTsKKwkJZW1pdHRlcl9qc29uX2t2KGVt aXR0ZXIsICJjdXJzbGFicyIsIGVtaXR0ZXJfdHlwZV9zaXplLAorCQkgICAgJmN1cnNsYWJzKTsK KwkJZW1pdHRlcl9qc29uX2t2KGVtaXR0ZXIsICJub25mdWxsX3NsYWJzIiwgZW1pdHRlcl90eXBl X3NpemUsCisJCSAgICAmbm9uZnVsbF9zbGFicyk7CisJCWlmIChtdXRleCkgeworCQkJZW1pdHRl cl9qc29uX29iamVjdF9rdl9iZWdpbihlbWl0dGVyLCAibXV0ZXgiKTsKKwkJCW11dGV4X3N0YXRz X2VtaXQoZW1pdHRlciwgTlVMTCwgY29sX211dGV4NjQsCisJCQkgICAgY29sX211dGV4MzIpOwor CQkJZW1pdHRlcl9qc29uX29iamVjdF9lbmQoZW1pdHRlcik7CisJCX0KKwkJZW1pdHRlcl9qc29u X29iamVjdF9lbmQoZW1pdHRlcik7CisKKwkJc2l6ZV90IGF2YWlscmVncyA9IG5yZWdzICogY3Vy c2xhYnM7CisJCWNoYXIgdXRpbFs2XTsKKwkJaWYgKGdldF9yYXRlX3N0cigodWludDY0X3QpY3Vy cmVncywgKHVpbnQ2NF90KWF2YWlscmVncywgdXRpbCkpCisJCXsKKwkJCWlmIChhdmFpbHJlZ3Mg PT0gMCkgeworCQkJCW1hbGxvY19zbnByaW50Zih1dGlsLCBzaXplb2YodXRpbCksICIxIik7CisJ CQl9IGVsc2UgaWYgKGN1cnJlZ3MgPiBhdmFpbHJlZ3MpIHsKKwkJCQkvKgorCQkJCSAqIFJhY2Ug ZGV0ZWN0ZWQ6IHRoZSBjb3VudGVycyB3ZXJlIHJlYWQgaW4KKwkJCQkgKiBzZXBhcmF0ZSBtYWxs Y3RsIGNhbGxzIGFuZCBjb25jdXJyZW50CisJCQkJICogb3BlcmF0aW9ucyBoYXBwZW5lZCBpbiBi ZXR3ZWVuLiAgSW4gdGhpcyBjYXNlCisJCQkJICogbm8gbWVhbmluZ2Z1bCB1dGlsaXphdGlvbiBj YW4gYmUgY29tcHV0ZWQuCisJCQkJICovCisJCQkJbWFsbG9jX3NucHJpbnRmKHV0aWwsIHNpemVv Zih1dGlsKSwgIiByYWNlIik7CisJCQl9IGVsc2UgeworCQkJCW5vdF9yZWFjaGVkKCk7CisJCQl9 CisJCX0KKworCQljb2xfc2l6ZS5zaXplX3ZhbCA9IHJlZ19zaXplOworCQljb2xfaW5kLnVuc2ln bmVkX3ZhbCA9IGo7CisJCWNvbF9hbGxvY2F0ZWQuc2l6ZV92YWwgPSBjdXJyZWdzICogcmVnX3Np emU7CisJCWNvbF9ubWFsbG9jLnVpbnQ2NF92YWwgPSBubWFsbG9jOworCQljb2xfbm1hbGxvY19w cy51aW50NjRfdmFsID0gcmF0ZV9wZXJfc2Vjb25kKG5tYWxsb2MsIHVwdGltZSk7CisJCWNvbF9u ZGFsbG9jLnVpbnQ2NF92YWwgPSBuZGFsbG9jOworCQljb2xfbmRhbGxvY19wcy51aW50NjRfdmFs ID0gcmF0ZV9wZXJfc2Vjb25kKG5kYWxsb2MsIHVwdGltZSk7CisJCWNvbF9ucmVxdWVzdHMudWlu dDY0X3ZhbCA9IG5yZXF1ZXN0czsKKwkJY29sX25yZXF1ZXN0c19wcy51aW50NjRfdmFsID0gcmF0 ZV9wZXJfc2Vjb25kKG5yZXF1ZXN0cywgdXB0aW1lKTsKKwkJaWYgKHByb2Zfc3RhdHNfb24pIHsK KwkJCWNvbF9wcm9mX2xpdmVfcmVxdWVzdGVkLnVpbnQ2NF92YWwgPSBwcm9mX2xpdmUucmVxX3N1 bTsKKwkJCWNvbF9wcm9mX2xpdmVfY291bnQudWludDY0X3ZhbCA9IHByb2ZfbGl2ZS5jb3VudDsK KwkJCWNvbF9wcm9mX2FjY3VtX3JlcXVlc3RlZC51aW50NjRfdmFsID0KKwkJCSAgICBwcm9mX2Fj Y3VtLnJlcV9zdW07CisJCQljb2xfcHJvZl9hY2N1bV9jb3VudC51aW50NjRfdmFsID0gcHJvZl9h Y2N1bS5jb3VudDsKKwkJfQorCQljb2xfbnNoYXJkcy51bnNpZ25lZF92YWwgPSBuc2hhcmRzOwor CQljb2xfY3VycmVncy5zaXplX3ZhbCA9IGN1cnJlZ3M7CisJCWNvbF9jdXJzbGFicy5zaXplX3Zh bCA9IGN1cnNsYWJzOworCQljb2xfbm9uZnVsbF9zbGFicy5zaXplX3ZhbCA9IG5vbmZ1bGxfc2xh YnM7CisJCWNvbF9yZWdzLnVuc2lnbmVkX3ZhbCA9IG5yZWdzOworCQljb2xfcGdzLnNpemVfdmFs ID0gc2xhYl9zaXplIC8gcGFnZTsKKwkJY29sX3V0aWwuc3RyX3ZhbCA9IHV0aWw7CisJCWNvbF9u ZmlsbHMudWludDY0X3ZhbCA9IG5maWxsczsKKwkJY29sX25maWxsc19wcy51aW50NjRfdmFsID0g cmF0ZV9wZXJfc2Vjb25kKG5maWxscywgdXB0aW1lKTsKKwkJY29sX25mbHVzaGVzLnVpbnQ2NF92 YWwgPSBuZmx1c2hlczsKKwkJY29sX25mbHVzaGVzX3BzLnVpbnQ2NF92YWwgPSByYXRlX3Blcl9z ZWNvbmQobmZsdXNoZXMsIHVwdGltZSk7CisJCWNvbF9uc2xhYnMudWludDY0X3ZhbCA9IG5zbGFi czsKKwkJY29sX25yZXNsYWJzLnVpbnQ2NF92YWwgPSBucmVzbGFiczsKKwkJY29sX25yZXNsYWJz X3BzLnVpbnQ2NF92YWwgPSByYXRlX3Blcl9zZWNvbmQobnJlc2xhYnMsIHVwdGltZSk7CisKKwkJ LyoKKwkJICogTm90ZSB0aGF0IG11dGV4IGNvbHVtbnMgd2VyZSBpbml0aWFsaXplZCBhYm92ZSwg aWYgbXV0ZXggPT0KKwkJICogdHJ1ZS4KKwkJICovCisKKwkJZW1pdHRlcl90YWJsZV9yb3coZW1p dHRlciwgJnJvdyk7CisJfQorCWVtaXR0ZXJfanNvbl9hcnJheV9lbmQoZW1pdHRlcik7IC8qIENs b3NlICJiaW5zIi4gKi8KKworCWlmIChpbl9nYXApIHsKKwkJZW1pdHRlcl90YWJsZV9wcmludGYo ZW1pdHRlciwgIiAgICAgICAgICAgICAgICAgICAgIC0tLVxuIik7CisJfQorfQorCitKRU1BTExP Q19DT0xECitzdGF0aWMgdm9pZAorc3RhdHNfYXJlbmFfbGV4dGVudHNfcHJpbnQoZW1pdHRlcl90 ICplbWl0dGVyLCB1bnNpZ25lZCBpLCB1aW50NjRfdCB1cHRpbWUpIHsKKwl1bnNpZ25lZCBuYmlu cywgbmxleHRlbnRzLCBqOworCWJvb2wgaW5fZ2FwLCBpbl9nYXBfcHJldjsKKworCUNUTF9HRVQo ImFyZW5hcy5uYmlucyIsICZuYmlucywgdW5zaWduZWQpOworCUNUTF9HRVQoImFyZW5hcy5ubGV4 dGVudHMiLCAmbmxleHRlbnRzLCB1bnNpZ25lZCk7CisKKwllbWl0dGVyX3Jvd190IGhlYWRlcl9y b3c7CisJZW1pdHRlcl9yb3dfaW5pdCgmaGVhZGVyX3Jvdyk7CisJZW1pdHRlcl9yb3dfdCByb3c7 CisJZW1pdHRlcl9yb3dfaW5pdCgmcm93KTsKKworCWJvb2wgcHJvZl9zdGF0c19vbiA9IGNvbmZp Z19wcm9mICYmIG9wdF9wcm9mICYmIG9wdF9wcm9mX3N0YXRzCisJICAgICYmIGkgPT0gTUFMTENU TF9BUkVOQVNfQUxMOworCisJQ09MX0hEUihyb3csIHNpemUsIE5VTEwsIHJpZ2h0LCAyMCwgc2l6 ZSkKKwlDT0xfSERSKHJvdywgaW5kLCBOVUxMLCByaWdodCwgNCwgdW5zaWduZWQpCisJQ09MX0hE Uihyb3csIGFsbG9jYXRlZCwgTlVMTCwgcmlnaHQsIDEzLCBzaXplKQorCUNPTF9IRFIocm93LCBu bWFsbG9jLCBOVUxMLCByaWdodCwgMTMsIHVpbnQ2NCkKKwlDT0xfSERSKHJvdywgbm1hbGxvY19w cywgIigjL3NlYykiLCByaWdodCwgOCwgdWludDY0KQorCUNPTF9IRFIocm93LCBuZGFsbG9jLCBO VUxMLCByaWdodCwgMTMsIHVpbnQ2NCkKKwlDT0xfSERSKHJvdywgbmRhbGxvY19wcywgIigjL3Nl YykiLCByaWdodCwgOCwgdWludDY0KQorCUNPTF9IRFIocm93LCBucmVxdWVzdHMsIE5VTEwsIHJp Z2h0LCAxMywgdWludDY0KQorCUNPTF9IRFIocm93LCBucmVxdWVzdHNfcHMsICIoIy9zZWMpIiwg cmlnaHQsIDgsIHVpbnQ2NCkKKwlDT0xfSERSX0RFQ0xBUkUocHJvZl9saXZlX3JlcXVlc3RlZCkK KwlDT0xfSERSX0RFQ0xBUkUocHJvZl9saXZlX2NvdW50KQorCUNPTF9IRFJfREVDTEFSRShwcm9m X2FjY3VtX3JlcXVlc3RlZCkKKwlDT0xfSERSX0RFQ0xBUkUocHJvZl9hY2N1bV9jb3VudCkKKwlp ZiAocHJvZl9zdGF0c19vbikgeworCQlDT0xfSERSX0lOSVQocm93LCBwcm9mX2xpdmVfcmVxdWVz dGVkLCBOVUxMLCByaWdodCwgMjEsIHVpbnQ2NCkKKwkJQ09MX0hEUl9JTklUKHJvdywgcHJvZl9s aXZlX2NvdW50LCBOVUxMLCByaWdodCwgMTcsIHVpbnQ2NCkKKwkJQ09MX0hEUl9JTklUKHJvdywg cHJvZl9hY2N1bV9yZXF1ZXN0ZWQsIE5VTEwsIHJpZ2h0LCAyMSwgdWludDY0KQorCQlDT0xfSERS X0lOSVQocm93LCBwcm9mX2FjY3VtX2NvdW50LCBOVUxMLCByaWdodCwgMTcsIHVpbnQ2NCkKKwl9 CisJQ09MX0hEUihyb3csIGN1cmxleHRlbnRzLCBOVUxMLCByaWdodCwgMTMsIHNpemUpCisKKwkv KiBBcyB3aXRoIGJpbnMsIHdlIGxhYmVsIHRoZSBsYXJnZSBleHRlbnRzIHRhYmxlLiAqLworCWhl YWRlcl9zaXplLndpZHRoIC09IDY7CisJZW1pdHRlcl90YWJsZV9wcmludGYoZW1pdHRlciwgImxh cmdlOiIpOworCWVtaXR0ZXJfdGFibGVfcm93KGVtaXR0ZXIsICZoZWFkZXJfcm93KTsKKwllbWl0 dGVyX2pzb25fYXJyYXlfa3ZfYmVnaW4oZW1pdHRlciwgImxleHRlbnRzIik7CisKKwlzaXplX3Qg c3RhdHNfYXJlbmFzX21pYltDVExfTUFYX0RFUFRIXTsKKwlDVExfTEVBRl9QUkVQQVJFKHN0YXRz X2FyZW5hc19taWIsIDAsICJzdGF0cy5hcmVuYXMiKTsKKwlzdGF0c19hcmVuYXNfbWliWzJdID0g aTsKKwlDVExfTEVBRl9QUkVQQVJFKHN0YXRzX2FyZW5hc19taWIsIDMsICJsZXh0ZW50cyIpOwor CisJc2l6ZV90IGFyZW5hc19sZXh0ZW50X21pYltDVExfTUFYX0RFUFRIXTsKKwlDVExfTEVBRl9Q UkVQQVJFKGFyZW5hc19sZXh0ZW50X21pYiwgMCwgImFyZW5hcy5sZXh0ZW50Iik7CisKKwlzaXpl X3QgcHJvZl9zdGF0c19taWJbQ1RMX01BWF9ERVBUSF07CisJaWYgKHByb2Zfc3RhdHNfb24pIHsK KwkJQ1RMX0xFQUZfUFJFUEFSRShwcm9mX3N0YXRzX21pYiwgMCwgInByb2Yuc3RhdHMubGV4dGVu dHMiKTsKKwl9CisKKwlmb3IgKGogPSAwLCBpbl9nYXAgPSBmYWxzZTsgaiA8IG5sZXh0ZW50czsg aisrKSB7CisJCXVpbnQ2NF90IG5tYWxsb2MsIG5kYWxsb2MsIG5yZXF1ZXN0czsKKwkJc2l6ZV90 IGxleHRlbnRfc2l6ZSwgY3VybGV4dGVudHM7CisJCXByb2Zfc3RhdHNfdCBwcm9mX2xpdmU7CisJ CXByb2Zfc3RhdHNfdCBwcm9mX2FjY3VtOworCisJCXN0YXRzX2FyZW5hc19taWJbNF0gPSBqOwor CQlhcmVuYXNfbGV4dGVudF9taWJbMl0gPSBqOworCisJCUNUTF9MRUFGKHN0YXRzX2FyZW5hc19t aWIsIDUsICJubWFsbG9jIiwgJm5tYWxsb2MsIHVpbnQ2NF90KTsKKwkJQ1RMX0xFQUYoc3RhdHNf YXJlbmFzX21pYiwgNSwgIm5kYWxsb2MiLCAmbmRhbGxvYywgdWludDY0X3QpOworCQlDVExfTEVB RihzdGF0c19hcmVuYXNfbWliLCA1LCAibnJlcXVlc3RzIiwgJm5yZXF1ZXN0cywKKwkJICAgIHVp bnQ2NF90KTsKKworCQlpbl9nYXBfcHJldiA9IGluX2dhcDsKKwkJaW5fZ2FwID0gKG5yZXF1ZXN0 cyA9PSAwKTsKKworCQlpZiAoaW5fZ2FwX3ByZXYgJiYgIWluX2dhcCkgeworCQkJZW1pdHRlcl90 YWJsZV9wcmludGYoZW1pdHRlciwKKwkJCSAgICAiICAgICAgICAgICAgICAgICAgICAgLS0tXG4i KTsKKwkJfQorCisJCUNUTF9MRUFGKGFyZW5hc19sZXh0ZW50X21pYiwgMywgInNpemUiLCAmbGV4 dGVudF9zaXplLCBzaXplX3QpOworCQlDVExfTEVBRihzdGF0c19hcmVuYXNfbWliLCA1LCAiY3Vy bGV4dGVudHMiLCAmY3VybGV4dGVudHMsCisJCSAgICBzaXplX3QpOworCisJCWlmIChwcm9mX3N0 YXRzX29uKSB7CisJCQlwcm9mX3N0YXRzX21pYlszXSA9IGo7CisJCQlDVExfTEVBRihwcm9mX3N0 YXRzX21pYiwgNCwgImxpdmUiLCAmcHJvZl9saXZlLAorCQkJICAgIHByb2Zfc3RhdHNfdCk7CisJ CQlDVExfTEVBRihwcm9mX3N0YXRzX21pYiwgNCwgImFjY3VtIiwgJnByb2ZfYWNjdW0sCisJCQkg ICAgcHJvZl9zdGF0c190KTsKKwkJfQorCisJCWVtaXR0ZXJfanNvbl9vYmplY3RfYmVnaW4oZW1p dHRlcik7CisJCWlmIChwcm9mX3N0YXRzX29uKSB7CisJCQllbWl0dGVyX2pzb25fa3YoZW1pdHRl ciwgInByb2ZfbGl2ZV9yZXF1ZXN0ZWQiLAorCQkJICAgIGVtaXR0ZXJfdHlwZV91aW50NjQsICZw cm9mX2xpdmUucmVxX3N1bSk7CisJCQllbWl0dGVyX2pzb25fa3YoZW1pdHRlciwgInByb2ZfbGl2 ZV9jb3VudCIsCisJCQkgICAgZW1pdHRlcl90eXBlX3VpbnQ2NCwgJnByb2ZfbGl2ZS5jb3VudCk7 CisJCQllbWl0dGVyX2pzb25fa3YoZW1pdHRlciwgInByb2ZfYWNjdW1fcmVxdWVzdGVkIiwKKwkJ CSAgICBlbWl0dGVyX3R5cGVfdWludDY0LCAmcHJvZl9hY2N1bS5yZXFfc3VtKTsKKwkJCWVtaXR0 ZXJfanNvbl9rdihlbWl0dGVyLCAicHJvZl9hY2N1bV9jb3VudCIsCisJCQkgICAgZW1pdHRlcl90 eXBlX3VpbnQ2NCwgJnByb2ZfYWNjdW0uY291bnQpOworCQl9CisJCWVtaXR0ZXJfanNvbl9rdihl bWl0dGVyLCAiY3VybGV4dGVudHMiLCBlbWl0dGVyX3R5cGVfc2l6ZSwKKwkJICAgICZjdXJsZXh0 ZW50cyk7CisJCWVtaXR0ZXJfanNvbl9vYmplY3RfZW5kKGVtaXR0ZXIpOworCisJCWNvbF9zaXpl LnNpemVfdmFsID0gbGV4dGVudF9zaXplOworCQljb2xfaW5kLnVuc2lnbmVkX3ZhbCA9IG5iaW5z ICsgajsKKwkJY29sX2FsbG9jYXRlZC5zaXplX3ZhbCA9IGN1cmxleHRlbnRzICogbGV4dGVudF9z aXplOworCQljb2xfbm1hbGxvYy51aW50NjRfdmFsID0gbm1hbGxvYzsKKwkJY29sX25tYWxsb2Nf cHMudWludDY0X3ZhbCA9IHJhdGVfcGVyX3NlY29uZChubWFsbG9jLCB1cHRpbWUpOworCQljb2xf bmRhbGxvYy51aW50NjRfdmFsID0gbmRhbGxvYzsKKwkJY29sX25kYWxsb2NfcHMudWludDY0X3Zh bCA9IHJhdGVfcGVyX3NlY29uZChuZGFsbG9jLCB1cHRpbWUpOworCQljb2xfbnJlcXVlc3RzLnVp bnQ2NF92YWwgPSBucmVxdWVzdHM7CisJCWNvbF9ucmVxdWVzdHNfcHMudWludDY0X3ZhbCA9IHJh dGVfcGVyX3NlY29uZChucmVxdWVzdHMsIHVwdGltZSk7CisJCWlmIChwcm9mX3N0YXRzX29uKSB7 CisJCQljb2xfcHJvZl9saXZlX3JlcXVlc3RlZC51aW50NjRfdmFsID0gcHJvZl9saXZlLnJlcV9z dW07CisJCQljb2xfcHJvZl9saXZlX2NvdW50LnVpbnQ2NF92YWwgPSBwcm9mX2xpdmUuY291bnQ7 CisJCQljb2xfcHJvZl9hY2N1bV9yZXF1ZXN0ZWQudWludDY0X3ZhbCA9CisJCQkgICAgcHJvZl9h Y2N1bS5yZXFfc3VtOworCQkJY29sX3Byb2ZfYWNjdW1fY291bnQudWludDY0X3ZhbCA9IHByb2Zf YWNjdW0uY291bnQ7CisJCX0KKwkJY29sX2N1cmxleHRlbnRzLnNpemVfdmFsID0gY3VybGV4dGVu dHM7CisKKwkJaWYgKCFpbl9nYXApIHsKKwkJCWVtaXR0ZXJfdGFibGVfcm93KGVtaXR0ZXIsICZy b3cpOworCQl9CisJfQorCWVtaXR0ZXJfanNvbl9hcnJheV9lbmQoZW1pdHRlcik7IC8qIENsb3Nl ICJsZXh0ZW50cyIuICovCisJaWYgKGluX2dhcCkgeworCQllbWl0dGVyX3RhYmxlX3ByaW50Zihl bWl0dGVyLCAiICAgICAgICAgICAgICAgICAgICAgLS0tXG4iKTsKKwl9Cit9CisKK0pFTUFMTE9D X0NPTEQKK3N0YXRpYyB2b2lkCitzdGF0c19hcmVuYV9leHRlbnRzX3ByaW50KGVtaXR0ZXJfdCAq ZW1pdHRlciwgdW5zaWduZWQgaSkgeworCXVuc2lnbmVkIGo7CisJYm9vbCBpbl9nYXAsIGluX2dh cF9wcmV2OworCWVtaXR0ZXJfcm93X3QgaGVhZGVyX3JvdzsKKwllbWl0dGVyX3Jvd19pbml0KCZo ZWFkZXJfcm93KTsKKwllbWl0dGVyX3Jvd190IHJvdzsKKwllbWl0dGVyX3Jvd19pbml0KCZyb3cp OworCisJQ09MX0hEUihyb3csIHNpemUsIE5VTEwsIHJpZ2h0LCAyMCwgc2l6ZSkKKwlDT0xfSERS KHJvdywgaW5kLCBOVUxMLCByaWdodCwgNCwgdW5zaWduZWQpCisJQ09MX0hEUihyb3csIG5kaXJ0 eSwgTlVMTCwgcmlnaHQsIDEzLCBzaXplKQorCUNPTF9IRFIocm93LCBkaXJ0eSwgTlVMTCwgcmln aHQsIDEzLCBzaXplKQorCUNPTF9IRFIocm93LCBubXV6enksIE5VTEwsIHJpZ2h0LCAxMywgc2l6 ZSkKKwlDT0xfSERSKHJvdywgbXV6enksIE5VTEwsIHJpZ2h0LCAxMywgc2l6ZSkKKwlDT0xfSERS KHJvdywgbnJldGFpbmVkLCBOVUxMLCByaWdodCwgMTMsIHNpemUpCisJQ09MX0hEUihyb3csIHJl dGFpbmVkLCBOVUxMLCByaWdodCwgMTMsIHNpemUpCisJQ09MX0hEUihyb3csIG50b3RhbCwgTlVM TCwgcmlnaHQsIDEzLCBzaXplKQorCUNPTF9IRFIocm93LCB0b3RhbCwgTlVMTCwgcmlnaHQsIDEz LCBzaXplKQorCisJLyogTGFiZWwgdGhpcyBzZWN0aW9uLiAqLworCWhlYWRlcl9zaXplLndpZHRo IC09IDg7CisJZW1pdHRlcl90YWJsZV9wcmludGYoZW1pdHRlciwgImV4dGVudHM6Iik7CisJZW1p dHRlcl90YWJsZV9yb3coZW1pdHRlciwgJmhlYWRlcl9yb3cpOworCWVtaXR0ZXJfanNvbl9hcnJh eV9rdl9iZWdpbihlbWl0dGVyLCAiZXh0ZW50cyIpOworCisJc2l6ZV90IHN0YXRzX2FyZW5hc19t aWJbQ1RMX01BWF9ERVBUSF07CisJQ1RMX0xFQUZfUFJFUEFSRShzdGF0c19hcmVuYXNfbWliLCAw LCAic3RhdHMuYXJlbmFzIik7CisJc3RhdHNfYXJlbmFzX21pYlsyXSA9IGk7CisJQ1RMX0xFQUZf UFJFUEFSRShzdGF0c19hcmVuYXNfbWliLCAzLCAiZXh0ZW50cyIpOworCisJaW5fZ2FwID0gZmFs c2U7CisJZm9yIChqID0gMDsgaiA8IFNDX05QU0laRVM7IGorKykgeworCQlzaXplX3QgbmRpcnR5 LCBubXV6enksIG5yZXRhaW5lZCwgdG90YWwsIGRpcnR5X2J5dGVzLAorCQkgICAgbXV6enlfYnl0 ZXMsIHJldGFpbmVkX2J5dGVzLCB0b3RhbF9ieXRlczsKKwkJc3RhdHNfYXJlbmFzX21pYls0XSA9 IGo7CisKKwkJQ1RMX0xFQUYoc3RhdHNfYXJlbmFzX21pYiwgNSwgIm5kaXJ0eSIsICZuZGlydHks IHNpemVfdCk7CisJCUNUTF9MRUFGKHN0YXRzX2FyZW5hc19taWIsIDUsICJubXV6enkiLCAmbm11 enp5LCBzaXplX3QpOworCQlDVExfTEVBRihzdGF0c19hcmVuYXNfbWliLCA1LCAibnJldGFpbmVk IiwgJm5yZXRhaW5lZCwgc2l6ZV90KTsKKwkJQ1RMX0xFQUYoc3RhdHNfYXJlbmFzX21pYiwgNSwg ImRpcnR5X2J5dGVzIiwgJmRpcnR5X2J5dGVzLAorCQkgICAgc2l6ZV90KTsKKwkJQ1RMX0xFQUYo c3RhdHNfYXJlbmFzX21pYiwgNSwgIm11enp5X2J5dGVzIiwgJm11enp5X2J5dGVzLAorCQkgICAg c2l6ZV90KTsKKwkJQ1RMX0xFQUYoc3RhdHNfYXJlbmFzX21pYiwgNSwgInJldGFpbmVkX2J5dGVz IiwKKwkJICAgICZyZXRhaW5lZF9ieXRlcywgc2l6ZV90KTsKKworCQl0b3RhbCA9IG5kaXJ0eSAr IG5tdXp6eSArIG5yZXRhaW5lZDsKKwkJdG90YWxfYnl0ZXMgPSBkaXJ0eV9ieXRlcyArIG11enp5 X2J5dGVzICsgcmV0YWluZWRfYnl0ZXM7CisKKwkJaW5fZ2FwX3ByZXYgPSBpbl9nYXA7CisJCWlu X2dhcCA9ICh0b3RhbCA9PSAwKTsKKworCQlpZiAoaW5fZ2FwX3ByZXYgJiYgIWluX2dhcCkgewor CQkJZW1pdHRlcl90YWJsZV9wcmludGYoZW1pdHRlciwKKwkJCSAgICAiICAgICAgICAgICAgICAg ICAgICAgLS0tXG4iKTsKKwkJfQorCisJCWVtaXR0ZXJfanNvbl9vYmplY3RfYmVnaW4oZW1pdHRl cik7CisJCWVtaXR0ZXJfanNvbl9rdihlbWl0dGVyLCAibmRpcnR5IiwgZW1pdHRlcl90eXBlX3Np emUsICZuZGlydHkpOworCQllbWl0dGVyX2pzb25fa3YoZW1pdHRlciwgIm5tdXp6eSIsIGVtaXR0 ZXJfdHlwZV9zaXplLCAmbm11enp5KTsKKwkJZW1pdHRlcl9qc29uX2t2KGVtaXR0ZXIsICJucmV0 YWluZWQiLCBlbWl0dGVyX3R5cGVfc2l6ZSwKKwkJICAgICZucmV0YWluZWQpOworCisJCWVtaXR0 ZXJfanNvbl9rdihlbWl0dGVyLCAiZGlydHlfYnl0ZXMiLCBlbWl0dGVyX3R5cGVfc2l6ZSwKKwkJ ICAgICZkaXJ0eV9ieXRlcyk7CisJCWVtaXR0ZXJfanNvbl9rdihlbWl0dGVyLCAibXV6enlfYnl0 ZXMiLCBlbWl0dGVyX3R5cGVfc2l6ZSwKKwkJICAgICZtdXp6eV9ieXRlcyk7CisJCWVtaXR0ZXJf anNvbl9rdihlbWl0dGVyLCAicmV0YWluZWRfYnl0ZXMiLCBlbWl0dGVyX3R5cGVfc2l6ZSwKKwkJ ICAgICZyZXRhaW5lZF9ieXRlcyk7CisJCWVtaXR0ZXJfanNvbl9vYmplY3RfZW5kKGVtaXR0ZXIp OworCisJCWNvbF9zaXplLnNpemVfdmFsID0gc3pfcGluZDJzeihqKTsKKwkJY29sX2luZC5zaXpl X3ZhbCA9IGo7CisJCWNvbF9uZGlydHkuc2l6ZV92YWwgPSBuZGlydHk7CisJCWNvbF9kaXJ0eS5z aXplX3ZhbCA9IGRpcnR5X2J5dGVzOworCQljb2xfbm11enp5LnNpemVfdmFsID0gbm11enp5Owor CQljb2xfbXV6enkuc2l6ZV92YWwgPSBtdXp6eV9ieXRlczsKKwkJY29sX25yZXRhaW5lZC5zaXpl X3ZhbCA9IG5yZXRhaW5lZDsKKwkJY29sX3JldGFpbmVkLnNpemVfdmFsID0gcmV0YWluZWRfYnl0 ZXM7CisJCWNvbF9udG90YWwuc2l6ZV92YWwgPSB0b3RhbDsKKwkJY29sX3RvdGFsLnNpemVfdmFs ID0gdG90YWxfYnl0ZXM7CisKKwkJaWYgKCFpbl9nYXApIHsKKwkJCWVtaXR0ZXJfdGFibGVfcm93 KGVtaXR0ZXIsICZyb3cpOworCQl9CisJfQorCWVtaXR0ZXJfanNvbl9hcnJheV9lbmQoZW1pdHRl cik7IC8qIENsb3NlICJleHRlbnRzIi4gKi8KKwlpZiAoaW5fZ2FwKSB7CisJCWVtaXR0ZXJfdGFi bGVfcHJpbnRmKGVtaXR0ZXIsICIgICAgICAgICAgICAgICAgICAgICAtLS1cbiIpOworCX0KK30K Kworc3RhdGljIHZvaWQKK3N0YXRzX2FyZW5hX2hwYV9zaGFyZF9wcmludChlbWl0dGVyX3QgKmVt aXR0ZXIsIHVuc2lnbmVkIGksIHVpbnQ2NF90IHVwdGltZSkgeworCWVtaXR0ZXJfcm93X3QgaGVh ZGVyX3JvdzsKKwllbWl0dGVyX3Jvd19pbml0KCZoZWFkZXJfcm93KTsKKwllbWl0dGVyX3Jvd190 IHJvdzsKKwllbWl0dGVyX3Jvd19pbml0KCZyb3cpOworCisJdWludDY0X3QgbnB1cmdlX3Bhc3Nl czsKKwl1aW50NjRfdCBucHVyZ2VzOworCXVpbnQ2NF90IG5odWdpZmllczsKKwl1aW50NjRfdCBu ZGVodWdpZmllczsKKworCUNUTF9NMl9HRVQoInN0YXRzLmFyZW5hcy4wLmhwYV9zaGFyZC5ucHVy Z2VfcGFzc2VzIiwKKwkgICAgaSwgJm5wdXJnZV9wYXNzZXMsIHVpbnQ2NF90KTsKKwlDVExfTTJf R0VUKCJzdGF0cy5hcmVuYXMuMC5ocGFfc2hhcmQubnB1cmdlcyIsCisJICAgIGksICZucHVyZ2Vz LCB1aW50NjRfdCk7CisJQ1RMX00yX0dFVCgic3RhdHMuYXJlbmFzLjAuaHBhX3NoYXJkLm5odWdp ZmllcyIsCisJICAgIGksICZuaHVnaWZpZXMsIHVpbnQ2NF90KTsKKwlDVExfTTJfR0VUKCJzdGF0 cy5hcmVuYXMuMC5ocGFfc2hhcmQubmRlaHVnaWZpZXMiLAorCSAgICBpLCAmbmRlaHVnaWZpZXMs IHVpbnQ2NF90KTsKKworCXNpemVfdCBucGFnZXNsYWJzX2h1Z2U7CisJc2l6ZV90IG5hY3RpdmVf aHVnZTsKKwlzaXplX3QgbmRpcnR5X2h1Z2U7CisKKwlzaXplX3QgbnBhZ2VzbGFic19ub25odWdl OworCXNpemVfdCBuYWN0aXZlX25vbmh1Z2U7CisJc2l6ZV90IG5kaXJ0eV9ub25odWdlOworCXNp emVfdCBucmV0YWluZWRfbm9uaHVnZTsKKworCXNpemVfdCBzZWNfYnl0ZXM7CisJQ1RMX00yX0dF VCgic3RhdHMuYXJlbmFzLjAuaHBhX3NlY19ieXRlcyIsIGksICZzZWNfYnl0ZXMsIHNpemVfdCk7 CisJZW1pdHRlcl9rdihlbWl0dGVyLCAic2VjX2J5dGVzIiwgIkJ5dGVzIGluIHNtYWxsIGV4dGVu dCBjYWNoZSIsCisJICAgIGVtaXR0ZXJfdHlwZV9zaXplLCAmc2VjX2J5dGVzKTsKKworCS8qIEZp cnN0LCBnbG9iYWwgc3RhdHMuICovCisJZW1pdHRlcl90YWJsZV9wcmludGYoZW1pdHRlciwKKwkg ICAgIkhQQSBzaGFyZCBzdGF0czpcbiIKKwkgICAgIiAgUHVyZ2UgcGFzc2VzOiAlIiBGTVR1NjQg IiAoJSIgRk1UdTY0ICIgLyBzZWMpXG4iCisJICAgICIgIFB1cmdlczogJSIgRk1UdTY0ICIgKCUi IEZNVHU2NCAiIC8gc2VjKVxuIgorCSAgICAiICBIdWdlaWZpZXM6ICUiIEZNVHU2NCAiICglIiBG TVR1NjQgIiAvIHNlYylcbiIKKwkgICAgIiAgRGVodWdpZmllczogJSIgRk1UdTY0ICIgKCUiIEZN VHU2NCAiIC8gc2VjKVxuIgorCSAgICAiXG4iLAorCSAgICBucHVyZ2VfcGFzc2VzLCByYXRlX3Bl cl9zZWNvbmQobnB1cmdlX3Bhc3NlcywgdXB0aW1lKSwKKwkgICAgbnB1cmdlcywgcmF0ZV9wZXJf c2Vjb25kKG5wdXJnZXMsIHVwdGltZSksCisJICAgIG5odWdpZmllcywgcmF0ZV9wZXJfc2Vjb25k KG5odWdpZmllcywgdXB0aW1lKSwKKwkgICAgbmRlaHVnaWZpZXMsIHJhdGVfcGVyX3NlY29uZChu ZGVodWdpZmllcywgdXB0aW1lKSk7CisKKwllbWl0dGVyX2pzb25fb2JqZWN0X2t2X2JlZ2luKGVt aXR0ZXIsICJocGFfc2hhcmQiKTsKKwllbWl0dGVyX2pzb25fa3YoZW1pdHRlciwgIm5wdXJnZV9w YXNzZXMiLCBlbWl0dGVyX3R5cGVfdWludDY0LAorCSAgICAmbnB1cmdlX3Bhc3Nlcyk7CisJZW1p dHRlcl9qc29uX2t2KGVtaXR0ZXIsICJucHVyZ2VzIiwgZW1pdHRlcl90eXBlX3VpbnQ2NCwKKwkg ICAgJm5wdXJnZXMpOworCWVtaXR0ZXJfanNvbl9rdihlbWl0dGVyLCAibmh1Z2lmaWVzIiwgZW1p dHRlcl90eXBlX3VpbnQ2NCwKKwkgICAgJm5odWdpZmllcyk7CisJZW1pdHRlcl9qc29uX2t2KGVt aXR0ZXIsICJuZGVodWdpZmllcyIsIGVtaXR0ZXJfdHlwZV91aW50NjQsCisJICAgICZuZGVodWdp Zmllcyk7CisKKwkvKiBOZXh0LCBmdWxsIHNsYWIgc3RhdHMuICovCisJQ1RMX00yX0dFVCgic3Rh dHMuYXJlbmFzLjAuaHBhX3NoYXJkLmZ1bGxfc2xhYnMubnBhZ2VzbGFic19odWdlIiwKKwkgICAg aSwgJm5wYWdlc2xhYnNfaHVnZSwgc2l6ZV90KTsKKwlDVExfTTJfR0VUKCJzdGF0cy5hcmVuYXMu MC5ocGFfc2hhcmQuZnVsbF9zbGFicy5uYWN0aXZlX2h1Z2UiLAorCSAgICBpLCAmbmFjdGl2ZV9o dWdlLCBzaXplX3QpOworCUNUTF9NMl9HRVQoInN0YXRzLmFyZW5hcy4wLmhwYV9zaGFyZC5mdWxs X3NsYWJzLm5kaXJ0eV9odWdlIiwKKwkgICAgaSwgJm5kaXJ0eV9odWdlLCBzaXplX3QpOworCisJ Q1RMX00yX0dFVCgic3RhdHMuYXJlbmFzLjAuaHBhX3NoYXJkLmZ1bGxfc2xhYnMubnBhZ2VzbGFi c19ub25odWdlIiwKKwkgICAgaSwgJm5wYWdlc2xhYnNfbm9uaHVnZSwgc2l6ZV90KTsKKwlDVExf TTJfR0VUKCJzdGF0cy5hcmVuYXMuMC5ocGFfc2hhcmQuZnVsbF9zbGFicy5uYWN0aXZlX25vbmh1 Z2UiLAorCSAgICBpLCAmbmFjdGl2ZV9ub25odWdlLCBzaXplX3QpOworCUNUTF9NMl9HRVQoInN0 YXRzLmFyZW5hcy4wLmhwYV9zaGFyZC5mdWxsX3NsYWJzLm5kaXJ0eV9ub25odWdlIiwKKwkgICAg aSwgJm5kaXJ0eV9ub25odWdlLCBzaXplX3QpOworCW5yZXRhaW5lZF9ub25odWdlID0gbnBhZ2Vz bGFic19ub25odWdlICogSFVHRVBBR0VfUEFHRVMKKwkgICAgLSBuYWN0aXZlX25vbmh1Z2UgLSBu ZGlydHlfbm9uaHVnZTsKKworCWVtaXR0ZXJfdGFibGVfcHJpbnRmKGVtaXR0ZXIsCisJICAgICIg IEluIGZ1bGwgc2xhYnM6XG4iCisJICAgICIgICAgICBucGFnZXNsYWJzOiAlenUgaHVnZSwgJXp1 IG5vbmh1Z2VcbiIKKwkgICAgIiAgICAgIG5hY3RpdmU6ICV6dSBodWdlLCAlenUgbm9uaHVnZSBc biIKKwkgICAgIiAgICAgIG5kaXJ0eTogJXp1IGh1Z2UsICV6dSBub25odWdlIFxuIgorCSAgICAi ICAgICAgbnJldGFpbmVkOiAwIGh1Z2UsICV6dSBub25odWdlIFxuIiwKKwkgICAgbnBhZ2VzbGFi c19odWdlLCBucGFnZXNsYWJzX25vbmh1Z2UsCisJICAgIG5hY3RpdmVfaHVnZSwgbmFjdGl2ZV9u b25odWdlLAorCSAgICBuZGlydHlfaHVnZSwgbmRpcnR5X25vbmh1Z2UsCisJICAgIG5yZXRhaW5l ZF9ub25odWdlKTsKKworCWVtaXR0ZXJfanNvbl9vYmplY3Rfa3ZfYmVnaW4oZW1pdHRlciwgImZ1 bGxfc2xhYnMiKTsKKwllbWl0dGVyX2pzb25fa3YoZW1pdHRlciwgIm5wYWdlc2xhYnNfaHVnZSIs IGVtaXR0ZXJfdHlwZV9zaXplLAorCSAgICAmbnBhZ2VzbGFic19odWdlKTsKKwllbWl0dGVyX2pz b25fa3YoZW1pdHRlciwgIm5hY3RpdmVfaHVnZSIsIGVtaXR0ZXJfdHlwZV9zaXplLAorCSAgICAm bmFjdGl2ZV9odWdlKTsKKwllbWl0dGVyX2pzb25fa3YoZW1pdHRlciwgIm5hY3RpdmVfaHVnZSIs IGVtaXR0ZXJfdHlwZV9zaXplLAorCSAgICAmbmFjdGl2ZV9odWdlKTsKKwllbWl0dGVyX2pzb25f a3YoZW1pdHRlciwgIm5wYWdlc2xhYnNfbm9uaHVnZSIsIGVtaXR0ZXJfdHlwZV9zaXplLAorCSAg ICAmbnBhZ2VzbGFic19ub25odWdlKTsKKwllbWl0dGVyX2pzb25fa3YoZW1pdHRlciwgIm5hY3Rp dmVfbm9uaHVnZSIsIGVtaXR0ZXJfdHlwZV9zaXplLAorCSAgICAmbmFjdGl2ZV9ub25odWdlKTsK KwllbWl0dGVyX2pzb25fa3YoZW1pdHRlciwgIm5kaXJ0eV9ub25odWdlIiwgZW1pdHRlcl90eXBl X3NpemUsCisJICAgICZuZGlydHlfbm9uaHVnZSk7CisJZW1pdHRlcl9qc29uX29iamVjdF9lbmQo ZW1pdHRlcik7IC8qIEVuZCAiZnVsbF9zbGFicyIgKi8KKworCS8qIE5leHQsIGVtcHR5IHNsYWIg c3RhdHMuICovCisJQ1RMX00yX0dFVCgic3RhdHMuYXJlbmFzLjAuaHBhX3NoYXJkLmVtcHR5X3Ns YWJzLm5wYWdlc2xhYnNfaHVnZSIsCisJICAgIGksICZucGFnZXNsYWJzX2h1Z2UsIHNpemVfdCk7 CisJQ1RMX00yX0dFVCgic3RhdHMuYXJlbmFzLjAuaHBhX3NoYXJkLmVtcHR5X3NsYWJzLm5hY3Rp dmVfaHVnZSIsCisJICAgIGksICZuYWN0aXZlX2h1Z2UsIHNpemVfdCk7CisJQ1RMX00yX0dFVCgi c3RhdHMuYXJlbmFzLjAuaHBhX3NoYXJkLmVtcHR5X3NsYWJzLm5kaXJ0eV9odWdlIiwKKwkgICAg aSwgJm5kaXJ0eV9odWdlLCBzaXplX3QpOworCisJQ1RMX00yX0dFVCgic3RhdHMuYXJlbmFzLjAu aHBhX3NoYXJkLmVtcHR5X3NsYWJzLm5wYWdlc2xhYnNfbm9uaHVnZSIsCisJICAgIGksICZucGFn ZXNsYWJzX25vbmh1Z2UsIHNpemVfdCk7CisJQ1RMX00yX0dFVCgic3RhdHMuYXJlbmFzLjAuaHBh X3NoYXJkLmVtcHR5X3NsYWJzLm5hY3RpdmVfbm9uaHVnZSIsCisJICAgIGksICZuYWN0aXZlX25v bmh1Z2UsIHNpemVfdCk7CisJQ1RMX00yX0dFVCgic3RhdHMuYXJlbmFzLjAuaHBhX3NoYXJkLmVt cHR5X3NsYWJzLm5kaXJ0eV9ub25odWdlIiwKKwkgICAgaSwgJm5kaXJ0eV9ub25odWdlLCBzaXpl X3QpOworCW5yZXRhaW5lZF9ub25odWdlID0gbnBhZ2VzbGFic19ub25odWdlICogSFVHRVBBR0Vf UEFHRVMKKwkgICAgLSBuYWN0aXZlX25vbmh1Z2UgLSBuZGlydHlfbm9uaHVnZTsKKworCWVtaXR0 ZXJfdGFibGVfcHJpbnRmKGVtaXR0ZXIsCisJICAgICIgIEluIGVtcHR5IHNsYWJzOlxuIgorCSAg ICAiICAgICAgbnBhZ2VzbGFiczogJXp1IGh1Z2UsICV6dSBub25odWdlXG4iCisJICAgICIgICAg ICBuYWN0aXZlOiAlenUgaHVnZSwgJXp1IG5vbmh1Z2UgXG4iCisJICAgICIgICAgICBuZGlydHk6 ICV6dSBodWdlLCAlenUgbm9uaHVnZSBcbiIKKwkgICAgIiAgICAgIG5yZXRhaW5lZDogMCBodWdl LCAlenUgbm9uaHVnZSBcbiIKKwkgICAgIlxuIiwKKwkgICAgbnBhZ2VzbGFic19odWdlLCBucGFn ZXNsYWJzX25vbmh1Z2UsCisJICAgIG5hY3RpdmVfaHVnZSwgbmFjdGl2ZV9ub25odWdlLAorCSAg ICBuZGlydHlfaHVnZSwgbmRpcnR5X25vbmh1Z2UsCisJICAgIG5yZXRhaW5lZF9ub25odWdlKTsK KworCWVtaXR0ZXJfanNvbl9vYmplY3Rfa3ZfYmVnaW4oZW1pdHRlciwgImVtcHR5X3NsYWJzIik7 CisJZW1pdHRlcl9qc29uX2t2KGVtaXR0ZXIsICJucGFnZXNsYWJzX2h1Z2UiLCBlbWl0dGVyX3R5 cGVfc2l6ZSwKKwkgICAgJm5wYWdlc2xhYnNfaHVnZSk7CisJZW1pdHRlcl9qc29uX2t2KGVtaXR0 ZXIsICJuYWN0aXZlX2h1Z2UiLCBlbWl0dGVyX3R5cGVfc2l6ZSwKKwkgICAgJm5hY3RpdmVfaHVn ZSk7CisJZW1pdHRlcl9qc29uX2t2KGVtaXR0ZXIsICJuYWN0aXZlX2h1Z2UiLCBlbWl0dGVyX3R5 cGVfc2l6ZSwKKwkgICAgJm5hY3RpdmVfaHVnZSk7CisJZW1pdHRlcl9qc29uX2t2KGVtaXR0ZXIs ICJucGFnZXNsYWJzX25vbmh1Z2UiLCBlbWl0dGVyX3R5cGVfc2l6ZSwKKwkgICAgJm5wYWdlc2xh YnNfbm9uaHVnZSk7CisJZW1pdHRlcl9qc29uX2t2KGVtaXR0ZXIsICJuYWN0aXZlX25vbmh1Z2Ui LCBlbWl0dGVyX3R5cGVfc2l6ZSwKKwkgICAgJm5hY3RpdmVfbm9uaHVnZSk7CisJZW1pdHRlcl9q c29uX2t2KGVtaXR0ZXIsICJuZGlydHlfbm9uaHVnZSIsIGVtaXR0ZXJfdHlwZV9zaXplLAorCSAg ICAmbmRpcnR5X25vbmh1Z2UpOworCWVtaXR0ZXJfanNvbl9vYmplY3RfZW5kKGVtaXR0ZXIpOyAv KiBFbmQgImVtcHR5X3NsYWJzIiAqLworCisJQ09MX0hEUihyb3csIHNpemUsIE5VTEwsIHJpZ2h0 LCAyMCwgc2l6ZSkKKwlDT0xfSERSKHJvdywgaW5kLCBOVUxMLCByaWdodCwgNCwgdW5zaWduZWQp CisJQ09MX0hEUihyb3csIG5wYWdlc2xhYnNfaHVnZSwgTlVMTCwgcmlnaHQsIDE2LCBzaXplKQor CUNPTF9IRFIocm93LCBuYWN0aXZlX2h1Z2UsIE5VTEwsIHJpZ2h0LCAxNiwgc2l6ZSkKKwlDT0xf SERSKHJvdywgbmRpcnR5X2h1Z2UsIE5VTEwsIHJpZ2h0LCAxNiwgc2l6ZSkKKwlDT0xfSERSKHJv dywgbnBhZ2VzbGFic19ub25odWdlLCBOVUxMLCByaWdodCwgMjAsIHNpemUpCisJQ09MX0hEUihy b3csIG5hY3RpdmVfbm9uaHVnZSwgTlVMTCwgcmlnaHQsIDIwLCBzaXplKQorCUNPTF9IRFIocm93 LCBuZGlydHlfbm9uaHVnZSwgTlVMTCwgcmlnaHQsIDIwLCBzaXplKQorCUNPTF9IRFIocm93LCBu cmV0YWluZWRfbm9uaHVnZSwgTlVMTCwgcmlnaHQsIDIwLCBzaXplKQorCisJc2l6ZV90IHN0YXRz X2FyZW5hc19taWJbQ1RMX01BWF9ERVBUSF07CisJQ1RMX0xFQUZfUFJFUEFSRShzdGF0c19hcmVu YXNfbWliLCAwLCAic3RhdHMuYXJlbmFzIik7CisJc3RhdHNfYXJlbmFzX21pYlsyXSA9IGk7CisJ Q1RMX0xFQUZfUFJFUEFSRShzdGF0c19hcmVuYXNfbWliLCAzLCAiaHBhX3NoYXJkLm5vbmZ1bGxf c2xhYnMiKTsKKworCWVtaXR0ZXJfdGFibGVfcm93KGVtaXR0ZXIsICZoZWFkZXJfcm93KTsKKwll bWl0dGVyX2pzb25fYXJyYXlfa3ZfYmVnaW4oZW1pdHRlciwgIm5vbmZ1bGxfc2xhYnMiKTsKKwli b29sIGluX2dhcCA9IGZhbHNlOworCWZvciAocHN6aW5kX3QgaiA9IDA7IGogPCBQU1NFVF9OUFNJ WkVTICYmIGogPCBTQ19OUFNJWkVTOyBqKyspIHsKKwkJc3RhdHNfYXJlbmFzX21pYls1XSA9IGo7 CisKKwkJQ1RMX0xFQUYoc3RhdHNfYXJlbmFzX21pYiwgNiwgIm5wYWdlc2xhYnNfaHVnZSIsCisJ CSAgICAmbnBhZ2VzbGFic19odWdlLCBzaXplX3QpOworCQlDVExfTEVBRihzdGF0c19hcmVuYXNf bWliLCA2LCAibmFjdGl2ZV9odWdlIiwKKwkJICAgICZuYWN0aXZlX2h1Z2UsIHNpemVfdCk7CisJ CUNUTF9MRUFGKHN0YXRzX2FyZW5hc19taWIsIDYsICJuZGlydHlfaHVnZSIsCisJCSAgICAmbmRp cnR5X2h1Z2UsIHNpemVfdCk7CisKKwkJQ1RMX0xFQUYoc3RhdHNfYXJlbmFzX21pYiwgNiwgIm5w YWdlc2xhYnNfbm9uaHVnZSIsCisJCSAgICAmbnBhZ2VzbGFic19ub25odWdlLCBzaXplX3QpOwor CQlDVExfTEVBRihzdGF0c19hcmVuYXNfbWliLCA2LCAibmFjdGl2ZV9ub25odWdlIiwKKwkJICAg ICZuYWN0aXZlX25vbmh1Z2UsIHNpemVfdCk7CisJCUNUTF9MRUFGKHN0YXRzX2FyZW5hc19taWIs IDYsICJuZGlydHlfbm9uaHVnZSIsCisJCSAgICAmbmRpcnR5X25vbmh1Z2UsIHNpemVfdCk7CisJ CW5yZXRhaW5lZF9ub25odWdlID0gbnBhZ2VzbGFic19ub25odWdlICogSFVHRVBBR0VfUEFHRVMK KwkJICAgIC0gbmFjdGl2ZV9ub25odWdlIC0gbmRpcnR5X25vbmh1Z2U7CisKKwkJYm9vbCBpbl9n YXBfcHJldiA9IGluX2dhcDsKKwkJaW5fZ2FwID0gKG5wYWdlc2xhYnNfaHVnZSA9PSAwICYmIG5w YWdlc2xhYnNfbm9uaHVnZSA9PSAwKTsKKwkJaWYgKGluX2dhcF9wcmV2ICYmICFpbl9nYXApIHsK KwkJCWVtaXR0ZXJfdGFibGVfcHJpbnRmKGVtaXR0ZXIsCisJCQkgICAgIiAgICAgICAgICAgICAg ICAgICAgIC0tLVxuIik7CisJCX0KKworCQljb2xfc2l6ZS5zaXplX3ZhbCA9IHN6X3BpbmQyc3oo aik7CisJCWNvbF9pbmQuc2l6ZV92YWwgPSBqOworCQljb2xfbnBhZ2VzbGFic19odWdlLnNpemVf dmFsID0gbnBhZ2VzbGFic19odWdlOworCQljb2xfbmFjdGl2ZV9odWdlLnNpemVfdmFsID0gbmFj dGl2ZV9odWdlOworCQljb2xfbmRpcnR5X2h1Z2Uuc2l6ZV92YWwgPSBuZGlydHlfaHVnZTsKKwkJ Y29sX25wYWdlc2xhYnNfbm9uaHVnZS5zaXplX3ZhbCA9IG5wYWdlc2xhYnNfbm9uaHVnZTsKKwkJ Y29sX25hY3RpdmVfbm9uaHVnZS5zaXplX3ZhbCA9IG5hY3RpdmVfbm9uaHVnZTsKKwkJY29sX25k aXJ0eV9ub25odWdlLnNpemVfdmFsID0gbmRpcnR5X25vbmh1Z2U7CisJCWNvbF9ucmV0YWluZWRf bm9uaHVnZS5zaXplX3ZhbCA9IG5yZXRhaW5lZF9ub25odWdlOworCQlpZiAoIWluX2dhcCkgewor CQkJZW1pdHRlcl90YWJsZV9yb3coZW1pdHRlciwgJnJvdyk7CisJCX0KKworCQllbWl0dGVyX2pz b25fb2JqZWN0X2JlZ2luKGVtaXR0ZXIpOworCQllbWl0dGVyX2pzb25fa3YoZW1pdHRlciwgIm5w YWdlc2xhYnNfaHVnZSIsIGVtaXR0ZXJfdHlwZV9zaXplLAorCQkgICAgJm5wYWdlc2xhYnNfaHVn ZSk7CisJCWVtaXR0ZXJfanNvbl9rdihlbWl0dGVyLCAibmFjdGl2ZV9odWdlIiwgZW1pdHRlcl90 eXBlX3NpemUsCisJCSAgICAmbmFjdGl2ZV9odWdlKTsKKwkJZW1pdHRlcl9qc29uX2t2KGVtaXR0 ZXIsICJuZGlydHlfaHVnZSIsIGVtaXR0ZXJfdHlwZV9zaXplLAorCQkgICAgJm5kaXJ0eV9odWdl KTsKKwkJZW1pdHRlcl9qc29uX2t2KGVtaXR0ZXIsICJucGFnZXNsYWJzX25vbmh1Z2UiLCBlbWl0 dGVyX3R5cGVfc2l6ZSwKKwkJICAgICZucGFnZXNsYWJzX25vbmh1Z2UpOworCQllbWl0dGVyX2pz b25fa3YoZW1pdHRlciwgIm5hY3RpdmVfbm9uaHVnZSIsIGVtaXR0ZXJfdHlwZV9zaXplLAorCQkg ICAgJm5hY3RpdmVfbm9uaHVnZSk7CisJCWVtaXR0ZXJfanNvbl9rdihlbWl0dGVyLCAibmRpcnR5 X25vbmh1Z2UiLCBlbWl0dGVyX3R5cGVfc2l6ZSwKKwkJICAgICZuZGlydHlfbm9uaHVnZSk7CisJ CWVtaXR0ZXJfanNvbl9vYmplY3RfZW5kKGVtaXR0ZXIpOworCX0KKwllbWl0dGVyX2pzb25fYXJy YXlfZW5kKGVtaXR0ZXIpOyAvKiBFbmQgIm5vbmZ1bGxfc2xhYnMiICovCisJZW1pdHRlcl9qc29u X29iamVjdF9lbmQoZW1pdHRlcik7IC8qIEVuZCAiaHBhX3NoYXJkIiAqLworCWlmIChpbl9nYXAp IHsKKwkJZW1pdHRlcl90YWJsZV9wcmludGYoZW1pdHRlciwgIiAgICAgICAgICAgICAgICAgICAg IC0tLVxuIik7CisJfQorfQorCitzdGF0aWMgdm9pZAorc3RhdHNfYXJlbmFfbXV0ZXhlc19wcmlu dChlbWl0dGVyX3QgKmVtaXR0ZXIsIHVuc2lnbmVkIGFyZW5hX2luZCwgdWludDY0X3QgdXB0aW1l KSB7CisJZW1pdHRlcl9yb3dfdCByb3c7CisJZW1pdHRlcl9jb2xfdCBjb2xfbmFtZTsKKwllbWl0 dGVyX2NvbF90IGNvbDY0W211dGV4X3Byb2ZfbnVtX3VpbnQ2NF90X2NvdW50ZXJzXTsKKwllbWl0 dGVyX2NvbF90IGNvbDMyW211dGV4X3Byb2ZfbnVtX3VpbnQzMl90X2NvdW50ZXJzXTsKKworCWVt aXR0ZXJfcm93X2luaXQoJnJvdyk7CisJbXV0ZXhfc3RhdHNfaW5pdF9jb2xzKCZyb3csICIiLCAm Y29sX25hbWUsIGNvbDY0LCBjb2wzMik7CisKKwllbWl0dGVyX2pzb25fb2JqZWN0X2t2X2JlZ2lu KGVtaXR0ZXIsICJtdXRleGVzIik7CisJZW1pdHRlcl90YWJsZV9yb3coZW1pdHRlciwgJnJvdyk7 CisKKwlzaXplX3Qgc3RhdHNfYXJlbmFzX21pYltDVExfTUFYX0RFUFRIXTsKKwlDVExfTEVBRl9Q UkVQQVJFKHN0YXRzX2FyZW5hc19taWIsIDAsICJzdGF0cy5hcmVuYXMiKTsKKwlzdGF0c19hcmVu YXNfbWliWzJdID0gYXJlbmFfaW5kOworCUNUTF9MRUFGX1BSRVBBUkUoc3RhdHNfYXJlbmFzX21p YiwgMywgIm11dGV4ZXMiKTsKKworCWZvciAobXV0ZXhfcHJvZl9hcmVuYV9pbmRfdCBpID0gMDsg aSA8IG11dGV4X3Byb2ZfbnVtX2FyZW5hX211dGV4ZXM7CisJICAgIGkrKykgeworCQljb25zdCBj aGFyICpuYW1lID0gYXJlbmFfbXV0ZXhfbmFtZXNbaV07CisJCWVtaXR0ZXJfanNvbl9vYmplY3Rf a3ZfYmVnaW4oZW1pdHRlciwgbmFtZSk7CisJCW11dGV4X3N0YXRzX3JlYWRfYXJlbmEoc3RhdHNf YXJlbmFzX21pYiwgNCwgbmFtZSwgJmNvbF9uYW1lLAorCQkgICAgY29sNjQsIGNvbDMyLCB1cHRp bWUpOworCQltdXRleF9zdGF0c19lbWl0KGVtaXR0ZXIsICZyb3csIGNvbDY0LCBjb2wzMik7CisJ CWVtaXR0ZXJfanNvbl9vYmplY3RfZW5kKGVtaXR0ZXIpOyAvKiBDbG9zZSB0aGUgbXV0ZXggZGlj dC4gKi8KKwl9CisJZW1pdHRlcl9qc29uX29iamVjdF9lbmQoZW1pdHRlcik7IC8qIEVuZCAibXV0 ZXhlcyIuICovCit9CisKK0pFTUFMTE9DX0NPTEQKK3N0YXRpYyB2b2lkCitzdGF0c19hcmVuYV9w cmludChlbWl0dGVyX3QgKmVtaXR0ZXIsIHVuc2lnbmVkIGksIGJvb2wgYmlucywgYm9vbCBsYXJn ZSwKKyAgICBib29sIG11dGV4LCBib29sIGV4dGVudHMsIGJvb2wgaHBhKSB7CisJdW5zaWduZWQg bnRocmVhZHM7CisJY29uc3QgY2hhciAqZHNzOworCXNzaXplX3QgZGlydHlfZGVjYXlfbXMsIG11 enp5X2RlY2F5X21zOworCXNpemVfdCBwYWdlLCBwYWN0aXZlLCBwZGlydHksIHBtdXp6eSwgbWFw cGVkLCByZXRhaW5lZDsKKwlzaXplX3QgYmFzZSwgaW50ZXJuYWwsIHJlc2lkZW50LCBtZXRhZGF0 YV90aHAsIGV4dGVudF9hdmFpbDsKKwl1aW50NjRfdCBkaXJ0eV9ucHVyZ2UsIGRpcnR5X25tYWR2 aXNlLCBkaXJ0eV9wdXJnZWQ7CisJdWludDY0X3QgbXV6enlfbnB1cmdlLCBtdXp6eV9ubWFkdmlz ZSwgbXV6enlfcHVyZ2VkOworCXNpemVfdCBzbWFsbF9hbGxvY2F0ZWQ7CisJdWludDY0X3Qgc21h bGxfbm1hbGxvYywgc21hbGxfbmRhbGxvYywgc21hbGxfbnJlcXVlc3RzLCBzbWFsbF9uZmlsbHMs CisJICAgIHNtYWxsX25mbHVzaGVzOworCXNpemVfdCBsYXJnZV9hbGxvY2F0ZWQ7CisJdWludDY0 X3QgbGFyZ2Vfbm1hbGxvYywgbGFyZ2VfbmRhbGxvYywgbGFyZ2VfbnJlcXVlc3RzLCBsYXJnZV9u ZmlsbHMsCisJICAgIGxhcmdlX25mbHVzaGVzOworCXNpemVfdCB0Y2FjaGVfYnl0ZXMsIHRjYWNo ZV9zdGFzaGVkX2J5dGVzLCBhYmFuZG9uZWRfdm07CisJdWludDY0X3QgdXB0aW1lOworCisJQ1RM X0dFVCgiYXJlbmFzLnBhZ2UiLCAmcGFnZSwgc2l6ZV90KTsKKworCUNUTF9NMl9HRVQoInN0YXRz LmFyZW5hcy4wLm50aHJlYWRzIiwgaSwgJm50aHJlYWRzLCB1bnNpZ25lZCk7CisJZW1pdHRlcl9r dihlbWl0dGVyLCAibnRocmVhZHMiLCAiYXNzaWduZWQgdGhyZWFkcyIsCisJICAgIGVtaXR0ZXJf dHlwZV91bnNpZ25lZCwgJm50aHJlYWRzKTsKKworCUNUTF9NMl9HRVQoInN0YXRzLmFyZW5hcy4w LnVwdGltZSIsIGksICZ1cHRpbWUsIHVpbnQ2NF90KTsKKwllbWl0dGVyX2t2KGVtaXR0ZXIsICJ1 cHRpbWVfbnMiLCAidXB0aW1lIiwgZW1pdHRlcl90eXBlX3VpbnQ2NCwKKwkgICAgJnVwdGltZSk7 CisKKwlDVExfTTJfR0VUKCJzdGF0cy5hcmVuYXMuMC5kc3MiLCBpLCAmZHNzLCBjb25zdCBjaGFy ICopOworCWVtaXR0ZXJfa3YoZW1pdHRlciwgImRzcyIsICJkc3MgYWxsb2NhdGlvbiBwcmVjZWRl bmNlIiwKKwkgICAgZW1pdHRlcl90eXBlX3N0cmluZywgJmRzcyk7CisKKwlDVExfTTJfR0VUKCJz dGF0cy5hcmVuYXMuMC5kaXJ0eV9kZWNheV9tcyIsIGksICZkaXJ0eV9kZWNheV9tcywKKwkgICAg c3NpemVfdCk7CisJQ1RMX00yX0dFVCgic3RhdHMuYXJlbmFzLjAubXV6enlfZGVjYXlfbXMiLCBp LCAmbXV6enlfZGVjYXlfbXMsCisJICAgIHNzaXplX3QpOworCUNUTF9NMl9HRVQoInN0YXRzLmFy ZW5hcy4wLnBhY3RpdmUiLCBpLCAmcGFjdGl2ZSwgc2l6ZV90KTsKKwlDVExfTTJfR0VUKCJzdGF0 cy5hcmVuYXMuMC5wZGlydHkiLCBpLCAmcGRpcnR5LCBzaXplX3QpOworCUNUTF9NMl9HRVQoInN0 YXRzLmFyZW5hcy4wLnBtdXp6eSIsIGksICZwbXV6enksIHNpemVfdCk7CisJQ1RMX00yX0dFVCgi c3RhdHMuYXJlbmFzLjAuZGlydHlfbnB1cmdlIiwgaSwgJmRpcnR5X25wdXJnZSwgdWludDY0X3Qp OworCUNUTF9NMl9HRVQoInN0YXRzLmFyZW5hcy4wLmRpcnR5X25tYWR2aXNlIiwgaSwgJmRpcnR5 X25tYWR2aXNlLAorCSAgICB1aW50NjRfdCk7CisJQ1RMX00yX0dFVCgic3RhdHMuYXJlbmFzLjAu ZGlydHlfcHVyZ2VkIiwgaSwgJmRpcnR5X3B1cmdlZCwgdWludDY0X3QpOworCUNUTF9NMl9HRVQo InN0YXRzLmFyZW5hcy4wLm11enp5X25wdXJnZSIsIGksICZtdXp6eV9ucHVyZ2UsIHVpbnQ2NF90 KTsKKwlDVExfTTJfR0VUKCJzdGF0cy5hcmVuYXMuMC5tdXp6eV9ubWFkdmlzZSIsIGksICZtdXp6 eV9ubWFkdmlzZSwKKwkgICAgdWludDY0X3QpOworCUNUTF9NMl9HRVQoInN0YXRzLmFyZW5hcy4w Lm11enp5X3B1cmdlZCIsIGksICZtdXp6eV9wdXJnZWQsIHVpbnQ2NF90KTsKKworCWVtaXR0ZXJf cm93X3QgZGVjYXlfcm93OworCWVtaXR0ZXJfcm93X2luaXQoJmRlY2F5X3Jvdyk7CisKKwkvKiBK U09OLXN0eWxlIGVtaXNzaW9uLiAqLworCWVtaXR0ZXJfanNvbl9rdihlbWl0dGVyLCAiZGlydHlf ZGVjYXlfbXMiLCBlbWl0dGVyX3R5cGVfc3NpemUsCisJICAgICZkaXJ0eV9kZWNheV9tcyk7CisJ ZW1pdHRlcl9qc29uX2t2KGVtaXR0ZXIsICJtdXp6eV9kZWNheV9tcyIsIGVtaXR0ZXJfdHlwZV9z c2l6ZSwKKwkgICAgJm11enp5X2RlY2F5X21zKTsKKworCWVtaXR0ZXJfanNvbl9rdihlbWl0dGVy LCAicGFjdGl2ZSIsIGVtaXR0ZXJfdHlwZV9zaXplLCAmcGFjdGl2ZSk7CisJZW1pdHRlcl9qc29u X2t2KGVtaXR0ZXIsICJwZGlydHkiLCBlbWl0dGVyX3R5cGVfc2l6ZSwgJnBkaXJ0eSk7CisJZW1p dHRlcl9qc29uX2t2KGVtaXR0ZXIsICJwbXV6enkiLCBlbWl0dGVyX3R5cGVfc2l6ZSwgJnBtdXp6 eSk7CisKKwllbWl0dGVyX2pzb25fa3YoZW1pdHRlciwgImRpcnR5X25wdXJnZSIsIGVtaXR0ZXJf dHlwZV91aW50NjQsCisJICAgICZkaXJ0eV9ucHVyZ2UpOworCWVtaXR0ZXJfanNvbl9rdihlbWl0 dGVyLCAiZGlydHlfbm1hZHZpc2UiLCBlbWl0dGVyX3R5cGVfdWludDY0LAorCSAgICAmZGlydHlf bm1hZHZpc2UpOworCWVtaXR0ZXJfanNvbl9rdihlbWl0dGVyLCAiZGlydHlfcHVyZ2VkIiwgZW1p dHRlcl90eXBlX3VpbnQ2NCwKKwkgICAgJmRpcnR5X3B1cmdlZCk7CisKKwllbWl0dGVyX2pzb25f a3YoZW1pdHRlciwgIm11enp5X25wdXJnZSIsIGVtaXR0ZXJfdHlwZV91aW50NjQsCisJICAgICZt dXp6eV9ucHVyZ2UpOworCWVtaXR0ZXJfanNvbl9rdihlbWl0dGVyLCAibXV6enlfbm1hZHZpc2Ui LCBlbWl0dGVyX3R5cGVfdWludDY0LAorCSAgICAmbXV6enlfbm1hZHZpc2UpOworCWVtaXR0ZXJf anNvbl9rdihlbWl0dGVyLCAibXV6enlfcHVyZ2VkIiwgZW1pdHRlcl90eXBlX3VpbnQ2NCwKKwkg ICAgJm11enp5X3B1cmdlZCk7CisKKwkvKiBUYWJsZS1zdHlsZSBlbWlzc2lvbi4gKi8KKwlDT0wo ZGVjYXlfcm93LCBkZWNheV90eXBlLCByaWdodCwgOSwgdGl0bGUpOworCWNvbF9kZWNheV90eXBl LnN0cl92YWwgPSAiZGVjYXlpbmc6IjsKKworCUNPTChkZWNheV9yb3csIGRlY2F5X3RpbWUsIHJp Z2h0LCA2LCB0aXRsZSk7CisJY29sX2RlY2F5X3RpbWUuc3RyX3ZhbCA9ICJ0aW1lIjsKKworCUNP TChkZWNheV9yb3csIGRlY2F5X25wYWdlcywgcmlnaHQsIDEzLCB0aXRsZSk7CisJY29sX2RlY2F5 X25wYWdlcy5zdHJfdmFsID0gIm5wYWdlcyI7CisKKwlDT0woZGVjYXlfcm93LCBkZWNheV9zd2Vl cHMsIHJpZ2h0LCAxMywgdGl0bGUpOworCWNvbF9kZWNheV9zd2VlcHMuc3RyX3ZhbCA9ICJzd2Vl cHMiOworCisJQ09MKGRlY2F5X3JvdywgZGVjYXlfbWFkdmlzZXMsIHJpZ2h0LCAxMywgdGl0bGUp OworCWNvbF9kZWNheV9tYWR2aXNlcy5zdHJfdmFsID0gIm1hZHZpc2VzIjsKKworCUNPTChkZWNh eV9yb3csIGRlY2F5X3B1cmdlZCwgcmlnaHQsIDEzLCB0aXRsZSk7CisJY29sX2RlY2F5X3B1cmdl ZC5zdHJfdmFsID0gInB1cmdlZCI7CisKKwkvKiBUaXRsZSByb3cuICovCisJZW1pdHRlcl90YWJs ZV9yb3coZW1pdHRlciwgJmRlY2F5X3Jvdyk7CisKKwkvKiBEaXJ0eSByb3cuICovCisJY29sX2Rl Y2F5X3R5cGUuc3RyX3ZhbCA9ICJkaXJ0eToiOworCisJaWYgKGRpcnR5X2RlY2F5X21zID49IDAp IHsKKwkJY29sX2RlY2F5X3RpbWUudHlwZSA9IGVtaXR0ZXJfdHlwZV9zc2l6ZTsKKwkJY29sX2Rl Y2F5X3RpbWUuc3NpemVfdmFsID0gZGlydHlfZGVjYXlfbXM7CisJfSBlbHNlIHsKKwkJY29sX2Rl Y2F5X3RpbWUudHlwZSA9IGVtaXR0ZXJfdHlwZV90aXRsZTsKKwkJY29sX2RlY2F5X3RpbWUuc3Ry X3ZhbCA9ICJOL0EiOworCX0KKworCWNvbF9kZWNheV9ucGFnZXMudHlwZSA9IGVtaXR0ZXJfdHlw ZV9zaXplOworCWNvbF9kZWNheV9ucGFnZXMuc2l6ZV92YWwgPSBwZGlydHk7CisKKwljb2xfZGVj YXlfc3dlZXBzLnR5cGUgPSBlbWl0dGVyX3R5cGVfdWludDY0OworCWNvbF9kZWNheV9zd2VlcHMu dWludDY0X3ZhbCA9IGRpcnR5X25wdXJnZTsKKworCWNvbF9kZWNheV9tYWR2aXNlcy50eXBlID0g ZW1pdHRlcl90eXBlX3VpbnQ2NDsKKwljb2xfZGVjYXlfbWFkdmlzZXMudWludDY0X3ZhbCA9IGRp cnR5X25tYWR2aXNlOworCisJY29sX2RlY2F5X3B1cmdlZC50eXBlID0gZW1pdHRlcl90eXBlX3Vp bnQ2NDsKKwljb2xfZGVjYXlfcHVyZ2VkLnVpbnQ2NF92YWwgPSBkaXJ0eV9wdXJnZWQ7CisKKwll bWl0dGVyX3RhYmxlX3JvdyhlbWl0dGVyLCAmZGVjYXlfcm93KTsKKworCS8qIE11enp5IHJvdy4g Ki8KKwljb2xfZGVjYXlfdHlwZS5zdHJfdmFsID0gIm11enp5OiI7CisKKwlpZiAobXV6enlfZGVj YXlfbXMgPj0gMCkgeworCQljb2xfZGVjYXlfdGltZS50eXBlID0gZW1pdHRlcl90eXBlX3NzaXpl OworCQljb2xfZGVjYXlfdGltZS5zc2l6ZV92YWwgPSBtdXp6eV9kZWNheV9tczsKKwl9IGVsc2Ug eworCQljb2xfZGVjYXlfdGltZS50eXBlID0gZW1pdHRlcl90eXBlX3RpdGxlOworCQljb2xfZGVj YXlfdGltZS5zdHJfdmFsID0gIk4vQSI7CisJfQorCisJY29sX2RlY2F5X25wYWdlcy50eXBlID0g ZW1pdHRlcl90eXBlX3NpemU7CisJY29sX2RlY2F5X25wYWdlcy5zaXplX3ZhbCA9IHBtdXp6eTsK KworCWNvbF9kZWNheV9zd2VlcHMudHlwZSA9IGVtaXR0ZXJfdHlwZV91aW50NjQ7CisJY29sX2Rl Y2F5X3N3ZWVwcy51aW50NjRfdmFsID0gbXV6enlfbnB1cmdlOworCisJY29sX2RlY2F5X21hZHZp c2VzLnR5cGUgPSBlbWl0dGVyX3R5cGVfdWludDY0OworCWNvbF9kZWNheV9tYWR2aXNlcy51aW50 NjRfdmFsID0gbXV6enlfbm1hZHZpc2U7CisKKwljb2xfZGVjYXlfcHVyZ2VkLnR5cGUgPSBlbWl0 dGVyX3R5cGVfdWludDY0OworCWNvbF9kZWNheV9wdXJnZWQudWludDY0X3ZhbCA9IG11enp5X3B1 cmdlZDsKKworCWVtaXR0ZXJfdGFibGVfcm93KGVtaXR0ZXIsICZkZWNheV9yb3cpOworCisJLyog U21hbGwgLyBsYXJnZSAvIHRvdGFsIGFsbG9jYXRpb24gY291bnRzLiAqLworCWVtaXR0ZXJfcm93 X3QgYWxsb2NfY291bnRfcm93OworCWVtaXR0ZXJfcm93X2luaXQoJmFsbG9jX2NvdW50X3Jvdyk7 CisKKwlDT0woYWxsb2NfY291bnRfcm93LCBjb3VudF90aXRsZSwgbGVmdCwgMjEsIHRpdGxlKTsK Kwljb2xfY291bnRfdGl0bGUuc3RyX3ZhbCA9ICIiOworCisJQ09MKGFsbG9jX2NvdW50X3Jvdywg Y291bnRfYWxsb2NhdGVkLCByaWdodCwgMTYsIHRpdGxlKTsKKwljb2xfY291bnRfYWxsb2NhdGVk LnN0cl92YWwgPSAiYWxsb2NhdGVkIjsKKworCUNPTChhbGxvY19jb3VudF9yb3csIGNvdW50X25t YWxsb2MsIHJpZ2h0LCAxNiwgdGl0bGUpOworCWNvbF9jb3VudF9ubWFsbG9jLnN0cl92YWwgPSAi bm1hbGxvYyI7CisJQ09MKGFsbG9jX2NvdW50X3JvdywgY291bnRfbm1hbGxvY19wcywgcmlnaHQs IDEwLCB0aXRsZSk7CisJY29sX2NvdW50X25tYWxsb2NfcHMuc3RyX3ZhbCA9ICIoIy9zZWMpIjsK KworCUNPTChhbGxvY19jb3VudF9yb3csIGNvdW50X25kYWxsb2MsIHJpZ2h0LCAxNiwgdGl0bGUp OworCWNvbF9jb3VudF9uZGFsbG9jLnN0cl92YWwgPSAibmRhbGxvYyI7CisJQ09MKGFsbG9jX2Nv dW50X3JvdywgY291bnRfbmRhbGxvY19wcywgcmlnaHQsIDEwLCB0aXRsZSk7CisJY29sX2NvdW50 X25kYWxsb2NfcHMuc3RyX3ZhbCA9ICIoIy9zZWMpIjsKKworCUNPTChhbGxvY19jb3VudF9yb3cs IGNvdW50X25yZXF1ZXN0cywgcmlnaHQsIDE2LCB0aXRsZSk7CisJY29sX2NvdW50X25yZXF1ZXN0 cy5zdHJfdmFsID0gIm5yZXF1ZXN0cyI7CisJQ09MKGFsbG9jX2NvdW50X3JvdywgY291bnRfbnJl cXVlc3RzX3BzLCByaWdodCwgMTAsIHRpdGxlKTsKKwljb2xfY291bnRfbnJlcXVlc3RzX3BzLnN0 cl92YWwgPSAiKCMvc2VjKSI7CisKKwlDT0woYWxsb2NfY291bnRfcm93LCBjb3VudF9uZmlsbHMs IHJpZ2h0LCAxNiwgdGl0bGUpOworCWNvbF9jb3VudF9uZmlsbHMuc3RyX3ZhbCA9ICJuZmlsbCI7 CisJQ09MKGFsbG9jX2NvdW50X3JvdywgY291bnRfbmZpbGxzX3BzLCByaWdodCwgMTAsIHRpdGxl KTsKKwljb2xfY291bnRfbmZpbGxzX3BzLnN0cl92YWwgPSAiKCMvc2VjKSI7CisKKwlDT0woYWxs b2NfY291bnRfcm93LCBjb3VudF9uZmx1c2hlcywgcmlnaHQsIDE2LCB0aXRsZSk7CisJY29sX2Nv dW50X25mbHVzaGVzLnN0cl92YWwgPSAibmZsdXNoIjsKKwlDT0woYWxsb2NfY291bnRfcm93LCBj b3VudF9uZmx1c2hlc19wcywgcmlnaHQsIDEwLCB0aXRsZSk7CisJY29sX2NvdW50X25mbHVzaGVz X3BzLnN0cl92YWwgPSAiKCMvc2VjKSI7CisKKwllbWl0dGVyX3RhYmxlX3JvdyhlbWl0dGVyLCAm YWxsb2NfY291bnRfcm93KTsKKworCWNvbF9jb3VudF9ubWFsbG9jX3BzLnR5cGUgPSBlbWl0dGVy X3R5cGVfdWludDY0OworCWNvbF9jb3VudF9uZGFsbG9jX3BzLnR5cGUgPSBlbWl0dGVyX3R5cGVf dWludDY0OworCWNvbF9jb3VudF9ucmVxdWVzdHNfcHMudHlwZSA9IGVtaXR0ZXJfdHlwZV91aW50 NjQ7CisJY29sX2NvdW50X25maWxsc19wcy50eXBlID0gZW1pdHRlcl90eXBlX3VpbnQ2NDsKKwlj b2xfY291bnRfbmZsdXNoZXNfcHMudHlwZSA9IGVtaXR0ZXJfdHlwZV91aW50NjQ7CisKKyNkZWZp bmUgR0VUX0FORF9FTUlUX0FMTE9DX1NUQVQoc21hbGxfb3JfbGFyZ2UsIG5hbWUsIHZhbHR5cGUp CQlcCisJQ1RMX00yX0dFVCgic3RhdHMuYXJlbmFzLjAuIiAjc21hbGxfb3JfbGFyZ2UgIi4iICNu YW1lLCBpLAlcCisJICAgICZzbWFsbF9vcl9sYXJnZSMjXyMjbmFtZSwgdmFsdHlwZSMjX3QpOwkJ CVwKKwllbWl0dGVyX2pzb25fa3YoZW1pdHRlciwgI25hbWUsIGVtaXR0ZXJfdHlwZV8jI3ZhbHR5 cGUsCQlcCisJICAgICZzbWFsbF9vcl9sYXJnZSMjXyMjbmFtZSk7CQkJCQlcCisJY29sX2NvdW50 XyMjbmFtZS50eXBlID0gZW1pdHRlcl90eXBlXyMjdmFsdHlwZTsJCVwKKwljb2xfY291bnRfIyNu YW1lLnZhbHR5cGUjI192YWwgPSBzbWFsbF9vcl9sYXJnZSMjXyMjbmFtZTsKKworCWVtaXR0ZXJf anNvbl9vYmplY3Rfa3ZfYmVnaW4oZW1pdHRlciwgInNtYWxsIik7CisJY29sX2NvdW50X3RpdGxl LnN0cl92YWwgPSAic21hbGw6IjsKKworCUdFVF9BTkRfRU1JVF9BTExPQ19TVEFUKHNtYWxsLCBh bGxvY2F0ZWQsIHNpemUpCisJR0VUX0FORF9FTUlUX0FMTE9DX1NUQVQoc21hbGwsIG5tYWxsb2Ms IHVpbnQ2NCkKKwljb2xfY291bnRfbm1hbGxvY19wcy51aW50NjRfdmFsID0KKwkgICAgcmF0ZV9w ZXJfc2Vjb25kKGNvbF9jb3VudF9ubWFsbG9jLnVpbnQ2NF92YWwsIHVwdGltZSk7CisJR0VUX0FO RF9FTUlUX0FMTE9DX1NUQVQoc21hbGwsIG5kYWxsb2MsIHVpbnQ2NCkKKwljb2xfY291bnRfbmRh bGxvY19wcy51aW50NjRfdmFsID0KKwkgICAgcmF0ZV9wZXJfc2Vjb25kKGNvbF9jb3VudF9uZGFs bG9jLnVpbnQ2NF92YWwsIHVwdGltZSk7CisJR0VUX0FORF9FTUlUX0FMTE9DX1NUQVQoc21hbGws IG5yZXF1ZXN0cywgdWludDY0KQorCWNvbF9jb3VudF9ucmVxdWVzdHNfcHMudWludDY0X3ZhbCA9 CisJICAgIHJhdGVfcGVyX3NlY29uZChjb2xfY291bnRfbnJlcXVlc3RzLnVpbnQ2NF92YWwsIHVw dGltZSk7CisJR0VUX0FORF9FTUlUX0FMTE9DX1NUQVQoc21hbGwsIG5maWxscywgdWludDY0KQor CWNvbF9jb3VudF9uZmlsbHNfcHMudWludDY0X3ZhbCA9CisJICAgIHJhdGVfcGVyX3NlY29uZChj b2xfY291bnRfbmZpbGxzLnVpbnQ2NF92YWwsIHVwdGltZSk7CisJR0VUX0FORF9FTUlUX0FMTE9D X1NUQVQoc21hbGwsIG5mbHVzaGVzLCB1aW50NjQpCisJY29sX2NvdW50X25mbHVzaGVzX3BzLnVp bnQ2NF92YWwgPQorCSAgICByYXRlX3Blcl9zZWNvbmQoY29sX2NvdW50X25mbHVzaGVzLnVpbnQ2 NF92YWwsIHVwdGltZSk7CisKKwllbWl0dGVyX3RhYmxlX3JvdyhlbWl0dGVyLCAmYWxsb2NfY291 bnRfcm93KTsKKwllbWl0dGVyX2pzb25fb2JqZWN0X2VuZChlbWl0dGVyKTsgLyogQ2xvc2UgInNt YWxsIi4gKi8KKworCWVtaXR0ZXJfanNvbl9vYmplY3Rfa3ZfYmVnaW4oZW1pdHRlciwgImxhcmdl Iik7CisJY29sX2NvdW50X3RpdGxlLnN0cl92YWwgPSAibGFyZ2U6IjsKKworCUdFVF9BTkRfRU1J VF9BTExPQ19TVEFUKGxhcmdlLCBhbGxvY2F0ZWQsIHNpemUpCisJR0VUX0FORF9FTUlUX0FMTE9D X1NUQVQobGFyZ2UsIG5tYWxsb2MsIHVpbnQ2NCkKKwljb2xfY291bnRfbm1hbGxvY19wcy51aW50 NjRfdmFsID0KKwkgICAgcmF0ZV9wZXJfc2Vjb25kKGNvbF9jb3VudF9ubWFsbG9jLnVpbnQ2NF92 YWwsIHVwdGltZSk7CisJR0VUX0FORF9FTUlUX0FMTE9DX1NUQVQobGFyZ2UsIG5kYWxsb2MsIHVp bnQ2NCkKKwljb2xfY291bnRfbmRhbGxvY19wcy51aW50NjRfdmFsID0KKwkgICAgcmF0ZV9wZXJf c2Vjb25kKGNvbF9jb3VudF9uZGFsbG9jLnVpbnQ2NF92YWwsIHVwdGltZSk7CisJR0VUX0FORF9F TUlUX0FMTE9DX1NUQVQobGFyZ2UsIG5yZXF1ZXN0cywgdWludDY0KQorCWNvbF9jb3VudF9ucmVx dWVzdHNfcHMudWludDY0X3ZhbCA9CisJICAgIHJhdGVfcGVyX3NlY29uZChjb2xfY291bnRfbnJl cXVlc3RzLnVpbnQ2NF92YWwsIHVwdGltZSk7CisJR0VUX0FORF9FTUlUX0FMTE9DX1NUQVQobGFy Z2UsIG5maWxscywgdWludDY0KQorCWNvbF9jb3VudF9uZmlsbHNfcHMudWludDY0X3ZhbCA9CisJ ICAgIHJhdGVfcGVyX3NlY29uZChjb2xfY291bnRfbmZpbGxzLnVpbnQ2NF92YWwsIHVwdGltZSk7 CisJR0VUX0FORF9FTUlUX0FMTE9DX1NUQVQobGFyZ2UsIG5mbHVzaGVzLCB1aW50NjQpCisJY29s X2NvdW50X25mbHVzaGVzX3BzLnVpbnQ2NF92YWwgPQorCSAgICByYXRlX3Blcl9zZWNvbmQoY29s X2NvdW50X25mbHVzaGVzLnVpbnQ2NF92YWwsIHVwdGltZSk7CisKKwllbWl0dGVyX3RhYmxlX3Jv dyhlbWl0dGVyLCAmYWxsb2NfY291bnRfcm93KTsKKwllbWl0dGVyX2pzb25fb2JqZWN0X2VuZChl bWl0dGVyKTsgLyogQ2xvc2UgImxhcmdlIi4gKi8KKworI3VuZGVmIEdFVF9BTkRfRU1JVF9BTExP Q19TVEFUCisKKwkvKiBBZ2dyZWdhdGVkIHNtYWxsICsgbGFyZ2Ugc3RhdHMgYXJlIGVtaXR0ZXIg b25seSBpbiB0YWJsZSBtb2RlLiAqLworCWNvbF9jb3VudF90aXRsZS5zdHJfdmFsID0gInRvdGFs OiI7CisJY29sX2NvdW50X2FsbG9jYXRlZC5zaXplX3ZhbCA9IHNtYWxsX2FsbG9jYXRlZCArIGxh cmdlX2FsbG9jYXRlZDsKKwljb2xfY291bnRfbm1hbGxvYy51aW50NjRfdmFsID0gc21hbGxfbm1h bGxvYyArIGxhcmdlX25tYWxsb2M7CisJY29sX2NvdW50X25kYWxsb2MudWludDY0X3ZhbCA9IHNt YWxsX25kYWxsb2MgKyBsYXJnZV9uZGFsbG9jOworCWNvbF9jb3VudF9ucmVxdWVzdHMudWludDY0 X3ZhbCA9IHNtYWxsX25yZXF1ZXN0cyArIGxhcmdlX25yZXF1ZXN0czsKKwljb2xfY291bnRfbmZp bGxzLnVpbnQ2NF92YWwgPSBzbWFsbF9uZmlsbHMgKyBsYXJnZV9uZmlsbHM7CisJY29sX2NvdW50 X25mbHVzaGVzLnVpbnQ2NF92YWwgPSBzbWFsbF9uZmx1c2hlcyArIGxhcmdlX25mbHVzaGVzOwor CWNvbF9jb3VudF9ubWFsbG9jX3BzLnVpbnQ2NF92YWwgPQorCSAgICByYXRlX3Blcl9zZWNvbmQo Y29sX2NvdW50X25tYWxsb2MudWludDY0X3ZhbCwgdXB0aW1lKTsKKwljb2xfY291bnRfbmRhbGxv Y19wcy51aW50NjRfdmFsID0KKwkgICAgcmF0ZV9wZXJfc2Vjb25kKGNvbF9jb3VudF9uZGFsbG9j LnVpbnQ2NF92YWwsIHVwdGltZSk7CisJY29sX2NvdW50X25yZXF1ZXN0c19wcy51aW50NjRfdmFs ID0KKwkgICAgcmF0ZV9wZXJfc2Vjb25kKGNvbF9jb3VudF9ucmVxdWVzdHMudWludDY0X3ZhbCwg dXB0aW1lKTsKKwljb2xfY291bnRfbmZpbGxzX3BzLnVpbnQ2NF92YWwgPQorCSAgICByYXRlX3Bl cl9zZWNvbmQoY29sX2NvdW50X25maWxscy51aW50NjRfdmFsLCB1cHRpbWUpOworCWNvbF9jb3Vu dF9uZmx1c2hlc19wcy51aW50NjRfdmFsID0KKwkgICAgcmF0ZV9wZXJfc2Vjb25kKGNvbF9jb3Vu dF9uZmx1c2hlcy51aW50NjRfdmFsLCB1cHRpbWUpOworCWVtaXR0ZXJfdGFibGVfcm93KGVtaXR0 ZXIsICZhbGxvY19jb3VudF9yb3cpOworCisJZW1pdHRlcl9yb3dfdCBtZW1fY291bnRfcm93Owor CWVtaXR0ZXJfcm93X2luaXQoJm1lbV9jb3VudF9yb3cpOworCisJZW1pdHRlcl9jb2xfdCBtZW1f Y291bnRfdGl0bGU7CisJZW1pdHRlcl9jb2xfaW5pdCgmbWVtX2NvdW50X3RpdGxlLCAmbWVtX2Nv dW50X3Jvdyk7CisJbWVtX2NvdW50X3RpdGxlLmp1c3RpZnkgPSBlbWl0dGVyX2p1c3RpZnlfbGVm dDsKKwltZW1fY291bnRfdGl0bGUud2lkdGggPSAyMTsKKwltZW1fY291bnRfdGl0bGUudHlwZSA9 IGVtaXR0ZXJfdHlwZV90aXRsZTsKKwltZW1fY291bnRfdGl0bGUuc3RyX3ZhbCA9ICIiOworCisJ ZW1pdHRlcl9jb2xfdCBtZW1fY291bnRfdmFsOworCWVtaXR0ZXJfY29sX2luaXQoJm1lbV9jb3Vu dF92YWwsICZtZW1fY291bnRfcm93KTsKKwltZW1fY291bnRfdmFsLmp1c3RpZnkgPSBlbWl0dGVy X2p1c3RpZnlfcmlnaHQ7CisJbWVtX2NvdW50X3ZhbC53aWR0aCA9IDE2OworCW1lbV9jb3VudF92 YWwudHlwZSA9IGVtaXR0ZXJfdHlwZV90aXRsZTsKKwltZW1fY291bnRfdmFsLnN0cl92YWwgPSAi IjsKKworCWVtaXR0ZXJfdGFibGVfcm93KGVtaXR0ZXIsICZtZW1fY291bnRfcm93KTsKKwltZW1f Y291bnRfdmFsLnR5cGUgPSBlbWl0dGVyX3R5cGVfc2l6ZTsKKworCS8qIEFjdGl2ZSBjb3VudCBp biBieXRlcyBpcyBlbWl0dGVkIG9ubHkgaW4gdGFibGUgbW9kZS4gKi8KKwltZW1fY291bnRfdGl0 bGUuc3RyX3ZhbCA9ICJhY3RpdmU6IjsKKwltZW1fY291bnRfdmFsLnNpemVfdmFsID0gcGFjdGl2 ZSAqIHBhZ2U7CisJZW1pdHRlcl90YWJsZV9yb3coZW1pdHRlciwgJm1lbV9jb3VudF9yb3cpOwor CisjZGVmaW5lIEdFVF9BTkRfRU1JVF9NRU1fU1RBVChzdGF0KQkJCQkJXAorCUNUTF9NMl9HRVQo InN0YXRzLmFyZW5hcy4wLiIjc3RhdCwgaSwgJnN0YXQsIHNpemVfdCk7CQlcCisJZW1pdHRlcl9q c29uX2t2KGVtaXR0ZXIsICNzdGF0LCBlbWl0dGVyX3R5cGVfc2l6ZSwgJnN0YXQpOwlcCisJbWVt X2NvdW50X3RpdGxlLnN0cl92YWwgPSAjc3RhdCI6IjsJCQkJXAorCW1lbV9jb3VudF92YWwuc2l6 ZV92YWwgPSBzdGF0OwkJCQkJXAorCWVtaXR0ZXJfdGFibGVfcm93KGVtaXR0ZXIsICZtZW1fY291 bnRfcm93KTsKKworCUdFVF9BTkRfRU1JVF9NRU1fU1RBVChtYXBwZWQpCisJR0VUX0FORF9FTUlU X01FTV9TVEFUKHJldGFpbmVkKQorCUdFVF9BTkRfRU1JVF9NRU1fU1RBVChiYXNlKQorCUdFVF9B TkRfRU1JVF9NRU1fU1RBVChpbnRlcm5hbCkKKwlHRVRfQU5EX0VNSVRfTUVNX1NUQVQobWV0YWRh dGFfdGhwKQorCUdFVF9BTkRfRU1JVF9NRU1fU1RBVCh0Y2FjaGVfYnl0ZXMpCisJR0VUX0FORF9F TUlUX01FTV9TVEFUKHRjYWNoZV9zdGFzaGVkX2J5dGVzKQorCUdFVF9BTkRfRU1JVF9NRU1fU1RB VChyZXNpZGVudCkKKwlHRVRfQU5EX0VNSVRfTUVNX1NUQVQoYWJhbmRvbmVkX3ZtKQorCUdFVF9B TkRfRU1JVF9NRU1fU1RBVChleHRlbnRfYXZhaWwpCisjdW5kZWYgR0VUX0FORF9FTUlUX01FTV9T VEFUCisKKwlpZiAobXV0ZXgpIHsKKwkJc3RhdHNfYXJlbmFfbXV0ZXhlc19wcmludChlbWl0dGVy LCBpLCB1cHRpbWUpOworCX0KKwlpZiAoYmlucykgeworCQlzdGF0c19hcmVuYV9iaW5zX3ByaW50 KGVtaXR0ZXIsIG11dGV4LCBpLCB1cHRpbWUpOworCX0KKwlpZiAobGFyZ2UpIHsKKwkJc3RhdHNf YXJlbmFfbGV4dGVudHNfcHJpbnQoZW1pdHRlciwgaSwgdXB0aW1lKTsKKwl9CisJaWYgKGV4dGVu dHMpIHsKKwkJc3RhdHNfYXJlbmFfZXh0ZW50c19wcmludChlbWl0dGVyLCBpKTsKKwl9CisJaWYg KGhwYSkgeworCQlzdGF0c19hcmVuYV9ocGFfc2hhcmRfcHJpbnQoZW1pdHRlciwgaSwgdXB0aW1l KTsKKwl9Cit9CisKK0pFTUFMTE9DX0NPTEQKK3N0YXRpYyB2b2lkCitzdGF0c19nZW5lcmFsX3By aW50KGVtaXR0ZXJfdCAqZW1pdHRlcikgeworCWNvbnN0IGNoYXIgKmNwdjsKKwlib29sIGJ2LCBi djI7CisJdW5zaWduZWQgdXY7CisJdWludDMyX3QgdTMydjsKKwl1aW50NjRfdCB1NjR2OworCWlu dDY0X3QgaTY0djsKKwlzc2l6ZV90IHNzdiwgc3N2MjsKKwlzaXplX3Qgc3YsIGJzeiwgdXN6LCB1 MzJzeiwgdTY0c3osIGk2NHN6LCBzc3osIHNzc3osIGNwc3o7CisKKwlic3ogPSBzaXplb2YoYm9v bCk7CisJdXN6ID0gc2l6ZW9mKHVuc2lnbmVkKTsKKwlzc3ogPSBzaXplb2Yoc2l6ZV90KTsKKwlz c3N6ID0gc2l6ZW9mKHNzaXplX3QpOworCWNwc3ogPSBzaXplb2YoY29uc3QgY2hhciAqKTsKKwl1 MzJzeiA9IHNpemVvZih1aW50MzJfdCk7CisJaTY0c3ogPSBzaXplb2YoaW50NjRfdCk7CisJdTY0 c3ogPSBzaXplb2YodWludDY0X3QpOworCisJQ1RMX0dFVCgidmVyc2lvbiIsICZjcHYsIGNvbnN0 IGNoYXIgKik7CisJZW1pdHRlcl9rdihlbWl0dGVyLCAidmVyc2lvbiIsICJWZXJzaW9uIiwgZW1p dHRlcl90eXBlX3N0cmluZywgJmNwdik7CisKKwkvKiBjb25maWcuICovCisJZW1pdHRlcl9kaWN0 X2JlZ2luKGVtaXR0ZXIsICJjb25maWciLCAiQnVpbGQtdGltZSBvcHRpb24gc2V0dGluZ3MiKTsK KyNkZWZpbmUgQ09ORklHX1dSSVRFX0JPT0wobmFtZSkJCQkJCQlcCisJZG8gewkJCQkJCQkJXAor CQlDVExfR0VUKCJjb25maWcuIiNuYW1lLCAmYnYsIGJvb2wpOwkJCVwKKwkJZW1pdHRlcl9rdihl bWl0dGVyLCAjbmFtZSwgImNvbmZpZy4iI25hbWUsCQlcCisJCSAgICBlbWl0dGVyX3R5cGVfYm9v bCwgJmJ2KTsJCQkJXAorCX0gd2hpbGUgKDApCisKKwlDT05GSUdfV1JJVEVfQk9PTChjYWNoZV9v YmxpdmlvdXMpOworCUNPTkZJR19XUklURV9CT09MKGRlYnVnKTsKKwlDT05GSUdfV1JJVEVfQk9P TChmaWxsKTsKKwlDT05GSUdfV1JJVEVfQk9PTChsYXp5X2xvY2spOworCWVtaXR0ZXJfa3YoZW1p dHRlciwgIm1hbGxvY19jb25mIiwgImNvbmZpZy5tYWxsb2NfY29uZiIsCisJICAgIGVtaXR0ZXJf dHlwZV9zdHJpbmcsICZjb25maWdfbWFsbG9jX2NvbmYpOworCisJQ09ORklHX1dSSVRFX0JPT0wo b3B0X3NhZmV0eV9jaGVja3MpOworCUNPTkZJR19XUklURV9CT09MKHByb2YpOworCUNPTkZJR19X UklURV9CT09MKHByb2ZfbGliZ2NjKTsKKwlDT05GSUdfV1JJVEVfQk9PTChwcm9mX2xpYnVud2lu ZCk7CisJQ09ORklHX1dSSVRFX0JPT0woc3RhdHMpOworCUNPTkZJR19XUklURV9CT09MKHV0cmFj ZSk7CisJQ09ORklHX1dSSVRFX0JPT0woeG1hbGxvYyk7CisjdW5kZWYgQ09ORklHX1dSSVRFX0JP T0wKKwllbWl0dGVyX2RpY3RfZW5kKGVtaXR0ZXIpOyAvKiBDbG9zZSAiY29uZmlnIiBkaWN0LiAq LworCisJLyogb3B0LiAqLworI2RlZmluZSBPUFRfV1JJVEUobmFtZSwgdmFyLCBzaXplLCBlbWl0 dGVyX3R5cGUpCQkJXAorCWlmIChqZV9tYWxsY3RsKCJvcHQuIm5hbWUsICh2b2lkICopJnZhciwg JnNpemUsIE5VTEwsIDApID09CVwKKwkgICAgMCkgewkJCQkJCQlcCisJCWVtaXR0ZXJfa3YoZW1p dHRlciwgbmFtZSwgIm9wdC4ibmFtZSwgZW1pdHRlcl90eXBlLAlcCisJCSAgICAmdmFyKTsJCQkJ CQlcCisJfQorCisjZGVmaW5lIE9QVF9XUklURV9NVVRBQkxFKG5hbWUsIHZhcjEsIHZhcjIsIHNp emUsIGVtaXR0ZXJfdHlwZSwJCVwKKyAgICBhbHRuYW1lKQkJCQkJCQkJXAorCWlmIChqZV9tYWxs Y3RsKCJvcHQuIm5hbWUsICh2b2lkICopJnZhcjEsICZzaXplLCBOVUxMLCAwKSA9PQlcCisJICAg IDAgJiYgamVfbWFsbGN0bChhbHRuYW1lLCAodm9pZCAqKSZ2YXIyLCAmc2l6ZSwgTlVMTCwgMCkJ XAorCSAgICA9PSAwKSB7CQkJCQkJCVwKKwkJZW1pdHRlcl9rdl9ub3RlKGVtaXR0ZXIsIG5hbWUs ICJvcHQuIm5hbWUsCQlcCisJCSAgICBlbWl0dGVyX3R5cGUsICZ2YXIxLCBhbHRuYW1lLCBlbWl0 dGVyX3R5cGUsCQlcCisJCSAgICAmdmFyMik7CQkJCQkJXAorCX0KKworI2RlZmluZSBPUFRfV1JJ VEVfQk9PTChuYW1lKSBPUFRfV1JJVEUobmFtZSwgYnYsIGJzeiwgZW1pdHRlcl90eXBlX2Jvb2wp CisjZGVmaW5lIE9QVF9XUklURV9CT09MX01VVEFCTEUobmFtZSwgYWx0bmFtZSkJCQkJXAorCU9Q VF9XUklURV9NVVRBQkxFKG5hbWUsIGJ2LCBidjIsIGJzeiwgZW1pdHRlcl90eXBlX2Jvb2wsIGFs dG5hbWUpCisKKyNkZWZpbmUgT1BUX1dSSVRFX1VOU0lHTkVEKG5hbWUpCQkJCQlcCisJT1BUX1dS SVRFKG5hbWUsIHV2LCB1c3osIGVtaXR0ZXJfdHlwZV91bnNpZ25lZCkKKworI2RlZmluZSBPUFRf V1JJVEVfSU5UNjQobmFtZSkJCQkJCQlcCisJT1BUX1dSSVRFKG5hbWUsIGk2NHYsIGk2NHN6LCBl bWl0dGVyX3R5cGVfaW50NjQpCisjZGVmaW5lIE9QVF9XUklURV9VSU5UNjQobmFtZSkJCQkJCQlc CisJT1BUX1dSSVRFKG5hbWUsIHU2NHYsIHU2NHN6LCBlbWl0dGVyX3R5cGVfdWludDY0KQorCisj ZGVmaW5lIE9QVF9XUklURV9TSVpFX1QobmFtZSkJCQkJCQlcCisJT1BUX1dSSVRFKG5hbWUsIHN2 LCBzc3osIGVtaXR0ZXJfdHlwZV9zaXplKQorI2RlZmluZSBPUFRfV1JJVEVfU1NJWkVfVChuYW1l KQkJCQkJCVwKKwlPUFRfV1JJVEUobmFtZSwgc3N2LCBzc3N6LCBlbWl0dGVyX3R5cGVfc3NpemUp CisjZGVmaW5lIE9QVF9XUklURV9TU0laRV9UX01VVEFCTEUobmFtZSwgYWx0bmFtZSkJCQlcCisJ T1BUX1dSSVRFX01VVEFCTEUobmFtZSwgc3N2LCBzc3YyLCBzc3N6LCBlbWl0dGVyX3R5cGVfc3Np emUsCVwKKwkgICAgYWx0bmFtZSkKKworI2RlZmluZSBPUFRfV1JJVEVfQ0hBUl9QKG5hbWUpCQkJ CQkJXAorCU9QVF9XUklURShuYW1lLCBjcHYsIGNwc3osIGVtaXR0ZXJfdHlwZV9zdHJpbmcpCisK KwllbWl0dGVyX2RpY3RfYmVnaW4oZW1pdHRlciwgIm9wdCIsICJSdW4tdGltZSBvcHRpb24gc2V0 dGluZ3MiKTsKKworCU9QVF9XUklURV9CT09MKCJhYm9ydCIpCisJT1BUX1dSSVRFX0JPT0woImFi b3J0X2NvbmYiKQorCU9QVF9XUklURV9CT09MKCJjYWNoZV9vYmxpdmlvdXMiKQorCU9QVF9XUklU RV9CT09MKCJjb25maXJtX2NvbmYiKQorCU9QVF9XUklURV9CT09MKCJyZXRhaW4iKQorCU9QVF9X UklURV9DSEFSX1AoImRzcyIpCisJT1BUX1dSSVRFX1VOU0lHTkVEKCJuYXJlbmFzIikKKwlPUFRf V1JJVEVfQ0hBUl9QKCJwZXJjcHVfYXJlbmEiKQorCU9QVF9XUklURV9TSVpFX1QoIm92ZXJzaXpl X3RocmVzaG9sZCIpCisJT1BUX1dSSVRFX0JPT0woImhwYSIpCisJT1BUX1dSSVRFX1NJWkVfVCgi aHBhX3NsYWJfbWF4X2FsbG9jIikKKwlPUFRfV1JJVEVfU0laRV9UKCJocGFfaHVnaWZpY2F0aW9u X3RocmVzaG9sZCIpCisJT1BUX1dSSVRFX1VJTlQ2NCgiaHBhX2h1Z2lmeV9kZWxheV9tcyIpCisJ T1BUX1dSSVRFX1VJTlQ2NCgiaHBhX21pbl9wdXJnZV9pbnRlcnZhbF9tcyIpCisJaWYgKGplX21h bGxjdGwoIm9wdC5ocGFfZGlydHlfbXVsdCIsICh2b2lkICopJnUzMnYsICZ1MzJzeiwgTlVMTCwg MCkKKwkgICAgPT0gMCkgeworCQkvKgorCQkgKiBXZSBjaGVhdCBhIGxpdHRsZSBhbmQgImtub3ci IHRoZSBzZWNyZXQgbWVhbmluZyBvZiB0aGlzCisJCSAqIHJlcHJlc2VudGF0aW9uLgorCQkgKi8K KwkJaWYgKHUzMnYgPT0gKHVpbnQzMl90KS0xKSB7CisJCQljb25zdCBjaGFyICpuZWcxID0gIi0x IjsKKwkJCWVtaXR0ZXJfa3YoZW1pdHRlciwgImhwYV9kaXJ0eV9tdWx0IiwKKwkJCSAgICAib3B0 LmhwYV9kaXJ0eV9tdWx0IiwgZW1pdHRlcl90eXBlX3N0cmluZywgJm5lZzEpOworCQl9IGVsc2Ug eworCQkJY2hhciBidWZbRlhQX0JVRl9TSVpFXTsKKwkJCWZ4cF9wcmludCh1MzJ2LCBidWYpOwor CQkJY29uc3QgY2hhciAqYnVmcCA9IGJ1ZjsKKwkJCWVtaXR0ZXJfa3YoZW1pdHRlciwgImhwYV9k aXJ0eV9tdWx0IiwKKwkJCSAgICAib3B0LmhwYV9kaXJ0eV9tdWx0IiwgZW1pdHRlcl90eXBlX3N0 cmluZywgJmJ1ZnApOworCQl9CisJfQorCU9QVF9XUklURV9TSVpFX1QoImhwYV9zZWNfbnNoYXJk cyIpCisJT1BUX1dSSVRFX1NJWkVfVCgiaHBhX3NlY19tYXhfYWxsb2MiKQorCU9QVF9XUklURV9T SVpFX1QoImhwYV9zZWNfbWF4X2J5dGVzIikKKwlPUFRfV1JJVEVfU0laRV9UKCJocGFfc2VjX2J5 dGVzX2FmdGVyX2ZsdXNoIikKKwlPUFRfV1JJVEVfU0laRV9UKCJocGFfc2VjX2JhdGNoX2ZpbGxf ZXh0cmEiKQorCU9QVF9XUklURV9DSEFSX1AoIm1ldGFkYXRhX3RocCIpCisJT1BUX1dSSVRFX0lO VDY0KCJtdXRleF9tYXhfc3BpbiIpCisJT1BUX1dSSVRFX0JPT0xfTVVUQUJMRSgiYmFja2dyb3Vu ZF90aHJlYWQiLCAiYmFja2dyb3VuZF90aHJlYWQiKQorCU9QVF9XUklURV9TU0laRV9UX01VVEFC TEUoImRpcnR5X2RlY2F5X21zIiwgImFyZW5hcy5kaXJ0eV9kZWNheV9tcyIpCisJT1BUX1dSSVRF X1NTSVpFX1RfTVVUQUJMRSgibXV6enlfZGVjYXlfbXMiLCAiYXJlbmFzLm11enp5X2RlY2F5X21z IikKKwlPUFRfV1JJVEVfU0laRV9UKCJsZ19leHRlbnRfbWF4X2FjdGl2ZV9maXQiKQorCU9QVF9X UklURV9DSEFSX1AoImp1bmsiKQorCU9QVF9XUklURV9CT09MKCJ6ZXJvIikKKwlPUFRfV1JJVEVf Qk9PTCgidXRyYWNlIikKKwlPUFRfV1JJVEVfQk9PTCgieG1hbGxvYyIpCisJT1BUX1dSSVRFX0JP T0woImV4cGVyaW1lbnRhbF9pbmZhbGxpYmxlX25ldyIpCisJT1BUX1dSSVRFX0JPT0woInRjYWNo ZSIpCisJT1BUX1dSSVRFX1NJWkVfVCgidGNhY2hlX21heCIpCisJT1BUX1dSSVRFX1VOU0lHTkVE KCJ0Y2FjaGVfbnNsb3RzX3NtYWxsX21pbiIpCisJT1BUX1dSSVRFX1VOU0lHTkVEKCJ0Y2FjaGVf bnNsb3RzX3NtYWxsX21heCIpCisJT1BUX1dSSVRFX1VOU0lHTkVEKCJ0Y2FjaGVfbnNsb3RzX2xh cmdlIikKKwlPUFRfV1JJVEVfU1NJWkVfVCgibGdfdGNhY2hlX25zbG90c19tdWwiKQorCU9QVF9X UklURV9TSVpFX1QoInRjYWNoZV9nY19pbmNyX2J5dGVzIikKKwlPUFRfV1JJVEVfU0laRV9UKCJ0 Y2FjaGVfZ2NfZGVsYXlfYnl0ZXMiKQorCU9QVF9XUklURV9VTlNJR05FRCgibGdfdGNhY2hlX2Zs dXNoX3NtYWxsX2RpdiIpCisJT1BUX1dSSVRFX1VOU0lHTkVEKCJsZ190Y2FjaGVfZmx1c2hfbGFy Z2VfZGl2IikKKwlPUFRfV1JJVEVfQ0hBUl9QKCJ0aHAiKQorCU9QVF9XUklURV9CT09MKCJwcm9m IikKKwlPUFRfV1JJVEVfQ0hBUl9QKCJwcm9mX3ByZWZpeCIpCisJT1BUX1dSSVRFX0JPT0xfTVVU QUJMRSgicHJvZl9hY3RpdmUiLCAicHJvZi5hY3RpdmUiKQorCU9QVF9XUklURV9CT09MX01VVEFC TEUoInByb2ZfdGhyZWFkX2FjdGl2ZV9pbml0IiwKKwkgICAgInByb2YudGhyZWFkX2FjdGl2ZV9p bml0IikKKwlPUFRfV1JJVEVfU1NJWkVfVF9NVVRBQkxFKCJsZ19wcm9mX3NhbXBsZSIsICJwcm9m LmxnX3NhbXBsZSIpCisJT1BUX1dSSVRFX0JPT0woInByb2ZfYWNjdW0iKQorCU9QVF9XUklURV9T U0laRV9UKCJsZ19wcm9mX2ludGVydmFsIikKKwlPUFRfV1JJVEVfQk9PTCgicHJvZl9nZHVtcCIp CisJT1BUX1dSSVRFX0JPT0woInByb2ZfZmluYWwiKQorCU9QVF9XUklURV9CT09MKCJwcm9mX2xl YWsiKQorCU9QVF9XUklURV9CT09MKCJwcm9mX2xlYWtfZXJyb3IiKQorCU9QVF9XUklURV9CT09M KCJzdGF0c19wcmludCIpCisJT1BUX1dSSVRFX0NIQVJfUCgic3RhdHNfcHJpbnRfb3B0cyIpCisJ T1BUX1dSSVRFX0JPT0woInN0YXRzX3ByaW50IikKKwlPUFRfV1JJVEVfQ0hBUl9QKCJzdGF0c19w cmludF9vcHRzIikKKwlPUFRfV1JJVEVfSU5UNjQoInN0YXRzX2ludGVydmFsIikKKwlPUFRfV1JJ VEVfQ0hBUl9QKCJzdGF0c19pbnRlcnZhbF9vcHRzIikKKwlPUFRfV1JJVEVfQ0hBUl9QKCJ6ZXJv X3JlYWxsb2MiKQorCisJZW1pdHRlcl9kaWN0X2VuZChlbWl0dGVyKTsKKworI3VuZGVmIE9QVF9X UklURQorI3VuZGVmIE9QVF9XUklURV9NVVRBQkxFCisjdW5kZWYgT1BUX1dSSVRFX0JPT0wKKyN1 bmRlZiBPUFRfV1JJVEVfQk9PTF9NVVRBQkxFCisjdW5kZWYgT1BUX1dSSVRFX1VOU0lHTkVECisj dW5kZWYgT1BUX1dSSVRFX1NTSVpFX1QKKyN1bmRlZiBPUFRfV1JJVEVfU1NJWkVfVF9NVVRBQkxF CisjdW5kZWYgT1BUX1dSSVRFX0NIQVJfUAorCisJLyogcHJvZi4gKi8KKwlpZiAoY29uZmlnX3By b2YpIHsKKwkJZW1pdHRlcl9kaWN0X2JlZ2luKGVtaXR0ZXIsICJwcm9mIiwgIlByb2ZpbGluZyBz ZXR0aW5ncyIpOworCisJCUNUTF9HRVQoInByb2YudGhyZWFkX2FjdGl2ZV9pbml0IiwgJmJ2LCBi b29sKTsKKwkJZW1pdHRlcl9rdihlbWl0dGVyLCAidGhyZWFkX2FjdGl2ZV9pbml0IiwKKwkJICAg ICJwcm9mLnRocmVhZF9hY3RpdmVfaW5pdCIsIGVtaXR0ZXJfdHlwZV9ib29sLCAmYnYpOworCisJ CUNUTF9HRVQoInByb2YuYWN0aXZlIiwgJmJ2LCBib29sKTsKKwkJZW1pdHRlcl9rdihlbWl0dGVy LCAiYWN0aXZlIiwgInByb2YuYWN0aXZlIiwgZW1pdHRlcl90eXBlX2Jvb2wsCisJCSAgICAmYnYp OworCisJCUNUTF9HRVQoInByb2YuZ2R1bXAiLCAmYnYsIGJvb2wpOworCQllbWl0dGVyX2t2KGVt aXR0ZXIsICJnZHVtcCIsICJwcm9mLmdkdW1wIiwgZW1pdHRlcl90eXBlX2Jvb2wsCisJCSAgICAm YnYpOworCisJCUNUTF9HRVQoInByb2YuaW50ZXJ2YWwiLCAmdTY0diwgdWludDY0X3QpOworCQll bWl0dGVyX2t2KGVtaXR0ZXIsICJpbnRlcnZhbCIsICJwcm9mLmludGVydmFsIiwKKwkJICAgIGVt aXR0ZXJfdHlwZV91aW50NjQsICZ1NjR2KTsKKworCQlDVExfR0VUKCJwcm9mLmxnX3NhbXBsZSIs ICZzc3YsIHNzaXplX3QpOworCQllbWl0dGVyX2t2KGVtaXR0ZXIsICJsZ19zYW1wbGUiLCAicHJv Zi5sZ19zYW1wbGUiLAorCQkgICAgZW1pdHRlcl90eXBlX3NzaXplLCAmc3N2KTsKKworCQllbWl0 dGVyX2RpY3RfZW5kKGVtaXR0ZXIpOyAvKiBDbG9zZSAicHJvZiIuICovCisJfQorCisJLyogYXJl bmFzLiAqLworCS8qCisJICogVGhlIGpzb24gb3V0cHV0IHN0aWNrcyBhcmVuYSBpbmZvIGludG8g YW4gImFyZW5hcyIgZGljdDsgdGhlIHRhYmxlCisJICogb3V0cHV0IHB1dHMgdGhlbSBhdCB0aGUg dG9wLWxldmVsLgorCSAqLworCWVtaXR0ZXJfanNvbl9vYmplY3Rfa3ZfYmVnaW4oZW1pdHRlciwg ImFyZW5hcyIpOworCisJQ1RMX0dFVCgiYXJlbmFzLm5hcmVuYXMiLCAmdXYsIHVuc2lnbmVkKTsK KwllbWl0dGVyX2t2KGVtaXR0ZXIsICJuYXJlbmFzIiwgIkFyZW5hcyIsIGVtaXR0ZXJfdHlwZV91 bnNpZ25lZCwgJnV2KTsKKworCS8qCisJICogRGVjYXkgc2V0dGluZ3MgYXJlIGVtaXR0ZWQgb25s eSBpbiBqc29uIG1vZGU7IGluIHRhYmxlIG1vZGUsIHRoZXkncmUKKwkgKiBlbWl0dGVkIGFzIG5v dGVzIHdpdGggdGhlIG9wdCBvdXRwdXQsIGFib3ZlLgorCSAqLworCUNUTF9HRVQoImFyZW5hcy5k aXJ0eV9kZWNheV9tcyIsICZzc3YsIHNzaXplX3QpOworCWVtaXR0ZXJfanNvbl9rdihlbWl0dGVy LCAiZGlydHlfZGVjYXlfbXMiLCBlbWl0dGVyX3R5cGVfc3NpemUsICZzc3YpOworCisJQ1RMX0dF VCgiYXJlbmFzLm11enp5X2RlY2F5X21zIiwgJnNzdiwgc3NpemVfdCk7CisJZW1pdHRlcl9qc29u X2t2KGVtaXR0ZXIsICJtdXp6eV9kZWNheV9tcyIsIGVtaXR0ZXJfdHlwZV9zc2l6ZSwgJnNzdik7 CisKKwlDVExfR0VUKCJhcmVuYXMucXVhbnR1bSIsICZzdiwgc2l6ZV90KTsKKwllbWl0dGVyX2t2 KGVtaXR0ZXIsICJxdWFudHVtIiwgIlF1YW50dW0gc2l6ZSIsIGVtaXR0ZXJfdHlwZV9zaXplLCAm c3YpOworCisJQ1RMX0dFVCgiYXJlbmFzLnBhZ2UiLCAmc3YsIHNpemVfdCk7CisJZW1pdHRlcl9r dihlbWl0dGVyLCAicGFnZSIsICJQYWdlIHNpemUiLCBlbWl0dGVyX3R5cGVfc2l6ZSwgJnN2KTsK KworCWlmIChqZV9tYWxsY3RsKCJhcmVuYXMudGNhY2hlX21heCIsICh2b2lkICopJnN2LCAmc3N6 LCBOVUxMLCAwKSA9PSAwKSB7CisJCWVtaXR0ZXJfa3YoZW1pdHRlciwgInRjYWNoZV9tYXgiLAor CQkgICAgIk1heGltdW0gdGhyZWFkLWNhY2hlZCBzaXplIGNsYXNzIiwgZW1pdHRlcl90eXBlX3Np emUsICZzdik7CisJfQorCisJdW5zaWduZWQgYXJlbmFzX25iaW5zOworCUNUTF9HRVQoImFyZW5h cy5uYmlucyIsICZhcmVuYXNfbmJpbnMsIHVuc2lnbmVkKTsKKwllbWl0dGVyX2t2KGVtaXR0ZXIs ICJuYmlucyIsICJOdW1iZXIgb2YgYmluIHNpemUgY2xhc3NlcyIsCisJICAgIGVtaXR0ZXJfdHlw ZV91bnNpZ25lZCwgJmFyZW5hc19uYmlucyk7CisKKwl1bnNpZ25lZCBhcmVuYXNfbmhiaW5zOwor CUNUTF9HRVQoImFyZW5hcy5uaGJpbnMiLCAmYXJlbmFzX25oYmlucywgdW5zaWduZWQpOworCWVt aXR0ZXJfa3YoZW1pdHRlciwgIm5oYmlucyIsICJOdW1iZXIgb2YgdGhyZWFkLWNhY2hlIGJpbiBz aXplIGNsYXNzZXMiLAorCSAgICBlbWl0dGVyX3R5cGVfdW5zaWduZWQsICZhcmVuYXNfbmhiaW5z KTsKKworCS8qCisJICogV2UgZG8gZW5vdWdoIG1hbGxjdGxzIGluIGEgbG9vcCB0aGF0IHdlIGFj dHVhbGx5IHdhbnQgdG8gb21pdCB0aGVtCisJICogKG5vdCBqdXN0IG9taXQgdGhlIHByaW50aW5n KS4KKwkgKi8KKwlpZiAoZW1pdHRlcl9vdXRwdXRzX2pzb24oZW1pdHRlcikpIHsKKwkJZW1pdHRl cl9qc29uX2FycmF5X2t2X2JlZ2luKGVtaXR0ZXIsICJiaW4iKTsKKwkJc2l6ZV90IGFyZW5hc19i aW5fbWliW0NUTF9NQVhfREVQVEhdOworCQlDVExfTEVBRl9QUkVQQVJFKGFyZW5hc19iaW5fbWli LCAwLCAiYXJlbmFzLmJpbiIpOworCQlmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXJlbmFzX25i aW5zOyBpKyspIHsKKwkJCWFyZW5hc19iaW5fbWliWzJdID0gaTsKKwkJCWVtaXR0ZXJfanNvbl9v YmplY3RfYmVnaW4oZW1pdHRlcik7CisKKwkJCUNUTF9MRUFGKGFyZW5hc19iaW5fbWliLCAzLCAi c2l6ZSIsICZzdiwgc2l6ZV90KTsKKwkJCWVtaXR0ZXJfanNvbl9rdihlbWl0dGVyLCAic2l6ZSIs IGVtaXR0ZXJfdHlwZV9zaXplLAorCQkJICAgICZzdik7CisKKwkJCUNUTF9MRUFGKGFyZW5hc19i aW5fbWliLCAzLCAibnJlZ3MiLCAmdTMydiwgdWludDMyX3QpOworCQkJZW1pdHRlcl9qc29uX2t2 KGVtaXR0ZXIsICJucmVncyIsIGVtaXR0ZXJfdHlwZV91aW50MzIsCisJCQkgICAgJnUzMnYpOwor CisJCQlDVExfTEVBRihhcmVuYXNfYmluX21pYiwgMywgInNsYWJfc2l6ZSIsICZzdiwgc2l6ZV90 KTsKKwkJCWVtaXR0ZXJfanNvbl9rdihlbWl0dGVyLCAic2xhYl9zaXplIiwgZW1pdHRlcl90eXBl X3NpemUsCisJCQkgICAgJnN2KTsKKworCQkJQ1RMX0xFQUYoYXJlbmFzX2Jpbl9taWIsIDMsICJu c2hhcmRzIiwgJnUzMnYsIHVpbnQzMl90KTsKKwkJCWVtaXR0ZXJfanNvbl9rdihlbWl0dGVyLCAi bnNoYXJkcyIsIGVtaXR0ZXJfdHlwZV91aW50MzIsCisJCQkgICAgJnUzMnYpOworCisJCQllbWl0 dGVyX2pzb25fb2JqZWN0X2VuZChlbWl0dGVyKTsKKwkJfQorCQllbWl0dGVyX2pzb25fYXJyYXlf ZW5kKGVtaXR0ZXIpOyAvKiBDbG9zZSAiYmluIi4gKi8KKwl9CisKKwl1bnNpZ25lZCBubGV4dGVu dHM7CisJQ1RMX0dFVCgiYXJlbmFzLm5sZXh0ZW50cyIsICZubGV4dGVudHMsIHVuc2lnbmVkKTsK KwllbWl0dGVyX2t2KGVtaXR0ZXIsICJubGV4dGVudHMiLCAiTnVtYmVyIG9mIGxhcmdlIHNpemUg Y2xhc3NlcyIsCisJICAgIGVtaXR0ZXJfdHlwZV91bnNpZ25lZCwgJm5sZXh0ZW50cyk7CisKKwlp ZiAoZW1pdHRlcl9vdXRwdXRzX2pzb24oZW1pdHRlcikpIHsKKwkJZW1pdHRlcl9qc29uX2FycmF5 X2t2X2JlZ2luKGVtaXR0ZXIsICJsZXh0ZW50Iik7CisJCXNpemVfdCBhcmVuYXNfbGV4dGVudF9t aWJbQ1RMX01BWF9ERVBUSF07CisJCUNUTF9MRUFGX1BSRVBBUkUoYXJlbmFzX2xleHRlbnRfbWli LCAwLCAiYXJlbmFzLmxleHRlbnQiKTsKKwkJZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG5sZXh0 ZW50czsgaSsrKSB7CisJCQlhcmVuYXNfbGV4dGVudF9taWJbMl0gPSBpOworCQkJZW1pdHRlcl9q c29uX29iamVjdF9iZWdpbihlbWl0dGVyKTsKKworCQkJQ1RMX0xFQUYoYXJlbmFzX2xleHRlbnRf bWliLCAzLCAic2l6ZSIsICZzdiwgc2l6ZV90KTsKKwkJCWVtaXR0ZXJfanNvbl9rdihlbWl0dGVy LCAic2l6ZSIsIGVtaXR0ZXJfdHlwZV9zaXplLAorCQkJICAgICZzdik7CisKKwkJCWVtaXR0ZXJf anNvbl9vYmplY3RfZW5kKGVtaXR0ZXIpOworCQl9CisJCWVtaXR0ZXJfanNvbl9hcnJheV9lbmQo ZW1pdHRlcik7IC8qIENsb3NlICJsZXh0ZW50Ii4gKi8KKwl9CisKKwllbWl0dGVyX2pzb25fb2Jq ZWN0X2VuZChlbWl0dGVyKTsgLyogQ2xvc2UgImFyZW5hcyIgKi8KK30KKworSkVNQUxMT0NfQ09M RAorc3RhdGljIHZvaWQKK3N0YXRzX3ByaW50X2hlbHBlcihlbWl0dGVyX3QgKmVtaXR0ZXIsIGJv b2wgbWVyZ2VkLCBib29sIGRlc3Ryb3llZCwKKyAgICBib29sIHVubWVyZ2VkLCBib29sIGJpbnMs IGJvb2wgbGFyZ2UsIGJvb2wgbXV0ZXgsIGJvb2wgZXh0ZW50cywgYm9vbCBocGEpIHsKKwkvKgor CSAqIFRoZXNlIHNob3VsZCBiZSBkZWxldGVkLiAgV2Uga2VlcCB0aGVtIGFyb3VuZCBmb3IgYSB3 aGlsZSwgdG8gYWlkIGluCisJICogdGhlIHRyYW5zaXRpb24gdG8gdGhlIGVtaXR0ZXIgY29kZS4K KwkgKi8KKwlzaXplX3QgYWxsb2NhdGVkLCBhY3RpdmUsIG1ldGFkYXRhLCBtZXRhZGF0YV90aHAs IHJlc2lkZW50LCBtYXBwZWQsCisJICAgIHJldGFpbmVkOworCXNpemVfdCBudW1fYmFja2dyb3Vu ZF90aHJlYWRzOworCXNpemVfdCB6ZXJvX3JlYWxsb2NzOworCXVpbnQ2NF90IGJhY2tncm91bmRf dGhyZWFkX251bV9ydW5zLCBiYWNrZ3JvdW5kX3RocmVhZF9ydW5faW50ZXJ2YWw7CisKKwlDVExf R0VUKCJzdGF0cy5hbGxvY2F0ZWQiLCAmYWxsb2NhdGVkLCBzaXplX3QpOworCUNUTF9HRVQoInN0 YXRzLmFjdGl2ZSIsICZhY3RpdmUsIHNpemVfdCk7CisJQ1RMX0dFVCgic3RhdHMubWV0YWRhdGEi LCAmbWV0YWRhdGEsIHNpemVfdCk7CisJQ1RMX0dFVCgic3RhdHMubWV0YWRhdGFfdGhwIiwgJm1l dGFkYXRhX3RocCwgc2l6ZV90KTsKKwlDVExfR0VUKCJzdGF0cy5yZXNpZGVudCIsICZyZXNpZGVu dCwgc2l6ZV90KTsKKwlDVExfR0VUKCJzdGF0cy5tYXBwZWQiLCAmbWFwcGVkLCBzaXplX3QpOwor CUNUTF9HRVQoInN0YXRzLnJldGFpbmVkIiwgJnJldGFpbmVkLCBzaXplX3QpOworCisJQ1RMX0dF VCgic3RhdHMuemVyb19yZWFsbG9jcyIsICZ6ZXJvX3JlYWxsb2NzLCBzaXplX3QpOworCisJaWYg KGhhdmVfYmFja2dyb3VuZF90aHJlYWQpIHsKKwkJQ1RMX0dFVCgic3RhdHMuYmFja2dyb3VuZF90 aHJlYWQubnVtX3RocmVhZHMiLAorCQkgICAgJm51bV9iYWNrZ3JvdW5kX3RocmVhZHMsIHNpemVf dCk7CisJCUNUTF9HRVQoInN0YXRzLmJhY2tncm91bmRfdGhyZWFkLm51bV9ydW5zIiwKKwkJICAg ICZiYWNrZ3JvdW5kX3RocmVhZF9udW1fcnVucywgdWludDY0X3QpOworCQlDVExfR0VUKCJzdGF0 cy5iYWNrZ3JvdW5kX3RocmVhZC5ydW5faW50ZXJ2YWwiLAorCQkgICAgJmJhY2tncm91bmRfdGhy ZWFkX3J1bl9pbnRlcnZhbCwgdWludDY0X3QpOworCX0gZWxzZSB7CisJCW51bV9iYWNrZ3JvdW5k X3RocmVhZHMgPSAwOworCQliYWNrZ3JvdW5kX3RocmVhZF9udW1fcnVucyA9IDA7CisJCWJhY2tn cm91bmRfdGhyZWFkX3J1bl9pbnRlcnZhbCA9IDA7CisJfQorCisJLyogR2VuZXJpYyBnbG9iYWwg c3RhdHMuICovCisJZW1pdHRlcl9qc29uX29iamVjdF9rdl9iZWdpbihlbWl0dGVyLCAic3RhdHMi KTsKKwllbWl0dGVyX2pzb25fa3YoZW1pdHRlciwgImFsbG9jYXRlZCIsIGVtaXR0ZXJfdHlwZV9z aXplLCAmYWxsb2NhdGVkKTsKKwllbWl0dGVyX2pzb25fa3YoZW1pdHRlciwgImFjdGl2ZSIsIGVt aXR0ZXJfdHlwZV9zaXplLCAmYWN0aXZlKTsKKwllbWl0dGVyX2pzb25fa3YoZW1pdHRlciwgIm1l dGFkYXRhIiwgZW1pdHRlcl90eXBlX3NpemUsICZtZXRhZGF0YSk7CisJZW1pdHRlcl9qc29uX2t2 KGVtaXR0ZXIsICJtZXRhZGF0YV90aHAiLCBlbWl0dGVyX3R5cGVfc2l6ZSwKKwkgICAgJm1ldGFk YXRhX3RocCk7CisJZW1pdHRlcl9qc29uX2t2KGVtaXR0ZXIsICJyZXNpZGVudCIsIGVtaXR0ZXJf dHlwZV9zaXplLCAmcmVzaWRlbnQpOworCWVtaXR0ZXJfanNvbl9rdihlbWl0dGVyLCAibWFwcGVk IiwgZW1pdHRlcl90eXBlX3NpemUsICZtYXBwZWQpOworCWVtaXR0ZXJfanNvbl9rdihlbWl0dGVy LCAicmV0YWluZWQiLCBlbWl0dGVyX3R5cGVfc2l6ZSwgJnJldGFpbmVkKTsKKwllbWl0dGVyX2pz b25fa3YoZW1pdHRlciwgInplcm9fcmVhbGxvY3MiLCBlbWl0dGVyX3R5cGVfc2l6ZSwKKwkgICAg Jnplcm9fcmVhbGxvY3MpOworCisJZW1pdHRlcl90YWJsZV9wcmludGYoZW1pdHRlciwgIkFsbG9j YXRlZDogJXp1LCBhY3RpdmU6ICV6dSwgIgorCSAgICAibWV0YWRhdGE6ICV6dSAobl90aHAgJXp1 KSwgcmVzaWRlbnQ6ICV6dSwgbWFwcGVkOiAlenUsICIKKwkgICAgInJldGFpbmVkOiAlenVcbiIs IGFsbG9jYXRlZCwgYWN0aXZlLCBtZXRhZGF0YSwgbWV0YWRhdGFfdGhwLAorCSAgICByZXNpZGVu dCwgbWFwcGVkLCByZXRhaW5lZCk7CisKKwkvKiBTdHJhbmdlIGJlaGF2aW9ycyAqLworCWVtaXR0 ZXJfdGFibGVfcHJpbnRmKGVtaXR0ZXIsCisJICAgICJDb3VudCBvZiByZWFsbG9jKG5vbi1udWxs LXB0ciwgMCkgY2FsbHM6ICV6dVxuIiwgemVyb19yZWFsbG9jcyk7CisKKwkvKiBCYWNrZ3JvdW5k IHRocmVhZCBzdGF0cy4gKi8KKwllbWl0dGVyX2pzb25fb2JqZWN0X2t2X2JlZ2luKGVtaXR0ZXIs ICJiYWNrZ3JvdW5kX3RocmVhZCIpOworCWVtaXR0ZXJfanNvbl9rdihlbWl0dGVyLCAibnVtX3Ro cmVhZHMiLCBlbWl0dGVyX3R5cGVfc2l6ZSwKKwkgICAgJm51bV9iYWNrZ3JvdW5kX3RocmVhZHMp OworCWVtaXR0ZXJfanNvbl9rdihlbWl0dGVyLCAibnVtX3J1bnMiLCBlbWl0dGVyX3R5cGVfdWlu dDY0LAorCSAgICAmYmFja2dyb3VuZF90aHJlYWRfbnVtX3J1bnMpOworCWVtaXR0ZXJfanNvbl9r dihlbWl0dGVyLCAicnVuX2ludGVydmFsIiwgZW1pdHRlcl90eXBlX3VpbnQ2NCwKKwkgICAgJmJh Y2tncm91bmRfdGhyZWFkX3J1bl9pbnRlcnZhbCk7CisJZW1pdHRlcl9qc29uX29iamVjdF9lbmQo ZW1pdHRlcik7IC8qIENsb3NlICJiYWNrZ3JvdW5kX3RocmVhZCIuICovCisKKwllbWl0dGVyX3Rh YmxlX3ByaW50ZihlbWl0dGVyLCAiQmFja2dyb3VuZCB0aHJlYWRzOiAlenUsICIKKwkgICAgIm51 bV9ydW5zOiAlIkZNVHU2NCIsIHJ1bl9pbnRlcnZhbDogJSJGTVR1NjQiIG5zXG4iLAorCSAgICBu dW1fYmFja2dyb3VuZF90aHJlYWRzLCBiYWNrZ3JvdW5kX3RocmVhZF9udW1fcnVucywKKwkgICAg YmFja2dyb3VuZF90aHJlYWRfcnVuX2ludGVydmFsKTsKKworCWlmIChtdXRleCkgeworCQllbWl0 dGVyX3Jvd190IHJvdzsKKwkJZW1pdHRlcl9jb2xfdCBuYW1lOworCQllbWl0dGVyX2NvbF90IGNv bDY0W211dGV4X3Byb2ZfbnVtX3VpbnQ2NF90X2NvdW50ZXJzXTsKKwkJZW1pdHRlcl9jb2xfdCBj b2wzMlttdXRleF9wcm9mX251bV91aW50MzJfdF9jb3VudGVyc107CisJCXVpbnQ2NF90IHVwdGlt ZTsKKworCQllbWl0dGVyX3Jvd19pbml0KCZyb3cpOworCQltdXRleF9zdGF0c19pbml0X2NvbHMo JnJvdywgIiIsICZuYW1lLCBjb2w2NCwgY29sMzIpOworCisJCWVtaXR0ZXJfdGFibGVfcm93KGVt aXR0ZXIsICZyb3cpOworCQllbWl0dGVyX2pzb25fb2JqZWN0X2t2X2JlZ2luKGVtaXR0ZXIsICJt dXRleGVzIik7CisKKwkJQ1RMX00yX0dFVCgic3RhdHMuYXJlbmFzLjAudXB0aW1lIiwgMCwgJnVw dGltZSwgdWludDY0X3QpOworCisJCXNpemVfdCBzdGF0c19tdXRleGVzX21pYltDVExfTUFYX0RF UFRIXTsKKwkJQ1RMX0xFQUZfUFJFUEFSRShzdGF0c19tdXRleGVzX21pYiwgMCwgInN0YXRzLm11 dGV4ZXMiKTsKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBtdXRleF9wcm9mX251bV9nbG9iYWxfbXV0 ZXhlczsgaSsrKSB7CisJCQltdXRleF9zdGF0c19yZWFkX2dsb2JhbChzdGF0c19tdXRleGVzX21p YiwgMiwKKwkJCSAgICBnbG9iYWxfbXV0ZXhfbmFtZXNbaV0sICZuYW1lLCBjb2w2NCwgY29sMzIs IHVwdGltZSk7CisJCQllbWl0dGVyX2pzb25fb2JqZWN0X2t2X2JlZ2luKGVtaXR0ZXIsIGdsb2Jh bF9tdXRleF9uYW1lc1tpXSk7CisJCQltdXRleF9zdGF0c19lbWl0KGVtaXR0ZXIsICZyb3csIGNv bDY0LCBjb2wzMik7CisJCQllbWl0dGVyX2pzb25fb2JqZWN0X2VuZChlbWl0dGVyKTsKKwkJfQor CisJCWVtaXR0ZXJfanNvbl9vYmplY3RfZW5kKGVtaXR0ZXIpOyAvKiBDbG9zZSAibXV0ZXhlcyIu ICovCisJfQorCisJZW1pdHRlcl9qc29uX29iamVjdF9lbmQoZW1pdHRlcik7IC8qIENsb3NlICJz dGF0cyIuICovCisKKwlpZiAobWVyZ2VkIHx8IGRlc3Ryb3llZCB8fCB1bm1lcmdlZCkgeworCQl1 bnNpZ25lZCBuYXJlbmFzOworCisJCWVtaXR0ZXJfanNvbl9vYmplY3Rfa3ZfYmVnaW4oZW1pdHRl ciwgInN0YXRzLmFyZW5hcyIpOworCisJCUNUTF9HRVQoImFyZW5hcy5uYXJlbmFzIiwgJm5hcmVu YXMsIHVuc2lnbmVkKTsKKwkJc2l6ZV90IG1pYlszXTsKKwkJc2l6ZV90IG1pYmxlbiA9IHNpemVv ZihtaWIpIC8gc2l6ZW9mKHNpemVfdCk7CisJCXNpemVfdCBzejsKKwkJVkFSSUFCTEVfQVJSQVko Ym9vbCwgaW5pdGlhbGl6ZWQsIG5hcmVuYXMpOworCQlib29sIGRlc3Ryb3llZF9pbml0aWFsaXpl ZDsKKwkJdW5zaWduZWQgaSwgaiwgbmluaXRpYWxpemVkOworCisJCXhtYWxsY3RsbmFtZXRvbWli KCJhcmVuYS4wLmluaXRpYWxpemVkIiwgbWliLCAmbWlibGVuKTsKKwkJZm9yIChpID0gbmluaXRp YWxpemVkID0gMDsgaSA8IG5hcmVuYXM7IGkrKykgeworCQkJbWliWzFdID0gaTsKKwkJCXN6ID0g c2l6ZW9mKGJvb2wpOworCQkJeG1hbGxjdGxieW1pYihtaWIsIG1pYmxlbiwgJmluaXRpYWxpemVk W2ldLCAmc3osCisJCQkgICAgTlVMTCwgMCk7CisJCQlpZiAoaW5pdGlhbGl6ZWRbaV0pIHsKKwkJ CQluaW5pdGlhbGl6ZWQrKzsKKwkJCX0KKwkJfQorCQltaWJbMV0gPSBNQUxMQ1RMX0FSRU5BU19E RVNUUk9ZRUQ7CisJCXN6ID0gc2l6ZW9mKGJvb2wpOworCQl4bWFsbGN0bGJ5bWliKG1pYiwgbWli bGVuLCAmZGVzdHJveWVkX2luaXRpYWxpemVkLCAmc3osCisJCSAgICBOVUxMLCAwKTsKKworCQkv KiBNZXJnZWQgc3RhdHMuICovCisJCWlmIChtZXJnZWQgJiYgKG5pbml0aWFsaXplZCA+IDEgfHwg IXVubWVyZ2VkKSkgeworCQkJLyogUHJpbnQgbWVyZ2VkIGFyZW5hIHN0YXRzLiAqLworCQkJZW1p dHRlcl90YWJsZV9wcmludGYoZW1pdHRlciwgIk1lcmdlZCBhcmVuYXMgc3RhdHM6XG4iKTsKKwkJ CWVtaXR0ZXJfanNvbl9vYmplY3Rfa3ZfYmVnaW4oZW1pdHRlciwgIm1lcmdlZCIpOworCQkJc3Rh dHNfYXJlbmFfcHJpbnQoZW1pdHRlciwgTUFMTENUTF9BUkVOQVNfQUxMLCBiaW5zLAorCQkJICAg IGxhcmdlLCBtdXRleCwgZXh0ZW50cywgaHBhKTsKKwkJCWVtaXR0ZXJfanNvbl9vYmplY3RfZW5k KGVtaXR0ZXIpOyAvKiBDbG9zZSAibWVyZ2VkIi4gKi8KKwkJfQorCisJCS8qIERlc3Ryb3llZCBz dGF0cy4gKi8KKwkJaWYgKGRlc3Ryb3llZF9pbml0aWFsaXplZCAmJiBkZXN0cm95ZWQpIHsKKwkJ CS8qIFByaW50IGRlc3Ryb3llZCBhcmVuYSBzdGF0cy4gKi8KKwkJCWVtaXR0ZXJfdGFibGVfcHJp bnRmKGVtaXR0ZXIsCisJCQkgICAgIkRlc3Ryb3llZCBhcmVuYXMgc3RhdHM6XG4iKTsKKwkJCWVt aXR0ZXJfanNvbl9vYmplY3Rfa3ZfYmVnaW4oZW1pdHRlciwgImRlc3Ryb3llZCIpOworCQkJc3Rh dHNfYXJlbmFfcHJpbnQoZW1pdHRlciwgTUFMTENUTF9BUkVOQVNfREVTVFJPWUVELAorCQkJICAg IGJpbnMsIGxhcmdlLCBtdXRleCwgZXh0ZW50cywgaHBhKTsKKwkJCWVtaXR0ZXJfanNvbl9vYmpl Y3RfZW5kKGVtaXR0ZXIpOyAvKiBDbG9zZSAiZGVzdHJveWVkIi4gKi8KKwkJfQorCisJCS8qIFVu bWVyZ2VkIHN0YXRzLiAqLworCQlpZiAodW5tZXJnZWQpIHsKKwkJCWZvciAoaSA9IGogPSAwOyBp IDwgbmFyZW5hczsgaSsrKSB7CisJCQkJaWYgKGluaXRpYWxpemVkW2ldKSB7CisJCQkJCWNoYXIg YXJlbmFfaW5kX3N0clsyMF07CisJCQkJCW1hbGxvY19zbnByaW50ZihhcmVuYV9pbmRfc3RyLAor CQkJCQkgICAgc2l6ZW9mKGFyZW5hX2luZF9zdHIpLCAiJXUiLCBpKTsKKwkJCQkJZW1pdHRlcl9q c29uX29iamVjdF9rdl9iZWdpbihlbWl0dGVyLAorCQkJCQkgICAgYXJlbmFfaW5kX3N0cik7CisJ CQkJCWVtaXR0ZXJfdGFibGVfcHJpbnRmKGVtaXR0ZXIsCisJCQkJCSAgICAiYXJlbmFzWyVzXTpc biIsIGFyZW5hX2luZF9zdHIpOworCQkJCQlzdGF0c19hcmVuYV9wcmludChlbWl0dGVyLCBpLCBi aW5zLAorCQkJCQkgICAgbGFyZ2UsIG11dGV4LCBleHRlbnRzLCBocGEpOworCQkJCQkvKiBDbG9z ZSAiPGFyZW5hLWluZD4iLiAqLworCQkJCQllbWl0dGVyX2pzb25fb2JqZWN0X2VuZChlbWl0dGVy KTsKKwkJCQl9CisJCQl9CisJCX0KKwkJZW1pdHRlcl9qc29uX29iamVjdF9lbmQoZW1pdHRlcik7 IC8qIENsb3NlICJzdGF0cy5hcmVuYXMiLiAqLworCX0KK30KKwordm9pZAorc3RhdHNfcHJpbnQo d3JpdGVfY2JfdCAqd3JpdGVfY2IsIHZvaWQgKmNib3BhcXVlLCBjb25zdCBjaGFyICpvcHRzKSB7 CisJaW50IGVycjsKKwl1aW50NjRfdCBlcG9jaDsKKwlzaXplX3QgdTY0c3o7CisjZGVmaW5lIE9Q VElPTihvLCB2LCBkLCBzKSBib29sIHYgPSBkOworCVNUQVRTX1BSSU5UX09QVElPTlMKKyN1bmRl ZiBPUFRJT04KKworCS8qCisJICogUmVmcmVzaCBzdGF0cywgaW4gY2FzZSBtYWxsY3RsKCkgd2Fz IGNhbGxlZCBieSB0aGUgYXBwbGljYXRpb24uCisJICoKKwkgKiBDaGVjayBmb3IgT09NIGhlcmUs IHNpbmNlIHJlZnJlc2hpbmcgdGhlIGN0bCBjYWNoZSBjYW4gdHJpZ2dlcgorCSAqIGFsbG9jYXRp b24uICBJbiBwcmFjdGljZSwgbm9uZSBvZiB0aGUgc3Vic2VxdWVudCBtYWxsY3RsKCktcmVsYXRl ZAorCSAqIGNhbGxzIGluIHRoaXMgZnVuY3Rpb24gd2lsbCBjYXVzZSBPT00gaWYgdGhpcyBvbmUg c3VjY2VlZHMuCisJICogKi8KKwllcG9jaCA9IDE7CisJdTY0c3ogPSBzaXplb2YodWludDY0X3Qp OworCWVyciA9IGplX21hbGxjdGwoImVwb2NoIiwgKHZvaWQgKikmZXBvY2gsICZ1NjRzeiwgKHZv aWQgKikmZXBvY2gsCisJICAgIHNpemVvZih1aW50NjRfdCkpOworCWlmIChlcnIgIT0gMCkgewor CQlpZiAoZXJyID09IEVBR0FJTikgeworCQkJbWFsbG9jX3dyaXRlKCI8amVtYWxsb2M+OiBNZW1v cnkgYWxsb2NhdGlvbiBmYWlsdXJlIGluICIKKwkJCSAgICAibWFsbGN0bChcImVwb2NoXCIsIC4u LilcbiIpOworCQkJcmV0dXJuOworCQl9CisJCW1hbGxvY193cml0ZSgiPGplbWFsbG9jPjogRmFp bHVyZSBpbiBtYWxsY3RsKFwiZXBvY2hcIiwgIgorCQkgICAgIi4uLilcbiIpOworCQlhYm9ydCgp OworCX0KKworCWlmIChvcHRzICE9IE5VTEwpIHsKKwkJZm9yICh1bnNpZ25lZCBpID0gMDsgb3B0 c1tpXSAhPSAnXDAnOyBpKyspIHsKKwkJCXN3aXRjaCAob3B0c1tpXSkgeworI2RlZmluZSBPUFRJ T04obywgdiwgZCwgcykgY2FzZSBvOiB2ID0gczsgYnJlYWs7CisJCQkJU1RBVFNfUFJJTlRfT1BU SU9OUworI3VuZGVmIE9QVElPTgorCQkJZGVmYXVsdDo7CisJCQl9CisJCX0KKwl9CisKKwllbWl0 dGVyX3QgZW1pdHRlcjsKKwllbWl0dGVyX2luaXQoJmVtaXR0ZXIsCisJICAgIGpzb24gPyBlbWl0 dGVyX291dHB1dF9qc29uX2NvbXBhY3QgOiBlbWl0dGVyX291dHB1dF90YWJsZSwKKwkgICAgd3Jp dGVfY2IsIGNib3BhcXVlKTsKKwllbWl0dGVyX2JlZ2luKCZlbWl0dGVyKTsKKwllbWl0dGVyX3Rh YmxlX3ByaW50ZigmZW1pdHRlciwgIl9fXyBCZWdpbiBqZW1hbGxvYyBzdGF0aXN0aWNzIF9fX1xu Iik7CisJZW1pdHRlcl9qc29uX29iamVjdF9rdl9iZWdpbigmZW1pdHRlciwgImplbWFsbG9jIik7 CisKKwlpZiAoZ2VuZXJhbCkgeworCQlzdGF0c19nZW5lcmFsX3ByaW50KCZlbWl0dGVyKTsKKwl9 CisJaWYgKGNvbmZpZ19zdGF0cykgeworCQlzdGF0c19wcmludF9oZWxwZXIoJmVtaXR0ZXIsIG1l cmdlZCwgZGVzdHJveWVkLCB1bm1lcmdlZCwKKwkJICAgIGJpbnMsIGxhcmdlLCBtdXRleCwgZXh0 ZW50cywgaHBhKTsKKwl9CisKKwllbWl0dGVyX2pzb25fb2JqZWN0X2VuZCgmZW1pdHRlcik7IC8q IENsb3NlcyB0aGUgImplbWFsbG9jIiBkaWN0LiAqLworCWVtaXR0ZXJfdGFibGVfcHJpbnRmKCZl bWl0dGVyLCAiLS0tIEVuZCBqZW1hbGxvYyBzdGF0aXN0aWNzIC0tLVxuIik7CisJZW1pdHRlcl9l bmQoJmVtaXR0ZXIpOworfQorCit1aW50NjRfdAorc3RhdHNfaW50ZXJ2YWxfbmV3X2V2ZW50X3dh aXQodHNkX3QgKnRzZCkgeworCXJldHVybiBzdGF0c19pbnRlcnZhbF9hY2N1bV9iYXRjaDsKK30K KwordWludDY0X3QKK3N0YXRzX2ludGVydmFsX3Bvc3Rwb25lZF9ldmVudF93YWl0KHRzZF90ICp0 c2QpIHsKKwlyZXR1cm4gVEVfTUlOX1NUQVJUX1dBSVQ7Cit9CisKK3ZvaWQKK3N0YXRzX2ludGVy dmFsX2V2ZW50X2hhbmRsZXIodHNkX3QgKnRzZCwgdWludDY0X3QgZWxhcHNlZCkgeworCWFzc2Vy dChlbGFwc2VkID4gMCAmJiBlbGFwc2VkICE9IFRFX0lOVkFMSURfRUxBUFNFRCk7CisJaWYgKGNv dW50ZXJfYWNjdW0odHNkX3RzZG4odHNkKSwgJnN0YXRzX2ludGVydmFsX2FjY3VtdWxhdGVkLAor CSAgICBlbGFwc2VkKSkgeworCQlqZV9tYWxsb2Nfc3RhdHNfcHJpbnQoTlVMTCwgTlVMTCwgb3B0 X3N0YXRzX2ludGVydmFsX29wdHMpOworCX0KK30KKworYm9vbAorc3RhdHNfYm9vdCh2b2lkKSB7 CisJdWludDY0X3Qgc3RhdHNfaW50ZXJ2YWw7CisJaWYgKG9wdF9zdGF0c19pbnRlcnZhbCA8IDAp IHsKKwkJYXNzZXJ0KG9wdF9zdGF0c19pbnRlcnZhbCA9PSAtMSk7CisJCXN0YXRzX2ludGVydmFs ID0gMDsKKwkJc3RhdHNfaW50ZXJ2YWxfYWNjdW1fYmF0Y2ggPSAwOworCX0gZWxzZXsKKwkJLyog U2VlIGNvbW1lbnRzIGluIHN0YXRzLmggKi8KKwkJc3RhdHNfaW50ZXJ2YWwgPSAob3B0X3N0YXRz X2ludGVydmFsID4gMCkgPworCQkgICAgb3B0X3N0YXRzX2ludGVydmFsIDogMTsKKwkJdWludDY0 X3QgYmF0Y2ggPSBzdGF0c19pbnRlcnZhbCA+PgorCQkgICAgU1RBVFNfSU5URVJWQUxfQUNDVU1f TEdfQkFUQ0hfU0laRTsKKwkJaWYgKGJhdGNoID4gU1RBVFNfSU5URVJWQUxfQUNDVU1fQkFUQ0hf TUFYKSB7CisJCQliYXRjaCA9IFNUQVRTX0lOVEVSVkFMX0FDQ1VNX0JBVENIX01BWDsKKwkJfSBl bHNlIGlmIChiYXRjaCA9PSAwKSB7CisJCQliYXRjaCA9IDE7CisJCX0KKwkJc3RhdHNfaW50ZXJ2 YWxfYWNjdW1fYmF0Y2ggPSBiYXRjaDsKKwl9CisKKwlyZXR1cm4gY291bnRlcl9hY2N1bV9pbml0 KCZzdGF0c19pbnRlcnZhbF9hY2N1bXVsYXRlZCwgc3RhdHNfaW50ZXJ2YWwpOworfQorCit2b2lk CitzdGF0c19wcmVmb3JrKHRzZG5fdCAqdHNkbikgeworCWNvdW50ZXJfcHJlZm9yayh0c2RuLCAm c3RhdHNfaW50ZXJ2YWxfYWNjdW11bGF0ZWQpOworfQorCit2b2lkCitzdGF0c19wb3N0Zm9ya19w YXJlbnQodHNkbl90ICp0c2RuKSB7CisJY291bnRlcl9wb3N0Zm9ya19wYXJlbnQodHNkbiwgJnN0 YXRzX2ludGVydmFsX2FjY3VtdWxhdGVkKTsKK30KKwordm9pZAorc3RhdHNfcG9zdGZvcmtfY2hp bGQodHNkbl90ICp0c2RuKSB7CisJY291bnRlcl9wb3N0Zm9ya19jaGlsZCh0c2RuLCAmc3RhdHNf aW50ZXJ2YWxfYWNjdW11bGF0ZWQpOworfQoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4w LWJ1aWxkL2plbWFsbG9jLTUuMy4wL3NyYy9zei5jIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQv amVtYWxsb2MtNS4zLjAvc3JjL3N6LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MC4uZDMxMTVkZAotLS0gL2Rldi9udWxsCisrKyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2pl bWFsbG9jLTUuMy4wL3NyYy9zei5jCkBAIC0wLDAgKzEsMTE0IEBACisjaW5jbHVkZSAiamVtYWxs b2MvaW50ZXJuYWwvamVtYWxsb2NfcHJlYW1ibGUuaCIKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRl cm5hbC9qZW1hbGxvY19pbnRlcm5hbF9pbmNsdWRlcy5oIgorI2luY2x1ZGUgImplbWFsbG9jL2lu dGVybmFsL3N6LmgiCisKK0pFTUFMTE9DX0FMSUdORUQoQ0FDSEVMSU5FKQorc2l6ZV90IHN6X3Bp bmQyc3pfdGFiW1NDX05QU0laRVMrMV07CitzaXplX3Qgc3pfbGFyZ2VfcGFkOworCitzaXplX3QK K3N6X3Bzel9xdWFudGl6ZV9mbG9vcihzaXplX3Qgc2l6ZSkgeworCXNpemVfdCByZXQ7CisJcHN6 aW5kX3QgcGluZDsKKworCWFzc2VydChzaXplID4gMCk7CisJYXNzZXJ0KChzaXplICYgUEFHRV9N QVNLKSA9PSAwKTsKKworCXBpbmQgPSBzel9wc3oyaW5kKHNpemUgLSBzel9sYXJnZV9wYWQgKyAx KTsKKwlpZiAocGluZCA9PSAwKSB7CisJCS8qCisJCSAqIEF2b2lkIHVuZGVyZmxvdy4gIFRoaXMg c2hvcnQtY2lyY3VpdCB3b3VsZCBhbHNvIGRvIHRoZSByaWdodAorCQkgKiB0aGluZyBmb3IgYWxs IHNpemVzIGluIHRoZSByYW5nZSBmb3Igd2hpY2ggdGhlcmUgYXJlCisJCSAqIFBBR0Utc3BhY2Vk IHNpemUgY2xhc3NlcywgYnV0IGl0J3Mgc2ltcGxlc3QgdG8ganVzdCBoYW5kbGUKKwkJICogdGhl IG9uZSBjYXNlIHRoYXQgd291bGQgY2F1c2UgZXJyb25lb3VzIHJlc3VsdHMuCisJCSAqLworCQly ZXR1cm4gc2l6ZTsKKwl9CisJcmV0ID0gc3pfcGluZDJzeihwaW5kIC0gMSkgKyBzel9sYXJnZV9w YWQ7CisJYXNzZXJ0KHJldCA8PSBzaXplKTsKKwlyZXR1cm4gcmV0OworfQorCitzaXplX3QKK3N6 X3Bzel9xdWFudGl6ZV9jZWlsKHNpemVfdCBzaXplKSB7CisJc2l6ZV90IHJldDsKKworCWFzc2Vy dChzaXplID4gMCk7CisJYXNzZXJ0KHNpemUgLSBzel9sYXJnZV9wYWQgPD0gU0NfTEFSR0VfTUFY Q0xBU1MpOworCWFzc2VydCgoc2l6ZSAmIFBBR0VfTUFTSykgPT0gMCk7CisKKwlyZXQgPSBzel9w c3pfcXVhbnRpemVfZmxvb3Ioc2l6ZSk7CisJaWYgKHJldCA8IHNpemUpIHsKKwkJLyoKKwkJICog U2tpcCBhIHF1YW50aXphdGlvbiB0aGF0IG1heSBoYXZlIGFuIGFkZXF1YXRlbHkgbGFyZ2UgZXh0 ZW50LAorCQkgKiBiZWNhdXNlIHVuZGVyLXNpemVkIGV4dGVudHMgbWF5IGJlIG1peGVkIGluLiAg VGhpcyBvbmx5CisJCSAqIGhhcHBlbnMgd2hlbiBhbiB1bnVzdWFsIHNpemUgaXMgcmVxdWVzdGVk LCBpLmUuIGZvciBhbGlnbmVkCisJCSAqIGFsbG9jYXRpb24sIGFuZCBpcyBqdXN0IG9uZSBvZiBz ZXZlcmFsIHBsYWNlcyB3aGVyZSBsaW5lYXIKKwkJICogc2VhcmNoIHdvdWxkIHBvdGVudGlhbGx5 IGZpbmQgc3VmZmljaWVudGx5IGFsaWduZWQgYXZhaWxhYmxlCisJCSAqIG1lbW9yeSBzb21ld2hl cmUgbG93ZXIuCisJCSAqLworCQlyZXQgPSBzel9waW5kMnN6KHN6X3BzejJpbmQocmV0IC0gc3pf bGFyZ2VfcGFkICsgMSkpICsKKwkJICAgIHN6X2xhcmdlX3BhZDsKKwl9CisJcmV0dXJuIHJldDsK K30KKworc3RhdGljIHZvaWQKK3N6X2Jvb3RfcGluZDJzel90YWIoY29uc3Qgc2NfZGF0YV90ICpz Y19kYXRhKSB7CisJaW50IHBpbmQgPSAwOworCWZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBTQ19O U0laRVM7IGkrKykgeworCQljb25zdCBzY190ICpzYyA9ICZzY19kYXRhLT5zY1tpXTsKKwkJaWYg KHNjLT5wc3opIHsKKwkJCXN6X3BpbmQyc3pfdGFiW3BpbmRdID0gKFpVKDEpIDw8IHNjLT5sZ19i YXNlKQorCQkJICAgICsgKFpVKHNjLT5uZGVsdGEpIDw8IHNjLT5sZ19kZWx0YSk7CisJCQlwaW5k Kys7CisJCX0KKwl9CisJZm9yIChpbnQgaSA9IHBpbmQ7IGkgPD0gKGludClTQ19OUFNJWkVTOyBp KyspIHsKKwkJc3pfcGluZDJzel90YWJbcGluZF0gPSBzY19kYXRhLT5sYXJnZV9tYXhjbGFzcyAr IFBBR0U7CisJfQorfQorCitKRU1BTExPQ19BTElHTkVEKENBQ0hFTElORSkKK3NpemVfdCBzel9p bmRleDJzaXplX3RhYltTQ19OU0laRVNdOworCitzdGF0aWMgdm9pZAorc3pfYm9vdF9pbmRleDJz aXplX3RhYihjb25zdCBzY19kYXRhX3QgKnNjX2RhdGEpIHsKKwlmb3IgKHVuc2lnbmVkIGkgPSAw OyBpIDwgU0NfTlNJWkVTOyBpKyspIHsKKwkJY29uc3Qgc2NfdCAqc2MgPSAmc2NfZGF0YS0+c2Nb aV07CisJCXN6X2luZGV4MnNpemVfdGFiW2ldID0gKFpVKDEpIDw8IHNjLT5sZ19iYXNlKQorCQkg ICAgKyAoWlUoc2MtPm5kZWx0YSkgPDwgKHNjLT5sZ19kZWx0YSkpOworCX0KK30KKworLyoKKyAq IFRvIGtlZXAgdGhpcyB0YWJsZSBzbWFsbCwgd2UgZGl2aWRlIHNpemVzIGJ5IHRoZSB0aW55IG1p biBzaXplLCB3aGljaCBnaXZlcworICogdGhlIHNtYWxsZXN0IGludGVydmFsIGZvciB3aGljaCB0 aGUgcmVzdWx0IGNhbiBjaGFuZ2UuCisgKi8KK0pFTUFMTE9DX0FMSUdORUQoQ0FDSEVMSU5FKQor dWludDhfdCBzel9zaXplMmluZGV4X3RhYlsoU0NfTE9PS1VQX01BWENMQVNTID4+IFNDX0xHX1RJ TllfTUlOKSArIDFdOworCitzdGF0aWMgdm9pZAorc3pfYm9vdF9zaXplMmluZGV4X3RhYihjb25z dCBzY19kYXRhX3QgKnNjX2RhdGEpIHsKKwlzaXplX3QgZHN0X21heCA9IChTQ19MT09LVVBfTUFY Q0xBU1MgPj4gU0NfTEdfVElOWV9NSU4pICsgMTsKKwlzaXplX3QgZHN0X2luZCA9IDA7CisJZm9y ICh1bnNpZ25lZCBzY19pbmQgPSAwOyBzY19pbmQgPCBTQ19OU0laRVMgJiYgZHN0X2luZCA8IGRz dF9tYXg7CisJICAgIHNjX2luZCsrKSB7CisJCWNvbnN0IHNjX3QgKnNjID0gJnNjX2RhdGEtPnNj W3NjX2luZF07CisJCXNpemVfdCBzeiA9IChaVSgxKSA8PCBzYy0+bGdfYmFzZSkKKwkJICAgICsg KFpVKHNjLT5uZGVsdGEpIDw8IHNjLT5sZ19kZWx0YSk7CisJCXNpemVfdCBtYXhfaW5kID0gKChz eiArIChaVSgxKSA8PCBTQ19MR19USU5ZX01JTikgLSAxKQorCQkJCSAgID4+IFNDX0xHX1RJTllf TUlOKTsKKwkJZm9yICg7IGRzdF9pbmQgPD0gbWF4X2luZCAmJiBkc3RfaW5kIDwgZHN0X21heDsg ZHN0X2luZCsrKSB7CisJCQlzel9zaXplMmluZGV4X3RhYltkc3RfaW5kXSA9IHNjX2luZDsKKwkJ fQorCX0KK30KKwordm9pZAorc3pfYm9vdChjb25zdCBzY19kYXRhX3QgKnNjX2RhdGEsIGJvb2wg Y2FjaGVfb2JsaXZpb3VzKSB7CisJc3pfbGFyZ2VfcGFkID0gY2FjaGVfb2JsaXZpb3VzID8gUEFH RSA6IDA7CisJc3pfYm9vdF9waW5kMnN6X3RhYihzY19kYXRhKTsKKwlzel9ib290X2luZGV4MnNp emVfdGFiKHNjX2RhdGEpOworCXN6X2Jvb3Rfc2l6ZTJpbmRleF90YWIoc2NfZGF0YSk7Cit9Cgpk aWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvc3JjL3Rj YWNoZS5jIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvc3JjL3RjYWNo ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhMTY3MzIKLS0tIC9kZXYv bnVsbAorKysgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9zcmMvdGNh Y2hlLmMKQEAgLTAsMCArMSwxMTAxIEBACisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvamVt YWxsb2NfcHJlYW1ibGUuaCIKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9qZW1hbGxvY19p bnRlcm5hbF9pbmNsdWRlcy5oIgorCisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvYXNzZXJ0 LmgiCisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvbXV0ZXguaCIKKyNpbmNsdWRlICJqZW1h bGxvYy9pbnRlcm5hbC9zYWZldHlfY2hlY2suaCIKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5h bC9zYW4uaCIKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9zYy5oIgorCisvKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqLworLyogRGF0YS4gKi8KKworYm9vbCBvcHRfdGNhY2hlID0gdHJ1ZTsKKwor LyogdGNhY2hlX21heGNsYXNzIGlzIHNldCB0byAzMktCIGJ5IGRlZmF1bHQuICAqLworc2l6ZV90 IG9wdF90Y2FjaGVfbWF4ID0gKChzaXplX3QpMSkgPDwgMTU7CisKKy8qIFJlYXNvbmFibGUgZGVm YXVsdHMgZm9yIG1pbiBhbmQgbWF4IHZhbHVlcy4gKi8KK3Vuc2lnbmVkIG9wdF90Y2FjaGVfbnNs b3RzX3NtYWxsX21pbiA9IDIwOwordW5zaWduZWQgb3B0X3RjYWNoZV9uc2xvdHNfc21hbGxfbWF4 ID0gMjAwOwordW5zaWduZWQgb3B0X3RjYWNoZV9uc2xvdHNfbGFyZ2UgPSAyMDsKKworLyoKKyAq IFdlIGF0dGVtcHQgdG8gbWFrZSB0aGUgbnVtYmVyIG9mIHNsb3RzIGluIGEgdGNhY2hlIGJpbiBm b3IgYSBnaXZlbiBzaXplIGNsYXNzCisgKiBlcXVhbCB0byB0aGUgbnVtYmVyIG9mIG9iamVjdHMg aW4gYSBzbGFiIHRpbWVzIHNvbWUgbXVsdGlwbGllci4gIEJ5IGRlZmF1bHQsCisgKiB0aGUgbXVs dGlwbGllciBpcyAyIChpLmUuIHdlIHNldCB0aGUgbWF4aW11bSBudW1iZXIgb2Ygb2JqZWN0cyBp biB0aGUgdGNhY2hlCisgKiB0byB0d2ljZSB0aGUgbnVtYmVyIG9mIG9iamVjdHMgaW4gYSBzbGFi KS4KKyAqIFRoaXMgaXMgYm91bmRlZCBieSBzb21lIG90aGVyIGNvbnN0cmFpbnRzIGFzIHdlbGws IGxpa2UgdGhlIGZhY3QgdGhhdCBpdAorICogbXVzdCBiZSBldmVuLCBtdXN0IGJlIGxlc3MgdGhh biBvcHRfdGNhY2hlX25zbG90c19zbWFsbF9tYXgsIGV0Yy4uCisgKi8KK3NzaXplX3QJb3B0X2xn X3RjYWNoZV9uc2xvdHNfbXVsID0gMTsKKworLyoKKyAqIE51bWJlciBvZiBhbGxvY2F0aW9uIGJ5 dGVzIGJldHdlZW4gdGNhY2hlIGluY3JlbWVudGFsIEdDcy4gIEFnYWluLCB0aGlzCisgKiBkZWZh dWx0IGp1c3Qgc2VlbXMgdG8gd29yayB3ZWxsOyBtb3JlIHR1bmluZyBpcyBwb3NzaWJsZS4KKyAq Lworc2l6ZV90IG9wdF90Y2FjaGVfZ2NfaW5jcl9ieXRlcyA9IDY1NTM2OworCisvKgorICogV2l0 aCBkZWZhdWx0IHNldHRpbmdzLCB3ZSBtYXkgZW5kIHVwIGZsdXNoaW5nIHNtYWxsIGJpbnMgZnJl cXVlbnRseSB3aXRoCisgKiBzbWFsbCBmbHVzaCBhbW91bnRzLiAgVG8gbGltaXQgdGhpcyB0ZW5k ZW5jeSwgd2UgY2FuIHNldCBhIG51bWJlciBvZiBieXRlcyB0bworICogImRlbGF5IiBieS4gIElm IHdlIHRyeSB0byBmbHVzaCBOIE0tYnl0ZSBpdGVtcywgd2UgZGVjcmVhc2UgdGhhdCBzaXplLWNs YXNzJ3MKKyAqIGRlbGF5IGJ5IE4gKiBNLiAgU28sIGlmIGRlbGF5IGlzIDEwMjQgYW5kIHdlJ3Jl IGxvb2tpbmcgYXQgdGhlIDY0LWJ5dGUgc2l6ZQorICogY2xhc3MsIHdlIHdvbid0IGRvIGFueSBm bHVzaGluZyB1bnRpbCB3ZSd2ZSBiZWVuIGFza2VkIHRvIGZsdXNoIDEwMjQvNjQgPT0gMTYKKyAq IGl0ZW1zLiAgVGhpcyBjYW4gaGFwcGVuIGluIGFueSBjb25maWd1cmF0aW9uIChpLmUuIGJlaW5n IGFza2VkIHRvIGZsdXNoIDE2CisgKiBpdGVtcyBvbmNlLCBvciA0IGl0ZW1zIDQgdGltZXMpLgor ICoKKyAqIFByYWN0aWNhbGx5LCB0aGlzIGlzIHN0b3JlZCBhcyBhIGNvdW50IG9mIGl0ZW1zIGlu IGEgdWludDhfdCwgc28gdGhlCisgKiBlZmZlY3RpdmUgbWF4aW11bSB2YWx1ZSBmb3IgYSBzaXpl IGNsYXNzIGlzIDI1NSAqIHN6LgorICovCitzaXplX3Qgb3B0X3RjYWNoZV9nY19kZWxheV9ieXRl cyA9IDA7CisKKy8qCisgKiBXaGVuIGEgY2FjaGUgYmluIGlzIGZsdXNoZWQgYmVjYXVzZSBpdCdz IGZ1bGwsIGhvdyBtdWNoIG9mIGl0IGRvIHdlIGZsdXNoPworICogQnkgZGVmYXVsdCwgd2UgZmx1 c2ggaGFsZiB0aGUgbWF4aW11bSBudW1iZXIgb2YgaXRlbXMuCisgKi8KK3Vuc2lnbmVkIG9wdF9s Z190Y2FjaGVfZmx1c2hfc21hbGxfZGl2ID0gMTsKK3Vuc2lnbmVkIG9wdF9sZ190Y2FjaGVfZmx1 c2hfbGFyZ2VfZGl2ID0gMTsKKworY2FjaGVfYmluX2luZm9fdAkqdGNhY2hlX2Jpbl9pbmZvOwor CisvKiBUb3RhbCBzdGFjayBzaXplIHJlcXVpcmVkIChwZXIgdGNhY2hlKS4gIEluY2x1ZGUgdGhl IHBhZGRpbmcgYWJvdmUuICovCitzdGF0aWMgc2l6ZV90IHRjYWNoZV9iaW5fYWxsb2Nfc2l6ZTsK K3N0YXRpYyBzaXplX3QgdGNhY2hlX2Jpbl9hbGxvY19hbGlnbm1lbnQ7CisKKy8qIE51bWJlciBv ZiBjYWNoZSBiaW5zIGVuYWJsZWQsIGluY2x1ZGluZyBib3RoIGxhcmdlIGFuZCBzbWFsbC4gKi8K K3Vuc2lnbmVkCQluaGJpbnM7CisvKiBNYXggc2l6ZSBjbGFzcyB0byBiZSBjYWNoZWQgKGNhbiBi ZSBzbWFsbCBvciBsYXJnZSkuICovCitzaXplX3QJCQl0Y2FjaGVfbWF4Y2xhc3M7CisKK3RjYWNo ZXNfdAkJKnRjYWNoZXM7CisKKy8qIEluZGV4IG9mIGZpcnN0IGVsZW1lbnQgd2l0aGluIHRjYWNo ZXMgdGhhdCBoYXMgbmV2ZXIgYmVlbiB1c2VkLiAqLworc3RhdGljIHVuc2lnbmVkCQl0Y2FjaGVz X3Bhc3Q7CisKKy8qIEhlYWQgb2Ygc2luZ2x5IGxpbmtlZCBsaXN0IHRyYWNraW5nIGF2YWlsYWJs ZSB0Y2FjaGVzIGVsZW1lbnRzLiAqLworc3RhdGljIHRjYWNoZXNfdAkqdGNhY2hlc19hdmFpbDsK KworLyogUHJvdGVjdHMgdGNhY2hlc3ssX3Bhc3QsX2F2YWlsfS4gKi8KK3N0YXRpYyBtYWxsb2Nf bXV0ZXhfdAl0Y2FjaGVzX210eDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc2l6ZV90 Cit0Y2FjaGVfc2FsbG9jKHRzZG5fdCAqdHNkbiwgY29uc3Qgdm9pZCAqcHRyKSB7CisJcmV0dXJu IGFyZW5hX3NhbGxvYyh0c2RuLCBwdHIpOworfQorCit1aW50NjRfdAordGNhY2hlX2djX25ld19l dmVudF93YWl0KHRzZF90ICp0c2QpIHsKKwlyZXR1cm4gb3B0X3RjYWNoZV9nY19pbmNyX2J5dGVz OworfQorCit1aW50NjRfdAordGNhY2hlX2djX3Bvc3Rwb25lZF9ldmVudF93YWl0KHRzZF90ICp0 c2QpIHsKKwlyZXR1cm4gVEVfTUlOX1NUQVJUX1dBSVQ7Cit9CisKK3VpbnQ2NF90Cit0Y2FjaGVf Z2NfZGFsbG9jX25ld19ldmVudF93YWl0KHRzZF90ICp0c2QpIHsKKwlyZXR1cm4gb3B0X3RjYWNo ZV9nY19pbmNyX2J5dGVzOworfQorCit1aW50NjRfdAordGNhY2hlX2djX2RhbGxvY19wb3N0cG9u ZWRfZXZlbnRfd2FpdCh0c2RfdCAqdHNkKSB7CisJcmV0dXJuIFRFX01JTl9TVEFSVF9XQUlUOwor fQorCitzdGF0aWMgdWludDhfdAordGNhY2hlX2djX2l0ZW1fZGVsYXlfY29tcHV0ZShzemluZF90 IHN6aW5kKSB7CisJYXNzZXJ0KHN6aW5kIDwgU0NfTkJJTlMpOworCXNpemVfdCBzeiA9IHN6X2lu ZGV4MnNpemUoc3ppbmQpOworCXNpemVfdCBpdGVtX2RlbGF5ID0gb3B0X3RjYWNoZV9nY19kZWxh eV9ieXRlcyAvIHN6OworCXNpemVfdCBkZWxheV9tYXggPSBaVSgxKQorCSAgICA8PCAoc2l6ZW9m KCgodGNhY2hlX3Nsb3dfdCAqKU5VTEwpLT5iaW5fZmx1c2hfZGVsYXlfaXRlbXNbMF0pICogOCk7 CisJaWYgKGl0ZW1fZGVsYXkgPj0gZGVsYXlfbWF4KSB7CisJCWl0ZW1fZGVsYXkgPSBkZWxheV9t YXggLSAxOworCX0KKwlyZXR1cm4gKHVpbnQ4X3QpaXRlbV9kZWxheTsKK30KKworc3RhdGljIHZv aWQKK3RjYWNoZV9nY19zbWFsbCh0c2RfdCAqdHNkLCB0Y2FjaGVfc2xvd190ICp0Y2FjaGVfc2xv dywgdGNhY2hlX3QgKnRjYWNoZSwKKyAgICBzemluZF90IHN6aW5kKSB7CisJLyogQWltIHRvIGZs dXNoIDMvNCBvZiBpdGVtcyBiZWxvdyBsb3ctd2F0ZXIuICovCisJYXNzZXJ0KHN6aW5kIDwgU0Nf TkJJTlMpOworCisJY2FjaGVfYmluX3QgKmNhY2hlX2JpbiA9ICZ0Y2FjaGUtPmJpbnNbc3ppbmRd OworCWNhY2hlX2Jpbl9zel90IG5jYWNoZWQgPSBjYWNoZV9iaW5fbmNhY2hlZF9nZXRfbG9jYWwo Y2FjaGVfYmluLAorCSAgICAmdGNhY2hlX2Jpbl9pbmZvW3N6aW5kXSk7CisJY2FjaGVfYmluX3N6 X3QgbG93X3dhdGVyID0gY2FjaGVfYmluX2xvd193YXRlcl9nZXQoY2FjaGVfYmluLAorCSAgICAm dGNhY2hlX2Jpbl9pbmZvW3N6aW5kXSk7CisJYXNzZXJ0KCF0Y2FjaGVfc2xvdy0+YmluX3JlZmls bGVkW3N6aW5kXSk7CisKKwlzaXplX3QgbmZsdXNoID0gbG93X3dhdGVyIC0gKGxvd193YXRlciA+ PiAyKTsKKwlpZiAobmZsdXNoIDwgdGNhY2hlX3Nsb3ctPmJpbl9mbHVzaF9kZWxheV9pdGVtc1tz emluZF0pIHsKKwkJLyogV29ya2Fyb3VuZCBmb3IgYSBjb252ZXJzaW9uIHdhcm5pbmcuICovCisJ CXVpbnQ4X3QgbmZsdXNoX3VpbnQ4ID0gKHVpbnQ4X3QpbmZsdXNoOworCQlhc3NlcnQoc2l6ZW9m KHRjYWNoZV9zbG93LT5iaW5fZmx1c2hfZGVsYXlfaXRlbXNbMF0pID09CisJCSAgICBzaXplb2Yo bmZsdXNoX3VpbnQ4KSk7CisJCXRjYWNoZV9zbG93LT5iaW5fZmx1c2hfZGVsYXlfaXRlbXNbc3pp bmRdIC09IG5mbHVzaF91aW50ODsKKwkJcmV0dXJuOworCX0gZWxzZSB7CisJCXRjYWNoZV9zbG93 LT5iaW5fZmx1c2hfZGVsYXlfaXRlbXNbc3ppbmRdCisJCSAgICA9IHRjYWNoZV9nY19pdGVtX2Rl bGF5X2NvbXB1dGUoc3ppbmQpOworCX0KKworCXRjYWNoZV9iaW5fZmx1c2hfc21hbGwodHNkLCB0 Y2FjaGUsIGNhY2hlX2Jpbiwgc3ppbmQsCisJICAgICh1bnNpZ25lZCkobmNhY2hlZCAtIG5mbHVz aCkpOworCisJLyoKKwkgKiBSZWR1Y2UgZmlsbCBjb3VudCBieSAyWC4gIExpbWl0IGxnX2ZpbGxf ZGl2IHN1Y2ggdGhhdAorCSAqIHRoZSBmaWxsIGNvdW50IGlzIGFsd2F5cyBhdCBsZWFzdCAxLgor CSAqLworCWlmICgoY2FjaGVfYmluX2luZm9fbmNhY2hlZF9tYXgoJnRjYWNoZV9iaW5faW5mb1tz emluZF0pCisJICAgID4+ICh0Y2FjaGVfc2xvdy0+bGdfZmlsbF9kaXZbc3ppbmRdICsgMSkpID49 IDEpIHsKKwkJdGNhY2hlX3Nsb3ctPmxnX2ZpbGxfZGl2W3N6aW5kXSsrOworCX0KK30KKworc3Rh dGljIHZvaWQKK3RjYWNoZV9nY19sYXJnZSh0c2RfdCAqdHNkLCB0Y2FjaGVfc2xvd190ICp0Y2Fj aGVfc2xvdywgdGNhY2hlX3QgKnRjYWNoZSwKKyAgICBzemluZF90IHN6aW5kKSB7CisJLyogTGlr ZSB0aGUgc21hbGwgR0M7IGZsdXNoIDMvNCBvZiB1bnRvdWNoZWQgaXRlbXMuICovCisJYXNzZXJ0 KHN6aW5kID49IFNDX05CSU5TKTsKKwljYWNoZV9iaW5fdCAqY2FjaGVfYmluID0gJnRjYWNoZS0+ Ymluc1tzemluZF07CisJY2FjaGVfYmluX3N6X3QgbmNhY2hlZCA9IGNhY2hlX2Jpbl9uY2FjaGVk X2dldF9sb2NhbChjYWNoZV9iaW4sCisJICAgICZ0Y2FjaGVfYmluX2luZm9bc3ppbmRdKTsKKwlj YWNoZV9iaW5fc3pfdCBsb3dfd2F0ZXIgPSBjYWNoZV9iaW5fbG93X3dhdGVyX2dldChjYWNoZV9i aW4sCisJICAgICZ0Y2FjaGVfYmluX2luZm9bc3ppbmRdKTsKKwl0Y2FjaGVfYmluX2ZsdXNoX2xh cmdlKHRzZCwgdGNhY2hlLCBjYWNoZV9iaW4sIHN6aW5kLAorCSAgICAodW5zaWduZWQpKG5jYWNo ZWQgLSBsb3dfd2F0ZXIgKyAobG93X3dhdGVyID4+IDIpKSk7Cit9CisKK3N0YXRpYyB2b2lkCit0 Y2FjaGVfZXZlbnQodHNkX3QgKnRzZCkgeworCXRjYWNoZV90ICp0Y2FjaGUgPSB0Y2FjaGVfZ2V0 KHRzZCk7CisJaWYgKHRjYWNoZSA9PSBOVUxMKSB7CisJCXJldHVybjsKKwl9CisKKwl0Y2FjaGVf c2xvd190ICp0Y2FjaGVfc2xvdyA9IHRzZF90Y2FjaGVfc2xvd3BfZ2V0KHRzZCk7CisJc3ppbmRf dCBzemluZCA9IHRjYWNoZV9zbG93LT5uZXh0X2djX2JpbjsKKwlib29sIGlzX3NtYWxsID0gKHN6 aW5kIDwgU0NfTkJJTlMpOworCWNhY2hlX2Jpbl90ICpjYWNoZV9iaW4gPSAmdGNhY2hlLT5iaW5z W3N6aW5kXTsKKworCXRjYWNoZV9iaW5fZmx1c2hfc3Rhc2hlZCh0c2QsIHRjYWNoZSwgY2FjaGVf YmluLCBzemluZCwgaXNfc21hbGwpOworCisJY2FjaGVfYmluX3N6X3QgbG93X3dhdGVyID0gY2Fj aGVfYmluX2xvd193YXRlcl9nZXQoY2FjaGVfYmluLAorCSAgICAmdGNhY2hlX2Jpbl9pbmZvW3N6 aW5kXSk7CisJaWYgKGxvd193YXRlciA+IDApIHsKKwkJaWYgKGlzX3NtYWxsKSB7CisJCQl0Y2Fj aGVfZ2Nfc21hbGwodHNkLCB0Y2FjaGVfc2xvdywgdGNhY2hlLCBzemluZCk7CisJCX0gZWxzZSB7 CisJCQl0Y2FjaGVfZ2NfbGFyZ2UodHNkLCB0Y2FjaGVfc2xvdywgdGNhY2hlLCBzemluZCk7CisJ CX0KKwl9IGVsc2UgaWYgKGlzX3NtYWxsICYmIHRjYWNoZV9zbG93LT5iaW5fcmVmaWxsZWRbc3pp bmRdKSB7CisJCWFzc2VydChsb3dfd2F0ZXIgPT0gMCk7CisJCS8qCisJCSAqIEluY3JlYXNlIGZp bGwgY291bnQgYnkgMlggZm9yIHNtYWxsIGJpbnMuICBNYWtlIHN1cmUKKwkJICogbGdfZmlsbF9k aXYgc3RheXMgZ3JlYXRlciB0aGFuIDAuCisJCSAqLworCQlpZiAodGNhY2hlX3Nsb3ctPmxnX2Zp bGxfZGl2W3N6aW5kXSA+IDEpIHsKKwkJCXRjYWNoZV9zbG93LT5sZ19maWxsX2RpdltzemluZF0t LTsKKwkJfQorCQl0Y2FjaGVfc2xvdy0+YmluX3JlZmlsbGVkW3N6aW5kXSA9IGZhbHNlOworCX0K KwljYWNoZV9iaW5fbG93X3dhdGVyX3NldChjYWNoZV9iaW4pOworCisJdGNhY2hlX3Nsb3ctPm5l eHRfZ2NfYmluKys7CisJaWYgKHRjYWNoZV9zbG93LT5uZXh0X2djX2JpbiA9PSBuaGJpbnMpIHsK KwkJdGNhY2hlX3Nsb3ctPm5leHRfZ2NfYmluID0gMDsKKwl9Cit9CisKK3ZvaWQKK3RjYWNoZV9n Y19ldmVudF9oYW5kbGVyKHRzZF90ICp0c2QsIHVpbnQ2NF90IGVsYXBzZWQpIHsKKwlhc3NlcnQo ZWxhcHNlZCA9PSBURV9JTlZBTElEX0VMQVBTRUQpOworCXRjYWNoZV9ldmVudCh0c2QpOworfQor Cit2b2lkCit0Y2FjaGVfZ2NfZGFsbG9jX2V2ZW50X2hhbmRsZXIodHNkX3QgKnRzZCwgdWludDY0 X3QgZWxhcHNlZCkgeworCWFzc2VydChlbGFwc2VkID09IFRFX0lOVkFMSURfRUxBUFNFRCk7CisJ dGNhY2hlX2V2ZW50KHRzZCk7Cit9CisKK3ZvaWQgKgordGNhY2hlX2FsbG9jX3NtYWxsX2hhcmQo dHNkbl90ICp0c2RuLCBhcmVuYV90ICphcmVuYSwKKyAgICB0Y2FjaGVfdCAqdGNhY2hlLCBjYWNo ZV9iaW5fdCAqY2FjaGVfYmluLCBzemluZF90IGJpbmluZCwKKyAgICBib29sICp0Y2FjaGVfc3Vj Y2VzcykgeworCXRjYWNoZV9zbG93X3QgKnRjYWNoZV9zbG93ID0gdGNhY2hlLT50Y2FjaGVfc2xv dzsKKwl2b2lkICpyZXQ7CisKKwlhc3NlcnQodGNhY2hlX3Nsb3ctPmFyZW5hICE9IE5VTEwpOwor CXVuc2lnbmVkIG5maWxsID0gY2FjaGVfYmluX2luZm9fbmNhY2hlZF9tYXgoJnRjYWNoZV9iaW5f aW5mb1tiaW5pbmRdKQorCSAgICA+PiB0Y2FjaGVfc2xvdy0+bGdfZmlsbF9kaXZbYmluaW5kXTsK KwlhcmVuYV9jYWNoZV9iaW5fZmlsbF9zbWFsbCh0c2RuLCBhcmVuYSwgY2FjaGVfYmluLAorCSAg ICAmdGNhY2hlX2Jpbl9pbmZvW2JpbmluZF0sIGJpbmluZCwgbmZpbGwpOworCXRjYWNoZV9zbG93 LT5iaW5fcmVmaWxsZWRbYmluaW5kXSA9IHRydWU7CisJcmV0ID0gY2FjaGVfYmluX2FsbG9jKGNh Y2hlX2JpbiwgdGNhY2hlX3N1Y2Nlc3MpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGNv bnN0IHZvaWQgKgordGNhY2hlX2Jpbl9mbHVzaF9wdHJfZ2V0dGVyKHZvaWQgKmFycl9jdHgsIHNp emVfdCBpbmQpIHsKKwljYWNoZV9iaW5fcHRyX2FycmF5X3QgKmFyciA9IChjYWNoZV9iaW5fcHRy X2FycmF5X3QgKilhcnJfY3R4OworCXJldHVybiBhcnItPnB0cltpbmRdOworfQorCitzdGF0aWMg dm9pZAordGNhY2hlX2Jpbl9mbHVzaF9tZXRhZGF0YV92aXNpdG9yKHZvaWQgKnN6aW5kX3N1bV9j dHgsCisgICAgZW1hcF9mdWxsX2FsbG9jX2N0eF90ICphbGxvY19jdHgpIHsKKwlzaXplX3QgKnN6 aW5kX3N1bSA9IChzaXplX3QgKilzemluZF9zdW1fY3R4OworCSpzemluZF9zdW0gLT0gYWxsb2Nf Y3R4LT5zemluZDsKKwl1dGlsX3ByZWZldGNoX3dyaXRlX3JhbmdlKGFsbG9jX2N0eC0+ZWRhdGEs IHNpemVvZihlZGF0YV90KSk7Cit9CisKK0pFTUFMTE9DX05PSU5MSU5FIHN0YXRpYyB2b2lkCit0 Y2FjaGVfYmluX2ZsdXNoX3NpemVfY2hlY2tfZmFpbChjYWNoZV9iaW5fcHRyX2FycmF5X3QgKmFy ciwgc3ppbmRfdCBzemluZCwKKyAgICBzaXplX3QgbnB0cnMsIGVtYXBfYmF0Y2hfbG9va3VwX3Jl c3VsdF90ICplZGF0YXMpIHsKKwlib29sIGZvdW5kX21pc21hdGNoID0gZmFsc2U7CisJZm9yIChz aXplX3QgaSA9IDA7IGkgPCBucHRyczsgaSsrKSB7CisJCXN6aW5kX3QgdHJ1ZV9zemluZCA9IGVk YXRhX3N6aW5kX2dldChlZGF0YXNbaV0uZWRhdGEpOworCQlpZiAodHJ1ZV9zemluZCAhPSBzemlu ZCkgeworCQkJZm91bmRfbWlzbWF0Y2ggPSB0cnVlOworCQkJc2FmZXR5X2NoZWNrX2ZhaWxfc2l6 ZWRfZGVhbGxvYygKKwkJCSAgICAvKiBjdXJyZW50X2RlYWxsb2MgKi8gZmFsc2UsCisJCQkgICAg LyogcHRyICovIHRjYWNoZV9iaW5fZmx1c2hfcHRyX2dldHRlcihhcnIsIGkpLAorCQkJICAgIC8q IHRydWVfc2l6ZSAqLyBzel9pbmRleDJzaXplKHRydWVfc3ppbmQpLAorCQkJICAgIC8qIGlucHV0 X3NpemUgKi8gc3pfaW5kZXgyc2l6ZShzemluZCkpOworCQl9CisJfQorCWFzc2VydChmb3VuZF9t aXNtYXRjaCk7Cit9CisKK3N0YXRpYyB2b2lkCit0Y2FjaGVfYmluX2ZsdXNoX2VkYXRhc19sb29r dXAodHNkX3QgKnRzZCwgY2FjaGVfYmluX3B0cl9hcnJheV90ICphcnIsCisgICAgc3ppbmRfdCBi aW5pbmQsIHNpemVfdCBuZmx1c2gsIGVtYXBfYmF0Y2hfbG9va3VwX3Jlc3VsdF90ICplZGF0YXMp IHsKKworCS8qCisJICogVGhpcyBnZXRzIGNvbXBpbGVkIGF3YXkgd2hlbiBjb25maWdfb3B0X3Nh ZmV0eV9jaGVja3MgaXMgZmFsc2UuCisJICogQ2hlY2tzIGZvciBzaXplZCBkZWFsbG9jYXRpb24g YnVncywgZmFpbGluZyBlYXJseSByYXRoZXIgdGhhbgorCSAqIGNvcnJ1cHRpbmcgbWV0YWRhdGEu CisJICovCisJc2l6ZV90IHN6aW5kX3N1bSA9IGJpbmluZCAqIG5mbHVzaDsKKwllbWFwX2VkYXRh X2xvb2t1cF9iYXRjaCh0c2QsICZhcmVuYV9lbWFwX2dsb2JhbCwgbmZsdXNoLAorCSAgICAmdGNh Y2hlX2Jpbl9mbHVzaF9wdHJfZ2V0dGVyLCAodm9pZCAqKWFyciwKKwkgICAgJnRjYWNoZV9iaW5f Zmx1c2hfbWV0YWRhdGFfdmlzaXRvciwgKHZvaWQgKikmc3ppbmRfc3VtLAorCSAgICBlZGF0YXMp OworCWlmIChjb25maWdfb3B0X3NhZmV0eV9jaGVja3MgJiYgdW5saWtlbHkoc3ppbmRfc3VtICE9 IDApKSB7CisJCXRjYWNoZV9iaW5fZmx1c2hfc2l6ZV9jaGVja19mYWlsKGFyciwgYmluaW5kLCBu Zmx1c2gsIGVkYXRhcyk7CisJfQorfQorCitKRU1BTExPQ19BTFdBWVNfSU5MSU5FIGJvb2wKK3Rj YWNoZV9iaW5fZmx1c2hfbWF0Y2goZWRhdGFfdCAqZWRhdGEsIHVuc2lnbmVkIGN1cl9hcmVuYV9p bmQsCisgICAgdW5zaWduZWQgY3VyX2JpbnNoYXJkLCBib29sIHNtYWxsKSB7CisJaWYgKHNtYWxs KSB7CisJCXJldHVybiBlZGF0YV9hcmVuYV9pbmRfZ2V0KGVkYXRhKSA9PSBjdXJfYXJlbmFfaW5k CisJCSAgICAmJiBlZGF0YV9iaW5zaGFyZF9nZXQoZWRhdGEpID09IGN1cl9iaW5zaGFyZDsKKwl9 IGVsc2UgeworCQlyZXR1cm4gZWRhdGFfYXJlbmFfaW5kX2dldChlZGF0YSkgPT0gY3VyX2FyZW5h X2luZDsKKwl9Cit9CisKK0pFTUFMTE9DX0FMV0FZU19JTkxJTkUgdm9pZAordGNhY2hlX2Jpbl9m bHVzaF9pbXBsKHRzZF90ICp0c2QsIHRjYWNoZV90ICp0Y2FjaGUsIGNhY2hlX2Jpbl90ICpjYWNo ZV9iaW4sCisgICAgc3ppbmRfdCBiaW5pbmQsIGNhY2hlX2Jpbl9wdHJfYXJyYXlfdCAqcHRycywg dW5zaWduZWQgbmZsdXNoLCBib29sIHNtYWxsKSB7CisJdGNhY2hlX3Nsb3dfdCAqdGNhY2hlX3Ns b3cgPSB0Y2FjaGUtPnRjYWNoZV9zbG93OworCS8qCisJICogQSBjb3VwbGUgbG9va3VwIGNhbGxz IHRha2UgdHNkbjsgZGVjbGFyZSBpdCBvbmNlIGZvciBjb252ZW5pZW5jZQorCSAqIGluc3RlYWQg b2YgY2FsbGluZyB0c2RfdHNkbih0c2QpIGFsbCB0aGUgdGltZS4KKwkgKi8KKwl0c2RuX3QgKnRz ZG4gPSB0c2RfdHNkbih0c2QpOworCisJaWYgKHNtYWxsKSB7CisJCWFzc2VydChiaW5pbmQgPCBT Q19OQklOUyk7CisJfSBlbHNlIHsKKwkJYXNzZXJ0KGJpbmluZCA8IG5oYmlucyk7CisJfQorCWFy ZW5hX3QgKnRjYWNoZV9hcmVuYSA9IHRjYWNoZV9zbG93LT5hcmVuYTsKKwlhc3NlcnQodGNhY2hl X2FyZW5hICE9IE5VTEwpOworCisJLyoKKwkgKiBWYXJpYWJsZSBsZW5ndGggYXJyYXkgbXVzdCBo YXZlID4gMCBsZW5ndGg7IHRoZSBsYXN0IGVsZW1lbnQgaXMgbmV2ZXIKKwkgKiB0b3VjaGVkIChp dCdzIGp1c3QgaW5jbHVkZWQgdG8gc2F0aXNmeSB0aGUgbm8temVyby1sZW5ndGggcnVsZSkuCisJ ICovCisJVkFSSUFCTEVfQVJSQVkoZW1hcF9iYXRjaF9sb29rdXBfcmVzdWx0X3QsIGl0ZW1fZWRh dGEsIG5mbHVzaCArIDEpOworCXRjYWNoZV9iaW5fZmx1c2hfZWRhdGFzX2xvb2t1cCh0c2QsIHB0 cnMsIGJpbmluZCwgbmZsdXNoLCBpdGVtX2VkYXRhKTsKKworCS8qCisJICogVGhlIHNsYWJzIHdo ZXJlIHdlIGZyZWVkIHRoZSBsYXN0IHJlbWFpbmluZyBvYmplY3QgaW4gdGhlIHNsYWIgKGFuZAor CSAqIHNvIG5lZWQgdG8gZnJlZSB0aGUgc2xhYiBpdHNlbGYpLgorCSAqIFVzZWQgb25seSBpZiBz bWFsbCA9PSB0cnVlLgorCSAqLworCXVuc2lnbmVkIGRhbGxvY19jb3VudCA9IDA7CisJVkFSSUFC TEVfQVJSQVkoZWRhdGFfdCAqLCBkYWxsb2Nfc2xhYnMsIG5mbHVzaCArIDEpOworCisJLyoKKwkg KiBXZSdyZSBhYm91dCB0byBncmFiIGEgYnVuY2ggb2YgbG9ja3MuICBJZiBvbmUgb2YgdGhlbSBo YXBwZW5zIHRvIGJlCisJICogdGhlIG9uZSBndWFyZGluZyB0aGUgYXJlbmEtbGV2ZWwgc3RhdHMg Y291bnRlcnMgd2UgZmx1c2ggb3VyCisJICogdGhyZWFkLWxvY2FsIG9uZXMgdG8sIHdlIGRvIHNv IHVuZGVyIG9uZSBjcml0aWNhbCBzZWN0aW9uLgorCSAqLworCWJvb2wgbWVyZ2VkX3N0YXRzID0g ZmFsc2U7CisJd2hpbGUgKG5mbHVzaCA+IDApIHsKKwkJLyogTG9jayB0aGUgYXJlbmEsIG9yIGJp biwgYXNzb2NpYXRlZCB3aXRoIHRoZSBmaXJzdCBvYmplY3QuICovCisJCWVkYXRhX3QgKmVkYXRh ID0gaXRlbV9lZGF0YVswXS5lZGF0YTsKKwkJdW5zaWduZWQgY3VyX2FyZW5hX2luZCA9IGVkYXRh X2FyZW5hX2luZF9nZXQoZWRhdGEpOworCQlhcmVuYV90ICpjdXJfYXJlbmEgPSBhcmVuYV9nZXQo dHNkbiwgY3VyX2FyZW5hX2luZCwgZmFsc2UpOworCisJCS8qCisJCSAqIFRoZXNlIGFzc2lnbm1l bnRzIGFyZSBhbHdheXMgb3ZlcndyaXR0ZW4gd2hlbiBzbWFsbCBpcyB0cnVlLAorCQkgKiBhbmQg dGhlaXIgdmFsdWVzIGFyZSBhbHdheXMgaWdub3JlZCB3aGVuIHNtYWxsIGlzIGZhbHNlLCBidXQK KwkJICogdG8gYXZvaWQgdGhlIHRlY2huaWNhbCBVQiB3aGVuIHdlIHBhc3MgdGhlbSBhcyBwYXJh bWV0ZXJzLCB3ZQorCQkgKiBuZWVkIHRvIGludGlhbGl6ZSB0aGVtLgorCQkgKi8KKwkJdW5zaWdu ZWQgY3VyX2JpbnNoYXJkID0gMDsKKwkJYmluX3QgKmN1cl9iaW4gPSBOVUxMOworCQlpZiAoc21h bGwpIHsKKwkJCWN1cl9iaW5zaGFyZCA9IGVkYXRhX2JpbnNoYXJkX2dldChlZGF0YSk7CisJCQlj dXJfYmluID0gYXJlbmFfZ2V0X2JpbihjdXJfYXJlbmEsIGJpbmluZCwKKwkJCSAgICBjdXJfYmlu c2hhcmQpOworCQkJYXNzZXJ0KGN1cl9iaW5zaGFyZCA8IGJpbl9pbmZvc1tiaW5pbmRdLm5fc2hh cmRzKTsKKwkJCS8qCisJCQkgKiBJZiB5b3UncmUgbG9va2luZyBhdCBwcm9maWxlcywgeW91IG1p Z2h0IHRoaW5rIHRoaXMKKwkJCSAqIGlzIGEgZ29vZCBwbGFjZSB0byBwcmVmZXRjaCB0aGUgYmlu IHN0YXRzLCB3aGljaCBhcmUKKwkJCSAqIG9mdGVuIGEgY2FjaGUgbWlzcy4gIFRoaXMgdHVybnMg b3V0IG5vdCB0byBiZQorCQkJICogaGVscGZ1bCBvbiB0aGUgd29ya2xvYWRzIHdlJ3ZlIGxvb2tl ZCBhdCwgd2l0aCBtb3ZpbmcKKwkJCSAqIHRoZSBiaW4gc3RhdHMgbmV4dCB0byB0aGUgbG9jayBz ZWVtaW5nIHRvIGRvIGJldHRlci4KKwkJCSAqLworCQl9CisKKwkJaWYgKHNtYWxsKSB7CisJCQlt YWxsb2NfbXV0ZXhfbG9jayh0c2RuLCAmY3VyX2Jpbi0+bG9jayk7CisJCX0KKwkJaWYgKCFzbWFs bCAmJiAhYXJlbmFfaXNfYXV0byhjdXJfYXJlbmEpKSB7CisJCQltYWxsb2NfbXV0ZXhfbG9jayh0 c2RuLCAmY3VyX2FyZW5hLT5sYXJnZV9tdHgpOworCQl9CisKKwkJLyoKKwkJICogSWYgd2UgYWNx dWlyZWQgdGhlIHJpZ2h0IGxvY2sgYW5kIGhhdmUgc29tZSBzdGF0cyB0byBmbHVzaCwKKwkJICog Zmx1c2ggdGhlbS4KKwkJICovCisJCWlmIChjb25maWdfc3RhdHMgJiYgdGNhY2hlX2FyZW5hID09 IGN1cl9hcmVuYQorCQkgICAgJiYgIW1lcmdlZF9zdGF0cykgeworCQkJbWVyZ2VkX3N0YXRzID0g dHJ1ZTsKKwkJCWlmIChzbWFsbCkgeworCQkJCWN1cl9iaW4tPnN0YXRzLm5mbHVzaGVzKys7CisJ CQkJY3VyX2Jpbi0+c3RhdHMubnJlcXVlc3RzICs9CisJCQkJICAgIGNhY2hlX2Jpbi0+dHN0YXRz Lm5yZXF1ZXN0czsKKwkJCQljYWNoZV9iaW4tPnRzdGF0cy5ucmVxdWVzdHMgPSAwOworCQkJfSBl bHNlIHsKKwkJCQlhcmVuYV9zdGF0c19sYXJnZV9mbHVzaF9ucmVxdWVzdHNfYWRkKHRzZG4sCisJ CQkJICAgICZ0Y2FjaGVfYXJlbmEtPnN0YXRzLCBiaW5pbmQsCisJCQkJICAgIGNhY2hlX2Jpbi0+ dHN0YXRzLm5yZXF1ZXN0cyk7CisJCQkJY2FjaGVfYmluLT50c3RhdHMubnJlcXVlc3RzID0gMDsK KwkJCX0KKwkJfQorCisJCS8qCisJCSAqIExhcmdlIGFsbG9jYXRpb25zIG5lZWQgc3BlY2lhbCBw cmVwIGRvbmUuICBBZnRlcndhcmRzLCB3ZSBjYW4KKwkJICogZHJvcCB0aGUgbGFyZ2UgbG9jay4K KwkJICovCisJCWlmICghc21hbGwpIHsKKwkJCWZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBuZmx1 c2g7IGkrKykgeworCQkJCXZvaWQgKnB0ciA9IHB0cnMtPnB0cltpXTsKKwkJCQllZGF0YSA9IGl0 ZW1fZWRhdGFbaV0uZWRhdGE7CisJCQkJYXNzZXJ0KHB0ciAhPSBOVUxMICYmIGVkYXRhICE9IE5V TEwpOworCisJCQkJaWYgKHRjYWNoZV9iaW5fZmx1c2hfbWF0Y2goZWRhdGEsIGN1cl9hcmVuYV9p bmQsCisJCQkJICAgIGN1cl9iaW5zaGFyZCwgc21hbGwpKSB7CisJCQkJCWxhcmdlX2RhbGxvY19w cmVwX2xvY2tlZCh0c2RuLAorCQkJCQkgICAgZWRhdGEpOworCQkJCX0KKwkJCX0KKwkJfQorCQlp ZiAoIXNtYWxsICYmICFhcmVuYV9pc19hdXRvKGN1cl9hcmVuYSkpIHsKKwkJCW1hbGxvY19tdXRl eF91bmxvY2sodHNkbiwgJmN1cl9hcmVuYS0+bGFyZ2VfbXR4KTsKKwkJfQorCisJCS8qIERlYWxs b2NhdGUgd2hhdGV2ZXIgd2UgY2FuLiAqLworCQl1bnNpZ25lZCBuZGVmZXJyZWQgPSAwOworCQkv KiBJbml0IG9ubHkgdG8gYXZvaWQgdXNlZC11bmluaXRpYWxpemVkIHdhcm5pbmcuICovCisJCWFy ZW5hX2RhbGxvY19iaW5fbG9ja2VkX2luZm9fdCBkYWxsb2NfYmluX2luZm8gPSB7MH07CisJCWlm IChzbWFsbCkgeworCQkJYXJlbmFfZGFsbG9jX2Jpbl9sb2NrZWRfYmVnaW4oJmRhbGxvY19iaW5f aW5mbywgYmluaW5kKTsKKwkJfQorCQlmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbmZsdXNoOyBp KyspIHsKKwkJCXZvaWQgKnB0ciA9IHB0cnMtPnB0cltpXTsKKwkJCWVkYXRhID0gaXRlbV9lZGF0 YVtpXS5lZGF0YTsKKwkJCWFzc2VydChwdHIgIT0gTlVMTCAmJiBlZGF0YSAhPSBOVUxMKTsKKwkJ CWlmICghdGNhY2hlX2Jpbl9mbHVzaF9tYXRjaChlZGF0YSwgY3VyX2FyZW5hX2luZCwKKwkJCSAg ICBjdXJfYmluc2hhcmQsIHNtYWxsKSkgeworCQkJCS8qCisJCQkJICogVGhlIG9iamVjdCB3YXMg YWxsb2NhdGVkIGVpdGhlciB2aWEgYQorCQkJCSAqIGRpZmZlcmVudCBhcmVuYSwgb3IgYSBkaWZm ZXJlbnQgYmluIGluIHRoaXMKKwkJCQkgKiBhcmVuYS4gIEVpdGhlciB3YXksIHN0YXNoIHRoZSBv YmplY3Qgc28gdGhhdAorCQkJCSAqIGl0IGNhbiBiZSBoYW5kbGVkIGluIGEgZnV0dXJlIHBhc3Mu CisJCQkJICovCisJCQkJcHRycy0+cHRyW25kZWZlcnJlZF0gPSBwdHI7CisJCQkJaXRlbV9lZGF0 YVtuZGVmZXJyZWRdLmVkYXRhID0gZWRhdGE7CisJCQkJbmRlZmVycmVkKys7CisJCQkJY29udGlu dWU7CisJCQl9CisJCQlpZiAoc21hbGwpIHsKKwkJCQlpZiAoYXJlbmFfZGFsbG9jX2Jpbl9sb2Nr ZWRfc3RlcCh0c2RuLAorCQkJCSAgICBjdXJfYXJlbmEsIGN1cl9iaW4sICZkYWxsb2NfYmluX2lu Zm8sCisJCQkJICAgIGJpbmluZCwgZWRhdGEsIHB0cikpIHsKKwkJCQkJZGFsbG9jX3NsYWJzW2Rh bGxvY19jb3VudF0gPSBlZGF0YTsKKwkJCQkJZGFsbG9jX2NvdW50Kys7CisJCQkJfQorCQkJfSBl bHNlIHsKKwkJCQlpZiAobGFyZ2VfZGFsbG9jX3NhZmV0eV9jaGVja3MoZWRhdGEsIHB0ciwKKwkJ CQkgICAgYmluaW5kKSkgeworCQkJCQkvKiBTZWUgdGhlIGNvbW1lbnQgaW4gaXNmcmVlLiAqLwor CQkJCQljb250aW51ZTsKKwkJCQl9CisJCQkJbGFyZ2VfZGFsbG9jX2ZpbmlzaCh0c2RuLCBlZGF0 YSk7CisJCQl9CisJCX0KKworCQlpZiAoc21hbGwpIHsKKwkJCWFyZW5hX2RhbGxvY19iaW5fbG9j a2VkX2ZpbmlzaCh0c2RuLCBjdXJfYXJlbmEsIGN1cl9iaW4sCisJCQkgICAgJmRhbGxvY19iaW5f aW5mbyk7CisJCQltYWxsb2NfbXV0ZXhfdW5sb2NrKHRzZG4sICZjdXJfYmluLT5sb2NrKTsKKwkJ fQorCQlhcmVuYV9kZWNheV90aWNrcyh0c2RuLCBjdXJfYXJlbmEsIG5mbHVzaCAtIG5kZWZlcnJl ZCk7CisJCW5mbHVzaCA9IG5kZWZlcnJlZDsKKwl9CisKKwkvKiBIYW5kbGUgYWxsIGRlZmVycmVk IHNsYWIgZGFsbG9jLiAqLworCWFzc2VydChzbWFsbCB8fCBkYWxsb2NfY291bnQgPT0gMCk7CisJ Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRhbGxvY19jb3VudDsgaSsrKSB7CisJCWVkYXRhX3Qg KnNsYWIgPSBkYWxsb2Nfc2xhYnNbaV07CisJCWFyZW5hX3NsYWJfZGFsbG9jKHRzZG4sIGFyZW5h X2dldF9mcm9tX2VkYXRhKHNsYWIpLCBzbGFiKTsKKworCX0KKworCWlmIChjb25maWdfc3RhdHMg JiYgIW1lcmdlZF9zdGF0cykgeworCQlpZiAoc21hbGwpIHsKKwkJCS8qCisJCQkgKiBUaGUgZmx1 c2ggbG9vcCBkaWRuJ3QgaGFwcGVuIHRvIGZsdXNoIHRvIHRoaXMKKwkJCSAqIHRocmVhZCdzIGFy ZW5hLCBzbyB0aGUgc3RhdHMgZGlkbid0IGdldCBtZXJnZWQuCisJCQkgKiBNYW51YWxseSBkbyBz byBub3cuCisJCQkgKi8KKwkJCWJpbl90ICpiaW4gPSBhcmVuYV9iaW5fY2hvb3NlKHRzZG4sIHRj YWNoZV9hcmVuYSwKKwkJCSAgICBiaW5pbmQsIE5VTEwpOworCQkJbWFsbG9jX211dGV4X2xvY2so dHNkbiwgJmJpbi0+bG9jayk7CisJCQliaW4tPnN0YXRzLm5mbHVzaGVzKys7CisJCQliaW4tPnN0 YXRzLm5yZXF1ZXN0cyArPSBjYWNoZV9iaW4tPnRzdGF0cy5ucmVxdWVzdHM7CisJCQljYWNoZV9i aW4tPnRzdGF0cy5ucmVxdWVzdHMgPSAwOworCQkJbWFsbG9jX211dGV4X3VubG9jayh0c2RuLCAm YmluLT5sb2NrKTsKKwkJfSBlbHNlIHsKKwkJCWFyZW5hX3N0YXRzX2xhcmdlX2ZsdXNoX25yZXF1 ZXN0c19hZGQodHNkbiwKKwkJCSAgICAmdGNhY2hlX2FyZW5hLT5zdGF0cywgYmluaW5kLAorCQkJ ICAgIGNhY2hlX2Jpbi0+dHN0YXRzLm5yZXF1ZXN0cyk7CisJCQljYWNoZV9iaW4tPnRzdGF0cy5u cmVxdWVzdHMgPSAwOworCQl9CisJfQorCit9CisKK0pFTUFMTE9DX0FMV0FZU19JTkxJTkUgdm9p ZAordGNhY2hlX2Jpbl9mbHVzaF9ib3R0b20odHNkX3QgKnRzZCwgdGNhY2hlX3QgKnRjYWNoZSwg Y2FjaGVfYmluX3QgKmNhY2hlX2JpbiwKKyAgICBzemluZF90IGJpbmluZCwgdW5zaWduZWQgcmVt LCBib29sIHNtYWxsKSB7CisJdGNhY2hlX2Jpbl9mbHVzaF9zdGFzaGVkKHRzZCwgdGNhY2hlLCBj YWNoZV9iaW4sIGJpbmluZCwgc21hbGwpOworCisJY2FjaGVfYmluX3N6X3QgbmNhY2hlZCA9IGNh Y2hlX2Jpbl9uY2FjaGVkX2dldF9sb2NhbChjYWNoZV9iaW4sCisJICAgICZ0Y2FjaGVfYmluX2lu Zm9bYmluaW5kXSk7CisJYXNzZXJ0KChjYWNoZV9iaW5fc3pfdClyZW0gPD0gbmNhY2hlZCk7CisJ dW5zaWduZWQgbmZsdXNoID0gbmNhY2hlZCAtIHJlbTsKKworCUNBQ0hFX0JJTl9QVFJfQVJSQVlf REVDTEFSRShwdHJzLCBuZmx1c2gpOworCWNhY2hlX2Jpbl9pbml0X3B0cl9hcnJheV9mb3JfZmx1 c2goY2FjaGVfYmluLCAmdGNhY2hlX2Jpbl9pbmZvW2JpbmluZF0sCisJICAgICZwdHJzLCBuZmx1 c2gpOworCisJdGNhY2hlX2Jpbl9mbHVzaF9pbXBsKHRzZCwgdGNhY2hlLCBjYWNoZV9iaW4sIGJp bmluZCwgJnB0cnMsIG5mbHVzaCwKKwkgICAgc21hbGwpOworCisJY2FjaGVfYmluX2ZpbmlzaF9m bHVzaChjYWNoZV9iaW4sICZ0Y2FjaGVfYmluX2luZm9bYmluaW5kXSwgJnB0cnMsCisJICAgIG5j YWNoZWQgLSByZW0pOworfQorCit2b2lkCit0Y2FjaGVfYmluX2ZsdXNoX3NtYWxsKHRzZF90ICp0 c2QsIHRjYWNoZV90ICp0Y2FjaGUsIGNhY2hlX2Jpbl90ICpjYWNoZV9iaW4sCisgICAgc3ppbmRf dCBiaW5pbmQsIHVuc2lnbmVkIHJlbSkgeworCXRjYWNoZV9iaW5fZmx1c2hfYm90dG9tKHRzZCwg dGNhY2hlLCBjYWNoZV9iaW4sIGJpbmluZCwgcmVtLCB0cnVlKTsKK30KKwordm9pZAordGNhY2hl X2Jpbl9mbHVzaF9sYXJnZSh0c2RfdCAqdHNkLCB0Y2FjaGVfdCAqdGNhY2hlLCBjYWNoZV9iaW5f dCAqY2FjaGVfYmluLAorICAgIHN6aW5kX3QgYmluaW5kLCB1bnNpZ25lZCByZW0pIHsKKwl0Y2Fj aGVfYmluX2ZsdXNoX2JvdHRvbSh0c2QsIHRjYWNoZSwgY2FjaGVfYmluLCBiaW5pbmQsIHJlbSwg ZmFsc2UpOworfQorCisvKgorICogRmx1c2hpbmcgc3Rhc2hlZCBoYXBwZW5zIHdoZW4gMSkgdGNh Y2hlIGZpbGwsIDIpIHRjYWNoZSBmbHVzaCwgb3IgMykgdGNhY2hlCisgKiBHQyBldmVudC4gIFRo aXMgbWFrZXMgc3VyZSB0aGF0IHRoZSBzdGFzaGVkIGl0ZW1zIGRvIG5vdCBob2xkIG1lbW9yeSBm b3IgdG9vCisgKiBsb25nLCBhbmQgbmV3IGJ1ZmZlcnMgY2FuIG9ubHkgYmUgYWxsb2NhdGVkIHdo ZW4gbm90aGluZyBpcyBzdGFzaGVkLgorICoKKyAqIFRoZSBkb3duc2lkZSBpcywgdGhlIHRpbWUg YmV0d2VlbiBzdGFzaCBhbmQgZmx1c2ggbWF5IGJlIHJlbGF0aXZlbHkgc2hvcnQsCisgKiBlc3Bl Y2lhbGx5IHdoZW4gdGhlIHJlcXVlc3QgcmF0ZSBpcyBoaWdoLiAgSXQgbG93ZXJzIHRoZSBjaGFu Y2Ugb2YgZGV0ZWN0aW5nCisgKiB3cml0ZS1hZnRlci1mcmVlIC0tIGhvd2V2ZXIgdGhhdCBpcyBh IGRlbGF5ZWQgZGV0ZWN0aW9uIGFueXdheSwgYW5kIGlzIGxlc3MKKyAqIG9mIGEgZm9jdXMgdGhh biB0aGUgbWVtb3J5IG92ZXJoZWFkLgorICovCit2b2lkCit0Y2FjaGVfYmluX2ZsdXNoX3N0YXNo ZWQodHNkX3QgKnRzZCwgdGNhY2hlX3QgKnRjYWNoZSwgY2FjaGVfYmluX3QgKmNhY2hlX2JpbiwK KyAgICBzemluZF90IGJpbmluZCwgYm9vbCBpc19zbWFsbCkgeworCWNhY2hlX2Jpbl9pbmZvX3Qg KmluZm8gPSAmdGNhY2hlX2Jpbl9pbmZvW2JpbmluZF07CisJLyoKKwkgKiBUaGUgdHdvIGJlbG93 IGFyZSBmb3IgYXNzZXJ0aW9uIG9ubHkuICBUaGUgY29udGVudCBvZiBvcmlnaW5hbCBjYWNoZWQK KwkgKiBpdGVtcyByZW1haW4gdW5jaGFuZ2VkIC0tIHRoZSBzdGFzaGVkIGl0ZW1zIHJlc2lkZSBv biB0aGUgb3RoZXIgZW5kCisJICogb2YgdGhlIHN0YWNrLiAgQ2hlY2tpbmcgdGhlIHN0YWNrIGhl YWQgYW5kIG5jYWNoZWQgdG8gdmVyaWZ5LgorCSAqLworCXZvaWQgKmhlYWRfY29udGVudCA9ICpj YWNoZV9iaW4tPnN0YWNrX2hlYWQ7CisJY2FjaGVfYmluX3N6X3Qgb3JpZ19jYWNoZWQgPSBjYWNo ZV9iaW5fbmNhY2hlZF9nZXRfbG9jYWwoY2FjaGVfYmluLAorCSAgICBpbmZvKTsKKworCWNhY2hl X2Jpbl9zel90IG5zdGFzaGVkID0gY2FjaGVfYmluX25zdGFzaGVkX2dldF9sb2NhbChjYWNoZV9i aW4sIGluZm8pOworCWFzc2VydChvcmlnX2NhY2hlZCArIG5zdGFzaGVkIDw9IGNhY2hlX2Jpbl9p bmZvX25jYWNoZWRfbWF4KGluZm8pKTsKKwlpZiAobnN0YXNoZWQgPT0gMCkgeworCQlyZXR1cm47 CisJfQorCisJQ0FDSEVfQklOX1BUUl9BUlJBWV9ERUNMQVJFKHB0cnMsIG5zdGFzaGVkKTsKKwlj YWNoZV9iaW5faW5pdF9wdHJfYXJyYXlfZm9yX3N0YXNoZWQoY2FjaGVfYmluLCBiaW5pbmQsIGlu Zm8sICZwdHJzLAorCSAgICBuc3Rhc2hlZCk7CisJc2FuX2NoZWNrX3N0YXNoZWRfcHRycyhwdHJz LnB0ciwgbnN0YXNoZWQsIHN6X2luZGV4MnNpemUoYmluaW5kKSk7CisJdGNhY2hlX2Jpbl9mbHVz aF9pbXBsKHRzZCwgdGNhY2hlLCBjYWNoZV9iaW4sIGJpbmluZCwgJnB0cnMsIG5zdGFzaGVkLAor CSAgICBpc19zbWFsbCk7CisJY2FjaGVfYmluX2ZpbmlzaF9mbHVzaF9zdGFzaGVkKGNhY2hlX2Jp biwgaW5mbyk7CisKKwlhc3NlcnQoY2FjaGVfYmluX25zdGFzaGVkX2dldF9sb2NhbChjYWNoZV9i aW4sIGluZm8pID09IDApOworCWFzc2VydChjYWNoZV9iaW5fbmNhY2hlZF9nZXRfbG9jYWwoY2Fj aGVfYmluLCBpbmZvKSA9PSBvcmlnX2NhY2hlZCk7CisJYXNzZXJ0KGhlYWRfY29udGVudCA9PSAq Y2FjaGVfYmluLT5zdGFja19oZWFkKTsKK30KKwordm9pZAordGNhY2hlX2FyZW5hX2Fzc29jaWF0 ZSh0c2RuX3QgKnRzZG4sIHRjYWNoZV9zbG93X3QgKnRjYWNoZV9zbG93LAorICAgIHRjYWNoZV90 ICp0Y2FjaGUsIGFyZW5hX3QgKmFyZW5hKSB7CisJYXNzZXJ0KHRjYWNoZV9zbG93LT5hcmVuYSA9 PSBOVUxMKTsKKwl0Y2FjaGVfc2xvdy0+YXJlbmEgPSBhcmVuYTsKKworCWlmIChjb25maWdfc3Rh dHMpIHsKKwkJLyogTGluayBpbnRvIGxpc3Qgb2YgZXh0YW50IHRjYWNoZXMuICovCisJCW1hbGxv Y19tdXRleF9sb2NrKHRzZG4sICZhcmVuYS0+dGNhY2hlX3FsX210eCk7CisKKwkJcWxfZWxtX25l dyh0Y2FjaGVfc2xvdywgbGluayk7CisJCXFsX3RhaWxfaW5zZXJ0KCZhcmVuYS0+dGNhY2hlX3Fs LCB0Y2FjaGVfc2xvdywgbGluayk7CisJCWNhY2hlX2Jpbl9hcnJheV9kZXNjcmlwdG9yX2luaXQo CisJCSAgICAmdGNhY2hlX3Nsb3ctPmNhY2hlX2Jpbl9hcnJheV9kZXNjcmlwdG9yLCB0Y2FjaGUt PmJpbnMpOworCQlxbF90YWlsX2luc2VydCgmYXJlbmEtPmNhY2hlX2Jpbl9hcnJheV9kZXNjcmlw dG9yX3FsLAorCQkgICAgJnRjYWNoZV9zbG93LT5jYWNoZV9iaW5fYXJyYXlfZGVzY3JpcHRvciwg bGluayk7CisKKwkJbWFsbG9jX211dGV4X3VubG9jayh0c2RuLCAmYXJlbmEtPnRjYWNoZV9xbF9t dHgpOworCX0KK30KKworc3RhdGljIHZvaWQKK3RjYWNoZV9hcmVuYV9kaXNzb2NpYXRlKHRzZG5f dCAqdHNkbiwgdGNhY2hlX3Nsb3dfdCAqdGNhY2hlX3Nsb3csCisgICAgdGNhY2hlX3QgKnRjYWNo ZSkgeworCWFyZW5hX3QgKmFyZW5hID0gdGNhY2hlX3Nsb3ctPmFyZW5hOworCWFzc2VydChhcmVu YSAhPSBOVUxMKTsKKwlpZiAoY29uZmlnX3N0YXRzKSB7CisJCS8qIFVubGluayBmcm9tIGxpc3Qg b2YgZXh0YW50IHRjYWNoZXMuICovCisJCW1hbGxvY19tdXRleF9sb2NrKHRzZG4sICZhcmVuYS0+ dGNhY2hlX3FsX210eCk7CisJCWlmIChjb25maWdfZGVidWcpIHsKKwkJCWJvb2wgaW5fcWwgPSBm YWxzZTsKKwkJCXRjYWNoZV9zbG93X3QgKml0ZXI7CisJCQlxbF9mb3JlYWNoKGl0ZXIsICZhcmVu YS0+dGNhY2hlX3FsLCBsaW5rKSB7CisJCQkJaWYgKGl0ZXIgPT0gdGNhY2hlX3Nsb3cpIHsKKwkJ CQkJaW5fcWwgPSB0cnVlOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCQlhc3NlcnQoaW5f cWwpOworCQl9CisJCXFsX3JlbW92ZSgmYXJlbmEtPnRjYWNoZV9xbCwgdGNhY2hlX3Nsb3csIGxp bmspOworCQlxbF9yZW1vdmUoJmFyZW5hLT5jYWNoZV9iaW5fYXJyYXlfZGVzY3JpcHRvcl9xbCwK KwkJICAgICZ0Y2FjaGVfc2xvdy0+Y2FjaGVfYmluX2FycmF5X2Rlc2NyaXB0b3IsIGxpbmspOwor CQl0Y2FjaGVfc3RhdHNfbWVyZ2UodHNkbiwgdGNhY2hlX3Nsb3ctPnRjYWNoZSwgYXJlbmEpOwor CQltYWxsb2NfbXV0ZXhfdW5sb2NrKHRzZG4sICZhcmVuYS0+dGNhY2hlX3FsX210eCk7CisJfQor CXRjYWNoZV9zbG93LT5hcmVuYSA9IE5VTEw7Cit9CisKK3ZvaWQKK3RjYWNoZV9hcmVuYV9yZWFz c29jaWF0ZSh0c2RuX3QgKnRzZG4sIHRjYWNoZV9zbG93X3QgKnRjYWNoZV9zbG93LAorICAgIHRj YWNoZV90ICp0Y2FjaGUsIGFyZW5hX3QgKmFyZW5hKSB7CisJdGNhY2hlX2FyZW5hX2Rpc3NvY2lh dGUodHNkbiwgdGNhY2hlX3Nsb3csIHRjYWNoZSk7CisJdGNhY2hlX2FyZW5hX2Fzc29jaWF0ZSh0 c2RuLCB0Y2FjaGVfc2xvdywgdGNhY2hlLCBhcmVuYSk7Cit9CisKK2Jvb2wKK3RzZF90Y2FjaGVf ZW5hYmxlZF9kYXRhX2luaXQodHNkX3QgKnRzZCkgeworCS8qIENhbGxlZCB1cG9uIHRzZCBpbml0 aWFsaXphdGlvbi4gKi8KKwl0c2RfdGNhY2hlX2VuYWJsZWRfc2V0KHRzZCwgb3B0X3RjYWNoZSk7 CisJdHNkX3Nsb3dfdXBkYXRlKHRzZCk7CisKKwlpZiAob3B0X3RjYWNoZSkgeworCQkvKiBUcmln Z2VyIHRjYWNoZSBpbml0LiAqLworCQl0c2RfdGNhY2hlX2RhdGFfaW5pdCh0c2QpOworCX0KKwor CXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIHZvaWQKK3RjYWNoZV9pbml0KHRzZF90ICp0c2Qs IHRjYWNoZV9zbG93X3QgKnRjYWNoZV9zbG93LCB0Y2FjaGVfdCAqdGNhY2hlLAorICAgIHZvaWQg Km1lbSkgeworCXRjYWNoZS0+dGNhY2hlX3Nsb3cgPSB0Y2FjaGVfc2xvdzsKKwl0Y2FjaGVfc2xv dy0+dGNhY2hlID0gdGNhY2hlOworCisJbWVtc2V0KCZ0Y2FjaGVfc2xvdy0+bGluaywgMCwgc2l6 ZW9mKHFsX2VsbSh0Y2FjaGVfdCkpKTsKKwl0Y2FjaGVfc2xvdy0+bmV4dF9nY19iaW4gPSAwOwor CXRjYWNoZV9zbG93LT5hcmVuYSA9IE5VTEw7CisJdGNhY2hlX3Nsb3ctPmR5bl9hbGxvYyA9IG1l bTsKKworCS8qCisJICogV2UgcmVzZXJ2ZSBjYWNoZSBiaW5zIGZvciBhbGwgc21hbGwgc2l6ZSBj bGFzc2VzLCBldmVuIGlmIHNvbWUgbWF5CisJICogbm90IGdldCB1c2VkIChpLmUuIGJpbnMgaGln aGVyIHRoYW4gbmhiaW5zKS4gIFRoaXMgYWxsb3dzIHRoZSBmYXN0CisJICogYW5kIGNvbW1vbiBw YXRocyB0byBhY2Nlc3MgY2FjaGUgYmluIG1ldGFkYXRhIHNhZmVseSB3L28gd29ycnlpbmcKKwkg KiBhYm91dCB3aGljaCBvbmVzIGFyZSBkaXNhYmxlZC4KKwkgKi8KKwl1bnNpZ25lZCBuX3Jlc2Vy dmVkX2JpbnMgPSBuaGJpbnMgPCBTQ19OQklOUyA/IFNDX05CSU5TIDogbmhiaW5zOworCW1lbXNl dCh0Y2FjaGUtPmJpbnMsIDAsIHNpemVvZihjYWNoZV9iaW5fdCkgKiBuX3Jlc2VydmVkX2JpbnMp OworCisJc2l6ZV90IGN1cl9vZmZzZXQgPSAwOworCWNhY2hlX2Jpbl9wcmVpbmNyZW1lbnQodGNh Y2hlX2Jpbl9pbmZvLCBuaGJpbnMsIG1lbSwKKwkgICAgJmN1cl9vZmZzZXQpOworCWZvciAodW5z aWduZWQgaSA9IDA7IGkgPCBuaGJpbnM7IGkrKykgeworCQlpZiAoaSA8IFNDX05CSU5TKSB7CisJ CQl0Y2FjaGVfc2xvdy0+bGdfZmlsbF9kaXZbaV0gPSAxOworCQkJdGNhY2hlX3Nsb3ctPmJpbl9y ZWZpbGxlZFtpXSA9IGZhbHNlOworCQkJdGNhY2hlX3Nsb3ctPmJpbl9mbHVzaF9kZWxheV9pdGVt c1tpXQorCQkJICAgID0gdGNhY2hlX2djX2l0ZW1fZGVsYXlfY29tcHV0ZShpKTsKKwkJfQorCQlj YWNoZV9iaW5fdCAqY2FjaGVfYmluID0gJnRjYWNoZS0+Ymluc1tpXTsKKwkJY2FjaGVfYmluX2lu aXQoY2FjaGVfYmluLCAmdGNhY2hlX2Jpbl9pbmZvW2ldLCBtZW0sCisJCSAgICAmY3VyX29mZnNl dCk7CisJfQorCS8qCisJICogRm9yIHNtYWxsIHNpemUgY2xhc3NlcyBiZXlvbmQgdGNhY2hlX21h eGNsYXNzIChpLmUuIG5oYmlucyA8IE5CSU5TKSwKKwkgKiB0aGVpciBjYWNoZSBiaW5zIGFyZSBp bml0aWFsaXplZCB0byBhIHN0YXRlIHRvIHNhZmVseSBhbmQgZWZmaWNpZW50bHkKKwkgKiBmYWls IGFsbCBmYXN0cGF0aCBhbGxvYyAvIGZyZWUsIHNvIHRoYXQgbm8gYWRkaXRpb25hbCBjaGVjayBh cm91bmQKKwkgKiBuaGJpbnMgaXMgbmVlZGVkIG9uIGZhc3RwYXRoLgorCSAqLworCWZvciAodW5z aWduZWQgaSA9IG5oYmluczsgaSA8IFNDX05CSU5TOyBpKyspIHsKKwkJLyogRGlzYWJsZWQgc21h bGwgYmlucy4gKi8KKwkJY2FjaGVfYmluX3QgKmNhY2hlX2JpbiA9ICZ0Y2FjaGUtPmJpbnNbaV07 CisJCXZvaWQgKmZha2Vfc3RhY2sgPSBtZW07CisJCXNpemVfdCBmYWtlX29mZnNldCA9IDA7CisK KwkJY2FjaGVfYmluX2luaXQoY2FjaGVfYmluLCAmdGNhY2hlX2Jpbl9pbmZvW2ldLCBmYWtlX3N0 YWNrLAorCQkgICAgJmZha2Vfb2Zmc2V0KTsKKwkJYXNzZXJ0KHRjYWNoZV9zbWFsbF9iaW5fZGlz YWJsZWQoaSwgY2FjaGVfYmluKSk7CisJfQorCisJY2FjaGVfYmluX3Bvc3RpbmNyZW1lbnQodGNh Y2hlX2Jpbl9pbmZvLCBuaGJpbnMsIG1lbSwKKwkgICAgJmN1cl9vZmZzZXQpOworCS8qIFNhbml0 eSBjaGVjayB0aGF0IHRoZSB3aG9sZSBzdGFjayBpcyB1c2VkLiAqLworCWFzc2VydChjdXJfb2Zm c2V0ID09IHRjYWNoZV9iaW5fYWxsb2Nfc2l6ZSk7Cit9CisKKy8qIEluaXRpYWxpemUgYXV0byB0 Y2FjaGUgKGVtYmVkZGVkIGluIFRTRCkuICovCitib29sCit0c2RfdGNhY2hlX2RhdGFfaW5pdCh0 c2RfdCAqdHNkKSB7CisJdGNhY2hlX3Nsb3dfdCAqdGNhY2hlX3Nsb3cgPSB0c2RfdGNhY2hlX3Ns b3dwX2dldF91bnNhZmUodHNkKTsKKwl0Y2FjaGVfdCAqdGNhY2hlID0gdHNkX3RjYWNoZXBfZ2V0 X3Vuc2FmZSh0c2QpOworCisJYXNzZXJ0KGNhY2hlX2Jpbl9zdGlsbF96ZXJvX2luaXRpYWxpemVk KCZ0Y2FjaGUtPmJpbnNbMF0pKTsKKwlzaXplX3QgYWxpZ25tZW50ID0gdGNhY2hlX2Jpbl9hbGxv Y19hbGlnbm1lbnQ7CisJc2l6ZV90IHNpemUgPSBzel9zYTJ1KHRjYWNoZV9iaW5fYWxsb2Nfc2l6 ZSwgYWxpZ25tZW50KTsKKworCXZvaWQgKm1lbSA9IGlwYWxsb2N6dG0odHNkX3RzZG4odHNkKSwg c2l6ZSwgYWxpZ25tZW50LCB0cnVlLCBOVUxMLAorCSAgICB0cnVlLCBhcmVuYV9nZXQoVFNETl9O VUxMLCAwLCB0cnVlKSk7CisJaWYgKG1lbSA9PSBOVUxMKSB7CisJCXJldHVybiB0cnVlOworCX0K KworCXRjYWNoZV9pbml0KHRzZCwgdGNhY2hlX3Nsb3csIHRjYWNoZSwgbWVtKTsKKwkvKgorCSAq IEluaXRpYWxpemF0aW9uIGlzIGEgYml0IHRyaWNreSBoZXJlLiAgQWZ0ZXIgbWFsbG9jIGluaXQg aXMgZG9uZSwgYWxsCisJICogdGhyZWFkcyBjYW4gcmVseSBvbiBhcmVuYV9jaG9vc2UgYW5kIGFz c29jaWF0ZSB0Y2FjaGUgYWNjb3JkaW5nbHkuCisJICogSG93ZXZlciwgdGhlIHRocmVhZCB0aGF0 IGRvZXMgYWN0dWFsIG1hbGxvYyBib290c3RyYXBwaW5nIHJlbGllcyBvbgorCSAqIGZ1bmN0aW9u YWwgdHNkLCBhbmQgaXQgY2FuIG9ubHkgcmVseSBvbiBhMC4gIEluIHRoYXQgY2FzZSwgd2UKKwkg KiBhc3NvY2lhdGUgaXRzIHRjYWNoZSB0byBhMCB0ZW1wb3JhcmlseSwgYW5kIGxhdGVyIG9uCisJ ICogYXJlbmFfY2hvb3NlX2hhcmQoKSB3aWxsIHJlLWFzc29jaWF0ZSBwcm9wZXJseS4KKwkgKi8K Kwl0Y2FjaGVfc2xvdy0+YXJlbmEgPSBOVUxMOworCWFyZW5hX3QgKmFyZW5hOworCWlmICghbWFs bG9jX2luaXRpYWxpemVkKCkpIHsKKwkJLyogSWYgaW4gaW5pdGlhbGl6YXRpb24sIGFzc2lnbiB0 byBhMC4gKi8KKwkJYXJlbmEgPSBhcmVuYV9nZXQodHNkX3RzZG4odHNkKSwgMCwgZmFsc2UpOwor CQl0Y2FjaGVfYXJlbmFfYXNzb2NpYXRlKHRzZF90c2RuKHRzZCksIHRjYWNoZV9zbG93LCB0Y2Fj aGUsCisJCSAgICBhcmVuYSk7CisJfSBlbHNlIHsKKwkJYXJlbmEgPSBhcmVuYV9jaG9vc2UodHNk LCBOVUxMKTsKKwkJLyogVGhpcyBtYXkgaGFwcGVuIGlmIHRocmVhZC50Y2FjaGUuZW5hYmxlZCBp cyB1c2VkLiAqLworCQlpZiAodGNhY2hlX3Nsb3ctPmFyZW5hID09IE5VTEwpIHsKKwkJCXRjYWNo ZV9hcmVuYV9hc3NvY2lhdGUodHNkX3RzZG4odHNkKSwgdGNhY2hlX3Nsb3csCisJCQkgICAgdGNh Y2hlLCBhcmVuYSk7CisJCX0KKwl9CisJYXNzZXJ0KGFyZW5hID09IHRjYWNoZV9zbG93LT5hcmVu YSk7CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKKy8qIENyZWF0ZWQgbWFudWFsIHRjYWNoZSBmb3Ig dGNhY2hlLmNyZWF0ZSBtYWxsY3RsLiAqLwordGNhY2hlX3QgKgordGNhY2hlX2NyZWF0ZV9leHBs aWNpdCh0c2RfdCAqdHNkKSB7CisJLyoKKwkgKiBXZSBwbGFjZSB0aGUgY2FjaGUgYmluIHN0YWNr cywgdGhlbiB0aGUgdGNhY2hlX3QsIHRoZW4gYSBwb2ludGVyIHRvCisJICogdGhlIGJlZ2lubmlu ZyBvZiB0aGUgd2hvbGUgYWxsb2NhdGlvbiAoZm9yIGZyZWVpbmcpLiAgVGhlIG1ha2VzIHN1cmUK KwkgKiB0aGUgY2FjaGUgYmlucyBoYXZlIHRoZSByZXF1ZXN0ZWQgYWxpZ25tZW50LgorCSAqLwor CXNpemVfdCBzaXplID0gdGNhY2hlX2Jpbl9hbGxvY19zaXplICsgc2l6ZW9mKHRjYWNoZV90KQor CSAgICArIHNpemVvZih0Y2FjaGVfc2xvd190KTsKKwkvKiBOYXR1cmFsbHkgYWxpZ24gdGhlIHBv aW50ZXIgc3RhY2tzLiAqLworCXNpemUgPSBQVFJfQ0VJTElORyhzaXplKTsKKwlzaXplID0gc3pf c2EydShzaXplLCB0Y2FjaGVfYmluX2FsbG9jX2FsaWdubWVudCk7CisKKwl2b2lkICptZW0gPSBp cGFsbG9jenRtKHRzZF90c2RuKHRzZCksIHNpemUsIHRjYWNoZV9iaW5fYWxsb2NfYWxpZ25tZW50 LAorCSAgICB0cnVlLCBOVUxMLCB0cnVlLCBhcmVuYV9nZXQoVFNETl9OVUxMLCAwLCB0cnVlKSk7 CisJaWYgKG1lbSA9PSBOVUxMKSB7CisJCXJldHVybiBOVUxMOworCX0KKwl0Y2FjaGVfdCAqdGNh Y2hlID0gKHZvaWQgKikoKHVpbnRwdHJfdCltZW0gKyB0Y2FjaGVfYmluX2FsbG9jX3NpemUpOwor CXRjYWNoZV9zbG93X3QgKnRjYWNoZV9zbG93ID0KKwkgICAgKHZvaWQgKikoKHVpbnRwdHJfdClt ZW0gKyB0Y2FjaGVfYmluX2FsbG9jX3NpemUgKyBzaXplb2YodGNhY2hlX3QpKTsKKwl0Y2FjaGVf aW5pdCh0c2QsIHRjYWNoZV9zbG93LCB0Y2FjaGUsIG1lbSk7CisKKwl0Y2FjaGVfYXJlbmFfYXNz b2NpYXRlKHRzZF90c2RuKHRzZCksIHRjYWNoZV9zbG93LCB0Y2FjaGUsCisJICAgIGFyZW5hX2lj aG9vc2UodHNkLCBOVUxMKSk7CisKKwlyZXR1cm4gdGNhY2hlOworfQorCitzdGF0aWMgdm9pZAor dGNhY2hlX2ZsdXNoX2NhY2hlKHRzZF90ICp0c2QsIHRjYWNoZV90ICp0Y2FjaGUpIHsKKwl0Y2Fj aGVfc2xvd190ICp0Y2FjaGVfc2xvdyA9IHRjYWNoZS0+dGNhY2hlX3Nsb3c7CisJYXNzZXJ0KHRj YWNoZV9zbG93LT5hcmVuYSAhPSBOVUxMKTsKKworCWZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBu aGJpbnM7IGkrKykgeworCQljYWNoZV9iaW5fdCAqY2FjaGVfYmluID0gJnRjYWNoZS0+Ymluc1tp XTsKKwkJaWYgKGkgPCBTQ19OQklOUykgeworCQkJdGNhY2hlX2Jpbl9mbHVzaF9zbWFsbCh0c2Qs IHRjYWNoZSwgY2FjaGVfYmluLCBpLCAwKTsKKwkJfSBlbHNlIHsKKwkJCXRjYWNoZV9iaW5fZmx1 c2hfbGFyZ2UodHNkLCB0Y2FjaGUsIGNhY2hlX2JpbiwgaSwgMCk7CisJCX0KKwkJaWYgKGNvbmZp Z19zdGF0cykgeworCQkJYXNzZXJ0KGNhY2hlX2Jpbi0+dHN0YXRzLm5yZXF1ZXN0cyA9PSAwKTsK KwkJfQorCX0KK30KKwordm9pZAordGNhY2hlX2ZsdXNoKHRzZF90ICp0c2QpIHsKKwlhc3NlcnQo dGNhY2hlX2F2YWlsYWJsZSh0c2QpKTsKKwl0Y2FjaGVfZmx1c2hfY2FjaGUodHNkLCB0c2RfdGNh Y2hlcF9nZXQodHNkKSk7Cit9CisKK3N0YXRpYyB2b2lkCit0Y2FjaGVfZGVzdHJveSh0c2RfdCAq dHNkLCB0Y2FjaGVfdCAqdGNhY2hlLCBib29sIHRzZF90Y2FjaGUpIHsKKwl0Y2FjaGVfc2xvd190 ICp0Y2FjaGVfc2xvdyA9IHRjYWNoZS0+dGNhY2hlX3Nsb3c7CisJdGNhY2hlX2ZsdXNoX2NhY2hl KHRzZCwgdGNhY2hlKTsKKwlhcmVuYV90ICphcmVuYSA9IHRjYWNoZV9zbG93LT5hcmVuYTsKKwl0 Y2FjaGVfYXJlbmFfZGlzc29jaWF0ZSh0c2RfdHNkbih0c2QpLCB0Y2FjaGVfc2xvdywgdGNhY2hl KTsKKworCWlmICh0c2RfdGNhY2hlKSB7CisJCWNhY2hlX2Jpbl90ICpjYWNoZV9iaW4gPSAmdGNh Y2hlLT5iaW5zWzBdOworCQljYWNoZV9iaW5fYXNzZXJ0X2VtcHR5KGNhY2hlX2JpbiwgJnRjYWNo ZV9iaW5faW5mb1swXSk7CisJfQorCWlkYWxsb2N0bSh0c2RfdHNkbih0c2QpLCB0Y2FjaGVfc2xv dy0+ZHluX2FsbG9jLCBOVUxMLCBOVUxMLCB0cnVlLAorCSAgICB0cnVlKTsKKworCS8qCisJICog VGhlIGRlYWxsb2NhdGlvbiBhbmQgdGNhY2hlIGZsdXNoIGFib3ZlIG1heSBub3QgdHJpZ2dlciBk ZWNheSBzaW5jZQorCSAqIHdlIGFyZSBvbiB0aGUgdGNhY2hlIHNodXRkb3duIHBhdGggKHBvdGVu dGlhbGx5IHdpdGggbm9uLW5vbWluYWwKKwkgKiB0c2QpLiAgTWFudWFsbHkgdHJpZ2dlciBkZWNh eSB0byBhdm9pZCBwYXRob2xvZ2ljYWwgY2FzZXMuICBBbHNvCisJICogaW5jbHVkZSBhcmVuYSAw IGJlY2F1c2UgdGhlIHRjYWNoZSBhcnJheSBpcyBhbGxvY2F0ZWQgZnJvbSBpdC4KKwkgKi8KKwlh cmVuYV9kZWNheSh0c2RfdHNkbih0c2QpLCBhcmVuYV9nZXQodHNkX3RzZG4odHNkKSwgMCwgZmFs c2UpLAorCSAgICBmYWxzZSwgZmFsc2UpOworCisJaWYgKGFyZW5hX250aHJlYWRzX2dldChhcmVu YSwgZmFsc2UpID09IDAgJiYKKwkgICAgIWJhY2tncm91bmRfdGhyZWFkX2VuYWJsZWQoKSkgewor CQkvKiBGb3JjZSBwdXJnaW5nIHdoZW4gbm8gdGhyZWFkcyBhc3NpZ25lZCB0byB0aGUgYXJlbmEg YW55bW9yZS4gKi8KKwkJYXJlbmFfZGVjYXkodHNkX3RzZG4odHNkKSwgYXJlbmEsCisJCSAgICAv KiBpc19iYWNrZ3JvdW5kX3RocmVhZCAqLyBmYWxzZSwgLyogYWxsICovIHRydWUpOworCX0gZWxz ZSB7CisJCWFyZW5hX2RlY2F5KHRzZF90c2RuKHRzZCksIGFyZW5hLAorCQkgICAgLyogaXNfYmFj a2dyb3VuZF90aHJlYWQgKi8gZmFsc2UsIC8qIGFsbCAqLyBmYWxzZSk7CisJfQorfQorCisvKiBG b3IgYXV0byB0Y2FjaGUgKGVtYmVkZGVkIGluIFRTRCkgb25seS4gKi8KK3ZvaWQKK3RjYWNoZV9j bGVhbnVwKHRzZF90ICp0c2QpIHsKKwl0Y2FjaGVfdCAqdGNhY2hlID0gdHNkX3RjYWNoZXBfZ2V0 KHRzZCk7CisJaWYgKCF0Y2FjaGVfYXZhaWxhYmxlKHRzZCkpIHsKKwkJYXNzZXJ0KHRzZF90Y2Fj aGVfZW5hYmxlZF9nZXQodHNkKSA9PSBmYWxzZSk7CisJCWFzc2VydChjYWNoZV9iaW5fc3RpbGxf emVyb19pbml0aWFsaXplZCgmdGNhY2hlLT5iaW5zWzBdKSk7CisJCXJldHVybjsKKwl9CisJYXNz ZXJ0KHRzZF90Y2FjaGVfZW5hYmxlZF9nZXQodHNkKSk7CisJYXNzZXJ0KCFjYWNoZV9iaW5fc3Rp bGxfemVyb19pbml0aWFsaXplZCgmdGNhY2hlLT5iaW5zWzBdKSk7CisKKwl0Y2FjaGVfZGVzdHJv eSh0c2QsIHRjYWNoZSwgdHJ1ZSk7CisJaWYgKGNvbmZpZ19kZWJ1ZykgeworCQkvKgorCQkgKiBG b3IgZGVidWcgdGVzdGluZyBvbmx5LCB3ZSB3YW50IHRvIHByZXRlbmQgd2UncmUgc3RpbGwgaW4g dGhlCisJCSAqIHplcm8taW5pdGlhbGl6ZWQgc3RhdGUuCisJCSAqLworCQltZW1zZXQodGNhY2hl LT5iaW5zLCAwLCBzaXplb2YoY2FjaGVfYmluX3QpICogbmhiaW5zKTsKKwl9Cit9CisKK3ZvaWQK K3RjYWNoZV9zdGF0c19tZXJnZSh0c2RuX3QgKnRzZG4sIHRjYWNoZV90ICp0Y2FjaGUsIGFyZW5h X3QgKmFyZW5hKSB7CisJY2Fzc2VydChjb25maWdfc3RhdHMpOworCisJLyogTWVyZ2UgYW5kIHJl c2V0IHRjYWNoZSBzdGF0cy4gKi8KKwlmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbmhiaW5zOyBp KyspIHsKKwkJY2FjaGVfYmluX3QgKmNhY2hlX2JpbiA9ICZ0Y2FjaGUtPmJpbnNbaV07CisJCWlm IChpIDwgU0NfTkJJTlMpIHsKKwkJCWJpbl90ICpiaW4gPSBhcmVuYV9iaW5fY2hvb3NlKHRzZG4s IGFyZW5hLCBpLCBOVUxMKTsKKwkJCW1hbGxvY19tdXRleF9sb2NrKHRzZG4sICZiaW4tPmxvY2sp OworCQkJYmluLT5zdGF0cy5ucmVxdWVzdHMgKz0gY2FjaGVfYmluLT50c3RhdHMubnJlcXVlc3Rz OworCQkJbWFsbG9jX211dGV4X3VubG9jayh0c2RuLCAmYmluLT5sb2NrKTsKKwkJfSBlbHNlIHsK KwkJCWFyZW5hX3N0YXRzX2xhcmdlX2ZsdXNoX25yZXF1ZXN0c19hZGQodHNkbiwKKwkJCSAgICAm YXJlbmEtPnN0YXRzLCBpLCBjYWNoZV9iaW4tPnRzdGF0cy5ucmVxdWVzdHMpOworCQl9CisJCWNh Y2hlX2Jpbi0+dHN0YXRzLm5yZXF1ZXN0cyA9IDA7CisJfQorfQorCitzdGF0aWMgYm9vbAordGNh Y2hlc19jcmVhdGVfcHJlcCh0c2RfdCAqdHNkLCBiYXNlX3QgKmJhc2UpIHsKKwlib29sIGVycjsK KworCW1hbGxvY19tdXRleF9hc3NlcnRfb3duZXIodHNkX3RzZG4odHNkKSwgJnRjYWNoZXNfbXR4 KTsKKworCWlmICh0Y2FjaGVzID09IE5VTEwpIHsKKwkJdGNhY2hlcyA9IGJhc2VfYWxsb2ModHNk X3RzZG4odHNkKSwgYmFzZSwKKwkJICAgIHNpemVvZih0Y2FjaGVfdCAqKSAqIChNQUxMT0NYX1RD QUNIRV9NQVgrMSksIENBQ0hFTElORSk7CisJCWlmICh0Y2FjaGVzID09IE5VTEwpIHsKKwkJCWVy ciA9IHRydWU7CisJCQlnb3RvIGxhYmVsX3JldHVybjsKKwkJfQorCX0KKworCWlmICh0Y2FjaGVz X2F2YWlsID09IE5VTEwgJiYgdGNhY2hlc19wYXN0ID4gTUFMTE9DWF9UQ0FDSEVfTUFYKSB7CisJ CWVyciA9IHRydWU7CisJCWdvdG8gbGFiZWxfcmV0dXJuOworCX0KKworCWVyciA9IGZhbHNlOwor bGFiZWxfcmV0dXJuOgorCXJldHVybiBlcnI7Cit9CisKK2Jvb2wKK3RjYWNoZXNfY3JlYXRlKHRz ZF90ICp0c2QsIGJhc2VfdCAqYmFzZSwgdW5zaWduZWQgKnJfaW5kKSB7CisJd2l0bmVzc19hc3Nl cnRfZGVwdGgodHNkbl93aXRuZXNzX3RzZHBfZ2V0KHRzZF90c2RuKHRzZCkpLCAwKTsKKworCWJv b2wgZXJyOworCisJbWFsbG9jX211dGV4X2xvY2sodHNkX3RzZG4odHNkKSwgJnRjYWNoZXNfbXR4 KTsKKworCWlmICh0Y2FjaGVzX2NyZWF0ZV9wcmVwKHRzZCwgYmFzZSkpIHsKKwkJZXJyID0gdHJ1 ZTsKKwkJZ290byBsYWJlbF9yZXR1cm47CisJfQorCisJdGNhY2hlX3QgKnRjYWNoZSA9IHRjYWNo ZV9jcmVhdGVfZXhwbGljaXQodHNkKTsKKwlpZiAodGNhY2hlID09IE5VTEwpIHsKKwkJZXJyID0g dHJ1ZTsKKwkJZ290byBsYWJlbF9yZXR1cm47CisJfQorCisJdGNhY2hlc190ICplbG07CisJaWYg KHRjYWNoZXNfYXZhaWwgIT0gTlVMTCkgeworCQllbG0gPSB0Y2FjaGVzX2F2YWlsOworCQl0Y2Fj aGVzX2F2YWlsID0gdGNhY2hlc19hdmFpbC0+bmV4dDsKKwkJZWxtLT50Y2FjaGUgPSB0Y2FjaGU7 CisJCSpyX2luZCA9ICh1bnNpZ25lZCkoZWxtIC0gdGNhY2hlcyk7CisJfSBlbHNlIHsKKwkJZWxt ID0gJnRjYWNoZXNbdGNhY2hlc19wYXN0XTsKKwkJZWxtLT50Y2FjaGUgPSB0Y2FjaGU7CisJCSpy X2luZCA9IHRjYWNoZXNfcGFzdDsKKwkJdGNhY2hlc19wYXN0Kys7CisJfQorCisJZXJyID0gZmFs c2U7CitsYWJlbF9yZXR1cm46CisJbWFsbG9jX211dGV4X3VubG9jayh0c2RfdHNkbih0c2QpLCAm dGNhY2hlc19tdHgpOworCXdpdG5lc3NfYXNzZXJ0X2RlcHRoKHRzZG5fd2l0bmVzc190c2RwX2dl dCh0c2RfdHNkbih0c2QpKSwgMCk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHRjYWNoZV90 ICoKK3RjYWNoZXNfZWxtX3JlbW92ZSh0c2RfdCAqdHNkLCB0Y2FjaGVzX3QgKmVsbSwgYm9vbCBh bGxvd19yZWluaXQpIHsKKwltYWxsb2NfbXV0ZXhfYXNzZXJ0X293bmVyKHRzZF90c2RuKHRzZCks ICZ0Y2FjaGVzX210eCk7CisKKwlpZiAoZWxtLT50Y2FjaGUgPT0gTlVMTCkgeworCQlyZXR1cm4g TlVMTDsKKwl9CisJdGNhY2hlX3QgKnRjYWNoZSA9IGVsbS0+dGNhY2hlOworCWlmIChhbGxvd19y ZWluaXQpIHsKKwkJZWxtLT50Y2FjaGUgPSBUQ0FDSEVTX0VMTV9ORUVEX1JFSU5JVDsKKwl9IGVs c2UgeworCQllbG0tPnRjYWNoZSA9IE5VTEw7CisJfQorCisJaWYgKHRjYWNoZSA9PSBUQ0FDSEVT X0VMTV9ORUVEX1JFSU5JVCkgeworCQlyZXR1cm4gTlVMTDsKKwl9CisJcmV0dXJuIHRjYWNoZTsK K30KKwordm9pZAordGNhY2hlc19mbHVzaCh0c2RfdCAqdHNkLCB1bnNpZ25lZCBpbmQpIHsKKwlt YWxsb2NfbXV0ZXhfbG9jayh0c2RfdHNkbih0c2QpLCAmdGNhY2hlc19tdHgpOworCXRjYWNoZV90 ICp0Y2FjaGUgPSB0Y2FjaGVzX2VsbV9yZW1vdmUodHNkLCAmdGNhY2hlc1tpbmRdLCB0cnVlKTsK KwltYWxsb2NfbXV0ZXhfdW5sb2NrKHRzZF90c2RuKHRzZCksICZ0Y2FjaGVzX210eCk7CisJaWYg KHRjYWNoZSAhPSBOVUxMKSB7CisJCS8qIERlc3Ryb3kgdGhlIHRjYWNoZTsgcmVjcmVhdGUgaW4g dGNhY2hlc19nZXQoKSBpZiBuZWVkZWQuICovCisJCXRjYWNoZV9kZXN0cm95KHRzZCwgdGNhY2hl LCBmYWxzZSk7CisJfQorfQorCit2b2lkCit0Y2FjaGVzX2Rlc3Ryb3kodHNkX3QgKnRzZCwgdW5z aWduZWQgaW5kKSB7CisJbWFsbG9jX211dGV4X2xvY2sodHNkX3RzZG4odHNkKSwgJnRjYWNoZXNf bXR4KTsKKwl0Y2FjaGVzX3QgKmVsbSA9ICZ0Y2FjaGVzW2luZF07CisJdGNhY2hlX3QgKnRjYWNo ZSA9IHRjYWNoZXNfZWxtX3JlbW92ZSh0c2QsIGVsbSwgZmFsc2UpOworCWVsbS0+bmV4dCA9IHRj YWNoZXNfYXZhaWw7CisJdGNhY2hlc19hdmFpbCA9IGVsbTsKKwltYWxsb2NfbXV0ZXhfdW5sb2Nr KHRzZF90c2RuKHRzZCksICZ0Y2FjaGVzX210eCk7CisJaWYgKHRjYWNoZSAhPSBOVUxMKSB7CisJ CXRjYWNoZV9kZXN0cm95KHRzZCwgdGNhY2hlLCBmYWxzZSk7CisJfQorfQorCitzdGF0aWMgdW5z aWduZWQKK3RjYWNoZV9uY2FjaGVkX21heF9jb21wdXRlKHN6aW5kX3Qgc3ppbmQpIHsKKwlpZiAo c3ppbmQgPj0gU0NfTkJJTlMpIHsKKwkJYXNzZXJ0KHN6aW5kIDwgbmhiaW5zKTsKKwkJcmV0dXJu IG9wdF90Y2FjaGVfbnNsb3RzX2xhcmdlOworCX0KKwl1bnNpZ25lZCBzbGFiX25yZWdzID0gYmlu X2luZm9zW3N6aW5kXS5ucmVnczsKKworCS8qIFdlIG1heSBtb2RpZnkgdGhlc2UgdmFsdWVzOyBz dGFydCB3aXRoIHRoZSBvcHQgdmVyc2lvbnMuICovCisJdW5zaWduZWQgbnNsb3RzX3NtYWxsX21p biA9IG9wdF90Y2FjaGVfbnNsb3RzX3NtYWxsX21pbjsKKwl1bnNpZ25lZCBuc2xvdHNfc21hbGxf bWF4ID0gb3B0X3RjYWNoZV9uc2xvdHNfc21hbGxfbWF4OworCisJLyoKKwkgKiBDbGFtcCB2YWx1 ZXMgdG8gbWVldCBvdXIgY29uc3RyYWludHMgLS0gZXZlbiwgbm9uemVybywgbWluIDwgbWF4LCBh bmQKKwkgKiBzdWl0YWJsZSBmb3IgYSBjYWNoZSBiaW4gc2l6ZS4KKwkgKi8KKwlpZiAob3B0X3Rj YWNoZV9uc2xvdHNfc21hbGxfbWF4ID4gQ0FDSEVfQklOX05DQUNIRURfTUFYKSB7CisJCW5zbG90 c19zbWFsbF9tYXggPSBDQUNIRV9CSU5fTkNBQ0hFRF9NQVg7CisJfQorCWlmIChuc2xvdHNfc21h bGxfbWluICUgMiAhPSAwKSB7CisJCW5zbG90c19zbWFsbF9taW4rKzsKKwl9CisJaWYgKG5zbG90 c19zbWFsbF9tYXggJSAyICE9IDApIHsKKwkJbnNsb3RzX3NtYWxsX21heC0tOworCX0KKwlpZiAo bnNsb3RzX3NtYWxsX21pbiA8IDIpIHsKKwkJbnNsb3RzX3NtYWxsX21pbiA9IDI7CisJfQorCWlm IChuc2xvdHNfc21hbGxfbWF4IDwgMikgeworCQluc2xvdHNfc21hbGxfbWF4ID0gMjsKKwl9CisJ aWYgKG5zbG90c19zbWFsbF9taW4gPiBuc2xvdHNfc21hbGxfbWF4KSB7CisJCW5zbG90c19zbWFs bF9taW4gPSBuc2xvdHNfc21hbGxfbWF4OworCX0KKworCXVuc2lnbmVkIGNhbmRpZGF0ZTsKKwlp ZiAob3B0X2xnX3RjYWNoZV9uc2xvdHNfbXVsIDwgMCkgeworCQljYW5kaWRhdGUgPSBzbGFiX25y ZWdzID4+ICgtb3B0X2xnX3RjYWNoZV9uc2xvdHNfbXVsKTsKKwl9IGVsc2UgeworCQljYW5kaWRh dGUgPSBzbGFiX25yZWdzIDw8IG9wdF9sZ190Y2FjaGVfbnNsb3RzX211bDsKKwl9CisJaWYgKGNh bmRpZGF0ZSAlIDIgIT0gMCkgeworCQkvKgorCQkgKiBXZSBuZWVkIHRoZSBjYW5kaWRhdGUgc2l6 ZSB0byBiZSBldmVuIC0tIHdlIGFzc3VtZSB0aGF0IHdlCisJCSAqIGNhbiBkaXZpZGUgYnkgdHdv IGFuZCBnZXQgYSBwb3NpdGl2ZSBudW1iZXIgKGUuZy4gd2hlbgorCQkgKiBmbHVzaGluZykuCisJ CSAqLworCQkrK2NhbmRpZGF0ZTsKKwl9CisJaWYgKGNhbmRpZGF0ZSA8PSBuc2xvdHNfc21hbGxf bWluKSB7CisJCXJldHVybiBuc2xvdHNfc21hbGxfbWluOworCX0gZWxzZSBpZiAoY2FuZGlkYXRl IDw9IG5zbG90c19zbWFsbF9tYXgpIHsKKwkJcmV0dXJuIGNhbmRpZGF0ZTsKKwl9IGVsc2Ugewor CQlyZXR1cm4gbnNsb3RzX3NtYWxsX21heDsKKwl9Cit9CisKK2Jvb2wKK3RjYWNoZV9ib290KHRz ZG5fdCAqdHNkbiwgYmFzZV90ICpiYXNlKSB7CisJdGNhY2hlX21heGNsYXNzID0gc3pfczJ1KG9w dF90Y2FjaGVfbWF4KTsKKwlhc3NlcnQodGNhY2hlX21heGNsYXNzIDw9IFRDQUNIRV9NQVhDTEFT U19MSU1JVCk7CisJbmhiaW5zID0gc3pfc2l6ZTJpbmRleCh0Y2FjaGVfbWF4Y2xhc3MpICsgMTsK KworCWlmIChtYWxsb2NfbXV0ZXhfaW5pdCgmdGNhY2hlc19tdHgsICJ0Y2FjaGVzIiwgV0lUTkVT U19SQU5LX1RDQUNIRVMsCisJICAgIG1hbGxvY19tdXRleF9yYW5rX2V4Y2x1c2l2ZSkpIHsKKwkJ cmV0dXJuIHRydWU7CisJfQorCisJLyogSW5pdGlhbGl6ZSB0Y2FjaGVfYmluX2luZm8uICBTZWUg Y29tbWVudHMgaW4gdGNhY2hlX2luaXQoKS4gKi8KKwl1bnNpZ25lZCBuX3Jlc2VydmVkX2JpbnMg PSBuaGJpbnMgPCBTQ19OQklOUyA/IFNDX05CSU5TIDogbmhiaW5zOworCXNpemVfdCBzaXplID0g bl9yZXNlcnZlZF9iaW5zICogc2l6ZW9mKGNhY2hlX2Jpbl9pbmZvX3QpOworCXRjYWNoZV9iaW5f aW5mbyA9IChjYWNoZV9iaW5faW5mb190ICopYmFzZV9hbGxvYyh0c2RuLCBiYXNlLCBzaXplLAor CSAgICBDQUNIRUxJTkUpOworCWlmICh0Y2FjaGVfYmluX2luZm8gPT0gTlVMTCkgeworCQlyZXR1 cm4gdHJ1ZTsKKwl9CisKKwlmb3IgKHN6aW5kX3QgaSA9IDA7IGkgPCBuaGJpbnM7IGkrKykgewor CQl1bnNpZ25lZCBuY2FjaGVkX21heCA9IHRjYWNoZV9uY2FjaGVkX21heF9jb21wdXRlKGkpOwor CQljYWNoZV9iaW5faW5mb19pbml0KCZ0Y2FjaGVfYmluX2luZm9baV0sIG5jYWNoZWRfbWF4KTsK Kwl9CisJZm9yIChzemluZF90IGkgPSBuaGJpbnM7IGkgPCBTQ19OQklOUzsgaSsrKSB7CisJCS8q IERpc2FibGVkIHNtYWxsIGJpbnMuICovCisJCWNhY2hlX2Jpbl9pbmZvX2luaXQoJnRjYWNoZV9i aW5faW5mb1tpXSwgMCk7CisJCWFzc2VydCh0Y2FjaGVfc21hbGxfYmluX2Rpc2FibGVkKGksIE5V TEwpKTsKKwl9CisKKwljYWNoZV9iaW5faW5mb19jb21wdXRlX2FsbG9jKHRjYWNoZV9iaW5faW5m bywgbmhiaW5zLAorCSAgICAmdGNhY2hlX2Jpbl9hbGxvY19zaXplLCAmdGNhY2hlX2Jpbl9hbGxv Y19hbGlnbm1lbnQpOworCisJcmV0dXJuIGZhbHNlOworfQorCit2b2lkCit0Y2FjaGVfcHJlZm9y ayh0c2RuX3QgKnRzZG4pIHsKKwltYWxsb2NfbXV0ZXhfcHJlZm9yayh0c2RuLCAmdGNhY2hlc19t dHgpOworfQorCit2b2lkCit0Y2FjaGVfcG9zdGZvcmtfcGFyZW50KHRzZG5fdCAqdHNkbikgewor CW1hbGxvY19tdXRleF9wb3N0Zm9ya19wYXJlbnQodHNkbiwgJnRjYWNoZXNfbXR4KTsKK30KKwor dm9pZAordGNhY2hlX3Bvc3Rmb3JrX2NoaWxkKHRzZG5fdCAqdHNkbikgeworCW1hbGxvY19tdXRl eF9wb3N0Zm9ya19jaGlsZCh0c2RuLCAmdGNhY2hlc19tdHgpOworfQorCit2b2lkIHRjYWNoZV9h c3NlcnRfaW5pdGlhbGl6ZWQodGNhY2hlX3QgKnRjYWNoZSkgeworCWFzc2VydCghY2FjaGVfYmlu X3N0aWxsX3plcm9faW5pdGlhbGl6ZWQoJnRjYWNoZS0+Ymluc1swXSkpOworfQoKZGlmZiAtLWdp dCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3NyYy90ZXN0X2hvb2tz LmMgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9zcmMvdGVzdF9ob29r cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjZTAwZDkKLS0tIC9kZXYv bnVsbAorKysgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9zcmMvdGVz dF9ob29rcy5jCkBAIC0wLDAgKzEsMTIgQEAKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9q ZW1hbGxvY19wcmVhbWJsZS5oIgorCisvKgorICogVGhlIGhvb2tzIGFyZSBhIGxpdHRsZSBiaXQg c2NyZXd5IC0tIHRoZXkncmUgbm90IGdlbnVpbmVseSBleHBvcnRlZCBpbiB0aGUKKyAqIHNlbnNl IHRoYXQgd2Ugd2FudCB0aGVtIGF2YWlsYWJsZSB0byBlbmQtdXNlcnMsIGJ1dCB3ZSBkbyB3YW50 IHRoZW0gdmlzaWJsZQorICogZnJvbSBvdXRzaWRlIHRoZSBnZW5lcmF0ZWQgbGlicmFyeSwgc28g dGhhdCB3ZSBjYW4gdXNlIHRoZW0gaW4gdGVzdCBjb2RlLgorICovCitKRU1BTExPQ19FWFBPUlQK K3ZvaWQgKCp0ZXN0X2hvb2tzX2FyZW5hX25ld19ob29rKSgpID0gTlVMTDsKKworSkVNQUxMT0Nf RVhQT1JUCit2b2lkICgqdGVzdF9ob29rc19saWJjX2hvb2spKCkgPSBOVUxMOwoKZGlmZiAtLWdp dCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3NyYy90aHJlYWRfZXZl bnQuYyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3NyYy90aHJlYWRf ZXZlbnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zN2ViNTgyCi0tLSAv ZGV2L251bGwKKysrIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvc3Jj L3RocmVhZF9ldmVudC5jCkBAIC0wLDAgKzEsMzQzIEBACisjaW5jbHVkZSAiamVtYWxsb2MvaW50 ZXJuYWwvamVtYWxsb2NfcHJlYW1ibGUuaCIKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9q ZW1hbGxvY19pbnRlcm5hbF9pbmNsdWRlcy5oIgorCisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJu YWwvdGhyZWFkX2V2ZW50LmgiCisKKy8qCisgKiBTaWduYXR1cmVzIGZvciBldmVudCBzcGVjaWZp YyBmdW5jdGlvbnMuICBUaGVzZSBmdW5jdGlvbnMgc2hvdWxkIGJlIGRlZmluZWQKKyAqIGJ5IHRo ZSBtb2R1bGVzIG93bmluZyBlYWNoIGV2ZW50LiAgVGhlIHNpZ25hdHVyZXMgaGVyZSB2ZXJpZnkg dGhhdCB0aGUKKyAqIGRlZmluaXRpb25zIGZvbGxvdyB0aGUgcmlnaHQgZm9ybWF0LgorICoKKyAq IFRoZSBmaXJzdCB0d28gYXJlIGZ1bmN0aW9ucyBjb21wdXRpbmcgbmV3IC8gcG9zdHBvbmVkIGV2 ZW50IHdhaXQgdGltZS4gIE5ldworICogZXZlbnQgd2FpdCB0aW1lIGlzIHRoZSB0aW1lIHRpbGwg dGhlIG5leHQgZXZlbnQgaWYgYW4gZXZlbnQgaXMgY3VycmVudGx5CisgKiBiZWluZyB0cmlnZ2Vy ZWQ7IHBvc3Rwb25lZCBldmVudCB3YWl0IHRpbWUgaXMgdGhlIHRpbWUgdGlsbCB0aGUgbmV4dCBl dmVudAorICogaWYgYW4gZXZlbnQgc2hvdWxkIGJlIHRyaWdnZXJlZCBidXQgbmVlZHMgdG8gYmUg cG9zdHBvbmVkLCBlLmcuIHdoZW4gdGhlIFRTRAorICogaXMgbm90IG5vbWluYWwgb3IgZHVyaW5n IHJlZW50cmFuY3kuCisgKgorICogVGhlIHRoaXJkIGlzIHRoZSBldmVudCBoYW5kbGVyIGZ1bmN0 aW9uLCB3aGljaCBpcyBjYWxsZWQgd2hlbmV2ZXIgYW4gZXZlbnQKKyAqIGlzIHRyaWdnZXJlZC4g IFRoZSBwYXJhbWV0ZXIgaXMgdGhlIGVsYXBzZWQgdGltZSBzaW5jZSB0aGUgbGFzdCB0aW1lIGFu CisgKiBldmVudCBvZiB0aGUgc2FtZSB0eXBlIHdhcyB0cmlnZ2VyZWQuCisgKi8KKyNkZWZpbmUg RShldmVudCwgY29uZGl0aW9uX3VudXNlZCwgaXNfYWxsb2NfZXZlbnRfdW51c2VkKQkJXAordWlu dDY0X3QgZXZlbnQjI19uZXdfZXZlbnRfd2FpdCh0c2RfdCAqdHNkKTsJCQkJXAordWludDY0X3Qg ZXZlbnQjI19wb3N0cG9uZWRfZXZlbnRfd2FpdCh0c2RfdCAqdHNkKTsJCQlcCit2b2lkIGV2ZW50 IyNfZXZlbnRfaGFuZGxlcih0c2RfdCAqdHNkLCB1aW50NjRfdCBlbGFwc2VkKTsKKworSVRFUkFU RV9PVkVSX0FMTF9FVkVOVFMKKyN1bmRlZiBFCisKKy8qIFNpZ25hdHVyZXMgZm9yIGludGVybmFs IGZ1bmN0aW9ucyBmZXRjaGluZyBlbGFwc2VkIHRpbWUuICovCisjZGVmaW5lIEUoZXZlbnQsIGNv bmRpdGlvbl91bnVzZWQsIGlzX2FsbG9jX2V2ZW50X3VudXNlZCkJCVwKK3N0YXRpYyB1aW50NjRf dCBldmVudCMjX2ZldGNoX2VsYXBzZWQodHNkX3QgKnRzZCk7CisKK0lURVJBVEVfT1ZFUl9BTExf RVZFTlRTCisjdW5kZWYgRQorCitzdGF0aWMgdWludDY0X3QKK3RjYWNoZV9nY19mZXRjaF9lbGFw c2VkKHRzZF90ICp0c2QpIHsKKwlyZXR1cm4gVEVfSU5WQUxJRF9FTEFQU0VEOworfQorCitzdGF0 aWMgdWludDY0X3QKK3RjYWNoZV9nY19kYWxsb2NfZmV0Y2hfZWxhcHNlZCh0c2RfdCAqdHNkKSB7 CisJcmV0dXJuIFRFX0lOVkFMSURfRUxBUFNFRDsKK30KKworc3RhdGljIHVpbnQ2NF90Citwcm9m X3NhbXBsZV9mZXRjaF9lbGFwc2VkKHRzZF90ICp0c2QpIHsKKwl1aW50NjRfdCBsYXN0X2V2ZW50 ID0gdGhyZWFkX2FsbG9jYXRlZF9sYXN0X2V2ZW50X2dldCh0c2QpOworCXVpbnQ2NF90IGxhc3Rf c2FtcGxlX2V2ZW50ID0gcHJvZl9zYW1wbGVfbGFzdF9ldmVudF9nZXQodHNkKTsKKwlwcm9mX3Nh bXBsZV9sYXN0X2V2ZW50X3NldCh0c2QsIGxhc3RfZXZlbnQpOworCXJldHVybiBsYXN0X2V2ZW50 IC0gbGFzdF9zYW1wbGVfZXZlbnQ7Cit9CisKK3N0YXRpYyB1aW50NjRfdAorc3RhdHNfaW50ZXJ2 YWxfZmV0Y2hfZWxhcHNlZCh0c2RfdCAqdHNkKSB7CisJdWludDY0X3QgbGFzdF9ldmVudCA9IHRo cmVhZF9hbGxvY2F0ZWRfbGFzdF9ldmVudF9nZXQodHNkKTsKKwl1aW50NjRfdCBsYXN0X3N0YXRz X2V2ZW50ID0gc3RhdHNfaW50ZXJ2YWxfbGFzdF9ldmVudF9nZXQodHNkKTsKKwlzdGF0c19pbnRl cnZhbF9sYXN0X2V2ZW50X3NldCh0c2QsIGxhc3RfZXZlbnQpOworCXJldHVybiBsYXN0X2V2ZW50 IC0gbGFzdF9zdGF0c19ldmVudDsKK30KKworc3RhdGljIHVpbnQ2NF90CitwZWFrX2FsbG9jX2Zl dGNoX2VsYXBzZWQodHNkX3QgKnRzZCkgeworCXJldHVybiBURV9JTlZBTElEX0VMQVBTRUQ7Cit9 CisKK3N0YXRpYyB1aW50NjRfdAorcGVha19kYWxsb2NfZmV0Y2hfZWxhcHNlZCh0c2RfdCAqdHNk KSB7CisJcmV0dXJuIFRFX0lOVkFMSURfRUxBUFNFRDsKK30KKworLyogUGVyIGV2ZW50IGZhY2ls aXRpZXMgZG9uZS4gKi8KKworc3RhdGljIGJvb2wKK3RlX2N0eF9oYXNfYWN0aXZlX2V2ZW50cyh0 ZV9jdHhfdCAqY3R4KSB7CisJYXNzZXJ0KGNvbmZpZ19kZWJ1Zyk7CisjZGVmaW5lIEUoZXZlbnQs IGNvbmRpdGlvbiwgYWxsb2NfZXZlbnQpCQkJICAgICAgIFwKKwlpZiAoY29uZGl0aW9uICYmIGFs bG9jX2V2ZW50ID09IGN0eC0+aXNfYWxsb2MpIHsJICAgICAgIFwKKwkJcmV0dXJuIHRydWU7CQkJ CQkgICAgICAgXAorCX0KKwlJVEVSQVRFX09WRVJfQUxMX0VWRU5UUworI3VuZGVmIEUKKwlyZXR1 cm4gZmFsc2U7Cit9CisKK3N0YXRpYyB1aW50NjRfdAordGVfbmV4dF9ldmVudF9jb21wdXRlKHRz ZF90ICp0c2QsIGJvb2wgaXNfYWxsb2MpIHsKKwl1aW50NjRfdCB3YWl0ID0gVEVfTUFYX1NUQVJU X1dBSVQ7CisjZGVmaW5lIEUoZXZlbnQsIGNvbmRpdGlvbiwgYWxsb2NfZXZlbnQpCQkJCVwKKwlp ZiAoaXNfYWxsb2MgPT0gYWxsb2NfZXZlbnQgJiYgY29uZGl0aW9uKSB7CQkJXAorCQl1aW50NjRf dCBldmVudF93YWl0ID0JCQkJCVwKKwkJICAgIGV2ZW50IyNfZXZlbnRfd2FpdF9nZXQodHNkKTsJ CQlcCisJCWFzc2VydChldmVudF93YWl0IDw9IFRFX01BWF9TVEFSVF9XQUlUKTsJCVwKKwkJaWYg KGV2ZW50X3dhaXQgPiAwVSAmJiBldmVudF93YWl0IDwgd2FpdCkgewkJXAorCQkJd2FpdCA9IGV2 ZW50X3dhaXQ7CQkJCVwKKwkJfQkJCQkJCQlcCisJfQorCisJSVRFUkFURV9PVkVSX0FMTF9FVkVO VFMKKyN1bmRlZiBFCisJYXNzZXJ0KHdhaXQgPD0gVEVfTUFYX1NUQVJUX1dBSVQpOworCXJldHVy biB3YWl0OworfQorCitzdGF0aWMgdm9pZAordGVfYXNzZXJ0X2ludmFyaWFudHNfaW1wbCh0c2Rf dCAqdHNkLCB0ZV9jdHhfdCAqY3R4KSB7CisJdWludDY0X3QgY3VycmVudF9ieXRlcyA9IHRlX2N0 eF9jdXJyZW50X2J5dGVzX2dldChjdHgpOworCXVpbnQ2NF90IGxhc3RfZXZlbnQgPSB0ZV9jdHhf bGFzdF9ldmVudF9nZXQoY3R4KTsKKwl1aW50NjRfdCBuZXh0X2V2ZW50ID0gdGVfY3R4X25leHRf ZXZlbnRfZ2V0KGN0eCk7CisJdWludDY0X3QgbmV4dF9ldmVudF9mYXN0ID0gdGVfY3R4X25leHRf ZXZlbnRfZmFzdF9nZXQoY3R4KTsKKworCWFzc2VydChsYXN0X2V2ZW50ICE9IG5leHRfZXZlbnQp OworCWlmIChuZXh0X2V2ZW50ID4gVEVfTkVYVF9FVkVOVF9GQVNUX01BWCB8fCAhdHNkX2Zhc3Qo dHNkKSkgeworCQlhc3NlcnQobmV4dF9ldmVudF9mYXN0ID09IDBVKTsKKwl9IGVsc2UgeworCQlh c3NlcnQobmV4dF9ldmVudF9mYXN0ID09IG5leHRfZXZlbnQpOworCX0KKworCS8qIFRoZSBzdWJ0 cmFjdGlvbiBpcyBpbnRlbnRpb25hbGx5IHN1c2NlcHRpYmxlIHRvIHVuZGVyZmxvdy4gKi8KKwl1 aW50NjRfdCBpbnRlcnZhbCA9IG5leHRfZXZlbnQgLSBsYXN0X2V2ZW50OworCisJLyogVGhlIHN1 YnRyYWN0aW9uIGlzIGludGVudGlvbmFsbHkgc3VzY2VwdGlibGUgdG8gdW5kZXJmbG93LiAqLwor CWFzc2VydChjdXJyZW50X2J5dGVzIC0gbGFzdF9ldmVudCA8IGludGVydmFsKTsKKwl1aW50NjRf dCBtaW5fd2FpdCA9IHRlX25leHRfZXZlbnRfY29tcHV0ZSh0c2QsIHRlX2N0eF9pc19hbGxvYyhj dHgpKTsKKwkvKgorCSAqIG5leHRfZXZlbnQgc2hvdWxkIGhhdmUgYmVlbiBwdXNoZWQgdXAgb25s eSBleGNlcHQgd2hlbiBubyBldmVudCBpcworCSAqIG9uIGFuZCB0aGUgVFNEIGlzIGp1c3QgaW5p dGlhbGl6ZWQuICBUaGUgbGFzdF9ldmVudCA9PSAwVSBndWFyZAorCSAqIGJlbG93IGlzIHN0cm9u Z2VyIHRoYW4gbmVlZGVkLCBidXQgaGF2aW5nIGFuIGV4YWN0bHkgYWNjdXJhdGUgZ3VhcmQKKwkg KiBpcyBtb3JlIGNvbXBsaWNhdGVkIHRvIGltcGxlbWVudC4KKwkgKi8KKwlhc3NlcnQoKCF0ZV9j dHhfaGFzX2FjdGl2ZV9ldmVudHMoY3R4KSAmJiBsYXN0X2V2ZW50ID09IDBVKSB8fAorCSAgICBp bnRlcnZhbCA9PSBtaW5fd2FpdCB8fAorCSAgICAoaW50ZXJ2YWwgPCBtaW5fd2FpdCAmJiBpbnRl cnZhbCA9PSBURV9NQVhfSU5URVJWQUwpKTsKK30KKwordm9pZAordGVfYXNzZXJ0X2ludmFyaWFu dHNfZGVidWcodHNkX3QgKnRzZCkgeworCXRlX2N0eF90IGN0eDsKKwl0ZV9jdHhfZ2V0KHRzZCwg JmN0eCwgdHJ1ZSk7CisJdGVfYXNzZXJ0X2ludmFyaWFudHNfaW1wbCh0c2QsICZjdHgpOworCisJ dGVfY3R4X2dldCh0c2QsICZjdHgsIGZhbHNlKTsKKwl0ZV9hc3NlcnRfaW52YXJpYW50c19pbXBs KHRzZCwgJmN0eCk7Cit9CisKKy8qCisgKiBTeW5jaHJvbml6YXRpb24gYXJvdW5kIHRoZSBmYXN0 IHRocmVzaG9sZCBpbiB0c2QgLS0KKyAqIFRoZXJlIGFyZSB0d28gdGhyZWFkcyB0byBjb25zaWRl ciBpbiB0aGUgc3luY2hyb25pemF0aW9uIGhlcmU6CisgKiAtIFRoZSBvd25lciBvZiB0aGUgdHNk IGJlaW5nIHVwZGF0ZWQgYnkgYSBzbG93IHBhdGggY2hhbmdlCisgKiAtIFRoZSByZW1vdGUgdGhy ZWFkLCBkb2luZyB0aGF0IHNsb3cgcGF0aCBjaGFuZ2UuCisgKgorICogQXMgYSBkZXNpZ24gY29u c3RyYWludCwgd2Ugd2FudCB0byBlbnN1cmUgdGhhdCBhIHNsb3ctcGF0aCB0cmFuc2l0aW9uIGNh bm5vdAorICogYmUgaWdub3JlZCBmb3IgYXJiaXRyYXJpbHkgbG9uZywgYW5kIHRoYXQgaWYgdGhl IHJlbW90ZSB0aHJlYWQgY2F1c2VzIGEKKyAqIHNsb3ctcGF0aCB0cmFuc2l0aW9uIGFuZCB0aGVu IGNvbW11bmljYXRlcyB3aXRoIHRoZSBvd25lciB0aHJlYWQgdGhhdCBpdCBoYXMKKyAqIG9jY3Vy cmVkLCB0aGVuIHRoZSBvd25lciB3aWxsIGdvIGRvd24gdGhlIHNsb3cgcGF0aCBvbiB0aGUgbmV4 dCBhbGxvY2F0b3IKKyAqIG9wZXJhdGlvbiAoc28gdGhhdCB3ZSBkb24ndCB3YW50IHRvIGp1c3Qg d2FpdCB1bnRpbCB0aGUgb3duZXIgaGl0cyBpdHMgc2xvdworICogcGF0aCByZXNldCBjb25kaXRp b24gb24gaXRzIG93bikuCisgKgorICogSGVyZSdzIG91ciBzdHJhdGVneSB0byBkbyB0aGF0Ogor ICoKKyAqIFRoZSByZW1vdGUgdGhyZWFkIHdpbGwgdXBkYXRlIHRoZSBzbG93LXBhdGggc3RvcmVz IHRvIFRTRCB2YXJpYWJsZXMsIGlzc3VlIGEKKyAqIFNFUV9DU1QgZmVuY2UsIGFuZCB0aGVuIHVw ZGF0ZSB0aGUgVFNEIG5leHRfZXZlbnRfZmFzdCBjb3VudGVyLiBUaGUgb3duZXIKKyAqIHRocmVh ZCB3aWxsIHVwZGF0ZSBuZXh0X2V2ZW50X2Zhc3QsIGlzc3VlIGFuIFNFUV9DU1QgZmVuY2UsIGFu ZCB0aGVuIGNoZWNrCisgKiBpdHMgVFNEIHRvIHNlZSBpZiBpdCdzIG9uIHRoZSBzbG93IHBhdGgu CisKKyAqIFRoaXMgaXMgZmFpcmx5IHN0cmFpZ2h0Zm9yd2FyZCB3aGVuIDY0LWJpdCBhdG9taWNz IGFyZSBzdXBwb3J0ZWQuIEFzc3VtZSB0aGF0CisgKiB0aGUgcmVtb3RlIGZlbmNlIGlzIHNhbmR3 aWNoZWQgYmV0d2VlbiB0d28gb3duZXIgZmVuY2VzIGluIHRoZSByZXNldCBwYXRod2F5LgorICog VGhlIGNhc2Ugd2hlcmUgdGhlcmUgaXMgbm8gcHJlY2VkaW5nIG9yIHRyYWlsaW5nIG93bmVyIGZl bmNlIChpLmUuIGJlY2F1c2UKKyAqIHRoZSBvd25lciB0aHJlYWQgaXMgbmVhciB0aGUgYmVnaW5u aW5nIG9yIGVuZCBvZiBpdHMgbGlmZSkgY2FuIGJlIGFuYWx5emVkCisgKiBzaW1pbGFybHkuIFRo ZSBvd25lciBzdG9yZSB0byBuZXh0X2V2ZW50X2Zhc3QgcHJlY2VkaW5nIHRoZSBlYXJsaWVyIG93 bmVyCisgKiBmZW5jZSB3aWxsIGJlIGVhcmxpZXIgaW4gY29oZXJlbmNlIG9yZGVyIHRoYW4gdGhl IHJlbW90ZSBzdG9yZSB0byBpdCwgc28gdGhhdAorICogdGhlIG93bmVyIHRocmVhZCB3aWxsIGdv IGRvd24gdGhlIHNsb3cgcGF0aCBvbmNlIHRoZSBzdG9yZSBiZWNvbWVzIHZpc2libGUgdG8KKyAq IGl0LCB3aGljaCBpcyBubyBsYXRlciB0aGFuIHRoZSB0aW1lIG9mIHRoZSBzZWNvbmQgZmVuY2Uu CisKKyAqIFRoZSBjYXNlIHdoZXJlIHdlIGRvbid0IHN1cHBvcnQgNjQtYml0IGF0b21pY3MgaXMg dHJpY2tpZXIsIHNpbmNlIHdvcmQKKyAqIHRlYXJpbmcgaXMgcG9zc2libGUuIFdlJ2xsIHJlcGVh dCB0aGUgc2FtZSBhbmFseXNpcywgYW5kIGxvb2sgYXQgdGhlIHR3bworICogb3duZXIgZmVuY2Vz IHNhbmR3aWNoaW5nIHRoZSByZW1vdGUgZmVuY2UuIFRoZSBuZXh0X2V2ZW50X2Zhc3Qgc3RvcmVz IGRvbmUKKyAqIGFsb25nc2lkZSB0aGUgZWFybGllciBvd25lciBmZW5jZSBjYW5ub3Qgb3Zlcndy aXRlIGFueSBvZiB0aGUgcmVtb3RlIHN0b3JlcworICogKHNpbmNlIHRoZXkgcHJlY2VkZSB0aGUg ZWFybGllciBvd25lciBmZW5jZSBpbiBzYiwgd2hpY2ggcHJlY2VkZXMgdGhlIHJlbW90ZQorICog ZmVuY2UgaW4gc2MsIHdoaWNoIHByZWNlZGVzIHRoZSByZW1vdGUgc3RvcmVzIGluIHNiKS4gQWZ0 ZXIgdGhlIHNlY29uZCBvd25lcgorICogZmVuY2UgdGhlcmUgd2lsbCBiZSBhIHJlLWNoZWNrIG9m IHRoZSBzbG93LXBhdGggdmFyaWFibGVzIGFueXdheXMsIHNvIHRoZQorICogIm93bmVyIHdpbGwg bm90aWNlIHRoYXQgaXQncyBvbiB0aGUgc2xvdyBwYXRoIGV2ZW50dWFsbHkiIGd1YXJhbnRlZSBp cworICogc2F0aXNmaWVkLiBUbyBtYWtlIHN1cmUgdGhhdCB0aGUgb3V0LW9mLWJhbmQtbWVzc2Fn aW5nIGNvbnN0cmFpbnQgaXMgYXMgd2VsbCwKKyAqIG5vdGUgdGhhdCBlaXRoZXIgdGhlIG1lc3Nh Z2UgcGFzc2luZyBpcyBzZXF1ZW5jZWQgYmVmb3JlIHRoZSBzZWNvbmQgb3duZXIKKyAqIGZlbmNl IChpbiB3aGljaCBjYXNlIHRoZSByZW1vdGUgc3RvcmVzIGhhcHBlbiBiZWZvcmUgdGhlIHNlY29u ZCBzZXQgb2Ygb3duZXIKKyAqIHN0b3Jlcywgc28gbWFsbG9jIHNlZXMgYSB2YWx1ZSBvZiB6ZXJv IGZvciBuZXh0X2V2ZW50X2Zhc3QgYW5kIGdvZXMgZG93biB0aGUKKyAqIHNsb3cgcGF0aCksIG9y IGl0IGlzIG5vdCAoaW4gd2hpY2ggY2FzZSB0aGUgb3duZXIgc2VlcyB0aGUgdHNkIHNsb3ctcGF0 aAorICogd3JpdGVzIG9uIGl0cyBwcmV2aW91cyB1cGRhdGUpLiBUaGlzIGxlYXZlcyBvcGVuIHRo ZSBwb3NzaWJpbGl0eSB0aGF0IHRoZQorICogcmVtb3RlIHRocmVhZCB3aWxsIChhdCBzb21lIGFy Yml0cmFyeSBwb2ludCBpbiB0aGUgZnV0dXJlKSB6ZXJvIG91dCBvbmUgaGFsZgorICogb2YgdGhl IG93bmVyIHRocmVhZCdzIG5leHRfZXZlbnRfZmFzdCwgYnV0IHRoYXQncyBhbHdheXMgc2FmZSAo aXQganVzdCBzZW5kcworICogaXQgZG93biB0aGUgc2xvdyBwYXRoIGVhcmxpZXIpLgorICovCitz dGF0aWMgdm9pZAordGVfY3R4X25leHRfZXZlbnRfZmFzdF91cGRhdGUodGVfY3R4X3QgKmN0eCkg eworCXVpbnQ2NF90IG5leHRfZXZlbnQgPSB0ZV9jdHhfbmV4dF9ldmVudF9nZXQoY3R4KTsKKwl1 aW50NjRfdCBuZXh0X2V2ZW50X2Zhc3QgPSAobmV4dF9ldmVudCA8PSBURV9ORVhUX0VWRU5UX0ZB U1RfTUFYKSA/CisJICAgIG5leHRfZXZlbnQgOiAwVTsKKwl0ZV9jdHhfbmV4dF9ldmVudF9mYXN0 X3NldChjdHgsIG5leHRfZXZlbnRfZmFzdCk7Cit9CisKK3ZvaWQKK3RlX3JlY29tcHV0ZV9mYXN0 X3RocmVzaG9sZCh0c2RfdCAqdHNkKSB7CisJaWYgKHRzZF9zdGF0ZV9nZXQodHNkKSAhPSB0c2Rf c3RhdGVfbm9taW5hbCkgeworCQkvKiBDaGVjayBmaXJzdCBiZWNhdXNlIHRoaXMgaXMgYWxzbyBj YWxsZWQgb24gcHVyZ2F0b3J5LiAqLworCQl0ZV9uZXh0X2V2ZW50X2Zhc3Rfc2V0X25vbl9ub21p bmFsKHRzZCk7CisJCXJldHVybjsKKwl9CisKKwl0ZV9jdHhfdCBjdHg7CisJdGVfY3R4X2dldCh0 c2QsICZjdHgsIHRydWUpOworCXRlX2N0eF9uZXh0X2V2ZW50X2Zhc3RfdXBkYXRlKCZjdHgpOwor CXRlX2N0eF9nZXQodHNkLCAmY3R4LCBmYWxzZSk7CisJdGVfY3R4X25leHRfZXZlbnRfZmFzdF91 cGRhdGUoJmN0eCk7CisKKwlhdG9taWNfZmVuY2UoQVRPTUlDX1NFUV9DU1QpOworCWlmICh0c2Rf c3RhdGVfZ2V0KHRzZCkgIT0gdHNkX3N0YXRlX25vbWluYWwpIHsKKwkJdGVfbmV4dF9ldmVudF9m YXN0X3NldF9ub25fbm9taW5hbCh0c2QpOworCX0KK30KKworc3RhdGljIHZvaWQKK3RlX2FkanVz dF90aHJlc2hvbGRzX2hlbHBlcih0c2RfdCAqdHNkLCB0ZV9jdHhfdCAqY3R4LAorICAgIHVpbnQ2 NF90IHdhaXQpIHsKKwkvKgorCSAqIFRoZSBuZXh0IHRocmVzaG9sZCBiYXNlZCBvbiBmdXR1cmUg ZXZlbnRzIGNhbiBvbmx5IGJlIGFkanVzdGVkIGFmdGVyCisJICogcHJvZ3Jlc3NpbmcgdGhlIGxh c3RfZXZlbnQgY291bnRlciAod2hpY2ggaXMgc2V0IHRvIGN1cnJlbnQpLgorCSAqLworCWFzc2Vy dCh0ZV9jdHhfY3VycmVudF9ieXRlc19nZXQoY3R4KSA9PSB0ZV9jdHhfbGFzdF9ldmVudF9nZXQo Y3R4KSk7CisJYXNzZXJ0KHdhaXQgPD0gVEVfTUFYX1NUQVJUX1dBSVQpOworCisJdWludDY0X3Qg bmV4dF9ldmVudCA9IHRlX2N0eF9sYXN0X2V2ZW50X2dldChjdHgpICsgKHdhaXQgPD0KKwkgICAg VEVfTUFYX0lOVEVSVkFMID8gd2FpdCA6IFRFX01BWF9JTlRFUlZBTCk7CisJdGVfY3R4X25leHRf ZXZlbnRfc2V0KHRzZCwgY3R4LCBuZXh0X2V2ZW50KTsKK30KKworc3RhdGljIHVpbnQ2NF90Cit0 ZV9jbGlwX2V2ZW50X3dhaXQodWludDY0X3QgZXZlbnRfd2FpdCkgeworCWFzc2VydChldmVudF93 YWl0ID4gMFUpOworCWlmIChURV9NSU5fU1RBUlRfV0FJVCA+IDFVICYmCisJICAgIHVubGlrZWx5 KGV2ZW50X3dhaXQgPCBURV9NSU5fU1RBUlRfV0FJVCkpIHsKKwkJZXZlbnRfd2FpdCA9IFRFX01J Tl9TVEFSVF9XQUlUOworCX0KKwlpZiAoVEVfTUFYX1NUQVJUX1dBSVQgPCBVSU5UNjRfTUFYICYm CisJICAgIHVubGlrZWx5KGV2ZW50X3dhaXQgPiBURV9NQVhfU1RBUlRfV0FJVCkpIHsKKwkJZXZl bnRfd2FpdCA9IFRFX01BWF9TVEFSVF9XQUlUOworCX0KKwlyZXR1cm4gZXZlbnRfd2FpdDsKK30K Kwordm9pZAordGVfZXZlbnRfdHJpZ2dlcih0c2RfdCAqdHNkLCB0ZV9jdHhfdCAqY3R4KSB7CisJ LyogdXNpemUgaGFzIGFscmVhZHkgYmVlbiBhZGRlZCB0byB0aHJlYWRfYWxsb2NhdGVkLiAqLwor CXVpbnQ2NF90IGJ5dGVzX2FmdGVyID0gdGVfY3R4X2N1cnJlbnRfYnl0ZXNfZ2V0KGN0eCk7CisJ LyogVGhlIHN1YnRyYWN0aW9uIGlzIGludGVudGlvbmFsbHkgc3VzY2VwdGlibGUgdG8gdW5kZXJm bG93LiAqLworCXVpbnQ2NF90IGFjY3VtYnl0ZXMgPSBieXRlc19hZnRlciAtIHRlX2N0eF9sYXN0 X2V2ZW50X2dldChjdHgpOworCisJdGVfY3R4X2xhc3RfZXZlbnRfc2V0KGN0eCwgYnl0ZXNfYWZ0 ZXIpOworCisJYm9vbCBhbGxvd19ldmVudF90cmlnZ2VyID0gdHNkX25vbWluYWwodHNkKSAmJgor CSAgICB0c2RfcmVlbnRyYW5jeV9sZXZlbF9nZXQodHNkKSA9PSAwOworCWJvb2wgaXNfYWxsb2Mg PSBjdHgtPmlzX2FsbG9jOworCXVpbnQ2NF90IHdhaXQgPSBURV9NQVhfU1RBUlRfV0FJVDsKKwor I2RlZmluZSBFKGV2ZW50LCBjb25kaXRpb24sIGFsbG9jX2V2ZW50KQkJCQlcCisJYm9vbCBpc18j I2V2ZW50IyNfdHJpZ2dlcmVkID0gZmFsc2U7CQkJCVwKKwlpZiAoaXNfYWxsb2MgPT0gYWxsb2Nf ZXZlbnQgJiYgY29uZGl0aW9uKSB7CQkJXAorCQl1aW50NjRfdCBldmVudF93YWl0ID0gZXZlbnQj I19ldmVudF93YWl0X2dldCh0c2QpOwlcCisJCWFzc2VydChldmVudF93YWl0IDw9IFRFX01BWF9T VEFSVF9XQUlUKTsJCVwKKwkJaWYgKGV2ZW50X3dhaXQgPiBhY2N1bWJ5dGVzKSB7CQkJCVwKKwkJ CWV2ZW50X3dhaXQgLT0gYWNjdW1ieXRlczsJCQlcCisJCX0gZWxzZSBpZiAoIWFsbG93X2V2ZW50 X3RyaWdnZXIpIHsJCQlcCisJCQlldmVudF93YWl0ID0gZXZlbnQjI19wb3N0cG9uZWRfZXZlbnRf d2FpdCh0c2QpOwlcCisJCX0gZWxzZSB7CQkJCQkJXAorCQkJaXNfIyNldmVudCMjX3RyaWdnZXJl ZCA9IHRydWU7CQkJXAorCQkJZXZlbnRfd2FpdCA9IGV2ZW50IyNfbmV3X2V2ZW50X3dhaXQodHNk KTsJXAorCQl9CQkJCQkJCVwKKwkJZXZlbnRfd2FpdCA9IHRlX2NsaXBfZXZlbnRfd2FpdChldmVu dF93YWl0KTsJCVwKKwkJZXZlbnQjI19ldmVudF93YWl0X3NldCh0c2QsIGV2ZW50X3dhaXQpOwkJ XAorCQlpZiAoZXZlbnRfd2FpdCA8IHdhaXQpIHsJCQkJXAorCQkJd2FpdCA9IGV2ZW50X3dhaXQ7 CQkJCVwKKwkJfQkJCQkJCQlcCisJfQorCisJSVRFUkFURV9PVkVSX0FMTF9FVkVOVFMKKyN1bmRl ZiBFCisKKwlhc3NlcnQod2FpdCA8PSBURV9NQVhfU1RBUlRfV0FJVCk7CisJdGVfYWRqdXN0X3Ro cmVzaG9sZHNfaGVscGVyKHRzZCwgY3R4LCB3YWl0KTsKKwl0ZV9hc3NlcnRfaW52YXJpYW50cyh0 c2QpOworCisjZGVmaW5lIEUoZXZlbnQsIGNvbmRpdGlvbiwgYWxsb2NfZXZlbnQpCQkJCVwKKwlp ZiAoaXNfYWxsb2MgPT0gYWxsb2NfZXZlbnQgJiYgY29uZGl0aW9uICYmCQkJXAorCSAgICBpc18j I2V2ZW50IyNfdHJpZ2dlcmVkKSB7CQkJCQlcCisJCWFzc2VydChhbGxvd19ldmVudF90cmlnZ2Vy KTsJCQkJXAorCQl1aW50NjRfdCBlbGFwc2VkID0gZXZlbnQjI19mZXRjaF9lbGFwc2VkKHRzZCk7 CQlcCisJCWV2ZW50IyNfZXZlbnRfaGFuZGxlcih0c2QsIGVsYXBzZWQpOwkJCVwKKwl9CisKKwlJ VEVSQVRFX09WRVJfQUxMX0VWRU5UUworI3VuZGVmIEUKKworCXRlX2Fzc2VydF9pbnZhcmlhbnRz KHRzZCk7Cit9CisKK3N0YXRpYyB2b2lkCit0ZV9pbml0KHRzZF90ICp0c2QsIGJvb2wgaXNfYWxs b2MpIHsKKwl0ZV9jdHhfdCBjdHg7CisJdGVfY3R4X2dldCh0c2QsICZjdHgsIGlzX2FsbG9jKTsK KwkvKgorCSAqIFJlc2V0IHRoZSBsYXN0IGV2ZW50IHRvIGN1cnJlbnQsIHdoaWNoIHN0YXJ0cyB0 aGUgZXZlbnRzIGZyb20gYSBjbGVhbgorCSAqIHN0YXRlLiAgVGhpcyBpcyBuZWNlc3Nhcnkgd2hl biByZS1pbml0IHRoZSB0c2QgZXZlbnQgY291bnRlcnMuCisJICoKKwkgKiBUaGUgZXZlbnQgY291 bnRlcnMgbWFpbnRhaW4gYSByZWxhdGlvbnNoaXAgd2l0aCB0aGUgY3VycmVudCBieXRlczoKKwkg KiBsYXN0X2V2ZW50IDw9IGN1cnJlbnQgPCBuZXh0X2V2ZW50LiAgV2hlbiBhIHJlaW5pdCBoYXBw ZW5zIChlLmcuCisJICogcmVpbmNhcm5hdGVkIHRzZCksIHRoZSBsYXN0IGV2ZW50IG5lZWRzIHBy b2dyZXNzaW5nIGJlY2F1c2UgYWxsCisJICogZXZlbnRzIHN0YXJ0IGZyZXNoIGZyb20gdGhlIGN1 cnJlbnQgYnl0ZXMuCisJICovCisJdGVfY3R4X2xhc3RfZXZlbnRfc2V0KCZjdHgsIHRlX2N0eF9j dXJyZW50X2J5dGVzX2dldCgmY3R4KSk7CisKKwl1aW50NjRfdCB3YWl0ID0gVEVfTUFYX1NUQVJU X1dBSVQ7CisjZGVmaW5lIEUoZXZlbnQsIGNvbmRpdGlvbiwgYWxsb2NfZXZlbnQpCQkJCVwKKwlp ZiAoaXNfYWxsb2MgPT0gYWxsb2NfZXZlbnQgJiYgY29uZGl0aW9uKSB7CQkJXAorCQl1aW50NjRf dCBldmVudF93YWl0ID0gZXZlbnQjI19uZXdfZXZlbnRfd2FpdCh0c2QpOwlcCisJCWV2ZW50X3dh aXQgPSB0ZV9jbGlwX2V2ZW50X3dhaXQoZXZlbnRfd2FpdCk7CQlcCisJCWV2ZW50IyNfZXZlbnRf d2FpdF9zZXQodHNkLCBldmVudF93YWl0KTsJCVwKKwkJaWYgKGV2ZW50X3dhaXQgPCB3YWl0KSB7 CQkJCVwKKwkJCXdhaXQgPSBldmVudF93YWl0OwkJCQlcCisJCX0JCQkJCQkJXAorCX0KKworCUlU RVJBVEVfT1ZFUl9BTExfRVZFTlRTCisjdW5kZWYgRQorCXRlX2FkanVzdF90aHJlc2hvbGRzX2hl bHBlcih0c2QsICZjdHgsIHdhaXQpOworfQorCit2b2lkCit0c2RfdGVfaW5pdCh0c2RfdCAqdHNk KSB7CisJLyogTWFrZSBzdXJlIG5vIG92ZXJmbG93IGZvciB0aGUgYnl0ZXMgYWNjdW11bGF0ZWQg b24gZXZlbnRfdHJpZ2dlci4gKi8KKwlhc3NlcnQoVEVfTUFYX0lOVEVSVkFMIDw9IFVJTlQ2NF9N QVggLSBTQ19MQVJHRV9NQVhDTEFTUyArIDEpOworCXRlX2luaXQodHNkLCB0cnVlKTsKKwl0ZV9p bml0KHRzZCwgZmFsc2UpOworCXRlX2Fzc2VydF9pbnZhcmlhbnRzKHRzZCk7Cit9CgpkaWZmIC0t Z2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvc3JjL3RpY2tlci5j IGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvc3JjL3RpY2tlci5jCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5MGI1YzIKLS0tIC9kZXYvbnVsbAor KysgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9zcmMvdGlja2VyLmMK QEAgLTAsMCArMSwzMiBAQAorI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2plbWFsbG9jX3By ZWFtYmxlLmgiCisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvamVtYWxsb2NfaW50ZXJuYWxf aW5jbHVkZXMuaCIKKworLyoKKyAqIFRvIGF2b2lkIHVzaW5nIGZsb2F0aW5nIHBvaW50IG1hdGgg ZG93biBjb3JlIHBhdGhzIChzdGlsbCBuZWNlc3NhcnkgYmVjYXVzZQorICogdmVyc2lvbnMgb2Yg dGhlIGdsaWJjIGR5bmFtaWMgbG9hZGVyIHRoYXQgZGlkIG5vdCBwcmVzZXJ2ZSB4bW0gcmVnaXN0 ZXJzIGFyZQorICogc3RpbGwgc29tZXdoYXQgY29tbW9uLCByZXF1aXJpbmcgdXMgdG8gYmUgY29t cGlsYWJsZSB3aXRoIC1tbm8tc3NlKSwgYW5kIGFsc28KKyAqIHRvIGF2b2lkIGdlbmVyYWxseSBl eHBlbnNpdmUgbGlicmFyeSBjYWxscywgd2UgdXNlIGEgcHJlY29tcHV0ZWQgdGFibGUgb2YKKyAq IHZhbHVlcy4gIFdlIHdhbnQgdG8gc2FtcGxlIFUgdW5pZm9ybWx5IG9uIFswLCAxXSwgYW5kIHRo ZW4gY29tcHV0ZQorICogY2VpbChsb2codSkvbG9nKDEtMS9udGlja3MpKS4gIFdlJ3JlIG1vc3Rs eSBpbnRlcmVzdGVkIGluIHRoZSBjYXNlIHdoZXJlCisgKiBudGlja3MgaXMgcmVhc29uYWJseSBi aWcsIHNvIDEvbG9nKDEtMS9udGlja3MpIGlzIHdlbGwtYXBwcm94aW1hdGVkIGJ5CisgKiAtbnRp Y2tzLgorICoKKyAqIFRvIGNvbXB1dGUgbG9nKHUpLCB3ZSBzYW1wbGUgYW4gaW50ZWdlciBpbiBb MSwgNjRdIGFuZCBkaXZpZGUsIHRoZW4ganVzdCBsb29rCisgKiB1cCByZXN1bHRzIGluIGEgdGFi bGUuICBBcyBhIHNwYWNlLWNvbXByZXNzaW9uIG1lY2hhbmlzbSwgd2Ugc3RvcmUgdGhlc2UgYXMK KyAqIHVpbnQ4X3QgYnkgZGl2aWRpbmcgdGhlIHJhbmdlICgyNTUpIGJ5IHRoZSBoaWdoZXN0LW1h Z25pdHVkZSB2YWx1ZSB0aGUgbG9nCisgKiBjYW4gdGFrZSBvbiwgYW5kIHVzaW5nIHRoYXQgYXMg YSBtdWx0aXBsaWVyLiAgV2UgdGhlbiBoYXZlIHRvIGRpdmlkZSBieSB0aGF0CisgKiBtdWx0aXBs aWVyIGF0IHRoZSBlbmQgb2YgdGhlIGNvbXB1dGF0aW9uLgorICoKKyAqIFRoZSB2YWx1ZXMgaGVy ZSBhcmUgY29tcHV0ZWQgaW4gc3JjL3RpY2tlci5weQorICovCisKK2NvbnN0IHVpbnQ4X3QgdGlj a2VyX2dlb21fdGFibGVbMSA8PCBUSUNLRVJfR0VPTV9OQklUU10gPSB7CisJMjU0LCAyMTEsIDE4 NywgMTY5LCAxNTYsIDE0NCwgMTM1LCAxMjcsCisJMTIwLCAxMTMsIDEwNywgMTAyLCA5NywgOTMs IDg5LCA4NSwKKwk4MSwgNzcsIDc0LCA3MSwgNjgsIDY1LCA2MiwgNjAsCisJNTcsIDU1LCA1Mywg NTAsIDQ4LCA0NiwgNDQsIDQyLAorCTQwLCAzOSwgMzcsIDM1LCAzMywgMzIsIDMwLCAyOSwKKwky NywgMjYsIDI0LCAyMywgMjEsIDIwLCAxOSwgMTgsCisJMTYsIDE1LCAxNCwgMTMsIDEyLCAxMCwg OSwgOCwKKwk3LCA2LCA1LCA0LCAzLCAyLCAxLCAwCit9OwoKZGlmZiAtLWdpdCBhLzM4OS1kcy1i YXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3NyYy90aWNrZXIucHkgYi8zODktZHMtYmFz ZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9zcmMvdGlja2VyLnB5Cm5ldyBmaWxlIG1vZGUg MTAwNzU1CmluZGV4IDAwMDAwMDAuLjM4MDc3NDAKLS0tIC9kZXYvbnVsbAorKysgYi8zODktZHMt YmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9zcmMvdGlja2VyLnB5CkBAIC0wLDAgKzEs MTUgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKKworaW1wb3J0IG1hdGgKKworIyBNdXN0IG1h dGNoIFRJQ0tFUl9HRU9NX05CSVRTCitsZ190YWJsZV9zaXplID0gNgordGFibGVfc2l6ZSA9IDIq KmxnX3RhYmxlX3NpemUKK2J5dGVfbWF4ID0gMjU1CittdWwgPSBtYXRoLmZsb29yKC1ieXRlX21h eC9tYXRoLmxvZygxIC8gdGFibGVfc2l6ZSkpCit2YWx1ZXMgPSBbcm91bmQoLW11bCAqIG1hdGgu bG9nKGkgLyB0YWJsZV9zaXplKSkKKwlmb3IgaSBpbiByYW5nZSgxLCB0YWJsZV9zaXplKzEpXQor cHJpbnQoIm11bCA9IiwgbXVsKQorcHJpbnQoInZhbHVlczoiKQorZm9yIGkgaW4gcmFuZ2UodGFi bGVfc2l6ZSAvLyA4KToKKwlwcmludCgiLCAiLmpvaW4oKHN0cih4KSBmb3IgeCBpbiB2YWx1ZXNb aSo4IDogaSo4ICsgOF0pKSkKCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9q ZW1hbGxvYy01LjMuMC9zcmMvdHNkLmMgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxv Yy01LjMuMC9zcmMvdHNkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZThl NGYzYQotLS0gL2Rldi9udWxsCisrKyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9j LTUuMy4wL3NyYy90c2QuYwpAQCAtMCwwICsxLDU0OSBAQAorI2luY2x1ZGUgImplbWFsbG9jL2lu dGVybmFsL2plbWFsbG9jX3ByZWFtYmxlLmgiCisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwv amVtYWxsb2NfaW50ZXJuYWxfaW5jbHVkZXMuaCIKKworI2luY2x1ZGUgImplbWFsbG9jL2ludGVy bmFsL2Fzc2VydC5oIgorI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL3Nhbi5oIgorI2luY2x1 ZGUgImplbWFsbG9jL2ludGVybmFsL211dGV4LmgiCisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJu YWwvcnRyZWUuaCIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIERhdGEuICovCisKKy8q IFRTRF9JTklUSUFMSVpFUiB0cmlnZ2VycyAiLVdtaXNzaW5nLWZpZWxkLWluaXRpYWxpemVyIiAq LworSkVNQUxMT0NfRElBR05PU1RJQ19QVVNICitKRU1BTExPQ19ESUFHTk9TVElDX0lHTk9SRV9N SVNTSU5HX1NUUlVDVF9GSUVMRF9JTklUSUFMSVpFUlMKKworI2lmZGVmIEpFTUFMTE9DX01BTExP Q19USFJFQURfQ0xFQU5VUAorSkVNQUxMT0NfVFNEX1RZUEVfQVRUUih0c2RfdCkgdHNkX3RscyA9 IFRTRF9JTklUSUFMSVpFUjsKK0pFTUFMTE9DX1RTRF9UWVBFX0FUVFIoYm9vbCkgSkVNQUxMT0Nf VExTX01PREVMIHRzZF9pbml0aWFsaXplZCA9IGZhbHNlOworYm9vbCB0c2RfYm9vdGVkID0gZmFs c2U7CisjZWxpZiAoZGVmaW5lZChKRU1BTExPQ19UTFMpKQorSkVNQUxMT0NfVFNEX1RZUEVfQVRU Uih0c2RfdCkgdHNkX3RscyA9IFRTRF9JTklUSUFMSVpFUjsKK3B0aHJlYWRfa2V5X3QgdHNkX3Rz ZDsKK2Jvb2wgdHNkX2Jvb3RlZCA9IGZhbHNlOworI2VsaWYgKGRlZmluZWQoX1dJTjMyKSkKK0RX T1JEIHRzZF90c2Q7Cit0c2Rfd3JhcHBlcl90IHRzZF9ib290X3dyYXBwZXIgPSB7ZmFsc2UsIFRT RF9JTklUSUFMSVpFUn07Citib29sIHRzZF9ib290ZWQgPSBmYWxzZTsKKyNlbHNlCisKKy8qCisg KiBUaGlzIGNvbnRhaW5zIGEgbXV0ZXgsIGJ1dCBpdCdzIHByZXR0eSBjb252ZW5pZW50IHRvIGFs bG93IHRoZSBtdXRleCBjb2RlIHRvCisgKiBoYXZlIGEgZGVwZW5kZW5jeSBvbiB0c2QuICBTbyB3 ZSBkZWZpbmUgdGhlIHN0cnVjdCBoZXJlLCBhbmQgb25seSByZWZlciB0byBpdAorICogYnkgcG9p bnRlciBpbiB0aGUgaGVhZGVyLgorICovCitzdHJ1Y3QgdHNkX2luaXRfaGVhZF9zIHsKKwlxbF9o ZWFkKHRzZF9pbml0X2Jsb2NrX3QpIGJsb2NrczsKKwltYWxsb2NfbXV0ZXhfdCBsb2NrOworfTsK KworcHRocmVhZF9rZXlfdCB0c2RfdHNkOwordHNkX2luaXRfaGVhZF90CXRzZF9pbml0X2hlYWQg PSB7CisJcWxfaGVhZF9pbml0aWFsaXplcihibG9ja3MpLAorCU1BTExPQ19NVVRFWF9JTklUSUFM SVpFUgorfTsKKwordHNkX3dyYXBwZXJfdCB0c2RfYm9vdF93cmFwcGVyID0geworCWZhbHNlLAor CVRTRF9JTklUSUFMSVpFUgorfTsKK2Jvb2wgdHNkX2Jvb3RlZCA9IGZhbHNlOworI2VuZGlmCisK K0pFTUFMTE9DX0RJQUdOT1NUSUNfUE9QCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8q IEEgbGlzdCBvZiBhbGwgdGhlIHRzZHMgaW4gdGhlIG5vbWluYWwgc3RhdGUuICovCit0eXBlZGVm IHFsX2hlYWQodHNkX3QpIHRzZF9saXN0X3Q7CitzdGF0aWMgdHNkX2xpc3RfdCB0c2Rfbm9taW5h bF90c2RzID0gcWxfaGVhZF9pbml0aWFsaXplcih0c2Rfbm9taW5hbF90c2RzKTsKK3N0YXRpYyBt YWxsb2NfbXV0ZXhfdCB0c2Rfbm9taW5hbF90c2RzX2xvY2s7CisKKy8qIEhvdyBtYW55IHNsb3ct cGF0aC1lbmFibGluZyBmZWF0dXJlcyBhcmUgdHVybmVkIG9uLiAqLworc3RhdGljIGF0b21pY191 MzJfdCB0c2RfZ2xvYmFsX3Nsb3dfY291bnQgPSBBVE9NSUNfSU5JVCgwKTsKKworc3RhdGljIGJv b2wKK3RzZF9pbl9ub21pbmFsX2xpc3QodHNkX3QgKnRzZCkgeworCXRzZF90ICp0c2RfbGlzdDsK Kwlib29sIGZvdW5kID0gZmFsc2U7CisJLyoKKwkgKiBXZSBkb24ndCBrbm93IHRoYXQgdHNkIGlz IG5vbWluYWw7IGl0IG1pZ2h0IG5vdCBiZSBzYWZlIHRvIGdldCBkYXRhCisJICogb3V0IG9mIGl0 IGhlcmUuCisJICovCisJbWFsbG9jX211dGV4X2xvY2soVFNETl9OVUxMLCAmdHNkX25vbWluYWxf dHNkc19sb2NrKTsKKwlxbF9mb3JlYWNoKHRzZF9saXN0LCAmdHNkX25vbWluYWxfdHNkcywgVFNE X01BTkdMRSh0c2RfbGluaykpIHsKKwkJaWYgKHRzZCA9PSB0c2RfbGlzdCkgeworCQkJZm91bmQg PSB0cnVlOworCQkJYnJlYWs7CisJCX0KKwl9CisJbWFsbG9jX211dGV4X3VubG9jayhUU0ROX05V TEwsICZ0c2Rfbm9taW5hbF90c2RzX2xvY2spOworCXJldHVybiBmb3VuZDsKK30KKworc3RhdGlj IHZvaWQKK3RzZF9hZGRfbm9taW5hbCh0c2RfdCAqdHNkKSB7CisJYXNzZXJ0KCF0c2RfaW5fbm9t aW5hbF9saXN0KHRzZCkpOworCWFzc2VydCh0c2Rfc3RhdGVfZ2V0KHRzZCkgPD0gdHNkX3N0YXRl X25vbWluYWxfbWF4KTsKKwlxbF9lbG1fbmV3KHRzZCwgVFNEX01BTkdMRSh0c2RfbGluaykpOwor CW1hbGxvY19tdXRleF9sb2NrKHRzZF90c2RuKHRzZCksICZ0c2Rfbm9taW5hbF90c2RzX2xvY2sp OworCXFsX3RhaWxfaW5zZXJ0KCZ0c2Rfbm9taW5hbF90c2RzLCB0c2QsIFRTRF9NQU5HTEUodHNk X2xpbmspKTsKKwltYWxsb2NfbXV0ZXhfdW5sb2NrKHRzZF90c2RuKHRzZCksICZ0c2Rfbm9taW5h bF90c2RzX2xvY2spOworfQorCitzdGF0aWMgdm9pZAordHNkX3JlbW92ZV9ub21pbmFsKHRzZF90 ICp0c2QpIHsKKwlhc3NlcnQodHNkX2luX25vbWluYWxfbGlzdCh0c2QpKTsKKwlhc3NlcnQodHNk X3N0YXRlX2dldCh0c2QpIDw9IHRzZF9zdGF0ZV9ub21pbmFsX21heCk7CisJbWFsbG9jX211dGV4 X2xvY2sodHNkX3RzZG4odHNkKSwgJnRzZF9ub21pbmFsX3RzZHNfbG9jayk7CisJcWxfcmVtb3Zl KCZ0c2Rfbm9taW5hbF90c2RzLCB0c2QsIFRTRF9NQU5HTEUodHNkX2xpbmspKTsKKwltYWxsb2Nf bXV0ZXhfdW5sb2NrKHRzZF90c2RuKHRzZCksICZ0c2Rfbm9taW5hbF90c2RzX2xvY2spOworfQor CitzdGF0aWMgdm9pZAordHNkX2ZvcmNlX3JlY29tcHV0ZSh0c2RuX3QgKnRzZG4pIHsKKwkvKgor CSAqIFRoZSBzdG9yZXMgdG8gdHNkLT5zdGF0ZSBoZXJlIG5lZWQgdG8gc3luY2hyb25pemUgd2l0 aCB0aGUgZXhjaGFuZ2UKKwkgKiBpbiB0c2Rfc2xvd191cGRhdGUuCisJICovCisJYXRvbWljX2Zl bmNlKEFUT01JQ19SRUxFQVNFKTsKKwltYWxsb2NfbXV0ZXhfbG9jayh0c2RuLCAmdHNkX25vbWlu YWxfdHNkc19sb2NrKTsKKwl0c2RfdCAqcmVtb3RlX3RzZDsKKwlxbF9mb3JlYWNoKHJlbW90ZV90 c2QsICZ0c2Rfbm9taW5hbF90c2RzLCBUU0RfTUFOR0xFKHRzZF9saW5rKSkgeworCQlhc3NlcnQo dHNkX2F0b21pY19sb2FkKCZyZW1vdGVfdHNkLT5zdGF0ZSwgQVRPTUlDX1JFTEFYRUQpCisJCSAg ICA8PSB0c2Rfc3RhdGVfbm9taW5hbF9tYXgpOworCQl0c2RfYXRvbWljX3N0b3JlKCZyZW1vdGVf dHNkLT5zdGF0ZSwKKwkJICAgIHRzZF9zdGF0ZV9ub21pbmFsX3JlY29tcHV0ZSwgQVRPTUlDX1JF TEFYRUQpOworCQkvKiBTZWUgY29tbWVudHMgaW4gdGVfcmVjb21wdXRlX2Zhc3RfdGhyZXNob2xk KCkuICovCisJCWF0b21pY19mZW5jZShBVE9NSUNfU0VRX0NTVCk7CisJCXRlX25leHRfZXZlbnRf ZmFzdF9zZXRfbm9uX25vbWluYWwocmVtb3RlX3RzZCk7CisJfQorCW1hbGxvY19tdXRleF91bmxv Y2sodHNkbiwgJnRzZF9ub21pbmFsX3RzZHNfbG9jayk7Cit9CisKK3ZvaWQKK3RzZF9nbG9iYWxf c2xvd19pbmModHNkbl90ICp0c2RuKSB7CisJYXRvbWljX2ZldGNoX2FkZF91MzIoJnRzZF9nbG9i YWxfc2xvd19jb3VudCwgMSwgQVRPTUlDX1JFTEFYRUQpOworCS8qCisJICogV2UgdW5jb25kaXRp b25hbGx5IGZvcmNlIGEgcmVjb21wdXRlLCBldmVuIGlmIHRoZSBnbG9iYWwgc2xvdyBjb3VudAor CSAqIHdhcyBhbHJlYWR5IHBvc2l0aXZlLiAgSWYgd2UgZGlkbid0LCB0aGVuIGl0IHdvdWxkIGJl IHBvc3NpYmxlIGZvciB1cworCSAqIHRvIHJldHVybiB0byB0aGUgdXNlciwgaGF2ZSB0aGUgdXNl ciBzeW5jaHJvbml6ZSBleHRlcm5hbGx5IHdpdGggc29tZQorCSAqIG90aGVyIHRocmVhZCwgYW5k IHRoZW4gaGF2ZSB0aGF0IG90aGVyIHRocmVhZCBub3QgaGF2ZSBwaWNrZWQgdXAgdGhlCisJICog dXBkYXRlIHlldCAoc2luY2UgdGhlIG9yaWdpbmFsIGluY3JlbWVudGluZyB0aHJlYWQgbWlnaHQg c3RpbGwgYmUKKwkgKiBtYWtpbmcgaXRzIHdheSB0aHJvdWdoIHRoZSB0c2QgbGlzdCkuCisJICov CisJdHNkX2ZvcmNlX3JlY29tcHV0ZSh0c2RuKTsKK30KKwordm9pZCB0c2RfZ2xvYmFsX3Nsb3df ZGVjKHRzZG5fdCAqdHNkbikgeworCWF0b21pY19mZXRjaF9zdWJfdTMyKCZ0c2RfZ2xvYmFsX3Ns b3dfY291bnQsIDEsIEFUT01JQ19SRUxBWEVEKTsKKwkvKiBTZWUgdGhlIG5vdGUgaW4gLi4uX2lu YygpLiAqLworCXRzZF9mb3JjZV9yZWNvbXB1dGUodHNkbik7Cit9CisKK3N0YXRpYyBib29sCit0 c2RfbG9jYWxfc2xvdyh0c2RfdCAqdHNkKSB7CisJcmV0dXJuICF0c2RfdGNhY2hlX2VuYWJsZWRf Z2V0KHRzZCkKKwkgICAgfHwgdHNkX3JlZW50cmFuY3lfbGV2ZWxfZ2V0KHRzZCkgPiAwOworfQor Citib29sCit0c2RfZ2xvYmFsX3Nsb3coKSB7CisJcmV0dXJuIGF0b21pY19sb2FkX3UzMigmdHNk X2dsb2JhbF9zbG93X2NvdW50LCBBVE9NSUNfUkVMQVhFRCkgPiAwOworfQorCisvKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqLworCitzdGF0aWMgdWludDhfdAordHNkX3N0YXRlX2NvbXB1dGUodHNkX3Qg KnRzZCkgeworCWlmICghdHNkX25vbWluYWwodHNkKSkgeworCQlyZXR1cm4gdHNkX3N0YXRlX2dl dCh0c2QpOworCX0KKwkvKiBXZSdyZSBpbiAqYSogbm9taW5hbCBzdGF0ZTsgYnV0IHdoaWNoIG9u ZT8gKi8KKwlpZiAobWFsbG9jX3Nsb3cgfHwgdHNkX2xvY2FsX3Nsb3codHNkKSB8fCB0c2RfZ2xv YmFsX3Nsb3coKSkgeworCQlyZXR1cm4gdHNkX3N0YXRlX25vbWluYWxfc2xvdzsKKwl9IGVsc2Ug eworCQlyZXR1cm4gdHNkX3N0YXRlX25vbWluYWw7CisJfQorfQorCit2b2lkCit0c2Rfc2xvd191 cGRhdGUodHNkX3QgKnRzZCkgeworCXVpbnQ4X3Qgb2xkX3N0YXRlOworCWRvIHsKKwkJdWludDhf dCBuZXdfc3RhdGUgPSB0c2Rfc3RhdGVfY29tcHV0ZSh0c2QpOworCQlvbGRfc3RhdGUgPSB0c2Rf YXRvbWljX2V4Y2hhbmdlKCZ0c2QtPnN0YXRlLCBuZXdfc3RhdGUsCisJCSAgICBBVE9NSUNfQUNR VUlSRSk7CisJfSB3aGlsZSAob2xkX3N0YXRlID09IHRzZF9zdGF0ZV9ub21pbmFsX3JlY29tcHV0 ZSk7CisKKwl0ZV9yZWNvbXB1dGVfZmFzdF90aHJlc2hvbGQodHNkKTsKK30KKwordm9pZAordHNk X3N0YXRlX3NldCh0c2RfdCAqdHNkLCB1aW50OF90IG5ld19zdGF0ZSkgeworCS8qIE9ubHkgdGhl IHRzZCBtb2R1bGUgY2FuIGNoYW5nZSB0aGUgc3RhdGUgKnRvKiByZWNvbXB1dGUuICovCisJYXNz ZXJ0KG5ld19zdGF0ZSAhPSB0c2Rfc3RhdGVfbm9taW5hbF9yZWNvbXB1dGUpOworCXVpbnQ4X3Qg b2xkX3N0YXRlID0gdHNkX2F0b21pY19sb2FkKCZ0c2QtPnN0YXRlLCBBVE9NSUNfUkVMQVhFRCk7 CisJaWYgKG9sZF9zdGF0ZSA+IHRzZF9zdGF0ZV9ub21pbmFsX21heCkgeworCQkvKgorCQkgKiBO b3QgY3VycmVudGx5IGluIHRoZSBub21pbmFsIGxpc3QsIGJ1dCBpdCBtaWdodCBuZWVkIHRvIGJl CisJCSAqIGluc2VydGVkIHRoZXJlLgorCQkgKi8KKwkJYXNzZXJ0KCF0c2RfaW5fbm9taW5hbF9s aXN0KHRzZCkpOworCQl0c2RfYXRvbWljX3N0b3JlKCZ0c2QtPnN0YXRlLCBuZXdfc3RhdGUsIEFU T01JQ19SRUxBWEVEKTsKKwkJaWYgKG5ld19zdGF0ZSA8PSB0c2Rfc3RhdGVfbm9taW5hbF9tYXgp IHsKKwkJCXRzZF9hZGRfbm9taW5hbCh0c2QpOworCQl9CisJfSBlbHNlIHsKKwkJLyoKKwkJICog V2UncmUgY3VycmVudGx5IG5vbWluYWwuICBJZiB0aGUgbmV3IHN0YXRlIGlzIG5vbi1ub21pbmFs LAorCQkgKiBncmVhdDsgd2UgdGFrZSBvdXJzZWx2ZXMgb2ZmIHRoZSBsaXN0IGFuZCBqdXN0IGVu dGVyIHRoZSBuZXcKKwkJICogc3RhdGUuCisJCSAqLworCQlhc3NlcnQodHNkX2luX25vbWluYWxf bGlzdCh0c2QpKTsKKwkJaWYgKG5ld19zdGF0ZSA+IHRzZF9zdGF0ZV9ub21pbmFsX21heCkgewor CQkJdHNkX3JlbW92ZV9ub21pbmFsKHRzZCk7CisJCQl0c2RfYXRvbWljX3N0b3JlKCZ0c2QtPnN0 YXRlLCBuZXdfc3RhdGUsCisJCQkgICAgQVRPTUlDX1JFTEFYRUQpOworCQl9IGVsc2UgeworCQkJ LyoKKwkJCSAqIFRoaXMgaXMgdGhlIHRyaWNreSBjYXNlLiAgV2UncmUgdHJhbnNpdGlvbmluZyBm cm9tCisJCQkgKiBvbmUgbm9taW5hbCBzdGF0ZSB0byBhbm90aGVyLiAgVGhlIGNhbGxlciBjYW4n dCBrbm93CisJCQkgKiBhYm91dCBhbnkgcmFjZXMgdGhhdCBhcmUgb2NjdXJyaW5nIGF0IHRoZSBz YW1lIHRpbWUsCisJCQkgKiBzbyB3ZSBhbHdheXMgaGF2ZSB0byByZWNvbXB1dGUgbm8gbWF0dGVy IHdoYXQuCisJCQkgKi8KKwkJCXRzZF9zbG93X3VwZGF0ZSh0c2QpOworCQl9CisJfQorCXRlX3Jl Y29tcHV0ZV9mYXN0X3RocmVzaG9sZCh0c2QpOworfQorCitzdGF0aWMgdm9pZAordHNkX3Bybmdf c3RhdGVfaW5pdCh0c2RfdCAqdHNkKSB7CisJLyoKKwkgKiBBIG5vbmRldGVybWluaXN0aWMgc2Vl ZCBiYXNlZCBvbiB0aGUgYWRkcmVzcyBvZiB0c2QgcmVkdWNlcworCSAqIHRoZSBsaWtlbGlob29k IG9mIGxvY2tzdGVwIG5vbi11bmlmb3JtIGNhY2hlIGluZGV4CisJICogdXRpbGl6YXRpb24gYW1v bmcgaWRlbnRpY2FsIGNvbmN1cnJlbnQgcHJvY2Vzc2VzLCBidXQgYXQgdGhlCisJICogY29zdCBv ZiB0ZXN0IHJlcGVhdGFiaWxpdHkuICBGb3IgZGVidWcgYnVpbGRzLCBpbnN0ZWFkIHVzZSBhCisJ ICogZGV0ZXJtaW5pc3RpYyBzZWVkLgorCSAqLworCSp0c2RfcHJuZ19zdGF0ZXBfZ2V0KHRzZCkg PSBjb25maWdfZGVidWcgPyAwIDoKKwkgICAgKHVpbnQ2NF90KSh1aW50cHRyX3QpdHNkOworfQor CitzdGF0aWMgYm9vbAordHNkX2RhdGFfaW5pdCh0c2RfdCAqdHNkKSB7CisJLyoKKwkgKiBXZSBp bml0aWFsaXplIHRoZSBydHJlZSBjb250ZXh0IGZpcnN0IChiZWZvcmUgdGhlIHRjYWNoZSksIHNp bmNlIHRoZQorCSAqIHRjYWNoZSBpbml0aWFsaXphdGlvbiBkZXBlbmRzIG9uIGl0LgorCSAqLwor CXJ0cmVlX2N0eF9kYXRhX2luaXQodHNkX3J0cmVlX2N0eHBfZ2V0X3Vuc2FmZSh0c2QpKTsKKwl0 c2RfcHJuZ19zdGF0ZV9pbml0KHRzZCk7CisJdHNkX3RlX2luaXQodHNkKTsgLyogZXZlbnRfaW5p dCBtYXkgdXNlIHRoZSBwcm5nIHN0YXRlIGFib3ZlLiAqLworCXRzZF9zYW5faW5pdCh0c2QpOwor CXJldHVybiB0c2RfdGNhY2hlX2VuYWJsZWRfZGF0YV9pbml0KHRzZCk7Cit9CisKK3N0YXRpYyB2 b2lkCithc3NlcnRfdHNkX2RhdGFfY2xlYW51cF9kb25lKHRzZF90ICp0c2QpIHsKKwlhc3NlcnQo IXRzZF9ub21pbmFsKHRzZCkpOworCWFzc2VydCghdHNkX2luX25vbWluYWxfbGlzdCh0c2QpKTsK Kwlhc3NlcnQoKnRzZF9hcmVuYXBfZ2V0X3Vuc2FmZSh0c2QpID09IE5VTEwpOworCWFzc2VydCgq dHNkX2lhcmVuYXBfZ2V0X3Vuc2FmZSh0c2QpID09IE5VTEwpOworCWFzc2VydCgqdHNkX3RjYWNo ZV9lbmFibGVkcF9nZXRfdW5zYWZlKHRzZCkgPT0gZmFsc2UpOworCWFzc2VydCgqdHNkX3Byb2Zf dGRhdGFwX2dldF91bnNhZmUodHNkKSA9PSBOVUxMKTsKK30KKworc3RhdGljIGJvb2wKK3RzZF9k YXRhX2luaXRfbm9jbGVhbnVwKHRzZF90ICp0c2QpIHsKKwlhc3NlcnQodHNkX3N0YXRlX2dldCh0 c2QpID09IHRzZF9zdGF0ZV9yZWluY2FybmF0ZWQgfHwKKwkgICAgdHNkX3N0YXRlX2dldCh0c2Qp ID09IHRzZF9zdGF0ZV9taW5pbWFsX2luaXRpYWxpemVkKTsKKwkvKgorCSAqIER1cmluZyByZWlu Y2FybmF0aW9uLCB0aGVyZSBpcyBubyBndWFyYW50ZWUgdGhhdCB0aGUgY2xlYW51cCBmdW5jdGlv bgorCSAqIHdpbGwgYmUgY2FsbGVkIChkZWFsbG9jYXRpb24gbWF5IGhhcHBlbiBhZnRlciBhbGwg dHNkIGRlc3RydWN0b3JzKS4KKwkgKiBXZSBzZXQgdXAgdHNkIGluIGEgd2F5IHRoYXQgbm8gY2xl YW51cCBpcyBuZWVkZWQuCisJICovCisJcnRyZWVfY3R4X2RhdGFfaW5pdCh0c2RfcnRyZWVfY3R4 cF9nZXRfdW5zYWZlKHRzZCkpOworCSp0c2RfdGNhY2hlX2VuYWJsZWRwX2dldF91bnNhZmUodHNk KSA9IGZhbHNlOworCSp0c2RfcmVlbnRyYW5jeV9sZXZlbHBfZ2V0KHRzZCkgPSAxOworCXRzZF9w cm5nX3N0YXRlX2luaXQodHNkKTsKKwl0c2RfdGVfaW5pdCh0c2QpOyAvKiBldmVudF9pbml0IG1h eSB1c2UgdGhlIHBybmcgc3RhdGUgYWJvdmUuICovCisJdHNkX3Nhbl9pbml0KHRzZCk7CisJYXNz ZXJ0X3RzZF9kYXRhX2NsZWFudXBfZG9uZSh0c2QpOworCisJcmV0dXJuIGZhbHNlOworfQorCit0 c2RfdCAqCit0c2RfZmV0Y2hfc2xvdyh0c2RfdCAqdHNkLCBib29sIG1pbmltYWwpIHsKKwlhc3Nl cnQoIXRzZF9mYXN0KHRzZCkpOworCisJaWYgKHRzZF9zdGF0ZV9nZXQodHNkKSA9PSB0c2Rfc3Rh dGVfbm9taW5hbF9zbG93KSB7CisJCS8qCisJCSAqIE9uIHNsb3cgcGF0aCBidXQgbm8gd29yayBu ZWVkZWQuICBOb3RlIHRoYXQgd2UgY2FuJ3QKKwkJICogbmVjZXNzYXJpbHkgKmFzc2VydCogdGhh dCB3ZSdyZSBzbG93LCBiZWNhdXNlIHdlIG1pZ2h0IGJlCisJCSAqIHNsb3cgYmVjYXVzZSBvZiBh biBhc3luY2hyb25vdXMgbW9kaWZpY2F0aW9uIHRvIGdsb2JhbCBzdGF0ZSwKKwkJICogd2hpY2gg bWlnaHQgYmUgYXN5bmNocm9ub3VzbHkgbW9kaWZpZWQgKmJhY2sqLgorCQkgKi8KKwl9IGVsc2Ug aWYgKHRzZF9zdGF0ZV9nZXQodHNkKSA9PSB0c2Rfc3RhdGVfbm9taW5hbF9yZWNvbXB1dGUpIHsK KwkJdHNkX3Nsb3dfdXBkYXRlKHRzZCk7CisJfSBlbHNlIGlmICh0c2Rfc3RhdGVfZ2V0KHRzZCkg PT0gdHNkX3N0YXRlX3VuaW5pdGlhbGl6ZWQpIHsKKwkJaWYgKCFtaW5pbWFsKSB7CisJCQlpZiAo dHNkX2Jvb3RlZCkgeworCQkJCXRzZF9zdGF0ZV9zZXQodHNkLCB0c2Rfc3RhdGVfbm9taW5hbCk7 CisJCQkJdHNkX3Nsb3dfdXBkYXRlKHRzZCk7CisJCQkJLyogVHJpZ2dlciBjbGVhbnVwIGhhbmRs ZXIgcmVnaXN0cmF0aW9uLiAqLworCQkJCXRzZF9zZXQodHNkKTsKKwkJCQl0c2RfZGF0YV9pbml0 KHRzZCk7CisJCQl9CisJCX0gZWxzZSB7CisJCQl0c2Rfc3RhdGVfc2V0KHRzZCwgdHNkX3N0YXRl X21pbmltYWxfaW5pdGlhbGl6ZWQpOworCQkJdHNkX3NldCh0c2QpOworCQkJdHNkX2RhdGFfaW5p dF9ub2NsZWFudXAodHNkKTsKKwkJfQorCX0gZWxzZSBpZiAodHNkX3N0YXRlX2dldCh0c2QpID09 IHRzZF9zdGF0ZV9taW5pbWFsX2luaXRpYWxpemVkKSB7CisJCWlmICghbWluaW1hbCkgeworCQkJ LyogU3dpdGNoIHRvIGZ1bGx5IGluaXRpYWxpemVkLiAqLworCQkJdHNkX3N0YXRlX3NldCh0c2Qs IHRzZF9zdGF0ZV9ub21pbmFsKTsKKwkJCWFzc2VydCgqdHNkX3JlZW50cmFuY3lfbGV2ZWxwX2dl dCh0c2QpID49IDEpOworCQkJKCp0c2RfcmVlbnRyYW5jeV9sZXZlbHBfZ2V0KHRzZCkpLS07CisJ CQl0c2Rfc2xvd191cGRhdGUodHNkKTsKKwkJCXRzZF9kYXRhX2luaXQodHNkKTsKKwkJfSBlbHNl IHsKKwkJCWFzc2VydF90c2RfZGF0YV9jbGVhbnVwX2RvbmUodHNkKTsKKwkJfQorCX0gZWxzZSBp ZiAodHNkX3N0YXRlX2dldCh0c2QpID09IHRzZF9zdGF0ZV9wdXJnYXRvcnkpIHsKKwkJdHNkX3N0 YXRlX3NldCh0c2QsIHRzZF9zdGF0ZV9yZWluY2FybmF0ZWQpOworCQl0c2Rfc2V0KHRzZCk7CisJ CXRzZF9kYXRhX2luaXRfbm9jbGVhbnVwKHRzZCk7CisJfSBlbHNlIHsKKwkJYXNzZXJ0KHRzZF9z dGF0ZV9nZXQodHNkKSA9PSB0c2Rfc3RhdGVfcmVpbmNhcm5hdGVkKTsKKwl9CisKKwlyZXR1cm4g dHNkOworfQorCit2b2lkICoKK21hbGxvY190c2RfbWFsbG9jKHNpemVfdCBzaXplKSB7CisJcmV0 dXJuIGEwbWFsbG9jKENBQ0hFTElORV9DRUlMSU5HKHNpemUpKTsKK30KKwordm9pZAorbWFsbG9j X3RzZF9kYWxsb2Modm9pZCAqd3JhcHBlcikgeworCWEwZGFsbG9jKHdyYXBwZXIpOworfQorCisj aWYgZGVmaW5lZChKRU1BTExPQ19NQUxMT0NfVEhSRUFEX0NMRUFOVVApIHx8IGRlZmluZWQoX1dJ TjMyKQorc3RhdGljIHVuc2lnbmVkIG5jbGVhbnVwczsKK3N0YXRpYyBtYWxsb2NfdHNkX2NsZWFu dXBfdCBjbGVhbnVwc1tNQUxMT0NfVFNEX0NMRUFOVVBTX01BWF07CisKKyNpZm5kZWYgX1dJTjMy CitKRU1BTExPQ19FWFBPUlQKKyNlbmRpZgordm9pZAorX21hbGxvY190aHJlYWRfY2xlYW51cCh2 b2lkKSB7CisJYm9vbCBwZW5kaW5nW01BTExPQ19UU0RfQ0xFQU5VUFNfTUFYXSwgYWdhaW47CisJ dW5zaWduZWQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBuY2xlYW51cHM7IGkrKykgeworCQlwZW5k aW5nW2ldID0gdHJ1ZTsKKwl9CisKKwlkbyB7CisJCWFnYWluID0gZmFsc2U7CisJCWZvciAoaSA9 IDA7IGkgPCBuY2xlYW51cHM7IGkrKykgeworCQkJaWYgKHBlbmRpbmdbaV0pIHsKKwkJCQlwZW5k aW5nW2ldID0gY2xlYW51cHNbaV0oKTsKKwkJCQlpZiAocGVuZGluZ1tpXSkgeworCQkJCQlhZ2Fp biA9IHRydWU7CisJCQkJfQorCQkJfQorCQl9CisJfSB3aGlsZSAoYWdhaW4pOworfQorCisjaWZu ZGVmIF9XSU4zMgorSkVNQUxMT0NfRVhQT1JUCisjZW5kaWYKK3ZvaWQKK19tYWxsb2NfdHNkX2Ns ZWFudXBfcmVnaXN0ZXIoYm9vbCAoKmYpKHZvaWQpKSB7CisJYXNzZXJ0KG5jbGVhbnVwcyA8IE1B TExPQ19UU0RfQ0xFQU5VUFNfTUFYKTsKKwljbGVhbnVwc1tuY2xlYW51cHNdID0gZjsKKwluY2xl YW51cHMrKzsKK30KKworI2VuZGlmCisKK3N0YXRpYyB2b2lkCit0c2RfZG9fZGF0YV9jbGVhbnVw KHRzZF90ICp0c2QpIHsKKwlwcm9mX3RkYXRhX2NsZWFudXAodHNkKTsKKwlpYXJlbmFfY2xlYW51 cCh0c2QpOworCWFyZW5hX2NsZWFudXAodHNkKTsKKwl0Y2FjaGVfY2xlYW51cCh0c2QpOworCXdp dG5lc3Nlc19jbGVhbnVwKHRzZF93aXRuZXNzX3RzZHBfZ2V0X3Vuc2FmZSh0c2QpKTsKKwkqdHNk X3JlZW50cmFuY3lfbGV2ZWxwX2dldCh0c2QpID0gMTsKK30KKwordm9pZAordHNkX2NsZWFudXAo dm9pZCAqYXJnKSB7CisJdHNkX3QgKnRzZCA9ICh0c2RfdCAqKWFyZzsKKworCXN3aXRjaCAodHNk X3N0YXRlX2dldCh0c2QpKSB7CisJY2FzZSB0c2Rfc3RhdGVfdW5pbml0aWFsaXplZDoKKwkJLyog RG8gbm90aGluZy4gKi8KKwkJYnJlYWs7CisJY2FzZSB0c2Rfc3RhdGVfbWluaW1hbF9pbml0aWFs aXplZDoKKwkJLyogVGhpcyBpbXBsaWVzIHRoZSB0aHJlYWQgb25seSBkaWQgZnJlZSgpIGluIGl0 cyBsaWZlIHRpbWUuICovCisJCS8qIEZhbGwgdGhyb3VnaC4gKi8KKwljYXNlIHRzZF9zdGF0ZV9y ZWluY2FybmF0ZWQ6CisJCS8qCisJCSAqIFJlaW5jYXJuYXRlZCBtZWFucyBhbm90aGVyIGRlc3Ry dWN0b3IgZGVhbGxvY2F0ZWQgbWVtb3J5CisJCSAqIGFmdGVyIHRoZSBkZXN0cnVjdG9yIHdhcyBj YWxsZWQuICBDbGVhbnVwIGlzbid0IHJlcXVpcmVkIGJ1dAorCQkgKiBpcyBzdGlsbCBjYWxsZWQg Zm9yIHRlc3RpbmcgYW5kIGNvbXBsZXRlbmVzcy4KKwkJICovCisJCWFzc2VydF90c2RfZGF0YV9j bGVhbnVwX2RvbmUodHNkKTsKKwkJSkVNQUxMT0NfRkFMTFRIUk9VR0g7CisJY2FzZSB0c2Rfc3Rh dGVfbm9taW5hbDoKKwljYXNlIHRzZF9zdGF0ZV9ub21pbmFsX3Nsb3c6CisJCXRzZF9kb19kYXRh X2NsZWFudXAodHNkKTsKKwkJdHNkX3N0YXRlX3NldCh0c2QsIHRzZF9zdGF0ZV9wdXJnYXRvcnkp OworCQl0c2Rfc2V0KHRzZCk7CisJCWJyZWFrOworCWNhc2UgdHNkX3N0YXRlX3B1cmdhdG9yeToK KwkJLyoKKwkJICogVGhlIHByZXZpb3VzIHRpbWUgdGhpcyBkZXN0cnVjdG9yIHdhcyBjYWxsZWQs IHdlIHNldCB0aGUKKwkJICogc3RhdGUgdG8gdHNkX3N0YXRlX3B1cmdhdG9yeSBzbyB0aGF0IG90 aGVyIGRlc3RydWN0b3JzCisJCSAqIHdvdWxkbid0IGNhdXNlIHJlLWNyZWF0aW9uIG9mIHRoZSB0 c2QuICBUaGlzIHRpbWUsIGRvCisJCSAqIG5vdGhpbmcsIGFuZCBkbyBub3QgcmVxdWVzdCBhbm90 aGVyIGNhbGxiYWNrLgorCQkgKi8KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJbm90X3JlYWNoZWQo KTsKKwl9CisjaWZkZWYgSkVNQUxMT0NfSkVUCisJdGVzdF9jYWxsYmFja190IHRlc3RfY2FsbGJh Y2sgPSAqdHNkX3Rlc3RfY2FsbGJhY2twX2dldF91bnNhZmUodHNkKTsKKwlpbnQgKmRhdGEgPSB0 c2RfdGVzdF9kYXRhcF9nZXRfdW5zYWZlKHRzZCk7CisJaWYgKHRlc3RfY2FsbGJhY2sgIT0gTlVM TCkgeworCQl0ZXN0X2NhbGxiYWNrKGRhdGEpOworCX0KKyNlbmRpZgorfQorCit0c2RfdCAqCitt YWxsb2NfdHNkX2Jvb3QwKHZvaWQpIHsKKwl0c2RfdCAqdHNkOworCisjaWYgZGVmaW5lZChKRU1B TExPQ19NQUxMT0NfVEhSRUFEX0NMRUFOVVApIHx8IGRlZmluZWQoX1dJTjMyKQorCW5jbGVhbnVw cyA9IDA7CisjZW5kaWYKKwlpZiAobWFsbG9jX211dGV4X2luaXQoJnRzZF9ub21pbmFsX3RzZHNf bG9jaywgInRzZF9ub21pbmFsX3RzZHNfbG9jayIsCisJICAgIFdJVE5FU1NfUkFOS19PTUlULCBt YWxsb2NfbXV0ZXhfcmFua19leGNsdXNpdmUpKSB7CisJCXJldHVybiBOVUxMOworCX0KKwlpZiAo dHNkX2Jvb3QwKCkpIHsKKwkJcmV0dXJuIE5VTEw7CisJfQorCXRzZCA9IHRzZF9mZXRjaCgpOwor CXJldHVybiB0c2Q7Cit9CisKK3ZvaWQKK21hbGxvY190c2RfYm9vdDEodm9pZCkgeworCXRzZF9i b290MSgpOworCXRzZF90ICp0c2QgPSB0c2RfZmV0Y2goKTsKKwkvKiBtYWxsb2Nfc2xvdyBoYXMg YmVlbiBzZXQgcHJvcGVybHkuICBVcGRhdGUgdHNkX3Nsb3cuICovCisJdHNkX3Nsb3dfdXBkYXRl KHRzZCk7Cit9CisKKyNpZmRlZiBfV0lOMzIKK3N0YXRpYyBCT09MIFdJTkFQSQorX3Rsc19jYWxs YmFjayhISU5TVEFOQ0UgaGluc3RETEwsIERXT1JEIGZkd1JlYXNvbiwgTFBWT0lEIGxwdlJlc2Vy dmVkKSB7CisJc3dpdGNoIChmZHdSZWFzb24pIHsKKyNpZmRlZiBKRU1BTExPQ19MQVpZX0xPQ0sK KwljYXNlIERMTF9USFJFQURfQVRUQUNIOgorCQlpc3RocmVhZGVkID0gdHJ1ZTsKKwkJYnJlYWs7 CisjZW5kaWYKKwljYXNlIERMTF9USFJFQURfREVUQUNIOgorCQlfbWFsbG9jX3RocmVhZF9jbGVh bnVwKCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwlyZXR1cm4gdHJ1ZTsK K30KKworLyoKKyAqIFdlIG5lZWQgdG8gYmUgYWJsZSB0byBzYXkgInJlYWQiIGhlcmUgKGluIHRo ZSAicHJhZ21hIHNlY3Rpb24iKSwgYnV0IGhhdmUKKyAqIGhvb2tlZCAicmVhZCIuIFdlIHdvbid0 IHJlYWQgZm9yIHRoZSByZXN0IG9mIHRoZSBmaWxlLCBzbyB3ZSBjYW4gZ2V0IGF3YXkKKyAqIHdp dGggdW5ob29raW5nLgorICovCisjaWZkZWYgcmVhZAorIyAgdW5kZWYgcmVhZAorI2VuZGlmCisK KyNpZmRlZiBfTVNDX1ZFUgorIyAgaWZkZWYgX01fSVg4NgorIyAgICBwcmFnbWEgY29tbWVudChs aW5rZXIsICIvSU5DTFVERTpfX3Rsc191c2VkIikKKyMgICAgcHJhZ21hIGNvbW1lbnQobGlua2Vy LCAiL0lOQ0xVREU6X3Rsc19jYWxsYmFjayIpCisjICBlbHNlCisjICAgIHByYWdtYSBjb21tZW50 KGxpbmtlciwgIi9JTkNMVURFOl90bHNfdXNlZCIpCisjICAgIHByYWdtYSBjb21tZW50KGxpbmtl ciwgIi9JTkNMVURFOiIgU1RSSU5HSUZZKHRsc19jYWxsYmFjaykgKQorIyAgZW5kaWYKKyMgIHBy YWdtYSBzZWN0aW9uKCIuQ1JUJFhMWSIsbG9uZyxyZWFkKQorI2VuZGlmCitKRU1BTExPQ19TRUNU SU9OKCIuQ1JUJFhMWSIpIEpFTUFMTE9DX0FUVFIodXNlZCkKK0JPT0wJKFdJTkFQSSAqY29uc3Qg dGxzX2NhbGxiYWNrKShISU5TVEFOQ0UgaGluc3RETEwsCisgICAgRFdPUkQgZmR3UmVhc29uLCBM UFZPSUQgbHB2UmVzZXJ2ZWQpID0gX3Rsc19jYWxsYmFjazsKKyNlbmRpZgorCisjaWYgKCFkZWZp bmVkKEpFTUFMTE9DX01BTExPQ19USFJFQURfQ0xFQU5VUCkgJiYgIWRlZmluZWQoSkVNQUxMT0Nf VExTKSAmJiBcCisgICAgIWRlZmluZWQoX1dJTjMyKSkKK3ZvaWQgKgordHNkX2luaXRfY2hlY2tf cmVjdXJzaW9uKHRzZF9pbml0X2hlYWRfdCAqaGVhZCwgdHNkX2luaXRfYmxvY2tfdCAqYmxvY2sp IHsKKwlwdGhyZWFkX3Qgc2VsZiA9IHB0aHJlYWRfc2VsZigpOworCXRzZF9pbml0X2Jsb2NrX3Qg Kml0ZXI7CisKKwkvKiBDaGVjayB3aGV0aGVyIHRoaXMgdGhyZWFkIGhhcyBhbHJlYWR5IGluc2Vy dGVkIGludG8gdGhlIGxpc3QuICovCisJbWFsbG9jX211dGV4X2xvY2soVFNETl9OVUxMLCAmaGVh ZC0+bG9jayk7CisJcWxfZm9yZWFjaChpdGVyLCAmaGVhZC0+YmxvY2tzLCBsaW5rKSB7CisJCWlm IChpdGVyLT50aHJlYWQgPT0gc2VsZikgeworCQkJbWFsbG9jX211dGV4X3VubG9jayhUU0ROX05V TEwsICZoZWFkLT5sb2NrKTsKKwkJCXJldHVybiBpdGVyLT5kYXRhOworCQl9CisJfQorCS8qIElu c2VydCBibG9jayBpbnRvIGxpc3QuICovCisJcWxfZWxtX25ldyhibG9jaywgbGluayk7CisJYmxv Y2stPnRocmVhZCA9IHNlbGY7CisJcWxfdGFpbF9pbnNlcnQoJmhlYWQtPmJsb2NrcywgYmxvY2ss IGxpbmspOworCW1hbGxvY19tdXRleF91bmxvY2soVFNETl9OVUxMLCAmaGVhZC0+bG9jayk7CisJ cmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQKK3RzZF9pbml0X2ZpbmlzaCh0c2RfaW5pdF9oZWFkX3Qg KmhlYWQsIHRzZF9pbml0X2Jsb2NrX3QgKmJsb2NrKSB7CisJbWFsbG9jX211dGV4X2xvY2soVFNE Tl9OVUxMLCAmaGVhZC0+bG9jayk7CisJcWxfcmVtb3ZlKCZoZWFkLT5ibG9ja3MsIGJsb2NrLCBs aW5rKTsKKwltYWxsb2NfbXV0ZXhfdW5sb2NrKFRTRE5fTlVMTCwgJmhlYWQtPmxvY2spOworfQor I2VuZGlmCisKK3ZvaWQKK3RzZF9wcmVmb3JrKHRzZF90ICp0c2QpIHsKKwltYWxsb2NfbXV0ZXhf cHJlZm9yayh0c2RfdHNkbih0c2QpLCAmdHNkX25vbWluYWxfdHNkc19sb2NrKTsKK30KKwordm9p ZAordHNkX3Bvc3Rmb3JrX3BhcmVudCh0c2RfdCAqdHNkKSB7CisJbWFsbG9jX211dGV4X3Bvc3Rm b3JrX3BhcmVudCh0c2RfdHNkbih0c2QpLCAmdHNkX25vbWluYWxfdHNkc19sb2NrKTsKK30KKwor dm9pZAordHNkX3Bvc3Rmb3JrX2NoaWxkKHRzZF90ICp0c2QpIHsKKwltYWxsb2NfbXV0ZXhfcG9z dGZvcmtfY2hpbGQodHNkX3RzZG4odHNkKSwgJnRzZF9ub21pbmFsX3RzZHNfbG9jayk7CisJcWxf bmV3KCZ0c2Rfbm9taW5hbF90c2RzKTsKKworCWlmICh0c2Rfc3RhdGVfZ2V0KHRzZCkgPD0gdHNk X3N0YXRlX25vbWluYWxfbWF4KSB7CisJCXRzZF9hZGRfbm9taW5hbCh0c2QpOworCX0KK30KCmRp ZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9zcmMvd2l0 bmVzcy5jIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvc3JjL3dpdG5l c3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDc0YWYwCi0tLSAvZGV2 L251bGwKKysrIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvc3JjL3dp dG5lc3MuYwpAQCAtMCwwICsxLDEyMiBAQAorI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2pl bWFsbG9jX3ByZWFtYmxlLmgiCisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvamVtYWxsb2Nf aW50ZXJuYWxfaW5jbHVkZXMuaCIKKworI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2Fzc2Vy dC5oIgorI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL21hbGxvY19pby5oIgorCit2b2lkCit3 aXRuZXNzX2luaXQod2l0bmVzc190ICp3aXRuZXNzLCBjb25zdCBjaGFyICpuYW1lLCB3aXRuZXNz X3JhbmtfdCByYW5rLAorICAgIHdpdG5lc3NfY29tcF90ICpjb21wLCB2b2lkICpvcGFxdWUpIHsK Kwl3aXRuZXNzLT5uYW1lID0gbmFtZTsKKwl3aXRuZXNzLT5yYW5rID0gcmFuazsKKwl3aXRuZXNz LT5jb21wID0gY29tcDsKKwl3aXRuZXNzLT5vcGFxdWUgPSBvcGFxdWU7Cit9CisKK3N0YXRpYyB2 b2lkCit3aXRuZXNzX3ByaW50X3dpdG5lc3Mod2l0bmVzc190ICp3LCB1bnNpZ25lZCBuKSB7CisJ YXNzZXJ0KG4gPiAwKTsKKwlpZiAobiA9PSAxKSB7CisJCW1hbGxvY19wcmludGYoIiAlcygldSki LCB3LT5uYW1lLCB3LT5yYW5rKTsKKwl9IGVsc2UgeworCQltYWxsb2NfcHJpbnRmKCIgJXMoJXUp WCV1Iiwgdy0+bmFtZSwgdy0+cmFuaywgbik7CisJfQorfQorCitzdGF0aWMgdm9pZAord2l0bmVz c19wcmludF93aXRuZXNzZXMoY29uc3Qgd2l0bmVzc19saXN0X3QgKndpdG5lc3NlcykgeworCXdp dG5lc3NfdCAqdywgKmxhc3QgPSBOVUxMOworCXVuc2lnbmVkIG4gPSAwOworCXFsX2ZvcmVhY2go dywgd2l0bmVzc2VzLCBsaW5rKSB7CisJCWlmIChsYXN0ICE9IE5VTEwgJiYgdy0+cmFuayA+IGxh c3QtPnJhbmspIHsKKwkJCWFzc2VydCh3LT5uYW1lICE9IGxhc3QtPm5hbWUpOworCQkJd2l0bmVz c19wcmludF93aXRuZXNzKGxhc3QsIG4pOworCQkJbiA9IDA7CisJCX0gZWxzZSBpZiAobGFzdCAh PSBOVUxMKSB7CisJCQlhc3NlcnQody0+cmFuayA9PSBsYXN0LT5yYW5rKTsKKwkJCWFzc2VydCh3 LT5uYW1lID09IGxhc3QtPm5hbWUpOworCQl9CisJCWxhc3QgPSB3OworCQkrK247CisJfQorCWlm IChsYXN0ICE9IE5VTEwpIHsKKwkJd2l0bmVzc19wcmludF93aXRuZXNzKGxhc3QsIG4pOworCX0K K30KKworc3RhdGljIHZvaWQKK3dpdG5lc3NfbG9ja19lcnJvcl9pbXBsKGNvbnN0IHdpdG5lc3Nf bGlzdF90ICp3aXRuZXNzZXMsCisgICAgY29uc3Qgd2l0bmVzc190ICp3aXRuZXNzKSB7CisJbWFs bG9jX3ByaW50ZigiPGplbWFsbG9jPjogTG9jayByYW5rIG9yZGVyIHJldmVyc2FsOiIpOworCXdp dG5lc3NfcHJpbnRfd2l0bmVzc2VzKHdpdG5lc3Nlcyk7CisJbWFsbG9jX3ByaW50ZigiICVzKCV1 KVxuIiwgd2l0bmVzcy0+bmFtZSwgd2l0bmVzcy0+cmFuayk7CisJYWJvcnQoKTsKK30KK3dpdG5l c3NfbG9ja19lcnJvcl90ICpKRVRfTVVUQUJMRSB3aXRuZXNzX2xvY2tfZXJyb3IgPSB3aXRuZXNz X2xvY2tfZXJyb3JfaW1wbDsKKworc3RhdGljIHZvaWQKK3dpdG5lc3Nfb3duZXJfZXJyb3JfaW1w bChjb25zdCB3aXRuZXNzX3QgKndpdG5lc3MpIHsKKwltYWxsb2NfcHJpbnRmKCI8amVtYWxsb2M+ OiBTaG91bGQgb3duICVzKCV1KVxuIiwgd2l0bmVzcy0+bmFtZSwKKwkgICAgd2l0bmVzcy0+cmFu ayk7CisJYWJvcnQoKTsKK30KK3dpdG5lc3Nfb3duZXJfZXJyb3JfdCAqSkVUX01VVEFCTEUgd2l0 bmVzc19vd25lcl9lcnJvciA9CisgICAgd2l0bmVzc19vd25lcl9lcnJvcl9pbXBsOworCitzdGF0 aWMgdm9pZAord2l0bmVzc19ub3Rfb3duZXJfZXJyb3JfaW1wbChjb25zdCB3aXRuZXNzX3QgKndp dG5lc3MpIHsKKwltYWxsb2NfcHJpbnRmKCI8amVtYWxsb2M+OiBTaG91bGQgbm90IG93biAlcygl dSlcbiIsIHdpdG5lc3MtPm5hbWUsCisJICAgIHdpdG5lc3MtPnJhbmspOworCWFib3J0KCk7Cit9 Cit3aXRuZXNzX25vdF9vd25lcl9lcnJvcl90ICpKRVRfTVVUQUJMRSB3aXRuZXNzX25vdF9vd25l cl9lcnJvciA9CisgICAgd2l0bmVzc19ub3Rfb3duZXJfZXJyb3JfaW1wbDsKKworc3RhdGljIHZv aWQKK3dpdG5lc3NfZGVwdGhfZXJyb3JfaW1wbChjb25zdCB3aXRuZXNzX2xpc3RfdCAqd2l0bmVz c2VzLAorICAgIHdpdG5lc3NfcmFua190IHJhbmtfaW5jbHVzaXZlLCB1bnNpZ25lZCBkZXB0aCkg eworCW1hbGxvY19wcmludGYoIjxqZW1hbGxvYz46IFNob3VsZCBvd24gJXUgbG9jayVzIG9mIHJh bmsgPj0gJXU6IiwgZGVwdGgsCisJICAgIChkZXB0aCAhPSAxKSA/ICAicyIgOiAiIiwgcmFua19p bmNsdXNpdmUpOworCXdpdG5lc3NfcHJpbnRfd2l0bmVzc2VzKHdpdG5lc3Nlcyk7CisJbWFsbG9j X3ByaW50ZigiXG4iKTsKKwlhYm9ydCgpOworfQord2l0bmVzc19kZXB0aF9lcnJvcl90ICpKRVRf TVVUQUJMRSB3aXRuZXNzX2RlcHRoX2Vycm9yID0KKyAgICB3aXRuZXNzX2RlcHRoX2Vycm9yX2lt cGw7CisKK3ZvaWQKK3dpdG5lc3Nlc19jbGVhbnVwKHdpdG5lc3NfdHNkX3QgKndpdG5lc3NfdHNk KSB7CisJd2l0bmVzc19hc3NlcnRfbG9ja2xlc3Mod2l0bmVzc190c2RfdHNkbih3aXRuZXNzX3Rz ZCkpOworCisJLyogRG8gbm90aGluZy4gKi8KK30KKwordm9pZAord2l0bmVzc19wcmVmb3JrKHdp dG5lc3NfdHNkX3QgKndpdG5lc3NfdHNkKSB7CisJaWYgKCFjb25maWdfZGVidWcpIHsKKwkJcmV0 dXJuOworCX0KKwl3aXRuZXNzX3RzZC0+Zm9ya2luZyA9IHRydWU7Cit9CisKK3ZvaWQKK3dpdG5l c3NfcG9zdGZvcmtfcGFyZW50KHdpdG5lc3NfdHNkX3QgKndpdG5lc3NfdHNkKSB7CisJaWYgKCFj b25maWdfZGVidWcpIHsKKwkJcmV0dXJuOworCX0KKwl3aXRuZXNzX3RzZC0+Zm9ya2luZyA9IGZh bHNlOworfQorCit2b2lkCit3aXRuZXNzX3Bvc3Rmb3JrX2NoaWxkKHdpdG5lc3NfdHNkX3QgKndp dG5lc3NfdHNkKSB7CisJaWYgKCFjb25maWdfZGVidWcpIHsKKwkJcmV0dXJuOworCX0KKyNpZm5k ZWYgSkVNQUxMT0NfTVVURVhfSU5JVF9DQgorCXdpdG5lc3NfbGlzdF90ICp3aXRuZXNzZXM7CisK Kwl3aXRuZXNzZXMgPSAmd2l0bmVzc190c2QtPndpdG5lc3NlczsKKwlxbF9uZXcod2l0bmVzc2Vz KTsKKyNlbmRpZgorCXdpdG5lc3NfdHNkLT5mb3JraW5nID0gZmFsc2U7Cit9CgpkaWZmIC0tZ2l0 IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvc3JjL3pvbmUuYyBiLzM4 OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3NyYy96b25lLmMKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjNkZmRkMAotLS0gL2Rldi9udWxsCisrKyBiLzM4 OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3NyYy96b25lLmMKQEAgLTAsMCAr MSw0NjkgQEAKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9qZW1hbGxvY19wcmVhbWJsZS5o IgorI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2plbWFsbG9jX2ludGVybmFsX2luY2x1ZGVz LmgiCisKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9hc3NlcnQuaCIKKworI2lmbmRlZiBK RU1BTExPQ19aT05FCisjICBlcnJvciAiVGhpcyBzb3VyY2UgZmlsZSBpcyBmb3Igem9uZXMgb24g RGFyd2luIChPUyBYKS4iCisjZW5kaWYKKworLyogRGVmaW5pdGlvbnMgb2YgdGhlIGZvbGxvd2lu ZyBzdHJ1Y3RzIGluIG1hbGxvYy9tYWxsb2MuaCBtaWdodCBiZSB0b28gb2xkCisgKiBmb3IgdGhl IGJ1aWx0IGJpbmFyeSB0byBydW4gb24gbmV3ZXIgdmVyc2lvbnMgb2YgT1NYLiBTbyB1c2UgdGhl IG5ld2VzdAorICogcG9zc2libGUgdmVyc2lvbiBvZiB0aG9zZSBzdHJ1Y3RzLgorICovCit0eXBl ZGVmIHN0cnVjdCBfbWFsbG9jX3pvbmVfdCB7CisJdm9pZCAqcmVzZXJ2ZWQxOworCXZvaWQgKnJl c2VydmVkMjsKKwlzaXplX3QgKCpzaXplKShzdHJ1Y3QgX21hbGxvY196b25lX3QgKiwgY29uc3Qg dm9pZCAqKTsKKwl2b2lkICooKm1hbGxvYykoc3RydWN0IF9tYWxsb2Nfem9uZV90ICosIHNpemVf dCk7CisJdm9pZCAqKCpjYWxsb2MpKHN0cnVjdCBfbWFsbG9jX3pvbmVfdCAqLCBzaXplX3QsIHNp emVfdCk7CisJdm9pZCAqKCp2YWxsb2MpKHN0cnVjdCBfbWFsbG9jX3pvbmVfdCAqLCBzaXplX3Qp OworCXZvaWQgKCpmcmVlKShzdHJ1Y3QgX21hbGxvY196b25lX3QgKiwgdm9pZCAqKTsKKwl2b2lk ICooKnJlYWxsb2MpKHN0cnVjdCBfbWFsbG9jX3pvbmVfdCAqLCB2b2lkICosIHNpemVfdCk7CisJ dm9pZCAoKmRlc3Ryb3kpKHN0cnVjdCBfbWFsbG9jX3pvbmVfdCAqKTsKKwljb25zdCBjaGFyICp6 b25lX25hbWU7CisJdW5zaWduZWQgKCpiYXRjaF9tYWxsb2MpKHN0cnVjdCBfbWFsbG9jX3pvbmVf dCAqLCBzaXplX3QsIHZvaWQgKiosIHVuc2lnbmVkKTsKKwl2b2lkICgqYmF0Y2hfZnJlZSkoc3Ry dWN0IF9tYWxsb2Nfem9uZV90ICosIHZvaWQgKiosIHVuc2lnbmVkKTsKKwlzdHJ1Y3QgbWFsbG9j X2ludHJvc3BlY3Rpb25fdCAqaW50cm9zcGVjdDsKKwl1bnNpZ25lZCB2ZXJzaW9uOworCXZvaWQg KigqbWVtYWxpZ24pKHN0cnVjdCBfbWFsbG9jX3pvbmVfdCAqLCBzaXplX3QsIHNpemVfdCk7CisJ dm9pZCAoKmZyZWVfZGVmaW5pdGVfc2l6ZSkoc3RydWN0IF9tYWxsb2Nfem9uZV90ICosIHZvaWQg Kiwgc2l6ZV90KTsKKwlzaXplX3QgKCpwcmVzc3VyZV9yZWxpZWYpKHN0cnVjdCBfbWFsbG9jX3pv bmVfdCAqLCBzaXplX3QpOworfSBtYWxsb2Nfem9uZV90OworCit0eXBlZGVmIHN0cnVjdCB7CisJ dm1fYWRkcmVzc190IGFkZHJlc3M7CisJdm1fc2l6ZV90IHNpemU7Cit9IHZtX3JhbmdlX3Q7CisK K3R5cGVkZWYgc3RydWN0IG1hbGxvY19zdGF0aXN0aWNzX3QgeworCXVuc2lnbmVkIGJsb2Nrc19p bl91c2U7CisJc2l6ZV90IHNpemVfaW5fdXNlOworCXNpemVfdCBtYXhfc2l6ZV9pbl91c2U7CisJ c2l6ZV90IHNpemVfYWxsb2NhdGVkOworfSBtYWxsb2Nfc3RhdGlzdGljc190OworCit0eXBlZGVm IGtlcm5fcmV0dXJuX3QgbWVtb3J5X3JlYWRlcl90KHRhc2tfdCwgdm1fYWRkcmVzc190LCB2bV9z aXplX3QsIHZvaWQgKiopOworCit0eXBlZGVmIHZvaWQgdm1fcmFuZ2VfcmVjb3JkZXJfdCh0YXNr X3QsIHZvaWQgKiwgdW5zaWduZWQgdHlwZSwgdm1fcmFuZ2VfdCAqLCB1bnNpZ25lZCk7CisKK3R5 cGVkZWYgc3RydWN0IG1hbGxvY19pbnRyb3NwZWN0aW9uX3QgeworCWtlcm5fcmV0dXJuX3QgKCpl bnVtZXJhdG9yKSh0YXNrX3QsIHZvaWQgKiwgdW5zaWduZWQsIHZtX2FkZHJlc3NfdCwgbWVtb3J5 X3JlYWRlcl90LCB2bV9yYW5nZV9yZWNvcmRlcl90KTsKKwlzaXplX3QgKCpnb29kX3NpemUpKG1h bGxvY196b25lX3QgKiwgc2l6ZV90KTsKKwlib29sZWFuX3QgKCpjaGVjaykobWFsbG9jX3pvbmVf dCAqKTsKKwl2b2lkICgqcHJpbnQpKG1hbGxvY196b25lX3QgKiwgYm9vbGVhbl90KTsKKwl2b2lk ICgqbG9nKShtYWxsb2Nfem9uZV90ICosIHZvaWQgKik7CisJdm9pZCAoKmZvcmNlX2xvY2spKG1h bGxvY196b25lX3QgKik7CisJdm9pZCAoKmZvcmNlX3VubG9jaykobWFsbG9jX3pvbmVfdCAqKTsK Kwl2b2lkICgqc3RhdGlzdGljcykobWFsbG9jX3pvbmVfdCAqLCBtYWxsb2Nfc3RhdGlzdGljc190 ICopOworCWJvb2xlYW5fdCAoKnpvbmVfbG9ja2VkKShtYWxsb2Nfem9uZV90ICopOworCWJvb2xl YW5fdCAoKmVuYWJsZV9kaXNjaGFyZ2VfY2hlY2tpbmcpKG1hbGxvY196b25lX3QgKik7CisJYm9v bGVhbl90ICgqZGlzYWJsZV9kaXNjaGFyZ2VfY2hlY2tpbmcpKG1hbGxvY196b25lX3QgKik7CisJ dm9pZCAoKmRpc2NoYXJnZSkobWFsbG9jX3pvbmVfdCAqLCB2b2lkICopOworI2lmZGVmIF9fQkxP Q0tTX18KKwl2b2lkICgqZW51bWVyYXRlX2Rpc2NoYXJnZWRfcG9pbnRlcnMpKG1hbGxvY196b25l X3QgKiwgdm9pZCAoXikodm9pZCAqLCB2b2lkICopKTsKKyNlbHNlCisJdm9pZCAqZW51bWVyYXRl X3VuYXZhaWxhYmxlX3dpdGhvdXRfYmxvY2tzOworI2VuZGlmCisJdm9pZCAoKnJlaW5pdF9sb2Nr KShtYWxsb2Nfem9uZV90ICopOworfSBtYWxsb2NfaW50cm9zcGVjdGlvbl90OworCitleHRlcm4g a2Vybl9yZXR1cm5fdCBtYWxsb2NfZ2V0X2FsbF96b25lcyh0YXNrX3QsIG1lbW9yeV9yZWFkZXJf dCwgdm1fYWRkcmVzc190ICoqLCB1bnNpZ25lZCAqKTsKKworZXh0ZXJuIG1hbGxvY196b25lX3Qg Km1hbGxvY19kZWZhdWx0X3pvbmUodm9pZCk7CisKK2V4dGVybiB2b2lkIG1hbGxvY196b25lX3Jl Z2lzdGVyKG1hbGxvY196b25lX3QgKnpvbmUpOworCitleHRlcm4gdm9pZCBtYWxsb2Nfem9uZV91 bnJlZ2lzdGVyKG1hbGxvY196b25lX3QgKnpvbmUpOworCisvKgorICogVGhlIG1hbGxvY19kZWZh dWx0X3B1cmdlYWJsZV96b25lKCkgZnVuY3Rpb24gaXMgb25seSBhdmFpbGFibGUgb24gPj0gMTAu Ni4KKyAqIFdlIG5lZWQgdG8gY2hlY2sgd2hldGhlciBpdCBpcyBwcmVzZW50IGF0IHJ1bnRpbWUs IHRodXMgdGhlIHdlYWtfaW1wb3J0LgorICovCitleHRlcm4gbWFsbG9jX3pvbmVfdCAqbWFsbG9j X2RlZmF1bHRfcHVyZ2VhYmxlX3pvbmUodm9pZCkKK0pFTUFMTE9DX0FUVFIod2Vha19pbXBvcnQp OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogRGF0YS4gKi8KKworc3RhdGljIG1hbGxv Y196b25lX3QgKmRlZmF1bHRfem9uZSwgKnB1cmdlYWJsZV96b25lOworc3RhdGljIG1hbGxvY196 b25lX3QgamVtYWxsb2Nfem9uZTsKK3N0YXRpYyBzdHJ1Y3QgbWFsbG9jX2ludHJvc3BlY3Rpb25f dCBqZW1hbGxvY196b25lX2ludHJvc3BlY3Q7CitzdGF0aWMgcGlkX3Qgem9uZV9mb3JjZV9sb2Nr X3BpZCA9IC0xOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogRnVuY3Rpb24gcHJvdG90 eXBlcyBmb3Igbm9uLWlubGluZSBzdGF0aWMgZnVuY3Rpb25zLiAqLworCitzdGF0aWMgc2l6ZV90 CXpvbmVfc2l6ZShtYWxsb2Nfem9uZV90ICp6b25lLCBjb25zdCB2b2lkICpwdHIpOworc3RhdGlj IHZvaWQJKnpvbmVfbWFsbG9jKG1hbGxvY196b25lX3QgKnpvbmUsIHNpemVfdCBzaXplKTsKK3N0 YXRpYyB2b2lkCSp6b25lX2NhbGxvYyhtYWxsb2Nfem9uZV90ICp6b25lLCBzaXplX3QgbnVtLCBz aXplX3Qgc2l6ZSk7CitzdGF0aWMgdm9pZAkqem9uZV92YWxsb2MobWFsbG9jX3pvbmVfdCAqem9u ZSwgc2l6ZV90IHNpemUpOworc3RhdGljIHZvaWQJem9uZV9mcmVlKG1hbGxvY196b25lX3QgKnpv bmUsIHZvaWQgKnB0cik7CitzdGF0aWMgdm9pZAkqem9uZV9yZWFsbG9jKG1hbGxvY196b25lX3Qg KnpvbmUsIHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpOworc3RhdGljIHZvaWQJKnpvbmVfbWVtYWxp Z24obWFsbG9jX3pvbmVfdCAqem9uZSwgc2l6ZV90IGFsaWdubWVudCwKKyAgICBzaXplX3Qgc2l6 ZSk7CitzdGF0aWMgdm9pZAl6b25lX2ZyZWVfZGVmaW5pdGVfc2l6ZShtYWxsb2Nfem9uZV90ICp6 b25lLCB2b2lkICpwdHIsCisgICAgc2l6ZV90IHNpemUpOworc3RhdGljIHZvaWQJem9uZV9kZXN0 cm95KG1hbGxvY196b25lX3QgKnpvbmUpOworc3RhdGljIHVuc2lnbmVkCXpvbmVfYmF0Y2hfbWFs bG9jKHN0cnVjdCBfbWFsbG9jX3pvbmVfdCAqem9uZSwgc2l6ZV90IHNpemUsCisgICAgdm9pZCAq KnJlc3VsdHMsIHVuc2lnbmVkIG51bV9yZXF1ZXN0ZWQpOworc3RhdGljIHZvaWQJem9uZV9iYXRj aF9mcmVlKHN0cnVjdCBfbWFsbG9jX3pvbmVfdCAqem9uZSwKKyAgICB2b2lkICoqdG9fYmVfZnJl ZWQsIHVuc2lnbmVkIG51bV90b19iZV9mcmVlZCk7CitzdGF0aWMgc2l6ZV90CXpvbmVfcHJlc3N1 cmVfcmVsaWVmKHN0cnVjdCBfbWFsbG9jX3pvbmVfdCAqem9uZSwgc2l6ZV90IGdvYWwpOworc3Rh dGljIHNpemVfdAl6b25lX2dvb2Rfc2l6ZShtYWxsb2Nfem9uZV90ICp6b25lLCBzaXplX3Qgc2l6 ZSk7CitzdGF0aWMga2Vybl9yZXR1cm5fdAl6b25lX2VudW1lcmF0b3IodGFza190IHRhc2ssIHZv aWQgKmRhdGEsIHVuc2lnbmVkIHR5cGVfbWFzaywKKyAgICB2bV9hZGRyZXNzX3Qgem9uZV9hZGRy ZXNzLCBtZW1vcnlfcmVhZGVyX3QgcmVhZGVyLAorICAgIHZtX3JhbmdlX3JlY29yZGVyX3QgcmVj b3JkZXIpOworc3RhdGljIGJvb2xlYW5fdAl6b25lX2NoZWNrKG1hbGxvY196b25lX3QgKnpvbmUp Oworc3RhdGljIHZvaWQJem9uZV9wcmludChtYWxsb2Nfem9uZV90ICp6b25lLCBib29sZWFuX3Qg dmVyYm9zZSk7CitzdGF0aWMgdm9pZAl6b25lX2xvZyhtYWxsb2Nfem9uZV90ICp6b25lLCB2b2lk ICphZGRyZXNzKTsKK3N0YXRpYyB2b2lkCXpvbmVfZm9yY2VfbG9jayhtYWxsb2Nfem9uZV90ICp6 b25lKTsKK3N0YXRpYyB2b2lkCXpvbmVfZm9yY2VfdW5sb2NrKG1hbGxvY196b25lX3QgKnpvbmUp Oworc3RhdGljIHZvaWQJem9uZV9zdGF0aXN0aWNzKG1hbGxvY196b25lX3QgKnpvbmUsCisgICAg bWFsbG9jX3N0YXRpc3RpY3NfdCAqc3RhdHMpOworc3RhdGljIGJvb2xlYW5fdAl6b25lX2xvY2tl ZChtYWxsb2Nfem9uZV90ICp6b25lKTsKK3N0YXRpYyB2b2lkCXpvbmVfcmVpbml0X2xvY2sobWFs bG9jX3pvbmVfdCAqem9uZSk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogRnVu Y3Rpb25zLgorICovCisKK3N0YXRpYyBzaXplX3QKK3pvbmVfc2l6ZShtYWxsb2Nfem9uZV90ICp6 b25lLCBjb25zdCB2b2lkICpwdHIpIHsKKwkvKgorCSAqIFRoZXJlIGFwcGVhciB0byBiZSBwbGFj ZXMgd2l0aGluIERhcndpbiAoc3VjaCBhcyBzZXRlbnYoMykpIHRoYXQKKwkgKiBjYXVzZSBjYWxs cyB0byB0aGlzIGZ1bmN0aW9uIHdpdGggcG9pbnRlcnMgdGhhdCAqbm8qIHpvbmUgb3ducy4gIElm CisJICogd2Uga25ldyB0aGF0IGFsbCBwb2ludGVycyB3ZXJlIG93bmVkIGJ5ICpzb21lKiB6b25l LCB3ZSBjb3VsZCBzcGxpdAorCSAqIG91ciB6b25lIGludG8gdHdvIHBhcnRzLCBhbmQgdXNlIG9u ZSBhcyB0aGUgZGVmYXVsdCBhbGxvY2F0b3IgYW5kCisJICogdGhlIG90aGVyIGFzIHRoZSBkZWZh dWx0IGRlYWxsb2NhdG9yL3JlYWxsb2NhdG9yLiAgU2luY2UgdGhhdCB3aWxsCisJICogbm90IHdv cmsgaW4gcHJhY3RpY2UsIHdlIG11c3QgY2hlY2sgYWxsIHBvaW50ZXJzIHRvIGFzc3VyZSB0aGF0 IHRoZXkKKwkgKiByZXNpZGUgd2l0aGluIGEgbWFwcGVkIGV4dGVudCBiZWZvcmUgZGV0ZXJtaW5p bmcgc2l6ZS4KKwkgKi8KKwlyZXR1cm4gaXZzYWxsb2ModHNkbl9mZXRjaCgpLCBwdHIpOworfQor CitzdGF0aWMgdm9pZCAqCit6b25lX21hbGxvYyhtYWxsb2Nfem9uZV90ICp6b25lLCBzaXplX3Qg c2l6ZSkgeworCXJldHVybiBqZV9tYWxsb2Moc2l6ZSk7Cit9CisKK3N0YXRpYyB2b2lkICoKK3pv bmVfY2FsbG9jKG1hbGxvY196b25lX3QgKnpvbmUsIHNpemVfdCBudW0sIHNpemVfdCBzaXplKSB7 CisJcmV0dXJuIGplX2NhbGxvYyhudW0sIHNpemUpOworfQorCitzdGF0aWMgdm9pZCAqCit6b25l X3ZhbGxvYyhtYWxsb2Nfem9uZV90ICp6b25lLCBzaXplX3Qgc2l6ZSkgeworCXZvaWQgKnJldCA9 IE5VTEw7IC8qIEFzc2lnbm1lbnQgYXZvaWRzIHVzZWxlc3MgY29tcGlsZXIgd2FybmluZy4gKi8K KworCWplX3Bvc2l4X21lbWFsaWduKCZyZXQsIFBBR0UsIHNpemUpOworCisJcmV0dXJuIHJldDsK K30KKworc3RhdGljIHZvaWQKK3pvbmVfZnJlZShtYWxsb2Nfem9uZV90ICp6b25lLCB2b2lkICpw dHIpIHsKKwlpZiAoaXZzYWxsb2ModHNkbl9mZXRjaCgpLCBwdHIpICE9IDApIHsKKwkJamVfZnJl ZShwdHIpOworCQlyZXR1cm47CisJfQorCisJZnJlZShwdHIpOworfQorCitzdGF0aWMgdm9pZCAq Cit6b25lX3JlYWxsb2MobWFsbG9jX3pvbmVfdCAqem9uZSwgdm9pZCAqcHRyLCBzaXplX3Qgc2l6 ZSkgeworCWlmIChpdnNhbGxvYyh0c2RuX2ZldGNoKCksIHB0cikgIT0gMCkgeworCQlyZXR1cm4g amVfcmVhbGxvYyhwdHIsIHNpemUpOworCX0KKworCXJldHVybiByZWFsbG9jKHB0ciwgc2l6ZSk7 Cit9CisKK3N0YXRpYyB2b2lkICoKK3pvbmVfbWVtYWxpZ24obWFsbG9jX3pvbmVfdCAqem9uZSwg c2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUpIHsKKwl2b2lkICpyZXQgPSBOVUxMOyAvKiBB c3NpZ25tZW50IGF2b2lkcyB1c2VsZXNzIGNvbXBpbGVyIHdhcm5pbmcuICovCisKKwlqZV9wb3Np eF9tZW1hbGlnbigmcmV0LCBhbGlnbm1lbnQsIHNpemUpOworCisJcmV0dXJuIHJldDsKK30KKwor c3RhdGljIHZvaWQKK3pvbmVfZnJlZV9kZWZpbml0ZV9zaXplKG1hbGxvY196b25lX3QgKnpvbmUs IHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpIHsKKwlzaXplX3QgYWxsb2Nfc2l6ZTsKKworCWFsbG9j X3NpemUgPSBpdnNhbGxvYyh0c2RuX2ZldGNoKCksIHB0cik7CisJaWYgKGFsbG9jX3NpemUgIT0g MCkgeworCQlhc3NlcnQoYWxsb2Nfc2l6ZSA9PSBzaXplKTsKKwkJamVfZnJlZShwdHIpOworCQly ZXR1cm47CisJfQorCisJZnJlZShwdHIpOworfQorCitzdGF0aWMgdm9pZAorem9uZV9kZXN0cm95 KG1hbGxvY196b25lX3QgKnpvbmUpIHsKKwkvKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBuZXZlciBi ZSBjYWxsZWQuICovCisJbm90X3JlYWNoZWQoKTsKK30KKworc3RhdGljIHVuc2lnbmVkCit6b25l X2JhdGNoX21hbGxvYyhzdHJ1Y3QgX21hbGxvY196b25lX3QgKnpvbmUsIHNpemVfdCBzaXplLCB2 b2lkICoqcmVzdWx0cywKKyAgICB1bnNpZ25lZCBudW1fcmVxdWVzdGVkKSB7CisJdW5zaWduZWQg aTsKKworCWZvciAoaSA9IDA7IGkgPCBudW1fcmVxdWVzdGVkOyBpKyspIHsKKwkJcmVzdWx0c1tp XSA9IGplX21hbGxvYyhzaXplKTsKKwkJaWYgKCFyZXN1bHRzW2ldKQorCQkJYnJlYWs7CisJfQor CisJcmV0dXJuIGk7Cit9CisKK3N0YXRpYyB2b2lkCit6b25lX2JhdGNoX2ZyZWUoc3RydWN0IF9t YWxsb2Nfem9uZV90ICp6b25lLCB2b2lkICoqdG9fYmVfZnJlZWQsCisgICAgdW5zaWduZWQgbnVt X3RvX2JlX2ZyZWVkKSB7CisJdW5zaWduZWQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBudW1fdG9f YmVfZnJlZWQ7IGkrKykgeworCQl6b25lX2ZyZWUoem9uZSwgdG9fYmVfZnJlZWRbaV0pOworCQl0 b19iZV9mcmVlZFtpXSA9IE5VTEw7CisJfQorfQorCitzdGF0aWMgc2l6ZV90Cit6b25lX3ByZXNz dXJlX3JlbGllZihzdHJ1Y3QgX21hbGxvY196b25lX3QgKnpvbmUsIHNpemVfdCBnb2FsKSB7CisJ cmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzaXplX3QKK3pvbmVfZ29vZF9zaXplKG1hbGxvY196b25l X3QgKnpvbmUsIHNpemVfdCBzaXplKSB7CisJaWYgKHNpemUgPT0gMCkgeworCQlzaXplID0gMTsK Kwl9CisJcmV0dXJuIHN6X3MydShzaXplKTsKK30KKworc3RhdGljIGtlcm5fcmV0dXJuX3QKK3pv bmVfZW51bWVyYXRvcih0YXNrX3QgdGFzaywgdm9pZCAqZGF0YSwgdW5zaWduZWQgdHlwZV9tYXNr LAorICAgIHZtX2FkZHJlc3NfdCB6b25lX2FkZHJlc3MsIG1lbW9yeV9yZWFkZXJfdCByZWFkZXIs CisgICAgdm1fcmFuZ2VfcmVjb3JkZXJfdCByZWNvcmRlcikgeworCXJldHVybiBLRVJOX1NVQ0NF U1M7Cit9CisKK3N0YXRpYyBib29sZWFuX3QKK3pvbmVfY2hlY2sobWFsbG9jX3pvbmVfdCAqem9u ZSkgeworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgdm9pZAorem9uZV9wcmludChtYWxsb2Nf em9uZV90ICp6b25lLCBib29sZWFuX3QgdmVyYm9zZSkgeworfQorCitzdGF0aWMgdm9pZAorem9u ZV9sb2cobWFsbG9jX3pvbmVfdCAqem9uZSwgdm9pZCAqYWRkcmVzcykgeworfQorCitzdGF0aWMg dm9pZAorem9uZV9mb3JjZV9sb2NrKG1hbGxvY196b25lX3QgKnpvbmUpIHsKKwlpZiAoaXN0aHJl YWRlZCkgeworCQkvKgorCQkgKiBTZWUgdGhlIG5vdGUgaW4gem9uZV9mb3JjZV91bmxvY2ssIGJl bG93LCB0byBzZWUgd2h5IHdlIG5lZWQKKwkJICogdGhpcy4KKwkJICovCisJCWFzc2VydCh6b25l X2ZvcmNlX2xvY2tfcGlkID09IC0xKTsKKwkJem9uZV9mb3JjZV9sb2NrX3BpZCA9IGdldHBpZCgp OworCQlqZW1hbGxvY19wcmVmb3JrKCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorem9uZV9mb3Jj ZV91bmxvY2sobWFsbG9jX3pvbmVfdCAqem9uZSkgeworCS8qCisJICogem9uZV9mb3JjZV9sb2Nr IGFuZCB6b25lX2ZvcmNlX3VubG9jayBhcmUgdGhlIGVudHJ5IHBvaW50cyB0byB0aGUKKwkgKiBm b3JraW5nIG1hY2hpbmVyeSBvbiBPUyBYLiAgVGhlIHRyaWNreSB0aGluZyBpcywgdGhlIGNoaWxk IGlzIG5vdAorCSAqIGFsbG93ZWQgdG8gdW5sb2NrIG11dGV4ZXMgbG9ja2VkIGluIHRoZSBwYXJl bnQsIGV2ZW4gaWYgb3duZWQgYnkgdGhlCisJICogZm9ya2luZyB0aHJlYWQgKGFuZCB0aGUgbXV0 ZXggdHlwZSB3ZSB1c2UgaW4gT1MgWCB3aWxsIGZhaWwgYW4gYXNzZXJ0CisJICogaWYgd2UgdHJ5 KS4gIEluIHRoZSBjaGlsZCwgd2UgY2FuIGdldCBhd2F5IHdpdGggcmVpbml0aWFsaXppbmcgYWxs CisJICogdGhlIG11dGV4ZXMsIHdoaWNoIGhhcyB0aGUgZWZmZWN0IG9mIHVubG9ja2luZyB0aGVt LiAgSW4gdGhlIHBhcmVudCwKKwkgKiBkb2luZyB0aGlzIHdvdWxkIG1lYW4gd2Ugd291bGRuJ3Qg d2FrZSBhbnkgd2FpdGVycyBibG9ja2VkIG9uIHRoZQorCSAqIG11dGV4ZXMgd2UgdW5sb2NrLiAg U28sIHdlIHJlY29yZCB0aGUgcGlkIG9mIHRoZSBjdXJyZW50IHRocmVhZCBpbgorCSAqIHpvbmVf Zm9yY2VfbG9jaywgYW5kIHVzZSB0aGF0IHRvIGRldGVjdCBpZiB3ZSdyZSBpbiB0aGUgcGFyZW50 IG9yCisJICogY2hpbGQgaGVyZSwgdG8gZGVjaWRlIHdoaWNoIHVubG9jayBsb2dpYyB3ZSBuZWVk LgorCSAqLworCWlmIChpc3RocmVhZGVkKSB7CisJCWFzc2VydCh6b25lX2ZvcmNlX2xvY2tfcGlk ICE9IC0xKTsKKwkJaWYgKGdldHBpZCgpID09IHpvbmVfZm9yY2VfbG9ja19waWQpIHsKKwkJCWpl bWFsbG9jX3Bvc3Rmb3JrX3BhcmVudCgpOworCQl9IGVsc2UgeworCQkJamVtYWxsb2NfcG9zdGZv cmtfY2hpbGQoKTsKKwkJfQorCQl6b25lX2ZvcmNlX2xvY2tfcGlkID0gLTE7CisJfQorfQorCitz dGF0aWMgdm9pZAorem9uZV9zdGF0aXN0aWNzKG1hbGxvY196b25lX3QgKnpvbmUsIG1hbGxvY19z dGF0aXN0aWNzX3QgKnN0YXRzKSB7CisJLyogV2UgbWFrZSBubyBlZmZvcnQgdG8gYWN0dWFsbHkg ZmlsbCB0aGUgdmFsdWVzICovCisJc3RhdHMtPmJsb2Nrc19pbl91c2UgPSAwOworCXN0YXRzLT5z aXplX2luX3VzZSA9IDA7CisJc3RhdHMtPm1heF9zaXplX2luX3VzZSA9IDA7CisJc3RhdHMtPnNp emVfYWxsb2NhdGVkID0gMDsKK30KKworc3RhdGljIGJvb2xlYW5fdAorem9uZV9sb2NrZWQobWFs bG9jX3pvbmVfdCAqem9uZSkgeworCS8qIFByZXRlbmQgbm8gbG9jayBpcyBiZWluZyBoZWxkICov CisJcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgdm9pZAorem9uZV9yZWluaXRfbG9jayhtYWxs b2Nfem9uZV90ICp6b25lKSB7CisJLyogQXMgb2YgT1NYIDEwLjEyLCB0aGlzIGZ1bmN0aW9uIGlz IG9ubHkgdXNlZCB3aGVuIGZvcmNlX3VubG9jayB3b3VsZAorCSAqIGJlIHVzZWQgaWYgdGhlIHpv bmUgdmVyc2lvbiB3ZXJlIDwgOS4gU28ganVzdCB1c2UgZm9yY2VfdW5sb2NrLiAqLworCXpvbmVf Zm9yY2VfdW5sb2NrKHpvbmUpOworfQorCitzdGF0aWMgdm9pZAorem9uZV9pbml0KHZvaWQpIHsK KwlqZW1hbGxvY196b25lLnNpemUgPSB6b25lX3NpemU7CisJamVtYWxsb2Nfem9uZS5tYWxsb2Mg PSB6b25lX21hbGxvYzsKKwlqZW1hbGxvY196b25lLmNhbGxvYyA9IHpvbmVfY2FsbG9jOworCWpl bWFsbG9jX3pvbmUudmFsbG9jID0gem9uZV92YWxsb2M7CisJamVtYWxsb2Nfem9uZS5mcmVlID0g em9uZV9mcmVlOworCWplbWFsbG9jX3pvbmUucmVhbGxvYyA9IHpvbmVfcmVhbGxvYzsKKwlqZW1h bGxvY196b25lLmRlc3Ryb3kgPSB6b25lX2Rlc3Ryb3k7CisJamVtYWxsb2Nfem9uZS56b25lX25h bWUgPSAiamVtYWxsb2Nfem9uZSI7CisJamVtYWxsb2Nfem9uZS5iYXRjaF9tYWxsb2MgPSB6b25l X2JhdGNoX21hbGxvYzsKKwlqZW1hbGxvY196b25lLmJhdGNoX2ZyZWUgPSB6b25lX2JhdGNoX2Zy ZWU7CisJamVtYWxsb2Nfem9uZS5pbnRyb3NwZWN0ID0gJmplbWFsbG9jX3pvbmVfaW50cm9zcGVj dDsKKwlqZW1hbGxvY196b25lLnZlcnNpb24gPSA5OworCWplbWFsbG9jX3pvbmUubWVtYWxpZ24g PSB6b25lX21lbWFsaWduOworCWplbWFsbG9jX3pvbmUuZnJlZV9kZWZpbml0ZV9zaXplID0gem9u ZV9mcmVlX2RlZmluaXRlX3NpemU7CisJamVtYWxsb2Nfem9uZS5wcmVzc3VyZV9yZWxpZWYgPSB6 b25lX3ByZXNzdXJlX3JlbGllZjsKKworCWplbWFsbG9jX3pvbmVfaW50cm9zcGVjdC5lbnVtZXJh dG9yID0gem9uZV9lbnVtZXJhdG9yOworCWplbWFsbG9jX3pvbmVfaW50cm9zcGVjdC5nb29kX3Np emUgPSB6b25lX2dvb2Rfc2l6ZTsKKwlqZW1hbGxvY196b25lX2ludHJvc3BlY3QuY2hlY2sgPSB6 b25lX2NoZWNrOworCWplbWFsbG9jX3pvbmVfaW50cm9zcGVjdC5wcmludCA9IHpvbmVfcHJpbnQ7 CisJamVtYWxsb2Nfem9uZV9pbnRyb3NwZWN0LmxvZyA9IHpvbmVfbG9nOworCWplbWFsbG9jX3pv bmVfaW50cm9zcGVjdC5mb3JjZV9sb2NrID0gem9uZV9mb3JjZV9sb2NrOworCWplbWFsbG9jX3pv bmVfaW50cm9zcGVjdC5mb3JjZV91bmxvY2sgPSB6b25lX2ZvcmNlX3VubG9jazsKKwlqZW1hbGxv Y196b25lX2ludHJvc3BlY3Quc3RhdGlzdGljcyA9IHpvbmVfc3RhdGlzdGljczsKKwlqZW1hbGxv Y196b25lX2ludHJvc3BlY3Quem9uZV9sb2NrZWQgPSB6b25lX2xvY2tlZDsKKwlqZW1hbGxvY196 b25lX2ludHJvc3BlY3QuZW5hYmxlX2Rpc2NoYXJnZV9jaGVja2luZyA9IE5VTEw7CisJamVtYWxs b2Nfem9uZV9pbnRyb3NwZWN0LmRpc2FibGVfZGlzY2hhcmdlX2NoZWNraW5nID0gTlVMTDsKKwlq ZW1hbGxvY196b25lX2ludHJvc3BlY3QuZGlzY2hhcmdlID0gTlVMTDsKKyNpZmRlZiBfX0JMT0NL U19fCisJamVtYWxsb2Nfem9uZV9pbnRyb3NwZWN0LmVudW1lcmF0ZV9kaXNjaGFyZ2VkX3BvaW50 ZXJzID0gTlVMTDsKKyNlbHNlCisJamVtYWxsb2Nfem9uZV9pbnRyb3NwZWN0LmVudW1lcmF0ZV91 bmF2YWlsYWJsZV93aXRob3V0X2Jsb2NrcyA9IE5VTEw7CisjZW5kaWYKKwlqZW1hbGxvY196b25l X2ludHJvc3BlY3QucmVpbml0X2xvY2sgPSB6b25lX3JlaW5pdF9sb2NrOworfQorCitzdGF0aWMg bWFsbG9jX3pvbmVfdCAqCit6b25lX2RlZmF1bHRfZ2V0KHZvaWQpIHsKKwltYWxsb2Nfem9uZV90 ICoqem9uZXMgPSBOVUxMOworCXVuc2lnbmVkIGludCBudW1fem9uZXMgPSAwOworCisJLyoKKwkg KiBPbiBPU1ggMTAuMTIsIG1hbGxvY19kZWZhdWx0X3pvbmUgcmV0dXJucyBhIHNwZWNpYWwgem9u ZSB0aGF0IGlzIG5vdAorCSAqIHByZXNlbnQgaW4gdGhlIGxpc3Qgb2YgcmVnaXN0ZXJlZCB6b25l cy4gVGhhdCB6b25lIHVzZXMgYSAibGl0ZSB6b25lIgorCSAqIGlmIG9uZSBpcyBwcmVzZW50IChh cHBhcmVudGx5IGVuYWJsZWQgd2hlbiBtYWxsb2Mgc3RhY2sgbG9nZ2luZyBpcworCSAqIGVuYWJs ZWQpLCBvciB0aGUgZmlyc3QgcmVnaXN0ZXJlZCB6b25lIG90aGVyd2lzZS4gSW4gcHJhY3RpY2Ug dGhpcworCSAqIG1lYW5zIHVubGVzcyBtYWxsb2Mgc3RhY2sgbG9nZ2luZyBpcyBlbmFibGVkLCB0 aGUgZmlyc3QgcmVnaXN0ZXJlZAorCSAqIHpvbmUgaXMgdGhlIGRlZmF1bHQuICBTbyBnZXQgdGhl IGxpc3Qgb2Ygem9uZXMgdG8gZ2V0IHRoZSBmaXJzdCBvbmUsCisJICogaW5zdGVhZCBvZiByZWx5 aW5nIG9uIG1hbGxvY19kZWZhdWx0X3pvbmUuCisJICovCisJaWYgKEtFUk5fU1VDQ0VTUyAhPSBt YWxsb2NfZ2V0X2FsbF96b25lcygwLCBOVUxMLAorCSAgICAodm1fYWRkcmVzc190KiopJnpvbmVz LCAmbnVtX3pvbmVzKSkgeworCQkvKgorCQkgKiBSZXNldCB0aGUgdmFsdWUgaW4gY2FzZSB0aGUg ZmFpbHVyZSBoYXBwZW5lZCBhZnRlciBpdCB3YXMKKwkJICogc2V0LgorCQkgKi8KKwkJbnVtX3pv bmVzID0gMDsKKwl9CisKKwlpZiAobnVtX3pvbmVzKSB7CisJCXJldHVybiB6b25lc1swXTsKKwl9 CisKKwlyZXR1cm4gbWFsbG9jX2RlZmF1bHRfem9uZSgpOworfQorCisvKiBBcyB3cml0dGVuLCB0 aGlzIGZ1bmN0aW9uIGNhbiBvbmx5IHByb21vdGUgamVtYWxsb2Nfem9uZS4gKi8KK3N0YXRpYyB2 b2lkCit6b25lX3Byb21vdGUodm9pZCkgeworCW1hbGxvY196b25lX3QgKnpvbmU7CisKKwlkbyB7 CisJCS8qCisJCSAqIFVucmVnaXN0ZXIgYW5kIHJlcmVnaXN0ZXIgdGhlIGRlZmF1bHQgem9uZS4g IE9uIE9TWCA+PSAxMC42LAorCQkgKiB1bnJlZ2lzdGVyaW5nIHRha2VzIHRoZSBsYXN0IHJlZ2lz dGVyZWQgem9uZSBhbmQgcGxhY2VzIGl0CisJCSAqIGF0IHRoZSBsb2NhdGlvbiBvZiB0aGUgc3Bl Y2lmaWVkIHpvbmUuICBVbnJlZ2lzdGVyaW5nIHRoZQorCQkgKiBkZWZhdWx0IHpvbmUgdGh1cyBt YWtlcyB0aGUgbGFzdCByZWdpc3RlcmVkIG9uZSB0aGUgZGVmYXVsdC4KKwkJICogT24gT1NYIDwg MTAuNiwgdW5yZWdpc3RlcmluZyBzaGlmdHMgYWxsIHJlZ2lzdGVyZWQgem9uZXMuCisJCSAqIFRo ZSBmaXJzdCByZWdpc3RlcmVkIHpvbmUgdGhlbiBiZWNvbWVzIHRoZSBkZWZhdWx0LgorCQkgKi8K KwkJbWFsbG9jX3pvbmVfdW5yZWdpc3RlcihkZWZhdWx0X3pvbmUpOworCQltYWxsb2Nfem9uZV9y ZWdpc3RlcihkZWZhdWx0X3pvbmUpOworCisJCS8qCisJCSAqIE9uIE9TWCAxMC42LCBoYXZpbmcg dGhlIGRlZmF1bHQgcHVyZ2VhYmxlIHpvbmUgYXBwZWFyIGJlZm9yZQorCQkgKiB0aGUgZGVmYXVs dCB6b25lIG1ha2VzIHNvbWUgdGhpbmdzIGNyYXNoIGJlY2F1c2UgaXQgdGhpbmtzIGl0CisJCSAq IG93bnMgdGhlIGRlZmF1bHQgem9uZSBhbGxvY2F0ZWQgcG9pbnRlcnMuICBXZSB0aHVzCisJCSAq IHVucmVnaXN0ZXIvcmUtcmVnaXN0ZXIgaXQgaW4gb3JkZXIgdG8gZW5zdXJlIGl0J3MgYWx3YXlz CisJCSAqIGFmdGVyIHRoZSBkZWZhdWx0IHpvbmUuICBPbiBPU1ggPCAxMC42LCB0aGVyZSBpcyBu byBwdXJnZWFibGUKKwkJICogem9uZSwgc28gdGhpcyBkb2VzIG5vdGhpbmcuICBPbiBPU1ggPj0g MTAuNiwgdW5yZWdpc3RlcmluZworCQkgKiByZXBsYWNlcyB0aGUgcHVyZ2VhYmxlIHpvbmUgd2l0 aCB0aGUgbGFzdCByZWdpc3RlcmVkIHpvbmUKKwkJICogYWJvdmUsIGkuZS4gdGhlIGRlZmF1bHQg em9uZS4gIFJlZ2lzdGVyaW5nIGl0IGFnYWluIHRoZW4gcHV0cworCQkgKiBpdCBhdCB0aGUgZW5k LCBvYnZpb3VzbHkgYWZ0ZXIgdGhlIGRlZmF1bHQgem9uZS4KKwkJICovCisJCWlmIChwdXJnZWFi bGVfem9uZSAhPSBOVUxMKSB7CisJCQltYWxsb2Nfem9uZV91bnJlZ2lzdGVyKHB1cmdlYWJsZV96 b25lKTsKKwkJCW1hbGxvY196b25lX3JlZ2lzdGVyKHB1cmdlYWJsZV96b25lKTsKKwkJfQorCisJ CXpvbmUgPSB6b25lX2RlZmF1bHRfZ2V0KCk7CisJfSB3aGlsZSAoem9uZSAhPSAmamVtYWxsb2Nf em9uZSk7Cit9CisKK0pFTUFMTE9DX0FUVFIoY29uc3RydWN0b3IpCit2b2lkCit6b25lX3JlZ2lz dGVyKHZvaWQpIHsKKwkvKgorCSAqIElmIHNvbWV0aGluZyBlbHNlIHJlcGxhY2VkIHRoZSBzeXN0 ZW0gZGVmYXVsdCB6b25lIGFsbG9jYXRvciwgZG9uJ3QKKwkgKiByZWdpc3RlciBqZW1hbGxvYydz LgorCSAqLworCWRlZmF1bHRfem9uZSA9IHpvbmVfZGVmYXVsdF9nZXQoKTsKKwlpZiAoIWRlZmF1 bHRfem9uZS0+em9uZV9uYW1lIHx8IHN0cmNtcChkZWZhdWx0X3pvbmUtPnpvbmVfbmFtZSwKKwkg ICAgIkRlZmF1bHRNYWxsb2Nab25lIikgIT0gMCkgeworCQlyZXR1cm47CisJfQorCisJLyoKKwkg KiBUaGUgZGVmYXVsdCBwdXJnZWFibGUgem9uZSBpcyBjcmVhdGVkIGxhemlseSBieSBPU1gncyBs aWJjLiAgSXQgdXNlcworCSAqIHRoZSBkZWZhdWx0IHpvbmUgd2hlbiBpdCBpcyBjcmVhdGVkIGZv ciAic21hbGwiIGFsbG9jYXRpb25zCisJICogKDwgMTUgS2lCKSwgYnV0IGFzc3VtZXMgdGhlIGRl ZmF1bHQgem9uZSBpcyBhIHNjYWxhYmxlX3pvbmUuICBUaGlzCisJICogb2J2aW91c2x5IGZhaWxz IHdoZW4gdGhlIGRlZmF1bHQgem9uZSBpcyB0aGUgamVtYWxsb2Mgem9uZSwgc28KKwkgKiBtYWxs b2NfZGVmYXVsdF9wdXJnZWFibGVfem9uZSgpIGlzIGNhbGxlZCBiZWZvcmVoYW5kIHNvIHRoYXQg dGhlCisJICogZGVmYXVsdCBwdXJnZWFibGUgem9uZSBpcyBjcmVhdGVkIHdoZW4gdGhlIGRlZmF1 bHQgem9uZSBpcyBzdGlsbAorCSAqIGEgc2NhbGFibGVfem9uZS4gIEFzIHB1cmdlYWJsZSB6b25l cyBvbmx5IGV4aXN0IG9uID49IDEwLjYsIHdlIG5lZWQKKwkgKiB0byBjaGVjayBmb3IgdGhlIGV4 aXN0ZW5jZSBvZiBtYWxsb2NfZGVmYXVsdF9wdXJnZWFibGVfem9uZSgpIGF0CisJICogcnVuIHRp bWUuCisJICovCisJcHVyZ2VhYmxlX3pvbmUgPSAobWFsbG9jX2RlZmF1bHRfcHVyZ2VhYmxlX3pv bmUgPT0gTlVMTCkgPyBOVUxMIDoKKwkgICAgbWFsbG9jX2RlZmF1bHRfcHVyZ2VhYmxlX3pvbmUo KTsKKworCS8qIFJlZ2lzdGVyIHRoZSBjdXN0b20gem9uZS4gIEF0IHRoaXMgcG9pbnQgaXQgd29u J3QgYmUgdGhlIGRlZmF1bHQuICovCisJem9uZV9pbml0KCk7CisJbWFsbG9jX3pvbmVfcmVnaXN0 ZXIoJmplbWFsbG9jX3pvbmUpOworCisJLyogUHJvbW90ZSB0aGUgY3VzdG9tIHpvbmUgdG8gYmUg ZGVmYXVsdC4gKi8KKwl6b25lX3Byb21vdGUoKTsKK30KCmRpZmYgLS1naXQgYS8zODktZHMtYmFz ZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L2FuYWx5emUvcHJvZl9iaWFzLmMgYi8z ODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L2FuYWx5emUvcHJvZl9i aWFzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTk2Y2E5NAotLS0gL2Rl di9udWxsCisrKyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3Qv YW5hbHl6ZS9wcm9mX2JpYXMuYwpAQCAtMCwwICsxLDYwIEBACisjaW5jbHVkZSAidGVzdC9qZW1h bGxvY190ZXN0LmgiCisKKy8qCisgKiBUaGlzIGlzIGEgaGVscGVyIHV0aWxpdHksIG9ubHkgbWVh bnQgdG8gYmUgcnVuIG1hbnVhbGx5IChhbmQsIGZvciBleGFtcGxlLAorICogZG9lc24ndCBjaGVj ayBmb3IgZmFpbHVyZXMsIHRyeSB0byBza2lwIGV4ZWN1dGlvbiBpbiBub24tcHJvZiBtb2Rlcywg ZXRjLikuCisgKiBJdCBydW5zLCBhbGxvY2F0ZXMgb2JqZWN0cyBvZiB0d28gZGlmZmVyZW50IHNp emVzIGZyb20gdGhlIHNhbWUgc3RhY2sgdHJhY2UsCisgKiBhbmQgZXhpdHMuCisgKgorICogVGhl IGlkZWEgaXMgdGhhdCBzb21lIGh1bWFuIG9wZXJhdG9yIHdpbGwgcnVuIGl0IGxpa2U6CisgKiAg ICAgTUFMTE9DX0NPTkY9InByb2Y6dHJ1ZSxwcm9mX2ZpbmFsOnRydWUiIHRlc3QvYW5hbHl6ZS9w cm9mX2JpYXMKKyAqIGFuZCBtYW51YWxseSBpbnNwZWN0IHRoZSByZXN1bHRzLgorICoKKyAqIFRo ZSByZXN1bHRzIHNob3VsZCBiZToKKyAqIGplcHJvZiAtLXRleHQgdGVzdC9hbmFseXplL3Byb2Zf YmlhcyAtLWludXNlX3NwYWNlIGplcHJvZi48cGlkPi4wLmYuaGVhcDoKKyAqIAlhcm91bmQgMTAy NCBNQgorICogamVwcm9mIC0tdGV4dCB0ZXN0L2FuYWx5emUvcHJvZl9iaWFzIC0taW51c2Vfb2Jq ZWN0cyBqZXByb2YuPHBpZD4uMC5mLmhlYXA6CisgKiAJYXJvdW5kIDMzNTU0NDQ4ID0gMTYgKyAz MiAqIDEwMjQgKiAxMDI0CisgKgorICogQW5kLCBpZiBwcm9mX2FjY3VtIGlzIG9uOgorICogamVw cm9mIC0tdGV4dCB0ZXN0L2FuYWx5emUvcHJvZl9iaWFzIC0tYWxsb2Nfc3BhY2UgamVwcm9mLjxw aWQ+LjAuZi5oZWFwOgorICogICAgIGFyb3VuZCAyMDQ4IE1CCisgKiBqZXByb2YgLS10ZXh0IHRl c3QvYW5hbHl6ZS9wcm9mX2JpYXMgLS1hbGxvY19vYmplY3RzIGplcHJvZi48cGlkPi4wLmYuaGVh cDoKKyAqIAlhcm91bmQgNjcxMDg4OTYgPSAyICogKDE2ICsgMzIgKiAxMDI0ICogMTAyNCkKKyAq LworCitzdGF0aWMgdm9pZAorbW9ja19iYWNrdHJhY2Uodm9pZCAqKnZlYywgdW5zaWduZWQgKmxl biwgdW5zaWduZWQgbWF4X2xlbikgeworCSpsZW4gPSA0OworCXZlY1swXSA9ICh2b2lkICopMHgx MTE7CisJdmVjWzFdID0gKHZvaWQgKikweDIyMjsKKwl2ZWNbMl0gPSAodm9pZCAqKTB4MzMzOwor CXZlY1szXSA9ICh2b2lkICopMHg0NDQ7Cit9CisKK3N0YXRpYyB2b2lkCitkb19hbGxvY3Moc2l6 ZV90IHN6LCBzaXplX3QgY250LCBib29sIGRvX2ZyZWVzKSB7CisJZm9yIChzaXplX3QgaSA9IDA7 IGkgPCBjbnQ7IGkrKykgeworCQl2b2lkICpwdHIgPSBtYWxsb2N4KHN6LCAwKTsKKwkJYXNzZXJ0 X3B0cl9ub3RfbnVsbChwdHIsICJVbmV4cGVjdGVkIG1hbGxvY3ggZmFpbHVyZSIpOworCQlpZiAo ZG9fZnJlZXMpIHsKKwkJCWRhbGxvY3gocHRyLCAwKTsKKwkJfQorCX0KK30KKworaW50CittYWlu KHZvaWQpIHsKKwlzaXplX3QgbGdfcHJvZl9zYW1wbGVfbG9jYWwgPSAxOTsKKwlpbnQgZXJyID0g bWFsbGN0bCgicHJvZi5yZXNldCIsIE5VTEwsIE5VTEwsCisJICAgICh2b2lkICopJmxnX3Byb2Zf c2FtcGxlX2xvY2FsLCBzaXplb2YobGdfcHJvZl9zYW1wbGVfbG9jYWwpKTsKKwlhc3NlcnQoZXJy ID09IDApOworCisJcHJvZl9iYWNrdHJhY2VfaG9va19zZXQobW9ja19iYWNrdHJhY2UpOworCWRv X2FsbG9jcygxNiwgMzIgKiAxMDI0ICogMTAyNCwgLyogZG9fZnJlZXMgKi8gdHJ1ZSk7CisJZG9f YWxsb2NzKDMyICogMTAyNCogMTAyNCwgMTYsIC8qIGRvX2ZyZWVzICovIHRydWUpOworCWRvX2Fs bG9jcygxNiwgMzIgKiAxMDI0ICogMTAyNCwgLyogZG9fZnJlZXMgKi8gZmFsc2UpOworCWRvX2Fs bG9jcygzMiAqIDEwMjQqIDEwMjQsIDE2LCAvKiBkb19mcmVlcyAqLyBmYWxzZSk7CisKKwlyZXR1 cm4gMDsKK30KCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01 LjMuMC90ZXN0L2FuYWx5emUvcmFuZC5jIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxs b2MtNS4zLjAvdGVzdC9hbmFseXplL3JhbmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwLi5iYjIwYjA2Ci0tLSAvZGV2L251bGwKKysrIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVp bGQvamVtYWxsb2MtNS4zLjAvdGVzdC9hbmFseXplL3JhbmQuYwpAQCAtMCwwICsxLDI3NiBAQAor I2luY2x1ZGUgInRlc3QvamVtYWxsb2NfdGVzdC5oIgorCisvKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq LworCisvKgorICogR2VuZXJhbCBwdXJwb3NlIHRvb2wgZm9yIGV4YW1pbmluZyByYW5kb20gbnVt YmVyIGRpc3RyaWJ1dGlvbnMuCisgKgorICogSW5wdXQgLQorICogKGEpIGEgcmFuZG9tIG51bWJl ciBnZW5lcmF0b3IsIGFuZAorICogKGIpIHRoZSBidWNrZXRzOgorICogICAgICgxKSBudW1iZXIg b2YgYnVja2V0cywKKyAqICAgICAoMikgd2lkdGggb2YgZWFjaCBidWNrZXQsIGluIGxvZyBzY2Fs ZSwKKyAqICAgICAoMykgZXhwZWN0ZWQgbWVhbiBhbmQgc3RkZGV2IG9mIHRoZSBjb3VudCBvZiBy YW5kb20gbnVtYmVycyBpbiBlYWNoCisgKiAgICAgICAgIGJ1Y2tldCwgYW5kCisgKiAoYykgbnVt YmVyIG9mIGl0ZXJhdGlvbnMgdG8gaW52b2tlIHRoZSBnZW5lcmF0b3IuCisgKgorICogVGhlIHBy b2dyYW0gZ2VuZXJhdGVzIHRoZSBzcGVjaWZpZWQgYW1vdW50IG9mIHJhbmRvbSBudW1iZXJzLCBh bmQgYXNzZXNzIGhvdworICogd2VsbCB0aGV5IGNvbmZvcm0gdG8gdGhlIGV4cGVjdGF0aW9uczog Zm9yIGVhY2ggYnVja2V0LCBvdXRwdXQgLQorICogKGEpIHRoZSAoZ2l2ZW4pIGV4cGVjdGVkIG1l YW4gYW5kIHN0ZGRldiwKKyAqIChiKSB0aGUgYWN0dWFsIGNvdW50IGFuZCBhbnkgaW50ZXJlc3Rp bmcgbGV2ZWwgb2YgZGV2aWF0aW9uOgorICogICAgICgxKSB+NjglIGJ1Y2tldHMgc2hvdWxkIHNo b3cgbm8gaW50ZXJlc3RpbmcgZGV2aWF0aW9uLCBtZWFuaW5nIGEKKyAqICAgICAgICAgZGV2aWF0 aW9uIGxlc3MgdGhhbiBzdGRkZXYgZnJvbSB0aGUgZXhwZWN0YXRpb247CisgKiAgICAgKDIpIH4y NyUgYnVja2V0cyBzaG91bGQgc2hvdyAnKycgLyAnLScsIG1lYW5pbmcgYSBkZXZpYXRpb24gaW4g dGhlIHJhbmdlCisgKiAgICAgICAgIG9mIFtzdGRkZXYsIDIgKiBzdGRkZXYpIGZyb20gdGhlIGV4 cGVjdGF0aW9uOworICogICAgICgzKSB+NCUgYnVja2V0cyBzaG91bGQgc2hvdyAnKysnIC8gJy0t JywgbWVhbmluZyBhIGRldmlhdGlvbiBpbiB0aGUKKyAqICAgICAgICAgcmFuZ2Ugb2YgWzIgKiBz dGRkZXYsIDMgKiBzdGRkZXYpIGZyb20gdGhlIGV4cGVjdGF0aW9uOyBhbmQKKyAqICAgICAoNCkg bGVzcyB0aGFuIDAuMyUgYnVja2V0cyBzaG91bGQgc2hvdyBtb3JlIHRoYW4gdHdvICcrJ3MgLyAn LSdzLgorICoKKyAqIFRlY2huaWNhbCByZW1hcmtzOgorICogKGEpIFRoZSBnZW5lcmF0b3IgaXMg ZXhwZWN0ZWQgdG8gb3V0cHV0IHVpbnQ2NF90IG51bWJlcnMsIHNvIHlvdSBtaWdodCBuZWVkCisg KiAgICAgdG8gZGVmaW5lIGEgd3JhcHBlci4KKyAqIChiKSBUaGUgYnVja2V0cyBtdXN0IGJlIG9m IGVxdWFsIHdpZHRoIGFuZCB0aGUgbG93ZXN0IGJ1Y2tldCBzdGFydHMgYXQKKyAqICAgICBbMCwg Ml5sZ19idWNrZXRfd2lkdGggLSAxKS4KKyAqIChjKSBBbnkgZ2VuZXJhdGVkIG51bWJlciA+PSBu X2J1Y2tldCAqIDJebGdfYnVja2V0X3dpZHRoIHdpbGwgYmUgY291bnRlZAorICogICAgIHRvd2Fy ZHMgdGhlIGxhc3QgYnVja2V0OyB0aGUgZXhwZWN0ZWQgbWVhbiBhbmQgc3RkZGV2IHByb3ZpZGVk IHNob3VsZAorICogICAgIGFsc28gcmVmbGVjdCB0aGF0LgorICogKGQpIFRoZSBudW1iZXIgb2Yg aXRlcmF0aW9ucyBpcyBhZHZpc2VkIHRvIGJlIGRldGVybWluZWQgc28gdGhhdCB0aGUgYnVja2V0 CisgKiAgICAgd2l0aCB0aGUgbWluaW1hbCBleHBlY3RlZCBwcm9wb3J0aW9uIGdldHMgYSBzdWZm aWNpZW50IGNvdW50LgorICovCisKK3N0YXRpYyB2b2lkCitmaWxsKHNpemVfdCBhW10sIGNvbnN0 IHNpemVfdCBuLCBjb25zdCBzaXplX3QgaykgeworCWZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbjsg KytpKSB7CisJCWFbaV0gPSBrOworCX0KK30KKworc3RhdGljIHZvaWQKK2NvbGxlY3RfYnVja2V0 cyh1aW50NjRfdCAoKmdlbikodm9pZCAqKSwgdm9pZCAqb3BhcXVlLCBzaXplX3QgYnVja2V0c1td LAorICAgIGNvbnN0IHNpemVfdCBuX2J1Y2tldCwgY29uc3Qgc2l6ZV90IGxnX2J1Y2tldF93aWR0 aCwgY29uc3Qgc2l6ZV90IG5faXRlcikgeworCWZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbl9pdGVy OyArK2kpIHsKKwkJdWludDY0X3QgbnVtID0gZ2VuKG9wYXF1ZSk7CisJCXVpbnQ2NF90IGJ1Y2tl dF9pZCA9IG51bSA+PiBsZ19idWNrZXRfd2lkdGg7CisJCWlmIChidWNrZXRfaWQgPj0gbl9idWNr ZXQpIHsKKwkJCWJ1Y2tldF9pZCA9IG5fYnVja2V0IC0gMTsKKwkJfQorCQkrK2J1Y2tldHNbYnVj a2V0X2lkXTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitwcmludF9idWNrZXRzKGNvbnN0IHNpemVf dCBidWNrZXRzW10sIGNvbnN0IHNpemVfdCBtZWFuc1tdLAorICAgIGNvbnN0IHNpemVfdCBzdGRk ZXZzW10sIGNvbnN0IHNpemVfdCBuX2J1Y2tldCkgeworCWZvciAoc2l6ZV90IGkgPSAwOyBpIDwg bl9idWNrZXQ7ICsraSkgeworCQltYWxsb2NfcHJpbnRmKCIlenU6XHRtZWFuID0gJXp1LFx0c3Rk ZGV2ID0gJXp1LFx0YnVja2V0ID0gJXp1IiwKKwkJICAgIGksIG1lYW5zW2ldLCBzdGRkZXZzW2ld LCBidWNrZXRzW2ldKTsKKworCQkvKiBNYWtlIHN1cmUgdGhlcmUncyBubyBvdmVyZmxvdy4gKi8K KwkJYXNzZXJ0KGJ1Y2tldHNbaV0gKyBzdGRkZXZzW2ldID49IHN0ZGRldnNbaV0pOworCQlhc3Nl cnQobWVhbnNbaV0gKyBzdGRkZXZzW2ldID49IHN0ZGRldnNbaV0pOworCisJCWlmIChidWNrZXRz W2ldICsgc3RkZGV2c1tpXSA8PSBtZWFuc1tpXSkgeworCQkJbWFsbG9jX3dyaXRlKCIgIik7CisJ CQlmb3IgKHNpemVfdCB0ID0gbWVhbnNbaV0gLSBidWNrZXRzW2ldOyB0ID49IHN0ZGRldnNbaV07 CisJCQkgICAgdCAtPSBzdGRkZXZzW2ldKSB7CisJCQkJbWFsbG9jX3dyaXRlKCItIik7CisJCQl9 CisJCX0gZWxzZSBpZiAoYnVja2V0c1tpXSA+PSBtZWFuc1tpXSArIHN0ZGRldnNbaV0pIHsKKwkJ CW1hbGxvY193cml0ZSgiICIpOworCQkJZm9yIChzaXplX3QgdCA9IGJ1Y2tldHNbaV0gLSBtZWFu c1tpXTsgdCA+PSBzdGRkZXZzW2ldOworCQkJICAgIHQgLT0gc3RkZGV2c1tpXSkgeworCQkJCW1h bGxvY193cml0ZSgiKyIpOworCQkJfQorCQl9CisJCW1hbGxvY193cml0ZSgiXG4iKTsKKwl9Cit9 CisKK3N0YXRpYyB2b2lkCitidWNrZXRfYW5hbHlzaXModWludDY0X3QgKCpnZW4pKHZvaWQgKiks IHZvaWQgKm9wYXF1ZSwgc2l6ZV90IGJ1Y2tldHNbXSwKKyAgICBjb25zdCBzaXplX3QgbWVhbnNb XSwgY29uc3Qgc2l6ZV90IHN0ZGRldnNbXSwgY29uc3Qgc2l6ZV90IG5fYnVja2V0LAorICAgIGNv bnN0IHNpemVfdCBsZ19idWNrZXRfd2lkdGgsIGNvbnN0IHNpemVfdCBuX2l0ZXIpIHsKKwlmb3Ig KHNpemVfdCBpID0gMTsgaSA8PSAzOyArK2kpIHsKKwkJbWFsbG9jX3ByaW50Zigicm91bmQgJXp1 XG4iLCBpKTsKKwkJZmlsbChidWNrZXRzLCBuX2J1Y2tldCwgMCk7CisJCWNvbGxlY3RfYnVja2V0 cyhnZW4sIG9wYXF1ZSwgYnVja2V0cywgbl9idWNrZXQsCisJCSAgICBsZ19idWNrZXRfd2lkdGgs IG5faXRlcik7CisJCXByaW50X2J1Y2tldHMoYnVja2V0cywgbWVhbnMsIHN0ZGRldnMsIG5fYnVj a2V0KTsKKwl9Cit9CisKKy8qIChSZWNvbW1lbmRlZCkgbWluaW1hbCBidWNrZXQgbWVhbi4gKi8K KyNkZWZpbmUgTUlOX0JVQ0tFVF9NRUFOIDEwMDAwCisKKy8qKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiov CisKKy8qIFVuaWZvcm0gcmFuZG9tIG51bWJlciBnZW5lcmF0b3IuICovCisKK3R5cGVkZWYgc3Ry dWN0IHVuaWZvcm1fZ2VuX2FyZ19zIHVuaWZvcm1fZ2VuX2FyZ190Oworc3RydWN0IHVuaWZvcm1f Z2VuX2FyZ19zIHsKKwl1aW50NjRfdCBzdGF0ZTsKKwljb25zdCB1bnNpZ25lZCBsZ19yYW5nZTsK K307CisKK3N0YXRpYyB1aW50NjRfdAordW5pZm9ybV9nZW4odm9pZCAqb3BhcXVlKSB7CisJdW5p Zm9ybV9nZW5fYXJnX3QgKmFyZyA9ICh1bmlmb3JtX2dlbl9hcmdfdCAqKW9wYXF1ZTsKKwlyZXR1 cm4gcHJuZ19sZ19yYW5nZV91NjQoJmFyZy0+c3RhdGUsIGFyZy0+bGdfcmFuZ2UpOworfQorCitU RVNUX0JFR0lOKHRlc3RfdW5pZm9ybSkgeworI2RlZmluZSBMR19OX0JVQ0tFVCA1CisjZGVmaW5l IE5fQlVDS0VUICgxIDw8IExHX05fQlVDS0VUKQorCisjZGVmaW5lIFFVT1RJRU5UX0NFSUwobiwg ZCkgKCgobikgLSAxKSAvIChkKSArIDEpCisKKwljb25zdCB1bnNpZ25lZCBsZ19yYW5nZV90ZXN0 ID0gMjU7CisKKwkvKgorCSAqIE1hdGhlbWF0aWNhbCB0cmlja3MgdG8gZ3VhcmFudGVlIHRoYXQg Ym90aCBtZWFuIGFuZCBzdGRkZXYgYXJlCisJICogaW50ZWdlcnMsIGFuZCB0aGF0IHRoZSBtaW5p bWFsIGJ1Y2tldCBtZWFuIGlzIGF0IGxlYXN0CisJICogTUlOX0JVQ0tFVF9NRUFOLgorCSAqLwor CWNvbnN0IHNpemVfdCBxID0gMSA8PCBRVU9USUVOVF9DRUlMKExHX0NFSUwoUVVPVElFTlRfQ0VJ TCgKKwkgICAgTUlOX0JVQ0tFVF9NRUFOLCBOX0JVQ0tFVCAqIChOX0JVQ0tFVCAtIDEpKSksIDIp OworCWNvbnN0IHNpemVfdCBzdGRkZXYgPSAoTl9CVUNLRVQgLSAxKSAqIHE7CisJY29uc3Qgc2l6 ZV90IG1lYW4gPSBOX0JVQ0tFVCAqIHN0ZGRldiAqIHE7CisJY29uc3Qgc2l6ZV90IG5faXRlciA9 IE5fQlVDS0VUICogbWVhbjsKKworCXNpemVfdCBtZWFuc1tOX0JVQ0tFVF07CisJZmlsbChtZWFu cywgTl9CVUNLRVQsIG1lYW4pOworCXNpemVfdCBzdGRkZXZzW05fQlVDS0VUXTsKKwlmaWxsKHN0 ZGRldnMsIE5fQlVDS0VULCBzdGRkZXYpOworCisJdW5pZm9ybV9nZW5fYXJnX3QgYXJnID0geyh1 aW50NjRfdCkodWludHB0cl90KSZsZ19yYW5nZV90ZXN0LAorCSAgICBsZ19yYW5nZV90ZXN0fTsK KwlzaXplX3QgYnVja2V0c1tOX0JVQ0tFVF07CisJYXNzZXJ0X3p1X2dlKGxnX3JhbmdlX3Rlc3Qs IExHX05fQlVDS0VULCAiIik7CisJY29uc3Qgc2l6ZV90IGxnX2J1Y2tldF93aWR0aCA9IGxnX3Jh bmdlX3Rlc3QgLSBMR19OX0JVQ0tFVDsKKworCWJ1Y2tldF9hbmFseXNpcyh1bmlmb3JtX2dlbiwg JmFyZywgYnVja2V0cywgbWVhbnMsIHN0ZGRldnMsCisJICAgIE5fQlVDS0VULCBsZ19idWNrZXRf d2lkdGgsIG5faXRlcik7CisKKyN1bmRlZiBMR19OX0JVQ0tFVAorI3VuZGVmIE5fQlVDS0VUCisj dW5kZWYgUVVPVElFTlRfQ0VJTAorfQorVEVTVF9FTkQKKworLyoqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq Ki8KKworLyogR2VvbWV0cmljIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yOyBjb21waWxlZCBvbmx5 IHdoZW4gcHJvZiBpcyBvbi4gKi8KKworI2lmZGVmIEpFTUFMTE9DX1BST0YKKworLyoKKyAqIEZp bGxzIGdlb21ldHJpYyBwcm9wb3J0aW9ucyBhbmQgcmV0dXJucyB0aGUgbWluaW1hbCBwcm9wb3J0 aW9uLiAgU2VlCisgKiBjb21tZW50cyBpbiB0ZXN0X3Byb2Zfc2FtcGxlIGZvciBleHBsYW5hdGlv bnMgZm9yIG5fZGl2aWRlLgorICovCitzdGF0aWMgZG91YmxlCitmaWxsX2dlb21ldHJpY19wcm9w b3J0aW9ucyhkb3VibGUgcHJvcG9ydGlvbnNbXSwgY29uc3Qgc2l6ZV90IG5fYnVja2V0LAorICAg IGNvbnN0IHNpemVfdCBuX2RpdmlkZSkgeworCWFzc2VydChuX2J1Y2tldCA+IDApOworCWFzc2Vy dChuX2RpdmlkZSA+IDApOworCWRvdWJsZSB4ID0gMS47CisJZm9yIChzaXplX3QgaSA9IDA7IGkg PCBuX2J1Y2tldDsgKytpKSB7CisJCWlmIChpID09IG5fYnVja2V0IC0gMSkgeworCQkJcHJvcG9y dGlvbnNbaV0gPSB4OworCQl9IGVsc2UgeworCQkJZG91YmxlIHkgPSB4ICogZXhwKC0xLiAvIG5f ZGl2aWRlKTsKKwkJCXByb3BvcnRpb25zW2ldID0geCAtIHk7CisJCQl4ID0geTsKKwkJfQorCX0K KwkvKgorCSAqIFRoZSBtaW5pbWFsIHByb3BvcnRpb24gaXMgdGhlIHNtYWxsZXIgb25lIG9mIHRo ZSBsYXN0IHR3bworCSAqIHByb3BvcnRpb25zIGZvciBnZW9tZXRyaWMgZGlzdHJpYnV0aW9uLgor CSAqLworCWRvdWJsZSBtaW5fcHJvcG9ydGlvbiA9IHByb3BvcnRpb25zW25fYnVja2V0IC0gMV07 CisJaWYgKG5fYnVja2V0ID49IDIgJiYgcHJvcG9ydGlvbnNbbl9idWNrZXQgLSAyXSA8IG1pbl9w cm9wb3J0aW9uKSB7CisJCW1pbl9wcm9wb3J0aW9uID0gcHJvcG9ydGlvbnNbbl9idWNrZXQgLSAy XTsKKwl9CisJcmV0dXJuIG1pbl9wcm9wb3J0aW9uOworfQorCitzdGF0aWMgc2l6ZV90Cityb3Vu ZF90b19uZWFyZXN0KGNvbnN0IGRvdWJsZSB4KSB7CisJcmV0dXJuIChzaXplX3QpKHggKyAuNSk7 Cit9CisKK3N0YXRpYyB2b2lkCitmaWxsX3JlZmVyZW5jZXMoc2l6ZV90IG1lYW5zW10sIHNpemVf dCBzdGRkZXZzW10sIGNvbnN0IGRvdWJsZSBwcm9wb3J0aW9uc1tdLAorICAgIGNvbnN0IHNpemVf dCBuX2J1Y2tldCwgY29uc3Qgc2l6ZV90IG5faXRlcikgeworCWZvciAoc2l6ZV90IGkgPSAwOyBp IDwgbl9idWNrZXQ7ICsraSkgeworCQlkb3VibGUgeCA9IG5faXRlciAqIHByb3BvcnRpb25zW2ld OworCQltZWFuc1tpXSA9IHJvdW5kX3RvX25lYXJlc3QoeCk7CisJCXN0ZGRldnNbaV0gPSByb3Vu ZF90b19uZWFyZXN0KHNxcnQoeCAqICgxLiAtIHByb3BvcnRpb25zW2ldKSkpOworCX0KK30KKwor c3RhdGljIHVpbnQ2NF90Citwcm9mX3NhbXBsZV9nZW4odm9pZCAqb3BhcXVlKSB7CisJcmV0dXJu IHByb2Zfc2FtcGxlX25ld19ldmVudF93YWl0KCh0c2RfdCAqKW9wYXF1ZSkgLSAxOworfQorCisj ZW5kaWYgLyogSkVNQUxMT0NfUFJPRiAqLworCitURVNUX0JFR0lOKHRlc3RfcHJvZl9zYW1wbGUp IHsKKwl0ZXN0X3NraXBfaWYoIWNvbmZpZ19wcm9mKTsKKyNpZmRlZiBKRU1BTExPQ19QUk9GCisK Ky8qIE51bWJlciBvZiBkaXZpc2lvbnMgd2l0aGluIFswLCBtZWFuKS4gKi8KKyNkZWZpbmUgTEdf Tl9ESVZJREUgMworI2RlZmluZSBOX0RJVklERSAoMSA8PCBMR19OX0RJVklERSkKKworLyogQ292 ZXJhZ2Ugb2YgYnVja2V0cyBpbiB0ZXJtcyBvZiBtdWx0aXBsZXMgb2YgbWVhbi4gKi8KKyNkZWZp bmUgTEdfTl9NVUxUSVBMWSAyCisjZGVmaW5lIE5fR0VPX0JVQ0tFVCAoTl9ESVZJREUgPDwgTEdf Tl9NVUxUSVBMWSkKKworCXRlc3Rfc2tpcF9pZighb3B0X3Byb2YpOworCisJc2l6ZV90IGxnX3By b2Zfc2FtcGxlX3Rlc3QgPSAyNTsKKworCXNpemVfdCBsZ19wcm9mX3NhbXBsZV9vcmlnID0gbGdf cHJvZl9zYW1wbGU7CisJYXNzZXJ0X2RfZXEobWFsbGN0bCgicHJvZi5yZXNldCIsIE5VTEwsIE5V TEwsICZsZ19wcm9mX3NhbXBsZV90ZXN0LAorCSAgICBzaXplb2Yoc2l6ZV90KSksIDAsICIiKTsK KwltYWxsb2NfcHJpbnRmKCJsZ19wcm9mX3NhbXBsZSA9ICV6dVxuIiwgbGdfcHJvZl9zYW1wbGVf dGVzdCk7CisKKwlkb3VibGUgcHJvcG9ydGlvbnNbTl9HRU9fQlVDS0VUICsgMV07CisJY29uc3Qg ZG91YmxlIG1pbl9wcm9wb3J0aW9uID0gZmlsbF9nZW9tZXRyaWNfcHJvcG9ydGlvbnMocHJvcG9y dGlvbnMsCisJICAgIE5fR0VPX0JVQ0tFVCArIDEsIE5fRElWSURFKTsKKwljb25zdCBzaXplX3Qg bl9pdGVyID0gcm91bmRfdG9fbmVhcmVzdChNSU5fQlVDS0VUX01FQU4gLworCSAgICBtaW5fcHJv cG9ydGlvbik7CisJc2l6ZV90IG1lYW5zW05fR0VPX0JVQ0tFVCArIDFdOworCXNpemVfdCBzdGRk ZXZzW05fR0VPX0JVQ0tFVCArIDFdOworCWZpbGxfcmVmZXJlbmNlcyhtZWFucywgc3RkZGV2cywg cHJvcG9ydGlvbnMsIE5fR0VPX0JVQ0tFVCArIDEsIG5faXRlcik7CisKKwl0c2RfdCAqdHNkID0g dHNkX2ZldGNoKCk7CisJYXNzZXJ0X3B0cl9ub3RfbnVsbCh0c2QsICIiKTsKKwlzaXplX3QgYnVj a2V0c1tOX0dFT19CVUNLRVQgKyAxXTsKKwlhc3NlcnRfenVfZ2UobGdfcHJvZl9zYW1wbGUsIExH X05fRElWSURFLCAiIik7CisJY29uc3Qgc2l6ZV90IGxnX2J1Y2tldF93aWR0aCA9IGxnX3Byb2Zf c2FtcGxlIC0gTEdfTl9ESVZJREU7CisKKwlidWNrZXRfYW5hbHlzaXMocHJvZl9zYW1wbGVfZ2Vu LCB0c2QsIGJ1Y2tldHMsIG1lYW5zLCBzdGRkZXZzLAorCSAgICBOX0dFT19CVUNLRVQgKyAxLCBs Z19idWNrZXRfd2lkdGgsIG5faXRlcik7CisKKwlhc3NlcnRfZF9lcShtYWxsY3RsKCJwcm9mLnJl c2V0IiwgTlVMTCwgTlVMTCwgJmxnX3Byb2Zfc2FtcGxlX29yaWcsCisJICAgIHNpemVvZihzaXpl X3QpKSwgMCwgIiIpOworCisjdW5kZWYgTEdfTl9ESVZJREUKKyN1bmRlZiBOX0RJVklERQorI3Vu ZGVmIExHX05fTVVMVElQTFkKKyN1bmRlZiBOX0dFT19CVUNLRVQKKworI2VuZGlmIC8qIEpFTUFM TE9DX1BST0YgKi8KK30KK1RFU1RfRU5ECisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2lu dAorbWFpbih2b2lkKSB7CisJcmV0dXJuIHRlc3Rfbm9fcmVlbnRyYW5jeSgKKwkgICAgdGVzdF91 bmlmb3JtLAorCSAgICB0ZXN0X3Byb2Zfc2FtcGxlKTsKK30KCmRpZmYgLS1naXQgYS8zODktZHMt YmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L2FuYWx5emUvc2l6ZXMuYyBiLzM4 OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvYW5hbHl6ZS9zaXplcy5j Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0YzlkZTUKLS0tIC9kZXYvbnVs bAorKysgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L2FuYWx5 emUvc2l6ZXMuYwpAQCAtMCwwICsxLDUzIEBACisjaW5jbHVkZSAidGVzdC9qZW1hbGxvY190ZXN0 LmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorCisvKgorICogUHJpbnQgdGhlIHNpemVzIG9mIHZh cmlvdXMgaW1wb3J0YW50IGNvcmUgZGF0YSBzdHJ1Y3R1cmVzLiAgT0ssIEkgZ3Vlc3MgdGhpcwor ICogaXNuJ3QgcmVhbGx5IGEgInN0cmVzcyIgdGVzdCwgYnV0IGl0IGRvZXMgZ2l2ZSB1c2VmdWwg aW5mb3JtYXRpb24gYWJvdXQKKyAqIGxvdy1sZXZlbCBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3Rp Y3MsIGFzIHRoZSBvdGhlciB0aGluZ3MgaW4gdGhpcyBkaXJlY3RvcnkKKyAqIGRvLgorICovCisK K3N0YXRpYyB2b2lkCitkb19wcmludChjb25zdCBjaGFyICpuYW1lLCBzaXplX3Qgc3pfYnl0ZXMp IHsKKwljb25zdCBjaGFyICpzaXplc1tdID0geyJieXRlcyIsICJLQiIsICJNQiIsICJHQiIsICJU QiIsICJQQiIsICJFQiIsCisJCSJaQiJ9OworCXNpemVfdCBzaXplc19tYXggPSBzaXplb2Yoc2l6 ZXMpL3NpemVvZihzaXplc1swXSk7CisKKwlzaXplX3QgaW5kID0gMDsKKwlkb3VibGUgc3ogPSBz el9ieXRlczsKKwl3aGlsZSAoc3ogPj0gMTAyNCAmJiBpbmQgPCBzaXplc19tYXggLSAxKSB7CisJ CXN6IC89IDEwMjQ7CisJCWluZCsrOworCX0KKwlpZiAoaW5kID09IDApIHsKKwkJcHJpbnRmKCIl LTIwczogJXp1IGJ5dGVzXG4iLCBuYW1lLCBzel9ieXRlcyk7CisJfSBlbHNlIHsKKwkJcHJpbnRm KCIlLTIwczogJWYgJXNcbiIsIG5hbWUsIHN6LCBzaXplc1tpbmRdKTsKKwl9Cit9CisKK2ludAor bWFpbigpIHsKKyNkZWZpbmUgUCh0eXBlKQkJCQkJCQkJXAorCWRvX3ByaW50KCN0eXBlLCBzaXpl b2YodHlwZSkpCisJUChhcmVuYV90KTsKKwlQKGFyZW5hX3N0YXRzX3QpOworCVAoYmFzZV90KTsK KwlQKGRlY2F5X3QpOworCVAoZWRhdGFfdCk7CisJUChlY2FjaGVfdCk7CisJUChlc2V0X3QpOwor CVAobWFsbG9jX211dGV4X3QpOworCVAocHJvZl90Y3R4X3QpOworCVAocHJvZl9nY3R4X3QpOwor CVAocHJvZl90ZGF0YV90KTsKKwlQKHJ0cmVlX3QpOworCVAocnRyZWVfbGVhZl9lbG1fdCk7CisJ UChzbGFiX2RhdGFfdCk7CisJUCh0Y2FjaGVfdCk7CisJUCh0Y2FjaGVfc2xvd190KTsKKwlQKHRz ZF90KTsKKyN1bmRlZiBQCit9CgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQv amVtYWxsb2MtNS4zLjAvdGVzdC9pbmNsdWRlL3Rlc3QvU0ZNVC1hbHRpLmggYi8zODktZHMtYmFz ZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L2luY2x1ZGUvdGVzdC9TRk1ULWFsdGku aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTg4NWRiCi0tLSAvZGV2L251 bGwKKysrIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC9pbmNs dWRlL3Rlc3QvU0ZNVC1hbHRpLmgKQEAgLTAsMCArMSwxODYgQEAKKy8qCisgKiBUaGlzIGZpbGUg ZGVyaXZlcyBmcm9tIFNGTVQgMS4zLjMKKyAqIChodHRwOi8vd3d3Lm1hdGguc2NpLmhpcm9zaGlt YS11LmFjLmpwL35tLW1hdC9NVC9TRk1UL2luZGV4Lmh0bWwpLCB3aGljaCB3YXMKKyAqIHJlbGVh c2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgZm9sbG93aW5nIGxpY2Vuc2U6CisgKgorICogICBD b3B5cmlnaHQgKGMpIDIwMDYsMjAwNyBNdXRzdW8gU2FpdG8sIE1ha290byBNYXRzdW1vdG8gYW5k IEhpcm9zaGltYQorICogICBVbml2ZXJzaXR5LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq ICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0 aCBvciB3aXRob3V0CisgKiAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0 aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqICAgbWV0OgorICoKKyAqICAgICAg ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj b3B5cmlnaHQKKyAqICAgICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgIGNvcHlyaWdo dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAg ICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy aWFscyBwcm92aWRlZAorICogICAgICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgICAg ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEhpcm9zaGltYSBVbml2ZXJzaXR5IG5vciB0aGUg bmFtZXMgb2YKKyAqICAgICAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv cnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29m dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuCisgKiAgICAgICAgIHBlcm1pc3Np b24uCisgKgorICogICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAgICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiAgIExJTUlURUQgVE8s IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP UgorICogICBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg U0hBTEwgVEhFIENPUFlSSUdIVAorICogICBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqICAgU1BFQ0lBTCwgRVhF TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICog ICBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT OyBMT1NTIE9GIFVTRSwKKyAqICAgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiAgIFRIRU9SWSBPRiBMSUFCSUxJ VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqICAg KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V VCBPRiBUSEUgVVNFCisgKiAgIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKy8qKgorICogQGZpbGUgU0ZNVC1h bHRpLmgKKyAqCisgKiBAYnJpZWYgU0lNRCBvcmllbnRlZCBGYXN0IE1lcnNlbm5lIFR3aXN0ZXIo U0ZNVCkKKyAqIHBzZXVkb3JhbmRvbSBudW1iZXIgZ2VuZXJhdG9yCisgKgorICogQGF1dGhvciBN dXRzdW8gU2FpdG8gKEhpcm9zaGltYSBVbml2ZXJzaXR5KQorICogQGF1dGhvciBNYWtvdG8gTWF0 c3Vtb3RvIChIaXJvc2hpbWEgVW5pdmVyc2l0eSkKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcg TXV0c3VvIFNhaXRvLCBNYWtvdG8gTWF0c3Vtb3RvIGFuZCBIaXJvc2hpbWEKKyAqIFVuaXZlcnNp dHkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhlIG5ldyBCU0QgTGljZW5zZSBpcyBh cHBsaWVkIHRvIHRoaXMgc29mdHdhcmUuCisgKiBzZWUgTElDRU5TRS50eHQKKyAqLworCisjaWZu ZGVmIFNGTVRfQUxUSV9ICisjZGVmaW5lIFNGTVRfQUxUSV9ICisKKy8qKgorICogVGhpcyBmdW5j dGlvbiByZXByZXNlbnRzIHRoZSByZWN1cnNpb24gZm9ybXVsYSBpbiBBbHRpVmVjIGFuZCBCSUcg RU5ESUFOLgorICogQHBhcmFtIGEgYSAxMjgtYml0IHBhcnQgb2YgdGhlIGludGVyYWwgc3RhdGUg YXJyYXkKKyAqIEBwYXJhbSBiIGEgMTI4LWJpdCBwYXJ0IG9mIHRoZSBpbnRlcmFsIHN0YXRlIGFy cmF5CisgKiBAcGFyYW0gYyBhIDEyOC1iaXQgcGFydCBvZiB0aGUgaW50ZXJhbCBzdGF0ZSBhcnJh eQorICogQHBhcmFtIGQgYSAxMjgtYml0IHBhcnQgb2YgdGhlIGludGVyYWwgc3RhdGUgYXJyYXkK KyAqIEByZXR1cm4gb3V0cHV0CisgKi8KK0pFTUFMTE9DX0FMV0FZU19JTkxJTkUKK3ZlY3RvciB1 bnNpZ25lZCBpbnQgdmVjX3JlY3Vyc2lvbih2ZWN0b3IgdW5zaWduZWQgaW50IGEsCisJCQkJCQl2 ZWN0b3IgdW5zaWduZWQgaW50IGIsCisJCQkJCQl2ZWN0b3IgdW5zaWduZWQgaW50IGMsCisJCQkJ CQl2ZWN0b3IgdW5zaWduZWQgaW50IGQpIHsKKworICAgIGNvbnN0IHZlY3RvciB1bnNpZ25lZCBp bnQgc2wxID0gQUxUSV9TTDE7CisgICAgY29uc3QgdmVjdG9yIHVuc2lnbmVkIGludCBzcjEgPSBB TFRJX1NSMTsKKyNpZmRlZiBPTkxZNjQKKyAgICBjb25zdCB2ZWN0b3IgdW5zaWduZWQgaW50IG1h c2sgPSBBTFRJX01TSzY0OworICAgIGNvbnN0IHZlY3RvciB1bnNpZ25lZCBjaGFyIHBlcm1fc2wg PSBBTFRJX1NMMl9QRVJNNjQ7CisgICAgY29uc3QgdmVjdG9yIHVuc2lnbmVkIGNoYXIgcGVybV9z ciA9IEFMVElfU1IyX1BFUk02NDsKKyNlbHNlCisgICAgY29uc3QgdmVjdG9yIHVuc2lnbmVkIGlu dCBtYXNrID0gQUxUSV9NU0s7CisgICAgY29uc3QgdmVjdG9yIHVuc2lnbmVkIGNoYXIgcGVybV9z bCA9IEFMVElfU0wyX1BFUk07CisgICAgY29uc3QgdmVjdG9yIHVuc2lnbmVkIGNoYXIgcGVybV9z ciA9IEFMVElfU1IyX1BFUk07CisjZW5kaWYKKyAgICB2ZWN0b3IgdW5zaWduZWQgaW50IHYsIHcs IHgsIHksIHo7CisgICAgeCA9IHZlY19wZXJtKGEsICh2ZWN0b3IgdW5zaWduZWQgaW50KXBlcm1f c2wsIHBlcm1fc2wpOworICAgIHYgPSBhOworICAgIHkgPSB2ZWNfc3IoYiwgc3IxKTsKKyAgICB6 ID0gdmVjX3Blcm0oYywgKHZlY3RvciB1bnNpZ25lZCBpbnQpcGVybV9zciwgcGVybV9zcik7Cisg ICAgdyA9IHZlY19zbChkLCBzbDEpOworICAgIHogPSB2ZWNfeG9yKHosIHcpOworICAgIHkgPSB2 ZWNfYW5kKHksIG1hc2spOworICAgIHYgPSB2ZWNfeG9yKHYsIHgpOworICAgIHogPSB2ZWNfeG9y KHosIHkpOworICAgIHogPSB2ZWNfeG9yKHosIHYpOworICAgIHJldHVybiB6OworfQorCisvKioK KyAqIFRoaXMgZnVuY3Rpb24gZmlsbHMgdGhlIGludGVybmFsIHN0YXRlIGFycmF5IHdpdGggcHNl dWRvcmFuZG9tCisgKiBpbnRlZ2Vycy4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGdlbl9yYW5k X2FsbChzZm10X3QgKmN0eCkgeworICAgIGludCBpOworICAgIHZlY3RvciB1bnNpZ25lZCBpbnQg ciwgcjEsIHIyOworCisgICAgcjEgPSBjdHgtPnNmbXRbTiAtIDJdLnM7CisgICAgcjIgPSBjdHgt PnNmbXRbTiAtIDFdLnM7CisgICAgZm9yIChpID0gMDsgaSA8IE4gLSBQT1MxOyBpKyspIHsKKwly ID0gdmVjX3JlY3Vyc2lvbihjdHgtPnNmbXRbaV0ucywgY3R4LT5zZm10W2kgKyBQT1MxXS5zLCBy MSwgcjIpOworCWN0eC0+c2ZtdFtpXS5zID0gcjsKKwlyMSA9IHIyOworCXIyID0gcjsKKyAgICB9 CisgICAgZm9yICg7IGkgPCBOOyBpKyspIHsKKwlyID0gdmVjX3JlY3Vyc2lvbihjdHgtPnNmbXRb aV0ucywgY3R4LT5zZm10W2kgKyBQT1MxIC0gTl0ucywgcjEsIHIyKTsKKwljdHgtPnNmbXRbaV0u cyA9IHI7CisJcjEgPSByMjsKKwlyMiA9IHI7CisgICAgfQorfQorCisvKioKKyAqIFRoaXMgZnVu Y3Rpb24gZmlsbHMgdGhlIHVzZXItc3BlY2lmaWVkIGFycmF5IHdpdGggcHNldWRvcmFuZG9tCisg KiBpbnRlZ2Vycy4KKyAqCisgKiBAcGFyYW0gYXJyYXkgYW4gMTI4LWJpdCBhcnJheSB0byBiZSBm aWxsZWQgYnkgcHNldWRvcmFuZG9tIG51bWJlcnMuCisgKiBAcGFyYW0gc2l6ZSBudW1iZXIgb2Yg MTI4LWJpdCBwZXN1ZG9yYW5kb20gbnVtYmVycyB0byBiZSBnZW5lcmF0ZWQuCisgKi8KK3N0YXRp YyBpbmxpbmUgdm9pZCBnZW5fcmFuZF9hcnJheShzZm10X3QgKmN0eCwgdzEyOF90ICphcnJheSwg aW50IHNpemUpIHsKKyAgICBpbnQgaSwgajsKKyAgICB2ZWN0b3IgdW5zaWduZWQgaW50IHIsIHIx LCByMjsKKworICAgIHIxID0gY3R4LT5zZm10W04gLSAyXS5zOworICAgIHIyID0gY3R4LT5zZm10 W04gLSAxXS5zOworICAgIGZvciAoaSA9IDA7IGkgPCBOIC0gUE9TMTsgaSsrKSB7CisJciA9IHZl Y19yZWN1cnNpb24oY3R4LT5zZm10W2ldLnMsIGN0eC0+c2ZtdFtpICsgUE9TMV0ucywgcjEsIHIy KTsKKwlhcnJheVtpXS5zID0gcjsKKwlyMSA9IHIyOworCXIyID0gcjsKKyAgICB9CisgICAgZm9y ICg7IGkgPCBOOyBpKyspIHsKKwlyID0gdmVjX3JlY3Vyc2lvbihjdHgtPnNmbXRbaV0ucywgYXJy YXlbaSArIFBPUzEgLSBOXS5zLCByMSwgcjIpOworCWFycmF5W2ldLnMgPSByOworCXIxID0gcjI7 CisJcjIgPSByOworICAgIH0KKyAgICAvKiBtYWluIGxvb3AgKi8KKyAgICBmb3IgKDsgaSA8IHNp emUgLSBOOyBpKyspIHsKKwlyID0gdmVjX3JlY3Vyc2lvbihhcnJheVtpIC0gTl0ucywgYXJyYXlb aSArIFBPUzEgLSBOXS5zLCByMSwgcjIpOworCWFycmF5W2ldLnMgPSByOworCXIxID0gcjI7CisJ cjIgPSByOworICAgIH0KKyAgICBmb3IgKGogPSAwOyBqIDwgMiAqIE4gLSBzaXplOyBqKyspIHsK KwljdHgtPnNmbXRbal0ucyA9IGFycmF5W2ogKyBzaXplIC0gTl0uczsKKyAgICB9CisgICAgZm9y ICg7IGkgPCBzaXplOyBpKyspIHsKKwlyID0gdmVjX3JlY3Vyc2lvbihhcnJheVtpIC0gTl0ucywg YXJyYXlbaSArIFBPUzEgLSBOXS5zLCByMSwgcjIpOworCWFycmF5W2ldLnMgPSByOworCWN0eC0+ c2ZtdFtqKytdLnMgPSByOworCXIxID0gcjI7CisJcjIgPSByOworICAgIH0KK30KKworI2lmbmRl ZiBPTkxZNjQKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykKKyNkZWZpbmUgQUxUSV9TV0FQICh2ZWN0 b3IgdW5zaWduZWQgY2hhcikgXAorCSg0LCA1LCA2LCA3LCAwLCAxLCAyLCAzLCAxMiwgMTMsIDE0 LCAxNSwgOCwgOSwgMTAsIDExKQorI2Vsc2UKKyNkZWZpbmUgQUxUSV9TV0FQIHs0LCA1LCA2LCA3 LCAwLCAxLCAyLCAzLCAxMiwgMTMsIDE0LCAxNSwgOCwgOSwgMTAsIDExfQorI2VuZGlmCisvKioK KyAqIFRoaXMgZnVuY3Rpb24gc3dhcHMgaGlnaCBhbmQgbG93IDMyLWJpdCBvZiA2NC1iaXQgaW50 ZWdlcnMgaW4gdXNlcgorICogc3BlY2lmaWVkIGFycmF5LgorICoKKyAqIEBwYXJhbSBhcnJheSBh biAxMjgtYml0IGFycmF5IHRvIGJlIHN3YXBlZC4KKyAqIEBwYXJhbSBzaXplIHNpemUgb2YgMTI4 LWJpdCBhcnJheS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHN3YXAodzEyOF90ICphcnJheSwg aW50IHNpemUpIHsKKyAgICBpbnQgaTsKKyAgICBjb25zdCB2ZWN0b3IgdW5zaWduZWQgY2hhciBw ZXJtID0gQUxUSV9TV0FQOworCisgICAgZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgeworCWFy cmF5W2ldLnMgPSB2ZWNfcGVybShhcnJheVtpXS5zLCAodmVjdG9yIHVuc2lnbmVkIGludClwZXJt LCBwZXJtKTsKKyAgICB9Cit9CisjZW5kaWYKKworI2VuZGlmCgpkaWZmIC0tZ2l0IGEvMzg5LWRz LWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC9pbmNsdWRlL3Rlc3QvU0ZNVC1w YXJhbXMuaCBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvaW5j bHVkZS90ZXN0L1NGTVQtcGFyYW1zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MC4uYWRlNjYyMgotLS0gL2Rldi9udWxsCisrKyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2pl bWFsbG9jLTUuMy4wL3Rlc3QvaW5jbHVkZS90ZXN0L1NGTVQtcGFyYW1zLmgKQEAgLTAsMCArMSwx MzIgQEAKKy8qCisgKiBUaGlzIGZpbGUgZGVyaXZlcyBmcm9tIFNGTVQgMS4zLjMKKyAqIChodHRw Oi8vd3d3Lm1hdGguc2NpLmhpcm9zaGltYS11LmFjLmpwL35tLW1hdC9NVC9TRk1UL2luZGV4Lmh0 bWwpLCB3aGljaCB3YXMKKyAqIHJlbGVhc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgZm9sbG93 aW5nIGxpY2Vuc2U6CisgKgorICogICBDb3B5cmlnaHQgKGMpIDIwMDYsMjAwNyBNdXRzdW8gU2Fp dG8sIE1ha290byBNYXRzdW1vdG8gYW5kIEhpcm9zaGltYQorICogICBVbml2ZXJzaXR5LiBBbGwg cmlnaHRzIHJlc2VydmVkLgorICoKKyAqICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgIG1vZGlmaWNhdGlvbiwg YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK KyAqICAgbWV0OgorICoKKyAqICAgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgICAgbm90aWNlLCB0aGlz IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAg ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi b3ZlCisgKiAgICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z IGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50 YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICogICAgICAgICB3aXRoIHRo ZSBkaXN0cmlidXRpb24uCisgKiAgICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEhpcm9z aGltYSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICAgICAgaXRzIGNvbnRyaWJ1 dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICAg ICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0 dGVuCisgKiAgICAgICAgIHBlcm1pc3Npb24uCisgKgorICogICBUSElTIFNPRlRXQVJFIElTIFBS T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAgICJB UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC VVQgTk9UCisgKiAgIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogICBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogICBPV05FUiBP UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF TlRBTCwKKyAqICAgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg KElOQ0xVRElORywgQlVUIE5PVAorICogICBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqICAgREFUQSwgT1IgUFJP RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z CisgKiAgIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM SUFCSUxJVFksIE9SIFRPUlQKKyAqICAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiAgIE9GIFRISVMgU09GVFdB UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg Ki8KKyNpZm5kZWYgU0ZNVF9QQVJBTVNfSAorI2RlZmluZSBTRk1UX1BBUkFNU19ICisKKyNpZiAh ZGVmaW5lZChNRVhQKQorI2lmZGVmIF9fR05VQ19fCisgICN3YXJuaW5nICJNRVhQIGlzIG5vdCBk ZWZpbmVkLiBJIGFzc3VtZSBNRVhQIGlzIDE5OTM3LiIKKyNlbmRpZgorICAjZGVmaW5lIE1FWFAg MTk5MzcKKyNlbmRpZgorLyotLS0tLS0tLS0tLS0tLS0tLQorICBCQVNJQyBERUZJTklUSU9OUwor ICAtLS0tLS0tLS0tLS0tLS0tLSovCisvKiogTWVyc2VubmUgRXhwb25lbnQuIFRoZSBwZXJpb2Qg b2YgdGhlIHNlcXVlbmNlIAorICogIGlzIGEgbXVsdGlwbGUgb2YgMl5NRVhQLTEuCisgKiAjZGVm aW5lIE1FWFAgMTk5MzcgKi8KKy8qKiBTRk1UIGdlbmVyYXRvciBoYXMgYW4gaW50ZXJuYWwgc3Rh dGUgYXJyYXkgb2YgMTI4LWJpdCBpbnRlZ2VycywKKyAqIGFuZCBOIGlzIGl0cyBzaXplLiAqLwor I2RlZmluZSBOIChNRVhQIC8gMTI4ICsgMSkKKy8qKiBOMzIgaXMgdGhlIHNpemUgb2YgaW50ZXJu YWwgc3RhdGUgYXJyYXkgd2hlbiByZWdhcmRlZCBhcyBhbiBhcnJheQorICogb2YgMzItYml0IGlu dGVnZXJzLiovCisjZGVmaW5lIE4zMiAoTiAqIDQpCisvKiogTjY0IGlzIHRoZSBzaXplIG9mIGlu dGVybmFsIHN0YXRlIGFycmF5IHdoZW4gcmVnYXJkZWQgYXMgYW4gYXJyYXkKKyAqIG9mIDY0LWJp dCBpbnRlZ2Vycy4qLworI2RlZmluZSBONjQgKE4gKiAyKQorCisvKi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyAgdGhlIHBhcmFtZXRlcnMgb2YgU0ZNVAorICBmb2xsb3dpbmcgZGVmaW5pdGlvbnMg YXJlIGluIHBhcmFtc1hYWFguaCBmaWxlLgorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8q KiB0aGUgcGljayB1cCBwb3NpdGlvbiBvZiB0aGUgYXJyYXkuCisjZGVmaW5lIFBPUzEgMTIyIAor Ki8KKworLyoqIHRoZSBwYXJhbWV0ZXIgb2Ygc2hpZnQgbGVmdCBhcyBmb3VyIDMyLWJpdCByZWdp c3RlcnMuCisjZGVmaW5lIFNMMSAxOAorICovCisKKy8qKiB0aGUgcGFyYW1ldGVyIG9mIHNoaWZ0 IGxlZnQgYXMgb25lIDEyOC1iaXQgcmVnaXN0ZXIuIAorICogVGhlIDEyOC1iaXQgaW50ZWdlciBp cyBzaGlmdGVkIGJ5IChTTDIgKiA4KSBiaXRzLiAKKyNkZWZpbmUgU0wyIDEgCisqLworCisvKiog dGhlIHBhcmFtZXRlciBvZiBzaGlmdCByaWdodCBhcyBmb3VyIDMyLWJpdCByZWdpc3RlcnMuCisj ZGVmaW5lIFNSMSAxMQorKi8KKworLyoqIHRoZSBwYXJhbWV0ZXIgb2Ygc2hpZnQgcmlnaHQgYXMg b25lIDEyOC1iaXQgcmVnaXN0ZXIuIAorICogVGhlIDEyOC1iaXQgaW50ZWdlciBpcyBzaGlmdGVk IGJ5IChTTDIgKiA4KSBiaXRzLiAKKyNkZWZpbmUgU1IyIDEgCisqLworCisvKiogQSBiaXRtYXNr LCB1c2VkIGluIHRoZSByZWN1cnNpb24uICBUaGVzZSBwYXJhbWV0ZXJzIGFyZSBpbnRyb2R1Y2Vk CisgKiB0byBicmVhayBzeW1tZXRyeSBvZiBTSU1ELgorI2RlZmluZSBNU0sxIDB4ZGZmZmZmZWZV CisjZGVmaW5lIE1TSzIgMHhkZGZlY2I3ZlUKKyNkZWZpbmUgTVNLMyAweGJmZmFmZmZmVQorI2Rl ZmluZSBNU0s0IDB4YmZmZmZmZjZVIAorKi8KKworLyoqIFRoZXNlIGRlZmluaXRpb25zIGFyZSBw YXJ0IG9mIGEgMTI4LWJpdCBwZXJpb2QgY2VydGlmaWNhdGlvbiB2ZWN0b3IuCisjZGVmaW5lIFBB UklUWTEJMHgwMDAwMDAwMVUKKyNkZWZpbmUgUEFSSVRZMgkweDAwMDAwMDAwVQorI2RlZmluZSBQ QVJJVFkzCTB4MDAwMDAwMDBVCisjZGVmaW5lIFBBUklUWTQJMHhjOThlMTI2YVUKKyovCisKKyNp ZiBNRVhQID09IDYwNworICAjaW5jbHVkZSAidGVzdC9TRk1ULXBhcmFtczYwNy5oIgorI2VsaWYg TUVYUCA9PSAxMjc5CisgICNpbmNsdWRlICJ0ZXN0L1NGTVQtcGFyYW1zMTI3OS5oIgorI2VsaWYg TUVYUCA9PSAyMjgxCisgICNpbmNsdWRlICJ0ZXN0L1NGTVQtcGFyYW1zMjI4MS5oIgorI2VsaWYg TUVYUCA9PSA0MjUzCisgICNpbmNsdWRlICJ0ZXN0L1NGTVQtcGFyYW1zNDI1My5oIgorI2VsaWYg TUVYUCA9PSAxMTIxMworICAjaW5jbHVkZSAidGVzdC9TRk1ULXBhcmFtczExMjEzLmgiCisjZWxp ZiBNRVhQID09IDE5OTM3CisgICNpbmNsdWRlICJ0ZXN0L1NGTVQtcGFyYW1zMTk5MzcuaCIKKyNl bGlmIE1FWFAgPT0gNDQ0OTcKKyAgI2luY2x1ZGUgInRlc3QvU0ZNVC1wYXJhbXM0NDQ5Ny5oIgor I2VsaWYgTUVYUCA9PSA4NjI0MworICAjaW5jbHVkZSAidGVzdC9TRk1ULXBhcmFtczg2MjQzLmgi CisjZWxpZiBNRVhQID09IDEzMjA0OQorICAjaW5jbHVkZSAidGVzdC9TRk1ULXBhcmFtczEzMjA0 OS5oIgorI2VsaWYgTUVYUCA9PSAyMTYwOTEKKyAgI2luY2x1ZGUgInRlc3QvU0ZNVC1wYXJhbXMy MTYwOTEuaCIKKyNlbHNlCisjaWZkZWYgX19HTlVDX18KKyAgI2Vycm9yICJNRVhQIGlzIG5vdCB2 YWxpZC4iCisgICN1bmRlZiBNRVhQCisjZWxzZQorICAjdW5kZWYgTUVYUAorI2VuZGlmCisKKyNl bmRpZgorCisjZW5kaWYgLyogU0ZNVF9QQVJBTVNfSCAqLwoKZGlmZiAtLWdpdCBhLzM4OS1kcy1i YXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvaW5jbHVkZS90ZXN0L1NGTVQtcGFy YW1zMTEyMTMuaCBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3Qv aW5jbHVkZS90ZXN0L1NGTVQtcGFyYW1zMTEyMTMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwLi4yOTk0YmQyCi0tLSAvZGV2L251bGwKKysrIGIvMzg5LWRzLWJhc2UtMy4zLjAt YnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC9pbmNsdWRlL3Rlc3QvU0ZNVC1wYXJhbXMxMTIxMy5o CkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBUaGlzIGZpbGUgZGVyaXZlcyBmcm9tIFNGTVQgMS4z LjMKKyAqIChodHRwOi8vd3d3Lm1hdGguc2NpLmhpcm9zaGltYS11LmFjLmpwL35tLW1hdC9NVC9T Rk1UL2luZGV4Lmh0bWwpLCB3aGljaCB3YXMKKyAqIHJlbGVhc2VkIHVuZGVyIHRoZSB0ZXJtcyBv ZiB0aGUgZm9sbG93aW5nIGxpY2Vuc2U6CisgKgorICogICBDb3B5cmlnaHQgKGMpIDIwMDYsMjAw NyBNdXRzdW8gU2FpdG8sIE1ha290byBNYXRzdW1vdG8gYW5kIEhpcm9zaGltYQorICogICBVbml2 ZXJzaXR5LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICAgUmVkaXN0cmlidXRpb24gYW5k IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgIG1v ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u ZGl0aW9ucyBhcmUKKyAqICAgbWV0OgorICoKKyAqICAgICAgICogUmVkaXN0cmlidXRpb25zIG9m IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgICAg bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp bWVyLgorICogICAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy b2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgIGRpc2NsYWltZXIgaW4g dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICogICAg ICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgICAgICAqIE5laXRoZXIgdGhlIG5hbWUg b2YgdGhlIEhpcm9zaGltYSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICAgICAg aXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj dHMKKyAqICAgICAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp YyBwcmlvciB3cml0dGVuCisgKiAgICAgICAgIHBlcm1pc3Npb24uCisgKgorICogICBUSElTIFNP RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU T1JTCisgKiAgICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg SU5DTFVESU5HLCBCVVQgTk9UCisgKiAgIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogICBBIFBBUlRJQ1VMQVIg UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAor ICogICBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ UkVDVCwgSU5DSURFTlRBTCwKKyAqICAgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogICBMSU1JVEVEIFRPLCBQUk9DVVJF TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqICAg REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF RCBBTkQgT04gQU5ZCisgKiAgIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqICAgKElOQ0xVRElORyBORUdMSUdFTkNF IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiAgIE9G IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD SCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgU0ZNVF9QQVJBTVMxMTIxM19ICisjZGVmaW5lIFNGTVRf UEFSQU1TMTEyMTNfSAorCisjZGVmaW5lIFBPUzEJNjgKKyNkZWZpbmUgU0wxCTE0CisjZGVmaW5l IFNMMgkzCisjZGVmaW5lIFNSMQk3CisjZGVmaW5lIFNSMgkzCisjZGVmaW5lIE1TSzEJMHhlZmZm ZjdmYlUKKyNkZWZpbmUgTVNLMgkweGZmZmZmZmVmVQorI2RlZmluZSBNU0szCTB4ZGZkZmJmZmZV CisjZGVmaW5lIE1TSzQJMHg3ZmZmZGJmZFUKKyNkZWZpbmUgUEFSSVRZMQkweDAwMDAwMDAxVQor I2RlZmluZSBQQVJJVFkyCTB4MDAwMDAwMDBVCisjZGVmaW5lIFBBUklUWTMJMHhlODE0ODAwMFUK KyNkZWZpbmUgUEFSSVRZNAkweGQwYzdhZmEzVQorCisKKy8qIFBBUkFNRVRFUlMgRk9SIEFMVElW RUMgKi8KKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykJLyogRm9yIE9TWCAqLworICAgICNkZWZpbmUg QUxUSV9TTDEJKHZlY3RvciB1bnNpZ25lZCBpbnQpKFNMMSwgU0wxLCBTTDEsIFNMMSkKKyAgICAj ZGVmaW5lIEFMVElfU1IxCSh2ZWN0b3IgdW5zaWduZWQgaW50KShTUjEsIFNSMSwgU1IxLCBTUjEp CisgICAgI2RlZmluZSBBTFRJX01TSwkodmVjdG9yIHVuc2lnbmVkIGludCkoTVNLMSwgTVNLMiwg TVNLMywgTVNLNCkKKyAgICAjZGVmaW5lIEFMVElfTVNLNjQgXAorCSh2ZWN0b3IgdW5zaWduZWQg aW50KShNU0syLCBNU0sxLCBNU0s0LCBNU0szKQorICAgICNkZWZpbmUgQUxUSV9TTDJfUEVSTSBc CisJKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgzLDIxLDIxLDIxLDcsMCwxLDIsMTEsNCw1LDYsMTUs OCw5LDEwKQorICAgICNkZWZpbmUgQUxUSV9TTDJfUEVSTTY0IFwKKwkodmVjdG9yIHVuc2lnbmVk IGNoYXIpKDMsNCw1LDYsNywyOSwyOSwyOSwxMSwxMiwxMywxNCwxNSwwLDEsMikKKyAgICAjZGVm aW5lIEFMVElfU1IyX1BFUk0gXAorCSh2ZWN0b3IgdW5zaWduZWQgY2hhcikoNSw2LDcsMCw5LDEw LDExLDQsMTMsMTQsMTUsOCwxOSwxOSwxOSwxMikKKyAgICAjZGVmaW5lIEFMVElfU1IyX1BFUk02 NCBcCisJKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgxMywxNCwxNSwwLDEsMiwzLDQsMTksMTksMTks OCw5LDEwLDExLDEyKQorI2Vsc2UJLyogRm9yIE9USEVSIE9TcyhMaW51eD8pICovCisgICAgI2Rl ZmluZSBBTFRJX1NMMQl7U0wxLCBTTDEsIFNMMSwgU0wxfQorICAgICNkZWZpbmUgQUxUSV9TUjEJ e1NSMSwgU1IxLCBTUjEsIFNSMX0KKyAgICAjZGVmaW5lIEFMVElfTVNLCXtNU0sxLCBNU0syLCBN U0szLCBNU0s0fQorICAgICNkZWZpbmUgQUxUSV9NU0s2NAl7TVNLMiwgTVNLMSwgTVNLNCwgTVNL M30KKyAgICAjZGVmaW5lIEFMVElfU0wyX1BFUk0JezMsMjEsMjEsMjEsNywwLDEsMiwxMSw0LDUs NiwxNSw4LDksMTB9CisgICAgI2RlZmluZSBBTFRJX1NMMl9QRVJNNjQJezMsNCw1LDYsNywyOSwy OSwyOSwxMSwxMiwxMywxNCwxNSwwLDEsMn0KKyAgICAjZGVmaW5lIEFMVElfU1IyX1BFUk0JezUs Niw3LDAsOSwxMCwxMSw0LDEzLDE0LDE1LDgsMTksMTksMTksMTJ9CisgICAgI2RlZmluZSBBTFRJ X1NSMl9QRVJNNjQJezEzLDE0LDE1LDAsMSwyLDMsNCwxOSwxOSwxOSw4LDksMTAsMTEsMTJ9Cisj ZW5kaWYJLyogRm9yIE9TWCAqLworI2RlZmluZSBJRFNUUgkiU0ZNVC0xMTIxMzo2OC0xNC0zLTct MzplZmZmZjdmYi1mZmZmZmZlZi1kZmRmYmZmZi03ZmZmZGJmZCIKKworI2VuZGlmIC8qIFNGTVRf UEFSQU1TMTEyMTNfSCAqLwoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2pl bWFsbG9jLTUuMy4wL3Rlc3QvaW5jbHVkZS90ZXN0L1NGTVQtcGFyYW1zMTI3OS5oIGIvMzg5LWRz LWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC9pbmNsdWRlL3Rlc3QvU0ZNVC1w YXJhbXMxMjc5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDc5NTlmOQot LS0gL2Rldi9udWxsCisrKyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4w L3Rlc3QvaW5jbHVkZS90ZXN0L1NGTVQtcGFyYW1zMTI3OS5oCkBAIC0wLDAgKzEsODEgQEAKKy8q CisgKiBUaGlzIGZpbGUgZGVyaXZlcyBmcm9tIFNGTVQgMS4zLjMKKyAqIChodHRwOi8vd3d3Lm1h dGguc2NpLmhpcm9zaGltYS11LmFjLmpwL35tLW1hdC9NVC9TRk1UL2luZGV4Lmh0bWwpLCB3aGlj aCB3YXMKKyAqIHJlbGVhc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgZm9sbG93aW5nIGxpY2Vu c2U6CisgKgorICogICBDb3B5cmlnaHQgKGMpIDIwMDYsMjAwNyBNdXRzdW8gU2FpdG8sIE1ha290 byBNYXRzdW1vdG8gYW5kIEhpcm9zaGltYQorICogICBVbml2ZXJzaXR5LiBBbGwgcmlnaHRzIHJl c2VydmVkLgorICoKKyAqICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqICAgbWV0 OgorICoKKyAqICAgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0 YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICAgKiBSZWRp c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAg ICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg Zm9sbG93aW5nCisgKiAgICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICogICAgICAgICB3aXRoIHRoZSBkaXN0cmli dXRpb24uCisgKiAgICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEhpcm9zaGltYSBVbml2 ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkg YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICAgICAgZGVyaXZl ZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuCisgKiAg ICAgICAgIHBlcm1pc3Npb24uCisgKgorICogICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAgICJBUyBJUyIgQU5E IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisg KiAgIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ IEFORCBGSVRORVNTIEZPUgorICogICBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogICBPV05FUiBPUiBDT05UUklC VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAq ICAgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO RywgQlVUIE5PVAorICogICBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqICAgREFUQSwgT1IgUFJPRklUUzsgT1Ig QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiAgIFRI RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks IE9SIFRPUlQKKyAqICAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiAgIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5k ZWYgU0ZNVF9QQVJBTVMxMjc5X0gKKyNkZWZpbmUgU0ZNVF9QQVJBTVMxMjc5X0gKKworI2RlZmlu ZSBQT1MxCTcKKyNkZWZpbmUgU0wxCTE0CisjZGVmaW5lIFNMMgkzCisjZGVmaW5lIFNSMQk1Cisj ZGVmaW5lIFNSMgkxCisjZGVmaW5lIE1TSzEJMHhmN2ZlZmZmZFUKKyNkZWZpbmUgTVNLMgkweDdm ZWZjZmZmVQorI2RlZmluZSBNU0szCTB4YWZmM2VmM2ZVCisjZGVmaW5lIE1TSzQJMHhiNWZmZmY3 ZlUKKyNkZWZpbmUgUEFSSVRZMQkweDAwMDAwMDAxVQorI2RlZmluZSBQQVJJVFkyCTB4MDAwMDAw MDBVCisjZGVmaW5lIFBBUklUWTMJMHgwMDAwMDAwMFUKKyNkZWZpbmUgUEFSSVRZNAkweDIwMDAw MDAwVQorCisKKy8qIFBBUkFNRVRFUlMgRk9SIEFMVElWRUMgKi8KKyNpZiBkZWZpbmVkKF9fQVBQ TEVfXykJLyogRm9yIE9TWCAqLworICAgICNkZWZpbmUgQUxUSV9TTDEJKHZlY3RvciB1bnNpZ25l ZCBpbnQpKFNMMSwgU0wxLCBTTDEsIFNMMSkKKyAgICAjZGVmaW5lIEFMVElfU1IxCSh2ZWN0b3Ig dW5zaWduZWQgaW50KShTUjEsIFNSMSwgU1IxLCBTUjEpCisgICAgI2RlZmluZSBBTFRJX01TSwko dmVjdG9yIHVuc2lnbmVkIGludCkoTVNLMSwgTVNLMiwgTVNLMywgTVNLNCkKKyAgICAjZGVmaW5l IEFMVElfTVNLNjQgXAorCSh2ZWN0b3IgdW5zaWduZWQgaW50KShNU0syLCBNU0sxLCBNU0s0LCBN U0szKQorICAgICNkZWZpbmUgQUxUSV9TTDJfUEVSTSBcCisJKHZlY3RvciB1bnNpZ25lZCBjaGFy KSgzLDIxLDIxLDIxLDcsMCwxLDIsMTEsNCw1LDYsMTUsOCw5LDEwKQorICAgICNkZWZpbmUgQUxU SV9TTDJfUEVSTTY0IFwKKwkodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDMsNCw1LDYsNywyOSwyOSwy OSwxMSwxMiwxMywxNCwxNSwwLDEsMikKKyAgICAjZGVmaW5lIEFMVElfU1IyX1BFUk0gXAorCSh2 ZWN0b3IgdW5zaWduZWQgY2hhcikoNywwLDEsMiwxMSw0LDUsNiwxNSw4LDksMTAsMTcsMTIsMTMs MTQpCisgICAgI2RlZmluZSBBTFRJX1NSMl9QRVJNNjQgXAorCSh2ZWN0b3IgdW5zaWduZWQgY2hh cikoMTUsMCwxLDIsMyw0LDUsNiwxNyw4LDksMTAsMTEsMTIsMTMsMTQpCisjZWxzZQkvKiBGb3Ig T1RIRVIgT1NzKExpbnV4PykgKi8KKyAgICAjZGVmaW5lIEFMVElfU0wxCXtTTDEsIFNMMSwgU0wx LCBTTDF9CisgICAgI2RlZmluZSBBTFRJX1NSMQl7U1IxLCBTUjEsIFNSMSwgU1IxfQorICAgICNk ZWZpbmUgQUxUSV9NU0sJe01TSzEsIE1TSzIsIE1TSzMsIE1TSzR9CisgICAgI2RlZmluZSBBTFRJ X01TSzY0CXtNU0syLCBNU0sxLCBNU0s0LCBNU0szfQorICAgICNkZWZpbmUgQUxUSV9TTDJfUEVS TQl7MywyMSwyMSwyMSw3LDAsMSwyLDExLDQsNSw2LDE1LDgsOSwxMH0KKyAgICAjZGVmaW5lIEFM VElfU0wyX1BFUk02NAl7Myw0LDUsNiw3LDI5LDI5LDI5LDExLDEyLDEzLDE0LDE1LDAsMSwyfQor ICAgICNkZWZpbmUgQUxUSV9TUjJfUEVSTQl7NywwLDEsMiwxMSw0LDUsNiwxNSw4LDksMTAsMTcs MTIsMTMsMTR9CisgICAgI2RlZmluZSBBTFRJX1NSMl9QRVJNNjQJezE1LDAsMSwyLDMsNCw1LDYs MTcsOCw5LDEwLDExLDEyLDEzLDE0fQorI2VuZGlmCS8qIEZvciBPU1ggKi8KKyNkZWZpbmUgSURT VFIJIlNGTVQtMTI3OTo3LTE0LTMtNS0xOmY3ZmVmZmZkLTdmZWZjZmZmLWFmZjNlZjNmLWI1ZmZm ZjdmIgorCisjZW5kaWYgLyogU0ZNVF9QQVJBTVMxMjc5X0ggKi8KCmRpZmYgLS1naXQgYS8zODkt ZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L2luY2x1ZGUvdGVzdC9TRk1U LXBhcmFtczEzMjA0OS5oIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAv dGVzdC9pbmNsdWRlL3Rlc3QvU0ZNVC1wYXJhbXMxMzIwNDkuaApuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwLi5hMWRjZWMzCi0tLSAvZGV2L251bGwKKysrIGIvMzg5LWRzLWJhc2Ut My4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC9pbmNsdWRlL3Rlc3QvU0ZNVC1wYXJhbXMx MzIwNDkuaApAQCAtMCwwICsxLDgxIEBACisvKgorICogVGhpcyBmaWxlIGRlcml2ZXMgZnJvbSBT Rk1UIDEuMy4zCisgKiAoaHR0cDovL3d3dy5tYXRoLnNjaS5oaXJvc2hpbWEtdS5hYy5qcC9+bS1t YXQvTVQvU0ZNVC9pbmRleC5odG1sKSwgd2hpY2ggd2FzCisgKiByZWxlYXNlZCB1bmRlciB0aGUg dGVybXMgb2YgdGhlIGZvbGxvd2luZyBsaWNlbnNlOgorICoKKyAqICAgQ29weXJpZ2h0IChjKSAy MDA2LDIwMDcgTXV0c3VvIFNhaXRvLCBNYWtvdG8gTWF0c3Vtb3RvIGFuZCBIaXJvc2hpbWEKKyAq ICAgVW5pdmVyc2l0eS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgIFJlZGlzdHJpYnV0 aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor ICogICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93 aW5nIGNvbmRpdGlvbnMgYXJlCisgKiAgIG1ldDoKKyAqCisgKiAgICAgICAqIFJlZGlzdHJpYnV0 aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg ICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg ZGlzY2xhaW1lci4KKyAqICAgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11 c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlz IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgICBkaXNjbGFp bWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQK KyAqICAgICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogICAgICAgKiBOZWl0aGVyIHRo ZSBuYW1lIG9mIHRoZSBIaXJvc2hpbWEgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mCisgKiAg ICAgICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl IHByb2R1Y3RzCisgKiAgICAgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg c3BlY2lmaWMgcHJpb3Igd3JpdHRlbgorICogICAgICAgICBwZXJtaXNzaW9uLgorICoKKyAqICAg VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP TlRSSUJVVE9SUworICogICAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogICBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqICAgQSBQQVJU SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ UklHSFQKKyAqICAgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiAgIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqICAgTElNSVRFRCBUTywg UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us CisgKiAgIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF UiBDQVVTRUQgQU5EIE9OIEFOWQorICogICBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAgIChJTkNMVURJTkcgTkVH TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor ICogICBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ IE9GIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIFNGTVRfUEFSQU1TMTMyMDQ5X0gKKyNkZWZp bmUgU0ZNVF9QQVJBTVMxMzIwNDlfSAorCisjZGVmaW5lIFBPUzEJMTEwCisjZGVmaW5lIFNMMQkx OQorI2RlZmluZSBTTDIJMQorI2RlZmluZSBTUjEJMjEKKyNkZWZpbmUgU1IyCTEKKyNkZWZpbmUg TVNLMQkweGZmZmZiYjVmVQorI2RlZmluZSBNU0syCTB4ZmI2ZWJmOTVVCisjZGVmaW5lIE1TSzMJ MHhmZmZlZmZmYVUKKyNkZWZpbmUgTVNLNAkweGNmZjc3ZmZmVQorI2RlZmluZSBQQVJJVFkxCTB4 MDAwMDAwMDFVCisjZGVmaW5lIFBBUklUWTIJMHgwMDAwMDAwMFUKKyNkZWZpbmUgUEFSSVRZMwkw eGNiNTIwMDAwVQorI2RlZmluZSBQQVJJVFk0CTB4YzdlOTFjN2RVCisKKworLyogUEFSQU1FVEVS UyBGT1IgQUxUSVZFQyAqLworI2lmIGRlZmluZWQoX19BUFBMRV9fKQkvKiBGb3IgT1NYICovCisg ICAgI2RlZmluZSBBTFRJX1NMMQkodmVjdG9yIHVuc2lnbmVkIGludCkoU0wxLCBTTDEsIFNMMSwg U0wxKQorICAgICNkZWZpbmUgQUxUSV9TUjEJKHZlY3RvciB1bnNpZ25lZCBpbnQpKFNSMSwgU1Ix LCBTUjEsIFNSMSkKKyAgICAjZGVmaW5lIEFMVElfTVNLCSh2ZWN0b3IgdW5zaWduZWQgaW50KShN U0sxLCBNU0syLCBNU0szLCBNU0s0KQorICAgICNkZWZpbmUgQUxUSV9NU0s2NCBcCisJKHZlY3Rv ciB1bnNpZ25lZCBpbnQpKE1TSzIsIE1TSzEsIE1TSzQsIE1TSzMpCisgICAgI2RlZmluZSBBTFRJ X1NMMl9QRVJNIFwKKwkodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDEsMiwzLDIzLDUsNiw3LDAsOSwx MCwxMSw0LDEzLDE0LDE1LDgpCisgICAgI2RlZmluZSBBTFRJX1NMMl9QRVJNNjQgXAorCSh2ZWN0 b3IgdW5zaWduZWQgY2hhcikoMSwyLDMsNCw1LDYsNywzMSw5LDEwLDExLDEyLDEzLDE0LDE1LDAp CisgICAgI2RlZmluZSBBTFRJX1NSMl9QRVJNIFwKKwkodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDcs MCwxLDIsMTEsNCw1LDYsMTUsOCw5LDEwLDE3LDEyLDEzLDE0KQorICAgICNkZWZpbmUgQUxUSV9T UjJfUEVSTTY0IFwKKwkodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDE1LDAsMSwyLDMsNCw1LDYsMTcs OCw5LDEwLDExLDEyLDEzLDE0KQorI2Vsc2UJLyogRm9yIE9USEVSIE9TcyhMaW51eD8pICovCisg ICAgI2RlZmluZSBBTFRJX1NMMQl7U0wxLCBTTDEsIFNMMSwgU0wxfQorICAgICNkZWZpbmUgQUxU SV9TUjEJe1NSMSwgU1IxLCBTUjEsIFNSMX0KKyAgICAjZGVmaW5lIEFMVElfTVNLCXtNU0sxLCBN U0syLCBNU0szLCBNU0s0fQorICAgICNkZWZpbmUgQUxUSV9NU0s2NAl7TVNLMiwgTVNLMSwgTVNL NCwgTVNLM30KKyAgICAjZGVmaW5lIEFMVElfU0wyX1BFUk0JezEsMiwzLDIzLDUsNiw3LDAsOSwx MCwxMSw0LDEzLDE0LDE1LDh9CisgICAgI2RlZmluZSBBTFRJX1NMMl9QRVJNNjQJezEsMiwzLDQs NSw2LDcsMzEsOSwxMCwxMSwxMiwxMywxNCwxNSwwfQorICAgICNkZWZpbmUgQUxUSV9TUjJfUEVS TQl7NywwLDEsMiwxMSw0LDUsNiwxNSw4LDksMTAsMTcsMTIsMTMsMTR9CisgICAgI2RlZmluZSBB TFRJX1NSMl9QRVJNNjQJezE1LDAsMSwyLDMsNCw1LDYsMTcsOCw5LDEwLDExLDEyLDEzLDE0fQor I2VuZGlmCS8qIEZvciBPU1ggKi8KKyNkZWZpbmUgSURTVFIJIlNGTVQtMTMyMDQ5OjExMC0xOS0x LTIxLTE6ZmZmZmJiNWYtZmI2ZWJmOTUtZmZmZWZmZmEtY2ZmNzdmZmYiCisKKyNlbmRpZiAvKiBT Rk1UX1BBUkFNUzEzMjA0OV9IICovCgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVp bGQvamVtYWxsb2MtNS4zLjAvdGVzdC9pbmNsdWRlL3Rlc3QvU0ZNVC1wYXJhbXMxOTkzNy5oIGIv Mzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC9pbmNsdWRlL3Rlc3Qv U0ZNVC1wYXJhbXMxOTkzNy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZi OTJiNGMKLS0tIC9kZXYvbnVsbAorKysgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxv Yy01LjMuMC90ZXN0L2luY2x1ZGUvdGVzdC9TRk1ULXBhcmFtczE5OTM3LmgKQEAgLTAsMCArMSw4 MSBAQAorLyoKKyAqIFRoaXMgZmlsZSBkZXJpdmVzIGZyb20gU0ZNVCAxLjMuMworICogKGh0dHA6 Ly93d3cubWF0aC5zY2kuaGlyb3NoaW1hLXUuYWMuanAvfm0tbWF0L01UL1NGTVQvaW5kZXguaHRt bCksIHdoaWNoIHdhcworICogcmVsZWFzZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBmb2xsb3dp bmcgbGljZW5zZToKKyAqCisgKiAgIENvcHlyaWdodCAoYykgMjAwNiwyMDA3IE11dHN1byBTYWl0 bywgTWFrb3RvIE1hdHN1bW90byBhbmQgSGlyb3NoaW1hCisgKiAgIFVuaXZlcnNpdHkuIEFsbCBy aWdodHMgcmVzZXJ2ZWQuCisgKgorICogICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICAgbW9kaWZpY2F0aW9uLCBh cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQor ICogICBtZXQ6CisgKgorICogICAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICAgICBub3RpY2UsIHRoaXMg bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAg ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv dmUKKyAqICAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg YW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRh dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgKiAgICAgICAgIHdpdGggdGhl IGRpc3RyaWJ1dGlvbi4KKyAqICAgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgSGlyb3No aW1hIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZgorICogICAgICAgICBpdHMgY29udHJpYnV0 b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgICAg ICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0 ZW4KKyAqICAgICAgICAgcGVybWlzc2lvbi4KKyAqCisgKiAgIFRISVMgU09GVFdBUkUgSVMgUFJP VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICAgIkFT IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV VCBOT1QKKyAqICAgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiAgIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiAgIE9XTkVSIE9S IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO VEFMLAorICogICBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo SU5DTFVESU5HLCBCVVQgTk9UCisgKiAgIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogICBEQVRBLCBPUiBQUk9G SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK KyAqICAgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ QUJJTElUWSwgT1IgVE9SVAorICogICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqICAgT0YgVEhJUyBTT0ZUV0FS RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq LworI2lmbmRlZiBTRk1UX1BBUkFNUzE5OTM3X0gKKyNkZWZpbmUgU0ZNVF9QQVJBTVMxOTkzN19I CisKKyNkZWZpbmUgUE9TMQkxMjIKKyNkZWZpbmUgU0wxCTE4CisjZGVmaW5lIFNMMgkxCisjZGVm aW5lIFNSMQkxMQorI2RlZmluZSBTUjIJMQorI2RlZmluZSBNU0sxCTB4ZGZmZmZmZWZVCisjZGVm aW5lIE1TSzIJMHhkZGZlY2I3ZlUKKyNkZWZpbmUgTVNLMwkweGJmZmFmZmZmVQorI2RlZmluZSBN U0s0CTB4YmZmZmZmZjZVCisjZGVmaW5lIFBBUklUWTEJMHgwMDAwMDAwMVUKKyNkZWZpbmUgUEFS SVRZMgkweDAwMDAwMDAwVQorI2RlZmluZSBQQVJJVFkzCTB4MDAwMDAwMDBVCisjZGVmaW5lIFBB UklUWTQJMHgxM2M5ZTY4NFUKKworCisvKiBQQVJBTUVURVJTIEZPUiBBTFRJVkVDICovCisjaWYg ZGVmaW5lZChfX0FQUExFX18pCS8qIEZvciBPU1ggKi8KKyAgICAjZGVmaW5lIEFMVElfU0wxCSh2 ZWN0b3IgdW5zaWduZWQgaW50KShTTDEsIFNMMSwgU0wxLCBTTDEpCisgICAgI2RlZmluZSBBTFRJ X1NSMQkodmVjdG9yIHVuc2lnbmVkIGludCkoU1IxLCBTUjEsIFNSMSwgU1IxKQorICAgICNkZWZp bmUgQUxUSV9NU0sJKHZlY3RvciB1bnNpZ25lZCBpbnQpKE1TSzEsIE1TSzIsIE1TSzMsIE1TSzQp CisgICAgI2RlZmluZSBBTFRJX01TSzY0IFwKKwkodmVjdG9yIHVuc2lnbmVkIGludCkoTVNLMiwg TVNLMSwgTVNLNCwgTVNLMykKKyAgICAjZGVmaW5lIEFMVElfU0wyX1BFUk0gXAorCSh2ZWN0b3Ig dW5zaWduZWQgY2hhcikoMSwyLDMsMjMsNSw2LDcsMCw5LDEwLDExLDQsMTMsMTQsMTUsOCkKKyAg ICAjZGVmaW5lIEFMVElfU0wyX1BFUk02NCBcCisJKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgxLDIs Myw0LDUsNiw3LDMxLDksMTAsMTEsMTIsMTMsMTQsMTUsMCkKKyAgICAjZGVmaW5lIEFMVElfU1Iy X1BFUk0gXAorCSh2ZWN0b3IgdW5zaWduZWQgY2hhcikoNywwLDEsMiwxMSw0LDUsNiwxNSw4LDks MTAsMTcsMTIsMTMsMTQpCisgICAgI2RlZmluZSBBTFRJX1NSMl9QRVJNNjQgXAorCSh2ZWN0b3Ig dW5zaWduZWQgY2hhcikoMTUsMCwxLDIsMyw0LDUsNiwxNyw4LDksMTAsMTEsMTIsMTMsMTQpCisj ZWxzZQkvKiBGb3IgT1RIRVIgT1NzKExpbnV4PykgKi8KKyAgICAjZGVmaW5lIEFMVElfU0wxCXtT TDEsIFNMMSwgU0wxLCBTTDF9CisgICAgI2RlZmluZSBBTFRJX1NSMQl7U1IxLCBTUjEsIFNSMSwg U1IxfQorICAgICNkZWZpbmUgQUxUSV9NU0sJe01TSzEsIE1TSzIsIE1TSzMsIE1TSzR9CisgICAg I2RlZmluZSBBTFRJX01TSzY0CXtNU0syLCBNU0sxLCBNU0s0LCBNU0szfQorICAgICNkZWZpbmUg QUxUSV9TTDJfUEVSTQl7MSwyLDMsMjMsNSw2LDcsMCw5LDEwLDExLDQsMTMsMTQsMTUsOH0KKyAg ICAjZGVmaW5lIEFMVElfU0wyX1BFUk02NAl7MSwyLDMsNCw1LDYsNywzMSw5LDEwLDExLDEyLDEz LDE0LDE1LDB9CisgICAgI2RlZmluZSBBTFRJX1NSMl9QRVJNCXs3LDAsMSwyLDExLDQsNSw2LDE1 LDgsOSwxMCwxNywxMiwxMywxNH0KKyAgICAjZGVmaW5lIEFMVElfU1IyX1BFUk02NAl7MTUsMCwx LDIsMyw0LDUsNiwxNyw4LDksMTAsMTEsMTIsMTMsMTR9CisjZW5kaWYJLyogRm9yIE9TWCAqLwor I2RlZmluZSBJRFNUUgkiU0ZNVC0xOTkzNzoxMjItMTgtMS0xMS0xOmRmZmZmZmVmLWRkZmVjYjdm LWJmZmFmZmZmLWJmZmZmZmY2IgorCisjZW5kaWYgLyogU0ZNVF9QQVJBTVMxOTkzN19IICovCgpk aWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC9p bmNsdWRlL3Rlc3QvU0ZNVC1wYXJhbXMyMTYwOTEuaCBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxk L2plbWFsbG9jLTUuMy4wL3Rlc3QvaW5jbHVkZS90ZXN0L1NGTVQtcGFyYW1zMjE2MDkxLmgKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTI1Y2UyOAotLS0gL2Rldi9udWxsCisr KyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvaW5jbHVkZS90 ZXN0L1NGTVQtcGFyYW1zMjE2MDkxLmgKQEAgLTAsMCArMSw4MSBAQAorLyoKKyAqIFRoaXMgZmls ZSBkZXJpdmVzIGZyb20gU0ZNVCAxLjMuMworICogKGh0dHA6Ly93d3cubWF0aC5zY2kuaGlyb3No aW1hLXUuYWMuanAvfm0tbWF0L01UL1NGTVQvaW5kZXguaHRtbCksIHdoaWNoIHdhcworICogcmVs ZWFzZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBmb2xsb3dpbmcgbGljZW5zZToKKyAqCisgKiAg IENvcHlyaWdodCAoYykgMjAwNiwyMDA3IE11dHN1byBTYWl0bywgTWFrb3RvIE1hdHN1bW90byBh bmQgSGlyb3NoaW1hCisgKiAgIFVuaXZlcnNpdHkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor ICogICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3 aXRoIG9yIHdpdGhvdXQKKyAqICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogICBtZXQ6CisgKgorICogICAg ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl IGNvcHlyaWdodAorICogICAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICAgY29weXJp Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAq ICAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0 ZXJpYWxzIHByb3ZpZGVkCisgKiAgICAgICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAg ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgSGlyb3NoaW1hIFVuaXZlcnNpdHkgbm9yIHRo ZSBuYW1lcyBvZgorICogICAgICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgICAgICBkZXJpdmVkIGZyb20gdGhpcyBz b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4KKyAqICAgICAgICAgcGVybWlz c2lvbi4KKyAqCisgKiAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICAgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqICAgTElNSVRFRCBU TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg Rk9SCisgKiAgIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO VCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiAgIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogICBTUEVDSUFMLCBF WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisg KiAgIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD RVM7IExPU1MgT0YgVVNFLAorICogICBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqICAgVEhFT1JZIE9GIExJQUJJ TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog ICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg T1VUIE9GIFRIRSBVU0UKKyAqICAgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBTRk1UX1BBUkFN UzIxNjA5MV9ICisjZGVmaW5lIFNGTVRfUEFSQU1TMjE2MDkxX0gKKworI2RlZmluZSBQT1MxCTYy NworI2RlZmluZSBTTDEJMTEKKyNkZWZpbmUgU0wyCTMKKyNkZWZpbmUgU1IxCTEwCisjZGVmaW5l IFNSMgkxCisjZGVmaW5lIE1TSzEJMHhiZmY3YmZmN1UKKyNkZWZpbmUgTVNLMgkweGJmZmZmZmZm VQorI2RlZmluZSBNU0szCTB4YmZmZmZhN2ZVCisjZGVmaW5lIE1TSzQJMHhmZmRkZmJmYlUKKyNk ZWZpbmUgUEFSSVRZMQkweGY4MDAwMDAxVQorI2RlZmluZSBQQVJJVFkyCTB4ODllODA3MDlVCisj ZGVmaW5lIFBBUklUWTMJMHgzYmQyYjY0YlUKKyNkZWZpbmUgUEFSSVRZNAkweDBjNjRiMWU0VQor CisKKy8qIFBBUkFNRVRFUlMgRk9SIEFMVElWRUMgKi8KKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykJ LyogRm9yIE9TWCAqLworICAgICNkZWZpbmUgQUxUSV9TTDEJKHZlY3RvciB1bnNpZ25lZCBpbnQp KFNMMSwgU0wxLCBTTDEsIFNMMSkKKyAgICAjZGVmaW5lIEFMVElfU1IxCSh2ZWN0b3IgdW5zaWdu ZWQgaW50KShTUjEsIFNSMSwgU1IxLCBTUjEpCisgICAgI2RlZmluZSBBTFRJX01TSwkodmVjdG9y IHVuc2lnbmVkIGludCkoTVNLMSwgTVNLMiwgTVNLMywgTVNLNCkKKyAgICAjZGVmaW5lIEFMVElf TVNLNjQgXAorCSh2ZWN0b3IgdW5zaWduZWQgaW50KShNU0syLCBNU0sxLCBNU0s0LCBNU0szKQor ICAgICNkZWZpbmUgQUxUSV9TTDJfUEVSTSBcCisJKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgzLDIx LDIxLDIxLDcsMCwxLDIsMTEsNCw1LDYsMTUsOCw5LDEwKQorICAgICNkZWZpbmUgQUxUSV9TTDJf UEVSTTY0IFwKKwkodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDMsNCw1LDYsNywyOSwyOSwyOSwxMSwx MiwxMywxNCwxNSwwLDEsMikKKyAgICAjZGVmaW5lIEFMVElfU1IyX1BFUk0gXAorCSh2ZWN0b3Ig dW5zaWduZWQgY2hhcikoNywwLDEsMiwxMSw0LDUsNiwxNSw4LDksMTAsMTcsMTIsMTMsMTQpCisg ICAgI2RlZmluZSBBTFRJX1NSMl9QRVJNNjQgXAorCSh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMTUs MCwxLDIsMyw0LDUsNiwxNyw4LDksMTAsMTEsMTIsMTMsMTQpCisjZWxzZQkvKiBGb3IgT1RIRVIg T1NzKExpbnV4PykgKi8KKyAgICAjZGVmaW5lIEFMVElfU0wxCXtTTDEsIFNMMSwgU0wxLCBTTDF9 CisgICAgI2RlZmluZSBBTFRJX1NSMQl7U1IxLCBTUjEsIFNSMSwgU1IxfQorICAgICNkZWZpbmUg QUxUSV9NU0sJe01TSzEsIE1TSzIsIE1TSzMsIE1TSzR9CisgICAgI2RlZmluZSBBTFRJX01TSzY0 CXtNU0syLCBNU0sxLCBNU0s0LCBNU0szfQorICAgICNkZWZpbmUgQUxUSV9TTDJfUEVSTQl7Mywy MSwyMSwyMSw3LDAsMSwyLDExLDQsNSw2LDE1LDgsOSwxMH0KKyAgICAjZGVmaW5lIEFMVElfU0wy X1BFUk02NAl7Myw0LDUsNiw3LDI5LDI5LDI5LDExLDEyLDEzLDE0LDE1LDAsMSwyfQorICAgICNk ZWZpbmUgQUxUSV9TUjJfUEVSTQl7NywwLDEsMiwxMSw0LDUsNiwxNSw4LDksMTAsMTcsMTIsMTMs MTR9CisgICAgI2RlZmluZSBBTFRJX1NSMl9QRVJNNjQJezE1LDAsMSwyLDMsNCw1LDYsMTcsOCw5 LDEwLDExLDEyLDEzLDE0fQorI2VuZGlmCS8qIEZvciBPU1ggKi8KKyNkZWZpbmUgSURTVFIJIlNG TVQtMjE2MDkxOjYyNy0xMS0zLTEwLTE6YmZmN2JmZjctYmZmZmZmZmYtYmZmZmZhN2YtZmZkZGZi ZmIiCisKKyNlbmRpZiAvKiBTRk1UX1BBUkFNUzIxNjA5MV9IICovCgpkaWZmIC0tZ2l0IGEvMzg5 LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC9pbmNsdWRlL3Rlc3QvU0ZN VC1wYXJhbXMyMjgxLmggYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90 ZXN0L2luY2x1ZGUvdGVzdC9TRk1ULXBhcmFtczIyODEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwLi4wZWY4NWM0Ci0tLSAvZGV2L251bGwKKysrIGIvMzg5LWRzLWJhc2UtMy4z LjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC9pbmNsdWRlL3Rlc3QvU0ZNVC1wYXJhbXMyMjgx LmgKQEAgLTAsMCArMSw4MSBAQAorLyoKKyAqIFRoaXMgZmlsZSBkZXJpdmVzIGZyb20gU0ZNVCAx LjMuMworICogKGh0dHA6Ly93d3cubWF0aC5zY2kuaGlyb3NoaW1hLXUuYWMuanAvfm0tbWF0L01U L1NGTVQvaW5kZXguaHRtbCksIHdoaWNoIHdhcworICogcmVsZWFzZWQgdW5kZXIgdGhlIHRlcm1z IG9mIHRoZSBmb2xsb3dpbmcgbGljZW5zZToKKyAqCisgKiAgIENvcHlyaWdodCAoYykgMjAwNiwy MDA3IE11dHN1byBTYWl0bywgTWFrb3RvIE1hdHN1bW90byBhbmQgSGlyb3NoaW1hCisgKiAgIFVu aXZlcnNpdHkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogICBSZWRpc3RyaWJ1dGlvbiBh bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICAg bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj b25kaXRpb25zIGFyZQorICogICBtZXQ6CisgKgorICogICAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICAg ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns YWltZXIuCisgKiAgICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl cHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0 IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICAgZGlzY2xhaW1lciBp biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgKiAg ICAgICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAgICogTmVpdGhlciB0aGUgbmFt ZSBvZiB0aGUgSGlyb3NoaW1hIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZgorICogICAgICAg ICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k dWN0cworICogICAgICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp ZmljIHByaW9yIHdyaXR0ZW4KKyAqICAgICAgICAgcGVybWlzc2lvbi4KKyAqCisgKiAgIFRISVMg U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC VVRPUlMKKyAqICAgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT LCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqICAgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiAgIEEgUEFSVElDVUxB UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU CisgKiAgIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO RElSRUNULCBJTkNJREVOVEFMLAorICogICBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiAgIExJTUlURUQgVE8sIFBST0NV UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICog ICBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV U0VEIEFORCBPTiBBTlkKKyAqICAgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogICAoSU5DTFVESU5HIE5FR0xJR0VO Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqICAg T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT VUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBTRk1UX1BBUkFNUzIyODFfSAorI2RlZmluZSBTRk1U X1BBUkFNUzIyODFfSAorCisjZGVmaW5lIFBPUzEJMTIKKyNkZWZpbmUgU0wxCTE5CisjZGVmaW5l IFNMMgkxCisjZGVmaW5lIFNSMQk1CisjZGVmaW5lIFNSMgkxCisjZGVmaW5lIE1TSzEJMHhiZmY3 ZmZiZlUKKyNkZWZpbmUgTVNLMgkweGZkZmZmZmZlVQorI2RlZmluZSBNU0szCTB4ZjdmZmVmN2ZV CisjZGVmaW5lIE1TSzQJMHhmMmY3Y2JiZlUKKyNkZWZpbmUgUEFSSVRZMQkweDAwMDAwMDAxVQor I2RlZmluZSBQQVJJVFkyCTB4MDAwMDAwMDBVCisjZGVmaW5lIFBBUklUWTMJMHgwMDAwMDAwMFUK KyNkZWZpbmUgUEFSSVRZNAkweDQxZGZhNjAwVQorCisKKy8qIFBBUkFNRVRFUlMgRk9SIEFMVElW RUMgKi8KKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykJLyogRm9yIE9TWCAqLworICAgICNkZWZpbmUg QUxUSV9TTDEJKHZlY3RvciB1bnNpZ25lZCBpbnQpKFNMMSwgU0wxLCBTTDEsIFNMMSkKKyAgICAj ZGVmaW5lIEFMVElfU1IxCSh2ZWN0b3IgdW5zaWduZWQgaW50KShTUjEsIFNSMSwgU1IxLCBTUjEp CisgICAgI2RlZmluZSBBTFRJX01TSwkodmVjdG9yIHVuc2lnbmVkIGludCkoTVNLMSwgTVNLMiwg TVNLMywgTVNLNCkKKyAgICAjZGVmaW5lIEFMVElfTVNLNjQgXAorCSh2ZWN0b3IgdW5zaWduZWQg aW50KShNU0syLCBNU0sxLCBNU0s0LCBNU0szKQorICAgICNkZWZpbmUgQUxUSV9TTDJfUEVSTSBc CisJKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgxLDIsMywyMyw1LDYsNywwLDksMTAsMTEsNCwxMywx NCwxNSw4KQorICAgICNkZWZpbmUgQUxUSV9TTDJfUEVSTTY0IFwKKwkodmVjdG9yIHVuc2lnbmVk IGNoYXIpKDEsMiwzLDQsNSw2LDcsMzEsOSwxMCwxMSwxMiwxMywxNCwxNSwwKQorICAgICNkZWZp bmUgQUxUSV9TUjJfUEVSTSBcCisJKHZlY3RvciB1bnNpZ25lZCBjaGFyKSg3LDAsMSwyLDExLDQs NSw2LDE1LDgsOSwxMCwxNywxMiwxMywxNCkKKyAgICAjZGVmaW5lIEFMVElfU1IyX1BFUk02NCBc CisJKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgxNSwwLDEsMiwzLDQsNSw2LDE3LDgsOSwxMCwxMSwx MiwxMywxNCkKKyNlbHNlCS8qIEZvciBPVEhFUiBPU3MoTGludXg/KSAqLworICAgICNkZWZpbmUg QUxUSV9TTDEJe1NMMSwgU0wxLCBTTDEsIFNMMX0KKyAgICAjZGVmaW5lIEFMVElfU1IxCXtTUjEs IFNSMSwgU1IxLCBTUjF9CisgICAgI2RlZmluZSBBTFRJX01TSwl7TVNLMSwgTVNLMiwgTVNLMywg TVNLNH0KKyAgICAjZGVmaW5lIEFMVElfTVNLNjQJe01TSzIsIE1TSzEsIE1TSzQsIE1TSzN9Cisg ICAgI2RlZmluZSBBTFRJX1NMMl9QRVJNCXsxLDIsMywyMyw1LDYsNywwLDksMTAsMTEsNCwxMywx NCwxNSw4fQorICAgICNkZWZpbmUgQUxUSV9TTDJfUEVSTTY0CXsxLDIsMyw0LDUsNiw3LDMxLDks MTAsMTEsMTIsMTMsMTQsMTUsMH0KKyAgICAjZGVmaW5lIEFMVElfU1IyX1BFUk0JezcsMCwxLDIs MTEsNCw1LDYsMTUsOCw5LDEwLDE3LDEyLDEzLDE0fQorICAgICNkZWZpbmUgQUxUSV9TUjJfUEVS TTY0CXsxNSwwLDEsMiwzLDQsNSw2LDE3LDgsOSwxMCwxMSwxMiwxMywxNH0KKyNlbmRpZgkvKiBG b3IgT1NYICovCisjZGVmaW5lIElEU1RSCSJTRk1ULTIyODE6MTItMTktMS01LTE6YmZmN2ZmYmYt ZmRmZmZmZmUtZjdmZmVmN2YtZjJmN2NiYmYiCisKKyNlbmRpZiAvKiBTRk1UX1BBUkFNUzIyODFf SCAqLwoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4w L3Rlc3QvaW5jbHVkZS90ZXN0L1NGTVQtcGFyYW1zNDI1My5oIGIvMzg5LWRzLWJhc2UtMy4zLjAt YnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC9pbmNsdWRlL3Rlc3QvU0ZNVC1wYXJhbXM0MjUzLmgK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWYwN2JjNgotLS0gL2Rldi9udWxs CisrKyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvaW5jbHVk ZS90ZXN0L1NGTVQtcGFyYW1zNDI1My5oCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBUaGlzIGZp bGUgZGVyaXZlcyBmcm9tIFNGTVQgMS4zLjMKKyAqIChodHRwOi8vd3d3Lm1hdGguc2NpLmhpcm9z aGltYS11LmFjLmpwL35tLW1hdC9NVC9TRk1UL2luZGV4Lmh0bWwpLCB3aGljaCB3YXMKKyAqIHJl bGVhc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgZm9sbG93aW5nIGxpY2Vuc2U6CisgKgorICog ICBDb3B5cmlnaHQgKGMpIDIwMDYsMjAwNyBNdXRzdW8gU2FpdG8sIE1ha290byBNYXRzdW1vdG8g YW5kIEhpcm9zaGltYQorICogICBVbml2ZXJzaXR5LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK KyAqICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg d2l0aCBvciB3aXRob3V0CisgKiAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqICAgbWV0OgorICoKKyAqICAg ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92 ZSBjb3B5cmlnaHQKKyAqICAgICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgIGNvcHly aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisg KiAgICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h dGVyaWFscyBwcm92aWRlZAorICogICAgICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAg ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEhpcm9zaGltYSBVbml2ZXJzaXR5IG5vciB0 aGUgbmFtZXMgb2YKKyAqICAgICAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICAgICAgZGVyaXZlZCBmcm9tIHRoaXMg c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuCisgKiAgICAgICAgIHBlcm1p c3Npb24uCisgKgorICogICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAgICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiAgIExJTUlURUQg VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT IEZPUgorICogICBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF TlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogICBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqICAgU1BFQ0lBTCwg RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAor ICogICBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ Q0VTOyBMT1NTIE9GIFVTRSwKKyAqICAgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiAgIFRIRU9SWSBPRiBMSUFC SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq ICAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ IE9VVCBPRiBUSEUgVVNFCisgKiAgIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgU0ZNVF9QQVJB TVM0MjUzX0gKKyNkZWZpbmUgU0ZNVF9QQVJBTVM0MjUzX0gKKworI2RlZmluZSBQT1MxCTE3Cisj ZGVmaW5lIFNMMQkyMAorI2RlZmluZSBTTDIJMQorI2RlZmluZSBTUjEJNworI2RlZmluZSBTUjIJ MQorI2RlZmluZSBNU0sxCTB4OWY3YmZmZmZVCisjZGVmaW5lIE1TSzIJMHg5ZmZmZmY1ZlUKKyNk ZWZpbmUgTVNLMwkweDNlZmZmZmZiVQorI2RlZmluZSBNU0s0CTB4ZmZmZmY3YmJVCisjZGVmaW5l IFBBUklUWTEJMHhhODAwMDAwMVUKKyNkZWZpbmUgUEFSSVRZMgkweGFmNTM5MGEzVQorI2RlZmlu ZSBQQVJJVFkzCTB4Yjc0MGIzZjhVCisjZGVmaW5lIFBBUklUWTQJMHg2YzExNDg2ZFUKKworCisv KiBQQVJBTUVURVJTIEZPUiBBTFRJVkVDICovCisjaWYgZGVmaW5lZChfX0FQUExFX18pCS8qIEZv ciBPU1ggKi8KKyAgICAjZGVmaW5lIEFMVElfU0wxCSh2ZWN0b3IgdW5zaWduZWQgaW50KShTTDEs IFNMMSwgU0wxLCBTTDEpCisgICAgI2RlZmluZSBBTFRJX1NSMQkodmVjdG9yIHVuc2lnbmVkIGlu dCkoU1IxLCBTUjEsIFNSMSwgU1IxKQorICAgICNkZWZpbmUgQUxUSV9NU0sJKHZlY3RvciB1bnNp Z25lZCBpbnQpKE1TSzEsIE1TSzIsIE1TSzMsIE1TSzQpCisgICAgI2RlZmluZSBBTFRJX01TSzY0 IFwKKwkodmVjdG9yIHVuc2lnbmVkIGludCkoTVNLMiwgTVNLMSwgTVNLNCwgTVNLMykKKyAgICAj ZGVmaW5lIEFMVElfU0wyX1BFUk0gXAorCSh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMSwyLDMsMjMs NSw2LDcsMCw5LDEwLDExLDQsMTMsMTQsMTUsOCkKKyAgICAjZGVmaW5lIEFMVElfU0wyX1BFUk02 NCBcCisJKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgxLDIsMyw0LDUsNiw3LDMxLDksMTAsMTEsMTIs MTMsMTQsMTUsMCkKKyAgICAjZGVmaW5lIEFMVElfU1IyX1BFUk0gXAorCSh2ZWN0b3IgdW5zaWdu ZWQgY2hhcikoNywwLDEsMiwxMSw0LDUsNiwxNSw4LDksMTAsMTcsMTIsMTMsMTQpCisgICAgI2Rl ZmluZSBBTFRJX1NSMl9QRVJNNjQgXAorCSh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMTUsMCwxLDIs Myw0LDUsNiwxNyw4LDksMTAsMTEsMTIsMTMsMTQpCisjZWxzZQkvKiBGb3IgT1RIRVIgT1NzKExp bnV4PykgKi8KKyAgICAjZGVmaW5lIEFMVElfU0wxCXtTTDEsIFNMMSwgU0wxLCBTTDF9CisgICAg I2RlZmluZSBBTFRJX1NSMQl7U1IxLCBTUjEsIFNSMSwgU1IxfQorICAgICNkZWZpbmUgQUxUSV9N U0sJe01TSzEsIE1TSzIsIE1TSzMsIE1TSzR9CisgICAgI2RlZmluZSBBTFRJX01TSzY0CXtNU0sy LCBNU0sxLCBNU0s0LCBNU0szfQorICAgICNkZWZpbmUgQUxUSV9TTDJfUEVSTQl7MSwyLDMsMjMs NSw2LDcsMCw5LDEwLDExLDQsMTMsMTQsMTUsOH0KKyAgICAjZGVmaW5lIEFMVElfU0wyX1BFUk02 NAl7MSwyLDMsNCw1LDYsNywzMSw5LDEwLDExLDEyLDEzLDE0LDE1LDB9CisgICAgI2RlZmluZSBB TFRJX1NSMl9QRVJNCXs3LDAsMSwyLDExLDQsNSw2LDE1LDgsOSwxMCwxNywxMiwxMywxNH0KKyAg ICAjZGVmaW5lIEFMVElfU1IyX1BFUk02NAl7MTUsMCwxLDIsMyw0LDUsNiwxNyw4LDksMTAsMTEs MTIsMTMsMTR9CisjZW5kaWYJLyogRm9yIE9TWCAqLworI2RlZmluZSBJRFNUUgkiU0ZNVC00MjUz OjE3LTIwLTEtNy0xOjlmN2JmZmZmLTlmZmZmZjVmLTNlZmZmZmZiLWZmZmZmN2JiIgorCisjZW5k aWYgLyogU0ZNVF9QQVJBTVM0MjUzX0ggKi8KCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMu MC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L2luY2x1ZGUvdGVzdC9TRk1ULXBhcmFtczQ0NDk3 LmggYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L2luY2x1ZGUv dGVzdC9TRk1ULXBhcmFtczQ0NDk3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MC4uODU1OThmZQotLS0gL2Rldi9udWxsCisrKyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2pl bWFsbG9jLTUuMy4wL3Rlc3QvaW5jbHVkZS90ZXN0L1NGTVQtcGFyYW1zNDQ0OTcuaApAQCAtMCww ICsxLDgxIEBACisvKgorICogVGhpcyBmaWxlIGRlcml2ZXMgZnJvbSBTRk1UIDEuMy4zCisgKiAo aHR0cDovL3d3dy5tYXRoLnNjaS5oaXJvc2hpbWEtdS5hYy5qcC9+bS1tYXQvTVQvU0ZNVC9pbmRl eC5odG1sKSwgd2hpY2ggd2FzCisgKiByZWxlYXNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIGZv bGxvd2luZyBsaWNlbnNlOgorICoKKyAqICAgQ29weXJpZ2h0IChjKSAyMDA2LDIwMDcgTXV0c3Vv IFNhaXRvLCBNYWtvdG8gTWF0c3Vtb3RvIGFuZCBIaXJvc2hpbWEKKyAqICAgVW5pdmVyc2l0eS4g QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogICBtb2RpZmljYXRp b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg YXJlCisgKiAgIG1ldDoKKyAqCisgKiAgICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgICAgIG5vdGljZSwg dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq ICAgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo ZSBhYm92ZQorICogICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0 aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1 bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKyAqICAgICAgICAgd2l0 aCB0aGUgZGlzdHJpYnV0aW9uLgorICogICAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBI aXJvc2hpbWEgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgICAgIGl0cyBjb250 cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAg ICAgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig d3JpdHRlbgorICogICAgICAgICBwZXJtaXNzaW9uLgorICoKKyAqICAgVEhJUyBTT0ZUV0FSRSBJ UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICog ICAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO RywgQlVUIE5PVAorICogICBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqICAgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqICAgT1dO RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO Q0lERU5UQUwsCisgKiAgIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqICAgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiAgIERBVEEsIE9S IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O IEFOWQorICogICBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAgIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogICBPRiBUSElTIFNP RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF LgorICovCisjaWZuZGVmIFNGTVRfUEFSQU1TNDQ0OTdfSAorI2RlZmluZSBTRk1UX1BBUkFNUzQ0 NDk3X0gKKworI2RlZmluZSBQT1MxCTMzMAorI2RlZmluZSBTTDEJNQorI2RlZmluZSBTTDIJMwor I2RlZmluZSBTUjEJOQorI2RlZmluZSBTUjIJMworI2RlZmluZSBNU0sxCTB4ZWZmZmZmZmJVCisj ZGVmaW5lIE1TSzIJMHhkZmJlYmZmZlUKKyNkZWZpbmUgTVNLMwkweGJmYmY3YmVmVQorI2RlZmlu ZSBNU0s0CTB4OWZmZDdiZmZVCisjZGVmaW5lIFBBUklUWTEJMHgwMDAwMDAwMVUKKyNkZWZpbmUg UEFSSVRZMgkweDAwMDAwMDAwVQorI2RlZmluZSBQQVJJVFkzCTB4YTNhYzQwMDBVCisjZGVmaW5l IFBBUklUWTQJMHhlY2MxMzI3YVUKKworCisvKiBQQVJBTUVURVJTIEZPUiBBTFRJVkVDICovCisj aWYgZGVmaW5lZChfX0FQUExFX18pCS8qIEZvciBPU1ggKi8KKyAgICAjZGVmaW5lIEFMVElfU0wx CSh2ZWN0b3IgdW5zaWduZWQgaW50KShTTDEsIFNMMSwgU0wxLCBTTDEpCisgICAgI2RlZmluZSBB TFRJX1NSMQkodmVjdG9yIHVuc2lnbmVkIGludCkoU1IxLCBTUjEsIFNSMSwgU1IxKQorICAgICNk ZWZpbmUgQUxUSV9NU0sJKHZlY3RvciB1bnNpZ25lZCBpbnQpKE1TSzEsIE1TSzIsIE1TSzMsIE1T SzQpCisgICAgI2RlZmluZSBBTFRJX01TSzY0IFwKKwkodmVjdG9yIHVuc2lnbmVkIGludCkoTVNL MiwgTVNLMSwgTVNLNCwgTVNLMykKKyAgICAjZGVmaW5lIEFMVElfU0wyX1BFUk0gXAorCSh2ZWN0 b3IgdW5zaWduZWQgY2hhcikoMywyMSwyMSwyMSw3LDAsMSwyLDExLDQsNSw2LDE1LDgsOSwxMCkK KyAgICAjZGVmaW5lIEFMVElfU0wyX1BFUk02NCBcCisJKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgz LDQsNSw2LDcsMjksMjksMjksMTEsMTIsMTMsMTQsMTUsMCwxLDIpCisgICAgI2RlZmluZSBBTFRJ X1NSMl9QRVJNIFwKKwkodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDUsNiw3LDAsOSwxMCwxMSw0LDEz LDE0LDE1LDgsMTksMTksMTksMTIpCisgICAgI2RlZmluZSBBTFRJX1NSMl9QRVJNNjQgXAorCSh2 ZWN0b3IgdW5zaWduZWQgY2hhcikoMTMsMTQsMTUsMCwxLDIsMyw0LDE5LDE5LDE5LDgsOSwxMCwx MSwxMikKKyNlbHNlCS8qIEZvciBPVEhFUiBPU3MoTGludXg/KSAqLworICAgICNkZWZpbmUgQUxU SV9TTDEJe1NMMSwgU0wxLCBTTDEsIFNMMX0KKyAgICAjZGVmaW5lIEFMVElfU1IxCXtTUjEsIFNS MSwgU1IxLCBTUjF9CisgICAgI2RlZmluZSBBTFRJX01TSwl7TVNLMSwgTVNLMiwgTVNLMywgTVNL NH0KKyAgICAjZGVmaW5lIEFMVElfTVNLNjQJe01TSzIsIE1TSzEsIE1TSzQsIE1TSzN9CisgICAg I2RlZmluZSBBTFRJX1NMMl9QRVJNCXszLDIxLDIxLDIxLDcsMCwxLDIsMTEsNCw1LDYsMTUsOCw5 LDEwfQorICAgICNkZWZpbmUgQUxUSV9TTDJfUEVSTTY0CXszLDQsNSw2LDcsMjksMjksMjksMTEs MTIsMTMsMTQsMTUsMCwxLDJ9CisgICAgI2RlZmluZSBBTFRJX1NSMl9QRVJNCXs1LDYsNywwLDks MTAsMTEsNCwxMywxNCwxNSw4LDE5LDE5LDE5LDEyfQorICAgICNkZWZpbmUgQUxUSV9TUjJfUEVS TTY0CXsxMywxNCwxNSwwLDEsMiwzLDQsMTksMTksMTksOCw5LDEwLDExLDEyfQorI2VuZGlmCS8q IEZvciBPU1ggKi8KKyNkZWZpbmUgSURTVFIJIlNGTVQtNDQ0OTc6MzMwLTUtMy05LTM6ZWZmZmZm ZmItZGZiZWJmZmYtYmZiZjdiZWYtOWZmZDdiZmYiCisKKyNlbmRpZiAvKiBTRk1UX1BBUkFNUzQ0 NDk3X0ggKi8KCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01 LjMuMC90ZXN0L2luY2x1ZGUvdGVzdC9TRk1ULXBhcmFtczYwNy5oIGIvMzg5LWRzLWJhc2UtMy4z LjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC9pbmNsdWRlL3Rlc3QvU0ZNVC1wYXJhbXM2MDcu aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzc2NDg1Ci0tLSAvZGV2L251 bGwKKysrIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC9pbmNs dWRlL3Rlc3QvU0ZNVC1wYXJhbXM2MDcuaApAQCAtMCwwICsxLDgxIEBACisvKgorICogVGhpcyBm aWxlIGRlcml2ZXMgZnJvbSBTRk1UIDEuMy4zCisgKiAoaHR0cDovL3d3dy5tYXRoLnNjaS5oaXJv c2hpbWEtdS5hYy5qcC9+bS1tYXQvTVQvU0ZNVC9pbmRleC5odG1sKSwgd2hpY2ggd2FzCisgKiBy ZWxlYXNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIGZvbGxvd2luZyBsaWNlbnNlOgorICoKKyAq ICAgQ29weXJpZ2h0IChjKSAyMDA2LDIwMDcgTXV0c3VvIFNhaXRvLCBNYWtvdG8gTWF0c3Vtb3Rv IGFuZCBIaXJvc2hpbWEKKyAqICAgVW5pdmVyc2l0eS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq CisgKiAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs IHdpdGggb3Igd2l0aG91dAorICogICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiAgIG1ldDoKKyAqCisgKiAg ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv dmUgY29weXJpZ2h0CisgKiAgICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAgICogUmVkaXN0cmlidXRpb25z IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgICBjb3B5 cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwor ICogICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt YXRlcmlhbHMgcHJvdmlkZWQKKyAqICAgICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICog ICAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBIaXJvc2hpbWEgVW5pdmVyc2l0eSBub3Ig dGhlIG5hbWVzIG9mCisgKiAgICAgICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgICAgIGRlcml2ZWQgZnJvbSB0aGlz IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbgorICogICAgICAgICBwZXJt aXNzaW9uLgorICoKKyAqICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogICAiQVMgSVMiIEFORCBBTlkgRVhQUkVT UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogICBMSU1JVEVE IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT UyBGT1IKKyAqICAgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqICAgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiAgIFNQRUNJQUws IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK KyAqICAgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW SUNFUzsgTE9TUyBPRiBVU0UsCisgKiAgIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogICBUSEVPUlkgT0YgTElB QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg KiAgIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB WSBPVVQgT0YgVEhFIFVTRQorICogICBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIFNGTVRfUEFS QU1TNjA3X0gKKyNkZWZpbmUgU0ZNVF9QQVJBTVM2MDdfSAorCisjZGVmaW5lIFBPUzEJMgorI2Rl ZmluZSBTTDEJMTUKKyNkZWZpbmUgU0wyCTMKKyNkZWZpbmUgU1IxCTEzCisjZGVmaW5lIFNSMgkz CisjZGVmaW5lIE1TSzEJMHhmZGZmMzdmZlUKKyNkZWZpbmUgTVNLMgkweGVmN2YzZjdkVQorI2Rl ZmluZSBNU0szCTB4ZmY3NzdiN2RVCisjZGVmaW5lIE1TSzQJMHg3ZmY3ZmIyZlUKKyNkZWZpbmUg UEFSSVRZMQkweDAwMDAwMDAxVQorI2RlZmluZSBQQVJJVFkyCTB4MDAwMDAwMDBVCisjZGVmaW5l IFBBUklUWTMJMHgwMDAwMDAwMFUKKyNkZWZpbmUgUEFSSVRZNAkweDU5ODZmMDU0VQorCisKKy8q IFBBUkFNRVRFUlMgRk9SIEFMVElWRUMgKi8KKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykJLyogRm9y IE9TWCAqLworICAgICNkZWZpbmUgQUxUSV9TTDEJKHZlY3RvciB1bnNpZ25lZCBpbnQpKFNMMSwg U0wxLCBTTDEsIFNMMSkKKyAgICAjZGVmaW5lIEFMVElfU1IxCSh2ZWN0b3IgdW5zaWduZWQgaW50 KShTUjEsIFNSMSwgU1IxLCBTUjEpCisgICAgI2RlZmluZSBBTFRJX01TSwkodmVjdG9yIHVuc2ln bmVkIGludCkoTVNLMSwgTVNLMiwgTVNLMywgTVNLNCkKKyAgICAjZGVmaW5lIEFMVElfTVNLNjQg XAorCSh2ZWN0b3IgdW5zaWduZWQgaW50KShNU0syLCBNU0sxLCBNU0s0LCBNU0szKQorICAgICNk ZWZpbmUgQUxUSV9TTDJfUEVSTSBcCisJKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgzLDIxLDIxLDIx LDcsMCwxLDIsMTEsNCw1LDYsMTUsOCw5LDEwKQorICAgICNkZWZpbmUgQUxUSV9TTDJfUEVSTTY0 IFwKKwkodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDMsNCw1LDYsNywyOSwyOSwyOSwxMSwxMiwxMywx NCwxNSwwLDEsMikKKyAgICAjZGVmaW5lIEFMVElfU1IyX1BFUk0gXAorCSh2ZWN0b3IgdW5zaWdu ZWQgY2hhcikoNSw2LDcsMCw5LDEwLDExLDQsMTMsMTQsMTUsOCwxOSwxOSwxOSwxMikKKyAgICAj ZGVmaW5lIEFMVElfU1IyX1BFUk02NCBcCisJKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgxMywxNCwx NSwwLDEsMiwzLDQsMTksMTksMTksOCw5LDEwLDExLDEyKQorI2Vsc2UJLyogRm9yIE9USEVSIE9T cyhMaW51eD8pICovCisgICAgI2RlZmluZSBBTFRJX1NMMQl7U0wxLCBTTDEsIFNMMSwgU0wxfQor ICAgICNkZWZpbmUgQUxUSV9TUjEJe1NSMSwgU1IxLCBTUjEsIFNSMX0KKyAgICAjZGVmaW5lIEFM VElfTVNLCXtNU0sxLCBNU0syLCBNU0szLCBNU0s0fQorICAgICNkZWZpbmUgQUxUSV9NU0s2NAl7 TVNLMiwgTVNLMSwgTVNLNCwgTVNLM30KKyAgICAjZGVmaW5lIEFMVElfU0wyX1BFUk0JezMsMjEs MjEsMjEsNywwLDEsMiwxMSw0LDUsNiwxNSw4LDksMTB9CisgICAgI2RlZmluZSBBTFRJX1NMMl9Q RVJNNjQJezMsNCw1LDYsNywyOSwyOSwyOSwxMSwxMiwxMywxNCwxNSwwLDEsMn0KKyAgICAjZGVm aW5lIEFMVElfU1IyX1BFUk0JezUsNiw3LDAsOSwxMCwxMSw0LDEzLDE0LDE1LDgsMTksMTksMTks MTJ9CisgICAgI2RlZmluZSBBTFRJX1NSMl9QRVJNNjQJezEzLDE0LDE1LDAsMSwyLDMsNCwxOSwx OSwxOSw4LDksMTAsMTEsMTJ9CisjZW5kaWYJLyogRm9yIE9TWCAqLworI2RlZmluZSBJRFNUUgki U0ZNVC02MDc6Mi0xNS0zLTEzLTM6ZmRmZjM3ZmYtZWY3ZjNmN2QtZmY3NzdiN2QtN2ZmN2ZiMmYi CisKKyNlbmRpZiAvKiBTRk1UX1BBUkFNUzYwN19IICovCgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJh c2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC9pbmNsdWRlL3Rlc3QvU0ZNVC1wYXJh bXM4NjI0My5oIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC9p bmNsdWRlL3Rlc3QvU0ZNVC1wYXJhbXM4NjI0My5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAuLjVlNGQ3ODMKLS0tIC9kZXYvbnVsbAorKysgYi8zODktZHMtYmFzZS0zLjMuMC1i dWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L2luY2x1ZGUvdGVzdC9TRk1ULXBhcmFtczg2MjQzLmgK QEAgLTAsMCArMSw4MSBAQAorLyoKKyAqIFRoaXMgZmlsZSBkZXJpdmVzIGZyb20gU0ZNVCAxLjMu MworICogKGh0dHA6Ly93d3cubWF0aC5zY2kuaGlyb3NoaW1hLXUuYWMuanAvfm0tbWF0L01UL1NG TVQvaW5kZXguaHRtbCksIHdoaWNoIHdhcworICogcmVsZWFzZWQgdW5kZXIgdGhlIHRlcm1zIG9m IHRoZSBmb2xsb3dpbmcgbGljZW5zZToKKyAqCisgKiAgIENvcHlyaWdodCAoYykgMjAwNiwyMDA3 IE11dHN1byBTYWl0bywgTWFrb3RvIE1hdHN1bW90byBhbmQgSGlyb3NoaW1hCisgKiAgIFVuaXZl cnNpdHkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogICBSZWRpc3RyaWJ1dGlvbiBhbmQg dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICAgbW9k aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k aXRpb25zIGFyZQorICogICBtZXQ6CisgKgorICogICAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICAgICBu b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt ZXIuCisgKiAgICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv ZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICAgZGlzY2xhaW1lciBpbiB0 aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgKiAgICAg ICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAgICogTmVpdGhlciB0aGUgbmFtZSBv ZiB0aGUgSGlyb3NoaW1hIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZgorICogICAgICAgICBp dHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0 cworICogICAgICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj IHByaW9yIHdyaXR0ZW4KKyAqICAgICAgICAgcGVybWlzc2lvbi4KKyAqCisgKiAgIFRISVMgU09G VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP UlMKKyAqICAgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ TkNMVURJTkcsIEJVVCBOT1QKKyAqICAgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiAgIEEgUEFSVElDVUxBUiBQ VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisg KiAgIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS RUNULCBJTkNJREVOVEFMLAorICogICBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiAgIExJTUlURUQgVE8sIFBST0NVUkVN RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogICBE QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE IEFORCBPTiBBTlkKKyAqICAgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogICAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqICAgT0Yg VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI IERBTUFHRS4KKyAqLworI2lmbmRlZiBTRk1UX1BBUkFNUzg2MjQzX0gKKyNkZWZpbmUgU0ZNVF9Q QVJBTVM4NjI0M19ICisKKyNkZWZpbmUgUE9TMQkzNjYKKyNkZWZpbmUgU0wxCTYKKyNkZWZpbmUg U0wyCTcKKyNkZWZpbmUgU1IxCTE5CisjZGVmaW5lIFNSMgkxCisjZGVmaW5lIE1TSzEJMHhmZGJm ZmJmZlUKKyNkZWZpbmUgTVNLMgkweGJmZjdmZjNmVQorI2RlZmluZSBNU0szCTB4ZmQ3N2VmZmZV CisjZGVmaW5lIE1TSzQJMHhiZjlmZjNmZlUKKyNkZWZpbmUgUEFSSVRZMQkweDAwMDAwMDAxVQor I2RlZmluZSBQQVJJVFkyCTB4MDAwMDAwMDBVCisjZGVmaW5lIFBBUklUWTMJMHgwMDAwMDAwMFUK KyNkZWZpbmUgUEFSSVRZNAkweGU5NTI4ZDg1VQorCisKKy8qIFBBUkFNRVRFUlMgRk9SIEFMVElW RUMgKi8KKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykJLyogRm9yIE9TWCAqLworICAgICNkZWZpbmUg QUxUSV9TTDEJKHZlY3RvciB1bnNpZ25lZCBpbnQpKFNMMSwgU0wxLCBTTDEsIFNMMSkKKyAgICAj ZGVmaW5lIEFMVElfU1IxCSh2ZWN0b3IgdW5zaWduZWQgaW50KShTUjEsIFNSMSwgU1IxLCBTUjEp CisgICAgI2RlZmluZSBBTFRJX01TSwkodmVjdG9yIHVuc2lnbmVkIGludCkoTVNLMSwgTVNLMiwg TVNLMywgTVNLNCkKKyAgICAjZGVmaW5lIEFMVElfTVNLNjQgXAorCSh2ZWN0b3IgdW5zaWduZWQg aW50KShNU0syLCBNU0sxLCBNU0s0LCBNU0szKQorICAgICNkZWZpbmUgQUxUSV9TTDJfUEVSTSBc CisJKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgyNSwyNSwyNSwyNSwzLDI1LDI1LDI1LDcsMCwxLDIs MTEsNCw1LDYpCisgICAgI2RlZmluZSBBTFRJX1NMMl9QRVJNNjQgXAorCSh2ZWN0b3IgdW5zaWdu ZWQgY2hhcikoNywyNSwyNSwyNSwyNSwyNSwyNSwyNSwxNSwwLDEsMiwzLDQsNSw2KQorICAgICNk ZWZpbmUgQUxUSV9TUjJfUEVSTSBcCisJKHZlY3RvciB1bnNpZ25lZCBjaGFyKSg3LDAsMSwyLDEx LDQsNSw2LDE1LDgsOSwxMCwxNywxMiwxMywxNCkKKyAgICAjZGVmaW5lIEFMVElfU1IyX1BFUk02 NCBcCisJKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgxNSwwLDEsMiwzLDQsNSw2LDE3LDgsOSwxMCwx MSwxMiwxMywxNCkKKyNlbHNlCS8qIEZvciBPVEhFUiBPU3MoTGludXg/KSAqLworICAgICNkZWZp bmUgQUxUSV9TTDEJe1NMMSwgU0wxLCBTTDEsIFNMMX0KKyAgICAjZGVmaW5lIEFMVElfU1IxCXtT UjEsIFNSMSwgU1IxLCBTUjF9CisgICAgI2RlZmluZSBBTFRJX01TSwl7TVNLMSwgTVNLMiwgTVNL MywgTVNLNH0KKyAgICAjZGVmaW5lIEFMVElfTVNLNjQJe01TSzIsIE1TSzEsIE1TSzQsIE1TSzN9 CisgICAgI2RlZmluZSBBTFRJX1NMMl9QRVJNCXsyNSwyNSwyNSwyNSwzLDI1LDI1LDI1LDcsMCwx LDIsMTEsNCw1LDZ9CisgICAgI2RlZmluZSBBTFRJX1NMMl9QRVJNNjQJezcsMjUsMjUsMjUsMjUs MjUsMjUsMjUsMTUsMCwxLDIsMyw0LDUsNn0KKyAgICAjZGVmaW5lIEFMVElfU1IyX1BFUk0Jezcs MCwxLDIsMTEsNCw1LDYsMTUsOCw5LDEwLDE3LDEyLDEzLDE0fQorICAgICNkZWZpbmUgQUxUSV9T UjJfUEVSTTY0CXsxNSwwLDEsMiwzLDQsNSw2LDE3LDgsOSwxMCwxMSwxMiwxMywxNH0KKyNlbmRp ZgkvKiBGb3IgT1NYICovCisjZGVmaW5lIElEU1RSCSJTRk1ULTg2MjQzOjM2Ni02LTctMTktMTpm ZGJmZmJmZi1iZmY3ZmYzZi1mZDc3ZWZmZi1iZjlmZjNmZiIKKworI2VuZGlmIC8qIFNGTVRfUEFS QU1TODYyNDNfSCAqLwoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFs bG9jLTUuMy4wL3Rlc3QvaW5jbHVkZS90ZXN0L1NGTVQtc3NlMi5oIGIvMzg5LWRzLWJhc2UtMy4z LjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC9pbmNsdWRlL3Rlc3QvU0ZNVC1zc2UyLmgKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTY5YWQ1NQotLS0gL2Rldi9udWxsCisr KyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvaW5jbHVkZS90 ZXN0L1NGTVQtc3NlMi5oCkBAIC0wLDAgKzEsMTU3IEBACisvKgorICogVGhpcyBmaWxlIGRlcml2 ZXMgZnJvbSBTRk1UIDEuMy4zCisgKiAoaHR0cDovL3d3dy5tYXRoLnNjaS5oaXJvc2hpbWEtdS5h Yy5qcC9+bS1tYXQvTVQvU0ZNVC9pbmRleC5odG1sKSwgd2hpY2ggd2FzCisgKiByZWxlYXNlZCB1 bmRlciB0aGUgdGVybXMgb2YgdGhlIGZvbGxvd2luZyBsaWNlbnNlOgorICoKKyAqICAgQ29weXJp Z2h0IChjKSAyMDA2LDIwMDcgTXV0c3VvIFNhaXRvLCBNYWtvdG8gTWF0c3Vtb3RvIGFuZCBIaXJv c2hpbWEKKyAqICAgVW5pdmVyc2l0eS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgIFJl ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig d2l0aG91dAorICogICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0 aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiAgIG1ldDoKKyAqCisgKiAgICAgICAqIFJl ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp Z2h0CisgKiAgICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgICBjb3B5cmlnaHQgbm90 aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAg ICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg cHJvdmlkZWQKKyAqICAgICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogICAgICAgKiBO ZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBIaXJvc2hpbWEgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVz IG9mCisgKiAgICAgICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv ciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJl IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbgorICogICAgICAgICBwZXJtaXNzaW9uLgor ICoKKyAqICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF UlMgQU5EIENPTlRSSUJVVE9SUworICogICAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogICBMSU1JVEVEIFRPLCBUSEUg SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAq ICAgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM IFRIRSBDT1BZUklHSFQKKyAqICAgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiAgIFNQRUNJQUwsIEVYRU1QTEFS WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqICAgTElN SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T UyBPRiBVU0UsCisgKiAgIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogICBUSEVPUlkgT0YgTElBQklMSVRZLCBX SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAgIChJTkNM VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg VEhFIFVTRQorICogICBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisvKioKKyAqIEBmaWxlICBTRk1ULXNzZTIu aAorICogQGJyaWVmIFNJTUQgb3JpZW50ZWQgRmFzdCBNZXJzZW5uZSBUd2lzdGVyKFNGTVQpIGZv ciBJbnRlbCBTU0UyCisgKgorICogQGF1dGhvciBNdXRzdW8gU2FpdG8gKEhpcm9zaGltYSBVbml2 ZXJzaXR5KQorICogQGF1dGhvciBNYWtvdG8gTWF0c3Vtb3RvIChIaXJvc2hpbWEgVW5pdmVyc2l0 eSkKKyAqCisgKiBAbm90ZSBXZSBhc3N1bWUgTElUVExFIEVORElBTiBpbiB0aGlzIGZpbGUKKyAq CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgTXV0c3VvIFNhaXRvLCBNYWtvdG8gTWF0c3Vt b3RvIGFuZCBIaXJvc2hpbWEKKyAqIFVuaXZlcnNpdHkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg KgorICogVGhlIG5ldyBCU0QgTGljZW5zZSBpcyBhcHBsaWVkIHRvIHRoaXMgc29mdHdhcmUsIHNl ZSBMSUNFTlNFLnR4dAorICovCisKKyNpZm5kZWYgU0ZNVF9TU0UyX0gKKyNkZWZpbmUgU0ZNVF9T U0UyX0gKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIHJlcHJlc2VudHMgdGhlIHJlY3Vyc2lvbiBm b3JtdWxhLgorICogQHBhcmFtIGEgYSAxMjgtYml0IHBhcnQgb2YgdGhlIGludGVyYWwgc3RhdGUg YXJyYXkKKyAqIEBwYXJhbSBiIGEgMTI4LWJpdCBwYXJ0IG9mIHRoZSBpbnRlcmFsIHN0YXRlIGFy cmF5CisgKiBAcGFyYW0gYyBhIDEyOC1iaXQgcGFydCBvZiB0aGUgaW50ZXJhbCBzdGF0ZSBhcnJh eQorICogQHBhcmFtIGQgYSAxMjgtYml0IHBhcnQgb2YgdGhlIGludGVyYWwgc3RhdGUgYXJyYXkK KyAqIEBwYXJhbSBtYXNrIDEyOC1iaXQgbWFzaworICogQHJldHVybiBvdXRwdXQKKyAqLworSkVN QUxMT0NfQUxXQVlTX0lOTElORSBfX20xMjhpIG1tX3JlY3Vyc2lvbihfX20xMjhpICphLCBfX20x MjhpICpiLAorCQkJCSAgIF9fbTEyOGkgYywgX19tMTI4aSBkLCBfX20xMjhpIG1hc2spIHsKKyAg ICBfX20xMjhpIHYsIHgsIHksIHo7CisKKyAgICB4ID0gX21tX2xvYWRfc2kxMjgoYSk7CisgICAg eSA9IF9tbV9zcmxpX2VwaTMyKCpiLCBTUjEpOworICAgIHogPSBfbW1fc3JsaV9zaTEyOChjLCBT UjIpOworICAgIHYgPSBfbW1fc2xsaV9lcGkzMihkLCBTTDEpOworICAgIHogPSBfbW1feG9yX3Np MTI4KHosIHgpOworICAgIHogPSBfbW1feG9yX3NpMTI4KHosIHYpOworICAgIHggPSBfbW1fc2xs aV9zaTEyOCh4LCBTTDIpOworICAgIHkgPSBfbW1fYW5kX3NpMTI4KHksIG1hc2spOworICAgIHog PSBfbW1feG9yX3NpMTI4KHosIHgpOworICAgIHogPSBfbW1feG9yX3NpMTI4KHosIHkpOworICAg IHJldHVybiB6OworfQorCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gZmlsbHMgdGhlIGludGVybmFs IHN0YXRlIGFycmF5IHdpdGggcHNldWRvcmFuZG9tCisgKiBpbnRlZ2Vycy4KKyAqLworc3RhdGlj IGlubGluZSB2b2lkIGdlbl9yYW5kX2FsbChzZm10X3QgKmN0eCkgeworICAgIGludCBpOworICAg IF9fbTEyOGkgciwgcjEsIHIyLCBtYXNrOworICAgIG1hc2sgPSBfbW1fc2V0X2VwaTMyKE1TSzQs IE1TSzMsIE1TSzIsIE1TSzEpOworCisgICAgcjEgPSBfbW1fbG9hZF9zaTEyOCgmY3R4LT5zZm10 W04gLSAyXS5zaSk7CisgICAgcjIgPSBfbW1fbG9hZF9zaTEyOCgmY3R4LT5zZm10W04gLSAxXS5z aSk7CisgICAgZm9yIChpID0gMDsgaSA8IE4gLSBQT1MxOyBpKyspIHsKKwlyID0gbW1fcmVjdXJz aW9uKCZjdHgtPnNmbXRbaV0uc2ksICZjdHgtPnNmbXRbaSArIFBPUzFdLnNpLCByMSwgcjIsCisJ ICBtYXNrKTsKKwlfbW1fc3RvcmVfc2kxMjgoJmN0eC0+c2ZtdFtpXS5zaSwgcik7CisJcjEgPSBy MjsKKwlyMiA9IHI7CisgICAgfQorICAgIGZvciAoOyBpIDwgTjsgaSsrKSB7CisJciA9IG1tX3Jl Y3Vyc2lvbigmY3R4LT5zZm10W2ldLnNpLCAmY3R4LT5zZm10W2kgKyBQT1MxIC0gTl0uc2ksIHIx LCByMiwKKwkgIG1hc2spOworCV9tbV9zdG9yZV9zaTEyOCgmY3R4LT5zZm10W2ldLnNpLCByKTsK KwlyMSA9IHIyOworCXIyID0gcjsKKyAgICB9Cit9CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBm aWxscyB0aGUgdXNlci1zcGVjaWZpZWQgYXJyYXkgd2l0aCBwc2V1ZG9yYW5kb20KKyAqIGludGVn ZXJzLgorICoKKyAqIEBwYXJhbSBhcnJheSBhbiAxMjgtYml0IGFycmF5IHRvIGJlIGZpbGxlZCBi eSBwc2V1ZG9yYW5kb20gbnVtYmVycy4KKyAqIEBwYXJhbSBzaXplIG51bWJlciBvZiAxMjgtYml0 IHBlc3Vkb3JhbmRvbSBudW1iZXJzIHRvIGJlIGdlbmVyYXRlZC4KKyAqLworc3RhdGljIGlubGlu ZSB2b2lkIGdlbl9yYW5kX2FycmF5KHNmbXRfdCAqY3R4LCB3MTI4X3QgKmFycmF5LCBpbnQgc2l6 ZSkgeworICAgIGludCBpLCBqOworICAgIF9fbTEyOGkgciwgcjEsIHIyLCBtYXNrOworICAgIG1h c2sgPSBfbW1fc2V0X2VwaTMyKE1TSzQsIE1TSzMsIE1TSzIsIE1TSzEpOworCisgICAgcjEgPSBf bW1fbG9hZF9zaTEyOCgmY3R4LT5zZm10W04gLSAyXS5zaSk7CisgICAgcjIgPSBfbW1fbG9hZF9z aTEyOCgmY3R4LT5zZm10W04gLSAxXS5zaSk7CisgICAgZm9yIChpID0gMDsgaSA8IE4gLSBQT1Mx OyBpKyspIHsKKwlyID0gbW1fcmVjdXJzaW9uKCZjdHgtPnNmbXRbaV0uc2ksICZjdHgtPnNmbXRb aSArIFBPUzFdLnNpLCByMSwgcjIsCisJICBtYXNrKTsKKwlfbW1fc3RvcmVfc2kxMjgoJmFycmF5 W2ldLnNpLCByKTsKKwlyMSA9IHIyOworCXIyID0gcjsKKyAgICB9CisgICAgZm9yICg7IGkgPCBO OyBpKyspIHsKKwlyID0gbW1fcmVjdXJzaW9uKCZjdHgtPnNmbXRbaV0uc2ksICZhcnJheVtpICsg UE9TMSAtIE5dLnNpLCByMSwgcjIsCisJICBtYXNrKTsKKwlfbW1fc3RvcmVfc2kxMjgoJmFycmF5 W2ldLnNpLCByKTsKKwlyMSA9IHIyOworCXIyID0gcjsKKyAgICB9CisgICAgLyogbWFpbiBsb29w ICovCisgICAgZm9yICg7IGkgPCBzaXplIC0gTjsgaSsrKSB7CisJciA9IG1tX3JlY3Vyc2lvbigm YXJyYXlbaSAtIE5dLnNpLCAmYXJyYXlbaSArIFBPUzEgLSBOXS5zaSwgcjEsIHIyLAorCQkJIG1h c2spOworCV9tbV9zdG9yZV9zaTEyOCgmYXJyYXlbaV0uc2ksIHIpOworCXIxID0gcjI7CisJcjIg PSByOworICAgIH0KKyAgICBmb3IgKGogPSAwOyBqIDwgMiAqIE4gLSBzaXplOyBqKyspIHsKKwly ID0gX21tX2xvYWRfc2kxMjgoJmFycmF5W2ogKyBzaXplIC0gTl0uc2kpOworCV9tbV9zdG9yZV9z aTEyOCgmY3R4LT5zZm10W2pdLnNpLCByKTsKKyAgICB9CisgICAgZm9yICg7IGkgPCBzaXplOyBp KyspIHsKKwlyID0gbW1fcmVjdXJzaW9uKCZhcnJheVtpIC0gTl0uc2ksICZhcnJheVtpICsgUE9T MSAtIE5dLnNpLCByMSwgcjIsCisJCQkgbWFzayk7CisJX21tX3N0b3JlX3NpMTI4KCZhcnJheVtp XS5zaSwgcik7CisJX21tX3N0b3JlX3NpMTI4KCZjdHgtPnNmbXRbaisrXS5zaSwgcik7CisJcjEg PSByMjsKKwlyMiA9IHI7CisgICAgfQorfQorCisjZW5kaWYKCmRpZmYgLS1naXQgYS8zODktZHMt YmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L2luY2x1ZGUvdGVzdC9TRk1ULmgg Yi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L2luY2x1ZGUvdGVz dC9TRk1ULmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODYzZmM1NQotLS0g L2Rldi9udWxsCisrKyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rl c3QvaW5jbHVkZS90ZXN0L1NGTVQuaApAQCAtMCwwICsxLDE0NiBAQAorLyoKKyAqIFRoaXMgZmls ZSBkZXJpdmVzIGZyb20gU0ZNVCAxLjMuMworICogKGh0dHA6Ly93d3cubWF0aC5zY2kuaGlyb3No aW1hLXUuYWMuanAvfm0tbWF0L01UL1NGTVQvaW5kZXguaHRtbCksIHdoaWNoIHdhcworICogcmVs ZWFzZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBmb2xsb3dpbmcgbGljZW5zZToKKyAqCisgKiAg IENvcHlyaWdodCAoYykgMjAwNiwyMDA3IE11dHN1byBTYWl0bywgTWFrb3RvIE1hdHN1bW90byBh bmQgSGlyb3NoaW1hCisgKiAgIFVuaXZlcnNpdHkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor ICogICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3 aXRoIG9yIHdpdGhvdXQKKyAqICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogICBtZXQ6CisgKgorICogICAg ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl IGNvcHlyaWdodAorICogICAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICAgY29weXJp Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAq ICAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0 ZXJpYWxzIHByb3ZpZGVkCisgKiAgICAgICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAg ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgSGlyb3NoaW1hIFVuaXZlcnNpdHkgbm9yIHRo ZSBuYW1lcyBvZgorICogICAgICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgICAgICBkZXJpdmVkIGZyb20gdGhpcyBz b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4KKyAqICAgICAgICAgcGVybWlz c2lvbi4KKyAqCisgKiAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICAgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqICAgTElNSVRFRCBU TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg Rk9SCisgKiAgIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO VCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiAgIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogICBTUEVDSUFMLCBF WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisg KiAgIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD RVM7IExPU1MgT0YgVVNFLAorICogICBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqICAgVEhFT1JZIE9GIExJQUJJ TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog ICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg T1VUIE9GIFRIRSBVU0UKKyAqICAgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworLyoqIAorICogQGZpbGUgU0ZN VC5oIAorICoKKyAqIEBicmllZiBTSU1EIG9yaWVudGVkIEZhc3QgTWVyc2VubmUgVHdpc3RlcihT Rk1UKSBwc2V1ZG9yYW5kb20KKyAqIG51bWJlciBnZW5lcmF0b3IKKyAqCisgKiBAYXV0aG9yIE11 dHN1byBTYWl0byAoSGlyb3NoaW1hIFVuaXZlcnNpdHkpCisgKiBAYXV0aG9yIE1ha290byBNYXRz dW1vdG8gKEhpcm9zaGltYSBVbml2ZXJzaXR5KQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwg MjAwNyBNdXRzdW8gU2FpdG8sIE1ha290byBNYXRzdW1vdG8gYW5kIEhpcm9zaGltYQorICogVW5p dmVyc2l0eS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGUgbmV3IEJTRCBMaWNlbnNl IGlzIGFwcGxpZWQgdG8gdGhpcyBzb2Z0d2FyZS4KKyAqIHNlZSBMSUNFTlNFLnR4dAorICoKKyAq IEBub3RlIFdlIGFzc3VtZSB0aGF0IHlvdXIgc3lzdGVtIGhhcyBpbnR0eXBlcy5oLiAgSWYgeW91 ciBzeXN0ZW0KKyAqIGRvZXNuJ3QgaGF2ZSBpbnR0eXBlcy5oLCB5b3UgaGF2ZSB0byB0eXBlZGVm IHVpbnQzMl90IGFuZCB1aW50NjRfdCwKKyAqIGFuZCB5b3UgaGF2ZSB0byBkZWZpbmUgUFJJdTY0 IGFuZCBQUkl4NjQgaW4gdGhpcyBmaWxlIGFzIGZvbGxvd3M6CisgKiBAdmVyYmF0aW0KKyB0eXBl ZGVmIHVuc2lnbmVkIGludCB1aW50MzJfdAorIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIHVp bnQ2NF90ICAKKyAjZGVmaW5lIFBSSXU2NCAibGx1IgorICNkZWZpbmUgUFJJeDY0ICJsbHgiCitA ZW5kdmVyYmF0aW0KKyAqIHVpbnQzMl90IG11c3QgYmUgZXhhY3RseSAzMi1iaXQgdW5zaWduZWQg aW50ZWdlciB0eXBlIChubyBtb3JlLCBubworICogbGVzcyksIGFuZCB1aW50NjRfdCBtdXN0IGJl IGV4YWN0bHkgNjQtYml0IHVuc2lnbmVkIGludGVnZXIgdHlwZS4KKyAqIFBSSXU2NCBhbmQgUFJJ eDY0IGFyZSB1c2VkIGZvciBwcmludGYgZnVuY3Rpb24gdG8gcHJpbnQgNjQtYml0CisgKiB1bnNp Z25lZCBpbnQgYW5kIDY0LWJpdCB1bnNpZ25lZCBpbnQgaW4gaGV4YWRlY2ltYWwgZm9ybWF0Lgor ICovCisKKyNpZm5kZWYgU0ZNVF9ICisjZGVmaW5lIFNGTVRfSAorCit0eXBlZGVmIHN0cnVjdCBz Zm10X3Mgc2ZtdF90OworCit1aW50MzJfdCBnZW5fcmFuZDMyKHNmbXRfdCAqY3R4KTsKK3VpbnQz Ml90IGdlbl9yYW5kMzJfcmFuZ2Uoc2ZtdF90ICpjdHgsIHVpbnQzMl90IGxpbWl0KTsKK3VpbnQ2 NF90IGdlbl9yYW5kNjQoc2ZtdF90ICpjdHgpOwordWludDY0X3QgZ2VuX3JhbmQ2NF9yYW5nZShz Zm10X3QgKmN0eCwgdWludDY0X3QgbGltaXQpOwordm9pZCBmaWxsX2FycmF5MzIoc2ZtdF90ICpj dHgsIHVpbnQzMl90ICphcnJheSwgaW50IHNpemUpOwordm9pZCBmaWxsX2FycmF5NjQoc2ZtdF90 ICpjdHgsIHVpbnQ2NF90ICphcnJheSwgaW50IHNpemUpOworc2ZtdF90ICppbml0X2dlbl9yYW5k KHVpbnQzMl90IHNlZWQpOworc2ZtdF90ICppbml0X2J5X2FycmF5KHVpbnQzMl90ICppbml0X2tl eSwgaW50IGtleV9sZW5ndGgpOwordm9pZCBmaW5pX2dlbl9yYW5kKHNmbXRfdCAqY3R4KTsKK2Nv bnN0IGNoYXIgKmdldF9pZHN0cmluZyh2b2lkKTsKK2ludCBnZXRfbWluX2FycmF5X3NpemUzMih2 b2lkKTsKK2ludCBnZXRfbWluX2FycmF5X3NpemU2NCh2b2lkKTsKKworLyogVGhlc2UgcmVhbCB2 ZXJzaW9ucyBhcmUgZHVlIHRvIElzYWt1IFdhZGEgKi8KKy8qKiBnZW5lcmF0ZXMgYSByYW5kb20g bnVtYmVyIG9uIFswLDFdLXJlYWwtaW50ZXJ2YWwgKi8KK3N0YXRpYyBpbmxpbmUgZG91YmxlIHRv X3JlYWwxKHVpbnQzMl90IHYpIHsKKyAgICByZXR1cm4gdiAqICgxLjAvNDI5NDk2NzI5NS4wKTsg CisgICAgLyogZGl2aWRlZCBieSAyXjMyLTEgKi8gCit9CisKKy8qKiBnZW5lcmF0ZXMgYSByYW5k b20gbnVtYmVyIG9uIFswLDFdLXJlYWwtaW50ZXJ2YWwgKi8KK3N0YXRpYyBpbmxpbmUgZG91Ymxl IGdlbnJhbmRfcmVhbDEoc2ZtdF90ICpjdHgpIHsKKyAgICByZXR1cm4gdG9fcmVhbDEoZ2VuX3Jh bmQzMihjdHgpKTsKK30KKworLyoqIGdlbmVyYXRlcyBhIHJhbmRvbSBudW1iZXIgb24gWzAsMSkt cmVhbC1pbnRlcnZhbCAqLworc3RhdGljIGlubGluZSBkb3VibGUgdG9fcmVhbDIodWludDMyX3Qg dikgeworICAgIHJldHVybiB2ICogKDEuMC80Mjk0OTY3Mjk2LjApOyAKKyAgICAvKiBkaXZpZGVk IGJ5IDJeMzIgKi8KK30KKworLyoqIGdlbmVyYXRlcyBhIHJhbmRvbSBudW1iZXIgb24gWzAsMSkt cmVhbC1pbnRlcnZhbCAqLworc3RhdGljIGlubGluZSBkb3VibGUgZ2VucmFuZF9yZWFsMihzZm10 X3QgKmN0eCkgeworICAgIHJldHVybiB0b19yZWFsMihnZW5fcmFuZDMyKGN0eCkpOworfQorCisv KiogZ2VuZXJhdGVzIGEgcmFuZG9tIG51bWJlciBvbiAoMCwxKS1yZWFsLWludGVydmFsICovCitz dGF0aWMgaW5saW5lIGRvdWJsZSB0b19yZWFsMyh1aW50MzJfdCB2KSB7CisgICAgcmV0dXJuICgo KGRvdWJsZSl2KSArIDAuNSkqKDEuMC80Mjk0OTY3Mjk2LjApOyAKKyAgICAvKiBkaXZpZGVkIGJ5 IDJeMzIgKi8KK30KKworLyoqIGdlbmVyYXRlcyBhIHJhbmRvbSBudW1iZXIgb24gKDAsMSktcmVh bC1pbnRlcnZhbCAqLworc3RhdGljIGlubGluZSBkb3VibGUgZ2VucmFuZF9yZWFsMyhzZm10X3Qg KmN0eCkgeworICAgIHJldHVybiB0b19yZWFsMyhnZW5fcmFuZDMyKGN0eCkpOworfQorLyoqIFRo ZXNlIHJlYWwgdmVyc2lvbnMgYXJlIGR1ZSB0byBJc2FrdSBXYWRhICovCisKKy8qKiBnZW5lcmF0 ZXMgYSByYW5kb20gbnVtYmVyIG9uIFswLDEpIHdpdGggNTMtYml0IHJlc29sdXRpb24qLworc3Rh dGljIGlubGluZSBkb3VibGUgdG9fcmVzNTModWludDY0X3QgdikgeworICAgIHJldHVybiB2ICog KDEuMC8xODQ0Njc0NDA3MzcwOTU1MTYxNi4wTCk7Cit9CisKKy8qKiBnZW5lcmF0ZXMgYSByYW5k b20gbnVtYmVyIG9uIFswLDEpIHdpdGggNTMtYml0IHJlc29sdXRpb24gZnJvbSB0d28KKyAqIDMy IGJpdCBpbnRlZ2VycyAqLworc3RhdGljIGlubGluZSBkb3VibGUgdG9fcmVzNTNfbWl4KHVpbnQz Ml90IHgsIHVpbnQzMl90IHkpIHsKKyAgICByZXR1cm4gdG9fcmVzNTMoeCB8ICgodWludDY0X3Qp eSA8PCAzMikpOworfQorCisvKiogZ2VuZXJhdGVzIGEgcmFuZG9tIG51bWJlciBvbiBbMCwxKSB3 aXRoIDUzLWJpdCByZXNvbHV0aW9uCisgKi8KK3N0YXRpYyBpbmxpbmUgZG91YmxlIGdlbnJhbmRf cmVzNTMoc2ZtdF90ICpjdHgpIHsKKyAgICByZXR1cm4gdG9fcmVzNTMoZ2VuX3JhbmQ2NChjdHgp KTsKK30KKworLyoqIGdlbmVyYXRlcyBhIHJhbmRvbSBudW1iZXIgb24gWzAsMSkgd2l0aCA1My1i aXQgcmVzb2x1dGlvbgorICAgIHVzaW5nIDMyYml0IGludGVnZXIuCisgKi8KK3N0YXRpYyBpbmxp bmUgZG91YmxlIGdlbnJhbmRfcmVzNTNfbWl4KHNmbXRfdCAqY3R4KSB7CisgICAgdWludDMyX3Qg eCwgeTsKKworICAgIHggPSBnZW5fcmFuZDMyKGN0eCk7CisgICAgeSA9IGdlbl9yYW5kMzIoY3R4 KTsKKyAgICByZXR1cm4gdG9fcmVzNTNfbWl4KHgsIHkpOworfQorI2VuZGlmCgpkaWZmIC0tZ2l0 IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC9pbmNsdWRlL3Rl c3QvYXJlbmFfdXRpbC5oIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAv dGVzdC9pbmNsdWRlL3Rlc3QvYXJlbmFfdXRpbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAuLjlhNDFkYWMKLS0tIC9kZXYvbnVsbAorKysgYi8zODktZHMtYmFzZS0zLjMuMC1i dWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L2luY2x1ZGUvdGVzdC9hcmVuYV91dGlsLmgKQEAgLTAs MCArMSwxNTUgQEAKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQKK2RvX2FyZW5hX2NyZWF0ZShzc2l6 ZV90IGRpcnR5X2RlY2F5X21zLCBzc2l6ZV90IG11enp5X2RlY2F5X21zKSB7CisJdW5zaWduZWQg YXJlbmFfaW5kOworCXNpemVfdCBzeiA9IHNpemVvZih1bnNpZ25lZCk7CisJZXhwZWN0X2RfZXEo bWFsbGN0bCgiYXJlbmFzLmNyZWF0ZSIsICh2b2lkICopJmFyZW5hX2luZCwgJnN6LCBOVUxMLCAw KSwKKwkgICAgMCwgIlVuZXhwZWN0ZWQgbWFsbGN0bCgpIGZhaWx1cmUiKTsKKwlzaXplX3QgbWli WzNdOworCXNpemVfdCBtaWJsZW4gPSBzaXplb2YobWliKS9zaXplb2Yoc2l6ZV90KTsKKworCWV4 cGVjdF9kX2VxKG1hbGxjdGxuYW1ldG9taWIoImFyZW5hLjAuZGlydHlfZGVjYXlfbXMiLCBtaWIs ICZtaWJsZW4pLAorCSAgICAwLCAiVW5leHBlY3RlZCBtYWxsY3RsbmFtZXRvbWliKCkgZmFpbHVy ZSIpOworCW1pYlsxXSA9IChzaXplX3QpYXJlbmFfaW5kOworCWV4cGVjdF9kX2VxKG1hbGxjdGxi eW1pYihtaWIsIG1pYmxlbiwgTlVMTCwgTlVMTCwKKwkgICAgKHZvaWQgKikmZGlydHlfZGVjYXlf bXMsIHNpemVvZihkaXJ0eV9kZWNheV9tcykpLCAwLAorCSAgICAiVW5leHBlY3RlZCBtYWxsY3Rs YnltaWIoKSBmYWlsdXJlIik7CisKKwlleHBlY3RfZF9lcShtYWxsY3RsbmFtZXRvbWliKCJhcmVu YS4wLm11enp5X2RlY2F5X21zIiwgbWliLCAmbWlibGVuKSwKKwkgICAgMCwgIlVuZXhwZWN0ZWQg bWFsbGN0bG5hbWV0b21pYigpIGZhaWx1cmUiKTsKKwltaWJbMV0gPSAoc2l6ZV90KWFyZW5hX2lu ZDsKKwlleHBlY3RfZF9lcShtYWxsY3RsYnltaWIobWliLCBtaWJsZW4sIE5VTEwsIE5VTEwsCisJ ICAgICh2b2lkICopJm11enp5X2RlY2F5X21zLCBzaXplb2YobXV6enlfZGVjYXlfbXMpKSwgMCwK KwkgICAgIlVuZXhwZWN0ZWQgbWFsbGN0bGJ5bWliKCkgZmFpbHVyZSIpOworCisJcmV0dXJuIGFy ZW5hX2luZDsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitkb19hcmVuYV9kZXN0cm95KHVuc2ln bmVkIGFyZW5hX2luZCkgeworCS8qIAorCSAqIEZvciBjb252ZW5pZW5jZSwgZmx1c2ggdGNhY2hl IGluIGNhc2UgdGhlcmUgYXJlIGNhY2hlZCBpdGVtcy4KKwkgKiBIb3dldmVyIG5vdCBhc3NlcnQg c3VjY2VzcyBzaW5jZSB0aGUgdGNhY2hlIG1heSBiZSBkaXNhYmxlZC4KKwkgKi8KKwltYWxsY3Rs KCJ0aHJlYWQudGNhY2hlLmZsdXNoIiwgTlVMTCwgTlVMTCwgTlVMTCwgMCk7CisKKwlzaXplX3Qg bWliWzNdOworCXNpemVfdCBtaWJsZW4gPSBzaXplb2YobWliKS9zaXplb2Yoc2l6ZV90KTsKKwll eHBlY3RfZF9lcShtYWxsY3RsbmFtZXRvbWliKCJhcmVuYS4wLmRlc3Ryb3kiLCBtaWIsICZtaWJs ZW4pLCAwLAorCSAgICAiVW5leHBlY3RlZCBtYWxsY3RsbmFtZXRvbWliKCkgZmFpbHVyZSIpOwor CW1pYlsxXSA9IChzaXplX3QpYXJlbmFfaW5kOworCWV4cGVjdF9kX2VxKG1hbGxjdGxieW1pYiht aWIsIG1pYmxlbiwgTlVMTCwgTlVMTCwgTlVMTCwgMCksIDAsCisJICAgICJVbmV4cGVjdGVkIG1h bGxjdGxieW1pYigpIGZhaWx1cmUiKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitkb19lcG9j aCh2b2lkKSB7CisJdWludDY0X3QgZXBvY2ggPSAxOworCWV4cGVjdF9kX2VxKG1hbGxjdGwoImVw b2NoIiwgTlVMTCwgTlVMTCwgKHZvaWQgKikmZXBvY2gsIHNpemVvZihlcG9jaCkpLAorCSAgICAw LCAiVW5leHBlY3RlZCBtYWxsY3RsKCkgZmFpbHVyZSIpOworfQorCitzdGF0aWMgaW5saW5lIHZv aWQKK2RvX3B1cmdlKHVuc2lnbmVkIGFyZW5hX2luZCkgeworCXNpemVfdCBtaWJbM107CisJc2l6 ZV90IG1pYmxlbiA9IHNpemVvZihtaWIpL3NpemVvZihzaXplX3QpOworCWV4cGVjdF9kX2VxKG1h bGxjdGxuYW1ldG9taWIoImFyZW5hLjAucHVyZ2UiLCBtaWIsICZtaWJsZW4pLCAwLAorCSAgICAi VW5leHBlY3RlZCBtYWxsY3RsbmFtZXRvbWliKCkgZmFpbHVyZSIpOworCW1pYlsxXSA9IChzaXpl X3QpYXJlbmFfaW5kOworCWV4cGVjdF9kX2VxKG1hbGxjdGxieW1pYihtaWIsIG1pYmxlbiwgTlVM TCwgTlVMTCwgTlVMTCwgMCksIDAsCisJICAgICJVbmV4cGVjdGVkIG1hbGxjdGxieW1pYigpIGZh aWx1cmUiKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitkb19kZWNheSh1bnNpZ25lZCBhcmVu YV9pbmQpIHsKKwlzaXplX3QgbWliWzNdOworCXNpemVfdCBtaWJsZW4gPSBzaXplb2YobWliKS9z aXplb2Yoc2l6ZV90KTsKKwlleHBlY3RfZF9lcShtYWxsY3RsbmFtZXRvbWliKCJhcmVuYS4wLmRl Y2F5IiwgbWliLCAmbWlibGVuKSwgMCwKKwkgICAgIlVuZXhwZWN0ZWQgbWFsbGN0bG5hbWV0b21p YigpIGZhaWx1cmUiKTsKKwltaWJbMV0gPSAoc2l6ZV90KWFyZW5hX2luZDsKKwlleHBlY3RfZF9l cShtYWxsY3RsYnltaWIobWliLCBtaWJsZW4sIE5VTEwsIE5VTEwsIE5VTEwsIDApLCAwLAorCSAg ICAiVW5leHBlY3RlZCBtYWxsY3RsYnltaWIoKSBmYWlsdXJlIik7Cit9CisKK3N0YXRpYyBpbmxp bmUgdWludDY0X3QKK2dldF9hcmVuYV9ucHVyZ2VfaW1wbChjb25zdCBjaGFyICptaWJuYW1lLCB1 bnNpZ25lZCBhcmVuYV9pbmQpIHsKKwlzaXplX3QgbWliWzRdOworCXNpemVfdCBtaWJsZW4gPSBz aXplb2YobWliKS9zaXplb2Yoc2l6ZV90KTsKKwlleHBlY3RfZF9lcShtYWxsY3RsbmFtZXRvbWli KG1pYm5hbWUsIG1pYiwgJm1pYmxlbiksIDAsCisJICAgICJVbmV4cGVjdGVkIG1hbGxjdGxuYW1l dG9taWIoKSBmYWlsdXJlIik7CisJbWliWzJdID0gKHNpemVfdClhcmVuYV9pbmQ7CisJdWludDY0 X3QgbnB1cmdlID0gMDsKKwlzaXplX3Qgc3ogPSBzaXplb2YobnB1cmdlKTsKKwlleHBlY3RfZF9l cShtYWxsY3RsYnltaWIobWliLCBtaWJsZW4sICh2b2lkICopJm5wdXJnZSwgJnN6LCBOVUxMLCAw KSwKKwkgICAgY29uZmlnX3N0YXRzID8gMCA6IEVOT0VOVCwgIlVuZXhwZWN0ZWQgbWFsbGN0bGJ5 bWliKCkgZmFpbHVyZSIpOworCXJldHVybiBucHVyZ2U7Cit9CisKK3N0YXRpYyBpbmxpbmUgdWlu dDY0X3QKK2dldF9hcmVuYV9kaXJ0eV9ucHVyZ2UodW5zaWduZWQgYXJlbmFfaW5kKSB7CisJZG9f ZXBvY2goKTsKKwlyZXR1cm4gZ2V0X2FyZW5hX25wdXJnZV9pbXBsKCJzdGF0cy5hcmVuYXMuMC5k aXJ0eV9ucHVyZ2UiLCBhcmVuYV9pbmQpOworfQorCitzdGF0aWMgaW5saW5lIHVpbnQ2NF90Citn ZXRfYXJlbmFfZGlydHlfcHVyZ2VkKHVuc2lnbmVkIGFyZW5hX2luZCkgeworCWRvX2Vwb2NoKCk7 CisJcmV0dXJuIGdldF9hcmVuYV9ucHVyZ2VfaW1wbCgic3RhdHMuYXJlbmFzLjAuZGlydHlfcHVy Z2VkIiwgYXJlbmFfaW5kKTsKK30KKworc3RhdGljIGlubGluZSB1aW50NjRfdAorZ2V0X2FyZW5h X211enp5X25wdXJnZSh1bnNpZ25lZCBhcmVuYV9pbmQpIHsKKwlkb19lcG9jaCgpOworCXJldHVy biBnZXRfYXJlbmFfbnB1cmdlX2ltcGwoInN0YXRzLmFyZW5hcy4wLm11enp5X25wdXJnZSIsIGFy ZW5hX2luZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdWludDY0X3QKK2dldF9hcmVuYV9ucHVyZ2Uo dW5zaWduZWQgYXJlbmFfaW5kKSB7CisJZG9fZXBvY2goKTsKKwlyZXR1cm4gZ2V0X2FyZW5hX25w dXJnZV9pbXBsKCJzdGF0cy5hcmVuYXMuMC5kaXJ0eV9ucHVyZ2UiLCBhcmVuYV9pbmQpICsKKwkg ICAgZ2V0X2FyZW5hX25wdXJnZV9pbXBsKCJzdGF0cy5hcmVuYXMuMC5tdXp6eV9ucHVyZ2UiLCBh cmVuYV9pbmQpOworfQorCitzdGF0aWMgaW5saW5lIHNpemVfdAorZ2V0X2FyZW5hX3BkaXJ0eSh1 bnNpZ25lZCBhcmVuYV9pbmQpIHsKKwlkb19lcG9jaCgpOworCXNpemVfdCBtaWJbNF07CisJc2l6 ZV90IG1pYmxlbiA9IHNpemVvZihtaWIpL3NpemVvZihzaXplX3QpOworCWV4cGVjdF9kX2VxKG1h bGxjdGxuYW1ldG9taWIoInN0YXRzLmFyZW5hcy4wLnBkaXJ0eSIsIG1pYiwgJm1pYmxlbiksIDAs CisJICAgICJVbmV4cGVjdGVkIG1hbGxjdGxuYW1ldG9taWIoKSBmYWlsdXJlIik7CisJbWliWzJd ID0gKHNpemVfdClhcmVuYV9pbmQ7CisJc2l6ZV90IHBkaXJ0eTsKKwlzaXplX3Qgc3ogPSBzaXpl b2YocGRpcnR5KTsKKwlleHBlY3RfZF9lcShtYWxsY3RsYnltaWIobWliLCBtaWJsZW4sICh2b2lk ICopJnBkaXJ0eSwgJnN6LCBOVUxMLCAwKSwgMCwKKwkgICAgIlVuZXhwZWN0ZWQgbWFsbGN0bGJ5 bWliKCkgZmFpbHVyZSIpOworCXJldHVybiBwZGlydHk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc2l6 ZV90CitnZXRfYXJlbmFfcG11enp5KHVuc2lnbmVkIGFyZW5hX2luZCkgeworCWRvX2Vwb2NoKCk7 CisJc2l6ZV90IG1pYls0XTsKKwlzaXplX3QgbWlibGVuID0gc2l6ZW9mKG1pYikvc2l6ZW9mKHNp emVfdCk7CisJZXhwZWN0X2RfZXEobWFsbGN0bG5hbWV0b21pYigic3RhdHMuYXJlbmFzLjAucG11 enp5IiwgbWliLCAmbWlibGVuKSwgMCwKKwkgICAgIlVuZXhwZWN0ZWQgbWFsbGN0bG5hbWV0b21p YigpIGZhaWx1cmUiKTsKKwltaWJbMl0gPSAoc2l6ZV90KWFyZW5hX2luZDsKKwlzaXplX3QgcG11 enp5OworCXNpemVfdCBzeiA9IHNpemVvZihwbXV6enkpOworCWV4cGVjdF9kX2VxKG1hbGxjdGxi eW1pYihtaWIsIG1pYmxlbiwgKHZvaWQgKikmcG11enp5LCAmc3osIE5VTEwsIDApLCAwLAorCSAg ICAiVW5leHBlY3RlZCBtYWxsY3RsYnltaWIoKSBmYWlsdXJlIik7CisJcmV0dXJuIHBtdXp6eTsK K30KKworc3RhdGljIGlubGluZSB2b2lkICoKK2RvX21hbGxvY3goc2l6ZV90IHNpemUsIGludCBm bGFncykgeworCXZvaWQgKnAgPSBtYWxsb2N4KHNpemUsIGZsYWdzKTsKKwlleHBlY3RfcHRyX25v dF9udWxsKHAsICJVbmV4cGVjdGVkIG1hbGxvY3goKSBmYWlsdXJlIik7CisJcmV0dXJuIHA7Cit9 CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZ2VuZXJhdGVfZGlydHkodW5zaWduZWQgYXJlbmFfaW5k LCBzaXplX3Qgc2l6ZSkgeworCWludCBmbGFncyA9IE1BTExPQ1hfQVJFTkEoYXJlbmFfaW5kKSB8 IE1BTExPQ1hfVENBQ0hFX05PTkU7CisJdm9pZCAqcCA9IGRvX21hbGxvY3goc2l6ZSwgZmxhZ3Mp OworCWRhbGxvY3gocCwgZmxhZ3MpOworfQorCgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4z LjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC9pbmNsdWRlL3Rlc3QvYmVuY2guaCBiLzM4OS1k cy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvaW5jbHVkZS90ZXN0L2JlbmNo LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDM5N2M5NAotLS0gL2Rldi9u dWxsCisrKyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvaW5j bHVkZS90ZXN0L2JlbmNoLmgKQEAgLTAsMCArMSw2MCBAQAorc3RhdGljIGlubGluZSB2b2lkCit0 aW1lX2Z1bmModGltZWRlbHRhX3QgKnRpbWVyLCB1aW50NjRfdCBud2FybXVwLCB1aW50NjRfdCBu aXRlciwKKyAgICB2b2lkICgqZnVuYykodm9pZCkpIHsKKwl1aW50NjRfdCBpOworCisJZm9yIChp ID0gMDsgaSA8IG53YXJtdXA7IGkrKykgeworCQlmdW5jKCk7CisJfQorCXRpbWVyX3N0YXJ0KHRp bWVyKTsKKwlmb3IgKGkgPSAwOyBpIDwgbml0ZXI7IGkrKykgeworCQlmdW5jKCk7CisJfQorCXRp bWVyX3N0b3AodGltZXIpOworfQorCisjZGVmaW5lIEZNVF9OU0VDU19CVUZfU0laRSAxMDAKKy8q IFByaW50IG5hbm9zZWNvbmRzIC8gaXRlciBpbnRvIHRoZSBidWZmZXIgImJ1ZiIuICovCitzdGF0 aWMgaW5saW5lIHZvaWQKK2ZtdF9uc2Vjcyh1aW50NjRfdCB1c2VjLCB1aW50NjRfdCBpdGVycywg Y2hhciAqYnVmKSB7CisJdWludDY0X3QgbnNlYyA9IHVzZWMgKiAxMDAwOworCS8qIFdlJ2xsIGRp c3BsYXkgMyBkaWdpdHMgYWZ0ZXIgdGhlIGRlY2ltYWwgcG9pbnQuICovCisJdWludDY0X3QgbnNl YzEwMDAgPSBuc2VjICogMTAwMDsKKwl1aW50NjRfdCBuc2Vjc19wZXJfaXRlcjEwMDAgPSBuc2Vj MTAwMCAvIGl0ZXJzOworCXVpbnQ2NF90IGludHBhcnQgPSBuc2Vjc19wZXJfaXRlcjEwMDAgLyAx MDAwOworCXVpbnQ2NF90IGZyYWNwYXJ0ID0gbnNlY3NfcGVyX2l0ZXIxMDAwICUgMTAwMDsKKwlt YWxsb2Nfc25wcmludGYoYnVmLCBGTVRfTlNFQ1NfQlVGX1NJWkUsICIlIkZNVHU2NCIuJTAzIkZN VHU2NCwgaW50cGFydCwKKwkgICAgZnJhY3BhcnQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQK K2NvbXBhcmVfZnVuY3ModWludDY0X3Qgbndhcm11cCwgdWludDY0X3Qgbml0ZXIsIGNvbnN0IGNo YXIgKm5hbWVfYSwKKyAgICB2b2lkICgqZnVuY19hKSwgY29uc3QgY2hhciAqbmFtZV9iLCB2b2lk ICgqZnVuY19iKSkgeworCXRpbWVkZWx0YV90IHRpbWVyX2EsIHRpbWVyX2I7CisJY2hhciByYXRp b19idWZbNl07CisJdm9pZCAqcDsKKworCXAgPSBtYWxsb2N4KDEsIDApOworCWlmIChwID09IE5V TEwpIHsKKwkJdGVzdF9mYWlsKCJVbmV4cGVjdGVkIG1hbGxvY3goKSBmYWlsdXJlIik7CisJCXJl dHVybjsKKwl9CisKKwl0aW1lX2Z1bmMoJnRpbWVyX2EsIG53YXJtdXAsIG5pdGVyLCBmdW5jX2Ep OworCXRpbWVfZnVuYygmdGltZXJfYiwgbndhcm11cCwgbml0ZXIsIGZ1bmNfYik7CisKKwl1aW50 NjRfdCB1c2VjX2EgPSB0aW1lcl91c2VjKCZ0aW1lcl9hKTsKKwljaGFyIGJ1Zl9hW0ZNVF9OU0VD U19CVUZfU0laRV07CisJZm10X25zZWNzKHVzZWNfYSwgbml0ZXIsIGJ1Zl9hKTsKKworCXVpbnQ2 NF90IHVzZWNfYiA9IHRpbWVyX3VzZWMoJnRpbWVyX2IpOworCWNoYXIgYnVmX2JbRk1UX05TRUNT X0JVRl9TSVpFXTsKKwlmbXRfbnNlY3ModXNlY19iLCBuaXRlciwgYnVmX2IpOworCisJdGltZXJf cmF0aW8oJnRpbWVyX2EsICZ0aW1lcl9iLCByYXRpb19idWYsIHNpemVvZihyYXRpb19idWYpKTsK KwltYWxsb2NfcHJpbnRmKCIlIkZNVHU2NCIgaXRlcmF0aW9ucywgJXM9JSJGTVR1NjQidXMgKCVz IG5zL2l0ZXIpLCAiCisJICAgICIlcz0lIkZNVHU2NCJ1cyAoJXMgbnMvaXRlciksIHJhdGlvPTE6 JXNcbiIsCisJICAgIG5pdGVyLCBuYW1lX2EsIHVzZWNfYSwgYnVmX2EsIG5hbWVfYiwgdXNlY19i LCBidWZfYiwgcmF0aW9fYnVmKTsKKworCWRhbGxvY3gocCwgMCk7Cit9CgpkaWZmIC0tZ2l0IGEv Mzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC9pbmNsdWRlL3Rlc3Qv Ymd0aGQuaCBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvaW5j bHVkZS90ZXN0L2JndGhkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGZh MjM5NQotLS0gL2Rldi9udWxsCisrKyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9j LTUuMy4wL3Rlc3QvaW5jbHVkZS90ZXN0L2JndGhkLmgKQEAgLTAsMCArMSwxNyBAQAorLyoKKyAq IFNoYXJlZCB1dGlsaXR5IGZvciBjaGVja2luZyBpZiBiYWNrZ3JvdW5kX3RocmVhZCBpcyBlbmFi bGVkLCB3aGljaCBhZmZlY3RzCisgKiB0aGUgcHVyZ2luZyBiZWhhdmlvciBhbmQgYXNzdW1wdGlv bnMgaW4gc29tZSB0ZXN0cy4KKyAqLworCitzdGF0aWMgaW5saW5lIGJvb2wKK2lzX2JhY2tncm91 bmRfdGhyZWFkX2VuYWJsZWQodm9pZCkgeworCWJvb2wgZW5hYmxlZDsKKwlzaXplX3Qgc3ogPSBz aXplb2YoYm9vbCk7CisJaW50IHJldCA9IG1hbGxjdGwoImJhY2tncm91bmRfdGhyZWFkIiwgKHZv aWQgKikmZW5hYmxlZCwgJnN6LCBOVUxMLDApOworCWlmIChyZXQgPT0gRU5PRU5UKSB7CisJCXJl dHVybiBmYWxzZTsKKwl9CisJYXNzZXJ0X2RfZXEocmV0LCAwLCAiVW5leHBlY3RlZCBtYWxsY3Rs IGVycm9yIik7CisKKwlyZXR1cm4gZW5hYmxlZDsKK30KCmRpZmYgLS1naXQgYS8zODktZHMtYmFz ZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L2luY2x1ZGUvdGVzdC9idGFsbG9jLmgg Yi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L2luY2x1ZGUvdGVz dC9idGFsbG9jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGYzNDU5OQot LS0gL2Rldi9udWxsCisrKyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4w L3Rlc3QvaW5jbHVkZS90ZXN0L2J0YWxsb2MuaApAQCAtMCwwICsxLDMwIEBACisvKiBidGFsbG9j KCkgcHJvdmlkZXMgYSBtZWNoYW5pc20gZm9yIGFsbG9jYXRpbmcgdmlhIHBlcm11dGVkIGJhY2t0 cmFjZXMuICovCit2b2lkCSpidGFsbG9jKHNpemVfdCBzaXplLCB1bnNpZ25lZCBiaXRzKTsKKwor I2RlZmluZSBidGFsbG9jX25fcHJvdG8obikJCQkJCQlcCit2b2lkCSpidGFsbG9jXyMjbihzaXpl X3Qgc2l6ZSwgdW5zaWduZWQgYml0cyk7CitidGFsbG9jX25fcHJvdG8oMCkKK2J0YWxsb2Nfbl9w cm90bygxKQorCisjZGVmaW5lIGJ0YWxsb2Nfbl9nZW4obikJCQkJCQlcCit2b2lkICoJCQkJCQkJ CQlcCitidGFsbG9jXyMjbihzaXplX3Qgc2l6ZSwgdW5zaWduZWQgYml0cykgewkJCQlcCisJdm9p ZCAqcDsJCQkJCQkJXAorCQkJCQkJCQkJXAorCWlmIChiaXRzID09IDApIHsJCQkJCQlcCisJCXAg PSBtYWxsb2N4KHNpemUsIDApOwkJCQkJXAorCX0gZWxzZSB7CQkJCQkJCVwKKwkJc3dpdGNoIChi aXRzICYgMHgxVSkgewkJCQkJXAorCQljYXNlIDA6CQkJCQkJCVwKKwkJCXAgPSAoYnRhbGxvY18w KHNpemUsIGJpdHMgPj4gMSkpOwkJXAorCQkJYnJlYWs7CQkJCQkJXAorCQljYXNlIDE6CQkJCQkJ CVwKKwkJCXAgPSAoYnRhbGxvY18xKHNpemUsIGJpdHMgPj4gMSkpOwkJXAorCQkJYnJlYWs7CQkJ CQkJXAorCQlkZWZhdWx0OiBub3RfcmVhY2hlZCgpOwkJCQkJXAorCQl9CQkJCQkJCVwKKwl9CQkJ CQkJCQlcCisJLyogSW50ZW50aW9uYWxseSBzYWJvdGFnZSB0YWlsIGNhbGwgb3B0aW1pemF0aW9u LiAqLwkJXAorCWV4cGVjdF9wdHJfbm90X251bGwocCwgIlVuZXhwZWN0ZWQgbWFsbG9jeCgpIGZh aWx1cmUiKTsJCVwKKwlyZXR1cm4gcDsJCQkJCQkJXAorfQoKZGlmZiAtLWdpdCBhLzM4OS1kcy1i YXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvaW5jbHVkZS90ZXN0L2V4dGVudF9o b29rcy5oIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC9pbmNs dWRlL3Rlc3QvZXh0ZW50X2hvb2tzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MC4uYWFkMGE0NgotLS0gL2Rldi9udWxsCisrKyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2pl bWFsbG9jLTUuMy4wL3Rlc3QvaW5jbHVkZS90ZXN0L2V4dGVudF9ob29rcy5oCkBAIC0wLDAgKzEs Mjg5IEBACisvKgorICogQm9pbGVycGxhdGUgY29kZSB1c2VkIGZvciB0ZXN0aW5nIGV4dGVudCBo b29rcyB2aWEgaW50ZXJjZXB0aW9uIGFuZAorICogcGFzc3Rocm91Z2guCisgKi8KKworc3RhdGlj IHZvaWQJKmV4dGVudF9hbGxvY19ob29rKGV4dGVudF9ob29rc190ICpleHRlbnRfaG9va3MsIHZv aWQgKm5ld19hZGRyLAorICAgIHNpemVfdCBzaXplLCBzaXplX3QgYWxpZ25tZW50LCBib29sICp6 ZXJvLCBib29sICpjb21taXQsCisgICAgdW5zaWduZWQgYXJlbmFfaW5kKTsKK3N0YXRpYyBib29s CWV4dGVudF9kYWxsb2NfaG9vayhleHRlbnRfaG9va3NfdCAqZXh0ZW50X2hvb2tzLCB2b2lkICph ZGRyLAorICAgIHNpemVfdCBzaXplLCBib29sIGNvbW1pdHRlZCwgdW5zaWduZWQgYXJlbmFfaW5k KTsKK3N0YXRpYyB2b2lkCWV4dGVudF9kZXN0cm95X2hvb2soZXh0ZW50X2hvb2tzX3QgKmV4dGVu dF9ob29rcywgdm9pZCAqYWRkciwKKyAgICBzaXplX3Qgc2l6ZSwgYm9vbCBjb21taXR0ZWQsIHVu c2lnbmVkIGFyZW5hX2luZCk7CitzdGF0aWMgYm9vbAlleHRlbnRfY29tbWl0X2hvb2soZXh0ZW50 X2hvb2tzX3QgKmV4dGVudF9ob29rcywgdm9pZCAqYWRkciwKKyAgICBzaXplX3Qgc2l6ZSwgc2l6 ZV90IG9mZnNldCwgc2l6ZV90IGxlbmd0aCwgdW5zaWduZWQgYXJlbmFfaW5kKTsKK3N0YXRpYyBi b29sCWV4dGVudF9kZWNvbW1pdF9ob29rKGV4dGVudF9ob29rc190ICpleHRlbnRfaG9va3MsIHZv aWQgKmFkZHIsCisgICAgc2l6ZV90IHNpemUsIHNpemVfdCBvZmZzZXQsIHNpemVfdCBsZW5ndGgs IHVuc2lnbmVkIGFyZW5hX2luZCk7CitzdGF0aWMgYm9vbAlleHRlbnRfcHVyZ2VfbGF6eV9ob29r KGV4dGVudF9ob29rc190ICpleHRlbnRfaG9va3MsIHZvaWQgKmFkZHIsCisgICAgc2l6ZV90IHNp emUsIHNpemVfdCBvZmZzZXQsIHNpemVfdCBsZW5ndGgsIHVuc2lnbmVkIGFyZW5hX2luZCk7Citz dGF0aWMgYm9vbAlleHRlbnRfcHVyZ2VfZm9yY2VkX2hvb2soZXh0ZW50X2hvb2tzX3QgKmV4dGVu dF9ob29rcywKKyAgICB2b2lkICphZGRyLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IG9mZnNldCwgc2l6 ZV90IGxlbmd0aCwgdW5zaWduZWQgYXJlbmFfaW5kKTsKK3N0YXRpYyBib29sCWV4dGVudF9zcGxp dF9ob29rKGV4dGVudF9ob29rc190ICpleHRlbnRfaG9va3MsIHZvaWQgKmFkZHIsCisgICAgc2l6 ZV90IHNpemUsIHNpemVfdCBzaXplX2EsIHNpemVfdCBzaXplX2IsIGJvb2wgY29tbWl0dGVkLAor ICAgIHVuc2lnbmVkIGFyZW5hX2luZCk7CitzdGF0aWMgYm9vbAlleHRlbnRfbWVyZ2VfaG9vayhl eHRlbnRfaG9va3NfdCAqZXh0ZW50X2hvb2tzLCB2b2lkICphZGRyX2EsCisgICAgc2l6ZV90IHNp emVfYSwgdm9pZCAqYWRkcl9iLCBzaXplX3Qgc2l6ZV9iLCBib29sIGNvbW1pdHRlZCwKKyAgICB1 bnNpZ25lZCBhcmVuYV9pbmQpOworCitzdGF0aWMgZXh0ZW50X2hvb2tzX3QgKmRlZmF1bHRfaG9v a3M7CitzdGF0aWMgZXh0ZW50X2hvb2tzX3QgaG9va3MgPSB7CisJZXh0ZW50X2FsbG9jX2hvb2ss CisJZXh0ZW50X2RhbGxvY19ob29rLAorCWV4dGVudF9kZXN0cm95X2hvb2ssCisJZXh0ZW50X2Nv bW1pdF9ob29rLAorCWV4dGVudF9kZWNvbW1pdF9ob29rLAorCWV4dGVudF9wdXJnZV9sYXp5X2hv b2ssCisJZXh0ZW50X3B1cmdlX2ZvcmNlZF9ob29rLAorCWV4dGVudF9zcGxpdF9ob29rLAorCWV4 dGVudF9tZXJnZV9ob29rCit9OworCisvKiBDb250cm9sIHdoZXRoZXIgaG9vayBmdW5jdGlvbnMg cGFzcyBjYWxscyB0aHJvdWdoIHRvIGRlZmF1bHQgaG9va3MuICovCitzdGF0aWMgYm9vbCB0cnlf YWxsb2MgPSB0cnVlOworc3RhdGljIGJvb2wgdHJ5X2RhbGxvYyA9IHRydWU7CitzdGF0aWMgYm9v bCB0cnlfZGVzdHJveSA9IHRydWU7CitzdGF0aWMgYm9vbCB0cnlfY29tbWl0ID0gdHJ1ZTsKK3N0 YXRpYyBib29sIHRyeV9kZWNvbW1pdCA9IHRydWU7CitzdGF0aWMgYm9vbCB0cnlfcHVyZ2VfbGF6 eSA9IHRydWU7CitzdGF0aWMgYm9vbCB0cnlfcHVyZ2VfZm9yY2VkID0gdHJ1ZTsKK3N0YXRpYyBi b29sIHRyeV9zcGxpdCA9IHRydWU7CitzdGF0aWMgYm9vbCB0cnlfbWVyZ2UgPSB0cnVlOworCisv KiBTZXQgdG8gZmFsc2UgcHJpb3IgdG8gb3BlcmF0aW9ucywgdGhlbiBpbnRyb3NwZWN0IGFmdGVy IG9wZXJhdGlvbnMuICovCitzdGF0aWMgYm9vbCBjYWxsZWRfYWxsb2M7CitzdGF0aWMgYm9vbCBj YWxsZWRfZGFsbG9jOworc3RhdGljIGJvb2wgY2FsbGVkX2Rlc3Ryb3k7CitzdGF0aWMgYm9vbCBj YWxsZWRfY29tbWl0Oworc3RhdGljIGJvb2wgY2FsbGVkX2RlY29tbWl0Oworc3RhdGljIGJvb2wg Y2FsbGVkX3B1cmdlX2xhenk7CitzdGF0aWMgYm9vbCBjYWxsZWRfcHVyZ2VfZm9yY2VkOworc3Rh dGljIGJvb2wgY2FsbGVkX3NwbGl0Oworc3RhdGljIGJvb2wgY2FsbGVkX21lcmdlOworCisvKiBT ZXQgdG8gZmFsc2UgcHJpb3IgdG8gb3BlcmF0aW9ucywgdGhlbiBpbnRyb3NwZWN0IGFmdGVyIG9w ZXJhdGlvbnMuICovCitzdGF0aWMgYm9vbCBkaWRfYWxsb2M7CitzdGF0aWMgYm9vbCBkaWRfZGFs bG9jOworc3RhdGljIGJvb2wgZGlkX2Rlc3Ryb3k7CitzdGF0aWMgYm9vbCBkaWRfY29tbWl0Owor c3RhdGljIGJvb2wgZGlkX2RlY29tbWl0Oworc3RhdGljIGJvb2wgZGlkX3B1cmdlX2xhenk7Citz dGF0aWMgYm9vbCBkaWRfcHVyZ2VfZm9yY2VkOworc3RhdGljIGJvb2wgZGlkX3NwbGl0Oworc3Rh dGljIGJvb2wgZGlkX21lcmdlOworCisjaWYgMAorIyAgZGVmaW5lIFRSQUNFX0hPT0soZm10LCAu Li4pIG1hbGxvY19wcmludGYoZm10LCBfX1ZBX0FSR1NfXykKKyNlbHNlCisjICBkZWZpbmUgVFJB Q0VfSE9PSyhmbXQsIC4uLikKKyNlbmRpZgorCitzdGF0aWMgdm9pZCAqCitleHRlbnRfYWxsb2Nf aG9vayhleHRlbnRfaG9va3NfdCAqZXh0ZW50X2hvb2tzLCB2b2lkICpuZXdfYWRkciwgc2l6ZV90 IHNpemUsCisgICAgc2l6ZV90IGFsaWdubWVudCwgYm9vbCAqemVybywgYm9vbCAqY29tbWl0LCB1 bnNpZ25lZCBhcmVuYV9pbmQpIHsKKwl2b2lkICpyZXQ7CisKKwlUUkFDRV9IT09LKCIlcyhleHRl bnRfaG9va3M9JXAsIG5ld19hZGRyPSVwLCBzaXplPSV6dSwgYWxpZ25tZW50PSV6dSwgIgorCSAg ICAiKnplcm89JXMsICpjb21taXQ9JXMsIGFyZW5hX2luZD0ldSlcbiIsIF9fZnVuY19fLCBleHRl bnRfaG9va3MsCisJICAgIG5ld19hZGRyLCBzaXplLCBhbGlnbm1lbnQsICp6ZXJvID8gICJ0cnVl IiA6ICJmYWxzZSIsICpjb21taXQgPworCSAgICAidHJ1ZSIgOiAiZmFsc2UiLCBhcmVuYV9pbmQp OworCWV4cGVjdF9wdHJfZXEoZXh0ZW50X2hvb2tzLCAmaG9va3MsCisJICAgICJleHRlbnRfaG9v a3Mgc2hvdWxkIGJlIHNhbWUgYXMgcG9pbnRlciB1c2VkIHRvIHNldCBob29rcyIpOworCWV4cGVj dF9wdHJfZXEoZXh0ZW50X2hvb2tzLT5hbGxvYywgZXh0ZW50X2FsbG9jX2hvb2ssCisJICAgICJX cm9uZyBob29rIGZ1bmN0aW9uIik7CisJY2FsbGVkX2FsbG9jID0gdHJ1ZTsKKwlpZiAoIXRyeV9h bGxvYykgeworCQlyZXR1cm4gTlVMTDsKKwl9CisJcmV0ID0gZGVmYXVsdF9ob29rcy0+YWxsb2Mo ZGVmYXVsdF9ob29rcywgbmV3X2FkZHIsIHNpemUsIGFsaWdubWVudCwKKwkgICAgemVybywgY29t bWl0LCAwKTsKKwlkaWRfYWxsb2MgPSAocmV0ICE9IE5VTEwpOworCXJldHVybiByZXQ7Cit9CisK K3N0YXRpYyBib29sCitleHRlbnRfZGFsbG9jX2hvb2soZXh0ZW50X2hvb2tzX3QgKmV4dGVudF9o b29rcywgdm9pZCAqYWRkciwgc2l6ZV90IHNpemUsCisgICAgYm9vbCBjb21taXR0ZWQsIHVuc2ln bmVkIGFyZW5hX2luZCkgeworCWJvb2wgZXJyOworCisJVFJBQ0VfSE9PSygiJXMoZXh0ZW50X2hv b2tzPSVwLCBhZGRyPSVwLCBzaXplPSV6dSwgY29tbWl0dGVkPSVzLCAiCisJICAgICJhcmVuYV9p bmQ9JXUpXG4iLCBfX2Z1bmNfXywgZXh0ZW50X2hvb2tzLCBhZGRyLCBzaXplLCBjb21taXR0ZWQg PworCSAgICAidHJ1ZSIgOiAiZmFsc2UiLCBhcmVuYV9pbmQpOworCWV4cGVjdF9wdHJfZXEoZXh0 ZW50X2hvb2tzLCAmaG9va3MsCisJICAgICJleHRlbnRfaG9va3Mgc2hvdWxkIGJlIHNhbWUgYXMg cG9pbnRlciB1c2VkIHRvIHNldCBob29rcyIpOworCWV4cGVjdF9wdHJfZXEoZXh0ZW50X2hvb2tz LT5kYWxsb2MsIGV4dGVudF9kYWxsb2NfaG9vaywKKwkgICAgIldyb25nIGhvb2sgZnVuY3Rpb24i KTsKKwljYWxsZWRfZGFsbG9jID0gdHJ1ZTsKKwlpZiAoIXRyeV9kYWxsb2MpIHsKKwkJcmV0dXJu IHRydWU7CisJfQorCWVyciA9IGRlZmF1bHRfaG9va3MtPmRhbGxvYyhkZWZhdWx0X2hvb2tzLCBh ZGRyLCBzaXplLCBjb21taXR0ZWQsIDApOworCWRpZF9kYWxsb2MgPSAhZXJyOworCXJldHVybiBl cnI7Cit9CisKK3N0YXRpYyB2b2lkCitleHRlbnRfZGVzdHJveV9ob29rKGV4dGVudF9ob29rc190 ICpleHRlbnRfaG9va3MsIHZvaWQgKmFkZHIsIHNpemVfdCBzaXplLAorICAgIGJvb2wgY29tbWl0 dGVkLCB1bnNpZ25lZCBhcmVuYV9pbmQpIHsKKwlUUkFDRV9IT09LKCIlcyhleHRlbnRfaG9va3M9 JXAsIGFkZHI9JXAsIHNpemU9JXp1LCBjb21taXR0ZWQ9JXMsICIKKwkgICAgImFyZW5hX2luZD0l dSlcbiIsIF9fZnVuY19fLCBleHRlbnRfaG9va3MsIGFkZHIsIHNpemUsIGNvbW1pdHRlZCA/CisJ ICAgICJ0cnVlIiA6ICJmYWxzZSIsIGFyZW5hX2luZCk7CisJZXhwZWN0X3B0cl9lcShleHRlbnRf aG9va3MsICZob29rcywKKwkgICAgImV4dGVudF9ob29rcyBzaG91bGQgYmUgc2FtZSBhcyBwb2lu dGVyIHVzZWQgdG8gc2V0IGhvb2tzIik7CisJZXhwZWN0X3B0cl9lcShleHRlbnRfaG9va3MtPmRl c3Ryb3ksIGV4dGVudF9kZXN0cm95X2hvb2ssCisJICAgICJXcm9uZyBob29rIGZ1bmN0aW9uIik7 CisJY2FsbGVkX2Rlc3Ryb3kgPSB0cnVlOworCWlmICghdHJ5X2Rlc3Ryb3kpIHsKKwkJcmV0dXJu OworCX0KKwlkZWZhdWx0X2hvb2tzLT5kZXN0cm95KGRlZmF1bHRfaG9va3MsIGFkZHIsIHNpemUs IGNvbW1pdHRlZCwgMCk7CisJZGlkX2Rlc3Ryb3kgPSB0cnVlOworfQorCitzdGF0aWMgYm9vbAor ZXh0ZW50X2NvbW1pdF9ob29rKGV4dGVudF9ob29rc190ICpleHRlbnRfaG9va3MsIHZvaWQgKmFk ZHIsIHNpemVfdCBzaXplLAorICAgIHNpemVfdCBvZmZzZXQsIHNpemVfdCBsZW5ndGgsIHVuc2ln bmVkIGFyZW5hX2luZCkgeworCWJvb2wgZXJyOworCisJVFJBQ0VfSE9PSygiJXMoZXh0ZW50X2hv b2tzPSVwLCBhZGRyPSVwLCBzaXplPSV6dSwgb2Zmc2V0PSV6dSwgIgorCSAgICAibGVuZ3RoPSV6 dSwgYXJlbmFfaW5kPSV1KVxuIiwgX19mdW5jX18sIGV4dGVudF9ob29rcywgYWRkciwgc2l6ZSwK KwkgICAgb2Zmc2V0LCBsZW5ndGgsIGFyZW5hX2luZCk7CisJZXhwZWN0X3B0cl9lcShleHRlbnRf aG9va3MsICZob29rcywKKwkgICAgImV4dGVudF9ob29rcyBzaG91bGQgYmUgc2FtZSBhcyBwb2lu dGVyIHVzZWQgdG8gc2V0IGhvb2tzIik7CisJZXhwZWN0X3B0cl9lcShleHRlbnRfaG9va3MtPmNv bW1pdCwgZXh0ZW50X2NvbW1pdF9ob29rLAorCSAgICAiV3JvbmcgaG9vayBmdW5jdGlvbiIpOwor CWNhbGxlZF9jb21taXQgPSB0cnVlOworCWlmICghdHJ5X2NvbW1pdCkgeworCQlyZXR1cm4gdHJ1 ZTsKKwl9CisJZXJyID0gZGVmYXVsdF9ob29rcy0+Y29tbWl0KGRlZmF1bHRfaG9va3MsIGFkZHIs IHNpemUsIG9mZnNldCwgbGVuZ3RoLAorCSAgICAwKTsKKwlkaWRfY29tbWl0ID0gIWVycjsKKwly ZXR1cm4gZXJyOworfQorCitzdGF0aWMgYm9vbAorZXh0ZW50X2RlY29tbWl0X2hvb2soZXh0ZW50 X2hvb2tzX3QgKmV4dGVudF9ob29rcywgdm9pZCAqYWRkciwgc2l6ZV90IHNpemUsCisgICAgc2l6 ZV90IG9mZnNldCwgc2l6ZV90IGxlbmd0aCwgdW5zaWduZWQgYXJlbmFfaW5kKSB7CisJYm9vbCBl cnI7CisKKwlUUkFDRV9IT09LKCIlcyhleHRlbnRfaG9va3M9JXAsIGFkZHI9JXAsIHNpemU9JXp1 LCBvZmZzZXQ9JXp1LCAiCisJICAgICJsZW5ndGg9JXp1LCBhcmVuYV9pbmQ9JXUpXG4iLCBfX2Z1 bmNfXywgZXh0ZW50X2hvb2tzLCBhZGRyLCBzaXplLAorCSAgICBvZmZzZXQsIGxlbmd0aCwgYXJl bmFfaW5kKTsKKwlleHBlY3RfcHRyX2VxKGV4dGVudF9ob29rcywgJmhvb2tzLAorCSAgICAiZXh0 ZW50X2hvb2tzIHNob3VsZCBiZSBzYW1lIGFzIHBvaW50ZXIgdXNlZCB0byBzZXQgaG9va3MiKTsK KwlleHBlY3RfcHRyX2VxKGV4dGVudF9ob29rcy0+ZGVjb21taXQsIGV4dGVudF9kZWNvbW1pdF9o b29rLAorCSAgICAiV3JvbmcgaG9vayBmdW5jdGlvbiIpOworCWNhbGxlZF9kZWNvbW1pdCA9IHRy dWU7CisJaWYgKCF0cnlfZGVjb21taXQpIHsKKwkJcmV0dXJuIHRydWU7CisJfQorCWVyciA9IGRl ZmF1bHRfaG9va3MtPmRlY29tbWl0KGRlZmF1bHRfaG9va3MsIGFkZHIsIHNpemUsIG9mZnNldCwg bGVuZ3RoLAorCSAgICAwKTsKKwlkaWRfZGVjb21taXQgPSAhZXJyOworCXJldHVybiBlcnI7Cit9 CisKK3N0YXRpYyBib29sCitleHRlbnRfcHVyZ2VfbGF6eV9ob29rKGV4dGVudF9ob29rc190ICpl eHRlbnRfaG9va3MsIHZvaWQgKmFkZHIsIHNpemVfdCBzaXplLAorICAgIHNpemVfdCBvZmZzZXQs IHNpemVfdCBsZW5ndGgsIHVuc2lnbmVkIGFyZW5hX2luZCkgeworCWJvb2wgZXJyOworCisJVFJB Q0VfSE9PSygiJXMoZXh0ZW50X2hvb2tzPSVwLCBhZGRyPSVwLCBzaXplPSV6dSwgb2Zmc2V0PSV6 dSwgIgorCSAgICAibGVuZ3RoPSV6dSBhcmVuYV9pbmQ9JXUpXG4iLCBfX2Z1bmNfXywgZXh0ZW50 X2hvb2tzLCBhZGRyLCBzaXplLAorCSAgICBvZmZzZXQsIGxlbmd0aCwgYXJlbmFfaW5kKTsKKwll eHBlY3RfcHRyX2VxKGV4dGVudF9ob29rcywgJmhvb2tzLAorCSAgICAiZXh0ZW50X2hvb2tzIHNo b3VsZCBiZSBzYW1lIGFzIHBvaW50ZXIgdXNlZCB0byBzZXQgaG9va3MiKTsKKwlleHBlY3RfcHRy X2VxKGV4dGVudF9ob29rcy0+cHVyZ2VfbGF6eSwgZXh0ZW50X3B1cmdlX2xhenlfaG9vaywKKwkg ICAgIldyb25nIGhvb2sgZnVuY3Rpb24iKTsKKwljYWxsZWRfcHVyZ2VfbGF6eSA9IHRydWU7CisJ aWYgKCF0cnlfcHVyZ2VfbGF6eSkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9CisJZXJyID0gZGVmYXVs dF9ob29rcy0+cHVyZ2VfbGF6eSA9PSBOVUxMIHx8CisJICAgIGRlZmF1bHRfaG9va3MtPnB1cmdl X2xhenkoZGVmYXVsdF9ob29rcywgYWRkciwgc2l6ZSwgb2Zmc2V0LCBsZW5ndGgsCisJICAgIDAp OworCWRpZF9wdXJnZV9sYXp5ID0gIWVycjsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgYm9v bAorZXh0ZW50X3B1cmdlX2ZvcmNlZF9ob29rKGV4dGVudF9ob29rc190ICpleHRlbnRfaG9va3Ms IHZvaWQgKmFkZHIsIHNpemVfdCBzaXplLAorICAgIHNpemVfdCBvZmZzZXQsIHNpemVfdCBsZW5n dGgsIHVuc2lnbmVkIGFyZW5hX2luZCkgeworCWJvb2wgZXJyOworCisJVFJBQ0VfSE9PSygiJXMo ZXh0ZW50X2hvb2tzPSVwLCBhZGRyPSVwLCBzaXplPSV6dSwgb2Zmc2V0PSV6dSwgIgorCSAgICAi bGVuZ3RoPSV6dSBhcmVuYV9pbmQ9JXUpXG4iLCBfX2Z1bmNfXywgZXh0ZW50X2hvb2tzLCBhZGRy LCBzaXplLAorCSAgICBvZmZzZXQsIGxlbmd0aCwgYXJlbmFfaW5kKTsKKwlleHBlY3RfcHRyX2Vx KGV4dGVudF9ob29rcywgJmhvb2tzLAorCSAgICAiZXh0ZW50X2hvb2tzIHNob3VsZCBiZSBzYW1l IGFzIHBvaW50ZXIgdXNlZCB0byBzZXQgaG9va3MiKTsKKwlleHBlY3RfcHRyX2VxKGV4dGVudF9o b29rcy0+cHVyZ2VfZm9yY2VkLCBleHRlbnRfcHVyZ2VfZm9yY2VkX2hvb2ssCisJICAgICJXcm9u ZyBob29rIGZ1bmN0aW9uIik7CisJY2FsbGVkX3B1cmdlX2ZvcmNlZCA9IHRydWU7CisJaWYgKCF0 cnlfcHVyZ2VfZm9yY2VkKSB7CisJCXJldHVybiB0cnVlOworCX0KKwllcnIgPSBkZWZhdWx0X2hv b2tzLT5wdXJnZV9mb3JjZWQgPT0gTlVMTCB8fAorCSAgICBkZWZhdWx0X2hvb2tzLT5wdXJnZV9m b3JjZWQoZGVmYXVsdF9ob29rcywgYWRkciwgc2l6ZSwgb2Zmc2V0LAorCSAgICBsZW5ndGgsIDAp OworCWRpZF9wdXJnZV9mb3JjZWQgPSAhZXJyOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBi b29sCitleHRlbnRfc3BsaXRfaG9vayhleHRlbnRfaG9va3NfdCAqZXh0ZW50X2hvb2tzLCB2b2lk ICphZGRyLCBzaXplX3Qgc2l6ZSwKKyAgICBzaXplX3Qgc2l6ZV9hLCBzaXplX3Qgc2l6ZV9iLCBi b29sIGNvbW1pdHRlZCwgdW5zaWduZWQgYXJlbmFfaW5kKSB7CisJYm9vbCBlcnI7CisKKwlUUkFD RV9IT09LKCIlcyhleHRlbnRfaG9va3M9JXAsIGFkZHI9JXAsIHNpemU9JXp1LCBzaXplX2E9JXp1 LCAiCisJICAgICJzaXplX2I9JXp1LCBjb21taXR0ZWQ9JXMsIGFyZW5hX2luZD0ldSlcbiIsIF9f ZnVuY19fLCBleHRlbnRfaG9va3MsCisJICAgIGFkZHIsIHNpemUsIHNpemVfYSwgc2l6ZV9iLCBj b21taXR0ZWQgPyAidHJ1ZSIgOiAiZmFsc2UiLAorCSAgICBhcmVuYV9pbmQpOworCWV4cGVjdF9w dHJfZXEoZXh0ZW50X2hvb2tzLCAmaG9va3MsCisJICAgICJleHRlbnRfaG9va3Mgc2hvdWxkIGJl IHNhbWUgYXMgcG9pbnRlciB1c2VkIHRvIHNldCBob29rcyIpOworCWV4cGVjdF9wdHJfZXEoZXh0 ZW50X2hvb2tzLT5zcGxpdCwgZXh0ZW50X3NwbGl0X2hvb2ssCisJICAgICJXcm9uZyBob29rIGZ1 bmN0aW9uIik7CisJY2FsbGVkX3NwbGl0ID0gdHJ1ZTsKKwlpZiAoIXRyeV9zcGxpdCkgeworCQly ZXR1cm4gdHJ1ZTsKKwl9CisJZXJyID0gKGRlZmF1bHRfaG9va3MtPnNwbGl0ID09IE5VTEwgfHwK KwkgICAgZGVmYXVsdF9ob29rcy0+c3BsaXQoZGVmYXVsdF9ob29rcywgYWRkciwgc2l6ZSwgc2l6 ZV9hLCBzaXplX2IsCisJICAgIGNvbW1pdHRlZCwgMCkpOworCWRpZF9zcGxpdCA9ICFlcnI7CisJ cmV0dXJuIGVycjsKK30KKworc3RhdGljIGJvb2wKK2V4dGVudF9tZXJnZV9ob29rKGV4dGVudF9o b29rc190ICpleHRlbnRfaG9va3MsIHZvaWQgKmFkZHJfYSwgc2l6ZV90IHNpemVfYSwKKyAgICB2 b2lkICphZGRyX2IsIHNpemVfdCBzaXplX2IsIGJvb2wgY29tbWl0dGVkLCB1bnNpZ25lZCBhcmVu YV9pbmQpIHsKKwlib29sIGVycjsKKworCVRSQUNFX0hPT0soIiVzKGV4dGVudF9ob29rcz0lcCwg YWRkcl9hPSVwLCBzaXplX2E9JXp1LCBhZGRyX2I9JXAgIgorCSAgICAic2l6ZV9iPSV6dSwgY29t bWl0dGVkPSVzLCBhcmVuYV9pbmQ9JXUpXG4iLCBfX2Z1bmNfXywgZXh0ZW50X2hvb2tzLAorCSAg ICBhZGRyX2EsIHNpemVfYSwgYWRkcl9iLCBzaXplX2IsIGNvbW1pdHRlZCA/ICJ0cnVlIiA6ICJm YWxzZSIsCisJICAgIGFyZW5hX2luZCk7CisJZXhwZWN0X3B0cl9lcShleHRlbnRfaG9va3MsICZo b29rcywKKwkgICAgImV4dGVudF9ob29rcyBzaG91bGQgYmUgc2FtZSBhcyBwb2ludGVyIHVzZWQg dG8gc2V0IGhvb2tzIik7CisJZXhwZWN0X3B0cl9lcShleHRlbnRfaG9va3MtPm1lcmdlLCBleHRl bnRfbWVyZ2VfaG9vaywKKwkgICAgIldyb25nIGhvb2sgZnVuY3Rpb24iKTsKKwlleHBlY3RfcHRy X2VxKCh2b2lkICopKCh1aW50cHRyX3QpYWRkcl9hICsgc2l6ZV9hKSwgYWRkcl9iLAorCSAgICAi RXh0ZW50cyBub3QgbWVyZ2VhYmxlIik7CisJY2FsbGVkX21lcmdlID0gdHJ1ZTsKKwlpZiAoIXRy eV9tZXJnZSkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9CisJZXJyID0gKGRlZmF1bHRfaG9va3MtPm1l cmdlID09IE5VTEwgfHwKKwkgICAgZGVmYXVsdF9ob29rcy0+bWVyZ2UoZGVmYXVsdF9ob29rcywg YWRkcl9hLCBzaXplX2EsIGFkZHJfYiwgc2l6ZV9iLAorCSAgICBjb21taXR0ZWQsIDApKTsKKwlk aWRfbWVyZ2UgPSAhZXJyOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkCitleHRlbnRf aG9va3NfcHJlcCh2b2lkKSB7CisJc2l6ZV90IHN6OworCisJc3ogPSBzaXplb2YoZGVmYXVsdF9o b29rcyk7CisJZXhwZWN0X2RfZXEobWFsbGN0bCgiYXJlbmEuMC5leHRlbnRfaG9va3MiLCAodm9p ZCAqKSZkZWZhdWx0X2hvb2tzLCAmc3osCisJICAgIE5VTEwsIDApLCAwLCAiVW5leHBlY3RlZCBt YWxsY3RsKCkgZXJyb3IiKTsKK30KCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWls ZC9qZW1hbGxvYy01LjMuMC90ZXN0L2luY2x1ZGUvdGVzdC9qZW1hbGxvY190ZXN0LmguaW4gYi8z ODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L2luY2x1ZGUvdGVzdC9q ZW1hbGxvY190ZXN0LmguaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Y4 YzBkYQotLS0gL2Rldi9udWxsCisrKyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9j LTUuMy4wL3Rlc3QvaW5jbHVkZS90ZXN0L2plbWFsbG9jX3Rlc3QuaC5pbgpAQCAtMCwwICsxLDE4 MCBAQAorI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisjaW5jbHVk ZSA8bGltaXRzLmg+CisjaWZuZGVmIFNJWkVfVF9NQVgKKyMgIGRlZmluZSBTSVpFX1RfTUFYCVNJ WkVfTUFYCisjZW5kaWYKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4K KyNpbmNsdWRlIDxzdGRib29sLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxtYXRo Lmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaWZkZWYgX1dJTjMyCisjICBpbmNsdWRlICJtc3Zj X2NvbXBhdC9zdHJpbmdzLmgiCisjZW5kaWYKKworI2lmZGVmIF9XSU4zMgorIyAgaW5jbHVkZSA8 d2luZG93cy5oPgorIyAgaW5jbHVkZSAibXN2Y19jb21wYXQvd2luZG93c19leHRyYS5oIgorI2Vs c2UKKyMgIGluY2x1ZGUgPHB0aHJlYWQuaD4KKyNlbmRpZgorCisjaW5jbHVkZSAidGVzdC9qZW1h bGxvY190ZXN0X2RlZnMuaCIKKworI2lmIGRlZmluZWQoSkVNQUxMT0NfT1NBVE9NSUMpCisjICBp bmNsdWRlIDxsaWJrZXJuL09TQXRvbWljLmg+CisjZW5kaWYKKworI2lmIGRlZmluZWQoSEFWRV9B TFRJVkVDKSAmJiAhZGVmaW5lZChfX0FQUExFX18pCisjICBpbmNsdWRlIDxhbHRpdmVjLmg+Cisj ZW5kaWYKKyNpZmRlZiBIQVZFX1NTRTIKKyMgIGluY2x1ZGUgPGVtbWludHJpbi5oPgorI2VuZGlm CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogRm9yIHVuaXQgdGVzdHMgYW5kIGFu YWx5dGljcyB0ZXN0cywgZXhwb3NlIGFsbCBwdWJsaWMgYW5kIHByaXZhdGUgaW50ZXJmYWNlcy4K KyAqLworI2lmIGRlZmluZWQoSkVNQUxMT0NfVU5JVF9URVNUKSB8fCBkZWZpbmVkIChKRU1BTExP Q19BTkFMWVpFX1RFU1QpCisjICBkZWZpbmUgSkVNQUxMT0NfSkVUCisjICBkZWZpbmUgSkVNQUxM T0NfTUFOR0xFCisjICBpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9qZW1hbGxvY19wcmVhbWJs ZS5oIgorIyAgaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvamVtYWxsb2NfaW50ZXJuYWxfaW5j bHVkZXMuaCIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiBGb3IgaW50ZWdyYXRp b24gdGVzdHMsIGV4cG9zZSB0aGUgcHVibGljIGplbWFsbG9jIGludGVyZmFjZXMsIGJ1dCBvbmx5 CisgKiBleHBvc2UgdGhlIG1pbmltdW0gbmVjZXNzYXJ5IGludGVybmFsIHV0aWxpdHkgY29kZSAo dG8gYXZvaWQgcmUtaW1wbGVtZW50aW5nCisgKiBlc3NlbnRpYWxseSBpZGVudGljYWwgY29kZSB3 aXRoaW4gdGhlIHRlc3QgaW5mcmFzdHJ1Y3R1cmUpLgorICovCisjZWxpZiBkZWZpbmVkKEpFTUFM TE9DX0lOVEVHUkFUSU9OX1RFU1QpIHx8IFwKKyAgICBkZWZpbmVkKEpFTUFMTE9DX0lOVEVHUkFU SU9OX0NQUF9URVNUKQorIyAgZGVmaW5lIEpFTUFMTE9DX01BTkdMRQorIyAgaW5jbHVkZSAiamVt YWxsb2MvamVtYWxsb2NAaW5zdGFsbF9zdWZmaXhALmgiCisjICBpbmNsdWRlICJqZW1hbGxvYy9p bnRlcm5hbC9qZW1hbGxvY19pbnRlcm5hbF9kZWZzLmgiCisjICBpbmNsdWRlICJqZW1hbGxvYy9p bnRlcm5hbC9qZW1hbGxvY19pbnRlcm5hbF9tYWNyb3MuaCIKKworc3RhdGljIGNvbnN0IGJvb2wg Y29uZmlnX2RlYnVnID0KKyNpZmRlZiBKRU1BTExPQ19ERUJVRworICAgIHRydWUKKyNlbHNlCisg ICAgZmFsc2UKKyNlbmRpZgorICAgIDsKKworIyAgZGVmaW5lIEpFTUFMTE9DX04obikgQHByaXZh dGVfbmFtZXNwYWNlQCMjbgorIyAgaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvcHJpdmF0ZV9u YW1lc3BhY2UuaCIKKyMgIGluY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL3Rlc3RfaG9va3MuaCIK KworLyogSGVybWV0aWMgaGVhZGVycy4gKi8KKyMgIGluY2x1ZGUgImplbWFsbG9jL2ludGVybmFs L2Fzc2VydC5oIgorIyAgaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvbWFsbG9jX2lvLmgiCisj ICBpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9uc3RpbWUuaCIKKyMgIGluY2x1ZGUgImplbWFs bG9jL2ludGVybmFsL3V0aWwuaCIKKworLyogTm9uLWhlcm1ldGljIGhlYWRlcnMuICovCisjICBp bmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9xci5oIgorIyAgaW5jbHVkZSAiamVtYWxsb2MvaW50 ZXJuYWwvcWwuaCIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiBGb3Igc3RyZXNz IHRlc3RzLCBleHBvc2UgdGhlIHB1YmxpYyBqZW1hbGxvYyBpbnRlcmZhY2VzIHdpdGggbmFtZSBt YW5nbGluZworICogc28gdGhhdCB0aGV5IGNhbiBiZSB0ZXN0ZWQgYXMgZS5nLiBtYWxsb2MoKSBh bmQgZnJlZSgpLiAgQWxzbyBleHBvc2UgdGhlCisgKiBwdWJsaWMgamVtYWxsb2MgaW50ZXJmYWNl cyB3aXRoIGpldF8gcHJlZml4ZXMsIHNvIHRoYXQgc3RyZXNzIHRlc3RzIGNhbiB1c2UKKyAqIGEg c2VwYXJhdGUgYWxsb2NhdG9yIGZvciB0aGVpciBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMuCisg Ki8KKyNlbGlmIGRlZmluZWQoSkVNQUxMT0NfU1RSRVNTX1RFU1QpCisjICBpbmNsdWRlICJqZW1h bGxvYy9qZW1hbGxvY0BpbnN0YWxsX3N1ZmZpeEAuaCIKKworIyAgaW5jbHVkZSAiamVtYWxsb2Mv amVtYWxsb2NfcHJvdG9zX2pldC5oIgorCisjICBkZWZpbmUgSkVNQUxMT0NfSkVUCisjICBpbmNs dWRlICJqZW1hbGxvYy9pbnRlcm5hbC9qZW1hbGxvY19wcmVhbWJsZS5oIgorIyAgaW5jbHVkZSAi amVtYWxsb2MvaW50ZXJuYWwvamVtYWxsb2NfaW50ZXJuYWxfaW5jbHVkZXMuaCIKKyMgIGluY2x1 ZGUgImplbWFsbG9jL2ludGVybmFsL3B1YmxpY191bm5hbWVzcGFjZS5oIgorIyAgdW5kZWYgSkVN QUxMT0NfSkVUCisKKyMgIGluY2x1ZGUgImplbWFsbG9jL2plbWFsbG9jX3JlbmFtZS5oIgorIyAg ZGVmaW5lIEpFTUFMTE9DX01BTkdMRQorIyAgaWZkZWYgSkVNQUxMT0NfU1RSRVNTX1RFU1RMSUIK KyMgICAgaW5jbHVkZSAiamVtYWxsb2MvamVtYWxsb2NfbWFuZ2xlX2pldC5oIgorIyAgZWxzZQor IyAgICBpbmNsdWRlICJqZW1hbGxvYy9qZW1hbGxvY19tYW5nbGUuaCIKKyMgIGVuZGlmCisKKy8q KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKiovCisvKgorICogVGhpcyBoZWFkZXIgZG9lcyBkYW5nZXJvdXMg dGhpbmdzLCB0aGUgZWZmZWN0cyBvZiB3aGljaCBvbmx5IHRlc3QgY29kZQorICogc2hvdWxkIGJl IHN1YmplY3QgdG8uCisgKi8KKyNlbHNlCisjICBlcnJvciAiVGhpcyBoZWFkZXIgY2Fubm90IGJl IGluY2x1ZGVkIG91dHNpZGUgYSB0ZXN0aW5nIGNvbnRleHQiCisjZW5kaWYKKworLyoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKi8KKy8qCisgKiBDb21tb24gdGVzdCB1dGlsaXRpZXMuCisgKi8KKyNpbmNs dWRlICJ0ZXN0L2J0YWxsb2MuaCIKKyNpbmNsdWRlICJ0ZXN0L21hdGguaCIKKyNpbmNsdWRlICJ0 ZXN0L210eC5oIgorI2luY2x1ZGUgInRlc3QvbXEuaCIKKyNpbmNsdWRlICJ0ZXN0L3NsZWVwLmgi CisjaW5jbHVkZSAidGVzdC90ZXN0LmgiCisjaW5jbHVkZSAidGVzdC90aW1lci5oIgorI2luY2x1 ZGUgInRlc3QvdGhkLmgiCisjaW5jbHVkZSAidGVzdC9iZ3RoZC5oIgorI2RlZmluZSBNRVhQIDE5 OTM3CisjaW5jbHVkZSAidGVzdC9TRk1ULmgiCisKKyNpZm5kZWYgSkVNQUxMT0NfSEFWRV9NQUxM T0NfU0laRQorI2RlZmluZSBURVNUX01BTExPQ19TSVpFIG1hbGxvY191c2FibGVfc2l6ZQorI2Vs c2UKKyNkZWZpbmUgVEVTVF9NQUxMT0NfU0laRSBtYWxsb2Nfc2l6ZQorI2VuZGlmCisvKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqLworLyoKKyAqIERlZmluZSBhbHdheXMtZW5hYmxlZCBhc3NlcnRpb24g bWFjcm9zLCBzbyB0aGF0IHRlc3QgYXNzZXJ0aW9ucyBleGVjdXRlIGV2ZW4KKyAqIGlmIGFzc2Vy dGlvbnMgYXJlIGRpc2FibGVkIGluIHRoZSBsaWJyYXJ5IGNvZGUuCisgKi8KKyN1bmRlZiBhc3Nl cnQKKyN1bmRlZiBub3RfcmVhY2hlZAorI3VuZGVmIG5vdF9pbXBsZW1lbnRlZAorI3VuZGVmIGV4 cGVjdF9ub3RfaW1wbGVtZW50ZWQKKworI2RlZmluZSBhc3NlcnQoZSkgZG8gewkJCQkJCQlcCisJ aWYgKCEoZSkpIHsJCQkJCQkJXAorCQltYWxsb2NfcHJpbnRmKAkJCQkJCVwKKwkJICAgICI8amVt YWxsb2M+OiAlczolZDogRmFpbGVkIGFzc2VydGlvbjogXCIlc1wiXG4iLAlcCisJCSAgICBfX0ZJ TEVfXywgX19MSU5FX18sICNlKTsJCQkJXAorCQlhYm9ydCgpOwkJCQkJCVwKKwl9CQkJCQkJCQlc Cit9IHdoaWxlICgwKQorCisjZGVmaW5lIG5vdF9yZWFjaGVkKCkgZG8gewkJCQkJCVwKKwltYWxs b2NfcHJpbnRmKAkJCQkJCQlcCisJICAgICI8amVtYWxsb2M+OiAlczolZDogVW5yZWFjaGFibGUg Y29kZSByZWFjaGVkXG4iLAkJXAorCSAgICBfX0ZJTEVfXywgX19MSU5FX18pOwkJCQkJXAorCWFi b3J0KCk7CQkJCQkJCVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgbm90X2ltcGxlbWVudGVkKCkg ZG8gewkJCQkJCVwKKwltYWxsb2NfcHJpbnRmKCI8amVtYWxsb2M+OiAlczolZDogTm90IGltcGxl bWVudGVkXG4iLAkJXAorCSAgICBfX0ZJTEVfXywgX19MSU5FX18pOwkJCQkJXAorCWFib3J0KCk7 CQkJCQkJCVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgZXhwZWN0X25vdF9pbXBsZW1lbnRlZChl KSBkbyB7CQkJCQlcCisJaWYgKCEoZSkpIHsJCQkJCQkJXAorCQlub3RfaW1wbGVtZW50ZWQoKTsJ CQkJCVwKKwl9CQkJCQkJCQlcCit9IHdoaWxlICgwKQorCisjaWZkZWYgX19jcGx1c3BsdXMKK30K KyNlbmRpZgoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUu My4wL3Rlc3QvaW5jbHVkZS90ZXN0L2plbWFsbG9jX3Rlc3RfZGVmcy5oLmluIGIvMzg5LWRzLWJh c2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC9pbmNsdWRlL3Rlc3QvamVtYWxsb2Nf dGVzdF9kZWZzLmguaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWNjODUz MgotLS0gL2Rldi9udWxsCisrKyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUu My4wL3Rlc3QvaW5jbHVkZS90ZXN0L2plbWFsbG9jX3Rlc3RfZGVmcy5oLmluCkBAIC0wLDAgKzEs OSBAQAorI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2plbWFsbG9jX2ludGVybmFsX2RlZnMu aCIKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9qZW1hbGxvY19pbnRlcm5hbF9kZWNscy5o IgorCisvKgorICogRm9yIHVzZSBieSBTRk1ULiAgY29uZmlndXJlLmFjIGRvZXNuJ3QgYWN0dWFs bHkgZGVmaW5lIEhBVkVfU1NFMiBiZWNhdXNlIGl0cworICogZGVwZW5kZW5jaWVzIGFyZSBub3Rv cmlvdXNseSB1bnBvcnRhYmxlIGluIHByYWN0aWNlLgorICovCisjdW5kZWYgSEFWRV9TU0UyCisj dW5kZWYgSEFWRV9BTFRJVkVDCgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQv amVtYWxsb2MtNS4zLjAvdGVzdC9pbmNsdWRlL3Rlc3QvbWF0aC5oIGIvMzg5LWRzLWJhc2UtMy4z LjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC9pbmNsdWRlL3Rlc3QvbWF0aC5oCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmYmEwODYKLS0tIC9kZXYvbnVsbAorKysgYi8z ODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L2luY2x1ZGUvdGVzdC9t YXRoLmgKQEAgLTAsMCArMSwzMDYgQEAKKy8qCisgKiBDb21wdXRlIHRoZSBuYXR1cmFsIGxvZyBv ZiBHYW1tYSh4KSwgYWNjdXJhdGUgdG8gMTAgZGVjaW1hbCBwbGFjZXMuCisgKgorICogVGhpcyBp bXBsZW1lbnRhdGlvbiBpcyBiYXNlZCBvbjoKKyAqCisgKiAgIFBpa2UsIE0uQy4sIEkuRC4gSGls bCAoMTk2NikgQWxnb3JpdGhtIDI5MTogTG9nYXJpdGhtIG9mIEdhbW1hIGZ1bmN0aW9uCisgKiAg IFtTMTRdLiAgQ29tbXVuaWNhdGlvbnMgb2YgdGhlIEFDTSA5KDkpOjY4NC4KKyAqLworc3RhdGlj IGlubGluZSBkb3VibGUKK2xuX2dhbW1hKGRvdWJsZSB4KSB7CisJZG91YmxlIGYsIHo7CisKKwlh c3NlcnQoeCA+IDAuMCk7CisKKwlpZiAoeCA8IDcuMCkgeworCQlmID0gMS4wOworCQl6ID0geDsK KwkJd2hpbGUgKHogPCA3LjApIHsKKwkJCWYgKj0gejsKKwkJCXogKz0gMS4wOworCQl9CisJCXgg PSB6OworCQlmID0gLWxvZyhmKTsKKwl9IGVsc2UgeworCQlmID0gMC4wOworCX0KKworCXogPSAx LjAgLyAoeCAqIHgpOworCisJcmV0dXJuIGYgKyAoeC0wLjUpICogbG9nKHgpIC0geCArIDAuOTE4 OTM4NTMzMjA0NjczICsKKwkgICAgKCgoLTAuMDAwNTk1MjM4MDk1MjM4ICogeiArIDAuMDAwNzkz NjUwNzkzNjUxKSAqIHogLQorCSAgICAwLjAwMjc3Nzc3Nzc3Nzc3OCkgKiB6ICsgMC4wODMzMzMz MzMzMzMzMzMpIC8geDsKK30KKworLyoKKyAqIENvbXB1dGUgdGhlIGluY29tcGxldGUgR2FtbWEg cmF0aW8gZm9yIFswLi54XSwgd2hlcmUgcCBpcyB0aGUgc2hhcGUKKyAqIHBhcmFtZXRlciwgYW5k IGxuX2dhbW1hX3AgaXMgbG5fZ2FtbWEocCkuCisgKgorICogVGhpcyBpbXBsZW1lbnRhdGlvbiBp cyBiYXNlZCBvbjoKKyAqCisgKiAgIEJoYXR0YWNoYXJqZWUsIEcuUC4gKDE5NzApIEFsZ29yaXRo bSBBUyAzMjogVGhlIGluY29tcGxldGUgR2FtbWEgaW50ZWdyYWwuCisgKiAgIEFwcGxpZWQgU3Rh dGlzdGljcyAxOToyODUtMjg3LgorICovCitzdGF0aWMgaW5saW5lIGRvdWJsZQoraV9nYW1tYShk b3VibGUgeCwgZG91YmxlIHAsIGRvdWJsZSBsbl9nYW1tYV9wKSB7CisJZG91YmxlIGFjdSwgZmFj dG9yLCBvZmxvLCBnaW4sIHRlcm0sIHJuLCBhLCBiLCBhbiwgZGlmOworCWRvdWJsZSBwbls2XTsK Kwl1bnNpZ25lZCBpOworCisJYXNzZXJ0KHAgPiAwLjApOworCWFzc2VydCh4ID49IDAuMCk7CisK KwlpZiAoeCA9PSAwLjApIHsKKwkJcmV0dXJuIDAuMDsKKwl9CisKKwlhY3UgPSAxLjBlLTEwOwor CW9mbG8gPSAxLjBlMzA7CisJZ2luID0gMC4wOworCWZhY3RvciA9IGV4cChwICogbG9nKHgpIC0g eCAtIGxuX2dhbW1hX3ApOworCisJaWYgKHggPD0gMS4wIHx8IHggPCBwKSB7CisJCS8qIENhbGN1 bGF0aW9uIGJ5IHNlcmllcyBleHBhbnNpb24uICovCisJCWdpbiA9IDEuMDsKKwkJdGVybSA9IDEu MDsKKwkJcm4gPSBwOworCisJCXdoaWxlICh0cnVlKSB7CisJCQlybiArPSAxLjA7CisJCQl0ZXJt ICo9IHggLyBybjsKKwkJCWdpbiArPSB0ZXJtOworCQkJaWYgKHRlcm0gPD0gYWN1KSB7CisJCQkJ Z2luICo9IGZhY3RvciAvIHA7CisJCQkJcmV0dXJuIGdpbjsKKwkJCX0KKwkJfQorCX0gZWxzZSB7 CisJCS8qIENhbGN1bGF0aW9uIGJ5IGNvbnRpbnVlZCBmcmFjdGlvbi4gKi8KKwkJYSA9IDEuMCAt IHA7CisJCWIgPSBhICsgeCArIDEuMDsKKwkJdGVybSA9IDAuMDsKKwkJcG5bMF0gPSAxLjA7CisJ CXBuWzFdID0geDsKKwkJcG5bMl0gPSB4ICsgMS4wOworCQlwblszXSA9IHggKiBiOworCQlnaW4g PSBwblsyXSAvIHBuWzNdOworCisJCXdoaWxlICh0cnVlKSB7CisJCQlhICs9IDEuMDsKKwkJCWIg Kz0gMi4wOworCQkJdGVybSArPSAxLjA7CisJCQlhbiA9IGEgKiB0ZXJtOworCQkJZm9yIChpID0g MDsgaSA8IDI7IGkrKykgeworCQkJCXBuW2krNF0gPSBiICogcG5baSsyXSAtIGFuICogcG5baV07 CisJCQl9CisJCQlpZiAocG5bNV0gIT0gMC4wKSB7CisJCQkJcm4gPSBwbls0XSAvIHBuWzVdOwor CQkJCWRpZiA9IGZhYnMoZ2luIC0gcm4pOworCQkJCWlmIChkaWYgPD0gYWN1ICYmIGRpZiA8PSBh Y3UgKiBybikgeworCQkJCQlnaW4gPSAxLjAgLSBmYWN0b3IgKiBnaW47CisJCQkJCXJldHVybiBn aW47CisJCQkJfQorCQkJCWdpbiA9IHJuOworCQkJfQorCQkJZm9yIChpID0gMDsgaSA8IDQ7IGkr KykgeworCQkJCXBuW2ldID0gcG5baSsyXTsKKwkJCX0KKworCQkJaWYgKGZhYnMocG5bNF0pID49 IG9mbG8pIHsKKwkJCQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisJCQkJCXBuW2ldIC89IG9m bG87CisJCQkJfQorCQkJfQorCQl9CisJfQorfQorCisvKgorICogR2l2ZW4gYSB2YWx1ZSBwIGlu IFswLi4xXSBvZiB0aGUgbG93ZXIgdGFpbCBhcmVhIG9mIHRoZSBub3JtYWwgZGlzdHJpYnV0aW9u LAorICogY29tcHV0ZSB0aGUgbGltaXQgb24gdGhlIGRlZmluaXRlIGludGVncmFsIGZyb20gWy1p bmYuLnpdIHRoYXQgc2F0aXNmaWVzIHAsCisgKiBhY2N1cmF0ZSB0byAxNiBkZWNpbWFsIHBsYWNl cy4KKyAqCisgKiBUaGlzIGltcGxlbWVudGF0aW9uIGlzIGJhc2VkIG9uOgorICoKKyAqICAgV2lj aHVyYSwgTS5KLiAoMTk4OCkgQWxnb3JpdGhtIEFTIDI0MTogVGhlIHBlcmNlbnRhZ2UgcG9pbnRz IG9mIHRoZSBub3JtYWwKKyAqICAgZGlzdHJpYnV0aW9uLiAgQXBwbGllZCBTdGF0aXN0aWNzIDM3 KDMpOjQ3Ny00ODQuCisgKi8KK3N0YXRpYyBpbmxpbmUgZG91YmxlCitwdF9ub3JtKGRvdWJsZSBw KSB7CisJZG91YmxlIHEsIHIsIHJldDsKKworCWFzc2VydChwID4gMC4wICYmIHAgPCAxLjApOwor CisJcSA9IHAgLSAwLjU7CisJaWYgKGZhYnMocSkgPD0gMC40MjUpIHsKKwkJLyogcCBjbG9zZSB0 byAxLzIuICovCisJCXIgPSAwLjE4MDYyNSAtIHEgKiBxOworCQlyZXR1cm4gcSAqICgoKCgoKCgy LjUwOTA4MDkyODczMDEyMjY3MjdlMyAqIHIgKworCQkgICAgMy4zNDMwNTc1NTgzNTg4MTI4MTA1 ZTQpICogciArIDYuNzI2NTc3MDkyNzAwODcwMDg1M2U0KSAqIHIKKwkJICAgICsgNC41OTIxOTUz OTMxNTQ5ODcxNDU3ZTQpICogciArIDEuMzczMTY5Mzc2NTUwOTQ2MTEyNWU0KSAqCisJCSAgICBy ICsgMS45NzE1OTA5NTAzMDY1NTE0NDI3ZTMpICogciArIDEuMzMxNDE2Njc4OTE3ODQzNzc0NWUy KQorCQkgICAgKiByICsgMy4zODcxMzI4NzI3OTYzNjY2MDgwZTApIC8KKwkJICAgICgoKCgoKCg1 LjIyNjQ5NTI3ODg1Mjg1NDU2MTBlMyAqIHIgKworCQkgICAgMi44NzI5MDg1NzM1NzIxOTQyNjc0 ZTQpICogciArIDMuOTMwNzg5NTgwMDA5MjcxMDYxMGU0KSAqIHIKKwkJICAgICsgMi4xMjEzNzk0 MzAxNTg2NTk1ODY3ZTQpICogciArIDUuMzk0MTk2MDIxNDI0NzUxMTA3N2UzKSAqCisJCSAgICBy ICsgNi44NzE4NzAwNzQ5MjA1NzkwODMwZTIpICogciArIDQuMjMxMzMzMDcwMTYwMDkxMTI1MmUx KQorCQkgICAgKiByICsgMS4wKTsKKwl9IGVsc2UgeworCQlpZiAocSA8IDAuMCkgeworCQkJciA9 IHA7CisJCX0gZWxzZSB7CisJCQlyID0gMS4wIC0gcDsKKwkJfQorCQlhc3NlcnQociA+IDAuMCk7 CisKKwkJciA9IHNxcnQoLWxvZyhyKSk7CisJCWlmIChyIDw9IDUuMCkgeworCQkJLyogcCBuZWl0 aGVyIGNsb3NlIHRvIDEvMiBub3IgMCBvciAxLiAqLworCQkJciAtPSAxLjY7CisJCQlyZXQgPSAo KCgoKCgoKDcuNzQ1NDUwMTQyNzgzNDE0MDc2NDBlLTQgKiByICsKKwkJCSAgICAyLjI3MjM4NDQ5 ODkyNjkxODQ1ODMzZS0yKSAqIHIgKworCQkJICAgIDIuNDE3ODA3MjUxNzc0NTA2MTE3NzBlLTEp ICogciArCisJCQkgICAgMS4yNzA0NTgyNTI0NTIzNjgzODI1OGUwKSAqIHIgKworCQkJICAgIDMu NjQ3ODQ4MzI0NzYzMjA0NjA1MDRlMCkgKiByICsKKwkJCSAgICA1Ljc2OTQ5NzIyMTQ2MDY5MTQw NTUwZTApICogciArCisJCQkgICAgNC42MzAzMzc4NDYxNTY1NDUyOTU5MGUwKSAqIHIgKworCQkJ ICAgIDEuNDIzNDM3MTEwNzQ5NjgzNTc3MzRlMCkgLworCQkJICAgICgoKCgoKCgxLjA1MDc1MDA3 MTY0NDQxNjg0MzI0ZS05ICogciArCisJCQkgICAgNS40NzU5MzgwODQ5OTUzNDQ5NDYwMGUtNCkg KiByICsKKwkJCSAgICAxLjUxOTg2NjY1NjM2MTY0NTcxOTY2ZS0yKQorCQkJICAgICogciArIDEu NDgxMDM5NzY0Mjc0ODAwNzQ1OTBlLTEpICogciArCisJCQkgICAgNi44OTc2NzMzNDk4NTEwMDAw NDU1MGUtMSkgKiByICsKKwkJCSAgICAxLjY3NjM4NDgzMDE4MzgwMzg0OTQwZTApICogciArCisJ CQkgICAgMi4wNTMxOTE2MjY2Mzc3NTg4MjE4N2UwKSAqIHIgKyAxLjApKTsKKwkJfSBlbHNlIHsK KwkJCS8qIHAgbmVhciAwIG9yIDEuICovCisJCQlyIC09IDUuMDsKKwkJCXJldCA9ICgoKCgoKCgo Mi4wMTAzMzQzOTkyOTIyODgxMzI2NWUtNyAqIHIgKworCQkJICAgIDIuNzExNTU1NTY4NzQzNDg3 NTc4MTVlLTUpICogciArCisJCQkgICAgMS4yNDI2NjA5NDczODgwNzg0Mzg2MGUtMykgKiByICsK KwkJCSAgICAyLjY1MzIxODk1MjY1NzYxMjMwOTMwZS0yKSAqIHIgKworCQkJICAgIDIuOTY1NjA1 NzE4Mjg1MDQ4OTEyMzBlLTEpICogciArCisJCQkgICAgMS43ODQ4MjY1Mzk5MTcyOTEzMzU4MGUw KSAqIHIgKworCQkJICAgIDUuNDYzNzg0OTExMTY0MTE0MzY5OTBlMCkgKiByICsKKwkJCSAgICA2 LjY1NzkwNDY0MzUwMTEwMzc3NzIwZTApIC8KKwkJCSAgICAoKCgoKCgoMi4wNDQyNjMxMDMzODk5 Mzk3ODU2NGUtMTUgKiByICsKKwkJCSAgICAxLjQyMTUxMTc1ODMxNjQ0NTg4ODcwZS03KSAqIHIg KworCQkJICAgIDEuODQ2MzE4MzE3NTEwMDU0NjgxODBlLTUpICogciArCisJCQkgICAgNy44Njg2 OTEzMTE0NTYxMzI1OTEwMGUtNCkgKiByICsKKwkJCSAgICAxLjQ4NzUzNjEyOTA4NTA2MTQ4NTI1 ZS0yKSAqIHIgKworCQkJICAgIDEuMzY5Mjk4ODA5MjI3MzU4MDUzMTBlLTEpICogciArCisJCQkg ICAgNS45OTgzMjIwNjU1NTg4NzkzNzY5MGUtMSkKKwkJCSAgICAqIHIgKyAxLjApKTsKKwkJfQor CQlpZiAocSA8IDAuMCkgeworCQkJcmV0ID0gLXJldDsKKwkJfQorCQlyZXR1cm4gcmV0OworCX0K K30KKworLyoKKyAqIEdpdmVuIGEgdmFsdWUgcCBpbiBbMC4uMV0gb2YgdGhlIGxvd2VyIHRhaWwg YXJlYSBvZiB0aGUgQ2hpXjIgZGlzdHJpYnV0aW9uCisgKiB3aXRoIGRmIGRlZ3JlZXMgb2YgZnJl ZWRvbSwgd2hlcmUgbG5fZ2FtbWFfZGZfMiBpcyBsbl9nYW1tYShkZi8yLjApLCBjb21wdXRlCisg KiB0aGUgdXBwZXIgbGltaXQgb24gdGhlIGRlZmluaXRlIGludGVncmFsIGZyb20gWzAuLnpdIHRo YXQgc2F0aXNmaWVzIHAsCisgKiBhY2N1cmF0ZSB0byAxMiBkZWNpbWFsIHBsYWNlcy4KKyAqCisg KiBUaGlzIGltcGxlbWVudGF0aW9uIGlzIGJhc2VkIG9uOgorICoKKyAqICAgQmVzdCwgRC5KLiwg RC5FLiBSb2JlcnRzICgxOTc1KSBBbGdvcml0aG0gQVMgOTE6IFRoZSBwZXJjZW50YWdlIHBvaW50 cyBvZgorICogICB0aGUgQ2hpXjIgZGlzdHJpYnV0aW9uLiAgQXBwbGllZCBTdGF0aXN0aWNzIDI0 KDMpOjM4NS0zODguCisgKgorICogICBTaGVhLCBCLkwuICgxOTkxKSBBbGdvcml0aG0gQVMgUjg1 OiBBIHJlbWFyayBvbiBBUyA5MTogVGhlIHBlcmNlbnRhZ2UKKyAqICAgcG9pbnRzIG9mIHRoZSBD aGleMiBkaXN0cmlidXRpb24uICBBcHBsaWVkIFN0YXRpc3RpY3MgNDAoMSk6MjMzLTIzNS4KKyAq Lworc3RhdGljIGlubGluZSBkb3VibGUKK3B0X2NoaTIoZG91YmxlIHAsIGRvdWJsZSBkZiwgZG91 YmxlIGxuX2dhbW1hX2RmXzIpIHsKKwlkb3VibGUgZSwgYWEsIHh4LCBjLCBjaCwgYSwgcSwgcDEs IHAyLCB0LCB4LCBiLCBzMSwgczIsIHMzLCBzNCwgczUsIHM2OworCXVuc2lnbmVkIGk7CisKKwlh c3NlcnQocCA+PSAwLjAgJiYgcCA8IDEuMCk7CisJYXNzZXJ0KGRmID4gMC4wKTsKKworCWUgPSA1 LjBlLTc7CisJYWEgPSAwLjY5MzE0NzE4MDU7CisKKwl4eCA9IDAuNSAqIGRmOworCWMgPSB4eCAt IDEuMDsKKworCWlmIChkZiA8IC0xLjI0ICogbG9nKHApKSB7CisJCS8qIFN0YXJ0aW5nIGFwcHJv eGltYXRpb24gZm9yIHNtYWxsIENoaV4yLiAqLworCQljaCA9IHBvdyhwICogeHggKiBleHAobG5f Z2FtbWFfZGZfMiArIHh4ICogYWEpLCAxLjAgLyB4eCk7CisJCWlmIChjaCAtIGUgPCAwLjApIHsK KwkJCXJldHVybiBjaDsKKwkJfQorCX0gZWxzZSB7CisJCWlmIChkZiA+IDAuMzIpIHsKKwkJCXgg PSBwdF9ub3JtKHApOworCQkJLyoKKwkJCSAqIFN0YXJ0aW5nIGFwcHJveGltYXRpb24gdXNpbmcg V2lsc29uIGFuZCBIaWxmZXJ0eQorCQkJICogZXN0aW1hdGUuCisJCQkgKi8KKwkJCXAxID0gMC4y MjIyMjIgLyBkZjsKKwkJCWNoID0gZGYgKiBwb3coeCAqIHNxcnQocDEpICsgMS4wIC0gcDEsIDMu MCk7CisJCQkvKiBTdGFydGluZyBhcHByb3hpbWF0aW9uIGZvciBwIHRlbmRpbmcgdG8gMS4gKi8K KwkJCWlmIChjaCA+IDIuMiAqIGRmICsgNi4wKSB7CisJCQkJY2ggPSAtMi4wICogKGxvZygxLjAg LSBwKSAtIGMgKiBsb2coMC41ICogY2gpICsKKwkJCQkgICAgbG5fZ2FtbWFfZGZfMik7CisJCQl9 CisJCX0gZWxzZSB7CisJCQljaCA9IDAuNDsKKwkJCWEgPSBsb2coMS4wIC0gcCk7CisJCQl3aGls ZSAodHJ1ZSkgeworCQkJCXEgPSBjaDsKKwkJCQlwMSA9IDEuMCArIGNoICogKDQuNjcgKyBjaCk7 CisJCQkJcDIgPSBjaCAqICg2LjczICsgY2ggKiAoNi42NiArIGNoKSk7CisJCQkJdCA9IC0wLjUg KyAoNC42NyArIDIuMCAqIGNoKSAvIHAxIC0gKDYuNzMgKyBjaAorCQkJCSAgICAqICgxMy4zMiAr IDMuMCAqIGNoKSkgLyBwMjsKKwkJCQljaCAtPSAoMS4wIC0gZXhwKGEgKyBsbl9nYW1tYV9kZl8y ICsgMC41ICogY2ggKworCQkJCSAgICBjICogYWEpICogcDIgLyBwMSkgLyB0OworCQkJCWlmIChm YWJzKHEgLyBjaCAtIDEuMCkgLSAwLjAxIDw9IDAuMCkgeworCQkJCQlicmVhazsKKwkJCQl9CisJ CQl9CisJCX0KKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgMjA7IGkrKykgeworCQkvKiBDYWxjdWxh dGlvbiBvZiBzZXZlbi10ZXJtIFRheWxvciBzZXJpZXMuICovCisJCXEgPSBjaDsKKwkJcDEgPSAw LjUgKiBjaDsKKwkJaWYgKHAxIDwgMC4wKSB7CisJCQlyZXR1cm4gLTEuMDsKKwkJfQorCQlwMiA9 IHAgLSBpX2dhbW1hKHAxLCB4eCwgbG5fZ2FtbWFfZGZfMik7CisJCXQgPSBwMiAqIGV4cCh4eCAq IGFhICsgbG5fZ2FtbWFfZGZfMiArIHAxIC0gYyAqIGxvZyhjaCkpOworCQliID0gdCAvIGNoOwor CQlhID0gMC41ICogdCAtIGIgKiBjOworCQlzMSA9ICgyMTAuMCArIGEgKiAoMTQwLjAgKyBhICog KDEwNS4wICsgYSAqICg4NC4wICsgYSAqICg3MC4wICsKKwkJICAgIDYwLjAgKiBhKSkpKSkgLyA0 MjAuMDsKKwkJczIgPSAoNDIwLjAgKyBhICogKDczNS4wICsgYSAqICg5NjYuMCArIGEgKiAoMTE0 MS4wICsgMTI3OC4wICoKKwkJICAgIGEpKSkpIC8gMjUyMC4wOworCQlzMyA9ICgyMTAuMCArIGEg KiAoNDYyLjAgKyBhICogKDcwNy4wICsgOTMyLjAgKiBhKSkpIC8gMjUyMC4wOworCQlzNCA9ICgy NTIuMCArIGEgKiAoNjcyLjAgKyAxMTgyLjAgKiBhKSArIGMgKiAoMjk0LjAgKyBhICoKKwkJICAg ICg4ODkuMCArIDE3NDAuMCAqIGEpKSkgLyA1MDQwLjA7CisJCXM1ID0gKDg0LjAgKyAyNjQuMCAq IGEgKyBjICogKDE3NS4wICsgNjA2LjAgKiBhKSkgLyAyNTIwLjA7CisJCXM2ID0gKDEyMC4wICsg YyAqICgzNDYuMCArIDEyNy4wICogYykpIC8gNTA0MC4wOworCQljaCArPSB0ICogKDEuMCArIDAu NSAqIHQgKiBzMSAtIGIgKiBjICogKHMxIC0gYiAqIChzMiAtIGIgKiAoczMKKwkJICAgIC0gYiAq IChzNCAtIGIgKiAoczUgLSBiICogczYpKSkpKSk7CisJCWlmIChmYWJzKHEgLyBjaCAtIDEuMCkg PD0gZSkgeworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlyZXR1cm4gY2g7Cit9CisKKy8qCisgKiBH aXZlbiBhIHZhbHVlIHAgaW4gWzAuLjFdIGFuZCBHYW1tYSBkaXN0cmlidXRpb24gc2hhcGUgYW5k IHNjYWxlIHBhcmFtZXRlcnMsCisgKiBjb21wdXRlIHRoZSB1cHBlciBsaW1pdCBvbiB0aGUgZGVm aW5pdGUgaW50ZWdyYWwgZnJvbSBbMC4uel0gdGhhdCBzYXRpc2ZpZXMKKyAqIHAuCisgKi8KK3N0 YXRpYyBpbmxpbmUgZG91YmxlCitwdF9nYW1tYShkb3VibGUgcCwgZG91YmxlIHNoYXBlLCBkb3Vi bGUgc2NhbGUsIGRvdWJsZSBsbl9nYW1tYV9zaGFwZSkgeworCXJldHVybiBwdF9jaGkyKHAsIHNo YXBlICogMi4wLCBsbl9nYW1tYV9zaGFwZSkgKiAwLjUgKiBzY2FsZTsKK30KCmRpZmYgLS1naXQg YS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L2luY2x1ZGUvdGVz dC9tcS5oIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC9pbmNs dWRlL3Rlc3QvbXEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZGM2NDg2 Ci0tLSAvZGV2L251bGwKKysrIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4z LjAvdGVzdC9pbmNsdWRlL3Rlc3QvbXEuaApAQCAtMCwwICsxLDEwNyBAQAorI2luY2x1ZGUgInRl c3Qvc2xlZXAuaCIKKworLyoKKyAqIFNpbXBsZSB0ZW1wbGF0ZWQgbWVzc2FnZSBxdWV1ZSBpbXBs ZW1lbnRhdGlvbiB0aGF0IHJlbGllcyBvbiBvbmx5IG11dGV4ZXMgZm9yCisgKiBzeW5jaHJvbml6 YXRpb24gKHdoaWNoIHJlZHVjZXMgcG9ydGFiaWxpdHkgaXNzdWVzKS4gIEdpdmVuIHRoZSBmb2xs b3dpbmcKKyAqIHNldHVwOgorICoKKyAqICAgdHlwZWRlZiBzdHJ1Y3QgbXFfbXNnX3MgbXFfbXNn X3Q7CisgKiAgIHN0cnVjdCBtcV9tc2dfcyB7CisgKiAgICAgICAgICAgbXFfbXNnKG1xX21zZ190 KSBsaW5rOworICogICAgICAgICAgIFttZXNzYWdlIGRhdGFdCisgKiAgIH07CisgKiAgIG1xX2dl bigsIG1xXywgbXFfdCwgbXFfbXNnX3QsIGxpbmspCisgKgorICogVGhlIEFQSSBpcyBhcyBmb2xs b3dzOgorICoKKyAqICAgYm9vbCBtcV9pbml0KG1xX3QgKm1xKTsKKyAqICAgdm9pZCBtcV9maW5p KG1xX3QgKm1xKTsKKyAqICAgdW5zaWduZWQgbXFfY291bnQobXFfdCAqbXEpOworICogICBtcV9t c2dfdCAqbXFfdHJ5Z2V0KG1xX3QgKm1xKTsKKyAqICAgbXFfbXNnX3QgKm1xX2dldChtcV90ICpt cSk7CisgKiAgIHZvaWQgbXFfcHV0KG1xX3QgKm1xLCBtcV9tc2dfdCAqbXNnKTsKKyAqCisgKiBU aGUgbWVzc2FnZSBxdWV1ZSBsaW5rYWdlIGVtYmVkZGVkIGluIGVhY2ggbWVzc2FnZSBpcyB0byBi ZSB0cmVhdGVkIGFzCisgKiBleHRlcm5hbGx5IG9wYXF1ZSAobm8gbmVlZCB0byBpbml0aWFsaXpl IG9yIGNsZWFuIHVwIGV4dGVybmFsbHkpLiAgbXFfZmluaSgpCisgKiBkb2VzIG5vdCBwZXJmb3Jt IGFueSBjbGVhbnVwIG9mIG1lc3NhZ2VzLCBzaW5jZSBpdCBrbm93cyBub3RoaW5nIG9mIHRoZWly CisgKiBwYXlsb2Fkcy4KKyAqLworI2RlZmluZSBtcV9tc2coYV9tcV9tc2dfdHlwZSkJcWxfZWxt KGFfbXFfbXNnX3R5cGUpCisKKyNkZWZpbmUgbXFfZ2VuKGFfYXR0ciwgYV9wcmVmaXgsIGFfbXFf dHlwZSwgYV9tcV9tc2dfdHlwZSwgYV9maWVsZCkJXAordHlwZWRlZiBzdHJ1Y3QgewkJCQkJCQlc CisJbXR4X3QJCQlsb2NrOwkJCQkJXAorCXFsX2hlYWQoYV9tcV9tc2dfdHlwZSkJbXNnczsJCQkJ CVwKKwl1bnNpZ25lZAkJY291bnQ7CQkJCQlcCit9IGFfbXFfdHlwZTsJCQkJCQkJCVwKK2FfYXR0 ciBib29sCQkJCQkJCQlcCithX3ByZWZpeCMjaW5pdChhX21xX3R5cGUgKm1xKSB7CQkJCQkJXAor CQkJCQkJCQkJXAorCWlmIChtdHhfaW5pdCgmbXEtPmxvY2spKSB7CQkJCQlcCisJCXJldHVybiB0 cnVlOwkJCQkJCVwKKwl9CQkJCQkJCQlcCisJcWxfbmV3KCZtcS0+bXNncyk7CQkJCQkJXAorCW1x LT5jb3VudCA9IDA7CQkJCQkJCVwKKwlyZXR1cm4gZmFsc2U7CQkJCQkJCVwKK30JCQkJCQkJCQlc CithX2F0dHIgdm9pZAkJCQkJCQkJXAorYV9wcmVmaXgjI2ZpbmkoYV9tcV90eXBlICptcSkgewkJ CQkJCVwKKwltdHhfZmluaSgmbXEtPmxvY2spOwkJCQkJCVwKK30JCQkJCQkJCQlcCithX2F0dHIg dW5zaWduZWQJCQkJCQkJCVwKK2FfcHJlZml4IyNjb3VudChhX21xX3R5cGUgKm1xKSB7CQkJCQlc CisJdW5zaWduZWQgY291bnQ7CQkJCQkJCVwKKwkJCQkJCQkJCVwKKwltdHhfbG9jaygmbXEtPmxv Y2spOwkJCQkJCVwKKwljb3VudCA9IG1xLT5jb3VudDsJCQkJCQlcCisJbXR4X3VubG9jaygmbXEt PmxvY2spOwkJCQkJCVwKKwlyZXR1cm4gY291bnQ7CQkJCQkJCVwKK30JCQkJCQkJCQlcCithX2F0 dHIgYV9tcV9tc2dfdHlwZSAqCQkJCQkJCVwKK2FfcHJlZml4IyN0cnlnZXQoYV9tcV90eXBlICpt cSkgewkJCQkJXAorCWFfbXFfbXNnX3R5cGUgKm1zZzsJCQkJCQlcCisJCQkJCQkJCQlcCisJbXR4 X2xvY2soJm1xLT5sb2NrKTsJCQkJCQlcCisJbXNnID0gcWxfZmlyc3QoJm1xLT5tc2dzKTsJCQkJ CVwKKwlpZiAobXNnICE9IE5VTEwpIHsJCQkJCQlcCisJCXFsX2hlYWRfcmVtb3ZlKCZtcS0+bXNn cywgYV9tcV9tc2dfdHlwZSwgYV9maWVsZCk7CVwKKwkJbXEtPmNvdW50LS07CQkJCQkJXAorCX0J CQkJCQkJCVwKKwltdHhfdW5sb2NrKCZtcS0+bG9jayk7CQkJCQkJXAorCXJldHVybiBtc2c7CQkJ CQkJCVwKK30JCQkJCQkJCQlcCithX2F0dHIgYV9tcV9tc2dfdHlwZSAqCQkJCQkJCVwKK2FfcHJl Zml4IyNnZXQoYV9tcV90eXBlICptcSkgewkJCQkJCVwKKwlhX21xX21zZ190eXBlICptc2c7CQkJ CQkJXAorCXVuc2lnbmVkIG5zOwkJCQkJCQlcCisJCQkJCQkJCQlcCisJbXNnID0gYV9wcmVmaXgj I3RyeWdldChtcSk7CQkJCQlcCisJaWYgKG1zZyAhPSBOVUxMKSB7CQkJCQkJXAorCQlyZXR1cm4g bXNnOwkJCQkJCVwKKwl9CQkJCQkJCQlcCisJCQkJCQkJCQlcCisJbnMgPSAxOwkJCQkJCQkJXAor CXdoaWxlICh0cnVlKSB7CQkJCQkJCVwKKwkJc2xlZXBfbnMobnMpOwkJCQkJCVwKKwkJbXNnID0g YV9wcmVmaXgjI3RyeWdldChtcSk7CQkJCVwKKwkJaWYgKG1zZyAhPSBOVUxMKSB7CQkJCQlcCisJ CQlyZXR1cm4gbXNnOwkJCQkJXAorCQl9CQkJCQkJCVwKKwkJaWYgKG5zIDwgMTAwMCoxMDAwKjEw MDApIHsJCQkJXAorCQkJLyogRG91YmxlIHNsZWVwIHRpbWUsIHVwIHRvIG1heCAxIHNlY29uZC4g Ki8JXAorCQkJbnMgPDw9IDE7CQkJCQlcCisJCQlpZiAobnMgPiAxMDAwKjEwMDAqMTAwMCkgewkJ CVwKKwkJCQlucyA9IDEwMDAqMTAwMCoxMDAwOwkJCVwKKwkJCX0JCQkJCQlcCisJCX0JCQkJCQkJ XAorCX0JCQkJCQkJCVwKK30JCQkJCQkJCQlcCithX2F0dHIgdm9pZAkJCQkJCQkJXAorYV9wcmVm aXgjI3B1dChhX21xX3R5cGUgKm1xLCBhX21xX21zZ190eXBlICptc2cpIHsJCQlcCisJCQkJCQkJ CQlcCisJbXR4X2xvY2soJm1xLT5sb2NrKTsJCQkJCQlcCisJcWxfZWxtX25ldyhtc2csIGFfZmll bGQpOwkJCQkJXAorCXFsX3RhaWxfaW5zZXJ0KCZtcS0+bXNncywgbXNnLCBhX2ZpZWxkKTsJCQlc CisJbXEtPmNvdW50Kys7CQkJCQkJCVwKKwltdHhfdW5sb2NrKCZtcS0+bG9jayk7CQkJCQkJXAor fQoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rl c3QvaW5jbHVkZS90ZXN0L210eC5oIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2Mt NS4zLjAvdGVzdC9pbmNsdWRlL3Rlc3QvbXR4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMC4uMDY2YTIxMwotLS0gL2Rldi9udWxsCisrKyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1 aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvaW5jbHVkZS90ZXN0L210eC5oCkBAIC0wLDAgKzEsMjEg QEAKKy8qCisgKiBtdHggaXMgYSBzbGlnaHRseSBzaW1wbGlmaWVkIHZlcnNpb24gb2YgbWFsbG9j X211dGV4LiAgVGhpcyBjb2RlIGR1cGxpY2F0aW9uCisgKiBpcyB1bmZvcnR1bmF0ZSwgYnV0IHRo ZXJlIGFyZSBhbGxvY2F0b3IgYm9vdHN0cmFwcGluZyBjb25zaWRlcmF0aW9ucyB0aGF0CisgKiB3 b3VsZCBsZWFrIGludG8gdGhlIHRlc3QgaW5mcmFzdHJ1Y3R1cmUgaWYgbWFsbG9jX211dGV4IHdl cmUgdXNlZCBkaXJlY3RseQorICogaW4gdGVzdHMuCisgKi8KKwordHlwZWRlZiBzdHJ1Y3Qgewor I2lmZGVmIF9XSU4zMgorCUNSSVRJQ0FMX1NFQ1RJT04JbG9jazsKKyNlbGlmIChkZWZpbmVkKEpF TUFMTE9DX09TX1VORkFJUl9MT0NLKSkKKwlvc191bmZhaXJfbG9jawkJbG9jazsKKyNlbHNlCisJ cHRocmVhZF9tdXRleF90CQlsb2NrOworI2VuZGlmCit9IG10eF90OworCitib29sCW10eF9pbml0 KG10eF90ICptdHgpOwordm9pZAltdHhfZmluaShtdHhfdCAqbXR4KTsKK3ZvaWQJbXR4X2xvY2so bXR4X3QgKm10eCk7Cit2b2lkCW10eF91bmxvY2sobXR4X3QgKm10eCk7CgpkaWZmIC0tZ2l0IGEv Mzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC9pbmNsdWRlL3Rlc3Qv bmJpdHMuaCBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvaW5j bHVkZS90ZXN0L25iaXRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzA2 Y2YxYgotLS0gL2Rldi9udWxsCisrKyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9j LTUuMy4wL3Rlc3QvaW5jbHVkZS90ZXN0L25iaXRzLmgKQEAgLTAsMCArMSwxMTEgQEAKKyNpZm5k ZWYgVEVTVF9OQklUU19ICisjZGVmaW5lIFRFU1RfTkJJVFNfSAorCisvKiBJbnRlcmVzdGluZyBi aXRtYXAgY291bnRzIHRvIHRlc3QuICovCisKKyNkZWZpbmUgTkJJVFNfVEFCIFwKKyAgICBOQigg MSkgXAorICAgIE5CKCAyKSBcCisgICAgTkIoIDMpIFwKKyAgICBOQiggNCkgXAorICAgIE5CKCA1 KSBcCisgICAgTkIoIDYpIFwKKyAgICBOQiggNykgXAorICAgIE5CKCA4KSBcCisgICAgTkIoIDkp IFwKKyAgICBOQigxMCkgXAorICAgIE5CKDExKSBcCisgICAgTkIoMTIpIFwKKyAgICBOQigxMykg XAorICAgIE5CKDE0KSBcCisgICAgTkIoMTUpIFwKKyAgICBOQigxNikgXAorICAgIE5CKDE3KSBc CisgICAgTkIoMTgpIFwKKyAgICBOQigxOSkgXAorICAgIE5CKDIwKSBcCisgICAgTkIoMjEpIFwK KyAgICBOQigyMikgXAorICAgIE5CKDIzKSBcCisgICAgTkIoMjQpIFwKKyAgICBOQigyNSkgXAor ICAgIE5CKDI2KSBcCisgICAgTkIoMjcpIFwKKyAgICBOQigyOCkgXAorICAgIE5CKDI5KSBcCisg ICAgTkIoMzApIFwKKyAgICBOQigzMSkgXAorICAgIE5CKDMyKSBcCisgICAgXAorICAgIE5CKDMz KSBcCisgICAgTkIoMzQpIFwKKyAgICBOQigzNSkgXAorICAgIE5CKDM2KSBcCisgICAgTkIoMzcp IFwKKyAgICBOQigzOCkgXAorICAgIE5CKDM5KSBcCisgICAgTkIoNDApIFwKKyAgICBOQig0MSkg XAorICAgIE5CKDQyKSBcCisgICAgTkIoNDMpIFwKKyAgICBOQig0NCkgXAorICAgIE5CKDQ1KSBc CisgICAgTkIoNDYpIFwKKyAgICBOQig0NykgXAorICAgIE5CKDQ4KSBcCisgICAgTkIoNDkpIFwK KyAgICBOQig1MCkgXAorICAgIE5CKDUxKSBcCisgICAgTkIoNTIpIFwKKyAgICBOQig1MykgXAor ICAgIE5CKDU0KSBcCisgICAgTkIoNTUpIFwKKyAgICBOQig1NikgXAorICAgIE5CKDU3KSBcCisg ICAgTkIoNTgpIFwKKyAgICBOQig1OSkgXAorICAgIE5CKDYwKSBcCisgICAgTkIoNjEpIFwKKyAg ICBOQig2MikgXAorICAgIE5CKDYzKSBcCisgICAgTkIoNjQpIFwKKyAgICBOQig2NSkgXAorICAg IE5CKDY2KSBcCisgICAgTkIoNjcpIFwKKyAgICBcCisgICAgTkIoMTI2KSBcCisgICAgTkIoMTI3 KSBcCisgICAgTkIoMTI4KSBcCisgICAgTkIoMTI5KSBcCisgICAgTkIoMTMwKSBcCisgICAgXAor ICAgIE5CKDI1NCkgXAorICAgIE5CKDI1NSkgXAorICAgIE5CKDI1NikgXAorICAgIE5CKDI1Nykg XAorICAgIE5CKDI1OCkgXAorICAgIFwKKyAgICBOQig1MTApIFwKKyAgICBOQig1MTEpIFwKKyAg ICBOQig1MTIpIFwKKyAgICBOQig1MTMpIFwKKyAgICBOQig1MTQpIFwKKyAgICBcCisgICAgTkIo MTAyMikgXAorICAgIE5CKDEwMjMpIFwKKyAgICBOQigxMDI0KSBcCisgICAgTkIoMTAyNSkgXAor ICAgIE5CKDEwMjYpIFwKKyAgICBcCisgICAgTkIoMjA0OCkgXAorICAgIFwKKyAgICBOQig0MDk0 KSBcCisgICAgTkIoNDA5NSkgXAorICAgIE5CKDQwOTYpIFwKKyAgICBOQig0MDk3KSBcCisgICAg TkIoNDA5OCkgXAorICAgIFwKKyAgICBOQig4MTkyKSBcCisgICAgTkIoMTYzODQpCisKKyNlbmRp ZiAvKiBURVNUX05CSVRTX0ggKi8KCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWls ZC9qZW1hbGxvYy01LjMuMC90ZXN0L2luY2x1ZGUvdGVzdC9zYW4uaCBiLzM4OS1kcy1iYXNlLTMu My4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvaW5jbHVkZS90ZXN0L3Nhbi5oCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhMDc4NjUKLS0tIC9kZXYvbnVsbAorKysgYi8z ODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L2luY2x1ZGUvdGVzdC9z YW4uaApAQCAtMCwwICsxLDE0IEBACisjaWYgZGVmaW5lZChKRU1BTExPQ19VQUZfREVURUNUSU9O KSB8fCBkZWZpbmVkKEpFTUFMTE9DX0RFQlVHKQorIyAgZGVmaW5lIFRFU1RfU0FOX1VBRl9BTElH Tl9FTkFCTEUgImxnX3Nhbl91YWZfYWxpZ246MTIiCisjICBkZWZpbmUgVEVTVF9TQU5fVUFGX0FM SUdOX0RJU0FCTEUgImxnX3Nhbl91YWZfYWxpZ246LTEiCisjZWxzZQorIyAgZGVmaW5lIFRFU1Rf U0FOX1VBRl9BTElHTl9FTkFCTEUgIiIKKyMgIGRlZmluZSBURVNUX1NBTl9VQUZfQUxJR05fRElT QUJMRSAiIgorI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgYm9vbAorZXh0ZW50X2lzX2d1YXJkZWQo dHNkbl90ICp0c2RuLCB2b2lkICpwdHIpIHsKKwllZGF0YV90ICplZGF0YSA9IGVtYXBfZWRhdGFf bG9va3VwKHRzZG4sICZhcmVuYV9lbWFwX2dsb2JhbCwgcHRyKTsKKwlyZXR1cm4gZWRhdGFfZ3Vh cmRlZF9nZXQoZWRhdGEpOworfQorCgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVp bGQvamVtYWxsb2MtNS4zLjAvdGVzdC9pbmNsdWRlL3Rlc3Qvc2xlZXAuaCBiLzM4OS1kcy1iYXNl LTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvaW5jbHVkZS90ZXN0L3NsZWVwLmgKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzIzMmY2MwotLS0gL2Rldi9udWxsCisr KyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvaW5jbHVkZS90 ZXN0L3NsZWVwLmgKQEAgLTAsMCArMSBAQAordm9pZCBzbGVlcF9ucyh1bnNpZ25lZCBucyk7Cgpk aWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC9p bmNsdWRlL3Rlc3QvdGVzdC5oIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4z LjAvdGVzdC9pbmNsdWRlL3Rlc3QvdGVzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAuLmQ0YjY1OTEKLS0tIC9kZXYvbnVsbAorKysgYi8zODktZHMtYmFzZS0zLjMuMC1idWls ZC9qZW1hbGxvYy01LjMuMC90ZXN0L2luY2x1ZGUvdGVzdC90ZXN0LmgKQEAgLTAsMCArMSw1ODMg QEAKKyNkZWZpbmUgQVNTRVJUX0JVRlNJWkUJMjU2CisKKyNkZWZpbmUgdmVyaWZ5X2NtcChtYXlf YWJvcnQsIHQsIGEsIGIsIGNtcCwgbmVnX2NtcCwgcHJpLCAuLi4pIGRvIHsJXAorCWNvbnN0IHQg YV8gPSAoYSk7CQkJCQkJXAorCWNvbnN0IHQgYl8gPSAoYik7CQkJCQkJXAorCWlmICghKGFfIGNt cCBiXykpIHsJCQkJCQlcCisJCWNoYXIgcHJlZml4W0FTU0VSVF9CVUZTSVpFXTsJCQkJXAorCQlj aGFyIG1lc3NhZ2VbQVNTRVJUX0JVRlNJWkVdOwkJCQlcCisJCW1hbGxvY19zbnByaW50ZihwcmVm aXgsIHNpemVvZihwcmVmaXgpLAkJCVwKKwkJICAgICIlczolczolZDogRmFpbGVkIGFzc2VydGlv bjogIgkJCVwKKwkJICAgICIoJXMpICIgI2NtcCAiICglcykgLS0+ICIJCQkJXAorCQkgICAgIiUi IHByaSAiICIgI25lZ19jbXAgIiAlIiBwcmkgIjogIiwJCQlcCisJCSAgICBfX2Z1bmNfXywgX19G SUxFX18sIF9fTElORV9fLAkJCVwKKwkJICAgICNhLCAjYiwgYV8sIGJfKTsJCQkJCVwKKwkJbWFs bG9jX3NucHJpbnRmKG1lc3NhZ2UsIHNpemVvZihtZXNzYWdlKSwgX19WQV9BUkdTX18pOwlcCisJ CWlmIChtYXlfYWJvcnQpIHsJCQkJCVwKKwkJCWFib3J0KCk7CQkJCQlcCisJCX0gZWxzZSB7CQkJ CQkJXAorCQkJcF90ZXN0X2ZhaWwocHJlZml4LCBtZXNzYWdlKTsJCQlcCisJCX0JCQkJCQkJXAor CX0JCQkJCQkJCVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgZXhwZWN0X2NtcCh0LCBhLCBiLCBj bXAsIG5lZ19jbXAsIHByaSwgLi4uKSB2ZXJpZnlfY21wKGZhbHNlLAlcCisgICAgdCwgYSwgYiwg Y21wLCBuZWdfY21wLCBwcmksIF9fVkFfQVJHU19fKQorCisjZGVmaW5lIGV4cGVjdF9wdHJfZXEo YSwgYiwgLi4uKQlleHBlY3RfY21wKHZvaWQgKiwgYSwgYiwgPT0sCVwKKyAgICAhPSwgInAiLCBf X1ZBX0FSR1NfXykKKyNkZWZpbmUgZXhwZWN0X3B0cl9uZShhLCBiLCAuLi4pCWV4cGVjdF9jbXAo dm9pZCAqLCBhLCBiLCAhPSwJXAorICAgID09LCAicCIsIF9fVkFfQVJHU19fKQorI2RlZmluZSBl eHBlY3RfcHRyX251bGwoYSwgLi4uKQkJZXhwZWN0X2NtcCh2b2lkICosIGEsIE5VTEwsID09LAlc CisgICAgIT0sICJwIiwgX19WQV9BUkdTX18pCisjZGVmaW5lIGV4cGVjdF9wdHJfbm90X251bGwo YSwgLi4uKQlleHBlY3RfY21wKHZvaWQgKiwgYSwgTlVMTCwgIT0sCVwKKyAgICA9PSwgInAiLCBf X1ZBX0FSR1NfXykKKworI2RlZmluZSBleHBlY3RfY19lcShhLCBiLCAuLi4pCWV4cGVjdF9jbXAo Y2hhciwgYSwgYiwgPT0sICE9LCAiYyIsIF9fVkFfQVJHU19fKQorI2RlZmluZSBleHBlY3RfY19u ZShhLCBiLCAuLi4pCWV4cGVjdF9jbXAoY2hhciwgYSwgYiwgIT0sID09LCAiYyIsIF9fVkFfQVJH U19fKQorI2RlZmluZSBleHBlY3RfY19sdChhLCBiLCAuLi4pCWV4cGVjdF9jbXAoY2hhciwgYSwg YiwgPCwgPj0sICJjIiwgX19WQV9BUkdTX18pCisjZGVmaW5lIGV4cGVjdF9jX2xlKGEsIGIsIC4u LikJZXhwZWN0X2NtcChjaGFyLCBhLCBiLCA8PSwgPiwgImMiLCBfX1ZBX0FSR1NfXykKKyNkZWZp bmUgZXhwZWN0X2NfZ2UoYSwgYiwgLi4uKQlleHBlY3RfY21wKGNoYXIsIGEsIGIsID49LCA8LCAi YyIsIF9fVkFfQVJHU19fKQorI2RlZmluZSBleHBlY3RfY19ndChhLCBiLCAuLi4pCWV4cGVjdF9j bXAoY2hhciwgYSwgYiwgPiwgPD0sICJjIiwgX19WQV9BUkdTX18pCisKKyNkZWZpbmUgZXhwZWN0 X3hfZXEoYSwgYiwgLi4uKQlleHBlY3RfY21wKGludCwgYSwgYiwgPT0sICE9LCAiI3giLCBfX1ZB X0FSR1NfXykKKyNkZWZpbmUgZXhwZWN0X3hfbmUoYSwgYiwgLi4uKQlleHBlY3RfY21wKGludCwg YSwgYiwgIT0sID09LCAiI3giLCBfX1ZBX0FSR1NfXykKKyNkZWZpbmUgZXhwZWN0X3hfbHQoYSwg YiwgLi4uKQlleHBlY3RfY21wKGludCwgYSwgYiwgPCwgPj0sICIjeCIsIF9fVkFfQVJHU19fKQor I2RlZmluZSBleHBlY3RfeF9sZShhLCBiLCAuLi4pCWV4cGVjdF9jbXAoaW50LCBhLCBiLCA8PSwg PiwgIiN4IiwgX19WQV9BUkdTX18pCisjZGVmaW5lIGV4cGVjdF94X2dlKGEsIGIsIC4uLikJZXhw ZWN0X2NtcChpbnQsIGEsIGIsID49LCA8LCAiI3giLCBfX1ZBX0FSR1NfXykKKyNkZWZpbmUgZXhw ZWN0X3hfZ3QoYSwgYiwgLi4uKQlleHBlY3RfY21wKGludCwgYSwgYiwgPiwgPD0sICIjeCIsIF9f VkFfQVJHU19fKQorCisjZGVmaW5lIGV4cGVjdF9kX2VxKGEsIGIsIC4uLikJZXhwZWN0X2NtcChp bnQsIGEsIGIsID09LCAhPSwgImQiLCBfX1ZBX0FSR1NfXykKKyNkZWZpbmUgZXhwZWN0X2RfbmUo YSwgYiwgLi4uKQlleHBlY3RfY21wKGludCwgYSwgYiwgIT0sID09LCAiZCIsIF9fVkFfQVJHU19f KQorI2RlZmluZSBleHBlY3RfZF9sdChhLCBiLCAuLi4pCWV4cGVjdF9jbXAoaW50LCBhLCBiLCA8 LCA+PSwgImQiLCBfX1ZBX0FSR1NfXykKKyNkZWZpbmUgZXhwZWN0X2RfbGUoYSwgYiwgLi4uKQll eHBlY3RfY21wKGludCwgYSwgYiwgPD0sID4sICJkIiwgX19WQV9BUkdTX18pCisjZGVmaW5lIGV4 cGVjdF9kX2dlKGEsIGIsIC4uLikJZXhwZWN0X2NtcChpbnQsIGEsIGIsID49LCA8LCAiZCIsIF9f VkFfQVJHU19fKQorI2RlZmluZSBleHBlY3RfZF9ndChhLCBiLCAuLi4pCWV4cGVjdF9jbXAoaW50 LCBhLCBiLCA+LCA8PSwgImQiLCBfX1ZBX0FSR1NfXykKKworI2RlZmluZSBleHBlY3RfdV9lcShh LCBiLCAuLi4pCWV4cGVjdF9jbXAoaW50LCBhLCBiLCA9PSwgIT0sICJ1IiwgX19WQV9BUkdTX18p CisjZGVmaW5lIGV4cGVjdF91X25lKGEsIGIsIC4uLikJZXhwZWN0X2NtcChpbnQsIGEsIGIsICE9 LCA9PSwgInUiLCBfX1ZBX0FSR1NfXykKKyNkZWZpbmUgZXhwZWN0X3VfbHQoYSwgYiwgLi4uKQll eHBlY3RfY21wKGludCwgYSwgYiwgPCwgPj0sICJ1IiwgX19WQV9BUkdTX18pCisjZGVmaW5lIGV4 cGVjdF91X2xlKGEsIGIsIC4uLikJZXhwZWN0X2NtcChpbnQsIGEsIGIsIDw9LCA+LCAidSIsIF9f VkFfQVJHU19fKQorI2RlZmluZSBleHBlY3RfdV9nZShhLCBiLCAuLi4pCWV4cGVjdF9jbXAoaW50 LCBhLCBiLCA+PSwgPCwgInUiLCBfX1ZBX0FSR1NfXykKKyNkZWZpbmUgZXhwZWN0X3VfZ3QoYSwg YiwgLi4uKQlleHBlY3RfY21wKGludCwgYSwgYiwgPiwgPD0sICJ1IiwgX19WQV9BUkdTX18pCisK KyNkZWZpbmUgZXhwZWN0X2xkX2VxKGEsIGIsIC4uLikJZXhwZWN0X2NtcChsb25nLCBhLCBiLCA9 PSwJXAorICAgICE9LCAibGQiLCBfX1ZBX0FSR1NfXykKKyNkZWZpbmUgZXhwZWN0X2xkX25lKGEs IGIsIC4uLikJZXhwZWN0X2NtcChsb25nLCBhLCBiLCAhPSwJXAorICAgID09LCAibGQiLCBfX1ZB X0FSR1NfXykKKyNkZWZpbmUgZXhwZWN0X2xkX2x0KGEsIGIsIC4uLikJZXhwZWN0X2NtcChsb25n LCBhLCBiLCA8LAlcCisgICAgPj0sICJsZCIsIF9fVkFfQVJHU19fKQorI2RlZmluZSBleHBlY3Rf bGRfbGUoYSwgYiwgLi4uKQlleHBlY3RfY21wKGxvbmcsIGEsIGIsIDw9LAlcCisgICAgPiwgImxk IiwgX19WQV9BUkdTX18pCisjZGVmaW5lIGV4cGVjdF9sZF9nZShhLCBiLCAuLi4pCWV4cGVjdF9j bXAobG9uZywgYSwgYiwgPj0sCVwKKyAgICA8LCAibGQiLCBfX1ZBX0FSR1NfXykKKyNkZWZpbmUg ZXhwZWN0X2xkX2d0KGEsIGIsIC4uLikJZXhwZWN0X2NtcChsb25nLCBhLCBiLCA+LAlcCisgICAg PD0sICJsZCIsIF9fVkFfQVJHU19fKQorCisjZGVmaW5lIGV4cGVjdF9sdV9lcShhLCBiLCAuLi4p CWV4cGVjdF9jbXAodW5zaWduZWQgbG9uZywJXAorICAgIGEsIGIsID09LCAhPSwgImx1IiwgX19W QV9BUkdTX18pCisjZGVmaW5lIGV4cGVjdF9sdV9uZShhLCBiLCAuLi4pCWV4cGVjdF9jbXAodW5z aWduZWQgbG9uZywJXAorICAgIGEsIGIsICE9LCA9PSwgImx1IiwgX19WQV9BUkdTX18pCisjZGVm aW5lIGV4cGVjdF9sdV9sdChhLCBiLCAuLi4pCWV4cGVjdF9jbXAodW5zaWduZWQgbG9uZywJXAor ICAgIGEsIGIsIDwsID49LCAibHUiLCBfX1ZBX0FSR1NfXykKKyNkZWZpbmUgZXhwZWN0X2x1X2xl KGEsIGIsIC4uLikJZXhwZWN0X2NtcCh1bnNpZ25lZCBsb25nLAlcCisgICAgYSwgYiwgPD0sID4s ICJsdSIsIF9fVkFfQVJHU19fKQorI2RlZmluZSBleHBlY3RfbHVfZ2UoYSwgYiwgLi4uKQlleHBl Y3RfY21wKHVuc2lnbmVkIGxvbmcsCVwKKyAgICBhLCBiLCA+PSwgPCwgImx1IiwgX19WQV9BUkdT X18pCisjZGVmaW5lIGV4cGVjdF9sdV9ndChhLCBiLCAuLi4pCWV4cGVjdF9jbXAodW5zaWduZWQg bG9uZywJXAorICAgIGEsIGIsID4sIDw9LCAibHUiLCBfX1ZBX0FSR1NfXykKKworI2RlZmluZSBl eHBlY3RfcWRfZXEoYSwgYiwgLi4uKQlleHBlY3RfY21wKGxvbmcgbG9uZywgYSwgYiwgPT0sCVwK KyAgICAhPSwgInFkIiwgX19WQV9BUkdTX18pCisjZGVmaW5lIGV4cGVjdF9xZF9uZShhLCBiLCAu Li4pCWV4cGVjdF9jbXAobG9uZyBsb25nLCBhLCBiLCAhPSwJXAorICAgID09LCAicWQiLCBfX1ZB X0FSR1NfXykKKyNkZWZpbmUgZXhwZWN0X3FkX2x0KGEsIGIsIC4uLikJZXhwZWN0X2NtcChsb25n IGxvbmcsIGEsIGIsIDwsCVwKKyAgICA+PSwgInFkIiwgX19WQV9BUkdTX18pCisjZGVmaW5lIGV4 cGVjdF9xZF9sZShhLCBiLCAuLi4pCWV4cGVjdF9jbXAobG9uZyBsb25nLCBhLCBiLCA8PSwJXAor ICAgID4sICJxZCIsIF9fVkFfQVJHU19fKQorI2RlZmluZSBleHBlY3RfcWRfZ2UoYSwgYiwgLi4u KQlleHBlY3RfY21wKGxvbmcgbG9uZywgYSwgYiwgPj0sCVwKKyAgICA8LCAicWQiLCBfX1ZBX0FS R1NfXykKKyNkZWZpbmUgZXhwZWN0X3FkX2d0KGEsIGIsIC4uLikJZXhwZWN0X2NtcChsb25nIGxv bmcsIGEsIGIsID4sCVwKKyAgICA8PSwgInFkIiwgX19WQV9BUkdTX18pCisKKyNkZWZpbmUgZXhw ZWN0X3F1X2VxKGEsIGIsIC4uLikJZXhwZWN0X2NtcCh1bnNpZ25lZCBsb25nIGxvbmcsCVwKKyAg ICBhLCBiLCA9PSwgIT0sICJxdSIsIF9fVkFfQVJHU19fKQorI2RlZmluZSBleHBlY3RfcXVfbmUo YSwgYiwgLi4uKQlleHBlY3RfY21wKHVuc2lnbmVkIGxvbmcgbG9uZywJXAorICAgIGEsIGIsICE9 LCA9PSwgInF1IiwgX19WQV9BUkdTX18pCisjZGVmaW5lIGV4cGVjdF9xdV9sdChhLCBiLCAuLi4p CWV4cGVjdF9jbXAodW5zaWduZWQgbG9uZyBsb25nLAlcCisgICAgYSwgYiwgPCwgPj0sICJxdSIs IF9fVkFfQVJHU19fKQorI2RlZmluZSBleHBlY3RfcXVfbGUoYSwgYiwgLi4uKQlleHBlY3RfY21w KHVuc2lnbmVkIGxvbmcgbG9uZywJXAorICAgIGEsIGIsIDw9LCA+LCAicXUiLCBfX1ZBX0FSR1Nf XykKKyNkZWZpbmUgZXhwZWN0X3F1X2dlKGEsIGIsIC4uLikJZXhwZWN0X2NtcCh1bnNpZ25lZCBs b25nIGxvbmcsCVwKKyAgICBhLCBiLCA+PSwgPCwgInF1IiwgX19WQV9BUkdTX18pCisjZGVmaW5l IGV4cGVjdF9xdV9ndChhLCBiLCAuLi4pCWV4cGVjdF9jbXAodW5zaWduZWQgbG9uZyBsb25nLAlc CisgICAgYSwgYiwgPiwgPD0sICJxdSIsIF9fVkFfQVJHU19fKQorCisjZGVmaW5lIGV4cGVjdF9q ZF9lcShhLCBiLCAuLi4pCWV4cGVjdF9jbXAoaW50bWF4X3QsIGEsIGIsID09LAlcCisgICAgIT0s ICJqZCIsIF9fVkFfQVJHU19fKQorI2RlZmluZSBleHBlY3RfamRfbmUoYSwgYiwgLi4uKQlleHBl Y3RfY21wKGludG1heF90LCBhLCBiLCAhPSwJXAorICAgID09LCAiamQiLCBfX1ZBX0FSR1NfXykK KyNkZWZpbmUgZXhwZWN0X2pkX2x0KGEsIGIsIC4uLikJZXhwZWN0X2NtcChpbnRtYXhfdCwgYSwg YiwgPCwJXAorICAgID49LCAiamQiLCBfX1ZBX0FSR1NfXykKKyNkZWZpbmUgZXhwZWN0X2pkX2xl KGEsIGIsIC4uLikJZXhwZWN0X2NtcChpbnRtYXhfdCwgYSwgYiwgPD0sCVwKKyAgICA+LCAiamQi LCBfX1ZBX0FSR1NfXykKKyNkZWZpbmUgZXhwZWN0X2pkX2dlKGEsIGIsIC4uLikJZXhwZWN0X2Nt cChpbnRtYXhfdCwgYSwgYiwgPj0sCVwKKyAgICA8LCAiamQiLCBfX1ZBX0FSR1NfXykKKyNkZWZp bmUgZXhwZWN0X2pkX2d0KGEsIGIsIC4uLikJZXhwZWN0X2NtcChpbnRtYXhfdCwgYSwgYiwgPiwJ XAorICAgIDw9LCAiamQiLCBfX1ZBX0FSR1NfXykKKworI2RlZmluZSBleHBlY3RfanVfZXEoYSwg YiwgLi4uKQlleHBlY3RfY21wKHVpbnRtYXhfdCwgYSwgYiwgPT0sCVwKKyAgICAhPSwgImp1Iiwg X19WQV9BUkdTX18pCisjZGVmaW5lIGV4cGVjdF9qdV9uZShhLCBiLCAuLi4pCWV4cGVjdF9jbXAo dWludG1heF90LCBhLCBiLCAhPSwJXAorICAgID09LCAianUiLCBfX1ZBX0FSR1NfXykKKyNkZWZp bmUgZXhwZWN0X2p1X2x0KGEsIGIsIC4uLikJZXhwZWN0X2NtcCh1aW50bWF4X3QsIGEsIGIsIDws CVwKKyAgICA+PSwgImp1IiwgX19WQV9BUkdTX18pCisjZGVmaW5lIGV4cGVjdF9qdV9sZShhLCBi LCAuLi4pCWV4cGVjdF9jbXAodWludG1heF90LCBhLCBiLCA8PSwJXAorICAgID4sICJqdSIsIF9f VkFfQVJHU19fKQorI2RlZmluZSBleHBlY3RfanVfZ2UoYSwgYiwgLi4uKQlleHBlY3RfY21wKHVp bnRtYXhfdCwgYSwgYiwgPj0sCVwKKyAgICA8LCAianUiLCBfX1ZBX0FSR1NfXykKKyNkZWZpbmUg ZXhwZWN0X2p1X2d0KGEsIGIsIC4uLikJZXhwZWN0X2NtcCh1aW50bWF4X3QsIGEsIGIsID4sCVwK KyAgICA8PSwgImp1IiwgX19WQV9BUkdTX18pCisKKyNkZWZpbmUgZXhwZWN0X3pkX2VxKGEsIGIs IC4uLikJZXhwZWN0X2NtcChzc2l6ZV90LCBhLCBiLCA9PSwJXAorICAgICE9LCAiemQiLCBfX1ZB X0FSR1NfXykKKyNkZWZpbmUgZXhwZWN0X3pkX25lKGEsIGIsIC4uLikJZXhwZWN0X2NtcChzc2l6 ZV90LCBhLCBiLCAhPSwJXAorICAgID09LCAiemQiLCBfX1ZBX0FSR1NfXykKKyNkZWZpbmUgZXhw ZWN0X3pkX2x0KGEsIGIsIC4uLikJZXhwZWN0X2NtcChzc2l6ZV90LCBhLCBiLCA8LAlcCisgICAg Pj0sICJ6ZCIsIF9fVkFfQVJHU19fKQorI2RlZmluZSBleHBlY3RfemRfbGUoYSwgYiwgLi4uKQll eHBlY3RfY21wKHNzaXplX3QsIGEsIGIsIDw9LAlcCisgICAgPiwgInpkIiwgX19WQV9BUkdTX18p CisjZGVmaW5lIGV4cGVjdF96ZF9nZShhLCBiLCAuLi4pCWV4cGVjdF9jbXAoc3NpemVfdCwgYSwg YiwgPj0sCVwKKyAgICA8LCAiemQiLCBfX1ZBX0FSR1NfXykKKyNkZWZpbmUgZXhwZWN0X3pkX2d0 KGEsIGIsIC4uLikJZXhwZWN0X2NtcChzc2l6ZV90LCBhLCBiLCA+LAlcCisgICAgPD0sICJ6ZCIs IF9fVkFfQVJHU19fKQorCisjZGVmaW5lIGV4cGVjdF96dV9lcShhLCBiLCAuLi4pCWV4cGVjdF9j bXAoc2l6ZV90LCBhLCBiLCA9PSwJXAorICAgICE9LCAienUiLCBfX1ZBX0FSR1NfXykKKyNkZWZp bmUgZXhwZWN0X3p1X25lKGEsIGIsIC4uLikJZXhwZWN0X2NtcChzaXplX3QsIGEsIGIsICE9LAlc CisgICAgPT0sICJ6dSIsIF9fVkFfQVJHU19fKQorI2RlZmluZSBleHBlY3RfenVfbHQoYSwgYiwg Li4uKQlleHBlY3RfY21wKHNpemVfdCwgYSwgYiwgPCwJXAorICAgID49LCAienUiLCBfX1ZBX0FS R1NfXykKKyNkZWZpbmUgZXhwZWN0X3p1X2xlKGEsIGIsIC4uLikJZXhwZWN0X2NtcChzaXplX3Qs IGEsIGIsIDw9LAlcCisgICAgPiwgInp1IiwgX19WQV9BUkdTX18pCisjZGVmaW5lIGV4cGVjdF96 dV9nZShhLCBiLCAuLi4pCWV4cGVjdF9jbXAoc2l6ZV90LCBhLCBiLCA+PSwJXAorICAgIDwsICJ6 dSIsIF9fVkFfQVJHU19fKQorI2RlZmluZSBleHBlY3RfenVfZ3QoYSwgYiwgLi4uKQlleHBlY3Rf Y21wKHNpemVfdCwgYSwgYiwgPiwJXAorICAgIDw9LCAienUiLCBfX1ZBX0FSR1NfXykKKworI2Rl ZmluZSBleHBlY3RfZDMyX2VxKGEsIGIsIC4uLikJZXhwZWN0X2NtcChpbnQzMl90LCBhLCBiLCA9 PSwJXAorICAgICE9LCBGTVRkMzIsIF9fVkFfQVJHU19fKQorI2RlZmluZSBleHBlY3RfZDMyX25l KGEsIGIsIC4uLikJZXhwZWN0X2NtcChpbnQzMl90LCBhLCBiLCAhPSwJXAorICAgID09LCBGTVRk MzIsIF9fVkFfQVJHU19fKQorI2RlZmluZSBleHBlY3RfZDMyX2x0KGEsIGIsIC4uLikJZXhwZWN0 X2NtcChpbnQzMl90LCBhLCBiLCA8LAlcCisgICAgPj0sIEZNVGQzMiwgX19WQV9BUkdTX18pCisj ZGVmaW5lIGV4cGVjdF9kMzJfbGUoYSwgYiwgLi4uKQlleHBlY3RfY21wKGludDMyX3QsIGEsIGIs IDw9LAlcCisgICAgPiwgRk1UZDMyLCBfX1ZBX0FSR1NfXykKKyNkZWZpbmUgZXhwZWN0X2QzMl9n ZShhLCBiLCAuLi4pCWV4cGVjdF9jbXAoaW50MzJfdCwgYSwgYiwgPj0sCVwKKyAgICA8LCBGTVRk MzIsIF9fVkFfQVJHU19fKQorI2RlZmluZSBleHBlY3RfZDMyX2d0KGEsIGIsIC4uLikJZXhwZWN0 X2NtcChpbnQzMl90LCBhLCBiLCA+LAlcCisgICAgPD0sIEZNVGQzMiwgX19WQV9BUkdTX18pCisK KyNkZWZpbmUgZXhwZWN0X3UzMl9lcShhLCBiLCAuLi4pCWV4cGVjdF9jbXAodWludDMyX3QsIGEs IGIsID09LAlcCisgICAgIT0sIEZNVHUzMiwgX19WQV9BUkdTX18pCisjZGVmaW5lIGV4cGVjdF91 MzJfbmUoYSwgYiwgLi4uKQlleHBlY3RfY21wKHVpbnQzMl90LCBhLCBiLCAhPSwJXAorICAgID09 LCBGTVR1MzIsIF9fVkFfQVJHU19fKQorI2RlZmluZSBleHBlY3RfdTMyX2x0KGEsIGIsIC4uLikJ ZXhwZWN0X2NtcCh1aW50MzJfdCwgYSwgYiwgPCwJXAorICAgID49LCBGTVR1MzIsIF9fVkFfQVJH U19fKQorI2RlZmluZSBleHBlY3RfdTMyX2xlKGEsIGIsIC4uLikJZXhwZWN0X2NtcCh1aW50MzJf dCwgYSwgYiwgPD0sCVwKKyAgICA+LCBGTVR1MzIsIF9fVkFfQVJHU19fKQorI2RlZmluZSBleHBl Y3RfdTMyX2dlKGEsIGIsIC4uLikJZXhwZWN0X2NtcCh1aW50MzJfdCwgYSwgYiwgPj0sCVwKKyAg ICA8LCBGTVR1MzIsIF9fVkFfQVJHU19fKQorI2RlZmluZSBleHBlY3RfdTMyX2d0KGEsIGIsIC4u LikJZXhwZWN0X2NtcCh1aW50MzJfdCwgYSwgYiwgPiwJXAorICAgIDw9LCBGTVR1MzIsIF9fVkFf QVJHU19fKQorCisjZGVmaW5lIGV4cGVjdF9kNjRfZXEoYSwgYiwgLi4uKQlleHBlY3RfY21wKGlu dDY0X3QsIGEsIGIsID09LAlcCisgICAgIT0sIEZNVGQ2NCwgX19WQV9BUkdTX18pCisjZGVmaW5l IGV4cGVjdF9kNjRfbmUoYSwgYiwgLi4uKQlleHBlY3RfY21wKGludDY0X3QsIGEsIGIsICE9LAlc CisgICAgPT0sIEZNVGQ2NCwgX19WQV9BUkdTX18pCisjZGVmaW5lIGV4cGVjdF9kNjRfbHQoYSwg YiwgLi4uKQlleHBlY3RfY21wKGludDY0X3QsIGEsIGIsIDwsCVwKKyAgICA+PSwgRk1UZDY0LCBf X1ZBX0FSR1NfXykKKyNkZWZpbmUgZXhwZWN0X2Q2NF9sZShhLCBiLCAuLi4pCWV4cGVjdF9jbXAo aW50NjRfdCwgYSwgYiwgPD0sCVwKKyAgICA+LCBGTVRkNjQsIF9fVkFfQVJHU19fKQorI2RlZmlu ZSBleHBlY3RfZDY0X2dlKGEsIGIsIC4uLikJZXhwZWN0X2NtcChpbnQ2NF90LCBhLCBiLCA+PSwJ XAorICAgIDwsIEZNVGQ2NCwgX19WQV9BUkdTX18pCisjZGVmaW5lIGV4cGVjdF9kNjRfZ3QoYSwg YiwgLi4uKQlleHBlY3RfY21wKGludDY0X3QsIGEsIGIsID4sCVwKKyAgICA8PSwgRk1UZDY0LCBf X1ZBX0FSR1NfXykKKworI2RlZmluZSBleHBlY3RfdTY0X2VxKGEsIGIsIC4uLikJZXhwZWN0X2Nt cCh1aW50NjRfdCwgYSwgYiwgPT0sCVwKKyAgICAhPSwgRk1UdTY0LCBfX1ZBX0FSR1NfXykKKyNk ZWZpbmUgZXhwZWN0X3U2NF9uZShhLCBiLCAuLi4pCWV4cGVjdF9jbXAodWludDY0X3QsIGEsIGIs ICE9LAlcCisgICAgPT0sIEZNVHU2NCwgX19WQV9BUkdTX18pCisjZGVmaW5lIGV4cGVjdF91NjRf bHQoYSwgYiwgLi4uKQlleHBlY3RfY21wKHVpbnQ2NF90LCBhLCBiLCA8LAlcCisgICAgPj0sIEZN VHU2NCwgX19WQV9BUkdTX18pCisjZGVmaW5lIGV4cGVjdF91NjRfbGUoYSwgYiwgLi4uKQlleHBl Y3RfY21wKHVpbnQ2NF90LCBhLCBiLCA8PSwJXAorICAgID4sIEZNVHU2NCwgX19WQV9BUkdTX18p CisjZGVmaW5lIGV4cGVjdF91NjRfZ2UoYSwgYiwgLi4uKQlleHBlY3RfY21wKHVpbnQ2NF90LCBh LCBiLCA+PSwJXAorICAgIDwsIEZNVHU2NCwgX19WQV9BUkdTX18pCisjZGVmaW5lIGV4cGVjdF91 NjRfZ3QoYSwgYiwgLi4uKQlleHBlY3RfY21wKHVpbnQ2NF90LCBhLCBiLCA+LAlcCisgICAgPD0s IEZNVHU2NCwgX19WQV9BUkdTX18pCisKKyNkZWZpbmUgdmVyaWZ5X2JfZXEobWF5X2Fib3J0LCBh LCBiLCAuLi4pIGRvIHsJCQkJXAorCWJvb2wgYV8gPSAoYSk7CQkJCQkJCVwKKwlib29sIGJfID0g KGIpOwkJCQkJCQlcCisJaWYgKCEoYV8gPT0gYl8pKSB7CQkJCQkJXAorCQljaGFyIHByZWZpeFtB U1NFUlRfQlVGU0laRV07CQkJCVwKKwkJY2hhciBtZXNzYWdlW0FTU0VSVF9CVUZTSVpFXTsJCQkJ XAorCQltYWxsb2Nfc25wcmludGYocHJlZml4LCBzaXplb2YocHJlZml4KSwJCQlcCisJCSAgICAi JXM6JXM6JWQ6IEZhaWxlZCBhc3NlcnRpb246ICIJCQlcCisJCSAgICAiKCVzKSA9PSAoJXMpIC0t PiAlcyAhPSAlczogIiwJCQlcCisJCSAgICBfX2Z1bmNfXywgX19GSUxFX18sIF9fTElORV9fLAkJ CVwKKwkJICAgICNhLCAjYiwgYV8gPyAidHJ1ZSIgOiAiZmFsc2UiLAkJCVwKKwkJICAgIGJfID8g InRydWUiIDogImZhbHNlIik7CQkJCVwKKwkJbWFsbG9jX3NucHJpbnRmKG1lc3NhZ2UsIHNpemVv ZihtZXNzYWdlKSwgX19WQV9BUkdTX18pOwlcCisJCWlmIChtYXlfYWJvcnQpIHsJCQkJCVwKKwkJ CWFib3J0KCk7CQkJCQlcCisJCX0gZWxzZSB7CQkJCQkJXAorCQkJcF90ZXN0X2ZhaWwocHJlZml4 LCBtZXNzYWdlKTsJCQlcCisJCX0JCQkJCQkJXAorCX0JCQkJCQkJCVwKK30gd2hpbGUgKDApCisK KyNkZWZpbmUgdmVyaWZ5X2JfbmUobWF5X2Fib3J0LCBhLCBiLCAuLi4pIGRvIHsJCQkJXAorCWJv b2wgYV8gPSAoYSk7CQkJCQkJCVwKKwlib29sIGJfID0gKGIpOwkJCQkJCQlcCisJaWYgKCEoYV8g IT0gYl8pKSB7CQkJCQkJXAorCQljaGFyIHByZWZpeFtBU1NFUlRfQlVGU0laRV07CQkJCVwKKwkJ Y2hhciBtZXNzYWdlW0FTU0VSVF9CVUZTSVpFXTsJCQkJXAorCQltYWxsb2Nfc25wcmludGYocHJl Zml4LCBzaXplb2YocHJlZml4KSwJCQlcCisJCSAgICAiJXM6JXM6JWQ6IEZhaWxlZCBhc3NlcnRp b246ICIJCQlcCisJCSAgICAiKCVzKSAhPSAoJXMpIC0tPiAlcyA9PSAlczogIiwJCQlcCisJCSAg ICBfX2Z1bmNfXywgX19GSUxFX18sIF9fTElORV9fLAkJCVwKKwkJICAgICNhLCAjYiwgYV8gPyAi dHJ1ZSIgOiAiZmFsc2UiLAkJCVwKKwkJICAgIGJfID8gInRydWUiIDogImZhbHNlIik7CQkJCVwK KwkJbWFsbG9jX3NucHJpbnRmKG1lc3NhZ2UsIHNpemVvZihtZXNzYWdlKSwgX19WQV9BUkdTX18p OwlcCisJCWlmIChtYXlfYWJvcnQpIHsJCQkJCVwKKwkJCWFib3J0KCk7CQkJCQlcCisJCX0gZWxz ZSB7CQkJCQkJXAorCQkJcF90ZXN0X2ZhaWwocHJlZml4LCBtZXNzYWdlKTsJCQlcCisJCX0JCQkJ CQkJXAorCX0JCQkJCQkJCVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgZXhwZWN0X2JfZXEoYSwg YiwgLi4uKQl2ZXJpZnlfYl9lcShmYWxzZSwgYSwgYiwgX19WQV9BUkdTX18pCisjZGVmaW5lIGV4 cGVjdF9iX25lKGEsIGIsIC4uLikJdmVyaWZ5X2JfbmUoZmFsc2UsIGEsIGIsIF9fVkFfQVJHU19f KQorCisjZGVmaW5lIGV4cGVjdF90cnVlKGEsIC4uLikJZXhwZWN0X2JfZXEoYSwgdHJ1ZSwgX19W QV9BUkdTX18pCisjZGVmaW5lIGV4cGVjdF9mYWxzZShhLCAuLi4pCWV4cGVjdF9iX2VxKGEsIGZh bHNlLCBfX1ZBX0FSR1NfXykKKworI2RlZmluZSB2ZXJpZnlfc3RyX2VxKG1heV9hYm9ydCwgYSwg YiwgLi4uKSBkbyB7CQkJXAorCWlmIChzdHJjbXAoKGEpLCAoYikpKSB7CQkJCQkJXAorCQljaGFy IHByZWZpeFtBU1NFUlRfQlVGU0laRV07CQkJCVwKKwkJY2hhciBtZXNzYWdlW0FTU0VSVF9CVUZT SVpFXTsJCQkJXAorCQltYWxsb2Nfc25wcmludGYocHJlZml4LCBzaXplb2YocHJlZml4KSwJCQlc CisJCSAgICAiJXM6JXM6JWQ6IEZhaWxlZCBhc3NlcnRpb246ICIJCQlcCisJCSAgICAiKCVzKSBz YW1lIGFzICglcykgLS0+ICIJCQkJXAorCQkgICAgIlwiJXNcIiBkaWZmZXJzIGZyb20gXCIlc1wi OiAiLAkJCVwKKwkJICAgIF9fZnVuY19fLCBfX0ZJTEVfXywgX19MSU5FX18sICNhLCAjYiwgYSwg Yik7CVwKKwkJbWFsbG9jX3NucHJpbnRmKG1lc3NhZ2UsIHNpemVvZihtZXNzYWdlKSwgX19WQV9B UkdTX18pOwlcCisJCWlmIChtYXlfYWJvcnQpIHsJCQkJCVwKKwkJCWFib3J0KCk7CQkJCQlcCisJ CX0gZWxzZSB7CQkJCQkJXAorCQkJcF90ZXN0X2ZhaWwocHJlZml4LCBtZXNzYWdlKTsJCQlcCisJ CX0JCQkJCQkJXAorCX0JCQkJCQkJCVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgdmVyaWZ5X3N0 cl9uZShtYXlfYWJvcnQsIGEsIGIsIC4uLikgZG8gewkJCVwKKwlpZiAoIXN0cmNtcCgoYSksIChi KSkpIHsJCQkJCVwKKwkJY2hhciBwcmVmaXhbQVNTRVJUX0JVRlNJWkVdOwkJCQlcCisJCWNoYXIg bWVzc2FnZVtBU1NFUlRfQlVGU0laRV07CQkJCVwKKwkJbWFsbG9jX3NucHJpbnRmKHByZWZpeCwg c2l6ZW9mKHByZWZpeCksCQkJXAorCQkgICAgIiVzOiVzOiVkOiBGYWlsZWQgYXNzZXJ0aW9uOiAi CQkJXAorCQkgICAgIiglcykgZGlmZmVycyBmcm9tICglcykgLS0+ICIJCQlcCisJCSAgICAiXCIl c1wiIHNhbWUgYXMgXCIlc1wiOiAiLAkJCQlcCisJCSAgICBfX2Z1bmNfXywgX19GSUxFX18sIF9f TElORV9fLCAjYSwgI2IsIGEsIGIpOwlcCisJCW1hbGxvY19zbnByaW50ZihtZXNzYWdlLCBzaXpl b2YobWVzc2FnZSksIF9fVkFfQVJHU19fKTsJXAorCQlpZiAobWF5X2Fib3J0KSB7CQkJCQlcCisJ CQlhYm9ydCgpOwkJCQkJXAorCQl9IGVsc2UgewkJCQkJCVwKKwkJCXBfdGVzdF9mYWlsKHByZWZp eCwgbWVzc2FnZSk7CQkJXAorCQl9CQkJCQkJCVwKKwl9CQkJCQkJCQlcCit9IHdoaWxlICgwKQor CisjZGVmaW5lIGV4cGVjdF9zdHJfZXEoYSwgYiwgLi4uKSB2ZXJpZnlfc3RyX2VxKGZhbHNlLCBh LCBiLCBfX1ZBX0FSR1NfXykKKyNkZWZpbmUgZXhwZWN0X3N0cl9uZShhLCBiLCAuLi4pIHZlcmlm eV9zdHJfbmUoZmFsc2UsIGEsIGIsIF9fVkFfQVJHU19fKQorCisjZGVmaW5lIHZlcmlmeV9ub3Rf cmVhY2hlZChtYXlfYWJvcnQsIC4uLikgZG8gewkJCQlcCisJY2hhciBwcmVmaXhbQVNTRVJUX0JV RlNJWkVdOwkJCQkJXAorCWNoYXIgbWVzc2FnZVtBU1NFUlRfQlVGU0laRV07CQkJCQlcCisJbWFs bG9jX3NucHJpbnRmKHByZWZpeCwgc2l6ZW9mKHByZWZpeCksCQkJCVwKKwkgICAgIiVzOiVzOiVk OiBVbnJlYWNoYWJsZSBjb2RlIHJlYWNoZWQ6ICIsCQkJXAorCSAgICBfX2Z1bmNfXywgX19GSUxF X18sIF9fTElORV9fKTsJCQkJXAorCW1hbGxvY19zbnByaW50ZihtZXNzYWdlLCBzaXplb2YobWVz c2FnZSksIF9fVkFfQVJHU19fKTsJCVwKKwlpZiAobWF5X2Fib3J0KSB7CQkJCQkJXAorCQlhYm9y dCgpOwkJCQkJCVwKKwl9IGVsc2UgewkJCQkJCQlcCisJCXBfdGVzdF9mYWlsKHByZWZpeCwgbWVz c2FnZSk7CQkJCVwKKwl9CQkJCQkJCQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIGV4cGVjdF9u b3RfcmVhY2hlZCguLi4pIHZlcmlmeV9ub3RfcmVhY2hlZChmYWxzZSwgX19WQV9BUkdTX18pCisK KyNkZWZpbmUgYXNzZXJ0X2NtcCh0LCBhLCBiLCBjbXAsIG5lZ19jbXAsIHByaSwgLi4uKSB2ZXJp ZnlfY21wKHRydWUsCVwKKyAgICB0LCBhLCBiLCBjbXAsIG5lZ19jbXAsIHByaSwgX19WQV9BUkdT X18pCisKKyNkZWZpbmUgYXNzZXJ0X3B0cl9lcShhLCBiLCAuLi4pCWFzc2VydF9jbXAodm9pZCAq LCBhLCBiLCA9PSwJXAorICAgICE9LCAicCIsIF9fVkFfQVJHU19fKQorI2RlZmluZSBhc3NlcnRf cHRyX25lKGEsIGIsIC4uLikJYXNzZXJ0X2NtcCh2b2lkICosIGEsIGIsICE9LAlcCisgICAgPT0s ICJwIiwgX19WQV9BUkdTX18pCisjZGVmaW5lIGFzc2VydF9wdHJfbnVsbChhLCAuLi4pCQlhc3Nl cnRfY21wKHZvaWQgKiwgYSwgTlVMTCwgPT0sCVwKKyAgICAhPSwgInAiLCBfX1ZBX0FSR1NfXykK KyNkZWZpbmUgYXNzZXJ0X3B0cl9ub3RfbnVsbChhLCAuLi4pCWFzc2VydF9jbXAodm9pZCAqLCBh LCBOVUxMLCAhPSwJXAorICAgID09LCAicCIsIF9fVkFfQVJHU19fKQorCisjZGVmaW5lIGFzc2Vy dF9jX2VxKGEsIGIsIC4uLikJYXNzZXJ0X2NtcChjaGFyLCBhLCBiLCA9PSwgIT0sICJjIiwgX19W QV9BUkdTX18pCisjZGVmaW5lIGFzc2VydF9jX25lKGEsIGIsIC4uLikJYXNzZXJ0X2NtcChjaGFy LCBhLCBiLCAhPSwgPT0sICJjIiwgX19WQV9BUkdTX18pCisjZGVmaW5lIGFzc2VydF9jX2x0KGEs IGIsIC4uLikJYXNzZXJ0X2NtcChjaGFyLCBhLCBiLCA8LCA+PSwgImMiLCBfX1ZBX0FSR1NfXykK KyNkZWZpbmUgYXNzZXJ0X2NfbGUoYSwgYiwgLi4uKQlhc3NlcnRfY21wKGNoYXIsIGEsIGIsIDw9 LCA+LCAiYyIsIF9fVkFfQVJHU19fKQorI2RlZmluZSBhc3NlcnRfY19nZShhLCBiLCAuLi4pCWFz c2VydF9jbXAoY2hhciwgYSwgYiwgPj0sIDwsICJjIiwgX19WQV9BUkdTX18pCisjZGVmaW5lIGFz c2VydF9jX2d0KGEsIGIsIC4uLikJYXNzZXJ0X2NtcChjaGFyLCBhLCBiLCA+LCA8PSwgImMiLCBf X1ZBX0FSR1NfXykKKworI2RlZmluZSBhc3NlcnRfeF9lcShhLCBiLCAuLi4pCWFzc2VydF9jbXAo aW50LCBhLCBiLCA9PSwgIT0sICIjeCIsIF9fVkFfQVJHU19fKQorI2RlZmluZSBhc3NlcnRfeF9u ZShhLCBiLCAuLi4pCWFzc2VydF9jbXAoaW50LCBhLCBiLCAhPSwgPT0sICIjeCIsIF9fVkFfQVJH U19fKQorI2RlZmluZSBhc3NlcnRfeF9sdChhLCBiLCAuLi4pCWFzc2VydF9jbXAoaW50LCBhLCBi LCA8LCA+PSwgIiN4IiwgX19WQV9BUkdTX18pCisjZGVmaW5lIGFzc2VydF94X2xlKGEsIGIsIC4u LikJYXNzZXJ0X2NtcChpbnQsIGEsIGIsIDw9LCA+LCAiI3giLCBfX1ZBX0FSR1NfXykKKyNkZWZp bmUgYXNzZXJ0X3hfZ2UoYSwgYiwgLi4uKQlhc3NlcnRfY21wKGludCwgYSwgYiwgPj0sIDwsICIj eCIsIF9fVkFfQVJHU19fKQorI2RlZmluZSBhc3NlcnRfeF9ndChhLCBiLCAuLi4pCWFzc2VydF9j bXAoaW50LCBhLCBiLCA+LCA8PSwgIiN4IiwgX19WQV9BUkdTX18pCisKKyNkZWZpbmUgYXNzZXJ0 X2RfZXEoYSwgYiwgLi4uKQlhc3NlcnRfY21wKGludCwgYSwgYiwgPT0sICE9LCAiZCIsIF9fVkFf QVJHU19fKQorI2RlZmluZSBhc3NlcnRfZF9uZShhLCBiLCAuLi4pCWFzc2VydF9jbXAoaW50LCBh LCBiLCAhPSwgPT0sICJkIiwgX19WQV9BUkdTX18pCisjZGVmaW5lIGFzc2VydF9kX2x0KGEsIGIs IC4uLikJYXNzZXJ0X2NtcChpbnQsIGEsIGIsIDwsID49LCAiZCIsIF9fVkFfQVJHU19fKQorI2Rl ZmluZSBhc3NlcnRfZF9sZShhLCBiLCAuLi4pCWFzc2VydF9jbXAoaW50LCBhLCBiLCA8PSwgPiwg ImQiLCBfX1ZBX0FSR1NfXykKKyNkZWZpbmUgYXNzZXJ0X2RfZ2UoYSwgYiwgLi4uKQlhc3NlcnRf Y21wKGludCwgYSwgYiwgPj0sIDwsICJkIiwgX19WQV9BUkdTX18pCisjZGVmaW5lIGFzc2VydF9k X2d0KGEsIGIsIC4uLikJYXNzZXJ0X2NtcChpbnQsIGEsIGIsID4sIDw9LCAiZCIsIF9fVkFfQVJH U19fKQorCisjZGVmaW5lIGFzc2VydF91X2VxKGEsIGIsIC4uLikJYXNzZXJ0X2NtcChpbnQsIGEs IGIsID09LCAhPSwgInUiLCBfX1ZBX0FSR1NfXykKKyNkZWZpbmUgYXNzZXJ0X3VfbmUoYSwgYiwg Li4uKQlhc3NlcnRfY21wKGludCwgYSwgYiwgIT0sID09LCAidSIsIF9fVkFfQVJHU19fKQorI2Rl ZmluZSBhc3NlcnRfdV9sdChhLCBiLCAuLi4pCWFzc2VydF9jbXAoaW50LCBhLCBiLCA8LCA+PSwg InUiLCBfX1ZBX0FSR1NfXykKKyNkZWZpbmUgYXNzZXJ0X3VfbGUoYSwgYiwgLi4uKQlhc3NlcnRf Y21wKGludCwgYSwgYiwgPD0sID4sICJ1IiwgX19WQV9BUkdTX18pCisjZGVmaW5lIGFzc2VydF91 X2dlKGEsIGIsIC4uLikJYXNzZXJ0X2NtcChpbnQsIGEsIGIsID49LCA8LCAidSIsIF9fVkFfQVJH U19fKQorI2RlZmluZSBhc3NlcnRfdV9ndChhLCBiLCAuLi4pCWFzc2VydF9jbXAoaW50LCBhLCBi LCA+LCA8PSwgInUiLCBfX1ZBX0FSR1NfXykKKworI2RlZmluZSBhc3NlcnRfbGRfZXEoYSwgYiwg Li4uKQlhc3NlcnRfY21wKGxvbmcsIGEsIGIsID09LAlcCisgICAgIT0sICJsZCIsIF9fVkFfQVJH U19fKQorI2RlZmluZSBhc3NlcnRfbGRfbmUoYSwgYiwgLi4uKQlhc3NlcnRfY21wKGxvbmcsIGEs IGIsICE9LAlcCisgICAgPT0sICJsZCIsIF9fVkFfQVJHU19fKQorI2RlZmluZSBhc3NlcnRfbGRf bHQoYSwgYiwgLi4uKQlhc3NlcnRfY21wKGxvbmcsIGEsIGIsIDwsCVwKKyAgICA+PSwgImxkIiwg X19WQV9BUkdTX18pCisjZGVmaW5lIGFzc2VydF9sZF9sZShhLCBiLCAuLi4pCWFzc2VydF9jbXAo bG9uZywgYSwgYiwgPD0sCVwKKyAgICA+LCAibGQiLCBfX1ZBX0FSR1NfXykKKyNkZWZpbmUgYXNz ZXJ0X2xkX2dlKGEsIGIsIC4uLikJYXNzZXJ0X2NtcChsb25nLCBhLCBiLCA+PSwJXAorICAgIDws ICJsZCIsIF9fVkFfQVJHU19fKQorI2RlZmluZSBhc3NlcnRfbGRfZ3QoYSwgYiwgLi4uKQlhc3Nl cnRfY21wKGxvbmcsIGEsIGIsID4sCVwKKyAgICA8PSwgImxkIiwgX19WQV9BUkdTX18pCisKKyNk ZWZpbmUgYXNzZXJ0X2x1X2VxKGEsIGIsIC4uLikJYXNzZXJ0X2NtcCh1bnNpZ25lZCBsb25nLAlc CisgICAgYSwgYiwgPT0sICE9LCAibHUiLCBfX1ZBX0FSR1NfXykKKyNkZWZpbmUgYXNzZXJ0X2x1 X25lKGEsIGIsIC4uLikJYXNzZXJ0X2NtcCh1bnNpZ25lZCBsb25nLAlcCisgICAgYSwgYiwgIT0s ID09LCAibHUiLCBfX1ZBX0FSR1NfXykKKyNkZWZpbmUgYXNzZXJ0X2x1X2x0KGEsIGIsIC4uLikJ YXNzZXJ0X2NtcCh1bnNpZ25lZCBsb25nLAlcCisgICAgYSwgYiwgPCwgPj0sICJsdSIsIF9fVkFf QVJHU19fKQorI2RlZmluZSBhc3NlcnRfbHVfbGUoYSwgYiwgLi4uKQlhc3NlcnRfY21wKHVuc2ln bmVkIGxvbmcsCVwKKyAgICBhLCBiLCA8PSwgPiwgImx1IiwgX19WQV9BUkdTX18pCisjZGVmaW5l IGFzc2VydF9sdV9nZShhLCBiLCAuLi4pCWFzc2VydF9jbXAodW5zaWduZWQgbG9uZywJXAorICAg IGEsIGIsID49LCA8LCAibHUiLCBfX1ZBX0FSR1NfXykKKyNkZWZpbmUgYXNzZXJ0X2x1X2d0KGEs IGIsIC4uLikJYXNzZXJ0X2NtcCh1bnNpZ25lZCBsb25nLAlcCisgICAgYSwgYiwgPiwgPD0sICJs dSIsIF9fVkFfQVJHU19fKQorCisjZGVmaW5lIGFzc2VydF9xZF9lcShhLCBiLCAuLi4pCWFzc2Vy dF9jbXAobG9uZyBsb25nLCBhLCBiLCA9PSwJXAorICAgICE9LCAicWQiLCBfX1ZBX0FSR1NfXykK KyNkZWZpbmUgYXNzZXJ0X3FkX25lKGEsIGIsIC4uLikJYXNzZXJ0X2NtcChsb25nIGxvbmcsIGEs IGIsICE9LAlcCisgICAgPT0sICJxZCIsIF9fVkFfQVJHU19fKQorI2RlZmluZSBhc3NlcnRfcWRf bHQoYSwgYiwgLi4uKQlhc3NlcnRfY21wKGxvbmcgbG9uZywgYSwgYiwgPCwJXAorICAgID49LCAi cWQiLCBfX1ZBX0FSR1NfXykKKyNkZWZpbmUgYXNzZXJ0X3FkX2xlKGEsIGIsIC4uLikJYXNzZXJ0 X2NtcChsb25nIGxvbmcsIGEsIGIsIDw9LAlcCisgICAgPiwgInFkIiwgX19WQV9BUkdTX18pCisj ZGVmaW5lIGFzc2VydF9xZF9nZShhLCBiLCAuLi4pCWFzc2VydF9jbXAobG9uZyBsb25nLCBhLCBi LCA+PSwJXAorICAgIDwsICJxZCIsIF9fVkFfQVJHU19fKQorI2RlZmluZSBhc3NlcnRfcWRfZ3Qo YSwgYiwgLi4uKQlhc3NlcnRfY21wKGxvbmcgbG9uZywgYSwgYiwgPiwJXAorICAgIDw9LCAicWQi LCBfX1ZBX0FSR1NfXykKKworI2RlZmluZSBhc3NlcnRfcXVfZXEoYSwgYiwgLi4uKQlhc3NlcnRf Y21wKHVuc2lnbmVkIGxvbmcgbG9uZywJXAorICAgIGEsIGIsID09LCAhPSwgInF1IiwgX19WQV9B UkdTX18pCisjZGVmaW5lIGFzc2VydF9xdV9uZShhLCBiLCAuLi4pCWFzc2VydF9jbXAodW5zaWdu ZWQgbG9uZyBsb25nLAlcCisgICAgYSwgYiwgIT0sID09LCAicXUiLCBfX1ZBX0FSR1NfXykKKyNk ZWZpbmUgYXNzZXJ0X3F1X2x0KGEsIGIsIC4uLikJYXNzZXJ0X2NtcCh1bnNpZ25lZCBsb25nIGxv bmcsCVwKKyAgICBhLCBiLCA8LCA+PSwgInF1IiwgX19WQV9BUkdTX18pCisjZGVmaW5lIGFzc2Vy dF9xdV9sZShhLCBiLCAuLi4pCWFzc2VydF9jbXAodW5zaWduZWQgbG9uZyBsb25nLAlcCisgICAg YSwgYiwgPD0sID4sICJxdSIsIF9fVkFfQVJHU19fKQorI2RlZmluZSBhc3NlcnRfcXVfZ2UoYSwg YiwgLi4uKQlhc3NlcnRfY21wKHVuc2lnbmVkIGxvbmcgbG9uZywJXAorICAgIGEsIGIsID49LCA8 LCAicXUiLCBfX1ZBX0FSR1NfXykKKyNkZWZpbmUgYXNzZXJ0X3F1X2d0KGEsIGIsIC4uLikJYXNz ZXJ0X2NtcCh1bnNpZ25lZCBsb25nIGxvbmcsCVwKKyAgICBhLCBiLCA+LCA8PSwgInF1IiwgX19W QV9BUkdTX18pCisKKyNkZWZpbmUgYXNzZXJ0X2pkX2VxKGEsIGIsIC4uLikJYXNzZXJ0X2NtcChp bnRtYXhfdCwgYSwgYiwgPT0sCVwKKyAgICAhPSwgImpkIiwgX19WQV9BUkdTX18pCisjZGVmaW5l IGFzc2VydF9qZF9uZShhLCBiLCAuLi4pCWFzc2VydF9jbXAoaW50bWF4X3QsIGEsIGIsICE9LAlc CisgICAgPT0sICJqZCIsIF9fVkFfQVJHU19fKQorI2RlZmluZSBhc3NlcnRfamRfbHQoYSwgYiwg Li4uKQlhc3NlcnRfY21wKGludG1heF90LCBhLCBiLCA8LAlcCisgICAgPj0sICJqZCIsIF9fVkFf QVJHU19fKQorI2RlZmluZSBhc3NlcnRfamRfbGUoYSwgYiwgLi4uKQlhc3NlcnRfY21wKGludG1h eF90LCBhLCBiLCA8PSwJXAorICAgID4sICJqZCIsIF9fVkFfQVJHU19fKQorI2RlZmluZSBhc3Nl cnRfamRfZ2UoYSwgYiwgLi4uKQlhc3NlcnRfY21wKGludG1heF90LCBhLCBiLCA+PSwJXAorICAg IDwsICJqZCIsIF9fVkFfQVJHU19fKQorI2RlZmluZSBhc3NlcnRfamRfZ3QoYSwgYiwgLi4uKQlh c3NlcnRfY21wKGludG1heF90LCBhLCBiLCA+LAlcCisgICAgPD0sICJqZCIsIF9fVkFfQVJHU19f KQorCisjZGVmaW5lIGFzc2VydF9qdV9lcShhLCBiLCAuLi4pCWFzc2VydF9jbXAodWludG1heF90 LCBhLCBiLCA9PSwJXAorICAgICE9LCAianUiLCBfX1ZBX0FSR1NfXykKKyNkZWZpbmUgYXNzZXJ0 X2p1X25lKGEsIGIsIC4uLikJYXNzZXJ0X2NtcCh1aW50bWF4X3QsIGEsIGIsICE9LAlcCisgICAg PT0sICJqdSIsIF9fVkFfQVJHU19fKQorI2RlZmluZSBhc3NlcnRfanVfbHQoYSwgYiwgLi4uKQlh c3NlcnRfY21wKHVpbnRtYXhfdCwgYSwgYiwgPCwJXAorICAgID49LCAianUiLCBfX1ZBX0FSR1Nf XykKKyNkZWZpbmUgYXNzZXJ0X2p1X2xlKGEsIGIsIC4uLikJYXNzZXJ0X2NtcCh1aW50bWF4X3Qs IGEsIGIsIDw9LAlcCisgICAgPiwgImp1IiwgX19WQV9BUkdTX18pCisjZGVmaW5lIGFzc2VydF9q dV9nZShhLCBiLCAuLi4pCWFzc2VydF9jbXAodWludG1heF90LCBhLCBiLCA+PSwJXAorICAgIDws ICJqdSIsIF9fVkFfQVJHU19fKQorI2RlZmluZSBhc3NlcnRfanVfZ3QoYSwgYiwgLi4uKQlhc3Nl cnRfY21wKHVpbnRtYXhfdCwgYSwgYiwgPiwJXAorICAgIDw9LCAianUiLCBfX1ZBX0FSR1NfXykK KworI2RlZmluZSBhc3NlcnRfemRfZXEoYSwgYiwgLi4uKQlhc3NlcnRfY21wKHNzaXplX3QsIGEs IGIsID09LAlcCisgICAgIT0sICJ6ZCIsIF9fVkFfQVJHU19fKQorI2RlZmluZSBhc3NlcnRfemRf bmUoYSwgYiwgLi4uKQlhc3NlcnRfY21wKHNzaXplX3QsIGEsIGIsICE9LAlcCisgICAgPT0sICJ6 ZCIsIF9fVkFfQVJHU19fKQorI2RlZmluZSBhc3NlcnRfemRfbHQoYSwgYiwgLi4uKQlhc3NlcnRf Y21wKHNzaXplX3QsIGEsIGIsIDwsCVwKKyAgICA+PSwgInpkIiwgX19WQV9BUkdTX18pCisjZGVm aW5lIGFzc2VydF96ZF9sZShhLCBiLCAuLi4pCWFzc2VydF9jbXAoc3NpemVfdCwgYSwgYiwgPD0s CVwKKyAgICA+LCAiemQiLCBfX1ZBX0FSR1NfXykKKyNkZWZpbmUgYXNzZXJ0X3pkX2dlKGEsIGIs IC4uLikJYXNzZXJ0X2NtcChzc2l6ZV90LCBhLCBiLCA+PSwJXAorICAgIDwsICJ6ZCIsIF9fVkFf QVJHU19fKQorI2RlZmluZSBhc3NlcnRfemRfZ3QoYSwgYiwgLi4uKQlhc3NlcnRfY21wKHNzaXpl X3QsIGEsIGIsID4sCVwKKyAgICA8PSwgInpkIiwgX19WQV9BUkdTX18pCisKKyNkZWZpbmUgYXNz ZXJ0X3p1X2VxKGEsIGIsIC4uLikJYXNzZXJ0X2NtcChzaXplX3QsIGEsIGIsID09LAlcCisgICAg IT0sICJ6dSIsIF9fVkFfQVJHU19fKQorI2RlZmluZSBhc3NlcnRfenVfbmUoYSwgYiwgLi4uKQlh c3NlcnRfY21wKHNpemVfdCwgYSwgYiwgIT0sCVwKKyAgICA9PSwgInp1IiwgX19WQV9BUkdTX18p CisjZGVmaW5lIGFzc2VydF96dV9sdChhLCBiLCAuLi4pCWFzc2VydF9jbXAoc2l6ZV90LCBhLCBi LCA8LAlcCisgICAgPj0sICJ6dSIsIF9fVkFfQVJHU19fKQorI2RlZmluZSBhc3NlcnRfenVfbGUo YSwgYiwgLi4uKQlhc3NlcnRfY21wKHNpemVfdCwgYSwgYiwgPD0sCVwKKyAgICA+LCAienUiLCBf X1ZBX0FSR1NfXykKKyNkZWZpbmUgYXNzZXJ0X3p1X2dlKGEsIGIsIC4uLikJYXNzZXJ0X2NtcChz aXplX3QsIGEsIGIsID49LAlcCisgICAgPCwgInp1IiwgX19WQV9BUkdTX18pCisjZGVmaW5lIGFz c2VydF96dV9ndChhLCBiLCAuLi4pCWFzc2VydF9jbXAoc2l6ZV90LCBhLCBiLCA+LAlcCisgICAg PD0sICJ6dSIsIF9fVkFfQVJHU19fKQorCisjZGVmaW5lIGFzc2VydF9kMzJfZXEoYSwgYiwgLi4u KQlhc3NlcnRfY21wKGludDMyX3QsIGEsIGIsID09LAlcCisgICAgIT0sIEZNVGQzMiwgX19WQV9B UkdTX18pCisjZGVmaW5lIGFzc2VydF9kMzJfbmUoYSwgYiwgLi4uKQlhc3NlcnRfY21wKGludDMy X3QsIGEsIGIsICE9LAlcCisgICAgPT0sIEZNVGQzMiwgX19WQV9BUkdTX18pCisjZGVmaW5lIGFz c2VydF9kMzJfbHQoYSwgYiwgLi4uKQlhc3NlcnRfY21wKGludDMyX3QsIGEsIGIsIDwsCVwKKyAg ICA+PSwgRk1UZDMyLCBfX1ZBX0FSR1NfXykKKyNkZWZpbmUgYXNzZXJ0X2QzMl9sZShhLCBiLCAu Li4pCWFzc2VydF9jbXAoaW50MzJfdCwgYSwgYiwgPD0sCVwKKyAgICA+LCBGTVRkMzIsIF9fVkFf QVJHU19fKQorI2RlZmluZSBhc3NlcnRfZDMyX2dlKGEsIGIsIC4uLikJYXNzZXJ0X2NtcChpbnQz Ml90LCBhLCBiLCA+PSwJXAorICAgIDwsIEZNVGQzMiwgX19WQV9BUkdTX18pCisjZGVmaW5lIGFz c2VydF9kMzJfZ3QoYSwgYiwgLi4uKQlhc3NlcnRfY21wKGludDMyX3QsIGEsIGIsID4sCVwKKyAg ICA8PSwgRk1UZDMyLCBfX1ZBX0FSR1NfXykKKworI2RlZmluZSBhc3NlcnRfdTMyX2VxKGEsIGIs IC4uLikJYXNzZXJ0X2NtcCh1aW50MzJfdCwgYSwgYiwgPT0sCVwKKyAgICAhPSwgRk1UdTMyLCBf X1ZBX0FSR1NfXykKKyNkZWZpbmUgYXNzZXJ0X3UzMl9uZShhLCBiLCAuLi4pCWFzc2VydF9jbXAo dWludDMyX3QsIGEsIGIsICE9LAlcCisgICAgPT0sIEZNVHUzMiwgX19WQV9BUkdTX18pCisjZGVm aW5lIGFzc2VydF91MzJfbHQoYSwgYiwgLi4uKQlhc3NlcnRfY21wKHVpbnQzMl90LCBhLCBiLCA8 LAlcCisgICAgPj0sIEZNVHUzMiwgX19WQV9BUkdTX18pCisjZGVmaW5lIGFzc2VydF91MzJfbGUo YSwgYiwgLi4uKQlhc3NlcnRfY21wKHVpbnQzMl90LCBhLCBiLCA8PSwJXAorICAgID4sIEZNVHUz MiwgX19WQV9BUkdTX18pCisjZGVmaW5lIGFzc2VydF91MzJfZ2UoYSwgYiwgLi4uKQlhc3NlcnRf Y21wKHVpbnQzMl90LCBhLCBiLCA+PSwJXAorICAgIDwsIEZNVHUzMiwgX19WQV9BUkdTX18pCisj ZGVmaW5lIGFzc2VydF91MzJfZ3QoYSwgYiwgLi4uKQlhc3NlcnRfY21wKHVpbnQzMl90LCBhLCBi LCA+LAlcCisgICAgPD0sIEZNVHUzMiwgX19WQV9BUkdTX18pCisKKyNkZWZpbmUgYXNzZXJ0X2Q2 NF9lcShhLCBiLCAuLi4pCWFzc2VydF9jbXAoaW50NjRfdCwgYSwgYiwgPT0sCVwKKyAgICAhPSwg Rk1UZDY0LCBfX1ZBX0FSR1NfXykKKyNkZWZpbmUgYXNzZXJ0X2Q2NF9uZShhLCBiLCAuLi4pCWFz c2VydF9jbXAoaW50NjRfdCwgYSwgYiwgIT0sCVwKKyAgICA9PSwgRk1UZDY0LCBfX1ZBX0FSR1Nf XykKKyNkZWZpbmUgYXNzZXJ0X2Q2NF9sdChhLCBiLCAuLi4pCWFzc2VydF9jbXAoaW50NjRfdCwg YSwgYiwgPCwJXAorICAgID49LCBGTVRkNjQsIF9fVkFfQVJHU19fKQorI2RlZmluZSBhc3NlcnRf ZDY0X2xlKGEsIGIsIC4uLikJYXNzZXJ0X2NtcChpbnQ2NF90LCBhLCBiLCA8PSwJXAorICAgID4s IEZNVGQ2NCwgX19WQV9BUkdTX18pCisjZGVmaW5lIGFzc2VydF9kNjRfZ2UoYSwgYiwgLi4uKQlh c3NlcnRfY21wKGludDY0X3QsIGEsIGIsID49LAlcCisgICAgPCwgRk1UZDY0LCBfX1ZBX0FSR1Nf XykKKyNkZWZpbmUgYXNzZXJ0X2Q2NF9ndChhLCBiLCAuLi4pCWFzc2VydF9jbXAoaW50NjRfdCwg YSwgYiwgPiwJXAorICAgIDw9LCBGTVRkNjQsIF9fVkFfQVJHU19fKQorCisjZGVmaW5lIGFzc2Vy dF91NjRfZXEoYSwgYiwgLi4uKQlhc3NlcnRfY21wKHVpbnQ2NF90LCBhLCBiLCA9PSwJXAorICAg ICE9LCBGTVR1NjQsIF9fVkFfQVJHU19fKQorI2RlZmluZSBhc3NlcnRfdTY0X25lKGEsIGIsIC4u LikJYXNzZXJ0X2NtcCh1aW50NjRfdCwgYSwgYiwgIT0sCVwKKyAgICA9PSwgRk1UdTY0LCBfX1ZB X0FSR1NfXykKKyNkZWZpbmUgYXNzZXJ0X3U2NF9sdChhLCBiLCAuLi4pCWFzc2VydF9jbXAodWlu dDY0X3QsIGEsIGIsIDwsCVwKKyAgICA+PSwgRk1UdTY0LCBfX1ZBX0FSR1NfXykKKyNkZWZpbmUg YXNzZXJ0X3U2NF9sZShhLCBiLCAuLi4pCWFzc2VydF9jbXAodWludDY0X3QsIGEsIGIsIDw9LAlc CisgICAgPiwgRk1UdTY0LCBfX1ZBX0FSR1NfXykKKyNkZWZpbmUgYXNzZXJ0X3U2NF9nZShhLCBi LCAuLi4pCWFzc2VydF9jbXAodWludDY0X3QsIGEsIGIsID49LAlcCisgICAgPCwgRk1UdTY0LCBf X1ZBX0FSR1NfXykKKyNkZWZpbmUgYXNzZXJ0X3U2NF9ndChhLCBiLCAuLi4pCWFzc2VydF9jbXAo dWludDY0X3QsIGEsIGIsID4sCVwKKyAgICA8PSwgRk1UdTY0LCBfX1ZBX0FSR1NfXykKKworI2Rl ZmluZSBhc3NlcnRfYl9lcShhLCBiLCAuLi4pCXZlcmlmeV9iX2VxKHRydWUsIGEsIGIsIF9fVkFf QVJHU19fKQorI2RlZmluZSBhc3NlcnRfYl9uZShhLCBiLCAuLi4pCXZlcmlmeV9iX25lKHRydWUs IGEsIGIsIF9fVkFfQVJHU19fKQorCisjZGVmaW5lIGFzc2VydF90cnVlKGEsIC4uLikJYXNzZXJ0 X2JfZXEoYSwgdHJ1ZSwgX19WQV9BUkdTX18pCisjZGVmaW5lIGFzc2VydF9mYWxzZShhLCAuLi4p CWFzc2VydF9iX2VxKGEsIGZhbHNlLCBfX1ZBX0FSR1NfXykKKworI2RlZmluZSBhc3NlcnRfc3Ry X2VxKGEsIGIsIC4uLikgdmVyaWZ5X3N0cl9lcSh0cnVlLCBhLCBiLCBfX1ZBX0FSR1NfXykKKyNk ZWZpbmUgYXNzZXJ0X3N0cl9uZShhLCBiLCAuLi4pIHZlcmlmeV9zdHJfbmUodHJ1ZSwgYSwgYiwg X19WQV9BUkdTX18pCisKKyNkZWZpbmUgYXNzZXJ0X25vdF9yZWFjaGVkKC4uLikgdmVyaWZ5X25v dF9yZWFjaGVkKHRydWUsIF9fVkFfQVJHU19fKQorCisvKgorICogSWYgdGhpcyBlbnVtIGNoYW5n ZXMsIGNvcnJlc3BvbmRpbmcgY2hhbmdlcyBpbiB0ZXN0L3Rlc3Quc2guaW4gYXJlIGFsc28KKyAq IG5lY2Vzc2FyeS4KKyAqLwordHlwZWRlZiBlbnVtIHsKKwl0ZXN0X3N0YXR1c19wYXNzID0gMCwK Kwl0ZXN0X3N0YXR1c19za2lwID0gMSwKKwl0ZXN0X3N0YXR1c19mYWlsID0gMiwKKworCXRlc3Rf c3RhdHVzX2NvdW50ID0gMworfSB0ZXN0X3N0YXR1c190OworCit0eXBlZGVmIHZvaWQgKHRlc3Rf dCkodm9pZCk7CisKKyNkZWZpbmUgVEVTVF9CRUdJTihmKQkJCQkJCQlcCitzdGF0aWMgdm9pZAkJ CQkJCQkJXAorZih2b2lkKSB7CQkJCQkJCQlcCisJcF90ZXN0X2luaXQoI2YpOworCisjZGVmaW5l IFRFU1RfRU5ECQkJCQkJCVwKKwlnb3RvIGxhYmVsX3Rlc3RfZW5kOwkJCQkJCVwKK2xhYmVsX3Rl c3RfZW5kOgkJCQkJCQkJXAorCXBfdGVzdF9maW5pKCk7CQkJCQkJCVwKK30KKworI2RlZmluZSB0 ZXN0KC4uLikJCQkJCQkJXAorCXBfdGVzdChfX1ZBX0FSR1NfXywgTlVMTCkKKworI2RlZmluZSB0 ZXN0X25vX3JlZW50cmFuY3koLi4uKQkJCQkJCQlcCisJcF90ZXN0X25vX3JlZW50cmFuY3koX19W QV9BUkdTX18sIE5VTEwpCisKKyNkZWZpbmUgdGVzdF9ub19tYWxsb2NfaW5pdCguLi4pCQkJCQlc CisJcF90ZXN0X25vX21hbGxvY19pbml0KF9fVkFfQVJHU19fLCBOVUxMKQorCisjZGVmaW5lIHRl c3Rfc2tpcF9pZihlKSBkbyB7CQkJCQkJXAorCWlmIChlKSB7CQkJCQkJCVwKKwkJdGVzdF9za2lw KCIlczolczolZDogVGVzdCBza2lwcGVkOiAoJXMpIiwJCVwKKwkJICAgIF9fZnVuY19fLCBfX0ZJ TEVfXywgX19MSU5FX18sICNlKTsJCQlcCisJCWdvdG8gbGFiZWxfdGVzdF9lbmQ7CQkJCQlcCisJ fQkJCQkJCQkJXAorfSB3aGlsZSAoMCkKKworYm9vbCB0ZXN0X2lzX3JlZW50cmFudCgpOworCit2 b2lkCXRlc3Rfc2tpcChjb25zdCBjaGFyICpmb3JtYXQsIC4uLikgSkVNQUxMT0NfRk9STUFUX1BS SU5URigxLCAyKTsKK3ZvaWQJdGVzdF9mYWlsKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKSBKRU1B TExPQ19GT1JNQVRfUFJJTlRGKDEsIDIpOworCisvKiBGb3IgcHJpdmF0ZSB1c2UgYnkgbWFjcm9z LiAqLwordGVzdF9zdGF0dXNfdAlwX3Rlc3QodGVzdF90ICp0LCAuLi4pOwordGVzdF9zdGF0dXNf dAlwX3Rlc3Rfbm9fcmVlbnRyYW5jeSh0ZXN0X3QgKnQsIC4uLik7Cit0ZXN0X3N0YXR1c190CXBf dGVzdF9ub19tYWxsb2NfaW5pdCh0ZXN0X3QgKnQsIC4uLik7Cit2b2lkCXBfdGVzdF9pbml0KGNv bnN0IGNoYXIgKm5hbWUpOwordm9pZAlwX3Rlc3RfZmluaSh2b2lkKTsKK3ZvaWQJcF90ZXN0X2Zh aWwoY29uc3QgY2hhciAqcHJlZml4LCBjb25zdCBjaGFyICptZXNzYWdlKTsKCmRpZmYgLS1naXQg YS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L2luY2x1ZGUvdGVz dC90aGQuaCBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvaW5j bHVkZS90ZXN0L3RoZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3YTUx MjYKLS0tIC9kZXYvbnVsbAorKysgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01 LjMuMC90ZXN0L2luY2x1ZGUvdGVzdC90aGQuaApAQCAtMCwwICsxLDkgQEAKKy8qIEFic3RyYWN0 aW9uIGxheWVyIGZvciB0aHJlYWRpbmcgaW4gdGVzdHMuICovCisjaWZkZWYgX1dJTjMyCit0eXBl ZGVmIEhBTkRMRSB0aGRfdDsKKyNlbHNlCit0eXBlZGVmIHB0aHJlYWRfdCB0aGRfdDsKKyNlbmRp ZgorCit2b2lkCXRoZF9jcmVhdGUodGhkX3QgKnRoZCwgdm9pZCAqKCpwcm9jKSh2b2lkICopLCB2 b2lkICphcmcpOwordm9pZAl0aGRfam9pbih0aGRfdCB0aGQsIHZvaWQgKipyZXQpOwoKZGlmZiAt LWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvaW5jbHVk ZS90ZXN0L3RpbWVyLmggYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90 ZXN0L2luY2x1ZGUvdGVzdC90aW1lci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAuLmFjZTYxOTEKLS0tIC9kZXYvbnVsbAorKysgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9q ZW1hbGxvYy01LjMuMC90ZXN0L2luY2x1ZGUvdGVzdC90aW1lci5oCkBAIC0wLDAgKzEsMTEgQEAK Ky8qIFNpbXBsZSB0aW1lciwgZm9yIHVzZSBpbiBiZW5jaG1hcmsgcmVwb3J0aW5nLiAqLworCit0 eXBlZGVmIHN0cnVjdCB7CisJbnN0aW1lX3QgdDA7CisJbnN0aW1lX3QgdDE7Cit9IHRpbWVkZWx0 YV90OworCit2b2lkCXRpbWVyX3N0YXJ0KHRpbWVkZWx0YV90ICp0aW1lcik7Cit2b2lkCXRpbWVy X3N0b3AodGltZWRlbHRhX3QgKnRpbWVyKTsKK3VpbnQ2NF90CXRpbWVyX3VzZWMoY29uc3QgdGlt ZWRlbHRhX3QgKnRpbWVyKTsKK3ZvaWQJdGltZXJfcmF0aW8odGltZWRlbHRhX3QgKmEsIHRpbWVk ZWx0YV90ICpiLCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pOwoKZGlmZiAtLWdpdCBhLzM4OS1k cy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvaW50ZWdyYXRpb24vTUFMTE9D WF9BUkVOQS5jIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC9p bnRlZ3JhdGlvbi9NQUxMT0NYX0FSRU5BLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMC4uN2U2MWRmMAotLS0gL2Rldi9udWxsCisrKyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxk L2plbWFsbG9jLTUuMy4wL3Rlc3QvaW50ZWdyYXRpb24vTUFMTE9DWF9BUkVOQS5jCkBAIC0wLDAg KzEsNjYgQEAKKyNpbmNsdWRlICJ0ZXN0L2plbWFsbG9jX3Rlc3QuaCIKKworI2RlZmluZSBOVEhS RUFEUyAxMAorCitzdGF0aWMgYm9vbCBoYXZlX2RzcyA9CisjaWZkZWYgSkVNQUxMT0NfRFNTCisg ICAgdHJ1ZQorI2Vsc2UKKyAgICBmYWxzZQorI2VuZGlmCisgICAgOworCit2b2lkICoKK3RoZF9z dGFydCh2b2lkICphcmcpIHsKKwl1bnNpZ25lZCB0aHJlYWRfaW5kID0gKHVuc2lnbmVkKSh1aW50 cHRyX3QpYXJnOworCXVuc2lnbmVkIGFyZW5hX2luZDsKKwl2b2lkICpwOworCXNpemVfdCBzejsK KworCXN6ID0gc2l6ZW9mKGFyZW5hX2luZCk7CisJZXhwZWN0X2RfZXEobWFsbGN0bCgiYXJlbmFz LmNyZWF0ZSIsICh2b2lkICopJmFyZW5hX2luZCwgJnN6LCBOVUxMLCAwKSwKKwkgICAgMCwgIkVy cm9yIGluIGFyZW5hcy5jcmVhdGUiKTsKKworCWlmICh0aHJlYWRfaW5kICUgNCAhPSAzKSB7CisJ CXNpemVfdCBtaWJbM107CisJCXNpemVfdCBtaWJsZW4gPSBzaXplb2YobWliKSAvIHNpemVvZihz aXplX3QpOworCQljb25zdCBjaGFyICpkc3NfcHJlY3NbXSA9IHsiZGlzYWJsZWQiLCAicHJpbWFy eSIsICJzZWNvbmRhcnkifTsKKwkJdW5zaWduZWQgcHJlY19pbmQgPSB0aHJlYWRfaW5kICUKKwkJ ICAgIChzaXplb2YoZHNzX3ByZWNzKS9zaXplb2YoY2hhciopKTsKKwkJY29uc3QgY2hhciAqZHNz ID0gZHNzX3ByZWNzW3ByZWNfaW5kXTsKKwkJaW50IGV4cGVjdGVkX2VyciA9IChoYXZlX2RzcyB8 fCBwcmVjX2luZCA9PSAwKSA/IDAgOiBFRkFVTFQ7CisJCWV4cGVjdF9kX2VxKG1hbGxjdGxuYW1l dG9taWIoImFyZW5hLjAuZHNzIiwgbWliLCAmbWlibGVuKSwgMCwKKwkJICAgICJFcnJvciBpbiBt YWxsY3RsbmFtZXRvbWliKCkiKTsKKwkJbWliWzFdID0gYXJlbmFfaW5kOworCQlleHBlY3RfZF9l cShtYWxsY3RsYnltaWIobWliLCBtaWJsZW4sIE5VTEwsIE5VTEwsICh2b2lkICopJmRzcywKKwkJ ICAgIHNpemVvZihjb25zdCBjaGFyICopKSwgZXhwZWN0ZWRfZXJyLAorCQkgICAgIkVycm9yIGlu IG1hbGxjdGxieW1pYigpIik7CisJfQorCisJcCA9IG1hbGxvY3goMSwgTUFMTE9DWF9BUkVOQShh cmVuYV9pbmQpKTsKKwlleHBlY3RfcHRyX25vdF9udWxsKHAsICJVbmV4cGVjdGVkIG1hbGxvY3go KSBlcnJvciIpOworCWRhbGxvY3gocCwgMCk7CisKKwlyZXR1cm4gTlVMTDsKK30KKworVEVTVF9C RUdJTih0ZXN0X01BTExPQ1hfQVJFTkEpIHsKKwl0aGRfdCB0aGRzW05USFJFQURTXTsKKwl1bnNp Z25lZCBpOworCisJZm9yIChpID0gMDsgaSA8IE5USFJFQURTOyBpKyspIHsKKwkJdGhkX2NyZWF0 ZSgmdGhkc1tpXSwgdGhkX3N0YXJ0LAorCQkgICAgKHZvaWQgKikodWludHB0cl90KWkpOworCX0K KworCWZvciAoaSA9IDA7IGkgPCBOVEhSRUFEUzsgaSsrKSB7CisJCXRoZF9qb2luKHRoZHNbaV0s IE5VTEwpOworCX0KK30KK1RFU1RfRU5ECisKK2ludAorbWFpbih2b2lkKSB7CisJcmV0dXJuIHRl c3QoCisJICAgIHRlc3RfTUFMTE9DWF9BUkVOQSk7Cit9CgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJh c2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC9pbnRlZ3JhdGlvbi9hbGlnbmVkX2Fs bG9jLmMgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L2ludGVn cmF0aW9uL2FsaWduZWRfYWxsb2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw Li5iMzdkNWJhCi0tLSAvZGV2L251bGwKKysrIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVt YWxsb2MtNS4zLjAvdGVzdC9pbnRlZ3JhdGlvbi9hbGlnbmVkX2FsbG9jLmMKQEAgLTAsMCArMSwx NTcgQEAKKyNpbmNsdWRlICJ0ZXN0L2plbWFsbG9jX3Rlc3QuaCIKKworI2RlZmluZSBNQVhBTElH TiAoKChzaXplX3QpMSkgPDwgMjMpCisKKy8qCisgKiBPbiBzeXN0ZW1zIHdoaWNoIGNhbid0IG1l cmdlIGV4dGVudHMsIHRlc3RzIHRoYXQgY2FsbCB0aGlzIGZ1bmN0aW9uIGdlbmVyYXRlCisgKiBh IGxvdCBvZiBkaXJ0eSBtZW1vcnkgdmVyeSBxdWlja2x5LiAgUHVyZ2luZyBiZXR3ZWVuIGN5Y2xl cyBtaXRpZ2F0ZXMKKyAqIHBvdGVudGlhbCBPT00gb24gZS5nLiAzMi1iaXQgV2luZG93cy4KKyAq Lworc3RhdGljIHZvaWQKK3B1cmdlKHZvaWQpIHsKKwlleHBlY3RfZF9lcShtYWxsY3RsKCJhcmVu YS4wLnB1cmdlIiwgTlVMTCwgTlVMTCwgTlVMTCwgMCksIDAsCisJICAgICJVbmV4cGVjdGVkIG1h bGxjdGwgZXJyb3IiKTsKK30KKworVEVTVF9CRUdJTih0ZXN0X2FsaWdubWVudF9lcnJvcnMpIHsK KwlzaXplX3QgYWxpZ25tZW50OworCXZvaWQgKnA7CisKKwlhbGlnbm1lbnQgPSAwOworCXNldF9l cnJubygwKTsKKwlwID0gYWxpZ25lZF9hbGxvYyhhbGlnbm1lbnQsIDEpOworCWV4cGVjdF9mYWxz ZShwICE9IE5VTEwgfHwgZ2V0X2Vycm5vKCkgIT0gRUlOVkFMLAorCSAgICAiRXhwZWN0ZWQgZXJy b3IgZm9yIGludmFsaWQgYWxpZ25tZW50ICV6dSIsIGFsaWdubWVudCk7CisKKwlmb3IgKGFsaWdu bWVudCA9IHNpemVvZihzaXplX3QpOyBhbGlnbm1lbnQgPCBNQVhBTElHTjsKKwkgICAgYWxpZ25t ZW50IDw8PSAxKSB7CisJCXNldF9lcnJubygwKTsKKwkJcCA9IGFsaWduZWRfYWxsb2MoYWxpZ25t ZW50ICsgMSwgMSk7CisJCWV4cGVjdF9mYWxzZShwICE9IE5VTEwgfHwgZ2V0X2Vycm5vKCkgIT0g RUlOVkFMLAorCQkgICAgIkV4cGVjdGVkIGVycm9yIGZvciBpbnZhbGlkIGFsaWdubWVudCAlenUi LAorCQkgICAgYWxpZ25tZW50ICsgMSk7CisJfQorfQorVEVTVF9FTkQKKworCisvKgorICogR0ND ICItV2FsbG9jLXNpemUtbGFyZ2VyLXRoYW4iIHdhcm5pbmcgZGV0ZWN0cyB3aGVuIG9uZSBvZiB0 aGUgbWVtb3J5CisgKiBhbGxvY2F0aW9uIGZ1bmN0aW9ucyBpcyBjYWxsZWQgd2l0aCBhIHNpemUg bGFyZ2VyIHRoYW4gdGhlIG1heGltdW0gc2l6ZSB0aGF0CisgKiB0aGV5IHN1cHBvcnQuIEhlcmUg d2Ugd2FudCB0byBleHBsaWNpdGx5IHRlc3QgdGhhdCB0aGUgYWxsb2NhdGlvbiBmdW5jdGlvbnMK KyAqIGRvIGluZGVlZCBmYWlsIHByb3Blcmx5IHdoZW4gdGhpcyBpcyB0aGUgY2FzZSwgd2hpY2gg dHJpZ2dlcnMgdGhlIHdhcm5pbmcuCisgKiBUaGVyZWZvcmUgd2UgZGlzYWJsZSB0aGUgd2Fybmlu ZyBmb3IgdGhlc2UgdGVzdHMuCisgKi8KK0pFTUFMTE9DX0RJQUdOT1NUSUNfUFVTSAorSkVNQUxM T0NfRElBR05PU1RJQ19JR05PUkVfQUxMT0NfU0laRV9MQVJHRVJfVEhBTgorCitURVNUX0JFR0lO KHRlc3Rfb29tX2Vycm9ycykgeworCXNpemVfdCBhbGlnbm1lbnQsIHNpemU7CisJdm9pZCAqcDsK KworI2lmIExHX1NJWkVPRl9QVFIgPT0gMworCWFsaWdubWVudCA9IFVJTlQ2NF9DKDB4ODAwMDAw MDAwMDAwMDAwMCk7CisJc2l6ZSAgICAgID0gVUlOVDY0X0MoMHg4MDAwMDAwMDAwMDAwMDAwKTsK KyNlbHNlCisJYWxpZ25tZW50ID0gMHg4MDAwMDAwMExVOworCXNpemUgICAgICA9IDB4ODAwMDAw MDBMVTsKKyNlbmRpZgorCXNldF9lcnJubygwKTsKKwlwID0gYWxpZ25lZF9hbGxvYyhhbGlnbm1l bnQsIHNpemUpOworCWV4cGVjdF9mYWxzZShwICE9IE5VTEwgfHwgZ2V0X2Vycm5vKCkgIT0gRU5P TUVNLAorCSAgICAiRXhwZWN0ZWQgZXJyb3IgZm9yIGFsaWduZWRfYWxsb2MoJXp1LCAlenUpIiwK KwkgICAgYWxpZ25tZW50LCBzaXplKTsKKworI2lmIExHX1NJWkVPRl9QVFIgPT0gMworCWFsaWdu bWVudCA9IFVJTlQ2NF9DKDB4NDAwMDAwMDAwMDAwMDAwMCk7CisJc2l6ZSAgICAgID0gVUlOVDY0 X0MoMHhjMDAwMDAwMDAwMDAwMDAxKTsKKyNlbHNlCisJYWxpZ25tZW50ID0gMHg0MDAwMDAwMExV OworCXNpemUgICAgICA9IDB4YzAwMDAwMDFMVTsKKyNlbmRpZgorCXNldF9lcnJubygwKTsKKwlw ID0gYWxpZ25lZF9hbGxvYyhhbGlnbm1lbnQsIHNpemUpOworCWV4cGVjdF9mYWxzZShwICE9IE5V TEwgfHwgZ2V0X2Vycm5vKCkgIT0gRU5PTUVNLAorCSAgICAiRXhwZWN0ZWQgZXJyb3IgZm9yIGFs aWduZWRfYWxsb2MoJXp1LCAlenUpIiwKKwkgICAgYWxpZ25tZW50LCBzaXplKTsKKworCWFsaWdu bWVudCA9IDB4MTBMVTsKKyNpZiBMR19TSVpFT0ZfUFRSID09IDMKKwlzaXplID0gVUlOVDY0X0Mo MHhmZmZmZmZmZmZmZmZmZmYwKTsKKyNlbHNlCisJc2l6ZSA9IDB4ZmZmZmZmZjBMVTsKKyNlbmRp ZgorCXNldF9lcnJubygwKTsKKwlwID0gYWxpZ25lZF9hbGxvYyhhbGlnbm1lbnQsIHNpemUpOwor CWV4cGVjdF9mYWxzZShwICE9IE5VTEwgfHwgZ2V0X2Vycm5vKCkgIT0gRU5PTUVNLAorCSAgICAi RXhwZWN0ZWQgZXJyb3IgZm9yIGFsaWduZWRfYWxsb2MoJnAsICV6dSwgJXp1KSIsCisJICAgIGFs aWdubWVudCwgc2l6ZSk7Cit9CitURVNUX0VORAorCisvKiBSZS1lbmFibGUgdGhlICItV2FsbG9j LXNpemUtbGFyZ2VyLXRoYW49IiB3YXJuaW5nICovCitKRU1BTExPQ19ESUFHTk9TVElDX1BPUAor CitURVNUX0JFR0lOKHRlc3RfYWxpZ25tZW50X2FuZF9zaXplKSB7CisjZGVmaW5lIE5JVEVSIDQK KwlzaXplX3QgYWxpZ25tZW50LCBzaXplLCB0b3RhbDsKKwl1bnNpZ25lZCBpOworCXZvaWQgKnBz W05JVEVSXTsKKworCWZvciAoaSA9IDA7IGkgPCBOSVRFUjsgaSsrKSB7CisJCXBzW2ldID0gTlVM TDsKKwl9CisKKwlmb3IgKGFsaWdubWVudCA9IDg7CisJICAgIGFsaWdubWVudCA8PSBNQVhBTElH TjsKKwkgICAgYWxpZ25tZW50IDw8PSAxKSB7CisJCXRvdGFsID0gMDsKKwkJZm9yIChzaXplID0g MTsKKwkJICAgIHNpemUgPCAzICogYWxpZ25tZW50ICYmIHNpemUgPCAoMVUgPDwgMzEpOworCQkg ICAgc2l6ZSArPSAoYWxpZ25tZW50ID4+IChMR19TSVpFT0ZfUFRSLTEpKSAtIDEpIHsKKwkJCWZv ciAoaSA9IDA7IGkgPCBOSVRFUjsgaSsrKSB7CisJCQkJcHNbaV0gPSBhbGlnbmVkX2FsbG9jKGFs aWdubWVudCwgc2l6ZSk7CisJCQkJaWYgKHBzW2ldID09IE5VTEwpIHsKKwkJCQkJY2hhciBidWZb QlVGRVJST1JfQlVGXTsKKworCQkJCQlidWZlcnJvcihnZXRfZXJybm8oKSwgYnVmLCBzaXplb2Yo YnVmKSk7CisJCQkJCXRlc3RfZmFpbCgKKwkJCQkJICAgICJFcnJvciBmb3IgYWxpZ25tZW50PSV6 dSwgIgorCQkJCQkgICAgInNpemU9JXp1ICglI3p4KTogJXMiLAorCQkJCQkgICAgYWxpZ25tZW50 LCBzaXplLCBzaXplLCBidWYpOworCQkJCX0KKwkJCQl0b3RhbCArPSBURVNUX01BTExPQ19TSVpF KHBzW2ldKTsKKwkJCQlpZiAodG90YWwgPj0gKE1BWEFMSUdOIDw8IDEpKSB7CisJCQkJCWJyZWFr OworCQkJCX0KKwkJCX0KKwkJCWZvciAoaSA9IDA7IGkgPCBOSVRFUjsgaSsrKSB7CisJCQkJaWYg KHBzW2ldICE9IE5VTEwpIHsKKwkJCQkJZnJlZShwc1tpXSk7CisJCQkJCXBzW2ldID0gTlVMTDsK KwkJCQl9CisJCQl9CisJCX0KKwkJcHVyZ2UoKTsKKwl9CisjdW5kZWYgTklURVIKK30KK1RFU1Rf RU5ECisKK1RFU1RfQkVHSU4odGVzdF96ZXJvX2FsbG9jKSB7CisJdm9pZCAqcmVzID0gYWxpZ25l ZF9hbGxvYyg4LCAwKTsKKwlhc3NlcnQocmVzKTsKKwlzaXplX3QgdXNhYmxlID0gVEVTVF9NQUxM T0NfU0laRShyZXMpOworCWFzc2VydCh1c2FibGUgPiAwKTsKKwlmcmVlKHJlcyk7Cit9CitURVNU X0VORAorCitpbnQKK21haW4odm9pZCkgeworCXJldHVybiB0ZXN0KAorCSAgICB0ZXN0X2FsaWdu bWVudF9lcnJvcnMsCisJICAgIHRlc3Rfb29tX2Vycm9ycywKKwkgICAgdGVzdF9hbGlnbm1lbnRf YW5kX3NpemUsCisJICAgIHRlc3RfemVyb19hbGxvYyk7Cit9CgpkaWZmIC0tZ2l0IGEvMzg5LWRz LWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC9pbnRlZ3JhdGlvbi9hbGxvY2F0 ZWQuYyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvaW50ZWdy YXRpb24vYWxsb2NhdGVkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGM2 NDI3MgotLS0gL2Rldi9udWxsCisrKyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9j LTUuMy4wL3Rlc3QvaW50ZWdyYXRpb24vYWxsb2NhdGVkLmMKQEAgLTAsMCArMSwxMjQgQEAKKyNp bmNsdWRlICJ0ZXN0L2plbWFsbG9jX3Rlc3QuaCIKKworc3RhdGljIGNvbnN0IGJvb2wgY29uZmln X3N0YXRzID0KKyNpZmRlZiBKRU1BTExPQ19TVEFUUworICAgIHRydWUKKyNlbHNlCisgICAgZmFs c2UKKyNlbmRpZgorICAgIDsKKwordm9pZCAqCit0aGRfc3RhcnQodm9pZCAqYXJnKSB7CisJaW50 IGVycjsKKwl2b2lkICpwOworCXVpbnQ2NF90IGEwLCBhMSwgZDAsIGQxOworCXVpbnQ2NF90ICph cDAsICphcDEsICpkcDAsICpkcDE7CisJc2l6ZV90IHN6LCB1c2l6ZTsKKworCXN6ID0gc2l6ZW9m KGEwKTsKKwlpZiAoKGVyciA9IG1hbGxjdGwoInRocmVhZC5hbGxvY2F0ZWQiLCAodm9pZCAqKSZh MCwgJnN6LCBOVUxMLCAwKSkpIHsKKwkJaWYgKGVyciA9PSBFTk9FTlQpIHsKKwkJCWdvdG8gbGFi ZWxfRU5PRU5UOworCQl9CisJCXRlc3RfZmFpbCgiJXMoKTogRXJyb3IgaW4gbWFsbGN0bCgpOiAl cyIsIF9fZnVuY19fLAorCQkgICAgc3RyZXJyb3IoZXJyKSk7CisJfQorCXN6ID0gc2l6ZW9mKGFw MCk7CisJaWYgKChlcnIgPSBtYWxsY3RsKCJ0aHJlYWQuYWxsb2NhdGVkcCIsICh2b2lkICopJmFw MCwgJnN6LCBOVUxMLCAwKSkpIHsKKwkJaWYgKGVyciA9PSBFTk9FTlQpIHsKKwkJCWdvdG8gbGFi ZWxfRU5PRU5UOworCQl9CisJCXRlc3RfZmFpbCgiJXMoKTogRXJyb3IgaW4gbWFsbGN0bCgpOiAl cyIsIF9fZnVuY19fLAorCQkgICAgc3RyZXJyb3IoZXJyKSk7CisJfQorCWV4cGVjdF91NjRfZXEo KmFwMCwgYTAsCisJICAgICJcInRocmVhZC5hbGxvY2F0ZWRwXCIgc2hvdWxkIHByb3ZpZGUgYSBw b2ludGVyIHRvIGludGVybmFsICIKKwkgICAgInN0b3JhZ2UiKTsKKworCXN6ID0gc2l6ZW9mKGQw KTsKKwlpZiAoKGVyciA9IG1hbGxjdGwoInRocmVhZC5kZWFsbG9jYXRlZCIsICh2b2lkICopJmQw LCAmc3osIE5VTEwsIDApKSkgeworCQlpZiAoZXJyID09IEVOT0VOVCkgeworCQkJZ290byBsYWJl bF9FTk9FTlQ7CisJCX0KKwkJdGVzdF9mYWlsKCIlcygpOiBFcnJvciBpbiBtYWxsY3RsKCk6ICVz IiwgX19mdW5jX18sCisJCSAgICBzdHJlcnJvcihlcnIpKTsKKwl9CisJc3ogPSBzaXplb2YoZHAw KTsKKwlpZiAoKGVyciA9IG1hbGxjdGwoInRocmVhZC5kZWFsbG9jYXRlZHAiLCAodm9pZCAqKSZk cDAsICZzeiwgTlVMTCwKKwkgICAgMCkpKSB7CisJCWlmIChlcnIgPT0gRU5PRU5UKSB7CisJCQln b3RvIGxhYmVsX0VOT0VOVDsKKwkJfQorCQl0ZXN0X2ZhaWwoIiVzKCk6IEVycm9yIGluIG1hbGxj dGwoKTogJXMiLCBfX2Z1bmNfXywKKwkJICAgIHN0cmVycm9yKGVycikpOworCX0KKwlleHBlY3Rf dTY0X2VxKCpkcDAsIGQwLAorCSAgICAiXCJ0aHJlYWQuZGVhbGxvY2F0ZWRwXCIgc2hvdWxkIHBy b3ZpZGUgYSBwb2ludGVyIHRvIGludGVybmFsICIKKwkgICAgInN0b3JhZ2UiKTsKKworCXAgPSBt YWxsb2MoMSk7CisJZXhwZWN0X3B0cl9ub3RfbnVsbChwLCAiVW5leHBlY3RlZCBtYWxsb2MoKSBl cnJvciIpOworCisJc3ogPSBzaXplb2YoYTEpOworCW1hbGxjdGwoInRocmVhZC5hbGxvY2F0ZWQi LCAodm9pZCAqKSZhMSwgJnN6LCBOVUxMLCAwKTsKKwlzeiA9IHNpemVvZihhcDEpOworCW1hbGxj dGwoInRocmVhZC5hbGxvY2F0ZWRwIiwgKHZvaWQgKikmYXAxLCAmc3osIE5VTEwsIDApOworCWV4 cGVjdF91NjRfZXEoKmFwMSwgYTEsCisJICAgICJEZXJlZmVyZW5jZWQgXCJ0aHJlYWQuYWxsb2Nh dGVkcFwiIHZhbHVlIHNob3VsZCBlcXVhbCAiCisJICAgICJcInRocmVhZC5hbGxvY2F0ZWRcIiB2 YWx1ZSIpOworCWV4cGVjdF9wdHJfZXEoYXAwLCBhcDEsCisJICAgICJQb2ludGVyIHJldHVybmVk IGJ5IFwidGhyZWFkLmFsbG9jYXRlZHBcIiBzaG91bGQgbm90IGNoYW5nZSIpOworCisJdXNpemUg PSBURVNUX01BTExPQ19TSVpFKHApOworCWV4cGVjdF91NjRfbGUoYTAgKyB1c2l6ZSwgYTEsCisJ ICAgICJBbGxvY2F0ZWQgbWVtb3J5IGNvdW50ZXIgc2hvdWxkIGluY3JlYXNlIGJ5IGF0IGxlYXN0 IHRoZSBhbW91bnQgIgorCSAgICAiZXhwbGljaXRseSBhbGxvY2F0ZWQiKTsKKworCWZyZWUocCk7 CisKKwlzeiA9IHNpemVvZihkMSk7CisJbWFsbGN0bCgidGhyZWFkLmRlYWxsb2NhdGVkIiwgKHZv aWQgKikmZDEsICZzeiwgTlVMTCwgMCk7CisJc3ogPSBzaXplb2YoZHAxKTsKKwltYWxsY3RsKCJ0 aHJlYWQuZGVhbGxvY2F0ZWRwIiwgKHZvaWQgKikmZHAxLCAmc3osIE5VTEwsIDApOworCWV4cGVj dF91NjRfZXEoKmRwMSwgZDEsCisJICAgICJEZXJlZmVyZW5jZWQgXCJ0aHJlYWQuZGVhbGxvY2F0 ZWRwXCIgdmFsdWUgc2hvdWxkIGVxdWFsICIKKwkgICAgIlwidGhyZWFkLmRlYWxsb2NhdGVkXCIg dmFsdWUiKTsKKwlleHBlY3RfcHRyX2VxKGRwMCwgZHAxLAorCSAgICAiUG9pbnRlciByZXR1cm5l ZCBieSBcInRocmVhZC5kZWFsbG9jYXRlZHBcIiBzaG91bGQgbm90IGNoYW5nZSIpOworCisJZXhw ZWN0X3U2NF9sZShkMCArIHVzaXplLCBkMSwKKwkgICAgIkRlYWxsb2NhdGVkIG1lbW9yeSBjb3Vu dGVyIHNob3VsZCBpbmNyZWFzZSBieSBhdCBsZWFzdCB0aGUgYW1vdW50ICIKKwkgICAgImV4cGxp Y2l0bHkgZGVhbGxvY2F0ZWQiKTsKKworCXJldHVybiBOVUxMOworbGFiZWxfRU5PRU5UOgorCWV4 cGVjdF9mYWxzZShjb25maWdfc3RhdHMsCisJICAgICJFTk9FTlQgc2hvdWxkIG9ubHkgYmUgcmV0 dXJuZWQgaWYgc3RhdHMgYXJlIGRpc2FibGVkIik7CisJdGVzdF9za2lwKCJcInRocmVhZC5hbGxv Y2F0ZWRcIiBtYWxsY3RsIG5vdCBhdmFpbGFibGUiKTsKKwlyZXR1cm4gTlVMTDsKK30KKworVEVT VF9CRUdJTih0ZXN0X21haW5fdGhyZWFkKSB7CisJdGhkX3N0YXJ0KE5VTEwpOworfQorVEVTVF9F TkQKKworVEVTVF9CRUdJTih0ZXN0X3N1YnRocmVhZCkgeworCXRoZF90IHRoZDsKKworCXRoZF9j cmVhdGUoJnRoZCwgdGhkX3N0YXJ0LCBOVUxMKTsKKwl0aGRfam9pbih0aGQsIE5VTEwpOworfQor VEVTVF9FTkQKKworaW50CittYWluKHZvaWQpIHsKKwkvKiBSdW4gdGVzdHMgbXVsdGlwbGUgdGlt ZXMgdG8gY2hlY2sgZm9yIGJhZCBpbnRlcmFjdGlvbnMuICovCisJcmV0dXJuIHRlc3QoCisJICAg IHRlc3RfbWFpbl90aHJlYWQsCisJICAgIHRlc3Rfc3VidGhyZWFkLAorCSAgICB0ZXN0X21haW5f dGhyZWFkLAorCSAgICB0ZXN0X3N1YnRocmVhZCwKKwkgICAgdGVzdF9tYWluX3RocmVhZCk7Cit9 CgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVz dC9pbnRlZ3JhdGlvbi9jcHAvYmFzaWMuY3BwIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVt YWxsb2MtNS4zLjAvdGVzdC9pbnRlZ3JhdGlvbi9jcHAvYmFzaWMuY3BwCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxY2Y2Y2QKLS0tIC9kZXYvbnVsbAorKysgYi8zODktZHMt YmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L2ludGVncmF0aW9uL2NwcC9iYXNp Yy5jcHAKQEAgLTAsMCArMSwyNCBAQAorI2luY2x1ZGUgInRlc3QvamVtYWxsb2NfdGVzdC5oIgor CitURVNUX0JFR0lOKHRlc3RfYmFzaWMpIHsKKwlhdXRvIGZvbyA9IG5ldyBsb25nKDQpOworCWV4 cGVjdF9wdHJfbm90X251bGwoZm9vLCAiVW5leHBlY3RlZCBuZXdbXSBmYWlsdXJlIik7CisJZGVs ZXRlIGZvbzsKKwkvLyBUZXN0IG51bGxwdHIgaGFuZGxpbmcuCisJZm9vID0gbnVsbHB0cjsKKwlk ZWxldGUgZm9vOworCisJYXV0byBiYXIgPSBuZXcgbG9uZzsKKwlleHBlY3RfcHRyX25vdF9udWxs KGJhciwgIlVuZXhwZWN0ZWQgbmV3IGZhaWx1cmUiKTsKKwlkZWxldGUgYmFyOworCS8vIFRlc3Qg bnVsbHB0ciBoYW5kbGluZy4KKwliYXIgPSBudWxscHRyOworCWRlbGV0ZSBiYXI7Cit9CitURVNU X0VORAorCitpbnQKK21haW4oKSB7CisJcmV0dXJuIHRlc3QoCisJICAgIHRlc3RfYmFzaWMpOwor fQoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rl c3QvaW50ZWdyYXRpb24vY3BwL2luZmFsbGlibGVfbmV3X2ZhbHNlLmNwcCBiLzM4OS1kcy1iYXNl LTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvaW50ZWdyYXRpb24vY3BwL2luZmFsbGli bGVfbmV3X2ZhbHNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjE5 NmQ2Ci0tLSAvZGV2L251bGwKKysrIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2Mt NS4zLjAvdGVzdC9pbnRlZ3JhdGlvbi9jcHAvaW5mYWxsaWJsZV9uZXdfZmFsc2UuY3BwCkBAIC0w LDAgKzEsMjMgQEAKKyNpbmNsdWRlIDxtZW1vcnk+CisKKyNpbmNsdWRlICJ0ZXN0L2plbWFsbG9j X3Rlc3QuaCIKKworVEVTVF9CRUdJTih0ZXN0X2ZhaWxpbmdfYWxsb2MpIHsKKwlib29sIHNhd19l eGNlcHRpb24gPSBmYWxzZTsKKwl0cnkgeworCQkvKiBUb28gYmlnIG9mIGFuIGFsbG9jYXRpb24g dG8gc3VjY2VlZC4gKi8KKwkJdm9pZCAqdm9sYXRpbGUgcHRyID0gOjpvcGVyYXRvciBuZXcoKHNp emVfdCktMSk7CisJCSh2b2lkKXB0cjsKKwl9IGNhdGNoICguLi4pIHsKKwkJc2F3X2V4Y2VwdGlv biA9IHRydWU7CisJfQorCWV4cGVjdF90cnVlKHNhd19leGNlcHRpb24sICJEaWRuJ3QgZ2V0IGEg ZmFpbHVyZSIpOworfQorVEVTVF9FTkQKKworaW50CittYWluKHZvaWQpIHsKKwlyZXR1cm4gdGVz dCgKKwkgICAgdGVzdF9mYWlsaW5nX2FsbG9jKTsKK30KKwoKZGlmZiAtLWdpdCBhLzM4OS1kcy1i YXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvaW50ZWdyYXRpb24vY3BwL2luZmFs bGlibGVfbmV3X2ZhbHNlLnNoIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4z LjAvdGVzdC9pbnRlZ3JhdGlvbi9jcHAvaW5mYWxsaWJsZV9uZXdfZmFsc2Uuc2gKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Q0MTgxMgotLS0gL2Rldi9udWxsCisrKyBiLzM4 OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvaW50ZWdyYXRpb24vY3Bw L2luZmFsbGlibGVfbmV3X2ZhbHNlLnNoCkBAIC0wLDAgKzEsOCBAQAorIyEvYmluL3NoCisKK1hN QUxMT0NfU1RSPSIiCitpZiBbICJ4JHtlbmFibGVfeG1hbGxvY30iID0gIngxIiBdIDsgdGhlbgor ICBYTUFMTE9DX1NUUj0ieG1hbGxvYzpmYWxzZSwiCitmaQorCitleHBvcnQgTUFMTE9DX0NPTkY9 IiR7WE1BTExPQ19TVFJ9ZXhwZXJpbWVudGFsX2luZmFsbGlibGVfbmV3OmZhbHNlIgoKZGlmZiAt LWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvaW50ZWdy YXRpb24vY3BwL2luZmFsbGlibGVfbmV3X3RydWUuY3BwIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVp bGQvamVtYWxsb2MtNS4zLjAvdGVzdC9pbnRlZ3JhdGlvbi9jcHAvaW5mYWxsaWJsZV9uZXdfdHJ1 ZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDY3NTQxMgotLS0gL2Rl di9udWxsCisrKyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3Qv aW50ZWdyYXRpb24vY3BwL2luZmFsbGlibGVfbmV3X3RydWUuY3BwCkBAIC0wLDAgKzEsNjcgQEAK KyNpbmNsdWRlIDxzdGRpby5oPgorCisjaW5jbHVkZSAidGVzdC9qZW1hbGxvY190ZXN0LmgiCisK Ky8qCisgKiBXZSBjYW4ndCB0ZXN0IEMrKyBpbiB1bml0IHRlc3RzLiAgSW4gb3JkZXIgdG8gaW50 ZXJjZXB0IGFib3J0LCB1c2UgYSBzZWNyZXQKKyAqIHNhZmV0eSBjaGVjayBhYm9ydCBob29rIGlu IGludGVncmF0aW9uIHRlc3RzLgorICovCit0eXBlZGVmIHZvaWQgKCphYm9ydF9ob29rX3QpKGNv bnN0IGNoYXIgKm1lc3NhZ2UpOworYm9vbCBmYWtlX2Fib3J0X2NhbGxlZDsKK3ZvaWQgZmFrZV9h Ym9ydChjb25zdCBjaGFyICptZXNzYWdlKSB7CisJaWYgKHN0cmNtcChtZXNzYWdlLCAiPGplbWFs bG9jPjogQWxsb2NhdGlvbiBmYWlsZWQgYW5kICIKKwkgICAgIm9wdC5leHBlcmltZW50YWxfaW5m YWxsaWJsZV9uZXcgaXMgdHJ1ZS4gQWJvcnRpbmcuXG4iKSAhPSAwKSB7CisJCWFib3J0KCk7CisJ fQorCWZha2VfYWJvcnRfY2FsbGVkID0gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wKK293bl9vcGVy YXRvcl9uZXcodm9pZCkgeworCXVpbnQ2NF90IGJlZm9yZSwgYWZ0ZXI7CisJc2l6ZV90IHN6ID0g c2l6ZW9mKGJlZm9yZSk7CisKKwkvKiB0aHJlYWQuYWxsb2NhdGVkIGlzIGFsd2F5cyBhdmFpbGFi bGUsIGV2ZW4gdy9vIGNvbmZpZ19zdGF0cy4gKi8KKwlleHBlY3RfZF9lcShtYWxsY3RsKCJ0aHJl YWQuYWxsb2NhdGVkIiwgKHZvaWQgKikmYmVmb3JlLCAmc3osIE5VTEwsIDApLAorCSAgICAwLCAi VW5leHBlY3RlZCBtYWxsY3RsIGZhaWx1cmUgcmVhZGluZyBzdGF0cyIpOworCXZvaWQgKnZvbGF0 aWxlIHB0ciA9IDo6b3BlcmF0b3IgbmV3KChzaXplX3QpOCk7CisJZXhwZWN0X3B0cl9ub3RfbnVs bChwdHIsICJVbmV4cGVjdGVkIGFsbG9jYXRpb24gZmFpbHVyZSIpOworCWV4cGVjdF9kX2VxKG1h bGxjdGwoInRocmVhZC5hbGxvY2F0ZWQiLCAodm9pZCAqKSZhZnRlciwgJnN6LCBOVUxMLCAwKSwK KwkgICAgMCwgIlVuZXhwZWN0ZWQgbWFsbGN0bCBmYWlsdXJlIHJlYWRpbmcgc3RhdHMiKTsKKwor CXJldHVybiAoYWZ0ZXIgIT0gYmVmb3JlKTsKK30KKworVEVTVF9CRUdJTih0ZXN0X2ZhaWxpbmdf YWxsb2MpIHsKKwlhYm9ydF9ob29rX3QgYWJvcnRfaG9vayA9ICZmYWtlX2Fib3J0OworCWV4cGVj dF9kX2VxKG1hbGxjdGwoImV4cGVyaW1lbnRhbC5ob29rcy5zYWZldHlfY2hlY2tfYWJvcnQiLCBO VUxMLCBOVUxMLAorCSAgICAodm9pZCAqKSZhYm9ydF9ob29rLCBzaXplb2YoYWJvcnRfaG9vaykp LCAwLAorCSAgICAiVW5leHBlY3RlZCBtYWxsY3RsIGZhaWx1cmUgc2V0dGluZyBhYm9ydCBob29r Iik7CisKKwkvKgorCSAqIE5vdCBvd25pbmcgb3BlcmF0b3IgbmV3IGlzIG9ubHkgZXhwZWN0ZWQg dG8gaGFwcGVuIG9uIE1pbkdXIHdoaWNoCisJICogZG9lcyBub3Qgc3VwcG9ydCBvcGVyYXRvciBu ZXcgLyBkZWxldGUgcmVwbGFjZW1lbnQuCisJICovCisjaWZkZWYgX1dJTjMyCisJdGVzdF9za2lw X2lmKCFvd25fb3BlcmF0b3JfbmV3KCkpOworI2Vsc2UKKwlleHBlY3RfdHJ1ZShvd25fb3BlcmF0 b3JfbmV3KCksICJObyBvcGVyYXRvciBuZXcgb3ZlcmxvYWQiKTsKKyNlbmRpZgorCXZvaWQgKnZv bGF0aWxlIHB0ciA9ICh2b2lkICopMTsKKwl0cnkgeworCQkvKiBUb28gYmlnIG9mIGFuIGFsbG9j YXRpb24gdG8gc3VjY2VlZC4gKi8KKwkJcHRyID0gOjpvcGVyYXRvciBuZXcoKHNpemVfdCktMSk7 CisJfSBjYXRjaCAoLi4uKSB7CisJCWFib3J0KCk7CisJfQorCWV4cGVjdF9wdHJfbnVsbChwdHIs ICJBbGxvY2F0aW9uIHNob3VsZCBoYXZlIGZhaWxlZCIpOworCWV4cGVjdF9iX2VxKGZha2VfYWJv cnRfY2FsbGVkLCB0cnVlLCAiQWJvcnQgaG9vayBub3QgaW52b2tlZCIpOworfQorVEVTVF9FTkQK KworaW50CittYWluKHZvaWQpIHsKKwlyZXR1cm4gdGVzdCgKKwkgICAgdGVzdF9mYWlsaW5nX2Fs bG9jKTsKK30KKwoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9j LTUuMy4wL3Rlc3QvaW50ZWdyYXRpb24vY3BwL2luZmFsbGlibGVfbmV3X3RydWUuc2ggYi8zODkt ZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L2ludGVncmF0aW9uL2NwcC9p bmZhbGxpYmxlX25ld190cnVlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu LjRhMGZmNTQKLS0tIC9kZXYvbnVsbAorKysgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1h bGxvYy01LjMuMC90ZXN0L2ludGVncmF0aW9uL2NwcC9pbmZhbGxpYmxlX25ld190cnVlLnNoCkBA IC0wLDAgKzEsOCBAQAorIyEvYmluL3NoCisKK1hNQUxMT0NfU1RSPSIiCitpZiBbICJ4JHtlbmFi bGVfeG1hbGxvY30iID0gIngxIiBdIDsgdGhlbgorICBYTUFMTE9DX1NUUj0ieG1hbGxvYzpmYWxz ZSwiCitmaQorCitleHBvcnQgTUFMTE9DX0NPTkY9IiR7WE1BTExPQ19TVFJ9ZXhwZXJpbWVudGFs X2luZmFsbGlibGVfbmV3OnRydWUiCgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVp bGQvamVtYWxsb2MtNS4zLjAvdGVzdC9pbnRlZ3JhdGlvbi9leHRlbnQuYyBiLzM4OS1kcy1iYXNl LTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvaW50ZWdyYXRpb24vZXh0ZW50LmMKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2EwMjhmMQotLS0gL2Rldi9udWxsCisr KyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvaW50ZWdyYXRp b24vZXh0ZW50LmMKQEAgLTAsMCArMSwyODcgQEAKKyNpbmNsdWRlICJ0ZXN0L2plbWFsbG9jX3Rl c3QuaCIKKworI2luY2x1ZGUgInRlc3QvZXh0ZW50X2hvb2tzLmgiCisKKyNpbmNsdWRlICJqZW1h bGxvYy9pbnRlcm5hbC9hcmVuYV90eXBlcy5oIgorCitzdGF0aWMgdm9pZAordGVzdF9leHRlbnRf Ym9keSh1bnNpZ25lZCBhcmVuYV9pbmQpIHsKKwl2b2lkICpwOworCXNpemVfdCBsYXJnZTAsIGxh cmdlMSwgbGFyZ2UyLCBzejsKKwlzaXplX3QgcHVyZ2VfbWliWzNdOworCXNpemVfdCBwdXJnZV9t aWJsZW47CisJaW50IGZsYWdzOworCWJvb2wgeGFsbG9jeF9zdWNjZXNzX2EsIHhhbGxvY3hfc3Vj Y2Vzc19iLCB4YWxsb2N4X3N1Y2Nlc3NfYzsKKworCWZsYWdzID0gTUFMTE9DWF9BUkVOQShhcmVu YV9pbmQpIHwgTUFMTE9DWF9UQ0FDSEVfTk9ORTsKKworCS8qIEdldCBsYXJnZSBzaXplIGNsYXNz ZXMuICovCisJc3ogPSBzaXplb2Yoc2l6ZV90KTsKKwlleHBlY3RfZF9lcShtYWxsY3RsKCJhcmVu YXMubGV4dGVudC4wLnNpemUiLCAodm9pZCAqKSZsYXJnZTAsICZzeiwgTlVMTCwKKwkgICAgMCks IDAsICJVbmV4cGVjdGVkIGFyZW5hcy5sZXh0ZW50LjAuc2l6ZSBmYWlsdXJlIik7CisJZXhwZWN0 X2RfZXEobWFsbGN0bCgiYXJlbmFzLmxleHRlbnQuMS5zaXplIiwgKHZvaWQgKikmbGFyZ2UxLCAm c3osIE5VTEwsCisJICAgIDApLCAwLCAiVW5leHBlY3RlZCBhcmVuYXMubGV4dGVudC4xLnNpemUg ZmFpbHVyZSIpOworCWV4cGVjdF9kX2VxKG1hbGxjdGwoImFyZW5hcy5sZXh0ZW50LjIuc2l6ZSIs ICh2b2lkICopJmxhcmdlMiwgJnN6LCBOVUxMLAorCSAgICAwKSwgMCwgIlVuZXhwZWN0ZWQgYXJl bmFzLmxleHRlbnQuMi5zaXplIGZhaWx1cmUiKTsKKworCS8qIFRlc3QgZGFsbG9jL2RlY29tbWl0 L3B1cmdlIGNhc2NhZGUuICovCisJcHVyZ2VfbWlibGVuID0gc2l6ZW9mKHB1cmdlX21pYikvc2l6 ZW9mKHNpemVfdCk7CisJZXhwZWN0X2RfZXEobWFsbGN0bG5hbWV0b21pYigiYXJlbmEuMC5wdXJn ZSIsIHB1cmdlX21pYiwgJnB1cmdlX21pYmxlbiksCisJICAgIDAsICJVbmV4cGVjdGVkIG1hbGxj dGxuYW1ldG9taWIoKSBmYWlsdXJlIik7CisJcHVyZ2VfbWliWzFdID0gKHNpemVfdClhcmVuYV9p bmQ7CisJY2FsbGVkX2FsbG9jID0gZmFsc2U7CisJdHJ5X2FsbG9jID0gdHJ1ZTsKKwl0cnlfZGFs bG9jID0gZmFsc2U7CisJdHJ5X2RlY29tbWl0ID0gZmFsc2U7CisJcCA9IG1hbGxvY3gobGFyZ2Uw ICogMiwgZmxhZ3MpOworCWV4cGVjdF9wdHJfbm90X251bGwocCwgIlVuZXhwZWN0ZWQgbWFsbG9j eCgpIGVycm9yIik7CisJZXhwZWN0X3RydWUoY2FsbGVkX2FsbG9jLCAiRXhwZWN0ZWQgYWxsb2Mg Y2FsbCIpOworCWNhbGxlZF9kYWxsb2MgPSBmYWxzZTsKKwljYWxsZWRfZGVjb21taXQgPSBmYWxz ZTsKKwlkaWRfcHVyZ2VfbGF6eSA9IGZhbHNlOworCWRpZF9wdXJnZV9mb3JjZWQgPSBmYWxzZTsK KwljYWxsZWRfc3BsaXQgPSBmYWxzZTsKKwl4YWxsb2N4X3N1Y2Nlc3NfYSA9ICh4YWxsb2N4KHAs IGxhcmdlMCwgMCwgZmxhZ3MpID09IGxhcmdlMCk7CisJZXhwZWN0X2RfZXEobWFsbGN0bGJ5bWli KHB1cmdlX21pYiwgcHVyZ2VfbWlibGVuLCBOVUxMLCBOVUxMLCBOVUxMLCAwKSwKKwkgICAgMCwg IlVuZXhwZWN0ZWQgYXJlbmEuJXUucHVyZ2UgZXJyb3IiLCBhcmVuYV9pbmQpOworCWlmICh4YWxs b2N4X3N1Y2Nlc3NfYSkgeworCQlleHBlY3RfdHJ1ZShjYWxsZWRfZGFsbG9jLCAiRXhwZWN0ZWQg ZGFsbG9jIGNhbGwiKTsKKwkJZXhwZWN0X3RydWUoY2FsbGVkX2RlY29tbWl0LCAiRXhwZWN0ZWQg ZGVjb21taXQgY2FsbCIpOworCQlleHBlY3RfdHJ1ZShkaWRfcHVyZ2VfbGF6eSB8fCBkaWRfcHVy Z2VfZm9yY2VkLAorCQkgICAgIkV4cGVjdGVkIHB1cmdlIik7CisJCWV4cGVjdF90cnVlKGNhbGxl ZF9zcGxpdCwgIkV4cGVjdGVkIHNwbGl0IGNhbGwiKTsKKwl9CisJZGFsbG9jeChwLCBmbGFncyk7 CisJdHJ5X2RhbGxvYyA9IHRydWU7CisKKwkvKiBUZXN0IGRlY29tbWl0L2NvbW1pdCBhbmQgb2Jz ZXJ2ZSBzcGxpdC9tZXJnZS4gKi8KKwl0cnlfZGFsbG9jID0gZmFsc2U7CisJdHJ5X2RlY29tbWl0 ID0gdHJ1ZTsKKwlwID0gbWFsbG9jeChsYXJnZTAgKiAyLCBmbGFncyk7CisJZXhwZWN0X3B0cl9u b3RfbnVsbChwLCAiVW5leHBlY3RlZCBtYWxsb2N4KCkgZXJyb3IiKTsKKwlkaWRfZGVjb21taXQg PSBmYWxzZTsKKwlkaWRfY29tbWl0ID0gZmFsc2U7CisJY2FsbGVkX3NwbGl0ID0gZmFsc2U7CisJ ZGlkX3NwbGl0ID0gZmFsc2U7CisJZGlkX21lcmdlID0gZmFsc2U7CisJeGFsbG9jeF9zdWNjZXNz X2IgPSAoeGFsbG9jeChwLCBsYXJnZTAsIDAsIGZsYWdzKSA9PSBsYXJnZTApOworCWV4cGVjdF9k X2VxKG1hbGxjdGxieW1pYihwdXJnZV9taWIsIHB1cmdlX21pYmxlbiwgTlVMTCwgTlVMTCwgTlVM TCwgMCksCisJICAgIDAsICJVbmV4cGVjdGVkIGFyZW5hLiV1LnB1cmdlIGVycm9yIiwgYXJlbmFf aW5kKTsKKwlpZiAoeGFsbG9jeF9zdWNjZXNzX2IpIHsKKwkJZXhwZWN0X3RydWUoZGlkX3NwbGl0 LCAiRXhwZWN0ZWQgc3BsaXQiKTsKKwl9CisJeGFsbG9jeF9zdWNjZXNzX2MgPSAoeGFsbG9jeChw LCBsYXJnZTAgKiAyLCAwLCBmbGFncykgPT0gbGFyZ2UwICogMik7CisJaWYgKGRpZF9zcGxpdCkg eworCQlleHBlY3RfYl9lcShkaWRfZGVjb21taXQsIGRpZF9jb21taXQsCisJCSAgICAiRXhwZWN0 ZWQgZGVjb21taXQvY29tbWl0IG1hdGNoIik7CisJfQorCWlmICh4YWxsb2N4X3N1Y2Nlc3NfYiAm JiB4YWxsb2N4X3N1Y2Nlc3NfYykgeworCQlleHBlY3RfdHJ1ZShkaWRfbWVyZ2UsICJFeHBlY3Rl ZCBtZXJnZSIpOworCX0KKwlkYWxsb2N4KHAsIGZsYWdzKTsKKwl0cnlfZGFsbG9jID0gdHJ1ZTsK Kwl0cnlfZGVjb21taXQgPSBmYWxzZTsKKworCS8qIE1ha2Ugc3VyZSBub24tbGFyZ2UgYWxsb2Nh dGlvbiBzdWNjZWVkcy4gKi8KKwlwID0gbWFsbG9jeCg0MiwgZmxhZ3MpOworCWV4cGVjdF9wdHJf bm90X251bGwocCwgIlVuZXhwZWN0ZWQgbWFsbG9jeCgpIGVycm9yIik7CisJZGFsbG9jeChwLCBm bGFncyk7Cit9CisKK3N0YXRpYyB2b2lkCit0ZXN0X21hbnVhbF9ob29rX2F1dG9fYXJlbmEodm9p ZCkgeworCXVuc2lnbmVkIG5hcmVuYXM7CisJc2l6ZV90IG9sZF9zaXplLCBuZXdfc2l6ZSwgc3o7 CisJc2l6ZV90IGhvb2tzX21pYlszXTsKKwlzaXplX3QgaG9va3NfbWlibGVuOworCWV4dGVudF9o b29rc190ICpuZXdfaG9va3MsICpvbGRfaG9va3M7CisKKwlleHRlbnRfaG9va3NfcHJlcCgpOwor CisJc3ogPSBzaXplb2YodW5zaWduZWQpOworCS8qIEdldCBudW1iZXIgb2YgYXV0byBhcmVuYXMu ICovCisJZXhwZWN0X2RfZXEobWFsbGN0bCgib3B0Lm5hcmVuYXMiLCAodm9pZCAqKSZuYXJlbmFz LCAmc3osIE5VTEwsIDApLAorCSAgICAwLCAiVW5leHBlY3RlZCBtYWxsY3RsKCkgZmFpbHVyZSIp OworCWlmIChuYXJlbmFzID09IDEpIHsKKwkJcmV0dXJuOworCX0KKworCS8qIEluc3RhbGwgY3Vz dG9tIGV4dGVudCBob29rcyBvbiBhcmVuYSAxIChtaWdodCBub3QgYmUgaW5pdGlhbGl6ZWQpLiAq LworCWhvb2tzX21pYmxlbiA9IHNpemVvZihob29rc19taWIpL3NpemVvZihzaXplX3QpOworCWV4 cGVjdF9kX2VxKG1hbGxjdGxuYW1ldG9taWIoImFyZW5hLjAuZXh0ZW50X2hvb2tzIiwgaG9va3Nf bWliLAorCSAgICAmaG9va3NfbWlibGVuKSwgMCwgIlVuZXhwZWN0ZWQgbWFsbGN0bG5hbWV0b21p YigpIGZhaWx1cmUiKTsKKwlob29rc19taWJbMV0gPSAxOworCW9sZF9zaXplID0gc2l6ZW9mKGV4 dGVudF9ob29rc190ICopOworCW5ld19ob29rcyA9ICZob29rczsKKwluZXdfc2l6ZSA9IHNpemVv ZihleHRlbnRfaG9va3NfdCAqKTsKKwlleHBlY3RfZF9lcShtYWxsY3RsYnltaWIoaG9va3NfbWli LCBob29rc19taWJsZW4sICh2b2lkICopJm9sZF9ob29rcywKKwkgICAgJm9sZF9zaXplLCAodm9p ZCAqKSZuZXdfaG9va3MsIG5ld19zaXplKSwgMCwKKwkgICAgIlVuZXhwZWN0ZWQgZXh0ZW50X2hv b2tzIGVycm9yIik7CisJc3RhdGljIGJvb2wgYXV0b19hcmVuYV9jcmVhdGVkID0gZmFsc2U7CisJ aWYgKG9sZF9ob29rcyAhPSAmaG9va3MpIHsKKwkJZXhwZWN0X2JfZXEoYXV0b19hcmVuYV9jcmVh dGVkLCBmYWxzZSwKKwkJICAgICJFeHBlY3RlZCBhdXRvIGFyZW5hIDEgY3JlYXRlZCBvbmx5IG9u Y2UuIik7CisJCWF1dG9fYXJlbmFfY3JlYXRlZCA9IHRydWU7CisJfQorfQorCitzdGF0aWMgdm9p ZAordGVzdF9tYW51YWxfaG9va19ib2R5KHZvaWQpIHsKKwl1bnNpZ25lZCBhcmVuYV9pbmQ7CisJ c2l6ZV90IG9sZF9zaXplLCBuZXdfc2l6ZSwgc3o7CisJc2l6ZV90IGhvb2tzX21pYlszXTsKKwlz aXplX3QgaG9va3NfbWlibGVuOworCWV4dGVudF9ob29rc190ICpuZXdfaG9va3MsICpvbGRfaG9v a3M7CisKKwlleHRlbnRfaG9va3NfcHJlcCgpOworCisJc3ogPSBzaXplb2YodW5zaWduZWQpOwor CWV4cGVjdF9kX2VxKG1hbGxjdGwoImFyZW5hcy5jcmVhdGUiLCAodm9pZCAqKSZhcmVuYV9pbmQs ICZzeiwgTlVMTCwgMCksCisJICAgIDAsICJVbmV4cGVjdGVkIG1hbGxjdGwoKSBmYWlsdXJlIik7 CisKKwkvKiBJbnN0YWxsIGN1c3RvbSBleHRlbnQgaG9va3MuICovCisJaG9va3NfbWlibGVuID0g c2l6ZW9mKGhvb2tzX21pYikvc2l6ZW9mKHNpemVfdCk7CisJZXhwZWN0X2RfZXEobWFsbGN0bG5h bWV0b21pYigiYXJlbmEuMC5leHRlbnRfaG9va3MiLCBob29rc19taWIsCisJICAgICZob29rc19t aWJsZW4pLCAwLCAiVW5leHBlY3RlZCBtYWxsY3RsbmFtZXRvbWliKCkgZmFpbHVyZSIpOworCWhv b2tzX21pYlsxXSA9IChzaXplX3QpYXJlbmFfaW5kOworCW9sZF9zaXplID0gc2l6ZW9mKGV4dGVu dF9ob29rc190ICopOworCW5ld19ob29rcyA9ICZob29rczsKKwluZXdfc2l6ZSA9IHNpemVvZihl eHRlbnRfaG9va3NfdCAqKTsKKwlleHBlY3RfZF9lcShtYWxsY3RsYnltaWIoaG9va3NfbWliLCBo b29rc19taWJsZW4sICh2b2lkICopJm9sZF9ob29rcywKKwkgICAgJm9sZF9zaXplLCAodm9pZCAq KSZuZXdfaG9va3MsIG5ld19zaXplKSwgMCwKKwkgICAgIlVuZXhwZWN0ZWQgZXh0ZW50X2hvb2tz IGVycm9yIik7CisJZXhwZWN0X3B0cl9uZShvbGRfaG9va3MtPmFsbG9jLCBleHRlbnRfYWxsb2Nf aG9vaywKKwkgICAgIlVuZXhwZWN0ZWQgZXh0ZW50X2hvb2tzIGVycm9yIik7CisJZXhwZWN0X3B0 cl9uZShvbGRfaG9va3MtPmRhbGxvYywgZXh0ZW50X2RhbGxvY19ob29rLAorCSAgICAiVW5leHBl Y3RlZCBleHRlbnRfaG9va3MgZXJyb3IiKTsKKwlleHBlY3RfcHRyX25lKG9sZF9ob29rcy0+Y29t bWl0LCBleHRlbnRfY29tbWl0X2hvb2ssCisJICAgICJVbmV4cGVjdGVkIGV4dGVudF9ob29rcyBl cnJvciIpOworCWV4cGVjdF9wdHJfbmUob2xkX2hvb2tzLT5kZWNvbW1pdCwgZXh0ZW50X2RlY29t bWl0X2hvb2ssCisJICAgICJVbmV4cGVjdGVkIGV4dGVudF9ob29rcyBlcnJvciIpOworCWV4cGVj dF9wdHJfbmUob2xkX2hvb2tzLT5wdXJnZV9sYXp5LCBleHRlbnRfcHVyZ2VfbGF6eV9ob29rLAor CSAgICAiVW5leHBlY3RlZCBleHRlbnRfaG9va3MgZXJyb3IiKTsKKwlleHBlY3RfcHRyX25lKG9s ZF9ob29rcy0+cHVyZ2VfZm9yY2VkLCBleHRlbnRfcHVyZ2VfZm9yY2VkX2hvb2ssCisJICAgICJV bmV4cGVjdGVkIGV4dGVudF9ob29rcyBlcnJvciIpOworCWV4cGVjdF9wdHJfbmUob2xkX2hvb2tz LT5zcGxpdCwgZXh0ZW50X3NwbGl0X2hvb2ssCisJICAgICJVbmV4cGVjdGVkIGV4dGVudF9ob29r cyBlcnJvciIpOworCWV4cGVjdF9wdHJfbmUob2xkX2hvb2tzLT5tZXJnZSwgZXh0ZW50X21lcmdl X2hvb2ssCisJICAgICJVbmV4cGVjdGVkIGV4dGVudF9ob29rcyBlcnJvciIpOworCisJaWYgKCFp c19iYWNrZ3JvdW5kX3RocmVhZF9lbmFibGVkKCkpIHsKKwkJdGVzdF9leHRlbnRfYm9keShhcmVu YV9pbmQpOworCX0KKworCS8qIFJlc3RvcmUgZXh0ZW50IGhvb2tzLiAqLworCWV4cGVjdF9kX2Vx KG1hbGxjdGxieW1pYihob29rc19taWIsIGhvb2tzX21pYmxlbiwgTlVMTCwgTlVMTCwKKwkgICAg KHZvaWQgKikmb2xkX2hvb2tzLCBuZXdfc2l6ZSksIDAsICJVbmV4cGVjdGVkIGV4dGVudF9ob29r cyBlcnJvciIpOworCWV4cGVjdF9kX2VxKG1hbGxjdGxieW1pYihob29rc19taWIsIGhvb2tzX21p YmxlbiwgKHZvaWQgKikmb2xkX2hvb2tzLAorCSAgICAmb2xkX3NpemUsIE5VTEwsIDApLCAwLCAi VW5leHBlY3RlZCBleHRlbnRfaG9va3MgZXJyb3IiKTsKKwlleHBlY3RfcHRyX2VxKG9sZF9ob29r cywgZGVmYXVsdF9ob29rcywgIlVuZXhwZWN0ZWQgZXh0ZW50X2hvb2tzIGVycm9yIik7CisJZXhw ZWN0X3B0cl9lcShvbGRfaG9va3MtPmFsbG9jLCBkZWZhdWx0X2hvb2tzLT5hbGxvYywKKwkgICAg IlVuZXhwZWN0ZWQgZXh0ZW50X2hvb2tzIGVycm9yIik7CisJZXhwZWN0X3B0cl9lcShvbGRfaG9v a3MtPmRhbGxvYywgZGVmYXVsdF9ob29rcy0+ZGFsbG9jLAorCSAgICAiVW5leHBlY3RlZCBleHRl bnRfaG9va3MgZXJyb3IiKTsKKwlleHBlY3RfcHRyX2VxKG9sZF9ob29rcy0+Y29tbWl0LCBkZWZh dWx0X2hvb2tzLT5jb21taXQsCisJICAgICJVbmV4cGVjdGVkIGV4dGVudF9ob29rcyBlcnJvciIp OworCWV4cGVjdF9wdHJfZXEob2xkX2hvb2tzLT5kZWNvbW1pdCwgZGVmYXVsdF9ob29rcy0+ZGVj b21taXQsCisJICAgICJVbmV4cGVjdGVkIGV4dGVudF9ob29rcyBlcnJvciIpOworCWV4cGVjdF9w dHJfZXEob2xkX2hvb2tzLT5wdXJnZV9sYXp5LCBkZWZhdWx0X2hvb2tzLT5wdXJnZV9sYXp5LAor CSAgICAiVW5leHBlY3RlZCBleHRlbnRfaG9va3MgZXJyb3IiKTsKKwlleHBlY3RfcHRyX2VxKG9s ZF9ob29rcy0+cHVyZ2VfZm9yY2VkLCBkZWZhdWx0X2hvb2tzLT5wdXJnZV9mb3JjZWQsCisJICAg ICJVbmV4cGVjdGVkIGV4dGVudF9ob29rcyBlcnJvciIpOworCWV4cGVjdF9wdHJfZXEob2xkX2hv b2tzLT5zcGxpdCwgZGVmYXVsdF9ob29rcy0+c3BsaXQsCisJICAgICJVbmV4cGVjdGVkIGV4dGVu dF9ob29rcyBlcnJvciIpOworCWV4cGVjdF9wdHJfZXEob2xkX2hvb2tzLT5tZXJnZSwgZGVmYXVs dF9ob29rcy0+bWVyZ2UsCisJICAgICJVbmV4cGVjdGVkIGV4dGVudF9ob29rcyBlcnJvciIpOwor fQorCitURVNUX0JFR0lOKHRlc3RfZXh0ZW50X21hbnVhbF9ob29rKSB7CisJdGVzdF9tYW51YWxf aG9va19hdXRvX2FyZW5hKCk7CisJdGVzdF9tYW51YWxfaG9va19ib2R5KCk7CisKKwkvKiBUZXN0 IGZhaWx1cmUgcGF0aHMuICovCisJdHJ5X3NwbGl0ID0gZmFsc2U7CisJdGVzdF9tYW51YWxfaG9v a19ib2R5KCk7CisJdHJ5X21lcmdlID0gZmFsc2U7CisJdGVzdF9tYW51YWxfaG9va19ib2R5KCk7 CisJdHJ5X3B1cmdlX2xhenkgPSBmYWxzZTsKKwl0cnlfcHVyZ2VfZm9yY2VkID0gZmFsc2U7CisJ dGVzdF9tYW51YWxfaG9va19ib2R5KCk7CisKKwl0cnlfc3BsaXQgPSB0cnlfbWVyZ2UgPSB0cnlf cHVyZ2VfbGF6eSA9IHRyeV9wdXJnZV9mb3JjZWQgPSB0cnVlOworfQorVEVTVF9FTkQKKworVEVT VF9CRUdJTih0ZXN0X2V4dGVudF9hdXRvX2hvb2spIHsKKwl1bnNpZ25lZCBhcmVuYV9pbmQ7CisJ c2l6ZV90IG5ld19zaXplLCBzejsKKwlleHRlbnRfaG9va3NfdCAqbmV3X2hvb2tzOworCisJZXh0 ZW50X2hvb2tzX3ByZXAoKTsKKworCXN6ID0gc2l6ZW9mKHVuc2lnbmVkKTsKKwluZXdfaG9va3Mg PSAmaG9va3M7CisJbmV3X3NpemUgPSBzaXplb2YoZXh0ZW50X2hvb2tzX3QgKik7CisJZXhwZWN0 X2RfZXEobWFsbGN0bCgiYXJlbmFzLmNyZWF0ZSIsICh2b2lkICopJmFyZW5hX2luZCwgJnN6LAor CSAgICAodm9pZCAqKSZuZXdfaG9va3MsIG5ld19zaXplKSwgMCwgIlVuZXhwZWN0ZWQgbWFsbGN0 bCgpIGZhaWx1cmUiKTsKKworCXRlc3Rfc2tpcF9pZihpc19iYWNrZ3JvdW5kX3RocmVhZF9lbmFi bGVkKCkpOworCXRlc3RfZXh0ZW50X2JvZHkoYXJlbmFfaW5kKTsKK30KK1RFU1RfRU5ECisKK3N0 YXRpYyB2b2lkCit0ZXN0X2FyZW5hc19jcmVhdGVfZXh0X2Jhc2UoYXJlbmFfY29uZmlnX3QgY29u ZmlnLAorCWJvb2wgZXhwZWN0X2hvb2tfZGF0YSwgYm9vbCBleHBlY3RfaG9va19tZXRhZGF0YSkK K3sKKwl1bnNpZ25lZCBhcmVuYSwgYXJlbmExOworCXZvaWQgKnB0cjsKKwlzaXplX3Qgc3ogPSBz aXplb2YodW5zaWduZWQpOworCisJZXh0ZW50X2hvb2tzX3ByZXAoKTsKKworCWNhbGxlZF9hbGxv YyA9IGZhbHNlOworCWV4cGVjdF9kX2VxKG1hbGxjdGwoImV4cGVyaW1lbnRhbC5hcmVuYXNfY3Jl YXRlX2V4dCIsCisJICAgICh2b2lkICopJmFyZW5hLCAmc3osICZjb25maWcsIHNpemVvZihhcmVu YV9jb25maWdfdCkpLCAwLAorCSAgICAiVW5leHBlY3RlZCBtYWxsY3RsKCkgZmFpbHVyZSIpOwor CWV4cGVjdF9iX2VxKGNhbGxlZF9hbGxvYywgZXhwZWN0X2hvb2tfbWV0YWRhdGEsCisJICAgICJl eHBlY3RlZCBob29rIG1ldGFkYXRhIGFsbG9jIG1pc21hdGNoIik7CisKKwljYWxsZWRfYWxsb2Mg PSBmYWxzZTsKKwlwdHIgPSBtYWxsb2N4KDQyLCBNQUxMT0NYX0FSRU5BKGFyZW5hKSB8IE1BTExP Q1hfVENBQ0hFX05PTkUpOworCWV4cGVjdF9iX2VxKGNhbGxlZF9hbGxvYywgZXhwZWN0X2hvb2tf ZGF0YSwKKwkgICAgImV4cGVjdGVkIGhvb2sgZGF0YSBhbGxvYyBtaXNtYXRjaCIpOworCisJZXhw ZWN0X3B0cl9ub3RfbnVsbChwdHIsICJVbmV4cGVjdGVkIG1hbGxvY3goKSBmYWlsdXJlIik7CisJ ZXhwZWN0X2RfZXEobWFsbGN0bCgiYXJlbmFzLmxvb2t1cCIsICZhcmVuYTEsICZzeiwgJnB0ciwg c2l6ZW9mKHB0cikpLAorCSAgICAwLCAiVW5leHBlY3RlZCBtYWxsY3RsKCkgZmFpbHVyZSIpOwor CWV4cGVjdF91X2VxKGFyZW5hLCBhcmVuYTEsICJVbmV4cGVjdGVkIGFyZW5hIGluZGV4Iik7CisJ ZGFsbG9jeChwdHIsIDApOworfQorCitURVNUX0JFR0lOKHRlc3RfYXJlbmFzX2NyZWF0ZV9leHRf d2l0aF9laG9va3Nfbm9fbWV0YWRhdGEpIHsKKwlhcmVuYV9jb25maWdfdCBjb25maWc7CisJY29u ZmlnLmV4dGVudF9ob29rcyA9ICZob29rczsKKwljb25maWcubWV0YWRhdGFfdXNlX2hvb2tzID0g ZmFsc2U7CisKKwl0ZXN0X2FyZW5hc19jcmVhdGVfZXh0X2Jhc2UoY29uZmlnLCB0cnVlLCBmYWxz ZSk7Cit9CitURVNUX0VORAorCitURVNUX0JFR0lOKHRlc3RfYXJlbmFzX2NyZWF0ZV9leHRfd2l0 aF9laG9va3Nfd2l0aF9tZXRhZGF0YSkgeworCWFyZW5hX2NvbmZpZ190IGNvbmZpZzsKKwljb25m aWcuZXh0ZW50X2hvb2tzID0gJmhvb2tzOworCWNvbmZpZy5tZXRhZGF0YV91c2VfaG9va3MgPSB0 cnVlOworCisJdGVzdF9hcmVuYXNfY3JlYXRlX2V4dF9iYXNlKGNvbmZpZywgdHJ1ZSwgdHJ1ZSk7 Cit9CitURVNUX0VORAorCitpbnQKK21haW4odm9pZCkgeworCXJldHVybiB0ZXN0KAorCSAgICB0 ZXN0X2V4dGVudF9tYW51YWxfaG9vaywKKwkgICAgdGVzdF9leHRlbnRfYXV0b19ob29rLAorCSAg ICB0ZXN0X2FyZW5hc19jcmVhdGVfZXh0X3dpdGhfZWhvb2tzX25vX21ldGFkYXRhLAorCSAgICB0 ZXN0X2FyZW5hc19jcmVhdGVfZXh0X3dpdGhfZWhvb2tzX3dpdGhfbWV0YWRhdGEpOworfQoKZGlm ZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvaW50 ZWdyYXRpb24vZXh0ZW50LnNoIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4z LjAvdGVzdC9pbnRlZ3JhdGlvbi9leHRlbnQuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMC4uMGNjMjE4NwotLS0gL2Rldi9udWxsCisrKyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1 aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvaW50ZWdyYXRpb24vZXh0ZW50LnNoCkBAIC0wLDAgKzEs NSBAQAorIyEvYmluL3NoCisKK2lmIFsgIngke2VuYWJsZV9maWxsfSIgPSAieDEiIF0gOyB0aGVu CisgIGV4cG9ydCBNQUxMT0NfQ09ORj0ianVuazpmYWxzZSIKK2ZpCgpkaWZmIC0tZ2l0IGEvMzg5 LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC9pbnRlZ3JhdGlvbi9tYWxs b2MuYyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvaW50ZWdy YXRpb24vbWFsbG9jLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWY0NDkx NgotLS0gL2Rldi9udWxsCisrKyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUu My4wL3Rlc3QvaW50ZWdyYXRpb24vbWFsbG9jLmMKQEAgLTAsMCArMSwxNiBAQAorI2luY2x1ZGUg InRlc3QvamVtYWxsb2NfdGVzdC5oIgorCitURVNUX0JFR0lOKHRlc3RfemVyb19hbGxvYykgewor CXZvaWQgKnJlcyA9IG1hbGxvYygwKTsKKwlhc3NlcnQocmVzKTsKKwlzaXplX3QgdXNhYmxlID0g VEVTVF9NQUxMT0NfU0laRShyZXMpOworCWFzc2VydCh1c2FibGUgPiAwKTsKKwlmcmVlKHJlcyk7 Cit9CitURVNUX0VORAorCitpbnQKK21haW4odm9pZCkgeworCXJldHVybiB0ZXN0KAorCSAgICB0 ZXN0X3plcm9fYWxsb2MpOworfQoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxk L2plbWFsbG9jLTUuMy4wL3Rlc3QvaW50ZWdyYXRpb24vbWFsbG9jeC5jIGIvMzg5LWRzLWJhc2Ut My4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC9pbnRlZ3JhdGlvbi9tYWxsb2N4LmMKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmRmMWUzZgotLS0gL2Rldi9udWxsCisr KyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvaW50ZWdyYXRp b24vbWFsbG9jeC5jCkBAIC0wLDAgKzEsMjc0IEBACisjaW5jbHVkZSAidGVzdC9qZW1hbGxvY190 ZXN0LmgiCisKK3N0YXRpYyB1bnNpZ25lZAorZ2V0X25zaXplc19pbXBsKGNvbnN0IGNoYXIgKmNt ZCkgeworCXVuc2lnbmVkIHJldDsKKwlzaXplX3QgejsKKworCXogPSBzaXplb2YodW5zaWduZWQp OworCWV4cGVjdF9kX2VxKG1hbGxjdGwoY21kLCAodm9pZCAqKSZyZXQsICZ6LCBOVUxMLCAwKSwg MCwKKwkgICAgIlVuZXhwZWN0ZWQgbWFsbGN0bChcIiVzXCIsIC4uLikgZmFpbHVyZSIsIGNtZCk7 CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdW5zaWduZWQKK2dldF9ubGFyZ2Uodm9pZCkg eworCXJldHVybiBnZXRfbnNpemVzX2ltcGwoImFyZW5hcy5ubGV4dGVudHMiKTsKK30KKworc3Rh dGljIHNpemVfdAorZ2V0X3NpemVfaW1wbChjb25zdCBjaGFyICpjbWQsIHNpemVfdCBpbmQpIHsK KwlzaXplX3QgcmV0OworCXNpemVfdCB6OworCXNpemVfdCBtaWJbNF07CisJc2l6ZV90IG1pYmxl biA9IDQ7CisKKwl6ID0gc2l6ZW9mKHNpemVfdCk7CisJZXhwZWN0X2RfZXEobWFsbGN0bG5hbWV0 b21pYihjbWQsIG1pYiwgJm1pYmxlbiksCisJICAgIDAsICJVbmV4cGVjdGVkIG1hbGxjdGxuYW1l dG9taWIoXCIlc1wiLCAuLi4pIGZhaWx1cmUiLCBjbWQpOworCW1pYlsyXSA9IGluZDsKKwl6ID0g c2l6ZW9mKHNpemVfdCk7CisJZXhwZWN0X2RfZXEobWFsbGN0bGJ5bWliKG1pYiwgbWlibGVuLCAo dm9pZCAqKSZyZXQsICZ6LCBOVUxMLCAwKSwKKwkgICAgMCwgIlVuZXhwZWN0ZWQgbWFsbGN0bGJ5 bWliKFtcIiVzXCIsICV6dV0sIC4uLikgZmFpbHVyZSIsIGNtZCwgaW5kKTsKKworCXJldHVybiBy ZXQ7Cit9CisKK3N0YXRpYyBzaXplX3QKK2dldF9sYXJnZV9zaXplKHNpemVfdCBpbmQpIHsKKwly ZXR1cm4gZ2V0X3NpemVfaW1wbCgiYXJlbmFzLmxleHRlbnQuMC5zaXplIiwgaW5kKTsKK30KKwor LyoKKyAqIE9uIHN5c3RlbXMgd2hpY2ggY2FuJ3QgbWVyZ2UgZXh0ZW50cywgdGVzdHMgdGhhdCBj YWxsIHRoaXMgZnVuY3Rpb24gZ2VuZXJhdGUKKyAqIGEgbG90IG9mIGRpcnR5IG1lbW9yeSB2ZXJ5 IHF1aWNrbHkuICBQdXJnaW5nIGJldHdlZW4gY3ljbGVzIG1pdGlnYXRlcworICogcG90ZW50aWFs IE9PTSBvbiBlLmcuIDMyLWJpdCBXaW5kb3dzLgorICovCitzdGF0aWMgdm9pZAorcHVyZ2Uodm9p ZCkgeworCWV4cGVjdF9kX2VxKG1hbGxjdGwoImFyZW5hLjAucHVyZ2UiLCBOVUxMLCBOVUxMLCBO VUxMLCAwKSwgMCwKKwkgICAgIlVuZXhwZWN0ZWQgbWFsbGN0bCBlcnJvciIpOworfQorCisvKgor ICogR0NDICItV2FsbG9jLXNpemUtbGFyZ2VyLXRoYW4iIHdhcm5pbmcgZGV0ZWN0cyB3aGVuIG9u ZSBvZiB0aGUgbWVtb3J5CisgKiBhbGxvY2F0aW9uIGZ1bmN0aW9ucyBpcyBjYWxsZWQgd2l0aCBh IHNpemUgbGFyZ2VyIHRoYW4gdGhlIG1heGltdW0gc2l6ZSB0aGF0CisgKiB0aGV5IHN1cHBvcnQu IEhlcmUgd2Ugd2FudCB0byBleHBsaWNpdGx5IHRlc3QgdGhhdCB0aGUgYWxsb2NhdGlvbiBmdW5j dGlvbnMKKyAqIGRvIGluZGVlZCBmYWlsIHByb3Blcmx5IHdoZW4gdGhpcyBpcyB0aGUgY2FzZSwg d2hpY2ggdHJpZ2dlcnMgdGhlIHdhcm5pbmcuCisgKiBUaGVyZWZvcmUgd2UgZGlzYWJsZSB0aGUg d2FybmluZyBmb3IgdGhlc2UgdGVzdHMuCisgKi8KK0pFTUFMTE9DX0RJQUdOT1NUSUNfUFVTSAor SkVNQUxMT0NfRElBR05PU1RJQ19JR05PUkVfQUxMT0NfU0laRV9MQVJHRVJfVEhBTgorCitURVNU X0JFR0lOKHRlc3Rfb3ZlcmZsb3cpIHsKKwlzaXplX3QgbGFyZ2VtYXg7CisKKwlsYXJnZW1heCA9 IGdldF9sYXJnZV9zaXplKGdldF9ubGFyZ2UoKS0xKTsKKworCWV4cGVjdF9wdHJfbnVsbChtYWxs b2N4KGxhcmdlbWF4KzEsIDApLAorCSAgICAiRXhwZWN0ZWQgT09NIGZvciBtYWxsb2N4KHNpemU9 JSN6eCwgMCkiLCBsYXJnZW1heCsxKTsKKworCWV4cGVjdF9wdHJfbnVsbChtYWxsb2N4KFpVKFBU UkRJRkZfTUFYKSsxLCAwKSwKKwkgICAgIkV4cGVjdGVkIE9PTSBmb3IgbWFsbG9jeChzaXplPSUj engsIDApIiwgWlUoUFRSRElGRl9NQVgpKzEpOworCisJZXhwZWN0X3B0cl9udWxsKG1hbGxvY3go U0laRV9UX01BWCwgMCksCisJICAgICJFeHBlY3RlZCBPT00gZm9yIG1hbGxvY3goc2l6ZT0lI3p4 LCAwKSIsIFNJWkVfVF9NQVgpOworCisJZXhwZWN0X3B0cl9udWxsKG1hbGxvY3goMSwgTUFMTE9D WF9BTElHTihaVShQVFJESUZGX01BWCkrMSkpLAorCSAgICAiRXhwZWN0ZWQgT09NIGZvciBtYWxs b2N4KHNpemU9MSwgTUFMTE9DWF9BTElHTiglI3p4KSkiLAorCSAgICBaVShQVFJESUZGX01BWCkr MSk7Cit9CitURVNUX0VORAorCitzdGF0aWMgdm9pZCAqCityZW1vdGVfYWxsb2Modm9pZCAqYXJn KSB7CisJdW5zaWduZWQgYXJlbmE7CisJc2l6ZV90IHN6ID0gc2l6ZW9mKHVuc2lnbmVkKTsKKwll eHBlY3RfZF9lcShtYWxsY3RsKCJhcmVuYXMuY3JlYXRlIiwgKHZvaWQgKikmYXJlbmEsICZzeiwg TlVMTCwgMCksIDAsCisJICAgICJVbmV4cGVjdGVkIG1hbGxjdGwoKSBmYWlsdXJlIik7CisJc2l6 ZV90IGxhcmdlX3N6OworCXN6ID0gc2l6ZW9mKHNpemVfdCk7CisJZXhwZWN0X2RfZXEobWFsbGN0 bCgiYXJlbmFzLmxleHRlbnQuMC5zaXplIiwgKHZvaWQgKikmbGFyZ2Vfc3osICZzeiwKKwkgICAg TlVMTCwgMCksIDAsICJVbmV4cGVjdGVkIG1hbGxjdGwgZmFpbHVyZSIpOworCisJdm9pZCAqcHRy ID0gbWFsbG9jeChsYXJnZV9zeiwgTUFMTE9DWF9BUkVOQShhcmVuYSkKKwkgICAgfCBNQUxMT0NY X1RDQUNIRV9OT05FKTsKKwl2b2lkICoqcmV0ID0gKHZvaWQgKiopYXJnOworCSpyZXQgPSBwdHI7 CisKKwlyZXR1cm4gTlVMTDsKK30KKworVEVTVF9CRUdJTih0ZXN0X3JlbW90ZV9mcmVlKSB7CisJ dGhkX3QgdGhkOworCXZvaWQgKnJldDsKKwl0aGRfY3JlYXRlKCZ0aGQsIHJlbW90ZV9hbGxvYywg KHZvaWQgKikmcmV0KTsKKwl0aGRfam9pbih0aGQsIE5VTEwpOworCWV4cGVjdF9wdHJfbm90X251 bGwocmV0LCAiVW5leHBlY3RlZCBtYWxsb2N4IGZhaWx1cmUiKTsKKworCS8qIEF2b2lkIFRDQUNI RV9OT05FIHRvIGV4cGxpY2l0bHkgdGVzdCB0Y2FjaGVfZmx1c2goKS4gKi8KKwlkYWxsb2N4KHJl dCwgMCk7CisJbWFsbGN0bCgidGhyZWFkLnRjYWNoZS5mbHVzaCIsIE5VTEwsIE5VTEwsIE5VTEws IDApOworfQorVEVTVF9FTkQKKworVEVTVF9CRUdJTih0ZXN0X29vbSkgeworCXNpemVfdCBsYXJn ZW1heDsKKwlib29sIG9vbTsKKwl2b2lkICpwdHJzWzNdOworCXVuc2lnbmVkIGk7CisKKwkvKgor CSAqIEl0IHNob3VsZCBiZSBpbXBvc3NpYmxlIHRvIGFsbG9jYXRlIHRocmVlIG9iamVjdHMgdGhh dCBlYWNoIGNvbnN1bWUKKwkgKiBuZWFybHkgaGFsZiB0aGUgdmlydHVhbCBhZGRyZXNzIHNwYWNl LgorCSAqLworCWxhcmdlbWF4ID0gZ2V0X2xhcmdlX3NpemUoZ2V0X25sYXJnZSgpLTEpOworCW9v bSA9IGZhbHNlOworCWZvciAoaSA9IDA7IGkgPCBzaXplb2YocHRycykgLyBzaXplb2Yodm9pZCAq KTsgaSsrKSB7CisJCXB0cnNbaV0gPSBtYWxsb2N4KGxhcmdlbWF4LCBNQUxMT0NYX0FSRU5BKDAp KTsKKwkJaWYgKHB0cnNbaV0gPT0gTlVMTCkgeworCQkJb29tID0gdHJ1ZTsKKwkJfQorCX0KKwll eHBlY3RfdHJ1ZShvb20sCisJICAgICJFeHBlY3RlZCBPT00gZHVyaW5nIHNlcmllcyBvZiBjYWxs cyB0byBtYWxsb2N4KHNpemU9JXp1LCAwKSIsCisJICAgIGxhcmdlbWF4KTsKKwlmb3IgKGkgPSAw OyBpIDwgc2l6ZW9mKHB0cnMpIC8gc2l6ZW9mKHZvaWQgKik7IGkrKykgeworCQlpZiAocHRyc1tp XSAhPSBOVUxMKSB7CisJCQlkYWxsb2N4KHB0cnNbaV0sIDApOworCQl9CisJfQorCXB1cmdlKCk7 CisKKyNpZiBMR19TSVpFT0ZfUFRSID09IDMKKwlleHBlY3RfcHRyX251bGwobWFsbG9jeCgweDgw MDAwMDAwMDAwMDAwMDBVTEwsCisJICAgIE1BTExPQ1hfQUxJR04oMHg4MDAwMDAwMDAwMDAwMDAw VUxMKSksCisJICAgICJFeHBlY3RlZCBPT00gZm9yIG1hbGxvY3goKSIpOworCWV4cGVjdF9wdHJf bnVsbChtYWxsb2N4KDB4ODAwMDAwMDAwMDAwMDAwMFVMTCwKKwkgICAgTUFMTE9DWF9BTElHTigw eDgwMDAwMDAwKSksCisJICAgICJFeHBlY3RlZCBPT00gZm9yIG1hbGxvY3goKSIpOworI2Vsc2UK KwlleHBlY3RfcHRyX251bGwobWFsbG9jeCgweDgwMDAwMDAwVUwsIE1BTExPQ1hfQUxJR04oMHg4 MDAwMDAwMFVMKSksCisJICAgICJFeHBlY3RlZCBPT00gZm9yIG1hbGxvY3goKSIpOworI2VuZGlm Cit9CitURVNUX0VORAorCisvKiBSZS1lbmFibGUgdGhlICItV2FsbG9jLXNpemUtbGFyZ2VyLXRo YW49IiB3YXJuaW5nICovCitKRU1BTExPQ19ESUFHTk9TVElDX1BPUAorCitURVNUX0JFR0lOKHRl c3RfYmFzaWMpIHsKKyNkZWZpbmUgTUFYU1ogKCgoc2l6ZV90KTEpIDw8IDIzKQorCXNpemVfdCBz ejsKKworCWZvciAoc3ogPSAxOyBzeiA8IE1BWFNaOyBzeiA9IG5hbGxvY3goc3osIDApICsgMSkg eworCQlzaXplX3QgbnN6LCByc3o7CisJCXZvaWQgKnA7CisJCW5zeiA9IG5hbGxvY3goc3osIDAp OworCQlleHBlY3RfenVfbmUobnN6LCAwLCAiVW5leHBlY3RlZCBuYWxsb2N4KCkgZXJyb3IiKTsK KwkJcCA9IG1hbGxvY3goc3osIDApOworCQlleHBlY3RfcHRyX25vdF9udWxsKHAsCisJCSAgICAi VW5leHBlY3RlZCBtYWxsb2N4KHNpemU9JXp4LCBmbGFncz0wKSBlcnJvciIsIHN6KTsKKwkJcnN6 ID0gc2FsbG9jeChwLCAwKTsKKwkJZXhwZWN0X3p1X2dlKHJzeiwgc3osICJSZWFsIHNpemUgc21h bGxlciB0aGFuIGV4cGVjdGVkIik7CisJCWV4cGVjdF96dV9lcShuc3osIHJzeiwgIm5hbGxvY3go KS9zYWxsb2N4KCkgc2l6ZSBtaXNtYXRjaCIpOworCQlkYWxsb2N4KHAsIDApOworCisJCXAgPSBt YWxsb2N4KHN6LCAwKTsKKwkJZXhwZWN0X3B0cl9ub3RfbnVsbChwLAorCQkgICAgIlVuZXhwZWN0 ZWQgbWFsbG9jeChzaXplPSV6eCwgZmxhZ3M9MCkgZXJyb3IiLCBzeik7CisJCWRhbGxvY3gocCwg MCk7CisKKwkJbnN6ID0gbmFsbG9jeChzeiwgTUFMTE9DWF9aRVJPKTsKKwkJZXhwZWN0X3p1X25l KG5zeiwgMCwgIlVuZXhwZWN0ZWQgbmFsbG9jeCgpIGVycm9yIik7CisJCXAgPSBtYWxsb2N4KHN6 LCBNQUxMT0NYX1pFUk8pOworCQlleHBlY3RfcHRyX25vdF9udWxsKHAsCisJCSAgICAiVW5leHBl Y3RlZCBtYWxsb2N4KHNpemU9JXp4LCBmbGFncz1NQUxMT0NYX1pFUk8pIGVycm9yIiwKKwkJICAg IG5zeik7CisJCXJzeiA9IHNhbGxvY3gocCwgMCk7CisJCWV4cGVjdF96dV9lcShuc3osIHJzeiwg Im5hbGxvY3goKS9zYWxsb2N4KCkgcnNpemUgbWlzbWF0Y2giKTsKKwkJZGFsbG9jeChwLCAwKTsK KwkJcHVyZ2UoKTsKKwl9CisjdW5kZWYgTUFYU1oKK30KK1RFU1RfRU5ECisKK1RFU1RfQkVHSU4o dGVzdF9hbGlnbm1lbnRfYW5kX3NpemUpIHsKKwljb25zdCBjaGFyICpwZXJjcHVfYXJlbmE7CisJ c2l6ZV90IHN6ID0gc2l6ZW9mKHBlcmNwdV9hcmVuYSk7CisKKwlpZihtYWxsY3RsKCJvcHQucGVy Y3B1X2FyZW5hIiwgKHZvaWQgKikmcGVyY3B1X2FyZW5hLCAmc3osIE5VTEwsIDApIHx8CisJICAg IHN0cmNtcChwZXJjcHVfYXJlbmEsICJkaXNhYmxlZCIpICE9IDApIHsKKwkJdGVzdF9za2lwKCJ0 ZXN0X2FsaWdubWVudF9hbmRfc2l6ZSBza2lwcGVkOiAiCisJCSAgICAibm90IHdvcmtpbmcgd2l0 aCBwZXJjcHUgYXJlbmEuIik7CisJfTsKKyNkZWZpbmUgTUFYQUxJR04gKCgoc2l6ZV90KTEpIDw8 IDIzKQorI2RlZmluZSBOSVRFUiA0CisJc2l6ZV90IG5zeiwgcnN6LCBhbGlnbm1lbnQsIHRvdGFs OworCXVuc2lnbmVkIGk7CisJdm9pZCAqcHNbTklURVJdOworCisJZm9yIChpID0gMDsgaSA8IE5J VEVSOyBpKyspIHsKKwkJcHNbaV0gPSBOVUxMOworCX0KKworCWZvciAoYWxpZ25tZW50ID0gODsK KwkgICAgYWxpZ25tZW50IDw9IE1BWEFMSUdOOworCSAgICBhbGlnbm1lbnQgPDw9IDEpIHsKKwkJ dG90YWwgPSAwOworCQlmb3IgKHN6ID0gMTsKKwkJICAgIHN6IDwgMyAqIGFsaWdubWVudCAmJiBz eiA8ICgxVSA8PCAzMSk7CisJCSAgICBzeiArPSAoYWxpZ25tZW50ID4+IChMR19TSVpFT0ZfUFRS LTEpKSAtIDEpIHsKKwkJCWZvciAoaSA9IDA7IGkgPCBOSVRFUjsgaSsrKSB7CisJCQkJbnN6ID0g bmFsbG9jeChzeiwgTUFMTE9DWF9BTElHTihhbGlnbm1lbnQpIHwKKwkJCQkgICAgTUFMTE9DWF9a RVJPIHwgTUFMTE9DWF9BUkVOQSgwKSk7CisJCQkJZXhwZWN0X3p1X25lKG5zeiwgMCwKKwkJCQkg ICAgIm5hbGxvY3goKSBlcnJvciBmb3IgYWxpZ25tZW50PSV6dSwgIgorCQkJCSAgICAic2l6ZT0l enUgKCUjengpIiwgYWxpZ25tZW50LCBzeiwgc3opOworCQkJCXBzW2ldID0gbWFsbG9jeChzeiwg TUFMTE9DWF9BTElHTihhbGlnbm1lbnQpIHwKKwkJCQkgICAgTUFMTE9DWF9aRVJPIHwgTUFMTE9D WF9BUkVOQSgwKSk7CisJCQkJZXhwZWN0X3B0cl9ub3RfbnVsbChwc1tpXSwKKwkJCQkgICAgIm1h bGxvY3goKSBlcnJvciBmb3IgYWxpZ25tZW50PSV6dSwgIgorCQkJCSAgICAic2l6ZT0lenUgKCUj engpIiwgYWxpZ25tZW50LCBzeiwgc3opOworCQkJCXJzeiA9IHNhbGxvY3gocHNbaV0sIDApOwor CQkJCWV4cGVjdF96dV9nZShyc3osIHN6LAorCQkJCSAgICAiUmVhbCBzaXplIHNtYWxsZXIgdGhh biBleHBlY3RlZCBmb3IgIgorCQkJCSAgICAiYWxpZ25tZW50PSV6dSwgc2l6ZT0lenUiLCBhbGln bm1lbnQsIHN6KTsKKwkJCQlleHBlY3RfenVfZXEobnN6LCByc3osCisJCQkJICAgICJuYWxsb2N4 KCkvc2FsbG9jeCgpIHNpemUgbWlzbWF0Y2ggZm9yICIKKwkJCQkgICAgImFsaWdubWVudD0lenUs IHNpemU9JXp1IiwgYWxpZ25tZW50LCBzeik7CisJCQkJZXhwZWN0X3B0cl9udWxsKAorCQkJCSAg ICAodm9pZCAqKSgodWludHB0cl90KXBzW2ldICYgKGFsaWdubWVudC0xKSksCisJCQkJICAgICIl cCBpbmFkZXF1YXRlbHkgYWxpZ25lZCBmb3IiCisJCQkJICAgICIgYWxpZ25tZW50PSV6dSwgc2l6 ZT0lenUiLCBwc1tpXSwKKwkJCQkgICAgYWxpZ25tZW50LCBzeik7CisJCQkJdG90YWwgKz0gcnN6 OworCQkJCWlmICh0b3RhbCA+PSAoTUFYQUxJR04gPDwgMSkpIHsKKwkJCQkJYnJlYWs7CisJCQkJ fQorCQkJfQorCQkJZm9yIChpID0gMDsgaSA8IE5JVEVSOyBpKyspIHsKKwkJCQlpZiAocHNbaV0g IT0gTlVMTCkgeworCQkJCQlkYWxsb2N4KHBzW2ldLCAwKTsKKwkJCQkJcHNbaV0gPSBOVUxMOwor CQkJCX0KKwkJCX0KKwkJfQorCQlwdXJnZSgpOworCX0KKyN1bmRlZiBNQVhBTElHTgorI3VuZGVm IE5JVEVSCit9CitURVNUX0VORAorCitpbnQKK21haW4odm9pZCkgeworCXJldHVybiB0ZXN0KAor CSAgICB0ZXN0X292ZXJmbG93LAorCSAgICB0ZXN0X29vbSwKKwkgICAgdGVzdF9yZW1vdGVfZnJl ZSwKKwkgICAgdGVzdF9iYXNpYywKKwkgICAgdGVzdF9hbGlnbm1lbnRfYW5kX3NpemUpOworfQoK ZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3Qv aW50ZWdyYXRpb24vbWFsbG9jeC5zaCBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9j LTUuMy4wL3Rlc3QvaW50ZWdyYXRpb24vbWFsbG9jeC5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwLi4wY2MyMTg3Ci0tLSAvZGV2L251bGwKKysrIGIvMzg5LWRzLWJhc2UtMy4z LjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC9pbnRlZ3JhdGlvbi9tYWxsb2N4LnNoCkBAIC0w LDAgKzEsNSBAQAorIyEvYmluL3NoCisKK2lmIFsgIngke2VuYWJsZV9maWxsfSIgPSAieDEiIF0g OyB0aGVuCisgIGV4cG9ydCBNQUxMT0NfQ09ORj0ianVuazpmYWxzZSIKK2ZpCgpkaWZmIC0tZ2l0 IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC9pbnRlZ3JhdGlv bi9vdmVyZmxvdy5jIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVz dC9pbnRlZ3JhdGlvbi9vdmVyZmxvdy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAuLmNlNjMzMjcKLS0tIC9kZXYvbnVsbAorKysgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9q ZW1hbGxvYy01LjMuMC90ZXN0L2ludGVncmF0aW9uL292ZXJmbG93LmMKQEAgLTAsMCArMSw1OSBA QAorI2luY2x1ZGUgInRlc3QvamVtYWxsb2NfdGVzdC5oIgorCisvKgorICogR0NDICItV2FsbG9j LXNpemUtbGFyZ2VyLXRoYW4iIHdhcm5pbmcgZGV0ZWN0cyB3aGVuIG9uZSBvZiB0aGUgbWVtb3J5 CisgKiBhbGxvY2F0aW9uIGZ1bmN0aW9ucyBpcyBjYWxsZWQgd2l0aCBhIHNpemUgbGFyZ2VyIHRo YW4gdGhlIG1heGltdW0gc2l6ZSB0aGF0CisgKiB0aGV5IHN1cHBvcnQuIEhlcmUgd2Ugd2FudCB0 byBleHBsaWNpdGx5IHRlc3QgdGhhdCB0aGUgYWxsb2NhdGlvbiBmdW5jdGlvbnMKKyAqIGRvIGlu ZGVlZCBmYWlsIHByb3Blcmx5IHdoZW4gdGhpcyBpcyB0aGUgY2FzZSwgd2hpY2ggdHJpZ2dlcnMg dGhlIHdhcm5pbmcuCisgKiBUaGVyZWZvcmUgd2UgZGlzYWJsZSB0aGUgd2FybmluZyBmb3IgdGhl c2UgdGVzdHMuCisgKi8KK0pFTUFMTE9DX0RJQUdOT1NUSUNfUFVTSAorSkVNQUxMT0NfRElBR05P U1RJQ19JR05PUkVfQUxMT0NfU0laRV9MQVJHRVJfVEhBTgorCitURVNUX0JFR0lOKHRlc3Rfb3Zl cmZsb3cpIHsKKwl1bnNpZ25lZCBubGV4dGVudHM7CisJc2l6ZV90IG1pYls0XTsKKwlzaXplX3Qg c3osIG1pYmxlbiwgbWF4X3NpemVfY2xhc3M7CisJdm9pZCAqcDsKKworCXN6ID0gc2l6ZW9mKHVu c2lnbmVkKTsKKwlleHBlY3RfZF9lcShtYWxsY3RsKCJhcmVuYXMubmxleHRlbnRzIiwgKHZvaWQg KikmbmxleHRlbnRzLCAmc3osIE5VTEwsCisJICAgIDApLCAwLCAiVW5leHBlY3RlZCBtYWxsY3Rs KCkgZXJyb3IiKTsKKworCW1pYmxlbiA9IHNpemVvZihtaWIpIC8gc2l6ZW9mKHNpemVfdCk7CisJ ZXhwZWN0X2RfZXEobWFsbGN0bG5hbWV0b21pYigiYXJlbmFzLmxleHRlbnQuMC5zaXplIiwgbWli LCAmbWlibGVuKSwgMCwKKwkgICAgIlVuZXhwZWN0ZWQgbWFsbGN0bG5hbWV0b21pYigpIGVycm9y Iik7CisJbWliWzJdID0gbmxleHRlbnRzIC0gMTsKKworCXN6ID0gc2l6ZW9mKHNpemVfdCk7CisJ ZXhwZWN0X2RfZXEobWFsbGN0bGJ5bWliKG1pYiwgbWlibGVuLCAodm9pZCAqKSZtYXhfc2l6ZV9j bGFzcywgJnN6LAorCSAgICBOVUxMLCAwKSwgMCwgIlVuZXhwZWN0ZWQgbWFsbGN0bGJ5bWliKCkg ZXJyb3IiKTsKKworCWV4cGVjdF9wdHJfbnVsbChtYWxsb2MobWF4X3NpemVfY2xhc3MgKyAxKSwK KwkgICAgIkV4cGVjdGVkIE9PTSBkdWUgdG8gb3Zlci1zaXplZCBhbGxvY2F0aW9uIHJlcXVlc3Qi KTsKKwlleHBlY3RfcHRyX251bGwobWFsbG9jKFNJWkVfVF9NQVgpLAorCSAgICAiRXhwZWN0ZWQg T09NIGR1ZSB0byBvdmVyLXNpemVkIGFsbG9jYXRpb24gcmVxdWVzdCIpOworCisJZXhwZWN0X3B0 cl9udWxsKGNhbGxvYygxLCBtYXhfc2l6ZV9jbGFzcyArIDEpLAorCSAgICAiRXhwZWN0ZWQgT09N IGR1ZSB0byBvdmVyLXNpemVkIGFsbG9jYXRpb24gcmVxdWVzdCIpOworCWV4cGVjdF9wdHJfbnVs bChjYWxsb2MoMSwgU0laRV9UX01BWCksCisJICAgICJFeHBlY3RlZCBPT00gZHVlIHRvIG92ZXIt c2l6ZWQgYWxsb2NhdGlvbiByZXF1ZXN0Iik7CisKKwlwID0gbWFsbG9jKDEpOworCWV4cGVjdF9w dHJfbm90X251bGwocCwgIlVuZXhwZWN0ZWQgbWFsbG9jKCkgT09NIik7CisJZXhwZWN0X3B0cl9u dWxsKHJlYWxsb2MocCwgbWF4X3NpemVfY2xhc3MgKyAxKSwKKwkgICAgIkV4cGVjdGVkIE9PTSBk dWUgdG8gb3Zlci1zaXplZCBhbGxvY2F0aW9uIHJlcXVlc3QiKTsKKwlleHBlY3RfcHRyX251bGwo cmVhbGxvYyhwLCBTSVpFX1RfTUFYKSwKKwkgICAgIkV4cGVjdGVkIE9PTSBkdWUgdG8gb3Zlci1z aXplZCBhbGxvY2F0aW9uIHJlcXVlc3QiKTsKKwlmcmVlKHApOworfQorVEVTVF9FTkQKKworLyog UmUtZW5hYmxlIHRoZSAiLVdhbGxvYy1zaXplLWxhcmdlci10aGFuPSIgd2FybmluZyAqLworSkVN QUxMT0NfRElBR05PU1RJQ19QT1AKKworaW50CittYWluKHZvaWQpIHsKKwlyZXR1cm4gdGVzdCgK KwkgICAgdGVzdF9vdmVyZmxvdyk7Cit9CgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAt YnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC9pbnRlZ3JhdGlvbi9wb3NpeF9tZW1hbGlnbi5jIGIv Mzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC9pbnRlZ3JhdGlvbi9w b3NpeF9tZW1hbGlnbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkYTA1 NDkKLS0tIC9kZXYvbnVsbAorKysgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01 LjMuMC90ZXN0L2ludGVncmF0aW9uL3Bvc2l4X21lbWFsaWduLmMKQEAgLTAsMCArMSwxMjggQEAK KyNpbmNsdWRlICJ0ZXN0L2plbWFsbG9jX3Rlc3QuaCIKKworI2RlZmluZSBNQVhBTElHTiAoKChz aXplX3QpMSkgPDwgMjMpCisKKy8qCisgKiBPbiBzeXN0ZW1zIHdoaWNoIGNhbid0IG1lcmdlIGV4 dGVudHMsIHRlc3RzIHRoYXQgY2FsbCB0aGlzIGZ1bmN0aW9uIGdlbmVyYXRlCisgKiBhIGxvdCBv ZiBkaXJ0eSBtZW1vcnkgdmVyeSBxdWlja2x5LiAgUHVyZ2luZyBiZXR3ZWVuIGN5Y2xlcyBtaXRp Z2F0ZXMKKyAqIHBvdGVudGlhbCBPT00gb24gZS5nLiAzMi1iaXQgV2luZG93cy4KKyAqLworc3Rh dGljIHZvaWQKK3B1cmdlKHZvaWQpIHsKKwlleHBlY3RfZF9lcShtYWxsY3RsKCJhcmVuYS4wLnB1 cmdlIiwgTlVMTCwgTlVMTCwgTlVMTCwgMCksIDAsCisJICAgICJVbmV4cGVjdGVkIG1hbGxjdGwg ZXJyb3IiKTsKK30KKworVEVTVF9CRUdJTih0ZXN0X2FsaWdubWVudF9lcnJvcnMpIHsKKwlzaXpl X3QgYWxpZ25tZW50OworCXZvaWQgKnA7CisKKwlmb3IgKGFsaWdubWVudCA9IDA7IGFsaWdubWVu dCA8IHNpemVvZih2b2lkICopOyBhbGlnbm1lbnQrKykgeworCQlleHBlY3RfZF9lcShwb3NpeF9t ZW1hbGlnbigmcCwgYWxpZ25tZW50LCAxKSwgRUlOVkFMLAorCQkgICAgIkV4cGVjdGVkIGVycm9y IGZvciBpbnZhbGlkIGFsaWdubWVudCAlenUiLAorCQkgICAgYWxpZ25tZW50KTsKKwl9CisKKwlm b3IgKGFsaWdubWVudCA9IHNpemVvZihzaXplX3QpOyBhbGlnbm1lbnQgPCBNQVhBTElHTjsKKwkg ICAgYWxpZ25tZW50IDw8PSAxKSB7CisJCWV4cGVjdF9kX25lKHBvc2l4X21lbWFsaWduKCZwLCBh bGlnbm1lbnQgKyAxLCAxKSwgMCwKKwkJICAgICJFeHBlY3RlZCBlcnJvciBmb3IgaW52YWxpZCBh bGlnbm1lbnQgJXp1IiwKKwkJICAgIGFsaWdubWVudCArIDEpOworCX0KK30KK1RFU1RfRU5ECisK K1RFU1RfQkVHSU4odGVzdF9vb21fZXJyb3JzKSB7CisJc2l6ZV90IGFsaWdubWVudCwgc2l6ZTsK Kwl2b2lkICpwOworCisjaWYgTEdfU0laRU9GX1BUUiA9PSAzCisJYWxpZ25tZW50ID0gVUlOVDY0 X0MoMHg4MDAwMDAwMDAwMDAwMDAwKTsKKwlzaXplICAgICAgPSBVSU5UNjRfQygweDgwMDAwMDAw MDAwMDAwMDApOworI2Vsc2UKKwlhbGlnbm1lbnQgPSAweDgwMDAwMDAwTFU7CisJc2l6ZSAgICAg ID0gMHg4MDAwMDAwMExVOworI2VuZGlmCisJZXhwZWN0X2RfbmUocG9zaXhfbWVtYWxpZ24oJnAs IGFsaWdubWVudCwgc2l6ZSksIDAsCisJICAgICJFeHBlY3RlZCBlcnJvciBmb3IgcG9zaXhfbWVt YWxpZ24oJnAsICV6dSwgJXp1KSIsCisJICAgIGFsaWdubWVudCwgc2l6ZSk7CisKKyNpZiBMR19T SVpFT0ZfUFRSID09IDMKKwlhbGlnbm1lbnQgPSBVSU5UNjRfQygweDQwMDAwMDAwMDAwMDAwMDAp OworCXNpemUgICAgICA9IFVJTlQ2NF9DKDB4YzAwMDAwMDAwMDAwMDAwMSk7CisjZWxzZQorCWFs aWdubWVudCA9IDB4NDAwMDAwMDBMVTsKKwlzaXplICAgICAgPSAweGMwMDAwMDAxTFU7CisjZW5k aWYKKwlleHBlY3RfZF9uZShwb3NpeF9tZW1hbGlnbigmcCwgYWxpZ25tZW50LCBzaXplKSwgMCwK KwkgICAgIkV4cGVjdGVkIGVycm9yIGZvciBwb3NpeF9tZW1hbGlnbigmcCwgJXp1LCAlenUpIiwK KwkgICAgYWxpZ25tZW50LCBzaXplKTsKKworCWFsaWdubWVudCA9IDB4MTBMVTsKKyNpZiBMR19T SVpFT0ZfUFRSID09IDMKKwlzaXplID0gVUlOVDY0X0MoMHhmZmZmZmZmZmZmZmZmZmYwKTsKKyNl bHNlCisJc2l6ZSA9IDB4ZmZmZmZmZjBMVTsKKyNlbmRpZgorCWV4cGVjdF9kX25lKHBvc2l4X21l bWFsaWduKCZwLCBhbGlnbm1lbnQsIHNpemUpLCAwLAorCSAgICAiRXhwZWN0ZWQgZXJyb3IgZm9y IHBvc2l4X21lbWFsaWduKCZwLCAlenUsICV6dSkiLAorCSAgICBhbGlnbm1lbnQsIHNpemUpOwor fQorVEVTVF9FTkQKKworVEVTVF9CRUdJTih0ZXN0X2FsaWdubWVudF9hbmRfc2l6ZSkgeworI2Rl ZmluZSBOSVRFUiA0CisJc2l6ZV90IGFsaWdubWVudCwgc2l6ZSwgdG90YWw7CisJdW5zaWduZWQg aTsKKwlpbnQgZXJyOworCXZvaWQgKnBzW05JVEVSXTsKKworCWZvciAoaSA9IDA7IGkgPCBOSVRF UjsgaSsrKSB7CisJCXBzW2ldID0gTlVMTDsKKwl9CisKKwlmb3IgKGFsaWdubWVudCA9IDg7CisJ ICAgIGFsaWdubWVudCA8PSBNQVhBTElHTjsKKwkgICAgYWxpZ25tZW50IDw8PSAxKSB7CisJCXRv dGFsID0gMDsKKwkJZm9yIChzaXplID0gMDsKKwkJICAgIHNpemUgPCAzICogYWxpZ25tZW50ICYm IHNpemUgPCAoMVUgPDwgMzEpOworCQkgICAgc2l6ZSArPSAoKHNpemUgPT0gMCkgPyAxIDoKKwkJ ICAgIChhbGlnbm1lbnQgPj4gKExHX1NJWkVPRl9QVFItMSkpIC0gMSkpIHsKKwkJCWZvciAoaSA9 IDA7IGkgPCBOSVRFUjsgaSsrKSB7CisJCQkJZXJyID0gcG9zaXhfbWVtYWxpZ24oJnBzW2ldLAor CQkJCSAgICBhbGlnbm1lbnQsIHNpemUpOworCQkJCWlmIChlcnIpIHsKKwkJCQkJY2hhciBidWZb QlVGRVJST1JfQlVGXTsKKworCQkJCQlidWZlcnJvcihnZXRfZXJybm8oKSwgYnVmLCBzaXplb2Yo YnVmKSk7CisJCQkJCXRlc3RfZmFpbCgKKwkJCQkJICAgICJFcnJvciBmb3IgYWxpZ25tZW50PSV6 dSwgIgorCQkJCQkgICAgInNpemU9JXp1ICglI3p4KTogJXMiLAorCQkJCQkgICAgYWxpZ25tZW50 LCBzaXplLCBzaXplLCBidWYpOworCQkJCX0KKwkJCQl0b3RhbCArPSBURVNUX01BTExPQ19TSVpF KHBzW2ldKTsKKwkJCQlpZiAodG90YWwgPj0gKE1BWEFMSUdOIDw8IDEpKSB7CisJCQkJCWJyZWFr OworCQkJCX0KKwkJCX0KKwkJCWZvciAoaSA9IDA7IGkgPCBOSVRFUjsgaSsrKSB7CisJCQkJaWYg KHBzW2ldICE9IE5VTEwpIHsKKwkJCQkJZnJlZShwc1tpXSk7CisJCQkJCXBzW2ldID0gTlVMTDsK KwkJCQl9CisJCQl9CisJCX0KKwkJcHVyZ2UoKTsKKwl9CisjdW5kZWYgTklURVIKK30KK1RFU1Rf RU5ECisKK2ludAorbWFpbih2b2lkKSB7CisJcmV0dXJuIHRlc3QoCisJICAgIHRlc3RfYWxpZ25t ZW50X2Vycm9ycywKKwkgICAgdGVzdF9vb21fZXJyb3JzLAorCSAgICB0ZXN0X2FsaWdubWVudF9h bmRfc2l6ZSk7Cit9CgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxs b2MtNS4zLjAvdGVzdC9pbnRlZ3JhdGlvbi9yYWxsb2N4LmMgYi8zODktZHMtYmFzZS0zLjMuMC1i dWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L2ludGVncmF0aW9uL3JhbGxvY3guYwpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGI4ZjM4Ci0tLSAvZGV2L251bGwKKysrIGIvMzg5 LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC9pbnRlZ3JhdGlvbi9yYWxs b2N4LmMKQEAgLTAsMCArMSwzMDggQEAKKyNpbmNsdWRlICJ0ZXN0L2plbWFsbG9jX3Rlc3QuaCIK Kworc3RhdGljIHVuc2lnbmVkCitnZXRfbnNpemVzX2ltcGwoY29uc3QgY2hhciAqY21kKSB7CisJ dW5zaWduZWQgcmV0OworCXNpemVfdCB6OworCisJeiA9IHNpemVvZih1bnNpZ25lZCk7CisJZXhw ZWN0X2RfZXEobWFsbGN0bChjbWQsICh2b2lkICopJnJldCwgJnosIE5VTEwsIDApLCAwLAorCSAg ICAiVW5leHBlY3RlZCBtYWxsY3RsKFwiJXNcIiwgLi4uKSBmYWlsdXJlIiwgY21kKTsKKworCXJl dHVybiByZXQ7Cit9CisKK3N0YXRpYyB1bnNpZ25lZAorZ2V0X25sYXJnZSh2b2lkKSB7CisJcmV0 dXJuIGdldF9uc2l6ZXNfaW1wbCgiYXJlbmFzLm5sZXh0ZW50cyIpOworfQorCitzdGF0aWMgc2l6 ZV90CitnZXRfc2l6ZV9pbXBsKGNvbnN0IGNoYXIgKmNtZCwgc2l6ZV90IGluZCkgeworCXNpemVf dCByZXQ7CisJc2l6ZV90IHo7CisJc2l6ZV90IG1pYls0XTsKKwlzaXplX3QgbWlibGVuID0gNDsK KworCXogPSBzaXplb2Yoc2l6ZV90KTsKKwlleHBlY3RfZF9lcShtYWxsY3RsbmFtZXRvbWliKGNt ZCwgbWliLCAmbWlibGVuKSwKKwkgICAgMCwgIlVuZXhwZWN0ZWQgbWFsbGN0bG5hbWV0b21pYihc IiVzXCIsIC4uLikgZmFpbHVyZSIsIGNtZCk7CisJbWliWzJdID0gaW5kOworCXogPSBzaXplb2Yo c2l6ZV90KTsKKwlleHBlY3RfZF9lcShtYWxsY3RsYnltaWIobWliLCBtaWJsZW4sICh2b2lkICop JnJldCwgJnosIE5VTEwsIDApLAorCSAgICAwLCAiVW5leHBlY3RlZCBtYWxsY3RsYnltaWIoW1wi JXNcIiwgJXp1XSwgLi4uKSBmYWlsdXJlIiwgY21kLCBpbmQpOworCisJcmV0dXJuIHJldDsKK30K Kworc3RhdGljIHNpemVfdAorZ2V0X2xhcmdlX3NpemUoc2l6ZV90IGluZCkgeworCXJldHVybiBn ZXRfc2l6ZV9pbXBsKCJhcmVuYXMubGV4dGVudC4wLnNpemUiLCBpbmQpOworfQorCitURVNUX0JF R0lOKHRlc3RfZ3Jvd19hbmRfc2hyaW5rKSB7CisJLyoKKwkgKiBVc2Ugdm9sYXRpbGUgdG8gd29y a2Fyb3VuZCBidWZmZXIgb3ZlcmZsb3cgZmFsc2UgcG9zaXRpdmVzCisJICogKC1EX0ZPUlRJRllf U09VUkNFPTMpLgorCSAqLworCXZvaWQgKnZvbGF0aWxlIHAsICp2b2xhdGlsZSBxOworCXNpemVf dCB0c3o7CisjZGVmaW5lIE5DWUNMRVMgMworCXVuc2lnbmVkIGksIGo7CisjZGVmaW5lIE5TWlMg MTAyNAorCXNpemVfdCBzenNbTlNaU107CisjZGVmaW5lIE1BWFNaIFpVKDEyICogMTAyNCAqIDEw MjQpCisKKwlwID0gbWFsbG9jeCgxLCAwKTsKKwlleHBlY3RfcHRyX25vdF9udWxsKHAsICJVbmV4 cGVjdGVkIG1hbGxvY3goKSBlcnJvciIpOworCXN6c1swXSA9IHNhbGxvY3gocCwgMCk7CisKKwlm b3IgKGkgPSAwOyBpIDwgTkNZQ0xFUzsgaSsrKSB7CisJCWZvciAoaiA9IDE7IGogPCBOU1pTICYm IHN6c1tqLTFdIDwgTUFYU1o7IGorKykgeworCQkJcSA9IHJhbGxvY3gocCwgc3pzW2otMV0rMSwg MCk7CisJCQlleHBlY3RfcHRyX25vdF9udWxsKHEsCisJCQkgICAgIlVuZXhwZWN0ZWQgcmFsbG9j eCgpIGVycm9yIGZvciBzaXplPSV6dS0tPiV6dSIsCisJCQkgICAgc3pzW2otMV0sIHN6c1tqLTFd KzEpOworCQkJc3pzW2pdID0gc2FsbG9jeChxLCAwKTsKKwkJCWV4cGVjdF96dV9uZShzenNbal0s IHN6c1tqLTFdKzEsCisJCQkgICAgIkV4cGVjdGVkIHNpemUgdG8gYmUgYXQgbGVhc3Q6ICV6dSIs IHN6c1tqLTFdKzEpOworCQkJcCA9IHE7CisJCX0KKworCQlmb3IgKGotLTsgaiA+IDA7IGotLSkg eworCQkJcSA9IHJhbGxvY3gocCwgc3pzW2otMV0sIDApOworCQkJZXhwZWN0X3B0cl9ub3RfbnVs bChxLAorCQkJICAgICJVbmV4cGVjdGVkIHJhbGxvY3goKSBlcnJvciBmb3Igc2l6ZT0lenUtLT4l enUiLAorCQkJICAgIHN6c1tqXSwgc3pzW2otMV0pOworCQkJdHN6ID0gc2FsbG9jeChxLCAwKTsK KwkJCWV4cGVjdF96dV9lcSh0c3osIHN6c1tqLTFdLAorCQkJICAgICJFeHBlY3RlZCBzaXplPSV6 dSwgZ290IHNpemU9JXp1Iiwgc3pzW2otMV0sIHRzeik7CisJCQlwID0gcTsKKwkJfQorCX0KKwor CWRhbGxvY3gocCwgMCk7CisjdW5kZWYgTUFYU1oKKyN1bmRlZiBOU1pTCisjdW5kZWYgTkNZQ0xF UworfQorVEVTVF9FTkQKKworc3RhdGljIGJvb2wKK3ZhbGlkYXRlX2ZpbGwodm9pZCAqcCwgdWlu dDhfdCBjLCBzaXplX3Qgb2Zmc2V0LCBzaXplX3QgbGVuKSB7CisJYm9vbCByZXQgPSBmYWxzZTsK KwkvKgorCSAqIFVzZSB2b2xhdGlsZSB0byB3b3JrYXJvdW5kIGJ1ZmZlciBvdmVyZmxvdyBmYWxz ZSBwb3NpdGl2ZXMKKwkgKiAoLURfRk9SVElGWV9TT1VSQ0U9MykuCisJICovCisJdWludDhfdCAq dm9sYXRpbGUgYnVmID0gKHVpbnQ4X3QgKilwOworCXNpemVfdCBpOworCisJZm9yIChpID0gMDsg aSA8IGxlbjsgaSsrKSB7CisJCXVpbnQ4X3QgYiA9IGJ1ZltvZmZzZXQraV07CisJCWlmIChiICE9 IGMpIHsKKwkJCXRlc3RfZmFpbCgiQWxsb2NhdGlvbiBhdCAlcCAobGVuPSV6dSkgY29udGFpbnMg JSN4ICIKKwkJCSAgICAicmF0aGVyIHRoYW4gJSN4IGF0IG9mZnNldCAlenUiLCBwLCBsZW4sIGIs IGMsCisJCQkgICAgb2Zmc2V0K2kpOworCQkJcmV0ID0gdHJ1ZTsKKwkJfQorCX0KKworCXJldHVy biByZXQ7Cit9CisKK1RFU1RfQkVHSU4odGVzdF96ZXJvKSB7CisJLyoKKwkgKiBVc2Ugdm9sYXRp bGUgdG8gd29ya2Fyb3VuZCBidWZmZXIgb3ZlcmZsb3cgZmFsc2UgcG9zaXRpdmVzCisJICogKC1E X0ZPUlRJRllfU09VUkNFPTMpLgorCSAqLworCXZvaWQgKnZvbGF0aWxlIHAsICp2b2xhdGlsZSBx OworCXNpemVfdCBwc3osIHFzeiwgaSwgajsKKwlzaXplX3Qgc3RhcnRfc2l6ZXNbXSA9IHsxLCAz KjEwMjQsIDYzKjEwMjQsIDQwOTUqMTAyNH07CisjZGVmaW5lIEZJTExfQllURSAweGFhVQorI2Rl ZmluZSBSQU5HRSAyMDQ4CisKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHN0YXJ0X3NpemVzKS9z aXplb2Yoc2l6ZV90KTsgaSsrKSB7CisJCXNpemVfdCBzdGFydF9zaXplID0gc3RhcnRfc2l6ZXNb aV07CisJCXAgPSBtYWxsb2N4KHN0YXJ0X3NpemUsIE1BTExPQ1hfWkVSTyk7CisJCWV4cGVjdF9w dHJfbm90X251bGwocCwgIlVuZXhwZWN0ZWQgbWFsbG9jeCgpIGVycm9yIik7CisJCXBzeiA9IHNh bGxvY3gocCwgMCk7CisKKwkJZXhwZWN0X2ZhbHNlKHZhbGlkYXRlX2ZpbGwocCwgMCwgMCwgcHN6 KSwKKwkJICAgICJFeHBlY3RlZCB6ZXJvZWQgbWVtb3J5Iik7CisJCW1lbXNldChwLCBGSUxMX0JZ VEUsIHBzeik7CisJCWV4cGVjdF9mYWxzZSh2YWxpZGF0ZV9maWxsKHAsIEZJTExfQllURSwgMCwg cHN6KSwKKwkJICAgICJFeHBlY3RlZCBmaWxsZWQgbWVtb3J5Iik7CisKKwkJZm9yIChqID0gMTsg aiA8IFJBTkdFOyBqKyspIHsKKwkJCXEgPSByYWxsb2N4KHAsIHN0YXJ0X3NpemUraiwgTUFMTE9D WF9aRVJPKTsKKwkJCWV4cGVjdF9wdHJfbm90X251bGwocSwgIlVuZXhwZWN0ZWQgcmFsbG9jeCgp IGVycm9yIik7CisJCQlxc3ogPSBzYWxsb2N4KHEsIDApOworCQkJaWYgKHEgIT0gcCB8fCBxc3og IT0gcHN6KSB7CisJCQkJZXhwZWN0X2ZhbHNlKHZhbGlkYXRlX2ZpbGwocSwgRklMTF9CWVRFLCAw LAorCQkJCSAgICBwc3opLCAiRXhwZWN0ZWQgZmlsbGVkIG1lbW9yeSIpOworCQkJCWV4cGVjdF9m YWxzZSh2YWxpZGF0ZV9maWxsKHEsIDAsIHBzeiwgcXN6LXBzeiksCisJCQkJICAgICJFeHBlY3Rl ZCB6ZXJvZWQgbWVtb3J5Iik7CisJCQl9CisJCQlpZiAocHN6ICE9IHFzeikgeworCQkJCW1lbXNl dCgodm9pZCAqKSgodWludHB0cl90KXErcHN6KSwgRklMTF9CWVRFLAorCQkJCSAgICBxc3otcHN6 KTsKKwkJCQlwc3ogPSBxc3o7CisJCQl9CisJCQlwID0gcTsKKwkJfQorCQlleHBlY3RfZmFsc2Uo dmFsaWRhdGVfZmlsbChwLCBGSUxMX0JZVEUsIDAsIHBzeiksCisJCSAgICAiRXhwZWN0ZWQgZmls bGVkIG1lbW9yeSIpOworCQlkYWxsb2N4KHAsIDApOworCX0KKyN1bmRlZiBGSUxMX0JZVEUKK30K K1RFU1RfRU5ECisKK1RFU1RfQkVHSU4odGVzdF9hbGlnbikgeworCXZvaWQgKnAsICpxOworCXNp emVfdCBhbGlnbjsKKyNkZWZpbmUgTUFYX0FMSUdOIChaVSgxKSA8PCAyNSkKKworCWFsaWduID0g WlUoMSk7CisJcCA9IG1hbGxvY3goMSwgTUFMTE9DWF9BTElHTihhbGlnbikpOworCWV4cGVjdF9w dHJfbm90X251bGwocCwgIlVuZXhwZWN0ZWQgbWFsbG9jeCgpIGVycm9yIik7CisKKwlmb3IgKGFs aWduIDw8PSAxOyBhbGlnbiA8PSBNQVhfQUxJR047IGFsaWduIDw8PSAxKSB7CisJCXEgPSByYWxs b2N4KHAsIDEsIE1BTExPQ1hfQUxJR04oYWxpZ24pKTsKKwkJZXhwZWN0X3B0cl9ub3RfbnVsbChx LAorCQkgICAgIlVuZXhwZWN0ZWQgcmFsbG9jeCgpIGVycm9yIGZvciBhbGlnbj0lenUiLCBhbGln bik7CisJCWV4cGVjdF9wdHJfbnVsbCgKKwkJICAgICh2b2lkICopKCh1aW50cHRyX3QpcSAmIChh bGlnbi0xKSksCisJCSAgICAiJXAgaW5hZGVxdWF0ZWx5IGFsaWduZWQgZm9yIGFsaWduPSV6dSIs CisJCSAgICBxLCBhbGlnbik7CisJCXAgPSBxOworCX0KKwlkYWxsb2N4KHAsIDApOworI3VuZGVm IE1BWF9BTElHTgorfQorVEVTVF9FTkQKKworVEVTVF9CRUdJTih0ZXN0X2FsaWduX2VudW0pIHsK Ky8qIFNwYW4gYm90aCBzbWFsbCBzaXplcyBhbmQgbGFyZ2Ugc2l6ZXMuICovCisjZGVmaW5lIExH X01JTiAxMgorI2RlZmluZSBMR19NQVggMTUKKwlmb3IgKHNpemVfdCBsZ19hbGlnbiA9IExHX01J TjsgbGdfYWxpZ24gPD0gTEdfTUFYOyArK2xnX2FsaWduKSB7CisJCWZvciAoc2l6ZV90IGxnX3Np emUgPSBMR19NSU47IGxnX3NpemUgPD0gTEdfTUFYOyArK2xnX3NpemUpIHsKKwkJCXNpemVfdCBz aXplID0gMSA8PCBsZ19zaXplOworCQkJZm9yIChzaXplX3QgbGdfYWxpZ25fbmV4dCA9IExHX01J TjsKKwkJCSAgICBsZ19hbGlnbl9uZXh0IDw9IExHX01BWDsgKytsZ19hbGlnbl9uZXh0KSB7CisJ CQkJaW50IGZsYWdzID0gTUFMTE9DWF9MR19BTElHTihsZ19hbGlnbik7CisJCQkJdm9pZCAqcCA9 IG1hbGxvY3goMSwgZmxhZ3MpOworCQkJCWFzc2VydF9wdHJfbm90X251bGwocCwKKwkJCQkgICAg IlVuZXhwZWN0ZWQgbWFsbG9jeCgpIGVycm9yIik7CisJCQkJYXNzZXJ0X3p1X2VxKG5hbGxvY3go MSwgZmxhZ3MpLAorCQkJCSAgICBURVNUX01BTExPQ19TSVpFKHApLAorCQkJCSAgICAiV3Jvbmcg bWFsbG9jeCgpIHVzYWJsZSBzaXplIik7CisJCQkJaW50IGZsYWdzX25leHQgPQorCQkJCSAgICBN QUxMT0NYX0xHX0FMSUdOKGxnX2FsaWduX25leHQpOworCQkJCXAgPSByYWxsb2N4KHAsIHNpemUs IGZsYWdzX25leHQpOworCQkJCWFzc2VydF9wdHJfbm90X251bGwocCwKKwkJCQkgICAgIlVuZXhw ZWN0ZWQgcmFsbG9jeCgpIGVycm9yIik7CisJCQkJZXhwZWN0X3p1X2VxKG5hbGxvY3goc2l6ZSwg ZmxhZ3NfbmV4dCksCisJCQkJICAgIFRFU1RfTUFMTE9DX1NJWkUocCksCisJCQkJICAgICJXcm9u ZyByYWxsb2N4KCkgdXNhYmxlIHNpemUiKTsKKwkJCQlmcmVlKHApOworCQkJfQorCQl9CisJfQor I3VuZGVmIExHX01BWAorI3VuZGVmIExHX01JTgorfQorVEVTVF9FTkQKKworVEVTVF9CRUdJTih0 ZXN0X2xnX2FsaWduX2FuZF96ZXJvKSB7CisJLyoKKwkgKiBVc2Ugdm9sYXRpbGUgdG8gd29ya2Fy b3VuZCBidWZmZXIgb3ZlcmZsb3cgZmFsc2UgcG9zaXRpdmVzCisJICogKC1EX0ZPUlRJRllfU09V UkNFPTMpLgorCSAqLworCXZvaWQgKnZvbGF0aWxlIHAsICp2b2xhdGlsZSBxOworCXVuc2lnbmVk IGxnX2FsaWduOworCXNpemVfdCBzejsKKyNkZWZpbmUgTUFYX0xHX0FMSUdOIDI1CisjZGVmaW5l IE1BWF9WQUxJREFURSAoWlUoMSkgPDwgMjIpCisKKwlsZ19hbGlnbiA9IDA7CisJcCA9IG1hbGxv Y3goMSwgTUFMTE9DWF9MR19BTElHTihsZ19hbGlnbil8TUFMTE9DWF9aRVJPKTsKKwlleHBlY3Rf cHRyX25vdF9udWxsKHAsICJVbmV4cGVjdGVkIG1hbGxvY3goKSBlcnJvciIpOworCisJZm9yIChs Z19hbGlnbisrOyBsZ19hbGlnbiA8PSBNQVhfTEdfQUxJR047IGxnX2FsaWduKyspIHsKKwkJcSA9 IHJhbGxvY3gocCwgMSwgTUFMTE9DWF9MR19BTElHTihsZ19hbGlnbil8TUFMTE9DWF9aRVJPKTsK KwkJZXhwZWN0X3B0cl9ub3RfbnVsbChxLAorCQkgICAgIlVuZXhwZWN0ZWQgcmFsbG9jeCgpIGVy cm9yIGZvciBsZ19hbGlnbj0ldSIsIGxnX2FsaWduKTsKKwkJZXhwZWN0X3B0cl9udWxsKAorCQkg ICAgKHZvaWQgKikoKHVpbnRwdHJfdClxICYgKChaVSgxKSA8PCBsZ19hbGlnbiktMSkpLAorCQkg ICAgIiVwIGluYWRlcXVhdGVseSBhbGlnbmVkIGZvciBsZ19hbGlnbj0ldSIsIHEsIGxnX2FsaWdu KTsKKwkJc3ogPSBzYWxsb2N4KHEsIDApOworCQlpZiAoKHN6IDw8IDEpIDw9IE1BWF9WQUxJREFU RSkgeworCQkJZXhwZWN0X2ZhbHNlKHZhbGlkYXRlX2ZpbGwocSwgMCwgMCwgc3opLAorCQkJICAg ICJFeHBlY3RlZCB6ZXJvZWQgbWVtb3J5Iik7CisJCX0gZWxzZSB7CisJCQlleHBlY3RfZmFsc2Uo dmFsaWRhdGVfZmlsbChxLCAwLCAwLCBNQVhfVkFMSURBVEUpLAorCQkJICAgICJFeHBlY3RlZCB6 ZXJvZWQgbWVtb3J5Iik7CisJCQlleHBlY3RfZmFsc2UodmFsaWRhdGVfZmlsbCgKKwkJCSAgICAo dm9pZCAqKSgodWludHB0cl90KXErc3otTUFYX1ZBTElEQVRFKSwKKwkJCSAgICAwLCAwLCBNQVhf VkFMSURBVEUpLCAiRXhwZWN0ZWQgemVyb2VkIG1lbW9yeSIpOworCQl9CisJCXAgPSBxOworCX0K KwlkYWxsb2N4KHAsIDApOworI3VuZGVmIE1BWF9WQUxJREFURQorI3VuZGVmIE1BWF9MR19BTElH TgorfQorVEVTVF9FTkQKKworLyoKKyAqIEdDQyAiLVdhbGxvYy1zaXplLWxhcmdlci10aGFuIiB3 YXJuaW5nIGRldGVjdHMgd2hlbiBvbmUgb2YgdGhlIG1lbW9yeQorICogYWxsb2NhdGlvbiBmdW5j dGlvbnMgaXMgY2FsbGVkIHdpdGggYSBzaXplIGxhcmdlciB0aGFuIHRoZSBtYXhpbXVtIHNpemUg dGhhdAorICogdGhleSBzdXBwb3J0LiBIZXJlIHdlIHdhbnQgdG8gZXhwbGljaXRseSB0ZXN0IHRo YXQgdGhlIGFsbG9jYXRpb24gZnVuY3Rpb25zCisgKiBkbyBpbmRlZWQgZmFpbCBwcm9wZXJseSB3 aGVuIHRoaXMgaXMgdGhlIGNhc2UsIHdoaWNoIHRyaWdnZXJzIHRoZSB3YXJuaW5nLgorICogVGhl cmVmb3JlIHdlIGRpc2FibGUgdGhlIHdhcm5pbmcgZm9yIHRoZXNlIHRlc3RzLgorICovCitKRU1B TExPQ19ESUFHTk9TVElDX1BVU0gKK0pFTUFMTE9DX0RJQUdOT1NUSUNfSUdOT1JFX0FMTE9DX1NJ WkVfTEFSR0VSX1RIQU4KKworVEVTVF9CRUdJTih0ZXN0X292ZXJmbG93KSB7CisJc2l6ZV90IGxh cmdlbWF4OworCXZvaWQgKnA7CisKKwlsYXJnZW1heCA9IGdldF9sYXJnZV9zaXplKGdldF9ubGFy Z2UoKS0xKTsKKworCXAgPSBtYWxsb2N4KDEsIDApOworCWV4cGVjdF9wdHJfbm90X251bGwocCwg IlVuZXhwZWN0ZWQgbWFsbG9jeCgpIGZhaWx1cmUiKTsKKworCWV4cGVjdF9wdHJfbnVsbChyYWxs b2N4KHAsIGxhcmdlbWF4KzEsIDApLAorCSAgICAiRXhwZWN0ZWQgT09NIGZvciByYWxsb2N4KHAs IHNpemU9JSN6eCwgMCkiLCBsYXJnZW1heCsxKTsKKworCWV4cGVjdF9wdHJfbnVsbChyYWxsb2N4 KHAsIFpVKFBUUkRJRkZfTUFYKSsxLCAwKSwKKwkgICAgIkV4cGVjdGVkIE9PTSBmb3IgcmFsbG9j eChwLCBzaXplPSUjengsIDApIiwgWlUoUFRSRElGRl9NQVgpKzEpOworCisJZXhwZWN0X3B0cl9u dWxsKHJhbGxvY3gocCwgU0laRV9UX01BWCwgMCksCisJICAgICJFeHBlY3RlZCBPT00gZm9yIHJh bGxvY3gocCwgc2l6ZT0lI3p4LCAwKSIsIFNJWkVfVF9NQVgpOworCisJZXhwZWN0X3B0cl9udWxs KHJhbGxvY3gocCwgMSwgTUFMTE9DWF9BTElHTihaVShQVFJESUZGX01BWCkrMSkpLAorCSAgICAi RXhwZWN0ZWQgT09NIGZvciByYWxsb2N4KHAsIHNpemU9MSwgTUFMTE9DWF9BTElHTiglI3p4KSki LAorCSAgICBaVShQVFJESUZGX01BWCkrMSk7CisKKwlkYWxsb2N4KHAsIDApOworfQorVEVTVF9F TkQKKworLyogUmUtZW5hYmxlIHRoZSAiLVdhbGxvYy1zaXplLWxhcmdlci10aGFuPSIgd2Fybmlu ZyAqLworSkVNQUxMT0NfRElBR05PU1RJQ19QT1AKKworaW50CittYWluKHZvaWQpIHsKKwlyZXR1 cm4gdGVzdCgKKwkgICAgdGVzdF9ncm93X2FuZF9zaHJpbmssCisJICAgIHRlc3RfemVybywKKwkg ICAgdGVzdF9hbGlnbiwKKwkgICAgdGVzdF9hbGlnbl9lbnVtLAorCSAgICB0ZXN0X2xnX2FsaWdu X2FuZF96ZXJvLAorCSAgICB0ZXN0X292ZXJmbG93KTsKK30KCmRpZmYgLS1naXQgYS8zODktZHMt YmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L2ludGVncmF0aW9uL3NkYWxsb2N4 LmMgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L2ludGVncmF0 aW9uL3NkYWxsb2N4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2EwMTQ0 OAotLS0gL2Rldi9udWxsCisrKyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUu My4wL3Rlc3QvaW50ZWdyYXRpb24vc2RhbGxvY3guYwpAQCAtMCwwICsxLDU1IEBACisjaW5jbHVk ZSAidGVzdC9qZW1hbGxvY190ZXN0LmgiCisKKyNkZWZpbmUgTUFYQUxJR04gKCgoc2l6ZV90KTEp IDw8IDIyKQorI2RlZmluZSBOSVRFUiAzCisKK1RFU1RfQkVHSU4odGVzdF9iYXNpYykgeworCXZv aWQgKnB0ciA9IG1hbGxvY3goNjQsIDApOworCXNkYWxsb2N4KHB0ciwgNjQsIDApOworfQorVEVT VF9FTkQKKworVEVTVF9CRUdJTih0ZXN0X2FsaWdubWVudF9hbmRfc2l6ZSkgeworCXNpemVfdCBu c3osIHN6LCBhbGlnbm1lbnQsIHRvdGFsOworCXVuc2lnbmVkIGk7CisJdm9pZCAqcHNbTklURVJd OworCisJZm9yIChpID0gMDsgaSA8IE5JVEVSOyBpKyspIHsKKwkJcHNbaV0gPSBOVUxMOworCX0K KworCWZvciAoYWxpZ25tZW50ID0gODsKKwkgICAgYWxpZ25tZW50IDw9IE1BWEFMSUdOOworCSAg ICBhbGlnbm1lbnQgPDw9IDEpIHsKKwkJdG90YWwgPSAwOworCQlmb3IgKHN6ID0gMTsKKwkJICAg IHN6IDwgMyAqIGFsaWdubWVudCAmJiBzeiA8ICgxVSA8PCAzMSk7CisJCSAgICBzeiArPSAoYWxp Z25tZW50ID4+IChMR19TSVpFT0ZfUFRSLTEpKSAtIDEpIHsKKwkJCWZvciAoaSA9IDA7IGkgPCBO SVRFUjsgaSsrKSB7CisJCQkJbnN6ID0gbmFsbG9jeChzeiwgTUFMTE9DWF9BTElHTihhbGlnbm1l bnQpIHwKKwkJCQkgICAgTUFMTE9DWF9aRVJPKTsKKwkJCQlwc1tpXSA9IG1hbGxvY3goc3osIE1B TExPQ1hfQUxJR04oYWxpZ25tZW50KSB8CisJCQkJICAgIE1BTExPQ1hfWkVSTyk7CisJCQkJdG90 YWwgKz0gbnN6OworCQkJCWlmICh0b3RhbCA+PSAoTUFYQUxJR04gPDwgMSkpIHsKKwkJCQkJYnJl YWs7CisJCQkJfQorCQkJfQorCQkJZm9yIChpID0gMDsgaSA8IE5JVEVSOyBpKyspIHsKKwkJCQlp ZiAocHNbaV0gIT0gTlVMTCkgeworCQkJCQlzZGFsbG9jeChwc1tpXSwgc3osCisJCQkJCSAgICBN QUxMT0NYX0FMSUdOKGFsaWdubWVudCkpOworCQkJCQlwc1tpXSA9IE5VTEw7CisJCQkJfQorCQkJ fQorCQl9CisJfQorfQorVEVTVF9FTkQKKworaW50CittYWluKHZvaWQpIHsKKwlyZXR1cm4gdGVz dF9ub19yZWVudHJhbmN5KAorCSAgICB0ZXN0X2Jhc2ljLAorCSAgICB0ZXN0X2FsaWdubWVudF9h bmRfc2l6ZSk7Cit9CgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxs b2MtNS4zLjAvdGVzdC9pbnRlZ3JhdGlvbi9zbGFiX3NpemVzLmMgYi8zODktZHMtYmFzZS0zLjMu MC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L2ludGVncmF0aW9uL3NsYWJfc2l6ZXMuYwpuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNmE2NmYyCi0tLSAvZGV2L251bGwKKysr IGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC9pbnRlZ3JhdGlv bi9zbGFiX3NpemVzLmMKQEAgLTAsMCArMSw4MCBAQAorI2luY2x1ZGUgInRlc3QvamVtYWxsb2Nf dGVzdC5oIgorCisvKiBOb3RlIHRoYXQgdGhpcyB0ZXN0IHJlbGllcyBvbiB0aGUgdW51c3VhbCBz bGFiIHNpemVzIHNldCBpbiBzbGFiX3NpemVzLnNoLiAqLworCitURVNUX0JFR0lOKHRlc3Rfc2xh Yl9zaXplcykgeworCXVuc2lnbmVkIG5iaW5zOworCXNpemVfdCBwYWdlOworCXNpemVfdCBzaXpl bWliWzRdOworCXNpemVfdCBzbGFibWliWzRdOworCXNpemVfdCBsZW47CisKKwlsZW4gPSBzaXpl b2YobmJpbnMpOworCWV4cGVjdF9kX2VxKG1hbGxjdGwoImFyZW5hcy5uYmlucyIsICZuYmlucywg JmxlbiwgTlVMTCwgMCksIDAsCisJICAgICJuYmlucyBtYWxsY3RsIGZhaWx1cmUiKTsKKworCWxl biA9IHNpemVvZihwYWdlKTsKKwlleHBlY3RfZF9lcShtYWxsY3RsKCJhcmVuYXMucGFnZSIsICZw YWdlLCAmbGVuLCBOVUxMLCAwKSwgMCwKKwkgICAgInBhZ2UgbWFsbGN0bCBmYWlsdXJlIik7CisK KwlsZW4gPSA0OworCWV4cGVjdF9kX2VxKG1hbGxjdGxuYW1ldG9taWIoImFyZW5hcy5iaW4uMC5z aXplIiwgc2l6ZW1pYiwgJmxlbiksIDAsCisJICAgICJiaW4gc2l6ZSBtYWxsY3RsbmFtZXRvbWli IGZhaWx1cmUiKTsKKworCWxlbiA9IDQ7CisJZXhwZWN0X2RfZXEobWFsbGN0bG5hbWV0b21pYigi YXJlbmFzLmJpbi4wLnNsYWJfc2l6ZSIsIHNsYWJtaWIsICZsZW4pLAorCSAgICAwLCAic2xhYiBz aXplIG1hbGxjdGxuYW1ldG9taWIgZmFpbHVyZSIpOworCisJc2l6ZV90IGJpZ2dlc3Rfc2xhYl9z ZWVuID0gMDsKKworCWZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBuYmluczsgaSsrKSB7CisJCXNp emVfdCBiaW5fc2l6ZTsKKwkJc2l6ZV90IHNsYWJfc2l6ZTsKKwkJbGVuID0gc2l6ZW9mKHNpemVf dCk7CisJCXNpemVtaWJbMl0gPSBpOworCQlzbGFibWliWzJdID0gaTsKKwkJZXhwZWN0X2RfZXEo bWFsbGN0bGJ5bWliKHNpemVtaWIsIDQsICh2b2lkICopJmJpbl9zaXplLCAmbGVuLAorCQkgICAg TlVMTCwgMCksIDAsICJiaW4gc2l6ZSBtYWxsY3RsYnltaWIgZmFpbHVyZSIpOworCisJCWxlbiA9 IHNpemVvZihzaXplX3QpOworCQlleHBlY3RfZF9lcShtYWxsY3RsYnltaWIoc2xhYm1pYiwgNCwg KHZvaWQgKikmc2xhYl9zaXplLCAmbGVuLAorCQkgICAgTlVMTCwgMCksIDAsICJzbGFiIHNpemUg bWFsbGN0bGJ5bWliIGZhaWx1cmUiKTsKKworCQlpZiAoYmluX3NpemUgPCAxMDApIHsKKwkJCS8q CisJCQkgKiBUaGVuIHdlIHNob3VsZCBiZSBhcyBjbG9zZSB0byAxNyBhcyBwb3NzaWJsZS4gIFNp bmNlCisJCQkgKiBub3QgYWxsIHBhZ2Ugc2l6ZXMgYXJlIHZhbGlkIChiZWNhdXNlIG9mIGJpdG1h cAorCQkJICogbGltaXRhdGlvbnMgb24gdGhlIG51bWJlciBvZiBpdGVtcyBpbiBhIHNsYWIpLCB3 ZQorCQkJICogc2hvdWxkIGF0IGxlYXN0IG1ha2Ugc3VyZSB0aGF0IHRoZSBudW1iZXIgb2YgcGFn ZXMKKwkJCSAqIGdvZXMgdXAuCisJCQkgKi8KKwkJCWV4cGVjdF96dV9nZShzbGFiX3NpemUsIGJp Z2dlc3Rfc2xhYl9zZWVuLAorCQkJICAgICJTbGFiIHNpemVzIHNob3VsZCBnbyB1cCIpOworCQkJ YmlnZ2VzdF9zbGFiX3NlZW4gPSBzbGFiX3NpemU7CisJCX0gZWxzZSBpZiAoCisJCSAgICAoMTAw IDw9IGJpbl9zaXplICYmIGJpbl9zaXplIDwgMTI4KQorCQkgICAgfHwgKDEyOCA8IGJpbl9zaXpl ICYmIGJpbl9zaXplIDw9IDIwMCkpIHsKKwkJCWV4cGVjdF96dV9lcShzbGFiX3NpemUsIHBhZ2Us CisJCQkgICAgIkZvcmNlZC1zbWFsbCBzbGFicyBzaG91bGQgYmUgc21hbGwiKTsKKwkJfSBlbHNl IGlmIChiaW5fc2l6ZSA9PSAxMjgpIHsKKwkJCWV4cGVjdF96dV9lcShzbGFiX3NpemUsIDIgKiBw YWdlLAorCQkJICAgICJGb3JjZWQtMi1wYWdlIHNsYWIgc2hvdWxkIGJlIDIgcGFnZXMiKTsKKwkJ fSBlbHNlIGlmICgyMDAgPCBiaW5fc2l6ZSAmJiBiaW5fc2l6ZSA8PSA0MDk2KSB7CisJCQlleHBl Y3RfenVfZ2Uoc2xhYl9zaXplLCBiaWdnZXN0X3NsYWJfc2VlbiwKKwkJCSAgICAiU2xhYiBzaXpl cyBzaG91bGQgZ28gdXAiKTsKKwkJCWJpZ2dlc3Rfc2xhYl9zZWVuID0gc2xhYl9zaXplOworCQl9 CisJfQorCS8qCisJICogRm9yIGFueSByZWFzb25hYmxlIGNvbmZpZ3VyYXRpb24sIDE3IHBhZ2Vz IHNob3VsZCBiZSBhIHZhbGlkIHNsYWIKKwkgKiBzaXplIGZvciA0MDk2LWJ5dGUgaXRlbXMuCisJ ICovCisJZXhwZWN0X3p1X2VxKGJpZ2dlc3Rfc2xhYl9zZWVuLCAxNyAqIHBhZ2UsICJEaWRuJ3Qg aGl0IHBhZ2UgdGFyZ2V0Iik7Cit9CitURVNUX0VORAorCitpbnQKK21haW4odm9pZCkgeworCXJl dHVybiB0ZXN0KAorCSAgICB0ZXN0X3NsYWJfc2l6ZXMpOworfQoKZGlmZiAtLWdpdCBhLzM4OS1k cy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvaW50ZWdyYXRpb24vc2xhYl9z aXplcy5zaCBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvaW50 ZWdyYXRpb24vc2xhYl9zaXplcy5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw Li4wN2UzZGI4Ci0tLSAvZGV2L251bGwKKysrIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVt YWxsb2MtNS4zLjAvdGVzdC9pbnRlZ3JhdGlvbi9zbGFiX3NpemVzLnNoCkBAIC0wLDAgKzEsNCBA QAorIyEvYmluL3NoCisKKyMgU29tZSBzY3Jld3ktbG9va2luZyBzbGFiIHNpemVzLgorZXhwb3J0 IE1BTExPQ19DT05GPSJzbGFiX3NpemVzOjEtNDA5NjoxN3wxMDAtMjAwOjF8MTI4LTEyODoyIgoK ZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3Qv aW50ZWdyYXRpb24vc21hbGxvY3guYyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9j LTUuMy4wL3Rlc3QvaW50ZWdyYXRpb24vc21hbGxvY3guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwLi4zODkzMTliCi0tLSAvZGV2L251bGwKKysrIGIvMzg5LWRzLWJhc2UtMy4z LjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC9pbnRlZ3JhdGlvbi9zbWFsbG9jeC5jCkBAIC0w LDAgKzEsMzEyIEBACisjaW5jbHVkZSAidGVzdC9qZW1hbGxvY190ZXN0LmgiCisjaW5jbHVkZSAi amVtYWxsb2MvamVtYWxsb2NfbWFjcm9zLmgiCisKKyNkZWZpbmUgU1RSX0hFTFBFUih4KSAjeAor I2RlZmluZSBTVFIoeCkgU1RSX0hFTFBFUih4KQorCisjaWZuZGVmIEpFTUFMTE9DX1ZFUlNJT05f R0lEX0lERU5UCisgICNlcnJvciAiSkVNQUxMT0NfVkVSU0lPTl9HSURfSURFTlQgbm90IGRlZmlu ZWQiCisjZW5kaWYKKworI2RlZmluZSBKT0lOKHgsIHkpIHggIyMgeQorI2RlZmluZSBKT0lOMih4 LCB5KSBKT0lOKHgsIHkpCisjZGVmaW5lIHNtYWxsb2N4IEpPSU4yKHNtYWxsb2N4XywgSkVNQUxM T0NfVkVSU0lPTl9HSURfSURFTlQpCisKK3R5cGVkZWYgc3RydWN0IHsKKwl2b2lkICpwdHI7CisJ c2l6ZV90IHNpemU7Cit9IHNtYWxsb2N4X3JldHVybl90OworCitleHRlcm4gc21hbGxvY3hfcmV0 dXJuX3QKK3NtYWxsb2N4KHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpOworCitzdGF0aWMgdW5zaWdu ZWQKK2dldF9uc2l6ZXNfaW1wbChjb25zdCBjaGFyICpjbWQpIHsKKwl1bnNpZ25lZCByZXQ7CisJ c2l6ZV90IHo7CisKKwl6ID0gc2l6ZW9mKHVuc2lnbmVkKTsKKwlleHBlY3RfZF9lcShtYWxsY3Rs KGNtZCwgKHZvaWQgKikmcmV0LCAmeiwgTlVMTCwgMCksIDAsCisJICAgICJVbmV4cGVjdGVkIG1h bGxjdGwoXCIlc1wiLCAuLi4pIGZhaWx1cmUiLCBjbWQpOworCisJcmV0dXJuIHJldDsKK30KKwor c3RhdGljIHVuc2lnbmVkCitnZXRfbmxhcmdlKHZvaWQpIHsKKwlyZXR1cm4gZ2V0X25zaXplc19p bXBsKCJhcmVuYXMubmxleHRlbnRzIik7Cit9CisKK3N0YXRpYyBzaXplX3QKK2dldF9zaXplX2lt cGwoY29uc3QgY2hhciAqY21kLCBzaXplX3QgaW5kKSB7CisJc2l6ZV90IHJldDsKKwlzaXplX3Qg ejsKKwlzaXplX3QgbWliWzRdOworCXNpemVfdCBtaWJsZW4gPSA0OworCisJeiA9IHNpemVvZihz aXplX3QpOworCWV4cGVjdF9kX2VxKG1hbGxjdGxuYW1ldG9taWIoY21kLCBtaWIsICZtaWJsZW4p LAorCSAgICAwLCAiVW5leHBlY3RlZCBtYWxsY3RsbmFtZXRvbWliKFwiJXNcIiwgLi4uKSBmYWls dXJlIiwgY21kKTsKKwltaWJbMl0gPSBpbmQ7CisJeiA9IHNpemVvZihzaXplX3QpOworCWV4cGVj dF9kX2VxKG1hbGxjdGxieW1pYihtaWIsIG1pYmxlbiwgKHZvaWQgKikmcmV0LCAmeiwgTlVMTCwg MCksCisJICAgIDAsICJVbmV4cGVjdGVkIG1hbGxjdGxieW1pYihbXCIlc1wiLCAlenVdLCAuLi4p IGZhaWx1cmUiLCBjbWQsIGluZCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc2l6ZV90 CitnZXRfbGFyZ2Vfc2l6ZShzaXplX3QgaW5kKSB7CisJcmV0dXJuIGdldF9zaXplX2ltcGwoImFy ZW5hcy5sZXh0ZW50LjAuc2l6ZSIsIGluZCk7Cit9CisKKy8qCisgKiBPbiBzeXN0ZW1zIHdoaWNo IGNhbid0IG1lcmdlIGV4dGVudHMsIHRlc3RzIHRoYXQgY2FsbCB0aGlzIGZ1bmN0aW9uIGdlbmVy YXRlCisgKiBhIGxvdCBvZiBkaXJ0eSBtZW1vcnkgdmVyeSBxdWlja2x5LiAgUHVyZ2luZyBiZXR3 ZWVuIGN5Y2xlcyBtaXRpZ2F0ZXMKKyAqIHBvdGVudGlhbCBPT00gb24gZS5nLiAzMi1iaXQgV2lu ZG93cy4KKyAqLworc3RhdGljIHZvaWQKK3B1cmdlKHZvaWQpIHsKKwlleHBlY3RfZF9lcShtYWxs Y3RsKCJhcmVuYS4wLnB1cmdlIiwgTlVMTCwgTlVMTCwgTlVMTCwgMCksIDAsCisJICAgICJVbmV4 cGVjdGVkIG1hbGxjdGwgZXJyb3IiKTsKK30KKworLyoKKyAqIEdDQyAiLVdhbGxvYy1zaXplLWxh cmdlci10aGFuIiB3YXJuaW5nIGRldGVjdHMgd2hlbiBvbmUgb2YgdGhlIG1lbW9yeQorICogYWxs b2NhdGlvbiBmdW5jdGlvbnMgaXMgY2FsbGVkIHdpdGggYSBzaXplIGxhcmdlciB0aGFuIHRoZSBt YXhpbXVtIHNpemUgdGhhdAorICogdGhleSBzdXBwb3J0LiBIZXJlIHdlIHdhbnQgdG8gZXhwbGlj aXRseSB0ZXN0IHRoYXQgdGhlIGFsbG9jYXRpb24gZnVuY3Rpb25zCisgKiBkbyBpbmRlZWQgZmFp bCBwcm9wZXJseSB3aGVuIHRoaXMgaXMgdGhlIGNhc2UsIHdoaWNoIHRyaWdnZXJzIHRoZSB3YXJu aW5nLgorICogVGhlcmVmb3JlIHdlIGRpc2FibGUgdGhlIHdhcm5pbmcgZm9yIHRoZXNlIHRlc3Rz LgorICovCitKRU1BTExPQ19ESUFHTk9TVElDX1BVU0gKK0pFTUFMTE9DX0RJQUdOT1NUSUNfSUdO T1JFX0FMTE9DX1NJWkVfTEFSR0VSX1RIQU4KKworVEVTVF9CRUdJTih0ZXN0X292ZXJmbG93KSB7 CisJc2l6ZV90IGxhcmdlbWF4OworCisJbGFyZ2VtYXggPSBnZXRfbGFyZ2Vfc2l6ZShnZXRfbmxh cmdlKCktMSk7CisKKwlleHBlY3RfcHRyX251bGwoc21hbGxvY3gobGFyZ2VtYXgrMSwgMCkucHRy LAorCSAgICAiRXhwZWN0ZWQgT09NIGZvciBzbWFsbG9jeChzaXplPSUjengsIDApIiwgbGFyZ2Vt YXgrMSk7CisKKwlleHBlY3RfcHRyX251bGwoc21hbGxvY3goWlUoUFRSRElGRl9NQVgpKzEsIDAp LnB0ciwKKwkgICAgIkV4cGVjdGVkIE9PTSBmb3Igc21hbGxvY3goc2l6ZT0lI3p4LCAwKSIsIFpV KFBUUkRJRkZfTUFYKSsxKTsKKworCWV4cGVjdF9wdHJfbnVsbChzbWFsbG9jeChTSVpFX1RfTUFY LCAwKS5wdHIsCisJICAgICJFeHBlY3RlZCBPT00gZm9yIHNtYWxsb2N4KHNpemU9JSN6eCwgMCki LCBTSVpFX1RfTUFYKTsKKworCWV4cGVjdF9wdHJfbnVsbChzbWFsbG9jeCgxLCBNQUxMT0NYX0FM SUdOKFpVKFBUUkRJRkZfTUFYKSsxKSkucHRyLAorCSAgICAiRXhwZWN0ZWQgT09NIGZvciBzbWFs bG9jeChzaXplPTEsIE1BTExPQ1hfQUxJR04oJSN6eCkpIiwKKwkgICAgWlUoUFRSRElGRl9NQVgp KzEpOworfQorVEVTVF9FTkQKKworc3RhdGljIHZvaWQgKgorcmVtb3RlX2FsbG9jKHZvaWQgKmFy ZykgeworCXVuc2lnbmVkIGFyZW5hOworCXNpemVfdCBzeiA9IHNpemVvZih1bnNpZ25lZCk7CisJ ZXhwZWN0X2RfZXEobWFsbGN0bCgiYXJlbmFzLmNyZWF0ZSIsICh2b2lkICopJmFyZW5hLCAmc3os IE5VTEwsIDApLCAwLAorCSAgICAiVW5leHBlY3RlZCBtYWxsY3RsKCkgZmFpbHVyZSIpOworCXNp emVfdCBsYXJnZV9zejsKKwlzeiA9IHNpemVvZihzaXplX3QpOworCWV4cGVjdF9kX2VxKG1hbGxj dGwoImFyZW5hcy5sZXh0ZW50LjAuc2l6ZSIsICh2b2lkICopJmxhcmdlX3N6LCAmc3osCisJICAg IE5VTEwsIDApLCAwLCAiVW5leHBlY3RlZCBtYWxsY3RsIGZhaWx1cmUiKTsKKworCXNtYWxsb2N4 X3JldHVybl90IHIKKwkgICAgPSBzbWFsbG9jeChsYXJnZV9zeiwgTUFMTE9DWF9BUkVOQShhcmVu YSkgfCBNQUxMT0NYX1RDQUNIRV9OT05FKTsKKwl2b2lkICpwdHIgPSByLnB0cjsKKwlleHBlY3Rf enVfZXEoci5zaXplLAorCSAgICBuYWxsb2N4KGxhcmdlX3N6LCBNQUxMT0NYX0FSRU5BKGFyZW5h KSB8IE1BTExPQ1hfVENBQ0hFX05PTkUpLAorCSAgICAiRXhwZWN0ZWQgc21hbGxvYyhzaXplLGZs YWdzKS5zaXplID09IG5hbGxvY3goc2l6ZSxmbGFncykiKTsKKwl2b2lkICoqcmV0ID0gKHZvaWQg KiopYXJnOworCSpyZXQgPSBwdHI7CisKKwlyZXR1cm4gTlVMTDsKK30KKworVEVTVF9CRUdJTih0 ZXN0X3JlbW90ZV9mcmVlKSB7CisJdGhkX3QgdGhkOworCXZvaWQgKnJldDsKKwl0aGRfY3JlYXRl KCZ0aGQsIHJlbW90ZV9hbGxvYywgKHZvaWQgKikmcmV0KTsKKwl0aGRfam9pbih0aGQsIE5VTEwp OworCWV4cGVjdF9wdHJfbm90X251bGwocmV0LCAiVW5leHBlY3RlZCBzbWFsbG9jeCBmYWlsdXJl Iik7CisKKwkvKiBBdm9pZCBUQ0FDSEVfTk9ORSB0byBleHBsaWNpdGx5IHRlc3QgdGNhY2hlX2Zs dXNoKCkuICovCisJZGFsbG9jeChyZXQsIDApOworCW1hbGxjdGwoInRocmVhZC50Y2FjaGUuZmx1 c2giLCBOVUxMLCBOVUxMLCBOVUxMLCAwKTsKK30KK1RFU1RfRU5ECisKK1RFU1RfQkVHSU4odGVz dF9vb20pIHsKKwlzaXplX3QgbGFyZ2VtYXg7CisJYm9vbCBvb207CisJdm9pZCAqcHRyc1szXTsK Kwl1bnNpZ25lZCBpOworCisJLyoKKwkgKiBJdCBzaG91bGQgYmUgaW1wb3NzaWJsZSB0byBhbGxv Y2F0ZSB0aHJlZSBvYmplY3RzIHRoYXQgZWFjaCBjb25zdW1lCisJICogbmVhcmx5IGhhbGYgdGhl IHZpcnR1YWwgYWRkcmVzcyBzcGFjZS4KKwkgKi8KKwlsYXJnZW1heCA9IGdldF9sYXJnZV9zaXpl KGdldF9ubGFyZ2UoKS0xKTsKKwlvb20gPSBmYWxzZTsKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9m KHB0cnMpIC8gc2l6ZW9mKHZvaWQgKik7IGkrKykgeworCQlwdHJzW2ldID0gc21hbGxvY3gobGFy Z2VtYXgsIDApLnB0cjsKKwkJaWYgKHB0cnNbaV0gPT0gTlVMTCkgeworCQkJb29tID0gdHJ1ZTsK KwkJfQorCX0KKwlleHBlY3RfdHJ1ZShvb20sCisJICAgICJFeHBlY3RlZCBPT00gZHVyaW5nIHNl cmllcyBvZiBjYWxscyB0byBzbWFsbG9jeChzaXplPSV6dSwgMCkiLAorCSAgICBsYXJnZW1heCk7 CisJZm9yIChpID0gMDsgaSA8IHNpemVvZihwdHJzKSAvIHNpemVvZih2b2lkICopOyBpKyspIHsK KwkJaWYgKHB0cnNbaV0gIT0gTlVMTCkgeworCQkJZGFsbG9jeChwdHJzW2ldLCAwKTsKKwkJfQor CX0KKwlwdXJnZSgpOworCisjaWYgTEdfU0laRU9GX1BUUiA9PSAzCisJZXhwZWN0X3B0cl9udWxs KHNtYWxsb2N4KDB4ODAwMDAwMDAwMDAwMDAwMFVMTCwKKwkgICAgTUFMTE9DWF9BTElHTigweDgw MDAwMDAwMDAwMDAwMDBVTEwpKS5wdHIsCisJICAgICJFeHBlY3RlZCBPT00gZm9yIHNtYWxsb2N4 KCkiKTsKKwlleHBlY3RfcHRyX251bGwoc21hbGxvY3goMHg4MDAwMDAwMDAwMDAwMDAwVUxMLAor CSAgICBNQUxMT0NYX0FMSUdOKDB4ODAwMDAwMDApKS5wdHIsCisJICAgICJFeHBlY3RlZCBPT00g Zm9yIHNtYWxsb2N4KCkiKTsKKyNlbHNlCisJZXhwZWN0X3B0cl9udWxsKHNtYWxsb2N4KDB4ODAw MDAwMDBVTCwgTUFMTE9DWF9BTElHTigweDgwMDAwMDAwVUwpKS5wdHIsCisJICAgICJFeHBlY3Rl ZCBPT00gZm9yIHNtYWxsb2N4KCkiKTsKKyNlbmRpZgorfQorVEVTVF9FTkQKKworLyogUmUtZW5h YmxlIHRoZSAiLVdhbGxvYy1zaXplLWxhcmdlci10aGFuPSIgd2FybmluZyAqLworSkVNQUxMT0Nf RElBR05PU1RJQ19QT1AKKworVEVTVF9CRUdJTih0ZXN0X2Jhc2ljKSB7CisjZGVmaW5lIE1BWFNa ICgoKHNpemVfdCkxKSA8PCAyMykKKwlzaXplX3Qgc3o7CisKKwlmb3IgKHN6ID0gMTsgc3ogPCBN QVhTWjsgc3ogPSBuYWxsb2N4KHN6LCAwKSArIDEpIHsKKwkJc21hbGxvY3hfcmV0dXJuX3QgcmV0 OworCQlzaXplX3QgbnN6LCByc3osIHNtejsKKwkJdm9pZCAqcDsKKwkJbnN6ID0gbmFsbG9jeChz eiwgMCk7CisJCWV4cGVjdF96dV9uZShuc3osIDAsICJVbmV4cGVjdGVkIG5hbGxvY3goKSBlcnJv ciIpOworCQlyZXQgPSBzbWFsbG9jeChzeiwgMCk7CisJCXAgPSByZXQucHRyOworCQlzbXogPSBy ZXQuc2l6ZTsKKwkJZXhwZWN0X3B0cl9ub3RfbnVsbChwLAorCQkgICAgIlVuZXhwZWN0ZWQgc21h bGxvY3goc2l6ZT0lengsIGZsYWdzPTApIGVycm9yIiwgc3opOworCQlyc3ogPSBzYWxsb2N4KHAs IDApOworCQlleHBlY3RfenVfZ2UocnN6LCBzeiwgIlJlYWwgc2l6ZSBzbWFsbGVyIHRoYW4gZXhw ZWN0ZWQiKTsKKwkJZXhwZWN0X3p1X2VxKG5zeiwgcnN6LCAibmFsbG9jeCgpL3NhbGxvY3goKSBz aXplIG1pc21hdGNoIik7CisJCWV4cGVjdF96dV9lcShuc3osIHNteiwgIm5hbGxvY3goKS9zbWFs bG9jeCgpIHNpemUgbWlzbWF0Y2giKTsKKwkJZGFsbG9jeChwLCAwKTsKKworCQlyZXQgPSBzbWFs bG9jeChzeiwgMCk7CisJCXAgPSByZXQucHRyOworCQlzbXogPSByZXQuc2l6ZTsKKwkJZXhwZWN0 X3B0cl9ub3RfbnVsbChwLAorCQkgICAgIlVuZXhwZWN0ZWQgc21hbGxvY3goc2l6ZT0lengsIGZs YWdzPTApIGVycm9yIiwgc3opOworCQlkYWxsb2N4KHAsIDApOworCisJCW5zeiA9IG5hbGxvY3go c3osIE1BTExPQ1hfWkVSTyk7CisJCWV4cGVjdF96dV9uZShuc3osIDAsICJVbmV4cGVjdGVkIG5h bGxvY3goKSBlcnJvciIpOworCQlleHBlY3RfenVfbmUoc216LCAwLCAiVW5leHBlY3RlZCBzbWFs bG9jeCgpIGVycm9yIik7CisJCXJldCA9IHNtYWxsb2N4KHN6LCBNQUxMT0NYX1pFUk8pOworCQlw ID0gcmV0LnB0cjsKKwkJZXhwZWN0X3B0cl9ub3RfbnVsbChwLAorCQkgICAgIlVuZXhwZWN0ZWQg c21hbGxvY3goc2l6ZT0lengsIGZsYWdzPU1BTExPQ1hfWkVSTykgZXJyb3IiLAorCQkgICAgbnN6 KTsKKwkJcnN6ID0gc2FsbG9jeChwLCAwKTsKKwkJZXhwZWN0X3p1X2VxKG5zeiwgcnN6LCAibmFs bG9jeCgpL3NhbGxvY3goKSByc2l6ZSBtaXNtYXRjaCIpOworCQlleHBlY3RfenVfZXEobnN6LCBz bXosICJuYWxsb2N4KCkvc21hbGxvY3goKSBzaXplIG1pc21hdGNoIik7CisJCWRhbGxvY3gocCwg MCk7CisJCXB1cmdlKCk7CisJfQorI3VuZGVmIE1BWFNaCit9CitURVNUX0VORAorCitURVNUX0JF R0lOKHRlc3RfYWxpZ25tZW50X2FuZF9zaXplKSB7CisJY29uc3QgY2hhciAqcGVyY3B1X2FyZW5h OworCXNpemVfdCBzeiA9IHNpemVvZihwZXJjcHVfYXJlbmEpOworCisJaWYobWFsbGN0bCgib3B0 LnBlcmNwdV9hcmVuYSIsICh2b2lkICopJnBlcmNwdV9hcmVuYSwgJnN6LCBOVUxMLCAwKSB8fAor CSAgICBzdHJjbXAocGVyY3B1X2FyZW5hLCAiZGlzYWJsZWQiKSAhPSAwKSB7CisJCXRlc3Rfc2tp cCgidGVzdF9hbGlnbm1lbnRfYW5kX3NpemUgc2tpcHBlZDogIgorCQkgICAgIm5vdCB3b3JraW5n IHdpdGggcGVyY3B1IGFyZW5hLiIpOworCX07CisjZGVmaW5lIE1BWEFMSUdOICgoKHNpemVfdCkx KSA8PCAyMykKKyNkZWZpbmUgTklURVIgNAorCXNpemVfdCBuc3osIHJzeiwgc216LCBhbGlnbm1l bnQsIHRvdGFsOworCXVuc2lnbmVkIGk7CisJdm9pZCAqcHNbTklURVJdOworCisJZm9yIChpID0g MDsgaSA8IE5JVEVSOyBpKyspIHsKKwkJcHNbaV0gPSBOVUxMOworCX0KKworCWZvciAoYWxpZ25t ZW50ID0gODsKKwkgICAgYWxpZ25tZW50IDw9IE1BWEFMSUdOOworCSAgICBhbGlnbm1lbnQgPDw9 IDEpIHsKKwkJdG90YWwgPSAwOworCQlmb3IgKHN6ID0gMTsKKwkJICAgIHN6IDwgMyAqIGFsaWdu bWVudCAmJiBzeiA8ICgxVSA8PCAzMSk7CisJCSAgICBzeiArPSAoYWxpZ25tZW50ID4+IChMR19T SVpFT0ZfUFRSLTEpKSAtIDEpIHsKKwkJCWZvciAoaSA9IDA7IGkgPCBOSVRFUjsgaSsrKSB7CisJ CQkJbnN6ID0gbmFsbG9jeChzeiwgTUFMTE9DWF9BTElHTihhbGlnbm1lbnQpIHwKKwkJCQkgICAg TUFMTE9DWF9aRVJPKTsKKwkJCQlleHBlY3RfenVfbmUobnN6LCAwLAorCQkJCSAgICAibmFsbG9j eCgpIGVycm9yIGZvciBhbGlnbm1lbnQ9JXp1LCAiCisJCQkJICAgICJzaXplPSV6dSAoJSN6eCki LCBhbGlnbm1lbnQsIHN6LCBzeik7CisJCQkJc21hbGxvY3hfcmV0dXJuX3QgcmV0CisJCQkJICAg ID0gc21hbGxvY3goc3osIE1BTExPQ1hfQUxJR04oYWxpZ25tZW50KSB8IE1BTExPQ1hfWkVSTyk7 CisJCQkJcHNbaV0gPSByZXQucHRyOworCQkJCWV4cGVjdF9wdHJfbm90X251bGwocHNbaV0sCisJ CQkJICAgICJzbWFsbG9jeCgpIGVycm9yIGZvciBhbGlnbm1lbnQ9JXp1LCAiCisJCQkJICAgICJz aXplPSV6dSAoJSN6eCkiLCBhbGlnbm1lbnQsIHN6LCBzeik7CisJCQkJcnN6ID0gc2FsbG9jeChw c1tpXSwgMCk7CisJCQkJc216ID0gcmV0LnNpemU7CisJCQkJZXhwZWN0X3p1X2dlKHJzeiwgc3os CisJCQkJICAgICJSZWFsIHNpemUgc21hbGxlciB0aGFuIGV4cGVjdGVkIGZvciAiCisJCQkJICAg ICJhbGlnbm1lbnQ9JXp1LCBzaXplPSV6dSIsIGFsaWdubWVudCwgc3opOworCQkJCWV4cGVjdF96 dV9lcShuc3osIHJzeiwKKwkJCQkgICAgIm5hbGxvY3goKS9zYWxsb2N4KCkgc2l6ZSBtaXNtYXRj aCBmb3IgIgorCQkJCSAgICAiYWxpZ25tZW50PSV6dSwgc2l6ZT0lenUiLCBhbGlnbm1lbnQsIHN6 KTsKKwkJCQlleHBlY3RfenVfZXEobnN6LCBzbXosCisJCQkJICAgICJuYWxsb2N4KCkvc21hbGxv Y3goKSBzaXplIG1pc21hdGNoIGZvciAiCisJCQkJICAgICJhbGlnbm1lbnQ9JXp1LCBzaXplPSV6 dSIsIGFsaWdubWVudCwgc3opOworCQkJCWV4cGVjdF9wdHJfbnVsbCgKKwkJCQkgICAgKHZvaWQg KikoKHVpbnRwdHJfdClwc1tpXSAmIChhbGlnbm1lbnQtMSkpLAorCQkJCSAgICAiJXAgaW5hZGVx dWF0ZWx5IGFsaWduZWQgZm9yIgorCQkJCSAgICAiIGFsaWdubWVudD0lenUsIHNpemU9JXp1Iiwg cHNbaV0sCisJCQkJICAgIGFsaWdubWVudCwgc3opOworCQkJCXRvdGFsICs9IHJzejsKKwkJCQlp ZiAodG90YWwgPj0gKE1BWEFMSUdOIDw8IDEpKSB7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0K KwkJCWZvciAoaSA9IDA7IGkgPCBOSVRFUjsgaSsrKSB7CisJCQkJaWYgKHBzW2ldICE9IE5VTEwp IHsKKwkJCQkJZGFsbG9jeChwc1tpXSwgMCk7CisJCQkJCXBzW2ldID0gTlVMTDsKKwkJCQl9CisJ CQl9CisJCX0KKwkJcHVyZ2UoKTsKKwl9CisjdW5kZWYgTUFYQUxJR04KKyN1bmRlZiBOSVRFUgor fQorVEVTVF9FTkQKKworaW50CittYWluKHZvaWQpIHsKKwlyZXR1cm4gdGVzdCgKKwkgICAgdGVz dF9vdmVyZmxvdywKKwkgICAgdGVzdF9vb20sCisJICAgIHRlc3RfcmVtb3RlX2ZyZWUsCisJICAg IHRlc3RfYmFzaWMsCisJICAgIHRlc3RfYWxpZ25tZW50X2FuZF9zaXplKTsKK30KCmRpZmYgLS1n aXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L2ludGVncmF0 aW9uL3NtYWxsb2N4LnNoIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAv dGVzdC9pbnRlZ3JhdGlvbi9zbWFsbG9jeC5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwLi5kMDdmMTBmCi0tLSAvZGV2L251bGwKKysrIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVp bGQvamVtYWxsb2MtNS4zLjAvdGVzdC9pbnRlZ3JhdGlvbi9zbWFsbG9jeC5zaApAQCAtMCwwICsx LDUgQEAKKyMhL2Jpbi9zaAorCitpZiBbICJ4JHtlbmFibGVfZmlsbH0iID0gIngxIiBdIDsgdGhl bgorICAgIGV4cG9ydCBNQUxMT0NfQ09ORj0ianVuazpmYWxzZSIKK2ZpCgpkaWZmIC0tZ2l0IGEv Mzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC9pbnRlZ3JhdGlvbi90 aHJlYWRfYXJlbmEuYyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rl c3QvaW50ZWdyYXRpb24vdGhyZWFkX2FyZW5hLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMC4uNGE2YWJmNgotLS0gL2Rldi9udWxsCisrKyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1 aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvaW50ZWdyYXRpb24vdGhyZWFkX2FyZW5hLmMKQEAgLTAs MCArMSw4NiBAQAorI2luY2x1ZGUgInRlc3QvamVtYWxsb2NfdGVzdC5oIgorCisjZGVmaW5lIE5U SFJFQURTIDEwCisKK3ZvaWQgKgordGhkX3N0YXJ0KHZvaWQgKmFyZykgeworCXVuc2lnbmVkIG1h aW5fYXJlbmFfaW5kID0gKih1bnNpZ25lZCAqKWFyZzsKKwl2b2lkICpwOworCXVuc2lnbmVkIGFy ZW5hX2luZDsKKwlzaXplX3Qgc2l6ZTsKKwlpbnQgZXJyOworCisJcCA9IG1hbGxvYygxKTsKKwll eHBlY3RfcHRyX25vdF9udWxsKHAsICJFcnJvciBpbiBtYWxsb2MoKSIpOworCWZyZWUocCk7CisK KwlzaXplID0gc2l6ZW9mKGFyZW5hX2luZCk7CisJaWYgKChlcnIgPSBtYWxsY3RsKCJ0aHJlYWQu YXJlbmEiLCAodm9pZCAqKSZhcmVuYV9pbmQsICZzaXplLAorCSAgICAodm9pZCAqKSZtYWluX2Fy ZW5hX2luZCwgc2l6ZW9mKG1haW5fYXJlbmFfaW5kKSkpKSB7CisJCWNoYXIgYnVmW0JVRkVSUk9S X0JVRl07CisKKwkJYnVmZXJyb3IoZXJyLCBidWYsIHNpemVvZihidWYpKTsKKwkJdGVzdF9mYWls KCJFcnJvciBpbiBtYWxsY3RsKCk6ICVzIiwgYnVmKTsKKwl9CisKKwlzaXplID0gc2l6ZW9mKGFy ZW5hX2luZCk7CisJaWYgKChlcnIgPSBtYWxsY3RsKCJ0aHJlYWQuYXJlbmEiLCAodm9pZCAqKSZh cmVuYV9pbmQsICZzaXplLCBOVUxMLAorCSAgICAwKSkpIHsKKwkJY2hhciBidWZbQlVGRVJST1Jf QlVGXTsKKworCQlidWZlcnJvcihlcnIsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOworCQl0ZXN0X2ZhaWwo IkVycm9yIGluIG1hbGxjdGwoKTogJXMiLCBidWYpOworCX0KKwlleHBlY3RfdV9lcShhcmVuYV9p bmQsIG1haW5fYXJlbmFfaW5kLAorCSAgICAiQXJlbmEgaW5kZXggc2hvdWxkIGJlIHNhbWUgYXMg Zm9yIG1haW4gdGhyZWFkIik7CisKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQKK21h bGxjdGxfZmFpbHVyZShpbnQgZXJyKSB7CisJY2hhciBidWZbQlVGRVJST1JfQlVGXTsKKworCWJ1 ZmVycm9yKGVyciwgYnVmLCBzaXplb2YoYnVmKSk7CisJdGVzdF9mYWlsKCJFcnJvciBpbiBtYWxs Y3RsKCk6ICVzIiwgYnVmKTsKK30KKworVEVTVF9CRUdJTih0ZXN0X3RocmVhZF9hcmVuYSkgewor CXZvaWQgKnA7CisJaW50IGVycjsKKwl0aGRfdCB0aGRzW05USFJFQURTXTsKKwl1bnNpZ25lZCBp OworCisJcCA9IG1hbGxvYygxKTsKKwlleHBlY3RfcHRyX25vdF9udWxsKHAsICJFcnJvciBpbiBt YWxsb2MoKSIpOworCisJdW5zaWduZWQgYXJlbmFfaW5kLCBvbGRfYXJlbmFfaW5kOworCXNpemVf dCBzeiA9IHNpemVvZih1bnNpZ25lZCk7CisJZXhwZWN0X2RfZXEobWFsbGN0bCgiYXJlbmFzLmNy ZWF0ZSIsICh2b2lkICopJmFyZW5hX2luZCwgJnN6LCBOVUxMLCAwKSwKKwkgICAgMCwgIkFyZW5h IGNyZWF0aW9uIGZhaWx1cmUiKTsKKworCXNpemVfdCBzaXplID0gc2l6ZW9mKGFyZW5hX2luZCk7 CisJaWYgKChlcnIgPSBtYWxsY3RsKCJ0aHJlYWQuYXJlbmEiLCAodm9pZCAqKSZvbGRfYXJlbmFf aW5kLCAmc2l6ZSwKKwkgICAgKHZvaWQgKikmYXJlbmFfaW5kLCBzaXplb2YoYXJlbmFfaW5kKSkp ICE9IDApIHsKKwkJbWFsbGN0bF9mYWlsdXJlKGVycik7CisJfQorCisJZm9yIChpID0gMDsgaSA8 IE5USFJFQURTOyBpKyspIHsKKwkJdGhkX2NyZWF0ZSgmdGhkc1tpXSwgdGhkX3N0YXJ0LAorCQkg ICAgKHZvaWQgKikmYXJlbmFfaW5kKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgTlRIUkVBRFM7 IGkrKykgeworCQlpbnRwdHJfdCBqb2luX3JldDsKKwkJdGhkX2pvaW4odGhkc1tpXSwgKHZvaWQg Kikmam9pbl9yZXQpOworCQlleHBlY3RfemRfZXEoam9pbl9yZXQsIDAsICJVbmV4cGVjdGVkIHRo cmVhZCBqb2luIGVycm9yIik7CisJfQorCWZyZWUocCk7Cit9CitURVNUX0VORAorCitpbnQKK21h aW4odm9pZCkgeworCXJldHVybiB0ZXN0KAorCSAgICB0ZXN0X3RocmVhZF9hcmVuYSk7Cit9Cgpk aWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC9p bnRlZ3JhdGlvbi90aHJlYWRfdGNhY2hlX2VuYWJsZWQuYyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1 aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvaW50ZWdyYXRpb24vdGhyZWFkX3RjYWNoZV9lbmFibGVk LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQ0ZGJlOQotLS0gL2Rldi9u dWxsCisrKyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvaW50 ZWdyYXRpb24vdGhyZWFkX3RjYWNoZV9lbmFibGVkLmMKQEAgLTAsMCArMSw4NyBAQAorI2luY2x1 ZGUgInRlc3QvamVtYWxsb2NfdGVzdC5oIgorCit2b2lkICoKK3RoZF9zdGFydCh2b2lkICphcmcp IHsKKwlib29sIGUwLCBlMTsKKwlzaXplX3Qgc3ogPSBzaXplb2YoYm9vbCk7CisJZXhwZWN0X2Rf ZXEobWFsbGN0bCgidGhyZWFkLnRjYWNoZS5lbmFibGVkIiwgKHZvaWQgKikmZTAsICZzeiwgTlVM TCwKKwkgICAgMCksIDAsICJVbmV4cGVjdGVkIG1hbGxjdGwgZmFpbHVyZSIpOworCisJaWYgKGUw KSB7CisJCWUxID0gZmFsc2U7CisJCWV4cGVjdF9kX2VxKG1hbGxjdGwoInRocmVhZC50Y2FjaGUu ZW5hYmxlZCIsICh2b2lkICopJmUwLCAmc3osCisJCSAgICAodm9pZCAqKSZlMSwgc3opLCAwLCAi VW5leHBlY3RlZCBtYWxsY3RsKCkgZXJyb3IiKTsKKwkJZXhwZWN0X3RydWUoZTAsICJ0Y2FjaGUg c2hvdWxkIGJlIGVuYWJsZWQiKTsKKwl9CisKKwllMSA9IHRydWU7CisJZXhwZWN0X2RfZXEobWFs bGN0bCgidGhyZWFkLnRjYWNoZS5lbmFibGVkIiwgKHZvaWQgKikmZTAsICZzeiwKKwkgICAgKHZv aWQgKikmZTEsIHN6KSwgMCwgIlVuZXhwZWN0ZWQgbWFsbGN0bCgpIGVycm9yIik7CisJZXhwZWN0 X2ZhbHNlKGUwLCAidGNhY2hlIHNob3VsZCBiZSBkaXNhYmxlZCIpOworCisJZTEgPSB0cnVlOwor CWV4cGVjdF9kX2VxKG1hbGxjdGwoInRocmVhZC50Y2FjaGUuZW5hYmxlZCIsICh2b2lkICopJmUw LCAmc3osCisJICAgICh2b2lkICopJmUxLCBzeiksIDAsICJVbmV4cGVjdGVkIG1hbGxjdGwoKSBl cnJvciIpOworCWV4cGVjdF90cnVlKGUwLCAidGNhY2hlIHNob3VsZCBiZSBlbmFibGVkIik7CisK KwllMSA9IGZhbHNlOworCWV4cGVjdF9kX2VxKG1hbGxjdGwoInRocmVhZC50Y2FjaGUuZW5hYmxl ZCIsICh2b2lkICopJmUwLCAmc3osCisJICAgICh2b2lkICopJmUxLCBzeiksIDAsICJVbmV4cGVj dGVkIG1hbGxjdGwoKSBlcnJvciIpOworCWV4cGVjdF90cnVlKGUwLCAidGNhY2hlIHNob3VsZCBi ZSBlbmFibGVkIik7CisKKwllMSA9IGZhbHNlOworCWV4cGVjdF9kX2VxKG1hbGxjdGwoInRocmVh ZC50Y2FjaGUuZW5hYmxlZCIsICh2b2lkICopJmUwLCAmc3osCisJICAgICh2b2lkICopJmUxLCBz eiksIDAsICJVbmV4cGVjdGVkIG1hbGxjdGwoKSBlcnJvciIpOworCWV4cGVjdF9mYWxzZShlMCwg InRjYWNoZSBzaG91bGQgYmUgZGlzYWJsZWQiKTsKKworCWZyZWUobWFsbG9jKDEpKTsKKwllMSA9 IHRydWU7CisJZXhwZWN0X2RfZXEobWFsbGN0bCgidGhyZWFkLnRjYWNoZS5lbmFibGVkIiwgKHZv aWQgKikmZTAsICZzeiwKKwkgICAgKHZvaWQgKikmZTEsIHN6KSwgMCwgIlVuZXhwZWN0ZWQgbWFs bGN0bCgpIGVycm9yIik7CisJZXhwZWN0X2ZhbHNlKGUwLCAidGNhY2hlIHNob3VsZCBiZSBkaXNh YmxlZCIpOworCisJZnJlZShtYWxsb2MoMSkpOworCWUxID0gdHJ1ZTsKKwlleHBlY3RfZF9lcSht YWxsY3RsKCJ0aHJlYWQudGNhY2hlLmVuYWJsZWQiLCAodm9pZCAqKSZlMCwgJnN6LAorCSAgICAo dm9pZCAqKSZlMSwgc3opLCAwLCAiVW5leHBlY3RlZCBtYWxsY3RsKCkgZXJyb3IiKTsKKwlleHBl Y3RfdHJ1ZShlMCwgInRjYWNoZSBzaG91bGQgYmUgZW5hYmxlZCIpOworCisJZnJlZShtYWxsb2Mo MSkpOworCWUxID0gZmFsc2U7CisJZXhwZWN0X2RfZXEobWFsbGN0bCgidGhyZWFkLnRjYWNoZS5l bmFibGVkIiwgKHZvaWQgKikmZTAsICZzeiwKKwkgICAgKHZvaWQgKikmZTEsIHN6KSwgMCwgIlVu ZXhwZWN0ZWQgbWFsbGN0bCgpIGVycm9yIik7CisJZXhwZWN0X3RydWUoZTAsICJ0Y2FjaGUgc2hv dWxkIGJlIGVuYWJsZWQiKTsKKworCWZyZWUobWFsbG9jKDEpKTsKKwllMSA9IGZhbHNlOworCWV4 cGVjdF9kX2VxKG1hbGxjdGwoInRocmVhZC50Y2FjaGUuZW5hYmxlZCIsICh2b2lkICopJmUwLCAm c3osCisJICAgICh2b2lkICopJmUxLCBzeiksIDAsICJVbmV4cGVjdGVkIG1hbGxjdGwoKSBlcnJv ciIpOworCWV4cGVjdF9mYWxzZShlMCwgInRjYWNoZSBzaG91bGQgYmUgZGlzYWJsZWQiKTsKKwor CWZyZWUobWFsbG9jKDEpKTsKKwlyZXR1cm4gTlVMTDsKK30KKworVEVTVF9CRUdJTih0ZXN0X21h aW5fdGhyZWFkKSB7CisJdGhkX3N0YXJ0KE5VTEwpOworfQorVEVTVF9FTkQKKworVEVTVF9CRUdJ Tih0ZXN0X3N1YnRocmVhZCkgeworCXRoZF90IHRoZDsKKworCXRoZF9jcmVhdGUoJnRoZCwgdGhk X3N0YXJ0LCBOVUxMKTsKKwl0aGRfam9pbih0aGQsIE5VTEwpOworfQorVEVTVF9FTkQKKworaW50 CittYWluKHZvaWQpIHsKKwkvKiBSdW4gdGVzdHMgbXVsdGlwbGUgdGltZXMgdG8gY2hlY2sgZm9y IGJhZCBpbnRlcmFjdGlvbnMuICovCisJcmV0dXJuIHRlc3QoCisJICAgIHRlc3RfbWFpbl90aHJl YWQsCisJICAgIHRlc3Rfc3VidGhyZWFkLAorCSAgICB0ZXN0X21haW5fdGhyZWFkLAorCSAgICB0 ZXN0X3N1YnRocmVhZCwKKwkgICAgdGVzdF9tYWluX3RocmVhZCk7Cit9CgpkaWZmIC0tZ2l0IGEv Mzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC9pbnRlZ3JhdGlvbi94 YWxsb2N4LmMgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L2lu dGVncmF0aW9uL3hhbGxvY3guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4x MzcwODU0Ci0tLSAvZGV2L251bGwKKysrIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxs b2MtNS4zLjAvdGVzdC9pbnRlZ3JhdGlvbi94YWxsb2N4LmMKQEAgLTAsMCArMSwzODQgQEAKKyNp bmNsdWRlICJ0ZXN0L2plbWFsbG9jX3Rlc3QuaCIKKworLyoKKyAqIFVzZSBhIHNlcGFyYXRlIGFy ZW5hIGZvciB4YWxsb2N4KCkgZXh0ZW5zaW9uL2NvbnRyYWN0aW9uIHRlc3RzIHNvIHRoYXQKKyAq IGludGVybmFsIGFsbG9jYXRpb24gZS5nLiBieSBoZWFwIHByb2ZpbGluZyBjYW4ndCBpbnRlcnBv c2UgYWxsb2NhdGlvbnMgd2hlcmUKKyAqIHhhbGxvY3goKSB3b3VsZCBvcmRpbmFyaWx5IGJlIGFi bGUgdG8gZXh0ZW5kLgorICovCitzdGF0aWMgdW5zaWduZWQKK2FyZW5hX2luZCh2b2lkKSB7CisJ c3RhdGljIHVuc2lnbmVkIGluZCA9IDA7CisKKwlpZiAoaW5kID09IDApIHsKKwkJc2l6ZV90IHN6 ID0gc2l6ZW9mKGluZCk7CisJCWV4cGVjdF9kX2VxKG1hbGxjdGwoImFyZW5hcy5jcmVhdGUiLCAo dm9pZCAqKSZpbmQsICZzeiwgTlVMTCwKKwkJICAgIDApLCAwLCAiVW5leHBlY3RlZCBtYWxsY3Rs IGZhaWx1cmUgY3JlYXRpbmcgYXJlbmEiKTsKKwl9CisKKwlyZXR1cm4gaW5kOworfQorCitURVNU X0JFR0lOKHRlc3Rfc2FtZV9zaXplKSB7CisJdm9pZCAqcDsKKwlzaXplX3Qgc3osIHRzejsKKwor CXAgPSBtYWxsb2N4KDQyLCAwKTsKKwlleHBlY3RfcHRyX25vdF9udWxsKHAsICJVbmV4cGVjdGVk IG1hbGxvY3goKSBlcnJvciIpOworCXN6ID0gc2FsbG9jeChwLCAwKTsKKworCXRzeiA9IHhhbGxv Y3gocCwgc3osIDAsIDApOworCWV4cGVjdF96dV9lcSh0c3osIHN6LCAiVW5leHBlY3RlZCBzaXpl IGNoYW5nZTogJXp1IC0tPiAlenUiLCBzeiwgdHN6KTsKKworCWRhbGxvY3gocCwgMCk7Cit9CitU RVNUX0VORAorCitURVNUX0JFR0lOKHRlc3RfZXh0cmFfbm9fbW92ZSkgeworCXZvaWQgKnA7CisJ c2l6ZV90IHN6LCB0c3o7CisKKwlwID0gbWFsbG9jeCg0MiwgMCk7CisJZXhwZWN0X3B0cl9ub3Rf bnVsbChwLCAiVW5leHBlY3RlZCBtYWxsb2N4KCkgZXJyb3IiKTsKKwlzeiA9IHNhbGxvY3gocCwg MCk7CisKKwl0c3ogPSB4YWxsb2N4KHAsIHN6LCBzei00MiwgMCk7CisJZXhwZWN0X3p1X2VxKHRz eiwgc3osICJVbmV4cGVjdGVkIHNpemUgY2hhbmdlOiAlenUgLS0+ICV6dSIsIHN6LCB0c3opOwor CisJZGFsbG9jeChwLCAwKTsKK30KK1RFU1RfRU5ECisKK1RFU1RfQkVHSU4odGVzdF9ub19tb3Zl X2ZhaWwpIHsKKwl2b2lkICpwOworCXNpemVfdCBzeiwgdHN6OworCisJcCA9IG1hbGxvY3goNDIs IDApOworCWV4cGVjdF9wdHJfbm90X251bGwocCwgIlVuZXhwZWN0ZWQgbWFsbG9jeCgpIGVycm9y Iik7CisJc3ogPSBzYWxsb2N4KHAsIDApOworCisJdHN6ID0geGFsbG9jeChwLCBzeiArIDUsIDAs IDApOworCWV4cGVjdF96dV9lcSh0c3osIHN6LCAiVW5leHBlY3RlZCBzaXplIGNoYW5nZTogJXp1 IC0tPiAlenUiLCBzeiwgdHN6KTsKKworCWRhbGxvY3gocCwgMCk7Cit9CitURVNUX0VORAorCitz dGF0aWMgdW5zaWduZWQKK2dldF9uc2l6ZXNfaW1wbChjb25zdCBjaGFyICpjbWQpIHsKKwl1bnNp Z25lZCByZXQ7CisJc2l6ZV90IHo7CisKKwl6ID0gc2l6ZW9mKHVuc2lnbmVkKTsKKwlleHBlY3Rf ZF9lcShtYWxsY3RsKGNtZCwgKHZvaWQgKikmcmV0LCAmeiwgTlVMTCwgMCksIDAsCisJICAgICJV bmV4cGVjdGVkIG1hbGxjdGwoXCIlc1wiLCAuLi4pIGZhaWx1cmUiLCBjbWQpOworCisJcmV0dXJu IHJldDsKK30KKworc3RhdGljIHVuc2lnbmVkCitnZXRfbnNtYWxsKHZvaWQpIHsKKwlyZXR1cm4g Z2V0X25zaXplc19pbXBsKCJhcmVuYXMubmJpbnMiKTsKK30KKworc3RhdGljIHVuc2lnbmVkCitn ZXRfbmxhcmdlKHZvaWQpIHsKKwlyZXR1cm4gZ2V0X25zaXplc19pbXBsKCJhcmVuYXMubmxleHRl bnRzIik7Cit9CisKK3N0YXRpYyBzaXplX3QKK2dldF9zaXplX2ltcGwoY29uc3QgY2hhciAqY21k LCBzaXplX3QgaW5kKSB7CisJc2l6ZV90IHJldDsKKwlzaXplX3QgejsKKwlzaXplX3QgbWliWzRd OworCXNpemVfdCBtaWJsZW4gPSA0OworCisJeiA9IHNpemVvZihzaXplX3QpOworCWV4cGVjdF9k X2VxKG1hbGxjdGxuYW1ldG9taWIoY21kLCBtaWIsICZtaWJsZW4pLAorCSAgICAwLCAiVW5leHBl Y3RlZCBtYWxsY3RsbmFtZXRvbWliKFwiJXNcIiwgLi4uKSBmYWlsdXJlIiwgY21kKTsKKwltaWJb Ml0gPSBpbmQ7CisJeiA9IHNpemVvZihzaXplX3QpOworCWV4cGVjdF9kX2VxKG1hbGxjdGxieW1p YihtaWIsIG1pYmxlbiwgKHZvaWQgKikmcmV0LCAmeiwgTlVMTCwgMCksCisJICAgIDAsICJVbmV4 cGVjdGVkIG1hbGxjdGxieW1pYihbXCIlc1wiLCAlenVdLCAuLi4pIGZhaWx1cmUiLCBjbWQsIGlu ZCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc2l6ZV90CitnZXRfc21hbGxfc2l6ZShz aXplX3QgaW5kKSB7CisJcmV0dXJuIGdldF9zaXplX2ltcGwoImFyZW5hcy5iaW4uMC5zaXplIiwg aW5kKTsKK30KKworc3RhdGljIHNpemVfdAorZ2V0X2xhcmdlX3NpemUoc2l6ZV90IGluZCkgewor CXJldHVybiBnZXRfc2l6ZV9pbXBsKCJhcmVuYXMubGV4dGVudC4wLnNpemUiLCBpbmQpOworfQor CitURVNUX0JFR0lOKHRlc3Rfc2l6ZSkgeworCXNpemVfdCBzbWFsbDAsIGxhcmdlbWF4OworCXZv aWQgKnA7CisKKwkvKiBHZXQgc2l6ZSBjbGFzc2VzLiAqLworCXNtYWxsMCA9IGdldF9zbWFsbF9z aXplKDApOworCWxhcmdlbWF4ID0gZ2V0X2xhcmdlX3NpemUoZ2V0X25sYXJnZSgpLTEpOworCisJ cCA9IG1hbGxvY3goc21hbGwwLCAwKTsKKwlleHBlY3RfcHRyX25vdF9udWxsKHAsICJVbmV4cGVj dGVkIG1hbGxvY3goKSBlcnJvciIpOworCisJLyogVGVzdCBzbWFsbGVzdCBzdXBwb3J0ZWQgc2l6 ZS4gKi8KKwlleHBlY3RfenVfZXEoeGFsbG9jeChwLCAxLCAwLCAwKSwgc21hbGwwLAorCSAgICAi VW5leHBlY3RlZCB4YWxsb2N4KCkgYmVoYXZpb3IiKTsKKworCS8qIFRlc3QgbGFyZ2VzdCBzdXBw b3J0ZWQgc2l6ZS4gKi8KKwlleHBlY3RfenVfbGUoeGFsbG9jeChwLCBsYXJnZW1heCwgMCwgMCks IGxhcmdlbWF4LAorCSAgICAiVW5leHBlY3RlZCB4YWxsb2N4KCkgYmVoYXZpb3IiKTsKKworCS8q IFRlc3Qgc2l6ZSBvdmVyZmxvdy4gKi8KKwlleHBlY3RfenVfbGUoeGFsbG9jeChwLCBsYXJnZW1h eCsxLCAwLCAwKSwgbGFyZ2VtYXgsCisJICAgICJVbmV4cGVjdGVkIHhhbGxvY3goKSBiZWhhdmlv ciIpOworCWV4cGVjdF96dV9sZSh4YWxsb2N4KHAsIFNJWkVfVF9NQVgsIDAsIDApLCBsYXJnZW1h eCwKKwkgICAgIlVuZXhwZWN0ZWQgeGFsbG9jeCgpIGJlaGF2aW9yIik7CisKKwlkYWxsb2N4KHAs IDApOworfQorVEVTVF9FTkQKKworVEVTVF9CRUdJTih0ZXN0X3NpemVfZXh0cmFfb3ZlcmZsb3cp IHsKKwlzaXplX3Qgc21hbGwwLCBsYXJnZW1heDsKKwl2b2lkICpwOworCisJLyogR2V0IHNpemUg Y2xhc3Nlcy4gKi8KKwlzbWFsbDAgPSBnZXRfc21hbGxfc2l6ZSgwKTsKKwlsYXJnZW1heCA9IGdl dF9sYXJnZV9zaXplKGdldF9ubGFyZ2UoKS0xKTsKKworCXAgPSBtYWxsb2N4KHNtYWxsMCwgMCk7 CisJZXhwZWN0X3B0cl9ub3RfbnVsbChwLCAiVW5leHBlY3RlZCBtYWxsb2N4KCkgZXJyb3IiKTsK KworCS8qIFRlc3Qgb3ZlcmZsb3dzIHRoYXQgY2FuIGJlIHJlc29sdmVkIGJ5IGNsYW1waW5nIGV4 dHJhLiAqLworCWV4cGVjdF96dV9sZSh4YWxsb2N4KHAsIGxhcmdlbWF4LTEsIDIsIDApLCBsYXJn ZW1heCwKKwkgICAgIlVuZXhwZWN0ZWQgeGFsbG9jeCgpIGJlaGF2aW9yIik7CisJZXhwZWN0X3p1 X2xlKHhhbGxvY3gocCwgbGFyZ2VtYXgsIDEsIDApLCBsYXJnZW1heCwKKwkgICAgIlVuZXhwZWN0 ZWQgeGFsbG9jeCgpIGJlaGF2aW9yIik7CisKKwkvKiBUZXN0IG92ZXJmbG93IHN1Y2ggdGhhdCBs YXJnZW1heC1zaXplIHVuZGVyZmxvd3MuICovCisJZXhwZWN0X3p1X2xlKHhhbGxvY3gocCwgbGFy Z2VtYXgrMSwgMiwgMCksIGxhcmdlbWF4LAorCSAgICAiVW5leHBlY3RlZCB4YWxsb2N4KCkgYmVo YXZpb3IiKTsKKwlleHBlY3RfenVfbGUoeGFsbG9jeChwLCBsYXJnZW1heCsyLCAzLCAwKSwgbGFy Z2VtYXgsCisJICAgICJVbmV4cGVjdGVkIHhhbGxvY3goKSBiZWhhdmlvciIpOworCWV4cGVjdF96 dV9sZSh4YWxsb2N4KHAsIFNJWkVfVF9NQVgtMiwgMiwgMCksIGxhcmdlbWF4LAorCSAgICAiVW5l eHBlY3RlZCB4YWxsb2N4KCkgYmVoYXZpb3IiKTsKKwlleHBlY3RfenVfbGUoeGFsbG9jeChwLCBT SVpFX1RfTUFYLTEsIDEsIDApLCBsYXJnZW1heCwKKwkgICAgIlVuZXhwZWN0ZWQgeGFsbG9jeCgp IGJlaGF2aW9yIik7CisKKwlkYWxsb2N4KHAsIDApOworfQorVEVTVF9FTkQKKworVEVTVF9CRUdJ Tih0ZXN0X2V4dHJhX3NtYWxsKSB7CisJc2l6ZV90IHNtYWxsMCwgc21hbGwxLCBsYXJnZW1heDsK Kwl2b2lkICpwOworCisJLyogR2V0IHNpemUgY2xhc3Nlcy4gKi8KKwlzbWFsbDAgPSBnZXRfc21h bGxfc2l6ZSgwKTsKKwlzbWFsbDEgPSBnZXRfc21hbGxfc2l6ZSgxKTsKKwlsYXJnZW1heCA9IGdl dF9sYXJnZV9zaXplKGdldF9ubGFyZ2UoKS0xKTsKKworCXAgPSBtYWxsb2N4KHNtYWxsMCwgMCk7 CisJZXhwZWN0X3B0cl9ub3RfbnVsbChwLCAiVW5leHBlY3RlZCBtYWxsb2N4KCkgZXJyb3IiKTsK KworCWV4cGVjdF96dV9lcSh4YWxsb2N4KHAsIHNtYWxsMSwgMCwgMCksIHNtYWxsMCwKKwkgICAg IlVuZXhwZWN0ZWQgeGFsbG9jeCgpIGJlaGF2aW9yIik7CisKKwlleHBlY3RfenVfZXEoeGFsbG9j eChwLCBzbWFsbDEsIDAsIDApLCBzbWFsbDAsCisJICAgICJVbmV4cGVjdGVkIHhhbGxvY3goKSBi ZWhhdmlvciIpOworCisJZXhwZWN0X3p1X2VxKHhhbGxvY3gocCwgc21hbGwwLCBzbWFsbDEgLSBz bWFsbDAsIDApLCBzbWFsbDAsCisJICAgICJVbmV4cGVjdGVkIHhhbGxvY3goKSBiZWhhdmlvciIp OworCisJLyogVGVzdCBzaXplK2V4dHJhIG92ZXJmbG93LiAqLworCWV4cGVjdF96dV9lcSh4YWxs b2N4KHAsIHNtYWxsMCwgbGFyZ2VtYXggLSBzbWFsbDAgKyAxLCAwKSwgc21hbGwwLAorCSAgICAi VW5leHBlY3RlZCB4YWxsb2N4KCkgYmVoYXZpb3IiKTsKKwlleHBlY3RfenVfZXEoeGFsbG9jeChw LCBzbWFsbDAsIFNJWkVfVF9NQVggLSBzbWFsbDAsIDApLCBzbWFsbDAsCisJICAgICJVbmV4cGVj dGVkIHhhbGxvY3goKSBiZWhhdmlvciIpOworCisJZGFsbG9jeChwLCAwKTsKK30KK1RFU1RfRU5E CisKK1RFU1RfQkVHSU4odGVzdF9leHRyYV9sYXJnZSkgeworCWludCBmbGFncyA9IE1BTExPQ1hf QVJFTkEoYXJlbmFfaW5kKCkpOworCXNpemVfdCBzbWFsbG1heCwgbGFyZ2UxLCBsYXJnZTIsIGxh cmdlMywgbGFyZ2VtYXg7CisJdm9pZCAqcDsKKworCS8qIEdldCBzaXplIGNsYXNzZXMuICovCisJ c21hbGxtYXggPSBnZXRfc21hbGxfc2l6ZShnZXRfbnNtYWxsKCktMSk7CisJbGFyZ2UxID0gZ2V0 X2xhcmdlX3NpemUoMSk7CisJbGFyZ2UyID0gZ2V0X2xhcmdlX3NpemUoMik7CisJbGFyZ2UzID0g Z2V0X2xhcmdlX3NpemUoMyk7CisJbGFyZ2VtYXggPSBnZXRfbGFyZ2Vfc2l6ZShnZXRfbmxhcmdl KCktMSk7CisKKwlwID0gbWFsbG9jeChsYXJnZTMsIGZsYWdzKTsKKwlleHBlY3RfcHRyX25vdF9u dWxsKHAsICJVbmV4cGVjdGVkIG1hbGxvY3goKSBlcnJvciIpOworCisJZXhwZWN0X3p1X2VxKHhh bGxvY3gocCwgbGFyZ2UzLCAwLCBmbGFncyksIGxhcmdlMywKKwkgICAgIlVuZXhwZWN0ZWQgeGFs bG9jeCgpIGJlaGF2aW9yIik7CisJLyogVGVzdCBzaXplIGRlY3JlYXNlIHdpdGggemVybyBleHRy YS4gKi8KKwlleHBlY3RfenVfZ2UoeGFsbG9jeChwLCBsYXJnZTEsIDAsIGZsYWdzKSwgbGFyZ2Ux LAorCSAgICAiVW5leHBlY3RlZCB4YWxsb2N4KCkgYmVoYXZpb3IiKTsKKwlleHBlY3RfenVfZ2Uo eGFsbG9jeChwLCBzbWFsbG1heCwgMCwgZmxhZ3MpLCBsYXJnZTEsCisJICAgICJVbmV4cGVjdGVk IHhhbGxvY3goKSBiZWhhdmlvciIpOworCisJaWYgKHhhbGxvY3gocCwgbGFyZ2UzLCAwLCBmbGFn cykgIT0gbGFyZ2UzKSB7CisJCXAgPSByYWxsb2N4KHAsIGxhcmdlMywgZmxhZ3MpOworCQlleHBl Y3RfcHRyX25vdF9udWxsKHAsICJVbmV4cGVjdGVkIHJhbGxvY3goKSBmYWlsdXJlIik7CisJfQor CS8qIFRlc3Qgc2l6ZSBkZWNyZWFzZSB3aXRoIG5vbi16ZXJvIGV4dHJhLiAqLworCWV4cGVjdF96 dV9lcSh4YWxsb2N4KHAsIGxhcmdlMSwgbGFyZ2UzIC0gbGFyZ2UxLCBmbGFncyksIGxhcmdlMywK KwkgICAgIlVuZXhwZWN0ZWQgeGFsbG9jeCgpIGJlaGF2aW9yIik7CisJZXhwZWN0X3p1X2VxKHhh bGxvY3gocCwgbGFyZ2UyLCBsYXJnZTMgLSBsYXJnZTIsIGZsYWdzKSwgbGFyZ2UzLAorCSAgICAi VW5leHBlY3RlZCB4YWxsb2N4KCkgYmVoYXZpb3IiKTsKKwlleHBlY3RfenVfZ2UoeGFsbG9jeChw LCBsYXJnZTEsIGxhcmdlMiAtIGxhcmdlMSwgZmxhZ3MpLCBsYXJnZTIsCisJICAgICJVbmV4cGVj dGVkIHhhbGxvY3goKSBiZWhhdmlvciIpOworCWV4cGVjdF96dV9nZSh4YWxsb2N4KHAsIHNtYWxs bWF4LCBsYXJnZTEgLSBzbWFsbG1heCwgZmxhZ3MpLCBsYXJnZTEsCisJICAgICJVbmV4cGVjdGVk IHhhbGxvY3goKSBiZWhhdmlvciIpOworCisJZXhwZWN0X3p1X2dlKHhhbGxvY3gocCwgbGFyZ2Ux LCAwLCBmbGFncyksIGxhcmdlMSwKKwkgICAgIlVuZXhwZWN0ZWQgeGFsbG9jeCgpIGJlaGF2aW9y Iik7CisJLyogVGVzdCBzaXplIGluY3JlYXNlIHdpdGggemVybyBleHRyYS4gKi8KKwlleHBlY3Rf enVfbGUoeGFsbG9jeChwLCBsYXJnZTMsIDAsIGZsYWdzKSwgbGFyZ2UzLAorCSAgICAiVW5leHBl Y3RlZCB4YWxsb2N4KCkgYmVoYXZpb3IiKTsKKwlleHBlY3RfenVfbGUoeGFsbG9jeChwLCBsYXJn ZW1heCsxLCAwLCBmbGFncyksIGxhcmdlMywKKwkgICAgIlVuZXhwZWN0ZWQgeGFsbG9jeCgpIGJl aGF2aW9yIik7CisKKwlleHBlY3RfenVfZ2UoeGFsbG9jeChwLCBsYXJnZTEsIDAsIGZsYWdzKSwg bGFyZ2UxLAorCSAgICAiVW5leHBlY3RlZCB4YWxsb2N4KCkgYmVoYXZpb3IiKTsKKwkvKiBUZXN0 IHNpemUgaW5jcmVhc2Ugd2l0aCBub24temVybyBleHRyYS4gKi8KKwlleHBlY3RfenVfbGUoeGFs bG9jeChwLCBsYXJnZTEsIFNJWkVfVF9NQVggLSBsYXJnZTEsIGZsYWdzKSwgbGFyZ2VtYXgsCisJ ICAgICJVbmV4cGVjdGVkIHhhbGxvY3goKSBiZWhhdmlvciIpOworCisJZXhwZWN0X3p1X2dlKHhh bGxvY3gocCwgbGFyZ2UxLCAwLCBmbGFncyksIGxhcmdlMSwKKwkgICAgIlVuZXhwZWN0ZWQgeGFs bG9jeCgpIGJlaGF2aW9yIik7CisJLyogVGVzdCBzaXplIGluY3JlYXNlIHdpdGggbm9uLXplcm8g ZXh0cmEuICovCisJZXhwZWN0X3p1X2xlKHhhbGxvY3gocCwgbGFyZ2UxLCBsYXJnZTMgLSBsYXJn ZTEsIGZsYWdzKSwgbGFyZ2UzLAorCSAgICAiVW5leHBlY3RlZCB4YWxsb2N4KCkgYmVoYXZpb3Ii KTsKKworCWlmICh4YWxsb2N4KHAsIGxhcmdlMywgMCwgZmxhZ3MpICE9IGxhcmdlMykgeworCQlw ID0gcmFsbG9jeChwLCBsYXJnZTMsIGZsYWdzKTsKKwkJZXhwZWN0X3B0cl9ub3RfbnVsbChwLCAi VW5leHBlY3RlZCByYWxsb2N4KCkgZmFpbHVyZSIpOworCX0KKwkvKiBUZXN0IHNpemUrZXh0cmEg b3ZlcmZsb3cuICovCisJZXhwZWN0X3p1X2xlKHhhbGxvY3gocCwgbGFyZ2UzLCBsYXJnZW1heCAt IGxhcmdlMyArIDEsIGZsYWdzKSwgbGFyZ2VtYXgsCisJICAgICJVbmV4cGVjdGVkIHhhbGxvY3go KSBiZWhhdmlvciIpOworCisJZGFsbG9jeChwLCBmbGFncyk7Cit9CitURVNUX0VORAorCitzdGF0 aWMgdm9pZAorcHJpbnRfZmlsbGVkX2V4dGVudHMoY29uc3Qgdm9pZCAqcCwgdWludDhfdCBjLCBz aXplX3QgbGVuKSB7CisJY29uc3QgdWludDhfdCAqcGMgPSAoY29uc3QgdWludDhfdCAqKXA7CisJ c2l6ZV90IGksIHJhbmdlMDsKKwl1aW50OF90IGMwOworCisJbWFsbG9jX3ByaW50ZigiICBwPSVw LCBjPSUjeCwgbGVuPSV6dToiLCBwLCBjLCBsZW4pOworCXJhbmdlMCA9IDA7CisJYzAgPSBwY1sw XTsKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKwkJaWYgKHBjW2ldICE9IGMwKSB7CisJ CQltYWxsb2NfcHJpbnRmKCIgJSN4WyV6dS4uJXp1KSIsIGMwLCByYW5nZTAsIGkpOworCQkJcmFu Z2UwID0gaTsKKwkJCWMwID0gcGNbaV07CisJCX0KKwl9CisJbWFsbG9jX3ByaW50ZigiICUjeFsl enUuLiV6dSlcbiIsIGMwLCByYW5nZTAsIGkpOworfQorCitzdGF0aWMgYm9vbAordmFsaWRhdGVf ZmlsbChjb25zdCB2b2lkICpwLCB1aW50OF90IGMsIHNpemVfdCBvZmZzZXQsIHNpemVfdCBsZW4p IHsKKwljb25zdCB1aW50OF90ICpwYyA9IChjb25zdCB1aW50OF90ICopcDsKKwlib29sIGVycjsK KwlzaXplX3QgaTsKKworCWZvciAoaSA9IG9mZnNldCwgZXJyID0gZmFsc2U7IGkgPCBvZmZzZXQr bGVuOyBpKyspIHsKKwkJaWYgKHBjW2ldICE9IGMpIHsKKwkJCWVyciA9IHRydWU7CisJCX0KKwl9 CisKKwlpZiAoZXJyKSB7CisJCXByaW50X2ZpbGxlZF9leHRlbnRzKHAsIGMsIG9mZnNldCArIGxl bik7CisJfQorCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQKK3Rlc3RfemVybyhzaXpl X3Qgc3ptaW4sIHNpemVfdCBzem1heCkgeworCWludCBmbGFncyA9IE1BTExPQ1hfQVJFTkEoYXJl bmFfaW5kKCkpIHwgTUFMTE9DWF9aRVJPOworCXNpemVfdCBzeiwgbnN6OworCXZvaWQgKnA7Cisj ZGVmaW5lIEZJTExfQllURSAweDdhVQorCisJc3ogPSBzem1heDsKKwlwID0gbWFsbG9jeChzeiwg ZmxhZ3MpOworCWV4cGVjdF9wdHJfbm90X251bGwocCwgIlVuZXhwZWN0ZWQgbWFsbG9jeCgpIGVy cm9yIik7CisJZXhwZWN0X2ZhbHNlKHZhbGlkYXRlX2ZpbGwocCwgMHgwMCwgMCwgc3opLCAiTWVt b3J5IG5vdCBmaWxsZWQ6IHN6PSV6dSIsCisJICAgIHN6KTsKKworCS8qCisJICogRmlsbCB3aXRo IG5vbi16ZXJvIHNvIHRoYXQgbm9uLWRlYnVnIGJ1aWxkcyBhcmUgbW9yZSBsaWtlbHkgdG8gZGV0 ZWN0CisJICogZXJyb3JzLgorCSAqLworCW1lbXNldChwLCBGSUxMX0JZVEUsIHN6KTsKKwlleHBl Y3RfZmFsc2UodmFsaWRhdGVfZmlsbChwLCBGSUxMX0JZVEUsIDAsIHN6KSwKKwkgICAgIk1lbW9y eSBub3QgZmlsbGVkOiBzej0lenUiLCBzeik7CisKKwkvKiBTaHJpbmsgaW4gcGxhY2Ugc28gdGhh dCB3ZSBjYW4gZXhwZWN0IGdyb3dpbmcgaW4gcGxhY2UgdG8gc3VjY2VlZC4gKi8KKwlzeiA9IHN6 bWluOworCWlmICh4YWxsb2N4KHAsIHN6LCAwLCBmbGFncykgIT0gc3opIHsKKwkJcCA9IHJhbGxv Y3gocCwgc3osIGZsYWdzKTsKKwkJZXhwZWN0X3B0cl9ub3RfbnVsbChwLCAiVW5leHBlY3RlZCBy YWxsb2N4KCkgZmFpbHVyZSIpOworCX0KKwlleHBlY3RfZmFsc2UodmFsaWRhdGVfZmlsbChwLCBG SUxMX0JZVEUsIDAsIHN6KSwKKwkgICAgIk1lbW9yeSBub3QgZmlsbGVkOiBzej0lenUiLCBzeik7 CisKKwlmb3IgKHN6ID0gc3ptaW47IHN6IDwgc3ptYXg7IHN6ID0gbnN6KSB7CisJCW5zeiA9IG5h bGxvY3goc3orMSwgZmxhZ3MpOworCQlpZiAoeGFsbG9jeChwLCBzeisxLCAwLCBmbGFncykgIT0g bnN6KSB7CisJCQlwID0gcmFsbG9jeChwLCBzeisxLCBmbGFncyk7CisJCQlleHBlY3RfcHRyX25v dF9udWxsKHAsICJVbmV4cGVjdGVkIHJhbGxvY3goKSBmYWlsdXJlIik7CisJCX0KKwkJZXhwZWN0 X2ZhbHNlKHZhbGlkYXRlX2ZpbGwocCwgRklMTF9CWVRFLCAwLCBzeiksCisJCSAgICAiTWVtb3J5 IG5vdCBmaWxsZWQ6IHN6PSV6dSIsIHN6KTsKKwkJZXhwZWN0X2ZhbHNlKHZhbGlkYXRlX2ZpbGwo cCwgMHgwMCwgc3osIG5zei1zeiksCisJCSAgICAiTWVtb3J5IG5vdCBmaWxsZWQ6IHN6PSV6dSwg bnN6LXN6PSV6dSIsIHN6LCBuc3otc3opOworCQltZW1zZXQoKHZvaWQgKikoKHVpbnRwdHJfdClw ICsgc3opLCBGSUxMX0JZVEUsIG5zei1zeik7CisJCWV4cGVjdF9mYWxzZSh2YWxpZGF0ZV9maWxs KHAsIEZJTExfQllURSwgMCwgbnN6KSwKKwkJICAgICJNZW1vcnkgbm90IGZpbGxlZDogbnN6PSV6 dSIsIG5zeik7CisJfQorCisJZGFsbG9jeChwLCBmbGFncyk7Cit9CisKK1RFU1RfQkVHSU4odGVz dF96ZXJvX2xhcmdlKSB7CisJc2l6ZV90IGxhcmdlMCwgbGFyZ2UxOworCisJLyogR2V0IHNpemUg Y2xhc3Nlcy4gKi8KKwlsYXJnZTAgPSBnZXRfbGFyZ2Vfc2l6ZSgwKTsKKwlsYXJnZTEgPSBnZXRf bGFyZ2Vfc2l6ZSgxKTsKKworCXRlc3RfemVybyhsYXJnZTEsIGxhcmdlMCAqIDIpOworfQorVEVT VF9FTkQKKworaW50CittYWluKHZvaWQpIHsKKwlyZXR1cm4gdGVzdCgKKwkgICAgdGVzdF9zYW1l X3NpemUsCisJICAgIHRlc3RfZXh0cmFfbm9fbW92ZSwKKwkgICAgdGVzdF9ub19tb3ZlX2ZhaWws CisJICAgIHRlc3Rfc2l6ZSwKKwkgICAgdGVzdF9zaXplX2V4dHJhX292ZXJmbG93LAorCSAgICB0 ZXN0X2V4dHJhX3NtYWxsLAorCSAgICB0ZXN0X2V4dHJhX2xhcmdlLAorCSAgICB0ZXN0X3plcm9f bGFyZ2UpOworfQoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9j LTUuMy4wL3Rlc3QvaW50ZWdyYXRpb24veGFsbG9jeC5zaCBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1 aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvaW50ZWdyYXRpb24veGFsbG9jeC5zaApuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wY2MyMTg3Ci0tLSAvZGV2L251bGwKKysrIGIvMzg5 LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC9pbnRlZ3JhdGlvbi94YWxs b2N4LnNoCkBAIC0wLDAgKzEsNSBAQAorIyEvYmluL3NoCisKK2lmIFsgIngke2VuYWJsZV9maWxs fSIgPSAieDEiIF0gOyB0aGVuCisgIGV4cG9ydCBNQUxMT0NfQ09ORj0ianVuazpmYWxzZSIKK2Zp CgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVz dC9zcmMvU0ZNVC5jIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVz dC9zcmMvU0ZNVC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwNWUyMTgK LS0tIC9kZXYvbnVsbAorKysgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMu MC90ZXN0L3NyYy9TRk1ULmMKQEAgLTAsMCArMSw3MTkgQEAKKy8qCisgKiBUaGlzIGZpbGUgZGVy aXZlcyBmcm9tIFNGTVQgMS4zLjMKKyAqIChodHRwOi8vd3d3Lm1hdGguc2NpLmhpcm9zaGltYS11 LmFjLmpwL35tLW1hdC9NVC9TRk1UL2luZGV4Lmh0bWwpLCB3aGljaCB3YXMKKyAqIHJlbGVhc2Vk IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgZm9sbG93aW5nIGxpY2Vuc2U6CisgKgorICogICBDb3B5 cmlnaHQgKGMpIDIwMDYsMjAwNyBNdXRzdW8gU2FpdG8sIE1ha290byBNYXRzdW1vdG8gYW5kIEhp cm9zaGltYQorICogICBVbml2ZXJzaXR5LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICAg UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv ciB3aXRob3V0CisgKiAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0 IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqICAgbWV0OgorICoKKyAqICAgICAgICog UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5 cmlnaHQKKyAqICAgICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgIGNvcHlyaWdodCBu b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAg ICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs cyBwcm92aWRlZAorICogICAgICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgICAgICAq IE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEhpcm9zaGltYSBVbml2ZXJzaXR5IG5vciB0aGUgbmFt ZXMgb2YKKyAqICAgICAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl IG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdh cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuCisgKiAgICAgICAgIHBlcm1pc3Npb24u CisgKgorICogICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M REVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAgICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiAgIExJTUlURUQgVE8sIFRI RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgor ICogICBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB TEwgVEhFIENPUFlSSUdIVAorICogICBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqICAgU1BFQ0lBTCwgRVhFTVBM QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogICBM SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM T1NTIE9GIFVTRSwKKyAqICAgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiAgIFRIRU9SWSBPRiBMSUFCSUxJVFks IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqICAgKElO Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP RiBUSEUgVVNFCisgKiAgIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKy8qKgorICogQGZpbGUgIFNGTVQuYwor ICogQGJyaWVmIFNJTUQgb3JpZW50ZWQgRmFzdCBNZXJzZW5uZSBUd2lzdGVyKFNGTVQpCisgKgor ICogQGF1dGhvciBNdXRzdW8gU2FpdG8gKEhpcm9zaGltYSBVbml2ZXJzaXR5KQorICogQGF1dGhv ciBNYWtvdG8gTWF0c3Vtb3RvIChIaXJvc2hpbWEgVW5pdmVyc2l0eSkKKyAqCisgKiBDb3B5cmln aHQgKEMpIDIwMDYsMjAwNyBNdXRzdW8gU2FpdG8sIE1ha290byBNYXRzdW1vdG8gYW5kIEhpcm9z aGltYQorICogVW5pdmVyc2l0eS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGUgbmV3 IEJTRCBMaWNlbnNlIGlzIGFwcGxpZWQgdG8gdGhpcyBzb2Z0d2FyZSwgc2VlIExJQ0VOU0UudHh0 CisgKi8KKyNkZWZpbmUgU0ZNVF9DXworI2luY2x1ZGUgInRlc3QvamVtYWxsb2NfdGVzdC5oIgor I2luY2x1ZGUgInRlc3QvU0ZNVC1wYXJhbXMuaCIKKworI2lmIGRlZmluZWQoSkVNQUxMT0NfQklH X0VORElBTikgJiYgIWRlZmluZWQoQklHX0VORElBTjY0KQorI2RlZmluZSBCSUdfRU5ESUFONjQg MQorI2VuZGlmCisjaWYgZGVmaW5lZChfX0JJR19FTkRJQU5fXykgJiYgIWRlZmluZWQoX19hbWQ2 NCkgJiYgIWRlZmluZWQoQklHX0VORElBTjY0KQorI2RlZmluZSBCSUdfRU5ESUFONjQgMQorI2Vu ZGlmCisjaWYgZGVmaW5lZChIQVZFX0FMVElWRUMpICYmICFkZWZpbmVkKEJJR19FTkRJQU42NCkK KyNkZWZpbmUgQklHX0VORElBTjY0IDEKKyNlbmRpZgorI2lmIGRlZmluZWQoT05MWTY0KSAmJiAh ZGVmaW5lZChCSUdfRU5ESUFONjQpCisgICNpZiBkZWZpbmVkKF9fR05VQ19fKQorICAgICNlcnJv ciAiLURPTkxZNjQgbXVzdCBiZSBzcGVjaWZpZWQgd2l0aCAtREJJR19FTkRJQU42NCIKKyAgI2Vu ZGlmCisjdW5kZWYgT05MWTY0CisjZW5kaWYKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDEyOC1iaXQgU0lNRCBkYXRhIHR5cGUgZm9y IEFsdGl2ZWMsIFNTRTIgb3Igc3RhbmRhcmQgQworICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2lmIGRlZmluZWQoSEFWRV9BTFRJVkVD KQorLyoqIDEyOC1iaXQgZGF0YSBzdHJ1Y3R1cmUgKi8KK3VuaW9uIFcxMjhfVCB7CisgICAgdmVj dG9yIHVuc2lnbmVkIGludCBzOworICAgIHVpbnQzMl90IHVbNF07Cit9OworLyoqIDEyOC1iaXQg ZGF0YSB0eXBlICovCit0eXBlZGVmIHVuaW9uIFcxMjhfVCB3MTI4X3Q7CisKKyNlbGlmIGRlZmlu ZWQoSEFWRV9TU0UyKQorLyoqIDEyOC1iaXQgZGF0YSBzdHJ1Y3R1cmUgKi8KK3VuaW9uIFcxMjhf VCB7CisgICAgX19tMTI4aSBzaTsKKyAgICB1aW50MzJfdCB1WzRdOworfTsKKy8qKiAxMjgtYml0 IGRhdGEgdHlwZSAqLwordHlwZWRlZiB1bmlvbiBXMTI4X1QgdzEyOF90OworCisjZWxzZQorCisv KiogMTI4LWJpdCBkYXRhIHN0cnVjdHVyZSAqLworc3RydWN0IFcxMjhfVCB7CisgICAgdWludDMy X3QgdVs0XTsKK307CisvKiogMTI4LWJpdCBkYXRhIHR5cGUgKi8KK3R5cGVkZWYgc3RydWN0IFcx MjhfVCB3MTI4X3Q7CisKKyNlbmRpZgorCitzdHJ1Y3Qgc2ZtdF9zIHsKKyAgICAvKiogdGhlIDEy OC1iaXQgaW50ZXJuYWwgc3RhdGUgYXJyYXkgKi8KKyAgICB3MTI4X3Qgc2ZtdFtOXTsKKyAgICAv KiogaW5kZXggY291bnRlciB0byB0aGUgMzItYml0IGludGVybmFsIHN0YXRlIGFycmF5ICovCisg ICAgaW50IGlkeDsKKyAgICAvKiogYSBmbGFnOiBpdCBpcyAwIGlmIGFuZCBvbmx5IGlmIHRoZSBp bnRlcm5hbCBzdGF0ZSBpcyBub3QgeWV0CisgICAgICogaW5pdGlhbGl6ZWQuICovCisgICAgaW50 IGluaXRpYWxpemVkOworfTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorICBGSUxFIEdMT0JBTCBWQVJJQUJMRVMKKyAgaW50ZXJuYWwgc3RhdGUsIGluZGV4IGNv dW50ZXIgYW5kIGZsYWcKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0q LworCisvKiogYSBwYXJpdHkgY2hlY2sgdmVjdG9yIHdoaWNoIGNlcnRpZmljYXRlIHRoZSBwZXJp b2Qgb2YgMl57TUVYUH0gKi8KK3N0YXRpYyB1aW50MzJfdCBwYXJpdHlbNF0gPSB7UEFSSVRZMSwg UEFSSVRZMiwgUEFSSVRZMywgUEFSSVRZNH07CisKKy8qLS0tLS0tLS0tLS0tLS0tLQorICBTVEFU SUMgRlVOQ1RJT05TCisgIC0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGlubGluZSBpbnQgaWR4 b2YoaW50IGkpOworI2lmICghZGVmaW5lZChIQVZFX0FMVElWRUMpKSAmJiAoIWRlZmluZWQoSEFW RV9TU0UyKSkKK3N0YXRpYyBpbmxpbmUgdm9pZCByc2hpZnQxMjgodzEyOF90ICpvdXQsICB3MTI4 X3QgY29uc3QgKmluLCBpbnQgc2hpZnQpOworc3RhdGljIGlubGluZSB2b2lkIGxzaGlmdDEyOCh3 MTI4X3QgKm91dCwgIHcxMjhfdCBjb25zdCAqaW4sIGludCBzaGlmdCk7CisjZW5kaWYKK3N0YXRp YyBpbmxpbmUgdm9pZCBnZW5fcmFuZF9hbGwoc2ZtdF90ICpjdHgpOworc3RhdGljIGlubGluZSB2 b2lkIGdlbl9yYW5kX2FycmF5KHNmbXRfdCAqY3R4LCB3MTI4X3QgKmFycmF5LCBpbnQgc2l6ZSk7 CitzdGF0aWMgaW5saW5lIHVpbnQzMl90IGZ1bmMxKHVpbnQzMl90IHgpOworc3RhdGljIGlubGlu ZSB1aW50MzJfdCBmdW5jMih1aW50MzJfdCB4KTsKK3N0YXRpYyB2b2lkIHBlcmlvZF9jZXJ0aWZp Y2F0aW9uKHNmbXRfdCAqY3R4KTsKKyNpZiBkZWZpbmVkKEJJR19FTkRJQU42NCkgJiYgIWRlZmlu ZWQoT05MWTY0KQorc3RhdGljIGlubGluZSB2b2lkIHN3YXAodzEyOF90ICphcnJheSwgaW50IHNp emUpOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKEhBVkVfQUxUSVZFQykKKyAgI2luY2x1ZGUgInRl c3QvU0ZNVC1hbHRpLmgiCisjZWxpZiBkZWZpbmVkKEhBVkVfU1NFMikKKyAgI2luY2x1ZGUgInRl c3QvU0ZNVC1zc2UyLmgiCisjZW5kaWYKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIHNpbXVsYXRl IGEgNjQtYml0IGluZGV4IG9mIExJVFRMRSBFTkRJQU4KKyAqIGluIEJJRyBFTkRJQU4gbWFjaGlu ZS4KKyAqLworI2lmZGVmIE9OTFk2NAorc3RhdGljIGlubGluZSBpbnQgaWR4b2YoaW50IGkpIHsK KyAgICByZXR1cm4gaSBeIDE7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSBpbnQgaWR4b2YoaW50 IGkpIHsKKyAgICByZXR1cm4gaTsKK30KKyNlbmRpZgorLyoqCisgKiBUaGlzIGZ1bmN0aW9uIHNp bXVsYXRlcyBTSU1EIDEyOC1iaXQgcmlnaHQgc2hpZnQgYnkgdGhlIHN0YW5kYXJkIEMuCisgKiBU aGUgMTI4LWJpdCBpbnRlZ2VyIGdpdmVuIGluIGluIGlzIHNoaWZ0ZWQgYnkgKHNoaWZ0ICogOCkg Yml0cy4KKyAqIFRoaXMgZnVuY3Rpb24gc2ltdWxhdGVzIHRoZSBMSVRUTEUgRU5ESUFOIFNJTUQu CisgKiBAcGFyYW0gb3V0IHRoZSBvdXRwdXQgb2YgdGhpcyBmdW5jdGlvbgorICogQHBhcmFtIGlu IHRoZSAxMjgtYml0IGRhdGEgdG8gYmUgc2hpZnRlZAorICogQHBhcmFtIHNoaWZ0IHRoZSBzaGlm dCB2YWx1ZQorICovCisjaWYgKCFkZWZpbmVkKEhBVkVfQUxUSVZFQykpICYmICghZGVmaW5lZChI QVZFX1NTRTIpKQorI2lmZGVmIE9OTFk2NAorc3RhdGljIGlubGluZSB2b2lkIHJzaGlmdDEyOCh3 MTI4X3QgKm91dCwgdzEyOF90IGNvbnN0ICppbiwgaW50IHNoaWZ0KSB7CisgICAgdWludDY0X3Qg dGgsIHRsLCBvaCwgb2w7CisKKyAgICB0aCA9ICgodWludDY0X3QpaW4tPnVbMl0gPDwgMzIpIHwg KCh1aW50NjRfdClpbi0+dVszXSk7CisgICAgdGwgPSAoKHVpbnQ2NF90KWluLT51WzBdIDw8IDMy KSB8ICgodWludDY0X3QpaW4tPnVbMV0pOworCisgICAgb2ggPSB0aCA+PiAoc2hpZnQgKiA4KTsK KyAgICBvbCA9IHRsID4+IChzaGlmdCAqIDgpOworICAgIG9sIHw9IHRoIDw8ICg2NCAtIHNoaWZ0 ICogOCk7CisgICAgb3V0LT51WzBdID0gKHVpbnQzMl90KShvbCA+PiAzMik7CisgICAgb3V0LT51 WzFdID0gKHVpbnQzMl90KW9sOworICAgIG91dC0+dVsyXSA9ICh1aW50MzJfdCkob2ggPj4gMzIp OworICAgIG91dC0+dVszXSA9ICh1aW50MzJfdClvaDsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5l IHZvaWQgcnNoaWZ0MTI4KHcxMjhfdCAqb3V0LCB3MTI4X3QgY29uc3QgKmluLCBpbnQgc2hpZnQp IHsKKyAgICB1aW50NjRfdCB0aCwgdGwsIG9oLCBvbDsKKworICAgIHRoID0gKCh1aW50NjRfdClp bi0+dVszXSA8PCAzMikgfCAoKHVpbnQ2NF90KWluLT51WzJdKTsKKyAgICB0bCA9ICgodWludDY0 X3QpaW4tPnVbMV0gPDwgMzIpIHwgKCh1aW50NjRfdClpbi0+dVswXSk7CisKKyAgICBvaCA9IHRo ID4+IChzaGlmdCAqIDgpOworICAgIG9sID0gdGwgPj4gKHNoaWZ0ICogOCk7CisgICAgb2wgfD0g dGggPDwgKDY0IC0gc2hpZnQgKiA4KTsKKyAgICBvdXQtPnVbMV0gPSAodWludDMyX3QpKG9sID4+ IDMyKTsKKyAgICBvdXQtPnVbMF0gPSAodWludDMyX3Qpb2w7CisgICAgb3V0LT51WzNdID0gKHVp bnQzMl90KShvaCA+PiAzMik7CisgICAgb3V0LT51WzJdID0gKHVpbnQzMl90KW9oOworfQorI2Vu ZGlmCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gc2ltdWxhdGVzIFNJTUQgMTI4LWJpdCBsZWZ0IHNo aWZ0IGJ5IHRoZSBzdGFuZGFyZCBDLgorICogVGhlIDEyOC1iaXQgaW50ZWdlciBnaXZlbiBpbiBp biBpcyBzaGlmdGVkIGJ5IChzaGlmdCAqIDgpIGJpdHMuCisgKiBUaGlzIGZ1bmN0aW9uIHNpbXVs YXRlcyB0aGUgTElUVExFIEVORElBTiBTSU1ELgorICogQHBhcmFtIG91dCB0aGUgb3V0cHV0IG9m IHRoaXMgZnVuY3Rpb24KKyAqIEBwYXJhbSBpbiB0aGUgMTI4LWJpdCBkYXRhIHRvIGJlIHNoaWZ0 ZWQKKyAqIEBwYXJhbSBzaGlmdCB0aGUgc2hpZnQgdmFsdWUKKyAqLworI2lmZGVmIE9OTFk2NAor c3RhdGljIGlubGluZSB2b2lkIGxzaGlmdDEyOCh3MTI4X3QgKm91dCwgdzEyOF90IGNvbnN0ICpp biwgaW50IHNoaWZ0KSB7CisgICAgdWludDY0X3QgdGgsIHRsLCBvaCwgb2w7CisKKyAgICB0aCA9 ICgodWludDY0X3QpaW4tPnVbMl0gPDwgMzIpIHwgKCh1aW50NjRfdClpbi0+dVszXSk7CisgICAg dGwgPSAoKHVpbnQ2NF90KWluLT51WzBdIDw8IDMyKSB8ICgodWludDY0X3QpaW4tPnVbMV0pOwor CisgICAgb2ggPSB0aCA8PCAoc2hpZnQgKiA4KTsKKyAgICBvbCA9IHRsIDw8IChzaGlmdCAqIDgp OworICAgIG9oIHw9IHRsID4+ICg2NCAtIHNoaWZ0ICogOCk7CisgICAgb3V0LT51WzBdID0gKHVp bnQzMl90KShvbCA+PiAzMik7CisgICAgb3V0LT51WzFdID0gKHVpbnQzMl90KW9sOworICAgIG91 dC0+dVsyXSA9ICh1aW50MzJfdCkob2ggPj4gMzIpOworICAgIG91dC0+dVszXSA9ICh1aW50MzJf dClvaDsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgbHNoaWZ0MTI4KHcxMjhfdCAqb3V0 LCB3MTI4X3QgY29uc3QgKmluLCBpbnQgc2hpZnQpIHsKKyAgICB1aW50NjRfdCB0aCwgdGwsIG9o LCBvbDsKKworICAgIHRoID0gKCh1aW50NjRfdClpbi0+dVszXSA8PCAzMikgfCAoKHVpbnQ2NF90 KWluLT51WzJdKTsKKyAgICB0bCA9ICgodWludDY0X3QpaW4tPnVbMV0gPDwgMzIpIHwgKCh1aW50 NjRfdClpbi0+dVswXSk7CisKKyAgICBvaCA9IHRoIDw8IChzaGlmdCAqIDgpOworICAgIG9sID0g dGwgPDwgKHNoaWZ0ICogOCk7CisgICAgb2ggfD0gdGwgPj4gKDY0IC0gc2hpZnQgKiA4KTsKKyAg ICBvdXQtPnVbMV0gPSAodWludDMyX3QpKG9sID4+IDMyKTsKKyAgICBvdXQtPnVbMF0gPSAodWlu dDMyX3Qpb2w7CisgICAgb3V0LT51WzNdID0gKHVpbnQzMl90KShvaCA+PiAzMik7CisgICAgb3V0 LT51WzJdID0gKHVpbnQzMl90KW9oOworfQorI2VuZGlmCisjZW5kaWYKKworLyoqCisgKiBUaGlz IGZ1bmN0aW9uIHJlcHJlc2VudHMgdGhlIHJlY3Vyc2lvbiBmb3JtdWxhLgorICogQHBhcmFtIHIg b3V0cHV0CisgKiBAcGFyYW0gYSBhIDEyOC1iaXQgcGFydCBvZiB0aGUgaW50ZXJuYWwgc3RhdGUg YXJyYXkKKyAqIEBwYXJhbSBiIGEgMTI4LWJpdCBwYXJ0IG9mIHRoZSBpbnRlcm5hbCBzdGF0ZSBh cnJheQorICogQHBhcmFtIGMgYSAxMjgtYml0IHBhcnQgb2YgdGhlIGludGVybmFsIHN0YXRlIGFy cmF5CisgKiBAcGFyYW0gZCBhIDEyOC1iaXQgcGFydCBvZiB0aGUgaW50ZXJuYWwgc3RhdGUgYXJy YXkKKyAqLworI2lmICghZGVmaW5lZChIQVZFX0FMVElWRUMpKSAmJiAoIWRlZmluZWQoSEFWRV9T U0UyKSkKKyNpZmRlZiBPTkxZNjQKK3N0YXRpYyBpbmxpbmUgdm9pZCBkb19yZWN1cnNpb24odzEy OF90ICpyLCB3MTI4X3QgKmEsIHcxMjhfdCAqYiwgdzEyOF90ICpjLAorCQkJCXcxMjhfdCAqZCkg eworICAgIHcxMjhfdCB4OworICAgIHcxMjhfdCB5OworCisgICAgbHNoaWZ0MTI4KCZ4LCBhLCBT TDIpOworICAgIHJzaGlmdDEyOCgmeSwgYywgU1IyKTsKKyAgICByLT51WzBdID0gYS0+dVswXSBe IHgudVswXSBeICgoYi0+dVswXSA+PiBTUjEpICYgTVNLMikgXiB5LnVbMF0KKwleIChkLT51WzBd IDw8IFNMMSk7CisgICAgci0+dVsxXSA9IGEtPnVbMV0gXiB4LnVbMV0gXiAoKGItPnVbMV0gPj4g U1IxKSAmIE1TSzEpIF4geS51WzFdCisJXiAoZC0+dVsxXSA8PCBTTDEpOworICAgIHItPnVbMl0g PSBhLT51WzJdIF4geC51WzJdIF4gKChiLT51WzJdID4+IFNSMSkgJiBNU0s0KSBeIHkudVsyXQor CV4gKGQtPnVbMl0gPDwgU0wxKTsKKyAgICByLT51WzNdID0gYS0+dVszXSBeIHgudVszXSBeICgo Yi0+dVszXSA+PiBTUjEpICYgTVNLMykgXiB5LnVbM10KKwleIChkLT51WzNdIDw8IFNMMSk7Cit9 CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIGRvX3JlY3Vyc2lvbih3MTI4X3QgKnIsIHcxMjhf dCAqYSwgdzEyOF90ICpiLCB3MTI4X3QgKmMsCisJCQkJdzEyOF90ICpkKSB7CisgICAgdzEyOF90 IHg7CisgICAgdzEyOF90IHk7CisKKyAgICBsc2hpZnQxMjgoJngsIGEsIFNMMik7CisgICAgcnNo aWZ0MTI4KCZ5LCBjLCBTUjIpOworICAgIHItPnVbMF0gPSBhLT51WzBdIF4geC51WzBdIF4gKChi LT51WzBdID4+IFNSMSkgJiBNU0sxKSBeIHkudVswXQorCV4gKGQtPnVbMF0gPDwgU0wxKTsKKyAg ICByLT51WzFdID0gYS0+dVsxXSBeIHgudVsxXSBeICgoYi0+dVsxXSA+PiBTUjEpICYgTVNLMikg XiB5LnVbMV0KKwleIChkLT51WzFdIDw8IFNMMSk7CisgICAgci0+dVsyXSA9IGEtPnVbMl0gXiB4 LnVbMl0gXiAoKGItPnVbMl0gPj4gU1IxKSAmIE1TSzMpIF4geS51WzJdCisJXiAoZC0+dVsyXSA8 PCBTTDEpOworICAgIHItPnVbM10gPSBhLT51WzNdIF4geC51WzNdIF4gKChiLT51WzNdID4+IFNS MSkgJiBNU0s0KSBeIHkudVszXQorCV4gKGQtPnVbM10gPDwgU0wxKTsKK30KKyNlbmRpZgorI2Vu ZGlmCisKKyNpZiAoIWRlZmluZWQoSEFWRV9BTFRJVkVDKSkgJiYgKCFkZWZpbmVkKEhBVkVfU1NF MikpCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gZmlsbHMgdGhlIGludGVybmFsIHN0YXRlIGFycmF5 IHdpdGggcHNldWRvcmFuZG9tCisgKiBpbnRlZ2Vycy4KKyAqLworc3RhdGljIGlubGluZSB2b2lk IGdlbl9yYW5kX2FsbChzZm10X3QgKmN0eCkgeworICAgIGludCBpOworICAgIHcxMjhfdCAqcjEs ICpyMjsKKworICAgIHIxID0gJmN0eC0+c2ZtdFtOIC0gMl07CisgICAgcjIgPSAmY3R4LT5zZm10 W04gLSAxXTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgTiAtIFBPUzE7IGkrKykgeworCWRvX3JlY3Vy c2lvbigmY3R4LT5zZm10W2ldLCAmY3R4LT5zZm10W2ldLCAmY3R4LT5zZm10W2kgKyBQT1MxXSwg cjEsCisJICByMik7CisJcjEgPSByMjsKKwlyMiA9ICZjdHgtPnNmbXRbaV07CisgICAgfQorICAg IGZvciAoOyBpIDwgTjsgaSsrKSB7CisJZG9fcmVjdXJzaW9uKCZjdHgtPnNmbXRbaV0sICZjdHgt PnNmbXRbaV0sICZjdHgtPnNmbXRbaSArIFBPUzEgLSBOXSwgcjEsCisJICByMik7CisJcjEgPSBy MjsKKwlyMiA9ICZjdHgtPnNmbXRbaV07CisgICAgfQorfQorCisvKioKKyAqIFRoaXMgZnVuY3Rp b24gZmlsbHMgdGhlIHVzZXItc3BlY2lmaWVkIGFycmF5IHdpdGggcHNldWRvcmFuZG9tCisgKiBp bnRlZ2Vycy4KKyAqCisgKiBAcGFyYW0gYXJyYXkgYW4gMTI4LWJpdCBhcnJheSB0byBiZSBmaWxs ZWQgYnkgcHNldWRvcmFuZG9tIG51bWJlcnMuCisgKiBAcGFyYW0gc2l6ZSBudW1iZXIgb2YgMTI4 LWJpdCBwc2V1ZG9yYW5kb20gbnVtYmVycyB0byBiZSBnZW5lcmF0ZWQuCisgKi8KK3N0YXRpYyBp bmxpbmUgdm9pZCBnZW5fcmFuZF9hcnJheShzZm10X3QgKmN0eCwgdzEyOF90ICphcnJheSwgaW50 IHNpemUpIHsKKyAgICBpbnQgaSwgajsKKyAgICB3MTI4X3QgKnIxLCAqcjI7CisKKyAgICByMSA9 ICZjdHgtPnNmbXRbTiAtIDJdOworICAgIHIyID0gJmN0eC0+c2ZtdFtOIC0gMV07CisgICAgZm9y IChpID0gMDsgaSA8IE4gLSBQT1MxOyBpKyspIHsKKwlkb19yZWN1cnNpb24oJmFycmF5W2ldLCAm Y3R4LT5zZm10W2ldLCAmY3R4LT5zZm10W2kgKyBQT1MxXSwgcjEsIHIyKTsKKwlyMSA9IHIyOwor CXIyID0gJmFycmF5W2ldOworICAgIH0KKyAgICBmb3IgKDsgaSA8IE47IGkrKykgeworCWRvX3Jl Y3Vyc2lvbigmYXJyYXlbaV0sICZjdHgtPnNmbXRbaV0sICZhcnJheVtpICsgUE9TMSAtIE5dLCBy MSwgcjIpOworCXIxID0gcjI7CisJcjIgPSAmYXJyYXlbaV07CisgICAgfQorICAgIGZvciAoOyBp IDwgc2l6ZSAtIE47IGkrKykgeworCWRvX3JlY3Vyc2lvbigmYXJyYXlbaV0sICZhcnJheVtpIC0g Tl0sICZhcnJheVtpICsgUE9TMSAtIE5dLCByMSwgcjIpOworCXIxID0gcjI7CisJcjIgPSAmYXJy YXlbaV07CisgICAgfQorICAgIGZvciAoaiA9IDA7IGogPCAyICogTiAtIHNpemU7IGorKykgewor CWN0eC0+c2ZtdFtqXSA9IGFycmF5W2ogKyBzaXplIC0gTl07CisgICAgfQorICAgIGZvciAoOyBp IDwgc2l6ZTsgaSsrLCBqKyspIHsKKwlkb19yZWN1cnNpb24oJmFycmF5W2ldLCAmYXJyYXlbaSAt IE5dLCAmYXJyYXlbaSArIFBPUzEgLSBOXSwgcjEsIHIyKTsKKwlyMSA9IHIyOworCXIyID0gJmFy cmF5W2ldOworCWN0eC0+c2ZtdFtqXSA9IGFycmF5W2ldOworICAgIH0KK30KKyNlbmRpZgorCisj aWYgZGVmaW5lZChCSUdfRU5ESUFONjQpICYmICFkZWZpbmVkKE9OTFk2NCkgJiYgIWRlZmluZWQo SEFWRV9BTFRJVkVDKQorc3RhdGljIGlubGluZSB2b2lkIHN3YXAodzEyOF90ICphcnJheSwgaW50 IHNpemUpIHsKKyAgICBpbnQgaTsKKyAgICB1aW50MzJfdCB4LCB5OworCisgICAgZm9yIChpID0g MDsgaSA8IHNpemU7IGkrKykgeworCXggPSBhcnJheVtpXS51WzBdOworCXkgPSBhcnJheVtpXS51 WzJdOworCWFycmF5W2ldLnVbMF0gPSBhcnJheVtpXS51WzFdOworCWFycmF5W2ldLnVbMl0gPSBh cnJheVtpXS51WzNdOworCWFycmF5W2ldLnVbMV0gPSB4OworCWFycmF5W2ldLnVbM10gPSB5Owor ICAgIH0KK30KKyNlbmRpZgorLyoqCisgKiBUaGlzIGZ1bmN0aW9uIHJlcHJlc2VudHMgYSBmdW5j dGlvbiB1c2VkIGluIHRoZSBpbml0aWFsaXphdGlvbgorICogYnkgaW5pdF9ieV9hcnJheQorICog QHBhcmFtIHggMzItYml0IGludGVnZXIKKyAqIEByZXR1cm4gMzItYml0IGludGVnZXIKKyAqLwor c3RhdGljIHVpbnQzMl90IGZ1bmMxKHVpbnQzMl90IHgpIHsKKyAgICByZXR1cm4gKHggXiAoeCA+ PiAyNykpICogKHVpbnQzMl90KTE2NjQ1MjVVTDsKK30KKworLyoqCisgKiBUaGlzIGZ1bmN0aW9u IHJlcHJlc2VudHMgYSBmdW5jdGlvbiB1c2VkIGluIHRoZSBpbml0aWFsaXphdGlvbgorICogYnkg aW5pdF9ieV9hcnJheQorICogQHBhcmFtIHggMzItYml0IGludGVnZXIKKyAqIEByZXR1cm4gMzIt Yml0IGludGVnZXIKKyAqLworc3RhdGljIHVpbnQzMl90IGZ1bmMyKHVpbnQzMl90IHgpIHsKKyAg ICByZXR1cm4gKHggXiAoeCA+PiAyNykpICogKHVpbnQzMl90KTE1NjYwODM5NDFVTDsKK30KKwor LyoqCisgKiBUaGlzIGZ1bmN0aW9uIGNlcnRpZmljYXRlIHRoZSBwZXJpb2Qgb2YgMl57TUVYUH0K KyAqLworc3RhdGljIHZvaWQgcGVyaW9kX2NlcnRpZmljYXRpb24oc2ZtdF90ICpjdHgpIHsKKyAg ICBpbnQgaW5uZXIgPSAwOworICAgIGludCBpLCBqOworICAgIHVpbnQzMl90IHdvcms7CisgICAg dWludDMyX3QgKnBzZm10MzIgPSAmY3R4LT5zZm10WzBdLnVbMF07CisKKyAgICBmb3IgKGkgPSAw OyBpIDwgNDsgaSsrKQorCWlubmVyIF49IHBzZm10MzJbaWR4b2YoaSldICYgcGFyaXR5W2ldOwor ICAgIGZvciAoaSA9IDE2OyBpID4gMDsgaSA+Pj0gMSkKKwlpbm5lciBePSBpbm5lciA+PiBpOwor ICAgIGlubmVyICY9IDE7CisgICAgLyogY2hlY2sgT0sgKi8KKyAgICBpZiAoaW5uZXIgPT0gMSkg eworCXJldHVybjsKKyAgICB9CisgICAgLyogY2hlY2sgTkcsIGFuZCBtb2RpZmljYXRpb24gKi8K KyAgICBmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisJd29yayA9IDE7CisJZm9yIChqID0gMDsg aiA8IDMyOyBqKyspIHsKKwkgICAgaWYgKCh3b3JrICYgcGFyaXR5W2ldKSAhPSAwKSB7CisJCXBz Zm10MzJbaWR4b2YoaSldIF49IHdvcms7CisJCXJldHVybjsKKwkgICAgfQorCSAgICB3b3JrID0g d29yayA8PCAxOworCX0KKyAgICB9Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLQorICBQVUJMSUMg RlVOQ1RJT05TCisgIC0tLS0tLS0tLS0tLS0tLS0qLworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIHJl dHVybnMgdGhlIGlkZW50aWZpY2F0aW9uIHN0cmluZy4KKyAqIFRoZSBzdHJpbmcgc2hvd3MgdGhl IHdvcmQgc2l6ZSwgdGhlIE1lcnNlbm5lIGV4cG9uZW50LAorICogYW5kIGFsbCBwYXJhbWV0ZXJz IG9mIHRoaXMgZ2VuZXJhdG9yLgorICovCitjb25zdCBjaGFyICpnZXRfaWRzdHJpbmcodm9pZCkg eworICAgIHJldHVybiBJRFNUUjsKK30KKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMg dGhlIG1pbmltdW0gc2l6ZSBvZiBhcnJheSB1c2VkIGZvciBcYgorICogZmlsbF9hcnJheTMyKCkg ZnVuY3Rpb24uCisgKiBAcmV0dXJuIG1pbmltdW0gc2l6ZSBvZiBhcnJheSB1c2VkIGZvciBmaWxs X2FycmF5MzIoKSBmdW5jdGlvbi4KKyAqLworaW50IGdldF9taW5fYXJyYXlfc2l6ZTMyKHZvaWQp IHsKKyAgICByZXR1cm4gTjMyOworfQorCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0 aGUgbWluaW11bSBzaXplIG9mIGFycmF5IHVzZWQgZm9yIFxiCisgKiBmaWxsX2FycmF5NjQoKSBm dW5jdGlvbi4KKyAqIEByZXR1cm4gbWluaW11bSBzaXplIG9mIGFycmF5IHVzZWQgZm9yIGZpbGxf YXJyYXk2NCgpIGZ1bmN0aW9uLgorICovCitpbnQgZ2V0X21pbl9hcnJheV9zaXplNjQodm9pZCkg eworICAgIHJldHVybiBONjQ7Cit9CisKKyNpZm5kZWYgT05MWTY0CisvKioKKyAqIFRoaXMgZnVu Y3Rpb24gZ2VuZXJhdGVzIGFuZCByZXR1cm5zIDMyLWJpdCBwc2V1ZG9yYW5kb20gbnVtYmVyLgor ICogaW5pdF9nZW5fcmFuZCBvciBpbml0X2J5X2FycmF5IG11c3QgYmUgY2FsbGVkIGJlZm9yZSB0 aGlzIGZ1bmN0aW9uLgorICogQHJldHVybiAzMi1iaXQgcHNldWRvcmFuZG9tIG51bWJlcgorICov Cit1aW50MzJfdCBnZW5fcmFuZDMyKHNmbXRfdCAqY3R4KSB7CisgICAgdWludDMyX3QgcjsKKyAg ICB1aW50MzJfdCAqcHNmbXQzMiA9ICZjdHgtPnNmbXRbMF0udVswXTsKKworICAgIGFzc2VydChj dHgtPmluaXRpYWxpemVkKTsKKyAgICBpZiAoY3R4LT5pZHggPj0gTjMyKSB7CisJZ2VuX3JhbmRf YWxsKGN0eCk7CisJY3R4LT5pZHggPSAwOworICAgIH0KKyAgICByID0gcHNmbXQzMltjdHgtPmlk eCsrXTsKKyAgICByZXR1cm4gcjsKK30KKworLyogR2VuZXJhdGUgYSByYW5kb20gaW50ZWdlciBp biBbMC4ubGltaXQpLiAqLwordWludDMyX3QgZ2VuX3JhbmQzMl9yYW5nZShzZm10X3QgKmN0eCwg dWludDMyX3QgbGltaXQpIHsKKyAgICB1aW50MzJfdCByZXQsIGFib3ZlOworCisgICAgYWJvdmUg PSAweGZmZmZmZmZmVSAtICgweGZmZmZmZmZmVSAlIGxpbWl0KTsKKyAgICB3aGlsZSAoMSkgewor CXJldCA9IGdlbl9yYW5kMzIoY3R4KTsKKwlpZiAocmV0IDwgYWJvdmUpIHsKKwkgICAgcmV0ICU9 IGxpbWl0OworCSAgICBicmVhazsKKwl9CisgICAgfQorICAgIHJldHVybiByZXQ7Cit9CisjZW5k aWYKKy8qKgorICogVGhpcyBmdW5jdGlvbiBnZW5lcmF0ZXMgYW5kIHJldHVybnMgNjQtYml0IHBz ZXVkb3JhbmRvbSBudW1iZXIuCisgKiBpbml0X2dlbl9yYW5kIG9yIGluaXRfYnlfYXJyYXkgbXVz dCBiZSBjYWxsZWQgYmVmb3JlIHRoaXMgZnVuY3Rpb24uCisgKiBUaGUgZnVuY3Rpb24gZ2VuX3Jh bmQ2NCBzaG91bGQgbm90IGJlIGNhbGxlZCBhZnRlciBnZW5fcmFuZDMyLAorICogdW5sZXNzIGFu IGluaXRpYWxpemF0aW9uIGlzIGFnYWluIGV4ZWN1dGVkLgorICogQHJldHVybiA2NC1iaXQgcHNl dWRvcmFuZG9tIG51bWJlcgorICovCit1aW50NjRfdCBnZW5fcmFuZDY0KHNmbXRfdCAqY3R4KSB7 CisjaWYgZGVmaW5lZChCSUdfRU5ESUFONjQpICYmICFkZWZpbmVkKE9OTFk2NCkKKyAgICB1aW50 MzJfdCByMSwgcjI7CisgICAgdWludDMyX3QgKnBzZm10MzIgPSAmY3R4LT5zZm10WzBdLnVbMF07 CisjZWxzZQorICAgIHVpbnQ2NF90IHI7CisgICAgdWludDY0X3QgKnBzZm10NjQgPSAodWludDY0 X3QgKikmY3R4LT5zZm10WzBdLnVbMF07CisjZW5kaWYKKworICAgIGFzc2VydChjdHgtPmluaXRp YWxpemVkKTsKKyAgICBhc3NlcnQoY3R4LT5pZHggJSAyID09IDApOworCisgICAgaWYgKGN0eC0+ aWR4ID49IE4zMikgeworCWdlbl9yYW5kX2FsbChjdHgpOworCWN0eC0+aWR4ID0gMDsKKyAgICB9 CisjaWYgZGVmaW5lZChCSUdfRU5ESUFONjQpICYmICFkZWZpbmVkKE9OTFk2NCkKKyAgICByMSA9 IHBzZm10MzJbY3R4LT5pZHhdOworICAgIHIyID0gcHNmbXQzMltjdHgtPmlkeCArIDFdOworICAg IGN0eC0+aWR4ICs9IDI7CisgICAgcmV0dXJuICgodWludDY0X3QpcjIgPDwgMzIpIHwgcjE7Cisj ZWxzZQorICAgIHIgPSBwc2ZtdDY0W2N0eC0+aWR4IC8gMl07CisgICAgY3R4LT5pZHggKz0gMjsK KyAgICByZXR1cm4gcjsKKyNlbmRpZgorfQorCisvKiBHZW5lcmF0ZSBhIHJhbmRvbSBpbnRlZ2Vy IGluIFswLi5saW1pdCkuICovCit1aW50NjRfdCBnZW5fcmFuZDY0X3JhbmdlKHNmbXRfdCAqY3R4 LCB1aW50NjRfdCBsaW1pdCkgeworICAgIHVpbnQ2NF90IHJldCwgYWJvdmU7CisKKyAgICBhYm92 ZSA9IEtRVSgweGZmZmZmZmZmZmZmZmZmZmYpIC0gKEtRVSgweGZmZmZmZmZmZmZmZmZmZmYpICUg bGltaXQpOworICAgIHdoaWxlICgxKSB7CisJcmV0ID0gZ2VuX3JhbmQ2NChjdHgpOworCWlmIChy ZXQgPCBhYm92ZSkgeworCSAgICByZXQgJT0gbGltaXQ7CisJICAgIGJyZWFrOworCX0KKyAgICB9 CisgICAgcmV0dXJuIHJldDsKK30KKworI2lmbmRlZiBPTkxZNjQKKy8qKgorICogVGhpcyBmdW5j dGlvbiBnZW5lcmF0ZXMgcHNldWRvcmFuZG9tIDMyLWJpdCBpbnRlZ2VycyBpbiB0aGUKKyAqIHNw ZWNpZmllZCBhcnJheVtdIGJ5IG9uZSBjYWxsLiBUaGUgbnVtYmVyIG9mIHBzZXVkb3JhbmRvbSBp bnRlZ2VycworICogaXMgc3BlY2lmaWVkIGJ5IHRoZSBhcmd1bWVudCBzaXplLCB3aGljaCBtdXN0 IGJlIGF0IGxlYXN0IDYyNCBhbmQgYQorICogbXVsdGlwbGUgb2YgZm91ci4gIFRoZSBnZW5lcmF0 aW9uIGJ5IHRoaXMgZnVuY3Rpb24gaXMgbXVjaCBmYXN0ZXIKKyAqIHRoYW4gdGhlIGZvbGxvd2lu ZyBnZW5fcmFuZCBmdW5jdGlvbi4KKyAqCisgKiBGb3IgaW5pdGlhbGl6YXRpb24sIGluaXRfZ2Vu X3JhbmQgb3IgaW5pdF9ieV9hcnJheSBtdXN0IGJlIGNhbGxlZAorICogYmVmb3JlIHRoZSBmaXJz dCBjYWxsIG9mIHRoaXMgZnVuY3Rpb24uIFRoaXMgZnVuY3Rpb24gY2FuIG5vdCBiZQorICogdXNl ZCBhZnRlciBjYWxsaW5nIGdlbl9yYW5kIGZ1bmN0aW9uLCB3aXRob3V0IGluaXRpYWxpemF0aW9u LgorICoKKyAqIEBwYXJhbSBhcnJheSBhbiBhcnJheSB3aGVyZSBwc2V1ZG9yYW5kb20gMzItYml0 IGludGVnZXJzIGFyZSBmaWxsZWQKKyAqIGJ5IHRoaXMgZnVuY3Rpb24uICBUaGUgcG9pbnRlciB0 byB0aGUgYXJyYXkgbXVzdCBiZSBcYiAiYWxpZ25lZCIKKyAqIChuYW1lbHksIG11c3QgYmUgYSBt dWx0aXBsZSBvZiAxNikgaW4gdGhlIFNJTUQgdmVyc2lvbiwgc2luY2UgaXQKKyAqIHJlZmVycyB0 byB0aGUgYWRkcmVzcyBvZiBhIDEyOC1iaXQgaW50ZWdlci4gIEluIHRoZSBzdGFuZGFyZCBDCisg KiB2ZXJzaW9uLCB0aGUgcG9pbnRlciBpcyBhcmJpdHJhcnkuCisgKgorICogQHBhcmFtIHNpemUg dGhlIG51bWJlciBvZiAzMi1iaXQgcHNldWRvcmFuZG9tIGludGVnZXJzIHRvIGJlCisgKiBnZW5l cmF0ZWQuICBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0LCBhbmQgZ3JlYXRlciB0aGFuIG9y IGVxdWFsCisgKiB0byAoTUVYUCAvIDEyOCArIDEpICogNC4KKyAqCisgKiBAbm90ZSBcYiBtZW1h bGlnbiBvciBcYiBwb3NpeF9tZW1hbGlnbiBpcyBhdmFpbGFibGUgdG8gZ2V0IGFsaWduZWQKKyAq IG1lbW9yeS4gTWFjIE9TWCBkb2Vzbid0IGhhdmUgdGhlc2UgZnVuY3Rpb25zLCBidXQgXGIgbWFs bG9jIG9mIE9TWAorICogcmV0dXJucyB0aGUgcG9pbnRlciB0byB0aGUgYWxpZ25lZCBtZW1vcnkg YmxvY2suCisgKi8KK3ZvaWQgZmlsbF9hcnJheTMyKHNmbXRfdCAqY3R4LCB1aW50MzJfdCAqYXJy YXksIGludCBzaXplKSB7CisgICAgYXNzZXJ0KGN0eC0+aW5pdGlhbGl6ZWQpOworICAgIGFzc2Vy dChjdHgtPmlkeCA9PSBOMzIpOworICAgIGFzc2VydChzaXplICUgNCA9PSAwKTsKKyAgICBhc3Nl cnQoc2l6ZSA+PSBOMzIpOworCisgICAgZ2VuX3JhbmRfYXJyYXkoY3R4LCAodzEyOF90ICopYXJy YXksIHNpemUgLyA0KTsKKyAgICBjdHgtPmlkeCA9IE4zMjsKK30KKyNlbmRpZgorCisvKioKKyAq IFRoaXMgZnVuY3Rpb24gZ2VuZXJhdGVzIHBzZXVkb3JhbmRvbSA2NC1iaXQgaW50ZWdlcnMgaW4g dGhlCisgKiBzcGVjaWZpZWQgYXJyYXlbXSBieSBvbmUgY2FsbC4gVGhlIG51bWJlciBvZiBwc2V1 ZG9yYW5kb20gaW50ZWdlcnMKKyAqIGlzIHNwZWNpZmllZCBieSB0aGUgYXJndW1lbnQgc2l6ZSwg d2hpY2ggbXVzdCBiZSBhdCBsZWFzdCAzMTIgYW5kIGEKKyAqIG11bHRpcGxlIG9mIHR3by4gIFRo ZSBnZW5lcmF0aW9uIGJ5IHRoaXMgZnVuY3Rpb24gaXMgbXVjaCBmYXN0ZXIKKyAqIHRoYW4gdGhl IGZvbGxvd2luZyBnZW5fcmFuZCBmdW5jdGlvbi4KKyAqCisgKiBGb3IgaW5pdGlhbGl6YXRpb24s IGluaXRfZ2VuX3JhbmQgb3IgaW5pdF9ieV9hcnJheSBtdXN0IGJlIGNhbGxlZAorICogYmVmb3Jl IHRoZSBmaXJzdCBjYWxsIG9mIHRoaXMgZnVuY3Rpb24uIFRoaXMgZnVuY3Rpb24gY2FuIG5vdCBi ZQorICogdXNlZCBhZnRlciBjYWxsaW5nIGdlbl9yYW5kIGZ1bmN0aW9uLCB3aXRob3V0IGluaXRp YWxpemF0aW9uLgorICoKKyAqIEBwYXJhbSBhcnJheSBhbiBhcnJheSB3aGVyZSBwc2V1ZG9yYW5k b20gNjQtYml0IGludGVnZXJzIGFyZSBmaWxsZWQKKyAqIGJ5IHRoaXMgZnVuY3Rpb24uICBUaGUg cG9pbnRlciB0byB0aGUgYXJyYXkgbXVzdCBiZSAiYWxpZ25lZCIKKyAqIChuYW1lbHksIG11c3Qg YmUgYSBtdWx0aXBsZSBvZiAxNikgaW4gdGhlIFNJTUQgdmVyc2lvbiwgc2luY2UgaXQKKyAqIHJl ZmVycyB0byB0aGUgYWRkcmVzcyBvZiBhIDEyOC1iaXQgaW50ZWdlci4gIEluIHRoZSBzdGFuZGFy ZCBDCisgKiB2ZXJzaW9uLCB0aGUgcG9pbnRlciBpcyBhcmJpdHJhcnkuCisgKgorICogQHBhcmFt IHNpemUgdGhlIG51bWJlciBvZiA2NC1iaXQgcHNldWRvcmFuZG9tIGludGVnZXJzIHRvIGJlCisg KiBnZW5lcmF0ZWQuICBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAyLCBhbmQgZ3JlYXRlciB0 aGFuIG9yIGVxdWFsCisgKiB0byAoTUVYUCAvIDEyOCArIDEpICogMgorICoKKyAqIEBub3RlIFxi IG1lbWFsaWduIG9yIFxiIHBvc2l4X21lbWFsaWduIGlzIGF2YWlsYWJsZSB0byBnZXQgYWxpZ25l ZAorICogbWVtb3J5LiBNYWMgT1NYIGRvZXNuJ3QgaGF2ZSB0aGVzZSBmdW5jdGlvbnMsIGJ1dCBc YiBtYWxsb2Mgb2YgT1NYCisgKiByZXR1cm5zIHRoZSBwb2ludGVyIHRvIHRoZSBhbGlnbmVkIG1l bW9yeSBibG9jay4KKyAqLwordm9pZCBmaWxsX2FycmF5NjQoc2ZtdF90ICpjdHgsIHVpbnQ2NF90 ICphcnJheSwgaW50IHNpemUpIHsKKyAgICBhc3NlcnQoY3R4LT5pbml0aWFsaXplZCk7CisgICAg YXNzZXJ0KGN0eC0+aWR4ID09IE4zMik7CisgICAgYXNzZXJ0KHNpemUgJSAyID09IDApOworICAg IGFzc2VydChzaXplID49IE42NCk7CisKKyAgICBnZW5fcmFuZF9hcnJheShjdHgsICh3MTI4X3Qg KilhcnJheSwgc2l6ZSAvIDIpOworICAgIGN0eC0+aWR4ID0gTjMyOworCisjaWYgZGVmaW5lZChC SUdfRU5ESUFONjQpICYmICFkZWZpbmVkKE9OTFk2NCkKKyAgICBzd2FwKCh3MTI4X3QgKilhcnJh eSwgc2l6ZSAvMik7CisjZW5kaWYKK30KKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIGluaXRpYWxp emVzIHRoZSBpbnRlcm5hbCBzdGF0ZSBhcnJheSB3aXRoIGEgMzItYml0CisgKiBpbnRlZ2VyIHNl ZWQuCisgKgorICogQHBhcmFtIHNlZWQgYSAzMi1iaXQgaW50ZWdlciB1c2VkIGFzIHRoZSBzZWVk LgorICovCitzZm10X3QgKmluaXRfZ2VuX3JhbmQodWludDMyX3Qgc2VlZCkgeworICAgIHZvaWQg KnA7CisgICAgc2ZtdF90ICpjdHg7CisgICAgaW50IGk7CisgICAgdWludDMyX3QgKnBzZm10MzI7 CisKKyAgICBpZiAocG9zaXhfbWVtYWxpZ24oJnAsIHNpemVvZih3MTI4X3QpLCBzaXplb2Yoc2Zt dF90KSkgIT0gMCkgeworCXJldHVybiBOVUxMOworICAgIH0KKyAgICBjdHggPSAoc2ZtdF90ICop cDsKKyAgICBwc2ZtdDMyID0gJmN0eC0+c2ZtdFswXS51WzBdOworCisgICAgcHNmbXQzMltpZHhv ZigwKV0gPSBzZWVkOworICAgIGZvciAoaSA9IDE7IGkgPCBOMzI7IGkrKykgeworCXBzZm10MzJb aWR4b2YoaSldID0gMTgxMjQzMzI1M1VMICogKHBzZm10MzJbaWR4b2YoaSAtIDEpXQorCQkJCQkg ICAgXiAocHNmbXQzMltpZHhvZihpIC0gMSldID4+IDMwKSkKKwkgICAgKyBpOworICAgIH0KKyAg ICBjdHgtPmlkeCA9IE4zMjsKKyAgICBwZXJpb2RfY2VydGlmaWNhdGlvbihjdHgpOworICAgIGN0 eC0+aW5pdGlhbGl6ZWQgPSAxOworCisgICAgcmV0dXJuIGN0eDsKK30KKworLyoqCisgKiBUaGlz IGZ1bmN0aW9uIGluaXRpYWxpemVzIHRoZSBpbnRlcm5hbCBzdGF0ZSBhcnJheSwKKyAqIHdpdGgg YW4gYXJyYXkgb2YgMzItYml0IGludGVnZXJzIHVzZWQgYXMgdGhlIHNlZWRzCisgKiBAcGFyYW0g aW5pdF9rZXkgdGhlIGFycmF5IG9mIDMyLWJpdCBpbnRlZ2VycywgdXNlZCBhcyBhIHNlZWQuCisg KiBAcGFyYW0ga2V5X2xlbmd0aCB0aGUgbGVuZ3RoIG9mIGluaXRfa2V5LgorICovCitzZm10X3Qg KmluaXRfYnlfYXJyYXkodWludDMyX3QgKmluaXRfa2V5LCBpbnQga2V5X2xlbmd0aCkgeworICAg IHZvaWQgKnA7CisgICAgc2ZtdF90ICpjdHg7CisgICAgaW50IGksIGosIGNvdW50OworICAgIHVp bnQzMl90IHI7CisgICAgaW50IGxhZzsKKyAgICBpbnQgbWlkOworICAgIGludCBzaXplID0gTiAq IDQ7CisgICAgdWludDMyX3QgKnBzZm10MzI7CisKKyAgICBpZiAocG9zaXhfbWVtYWxpZ24oJnAs IHNpemVvZih3MTI4X3QpLCBzaXplb2Yoc2ZtdF90KSkgIT0gMCkgeworCXJldHVybiBOVUxMOwor ICAgIH0KKyAgICBjdHggPSAoc2ZtdF90ICopcDsKKyAgICBwc2ZtdDMyID0gJmN0eC0+c2ZtdFsw XS51WzBdOworCisgICAgaWYgKHNpemUgPj0gNjIzKSB7CisJbGFnID0gMTE7CisgICAgfSBlbHNl IGlmIChzaXplID49IDY4KSB7CisJbGFnID0gNzsKKyAgICB9IGVsc2UgaWYgKHNpemUgPj0gMzkp IHsKKwlsYWcgPSA1OworICAgIH0gZWxzZSB7CisJbGFnID0gMzsKKyAgICB9CisgICAgbWlkID0g KHNpemUgLSBsYWcpIC8gMjsKKworICAgIG1lbXNldChjdHgtPnNmbXQsIDB4OGIsIHNpemVvZihj dHgtPnNmbXQpKTsKKyAgICBpZiAoa2V5X2xlbmd0aCArIDEgPiBOMzIpIHsKKwljb3VudCA9IGtl eV9sZW5ndGggKyAxOworICAgIH0gZWxzZSB7CisJY291bnQgPSBOMzI7CisgICAgfQorICAgIHIg PSBmdW5jMShwc2ZtdDMyW2lkeG9mKDApXSBeIHBzZm10MzJbaWR4b2YobWlkKV0KKwkgICAgICBe IHBzZm10MzJbaWR4b2YoTjMyIC0gMSldKTsKKyAgICBwc2ZtdDMyW2lkeG9mKG1pZCldICs9IHI7 CisgICAgciArPSBrZXlfbGVuZ3RoOworICAgIHBzZm10MzJbaWR4b2YobWlkICsgbGFnKV0gKz0g cjsKKyAgICBwc2ZtdDMyW2lkeG9mKDApXSA9IHI7CisKKyAgICBjb3VudC0tOworICAgIGZvciAo aSA9IDEsIGogPSAwOyAoaiA8IGNvdW50KSAmJiAoaiA8IGtleV9sZW5ndGgpOyBqKyspIHsKKwly ID0gZnVuYzEocHNmbXQzMltpZHhvZihpKV0gXiBwc2ZtdDMyW2lkeG9mKChpICsgbWlkKSAlIE4z MildCisJCSAgXiBwc2ZtdDMyW2lkeG9mKChpICsgTjMyIC0gMSkgJSBOMzIpXSk7CisJcHNmbXQz MltpZHhvZigoaSArIG1pZCkgJSBOMzIpXSArPSByOworCXIgKz0gaW5pdF9rZXlbal0gKyBpOwor CXBzZm10MzJbaWR4b2YoKGkgKyBtaWQgKyBsYWcpICUgTjMyKV0gKz0gcjsKKwlwc2ZtdDMyW2lk eG9mKGkpXSA9IHI7CisJaSA9IChpICsgMSkgJSBOMzI7CisgICAgfQorICAgIGZvciAoOyBqIDwg Y291bnQ7IGorKykgeworCXIgPSBmdW5jMShwc2ZtdDMyW2lkeG9mKGkpXSBeIHBzZm10MzJbaWR4 b2YoKGkgKyBtaWQpICUgTjMyKV0KKwkJICBeIHBzZm10MzJbaWR4b2YoKGkgKyBOMzIgLSAxKSAl IE4zMildKTsKKwlwc2ZtdDMyW2lkeG9mKChpICsgbWlkKSAlIE4zMildICs9IHI7CisJciArPSBp OworCXBzZm10MzJbaWR4b2YoKGkgKyBtaWQgKyBsYWcpICUgTjMyKV0gKz0gcjsKKwlwc2ZtdDMy W2lkeG9mKGkpXSA9IHI7CisJaSA9IChpICsgMSkgJSBOMzI7CisgICAgfQorICAgIGZvciAoaiA9 IDA7IGogPCBOMzI7IGorKykgeworCXIgPSBmdW5jMihwc2ZtdDMyW2lkeG9mKGkpXSArIHBzZm10 MzJbaWR4b2YoKGkgKyBtaWQpICUgTjMyKV0KKwkJICArIHBzZm10MzJbaWR4b2YoKGkgKyBOMzIg LSAxKSAlIE4zMildKTsKKwlwc2ZtdDMyW2lkeG9mKChpICsgbWlkKSAlIE4zMildIF49IHI7CisJ ciAtPSBpOworCXBzZm10MzJbaWR4b2YoKGkgKyBtaWQgKyBsYWcpICUgTjMyKV0gXj0gcjsKKwlw c2ZtdDMyW2lkeG9mKGkpXSA9IHI7CisJaSA9IChpICsgMSkgJSBOMzI7CisgICAgfQorCisgICAg Y3R4LT5pZHggPSBOMzI7CisgICAgcGVyaW9kX2NlcnRpZmljYXRpb24oY3R4KTsKKyAgICBjdHgt PmluaXRpYWxpemVkID0gMTsKKworICAgIHJldHVybiBjdHg7Cit9CisKK3ZvaWQgZmluaV9nZW5f cmFuZChzZm10X3QgKmN0eCkgeworICAgIGFzc2VydChjdHggIT0gTlVMTCk7CisKKyAgICBjdHgt PmluaXRpYWxpemVkID0gMDsKKyAgICBmcmVlKGN0eCk7Cit9CgpkaWZmIC0tZ2l0IGEvMzg5LWRz LWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC9zcmMvYnRhbGxvYy5jIGIvMzg5 LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC9zcmMvYnRhbGxvYy5jCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1NzA5NTIKLS0tIC9kZXYvbnVsbAor KysgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3NyYy9idGFs bG9jLmMKQEAgLTAsMCArMSw2IEBACisjaW5jbHVkZSAidGVzdC9qZW1hbGxvY190ZXN0LmgiCisK K3ZvaWQgKgorYnRhbGxvYyhzaXplX3Qgc2l6ZSwgdW5zaWduZWQgYml0cykgeworCXJldHVybiBi dGFsbG9jXzAoc2l6ZSwgYml0cyk7Cit9CgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAt YnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC9zcmMvYnRhbGxvY18wLmMgYi8zODktZHMtYmFzZS0z LjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3NyYy9idGFsbG9jXzAuYwpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43N2Q4OTA0Ci0tLSAvZGV2L251bGwKKysrIGIvMzg5 LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC9zcmMvYnRhbGxvY18wLmMK QEAgLTAsMCArMSwzIEBACisjaW5jbHVkZSAidGVzdC9qZW1hbGxvY190ZXN0LmgiCisKK2J0YWxs b2Nfbl9nZW4oMCkKCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxv Yy01LjMuMC90ZXN0L3NyYy9idGFsbG9jXzEuYyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2pl bWFsbG9jLTUuMy4wL3Rlc3Qvc3JjL2J0YWxsb2NfMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAuLjRjMTI2YzMKLS0tIC9kZXYvbnVsbAorKysgYi8zODktZHMtYmFzZS0zLjMu MC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3NyYy9idGFsbG9jXzEuYwpAQCAtMCwwICsxLDMg QEAKKyNpbmNsdWRlICJ0ZXN0L2plbWFsbG9jX3Rlc3QuaCIKKworYnRhbGxvY19uX2dlbigxKQoK ZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3Qv c3JjL21hdGguYyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3Qv c3JjL21hdGguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzU4YzY3Ci0t LSAvZGV2L251bGwKKysrIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAv dGVzdC9zcmMvbWF0aC5jCkBAIC0wLDAgKzEsMiBAQAorI2RlZmluZSBNQVRIX0NfCisjaW5jbHVk ZSAidGVzdC9qZW1hbGxvY190ZXN0LmgiCgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAt YnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC9zcmMvbXR4LmMgYi8zODktZHMtYmFzZS0zLjMuMC1i dWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3NyYy9tdHguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwLi5kOWNlMzc1Ci0tLSAvZGV2L251bGwKKysrIGIvMzg5LWRzLWJhc2UtMy4z LjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC9zcmMvbXR4LmMKQEAgLTAsMCArMSw2MSBAQAor I2luY2x1ZGUgInRlc3QvamVtYWxsb2NfdGVzdC5oIgorCisjaWZuZGVmIF9DUlRfU1BJTkNPVU5U CisjZGVmaW5lIF9DUlRfU1BJTkNPVU5UIDQwMDAKKyNlbmRpZgorCitib29sCittdHhfaW5pdCht dHhfdCAqbXR4KSB7CisjaWZkZWYgX1dJTjMyCisJaWYgKCFJbml0aWFsaXplQ3JpdGljYWxTZWN0 aW9uQW5kU3BpbkNvdW50KCZtdHgtPmxvY2ssCisJICAgIF9DUlRfU1BJTkNPVU5UKSkgeworCQly ZXR1cm4gdHJ1ZTsKKwl9CisjZWxpZiAoZGVmaW5lZChKRU1BTExPQ19PU19VTkZBSVJfTE9DSykp CisJbXR4LT5sb2NrID0gT1NfVU5GQUlSX0xPQ0tfSU5JVDsKKyNlbHNlCisJcHRocmVhZF9tdXRl eGF0dHJfdCBhdHRyOworCisJaWYgKHB0aHJlYWRfbXV0ZXhhdHRyX2luaXQoJmF0dHIpICE9IDAp IHsKKwkJcmV0dXJuIHRydWU7CisJfQorCXB0aHJlYWRfbXV0ZXhhdHRyX3NldHR5cGUoJmF0dHIs IFBUSFJFQURfTVVURVhfREVGQVVMVCk7CisJaWYgKHB0aHJlYWRfbXV0ZXhfaW5pdCgmbXR4LT5s b2NrLCAmYXR0cikgIT0gMCkgeworCQlwdGhyZWFkX211dGV4YXR0cl9kZXN0cm95KCZhdHRyKTsK KwkJcmV0dXJuIHRydWU7CisJfQorCXB0aHJlYWRfbXV0ZXhhdHRyX2Rlc3Ryb3koJmF0dHIpOwor I2VuZGlmCisJcmV0dXJuIGZhbHNlOworfQorCit2b2lkCittdHhfZmluaShtdHhfdCAqbXR4KSB7 CisjaWZkZWYgX1dJTjMyCisjZWxpZiAoZGVmaW5lZChKRU1BTExPQ19PU19VTkZBSVJfTE9DSykp CisjZWxzZQorCXB0aHJlYWRfbXV0ZXhfZGVzdHJveSgmbXR4LT5sb2NrKTsKKyNlbmRpZgorfQor Cit2b2lkCittdHhfbG9jayhtdHhfdCAqbXR4KSB7CisjaWZkZWYgX1dJTjMyCisJRW50ZXJDcml0 aWNhbFNlY3Rpb24oJm10eC0+bG9jayk7CisjZWxpZiAoZGVmaW5lZChKRU1BTExPQ19PU19VTkZB SVJfTE9DSykpCisJb3NfdW5mYWlyX2xvY2tfbG9jaygmbXR4LT5sb2NrKTsKKyNlbHNlCisJcHRo cmVhZF9tdXRleF9sb2NrKCZtdHgtPmxvY2spOworI2VuZGlmCit9CisKK3ZvaWQKK210eF91bmxv Y2sobXR4X3QgKm10eCkgeworI2lmZGVmIF9XSU4zMgorCUxlYXZlQ3JpdGljYWxTZWN0aW9uKCZt dHgtPmxvY2spOworI2VsaWYgKGRlZmluZWQoSkVNQUxMT0NfT1NfVU5GQUlSX0xPQ0spKQorCW9z X3VuZmFpcl9sb2NrX3VubG9jaygmbXR4LT5sb2NrKTsKKyNlbHNlCisJcHRocmVhZF9tdXRleF91 bmxvY2soJm10eC0+bG9jayk7CisjZW5kaWYKK30KCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0z LjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3NyYy9zbGVlcC5jIGIvMzg5LWRzLWJhc2Ut My4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC9zcmMvc2xlZXAuYwpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjM0YjRiCi0tLSAvZGV2L251bGwKKysrIGIvMzg5LWRz LWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC9zcmMvc2xlZXAuYwpAQCAtMCww ICsxLDI3IEBACisjaW5jbHVkZSAidGVzdC9qZW1hbGxvY190ZXN0LmgiCisKKy8qCisgKiBTbGVl cCBmb3IgYXBwcm94aW1hdGVseSBucyBuYW5vc2Vjb25kcy4gIE5vIGxvd2VyICpub3IqIHVwcGVy IGJvdW5kIG9uIHNsZWVwCisgKiB0aW1lIGlzIGd1YXJhbnRlZWQuCisgKi8KK3ZvaWQKK3NsZWVw X25zKHVuc2lnbmVkIG5zKSB7CisJYXNzZXJ0KG5zIDw9IDEwMDAqMTAwMCoxMDAwKTsKKworI2lm ZGVmIF9XSU4zMgorCVNsZWVwKG5zIC8gMTAwMCAvIDEwMDApOworI2Vsc2UKKwl7CisJCXN0cnVj dCB0aW1lc3BlYyB0aW1lb3V0OworCisJCWlmIChucyA8IDEwMDAqMTAwMCoxMDAwKSB7CisJCQl0 aW1lb3V0LnR2X3NlYyA9IDA7CisJCQl0aW1lb3V0LnR2X25zZWMgPSBuczsKKwkJfSBlbHNlIHsK KwkJCXRpbWVvdXQudHZfc2VjID0gMTsKKwkJCXRpbWVvdXQudHZfbnNlYyA9IDA7CisJCX0KKwkJ bmFub3NsZWVwKCZ0aW1lb3V0LCBOVUxMKTsKKwl9CisjZW5kaWYKK30KCmRpZmYgLS1naXQgYS8z ODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3NyYy90ZXN0LmMgYi8z ODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3NyYy90ZXN0LmMKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGNkODAzZQotLS0gL2Rldi9udWxsCisr KyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3Qvc3JjL3Rlc3Qu YwpAQCAtMCwwICsxLDIzNCBAQAorI2luY2x1ZGUgInRlc3QvamVtYWxsb2NfdGVzdC5oIgorCisv KiBUZXN0IHN0YXR1cyBzdGF0ZS4gKi8KKworc3RhdGljIHVuc2lnbmVkCQl0ZXN0X2NvdW50ID0g MDsKK3N0YXRpYyB0ZXN0X3N0YXR1c190CXRlc3RfY291bnRzW3Rlc3Rfc3RhdHVzX2NvdW50XSA9 IHswLCAwLCAwfTsKK3N0YXRpYyB0ZXN0X3N0YXR1c190CXRlc3Rfc3RhdHVzID0gdGVzdF9zdGF0 dXNfcGFzczsKK3N0YXRpYyBjb25zdCBjaGFyICoJdGVzdF9uYW1lID0gIiI7CisKKy8qIFJlZW50 cmFuY3kgdGVzdGluZyBoZWxwZXJzLiAqLworCisjZGVmaW5lIE5VTV9SRUVOVFJBTlRfQUxMT0NT IDIwCit0eXBlZGVmIGVudW0geworCW5vbl9yZWVudHJhbnQgPSAwLAorCWxpYmNfcmVlbnRyYW50 ID0gMSwKKwlhcmVuYV9uZXdfcmVlbnRyYW50ID0gMgorfSByZWVudHJhbmN5X3Q7CitzdGF0aWMg cmVlbnRyYW5jeV90IHJlZW50cmFuY3k7CisKK3N0YXRpYyBib29sIGxpYmNfaG9va19yYW4gPSBm YWxzZTsKK3N0YXRpYyBib29sIGFyZW5hX25ld19ob29rX3JhbiA9IGZhbHNlOworCitzdGF0aWMg Y29uc3QgY2hhciAqCityZWVudHJhbmN5X3Rfc3RyKHJlZW50cmFuY3lfdCByKSB7CisJc3dpdGNo IChyKSB7CisJY2FzZSBub25fcmVlbnRyYW50OgorCQlyZXR1cm4gIm5vbi1yZWVudHJhbnQiOwor CWNhc2UgbGliY19yZWVudHJhbnQ6CisJCXJldHVybiAibGliYy1yZWVudHJhbnQiOworCWNhc2Ug YXJlbmFfbmV3X3JlZW50cmFudDoKKwkJcmV0dXJuICJhcmVuYV9uZXctcmVlbnRyYW50IjsKKwlk ZWZhdWx0OgorCQl1bnJlYWNoYWJsZSgpOworCX0KK30KKworc3RhdGljIHZvaWQKK2RvX2hvb2so Ym9vbCAqaG9va19yYW4sIHZvaWQgKCoqaG9vaykoKSkgeworCSpob29rX3JhbiA9IHRydWU7CisJ Kmhvb2sgPSBOVUxMOworCisJc2l6ZV90IGFsbG9jX3NpemUgPSAxOworCWZvciAoaW50IGkgPSAw OyBpIDwgTlVNX1JFRU5UUkFOVF9BTExPQ1M7IGkrKykgeworCQlmcmVlKG1hbGxvYyhhbGxvY19z aXplKSk7CisJCWFsbG9jX3NpemUgKj0gMjsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitsaWJjX3Jl ZW50cmFuY3lfaG9vaygpIHsKKwlkb19ob29rKCZsaWJjX2hvb2tfcmFuLCAmdGVzdF9ob29rc19s aWJjX2hvb2spOworfQorCitzdGF0aWMgdm9pZAorYXJlbmFfbmV3X3JlZW50cmFuY3lfaG9vaygp IHsKKwlkb19ob29rKCZhcmVuYV9uZXdfaG9va19yYW4sICZ0ZXN0X2hvb2tzX2FyZW5hX25ld19o b29rKTsKK30KKworLyogQWN0dWFsIHRlc3QgaW5mcmFzdHJ1Y3R1cmUuICovCitib29sCit0ZXN0 X2lzX3JlZW50cmFudCgpIHsKKwlyZXR1cm4gcmVlbnRyYW5jeSAhPSBub25fcmVlbnRyYW50Owor fQorCitKRU1BTExPQ19GT1JNQVRfUFJJTlRGKDEsIDIpCit2b2lkCit0ZXN0X3NraXAoY29uc3Qg Y2hhciAqZm9ybWF0LCAuLi4pIHsKKwl2YV9saXN0IGFwOworCisJdmFfc3RhcnQoYXAsIGZvcm1h dCk7CisJbWFsbG9jX3ZjcHJpbnRmKE5VTEwsIE5VTEwsIGZvcm1hdCwgYXApOworCXZhX2VuZChh cCk7CisJbWFsbG9jX3ByaW50ZigiXG4iKTsKKwl0ZXN0X3N0YXR1cyA9IHRlc3Rfc3RhdHVzX3Nr aXA7Cit9CisKK0pFTUFMTE9DX0ZPUk1BVF9QUklOVEYoMSwgMikKK3ZvaWQKK3Rlc3RfZmFpbChj b25zdCBjaGFyICpmb3JtYXQsIC4uLikgeworCXZhX2xpc3QgYXA7CisKKwl2YV9zdGFydChhcCwg Zm9ybWF0KTsKKwltYWxsb2NfdmNwcmludGYoTlVMTCwgTlVMTCwgZm9ybWF0LCBhcCk7CisJdmFf ZW5kKGFwKTsKKwltYWxsb2NfcHJpbnRmKCJcbiIpOworCXRlc3Rfc3RhdHVzID0gdGVzdF9zdGF0 dXNfZmFpbDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKgordGVzdF9zdGF0dXNfc3RyaW5nKHRl c3Rfc3RhdHVzX3QgY3VycmVudF9zdGF0dXMpIHsKKwlzd2l0Y2ggKGN1cnJlbnRfc3RhdHVzKSB7 CisJY2FzZSB0ZXN0X3N0YXR1c19wYXNzOiByZXR1cm4gInBhc3MiOworCWNhc2UgdGVzdF9zdGF0 dXNfc2tpcDogcmV0dXJuICJza2lwIjsKKwljYXNlIHRlc3Rfc3RhdHVzX2ZhaWw6IHJldHVybiAi ZmFpbCI7CisJZGVmYXVsdDogbm90X3JlYWNoZWQoKTsKKwl9Cit9CisKK3ZvaWQKK3BfdGVzdF9p bml0KGNvbnN0IGNoYXIgKm5hbWUpIHsKKwl0ZXN0X2NvdW50Kys7CisJdGVzdF9zdGF0dXMgPSB0 ZXN0X3N0YXR1c19wYXNzOworCXRlc3RfbmFtZSA9IG5hbWU7Cit9CisKK3ZvaWQKK3BfdGVzdF9m aW5pKHZvaWQpIHsKKwl0ZXN0X2NvdW50c1t0ZXN0X3N0YXR1c10rKzsKKwltYWxsb2NfcHJpbnRm KCIlcyAoJXMpOiAlc1xuIiwgdGVzdF9uYW1lLCByZWVudHJhbmN5X3Rfc3RyKHJlZW50cmFuY3kp LAorCSAgICB0ZXN0X3N0YXR1c19zdHJpbmcodGVzdF9zdGF0dXMpKTsKK30KKworc3RhdGljIHZv aWQKK2NoZWNrX2dsb2JhbF9zbG93KHRlc3Rfc3RhdHVzX3QgKnN0YXR1cykgeworI2lmZGVmIEpF TUFMTE9DX1VOSVRfVEVTVAorCS8qCisJICogVGhpcyBjaGVjayBuZWVkcyB0byBwZWVrIGludG8g dHNkIGludGVybmFscywgd2hpY2ggaXMgd2h5IGl0J3Mgb25seQorCSAqIGV4cG9zZWQgaW4gdW5p dCB0ZXN0cy4KKwkgKi8KKwlpZiAodHNkX2dsb2JhbF9zbG93KCkpIHsKKwkJbWFsbG9jX3ByaW50 ZigiVGVzdGluZyBpbmNyZWFzZWQgZ2xvYmFsIHNsb3cgY291bnRcbiIpOworCQkqc3RhdHVzID0g dGVzdF9zdGF0dXNfZmFpbDsKKwl9CisjZW5kaWYKK30KKworc3RhdGljIHRlc3Rfc3RhdHVzX3QK K3BfdGVzdF9pbXBsKGJvb2wgZG9fbWFsbG9jX2luaXQsIGJvb2wgZG9fcmVlbnRyYW50LCB0ZXN0 X3QgKnQsIHZhX2xpc3QgYXApIHsKKwl0ZXN0X3N0YXR1c190IHJldDsKKworCWlmIChkb19tYWxs b2NfaW5pdCkgeworCQkvKgorCQkgKiBNYWtlIHN1cmUgaW5pdGlhbGl6YXRpb24gb2NjdXJzIHBy aW9yIHRvIHJ1bm5pbmcgdGVzdHMuCisJCSAqIFRlc3RzIGFyZSBzcGVjaWFsIGJlY2F1c2UgdGhl eSBtYXkgdXNlIGludGVybmFsIGZhY2lsaXRpZXMKKwkJICogcHJpb3IgdG8gdHJpZ2dlcmluZyBp bml0aWFsaXphdGlvbiBhcyBhIHNpZGUgZWZmZWN0IG9mCisJCSAqIGNhbGxpbmcgaW50byB0aGUg cHVibGljIEFQSS4KKwkJICovCisJCWlmIChuYWxsb2N4KDEsIDApID09IDApIHsKKwkJCW1hbGxv Y19wcmludGYoIkluaXRpYWxpemF0aW9uIGVycm9yIik7CisJCQlyZXR1cm4gdGVzdF9zdGF0dXNf ZmFpbDsKKwkJfQorCX0KKworCXJldCA9IHRlc3Rfc3RhdHVzX3Bhc3M7CisJZm9yICg7IHQgIT0g TlVMTDsgdCA9IHZhX2FyZyhhcCwgdGVzdF90ICopKSB7CisJCS8qIE5vbi1yZWVudHJhbnQgcnVu LiAqLworCQlyZWVudHJhbmN5ID0gbm9uX3JlZW50cmFudDsKKwkJdGVzdF9ob29rc19hcmVuYV9u ZXdfaG9vayA9IHRlc3RfaG9va3NfbGliY19ob29rID0gTlVMTDsKKwkJdCgpOworCQlpZiAodGVz dF9zdGF0dXMgPiByZXQpIHsKKwkJCXJldCA9IHRlc3Rfc3RhdHVzOworCQl9CisJCWNoZWNrX2ds b2JhbF9zbG93KCZyZXQpOworCQkvKiBSZWVudHJhbnQgcnVuLiAqLworCQlpZiAoZG9fcmVlbnRy YW50KSB7CisJCQlyZWVudHJhbmN5ID0gbGliY19yZWVudHJhbnQ7CisJCQl0ZXN0X2hvb2tzX2Fy ZW5hX25ld19ob29rID0gTlVMTDsKKwkJCXRlc3RfaG9va3NfbGliY19ob29rID0gJmxpYmNfcmVl bnRyYW5jeV9ob29rOworCQkJdCgpOworCQkJaWYgKHRlc3Rfc3RhdHVzID4gcmV0KSB7CisJCQkJ cmV0ID0gdGVzdF9zdGF0dXM7CisJCQl9CisJCQljaGVja19nbG9iYWxfc2xvdygmcmV0KTsKKwor CQkJcmVlbnRyYW5jeSA9IGFyZW5hX25ld19yZWVudHJhbnQ7CisJCQl0ZXN0X2hvb2tzX2xpYmNf aG9vayA9IE5VTEw7CisJCQl0ZXN0X2hvb2tzX2FyZW5hX25ld19ob29rID0gJmFyZW5hX25ld19y ZWVudHJhbmN5X2hvb2s7CisJCQl0KCk7CisJCQlpZiAodGVzdF9zdGF0dXMgPiByZXQpIHsKKwkJ CQlyZXQgPSB0ZXN0X3N0YXR1czsKKwkJCX0KKwkJCWNoZWNrX2dsb2JhbF9zbG93KCZyZXQpOwor CQl9CisJfQorCisJbWFsbG9jX3ByaW50ZigiLS0tICVzOiAldS8ldSwgJXM6ICV1LyV1LCAlczog JXUvJXUgLS0tXG4iLAorCSAgICB0ZXN0X3N0YXR1c19zdHJpbmcodGVzdF9zdGF0dXNfcGFzcyks CisJICAgIHRlc3RfY291bnRzW3Rlc3Rfc3RhdHVzX3Bhc3NdLCB0ZXN0X2NvdW50LAorCSAgICB0 ZXN0X3N0YXR1c19zdHJpbmcodGVzdF9zdGF0dXNfc2tpcCksCisJICAgIHRlc3RfY291bnRzW3Rl c3Rfc3RhdHVzX3NraXBdLCB0ZXN0X2NvdW50LAorCSAgICB0ZXN0X3N0YXR1c19zdHJpbmcodGVz dF9zdGF0dXNfZmFpbCksCisJICAgIHRlc3RfY291bnRzW3Rlc3Rfc3RhdHVzX2ZhaWxdLCB0ZXN0 X2NvdW50KTsKKworCXJldHVybiByZXQ7Cit9CisKK3Rlc3Rfc3RhdHVzX3QKK3BfdGVzdCh0ZXN0 X3QgKnQsIC4uLikgeworCXRlc3Rfc3RhdHVzX3QgcmV0OworCXZhX2xpc3QgYXA7CisKKwlyZXQg PSB0ZXN0X3N0YXR1c19wYXNzOworCXZhX3N0YXJ0KGFwLCB0KTsKKwlyZXQgPSBwX3Rlc3RfaW1w bCh0cnVlLCB0cnVlLCB0LCBhcCk7CisJdmFfZW5kKGFwKTsKKworCXJldHVybiByZXQ7Cit9CisK K3Rlc3Rfc3RhdHVzX3QKK3BfdGVzdF9ub19yZWVudHJhbmN5KHRlc3RfdCAqdCwgLi4uKSB7CisJ dGVzdF9zdGF0dXNfdCByZXQ7CisJdmFfbGlzdCBhcDsKKworCXJldCA9IHRlc3Rfc3RhdHVzX3Bh c3M7CisJdmFfc3RhcnQoYXAsIHQpOworCXJldCA9IHBfdGVzdF9pbXBsKHRydWUsIGZhbHNlLCB0 LCBhcCk7CisJdmFfZW5kKGFwKTsKKworCXJldHVybiByZXQ7Cit9CisKK3Rlc3Rfc3RhdHVzX3QK K3BfdGVzdF9ub19tYWxsb2NfaW5pdCh0ZXN0X3QgKnQsIC4uLikgeworCXRlc3Rfc3RhdHVzX3Qg cmV0OworCXZhX2xpc3QgYXA7CisKKwlyZXQgPSB0ZXN0X3N0YXR1c19wYXNzOworCXZhX3N0YXJ0 KGFwLCB0KTsKKwkvKgorCSAqIFdlIGFsc28gb21pdCByZWVudHJhbmN5IGZyb20gYm9vdHN0cmFw cGluZyB0ZXN0cywgc2luY2Ugd2UgZG9uJ3QKKwkgKiAoeWV0KSBjYXJlIGFib3V0IGdlbmVyYWwg cmVlbnRyYW5jeSBkdXJpbmcgYm9vdHN0cmFwcGluZy4KKwkgKi8KKwlyZXQgPSBwX3Rlc3RfaW1w bChmYWxzZSwgZmFsc2UsIHQsIGFwKTsKKwl2YV9lbmQoYXApOworCisJcmV0dXJuIHJldDsKK30K Kwordm9pZAorcF90ZXN0X2ZhaWwoY29uc3QgY2hhciAqcHJlZml4LCBjb25zdCBjaGFyICptZXNz YWdlKSB7CisJbWFsbG9jX2NwcmludGYoTlVMTCwgTlVMTCwgIiVzJXNcbiIsIHByZWZpeCwgbWVz c2FnZSk7CisJdGVzdF9zdGF0dXMgPSB0ZXN0X3N0YXR1c19mYWlsOworfQoKZGlmZiAtLWdpdCBh LzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3Qvc3JjL3RoZC5jIGIv Mzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC9zcmMvdGhkLmMKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWExNWVhYgotLS0gL2Rldi9udWxsCisr KyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3Qvc3JjL3RoZC5j CkBAIC0wLDAgKzEsMzQgQEAKKyNpbmNsdWRlICJ0ZXN0L2plbWFsbG9jX3Rlc3QuaCIKKworI2lm ZGVmIF9XSU4zMgordm9pZAordGhkX2NyZWF0ZSh0aGRfdCAqdGhkLCB2b2lkICooKnByb2MpKHZv aWQgKiksIHZvaWQgKmFyZykgeworCUxQVEhSRUFEX1NUQVJUX1JPVVRJTkUgcm91dGluZSA9IChM UFRIUkVBRF9TVEFSVF9ST1VUSU5FKXByb2M7CisJKnRoZCA9IENyZWF0ZVRocmVhZChOVUxMLCAw LCByb3V0aW5lLCBhcmcsIDAsIE5VTEwpOworCWlmICgqdGhkID09IE5VTEwpIHsKKwkJdGVzdF9m YWlsKCJFcnJvciBpbiBDcmVhdGVUaHJlYWQoKVxuIik7CisJfQorfQorCit2b2lkCit0aGRfam9p bih0aGRfdCB0aGQsIHZvaWQgKipyZXQpIHsKKwlpZiAoV2FpdEZvclNpbmdsZU9iamVjdCh0aGQs IElORklOSVRFKSA9PSBXQUlUX09CSkVDVF8wICYmIHJldCkgeworCQlEV09SRCBleGl0X2NvZGU7 CisJCUdldEV4aXRDb2RlVGhyZWFkKHRoZCwgKExQRFdPUkQpICZleGl0X2NvZGUpOworCQkqcmV0 ID0gKHZvaWQgKikodWludHB0cl90KWV4aXRfY29kZTsKKwl9Cit9CisKKyNlbHNlCit2b2lkCit0 aGRfY3JlYXRlKHRoZF90ICp0aGQsIHZvaWQgKigqcHJvYykodm9pZCAqKSwgdm9pZCAqYXJnKSB7 CisJaWYgKHB0aHJlYWRfY3JlYXRlKHRoZCwgTlVMTCwgcHJvYywgYXJnKSAhPSAwKSB7CisJCXRl c3RfZmFpbCgiRXJyb3IgaW4gcHRocmVhZF9jcmVhdGUoKVxuIik7CisJfQorfQorCit2b2lkCit0 aGRfam9pbih0aGRfdCB0aGQsIHZvaWQgKipyZXQpIHsKKwlwdGhyZWFkX2pvaW4odGhkLCByZXQp OworfQorI2VuZGlmCgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxs b2MtNS4zLjAvdGVzdC9zcmMvdGltZXIuYyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFs bG9jLTUuMy4wL3Rlc3Qvc3JjL3RpbWVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMC4uNmU4YjhlZAotLS0gL2Rldi9udWxsCisrKyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxk L2plbWFsbG9jLTUuMy4wL3Rlc3Qvc3JjL3RpbWVyLmMKQEAgLTAsMCArMSw1NSBAQAorI2luY2x1 ZGUgInRlc3QvamVtYWxsb2NfdGVzdC5oIgorCit2b2lkCit0aW1lcl9zdGFydCh0aW1lZGVsdGFf dCAqdGltZXIpIHsKKwluc3RpbWVfaW5pdF91cGRhdGUoJnRpbWVyLT50MCk7Cit9CisKK3ZvaWQK K3RpbWVyX3N0b3AodGltZWRlbHRhX3QgKnRpbWVyKSB7CisJbnN0aW1lX2NvcHkoJnRpbWVyLT50 MSwgJnRpbWVyLT50MCk7CisJbnN0aW1lX3VwZGF0ZSgmdGltZXItPnQxKTsKK30KKwordWludDY0 X3QKK3RpbWVyX3VzZWMoY29uc3QgdGltZWRlbHRhX3QgKnRpbWVyKSB7CisJbnN0aW1lX3QgZGVs dGE7CisKKwluc3RpbWVfY29weSgmZGVsdGEsICZ0aW1lci0+dDEpOworCW5zdGltZV9zdWJ0cmFj dCgmZGVsdGEsICZ0aW1lci0+dDApOworCXJldHVybiBuc3RpbWVfbnMoJmRlbHRhKSAvIDEwMDA7 Cit9CisKK3ZvaWQKK3RpbWVyX3JhdGlvKHRpbWVkZWx0YV90ICphLCB0aW1lZGVsdGFfdCAqYiwg Y2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKSB7CisJdWludDY0X3QgdDAgPSB0aW1lcl91c2VjKGEp OworCXVpbnQ2NF90IHQxID0gdGltZXJfdXNlYyhiKTsKKwl1aW50NjRfdCBtdWx0OworCXNpemVf dCBpID0gMDsKKwlzaXplX3QgaiwgbjsKKworCS8qIFdob2xlLiAqLworCW4gPSBtYWxsb2Nfc25w cmludGYoJmJ1ZltpXSwgYnVmbGVuLWksICIlIkZNVHU2NCwgdDAgLyB0MSk7CisJaSArPSBuOwor CWlmIChpID49IGJ1ZmxlbikgeworCQlyZXR1cm47CisJfQorCW11bHQgPSAxOworCWZvciAoaiA9 IDA7IGogPCBuOyBqKyspIHsKKwkJbXVsdCAqPSAxMDsKKwl9CisKKwkvKiBEZWNpbWFsLiAqLwor CW4gPSBtYWxsb2Nfc25wcmludGYoJmJ1ZltpXSwgYnVmbGVuLWksICIuIik7CisJaSArPSBuOwor CisJLyogRnJhY3Rpb24uICovCisJd2hpbGUgKGkgPCBidWZsZW4tMSkgeworCQl1aW50NjRfdCBy b3VuZCA9IChpKzEgPT0gYnVmbGVuLTEgJiYgKCh0MCAqIG11bHQgKiAxMCAvIHQxKSAlIDEwCisJ CSAgICA+PSA1KSkgPyAxIDogMDsKKwkJbiA9IG1hbGxvY19zbnByaW50ZigmYnVmW2ldLCBidWZs ZW4taSwKKwkJICAgICIlIkZNVHU2NCwgKHQwICogbXVsdCAvIHQxKSAlIDEwICsgcm91bmQpOwor CQlpICs9IG47CisJCW11bHQgKj0gMTA7CisJfQorfQoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNl LTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3Qvc3RyZXNzL2JhdGNoX2FsbG9jLmMgYi8z ODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3N0cmVzcy9iYXRjaF9h bGxvYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyN2UxY2IKLS0tIC9k ZXYvbnVsbAorKysgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0 L3N0cmVzcy9iYXRjaF9hbGxvYy5jCkBAIC0wLDAgKzEsMTk4IEBACisjaW5jbHVkZSAidGVzdC9q ZW1hbGxvY190ZXN0LmgiCisjaW5jbHVkZSAidGVzdC9iZW5jaC5oIgorCisjZGVmaW5lIE1JQkxF TiA4CitzdGF0aWMgc2l6ZV90IG1pYltNSUJMRU5dOworc3RhdGljIHNpemVfdCBtaWJsZW4gPSBN SUJMRU47CisKKyNkZWZpbmUgVElOWV9CQVRDSCAxMAorI2RlZmluZSBUSU5ZX0JBVENIX0lURVIg KDEwICogMTAwMCAqIDEwMDApCisjZGVmaW5lIEhVR0VfQkFUQ0ggKDEwMDAgKiAxMDAwKQorI2Rl ZmluZSBIVUdFX0JBVENIX0lURVIgMTAwCisjZGVmaW5lIExFTiAoMTAwICogMTAwMCAqIDEwMDAp CitzdGF0aWMgdm9pZCAqYmF0Y2hfcHRyc1tMRU5dOworc3RhdGljIHNpemVfdCBiYXRjaF9wdHJz X25leHQgPSAwOworc3RhdGljIHZvaWQgKml0ZW1fcHRyc1tMRU5dOworc3RhdGljIHNpemVfdCBp dGVtX3B0cnNfbmV4dCA9IDA7CisKKyNkZWZpbmUgU0laRSA3CisKK3R5cGVkZWYgc3RydWN0IGJh dGNoX2FsbG9jX3BhY2tldF9zIGJhdGNoX2FsbG9jX3BhY2tldF90Oworc3RydWN0IGJhdGNoX2Fs bG9jX3BhY2tldF9zIHsKKwl2b2lkICoqcHRyczsKKwlzaXplX3QgbnVtOworCXNpemVfdCBzaXpl OworCWludCBmbGFnczsKK307CisKK3N0YXRpYyB2b2lkCitiYXRjaF9hbGxvY193cmFwcGVyKHNp emVfdCBiYXRjaCkgeworCWJhdGNoX2FsbG9jX3BhY2tldF90IGJhdGNoX2FsbG9jX3BhY2tldCA9 CisJICAgIHtiYXRjaF9wdHJzICsgYmF0Y2hfcHRyc19uZXh0LCBiYXRjaCwgU0laRSwgMH07CisJ c2l6ZV90IGZpbGxlZDsKKwlzaXplX3QgbGVuID0gc2l6ZW9mKHNpemVfdCk7CisJYXNzZXJ0X2Rf ZXEobWFsbGN0bGJ5bWliKG1pYiwgbWlibGVuLCAmZmlsbGVkLCAmbGVuLAorCSAgICAmYmF0Y2hf YWxsb2NfcGFja2V0LCBzaXplb2YoYmF0Y2hfYWxsb2NfcGFja2V0KSksIDAsICIiKTsKKwlhc3Nl cnRfenVfZXEoZmlsbGVkLCBiYXRjaCwgIiIpOworfQorCitzdGF0aWMgdm9pZAoraXRlbV9hbGxv Y193cmFwcGVyKHNpemVfdCBiYXRjaCkgeworCWZvciAoc2l6ZV90IGkgPSBpdGVtX3B0cnNfbmV4 dCwgZW5kID0gaSArIGJhdGNoOyBpIDwgZW5kOyArK2kpIHsKKwkJaXRlbV9wdHJzW2ldID0gbWFs bG9jKFNJWkUpOworCX0KK30KKworc3RhdGljIHZvaWQKK3JlbGVhc2VfYW5kX2NsZWFyKHZvaWQg KipwdHJzLCBzaXplX3QgbGVuKSB7CisJZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW47ICsraSkg eworCQl2b2lkICpwID0gcHRyc1tpXTsKKwkJYXNzZXJ0X3B0cl9ub3RfbnVsbChwLCAiYWxsb2Nh dGlvbiBmYWlsZWQiKTsKKwkJc2RhbGxvY3gocCwgU0laRSwgMCk7CisJCXB0cnNbaV0gPSBOVUxM OworCX0KK30KKworc3RhdGljIHZvaWQKK2JhdGNoX2FsbG9jX3dpdGhvdXRfZnJlZShzaXplX3Qg YmF0Y2gpIHsKKwliYXRjaF9hbGxvY193cmFwcGVyKGJhdGNoKTsKKwliYXRjaF9wdHJzX25leHQg Kz0gYmF0Y2g7Cit9CisKK3N0YXRpYyB2b2lkCitpdGVtX2FsbG9jX3dpdGhvdXRfZnJlZShzaXpl X3QgYmF0Y2gpIHsKKwlpdGVtX2FsbG9jX3dyYXBwZXIoYmF0Y2gpOworCWl0ZW1fcHRyc19uZXh0 ICs9IGJhdGNoOworfQorCitzdGF0aWMgdm9pZAorYmF0Y2hfYWxsb2Nfd2l0aF9mcmVlKHNpemVf dCBiYXRjaCkgeworCWJhdGNoX2FsbG9jX3dyYXBwZXIoYmF0Y2gpOworCXJlbGVhc2VfYW5kX2Ns ZWFyKGJhdGNoX3B0cnMgKyBiYXRjaF9wdHJzX25leHQsIGJhdGNoKTsKKwliYXRjaF9wdHJzX25l eHQgKz0gYmF0Y2g7Cit9CisKK3N0YXRpYyB2b2lkCitpdGVtX2FsbG9jX3dpdGhfZnJlZShzaXpl X3QgYmF0Y2gpIHsKKwlpdGVtX2FsbG9jX3dyYXBwZXIoYmF0Y2gpOworCXJlbGVhc2VfYW5kX2Ns ZWFyKGl0ZW1fcHRycyArIGl0ZW1fcHRyc19uZXh0LCBiYXRjaCk7CisJaXRlbV9wdHJzX25leHQg Kz0gYmF0Y2g7Cit9CisKK3N0YXRpYyB2b2lkCitjb21wYXJlX3dpdGhvdXRfZnJlZShzaXplX3Qg YmF0Y2gsIHNpemVfdCBpdGVyLAorICAgIHZvaWQgKCpiYXRjaF9hbGxvY193aXRob3V0X2ZyZWVf ZnVuYykodm9pZCksCisgICAgdm9pZCAoKml0ZW1fYWxsb2Nfd2l0aG91dF9mcmVlX2Z1bmMpKHZv aWQpKSB7CisJYXNzZXJ0KGJhdGNoX3B0cnNfbmV4dCA9PSAwKTsKKwlhc3NlcnQoaXRlbV9wdHJz X25leHQgPT0gMCk7CisJYXNzZXJ0KGJhdGNoICogaXRlciA8PSBMRU4pOworCWZvciAoc2l6ZV90 IGkgPSAwOyBpIDwgaXRlcjsgKytpKSB7CisJCWJhdGNoX2FsbG9jX3dpdGhvdXRfZnJlZV9mdW5j KCk7CisJCWl0ZW1fYWxsb2Nfd2l0aG91dF9mcmVlX2Z1bmMoKTsKKwl9CisJcmVsZWFzZV9hbmRf Y2xlYXIoYmF0Y2hfcHRycywgYmF0Y2hfcHRyc19uZXh0KTsKKwliYXRjaF9wdHJzX25leHQgPSAw OworCXJlbGVhc2VfYW5kX2NsZWFyKGl0ZW1fcHRycywgaXRlbV9wdHJzX25leHQpOworCWl0ZW1f cHRyc19uZXh0ID0gMDsKKwljb21wYXJlX2Z1bmNzKDAsIGl0ZXIsCisJICAgICJiYXRjaCBhbGxv Y2F0aW9uIiwgYmF0Y2hfYWxsb2Nfd2l0aG91dF9mcmVlX2Z1bmMsCisJICAgICJpdGVtIGFsbG9j YXRpb24iLCBpdGVtX2FsbG9jX3dpdGhvdXRfZnJlZV9mdW5jKTsKKwlyZWxlYXNlX2FuZF9jbGVh cihiYXRjaF9wdHJzLCBiYXRjaF9wdHJzX25leHQpOworCWJhdGNoX3B0cnNfbmV4dCA9IDA7CisJ cmVsZWFzZV9hbmRfY2xlYXIoaXRlbV9wdHJzLCBpdGVtX3B0cnNfbmV4dCk7CisJaXRlbV9wdHJz X25leHQgPSAwOworfQorCitzdGF0aWMgdm9pZAorY29tcGFyZV93aXRoX2ZyZWUoc2l6ZV90IGJh dGNoLCBzaXplX3QgaXRlciwKKyAgICB2b2lkICgqYmF0Y2hfYWxsb2Nfd2l0aF9mcmVlX2Z1bmMp KHZvaWQpLAorICAgIHZvaWQgKCppdGVtX2FsbG9jX3dpdGhfZnJlZV9mdW5jKSh2b2lkKSkgewor CWFzc2VydChiYXRjaF9wdHJzX25leHQgPT0gMCk7CisJYXNzZXJ0KGl0ZW1fcHRyc19uZXh0ID09 IDApOworCWFzc2VydChiYXRjaCAqIGl0ZXIgPD0gTEVOKTsKKwlmb3IgKHNpemVfdCBpID0gMDsg aSA8IGl0ZXI7ICsraSkgeworCQliYXRjaF9hbGxvY193aXRoX2ZyZWVfZnVuYygpOworCQlpdGVt X2FsbG9jX3dpdGhfZnJlZV9mdW5jKCk7CisJfQorCWJhdGNoX3B0cnNfbmV4dCA9IDA7CisJaXRl bV9wdHJzX25leHQgPSAwOworCWNvbXBhcmVfZnVuY3MoMCwgaXRlciwKKwkgICAgImJhdGNoIGFs bG9jYXRpb24iLCBiYXRjaF9hbGxvY193aXRoX2ZyZWVfZnVuYywKKwkgICAgIml0ZW0gYWxsb2Nh dGlvbiIsIGl0ZW1fYWxsb2Nfd2l0aF9mcmVlX2Z1bmMpOworCWJhdGNoX3B0cnNfbmV4dCA9IDA7 CisJaXRlbV9wdHJzX25leHQgPSAwOworfQorCitzdGF0aWMgdm9pZAorYmF0Y2hfYWxsb2Nfd2l0 aG91dF9mcmVlX3RpbnkoKSB7CisJYmF0Y2hfYWxsb2Nfd2l0aG91dF9mcmVlKFRJTllfQkFUQ0gp OworfQorCitzdGF0aWMgdm9pZAoraXRlbV9hbGxvY193aXRob3V0X2ZyZWVfdGlueSgpIHsKKwlp dGVtX2FsbG9jX3dpdGhvdXRfZnJlZShUSU5ZX0JBVENIKTsKK30KKworVEVTVF9CRUdJTih0ZXN0 X3RpbnlfYmF0Y2hfd2l0aG91dF9mcmVlKSB7CisJY29tcGFyZV93aXRob3V0X2ZyZWUoVElOWV9C QVRDSCwgVElOWV9CQVRDSF9JVEVSLAorCSAgICBiYXRjaF9hbGxvY193aXRob3V0X2ZyZWVfdGlu eSwgaXRlbV9hbGxvY193aXRob3V0X2ZyZWVfdGlueSk7Cit9CitURVNUX0VORAorCitzdGF0aWMg dm9pZAorYmF0Y2hfYWxsb2Nfd2l0aF9mcmVlX3RpbnkoKSB7CisJYmF0Y2hfYWxsb2Nfd2l0aF9m cmVlKFRJTllfQkFUQ0gpOworfQorCitzdGF0aWMgdm9pZAoraXRlbV9hbGxvY193aXRoX2ZyZWVf dGlueSgpIHsKKwlpdGVtX2FsbG9jX3dpdGhfZnJlZShUSU5ZX0JBVENIKTsKK30KKworVEVTVF9C RUdJTih0ZXN0X3RpbnlfYmF0Y2hfd2l0aF9mcmVlKSB7CisJY29tcGFyZV93aXRoX2ZyZWUoVElO WV9CQVRDSCwgVElOWV9CQVRDSF9JVEVSLAorCSAgICBiYXRjaF9hbGxvY193aXRoX2ZyZWVfdGlu eSwgaXRlbV9hbGxvY193aXRoX2ZyZWVfdGlueSk7Cit9CitURVNUX0VORAorCitzdGF0aWMgdm9p ZAorYmF0Y2hfYWxsb2Nfd2l0aG91dF9mcmVlX2h1Z2UoKSB7CisJYmF0Y2hfYWxsb2Nfd2l0aG91 dF9mcmVlKEhVR0VfQkFUQ0gpOworfQorCitzdGF0aWMgdm9pZAoraXRlbV9hbGxvY193aXRob3V0 X2ZyZWVfaHVnZSgpIHsKKwlpdGVtX2FsbG9jX3dpdGhvdXRfZnJlZShIVUdFX0JBVENIKTsKK30K KworVEVTVF9CRUdJTih0ZXN0X2h1Z2VfYmF0Y2hfd2l0aG91dF9mcmVlKSB7CisJY29tcGFyZV93 aXRob3V0X2ZyZWUoSFVHRV9CQVRDSCwgSFVHRV9CQVRDSF9JVEVSLAorCSAgICBiYXRjaF9hbGxv Y193aXRob3V0X2ZyZWVfaHVnZSwgaXRlbV9hbGxvY193aXRob3V0X2ZyZWVfaHVnZSk7Cit9CitU RVNUX0VORAorCitzdGF0aWMgdm9pZAorYmF0Y2hfYWxsb2Nfd2l0aF9mcmVlX2h1Z2UoKSB7CisJ YmF0Y2hfYWxsb2Nfd2l0aF9mcmVlKEhVR0VfQkFUQ0gpOworfQorCitzdGF0aWMgdm9pZAoraXRl bV9hbGxvY193aXRoX2ZyZWVfaHVnZSgpIHsKKwlpdGVtX2FsbG9jX3dpdGhfZnJlZShIVUdFX0JB VENIKTsKK30KKworVEVTVF9CRUdJTih0ZXN0X2h1Z2VfYmF0Y2hfd2l0aF9mcmVlKSB7CisJY29t cGFyZV93aXRoX2ZyZWUoSFVHRV9CQVRDSCwgSFVHRV9CQVRDSF9JVEVSLAorCSAgICBiYXRjaF9h bGxvY193aXRoX2ZyZWVfaHVnZSwgaXRlbV9hbGxvY193aXRoX2ZyZWVfaHVnZSk7Cit9CitURVNU X0VORAorCitpbnQgbWFpbih2b2lkKSB7CisJYXNzZXJ0X2RfZXEobWFsbGN0bG5hbWV0b21pYigi ZXhwZXJpbWVudGFsLmJhdGNoX2FsbG9jIiwgbWliLCAmbWlibGVuKSwKKwkgICAgMCwgIiIpOwor CXJldHVybiB0ZXN0X25vX3JlZW50cmFuY3koCisJICAgIHRlc3RfdGlueV9iYXRjaF93aXRob3V0 X2ZyZWUsCisJICAgIHRlc3RfdGlueV9iYXRjaF93aXRoX2ZyZWUsCisJICAgIHRlc3RfaHVnZV9i YXRjaF93aXRob3V0X2ZyZWUsCisJICAgIHRlc3RfaHVnZV9iYXRjaF93aXRoX2ZyZWUpOworfQoK ZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3Qv c3RyZXNzL2ZpbGxfZmx1c2guYyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUu My4wL3Rlc3Qvc3RyZXNzL2ZpbGxfZmx1c2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwLi5hMmRiMDQ0Ci0tLSAvZGV2L251bGwKKysrIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVp bGQvamVtYWxsb2MtNS4zLjAvdGVzdC9zdHJlc3MvZmlsbF9mbHVzaC5jCkBAIC0wLDAgKzEsNzYg QEAKKyNpbmNsdWRlICJ0ZXN0L2plbWFsbG9jX3Rlc3QuaCIKKyNpbmNsdWRlICJ0ZXN0L2JlbmNo LmgiCisKKyNkZWZpbmUgU01BTExfQUxMT0NfU0laRSAxMjgKKyNkZWZpbmUgTEFSR0VfQUxMT0Nf U0laRSBTQ19MQVJHRV9NSU5DTEFTUworI2RlZmluZSBOQUxMT0NTIDEwMDAKKworLyoKKyAqIFdl IG1ha2UgdGhpcyB2b2xhdGlsZSBzbyB0aGUgMS1hdC1hLXRpbWUgdmFyaWFudHMgY2FuJ3QgbGVh dmUgdGhlIGFsbG9jYXRpb24KKyAqIGluIGEgcmVnaXN0ZXIsIGp1c3QgdG8gdHJ5IHRvIGdldCB0 aGUgY2FjaGUgYmVoYXZpb3IgY2xvc2VyLgorICovCit2b2lkICp2b2xhdGlsZSBhbGxvY3NbTkFM TE9DU107CisKK3N0YXRpYyB2b2lkCithcnJheV9hbGxvY19kYWxsb2Nfc21hbGwodm9pZCkgewor CWZvciAoaW50IGkgPSAwOyBpIDwgTkFMTE9DUzsgaSsrKSB7CisJCXZvaWQgKnAgPSBtYWxsb2N4 KFNNQUxMX0FMTE9DX1NJWkUsIDApOworCQlhc3NlcnRfcHRyX25vdF9udWxsKHAsICJtYWxsb2N4 IHNob3VsZG4ndCBmYWlsIik7CisJCWFsbG9jc1tpXSA9IHA7CisJfQorCWZvciAoaW50IGkgPSAw OyBpIDwgTkFMTE9DUzsgaSsrKSB7CisJCXNkYWxsb2N4KGFsbG9jc1tpXSwgU01BTExfQUxMT0Nf U0laRSwgMCk7CisJfQorfQorCitzdGF0aWMgdm9pZAoraXRlbV9hbGxvY19kYWxsb2Nfc21hbGwo dm9pZCkgeworCWZvciAoaW50IGkgPSAwOyBpIDwgTkFMTE9DUzsgaSsrKSB7CisJCXZvaWQgKnAg PSBtYWxsb2N4KFNNQUxMX0FMTE9DX1NJWkUsIDApOworCQlhc3NlcnRfcHRyX25vdF9udWxsKHAs ICJtYWxsb2N4IHNob3VsZG4ndCBmYWlsIik7CisJCWFsbG9jc1tpXSA9IHA7CisJCXNkYWxsb2N4 KGFsbG9jc1tpXSwgU01BTExfQUxMT0NfU0laRSwgMCk7CisJfQorfQorCitURVNUX0JFR0lOKHRl c3RfYXJyYXlfdnNfaXRlbV9zbWFsbCkgeworCWNvbXBhcmVfZnVuY3MoMSAqIDEwMDAsIDEwICog MTAwMCwKKwkgICAgImFycmF5IG9mIHNtYWxsIGFsbG9jYXRpb25zIiwgYXJyYXlfYWxsb2NfZGFs bG9jX3NtYWxsLAorCSAgICAic21hbGwgaXRlbSBhbGxvY2F0aW9uIiwgaXRlbV9hbGxvY19kYWxs b2Nfc21hbGwpOworfQorVEVTVF9FTkQKKworc3RhdGljIHZvaWQKK2FycmF5X2FsbG9jX2RhbGxv Y19sYXJnZSh2b2lkKSB7CisJZm9yIChpbnQgaSA9IDA7IGkgPCBOQUxMT0NTOyBpKyspIHsKKwkJ dm9pZCAqcCA9IG1hbGxvY3goTEFSR0VfQUxMT0NfU0laRSwgMCk7CisJCWFzc2VydF9wdHJfbm90 X251bGwocCwgIm1hbGxvY3ggc2hvdWxkbid0IGZhaWwiKTsKKwkJYWxsb2NzW2ldID0gcDsKKwl9 CisJZm9yIChpbnQgaSA9IDA7IGkgPCBOQUxMT0NTOyBpKyspIHsKKwkJc2RhbGxvY3goYWxsb2Nz W2ldLCBMQVJHRV9BTExPQ19TSVpFLCAwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitpdGVtX2Fs bG9jX2RhbGxvY19sYXJnZSh2b2lkKSB7CisJZm9yIChpbnQgaSA9IDA7IGkgPCBOQUxMT0NTOyBp KyspIHsKKwkJdm9pZCAqcCA9IG1hbGxvY3goTEFSR0VfQUxMT0NfU0laRSwgMCk7CisJCWFzc2Vy dF9wdHJfbm90X251bGwocCwgIm1hbGxvY3ggc2hvdWxkbid0IGZhaWwiKTsKKwkJYWxsb2NzW2ld ID0gcDsKKwkJc2RhbGxvY3goYWxsb2NzW2ldLCBMQVJHRV9BTExPQ19TSVpFLCAwKTsKKwl9Cit9 CisKK1RFU1RfQkVHSU4odGVzdF9hcnJheV92c19pdGVtX2xhcmdlKSB7CisJY29tcGFyZV9mdW5j cygxMDAsIDEwMDAsCisJICAgICJhcnJheSBvZiBsYXJnZSBhbGxvY2F0aW9ucyIsIGFycmF5X2Fs bG9jX2RhbGxvY19sYXJnZSwKKwkgICAgImxhcmdlIGl0ZW0gYWxsb2NhdGlvbiIsIGl0ZW1fYWxs b2NfZGFsbG9jX2xhcmdlKTsKK30KK1RFU1RfRU5ECisKK2ludCBtYWluKHZvaWQpIHsKKwlyZXR1 cm4gdGVzdF9ub19yZWVudHJhbmN5KAorCSAgICB0ZXN0X2FycmF5X3ZzX2l0ZW1fc21hbGwsCisJ ICAgIHRlc3RfYXJyYXlfdnNfaXRlbV9sYXJnZSk7Cit9CgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJh c2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC9zdHJlc3MvaG9va2JlbmNoLmMgYi8z ODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3N0cmVzcy9ob29rYmVu Y2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45N2U5MGIwCi0tLSAvZGV2 L251bGwKKysrIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC9z dHJlc3MvaG9va2JlbmNoLmMKQEAgLTAsMCArMSw3MyBAQAorI2luY2x1ZGUgInRlc3QvamVtYWxs b2NfdGVzdC5oIgorCitzdGF0aWMgdm9pZAorbm9vcF9hbGxvY19ob29rKHZvaWQgKmV4dHJhLCBo b29rX2FsbG9jX3QgdHlwZSwgdm9pZCAqcmVzdWx0LAorICAgIHVpbnRwdHJfdCByZXN1bHRfcmF3 LCB1aW50cHRyX3QgYXJnc19yYXdbM10pIHsKK30KKworc3RhdGljIHZvaWQKK25vb3BfZGFsbG9j X2hvb2sodm9pZCAqZXh0cmEsIGhvb2tfZGFsbG9jX3QgdHlwZSwgdm9pZCAqYWRkcmVzcywKKyAg ICB1aW50cHRyX3QgYXJnc19yYXdbM10pIHsKK30KKworc3RhdGljIHZvaWQKK25vb3BfZXhwYW5k X2hvb2sodm9pZCAqZXh0cmEsIGhvb2tfZXhwYW5kX3QgdHlwZSwgdm9pZCAqYWRkcmVzcywKKyAg ICBzaXplX3Qgb2xkX3VzaXplLCBzaXplX3QgbmV3X3VzaXplLCB1aW50cHRyX3QgcmVzdWx0X3Jh dywKKyAgICB1aW50cHRyX3QgYXJnc19yYXdbNF0pIHsKK30KKworc3RhdGljIHZvaWQKK21hbGxv Y19mcmVlX2xvb3AoaW50IGl0ZXJzKSB7CisJZm9yIChpbnQgaSA9IDA7IGkgPCBpdGVyczsgaSsr KSB7CisJCXZvaWQgKnAgPSBtYWxsb2N4KDEsIDApOworCQlmcmVlKHApOworCX0KK30KKworc3Rh dGljIHZvaWQKK3Rlc3RfaG9va2VkKGludCBpdGVycykgeworCWhvb2tzX3QgaG9va3MgPSB7Jm5v b3BfYWxsb2NfaG9vaywgJm5vb3BfZGFsbG9jX2hvb2ssICZub29wX2V4cGFuZF9ob29rLAorCQlO VUxMfTsKKworCWludCBlcnI7CisJdm9pZCAqaGFuZGxlc1tIT09LX01BWF07CisJc2l6ZV90IHN6 ID0gc2l6ZW9mKGhhbmRsZXNbMF0pOworCisJZm9yIChpbnQgaSA9IDA7IGkgPCBIT09LX01BWDsg aSsrKSB7CisJCWVyciA9IG1hbGxjdGwoImV4cGVyaW1lbnRhbC5ob29rcy5pbnN0YWxsIiwgJmhh bmRsZXNbaV0sCisJCSAgICAmc3osICZob29rcywgc2l6ZW9mKGhvb2tzKSk7CisJCWFzc2VydChl cnIgPT0gMCk7CisKKwkJdGltZWRlbHRhX3QgdGltZXI7CisJCXRpbWVyX3N0YXJ0KCZ0aW1lcik7 CisJCW1hbGxvY19mcmVlX2xvb3AoaXRlcnMpOworCQl0aW1lcl9zdG9wKCZ0aW1lcik7CisJCW1h bGxvY19wcmludGYoIldpdGggJWQgaG9vayVzOiAlIkZNVHU2NCJ1c1xuIiwgaSArIDEsCisJCSAg ICBpICsgMSA9PSAxID8gIiIgOiAicyIsIHRpbWVyX3VzZWMoJnRpbWVyKSk7CisJfQorCWZvciAo aW50IGkgPSAwOyBpIDwgSE9PS19NQVg7IGkrKykgeworCQllcnIgPSBtYWxsY3RsKCJleHBlcmlt ZW50YWwuaG9va3MucmVtb3ZlIiwgTlVMTCwgTlVMTCwKKwkJICAgICZoYW5kbGVzW2ldLCBzaXpl b2YoaGFuZGxlc1tpXSkpOworCQlhc3NlcnQoZXJyID09IDApOworCX0KK30KKworc3RhdGljIHZv aWQKK3Rlc3RfdW5ob29rZWQoaW50IGl0ZXJzKSB7CisJdGltZWRlbHRhX3QgdGltZXI7CisJdGlt ZXJfc3RhcnQoJnRpbWVyKTsKKwltYWxsb2NfZnJlZV9sb29wKGl0ZXJzKTsKKwl0aW1lcl9zdG9w KCZ0aW1lcik7CisKKwltYWxsb2NfcHJpbnRmKCJXaXRob3V0IGhvb2tzOiAlIkZNVHU2NCJ1c1xu IiwgdGltZXJfdXNlYygmdGltZXIpKTsKK30KKworaW50CittYWluKHZvaWQpIHsKKwkvKiBJbml0 aWFsaXplICovCisJZnJlZShtYWxsb2N4KDEsIDApKTsKKwlpbnQgaXRlcnMgPSAxMCAqIDEwMDAg KiAxMDAwOworCW1hbGxvY19wcmludGYoIkJlbmNobWFya2luZyBob29rcyB3aXRoICVkIGl0ZXJh dGlvbnM6XG4iLCBpdGVycyk7CisJdGVzdF9ob29rZWQoaXRlcnMpOworCXRlc3RfdW5ob29rZWQo aXRlcnMpOworfQoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9j LTUuMy4wL3Rlc3Qvc3RyZXNzL2xhcmdlX21pY3JvYmVuY2guYyBiLzM4OS1kcy1iYXNlLTMuMy4w LWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3Qvc3RyZXNzL2xhcmdlX21pY3JvYmVuY2guYwpuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjZiMzNhCi0tLSAvZGV2L251bGwKKysr IGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC9zdHJlc3MvbGFy Z2VfbWljcm9iZW5jaC5jCkBAIC0wLDAgKzEsMzMgQEAKKyNpbmNsdWRlICJ0ZXN0L2plbWFsbG9j X3Rlc3QuaCIKKyNpbmNsdWRlICJ0ZXN0L2JlbmNoLmgiCisKK3N0YXRpYyB2b2lkCitsYXJnZV9t YWxsb2N4X2ZyZWUodm9pZCkgeworCS8qCisJICogV2UgZ28gYSBiaXQgbGFyZ2VyIHRoYW4gdGhl IGxhcmdlIG1pbmNsYXNzIG9uIGl0cyBvd24gdG8gYmV0dGVyCisJICogZXhwb3NlIGNvc3RzIGZy b20gdGhpbmdzIGxpa2UgemVyb2luZy4KKwkgKi8KKwl2b2lkICpwID0gbWFsbG9jeChTQ19MQVJH RV9NSU5DTEFTUywgTUFMTE9DWF9UQ0FDSEVfTk9ORSk7CisJYXNzZXJ0X3B0cl9ub3RfbnVsbChw LCAibWFsbG9jeCBzaG91bGRuJ3QgZmFpbCIpOworCWZyZWUocCk7Cit9CisKK3N0YXRpYyB2b2lk CitzbWFsbF9tYWxsb2N4X2ZyZWUodm9pZCkgeworCXZvaWQgKnAgPSBtYWxsb2N4KDE2LCAwKTsK Kwlhc3NlcnRfcHRyX25vdF9udWxsKHAsICJtYWxsb2N4IHNob3VsZG4ndCBmYWlsIik7CisJZnJl ZShwKTsKK30KKworVEVTVF9CRUdJTih0ZXN0X2xhcmdlX3ZzX3NtYWxsKSB7CisJY29tcGFyZV9m dW5jcygxMDAqMTAwMCwgMSoxMDAwKjEwMDAsICJsYXJnZSBtYWxsb2N4IiwKKwkgICAgbGFyZ2Vf bWFsbG9jeF9mcmVlLCAic21hbGwgbWFsbG9jeCIsIHNtYWxsX21hbGxvY3hfZnJlZSk7Cit9CitU RVNUX0VORAorCitpbnQKK21haW4odm9pZCkgeworCXJldHVybiB0ZXN0X25vX3JlZW50cmFuY3ko CisJICAgIHRlc3RfbGFyZ2VfdnNfc21hbGwpOworfQorCgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJh c2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC9zdHJlc3MvbWFsbGN0bC5jIGIvMzg5 LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC9zdHJlc3MvbWFsbGN0bC5j Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyOWIzMTEKLS0tIC9kZXYvbnVs bAorKysgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3N0cmVz cy9tYWxsY3RsLmMKQEAgLTAsMCArMSw3NCBAQAorI2luY2x1ZGUgInRlc3QvamVtYWxsb2NfdGVz dC5oIgorI2luY2x1ZGUgInRlc3QvYmVuY2guaCIKKworc3RhdGljIHZvaWQKK21hbGxjdGxfc2hv cnQodm9pZCkgeworCWNvbnN0IGNoYXIgKnZlcnNpb247CisJc2l6ZV90IHN6ID0gc2l6ZW9mKHZl cnNpb24pOworCWludCBlcnIgPSBtYWxsY3RsKCJ2ZXJzaW9uIiwgJnZlcnNpb24sICZzeiwgTlVM TCwgMCk7CisJYXNzZXJ0X2RfZXEoZXJyLCAwLCAibWFsbGN0bCBmYWlsdXJlIik7Cit9CisKK3Np emVfdCBtaWJfc2hvcnRbMV07CisKK3N0YXRpYyB2b2lkCittYWxsY3RsYnltaWJfc2hvcnQodm9p ZCkgeworCXNpemVfdCBtaWJsZW4gPSBzaXplb2YobWliX3Nob3J0KS9zaXplb2YobWliX3Nob3J0 WzBdKTsKKwljb25zdCBjaGFyICp2ZXJzaW9uOworCXNpemVfdCBzeiA9IHNpemVvZih2ZXJzaW9u KTsKKwlpbnQgZXJyID0gbWFsbGN0bGJ5bWliKG1pYl9zaG9ydCwgbWlibGVuLCAmdmVyc2lvbiwg JnN6LCBOVUxMLCAwKTsKKwlhc3NlcnRfZF9lcShlcnIsIDAsICJtYWxsY3RsYnltaWIgZmFpbHVy ZSIpOworfQorCitURVNUX0JFR0lOKHRlc3RfbWFsbGN0bF92c19tYWxsY3RsYnltaWJfc2hvcnQp IHsKKwlzaXplX3QgbWlibGVuID0gc2l6ZW9mKG1pYl9zaG9ydCkvc2l6ZW9mKG1pYl9zaG9ydFsw XSk7CisKKwlpbnQgZXJyID0gbWFsbGN0bG5hbWV0b21pYigidmVyc2lvbiIsIG1pYl9zaG9ydCwg Jm1pYmxlbik7CisJYXNzZXJ0X2RfZXEoZXJyLCAwLCAibWFsbGN0bG5hbWV0b21pYiBmYWlsdXJl Iik7CisJY29tcGFyZV9mdW5jcygxMCoxMDAwKjEwMDAsIDEwKjEwMDAqMTAwMCwgIm1hbGxjdGxf c2hvcnQiLAorCSAgICBtYWxsY3RsX3Nob3J0LCAibWFsbGN0bGJ5bWliX3Nob3J0IiwgbWFsbGN0 bGJ5bWliX3Nob3J0KTsKK30KK1RFU1RfRU5ECisKK3N0YXRpYyB2b2lkCittYWxsY3RsX2xvbmco dm9pZCkgeworCXVpbnQ2NF90IG5tYWxsb2M7CisJc2l6ZV90IHN6ID0gc2l6ZW9mKG5tYWxsb2Mp OworCWludCBlcnIgPSBtYWxsY3RsKCJzdGF0cy5hcmVuYXMuMC5iaW5zLjAubm1hbGxvYyIsICZu bWFsbG9jLCAmc3osIE5VTEwsCisJICAgIDApOworCWFzc2VydF9kX2VxKGVyciwgMCwgIm1hbGxj dGwgZmFpbHVyZSIpOworfQorCitzaXplX3QgbWliX2xvbmdbNl07CisKK3N0YXRpYyB2b2lkCitt YWxsY3RsYnltaWJfbG9uZyh2b2lkKSB7CisJc2l6ZV90IG1pYmxlbiA9IHNpemVvZihtaWJfbG9u Zykvc2l6ZW9mKG1pYl9sb25nWzBdKTsKKwl1aW50NjRfdCBubWFsbG9jOworCXNpemVfdCBzeiA9 IHNpemVvZihubWFsbG9jKTsKKwlpbnQgZXJyID0gbWFsbGN0bGJ5bWliKG1pYl9sb25nLCBtaWJs ZW4sICZubWFsbG9jLCAmc3osIE5VTEwsIDApOworCWFzc2VydF9kX2VxKGVyciwgMCwgIm1hbGxj dGxieW1pYiBmYWlsdXJlIik7Cit9CisKK1RFU1RfQkVHSU4odGVzdF9tYWxsY3RsX3ZzX21hbGxj dGxieW1pYl9sb25nKSB7CisJLyoKKwkgKiBXZSB3YW50IHRvIHVzZSB0aGUgbG9uZ2VzdCBtYWxs Y3RsIHdlIGhhdmU7IHRoYXQgbmVlZHMgc3RhdHMgc3VwcG9ydAorCSAqIHRvIGJlIGFsbG93ZWQu CisJICovCisJdGVzdF9za2lwX2lmKCFjb25maWdfc3RhdHMpOworCisJc2l6ZV90IG1pYmxlbiA9 IHNpemVvZihtaWJfbG9uZykvc2l6ZW9mKG1pYl9sb25nWzBdKTsKKwlpbnQgZXJyID0gbWFsbGN0 bG5hbWV0b21pYigic3RhdHMuYXJlbmFzLjAuYmlucy4wLm5tYWxsb2MiLCBtaWJfbG9uZywKKwkg ICAgJm1pYmxlbik7CisJYXNzZXJ0X2RfZXEoZXJyLCAwLCAibWFsbGN0bG5hbWV0b21pYiBmYWls dXJlIik7CisJY29tcGFyZV9mdW5jcygxMCoxMDAwKjEwMDAsIDEwKjEwMDAqMTAwMCwgIm1hbGxj dGxfbG9uZyIsCisJICAgIG1hbGxjdGxfbG9uZywgIm1hbGxjdGxieW1pYl9sb25nIiwgbWFsbGN0 bGJ5bWliX2xvbmcpOworfQorVEVTVF9FTkQKKworaW50CittYWluKHZvaWQpIHsKKwlyZXR1cm4g dGVzdF9ub19yZWVudHJhbmN5KAorCSAgICB0ZXN0X21hbGxjdGxfdnNfbWFsbGN0bGJ5bWliX3No b3J0LAorCSAgICB0ZXN0X21hbGxjdGxfdnNfbWFsbGN0bGJ5bWliX2xvbmcpOworfQoKZGlmZiAt LWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3Qvc3RyZXNz L21pY3JvYmVuY2guYyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rl c3Qvc3RyZXNzL21pY3JvYmVuY2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw Li4wNjJlMzJmCi0tLSAvZGV2L251bGwKKysrIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVt YWxsb2MtNS4zLjAvdGVzdC9zdHJlc3MvbWljcm9iZW5jaC5jCkBAIC0wLDAgKzEsMTI2IEBACisj aW5jbHVkZSAidGVzdC9qZW1hbGxvY190ZXN0LmgiCisjaW5jbHVkZSAidGVzdC9iZW5jaC5oIgor CitzdGF0aWMgdm9pZAorbWFsbG9jX2ZyZWUodm9pZCkgeworCS8qIFRoZSBjb21waWxlciBjYW4g b3B0aW1pemUgYXdheSBmcmVlKG1hbGxvYygxKSkhICovCisJdm9pZCAqcCA9IG1hbGxvYygxKTsK KwlpZiAocCA9PSBOVUxMKSB7CisJCXRlc3RfZmFpbCgiVW5leHBlY3RlZCBtYWxsb2MoKSBmYWls dXJlIik7CisJCXJldHVybjsKKwl9CisJZnJlZShwKTsKK30KKworc3RhdGljIHZvaWQKK21hbGxv Y3hfZnJlZSh2b2lkKSB7CisJdm9pZCAqcCA9IG1hbGxvY3goMSwgMCk7CisJaWYgKHAgPT0gTlVM TCkgeworCQl0ZXN0X2ZhaWwoIlVuZXhwZWN0ZWQgbWFsbG9jeCgpIGZhaWx1cmUiKTsKKwkJcmV0 dXJuOworCX0KKwlmcmVlKHApOworfQorCitURVNUX0JFR0lOKHRlc3RfbWFsbG9jX3ZzX21hbGxv Y3gpIHsKKwljb21wYXJlX2Z1bmNzKDEwKjEwMDAqMTAwMCwgMTAwKjEwMDAqMTAwMCwgIm1hbGxv YyIsCisJICAgIG1hbGxvY19mcmVlLCAibWFsbG9jeCIsIG1hbGxvY3hfZnJlZSk7Cit9CitURVNU X0VORAorCitzdGF0aWMgdm9pZAorbWFsbG9jX2RhbGxvY3godm9pZCkgeworCXZvaWQgKnAgPSBt YWxsb2MoMSk7CisJaWYgKHAgPT0gTlVMTCkgeworCQl0ZXN0X2ZhaWwoIlVuZXhwZWN0ZWQgbWFs bG9jKCkgZmFpbHVyZSIpOworCQlyZXR1cm47CisJfQorCWRhbGxvY3gocCwgMCk7Cit9CisKK3N0 YXRpYyB2b2lkCittYWxsb2Nfc2RhbGxvY3godm9pZCkgeworCXZvaWQgKnAgPSBtYWxsb2MoMSk7 CisJaWYgKHAgPT0gTlVMTCkgeworCQl0ZXN0X2ZhaWwoIlVuZXhwZWN0ZWQgbWFsbG9jKCkgZmFp bHVyZSIpOworCQlyZXR1cm47CisJfQorCXNkYWxsb2N4KHAsIDEsIDApOworfQorCitURVNUX0JF R0lOKHRlc3RfZnJlZV92c19kYWxsb2N4KSB7CisJY29tcGFyZV9mdW5jcygxMCoxMDAwKjEwMDAs IDEwMCoxMDAwKjEwMDAsICJmcmVlIiwgbWFsbG9jX2ZyZWUsCisJICAgICJkYWxsb2N4IiwgbWFs bG9jX2RhbGxvY3gpOworfQorVEVTVF9FTkQKKworVEVTVF9CRUdJTih0ZXN0X2RhbGxvY3hfdnNf c2RhbGxvY3gpIHsKKwljb21wYXJlX2Z1bmNzKDEwKjEwMDAqMTAwMCwgMTAwKjEwMDAqMTAwMCwg ImRhbGxvY3giLCBtYWxsb2NfZGFsbG9jeCwKKwkgICAgInNkYWxsb2N4IiwgbWFsbG9jX3NkYWxs b2N4KTsKK30KK1RFU1RfRU5ECisKK3N0YXRpYyB2b2lkCittYWxsb2NfbXVzX2ZyZWUodm9pZCkg eworCXZvaWQgKnA7CisKKwlwID0gbWFsbG9jKDEpOworCWlmIChwID09IE5VTEwpIHsKKwkJdGVz dF9mYWlsKCJVbmV4cGVjdGVkIG1hbGxvYygpIGZhaWx1cmUiKTsKKwkJcmV0dXJuOworCX0KKwlU RVNUX01BTExPQ19TSVpFKHApOworCWZyZWUocCk7Cit9CisKK3N0YXRpYyB2b2lkCittYWxsb2Nf c2FsbG9jeF9mcmVlKHZvaWQpIHsKKwl2b2lkICpwOworCisJcCA9IG1hbGxvYygxKTsKKwlpZiAo cCA9PSBOVUxMKSB7CisJCXRlc3RfZmFpbCgiVW5leHBlY3RlZCBtYWxsb2MoKSBmYWlsdXJlIik7 CisJCXJldHVybjsKKwl9CisJaWYgKHNhbGxvY3gocCwgMCkgPCAxKSB7CisJCXRlc3RfZmFpbCgi VW5leHBlY3RlZCBzYWxsb2N4KCkgZmFpbHVyZSIpOworCX0KKwlmcmVlKHApOworfQorCitURVNU X0JFR0lOKHRlc3RfbXVzX3ZzX3NhbGxvY3gpIHsKKwljb21wYXJlX2Z1bmNzKDEwKjEwMDAqMTAw MCwgMTAwKjEwMDAqMTAwMCwgIm1hbGxvY191c2FibGVfc2l6ZSIsCisJICAgIG1hbGxvY19tdXNf ZnJlZSwgInNhbGxvY3giLCBtYWxsb2Nfc2FsbG9jeF9mcmVlKTsKK30KK1RFU1RfRU5ECisKK3N0 YXRpYyB2b2lkCittYWxsb2NfbmFsbG9jeF9mcmVlKHZvaWQpIHsKKwl2b2lkICpwOworCisJcCA9 IG1hbGxvYygxKTsKKwlpZiAocCA9PSBOVUxMKSB7CisJCXRlc3RfZmFpbCgiVW5leHBlY3RlZCBt YWxsb2MoKSBmYWlsdXJlIik7CisJCXJldHVybjsKKwl9CisJaWYgKG5hbGxvY3goMSwgMCkgPCAx KSB7CisJCXRlc3RfZmFpbCgiVW5leHBlY3RlZCBuYWxsb2N4KCkgZmFpbHVyZSIpOworCX0KKwlm cmVlKHApOworfQorCitURVNUX0JFR0lOKHRlc3Rfc2FsbG9jeF92c19uYWxsb2N4KSB7CisJY29t cGFyZV9mdW5jcygxMCoxMDAwKjEwMDAsIDEwMCoxMDAwKjEwMDAsICJzYWxsb2N4IiwKKwkgICAg bWFsbG9jX3NhbGxvY3hfZnJlZSwgIm5hbGxvY3giLCBtYWxsb2NfbmFsbG9jeF9mcmVlKTsKK30K K1RFU1RfRU5ECisKK2ludAorbWFpbih2b2lkKSB7CisJcmV0dXJuIHRlc3Rfbm9fcmVlbnRyYW5j eSgKKwkgICAgdGVzdF9tYWxsb2NfdnNfbWFsbG9jeCwKKwkgICAgdGVzdF9mcmVlX3ZzX2RhbGxv Y3gsCisJICAgIHRlc3RfZGFsbG9jeF92c19zZGFsbG9jeCwKKwkgICAgdGVzdF9tdXNfdnNfc2Fs bG9jeCwKKwkgICAgdGVzdF9zYWxsb2N4X3ZzX25hbGxvY3gpOworfQoKZGlmZiAtLWdpdCBhLzM4 OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdGVzdC5zaC5pbiBiLzM4 OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdGVzdC5zaC5pbgpuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTMwMmZmCi0tLSAvZGV2L251bGwKKysr IGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC90ZXN0LnNoLmlu CkBAIC0wLDAgKzEsODAgQEAKKyMhL2Jpbi9zaAorCitjYXNlIEBhYmlAIGluCisgIG1hY2hvKQor ICAgIGV4cG9ydCBEWUxEX0ZBTExCQUNLX0xJQlJBUllfUEFUSD0iQG9ianJvb3RAbGliIgorICAg IDs7CisgIHBlY29mZikKKyAgICBleHBvcnQgUEFUSD0iJHtQQVRIfTpAb2Jqcm9vdEBsaWIiCisg ICAgOzsKKyAgKikKKyAgICA7OworZXNhYworCisjIE1ha2UgYSBjb3B5IG9mIHRoZSBASkVNQUxM T0NfQ1BSRUZJWEBNQUxMT0NfQ09ORiBwYXNzZWQgaW4gdG8gdGhpcyBzY3JpcHQsIHNvCisjIGl0 IGNhbiBiZSByZXBlYXRlZGx5IGNvbmNhdGVuYXRlZCB3aXRoIHBlciB0ZXN0IHNldHRpbmdzLgor ZXhwb3J0IE1BTExPQ19DT05GX0FMTD0ke0BKRU1BTExPQ19DUFJFRklYQE1BTExPQ19DT05GfQor IyBDb25jYXRlbmF0ZSB0aGUgaW5kaXZpZHVhbCB0ZXN0J3MgTUFMTE9DX0NPTkYgYW5kIE1BTExP Q19DT05GX0FMTC4KK2V4cG9ydF9tYWxsb2NfY29uZigpIHsKKyAgaWYgWyAieCR7TUFMTE9DX0NP TkZ9IiAhPSAieCIgLWEgIngke01BTExPQ19DT05GX0FMTH0iICE9ICJ4IiBdIDsgdGhlbgorICAg IGV4cG9ydCBASkVNQUxMT0NfQ1BSRUZJWEBNQUxMT0NfQ09ORj0iJHtNQUxMT0NfQ09ORn0sJHtN QUxMT0NfQ09ORl9BTEx9IgorICBlbHNlCisgICAgZXhwb3J0IEBKRU1BTExPQ19DUFJFRklYQE1B TExPQ19DT05GPSIke01BTExPQ19DT05GfSR7TUFMTE9DX0NPTkZfQUxMfSIKKyAgZmkKK30KKwor IyBDb3JyZXNwb25kcyB0byB0ZXN0X3N0YXR1c190LgorcGFzc19jb2RlPTAKK3NraXBfY29kZT0x CitmYWlsX2NvZGU9MgorCitwYXNzX2NvdW50PTAKK3NraXBfY291bnQ9MAorZmFpbF9jb3VudD0w Citmb3IgdCBpbiAkQDsgZG8KKyAgaWYgWyAkcGFzc19jb3VudCAtbmUgMCAtbyAkc2tpcF9jb3Vu dCAtbmUgMCAtbyAkZmFpbF9jb3VudCAhPSAwIF0gOyB0aGVuCisgICAgZWNobworICBmaQorICBl Y2hvICI9PT0gJHt0fSA9PT0iCisgIGlmIFsgLWUgIkBzcmNyb290QCR7dH0uc2giIF0gOyB0aGVu CisgICAgIyBTb3VyY2UgdGhlIHNoZWxsIHNjcmlwdCBjb3JyZXNwb25kaW5nIHRvIHRoZSB0ZXN0 IGluIGEgc3Vic2hlbGwgYW5kCisgICAgIyBleGVjdXRlIHRoZSB0ZXN0LiAgVGhpcyBhbGxvd3Mg dGhlIHNoZWxsIHNjcmlwdCB0byBzZXQgTUFMTE9DX0NPTkYsIHdoaWNoCisgICAgIyBpcyB0aGVu IHVzZWQgdG8gc2V0IEBKRU1BTExPQ19DUFJFRklYQE1BTExPQ19DT05GICh0aHVzIGFsbG93aW5n IHRoZQorICAgICMgcGVyIHRlc3Qgc2hlbGwgc2NyaXB0IHRvIGlnbm9yZSB0aGUgQEpFTUFMTE9D X0NQUkVGSVhAIGRldGFpbCkuCisgICAgZW5hYmxlX2ZpbGw9QGVuYWJsZV9maWxsQCBcCisgICAg ZW5hYmxlX3Byb2Y9QGVuYWJsZV9wcm9mQCBcCisgICAgLiBAc3Jjcm9vdEAke3R9LnNoICYmIFwK KyAgICBleHBvcnRfbWFsbG9jX2NvbmYgJiYgXAorICAgICRKRU1BTExPQ19URVNUX1BSRUZJWCAk e3R9QGV4ZUAgQGFic19zcmNyb290QCBAYWJzX29ianJvb3RACisgIGVsc2UKKyAgICBleHBvcnQg TUFMTE9DX0NPTkY9ICYmIFwKKyAgICBleHBvcnRfbWFsbG9jX2NvbmYgJiYgXAorICAgICRKRU1B TExPQ19URVNUX1BSRUZJWCAke3R9QGV4ZUAgQGFic19zcmNyb290QCBAYWJzX29ianJvb3RACisg IGZpCisgIHJlc3VsdF9jb2RlPSQ/CisgIGNhc2UgJHtyZXN1bHRfY29kZX0gaW4KKyAgICAke3Bh c3NfY29kZX0pCisgICAgICBwYXNzX2NvdW50PSQoKHBhc3NfY291bnQrMSkpCisgICAgICA7Owor ICAgICR7c2tpcF9jb2RlfSkKKyAgICAgIHNraXBfY291bnQ9JCgoc2tpcF9jb3VudCsxKSkKKyAg ICAgIDs7CisgICAgJHtmYWlsX2NvZGV9KQorICAgICAgZmFpbF9jb3VudD0kKChmYWlsX2NvdW50 KzEpKQorICAgICAgOzsKKyAgICAqKQorICAgICAgZWNobyAiVGVzdCBoYXJuZXNzIGVycm9yOiAk e3R9IHcvIE1BTExPQ19DT05GPVwiJHtNQUxMT0NfQ09ORn1cIiIgMT4mMgorICAgICAgZWNobyAi VXNlIHByZWZpeCB0byBkZWJ1ZywgZS5nLiBKRU1BTExPQ19URVNUX1BSRUZJWD1cImdkYiAtLWFy Z3NcIiBzaCB0ZXN0L3Rlc3Quc2ggJHt0fSIgMT4mMgorICAgICAgZXhpdCAxCisgIGVzYWMKK2Rv bmUKKwordG90YWxfY291bnQ9YGV4cHIgJHtwYXNzX2NvdW50fSArICR7c2tpcF9jb3VudH0gKyAk e2ZhaWxfY291bnR9YAorZWNobworZWNobyAiVGVzdCBzdWl0ZSBzdW1tYXJ5OiBwYXNzOiAke3Bh c3NfY291bnR9LyR7dG90YWxfY291bnR9LCBza2lwOiAke3NraXBfY291bnR9LyR7dG90YWxfY291 bnR9LCBmYWlsOiAke2ZhaWxfY291bnR9LyR7dG90YWxfY291bnR9IgorCitpZiBbICR7ZmFpbF9j b3VudH0gLWVxIDAgXSA7IHRoZW4KKyAgZXhpdCAwCitlbHNlCisgIGV4aXQgMQorZmkKCmRpZmYg LS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQv U0ZNVC5jIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0 L1NGTVQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOWY4NWRkCi0tLSAv ZGV2L251bGwKKysrIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVz dC91bml0L1NGTVQuYwpAQCAtMCwwICsxLDE1OTkgQEAKKy8qCisgKiBUaGlzIGZpbGUgZGVyaXZl cyBmcm9tIFNGTVQgMS4zLjMKKyAqIChodHRwOi8vd3d3Lm1hdGguc2NpLmhpcm9zaGltYS11LmFj LmpwL35tLW1hdC9NVC9TRk1UL2luZGV4Lmh0bWwpLCB3aGljaCB3YXMKKyAqIHJlbGVhc2VkIHVu ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgZm9sbG93aW5nIGxpY2Vuc2U6CisgKgorICogICBDb3B5cmln aHQgKGMpIDIwMDYsMjAwNyBNdXRzdW8gU2FpdG8sIE1ha290byBNYXRzdW1vdG8gYW5kIEhpcm9z aGltYQorICogICBVbml2ZXJzaXR5LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICAgUmVk aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3 aXRob3V0CisgKiAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqICAgbWV0OgorICoKKyAqICAgICAgICogUmVk aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln aHQKKyAqICAgICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv bGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5 IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgIGNvcHlyaWdodCBub3Rp Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAg IGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw cm92aWRlZAorICogICAgICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgICAgICAqIE5l aXRoZXIgdGhlIG5hbWUgb2YgdGhlIEhpcm9zaGltYSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMg b2YKKyAqICAgICAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y IHByb21vdGUgcHJvZHVjdHMKKyAqICAgICAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUg d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuCisgKiAgICAgICAgIHBlcm1pc3Npb24uCisg KgorICogICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS UyBBTkQgQ09OVFJJQlVUT1JTCisgKiAgICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiAgIExJTUlURUQgVE8sIFRIRSBJ TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICog ICBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg VEhFIENPUFlSSUdIVAorICogICBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqICAgU1BFQ0lBTCwgRVhFTVBMQVJZ LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogICBMSU1J VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT IE9GIFVTRSwKKyAqICAgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiAgIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqICAgKElOQ0xV RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU SEUgVVNFCisgKiAgIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlICJ0ZXN0L2plbWFsbG9jX3Rl c3QuaCIKKworI2RlZmluZSBCTE9DS19TSVpFIDEwMDAwCisjZGVmaW5lIEJMT0NLX1NJWkU2NCAo QkxPQ0tfU0laRSAvIDIpCisjZGVmaW5lIENPVU5UXzEgMTAwMAorI2RlZmluZSBDT1VOVF8yIDcw MAorCitzdGF0aWMgY29uc3QgdWludDMyX3QgaW5pdF9nZW5fcmFuZF8zMl9leHBlY3RlZFtdID0g eworCTM0NDAxODEyOThVLCAxNTY0OTk3MDc5VSwgMTUxMDY2OTMwMlUsIDI5MzAyNzcxNTZVLCAx NDUyNDM5OTQwVSwKKwkzNzk2MjY4NDUzVSwgIDQyMzEyNDIwOFUsIDIxNDM4MTg1ODlVLCAzODI3 MjE5NDA4VSwgMjk4NzAzNjAwM1UsCisJMjY3NDk3ODYxMFUsIDE1MzY4NDI1MTRVLCAyMDI3MDM1 NTM3VSwgMjUzNDg5NzU2M1UsIDE2ODY1Mjc3MjVVLAorCSA1NDUzNjgyOTJVLCAxNDg5MDEzMzIx VSwgMTM3MDUzNDI1MlUsIDQyMzEwMTI3OTZVLCAzOTk0ODAzMDE5VSwKKwkxNzY0ODY5MDQ1VSwg IDgyNDU5NzUwNVUsICA4NjI1ODE5MDBVLCAyNDY5NzY0MjQ5VSwgIDgxMjg2MjUxNFUsCisJIDM1 OTMxODY3M1UsICAxMTY5NTc5MzZVLCAzMzY3Mzg5NjcyVSwgMjMyNzE3ODM1NFUsIDE4OTgyNDUy MDBVLAorCTMyMDY1MDc4NzlVLCAyMzc4OTI1MDMzVSwgMTA0MDIxNDc4N1UsIDI1MjQ3Nzg2MDVV LCAzMDg4NDI4NzAwVSwKKwkxNDE3NjY1ODk2VSwgIDk2NDMyNDE0N1UsIDIyODI3OTc3MDhVLCAy NDU2MjY5Mjk5VSwgIDMxMzQwMDM3NlUsCisJMjI0NTA5MzI3MVUsIDEwMTU3Mjk0MjdVLCAyNjk0 NDY1MDExVSwgMzI0Njk3NTE4NFUsIDE5OTI3OTM2MzVVLAorCSA0NjM2NzkzNDZVLCAzNzIxMTA0 NTkxVSwgMzQ3NTA2NDE5NlUsICA4NTYxNDEyMzZVLCAxNDk5NTU5NzE5VSwKKwkzNTIyODE4OTQx VSwgMzcyMTUzMzEwOVUsIDE5NTQ4MjY2MTdVLCAxMjgyMDQ0MDI0VSwgMTU0MzI3OTEzNlUsCisJ MTMwMTg2MzA4NVUsIDI2NjkxNDUwNTFVLCA0MjIxNDc3MzU0VSwgMzg5NjAxNjg0MVUsIDMzOTI3 NDAyNjJVLAorCSA0NjI0NjY4NjNVLCAxMDM3Njc5NDQ5VSwgMTIyODE0MDMwNlUsICA5MjIyOTgx OTdVLCAxMjA1MTA5ODUzVSwKKwkxODcyOTM4MDYxVSwgMzEwMjU0NzYwOFUsIDI3NDI3NjY4MDhV LCAxODg4NjI2MDg4VSwgNDAyODAzOTQxNFUsCisJIDE1NzU5Mzg3OVUsIDExMzY5MDE2OTVVLCA0 MDM4Mzc3Njg2VSwgMzU3MjUxNzIzNlUsIDQyMzE3MDY3MjhVLAorCTI5OTczMTE5NjFVLCAxMTg5 OTMxNjUyVSwgMzk4MTU0Mzc2NVUsIDI4MjYxNjY3MDNVLCAgIDg3MTU5MjQ1VSwKKwkxNzIxMzc5 MDcyVSwgMzg5NzkyNjk0MlUsIDE3OTAzOTU0OThVLCAyNTY5MTc4OTM5VSwgMTA0NzM2ODcyOVUs CisJMjM0MDI1OTEzMVUsIDMxNDQyMTI5MDZVLCAyMzAxMTY5Nzg5VSwgMjQ0Mjg4NTQ2NFUsIDMw MzQwNDY3NzFVLAorCTM2Njc4ODA1OTNVLCAzOTM1OTI4NDAwVSwgMjM3MjgwNTIzN1UsIDE2NjYz OTcxMTVVLCAyNDYwNTg0NTA0VSwKKwkgNTEzODY2NzcwVSwgMzgxMDg2OTc0M1UsIDIxNDc0MDAw MzdVLCAyNzkyMDc4MDI1VSwgMjk0MTc2MTgxMFUsCisJMzIxMjI2NTgxMFUsICA5ODQ2OTIyNTlV LCAgMzQ2NTkwMjUzVSwgMTgwNDE3OTE5OVUsIDMyOTg1NDM0NDNVLAorCSA3NTAxMDgxNDFVLCAy ODgwMjU3MDIyVSwgIDI0MzMxMDU0MlUsIDE4NjkwMzY0NjVVLCAxNTg4MDYyNTEzVSwKKwkyOTgz OTQ5NTUxVSwgMTkzMTQ1MDM2NFUsIDQwMzQ1MDU4NDdVLCAyNzM1MDMwMTk5VSwgMTYyODQ2MTA2 MVUsCisJMjUzOTUyMjg0MVUsICAxMjc5NjU1ODVVLCAzOTkyNDQ4ODcxVSwgIDkxMzM4ODIzN1Us ICA1NTkxMzAwNzZVLAorCTEyMDI5MzMxOTNVLCA0MDg3NjQzMTY3VSwgMjU5MDAyMTA2N1UsIDIy NTYyNDAxOTZVLCAxNzQ2Njk3MjkzVSwKKwkxMDEzOTEzNzgzVSwgMTE1NTg2NDkyMVUsIDI3MTU3 NzM3MzBVLCAgOTE1MDYxODYyVSwgMTk0ODc2NjU3M1UsCisJMjMyMjg4Mjg1NFUsIDM3NjExMTkx MDJVLCAxMzQzNDA1Njg0VSwgMzA3ODcxMTk0M1UsIDMwNjc0MzE2NTFVLAorCTMyNDUxNTYzMTZV LCAzNTg4MzU0NTg0VSwgMzQ4NDYyMzMwNlUsIDM4OTk2MjE1NjNVLCA0MTU2Njg5NzQxVSwKKwkz MjM3MDkwMDU4VSwgMzg4MDA2Mzg0NFUsICA4NjI0MTYzMThVLCA0MDM5OTIzODY5VSwgMjMwMzc4 ODMxN1UsCisJMzA3MzU5MDUzNlUsICA3MDE2NTM2NjdVLCAyMTMxNTMwODg0VSwgMzE2OTMwOTk1 MFUsIDIwMjg0ODY5ODBVLAorCSA3NDcxOTY3NzdVLCAzNjIwMjE4MjI1VSwgIDQzMjAxNjAzNVUs IDE0NDk1ODA1OTVVLCAyNzcyMjY2MzkyVSwKKwkgNDQ0MjI0OTQ4VSwgMTY2MjgzMjA1N1UsIDMx ODQwNTU1ODJVLCAzMDI4MzMxNzkyVSwgMTg2MTY4NjI1NFUsCisJMTEwNDg2NDE3OVUsICAzNDI0 MzAzMDdVLCAxMzUwNTEwOTIzVSwgMzAyNDY1NjIzN1UsIDEwMjg0MTc0OTJVLAorCTI4NzA3NzI5 NTBVLCAgMjkwODQ3NTU4VSwgMzY3NTY2MzUwMFUsICA1MDg0MzE1MjlVLCA0MjY0MzQwMzkwVSwK KwkyMjYzNTY5OTEzVSwgMTY2OTMwMjk3NlUsICA1MTk1MTEzODNVLCAyNzA2NDExMjExVSwgMzc2 NDYxNTgyOFUsCisJMzg4MzE2MjQ5NVUsIDQwNTE0NDUzMDVVLCAyNDEyNzI5Nzk4VSwgMzI5OTQw NTE2NFUsIDM5OTE5MTExNjZVLAorCTIzNDg3NjczMDRVLCAyNjY0MDU0OTA2VSwgMzc2MzYwOTI4 MlUsICA1OTM5NDM1ODFVLCAzNzU3MDkwMDQ2VSwKKwkyMDc1MzM4ODk0VSwgMjAyMDU1MDgxNFUs IDQyODc0NTI5MjBVLCA0MjkwMTQwMDAzVSwgMTQyMjk1NzMxN1UsCisJMjUxMjcxNjY2N1UsIDIw MDM0ODUwNDVVLCAyMzA3NTIwMTAzVSwgMjI4ODQ3MjE2OVUsIDM5NDA3NTE2NjNVLAorCTQyMDQ2 Mzg2NjRVLCAyODkyNTgzNDIzVSwgMTcxMDA2ODMwMFUsIDM5MDQ3NTU5OTNVLCAyMzYzMjQzOTUx VSwKKwkzMDM4MzM0MTIwVSwgIDU0NzA5OTQ2NVUsICA3NzExMDU4NjBVLCAzMTk5OTgzNzM0VSwg NDI4MjA0NjQ2MVUsCisJMjI5ODM4ODM2M1UsICA5MzQ4MTAyMThVLCAyODM3ODI3OTAxVSwgMzk1 MjUwMDcwOFUsIDIwOTUxMzAyNDhVLAorCTMwODMzMzUyOTdVLCAgIDI2ODg1MjgxVSwgMzkzMjE1 NTI4M1UsIDE1MzE3NTExMTZVLCAxNDI1MjI3MTMzVSwKKwkgNDk1NjU0MTU5VSwgMzI3OTYzNDE3 NlUsIDM4NTU1NjIyMDdVLCAzOTU3MTk1MzM4VSwgNDE1OTk4NTUyN1UsCisJIDg5MzM3NTA2MlUs IDE4NzU1MTU1MzZVLCAxMzI3MjQ3NDIyVSwgMzc1NDE0MDY5M1UsIDEwMjg5MjMxOTdVLAorCTE3 Mjk4ODA0NDBVLCAgODA1NTcxMjk4VSwgIDQ0ODk3MTA5OVUsIDI3MjY3NTcxMDZVLCAyNzQ5NDM2 NDYxVSwKKwkyNDg1OTg3MTA0VSwgIDE3NTMzNzA0MlUsIDMyMzU0Nzc5MjJVLCAzODgyMTE0MzAy VSwgMjAyMDk3MDk3MlUsCisJIDk0MzkyNjEwOVUsIDI3NjI1ODcxOTVVLCAxOTA0MTk1NTU4VSwg MzQ1MjY1MDU2NFUsICAxMDg0MzIyODFVLAorCTM4OTM0NjM1NzNVLCAzOTc3NTgzMDgxVSwgMjYz NjUwNDM0OFUsIDExMTA2NzM1MjVVLCAzNTQ4NDc5ODQxVSwKKwk0MjU4ODU0NzQ0VSwgIDk4MDA0 NzcwM1UsIDQwNTcxNzU0MThVLCAzODkwMDA4MjkyVSwgIDE0NTY1MzY0NlUsCisJMzE0MTg2ODk4 OVUsIDMyOTMyMTYyMjhVLCAxMTk0MzMxODM3VSwgMTI1NDU3MDY0MlUsIDMwNDk5MzQ1MjFVLAor CTI4NjgzMTMzNjBVLCAyODg2MDMyNzUwVSwgMTExMDg3MzgyMFUsICAyNzk1NTM1MjRVLCAzMDA3 MjU4NTY1VSwKKwkxMTA0ODA3ODIyVSwgMzE4Njk2MTA5OFUsICAzMTU3NjQ2NDZVLCAyMTYzNjgw ODM4VSwgMzU3NDUwODk5NFUsCisJMzA5OTc1NTY1NVUsICAxOTE5NTc2ODRVLCAzNjQyNjU2NzM3 VSwgMzMxNzk0NjE0OVUsIDM1MjIwODc2MzZVLAorCSA0NDQ1MjY0MTBVLCAgNzc5MTU3NjI0VSwg MTA4ODIyOTYyN1UsIDEwOTI0NjAyMjNVLCAxODU2MDEzNzY1VSwKKwkzNjU5ODc3MzY3VSwgIDM2 ODI3MDQ1MVUsICA1MDM1NzA3MTZVLCAzMDAwOTg0NjcxVSwgMjc0Mjc4OTY0N1UsCisJIDkyODA5 NzcwOVUsIDI5MTQxMDk1MzlVLCAgMzA4ODQzNTY2VSwgMjgxNjE2MTI1M1UsIDM2NjcxOTIwNzlV LAorCTI3NjI2NzkwNTdVLCAzMzk1MjQwOTg5VSwgMjkyODkyNTAzOFUsIDE0OTE0NjU5MTRVLCAz NDU4NzAyODM0VSwKKwkzNzg3NzgyNTc2VSwgMjg5NDEwNDgyM1UsIDEyOTY4ODA0NTVVLCAxMjUz NjM2NTAzVSwgIDk4OTk1OTQwN1UsCisJMjI5MTU2MDM2MVUsIDI3NzY3OTA0MzZVLCAxOTEzMTc4 MDQyVSwgMTU4NDY3NzgyOVUsICA2ODk2Mzc1MjBVLAorCTE4OTg0MDY4NzhVLCAgNjg4MzkxNTA4 VSwgMzM4NTIzNDk5OFUsICA4NDU0OTMyODRVLCAxOTQzNTkxODU2VSwKKwkyNzIwNDcyMDUwVSwg IDIyMjY5NTEwMVUsIDE2NTMzMjA4NjhVLCAyOTA0NjMyMTIwVSwgNDA4NDkzNjAwOFUsCisJMTA4 MDcyMDY4OFUsIDM5MzgwMzI1NTZVLCAgMzg3ODk2NDI3VSwgMjY1MDgzOTYzMlUsICAgOTkwNDI5 OTFVLAorCTE3MjA5MTM3OTRVLCAxMDQ3MTg2MDAzVSwgMTg3NzA0ODA0MFUsIDIwOTA0NTc2NTlV LCAgNTE3MDg3NTAxVSwKKwk0MTcyMDE0NjY1VSwgMjEyOTcxMzE2M1UsIDI0MTM1MzMxMzJVLCAy NzYwMjg1MDU0VSwgNDEyOTI3MjQ5NlUsCisJMTMxNzczNzE3NVUsIDIzMDk1NjY0MTRVLCAyMjI4 ODczMzMyVSwgMzg4OTY3MTI4MFUsIDExMTA4NjQ2MzBVLAorCTM1NzY3OTc3NzZVLCAyMDc0NTUy NzcyVSwgIDgzMjAwMjY0NFUsIDMwOTcxMjI2MjNVLCAyNDY0ODU5Mjk4VSwKKwkyNjc5NjAzODIy VSwgMTY2NzQ4OTg4NVUsIDMyMzc2NTI3MTZVLCAxNDc4NDEzOTM4VSwgMTcxOTM0MDMzNVUsCisJ MjMwNjYzMTExOVUsICA2Mzk3MjczNThVLCAzMzY5Njk4MjcwVSwgIDIyNjkwMjc5NlUsIDIwOTk5 MjA3NTFVLAorCTE4OTIyODk5NTdVLCAyMjAxNTk0MDk3VSwgMzUwODE5NzAxM1UsIDM0OTU4MTE4 NTZVLCAzOTAwMzgxNDkzVSwKKwkgODQxNjYwMzIwVSwgMzk3NDUwMTQ1MVUsIDMzNjA5NDkwNTZV LCAxNjc2ODI5MzQwVSwgIDcyODg5OTI1NFUsCisJMjA0NzgwOTYyN1UsIDIzOTA5NDg5NjJVLCAg NjcwMTY1OTQzVSwgMzQxMjk1MTgzMVUsIDQxODkzMjAwNDlVLAorCTE5MTE1OTUyNTVVLCAyMDU1 MzYzMDg2VSwgIDUwNzE3MDU3NVUsICA0MTgyMTk1OTRVLCA0MTQxNDk1MjgwVSwKKwkyNjkyMDg4 NjkyVSwgNDIwMzYzMDY1NFUsIDM1NDAwOTM5MzJVLCAgNzkxOTg2NTMzVSwgMjIzNzkyMTA1MVUs CisJMjUyNjg2NDMyNFUsIDI5NTY2MTY2NDJVLCAxMzk0OTU4NzAwVSwgMTk4Mzc2ODIyM1UsIDE4 OTMzNzMyNjZVLAorCSA1OTE2NTM2NDZVLCAgMjI4NDMyNDM3VSwgMTYxMTA0NjU5OFUsIDMwMDc3 MzYzNTdVLCAxMDQwMDQwNzI1VSwKKwkyNzI2MTgwNzMzVSwgMjc4OTgwNDM2MFUsIDQyNjM1Njg0 MDVVLCAgODI5MDk4MTU4VSwgMzg0NzcyMjgwNVUsCisJMTEyMzU3ODAyOVUsIDE4MDQyNzYzNDdV LCAgOTk3OTcxMzE5VSwgNDIwMzc5NzA3NlUsIDQxODUxOTk3MTNVLAorCTI4MTE3MzM2MjZVLCAy MzQzNjQyMTk0VSwgMjk4NTI2MjMxM1UsIDE0MTc5MzA4MjdVLCAzNzU5NTg3NzI0VSwKKwkxOTY3 MDc3OTgyVSwgMTU4NTIyMzIwNFUsIDEwOTc0NzU1MTZVLCAxOTAzOTQ0OTQ4VSwgIDc0MDM4MjQ0 NFUsCisJMTExNDE0MjA2NVUsIDE1NDE3OTYwNjVVLCAxNzE4Mzg0MTcyVSwgMTU0NDA3NjE5MVUs IDExMzQ2ODIyNTRVLAorCTM1MTk3NTQ0NTVVLCAyODY2MjQzOTIzVSwgIDM0MTg2NTQzN1UsICA2 NDU0OTg1NzZVLCAyNjkwNzM1ODUzVSwKKwkxMDQ2OTYzMDMzVSwgMjQ5MzE3ODQ2MFUsIDExODc2 MDQ2OTZVLCAxNjE5NTc3ODIxVSwgIDQ4ODUwMzYzNFUsCisJMzI1NTc2ODE2MVUsIDIzMDY2NjYx NDlVLCAxNjMwNTE0MDQ0VSwgMjM3NzY5ODM2N1UsIDI3NTE1MDM3NDZVLAorCTM3OTQ0NjcwODhV LCAxNzk2NDE1OTgxVSwgMzY1NzE3Mzc0NlUsICA0MDkxMzYyOTZVLCAxMzg3MTIyMzQyVSwKKwkx Mjk3NzI2NTE5VSwgIDIxOTU0NDg1NVUsIDQyNzAyODU1NThVLCAgNDM3NTc4ODI3VSwgMTQ0NDY5 ODY3OVUsCisJMjI1ODUxOTQ5MVUsICA5NjMxMDk4OTJVLCAzOTgyMjQ0MDczVSwgMzM1MTUzNTI3 NVUsICAzODUzMjg0OTZVLAorCTE4MDQ3ODQwMTNVLCAgNjk4MDU5MzQ2VSwgMzkyMDUzNTE0N1Us ICA3MDgzMzEyMTJVLCAgNzg0MzM4MTYzVSwKKwkgNzg1Njc4MTQ3VSwgMTIzODM3NjE1OFUsIDE1 NTcyOTg4NDZVLCAyMDM3ODA5MzIxVSwgIDI3MTU3NjIxOFUsCisJNDE0NTE1NTI2OVUsIDE5MTM0 ODE2MDJVLCAyNzYzNjkxOTMxVSwgIDU4ODk4MTA4MFUsIDEyMDEwOTgwNTFVLAorCTM3MTc2NDAy MzJVLCAxNTA5MjA2MjM5VSwgIDY2MjUzNjk2N1UsIDMxODA1MjM2MTZVLCAxMTMzMTA1NDM1VSwK KwkyOTYzNTAwODM3VSwgMjI1Mzk3MTIxNVUsIDMxNTM2NDI2MjNVLCAxMDY2OTI1NzA5VSwgMjU4 Mjc4MTk1OFUsCisJMzAzNDcyMDIyMlUsIDEwOTA3OTg1NDRVLCAyOTQyMTcwMDA0VSwgNDAzNjE4 NzUyMFUsICA2ODY5NzI1MzFVLAorCTI2MTA5OTAzMDJVLCAyNjQxNDM3MDI2VSwgMTgzNzU2MjQy MFUsICA3MjIwOTYyNDdVLCAxMzE1MzMzMDMzVSwKKwkyMTAyMjMxMjAzVSwgMzQwMjM4OTIwOFUs IDM0MDM2OTgxNDBVLCAxMzEyNDAyODMxVSwgMjg5ODQyNjU1OFUsCisJIDgxNDM4NDU5NlUsICAz ODU2NDk1ODJVLCAxOTE2NjQzMjg1VSwgMTkyNDYyNTEwNlUsIDI1MTI5MDU1ODJVLAorCTI1MDEx NzAzMDRVLCA0Mjc1MjIzMzY2VSwgMjg0MTIyNTI0NlUsIDE0Njc2NjM2ODhVLCAzNTYzNTY3ODQ3 VSwKKwkyOTY5MjA4NTUyVSwgIDg4NDc1MDkwMVUsICAxMDI5OTI1NzZVLCAgMjI3ODQ0MzAxVSwg MzY4MTQ0Mjk5NFUsCisJMzUwMjg4MTg5NFUsIDQwMzQ2OTMyOTlVLCAxMTY2NzI3MDE4VSwgMTY5 NzQ2MDY4N1UsIDE3Mzc3NzgzMzJVLAorCTE3ODcxNjExMzlVLCAxMDUzMDAzNjU1VSwgMTIxNTAy NDQ3OFUsIDI3OTE2MTY3NjZVLCAyNTI1ODQxMjA0VSwKKwkxNjI5MzIzNDQzVSwgICAgMzIzMzgx NVUsIDIwMDM4MjMwMzJVLCAzMDgzODM0MjYzVSwgMjM3OTI2NDg3MlUsCisJMzc1MjM5MjMxMlUs IDEyODc0NzU1NTBVLCAzNzcwOTA0MTcxVSwgMzAwNDI0NDYxN1UsIDE1MDIxMTc3ODRVLAorCSA5 MTg2OTg0MjNVLCAyNDE5ODU3NTM4VSwgMzg2NDUwMjA2MlUsIDE3NTEzMjIxMDdVLCAyMTg4Nzc1 MDU2VSwKKwk0MDE4NzI4MzI0VSwgIDk4MzcxMjk1NVUsICA0NDAwNzE5MjhVLCAzNzEwODM4Njc3 VSwgMjAwMTAyNzY5OFUsCisJMzk5NDcwMjE1MVUsICAgMjI0OTMxMTlVLCAzNTg0NDAwOTE4VSwg MzQ0NjI1MzY3MFUsIDQyNTQ3ODkwODVVLAorCTE0MDU0NDc4NjBVLCAxMjQwMjQ1NTc5VSwgMTgw MDY0NDE1OVUsIDE2NjEzNjM0MjRVLCAzMjc4MzI2MTMyVSwKKwkzNDAzNjIzNDUxVSwgICA2NzA5 MjgwMlUsIDI2MDkzNTIxOTNVLCAzOTE0MTUwMzQwVSwgMTgxNDg0Mjc2MVUsCisJMzYxMDgzMDg0 N1UsICA1OTE1MzE0MTJVLCAzODgwMjMyODA3VSwgMTY3MzUwNTg5MFUsIDI1ODUzMjY5OTFVLAor CTE2Nzg1NDQ0NzRVLCAzMTQ4NDM1ODg3VSwgMzQ1NzIxNzM1OVUsIDExOTMyMjYzMzBVLCAyODE2 NTc2OTA4VSwKKwkgMTU0MDI1MzI5VSwgIDEyMTY3ODg2MFUsIDExNjQ5MTU3MzhVLCAgOTczODcz NzYxVSwgIDI2OTExNjEwMFUsCisJICA1MjA4Nzk3MFUsICA3NDQwMTUzNjJVLCAgNDk4NTU2MDU3 VSwgICA5NDI5ODg4MlUsIDE1NjMyNzE2MjFVLAorCTIzODMwNTk2MjhVLCA0MTk3MzY3MjkwVSwg Mzk1ODQ3Mjk5MFUsIDI1OTIwODM2MzZVLCAyOTA2NDA4NDM5VSwKKwkxMDk3NzQyNDMzVSwgMzky NDg0MDUxN1UsICAyNjQ1NTcyNzJVLCAyMjkyMjg3MDAzVSwgMzIwMzMwNzk4NFUsCisJNDA0NzAz ODg1N1UsIDM4MjA2MDk3MDVVLCAyMzMzNDE2MDY3VSwgMTgzOTIwNjA0NlUsIDM2MDA5NDQyNTJV LAorCTM0MTIyNTQ5MDRVLCAgNTgzNTM4MjIyVSwgMjM5MDU1NzE2NlUsIDQxNDA0NTk0MjdVLCAy ODEwMzU3NDQ1VSwKKwkgMjI2Nzc3NDk5VSwgMjQ5NjE1MTI5NVUsIDIyMDczMDE3MTJVLCAzMjgz NjgzMTEyVSwgIDYxMTYzMDI4MVUsCisJMTkzMzIxODIxNVUsIDMzMTU2MTA5NTRVLCAzODg5NDQx OTg3VSwgMzcxOTQ1NDI1NlUsIDM5NTcxOTA1MjFVLAorCTEzMTM5OTgxNjFVLCAyMzY1MzgzMDE2 VSwgMzE0Njk0MTA2MFUsIDE4MDEyMDYyNjBVLCAgNzk2MTI0MDgwVSwKKwkyMDc2MjQ4NTgxVSwg MTc0NzQ3MjQ2NFUsIDMyNTQzNjUxNDVVLCAgNTk1NTQzMTMwVSwgMzU3MzkwOTUwM1UsCisJMzc1 ODI1MDIwNFUsIDIwMjA3Njg1NDBVLCAyNDM5MjU0MjEwVSwgICA5MzM2ODk1MVUsIDMxNTU3OTIy NTBVLAorCTI2MDAyMzI5ODBVLCAzNzA5MTk4Mjk1VSwgMzg5NDkwMDQ0MFUsIDI5NzE4NTA4MzZV LCAxNTc4OTA5NjQ0VSwKKwkxNDQzNDkzMzk1VSwgMjU4MTYyMTY2NVUsIDMwODY1MDYyOTdVLCAy NDQzNDY1ODYxVSwgIDU1ODEwNzIxMVUsCisJMTUxOTM2NzgzNVUsICAyNDkxNDk2ODZVLCAgOTA4 MTAyMjY0VSwgMjU4ODc2NTY3NVUsIDEyMzI3NDM5NjVVLAorCTEwMDEzMzAzNzNVLCAzNTYxMzMx NjU0VSwgMjI1OTMwMTI4OVUsIDE1NjQ5Nzc2MjRVLCAzODM1MDc3MDkzVSwKKwkgNzI3MjQ0OTA2 VSwgNDI1NTczODA2N1UsIDEyMTQxMzM1MTNVLCAyNTcwNzg2MDIxVSwgMzg5OTcwNDYyMVUsCisJ MTYzMzg2MTk4NlUsIDE2MzY5Nzk1MDlVLCAxNDM4NTAwNDMxVSwgICA1ODQ2MzI3OFUsIDI4MjM0 ODU2MjlVLAorCTIyOTc0MzAxODdVLCAyOTI2NzgxOTI0VSwgMzM3MTM1Mjk0OFUsIDE4NjQwMDkw MjNVLCAyNzIyMjY3OTczVSwKKwkxNDQ0MjkyMDc1VSwgIDQzNzcwMzk3M1UsIDEwNjA0MTQ1MTJV LCAgMTg5NzA1ODYzVSwgIDkxMDAxODEzNVUsCisJNDA3NzM1Nzk2NFUsICA4ODQyMTM0MjNVLCAy NjQ0OTg2MDUyVSwgMzk3MzQ4ODM3NFUsIDExODc5MDYxMTZVLAorCTIzMzEyMDc4NzVVLCAgNzgw NDYzNzAwVSwgMzcxMzM1MTY2MlUsIDM4NTQ2MTEyOTBVLCAgNDEyODA1NTc0VSwKKwkyOTc4NDYy NTcyVSwgMjE3NjIyMjgyMFUsICA4Mjk0MjQ2OTZVLCAyNzkwNzg4MzMyVSwgMjc1MDgxOTEwOFUs CisJMTU5NDYxMTY1N1UsIDM4OTk4NzgzOTRVLCAzMDMyODcwMzY0VSwgMTcwMjg4NzY4MlUsIDE5 NDgxNjc3NzhVLAorCSAgMTQxMzAwNDJVLCAgMTkyMjkyNTAwVSwgIDk0NzIyNzA3NlUsICAgOTA3 MTk0OTdVLCAzODU0MjMwMzIwVSwKKwkgNzg0MDI4NDM0VSwgMjE0MjM5OTc4N1UsIDE1NjM0NDk2 NDZVLCAyODQ0NDAwMjE3VSwgIDgxOTE0MzE3MlUsCisJMjg4MzMwMjM1NlUsIDIzMjgwNTUzMDRV LCAxMzI4NTMyMjQ2VSwgMjYwMzg4NTM2M1UsIDMzNzUxODg5MjRVLAorCSA5MzM5NDEyOTFVLCAz NjI3MDM5NzE0VSwgMjEyOTY5NzI4NFUsIDIxNjcyNTM5NTNVLCAyNTA2OTA1NDM4VSwKKwkxNDEy NDI0NDk3VSwgMjk4MTM5NTk4NVUsIDE0MTgzNTk2NjBVLCAyOTI1OTAyNDU2VSwgICA1Mjc1Mjc4 NFUsCisJMzcxMzY2Nzk4OFUsIDM5MjQ2Njk0MDVVLCAgNjQ4OTc1NzA3VSwgMTE0NTUyMDIxM1Us IDQwMTg2NTA2NjRVLAorCTM4MDU5MTU0NDBVLCAyMzgwNTQyMDg4VSwgMjAxMzI2MDk1OFUsIDMy NjI1NzIxOTdVLCAyNDY1MDc4MTAxVSwKKwkxMTE0NTQwMDY3VSwgMzcyODc2ODA4MVUsIDIzOTY5 NTg3NjhVLCAgNTkwNjcyMjcxVSwgIDkwNDgxODcyNVUsCisJNDI2MzY2MDcxNVUsICA3MDA3NTQ0 MDhVLCAxMDQyNjAxODI5VSwgNDA5NDExMTgyM1UsIDQyNzQ4Mzg5MDlVLAorCTI1MTI2OTI2MTdV LCAyNzc0MzAwMjA3VSwgMjA1NzMwNjkxNVUsIDM0NzA5NDI0NTNVLCAgIDk5MzMzMDg4VSwKKwkx MTQyNjYxMDI2VSwgMjg4OTkzMTM4MFUsICAgMTQzMTY2NzRVLCAyMjAxMTc5MTY3VSwgIDQxNTI4 OTQ1OVUsCisJIDQ0ODI2NTc1OVUsIDM1MTUxNDI3NDNVLCAzMjU0OTAzNjgzVSwgIDI0NjYzMzI4 MVUsIDExODQzMDcyMjRVLAorCTI0MTgzNDc4MzBVLCAyMDkyOTY3MzE0VSwgMjY4MjA3MjMxNFUs IDI1NTg3NTAyMzRVLCAyMDAwMzUyMjYzVSwKKwkxNTQ0MTUwNTMxVSwgIDM5OTAxMDQwNVUsIDE1 MTM5NDYwOTdVLCAgNDk5NjgyOTM3VSwgIDQ2MTE2NzQ2MFUsCisJMzA0NTU3MDYzOFUsIDE2MzM2 Njk3MDVVLCAgODUxNDkyMzYyVSwgNDA1MjgwMTkyMlUsIDIwNTUyNjY3NjVVLAorCSA2MzU1NTY5 OTZVLCAgMzY4MjY2MzU2VSwgMjM4NTczNzM4M1UsIDMyMTgyMDIzNTJVLCAyNjAzNzcyNDA4VSwK KwkgMzQ5MTc4NzkyVSwgIDIyNjQ4MjU2N1UsIDMxMDI0MjYwNjBVLCAzNTc1OTk4MjY4VSwgMjEw MzAwMTg3MVUsCisJMzI0MzEzNzA3MVUsICAyMjU1MDA2ODhVLCAxNjM0NzE4NTkzVSwgNDI4MzMx MTQzMVUsIDQyOTIxMjI5MjNVLAorCTM4NDI4MDI3ODdVLCAgODExNzM1NTIzVSwgIDEwNTcxMjUx OFUsICA2NjM0MzQwNTNVLCAxODU1ODg5MjczVSwKKwkyODQ3OTcyNTk1VSwgMTE5NjM1NTQyMVUs IDI1NTIxNTAxMTVVLCA0MjU0NTEwNjE0VSwgMzc1MjE4MTI2NVUsCisJMzQzMDcyMTgxOVUsIDM4 Mjg3MDUzOTZVLCAzNDM2Mjg3OTA1VSwgMzQ0MTk2NDkzN1UsIDQxMjM2NzA2MzFVLAorCSAzNTMw MDE1MzlVLCAgNDU5NDk2NDM5VSwgMzc5OTY5MDg2OFUsIDEyOTM3Nzc2NjBVLCAyNzYxMDc5NzM3 VSwKKwkgNDk4MDk2MzM5VSwgMzM5ODQzMzM3NFUsIDQwODAzNzgzODBVLCAyMzA0NjkxNTk2VSwg Mjk5NTcyOTA1NVUsCisJNDEzNDY2MDQxOVUsIDM5MDM0NDQwMjRVLCAzNTc2NDk0OTkzVSwgIDIw MzY4MjE3NVUsIDMzMjExNjQ4NTdVLAorCTI3NDc5NjM2MTFVLCAgIDc5NzQ5MDg1VSwgMjk5Mjg5 MDM3MFUsIDEyNDAyNzg1NDlVLCAxNzcyMTc1NzEzVSwKKwkyMTExMzMxOTcyVSwgMjY1NTAyMzQ0 OVUsIDE2ODM4OTYzNDVVLCAyODM2MDI3MjEyVSwgMzQ4Mjg2ODAyMVUsCisJMjQ4OTg4NDg3NFUs ICA3NTY4NTM5NjFVLCAyMjk4ODc0NTAxVSwgNDAxMzQ0ODY2N1UsIDQxNDM5OTYwMjJVLAorCTI5 NDgzMDY4NThVLCA0MTMyOTIwMDM1VSwgMTI4MzI5OTI3MlUsICA5OTU1OTIyMjhVLCAzNDUwNTA4 NTk1VSwKKwkxMDI3ODQ1NzU5VSwgMTc2Njk0MjcyMFUsIDM4NjE0MTE4MjZVLCAxNDQ2ODYxMjMx VSwgICA5NTk3NDk5M1UsCisJMzUwMjI2MzU1NFUsIDE0ODc1MzIxOTRVLCAgNjAxNTAyNDcyVSwg NDEyOTYxOTEyOVUsICAyNTAxMzE3NzNVLAorCTIwNTAwNzk1NDdVLCAzMTk4OTAzOTQ3VSwgMzEw NTU4OTc3OFUsIDQwNjY0ODEzMTZVLCAzMDI2MzgzOTc4VSwKKwkyMjc2OTAxNzEzVSwgIDM2NTYz Nzc1MVUsIDIyNjA3MTg0MjZVLCAxMzk0Nzc1NjM0VSwgMTc5MTE3MjMzOFUsCisJMjY5MDUwMzE2 M1UsIDI5NTI3Mzc4NDZVLCAxNTY4NzEwNDYyVSwgIDczMjYyMzE5MFUsIDI5ODAzNTgwMDBVLAor CTEwNTM2MzE4MzJVLCAxNDMyNDI2OTUxVSwgMzIyOTE0OTYzNVUsIDE4NTQxMTM5ODVVLCAzNzE5 NzMzNTMyVSwKKwkzMjA0MDMxOTM0VSwgIDczNTc3NTUzMVUsICAxMDc0Njg2MjBVLCAzNzM0NjEx OTg0VSwgIDYzMTAwOTQwMlUsCisJMzA4MzYyMjQ1N1UsIDQxMDk1ODA2MjZVLCAgMTU5MzczNDU4 VSwgMTMwMTk3MDIwMVUsIDQxMzIzODkzMDJVLAorCTEyOTMyNTUwMDRVLCAgODQ3MTgyNzUyVSwg NDE3MDAyMjczN1UsICAgOTY3MTI5MDBVLCAyNjQxNDA2NzU1VSwKKwkxMzgxNzI3NzU1VSwgIDQw NTYwODI4N1UsIDQyODc5MTk2MjVVLCAxNzAzNTU0MjkwVSwgMzU4OTU4MDI0NFUsCisJMjkxMTQw MzQ4OFUsICAgIDIxNjY1NjVVLCAyNjQ3MzA2NDUxVSwgMjMzMDUzNTExN1UsIDEyMDA4MTUzNThV LAorCTExNjU5MTY3NTRVLCAgMjQ1MDYwOTExVSwgNDA0MDY3OTA3MVUsIDM2ODQ5MDg3NzFVLCAy NDUyODM0MTI2VSwKKwkyNDg2ODcyNzczVSwgMjMxODY3ODM2NVUsIDI5NDA2Mjc5MDhVLCAxODM3 ODM3MjQwVSwgMzQ0Nzg5NzQwOVUsCisJNDI3MDQ4NDY3NlUsIDE0OTUzODg3MjhVLCAzNzU0Mjg4 NDc3VSwgNDIwNDE2Nzg4NFUsIDEzODY5Nzc3MDVVLAorCTI2OTIyMjQ3MzNVLCAzMDc2MjQ5Njg5 VSwgNDEwOTU2ODA0OFUsIDQxNzA5NTUxMTVVLCA0MTY3NTMxMzU2VSwKKwk0MDIwMTg5OTUwVSwg NDI2MTg1NTAzOFUsIDMwMzY5MDc1NzVVLCAzNDEwMzk5ODg1VSwgMzA3NjM5NTczN1UsCisJMTA0 NjE3ODYzOFUsICAxNDQ0OTY3NzBVLCAgMjMwNzI1ODQ2VSwgMzM0OTYzNzE0OVUsICAgMTcwNjU3 MTdVLAorCTI4MDk5MzIwNDhVLCAyMDU0NTgxNzg1VSwgMzYwODQyNDk2NFUsIDMyNTk2Mjg4MDhV LCAgMTM0ODk3Mzg4VSwKKwkzNzQzMDY3NDYzVSwgIDI1NzY4NTkwNFUsIDM3OTU2NTY1OTBVLCAx NTYyNDY4NzE5VSwgMzU4OTEwMzkwNFUsCisJMzEyMDQwNDcxMFUsICAyNTQ2ODQ1NDdVLCAyNjUz NjYxNTgwVSwgMzY2MzkwNDc5NVUsIDI2MzE5NDI3NThVLAorCTEwNjMyMzQzNDdVLCAyNjA5NzMy OTAwVSwgMjMzMjA4MDcxNVUsIDM1MjExMjUyMzNVLCAxMTgwNTk5NTk5VSwKKwkxOTM1ODY4NTg2 VSwgNDExMDk3MDQ0MFUsICAyOTY3MDYzNzFVLCAyMTI4NjY2MzY4VSwgMTMxOTg3NTc5MVUsCisJ MTU3MDkwMDE5N1UsIDMwOTYwMjU0ODNVLCAxNzk5ODgyNTE3VSwgMTkyODMwMjAwN1UsIDExNjM3 MDc3NThVLAorCTEyNDQ0OTE0ODlVLCAzNTMzNzcwMjAzVSwgIDU2NzQ5NjA1M1UsIDI3NTc5MjQz MDVVLCAyNzgxNjM5MzQzVSwKKwkyODE4NDIwMTA3VSwgIDU2MDQwNDg4OVUsIDI2MTk2MDk3MjRV LCA0MTc2MDM1NDMwVSwgMjUxMTI4OTc1M1UsCisJMjUyMTg0MjAxOVUsIDM5MTA1NTM1MDJVLCAy OTI2MTQ5Mzg3VSwgMzMwMjA3ODE3MlUsIDQyMzcxMTg4NjdVLAorCSAzMzA3MjUxMjZVLCAgMzY3 NDAwNjc3VSwgIDg4ODIzOTg1NFUsICA1NDU1NzA0NTRVLCA0MjU5NTkwNTI1VSwKKwkgMTM0MzQz NjE3VSwgMTEwMjE2OTc4NFUsIDE2NDc0NjM3MTlVLCAzMjYwOTc5Nzg0VSwgMTUxODg0MDg4M1Us CisJMzYzMTUzNzk2M1UsIDMzNDI2NzE0NTdVLCAxMzAxNTQ5MTQ3VSwgMjA4MzczOTM1NlUsICAx NDY1OTM3OTJVLAorCTMyMTc5NTkwODBVLCAgNjUyNzU1NzQzVSwgMjAzMjE4NzE5M1UsIDM4OTg3 NTg0MTRVLCAxMDIxMzU4MDkzVSwKKwk0MDM3NDA5MjMwVSwgMjE3NjQwNzkzMVUsIDM0MjczOTE5 NTBVLCAyODgzNTUzNjAzVSwgIDk4NTYxMzgyN1UsCisJMzEwNTI2NTA5MlUsIDM0MjMxNjg0MjdV LCAzMzg3NTA3NjcyVSwgIDQ2NzE3MDI4OFUsIDIxNDEyNjYxNjNVLAorCTM3MjM4NzAyMDhVLCAg OTE2NDEwOTE0VSwgMTI5Mzk4Nzc5OVUsIDI2NTI1ODQ5NTBVLCAgNzY5MTYwMTM3VSwKKwkzMjA1 MjkyODk2VSwgMTU2MTI4NzM1OVUsIDE2ODQ1MTAwODRVLCAzMTM2MDU1NjIxVSwgMzc2NTE3MTM5 MVUsCisJIDYzOTY4MzIzMlUsIDI2Mzk1NjkzMjdVLCAxMjE4NTQ2OTQ4VSwgNDI2MzU4NjY4NVUs IDMwNTgyMTU3NzNVLAorCTIzNTIyNzk4MjBVLCAgNDAxODcwMjE3VSwgMjYyNTgyMjQ2M1UsIDE1 MjkxMjUyOTZVLCAyOTgxODAxODk1VSwKKwkxMTkxMjg1MjI2VSwgNDAyNzcyNTQzN1UsIDM0MzI3 MDAyMTdVLCA0MDk4ODM1NjYxVSwgIDk3MTE4Mjc4M1UsCisJMjQ0Mzg2MTE3M1UsIDM4ODE0NTcx MjNVLCAzODc0Mzg2NjUxVSwgIDQ1NzI3NjE5OVUsIDI2MzgyOTQxNjBVLAorCTQwMDI4MDkzNjhV LCAgNDIxMTY5MDQ0VSwgMTExMjY0MjU4OVUsIDMwNzYyMTM3NzlVLCAzMzg3MDMzOTcxVSwKKwky NDk5NjEwOTUwVSwgMzA1NzI0MDkxNFUsIDE2NjI2Nzk3ODNVLCAgNDYxMjI0NDMxVSwgMTE2ODM5 NTkzM1UKK307CitzdGF0aWMgY29uc3QgdWludDMyX3QgaW5pdF9ieV9hcnJheV8zMl9leHBlY3Rl ZFtdID0geworCTI5MjA3MTExODNVLCAzODg1NzQ1NzM3VSwgMzUwMTg5MzY4MFUsICA4NTY0NzA5 MzRVLCAxNDIxODY0MDY4VSwKKwkgMjc3MzYxMDM2VSwgMTUxODYzODAwNFUsIDIzMjg0MDQzNTNV LCAzMzU1NTEzNjM0VSwgICA2NDMyOTE4OVUsCisJMTYyNDU4NzY3M1UsIDM1MDg0NjcxODJVLCAy NDgxNzkyMTQxVSwgMzcwNjQ4MDc5OVUsIDE5MjU4NTkwMzdVLAorCTI5MTMyNzU2OTlVLCAgODgy NjU4NDEyVSwgIDM4NDY0MTIxOVUsICA0MjIyMDIwMDJVLCAxODczMzg0ODkxVSwKKwkyMDA2MDg0 MzgzVSwgMzkyNDkyOTkxMlUsIDE2MzY3MTgxMDZVLCAzMTA4ODM4NzQyVSwgMTI0NTQ2NTcyNFUs CisJNDE5NTQ3MDUzNVUsICA3NzkyMDcxOTFVLCAxNTc3NzIxMzczVSwgMTM5MDQ2OTU1NFUsIDI5 Mjg2NDgxNTBVLAorCSAxMjEzOTk3MDlVLCAzMTcwODM5MDE5VSwgNDA0NDM0NzUwMVUsICA5NTM5 NTM4MTRVLCAzODIxNzEwODUwVSwKKwkzMDg1NTkxMzIzVSwgMzY2NjUzNTU3OVUsIDM1Nzc4Mzc3 MzdVLCAyMDEyMDA4NDEwVSwgMzU2NTQxNzQ3MVUsCisJNDA0NDQwODAxN1UsICA0MzM2MDA5NjVV LCAxNjM3Nzg1NjA4VSwgMTc5ODUwOTc2NFUsICA4NjA3NzA1ODlVLAorCTMwODE0NjYyNzNVLCAz OTgyMzkzNDA5VSwgMjQ1MTkyODMyNVUsIDM0MzcxMjQ3NDJVLCA0MDkzODI4NzM5VSwKKwkzMzU3 Mzg5Mzg2VSwgMjE1NDU5NjEyM1UsICA0OTY1NjgxNzZVLCAyNjUwMDM1MTY0VSwgMjQ3MjM2MTg1 MFUsCisJICAgMzQzODI5OVUsIDIxNTAzNjYxMDFVLCAxNTc3MjU2Njc2VSwgMzgwMjU0NjQxM1Us IDE3ODc3NzQ2MjZVLAorCTQwNzgzMzE1ODhVLCAzNzA2MTAzMTQxVSwgIDE3MDM5MTEzOFUsIDM4 MDYwODUxNTRVLCAxNjgwOTcwMTAwVSwKKwkxOTYxNjM3NTIxVSwgMzMxNjAyOTc2NlUsICA4OTA2 MTAyNzJVLCAxNDUzNzUxNTgxVSwgMTQzMDI4MzY2NFUsCisJMzA1MTA1NzQxMVUsIDM1OTcwMDMx ODZVLCAgNTQyNTYzOTU0VSwgMzc5NjQ5MDI0NFUsIDE2OTAwMTY2ODhVLAorCTM0NDg3NTIyMzhV LCAgNDQwNzAyMTczVSwgIDM0NzI5MDQ5N1UsIDExMjEzMzY2NDdVLCAyNTQwNTg4NjIwVSwKKwkg MjgwODgxODk2VSwgMjQ5NTEzNjQyOFUsICAyMTM3MDczOTZVLCAgIDE1MTA0ODI0VSwgMjk0NjE4 MDM1OFUsCisJIDY1OTAwMDAxNlUsICA1NjYzNzkzODVVLCAyNjE0MDMwOTc5VSwgMjg1NTc2MDE3 MFUsICAzMzQ1MjY1NDhVLAorCTIzMTU1Njk0OTVVLCAyNzI5NTE4NjE1VSwgIDU2NDc0NTg3N1Us IDEyNjM1MTc2MzhVLCAzMTU3MTg1Nzk4VSwKKwkxNjA0ODUyMDU2VSwgMTAxMTYzOTg4NVUsIDI5 NTA1Nzk1MzVVLCAyNTI0MjE5MTg4VSwgIDMxMjk1MTAxMlUsCisJMTUyODg5NjY1MlUsIDEzMjc4 NjEwNTRVLCAyODQ2OTEwMTM4VSwgMzk2Njg1NTkwNVUsIDI1MzY3MjE1ODJVLAorCSA4NTUzNTM5 MTFVLCAxNjg1NDM0NzI5VSwgMzMwMzk3ODkyOVUsIDE2MjQ4NzIwNTVVLCA0MDIwMzI5NjQ5VSwK KwkzMTY0ODAyMTQzVSwgMTY0MjgwMjcwMFUsIDE5NTc3Mjc4NjlVLCAxNzkyMzUyNDI2VSwgMzMz NDYxODkyOVUsCisJMjYzMTU3NzkyM1UsIDMwMjcxNTYxNjRVLCAgODQyMzM0MjU5VSwgMzM1MzQ0 Njg0M1UsIDEyMjY0MzIxMDRVLAorCTE3NDI4MDEzNjlVLCAzNTUyODUyNTM1VSwgMzQ3MTY5ODgy OFUsIDE2NTM5MTAxODZVLCAzMzgwMzMwOTM5VSwKKwkyMzEzNzgyNzAxVSwgMzM1MTAwNzE5NlUs IDIxMjk4Mzk5OTVVLCAxODAwNjgyNDE4VSwgNDA4NTg4NDQyMFUsCisJMTYyNTE1NjYyOVUsIDM2 Njk3MDE5ODdVLCAgNjE1MjExODEwVSwgMzI5NDc5MTY0OVUsIDQxMzExNDM3ODRVLAorCTI1OTA4 NDM1ODhVLCAzMjA3NDIyODA4VSwgMzI3NTA2NjQ2NFUsICA1NjE1OTI4NzJVLCAzOTU3MjA1NzM4 VSwKKwkzMzk2NTc4MDk4VSwgICA0ODQxMDY3OFUsIDM1MDU1NTY0NDVVLCAxMDA1NzY0ODU1VSwg MzkyMDYwNjUyOFUsCisJMjkzNjk4MDQ3M1UsIDIzNzg5MTg2MDBVLCAyNDA0NDQ5ODQ1VSwgMTY0 OTUxNTE2M1UsICA3MDEyMDM1NjNVLAorCTM3MDUyNTYzNDlVLCAgIDgzNzE0MTk5VSwgMzU4Njg1 NDEzMlUsICA5MjI5Nzg0NDZVLCAyODYzNDA2MzA0VSwKKwkzNTIzMzk4OTA3VSwgMjYwNjg2NDgz MlUsIDIzODUzOTkzNjFVLCAzMTcxNzU3ODE2VSwgNDI2Mjg0MTAwOVUsCisJMzY0NTgzNzcyMVUs IDExNjk1Nzk0ODZVLCAzNjY2NDMzODk3VSwgMzE3NDY4OTQ3OVUsIDE0NTc4NjY5NzZVLAorCTM4 MDM4OTUxMTBVLCAzMzQ2NjM5MTQ1VSwgMTkwNzIyNDQwOVUsIDE5Nzg0NzM3MTJVLCAxMDM2NzEy Nzk0VSwKKwkgOTgwNzU0ODg4VSwgMTMwMjc4MjM1OVUsIDE3NjUyNTI0NjhVLCAgNDU5MjQ1NzU1 VSwgMzcyODkyMzg2MFUsCisJMTUxMjg5NDIwOVUsIDIwNDY0OTE5MTRVLCAgMjA3ODYwNTI3VSwg IDUxNDE4ODY4NFUsIDIyODg3MTM2MTVVLAorCTE1OTczNTQ2NzJVLCAzMzQ5NjM2MTE3VSwgMjM1 NzI5MTExNFUsIDM5OTU3OTYyMjFVLCAgOTQ1MzY0MjEzVSwKKwkxODkzMzI2NTE4VSwgMzc3MDgx NDAxNlUsIDE2OTE1NTI3MTRVLCAyMzk3NTI3NDEwVSwgIDk2NzQ4NjM2MVUsCisJIDc3NjQxNjQ3 MlUsIDQxOTc2NjE0MjFVLCAgOTUxMTUwODE5VSwgMTg1Mjc3MDk4M1UsIDQwNDQ2MjQxODFVLAor CTEzOTk0Mzk3MzhVLCA0MTk0NDU1Mjc1VSwgMjI4NDAzNzY2OVUsIDE1NTA3MzQ5NThVLCAzMzIx MDc4MTA4VSwKKwkxODY1MjM1OTI2VSwgMjkxMjEyOTk2MVUsIDI2NjQ5ODA4NzdVLCAxMzU3NTcy MDMzVSwgMjYwMDE5NjQzNlUsCisJMjQ4NjcyODIwMFUsIDIzNzI2Njg3MjRVLCAxNTY3MzE2OTY2 VSwgMjM3NDExMTQ5MVUsIDE4Mzk4NDM1NzBVLAorCSAgMjA4MTU2MTJVLCAzNzI3MDA4NjA4VSwg Mzg3MTk5NjIyOVUsICA4MjQwNjEyNDlVLCAxOTMyNTAzOTc4VSwKKwkzNDA0NTQxNzI2VSwgIDc1 ODQyODkyNFUsIDI2MDkzMzEzNjRVLCAxMjIzOTY2MDI2VSwgMTI5OTE3OTgwOFUsCisJIDY0ODQ5 OTM1MlUsIDIxODAxMzQ0MDFVLCAgODgwODIxMTcwVSwgMzc4MTEzMDk1MFUsICAxMTM0OTEyNzBV LAorCTEwMzI0MTM3NjRVLCA0MTg1ODg0Njk1VSwgMjQ5MDM5NjAzN1UsIDEyMDE5MzI4MTdVLCA0 MDYwOTUxNDQ2VSwKKwk0MTY1NTg2ODk4VSwgMTYyOTgxMzIxMlUsIDI4ODc4MjExNThVLCAgNDE1 MDQ1MzMzVSwgIDYyODkyNjg1NlUsCisJMjE5MzQ2NjA3OVUsIDMzOTE4NDM0NDVVLCAyMjI3NTQw NjgxVSwgMTkwNzA5OTg0NlUsIDI4NDg0NDgzOTVVLAorCTE3MTc4MjgyMjFVLCAxMzcyNzA0NTM3 VSwgMTcwNzU0OTg0MVUsIDIyOTQwNTg4MTNVLCAyMTAxMjE0NDM3VSwKKwkyMDUyNDc5NTMxVSwg MTY5NTgwOTE2NFUsIDMxNzY1ODczMDZVLCAyNjMyNzcwNDY1VSwgICA4MTYzNDQwNFUsCisJMTYw MzIyMDU2M1UsICA2NDQyMzg0ODdVLCAgMzAyODU3NzYzVSwgIDg5NzM1Mjk2OFUsIDI2MTMxNDY2 NTNVLAorCTEzOTE3MzAxNDlVLCA0MjQ1NzE3MzEyVSwgNDE5MTgyODc0OVUsIDE5NDg0OTI1MjZV LCAyNjE4MTc0MjMwVSwKKwkzOTkyOTg0NTIyVSwgMjE3ODg1Mjc4N1UsIDM1OTYwNDQ1MDlVLCAz NDQ1NTczNTAzVSwgMjAyNjYxNDYxNlUsCisJIDkxNTc2MzU2NFUsIDM0MTU2ODkzMzRVLCAyNTMy MTUzNDAzVSwgMzg3OTY2MTU2MlUsIDIyMTUwMjc0MTdVLAorCTMxMTExNTQ5ODZVLCAyOTI5NDc4 MzcxVSwgIDY2ODM0NjM5MVUsIDExNTIyNDEzODFVLCAyNjMyMDI5NzExVSwKKwkzMDA0MTUwNjU5 VSwgMjEzNTAyNTkyNlUsICA5NDg2OTA1MDFVLCAyNzk5MTE5MTE2VSwgNDIyODgyOTQwNlUsCisJ MTk4MTE5NzQ4OVUsIDQyMDkwNjQxMzhVLCAgNjg0MzE4NzUxVSwgMzQ1OTM5Nzg0NVUsICAyMDE3 OTA4NDNVLAorCTQwMjI1NDExMzZVLCAzMDQzNjM1ODc3VSwgIDQ5MjUwOTYyNFUsIDMyNjM0NjY3 NzJVLCAxNTA5MTQ4MDg2VSwKKwkgOTIxNDU5MDI5VSwgMzE5ODg1NzE0NlUsICA3MDU0Nzk3MjFV LCAzODM1OTY2OTEwVSwgMzYwMzM1NjQ2NVUsCisJIDU3NjE1OTc0MVUsIDE3NDI4NDk0MzFVLCAg NTk0MjE0ODgyVSwgMjA1NTI5NDM0M1UsIDM2MzQ4NjE4NjFVLAorCSA0NDk1NzE3OTNVLCAzMjQ2 MzkwNjQ2VSwgMzg2ODIzMjE1MVUsIDE0NzkxNTY1ODVVLCAyOTAwMTI1NjU2VSwKKwkyNDY0ODE1 MzE4VSwgMzk2MDE3ODEwNFUsIDE3ODQyNjE5MjBVLCAgIDE4MzExNDc2VSwgMzYyNzEzNTA1MFUs CisJIDY0NDYwOTY5N1UsICA0MjQ5Njg5OTZVLCAgOTE5ODkwNzAwVSwgMjk4NjgyNDExMFUsICA4 MTY0MjMyMTRVLAorCTQwMDM1NjI4NDRVLCAxMzkyNzE0MzA1VSwgMTc1NzM4NDQyOFUsIDI1Njkw MzA1OThVLCAgOTk1OTQ5NTU5VSwKKwkzODc1NjU5ODgwVSwgMjkzMzgwNzgyM1UsIDI3NTI1MzY4 NjBVLCAyOTkzODU4NDY2VSwgNDAzMDU1ODg5OVUsCisJMjc3MDc4MzQyN1UsIDI3NzU0MDYwMDVV LCAyNzc3NzgxNzQyVSwgMTkzMTI5MjY1NVUsICA0NzIxNDc5MzNVLAorCTM4NjU4NTM4MjdVLCAy NzI2NDcwNTQ1VSwgMjY2ODQxMjg2MFUsIDI4ODcwMDgyNDlVLCAgNDA4OTc5MTkwVSwKKwkzNTc4 MDYzMzIzVSwgMzI0MjA4MjA0OVUsIDE3NzgxOTM1MzBVLCAgIDI3OTgxOTA5VSwgMjM2MjgyNjUx NVUsCisJIDM4OTg3NTY3N1UsIDEwNDM4NzgxNTZVLCAgNTgxNjUzOTAzVSwgMzgzMDU2ODk1MlUs ICAzODk1MzU5NDJVLAorCTM3MTM1MjMxODVVLCAyNzY4MzczMzU5VSwgMjUyNjEwMTU4MlUsIDE5 OTg2MTgxOTdVLCAxMTYwODU5NzA0VSwKKwkzOTUxMTcyNDg4VSwgMTA5ODAwNTAwM1UsICA5MDYy NzU2OTlVLCAzNDQ2MjI4MDAyVSwgMjIyMDY3Nzk2M1UsCisJMjA1OTMwNjQ0NVUsICAxMzIxOTk1 NzFVLCAgNDc2ODM4NzkwVSwgMTg2ODAzOTM5OVUsIDMwOTczNDQ4MDdVLAorCSA4NTczMDA5NDVV LCAgMzk2MzQ1MDUwVSwgMjgzNTkxOTkxNlUsIDE3ODIxNjg4MjhVLCAxNDE5NTE5NDcwVSwKKwk0 Mjg4MTM3NTIxVSwgIDgxOTA4NzIzMlUsICA1OTYzMDE0OTRVLCAgODcyODIzMTcyVSwgMTUyNjg4 ODIxN1UsCisJIDgwNTE2MTQ2NVUsIDExMTYxODYyMDVVLCAyODI5MDAyNzU0VSwgMjM1MjYyMDEy MFUsICA2MjAxMjE1MTZVLAorCSAzNTQxNTkyNjhVLCAzNjAxOTQ5Nzg1VSwgIDIwOTU2ODEzOFUs IDEzNTIzNzE3MzJVLCAyMTQ1OTc3MzQ5VSwKKwk0MjM2ODcxODM0VSwgMTUzOTQxNDA3OFUsIDM1 NTgxMjYyMDZVLCAzMjI0ODU3MDkzVSwgNDE2NDE2NjY4MlUsCisJMzgxNzU1MzQ0MFUsIDMzMDE3 ODAyNzhVLCAyNjgyNjk2ODM3VSwgMzczNDk5NDc2OFUsIDEzNzA5NTAyNjBVLAorCTE0Nzc0MjEy MDJVLCAyNTIxMzE1NzQ5VSwgMTMzMDE0ODEyNVUsIDEyNjE1NTQ3MzFVLCAyNzY5MTQzNjg4VSwK KwkzNTU0NzU2MjkzVSwgNDIzNTg4MjY3OFUsIDMyNTQ2ODYwNTlVLCAzNTMwNTc5OTUzVSwgMTIx NTQ1MjYxNVUsCisJMzU3NDk3MDkyM1UsIDQwNTcxMzE0MjFVLCAgNTg5MjI0MTc4VSwgMTAwMDA5 ODE5M1UsICAxNzExOTA3MThVLAorCTI1MjE4NTIwNDVVLCAyMzUxNDQ3NDk0VSwgMjI4NDQ0MTU4 MFUsIDI2NDY2ODU1MTNVLCAzNDg2OTMzNTYzVSwKKwkzNzg5ODY0OTYwVSwgMTE5MDUyODE2MFUs IDE3MDI1MzY3ODJVLCAxNTM0MTA1NTg5VSwgNDI2Mjk0NjgyN1UsCisJMjcyNjY4NjgyNlUsIDM1 ODQ1NDQ4NDFVLCAyMzQ4MjcwMTI4VSwgMjE0NTA5MjI4MVUsIDI1MDI3MTg1MDlVLAorCTEwMjc4 MzI0MTFVLCAzNTcxMTcxMTUzVSwgMTI4NzM2MTE2MVUsIDQwMTE0NzQ0MTFVLCAzMjQxMjE1MzUx VSwKKwkyNDE5NzAwODE4VSwgIDk3MTI0MjcwOVUsIDEzNjE5NzU3NjNVLCAxMDk2ODQyNDgyVSwg MzI3MTA0NTUzN1UsCisJICA4MTE2NTQ0OVUsICA2MTI0MzgwMjVVLCAzOTEyOTY2Njc4VSwgMTM1 NjkyOTgxMFUsICA3MzM1NDU3MzVVLAorCSA1MzcwMDM4NDNVLCAxMjgyOTUzMDg0VSwgIDg4NDQ1 ODI0MVUsICA1ODg5MzAwOTBVLCAzOTMwMjY5ODAxVSwKKwkyOTYxNDcyNDUwVSwgMTIxOTUzNTUz NFUsIDM2MzIyNTE5NDNVLCAgMjY4MTgzOTAzVSwgMTQ0MTI0MDUzM1UsCisJMzY1MzkwMzM2MFUs IDM4NTQ0NzMzMTlVLCAyMjU5MDg3MzkwVSwgMjU0ODI5MzA0OFUsIDIwMjI2NDExOTVVLAorCTIx MDU1NDM5MTFVLCAxNzY0MDg1MjE3VSwgMzI0NjE4MzE4NlUsICA0ODI0Mzg4MDVVLCAgODg4MzE3 ODk1VSwKKwkyNjI4MzE0NzY1VSwgMjQ2NjIxOTg1NFUsICA3MTc1NDYwMDRVLCAyMzIyMjM3MDM5 VSwgIDQxNjcyNTIzNFUsCisJMTU0NDA0OTkyM1UsIDE3OTc5NDQ5NzNVLCAzMzk4NjUyMzY0VSwg MzExMTkwOTQ1NlUsICA0ODU3NDI5MDhVLAorCTIyNzc0OTEwNzJVLCAxMDU2MzU1MDg4VSwgMzE4 MTAwMTI3OFUsICAxMjk2OTUwNzlVLCAyNjkzNjI0NTUwVSwKKwkxNzY0NDM4NTY0VSwgMzc5Nzc4 NTQ3MFUsICAxOTU1MDM3MTNVLCAzMjY2NTE5NzI1VSwgMjA1MzM4OTQ0NFUsCisJMTk2MTUyNzgx OFUsIDM0MDAyMjY1MjNVLCAzNzc3OTAzMDM4VSwgMjU5NzI3NDMwN1UsIDQyMzU4NTEwOTFVLAor CTQwOTQ0MDY2NDhVLCAyMTcxNDEwNzg1VSwgMTc4MTE1MTM4NlUsIDEzNzg1NzcxMTdVLCAgNjU0 NjQzMjY2VSwKKwkzNDI0MDI0MTczVSwgMzM4NTgxMzMyMlUsICA2NzkzODU3OTlVLCAgNDc5Mzgw OTEzVSwgIDY4MTcxNTQ0MVUsCisJMzA5NjIyNTkwNVUsICAyNzY4MTM0MDlVLCAzODU0Mzk4MDcw VSwgMjcyMTEwNTM1MFUsICA4MzEyNjMzMTVVLAorCTMyNzYyODAzMzdVLCAyNjI4MzAxNTIyVSwg Mzk4NDg2ODQ5NFUsIDE0NjYwOTk4MzRVLCAyMTA0OTIyMTE0VSwKKwkxNDEyNjcyNzQzVSwgIDgy MDMzMDQwNFUsIDM0OTE1MDEwMTBVLCAgOTQyNzM1ODMyVSwgIDcxMDY1MjgwN1UsCisJMzk3MjY1 MjA5MFUsICA2Nzk4ODEwODhVLCAgIDQwNTc3MDA5VSwgMzcwNTI4NjM5N1UsIDI4MTU0MjM0ODBV LAorCTM1NjYyNjI0MjlVLCAgNjYzMzk2NTEzVSwgMzc3Nzg4NzQyOVUsIDQwMTY2NzA2NzhVLCAg NDA0NTM5MzcwVSwKKwkxMTQyNzEyOTI1VSwgMTE0MDE3MzQwOFUsIDI5MTMyNDgzNTJVLCAyODcy MzIxMjg2VSwgIDI2Mzc1MTg0MVUsCisJMzE3NTE5NjA3M1UsIDMxNjI1NTc1ODFVLCAyODc4OTk2 NjE5VSwgICA3NTQ5ODU0OFUsIDM4MzY4MzMxNDBVLAorCTMyODQ2NjQ5NTlVLCAxMTU3NTIzODA1 VSwgIDExMjg0NzM3NlUsICAyMDc4NTU2MDlVLCAxMzM3OTc5Njk4VSwKKwkxMjIyNTc4NDUxVSwg IDE1NzEwNzE3NFUsICA5MDExNzQzNzhVLCAzODgzNzE3MDYzVSwgMTYxODYzMjYzOVUsCisJMTc2 Nzg4OTQ0MFUsIDQyNjQ2OTg4MjRVLCAxNTgyOTk5MzEzVSwgIDg4NDQ3MTk5N1UsIDI1MDg4MjUw OThVLAorCTM3NTYzNzA3NzFVLCAyNDU3MjEzNTUzVSwgMzU2NTc3Njg4MVUsIDM3MDk1ODMyMTRV LCAgOTE1NjA5NjAxVSwKKwkgNDYwODMzNTI0VSwgMTA5MTA0OTU3NlUsICAgODU1MjI4ODBVLCAg ICAyNTUzMjUxVSwgIDEzMjEwMjgwOVUsCisJMjQyOTg4MjQ0MlUsIDI1NjIwODQ2MTBVLCAxMzg2 NTA3NjMzVSwgNDExMjQ3MTIyOVUsICAgMjE5NjUyMTNVLAorCTE5ODE1MTYwMDZVLCAyNDE4NDM1 NjE3VSwgMzA1NDg3MjA5MVUsIDQyNTE1MTEyMjRVLCAyMDI1NzgzNTQzVSwKKwkxOTE2OTExNTEy VSwgMjQ1NDQ5MTEzNlUsIDM5Mzg0NDA4OTFVLCAzODI1ODY5MTE1VSwgMTEyMTY5ODYwNVUsCisJ MzQ2MzA1MjI2NVUsICA4MDIzNDAxMDFVLCAxOTEyODg2ODAwVSwgNDAzMTk5NzM2N1UsIDM1NTA2 NDA0MDZVLAorCTE1OTYwOTY5MjNVLCAgNjEwMTUwNjAwVSwgIDQzMTQ2NDQ1N1UsIDI1NDEzMjUw NDZVLCAgNDg2NDc4MDAzVSwKKwkgNzM5NzA0OTM2VSwgMjg2MjY5NjQzMFUsIDMwMzc5MDMxNjZV LCAxMTI5NzQ5Njk0VSwgMjYxMTQ4MTI2MVUsCisJMTIyODk5MzQ5OFUsICA1MTAwNzU1NDhVLCAz NDI0OTYyNTg3VSwgMjQ1ODY4OTY4MVUsICA4MTg5MzQ4MzNVLAorCTQyMzMzMDkxMjVVLCAxNjA4 MTk2MjUxVSwgMzQxOTQ3NjAxNlUsIDE4NTg1NDM5MzlVLCAyNjgyMTY2NTI0VSwKKwkzMzE3ODU0 Mjg1VSwgIDYzMTk4NjE4OFUsIDMwMDgyMTQ3NjRVLCAgNjEzODI2NDEyVSwgMzU2NzM1ODIyMVUs CisJMzUxMjM0Mzg4MlUsIDE1NTI0Njc0NzRVLCAzMzE2MTYyNjcwVSwgMTI3NTg0MTAyNFUsIDQx NDIxNzM0NTRVLAorCSA1NjUyNjc4ODFVLCAgNzY4NjQ0ODIxVSwgIDE5ODMxMDEwNVUsIDIzOTY2 ODg2MTZVLCAxODM3NjU5MDExVSwKKwkgMjAzNDI5MzM0VSwgIDg1NDUzOTAwNFUsIDQyMzU4MTE1 MThVLCAzMzM4MzA0OTI2VSwgMzczMDQxODY5MlUsCisJMzg1MjI1NDk4MVUsIDMwMzIwNDY0NTJV LCAyMzI5ODExODYwVSwgMjMwMzU5MDU2NlUsIDI2OTYwOTIyMTJVLAorCTM4OTQ2NjU5MzJVLCAg MTQ1ODM1NjY3VSwgIDI0OTU2MzY1NVUsIDE5MzIyMTA4NDBVLCAyNDMxNjk2NDA3VSwKKwkzMzEy NjM2NzU5VSwgIDIxNDk2MjYyOVUsIDIwOTIwMjY5MTRVLCAzMDIwMTQ1NTI3VSwgNDA3MzAzOTg3 M1UsCisJMjczOTEwNTcwNVUsIDEzMDgzMzY3NTJVLCAgODU1MTA0NTIyVSwgMjM5MTcxNTMyMVUs ICAgNjc0NDg3ODVVLAorCSA1NDc5ODk0ODJVLCAgODU0NDExODAyVSwgMzYwODYzMzc0MFUsICA0 MzE3MzE1MzBVLCAgNTM3Mzc1NTg5VSwKKwkzODg4MDA1NzYwVSwgIDY5NjA5OTE0MVUsICAzOTcz NDMyMzZVLCAxODY0NTExNzgwVSwgICA0NDAyOTczOVUsCisJMTcyOTUyNjg5MVUsIDE5OTMzOTg2 NTVVLCAyMDEwMTczNDI2VSwgMjU5MTU0Njc1NlUsICAyNzUyMjMyOTFVLAorCTE1MDM5MDAyOTlV LCA0MjE3NzY1MDgxVSwgMjE4NTYzNTI1MlUsIDExMjI0MzYwMTVVLCAzNTUwMTU1MzY0VSwKKwkg NjgxNzA3MTk0VSwgMzI2MDQ3OTMzOFUsICA5MzM1NzkzOTdVLCAyOTgzMDI5MjgyVSwgMjUwNTUw NDU4N1UsCisJMjY2NzQxMDM5M1UsIDI5NjI2ODQ0OTBVLCA0MTM5NzIxNzA4VSwgMjY1ODE3MjI4 NFUsIDI0NTI2MDIzODNVLAorCTI2MDc2MzE2MTJVLCAxMzQ0Mjk2MjE3VSwgMzA3NTM5ODcwOVUs IDI5NDk3ODUyOTVVLCAxMDQ5OTU2MTY4VSwKKwkzOTE3MTg1MTI5VSwgMjE1NTY2MDE3NFUsIDMy ODA1MjQ0NzVVLCAxNTAzODI3ODY3VSwgIDY3NDM4MDc2NVUsCisJMTkxODQ2ODE5M1UsIDM4NDM5 ODM2NzZVLCAgNjM0MzU4MjIxVSwgMjUzODMzNTY0M1UsIDE4NzMzNTEyOThVLAorCTMzNjg3MjM3 NjNVLCAyMTI5MTQ0MTMwVSwgMzIwMzUyODYzM1UsIDMwODcxNzQ5ODZVLCAyNjkxNjk4ODcxVSwK KwkyNTE2Mjg0Mjg3VSwgICAyNDQzNzc0NVUsIDExMTgzODE0NzRVLCAyODE2MzE0ODY3VSwgMjQ0 ODU3NjAzNVUsCisJNDI4MTk4OTY1NFUsICAyMTcyODc4MjVVLCAgMTY1ODcyODg4VSwgMjYyODk5 NTcyMlUsIDM1MzM1MjUxMTZVLAorCTI3MjE2NjkxMDZVLCAgODcyMzQwNTY4VSwgMzQyOTkzMDY1 NVUsIDMzMDkwNDczMDRVLCAzOTE2NzA0OTY3VSwKKwkzMjcwMTYwMzU1VSwgMTM0ODg4NDI1NVUs IDE2MzQ3OTc2NzBVLCAgODgxMjE0OTY3VSwgNDI1OTYzMzU1NFUsCisJIDE3NDYxMzAyN1UsIDEx MDM5NzQzMTRVLCAxNjI1MjI0MjMyVSwgMjY3ODM2ODI5MVUsIDExMzM4NjY3MDdVLAorCTM4NTMw ODI2MTlVLCA0MDczMTk2NTQ5VSwgMTE4OTYyMDc3N1UsICA2MzcyMzg2NTZVLCAgOTMwMjQxNTM3 VSwKKwk0MDQyNzUwNzkyVSwgMzg0MjEzNjA0MlUsIDI0MTcwMDcyMTJVLCAyNTI0OTA3NTEwVSwg MTI0MzAzNjgyN1UsCisJMTI4MjA1OTQ0MVUsIDM3NjQ1ODg3NzRVLCAxMzk0NDU5NjE1VSwgMjMy MzYyMDAxNVUsIDExNjYxNTIyMzFVLAorCTMzMDc0Nzk2MDlVLCAzODQ5MzIyMjU3VSwgMzUwNzQ0 NTY5OVUsIDQyNDc2OTY2MzZVLCAgNzU4MzkzNzIwVSwKKwkgOTY3NjY1MTQxVSwgMTA5NTI0NDU3 MVUsIDEzMTk4MTIxNTJVLCAgNDA3Njc4NzYyVSwgMjY0MDYwNTIwOFUsCisJMjE3MDc2NjEzNFUs IDM2NjM1OTQyNzVVLCA0MDM5MzI5MzY0VSwgMjUxMjE3NTUyMFUsICA3MjU1MjMxNTRVLAorCTIy NDk4MDcwMDRVLCAzMzEyNjE3OTc5VSwgMjQxNDYzNDE3MlUsIDEyNzg0ODIyMTVVLCAgMzQ5MjA2 NDg0VSwKKwkxNTczMDYzMzA4VSwgMTE5NjQyOTEyNFUsIDM4NzMyNjQxMTZVLCAyNDAwMDY3ODAx VSwgIDI2ODc5NTE2N1UsCisJIDIyNjE3NTQ4OVUsIDI5NjEzNjcyNjNVLCAxOTY4NzE5NjY1VSwg ICA0MjY1NjM3MFUsIDEwMTA3OTA2OTlVLAorCSA1NjE2MDA2MTVVLCAyNDIyNDUzOTkyVSwgMzA4 MjE5NzczNVUsIDE2MzY3MDA0ODRVLCAzOTc3NzE1Mjk2VSwKKwkzMTI1MzUwNDgyVSwgMzQ3ODAy MTUxNFUsIDIyMjc4MTk0NDZVLCAxNTQwODY4MDQ1VSwgMzA2MTkwODk4MFUsCisJMTA4NzM2MjQw N1UsIDM2MjUyMDAyOTFVLCAgMzYxOTM3NTM3VSwgIDU4MDQ0MTg5N1UsIDE1MjAwNDM2NjZVLAor CTIyNzA4NzU0MDJVLCAxMDA5MTYxMjYwVSwgMjUwMjM1NTg0MlUsIDQyNzg3Njk3ODVVLCAgNDcz OTAyNDEyVSwKKwkxMDU3MjM5MDgzVSwgMTkwNTgyOTAzOVUsIDE0ODM3ODExNzdVLCAyMDgwMDEx NDE3VSwgMTIwNzQ5NDI0NlUsCisJMTgwNjk5MTk1NFUsIDIxOTQ2NzQ0MDNVLCAzNDU1OTcyMjA1 VSwgIDgwNzIwNzY3OFUsIDM2NTU2NTU2ODdVLAorCSA2NzQxMTI5MThVLCAgMTk1NDI1NzUyVSwg MzkxNzg5MDA5NVUsIDE4NzQzNjQyMzRVLCAxODM3ODkyNzE1VSwKKwkzNjYzNDc4MTY2VSwgMTU0 ODg5MjAxNFUsIDI1NzA3NDg3MTRVLCAyMDQ5OTI5ODM2VSwgMjE2NzAyOTcwNFUsCisJIDY5NzU0 Mzc2N1UsIDM0OTk1NDUwMjNVLCAzMzQyNDk2MzE1VSwgMTcyNTI1MTE5MFUsIDM1NjEzODc0NjlV LAorCTI5MDU2MDY2MTZVLCAxNTgwMTgyNDQ3VSwgMzkzNDUyNTkyN1UsIDQxMDMxNzI3OTJVLCAx MzY1NjcyNTIyVSwKKwkxNTM0Nzk1NzM3VSwgMzMwODY2NzQxNlUsIDI4NDE5MTE0MDVVLCAzOTQz MTgyNzMwVSwgNDA3MjAyMDMxM1UsCisJMzQ5NDc3MDQ1MlUsIDMzMzI2MjY2NzFVLCAgIDU1MzI3 MjY3VSwgIDQ3ODAzMDYwM1UsICA0MTEwODA2MjVVLAorCTM0MTk1MjkwMTBVLCAxNjA0NzY3ODIz VSwgMzUxMzQ2ODAxNFUsICA1NzA2Njg1MTBVLCAgOTEzNzkwODI0VSwKKwkyMjgzOTY3OTk1VSwg IDY5NTE1OTQ2MlUsIDM4MjU1NDI5MzJVLCA0MTUwNjk4MTQ0VSwgMTgyOTc1ODY5OVUsCisJIDIw Mjg5NTU5MFUsIDE2MDkxMjI2NDVVLCAxMjY3NjUxMDA4VSwgMjkxMDMxNTUwOVUsIDI1MTE0NzU0 NDVVLAorCTI0Nzc0MjM4MTlVLCAzOTMyMDgxNTc5VSwgIDkwMDg3OTk3OVUsIDIxNDU1ODgzOTBV LCAyNjcwMDA3NTA0VSwKKwkgNTgwODE5NDQ0VSwgMTg2NDk5NjgyOFUsIDI1MjYzMjU5NzlVLCAx MDE5MTI0MjU4VSwgIDgxNTUwODYyOFUsCisJMjc2NTkzMzk4OVUsIDEyNzczMDEzNDFVLCAzMDA2 MDIxNzg2VSwgIDg1NTU0MDk1NlUsICAyODgwMjU3MTBVLAorCTE5MTk1OTQyMzdVLCAyMzMxMjIz ODY0VSwgIDE3NzQ1MjQxMlUsIDI0NzU4NzAzNjlVLCAyNjg5MjkxNzQ5VSwKKwkgODY1MTk0Mjg0 VSwgIDI1MzQzMjE1MlUsIDI2Mjg1MzE4MDRVLCAyODYxMjA4NTU1VSwgMjM2MTU5NzU3M1UsCisJ MTY1Mzk1MjEyMFUsIDEwMzk2NjEwMjRVLCAyMTU5OTU5MDc4VSwgMzcwOTA0MDQ0MFUsIDM1NjQ3 MTg1MzNVLAorCTI1OTY4Nzg2NzJVLCAyMDQxNDQyMTYxVSwgICAzMTE2NDY5NlUsIDI2NjI5NjI0 ODVVLCAzNjY1NjM3MzM5VSwKKwkxNjc4MTE1MjQ0VSwgMjY5OTgzOTgzMlUsIDM2NTE5Njg1MjBV LCAzNTIxNTk1NTQxVSwgIDQ1ODQzMzMwM1UsCisJMjQyMzA5NjgyNFUsICAgMjE4MzE3NDFVLCAg MzgwMDExNzAzVSwgMjQ5ODE2ODcxNlUsICA4NjE4MDYwODdVLAorCTE2NzM1NzQ4NDNVLCA0MTg4 Nzk0NDA1VSwgMjUyMDU2MzY1MVUsIDI2MzIyNzkxNTNVLCAyMTcwNDY1NTI1VSwKKwk0MTcxOTQ5 ODk4VSwgMzg4NjAzOTYyMVUsIDE2NjEzNDQwMDVVLCAzNDI0Mjg1MjQzVSwgIDk5MjU4ODM3MlUs CisJMjUwMDk4NDE0NFUsIDI5OTMyNDg0OTdVLCAzNTkwMTkzODk1VSwgMTUzNTMyNzM2NVUsICA1 MTU2NDU2MzZVLAorCSAxMzE2MzM0NTBVLCAzNzI5NzYwMjYxVSwgMTYxMzA0NTEwMVUsIDMyNTQx OTQyNzhVLCAgIDE1ODg5Njc4VSwKKwkxNDkzNTkwNjg5VSwgIDI0NDE0ODcxOFUsIDI5OTE0NzI2 NjJVLCAxNDAxNjI5MzMzVSwgIDc3NzM0OTg3OFUsCisJMjUwMTQwMTcwM1UsIDQyODU1MTgzMTdV LCAzNzk0NjU2MTc4VSwgIDk1NTUyNjUyNlUsIDM0NDIxNDI4MjBVLAorCTM5NzAyOTgzNzRVLCAg NzM2MDI1NDE3VSwgMjczNzM3MDc2NFUsIDEyNzE1MDk3NDRVLCAgNDQwNTcwNzMxVSwKKwkgMTM2 MTQxODI2VSwgMTU5NjE4OTUxOFUsICA5MjMzOTkxNzVVLCAgMjU3NTQxNTE5VSwgMzUwNTc3NDI4 MVUsCisJMjE5NDM1ODQzMlUsIDI1MTgxNjI5OTFVLCAxMzc5ODkzNjM3VSwgMjY2Nzc2NzA2MlUs IDM3NDgxNDYyNDdVLAorCTE4MjE3MTI2MjBVLCAzOTIzMTYxMzg0VSwgMTk0NzgxMTQ0NFUsIDIz OTI1MjcxOTdVLCA0MTI3NDE5Njg1VSwKKwkxNDIzNjk0OTk4VSwgNDE1NjU3Njg3MVUsIDEzODI4 ODU1ODJVLCAzNDIwMTI3Mjc5VSwgMzYxNzQ5OTUzNFUsCisJMjk5NDM3NzQ5M1UsIDQwMzgwNjM5 ODZVLCAxOTE4NDU4NjcyVSwgMjk4MzE2Njc5NFUsIDQyMDA0NDkwMzNVLAorCSAzNTMyOTQ1NDBV LCAxNjA5MjMyNTg4VSwgIDI0MzkyNjY0OFUsIDIzMzI4MDMyOTFVLCAgNTA3OTk2ODMyVSwKKwky MzkyODM4NzkzVSwgNDA3NTE0NTE5NlUsIDIwNjA5ODQzNDBVLCA0Mjg3NDc1MTM2VSwgICA4ODIz MjYwMlUsCisJMjQ5MTUzMTE0MFUsIDQxNTk3MjU2MzNVLCAyMjcyMDc1NDU1VSwgIDc1OTI5ODYx OFUsICAyMDEzODQ1NTRVLAorCSA4MzgzNTYyNTBVLCAxNDE2MjY4MzI0VSwgIDY3NDQ3NjkzNFUs ICAgOTA3OTUzNjRVLCAgMTQxNjcyMjI5VSwKKwkzNjYwMzk5NTg4VSwgNDE5NjQxNzI1MVUsIDMy NDkyNzAyNDRVLCAzNzc0NTMwMjQ3VSwgICA1OTU4NzI2NVUsCisJMzY4MzE2NDIwOFUsICAgMTkz OTI1NzVVLCAxNDYzMTIzNjk3VSwgMTg4MjIwNTM3OVUsICAyOTM3ODA0ODlVLAorCTI1NTMxNjA2 MjJVLCAyOTMzOTA0Njk0VSwgIDY3NTYzODIzOVUsIDI4NTEzMzY5NDRVLCAxNDM1MjM4NzQzVSwK KwkyNDQ4NzMwMTgzVSwgIDgwNDQzNjMwMlUsIDIxMTk4NDU5NzJVLCAgMzIyNTYwNjA4VSwgNDA5 NzczMjcwNFUsCisJMjk4NzgwMjU0MFUsICA2NDE0OTI2MTdVLCAyNTc1NDQyNzEwVSwgNDIxNzgy MjcwM1UsIDMyNzE4MzUzMDBVLAorCTI4MzY0MTgzMDBVLCAzNzM5OTIxNjIwVSwgMjEzODM3ODc2 OFUsIDI4Nzk3NzE4NTVVLCA0Mjk0OTAzNDIzVSwKKwkzMTIxMDk3OTQ2VSwgMjYwMzQ0MDQ4NlUs IDI1NjA4MjAzOTFVLCAxMDEyOTMwOTQ0VSwgMjMxMzQ5OTk2N1UsCisJIDU4NDQ4OTM2OFUsIDM0 MzExNjU3NjZVLCAgODk3Mzg0ODY5VSwgMjA2MjUzNzczN1UsIDI4NDc4ODkyMzRVLAorCTM3NDIz NjI0NTBVLCAyOTUxMTc0NTg1VSwgNDIwNDYyMTA4NFUsIDExMDkzNzM4OTNVLCAzNjY4MDc1Nzc1 VSwKKwkyNzUwMTM4ODM5VSwgMzUxODA1NTcwMlUsICA3MzMwNzI1NThVLCA0MTY5MzI1NDAwVSwg IDc4ODQ5MzYyNVUKK307CitzdGF0aWMgY29uc3QgdWludDY0X3QgaW5pdF9nZW5fcmFuZF82NF9l eHBlY3RlZFtdID0geworCUtRVSgxNjkyNDc2NjI0Njg2OTAzOTI2MCksIEtRVSggODIwMTQzODY4 NzMzMzM1MjcxNCksCisJS1FVKCAyMjY1MjkwMjg3MDE1MDAxNzUwKSwgS1FVKDE4Mzk3MjY0NjEx ODA1NDczODMyKSwKKwlLUVUoIDMzNzUyNTUyMjMzMDIzODQzNTgpLCBLUVUoIDYzNDU1NTk5NzU0 MTY4Mjg3OTYpLAorCUtRVSgxODIyOTczOTI0Mjc5MDMyODA3MyksIEtRVSggNzU5Njc5Mjc0MjA5 ODgwMDkwNSksCisJS1FVKCAgMjU1MzM4NjQ3MTY5Njg1OTgxKSwgS1FVKCAyMDUyNzQ3MjQwMDQ4 NjEwMzAwKSwKKwlLUVUoMTgzMjgxNTE1NzYwOTcyOTkzNDMpLCBLUVUoMTI0NzI5MDU0MjExMzM3 OTY1NjcpLAorCUtRVSgxMTMxNTI0NTM0OTcxNzYwMDg2MyksIEtRVSgxNjU5NDExMDE5Nzc3NTg3 MTIwOSksCisJS1FVKDE1NzA4NzUxOTY0NjMyNDU2NDUwKSwgS1FVKDEwNDUyMDMxMjcyMDU0NjMy NTM1KSwKKwlLUVUoMTEwOTc2NDY3MjA4MTE0NTQzODYpLCBLUVUoIDQ1NTYwOTA2Njg0NDU3NDU0 NDEpLAorCUtRVSgxNzExNjE4NzY5MzA5MDY2MzEwNiksIEtRVSgxNDkzMTUyNjgzNjE0NDUxMDY0 NSksCisJS1FVKCA5MTkwNzUyMjE4MDIwNTUyNTkxKSwgS1FVKCA5NjI1ODAwMjg1NzcxOTAxNDAx KSwKKwlLUVUoMTM5OTUxNDEwNzc2NTk5NzI4MzIpLCBLUVUoIDUxOTQyMDkwOTQ5Mjc4Mjk2MjUp LAorCUtRVSggNDE1Njc4ODM3OTE1MTA2MzMwMyksIEtRVSggODUyMzQ1MjU5Mzc3MDEzOTQ5NCks CisJS1FVKDE0MDgyMzgyMTAzMDQ5Mjk2NzI3KSwgS1FVKCAyNDYyNjAxODYzOTg2MDg4NDgzKSwK KwlLUVUoIDMwMzA1ODM0NjE1OTI4NDA2NzgpLCBLUVUoIDUyMjE2MjIwNzc4NzI4Mjc2ODEpLAor CUtRVSggMzA4NDIxMDY3MTIyODk4MTIzNiksIEtRVSgxMzk1Njc1ODM4MTM4OTk1MzgyMyksCisJ S1FVKDEzNTAzODg5ODU2MjEzNDIzODMxKSwgS1FVKDE1Njk2OTA0MDI0MTg5ODM2MTcwKSwKKwlL UVUoIDQ2MTI1ODQxNTI4NzcwMzYyMDYpLCBLUVUoIDYyMzExMzU1Mzg0NDc4Njc4ODEpLAorCUtR VSgxMDE3MjQ1NzI5NDE1ODg2OTQ2OCksIEtRVSggNjQ1MjI1ODYyODQ2NjcwODE1MCksCisJS1FV KDE0MDQ0NDMyODI0OTE3MzMwMjIxKSwgS1FVKCAgMzcwMTY4MzY0NDgwMDQ0Mjc5KSwKKwlLUVUo MTAxMDIxNDQ2ODY0MjcxOTMzNTkpLCBLUVUoICA2Njc4NzA0ODk5OTQ3NzYwNzYpLAorCUtRVSgg MjczMjI3MTk1NjkyNTg4NTg1OCksIEtRVSgxODAyNzc4ODkwNTk3NzI4NDE1MSksCisJS1FVKDE1 MDA5ODQyNzg4NTgyOTIzODU5KSwgS1FVKCA3MTM2MzU3OTYwMTgwMTk5NTQyKSwKKwlLUVUoMTU5 MDE3MzYyNDM0NzU1NzgxMjcpLCBLUVUoMTY5NTEyOTM3ODUzNTI2MTU3MDEpLAorCUtRVSgxMDU1 MTQ5MjEyNTI0MzY5MTYzMiksIEtRVSgxNzY2ODg2OTk2OTE0NjQzNDgwNCksCisJS1FVKDEzNjQ2 MDAyOTcxMTc0MzkwNDQ1KSwgS1FVKCA5ODA0NDcxMDUwNzU5NjEzMjQ4KSwKKwlLUVUoIDU1MTE2 NzA0Mzk2NTU5MzU0OTMpLCBLUVUoMTgxMDMzNDIwOTEwNzA0MDA5MjYpLAorCUtRVSgxNzIyNDUx Mjc0NzY2NTEzNzUzMyksIEtRVSgxNTUzNDYyNzQ4Mjk5MjYxODE2OCksCisJS1FVKCAxNDIzODEz MjY2MTg2NTgyNjQ3KSwgS1FVKDE1ODIxMTc2ODA3OTMyOTMwMDI0KSwKKwlLUVUoICAgMzAzMjMz Njk3MzM2MDcxNTYpLCBLUVUoMTE1OTkzODI0OTQ3MjM0Nzk0MDMpLAorCUtRVSggIDY1Mzg1NjA3 NjU4NjgxMDA2MiksIEtRVSggMzE3NjQzNzM5NTE0NDg5OTY1OSksCisJS1FVKDE0MDI4MDc2MjY4 MTQ3OTYzOTE3KSwgS1FVKDE2MTU2Mzk4MjcxODA5NjY2MTk1KSwKKwlLUVUoIDMxNjY5NTU0ODQ4 NDgyMDE2NzYpLCBLUVUoIDU3NDY4MDU2MjAxMzY5MTkzOTApLAorCUtRVSgxNzI5Nzg0NTIwODg5 MTI1NjU5MyksIEtRVSgxMTY5MTY1MzE4MzIyNjQyODQ4MyksCisJS1FVKDE3OTAwMDI2MTQ2NTA2 OTgxNTc3KSwgS1FVKDE1Mzg3MzgyMTE1NzU1OTcxMDQyKSwKKwlLUVUoMTY5MjM1Njc2ODEwNDA4 NDU5NDMpLCBLUVUoIDgwMzkwNTc1MTcxOTkzODg2MDYpLAorCUtRVSgxMTc0ODQwOTI0MTQ2ODYy OTI2MyksIEtRVSggIDc5NDM1ODI0NTUzOTA3NjA5NSksCisJS1FVKDEzNDM4NTAxOTY0NjkzNDAx MjQyKSwgS1FVKDE0MDM2ODAzMjM2NTE1NjE4OTYyKSwKKwlLUVUoIDUyNTIzMTEyMTUyMDU0MjQ3 MjEpLCBLUVUoMTc4MDY1ODk2MTI5MTU1MDkwODEpLAorCUtRVSggNjgwMjc2NzA5MjM5NzU5NjAw NiksIEtRVSgxNDIxMjEyMDQzMTE4NDU1NzE0MCksCisJS1FVKCAxMDcyOTUxMzY2NzYxMzg1NzEy KSwgS1FVKDEzMDk4NDkxNzgwNzIyODM2Mjk2KSwKKwlLUVUoIDk0NjY2NzY4Mjg3MTA3OTczNTMp LCBLUVUoMTI2NzMwNTY4NDkwNDI4MzAwODEpLAorCUtRVSgxMjc2MzcyNjYyMzY0NTM1NzU4MCks IEtRVSgxNjQ2ODk2MTY1Mjk5OTMwOTQ5MyksCisJS1FVKDE1MzA1OTc5ODc1NjM2NDM4OTI2KSwg S1FVKDE3NDQ0NzEzMTUxMjIzNDQ5NzM0KSwKKwlLUVUoIDU2OTIyMTQyNjc2Mjc4ODM2NzQpLCBL UVUoMTMwNDk1ODkxMzkxOTYxNTE1MDUpLAorCUtRVSggIDg4MDExNTIwNzgzMTY3MDc0NSksIEtR VSggMTc3NjUyOTA3NTc4OTY5NTQ5OCksCisJS1FVKDE2Njk1MjI1ODk3ODAxNDY2NDg1KSwgS1FV KDEwNjY2OTAxNzc4Nzk1MzQ2ODQ1KSwKKwlLUVUoIDYxNjQzODkzNDY3MjI4MzM4NjkpLCBLUVUo IDI4NjM4MTc3OTMyNjQzMDA0NzUpLAorCUtRVSggOTQ2NDA0OTkyMTg4NjMwNDc1NCksIEtRVSgg Mzk5MzU2NjYzNjc0MDAxNTQ2OCksCisJS1FVKCA5OTgzNzQ5NjkyNTI4NTE0MTM2KSwgS1FVKDE2 Mzc1Mjg2MDc1MDU3NzU1MjExKSwKKwlLUVUoMTYwNDI2NDM0MTcwMDU0NDA4MjApLCBLUVUoMTE0 NDU0MTk2NjI5MjM0ODk4NzcpLAorCUtRVSggNzk5OTAzODg0Njg4NTE1ODgzNiksIEtRVSggNjcy MTkxMzY2MTcyMTUxMTUzNSksCisJS1FVKCA1MzYzMDUyNjU0MTM5MzU3MzIwKSwgS1FVKCAxODE3 Nzg4NzYxMTczNTg0MjA1KSwKKwlLUVUoMTMyOTA5NzQzODY0NDU4NTY0NDQpLCBLUVUoIDQ2NTAz NTA4MTg5Mzc5ODQ2ODApLAorCUtRVSggODIxOTE4MzUyODEwMjQ4NDgzNiksIEtRVSggMTU2OTg2 MjkyMzUwMDgxOTg5OSksCisJS1FVKCA0MTg5MzU5NzMyMTM2NjQxODYwKSwgS1FVKDE0MjAyODIy OTYxNjgzMTQ4NTgzKSwKKwlLUVUoIDQ0NTc0OTgzMTUzMDk0MjkwNTgpLCBLUVUoMTMwODkwNjcz ODcwMTkwNzQ4MzQpLAorCUtRVSgxMTA3NTUxNzE1MzMyODkyNzI5MyksIEtRVSgxMDI3NzAxNjI0 ODMzNjY2ODM4OSksCisJS1FVKCA3MDcwNTA5NzI1MzI0NDAxMTIyKSwgS1FVKDE3ODA4ODkyMDE3 NzgwMjg5MzgwKSwKKwlLUVUoMTMxNDMzNjczMzk5MDkyODczNDkpLCBLUVUoIDEzNzc3NDM3NDUz NjAwODUxNTEpLAorCUtRVSggNTc0OTM0MTgwNzQyMTI4NjQ4NSksIEtRVSgxNDgzMjgxNDYxNjc3 MDkzMTMyNSksCisJS1FVKCA3Njg4ODIwNjM1MzI0MzU5NDkyKSwgS1FVKDEwOTYwNDc0MDExNTM5 NzcwMDQ1KSwKKwlLUVUoICAgODE5NzAwNjY2NTMxNzk3OTApLCBLUVUoMTI2MTk0NzYwNzI2MDc4 NzgwMjIpLAorCUtRVSggNDQxOTU2NjYxNjI3MTIwMTc0NCksIEtRVSgxNTE0NzkxNzMxMTc1MDU2 ODUwMyksCisJS1FVKCA1NTQ5NzM5MTgyODUyNzA2MzQ1KSwgS1FVKCA3MzA4MTk4Mzk3OTc1MjA0 NzcwKSwKKwlLUVUoMTM1ODA0MjU0OTY2NzEyODkyNzgpLCBLUVUoMTcwNzA3NjQ3ODUyMTAxMzAz MDEpLAorCUtRVSggODIwMjgzMjg0NjI4NTYwNDQwNSksIEtRVSggNjg3MzA0NjI4NzY0MDg4NzI0 OSksCisJS1FVKCA2OTI3NDI0NDM0MzA4MjA2MTE0KSwgS1FVKCA2MTM5MDE0NjQ1OTM3MjI0ODc0 KSwKKwlLUVUoMTAyOTAzNzM2NDU5Nzg0ODc2MzkpLCBLUVUoMTU5MDQyNjEyOTE3MDE1MjM4MDQp LAorCUtRVSggOTYyODc0MzQ0MjA1NzgyNjg4MyksIEtRVSgxODM4MzQyOTA5NjI1NTU0NjcxNCks CisJS1FVKCA0OTc3NDEzMjY1NzUzNjg2OTY3KSwgS1FVKCA3NzE0MzE3NDkyNDI1MDEyODY5KSwK KwlLUVUoIDkwMjUyMzI1ODYzMDk5MjYxOTMpLCBLUVUoMTQ2MjczMzgzNTk3NzY3MDkxMDcpLAor CUtRVSgxNDc1OTg0OTg5NjQ2Nzc5MDc2MyksIEtRVSgxMDkzMTEyOTQzNTg2NDQyMzI1MiksCisJ S1FVKCA0NTg4NDU2OTg4Nzc1MDE0MzU5KSwgS1FVKDEwNjk5Mzg4NTMxNzk3MDU2NzI0KSwKKwlL UVUoICA0Njg2NTIyNjg4NjkyMzg3OTIpLCBLUVUoIDU3NTU5NDMwMzUzMjgwNzgwODYpLAorCUtR VSggMjEwMjQzNzM3OTk4ODU4MDIxNiksIEtRVSggOTk4NjMxMjc4NjUwNjY3NDAyOCksCisJS1FV KCAyNjU0MjA3MTgwMDQwOTQ1NjA0KSwgS1FVKCA4NzI2NjM0NzkwNTU5OTYwMDYyKSwKKwlLUVUo ICAxMDA0OTcyMzQ4NzE4MDgxMzcpLCBLUVUoIDI4MDAxMzcxNzY5NTE0MjU4MTkpLAorCUtRVSgg NjA3NjYyNzYxMjkxODU1MzQ4NyksIEtRVSggNTc4MDE4NjkxOTE4NjE1Mjc5NiksCisJS1FVKCA4 MTc5MTgzNTk1NzY5OTI5MDk4KSwgS1FVKCA2MDA5NDI2MjgzNzE2MjIxMTY5KSwKKwlLUVUoIDI3 OTY2NjI1NTEzOTc0NDkzNTgpLCBLUVUoIDE3NTY5NjEzNjcwNDE5ODY3NjQpLAorCUtRVSggNjk3 Mjg5NzkxNzM1NTYwNjIwNSksIEtRVSgxNDUyNDc3NDM0NTM2ODk2ODI0MyksCisJS1FVKCAyNzcz NTI5Njg0NzQ1NzA2OTQwKSwgS1FVKCA0ODUzNjMyMzc2MjEzMDc1OTU5KSwKKwlLUVUoIDQxOTgx Nzc5MjM3MzEzNTgxMDIpLCBLUVUoIDgyNzEyMjQ5MTMwODQxMzk3NzYpLAorCUtRVSggMjc0MTc1 MzEyMTYxMTA5MjIyNiksIEtRVSgxNjc4MjM2NjE0NTk5NjczMTE4MSksCisJS1FVKDE1NDI2MTI1 MjM4OTcyNjQwNzkwKSwgS1FVKDEzNTk1NDk3MTAwNjcxMjYwMzQyKSwKKwlLUVUoIDMxNzM1MzEw MjI4MzYyNTk4OTgpLCBLUVUoIDY1NzMyNjQ1NjAzMTk1MTE2NjIpLAorCUtRVSgxODA0MTExMTk1 MTUxMTE1NzQ0MSksIEtRVSggMjM1MTQzMzU4MTgzMzEzNTk1MiksCisJS1FVKCAzMTEzMjU1NTc4 OTA4MTczNDg3KSwgS1FVKCAxNzM5MzcxMzMwODc3ODU4Nzg0KSwKKwlLUVUoMTYwNDYxMjY1NjI3 ODkxNjU0ODApLCBLUVUoIDgwNzIxMDE2NTIyMTQxOTI5MjUpLAorCUtRVSgxNTI2NzA5MTU4NDA5 MDY2NDkxMCksIEtRVSggOTMwOTU3OTIwMDQwMzY0ODk0MCksCisJS1FVKCA1MjE4ODkyNDM5NzUy NDA4NzIyKSwgS1FVKDE0NDkyNDc3MjQ2MDA0MzM3MTE1KSwKKwlLUVUoMTc0MzEwMzc1ODY2Nzk3 NzA2MTkpLCBLUVUoIDczODUyNDgxMzU5NjMyNTA0ODApLAorCUtRVSggOTU4MDE0NDk1NjU2NTU2 MDY2MCksIEtRVSggNDkxOTU0NjIyODA0MDAwODcyMCksCisJS1FVKDE1MjYxNTQyNDY5MTQ1MDM1 NTg0KSwgS1FVKDE4MjMzMjk3MjcwODIyMjUzMTAyKSwKKwlLUVUoIDU0NTMyNDg0MTc5OTIzMDI4 NTcpLCBLUVUoIDkzMDk1MTkxNTU5MzE0NjAyODUpLAorCUtRVSgxMDM0MjgxMzAxMjM0NTI5MTc1 NiksIEtRVSgxNTY3NjA4NTE4Njc4NDc2MjM4MSksCisJS1FVKDE1OTEyMDkyOTUwNjkxMzAwNjQ1 KSwgS1FVKCA5MzcxMDUzMTIxNDk5MDAzMTk1KSwKKwlLUVUoIDk4OTcxODY0NzgyMjY4NjY3NDYp LCBLUVUoMTQwNjE4NTgyODcxODgxOTYzMjcpLAorCUtRVSggIDEyMjU3NTk3MTYyMDc4ODExOSks IEtRVSgxMjE0Njc1MDk2OTExNjMxNzc1NCksCisJS1FVKCA0NDM4MzE3MjcyODEzMjQ1MjAxKSwg S1FVKCA4MzMyNTc2NzkxMDA5NTI3MTE5KSwKKwlLUVUoMTM5MDc3ODU2OTE3ODY1NDIwNTcpLCBL UVUoMTAzNzQxOTQ4ODcyODMyODc0NjcpLAorCUtRVSggMjA5ODc5ODc1NTY0OTA1OTU2NiksIEtR VSggMzQxNjIzNTE5Nzc0ODI4ODg5NCksCisJS1FVKCA4Njg4MjY5OTU3MzIwNzczNDg0KSwgS1FV KCA3NTAzOTY0NjAyMzk3MzcxNTcxKSwKKwlLUVUoMTY3MjQ5NzcwMTUxNDc0NzgyMzYpLCBLUVUo IDk0NjE1MTI4NTU0Mzk4NTgxODQpLAorCUtRVSgxMzI1OTA0OTc0NDUzNDUzNDcyNyksIEtRVSgg MzU4MzA5NDk1MjU0Mjg5OTI5NCksCisJS1FVKCA4NzY0MjQ1NzMxMzA1NTI4MjkyKSwgS1FVKDEz MjQwODIzNTk1NDYyMDg4OTg1KSwKKwlLUVUoMTM3MTYxNDE2MTc2MTc5MTA0NDgpLCBLUVUoMTgx MTQ5Njk1MTk5MzU5NjA5NTUpLAorCUtRVSggMjI5NzU1MzYxNTc5ODMwMjIwNiksIEtRVSggNDU4 NTUyMTQ0Mjk0NDY2MzM2MiksCisJS1FVKDE3Nzc2ODU4NjgwNjMwMTk4Njg2KSwgS1FVKCA0Njg1 ODczMjI5MTkyMTYzMzYzKSwKKwlLUVUoICAxNTI1NTgwODA2NzExMzU2MjcpLCBLUVUoMTU0MjQ5 MDA1NDA4NDI2NzAwODgpLAorCUtRVSgxMzIyOTYzMDI5NzEzMDAyNDEwOCksIEtRVSgxNzUzMDI2 ODc4ODI0NTcxODcxNyksCisJS1FVKDE2Njc1NjMzOTEzMDY1NzE0MTQ0KSwgS1FVKCAzMTU4OTEy NzE3ODk3NTY4MDY4KSwKKwlLUVUoMTUzOTkxMzIxODUzODAwODcyODgpLCBLUVUoIDc0MDE0MTg3 NDQ1MTU2Nzc4NzIpLAorCUtRVSgxMzEzNTQxMjkyMjM0NDM5ODUzNSksIEtRVSggNjM4NTMxNDM0 NjEwMDUwOTUxMSksCisJS1FVKDEzOTYyODY3MDAxMTM0MTYxMTM5KSwgS1FVKDEwMjcyNzgwMTU1 NDQyNjcxOTk5KSwKKwlLUVUoMTI4OTQ4NTYwODY1OTc3NjkxNDIpLCBLUVUoMTMzNDA4Nzc3OTUy ODc1NTQ5OTQpLAorCUtRVSgxMjkxMzYzMDYwMjA5NDYwNzM5NiksIEtRVSgxMjU0MzE2NzkxMTEx OTc5Mzg1NyksCisJS1FVKDE3MzQzNTcwMzcyMjUxODczMDk2KSwgS1FVKDEwOTU5NDg3NzY0NDk0 MTUwNTQ1KSwKKwlLUVUoIDY5NjY3Mzc5NTMwOTM4MjExMjgpLCBLUVUoMTM3ODA2OTkxMzU0OTY5 ODg2MDEpLAorCUtRVSggNDQwNTA3MDcxOTM4MDE0MjA0NiksIEtRVSgxNDkyMzc4ODM2NTYwNzI4 NDk4MiksCisJS1FVKCAyODY5NDg3Njc4OTA1MTQ4MzgwKSwgS1FVKCA2NDE2MjcyNzU0MTk3MTg4 NDAzKSwKKwlLUVUoMTUwMTczODA0NzU5NDM2MTI1OTEpLCBLUVUoIDE5OTU2MzYyMjA5MTg0Mjk0 ODcpLAorCUtRVSggMzQwMjAxNjgwNDYyMDEyMjcxNiksIEtRVSgxNTgwMDE4ODY2MzQwNzA1NzA4 MCksCisJS1FVKDExMzYyMzY5OTkwMzkwOTMyODgyKSwgS1FVKDE1MjYyMTgzNTAxNjM3OTg2MTQ3 KSwKKwlLUVUoMTAyMzkxNzUzODUzODczNzE0OTQpLCBLUVUoIDkzNTIwNDI0MjAzNjU3NDgzMzQp LAorCUtRVSggMTY4MjQ1NzAzNDI4NTExOTg3NSksIEtRVSggMTcyNDcxMDY1MTM3NjI4OTY0NCks CisJS1FVKCAyMDM4MTU3MDk4ODkzODE3OTY2KSwgS1FVKCA5ODk3ODI1NTU4MzI0NjA4NzczKSwK KwlLUVUoIDE0Nzc2NjYyMzY1MTkxNjQ3MzYpLCBLUVUoMTY4MzUzOTczMTQ1MTEyMzM2NDApLAor CUtRVSgxMDM3MDg2NjMyNzAwNTM0NjUwOCksIEtRVSgxMDE1NzUwNDM3MDY2MDYyMTk4MiksCisJ S1FVKDEyMTEzOTA0MDQ1MzM1ODgyMDY5KSwgS1FVKDEzMzI2NDQ0NDM5NzQyNzgzMDA4KSwKKwlL UVUoMTEzMDI3NjkwNDMwMDA3NjU4MDQpLCBLUVUoMTM1OTQ5Nzk5MjM5NTUyMjg0ODQpLAorCUtR VSgxMTc3OTM1MTc2MjYxMzQ3NTk2OCksIEtRVSggMzc4NjEwMTYxOTUzOTI5ODM4MyksCisJS1FV KCA4MDIxMTIyOTY5MTgwODQ2MDYzKSwgS1FVKDE1NzQ1OTA0NDAxMTYyNTAwNDk1KSwKKwlLUVUo MTA3NjIxNjg0NjU5OTM4OTcyNjcpLCBLUVUoMTM1NTIwNTg5NTc4OTYzMTkwMjYpLAorCUtRVSgx MTIwMDIyODY1NTI1MjQ2MjAxMyksIEtRVSggNTAzNTM3MDM1NzMzNzQ0MTIyNiksCisJS1FVKCA3 NTkzOTE4OTg0NTQ1NTAwMDEzKSwgS1FVKCA1NDE4NTU0OTE4MzYxNTI4NzAwKSwKKwlLUVUoIDQ4 NTgyNzA3OTk0MDU0NDYzNzEpLCBLUVUoIDk5NzQ2NTk1NjY4NzYyODI1NDQpLAorCUtRVSgxODIy NzU5NTkyMjI3Mzk1Nzg1OSksIEtRVSggMjc3Mjc3ODQ0MzYzNTY1NjIyMCksCisJS1FVKDE0Mjg1 MTQzMDUzMTgyMDg1Mzg1KSwgS1FVKCA5OTM5NzAwOTkyNDI5NjAwNDY5KSwKKwlLUVUoMTI3NTYx ODU5MDQ1NDU1OTgwNjgpLCBLUVUoIDIwMjA3ODMzNzUzNjczNDUyNjIpLAorCUtRVSggICA1NzAy Njc3NTA1ODMzMTIyNyksIEtRVSggIDk1MDgyNzg2NzkzMDA2NTQ1NCksCisJS1FVKCA2NjAyMjc5 NjcwMTQ1MzcxMjE3KSwgS1FVKCAyMjkxMTcxNTM1NDQzNTY2OTI5KSwKKwlLUVUoIDU4MzIzODA3 MjQ0MjUwMTAzMTMpLCBLUVUoIDEyMjAzNDM5MDQ3MTU5ODIyODUpLAorCUtRVSgxNzA0NTU0MjU5 ODU5ODAzNzYzMyksIEtRVSgxNTQ2MDQ4MTc3OTcwMjgyMDk3MSksCisJS1FVKDEzOTQ4Mzg4Nzc5 OTQ5MzY1MTMwKSwgS1FVKDEzOTc1MDQwMTc1NDMwODI5NTE4KSwKKwlLUVUoMTc0Nzc1MzgyMzg0 MjU1NDE3NjMpLCBLUVUoMTExMDQ2NjMwNDE4NTE3NDU3MjUpLAorCUtRVSgxNTg2MDk5Mjk1NzE0 MTE1NzU4NyksIEtRVSgxNDUyOTQzNDYzMzAxMjk1MDEzOCksCisJS1FVKCAyNTA0ODM4MDE5MDc1 Mzk0MjAzKSwgS1FVKCA3NTEyMTEzODgyNjExMTIxODg2KSwKKwlLUVUoIDQ4NTk5NzM1NTk5ODA4 ODY2MTcpLCBLUVUoIDEyNTg2MDE1NTU3MDMyNTAyMTkpLAorCUtRVSgxNTU5NDU0ODE1NzUxNDMx NjM5NCksIEtRVSggNDUxNjczMDE3MTk2Mzc3MzA0OCksCisJS1FVKDExMzgwMTAzMTkzOTA1MDMx OTgzKSwgS1FVKCA2ODA5MjgyMjM5OTgyMzUzMzQ0KSwKKwlLUVUoMTgwNDUyNTY5MzA0MjAwNjUw MDIpLCBLUVUoIDI0NTM3MDI2ODMxMDg3OTE4NTkpLAorCUtRVSggIDk3NzIxNDU4Mjk4Njk4MTQ2 MCksIEtRVSggMjAwNjQxMDQwMjIzMjcxMzQ2NiksCisJS1FVKCA2MTkyMjM2MjY3MjE2Mzc4MzU4 KSwgS1FVKCAzNDI5NDY4NDAyMTk1Njc1MjUzKSwKKwlLUVUoMTgxNDY5MzMxNTMwMTczNDg5MjEp LCBLUVUoMTczNjk5Nzg1NzYzNjcyMzExMzkpLAorCUtRVSggMTI0Njk0MDcxNzIzMDM4NjYwMyks IEtRVSgxMTMzNTc1ODg3MDA4MzMyNzExMCksCisJS1FVKDE0MTY2NDg4ODAxNzMwMzUzNjgyKSwg S1FVKCA5MDA4NTczMTI3MjY5NjM1NzMyKSwKKwlLUVUoMTA3NzYwMjUzODk4MjA2NDM4MTUpLCBL UVUoMTUwODc2MDU0NDE5MDM5NDI5NjIpLAorCUtRVSggMTM1OTU0MjQ2MjcxMjE0NzkyMiksIEtR VSgxMzg5ODg3NDQxMTIyNjQ1NDIwNiksCisJS1FVKDE3OTExMTc2MDY2NTM2ODA0NDExKSwgS1FV KCA5NDM1NTkwNDI4NjAwMDg1Mjc0KSwKKwlLUVUoICAyOTQ0ODg1MDk5Njc4NjQwMDcpLCBLUVUo IDg4OTAxMTEzOTc1Njc5MjIwNDYpLAorCUtRVSggNzk4NzgyMzQ3NjAzNDMyODc3OCksIEtRVSgx MzI2MzgyNzU4MjQ0MDk2NzY1MSksCisJS1FVKCA3NTAzNzc0ODEzMTA2NzUxNTczKSwgS1FVKDE0 OTc0NzQ3Mjk2MTg1NjQ2ODM3KSwKKwlLUVUoIDg1MDQ3NjUwMzcwMzIxMDMzNzUpLCBLUVUoMTcz NDAzMDMzNTc0NDQ1MzYyMTMpLAorCUtRVSggNzcwNDYxMDkxMjk2NDQ4NTc0MyksIEtRVSggODEw NzUzMzY3MDMyNzIwNTA2MSksCisJS1FVKCA5MDYyOTY5ODM1MDgzMzE1OTg1KSwgS1FVKDE2OTY4 OTYzMTQyMTI2NzM0MTg0KSwKKwlLUVUoMTI5NTgwNDEyMTQxOTA4MTAxODApLCBLUVUoIDI3MjAx NzAxNDc3NTk1NzAyMDApLAorCUtRVSggMjk4NjM1ODk2Mzk0MjE4OTU2NiksIEtRVSgxNDg4NDIy NjMyMjIxOTM1NjU4MCksCisJS1FVKCAgMjg2MjI0MzI1MTQ0MzY4NTIwKSwgS1FVKDExMzEzODAw NDMzMTU0Mjc5Nzk3KSwKKwlLUVUoMTgzNjY4NDk1Mjg0Mzk2NzMyNDgpLCBLUVUoMTc4OTk3MjU5 Mjk0ODIzNjg3ODkpLAorCUtRVSggMzczMDAwNDI4NDYwOTEwNjc5OSksIEtRVSggMTY1NDQ3NDMw MjA1Mjc2NzIwNSksCisJS1FVKCA1MDA2Njk4MDA3MDQ3MDc3MDMyKSwgS1FVKCA4MTk2ODkzOTEz NjAxMTgyODM4KSwKKwlLUVUoMTUyMTQ1NDE3NzQ0MjUyMTE2NDApLCBLUVUoMTczOTEzNDYwNDU2 MDY2MjYwNzMpLAorCUtRVSggODM2OTAwMzU4NDA3Njk2OTA4OSksIEtRVSggMzkzOTA0NjczMzM2 ODU1MDI5MyksCisJS1FVKDEwMTc4NjM5NzIwMzA4NzA3Nzg1KSwgS1FVKCAyMTgwMjQ4NjY5MzA0 Mzg4Njk3KSwKKwlLUVUoICAgNjI4OTQzOTEzMDAxMjYzMjIpLCBLUVUoIDkyMDU3MDg5NjE3MzYy MjMxOTEpLAorCUtRVSggNjgzNzQzMTA1ODE2NTM2MDQzOCksIEtRVSggMzE1MDc0Mzg5MDg0ODMw ODIxNCksCisJS1FVKDE3ODQ5MzMwNjU4MTExNDY0NTgzKSwgS1FVKDEyMjE0ODE1NjQzMTM1NDUw ODY1KSwKKwlLUVUoMTM0MTA3MTM4NDA1MTk2MDM0MDIpLCBLUVUoIDMyMDA3NzgxMjY2OTIwNDY4 MDIpLAorCUtRVSgxMzM1NDc4MDA0MzA0MTc3OTMxMyksIEtRVSggIDgwMDg1MDAyMjc1Njg4NjAz NiksCisJS1FVKDE1NjYwMDUyOTMzOTUzMDY3NDMzKSwgS1FVKCA2NTcyODIzNTQ0MTU0Mzc1Njc2 KSwKKwlLUVUoMTEwMzAyODE4NTcwMTU4MTkyNjYpLCBLUVUoMTI2ODIyNDE5NDE0NzE0MzM4MzUp LAorCUtRVSgxMTY1NDEzNjQwNzMwMDI3NDY5MyksIEtRVSggNDUxNzc5NTQ5MjM4ODY0MTEwOSks CisJS1FVKCA5NzU3MDE3MzcxNTA0NTI0MjQ0KSwgS1FVKDE3ODMzMDQzNDAwNzgxODg5Mjc3KSwK KwlLUVUoMTI2ODUwODUyMDE3NDc3OTIyMjcpLCBLUVUoMTA0MDgwNTc3Mjg4MzUwMTk1NzMpLAor CUtRVSggICA5ODM3MDQxODUxMzQ1NTIyMSksIEtRVSggNjczMjY2MzU1NTY5Njg0ODU5OCksCisJ S1FVKDEzMjQ4NTMwOTU5OTQ4NTI5NzgwKSwgS1FVKCAzNTMwNDQxNDAxMjMwNjIyODI2KSwKKwlL UVUoMTgxODgyNTE5OTI4OTU2NjA2MTUpLCBLUVUoIDE4NDc5MTgzNTQxODYzODM3NTYpLAorCUtR VSggMTEyNzM5MjE5MDQwMjY2MDkyMSksIEtRVSgxMTI5MzczNDY0MzE0MzgxOTQ2MyksCisJS1FV KCAzMDE1NTA2MzQ0NTc4NjgyOTgyKSwgS1FVKDEzODUyNjQ1NDQ0MDcxMTUzMzI5KSwKKwlLUVUo IDIxMjEzNTk2NTkwOTEzNDkxNDIpLCBLUVUoIDEyOTQ2MDQzNzYxMTY2Nzc2OTQpLAorCUtRVSgg NTYxNjU3NjIzMTI4NjM1MjMxOCksIEtRVSggNzExMjUwMjQ0Mjk1NDIzNTYyNSksCisJS1FVKDEx Njc2MjI4MTk5NTUxNTYxNjg5KSwgS1FVKDEyOTI1MTgyODAzMDA3MzA1MzU5KSwKKwlLUVUoIDc4 NTIzNzU1MTgxNjA0OTMwODIpLCBLUVUoIDExMzY1MTMxMzA1MzkyOTYxNTQpLAorCUtRVSggNTYz NjkyMzkwMDkxNjU5MzE5NSksIEtRVSggMzIyMTA3NzUxNzYxMjYwNzc0NyksCisJS1FVKDE3Nzg0 NzkwNDY1Nzk4MTUyNTEzKSwgS1FVKCAzNTU0MjEwMDQ5MDU2OTk1OTM4KSwKKwlLUVUoMTc0NzY4 Mzk2ODU4NzgyMjU4NzQpLCBLUVUoIDMyMDY4MzYzNzI1ODU1NzU3MzIpLAorCUtRVSggMjc2NTMz Mzk0NTY0NDgyMzQzMCksIEtRVSgxMDA4MDA3MDkwMzcxODc5OTUyOCksCisJS1FVKCA1NDEyMzcw ODE4ODc4Mjg2MzUzKSwgS1FVKCA5Njg5Njg1ODg3NzI2MjU3NzI4KSwKKwlLUVUoIDgyMzYxMTc1 MDkxMjM1MzM5OTgpLCBLUVUoIDE5NTExMzkxMzcxNjUwNDAyMTQpLAorCUtRVSggNDQ5MjIwNTIw OTIyNzk4MDM0OSksIEtRVSgxNjU0MTI5MTIzMDg2MTYwMjk2NyksCisJS1FVKCAxNDI0MzcxNTQ4 MzAxNDM3OTQwKSwgS1FVKCA5MTE3NTYyMDc5NjY5MjA2Nzk0KSwKKwlLUVUoMTQzNzQ2ODE1NjMy NTE2OTE2MjUpLCBLUVUoMTM4NzMxNjQwMzAxOTk5MjEzMDMpLAorCUtRVSggNjY4MDMxNzk0Njc3 MDkzNjczMSksIEtRVSgxNTU4NjMzNDAyNjkxODI3NjIxNCksCisJS1FVKDEwODk2MjEzOTUwOTc2 MTA5ODAyKSwgS1FVKCA5NTA2MjYxOTQ5NTk2NDEzNjg5KSwKKwlLUVUoIDk5MDM5NDk1NzQzMDgw NDA2MTYpLCBLUVUoIDYwMzgzOTczNDQ1NTcyMDQ0NzApLAorCUtRVSggIDE3NDYwMTQ2NTQyMjM3 MzY0OCksIEtRVSgxNTk0NjE0MTE5MTMzODIzODAzMCksCisJS1FVKDE3MTQyMjI1NjIwOTkyMDQ0 OTM3KSwgS1FVKCA3NTUyMDMwMjgzNzg0NDc3MDY0KSwKKwlLUVUoIDI5NDczNzIzODQ1MzI5NDc5 OTcpLCBLUVUoICA1MTA3OTcwMjE2ODgxOTc3MTEpLAorCUtRVSggNDk2MjQ5OTQzOTI0OTM2MzQ2 MSksIEtRVSggICAyMzc3MDMyMDE1ODM4NTM1NyksCisJS1FVKCAgOTU5Nzc0NDk5MTA1MTM4MTI0 KSwgS1FVKCAxNDY4Mzk2MDExNTE4Nzg4Mjc2KSwKKwlLUVUoIDIwMTU2OTgwMDY4NTIzMTIzMDgp LCBLUVUoIDQxNDk0MDA3MTg0ODk5ODAxMzYpLAorCUtRVSggNTk5MjkxNjA5OTUyMjM3MTE4OCks IEtRVSgxMDgxOTE4MjkzNTI2NTUzMTA3NiksCisJS1FVKDE2MTg5Nzg3OTk5MTkyMzUxMTMxKSwg S1FVKCAgMzQyODMzOTYxNzkwMjYxOTUwKSwKKwlLUVUoMTI0NzA4MzAzMTk1NTA0OTUzMzYpLCBL UVUoMTgxMjg0OTUwNDE5MTI4MTI1MDEpLAorCUtRVSggMTE5MzYwMDg5OTcyMzUyNDMzNyksIEtR VSggOTA1Njc5MzY2NjU5MDA3OTc3MCksCisJS1FVKCAyMTU0MDIxMjI3MDQxNjY5MDQxKSwgS1FV KCA0OTYzNTcwMjEzOTUxMjM1NzM1KSwKKwlLUVUoIDQ4NjUwNzU5NjAyMDkyMTE0MDkpLCBLUVUo IDIwOTc3MjQ1OTkwMzk5NDI5NjMpLAorCUtRVSggMjAyNDA4MDI3ODU4MzE3OTg0NSksIEtRVSgx MTUyNzA1NDU0OTE5NjU3NjczNiksCisJS1FVKDEwNjUwMjU2MDg0MTgyMzkwMjUyKSwgS1FVKCA0 ODA4NDA4NjQ4Njk1NzY2NzU1KSwKKwlLUVUoIDE2NDI4MzkyMTUwMTM3ODg4NDQpLCBLUVUoMTA2 MDcxODc5NDgyNTAzOTgzOTApLAorCUtRVSggNzA3Njg2ODE2NjA4NTkxMzUwOCksIEtRVSggIDcz MDUyMjU3MTEwNjg4NzAzMiksCisJS1FVKDEyNTAwNTc5MjQwMjA4NTI0ODk1KSwgS1FVKCA0NDg0 MzkwMDk3MzExMzU1MzI0KSwKKwlLUVUoMTUxNDU4MDEzMzA3MDA2MjM4NzApLCBLUVUoIDgwNTU4 Mjc2NjEzOTI5NDQwMjgpLAorCUtRVSggNTg2NTA5Mjk3NjgzMjcxMjI2OCksIEtRVSgxNTE1OTIx MjUwODA1MzYyNTE0MyksCisJS1FVKCAzNTYwOTY0NTgyODc2NDgzMzQxKSwgS1FVKCA0MDcwMDUy NzQxMzQ0NDM4MjgwKSwKKwlLUVUoIDYwMzI1ODU3MDk4ODY4NTU2MzQpLCBLUVUoMTU2NDMyNjIz MjA5MDQ2MDQ4NzMpLAorCUtRVSggMjU2NTExOTc3MjI5MzM3MTExMSksIEtRVSggIDMxODMxNDI5 MzA2NTM0ODI2MCksCisJS1FVKDE1MDQ3NDU4NzQ5MTQxNTExODcyKSwgS1FVKCA3NzcyNzg4Mzg5 ODExNTI4NzMwKSwKKwlLUVUoIDcwODExODc0OTQzNDM4MDE5NzYpLCBLUVUoIDY0NjUxMzYwMDk0 NjcyNTM5NDcpLAorCUtRVSgxMDQyNTk0MDY5MjU0MzM2MjA2OSksIEtRVSggIDU1NDYwODE5MDMx ODMzOTExNSksCisJS1FVKDE0Nzk2Njk5ODYwMzAyMTI1MjE0KSwgS1FVKCAxNjM4MTUzMTM0NDMx MTExNDQzKSwKKwlLUVUoMTAzMzY5Njc0NDcwNTIyNzYyNDgpLCBLUVUoIDg0MTIzMDgwNzAzOTY1 OTI5NTgpLAorCUtRVSggNDAwNDU1NzI3NzE1MjA1MTIyNiksIEtRVSggODE0MzU5ODk5NzI3ODc3 NDgzNCksCisJS1FVKDE2NDEzMzIzOTk2NTA4NzgzMjIxKSwgS1FVKDEzMTM5NDE4NzU4MDMzOTk0 OTQ5KSwKKwlLUVUoIDk3NzI3MDkxMzgzMzUwMDY2NjcpLCBLUVUoIDI4MTgxNjcxNTkyODcxNTc2 NTkpLAorCUtRVSgxNzA5MTc0MDU3MzgzMjUyMzY2OSksIEtRVSgxNDYyOTE5OTAxMzEzMDc1MTYw OCksCisJS1FVKDE4MjY4MzIyNzExNTAwMzM4MTg1KSwgS1FVKCA4MjkwOTYzNDE1Njc1NDkzMDYz KSwKKwlLUVUoIDg4MzA4NjQ5MDc0NTI1NDI1ODgpLCBLUVUoIDE2MTQ4MzkwODQ2Mzc0OTQ4NDkp LAorCUtRVSgxNDg1NTM1ODUwMDg3MDQyMjIzMSksIEtRVSggMzQ3Mjk5Njc0ODM5MjUxOTkzNyks CisJS1FVKDE1MzE3MTUxMTY2MjY4ODc3NzE2KSwgS1FVKCA1ODI1ODk1MDE4Njk4NDAwMzYyKSwK KwlLUVUoMTY3MzAyMDg0MjkzNjc1NDQxMjkpLCBLUVUoMTA0ODExNTY1NzgxNDEyMDI4MDApLAor CUtRVSggNDc0NjE2NjUxMjM4MjgyMzc1MCksIEtRVSgxMjcyMDg3NjAxNDQ3MjQ2NDk5OCksCisJ S1FVKCA4ODI1MTc3MTI0NDg2NzM1OTcyKSwgS1FVKDEzNzMzNDQ3Mjk2ODM3NDY3ODM4KSwKKwlL UVUoIDY0MTIyOTM3NDE2ODEzNTk2MjUpLCBLUVUoIDgzMTMyMTMxMzg3NTYxMzUwMzMpLAorCUtR VSgxMTQyMTQ4MTE5NDgwMzcxMjUxNyksIEtRVSggNzk5NzAwNzY5MTU0NDE3NDAzMiksCisJS1FV KCA2ODEyOTYzODQ3OTE3NjA1OTMwKSwgS1FVKCA5NjgzMDkxOTAxMjI3NTU4NjQxKSwKKwlLUVUo MTQ3MDM1OTQxNjU4NjAzMjQ3MTMpLCBLUVUoIDE3NzU0NzYxNDQ1MTk2MTgzMDkpLAorCUtRVSgg MjcyNDI4MzI4ODUxNjQ2OTUxOSksIEtRVSggIDcxNzY0MjU1NTE4NTg1Njg2OCksCisJS1FVKCA4 NzM2NDAyMTkyMjE1MDkyMzQ2KSwgS1FVKDExODc4ODAwMzM2NDMxMzgxMDIxKSwKKwlLUVUoIDQz NDg4MTYwNjYwMTcwNjEyOTMpLCBLUVUoIDYxMTUxMTI3NTY1ODM2MzEzMDcpLAorCUtRVSggOTE3 NjU5NzIzOTY2NzE0Mjk3NiksIEtRVSgxMjYxNTYyMjcxNDg5NDI1OTIwNCksCisJS1FVKDEwMjgz NDA2NzExMzAxMzg1OTg3KSwgS1FVKCA1MTExNzYyNTA5NDg1Mzc5NDIwKSwKKwlLUVUoIDMxMTgy OTAwNTExOTg2ODg0NDkpLCBLUVUoIDczNDUxMjMwNzE2MzIyMzIxNDUpLAorCUtRVSggOTE3NjQy MzQ1MTY4ODY4MjM1OSksIEtRVSggNDg0Mzg2NTQ1NjE1Nzg2ODk3MSksCisJS1FVKDEyMDA4MDM2 MzYzNzUyNTY2MDg4KSwgS1FVKDEyMDU4ODM3MTgxOTE5Mzk3NzIwKSwKKwlLUVUoIDIxNDUwNzM5 NTg0NTczNDczNjYpLCBLUVUoIDE1MjY1MDQ4ODE2NzI4MTgwNjcpLAorCUtRVSggMzQ4ODgzMDEw NTU2NzEzNDg0OCksIEtRVSgxMzIwODM2Mjk2MDY3NDgwNTE0MyksCisJS1FVKCA0MDc3NTQ5Njcy ODk5NTcyMTkyKSwgS1FVKCA3NzcwOTk1Njg0NjkzODE4MzY1KSwKKwlLUVUoIDEzOTg1MzIzNDE1 NDYzMTM1OTMpLCBLUVUoMTI3MTE4NTk5MDg3MDM5Mjc4NDApLAorCUtRVSggMTQxNzU2MTE3MjU5 NDQ0NjgxMyksIEtRVSgxNzA0NTE5MTAyNDE5NDE3MDYwNCksCisJS1FVKCA0MTAxOTMzMTc3NjA0 OTMxNzEzKSwgS1FVKDE0NzA4NDI4ODM0MjAzNDgwMzIwKSwKKwlLUVUoMTc0NDc1MDkyNjQ0Njk0 MDc3MjQpLCBLUVUoMTQzMTQ4MjE5NzM5ODM0MzQyNTUpLAorCUtRVSgxNzk5MDQ3MjI3MTA2MTYx NzI2NSksIEtRVSggNTA4Nzc1NjY4NTg0MTY3Mzk0MiksCisJS1FVKDEyNzk3ODIwNTg2ODkzODU5 OTM5KSwgS1FVKCAxNzc4MTI4OTUyNjcxMDkyODc5KSwKKwlLUVUoIDM1MzU5MTg1MzA1MDg2NjU4 OTgpLCBLUVUoIDkwMzU3Mjk3MDEwNDI0ODEzMDEpLAorCUtRVSgxNDgwODY2MTU2ODI3NzA3OTk2 MiksIEtRVSgxNDU4NzM0NTA3NzUzNzc0NzkxNCksCisJS1FVKDExOTIwMDgwMDAyMzIzMTIyNzA4 KSwgS1FVKCA2NDI2NTE1ODA1MTk3Mjc4NzUzKSwKKwlLUVUoIDMyOTU2MTIyMTY3MjU5ODQ4MzEp LCBLUVUoMTEwNDA3MjI1MzIxMDA4NzYxMjApLAorCUtRVSgxMjMwNTk1MjkzNjM4NzU5ODc1NCks IEtRVSgxNjA5NzM5MTg5OTc0MjAwNDI1MyksCisJS1FVKCA0OTA4NTM3MzM1NjA2MTgyMjA4KSwg S1FVKDEyNDQ2Njc0NTUyMTk2Nzk1NTA0KSwKKwlLUVUoMTYwMTA0OTc4NTU4MTY4OTUxNzcpLCBL UVUoIDkxOTQzNzg4NzQ3ODg2MTU1NTEpLAorCUtRVSggMzM4Mjk1NzUyOTU2NzYxMzM4NCksIEtR VSggNTE1NDY0NzYwMDc1NDk3NDA3NyksCisJS1FVKCA5ODAxODIyODY1MzI4Mzk2MTQxKSwgS1FV KCA5MDIzNjYyMTczOTE5Mjg4MTQzKSwKKwlLUVUoMTc2MjMxMTUzNTM4MjUxNDc4NjgpLCBLUVUo IDgyMzgxMTU3Njc0NDMwMTU4MTYpLAorCUtRVSgxNTgxMTQ0NDE1OTg1OTAwMjU2MCksIEtRVSgg OTA4NTYxMjUyODkwNDA1OTY2MSksCisJS1FVKCA2ODg4NjAxMDg5Mzk4NjE0MjU0KSwgS1FVKCAg MjU4MjUyOTkyODk0MTYwMTg5KSwKKwlLUVUoIDY3MDQzNjM4ODA3OTI0Mjg2MjIpLCBLUVUoIDYx MTQ5NjYwMzIxNDcyMzU3NjMpLAorCUtRVSgxMTA3NTM5Mzg4MjY5MDI2MTg3NSksIEtRVSggODc5 NzY2NDIzODkzMzYyMDQwNyksCisJS1FVKCA1OTAxODkyMDA2NDc2NzI2OTIwKSwgS1FVKCA1MzA5 NzgwMTU5Mjg1NTE4OTU4KSwKKwlLUVUoMTQ5NDA4MDgzODcyNDA4MTczNjcpLCBLUVUoMTQ2NDIw MzIwMjE0NDk2NTY2OTgpLAorCUtRVSggOTgwODI1NjY3MjA2ODUwNDEzOSksIEtRVSggMzY3MDEz NTExMTM4MDYwNzY1OCksCisJS1FVKDExMjExMjExMDk3ODQ1OTYwMTUyKSwgS1FVKCAxNDc0MzA0 NTA2NzE2Njk1ODA4KSwKKwlLUVUoMTU4NDMxNjYyMDQ1MDY4NzYyMzkpLCBLUVUoIDc2NjEwNTEy NTI0NzE3ODA1NjEpLAorCUtRVSgxMDE3MDkwNTUwMjI0OTQxODQ3NiksIEtRVSggNzgwMTQxNjA0 NTU4MjAyODU4OSksCisJS1FVKCAyNzYzOTgxNDg0NzM3MDUzMDUwKSwgS1FVKCA5NDkxMzc3OTA1 NDk5MjUzMDU0KSwKKwlLUVUoMTYyMDEzOTU4OTYzMzY5MTUwOTUpLCBLUVUoIDkyNTY1MTM3NTY0 NDI3ODIxOTgpLAorCUtRVSggNTQxMTI4MzE1Nzk3MjQ1NjAzNCksIEtRVSggNTA1OTQzMzEyMjI4 ODMyMTY3NiksCisJS1FVKCA0MzI3NDA4MDA2NzIxMTIzMzU3KSwgS1FVKCA5Mjc4NTQ0MDc4ODM0 NDMzMzc3KSwKKwlLUVUoIDc2MDE1MjcxMTA4ODIyODE2MTIpLCBLUVUoMTE4NDgyOTU4OTY5NzU1 MDUyNTEpLAorCUtRVSgxMjA5Njk5ODgwMTA5NDczNTU2MCksIEtRVSgxNDc3MzQ4MDMzOTgyMzUw NjQxMyksCisJS1FVKDE1NTg2MjI3NDMzODk1ODAyMTQ5KSwgS1FVKDEyNzg2NTQxMjU3ODMwMjQy ODcyKSwKKwlLUVUoIDY5MDQ2OTI5ODUxNDA1MDMwNjcpLCBLUVUoIDUzMDkwMTE1MTUyNjMxMDM5 NTkpLAorCUtRVSgxMjEwNTI1NzE5MTE3OTM3MTA2NiksIEtRVSgxNDY1NDM4MDIxMjQ0MjIyNTAz NyksCisJS1FVKCAyNTU2Nzc0OTc0MTkwNjk1MDA5KSwgS1FVKCA0NDYxMjk3Mzk5OTI3NjAwMjYx KSwKKwlLUVUoMTQ4ODgyMjU2NjA5MTUxMTg2NDYpLCBLUVUoMTQ5MTU0NTkzNDExNDgyOTE4MjQp LAorCUtRVSggMjczODgwMjE2NjI1MjMyNzYzMSksIEtRVSggNjA0NzE1NTc4OTIzOTEzMTUxMiks CisJS1FVKDEyOTIwNTQ1MzUzMjE3MDEwMzM4KSwgS1FVKDEwNjk3NjE3MjU3MDA3ODQwMjA1KSwK KwlLUVUoIDI3NTE1ODUyNTMxNTgyMDM1MDQpLCBLUVUoMTMyNTI3MjkxNTk3ODAwNDc0OTYpLAor CUtRVSgxNDcwMDMyNjEzNDY3MjgxNTQ2OSksIEtRVSgxNDA4MjUyNzkwNDM3NDYwMDUyOSksCisJ S1FVKDE2ODUyOTYyMjczNDk2NTQyMDcwKSwgS1FVKDE3NDQ2Njc1NTA0MjM1ODUzOTA3KSwKKwlL UVUoMTUwMTk2MDAzOTg1Mjc1NzIzMTEpLCBLUVUoMTIzMTI3ODEzNDYzNDQwODE1NTEpLAorCUtR VSgxNDUyNDY2NzkzNTAzOTgxMDQ1MCksIEtRVSggNTYzNDAwNTY2MzM3NzE5NTczOCksCisJS1FV KDExMzc1NTc0NzM5NTI1MDAwNTY5KSwgS1FVKCAyNDIzNjY1Mzk2NDMzMjYwMDQwKSwKKwlLUVUo IDUyMjI4MzY5MTQ3OTYwMTU0MTApLCBLUVUoIDQzOTc2NjYzODY0OTI2NDczODcpLAorCUtRVSgg NDYxOTI5NDQ0MTY5MTcwNzYzOCksIEtRVSggIDY2NTA4ODYwMjM1NDc3MDcxNiksCisJS1FVKDEz MjQ2NDk1NjY1MjgxNTkzNjEwKSwgS1FVKCA2NTY0MTQ0MjcwNTQ5NzI5NDA5KSwKKwlLUVUoMTAy MjMyMTYxODgxNDU2NjE2ODgpLCBLUVUoIDM5NjE1NTY5MDcyOTkyMzA1ODUpLAorCUtRVSgxMTU0 MzI2MjUxNTQ5MjQzOTkxNCksIEtRVSgxNjExODAzMTQzNzI4NTk5Mzc5MCksCisJS1FVKCA3MTQz NDE3OTY0NTIwMTY2NDY1KSwgS1FVKDEzMjk1MDUzNTE1OTA5NDg2NzcyKSwKKwlLUVUoICAgNDA0 MzQ2NjYwMDQ4OTk2NzUpLCBLUVUoMTcxMjc4MDQxOTQwMzgzNDcxNjQpLAorCUtRVSggODU5OTE2 NTk2NjU2MDU4NjI2OSksIEtRVSggODIxNDAxNjc0OTAxMTI4NDkwMyksCisJS1FVKDEzNzI1MTMw MzUyMTQwNDY1MjM5KSwgS1FVKCA1NDY3MjU0NDc0NDMxNzI2MjkxKSwKKwlLUVUoIDc3NDg1ODQy OTc0MzgyMTk4NzcpLCBLUVUoMTY5MzM1NTExMTQ4Mjk3NzI0NzIpLAorCUtRVSggMjE2OTYxODQz OTUwNjc5OTQwMCksIEtRVSggMjE2OTc4NzYyNzY2NTExMzQ2MyksCisJS1FVKDE3MzE0NDkzNTcx MjY3OTQzNzY0KSwgS1FVKDE4MDUzNTc1MTAyOTExMzU0OTEyKSwKKwlLUVUoMTE5MjgzMDMyNzUz Nzg0NzY5NzMpLCBLUVUoMTE1OTM4NTA5MjUwNjE3MTU1NTApLAorCUtRVSgxNzc4MjI2OTkyMzQ3 MzU4OTM2MiksIEtRVSggMzI4MDIzNTMwNzcwNDc0NzAzOSksCisJS1FVKCA2MTQ1MzQzNTc4NTk4 Njg1MTQ5KSwgS1FVKDE3MDgwMTE3MDMxMTE0MDg2MDkwKSwKKwlLUVUoMTgwNjY4Mzk5MDI5ODM1 OTQ3NTUpLCBLUVUoIDY1MTc1MDg0MzAzMzEwMjA3MDYpLAorCUtRVSggODA5MjkwODg5Mzk1MDQx MTU0MSksIEtRVSgxMjU1ODM3ODIzMzM4NjE1MzczMiksCisJS1FVKCA0NDc2NTMyMTY3OTczMTMy OTc2KSwgS1FVKDE2MDgxNjQyNDMwMzY3MDI1MDE2KSwKKwlLUVUoIDQyMzMxNTQwOTQzNjkxMzkz NjEpLCBLUVUoIDg2OTM2MzA0ODY2OTMxNjEwMjcpLAorCUtRVSgxMTI0NDk1OTM0MzAyNzc0MjI4 NSksIEtRVSgxMjI3MzUwMzk2Nzc2ODUxMzUwOCksCisJS1FVKDE0MTA4OTc4NjM2Mzg1Mjg0ODc2 KSwgS1FVKCA3MjQyNDE0NjY1Mzc4ODI2OTg0KSwKKwlLUVUoIDY1NjEzMTY5Mzg4NDY1NjI0MzIp LCBLUVUoIDg2MDEwMzg0NzQ5OTQ2NjU3OTUpLAorCUtRVSgxNzUzMjk0MjM1MzYxMjM2NTkwNCks IEtRVSgxNzk0MDA3NjYzNzAyMDkxMjE4NiksCisJS1FVKCA3MzQwMjYwMzY4ODIzMTcxMzA0KSwg S1FVKCA3MDYxODA3NjEzOTE2MDY3OTA1KSwKKwlLUVUoMTA1NjE3MzQ5MzUwMzk1MTkzMjYpLCBL UVUoMTc5OTA3OTY1MDM3MjQ2NTA4NjIpLAorCUtRVSggNjIwODczMjk0MzkxMTgyNzE1OSksIEtR VSggIDM1OTA3NzU2MjgwNDA5MDYxNyksCisJS1FVKDE0MTc3NzUxNTM3Nzg0NDAzMTEzKSwgS1FV KDEwNjU5NTk5NDQ0OTE1MzYyOTAyKSwKKwlLUVUoMTUwODE3MjcyMjA2MTUwODU4MzMpLCBLUVUo MTM0MTc1NzM4OTU2NTk3NTc0ODYpLAorCUtRVSgxNTUxMzg0MjM0MjAxNzgxMTUyNCksIEtRVSgx MTgxNDE0MTUxNjIwNDI4ODIzMSksCisJS1FVKCAxODI3MzEyNTEzODc1MTAxODE0KSwgS1FVKCAy ODA0NjExNjk5ODk0NjAzMTAzKSwKKwlLUVUoMTcxMTY1MDA0Njk5NzU2MDI3NjMpLCBLUVUoMTIy NzAxOTE4MTUyMTE5NTIwODcpLAorCUtRVSgxMjI1NjM1ODQ2Nzc4NjAyNDk4OCksIEtRVSgxODQz NTAyMTcyMjQ1Mzk3MTI2NyksCisJS1FVKCAgNjcxMzMwMjY0MzkwODY1NjE4KSwgS1FVKCAgNDc2 NTA0MzAwNDYwMjg2MDUwKSwKKwlLUVUoMTY0NjU0NzA5MDEwMjcwOTM0NDEpLCBLUVUoIDQwNDc3 MjQ0MDYyNDcxMzY0MDIpLAorCUtRVSggMTMyMjMwNTQ1MTQxMTg4MzM0NiksIEtRVSggMTM4ODMw ODY4ODgzNDMyMjI4MCksCisJS1FVKCA3MzAzOTg5MDg1MjY5NzU4MTc2KSwgS1FVKCA5MzIzNzky NjY0NzY1MjMzNjQyKSwKKwlLUVUoIDQ1NDI3NjI1NzUzMTYzNjg5MzYpLCBLUVUoMTczNDI2OTYx MzI3OTQzMzc2MTgpLAorCUtRVSggNDU4ODAyNTA1NDc2ODQ5ODM3OSksIEtRVSgxMzQxNTQ3NTA1 NzM5MDMzMDgwNCksCisJS1FVKDE3ODgwMjc5NDkxNzMzNDA1NTcwKSwgS1FVKDEwNjEwNTUzNDAw NjE4NjIwMzUzKSwKKwlLUVUoIDMxODA4NDIwNzI2NTg5NjAxMzkpLCBLUVUoMTMwMDI5NjY2NTU0 NTQyNzAxMjApLAorCUtRVSggMTY2NTMwMTE4MTA2NDk4MjgyNiksIEtRVSggNzA4MzY3Mzk0Njc5 MTI1ODk3OSksCisJS1FVKCAgMTkwNTIyMjQ3MTIyNDk2ODIwKSwgS1FVKDE3Mzg4MjgwMjM3MjUw Njc3NzQwKSwKKwlLUVUoIDg0MzA3NzAzNzk5MjM2NDI5NDUpLCBLUVUoMTI5ODcxODA5NzE5MjE2 Njg1ODQpLAorCUtRVSggMjMxMTA4NjEwODM2NTM5MDY0MiksIEtRVSggMjg3MDk4NDM4MzU3OTgy MjM0NSksCisJS1FVKDE0MDE0NjgyNjA5MTY0NjUzMzE4KSwgS1FVKDE0NDY3MTg3MjkzMDYyMjUx NDg0KSwKKwlLUVUoICAxOTIxODYzNjExNDc0MTMyOTgpLCBLUVUoMTUxNzE5NTE3MTM1MzE3OTY1 MjQpLAorCUtRVSggOTkwMDMwNTQ5NTAxNTk0ODcyOCksIEtRVSgxNzk1ODAwNDc3NTYxNTQ2NjM0 NCksCisJS1FVKDE0MzQ2MzgwOTU0NDk4NjA2NTE0KSwgS1FVKDE4MDQwMDQ3MzU3NjE3NDA3MDk2 KSwKKwlLUVUoIDUwMzUyMzc1ODQ4MzM0MjQ1MzIpLCBLUVUoMTUwODk1NTU0NjA2MTM5NzIyODcp LAorCUtRVSggNDEzMTQxMTg3Mzc0OTcyOTgzMSksIEtRVSggMTMyOTAxMzU4MTE2ODI1MDMzMCks CisJS1FVKDEwMDk1MzUzMzMzMDUxMTkzOTQ5KSwgS1FVKDEwNzQ5NTE4NTYxMDIyNDYyNzE2KSwK KwlLUVUoIDkwNTA2MTE0Mjk4MTA3NTU4NDcpLCBLUVUoMTUwMjIwMjg4NDAyMzY2NTU2NDkpLAor CUtRVSggODc3NTU1NDI3OTIzOTc0ODI5OCksIEtRVSgxMzEwNTc1NDAyNTQ4OTIzMDUwMiksCisJ S1FVKDE1NDcxMzAwMTE4NTc0MTY3NTg1KSwgS1FVKCAgIDg5ODY0NzY0MDAyMzU1NjI4KSwKKwlL UVUoIDg3NzY0MTYzMjM0MjA0NjY2MzcpLCBLUVUoIDUyODAyNTg2MzA2MTIwNDA4OTEpLAorCUtR VSggMjcxOTE3NDQ4ODU5MTg2MjkxMiksIEtRVSggNzU5OTMwOTEzNzM5OTY2MTk5NCksCisJS1FV KDE1MDEyODg3MjU2Nzc4MDM5OTc5KSwgS1FVKDE0MDYyOTgxNzI1NjMwOTI4OTI1KSwKKwlLUVUo MTIwMzg1MzYyODY5OTE2ODk2MDMpLCBLUVUoIDcwODk3NTY1NDQ2ODE3NzUyNDUpLAorCUtRVSgx MDM3NjY2MTUzMjc0NDcxODAzOSksIEtRVSggMTI2NTE5ODcyNTkwMTUzMzEzMCksCisJS1FVKDEz ODA3OTk2NzI3MDgxMTQyNDA4KSwgS1FVKCAyOTM1MDE5NjI2NzY1MDM2NDAzKSwKKwlLUVUoIDc2 NTE2NzI0NjA2ODA3MDAxNDEpLCBLUVUoIDM2NDQwOTMwMTYyMDAzNzA3OTUpLAorCUtRVSggMjg0 MDk4MjU3ODA5MDA4MDY3NCksIEtRVSgxNzk1NjI2Mjc0MDE1NzQ0OTIwMSksCisJS1FVKDE4MjY3 OTc5NDUwNDkyODgwNTQ4KSwgS1FVKDExNzk5NTAzNjU5Nzk2ODQ4MDcwKSwKKwlLUVUoIDk5NDI1 MzcwMjU2Njk2NzIzODgpLCBLUVUoMTE4ODY2MDY4MTY0MDY5OTAyOTcpLAorCUtRVSggNTQ4ODU5 NDk0NjQzNzQ0NzU3NiksIEtRVSggNzIyNjcxNDM1MzI4Mjc0NDMwMiksCisJS1FVKCAzNzg0ODUx NjUzMTIzODc3MDQzKSwgS1FVKCAgODc4MDE4NDUzMjQ0ODAzMDQxKSwKKwlLUVUoMTIxMTAwMjI1 ODYyNjg2MTYwODUpLCBLUVUoICA3MzQwNzIxNzk0MDQ2NzUxMjMpLAorCUtRVSgxMTg2OTU3MzYy Nzk5ODI0ODU0MiksIEtRVSggIDQ2OTE1MDQyMTI5Nzc4Mzk5OCksCisJS1FVKCAgMjYwMTUxMTI0 OTEyODAzODA0KSwgS1FVKDExNjM5MTc5NDEwMTIwOTY4NjQ5KSwKKwlLUVUoIDkzMTgxNjUxOTM4 NDA4NDYyNTMpLCBLUVUoMTI3OTU2NzE3MjI3MzQ3NTgwNzUpLAorCUtRVSgxNTMxODQxMDI5NzI2 NzI1MzkzMyksIEtRVSggIDY5MTUyNDcwMzU3MDA2MjYyMCksCisJS1FVKCA1ODM3MTI5MDEwNTc2 OTk0NjAxKSwgS1FVKDE1MDQ1OTYzODU5NzI2OTQxMDUyKSwKKwlLUVUoIDU4NTAwNTY5NDQ5MzIy MzgxNjkpLCBLUVUoMTIwMTc0MzQxNDQ3NTA5NDM4MDcpLAorCUtRVSggNzQ0NzEzOTA2NDkyODk1 NjU3NCksIEtRVSggMzEwMTcxMTgxMjY1ODI0NTAxOSksCisJS1FVKDE2MDUyOTQwNzA0NDc0OTgy OTU0KSwgS1FVKDE4MTk1NzQ1OTQ1OTg2OTk0MDQyKSwKKwlLUVUoIDg5MzIyNTIxMzI3ODU1NzU2 NTkpLCBLUVUoMTMzOTA4MTc0ODgxMDY3OTQ4MzQpLAorCUtRVSgxMTU4Mjc3MTgzNjUwMjUxNzQ1 MyksIEtRVSggNDk2NDQxMTMyNjY4MzYxMTY4NiksCisJS1FVKCAyMTk1MDkzOTgxNzAyNjk0MDEx KSwgS1FVKDE0MTQ1MjI5NTM4Mzg5Njc1NjY5KSwKKwlLUVUoMTY0NTk2MDU1MzIwNjIyNzE3OTgp LCBLUVUoICA4NjYzMTY5MjQ4MTY0ODI4NjQpLAorCUtRVSggNDU5MzA0MTIwOTkzNzI4NjM3Nyks IEtRVSggODQxNTQ5MTM5MTkxMDk3MjEzOCksCisJS1FVKCA0MTcxMjM2NzE1NjAwNTI4OTY5KSwg S1FVKDE2NjM3NTY5MzAzMzM2NzgyODg5KSwKKwlLUVUoIDIwMDIwMTEwNzM0MzkyMTI2ODApLCBL UVUoMTc2OTUxMjQ2NjEwOTc2MDE0MTEpLAorCUtRVSggNDYyNzY4NzA1MzU5ODYxMTcwMiksIEtR VSggNzg5NTgzMTkzNjAyMDE5MDQwMyksCisJS1FVKCA4NDU1OTUxMzAwOTE3MjY3ODAyKSwgS1FV KCAyOTIzODYxNjQ5MTA4NTM0ODU0KSwKKwlLUVUoIDgzNDQ1NTc1NjM5Mjc3ODYyNTUpLCBLUVUo IDY0MDg2NzE5NDAzNzMzNTI1NTYpLAorCUtRVSgxMjIxMDIyNzM1NDUzNjY3NTc3MiksIEtRVSgx NDI5NDgwNDE1NzI5NDIyMjI5NSksCisJS1FVKDEwMTAzMDIyNDI1MDcxMDg1MTI3KSwgS1FVKDEw MDkyOTU5NDg5NTA0MTIzNzcxKSwKKwlLUVUoIDY1NTQ3NzQ0MDUzNzY3MzYyNjgpLCBLUVUoMTI2 Mjk5MTc3MTg0MTA2NDE3NzQpLAorCUtRVSggNjI2MDkzMzI1NzU5NjA2NzEyNiksIEtRVSggMjQ2 MDgyNzAyMTQzOTM2OTY3MyksCisJS1FVKCAyNTQxOTYyOTk2NzE3MTAzNjY4KSwgS1FVKCAgNTk3 Mzc3MjAzMTI3MzUxNDc1KSwKKwlLUVUoIDUzMTY5ODQyMDMxMTczMTUzMDkpLCBLUVUoIDQ4MTEy MTEzOTM1NjMyNDE5NjEpLAorCUtRVSgxMzExOTY5ODU5NzI1NTgxMTY0MSksIEtRVSggODA0ODY5 MTUxMjg2MjM4ODk4MSksCisJS1FVKDEwMjE2ODE4OTcxMTk0MDczODQyKSwgS1FVKCA0NjEyMjI5 OTcwMTY1MjkxNzY0KSwKKwlLUVUoMTAwMDA5ODA3OTg0MTk5NzQ3NzApLCBLUVUoIDY4Nzc2NDA4 MTI0MDI1NDA2ODcpLAorCUtRVSggMTQ4ODcyNzU2MzI5MDQzNjk5MiksIEtRVSggMjIyNzc3NDA2 OTg5NTY5NzMxOCksCisJS1FVKDExMjM3NzU0NTA3NTIzMzE2NTkzKSwgS1FVKDEzNDc4OTQ4NjA1 MzgyMjkwOTcyKSwKKwlLUVUoIDE5NjM1ODM4NDY5NzY4NTgxMjQpLCBLUVUoIDU1MTIzMDkyMDUy NjkyNzY0NTcpLAorCUtRVSggMzk3Mjc3MDE2NDcxNzY1MjM0NyksIEtRVSggMzg0MTc1MTI3NjE5 ODk3NTAzNyksCisJS1FVKDEwMjgzMzQzMDQyMTgxOTAzMTE3KSwgS1FVKCA4NTY0MDAxMjU5Nzky ODcyMTk5KSwKKwlLUVUoMTY0NzIxODcyNDQ3MjI0ODkyMjEpLCBLUVUoIDg5NTM0OTM0OTkyNjg5 NDU5MjEpLAorCUtRVSggMzUxODc0NzM0MDM1NzI3OTU4MCksIEtRVSggNDAwMzE1NzU0NjIyMzk2 MzA3MyksCisJS1FVKCAzMjcwMzA1OTU4Mjg5ODE0NTkwKSwgS1FVKCAzOTY2NzA0NDU4MTI5NDgy NDk2KSwKKwlLUVUoIDgxMjIxNDE4NjU5MjY2NjE5MzkpLCBLUVUoMTQ2Mjc3MzQ3NDgwOTk1MDY2 NTMpLAorCUtRVSgxMzA2NDQyNjk5MDg2MjU2MDU2OCksIEtRVSggMjQxNDA3OTE4Nzg4OTg3MDgy OSksCisJS1FVKCA1Mzc4NDYxMjA5MzU0MjI1MzA2KSwgS1FVKDEwODQxOTg1NzQwMTI4MjU1NTY2 KSwKKwlLUVUoICA1Mzg1ODI0NDI4ODU0MDE3MzgpLCBLUVUoIDc1MzUwODkxODM0ODI5MDU5NDYp LAorCUtRVSgxNjExNzU1OTk1NzU5ODg3OTA5NSksIEtRVSggODQ3Nzg5MDcyMTQxNDUzOTc0MSks CisJS1FVKCAxNDU5MTI3NDkxMjA5NTMzMzg2KSwgS1FVKDE3MDM1MTI2MzYwNzMzNjIwNDYyKSwK KwlLUVUoIDg1MTc2Njg1NTI4NzIzNzkxMjYpLCBLUVUoMTAyOTIxNTE0NjgzMzczNTUwMTQpLAor CUtRVSgxNzA4MTI2NzczMjc0NTM0NDE1NyksIEtRVSgxMzc1MTQ1NTMzNzk0NjA4NzE3OCksCisJ S1FVKDE0MDI2OTQ1NDU5NTIzODMyOTY2KSwgS1FVKCA2NjUzMjc4Nzc1MDYxNzIzNTE2KSwKKwlL UVUoMTA2MTkwODU1NDM4NTYzOTA0NDEpLCBLUVUoIDIxOTYzNDM2MzE0ODExMjI4ODUpLAorCUtR VSgxMDA0NTk2NjA3NDcwMjgyNjEzNiksIEtRVSgxMDA4MjMxNzMzMDQ1MjcxODI4MiksCisJS1FV KCA1OTIwODU5MjU5NTA0ODMxMjQyKSwgS1FVKCA5OTUxODc5MDczNDI2NTQwNjE3KSwKKwlLUVUo IDcwNzQ2OTY2NDkxNTE0MTQxNTgpLCBLUVUoMTU4MDgxOTM1NDM4Nzk0NjQzMTgpLAorCUtRVSgg NzM4NTI0Nzc3Mjc0Njk1MzM3NCksIEtRVSggMzE5MjAwMzU0NDI4Mzg2NDI5MiksCisJS1FVKDE4 MTUzNjg0NDkwOTE3NTkzODQ3KSwgS1FVKDEyNDIzNDk4MjYwNjY4NTY4OTA1KSwKKwlLUVUoMTA5 NTc3NTgwOTk3NTYzNzgxNjkpLCBLUVUoMTE0ODg3NjIxNzk5MTEwMTYwNDApLAorCUtRVSggMjA5 OTkzMTE4NjQ2NTMzMzc4MiksIEtRVSgxMTE4MDk3OTU4MTI1MDI5NDQzMiksCisJS1FVKCA4MDk4 OTE2MjUwNjY4MzY3OTMzKSwgS1FVKCAzNTI5MjAwNDM2NzkwNzYzNDY1KSwKKwlLUVUoMTI5ODg0 MTg5MDg2NzQ2ODE3NDUpLCBLUVUoIDYxNDc1NjcyNzU5NTQ4MDg1ODApLAorCUtRVSggMzIwNzUw MzM0NDYwNDAzMDk4OSksIEtRVSgxMDc2MTU5MjYwNDg5ODYxNTM2MCksCisJS1FVKCAgMjI5ODU0 ODYxMDMxODkzNTA0KSwgS1FVKCA4ODA5ODUzOTYyNjY3MTQ0MjkxKSwKKwlLUVUoMTM5NTczNjQ0 NjkwMDU2OTM4NjApLCBLUVUoIDc2MzQyODc2NjUyMjQ0OTU4ODYpLAorCUtRVSgxMjM1MzQ4NzM2 Njk3NjU1Njg3NCksIEtRVSggMTEzNDQyMzc5NjMxNzE1MjAzNCksCisJS1FVKCAyMDg4OTkyNDcx MzM0MTA3MDY4KSwgS1FVKCA3MzkzMzcyMTI3MTkwNzk5Njk4KSwKKwlLUVUoIDE4NDUzNjc4Mzk4 NzEwNTgzOTEpLCBLUVUoICAyMDc5MjI1NjM5ODczMjI4ODQpLAorCUtRVSgxMTk2MDg3MDgxMzE1 OTk0NDk3NiksIEtRVSgxMjE4MjEyMDA1MzMxNzMxNzM2MyksCisJS1FVKDE3MzA3MzU4MTMyNTcx NzA5MjgzKSwgS1FVKDEzODcxMDgxMTU1NTUyODI0OTM2KSwKKwlLUVUoMTgzMDQ0NDY3NTE3NDE1 NjYyNjIpLCBLUVUoIDcxNzg3MDUyMjAxODQzMDI4NDkpLAorCUtRVSgxMDkyOTYwNTY3Nzc1ODgy NDQyNSksIEtRVSgxNjQ0Njk3Njk3NzgzNTgwNjg0NCksCisJS1FVKDEzNzIzODc0NDEyMTU5NzY5 MDQ0KSwgS1FVKCA2OTQyODU0MzUyMTAwOTE1MjE2KSwKKwlLUVUoIDE3MjYzMDg0NzQzNjU3Mjkz OTApLCBLUVUoIDIxNTAwNzg3NjY0NDUzMjMxNTUpLAorCUtRVSgxNTM0NTU1ODk0NzkxOTY1NjYy NiksIEtRVSgxMjE0NTQ1MzgyODg3NDUyNzIwMSksCisJS1FVKCAyMDU0NDQ4NjIwNzM5NzI2ODQ5 KSwgS1FVKCAyNzQwMTAyMDAzMzUyNjI4MTM3KSwKKwlLUVUoMTEyOTQ0NjIxNjM1Nzc2MTA2NTUp LCBLUVUoICA3NTYxNjQyODMzODc0MTM3NDMpLAorCUtRVSgxNzg0MTE0NDc1ODQzODgxMDg4MCks IEtRVSgxMDgwMjQwNjAyMTE4NTQxNTg2MSksCisJS1FVKCA4NzE2NDU1NTMwNDc2NzM3ODQ2KSwg S1FVKCA2MzIxNzg4ODM0NTE3NjQ5NjA2KSwKKwlLUVUoMTQ2ODEzMjI5MTA1Nzc0Njg0MjYpLCBL UVUoMTczMzAwNDM1NjM4ODQzMzYzODcpLAorCUtRVSgxMjcwMTgwMjE4MDA1MDA3MTYxNCksIEtR VSgxNDY5NTEwNTExMTA3OTcyNzE1MSksCisJS1FVKCA1MTEyMDk4NTExNjU0MTcyODMwKSwgS1FV KCA0OTU3NTA1NDk2Nzk0MTM5OTczKSwKKwlLUVUoIDgyNzA5Nzk0NTE5NTIwNDU5ODIpLCBLUVUo MTIzMDc2ODU5MzkxOTkxMjA5NjkpLAorCUtRVSgxMjQyNTc5OTQwODk1MzQ0MzAzMiksIEtRVSgg ODM3NjQxMDE0MzYzNDc5NjU4OCksCisJS1FVKDE2NjIxNzc4Njc5NjgwMDYwNDY0KSwgS1FVKCAz NTgwNDk3ODU0NTY2NjYwMDczKSwKKwlLUVUoIDExMjI1MTU3NDc4MDMzODI0MTYpLCBLUVUoICA4 NTc2NjQ5ODA5NjA1OTc1OTkpLAorCUtRVSggNjM0MzY0MDExOTg5NTkyNTkxOCksIEtRVSgxMjg3 ODQ3MzI2MDg1NDQ2Mjg5MSksCisJS1FVKDEwMDM2ODEzOTIwNzY1NzIyNjI2KSwgS1FVKDE0NDUx MzM1NDY4MzYzMTczODEyKSwKKwlLUVUoIDU0NzY4MDk2OTI0MDExMDI4MDcpLCBLUVUoMTY0NDIy NTUxNzM1MTQzNjYzNDIpLAorCUtRVSgxMzA2MDIwMzE5NDc1NzE2NzEwNCksIEtRVSgxNDM1NDEy NDA3MTI0MzE3NzcxNSksCisJS1FVKDE1OTYxMjQ5NDA1Njk2MTI1MjI3KSwgS1FVKDEzNzAzODkz NjQ5NjkwODcyNTg0KSwKKwlLUVUoICAzNjM5MDczMjYzNDAzNDAwNjQpLCBLUVUoIDYyNDc0NTU1 NDA0OTE3NTQ4NDIpLAorCUtRVSgxMjI0MjI0OTMzMjc1NzgzMjM2MSksIEtRVSggIDE1NjA2NTQ3 NTY3OTc5NjcxNyksCisJS1FVKCA5MzUxMTE2MjM1NzQ5NzMyMzU1KSwgS1FVKCA0NTkwMzUwNjI4 Njc3NzAxNDA1KSwKKwlLUVUoIDE2NzExOTU5NDA5ODIzNTAzODkpLCBLUVUoMTM1MDEzOTg0NTg4 OTg0NTE5MDUpLAorCUtRVSggNjUyNjM0MTk5MTIyNTAwMjI1NSksIEtRVSggMTY4OTc4MjkxMzc3 ODE1NzU5MiksCisJS1FVKCA3NDM5MjIyMzUwODY5MDEwMzM0KSwgS1FVKDEzOTc1MTUwMjYzMjI2 NDc4MzA4KSwKKwlLUVUoMTE0MTE5NjExNjk5MzI2ODI3MTApLCBLUVUoMTcyMDQyNzE4MzQ4MzM4 NDcyNzcpLAorCUtRVSggIDU0MTUzNDc0MjU0NDQzNTM2NyksIEtRVSggNjU5MTE5MTkzMTIxODk0 OTY4NCksCisJS1FVKCAyNjQ1NDU0Nzc1NDc4MjMyNDg2KSwgS1FVKCA0MzIyODU3NDgxMjU2NDg1 MzIxKSwKKwlLUVUoIDg0Nzc0MTY0ODc1NTMwNjUxMTApLCBLUVUoMTI5MDI1MDU0Mjg1NDg0MzUw NDgpLAorCUtRVSggIDk3MTQ0NTc3Nzk4MTM0MTQxNSksIEtRVSgxNDk5NTEwNDY4Mjc0NDk3Njcx MiksCisJS1FVKCA0MjQzMzQxNjQ4ODA3MTU4MDYzKSwgS1FVKCA4Njk1MDYxMjUyNzIxOTI3NjYx KSwKKwlLUVUoIDUwMjgyMDIwMDMyNzAxNzcyMjIpLCBLUVUoIDIyODkyNTczNDA5MTU1Njc4NDAp LAorCUtRVSgxMzg3MDQxNjM0NTEyMTg2NjAwNyksIEtRVSgxMzk5NDQ4MTY5ODA3MjA5MjIzMyks CisJS1FVKCA2OTEyNzg1NDAwNzUzMTk2NDgxKSwgS1FVKCAyMjc4MzA5MzE1ODQxOTgwMTM5KSwK KwlLUVUoIDQzMjk3NjU0NDk2NDgzMDQ4MzkpLCBLUVUoIDU5NjMxMDgwOTU3ODU0ODUyOTgpLAor CUtRVSggNDg4MDAyNDg0NzQ3ODcyMjQ3OCksIEtRVSgxNjAxNTYwODc3OTg5MDI0MDk0NyksCisJ S1FVKCAxODY2Njc5MDM0MjYxMzkzNTQ0KSwgS1FVKCAgOTE0ODIxMTc5OTE5NzMxNTE5KSwKKwlL UVUoIDk2NDM0MDQwMzU2NDg3NjAxMzEpLCBLUVUoIDI0MTgxMTQ5NTM2MTU1OTM5MTUpLAorCUtR VSggIDk0NDc1NjgzNjA3MzcwMjM3NCksIEtRVSgxNTE4NjM4ODA0ODczNzI5NjgzNCksCisJS1FV KCA3NzIzMzU1MzM2MTI4NDQyMjA2KSwgS1FVKCA3NTAwNzQ3NDc5Njc5NTk5NjkxKSwKKwlLUVUo MTgwMTM5NjEzMDY0NTMyOTM2MzQpLCBLUVUoIDIzMTUyNzQ4MDgwOTU3NTY0NTYpLAorCUtRVSgx MzY1NTMwODI1NTQyNDAyOTU2NiksIEtRVSgxNzIwMzgwMDI3MzU2MTY3NzA5OCksCisJS1FVKCAx MzgyMTU4Njk0NDIyMDg3NzU2KSwgS1FVKCA1MDkwMzkwMjUwMzA5NTg4OTc2KSwKKwlLUVUoICA1 MTcxNzA4MTgzODQyMTM5ODkpLCBLUVUoIDE2MTI3MDkyNTI2Mjc3Mjk2MjEpLAorCUtRVSggMTMz MDExODk1NTU3MjQ0OTYwNiksIEtRVSggIDMwMDkyMjQ3ODA1NjcwOTg4NSksCisJS1FVKDE4MTE1 NjkzMjkxMjg5MDkxOTg3KSwgS1FVKDEzNDkxNDA3MTA5NzI1MjM4MzIxKSwKKwlLUVUoMTUyOTM3 MTQ2MzM1OTM4MjczMjApLCBLUVUoIDUxNTE1MzkzNzMwNTMzMTQ1MDQpLAorCUtRVSggNTk1MTUy MzI0Mzc0MzEzOTIwNyksIEtRVSgxNDQ1OTExMjAxNTI0OTUyNzk3NSksCisJS1FVKCA1NDU2MTEz OTU5MDAwNzAwNzM5KSwgS1FVKCAzODc3OTE4NDM4NDY0ODczMDE2KSwKKwlLUVUoMTI1MzQwNzE2 NTQyNjAxNjM1NTUpLCBLUVUoMTU4NzE2NzgzNzY4OTM1NTUwNDEpLAorCUtRVSgxMTAwNTQ4NDgw NTcxMjAyNTU0OSksIEtRVSgxNjM1MzA2Njk3MzE0MzM3NDI1MiksCisJS1FVKCA0MzU4MzMxNDcy MDYzMjU2Njg1KSwgS1FVKCA4MjY4MzQ5MzMyMjEwODU5Mjg4KSwKKwlLUVUoMTI0ODUxNjE1OTA5 Mzk2NTgwNzUpLCBLUVUoMTM5NTU5OTM1OTI4NTQ0NzEzNDMpLAorCUtRVSggNTkxMTQ0Njg4Njg0 ODM2NzAzOSksIEtRVSgxNDkyNTgzNDA4NjgxMzcwNjk3NCksCisJS1FVKCA2NTkwMzYyNTk3ODU3 OTk0ODA1KSwgS1FVKCAxMjgwNTQ0OTIzNTMzNjYxODc1KSwKKwlLUVUoIDE2Mzc3NTYwMTg5NDc5 ODgxNjQpLCBLUVUoIDQ3MzQwOTAwNjQ1MTI2ODYzMjkpLAorCUtRVSgxNjY5MzcwNTI2MzEzMTQ4 NTkxMiksIEtRVSggNjgzNDg4MjM0MDQ5NDM2MDk1OCksCisJS1FVKCA4MTIwNzMyMTc2MTU5NjU4 NTA1KSwgS1FVKCAyMjQ0MzcxOTU4OTA1MzI5MzQ2KSwKKwlLUVUoMTA0NDc0OTk3MDc3Mjk3MzQw MjEpLCBLUVUoIDczMTg3NDIzNjE0NDY5NDIxOTQpLAorCUtRVSggODAzMjg1NzUxNjM1NTU1NTI5 NiksIEtRVSgxNDAyMzYwNTk4MzA1OTMxMzExNiksCisJS1FVKCAxMDMyMzM2MDYxODE1NDYxMzc2 KSwgS1FVKCA5ODQwOTk1MzM3ODc2NTYyNjEyKSwKKwlLUVUoIDk4NjkyNTYyMjMwMjkyMDM1ODcp LCBLUVUoMTIyMjc5NzU2OTcxNzcyNjc2MzYpLAorCUtRVSgxMjcyODExNTExNTg0NDE4NjAzMyks IEtRVSggNzc1MjA1ODQ3OTc4MzIwNTQ3MCksCisJS1FVKCAgNzI5NzMzMjE5NzEzMzkzMDg3KSwg S1FVKDEyOTU0MDE3ODAxMjM5MDA3NjIyKQorfTsKK3N0YXRpYyBjb25zdCB1aW50NjRfdCBpbml0 X2J5X2FycmF5XzY0X2V4cGVjdGVkW10gPSB7CisJS1FVKCAyMTAwMzQxMjY2MzA3ODk1MjM5KSwg S1FVKCA4MzQ0MjU2MzAwNDg5NzU3OTQzKSwKKwlLUVUoMTU2ODc5MzMyODU0ODQyNDM4OTQpLCBL UVUoIDgyNjg2MjAzNzAyNzcwNzYzMTkpLAorCUtRVSgxMjM3MTg1MjMwOTgyNjU0NTQ1OSksIEtR VSggODgwMDQ5MTU0MTczMDExMDIzOCksCisJS1FVKDE4MTEzMjY4OTUwMTAwODM1NzczKSwgS1FV KCAyODg2ODIzNjU4ODg0NDM4MTE5KSwKKwlLUVUoIDMyOTM2NjczMDcyNDgxODA3MjQpLCBLUVUo IDkzMDc5MjgxNDMzMDAxNzI3MzEpLAorCUtRVSggNzY4ODA4MjAxNzU3NDI5MzYyOSksIEtRVSgg IDkwMDk4NjIyNDczNTE2NjY2NSksCisJS1FVKCA5OTc3OTcyNzEwNzIyMjY1MDM5KSwgS1FVKCA2 MDA4MjA1MDA0OTk0ODMwNTUyKSwKKwlLUVUoICA1NDY5MDkxMDQ1MjE2ODkyOTIpLCBLUVUoIDc0 Mjg0NzE1MjE4NjkxMDc1OTQpLAorCUtRVSgxNDc3NzU2MzQxOTMxNDcyMTE3OSksIEtRVSgxNjEx NjE0MzA3NjU2NzM1MDA1MyksCisJS1FVKCA1MzIyNjg1MzQyMDAzMTQyMzI5KSwgS1FVKCA0MjAw NDI3MDQ4NDQ1ODYzNDczKSwKKwlLUVUoIDQ2OTMwOTIxNTAxMzI1NTkxNDYpLCBLUVUoMTM2NzE0 MjU4NjM3NTkzMzg1ODIpLAorCUtRVSggNjc0NzExNzQ2MDczNzYzOTkxNiksIEtRVSggNDczMjY2 NjA4MDIzNjU1MTE1MCksCisJS1FVKCA1OTEyODM5OTUwNjExOTQxMjYzKSwgS1FVKCAzOTAzNzE3 NTU0NTA0NzA0OTA5KSwKKwlLUVUoIDI2MTU2Njc2NTAyNTY3ODY4MTgpLCBLUVUoMTA4NDQxMjk5 MTM4ODcwMDYzNTIpLAorCUtRVSgxMzc4NjQ2Nzg2MTgxMDk5NzgyMCksIEtRVSgxNDI2Nzg1MzAw Mjk5NDAyMTU3MCksCisJS1FVKDEzNzY3ODA3MzAyODQ3MjM3NDM5KSwgS1FVKDE2NDA3OTYzMjUz NzA3MjI0NjE3KSwKKwlLUVUoIDQ4MDI0OTgzNjM2OTg1ODM0OTcpLCBLUVUoIDI1MjM4MDI4Mzkz MTcyMDk3NjQpLAorCUtRVSggMzgyMjU3OTM5Nzc5NzQ3NTU4OSksIEtRVSggODk1MDMyMDU3MjIx MjEzMDYxMCksCisJS1FVKCAzNzQ1NjIzNTA0OTc4MzQyNTM0KSwgS1FVKDE2MDkyNjA5MDY2MDY4 NDgyODA2KSwKKwlLUVUoIDk4MTcwMTY5NTAyNzQ2NDIzOTgpLCBLUVUoMTA1OTE2NjA2NjAzMjM4 MjkwOTgpLAorCUtRVSgxMTc1MTYwNjY1MDc5MjgxNTkyMCksIEtRVSggNTEyMjg3MzgxODU3NzEy MjIxMSksCisJS1FVKDE3MjA5NTUzNzY0OTEzOTM2NjI0KSwgS1FVKCA2MjQ5MDU3NzA5Mjg0Mzgw MzQzKSwKKwlLUVUoMTUwODg3OTEyNjQ2OTUwNzE4MzApLCBLUVUoMTUzNDQ2NzMwNzE3MDk4NTE5 MzApLAorCUtRVSggNDM0NTc1MTQxNTI5MzY0NjA4NCksIEtRVSggMjU0Mjg2NTc1MDcwMzA2Nzky OCksCisJS1FVKDEzNTIwNTI1MTI3ODUyMzY4Nzg0KSwgS1FVKDE4Mjk0MTg4NjYyODgwOTk3MjQx KSwKKwlLUVUoIDM4NzE3ODE5MzgwNDQ4ODE1MjMpLCBLUVUoIDI4NzM0ODcyNjgxMjI4MTIxODQp LAorCUtRVSgxNTA5OTY3Njc1OTQ4MjY3OTAwNSksIEtRVSgxNTQ0MjU5OTEyNzIzOTM1MDQ5MCks CisJS1FVKCA2MzExODkzMjc0MzY3NzEwODg4KSwgS1FVKCAzMjg2MTE4NzYwNDg0NjcyOTMzKSwK KwlLUVUoIDQxNDYwNjc5NjEzMzM1NDIxODkpLCBLUVUoMTMzMDM5NDI1Njc4OTcyMDg3NzApLAor CUtRVSggODE5NjAxMzcyMjI1NTYzMDQxOCksIEtRVSggNDQzNzgxNTQzOTM0MDk3OTk4OSksCisJ S1FVKDE1NDMzNzkxNTMzNDUwNjA1MTM1KSwgS1FVKCA0MjU0ODI4OTU2ODE1Njg3MDQ5KSwKKwlL UVUoIDEzMTA5MDMyMDc3MDgyODYwMTUpLCBLUVUoMTA1MjkxODI3NjQ0NjIzOTg1NDkpLAorCUtR VSgxNDkwMDIzMTMxMTY2MDYzODgxMCksIEtRVSggOTcyNzAxNzI3NzEwNDYwOTc5MyksCisJS1FV KCAxODIxMzA4MzEwOTQ4MTk5MDMzKSwgS1FVKDExNjI4ODYxNDM1MDY2NzcyMDg0KSwKKwlLUVUo IDk0NjkwMTkxMzg0OTE1NDY5MjQpLCBLUVUoIDMxNDU4MTI2NzA1MzI2MDQ5ODgpLAorCUtRVSgg OTkzODQ2ODkxNTA0NTQ5MTkxOSksIEtRVSggMTU2MjQ0NzQzMDY3MjY2MjE0MiksCisJS1FVKDEz OTYzOTk1MjY2Njk3OTg5MTM0KSwgS1FVKCAzMzU2ODg0MzU3NjI1MDI4Njk1KSwKKwlLUVUoIDQ0 OTk4NTAzMDQ1ODQzMDk3NDcpLCBLUVUoIDg0NTY4MjU4MTcwMjM2NTgxMjIpLAorCUtRVSgxMDg1 OTAzOTkyMjgxNDI4NTI3OSksIEtRVSggODA5OTUxMjMzNzk3MjUyNjU1NSksCisJS1FVKCAgMzQ4 MDA2Mzc1MTA5NjcyMTQ5KSwgS1FVKDExOTE5ODkzOTk4MjQxNjg4NjAzKSwKKwlLUVUoIDExMDQx OTk1Nzc0MDI5NDg4MjYpLCBLUVUoMTY2ODkxOTE4NTQzNTYwNjAyODkpLAorCUtRVSgxMDk5MjU1 MjA0MTczMDE2ODA3OCksIEtRVSggNzI0MzczMzE3MjcwNTQ2NTgzNiksCisJS1FVKCA1NjY4MDc1 NjA2MTgwMzE5NTYwKSwgS1FVKDE4MTgyODQ3MDM3MzMzMjg2OTcwKSwKKwlLUVUoIDQyOTAyMTUz NTc2NjQ2MzEzMjIpLCBLUVUoIDQwNjE0MTQyMjA3OTE4Mjg2MTMpLAorCUtRVSgxMzAwNjI5MTA2 MTY1Mjk4OTYwNCksIEtRVSggNzE0MDQ5MTE3ODkxNzEyODc5OCksCisJS1FVKDEyNzAzNDQ2MjE3 NjYzMjgzNDgxKSwgS1FVKCA1NTAwMjIwNTk3NTY0NTU4MjY3KSwKKwlLUVUoMTAzMzA1NTE1MDk5 NzEyOTYzNTgpLCBLUVUoMTU5NTg1NTQ3Njg2NDg3MTQ0OTIpLAorCUtRVSggNTE3NDU1NTk1NDUx NTM2MDA0NSksIEtRVSggMTczMTMxODgzNzY4NzU3NzczNSksCisJS1FVKCAzNTU3NzAwODAxMDQ4 MzU0ODU3KSwgS1FVKDEzNzY0MDEyMzQxOTI4NjE2MTk4KSwKKwlLUVUoMTMxMTUxNjYxOTQzNzkx MTkwNDMpLCBLUVUoIDc5ODkzMjEwMjE1NjAyNTU1MTkpLAorCUtRVSggMjEwMzU4NDI4MDkwNTg3 NzA0MCksIEtRVSggOTIzMDc4ODY2MjE1NTIyODQ4OCksCisJS1FVKDE2Mzk2NjI5MzIzMzI1NTQ3 NjU0KSwgS1FVKCAgNjU3OTI2NDA5ODExMzE4MDUxKSwKKwlLUVUoMTUwNDY3MDAyNjQzOTE0MDA3 MjcpLCBLUVUoIDUxMjAxMzI4NTg3NzE4ODA4MzApLAorCUtRVSggNzkzNDE2MDA5Nzk4OTAyODU2 MSksIEtRVSggNjk2MzEyMTQ4ODUzMTk3NjI0NSksCisJS1FVKDE3NDEyMzI5NjAyNjIxNzQyMDg5 KSwgS1FVKDE1MTQ0ODQzMDUzOTMxNzc0MDkyKSwKKwlLUVUoMTcyMDQxNzY2NTE3NjMwNTQ1MzIp LCBLUVUoMTMxNjY1OTUzODc1NTQwNjU4NzApLAorCUtRVSggODU5MDM3NzgxMDUxMzk2MDIxMyks IEtRVSggNTgzNDM2NTEzNTM3Mzk5MTkzOCksCisJS1FVKCA3NjQwOTEzMDA3MTgyMjI2MjQzKSwg S1FVKCAzNDc5Mzk0NzAzODU5NDE4NDI1KSwKKwlLUVUoMTY0MDI3ODQ0NTI2NDQ1MjEwNDApLCBL UVUoIDQ5OTM5Nzk4MDk2ODcwODM5ODApLAorCUtRVSgxMzI1NDUyMjE2ODA5NzY4ODg2NSksIEtR VSgxNTY0MzY1OTA5NTI0NDM2NTIxOSksCisJS1FVKCA1ODgxNDM3NjYwNTM4NDI0OTgyKSwgS1FV KDExMTc0ODkyMjAwNjE4OTg3Mzc5KSwKKwlLUVUoICAyNTQ0MDk5NjYxNTk3MTEwNzcpLCBLUVUo MTcxNTg0MTMwNDMxNDA1NDk5MDkpLAorCUtRVSggMzYzODA0ODc4OTI5MDM3NjI3MiksIEtRVSgg MTM3NjgxNjkzMDI5OTQ4OTE5MCksCisJS1FVKCA0NjIyNDYyMDk1MjE3NzYxOTIzKSwgS1FVKDE1 MDg2NDA3OTczMDEwMjYzNTE1KSwKKwlLUVUoMTMyNTM5NzE3NzI3ODQ2OTIyMzgpLCBLUVUoIDUy NzA1NDkwNDM1NDE2NDkyMzYpLAorCUtRVSgxMTE4MjcxNDE4NjgwNTQxMTYwNCksIEtRVSgxMjI4 Mzg0NjQzNzQ5NTU3NzE0MCksCisJS1FVKCA1Mjk3NjQ3MTQ5OTA4OTUzMjE5KSwgS1FVKDEwMDQ3 NDUxNzM4MzE2ODM2NjU0KSwKKwlLUVUoIDQ5MzgyMjgxMDAzNjc4NzQ3NDYpLCBLUVUoMTIzMjg1 MjMwMjUzMDQwNzc5MjMpLAorCUtRVSggMzYwMTA0OTQzODU5NTMxMjM2MSksIEtRVSggOTMxMzYy NDExODM1MjczMzc3MCksCisJS1FVKDEzMzIyOTY2MDg2MTE3NjYxNzk4KSwgS1FVKDE2NjYwMDA1 NzA1NjQ0MDI5Mzk0KSwKKwlLUVUoMTEzMzc2Nzc1MjY5ODg4NzIzNzMpLCBLUVUoMTM4NjkyOTkx MDI1NzQ0MTc3OTUpLAorCUtRVSgxNTY0MjA0MzE4MzA0NTY0NTQzNyksIEtRVSggMzAyMTc1NTU2 OTA4NTg4MDAxOSksCisJS1FVKCA0OTc5NzQxNzY3NzYxMTg4MTYxKSwgS1FVKDEzNjc5OTc5MDky MDc5Mjc5NTg3KSwKKwlLUVUoIDMzNDQ2ODU4NDI4NjEwNzE3NDMpLCBLUVUoMTM5NDc5NjAwNTk4 OTk1ODgxMDQpLAorCUtRVSggIDMwNTgwNjkzNDI5MzM2ODAwNyksIEtRVSggNTc0OTE3MzkyOTIw MTY1MDAyOSksCisJS1FVKDExMTIzNzI0ODUyMTE4ODQ0MDk4KSwgS1FVKDE1MTI4OTg3Njg4Nzg4 ODc5ODAyKSwKKwlLUVUoMTUyNTE2NTEyMTEwMjQ2NjUwMDkpLCBLUVUoIDc2ODk5MjU5MzM4MTY1 Nzc3NzYpLAorCUtRVSgxNjczMjgwNDM5MjY5NTg1OTQ0OSksIEtRVSgxNzA4NzM0NTQwMTAxNDA3 ODQ2OCksCisJS1FVKDE0MzE1MTA4NTg5MTU5MDQ4ODcxKSwgS1FVKCA0ODIwNzAwMjY2NjE5Nzc4 OTE3KSwKKwlLUVUoMTY3MDk2Mzc1MzkzNTc5NTg0NDEpLCBLUVUoIDQ5MzYyMjc4NzUxNzczNTEz NzQpLAorCUtRVSggMjEzNzkwNzY5NzkxMjk4NzI0NyksIEtRVSgxMTYyODU2NTYwMTQwODM5NTQy MCksCisJS1FVKCAyMzMzMjUwNTQ5MjQxNTU2Nzg2KSwgS1FVKCA1NzExMjAwMzc5NTc3Nzc4NjM3 KSwKKwlLUVUoIDUxNzA2ODAxMzE1MjkwMzE3MjkpLCBLUVUoMTI2MjAzOTIwNDMwNjEzMzUxNjQp LAorCUtRVSggICA5NTM2MzM5MDEwMTA5NjA3OCksIEtRVSggNTQ4Nzk4MTkxNDA4MTcwOTQ2Miks CisJS1FVKCAxNzYzMTA5ODIzOTgxODM4NjIwKSwgS1FVKCAzMzk1ODYxMjcxNDczMjI0Mzk2KSwK KwlLUVUoIDEzMDA0OTY4NDQyODIyMTM1OTUpLCBLUVUoIDY4OTQzMTYyMTI4MjAyMzI5MDIpLAor CUtRVSgxMDY3Mzg1OTY1MTEzNTU3NjY3NCksIEtRVSggNTkxMTgzOTY1ODg1NzkwMzI1MiksCisJ S1FVKDE3NDA3MTEwNzQzMzg3Mjk5MTAyKSwgS1FVKCA4MjU3NDI3MTU0NjIzMTQwMzg1KSwKKwlL UVUoMTEzODkwMDMwMjY3NDE4MDAyNjcpLCBLUVUoIDQwNzAwNDMyMTEwOTUwMTM3MTcpLAorCUtR VSgxMTY2MzgwNjk5NzE0NTI1OTAyNSksIEtRVSgxNTI2NTU5ODk1MDY0ODc5ODIxMCksCisJS1FV KCAgNjMwNTg1Nzg5NDM0MDMwOTM0KSwgS1FVKCAzNTI0NDQ2NTI5MjEzNTg3MzM0KSwKKwlLUVUo IDcxODY0MjQxNjg0OTUxODQyMTEpLCBLUVUoMTA4MDY1ODU0NTEzODYzNzkwMjEpLAorCUtRVSgx MTEyMDAxNzc1MzUwMDQ5OTI3MyksIEtRVSggMTU4NjgzNzY1MTM4NzcwMTMwMSksCisJS1FVKDE3 NTMwNDU0NDAwOTU0NDE1NTQ0KSwgS1FVKCA5OTkxNjcwMDQ1MDc3ODgwNDMwKSwKKwlLUVUoIDc1 NTA5OTcyNjg5OTA3MzAxODApLCBLUVUoIDg2NDAyNDkxOTY1OTczNzkzMDQpLAorCUtRVSggMzUy MjIwMzg5Mjc4Njg5MzgyMyksIEtRVSgxMDQwMTExNjU0OTg3ODg1NDc4OCksCisJS1FVKDEzNjkw Mjg1NTQ0NzMzMTI0ODUyKSwgS1FVKCA4Mjk1Nzg1Njc1NDU1Nzc0NTg2KSwKKwlLUVUoMTU1MzU3 MTYxNzIxNTUxMTc2MDMpLCBLUVUoIDMxMTIxMDg1ODM3MjM3MjI1MTEpLAorCUtRVSgxNzYzMzE3 OTk1NTMzOTI3MTExMyksIEtRVSgxODE1NDIwODA1NjA2Mzc1OTM3NSksCisJS1FVKCAxODY2NDA5 MjM2Mjg1ODE1NjY2KSwgS1FVKDEzMzI2MDc1ODk1Mzk2NDEyODgyKSwKKwlLUVUoIDg3NTYyNjE4 NDI5NDgwMjAwMjUpLCBLUVUoIDYyODE4NTI5OTk4Njg0MzkxMzEpLAorCUtRVSgxNTA4NzY1MzM2 MTI3NTI5Mjg1OCksIEtRVSgxMDMzMzkyMzkxMTE1Mjk0OTM5NyksCisJS1FVKCA1MjY1NTY3NjQ1 NzU3NDA4NTAwKSwgS1FVKDEyNzI4MDQxODQzMjEwMzUyMTg0KSwKKwlLUVUoIDYzNDc5NTkzMjc1 MDc4Mjg3NTkpLCBLUVUoICAxNTQxMTI4MDI2MjU1NjQ3NTgpLAorCUtRVSgxODIzNTIyODMwODY3 OTc4MDIxOCksIEtRVSggMzI1MzgwNTI3NDY3MzM1MjQxOCksCisJS1FVKCA0ODQ5MTcxNjEwNjg5 MDMxMTk3KSwgS1FVKDE3OTQ4NTI5Mzk4MzQwNDMyNTE4KSwKKwlLUVUoMTM4MDM1MTA0NzU2Mzc0 MDkxNjcpLCBLUVUoMTM1MDY1NzAxOTA0MDk4ODMwOTUpLAorCUtRVSgxNTg3MDgwMTI3MzI4Mjk2 MDgwNSksIEtRVSggODQ1MTI4NjQ4MTI5OTE3MDc3MyksCisJS1FVKCA5NTYyMTkwNjIwMDM0NDU3 NTQxKSwgS1FVKCA4NTE4OTA1Mzg3NDQ5MTM4MzY0KSwKKwlLUVUoMTI2ODEzMDY0MDEzNjMzODU2 NTUpLCBLUVUoIDM3ODgwNzM2OTA1NTk3NjI1NTgpLAorCUtRVSggNTI1NjgyMDI4OTU3MzQ4Nzc2 OSksIEtRVSggMjc1MjAyMTM3MjMxNDg3NTQ2NyksCisJS1FVKCA2MzU0MDM1MTY2ODYyNTIwNzE2 KSwgS1FVKCA0MzI4OTU2Mzc4MzA5NzM5MDY5KSwKKwlLUVUoICA0NDkwODc0NDEyMjgyNjk2MDAp LCBLUVUoIDU1MzM1MDg3NDI2NTMwOTA4NjgpLAorCUtRVSggMTI2MDM4OTQyMDQwNDc0Njk4OCks IEtRVSgxODE3NTM5NDQ3MzI4OTA1NTA5NyksCisJS1FVKCAxNTM1NDY3MTA5NjYwMzk5NDIwKSwg S1FVKCA4ODE4ODk0MjgyODc0MDYxNDQyKSwKKwlLUVUoMTIxNDA4NzMyNDM4MjQ4MTEyMTMpLCBL UVUoMTUwMzEzODY2NTM4MjMwMTQ5NDYpLAorCUtRVSggMTI4NjAyODIyMTQ1NjE0OTIzMiksIEtR VSggNjMyOTYwODg4OTM2Nzg1ODc4NCksCisJS1FVKCA5NDE5NjU0MzU0OTQ1MTMyNzI1KSwgS1FV KCA2MDk0NTc2NTQ3MDYxNjcyMzc5KSwKKwlLUVUoMTc3MDYyMTcyNTE4NDc0NTAyNTUpLCBLUVUo IDE3MzM0OTUwNzMwNjU4NzgxMjYpLAorCUtRVSgxNjkxODkyMzc1NDYwNzU1MjY2MyksIEtRVSgg ODg4MTk0OTg0OTk1NDk0NTA0NCksCisJS1FVKDEyOTM4OTc3NzA2ODk2MzEzODkxKSwgS1FVKDE0 MDQzNjI4NjM4Mjk5NzkzNDA3KSwKKwlLUVUoMTgzOTM4NzQ1ODE3MjM3MTgyMzMpLCBLUVUoIDY4 ODYzMTg1MzQ4NDY4OTIwNDQpLAorCUtRVSgxNDU3Nzg3MDg3ODAzODMzNDA4MSksIEtRVSgxMzU0 MTU1ODM4MzQzOTQxNDExOSksCisJS1FVKDEzNTcwNDcyMTU4ODA3NTg4MjczKSwgS1FVKDE4MzAw NzYwNTM3OTEwMjgzMzYxKSwKKwlLUVUoICA4MTgzNjg1NzI4MDA2MDkyMDUpLCBLUVUoIDE0MTcw MDA1ODUxMTI1NzMyMTkpLAorCUtRVSgxMjMzNzUzMzE0Mzg2NzY4MzY1NSksIEtRVSgxMjQzMzE4 MDk5NDcwMjMxNDQ4MCksCisJS1FVKCAgNzc4MTkwMDA1ODI5MTg5MDgzKSwgS1FVKDEzNjY3MzU2 MjE2MjA2NTI0NzExKSwKKwlLUVUoIDk4NjYxNDk4OTUyOTUyMjUyMzApLCBLUVUoMTEwNDMyNDA0 OTA0MTcxMTE5OTkpLAorCUtRVSggMTEyMzkzMzgyNjU0MTM3ODU5OCksIEtRVSggNjQ2OTYzMTkz MzYwNTEyMzYxMCksCisJS1FVKDE0NTA4NTU0MDc0NDMxOTgwMDQwKSwgS1FVKDEzOTE4OTMxMjQy OTYyMDI2NzE0KSwKKwlLUVUoIDI4NzA3ODU5MjkzNDIzNDgyODUpLCBLUVUoMTQ3ODYzNjI2MjY3 NDA3MzY5NzQpLAorCUtRVSgxMzE3NjY4MDA2MDkwMjY5NTc4NiksIEtRVSggOTU5MTc3ODYxMzU0 MTY3OTQ1NiksCisJS1FVKCA5MDk3NjYyODg1MTE3NDM2NzA2KSwgS1FVKCAgNzQ5MjYyMjM0MjQw OTI0OTQ3KSwKKwlLUVUoIDE5NDQ4NDQwNjc3OTMzMDcwOTMpLCBLUVUoIDQzMzkyMTQ5MDQ1Nzc0 ODc3NDIpLAorCUtRVSggODAwOTU4NDE1Mjk2MTk0NjU1MSksIEtRVSgxNjA3MzE1OTUwMTIyNTUw MTc3NyksCisJS1FVKCAzMzM1ODcwNTkwNDk5MzA2MjE3KSwgS1FVKDE3MDg4MzEyNjUzMTUxMjAy ODQ3KSwKKwlLUVUoIDMxMDg4OTMxNDI2ODE5MzE4NDgpLCBLUVUoMTY2MzY4NDE3NjcyMDI3OTIw MjEpLAorCUtRVSgxMDQyMzMxNjQzMTExODQwMDYzNyksIEtRVSggODAwODM1NzM2ODY3NDQ0MzUw NiksCisJS1FVKDExMzQwMDE1MjMxOTE0Njc3ODc1KSwgS1FVKDE3Njg3ODk2NTAxNTk0OTM2MDkw KSwKKwlLUVUoMTUxNzM2Mjc5MjE3NjMxOTk5NTgpLCBLUVUoICA1NDI1Njk0ODIyNDM3MjE5NTkp LAorCUtRVSgxNTA3MTcxNDk4Mjc2OTgxMjk3NSksIEtRVSggNDQ2NjYyNDg3MjE1MTM4Njk1Niks CisJS1FVKCAxOTAxNzgwNzE1NjAyMzMyNDYxKSwgS1FVKCA5ODIyMjI3NzQyMTU0MzUxMDk4KSwK KwlLUVUoIDE0NzkzMzI4OTI5Mjg2NDg3ODApLCBLUVUoIDY5ODE2MTE5NDgzODI0NzQ0MDApLAor CUtRVSggNzYyMDgyNDkyNDQ1NjA3NzM3NiksIEtRVSgxNDA5NTk3MzMyOTQyOTQwNjc4MiksCisJ S1FVKCA3OTAyNzQ0MDA1Njk2MTg1NDA0KSwgS1FVKDE1ODMwNTc3MjE5Mzc1MDM2OTIwKSwKKwlL UVUoMTAyODcwNzY2NjczMTc3NjQ0MTYpLCBLUVUoMTIzMzQ4NzI3NjQwNzE3MjQwMjUpLAorCUtR VSggNDQxOTMwMjA4ODEzMzU0NDMzMSksIEtRVSgxNDQ1NTg0Mjg1MTI2NjA5MDUyMCksCisJS1FV KDEyNDg4MDc3NDE2NTA0NjU0MjIyKSwgS1FVKCA3OTUzODkyMDE3NzAxODg2NzY2KSwKKwlLUVUo IDYzMzE0ODQ5MjU1Mjk1MTkwMDcpLCBLUVUoIDQ5MDIxNDU4NTM3ODUwMzAwMjIpLAorCUtRVSgx NzAxMDE1OTIxNjA5NjQ0MzA3MyksIEtRVSgxMTk0NTM1NDY2ODY1Mzg4NjA4NyksCisJS1FVKDE1 MTEyMDIyNzI4NjQ1MjMwODI5KSwgS1FVKDE3MzYzNDg0NDg0NTIyOTg2NzQyKSwKKwlLUVUoIDQ0 MjM0OTc4MjU4OTY2OTI4ODcpLCBLUVUoIDgxNTU0ODk1MTA4MDkwNjc0NzEpLAorCUtRVSggIDI1 ODk2NjYwNTYyMjU3NjI4NSksIEtRVSggNTQ2Mjk1ODA3NTc0MjAyMDUzNCksCisJS1FVKCA2NzYz NzEwMjE0OTEzMjc2MjI4KSwgS1FVKCAyMzY4OTM1MTgzNDUxMTA5MDU0KSwKKwlLUVUoMTQyMDk1 MDYxNjUyNDY0NTM4MTEpLCBLUVUoIDI2NDYyNTcwNDA5Nzg1MTQ4ODEpLAorCUtRVSggMzc3NjAw MTkxMTkyMjIwNzY3MiksIEtRVSggMTQxOTMwNDYwMTM5MDE0NzYzMSksCisJS1FVKDE0OTg3MzY2 NTk4MDIyNDU4Mjg0KSwgS1FVKCAzOTc3NzcwNzAxMDY1ODE1NzIxKSwKKwlLUVUoICA3MzA4MjA0 MTc0NTE4Mzg4OTgpLCBLUVUoIDM5ODI5OTE3MDM2MTI4ODUzMjcpLAorCUtRVSggMjgwMzU0NDUx OTY3MTM4ODQ3NyksIEtRVSgxNzA2NzY2NzIyMTExNDQyNDY0OSksCisJS1FVKCAyOTIyNTU1MTE5 NzM3ODY3MTY2KSwgS1FVKCAxOTg5NDc3NTg0MTIxNDYwOTMyKSwKKwlLUVUoMTUwMjAzODc2MDU4 OTIzMzczNTQpLCBLUVUoIDkyOTMyNzc3OTY0Mjc1MzM1NDcpLAorCUtRVSgxMDcyMjE4MTQyNDA2 MzU1NzI0NyksIEtRVSgxNjcwNDU0MjMzMjA0NzUxMTY1MSksCisJS1FVKCA1MDA4Mjg2MjM2MTQy MDg5NTE0KSwgS1FVKDE2MTc0NzMyMzA4NzQ3MzgyNTQwKSwKKwlLUVUoMTc1OTcwMTk0ODU3OTgz Mzg0MDIpLCBLUVUoMTMwODE3NDUxOTkxMTA2MjIwOTMpLAorCUtRVSggODg1MDMwNTg4Mzg0MjI1 ODExNSksIEtRVSgxMjcyMzYyOTEyNTYyNDU4OTAwNSksCisJS1FVKCA4MTQwNTY2NDUzNDAyODA1 OTc4KSwgS1FVKDE1MzU2Njg0NjA3NjgwOTM1MDYxKSwKKwlLUVUoMTQyMjIxOTAzODczNDI2NDg2 NTApLCBLUVUoMTExMzQ2MTA0NjA2NjU5NzUxNzgpLAorCUtRVSggMTI1OTc5OTA1ODYyMDk4NDI2 NiksIEtRVSgxMzI4MTY1NjI2ODAyNTYxMDA0MSksCisJS1FVKCAgMjk4MjYyNTYxMDY4MTUzOTky KSwgS1FVKDEyMjc3ODcxNzAwMjM5MjEyOTIyKSwKKwlLUVUoMTM5MTEyOTc3NzQ3MTk3Nzk0Mzgp LCBLUVUoMTY1NTY3Mjc5NjI3NjE0NzQ5MzQpLAorCUtRVSgxNzkwMzAxMDMxNjY1NDcyODAxMCks IEtRVSggOTY4MjYxNzY5OTY0ODQzNDc0NCksCisJS1FVKDE0NzU3NjgxODM2ODM4NTkyODUwKSwg S1FVKCAxMzI3MjQyNDQ2NTU4NTI0NDczKSwKKwlLUVUoMTExMjY2NDUwOTg3ODA1NzI3OTIpLCBL UVUoIDE4ODM2MDIzMjkzMTMyMjE3NzQpLAorCUtRVSggMjU0Mzg5Nzc4MzkyMjc3Njg3MyksIEtR VSgxNTAyOTE2ODUxMzc2Nzc3Mjg0MiksCisJS1FVKDEyNzEwMjcwNjUxMDM5MTI5ODc4KSwgS1FV KDE2MTE4MjAyOTU2MDY5NjA0NTA0KSwKKwlLUVUoMTUwMTA3NTkzNzIxNjg2ODA1MjQpLCBLUVUo IDIyOTY4MjcwODIyNTE5MjM5NDgpLAorCUtRVSgxMDc5MzcyOTc0MjYyMzUxODEwMSksIEtRVSgx MzgyOTc2NDE1MTg0NTQxMzA0NiksCisJS1FVKDE3NzY5MzAxMjIzMTg0NDUxMjEzKSwgS1FVKCAz MTE4MjY4MTY5MjEwNzgzMzcyKSwKKwlLUVUoMTc2MjYyMDQ1NDQxMDUxMjMxMjcpLCBLUVUoIDc0 MTY3MTg0ODg5NzQzNTI2NDQpLAorCUtRVSgxMDQ1MDc1MTk5NjIxMjkyNTk5NCksIEtRVSggOTM1 MjUyOTUxOTEyODc3MDU4NiksCisJS1FVKCAgMjU5MzQ3NTY5NjQxMTEwMTQwKSwgS1FVKCA4MDQ4 NTg4ODkyMjY5NjkyNjk3KSwKKwlLUVUoIDE3NzQ0MTQxNTIzMDY0OTQwNTgpLCBLUVUoMTA2Njk1 NDgzNDcyMTQzNTU2MjIpLAorCUtRVSgxMzA2MTk5MjI1MzgxNjc5NTA4MSksIEtRVSgxODQzMjY3 NzgwMzA2Mzg2MTY1OSksCisJS1FVKCA4ODc5MTkxMDU1NTkzOTg0MzMzKSwgS1FVKDEyNDMzNzUz MTk1MTk5MjY4MDQxKSwKKwlLUVUoMTQ5MTkzOTI0MTU0Mzk3MzA2MDIpLCBLUVUoIDY2MTI4NDgz Nzg1OTUzMzI5NjMpLAorCUtRVSggNjMyMDk4NjgxMjAzNjE0MzYyOCksIEtRVSgxMDQ2NTU5MjQy MDIyNjA5Mjg1OSksCisJS1FVKCA0MTk2MDA5Mjc4OTYyNTcwODA4KSwgS1FVKCAzNzQ3ODE2NTY0 NDczNTcyMjI0KSwKKwlLUVUoMTc5NDEyMDM0ODYxMzM3MzI4OTgpLCBLUVUoIDIzNTAzMTAwMzcw NDA1MDUxOTgpLAorCUtRVSggNTgxMTc3OTg1OTEzNDM3MDExMyksIEtRVSgxMDQ5MjEwOTU5OTUw NjE5NTEyNiksCisJS1FVKCA3Njk5NjUwNjkwMTc5NTQxMjc0KSwgS1FVKCAxOTU0MzM4NDk0MzA2 MDIyOTYxKSwKKwlLUVUoMTQwOTU4MTY5NjkwMjcyMzExNTIpLCBLUVUoIDU4NDEzNDY5MTk5NjQ4 NTIwNjEpLAorCUtRVSgxNDk0NTk2OTUxMDE0ODIxNDczNSksIEtRVSggMzY4MDIwMDMwNTg4NzU1 MDk5MiksCisJS1FVKCA2MjE4MDQ3NDY2MTMxNjk1NzkyKSwgS1FVKCA4MjQyMTY1NzQ1MTc1Nzc1 MDk2KSwKKwlLUVUoMTEwMjEzNzE5MzQwNTMzMDczNTcpLCBLUVUoIDEyNjUwOTk1MDI3NTMxNjk3 OTcpLAorCUtRVSggNDY0NDM0NzQzNjExMTMyMTcxOCksIEtRVSggMzYwOTI5NjkxNjc4MjgzMjg1 OSksCisJS1FVKCA4MTA5ODA3OTkyMjE4NTIxNTcxKSwgS1FVKDE4Mzg3ODg0MjE1NjQ4NjYyMDIw KSwKKwlLUVUoMTQ2NTYzMjQ4OTYyOTYzOTI5MDIpLCBLUVUoMTczODY4MTkwOTEyMzgyMTY3NTEp LAorCUtRVSgxNzc4ODMwMDg3ODU4MjMxNzE1MiksIEtRVSggNzkxOTQ0NjI1OTc0MjM5OTU5MSks CisJS1FVKCA0NDY2NjEzMTM0NTc2MzU4MDA0KSwgS1FVKDEyOTI4MTgxMDIzNjY3OTM4NTA5KSwK KwlLUVUoMTMxNDc0NDYxNTQ0NTQ5MzIwMzApLCBLUVUoMTY1NTIxMjkwMzgyNTI3MzQ2MjApLAor CUtRVSggODM5NTI5OTQwMzczODgyMjQ1MCksIEtRVSgxMTMxMzgxNzY1NTI3NTM2MTE2NCksCisJ S1FVKCAgNDM0MjU4ODA5NDk5NTExNzE4KSwgS1FVKCAyMDc0ODgyMTA0OTU0Nzg4Njc2KSwKKwlL UVUoIDc5Mjk4OTIxNzg3NTkzOTU1MTgpLCBLUVUoIDkwMDY0NjE2MjkxMDU3NDUzODgpLAorCUtR VSggNTE3NjQ3NTY1MDAwMDMyMzA4NiksIEtRVSgxMTEyODM1NzAzMzQ2ODM0MTA2OSksCisJS1FV KDEyMDI2MTU4ODUxNTU5MTE4OTU1KSwgS1FVKDE0Njk5NzE2MjQ5NDcxMTU2NTAwKSwKKwlLUVUo ICA0NDg5ODI0OTcxMjAyMDY3NTcpLCBLUVUoIDQxNTY0NzUzNTY2ODU1MTk5MDApLAorCUtRVSgg NjA2MzgxNjEwMzQxNzIxNTcyNyksIEtRVSgxMDA3MzI4OTM4Nzk1NDk3MTQ3OSksCisJS1FVKCA4 MTc0NDY2ODQ2MTM4NTkwOTYyKSwgS1FVKCAyNjc1Nzc3NDUyMzYzNDQ5MDA2KSwKKwlLUVUoIDkw OTA2ODU0MjA1NzI0NzQyODEpLCBLUVUoIDY2NTk2NTI2NTI3NjU1NjIwNjApLAorCUtRVSgxMjky MzEyMDMwNDAxODEwNjYyMSksIEtRVSgxMTExNzQ4MDU2MDMzNDUyNjc3NSksCisJS1FVKCAgOTM3 OTEwNDczNDI0NTg3NTExKSwgS1FVKCAxODM4NjkyMTEzNTAyMzQ2NjQ1KSwKKwlLUVUoMTExMzM5 MTQwNzQ2NDg3MjYxODApLCBLUVUoIDc5MjI2MDA5NDUxNDM4ODQwNTMpLAorCUtRVSgxMzQzNTI4 NzcwMjcwMDk1OTU1MCksIEtRVSggNTI4Nzk2NDkyMTI1MTEyMzMzMiksCisJS1FVKDExMzU0ODc1 Mzc0NTc1MzE4OTQ3KSwgS1FVKDE3OTU1NzI0NzYwNzQ4MjM4MTMzKSwKKwlLUVUoMTM3Mjg2MTcz OTYyOTcxMDY1MTIpLCBLUVUoIDQxMDc0NDk2NjAxMTgxMDEyNTUpLAorCUtRVSggMTIxMDI2OTc5 NDg4NjU4OTYyMyksIEtRVSgxMTQwODY4NzIwNTczMzQ1NjI4MiksCisJS1FVKCA0NTM4MzU0NzEw MzkyNjc3ODg3KSwgS1FVKDEzNTY2ODAzMzE5MzQxMzE5MjY3KSwKKwlLUVUoMTc4NzA3OTgxMDc3 MzQwNTA3NzEpLCBLUVUoIDMzNTQzMTg5ODI1NjgwODkxMzUpLAorCUtRVSggOTAzNDQ1MDgzOTQw NTEzMzY1MSksIEtRVSgxMzA4NzQzMTc5NTc1MzQyNDMxNCksCisJS1FVKCAgOTUwMzMzMTAyODIw Njg4MjM5KSwgS1FVKCAxOTY4MzYwNjU0NTM1NjA0MTE2KSwKKwlLUVUoMTY4NDA1NTE2NDU1NjMz MTQ5OTUpLCBLUVUoIDg4Njc1MDE4MDM4OTI5MjQ5OTUpLAorCUtRVSgxMTM5NTM4ODY0NDQ5MDYy Njg0NSksIEtRVSggMTUyOTgxNTgzNjMwMDczMjIwNCksCisJS1FVKDEzMzMwODQ4NTIyOTk2NjA4 ODQyKSwgS1FVKCAxODEzNDMyODc4ODE3NTA0MjY1KSwKKwlLUVUoIDIzMzY4Njc0MzI2OTM0Mjk1 NjApLCBLUVUoMTUxOTI4MDU0NDU5NzMzODU5MDIpLAorCUtRVSggMjUyODU5MzA3MTA3NjQwNzg3 NyksIEtRVSggIDEyODQ1OTc3NzkzNjY4OTI0OCksCisJS1FVKCA5OTc2MzQ1MzgyODY3MjE0ODY2 KSwgS1FVKCA2MjA4ODg1NzY2NzY3OTk2MDQzKSwKKwlLUVUoMTQ5ODIzNDk1MjIyNzMxNDE3MDYp LCBLUVUoIDMwOTk2NTQzNjI0MTA3Mzc4MjIpLAorCUtRVSgxMzc3NjcwMDc2MTk0NzI5NzY2MSks IEtRVSggODgwNjE4NTQ3MDY4NDkyNTU1MCksCisJS1FVKCA4MTUxNzE3ODkwNDEwNTg1MzIxKSwg S1FVKCAgNjQwODYwNTkxNTg4MDcyOTI1KSwKKwlLUVUoMTQ1OTIwOTYzMDM5MzczMDc0NjUpLCBL UVUoIDkwNTY0NzI0MTk2MTM1NjQ4NDYpLAorCUtRVSgxNDg2MTU0NDY0Nzc0MjI2NjM1MiksIEtR VSgxMjcwMzc3MTUwMDM5ODQ3MDIxNiksCisJS1FVKCAzMTQyMzcyODAwMzg0MTM4NDY1KSwgS1FV KCA2MjAxMTA1NjA2OTE3MjQ4MTk2KSwKKwlLUVUoMTgzMzc1MTY0MDkzNTkyNzAxODQpLCBLUVUo MTUwNDIyNjg2OTU2NjUxMTUzMzkpLAorCUtRVSgxNTE4ODI0NjU0MTM4MzI4Mzg0NiksIEtRVSgx MjgwMDAyODY5MzA5MDExNDUxOSksCisJS1FVKCA1OTkyODU5NjIxMTAxNDkzNDcyKSwgS1FVKDE4 Mjc4MDQzOTcxODE2ODAzNTIxKSwKKwlLUVUoIDkwMDI3NzMwNzUyMTk0MjQ1NjApLCBLUVUoIDcz MjU3MDcxMTY5NDM1OTgzNTMpLAorCUtRVSggNzkzMDU3MTkzMTI0ODA0MDgyMiksIEtRVSggNTY0 NTI3NTg2OTYxNzAyMzQ0OCksCisJS1FVKCA3MjY2MTA3NDU1Mjk1OTU4NDg3KSwgS1FVKCA0MzYz NjY0NTI4MjczNTI0NDExKSwKKwlLUVUoMTQzMTM4NzU3NjM3ODc0Nzk4MDkpLCBLUVUoMTcwNTk2 OTU2MTM1NTM0ODY4MDIpLAorCUtRVSggOTI0Nzc2MTQyNTg4OTk0MDkzMiksIEtRVSgxMzcwNDcy NjQ1OTIzNzU5MzEyOCksCisJS1FVKCAyNzAxMzEyNDI3MzI4OTA5ODMyKSwgS1FVKDE3MjM1NTMy MDA4Mjg3MjQzMTE1KSwKKwlLUVUoMTQwOTMxNDc3NjE0OTE3Mjk1MzgpLCBLUVUoIDYyNDczNTIy NzM3NjgzODY1MTYpLAorCUtRVSggODI2ODcxMDA0ODE1MzI2ODQxNSksIEtRVSggNzk4NTI5NTIx NDQ3NzE4MjA4MyksCisJS1FVKDE1NjI0NDk1MTkwODg4ODk2ODA3KSwgS1FVKCAzNzcyNzUzNDMw MDQ1MjYyNzg4KSwKKwlLUVUoIDkxMzM5OTE2MjA0NzQ5OTE2OTgpLCBLUVUoIDU2NjU3OTE5NDMz MTYyNTYwMjgpLAorCUtRVSggNzU1MTk5NjgzMjQ2MjE5MzQ3MyksIEtRVSgxMzE2MzcyOTIwNjc5 ODk1Mzg3NyksCisJS1FVKCA5MjYzNTMyMDc0MTUzODQ2Mzc0KSwgS1FVKCAxMDE1NDYwNzAzNjk4 NjE4MzUzKSwKKwlLUVUoMTc5Mjk4NzQ2OTY5ODk1MTkzOTApLCBLUVUoMTgyNTc4ODQ3MjE0NjYx NTM4NDcpLAorCUtRVSgxNjI3MTg2NzU0MzAxMTIyMjk5MSksIEtRVSggMzkwNTk3MTUxOTAyMTc5 MTk0MSksCisJS1FVKDE2ODE0NDg4Mzk3MTM3MDUyMDg1KSwgS1FVKCAxMzIxMTk3Njg1NTA0NjIx NjEzKSwKKwlLUVUoIDI4NzAzNTkxOTE4OTQwMDIxODEpLCBLUVUoMTQzMTcyODI5NzAzMjMzOTU0 NTApLAorCUtRVSgxMzY2MzkyMDg0NTUxMTA3NDM2NiksIEtRVSggMjA1MjQ2Mzk5NTc5NjUzOTU5 NCksCisJS1FVKDE0MTI2MzQ1Njg2NDMxNDQ0MzM3KSwgS1FVKCAxNzI3NTcyMTIxOTQ3MDIyNTM0 KSwKKwlLUVUoMTc3OTM1NTIyNTQ0ODU1OTQyNDEpLCBLUVUoIDY3Mzg4NTc0MTg4NDkyMDU3NTAp LAorCUtRVSggMTI4Mjk4NzEyMzE1NzQ0Mjk1MiksIEtRVSgxNjY1NTQ4MDAyMTU4MTE1OTI1MSks CisJS1FVKCA2Nzg0NTg3MDMyMDgwMTgzODY2KSwgS1FVKDE0NzI2NzU4ODA1MzU5OTY1MTYyKSwK KwlLUVUoIDc1Nzc5OTU5MzM5NjE5ODczNDkpLCBLUVUoMTI1Mzk2MDkzMjAzMTExMTQwMzYpLAor CUtRVSgxMDc4OTc3MzAzMzM4NTQzOTQ5NCksIEtRVSggODUxNzAwMTQ5NzQxMTE1ODIyNyksCisJ S1FVKDEwMDc1NTQzOTMyMTM2MzM5NzEwKSwgS1FVKDE0ODM4MTUyMzQwOTM4ODExMDgxKSwKKwlL UVUoIDk1NjA4NDA2MzE3OTQwNDQxOTQpLCBLUVUoMTc0NDU3MzY1NDE0NTQxMTc0NzUpLAorCUtR VSgxMDYzMzAyNjQ2NDMzNjM5MzE4NiksIEtRVSgxNTcwNTcyOTcwODI0MjI0NjI5MyksCisJS1FV KCAxMTE3NTE3NTk2ODkxNDExMDk4KSwgS1FVKCA0MzA1NjU3OTQzNDE1ODg2OTQyKSwKKwlLUVUo IDQ5NDg4NTY4NDA1MzM5NzkyNjMpLCBLUVUoMTYwNzE2ODE5ODkwNDE3ODk1OTMpLAorCUtRVSgx MzcyMzAzMTQyOTI3MjQ4NjUyNyksIEtRVSggNzYzOTU2NzYyMjMwNjUwOTQ2MiksCisJS1FVKDEy NjcwNDI0NTM3NDgzMDkwMzkwKSwgS1FVKCA5NzE1MjIzNDUzMDk3MTk3MTM0KSwKKwlLUVUoIDU0 NTcxNzMzODk5OTI2ODYzOTQpLCBLUVUoICAyODk4NTcxMjkyNzYxMzUxNDUpLAorCUtRVSgxNzA0 ODYxMDI3MDUyMTk3MjUxMiksIEtRVSggIDY5Mjc2ODAxMzMwOTgzNTQ4NSksCisJS1FVKDE0ODIz MjMyMzYwNTQ2NjMyMDU3KSwgS1FVKDE4MjE4MDAyMzYxMzE3ODk1OTM2KSwKKwlLUVUoIDMyODE3 MjQyNjAyMTI2NTAyMDQpLCBLUVUoMTY0NTM5NTcyNjY1NDk1MTM3OTUpLAorCUtRVSggODU5Mjcx MTEwOTc3NDUxMTg4MSksIEtRVSggIDkyOTgyNTEyMzQ3MzM2OTU3OSksCisJS1FVKDE1OTY2Nzg0 NzY5NzY0MzY3NzkxKSwgS1FVKCA5NjI3MzQ0MjkxNDUwNjA3NTg4KSwKKwlLUVUoMTA4NDk1NTU1 MDQ5Nzc4MTMyODcpLCBLUVUoIDkyMzQ1NjY5MTM5MzYzMzkyNzUpLAorCUtRVSggNjQxMzgwNzY5 MDM2NjkxMTIxMCksIEtRVSgxMDg2MjM4OTAxNjE4NDIxOTI2NyksCisJS1FVKDEzODQyNTA0Nzk5 MzM1Mzc0MDQ4KSwgS1FVKCAxNTMxOTk0MTEzMzc2ODgxMTc0KSwKKwlLUVUoIDIwODEzMTQ4Njc1 NDQzNjQ0NTkpLCBLUVUoMTY0MzA2Mjg3OTE2MTY5NTk5MzIpLAorCUtRVSggODMxNDcxNDAzODY1 NDM5NDM2OCksIEtRVSggOTE1NTQ3Mzg5MjA5ODQzMTgxMyksCisJS1FVKDEyNTc3ODQzNzg2Njcw NDc1NzA0KSwgS1FVKCA0Mzk5MTYxMTA2NDUyNDAxMDE3KSwKKwlLUVUoIDE2NjgwODMwOTE2ODI2 MjMxODYpLCBLUVUoIDE3NDEzODM3NzcyMDM3MTQyMTYpLAorCUtRVSggMjE2MjU5NzI4NTQxNzc5 NDM3NCksIEtRVSgxNTg0MTk4MDE1OTE2NTIxODczNiksCisJS1FVKCAxOTcxMzU0NjAzNTUxNDY3 MDc5KSwgS1FVKCAxMjA2NzE0NzY0OTEzMjA1OTY4KSwKKwlLUVUoIDQ3OTA4NjA0Mzk1OTEyNzIz MzApLCBLUVUoMTQ2OTkzNzU2MTU1OTQwNTU3OTkpLAorCUtRVSggODM3NDQyMzg3MTY1NzQ0OTk4 OCksIEtRVSgxMDk1MDY4NTczNjQ3MjkzNzczOCksCisJS1FVKCAgNjk3MzQ0MzMxMzQzMjY3MTc2 KSwgS1FVKDEwMDg0OTk4NzYzMTE4MDU5ODEwKSwKKwlLUVUoMTI4OTczNjk1Mzk3OTU5ODMxMjQp LCBLUVUoMTIzNTEyNjAyOTIxNDQzODM2MDUpLAorCUtRVSggMTI2ODgxMDk3MDE3NjgxMTIzNCks IEtRVSggNzQwNjI4NzgwMDQxNDU4Mjc2OCksCisJS1FVKCAgNTE2MTY5NTU3MDQzODA3ODMxKSwg S1FVKCA1MDc3NTY4Mjc4NzEwNTIwMzgwKSwKKwlLUVUoIDM4Mjg3OTE3MzgzMDkwMzkzMDQpLCBL UVUoIDc3MjE5NzQwNjk5NDY5NDM2MTApLAorCUtRVSggMzUzNDY3MDI2MDk4MTA5NjQ2MCksIEtR VSggNDg2NTc5MjE4OTYwMDU4NDg5MSksCisJS1FVKDE2ODkyNTc4NDkzNzM0MzM3Mjk4KSwgS1FV KCA5MTYxNDk5NDY0Mjc4MDQyNTkwKSwKKwlLUVUoMTE5NzYxNDk2MjQwNjcwNTU5MzEpLCBLUVUo MTMyMTk0Nzk4ODcyNzczNDM5OTApLAorCUtRVSgxNDE2MTU1NjczODExMTUwMDY4MCksIEtRVSgx NDY3MDcxNTI1NTAxMTIyMzA1NiksCisJS1FVKCA0NjcxMjA1Njc4NDAzNTc2NTU4KSwgS1FVKDEy NjMzMDIyOTMxNDU0MjU5NzgxKSwKKwlLUVUoMTQ4MjEzNzYyMTk4NjkxODc2NDYpLCBLUVUoICA3 NTExODE3NzY0ODQzMTcwMjgpLAorCUtRVSggMjE5MjIxMTMwODgzOTA0NzA3MCksIEtRVSgxMTc4 NzMwNjM2MjM2MTI0NTE4OSksCisJS1FVKDEwNjcyMzc1MTIwNzQ0MDk1NzA3KSwgS1FVKCA0NjAx OTcyMzI4MzQ1MjQ0NDY3KSwKKwlLUVUoMTU0NTcyMTc3ODg4MzExMjU4NzkpLCBLUVUoIDg0NjQz NDUyNTY3NzU0NjA4MDkpLAorCUtRVSgxMDE5MTkzODc4OTQ4NzE1OTQ3OCksIEtRVSggNjE4NDM0 ODczOTYxNTE5NzYxMyksCisJS1FVKDExNDI1NDM2Nzc4ODA2ODgyMTAwKSwgS1FVKCAyNzM5MjI3 MDg5MTI0MzE5NzkzKSwKKwlLUVUoICA0NjE0NjQ1MTg0NTYwMDA1NTEpLCBLUVUoIDQ2ODk4NTAx NzAwMjkxNzc0NDIpLAorCUtRVSggNjEyMDMwNzgxNDM3NDA3ODYyNSksIEtRVSgxMTE1MzU3OTIz MDY4MTcwODY3MSksCisJS1FVKCA3ODkxNzIxNDczOTA1MzQ3OTI2KSwgS1FVKDEwMjgxNjQ2OTM3 ODI0ODcyNDAwKSwKKwlLUVUoIDMwMjYwOTk2NDgxOTEzMzIyNDgpLCBLUVUoIDg2NjY3NTAyOTY5 NTMyNzM4MTgpLAorCUtRVSgxNDk3ODQ5OTY5ODg0NDM2MzIzMiksIEtRVSgxMzMwMzM5NTEwMjg5 MDEzMjA2NSksCisJS1FVKCA4MTgyMzU4MjA1MjkyODY0MDgwKSwgS1FVKDEwNTYwNTQ3NzEzOTcy OTcxMjkxKSwKKwlLUVUoMTE5ODE2MzU0ODk0MTg5NTkwOTMpLCBLUVUoIDMxMzQ2MjEzNTQ5MzUy ODg0MDkpLAorCUtRVSgxMTU4MDY4MTk3NzQwNDM4Mzk2OCksIEtRVSgxNDIwNTUzMDMxNzQwNDA4 ODY1MCksCisJS1FVKCA1OTk3Nzg5MDExODU0OTIzMTU3KSwgS1FVKDEzNjU5MTUxNTkzNDMyMjM4 MDQxKSwKKwlLUVUoMTE2NjQzMzIxMTQzMzg4NjUwODYpLCBLUVUoIDc0OTAzNTEzODMyMjA5Mjkz ODYpLAorCUtRVSggNzE4OTI5MDQ5OTg4MTUzMDM3OCksIEtRVSgxNTAzOTI2MjczNDI3MTAyMDIy MCksCisJS1FVKCAyMDU3MjE3Mjg1OTc2OTgwMDU1KSwgS1FVKCAgNTU1NTcwODA0OTA1MzU1NzM5 KSwKKwlLUVUoMTEyMzUzMTE5NjgzNDg1NTUxMTApLCBLUVUoMTM4MjQ1NTcxNDYyNjk2MDMyMTcp LAorCUtRVSgxNjkwNjc4ODg0MDY1MzA5OTY5MyksIEtRVSggNzIyMjg3ODI0NTQ1NTY2MTY3Nyks CisJS1FVKCA1MjQ1MTM5NDQ0MzMyNDIzNzU2KSwgS1FVKCA0NzIzNzQ4NDYyODA1Njc0MjkyKSwK KwlLUVUoMTIyMTY1MDk4MTU2OTg1Njg2MTIpLCBLUVUoMTc0MDIzNjI5NzY2NDg5NTExODcpLAor CUtRVSgxNzM4OTYxNDgzNjgxMDM2Njc2OCksIEtRVSggNDg4MDkzNjQ4NDE0NjY2NzcxMSksCisJ S1FVKCA5MDg1MDA3ODM5MjkyNjM5ODgwKSwgS1FVKDEzODM3MzUzNDU4NDk4NTM1NDQ5KSwKKwlL UVUoMTE5MTQ0MTk4NTQzNjAzNjY2NzcpLCBLUVUoMTY1OTU4OTAxMzUzMTM4NjQxMDMpLAorCUtR VSggNjMxMzk2OTg0NzE5NzYyNzIyMiksIEtRVSgxODI5NjkwOTc5MjE2MzkxMDQzMSksCisJS1FV KDEwMDQxNzgwMTEzMzgyMDg0MDQyKSwgS1FVKCAyNDk5NDc4NTUxMTcyODg0Nzk0KSwKKwlLUVUo MTEwNTc4OTQyNDYyNDExODk0ODkpLCBLUVUoIDk3NDIyNDMwMzIzODkwNjg1NTUpLAorCUtRVSgx MjgzODkzNDU4MjY3MzE5NjIyOCksIEtRVSgxMzQzNzAyMzIzNTI0ODQ5MDM2NyksCisJS1FVKDEz MzcyNDIwNjY5NDQ2MTYzMjQwKSwgS1FVKCA2NzUyNTY0MjQ0NzE2OTA5MjI0KSwKKwlLUVUoIDcx NTczMzMwNzM0MDAzMTM3MzcpLCBLUVUoMTIyMzAyODE1MTYzNzA2NTQzMDgpLAorCUtRVSggMTE4 Mjg4NDU1MjIxOTQxOTExNyksIEtRVSggMjk1NTEyNTM4MTMxMjQ5OTIxOCksCisJS1FVKDEwMzA4 ODI3MDk3MDc5NDQzMjQ5KSwgS1FVKCAxMzM3NjQ4NTcyOTg2NTM0OTU4KSwKKwlLUVUoMTYzNzg3 ODg1OTAwMjAzNDM5MzkpLCBLUVUoICAxMDg2MTkxMjY1MTQ0MjA5MzUpLAorCUtRVSggMzk5MDk4 MTAwOTYyMTYyOTE4OCksIEtRVSggNTQ2MDk1MzA3MDIzMDk0NjQxMCksCisJS1FVKCA5NzAzMzI4 MzI5MzY2NTMxODgzKSwgS1FVKDEzMTY2NjMxNDg5MTg4MDc3MjM2KSwKKwlLUVUoIDExMDQ3Njg4 MzEyMTM2NzUxNzApLCBLUVUoIDM0NDc5MzA0NTg1NTM4Nzc5MDgpLAorCUtRVSggODA2NzE3MjQ4 Nzc2OTk0NTY3NiksIEtRVSggNTQ0NTgwMjA5ODE5MDc3NTM0NyksCisJS1FVKCAzMjQ0ODQwOTgx NjQ4OTczODczKSwgS1FVKDE3MzE0NjY4MzIyOTgxOTUwMDYwKSwKKwlLUVUoIDUwMDY4MTI1Mjc4 Mjc3NjM4MDcpLCBLUVUoMTgxNTg2OTUwNzAyMjU1MjYyNjApLAorCUtRVSggMjgyNDUzNjQ3ODg1 MjQxNzg1MyksIEtRVSgxMzk3NDc3NTgwOTEyNzUxOTg4NiksCisJS1FVKCA5ODE0MzYyNzY5MDc0 MDY3MzkyKSwgS1FVKDE3Mjc2MjA1MTU2Mzc0ODYyMTI4KSwKKwlLUVUoMTEzNjE2ODA3MjUzNzkz MDY5NjcpLCBLUVUoIDM0MjI1ODE5NzAzODIwMTI1NDIpLAorCUtRVSgxMTAwMzE4OTYwMzc1MzI0 MTI2NiksIEtRVSgxMTE5NDI5Mjk0NTI3Nzg2MjI2MSksCisJS1FVKCA2ODM5NjIzMzEzOTA4NTIx MzQ4KSwgS1FVKDExOTM1MzI2NDYyNzA3MzI0NjM0KSwKKwlLUVUoIDE2MTE0NTY3ODg2ODU4Nzg0 NDQpLCBLUVUoMTMxMTI2MjA5ODk0NzU1NTg5MDcpLAorCUtRVSggIDUxNzY1OTEwODkwNDQ1MDQy NyksIEtRVSgxMzU1ODExNDMxODU3NDQwNzYyNCksCisJS1FVKDE1Njk5MDg5NzQyNzMxNjMzMDc3 KSwgS1FVKCA0OTg4OTc5Mjc4ODYyNjg1NDU4KSwKKwlLUVUoIDgxMTEzNzM1ODMwNTY1MjEyOTcp LCBLUVUoIDM4OTEyNTg3NDY2MTUzOTk2MjcpLAorCUtRVSggODEzNzI5ODI1MTQ2OTcxODA4Niks IEtRVSgxMjc0ODY2MzI5NTYyNDcwMTY0OSksCisJS1FVKCA0Mzg5ODM1NjgzNDk1MjkyMDYyKSwg S1FVKCA1Nzc1MjE3ODcyMTI4ODMxNzI5KSwKKwlLUVUoIDk0NjIwOTE4OTY0MDU1MzQ5MjcpLCBL UVUoIDg0OTgxMjQxMDg4MjAyNjM5ODkpLAorCUtRVSggODA1OTEzMTI3ODg0MjgzOTUyNSksIEtR VSgxMDUwMzE2Nzk5NDI1NDA5MDg5MiksCisJS1FVKDExNjEzMTUzNTQxMDcwMzk2NjU2KSwgS1FV KDE4MDY5MjQ4NzM4NTA0NjQ3NzkwKSwKKwlLUVUoICA1NzA2NTc0MTkxMDk3Njg1MDgpLCBLUVUo IDM5NTA1NzQxNjc3NzExNTk2NjUpLAorCUtRVSggNTUxNDY1NTU5OTYwNDMxMzA3NyksIEtRVSgg MjkwODQ2MDg1NDQyODQ4NDE2NSksCisJS1FVKDEwNzc3NzIyNjE1OTM1NjYzMTE0KSwgS1FVKDEy MDA3MzYzMzA0ODM5Mjc5NDg2KSwKKwlLUVUoIDk4MDA2NDYxODc1Njk0ODQ3NjcpLCBLUVUoIDg3 OTU0MjM1NjQ4ODk4NjQyODcpLAorCUtRVSgxNDI1NzM5NjY4MDEzMTAyODQxOSksIEtRVSggNjQw NTQ2NTExNzMxNTA5NjQ5OCksCisJS1FVKCA3OTM5NDExMDcyMjA4Nzc0ODc4KSwgS1FVKDE3NTc3 NTcyMzc4NTI4OTkwMDA2KSwKKwlLUVUoMTQ3ODU4NzM4MDY3MTU5OTQ4NTApLCBLUVUoMTY3NzA1 NzI2ODA4NTQ3NDczOTApLAorCUtRVSgxODEyNzU0OTQ3NDQxOTM5NjQ4MSksIEtRVSgxMTYzNzAx MzQ0OTQ1NTc1Nzc1MCksCisJS1FVKDE0MzcxODUxOTMzOTk2NzYxMDg2KSwgS1FVKCAzNjAxMTgx MDYzNjUwMTEwMjgwKSwKKwlLUVUoIDQxMjY0NDI4NDUwMTkzMTYxNDQpLCBLUVUoMTAxOTgyODcy MzkyNDQzMjA2NjkpLAorCUtRVSgxODAwMDE2OTYyODU1NTM3OTY1OSksIEtRVSgxODM5MjQ4MjQw MDczOTk3ODI2OSksCisJS1FVKCA2MjE5OTE5MDM3Njg2OTE5OTU3KSwgS1FVKCAzNjEwMDg1Mzc3 NzE5NDQ2MDUyKSwKKwlLUVUoIDI1MTM5MjUwMzk5ODE3NzYzMzYpLCBLUVUoMTY2Nzk0MTM1Mzc5 MjY3MTY5NTUpLAorCUtRVSgxMjkwMzMwMjEzMTcxNDkwOTQzNCksIEtRVSggNTU4MTE0NTc4OTc2 Mjk4NTAwOSksCisJS1FVKDEyMzI1OTU1MDQ0MjkzMzAzMjMzKSwgS1FVKDE3MjE2MTExMTgwNzQy MTQxMjA0KSwKKwlLUVUoIDYzMjE5MTk1OTUyNzY1NDU3NDApLCBLUVUoIDM1MDc1MjExNDcyMTYx NzQ1MDEpLAorCUtRVSggOTY1OTE5NDU5MzMxOTQ4MTg0MCksIEtRVSgxMTQ3Mzk3NjAwNTk3NTM1 ODMyNiksCisJS1FVKDE0NzQyNzMwMTAxNDM1OTg3MDI2KSwgS1FVKCAgNDkyODQ1ODk3NzA5OTU0 NzgwKSwKKwlLUVUoMTY5NzYzNzExODYxNjI1OTk2NzYpLCBLUVUoMTc3MTI3MDM0MjI4Mzc2NDg2 NTUpLAorCUtRVSggOTg4MTI1NDc3ODU4NzA2MTY5NyksIEtRVSggODQxMzIyMzE1NjMwMjI5OTU1 MSksCisJS1FVKCAxNTYzODQxODI4MjU0MDg5MTY4KSwgS1FVKCA5OTk2MDMyNzU4Nzg2NjcxOTc1 KSwKKwlLUVUoICAxMzg4Nzc3MDA1ODM3NzI2NjcpLCBLUVUoMTMwMDMwNDMzNjg1NzQ5OTU5ODkp LAorCUtRVSggNDM5MDU3MzY2ODY1MDQ1NjU4NyksIEtRVSggODYxMDI4NzM5MDU2ODEyNjc1NSks CisJS1FVKDE1MTI2OTA0OTc0MjY2NjQyMTk5KSwgS1FVKCA2NzAzNjM3MjM4OTg2MDU3NjYyKSwK KwlLUVUoIDI4NzMwNzU1OTI5NTY4MTAxNTcpLCBLUVUoIDYwMzUwODA5MzM5NDYwNDk0MTgpLAor CUtRVSgxMzM4Mjg0NjU4MTIwMjM1MzAxNCksIEtRVSggNzMwMzk3MTAzMTgxNDY0MjQ2MyksCisJ S1FVKDE4NDE4MDI0NDA1MzA3NDQ0MjY3KSwgS1FVKCA1ODQ3MDk2NzMxNjc1NDA0NjQ3KSwKKwlL UVUoIDQwMzU4ODA2OTk2Mzk4NDI1MDApLCBLUVUoMTE1MjUzNDg2MjUxMTIyMTg0NzgpLAorCUtR VSggMzA0MTE2MjM2NTQ1OTU3NDEwMiksIEtRVSggMjYwNDczNDQ4NzcyNzk4NjU1OCksCisJS1FV KDE1NTI2MzQxNzcxNjM2OTgzMTQ1KSwgS1FVKDE0NTU2MDUyMzEwNjk3MzcwMjU0KSwKKwlLUVUo MTI5OTc3ODcwNzc5MzA4MDgxNTUpLCBLUVUoIDk2MDE4MDY1MDE3NTU1NTQ0OTkpLAorCUtRVSgx MTM0OTY3Nzk1MjUyMTQyMzM4OSksIEtRVSgxNDk1Njc3NzgwNzY0NDg5OTM1MCksCisJS1FVKDE2 NTU5NzM2OTU3NzQyODUyNzIxKSwgS1FVKDEyMzYwODI4Mjc0Nzc4MTQwNzI2KSwKKwlLUVUoIDY2 ODUzNzMyNzIwMDk2NjI1MTMpLCBLUVUoMTY5MzIyNTg3NDgwNTUzMjQxMzApLAorCUtRVSgxNTkx ODA1MTEzMTk1NDE1ODUwOCksIEtRVSggMTY5MjMxMjkxMzE0MDc5MDE0NCksCisJS1FVKCAgNTQ2 NjUzODI2ODAxNjM3MzY3KSwgS1FVKCA1MzQxNTg3MDc2MDQ1OTg2NjUyKSwKKwlLUVUoMTQ5NzUw NTcyMzYzNDI1ODU2NjIpLCBLUVUoMTIzNzQ5NzYzNTczNDA2MjI0MTIpLAorCUtRVSgxMDMyODgz Mzk5NTE4MTk0MDU1MiksIEtRVSgxMjgzMTgwNzEwMTcxMDQ0MzE0OSksCisJS1FVKDEwNTQ4NTE0 OTE0MzgyNTQ1NzE2KSwgS1FVKCAyMjE3ODA2NzI3MTk5NzE1OTkzKSwKKwlLUVUoMTI2MjcwNjcz NjkyNDI4NDUxMzgpLCBLUVUoIDQ1OTg5NjUzNjQwMzU0MzgxNTgpLAorCUtRVSggIDE1MDkyMzM1 Mjc1MTMxODE3MSksIEtRVSgxNDI3NDEwOTU0NDQ0MjI1NzI4MyksCisJS1FVKCA0Njk2NjYxNDc1 MDkzODYzMDMxKSwgS1FVKCAxNTA1NzY0MTE0Mzg0NjU0NTE2KSwKKwlLUVUoMTA2OTkxODU4MzE4 OTE0OTUxNDcpLCBLUVUoIDIzOTIzNTM4NDc3MTM2MjA1MTkpLAorCUtRVSggMzY1Mjg3MDE2Njcx MTc4ODM4MyksIEtRVSggODY0MDY1MzI3NjIyMTkxMTEwOCksCisJS1FVKCAzODk0MDc3NTkyMjc1 ODg5NzA0KSwgS1FVKCA0OTE4NTkyODcyMTM1OTY0ODQ1KSwKKwlLUVUoMTYzNzkxMjEyNzMyODE0 MDA3ODkpLCBLUVUoMTIwNTg0NjU0ODM1OTE2ODM2NTYpLAorCUtRVSgxMTI1MDEwNjgyOTMwMjky NDk0NSksIEtRVSggMTE0NzUzNzU1NjI5Njk4MzAwNSksCisJS1FVKCA2Mzc2MzQyNzU2MDA0NjEz MjY4KSwgS1FVKDE0OTY3MTI4MTkxNzA5MjgwNTA2KSwKKwlLUVUoMTgwMDc0NDk5NDk3OTA2Mjc2 MjgpLCBLUVUoIDk0OTcxNzgyNzkzMTY1Mzc4NDEpLAorCUtRVSggNzkyMDE3NDg0NDgwOTM5NDg5 MyksIEtRVSgxMDAzNzc1MjU5NTI1NTcxOTkwNyksCisJS1FVKDE1ODc1MzQyNzg0OTg1MjE3Njk3 KSwgS1FVKDE1MzExNjE1OTIxNzEyODUwNjk2KSwKKwlLUVUoIDk1NTI5MDI2NTIxMTA5OTI5NTAp LCBLUVUoMTQwNTQ5Nzk0NTAwOTk3MjExNDApLAorCUtRVSggNTk5ODcwOTc3MzU2NjQxNzM0OSks IEtRVSgxODAyNzkxMDMzOTI3NjMyMDE4NyksCisJS1FVKCA4MjIzMDk5MDUzODY4NTg1NTU0KSwg S1FVKCA3ODQyMjcwMzU0ODI0OTk5NzY3KSwKKwlLUVUoIDQ4OTYzMTU2ODg3NzAwODAyOTIpLCBL UVUoMTI5NjkzMjAyOTY1Njk3ODc4OTUpLAorCUtRVSggMjY3NDMyMTQ4OTE4NTc1OTk2MSksIEtR VSggNDA1MzYxNTkzNjg2NDcxODQzOSksCisJS1FVKDExMzQ5Nzc1MjcwNTg4NjE3NTc4KSwgS1FV KCA0NzQzMDE5MjU2Mjg0NTUzOTc1KSwKKwlLUVUoIDU2MDIxMDAyMTc0Njk3MjM3NjkpLCBLUVUo MTQzOTg5OTU2OTE0MTE1Mjc4MTMpLAorCUtRVSggNzQxMjE3MDQ5Mzc5NjgyNTQ3MCksIEtRVSgg IDgzNjI2MjQwNjEzMTc0NDg0NiksCisJS1FVKCA4MjMxMDg2NjMzODQ1MTUzMDIyKSwgS1FVKCA1 MTYxMzc3OTIwNDM4NTUyMjg3KSwKKwlLUVUoIDg4Mjg3MzExOTYxNjk5MjQ5NDkpLCBLUVUoMTYy MTExNDIyNDY0NjU1MDI2ODApLAorCUtRVSggMzMwNzk5MDg3OTI1MzY4NzgxOCksIEtRVSggNTE5 MzQwNTQwNjg5OTc4MjAyMiksCisJS1FVKCA4NTEwODQyMTE3NDY3NTY2NjkzKSwgS1FVKCA2MDcw OTU1MTgxMDIyNDA1MzY1KSwKKwlLUVUoMTQ0ODI5NTAyMzEzNjE0MDk3OTkpLCBLUVUoMTI1ODUx NTkzNzEzMzExMzgwNzcpLAorCUtRVSggMzUxMTUzNzY3ODkzMzU4ODE0OCksIEtRVSggMjA0MTg0 OTQ3NDUzMTExNjQxNyksCisJS1FVKDEwOTQ0OTM2Njg1MDk1MzQ1NzkyKSwgS1FVKDE4MzAzMTE2 OTIzMDc5MTA3NzI5KSwKKwlLUVUoIDI3MjA1NjYzNzEyMzk3MjUzMjApLCBLUVUoIDQ5NTg2NzI0 NzM1NjIzOTc2MjIpLAorCUtRVSggMzAzMjMyNjY2ODI1MzI0MzQxMiksIEtRVSgxMzY4OTQxODY5 MTcyNjkwODMzOCksCisJS1FVKCAxODk1MjA1NTExNzI4ODQzOTk2KSwgS1FVKCA4MTQ2MzAzNTE1 MjcxOTkwNTI3KSwKKwlLUVUoMTY1MDczNDM1MDAwNTYxMTM0ODApLCBLUVUoICA0NzM5OTY5Mzkx MDU5MDI5MTkpLAorCUtRVSggOTg5NzY4Njg4NTI0Njg4MTQ4MSksIEtRVSgxNDYwNjQzMzc2Mjcx Mjc5MDU3NSksCisJS1FVKCA2NzMyNzk2MjUxNjA1NTY2MzY4KSwgS1FVKCAxMzk5Nzc4MTIwODU1 MzY4OTE2KSwKKwlLUVUoICA5MzUwMjM4ODUxODI4MzM3NzcpLCBLUVUoMTYwNjYyODI4MTYxODY3 NTM0NzcpLAorCUtRVSggNzI5MTI3MDk5MTgyMDYxMjA1NSksIEtRVSgxNzUzMDIzMDM5MzEyOTg1 Mzg0NCksCisJS1FVKDEwMjIzNDkzNjIzNDc3NDUxMzY2KSwgS1FVKDE1ODQxNzI1NjMwNDk1Njc2 NjgzKSwKKwlLUVUoMTczNzk1NjcyNDY0MzU1MTU4MjQpLCBLUVUoIDg1ODgyNTE0MjkzNzU1NjE5 NzEpLAorCUtRVSgxODMzOTUxMTIxMDg4NzIwNjQyMyksIEtRVSgxNzM0OTU4NzQzMDcyNTk3NjEw MCksCisJS1FVKDEyMjQ0ODc2NTIxMzk0ODM4MDg4KSwgS1FVKCA2MzgyMTg3NzE0MTQ3MTYxMjU5 KSwKKwlLUVUoMTIzMzU4MDcxODE4NDg5NTA4MzEpLCBLUVUoMTY5NDg4ODU2MjIzMDU0NjA2NjUp LAorCUtRVSgxMzc1NTA5Nzc5NjM3MTUyMDUwNiksIEtRVSgxNDgwNjc0MDM3MzMyNDk0NzgwMSks CisJS1FVKCA0ODI4Njk5NjMzODU5Mjg3NzAzKSwgS1FVKCA4MjA5ODc5MjgxNDUyMzAxNjA0KSwK KwlLUVUoMTI0MzU3MTY2Njk1NTM3MzY0MzcpLCBLUVUoMTM5NzA5NzY4NTk1ODg0NTIxMzEpLAor CUtRVSggNjIzMzk2MDg0MjU2Njc3MzE0OCksIEtRVSgxMjUwNzA5NjI2NzkwMDUwNTc1OSksCisJ S1FVKCAxMTk4NzEzMTE0MzgxMjc5NDIxKSwgS1FVKDE0OTg5ODYyNzMxMTI0MTQ5MDE1KSwKKwlL UVUoMTU5MzIxODk1MDg3MDc5Nzg5NDkpLCBLUVUoIDI1MjY0MDY2NDE0MzI3MDg3MjIpLAorCUtR VSggICAyOTE4NzQyNzgxNzI3MTk4MiksIEtRVSggMTQ5OTgwMjc3MzA1NDU1NjM1MyksCisJS1FV KDEwODE2NjM4MTg3MDIxODk3MTczKSwgS1FVKCA1NDM2MTM5MjcwODM5NzM4MTMyKSwKKwlLUVUo IDY2NTk4ODIyODcwMzYwMTAwODIpLCBLUVUoIDIxNTQwNDg5NTUzMTcxNzM2OTcpLAorCUtRVSgx MDg4NzMxNzAxOTMzMzc1NzY0MiksIEtRVSgxNjI4MTA5MTgwMjYzNDQyNDk1NSksCisJS1FVKDEw NzU0NTQ5ODc5OTE1Mzg0OTAxKSwgS1FVKDEwNzYwNjExNzQ1NzY5MjQ5ODE1KSwKKwlLUVUoIDIx NjE1MDU5NDY5NzI1MDQwMDIpLCBLUVUoIDUyNDMxMzI4MDg5ODYyNjUxMDcpLAorCUtRVSgxMDEy OTg1MjE3OTg3MzQxNTQxNiksIEtRVSggIDcxMDMzOTQ4MDAwODY0OTA4MSksCisJS1FVKCA3ODAy MTI5NDUzMDY4ODA4NTI4KSwgS1FVKDE3OTY3MjEzNTY3MTc4OTA3MjEzKSwKKwlLUVUoMTU3MzA4 NTkxMjQ2Njg2MDU1OTkpLCBLUVUoMTMwNTgzNTYxNjg5NjIzNzY1MDIpLAorCUtRVSggMzcwMTIy NDk4NTQxMzY0NTkwOSksIEtRVSgxNDQ2NDA2NTg2OTE0OTEwOTI2NCksCisJS1FVKCA5OTU5Mjcy NDE4ODQ0MzExNjQ2KSwgS1FVKDEwMTU3NDI2MDk5NTE1OTU4NzUyKSwKKwlLUVUoMTQwMTM3MzY4 MTQ1MzgyNjg1MjgpLCBLUVUoMTc3OTc0NTY5OTIwNjU2NTM5NTEpLAorCUtRVSgxNzQxODg3ODE0 MDI1NzM0NDgwNiksIEtRVSgxNTQ1NzQyOTA3MzU0MDU2MTUyMSksCisJS1FVKCAyMTg0NDI2ODgx MzYwOTQ5Mzc4KSwgS1FVKCAyMDYyMTkzMDQxMTU0NzEyNDE2KSwKKwlLUVUoIDg1NTM0NjMzNDc0 MDY5MzE2NjEpLCBLUVUoIDQ5MTMwNTc2MjUyMDI4NzE4NTQpLAorCUtRVSggMjY2ODk0MzY4MjEy NjYxODQyNSksIEtRVSgxNzA2NDQ0NDczNzg5MTE3MjI4OCksCisJS1FVKCA0OTk3MTE1OTAzOTEz Mjk4NjM3KSwgS1FVKDEyMDE5NDAyNjA4ODkyMzI3NDE2KSwKKwlLUVUoMTc2MDM1ODQ1NTk3NjU4 OTczNTIpLCBLUVUoMTEzNjc1Mjk1ODIwNzM2NDc5NzUpLAorCUtRVSggODIxMTQ3NjA0MzUxODQz NjA1MCksIEtRVSggODY3Njg0OTgwNDA3MDMyMzY3NCksCisJS1FVKDE4NDMxODI5MjMwMzk0NDc1 NzMwKSwgS1FVKDEwNDkwMTc3ODYxMzYxMjQ3OTA0KSwKKwlLUVUoIDk1MDg3MjA2MDIwMjU2NTEz NDkpLCBLUVUoIDc0MDk2Mjc0NDg1NTU3MjI3MDApLAorCUtRVSggNTgwNDA0NzAxODg2MjcyOTAw OCksIEtRVSgxMTk0Mzg1ODE3Njg5MzE0MjU5NCksCisJS1FVKDExOTA4MDk1NDE4OTMzODQ3MDky KSwgS1FVKCA1NDE1NDQ5MzQ1NzE1ODg3NjUyKSwKKwlLUVUoIDE1NTQwMjI2OTkxNjYxNTY0MDcp LCBLUVUoIDkwNzMzMjIxMDY0MDYwMTcxNjEpLAorCUtRVSggNzA4MDYzMDk2Nzk2OTA0NzA4Miks IEtRVSgxODA0OTczNjk0MDg2MDczMjk0MyksCisJS1FVKDEyNzQ4NzE0MjQyNTk0MTk2Nzk0KSwg S1FVKCAxMjI2OTkyNDE1NzM1MTU2NzQxKSwKKwlLUVUoMTc5MDA5ODEwMTk2MDk1MzExOTMpLCBL UVUoMTE3MjA3Mzk3NDQwMDg3MTA5OTkpLAorCUtRVSggMzAwNjQwMDY4MzM5NDc3NTQzNCksIEtR VSgxMTM0Nzk3NDAxMTc1MTk5NjAyOCksCisJS1FVKCAzMzE2OTk5NjI4MjU3OTU0NjA4KSwgS1FV KCA4Mzg0NDg0NTYzNTU3NjM5MTAxKSwKKwlLUVUoMTgxMTc3OTQ2ODU5NjE3Mjk3NjcpLCBLUVUo IDE5MDAxNDUwMjU1OTY2MTgxOTQpLAorCUtRVSgxNzQ1OTUyNzg0MDYzMjg5MjY3NiksIEtRVSgg NTYzNDc4NDEwMTg2NTcxMDk5NCksCisJS1FVKCA3OTE4NjE5MzAwMjkyODk3MTU4KSwgS1FVKCAz MTQ2NTc3NjI1MDI2MzAxMzUwKSwKKwlLUVUoIDk5NTUyMTI4NTY0OTkwNjg3NjcpLCBLUVUoIDE4 NzM5OTU4NDM2ODE3NDY5NzUpLAorCUtRVSggMTU2MTQ4Nzc1OTk2Nzk3MjE5NCksIEtRVSggODMy MjcxODgwNDM3NTg3ODQ3NCksCisJS1FVKDExMzAwMjg0MjE1MzI3MDI4MzY2KSwgS1FVKCA0NjY3 MzkxMDMyNTA4OTk4OTgyKSwKKwlLUVUoIDk4MjAxMDQ0OTQzMDY2MjU1ODApLCBLUVUoMTc5MjIz OTc5Njg1OTk5NzA2MTApLAorCUtRVSggMTc4NDY5MDQ2MTg4Njc4NjcxMiksIEtRVSgxNDk0MDM2 NTA4NDM0MTM0NjgyMSksCisJS1FVKCA1MzQ4NzE5NTc1NTk0MTg2MTgxKSwgS1FVKDEwNzIwNDE5 MDg0NTA3ODU1MjYxKSwKKwlLUVUoMTQyMTAzOTQzNTQxNDUxNDMyNzQpLCBLUVUoIDI0MjY0Njg2 OTIxNjQwMDAxMzEpLAorCUtRVSgxNjI3MTA2MjExNDYwNzA1OTIwMiksIEtRVSgxNDg1MTkwNDA5 MjM1NzA3MDI0NyksCisJS1FVKCA2NTI0NDkzMDE1NjkzMTIxODk3KSwgS1FVKCA5ODI1NDczODM1 MTI3MTM4NTMxKSwKKwlLUVUoMTQyMjI1MDA2MTYyNjg1Njk1NzgpLCBLUVUoMTU1MjE0ODQwNTIw MDc0ODc0NjgpLAorCUtRVSgxNDQ2MjU3OTQwNDEyNDYxNDY5OSksIEtRVSgxMTAxMjM3NTU5MDgy MDY2NTUyMCksCisJS1FVKDExNjI1MzI3MzUwNTM2MDg0OTI3KSwgS1FVKDE0NDUyMDE3NzY1MjQz Nzg1NDE3KSwKKwlLUVUoIDk5ODkzNDIyNjM1MTg3NjYzMDUpLCBLUVUoIDM2NDAxMDU0NzExMDE4 MDM3OTApLAorCUtRVSggNDc0OTg2NjQ1NTg5NzUxMzI0MiksIEtRVSgxMzk2MzA2NDk0NjczNjMx MjA0NCksCisJS1FVKDEwMDA3NDE2NTkxOTczMjIzNzkxKSwgS1FVKDE4MzE0MTMyMjM0NzE3NDMx MTE1KSwKKwlLUVUoIDMyODY1OTY1ODg2MTc0ODM0NTApLCBLUVUoIDc3MjYxNjM0NTUzNzA4MTg3 NjUpLAorCUtRVSggNzU3NTQ1NDcyMTExNTM3OTMyOCksIEtRVSggNTMwODMzMTU3NjQzNzY2MzQy MiksCisJS1FVKDE4Mjg4ODIxODk0OTAzNTMwOTM0KSwgS1FVKCA4MDI4NDA1ODA1NDEwNTU0MTA2 KSwKKwlLUVUoMTU3NDQwMTk4MzIxMDMyOTY2MjgpLCBLUVUoICAxNDk3NjU1NTk2MzA5MzIxMDAp LAorCUtRVSggNjEzNzcwNTU1NzIwMDA3MTk3NyksIEtRVSgxNDUxMzQxNjMxNTQzNDgwMzYxNSks CisJS1FVKDExNjY1NzAyODIwMTI4OTg0NDczKSwgS1FVKCAgMjE4OTI2NjcwNTA1NjAxMzg2KSwK KwlLUVUoIDY4Njg2NzUwMjg3MTc3Njk1MTkpLCBLUVUoMTUyODIwMTY1Njk0NDE1MTIzMDIpLAor CUtRVSggNTcwNzAwMDQ5Nzc4Mjk2MDIzNiksIEtRVSggNjY3MTEyMDU4NjU1NTA3OTU2NyksCisJ S1FVKCAyMTk0MDk4MDUyNjE4OTg1NDQ4KSwgS1FVKDE2ODQ5NTc3ODk1NDc3MzMwOTc4KSwKKwlL UVUoMTI5NTcxNDg0NzEwMTc0NjYyODMpLCBLUVUoIDE5OTc4MDU1MzU0MDQ4NTkzOTMpLAorCUtR VSggMTE4MDcyMTA2MDI2Mzg2MDQ5MCksIEtRVSgxMzIwNjM5MTMxMDE5Mzc1Njk1OCksCisJS1FV KDEyOTgwMjA4Njc0NDYxODYxNzk3KSwgS1FVKCAzODI1OTY3Nzc1MDU4ODc1MzY2KSwKKwlLUVUo MTc1NDM0MzM2NzA3ODIwNDI2MzEpLCBLUVUoIDE1MTgzMzkwNzAxMjAzMjI3MzApLAorCUtRVSgx NjM0NDU4NDM0MDg5MDk5MTY2OSksIEtRVSggMjYxMTMyNzE2NTMxODUyOTgxOSksCisJS1FVKDEx MjY1MDIyNzIzMjgzNDIyNTI5KSwgS1FVKCA0MDAxNTUyODAwMzczMTk2ODE3KSwKKwlLUVUoMTQ1 MDk1OTU4OTAwNzkzNDYxNjEpLCBLUVUoIDM1Mjg3MTcxNjU0MTYyMzQ1NjIpLAorCUtRVSgxODE1 MzIyMjU3MTUwMTkxNDA3MiksIEtRVSggOTM4NzE4Mjk3NzIwOTc0NDQyNSksCisJS1FVKDEwMDY0 MzQyMzE1OTg1NTgwMDIxKSwgS1FVKDExMzczNjc4NDEzMjE1MjUzOTc3KSwKKwlLUVUoIDIzMDg0 NTc4NTMyMjg3OTgwOTkpLCBLUVUoIDk3MjkwNDI5NDI4Mzk1NDUzMDIpLAorCUtRVSggNzgzMzc4 NTQ3MTE0MDEyNzc0NiksIEtRVSggNjM1MTA0OTkwMDMxOTg0NDQzNiksCisJS1FVKDE0NDU0NjEw NjI3MTMzNDk2MDY3KSwgS1FVKDEyNTMzMTc1NjgzNjM0ODE5MTExKSwKKwlLUVUoMTU1NzAxNjM5 MjY3MTY1MTMwMjkpLCBLUVUoMTMzNTY5ODA1MTkxODU3NjI0OTgpCit9OworCitURVNUX0JFR0lO KHRlc3RfZ2VuX3JhbmRfMzIpIHsKKwl1aW50MzJfdCBhcnJheTMyW0JMT0NLX1NJWkVdIEpFTUFM TE9DX0FUVFIoYWxpZ25lZCgxNikpOworCXVpbnQzMl90IGFycmF5MzJfMltCTE9DS19TSVpFXSBK RU1BTExPQ19BVFRSKGFsaWduZWQoMTYpKTsKKwlpbnQgaTsKKwl1aW50MzJfdCByMzI7CisJc2Zt dF90ICpjdHg7CisKKwlleHBlY3RfZF9sZShnZXRfbWluX2FycmF5X3NpemUzMigpLCBCTE9DS19T SVpFLAorCSAgICAiQXJyYXkgc2l6ZSB0b28gc21hbGwiKTsKKwljdHggPSBpbml0X2dlbl9yYW5k KDEyMzQpOworCWZpbGxfYXJyYXkzMihjdHgsIGFycmF5MzIsIEJMT0NLX1NJWkUpOworCWZpbGxf YXJyYXkzMihjdHgsIGFycmF5MzJfMiwgQkxPQ0tfU0laRSk7CisJZmluaV9nZW5fcmFuZChjdHgp OworCisJY3R4ID0gaW5pdF9nZW5fcmFuZCgxMjM0KTsKKwlmb3IgKGkgPSAwOyBpIDwgQkxPQ0tf U0laRTsgaSsrKSB7CisJCWlmIChpIDwgQ09VTlRfMSkgeworCQkJZXhwZWN0X3UzMl9lcShhcnJh eTMyW2ldLCBpbml0X2dlbl9yYW5kXzMyX2V4cGVjdGVkW2ldLAorCQkJICAgICJPdXRwdXQgbWlz bWF0Y2ggZm9yIGk9JWQiLCBpKTsKKwkJfQorCQlyMzIgPSBnZW5fcmFuZDMyKGN0eCk7CisJCWV4 cGVjdF91MzJfZXEocjMyLCBhcnJheTMyW2ldLAorCQkgICAgIk1pc21hdGNoIGF0IGFycmF5MzJb JWRdPSV4LCBnZW49JXgiLCBpLCBhcnJheTMyW2ldLCByMzIpOworCX0KKwlmb3IgKGkgPSAwOyBp IDwgQ09VTlRfMjsgaSsrKSB7CisJCXIzMiA9IGdlbl9yYW5kMzIoY3R4KTsKKwkJZXhwZWN0X3Uz Ml9lcShyMzIsIGFycmF5MzJfMltpXSwKKwkJICAgICJNaXNtYXRjaCBhdCBhcnJheTMyXzJbJWRd PSV4LCBnZW49JXgiLCBpLCBhcnJheTMyXzJbaV0sCisJCSAgICByMzIpOworCX0KKwlmaW5pX2dl bl9yYW5kKGN0eCk7Cit9CitURVNUX0VORAorCitURVNUX0JFR0lOKHRlc3RfYnlfYXJyYXlfMzIp IHsKKwl1aW50MzJfdCBhcnJheTMyW0JMT0NLX1NJWkVdIEpFTUFMTE9DX0FUVFIoYWxpZ25lZCgx NikpOworCXVpbnQzMl90IGFycmF5MzJfMltCTE9DS19TSVpFXSBKRU1BTExPQ19BVFRSKGFsaWdu ZWQoMTYpKTsKKwlpbnQgaTsKKwl1aW50MzJfdCBpbmlbNF0gPSB7MHgxMjM0LCAweDU2NzgsIDB4 OWFiYywgMHhkZWYwfTsKKwl1aW50MzJfdCByMzI7CisJc2ZtdF90ICpjdHg7CisKKwlleHBlY3Rf ZF9sZShnZXRfbWluX2FycmF5X3NpemUzMigpLCBCTE9DS19TSVpFLAorCSAgICAiQXJyYXkgc2l6 ZSB0b28gc21hbGwiKTsKKwljdHggPSBpbml0X2J5X2FycmF5KGluaSwgNCk7CisJZmlsbF9hcnJh eTMyKGN0eCwgYXJyYXkzMiwgQkxPQ0tfU0laRSk7CisJZmlsbF9hcnJheTMyKGN0eCwgYXJyYXkz Ml8yLCBCTE9DS19TSVpFKTsKKwlmaW5pX2dlbl9yYW5kKGN0eCk7CisKKwljdHggPSBpbml0X2J5 X2FycmF5KGluaSwgNCk7CisJZm9yIChpID0gMDsgaSA8IEJMT0NLX1NJWkU7IGkrKykgeworCQlp ZiAoaSA8IENPVU5UXzEpIHsKKwkJCWV4cGVjdF91MzJfZXEoYXJyYXkzMltpXSwgaW5pdF9ieV9h cnJheV8zMl9leHBlY3RlZFtpXSwKKwkJCSAgICAiT3V0cHV0IG1pc21hdGNoIGZvciBpPSVkIiwg aSk7CisJCX0KKwkJcjMyID0gZ2VuX3JhbmQzMihjdHgpOworCQlleHBlY3RfdTMyX2VxKHIzMiwg YXJyYXkzMltpXSwKKwkJICAgICJNaXNtYXRjaCBhdCBhcnJheTMyWyVkXT0leCwgZ2VuPSV4Iiwg aSwgYXJyYXkzMltpXSwgcjMyKTsKKwl9CisJZm9yIChpID0gMDsgaSA8IENPVU5UXzI7IGkrKykg eworCQlyMzIgPSBnZW5fcmFuZDMyKGN0eCk7CisJCWV4cGVjdF91MzJfZXEocjMyLCBhcnJheTMy XzJbaV0sCisJCSAgICAiTWlzbWF0Y2ggYXQgYXJyYXkzMl8yWyVkXT0leCwgZ2VuPSV4IiwgaSwg YXJyYXkzMl8yW2ldLAorCQkgICAgcjMyKTsKKwl9CisJZmluaV9nZW5fcmFuZChjdHgpOworfQor VEVTVF9FTkQKKworVEVTVF9CRUdJTih0ZXN0X2dlbl9yYW5kXzY0KSB7CisJdWludDY0X3QgYXJy YXk2NFtCTE9DS19TSVpFNjRdIEpFTUFMTE9DX0FUVFIoYWxpZ25lZCgxNikpOworCXVpbnQ2NF90 IGFycmF5NjRfMltCTE9DS19TSVpFNjRdIEpFTUFMTE9DX0FUVFIoYWxpZ25lZCgxNikpOworCWlu dCBpOworCXVpbnQ2NF90IHI7CisJc2ZtdF90ICpjdHg7CisKKwlleHBlY3RfZF9sZShnZXRfbWlu X2FycmF5X3NpemU2NCgpLCBCTE9DS19TSVpFNjQsCisJICAgICJBcnJheSBzaXplIHRvbyBzbWFs bCIpOworCWN0eCA9IGluaXRfZ2VuX3JhbmQoNDMyMSk7CisJZmlsbF9hcnJheTY0KGN0eCwgYXJy YXk2NCwgQkxPQ0tfU0laRTY0KTsKKwlmaWxsX2FycmF5NjQoY3R4LCBhcnJheTY0XzIsIEJMT0NL X1NJWkU2NCk7CisJZmluaV9nZW5fcmFuZChjdHgpOworCisJY3R4ID0gaW5pdF9nZW5fcmFuZCg0 MzIxKTsKKwlmb3IgKGkgPSAwOyBpIDwgQkxPQ0tfU0laRTY0OyBpKyspIHsKKwkJaWYgKGkgPCBD T1VOVF8xKSB7CisJCQlleHBlY3RfdTY0X2VxKGFycmF5NjRbaV0sIGluaXRfZ2VuX3JhbmRfNjRf ZXhwZWN0ZWRbaV0sCisJCQkgICAgIk91dHB1dCBtaXNtYXRjaCBmb3IgaT0lZCIsIGkpOworCQl9 CisJCXIgPSBnZW5fcmFuZDY0KGN0eCk7CisJCWV4cGVjdF91NjRfZXEociwgYXJyYXk2NFtpXSwK KwkJICAgICJNaXNtYXRjaCBhdCBhcnJheTY0WyVkXT0lIkZNVHg2NCIsIGdlbj0lIkZNVHg2NCwg aSwKKwkJICAgIGFycmF5NjRbaV0sIHIpOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgQ09VTlRfMjsg aSsrKSB7CisJCXIgPSBnZW5fcmFuZDY0KGN0eCk7CisJCWV4cGVjdF91NjRfZXEociwgYXJyYXk2 NF8yW2ldLAorCQkgICAgIk1pc21hdGNoIGF0IGFycmF5NjRfMlslZF09JSJGTVR4NjQiIGdlbj0l IkZNVHg2NCIiLCBpLAorCQkgICAgYXJyYXk2NF8yW2ldLCByKTsKKwl9CisJZmluaV9nZW5fcmFu ZChjdHgpOworfQorVEVTVF9FTkQKKworVEVTVF9CRUdJTih0ZXN0X2J5X2FycmF5XzY0KSB7CisJ dWludDY0X3QgYXJyYXk2NFtCTE9DS19TSVpFNjRdIEpFTUFMTE9DX0FUVFIoYWxpZ25lZCgxNikp OworCXVpbnQ2NF90IGFycmF5NjRfMltCTE9DS19TSVpFNjRdIEpFTUFMTE9DX0FUVFIoYWxpZ25l ZCgxNikpOworCWludCBpOworCXVpbnQ2NF90IHI7CisJdWludDMyX3QgaW5pW10gPSB7NSwgNCwg MywgMiwgMX07CisJc2ZtdF90ICpjdHg7CisKKwlleHBlY3RfZF9sZShnZXRfbWluX2FycmF5X3Np emU2NCgpLCBCTE9DS19TSVpFNjQsCisJICAgICJBcnJheSBzaXplIHRvbyBzbWFsbCIpOworCWN0 eCA9IGluaXRfYnlfYXJyYXkoaW5pLCA1KTsKKwlmaWxsX2FycmF5NjQoY3R4LCBhcnJheTY0LCBC TE9DS19TSVpFNjQpOworCWZpbGxfYXJyYXk2NChjdHgsIGFycmF5NjRfMiwgQkxPQ0tfU0laRTY0 KTsKKwlmaW5pX2dlbl9yYW5kKGN0eCk7CisKKwljdHggPSBpbml0X2J5X2FycmF5KGluaSwgNSk7 CisJZm9yIChpID0gMDsgaSA8IEJMT0NLX1NJWkU2NDsgaSsrKSB7CisJCWlmIChpIDwgQ09VTlRf MSkgeworCQkJZXhwZWN0X3U2NF9lcShhcnJheTY0W2ldLCBpbml0X2J5X2FycmF5XzY0X2V4cGVj dGVkW2ldLAorCQkJICAgICJPdXRwdXQgbWlzbWF0Y2ggZm9yIGk9JWQiLCBpKTsKKwkJfQorCQly ID0gZ2VuX3JhbmQ2NChjdHgpOworCQlleHBlY3RfdTY0X2VxKHIsIGFycmF5NjRbaV0sCisJCSAg ICAiTWlzbWF0Y2ggYXQgYXJyYXk2NFslZF09JSJGTVR4NjQiIGdlbj0lIkZNVHg2NCwgaSwKKwkJ ICAgIGFycmF5NjRbaV0sIHIpOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgQ09VTlRfMjsgaSsrKSB7 CisJCXIgPSBnZW5fcmFuZDY0KGN0eCk7CisJCWV4cGVjdF91NjRfZXEociwgYXJyYXk2NF8yW2ld LAorCQkgICAgIk1pc21hdGNoIGF0IGFycmF5NjRfMlslZF09JSJGTVR4NjQiIGdlbj0lIkZNVHg2 NCwgaSwKKwkJICAgIGFycmF5NjRfMltpXSwgcik7CisJfQorCWZpbmlfZ2VuX3JhbmQoY3R4KTsK K30KK1RFU1RfRU5ECisKK2ludAorbWFpbih2b2lkKSB7CisJcmV0dXJuIHRlc3QoCisJICAgIHRl c3RfZ2VuX3JhbmRfMzIsCisJICAgIHRlc3RfYnlfYXJyYXlfMzIsCisJICAgIHRlc3RfZ2VuX3Jh bmRfNjQsCisJICAgIHRlc3RfYnlfYXJyYXlfNjQpOworfQoKZGlmZiAtLWdpdCBhLzM4OS1kcy1i YXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9hMC5jIGIvMzg5LWRzLWJh c2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L2EwLmMKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzFiZTc5YQotLS0gL2Rldi9udWxsCisrKyBiLzM4OS1k cy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9hMC5jCkBAIC0wLDAg KzEsMTYgQEAKKyNpbmNsdWRlICJ0ZXN0L2plbWFsbG9jX3Rlc3QuaCIKKworVEVTVF9CRUdJTih0 ZXN0X2EwKSB7CisJdm9pZCAqcDsKKworCXAgPSBhMG1hbGxvYygxKTsKKwlleHBlY3RfcHRyX25v dF9udWxsKHAsICJVbmV4cGVjdGVkIGEwbWFsbG9jKCkgZXJyb3IiKTsKKwlhMGRhbGxvYyhwKTsK K30KK1RFU1RfRU5ECisKK2ludAorbWFpbih2b2lkKSB7CisJcmV0dXJuIHRlc3Rfbm9fbWFsbG9j X2luaXQoCisJICAgIHRlc3RfYTApOworfQoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4w LWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9hcmVuYV9kZWNheS5jIGIvMzg5LWRzLWJh c2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L2FyZW5hX2RlY2F5LmMKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTk5MWY0ZAotLS0gL2Rldi9udWxsCisr KyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9hcmVu YV9kZWNheS5jCkBAIC0wLDAgKzEsNDM2IEBACisjaW5jbHVkZSAidGVzdC9qZW1hbGxvY190ZXN0 LmgiCisjaW5jbHVkZSAidGVzdC9hcmVuYV91dGlsLmgiCisKKyNpbmNsdWRlICJqZW1hbGxvYy9p bnRlcm5hbC90aWNrZXIuaCIKKworc3RhdGljIG5zdGltZV9tb25vdG9uaWNfdCAqbnN0aW1lX21v bm90b25pY19vcmlnOworc3RhdGljIG5zdGltZV91cGRhdGVfdCAqbnN0aW1lX3VwZGF0ZV9vcmln OworCitzdGF0aWMgdW5zaWduZWQgbnVwZGF0ZXNfbW9jazsKK3N0YXRpYyBuc3RpbWVfdCB0aW1l X21vY2s7CitzdGF0aWMgYm9vbCBtb25vdG9uaWNfbW9jazsKKworc3RhdGljIGJvb2wKK25zdGlt ZV9tb25vdG9uaWNfbW9jayh2b2lkKSB7CisJcmV0dXJuIG1vbm90b25pY19tb2NrOworfQorCitz dGF0aWMgdm9pZAorbnN0aW1lX3VwZGF0ZV9tb2NrKG5zdGltZV90ICp0aW1lKSB7CisJbnVwZGF0 ZXNfbW9jaysrOworCWlmIChtb25vdG9uaWNfbW9jaykgeworCQluc3RpbWVfY29weSh0aW1lLCAm dGltZV9tb2NrKTsKKwl9Cit9CisKK1RFU1RfQkVHSU4odGVzdF9kZWNheV90aWNrcykgeworCXRl c3Rfc2tpcF9pZihpc19iYWNrZ3JvdW5kX3RocmVhZF9lbmFibGVkKCkpOworCXRlc3Rfc2tpcF9p ZihvcHRfaHBhKTsKKworCXRpY2tlcl9nZW9tX3QgKmRlY2F5X3RpY2tlcjsKKwl1bnNpZ25lZCB0 aWNrMCwgdGljazEsIGFyZW5hX2luZDsKKwlzaXplX3Qgc3osIGxhcmdlMDsKKwl2b2lkICpwOwor CisJc3ogPSBzaXplb2Yoc2l6ZV90KTsKKwlleHBlY3RfZF9lcShtYWxsY3RsKCJhcmVuYXMubGV4 dGVudC4wLnNpemUiLCAodm9pZCAqKSZsYXJnZTAsICZzeiwgTlVMTCwKKwkgICAgMCksIDAsICJV bmV4cGVjdGVkIG1hbGxjdGwgZmFpbHVyZSIpOworCisJLyogU2V0IHVwIGEgbWFudWFsbHkgbWFu YWdlZCBhcmVuYSBmb3IgdGVzdC4gKi8KKwlhcmVuYV9pbmQgPSBkb19hcmVuYV9jcmVhdGUoMCwg MCk7CisKKwkvKiBNaWdyYXRlIHRvIHRoZSBuZXcgYXJlbmEsIGFuZCBnZXQgdGhlIHRpY2tlci4g Ki8KKwl1bnNpZ25lZCBvbGRfYXJlbmFfaW5kOworCXNpemVfdCBzel9hcmVuYV9pbmQgPSBzaXpl b2Yob2xkX2FyZW5hX2luZCk7CisJZXhwZWN0X2RfZXEobWFsbGN0bCgidGhyZWFkLmFyZW5hIiwg KHZvaWQgKikmb2xkX2FyZW5hX2luZCwKKwkgICAgJnN6X2FyZW5hX2luZCwgKHZvaWQgKikmYXJl bmFfaW5kLCBzaXplb2YoYXJlbmFfaW5kKSksIDAsCisJICAgICJVbmV4cGVjdGVkIG1hbGxjdGwo KSBmYWlsdXJlIik7CisJZGVjYXlfdGlja2VyID0gdHNkX2FyZW5hX2RlY2F5X3RpY2tlcnBfZ2V0 KHRzZF9mZXRjaCgpKTsKKwlleHBlY3RfcHRyX25vdF9udWxsKGRlY2F5X3RpY2tlciwKKwkgICAg IlVuZXhwZWN0ZWQgZmFpbHVyZSBnZXR0aW5nIGRlY2F5IHRpY2tlciIpOworCisJLyoKKwkgKiBU ZXN0IHRoZSBzdGFuZGFyZCBBUElzIHVzaW5nIGEgbGFyZ2Ugc2l6ZSBjbGFzcywgc2luY2Ugd2Ug Y2FuJ3QKKwkgKiBjb250cm9sIHRjYWNoZSBpbnRlcmFjdGlvbnMgZm9yIHNtYWxsIHNpemUgY2xh c3NlcyAoZXhjZXB0IGJ5CisJICogY29tcGxldGVseSBkaXNhYmxpbmcgdGNhY2hlIGZvciB0aGUg ZW50aXJlIHRlc3QgcHJvZ3JhbSkuCisJICovCisKKwkvKiBtYWxsb2MoKS4gKi8KKwl0aWNrMCA9 IHRpY2tlcl9nZW9tX3JlYWQoZGVjYXlfdGlja2VyKTsKKwlwID0gbWFsbG9jKGxhcmdlMCk7CisJ ZXhwZWN0X3B0cl9ub3RfbnVsbChwLCAiVW5leHBlY3RlZCBtYWxsb2MoKSBmYWlsdXJlIik7CisJ dGljazEgPSB0aWNrZXJfZ2VvbV9yZWFkKGRlY2F5X3RpY2tlcik7CisJZXhwZWN0X3UzMl9uZSh0 aWNrMSwgdGljazAsICJFeHBlY3RlZCB0aWNrZXIgdG8gdGljayBkdXJpbmcgbWFsbG9jKCkiKTsK KwkvKiBmcmVlKCkuICovCisJdGljazAgPSB0aWNrZXJfZ2VvbV9yZWFkKGRlY2F5X3RpY2tlcik7 CisJZnJlZShwKTsKKwl0aWNrMSA9IHRpY2tlcl9nZW9tX3JlYWQoZGVjYXlfdGlja2VyKTsKKwll eHBlY3RfdTMyX25lKHRpY2sxLCB0aWNrMCwgIkV4cGVjdGVkIHRpY2tlciB0byB0aWNrIGR1cmlu ZyBmcmVlKCkiKTsKKworCS8qIGNhbGxvYygpLiAqLworCXRpY2swID0gdGlja2VyX2dlb21fcmVh ZChkZWNheV90aWNrZXIpOworCXAgPSBjYWxsb2MoMSwgbGFyZ2UwKTsKKwlleHBlY3RfcHRyX25v dF9udWxsKHAsICJVbmV4cGVjdGVkIGNhbGxvYygpIGZhaWx1cmUiKTsKKwl0aWNrMSA9IHRpY2tl cl9nZW9tX3JlYWQoZGVjYXlfdGlja2VyKTsKKwlleHBlY3RfdTMyX25lKHRpY2sxLCB0aWNrMCwg IkV4cGVjdGVkIHRpY2tlciB0byB0aWNrIGR1cmluZyBjYWxsb2MoKSIpOworCWZyZWUocCk7CisK KwkvKiBwb3NpeF9tZW1hbGlnbigpLiAqLworCXRpY2swID0gdGlja2VyX2dlb21fcmVhZChkZWNh eV90aWNrZXIpOworCWV4cGVjdF9kX2VxKHBvc2l4X21lbWFsaWduKCZwLCBzaXplb2Yoc2l6ZV90 KSwgbGFyZ2UwKSwgMCwKKwkgICAgIlVuZXhwZWN0ZWQgcG9zaXhfbWVtYWxpZ24oKSBmYWlsdXJl Iik7CisJdGljazEgPSB0aWNrZXJfZ2VvbV9yZWFkKGRlY2F5X3RpY2tlcik7CisJZXhwZWN0X3Uz Ml9uZSh0aWNrMSwgdGljazAsCisJICAgICJFeHBlY3RlZCB0aWNrZXIgdG8gdGljayBkdXJpbmcg cG9zaXhfbWVtYWxpZ24oKSIpOworCWZyZWUocCk7CisKKwkvKiBhbGlnbmVkX2FsbG9jKCkuICov CisJdGljazAgPSB0aWNrZXJfZ2VvbV9yZWFkKGRlY2F5X3RpY2tlcik7CisJcCA9IGFsaWduZWRf YWxsb2Moc2l6ZW9mKHNpemVfdCksIGxhcmdlMCk7CisJZXhwZWN0X3B0cl9ub3RfbnVsbChwLCAi VW5leHBlY3RlZCBhbGlnbmVkX2FsbG9jKCkgZmFpbHVyZSIpOworCXRpY2sxID0gdGlja2VyX2dl b21fcmVhZChkZWNheV90aWNrZXIpOworCWV4cGVjdF91MzJfbmUodGljazEsIHRpY2swLAorCSAg ICAiRXhwZWN0ZWQgdGlja2VyIHRvIHRpY2sgZHVyaW5nIGFsaWduZWRfYWxsb2MoKSIpOworCWZy ZWUocCk7CisKKwkvKiByZWFsbG9jKCkuICovCisJLyogQWxsb2NhdGUuICovCisJdGljazAgPSB0 aWNrZXJfZ2VvbV9yZWFkKGRlY2F5X3RpY2tlcik7CisJcCA9IHJlYWxsb2MoTlVMTCwgbGFyZ2Uw KTsKKwlleHBlY3RfcHRyX25vdF9udWxsKHAsICJVbmV4cGVjdGVkIHJlYWxsb2MoKSBmYWlsdXJl Iik7CisJdGljazEgPSB0aWNrZXJfZ2VvbV9yZWFkKGRlY2F5X3RpY2tlcik7CisJZXhwZWN0X3Uz Ml9uZSh0aWNrMSwgdGljazAsICJFeHBlY3RlZCB0aWNrZXIgdG8gdGljayBkdXJpbmcgcmVhbGxv YygpIik7CisJLyogUmVhbGxvY2F0ZS4gKi8KKwl0aWNrMCA9IHRpY2tlcl9nZW9tX3JlYWQoZGVj YXlfdGlja2VyKTsKKwlwID0gcmVhbGxvYyhwLCBsYXJnZTApOworCWV4cGVjdF9wdHJfbm90X251 bGwocCwgIlVuZXhwZWN0ZWQgcmVhbGxvYygpIGZhaWx1cmUiKTsKKwl0aWNrMSA9IHRpY2tlcl9n ZW9tX3JlYWQoZGVjYXlfdGlja2VyKTsKKwlleHBlY3RfdTMyX25lKHRpY2sxLCB0aWNrMCwgIkV4 cGVjdGVkIHRpY2tlciB0byB0aWNrIGR1cmluZyByZWFsbG9jKCkiKTsKKwkvKiBEZWFsbG9jYXRl LiAqLworCXRpY2swID0gdGlja2VyX2dlb21fcmVhZChkZWNheV90aWNrZXIpOworCXJlYWxsb2Mo cCwgMCk7CisJdGljazEgPSB0aWNrZXJfZ2VvbV9yZWFkKGRlY2F5X3RpY2tlcik7CisJZXhwZWN0 X3UzMl9uZSh0aWNrMSwgdGljazAsICJFeHBlY3RlZCB0aWNrZXIgdG8gdGljayBkdXJpbmcgcmVh bGxvYygpIik7CisKKwkvKgorCSAqIFRlc3QgdGhlICphbGxvY3goKSBBUElzIHVzaW5nIGxhcmdl IGFuZCBzbWFsbCBzaXplIGNsYXNzZXMsIHdpdGgKKwkgKiB0Y2FjaGUgZXhwbGljaXRseSBkaXNh YmxlZC4KKwkgKi8KKwl7CisJCXVuc2lnbmVkIGk7CisJCXNpemVfdCBhbGxvY3hfc2l6ZXNbMl07 CisJCWFsbG9jeF9zaXplc1swXSA9IGxhcmdlMDsKKwkJYWxsb2N4X3NpemVzWzFdID0gMTsKKwor CQlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGFsbG9jeF9zaXplcykgLyBzaXplb2Yoc2l6ZV90KTsg aSsrKSB7CisJCQlzeiA9IGFsbG9jeF9zaXplc1tpXTsKKworCQkJLyogbWFsbG9jeCgpLiAqLwor CQkJdGljazAgPSB0aWNrZXJfZ2VvbV9yZWFkKGRlY2F5X3RpY2tlcik7CisJCQlwID0gbWFsbG9j eChzeiwgTUFMTE9DWF9UQ0FDSEVfTk9ORSk7CisJCQlleHBlY3RfcHRyX25vdF9udWxsKHAsICJV bmV4cGVjdGVkIG1hbGxvY3goKSBmYWlsdXJlIik7CisJCQl0aWNrMSA9IHRpY2tlcl9nZW9tX3Jl YWQoZGVjYXlfdGlja2VyKTsKKwkJCWV4cGVjdF91MzJfbmUodGljazEsIHRpY2swLAorCQkJICAg ICJFeHBlY3RlZCB0aWNrZXIgdG8gdGljayBkdXJpbmcgbWFsbG9jeCgpIChzej0lenUpIiwKKwkJ CSAgICBzeik7CisJCQkvKiByYWxsb2N4KCkuICovCisJCQl0aWNrMCA9IHRpY2tlcl9nZW9tX3Jl YWQoZGVjYXlfdGlja2VyKTsKKwkJCXAgPSByYWxsb2N4KHAsIHN6LCBNQUxMT0NYX1RDQUNIRV9O T05FKTsKKwkJCWV4cGVjdF9wdHJfbm90X251bGwocCwgIlVuZXhwZWN0ZWQgcmFsbG9jeCgpIGZh aWx1cmUiKTsKKwkJCXRpY2sxID0gdGlja2VyX2dlb21fcmVhZChkZWNheV90aWNrZXIpOworCQkJ ZXhwZWN0X3UzMl9uZSh0aWNrMSwgdGljazAsCisJCQkgICAgIkV4cGVjdGVkIHRpY2tlciB0byB0 aWNrIGR1cmluZyByYWxsb2N4KCkgKHN6PSV6dSkiLAorCQkJICAgIHN6KTsKKwkJCS8qIHhhbGxv Y3goKS4gKi8KKwkJCXRpY2swID0gdGlja2VyX2dlb21fcmVhZChkZWNheV90aWNrZXIpOworCQkJ eGFsbG9jeChwLCBzeiwgMCwgTUFMTE9DWF9UQ0FDSEVfTk9ORSk7CisJCQl0aWNrMSA9IHRpY2tl cl9nZW9tX3JlYWQoZGVjYXlfdGlja2VyKTsKKwkJCWV4cGVjdF91MzJfbmUodGljazEsIHRpY2sw LAorCQkJICAgICJFeHBlY3RlZCB0aWNrZXIgdG8gdGljayBkdXJpbmcgeGFsbG9jeCgpIChzej0l enUpIiwKKwkJCSAgICBzeik7CisJCQkvKiBkYWxsb2N4KCkuICovCisJCQl0aWNrMCA9IHRpY2tl cl9nZW9tX3JlYWQoZGVjYXlfdGlja2VyKTsKKwkJCWRhbGxvY3gocCwgTUFMTE9DWF9UQ0FDSEVf Tk9ORSk7CisJCQl0aWNrMSA9IHRpY2tlcl9nZW9tX3JlYWQoZGVjYXlfdGlja2VyKTsKKwkJCWV4 cGVjdF91MzJfbmUodGljazEsIHRpY2swLAorCQkJICAgICJFeHBlY3RlZCB0aWNrZXIgdG8gdGlj ayBkdXJpbmcgZGFsbG9jeCgpIChzej0lenUpIiwKKwkJCSAgICBzeik7CisJCQkvKiBzZGFsbG9j eCgpLiAqLworCQkJcCA9IG1hbGxvY3goc3osIE1BTExPQ1hfVENBQ0hFX05PTkUpOworCQkJZXhw ZWN0X3B0cl9ub3RfbnVsbChwLCAiVW5leHBlY3RlZCBtYWxsb2N4KCkgZmFpbHVyZSIpOworCQkJ dGljazAgPSB0aWNrZXJfZ2VvbV9yZWFkKGRlY2F5X3RpY2tlcik7CisJCQlzZGFsbG9jeChwLCBz eiwgTUFMTE9DWF9UQ0FDSEVfTk9ORSk7CisJCQl0aWNrMSA9IHRpY2tlcl9nZW9tX3JlYWQoZGVj YXlfdGlja2VyKTsKKwkJCWV4cGVjdF91MzJfbmUodGljazEsIHRpY2swLAorCQkJICAgICJFeHBl Y3RlZCB0aWNrZXIgdG8gdGljayBkdXJpbmcgc2RhbGxvY3goKSAiCisJCQkgICAgIihzej0lenUp Iiwgc3opOworCQl9CisJfQorCisJLyoKKwkgKiBUZXN0IHRjYWNoZSBmaWxsL2ZsdXNoIGludGVy YWN0aW9ucyBmb3IgbGFyZ2UgYW5kIHNtYWxsIHNpemUgY2xhc3NlcywKKwkgKiB1c2luZyBhbiBl eHBsaWNpdCB0Y2FjaGUuCisJICovCisJdW5zaWduZWQgdGNhY2hlX2luZCwgaTsKKwlzaXplX3Qg dGNhY2hlX3NpemVzWzJdOworCXRjYWNoZV9zaXplc1swXSA9IGxhcmdlMDsKKwl0Y2FjaGVfc2l6 ZXNbMV0gPSAxOworCisJc2l6ZV90IHRjYWNoZV9tYXgsIHN6X3RjYWNoZV9tYXg7CisJc3pfdGNh Y2hlX21heCA9IHNpemVvZih0Y2FjaGVfbWF4KTsKKwlleHBlY3RfZF9lcShtYWxsY3RsKCJhcmVu YXMudGNhY2hlX21heCIsICh2b2lkICopJnRjYWNoZV9tYXgsCisJICAgICZzel90Y2FjaGVfbWF4 LCBOVUxMLCAwKSwgMCwgIlVuZXhwZWN0ZWQgbWFsbGN0bCgpIGZhaWx1cmUiKTsKKworCXN6ID0g c2l6ZW9mKHVuc2lnbmVkKTsKKwlleHBlY3RfZF9lcShtYWxsY3RsKCJ0Y2FjaGUuY3JlYXRlIiwg KHZvaWQgKikmdGNhY2hlX2luZCwgJnN6LAorCSAgICBOVUxMLCAwKSwgMCwgIlVuZXhwZWN0ZWQg bWFsbGN0bCBmYWlsdXJlIik7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHRjYWNoZV9zaXpl cykgLyBzaXplb2Yoc2l6ZV90KTsgaSsrKSB7CisJCXN6ID0gdGNhY2hlX3NpemVzW2ldOworCisJ CS8qIHRjYWNoZSBmaWxsLiAqLworCQl0aWNrMCA9IHRpY2tlcl9nZW9tX3JlYWQoZGVjYXlfdGlj a2VyKTsKKwkJcCA9IG1hbGxvY3goc3osIE1BTExPQ1hfVENBQ0hFKHRjYWNoZV9pbmQpKTsKKwkJ ZXhwZWN0X3B0cl9ub3RfbnVsbChwLCAiVW5leHBlY3RlZCBtYWxsb2N4KCkgZmFpbHVyZSIpOwor CQl0aWNrMSA9IHRpY2tlcl9nZW9tX3JlYWQoZGVjYXlfdGlja2VyKTsKKwkJZXhwZWN0X3UzMl9u ZSh0aWNrMSwgdGljazAsCisJCSAgICAiRXhwZWN0ZWQgdGlja2VyIHRvIHRpY2sgZHVyaW5nIHRj YWNoZSBmaWxsICIKKwkJICAgICIoc3o9JXp1KSIsIHN6KTsKKwkJLyogdGNhY2hlIGZsdXNoLiAq LworCQlkYWxsb2N4KHAsIE1BTExPQ1hfVENBQ0hFKHRjYWNoZV9pbmQpKTsKKwkJdGljazAgPSB0 aWNrZXJfZ2VvbV9yZWFkKGRlY2F5X3RpY2tlcik7CisJCWV4cGVjdF9kX2VxKG1hbGxjdGwoInRj YWNoZS5mbHVzaCIsIE5VTEwsIE5VTEwsCisJCSAgICAodm9pZCAqKSZ0Y2FjaGVfaW5kLCBzaXpl b2YodW5zaWduZWQpKSwgMCwKKwkJICAgICJVbmV4cGVjdGVkIG1hbGxjdGwgZmFpbHVyZSIpOwor CQl0aWNrMSA9IHRpY2tlcl9nZW9tX3JlYWQoZGVjYXlfdGlja2VyKTsKKworCQkvKiBXaWxsIG9u bHkgdGljayBpZiBpdCdzIGluIHRjYWNoZS4gKi8KKwkJZXhwZWN0X3UzMl9uZSh0aWNrMSwgdGlj azAsCisJCSAgICAiRXhwZWN0ZWQgdGlja2VyIHRvIHRpY2sgZHVyaW5nIHRjYWNoZSBmbHVzaCAo c3o9JXp1KSIsIHN6KTsKKwl9Cit9CitURVNUX0VORAorCitzdGF0aWMgdm9pZAorZGVjYXlfdGlj a2VyX2hlbHBlcih1bnNpZ25lZCBhcmVuYV9pbmQsIGludCBmbGFncywgYm9vbCBkaXJ0eSwgc3Np emVfdCBkdCwKKyAgICB1aW50NjRfdCBkaXJ0eV9ucHVyZ2UwLCB1aW50NjRfdCBtdXp6eV9ucHVy Z2UwLCBib29sIHRlcm1pbmF0ZV9hc2FwKSB7CisjZGVmaW5lIE5JTlRFUlZBTFMgMTAxCisJbnN0 aW1lX3QgdGltZSwgdXBkYXRlX2ludGVydmFsLCBkZWNheV9tcywgZGVhZGxpbmU7CisKKwluc3Rp bWVfaW5pdF91cGRhdGUoJnRpbWUpOworCisJbnN0aW1lX2luaXQyKCZkZWNheV9tcywgZHQsIDAp OworCW5zdGltZV9jb3B5KCZkZWFkbGluZSwgJnRpbWUpOworCW5zdGltZV9hZGQoJmRlYWRsaW5l LCAmZGVjYXlfbXMpOworCisJbnN0aW1lX2luaXQyKCZ1cGRhdGVfaW50ZXJ2YWwsIGR0LCAwKTsK Kwluc3RpbWVfaWRpdmlkZSgmdXBkYXRlX2ludGVydmFsLCBOSU5URVJWQUxTKTsKKworCS8qCisJ ICogS2VlcCBxJ3Mgc2xhYiBmcm9tIGJlaW5nIGRlYWxsb2NhdGVkIGR1cmluZyB0aGUgbG9vcGlu ZyBiZWxvdy4gIElmIGEKKwkgKiBjYWNoZWQgc2xhYiB3ZXJlIHRvIHJlcGVhdGVkbHkgY29tZSBh bmQgZ28gZHVyaW5nIGxvb3BpbmcsIGl0IGNvdWxkCisJICogcHJldmVudCB0aGUgZGVjYXkgYmFj a2xvZyBldmVyIGJlY29taW5nIGVtcHR5LgorCSAqLworCXZvaWQgKnAgPSBkb19tYWxsb2N4KDEs IGZsYWdzKTsKKwl1aW50NjRfdCBkaXJ0eV9ucHVyZ2UxLCBtdXp6eV9ucHVyZ2UxOworCWRvIHsK KwkJZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEFSRU5BX0RFQ0FZX05USUNLU19QRVJfVVBEQVRF IC8gMjsKKwkJICAgIGkrKykgeworCQkJdm9pZCAqcSA9IGRvX21hbGxvY3goMSwgZmxhZ3MpOwor CQkJZGFsbG9jeChxLCBmbGFncyk7CisJCX0KKwkJZGlydHlfbnB1cmdlMSA9IGdldF9hcmVuYV9k aXJ0eV9ucHVyZ2UoYXJlbmFfaW5kKTsKKwkJbXV6enlfbnB1cmdlMSA9IGdldF9hcmVuYV9tdXp6 eV9ucHVyZ2UoYXJlbmFfaW5kKTsKKworCQluc3RpbWVfYWRkKCZ0aW1lX21vY2ssICZ1cGRhdGVf aW50ZXJ2YWwpOworCQluc3RpbWVfdXBkYXRlKCZ0aW1lKTsKKwl9IHdoaWxlIChuc3RpbWVfY29t cGFyZSgmdGltZSwgJmRlYWRsaW5lKSA8PSAwICYmICgoZGlydHlfbnB1cmdlMSA9PQorCSAgICBk aXJ0eV9ucHVyZ2UwICYmIG11enp5X25wdXJnZTEgPT0gbXV6enlfbnB1cmdlMCkgfHwKKwkgICAg IXRlcm1pbmF0ZV9hc2FwKSk7CisJZGFsbG9jeChwLCBmbGFncyk7CisKKwlpZiAoY29uZmlnX3N0 YXRzKSB7CisJCWV4cGVjdF91NjRfZ3QoZGlydHlfbnB1cmdlMSArIG11enp5X25wdXJnZTEsIGRp cnR5X25wdXJnZTAgKworCQkgICAgbXV6enlfbnB1cmdlMCwgIkV4cGVjdGVkIHB1cmdpbmcgdG8g b2NjdXIiKTsKKwl9CisjdW5kZWYgTklOVEVSVkFMUworfQorCitURVNUX0JFR0lOKHRlc3RfZGVj YXlfdGlja2VyKSB7CisJdGVzdF9za2lwX2lmKGlzX2JhY2tncm91bmRfdGhyZWFkX2VuYWJsZWQo KSk7CisJdGVzdF9za2lwX2lmKG9wdF9ocGEpOworI2RlZmluZSBOUFMgMjA0OAorCXNzaXplX3Qg ZGR0ID0gb3B0X2RpcnR5X2RlY2F5X21zOworCXNzaXplX3QgbWR0ID0gb3B0X211enp5X2RlY2F5 X21zOworCXVuc2lnbmVkIGFyZW5hX2luZCA9IGRvX2FyZW5hX2NyZWF0ZShkZHQsIG1kdCk7CisJ aW50IGZsYWdzID0gKE1BTExPQ1hfQVJFTkEoYXJlbmFfaW5kKSB8IE1BTExPQ1hfVENBQ0hFX05P TkUpOworCXZvaWQgKnBzW05QU107CisKKwkvKgorCSAqIEFsbG9jYXRlIGEgYnVuY2ggb2YgbGFy Z2Ugb2JqZWN0cywgcGF1c2UgdGhlIGNsb2NrLCBkZWFsbG9jYXRlIGV2ZXJ5CisJICogb3RoZXIg b2JqZWN0ICh0byBmcmFnbWVudCB2aXJ0dWFsIG1lbW9yeSksIHJlc3RvcmUgdGhlIGNsb2NrLCB0 aGVuCisJICogW21kXWFsbG9jeCgpIGluIGEgdGlnaHQgbG9vcCB3aGlsZSBhZHZhbmNpbmcgdGlt ZSByYXBpZGx5IHRvIHZlcmlmeQorCSAqIHRoZSB0aWNrZXIgdHJpZ2dlcnMgcHVyZ2luZy4KKwkg Ki8KKwlzaXplX3QgbGFyZ2U7CisJc2l6ZV90IHN6ID0gc2l6ZW9mKHNpemVfdCk7CisJZXhwZWN0 X2RfZXEobWFsbGN0bCgiYXJlbmFzLmxleHRlbnQuMC5zaXplIiwgKHZvaWQgKikmbGFyZ2UsICZz eiwgTlVMTCwKKwkgICAgMCksIDAsICJVbmV4cGVjdGVkIG1hbGxjdGwgZmFpbHVyZSIpOworCisJ ZG9fcHVyZ2UoYXJlbmFfaW5kKTsKKwl1aW50NjRfdCBkaXJ0eV9ucHVyZ2UwID0gZ2V0X2FyZW5h X2RpcnR5X25wdXJnZShhcmVuYV9pbmQpOworCXVpbnQ2NF90IG11enp5X25wdXJnZTAgPSBnZXRf YXJlbmFfbXV6enlfbnB1cmdlKGFyZW5hX2luZCk7CisKKwlmb3IgKHVuc2lnbmVkIGkgPSAwOyBp IDwgTlBTOyBpKyspIHsKKwkJcHNbaV0gPSBkb19tYWxsb2N4KGxhcmdlLCBmbGFncyk7CisJfQor CisJbnVwZGF0ZXNfbW9jayA9IDA7CisJbnN0aW1lX2luaXRfdXBkYXRlKCZ0aW1lX21vY2spOwor CW1vbm90b25pY19tb2NrID0gdHJ1ZTsKKworCW5zdGltZV9tb25vdG9uaWNfb3JpZyA9IG5zdGlt ZV9tb25vdG9uaWM7CisJbnN0aW1lX3VwZGF0ZV9vcmlnID0gbnN0aW1lX3VwZGF0ZTsKKwluc3Rp bWVfbW9ub3RvbmljID0gbnN0aW1lX21vbm90b25pY19tb2NrOworCW5zdGltZV91cGRhdGUgPSBu c3RpbWVfdXBkYXRlX21vY2s7CisKKwlmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgTlBTOyBpICs9 IDIpIHsKKwkJZGFsbG9jeChwc1tpXSwgZmxhZ3MpOworCQl1bnNpZ25lZCBudXBkYXRlczAgPSBu dXBkYXRlc19tb2NrOworCQlkb19kZWNheShhcmVuYV9pbmQpOworCQlleHBlY3RfdV9ndChudXBk YXRlc19tb2NrLCBudXBkYXRlczAsCisJCSAgICAiRXhwZWN0ZWQgbnN0aW1lX3VwZGF0ZSgpIHRv IGJlIGNhbGxlZCIpOworCX0KKworCWRlY2F5X3RpY2tlcl9oZWxwZXIoYXJlbmFfaW5kLCBmbGFn cywgdHJ1ZSwgZGR0LCBkaXJ0eV9ucHVyZ2UwLAorCSAgICBtdXp6eV9ucHVyZ2UwLCB0cnVlKTsK KwlkZWNheV90aWNrZXJfaGVscGVyKGFyZW5hX2luZCwgZmxhZ3MsIGZhbHNlLCBkZHQrbWR0LCBk aXJ0eV9ucHVyZ2UwLAorCSAgICBtdXp6eV9ucHVyZ2UwLCBmYWxzZSk7CisKKwlkb19hcmVuYV9k ZXN0cm95KGFyZW5hX2luZCk7CisKKwluc3RpbWVfbW9ub3RvbmljID0gbnN0aW1lX21vbm90b25p Y19vcmlnOworCW5zdGltZV91cGRhdGUgPSBuc3RpbWVfdXBkYXRlX29yaWc7CisjdW5kZWYgTlBT Cit9CitURVNUX0VORAorCitURVNUX0JFR0lOKHRlc3RfZGVjYXlfbm9ubW9ub3RvbmljKSB7CisJ dGVzdF9za2lwX2lmKGlzX2JhY2tncm91bmRfdGhyZWFkX2VuYWJsZWQoKSk7CisJdGVzdF9za2lw X2lmKG9wdF9ocGEpOworI2RlZmluZSBOUFMgKFNNT09USFNURVBfTlNURVBTICsgMSkKKwlpbnQg ZmxhZ3MgPSAoTUFMTE9DWF9BUkVOQSgwKSB8IE1BTExPQ1hfVENBQ0hFX05PTkUpOworCXZvaWQg KnBzW05QU107CisJdWludDY0X3QgbnB1cmdlMCA9IDA7CisJdWludDY0X3QgbnB1cmdlMSA9IDA7 CisJc2l6ZV90IHN6LCBsYXJnZTA7CisJdW5zaWduZWQgaSwgbnVwZGF0ZXMwOworCisJc3ogPSBz aXplb2Yoc2l6ZV90KTsKKwlleHBlY3RfZF9lcShtYWxsY3RsKCJhcmVuYXMubGV4dGVudC4wLnNp emUiLCAodm9pZCAqKSZsYXJnZTAsICZzeiwgTlVMTCwKKwkgICAgMCksIDAsICJVbmV4cGVjdGVk IG1hbGxjdGwgZmFpbHVyZSIpOworCisJZXhwZWN0X2RfZXEobWFsbGN0bCgiYXJlbmEuMC5wdXJn ZSIsIE5VTEwsIE5VTEwsIE5VTEwsIDApLCAwLAorCSAgICAiVW5leHBlY3RlZCBtYWxsY3RsIGZh aWx1cmUiKTsKKwlkb19lcG9jaCgpOworCXN6ID0gc2l6ZW9mKHVpbnQ2NF90KTsKKwlucHVyZ2Uw ID0gZ2V0X2FyZW5hX25wdXJnZSgwKTsKKworCW51cGRhdGVzX21vY2sgPSAwOworCW5zdGltZV9p bml0X3VwZGF0ZSgmdGltZV9tb2NrKTsKKwltb25vdG9uaWNfbW9jayA9IGZhbHNlOworCisJbnN0 aW1lX21vbm90b25pY19vcmlnID0gbnN0aW1lX21vbm90b25pYzsKKwluc3RpbWVfdXBkYXRlX29y aWcgPSBuc3RpbWVfdXBkYXRlOworCW5zdGltZV9tb25vdG9uaWMgPSBuc3RpbWVfbW9ub3Rvbmlj X21vY2s7CisJbnN0aW1lX3VwZGF0ZSA9IG5zdGltZV91cGRhdGVfbW9jazsKKworCWZvciAoaSA9 IDA7IGkgPCBOUFM7IGkrKykgeworCQlwc1tpXSA9IG1hbGxvY3gobGFyZ2UwLCBmbGFncyk7CisJ CWV4cGVjdF9wdHJfbm90X251bGwocHNbaV0sICJVbmV4cGVjdGVkIG1hbGxvY3goKSBmYWlsdXJl Iik7CisJfQorCisJZm9yIChpID0gMDsgaSA8IE5QUzsgaSsrKSB7CisJCWRhbGxvY3gocHNbaV0s IGZsYWdzKTsKKwkJbnVwZGF0ZXMwID0gbnVwZGF0ZXNfbW9jazsKKwkJZXhwZWN0X2RfZXEobWFs bGN0bCgiYXJlbmEuMC5kZWNheSIsIE5VTEwsIE5VTEwsIE5VTEwsIDApLCAwLAorCQkgICAgIlVu ZXhwZWN0ZWQgYXJlbmEuMC5kZWNheSBmYWlsdXJlIik7CisJCWV4cGVjdF91X2d0KG51cGRhdGVz X21vY2ssIG51cGRhdGVzMCwKKwkJICAgICJFeHBlY3RlZCBuc3RpbWVfdXBkYXRlKCkgdG8gYmUg Y2FsbGVkIik7CisJfQorCisJZG9fZXBvY2goKTsKKwlzeiA9IHNpemVvZih1aW50NjRfdCk7CisJ bnB1cmdlMSA9IGdldF9hcmVuYV9ucHVyZ2UoMCk7CisKKwlpZiAoY29uZmlnX3N0YXRzKSB7CisJ CWV4cGVjdF91NjRfZXEobnB1cmdlMCwgbnB1cmdlMSwgIlVuZXhwZWN0ZWQgcHVyZ2luZyBvY2N1 cnJlZCIpOworCX0KKworCW5zdGltZV9tb25vdG9uaWMgPSBuc3RpbWVfbW9ub3RvbmljX29yaWc7 CisJbnN0aW1lX3VwZGF0ZSA9IG5zdGltZV91cGRhdGVfb3JpZzsKKyN1bmRlZiBOUFMKK30KK1RF U1RfRU5ECisKK1RFU1RfQkVHSU4odGVzdF9kZWNheV9ub3cpIHsKKwl0ZXN0X3NraXBfaWYoaXNf YmFja2dyb3VuZF90aHJlYWRfZW5hYmxlZCgpKTsKKwl0ZXN0X3NraXBfaWYob3B0X2hwYSk7CisK Kwl1bnNpZ25lZCBhcmVuYV9pbmQgPSBkb19hcmVuYV9jcmVhdGUoMCwgMCk7CisJZXhwZWN0X3p1 X2VxKGdldF9hcmVuYV9wZGlydHkoYXJlbmFfaW5kKSwgMCwgIlVuZXhwZWN0ZWQgZGlydHkgcGFn ZXMiKTsKKwlleHBlY3RfenVfZXEoZ2V0X2FyZW5hX3BtdXp6eShhcmVuYV9pbmQpLCAwLCAiVW5l eHBlY3RlZCBtdXp6eSBwYWdlcyIpOworCXNpemVfdCBzaXplc1tdID0gezE2LCBQQUdFPDwyLCBI VUdFUEFHRTw8Mn07CisJLyogVmVyaWZ5IHRoYXQgZGlydHkvbXV6enkgcGFnZXMgbmV2ZXIgbGlu Z2VyIGFmdGVyIGRlYWxsb2NhdGlvbi4gKi8KKwlmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6 ZW9mKHNpemVzKS9zaXplb2Yoc2l6ZV90KTsgaSsrKSB7CisJCXNpemVfdCBzaXplID0gc2l6ZXNb aV07CisJCWdlbmVyYXRlX2RpcnR5KGFyZW5hX2luZCwgc2l6ZSk7CisJCWV4cGVjdF96dV9lcShn ZXRfYXJlbmFfcGRpcnR5KGFyZW5hX2luZCksIDAsCisJCSAgICAiVW5leHBlY3RlZCBkaXJ0eSBw YWdlcyIpOworCQlleHBlY3RfenVfZXEoZ2V0X2FyZW5hX3BtdXp6eShhcmVuYV9pbmQpLCAwLAor CQkgICAgIlVuZXhwZWN0ZWQgbXV6enkgcGFnZXMiKTsKKwl9CisJZG9fYXJlbmFfZGVzdHJveShh cmVuYV9pbmQpOworfQorVEVTVF9FTkQKKworVEVTVF9CRUdJTih0ZXN0X2RlY2F5X25ldmVyKSB7 CisJdGVzdF9za2lwX2lmKGlzX2JhY2tncm91bmRfdGhyZWFkX2VuYWJsZWQoKSB8fCAhY29uZmln X3N0YXRzKTsKKwl0ZXN0X3NraXBfaWYob3B0X2hwYSk7CisKKwl1bnNpZ25lZCBhcmVuYV9pbmQg PSBkb19hcmVuYV9jcmVhdGUoLTEsIC0xKTsKKwlpbnQgZmxhZ3MgPSBNQUxMT0NYX0FSRU5BKGFy ZW5hX2luZCkgfCBNQUxMT0NYX1RDQUNIRV9OT05FOworCWV4cGVjdF96dV9lcShnZXRfYXJlbmFf cGRpcnR5KGFyZW5hX2luZCksIDAsICJVbmV4cGVjdGVkIGRpcnR5IHBhZ2VzIik7CisJZXhwZWN0 X3p1X2VxKGdldF9hcmVuYV9wbXV6enkoYXJlbmFfaW5kKSwgMCwgIlVuZXhwZWN0ZWQgbXV6enkg cGFnZXMiKTsKKwlzaXplX3Qgc2l6ZXNbXSA9IHsxNiwgUEFHRTw8MiwgSFVHRVBBR0U8PDJ9Owor CXZvaWQgKnB0cnNbc2l6ZW9mKHNpemVzKS9zaXplb2Yoc2l6ZV90KV07CisJZm9yICh1bnNpZ25l ZCBpID0gMDsgaSA8IHNpemVvZihzaXplcykvc2l6ZW9mKHNpemVfdCk7IGkrKykgeworCQlwdHJz W2ldID0gZG9fbWFsbG9jeChzaXplc1tpXSwgZmxhZ3MpOworCX0KKwkvKiBWZXJpZnkgdGhhdCBl YWNoIGRlYWxsb2NhdGlvbiBnZW5lcmF0ZXMgYWRkaXRpb25hbCBkaXJ0eSBwYWdlcy4gKi8KKwlz aXplX3QgcGRpcnR5X3ByZXYgPSBnZXRfYXJlbmFfcGRpcnR5KGFyZW5hX2luZCk7CisJc2l6ZV90 IHBtdXp6eV9wcmV2ID0gZ2V0X2FyZW5hX3BtdXp6eShhcmVuYV9pbmQpOworCWV4cGVjdF96dV9l cShwZGlydHlfcHJldiwgMCwgIlVuZXhwZWN0ZWQgZGlydHkgcGFnZXMiKTsKKwlleHBlY3RfenVf ZXEocG11enp5X3ByZXYsIDAsICJVbmV4cGVjdGVkIG11enp5IHBhZ2VzIik7CisJZm9yICh1bnNp Z25lZCBpID0gMDsgaSA8IHNpemVvZihzaXplcykvc2l6ZW9mKHNpemVfdCk7IGkrKykgeworCQlk YWxsb2N4KHB0cnNbaV0sIGZsYWdzKTsKKwkJc2l6ZV90IHBkaXJ0eSA9IGdldF9hcmVuYV9wZGly dHkoYXJlbmFfaW5kKTsKKwkJc2l6ZV90IHBtdXp6eSA9IGdldF9hcmVuYV9wbXV6enkoYXJlbmFf aW5kKTsKKwkJZXhwZWN0X3p1X2d0KHBkaXJ0eSArIChzaXplX3QpZ2V0X2FyZW5hX2RpcnR5X3B1 cmdlZChhcmVuYV9pbmQpLAorCQkgICAgcGRpcnR5X3ByZXYsICJFeHBlY3RlZCBkaXJ0eSBwYWdl cyB0byBpbmNyZWFzZS4iKTsKKwkJZXhwZWN0X3p1X2VxKHBtdXp6eSwgMCwgIlVuZXhwZWN0ZWQg bXV6enkgcGFnZXMiKTsKKwkJcGRpcnR5X3ByZXYgPSBwZGlydHk7CisJfQorCWRvX2FyZW5hX2Rl c3Ryb3koYXJlbmFfaW5kKTsKK30KK1RFU1RfRU5ECisKK2ludAorbWFpbih2b2lkKSB7CisJcmV0 dXJuIHRlc3QoCisJICAgIHRlc3RfZGVjYXlfdGlja3MsCisJICAgIHRlc3RfZGVjYXlfdGlja2Vy LAorCSAgICB0ZXN0X2RlY2F5X25vbm1vbm90b25pYywKKwkgICAgdGVzdF9kZWNheV9ub3csCisJ ICAgIHRlc3RfZGVjYXlfbmV2ZXIpOworfQoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4w LWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9hcmVuYV9kZWNheS5zaCBiLzM4OS1kcy1i YXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9hcmVuYV9kZWNheS5zaApu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MmYxYjIwCi0tLSAvZGV2L251bGwK KysrIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L2Fy ZW5hX2RlY2F5LnNoCkBAIC0wLDAgKzEsMyBAQAorIyEvYmluL3NoCisKK2V4cG9ydCBNQUxMT0Nf Q09ORj0iZGlydHlfZGVjYXlfbXM6MTAwMCxtdXp6eV9kZWNheV9tczoxMDAwLHRjYWNoZV9tYXg6 MTAyNCIKCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMu MC90ZXN0L3VuaXQvYXJlbmFfcmVzZXQuYyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFs bG9jLTUuMy4wL3Rlc3QvdW5pdC9hcmVuYV9yZXNldC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAuLjhlZjA3ODYKLS0tIC9kZXYvbnVsbAorKysgYi8zODktZHMtYmFzZS0zLjMu MC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvYXJlbmFfcmVzZXQuYwpAQCAtMCwwICsx LDM2MSBAQAorI2lmbmRlZiBBUkVOQV9SRVNFVF9QUk9GX0NfCisjaW5jbHVkZSAidGVzdC9qZW1h bGxvY190ZXN0LmgiCisjZW5kaWYKKworI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2V4dGVu dF9tbWFwLmgiCisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvcnRyZWUuaCIKKworI2luY2x1 ZGUgInRlc3QvZXh0ZW50X2hvb2tzLmgiCisKK3N0YXRpYyB1bnNpZ25lZAorZ2V0X25zaXplc19p bXBsKGNvbnN0IGNoYXIgKmNtZCkgeworCXVuc2lnbmVkIHJldDsKKwlzaXplX3QgejsKKworCXog PSBzaXplb2YodW5zaWduZWQpOworCWV4cGVjdF9kX2VxKG1hbGxjdGwoY21kLCAodm9pZCAqKSZy ZXQsICZ6LCBOVUxMLCAwKSwgMCwKKwkgICAgIlVuZXhwZWN0ZWQgbWFsbGN0bChcIiVzXCIsIC4u LikgZmFpbHVyZSIsIGNtZCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdW5zaWduZWQK K2dldF9uc21hbGwodm9pZCkgeworCXJldHVybiBnZXRfbnNpemVzX2ltcGwoImFyZW5hcy5uYmlu cyIpOworfQorCitzdGF0aWMgdW5zaWduZWQKK2dldF9ubGFyZ2Uodm9pZCkgeworCXJldHVybiBn ZXRfbnNpemVzX2ltcGwoImFyZW5hcy5ubGV4dGVudHMiKTsKK30KKworc3RhdGljIHNpemVfdAor Z2V0X3NpemVfaW1wbChjb25zdCBjaGFyICpjbWQsIHNpemVfdCBpbmQpIHsKKwlzaXplX3QgcmV0 OworCXNpemVfdCB6OworCXNpemVfdCBtaWJbNF07CisJc2l6ZV90IG1pYmxlbiA9IDQ7CisKKwl6 ID0gc2l6ZW9mKHNpemVfdCk7CisJZXhwZWN0X2RfZXEobWFsbGN0bG5hbWV0b21pYihjbWQsIG1p YiwgJm1pYmxlbiksCisJICAgIDAsICJVbmV4cGVjdGVkIG1hbGxjdGxuYW1ldG9taWIoXCIlc1wi LCAuLi4pIGZhaWx1cmUiLCBjbWQpOworCW1pYlsyXSA9IGluZDsKKwl6ID0gc2l6ZW9mKHNpemVf dCk7CisJZXhwZWN0X2RfZXEobWFsbGN0bGJ5bWliKG1pYiwgbWlibGVuLCAodm9pZCAqKSZyZXQs ICZ6LCBOVUxMLCAwKSwKKwkgICAgMCwgIlVuZXhwZWN0ZWQgbWFsbGN0bGJ5bWliKFtcIiVzXCIs ICV6dV0sIC4uLikgZmFpbHVyZSIsIGNtZCwgaW5kKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0 YXRpYyBzaXplX3QKK2dldF9zbWFsbF9zaXplKHNpemVfdCBpbmQpIHsKKwlyZXR1cm4gZ2V0X3Np emVfaW1wbCgiYXJlbmFzLmJpbi4wLnNpemUiLCBpbmQpOworfQorCitzdGF0aWMgc2l6ZV90Citn ZXRfbGFyZ2Vfc2l6ZShzaXplX3QgaW5kKSB7CisJcmV0dXJuIGdldF9zaXplX2ltcGwoImFyZW5h cy5sZXh0ZW50LjAuc2l6ZSIsIGluZCk7Cit9CisKKy8qIExpa2UgaXZzYWxsb2MoKSwgYnV0IHNh ZmUgdG8gY2FsbCBvbiBkaXNjYXJkZWQgYWxsb2NhdGlvbnMuICovCitzdGF0aWMgc2l6ZV90Cit2 c2FsbG9jKHRzZG5fdCAqdHNkbiwgY29uc3Qgdm9pZCAqcHRyKSB7CisJZW1hcF9mdWxsX2FsbG9j X2N0eF90IGZ1bGxfYWxsb2NfY3R4OworCWJvb2wgbWlzc2luZyA9IGVtYXBfZnVsbF9hbGxvY19j dHhfdHJ5X2xvb2t1cCh0c2RuLCAmYXJlbmFfZW1hcF9nbG9iYWwsCisJICAgIHB0ciwgJmZ1bGxf YWxsb2NfY3R4KTsKKwlpZiAobWlzc2luZykgeworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoZnVs bF9hbGxvY19jdHguZWRhdGEgPT0gTlVMTCkgeworCQlyZXR1cm4gMDsKKwl9CisJaWYgKGVkYXRh X3N0YXRlX2dldChmdWxsX2FsbG9jX2N0eC5lZGF0YSkgIT0gZXh0ZW50X3N0YXRlX2FjdGl2ZSkg eworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoZnVsbF9hbGxvY19jdHguc3ppbmQgPT0gU0NfTlNJ WkVTKSB7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiBzel9pbmRleDJzaXplKGZ1bGxfYWxs b2NfY3R4LnN6aW5kKTsKK30KKworc3RhdGljIHVuc2lnbmVkCitkb19hcmVuYV9jcmVhdGUoZXh0 ZW50X2hvb2tzX3QgKmgpIHsKKwl1bnNpZ25lZCBhcmVuYV9pbmQ7CisJc2l6ZV90IHN6ID0gc2l6 ZW9mKHVuc2lnbmVkKTsKKwlleHBlY3RfZF9lcShtYWxsY3RsKCJhcmVuYXMuY3JlYXRlIiwgKHZv aWQgKikmYXJlbmFfaW5kLCAmc3osCisJICAgICh2b2lkICopKGggIT0gTlVMTCA/ICZoIDogTlVM TCksIChoICE9IE5VTEwgPyBzaXplb2YoaCkgOiAwKSksIDAsCisJICAgICJVbmV4cGVjdGVkIG1h bGxjdGwoKSBmYWlsdXJlIik7CisJcmV0dXJuIGFyZW5hX2luZDsKK30KKworc3RhdGljIHZvaWQK K2RvX2FyZW5hX3Jlc2V0X3ByZSh1bnNpZ25lZCBhcmVuYV9pbmQsIHZvaWQgKioqcHRycywgdW5z aWduZWQgKm5wdHJzKSB7CisjZGVmaW5lIE5MQVJHRQkzMgorCXVuc2lnbmVkIG5zbWFsbCwgbmxh cmdlLCBpOworCXNpemVfdCBzejsKKwlpbnQgZmxhZ3M7CisJdHNkbl90ICp0c2RuOworCisJZmxh Z3MgPSBNQUxMT0NYX0FSRU5BKGFyZW5hX2luZCkgfCBNQUxMT0NYX1RDQUNIRV9OT05FOworCisJ bnNtYWxsID0gZ2V0X25zbWFsbCgpOworCW5sYXJnZSA9IGdldF9ubGFyZ2UoKSA+IE5MQVJHRSA/ IE5MQVJHRSA6IGdldF9ubGFyZ2UoKTsKKwkqbnB0cnMgPSBuc21hbGwgKyBubGFyZ2U7CisJKnB0 cnMgPSAodm9pZCAqKiltYWxsb2MoKm5wdHJzICogc2l6ZW9mKHZvaWQgKikpOworCWV4cGVjdF9w dHJfbm90X251bGwoKnB0cnMsICJVbmV4cGVjdGVkIG1hbGxvYygpIGZhaWx1cmUiKTsKKworCS8q IEFsbG9jYXRlIG9iamVjdHMgd2l0aCBhIHdpZGUgcmFuZ2Ugb2Ygc2l6ZXMuICovCisJZm9yIChp ID0gMDsgaSA8IG5zbWFsbDsgaSsrKSB7CisJCXN6ID0gZ2V0X3NtYWxsX3NpemUoaSk7CisJCSgq cHRycylbaV0gPSBtYWxsb2N4KHN6LCBmbGFncyk7CisJCWV4cGVjdF9wdHJfbm90X251bGwoKCpw dHJzKVtpXSwKKwkJICAgICJVbmV4cGVjdGVkIG1hbGxvY3goJXp1LCAlI3gpIGZhaWx1cmUiLCBz eiwgZmxhZ3MpOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgbmxhcmdlOyBpKyspIHsKKwkJc3ogPSBn ZXRfbGFyZ2Vfc2l6ZShpKTsKKwkJKCpwdHJzKVtuc21hbGwgKyBpXSA9IG1hbGxvY3goc3osIGZs YWdzKTsKKwkJZXhwZWN0X3B0cl9ub3RfbnVsbCgoKnB0cnMpW2ldLAorCQkgICAgIlVuZXhwZWN0 ZWQgbWFsbG9jeCglenUsICUjeCkgZmFpbHVyZSIsIHN6LCBmbGFncyk7CisJfQorCisJdHNkbiA9 IHRzZG5fZmV0Y2goKTsKKworCS8qIFZlcmlmeSBhbGxvY2F0aW9ucy4gKi8KKwlmb3IgKGkgPSAw OyBpIDwgKm5wdHJzOyBpKyspIHsKKwkJZXhwZWN0X3p1X2d0KGl2c2FsbG9jKHRzZG4sICgqcHRy cylbaV0pLCAwLAorCQkgICAgIkFsbG9jYXRpb24gc2hvdWxkIGhhdmUgcXVlcnlhYmxlIHNpemUi KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitkb19hcmVuYV9yZXNldF9wb3N0KHZvaWQgKipwdHJz LCB1bnNpZ25lZCBucHRycywgdW5zaWduZWQgYXJlbmFfaW5kKSB7CisJdHNkbl90ICp0c2RuOwor CXVuc2lnbmVkIGk7CisKKwl0c2RuID0gdHNkbl9mZXRjaCgpOworCisJaWYgKGhhdmVfYmFja2dy b3VuZF90aHJlYWQpIHsKKwkJbWFsbG9jX211dGV4X2xvY2sodHNkbiwKKwkJICAgICZiYWNrZ3Jv dW5kX3RocmVhZF9pbmZvX2dldChhcmVuYV9pbmQpLT5tdHgpOworCX0KKwkvKiBWZXJpZnkgYWxs b2NhdGlvbnMgbm8gbG9uZ2VyIGV4aXN0LiAqLworCWZvciAoaSA9IDA7IGkgPCBucHRyczsgaSsr KSB7CisJCWV4cGVjdF96dV9lcSh2c2FsbG9jKHRzZG4sIHB0cnNbaV0pLCAwLAorCQkgICAgIkFs bG9jYXRpb24gc2hvdWxkIG5vIGxvbmdlciBleGlzdCIpOworCX0KKwlpZiAoaGF2ZV9iYWNrZ3Jv dW5kX3RocmVhZCkgeworCQltYWxsb2NfbXV0ZXhfdW5sb2NrKHRzZG4sCisJCSAgICAmYmFja2dy b3VuZF90aHJlYWRfaW5mb19nZXQoYXJlbmFfaW5kKS0+bXR4KTsKKwl9CisKKwlmcmVlKHB0cnMp OworfQorCitzdGF0aWMgdm9pZAorZG9fYXJlbmFfcmVzZXRfZGVzdHJveShjb25zdCBjaGFyICpu YW1lLCB1bnNpZ25lZCBhcmVuYV9pbmQpIHsKKwlzaXplX3QgbWliWzNdOworCXNpemVfdCBtaWJs ZW47CisKKwltaWJsZW4gPSBzaXplb2YobWliKS9zaXplb2Yoc2l6ZV90KTsKKwlleHBlY3RfZF9l cShtYWxsY3RsbmFtZXRvbWliKG5hbWUsIG1pYiwgJm1pYmxlbiksIDAsCisJICAgICJVbmV4cGVj dGVkIG1hbGxjdGxuYW1ldG9taWIoKSBmYWlsdXJlIik7CisJbWliWzFdID0gKHNpemVfdClhcmVu YV9pbmQ7CisJZXhwZWN0X2RfZXEobWFsbGN0bGJ5bWliKG1pYiwgbWlibGVuLCBOVUxMLCBOVUxM LCBOVUxMLCAwKSwgMCwKKwkgICAgIlVuZXhwZWN0ZWQgbWFsbGN0bGJ5bWliKCkgZmFpbHVyZSIp OworfQorCitzdGF0aWMgdm9pZAorZG9fYXJlbmFfcmVzZXQodW5zaWduZWQgYXJlbmFfaW5kKSB7 CisJZG9fYXJlbmFfcmVzZXRfZGVzdHJveSgiYXJlbmEuMC5yZXNldCIsIGFyZW5hX2luZCk7Cit9 CisKK3N0YXRpYyB2b2lkCitkb19hcmVuYV9kZXN0cm95KHVuc2lnbmVkIGFyZW5hX2luZCkgewor CWRvX2FyZW5hX3Jlc2V0X2Rlc3Ryb3koImFyZW5hLjAuZGVzdHJveSIsIGFyZW5hX2luZCk7Cit9 CisKK1RFU1RfQkVHSU4odGVzdF9hcmVuYV9yZXNldCkgeworCXVuc2lnbmVkIGFyZW5hX2luZDsK Kwl2b2lkICoqcHRyczsKKwl1bnNpZ25lZCBucHRyczsKKworCWFyZW5hX2luZCA9IGRvX2FyZW5h X2NyZWF0ZShOVUxMKTsKKwlkb19hcmVuYV9yZXNldF9wcmUoYXJlbmFfaW5kLCAmcHRycywgJm5w dHJzKTsKKwlkb19hcmVuYV9yZXNldChhcmVuYV9pbmQpOworCWRvX2FyZW5hX3Jlc2V0X3Bvc3Qo cHRycywgbnB0cnMsIGFyZW5hX2luZCk7Cit9CitURVNUX0VORAorCitzdGF0aWMgYm9vbAorYXJl bmFfaV9pbml0aWFsaXplZCh1bnNpZ25lZCBhcmVuYV9pbmQsIGJvb2wgcmVmcmVzaCkgeworCWJv b2wgaW5pdGlhbGl6ZWQ7CisJc2l6ZV90IG1pYlszXTsKKwlzaXplX3QgbWlibGVuLCBzejsKKwor CWlmIChyZWZyZXNoKSB7CisJCXVpbnQ2NF90IGVwb2NoID0gMTsKKwkJZXhwZWN0X2RfZXEobWFs bGN0bCgiZXBvY2giLCBOVUxMLCBOVUxMLCAodm9pZCAqKSZlcG9jaCwKKwkJICAgIHNpemVvZihl cG9jaCkpLCAwLCAiVW5leHBlY3RlZCBtYWxsY3RsKCkgZmFpbHVyZSIpOworCX0KKworCW1pYmxl biA9IHNpemVvZihtaWIpL3NpemVvZihzaXplX3QpOworCWV4cGVjdF9kX2VxKG1hbGxjdGxuYW1l dG9taWIoImFyZW5hLjAuaW5pdGlhbGl6ZWQiLCBtaWIsICZtaWJsZW4pLCAwLAorCSAgICAiVW5l eHBlY3RlZCBtYWxsY3RsbmFtZXRvbWliKCkgZmFpbHVyZSIpOworCW1pYlsxXSA9IChzaXplX3Qp YXJlbmFfaW5kOworCXN6ID0gc2l6ZW9mKGluaXRpYWxpemVkKTsKKwlleHBlY3RfZF9lcShtYWxs Y3RsYnltaWIobWliLCBtaWJsZW4sICh2b2lkICopJmluaXRpYWxpemVkLCAmc3osIE5VTEwsCisJ ICAgIDApLCAwLCAiVW5leHBlY3RlZCBtYWxsY3RsYnltaWIoKSBmYWlsdXJlIik7CisKKwlyZXR1 cm4gaW5pdGlhbGl6ZWQ7Cit9CisKK1RFU1RfQkVHSU4odGVzdF9hcmVuYV9kZXN0cm95X2luaXRp YWwpIHsKKwlleHBlY3RfZmFsc2UoYXJlbmFfaV9pbml0aWFsaXplZChNQUxMQ1RMX0FSRU5BU19E RVNUUk9ZRUQsIGZhbHNlKSwKKwkgICAgIkRlc3Ryb3llZCBhcmVuYSBzdGF0cyBzaG91bGQgbm90 IGJlIGluaXRpYWxpemVkIik7Cit9CitURVNUX0VORAorCitURVNUX0JFR0lOKHRlc3RfYXJlbmFf ZGVzdHJveV9ob29rc19kZWZhdWx0KSB7CisJdW5zaWduZWQgYXJlbmFfaW5kLCBhcmVuYV9pbmRf YW5vdGhlciwgYXJlbmFfaW5kX3ByZXY7CisJdm9pZCAqKnB0cnM7CisJdW5zaWduZWQgbnB0cnM7 CisKKwlhcmVuYV9pbmQgPSBkb19hcmVuYV9jcmVhdGUoTlVMTCk7CisJZG9fYXJlbmFfcmVzZXRf cHJlKGFyZW5hX2luZCwgJnB0cnMsICZucHRycyk7CisKKwlleHBlY3RfZmFsc2UoYXJlbmFfaV9p bml0aWFsaXplZChhcmVuYV9pbmQsIGZhbHNlKSwKKwkgICAgIkFyZW5hIHN0YXRzIHNob3VsZCBu b3QgYmUgaW5pdGlhbGl6ZWQiKTsKKwlleHBlY3RfdHJ1ZShhcmVuYV9pX2luaXRpYWxpemVkKGFy ZW5hX2luZCwgdHJ1ZSksCisJICAgICJBcmVuYSBzdGF0cyBzaG91bGQgYmUgaW5pdGlhbGl6ZWQi KTsKKworCS8qCisJICogQ3JlYXRlIGFub3RoZXIgYXJlbmEgYmVmb3JlIGRlc3Ryb3lpbmcgb25l LCB0byBiZXR0ZXIgdmVyaWZ5IGFyZW5hCisJICogaW5kZXggcmV1c2UuCisJICovCisJYXJlbmFf aW5kX2Fub3RoZXIgPSBkb19hcmVuYV9jcmVhdGUoTlVMTCk7CisKKwlkb19hcmVuYV9kZXN0cm95 KGFyZW5hX2luZCk7CisKKwlleHBlY3RfZmFsc2UoYXJlbmFfaV9pbml0aWFsaXplZChhcmVuYV9p bmQsIHRydWUpLAorCSAgICAiQXJlbmEgc3RhdHMgc2hvdWxkIG5vdCBiZSBpbml0aWFsaXplZCIp OworCWV4cGVjdF90cnVlKGFyZW5hX2lfaW5pdGlhbGl6ZWQoTUFMTENUTF9BUkVOQVNfREVTVFJP WUVELCBmYWxzZSksCisJICAgICJEZXN0cm95ZWQgYXJlbmEgc3RhdHMgc2hvdWxkIGJlIGluaXRp YWxpemVkIik7CisKKwlkb19hcmVuYV9yZXNldF9wb3N0KHB0cnMsIG5wdHJzLCBhcmVuYV9pbmQp OworCisJYXJlbmFfaW5kX3ByZXYgPSBhcmVuYV9pbmQ7CisJYXJlbmFfaW5kID0gZG9fYXJlbmFf Y3JlYXRlKE5VTEwpOworCWRvX2FyZW5hX3Jlc2V0X3ByZShhcmVuYV9pbmQsICZwdHJzLCAmbnB0 cnMpOworCWV4cGVjdF91X2VxKGFyZW5hX2luZCwgYXJlbmFfaW5kX3ByZXYsCisJICAgICJBcmVu YSBpbmRleCBzaG91bGQgaGF2ZSBiZWVuIHJlY3ljbGVkIik7CisJZG9fYXJlbmFfZGVzdHJveShh cmVuYV9pbmQpOworCWRvX2FyZW5hX3Jlc2V0X3Bvc3QocHRycywgbnB0cnMsIGFyZW5hX2luZCk7 CisKKwlkb19hcmVuYV9kZXN0cm95KGFyZW5hX2luZF9hbm90aGVyKTsKKworCS8qIFRyeSBhcmVu YS5jcmVhdGUgd2l0aCBjdXN0b20gaG9va3MuICovCisJc2l6ZV90IHN6ID0gc2l6ZW9mKGV4dGVu dF9ob29rc190ICopOworCWV4dGVudF9ob29rc190ICphMF9kZWZhdWx0X2hvb2tzOworCWV4cGVj dF9kX2VxKG1hbGxjdGwoImFyZW5hLjAuZXh0ZW50X2hvb2tzIiwgKHZvaWQgKikmYTBfZGVmYXVs dF9ob29rcywKKwkgICAgJnN6LCBOVUxMLCAwKSwgMCwgIlVuZXhwZWN0ZWQgbWFsbGN0bG5hbWV0 b21pYigpIGZhaWx1cmUiKTsKKworCS8qIERlZmF1bHQgaW1wbDsgYnV0IHdyYXBwZWQgYXMgImN1 c3RvbWl6ZWQiLiAqLworCWV4dGVudF9ob29rc190IG5ld19ob29rcyA9ICphMF9kZWZhdWx0X2hv b2tzOworCWV4dGVudF9ob29rc190ICpob29rID0gJm5ld19ob29rczsKKwlzeiA9IHNpemVvZih1 bnNpZ25lZCk7CisJZXhwZWN0X2RfZXEobWFsbGN0bCgiYXJlbmFzLmNyZWF0ZSIsICh2b2lkICop JmFyZW5hX2luZCwgJnN6LAorCSAgICAodm9pZCAqKSZob29rLCBzaXplb2Yodm9pZCAqKSksIDAs CisJICAgICJVbmV4cGVjdGVkIG1hbGxjdGwoKSBmYWlsdXJlIik7CisJZG9fYXJlbmFfZGVzdHJv eShhcmVuYV9pbmQpOworfQorVEVTVF9FTkQKKworLyoKKyAqIEFjdHVhbGx5IHVubWFwIGV4dGVu dHMsIHJlZ2FyZGxlc3Mgb2Ygb3B0X3JldGFpbiwgc28gdGhhdCBhdHRlbXB0cyB0byBhY2Nlc3MK KyAqIGEgZGVzdHJveWVkIGFyZW5hJ3MgbWVtb3J5IHdpbGwgc2VnZmF1bHQuCisgKi8KK3N0YXRp YyBib29sCitleHRlbnRfZGFsbG9jX3VubWFwKGV4dGVudF9ob29rc190ICpleHRlbnRfaG9va3Ms IHZvaWQgKmFkZHIsIHNpemVfdCBzaXplLAorICAgIGJvb2wgY29tbWl0dGVkLCB1bnNpZ25lZCBh cmVuYV9pbmQpIHsKKwlUUkFDRV9IT09LKCIlcyhleHRlbnRfaG9va3M9JXAsIGFkZHI9JXAsIHNp emU9JXp1LCBjb21taXR0ZWQ9JXMsICIKKwkgICAgImFyZW5hX2luZD0ldSlcbiIsIF9fZnVuY19f LCBleHRlbnRfaG9va3MsIGFkZHIsIHNpemUsIGNvbW1pdHRlZCA/CisJICAgICJ0cnVlIiA6ICJm YWxzZSIsIGFyZW5hX2luZCk7CisJZXhwZWN0X3B0cl9lcShleHRlbnRfaG9va3MsICZob29rcywK KwkgICAgImV4dGVudF9ob29rcyBzaG91bGQgYmUgc2FtZSBhcyBwb2ludGVyIHVzZWQgdG8gc2V0 IGhvb2tzIik7CisJZXhwZWN0X3B0cl9lcShleHRlbnRfaG9va3MtPmRhbGxvYywgZXh0ZW50X2Rh bGxvY191bm1hcCwKKwkgICAgIldyb25nIGhvb2sgZnVuY3Rpb24iKTsKKwljYWxsZWRfZGFsbG9j ID0gdHJ1ZTsKKwlpZiAoIXRyeV9kYWxsb2MpIHsKKwkJcmV0dXJuIHRydWU7CisJfQorCWRpZF9k YWxsb2MgPSB0cnVlOworCWlmICghbWFwc19jb2FsZXNjZSAmJiBvcHRfcmV0YWluKSB7CisJCXJl dHVybiB0cnVlOworCX0KKwlwYWdlc191bm1hcChhZGRyLCBzaXplKTsKKwlyZXR1cm4gZmFsc2U7 Cit9CisKK3N0YXRpYyBleHRlbnRfaG9va3NfdCBob29rc19vcmlnOworCitzdGF0aWMgZXh0ZW50 X2hvb2tzX3QgaG9va3NfdW5tYXAgPSB7CisJZXh0ZW50X2FsbG9jX2hvb2ssCisJZXh0ZW50X2Rh bGxvY191bm1hcCwgLyogZGFsbG9jICovCisJZXh0ZW50X2Rlc3Ryb3lfaG9vaywKKwlleHRlbnRf Y29tbWl0X2hvb2ssCisJZXh0ZW50X2RlY29tbWl0X2hvb2ssCisJZXh0ZW50X3B1cmdlX2xhenlf aG9vaywKKwlleHRlbnRfcHVyZ2VfZm9yY2VkX2hvb2ssCisJZXh0ZW50X3NwbGl0X2hvb2ssCisJ ZXh0ZW50X21lcmdlX2hvb2sKK307CisKK1RFU1RfQkVHSU4odGVzdF9hcmVuYV9kZXN0cm95X2hv b2tzX3VubWFwKSB7CisJdW5zaWduZWQgYXJlbmFfaW5kOworCXZvaWQgKipwdHJzOworCXVuc2ln bmVkIG5wdHJzOworCisJZXh0ZW50X2hvb2tzX3ByZXAoKTsKKwlpZiAobWFwc19jb2FsZXNjZSkg eworCQl0cnlfZGVjb21taXQgPSBmYWxzZTsKKwl9CisJbWVtY3B5KCZob29rc19vcmlnLCAmaG9v a3MsIHNpemVvZihleHRlbnRfaG9va3NfdCkpOworCW1lbWNweSgmaG9va3MsICZob29rc191bm1h cCwgc2l6ZW9mKGV4dGVudF9ob29rc190KSk7CisKKwlkaWRfYWxsb2MgPSBmYWxzZTsKKwlhcmVu YV9pbmQgPSBkb19hcmVuYV9jcmVhdGUoJmhvb2tzKTsKKwlkb19hcmVuYV9yZXNldF9wcmUoYXJl bmFfaW5kLCAmcHRycywgJm5wdHJzKTsKKworCWV4cGVjdF90cnVlKGRpZF9hbGxvYywgIkV4cGVj dGVkIGFsbG9jIik7CisKKwlleHBlY3RfZmFsc2UoYXJlbmFfaV9pbml0aWFsaXplZChhcmVuYV9p bmQsIGZhbHNlKSwKKwkgICAgIkFyZW5hIHN0YXRzIHNob3VsZCBub3QgYmUgaW5pdGlhbGl6ZWQi KTsKKwlleHBlY3RfdHJ1ZShhcmVuYV9pX2luaXRpYWxpemVkKGFyZW5hX2luZCwgdHJ1ZSksCisJ ICAgICJBcmVuYSBzdGF0cyBzaG91bGQgYmUgaW5pdGlhbGl6ZWQiKTsKKworCWRpZF9kYWxsb2Mg PSBmYWxzZTsKKwlkb19hcmVuYV9kZXN0cm95KGFyZW5hX2luZCk7CisJZXhwZWN0X3RydWUoZGlk X2RhbGxvYywgIkV4cGVjdGVkIGRhbGxvYyIpOworCisJZXhwZWN0X2ZhbHNlKGFyZW5hX2lfaW5p dGlhbGl6ZWQoYXJlbmFfaW5kLCB0cnVlKSwKKwkgICAgIkFyZW5hIHN0YXRzIHNob3VsZCBub3Qg YmUgaW5pdGlhbGl6ZWQiKTsKKwlleHBlY3RfdHJ1ZShhcmVuYV9pX2luaXRpYWxpemVkKE1BTExD VExfQVJFTkFTX0RFU1RST1lFRCwgZmFsc2UpLAorCSAgICAiRGVzdHJveWVkIGFyZW5hIHN0YXRz IHNob3VsZCBiZSBpbml0aWFsaXplZCIpOworCisJZG9fYXJlbmFfcmVzZXRfcG9zdChwdHJzLCBu cHRycywgYXJlbmFfaW5kKTsKKworCW1lbWNweSgmaG9va3MsICZob29rc19vcmlnLCBzaXplb2Yo ZXh0ZW50X2hvb2tzX3QpKTsKK30KK1RFU1RfRU5ECisKK2ludAorbWFpbih2b2lkKSB7CisJcmV0 dXJuIHRlc3QoCisJICAgIHRlc3RfYXJlbmFfcmVzZXQsCisJICAgIHRlc3RfYXJlbmFfZGVzdHJv eV9pbml0aWFsLAorCSAgICB0ZXN0X2FyZW5hX2Rlc3Ryb3lfaG9va3NfZGVmYXVsdCwKKwkgICAg dGVzdF9hcmVuYV9kZXN0cm95X2hvb2tzX3VubWFwKTsKK30KCmRpZmYgLS1naXQgYS8zODktZHMt YmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvYXJlbmFfcmVzZXRfcHJv Zi5jIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L2Fy ZW5hX3Jlc2V0X3Byb2YuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOGQ4 MDEyCi0tLSAvZGV2L251bGwKKysrIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2Mt NS4zLjAvdGVzdC91bml0L2FyZW5hX3Jlc2V0X3Byb2YuYwpAQCAtMCwwICsxLDQgQEAKKyNpbmNs dWRlICJ0ZXN0L2plbWFsbG9jX3Rlc3QuaCIKKyNkZWZpbmUgQVJFTkFfUkVTRVRfUFJPRl9DXwor CisjaW5jbHVkZSAiYXJlbmFfcmVzZXQuYyIKCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMu MC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvYXJlbmFfcmVzZXRfcHJvZi5zaCBiLzM4 OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9hcmVuYV9yZXNl dF9wcm9mLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0MWRjMWMKLS0t IC9kZXYvbnVsbAorKysgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90 ZXN0L3VuaXQvYXJlbmFfcmVzZXRfcHJvZi5zaApAQCAtMCwwICsxLDMgQEAKKyMhL2Jpbi9zaAor CitleHBvcnQgTUFMTE9DX0NPTkY9InByb2Y6dHJ1ZSxsZ19wcm9mX3NhbXBsZTowIgoKZGlmZiAt LWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9h dG9taWMuYyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5p dC9hdG9taWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMmVjOGM3Ci0t LSAvZGV2L251bGwKKysrIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAv dGVzdC91bml0L2F0b21pYy5jCkBAIC0wLDAgKzEsMjI5IEBACisjaW5jbHVkZSAidGVzdC9qZW1h bGxvY190ZXN0LmgiCisKKy8qCisgKiBXZSAqYWxtb3N0KiBoYXZlIGNvbnNpc3RlbnQgc2hvcnQg bmFtZXMgKGUuZy4gInUzMiIgZm9yIHVpbnQzMl90LCAiYiIgZm9yCisgKiBib29sLCBldGMuICBU aGUgb25lIGV4Y2VwdGlvbiBpcyB0aGF0IHRoZSBzaG9ydCBuYW1lIGZvciB2b2lkICogaXMgInAi IGluCisgKiBzb21lIHBsYWNlcyBhbmQgInB0ciIgaW4gb3RoZXJzLiAgSW4gdGhlIGxvbmcgcnVu IGl0IHdvdWxkIGJlIG5pY2UgdG8gdW5pZnkKKyAqIHRoZXNlLCBidXQgaW4gdGhlIHNob3J0IHJ1 biB3ZSdsbCB1c2UgdGhpcyBzaGltLgorICovCisjZGVmaW5lIGV4cGVjdF9wX2VxIGV4cGVjdF9w dHJfZXEKKworLyoKKyAqIHQ6IHRoZSBub24tYXRvbWljIHR5cGUsIGxpa2UgInVpbnQzMl90Ii4K KyAqIHRhOiB0aGUgc2hvcnQgbmFtZSBmb3IgdGhlIHR5cGUsIGxpa2UgInUzMiIuCisgKiB2YWxb MSwyLDNdOiBWYWx1ZXMgb2YgdGhlIGdpdmVuIHR5cGUuICBUaGUgQ0FTIHRlc3RzIHVzZSB2YWwy IGZvciBleHBlY3RlZCwKKyAqIGFuZCB2YWwzIGZvciBkZXNpcmVkLgorICovCisKKyNkZWZpbmUg RE9fVEVTVFModCwgdGEsIHZhbDEsIHZhbDIsIHZhbDMpIGRvIHsJCQkJXAorCXQgdmFsOwkJCQkJ CQkJXAorCXQgZXhwZWN0ZWQ7CQkJCQkJCVwKKwlib29sIHN1Y2Nlc3M7CQkJCQkJCVwKKwkvKiBU aGlzIChhbG9uZyB3aXRoIHRoZSBsb2FkIGJlbG93KSBhbHNvIHRlc3RzIEFUT01JQ19MT0FELiAq LwlcCisJYXRvbWljXyMjdGEjI190IGF0b20gPSBBVE9NSUNfSU5JVCh2YWwxKTsJCQlcCisJCQkJ CQkJCQlcCisJLyogQVRPTUlDX0lOSVQgYW5kIGxvYWQuICovCQkJCQlcCisJdmFsID0gYXRvbWlj X2xvYWRfIyN0YSgmYXRvbSwgQVRPTUlDX1JFTEFYRUQpOwkJCVwKKwlleHBlY3RfIyN0YSMjX2Vx KHZhbDEsIHZhbCwgIkxvYWQgb3IgaW5pdCBmYWlsZWQiKTsJCVwKKwkJCQkJCQkJCVwKKwkvKiBT dG9yZS4gKi8JCQkJCQkJXAorCWF0b21pY19zdG9yZV8jI3RhKCZhdG9tLCB2YWwxLCBBVE9NSUNf UkVMQVhFRCk7CQkJXAorCWF0b21pY19zdG9yZV8jI3RhKCZhdG9tLCB2YWwyLCBBVE9NSUNfUkVM QVhFRCk7CQkJXAorCXZhbCA9IGF0b21pY19sb2FkXyMjdGEoJmF0b20sIEFUT01JQ19SRUxBWEVE KTsJCQlcCisJZXhwZWN0XyMjdGEjI19lcSh2YWwyLCB2YWwsICJTdG9yZSBmYWlsZWQiKTsJCQlc CisJCQkJCQkJCQlcCisJLyogRXhjaGFuZ2UuICovCQkJCQkJCVwKKwlhdG9taWNfc3RvcmVfIyN0 YSgmYXRvbSwgdmFsMSwgQVRPTUlDX1JFTEFYRUQpOwkJCVwKKwl2YWwgPSBhdG9taWNfZXhjaGFu Z2VfIyN0YSgmYXRvbSwgdmFsMiwgQVRPTUlDX1JFTEFYRUQpOwlcCisJZXhwZWN0XyMjdGEjI19l cSh2YWwxLCB2YWwsICJFeGNoYW5nZSByZXR1cm5lZCBpbnZhbGlkIHZhbHVlIik7CVwKKwl2YWwg PSBhdG9taWNfbG9hZF8jI3RhKCZhdG9tLCBBVE9NSUNfUkVMQVhFRCk7CQkJXAorCWV4cGVjdF8j I3RhIyNfZXEodmFsMiwgdmFsLCAiRXhjaGFuZ2Ugc3RvcmUgaW52YWxpZCB2YWx1ZSIpOwlcCisJ CQkJCQkJCQlcCisJLyogCQkJCQkJCQlcCisJICogV2VhayBDQVMuICBTcHVyaW91cyBmYWlsdXJl cyBhcmUgYWxsb3dlZCwgc28gd2UgbG9vcCBhIGZldwlcCisJICogdGltZXMuCQkJCQkJCVwKKwkg Ki8JCQkJCQkJCVwKKwlhdG9taWNfc3RvcmVfIyN0YSgmYXRvbSwgdmFsMSwgQVRPTUlDX1JFTEFY RUQpOwkJCVwKKwlzdWNjZXNzID0gZmFsc2U7CQkJCQkJXAorCWZvciAoaW50IHJldHJ5ID0gMDsg cmV0cnkgPCAxMCAmJiAhc3VjY2VzczsgcmV0cnkrKykgewkJXAorCQlleHBlY3RlZCA9IHZhbDI7 CQkJCQlcCisJCXN1Y2Nlc3MgPSBhdG9taWNfY29tcGFyZV9leGNoYW5nZV93ZWFrXyMjdGEoJmF0 b20sCVwKKwkJICAgICZleHBlY3RlZCwgdmFsMywgQVRPTUlDX1JFTEFYRUQsIEFUT01JQ19SRUxB WEVEKTsJXAorCQlleHBlY3RfIyN0YSMjX2VxKHZhbDEsIGV4cGVjdGVkLCAJCQlcCisJCSAgICAi Q0FTIHNob3VsZCB1cGRhdGUgZXhwZWN0ZWQiKTsJCQlcCisJfQkJCQkJCQkJXAorCWV4cGVjdF9i X2VxKHZhbDEgPT0gdmFsMiwgc3VjY2VzcywJCQkJXAorCSAgICAiV2VhayBDQVMgZGlkIHRoZSB3 cm9uZyBzdGF0ZSB1cGRhdGUiKTsJCQlcCisJdmFsID0gYXRvbWljX2xvYWRfIyN0YSgmYXRvbSwg QVRPTUlDX1JFTEFYRUQpOwkJCVwKKwlpZiAoc3VjY2VzcykgewkJCQkJCQlcCisJCWV4cGVjdF8j I3RhIyNfZXEodmFsMywgdmFsLAkJCQlcCisJCSAgICAiU3VjY2Vzc2Z1bCBDQVMgc2hvdWxkIHVw ZGF0ZSBhdG9taWMiKTsJCVwKKwl9IGVsc2UgewkJCQkJCQlcCisJCWV4cGVjdF8jI3RhIyNfZXEo dmFsMSwgdmFsLAkJCQlcCisJCSAgICAiVW5zdWNjZXNzZnVsIENBUyBzaG91bGQgbm90IHVwZGF0 ZSBhdG9taWMiKTsJXAorCX0JCQkJCQkJCVwKKwkJCQkJCQkJCVwKKwkvKiBTdHJvbmcgQ0FTLiAq LwkJCQkJCVwKKwlhdG9taWNfc3RvcmVfIyN0YSgmYXRvbSwgdmFsMSwgQVRPTUlDX1JFTEFYRUQp OwkJCVwKKwlleHBlY3RlZCA9IHZhbDI7CQkJCQkJXAorCXN1Y2Nlc3MgPSBhdG9taWNfY29tcGFy ZV9leGNoYW5nZV9zdHJvbmdfIyN0YSgmYXRvbSwgJmV4cGVjdGVkLAlcCisJICAgIHZhbDMsIEFU T01JQ19SRUxBWEVELCBBVE9NSUNfUkVMQVhFRCk7CQkJXAorCWV4cGVjdF9iX2VxKHZhbDEgPT0g dmFsMiwgc3VjY2VzcywJCQkJXAorCSAgICAiU3Ryb25nIENBUyBkaWQgdGhlIHdyb25nIHN0YXRl IHVwZGF0ZSIpOwkJCVwKKwl2YWwgPSBhdG9taWNfbG9hZF8jI3RhKCZhdG9tLCBBVE9NSUNfUkVM QVhFRCk7CQkJXAorCWlmIChzdWNjZXNzKSB7CQkJCQkJCVwKKwkJZXhwZWN0XyMjdGEjI19lcSh2 YWwzLCB2YWwsCQkJCVwKKwkJICAgICJTdWNjZXNzZnVsIENBUyBzaG91bGQgdXBkYXRlIGF0b21p YyIpOwkJXAorCX0gZWxzZSB7CQkJCQkJCVwKKwkJZXhwZWN0XyMjdGEjI19lcSh2YWwxLCB2YWws CQkJCVwKKwkJICAgICJVbnN1Y2Nlc3NmdWwgQ0FTIHNob3VsZCBub3QgdXBkYXRlIGF0b21pYyIp OwlcCisJfQkJCQkJCQkJXAorCQkJCQkJCQkJXAorCQkJCQkJCQkJXAorfSB3aGlsZSAoMCkKKwor I2RlZmluZSBET19JTlRFR0VSX1RFU1RTKHQsIHRhLCB2YWwxLCB2YWwyKSBkbyB7CQkJXAorCWF0 b21pY18jI3RhIyNfdCBhdG9tOwkJCQkJCVwKKwl0IHZhbDsJCQkJCQkJCVwKKwkJCQkJCQkJCVwK KwkvKiBGZXRjaC1hZGQuICovCQkJCQkJXAorCWF0b21pY19zdG9yZV8jI3RhKCZhdG9tLCB2YWwx LCBBVE9NSUNfUkVMQVhFRCk7CQkJXAorCXZhbCA9IGF0b21pY19mZXRjaF9hZGRfIyN0YSgmYXRv bSwgdmFsMiwgQVRPTUlDX1JFTEFYRUQpOwlcCisJZXhwZWN0XyMjdGEjI19lcSh2YWwxLCB2YWws CQkJCQlcCisJICAgICJGZXRjaC1hZGQgc2hvdWxkIHJldHVybiBwcmV2aW91cyB2YWx1ZSIpOwkJ CVwKKwl2YWwgPSBhdG9taWNfbG9hZF8jI3RhKCZhdG9tLCBBVE9NSUNfUkVMQVhFRCk7CQkJXAor CWV4cGVjdF8jI3RhIyNfZXEodmFsMSArIHZhbDIsIHZhbCwJCQkJXAorCSAgICAiRmV0Y2gtYWRk IHNob3VsZCB1cGRhdGUgYXRvbWljIik7CQkJCVwKKwkJCQkJCQkJCVwKKwkvKiBGZXRjaC1zdWIu ICovCQkJCQkJXAorCWF0b21pY19zdG9yZV8jI3RhKCZhdG9tLCB2YWwxLCBBVE9NSUNfUkVMQVhF RCk7CQkJXAorCXZhbCA9IGF0b21pY19mZXRjaF9zdWJfIyN0YSgmYXRvbSwgdmFsMiwgQVRPTUlD X1JFTEFYRUQpOwlcCisJZXhwZWN0XyMjdGEjI19lcSh2YWwxLCB2YWwsCQkJCQlcCisJICAgICJG ZXRjaC1zdWIgc2hvdWxkIHJldHVybiBwcmV2aW91cyB2YWx1ZSIpOwkJCVwKKwl2YWwgPSBhdG9t aWNfbG9hZF8jI3RhKCZhdG9tLCBBVE9NSUNfUkVMQVhFRCk7CQkJXAorCWV4cGVjdF8jI3RhIyNf ZXEodmFsMSAtIHZhbDIsIHZhbCwJCQkJXAorCSAgICAiRmV0Y2gtc3ViIHNob3VsZCB1cGRhdGUg YXRvbWljIik7CQkJCVwKKwkJCQkJCQkJCVwKKwkvKiBGZXRjaC1hbmQuICovCQkJCQkJXAorCWF0 b21pY19zdG9yZV8jI3RhKCZhdG9tLCB2YWwxLCBBVE9NSUNfUkVMQVhFRCk7CQkJXAorCXZhbCA9 IGF0b21pY19mZXRjaF9hbmRfIyN0YSgmYXRvbSwgdmFsMiwgQVRPTUlDX1JFTEFYRUQpOwlcCisJ ZXhwZWN0XyMjdGEjI19lcSh2YWwxLCB2YWwsCQkJCQlcCisJICAgICJGZXRjaC1hbmQgc2hvdWxk IHJldHVybiBwcmV2aW91cyB2YWx1ZSIpOwkJCVwKKwl2YWwgPSBhdG9taWNfbG9hZF8jI3RhKCZh dG9tLCBBVE9NSUNfUkVMQVhFRCk7CQkJXAorCWV4cGVjdF8jI3RhIyNfZXEodmFsMSAmIHZhbDIs IHZhbCwJCQkJXAorCSAgICAiRmV0Y2gtYW5kIHNob3VsZCB1cGRhdGUgYXRvbWljIik7CQkJCVwK KwkJCQkJCQkJCVwKKwkvKiBGZXRjaC1vci4gKi8JCQkJCQkJXAorCWF0b21pY19zdG9yZV8jI3Rh KCZhdG9tLCB2YWwxLCBBVE9NSUNfUkVMQVhFRCk7CQkJXAorCXZhbCA9IGF0b21pY19mZXRjaF9v cl8jI3RhKCZhdG9tLCB2YWwyLCBBVE9NSUNfUkVMQVhFRCk7CVwKKwlleHBlY3RfIyN0YSMjX2Vx KHZhbDEsIHZhbCwJCQkJCVwKKwkgICAgIkZldGNoLW9yIHNob3VsZCByZXR1cm4gcHJldmlvdXMg dmFsdWUiKTsJCQlcCisJdmFsID0gYXRvbWljX2xvYWRfIyN0YSgmYXRvbSwgQVRPTUlDX1JFTEFY RUQpOwkJCVwKKwlleHBlY3RfIyN0YSMjX2VxKHZhbDEgfCB2YWwyLCB2YWwsCQkJCVwKKwkgICAg IkZldGNoLW9yIHNob3VsZCB1cGRhdGUgYXRvbWljIik7CQkJCVwKKwkJCQkJCQkJCVwKKwkvKiBG ZXRjaC14b3IuICovCQkJCQkJXAorCWF0b21pY19zdG9yZV8jI3RhKCZhdG9tLCB2YWwxLCBBVE9N SUNfUkVMQVhFRCk7CQkJXAorCXZhbCA9IGF0b21pY19mZXRjaF94b3JfIyN0YSgmYXRvbSwgdmFs MiwgQVRPTUlDX1JFTEFYRUQpOwlcCisJZXhwZWN0XyMjdGEjI19lcSh2YWwxLCB2YWwsCQkJCQlc CisJICAgICJGZXRjaC14b3Igc2hvdWxkIHJldHVybiBwcmV2aW91cyB2YWx1ZSIpOwkJCVwKKwl2 YWwgPSBhdG9taWNfbG9hZF8jI3RhKCZhdG9tLCBBVE9NSUNfUkVMQVhFRCk7CQkJXAorCWV4cGVj dF8jI3RhIyNfZXEodmFsMSBeIHZhbDIsIHZhbCwJCQkJXAorCSAgICAiRmV0Y2gteG9yIHNob3Vs ZCB1cGRhdGUgYXRvbWljIik7CQkJCVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgVEVTVF9TVFJV Q1QodCwgdGEpCQkJCQkJXAordHlwZWRlZiBzdHJ1Y3QgewkJCQkJCQlcCisJdCB2YWwxOwkJCQkJ CQkJXAorCXQgdmFsMjsJCQkJCQkJCVwKKwl0IHZhbDM7CQkJCQkJCQlcCit9IHRhIyNfdGVzdF90 OworCisjZGVmaW5lIFRFU1RfQ0FTRVModCkgewkJCQkJCQlcCisJeyh0KS0xLCAodCktMSwgKHQp LTJ9LAkJCQkJCVwKKwl7KHQpLTEsICh0KSAwLCAodCktMn0sCQkJCQkJXAorCXsodCktMSwgKHQp IDEsICh0KS0yfSwJCQkJCQlcCisJCQkJCQkJCQlcCisJeyh0KSAwLCAodCktMSwgKHQpLTJ9LAkJ CQkJCVwKKwl7KHQpIDAsICh0KSAwLCAodCktMn0sCQkJCQkJXAorCXsodCkgMCwgKHQpIDEsICh0 KS0yfSwJCQkJCQlcCisJCQkJCQkJCQlcCisJeyh0KSAxLCAodCktMSwgKHQpLTJ9LAkJCQkJCVwK Kwl7KHQpIDEsICh0KSAwLCAodCktMn0sCQkJCQkJXAorCXsodCkgMSwgKHQpIDEsICh0KS0yfSwJ CQkJCQlcCisJCQkJCQkJCQlcCisJeyh0KTAsICh0KS0oMSA8PCAyMiksICh0KS0yfSwJCQkJCVwK Kwl7KHQpMCwgKHQpKDEgPDwgMjIpLCAodCktMn0sCQkJCQlcCisJeyh0KSgxIDw8IDIyKSwgKHQp LSgxIDw8IDIyKSwgKHQpLTJ9LAkJCQlcCisJeyh0KSgxIDw8IDIyKSwgKHQpKDEgPDwgMjIpLCAo dCktMn0JCQkJXAorfQorCisjZGVmaW5lIFRFU1RfQk9EWSh0LCB0YSkgZG8gewkJCQkJCVwKKwlj b25zdCB0YSMjX3Rlc3RfdCB0ZXN0c1tdID0gVEVTVF9DQVNFUyh0KTsJCQlcCisJZm9yICh1bnNp Z25lZCBpID0gMDsgaSA8IHNpemVvZih0ZXN0cykvc2l6ZW9mKHRlc3RzWzBdKTsgaSsrKSB7CVwK KwkJdGEjI190ZXN0X3QgdGVzdCA9IHRlc3RzW2ldOwkJCQlcCisJCURPX1RFU1RTKHQsIHRhLCB0 ZXN0LnZhbDEsIHRlc3QudmFsMiwgdGVzdC52YWwzKTsJXAorCX0JCQkJCQkJCVwKK30gd2hpbGUg KDApCisKKyNkZWZpbmUgSU5URUdFUl9URVNUX0JPRFkodCwgdGEpIGRvIHsJCQkJCVwKKwljb25z dCB0YSMjX3Rlc3RfdCB0ZXN0c1tdID0gVEVTVF9DQVNFUyh0KTsJCQlcCisJZm9yICh1bnNpZ25l ZCBpID0gMDsgaSA8IHNpemVvZih0ZXN0cykvc2l6ZW9mKHRlc3RzWzBdKTsgaSsrKSB7CVwKKwkJ dGEjI190ZXN0X3QgdGVzdCA9IHRlc3RzW2ldOwkJCQlcCisJCURPX1RFU1RTKHQsIHRhLCB0ZXN0 LnZhbDEsIHRlc3QudmFsMiwgdGVzdC52YWwzKTsJXAorCQlET19JTlRFR0VSX1RFU1RTKHQsIHRh LCB0ZXN0LnZhbDEsIHRlc3QudmFsMik7CQlcCisJfQkJCQkJCQkJXAorfSB3aGlsZSAoMCkKKwor VEVTVF9TVFJVQ1QodWludDY0X3QsIHU2NCk7CitURVNUX0JFR0lOKHRlc3RfYXRvbWljX3U2NCkg eworI2lmICEoTEdfU0laRU9GX1BUUiA9PSAzIHx8IExHX1NJWkVPRl9JTlQgPT0gMykKKwl0ZXN0 X3NraXAoIjY0LWJpdCBhdG9taWMgb3BlcmF0aW9ucyBub3Qgc3VwcG9ydGVkIik7CisjZWxzZQor CUlOVEVHRVJfVEVTVF9CT0RZKHVpbnQ2NF90LCB1NjQpOworI2VuZGlmCit9CitURVNUX0VORAor CisKK1RFU1RfU1RSVUNUKHVpbnQzMl90LCB1MzIpOworVEVTVF9CRUdJTih0ZXN0X2F0b21pY191 MzIpIHsKKwlJTlRFR0VSX1RFU1RfQk9EWSh1aW50MzJfdCwgdTMyKTsKK30KK1RFU1RfRU5ECisK K1RFU1RfU1RSVUNUKHZvaWQgKiwgcCk7CitURVNUX0JFR0lOKHRlc3RfYXRvbWljX3ApIHsKKwlU RVNUX0JPRFkodm9pZCAqLCBwKTsKK30KK1RFU1RfRU5ECisKK1RFU1RfU1RSVUNUKHNpemVfdCwg enUpOworVEVTVF9CRUdJTih0ZXN0X2F0b21pY196dSkgeworCUlOVEVHRVJfVEVTVF9CT0RZKHNp emVfdCwgenUpOworfQorVEVTVF9FTkQKKworVEVTVF9TVFJVQ1Qoc3NpemVfdCwgemQpOworVEVT VF9CRUdJTih0ZXN0X2F0b21pY196ZCkgeworCUlOVEVHRVJfVEVTVF9CT0RZKHNzaXplX3QsIHpk KTsKK30KK1RFU1RfRU5ECisKKworVEVTVF9TVFJVQ1QodW5zaWduZWQsIHUpOworVEVTVF9CRUdJ Tih0ZXN0X2F0b21pY191KSB7CisJSU5URUdFUl9URVNUX0JPRFkodW5zaWduZWQsIHUpOworfQor VEVTVF9FTkQKKworaW50CittYWluKHZvaWQpIHsKKwlyZXR1cm4gdGVzdCgKKwkgICAgdGVzdF9h dG9taWNfdTY0LAorCSAgICB0ZXN0X2F0b21pY191MzIsCisJICAgIHRlc3RfYXRvbWljX3AsCisJ ICAgIHRlc3RfYXRvbWljX3p1LAorCSAgICB0ZXN0X2F0b21pY196ZCwKKwkgICAgdGVzdF9hdG9t aWNfdSk7Cit9CgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2Mt NS4zLjAvdGVzdC91bml0L2JhY2tncm91bmRfdGhyZWFkLmMgYi8zODktZHMtYmFzZS0zLjMuMC1i dWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvYmFja2dyb3VuZF90aHJlYWQuYwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjAwMTBhCi0tLSAvZGV2L251bGwKKysrIGIv Mzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L2JhY2tncm91 bmRfdGhyZWFkLmMKQEAgLTAsMCArMSwxMTggQEAKKyNpbmNsdWRlICJ0ZXN0L2plbWFsbG9jX3Rl c3QuaCIKKworI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL3V0aWwuaCIKKworc3RhdGljIHZv aWQKK3Rlc3Rfc3dpdGNoX2JhY2tncm91bmRfdGhyZWFkX2N0bChib29sIG5ld192YWwpIHsKKwli b29sIGUwLCBlMTsKKwlzaXplX3Qgc3ogPSBzaXplb2YoYm9vbCk7CisKKwllMSA9IG5ld192YWw7 CisJZXhwZWN0X2RfZXEobWFsbGN0bCgiYmFja2dyb3VuZF90aHJlYWQiLCAodm9pZCAqKSZlMCwg JnN6LAorCSAgICAmZTEsIHN6KSwgMCwgIlVuZXhwZWN0ZWQgbWFsbGN0bCgpIGZhaWx1cmUiKTsK KwlleHBlY3RfYl9lcShlMCwgIWUxLAorCSAgICAiYmFja2dyb3VuZF90aHJlYWQgc2hvdWxkIGJl ICVkIGJlZm9yZS5cbiIsICFlMSk7CisJaWYgKGUxKSB7CisJCWV4cGVjdF96dV9ndChuX2JhY2tn cm91bmRfdGhyZWFkcywgMCwKKwkJICAgICJOdW1iZXIgb2YgYmFja2dyb3VuZCB0aHJlYWRzIHNo b3VsZCBiZSBub24gemVyby5cbiIpOworCX0gZWxzZSB7CisJCWV4cGVjdF96dV9lcShuX2JhY2tn cm91bmRfdGhyZWFkcywgMCwKKwkJICAgICJOdW1iZXIgb2YgYmFja2dyb3VuZCB0aHJlYWRzIHNo b3VsZCBiZSB6ZXJvLlxuIik7CisJfQorfQorCitzdGF0aWMgdm9pZAordGVzdF9yZXBlYXRfYmFj a2dyb3VuZF90aHJlYWRfY3RsKGJvb2wgYmVmb3JlKSB7CisJYm9vbCBlMCwgZTE7CisJc2l6ZV90 IHN6ID0gc2l6ZW9mKGJvb2wpOworCisJZTEgPSBiZWZvcmU7CisJZXhwZWN0X2RfZXEobWFsbGN0 bCgiYmFja2dyb3VuZF90aHJlYWQiLCAodm9pZCAqKSZlMCwgJnN6LAorCSAgICAmZTEsIHN6KSwg MCwgIlVuZXhwZWN0ZWQgbWFsbGN0bCgpIGZhaWx1cmUiKTsKKwlleHBlY3RfYl9lcShlMCwgYmVm b3JlLAorCSAgICAiYmFja2dyb3VuZF90aHJlYWQgc2hvdWxkIGJlICVkLlxuIiwgYmVmb3JlKTsK KwlpZiAoZTEpIHsKKwkJZXhwZWN0X3p1X2d0KG5fYmFja2dyb3VuZF90aHJlYWRzLCAwLAorCQkg ICAgIk51bWJlciBvZiBiYWNrZ3JvdW5kIHRocmVhZHMgc2hvdWxkIGJlIG5vbiB6ZXJvLlxuIik7 CisJfSBlbHNlIHsKKwkJZXhwZWN0X3p1X2VxKG5fYmFja2dyb3VuZF90aHJlYWRzLCAwLAorCQkg ICAgIk51bWJlciBvZiBiYWNrZ3JvdW5kIHRocmVhZHMgc2hvdWxkIGJlIHplcm8uXG4iKTsKKwl9 Cit9CisKK1RFU1RfQkVHSU4odGVzdF9iYWNrZ3JvdW5kX3RocmVhZF9jdGwpIHsKKwl0ZXN0X3Nr aXBfaWYoIWhhdmVfYmFja2dyb3VuZF90aHJlYWQpOworCisJYm9vbCBlMCwgZTE7CisJc2l6ZV90 IHN6ID0gc2l6ZW9mKGJvb2wpOworCisJZXhwZWN0X2RfZXEobWFsbGN0bCgib3B0LmJhY2tncm91 bmRfdGhyZWFkIiwgKHZvaWQgKikmZTAsICZzeiwKKwkgICAgTlVMTCwgMCksIDAsICJVbmV4cGVj dGVkIG1hbGxjdGwoKSBmYWlsdXJlIik7CisJZXhwZWN0X2RfZXEobWFsbGN0bCgiYmFja2dyb3Vu ZF90aHJlYWQiLCAodm9pZCAqKSZlMSwgJnN6LAorCSAgICBOVUxMLCAwKSwgMCwgIlVuZXhwZWN0 ZWQgbWFsbGN0bCgpIGZhaWx1cmUiKTsKKwlleHBlY3RfYl9lcShlMCwgZTEsCisJICAgICJEZWZh dWx0IGFuZCBvcHQuYmFja2dyb3VuZF90aHJlYWQgZG9lcyBub3QgbWF0Y2guXG4iKTsKKwlpZiAo ZTApIHsKKwkJdGVzdF9zd2l0Y2hfYmFja2dyb3VuZF90aHJlYWRfY3RsKGZhbHNlKTsKKwl9CisJ ZXhwZWN0X3p1X2VxKG5fYmFja2dyb3VuZF90aHJlYWRzLCAwLAorCSAgICAiTnVtYmVyIG9mIGJh Y2tncm91bmQgdGhyZWFkcyBzaG91bGQgYmUgMC5cbiIpOworCisJZm9yICh1bnNpZ25lZCBpID0g MDsgaSA8IDQ7IGkrKykgeworCQl0ZXN0X3N3aXRjaF9iYWNrZ3JvdW5kX3RocmVhZF9jdGwodHJ1 ZSk7CisJCXRlc3RfcmVwZWF0X2JhY2tncm91bmRfdGhyZWFkX2N0bCh0cnVlKTsKKwkJdGVzdF9y ZXBlYXRfYmFja2dyb3VuZF90aHJlYWRfY3RsKHRydWUpOworCisJCXRlc3Rfc3dpdGNoX2JhY2tn cm91bmRfdGhyZWFkX2N0bChmYWxzZSk7CisJCXRlc3RfcmVwZWF0X2JhY2tncm91bmRfdGhyZWFk X2N0bChmYWxzZSk7CisJCXRlc3RfcmVwZWF0X2JhY2tncm91bmRfdGhyZWFkX2N0bChmYWxzZSk7 CisJfQorfQorVEVTVF9FTkQKKworVEVTVF9CRUdJTih0ZXN0X2JhY2tncm91bmRfdGhyZWFkX3J1 bm5pbmcpIHsKKwl0ZXN0X3NraXBfaWYoIWhhdmVfYmFja2dyb3VuZF90aHJlYWQpOworCXRlc3Rf c2tpcF9pZighY29uZmlnX3N0YXRzKTsKKworI2lmIGRlZmluZWQoSkVNQUxMT0NfQkFDS0dST1VO RF9USFJFQUQpCisJdHNkX3QgKnRzZCA9IHRzZF9mZXRjaCgpOworCWJhY2tncm91bmRfdGhyZWFk X2luZm9fdCAqaW5mbyA9ICZiYWNrZ3JvdW5kX3RocmVhZF9pbmZvWzBdOworCisJdGVzdF9yZXBl YXRfYmFja2dyb3VuZF90aHJlYWRfY3RsKGZhbHNlKTsKKwl0ZXN0X3N3aXRjaF9iYWNrZ3JvdW5k X3RocmVhZF9jdGwodHJ1ZSk7CisJZXhwZWN0X2JfZXEoaW5mby0+c3RhdGUsIGJhY2tncm91bmRf dGhyZWFkX3N0YXJ0ZWQsCisJICAgICJCYWNrZ3JvdW5kX3RocmVhZCBkaWQgbm90IHN0YXJ0Llxu Iik7CisKKwluc3RpbWVfdCBzdGFydDsKKwluc3RpbWVfaW5pdF91cGRhdGUoJnN0YXJ0KTsKKwor CWJvb2wgcmFuID0gZmFsc2U7CisJd2hpbGUgKHRydWUpIHsKKwkJbWFsbG9jX211dGV4X2xvY2so dHNkX3RzZG4odHNkKSwgJmluZm8tPm10eCk7CisJCWlmIChpbmZvLT50b3Rfbl9ydW5zID4gMCkg eworCQkJcmFuID0gdHJ1ZTsKKwkJfQorCQltYWxsb2NfbXV0ZXhfdW5sb2NrKHRzZF90c2RuKHRz ZCksICZpbmZvLT5tdHgpOworCQlpZiAocmFuKSB7CisJCQlicmVhazsKKwkJfQorCisJCW5zdGlt ZV90IG5vdzsKKwkJbnN0aW1lX2luaXRfdXBkYXRlKCZub3cpOworCQluc3RpbWVfc3VidHJhY3Qo Jm5vdywgJnN0YXJ0KTsKKwkJZXhwZWN0X3U2NF9sdChuc3RpbWVfc2VjKCZub3cpLCAxMDAwLAor CQkgICAgIkJhY2tncm91bmQgdGhyZWFkcyBkaWQgbm90IHJ1biBmb3IgMTAwMCBzZWNvbmRzLiIp OworCQlzbGVlcCgxKTsKKwl9CisJdGVzdF9zd2l0Y2hfYmFja2dyb3VuZF90aHJlYWRfY3RsKGZh bHNlKTsKKyNlbmRpZgorfQorVEVTVF9FTkQKKworaW50CittYWluKHZvaWQpIHsKKwkvKiBCYWNr Z3JvdW5kX3RocmVhZCBjcmVhdGlvbiB0ZXN0cyByZWVudHJhbmN5IG5hdHVyYWxseS4gKi8KKwly ZXR1cm4gdGVzdF9ub19yZWVudHJhbmN5KAorCSAgICB0ZXN0X2JhY2tncm91bmRfdGhyZWFkX2N0 bCwKKwkgICAgdGVzdF9iYWNrZ3JvdW5kX3RocmVhZF9ydW5uaW5nKTsKK30KCmRpZmYgLS1naXQg YS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvYmFja2dy b3VuZF90aHJlYWRfZW5hYmxlLmMgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01 LjMuMC90ZXN0L3VuaXQvYmFja2dyb3VuZF90aHJlYWRfZW5hYmxlLmMKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMC4uNDQwMzRhYwotLS0gL2Rldi9udWxsCisrKyBiLzM4OS1kcy1i YXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9iYWNrZ3JvdW5kX3RocmVh ZF9lbmFibGUuYwpAQCAtMCwwICsxLDk2IEBACisjaW5jbHVkZSAidGVzdC9qZW1hbGxvY190ZXN0 LmgiCisKK2NvbnN0IGNoYXIgKm1hbGxvY19jb25mID0gImJhY2tncm91bmRfdGhyZWFkOmZhbHNl LG5hcmVuYXM6MSxtYXhfYmFja2dyb3VuZF90aHJlYWRzOjIwIjsKKworc3RhdGljIHVuc2lnbmVk CittYXhfdGVzdF9uYXJlbmFzKHZvaWQpIHsKKwkvKgorCSAqIDEwIGhlcmUgaXMgc29tZXdoYXQg YXJiaXRyYXJ5LCBleGNlcHQgaW5zb2ZhciBhcyB3ZSB3YW50IHRvIGVuc3VyZQorCSAqIHRoYXQg dGhlIG51bWJlciBvZiBiYWNrZ3JvdW5kIHRocmVhZHMgaXMgc21hbGxlciB0aGFuIHRoZSBudW1i ZXIgb2YKKwkgKiBhcmVuYXMuICBJJ2xsIHJhZ2VxdWl0IGxvbmcgYmVmb3JlIHdlIGhhdmUgdG8g c3BpbiB1cCAxMCB0aHJlYWRzIHBlcgorCSAqIGNwdSB0byBoYW5kbGUgYmFja2dyb3VuZCBwdXJn aW5nLCBzbyB0aGlzIGlzIGEgY29uc2VydmF0aXZlCisJICogYXBwcm94aW1hdGlvbi4KKwkgKi8K Kwl1bnNpZ25lZCByZXQgPSAxMCAqIG5jcHVzOworCS8qIExpbWl0IHRoZSBtYXggdG8gYXZvaWQg Vk0gZXhoYXVzdGlvbiBvbiAzMi1iaXQgLiAqLworCWlmIChyZXQgPiA1MTIpIHsKKwkJcmV0ID0g NTEyOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK1RFU1RfQkVHSU4odGVzdF9kZWZlcnJlZCkg eworCXRlc3Rfc2tpcF9pZighaGF2ZV9iYWNrZ3JvdW5kX3RocmVhZCk7CisKKwl1bnNpZ25lZCBp ZDsKKwlzaXplX3Qgc3pfdSA9IHNpemVvZih1bnNpZ25lZCk7CisKKwlmb3IgKHVuc2lnbmVkIGkg PSAwOyBpIDwgbWF4X3Rlc3RfbmFyZW5hcygpOyBpKyspIHsKKwkJZXhwZWN0X2RfZXEobWFsbGN0 bCgiYXJlbmFzLmNyZWF0ZSIsICZpZCwgJnN6X3UsIE5VTEwsIDApLCAwLAorCQkgICAgIkZhaWxl ZCB0byBjcmVhdGUgYXJlbmEiKTsKKwl9CisKKwlib29sIGVuYWJsZSA9IHRydWU7CisJc2l6ZV90 IHN6X2IgPSBzaXplb2YoYm9vbCk7CisJZXhwZWN0X2RfZXEobWFsbGN0bCgiYmFja2dyb3VuZF90 aHJlYWQiLCBOVUxMLCBOVUxMLCAmZW5hYmxlLCBzel9iKSwgMCwKKwkgICAgIkZhaWxlZCB0byBl bmFibGUgYmFja2dyb3VuZCB0aHJlYWRzIik7CisJZW5hYmxlID0gZmFsc2U7CisJZXhwZWN0X2Rf ZXEobWFsbGN0bCgiYmFja2dyb3VuZF90aHJlYWQiLCBOVUxMLCBOVUxMLCAmZW5hYmxlLCBzel9i KSwgMCwKKwkgICAgIkZhaWxlZCB0byBkaXNhYmxlIGJhY2tncm91bmQgdGhyZWFkcyIpOworfQor VEVTVF9FTkQKKworVEVTVF9CRUdJTih0ZXN0X21heF9iYWNrZ3JvdW5kX3RocmVhZHMpIHsKKwl0 ZXN0X3NraXBfaWYoIWhhdmVfYmFja2dyb3VuZF90aHJlYWQpOworCisJc2l6ZV90IG1heF9uX3Ro ZHM7CisJc2l6ZV90IG9wdF9tYXhfbl90aGRzOworCXNpemVfdCBzel9tID0gc2l6ZW9mKG1heF9u X3RoZHMpOworCWV4cGVjdF9kX2VxKG1hbGxjdGwoIm9wdC5tYXhfYmFja2dyb3VuZF90aHJlYWRz IiwKKwkgICAgJm9wdF9tYXhfbl90aGRzLCAmc3pfbSwgTlVMTCwgMCksIDAsCisJICAgICJGYWls ZWQgdG8gZ2V0IG9wdC5tYXhfYmFja2dyb3VuZF90aHJlYWRzIik7CisJZXhwZWN0X2RfZXEobWFs bGN0bCgibWF4X2JhY2tncm91bmRfdGhyZWFkcyIsICZtYXhfbl90aGRzLCAmc3pfbSwgTlVMTCwK KwkgICAgMCksIDAsICJGYWlsZWQgdG8gZ2V0IG1heCBiYWNrZ3JvdW5kIHRocmVhZHMiKTsKKwll eHBlY3RfenVfZXEob3B0X21heF9uX3RoZHMsIG1heF9uX3RoZHMsCisJICAgICJtYXhfYmFja2dy b3VuZF90aHJlYWRzIGFuZCAiCisJICAgICJvcHQubWF4X2JhY2tncm91bmRfdGhyZWFkcyBzaG91 bGQgbWF0Y2giKTsKKwlleHBlY3RfZF9lcShtYWxsY3RsKCJtYXhfYmFja2dyb3VuZF90aHJlYWRz IiwgTlVMTCwgTlVMTCwgJm1heF9uX3RoZHMsCisJICAgIHN6X20pLCAwLCAiRmFpbGVkIHRvIHNl dCBtYXggYmFja2dyb3VuZCB0aHJlYWRzIik7CisKKwl1bnNpZ25lZCBpZDsKKwlzaXplX3Qgc3pf dSA9IHNpemVvZih1bnNpZ25lZCk7CisKKwlmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbWF4X3Rl c3RfbmFyZW5hcygpOyBpKyspIHsKKwkJZXhwZWN0X2RfZXEobWFsbGN0bCgiYXJlbmFzLmNyZWF0 ZSIsICZpZCwgJnN6X3UsIE5VTEwsIDApLCAwLAorCQkgICAgIkZhaWxlZCB0byBjcmVhdGUgYXJl bmEiKTsKKwl9CisKKwlib29sIGVuYWJsZSA9IHRydWU7CisJc2l6ZV90IHN6X2IgPSBzaXplb2Yo Ym9vbCk7CisJZXhwZWN0X2RfZXEobWFsbGN0bCgiYmFja2dyb3VuZF90aHJlYWQiLCBOVUxMLCBO VUxMLCAmZW5hYmxlLCBzel9iKSwgMCwKKwkgICAgIkZhaWxlZCB0byBlbmFibGUgYmFja2dyb3Vu ZCB0aHJlYWRzIik7CisJZXhwZWN0X3p1X2VxKG5fYmFja2dyb3VuZF90aHJlYWRzLCBtYXhfbl90 aGRzLAorCSAgICAiTnVtYmVyIG9mIGJhY2tncm91bmQgdGhyZWFkcyBzaG91bGQgbm90IGNoYW5n ZS5cbiIpOworCXNpemVfdCBuZXdfbWF4X3RoZHMgPSBtYXhfbl90aGRzIC0gMTsKKwlpZiAobmV3 X21heF90aGRzID4gMCkgeworCQlleHBlY3RfZF9lcShtYWxsY3RsKCJtYXhfYmFja2dyb3VuZF90 aHJlYWRzIiwgTlVMTCwgTlVMTCwKKwkJICAgICZuZXdfbWF4X3RoZHMsIHN6X20pLCAwLAorCQkg ICAgIkZhaWxlZCB0byBzZXQgbWF4IGJhY2tncm91bmQgdGhyZWFkcyIpOworCQlleHBlY3RfenVf ZXEobl9iYWNrZ3JvdW5kX3RocmVhZHMsIG5ld19tYXhfdGhkcywKKwkJICAgICJOdW1iZXIgb2Yg YmFja2dyb3VuZCB0aHJlYWRzIHNob3VsZCBkZWNyZWFzZSBieSAxLlxuIik7CisJfQorCW5ld19t YXhfdGhkcyA9IDE7CisJZXhwZWN0X2RfZXEobWFsbGN0bCgibWF4X2JhY2tncm91bmRfdGhyZWFk cyIsIE5VTEwsIE5VTEwsICZuZXdfbWF4X3RoZHMsCisJICAgIHN6X20pLCAwLCAiRmFpbGVkIHRv IHNldCBtYXggYmFja2dyb3VuZCB0aHJlYWRzIik7CisJZXhwZWN0X3p1X2VxKG5fYmFja2dyb3Vu ZF90aHJlYWRzLCBuZXdfbWF4X3RoZHMsCisJICAgICJOdW1iZXIgb2YgYmFja2dyb3VuZCB0aHJl YWRzIHNob3VsZCBiZSAxLlxuIik7Cit9CitURVNUX0VORAorCitpbnQKK21haW4odm9pZCkgewor CXJldHVybiB0ZXN0X25vX3JlZW50cmFuY3koCisJCXRlc3RfZGVmZXJyZWQsCisJCXRlc3RfbWF4 X2JhY2tncm91bmRfdGhyZWFkcyk7Cit9CgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAt YnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L2Jhc2UuYyBiLzM4OS1kcy1iYXNlLTMuMy4w LWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9iYXNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMC4uMTVlMDRhOAotLS0gL2Rldi9udWxsCisrKyBiLzM4OS1kcy1iYXNl LTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9iYXNlLmMKQEAgLTAsMCArMSwy NjUgQEAKKyNpbmNsdWRlICJ0ZXN0L2plbWFsbG9jX3Rlc3QuaCIKKworI2luY2x1ZGUgInRlc3Qv ZXh0ZW50X2hvb2tzLmgiCisKK3N0YXRpYyBleHRlbnRfaG9va3NfdCBob29rc19udWxsID0gewor CWV4dGVudF9hbGxvY19ob29rLAorCU5VTEwsIC8qIGRhbGxvYyAqLworCU5VTEwsIC8qIGRlc3Ry b3kgKi8KKwlOVUxMLCAvKiBjb21taXQgKi8KKwlOVUxMLCAvKiBkZWNvbW1pdCAqLworCU5VTEws IC8qIHB1cmdlX2xhenkgKi8KKwlOVUxMLCAvKiBwdXJnZV9mb3JjZWQgKi8KKwlOVUxMLCAvKiBz cGxpdCAqLworCU5VTEwgLyogbWVyZ2UgKi8KK307CisKK3N0YXRpYyBleHRlbnRfaG9va3NfdCBo b29rc19ub3RfbnVsbCA9IHsKKwlleHRlbnRfYWxsb2NfaG9vaywKKwlleHRlbnRfZGFsbG9jX2hv b2ssCisJZXh0ZW50X2Rlc3Ryb3lfaG9vaywKKwlOVUxMLCAvKiBjb21taXQgKi8KKwlleHRlbnRf ZGVjb21taXRfaG9vaywKKwlleHRlbnRfcHVyZ2VfbGF6eV9ob29rLAorCWV4dGVudF9wdXJnZV9m b3JjZWRfaG9vaywKKwlOVUxMLCAvKiBzcGxpdCAqLworCU5VTEwgLyogbWVyZ2UgKi8KK307CisK K1RFU1RfQkVHSU4odGVzdF9iYXNlX2hvb2tzX2RlZmF1bHQpIHsKKwliYXNlX3QgKmJhc2U7CisJ c2l6ZV90IGFsbG9jYXRlZDAsIGFsbG9jYXRlZDEsIHJlc2lkZW50LCBtYXBwZWQsIG5fdGhwOwor CisJdHNkbl90ICp0c2RuID0gdHNkX3RzZG4odHNkX2ZldGNoKCkpOworCWJhc2UgPSBiYXNlX25l dyh0c2RuLCAwLAorCSAgICAoZXh0ZW50X2hvb2tzX3QgKikmZWhvb2tzX2RlZmF1bHRfZXh0ZW50 X2hvb2tzLAorCSAgICAvKiBtZXRhZGF0YV91c2VfaG9va3MgKi8gdHJ1ZSk7CisKKwlpZiAoY29u ZmlnX3N0YXRzKSB7CisJCWJhc2Vfc3RhdHNfZ2V0KHRzZG4sIGJhc2UsICZhbGxvY2F0ZWQwLCAm cmVzaWRlbnQsICZtYXBwZWQsCisJCSAgICAmbl90aHApOworCQlleHBlY3RfenVfZ2UoYWxsb2Nh dGVkMCwgc2l6ZW9mKGJhc2VfdCksCisJCSAgICAiQmFzZSBoZWFkZXIgc2hvdWxkIGNvdW50IGFz IGFsbG9jYXRlZCIpOworCQlpZiAob3B0X21ldGFkYXRhX3RocCA9PSBtZXRhZGF0YV90aHBfYWx3 YXlzKSB7CisJCQlleHBlY3RfenVfZ3Qobl90aHAsIDAsCisJCQkgICAgIkJhc2Ugc2hvdWxkIGhh dmUgMSBUSFAgYXQgbGVhc3QuIik7CisJCX0KKwl9CisKKwlleHBlY3RfcHRyX25vdF9udWxsKGJh c2VfYWxsb2ModHNkbiwgYmFzZSwgNDIsIDEpLAorCSAgICAiVW5leHBlY3RlZCBiYXNlX2FsbG9j KCkgZmFpbHVyZSIpOworCisJaWYgKGNvbmZpZ19zdGF0cykgeworCQliYXNlX3N0YXRzX2dldCh0 c2RuLCBiYXNlLCAmYWxsb2NhdGVkMSwgJnJlc2lkZW50LCAmbWFwcGVkLAorCQkgICAgJm5fdGhw KTsKKwkJZXhwZWN0X3p1X2dlKGFsbG9jYXRlZDEgLSBhbGxvY2F0ZWQwLCA0MiwKKwkJICAgICJB dCBsZWFzdCA0MiBieXRlcyB3ZXJlIGFsbG9jYXRlZCBieSBiYXNlX2FsbG9jKCkiKTsKKwl9CisK KwliYXNlX2RlbGV0ZSh0c2RuLCBiYXNlKTsKK30KK1RFU1RfRU5ECisKK1RFU1RfQkVHSU4odGVz dF9iYXNlX2hvb2tzX251bGwpIHsKKwlleHRlbnRfaG9va3NfdCBob29rc19vcmlnOworCWJhc2Vf dCAqYmFzZTsKKwlzaXplX3QgYWxsb2NhdGVkMCwgYWxsb2NhdGVkMSwgcmVzaWRlbnQsIG1hcHBl ZCwgbl90aHA7CisKKwlleHRlbnRfaG9va3NfcHJlcCgpOworCXRyeV9kYWxsb2MgPSBmYWxzZTsK Kwl0cnlfZGVzdHJveSA9IHRydWU7CisJdHJ5X2RlY29tbWl0ID0gZmFsc2U7CisJdHJ5X3B1cmdl X2xhenkgPSBmYWxzZTsKKwl0cnlfcHVyZ2VfZm9yY2VkID0gZmFsc2U7CisJbWVtY3B5KCZob29r c19vcmlnLCAmaG9va3MsIHNpemVvZihleHRlbnRfaG9va3NfdCkpOworCW1lbWNweSgmaG9va3Ms ICZob29rc19udWxsLCBzaXplb2YoZXh0ZW50X2hvb2tzX3QpKTsKKworCXRzZG5fdCAqdHNkbiA9 IHRzZF90c2RuKHRzZF9mZXRjaCgpKTsKKwliYXNlID0gYmFzZV9uZXcodHNkbiwgMCwgJmhvb2tz LCAvKiBtZXRhZGF0YV91c2VfaG9va3MgKi8gdHJ1ZSk7CisJZXhwZWN0X3B0cl9ub3RfbnVsbChi YXNlLCAiVW5leHBlY3RlZCBiYXNlX25ldygpIGZhaWx1cmUiKTsKKworCWlmIChjb25maWdfc3Rh dHMpIHsKKwkJYmFzZV9zdGF0c19nZXQodHNkbiwgYmFzZSwgJmFsbG9jYXRlZDAsICZyZXNpZGVu dCwgJm1hcHBlZCwKKwkJICAgICZuX3RocCk7CisJCWV4cGVjdF96dV9nZShhbGxvY2F0ZWQwLCBz aXplb2YoYmFzZV90KSwKKwkJICAgICJCYXNlIGhlYWRlciBzaG91bGQgY291bnQgYXMgYWxsb2Nh dGVkIik7CisJCWlmIChvcHRfbWV0YWRhdGFfdGhwID09IG1ldGFkYXRhX3RocF9hbHdheXMpIHsK KwkJCWV4cGVjdF96dV9ndChuX3RocCwgMCwKKwkJCSAgICAiQmFzZSBzaG91bGQgaGF2ZSAxIFRI UCBhdCBsZWFzdC4iKTsKKwkJfQorCX0KKworCWV4cGVjdF9wdHJfbm90X251bGwoYmFzZV9hbGxv Yyh0c2RuLCBiYXNlLCA0MiwgMSksCisJICAgICJVbmV4cGVjdGVkIGJhc2VfYWxsb2MoKSBmYWls dXJlIik7CisKKwlpZiAoY29uZmlnX3N0YXRzKSB7CisJCWJhc2Vfc3RhdHNfZ2V0KHRzZG4sIGJh c2UsICZhbGxvY2F0ZWQxLCAmcmVzaWRlbnQsICZtYXBwZWQsCisJCSAgICAmbl90aHApOworCQll eHBlY3RfenVfZ2UoYWxsb2NhdGVkMSAtIGFsbG9jYXRlZDAsIDQyLAorCQkgICAgIkF0IGxlYXN0 IDQyIGJ5dGVzIHdlcmUgYWxsb2NhdGVkIGJ5IGJhc2VfYWxsb2MoKSIpOworCX0KKworCWJhc2Vf ZGVsZXRlKHRzZG4sIGJhc2UpOworCisJbWVtY3B5KCZob29rcywgJmhvb2tzX29yaWcsIHNpemVv ZihleHRlbnRfaG9va3NfdCkpOworfQorVEVTVF9FTkQKKworVEVTVF9CRUdJTih0ZXN0X2Jhc2Vf aG9va3Nfbm90X251bGwpIHsKKwlleHRlbnRfaG9va3NfdCBob29rc19vcmlnOworCWJhc2VfdCAq YmFzZTsKKwl2b2lkICpwLCAqcSwgKnIsICpyX2V4cDsKKworCWV4dGVudF9ob29rc19wcmVwKCk7 CisJdHJ5X2RhbGxvYyA9IGZhbHNlOworCXRyeV9kZXN0cm95ID0gdHJ1ZTsKKwl0cnlfZGVjb21t aXQgPSBmYWxzZTsKKwl0cnlfcHVyZ2VfbGF6eSA9IGZhbHNlOworCXRyeV9wdXJnZV9mb3JjZWQg PSBmYWxzZTsKKwltZW1jcHkoJmhvb2tzX29yaWcsICZob29rcywgc2l6ZW9mKGV4dGVudF9ob29r c190KSk7CisJbWVtY3B5KCZob29rcywgJmhvb2tzX25vdF9udWxsLCBzaXplb2YoZXh0ZW50X2hv b2tzX3QpKTsKKworCXRzZG5fdCAqdHNkbiA9IHRzZF90c2RuKHRzZF9mZXRjaCgpKTsKKwlkaWRf YWxsb2MgPSBmYWxzZTsKKwliYXNlID0gYmFzZV9uZXcodHNkbiwgMCwgJmhvb2tzLCAvKiBtZXRh ZGF0YV91c2VfaG9va3MgKi8gdHJ1ZSk7CisJZXhwZWN0X3B0cl9ub3RfbnVsbChiYXNlLCAiVW5l eHBlY3RlZCBiYXNlX25ldygpIGZhaWx1cmUiKTsKKwlleHBlY3RfdHJ1ZShkaWRfYWxsb2MsICJF eHBlY3RlZCBhbGxvYyIpOworCisJLyoKKwkgKiBDaGVjayBmb3IgdGlnaHQgcGFja2luZyBhdCBz cGVjaWZpZWQgYWxpZ25tZW50IHVuZGVyIHNpbXBsZQorCSAqIGNvbmRpdGlvbnMuCisJICovCisJ eworCQljb25zdCBzaXplX3QgYWxpZ25tZW50c1tdID0geworCQkJMSwKKwkJCVFVQU5UVU0sCisJ CQlRVUFOVFVNIDw8IDEsCisJCQlDQUNIRUxJTkUsCisJCQlDQUNIRUxJTkUgPDwgMSwKKwkJfTsK KwkJdW5zaWduZWQgaTsKKworCQlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGFsaWdubWVudHMpIC8g c2l6ZW9mKHNpemVfdCk7IGkrKykgeworCQkJc2l6ZV90IGFsaWdubWVudCA9IGFsaWdubWVudHNb aV07CisJCQlzaXplX3QgYWxpZ25fY2VpbCA9IEFMSUdOTUVOVF9DRUlMSU5HKGFsaWdubWVudCwK KwkJCSAgICBRVUFOVFVNKTsKKwkJCXAgPSBiYXNlX2FsbG9jKHRzZG4sIGJhc2UsIDEsIGFsaWdu bWVudCk7CisJCQlleHBlY3RfcHRyX25vdF9udWxsKHAsCisJCQkgICAgIlVuZXhwZWN0ZWQgYmFz ZV9hbGxvYygpIGZhaWx1cmUiKTsKKwkJCWV4cGVjdF9wdHJfZXEocCwKKwkJCSAgICAodm9pZCAq KShBTElHTk1FTlRfQ0VJTElORygodWludHB0cl90KXAsCisJCQkgICAgYWxpZ25tZW50KSksICJF eHBlY3RlZCBxdWFudHVtIGFsaWdubWVudCIpOworCQkJcSA9IGJhc2VfYWxsb2ModHNkbiwgYmFz ZSwgYWxpZ25tZW50LCBhbGlnbm1lbnQpOworCQkJZXhwZWN0X3B0cl9ub3RfbnVsbChxLAorCQkJ ICAgICJVbmV4cGVjdGVkIGJhc2VfYWxsb2MoKSBmYWlsdXJlIik7CisJCQlleHBlY3RfcHRyX2Vx KCh2b2lkICopKCh1aW50cHRyX3QpcCArIGFsaWduX2NlaWwpLCBxLAorCQkJICAgICJNaW5pbWFs IGFsbG9jYXRpb24gc2hvdWxkIHRha2UgdXAgJXp1IGJ5dGVzIiwKKwkJCSAgICBhbGlnbl9jZWls KTsKKwkJCXIgPSBiYXNlX2FsbG9jKHRzZG4sIGJhc2UsIDEsIGFsaWdubWVudCk7CisJCQlleHBl Y3RfcHRyX25vdF9udWxsKHIsCisJCQkgICAgIlVuZXhwZWN0ZWQgYmFzZV9hbGxvYygpIGZhaWx1 cmUiKTsKKwkJCWV4cGVjdF9wdHJfZXEoKHZvaWQgKikoKHVpbnRwdHJfdClxICsgYWxpZ25fY2Vp bCksIHIsCisJCQkgICAgIk1pbmltYWwgYWxsb2NhdGlvbiBzaG91bGQgdGFrZSB1cCAlenUgYnl0 ZXMiLAorCQkJICAgIGFsaWduX2NlaWwpOworCQl9CisJfQorCisJLyoKKwkgKiBBbGxvY2F0ZSBh biBvYmplY3QgdGhhdCBjYW5ub3QgZml0IGluIHRoZSBmaXJzdCBibG9jaywgdGhlbiB2ZXJpZnkK KwkgKiB0aGF0IHRoZSBmaXJzdCBibG9jaydzIHJlbWFpbmluZyBzcGFjZSBpcyBjb25zaWRlcmVk IGZvciBzdWJzZXF1ZW50CisJICogYWxsb2NhdGlvbi4KKwkgKi8KKwlleHBlY3RfenVfZ2UoZWRh dGFfYnNpemVfZ2V0KCZiYXNlLT5ibG9ja3MtPmVkYXRhKSwgUVVBTlRVTSwKKwkgICAgIlJlbWFp bmRlciBpbnN1ZmZpY2llbnQgZm9yIHRlc3QiKTsKKwkvKiBVc2UgdXAgYWxsIGJ1dCBvbmUgcXVh bnR1bSBvZiBibG9jay4gKi8KKwl3aGlsZSAoZWRhdGFfYnNpemVfZ2V0KCZiYXNlLT5ibG9ja3Mt PmVkYXRhKSA+IFFVQU5UVU0pIHsKKwkJcCA9IGJhc2VfYWxsb2ModHNkbiwgYmFzZSwgUVVBTlRV TSwgUVVBTlRVTSk7CisJCWV4cGVjdF9wdHJfbm90X251bGwocCwgIlVuZXhwZWN0ZWQgYmFzZV9h bGxvYygpIGZhaWx1cmUiKTsKKwl9CisJcl9leHAgPSBlZGF0YV9hZGRyX2dldCgmYmFzZS0+Ymxv Y2tzLT5lZGF0YSk7CisJZXhwZWN0X3p1X2VxKGJhc2UtPmV4dGVudF9zbl9uZXh0LCAxLCAiT25l IGV4dGFudCBibG9jayBleHBlY3RlZCIpOworCXEgPSBiYXNlX2FsbG9jKHRzZG4sIGJhc2UsIFFV QU5UVU0gKyAxLCBRVUFOVFVNKTsKKwlleHBlY3RfcHRyX25vdF9udWxsKHEsICJVbmV4cGVjdGVk IGJhc2VfYWxsb2MoKSBmYWlsdXJlIik7CisJZXhwZWN0X3B0cl9uZShxLCByX2V4cCwgIkV4cGVj dGVkIGFsbG9jYXRpb24gZnJvbSBuZXcgYmxvY2siKTsKKwlleHBlY3RfenVfZXEoYmFzZS0+ZXh0 ZW50X3NuX25leHQsIDIsICJUd28gZXh0YW50IGJsb2NrcyBleHBlY3RlZCIpOworCXIgPSBiYXNl X2FsbG9jKHRzZG4sIGJhc2UsIFFVQU5UVU0sIFFVQU5UVU0pOworCWV4cGVjdF9wdHJfbm90X251 bGwociwgIlVuZXhwZWN0ZWQgYmFzZV9hbGxvYygpIGZhaWx1cmUiKTsKKwlleHBlY3RfcHRyX2Vx KHIsIHJfZXhwLCAiRXhwZWN0ZWQgYWxsb2NhdGlvbiBmcm9tIGZpcnN0IGJsb2NrIik7CisJZXhw ZWN0X3p1X2VxKGJhc2UtPmV4dGVudF9zbl9uZXh0LCAyLCAiVHdvIGV4dGFudCBibG9ja3MgZXhw ZWN0ZWQiKTsKKworCS8qCisJICogQ2hlY2sgZm9yIHByb3BlciBhbGlnbm1lbnQgc3VwcG9ydCB3 aGVuIG5vcm1hbCBibG9ja3MgYXJlIHRvbyBzbWFsbC4KKwkgKi8KKwl7CisJCWNvbnN0IHNpemVf dCBhbGlnbm1lbnRzW10gPSB7CisJCQlIVUdFUEFHRSwKKwkJCUhVR0VQQUdFIDw8IDEKKwkJfTsK KwkJdW5zaWduZWQgaTsKKworCQlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGFsaWdubWVudHMpIC8g c2l6ZW9mKHNpemVfdCk7IGkrKykgeworCQkJc2l6ZV90IGFsaWdubWVudCA9IGFsaWdubWVudHNb aV07CisJCQlwID0gYmFzZV9hbGxvYyh0c2RuLCBiYXNlLCBRVUFOVFVNLCBhbGlnbm1lbnQpOwor CQkJZXhwZWN0X3B0cl9ub3RfbnVsbChwLAorCQkJICAgICJVbmV4cGVjdGVkIGJhc2VfYWxsb2Mo KSBmYWlsdXJlIik7CisJCQlleHBlY3RfcHRyX2VxKHAsCisJCQkgICAgKHZvaWQgKikoQUxJR05N RU5UX0NFSUxJTkcoKHVpbnRwdHJfdClwLAorCQkJICAgIGFsaWdubWVudCkpLCAiRXhwZWN0ZWQg JXp1LWJ5dGUgYWxpZ25tZW50IiwKKwkJCSAgICBhbGlnbm1lbnQpOworCQl9CisJfQorCisJY2Fs bGVkX2RhbGxvYyA9IGNhbGxlZF9kZXN0cm95ID0gY2FsbGVkX2RlY29tbWl0ID0gY2FsbGVkX3B1 cmdlX2xhenkgPQorCSAgICBjYWxsZWRfcHVyZ2VfZm9yY2VkID0gZmFsc2U7CisJYmFzZV9kZWxl dGUodHNkbiwgYmFzZSk7CisJZXhwZWN0X3RydWUoY2FsbGVkX2RhbGxvYywgIkV4cGVjdGVkIGRh bGxvYyBjYWxsIik7CisJZXhwZWN0X3RydWUoIWNhbGxlZF9kZXN0cm95LCAiVW5leHBlY3RlZCBk ZXN0cm95IGNhbGwiKTsKKwlleHBlY3RfdHJ1ZShjYWxsZWRfZGVjb21taXQsICJFeHBlY3RlZCBk ZWNvbW1pdCBjYWxsIik7CisJZXhwZWN0X3RydWUoY2FsbGVkX3B1cmdlX2xhenksICJFeHBlY3Rl ZCBwdXJnZV9sYXp5IGNhbGwiKTsKKwlleHBlY3RfdHJ1ZShjYWxsZWRfcHVyZ2VfZm9yY2VkLCAi RXhwZWN0ZWQgcHVyZ2VfZm9yY2VkIGNhbGwiKTsKKworCXRyeV9kYWxsb2MgPSB0cnVlOworCXRy eV9kZXN0cm95ID0gdHJ1ZTsKKwl0cnlfZGVjb21taXQgPSB0cnVlOworCXRyeV9wdXJnZV9sYXp5 ID0gdHJ1ZTsKKwl0cnlfcHVyZ2VfZm9yY2VkID0gdHJ1ZTsKKwltZW1jcHkoJmhvb2tzLCAmaG9v a3Nfb3JpZywgc2l6ZW9mKGV4dGVudF9ob29rc190KSk7Cit9CitURVNUX0VORAorCitURVNUX0JF R0lOKHRlc3RfYmFzZV9laG9va3NfZ2V0X2Zvcl9tZXRhZGF0YV9kZWZhdWx0X2hvb2spIHsKKwll eHRlbnRfaG9va3NfcHJlcCgpOworCW1lbWNweSgmaG9va3MsICZob29rc19ub3RfbnVsbCwgc2l6 ZW9mKGV4dGVudF9ob29rc190KSk7CisJYmFzZV90ICpiYXNlOworCXRzZG5fdCAqdHNkbiA9IHRz ZF90c2RuKHRzZF9mZXRjaCgpKTsKKwliYXNlID0gYmFzZV9uZXcodHNkbiwgMCwgJmhvb2tzLCAv KiBtZXRhZGF0YV91c2VfaG9va3MgKi8gZmFsc2UpOworCWVob29rc190ICplaG9va3MgPSBiYXNl X2Vob29rc19nZXRfZm9yX21ldGFkYXRhKGJhc2UpOworCWV4cGVjdF90cnVlKGVob29rc19hcmVf ZGVmYXVsdChlaG9va3MpLAorCQkiRXhwZWN0ZWQgZGVmYXVsdCBleHRlbnQgaG9vayBmdW5jdGlv bnMgcG9pbnRlciIpOworCWJhc2VfZGVsZXRlKHRzZG4sIGJhc2UpOworfQorVEVTVF9FTkQKKwor CitURVNUX0JFR0lOKHRlc3RfYmFzZV9laG9va3NfZ2V0X2Zvcl9tZXRhZGF0YV9jdXN0b21faG9v aykgeworCWV4dGVudF9ob29rc19wcmVwKCk7CisJbWVtY3B5KCZob29rcywgJmhvb2tzX25vdF9u dWxsLCBzaXplb2YoZXh0ZW50X2hvb2tzX3QpKTsKKwliYXNlX3QgKmJhc2U7CisJdHNkbl90ICp0 c2RuID0gdHNkX3RzZG4odHNkX2ZldGNoKCkpOworCWJhc2UgPSBiYXNlX25ldyh0c2RuLCAwLCAm aG9va3MsIC8qIG1ldGFkYXRhX3VzZV9ob29rcyAqLyB0cnVlKTsKKwllaG9va3NfdCAqZWhvb2tz ID0gYmFzZV9laG9va3NfZ2V0X2Zvcl9tZXRhZGF0YShiYXNlKTsKKwlleHBlY3RfcHRyX2VxKCZo b29rcywgZWhvb2tzX2dldF9leHRlbnRfaG9va3NfcHRyKGVob29rcyksCisJCSJFeHBlY3RlZCB1 c2VyLXNwZWNpZmllZCBleHRlbmQgaG9vayBmdW5jdGlvbnMgcG9pbnRlciIpOworCWJhc2VfZGVs ZXRlKHRzZG4sIGJhc2UpOworfQorVEVTVF9FTkQKKworaW50CittYWluKHZvaWQpIHsKKwlyZXR1 cm4gdGVzdCgKKwkgICAgdGVzdF9iYXNlX2hvb2tzX2RlZmF1bHQsCisJICAgIHRlc3RfYmFzZV9o b29rc19udWxsLAorCSAgICB0ZXN0X2Jhc2VfaG9va3Nfbm90X251bGwsCisgICAgICAgICAgICB0 ZXN0X2Jhc2VfZWhvb2tzX2dldF9mb3JfbWV0YWRhdGFfZGVmYXVsdF9ob29rLAorICAgICAgICAg ICAgdGVzdF9iYXNlX2Vob29rc19nZXRfZm9yX21ldGFkYXRhX2N1c3RvbV9ob29rKTsKK30KCmRp ZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3Vu aXQvYmF0Y2hfYWxsb2MuYyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4w L3Rlc3QvdW5pdC9iYXRjaF9hbGxvYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAuLjkwMWM1MmIKLS0tIC9kZXYvbnVsbAorKysgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9q ZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvYmF0Y2hfYWxsb2MuYwpAQCAtMCwwICsxLDE4OSBAQAor I2luY2x1ZGUgInRlc3QvamVtYWxsb2NfdGVzdC5oIgorCisjZGVmaW5lIEJBVENIX01BWCAoKDFV IDw8IDE2KSArIDEwMjQpCitzdGF0aWMgdm9pZCAqZ2xvYmFsX3B0cnNbQkFUQ0hfTUFYXTsKKwor I2RlZmluZSBQQUdFX0FMSUdORUQocHRyKSAoKCh1aW50cHRyX3QpcHRyICYgUEFHRV9NQVNLKSA9 PSAwKQorCitzdGF0aWMgdm9pZAordmVyaWZ5X2JhdGNoX2Jhc2ljKHRzZF90ICp0c2QsIHZvaWQg KipwdHJzLCBzaXplX3QgYmF0Y2gsIHNpemVfdCB1c2l6ZSwKKyAgICBib29sIHplcm8pIHsKKwlm b3IgKHNpemVfdCBpID0gMDsgaSA8IGJhdGNoOyArK2kpIHsKKwkJdm9pZCAqcCA9IHB0cnNbaV07 CisJCWV4cGVjdF96dV9lcShpc2FsbG9jKHRzZF90c2RuKHRzZCksIHApLCB1c2l6ZSwgIiIpOwor CQlpZiAoemVybykgeworCQkJZm9yIChzaXplX3QgayA9IDA7IGsgPCB1c2l6ZTsgKytrKSB7CisJ CQkJZXhwZWN0X3RydWUoKigodW5zaWduZWQgY2hhciAqKXAgKyBrKSA9PSAwLCAiIik7CisJCQl9 CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkCit2ZXJpZnlfYmF0Y2hfbG9jYWxpdHkodHNkX3Qg KnRzZCwgdm9pZCAqKnB0cnMsIHNpemVfdCBiYXRjaCwgc2l6ZV90IHVzaXplLAorICAgIGFyZW5h X3QgKmFyZW5hLCB1bnNpZ25lZCBucmVncykgeworCWlmIChjb25maWdfcHJvZiAmJiBvcHRfcHJv ZikgeworCQkvKgorCQkgKiBDaGVja2luZyBiYXRjaCBsb2NhbGl0eSB3aGVuIHByb2YgaXMgb24g aXMgZmVhc2libGUgYnV0CisJCSAqIGNvbXBsaWNhdGVkLCB3aGlsZSBjaGVja2luZyB0aGUgbm9u LXByb2YgY2FzZSBzdWZmaWNlcyBmb3IKKwkJICogdW5pdC10ZXN0IHB1cnBvc2UuCisJCSAqLwor CQlyZXR1cm47CisJfQorCWZvciAoc2l6ZV90IGkgPSAwLCBqID0gMDsgaSA8IGJhdGNoOyArK2ks ICsraikgeworCQlpZiAoaiA9PSBucmVncykgeworCQkJaiA9IDA7CisJCX0KKwkJaWYgKGogPT0g MCAmJiBiYXRjaCAtIGkgPCBucmVncykgeworCQkJYnJlYWs7CisJCX0KKwkJdm9pZCAqcCA9IHB0 cnNbaV07CisJCWV4cGVjdF9wdHJfZXEoaWFhbGxvYyh0c2RfdHNkbih0c2QpLCBwKSwgYXJlbmEs ICIiKTsKKwkJaWYgKGogPT0gMCkgeworCQkJZXhwZWN0X3RydWUoUEFHRV9BTElHTkVEKHApLCAi Iik7CisJCQljb250aW51ZTsKKwkJfQorCQlhc3NlcnQoaSA+IDApOworCQl2b2lkICpxID0gcHRy c1tpIC0gMV07CisJCWV4cGVjdF90cnVlKCh1aW50cHRyX3QpcCA+ICh1aW50cHRyX3QpcQorCQkg ICAgJiYgKHNpemVfdCkoKHVpbnRwdHJfdClwIC0gKHVpbnRwdHJfdClxKSA9PSB1c2l6ZSwgIiIp OworCX0KK30KKworc3RhdGljIHZvaWQKK3JlbGVhc2VfYmF0Y2godm9pZCAqKnB0cnMsIHNpemVf dCBiYXRjaCwgc2l6ZV90IHNpemUpIHsKKwlmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJhdGNoOyAr K2kpIHsKKwkJc2RhbGxvY3gocHRyc1tpXSwgc2l6ZSwgMCk7CisJfQorfQorCit0eXBlZGVmIHN0 cnVjdCBiYXRjaF9hbGxvY19wYWNrZXRfcyBiYXRjaF9hbGxvY19wYWNrZXRfdDsKK3N0cnVjdCBi YXRjaF9hbGxvY19wYWNrZXRfcyB7CisJdm9pZCAqKnB0cnM7CisJc2l6ZV90IG51bTsKKwlzaXpl X3Qgc2l6ZTsKKwlpbnQgZmxhZ3M7Cit9OworCitzdGF0aWMgc2l6ZV90CitiYXRjaF9hbGxvY193 cmFwcGVyKHZvaWQgKipwdHJzLCBzaXplX3QgbnVtLCBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzKSB7 CisJYmF0Y2hfYWxsb2NfcGFja2V0X3QgYmF0Y2hfYWxsb2NfcGFja2V0ID0ge3B0cnMsIG51bSwg c2l6ZSwgZmxhZ3N9OworCXNpemVfdCBmaWxsZWQ7CisJc2l6ZV90IGxlbiA9IHNpemVvZihzaXpl X3QpOworCWFzc2VydF9kX2VxKG1hbGxjdGwoImV4cGVyaW1lbnRhbC5iYXRjaF9hbGxvYyIsICZm aWxsZWQsICZsZW4sCisJICAgICZiYXRjaF9hbGxvY19wYWNrZXQsIHNpemVvZihiYXRjaF9hbGxv Y19wYWNrZXQpKSwgMCwgIiIpOworCXJldHVybiBmaWxsZWQ7Cit9CisKK3N0YXRpYyB2b2lkCit0 ZXN0X3dyYXBwZXIoc2l6ZV90IHNpemUsIHNpemVfdCBhbGlnbm1lbnQsIGJvb2wgemVybywgdW5z aWduZWQgYXJlbmFfZmxhZykgeworCXRzZF90ICp0c2QgPSB0c2RfZmV0Y2goKTsKKwlhc3NlcnQo dHNkICE9IE5VTEwpOworCWNvbnN0IHNpemVfdCB1c2l6ZSA9CisJICAgIChhbGlnbm1lbnQgIT0g MCA/IHN6X3NhMnUoc2l6ZSwgYWxpZ25tZW50KSA6IHN6X3MydShzaXplKSk7CisJY29uc3Qgc3pp bmRfdCBpbmQgPSBzel9zaXplMmluZGV4KHVzaXplKTsKKwljb25zdCBiaW5faW5mb190ICpiaW5f aW5mbyA9ICZiaW5faW5mb3NbaW5kXTsKKwljb25zdCB1bnNpZ25lZCBucmVncyA9IGJpbl9pbmZv LT5ucmVnczsKKwlhc3NlcnQobnJlZ3MgPiAwKTsKKwlhcmVuYV90ICphcmVuYTsKKwlpZiAoYXJl bmFfZmxhZyAhPSAwKSB7CisJCWFyZW5hID0gYXJlbmFfZ2V0KHRzZF90c2RuKHRzZCksIE1BTExP Q1hfQVJFTkFfR0VUKGFyZW5hX2ZsYWcpLAorCQkgICAgZmFsc2UpOworCX0gZWxzZSB7CisJCWFy ZW5hID0gYXJlbmFfY2hvb3NlKHRzZCwgTlVMTCk7CisJfQorCWFzc2VydChhcmVuYSAhPSBOVUxM KTsKKwlpbnQgZmxhZ3MgPSBhcmVuYV9mbGFnOworCWlmIChhbGlnbm1lbnQgIT0gMCkgeworCQlm bGFncyB8PSBNQUxMT0NYX0FMSUdOKGFsaWdubWVudCk7CisJfQorCWlmICh6ZXJvKSB7CisJCWZs YWdzIHw9IE1BTExPQ1hfWkVSTzsKKwl9CisKKwkvKgorCSAqIEFsbG9jYXRlIGZvciB0aGUgcHVy cG9zZSBvZiBib290c3RyYXBwaW5nIGFyZW5hX3RkYXRhLCBzbyB0aGF0IHRoZQorCSAqIGNoYW5n ZSBpbiBiaW4gc3RhdHMgd29uJ3QgY29udGFtaW5hdGUgdGhlIHN0YXRzIHRvIGJlIHZlcmlmaWVk IGJlbG93LgorCSAqLworCXZvaWQgKnAgPSBtYWxsb2N4KHNpemUsIGZsYWdzIHwgTUFMTE9DWF9U Q0FDSEVfTk9ORSk7CisKKwlmb3IgKHNpemVfdCBpID0gMDsgaSA8IDQ7ICsraSkgeworCQlzaXpl X3QgYmFzZSA9IDA7CisJCWlmIChpID09IDEpIHsKKwkJCWJhc2UgPSBucmVnczsKKwkJfSBlbHNl IGlmIChpID09IDIpIHsKKwkJCWJhc2UgPSBucmVncyAqIDI7CisJCX0gZWxzZSBpZiAoaSA9PSAz KSB7CisJCQliYXNlID0gKDEgPDwgMTYpOworCQl9CisJCWZvciAoaW50IGogPSAtMTsgaiA8PSAx OyArK2opIHsKKwkJCWlmIChiYXNlID09IDAgJiYgaiA9PSAtMSkgeworCQkJCWNvbnRpbnVlOwor CQkJfQorCQkJc2l6ZV90IGJhdGNoID0gYmFzZSArIChzaXplX3QpajsKKwkJCWFzc2VydChiYXRj aCA8IEJBVENIX01BWCk7CisJCQlzaXplX3QgZmlsbGVkID0gYmF0Y2hfYWxsb2Nfd3JhcHBlcihn bG9iYWxfcHRycywgYmF0Y2gsCisJCQkgICAgc2l6ZSwgZmxhZ3MpOworCQkJYXNzZXJ0X3p1X2Vx KGZpbGxlZCwgYmF0Y2gsICIiKTsKKwkJCXZlcmlmeV9iYXRjaF9iYXNpYyh0c2QsIGdsb2JhbF9w dHJzLCBiYXRjaCwgdXNpemUsCisJCQkgICAgemVybyk7CisJCQl2ZXJpZnlfYmF0Y2hfbG9jYWxp dHkodHNkLCBnbG9iYWxfcHRycywgYmF0Y2gsIHVzaXplLAorCQkJICAgIGFyZW5hLCBucmVncyk7 CisJCQlyZWxlYXNlX2JhdGNoKGdsb2JhbF9wdHJzLCBiYXRjaCwgdXNpemUpOworCQl9CisJfQor CisJZnJlZShwKTsKK30KKworVEVTVF9CRUdJTih0ZXN0X2JhdGNoX2FsbG9jKSB7CisJdGVzdF93 cmFwcGVyKDExLCAwLCBmYWxzZSwgMCk7Cit9CitURVNUX0VORAorCitURVNUX0JFR0lOKHRlc3Rf YmF0Y2hfYWxsb2NfemVybykgeworCXRlc3Rfd3JhcHBlcigxMSwgMCwgdHJ1ZSwgMCk7Cit9CitU RVNUX0VORAorCitURVNUX0JFR0lOKHRlc3RfYmF0Y2hfYWxsb2NfYWxpZ25lZCkgeworCXRlc3Rf d3JhcHBlcig3LCAxNiwgZmFsc2UsIDApOworfQorVEVTVF9FTkQKKworVEVTVF9CRUdJTih0ZXN0 X2JhdGNoX2FsbG9jX21hbnVhbF9hcmVuYSkgeworCXVuc2lnbmVkIGFyZW5hX2luZDsKKwlzaXpl X3QgbGVuX3Vuc2lnbmVkID0gc2l6ZW9mKHVuc2lnbmVkKTsKKwlhc3NlcnRfZF9lcShtYWxsY3Rs KCJhcmVuYXMuY3JlYXRlIiwgJmFyZW5hX2luZCwgJmxlbl91bnNpZ25lZCwgTlVMTCwKKwkgICAg MCksIDAsICIiKTsKKwl0ZXN0X3dyYXBwZXIoMTEsIDAsIGZhbHNlLCBNQUxMT0NYX0FSRU5BKGFy ZW5hX2luZCkpOworfQorVEVTVF9FTkQKKworVEVTVF9CRUdJTih0ZXN0X2JhdGNoX2FsbG9jX2xh cmdlKSB7CisJc2l6ZV90IHNpemUgPSBTQ19MQVJHRV9NSU5DTEFTUzsKKwlmb3IgKHNpemVfdCBi YXRjaCA9IDA7IGJhdGNoIDwgNDsgKytiYXRjaCkgeworCQlhc3NlcnQoYmF0Y2ggPCBCQVRDSF9N QVgpOworCQlzaXplX3QgZmlsbGVkID0gYmF0Y2hfYWxsb2MoZ2xvYmFsX3B0cnMsIGJhdGNoLCBz aXplLCAwKTsKKwkJYXNzZXJ0X3p1X2VxKGZpbGxlZCwgYmF0Y2gsICIiKTsKKwkJcmVsZWFzZV9i YXRjaChnbG9iYWxfcHRycywgYmF0Y2gsIHNpemUpOworCX0KKwlzaXplID0gdGNhY2hlX21heGNs YXNzICsgMTsKKwlmb3IgKHNpemVfdCBiYXRjaCA9IDA7IGJhdGNoIDwgNDsgKytiYXRjaCkgewor CQlhc3NlcnQoYmF0Y2ggPCBCQVRDSF9NQVgpOworCQlzaXplX3QgZmlsbGVkID0gYmF0Y2hfYWxs b2MoZ2xvYmFsX3B0cnMsIGJhdGNoLCBzaXplLCAwKTsKKwkJYXNzZXJ0X3p1X2VxKGZpbGxlZCwg YmF0Y2gsICIiKTsKKwkJcmVsZWFzZV9iYXRjaChnbG9iYWxfcHRycywgYmF0Y2gsIHNpemUpOwor CX0KK30KK1RFU1RfRU5ECisKK2ludAorbWFpbih2b2lkKSB7CisJcmV0dXJuIHRlc3QoCisJICAg IHRlc3RfYmF0Y2hfYWxsb2MsCisJICAgIHRlc3RfYmF0Y2hfYWxsb2NfemVybywKKwkgICAgdGVz dF9iYXRjaF9hbGxvY19hbGlnbmVkLAorCSAgICB0ZXN0X2JhdGNoX2FsbG9jX21hbnVhbF9hcmVu YSwKKwkgICAgdGVzdF9iYXRjaF9hbGxvY19sYXJnZSk7Cit9CgpkaWZmIC0tZ2l0IGEvMzg5LWRz LWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L2JhdGNoX2FsbG9jLnNo IGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L2JhdGNo X2FsbG9jLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkODEwMTAKLS0t IC9kZXYvbnVsbAorKysgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90 ZXN0L3VuaXQvYmF0Y2hfYWxsb2Muc2gKQEAgLTAsMCArMSwzIEBACisjIS9iaW4vc2gKKworZXhw b3J0IE1BTExPQ19DT05GPSJ0Y2FjaGVfZ2NfaW5jcl9ieXRlczoyMTQ3NDgzNjQ4IgoKZGlmZiAt LWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9i YXRjaF9hbGxvY19wcm9mLmMgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMu MC90ZXN0L3VuaXQvYmF0Y2hfYWxsb2NfcHJvZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAuLmVmNjQ0NTgKLS0tIC9kZXYvbnVsbAorKysgYi8zODktZHMtYmFzZS0zLjMuMC1i dWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvYmF0Y2hfYWxsb2NfcHJvZi5jCkBAIC0wLDAg KzEgQEAKKyNpbmNsdWRlICJiYXRjaF9hbGxvYy5jIgoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNl LTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9iYXRjaF9hbGxvY19wcm9mLnNo IGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L2JhdGNo X2FsbG9jX3Byb2Yuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTI2OTdh NgotLS0gL2Rldi9udWxsCisrKyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUu My4wL3Rlc3QvdW5pdC9iYXRjaF9hbGxvY19wcm9mLnNoCkBAIC0wLDAgKzEsMyBAQAorIyEvYmlu L3NoCisKK2V4cG9ydCBNQUxMT0NfQ09ORj0icHJvZjp0cnVlLGxnX3Byb2Zfc2FtcGxlOjE0IgoK ZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3Qv dW5pdC9iaW5zaGFyZC5jIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAv dGVzdC91bml0L2JpbnNoYXJkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u MDQwZWE1NAotLS0gL2Rldi9udWxsCisrKyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFs bG9jLTUuMy4wL3Rlc3QvdW5pdC9iaW5zaGFyZC5jCkBAIC0wLDAgKzEsMTU0IEBACisjaW5jbHVk ZSAidGVzdC9qZW1hbGxvY190ZXN0LmgiCisKKy8qIENvbmZpZyAtLSAibmFyZW5hczoxLGJpbl9z aGFyZHM6MS0xNjA6MTZ8MTI5LTUxMjo0fDI1Ni0yNTY6OCIgKi8KKworI2RlZmluZSBOVEhSRUFE UyAxNgorI2RlZmluZSBSRU1PVEVfTkFMTE9DIDI1NgorCitzdGF0aWMgdm9pZCAqCit0aGRfcHJv ZHVjZXIodm9pZCAqdmFyZykgeworCXZvaWQgKiptZW0gPSB2YXJnOworCXVuc2lnbmVkIGFyZW5h LCBpOworCXNpemVfdCBzejsKKworCXN6ID0gc2l6ZW9mKGFyZW5hKTsKKwkvKiBSZW1vdGUgYXJl bmEuICovCisJZXhwZWN0X2RfZXEobWFsbGN0bCgiYXJlbmFzLmNyZWF0ZSIsICh2b2lkICopJmFy ZW5hLCAmc3osIE5VTEwsIDApLCAwLAorCSAgICAiVW5leHBlY3RlZCBtYWxsY3RsKCkgZmFpbHVy ZSIpOworCWZvciAoaSA9IDA7IGkgPCBSRU1PVEVfTkFMTE9DIC8gMjsgaSsrKSB7CisJCW1lbVtp XSA9IG1hbGxvY3goMSwgTUFMTE9DWF9UQ0FDSEVfTk9ORSB8IE1BTExPQ1hfQVJFTkEoYXJlbmEp KTsKKwl9CisKKwkvKiBSZW1vdGUgYmluLiAqLworCWZvciAoOyBpIDwgUkVNT1RFX05BTExPQzsg aSsrKSB7CisJCW1lbVtpXSA9IG1hbGxvY3goMSwgTUFMTE9DWF9UQ0FDSEVfTk9ORSB8IE1BTExP Q1hfQVJFTkEoMCkpOworCX0KKworCXJldHVybiBOVUxMOworfQorCitURVNUX0JFR0lOKHRlc3Rf cHJvZHVjZXJfY29uc3VtZXIpIHsKKwl0aGRfdCB0aGRzW05USFJFQURTXTsKKwl2b2lkICptZW1b TlRIUkVBRFNdW1JFTU9URV9OQUxMT0NdOworCXVuc2lnbmVkIGk7CisKKwkvKiBDcmVhdGUgcHJv ZHVjZXIgdGhyZWFkcyB0byBhbGxvY2F0ZS4gKi8KKwlmb3IgKGkgPSAwOyBpIDwgTlRIUkVBRFM7 IGkrKykgeworCQl0aGRfY3JlYXRlKCZ0aGRzW2ldLCB0aGRfcHJvZHVjZXIsIG1lbVtpXSk7CisJ fQorCWZvciAoaSA9IDA7IGkgPCBOVEhSRUFEUzsgaSsrKSB7CisJCXRoZF9qb2luKHRoZHNbaV0s IE5VTEwpOworCX0KKwkvKiBSZW1vdGUgZGVhbGxvY2F0aW9uIGJ5IHRoZSBjdXJyZW50IHRocmVh ZC4gKi8KKwlmb3IgKGkgPSAwOyBpIDwgTlRIUkVBRFM7IGkrKykgeworCQlmb3IgKHVuc2lnbmVk IGogPSAwOyBqIDwgUkVNT1RFX05BTExPQzsgaisrKSB7CisJCQlleHBlY3RfcHRyX25vdF9udWxs KG1lbVtpXVtqXSwKKwkJCSAgICAiVW5leHBlY3RlZCByZW1vdGUgYWxsb2NhdGlvbiBmYWlsdXJl Iik7CisJCQlkYWxsb2N4KG1lbVtpXVtqXSwgMCk7CisJCX0KKwl9Cit9CitURVNUX0VORAorCitz dGF0aWMgdm9pZCAqCit0aGRfc3RhcnQodm9pZCAqdmFyZykgeworCXZvaWQgKnB0ciwgKnB0cjI7 CisJZWRhdGFfdCAqZWRhdGE7CisJdW5zaWduZWQgc2hhcmQxLCBzaGFyZDI7CisKKwl0c2RuX3Qg KnRzZG4gPSB0c2RuX2ZldGNoKCk7CisJLyogVHJ5IHRyaWdnZXJpbmcgYWxsb2NhdGlvbnMgZnJv bSBzaGFyZGVkIGJpbnMuICovCisJZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDEwMjQ7IGkrKykg eworCQlwdHIgPSBtYWxsb2N4KDEsIE1BTExPQ1hfVENBQ0hFX05PTkUpOworCQlwdHIyID0gbWFs bG9jeCgxMjksIE1BTExPQ1hfVENBQ0hFX05PTkUpOworCisJCWVkYXRhID0gZW1hcF9lZGF0YV9s b29rdXAodHNkbiwgJmFyZW5hX2VtYXBfZ2xvYmFsLCBwdHIpOworCQlzaGFyZDEgPSBlZGF0YV9i aW5zaGFyZF9nZXQoZWRhdGEpOworCQlkYWxsb2N4KHB0ciwgMCk7CisJCWV4cGVjdF91X2x0KHNo YXJkMSwgMTYsICJVbmV4cGVjdGVkIGJpbiBzaGFyZCB1c2VkIik7CisKKwkJZWRhdGEgPSBlbWFw X2VkYXRhX2xvb2t1cCh0c2RuLCAmYXJlbmFfZW1hcF9nbG9iYWwsIHB0cjIpOworCQlzaGFyZDIg PSBlZGF0YV9iaW5zaGFyZF9nZXQoZWRhdGEpOworCQlkYWxsb2N4KHB0cjIsIDApOworCQlleHBl Y3RfdV9sdChzaGFyZDIsIDQsICJVbmV4cGVjdGVkIGJpbiBzaGFyZCB1c2VkIik7CisKKwkJaWYg KHNoYXJkMSA+IDAgfHwgc2hhcmQyID4gMCkgeworCQkJLyogVHJpZ2dlcmVkIHNoYXJkZWQgYmlu IHVzYWdlLiAqLworCQkJcmV0dXJuICh2b2lkICopKHVpbnRwdHJfdClzaGFyZDE7CisJCX0KKwl9 CisKKwlyZXR1cm4gTlVMTDsKK30KKworVEVTVF9CRUdJTih0ZXN0X2Jpbl9zaGFyZF9tdCkgewor CXRlc3Rfc2tpcF9pZihoYXZlX3BlcmNwdV9hcmVuYSAmJgorCSAgICBQRVJDUFVfQVJFTkFfRU5B QkxFRChvcHRfcGVyY3B1X2FyZW5hKSk7CisKKwl0aGRfdCB0aGRzW05USFJFQURTXTsKKwl1bnNp Z25lZCBpOworCWZvciAoaSA9IDA7IGkgPCBOVEhSRUFEUzsgaSsrKSB7CisJCXRoZF9jcmVhdGUo JnRoZHNbaV0sIHRoZF9zdGFydCwgTlVMTCk7CisJfQorCWJvb2wgc2hhcmRlZCA9IGZhbHNlOwor CWZvciAoaSA9IDA7IGkgPCBOVEhSRUFEUzsgaSsrKSB7CisJCXZvaWQgKnJldDsKKwkJdGhkX2pv aW4odGhkc1tpXSwgJnJldCk7CisJCWlmIChyZXQgIT0gTlVMTCkgeworCQkJc2hhcmRlZCA9IHRy dWU7CisJCX0KKwl9CisJZXhwZWN0X2JfZXEoc2hhcmRlZCwgdHJ1ZSwgIkRpZCBub3QgZmluZCBz aGFyZGVkIGJpbnMiKTsKK30KK1RFU1RfRU5ECisKK1RFU1RfQkVHSU4odGVzdF9iaW5fc2hhcmQp IHsKKwl1bnNpZ25lZCBuYmlucywgaTsKKwlzaXplX3QgbWliWzRdLCBtaWIyWzRdOworCXNpemVf dCBtaWJsZW4sIG1pYmxlbjIsIGxlbjsKKworCWxlbiA9IHNpemVvZihuYmlucyk7CisJZXhwZWN0 X2RfZXEobWFsbGN0bCgiYXJlbmFzLm5iaW5zIiwgKHZvaWQgKikmbmJpbnMsICZsZW4sIE5VTEws IDApLCAwLAorCSAgICAiVW5leHBlY3RlZCBtYWxsY3RsKCkgZmFpbHVyZSIpOworCisJbWlibGVu ID0gNDsKKwlleHBlY3RfZF9lcShtYWxsY3RsbmFtZXRvbWliKCJhcmVuYXMuYmluLjAubnNoYXJk cyIsIG1pYiwgJm1pYmxlbiksIDAsCisJICAgICJVbmV4cGVjdGVkIG1hbGxjdGxuYW1ldG9taWIo KSBmYWlsdXJlIik7CisJbWlibGVuMiA9IDQ7CisJZXhwZWN0X2RfZXEobWFsbGN0bG5hbWV0b21p YigiYXJlbmFzLmJpbi4wLnNpemUiLCBtaWIyLCAmbWlibGVuMiksIDAsCisJICAgICJVbmV4cGVj dGVkIG1hbGxjdGxuYW1ldG9taWIoKSBmYWlsdXJlIik7CisKKwlmb3IgKGkgPSAwOyBpIDwgbmJp bnM7IGkrKykgeworCQl1aW50MzJfdCBuc2hhcmRzOworCQlzaXplX3Qgc2l6ZSwgc3oxLCBzejI7 CisKKwkJbWliWzJdID0gaTsKKwkJc3oxID0gc2l6ZW9mKG5zaGFyZHMpOworCQlleHBlY3RfZF9l cShtYWxsY3RsYnltaWIobWliLCBtaWJsZW4sICh2b2lkICopJm5zaGFyZHMsICZzejEsCisJCSAg ICBOVUxMLCAwKSwgMCwgIlVuZXhwZWN0ZWQgbWFsbGN0bGJ5bWliKCkgZmFpbHVyZSIpOworCisJ CW1pYjJbMl0gPSBpOworCQlzejIgPSBzaXplb2Yoc2l6ZSk7CisJCWV4cGVjdF9kX2VxKG1hbGxj dGxieW1pYihtaWIyLCBtaWJsZW4yLCAodm9pZCAqKSZzaXplLCAmc3oyLAorCQkgICAgTlVMTCwg MCksIDAsICJVbmV4cGVjdGVkIG1hbGxjdGxieW1pYigpIGZhaWx1cmUiKTsKKworCQlpZiAoc2l6 ZSA+PSAxICYmIHNpemUgPD0gMTI4KSB7CisJCQlleHBlY3RfdV9lcShuc2hhcmRzLCAxNiwgIlVu ZXhwZWN0ZWQgbnNoYXJkcyIpOworCQl9IGVsc2UgaWYgKHNpemUgPT0gMjU2KSB7CisJCQlleHBl Y3RfdV9lcShuc2hhcmRzLCA4LCAiVW5leHBlY3RlZCBuc2hhcmRzIik7CisJCX0gZWxzZSBpZiAo c2l6ZSA+IDEyOCAmJiBzaXplIDw9IDUxMikgeworCQkJZXhwZWN0X3VfZXEobnNoYXJkcywgNCwg IlVuZXhwZWN0ZWQgbnNoYXJkcyIpOworCQl9IGVsc2UgeworCQkJZXhwZWN0X3VfZXEobnNoYXJk cywgMSwgIlVuZXhwZWN0ZWQgbnNoYXJkcyIpOworCQl9CisJfQorfQorVEVTVF9FTkQKKworaW50 CittYWluKHZvaWQpIHsKKwlyZXR1cm4gdGVzdF9ub19yZWVudHJhbmN5KAorCSAgICB0ZXN0X2Jp bl9zaGFyZCwKKwkgICAgdGVzdF9iaW5fc2hhcmRfbXQsCisJICAgIHRlc3RfcHJvZHVjZXJfY29u c3VtZXIpOworfQoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9j LTUuMy4wL3Rlc3QvdW5pdC9iaW5zaGFyZC5zaCBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2pl bWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9iaW5zaGFyZC5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwLi5jMWQ1OGM4Ci0tLSAvZGV2L251bGwKKysrIGIvMzg5LWRzLWJhc2UtMy4z LjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L2JpbnNoYXJkLnNoCkBAIC0wLDAgKzEs MyBAQAorIyEvYmluL3NoCisKK2V4cG9ydCBNQUxMT0NfQ09ORj0ibmFyZW5hczoxLGJpbl9zaGFy ZHM6MS0xNjA6MTZ8MTI5LTUxMjo0fDI1Ni0yNTY6OCIKCmRpZmYgLS1naXQgYS8zODktZHMtYmFz ZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvYml0X3V0aWwuYyBiLzM4OS1k cy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9iaXRfdXRpbC5jCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkMzFiMjEKLS0tIC9kZXYvbnVsbAor KysgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvYml0 X3V0aWwuYwpAQCAtMCwwICsxLDMwNyBAQAorI2luY2x1ZGUgInRlc3QvamVtYWxsb2NfdGVzdC5o IgorCisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvYml0X3V0aWwuaCIKKworI2RlZmluZSBU RVNUX1BPVzJfQ0VJTCh0LCBzdWYsIHByaSkgZG8gewkJCQlcCisJdW5zaWduZWQgaSwgcG93MjsJ CQkJCQlcCisJdCB4OwkJCQkJCQkJXAorCQkJCQkJCQkJXAorCWV4cGVjdF8jI3N1ZiMjX2VxKHBv dzJfY2VpbF8jI3N1ZigwKSwgMCwgIlVuZXhwZWN0ZWQgcmVzdWx0Iik7CVwKKwkJCQkJCQkJCVwK Kwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHQpICogODsgaSsrKSB7CQkJCVwKKwkJZXhwZWN0XyMj c3VmIyNfZXEocG93Ml9jZWlsXyMjc3VmKCgodCkxKSA8PCBpKSwgKCh0KTEpCVwKKwkJICAgIDw8 IGksICJVbmV4cGVjdGVkIHJlc3VsdCIpOwkJCQlcCisJfQkJCQkJCQkJXAorCQkJCQkJCQkJXAor CWZvciAoaSA9IDI7IGkgPCBzaXplb2YodCkgKiA4OyBpKyspIHsJCQkJXAorCQlleHBlY3RfIyNz dWYjI19lcShwb3cyX2NlaWxfIyNzdWYoKCgodCkxKSA8PCBpKSAtIDEpLAlcCisJCSAgICAoKHQp MSkgPDwgaSwgIlVuZXhwZWN0ZWQgcmVzdWx0Iik7CQkJXAorCX0JCQkJCQkJCVwKKwkJCQkJCQkJ CVwKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHQpICogOCAtIDE7IGkrKykgewkJCVwKKwkJZXhw ZWN0XyMjc3VmIyNfZXEocG93Ml9jZWlsXyMjc3VmKCgoKHQpMSkgPDwgaSkgKyAxKSwJXAorCQkg ICAgKCh0KTEpIDw8IChpKzEpLCAiVW5leHBlY3RlZCByZXN1bHQiKTsJCVwKKwl9CQkJCQkJCQlc CisJCQkJCQkJCQlcCisJZm9yIChwb3cyID0gMTsgcG93MiA8IDI1OyBwb3cyKyspIHsJCQkJXAor CQlmb3IgKHggPSAoKCh0KTEpIDw8IChwb3cyLTEpKSArIDE7IHggPD0gKCh0KTEpIDw8IHBvdzI7 CVwKKwkJICAgIHgrKykgewkJCQkJCVwKKwkJCWV4cGVjdF8jI3N1ZiMjX2VxKHBvdzJfY2VpbF8j I3N1Zih4KSwJCVwKKwkJCSAgICAoKHQpMSkgPDwgcG93MiwJCQkJXAorCQkJICAgICJVbmV4cGVj dGVkIHJlc3VsdCwgeD0lInByaSwgeCk7CQlcCisJCX0JCQkJCQkJXAorCX0JCQkJCQkJCVwKK30g d2hpbGUgKDApCisKK1RFU1RfQkVHSU4odGVzdF9wb3cyX2NlaWxfdTY0KSB7CisJVEVTVF9QT1cy X0NFSUwodWludDY0X3QsIHU2NCwgRk1UdTY0KTsKK30KK1RFU1RfRU5ECisKK1RFU1RfQkVHSU4o dGVzdF9wb3cyX2NlaWxfdTMyKSB7CisJVEVTVF9QT1cyX0NFSUwodWludDMyX3QsIHUzMiwgRk1U dTMyKTsKK30KK1RFU1RfRU5ECisKK1RFU1RfQkVHSU4odGVzdF9wb3cyX2NlaWxfenUpIHsKKwlU RVNUX1BPVzJfQ0VJTChzaXplX3QsIHp1LCAienUiKTsKK30KK1RFU1RfRU5ECisKK3ZvaWQKK2V4 cGVjdF9sZ19jZWlsX3JhbmdlKHNpemVfdCBpbnB1dCwgdW5zaWduZWQgYW5zd2VyKSB7CisJaWYg KGlucHV0ID09IDEpIHsKKwkJZXhwZWN0X3VfZXEoMCwgYW5zd2VyLCAiR290ICV1IGFzIGxnX2Nl aWwgb2YgMSIsIGFuc3dlcik7CisJCXJldHVybjsKKwl9CisJZXhwZWN0X3p1X2xlKGlucHV0LCAo WlUoMSkgPDwgYW5zd2VyKSwKKwkgICAgIkdvdCAldSBhcyBsZ19jZWlsIG9mICV6dSIsIGFuc3dl ciwgaW5wdXQpOworCWV4cGVjdF96dV9ndChpbnB1dCwgKFpVKDEpIDw8IChhbnN3ZXIgLSAxKSks CisJICAgICJHb3QgJXUgYXMgbGdfY2VpbCBvZiAlenUiLCBhbnN3ZXIsIGlucHV0KTsKK30KKwor dm9pZAorZXhwZWN0X2xnX2Zsb29yX3JhbmdlKHNpemVfdCBpbnB1dCwgdW5zaWduZWQgYW5zd2Vy KSB7CisJaWYgKGlucHV0ID09IDEpIHsKKwkJZXhwZWN0X3VfZXEoMCwgYW5zd2VyLCAiR290ICV1 IGFzIGxnX2Zsb29yIG9mIDEiLCBhbnN3ZXIpOworCQlyZXR1cm47CisJfQorCWV4cGVjdF96dV9n ZShpbnB1dCwgKFpVKDEpIDw8IGFuc3dlciksCisJICAgICJHb3QgJXUgYXMgbGdfZmxvb3Igb2Yg JXp1IiwgYW5zd2VyLCBpbnB1dCk7CisJZXhwZWN0X3p1X2x0KGlucHV0LCAoWlUoMSkgPDwgKGFu c3dlciArIDEpKSwKKwkgICAgIkdvdCAldSBhcyBsZ19mbG9vciBvZiAlenUiLCBhbnN3ZXIsIGlu cHV0KTsKK30KKworVEVTVF9CRUdJTih0ZXN0X2xnX2NlaWxfZmxvb3IpIHsKKwlmb3IgKHNpemVf dCBpID0gMTsgaSA8IDEwICogMTAwMCAqIDEwMDA7IGkrKykgeworCQlleHBlY3RfbGdfY2VpbF9y YW5nZShpLCBsZ19jZWlsKGkpKTsKKwkJZXhwZWN0X2xnX2NlaWxfcmFuZ2UoaSwgTEdfQ0VJTChp KSk7CisJCWV4cGVjdF9sZ19mbG9vcl9yYW5nZShpLCBsZ19mbG9vcihpKSk7CisJCWV4cGVjdF9s Z19mbG9vcl9yYW5nZShpLCBMR19GTE9PUihpKSk7CisJfQorCWZvciAoaW50IGkgPSAxMDsgaSA8 IDggKiAoMSA8PCBMR19TSVpFT0ZfUFRSKSAtIDU7IGkrKykgeworCQlmb3IgKHNpemVfdCBqID0g MDsgaiA8ICgxIDw8IDQpOyBqKyspIHsKKwkJCXNpemVfdCBudW0xID0gKChzaXplX3QpMSA8PCBp KQorCQkJICAgIC0gaiAqICgoc2l6ZV90KTEgPDwgKGkgLSA0KSk7CisJCQlzaXplX3QgbnVtMiA9 ICgoc2l6ZV90KTEgPDwgaSkKKwkJCSAgICArIGogKiAoKHNpemVfdCkxIDw8IChpIC0gNCkpOwor CQkJZXhwZWN0X3p1X25lKG51bTEsIDAsICJJbnZhbGlkIGxnIGFyZ3VtZW50Iik7CisJCQlleHBl Y3RfenVfbmUobnVtMiwgMCwgIkludmFsaWQgbGcgYXJndW1lbnQiKTsKKwkJCWV4cGVjdF9sZ19j ZWlsX3JhbmdlKG51bTEsIGxnX2NlaWwobnVtMSkpOworCQkJZXhwZWN0X2xnX2NlaWxfcmFuZ2Uo bnVtMSwgTEdfQ0VJTChudW0xKSk7CisJCQlleHBlY3RfbGdfY2VpbF9yYW5nZShudW0yLCBsZ19j ZWlsKG51bTIpKTsKKwkJCWV4cGVjdF9sZ19jZWlsX3JhbmdlKG51bTIsIExHX0NFSUwobnVtMikp OworCisJCQlleHBlY3RfbGdfZmxvb3JfcmFuZ2UobnVtMSwgbGdfZmxvb3IobnVtMSkpOworCQkJ ZXhwZWN0X2xnX2Zsb29yX3JhbmdlKG51bTEsIExHX0ZMT09SKG51bTEpKTsKKwkJCWV4cGVjdF9s Z19mbG9vcl9yYW5nZShudW0yLCBsZ19mbG9vcihudW0yKSk7CisJCQlleHBlY3RfbGdfZmxvb3Jf cmFuZ2UobnVtMiwgTEdfRkxPT1IobnVtMikpOworCQl9CisJfQorfQorVEVTVF9FTkQKKworI2Rl ZmluZSBURVNUX0ZGUyh0LCBzdWYsIHRlc3Rfc3VmLCBwcmkpIGRvIHsJCQkJXAorCWZvciAodW5z aWduZWQgaSA9IDA7IGkgPCBzaXplb2YodCkgKiA4OyBpKyspIHsJCQlcCisJCWZvciAodW5zaWdu ZWQgaiA9IDA7IGogPD0gaTsgaisrKSB7CQkJXAorCQkJZm9yICh1bnNpZ25lZCBrID0gMDsgayA8 PSBqOyBrKyspIHsJCVwKKwkJCQl0IHggPSAodCkxIDw8IGk7CQkJXAorCQkJCXggfD0gKHQpMSA8 PCBqOwkJCQlcCisJCQkJeCB8PSAodCkxIDw8IGs7CQkJCVwKKwkJCQlleHBlY3RfIyN0ZXN0X3N1 ZiMjX2VxKGZmc18jI3N1Zih4KSwgaywJXAorCQkJCSAgICAiVW5leHBlY3RlZCByZXN1bHQsIHg9 JSJwcmksIHgpOwlcCisJCQl9CQkJCQkJXAorCQl9CQkJCQkJCVwKKwl9CQkJCQkJCQlcCit9IHdo aWxlKDApCisKK1RFU1RfQkVHSU4odGVzdF9mZnNfdSkgeworCVRFU1RfRkZTKHVuc2lnbmVkLCB1 LCB1LCJ1Iik7Cit9CitURVNUX0VORAorCitURVNUX0JFR0lOKHRlc3RfZmZzX2x1KSB7CisJVEVT VF9GRlModW5zaWduZWQgbG9uZywgbHUsIGx1LCAibHUiKTsKK30KK1RFU1RfRU5ECisKK1RFU1Rf QkVHSU4odGVzdF9mZnNfbGx1KSB7CisJVEVTVF9GRlModW5zaWduZWQgbG9uZyBsb25nLCBsbHUs IHFkLCAibGx1Iik7Cit9CitURVNUX0VORAorCitURVNUX0JFR0lOKHRlc3RfZmZzX3UzMikgewor CVRFU1RfRkZTKHVpbnQzMl90LCB1MzIsIHUzMiwgRk1UdTMyKTsKK30KK1RFU1RfRU5ECisKK1RF U1RfQkVHSU4odGVzdF9mZnNfdTY0KSB7CisJVEVTVF9GRlModWludDY0X3QsIHU2NCwgdTY0LCBG TVR1NjQpOworfQorVEVTVF9FTkQKKworVEVTVF9CRUdJTih0ZXN0X2Zmc196dSkgeworCVRFU1Rf RkZTKHNpemVfdCwgenUsIHp1LCAienUiKTsKK30KK1RFU1RfRU5ECisKKyNkZWZpbmUgVEVTVF9G TFModCwgc3VmLCB0ZXN0X3N1ZiwgcHJpKSBkbyB7CQkJCVwKKwlmb3IgKHVuc2lnbmVkIGkgPSAw OyBpIDwgc2l6ZW9mKHQpICogODsgaSsrKSB7CQkJXAorCQlmb3IgKHVuc2lnbmVkIGogPSAwOyBq IDw9IGk7IGorKykgewkJCVwKKwkJCWZvciAodW5zaWduZWQgayA9IDA7IGsgPD0gajsgaysrKSB7 CQlcCisJCQkJdCB4ID0gKHQpMSA8PCBpOwkJCVwKKwkJCQl4IHw9ICh0KTEgPDwgajsJCQkJXAor CQkJCXggfD0gKHQpMSA8PCBrOwkJCQlcCisJCQkJZXhwZWN0XyMjdGVzdF9zdWYjI19lcShmbHNf IyNzdWYoeCksIGksCVwKKwkJCQkgICAgIlVuZXhwZWN0ZWQgcmVzdWx0LCB4PSUicHJpLCB4KTsJ XAorCQkJfQkJCQkJCVwKKwkJfQkJCQkJCQlcCisJfQkJCQkJCQkJXAorfSB3aGlsZSgwKQorCitU RVNUX0JFR0lOKHRlc3RfZmxzX3UpIHsKKwlURVNUX0ZMUyh1bnNpZ25lZCwgdSwgdSwidSIpOwor fQorVEVTVF9FTkQKKworVEVTVF9CRUdJTih0ZXN0X2Zsc19sdSkgeworCVRFU1RfRkxTKHVuc2ln bmVkIGxvbmcsIGx1LCBsdSwgImx1Iik7Cit9CitURVNUX0VORAorCitURVNUX0JFR0lOKHRlc3Rf ZmxzX2xsdSkgeworCVRFU1RfRkxTKHVuc2lnbmVkIGxvbmcgbG9uZywgbGx1LCBxZCwgImxsdSIp OworfQorVEVTVF9FTkQKKworVEVTVF9CRUdJTih0ZXN0X2Zsc191MzIpIHsKKwlURVNUX0ZMUyh1 aW50MzJfdCwgdTMyLCB1MzIsIEZNVHUzMik7Cit9CitURVNUX0VORAorCitURVNUX0JFR0lOKHRl c3RfZmxzX3U2NCkgeworCVRFU1RfRkxTKHVpbnQ2NF90LCB1NjQsIHU2NCwgRk1UdTY0KTsKK30K K1RFU1RfRU5ECisKK1RFU1RfQkVHSU4odGVzdF9mbHNfenUpIHsKKwlURVNUX0ZMUyhzaXplX3Qs IHp1LCB6dSwgInp1Iik7Cit9CitURVNUX0VORAorCitURVNUX0JFR0lOKHRlc3RfZmxzX3Vfc2xv dykgeworCVRFU1RfRkxTKHVuc2lnbmVkLCB1X3Nsb3csIHUsInUiKTsKK30KK1RFU1RfRU5ECisK K1RFU1RfQkVHSU4odGVzdF9mbHNfbHVfc2xvdykgeworCVRFU1RfRkxTKHVuc2lnbmVkIGxvbmcs IGx1X3Nsb3csIGx1LCAibHUiKTsKK30KK1RFU1RfRU5ECisKK1RFU1RfQkVHSU4odGVzdF9mbHNf bGx1X3Nsb3cpIHsKKwlURVNUX0ZMUyh1bnNpZ25lZCBsb25nIGxvbmcsIGxsdV9zbG93LCBxZCwg ImxsdSIpOworfQorVEVTVF9FTkQKKworc3RhdGljIHVuc2lnbmVkCitwb3Bjb3VudF9ieXRlKHVu c2lnbmVkIGJ5dGUpIHsKKwlpbnQgY291bnQgPSAwOworCWZvciAoaW50IGkgPSAwOyBpIDwgODsg aSsrKSB7CisJCWlmICgoYnl0ZSAmICgxIDw8IGkpKSAhPSAwKSB7CisJCQljb3VudCsrOworCQl9 CisJfQorCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHVpbnQ2NF90CitleHBhbmRfYnl0ZV90 b19tYXNrKHVuc2lnbmVkIGJ5dGUpIHsKKwl1aW50NjRfdCByZXN1bHQgPSAwOworCWZvciAoaW50 IGkgPSAwOyBpIDwgODsgaSsrKSB7CisJCWlmICgoYnl0ZSAmICgxIDw8IGkpKSAhPSAwKSB7CisJ CQlyZXN1bHQgfD0gKCh1aW50NjRfdCkweEZGIDw8IChpICogOCkpOworCQl9CisJfQorCXJldHVy biByZXN1bHQ7Cit9CisKKyNkZWZpbmUgVEVTVF9QT1BDT1VOVCh0LCBzdWYsIHByaV9oZXgpIGRv IHsJCQkJXAorCXQgYm11bCA9ICh0KTB4MDEwMTAxMDEwMTAxMDEwMVVMTDsJCQkJXAorCWZvciAo dW5zaWduZWQgaSA9IDA7IGkgPCAoMSA8PCBzaXplb2YodCkpOyBpKyspIHsJCVwKKwkJZm9yICh1 bnNpZ25lZCBqID0gMDsgaiA8IDI1NjsgaisrKSB7CQkJXAorCQkJLyoJCQkJCQlcCisJCQkgKiBS ZXBsaWNhdGUgdGhlIGJ5dGUgaiBpbnRvIHZhcmlvdXMJCVwKKwkJCSAqIGJ5dGVzIG9mIHRoZSBp bnRlZ2VyIChhcyBpbmRpY2F0ZWQgYnkgdGhlCVwKKwkJCSAqIG1hc2sgaW4gaSksIGFuZCBlbnN1 cmUgdGhhdCB0aGUgcG9wY291bnQgb2YJXAorCQkJICogdGhlIHJlc3VsdCBpcyBwb3Bjb3VudChp KSAqIHBvcGNvdW50KGopCVwKKwkJCSAqLwkJCQkJCVwKKwkJCXQgbWFzayA9ICh0KWV4cGFuZF9i eXRlX3RvX21hc2soaSk7CQlcCisJCQl0IHggPSAoYm11bCAqIGopICYgbWFzazsJCQlcCisJCQll eHBlY3RfdV9lcSgJCQkJCVwKKwkJCSAgICBwb3Bjb3VudF9ieXRlKGkpICogcG9wY291bnRfYnl0 ZShqKSwJXAorCQkJICAgIHBvcGNvdW50XyMjc3VmKHgpLAkJCQlcCisJCQkgICAgIlVuZXhwZWN0 ZWQgcmVzdWx0LCB4PTB4JSJwcmlfaGV4LCB4KTsJXAorCQl9CQkJCQkJCVwKKwl9CQkJCQkJCQlc Cit9IHdoaWxlICgwKQorCitURVNUX0JFR0lOKHRlc3RfcG9wY291bnRfdSkgeworCVRFU1RfUE9Q Q09VTlQodW5zaWduZWQsIHUsICJ4Iik7Cit9CitURVNUX0VORAorCitURVNUX0JFR0lOKHRlc3Rf cG9wY291bnRfdV9zbG93KSB7CisJVEVTVF9QT1BDT1VOVCh1bnNpZ25lZCwgdV9zbG93LCAieCIp OworfQorVEVTVF9FTkQKKworVEVTVF9CRUdJTih0ZXN0X3BvcGNvdW50X2x1KSB7CisJVEVTVF9Q T1BDT1VOVCh1bnNpZ25lZCBsb25nLCBsdSwgImx4Iik7Cit9CitURVNUX0VORAorCitURVNUX0JF R0lOKHRlc3RfcG9wY291bnRfbHVfc2xvdykgeworCVRFU1RfUE9QQ09VTlQodW5zaWduZWQgbG9u ZywgbHVfc2xvdywgImx4Iik7Cit9CitURVNUX0VORAorCitURVNUX0JFR0lOKHRlc3RfcG9wY291 bnRfbGx1KSB7CisJVEVTVF9QT1BDT1VOVCh1bnNpZ25lZCBsb25nIGxvbmcsIGxsdSwgImxseCIp OworfQorVEVTVF9FTkQKKworVEVTVF9CRUdJTih0ZXN0X3BvcGNvdW50X2xsdV9zbG93KSB7CisJ VEVTVF9QT1BDT1VOVCh1bnNpZ25lZCBsb25nIGxvbmcsIGxsdV9zbG93LCAibGx4Iik7Cit9CitU RVNUX0VORAorCitpbnQKK21haW4odm9pZCkgeworCXJldHVybiB0ZXN0X25vX3JlZW50cmFuY3ko CisJICAgIHRlc3RfcG93Ml9jZWlsX3U2NCwKKwkgICAgdGVzdF9wb3cyX2NlaWxfdTMyLAorCSAg ICB0ZXN0X3BvdzJfY2VpbF96dSwKKwkgICAgdGVzdF9sZ19jZWlsX2Zsb29yLAorCSAgICB0ZXN0 X2Zmc191LAorCSAgICB0ZXN0X2Zmc19sdSwKKwkgICAgdGVzdF9mZnNfbGx1LAorCSAgICB0ZXN0 X2Zmc191MzIsCisJICAgIHRlc3RfZmZzX3U2NCwKKwkgICAgdGVzdF9mZnNfenUsCisJICAgIHRl c3RfZmxzX3UsCisJICAgIHRlc3RfZmxzX2x1LAorCSAgICB0ZXN0X2Zsc19sbHUsCisJICAgIHRl c3RfZmxzX3UzMiwKKwkgICAgdGVzdF9mbHNfdTY0LAorCSAgICB0ZXN0X2Zsc196dSwKKwkgICAg dGVzdF9mbHNfdV9zbG93LAorCSAgICB0ZXN0X2Zsc19sdV9zbG93LAorCSAgICB0ZXN0X2Zsc19s bHVfc2xvdywKKwkgICAgdGVzdF9wb3Bjb3VudF91LAorCSAgICB0ZXN0X3BvcGNvdW50X3Vfc2xv dywKKwkgICAgdGVzdF9wb3Bjb3VudF9sdSwKKwkgICAgdGVzdF9wb3Bjb3VudF9sdV9zbG93LAor CSAgICB0ZXN0X3BvcGNvdW50X2xsdSwKKwkgICAgdGVzdF9wb3Bjb3VudF9sbHVfc2xvdyk7Cit9 CgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVz dC91bml0L2JpdG1hcC5jIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAv dGVzdC91bml0L2JpdG1hcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4 ZTU0MmIKLS0tIC9kZXYvbnVsbAorKysgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxv Yy01LjMuMC90ZXN0L3VuaXQvYml0bWFwLmMKQEAgLTAsMCArMSwzNDMgQEAKKyNpbmNsdWRlICJ0 ZXN0L2plbWFsbG9jX3Rlc3QuaCIKKworI2luY2x1ZGUgInRlc3QvbmJpdHMuaCIKKworc3RhdGlj IHZvaWQKK3Rlc3RfYml0bWFwX2luaXRpYWxpemVyX2JvZHkoY29uc3QgYml0bWFwX2luZm9fdCAq YmluZm8sIHNpemVfdCBuYml0cykgeworCWJpdG1hcF9pbmZvX3QgYmluZm9fZHluOworCWJpdG1h cF9pbmZvX2luaXQoJmJpbmZvX2R5biwgbmJpdHMpOworCisJZXhwZWN0X3p1X2VxKGJpdG1hcF9z aXplKGJpbmZvKSwgYml0bWFwX3NpemUoJmJpbmZvX2R5biksCisJICAgICJVbmV4cGVjdGVkIGRp ZmZlcmVuY2UgYmV0d2VlbiBzdGF0aWMgYW5kIGR5bmFtaWMgaW5pdGlhbGl6YXRpb24sICIKKwkg ICAgIm5iaXRzPSV6dSIsIG5iaXRzKTsKKwlleHBlY3RfenVfZXEoYmluZm8tPm5iaXRzLCBiaW5m b19keW4ubmJpdHMsCisJICAgICJVbmV4cGVjdGVkIGRpZmZlcmVuY2UgYmV0d2VlbiBzdGF0aWMg YW5kIGR5bmFtaWMgaW5pdGlhbGl6YXRpb24sICIKKwkgICAgIm5iaXRzPSV6dSIsIG5iaXRzKTsK KyNpZmRlZiBCSVRNQVBfVVNFX1RSRUUKKwlleHBlY3RfdV9lcShiaW5mby0+bmxldmVscywgYmlu Zm9fZHluLm5sZXZlbHMsCisJICAgICJVbmV4cGVjdGVkIGRpZmZlcmVuY2UgYmV0d2VlbiBzdGF0 aWMgYW5kIGR5bmFtaWMgaW5pdGlhbGl6YXRpb24sICIKKwkgICAgIm5iaXRzPSV6dSIsIG5iaXRz KTsKKwl7CisJCXVuc2lnbmVkIGk7CisKKwkJZm9yIChpID0gMDsgaSA8IGJpbmZvLT5ubGV2ZWxz OyBpKyspIHsKKwkJCWV4cGVjdF96dV9lcShiaW5mby0+bGV2ZWxzW2ldLmdyb3VwX29mZnNldCwK KwkJCSAgICBiaW5mb19keW4ubGV2ZWxzW2ldLmdyb3VwX29mZnNldCwKKwkJCSAgICAiVW5leHBl Y3RlZCBkaWZmZXJlbmNlIGJldHdlZW4gc3RhdGljIGFuZCBkeW5hbWljICIKKwkJCSAgICAiaW5p dGlhbGl6YXRpb24sIG5iaXRzPSV6dSwgbGV2ZWw9JXUiLCBuYml0cywgaSk7CisJCX0KKwl9Cisj ZWxzZQorCWV4cGVjdF96dV9lcShiaW5mby0+bmdyb3VwcywgYmluZm9fZHluLm5ncm91cHMsCisJ ICAgICJVbmV4cGVjdGVkIGRpZmZlcmVuY2UgYmV0d2VlbiBzdGF0aWMgYW5kIGR5bmFtaWMgaW5p dGlhbGl6YXRpb24iKTsKKyNlbmRpZgorfQorCitURVNUX0JFR0lOKHRlc3RfYml0bWFwX2luaXRp YWxpemVyKSB7CisjZGVmaW5lIE5CKG5iaXRzKSB7CQkJCQkJCVwKKwkJaWYgKG5iaXRzIDw9IEJJ VE1BUF9NQVhCSVRTKSB7CQkJCVwKKwkJCWJpdG1hcF9pbmZvX3QgYmluZm8gPQkJCQlcCisJCQkg ICAgQklUTUFQX0lORk9fSU5JVElBTElaRVIobmJpdHMpOwkJXAorCQkJdGVzdF9iaXRtYXBfaW5p dGlhbGl6ZXJfYm9keSgmYmluZm8sIG5iaXRzKTsJXAorCQl9CQkJCQkJCVwKKwl9CisJTkJJVFNf VEFCCisjdW5kZWYgTkIKK30KK1RFU1RfRU5ECisKK3N0YXRpYyBzaXplX3QKK3Rlc3RfYml0bWFw X3NpemVfYm9keShjb25zdCBiaXRtYXBfaW5mb190ICpiaW5mbywgc2l6ZV90IG5iaXRzLAorICAg IHNpemVfdCBwcmV2X3NpemUpIHsKKwlzaXplX3Qgc2l6ZSA9IGJpdG1hcF9zaXplKGJpbmZvKTsK KwlleHBlY3RfenVfZ2Uoc2l6ZSwgKG5iaXRzID4+IDMpLAorCSAgICAiQml0bWFwIHNpemUgaXMg c21hbGxlciB0aGFuIGV4cGVjdGVkIik7CisJZXhwZWN0X3p1X2dlKHNpemUsIHByZXZfc2l6ZSwg IkJpdG1hcCBzaXplIGlzIHNtYWxsZXIgdGhhbiBleHBlY3RlZCIpOworCXJldHVybiBzaXplOwor fQorCitURVNUX0JFR0lOKHRlc3RfYml0bWFwX3NpemUpIHsKKwlzaXplX3QgbmJpdHMsIHByZXZf c2l6ZTsKKworCXByZXZfc2l6ZSA9IDA7CisJZm9yIChuYml0cyA9IDE7IG5iaXRzIDw9IEJJVE1B UF9NQVhCSVRTOyBuYml0cysrKSB7CisJCWJpdG1hcF9pbmZvX3QgYmluZm87CisJCWJpdG1hcF9p bmZvX2luaXQoJmJpbmZvLCBuYml0cyk7CisJCXByZXZfc2l6ZSA9IHRlc3RfYml0bWFwX3NpemVf Ym9keSgmYmluZm8sIG5iaXRzLCBwcmV2X3NpemUpOworCX0KKyNkZWZpbmUgTkIobmJpdHMpIHsJ CQkJCQkJXAorCQliaXRtYXBfaW5mb190IGJpbmZvID0gQklUTUFQX0lORk9fSU5JVElBTElaRVIo bmJpdHMpOwlcCisJCXByZXZfc2l6ZSA9IHRlc3RfYml0bWFwX3NpemVfYm9keSgmYmluZm8sIG5i aXRzLAlcCisJCSAgICBwcmV2X3NpemUpOwkJCQkJCVwKKwl9CisJcHJldl9zaXplID0gMDsKKwlO QklUU19UQUIKKyN1bmRlZiBOQgorfQorVEVTVF9FTkQKKworc3RhdGljIHZvaWQKK3Rlc3RfYml0 bWFwX2luaXRfYm9keShjb25zdCBiaXRtYXBfaW5mb190ICpiaW5mbywgc2l6ZV90IG5iaXRzKSB7 CisJc2l6ZV90IGk7CisJYml0bWFwX3QgKmJpdG1hcCA9IChiaXRtYXBfdCAqKW1hbGxvYyhiaXRt YXBfc2l6ZShiaW5mbykpOworCWV4cGVjdF9wdHJfbm90X251bGwoYml0bWFwLCAiVW5leHBlY3Rl ZCBtYWxsb2MoKSBmYWlsdXJlIik7CisKKwliaXRtYXBfaW5pdChiaXRtYXAsIGJpbmZvLCBmYWxz ZSk7CisJZm9yIChpID0gMDsgaSA8IG5iaXRzOyBpKyspIHsKKwkJZXhwZWN0X2ZhbHNlKGJpdG1h cF9nZXQoYml0bWFwLCBiaW5mbywgaSksCisJCSAgICAiQml0IHNob3VsZCBiZSB1bnNldCIpOwor CX0KKworCWJpdG1hcF9pbml0KGJpdG1hcCwgYmluZm8sIHRydWUpOworCWZvciAoaSA9IDA7IGkg PCBuYml0czsgaSsrKSB7CisJCWV4cGVjdF90cnVlKGJpdG1hcF9nZXQoYml0bWFwLCBiaW5mbywg aSksICJCaXQgc2hvdWxkIGJlIHNldCIpOworCX0KKworCWZyZWUoYml0bWFwKTsKK30KKworVEVT VF9CRUdJTih0ZXN0X2JpdG1hcF9pbml0KSB7CisJc2l6ZV90IG5iaXRzOworCisJZm9yIChuYml0 cyA9IDE7IG5iaXRzIDw9IEJJVE1BUF9NQVhCSVRTOyBuYml0cysrKSB7CisJCWJpdG1hcF9pbmZv X3QgYmluZm87CisJCWJpdG1hcF9pbmZvX2luaXQoJmJpbmZvLCBuYml0cyk7CisJCXRlc3RfYml0 bWFwX2luaXRfYm9keSgmYmluZm8sIG5iaXRzKTsKKwl9CisjZGVmaW5lIE5CKG5iaXRzKSB7CQkJ CQkJCVwKKwkJYml0bWFwX2luZm9fdCBiaW5mbyA9IEJJVE1BUF9JTkZPX0lOSVRJQUxJWkVSKG5i aXRzKTsJXAorCQl0ZXN0X2JpdG1hcF9pbml0X2JvZHkoJmJpbmZvLCBuYml0cyk7CQkJXAorCX0K KwlOQklUU19UQUIKKyN1bmRlZiBOQgorfQorVEVTVF9FTkQKKworc3RhdGljIHZvaWQKK3Rlc3Rf Yml0bWFwX3NldF9ib2R5KGNvbnN0IGJpdG1hcF9pbmZvX3QgKmJpbmZvLCBzaXplX3QgbmJpdHMp IHsKKwlzaXplX3QgaTsKKwliaXRtYXBfdCAqYml0bWFwID0gKGJpdG1hcF90ICopbWFsbG9jKGJp dG1hcF9zaXplKGJpbmZvKSk7CisJZXhwZWN0X3B0cl9ub3RfbnVsbChiaXRtYXAsICJVbmV4cGVj dGVkIG1hbGxvYygpIGZhaWx1cmUiKTsKKwliaXRtYXBfaW5pdChiaXRtYXAsIGJpbmZvLCBmYWxz ZSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbmJpdHM7IGkrKykgeworCQliaXRtYXBfc2V0KGJpdG1h cCwgYmluZm8sIGkpOworCX0KKwlleHBlY3RfdHJ1ZShiaXRtYXBfZnVsbChiaXRtYXAsIGJpbmZv KSwgIkFsbCBiaXRzIHNob3VsZCBiZSBzZXQiKTsKKwlmcmVlKGJpdG1hcCk7Cit9CisKK1RFU1Rf QkVHSU4odGVzdF9iaXRtYXBfc2V0KSB7CisJc2l6ZV90IG5iaXRzOworCisJZm9yIChuYml0cyA9 IDE7IG5iaXRzIDw9IEJJVE1BUF9NQVhCSVRTOyBuYml0cysrKSB7CisJCWJpdG1hcF9pbmZvX3Qg YmluZm87CisJCWJpdG1hcF9pbmZvX2luaXQoJmJpbmZvLCBuYml0cyk7CisJCXRlc3RfYml0bWFw X3NldF9ib2R5KCZiaW5mbywgbmJpdHMpOworCX0KKyNkZWZpbmUgTkIobmJpdHMpIHsJCQkJCQkJ XAorCQliaXRtYXBfaW5mb190IGJpbmZvID0gQklUTUFQX0lORk9fSU5JVElBTElaRVIobmJpdHMp OwlcCisJCXRlc3RfYml0bWFwX3NldF9ib2R5KCZiaW5mbywgbmJpdHMpOwkJCVwKKwl9CisJTkJJ VFNfVEFCCisjdW5kZWYgTkIKK30KK1RFU1RfRU5ECisKK3N0YXRpYyB2b2lkCit0ZXN0X2JpdG1h cF91bnNldF9ib2R5KGNvbnN0IGJpdG1hcF9pbmZvX3QgKmJpbmZvLCBzaXplX3QgbmJpdHMpIHsK KwlzaXplX3QgaTsKKwliaXRtYXBfdCAqYml0bWFwID0gKGJpdG1hcF90ICopbWFsbG9jKGJpdG1h cF9zaXplKGJpbmZvKSk7CisJZXhwZWN0X3B0cl9ub3RfbnVsbChiaXRtYXAsICJVbmV4cGVjdGVk IG1hbGxvYygpIGZhaWx1cmUiKTsKKwliaXRtYXBfaW5pdChiaXRtYXAsIGJpbmZvLCBmYWxzZSk7 CisKKwlmb3IgKGkgPSAwOyBpIDwgbmJpdHM7IGkrKykgeworCQliaXRtYXBfc2V0KGJpdG1hcCwg YmluZm8sIGkpOworCX0KKwlleHBlY3RfdHJ1ZShiaXRtYXBfZnVsbChiaXRtYXAsIGJpbmZvKSwg IkFsbCBiaXRzIHNob3VsZCBiZSBzZXQiKTsKKwlmb3IgKGkgPSAwOyBpIDwgbmJpdHM7IGkrKykg eworCQliaXRtYXBfdW5zZXQoYml0bWFwLCBiaW5mbywgaSk7CisJfQorCWZvciAoaSA9IDA7IGkg PCBuYml0czsgaSsrKSB7CisJCWJpdG1hcF9zZXQoYml0bWFwLCBiaW5mbywgaSk7CisJfQorCWV4 cGVjdF90cnVlKGJpdG1hcF9mdWxsKGJpdG1hcCwgYmluZm8pLCAiQWxsIGJpdHMgc2hvdWxkIGJl IHNldCIpOworCWZyZWUoYml0bWFwKTsKK30KKworVEVTVF9CRUdJTih0ZXN0X2JpdG1hcF91bnNl dCkgeworCXNpemVfdCBuYml0czsKKworCWZvciAobmJpdHMgPSAxOyBuYml0cyA8PSBCSVRNQVBf TUFYQklUUzsgbmJpdHMrKykgeworCQliaXRtYXBfaW5mb190IGJpbmZvOworCQliaXRtYXBfaW5m b19pbml0KCZiaW5mbywgbmJpdHMpOworCQl0ZXN0X2JpdG1hcF91bnNldF9ib2R5KCZiaW5mbywg bmJpdHMpOworCX0KKyNkZWZpbmUgTkIobmJpdHMpIHsJCQkJCQkJXAorCQliaXRtYXBfaW5mb190 IGJpbmZvID0gQklUTUFQX0lORk9fSU5JVElBTElaRVIobmJpdHMpOwlcCisJCXRlc3RfYml0bWFw X3Vuc2V0X2JvZHkoJmJpbmZvLCBuYml0cyk7CQkJXAorCX0KKwlOQklUU19UQUIKKyN1bmRlZiBO QgorfQorVEVTVF9FTkQKKworc3RhdGljIHZvaWQKK3Rlc3RfYml0bWFwX3hmdV9ib2R5KGNvbnN0 IGJpdG1hcF9pbmZvX3QgKmJpbmZvLCBzaXplX3QgbmJpdHMpIHsKKwliaXRtYXBfdCAqYml0bWFw ID0gKGJpdG1hcF90ICopbWFsbG9jKGJpdG1hcF9zaXplKGJpbmZvKSk7CisJZXhwZWN0X3B0cl9u b3RfbnVsbChiaXRtYXAsICJVbmV4cGVjdGVkIG1hbGxvYygpIGZhaWx1cmUiKTsKKwliaXRtYXBf aW5pdChiaXRtYXAsIGJpbmZvLCBmYWxzZSk7CisKKwkvKiBJdGVyYXRpdmVseSBzZXQgYml0cyBz dGFydGluZyBhdCB0aGUgYmVnaW5uaW5nLiAqLworCWZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbmJp dHM7IGkrKykgeworCQlleHBlY3RfenVfZXEoYml0bWFwX2ZmdShiaXRtYXAsIGJpbmZvLCAwKSwg aSwKKwkJICAgICJGaXJzdCB1bnNldCBiaXQgc2hvdWxkIGJlIGp1c3QgYWZ0ZXIgcHJldmlvdXMg Zmlyc3QgdW5zZXQgIgorCQkgICAgImJpdCIpOworCQlleHBlY3RfenVfZXEoYml0bWFwX2ZmdShi aXRtYXAsIGJpbmZvLCAoaSA+IDApID8gaS0xIDogaSksIGksCisJCSAgICAiRmlyc3QgdW5zZXQg Yml0IHNob3VsZCBiZSBqdXN0IGFmdGVyIHByZXZpb3VzIGZpcnN0IHVuc2V0ICIKKwkJICAgICJi aXQiKTsKKwkJZXhwZWN0X3p1X2VxKGJpdG1hcF9mZnUoYml0bWFwLCBiaW5mbywgaSksIGksCisJ CSAgICAiRmlyc3QgdW5zZXQgYml0IHNob3VsZCBiZSBqdXN0IGFmdGVyIHByZXZpb3VzIGZpcnN0 IHVuc2V0ICIKKwkJICAgICJiaXQiKTsKKwkJZXhwZWN0X3p1X2VxKGJpdG1hcF9zZnUoYml0bWFw LCBiaW5mbyksIGksCisJCSAgICAiRmlyc3QgdW5zZXQgYml0IHNob3VsZCBiZSBqdXN0IGFmdGVy IHByZXZpb3VzIGZpcnN0IHVuc2V0ICIKKwkJICAgICJiaXQiKTsKKwl9CisJZXhwZWN0X3RydWUo Yml0bWFwX2Z1bGwoYml0bWFwLCBiaW5mbyksICJBbGwgYml0cyBzaG91bGQgYmUgc2V0Iik7CisK KwkvKgorCSAqIEl0ZXJhdGl2ZWx5IHVuc2V0IGJpdHMgc3RhcnRpbmcgYXQgdGhlIGVuZCwgYW5k IHZlcmlmeSB0aGF0CisJICogYml0bWFwX3NmdSgpIHJlYWNoZXMgdGhlIHVuc2V0IGJpdHMuCisJ ICovCisJZm9yIChzaXplX3QgaSA9IG5iaXRzIC0gMTsgaSA8IG5iaXRzOyBpLS0pIHsgLyogKG5i aXRzLi4wXSAqLworCQliaXRtYXBfdW5zZXQoYml0bWFwLCBiaW5mbywgaSk7CisJCWV4cGVjdF96 dV9lcShiaXRtYXBfZmZ1KGJpdG1hcCwgYmluZm8sIDApLCBpLAorCQkgICAgIkZpcnN0IHVuc2V0 IGJpdCBzaG91bGQgdGhlIGJpdCBwcmV2aW91c2x5IHVuc2V0Iik7CisJCWV4cGVjdF96dV9lcShi aXRtYXBfZmZ1KGJpdG1hcCwgYmluZm8sIChpID4gMCkgPyBpLTEgOiBpKSwgaSwKKwkJICAgICJG aXJzdCB1bnNldCBiaXQgc2hvdWxkIHRoZSBiaXQgcHJldmlvdXNseSB1bnNldCIpOworCQlleHBl Y3RfenVfZXEoYml0bWFwX2ZmdShiaXRtYXAsIGJpbmZvLCBpKSwgaSwKKwkJICAgICJGaXJzdCB1 bnNldCBiaXQgc2hvdWxkIHRoZSBiaXQgcHJldmlvdXNseSB1bnNldCIpOworCQlleHBlY3RfenVf ZXEoYml0bWFwX3NmdShiaXRtYXAsIGJpbmZvKSwgaSwKKwkJICAgICJGaXJzdCB1bnNldCBiaXQg c2hvdWxkIHRoZSBiaXQgcHJldmlvdXNseSB1bnNldCIpOworCQliaXRtYXBfdW5zZXQoYml0bWFw LCBiaW5mbywgaSk7CisJfQorCWV4cGVjdF9mYWxzZShiaXRtYXBfZ2V0KGJpdG1hcCwgYmluZm8s IDApLCAiQml0IHNob3VsZCBiZSB1bnNldCIpOworCisJLyoKKwkgKiBJdGVyYXRpdmVseSBzZXQg Yml0cyBzdGFydGluZyBhdCB0aGUgYmVnaW5uaW5nLCBhbmQgdmVyaWZ5IHRoYXQKKwkgKiBiaXRt YXBfc2Z1KCkgbG9va3MgcGFzdCB0aGVtLgorCSAqLworCWZvciAoc2l6ZV90IGkgPSAxOyBpIDwg bmJpdHM7IGkrKykgeworCQliaXRtYXBfc2V0KGJpdG1hcCwgYmluZm8sIGkgLSAxKTsKKwkJZXhw ZWN0X3p1X2VxKGJpdG1hcF9mZnUoYml0bWFwLCBiaW5mbywgMCksIGksCisJCSAgICAiRmlyc3Qg dW5zZXQgYml0IHNob3VsZCBiZSBqdXN0IGFmdGVyIHRoZSBiaXQgcHJldmlvdXNseSAiCisJCSAg ICAic2V0Iik7CisJCWV4cGVjdF96dV9lcShiaXRtYXBfZmZ1KGJpdG1hcCwgYmluZm8sIChpID4g MCkgPyBpLTEgOiBpKSwgaSwKKwkJICAgICJGaXJzdCB1bnNldCBiaXQgc2hvdWxkIGJlIGp1c3Qg YWZ0ZXIgdGhlIGJpdCBwcmV2aW91c2x5ICIKKwkJICAgICJzZXQiKTsKKwkJZXhwZWN0X3p1X2Vx KGJpdG1hcF9mZnUoYml0bWFwLCBiaW5mbywgaSksIGksCisJCSAgICAiRmlyc3QgdW5zZXQgYml0 IHNob3VsZCBiZSBqdXN0IGFmdGVyIHRoZSBiaXQgcHJldmlvdXNseSAiCisJCSAgICAic2V0Iik7 CisJCWV4cGVjdF96dV9lcShiaXRtYXBfc2Z1KGJpdG1hcCwgYmluZm8pLCBpLAorCQkgICAgIkZp cnN0IHVuc2V0IGJpdCBzaG91bGQgYmUganVzdCBhZnRlciB0aGUgYml0IHByZXZpb3VzbHkgIgor CQkgICAgInNldCIpOworCQliaXRtYXBfdW5zZXQoYml0bWFwLCBiaW5mbywgaSk7CisJfQorCWV4 cGVjdF96dV9lcShiaXRtYXBfZmZ1KGJpdG1hcCwgYmluZm8sIDApLCBuYml0cyAtIDEsCisJICAg ICJGaXJzdCB1bnNldCBiaXQgc2hvdWxkIGJlIHRoZSBsYXN0IGJpdCIpOworCWV4cGVjdF96dV9l cShiaXRtYXBfZmZ1KGJpdG1hcCwgYmluZm8sIChuYml0cyA+IDEpID8gbmJpdHMtMiA6IG5iaXRz LTEpLAorCSAgICBuYml0cyAtIDEsICJGaXJzdCB1bnNldCBiaXQgc2hvdWxkIGJlIHRoZSBsYXN0 IGJpdCIpOworCWV4cGVjdF96dV9lcShiaXRtYXBfZmZ1KGJpdG1hcCwgYmluZm8sIG5iaXRzIC0g MSksIG5iaXRzIC0gMSwKKwkgICAgIkZpcnN0IHVuc2V0IGJpdCBzaG91bGQgYmUgdGhlIGxhc3Qg Yml0Iik7CisJZXhwZWN0X3p1X2VxKGJpdG1hcF9zZnUoYml0bWFwLCBiaW5mbyksIG5iaXRzIC0g MSwKKwkgICAgIkZpcnN0IHVuc2V0IGJpdCBzaG91bGQgYmUgdGhlIGxhc3QgYml0Iik7CisJZXhw ZWN0X3RydWUoYml0bWFwX2Z1bGwoYml0bWFwLCBiaW5mbyksICJBbGwgYml0cyBzaG91bGQgYmUg c2V0Iik7CisKKwkvKgorCSAqIEJ1YmJsZSBhICJ1c3UiIHBhdHRlcm4gdGhyb3VnaCB0aGUgYml0 bWFwIGFuZCB2ZXJpZnkgdGhhdAorCSAqIGJpdG1hcF9mZnUoKSBmaW5kcyB0aGUgY29ycmVjdCBi aXQgZm9yIGFsbCBmaXZlIG1pbl9iaXQgY2FzZXMuCisJICovCisJaWYgKG5iaXRzID49IDMpIHsK KwkJZm9yIChzaXplX3QgaSA9IDA7IGkgPCBuYml0cy0yOyBpKyspIHsKKwkJCWJpdG1hcF91bnNl dChiaXRtYXAsIGJpbmZvLCBpKTsKKwkJCWJpdG1hcF91bnNldChiaXRtYXAsIGJpbmZvLCBpKzIp OworCQkJaWYgKGkgPiAwKSB7CisJCQkJZXhwZWN0X3p1X2VxKGJpdG1hcF9mZnUoYml0bWFwLCBi aW5mbywgaS0xKSwgaSwKKwkJCQkgICAgIlVuZXhwZWN0ZWQgZmlyc3QgdW5zZXQgYml0Iik7CisJ CQl9CisJCQlleHBlY3RfenVfZXEoYml0bWFwX2ZmdShiaXRtYXAsIGJpbmZvLCBpKSwgaSwKKwkJ CSAgICAiVW5leHBlY3RlZCBmaXJzdCB1bnNldCBiaXQiKTsKKwkJCWV4cGVjdF96dV9lcShiaXRt YXBfZmZ1KGJpdG1hcCwgYmluZm8sIGkrMSksIGkrMiwKKwkJCSAgICAiVW5leHBlY3RlZCBmaXJz dCB1bnNldCBiaXQiKTsKKwkJCWV4cGVjdF96dV9lcShiaXRtYXBfZmZ1KGJpdG1hcCwgYmluZm8s IGkrMiksIGkrMiwKKwkJCSAgICAiVW5leHBlY3RlZCBmaXJzdCB1bnNldCBiaXQiKTsKKwkJCWlm IChpICsgMyA8IG5iaXRzKSB7CisJCQkJZXhwZWN0X3p1X2VxKGJpdG1hcF9mZnUoYml0bWFwLCBi aW5mbywgaSszKSwKKwkJCQkgICAgbmJpdHMsICJVbmV4cGVjdGVkIGZpcnN0IHVuc2V0IGJpdCIp OworCQkJfQorCQkJZXhwZWN0X3p1X2VxKGJpdG1hcF9zZnUoYml0bWFwLCBiaW5mbyksIGksCisJ CQkgICAgIlVuZXhwZWN0ZWQgZmlyc3QgdW5zZXQgYml0Iik7CisJCQlleHBlY3RfenVfZXEoYml0 bWFwX3NmdShiaXRtYXAsIGJpbmZvKSwgaSsyLAorCQkJICAgICJVbmV4cGVjdGVkIGZpcnN0IHVu c2V0IGJpdCIpOworCQl9CisJfQorCisJLyoKKwkgKiBVbnNldCB0aGUgbGFzdCBiaXQsIGJ1YmJs ZSBhbm90aGVyIHVuc2V0IGJpdCB0aHJvdWdoIHRoZSBiaXRtYXAsIGFuZAorCSAqIHZlcmlmeSB0 aGF0IGJpdG1hcF9mZnUoKSBmaW5kcyB0aGUgY29ycmVjdCBiaXQgZm9yIGFsbCBmb3VyIG1pbl9i aXQKKwkgKiBjYXNlcy4KKwkgKi8KKwlpZiAobmJpdHMgPj0gMykgeworCQliaXRtYXBfdW5zZXQo Yml0bWFwLCBiaW5mbywgbmJpdHMtMSk7CisJCWZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbmJpdHMt MTsgaSsrKSB7CisJCQliaXRtYXBfdW5zZXQoYml0bWFwLCBiaW5mbywgaSk7CisJCQlpZiAoaSA+ IDApIHsKKwkJCQlleHBlY3RfenVfZXEoYml0bWFwX2ZmdShiaXRtYXAsIGJpbmZvLCBpLTEpLCBp LAorCQkJCSAgICAiVW5leHBlY3RlZCBmaXJzdCB1bnNldCBiaXQiKTsKKwkJCX0KKwkJCWV4cGVj dF96dV9lcShiaXRtYXBfZmZ1KGJpdG1hcCwgYmluZm8sIGkpLCBpLAorCQkJICAgICJVbmV4cGVj dGVkIGZpcnN0IHVuc2V0IGJpdCIpOworCQkJZXhwZWN0X3p1X2VxKGJpdG1hcF9mZnUoYml0bWFw LCBiaW5mbywgaSsxKSwgbmJpdHMtMSwKKwkJCSAgICAiVW5leHBlY3RlZCBmaXJzdCB1bnNldCBi aXQiKTsKKwkJCWV4cGVjdF96dV9lcShiaXRtYXBfZmZ1KGJpdG1hcCwgYmluZm8sIG5iaXRzLTEp LAorCQkJICAgIG5iaXRzLTEsICJVbmV4cGVjdGVkIGZpcnN0IHVuc2V0IGJpdCIpOworCisJCQll eHBlY3RfenVfZXEoYml0bWFwX3NmdShiaXRtYXAsIGJpbmZvKSwgaSwKKwkJCSAgICAiVW5leHBl Y3RlZCBmaXJzdCB1bnNldCBiaXQiKTsKKwkJfQorCQlleHBlY3RfenVfZXEoYml0bWFwX3NmdShi aXRtYXAsIGJpbmZvKSwgbmJpdHMtMSwKKwkJICAgICJVbmV4cGVjdGVkIGZpcnN0IHVuc2V0IGJp dCIpOworCX0KKworCWZyZWUoYml0bWFwKTsKK30KKworVEVTVF9CRUdJTih0ZXN0X2JpdG1hcF94 ZnUpIHsKKwlzaXplX3QgbmJpdHMsIG5iaXRzX21heDsKKworCS8qIFRoZSB0ZXN0IGlzIE8obl4y KTsgbGFyZ2UgcGFnZSBzaXplcyBtYXkgc2xvdyBkb3duIHRvbyBtdWNoLiAqLworCW5iaXRzX21h eCA9IEJJVE1BUF9NQVhCSVRTID4gNTEyID8gNTEyIDogQklUTUFQX01BWEJJVFM7CisJZm9yIChu Yml0cyA9IDE7IG5iaXRzIDw9IG5iaXRzX21heDsgbmJpdHMrKykgeworCQliaXRtYXBfaW5mb190 IGJpbmZvOworCQliaXRtYXBfaW5mb19pbml0KCZiaW5mbywgbmJpdHMpOworCQl0ZXN0X2JpdG1h cF94ZnVfYm9keSgmYmluZm8sIG5iaXRzKTsKKwl9CisjZGVmaW5lIE5CKG5iaXRzKSB7CQkJCQkJ CVwKKwkJYml0bWFwX2luZm9fdCBiaW5mbyA9IEJJVE1BUF9JTkZPX0lOSVRJQUxJWkVSKG5iaXRz KTsJXAorCQl0ZXN0X2JpdG1hcF94ZnVfYm9keSgmYmluZm8sIG5iaXRzKTsJCQlcCisJfQorCU5C SVRTX1RBQgorI3VuZGVmIE5CCit9CitURVNUX0VORAorCitpbnQKK21haW4odm9pZCkgeworCXJl dHVybiB0ZXN0KAorCSAgICB0ZXN0X2JpdG1hcF9pbml0aWFsaXplciwKKwkgICAgdGVzdF9iaXRt YXBfc2l6ZSwKKwkgICAgdGVzdF9iaXRtYXBfaW5pdCwKKwkgICAgdGVzdF9iaXRtYXBfc2V0LAor CSAgICB0ZXN0X2JpdG1hcF91bnNldCwKKwkgICAgdGVzdF9iaXRtYXBfeGZ1KTsKK30KCmRpZmYg LS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQv YnVmX3dyaXRlci5jIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVz dC91bml0L2J1Zl93cml0ZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5k NWU2M2EwCi0tLSAvZGV2L251bGwKKysrIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxs b2MtNS4zLjAvdGVzdC91bml0L2J1Zl93cml0ZXIuYwpAQCAtMCwwICsxLDE5NiBAQAorI2luY2x1 ZGUgInRlc3QvamVtYWxsb2NfdGVzdC5oIgorCisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwv YnVmX3dyaXRlci5oIgorCisjZGVmaW5lIFRFU1RfQlVGX1NJWkUgMTYKKyNkZWZpbmUgVU5JVF9N QVggKFRFU1RfQlVGX1NJWkUgKiAzKQorCitzdGF0aWMgc2l6ZV90IHRlc3Rfd3JpdGVfbGVuOwor c3RhdGljIGNoYXIgdGVzdF9idWZbVEVTVF9CVUZfU0laRV07CitzdGF0aWMgdWludDY0X3QgYXJn Oworc3RhdGljIHVpbnQ2NF90IGFyZ19zdG9yZTsKKworc3RhdGljIHZvaWQKK3Rlc3Rfd3JpdGVf Y2Iodm9pZCAqY2JvcGFxdWUsIGNvbnN0IGNoYXIgKnMpIHsKKwlzaXplX3QgcHJldl90ZXN0X3dy aXRlX2xlbiA9IHRlc3Rfd3JpdGVfbGVuOworCXRlc3Rfd3JpdGVfbGVuICs9IHN0cmxlbihzKTsg Lyogb25seSBpbmNyZWFzZSB0aGUgbGVuZ3RoICovCisJYXJnX3N0b3JlID0gKih1aW50NjRfdCAq KWNib3BhcXVlOyAvKiBvbmx5IHBhc3MgYWxvbmcgdGhlIGFyZ3VtZW50ICovCisJYXNzZXJ0X3p1 X2xlKHByZXZfdGVzdF93cml0ZV9sZW4sIHRlc3Rfd3JpdGVfbGVuLAorCSAgICAiVGVzdCB3cml0 ZSBvdmVyZmxvd2VkIik7Cit9CisKK3N0YXRpYyB2b2lkCit0ZXN0X2J1Zl93cml0ZXJfYm9keSh0 c2RuX3QgKnRzZG4sIGJ1Zl93cml0ZXJfdCAqYnVmX3dyaXRlcikgeworCWNoYXIgc1tVTklUX01B WCArIDFdOworCXNpemVfdCBuX3VuaXQsIHJlbWFpbiwgaTsKKwlzc2l6ZV90IHVuaXQ7CisKKwlh c3NlcnQoYnVmX3dyaXRlci0+YnVmICE9IE5VTEwpOworCW1lbXNldChzLCAnYScsIFVOSVRfTUFY KTsKKwlhcmcgPSA0OyAvKiBTdGFydGluZyB2YWx1ZSBvZiByYW5kb20gYXJndW1lbnQuICovCisJ YXJnX3N0b3JlID0gYXJnOworCWZvciAodW5pdCA9IFVOSVRfTUFYOyB1bml0ID49IDA7IC0tdW5p dCkgeworCQkvKiB1bml0IGtlZXBzIGRlY3JlYXNpbmcsIHNvIHN0cmxlbihzKSBpcyBhbHdheXMg dW5pdC4gKi8KKwkJc1t1bml0XSA9ICdcMCc7CisJCWZvciAobl91bml0ID0gMTsgbl91bml0IDw9 IDM7ICsrbl91bml0KSB7CisJCQl0ZXN0X3dyaXRlX2xlbiA9IDA7CisJCQlyZW1haW4gPSAwOwor CQkJZm9yIChpID0gMTsgaSA8PSBuX3VuaXQ7ICsraSkgeworCQkJCWFyZyA9IHBybmdfbGdfcmFu Z2VfdTY0KCZhcmcsIDY0KTsKKwkJCQlidWZfd3JpdGVyX2NiKGJ1Zl93cml0ZXIsIHMpOworCQkJ CXJlbWFpbiArPSB1bml0OworCQkJCWlmIChyZW1haW4gPiBidWZfd3JpdGVyLT5idWZfc2l6ZSkg eworCQkJCQkvKiBGbHVzaGVzIHNob3VsZCBoYXZlIGhhcHBlbmVkLiAqLworCQkJCQlhc3NlcnRf dTY0X2VxKGFyZ19zdG9yZSwgYXJnLCAiQ2FsbCAiCisJCQkJCSAgICAiYmFjayBhcmd1bWVudCBk aWRuJ3QgZ2V0IHRocm91Z2giKTsKKwkJCQkJcmVtYWluICU9IGJ1Zl93cml0ZXItPmJ1Zl9zaXpl OworCQkJCQlpZiAocmVtYWluID09IDApIHsKKwkJCQkJCS8qIExhc3QgZmx1c2ggc2hvdWxkIGJl IGxhenkuICovCisJCQkJCQlyZW1haW4gKz0gYnVmX3dyaXRlci0+YnVmX3NpemU7CisJCQkJCX0K KwkJCQl9CisJCQkJYXNzZXJ0X3p1X2VxKHRlc3Rfd3JpdGVfbGVuICsgcmVtYWluLCBpICogdW5p dCwKKwkJCQkgICAgIkluY29ycmVjdCBsZW5ndGggYWZ0ZXIgd3JpdGluZyAlenUgc3RyaW5ncyIK KwkJCQkgICAgIiBvZiBsZW5ndGggJXp1IiwgaSwgdW5pdCk7CisJCQl9CisJCQlidWZfd3JpdGVy X2ZsdXNoKGJ1Zl93cml0ZXIpOworCQkJZXhwZWN0X3p1X2VxKHRlc3Rfd3JpdGVfbGVuLCBuX3Vu aXQgKiB1bml0LAorCQkJICAgICJJbmNvcnJlY3QgbGVuZ3RoIGFmdGVyIGZsdXNoaW5nIGF0IHRo ZSBlbmQgb2YiCisJCQkgICAgIiB3cml0aW5nICV6dSBzdHJpbmdzIG9mIGxlbmd0aCAlenUiLCBu X3VuaXQsIHVuaXQpOworCQl9CisJfQorCWJ1Zl93cml0ZXJfdGVybWluYXRlKHRzZG4sIGJ1Zl93 cml0ZXIpOworfQorCitURVNUX0JFR0lOKHRlc3RfYnVmX3dyaXRlX3N0YXRpYykgeworCWJ1Zl93 cml0ZXJfdCBidWZfd3JpdGVyOworCXRzZG5fdCAqdHNkbiA9IHRzZG5fZmV0Y2goKTsKKwlhc3Nl cnRfZmFsc2UoYnVmX3dyaXRlcl9pbml0KHRzZG4sICZidWZfd3JpdGVyLCB0ZXN0X3dyaXRlX2Ni LCAmYXJnLAorCSAgICB0ZXN0X2J1ZiwgVEVTVF9CVUZfU0laRSksCisJICAgICJidWZfd3JpdGVy X2luaXQoKSBzaG91bGQgbm90IGVuY291bnRlciBlcnJvciBvbiBzdGF0aWMgYnVmZmVyIik7CisJ dGVzdF9idWZfd3JpdGVyX2JvZHkodHNkbiwgJmJ1Zl93cml0ZXIpOworfQorVEVTVF9FTkQKKwor VEVTVF9CRUdJTih0ZXN0X2J1Zl93cml0ZV9keW5hbWljKSB7CisJYnVmX3dyaXRlcl90IGJ1Zl93 cml0ZXI7CisJdHNkbl90ICp0c2RuID0gdHNkbl9mZXRjaCgpOworCWFzc2VydF9mYWxzZShidWZf d3JpdGVyX2luaXQodHNkbiwgJmJ1Zl93cml0ZXIsIHRlc3Rfd3JpdGVfY2IsICZhcmcsCisJICAg IE5VTEwsIFRFU1RfQlVGX1NJWkUpLCAiYnVmX3dyaXRlcl9pbml0KCkgc2hvdWxkIG5vdCBPT00i KTsKKwl0ZXN0X2J1Zl93cml0ZXJfYm9keSh0c2RuLCAmYnVmX3dyaXRlcik7Cit9CitURVNUX0VO RAorCitURVNUX0JFR0lOKHRlc3RfYnVmX3dyaXRlX29vbSkgeworCWJ1Zl93cml0ZXJfdCBidWZf d3JpdGVyOworCXRzZG5fdCAqdHNkbiA9IHRzZG5fZmV0Y2goKTsKKwlhc3NlcnRfdHJ1ZShidWZf d3JpdGVyX2luaXQodHNkbiwgJmJ1Zl93cml0ZXIsIHRlc3Rfd3JpdGVfY2IsICZhcmcsCisJICAg IE5VTEwsIFNDX0xBUkdFX01BWENMQVNTICsgMSksICJidWZfd3JpdGVyX2luaXQoKSBzaG91bGQg T09NIik7CisJYXNzZXJ0KGJ1Zl93cml0ZXIuYnVmID09IE5VTEwpOworCisJY2hhciBzW1VOSVRf TUFYICsgMV07CisJc2l6ZV90IG5fdW5pdCwgaTsKKwlzc2l6ZV90IHVuaXQ7CisKKwltZW1zZXQo cywgJ2EnLCBVTklUX01BWCk7CisJYXJnID0gNDsgLyogU3RhcnRpbmcgdmFsdWUgb2YgcmFuZG9t IGFyZ3VtZW50LiAqLworCWFyZ19zdG9yZSA9IGFyZzsKKwlmb3IgKHVuaXQgPSBVTklUX01BWDsg dW5pdCA+PSAwOyB1bml0IC09IFVOSVRfTUFYIC8gNCkgeworCQkvKiB1bml0IGtlZXBzIGRlY3Jl YXNpbmcsIHNvIHN0cmxlbihzKSBpcyBhbHdheXMgdW5pdC4gKi8KKwkJc1t1bml0XSA9ICdcMCc7 CisJCWZvciAobl91bml0ID0gMTsgbl91bml0IDw9IDM7ICsrbl91bml0KSB7CisJCQl0ZXN0X3dy aXRlX2xlbiA9IDA7CisJCQlmb3IgKGkgPSAxOyBpIDw9IG5fdW5pdDsgKytpKSB7CisJCQkJYXJn ID0gcHJuZ19sZ19yYW5nZV91NjQoJmFyZywgNjQpOworCQkJCWJ1Zl93cml0ZXJfY2IoJmJ1Zl93 cml0ZXIsIHMpOworCQkJCWFzc2VydF91NjRfZXEoYXJnX3N0b3JlLCBhcmcsCisJCQkJICAgICJD YWxsIGJhY2sgYXJndW1lbnQgZGlkbid0IGdldCB0aHJvdWdoIik7CisJCQkJYXNzZXJ0X3p1X2Vx KHRlc3Rfd3JpdGVfbGVuLCBpICogdW5pdCwKKwkJCQkgICAgIkluY29ycmVjdCBsZW5ndGggYWZ0 ZXIgd3JpdGluZyAlenUgc3RyaW5ncyIKKwkJCQkgICAgIiBvZiBsZW5ndGggJXp1IiwgaSwgdW5p dCk7CisJCQl9CisJCQlidWZfd3JpdGVyX2ZsdXNoKCZidWZfd3JpdGVyKTsKKwkJCWV4cGVjdF96 dV9lcSh0ZXN0X3dyaXRlX2xlbiwgbl91bml0ICogdW5pdCwKKwkJCSAgICAiSW5jb3JyZWN0IGxl bmd0aCBhZnRlciBmbHVzaGluZyBhdCB0aGUgZW5kIG9mIgorCQkJICAgICIgd3JpdGluZyAlenUg c3RyaW5ncyBvZiBsZW5ndGggJXp1Iiwgbl91bml0LCB1bml0KTsKKwkJfQorCX0KKwlidWZfd3Jp dGVyX3Rlcm1pbmF0ZSh0c2RuLCAmYnVmX3dyaXRlcik7Cit9CitURVNUX0VORAorCitzdGF0aWMg aW50IHRlc3RfcmVhZF9jb3VudDsKK3N0YXRpYyBzaXplX3QgdGVzdF9yZWFkX2xlbjsKK3N0YXRp YyB1aW50NjRfdCBhcmdfc3VtOworCitzc2l6ZV90Cit0ZXN0X3JlYWRfY2Iodm9pZCAqY2JvcGFx dWUsIHZvaWQgKmJ1Ziwgc2l6ZV90IGxpbWl0KSB7CisJc3RhdGljIHVpbnQ2NF90IHJhbmQgPSA0 OworCisJYXJnX3N1bSArPSAqKHVpbnQ2NF90ICopY2JvcGFxdWU7CisJYXNzZXJ0X3p1X2d0KGxp bWl0LCAwLCAiTGltaXQgZm9yIHJlYWRfY2IgbXVzdCBiZSBwb3NpdGl2ZSIpOworCS0tdGVzdF9y ZWFkX2NvdW50OworCWlmICh0ZXN0X3JlYWRfY291bnQgPT0gMCkgeworCQlyZXR1cm4gLTE7CisJ fSBlbHNlIHsKKwkJc2l6ZV90IHJlYWRfbGVuID0gbGltaXQ7CisJCWlmIChsaW1pdCA+IDEpIHsK KwkJCXJhbmQgPSBwcm5nX3JhbmdlX3U2NCgmcmFuZCwgKHVpbnQ2NF90KWxpbWl0KTsKKwkJCXJl YWRfbGVuIC09IChzaXplX3QpcmFuZDsKKwkJfQorCQlhc3NlcnQocmVhZF9sZW4gPiAwKTsKKwkJ bWVtc2V0KGJ1ZiwgJ2EnLCByZWFkX2xlbik7CisJCXNpemVfdCBwcmV2X3Rlc3RfcmVhZF9sZW4g PSB0ZXN0X3JlYWRfbGVuOworCQl0ZXN0X3JlYWRfbGVuICs9IHJlYWRfbGVuOworCQlhc3NlcnRf enVfbGUocHJldl90ZXN0X3JlYWRfbGVuLCB0ZXN0X3JlYWRfbGVuLAorCQkgICAgIlRlc3QgcmVh ZCBvdmVyZmxvd2VkIik7CisJCXJldHVybiByZWFkX2xlbjsKKwl9Cit9CisKK3N0YXRpYyB2b2lk Cit0ZXN0X2J1Zl93cml0ZXJfcGlwZV9ib2R5KHRzZG5fdCAqdHNkbiwgYnVmX3dyaXRlcl90ICpi dWZfd3JpdGVyKSB7CisJYXJnID0gNDsgLyogU3RhcnRpbmcgdmFsdWUgb2YgcmFuZG9tIGFyZ3Vt ZW50LiAqLworCWZvciAoaW50IGNvdW50ID0gNTsgY291bnQgPiAwOyAtLWNvdW50KSB7CisJCWFy ZyA9IHBybmdfbGdfcmFuZ2VfdTY0KCZhcmcsIDY0KTsKKwkJYXJnX3N1bSA9IDA7CisJCXRlc3Rf cmVhZF9jb3VudCA9IGNvdW50OworCQl0ZXN0X3JlYWRfbGVuID0gMDsKKwkJdGVzdF93cml0ZV9s ZW4gPSAwOworCQlidWZfd3JpdGVyX3BpcGUoYnVmX3dyaXRlciwgdGVzdF9yZWFkX2NiLCAmYXJn KTsKKwkJYXNzZXJ0KHRlc3RfcmVhZF9jb3VudCA9PSAwKTsKKwkJZXhwZWN0X3U2NF9lcShhcmdf c3VtLCBhcmcgKiBjb3VudCwgIiIpOworCQlleHBlY3RfenVfZXEodGVzdF93cml0ZV9sZW4sIHRl c3RfcmVhZF9sZW4sCisJCSAgICAiV3JpdGUgbGVuZ3RoIHNob3VsZCBiZSBlcXVhbCB0byByZWFk IGxlbmd0aCIpOworCX0KKwlidWZfd3JpdGVyX3Rlcm1pbmF0ZSh0c2RuLCBidWZfd3JpdGVyKTsK K30KKworVEVTVF9CRUdJTih0ZXN0X2J1Zl93cml0ZV9waXBlKSB7CisJYnVmX3dyaXRlcl90IGJ1 Zl93cml0ZXI7CisJdHNkbl90ICp0c2RuID0gdHNkbl9mZXRjaCgpOworCWFzc2VydF9mYWxzZShi dWZfd3JpdGVyX2luaXQodHNkbiwgJmJ1Zl93cml0ZXIsIHRlc3Rfd3JpdGVfY2IsICZhcmcsCisJ ICAgIHRlc3RfYnVmLCBURVNUX0JVRl9TSVpFKSwKKwkgICAgImJ1Zl93cml0ZXJfaW5pdCgpIHNo b3VsZCBub3QgZW5jb3VudGVyIGVycm9yIG9uIHN0YXRpYyBidWZmZXIiKTsKKwl0ZXN0X2J1Zl93 cml0ZXJfcGlwZV9ib2R5KHRzZG4sICZidWZfd3JpdGVyKTsKK30KK1RFU1RfRU5ECisKK1RFU1Rf QkVHSU4odGVzdF9idWZfd3JpdGVfcGlwZV9vb20pIHsKKwlidWZfd3JpdGVyX3QgYnVmX3dyaXRl cjsKKwl0c2RuX3QgKnRzZG4gPSB0c2RuX2ZldGNoKCk7CisJYXNzZXJ0X3RydWUoYnVmX3dyaXRl cl9pbml0KHRzZG4sICZidWZfd3JpdGVyLCB0ZXN0X3dyaXRlX2NiLCAmYXJnLAorCSAgICBOVUxM LCBTQ19MQVJHRV9NQVhDTEFTUyArIDEpLCAiYnVmX3dyaXRlcl9pbml0KCkgc2hvdWxkIE9PTSIp OworCXRlc3RfYnVmX3dyaXRlcl9waXBlX2JvZHkodHNkbiwgJmJ1Zl93cml0ZXIpOworfQorVEVT VF9FTkQKKworaW50CittYWluKHZvaWQpIHsKKwlyZXR1cm4gdGVzdCgKKwkgICAgdGVzdF9idWZf d3JpdGVfc3RhdGljLAorCSAgICB0ZXN0X2J1Zl93cml0ZV9keW5hbWljLAorCSAgICB0ZXN0X2J1 Zl93cml0ZV9vb20sCisJICAgIHRlc3RfYnVmX3dyaXRlX3BpcGUsCisJICAgIHRlc3RfYnVmX3dy aXRlX3BpcGVfb29tKTsKK30KCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9q ZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvY2FjaGVfYmluLmMgYi8zODktZHMtYmFzZS0zLjMuMC1i dWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvY2FjaGVfYmluLmMKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMC4uM2I2ZGJhYgotLS0gL2Rldi9udWxsCisrKyBiLzM4OS1kcy1i YXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9jYWNoZV9iaW4uYwpAQCAt MCwwICsxLDM4NCBAQAorI2luY2x1ZGUgInRlc3QvamVtYWxsb2NfdGVzdC5oIgorCitzdGF0aWMg dm9pZAorZG9fZmlsbF90ZXN0KGNhY2hlX2Jpbl90ICpiaW4sIGNhY2hlX2Jpbl9pbmZvX3QgKmlu Zm8sIHZvaWQgKipwdHJzLAorICAgIGNhY2hlX2Jpbl9zel90IG5jYWNoZWRfbWF4LCBjYWNoZV9i aW5fc3pfdCBuZmlsbF9hdHRlbXB0LAorICAgIGNhY2hlX2Jpbl9zel90IG5maWxsX3N1Y2NlZWQp IHsKKwlib29sIHN1Y2Nlc3M7CisJdm9pZCAqcHRyOworCWFzc2VydF90cnVlKGNhY2hlX2Jpbl9u Y2FjaGVkX2dldF9sb2NhbChiaW4sIGluZm8pID09IDAsICIiKTsKKwlDQUNIRV9CSU5fUFRSX0FS UkFZX0RFQ0xBUkUoYXJyLCBuZmlsbF9hdHRlbXB0KTsKKwljYWNoZV9iaW5faW5pdF9wdHJfYXJy YXlfZm9yX2ZpbGwoYmluLCBpbmZvLCAmYXJyLCBuZmlsbF9hdHRlbXB0KTsKKwlmb3IgKGNhY2hl X2Jpbl9zel90IGkgPSAwOyBpIDwgbmZpbGxfc3VjY2VlZDsgaSsrKSB7CisJCWFyci5wdHJbaV0g PSAmcHRyc1tpXTsKKwl9CisJY2FjaGVfYmluX2ZpbmlzaF9maWxsKGJpbiwgaW5mbywgJmFyciwg bmZpbGxfc3VjY2VlZCk7CisJZXhwZWN0X3RydWUoY2FjaGVfYmluX25jYWNoZWRfZ2V0X2xvY2Fs KGJpbiwgaW5mbykgPT0gbmZpbGxfc3VjY2VlZCwKKwkgICAgIiIpOworCWNhY2hlX2Jpbl9sb3df d2F0ZXJfc2V0KGJpbik7CisKKwlmb3IgKGNhY2hlX2Jpbl9zel90IGkgPSAwOyBpIDwgbmZpbGxf c3VjY2VlZDsgaSsrKSB7CisJCXB0ciA9IGNhY2hlX2Jpbl9hbGxvYyhiaW4sICZzdWNjZXNzKTsK KwkJZXhwZWN0X3RydWUoc3VjY2VzcywgIiIpOworCQlleHBlY3RfcHRyX2VxKHB0ciwgKHZvaWQg KikmcHRyc1tpXSwKKwkJICAgICJTaG91bGQgcG9wIGluIG9yZGVyIGZpbGxlZCIpOworCQlleHBl Y3RfdHJ1ZShjYWNoZV9iaW5fbG93X3dhdGVyX2dldChiaW4sIGluZm8pCisJCSAgICA9PSBuZmls bF9zdWNjZWVkIC0gaSAtIDEsICIiKTsKKwl9CisJZXhwZWN0X3RydWUoY2FjaGVfYmluX25jYWNo ZWRfZ2V0X2xvY2FsKGJpbiwgaW5mbykgPT0gMCwgIiIpOworCWV4cGVjdF90cnVlKGNhY2hlX2Jp bl9sb3dfd2F0ZXJfZ2V0KGJpbiwgaW5mbykgPT0gMCwgIiIpOworfQorCitzdGF0aWMgdm9pZAor ZG9fZmx1c2hfdGVzdChjYWNoZV9iaW5fdCAqYmluLCBjYWNoZV9iaW5faW5mb190ICppbmZvLCB2 b2lkICoqcHRycywKKyAgICBjYWNoZV9iaW5fc3pfdCBuZmlsbCwgY2FjaGVfYmluX3N6X3QgbmZs dXNoKSB7CisJYm9vbCBzdWNjZXNzOworCWFzc2VydF90cnVlKGNhY2hlX2Jpbl9uY2FjaGVkX2dl dF9sb2NhbChiaW4sIGluZm8pID09IDAsICIiKTsKKworCWZvciAoY2FjaGVfYmluX3N6X3QgaSA9 IDA7IGkgPCBuZmlsbDsgaSsrKSB7CisJCXN1Y2Nlc3MgPSBjYWNoZV9iaW5fZGFsbG9jX2Vhc3ko YmluLCAmcHRyc1tpXSk7CisJCWV4cGVjdF90cnVlKHN1Y2Nlc3MsICIiKTsKKwl9CisKKwlDQUNI RV9CSU5fUFRSX0FSUkFZX0RFQ0xBUkUoYXJyLCBuZmx1c2gpOworCWNhY2hlX2Jpbl9pbml0X3B0 cl9hcnJheV9mb3JfZmx1c2goYmluLCBpbmZvLCAmYXJyLCBuZmx1c2gpOworCWZvciAoY2FjaGVf YmluX3N6X3QgaSA9IDA7IGkgPCBuZmx1c2g7IGkrKykgeworCQlleHBlY3RfcHRyX2VxKGFyci5w dHJbaV0sICZwdHJzW25mbHVzaCAtIGkgLSAxXSwgIiIpOworCX0KKwljYWNoZV9iaW5fZmluaXNo X2ZsdXNoKGJpbiwgaW5mbywgJmFyciwgbmZsdXNoKTsKKworCWV4cGVjdF90cnVlKGNhY2hlX2Jp bl9uY2FjaGVkX2dldF9sb2NhbChiaW4sIGluZm8pID09IG5maWxsIC0gbmZsdXNoLAorCSAgICAi Iik7CisJd2hpbGUgKGNhY2hlX2Jpbl9uY2FjaGVkX2dldF9sb2NhbChiaW4sIGluZm8pID4gMCkg eworCQljYWNoZV9iaW5fYWxsb2MoYmluLCAmc3VjY2Vzcyk7CisJfQorfQorCitzdGF0aWMgdm9p ZAorZG9fYmF0Y2hfYWxsb2NfdGVzdChjYWNoZV9iaW5fdCAqYmluLCBjYWNoZV9iaW5faW5mb190 ICppbmZvLCB2b2lkICoqcHRycywKKyAgICBjYWNoZV9iaW5fc3pfdCBuZmlsbCwgc2l6ZV90IGJh dGNoKSB7CisJYXNzZXJ0X3RydWUoY2FjaGVfYmluX25jYWNoZWRfZ2V0X2xvY2FsKGJpbiwgaW5m bykgPT0gMCwgIiIpOworCUNBQ0hFX0JJTl9QVFJfQVJSQVlfREVDTEFSRShhcnIsIG5maWxsKTsK KwljYWNoZV9iaW5faW5pdF9wdHJfYXJyYXlfZm9yX2ZpbGwoYmluLCBpbmZvLCAmYXJyLCBuZmls bCk7CisJZm9yIChjYWNoZV9iaW5fc3pfdCBpID0gMDsgaSA8IG5maWxsOyBpKyspIHsKKwkJYXJy LnB0cltpXSA9ICZwdHJzW2ldOworCX0KKwljYWNoZV9iaW5fZmluaXNoX2ZpbGwoYmluLCBpbmZv LCAmYXJyLCBuZmlsbCk7CisJYXNzZXJ0X3RydWUoY2FjaGVfYmluX25jYWNoZWRfZ2V0X2xvY2Fs KGJpbiwgaW5mbykgPT0gbmZpbGwsICIiKTsKKwljYWNoZV9iaW5fbG93X3dhdGVyX3NldChiaW4p OworCisJdm9pZCAqKm91dCA9IG1hbGxvYygoYmF0Y2ggKyAxKSAqIHNpemVvZih2b2lkICopKTsK KwlzaXplX3QgbiA9IGNhY2hlX2Jpbl9hbGxvY19iYXRjaChiaW4sIGJhdGNoLCBvdXQpOworCWFz c2VydF90cnVlKG4gPT0gKChzaXplX3QpbmZpbGwgPCBiYXRjaCA/IChzaXplX3QpbmZpbGwgOiBi YXRjaCksICIiKTsKKwlmb3IgKGNhY2hlX2Jpbl9zel90IGkgPSAwOyBpIDwgKGNhY2hlX2Jpbl9z el90KW47IGkrKykgeworCQlleHBlY3RfcHRyX2VxKG91dFtpXSwgJnB0cnNbaV0sICIiKTsKKwl9 CisJZXhwZWN0X3RydWUoY2FjaGVfYmluX2xvd193YXRlcl9nZXQoYmluLCBpbmZvKSA9PSBuZmls bCAtCisJICAgIChjYWNoZV9iaW5fc3pfdCluLCAiIik7CisJd2hpbGUgKGNhY2hlX2Jpbl9uY2Fj aGVkX2dldF9sb2NhbChiaW4sIGluZm8pID4gMCkgeworCQlib29sIHN1Y2Nlc3M7CisJCWNhY2hl X2Jpbl9hbGxvYyhiaW4sICZzdWNjZXNzKTsKKwl9CisJZnJlZShvdXQpOworfQorCitzdGF0aWMg dm9pZAordGVzdF9iaW5faW5pdChjYWNoZV9iaW5fdCAqYmluLCBjYWNoZV9iaW5faW5mb190ICpp bmZvKSB7CisJc2l6ZV90IHNpemU7CisJc2l6ZV90IGFsaWdubWVudDsKKwljYWNoZV9iaW5faW5m b19jb21wdXRlX2FsbG9jKGluZm8sIDEsICZzaXplLCAmYWxpZ25tZW50KTsKKwl2b2lkICptZW0g PSBtYWxsb2N4KHNpemUsIE1BTExPQ1hfQUxJR04oYWxpZ25tZW50KSk7CisJYXNzZXJ0X3B0cl9u b3RfbnVsbChtZW0sICJVbmV4cGVjdGVkIG1hbGxvY3ggZmFpbHVyZSIpOworCisJc2l6ZV90IGN1 cl9vZmZzZXQgPSAwOworCWNhY2hlX2Jpbl9wcmVpbmNyZW1lbnQoaW5mbywgMSwgbWVtLCAmY3Vy X29mZnNldCk7CisJY2FjaGVfYmluX2luaXQoYmluLCBpbmZvLCBtZW0sICZjdXJfb2Zmc2V0KTsK KwljYWNoZV9iaW5fcG9zdGluY3JlbWVudChpbmZvLCAxLCBtZW0sICZjdXJfb2Zmc2V0KTsKKwlh c3NlcnRfenVfZXEoY3VyX29mZnNldCwgc2l6ZSwgIlNob3VsZCB1c2UgYWxsIHJlcXVlc3RlZCBt ZW1vcnkiKTsKK30KKworVEVTVF9CRUdJTih0ZXN0X2NhY2hlX2JpbikgeworCWNvbnN0IGludCBu Y2FjaGVkX21heCA9IDEwMDsKKwlib29sIHN1Y2Nlc3M7CisJdm9pZCAqcHRyOworCisJY2FjaGVf YmluX2luZm9fdCBpbmZvOworCWNhY2hlX2Jpbl9pbmZvX2luaXQoJmluZm8sIG5jYWNoZWRfbWF4 KTsKKwljYWNoZV9iaW5fdCBiaW47CisJdGVzdF9iaW5faW5pdCgmYmluLCAmaW5mbyk7CisKKwkv KiBJbml0aWFsaXplIHRvIGVtcHR5OyBzaG91bGQgdGhlbiBoYXZlIDAgZWxlbWVudHMuICovCisJ ZXhwZWN0X2RfZXEobmNhY2hlZF9tYXgsIGNhY2hlX2Jpbl9pbmZvX25jYWNoZWRfbWF4KCZpbmZv KSwgIiIpOworCWV4cGVjdF90cnVlKGNhY2hlX2Jpbl9uY2FjaGVkX2dldF9sb2NhbCgmYmluLCAm aW5mbykgPT0gMCwgIiIpOworCWV4cGVjdF90cnVlKGNhY2hlX2Jpbl9sb3dfd2F0ZXJfZ2V0KCZi aW4sICZpbmZvKSA9PSAwLCAiIik7CisKKwlwdHIgPSBjYWNoZV9iaW5fYWxsb2NfZWFzeSgmYmlu LCAmc3VjY2Vzcyk7CisJZXhwZWN0X2ZhbHNlKHN1Y2Nlc3MsICJTaG91bGRuJ3Qgc3VjY2Vzc2Z1 bGx5IGFsbG9jYXRlIHdoZW4gZW1wdHkiKTsKKwlleHBlY3RfcHRyX251bGwocHRyLCAiU2hvdWxk bid0IGdldCBhIG5vbi1udWxsIHBvaW50ZXIgb24gZmFpbHVyZSIpOworCisJcHRyID0gY2FjaGVf YmluX2FsbG9jKCZiaW4sICZzdWNjZXNzKTsKKwlleHBlY3RfZmFsc2Uoc3VjY2VzcywgIlNob3Vs ZG4ndCBzdWNjZXNzZnVsbHkgYWxsb2NhdGUgd2hlbiBlbXB0eSIpOworCWV4cGVjdF9wdHJfbnVs bChwdHIsICJTaG91bGRuJ3QgZ2V0IGEgbm9uLW51bGwgcG9pbnRlciBvbiBmYWlsdXJlIik7CisK KwkvKgorCSAqIFdlIGFsbG9jYXRlIG9uZSBtb3JlIGl0ZW0gdGhhbiBuY2FjaGVkX21heCwgc28g d2UgY2FuIHRlc3QgY2FjaGUgYmluCisJICogZXhoYXVzdGlvbi4KKwkgKi8KKwl2b2lkICoqcHRy cyA9IG1hbGxvY3goc2l6ZW9mKHZvaWQgKikgKiAobmNhY2hlZF9tYXggKyAxKSwgMCk7CisJYXNz ZXJ0X3B0cl9ub3RfbnVsbChwdHJzLCAiVW5leHBlY3RlZCBtYWxsb2N4IGZhaWx1cmUiKTsKKwlm b3IgIChjYWNoZV9iaW5fc3pfdCBpID0gMDsgaSA8IG5jYWNoZWRfbWF4OyBpKyspIHsKKwkJZXhw ZWN0X3RydWUoY2FjaGVfYmluX25jYWNoZWRfZ2V0X2xvY2FsKCZiaW4sICZpbmZvKSA9PSBpLCAi Iik7CisJCXN1Y2Nlc3MgPSBjYWNoZV9iaW5fZGFsbG9jX2Vhc3koJmJpbiwgJnB0cnNbaV0pOwor CQlleHBlY3RfdHJ1ZShzdWNjZXNzLAorCQkgICAgIlNob3VsZCBiZSBhYmxlIHRvIGRhbGxvYyBp bnRvIGEgbm9uLWZ1bGwgY2FjaGUgYmluLiIpOworCQlleHBlY3RfdHJ1ZShjYWNoZV9iaW5fbG93 X3dhdGVyX2dldCgmYmluLCAmaW5mbykgPT0gMCwKKwkJICAgICJQdXNoZXMgYW5kIHBvcHMgc2hv dWxkbid0IGNoYW5nZSBsb3cgd2F0ZXIgb2YgemVyby4iKTsKKwl9CisJZXhwZWN0X3RydWUoY2Fj aGVfYmluX25jYWNoZWRfZ2V0X2xvY2FsKCZiaW4sICZpbmZvKSA9PSBuY2FjaGVkX21heCwKKwkg ICAgIiIpOworCXN1Y2Nlc3MgPSBjYWNoZV9iaW5fZGFsbG9jX2Vhc3koJmJpbiwgJnB0cnNbbmNh Y2hlZF9tYXhdKTsKKwlleHBlY3RfZmFsc2Uoc3VjY2VzcywgIlNob3VsZG4ndCBiZSBhYmxlIHRv IGRhbGxvYyBpbnRvIGEgZnVsbCBiaW4uIik7CisKKwljYWNoZV9iaW5fbG93X3dhdGVyX3NldCgm YmluKTsKKworCWZvciAoY2FjaGVfYmluX3N6X3QgaSA9IDA7IGkgPCBuY2FjaGVkX21heDsgaSsr KSB7CisJCWV4cGVjdF90cnVlKGNhY2hlX2Jpbl9sb3dfd2F0ZXJfZ2V0KCZiaW4sICZpbmZvKQor CQkgICAgPT0gbmNhY2hlZF9tYXggLSBpLCAiIik7CisJCWV4cGVjdF90cnVlKGNhY2hlX2Jpbl9u Y2FjaGVkX2dldF9sb2NhbCgmYmluLCAmaW5mbykKKwkJICAgID09IG5jYWNoZWRfbWF4IC0gaSwg IiIpOworCQkvKgorCQkgKiBUaGlzIHNob3VsZCBmYWlsIC0tIHRoZSBlYXN5IHZhcmlhbnQgY2Fu J3QgY2hhbmdlIHRoZSBsb3cKKwkJICogd2F0ZXIgbWFyay4KKwkJICovCisJCXB0ciA9IGNhY2hl X2Jpbl9hbGxvY19lYXN5KCZiaW4sICZzdWNjZXNzKTsKKwkJZXhwZWN0X3B0cl9udWxsKHB0ciwg IiIpOworCQlleHBlY3RfZmFsc2Uoc3VjY2VzcywgIiIpOworCQlleHBlY3RfdHJ1ZShjYWNoZV9i aW5fbG93X3dhdGVyX2dldCgmYmluLCAmaW5mbykKKwkJICAgID09IG5jYWNoZWRfbWF4IC0gaSwg IiIpOworCQlleHBlY3RfdHJ1ZShjYWNoZV9iaW5fbmNhY2hlZF9nZXRfbG9jYWwoJmJpbiwgJmlu Zm8pCisJCSAgICA9PSBuY2FjaGVkX21heCAtIGksICIiKTsKKworCQkvKiBUaGlzIHNob3VsZCBz dWNjZWVkLCB0aG91Z2guICovCisJCXB0ciA9IGNhY2hlX2Jpbl9hbGxvYygmYmluLCAmc3VjY2Vz cyk7CisJCWV4cGVjdF90cnVlKHN1Y2Nlc3MsICIiKTsKKwkJZXhwZWN0X3B0cl9lcShwdHIsICZw dHJzW25jYWNoZWRfbWF4IC0gaSAtIDFdLAorCQkgICAgIkFsbG9jIHNob3VsZCBwb3AgaW4gc3Rh Y2sgb3JkZXIiKTsKKwkJZXhwZWN0X3RydWUoY2FjaGVfYmluX2xvd193YXRlcl9nZXQoJmJpbiwg JmluZm8pCisJCSAgICA9PSBuY2FjaGVkX21heCAtIGkgLSAxLCAiIik7CisJCWV4cGVjdF90cnVl KGNhY2hlX2Jpbl9uY2FjaGVkX2dldF9sb2NhbCgmYmluLCAmaW5mbykKKwkJICAgID09IG5jYWNo ZWRfbWF4IC0gaSAtIDEsICIiKTsKKwl9CisJLyogTm93IHdlJ3JlIGVtcHR5IC0tIGFsbCBhbGxv YyBhdHRlbXB0cyBzaG91bGQgZmFpbC4gKi8KKwlleHBlY3RfdHJ1ZShjYWNoZV9iaW5fbmNhY2hl ZF9nZXRfbG9jYWwoJmJpbiwgJmluZm8pID09IDAsICIiKTsKKwlwdHIgPSBjYWNoZV9iaW5fYWxs b2NfZWFzeSgmYmluLCAmc3VjY2Vzcyk7CisJZXhwZWN0X3B0cl9udWxsKHB0ciwgIiIpOworCWV4 cGVjdF9mYWxzZShzdWNjZXNzLCAiIik7CisJcHRyID0gY2FjaGVfYmluX2FsbG9jKCZiaW4sICZz dWNjZXNzKTsKKwlleHBlY3RfcHRyX251bGwocHRyLCAiIik7CisJZXhwZWN0X2ZhbHNlKHN1Y2Nl c3MsICIiKTsKKworCWZvciAoY2FjaGVfYmluX3N6X3QgaSA9IDA7IGkgPCBuY2FjaGVkX21heCAv IDI7IGkrKykgeworCQljYWNoZV9iaW5fZGFsbG9jX2Vhc3koJmJpbiwgJnB0cnNbaV0pOworCX0K KwljYWNoZV9iaW5fbG93X3dhdGVyX3NldCgmYmluKTsKKworCWZvciAoY2FjaGVfYmluX3N6X3Qg aSA9IG5jYWNoZWRfbWF4IC8gMjsgaSA8IG5jYWNoZWRfbWF4OyBpKyspIHsKKwkJY2FjaGVfYmlu X2RhbGxvY19lYXN5KCZiaW4sICZwdHJzW2ldKTsKKwl9CisJZXhwZWN0X3RydWUoY2FjaGVfYmlu X25jYWNoZWRfZ2V0X2xvY2FsKCZiaW4sICZpbmZvKSA9PSBuY2FjaGVkX21heCwKKwkgICAgIiIp OworCWZvciAoY2FjaGVfYmluX3N6X3QgaSA9IG5jYWNoZWRfbWF4IC0gMTsgaSA+PSBuY2FjaGVk X21heCAvIDI7IGktLSkgeworCQkvKgorCQkgKiBTaXplIGlzIGJpZ2dlciB0aGFuIGxvdyB3YXRl ciAtLSB0aGUgcmVkdWNlZCB2ZXJzaW9uIHNob3VsZAorCQkgKiBzdWNjZWVkLgorCQkgKi8KKwkJ cHRyID0gY2FjaGVfYmluX2FsbG9jX2Vhc3koJmJpbiwgJnN1Y2Nlc3MpOworCQlleHBlY3RfdHJ1 ZShzdWNjZXNzLCAiIik7CisJCWV4cGVjdF9wdHJfZXEocHRyLCAmcHRyc1tpXSwgIiIpOworCX0K KwkvKiBCdXQgbm93LCB3ZSd2ZSBoaXQgbG93LXdhdGVyLiAqLworCXB0ciA9IGNhY2hlX2Jpbl9h bGxvY19lYXN5KCZiaW4sICZzdWNjZXNzKTsKKwlleHBlY3RfZmFsc2Uoc3VjY2VzcywgIiIpOwor CWV4cGVjdF9wdHJfbnVsbChwdHIsICIiKTsKKworCS8qIFdlJ3JlIGdvaW5nIHRvIHRlc3QgZmls bGluZyAtLSB3ZSBtdXN0IGJlIGVtcHR5IHRvIHN0YXJ0LiAqLworCXdoaWxlIChjYWNoZV9iaW5f bmNhY2hlZF9nZXRfbG9jYWwoJmJpbiwgJmluZm8pKSB7CisJCWNhY2hlX2Jpbl9hbGxvYygmYmlu LCAmc3VjY2Vzcyk7CisJCWV4cGVjdF90cnVlKHN1Y2Nlc3MsICIiKTsKKwl9CisKKwkvKiBUZXN0 IGZpbGwuICovCisJLyogVHJ5IHRvIGZpbGwgYWxsLCBzdWNjZWVkIGZ1bGx5LiAqLworCWRvX2Zp bGxfdGVzdCgmYmluLCAmaW5mbywgcHRycywgbmNhY2hlZF9tYXgsIG5jYWNoZWRfbWF4LCBuY2Fj aGVkX21heCk7CisJLyogVHJ5IHRvIGZpbGwgYWxsLCBzdWNjZWVkIHBhcnRpYWxseS4gKi8KKwlk b19maWxsX3Rlc3QoJmJpbiwgJmluZm8sIHB0cnMsIG5jYWNoZWRfbWF4LCBuY2FjaGVkX21heCwK KwkgICAgbmNhY2hlZF9tYXggLyAyKTsKKwkvKiBUcnkgdG8gZmlsbCBhbGwsIGZhaWwgY29tcGxl dGVseS4gKi8KKwlkb19maWxsX3Rlc3QoJmJpbiwgJmluZm8sIHB0cnMsIG5jYWNoZWRfbWF4LCBu Y2FjaGVkX21heCwgMCk7CisKKwkvKiBUcnkgdG8gZmlsbCBzb21lLCBzdWNjZWVkIGZ1bGx5LiAq LworCWRvX2ZpbGxfdGVzdCgmYmluLCAmaW5mbywgcHRycywgbmNhY2hlZF9tYXgsIG5jYWNoZWRf bWF4IC8gMiwKKwkgICAgbmNhY2hlZF9tYXggLyAyKTsKKwkvKiBUcnkgdG8gZmlsbCBzb21lLCBz dWNjZWVkIHBhcnRpYWxseS4gKi8KKwlkb19maWxsX3Rlc3QoJmJpbiwgJmluZm8sIHB0cnMsIG5j YWNoZWRfbWF4LCBuY2FjaGVkX21heCAvIDIsCisJICAgIG5jYWNoZWRfbWF4IC8gNCk7CisJLyog VHJ5IHRvIGZpbGwgc29tZSwgZmFpbCBjb21wbGV0ZWx5LiAqLworCWRvX2ZpbGxfdGVzdCgmYmlu LCAmaW5mbywgcHRycywgbmNhY2hlZF9tYXgsIG5jYWNoZWRfbWF4IC8gMiwgMCk7CisKKwlkb19m bHVzaF90ZXN0KCZiaW4sICZpbmZvLCBwdHJzLCBuY2FjaGVkX21heCwgbmNhY2hlZF9tYXgpOwor CWRvX2ZsdXNoX3Rlc3QoJmJpbiwgJmluZm8sIHB0cnMsIG5jYWNoZWRfbWF4LCBuY2FjaGVkX21h eCAvIDIpOworCWRvX2ZsdXNoX3Rlc3QoJmJpbiwgJmluZm8sIHB0cnMsIG5jYWNoZWRfbWF4LCAw KTsKKwlkb19mbHVzaF90ZXN0KCZiaW4sICZpbmZvLCBwdHJzLCBuY2FjaGVkX21heCAvIDIsIG5j YWNoZWRfbWF4IC8gMik7CisJZG9fZmx1c2hfdGVzdCgmYmluLCAmaW5mbywgcHRycywgbmNhY2hl ZF9tYXggLyAyLCBuY2FjaGVkX21heCAvIDQpOworCWRvX2ZsdXNoX3Rlc3QoJmJpbiwgJmluZm8s IHB0cnMsIG5jYWNoZWRfbWF4IC8gMiwgMCk7CisKKwlkb19iYXRjaF9hbGxvY190ZXN0KCZiaW4s ICZpbmZvLCBwdHJzLCBuY2FjaGVkX21heCwgbmNhY2hlZF9tYXgpOworCWRvX2JhdGNoX2FsbG9j X3Rlc3QoJmJpbiwgJmluZm8sIHB0cnMsIG5jYWNoZWRfbWF4LCBuY2FjaGVkX21heCAqIDIpOwor CWRvX2JhdGNoX2FsbG9jX3Rlc3QoJmJpbiwgJmluZm8sIHB0cnMsIG5jYWNoZWRfbWF4LCBuY2Fj aGVkX21heCAvIDIpOworCWRvX2JhdGNoX2FsbG9jX3Rlc3QoJmJpbiwgJmluZm8sIHB0cnMsIG5j YWNoZWRfbWF4LCAyKTsKKwlkb19iYXRjaF9hbGxvY190ZXN0KCZiaW4sICZpbmZvLCBwdHJzLCBu Y2FjaGVkX21heCwgMSk7CisJZG9fYmF0Y2hfYWxsb2NfdGVzdCgmYmluLCAmaW5mbywgcHRycywg bmNhY2hlZF9tYXgsIDApOworCWRvX2JhdGNoX2FsbG9jX3Rlc3QoJmJpbiwgJmluZm8sIHB0cnMs IG5jYWNoZWRfbWF4IC8gMiwKKwkgICAgbmNhY2hlZF9tYXggLyAyKTsKKwlkb19iYXRjaF9hbGxv Y190ZXN0KCZiaW4sICZpbmZvLCBwdHJzLCBuY2FjaGVkX21heCAvIDIsIG5jYWNoZWRfbWF4KTsK Kwlkb19iYXRjaF9hbGxvY190ZXN0KCZiaW4sICZpbmZvLCBwdHJzLCBuY2FjaGVkX21heCAvIDIs CisJICAgIG5jYWNoZWRfbWF4IC8gNCk7CisJZG9fYmF0Y2hfYWxsb2NfdGVzdCgmYmluLCAmaW5m bywgcHRycywgbmNhY2hlZF9tYXggLyAyLCAyKTsKKwlkb19iYXRjaF9hbGxvY190ZXN0KCZiaW4s ICZpbmZvLCBwdHJzLCBuY2FjaGVkX21heCAvIDIsIDEpOworCWRvX2JhdGNoX2FsbG9jX3Rlc3Qo JmJpbiwgJmluZm8sIHB0cnMsIG5jYWNoZWRfbWF4IC8gMiwgMCk7CisJZG9fYmF0Y2hfYWxsb2Nf dGVzdCgmYmluLCAmaW5mbywgcHRycywgMiwgbmNhY2hlZF9tYXgpOworCWRvX2JhdGNoX2FsbG9j X3Rlc3QoJmJpbiwgJmluZm8sIHB0cnMsIDIsIDIpOworCWRvX2JhdGNoX2FsbG9jX3Rlc3QoJmJp biwgJmluZm8sIHB0cnMsIDIsIDEpOworCWRvX2JhdGNoX2FsbG9jX3Rlc3QoJmJpbiwgJmluZm8s IHB0cnMsIDIsIDApOworCWRvX2JhdGNoX2FsbG9jX3Rlc3QoJmJpbiwgJmluZm8sIHB0cnMsIDEs IDIpOworCWRvX2JhdGNoX2FsbG9jX3Rlc3QoJmJpbiwgJmluZm8sIHB0cnMsIDEsIDEpOworCWRv X2JhdGNoX2FsbG9jX3Rlc3QoJmJpbiwgJmluZm8sIHB0cnMsIDEsIDApOworCWRvX2JhdGNoX2Fs bG9jX3Rlc3QoJmJpbiwgJmluZm8sIHB0cnMsIDAsIDIpOworCWRvX2JhdGNoX2FsbG9jX3Rlc3Qo JmJpbiwgJmluZm8sIHB0cnMsIDAsIDEpOworCWRvX2JhdGNoX2FsbG9jX3Rlc3QoJmJpbiwgJmlu Zm8sIHB0cnMsIDAsIDApOworCisJZnJlZShwdHJzKTsKK30KK1RFU1RfRU5ECisKK3N0YXRpYyB2 b2lkCitkb19mbHVzaF9zdGFzaGVkX3Rlc3QoY2FjaGVfYmluX3QgKmJpbiwgY2FjaGVfYmluX2lu Zm9fdCAqaW5mbywgdm9pZCAqKnB0cnMsCisgICAgY2FjaGVfYmluX3N6X3QgbmZpbGwsIGNhY2hl X2Jpbl9zel90IG5zdGFzaCkgeworCWV4cGVjdF90cnVlKGNhY2hlX2Jpbl9uY2FjaGVkX2dldF9s b2NhbChiaW4sIGluZm8pID09IDAsCisJICAgICJCaW4gbm90IGVtcHR5Iik7CisJZXhwZWN0X3Ry dWUoY2FjaGVfYmluX25zdGFzaGVkX2dldF9sb2NhbChiaW4sIGluZm8pID09IDAsCisJICAgICJC aW4gbm90IGVtcHR5Iik7CisJZXhwZWN0X3RydWUobmZpbGwgKyBuc3Rhc2ggPD0gaW5mby0+bmNh Y2hlZF9tYXgsICJFeGNlZWRlZCBtYXgiKTsKKworCWJvb2wgcmV0OworCS8qIEZpbGwgKi8KKwlm b3IgKGNhY2hlX2Jpbl9zel90IGkgPSAwOyBpIDwgbmZpbGw7IGkrKykgeworCQlyZXQgPSBjYWNo ZV9iaW5fZGFsbG9jX2Vhc3koYmluLCAmcHRyc1tpXSk7CisJCWV4cGVjdF90cnVlKHJldCwgIlVu ZXhwZWN0ZWQgZmlsbCBmYWlsdXJlIik7CisJfQorCWV4cGVjdF90cnVlKGNhY2hlX2Jpbl9uY2Fj aGVkX2dldF9sb2NhbChiaW4sIGluZm8pID09IG5maWxsLAorCSAgICAiV3JvbmcgY2FjaGVkIGNv dW50Iik7CisKKwkvKiBTdGFzaCAqLworCWZvciAoY2FjaGVfYmluX3N6X3QgaSA9IDA7IGkgPCBu c3Rhc2g7IGkrKykgeworCQlyZXQgPSBjYWNoZV9iaW5fc3Rhc2goYmluLCAmcHRyc1tpICsgbmZp bGxdKTsKKwkJZXhwZWN0X3RydWUocmV0LCAiVW5leHBlY3RlZCBzdGFzaCBmYWlsdXJlIik7CisJ fQorCWV4cGVjdF90cnVlKGNhY2hlX2Jpbl9uc3Rhc2hlZF9nZXRfbG9jYWwoYmluLCBpbmZvKSA9 PSBuc3Rhc2gsCisJICAgICJXcm9uZyBzdGFzaGVkIGNvdW50Iik7CisKKwlpZiAobmZpbGwgKyBu c3Rhc2ggPT0gaW5mby0+bmNhY2hlZF9tYXgpIHsKKwkJcmV0ID0gY2FjaGVfYmluX2RhbGxvY19l YXN5KGJpbiwgJnB0cnNbMF0pOworCQlleHBlY3RfZmFsc2UocmV0LCAiU2hvdWxkIG5vdCBkYWxs b2MgaW50byBhIGZ1bGwgYmluIik7CisJCXJldCA9IGNhY2hlX2Jpbl9zdGFzaChiaW4sICZwdHJz WzBdKTsKKwkJZXhwZWN0X2ZhbHNlKHJldCwgIlNob3VsZCBub3Qgc3Rhc2ggaW50byBhIGZ1bGwg YmluIik7CisJfQorCisJLyogQWxsb2MgZmlsbGVkIG9uZXMgKi8KKwlmb3IgKGNhY2hlX2Jpbl9z el90IGkgPSAwOyBpIDwgbmZpbGw7IGkrKykgeworCQl2b2lkICpwdHIgPSBjYWNoZV9iaW5fYWxs b2MoYmluLCAmcmV0KTsKKwkJZXhwZWN0X3RydWUocmV0LCAiVW5leHBlY3RlZCBhbGxvYyBmYWls dXJlIik7CisJCS8qIFZlcmlmeSBpdCdzIG5vdCBmcm9tIHRoZSBzdGFzaGVkIHJhbmdlLiAqLwor CQlleHBlY3RfdHJ1ZSgodWludHB0cl90KXB0ciA8ICh1aW50cHRyX3QpJnB0cnNbbmZpbGxdLAor CQkgICAgIlNob3VsZCBub3QgYWxsb2Mgc3Rhc2hlZCBwdHJzIik7CisJfQorCWV4cGVjdF90cnVl KGNhY2hlX2Jpbl9uY2FjaGVkX2dldF9sb2NhbChiaW4sIGluZm8pID09IDAsCisJICAgICJXcm9u ZyBjYWNoZWQgY291bnQiKTsKKwlleHBlY3RfdHJ1ZShjYWNoZV9iaW5fbnN0YXNoZWRfZ2V0X2xv Y2FsKGJpbiwgaW5mbykgPT0gbnN0YXNoLAorCSAgICAiV3Jvbmcgc3Rhc2hlZCBjb3VudCIpOwor CisJY2FjaGVfYmluX2FsbG9jKGJpbiwgJnJldCk7CisJZXhwZWN0X2ZhbHNlKHJldCwgIlNob3Vs ZCBub3QgYWxsb2Mgc3Rhc2hlZCIpOworCisJLyogQ2xlYXIgc3Rhc2hlZCBvbmVzICovCisJY2Fj aGVfYmluX2ZpbmlzaF9mbHVzaF9zdGFzaGVkKGJpbiwgaW5mbyk7CisJZXhwZWN0X3RydWUoY2Fj aGVfYmluX25jYWNoZWRfZ2V0X2xvY2FsKGJpbiwgaW5mbykgPT0gMCwKKwkgICAgIldyb25nIGNh Y2hlZCBjb3VudCIpOworCWV4cGVjdF90cnVlKGNhY2hlX2Jpbl9uc3Rhc2hlZF9nZXRfbG9jYWwo YmluLCBpbmZvKSA9PSAwLAorCSAgICAiV3Jvbmcgc3Rhc2hlZCBjb3VudCIpOworCisJY2FjaGVf YmluX2FsbG9jKGJpbiwgJnJldCk7CisJZXhwZWN0X2ZhbHNlKHJldCwgIlNob3VsZCBub3QgYWxs b2MgZnJvbSBlbXB0eSBiaW4iKTsKK30KKworVEVTVF9CRUdJTih0ZXN0X2NhY2hlX2Jpbl9zdGFz aCkgeworCWNvbnN0IGludCBuY2FjaGVkX21heCA9IDEwMDsKKworCWNhY2hlX2Jpbl90IGJpbjsK KwljYWNoZV9iaW5faW5mb190IGluZm87CisJY2FjaGVfYmluX2luZm9faW5pdCgmaW5mbywgbmNh Y2hlZF9tYXgpOworCXRlc3RfYmluX2luaXQoJmJpbiwgJmluZm8pOworCisJLyoKKwkgKiBUaGUg Y29udGVudCBvZiB0aGlzIGFycmF5IGlzIG5vdCBhY2Nlc3NlZDsgaW5zdGVhZCB0aGUgaW50ZXJp b3IKKwkgKiBhZGRyZXNzZXMgYXJlIHVzZWQgdG8gaW5zZXJ0IC8gc3Rhc2ggaW50byB0aGUgYmlu cyBhcyB0ZXN0IHBvaW50ZXJzLgorCSAqLworCXZvaWQgKipwdHJzID0gbWFsbG9jeChzaXplb2Yo dm9pZCAqKSAqIChuY2FjaGVkX21heCArIDEpLCAwKTsKKwlhc3NlcnRfcHRyX25vdF9udWxsKHB0 cnMsICJVbmV4cGVjdGVkIG1hbGxvY3ggZmFpbHVyZSIpOworCWJvb2wgcmV0OworCWZvciAoY2Fj aGVfYmluX3N6X3QgaSA9IDA7IGkgPCBuY2FjaGVkX21heDsgaSsrKSB7CisJCWV4cGVjdF90cnVl KGNhY2hlX2Jpbl9uY2FjaGVkX2dldF9sb2NhbCgmYmluLCAmaW5mbykgPT0KKwkJICAgIChpIC8g MiArIGkgJSAyKSwgIldyb25nIG5jYWNoZWQgdmFsdWUiKTsKKwkJZXhwZWN0X3RydWUoY2FjaGVf YmluX25zdGFzaGVkX2dldF9sb2NhbCgmYmluLCAmaW5mbykgPT0gaSAvIDIsCisJCSAgICAiV3Jv bmcgbnN0YXNoZWQgdmFsdWUiKTsKKwkJaWYgKGkgJSAyID09IDApIHsKKwkJCWNhY2hlX2Jpbl9k YWxsb2NfZWFzeSgmYmluLCAmcHRyc1tpXSk7CisJCX0gZWxzZSB7CisJCQlyZXQgPSBjYWNoZV9i aW5fc3Rhc2goJmJpbiwgJnB0cnNbaV0pOworCQkJZXhwZWN0X3RydWUocmV0LCAiU2hvdWxkIGJl IGFibGUgdG8gc3Rhc2ggaW50byBhICIKKwkJCSAgICAibm9uLWZ1bGwgY2FjaGUgYmluIik7CisJ CX0KKwl9CisJcmV0ID0gY2FjaGVfYmluX2RhbGxvY19lYXN5KCZiaW4sICZwdHJzWzBdKTsKKwll eHBlY3RfZmFsc2UocmV0LCAiU2hvdWxkIG5vdCBkYWxsb2MgaW50byBhIGZ1bGwgY2FjaGUgYmlu Iik7CisJcmV0ID0gY2FjaGVfYmluX3N0YXNoKCZiaW4sICZwdHJzWzBdKTsKKwlleHBlY3RfZmFs c2UocmV0LCAiU2hvdWxkIG5vdCBzdGFzaCBpbnRvIGEgZnVsbCBjYWNoZSBiaW4iKTsKKwlmb3Ig KGNhY2hlX2Jpbl9zel90IGkgPSAwOyBpIDwgbmNhY2hlZF9tYXg7IGkrKykgeworCQl2b2lkICpw dHIgPSBjYWNoZV9iaW5fYWxsb2MoJmJpbiwgJnJldCk7CisJCWlmIChpIDwgbmNhY2hlZF9tYXgg LyAyKSB7CisJCQlleHBlY3RfdHJ1ZShyZXQsICJTaG91bGQgYmUgYWJsZSB0byBhbGxvYyIpOwor CQkJdWludHB0cl90IGRpZmYgPSAoKHVpbnRwdHJfdClwdHIgLSAodWludHB0cl90KSZwdHJzWzBd KQorCQkJICAgIC8gc2l6ZW9mKHZvaWQgKik7CisJCQlleHBlY3RfdHJ1ZShkaWZmICUgMiA9PSAw LCAiU2hvdWxkIGJlIGFibGUgdG8gYWxsb2MiKTsKKwkJfSBlbHNlIHsKKwkJCWV4cGVjdF9mYWxz ZShyZXQsICJTaG91bGQgbm90IGFsbG9jIHN0YXNoZWQiKTsKKwkJCWV4cGVjdF90cnVlKGNhY2hl X2Jpbl9uc3Rhc2hlZF9nZXRfbG9jYWwoJmJpbiwgJmluZm8pID09CisJCQkgICAgbmNhY2hlZF9t YXggLyAyLCAiV3JvbmcgbnN0YXNoZWQgdmFsdWUiKTsKKwkJfQorCX0KKworCXRlc3RfYmluX2lu aXQoJmJpbiwgJmluZm8pOworCWRvX2ZsdXNoX3N0YXNoZWRfdGVzdCgmYmluLCAmaW5mbywgcHRy cywgbmNhY2hlZF9tYXgsIDApOworCWRvX2ZsdXNoX3N0YXNoZWRfdGVzdCgmYmluLCAmaW5mbywg cHRycywgMCwgbmNhY2hlZF9tYXgpOworCWRvX2ZsdXNoX3N0YXNoZWRfdGVzdCgmYmluLCAmaW5m bywgcHRycywgbmNhY2hlZF9tYXggLyAyLCBuY2FjaGVkX21heCAvIDIpOworCWRvX2ZsdXNoX3N0 YXNoZWRfdGVzdCgmYmluLCAmaW5mbywgcHRycywgbmNhY2hlZF9tYXggLyA0LCBuY2FjaGVkX21h eCAvIDIpOworCWRvX2ZsdXNoX3N0YXNoZWRfdGVzdCgmYmluLCAmaW5mbywgcHRycywgbmNhY2hl ZF9tYXggLyAyLCBuY2FjaGVkX21heCAvIDQpOworCWRvX2ZsdXNoX3N0YXNoZWRfdGVzdCgmYmlu LCAmaW5mbywgcHRycywgbmNhY2hlZF9tYXggLyA0LCBuY2FjaGVkX21heCAvIDQpOworfQorVEVT VF9FTkQKKworaW50CittYWluKHZvaWQpIHsKKwlyZXR1cm4gdGVzdCh0ZXN0X2NhY2hlX2JpbiwK KwkJdGVzdF9jYWNoZV9iaW5fc3Rhc2gpOworfQoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMu My4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9ja2guYyBiLzM4OS1kcy1iYXNlLTMu My4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9ja2guYwpuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwLi4zNjE0MmFjCi0tLSAvZGV2L251bGwKKysrIGIvMzg5LWRzLWJh c2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L2NraC5jCkBAIC0wLDAgKzEs MjExIEBACisjaW5jbHVkZSAidGVzdC9qZW1hbGxvY190ZXN0LmgiCisKK1RFU1RfQkVHSU4odGVz dF9uZXdfZGVsZXRlKSB7CisJdHNkX3QgKnRzZDsKKwlja2hfdCBja2g7CisKKwl0c2QgPSB0c2Rf ZmV0Y2goKTsKKworCWV4cGVjdF9mYWxzZShja2hfbmV3KHRzZCwgJmNraCwgMiwgY2toX3N0cmlu Z19oYXNoLAorCSAgICBja2hfc3RyaW5nX2tleWNvbXApLCAiVW5leHBlY3RlZCBja2hfbmV3KCkg ZXJyb3IiKTsKKwlja2hfZGVsZXRlKHRzZCwgJmNraCk7CisKKwlleHBlY3RfZmFsc2UoY2toX25l dyh0c2QsICZja2gsIDMsIGNraF9wb2ludGVyX2hhc2gsCisJICAgIGNraF9wb2ludGVyX2tleWNv bXApLCAiVW5leHBlY3RlZCBja2hfbmV3KCkgZXJyb3IiKTsKKwlja2hfZGVsZXRlKHRzZCwgJmNr aCk7Cit9CitURVNUX0VORAorCitURVNUX0JFR0lOKHRlc3RfY291bnRfaW5zZXJ0X3NlYXJjaF9y ZW1vdmUpIHsKKwl0c2RfdCAqdHNkOworCWNraF90IGNraDsKKwljb25zdCBjaGFyICpzdHJzW10g PSB7CisJICAgICJhIHN0cmluZyIsCisJICAgICJBIHN0cmluZyIsCisJICAgICJhIHN0cmluZy4i LAorCSAgICAiQSBzdHJpbmcuIgorCX07CisJY29uc3QgY2hhciAqbWlzc2luZyA9ICJBIHN0cmlu ZyBub3QgaW4gdGhlIGhhc2ggdGFibGUuIjsKKwlzaXplX3QgaTsKKworCXRzZCA9IHRzZF9mZXRj aCgpOworCisJZXhwZWN0X2ZhbHNlKGNraF9uZXcodHNkLCAmY2toLCAyLCBja2hfc3RyaW5nX2hh c2gsCisJICAgIGNraF9zdHJpbmdfa2V5Y29tcCksICJVbmV4cGVjdGVkIGNraF9uZXcoKSBlcnJv ciIpOworCWV4cGVjdF96dV9lcShja2hfY291bnQoJmNraCksIDAsCisJICAgICJja2hfY291bnQo KSBzaG91bGQgcmV0dXJuICV6dSwgYnV0IGl0IHJldHVybmVkICV6dSIsIFpVKDApLAorCSAgICBj a2hfY291bnQoJmNraCkpOworCisJLyogSW5zZXJ0LiAqLworCWZvciAoaSA9IDA7IGkgPCBzaXpl b2Yoc3Rycykvc2l6ZW9mKGNvbnN0IGNoYXIgKik7IGkrKykgeworCQlja2hfaW5zZXJ0KHRzZCwg JmNraCwgc3Ryc1tpXSwgc3Ryc1tpXSk7CisJCWV4cGVjdF96dV9lcShja2hfY291bnQoJmNraCks IGkrMSwKKwkJICAgICJja2hfY291bnQoKSBzaG91bGQgcmV0dXJuICV6dSwgYnV0IGl0IHJldHVy bmVkICV6dSIsIGkrMSwKKwkJICAgIGNraF9jb3VudCgmY2toKSk7CisJfQorCisJLyogU2VhcmNo LiAqLworCWZvciAoaSA9IDA7IGkgPCBzaXplb2Yoc3Rycykvc2l6ZW9mKGNvbnN0IGNoYXIgKik7 IGkrKykgeworCQl1bmlvbiB7CisJCQl2b2lkICpwOworCQkJY29uc3QgY2hhciAqczsKKwkJfSBr LCB2OworCQl2b2lkICoqa3AsICoqdnA7CisJCWNvbnN0IGNoYXIgKmtzLCAqdnM7CisKKwkJa3Ag PSAoaSAmIDEpID8gJmsucCA6IE5VTEw7CisJCXZwID0gKGkgJiAyKSA/ICZ2LnAgOiBOVUxMOwor CQlrLnAgPSBOVUxMOworCQl2LnAgPSBOVUxMOworCQlleHBlY3RfZmFsc2UoY2toX3NlYXJjaCgm Y2toLCBzdHJzW2ldLCBrcCwgdnApLAorCQkgICAgIlVuZXhwZWN0ZWQgY2toX3NlYXJjaCgpIGVy cm9yIik7CisKKwkJa3MgPSAoaSAmIDEpID8gc3Ryc1tpXSA6IChjb25zdCBjaGFyICopTlVMTDsK KwkJdnMgPSAoaSAmIDIpID8gc3Ryc1tpXSA6IChjb25zdCBjaGFyICopTlVMTDsKKwkJZXhwZWN0 X3B0cl9lcSgodm9pZCAqKWtzLCAodm9pZCAqKWsucywgIktleSBtaXNtYXRjaCwgaT0lenUiLAor CQkgICAgaSk7CisJCWV4cGVjdF9wdHJfZXEoKHZvaWQgKil2cywgKHZvaWQgKil2LnMsICJWYWx1 ZSBtaXNtYXRjaCwgaT0lenUiLAorCQkgICAgaSk7CisJfQorCWV4cGVjdF90cnVlKGNraF9zZWFy Y2goJmNraCwgbWlzc2luZywgTlVMTCwgTlVMTCksCisJICAgICJVbmV4cGVjdGVkIGNraF9zZWFy Y2goKSBzdWNjZXNzIik7CisKKwkvKiBSZW1vdmUuICovCisJZm9yIChpID0gMDsgaSA8IHNpemVv ZihzdHJzKS9zaXplb2YoY29uc3QgY2hhciAqKTsgaSsrKSB7CisJCXVuaW9uIHsKKwkJCXZvaWQg KnA7CisJCQljb25zdCBjaGFyICpzOworCQl9IGssIHY7CisJCXZvaWQgKiprcCwgKip2cDsKKwkJ Y29uc3QgY2hhciAqa3MsICp2czsKKworCQlrcCA9IChpICYgMSkgPyAmay5wIDogTlVMTDsKKwkJ dnAgPSAoaSAmIDIpID8gJnYucCA6IE5VTEw7CisJCWsucCA9IE5VTEw7CisJCXYucCA9IE5VTEw7 CisJCWV4cGVjdF9mYWxzZShja2hfcmVtb3ZlKHRzZCwgJmNraCwgc3Ryc1tpXSwga3AsIHZwKSwK KwkJICAgICJVbmV4cGVjdGVkIGNraF9yZW1vdmUoKSBlcnJvciIpOworCisJCWtzID0gKGkgJiAx KSA/IHN0cnNbaV0gOiAoY29uc3QgY2hhciAqKU5VTEw7CisJCXZzID0gKGkgJiAyKSA/IHN0cnNb aV0gOiAoY29uc3QgY2hhciAqKU5VTEw7CisJCWV4cGVjdF9wdHJfZXEoKHZvaWQgKilrcywgKHZv aWQgKilrLnMsICJLZXkgbWlzbWF0Y2gsIGk9JXp1IiwKKwkJICAgIGkpOworCQlleHBlY3RfcHRy X2VxKCh2b2lkICopdnMsICh2b2lkICopdi5zLCAiVmFsdWUgbWlzbWF0Y2gsIGk9JXp1IiwKKwkJ ICAgIGkpOworCQlleHBlY3RfenVfZXEoY2toX2NvdW50KCZja2gpLAorCQkgICAgc2l6ZW9mKHN0 cnMpL3NpemVvZihjb25zdCBjaGFyICopIC0gaSAtIDEsCisJCSAgICAiY2toX2NvdW50KCkgc2hv dWxkIHJldHVybiAlenUsIGJ1dCBpdCByZXR1cm5lZCAlenUiLAorCQkgICAgICAgIHNpemVvZihz dHJzKS9zaXplb2YoY29uc3QgY2hhciAqKSAtIGkgLSAxLAorCQkgICAgY2toX2NvdW50KCZja2gp KTsKKwl9CisKKwlja2hfZGVsZXRlKHRzZCwgJmNraCk7Cit9CitURVNUX0VORAorCitURVNUX0JF R0lOKHRlc3RfaW5zZXJ0X2l0ZXJfcmVtb3ZlKSB7CisjZGVmaW5lIE5JVEVNUyBaVSgxMDAwKQor CXRzZF90ICp0c2Q7CisJY2toX3QgY2toOworCXZvaWQgKipwW05JVEVNU107CisJdm9pZCAqcSwg KnI7CisJc2l6ZV90IGk7CisKKwl0c2QgPSB0c2RfZmV0Y2goKTsKKworCWV4cGVjdF9mYWxzZShj a2hfbmV3KHRzZCwgJmNraCwgMiwgY2toX3BvaW50ZXJfaGFzaCwKKwkgICAgY2toX3BvaW50ZXJf a2V5Y29tcCksICJVbmV4cGVjdGVkIGNraF9uZXcoKSBlcnJvciIpOworCisJZm9yIChpID0gMDsg aSA8IE5JVEVNUzsgaSsrKSB7CisJCXBbaV0gPSBtYWxsb2N4KGkrMSwgMCk7CisJCWV4cGVjdF9w dHJfbm90X251bGwocFtpXSwgIlVuZXhwZWN0ZWQgbWFsbG9jeCgpIGZhaWx1cmUiKTsKKwl9CisK Kwlmb3IgKGkgPSAwOyBpIDwgTklURU1TOyBpKyspIHsKKwkJc2l6ZV90IGo7CisKKwkJZm9yIChq ID0gaTsgaiA8IE5JVEVNUzsgaisrKSB7CisJCQlleHBlY3RfZmFsc2UoY2toX2luc2VydCh0c2Qs ICZja2gsIHBbal0sIHBbal0pLAorCQkJICAgICJVbmV4cGVjdGVkIGNraF9pbnNlcnQoKSBmYWls dXJlIik7CisJCQlleHBlY3RfZmFsc2UoY2toX3NlYXJjaCgmY2toLCBwW2pdLCAmcSwgJnIpLAor CQkJICAgICJVbmV4cGVjdGVkIGNraF9zZWFyY2goKSBmYWlsdXJlIik7CisJCQlleHBlY3RfcHRy X2VxKHBbal0sIHEsICJLZXkgcG9pbnRlciBtaXNtYXRjaCIpOworCQkJZXhwZWN0X3B0cl9lcShw W2pdLCByLCAiVmFsdWUgcG9pbnRlciBtaXNtYXRjaCIpOworCQl9CisKKwkJZXhwZWN0X3p1X2Vx KGNraF9jb3VudCgmY2toKSwgTklURU1TLAorCQkgICAgImNraF9jb3VudCgpIHNob3VsZCByZXR1 cm4gJXp1LCBidXQgaXQgcmV0dXJuZWQgJXp1IiwKKwkJICAgIE5JVEVNUywgY2toX2NvdW50KCZj a2gpKTsKKworCQlmb3IgKGogPSBpICsgMTsgaiA8IE5JVEVNUzsgaisrKSB7CisJCQlleHBlY3Rf ZmFsc2UoY2toX3NlYXJjaCgmY2toLCBwW2pdLCBOVUxMLCBOVUxMKSwKKwkJCSAgICAiVW5leHBl Y3RlZCBja2hfc2VhcmNoKCkgZmFpbHVyZSIpOworCQkJZXhwZWN0X2ZhbHNlKGNraF9yZW1vdmUo dHNkLCAmY2toLCBwW2pdLCAmcSwgJnIpLAorCQkJICAgICJVbmV4cGVjdGVkIGNraF9yZW1vdmUo KSBmYWlsdXJlIik7CisJCQlleHBlY3RfcHRyX2VxKHBbal0sIHEsICJLZXkgcG9pbnRlciBtaXNt YXRjaCIpOworCQkJZXhwZWN0X3B0cl9lcShwW2pdLCByLCAiVmFsdWUgcG9pbnRlciBtaXNtYXRj aCIpOworCQkJZXhwZWN0X3RydWUoY2toX3NlYXJjaCgmY2toLCBwW2pdLCBOVUxMLCBOVUxMKSwK KwkJCSAgICAiVW5leHBlY3RlZCBja2hfc2VhcmNoKCkgc3VjY2VzcyIpOworCQkJZXhwZWN0X3Ry dWUoY2toX3JlbW92ZSh0c2QsICZja2gsIHBbal0sICZxLCAmciksCisJCQkgICAgIlVuZXhwZWN0 ZWQgY2toX3JlbW92ZSgpIHN1Y2Nlc3MiKTsKKwkJfQorCisJCXsKKwkJCWJvb2wgc2VlbltOSVRF TVNdOworCQkJc2l6ZV90IHRhYmluZDsKKworCQkJbWVtc2V0KHNlZW4sIDAsIHNpemVvZihzZWVu KSk7CisKKwkJCWZvciAodGFiaW5kID0gMDsgIWNraF9pdGVyKCZja2gsICZ0YWJpbmQsICZxLCAm cik7KSB7CisJCQkJc2l6ZV90IGs7CisKKwkJCQlleHBlY3RfcHRyX2VxKHEsIHIsICJLZXkgYW5k IHZhbCBub3QgZXF1YWwiKTsKKworCQkJCWZvciAoayA9IDA7IGsgPCBOSVRFTVM7IGsrKykgewor CQkJCQlpZiAocFtrXSA9PSBxKSB7CisJCQkJCQlleHBlY3RfZmFsc2Uoc2VlbltrXSwKKwkJCQkJ CSAgICAiSXRlbSAlenUgYWxyZWFkeSBzZWVuIiwgayk7CisJCQkJCQlzZWVuW2tdID0gdHJ1ZTsK KwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfQorCQkJfQorCisJCQlmb3IgKGogPSAwOyBqIDwg aSArIDE7IGorKykgeworCQkJCWV4cGVjdF90cnVlKHNlZW5bal0sICJJdGVtICV6dSBub3Qgc2Vl biIsIGopOworCQkJfQorCQkJZm9yICg7IGogPCBOSVRFTVM7IGorKykgeworCQkJCWV4cGVjdF9m YWxzZShzZWVuW2pdLCAiSXRlbSAlenUgc2VlbiIsIGopOworCQkJfQorCQl9CisJfQorCisJZm9y IChpID0gMDsgaSA8IE5JVEVNUzsgaSsrKSB7CisJCWV4cGVjdF9mYWxzZShja2hfc2VhcmNoKCZj a2gsIHBbaV0sIE5VTEwsIE5VTEwpLAorCQkgICAgIlVuZXhwZWN0ZWQgY2toX3NlYXJjaCgpIGZh aWx1cmUiKTsKKwkJZXhwZWN0X2ZhbHNlKGNraF9yZW1vdmUodHNkLCAmY2toLCBwW2ldLCAmcSwg JnIpLAorCQkgICAgIlVuZXhwZWN0ZWQgY2toX3JlbW92ZSgpIGZhaWx1cmUiKTsKKwkJZXhwZWN0 X3B0cl9lcShwW2ldLCBxLCAiS2V5IHBvaW50ZXIgbWlzbWF0Y2giKTsKKwkJZXhwZWN0X3B0cl9l cShwW2ldLCByLCAiVmFsdWUgcG9pbnRlciBtaXNtYXRjaCIpOworCQlleHBlY3RfdHJ1ZShja2hf c2VhcmNoKCZja2gsIHBbaV0sIE5VTEwsIE5VTEwpLAorCQkgICAgIlVuZXhwZWN0ZWQgY2toX3Nl YXJjaCgpIHN1Y2Nlc3MiKTsKKwkJZXhwZWN0X3RydWUoY2toX3JlbW92ZSh0c2QsICZja2gsIHBb aV0sICZxLCAmciksCisJCSAgICAiVW5leHBlY3RlZCBja2hfcmVtb3ZlKCkgc3VjY2VzcyIpOwor CQlkYWxsb2N4KHBbaV0sIDApOworCX0KKworCWV4cGVjdF96dV9lcShja2hfY291bnQoJmNraCks IDAsCisJICAgICJja2hfY291bnQoKSBzaG91bGQgcmV0dXJuICV6dSwgYnV0IGl0IHJldHVybmVk ICV6dSIsCisJICAgIFpVKDApLCBja2hfY291bnQoJmNraCkpOworCWNraF9kZWxldGUodHNkLCAm Y2toKTsKKyN1bmRlZiBOSVRFTVMKK30KK1RFU1RfRU5ECisKK2ludAorbWFpbih2b2lkKSB7CisJ cmV0dXJuIHRlc3QoCisJICAgIHRlc3RfbmV3X2RlbGV0ZSwKKwkgICAgdGVzdF9jb3VudF9pbnNl cnRfc2VhcmNoX3JlbW92ZSwKKwkgICAgdGVzdF9pbnNlcnRfaXRlcl9yZW1vdmUpOworfQoKZGlm ZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5p dC9jb3VudGVyLmMgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0 L3VuaXQvY291bnRlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3N2Jh YWMKLS0tIC9kZXYvbnVsbAorKysgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01 LjMuMC90ZXN0L3VuaXQvY291bnRlci5jCkBAIC0wLDAgKzEsODAgQEAKKyNpbmNsdWRlICJ0ZXN0 L2plbWFsbG9jX3Rlc3QuaCIKKworc3RhdGljIGNvbnN0IHVpbnQ2NF90IGludGVydmFsID0gMSA8 PCAyMDsKKworVEVTVF9CRUdJTih0ZXN0X2NvdW50ZXJfYWNjdW0pIHsKKwl1aW50NjRfdCBpbmNy ZW1lbnQgPSBpbnRlcnZhbCA+PiA0OworCXVuc2lnbmVkIG4gPSBpbnRlcnZhbCAvIGluY3JlbWVu dDsKKwl1aW50NjRfdCBhY2N1bSA9IDA7CisKKwljb3VudGVyX2FjY3VtX3QgYzsKKwljb3VudGVy X2FjY3VtX2luaXQoJmMsIGludGVydmFsKTsKKworCXRzZF90ICp0c2QgPSB0c2RfZmV0Y2goKTsK Kwlib29sIHRyaWdnZXI7CisJZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG47IGkrKykgeworCQl0 cmlnZ2VyID0gY291bnRlcl9hY2N1bSh0c2RfdHNkbih0c2QpLCAmYywgaW5jcmVtZW50KTsKKwkJ YWNjdW0gKz0gaW5jcmVtZW50OworCQlpZiAoYWNjdW0gPCBpbnRlcnZhbCkgeworCQkJZXhwZWN0 X2JfZXEodHJpZ2dlciwgZmFsc2UsICJTaG91bGQgbm90IHRyaWdnZXIiKTsKKwkJfSBlbHNlIHsK KwkJCWV4cGVjdF9iX2VxKHRyaWdnZXIsIHRydWUsICJTaG91bGQgaGF2ZSB0cmlnZ2VyZWQiKTsK KwkJfQorCX0KKwlleHBlY3RfYl9lcSh0cmlnZ2VyLCB0cnVlLCAiU2hvdWxkIGhhdmUgdHJpZ2dl cmVkIik7Cit9CitURVNUX0VORAorCit2b2lkCitleHBlY3RfY291bnRlcl92YWx1ZShjb3VudGVy X2FjY3VtX3QgKmMsIHVpbnQ2NF90IHYpIHsKKwl1aW50NjRfdCBhY2N1bSA9IGxvY2tlZF9yZWFk X3U2NF91bnN5bmNocm9uaXplZCgmYy0+YWNjdW1ieXRlcyk7CisJZXhwZWN0X3U2NF9lcShhY2N1 bSwgdiwgIkNvdW50ZXIgdmFsdWUgbWlzbWF0Y2giKTsKK30KKworI2RlZmluZSBOX1RIRFMgKDE2 KQorI2RlZmluZSBOX0lURVJfVEhEICgxIDw8IDEyKQorI2RlZmluZSBJVEVSX0lOQ1JFTUVOVCAo aW50ZXJ2YWwgPj4gNCkKKworc3RhdGljIHZvaWQgKgordGhkX3N0YXJ0KHZvaWQgKnZhcmcpIHsK Kwljb3VudGVyX2FjY3VtX3QgKmMgPSAoY291bnRlcl9hY2N1bV90ICopdmFyZzsKKworCXRzZF90 ICp0c2QgPSB0c2RfZmV0Y2goKTsKKwlib29sIHRyaWdnZXI7CisJdWludHB0cl90IG5fdHJpZ2dl cmVkID0gMDsKKwlmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgTl9JVEVSX1RIRDsgaSsrKSB7CisJ CXRyaWdnZXIgPSBjb3VudGVyX2FjY3VtKHRzZF90c2RuKHRzZCksIGMsIElURVJfSU5DUkVNRU5U KTsKKwkJbl90cmlnZ2VyZWQgKz0gdHJpZ2dlciA/IDEgOiAwOworCX0KKworCXJldHVybiAodm9p ZCAqKW5fdHJpZ2dlcmVkOworfQorCisKK1RFU1RfQkVHSU4odGVzdF9jb3VudGVyX210KSB7CisJ Y291bnRlcl9hY2N1bV90IHNoYXJlZF9jOworCWNvdW50ZXJfYWNjdW1faW5pdCgmc2hhcmVkX2Ms IGludGVydmFsKTsKKworCXRoZF90IHRoZHNbTl9USERTXTsKKwl1bnNpZ25lZCBpOworCWZvciAo aSA9IDA7IGkgPCBOX1RIRFM7IGkrKykgeworCQl0aGRfY3JlYXRlKCZ0aGRzW2ldLCB0aGRfc3Rh cnQsICh2b2lkICopJnNoYXJlZF9jKTsKKwl9CisKKwl1aW50NjRfdCBzdW0gPSAwOworCWZvciAo aSA9IDA7IGkgPCBOX1RIRFM7IGkrKykgeworCQl2b2lkICpyZXQ7CisJCXRoZF9qb2luKHRoZHNb aV0sICZyZXQpOworCQlzdW0gKz0gKHVpbnRwdHJfdClyZXQ7CisJfQorCWV4cGVjdF91NjRfZXEo c3VtLCBOX1RIRFMgKiBOX0lURVJfVEhEIC8gKGludGVydmFsIC8gSVRFUl9JTkNSRU1FTlQpLAor CSAgICAiSW5jb3JyZWN0IG51bWJlciBvZiB0cmlnZ2VycyIpOworfQorVEVTVF9FTkQKKworaW50 CittYWluKHZvaWQpIHsKKwlyZXR1cm4gdGVzdCgKKwkgICAgdGVzdF9jb3VudGVyX2FjY3VtLAor CSAgICB0ZXN0X2NvdW50ZXJfbXQpOworfQoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4w LWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9kZWNheS5jIGIvMzg5LWRzLWJhc2UtMy4z LjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L2RlY2F5LmMKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMC4uYmRiNmQwYQotLS0gL2Rldi9udWxsCisrKyBiLzM4OS1kcy1i YXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9kZWNheS5jCkBAIC0wLDAg KzEsMjgzIEBACisjaW5jbHVkZSAidGVzdC9qZW1hbGxvY190ZXN0LmgiCisKKyNpbmNsdWRlICJq ZW1hbGxvYy9pbnRlcm5hbC9kZWNheS5oIgorCitURVNUX0JFR0lOKHRlc3RfZGVjYXlfaW5pdCkg eworCWRlY2F5X3QgZGVjYXk7CisJbWVtc2V0KCZkZWNheSwgMCwgc2l6ZW9mKGRlY2F5KSk7CisK Kwluc3RpbWVfdCBjdXJ0aW1lOworCW5zdGltZV9pbml0KCZjdXJ0aW1lLCAwKTsKKworCXNzaXpl X3QgZGVjYXlfbXMgPSAxMDAwOworCWFzc2VydF90cnVlKGRlY2F5X21zX3ZhbGlkKGRlY2F5X21z KSwgIiIpOworCisJZXhwZWN0X2ZhbHNlKGRlY2F5X2luaXQoJmRlY2F5LCAmY3VydGltZSwgZGVj YXlfbXMpLAorCSAgICAiRmFpbGVkIHRvIGluaXRpYWxpemUgZGVjYXkiKTsKKwlleHBlY3RfemRf ZXEoZGVjYXlfbXNfcmVhZCgmZGVjYXkpLCBkZWNheV9tcywKKwkgICAgIkRlY2F5X21zIHdhcyBp bml0aWFsaXplZCBpbmNvcnJlY3RseSIpOworCWV4cGVjdF91NjRfbmUoZGVjYXlfZXBvY2hfZHVy YXRpb25fbnMoJmRlY2F5KSwgMCwKKwkgICAgIkVwb2NoIGR1cmF0aW9uIHdhcyBpbml0aWFsaXpl ZCBpbmNvcnJlY3RseSIpOworfQorVEVTVF9FTkQKKworVEVTVF9CRUdJTih0ZXN0X2RlY2F5X21z X3ZhbGlkKSB7CisJZXhwZWN0X2ZhbHNlKGRlY2F5X21zX3ZhbGlkKC03KSwKKwkgICAgIk1pc2Ns YXNzaWZpZWQgbmVnYXRpdmUgZGVjYXkgYXMgdmFsaWQiKTsKKwlleHBlY3RfdHJ1ZShkZWNheV9t c192YWxpZCgtMSksCisJICAgICJNaXNjbGFzc2lmaWVkIC0xIChuZXZlciBkZWNheSkgYXMgaW52 YWxpZCBkZWNheSIpOworCWV4cGVjdF90cnVlKGRlY2F5X21zX3ZhbGlkKDg5NDMpLAorCSAgICAi TWlzY2xhc3NpZmllZCB2YWxpZCBkZWNheSIpOworCWlmIChTU0laRV9NQVggPiBOU1RJTUVfU0VD X01BWCkgeworCQlleHBlY3RfZmFsc2UoCisJCSAgICBkZWNheV9tc192YWxpZCgoc3NpemVfdCko TlNUSU1FX1NFQ19NQVggKiBLUVUoMTAwMCkgKyAzOSkpLAorCQkgICAgIk1pc2NsYXNzaWZpZWQg dG9vIGxhcmdlIGRlY2F5Iik7CisJfQorfQorVEVTVF9FTkQKKworVEVTVF9CRUdJTih0ZXN0X2Rl Y2F5X25wYWdlc19wdXJnZV9pbikgeworCWRlY2F5X3QgZGVjYXk7CisJbWVtc2V0KCZkZWNheSwg MCwgc2l6ZW9mKGRlY2F5KSk7CisKKwluc3RpbWVfdCBjdXJ0aW1lOworCW5zdGltZV9pbml0KCZj dXJ0aW1lLCAwKTsKKworCXVpbnQ2NF90IGRlY2F5X21zID0gMTAwMDsKKwluc3RpbWVfdCBkZWNh eV9uc3RpbWU7CisJbnN0aW1lX2luaXQoJmRlY2F5X25zdGltZSwgZGVjYXlfbXMgKiAxMDAwICog MTAwMCk7CisJZXhwZWN0X2ZhbHNlKGRlY2F5X2luaXQoJmRlY2F5LCAmY3VydGltZSwgKHNzaXpl X3QpZGVjYXlfbXMpLAorCSAgICAiRmFpbGVkIHRvIGluaXRpYWxpemUgZGVjYXkiKTsKKworCXNp emVfdCBuZXdfcGFnZXMgPSAxMDA7CisKKwluc3RpbWVfdCB0aW1lOworCW5zdGltZV9jb3B5KCZ0 aW1lLCAmZGVjYXlfbnN0aW1lKTsKKwlleHBlY3RfdTY0X2VxKGRlY2F5X25wYWdlc19wdXJnZV9p bigmZGVjYXksICZ0aW1lLCBuZXdfcGFnZXMpLAorCSAgICBuZXdfcGFnZXMsICJOb3QgYWxsIHBh Z2VzIGFyZSBleHBlY3RlZCB0byBkZWNheSBpbiBkZWNheV9tcyIpOworCisJbnN0aW1lX2luaXQo JnRpbWUsIDApOworCWV4cGVjdF91NjRfZXEoZGVjYXlfbnBhZ2VzX3B1cmdlX2luKCZkZWNheSwg JnRpbWUsIG5ld19wYWdlcyksIDAsCisJICAgICJNb3JlIHRoYW4gemVybyBwYWdlcyBhcmUgZXhw ZWN0ZWQgdG8gaW5zdGFudGx5IGRlY2F5Iik7CisKKwluc3RpbWVfY29weSgmdGltZSwgJmRlY2F5 X25zdGltZSk7CisJbnN0aW1lX2lkaXZpZGUoJnRpbWUsIDIpOworCWV4cGVjdF91NjRfZXEoZGVj YXlfbnBhZ2VzX3B1cmdlX2luKCZkZWNheSwgJnRpbWUsIG5ld19wYWdlcyksCisJICAgIG5ld19w YWdlcyAvIDIsICJOb3QgaGFsZiBvZiBwYWdlcyBkZWNheSBpbiBoYWxmIHRoZSBkZWNheSBwZXJp b2QiKTsKK30KK1RFU1RfRU5ECisKK1RFU1RfQkVHSU4odGVzdF9kZWNheV9tYXliZV9hZHZhbmNl X2Vwb2NoKSB7CisJZGVjYXlfdCBkZWNheTsKKwltZW1zZXQoJmRlY2F5LCAwLCBzaXplb2YoZGVj YXkpKTsKKworCW5zdGltZV90IGN1cnRpbWU7CisJbnN0aW1lX2luaXQoJmN1cnRpbWUsIDApOwor CisJdWludDY0X3QgZGVjYXlfbXMgPSAxMDAwOworCisJYm9vbCBlcnIgPSBkZWNheV9pbml0KCZk ZWNheSwgJmN1cnRpbWUsIChzc2l6ZV90KWRlY2F5X21zKTsKKwlleHBlY3RfZmFsc2UoZXJyLCAi Iik7CisKKwlib29sIGFkdmFuY2VkOworCWFkdmFuY2VkID0gZGVjYXlfbWF5YmVfYWR2YW5jZV9l cG9jaCgmZGVjYXksICZjdXJ0aW1lLCAwKTsKKwlleHBlY3RfZmFsc2UoYWR2YW5jZWQsICJFcG9j aCBhZHZhbmNlZCB3aGlsZSB0aW1lIGRpZG4ndCIpOworCisJbnN0aW1lX3QgaW50ZXJ2YWw7CisJ bnN0aW1lX2luaXQoJmludGVydmFsLCBkZWNheV9lcG9jaF9kdXJhdGlvbl9ucygmZGVjYXkpKTsK KworCW5zdGltZV9hZGQoJmN1cnRpbWUsICZpbnRlcnZhbCk7CisJYWR2YW5jZWQgPSBkZWNheV9t YXliZV9hZHZhbmNlX2Vwb2NoKCZkZWNheSwgJmN1cnRpbWUsIDApOworCWV4cGVjdF9mYWxzZShh ZHZhbmNlZCwgIkVwb2NoIGFkdmFuY2VkIGFmdGVyIGZpcnN0IGludGVydmFsIik7CisKKwluc3Rp bWVfYWRkKCZjdXJ0aW1lLCAmaW50ZXJ2YWwpOworCWFkdmFuY2VkID0gZGVjYXlfbWF5YmVfYWR2 YW5jZV9lcG9jaCgmZGVjYXksICZjdXJ0aW1lLCAwKTsKKwlleHBlY3RfdHJ1ZShhZHZhbmNlZCwg IkVwb2NoIGRpZG4ndCBhZHZhbmNlIGFmdGVyIHR3byBpbnRlcnZhbHMiKTsKK30KK1RFU1RfRU5E CisKK1RFU1RfQkVHSU4odGVzdF9kZWNheV9lbXB0eSkgeworCS8qIElmIHdlIG5ldmVyIGhhdmUg YW55IGRlY2F5aW5nIHBhZ2VzLCBucGFnZXNfbGltaXQgc2hvdWxkIGJlIDAuICovCisJZGVjYXlf dCBkZWNheTsKKwltZW1zZXQoJmRlY2F5LCAwLCBzaXplb2YoZGVjYXkpKTsKKworCW5zdGltZV90 IGN1cnRpbWU7CisJbnN0aW1lX2luaXQoJmN1cnRpbWUsIDApOworCisJdWludDY0X3QgZGVjYXlf bXMgPSAxMDAwOworCXVpbnQ2NF90IGRlY2F5X25zID0gZGVjYXlfbXMgKiAxMDAwICogMTAwMDsK KworCWJvb2wgZXJyID0gZGVjYXlfaW5pdCgmZGVjYXksICZjdXJ0aW1lLCAoc3NpemVfdClkZWNh eV9tcyk7CisJYXNzZXJ0X2ZhbHNlKGVyciwgIiIpOworCisJdWludDY0X3QgdGltZV9iZXR3ZWVu X2NhbGxzID0gZGVjYXlfZXBvY2hfZHVyYXRpb25fbnMoJmRlY2F5KSAvIDU7CisJaW50IG5lcG9j aHMgPSAwOworCWZvciAodWludDY0X3QgaSA9IDA7IGkgPCBkZWNheV9ucyAvIHRpbWVfYmV0d2Vl bl9jYWxscyAqIDEwOyBpKyspIHsKKwkJc2l6ZV90IGRpcnR5X3BhZ2VzID0gMDsKKwkJbnN0aW1l X2luaXQoJmN1cnRpbWUsIGkgKiB0aW1lX2JldHdlZW5fY2FsbHMpOworCQlib29sIGVwb2NoX2Fk dmFuY2VkID0gZGVjYXlfbWF5YmVfYWR2YW5jZV9lcG9jaCgmZGVjYXksCisJCSAgICAmY3VydGlt ZSwgZGlydHlfcGFnZXMpOworCQlpZiAoZXBvY2hfYWR2YW5jZWQpIHsKKwkJCW5lcG9jaHMrKzsK KwkJCWV4cGVjdF96dV9lcShkZWNheV9ucGFnZXNfbGltaXRfZ2V0KCZkZWNheSksIDAsCisJCQkg ICAgIlVuZXhwZWN0ZWRseSBpbmNyZWFzZWQgbnBhZ2VzX2xpbWl0Iik7CisJCX0KKwl9CisJZXhw ZWN0X2RfZ3QobmVwb2NocywgMCwgIkVwb2NocyBuZXZlciBhZHZhbmNlZCIpOworfQorVEVTVF9F TkQKKworLyoKKyAqIFZlcmlmeSB0aGF0IG5wYWdlc19saW1pdCBjb3JyZWN0bHkgZGVjYXlzIGFz IHRoZSB0aW1lIGdvZXMuCisgKgorICogRHVyaW5nIGZpcnN0ICduZXBvY2hfaW5pdCcgZXBvY2hz LCBhZGQgbmV3IGRpcnR5IHBhZ2VzLgorICogQWZ0ZXIgdGhhdCwgbGV0IHRoZW0gZGVjYXkgYW5k IHZlcmlmeSBucGFnZXNfbGltaXQgZGVjcmVhc2VzLgorICogVGhlbiBwcm9jZWVkIHdpdGggYW5v dGhlciAnbmVwb2NoX2luaXQnIGVwb2NocyBhbmQgY2hlY2sgdGhhdAorICogYWxsIGRpcnR5IHBh Z2VzIGFyZSBmbHVzaGVkIG91dCBvZiBiYWNrbG9nLCBicmluZ2luZyBucGFnZXNfbGltaXQKKyAq IGRvd24gdG8gemVyby4KKyAqLworVEVTVF9CRUdJTih0ZXN0X2RlY2F5KSB7CisJY29uc3QgdWlu dDY0X3QgbmVwb2NoX2luaXQgPSAxMDsKKworCWRlY2F5X3QgZGVjYXk7CisJbWVtc2V0KCZkZWNh eSwgMCwgc2l6ZW9mKGRlY2F5KSk7CisKKwluc3RpbWVfdCBjdXJ0aW1lOworCW5zdGltZV9pbml0 KCZjdXJ0aW1lLCAwKTsKKworCXVpbnQ2NF90IGRlY2F5X21zID0gMTAwMDsKKwl1aW50NjRfdCBk ZWNheV9ucyA9IGRlY2F5X21zICogMTAwMCAqIDEwMDA7CisKKwlib29sIGVyciA9IGRlY2F5X2lu aXQoJmRlY2F5LCAmY3VydGltZSwgKHNzaXplX3QpZGVjYXlfbXMpOworCWFzc2VydF9mYWxzZShl cnIsICIiKTsKKworCWV4cGVjdF96dV9lcShkZWNheV9ucGFnZXNfbGltaXRfZ2V0KCZkZWNheSks IDAsCisJICAgICJFbXB0eSBkZWNheSByZXR1cm5lZCBub256ZXJvIG5wYWdlc19saW1pdCIpOwor CisJbnN0aW1lX3QgZXBvY2h0aW1lOworCW5zdGltZV9pbml0KCZlcG9jaHRpbWUsIGRlY2F5X2Vw b2NoX2R1cmF0aW9uX25zKCZkZWNheSkpOworCisJY29uc3Qgc2l6ZV90IGRpcnR5X3BhZ2VzX3Bl cl9lcG9jaCA9IDEwMDA7CisJc2l6ZV90IGRpcnR5X3BhZ2VzID0gMDsKKwl1aW50NjRfdCBlcG9j aF9ucyA9IGRlY2F5X2Vwb2NoX2R1cmF0aW9uX25zKCZkZWNheSk7CisJYm9vbCBlcG9jaF9hZHZh bmNlZCA9IGZhbHNlOworCisJLyogUG9wdWxhdGUgYmFja2xvZyB3aXRoIHNvbWUgZGlydHkgcGFn ZXMgKi8KKwlmb3IgKHVpbnQ2NF90IGkgPSAwOyBpIDwgbmVwb2NoX2luaXQ7IGkrKykgeworCQlu c3RpbWVfYWRkKCZjdXJ0aW1lLCAmZXBvY2h0aW1lKTsKKwkJZGlydHlfcGFnZXMgKz0gZGlydHlf cGFnZXNfcGVyX2Vwb2NoOworCQllcG9jaF9hZHZhbmNlZCB8PSBkZWNheV9tYXliZV9hZHZhbmNl X2Vwb2NoKCZkZWNheSwgJmN1cnRpbWUsCisJCSAgICBkaXJ0eV9wYWdlcyk7CisJfQorCWV4cGVj dF90cnVlKGVwb2NoX2FkdmFuY2VkLCAiRXBvY2ggbmV2ZXIgYWR2YW5jZWQiKTsKKworCXNpemVf dCBucGFnZXNfbGltaXQgPSBkZWNheV9ucGFnZXNfbGltaXRfZ2V0KCZkZWNheSk7CisJZXhwZWN0 X3p1X2d0KG5wYWdlc19saW1pdCwgMCwgIm5wYWdlc19saW1pdCBpcyBpbmNvcnJlY3RseSBlcXVh bCAiCisJICAgICJ0byB6ZXJvIGFmdGVyIGRpcnR5IHBhZ2VzIGhhdmUgYmVlbiBhZGRlZCIpOwor CisJLyogS2VlcCBkaXJ0eSBwYWdlcyB1bmNoYW5nZWQgYW5kIHZlcmlmeSB0aGF0IG5wYWdlc19s aW1pdCBkZWNyZWFzZXMgKi8KKwlmb3IgKHVpbnQ2NF90IGkgPSBuZXBvY2hfaW5pdDsgaSAqIGVw b2NoX25zIDwgZGVjYXlfbnM7ICsraSkgeworCQluc3RpbWVfYWRkKCZjdXJ0aW1lLCAmZXBvY2h0 aW1lKTsKKwkJZXBvY2hfYWR2YW5jZWQgPSBkZWNheV9tYXliZV9hZHZhbmNlX2Vwb2NoKCZkZWNh eSwgJmN1cnRpbWUsCisJCQkJICAgIGRpcnR5X3BhZ2VzKTsKKwkJaWYgKGVwb2NoX2FkdmFuY2Vk KSB7CisJCQlzaXplX3QgbnBhZ2VzX2xpbWl0X25ldyA9IGRlY2F5X25wYWdlc19saW1pdF9nZXQo JmRlY2F5KTsKKwkJCWV4cGVjdF96dV9sdChucGFnZXNfbGltaXRfbmV3LCBucGFnZXNfbGltaXQs CisJCQkgICAgIm5hcGdlc19saW1pdCBmYWlsZWQgdG8gZGVjYXkiKTsKKworCQkJbnBhZ2VzX2xp bWl0ID0gbnBhZ2VzX2xpbWl0X25ldzsKKwkJfQorCX0KKworCWV4cGVjdF96dV9ndChucGFnZXNf bGltaXQsIDAsICJucGFnZXNfbGltaXQgZGVjYXllZCB0byB6ZXJvIGVhcmxpZXIgIgorCSAgICAi dGhhbiBkZWNheV9tcyBzaW5jZSBsYXN0IGRpcnR5IHBhZ2Ugd2FzIGFkZGVkIik7CisKKwkvKiBD b21wbGV0ZWx5IHB1c2ggYWxsIGRpcnR5IHBhZ2VzIG91dCBvZiB0aGUgYmFja2xvZyAqLworCWVw b2NoX2FkdmFuY2VkID0gZmFsc2U7CisJZm9yICh1aW50NjRfdCBpID0gMDsgaSA8IG5lcG9jaF9p bml0OyBpKyspIHsKKwkJbnN0aW1lX2FkZCgmY3VydGltZSwgJmVwb2NodGltZSk7CisJCWVwb2No X2FkdmFuY2VkIHw9IGRlY2F5X21heWJlX2FkdmFuY2VfZXBvY2goJmRlY2F5LCAmY3VydGltZSwK KwkJICAgIGRpcnR5X3BhZ2VzKTsKKwl9CisJZXhwZWN0X3RydWUoZXBvY2hfYWR2YW5jZWQsICJF cG9jaCBuZXZlciBhZHZhbmNlZCIpOworCisJbnBhZ2VzX2xpbWl0ID0gZGVjYXlfbnBhZ2VzX2xp bWl0X2dldCgmZGVjYXkpOworCWV4cGVjdF96dV9lcShucGFnZXNfbGltaXQsIDAsICJucGFnZXNf bGltaXQgZGlkbid0IGRlY2F5IHRvIDAgYWZ0ZXIgIgorCSAgICAiZGVjYXlfbXMgc2luY2UgbGFz dCBidW1wIGluIGRpcnR5IHBhZ2VzIik7Cit9CitURVNUX0VORAorCitURVNUX0JFR0lOKHRlc3Rf ZGVjYXlfbnNfdW50aWxfcHVyZ2UpIHsKKwljb25zdCB1aW50NjRfdCBuZXBvY2hfaW5pdCA9IDEw OworCisJZGVjYXlfdCBkZWNheTsKKwltZW1zZXQoJmRlY2F5LCAwLCBzaXplb2YoZGVjYXkpKTsK KworCW5zdGltZV90IGN1cnRpbWU7CisJbnN0aW1lX2luaXQoJmN1cnRpbWUsIDApOworCisJdWlu dDY0X3QgZGVjYXlfbXMgPSAxMDAwOworCXVpbnQ2NF90IGRlY2F5X25zID0gZGVjYXlfbXMgKiAx MDAwICogMTAwMDsKKworCWJvb2wgZXJyID0gZGVjYXlfaW5pdCgmZGVjYXksICZjdXJ0aW1lLCAo c3NpemVfdClkZWNheV9tcyk7CisJYXNzZXJ0X2ZhbHNlKGVyciwgIiIpOworCisJbnN0aW1lX3Qg ZXBvY2h0aW1lOworCW5zdGltZV9pbml0KCZlcG9jaHRpbWUsIGRlY2F5X2Vwb2NoX2R1cmF0aW9u X25zKCZkZWNheSkpOworCisJdWludDY0X3QgbnNfdW50aWxfcHVyZ2VfZW1wdHkgPSBkZWNheV9u c191bnRpbF9wdXJnZSgmZGVjYXksIDAsIDApOworCWV4cGVjdF91NjRfZXEobnNfdW50aWxfcHVy Z2VfZW1wdHksIERFQ0FZX1VOQk9VTkRFRF9USU1FX1RPX1BVUkdFLAorCSAgICAiRmFpbGVkIHRv IHJldHVybiB1bmJvdW5kZWQgd2FpdCB0aW1lIGZvciB6ZXJvIHRocmVzaG9sZCIpOworCisJY29u c3Qgc2l6ZV90IGRpcnR5X3BhZ2VzX3Blcl9lcG9jaCA9IDEwMDA7CisJc2l6ZV90IGRpcnR5X3Bh Z2VzID0gMDsKKwlib29sIGVwb2NoX2FkdmFuY2VkID0gZmFsc2U7CisJZm9yICh1aW50NjRfdCBp ID0gMDsgaSA8IG5lcG9jaF9pbml0OyBpKyspIHsKKwkJbnN0aW1lX2FkZCgmY3VydGltZSwgJmVw b2NodGltZSk7CisJCWRpcnR5X3BhZ2VzICs9IGRpcnR5X3BhZ2VzX3Blcl9lcG9jaDsKKwkJZXBv Y2hfYWR2YW5jZWQgfD0gZGVjYXlfbWF5YmVfYWR2YW5jZV9lcG9jaCgmZGVjYXksICZjdXJ0aW1l LAorCQkgICAgZGlydHlfcGFnZXMpOworCX0KKwlleHBlY3RfdHJ1ZShlcG9jaF9hZHZhbmNlZCwg IkVwb2NoIG5ldmVyIGFkdmFuY2VkIik7CisKKwl1aW50NjRfdCBuc191bnRpbF9wdXJnZV9hbGwg PSBkZWNheV9uc191bnRpbF9wdXJnZSgmZGVjYXksCisJICAgIGRpcnR5X3BhZ2VzLCBkaXJ0eV9w YWdlcyk7CisJZXhwZWN0X3U2NF9nZShuc191bnRpbF9wdXJnZV9hbGwsIGRlY2F5X25zLAorCSAg ICAiSW5jb3JyZWN0bHkgY2FsY3VsYXRlZCB0aW1lIHRvIHB1cmdlIGFsbCBwYWdlcyIpOworCisJ dWludDY0X3QgbnNfdW50aWxfcHVyZ2Vfbm9uZSA9IGRlY2F5X25zX3VudGlsX3B1cmdlKCZkZWNh eSwKKwkgICAgZGlydHlfcGFnZXMsIDApOworCWV4cGVjdF91NjRfZXEobnNfdW50aWxfcHVyZ2Vf bm9uZSwgZGVjYXlfZXBvY2hfZHVyYXRpb25fbnMoJmRlY2F5KSAqIDIsCisJICAgICJJbmNvcnJl Y3RseSBjYWxjdWxhdGVkIHRpbWUgdG8gcHVyZ2UgMCBwYWdlcyIpOworCisJdWludDY0X3QgbnBh Z2VzX3RocmVzaG9sZCA9IGRpcnR5X3BhZ2VzIC8gMjsKKwl1aW50NjRfdCBuc191bnRpbF9wdXJn ZV9oYWxmID0gZGVjYXlfbnNfdW50aWxfcHVyZ2UoJmRlY2F5LAorCSAgICBkaXJ0eV9wYWdlcywg bnBhZ2VzX3RocmVzaG9sZCk7CisKKwluc3RpbWVfdCB3YWl0dGltZTsKKwluc3RpbWVfaW5pdCgm d2FpdHRpbWUsIG5zX3VudGlsX3B1cmdlX2hhbGYpOworCW5zdGltZV9hZGQoJmN1cnRpbWUsICZ3 YWl0dGltZSk7CisKKwlkZWNheV9tYXliZV9hZHZhbmNlX2Vwb2NoKCZkZWNheSwgJmN1cnRpbWUs IGRpcnR5X3BhZ2VzKTsKKwlzaXplX3QgbnBhZ2VzX2xpbWl0ID0gZGVjYXlfbnBhZ2VzX2xpbWl0 X2dldCgmZGVjYXkpOworCWV4cGVjdF96dV9sdChucGFnZXNfbGltaXQsIGRpcnR5X3BhZ2VzLAor CSAgICAibnBhZ2VzX2xpbWl0IGZhaWxlZCB0byBkZWNyZWFzZSBhZnRlciB3YWl0aW5nIik7CisJ c2l6ZV90IGV4cGVjdGVkID0gZGlydHlfcGFnZXMgLSBucGFnZXNfbGltaXQ7CisJaW50IGRldmlh dGlvbiA9IGFicygoaW50KWV4cGVjdGVkIC0gKGludCkobnBhZ2VzX3RocmVzaG9sZCkpOworCWV4 cGVjdF9kX2x0KGRldmlhdGlvbiwgKGludCkobnBhZ2VzX3RocmVzaG9sZCAvIDIpLAorCSAgICAi QWZ0ZXIgd2FpdGluZywgbnVtYmVyIG9mIHBhZ2VzIGlzIG91dCBvZiB0aGUgZXhwZWN0ZWQgaW50 ZXJ2YWwgIgorCSAgICAiWzAuNSAqIG5wYWdlc190aHJlc2hvbGQgLi4gMS41ICogbnBhZ2VzX3Ro cmVzaG9sZF0iKTsKK30KK1RFU1RfRU5ECisKK2ludAorbWFpbih2b2lkKSB7CisJcmV0dXJuIHRl c3QoCisJICAgIHRlc3RfZGVjYXlfaW5pdCwKKwkgICAgdGVzdF9kZWNheV9tc192YWxpZCwKKwkg ICAgdGVzdF9kZWNheV9ucGFnZXNfcHVyZ2VfaW4sCisJICAgIHRlc3RfZGVjYXlfbWF5YmVfYWR2 YW5jZV9lcG9jaCwKKwkgICAgdGVzdF9kZWNheV9lbXB0eSwKKwkgICAgdGVzdF9kZWNheSwKKwkg ICAgdGVzdF9kZWNheV9uc191bnRpbF9wdXJnZSk7Cit9CgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJh c2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L2Rpdi5jIGIvMzg5LWRzLWJh c2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L2Rpdi5jCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5YWVhNjYKLS0tIC9kZXYvbnVsbAorKysgYi8zODkt ZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvZGl2LmMKQEAgLTAs MCArMSwyOSBAQAorI2luY2x1ZGUgInRlc3QvamVtYWxsb2NfdGVzdC5oIgorCisjaW5jbHVkZSAi amVtYWxsb2MvaW50ZXJuYWwvZGl2LmgiCisKK1RFU1RfQkVHSU4odGVzdF9kaXZfZXhoYXVzdGl2 ZSkgeworCWZvciAoc2l6ZV90IGRpdmlzb3IgPSAyOyBkaXZpc29yIDwgMTAwMCAqIDEwMDA7ICsr ZGl2aXNvcikgeworCQlkaXZfaW5mb190IGRpdl9pbmZvOworCQlkaXZfaW5pdCgmZGl2X2luZm8s IGRpdmlzb3IpOworCQlzaXplX3QgbWF4ID0gMTAwMCAqIGRpdmlzb3I7CisJCWlmIChtYXggPCAx MDAwICogMTAwMCkgeworCQkJbWF4ID0gMTAwMCAqIDEwMDA7CisJCX0KKwkJZm9yIChzaXplX3Qg ZGl2aWRlbmQgPSAwOyBkaXZpZGVuZCA8IDEwMDAgKiBkaXZpc29yOworCQkgICAgZGl2aWRlbmQg Kz0gZGl2aXNvcikgeworCQkJc2l6ZV90IHF1b3RpZW50ID0gZGl2X2NvbXB1dGUoCisJCQkgICAg JmRpdl9pbmZvLCBkaXZpZGVuZCk7CisJCQlleHBlY3RfenVfZXEoZGl2aWRlbmQsIHF1b3RpZW50 ICogZGl2aXNvciwKKwkJCSAgICAiV2l0aCBkaXZpc29yID0gJXp1LCBkaXZpZGVuZCA9ICV6dSwg IgorCQkJICAgICJnb3QgcXVvdGllbnQgJXp1IiwgZGl2aXNvciwgZGl2aWRlbmQsIHF1b3RpZW50 KTsKKwkJfQorCX0KK30KK1RFU1RfRU5ECisKK2ludAorbWFpbih2b2lkKSB7CisJcmV0dXJuIHRl c3Rfbm9fcmVlbnRyYW5jeSgKKwkgICAgdGVzdF9kaXZfZXhoYXVzdGl2ZSk7Cit9CgpkaWZmIC0t Z2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L2Rv dWJsZV9mcmVlLmMgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0 L3VuaXQvZG91YmxlX2ZyZWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4x MjEyMmMxCi0tLSAvZGV2L251bGwKKysrIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxs b2MtNS4zLjAvdGVzdC91bml0L2RvdWJsZV9mcmVlLmMKQEAgLTAsMCArMSw3NyBAQAorI2luY2x1 ZGUgInRlc3QvamVtYWxsb2NfdGVzdC5oIgorI2luY2x1ZGUgInRlc3Qvc2FuLmgiCisKKyNpbmNs dWRlICJqZW1hbGxvYy9pbnRlcm5hbC9zYWZldHlfY2hlY2suaCIKKworYm9vbCBmYWtlX2Fib3J0 X2NhbGxlZDsKK3ZvaWQgZmFrZV9hYm9ydChjb25zdCBjaGFyICptZXNzYWdlKSB7CisJKHZvaWQp bWVzc2FnZTsKKwlmYWtlX2Fib3J0X2NhbGxlZCA9IHRydWU7Cit9CisKK3ZvaWQKK3Rlc3RfbGFy Z2VfZG91YmxlX2ZyZWVfcHJlKHZvaWQpIHsKKwlzYWZldHlfY2hlY2tfc2V0X2Fib3J0KCZmYWtl X2Fib3J0KTsKKwlmYWtlX2Fib3J0X2NhbGxlZCA9IGZhbHNlOworfQorCit2b2lkCit0ZXN0X2xh cmdlX2RvdWJsZV9mcmVlX3Bvc3QoKSB7CisJZXhwZWN0X2JfZXEoZmFrZV9hYm9ydF9jYWxsZWQs IHRydWUsICJEb3VibGUtZnJlZSBjaGVjayBkaWRuJ3QgZmlyZS4iKTsKKwlzYWZldHlfY2hlY2tf c2V0X2Fib3J0KE5VTEwpOworfQorCitURVNUX0JFR0lOKHRlc3RfbGFyZ2VfZG91YmxlX2ZyZWVf dGNhY2hlKSB7CisJdGVzdF9za2lwX2lmKCFjb25maWdfb3B0X3NhZmV0eV9jaGVja3MpOworCS8q CisJICogU2tpcCBkZWJ1ZyBidWlsZHMsIHNpbmNlIHRvbyBtYW55IGFzc2VydGlvbnMgd2lsbCBi ZSB0cmlnZ2VyZWQgd2l0aAorCSAqIGRvdWJsZS1mcmVlIGJlZm9yZSBoaXR0aW5nIHRoZSBvbmUg d2UgYXJlIGludGVyZXN0ZWQgaW4uCisJICovCisJdGVzdF9za2lwX2lmKGNvbmZpZ19kZWJ1Zyk7 CisKKwl0ZXN0X2xhcmdlX2RvdWJsZV9mcmVlX3ByZSgpOworCWNoYXIgKnB0ciA9IG1hbGxvYyhT Q19MQVJHRV9NSU5DTEFTUyk7CisJYm9vbCBndWFyZGVkID0gZXh0ZW50X2lzX2d1YXJkZWQodHNk bl9mZXRjaCgpLCBwdHIpOworCWZyZWUocHRyKTsKKwlpZiAoIWd1YXJkZWQpIHsKKwkJZnJlZShw dHIpOworCX0gZWxzZSB7CisJCS8qCisJCSAqIFNraXAgYmVjYXVzZSBndWFyZGVkIGV4dGVudHMg bWF5IHVuZ3VhcmQgaW1tZWRpYXRlbHkgb24KKwkJICogZGVhbGxvY2F0aW9uLCBpbiB3aGljaCBj YXNlIHRoZSBzZWNvbmQgZnJlZSB3aWxsIGNyYXNoIGJlZm9yZQorCQkgKiByZWFjaGluZyB0aGUg aW50ZW5kZWQgc2FmZXR5IGNoZWNrLgorCQkgKi8KKwkJZmFrZV9hYm9ydF9jYWxsZWQgPSB0cnVl OworCX0KKwltYWxsY3RsKCJ0aHJlYWQudGNhY2hlLmZsdXNoIiwgTlVMTCwgTlVMTCwgTlVMTCwg MCk7CisJdGVzdF9sYXJnZV9kb3VibGVfZnJlZV9wb3N0KCk7Cit9CitURVNUX0VORAorCitURVNU X0JFR0lOKHRlc3RfbGFyZ2VfZG91YmxlX2ZyZWVfbm9fdGNhY2hlKSB7CisJdGVzdF9za2lwX2lm KCFjb25maWdfb3B0X3NhZmV0eV9jaGVja3MpOworCXRlc3Rfc2tpcF9pZihjb25maWdfZGVidWcp OworCisJdGVzdF9sYXJnZV9kb3VibGVfZnJlZV9wcmUoKTsKKwljaGFyICpwdHIgPSBtYWxsb2N4 KFNDX0xBUkdFX01JTkNMQVNTLCBNQUxMT0NYX1RDQUNIRV9OT05FKTsKKwlib29sIGd1YXJkZWQg PSBleHRlbnRfaXNfZ3VhcmRlZCh0c2RuX2ZldGNoKCksIHB0cik7CisJZGFsbG9jeChwdHIsIE1B TExPQ1hfVENBQ0hFX05PTkUpOworCWlmICghZ3VhcmRlZCkgeworCQlkYWxsb2N4KHB0ciwgTUFM TE9DWF9UQ0FDSEVfTk9ORSk7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogU2tpcCBiZWNhdXNlIGd1 YXJkZWQgZXh0ZW50cyBtYXkgdW5ndWFyZCBpbW1lZGlhdGVseSBvbgorCQkgKiBkZWFsbG9jYXRp b24sIGluIHdoaWNoIGNhc2UgdGhlIHNlY29uZCBmcmVlIHdpbGwgY3Jhc2ggYmVmb3JlCisJCSAq IHJlYWNoaW5nIHRoZSBpbnRlbmRlZCBzYWZldHkgY2hlY2suCisJCSAqLworCQlmYWtlX2Fib3J0 X2NhbGxlZCA9IHRydWU7CisJfQorCXRlc3RfbGFyZ2VfZG91YmxlX2ZyZWVfcG9zdCgpOworfQor VEVTVF9FTkQKKworaW50CittYWluKHZvaWQpIHsKKwlyZXR1cm4gdGVzdCh0ZXN0X2xhcmdlX2Rv dWJsZV9mcmVlX25vX3RjYWNoZSwKKwkgICAgdGVzdF9sYXJnZV9kb3VibGVfZnJlZV90Y2FjaGUp OworfQoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4w L3Rlc3QvdW5pdC9kb3VibGVfZnJlZS5oIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxs b2MtNS4zLjAvdGVzdC91bml0L2RvdWJsZV9mcmVlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMC4uOGIxMzc4OQotLS0gL2Rldi9udWxsCisrKyBiLzM4OS1kcy1iYXNlLTMuMy4w LWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9kb3VibGVfZnJlZS5oCkBAIC0wLDAgKzEg QEAKKwoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4w L3Rlc3QvdW5pdC9lZGF0YV9jYWNoZS5jIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxs b2MtNS4zLjAvdGVzdC91bml0L2VkYXRhX2NhY2hlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMC4uYWYxMTEwYQotLS0gL2Rldi9udWxsCisrKyBiLzM4OS1kcy1iYXNlLTMuMy4w LWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9lZGF0YV9jYWNoZS5jCkBAIC0wLDAgKzEs MjI2IEBACisjaW5jbHVkZSAidGVzdC9qZW1hbGxvY190ZXN0LmgiCisKKyNpbmNsdWRlICJqZW1h bGxvYy9pbnRlcm5hbC9lZGF0YV9jYWNoZS5oIgorCitzdGF0aWMgdm9pZAordGVzdF9lZGF0YV9j YWNoZV9pbml0KGVkYXRhX2NhY2hlX3QgKmVkYXRhX2NhY2hlKSB7CisJYmFzZV90ICpiYXNlID0g YmFzZV9uZXcoVFNETl9OVUxMLCAvKiBpbmQgKi8gMSwKKwkgICAgJmVob29rc19kZWZhdWx0X2V4 dGVudF9ob29rcywgLyogbWV0YWRhdGFfdXNlX2hvb2tzICovIHRydWUpOworCWFzc2VydF9wdHJf bm90X251bGwoYmFzZSwgIiIpOworCWJvb2wgZXJyID0gZWRhdGFfY2FjaGVfaW5pdChlZGF0YV9j YWNoZSwgYmFzZSk7CisJYXNzZXJ0X2ZhbHNlKGVyciwgIiIpOworfQorCitzdGF0aWMgdm9pZAor dGVzdF9lZGF0YV9jYWNoZV9kZXN0cm95KGVkYXRhX2NhY2hlX3QgKmVkYXRhX2NhY2hlKSB7CisJ YmFzZV9kZWxldGUoVFNETl9OVUxMLCBlZGF0YV9jYWNoZS0+YmFzZSk7Cit9CisKK1RFU1RfQkVH SU4odGVzdF9lZGF0YV9jYWNoZSkgeworCWVkYXRhX2NhY2hlX3QgZWM7CisJdGVzdF9lZGF0YV9j YWNoZV9pbml0KCZlYyk7CisKKwkvKiBHZXQgb25lICovCisJZWRhdGFfdCAqZWQxID0gZWRhdGFf Y2FjaGVfZ2V0KFRTRE5fTlVMTCwgJmVjKTsKKwlhc3NlcnRfcHRyX25vdF9udWxsKGVkMSwgIiIp OworCisJLyogQ2FjaGUgc2hvdWxkIGJlIGVtcHR5ICovCisJYXNzZXJ0X3p1X2VxKGF0b21pY19s b2FkX3p1KCZlYy5jb3VudCwgQVRPTUlDX1JFTEFYRUQpLCAwLCAiIik7CisKKwkvKiBHZXQgYW5v dGhlciAqLworCWVkYXRhX3QgKmVkMiA9IGVkYXRhX2NhY2hlX2dldChUU0ROX05VTEwsICZlYyk7 CisJYXNzZXJ0X3B0cl9ub3RfbnVsbChlZDIsICIiKTsKKworCS8qIFN0aWxsIGVtcHR5ICovCisJ YXNzZXJ0X3p1X2VxKGF0b21pY19sb2FkX3p1KCZlYy5jb3VudCwgQVRPTUlDX1JFTEFYRUQpLCAw LCAiIik7CisKKwkvKiBQdXQgb25lIGJhY2ssIGFuZCB0aGUgY2FjaGUgc2hvdWxkIG5vdyBoYXZl IG9uZSBpdGVtICovCisJZWRhdGFfY2FjaGVfcHV0KFRTRE5fTlVMTCwgJmVjLCBlZDEpOworCWFz c2VydF96dV9lcShhdG9taWNfbG9hZF96dSgmZWMuY291bnQsIEFUT01JQ19SRUxBWEVEKSwgMSwg IiIpOworCisJLyogUmVhbGxvY2F0aW5nIHNob3VsZCByZXVzZSB0aGUgaXRlbSwgYW5kIGxlYXZl IGFuIGVtcHR5IGNhY2hlLiAqLworCWVkYXRhX3QgKmVkMV9hZ2FpbiA9IGVkYXRhX2NhY2hlX2dl dChUU0ROX05VTEwsICZlYyk7CisJYXNzZXJ0X3B0cl9lcShlZDEsIGVkMV9hZ2FpbiwgIiIpOwor CWFzc2VydF96dV9lcShhdG9taWNfbG9hZF96dSgmZWMuY291bnQsIEFUT01JQ19SRUxBWEVEKSwg MCwgIiIpOworCisJdGVzdF9lZGF0YV9jYWNoZV9kZXN0cm95KCZlYyk7Cit9CitURVNUX0VORAor CitzdGF0aWMgc2l6ZV90CitlY2ZfY291bnQoZWRhdGFfY2FjaGVfZmFzdF90ICplY2YpIHsKKwlz aXplX3QgY291bnQgPSAwOworCWVkYXRhX3QgKmN1cjsKKwlxbF9mb3JlYWNoKGN1ciwgJmVjZi0+ bGlzdC5oZWFkLCBxbF9saW5rX2luYWN0aXZlKSB7CisJCWNvdW50Kys7CisJfQorCXJldHVybiBj b3VudDsKK30KKworVEVTVF9CRUdJTih0ZXN0X2VkYXRhX2NhY2hlX2Zhc3Rfc2ltcGxlKSB7CisJ ZWRhdGFfY2FjaGVfdCBlYzsKKwllZGF0YV9jYWNoZV9mYXN0X3QgZWNmOworCisJdGVzdF9lZGF0 YV9jYWNoZV9pbml0KCZlYyk7CisJZWRhdGFfY2FjaGVfZmFzdF9pbml0KCZlY2YsICZlYyk7CisK KwllZGF0YV90ICplZDEgPSBlZGF0YV9jYWNoZV9mYXN0X2dldChUU0ROX05VTEwsICZlY2YpOwor CWV4cGVjdF9wdHJfbm90X251bGwoZWQxLCAiIik7CisJZXhwZWN0X3p1X2VxKGVjZl9jb3VudCgm ZWNmKSwgMCwgIiIpOworCWV4cGVjdF96dV9lcShhdG9taWNfbG9hZF96dSgmZWMuY291bnQsIEFU T01JQ19SRUxBWEVEKSwgMCwgIiIpOworCisJZWRhdGFfdCAqZWQyID0gZWRhdGFfY2FjaGVfZmFz dF9nZXQoVFNETl9OVUxMLCAmZWNmKTsKKwlleHBlY3RfcHRyX25vdF9udWxsKGVkMiwgIiIpOwor CWV4cGVjdF96dV9lcShlY2ZfY291bnQoJmVjZiksIDAsICIiKTsKKwlleHBlY3RfenVfZXEoYXRv bWljX2xvYWRfenUoJmVjLmNvdW50LCBBVE9NSUNfUkVMQVhFRCksIDAsICIiKTsKKworCWVkYXRh X2NhY2hlX2Zhc3RfcHV0KFRTRE5fTlVMTCwgJmVjZiwgZWQxKTsKKwlleHBlY3RfenVfZXEoZWNm X2NvdW50KCZlY2YpLCAxLCAiIik7CisJZXhwZWN0X3p1X2VxKGF0b21pY19sb2FkX3p1KCZlYy5j b3VudCwgQVRPTUlDX1JFTEFYRUQpLCAwLCAiIik7CisKKwllZGF0YV9jYWNoZV9mYXN0X3B1dChU U0ROX05VTEwsICZlY2YsIGVkMik7CisJZXhwZWN0X3p1X2VxKGVjZl9jb3VudCgmZWNmKSwgMiwg IiIpOworCWV4cGVjdF96dV9lcShhdG9taWNfbG9hZF96dSgmZWMuY291bnQsIEFUT01JQ19SRUxB WEVEKSwgMCwgIiIpOworCisJLyogTElGTyBvcmRlcmluZy4gKi8KKwlleHBlY3RfcHRyX2VxKGVk MiwgZWRhdGFfY2FjaGVfZmFzdF9nZXQoVFNETl9OVUxMLCAmZWNmKSwgIiIpOworCWV4cGVjdF96 dV9lcShlY2ZfY291bnQoJmVjZiksIDEsICIiKTsKKwlleHBlY3RfenVfZXEoYXRvbWljX2xvYWRf enUoJmVjLmNvdW50LCBBVE9NSUNfUkVMQVhFRCksIDAsICIiKTsKKworCWV4cGVjdF9wdHJfZXEo ZWQxLCBlZGF0YV9jYWNoZV9mYXN0X2dldChUU0ROX05VTEwsICZlY2YpLCAiIik7CisJZXhwZWN0 X3p1X2VxKGVjZl9jb3VudCgmZWNmKSwgMCwgIiIpOworCWV4cGVjdF96dV9lcShhdG9taWNfbG9h ZF96dSgmZWMuY291bnQsIEFUT01JQ19SRUxBWEVEKSwgMCwgIiIpOworCisJdGVzdF9lZGF0YV9j YWNoZV9kZXN0cm95KCZlYyk7Cit9CitURVNUX0VORAorCitURVNUX0JFR0lOKHRlc3RfZWRhdGFf Y2FjaGVfZmlsbCkgeworCWVkYXRhX2NhY2hlX3QgZWM7CisJZWRhdGFfY2FjaGVfZmFzdF90IGVj ZjsKKworCXRlc3RfZWRhdGFfY2FjaGVfaW5pdCgmZWMpOworCWVkYXRhX2NhY2hlX2Zhc3RfaW5p dCgmZWNmLCAmZWMpOworCisJZWRhdGFfdCAqYWxsb2NzW0VEQVRBX0NBQ0hFX0ZBU1RfRklMTCAq IDJdOworCisJLyoKKwkgKiBJZiB0aGUgZmFsbGJhY2sgY2FjaGUgY2FuJ3Qgc2F0aXNmeSB0aGUg cmVxdWVzdCwgd2Ugc2hvdWxkbid0IGRvCisJICogZXh0cmEgYWxsb2NhdGlvbnMgdW50aWwgY29t cGVsbGVkIHRvLiAgUHV0IGhhbGYgdGhlIGZpbGwgZ29hbCBpbiB0aGUKKwkgKiBmYWxsYmFjay4K KwkgKi8KKwlmb3IgKGludCBpID0gMDsgaSA8IEVEQVRBX0NBQ0hFX0ZBU1RfRklMTCAvIDI7IGkr KykgeworCQlhbGxvY3NbaV0gPSBlZGF0YV9jYWNoZV9nZXQoVFNETl9OVUxMLCAmZWMpOworCX0K Kwlmb3IgKGludCBpID0gMDsgaSA8IEVEQVRBX0NBQ0hFX0ZBU1RfRklMTCAvIDI7IGkrKykgewor CQllZGF0YV9jYWNoZV9wdXQoVFNETl9OVUxMLCAmZWMsIGFsbG9jc1tpXSk7CisJfQorCWV4cGVj dF96dV9lcShFREFUQV9DQUNIRV9GQVNUX0ZJTEwgLyAyLAorCSAgICBhdG9taWNfbG9hZF96dSgm ZWMuY291bnQsIEFUT01JQ19SRUxBWEVEKSwgIiIpOworCisJYWxsb2NzWzBdID0gZWRhdGFfY2Fj aGVfZmFzdF9nZXQoVFNETl9OVUxMLCAmZWNmKTsKKwlleHBlY3RfenVfZXEoRURBVEFfQ0FDSEVf RkFTVF9GSUxMIC8gMiAtIDEsIGVjZl9jb3VudCgmZWNmKSwKKwkgICAgIlNob3VsZCBoYXZlIGdy YWJiZWQgYWxsIGVkYXRhcyBhdmFpbGFibGUgYnV0IG5vIG1vcmUuIik7CisKKwlmb3IgKGludCBp ID0gMTsgaSA8IEVEQVRBX0NBQ0hFX0ZBU1RfRklMTCAvIDI7IGkrKykgeworCQlhbGxvY3NbaV0g PSBlZGF0YV9jYWNoZV9mYXN0X2dldChUU0ROX05VTEwsICZlY2YpOworCQlleHBlY3RfcHRyX25v dF9udWxsKGFsbG9jc1tpXSwgIiIpOworCX0KKwlleHBlY3RfenVfZXEoMCwgZWNmX2NvdW50KCZl Y2YpLCAiIik7CisKKwkvKiBXaGVuIGZvcmNlZCwgd2Ugc2hvdWxkIGFsbG9jIGZyb20gdGhlIGJh c2UuICovCisJZWRhdGFfdCAqZWRhdGEgPSBlZGF0YV9jYWNoZV9mYXN0X2dldChUU0ROX05VTEws ICZlY2YpOworCWV4cGVjdF9wdHJfbm90X251bGwoZWRhdGEsICIiKTsKKwlleHBlY3RfenVfZXEo MCwgZWNmX2NvdW50KCZlY2YpLCAiQWxsb2NhdGVkIG1vcmUgdGhhbiBuZWNlc3NhcnkiKTsKKwll eHBlY3RfenVfZXEoMCwgYXRvbWljX2xvYWRfenUoJmVjLmNvdW50LCBBVE9NSUNfUkVMQVhFRCks CisJICAgICJBbGxvY2F0ZWQgbW9yZSB0aGFuIG5lY2Vzc2FyeSIpOworCisJLyoKKwkgKiBXZSBz aG91bGQgY29ycmVjdGx5IGZpbGwgaW4gdGhlIGNvbW1vbiBjYXNlIHdoZXJlIHRoZSBmYWxsYmFj ayBpc24ndAorCSAqIGV4aGF1c3RlZCwgdG9vLgorCSAqLworCWZvciAoaW50IGkgPSAwOyBpIDwg RURBVEFfQ0FDSEVfRkFTVF9GSUxMICogMjsgaSsrKSB7CisJCWFsbG9jc1tpXSA9IGVkYXRhX2Nh Y2hlX2dldChUU0ROX05VTEwsICZlYyk7CisJCWV4cGVjdF9wdHJfbm90X251bGwoYWxsb2NzW2ld LCAiIik7CisJfQorCWZvciAoaW50IGkgPSAwOyBpIDwgRURBVEFfQ0FDSEVfRkFTVF9GSUxMICog MjsgaSsrKSB7CisJCWVkYXRhX2NhY2hlX3B1dChUU0ROX05VTEwsICZlYywgYWxsb2NzW2ldKTsK Kwl9CisKKwlhbGxvY3NbMF0gPSBlZGF0YV9jYWNoZV9mYXN0X2dldChUU0ROX05VTEwsICZlY2Yp OworCWV4cGVjdF96dV9lcShFREFUQV9DQUNIRV9GQVNUX0ZJTEwgLSAxLCBlY2ZfY291bnQoJmVj ZiksICIiKTsKKwlleHBlY3RfenVfZXEoRURBVEFfQ0FDSEVfRkFTVF9GSUxMLAorCSAgICBhdG9t aWNfbG9hZF96dSgmZWMuY291bnQsIEFUT01JQ19SRUxBWEVEKSwgIiIpOworCWZvciAoaW50IGkg PSAxOyBpIDwgRURBVEFfQ0FDSEVfRkFTVF9GSUxMOyBpKyspIHsKKwkJZXhwZWN0X3p1X2VxKEVE QVRBX0NBQ0hFX0ZBU1RfRklMTCAtIGksIGVjZl9jb3VudCgmZWNmKSwgIiIpOworCQlleHBlY3Rf enVfZXEoRURBVEFfQ0FDSEVfRkFTVF9GSUxMLAorCQkgICAgYXRvbWljX2xvYWRfenUoJmVjLmNv dW50LCBBVE9NSUNfUkVMQVhFRCksICIiKTsKKwkJYWxsb2NzW2ldID0gZWRhdGFfY2FjaGVfZmFz dF9nZXQoVFNETl9OVUxMLCAmZWNmKTsKKwkJZXhwZWN0X3B0cl9ub3RfbnVsbChhbGxvY3NbaV0s ICIiKTsKKwl9CisJZXhwZWN0X3p1X2VxKDAsIGVjZl9jb3VudCgmZWNmKSwgIiIpOworCWV4cGVj dF96dV9lcShFREFUQV9DQUNIRV9GQVNUX0ZJTEwsCisJICAgIGF0b21pY19sb2FkX3p1KCZlYy5j b3VudCwgQVRPTUlDX1JFTEFYRUQpLCAiIik7CisKKwlhbGxvY3NbMF0gPSBlZGF0YV9jYWNoZV9m YXN0X2dldChUU0ROX05VTEwsICZlY2YpOworCWV4cGVjdF96dV9lcShFREFUQV9DQUNIRV9GQVNU X0ZJTEwgLSAxLCBlY2ZfY291bnQoJmVjZiksICIiKTsKKwlleHBlY3RfenVfZXEoMCwgYXRvbWlj X2xvYWRfenUoJmVjLmNvdW50LCBBVE9NSUNfUkVMQVhFRCksICIiKTsKKwlmb3IgKGludCBpID0g MTsgaSA8IEVEQVRBX0NBQ0hFX0ZBU1RfRklMTDsgaSsrKSB7CisJCWV4cGVjdF96dV9lcShFREFU QV9DQUNIRV9GQVNUX0ZJTEwgLSBpLCBlY2ZfY291bnQoJmVjZiksICIiKTsKKwkJZXhwZWN0X3p1 X2VxKDAsIGF0b21pY19sb2FkX3p1KCZlYy5jb3VudCwgQVRPTUlDX1JFTEFYRUQpLCAiIik7CisJ CWFsbG9jc1tpXSA9IGVkYXRhX2NhY2hlX2Zhc3RfZ2V0KFRTRE5fTlVMTCwgJmVjZik7CisJCWV4 cGVjdF9wdHJfbm90X251bGwoYWxsb2NzW2ldLCAiIik7CisJfQorCWV4cGVjdF96dV9lcSgwLCBl Y2ZfY291bnQoJmVjZiksICIiKTsKKwlleHBlY3RfenVfZXEoMCwgYXRvbWljX2xvYWRfenUoJmVj LmNvdW50LCBBVE9NSUNfUkVMQVhFRCksICIiKTsKKworCXRlc3RfZWRhdGFfY2FjaGVfZGVzdHJv eSgmZWMpOworfQorVEVTVF9FTkQKKworVEVTVF9CRUdJTih0ZXN0X2VkYXRhX2NhY2hlX2Rpc2Fi bGUpIHsKKwllZGF0YV9jYWNoZV90IGVjOworCWVkYXRhX2NhY2hlX2Zhc3RfdCBlY2Y7CisKKwl0 ZXN0X2VkYXRhX2NhY2hlX2luaXQoJmVjKTsKKwllZGF0YV9jYWNoZV9mYXN0X2luaXQoJmVjZiwg JmVjKTsKKworCWZvciAoaW50IGkgPSAwOyBpIDwgRURBVEFfQ0FDSEVfRkFTVF9GSUxMOyBpKysp IHsKKwkJZWRhdGFfdCAqZWRhdGEgPSBlZGF0YV9jYWNoZV9nZXQoVFNETl9OVUxMLCAmZWMpOwor CQlleHBlY3RfcHRyX25vdF9udWxsKGVkYXRhLCAiIik7CisJCWVkYXRhX2NhY2hlX2Zhc3RfcHV0 KFRTRE5fTlVMTCwgJmVjZiwgZWRhdGEpOworCX0KKworCWV4cGVjdF96dV9lcShFREFUQV9DQUNI RV9GQVNUX0ZJTEwsIGVjZl9jb3VudCgmZWNmKSwgIiIpOworCWV4cGVjdF96dV9lcSgwLCBhdG9t aWNfbG9hZF96dSgmZWMuY291bnQsIEFUT01JQ19SRUxBWEVEKSwgIiIpOworCisJZWRhdGFfY2Fj aGVfZmFzdF9kaXNhYmxlKFRTRE5fTlVMTCwgJmVjZik7CisKKwlleHBlY3RfenVfZXEoMCwgZWNm X2NvdW50KCZlY2YpLCAiIik7CisJZXhwZWN0X3p1X2VxKEVEQVRBX0NBQ0hFX0ZBU1RfRklMTCwK KwkgICAgYXRvbWljX2xvYWRfenUoJmVjLmNvdW50LCBBVE9NSUNfUkVMQVhFRCksICJEaXNhYmxp bmcgc2hvdWxkIGZsdXNoIik7CisKKwllZGF0YV90ICplZGF0YSA9IGVkYXRhX2NhY2hlX2Zhc3Rf Z2V0KFRTRE5fTlVMTCwgJmVjZik7CisJZXhwZWN0X3p1X2VxKDAsIGVjZl9jb3VudCgmZWNmKSwg IiIpOworCWV4cGVjdF96dV9lcShFREFUQV9DQUNIRV9GQVNUX0ZJTEwgLSAxLAorCSAgICBhdG9t aWNfbG9hZF96dSgmZWMuY291bnQsIEFUT01JQ19SRUxBWEVEKSwKKwkgICAgIkRpc2FibGVkIGVj ZiBzaG91bGQgZm9yd2FyZCBvbiBnZXQiKTsKKworCWVkYXRhX2NhY2hlX2Zhc3RfcHV0KFRTRE5f TlVMTCwgJmVjZiwgZWRhdGEpOworCWV4cGVjdF96dV9lcSgwLCBlY2ZfY291bnQoJmVjZiksICIi KTsKKwlleHBlY3RfenVfZXEoRURBVEFfQ0FDSEVfRkFTVF9GSUxMLAorCSAgICBhdG9taWNfbG9h ZF96dSgmZWMuY291bnQsIEFUT01JQ19SRUxBWEVEKSwKKwkgICAgIkRpc2FibGVkIGVjZiBzaG91 bGQgZm9yd2FyZCBvbiBwdXQiKTsKKworCXRlc3RfZWRhdGFfY2FjaGVfZGVzdHJveSgmZWMpOwor fQorVEVTVF9FTkQKKworaW50CittYWluKHZvaWQpIHsKKwlyZXR1cm4gdGVzdCgKKwkgICAgdGVz dF9lZGF0YV9jYWNoZSwKKwkgICAgdGVzdF9lZGF0YV9jYWNoZV9mYXN0X3NpbXBsZSwKKwkgICAg dGVzdF9lZGF0YV9jYWNoZV9maWxsLAorCSAgICB0ZXN0X2VkYXRhX2NhY2hlX2Rpc2FibGUpOwor fQoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rl c3QvdW5pdC9lbWl0dGVyLmMgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMu MC90ZXN0L3VuaXQvZW1pdHRlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu LmVmOGY5ZmYKLS0tIC9kZXYvbnVsbAorKysgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1h bGxvYy01LjMuMC90ZXN0L3VuaXQvZW1pdHRlci5jCkBAIC0wLDAgKzEsNTMzIEBACisjaW5jbHVk ZSAidGVzdC9qZW1hbGxvY190ZXN0LmgiCisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvZW1p dHRlci5oIgorCisvKgorICogVGhpcyBpcyBzbyB1c2VmdWwgZm9yIGRlYnVnZ2luZyBhbmQgZmVh dHVyZSB3b3JrLCB3ZSdsbCBsZWF2ZSBwcmludGluZworICogZnVuY3Rpb25hbGl0eSBjb21taXR0 ZWQgYnV0IGRpc2FibGVkIGJ5IGRlZmF1bHQuCisgKi8KKy8qIFByaW50IHRoZSB0ZXh0IGFzIGl0 IHdpbGwgYXBwZWFyLiAqLworc3RhdGljIGJvb2wgcHJpbnRfcmF3ID0gZmFsc2U7CisvKiBQcmlu dCB0aGUgdGV4dCBlc2NhcGVkLCBzbyBpdCBjYW4gYmUgY29waWVkIGJhY2sgaW50byB0aGUgdGVz dCBjYXNlLiAqLworc3RhdGljIGJvb2wgcHJpbnRfZXNjYXBlZCA9IGZhbHNlOworCit0eXBlZGVm IHN0cnVjdCBidWZfZGVzY3JpcHRvcl9zIGJ1Zl9kZXNjcmlwdG9yX3Q7CitzdHJ1Y3QgYnVmX2Rl c2NyaXB0b3JfcyB7CisJY2hhciAqYnVmOworCXNpemVfdCBsZW47CisJYm9vbCBtaWRfcXVvdGU7 Cit9OworCisvKgorICogRm9yd2FyZHMgYWxsIHdyaXRlcyB0byB0aGUgcGFzc2VkLWluIGJ1Zl92 ICh3aGljaCBzaG91bGQgYmUgY2FzdCBmcm9tIGEKKyAqIGJ1Zl9kZXNjcmlwdG9yX3QgKikuCisg Ki8KK3N0YXRpYyB2b2lkCitmb3J3YXJkaW5nX2NiKHZvaWQgKmJ1Zl9kZXNjcmlwdG9yX3YsIGNv bnN0IGNoYXIgKnN0cikgeworCWJ1Zl9kZXNjcmlwdG9yX3QgKmJ1Zl9kZXNjcmlwdG9yID0gKGJ1 Zl9kZXNjcmlwdG9yX3QgKilidWZfZGVzY3JpcHRvcl92OworCisJaWYgKHByaW50X3Jhdykgewor CQltYWxsb2NfcHJpbnRmKCIlcyIsIHN0cik7CisJfQorCWlmIChwcmludF9lc2NhcGVkKSB7CisJ CWNvbnN0IGNoYXIgKml0ID0gc3RyOworCQl3aGlsZSAoKml0ICE9ICdcMCcpIHsKKwkJCWlmICgh YnVmX2Rlc2NyaXB0b3ItPm1pZF9xdW90ZSkgeworCQkJCW1hbGxvY19wcmludGYoIlwiIik7CisJ CQkJYnVmX2Rlc2NyaXB0b3ItPm1pZF9xdW90ZSA9IHRydWU7CisJCQl9CisJCQlzd2l0Y2ggKCpp dCkgeworCQkJY2FzZSAnXFwnOgorCQkJCW1hbGxvY19wcmludGYoIlxcIik7CisJCQkJYnJlYWs7 CisJCQljYXNlICdcIic6CisJCQkJbWFsbG9jX3ByaW50ZigiXFxcIiIpOworCQkJCWJyZWFrOwor CQkJY2FzZSAnXHQnOgorCQkJCW1hbGxvY19wcmludGYoIlxcdCIpOworCQkJCWJyZWFrOworCQkJ Y2FzZSAnXG4nOgorCQkJCW1hbGxvY19wcmludGYoIlxcblwiXG4iKTsKKwkJCQlidWZfZGVzY3Jp cHRvci0+bWlkX3F1b3RlID0gZmFsc2U7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCW1h bGxvY19wcmludGYoIiVjIiwgKml0KTsKKwkJCX0KKwkJCWl0Kys7CisJCX0KKwl9CisKKwlzaXpl X3Qgd3JpdHRlbiA9IG1hbGxvY19zbnByaW50ZihidWZfZGVzY3JpcHRvci0+YnVmLAorCSAgICBi dWZfZGVzY3JpcHRvci0+bGVuLCAiJXMiLCBzdHIpOworCWV4cGVjdF96dV9lcSh3cml0dGVuLCBz dHJsZW4oc3RyKSwgIkJ1ZmZlciBvdmVyZmxvdyEiKTsKKwlidWZfZGVzY3JpcHRvci0+YnVmICs9 IHdyaXR0ZW47CisJYnVmX2Rlc2NyaXB0b3ItPmxlbiAtPSB3cml0dGVuOworCWV4cGVjdF96dV9n dChidWZfZGVzY3JpcHRvci0+bGVuLCAwLCAiQnVmZmVyIG91dCBvZiBzcGFjZSEiKTsKK30KKwor c3RhdGljIHZvaWQKK2V4cGVjdF9lbWl0X291dHB1dCh2b2lkICgqZW1pdF9mbikoZW1pdHRlcl90 ICopLAorICAgIGNvbnN0IGNoYXIgKmV4cGVjdGVkX2pzb25fb3V0cHV0LAorICAgIGNvbnN0IGNo YXIgKmV4cGVjdGVkX2pzb25fY29tcGFjdF9vdXRwdXQsCisgICAgY29uc3QgY2hhciAqZXhwZWN0 ZWRfdGFibGVfb3V0cHV0KSB7CisJZW1pdHRlcl90IGVtaXR0ZXI7CisJY2hhciBidWZbTUFMTE9D X1BSSU5URl9CVUZTSVpFXTsKKwlidWZfZGVzY3JpcHRvcl90IGJ1Zl9kZXNjcmlwdG9yOworCisJ YnVmX2Rlc2NyaXB0b3IuYnVmID0gYnVmOworCWJ1Zl9kZXNjcmlwdG9yLmxlbiA9IE1BTExPQ19Q UklOVEZfQlVGU0laRTsKKwlidWZfZGVzY3JpcHRvci5taWRfcXVvdGUgPSBmYWxzZTsKKworCWVt aXR0ZXJfaW5pdCgmZW1pdHRlciwgZW1pdHRlcl9vdXRwdXRfanNvbiwgJmZvcndhcmRpbmdfY2Is CisJICAgICZidWZfZGVzY3JpcHRvcik7CisJKCplbWl0X2ZuKSgmZW1pdHRlcik7CisJZXhwZWN0 X3N0cl9lcShleHBlY3RlZF9qc29uX291dHB1dCwgYnVmLCAianNvbiBvdXRwdXQgZmFpbHVyZSIp OworCisJYnVmX2Rlc2NyaXB0b3IuYnVmID0gYnVmOworCWJ1Zl9kZXNjcmlwdG9yLmxlbiA9IE1B TExPQ19QUklOVEZfQlVGU0laRTsKKwlidWZfZGVzY3JpcHRvci5taWRfcXVvdGUgPSBmYWxzZTsK KworCWVtaXR0ZXJfaW5pdCgmZW1pdHRlciwgZW1pdHRlcl9vdXRwdXRfanNvbl9jb21wYWN0LCAm Zm9yd2FyZGluZ19jYiwKKwkgICAgJmJ1Zl9kZXNjcmlwdG9yKTsKKwkoKmVtaXRfZm4pKCZlbWl0 dGVyKTsKKwlleHBlY3Rfc3RyX2VxKGV4cGVjdGVkX2pzb25fY29tcGFjdF9vdXRwdXQsIGJ1ZiwK KwkgICAgImNvbXBhY3QganNvbiBvdXRwdXQgZmFpbHVyZSIpOworCisJYnVmX2Rlc2NyaXB0b3Iu YnVmID0gYnVmOworCWJ1Zl9kZXNjcmlwdG9yLmxlbiA9IE1BTExPQ19QUklOVEZfQlVGU0laRTsK KwlidWZfZGVzY3JpcHRvci5taWRfcXVvdGUgPSBmYWxzZTsKKworCWVtaXR0ZXJfaW5pdCgmZW1p dHRlciwgZW1pdHRlcl9vdXRwdXRfdGFibGUsICZmb3J3YXJkaW5nX2NiLAorCSAgICAmYnVmX2Rl c2NyaXB0b3IpOworCSgqZW1pdF9mbikoJmVtaXR0ZXIpOworCWV4cGVjdF9zdHJfZXEoZXhwZWN0 ZWRfdGFibGVfb3V0cHV0LCBidWYsICJ0YWJsZSBvdXRwdXQgZmFpbHVyZSIpOworfQorCitzdGF0 aWMgdm9pZAorZW1pdF9kaWN0KGVtaXR0ZXJfdCAqZW1pdHRlcikgeworCWJvb2wgYl9mYWxzZSA9 IGZhbHNlOworCWJvb2wgYl90cnVlID0gdHJ1ZTsKKwlpbnQgaV8xMjMgPSAxMjM7CisJY29uc3Qg Y2hhciAqc3RyID0gImEgc3RyaW5nIjsKKworCWVtaXR0ZXJfYmVnaW4oZW1pdHRlcik7CisJZW1p dHRlcl9kaWN0X2JlZ2luKGVtaXR0ZXIsICJmb28iLCAiVGhpcyBpcyB0aGUgZm9vIHRhYmxlOiIp OworCWVtaXR0ZXJfa3YoZW1pdHRlciwgImFiYyIsICJBQkMiLCBlbWl0dGVyX3R5cGVfYm9vbCwg JmJfZmFsc2UpOworCWVtaXR0ZXJfa3YoZW1pdHRlciwgImRlZiIsICJERUYiLCBlbWl0dGVyX3R5 cGVfYm9vbCwgJmJfdHJ1ZSk7CisJZW1pdHRlcl9rdl9ub3RlKGVtaXR0ZXIsICJnaGkiLCAiR0hJ IiwgZW1pdHRlcl90eXBlX2ludCwgJmlfMTIzLAorCSAgICAibm90ZV9rZXkxIiwgZW1pdHRlcl90 eXBlX3N0cmluZywgJnN0cik7CisJZW1pdHRlcl9rdl9ub3RlKGVtaXR0ZXIsICJqa2wiLCAiSktM IiwgZW1pdHRlcl90eXBlX3N0cmluZywgJnN0ciwKKwkgICAgIm5vdGVfa2V5MiIsIGVtaXR0ZXJf dHlwZV9ib29sLCAmYl9mYWxzZSk7CisJZW1pdHRlcl9kaWN0X2VuZChlbWl0dGVyKTsKKwllbWl0 dGVyX2VuZChlbWl0dGVyKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmRpY3RfanNvbiA9Cisi e1xuIgorIlx0XCJmb29cIjoge1xuIgorIlx0XHRcImFiY1wiOiBmYWxzZSxcbiIKKyJcdFx0XCJk ZWZcIjogdHJ1ZSxcbiIKKyJcdFx0XCJnaGlcIjogMTIzLFxuIgorIlx0XHRcImprbFwiOiBcImEg c3RyaW5nXCJcbiIKKyJcdH1cbiIKKyJ9XG4iOworc3RhdGljIGNvbnN0IGNoYXIgKmRpY3RfanNv bl9jb21wYWN0ID0KKyJ7IgorCSJcImZvb1wiOnsiCisJCSJcImFiY1wiOmZhbHNlLCIKKwkJIlwi ZGVmXCI6dHJ1ZSwiCisJCSJcImdoaVwiOjEyMywiCisJCSJcImprbFwiOlwiYSBzdHJpbmdcIiIK KwkifSIKKyJ9IjsKK3N0YXRpYyBjb25zdCBjaGFyICpkaWN0X3RhYmxlID0KKyJUaGlzIGlzIHRo ZSBmb28gdGFibGU6XG4iCisiICBBQkM6IGZhbHNlXG4iCisiICBERUY6IHRydWVcbiIKKyIgIEdI STogMTIzIChub3RlX2tleTE6IFwiYSBzdHJpbmdcIilcbiIKKyIgIEpLTDogXCJhIHN0cmluZ1wi IChub3RlX2tleTI6IGZhbHNlKVxuIjsKKworc3RhdGljIHZvaWQKK2VtaXRfdGFibGVfcHJpbnRm KGVtaXR0ZXJfdCAqZW1pdHRlcikgeworCWVtaXR0ZXJfYmVnaW4oZW1pdHRlcik7CisJZW1pdHRl cl90YWJsZV9wcmludGYoZW1pdHRlciwgIlRhYmxlIG5vdGUgMVxuIik7CisJZW1pdHRlcl90YWJs ZV9wcmludGYoZW1pdHRlciwgIlRhYmxlIG5vdGUgMiAlc1xuIiwKKwkgICAgIndpdGggZm9ybWF0 IHN0cmluZyIpOworCWVtaXR0ZXJfZW5kKGVtaXR0ZXIpOworfQorCitzdGF0aWMgY29uc3QgY2hh ciAqdGFibGVfcHJpbnRmX2pzb24gPQorIntcbiIKKyJ9XG4iOworc3RhdGljIGNvbnN0IGNoYXIg KnRhYmxlX3ByaW50Zl9qc29uX2NvbXBhY3QgPSAie30iOworc3RhdGljIGNvbnN0IGNoYXIgKnRh YmxlX3ByaW50Zl90YWJsZSA9CisiVGFibGUgbm90ZSAxXG4iCisiVGFibGUgbm90ZSAyIHdpdGgg Zm9ybWF0IHN0cmluZ1xuIjsKKworc3RhdGljIHZvaWQgZW1pdF9uZXN0ZWRfZGljdChlbWl0dGVy X3QgKmVtaXR0ZXIpIHsKKwlpbnQgdmFsID0gMTIzOworCWVtaXR0ZXJfYmVnaW4oZW1pdHRlcik7 CisJZW1pdHRlcl9kaWN0X2JlZ2luKGVtaXR0ZXIsICJqc29uMSIsICJEaWN0IDEiKTsKKwllbWl0 dGVyX2RpY3RfYmVnaW4oZW1pdHRlciwgImpzb24yIiwgIkRpY3QgMiIpOworCWVtaXR0ZXJfa3Yo ZW1pdHRlciwgInByaW1pdGl2ZSIsICJBIHByaW1pdGl2ZSIsIGVtaXR0ZXJfdHlwZV9pbnQsICZ2 YWwpOworCWVtaXR0ZXJfZGljdF9lbmQoZW1pdHRlcik7IC8qIENsb3NlIDIgKi8KKwllbWl0dGVy X2RpY3RfYmVnaW4oZW1pdHRlciwgImpzb24zIiwgIkRpY3QgMyIpOworCWVtaXR0ZXJfZGljdF9l bmQoZW1pdHRlcik7IC8qIENsb3NlIDMgKi8KKwllbWl0dGVyX2RpY3RfZW5kKGVtaXR0ZXIpOyAv KiBDbG9zZSAxICovCisJZW1pdHRlcl9kaWN0X2JlZ2luKGVtaXR0ZXIsICJqc29uNCIsICJEaWN0 IDQiKTsKKwllbWl0dGVyX2t2KGVtaXR0ZXIsICJwcmltaXRpdmUiLCAiQW5vdGhlciBwcmltaXRp dmUiLAorCSAgICBlbWl0dGVyX3R5cGVfaW50LCAmdmFsKTsKKwllbWl0dGVyX2RpY3RfZW5kKGVt aXR0ZXIpOyAvKiBDbG9zZSA0ICovCisJZW1pdHRlcl9lbmQoZW1pdHRlcik7Cit9CisKK3N0YXRp YyBjb25zdCBjaGFyICpuZXN0ZWRfZGljdF9qc29uID0KKyJ7XG4iCisiXHRcImpzb24xXCI6IHtc biIKKyJcdFx0XCJqc29uMlwiOiB7XG4iCisiXHRcdFx0XCJwcmltaXRpdmVcIjogMTIzXG4iCisi XHRcdH0sXG4iCisiXHRcdFwianNvbjNcIjoge1xuIgorIlx0XHR9XG4iCisiXHR9LFxuIgorIlx0 XCJqc29uNFwiOiB7XG4iCisiXHRcdFwicHJpbWl0aXZlXCI6IDEyM1xuIgorIlx0fVxuIgorIn1c biI7CitzdGF0aWMgY29uc3QgY2hhciAqbmVzdGVkX2RpY3RfanNvbl9jb21wYWN0ID0KKyJ7Igor CSJcImpzb24xXCI6eyIKKwkJIlwianNvbjJcIjp7IgorCQkJIlwicHJpbWl0aXZlXCI6MTIzIgor CQkifSwiCisJCSJcImpzb24zXCI6eyIKKwkJIn0iCisJIn0sIgorCSJcImpzb240XCI6eyIKKwkJ IlwicHJpbWl0aXZlXCI6MTIzIgorCSJ9IgorIn0iOworc3RhdGljIGNvbnN0IGNoYXIgKm5lc3Rl ZF9kaWN0X3RhYmxlID0KKyJEaWN0IDFcbiIKKyIgIERpY3QgMlxuIgorIiAgICBBIHByaW1pdGl2 ZTogMTIzXG4iCisiICBEaWN0IDNcbiIKKyJEaWN0IDRcbiIKKyIgIEFub3RoZXIgcHJpbWl0aXZl OiAxMjNcbiI7CisKK3N0YXRpYyB2b2lkCitlbWl0X3R5cGVzKGVtaXR0ZXJfdCAqZW1pdHRlcikg eworCWJvb2wgYiA9IGZhbHNlOworCWludCBpID0gLTEyMzsKKwl1bnNpZ25lZCB1ID0gMTIzOwor CXNzaXplX3QgemQgPSAtNDU2OworCXNpemVfdCB6dSA9IDQ1NjsKKwljb25zdCBjaGFyICpzdHIg PSAic3RyaW5nIjsKKwl1aW50MzJfdCB1MzIgPSA3ODk7CisJdWludDY0X3QgdTY0ID0gMTAwMDAw MDAwMDBVTEw7CisKKwllbWl0dGVyX2JlZ2luKGVtaXR0ZXIpOworCWVtaXR0ZXJfa3YoZW1pdHRl ciwgImsxIiwgIksxIiwgZW1pdHRlcl90eXBlX2Jvb2wsICZiKTsKKwllbWl0dGVyX2t2KGVtaXR0 ZXIsICJrMiIsICJLMiIsIGVtaXR0ZXJfdHlwZV9pbnQsICZpKTsKKwllbWl0dGVyX2t2KGVtaXR0 ZXIsICJrMyIsICJLMyIsIGVtaXR0ZXJfdHlwZV91bnNpZ25lZCwgJnUpOworCWVtaXR0ZXJfa3Yo ZW1pdHRlciwgIms0IiwgIks0IiwgZW1pdHRlcl90eXBlX3NzaXplLCAmemQpOworCWVtaXR0ZXJf a3YoZW1pdHRlciwgIms1IiwgIks1IiwgZW1pdHRlcl90eXBlX3NpemUsICZ6dSk7CisJZW1pdHRl cl9rdihlbWl0dGVyLCAiazYiLCAiSzYiLCBlbWl0dGVyX3R5cGVfc3RyaW5nLCAmc3RyKTsKKwll bWl0dGVyX2t2KGVtaXR0ZXIsICJrNyIsICJLNyIsIGVtaXR0ZXJfdHlwZV91aW50MzIsICZ1MzIp OworCWVtaXR0ZXJfa3YoZW1pdHRlciwgIms4IiwgIks4IiwgZW1pdHRlcl90eXBlX3VpbnQ2NCwg JnU2NCk7CisJLyoKKwkgKiBXZSBkb24ndCB0ZXN0IHRoZSB0aXRsZSB0eXBlLCBzaW5jZSBpdCdz IG9ubHkgdXNlZCBmb3IgdGFibGVzLiAgSXQncworCSAqIHRlc3RlZCBpbiB0aGUgZW1pdHRlcl90 YWJsZV9yb3cgdGVzdHMuCisJICovCisJZW1pdHRlcl9lbmQoZW1pdHRlcik7Cit9CisKK3N0YXRp YyBjb25zdCBjaGFyICp0eXBlc19qc29uID0KKyJ7XG4iCisiXHRcImsxXCI6IGZhbHNlLFxuIgor Ilx0XCJrMlwiOiAtMTIzLFxuIgorIlx0XCJrM1wiOiAxMjMsXG4iCisiXHRcIms0XCI6IC00NTYs XG4iCisiXHRcIms1XCI6IDQ1NixcbiIKKyJcdFwiazZcIjogXCJzdHJpbmdcIixcbiIKKyJcdFwi azdcIjogNzg5LFxuIgorIlx0XCJrOFwiOiAxMDAwMDAwMDAwMFxuIgorIn1cbiI7CitzdGF0aWMg Y29uc3QgY2hhciAqdHlwZXNfanNvbl9jb21wYWN0ID0KKyJ7IgorCSJcImsxXCI6ZmFsc2UsIgor CSJcImsyXCI6LTEyMywiCisJIlwiazNcIjoxMjMsIgorCSJcIms0XCI6LTQ1NiwiCisJIlwiazVc Ijo0NTYsIgorCSJcIms2XCI6XCJzdHJpbmdcIiwiCisJIlwiazdcIjo3ODksIgorCSJcIms4XCI6 MTAwMDAwMDAwMDAiCisifSI7CitzdGF0aWMgY29uc3QgY2hhciAqdHlwZXNfdGFibGUgPQorIksx OiBmYWxzZVxuIgorIksyOiAtMTIzXG4iCisiSzM6IDEyM1xuIgorIks0OiAtNDU2XG4iCisiSzU6 IDQ1NlxuIgorIks2OiBcInN0cmluZ1wiXG4iCisiSzc6IDc4OVxuIgorIks4OiAxMDAwMDAwMDAw MFxuIjsKKworc3RhdGljIHZvaWQKK2VtaXRfbW9kYWwoZW1pdHRlcl90ICplbWl0dGVyKSB7CisJ aW50IHZhbCA9IDEyMzsKKwllbWl0dGVyX2JlZ2luKGVtaXR0ZXIpOworCWVtaXR0ZXJfZGljdF9i ZWdpbihlbWl0dGVyLCAiajAiLCAiVDAiKTsKKwllbWl0dGVyX2pzb25fa2V5KGVtaXR0ZXIsICJq MSIpOworCWVtaXR0ZXJfanNvbl9vYmplY3RfYmVnaW4oZW1pdHRlcik7CisJZW1pdHRlcl9rdihl bWl0dGVyLCAiaTEiLCAiSTEiLCBlbWl0dGVyX3R5cGVfaW50LCAmdmFsKTsKKwllbWl0dGVyX2pz b25fa3YoZW1pdHRlciwgImkyIiwgZW1pdHRlcl90eXBlX2ludCwgJnZhbCk7CisJZW1pdHRlcl90 YWJsZV9rdihlbWl0dGVyLCAiSTMiLCBlbWl0dGVyX3R5cGVfaW50LCAmdmFsKTsKKwllbWl0dGVy X3RhYmxlX2RpY3RfYmVnaW4oZW1pdHRlciwgIlQxIik7CisJZW1pdHRlcl9rdihlbWl0dGVyLCAi aTQiLCAiSTQiLCBlbWl0dGVyX3R5cGVfaW50LCAmdmFsKTsKKwllbWl0dGVyX2pzb25fb2JqZWN0 X2VuZChlbWl0dGVyKTsgLyogQ2xvc2UgajEgKi8KKwllbWl0dGVyX2t2KGVtaXR0ZXIsICJpNSIs ICJJNSIsIGVtaXR0ZXJfdHlwZV9pbnQsICZ2YWwpOworCWVtaXR0ZXJfdGFibGVfZGljdF9lbmQo ZW1pdHRlcik7IC8qIENsb3NlIFQxICovCisJZW1pdHRlcl9rdihlbWl0dGVyLCAiaTYiLCAiSTYi LCBlbWl0dGVyX3R5cGVfaW50LCAmdmFsKTsKKwllbWl0dGVyX2RpY3RfZW5kKGVtaXR0ZXIpOyAv KiBDbG9zZSBqMCAvIFQwICovCisJZW1pdHRlcl9lbmQoZW1pdHRlcik7Cit9CisKK2NvbnN0IGNo YXIgKm1vZGFsX2pzb24gPQorIntcbiIKKyJcdFwiajBcIjoge1xuIgorIlx0XHRcImoxXCI6IHtc biIKKyJcdFx0XHRcImkxXCI6IDEyMyxcbiIKKyJcdFx0XHRcImkyXCI6IDEyMyxcbiIKKyJcdFx0 XHRcImk0XCI6IDEyM1xuIgorIlx0XHR9LFxuIgorIlx0XHRcImk1XCI6IDEyMyxcbiIKKyJcdFx0 XCJpNlwiOiAxMjNcbiIKKyJcdH1cbiIKKyJ9XG4iOworY29uc3QgY2hhciAqbW9kYWxfanNvbl9j b21wYWN0ID0KKyJ7IgorCSJcImowXCI6eyIKKwkJIlwiajFcIjp7IgorCQkJIlwiaTFcIjoxMjMs IgorCQkJIlwiaTJcIjoxMjMsIgorCQkJIlwiaTRcIjoxMjMiCisJCSJ9LCIKKwkJIlwiaTVcIjox MjMsIgorCQkiXCJpNlwiOjEyMyIKKwkifSIKKyJ9IjsKK2NvbnN0IGNoYXIgKm1vZGFsX3RhYmxl ID0KKyJUMFxuIgorIiAgSTE6IDEyM1xuIgorIiAgSTM6IDEyM1xuIgorIiAgVDFcbiIKKyIgICAg STQ6IDEyM1xuIgorIiAgICBJNTogMTIzXG4iCisiICBJNjogMTIzXG4iOworCitzdGF0aWMgdm9p ZAorZW1pdF9qc29uX2FycmF5KGVtaXR0ZXJfdCAqZW1pdHRlcikgeworCWludCBpdmFsID0gMTIz OworCisJZW1pdHRlcl9iZWdpbihlbWl0dGVyKTsKKwllbWl0dGVyX2pzb25fa2V5KGVtaXR0ZXIs ICJkaWN0Iik7CisJZW1pdHRlcl9qc29uX29iamVjdF9iZWdpbihlbWl0dGVyKTsKKwllbWl0dGVy X2pzb25fa2V5KGVtaXR0ZXIsICJhcnIiKTsKKwllbWl0dGVyX2pzb25fYXJyYXlfYmVnaW4oZW1p dHRlcik7CisJZW1pdHRlcl9qc29uX29iamVjdF9iZWdpbihlbWl0dGVyKTsKKwllbWl0dGVyX2pz b25fa3YoZW1pdHRlciwgImZvbyIsIGVtaXR0ZXJfdHlwZV9pbnQsICZpdmFsKTsKKwllbWl0dGVy X2pzb25fb2JqZWN0X2VuZChlbWl0dGVyKTsgLyogQ2xvc2UgYXJyWzBdICovCisJLyogYXJyWzFd IGFuZCBhcnJbMl0gYXJlIHByaW1pdGl2ZXMuICovCisJZW1pdHRlcl9qc29uX3ZhbHVlKGVtaXR0 ZXIsIGVtaXR0ZXJfdHlwZV9pbnQsICZpdmFsKTsKKwllbWl0dGVyX2pzb25fdmFsdWUoZW1pdHRl ciwgZW1pdHRlcl90eXBlX2ludCwgJml2YWwpOworCWVtaXR0ZXJfanNvbl9vYmplY3RfYmVnaW4o ZW1pdHRlcik7CisJZW1pdHRlcl9qc29uX2t2KGVtaXR0ZXIsICJiYXIiLCBlbWl0dGVyX3R5cGVf aW50LCAmaXZhbCk7CisJZW1pdHRlcl9qc29uX2t2KGVtaXR0ZXIsICJiYXoiLCBlbWl0dGVyX3R5 cGVfaW50LCAmaXZhbCk7CisJZW1pdHRlcl9qc29uX29iamVjdF9lbmQoZW1pdHRlcik7IC8qIENs b3NlIGFyclszXS4gKi8KKwllbWl0dGVyX2pzb25fYXJyYXlfZW5kKGVtaXR0ZXIpOyAvKiBDbG9z ZSBhcnIuICovCisJZW1pdHRlcl9qc29uX29iamVjdF9lbmQoZW1pdHRlcik7IC8qIENsb3NlIGRp Y3QuICovCisJZW1pdHRlcl9lbmQoZW1pdHRlcik7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpq c29uX2FycmF5X2pzb24gPQorIntcbiIKKyJcdFwiZGljdFwiOiB7XG4iCisiXHRcdFwiYXJyXCI6 IFtcbiIKKyJcdFx0XHR7XG4iCisiXHRcdFx0XHRcImZvb1wiOiAxMjNcbiIKKyJcdFx0XHR9LFxu IgorIlx0XHRcdDEyMyxcbiIKKyJcdFx0XHQxMjMsXG4iCisiXHRcdFx0e1xuIgorIlx0XHRcdFx0 XCJiYXJcIjogMTIzLFxuIgorIlx0XHRcdFx0XCJiYXpcIjogMTIzXG4iCisiXHRcdFx0fVxuIgor Ilx0XHRdXG4iCisiXHR9XG4iCisifVxuIjsKK3N0YXRpYyBjb25zdCBjaGFyICpqc29uX2FycmF5 X2pzb25fY29tcGFjdCA9CisieyIKKwkiXCJkaWN0XCI6eyIKKwkJIlwiYXJyXCI6WyIKKwkJCSJ7 IgorCQkJCSJcImZvb1wiOjEyMyIKKwkJCSJ9LCIKKwkJCSIxMjMsIgorCQkJIjEyMywiCisJCQki eyIKKwkJCQkiXCJiYXJcIjoxMjMsIgorCQkJCSJcImJhelwiOjEyMyIKKwkJCSJ9IgorCQkiXSIK KwkifSIKKyJ9IjsKK3N0YXRpYyBjb25zdCBjaGFyICpqc29uX2FycmF5X3RhYmxlID0gIiI7CisK K3N0YXRpYyB2b2lkCitlbWl0X2pzb25fbmVzdGVkX2FycmF5KGVtaXR0ZXJfdCAqZW1pdHRlcikg eworCWludCBpdmFsID0gMTIzOworCWNoYXIgKnN2YWwgPSAiZm9vIjsKKwllbWl0dGVyX2JlZ2lu KGVtaXR0ZXIpOworCWVtaXR0ZXJfanNvbl9hcnJheV9iZWdpbihlbWl0dGVyKTsKKwkJZW1pdHRl cl9qc29uX2FycmF5X2JlZ2luKGVtaXR0ZXIpOworCQllbWl0dGVyX2pzb25fdmFsdWUoZW1pdHRl ciwgZW1pdHRlcl90eXBlX2ludCwgJml2YWwpOworCQllbWl0dGVyX2pzb25fdmFsdWUoZW1pdHRl ciwgZW1pdHRlcl90eXBlX3N0cmluZywgJnN2YWwpOworCQllbWl0dGVyX2pzb25fdmFsdWUoZW1p dHRlciwgZW1pdHRlcl90eXBlX2ludCwgJml2YWwpOworCQllbWl0dGVyX2pzb25fdmFsdWUoZW1p dHRlciwgZW1pdHRlcl90eXBlX3N0cmluZywgJnN2YWwpOworCQllbWl0dGVyX2pzb25fYXJyYXlf ZW5kKGVtaXR0ZXIpOworCQllbWl0dGVyX2pzb25fYXJyYXlfYmVnaW4oZW1pdHRlcik7CisJCWVt aXR0ZXJfanNvbl92YWx1ZShlbWl0dGVyLCBlbWl0dGVyX3R5cGVfaW50LCAmaXZhbCk7CisJCWVt aXR0ZXJfanNvbl9hcnJheV9lbmQoZW1pdHRlcik7CisJCWVtaXR0ZXJfanNvbl9hcnJheV9iZWdp bihlbWl0dGVyKTsKKwkJZW1pdHRlcl9qc29uX3ZhbHVlKGVtaXR0ZXIsIGVtaXR0ZXJfdHlwZV9z dHJpbmcsICZzdmFsKTsKKwkJZW1pdHRlcl9qc29uX3ZhbHVlKGVtaXR0ZXIsIGVtaXR0ZXJfdHlw ZV9pbnQsICZpdmFsKTsKKwkJZW1pdHRlcl9qc29uX2FycmF5X2VuZChlbWl0dGVyKTsKKwkJZW1p dHRlcl9qc29uX2FycmF5X2JlZ2luKGVtaXR0ZXIpOworCQllbWl0dGVyX2pzb25fYXJyYXlfZW5k KGVtaXR0ZXIpOworCWVtaXR0ZXJfanNvbl9hcnJheV9lbmQoZW1pdHRlcik7CisJZW1pdHRlcl9l bmQoZW1pdHRlcik7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpqc29uX25lc3RlZF9hcnJheV9q c29uID0KKyJ7XG4iCisiXHRbXG4iCisiXHRcdFtcbiIKKyJcdFx0XHQxMjMsXG4iCisiXHRcdFx0 XCJmb29cIixcbiIKKyJcdFx0XHQxMjMsXG4iCisiXHRcdFx0XCJmb29cIlxuIgorIlx0XHRdLFxu IgorIlx0XHRbXG4iCisiXHRcdFx0MTIzXG4iCisiXHRcdF0sXG4iCisiXHRcdFtcbiIKKyJcdFx0 XHRcImZvb1wiLFxuIgorIlx0XHRcdDEyM1xuIgorIlx0XHRdLFxuIgorIlx0XHRbXG4iCisiXHRc dF1cbiIKKyJcdF1cbiIKKyJ9XG4iOworc3RhdGljIGNvbnN0IGNoYXIgKmpzb25fbmVzdGVkX2Fy cmF5X2pzb25fY29tcGFjdCA9CisieyIKKwkiWyIKKwkJIlsiCisJCQkiMTIzLCIKKwkJCSJcImZv b1wiLCIKKwkJCSIxMjMsIgorCQkJIlwiZm9vXCIiCisJCSJdLCIKKwkJIlsiCisJCQkiMTIzIgor CQkiXSwiCisJCSJbIgorCQkJIlwiZm9vXCIsIgorCQkJIjEyMyIKKwkJIl0sIgorCQkiWyIKKwkJ Il0iCisJIl0iCisifSI7CitzdGF0aWMgY29uc3QgY2hhciAqanNvbl9uZXN0ZWRfYXJyYXlfdGFi bGUgPSAiIjsKKworc3RhdGljIHZvaWQKK2VtaXRfdGFibGVfcm93KGVtaXR0ZXJfdCAqZW1pdHRl cikgeworCWVtaXR0ZXJfYmVnaW4oZW1pdHRlcik7CisJZW1pdHRlcl9yb3dfdCByb3c7CisJZW1p dHRlcl9jb2xfdCBhYmMgPSB7ZW1pdHRlcl9qdXN0aWZ5X2xlZnQsIDEwLCBlbWl0dGVyX3R5cGVf dGl0bGUsIHswfSwgezAsIDB9fTsKKwlhYmMuc3RyX3ZhbCA9ICJBQkMgdGl0bGUiOworCWVtaXR0 ZXJfY29sX3QgZGVmID0ge2VtaXR0ZXJfanVzdGlmeV9yaWdodCwgMTUsIGVtaXR0ZXJfdHlwZV90 aXRsZSwgezB9LCB7MCwgMH19OworCWRlZi5zdHJfdmFsID0gIkRFRiB0aXRsZSI7CisJZW1pdHRl cl9jb2xfdCBnaGkgPSB7ZW1pdHRlcl9qdXN0aWZ5X3JpZ2h0LCA1LCBlbWl0dGVyX3R5cGVfdGl0 bGUsIHswfSwgezAsIDB9fTsKKwlnaGkuc3RyX3ZhbCA9ICJHSEkiOworCisJZW1pdHRlcl9yb3df aW5pdCgmcm93KTsKKwllbWl0dGVyX2NvbF9pbml0KCZhYmMsICZyb3cpOworCWVtaXR0ZXJfY29s X2luaXQoJmRlZiwgJnJvdyk7CisJZW1pdHRlcl9jb2xfaW5pdCgmZ2hpLCAmcm93KTsKKworCWVt aXR0ZXJfdGFibGVfcm93KGVtaXR0ZXIsICZyb3cpOworCisJYWJjLnR5cGUgPSBlbWl0dGVyX3R5 cGVfaW50OworCWRlZi50eXBlID0gZW1pdHRlcl90eXBlX2Jvb2w7CisJZ2hpLnR5cGUgPSBlbWl0 dGVyX3R5cGVfaW50OworCisJYWJjLmludF92YWwgPSAxMjM7CisJZGVmLmJvb2xfdmFsID0gdHJ1 ZTsKKwlnaGkuaW50X3ZhbCA9IDQ1NjsKKwllbWl0dGVyX3RhYmxlX3JvdyhlbWl0dGVyLCAmcm93 KTsKKworCWFiYy5pbnRfdmFsID0gNzg5OworCWRlZi5ib29sX3ZhbCA9IGZhbHNlOworCWdoaS5p bnRfdmFsID0gMTAxMTsKKwllbWl0dGVyX3RhYmxlX3JvdyhlbWl0dGVyLCAmcm93KTsKKworCWFi Yy50eXBlID0gZW1pdHRlcl90eXBlX3N0cmluZzsKKwlhYmMuc3RyX3ZhbCA9ICJhIHN0cmluZyI7 CisJZGVmLmJvb2xfdmFsID0gZmFsc2U7CisJZ2hpLnR5cGUgPSBlbWl0dGVyX3R5cGVfdGl0bGU7 CisJZ2hpLnN0cl92YWwgPSAiZ2hpIjsKKwllbWl0dGVyX3RhYmxlX3JvdyhlbWl0dGVyLCAmcm93 KTsKKworCWVtaXR0ZXJfZW5kKGVtaXR0ZXIpOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqdGFi bGVfcm93X2pzb24gPQorIntcbiIKKyJ9XG4iOworc3RhdGljIGNvbnN0IGNoYXIgKnRhYmxlX3Jv d19qc29uX2NvbXBhY3QgPSAie30iOworc3RhdGljIGNvbnN0IGNoYXIgKnRhYmxlX3Jvd190YWJs ZSA9CisiQUJDIHRpdGxlICAgICAgIERFRiB0aXRsZSAgR0hJXG4iCisiMTIzICAgICAgICAgICAg ICAgICAgdHJ1ZSAgNDU2XG4iCisiNzg5ICAgICAgICAgICAgICAgICBmYWxzZSAxMDExXG4iCisi XCJhIHN0cmluZ1wiICAgICAgICAgIGZhbHNlICBnaGlcbiI7CisKKyNkZWZpbmUgR0VORVJBVEVf VEVTVChmZWF0dXJlKQkJCQkJXAorVEVTVF9CRUdJTih0ZXN0XyMjZmVhdHVyZSkgewkJCQkJXAor CWV4cGVjdF9lbWl0X291dHB1dChlbWl0XyMjZmVhdHVyZSwgZmVhdHVyZSMjX2pzb24sCVwKKwkg ICAgZmVhdHVyZSMjX2pzb25fY29tcGFjdCwgZmVhdHVyZSMjX3RhYmxlKTsJCVwKK30JCQkJCQkJ CVwKK1RFU1RfRU5ECisKK0dFTkVSQVRFX1RFU1QoZGljdCkKK0dFTkVSQVRFX1RFU1QodGFibGVf cHJpbnRmKQorR0VORVJBVEVfVEVTVChuZXN0ZWRfZGljdCkKK0dFTkVSQVRFX1RFU1QodHlwZXMp CitHRU5FUkFURV9URVNUKG1vZGFsKQorR0VORVJBVEVfVEVTVChqc29uX2FycmF5KQorR0VORVJB VEVfVEVTVChqc29uX25lc3RlZF9hcnJheSkKK0dFTkVSQVRFX1RFU1QodGFibGVfcm93KQorCitp bnQKK21haW4odm9pZCkgeworCXJldHVybiB0ZXN0X25vX3JlZW50cmFuY3koCisJICAgIHRlc3Rf ZGljdCwKKwkgICAgdGVzdF90YWJsZV9wcmludGYsCisJICAgIHRlc3RfbmVzdGVkX2RpY3QsCisJ ICAgIHRlc3RfdHlwZXMsCisJICAgIHRlc3RfbW9kYWwsCisJICAgIHRlc3RfanNvbl9hcnJheSwK KwkgICAgdGVzdF9qc29uX25lc3RlZF9hcnJheSwKKwkgICAgdGVzdF90YWJsZV9yb3cpOworfQoK ZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3Qv dW5pdC9leHRlbnRfcXVhbnRpemUuYyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9j LTUuMy4wL3Rlc3QvdW5pdC9leHRlbnRfcXVhbnRpemUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwLi5lNmJiZDUzCi0tLSAvZGV2L251bGwKKysrIGIvMzg5LWRzLWJhc2UtMy4z LjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L2V4dGVudF9xdWFudGl6ZS5jCkBAIC0w LDAgKzEsMTQxIEBACisjaW5jbHVkZSAidGVzdC9qZW1hbGxvY190ZXN0LmgiCisKK1RFU1RfQkVH SU4odGVzdF9zbWFsbF9leHRlbnRfc2l6ZSkgeworCXVuc2lnbmVkIG5iaW5zLCBpOworCXNpemVf dCBzeiwgZXh0ZW50X3NpemU7CisJc2l6ZV90IG1pYls0XTsKKwlzaXplX3QgbWlibGVuID0gc2l6 ZW9mKG1pYikgLyBzaXplb2Yoc2l6ZV90KTsKKworCS8qCisJICogSXRlcmF0ZSBvdmVyIGFsbCBz bWFsbCBzaXplIGNsYXNzZXMsIGdldCB0aGVpciBleHRlbnQgc2l6ZXMsIGFuZAorCSAqIHZlcmlm eSB0aGF0IHRoZSBxdWFudGl6ZWQgc2l6ZSBpcyB0aGUgc2FtZSBhcyB0aGUgZXh0ZW50IHNpemUu CisJICovCisKKwlzeiA9IHNpemVvZih1bnNpZ25lZCk7CisJZXhwZWN0X2RfZXEobWFsbGN0bCgi YXJlbmFzLm5iaW5zIiwgKHZvaWQgKikmbmJpbnMsICZzeiwgTlVMTCwgMCksIDAsCisJICAgICJV bmV4cGVjdGVkIG1hbGxjdGwgZmFpbHVyZSIpOworCisJZXhwZWN0X2RfZXEobWFsbGN0bG5hbWV0 b21pYigiYXJlbmFzLmJpbi4wLnNsYWJfc2l6ZSIsIG1pYiwgJm1pYmxlbiksIDAsCisJICAgICJV bmV4cGVjdGVkIG1hbGxjdGxuYW1ldG9taWIgZmFpbHVyZSIpOworCWZvciAoaSA9IDA7IGkgPCBu YmluczsgaSsrKSB7CisJCW1pYlsyXSA9IGk7CisJCXN6ID0gc2l6ZW9mKHNpemVfdCk7CisJCWV4 cGVjdF9kX2VxKG1hbGxjdGxieW1pYihtaWIsIG1pYmxlbiwgKHZvaWQgKikmZXh0ZW50X3NpemUs ICZzeiwKKwkJICAgIE5VTEwsIDApLCAwLCAiVW5leHBlY3RlZCBtYWxsY3RsYnltaWIgZmFpbHVy ZSIpOworCQlleHBlY3RfenVfZXEoZXh0ZW50X3NpemUsCisJCSAgICBzel9wc3pfcXVhbnRpemVf Zmxvb3IoZXh0ZW50X3NpemUpLAorCQkgICAgIlNtYWxsIGV4dGVudCBxdWFudGl6YXRpb24gc2hv dWxkIGJlIGEgbm8tb3AgIgorCQkgICAgIihleHRlbnRfc2l6ZT0lenUpIiwgZXh0ZW50X3NpemUp OworCQlleHBlY3RfenVfZXEoZXh0ZW50X3NpemUsCisJCSAgICBzel9wc3pfcXVhbnRpemVfY2Vp bChleHRlbnRfc2l6ZSksCisJCSAgICAiU21hbGwgZXh0ZW50IHF1YW50aXphdGlvbiBzaG91bGQg YmUgYSBuby1vcCAiCisJCSAgICAiKGV4dGVudF9zaXplPSV6dSkiLCBleHRlbnRfc2l6ZSk7CisJ fQorfQorVEVTVF9FTkQKKworVEVTVF9CRUdJTih0ZXN0X2xhcmdlX2V4dGVudF9zaXplKSB7CisJ Ym9vbCBjYWNoZV9vYmxpdmlvdXM7CisJdW5zaWduZWQgbmxleHRlbnRzLCBpOworCXNpemVfdCBz eiwgZXh0ZW50X3NpemVfcHJldiwgY2VpbF9wcmV2OworCXNpemVfdCBtaWJbNF07CisJc2l6ZV90 IG1pYmxlbiA9IHNpemVvZihtaWIpIC8gc2l6ZW9mKHNpemVfdCk7CisKKwkvKgorCSAqIEl0ZXJh dGUgb3ZlciBhbGwgbGFyZ2Ugc2l6ZSBjbGFzc2VzLCBnZXQgdGhlaXIgZXh0ZW50IHNpemVzLCBh bmQKKwkgKiB2ZXJpZnkgdGhhdCB0aGUgcXVhbnRpemVkIHNpemUgaXMgdGhlIHNhbWUgYXMgdGhl IGV4dGVudCBzaXplLgorCSAqLworCisJc3ogPSBzaXplb2YoYm9vbCk7CisJZXhwZWN0X2RfZXEo bWFsbGN0bCgib3B0LmNhY2hlX29ibGl2aW91cyIsICh2b2lkICopJmNhY2hlX29ibGl2aW91cywK KwkgICAgJnN6LCBOVUxMLCAwKSwgMCwgIlVuZXhwZWN0ZWQgbWFsbGN0bCBmYWlsdXJlIik7CisK KwlzeiA9IHNpemVvZih1bnNpZ25lZCk7CisJZXhwZWN0X2RfZXEobWFsbGN0bCgiYXJlbmFzLm5s ZXh0ZW50cyIsICh2b2lkICopJm5sZXh0ZW50cywgJnN6LCBOVUxMLAorCSAgICAwKSwgMCwgIlVu ZXhwZWN0ZWQgbWFsbGN0bCBmYWlsdXJlIik7CisKKwlleHBlY3RfZF9lcShtYWxsY3RsbmFtZXRv bWliKCJhcmVuYXMubGV4dGVudC4wLnNpemUiLCBtaWIsICZtaWJsZW4pLCAwLAorCSAgICAiVW5l eHBlY3RlZCBtYWxsY3RsbmFtZXRvbWliIGZhaWx1cmUiKTsKKwlmb3IgKGkgPSAwOyBpIDwgbmxl eHRlbnRzOyBpKyspIHsKKwkJc2l6ZV90IGxleHRlbnRfc2l6ZSwgZXh0ZW50X3NpemUsIGZsb29y LCBjZWlsOworCisJCW1pYlsyXSA9IGk7CisJCXN6ID0gc2l6ZW9mKHNpemVfdCk7CisJCWV4cGVj dF9kX2VxKG1hbGxjdGxieW1pYihtaWIsIG1pYmxlbiwgKHZvaWQgKikmbGV4dGVudF9zaXplLAor CQkgICAgJnN6LCBOVUxMLCAwKSwgMCwgIlVuZXhwZWN0ZWQgbWFsbGN0bGJ5bWliIGZhaWx1cmUi KTsKKwkJZXh0ZW50X3NpemUgPSBjYWNoZV9vYmxpdmlvdXMgPyBsZXh0ZW50X3NpemUgKyBQQUdF IDoKKwkJICAgIGxleHRlbnRfc2l6ZTsKKwkJZmxvb3IgPSBzel9wc3pfcXVhbnRpemVfZmxvb3Io ZXh0ZW50X3NpemUpOworCQljZWlsID0gc3pfcHN6X3F1YW50aXplX2NlaWwoZXh0ZW50X3NpemUp OworCisJCWV4cGVjdF96dV9lcShleHRlbnRfc2l6ZSwgZmxvb3IsCisJCSAgICAiRXh0ZW50IHF1 YW50aXphdGlvbiBzaG91bGQgYmUgYSBuby1vcCBmb3IgcHJlY2lzZSBzaXplICIKKwkJICAgICIo bGV4dGVudF9zaXplPSV6dSwgZXh0ZW50X3NpemU9JXp1KSIsIGxleHRlbnRfc2l6ZSwKKwkJICAg IGV4dGVudF9zaXplKTsKKwkJZXhwZWN0X3p1X2VxKGV4dGVudF9zaXplLCBjZWlsLAorCQkgICAg IkV4dGVudCBxdWFudGl6YXRpb24gc2hvdWxkIGJlIGEgbm8tb3AgZm9yIHByZWNpc2Ugc2l6ZSAi CisJCSAgICAiKGxleHRlbnRfc2l6ZT0lenUsIGV4dGVudF9zaXplPSV6dSkiLCBsZXh0ZW50X3Np emUsCisJCSAgICBleHRlbnRfc2l6ZSk7CisKKwkJaWYgKGkgPiAwKSB7CisJCQlleHBlY3RfenVf ZXEoZXh0ZW50X3NpemVfcHJldiwKKwkJCSAgICBzel9wc3pfcXVhbnRpemVfZmxvb3IoZXh0ZW50 X3NpemUgLSBQQUdFKSwKKwkJCSAgICAiRmxvb3Igc2hvdWxkIGJlIGEgcHJlY2lzZSBzaXplIik7 CisJCQlpZiAoZXh0ZW50X3NpemVfcHJldiA8IGNlaWxfcHJldikgeworCQkJCWV4cGVjdF96dV9l cShjZWlsX3ByZXYsIGV4dGVudF9zaXplLAorCQkJCSAgICAiQ2VpbGluZyBzaG91bGQgYmUgYSBw cmVjaXNlIHNpemUgIgorCQkJCSAgICAiKGV4dGVudF9zaXplX3ByZXY9JXp1LCBjZWlsX3ByZXY9 JXp1LCAiCisJCQkJICAgICJleHRlbnRfc2l6ZT0lenUpIiwgZXh0ZW50X3NpemVfcHJldiwKKwkJ CQkgICAgY2VpbF9wcmV2LCBleHRlbnRfc2l6ZSk7CisJCQl9CisJCX0KKwkJaWYgKGkgKyAxIDwg bmxleHRlbnRzKSB7CisJCQlleHRlbnRfc2l6ZV9wcmV2ID0gZmxvb3I7CisJCQljZWlsX3ByZXYg PSBzel9wc3pfcXVhbnRpemVfY2VpbChleHRlbnRfc2l6ZSArCisJCQkgICAgUEFHRSk7CisJCX0K Kwl9Cit9CitURVNUX0VORAorCitURVNUX0JFR0lOKHRlc3RfbW9ub3RvbmljKSB7CisjZGVmaW5l IFNaX01BWAlaVSg0ICogMTAyNCAqIDEwMjQpCisJdW5zaWduZWQgaTsKKwlzaXplX3QgZmxvb3Jf cHJldiwgY2VpbF9wcmV2OworCisJZmxvb3JfcHJldiA9IDA7CisJY2VpbF9wcmV2ID0gMDsKKwlm b3IgKGkgPSAxOyBpIDw9IFNaX01BWCA+PiBMR19QQUdFOyBpKyspIHsKKwkJc2l6ZV90IGV4dGVu dF9zaXplLCBmbG9vciwgY2VpbDsKKworCQlleHRlbnRfc2l6ZSA9IGkgPDwgTEdfUEFHRTsKKwkJ Zmxvb3IgPSBzel9wc3pfcXVhbnRpemVfZmxvb3IoZXh0ZW50X3NpemUpOworCQljZWlsID0gc3pf cHN6X3F1YW50aXplX2NlaWwoZXh0ZW50X3NpemUpOworCisJCWV4cGVjdF96dV9sZShmbG9vciwg ZXh0ZW50X3NpemUsCisJCSAgICAiRmxvb3Igc2hvdWxkIGJlIDw9IChmbG9vcj0lenUsIGV4dGVu dF9zaXplPSV6dSwgY2VpbD0lenUpIiwKKwkJICAgIGZsb29yLCBleHRlbnRfc2l6ZSwgY2VpbCk7 CisJCWV4cGVjdF96dV9nZShjZWlsLCBleHRlbnRfc2l6ZSwKKwkJICAgICJDZWlsaW5nIHNob3Vs ZCBiZSA+PSAoZmxvb3I9JXp1LCBleHRlbnRfc2l6ZT0lenUsICIKKwkJICAgICJjZWlsPSV6dSki LCBmbG9vciwgZXh0ZW50X3NpemUsIGNlaWwpOworCisJCWV4cGVjdF96dV9sZShmbG9vcl9wcmV2 LCBmbG9vciwgIkZsb29yIHNob3VsZCBiZSBtb25vdG9uaWMgIgorCQkgICAgIihmbG9vcl9wcmV2 PSV6dSwgZmxvb3I9JXp1LCBleHRlbnRfc2l6ZT0lenUsIGNlaWw9JXp1KSIsCisJCSAgICBmbG9v cl9wcmV2LCBmbG9vciwgZXh0ZW50X3NpemUsIGNlaWwpOworCQlleHBlY3RfenVfbGUoY2VpbF9w cmV2LCBjZWlsLCAiQ2VpbGluZyBzaG91bGQgYmUgbW9ub3RvbmljICIKKwkJICAgICIoZmxvb3I9 JXp1LCBleHRlbnRfc2l6ZT0lenUsIGNlaWxfcHJldj0lenUsIGNlaWw9JXp1KSIsCisJCSAgICBm bG9vciwgZXh0ZW50X3NpemUsIGNlaWxfcHJldiwgY2VpbCk7CisKKwkJZmxvb3JfcHJldiA9IGZs b29yOworCQljZWlsX3ByZXYgPSBjZWlsOworCX0KK30KK1RFU1RfRU5ECisKK2ludAorbWFpbih2 b2lkKSB7CisJcmV0dXJuIHRlc3QoCisJICAgIHRlc3Rfc21hbGxfZXh0ZW50X3NpemUsCisJICAg IHRlc3RfbGFyZ2VfZXh0ZW50X3NpemUsCisJICAgIHRlc3RfbW9ub3RvbmljKTsKK30KCmRpZmYg LS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQv ZmIuYyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9m Yi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkNzJjNzUKLS0tIC9kZXYv bnVsbAorKysgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3Vu aXQvZmIuYwpAQCAtMCwwICsxLDk1NCBAQAorI2luY2x1ZGUgInRlc3QvamVtYWxsb2NfdGVzdC5o IgorCisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvZmIuaCIKKyNpbmNsdWRlICJ0ZXN0L25i aXRzLmgiCisKK3N0YXRpYyB2b2lkCitkb190ZXN0X2luaXQoc2l6ZV90IG5iaXRzKSB7CisJc2l6 ZV90IHN6ID0gRkJfTkdST1VQUyhuYml0cykgKiBzaXplb2YoZmJfZ3JvdXBfdCk7CisJZmJfZ3Jv dXBfdCAqZmIgPSBtYWxsb2Moc3opOworCS8qIEp1bmsgZmIncyBjb250ZW50cy4gKi8KKwltZW1z ZXQoZmIsIDk5LCBzeik7CisJZmJfaW5pdChmYiwgbmJpdHMpOworCWZvciAoc2l6ZV90IGkgPSAw OyBpIDwgbmJpdHM7IGkrKykgeworCQlleHBlY3RfZmFsc2UoZmJfZ2V0KGZiLCBuYml0cywgaSks CisJCSAgICAiYml0bWFwIHNob3VsZCBzdGFydCBlbXB0eSIpOworCX0KKwlmcmVlKGZiKTsKK30K KworVEVTVF9CRUdJTih0ZXN0X2ZiX2luaXQpIHsKKyNkZWZpbmUgTkIobmJpdHMpIFwKKwlkb190 ZXN0X2luaXQobmJpdHMpOworCU5CSVRTX1RBQgorI3VuZGVmIE5CCit9CitURVNUX0VORAorCitz dGF0aWMgdm9pZAorZG9fdGVzdF9nZXRfc2V0X3Vuc2V0KHNpemVfdCBuYml0cykgeworCXNpemVf dCBzeiA9IEZCX05HUk9VUFMobmJpdHMpICogc2l6ZW9mKGZiX2dyb3VwX3QpOworCWZiX2dyb3Vw X3QgKmZiID0gbWFsbG9jKHN6KTsKKwlmYl9pbml0KGZiLCBuYml0cyk7CisJLyogU2V0IHRoZSBi aXRzIGRpdmlzaWJsZSBieSAzLiAqLworCWZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbmJpdHM7IGkr KykgeworCQlpZiAoaSAlIDMgPT0gMCkgeworCQkJZmJfc2V0KGZiLCBuYml0cywgaSk7CisJCX0K Kwl9CisJLyogQ2hlY2sgdGhlbS4gKi8KKwlmb3IgKHNpemVfdCBpID0gMDsgaSA8IG5iaXRzOyBp KyspIHsKKwkJZXhwZWN0X2JfZXEoaSAlIDMgPT0gMCwgZmJfZ2V0KGZiLCBuYml0cywgaSksCisJ CSAgICAiVW5leHBlY3RlZCBiaXQgYXQgcG9zaXRpb24gJXp1IiwgaSk7CisJfQorCS8qIFVuc2V0 IHRob3NlIGRpdmlzaWJsZSBieSA1LiAqLworCWZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbmJpdHM7 IGkrKykgeworCQlpZiAoaSAlIDUgPT0gMCkgeworCQkJZmJfdW5zZXQoZmIsIG5iaXRzLCBpKTsK KwkJfQorCX0KKwkvKiBDaGVjayB0aGVtLiAqLworCWZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbmJp dHM7IGkrKykgeworCQlleHBlY3RfYl9lcShpICUgMyA9PSAwICYmIGkgJSA1ICE9IDAsIGZiX2dl dChmYiwgbmJpdHMsIGkpLAorCQkgICAgIlVuZXhwZWN0ZWQgYml0IGF0IHBvc2l0aW9uICV6dSIs IGkpOworCX0KKwlmcmVlKGZiKTsKK30KKworVEVTVF9CRUdJTih0ZXN0X2dldF9zZXRfdW5zZXQp IHsKKyNkZWZpbmUgTkIobmJpdHMpIFwKKwlkb190ZXN0X2dldF9zZXRfdW5zZXQobmJpdHMpOwor CU5CSVRTX1RBQgorI3VuZGVmIE5CCit9CitURVNUX0VORAorCitzdGF0aWMgc3NpemVfdAorZmlu ZF8zXzVfY29tcHV0ZShzc2l6ZV90IGksIHNpemVfdCBuYml0cywgYm9vbCBiaXQsIGJvb2wgZm9y d2FyZCkgeworCWZvcig7IGkgPCAoc3NpemVfdCluYml0cyAmJiBpID49IDA7IGkgKz0gKGZvcndh cmQgPyAxIDogLTEpKSB7CisJCWJvb2wgZXhwZWN0ZWRfYml0ID0gaSAlIDMgPT0gMCB8fCBpICUg NSA9PSAwOworCQlpZiAoZXhwZWN0ZWRfYml0ID09IGJpdCkgeworCQkJcmV0dXJuIGk7CisJCX0K Kwl9CisJcmV0dXJuIGZvcndhcmQgPyAoc3NpemVfdCluYml0cyA6IChzc2l6ZV90KS0xOworfQor CitzdGF0aWMgdm9pZAorZG9fdGVzdF9zZWFyY2hfc2ltcGxlKHNpemVfdCBuYml0cykgeworCXNp emVfdCBzeiA9IEZCX05HUk9VUFMobmJpdHMpICogc2l6ZW9mKGZiX2dyb3VwX3QpOworCWZiX2dy b3VwX3QgKmZiID0gbWFsbG9jKHN6KTsKKwlmYl9pbml0KGZiLCBuYml0cyk7CisKKwkvKiBXZSBw aWNrIG11bHRpcGxlcyBvZiAzIG9yIDUuICovCisJZm9yIChzaXplX3QgaSA9IDA7IGkgPCBuYml0 czsgaSsrKSB7CisJCWlmIChpICUgMyA9PSAwKSB7CisJCQlmYl9zZXQoZmIsIG5iaXRzLCBpKTsK KwkJfQorCQkvKiBUaGlzIHRlc3RzIGRvdWJsZS1zZXR0aW5nIGEgbGl0dGxlLCB0b28uICovCisJ CWlmIChpICUgNSA9PSAwKSB7CisJCQlmYl9zZXQoZmIsIG5iaXRzLCBpKTsKKwkJfQorCX0KKwlm b3IgKHNpemVfdCBpID0gMDsgaSA8IG5iaXRzOyBpKyspIHsKKwkJc2l6ZV90IGZmc19jb21wdXRl ID0gZmluZF8zXzVfY29tcHV0ZShpLCBuYml0cywgdHJ1ZSwgdHJ1ZSk7CisJCXNpemVfdCBmZnNf c2VhcmNoID0gZmJfZmZzKGZiLCBuYml0cywgaSk7CisJCWV4cGVjdF96dV9lcShmZnNfY29tcHV0 ZSwgZmZzX3NlYXJjaCwgImZmcyBtaXNtYXRjaCBhdCAlenUiLCBpKTsKKworCQlzc2l6ZV90IGZs c19jb21wdXRlID0gZmluZF8zXzVfY29tcHV0ZShpLCBuYml0cywgdHJ1ZSwgZmFsc2UpOworCQlz aXplX3QgZmxzX3NlYXJjaCA9IGZiX2ZscyhmYiwgbmJpdHMsIGkpOworCQlleHBlY3RfenVfZXEo ZmxzX2NvbXB1dGUsIGZsc19zZWFyY2gsICJmbHMgbWlzbWF0Y2ggYXQgJXp1IiwgaSk7CisKKwkJ c2l6ZV90IGZmdV9jb21wdXRlID0gZmluZF8zXzVfY29tcHV0ZShpLCBuYml0cywgZmFsc2UsIHRy dWUpOworCQlzaXplX3QgZmZ1X3NlYXJjaCA9IGZiX2ZmdShmYiwgbmJpdHMsIGkpOworCQlleHBl Y3RfenVfZXEoZmZ1X2NvbXB1dGUsIGZmdV9zZWFyY2gsICJmZnUgbWlzbWF0Y2ggYXQgJXp1Iiwg aSk7CisKKwkJc2l6ZV90IGZsdV9jb21wdXRlID0gZmluZF8zXzVfY29tcHV0ZShpLCBuYml0cywg ZmFsc2UsIGZhbHNlKTsKKwkJc2l6ZV90IGZsdV9zZWFyY2ggPSBmYl9mbHUoZmIsIG5iaXRzLCBp KTsKKwkJZXhwZWN0X3p1X2VxKGZsdV9jb21wdXRlLCBmbHVfc2VhcmNoLCAiZmx1IG1pc21hdGNo IGF0ICV6dSIsIGkpOworCX0KKworCWZyZWUoZmIpOworfQorCitURVNUX0JFR0lOKHRlc3Rfc2Vh cmNoX3NpbXBsZSkgeworI2RlZmluZSBOQihuYml0cykgXAorCWRvX3Rlc3Rfc2VhcmNoX3NpbXBs ZShuYml0cyk7CisJTkJJVFNfVEFCCisjdW5kZWYgTkIKK30KK1RFU1RfRU5ECisKK3N0YXRpYyB2 b2lkCitleHBlY3RfZXhoYXVzdGl2ZV9yZXN1bHRzKGZiX2dyb3VwX3QgKm1vc3RseV9mdWxsLCBm Yl9ncm91cF90ICptb3N0bHlfZW1wdHksCisgICAgc2l6ZV90IG5iaXRzLCBzaXplX3Qgc3BlY2lh bF9iaXQsIHNpemVfdCBwb3NpdGlvbikgeworCWlmIChwb3NpdGlvbiA8IHNwZWNpYWxfYml0KSB7 CisJCWV4cGVjdF96dV9lcShzcGVjaWFsX2JpdCwgZmJfZmZzKG1vc3RseV9lbXB0eSwgbmJpdHMs IHBvc2l0aW9uKSwKKwkJICAgICJtaXNtYXRjaCBhdCAlenUsICV6dSIsIHBvc2l0aW9uLCBzcGVj aWFsX2JpdCk7CisJCWV4cGVjdF96ZF9lcSgtMSwgZmJfZmxzKG1vc3RseV9lbXB0eSwgbmJpdHMs IHBvc2l0aW9uKSwKKwkJICAgICJtaXNtYXRjaCBhdCAlenUsICV6dSIsIHBvc2l0aW9uLCBzcGVj aWFsX2JpdCk7CisJCWV4cGVjdF96dV9lcShwb3NpdGlvbiwgZmJfZmZ1KG1vc3RseV9lbXB0eSwg bmJpdHMsIHBvc2l0aW9uKSwKKwkJICAgICJtaXNtYXRjaCBhdCAlenUsICV6dSIsIHBvc2l0aW9u LCBzcGVjaWFsX2JpdCk7CisJCWV4cGVjdF96ZF9lcShwb3NpdGlvbiwgZmJfZmx1KG1vc3RseV9l bXB0eSwgbmJpdHMsIHBvc2l0aW9uKSwKKwkJICAgICJtaXNtYXRjaCBhdCAlenUsICV6dSIsIHBv c2l0aW9uLCBzcGVjaWFsX2JpdCk7CisKKwkJZXhwZWN0X3p1X2VxKHBvc2l0aW9uLCBmYl9mZnMo bW9zdGx5X2Z1bGwsIG5iaXRzLCBwb3NpdGlvbiksCisJCSAgICAibWlzbWF0Y2ggYXQgJXp1LCAl enUiLCBwb3NpdGlvbiwgc3BlY2lhbF9iaXQpOworCQlleHBlY3RfemRfZXEocG9zaXRpb24sIGZi X2Zscyhtb3N0bHlfZnVsbCwgbmJpdHMsIHBvc2l0aW9uKSwKKwkJICAgICJtaXNtYXRjaCBhdCAl enUsICV6dSIsIHBvc2l0aW9uLCBzcGVjaWFsX2JpdCk7CisJCWV4cGVjdF96dV9lcShzcGVjaWFs X2JpdCwgZmJfZmZ1KG1vc3RseV9mdWxsLCBuYml0cywgcG9zaXRpb24pLAorCQkgICAgIm1pc21h dGNoIGF0ICV6dSwgJXp1IiwgcG9zaXRpb24sIHNwZWNpYWxfYml0KTsKKwkJZXhwZWN0X3pkX2Vx KC0xLCBmYl9mbHUobW9zdGx5X2Z1bGwsIG5iaXRzLCBwb3NpdGlvbiksCisJCSAgICAibWlzbWF0 Y2ggYXQgJXp1LCAlenUiLCBwb3NpdGlvbiwgc3BlY2lhbF9iaXQpOworCX0gZWxzZSBpZiAocG9z aXRpb24gPT0gc3BlY2lhbF9iaXQpIHsKKwkJZXhwZWN0X3p1X2VxKHNwZWNpYWxfYml0LCBmYl9m ZnMobW9zdGx5X2VtcHR5LCBuYml0cywgcG9zaXRpb24pLAorCQkgICAgIm1pc21hdGNoIGF0ICV6 dSwgJXp1IiwgcG9zaXRpb24sIHNwZWNpYWxfYml0KTsKKwkJZXhwZWN0X3pkX2VxKHNwZWNpYWxf Yml0LCBmYl9mbHMobW9zdGx5X2VtcHR5LCBuYml0cywgcG9zaXRpb24pLAorCQkgICAgIm1pc21h dGNoIGF0ICV6dSwgJXp1IiwgcG9zaXRpb24sIHNwZWNpYWxfYml0KTsKKwkJZXhwZWN0X3p1X2Vx KHBvc2l0aW9uICsgMSwgZmJfZmZ1KG1vc3RseV9lbXB0eSwgbmJpdHMsIHBvc2l0aW9uKSwKKwkJ ICAgICJtaXNtYXRjaCBhdCAlenUsICV6dSIsIHBvc2l0aW9uLCBzcGVjaWFsX2JpdCk7CisJCWV4 cGVjdF96ZF9lcShwb3NpdGlvbiAtIDEsIGZiX2ZsdShtb3N0bHlfZW1wdHksIG5iaXRzLAorCQkg ICAgcG9zaXRpb24pLCAibWlzbWF0Y2ggYXQgJXp1LCAlenUiLCBwb3NpdGlvbiwgc3BlY2lhbF9i aXQpOworCisJCWV4cGVjdF96dV9lcShwb3NpdGlvbiArIDEsIGZiX2Zmcyhtb3N0bHlfZnVsbCwg bmJpdHMsIHBvc2l0aW9uKSwKKwkJICAgICJtaXNtYXRjaCBhdCAlenUsICV6dSIsIHBvc2l0aW9u LCBzcGVjaWFsX2JpdCk7CisJCWV4cGVjdF96ZF9lcShwb3NpdGlvbiAtIDEsIGZiX2Zscyhtb3N0 bHlfZnVsbCwgbmJpdHMsCisJCSAgICBwb3NpdGlvbiksICJtaXNtYXRjaCBhdCAlenUsICV6dSIs IHBvc2l0aW9uLCBzcGVjaWFsX2JpdCk7CisJCWV4cGVjdF96dV9lcShwb3NpdGlvbiwgZmJfZmZ1 KG1vc3RseV9mdWxsLCBuYml0cywgcG9zaXRpb24pLAorCQkgICAgIm1pc21hdGNoIGF0ICV6dSwg JXp1IiwgcG9zaXRpb24sIHNwZWNpYWxfYml0KTsKKwkJZXhwZWN0X3pkX2VxKHBvc2l0aW9uLCBm Yl9mbHUobW9zdGx5X2Z1bGwsIG5iaXRzLCBwb3NpdGlvbiksCisJCSAgICAibWlzbWF0Y2ggYXQg JXp1LCAlenUiLCBwb3NpdGlvbiwgc3BlY2lhbF9iaXQpOworCX0gZWxzZSB7CisJCS8qIHBvc2l0 aW9uID4gc3BlY2lhbF9iaXQuICovCisJCWV4cGVjdF96dV9lcShuYml0cywgZmJfZmZzKG1vc3Rs eV9lbXB0eSwgbmJpdHMsIHBvc2l0aW9uKSwKKwkJICAgICJtaXNtYXRjaCBhdCAlenUsICV6dSIs IHBvc2l0aW9uLCBzcGVjaWFsX2JpdCk7CisJCWV4cGVjdF96ZF9lcShzcGVjaWFsX2JpdCwgZmJf ZmxzKG1vc3RseV9lbXB0eSwgbmJpdHMsCisJCSAgICBwb3NpdGlvbiksICJtaXNtYXRjaCBhdCAl enUsICV6dSIsIHBvc2l0aW9uLCBzcGVjaWFsX2JpdCk7CisJCWV4cGVjdF96dV9lcShwb3NpdGlv biwgZmJfZmZ1KG1vc3RseV9lbXB0eSwgbmJpdHMsIHBvc2l0aW9uKSwKKwkJICAgICJtaXNtYXRj aCBhdCAlenUsICV6dSIsIHBvc2l0aW9uLCBzcGVjaWFsX2JpdCk7CisJCWV4cGVjdF96ZF9lcShw b3NpdGlvbiwgZmJfZmx1KG1vc3RseV9lbXB0eSwgbmJpdHMsIHBvc2l0aW9uKSwKKwkJICAgICJt aXNtYXRjaCBhdCAlenUsICV6dSIsIHBvc2l0aW9uLCBzcGVjaWFsX2JpdCk7CisKKwkJZXhwZWN0 X3p1X2VxKHBvc2l0aW9uLCBmYl9mZnMobW9zdGx5X2Z1bGwsIG5iaXRzLCBwb3NpdGlvbiksCisJ CSAgICAibWlzbWF0Y2ggYXQgJXp1LCAlenUiLCBwb3NpdGlvbiwgc3BlY2lhbF9iaXQpOworCQll eHBlY3RfemRfZXEocG9zaXRpb24sIGZiX2Zscyhtb3N0bHlfZnVsbCwgbmJpdHMsIHBvc2l0aW9u KSwKKwkJICAgICJtaXNtYXRjaCBhdCAlenUsICV6dSIsIHBvc2l0aW9uLCBzcGVjaWFsX2JpdCk7 CisJCWV4cGVjdF96dV9lcShuYml0cywgZmJfZmZ1KG1vc3RseV9mdWxsLCBuYml0cywgcG9zaXRp b24pLAorCQkgICAgIm1pc21hdGNoIGF0ICV6dSwgJXp1IiwgcG9zaXRpb24sIHNwZWNpYWxfYml0 KTsKKwkJZXhwZWN0X3pkX2VxKHNwZWNpYWxfYml0LCBmYl9mbHUobW9zdGx5X2Z1bGwsIG5iaXRz LCBwb3NpdGlvbiksCisJCSAgICAibWlzbWF0Y2ggYXQgJXp1LCAlenUiLCBwb3NpdGlvbiwgc3Bl Y2lhbF9iaXQpOworCX0KK30KKworc3RhdGljIHZvaWQKK2RvX3Rlc3Rfc2VhcmNoX2V4aGF1c3Rp dmUoc2l6ZV90IG5iaXRzKSB7CisJLyogVGhpcyB0ZXN0IGlzIHF1YWRyYXRpYzsgbGV0J3Mgbm90 IGdldCB0b28gYmlnLiAqLworCWlmIChuYml0cyA+IDEwMDApIHsKKwkJcmV0dXJuOworCX0KKwlz aXplX3Qgc3ogPSBGQl9OR1JPVVBTKG5iaXRzKSAqIHNpemVvZihmYl9ncm91cF90KTsKKwlmYl9n cm91cF90ICplbXB0eSA9IG1hbGxvYyhzeik7CisJZmJfaW5pdChlbXB0eSwgbmJpdHMpOworCWZi X2dyb3VwX3QgKmZ1bGwgPSBtYWxsb2Moc3opOworCWZiX2luaXQoZnVsbCwgbmJpdHMpOworCWZi X3NldF9yYW5nZShmdWxsLCBuYml0cywgMCwgbmJpdHMpOworCisJZm9yIChzaXplX3QgaSA9IDA7 IGkgPCBuYml0czsgaSsrKSB7CisJCWZiX3NldChlbXB0eSwgbmJpdHMsIGkpOworCQlmYl91bnNl dChmdWxsLCBuYml0cywgaSk7CisKKwkJZm9yIChzaXplX3QgaiA9IDA7IGogPCBuYml0czsgaisr KSB7CisJCQlleHBlY3RfZXhoYXVzdGl2ZV9yZXN1bHRzKGZ1bGwsIGVtcHR5LCBuYml0cywgaSwg aik7CisJCX0KKwkJZmJfdW5zZXQoZW1wdHksIG5iaXRzLCBpKTsKKwkJZmJfc2V0KGZ1bGwsIG5i aXRzLCBpKTsKKwl9CisKKwlmcmVlKGVtcHR5KTsKKwlmcmVlKGZ1bGwpOworfQorCitURVNUX0JF R0lOKHRlc3Rfc2VhcmNoX2V4aGF1c3RpdmUpIHsKKyNkZWZpbmUgTkIobmJpdHMpIFwKKwlkb190 ZXN0X3NlYXJjaF9leGhhdXN0aXZlKG5iaXRzKTsKKwlOQklUU19UQUIKKyN1bmRlZiBOQgorfQor VEVTVF9FTkQKKworVEVTVF9CRUdJTih0ZXN0X3JhbmdlX3NpbXBsZSkgeworCS8qCisJICogSnVz dCBwaWNrIGEgY29uc3RhbnQgYmlnIGVub3VnaCB0byBoYXZlIG5vbnRyaXZpYWwgbWlkZGxlIHNp emVzLCBhbmQKKwkgKiBiaWcgZW5vdWdoIHRoYXQgdXNhZ2VzIG9mIHRoaW5ncyBsaWtlIHdlaXJk bnVtIChiZWxvdykgbmVhciB0aGUKKwkgKiBiZWdpbm5pbmcgZml0IGNvbWZvcnRhYmx5IGludG8g dGhlIGJlZ2lubmluZyBvZiB0aGUgYml0bWFwLgorCSAqLworCXNpemVfdCBuYml0cyA9IDY0ICog MTA7CisJc2l6ZV90IG5ncm91cHMgPSBGQl9OR1JPVVBTKG5iaXRzKTsKKwlmYl9ncm91cF90ICpm YiA9IG1hbGxvYyhzaXplb2YoZmJfZ3JvdXBfdCkgKiBuZ3JvdXBzKTsKKwlmYl9pbml0KGZiLCBu Yml0cyk7CisJZm9yIChzaXplX3QgaSA9IDA7IGkgPCBuYml0czsgaSsrKSB7CisJCWlmIChpICUg MiA9PSAwKSB7CisJCQlmYl9zZXRfcmFuZ2UoZmIsIG5iaXRzLCBpLCAxKTsKKwkJfQorCX0KKwlm b3IgKHNpemVfdCBpID0gMDsgaSA8IG5iaXRzOyBpKyspIHsKKwkJZXhwZWN0X2JfZXEoaSAlIDIg PT0gMCwgZmJfZ2V0KGZiLCBuYml0cywgaSksCisJCSAgICAibWlzbWF0Y2ggYXQgcG9zaXRpb24g JXp1IiwgaSk7CisJfQorCWZiX3NldF9yYW5nZShmYiwgbmJpdHMsIDAsIG5iaXRzIC8gMik7CisJ ZmJfdW5zZXRfcmFuZ2UoZmIsIG5iaXRzLCBuYml0cyAvIDIsIG5iaXRzIC8gMik7CisJZm9yIChz aXplX3QgaSA9IDA7IGkgPCBuYml0czsgaSsrKSB7CisJCWV4cGVjdF9iX2VxKGkgPCBuYml0cyAv IDIsIGZiX2dldChmYiwgbmJpdHMsIGkpLAorCQkgICAgIm1pc21hdGNoIGF0IHBvc2l0aW9uICV6 dSIsIGkpOworCX0KKworCXN0YXRpYyBjb25zdCBzaXplX3Qgd2VpcmRudW0gPSA3OworCWZiX3Nl dF9yYW5nZShmYiwgbmJpdHMsIDAsIG5iaXRzKTsKKwlmYl91bnNldF9yYW5nZShmYiwgbmJpdHMs IHdlaXJkbnVtLCBGQl9HUk9VUF9CSVRTICsgd2VpcmRudW0pOworCWZvciAoc2l6ZV90IGkgPSAw OyBpIDwgbmJpdHM7IGkrKykgeworCQlleHBlY3RfYl9lcSg3IDw9IGkgJiYgaSA8PSAyICogd2Vp cmRudW0gKyBGQl9HUk9VUF9CSVRTIC0gMSwKKwkJICAgICFmYl9nZXQoZmIsIG5iaXRzLCBpKSwg Im1pc21hdGNoIGF0IHBvc2l0aW9uICV6dSIsIGkpOworCX0KKwlmcmVlKGZiKTsKK30KK1RFU1Rf RU5ECisKK3N0YXRpYyB2b2lkCitkb190ZXN0X2VtcHR5X2Z1bGxfZXhoYXVzdGl2ZShzaXplX3Qg bmJpdHMpIHsKKwlzaXplX3Qgc3ogPSBGQl9OR1JPVVBTKG5iaXRzKSAqIHNpemVvZihmYl9ncm91 cF90KTsKKwlmYl9ncm91cF90ICplbXB0eSA9IG1hbGxvYyhzeik7CisJZmJfaW5pdChlbXB0eSwg bmJpdHMpOworCWZiX2dyb3VwX3QgKmZ1bGwgPSBtYWxsb2Moc3opOworCWZiX2luaXQoZnVsbCwg bmJpdHMpOworCWZiX3NldF9yYW5nZShmdWxsLCBuYml0cywgMCwgbmJpdHMpOworCisJZXhwZWN0 X3RydWUoZmJfZnVsbChmdWxsLCBuYml0cyksICIiKTsKKwlleHBlY3RfZmFsc2UoZmJfZW1wdHko ZnVsbCwgbmJpdHMpLCAiIik7CisJZXhwZWN0X2ZhbHNlKGZiX2Z1bGwoZW1wdHksIG5iaXRzKSwg IiIpOworCWV4cGVjdF90cnVlKGZiX2VtcHR5KGVtcHR5LCBuYml0cyksICIiKTsKKworCWZvciAo c2l6ZV90IGkgPSAwOyBpIDwgbmJpdHM7IGkrKykgeworCQlmYl9zZXQoZW1wdHksIG5iaXRzLCBp KTsKKwkJZmJfdW5zZXQoZnVsbCwgbmJpdHMsIGkpOworCisJCWV4cGVjdF9mYWxzZShmYl9lbXB0 eShlbXB0eSwgbmJpdHMpLCAiZXJyb3IgYXQgYml0ICV6dSIsIGkpOworCQlpZiAobmJpdHMgIT0g MSkgeworCQkJZXhwZWN0X2ZhbHNlKGZiX2Z1bGwoZW1wdHksIG5iaXRzKSwKKwkJCSAgICAiZXJy b3IgYXQgYml0ICV6dSIsIGkpOworCQkJZXhwZWN0X2ZhbHNlKGZiX2VtcHR5KGZ1bGwsIG5iaXRz KSwKKwkJCSAgICAiZXJyb3IgYXQgYml0ICV6dSIsIGkpOworCQl9IGVsc2UgeworCQkJZXhwZWN0 X3RydWUoZmJfZnVsbChlbXB0eSwgbmJpdHMpLAorCQkJICAgICJlcnJvciBhdCBiaXQgJXp1Iiwg aSk7CisJCQlleHBlY3RfdHJ1ZShmYl9lbXB0eShmdWxsLCBuYml0cyksCisJCQkgICAgImVycm9y IGF0IGJpdCAlenUiLCBpKTsKKwkJfQorCQlleHBlY3RfZmFsc2UoZmJfZnVsbChmdWxsLCBuYml0 cyksICJlcnJvciBhdCBiaXQgJXp1IiwgaSk7CisKKwkJZmJfdW5zZXQoZW1wdHksIG5iaXRzLCBp KTsKKwkJZmJfc2V0KGZ1bGwsIG5iaXRzLCBpKTsKKwl9CisKKwlmcmVlKGVtcHR5KTsKKwlmcmVl KGZ1bGwpOworfQorCitURVNUX0JFR0lOKHRlc3RfZW1wdHlfZnVsbCkgeworI2RlZmluZSBOQihu Yml0cykgXAorCWRvX3Rlc3RfZW1wdHlfZnVsbF9leGhhdXN0aXZlKG5iaXRzKTsKKwlOQklUU19U QUIKKyN1bmRlZiBOQgorfQorVEVTVF9FTkQKKworLyoKKyAqIFRoaXMgdGVzdHMgYm90aCBpdGVy X3JhbmdlIGFuZCB0aGUgbG9uZ2VzdCByYW5nZSBmdW5jdGlvbmFsaXR5LCB3aGljaCBpcworICog YnVpbHQgY2xvc2VseSBvbiB0b3Agb2YgaXQuCisgKi8KK1RFU1RfQkVHSU4odGVzdF9pdGVyX3Jh bmdlX3NpbXBsZSkgeworCXNpemVfdCBzZXRfbGltaXQgPSAzMDsKKwlzaXplX3QgbmJpdHMgPSAx MDA7CisJZmJfZ3JvdXBfdCBmYltGQl9OR1JPVVBTKDEwMCldOworCisJZmJfaW5pdChmYiwgbmJp dHMpOworCisJLyoKKwkgKiBGYWlsaW5nIHRvIGluaXRpYWxpemUgdGhlc2UgY2FuIGxlYWQgdG8g YnVpbGQgZmFpbHVyZXMgd2l0aCAtV2FsbDsKKwkgKiB0aGUgY29tcGlsZXIgY2FuJ3QgcHJvdmUg dGhhdCB0aGV5J3JlIHNldC4KKwkgKi8KKwlzaXplX3QgYmVnaW4gPSAoc2l6ZV90KS0xOworCXNp emVfdCBsZW4gPSAoc2l6ZV90KS0xOworCWJvb2wgcmVzdWx0OworCisJLyogQSBzZXQgb2YgY2hl Y2tzIHdpdGggb25seSB0aGUgZmlyc3Qgc2V0X2xpbWl0IGJpdHMgKnNldCouICovCisJZmJfc2V0 X3JhbmdlKGZiLCBuYml0cywgMCwgc2V0X2xpbWl0KTsKKwlleHBlY3RfenVfZXEoc2V0X2xpbWl0 LCBmYl9zcmFuZ2VfbG9uZ2VzdChmYiwgbmJpdHMpLAorCSAgICAiSW5jb3JyZWN0IGxvbmdlc3Qg c2V0IHJhbmdlIik7CisJZXhwZWN0X3p1X2VxKG5iaXRzIC0gc2V0X2xpbWl0LCBmYl91cmFuZ2Vf bG9uZ2VzdChmYiwgbmJpdHMpLAorCSAgICAiSW5jb3JyZWN0IGxvbmdlc3QgdW5zZXQgcmFuZ2Ui KTsKKwlmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNldF9saW1pdDsgaSsrKSB7CisJCXJlc3VsdCA9 IGZiX3NyYW5nZV9pdGVyKGZiLCBuYml0cywgaSwgJmJlZ2luLCAmbGVuKTsKKwkJZXhwZWN0X3Ry dWUocmVzdWx0LCAiU2hvdWxkIGhhdmUgZm91bmQgYSByYW5nZSBhdCAlenUiLCBpKTsKKwkJZXhw ZWN0X3p1X2VxKGksIGJlZ2luLCAiSW5jb3JyZWN0IGJlZ2luIGF0ICV6dSIsIGkpOworCQlleHBl Y3RfenVfZXEoc2V0X2xpbWl0IC0gaSwgbGVuLCAiSW5jb3JyZWN0IGxlbiBhdCAlenUiLCBpKTsK KworCQlyZXN1bHQgPSBmYl91cmFuZ2VfaXRlcihmYiwgbmJpdHMsIGksICZiZWdpbiwgJmxlbik7 CisJCWV4cGVjdF90cnVlKHJlc3VsdCwgIlNob3VsZCBoYXZlIGZvdW5kIGEgcmFuZ2UgYXQgJXp1 IiwgaSk7CisJCWV4cGVjdF96dV9lcShzZXRfbGltaXQsIGJlZ2luLCAiSW5jb3JyZWN0IGJlZ2lu IGF0ICV6dSIsIGkpOworCQlleHBlY3RfenVfZXEobmJpdHMgLSBzZXRfbGltaXQsIGxlbiwgIklu Y29ycmVjdCBsZW4gYXQgJXp1IiwgaSk7CisKKwkJcmVzdWx0ID0gZmJfc3JhbmdlX3JpdGVyKGZi LCBuYml0cywgaSwgJmJlZ2luLCAmbGVuKTsKKwkJZXhwZWN0X3RydWUocmVzdWx0LCAiU2hvdWxk IGhhdmUgZm91bmQgYSByYW5nZSBhdCAlenUiLCBpKTsKKwkJZXhwZWN0X3p1X2VxKDAsIGJlZ2lu LCAiSW5jb3JyZWN0IGJlZ2luIGF0ICV6dSIsIGkpOworCQlleHBlY3RfenVfZXEoaSArIDEsIGxl biwgIkluY29ycmVjdCBsZW4gYXQgJXp1IiwgaSk7CisKKwkJcmVzdWx0ID0gZmJfdXJhbmdlX3Jp dGVyKGZiLCBuYml0cywgaSwgJmJlZ2luLCAmbGVuKTsKKwkJZXhwZWN0X2ZhbHNlKHJlc3VsdCwg IlNob3VsZCBub3QgaGF2ZSBmb3VuZCBhIHJhbmdlIGF0ICV6dSIsIGkpOworCX0KKwlmb3IgKHNp emVfdCBpID0gc2V0X2xpbWl0OyBpIDwgbmJpdHM7IGkrKykgeworCQlyZXN1bHQgPSBmYl9zcmFu Z2VfaXRlcihmYiwgbmJpdHMsIGksICZiZWdpbiwgJmxlbik7CisJCWV4cGVjdF9mYWxzZShyZXN1 bHQsICJTaG91bGQgbm90IGhhdmUgZm91bmQgYSByYW5nZSBhdCAlenUiLCBpKTsKKworCQlyZXN1 bHQgPSBmYl91cmFuZ2VfaXRlcihmYiwgbmJpdHMsIGksICZiZWdpbiwgJmxlbik7CisJCWV4cGVj dF90cnVlKHJlc3VsdCwgIlNob3VsZCBoYXZlIGZvdW5kIGEgcmFuZ2UgYXQgJXp1IiwgaSk7CisJ CWV4cGVjdF96dV9lcShpLCBiZWdpbiwgIkluY29ycmVjdCBiZWdpbiBhdCAlenUiLCBpKTsKKwkJ ZXhwZWN0X3p1X2VxKG5iaXRzIC0gaSwgbGVuLCAiSW5jb3JyZWN0IGxlbiBhdCAlenUiLCBpKTsK KworCQlyZXN1bHQgPSBmYl9zcmFuZ2Vfcml0ZXIoZmIsIG5iaXRzLCBpLCAmYmVnaW4sICZsZW4p OworCQlleHBlY3RfdHJ1ZShyZXN1bHQsICJTaG91bGQgaGF2ZSBmb3VuZCBhIHJhbmdlIGF0ICV6 dSIsIGkpOworCQlleHBlY3RfenVfZXEoMCwgYmVnaW4sICJJbmNvcnJlY3QgYmVnaW4gYXQgJXp1 IiwgaSk7CisJCWV4cGVjdF96dV9lcShzZXRfbGltaXQsIGxlbiwgIkluY29ycmVjdCBsZW4gYXQg JXp1IiwgaSk7CisKKwkJcmVzdWx0ID0gZmJfdXJhbmdlX3JpdGVyKGZiLCBuYml0cywgaSwgJmJl Z2luLCAmbGVuKTsKKwkJZXhwZWN0X3RydWUocmVzdWx0LCAiU2hvdWxkIGhhdmUgZm91bmQgYSBy YW5nZSBhdCAlenUiLCBpKTsKKwkJZXhwZWN0X3p1X2VxKHNldF9saW1pdCwgYmVnaW4sICJJbmNv cnJlY3QgYmVnaW4gYXQgJXp1IiwgaSk7CisJCWV4cGVjdF96dV9lcShpIC0gc2V0X2xpbWl0ICsg MSwgbGVuLCAiSW5jb3JyZWN0IGxlbiBhdCAlenUiLCBpKTsKKwl9CisKKwkvKiBBIHNldCBvZiBj aGVja3Mgd2l0aCBvbmx5IHRoZSBmaXJzdCBzZXRfbGltaXQgYml0cyAqdW5zZXQqLiAqLworCWZi X3Vuc2V0X3JhbmdlKGZiLCBuYml0cywgMCwgc2V0X2xpbWl0KTsKKwlmYl9zZXRfcmFuZ2UoZmIs IG5iaXRzLCBzZXRfbGltaXQsIG5iaXRzIC0gc2V0X2xpbWl0KTsKKwlleHBlY3RfenVfZXEobmJp dHMgLSBzZXRfbGltaXQsIGZiX3NyYW5nZV9sb25nZXN0KGZiLCBuYml0cyksCisJICAgICJJbmNv cnJlY3QgbG9uZ2VzdCBzZXQgcmFuZ2UiKTsKKwlleHBlY3RfenVfZXEoc2V0X2xpbWl0LCBmYl91 cmFuZ2VfbG9uZ2VzdChmYiwgbmJpdHMpLAorCSAgICAiSW5jb3JyZWN0IGxvbmdlc3QgdW5zZXQg cmFuZ2UiKTsKKwlmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNldF9saW1pdDsgaSsrKSB7CisJCXJl c3VsdCA9IGZiX3NyYW5nZV9pdGVyKGZiLCBuYml0cywgaSwgJmJlZ2luLCAmbGVuKTsKKwkJZXhw ZWN0X3RydWUocmVzdWx0LCAiU2hvdWxkIGhhdmUgZm91bmQgYSByYW5nZSBhdCAlenUiLCBpKTsK KwkJZXhwZWN0X3p1X2VxKHNldF9saW1pdCwgYmVnaW4sICJJbmNvcnJlY3QgYmVnaW4gYXQgJXp1 IiwgaSk7CisJCWV4cGVjdF96dV9lcShuYml0cyAtIHNldF9saW1pdCwgbGVuLCAiSW5jb3JyZWN0 IGxlbiBhdCAlenUiLCBpKTsKKworCQlyZXN1bHQgPSBmYl91cmFuZ2VfaXRlcihmYiwgbmJpdHMs IGksICZiZWdpbiwgJmxlbik7CisJCWV4cGVjdF90cnVlKHJlc3VsdCwgIlNob3VsZCBoYXZlIGZv dW5kIGEgcmFuZ2UgYXQgJXp1IiwgaSk7CisJCWV4cGVjdF96dV9lcShpLCBiZWdpbiwgIkluY29y cmVjdCBiZWdpbiBhdCAlenUiLCBpKTsKKwkJZXhwZWN0X3p1X2VxKHNldF9saW1pdCAtIGksIGxl biwgIkluY29ycmVjdCBsZW4gYXQgJXp1IiwgaSk7CisKKwkJcmVzdWx0ID0gZmJfc3JhbmdlX3Jp dGVyKGZiLCBuYml0cywgaSwgJmJlZ2luLCAmbGVuKTsKKwkJZXhwZWN0X2ZhbHNlKHJlc3VsdCwg IlNob3VsZCBub3QgaGF2ZSBmb3VuZCBhIHJhbmdlIGF0ICV6dSIsIGkpOworCisJCXJlc3VsdCA9 IGZiX3VyYW5nZV9yaXRlcihmYiwgbmJpdHMsIGksICZiZWdpbiwgJmxlbik7CisJCWV4cGVjdF90 cnVlKHJlc3VsdCwgIlNob3VsZCBub3QgaGF2ZSBmb3VuZCBhIHJhbmdlIGF0ICV6dSIsIGkpOwor CQlleHBlY3RfenVfZXEoMCwgYmVnaW4sICJJbmNvcnJlY3QgYmVnaW4gYXQgJXp1IiwgaSk7CisJ CWV4cGVjdF96dV9lcShpICsgMSwgbGVuLCAiSW5jb3JyZWN0IGxlbiBhdCAlenUiLCBpKTsKKwl9 CisJZm9yIChzaXplX3QgaSA9IHNldF9saW1pdDsgaSA8IG5iaXRzOyBpKyspIHsKKwkJcmVzdWx0 ID0gZmJfc3JhbmdlX2l0ZXIoZmIsIG5iaXRzLCBpLCAmYmVnaW4sICZsZW4pOworCQlleHBlY3Rf dHJ1ZShyZXN1bHQsICJTaG91bGQgaGF2ZSBmb3VuZCBhIHJhbmdlIGF0ICV6dSIsIGkpOworCQll eHBlY3RfenVfZXEoaSwgYmVnaW4sICJJbmNvcnJlY3QgYmVnaW4gYXQgJXp1IiwgaSk7CisJCWV4 cGVjdF96dV9lcShuYml0cyAtIGksIGxlbiwgIkluY29ycmVjdCBsZW4gYXQgJXp1IiwgaSk7CisK KwkJcmVzdWx0ID0gZmJfdXJhbmdlX2l0ZXIoZmIsIG5iaXRzLCBpLCAmYmVnaW4sICZsZW4pOwor CQlleHBlY3RfZmFsc2UocmVzdWx0LCAiU2hvdWxkIG5vdCBoYXZlIGZvdW5kIGEgcmFuZ2UgYXQg JXp1IiwgaSk7CisKKwkJcmVzdWx0ID0gZmJfc3JhbmdlX3JpdGVyKGZiLCBuYml0cywgaSwgJmJl Z2luLCAmbGVuKTsKKwkJZXhwZWN0X3RydWUocmVzdWx0LCAiU2hvdWxkIGhhdmUgZm91bmQgYSBy YW5nZSBhdCAlenUiLCBpKTsKKwkJZXhwZWN0X3p1X2VxKHNldF9saW1pdCwgYmVnaW4sICJJbmNv cnJlY3QgYmVnaW4gYXQgJXp1IiwgaSk7CisJCWV4cGVjdF96dV9lcShpIC0gc2V0X2xpbWl0ICsg MSwgbGVuLCAiSW5jb3JyZWN0IGxlbiBhdCAlenUiLCBpKTsKKworCQlyZXN1bHQgPSBmYl91cmFu Z2Vfcml0ZXIoZmIsIG5iaXRzLCBpLCAmYmVnaW4sICZsZW4pOworCQlleHBlY3RfdHJ1ZShyZXN1 bHQsICJTaG91bGQgaGF2ZSBmb3VuZCBhIHJhbmdlIGF0ICV6dSIsIGkpOworCQlleHBlY3RfenVf ZXEoMCwgYmVnaW4sICJJbmNvcnJlY3QgYmVnaW4gYXQgJXp1IiwgaSk7CisJCWV4cGVjdF96dV9l cShzZXRfbGltaXQsIGxlbiwgIkluY29ycmVjdCBsZW4gYXQgJXp1IiwgaSk7CisJfQorCit9CitU RVNUX0VORAorCisvKgorICogRG9pbmcgdGhpcyBiaXQtYnktYml0IGlzIHRvbyBzbG93IGZvciBh IHJlYWwgaW1wbGVtZW50YXRpb24sIGJ1dCBmb3IgdGVzdGluZworICogY29kZSwgaXQncyBlYXN5 IHRvIGdldCByaWdodC4gIEluIHRoZSBleGhhdXN0aXZlIHRlc3RzLCB3ZSdsbCBjb21wYXJlIHRo ZQorICogKGZhc3QgYnV0IHRyaWNreSkgcmVhbCBpbXBsZW1lbnRhdGlvbiBhZ2FpbnN0IHRoZSAo c2xvdyBidXQgc2ltcGxlKSB0ZXN0aW5nCisgKiBvbmUuCisgKi8KK3N0YXRpYyBib29sCitmYl9p dGVyX3NpbXBsZShmYl9ncm91cF90ICpmYiwgc2l6ZV90IG5iaXRzLCBzaXplX3Qgc3RhcnQsIHNp emVfdCAqcl9iZWdpbiwKKyAgICBzaXplX3QgKnJfbGVuLCBib29sIHZhbCwgYm9vbCBmb3J3YXJk KSB7CisJc3NpemVfdCBzdHJpZGUgPSAoZm9yd2FyZCA/IChzc2l6ZV90KTEgOiAoc3NpemVfdCkt MSk7CisJc3NpemVfdCByYW5nZV9iZWdpbiA9IChzc2l6ZV90KXN0YXJ0OworCWZvciAoOyByYW5n ZV9iZWdpbiAhPSAoc3NpemVfdCluYml0cyAmJiByYW5nZV9iZWdpbiAhPSAtMTsKKwkgICAgcmFu Z2VfYmVnaW4gKz0gc3RyaWRlKSB7CisJCWlmIChmYl9nZXQoZmIsIG5iaXRzLCByYW5nZV9iZWdp bikgPT0gdmFsKSB7CisJCQlzc2l6ZV90IHJhbmdlX2VuZCA9IHJhbmdlX2JlZ2luOworCQkJZm9y ICg7IHJhbmdlX2VuZCAhPSAoc3NpemVfdCluYml0cyAmJiByYW5nZV9lbmQgIT0gLTE7CisJCQkg ICAgcmFuZ2VfZW5kICs9IHN0cmlkZSkgeworCQkJCWlmIChmYl9nZXQoZmIsIG5iaXRzLCByYW5n ZV9lbmQpICE9IHZhbCkgeworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCQlpZiAoZm9yd2Fy ZCkgeworCQkJCSpyX2JlZ2luID0gcmFuZ2VfYmVnaW47CisJCQkJKnJfbGVuID0gcmFuZ2VfZW5k IC0gcmFuZ2VfYmVnaW47CisJCQl9IGVsc2UgeworCQkJCSpyX2JlZ2luID0gcmFuZ2VfZW5kICsg MTsKKwkJCQkqcl9sZW4gPSByYW5nZV9iZWdpbiAtIHJhbmdlX2VuZDsKKwkJCX0KKwkJCXJldHVy biB0cnVlOworCQl9CisJfQorCXJldHVybiBmYWxzZTsKK30KKworLyogU2ltaWxhciwgYnV0IGZv ciBmaW5kaW5nIGxvbmdlc3QgcmFuZ2VzLiAqLworc3RhdGljIHNpemVfdAorZmJfcmFuZ2VfbG9u Z2VzdF9zaW1wbGUoZmJfZ3JvdXBfdCAqZmIsIHNpemVfdCBuYml0cywgYm9vbCB2YWwpIHsKKwlz aXplX3QgbG9uZ2VzdF9zb19mYXIgPSAwOworCWZvciAoc2l6ZV90IGJlZ2luID0gMDsgYmVnaW4g PCBuYml0czsgYmVnaW4rKykgeworCQlpZiAoZmJfZ2V0KGZiLCBuYml0cywgYmVnaW4pICE9IHZh bCkgeworCQkJY29udGludWU7CisJCX0KKwkJc2l6ZV90IGVuZCA9IGJlZ2luICsgMTsKKwkJZm9y ICg7IGVuZCA8IG5iaXRzOyBlbmQrKykgeworCQkJaWYgKGZiX2dldChmYiwgbmJpdHMsIGVuZCkg IT0gdmFsKSB7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJaWYgKGVuZCAtIGJlZ2luID4gbG9u Z2VzdF9zb19mYXIpIHsKKwkJCWxvbmdlc3Rfc29fZmFyID0gZW5kIC0gYmVnaW47CisJCX0KKwl9 CisJcmV0dXJuIGxvbmdlc3Rfc29fZmFyOworfQorCitzdGF0aWMgdm9pZAorZXhwZWN0X2l0ZXJf cmVzdWx0c19hdChmYl9ncm91cF90ICpmYiwgc2l6ZV90IG5iaXRzLCBzaXplX3QgcG9zLAorICAg IGJvb2wgdmFsLCBib29sIGZvcndhcmQpIHsKKwlib29sIGl0ZXJfcmVzOworCXNpemVfdCBpdGVy X2JlZ2luIEpFTUFMTE9DX0NDX1NJTEVOQ0VfSU5JVCgwKTsKKwlzaXplX3QgaXRlcl9sZW4gSkVN QUxMT0NfQ0NfU0lMRU5DRV9JTklUKDApOworCWlmICh2YWwpIHsKKwkJaWYgKGZvcndhcmQpIHsK KwkJCWl0ZXJfcmVzID0gZmJfc3JhbmdlX2l0ZXIoZmIsIG5iaXRzLCBwb3MsCisJCQkgICAgJml0 ZXJfYmVnaW4sICZpdGVyX2xlbik7CisJCX0gZWxzZSB7CisJCQlpdGVyX3JlcyA9IGZiX3NyYW5n ZV9yaXRlcihmYiwgbmJpdHMsIHBvcywKKwkJCSAgICAmaXRlcl9iZWdpbiwgJml0ZXJfbGVuKTsK KwkJfQorCX0gZWxzZSB7CisJCWlmIChmb3J3YXJkKSB7CisJCQlpdGVyX3JlcyA9IGZiX3VyYW5n ZV9pdGVyKGZiLCBuYml0cywgcG9zLAorCQkJICAgICZpdGVyX2JlZ2luLCAmaXRlcl9sZW4pOwor CQl9IGVsc2UgeworCQkJaXRlcl9yZXMgPSBmYl91cmFuZ2Vfcml0ZXIoZmIsIG5iaXRzLCBwb3Ms CisJCQkgICAgJml0ZXJfYmVnaW4sICZpdGVyX2xlbik7CisJCX0KKwl9CisKKwlib29sIHNpbXBs ZV9pdGVyX3JlczsKKwkvKgorCSAqIFRoZXNlIGFyZSBkZWFkIHN0b3JlcywgYnV0IHRoZSBjb21w aWxlciBjYW4ndCBhbHdheXMgZmlndXJlIHRoYXQgb3V0CisJICogc3RhdGljYWxseSwgYW5kIHdh cm5zIG9uIHRoZSB1bmluaXRpYWxpemVkIHZhcmlhYmxlLgorCSAqLworCXNpemVfdCBzaW1wbGVf aXRlcl9iZWdpbiA9IDA7CisJc2l6ZV90IHNpbXBsZV9pdGVyX2xlbiA9IDA7CisJc2ltcGxlX2l0 ZXJfcmVzID0gZmJfaXRlcl9zaW1wbGUoZmIsIG5iaXRzLCBwb3MsICZzaW1wbGVfaXRlcl9iZWdp biwKKwkgICAgJnNpbXBsZV9pdGVyX2xlbiwgdmFsLCBmb3J3YXJkKTsKKworCWV4cGVjdF9iX2Vx KGl0ZXJfcmVzLCBzaW1wbGVfaXRlcl9yZXMsICJSZXN1bHQgbWlzbWF0Y2ggYXQgJXp1IiwgcG9z KTsKKwlpZiAoaXRlcl9yZXMgJiYgc2ltcGxlX2l0ZXJfcmVzKSB7CisJCWFzc2VydF96dV9lcShp dGVyX2JlZ2luLCBzaW1wbGVfaXRlcl9iZWdpbiwKKwkJICAgICJCZWdpbiBtaXNtYXRjaCBhdCAl enUiLCBwb3MpOworCQlleHBlY3RfenVfZXEoaXRlcl9sZW4sIHNpbXBsZV9pdGVyX2xlbiwKKwkJ ICAgICJMZW5ndGggbWlzbWF0Y2ggYXQgJXp1IiwgcG9zKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lk CitleHBlY3RfaXRlcl9yZXN1bHRzKGZiX2dyb3VwX3QgKmZiLCBzaXplX3QgbmJpdHMpIHsKKwlm b3IgKHNpemVfdCBpID0gMDsgaSA8IG5iaXRzOyBpKyspIHsKKwkJZXhwZWN0X2l0ZXJfcmVzdWx0 c19hdChmYiwgbmJpdHMsIGksIGZhbHNlLCBmYWxzZSk7CisJCWV4cGVjdF9pdGVyX3Jlc3VsdHNf YXQoZmIsIG5iaXRzLCBpLCBmYWxzZSwgdHJ1ZSk7CisJCWV4cGVjdF9pdGVyX3Jlc3VsdHNfYXQo ZmIsIG5iaXRzLCBpLCB0cnVlLCBmYWxzZSk7CisJCWV4cGVjdF9pdGVyX3Jlc3VsdHNfYXQoZmIs IG5iaXRzLCBpLCB0cnVlLCB0cnVlKTsKKwl9CisJZXhwZWN0X3p1X2VxKGZiX3JhbmdlX2xvbmdl c3Rfc2ltcGxlKGZiLCBuYml0cywgdHJ1ZSksCisJICAgIGZiX3NyYW5nZV9sb25nZXN0KGZiLCBu Yml0cyksICJMb25nZXN0IHJhbmdlIG1pc21hdGNoIik7CisJZXhwZWN0X3p1X2VxKGZiX3Jhbmdl X2xvbmdlc3Rfc2ltcGxlKGZiLCBuYml0cywgZmFsc2UpLAorCSAgICBmYl91cmFuZ2VfbG9uZ2Vz dChmYiwgbmJpdHMpLCAiTG9uZ2VzdCByYW5nZSBtaXNtYXRjaCIpOworfQorCitzdGF0aWMgdm9p ZAorc2V0X3BhdHRlcm5fMyhmYl9ncm91cF90ICpmYiwgc2l6ZV90IG5iaXRzLCBib29sIHplcm9f dmFsKSB7CisJZm9yIChzaXplX3QgaSA9IDA7IGkgPCBuYml0czsgaSsrKSB7CisJCWlmICgoaSAl IDYgPCAzICYmIHplcm9fdmFsKSB8fCAoaSAlIDYgPj0gMyAmJiAhemVyb192YWwpKSB7CisJCQlm Yl9zZXQoZmIsIG5iaXRzLCBpKTsKKwkJfSBlbHNlIHsKKwkJCWZiX3Vuc2V0KGZiLCBuYml0cywg aSk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkCitkb190ZXN0X2l0ZXJfcmFuZ2VfZXhoYXVz dGl2ZShzaXplX3QgbmJpdHMpIHsKKwkvKiBUaGlzIHRlc3QgaXMgYWxzbyBwcmV0dHkgc2xvdy4g Ki8KKwlpZiAobmJpdHMgPiAxMDAwKSB7CisJCXJldHVybjsKKwl9CisJc2l6ZV90IHN6ID0gRkJf TkdST1VQUyhuYml0cykgKiBzaXplb2YoZmJfZ3JvdXBfdCk7CisJZmJfZ3JvdXBfdCAqZmIgPSBt YWxsb2Moc3opOworCWZiX2luaXQoZmIsIG5iaXRzKTsKKworCXNldF9wYXR0ZXJuXzMoZmIsIG5i aXRzLCAvKiB6ZXJvX3ZhbCAqLyB0cnVlKTsKKwlleHBlY3RfaXRlcl9yZXN1bHRzKGZiLCBuYml0 cyk7CisKKwlzZXRfcGF0dGVybl8zKGZiLCBuYml0cywgLyogemVyb192YWwgKi8gZmFsc2UpOwor CWV4cGVjdF9pdGVyX3Jlc3VsdHMoZmIsIG5iaXRzKTsKKworCWZiX3NldF9yYW5nZShmYiwgbmJp dHMsIDAsIG5iaXRzKTsKKwlmYl91bnNldF9yYW5nZShmYiwgbmJpdHMsIDAsIG5iaXRzIC8gMiA9 PSAwID8gMSA6IG5iaXRzIC8gMik7CisJZXhwZWN0X2l0ZXJfcmVzdWx0cyhmYiwgbmJpdHMpOwor CisJZmJfdW5zZXRfcmFuZ2UoZmIsIG5iaXRzLCAwLCBuYml0cyk7CisJZmJfc2V0X3JhbmdlKGZi LCBuYml0cywgMCwgbmJpdHMgLyAyID09IDAgPyAxOiBuYml0cyAvIDIpOworCWV4cGVjdF9pdGVy X3Jlc3VsdHMoZmIsIG5iaXRzKTsKKworCWZyZWUoZmIpOworfQorCisvKgorICogTGlrZSB0ZXN0 X2l0ZXJfcmFuZ2Vfc2ltcGxlLCB0aGlzIHRlc3RzIGJvdGggaXRlcmF0aW9uIGFuZCBsb25nZXN0 LXJhbmdlCisgKiBjb21wdXRhdGlvbi4KKyAqLworVEVTVF9CRUdJTih0ZXN0X2l0ZXJfcmFuZ2Vf ZXhoYXVzdGl2ZSkgeworI2RlZmluZSBOQihuYml0cykgXAorCWRvX3Rlc3RfaXRlcl9yYW5nZV9l eGhhdXN0aXZlKG5iaXRzKTsKKwlOQklUU19UQUIKKyN1bmRlZiBOQgorfQorVEVTVF9FTkQKKwor LyoKKyAqIElmIGFsbCBzZXQgYml0cyBpbiB0aGUgYml0bWFwIGFyZSBjb250aWd1b3VzLCBpbiBb c2V0X3N0YXJ0LCBzZXRfZW5kKSwKKyAqIHJldHVybnMgdGhlIG51bWJlciBvZiBzZXQgYml0cyBp biBbc2NvdW50X3N0YXJ0LCBzY291bnRfZW5kKS4KKyAqLworc3RhdGljIHNpemVfdAorc2NvdW50 X2NvbnRpZ3VvdXMoc2l6ZV90IHNldF9zdGFydCwgc2l6ZV90IHNldF9lbmQsIHNpemVfdCBzY291 bnRfc3RhcnQsCisgICAgc2l6ZV90IHNjb3VudF9lbmQpIHsKKwkvKiBObyBvdmVybGFwLiAqLwor CWlmIChzZXRfZW5kIDw9IHNjb3VudF9zdGFydCB8fCBzY291bnRfZW5kIDw9IHNldF9zdGFydCkg eworCQlyZXR1cm4gMDsKKwl9CisJLyogc2V0IHJhbmdlIGNvbnRhaW5zIHNjb3VudCByYW5nZSAq LworCWlmIChzZXRfc3RhcnQgPD0gc2NvdW50X3N0YXJ0ICYmIHNldF9lbmQgPj0gc2NvdW50X2Vu ZCkgeworCQlyZXR1cm4gc2NvdW50X2VuZCAtIHNjb3VudF9zdGFydDsKKwl9CisJLyogc2NvdW50 IHJhbmdlIGNvbnRhaW5zIHNldCByYW5nZS4gKi8KKwlpZiAoc2NvdW50X3N0YXJ0IDw9IHNldF9z dGFydCAmJiBzY291bnRfZW5kID49IHNldF9lbmQpIHsKKwkJcmV0dXJuIHNldF9lbmQgLSBzZXRf c3RhcnQ7CisJfQorCS8qIFBhcnRpYWwgb3ZlcmxhcCwgd2l0aCBzZXQgcmFuZ2Ugc3RhcnRpbmcg Zmlyc3QuICovCisJaWYgKHNldF9zdGFydCA8IHNjb3VudF9zdGFydCAmJiBzZXRfZW5kIDwgc2Nv dW50X2VuZCkgeworCQlyZXR1cm4gc2V0X2VuZCAtIHNjb3VudF9zdGFydDsKKwl9CisJLyogUGFy dGlhbCBvdmVybGFwLCB3aXRoIHNjb3VudCByYW5nZSBzdGFydGluZyBmaXJzdC4gKi8KKwlpZiAo c2NvdW50X3N0YXJ0IDwgc2V0X3N0YXJ0ICYmIHNjb3VudF9lbmQgPCBzZXRfZW5kKSB7CisJCXJl dHVybiBzY291bnRfZW5kIC0gc2V0X3N0YXJ0OworCX0KKwkvKgorCSAqIFRyaWdnZXIgYW4gYXNz ZXJ0IGZhaWx1cmU7IHRoZSBhYm92ZSBsaXN0IHNob3VsZCBoYXZlIGJlZW4KKwkgKiBleGhhdXN0 aXZlLgorCSAqLworCXVucmVhY2hhYmxlKCk7Cit9CisKK3N0YXRpYyBzaXplX3QKK3Vjb3VudF9j b250aWd1b3VzKHNpemVfdCBzZXRfc3RhcnQsIHNpemVfdCBzZXRfZW5kLCBzaXplX3QgdWNvdW50 X3N0YXJ0LAorICAgIHNpemVfdCB1Y291bnRfZW5kKSB7CisJLyogTm8gb3ZlcmxhcC4gKi8KKwlp ZiAoc2V0X2VuZCA8PSB1Y291bnRfc3RhcnQgfHwgdWNvdW50X2VuZCA8PSBzZXRfc3RhcnQpIHsK KwkJcmV0dXJuIHVjb3VudF9lbmQgLSB1Y291bnRfc3RhcnQ7CisJfQorCS8qIHNldCByYW5nZSBj b250YWlucyB1Y291bnQgcmFuZ2UgKi8KKwlpZiAoc2V0X3N0YXJ0IDw9IHVjb3VudF9zdGFydCAm JiBzZXRfZW5kID49IHVjb3VudF9lbmQpIHsKKwkJcmV0dXJuIDA7CisJfQorCS8qIHVjb3VudCBy YW5nZSBjb250YWlucyBzZXQgcmFuZ2UuICovCisJaWYgKHVjb3VudF9zdGFydCA8PSBzZXRfc3Rh cnQgJiYgdWNvdW50X2VuZCA+PSBzZXRfZW5kKSB7CisJCXJldHVybiAodWNvdW50X2VuZCAtIHVj b3VudF9zdGFydCkgLSAoc2V0X2VuZCAtIHNldF9zdGFydCk7CisJfQorCS8qIFBhcnRpYWwgb3Zl cmxhcCwgd2l0aCBzZXQgcmFuZ2Ugc3RhcnRpbmcgZmlyc3QuICovCisJaWYgKHNldF9zdGFydCA8 IHVjb3VudF9zdGFydCAmJiBzZXRfZW5kIDwgdWNvdW50X2VuZCkgeworCQlyZXR1cm4gdWNvdW50 X2VuZCAtIHNldF9lbmQ7CisJfQorCS8qIFBhcnRpYWwgb3ZlcmxhcCwgd2l0aCB1Y291bnQgcmFu Z2Ugc3RhcnRpbmcgZmlyc3QuICovCisJaWYgKHVjb3VudF9zdGFydCA8IHNldF9zdGFydCAmJiB1 Y291bnRfZW5kIDwgc2V0X2VuZCkgeworCQlyZXR1cm4gc2V0X3N0YXJ0IC0gdWNvdW50X3N0YXJ0 OworCX0KKwkvKgorCSAqIFRyaWdnZXIgYW4gYXNzZXJ0IGZhaWx1cmU7IHRoZSBhYm92ZSBsaXN0 IHNob3VsZCBoYXZlIGJlZW4KKwkgKiBleGhhdXN0aXZlLgorCSAqLworCXVucmVhY2hhYmxlKCk7 Cit9CisKK3N0YXRpYyB2b2lkCitleHBlY3RfY291bnRfbWF0Y2hfY29udGlndW91cyhmYl9ncm91 cF90ICpmYiwgc2l6ZV90IG5iaXRzLCBzaXplX3Qgc2V0X3N0YXJ0LAorICAgIHNpemVfdCBzZXRf ZW5kKSB7CisJZm9yIChzaXplX3QgaSA9IDA7IGkgPCBuYml0czsgaSsrKSB7CisJCWZvciAoc2l6 ZV90IGogPSBpICsgMTsgaiA8PSBuYml0czsgaisrKSB7CisJCQlzaXplX3QgY250ID0gaiAtIGk7 CisJCQlzaXplX3Qgc2NvdW50X2V4cGVjdGVkID0gc2NvdW50X2NvbnRpZ3VvdXMoc2V0X3N0YXJ0 LAorCQkJICAgIHNldF9lbmQsIGksIGopOworCQkJc2l6ZV90IHNjb3VudF9jb21wdXRlZCA9IGZi X3Njb3VudChmYiwgbmJpdHMsIGksIGNudCk7CisJCQlleHBlY3RfenVfZXEoc2NvdW50X2V4cGVj dGVkLCBzY291bnRfY29tcHV0ZWQsCisJCQkgICAgImZiX3Njb3VudCBlcnJvciB3aXRoIG5iaXRz PSV6dSwgc3RhcnQ9JXp1LCAiCisJCQkgICAgImNudD0lenUsIHdpdGggYml0cyBzZXQgaW4gWyV6 dSwgJXp1KSIsCisJCQkgICAgbmJpdHMsIGksIGNudCwgc2V0X3N0YXJ0LCBzZXRfZW5kKTsKKwor CQkJc2l6ZV90IHVjb3VudF9leHBlY3RlZCA9IHVjb3VudF9jb250aWd1b3VzKHNldF9zdGFydCwK KwkJCSAgICBzZXRfZW5kLCBpLCBqKTsKKwkJCXNpemVfdCB1Y291bnRfY29tcHV0ZWQgPSBmYl91 Y291bnQoZmIsIG5iaXRzLCBpLCBjbnQpOworCQkJYXNzZXJ0X3p1X2VxKHVjb3VudF9leHBlY3Rl ZCwgdWNvdW50X2NvbXB1dGVkLAorCQkJICAgICJmYl91Y291bnQgZXJyb3Igd2l0aCBuYml0cz0l enUsIHN0YXJ0PSV6dSwgIgorCQkJICAgICJjbnQ9JXp1LCB3aXRoIGJpdHMgc2V0IGluIFslenUs ICV6dSkiLAorCQkJICAgIG5iaXRzLCBpLCBjbnQsIHNldF9zdGFydCwgc2V0X2VuZCk7CisKKwkJ fQorCX0KK30KKworc3RhdGljIHZvaWQKK2RvX3Rlc3RfY291bnRfY29udGlndW91cyhzaXplX3Qg bmJpdHMpIHsKKwlzaXplX3Qgc3ogPSBGQl9OR1JPVVBTKG5iaXRzKSAqIHNpemVvZihmYl9ncm91 cF90KTsKKwlmYl9ncm91cF90ICpmYiA9IG1hbGxvYyhzeik7CisKKwlmYl9pbml0KGZiLCBuYml0 cyk7CisKKwlleHBlY3RfY291bnRfbWF0Y2hfY29udGlndW91cyhmYiwgbmJpdHMsIDAsIDApOwor CWZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbmJpdHM7IGkrKykgeworCQlmYl9zZXQoZmIsIG5iaXRz LCBpKTsKKwkJZXhwZWN0X2NvdW50X21hdGNoX2NvbnRpZ3VvdXMoZmIsIG5iaXRzLCAwLCBpICsg MSk7CisJfQorCisJZm9yIChzaXplX3QgaSA9IDA7IGkgPCBuYml0czsgaSsrKSB7CisJCWZiX3Vu c2V0KGZiLCBuYml0cywgaSk7CisJCWV4cGVjdF9jb3VudF9tYXRjaF9jb250aWd1b3VzKGZiLCBu Yml0cywgaSArIDEsIG5iaXRzKTsKKwl9CisKKwlmcmVlKGZiKTsKK30KKworVEVTVF9CRUdJTih0 ZXN0X2NvdW50X2NvbnRpZ3VvdXNfc2ltcGxlKSB7CisJZW51bSB7bmJpdHMgPSAzMDB9OworCWZi X2dyb3VwX3QgZmJbRkJfTkdST1VQUyhuYml0cyldOworCWZiX2luaXQoZmIsIG5iaXRzKTsKKwkv KiBKdXN0IGFuIGFyYml0cmFyeSBudW1iZXIuICovCisJc2l6ZV90IHN0YXJ0ID0gMjM7CisKKwlm Yl9zZXRfcmFuZ2UoZmIsIG5iaXRzLCBzdGFydCwgMzAgLSBzdGFydCk7CisJZXhwZWN0X2NvdW50 X21hdGNoX2NvbnRpZ3VvdXMoZmIsIG5iaXRzLCBzdGFydCwgMzApOworCisJZmJfc2V0X3Jhbmdl KGZiLCBuYml0cywgc3RhcnQsIDQwIC0gc3RhcnQpOworCWV4cGVjdF9jb3VudF9tYXRjaF9jb250 aWd1b3VzKGZiLCBuYml0cywgc3RhcnQsIDQwKTsKKworCWZiX3NldF9yYW5nZShmYiwgbmJpdHMs IHN0YXJ0LCA3MCAtIHN0YXJ0KTsKKwlleHBlY3RfY291bnRfbWF0Y2hfY29udGlndW91cyhmYiwg bmJpdHMsIHN0YXJ0LCA3MCk7CisKKwlmYl9zZXRfcmFuZ2UoZmIsIG5iaXRzLCBzdGFydCwgMTIw IC0gc3RhcnQpOworCWV4cGVjdF9jb3VudF9tYXRjaF9jb250aWd1b3VzKGZiLCBuYml0cywgc3Rh cnQsIDEyMCk7CisKKwlmYl9zZXRfcmFuZ2UoZmIsIG5iaXRzLCBzdGFydCwgMTUwIC0gc3RhcnQp OworCWV4cGVjdF9jb3VudF9tYXRjaF9jb250aWd1b3VzKGZiLCBuYml0cywgc3RhcnQsIDE1MCk7 CisKKwlmYl9zZXRfcmFuZ2UoZmIsIG5iaXRzLCBzdGFydCwgMjAwIC0gc3RhcnQpOworCWV4cGVj dF9jb3VudF9tYXRjaF9jb250aWd1b3VzKGZiLCBuYml0cywgc3RhcnQsIDIwMCk7CisKKwlmYl9z ZXRfcmFuZ2UoZmIsIG5iaXRzLCBzdGFydCwgMjkwIC0gc3RhcnQpOworCWV4cGVjdF9jb3VudF9t YXRjaF9jb250aWd1b3VzKGZiLCBuYml0cywgc3RhcnQsIDI5MCk7Cit9CitURVNUX0VORAorCitU RVNUX0JFR0lOKHRlc3RfY291bnRfY29udGlndW91cykgeworI2RlZmluZSBOQihuYml0cykgXAor CS8qIFRoaXMgdGVzdCBpcyAqcGFydGljdWxhcmx5KiBzbG93IGluIGRlYnVnIGJ1aWxkcy4gKi8g XAorCWlmICgoIWNvbmZpZ19kZWJ1ZyAmJiBuYml0cyA8IDMwMCkgfHwgbmJpdHMgPCAxNTApIHsg XAorCQlkb190ZXN0X2NvdW50X2NvbnRpZ3VvdXMobmJpdHMpOyBcCisJfQorCU5CSVRTX1RBQgor I3VuZGVmIE5CCit9CitURVNUX0VORAorCitzdGF0aWMgdm9pZAorZXhwZWN0X2NvdW50X21hdGNo X2FsdGVybmF0aW5nKGZiX2dyb3VwX3QgKmZiX2V2ZW4sIGZiX2dyb3VwX3QgKmZiX29kZCwKKyAg ICBzaXplX3QgbmJpdHMpIHsKKwlmb3IgKHNpemVfdCBpID0gMDsgaSA8IG5iaXRzOyBpKyspIHsK KwkJZm9yIChzaXplX3QgaiA9IGkgKyAxOyBqIDw9IG5iaXRzOyBqKyspIHsKKwkJCXNpemVfdCBj bnQgPSBqIC0gaTsKKwkJCXNpemVfdCBvZGRfc2NvdW50ID0gY250IC8gMgorCQkJICAgICsgKHNp emVfdCkoY250ICUgMiA9PSAxICYmIGkgJSAyID09IDEpOworCQkJc2l6ZV90IG9kZF9zY291bnRf Y29tcHV0ZWQgPSBmYl9zY291bnQoZmJfb2RkLCBuYml0cywKKwkJCSAgICBpLCBqIC0gaSk7CisJ CQlhc3NlcnRfenVfZXEob2RkX3Njb3VudCwgb2RkX3Njb3VudF9jb21wdXRlZCwKKwkJCSAgICAi ZmJfc2NvdW50IGVycm9yIHdpdGggbmJpdHM9JXp1LCBzdGFydD0lenUsICIKKwkJCSAgICAiY250 PSV6dSwgd2l0aCBhbHRlcm5hdGluZyBiaXRzIHNldC4iLAorCQkJICAgIG5iaXRzLCBpLCBqIC0g aSk7CisKKwkJCXNpemVfdCBvZGRfdWNvdW50ID0gY250IC8gMgorCQkJICAgICsgKHNpemVfdCko Y250ICUgMiA9PSAxICYmIGkgJSAyID09IDApOworCQkJc2l6ZV90IG9kZF91Y291bnRfY29tcHV0 ZWQgPSBmYl91Y291bnQoZmJfb2RkLCBuYml0cywKKwkJCSAgICBpLCBqIC0gaSk7CisJCQlhc3Nl cnRfenVfZXEob2RkX3Vjb3VudCwgb2RkX3Vjb3VudF9jb21wdXRlZCwKKwkJCSAgICAiZmJfdWNv dW50IGVycm9yIHdpdGggbmJpdHM9JXp1LCBzdGFydD0lenUsICIKKwkJCSAgICAiY250PSV6dSwg d2l0aCBhbHRlcm5hdGluZyBiaXRzIHNldC4iLAorCQkJICAgIG5iaXRzLCBpLCBqIC0gaSk7CisK KwkJCXNpemVfdCBldmVuX3Njb3VudCA9IGNudCAvIDIKKwkJCSAgICArIChzaXplX3QpKGNudCAl IDIgPT0gMSAmJiBpICUgMiA9PSAwKTsKKwkJCXNpemVfdCBldmVuX3Njb3VudF9jb21wdXRlZCA9 IGZiX3Njb3VudChmYl9ldmVuLCBuYml0cywKKwkJCSAgICBpLCBqIC0gaSk7CisJCQlhc3NlcnRf enVfZXEoZXZlbl9zY291bnQsIGV2ZW5fc2NvdW50X2NvbXB1dGVkLAorCQkJICAgICJmYl9zY291 bnQgZXJyb3Igd2l0aCBuYml0cz0lenUsIHN0YXJ0PSV6dSwgIgorCQkJICAgICJjbnQ9JXp1LCB3 aXRoIGFsdGVybmF0aW5nIGJpdHMgc2V0LiIsCisJCQkgICAgbmJpdHMsIGksIGogLSBpKTsKKwor CQkJc2l6ZV90IGV2ZW5fdWNvdW50ID0gY250IC8gMgorCQkJICAgICsgKHNpemVfdCkoY250ICUg MiA9PSAxICYmIGkgJSAyID09IDEpOworCQkJc2l6ZV90IGV2ZW5fdWNvdW50X2NvbXB1dGVkID0g ZmJfdWNvdW50KGZiX2V2ZW4sIG5iaXRzLAorCQkJICAgIGksIGogLSBpKTsKKwkJCWFzc2VydF96 dV9lcShldmVuX3Vjb3VudCwgZXZlbl91Y291bnRfY29tcHV0ZWQsCisJCQkgICAgImZiX3Vjb3Vu dCBlcnJvciB3aXRoIG5iaXRzPSV6dSwgc3RhcnQ9JXp1LCAiCisJCQkgICAgImNudD0lenUsIHdp dGggYWx0ZXJuYXRpbmcgYml0cyBzZXQuIiwKKwkJCSAgICBuYml0cywgaSwgaiAtIGkpOworCQl9 CisJfQorfQorCitzdGF0aWMgdm9pZAorZG9fdGVzdF9jb3VudF9hbHRlcm5hdGluZyhzaXplX3Qg bmJpdHMpIHsKKwlpZiAobmJpdHMgPiAxMDAwKSB7CisJCXJldHVybjsKKwl9CisJc2l6ZV90IHN6 ID0gRkJfTkdST1VQUyhuYml0cykgKiBzaXplb2YoZmJfZ3JvdXBfdCk7CisJZmJfZ3JvdXBfdCAq ZmJfZXZlbiA9IG1hbGxvYyhzeik7CisJZmJfZ3JvdXBfdCAqZmJfb2RkID0gbWFsbG9jKHN6KTsK KworCWZiX2luaXQoZmJfZXZlbiwgbmJpdHMpOworCWZiX2luaXQoZmJfb2RkLCBuYml0cyk7CisK Kwlmb3IgKHNpemVfdCBpID0gMDsgaSA8IG5iaXRzOyBpKyspIHsKKwkJaWYgKGkgJSAyID09IDAp IHsKKwkJCWZiX3NldChmYl9ldmVuLCBuYml0cywgaSk7CisJCX0gZWxzZSB7CisJCQlmYl9zZXQo ZmJfb2RkLCBuYml0cywgaSk7CisJCX0KKwl9CisKKwlleHBlY3RfY291bnRfbWF0Y2hfYWx0ZXJu YXRpbmcoZmJfZXZlbiwgZmJfb2RkLCBuYml0cyk7CisKKwlmcmVlKGZiX2V2ZW4pOworCWZyZWUo ZmJfb2RkKTsKK30KKworVEVTVF9CRUdJTih0ZXN0X2NvdW50X2FsdGVybmF0aW5nKSB7CisjZGVm aW5lIE5CKG5iaXRzKSBcCisJZG9fdGVzdF9jb3VudF9hbHRlcm5hdGluZyhuYml0cyk7CisJTkJJ VFNfVEFCCisjdW5kZWYgTkIKK30KK1RFU1RfRU5ECisKK3N0YXRpYyB2b2lkCitkb190ZXN0X2Jp dF9vcChzaXplX3QgbmJpdHMsIGJvb2wgKCpvcCkoYm9vbCBhLCBib29sIGIpLAorICAgIHZvaWQg KCpmYl9vcCkoZmJfZ3JvdXBfdCAqZHN0LCBmYl9ncm91cF90ICpzcmMxLCBmYl9ncm91cF90ICpz cmMyLCBzaXplX3QgbmJpdHMpKSB7CisJc2l6ZV90IHN6ID0gRkJfTkdST1VQUyhuYml0cykgKiBz aXplb2YoZmJfZ3JvdXBfdCk7CisJZmJfZ3JvdXBfdCAqZmIxID0gbWFsbG9jKHN6KTsKKwlmYl9n cm91cF90ICpmYjIgPSBtYWxsb2Moc3opOworCWZiX2dyb3VwX3QgKmZiX3Jlc3VsdCA9IG1hbGxv Yyhzeik7CisJZmJfaW5pdChmYjEsIG5iaXRzKTsKKwlmYl9pbml0KGZiMiwgbmJpdHMpOworCWZi X2luaXQoZmJfcmVzdWx0LCBuYml0cyk7CisKKwkvKiBKdXN0IHR3byByYW5kb20gbnVtYmVycy4g Ki8KKwljb25zdCB1aW50NjRfdCBwcm5nX2luaXQxID0gKHVpbnQ2NF90KTBYNEU5QTlERTZBMzU2 OTFDRFVMTDsKKwljb25zdCB1aW50NjRfdCBwcm5nX2luaXQyID0gKHVpbnQ2NF90KTBYNzg1NkUz OTZCMDYzQzM2RVVMTDsKKworCXVpbnQ2NF90IHBybmcxID0gcHJuZ19pbml0MTsKKwl1aW50NjRf dCBwcm5nMiA9IHBybmdfaW5pdDI7CisKKwlmb3IgKHNpemVfdCBpID0gMDsgaSA8IG5iaXRzOyBp KyspIHsKKwkJYm9vbCBiaXQxID0gKChwcm5nMSAmICgxVUxMIDw8IChpICUgNjQpKSkgIT0gMCk7 CisJCWJvb2wgYml0MiA9ICgocHJuZzIgJiAoMVVMTCA8PCAoaSAlIDY0KSkpICE9IDApOworCisJ CWlmIChiaXQxKSB7CisJCQlmYl9zZXQoZmIxLCBuYml0cywgaSk7CisJCX0KKwkJaWYgKGJpdDIp IHsKKwkJCWZiX3NldChmYjIsIG5iaXRzLCBpKTsKKwkJfQorCisJCWlmIChpICUgNjQgPT0gMCkg eworCQkJcHJuZzEgPSBwcm5nX3N0YXRlX25leHRfdTY0KHBybmcxKTsKKwkJCXBybmcyID0gcHJu Z19zdGF0ZV9uZXh0X3U2NChwcm5nMik7CisJCX0KKwl9CisKKwlmYl9vcChmYl9yZXN1bHQsIGZi MSwgZmIyLCBuYml0cyk7CisKKwkvKiBSZXNldCB0aGUgcHJuZ3MgdG8gcmVwbGF5IHRoZW0uICov CisJcHJuZzEgPSBwcm5nX2luaXQxOworCXBybmcyID0gcHJuZ19pbml0MjsKKworCWZvciAoc2l6 ZV90IGkgPSAwOyBpIDwgbmJpdHM7IGkrKykgeworCQlib29sIGJpdDEgPSAoKHBybmcxICYgKDFV TEwgPDwgKGkgJSA2NCkpKSAhPSAwKTsKKwkJYm9vbCBiaXQyID0gKChwcm5nMiAmICgxVUxMIDw8 IChpICUgNjQpKSkgIT0gMCk7CisKKwkJLyogT3JpZ2luYWwgYml0bWFwcyBzaG91bGRuJ3QgY2hh bmdlLiAqLworCQlleHBlY3RfYl9lcShiaXQxLCBmYl9nZXQoZmIxLCBuYml0cywgaSksICJkaWZm ZXJlbmNlIGF0IGJpdCAlenUiLCBpKTsKKwkJZXhwZWN0X2JfZXEoYml0MiwgZmJfZ2V0KGZiMiwg bmJpdHMsIGkpLCAiZGlmZmVyZW5jZSBhdCBiaXQgJXp1IiwgaSk7CisKKwkJLyogTmV3IG9uZSBz aG91bGQgYmUgYml0d2lzZSBhbmQuICovCisJCWV4cGVjdF9iX2VxKG9wKGJpdDEsIGJpdDIpLCBm Yl9nZXQoZmJfcmVzdWx0LCBuYml0cywgaSksCisJCSAgICAiZGlmZmVyZW5jZSBhdCBiaXQgJXp1 IiwgaSk7CisKKwkJLyogVXBkYXRlIHRoZSBzYW1lIHdheSB3ZSBkaWQgbGFzdCB0aW1lLiAqLwor CQlpZiAoaSAlIDY0ID09IDApIHsKKwkJCXBybmcxID0gcHJuZ19zdGF0ZV9uZXh0X3U2NChwcm5n MSk7CisJCQlwcm5nMiA9IHBybmdfc3RhdGVfbmV4dF91NjQocHJuZzIpOworCQl9CisJfQorCisJ ZnJlZShmYjEpOworCWZyZWUoZmIyKTsKKwlmcmVlKGZiX3Jlc3VsdCk7Cit9CisKK3N0YXRpYyBi b29sCitiaW5hcnlfYW5kKGJvb2wgYSwgYm9vbCBiKSB7CisJcmV0dXJuIGEgJiBiOworfQorCitz dGF0aWMgdm9pZAorZG9fdGVzdF9iaXRfYW5kKHNpemVfdCBuYml0cykgeworCWRvX3Rlc3RfYml0 X29wKG5iaXRzLCAmYmluYXJ5X2FuZCwgJmZiX2JpdF9hbmQpOworfQorCitURVNUX0JFR0lOKHRl c3RfYml0X2FuZCkgeworI2RlZmluZSBOQihuYml0cykgXAorCWRvX3Rlc3RfYml0X2FuZChuYml0 cyk7CisJTkJJVFNfVEFCCisjdW5kZWYgTkIKK30KK1RFU1RfRU5ECisKK3N0YXRpYyBib29sCiti aW5hcnlfb3IoYm9vbCBhLCBib29sIGIpIHsKKwlyZXR1cm4gYSB8IGI7Cit9CisKK3N0YXRpYyB2 b2lkCitkb190ZXN0X2JpdF9vcihzaXplX3QgbmJpdHMpIHsKKwlkb190ZXN0X2JpdF9vcChuYml0 cywgJmJpbmFyeV9vciwgJmZiX2JpdF9vcik7Cit9CisKK1RFU1RfQkVHSU4odGVzdF9iaXRfb3Ip IHsKKyNkZWZpbmUgTkIobmJpdHMpIFwKKwlkb190ZXN0X2JpdF9vcihuYml0cyk7CisJTkJJVFNf VEFCCisjdW5kZWYgTkIKK30KK1RFU1RfRU5ECisKK3N0YXRpYyBib29sCitiaW5hcnlfbm90KGJv b2wgYSwgYm9vbCBiKSB7CisJKHZvaWQpYjsKKwlyZXR1cm4gIWE7Cit9CisKK3N0YXRpYyB2b2lk CitmYl9iaXRfbm90X3NoaW0oZmJfZ3JvdXBfdCAqZHN0LCBmYl9ncm91cF90ICpzcmMxLCBmYl9n cm91cF90ICpzcmMyLAorICAgIHNpemVfdCBuYml0cykgeworCSh2b2lkKXNyYzI7CisJZmJfYml0 X25vdChkc3QsIHNyYzEsIG5iaXRzKTsKK30KKworc3RhdGljIHZvaWQKK2RvX3Rlc3RfYml0X25v dChzaXplX3QgbmJpdHMpIHsKKwlkb190ZXN0X2JpdF9vcChuYml0cywgJmJpbmFyeV9ub3QsICZm Yl9iaXRfbm90X3NoaW0pOworfQorCitURVNUX0JFR0lOKHRlc3RfYml0X25vdCkgeworI2RlZmlu ZSBOQihuYml0cykgXAorCWRvX3Rlc3RfYml0X25vdChuYml0cyk7CisJTkJJVFNfVEFCCisjdW5k ZWYgTkIKK30KK1RFU1RfRU5ECisKK2ludAorbWFpbih2b2lkKSB7CisJcmV0dXJuIHRlc3Rfbm9f cmVlbnRyYW5jeSgKKwkgICAgdGVzdF9mYl9pbml0LAorCSAgICB0ZXN0X2dldF9zZXRfdW5zZXQs CisJICAgIHRlc3Rfc2VhcmNoX3NpbXBsZSwKKwkgICAgdGVzdF9zZWFyY2hfZXhoYXVzdGl2ZSwK KwkgICAgdGVzdF9yYW5nZV9zaW1wbGUsCisJICAgIHRlc3RfZW1wdHlfZnVsbCwKKwkgICAgdGVz dF9pdGVyX3JhbmdlX3NpbXBsZSwKKwkgICAgdGVzdF9pdGVyX3JhbmdlX2V4aGF1c3RpdmUsCisJ ICAgIHRlc3RfY291bnRfY29udGlndW91c19zaW1wbGUsCisJICAgIHRlc3RfY291bnRfY29udGln dW91cywKKwkgICAgdGVzdF9jb3VudF9hbHRlcm5hdGluZywKKwkgICAgdGVzdF9iaXRfYW5kLAor CSAgICB0ZXN0X2JpdF9vciwKKwkgICAgdGVzdF9iaXRfbm90KTsKK30KCmRpZmYgLS1naXQgYS8z ODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvZm9yay5jIGIv Mzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L2ZvcmsuYwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTM3NDIzCi0tLSAvZGV2L251bGwK KysrIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L2Zv cmsuYwpAQCAtMCwwICsxLDE0MSBAQAorI2luY2x1ZGUgInRlc3QvamVtYWxsb2NfdGVzdC5oIgor CisjaWZuZGVmIF9XSU4zMgorI2luY2x1ZGUgPHN5cy93YWl0Lmg+CisjZW5kaWYKKworI2lmbmRl ZiBfV0lOMzIKK3N0YXRpYyB2b2lkCit3YWl0X2Zvcl9jaGlsZF9leGl0KGludCBwaWQpIHsKKwlp bnQgc3RhdHVzOworCXdoaWxlICh0cnVlKSB7CisJCWlmICh3YWl0cGlkKHBpZCwgJnN0YXR1cywg MCkgPT0gLTEpIHsKKwkJCXRlc3RfZmFpbCgiVW5leHBlY3RlZCB3YWl0cGlkKCkgZmFpbHVyZS4i KTsKKwkJfQorCQlpZiAoV0lGU0lHTkFMRUQoc3RhdHVzKSkgeworCQkJdGVzdF9mYWlsKCJVbmV4 cGVjdGVkIGNoaWxkIHRlcm1pbmF0aW9uIGR1ZSB0byAiCisJCQkgICAgInNpZ25hbCAlZCIsIFdU RVJNU0lHKHN0YXR1cykpOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKFdJRkVYSVRFRChzdGF0dXMp KSB7CisJCQlpZiAoV0VYSVRTVEFUVVMoc3RhdHVzKSAhPSAwKSB7CisJCQkJdGVzdF9mYWlsKCJV bmV4cGVjdGVkIGNoaWxkIGV4aXQgdmFsdWUgJWQiLAorCQkJCSAgICBXRVhJVFNUQVRVUyhzdGF0 dXMpKTsKKwkJCX0KKwkJCWJyZWFrOworCQl9CisJfQorfQorI2VuZGlmCisKK1RFU1RfQkVHSU4o dGVzdF9mb3JrKSB7CisjaWZuZGVmIF9XSU4zMgorCXZvaWQgKnA7CisJcGlkX3QgcGlkOworCisJ LyogU2V0IHVwIGEgbWFudWFsbHkgbWFuYWdlZCBhcmVuYSBmb3IgdGVzdC4gKi8KKwl1bnNpZ25l ZCBhcmVuYV9pbmQ7CisJc2l6ZV90IHN6ID0gc2l6ZW9mKHVuc2lnbmVkKTsKKwlleHBlY3RfZF9l cShtYWxsY3RsKCJhcmVuYXMuY3JlYXRlIiwgKHZvaWQgKikmYXJlbmFfaW5kLCAmc3osIE5VTEws IDApLAorCSAgICAwLCAiVW5leHBlY3RlZCBtYWxsY3RsKCkgZmFpbHVyZSIpOworCisJLyogTWln cmF0ZSB0byB0aGUgbmV3IGFyZW5hLiAqLworCXVuc2lnbmVkIG9sZF9hcmVuYV9pbmQ7CisJc3og PSBzaXplb2Yob2xkX2FyZW5hX2luZCk7CisJZXhwZWN0X2RfZXEobWFsbGN0bCgidGhyZWFkLmFy ZW5hIiwgKHZvaWQgKikmb2xkX2FyZW5hX2luZCwgJnN6LAorCSAgICAodm9pZCAqKSZhcmVuYV9p bmQsIHNpemVvZihhcmVuYV9pbmQpKSwgMCwKKwkgICAgIlVuZXhwZWN0ZWQgbWFsbGN0bCgpIGZh aWx1cmUiKTsKKworCXAgPSBtYWxsb2MoMSk7CisJZXhwZWN0X3B0cl9ub3RfbnVsbChwLCAiVW5l eHBlY3RlZCBtYWxsb2MoKSBmYWlsdXJlIik7CisKKwlwaWQgPSBmb3JrKCk7CisKKwlmcmVlKHAp OworCisJcCA9IG1hbGxvYyg2NCk7CisJZXhwZWN0X3B0cl9ub3RfbnVsbChwLCAiVW5leHBlY3Rl ZCBtYWxsb2MoKSBmYWlsdXJlIik7CisJZnJlZShwKTsKKworCWlmIChwaWQgPT0gLTEpIHsKKwkJ LyogRXJyb3IuICovCisJCXRlc3RfZmFpbCgiVW5leHBlY3RlZCBmb3JrKCkgZmFpbHVyZSIpOwor CX0gZWxzZSBpZiAocGlkID09IDApIHsKKwkJLyogQ2hpbGQuICovCisJCV9leGl0KDApOworCX0g ZWxzZSB7CisJCXdhaXRfZm9yX2NoaWxkX2V4aXQocGlkKTsKKwl9CisjZWxzZQorCXRlc3Rfc2tp cCgiZm9yaygyKSBpcyBpcnJlbGV2YW50IHRvIFdpbmRvd3MiKTsKKyNlbmRpZgorfQorVEVTVF9F TkQKKworI2lmbmRlZiBfV0lOMzIKK3N0YXRpYyB2b2lkICoKK2RvX2ZvcmtfdGhkKHZvaWQgKmFy ZykgeworCW1hbGxvYygxKTsKKwlpbnQgcGlkID0gZm9yaygpOworCWlmIChwaWQgPT0gLTEpIHsK KwkJLyogRXJyb3IuICovCisJCXRlc3RfZmFpbCgiVW5leHBlY3RlZCBmb3JrKCkgZmFpbHVyZSIp OworCX0gZWxzZSBpZiAocGlkID09IDApIHsKKwkJLyogQ2hpbGQuICovCisJCWNoYXIgKmFyZ3Nb XSA9IHsidHJ1ZSIsIE5VTEx9OworCQlleGVjdnAoYXJnc1swXSwgYXJncyk7CisJCXRlc3RfZmFp bCgiRXhlYyBmYWlsZWQiKTsKKwl9IGVsc2UgeworCQkvKiBQYXJlbnQgKi8KKwkJd2FpdF9mb3Jf Y2hpbGRfZXhpdChwaWQpOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKyNlbmRpZgorCisjaWZuZGVm IF9XSU4zMgorc3RhdGljIHZvaWQKK2RvX3Rlc3RfZm9ya19tdWx0aXRocmVhZGVkKCkgeworCXRo ZF90IGNoaWxkOworCXRoZF9jcmVhdGUoJmNoaWxkLCBkb19mb3JrX3RoZCwgTlVMTCk7CisJZG9f Zm9ya190aGQoTlVMTCk7CisJdGhkX2pvaW4oY2hpbGQsIE5VTEwpOworfQorI2VuZGlmCisKK1RF U1RfQkVHSU4odGVzdF9mb3JrX211bHRpdGhyZWFkZWQpIHsKKyNpZm5kZWYgX1dJTjMyCisJLyoK KwkgKiBXZSd2ZSBzZWVuIGJ1Z3MgaW52b2x2aW5nIGhhbmdpbmcgb24gYXJlbmFzX2xvY2sgKHRo b3VnaCB0aGUgc2FtZQorCSAqIGNsYXNzIG9mIGJ1Z3MgY2FuIGhhcHBlbiBvbiBhbnkgbXV0ZXgp LiAgVGhlIGJ1Z3MgYXJlIGludGVybWl0dGVudAorCSAqIHRob3VnaCwgc28gd2Ugd2FudCB0byBy dW4gdGhlIHRlc3QgbXVsdGlwbGUgdGltZXMuICBTaW5jZSB3ZSBob2xkIHRoZQorCSAqIGFyZW5h cyBsb2NrIG9ubHkgZWFybHkgaW4gdGhlIHByb2Nlc3MgbGlmZXRpbWUsIHdlIGNhbid0IGp1c3Qg cnVuCisJICogdGhpcyB0ZXN0IGluIGEgbG9vcCAoc2luY2UsIGFmdGVyIGFsbCB0aGUgYXJlbmFz IGFyZSBpbml0aWFsaXplZCwgd2UKKwkgKiB3b24ndCBhY3F1aXJlIGFyZW5hc19sb2NrIGFueSBm dXJ0aGVyKS4gIFdlIHRoZXJlZm9yZSByZXBlYXQgdGhlIHRlc3QKKwkgKiB3aXRoIG11bHRpcGxl IHByb2Nlc3Nlcy4KKwkgKi8KKwlmb3IgKGludCBpID0gMDsgaSA8IDEwMDsgaSsrKSB7CisJCWlu dCBwaWQgPSBmb3JrKCk7CisJCWlmIChwaWQgPT0gLTEpIHsKKwkJCS8qIEVycm9yLiAqLworCQkJ dGVzdF9mYWlsKCJVbmV4cGVjdGVkIGZvcmsoKSBmYWlsdXJlLCIpOworCQl9IGVsc2UgaWYgKHBp ZCA9PSAwKSB7CisJCQkvKiBDaGlsZC4gKi8KKwkJCWRvX3Rlc3RfZm9ya19tdWx0aXRocmVhZGVk KCk7CisJCQlfZXhpdCgwKTsKKwkJfSBlbHNlIHsKKwkJCXdhaXRfZm9yX2NoaWxkX2V4aXQocGlk KTsKKwkJfQorCX0KKyNlbHNlCisJdGVzdF9za2lwKCJmb3JrKDIpIGlzIGlycmVsZXZhbnQgdG8g V2luZG93cyIpOworI2VuZGlmCit9CitURVNUX0VORAorCitpbnQKK21haW4odm9pZCkgeworCXJl dHVybiB0ZXN0X25vX3JlZW50cmFuY3koCisJICAgIHRlc3RfZm9yaywKKwkgICAgdGVzdF9mb3Jr X211bHRpdGhyZWFkZWQpOworfQoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxk L2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9meHAuYyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxk L2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9meHAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwLi4yN2YxMDk3Ci0tLSAvZGV2L251bGwKKysrIGIvMzg5LWRzLWJhc2UtMy4zLjAt YnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L2Z4cC5jCkBAIC0wLDAgKzEsMzk0IEBACisj aW5jbHVkZSAidGVzdC9qZW1hbGxvY190ZXN0LmgiCisKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRl cm5hbC9meHAuaCIKKworc3RhdGljIGRvdWJsZQorZnhwMmRvdWJsZShmeHBfdCBhKSB7CisJZG91 YmxlIGludHBhcnQgPSAoZG91YmxlKShhID4+IDE2KTsKKwlkb3VibGUgZnJhY3BhcnQgPSAoZG91 YmxlKShhICYgKCgxVSA8PCAxNikgLSAxKSkgLyAoMVUgPDwgMTYpOworCXJldHVybiBpbnRwYXJ0 ICsgZnJhY3BhcnQ7Cit9CisKKy8qIElzIGEgY2xvc2UgdG8gYj8gKi8KK3N0YXRpYyBib29sCitk b3VibGVfY2xvc2UoZG91YmxlIGEsIGRvdWJsZSBiKSB7CisJLyoKKwkgKiBPdXIgaW1wbGVtZW50 YXRpb24gZG9lc24ndCB0cnkgZm9yIHByZWNpc2lvbi4gIENvcnJlc3BvbmRpbmdseSwgZG9uJ3QK KwkgKiBlbmZvcmNlIGl0IHRvbyBzdHJlbnVvdXNseSBoZXJlOyBhY2NlcHQgdmFsdWVzIHRoYXQg YXJlIGNsb3NlIGluCisJICogZWl0aGVyIHJlbGF0aXZlIG9yIGFic29sdXRlIHRlcm1zLgorCSAq LworCXJldHVybiBmYWJzKGEgLSBiKSA8IDAuMDEgfHwgZmFicyhhIC0gYikgLyBhIDwgMC4wMTsK K30KKworc3RhdGljIGJvb2wKK2Z4cF9jbG9zZShmeHBfdCBhLCBmeHBfdCBiKSB7CisJcmV0dXJu IGRvdWJsZV9jbG9zZShmeHAyZG91YmxlKGEpLCBmeHAyZG91YmxlKGIpKTsKK30KKworc3RhdGlj IGZ4cF90Cit4cGFyc2VfZnhwKGNvbnN0IGNoYXIgKnN0cikgeworCWZ4cF90IHJlc3VsdDsKKwli b29sIGVyciA9IGZ4cF9wYXJzZSgmcmVzdWx0LCBzdHIsIE5VTEwpOworCWFzc2VydF9mYWxzZShl cnIsICJJbnZhbGlkIGZ4cCBzdHJpbmc6ICVzIiwgc3RyKTsKKwlyZXR1cm4gcmVzdWx0OworfQor CitzdGF0aWMgdm9pZAorZXhwZWN0X3BhcnNlX2FjY3VyYXRlKGNvbnN0IGNoYXIgKnN0ciwgY29u c3QgY2hhciAqcGFyc2Vfc3RyKSB7CisJZG91YmxlIHRydWVfdmFsID0gc3RydG9kKHN0ciwgTlVM TCk7CisJZnhwX3QgZnhwX3ZhbDsKKwljaGFyICplbmQ7CisJYm9vbCBlcnIgPSBmeHBfcGFyc2Uo JmZ4cF92YWwsIHBhcnNlX3N0ciwgJmVuZCk7CisJZXhwZWN0X2ZhbHNlKGVyciwgIlVuZXhwZWN0 ZWQgcGFyc2UgZmFpbHVyZSIpOworCWV4cGVjdF9wdHJfZXEocGFyc2Vfc3RyICsgc3RybGVuKHN0 ciksIGVuZCwKKwkgICAgIkRpZG4ndCBwYXJzZSB3aG9sZSBzdHJpbmciKTsKKwlleHBlY3RfdHJ1 ZShkb3VibGVfY2xvc2UoZnhwMmRvdWJsZShmeHBfdmFsKSwgdHJ1ZV92YWwpLAorCSAgICAiTWlz cGFyc2VkICVzIiwgc3RyKTsKK30KKworc3RhdGljIHZvaWQKK3BhcnNlX3ZhbGlkX3RyaWFsKGNv bnN0IGNoYXIgKnN0cikgeworCS8qIFRoZSB2YWx1ZSBpdCBwYXJzZXMgc2hvdWxkIGJlIGNvcnJl Y3QuICovCisJZXhwZWN0X3BhcnNlX2FjY3VyYXRlKHN0ciwgc3RyKTsKKwljaGFyIGJ1ZlsxMDBd OworCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlc3dpdGhfc29tZV90cmFpbGluZ190ZXh0 Iiwgc3RyKTsKKwlleHBlY3RfcGFyc2VfYWNjdXJhdGUoc3RyLCBidWYpOworCXNucHJpbnRmKGJ1 Ziwgc2l6ZW9mKGJ1ZiksICIlcyB3aXRoIGEgc3BhY2UiLCBzdHIpOworCWV4cGVjdF9wYXJzZV9h Y2N1cmF0ZShzdHIsIGJ1Zik7CisJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVzLGluX2Ff bWFsbG9jX2NvbmZfc3RyaW5nOjEiLCBzdHIpOworCWV4cGVjdF9wYXJzZV9hY2N1cmF0ZShzdHIs IGJ1Zik7Cit9CisKK1RFU1RfQkVHSU4odGVzdF9wYXJzZV92YWxpZCkgeworCXBhcnNlX3ZhbGlk X3RyaWFsKCIwIik7CisJcGFyc2VfdmFsaWRfdHJpYWwoIjEiKTsKKwlwYXJzZV92YWxpZF90cmlh bCgiMiIpOworCXBhcnNlX3ZhbGlkX3RyaWFsKCIxMDAiKTsKKwlwYXJzZV92YWxpZF90cmlhbCgi MzQ1Iik7CisJcGFyc2VfdmFsaWRfdHJpYWwoIjAwMDAwMDAwMTIzIik7CisJcGFyc2VfdmFsaWRf dHJpYWwoIjAwMDAwMDAwOTg3Iik7CisKKwlwYXJzZV92YWxpZF90cmlhbCgiMC4wIik7CisJcGFy c2VfdmFsaWRfdHJpYWwoIjAuMDAwMDAwMDAwMDA0NTY0NTY0NTYiKTsKKwlwYXJzZV92YWxpZF90 cmlhbCgiMTAwLjAwMDAwMDAwMDAwNDU2NDU2NDU2Iik7CisKKwlwYXJzZV92YWxpZF90cmlhbCgi MTIzLjEiKTsKKwlwYXJzZV92YWxpZF90cmlhbCgiMTIzLjAxIik7CisJcGFyc2VfdmFsaWRfdHJp YWwoIjEyMy4wMDEiKTsKKwlwYXJzZV92YWxpZF90cmlhbCgiMTIzLjAwMDEiKTsKKwlwYXJzZV92 YWxpZF90cmlhbCgiMTIzLjAwMDAxIik7CisJcGFyc2VfdmFsaWRfdHJpYWwoIjEyMy4wMDAwMDEi KTsKKwlwYXJzZV92YWxpZF90cmlhbCgiMTIzLjAwMDAwMDEiKTsKKworCXBhcnNlX3ZhbGlkX3Ry aWFsKCIuMCIpOworCXBhcnNlX3ZhbGlkX3RyaWFsKCIuMSIpOworCXBhcnNlX3ZhbGlkX3RyaWFs KCIuMDEiKTsKKwlwYXJzZV92YWxpZF90cmlhbCgiLjAwMSIpOworCXBhcnNlX3ZhbGlkX3RyaWFs KCIuMDAwMSIpOworCXBhcnNlX3ZhbGlkX3RyaWFsKCIuMDAwMDEiKTsKKwlwYXJzZV92YWxpZF90 cmlhbCgiLjAwMDAwMSIpOworCisJcGFyc2VfdmFsaWRfdHJpYWwoIi4xIik7CisJcGFyc2VfdmFs aWRfdHJpYWwoIi4xMCIpOworCXBhcnNlX3ZhbGlkX3RyaWFsKCIuMTAwIik7CisJcGFyc2VfdmFs aWRfdHJpYWwoIi4xMDAwIik7CisJcGFyc2VfdmFsaWRfdHJpYWwoIi4xMDAwMDAiKTsKK30KK1RF U1RfRU5ECisKK3N0YXRpYyB2b2lkCitleHBlY3RfcGFyc2VfZmFpbHVyZShjb25zdCBjaGFyICpz dHIpIHsKKwlmeHBfdCByZXN1bHQgPSBGWFBfSU5JVF9JTlQoMzMzKTsKKwljaGFyICplbmQgPSAo dm9pZCAqKTB4MTIzOworCWJvb2wgZXJyID0gZnhwX3BhcnNlKCZyZXN1bHQsIHN0ciwgJmVuZCk7 CisJZXhwZWN0X3RydWUoZXJyLCAiRXhwZWN0ZWQgYSBwYXJzZSBlcnJvciBvbjogJXMiLCBzdHIp OworCWV4cGVjdF9wdHJfZXEoKHZvaWQgKikweDEyMywgZW5kLAorCSAgICAiUGFyc2UgZXJyb3Ig c2hvdWxkbid0IGNoYW5nZSByZXN1bHRzIik7CisJZXhwZWN0X3UzMl9lcShyZXN1bHQsIEZYUF9J TklUX0lOVCgzMzMpLAorCSAgICAiUGFyc2UgZXJyb3Igc2hvdWxkbid0IGNoYW5nZSByZXN1bHRz Iik7Cit9CisKK1RFU1RfQkVHSU4odGVzdF9wYXJzZV9pbnZhbGlkKSB7CisJZXhwZWN0X3BhcnNl X2ZhaWx1cmUoIjEyMy4iKTsKKwlleHBlY3RfcGFyc2VfZmFpbHVyZSgiMy5hIik7CisJZXhwZWN0 X3BhcnNlX2ZhaWx1cmUoIi5hIik7CisJZXhwZWN0X3BhcnNlX2ZhaWx1cmUoImEuMSIpOworCWV4 cGVjdF9wYXJzZV9mYWlsdXJlKCJhIik7CisJLyogQSB2YWxpZCBzdHJpbmcsIGJ1dCBvbmUgdGhh dCBvdmVyZmxvd3MuICovCisJZXhwZWN0X3BhcnNlX2ZhaWx1cmUoIjEyMzQ1Njc4OSIpOworCWV4 cGVjdF9wYXJzZV9mYWlsdXJlKCIwMDAwMDAwMTIzNDU2Nzg5Iik7CisJZXhwZWN0X3BhcnNlX2Zh aWx1cmUoIjEwMDAwMDAiKTsKK30KK1RFU1RfRU5ECisKK3N0YXRpYyB2b2lkCitleHBlY3RfaW5p dF9wZXJjZW50KHVuc2lnbmVkIHBlcmNlbnQsIGNvbnN0IGNoYXIgKnN0cikgeworCWZ4cF90IHJl c3VsdF9pbml0ID0gRlhQX0lOSVRfUEVSQ0VOVChwZXJjZW50KTsKKwlmeHBfdCByZXN1bHRfcGFy c2UgPSB4cGFyc2VfZnhwKHN0cik7CisJZXhwZWN0X3UzMl9lcShyZXN1bHRfaW5pdCwgcmVzdWx0 X3BhcnNlLAorCSAgICAiRXhwZWN0IHJlcHJlc2VudGF0aW9ucyBvZiBGWFBfSU5JVF9QRVJDRU5U KCV1KSBhbmQgIgorCSAgICAiZnhwX3BhcnNlKFwiJXNcIikgdG8gYmUgZXF1YWw7IGdvdCAleCBh bmQgJXgiLAorCSAgICBwZXJjZW50LCBzdHIsIHJlc3VsdF9pbml0LCByZXN1bHRfcGFyc2UpOwor Cit9CisKKy8qCisgKiBFdmVyeSBvdGhlciB0ZXN0IHVzZXMgZWl0aGVyIHBhcnNpbmcgb3IgRlhQ X0lOSVRfSU5UOyBpdCBnZXRzIHRlc3RlZCBpbiB0aG9zZQorICogd2F5cy4gIFdlIG5lZWQgYSBv bmUtb2ZmIGZvciB0aGUgcGVyY2VudC1iYXNlZCBpbml0aWFsaXphdGlvbiwgdGhvdWdoLgorICov CitURVNUX0JFR0lOKHRlc3RfaW5pdF9wZXJjZW50KSB7CisJZXhwZWN0X2luaXRfcGVyY2VudCgx MDAsICIxIik7CisJZXhwZWN0X2luaXRfcGVyY2VudCg3NSwgIi43NSIpOworCWV4cGVjdF9pbml0 X3BlcmNlbnQoMSwgIi4wMSIpOworCWV4cGVjdF9pbml0X3BlcmNlbnQoNTAsICIuNSIpOworfQor VEVTVF9FTkQKKworc3RhdGljIHZvaWQKK2V4cGVjdF9hZGQoY29uc3QgY2hhciAqYXN0ciwgY29u c3QgY2hhciAqYnN0ciwgY29uc3QgY2hhciogcmVzdWx0c3RyKSB7CisJZnhwX3QgYSA9IHhwYXJz ZV9meHAoYXN0cik7CisJZnhwX3QgYiA9IHhwYXJzZV9meHAoYnN0cik7CisJZnhwX3QgcmVzdWx0 ID0geHBhcnNlX2Z4cChyZXN1bHRzdHIpOworCWV4cGVjdF90cnVlKGZ4cF9jbG9zZShmeHBfYWRk KGEsIGIpLCByZXN1bHQpLAorCSAgICAiRXhwZWN0ZWQgJXMgKyAlcyA9PSAlcyIsIGFzdHIsIGJz dHIsIHJlc3VsdHN0cik7Cit9CisKK1RFU1RfQkVHSU4odGVzdF9hZGRfc2ltcGxlKSB7CisJZXhw ZWN0X2FkZCgiMCIsICIwIiwgIjAiKTsKKwlleHBlY3RfYWRkKCIwIiwgIjEiLCAiMSIpOworCWV4 cGVjdF9hZGQoIjEiLCAiMSIsICIyIik7CisJZXhwZWN0X2FkZCgiMS41IiwgIjEuNSIsICIzIik7 CisJZXhwZWN0X2FkZCgiMC4xIiwgIjAuMSIsICIwLjIiKTsKKwlleHBlY3RfYWRkKCIxMjMiLCAi NDU2IiwgIjU3OSIpOworfQorVEVTVF9FTkQKKworc3RhdGljIHZvaWQKK2V4cGVjdF9zdWIoY29u c3QgY2hhciAqYXN0ciwgY29uc3QgY2hhciAqYnN0ciwgY29uc3QgY2hhciogcmVzdWx0c3RyKSB7 CisJZnhwX3QgYSA9IHhwYXJzZV9meHAoYXN0cik7CisJZnhwX3QgYiA9IHhwYXJzZV9meHAoYnN0 cik7CisJZnhwX3QgcmVzdWx0ID0geHBhcnNlX2Z4cChyZXN1bHRzdHIpOworCWV4cGVjdF90cnVl KGZ4cF9jbG9zZShmeHBfc3ViKGEsIGIpLCByZXN1bHQpLAorCSAgICAiRXhwZWN0ZWQgJXMgLSAl cyA9PSAlcyIsIGFzdHIsIGJzdHIsIHJlc3VsdHN0cik7Cit9CisKK1RFU1RfQkVHSU4odGVzdF9z dWJfc2ltcGxlKSB7CisJZXhwZWN0X3N1YigiMCIsICIwIiwgIjAiKTsKKwlleHBlY3Rfc3ViKCIx IiwgIjAiLCAiMSIpOworCWV4cGVjdF9zdWIoIjEiLCAiMSIsICIwIik7CisJZXhwZWN0X3N1Yigi My41IiwgIjEuNSIsICIyIik7CisJZXhwZWN0X3N1YigiMC4zIiwgIjAuMSIsICIwLjIiKTsKKwll eHBlY3Rfc3ViKCI0NTYiLCAiMTIzIiwgIjMzMyIpOworfQorVEVTVF9FTkQKKworc3RhdGljIHZv aWQKK2V4cGVjdF9tdWwoY29uc3QgY2hhciAqYXN0ciwgY29uc3QgY2hhciAqYnN0ciwgY29uc3Qg Y2hhciogcmVzdWx0c3RyKSB7CisJZnhwX3QgYSA9IHhwYXJzZV9meHAoYXN0cik7CisJZnhwX3Qg YiA9IHhwYXJzZV9meHAoYnN0cik7CisJZnhwX3QgcmVzdWx0ID0geHBhcnNlX2Z4cChyZXN1bHRz dHIpOworCWV4cGVjdF90cnVlKGZ4cF9jbG9zZShmeHBfbXVsKGEsIGIpLCByZXN1bHQpLAorCSAg ICAiRXhwZWN0ZWQgJXMgKiAlcyA9PSAlcyIsIGFzdHIsIGJzdHIsIHJlc3VsdHN0cik7Cit9CisK K1RFU1RfQkVHSU4odGVzdF9tdWxfc2ltcGxlKSB7CisJZXhwZWN0X211bCgiMCIsICIwIiwgIjAi KTsKKwlleHBlY3RfbXVsKCIxIiwgIjAiLCAiMCIpOworCWV4cGVjdF9tdWwoIjEiLCAiMSIsICIx Iik7CisJZXhwZWN0X211bCgiMS41IiwgIjEuNSIsICIyLjI1Iik7CisJZXhwZWN0X211bCgiMTAw LjAiLCAiMTAiLCAiMTAwMCIpOworCWV4cGVjdF9tdWwoIi4xIiwgIjEwIiwgIjEiKTsKK30KK1RF U1RfRU5ECisKK3N0YXRpYyB2b2lkCitleHBlY3RfZGl2KGNvbnN0IGNoYXIgKmFzdHIsIGNvbnN0 IGNoYXIgKmJzdHIsIGNvbnN0IGNoYXIqIHJlc3VsdHN0cikgeworCWZ4cF90IGEgPSB4cGFyc2Vf ZnhwKGFzdHIpOworCWZ4cF90IGIgPSB4cGFyc2VfZnhwKGJzdHIpOworCWZ4cF90IHJlc3VsdCA9 IHhwYXJzZV9meHAocmVzdWx0c3RyKTsKKwlleHBlY3RfdHJ1ZShmeHBfY2xvc2UoZnhwX2Rpdihh LCBiKSwgcmVzdWx0KSwKKwkgICAgIkV4cGVjdGVkICVzIC8gJXMgPT0gJXMiLCBhc3RyLCBic3Ry LCByZXN1bHRzdHIpOworfQorCitURVNUX0JFR0lOKHRlc3RfZGl2X3NpbXBsZSkgeworCWV4cGVj dF9kaXYoIjEiLCAiMSIsICIxIik7CisJZXhwZWN0X2RpdigiMCIsICIxIiwgIjAiKTsKKwlleHBl Y3RfZGl2KCIyIiwgIjEiLCAiMiIpOworCWV4cGVjdF9kaXYoIjMiLCAiMiIsICIxLjUiKTsKKwll eHBlY3RfZGl2KCIzIiwgIjEuNSIsICIyIik7CisJZXhwZWN0X2RpdigiMTAiLCAiLjEiLCAiMTAw Iik7CisJZXhwZWN0X2RpdigiMTIzIiwgIjQ1NiIsICIuMjY5NzM2ODQyMSIpOworfQorVEVTVF9F TkQKKworc3RhdGljIHZvaWQKK2V4cGVjdF9yb3VuZChjb25zdCBjaGFyICpzdHIsIHVpbnQzMl90 IHJvdW5kZWRfZG93biwgdWludDMyX3Qgcm91bmRlZF9uZWFyZXN0KSB7CisJZnhwX3QgZnhwID0g eHBhcnNlX2Z4cChzdHIpOworCXVpbnQzMl90IGZ4cF9yb3VuZGVkX2Rvd24gPSBmeHBfcm91bmRf ZG93bihmeHApOworCXVpbnQzMl90IGZ4cF9yb3VuZGVkX25lYXJlc3QgPSBmeHBfcm91bmRfbmVh cmVzdChmeHApOworCWV4cGVjdF91MzJfZXEocm91bmRlZF9kb3duLCBmeHBfcm91bmRlZF9kb3du LAorCSAgICAiTWlzdGFrZSByb3VuZGluZyAlcyBkb3duIiwgc3RyKTsKKwlleHBlY3RfdTMyX2Vx KHJvdW5kZWRfbmVhcmVzdCwgZnhwX3JvdW5kZWRfbmVhcmVzdCwKKwkgICAgIk1pc3Rha2Ugcm91 bmRpbmcgJXMgdG8gbmVhcmVzdCIsIHN0cik7Cit9CisKK1RFU1RfQkVHSU4odGVzdF9yb3VuZF9z aW1wbGUpIHsKKwlleHBlY3Rfcm91bmQoIjEuNSIsIDEsIDIpOworCWV4cGVjdF9yb3VuZCgiMCIs IDAsIDApOworCWV4cGVjdF9yb3VuZCgiMC4xIiwgMCwgMCk7CisJZXhwZWN0X3JvdW5kKCIwLjQi LCAwLCAwKTsKKwlleHBlY3Rfcm91bmQoIjAuNDAwMDAiLCAwLCAwKTsKKwlleHBlY3Rfcm91bmQo IjAuNSIsIDAsIDEpOworCWV4cGVjdF9yb3VuZCgiMC42IiwgMCwgMSk7CisJZXhwZWN0X3JvdW5k KCIxMjMiLCAxMjMsIDEyMyk7CisJZXhwZWN0X3JvdW5kKCIxMjMuNCIsIDEyMywgMTIzKTsKKwll eHBlY3Rfcm91bmQoIjEyMy41IiwgMTIzLCAxMjQpOworfQorVEVTVF9FTkQKKworc3RhdGljIHZv aWQKK2V4cGVjdF9tdWxfZnJhYyhzaXplX3QgYSwgY29uc3QgY2hhciAqZnJhY3N0ciwgc2l6ZV90 IGV4cGVjdGVkKSB7CisJZnhwX3QgZnJhYyA9IHhwYXJzZV9meHAoZnJhY3N0cik7CisJc2l6ZV90 IHJlc3VsdCA9IGZ4cF9tdWxfZnJhYyhhLCBmcmFjKTsKKwlleHBlY3RfdHJ1ZShkb3VibGVfY2xv c2UoZXhwZWN0ZWQsIHJlc3VsdCksCisJICAgICJFeHBlY3RlZCAlenUgKiAlcyA9PSAlenUgKGZy YWNtdWwpOyBnb3QgJXp1IiwgYSwgZnJhY3N0ciwKKwkgICAgZXhwZWN0ZWQsIHJlc3VsdCk7Cit9 CisKK1RFU1RfQkVHSU4odGVzdF9tdWxfZnJhY19zaW1wbGUpIHsKKwlleHBlY3RfbXVsX2ZyYWMo U0laRV9NQVgsICIxLjAiLCBTSVpFX01BWCk7CisJZXhwZWN0X211bF9mcmFjKFNJWkVfTUFYLCAi Ljc1IiwgU0laRV9NQVggLyA0ICogMyk7CisJZXhwZWN0X211bF9mcmFjKFNJWkVfTUFYLCAiLjUi LCBTSVpFX01BWCAvIDIpOworCWV4cGVjdF9tdWxfZnJhYyhTSVpFX01BWCwgIi4yNSIsIFNJWkVf TUFYIC8gNCk7CisJZXhwZWN0X211bF9mcmFjKDFVIDw8IDE2LCAiMS4wIiwgMVUgPDwgMTYpOwor CWV4cGVjdF9tdWxfZnJhYygxVSA8PCAzMCwgIjAuNSIsIDFVIDw8IDI5KTsKKwlleHBlY3RfbXVs X2ZyYWMoMVUgPDwgMzAsICIwLjI1IiwgMVUgPDwgMjgpOworCWV4cGVjdF9tdWxfZnJhYygxVSA8 PCAzMCwgIjAuMTI1IiwgMVUgPDwgMjcpOworCWV4cGVjdF9tdWxfZnJhYygoMVUgPDwgMzApICsg MSwgIjAuMTI1IiwgMVUgPDwgMjcpOworCWV4cGVjdF9tdWxfZnJhYygxMDAsICIwLjI1IiwgMjUp OworCWV4cGVjdF9tdWxfZnJhYygxMDAwICogMTAwMCwgIjAuMDAxIiwgMTAwMCk7Cit9CitURVNU X0VORAorCitzdGF0aWMgdm9pZAorZXhwZWN0X3ByaW50KGNvbnN0IGNoYXIgKnN0cikgeworCWZ4 cF90IGZ4cCA9IHhwYXJzZV9meHAoc3RyKTsKKwljaGFyIGJ1ZltGWFBfQlVGX1NJWkVdOworCWZ4 cF9wcmludChmeHAsIGJ1Zik7CisJZXhwZWN0X2RfZXEoMCwgc3RyY21wKHN0ciwgYnVmKSwgIkNv dWxkbid0IHJvdW5kLXRyaXAgcHJpbnQgJXMiLCBzdHIpOworfQorCitURVNUX0JFR0lOKHRlc3Rf cHJpbnRfc2ltcGxlKSB7CisJZXhwZWN0X3ByaW50KCIwLjAiKTsKKwlleHBlY3RfcHJpbnQoIjEu MCIpOworCWV4cGVjdF9wcmludCgiMi4wIik7CisJZXhwZWN0X3ByaW50KCIxMjMuMCIpOworCS8q CisJICogV2UgaGl0IHRoZSBwb3NzaWJpbGl0eSBvZiByb3VuZG9mZiBlcnJvcnMgd2hlbmV2ZXIg dGhlIGZyYWN0aW9uYWwKKwkgKiBjb21wb25lbnQgaXNuJ3QgYSByb3VuZCBiaW5hcnkgbnVtYmVy OyBvbmx5IGNoZWNrIHRoZXNlIGhlcmUgKHdlCisJICogcm91bmQtdHJpcCBwcm9wZXJseSBpbiB0 aGUgc3RyZXNzIHRlc3QpLgorCSAqLworCWV4cGVjdF9wcmludCgiMS41Iik7CisJZXhwZWN0X3By aW50KCIzLjM3NSIpOworCWV4cGVjdF9wcmludCgiMC4yNSIpOworCWV4cGVjdF9wcmludCgiMC4x MjUiKTsKKwkvKiAxIC8gMioqMTQgKi8KKwlleHBlY3RfcHJpbnQoIjAuMDAwMDYxMDM1MTU2MjUi KTsKK30KK1RFU1RfRU5ECisKK1RFU1RfQkVHSU4odGVzdF9zdHJlc3MpIHsKKwljb25zdCBjaGFy ICpudW1iZXJzW10gPSB7CisJCSIwLjAiLCAiMC4xIiwgIjAuMiIsICIwLjMiLCAiMC40IiwKKwkJ IjAuNSIsICIwLjYiLCAiMC43IiwgIjAuOCIsICIwLjkiLAorCisJCSIxLjAiLCAiMS4xIiwgIjEu MiIsICIxLjMiLCAiMS40IiwKKwkJIjEuNSIsICIxLjYiLCAiMS43IiwgIjEuOCIsICIxLjkiLAor CisJCSIyLjAiLCAiMi4xIiwgIjIuMiIsICIyLjMiLCAiMi40IiwKKwkJIjIuNSIsICIyLjYiLCAi Mi43IiwgIjIuOCIsICIyLjkiLAorCisJCSIxNy4wIiwgIjE3LjEiLCAiMTcuMiIsICIxNy4zIiwg IjE3LjQiLAorCQkiMTcuNSIsICIxNy42IiwgIjE3LjciLCAiMTcuOCIsICIxNy45IiwKKworCQki MTguMCIsICIxOC4xIiwgIjE4LjIiLCAiMTguMyIsICIxOC40IiwKKwkJIjE4LjUiLCAiMTguNiIs ICIxOC43IiwgIjE4LjgiLCAiMTguOSIsCisKKwkJIjEyMy4wIiwgIjEyMy4xIiwgIjEyMy4yIiwg IjEyMy4zIiwgIjEyMy40IiwKKwkJIjEyMy41IiwgIjEyMy42IiwgIjEyMy43IiwgIjEyMy44Iiwg IjEyMy45IiwKKworCQkiMTI0LjAiLCAiMTI0LjEiLCAiMTI0LjIiLCAiMTI0LjMiLCAiMTI0LjQi LAorCQkiMTI0LjUiLCAiMTI0LjYiLCAiMTI0LjciLCAiMTI0LjgiLCAiMTI0LjkiLAorCisJCSIx MjUuMCIsICIxMjUuMSIsICIxMjUuMiIsICIxMjUuMyIsICIxMjUuNCIsCisJCSIxMjUuNSIsICIx MjUuNiIsICIxMjUuNyIsICIxMjUuOCIsICIxMjUuOSJ9OworCXNpemVfdCBudW1iZXJzX2xlbiA9 IHNpemVvZihudW1iZXJzKS9zaXplb2YobnVtYmVyc1swXSk7CisJZm9yIChzaXplX3QgaSA9IDA7 IGkgPCBudW1iZXJzX2xlbjsgaSsrKSB7CisJCWZ4cF90IGZ4cF9hID0geHBhcnNlX2Z4cChudW1i ZXJzW2ldKTsKKwkJZG91YmxlIGRvdWJsZV9hID0gc3RydG9kKG51bWJlcnNbaV0sIE5VTEwpOwor CisJCXVpbnQzMl90IGZ4cF9yb3VuZGVkX2Rvd24gPSBmeHBfcm91bmRfZG93bihmeHBfYSk7CisJ CXVpbnQzMl90IGZ4cF9yb3VuZGVkX25lYXJlc3QgPSBmeHBfcm91bmRfbmVhcmVzdChmeHBfYSk7 CisJCXVpbnQzMl90IGRvdWJsZV9yb3VuZGVkX2Rvd24gPSAodWludDMyX3QpZG91YmxlX2E7CisJ CXVpbnQzMl90IGRvdWJsZV9yb3VuZGVkX25lYXJlc3QgPSAodWludDMyX3Qpcm91bmQoZG91Ymxl X2EpOworCisJCWV4cGVjdF91MzJfZXEoZG91YmxlX3JvdW5kZWRfZG93biwgZnhwX3JvdW5kZWRf ZG93biwKKwkJICAgICJJbmNvcnJlY3RseSByb3VuZGVkIGRvd24gJXMiLCBudW1iZXJzW2ldKTsK KwkJZXhwZWN0X3UzMl9lcShkb3VibGVfcm91bmRlZF9uZWFyZXN0LCBmeHBfcm91bmRlZF9uZWFy ZXN0LAorCQkgICAgIkluY29ycmVjdGx5IHJvdW5kZWQtdG8tbmVhcmVzdCAlcyIsIG51bWJlcnNb aV0pOworCisJCWZvciAoc2l6ZV90IGogPSAwOyBqIDwgbnVtYmVyc19sZW47IGorKykgeworCQkJ ZnhwX3QgZnhwX2IgPSB4cGFyc2VfZnhwKG51bWJlcnNbal0pOworCQkJZG91YmxlIGRvdWJsZV9i ID0gc3RydG9kKG51bWJlcnNbal0sIE5VTEwpOworCisJCQlmeHBfdCBmeHBfc3VtID0gZnhwX2Fk ZChmeHBfYSwgZnhwX2IpOworCQkJZG91YmxlIGRvdWJsZV9zdW0gPSBkb3VibGVfYSArIGRvdWJs ZV9iOworCQkJZXhwZWN0X3RydWUoCisJCQkgICAgZG91YmxlX2Nsb3NlKGZ4cDJkb3VibGUoZnhw X3N1bSksIGRvdWJsZV9zdW0pLAorCQkJICAgICJNaXNjb21wdXRlZCAlcyArICVzIiwgbnVtYmVy c1tpXSwgbnVtYmVyc1tqXSk7CisKKwkJCWlmIChkb3VibGVfYSA+IGRvdWJsZV9iKSB7CisJCQkJ ZnhwX3QgZnhwX2RpZmYgPSBmeHBfc3ViKGZ4cF9hLCBmeHBfYik7CisJCQkJZG91YmxlIGRvdWJs ZV9kaWZmID0gZG91YmxlX2EgLSBkb3VibGVfYjsKKwkJCQlleHBlY3RfdHJ1ZSgKKwkJCQkgICAg ZG91YmxlX2Nsb3NlKGZ4cDJkb3VibGUoZnhwX2RpZmYpLAorCQkJCSAgICBkb3VibGVfZGlmZiks CisJCQkJICAgICJNaXNjb21wdXRlZCAlcyAtICVzIiwgbnVtYmVyc1tpXSwKKwkJCQkgICAgbnVt YmVyc1tqXSk7CisJCQl9CisKKwkJCWZ4cF90IGZ4cF9wcm9kID0gZnhwX211bChmeHBfYSwgZnhw X2IpOworCQkJZG91YmxlIGRvdWJsZV9wcm9kID0gZG91YmxlX2EgKiBkb3VibGVfYjsKKwkJCWV4 cGVjdF90cnVlKAorCQkJICAgIGRvdWJsZV9jbG9zZShmeHAyZG91YmxlKGZ4cF9wcm9kKSwgZG91 YmxlX3Byb2QpLAorCQkJICAgICJNaXNjb21wdXRlZCAlcyAqICVzIiwgbnVtYmVyc1tpXSwgbnVt YmVyc1tqXSk7CisKKwkJCWlmIChkb3VibGVfYiAhPSAwLjApIHsKKwkJCQlmeHBfdCBmeHBfcXVv dCA9IGZ4cF9kaXYoZnhwX2EsIGZ4cF9iKTsKKwkJCQlkb3VibGUgZG91YmxlX3F1b3QgPSBkb3Vi bGVfYSAvIGRvdWJsZV9iOworCQkJCWV4cGVjdF90cnVlKAorCQkJCSAgICBkb3VibGVfY2xvc2Uo ZnhwMmRvdWJsZShmeHBfcXVvdCksCisJCQkJICAgIGRvdWJsZV9xdW90KSwKKwkJCQkgICAgIk1p c2NvbXB1dGVkICVzIC8gJXMiLCBudW1iZXJzW2ldLAorCQkJCSAgICBudW1iZXJzW2pdKTsKKwkJ CX0KKwkJfQorCX0KK30KK1RFU1RfRU5ECisKK2ludAorbWFpbih2b2lkKSB7CisJcmV0dXJuIHRl c3Rfbm9fcmVlbnRyYW5jeSgKKwkgICAgdGVzdF9wYXJzZV92YWxpZCwKKwkgICAgdGVzdF9wYXJz ZV9pbnZhbGlkLAorCSAgICB0ZXN0X2luaXRfcGVyY2VudCwKKwkgICAgdGVzdF9hZGRfc2ltcGxl LAorCSAgICB0ZXN0X3N1Yl9zaW1wbGUsCisJICAgIHRlc3RfbXVsX3NpbXBsZSwKKwkgICAgdGVz dF9kaXZfc2ltcGxlLAorCSAgICB0ZXN0X3JvdW5kX3NpbXBsZSwKKwkgICAgdGVzdF9tdWxfZnJh Y19zaW1wbGUsCisJICAgIHRlc3RfcHJpbnRfc2ltcGxlLAorCSAgICB0ZXN0X3N0cmVzcyk7Cit9 CgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVz dC91bml0L2hhc2guYyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rl c3QvdW5pdC9oYXNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDlmMDgy MwotLS0gL2Rldi9udWxsCisrKyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUu My4wL3Rlc3QvdW5pdC9oYXNoLmMKQEAgLTAsMCArMSwxNzMgQEAKKy8qCisgKiBUaGlzIGZpbGUg aXMgYmFzZWQgb24gY29kZSB0aGF0IGlzIHBhcnQgb2YgU01IYXNoZXIKKyAqIChodHRwczovL2Nv ZGUuZ29vZ2xlLmNvbS9wL3NtaGFzaGVyLyksIGFuZCBpcyBzdWJqZWN0IHRvIHRoZSBNSVQgbGlj ZW5zZQorICogKGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2Uu cGhwKS4gIEJvdGggZW1haWwgYWRkcmVzc2VzCisgKiBhc3NvY2lhdGVkIHdpdGggdGhlIHNvdXJj ZSBjb2RlJ3MgcmV2aXNpb24gaGlzdG9yeSBiZWxvbmcgdG8gQXVzdGluIEFwcGxlYnksCisgKiBh bmQgdGhlIHJldmlzaW9uIGhpc3RvcnkgcmFuZ2VzIGZyb20gMjAxMCB0byAyMDEyLiAgVGhlcmVm b3JlIHRoZSBjb3B5cmlnaHQKKyAqIGFuZCBsaWNlbnNlIGFyZSBoZXJlIHRha2VuIHRvIGJlOgor ICoKKyAqIENvcHlyaWdodCAoYykgMjAxMC0yMDEyIEF1c3RpbiBBcHBsZWJ5CisgKgorICogUGVy bWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24g b2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1 bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyAqIGluIHRoZSBTb2Z0 d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRo ZSByaWdodHMKKyAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJp YnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUs IGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlz aGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisg KiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBz aGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9u cyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJ UyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQs IElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB QklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJ TkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBI T0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFC SUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lT RSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09G VFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorICogVEhFIFNPRlRXQVJFLgor ICovCisKKyNpbmNsdWRlICJ0ZXN0L2plbWFsbG9jX3Rlc3QuaCIKKyNpbmNsdWRlICJqZW1hbGxv Yy9pbnRlcm5hbC9oYXNoLmgiCisKK3R5cGVkZWYgZW51bSB7CisJaGFzaF92YXJpYW50X3g4Nl8z MiwKKwloYXNoX3ZhcmlhbnRfeDg2XzEyOCwKKwloYXNoX3ZhcmlhbnRfeDY0XzEyOAorfSBoYXNo X3ZhcmlhbnRfdDsKKworc3RhdGljIGludAoraGFzaF92YXJpYW50X2JpdHMoaGFzaF92YXJpYW50 X3QgdmFyaWFudCkgeworCXN3aXRjaCAodmFyaWFudCkgeworCWNhc2UgaGFzaF92YXJpYW50X3g4 Nl8zMjogcmV0dXJuIDMyOworCWNhc2UgaGFzaF92YXJpYW50X3g4Nl8xMjg6IHJldHVybiAxMjg7 CisJY2FzZSBoYXNoX3ZhcmlhbnRfeDY0XzEyODogcmV0dXJuIDEyODsKKwlkZWZhdWx0OiBub3Rf cmVhY2hlZCgpOworCX0KK30KKworc3RhdGljIGNvbnN0IGNoYXIgKgoraGFzaF92YXJpYW50X3N0 cmluZyhoYXNoX3ZhcmlhbnRfdCB2YXJpYW50KSB7CisJc3dpdGNoICh2YXJpYW50KSB7CisJY2Fz ZSBoYXNoX3ZhcmlhbnRfeDg2XzMyOiByZXR1cm4gImhhc2hfeDg2XzMyIjsKKwljYXNlIGhhc2hf dmFyaWFudF94ODZfMTI4OiByZXR1cm4gImhhc2hfeDg2XzEyOCI7CisJY2FzZSBoYXNoX3Zhcmlh bnRfeDY0XzEyODogcmV0dXJuICJoYXNoX3g2NF8xMjgiOworCWRlZmF1bHQ6IG5vdF9yZWFjaGVk KCk7CisJfQorfQorCisjZGVmaW5lIEtFWV9TSVpFCTI1Ngorc3RhdGljIHZvaWQKK2hhc2hfdmFy aWFudF92ZXJpZnlfa2V5KGhhc2hfdmFyaWFudF90IHZhcmlhbnQsIHVpbnQ4X3QgKmtleSkgewor CWNvbnN0IGludCBoYXNoYnl0ZXMgPSBoYXNoX3ZhcmlhbnRfYml0cyh2YXJpYW50KSAvIDg7CisJ Y29uc3QgaW50IGhhc2hlc19zaXplID0gaGFzaGJ5dGVzICogMjU2OworCVZBUklBQkxFX0FSUkFZ KHVpbnQ4X3QsIGhhc2hlcywgaGFzaGVzX3NpemUpOworCVZBUklBQkxFX0FSUkFZKHVpbnQ4X3Qs IGZpbmFsLCBoYXNoYnl0ZXMpOworCXVuc2lnbmVkIGk7CisJdWludDMyX3QgY29tcHV0ZWQsIGV4 cGVjdGVkOworCisJbWVtc2V0KGtleSwgMCwgS0VZX1NJWkUpOworCW1lbXNldChoYXNoZXMsIDAs IGhhc2hlc19zaXplKTsKKwltZW1zZXQoZmluYWwsIDAsIGhhc2hieXRlcyk7CisKKwkvKgorCSAq IEhhc2gga2V5cyBvZiB0aGUgZm9ybSB7MH0sIHswLDF9LCB7MCwxLDJ9LCAuLi4sIHswLDEsLi4u LDI1NX0gYXMgdGhlCisJICogc2VlZC4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKysp IHsKKwkJa2V5W2ldID0gKHVpbnQ4X3QpaTsKKwkJc3dpdGNoICh2YXJpYW50KSB7CisJCWNhc2Ug aGFzaF92YXJpYW50X3g4Nl8zMjogeworCQkJdWludDMyX3Qgb3V0OworCQkJb3V0ID0gaGFzaF94 ODZfMzIoa2V5LCBpLCAyNTYtaSk7CisJCQltZW1jcHkoJmhhc2hlc1tpKmhhc2hieXRlc10sICZv dXQsIGhhc2hieXRlcyk7CisJCQlicmVhazsKKwkJfSBjYXNlIGhhc2hfdmFyaWFudF94ODZfMTI4 OiB7CisJCQl1aW50NjRfdCBvdXRbMl07CisJCQloYXNoX3g4Nl8xMjgoa2V5LCBpLCAyNTYtaSwg b3V0KTsKKwkJCW1lbWNweSgmaGFzaGVzW2kqaGFzaGJ5dGVzXSwgb3V0LCBoYXNoYnl0ZXMpOwor CQkJYnJlYWs7CisJCX0gY2FzZSBoYXNoX3ZhcmlhbnRfeDY0XzEyODogeworCQkJdWludDY0X3Qg b3V0WzJdOworCQkJaGFzaF94NjRfMTI4KGtleSwgaSwgMjU2LWksIG91dCk7CisJCQltZW1jcHko Jmhhc2hlc1tpKmhhc2hieXRlc10sIG91dCwgaGFzaGJ5dGVzKTsKKwkJCWJyZWFrOworCQl9IGRl ZmF1bHQ6IG5vdF9yZWFjaGVkKCk7CisJCX0KKwl9CisKKwkvKiBIYXNoIHRoZSByZXN1bHQgYXJy YXkuICovCisJc3dpdGNoICh2YXJpYW50KSB7CisJY2FzZSBoYXNoX3ZhcmlhbnRfeDg2XzMyOiB7 CisJCXVpbnQzMl90IG91dCA9IGhhc2hfeDg2XzMyKGhhc2hlcywgaGFzaGVzX3NpemUsIDApOwor CQltZW1jcHkoZmluYWwsICZvdXQsIHNpemVvZihvdXQpKTsKKwkJYnJlYWs7CisJfSBjYXNlIGhh c2hfdmFyaWFudF94ODZfMTI4OiB7CisJCXVpbnQ2NF90IG91dFsyXTsKKwkJaGFzaF94ODZfMTI4 KGhhc2hlcywgaGFzaGVzX3NpemUsIDAsIG91dCk7CisJCW1lbWNweShmaW5hbCwgb3V0LCBzaXpl b2Yob3V0KSk7CisJCWJyZWFrOworCX0gY2FzZSBoYXNoX3ZhcmlhbnRfeDY0XzEyODogeworCQl1 aW50NjRfdCBvdXRbMl07CisJCWhhc2hfeDY0XzEyOChoYXNoZXMsIGhhc2hlc19zaXplLCAwLCBv dXQpOworCQltZW1jcHkoZmluYWwsIG91dCwgc2l6ZW9mKG91dCkpOworCQlicmVhazsKKwl9IGRl ZmF1bHQ6IG5vdF9yZWFjaGVkKCk7CisJfQorCisJY29tcHV0ZWQgPSAoZmluYWxbMF0gPDwgMCkg fCAoZmluYWxbMV0gPDwgOCkgfCAoZmluYWxbMl0gPDwgMTYpIHwKKwkgICAgKGZpbmFsWzNdIDw8 IDI0KTsKKworCXN3aXRjaCAodmFyaWFudCkgeworI2lmZGVmIEpFTUFMTE9DX0JJR19FTkRJQU4K KwljYXNlIGhhc2hfdmFyaWFudF94ODZfMzI6IGV4cGVjdGVkID0gMHg2MjEzMzAzZVU7IGJyZWFr OworCWNhc2UgaGFzaF92YXJpYW50X3g4Nl8xMjg6IGV4cGVjdGVkID0gMHgyNjY4MjBjYVU7IGJy ZWFrOworCWNhc2UgaGFzaF92YXJpYW50X3g2NF8xMjg6IGV4cGVjdGVkID0gMHhjYzYyMmI2ZlU7 IGJyZWFrOworI2Vsc2UKKwljYXNlIGhhc2hfdmFyaWFudF94ODZfMzI6IGV4cGVjdGVkID0gMHhi MGY1N2VlM1U7IGJyZWFrOworCWNhc2UgaGFzaF92YXJpYW50X3g4Nl8xMjg6IGV4cGVjdGVkID0g MHhiM2VjZTYyYVU7IGJyZWFrOworCWNhc2UgaGFzaF92YXJpYW50X3g2NF8xMjg6IGV4cGVjdGVk ID0gMHg2Mzg0YmE2OVU7IGJyZWFrOworI2VuZGlmCisJZGVmYXVsdDogbm90X3JlYWNoZWQoKTsK Kwl9CisKKwlleHBlY3RfdTMyX2VxKGNvbXB1dGVkLCBleHBlY3RlZCwKKwkgICAgIkhhc2ggbWlz bWF0Y2ggZm9yICVzKCk6IGV4cGVjdGVkICUjeCBidXQgZ290ICUjeCIsCisJICAgIGhhc2hfdmFy aWFudF9zdHJpbmcodmFyaWFudCksIGV4cGVjdGVkLCBjb21wdXRlZCk7Cit9CisKK3N0YXRpYyB2 b2lkCitoYXNoX3ZhcmlhbnRfdmVyaWZ5KGhhc2hfdmFyaWFudF90IHZhcmlhbnQpIHsKKyNkZWZp bmUgTUFYX0FMSUdOCTE2CisJdWludDhfdCBrZXlbS0VZX1NJWkUgKyAoTUFYX0FMSUdOIC0gMSld OworCXVuc2lnbmVkIGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX0FMSUdOOyBpKyspIHsKKwkJ aGFzaF92YXJpYW50X3ZlcmlmeV9rZXkodmFyaWFudCwgJmtleVtpXSk7CisJfQorI3VuZGVmIE1B WF9BTElHTgorfQorI3VuZGVmIEtFWV9TSVpFCisKK1RFU1RfQkVHSU4odGVzdF9oYXNoX3g4Nl8z MikgeworCWhhc2hfdmFyaWFudF92ZXJpZnkoaGFzaF92YXJpYW50X3g4Nl8zMik7Cit9CitURVNU X0VORAorCitURVNUX0JFR0lOKHRlc3RfaGFzaF94ODZfMTI4KSB7CisJaGFzaF92YXJpYW50X3Zl cmlmeShoYXNoX3ZhcmlhbnRfeDg2XzEyOCk7Cit9CitURVNUX0VORAorCitURVNUX0JFR0lOKHRl c3RfaGFzaF94NjRfMTI4KSB7CisJaGFzaF92YXJpYW50X3ZlcmlmeShoYXNoX3ZhcmlhbnRfeDY0 XzEyOCk7Cit9CitURVNUX0VORAorCitpbnQKK21haW4odm9pZCkgeworCXJldHVybiB0ZXN0KAor CSAgICB0ZXN0X2hhc2hfeDg2XzMyLAorCSAgICB0ZXN0X2hhc2hfeDg2XzEyOCwKKwkgICAgdGVz dF9oYXNoX3g2NF8xMjgpOworfQoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxk L2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9ob29rLmMgYi8zODktZHMtYmFzZS0zLjMuMC1idWls ZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvaG9vay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAuLjE2YTZmMWIKLS0tIC9kZXYvbnVsbAorKysgYi8zODktZHMtYmFzZS0zLjMu MC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvaG9vay5jCkBAIC0wLDAgKzEsNTg2IEBA CisjaW5jbHVkZSAidGVzdC9qZW1hbGxvY190ZXN0LmgiCisKKyNpbmNsdWRlICJqZW1hbGxvYy9p bnRlcm5hbC9ob29rLmgiCisKK3N0YXRpYyB2b2lkICphcmdfZXh0cmE7CitzdGF0aWMgaW50IGFy Z190eXBlOworc3RhdGljIHZvaWQgKmFyZ19yZXN1bHQ7CitzdGF0aWMgdm9pZCAqYXJnX2FkZHJl c3M7CitzdGF0aWMgc2l6ZV90IGFyZ19vbGRfdXNpemU7CitzdGF0aWMgc2l6ZV90IGFyZ19uZXdf dXNpemU7CitzdGF0aWMgdWludHB0cl90IGFyZ19yZXN1bHRfcmF3Oworc3RhdGljIHVpbnRwdHJf dCBhcmdfYXJnc19yYXdbNF07CisKK3N0YXRpYyBpbnQgY2FsbF9jb3VudCA9IDA7CisKK3N0YXRp YyB2b2lkCityZXNldF9hcmdzKCkgeworCWFyZ19leHRyYSA9IE5VTEw7CisJYXJnX3R5cGUgPSAx MjM0NTsKKwlhcmdfcmVzdWx0ID0gTlVMTDsKKwlhcmdfYWRkcmVzcyA9IE5VTEw7CisJYXJnX29s ZF91c2l6ZSA9IDA7CisJYXJnX25ld191c2l6ZSA9IDA7CisJYXJnX3Jlc3VsdF9yYXcgPSAwOwor CW1lbXNldChhcmdfYXJnc19yYXcsIDc3LCBzaXplb2YoYXJnX2FyZ3NfcmF3KSk7Cit9CisKK3N0 YXRpYyB2b2lkCithbGxvY19mcmVlX3NpemUoc2l6ZV90IHN6KSB7CisJdm9pZCAqcHRyID0gbWFs bG9jeCgxLCAwKTsKKwlmcmVlKHB0cik7CisJcHRyID0gbWFsbG9jeCgxLCAwKTsKKwlmcmVlKHB0 cik7CisJcHRyID0gbWFsbG9jeCgxLCBNQUxMT0NYX1RDQUNIRV9OT05FKTsKKwlkYWxsb2N4KHB0 ciwgTUFMTE9DWF9UQ0FDSEVfTk9ORSk7Cit9CisKKy8qCisgKiBXZSB3YW50IHRvIHN1cHBvcnQg YSBkZWdyZWUgb2YgdXNlciByZWVudHJhbmN5LiAgVGhpcyB0ZXN0cyBhIHZhcmlldHkgb2YKKyAq IGFsbG9jYXRpb24gc2NlbmFyaW9zLgorICovCitzdGF0aWMgdm9pZAorYmVfcmVlbnRyYW50KCkg eworCS8qIExldCdzIG1ha2Ugc3VyZSB0aGUgdGNhY2hlIGlzIG5vbi1lbXB0eSBpZiBlbmFibGVk LiAqLworCWFsbG9jX2ZyZWVfc2l6ZSgxKTsKKwlhbGxvY19mcmVlX3NpemUoMTAyNCk7CisJYWxs b2NfZnJlZV9zaXplKDY0ICogMTAyNCk7CisJYWxsb2NfZnJlZV9zaXplKDI1NiAqIDEwMjQpOwor CWFsbG9jX2ZyZWVfc2l6ZSgxMDI0ICogMTAyNCk7CisKKwkvKiBTb21lIHJlYWxsb2NhdGlvbi4g Ki8KKwl2b2lkICpwdHIgPSBtYWxsb2N4KDEyOSwgMCk7CisJcHRyID0gcmFsbG9jeChwdHIsIDEz MCwgMCk7CisJZnJlZShwdHIpOworCisJcHRyID0gbWFsbG9jeCgyICogMTAyNCAqIDEwMjQsIDAp OworCWZyZWUocHRyKTsKKwlwdHIgPSBtYWxsb2N4KDEgKiAxMDI0ICogMTAyNCwgMCk7CisJcHRy ID0gcmFsbG9jeChwdHIsIDIgKiAxMDI0ICogMTAyNCwgMCk7CisJZnJlZShwdHIpOworCisJcHRy ID0gbWFsbG9jeCgxLCAwKTsKKwlwdHIgPSByYWxsb2N4KHB0ciwgMTAwMCwgMCk7CisJZnJlZShw dHIpOworfQorCitzdGF0aWMgdm9pZAorc2V0X2FyZ3NfcmF3KHVpbnRwdHJfdCAqYXJnc19yYXcs IGludCBuYXJncykgeworCW1lbWNweShhcmdfYXJnc19yYXcsIGFyZ3NfcmF3LCBzaXplb2YodWlu dHB0cl90KSAqIG5hcmdzKTsKK30KKworc3RhdGljIHZvaWQKK2V4cGVjdF9hcmdzX3Jhdyh1aW50 cHRyX3QgKmFyZ3NfcmF3X2V4cGVjdGVkLCBpbnQgbmFyZ3MpIHsKKwlpbnQgY21wID0gbWVtY21w KGFyZ3NfcmF3X2V4cGVjdGVkLCBhcmdfYXJnc19yYXcsCisJICAgIHNpemVvZih1aW50cHRyX3Qp ICogbmFyZ3MpOworCWV4cGVjdF9kX2VxKGNtcCwgMCwgIlJhdyBhcmdzIG1pc21hdGNoIik7Cit9 CisKK3N0YXRpYyB2b2lkCityZXNldCgpIHsKKwljYWxsX2NvdW50ID0gMDsKKwlyZXNldF9hcmdz KCk7Cit9CisKK3N0YXRpYyB2b2lkCit0ZXN0X2FsbG9jX2hvb2sodm9pZCAqZXh0cmEsIGhvb2tf YWxsb2NfdCB0eXBlLCB2b2lkICpyZXN1bHQsCisgICAgdWludHB0cl90IHJlc3VsdF9yYXcsIHVp bnRwdHJfdCBhcmdzX3Jhd1szXSkgeworCWNhbGxfY291bnQrKzsKKwlhcmdfZXh0cmEgPSBleHRy YTsKKwlhcmdfdHlwZSA9IChpbnQpdHlwZTsKKwlhcmdfcmVzdWx0ID0gcmVzdWx0OworCWFyZ19y ZXN1bHRfcmF3ID0gcmVzdWx0X3JhdzsKKwlzZXRfYXJnc19yYXcoYXJnc19yYXcsIDMpOworCWJl X3JlZW50cmFudCgpOworfQorCitzdGF0aWMgdm9pZAordGVzdF9kYWxsb2NfaG9vayh2b2lkICpl eHRyYSwgaG9va19kYWxsb2NfdCB0eXBlLCB2b2lkICphZGRyZXNzLAorICAgIHVpbnRwdHJfdCBh cmdzX3Jhd1szXSkgeworCWNhbGxfY291bnQrKzsKKwlhcmdfZXh0cmEgPSBleHRyYTsKKwlhcmdf dHlwZSA9IChpbnQpdHlwZTsKKwlhcmdfYWRkcmVzcyA9IGFkZHJlc3M7CisJc2V0X2FyZ3NfcmF3 KGFyZ3NfcmF3LCAzKTsKKwliZV9yZWVudHJhbnQoKTsKK30KKworc3RhdGljIHZvaWQKK3Rlc3Rf ZXhwYW5kX2hvb2sodm9pZCAqZXh0cmEsIGhvb2tfZXhwYW5kX3QgdHlwZSwgdm9pZCAqYWRkcmVz cywKKyAgICBzaXplX3Qgb2xkX3VzaXplLCBzaXplX3QgbmV3X3VzaXplLCB1aW50cHRyX3QgcmVz dWx0X3JhdywKKyAgICB1aW50cHRyX3QgYXJnc19yYXdbNF0pIHsKKwljYWxsX2NvdW50Kys7CisJ YXJnX2V4dHJhID0gZXh0cmE7CisJYXJnX3R5cGUgPSAoaW50KXR5cGU7CisJYXJnX2FkZHJlc3Mg PSBhZGRyZXNzOworCWFyZ19vbGRfdXNpemUgPSBvbGRfdXNpemU7CisJYXJnX25ld191c2l6ZSA9 IG5ld191c2l6ZTsKKwlhcmdfcmVzdWx0X3JhdyA9IHJlc3VsdF9yYXc7CisJc2V0X2FyZ3NfcmF3 KGFyZ3NfcmF3LCA0KTsKKwliZV9yZWVudHJhbnQoKTsKK30KKworVEVTVF9CRUdJTih0ZXN0X2hv b2tzX2Jhc2ljKSB7CisJLyogSnVzdCB2ZXJpZnkgdGhhdCB0aGUgcmVjb3JkIHRoZWlyIGFyZ3Vt ZW50cyBjb3JyZWN0bHkuICovCisJaG9va3NfdCBob29rcyA9IHsKKwkJJnRlc3RfYWxsb2NfaG9v aywgJnRlc3RfZGFsbG9jX2hvb2ssICZ0ZXN0X2V4cGFuZF9ob29rLAorCQkodm9pZCAqKTExMX07 CisJdm9pZCAqaGFuZGxlID0gaG9va19pbnN0YWxsKFRTRE5fTlVMTCwgJmhvb2tzKTsKKwl1aW50 cHRyX3QgYXJnc19yYXdbNF0gPSB7MTAsIDIwLCAzMCwgNDB9OworCisJLyogQWxsb2MgKi8KKwly ZXNldF9hcmdzKCk7CisJaG9va19pbnZva2VfYWxsb2MoaG9va19hbGxvY19wb3NpeF9tZW1hbGln biwgKHZvaWQgKikyMjIsIDMzMywKKwkgICAgYXJnc19yYXcpOworCWV4cGVjdF9wdHJfZXEoYXJn X2V4dHJhLCAodm9pZCAqKTExMSwgIlBhc3NlZCB3cm9uZyB1c2VyIHBvaW50ZXIiKTsKKwlleHBl Y3RfZF9lcSgoaW50KWhvb2tfYWxsb2NfcG9zaXhfbWVtYWxpZ24sIGFyZ190eXBlLAorCSAgICAi UGFzc2VkIHdyb25nIGFsbG9jIHR5cGUiKTsKKwlleHBlY3RfcHRyX2VxKCh2b2lkICopMjIyLCBh cmdfcmVzdWx0LCAiUGFzc2VkIHdyb25nIHJlc3VsdCBhZGRyZXNzIik7CisJZXhwZWN0X3U2NF9l cSgzMzMsIGFyZ19yZXN1bHRfcmF3LCAiUGFzc2VkIHdyb25nIHJlc3VsdCIpOworCWV4cGVjdF9h cmdzX3JhdyhhcmdzX3JhdywgMyk7CisKKwkvKiBEYWxsb2MgKi8KKwlyZXNldF9hcmdzKCk7CisJ aG9va19pbnZva2VfZGFsbG9jKGhvb2tfZGFsbG9jX3NkYWxsb2N4LCAodm9pZCAqKTIyMiwgYXJn c19yYXcpOworCWV4cGVjdF9kX2VxKChpbnQpaG9va19kYWxsb2Nfc2RhbGxvY3gsIGFyZ190eXBl LAorCSAgICAiUGFzc2VkIHdyb25nIGRhbGxvYyB0eXBlIik7CisJZXhwZWN0X3B0cl9lcSgodm9p ZCAqKTExMSwgYXJnX2V4dHJhLCAiUGFzc2VkIHdyb25nIHVzZXIgcG9pbnRlciIpOworCWV4cGVj dF9wdHJfZXEoKHZvaWQgKikyMjIsIGFyZ19hZGRyZXNzLCAiUGFzc2VkIHdyb25nIGFkZHJlc3Mi KTsKKwlleHBlY3RfYXJnc19yYXcoYXJnc19yYXcsIDMpOworCisJLyogRXhwYW5kICovCisJcmVz ZXRfYXJncygpOworCWhvb2tfaW52b2tlX2V4cGFuZChob29rX2V4cGFuZF94YWxsb2N4LCAodm9p ZCAqKTIyMiwgMzMzLCA0NDQsIDU1NSwKKwkgICAgYXJnc19yYXcpOworCWV4cGVjdF9kX2VxKChp bnQpaG9va19leHBhbmRfeGFsbG9jeCwgYXJnX3R5cGUsCisJICAgICJQYXNzZWQgd3JvbmcgZXhw YW5kIHR5cGUiKTsKKwlleHBlY3RfcHRyX2VxKCh2b2lkICopMTExLCBhcmdfZXh0cmEsICJQYXNz ZWQgd3JvbmcgdXNlciBwb2ludGVyIik7CisJZXhwZWN0X3B0cl9lcSgodm9pZCAqKTIyMiwgYXJn X2FkZHJlc3MsICJQYXNzZWQgd3JvbmcgYWRkcmVzcyIpOworCWV4cGVjdF96dV9lcSgzMzMsIGFy Z19vbGRfdXNpemUsICJQYXNzZWQgd3Jvbmcgb2xkIHVzaXplIik7CisJZXhwZWN0X3p1X2VxKDQ0 NCwgYXJnX25ld191c2l6ZSwgIlBhc3NlZCB3cm9uZyBuZXcgdXNpemUiKTsKKwlleHBlY3RfenVf ZXEoNTU1LCBhcmdfcmVzdWx0X3JhdywgIlBhc3NlZCB3cm9uZyByZXN1bHQiKTsKKwlleHBlY3Rf YXJnc19yYXcoYXJnc19yYXcsIDQpOworCisJaG9va19yZW1vdmUoVFNETl9OVUxMLCBoYW5kbGUp OworfQorVEVTVF9FTkQKKworVEVTVF9CRUdJTih0ZXN0X2hvb2tzX251bGwpIHsKKwkvKiBOdWxs IGhvb2tzIHNob3VsZCBiZSBpZ25vcmVkLCBub3QgY3Jhc2guICovCisJaG9va3NfdCBob29rczEg PSB7TlVMTCwgTlVMTCwgTlVMTCwgTlVMTH07CisJaG9va3NfdCBob29rczIgPSB7JnRlc3RfYWxs b2NfaG9vaywgTlVMTCwgTlVMTCwgTlVMTH07CisJaG9va3NfdCBob29rczMgPSB7TlVMTCwgJnRl c3RfZGFsbG9jX2hvb2ssIE5VTEwsIE5VTEx9OworCWhvb2tzX3QgaG9va3M0ID0ge05VTEwsIE5V TEwsICZ0ZXN0X2V4cGFuZF9ob29rLCBOVUxMfTsKKworCXZvaWQgKmhhbmRsZTEgPSBob29rX2lu c3RhbGwoVFNETl9OVUxMLCAmaG9va3MxKTsKKwl2b2lkICpoYW5kbGUyID0gaG9va19pbnN0YWxs KFRTRE5fTlVMTCwgJmhvb2tzMik7CisJdm9pZCAqaGFuZGxlMyA9IGhvb2tfaW5zdGFsbChUU0RO X05VTEwsICZob29rczMpOworCXZvaWQgKmhhbmRsZTQgPSBob29rX2luc3RhbGwoVFNETl9OVUxM LCAmaG9va3M0KTsKKworCWV4cGVjdF9wdHJfbmUoaGFuZGxlMSwgTlVMTCwgIkhvb2sgaW5zdGFs bGF0aW9uIGZhaWxlZCIpOworCWV4cGVjdF9wdHJfbmUoaGFuZGxlMiwgTlVMTCwgIkhvb2sgaW5z dGFsbGF0aW9uIGZhaWxlZCIpOworCWV4cGVjdF9wdHJfbmUoaGFuZGxlMywgTlVMTCwgIkhvb2sg aW5zdGFsbGF0aW9uIGZhaWxlZCIpOworCWV4cGVjdF9wdHJfbmUoaGFuZGxlNCwgTlVMTCwgIkhv b2sgaW5zdGFsbGF0aW9uIGZhaWxlZCIpOworCisJdWludHB0cl90IGFyZ3NfcmF3WzRdID0gezEw LCAyMCwgMzAsIDQwfTsKKworCWNhbGxfY291bnQgPSAwOworCWhvb2tfaW52b2tlX2FsbG9jKGhv b2tfYWxsb2NfbWFsbG9jLCBOVUxMLCAwLCBhcmdzX3Jhdyk7CisJZXhwZWN0X2RfZXEoY2FsbF9j b3VudCwgMSwgIkNhbGxlZCB3cm9uZyBudW1iZXIgb2YgdGltZXMiKTsKKworCWNhbGxfY291bnQg PSAwOworCWhvb2tfaW52b2tlX2RhbGxvYyhob29rX2RhbGxvY19mcmVlLCBOVUxMLCBhcmdzX3Jh dyk7CisJZXhwZWN0X2RfZXEoY2FsbF9jb3VudCwgMSwgIkNhbGxlZCB3cm9uZyBudW1iZXIgb2Yg dGltZXMiKTsKKworCWNhbGxfY291bnQgPSAwOworCWhvb2tfaW52b2tlX2V4cGFuZChob29rX2V4 cGFuZF9yZWFsbG9jLCBOVUxMLCAwLCAwLCAwLCBhcmdzX3Jhdyk7CisJZXhwZWN0X2RfZXEoY2Fs bF9jb3VudCwgMSwgIkNhbGxlZCB3cm9uZyBudW1iZXIgb2YgdGltZXMiKTsKKworCWhvb2tfcmVt b3ZlKFRTRE5fTlVMTCwgaGFuZGxlMSk7CisJaG9va19yZW1vdmUoVFNETl9OVUxMLCBoYW5kbGUy KTsKKwlob29rX3JlbW92ZShUU0ROX05VTEwsIGhhbmRsZTMpOworCWhvb2tfcmVtb3ZlKFRTRE5f TlVMTCwgaGFuZGxlNCk7Cit9CitURVNUX0VORAorCitURVNUX0JFR0lOKHRlc3RfaG9va3NfcmVt b3ZlKSB7CisJaG9va3NfdCBob29rcyA9IHsmdGVzdF9hbGxvY19ob29rLCBOVUxMLCBOVUxMLCBO VUxMfTsKKwl2b2lkICpoYW5kbGUgPSBob29rX2luc3RhbGwoVFNETl9OVUxMLCAmaG9va3MpOwor CWV4cGVjdF9wdHJfbmUoaGFuZGxlLCBOVUxMLCAiSG9vayBpbnN0YWxsYXRpb24gZmFpbGVkIik7 CisJY2FsbF9jb3VudCA9IDA7CisJdWludHB0cl90IGFyZ3NfcmF3WzRdID0gezEwLCAyMCwgMzAs IDQwfTsKKwlob29rX2ludm9rZV9hbGxvYyhob29rX2FsbG9jX21hbGxvYywgTlVMTCwgMCwgYXJn c19yYXcpOworCWV4cGVjdF9kX2VxKGNhbGxfY291bnQsIDEsICJIb29rIG5vdCBpbnZva2VkIik7 CisKKwljYWxsX2NvdW50ID0gMDsKKwlob29rX3JlbW92ZShUU0ROX05VTEwsIGhhbmRsZSk7CisJ aG9va19pbnZva2VfYWxsb2MoaG9va19hbGxvY19tYWxsb2MsIE5VTEwsIDAsIE5VTEwpOworCWV4 cGVjdF9kX2VxKGNhbGxfY291bnQsIDAsICJIb29rIGludm9rZWQgYWZ0ZXIgcmVtb3ZhbCIpOwor Cit9CitURVNUX0VORAorCitURVNUX0JFR0lOKHRlc3RfaG9va3NfYWxsb2Nfc2ltcGxlKSB7CisJ LyogIlNpbXBsZSIgaW4gdGhlIHNlbnNlIHRoYXQgd2UncmUgbm90IGluIGEgcmVhbGxvYyB2YXJp YW50LiAqLworCWhvb2tzX3QgaG9va3MgPSB7JnRlc3RfYWxsb2NfaG9vaywgTlVMTCwgTlVMTCwg KHZvaWQgKikxMjN9OworCXZvaWQgKmhhbmRsZSA9IGhvb2tfaW5zdGFsbChUU0ROX05VTEwsICZo b29rcyk7CisJZXhwZWN0X3B0cl9uZShoYW5kbGUsIE5VTEwsICJIb29rIGluc3RhbGxhdGlvbiBm YWlsZWQiKTsKKworCS8qIFN0b3AgbWFsbG9jIGZyb20gYmVpbmcgb3B0aW1pemVkIGF3YXkuICov CisJdm9sYXRpbGUgaW50IGVycjsKKwl2b2lkICp2b2xhdGlsZSBwdHI7CisKKwkvKiBtYWxsb2Mg Ki8KKwlyZXNldCgpOworCXB0ciA9IG1hbGxvYygxKTsKKwlleHBlY3RfZF9lcShjYWxsX2NvdW50 LCAxLCAiSG9vayBub3QgY2FsbGVkIik7CisJZXhwZWN0X3B0cl9lcShhcmdfZXh0cmEsICh2b2lk ICopMTIzLCAiV3JvbmcgZXh0cmEiKTsKKwlleHBlY3RfZF9lcShhcmdfdHlwZSwgKGludClob29r X2FsbG9jX21hbGxvYywgIldyb25nIGhvb2sgdHlwZSIpOworCWV4cGVjdF9wdHJfZXEocHRyLCBh cmdfcmVzdWx0LCAiV3JvbmcgcmVzdWx0Iik7CisJZXhwZWN0X3U2NF9lcSgodWludHB0cl90KXB0 ciwgKHVpbnRwdHJfdClhcmdfcmVzdWx0X3JhdywKKwkgICAgIldyb25nIHJhdyByZXN1bHQiKTsK KwlleHBlY3RfdTY0X2VxKCh1aW50cHRyX3QpMSwgYXJnX2FyZ3NfcmF3WzBdLCAiV3JvbmcgYXJn dW1lbnQiKTsKKwlmcmVlKHB0cik7CisKKwkvKiBwb3NpeF9tZW1hbGlnbiAqLworCXJlc2V0KCk7 CisJZXJyID0gcG9zaXhfbWVtYWxpZ24oKHZvaWQgKiopJnB0ciwgMTAyNCwgMSk7CisJZXhwZWN0 X2RfZXEoY2FsbF9jb3VudCwgMSwgIkhvb2sgbm90IGNhbGxlZCIpOworCWV4cGVjdF9wdHJfZXEo YXJnX2V4dHJhLCAodm9pZCAqKTEyMywgIldyb25nIGV4dHJhIik7CisJZXhwZWN0X2RfZXEoYXJn X3R5cGUsIChpbnQpaG9va19hbGxvY19wb3NpeF9tZW1hbGlnbiwKKwkgICAgIldyb25nIGhvb2sg dHlwZSIpOworCWV4cGVjdF9wdHJfZXEocHRyLCBhcmdfcmVzdWx0LCAiV3JvbmcgcmVzdWx0Iik7 CisJZXhwZWN0X3U2NF9lcSgodWludHB0cl90KWVyciwgKHVpbnRwdHJfdClhcmdfcmVzdWx0X3Jh dywKKwkgICAgIldyb25nIHJhdyByZXN1bHQiKTsKKwlleHBlY3RfdTY0X2VxKCh1aW50cHRyX3Qp JnB0ciwgYXJnX2FyZ3NfcmF3WzBdLCAiV3JvbmcgYXJndW1lbnQiKTsKKwlleHBlY3RfdTY0X2Vx KCh1aW50cHRyX3QpMTAyNCwgYXJnX2FyZ3NfcmF3WzFdLCAiV3JvbmcgYXJndW1lbnQiKTsKKwll eHBlY3RfdTY0X2VxKCh1aW50cHRyX3QpMSwgYXJnX2FyZ3NfcmF3WzJdLCAiV3JvbmcgYXJndW1l bnQiKTsKKwlmcmVlKHB0cik7CisKKwkvKiBhbGlnbmVkX2FsbG9jICovCisJcmVzZXQoKTsKKwlw dHIgPSBhbGlnbmVkX2FsbG9jKDEwMjQsIDEpOworCWV4cGVjdF9kX2VxKGNhbGxfY291bnQsIDEs ICJIb29rIG5vdCBjYWxsZWQiKTsKKwlleHBlY3RfcHRyX2VxKGFyZ19leHRyYSwgKHZvaWQgKikx MjMsICJXcm9uZyBleHRyYSIpOworCWV4cGVjdF9kX2VxKGFyZ190eXBlLCAoaW50KWhvb2tfYWxs b2NfYWxpZ25lZF9hbGxvYywKKwkgICAgIldyb25nIGhvb2sgdHlwZSIpOworCWV4cGVjdF9wdHJf ZXEocHRyLCBhcmdfcmVzdWx0LCAiV3JvbmcgcmVzdWx0Iik7CisJZXhwZWN0X3U2NF9lcSgodWlu dHB0cl90KXB0ciwgKHVpbnRwdHJfdClhcmdfcmVzdWx0X3JhdywKKwkgICAgIldyb25nIHJhdyBy ZXN1bHQiKTsKKwlleHBlY3RfdTY0X2VxKCh1aW50cHRyX3QpMTAyNCwgYXJnX2FyZ3NfcmF3WzBd LCAiV3JvbmcgYXJndW1lbnQiKTsKKwlleHBlY3RfdTY0X2VxKCh1aW50cHRyX3QpMSwgYXJnX2Fy Z3NfcmF3WzFdLCAiV3JvbmcgYXJndW1lbnQiKTsKKwlmcmVlKHB0cik7CisKKwkvKiBjYWxsb2Mg Ki8KKwlyZXNldCgpOworCXB0ciA9IGNhbGxvYygxMSwgMTMpOworCWV4cGVjdF9kX2VxKGNhbGxf Y291bnQsIDEsICJIb29rIG5vdCBjYWxsZWQiKTsKKwlleHBlY3RfcHRyX2VxKGFyZ19leHRyYSwg KHZvaWQgKikxMjMsICJXcm9uZyBleHRyYSIpOworCWV4cGVjdF9kX2VxKGFyZ190eXBlLCAoaW50 KWhvb2tfYWxsb2NfY2FsbG9jLCAiV3JvbmcgaG9vayB0eXBlIik7CisJZXhwZWN0X3B0cl9lcShw dHIsIGFyZ19yZXN1bHQsICJXcm9uZyByZXN1bHQiKTsKKwlleHBlY3RfdTY0X2VxKCh1aW50cHRy X3QpcHRyLCAodWludHB0cl90KWFyZ19yZXN1bHRfcmF3LAorCSAgICAiV3JvbmcgcmF3IHJlc3Vs dCIpOworCWV4cGVjdF91NjRfZXEoKHVpbnRwdHJfdCkxMSwgYXJnX2FyZ3NfcmF3WzBdLCAiV3Jv bmcgYXJndW1lbnQiKTsKKwlleHBlY3RfdTY0X2VxKCh1aW50cHRyX3QpMTMsIGFyZ19hcmdzX3Jh d1sxXSwgIldyb25nIGFyZ3VtZW50Iik7CisJZnJlZShwdHIpOworCisJLyogbWVtYWxpZ24gKi8K KyNpZmRlZiBKRU1BTExPQ19PVkVSUklERV9NRU1BTElHTgorCXJlc2V0KCk7CisJcHRyID0gbWVt YWxpZ24oMTAyNCwgMSk7CisJZXhwZWN0X2RfZXEoY2FsbF9jb3VudCwgMSwgIkhvb2sgbm90IGNh bGxlZCIpOworCWV4cGVjdF9wdHJfZXEoYXJnX2V4dHJhLCAodm9pZCAqKTEyMywgIldyb25nIGV4 dHJhIik7CisJZXhwZWN0X2RfZXEoYXJnX3R5cGUsIChpbnQpaG9va19hbGxvY19tZW1hbGlnbiwg Ildyb25nIGhvb2sgdHlwZSIpOworCWV4cGVjdF9wdHJfZXEocHRyLCBhcmdfcmVzdWx0LCAiV3Jv bmcgcmVzdWx0Iik7CisJZXhwZWN0X3U2NF9lcSgodWludHB0cl90KXB0ciwgKHVpbnRwdHJfdClh cmdfcmVzdWx0X3JhdywKKwkgICAgIldyb25nIHJhdyByZXN1bHQiKTsKKwlleHBlY3RfdTY0X2Vx KCh1aW50cHRyX3QpMTAyNCwgYXJnX2FyZ3NfcmF3WzBdLCAiV3JvbmcgYXJndW1lbnQiKTsKKwll eHBlY3RfdTY0X2VxKCh1aW50cHRyX3QpMSwgYXJnX2FyZ3NfcmF3WzFdLCAiV3JvbmcgYXJndW1l bnQiKTsKKwlmcmVlKHB0cik7CisjZW5kaWYgLyogSkVNQUxMT0NfT1ZFUlJJREVfTUVNQUxJR04g Ki8KKworCS8qIHZhbGxvYyAqLworI2lmZGVmIEpFTUFMTE9DX09WRVJSSURFX1ZBTExPQworCXJl c2V0KCk7CisJcHRyID0gdmFsbG9jKDEpOworCWV4cGVjdF9kX2VxKGNhbGxfY291bnQsIDEsICJI b29rIG5vdCBjYWxsZWQiKTsKKwlleHBlY3RfcHRyX2VxKGFyZ19leHRyYSwgKHZvaWQgKikxMjMs ICJXcm9uZyBleHRyYSIpOworCWV4cGVjdF9kX2VxKGFyZ190eXBlLCAoaW50KWhvb2tfYWxsb2Nf dmFsbG9jLCAiV3JvbmcgaG9vayB0eXBlIik7CisJZXhwZWN0X3B0cl9lcShwdHIsIGFyZ19yZXN1 bHQsICJXcm9uZyByZXN1bHQiKTsKKwlleHBlY3RfdTY0X2VxKCh1aW50cHRyX3QpcHRyLCAodWlu dHB0cl90KWFyZ19yZXN1bHRfcmF3LAorCSAgICAiV3JvbmcgcmF3IHJlc3VsdCIpOworCWV4cGVj dF91NjRfZXEoKHVpbnRwdHJfdCkxLCBhcmdfYXJnc19yYXdbMF0sICJXcm9uZyBhcmd1bWVudCIp OworCWZyZWUocHRyKTsKKyNlbmRpZiAvKiBKRU1BTExPQ19PVkVSUklERV9WQUxMT0MgKi8KKwor CS8qIG1hbGxvY3ggKi8KKwlyZXNldCgpOworCXB0ciA9IG1hbGxvY3goMSwgTUFMTE9DWF9MR19B TElHTigxMCkpOworCWV4cGVjdF9kX2VxKGNhbGxfY291bnQsIDEsICJIb29rIG5vdCBjYWxsZWQi KTsKKwlleHBlY3RfcHRyX2VxKGFyZ19leHRyYSwgKHZvaWQgKikxMjMsICJXcm9uZyBleHRyYSIp OworCWV4cGVjdF9kX2VxKGFyZ190eXBlLCAoaW50KWhvb2tfYWxsb2NfbWFsbG9jeCwgIldyb25n IGhvb2sgdHlwZSIpOworCWV4cGVjdF9wdHJfZXEocHRyLCBhcmdfcmVzdWx0LCAiV3JvbmcgcmVz dWx0Iik7CisJZXhwZWN0X3U2NF9lcSgodWludHB0cl90KXB0ciwgKHVpbnRwdHJfdClhcmdfcmVz dWx0X3JhdywKKwkgICAgIldyb25nIHJhdyByZXN1bHQiKTsKKwlleHBlY3RfdTY0X2VxKCh1aW50 cHRyX3QpMSwgYXJnX2FyZ3NfcmF3WzBdLCAiV3JvbmcgYXJndW1lbnQiKTsKKwlleHBlY3RfdTY0 X2VxKCh1aW50cHRyX3QpTUFMTE9DWF9MR19BTElHTigxMCksIGFyZ19hcmdzX3Jhd1sxXSwKKwkg ICAgIldyb25nIGZsYWdzIik7CisJZnJlZShwdHIpOworCisJaG9va19yZW1vdmUoVFNETl9OVUxM LCBoYW5kbGUpOworfQorVEVTVF9FTkQKKworVEVTVF9CRUdJTih0ZXN0X2hvb2tzX2RhbGxvY19z aW1wbGUpIHsKKwkvKiAiU2ltcGxlIiBpbiB0aGUgc2Vuc2UgdGhhdCB3ZSdyZSBub3QgaW4gYSBy ZWFsbG9jIHZhcmlhbnQuICovCisJaG9va3NfdCBob29rcyA9IHtOVUxMLCAmdGVzdF9kYWxsb2Nf aG9vaywgTlVMTCwgKHZvaWQgKikxMjN9OworCXZvaWQgKmhhbmRsZSA9IGhvb2tfaW5zdGFsbChU U0ROX05VTEwsICZob29rcyk7CisJZXhwZWN0X3B0cl9uZShoYW5kbGUsIE5VTEwsICJIb29rIGlu c3RhbGxhdGlvbiBmYWlsZWQiKTsKKworCXZvaWQgKnZvbGF0aWxlIHB0cjsKKworCS8qIGZyZWUo KSAqLworCXJlc2V0KCk7CisJcHRyID0gbWFsbG9jKDEpOworCWZyZWUocHRyKTsKKwlleHBlY3Rf ZF9lcShjYWxsX2NvdW50LCAxLCAiSG9vayBub3QgY2FsbGVkIik7CisJZXhwZWN0X3B0cl9lcShh cmdfZXh0cmEsICh2b2lkICopMTIzLCAiV3JvbmcgZXh0cmEiKTsKKwlleHBlY3RfZF9lcShhcmdf dHlwZSwgKGludClob29rX2RhbGxvY19mcmVlLCAiV3JvbmcgaG9vayB0eXBlIik7CisJZXhwZWN0 X3B0cl9lcShwdHIsIGFyZ19hZGRyZXNzLCAiV3JvbmcgcG9pbnRlciBmcmVlZCIpOworCWV4cGVj dF91NjRfZXEoKHVpbnRwdHJfdClwdHIsIGFyZ19hcmdzX3Jhd1swXSwgIldyb25nIHJhdyBhcmci KTsKKworCS8qIGRhbGxvY3goKSAqLworCXJlc2V0KCk7CisJcHRyID0gbWFsbG9jKDEpOworCWRh bGxvY3gocHRyLCBNQUxMT0NYX1RDQUNIRV9OT05FKTsKKwlleHBlY3RfZF9lcShjYWxsX2NvdW50 LCAxLCAiSG9vayBub3QgY2FsbGVkIik7CisJZXhwZWN0X3B0cl9lcShhcmdfZXh0cmEsICh2b2lk ICopMTIzLCAiV3JvbmcgZXh0cmEiKTsKKwlleHBlY3RfZF9lcShhcmdfdHlwZSwgKGludClob29r X2RhbGxvY19kYWxsb2N4LCAiV3JvbmcgaG9vayB0eXBlIik7CisJZXhwZWN0X3B0cl9lcShwdHIs IGFyZ19hZGRyZXNzLCAiV3JvbmcgcG9pbnRlciBmcmVlZCIpOworCWV4cGVjdF91NjRfZXEoKHVp bnRwdHJfdClwdHIsIGFyZ19hcmdzX3Jhd1swXSwgIldyb25nIHJhdyBhcmciKTsKKwlleHBlY3Rf dTY0X2VxKCh1aW50cHRyX3QpTUFMTE9DWF9UQ0FDSEVfTk9ORSwgYXJnX2FyZ3NfcmF3WzFdLAor CSAgICAiV3JvbmcgcmF3IGFyZyIpOworCisJLyogc2RhbGxvY3goKSAqLworCXJlc2V0KCk7CisJ cHRyID0gbWFsbG9jKDEpOworCXNkYWxsb2N4KHB0ciwgMSwgTUFMTE9DWF9UQ0FDSEVfTk9ORSk7 CisJZXhwZWN0X2RfZXEoY2FsbF9jb3VudCwgMSwgIkhvb2sgbm90IGNhbGxlZCIpOworCWV4cGVj dF9wdHJfZXEoYXJnX2V4dHJhLCAodm9pZCAqKTEyMywgIldyb25nIGV4dHJhIik7CisJZXhwZWN0 X2RfZXEoYXJnX3R5cGUsIChpbnQpaG9va19kYWxsb2Nfc2RhbGxvY3gsICJXcm9uZyBob29rIHR5 cGUiKTsKKwlleHBlY3RfcHRyX2VxKHB0ciwgYXJnX2FkZHJlc3MsICJXcm9uZyBwb2ludGVyIGZy ZWVkIik7CisJZXhwZWN0X3U2NF9lcSgodWludHB0cl90KXB0ciwgYXJnX2FyZ3NfcmF3WzBdLCAi V3JvbmcgcmF3IGFyZyIpOworCWV4cGVjdF91NjRfZXEoKHVpbnRwdHJfdCkxLCBhcmdfYXJnc19y YXdbMV0sICJXcm9uZyByYXcgYXJnIik7CisJZXhwZWN0X3U2NF9lcSgodWludHB0cl90KU1BTExP Q1hfVENBQ0hFX05PTkUsIGFyZ19hcmdzX3Jhd1syXSwKKwkgICAgIldyb25nIHJhdyBhcmciKTsK KworCWhvb2tfcmVtb3ZlKFRTRE5fTlVMTCwgaGFuZGxlKTsKK30KK1RFU1RfRU5ECisKK1RFU1Rf QkVHSU4odGVzdF9ob29rc19leHBhbmRfc2ltcGxlKSB7CisJLyogIlNpbXBsZSIgaW4gdGhlIHNl bnNlIHRoYXQgd2UncmUgbm90IGluIGEgcmVhbGxvYyB2YXJpYW50LiAqLworCWhvb2tzX3QgaG9v a3MgPSB7TlVMTCwgTlVMTCwgJnRlc3RfZXhwYW5kX2hvb2ssICh2b2lkICopMTIzfTsKKwl2b2lk ICpoYW5kbGUgPSBob29rX2luc3RhbGwoVFNETl9OVUxMLCAmaG9va3MpOworCWV4cGVjdF9wdHJf bmUoaGFuZGxlLCBOVUxMLCAiSG9vayBpbnN0YWxsYXRpb24gZmFpbGVkIik7CisKKwl2b2lkICp2 b2xhdGlsZSBwdHI7CisKKwkvKiB4YWxsb2N4KCkgKi8KKwlyZXNldCgpOworCXB0ciA9IG1hbGxv YygxKTsKKwlzaXplX3QgbmV3X3VzaXplID0geGFsbG9jeChwdHIsIDEwMCwgMjAwLCBNQUxMT0NY X1RDQUNIRV9OT05FKTsKKwlleHBlY3RfZF9lcShjYWxsX2NvdW50LCAxLCAiSG9vayBub3QgY2Fs bGVkIik7CisJZXhwZWN0X3B0cl9lcShhcmdfZXh0cmEsICh2b2lkICopMTIzLCAiV3JvbmcgZXh0 cmEiKTsKKwlleHBlY3RfZF9lcShhcmdfdHlwZSwgKGludClob29rX2V4cGFuZF94YWxsb2N4LCAi V3JvbmcgaG9vayB0eXBlIik7CisJZXhwZWN0X3B0cl9lcShwdHIsIGFyZ19hZGRyZXNzLCAiV3Jv bmcgcG9pbnRlciBleHBhbmRlZCIpOworCWV4cGVjdF91NjRfZXEoYXJnX29sZF91c2l6ZSwgbmFs bG9jeCgxLCAwKSwgIldyb25nIG9sZCB1c2l6ZSIpOworCWV4cGVjdF91NjRfZXEoYXJnX25ld191 c2l6ZSwgc2FsbG9jeChwdHIsIDApLCAiV3JvbmcgbmV3IHVzaXplIik7CisJZXhwZWN0X3U2NF9l cShuZXdfdXNpemUsIGFyZ19yZXN1bHRfcmF3LCAiV3JvbmcgcmVzdWx0Iik7CisJZXhwZWN0X3U2 NF9lcSgodWludHB0cl90KXB0ciwgYXJnX2FyZ3NfcmF3WzBdLCAiV3JvbmcgYXJnIik7CisJZXhw ZWN0X3U2NF9lcSgxMDAsIGFyZ19hcmdzX3Jhd1sxXSwgIldyb25nIGFyZyIpOworCWV4cGVjdF91 NjRfZXEoMjAwLCBhcmdfYXJnc19yYXdbMl0sICJXcm9uZyBhcmciKTsKKwlleHBlY3RfdTY0X2Vx KE1BTExPQ1hfVENBQ0hFX05PTkUsIGFyZ19hcmdzX3Jhd1szXSwgIldyb25nIGFyZyIpOworCisJ aG9va19yZW1vdmUoVFNETl9OVUxMLCBoYW5kbGUpOworfQorVEVTVF9FTkQKKworVEVTVF9CRUdJ Tih0ZXN0X2hvb2tzX3JlYWxsb2NfYXNfbWFsbG9jX29yX2ZyZWUpIHsKKwlob29rc190IGhvb2tz ID0geyZ0ZXN0X2FsbG9jX2hvb2ssICZ0ZXN0X2RhbGxvY19ob29rLAorCQkmdGVzdF9leHBhbmRf aG9vaywgKHZvaWQgKikxMjN9OworCXZvaWQgKmhhbmRsZSA9IGhvb2tfaW5zdGFsbChUU0ROX05V TEwsICZob29rcyk7CisJZXhwZWN0X3B0cl9uZShoYW5kbGUsIE5VTEwsICJIb29rIGluc3RhbGxh dGlvbiBmYWlsZWQiKTsKKworCXZvaWQgKnZvbGF0aWxlIHB0cjsKKworCS8qIHJlYWxsb2MoTlVM TCwgc2l6ZSkgYXMgbWFsbG9jICovCisJcmVzZXQoKTsKKwlwdHIgPSByZWFsbG9jKE5VTEwsIDEp OworCWV4cGVjdF9kX2VxKGNhbGxfY291bnQsIDEsICJIb29rIG5vdCBjYWxsZWQiKTsKKwlleHBl Y3RfcHRyX2VxKGFyZ19leHRyYSwgKHZvaWQgKikxMjMsICJXcm9uZyBleHRyYSIpOworCWV4cGVj dF9kX2VxKGFyZ190eXBlLCAoaW50KWhvb2tfYWxsb2NfcmVhbGxvYywgIldyb25nIGhvb2sgdHlw ZSIpOworCWV4cGVjdF9wdHJfZXEocHRyLCBhcmdfcmVzdWx0LCAiV3JvbmcgcmVzdWx0Iik7CisJ ZXhwZWN0X3U2NF9lcSgodWludHB0cl90KXB0ciwgKHVpbnRwdHJfdClhcmdfcmVzdWx0X3JhdywK KwkgICAgIldyb25nIHJhdyByZXN1bHQiKTsKKwlleHBlY3RfdTY0X2VxKCh1aW50cHRyX3QpTlVM TCwgYXJnX2FyZ3NfcmF3WzBdLCAiV3JvbmcgYXJndW1lbnQiKTsKKwlleHBlY3RfdTY0X2VxKCh1 aW50cHRyX3QpMSwgYXJnX2FyZ3NfcmF3WzFdLCAiV3JvbmcgYXJndW1lbnQiKTsKKwlmcmVlKHB0 cik7CisKKwkvKiByZWFsbG9jKHB0ciwgMCkgYXMgZnJlZSAqLworCWlmIChvcHRfemVyb19yZWFs bG9jX2FjdGlvbiA9PSB6ZXJvX3JlYWxsb2NfYWN0aW9uX2ZyZWUpIHsKKwkJcHRyID0gbWFsbG9j KDEpOworCQlyZXNldCgpOworCQlyZWFsbG9jKHB0ciwgMCk7CisJCWV4cGVjdF9kX2VxKGNhbGxf Y291bnQsIDEsICJIb29rIG5vdCBjYWxsZWQiKTsKKwkJZXhwZWN0X3B0cl9lcShhcmdfZXh0cmEs ICh2b2lkICopMTIzLCAiV3JvbmcgZXh0cmEiKTsKKwkJZXhwZWN0X2RfZXEoYXJnX3R5cGUsIChp bnQpaG9va19kYWxsb2NfcmVhbGxvYywKKwkJICAgICJXcm9uZyBob29rIHR5cGUiKTsKKwkJZXhw ZWN0X3B0cl9lcShwdHIsIGFyZ19hZGRyZXNzLAorCQkgICAgIldyb25nIHBvaW50ZXIgZnJlZWQi KTsKKwkJZXhwZWN0X3U2NF9lcSgodWludHB0cl90KXB0ciwgYXJnX2FyZ3NfcmF3WzBdLAorCQkg ICAgIldyb25nIHJhdyBhcmciKTsKKwkJZXhwZWN0X3U2NF9lcSgodWludHB0cl90KTAsIGFyZ19h cmdzX3Jhd1sxXSwKKwkJICAgICJXcm9uZyByYXcgYXJnIik7CisJfQorCisJLyogcmVhbGxvYyhO VUxMLCAwKSBhcyBtYWxsb2MoMCkgKi8KKwlyZXNldCgpOworCXB0ciA9IHJlYWxsb2MoTlVMTCwg MCk7CisJZXhwZWN0X2RfZXEoY2FsbF9jb3VudCwgMSwgIkhvb2sgbm90IGNhbGxlZCIpOworCWV4 cGVjdF9wdHJfZXEoYXJnX2V4dHJhLCAodm9pZCAqKTEyMywgIldyb25nIGV4dHJhIik7CisJZXhw ZWN0X2RfZXEoYXJnX3R5cGUsIChpbnQpaG9va19hbGxvY19yZWFsbG9jLCAiV3JvbmcgaG9vayB0 eXBlIik7CisJZXhwZWN0X3B0cl9lcShwdHIsIGFyZ19yZXN1bHQsICJXcm9uZyByZXN1bHQiKTsK KwlleHBlY3RfdTY0X2VxKCh1aW50cHRyX3QpcHRyLCAodWludHB0cl90KWFyZ19yZXN1bHRfcmF3 LAorCSAgICAiV3JvbmcgcmF3IHJlc3VsdCIpOworCWV4cGVjdF91NjRfZXEoKHVpbnRwdHJfdClO VUxMLCBhcmdfYXJnc19yYXdbMF0sICJXcm9uZyBhcmd1bWVudCIpOworCWV4cGVjdF91NjRfZXEo KHVpbnRwdHJfdCkwLCBhcmdfYXJnc19yYXdbMV0sICJXcm9uZyBhcmd1bWVudCIpOworCWZyZWUo cHRyKTsKKworCWhvb2tfcmVtb3ZlKFRTRE5fTlVMTCwgaGFuZGxlKTsKK30KK1RFU1RfRU5ECisK K3N0YXRpYyB2b2lkCitkb19yZWFsbG9jX3Rlc3Qodm9pZCAqKCpyYWxsb2MpKHZvaWQgKiwgc2l6 ZV90LCBpbnQpLCBpbnQgZmxhZ3MsCisgICAgaW50IGV4cGFuZF90eXBlLCBpbnQgZGFsbG9jX3R5 cGUpIHsKKwlob29rc190IGhvb2tzID0geyZ0ZXN0X2FsbG9jX2hvb2ssICZ0ZXN0X2RhbGxvY19o b29rLAorCQkmdGVzdF9leHBhbmRfaG9vaywgKHZvaWQgKikxMjN9OworCXZvaWQgKmhhbmRsZSA9 IGhvb2tfaW5zdGFsbChUU0ROX05VTEwsICZob29rcyk7CisJZXhwZWN0X3B0cl9uZShoYW5kbGUs IE5VTEwsICJIb29rIGluc3RhbGxhdGlvbiBmYWlsZWQiKTsKKworCXZvaWQgKnZvbGF0aWxlIHB0 cjsKKwl2b2lkICp2b2xhdGlsZSBwdHIyOworCisJLyogUmVhbGxvYyBpbi1wbGFjZSwgc21hbGwu ICovCisJcHRyID0gbWFsbG9jKDEyOSk7CisJcmVzZXQoKTsKKwlwdHIyID0gcmFsbG9jKHB0ciwg MTMwLCBmbGFncyk7CisJZXhwZWN0X3B0cl9lcShwdHIsIHB0cjIsICJTbWFsbCByZWFsbG9jIG1v dmVkIik7CisKKwlleHBlY3RfZF9lcShjYWxsX2NvdW50LCAxLCAiSG9vayBub3QgY2FsbGVkIik7 CisJZXhwZWN0X3B0cl9lcShhcmdfZXh0cmEsICh2b2lkICopMTIzLCAiV3JvbmcgZXh0cmEiKTsK KwlleHBlY3RfZF9lcShhcmdfdHlwZSwgZXhwYW5kX3R5cGUsICJXcm9uZyBob29rIHR5cGUiKTsK KwlleHBlY3RfcHRyX2VxKHB0ciwgYXJnX2FkZHJlc3MsICJXcm9uZyBhZGRyZXNzIik7CisJZXhw ZWN0X3U2NF9lcSgodWludHB0cl90KXB0ciwgKHVpbnRwdHJfdClhcmdfcmVzdWx0X3JhdywKKwkg ICAgIldyb25nIHJhdyByZXN1bHQiKTsKKwlleHBlY3RfdTY0X2VxKCh1aW50cHRyX3QpcHRyLCBh cmdfYXJnc19yYXdbMF0sICJXcm9uZyBhcmd1bWVudCIpOworCWV4cGVjdF91NjRfZXEoKHVpbnRw dHJfdCkxMzAsIGFyZ19hcmdzX3Jhd1sxXSwgIldyb25nIGFyZ3VtZW50Iik7CisJZnJlZShwdHIp OworCisJLyoKKwkgKiBSZWFsbG9jIGluLXBsYWNlLCBsYXJnZS4gIFNpbmNlIHdlIGNhbid0IGd1 YXJhbnRlZSB0aGUgbGFyZ2UgY2FzZQorCSAqIGFjcm9zcyBhbGwgcGxhdGZvcm1zLCB3ZSBzdGF5 IHJlc2lsaWVudCB0byBtb3ZpbmcgcmVzdWx0cy4KKwkgKi8KKwlwdHIgPSBtYWxsb2MoMiAqIDEw MjQgKiAxMDI0KTsKKwlmcmVlKHB0cik7CisJcHRyMiA9IG1hbGxvYygxICogMTAyNCAqIDEwMjQp OworCXJlc2V0KCk7CisJcHRyID0gcmFsbG9jKHB0cjIsIDIgKiAxMDI0ICogMTAyNCwgZmxhZ3Mp OworCS8qIHB0ciBpcyB0aGUgbmV3IGFkZHJlc3MsIHB0cjIgaXMgdGhlIG9sZCBhZGRyZXNzLiAq LworCWlmIChwdHIgPT0gcHRyMikgeworCQlleHBlY3RfZF9lcShjYWxsX2NvdW50LCAxLCAiSG9v ayBub3QgY2FsbGVkIik7CisJCWV4cGVjdF9kX2VxKGFyZ190eXBlLCBleHBhbmRfdHlwZSwgIldy b25nIGhvb2sgdHlwZSIpOworCX0gZWxzZSB7CisJCWV4cGVjdF9kX2VxKGNhbGxfY291bnQsIDIs ICJXcm9uZyBob29rcyBjYWxsZWQiKTsKKwkJZXhwZWN0X3B0cl9lcShwdHIsIGFyZ19yZXN1bHQs ICJXcm9uZyBhZGRyZXNzIik7CisJCWV4cGVjdF9kX2VxKGFyZ190eXBlLCBkYWxsb2NfdHlwZSwg Ildyb25nIGhvb2sgdHlwZSIpOworCX0KKwlleHBlY3RfcHRyX2VxKGFyZ19leHRyYSwgKHZvaWQg KikxMjMsICJXcm9uZyBleHRyYSIpOworCWV4cGVjdF9wdHJfZXEocHRyMiwgYXJnX2FkZHJlc3Ms ICJXcm9uZyBhZGRyZXNzIik7CisJZXhwZWN0X3U2NF9lcSgodWludHB0cl90KXB0ciwgKHVpbnRw dHJfdClhcmdfcmVzdWx0X3JhdywKKwkgICAgIldyb25nIHJhdyByZXN1bHQiKTsKKwlleHBlY3Rf dTY0X2VxKCh1aW50cHRyX3QpcHRyMiwgYXJnX2FyZ3NfcmF3WzBdLCAiV3JvbmcgYXJndW1lbnQi KTsKKwlleHBlY3RfdTY0X2VxKCh1aW50cHRyX3QpMiAqIDEwMjQgKiAxMDI0LCBhcmdfYXJnc19y YXdbMV0sCisJICAgICJXcm9uZyBhcmd1bWVudCIpOworCWZyZWUocHRyKTsKKworCS8qIFJlYWxs b2Mgd2l0aCBtb3ZlLCBzbWFsbC4gKi8KKwlwdHIgPSBtYWxsb2MoOCk7CisJcmVzZXQoKTsKKwlw dHIyID0gcmFsbG9jKHB0ciwgMTI4LCBmbGFncyk7CisJZXhwZWN0X3B0cl9uZShwdHIsIHB0cjIs ICJTbWFsbCByZWFsbG9jIGRpZG4ndCBtb3ZlIik7CisKKwlleHBlY3RfZF9lcShjYWxsX2NvdW50 LCAyLCAiSG9vayBub3QgY2FsbGVkIik7CisJZXhwZWN0X3B0cl9lcShhcmdfZXh0cmEsICh2b2lk ICopMTIzLCAiV3JvbmcgZXh0cmEiKTsKKwlleHBlY3RfZF9lcShhcmdfdHlwZSwgZGFsbG9jX3R5 cGUsICJXcm9uZyBob29rIHR5cGUiKTsKKwlleHBlY3RfcHRyX2VxKHB0ciwgYXJnX2FkZHJlc3Ms ICJXcm9uZyBhZGRyZXNzIik7CisJZXhwZWN0X3B0cl9lcShwdHIyLCBhcmdfcmVzdWx0LCAiV3Jv bmcgYWRkcmVzcyIpOworCWV4cGVjdF91NjRfZXEoKHVpbnRwdHJfdClwdHIyLCAodWludHB0cl90 KWFyZ19yZXN1bHRfcmF3LAorCSAgICAiV3JvbmcgcmF3IHJlc3VsdCIpOworCWV4cGVjdF91NjRf ZXEoKHVpbnRwdHJfdClwdHIsIGFyZ19hcmdzX3Jhd1swXSwgIldyb25nIGFyZ3VtZW50Iik7CisJ ZXhwZWN0X3U2NF9lcSgodWludHB0cl90KTEyOCwgYXJnX2FyZ3NfcmF3WzFdLCAiV3JvbmcgYXJn dW1lbnQiKTsKKwlmcmVlKHB0cjIpOworCisJLyogUmVhbGxvYyB3aXRoIG1vdmUsIGxhcmdlLiAq LworCXB0ciA9IG1hbGxvYygxKTsKKwlyZXNldCgpOworCXB0cjIgPSByYWxsb2MocHRyLCAyICog MTAyNCAqIDEwMjQsIGZsYWdzKTsKKwlleHBlY3RfcHRyX25lKHB0ciwgcHRyMiwgIkxhcmdlIHJl YWxsb2MgZGlkbid0IG1vdmUiKTsKKworCWV4cGVjdF9kX2VxKGNhbGxfY291bnQsIDIsICJIb29r IG5vdCBjYWxsZWQiKTsKKwlleHBlY3RfcHRyX2VxKGFyZ19leHRyYSwgKHZvaWQgKikxMjMsICJX cm9uZyBleHRyYSIpOworCWV4cGVjdF9kX2VxKGFyZ190eXBlLCBkYWxsb2NfdHlwZSwgIldyb25n IGhvb2sgdHlwZSIpOworCWV4cGVjdF9wdHJfZXEocHRyLCBhcmdfYWRkcmVzcywgIldyb25nIGFk ZHJlc3MiKTsKKwlleHBlY3RfcHRyX2VxKHB0cjIsIGFyZ19yZXN1bHQsICJXcm9uZyBhZGRyZXNz Iik7CisJZXhwZWN0X3U2NF9lcSgodWludHB0cl90KXB0cjIsICh1aW50cHRyX3QpYXJnX3Jlc3Vs dF9yYXcsCisJICAgICJXcm9uZyByYXcgcmVzdWx0Iik7CisJZXhwZWN0X3U2NF9lcSgodWludHB0 cl90KXB0ciwgYXJnX2FyZ3NfcmF3WzBdLCAiV3JvbmcgYXJndW1lbnQiKTsKKwlleHBlY3RfdTY0 X2VxKCh1aW50cHRyX3QpMiAqIDEwMjQgKiAxMDI0LCBhcmdfYXJnc19yYXdbMV0sCisJICAgICJX cm9uZyBhcmd1bWVudCIpOworCWZyZWUocHRyMik7CisKKwlob29rX3JlbW92ZShUU0ROX05VTEws IGhhbmRsZSk7Cit9CisKK3N0YXRpYyB2b2lkICoKK3JlYWxsb2Nfd3JhcHBlcih2b2lkICpwdHIs IHNpemVfdCBzaXplLCBVTlVTRUQgaW50IGZsYWdzKSB7CisJcmV0dXJuIHJlYWxsb2MocHRyLCBz aXplKTsKK30KKworVEVTVF9CRUdJTih0ZXN0X2hvb2tzX3JlYWxsb2MpIHsKKwlkb19yZWFsbG9j X3Rlc3QoJnJlYWxsb2Nfd3JhcHBlciwgMCwgaG9va19leHBhbmRfcmVhbGxvYywKKwkgICAgaG9v a19kYWxsb2NfcmVhbGxvYyk7Cit9CitURVNUX0VORAorCitURVNUX0JFR0lOKHRlc3RfaG9va3Nf cmFsbG9jeCkgeworCWRvX3JlYWxsb2NfdGVzdCgmcmFsbG9jeCwgTUFMTE9DWF9UQ0FDSEVfTk9O RSwgaG9va19leHBhbmRfcmFsbG9jeCwKKwkgICAgaG9va19kYWxsb2NfcmFsbG9jeCk7Cit9CitU RVNUX0VORAorCitpbnQKK21haW4odm9pZCkgeworCS8qIFdlIGFzc2VydCBvbiBjYWxsIGNvdW50 cy4gKi8KKwlyZXR1cm4gdGVzdF9ub19yZWVudHJhbmN5KAorCSAgICB0ZXN0X2hvb2tzX2Jhc2lj LAorCSAgICB0ZXN0X2hvb2tzX251bGwsCisJICAgIHRlc3RfaG9va3NfcmVtb3ZlLAorCSAgICB0 ZXN0X2hvb2tzX2FsbG9jX3NpbXBsZSwKKwkgICAgdGVzdF9ob29rc19kYWxsb2Nfc2ltcGxlLAor CSAgICB0ZXN0X2hvb2tzX2V4cGFuZF9zaW1wbGUsCisJICAgIHRlc3RfaG9va3NfcmVhbGxvY19h c19tYWxsb2Nfb3JfZnJlZSwKKwkgICAgdGVzdF9ob29rc19yZWFsbG9jLAorCSAgICB0ZXN0X2hv b2tzX3JhbGxvY3gpOworfQoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2pl bWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9ocGEuYyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2pl bWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9ocGEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwLi5kZmQ1N2YzCi0tLSAvZGV2L251bGwKKysrIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVp bGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L2hwYS5jCkBAIC0wLDAgKzEsNDU5IEBACisjaW5j bHVkZSAidGVzdC9qZW1hbGxvY190ZXN0LmgiCisKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5h bC9ocGEuaCIKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9uc3RpbWUuaCIKKworI2RlZmlu ZSBTSEFSRF9JTkQgMTExCisKKyNkZWZpbmUgQUxMT0NfTUFYIChIVUdFUEFHRSAvIDQpCisKK3R5 cGVkZWYgc3RydWN0IHRlc3RfZGF0YV9zIHRlc3RfZGF0YV90Oworc3RydWN0IHRlc3RfZGF0YV9z IHsKKwkvKgorCSAqIE11c3QgYmUgdGhlIGZpcnN0IG1lbWJlciAtLSB3ZSBjb252ZXJ0IGJhY2sg YW5kIGZvcnRoIGJldHdlZW4gdGhlCisJICogdGVzdF9kYXRhX3QgYW5kIHRoZSBocGFfc2hhcmRf dDsKKwkgKi8KKwlocGFfc2hhcmRfdCBzaGFyZDsKKwlocGFfY2VudHJhbF90IGNlbnRyYWw7CisJ YmFzZV90ICpiYXNlOworCWVkYXRhX2NhY2hlX3Qgc2hhcmRfZWRhdGFfY2FjaGU7CisKKwllbWFw X3QgZW1hcDsKK307CisKK3N0YXRpYyBocGFfc2hhcmRfb3B0c190IHRlc3RfaHBhX3NoYXJkX29w dHNfZGVmYXVsdCA9IHsKKwkvKiBzbGFiX21heF9hbGxvYyAqLworCUFMTE9DX01BWCwKKwkvKiBo dWdpZmljYXRpb24gdGhyZXNob2xkICovCisJSFVHRVBBR0UsCisJLyogZGlydHlfbXVsdCAqLwor CUZYUF9JTklUX1BFUkNFTlQoMjUpLAorCS8qIGRlZmVycmFsX2FsbG93ZWQgKi8KKwlmYWxzZSwK KwkvKiBodWdpZnlfZGVsYXlfbXMgKi8KKwkxMCAqIDEwMDAsCit9OworCitzdGF0aWMgaHBhX3No YXJkX3QgKgorY3JlYXRlX3Rlc3RfZGF0YShocGFfaG9va3NfdCAqaG9va3MsIGhwYV9zaGFyZF9v cHRzX3QgKm9wdHMpIHsKKwlib29sIGVycjsKKwliYXNlX3QgKmJhc2UgPSBiYXNlX25ldyhUU0RO X05VTEwsIC8qIGluZCAqLyBTSEFSRF9JTkQsCisJICAgICZlaG9va3NfZGVmYXVsdF9leHRlbnRf aG9va3MsIC8qIG1ldGFkYXRhX3VzZV9ob29rcyAqLyB0cnVlKTsKKwlhc3NlcnRfcHRyX25vdF9u dWxsKGJhc2UsICIiKTsKKworCXRlc3RfZGF0YV90ICp0ZXN0X2RhdGEgPSBtYWxsb2Moc2l6ZW9m KHRlc3RfZGF0YV90KSk7CisJYXNzZXJ0X3B0cl9ub3RfbnVsbCh0ZXN0X2RhdGEsICIiKTsKKwor CXRlc3RfZGF0YS0+YmFzZSA9IGJhc2U7CisKKwllcnIgPSBlZGF0YV9jYWNoZV9pbml0KCZ0ZXN0 X2RhdGEtPnNoYXJkX2VkYXRhX2NhY2hlLCBiYXNlKTsKKwlhc3NlcnRfZmFsc2UoZXJyLCAiIik7 CisKKwllcnIgPSBlbWFwX2luaXQoJnRlc3RfZGF0YS0+ZW1hcCwgdGVzdF9kYXRhLT5iYXNlLCAv KiB6ZXJvZWQgKi8gZmFsc2UpOworCWFzc2VydF9mYWxzZShlcnIsICIiKTsKKworCWVyciA9IGhw YV9jZW50cmFsX2luaXQoJnRlc3RfZGF0YS0+Y2VudHJhbCwgdGVzdF9kYXRhLT5iYXNlLCBob29r cyk7CisJYXNzZXJ0X2ZhbHNlKGVyciwgIiIpOworCisJZXJyID0gaHBhX3NoYXJkX2luaXQoJnRl c3RfZGF0YS0+c2hhcmQsICZ0ZXN0X2RhdGEtPmNlbnRyYWwsCisJICAgICZ0ZXN0X2RhdGEtPmVt YXAsIHRlc3RfZGF0YS0+YmFzZSwgJnRlc3RfZGF0YS0+c2hhcmRfZWRhdGFfY2FjaGUsCisJICAg IFNIQVJEX0lORCwgb3B0cyk7CisJYXNzZXJ0X2ZhbHNlKGVyciwgIiIpOworCisJcmV0dXJuICho cGFfc2hhcmRfdCAqKXRlc3RfZGF0YTsKK30KKworc3RhdGljIHZvaWQKK2Rlc3Ryb3lfdGVzdF9k YXRhKGhwYV9zaGFyZF90ICpzaGFyZCkgeworCXRlc3RfZGF0YV90ICp0ZXN0X2RhdGEgPSAodGVz dF9kYXRhX3QgKilzaGFyZDsKKwliYXNlX2RlbGV0ZShUU0ROX05VTEwsIHRlc3RfZGF0YS0+YmFz ZSk7CisJZnJlZSh0ZXN0X2RhdGEpOworfQorCitURVNUX0JFR0lOKHRlc3RfYWxsb2NfbWF4KSB7 CisJdGVzdF9za2lwX2lmKCFocGFfc3VwcG9ydGVkKCkpOworCisJaHBhX3NoYXJkX3QgKnNoYXJk ID0gY3JlYXRlX3Rlc3RfZGF0YSgmaHBhX2hvb2tzX2RlZmF1bHQsCisJICAgICZ0ZXN0X2hwYV9z aGFyZF9vcHRzX2RlZmF1bHQpOworCXRzZG5fdCAqdHNkbiA9IHRzZF90c2RuKHRzZF9mZXRjaCgp KTsKKworCWVkYXRhX3QgKmVkYXRhOworCisJLyogU21hbGwgbWF4ICovCisJYm9vbCBkZWZlcnJl ZF93b3JrX2dlbmVyYXRlZCA9IGZhbHNlOworCWVkYXRhID0gcGFpX2FsbG9jKHRzZG4sICZzaGFy ZC0+cGFpLCBBTExPQ19NQVgsIFBBR0UsIGZhbHNlLCBmYWxzZSwKKwkgICAgZmFsc2UsICZkZWZl cnJlZF93b3JrX2dlbmVyYXRlZCk7CisJZXhwZWN0X3B0cl9ub3RfbnVsbChlZGF0YSwgIkFsbG9j YXRpb24gb2Ygc21hbGwgbWF4IGZhaWxlZCIpOworCWVkYXRhID0gcGFpX2FsbG9jKHRzZG4sICZz aGFyZC0+cGFpLCBBTExPQ19NQVggKyBQQUdFLCBQQUdFLCBmYWxzZSwKKwkgICAgZmFsc2UsIGZh bHNlLCAmZGVmZXJyZWRfd29ya19nZW5lcmF0ZWQpOworCWV4cGVjdF9wdHJfbnVsbChlZGF0YSwg IkFsbG9jYXRpb24gb2YgbGFyZ2VyIHRoYW4gc21hbGwgbWF4IHN1Y2NlZWRlZCIpOworCisJZGVz dHJveV90ZXN0X2RhdGEoc2hhcmQpOworfQorVEVTVF9FTkQKKwordHlwZWRlZiBzdHJ1Y3QgbWVt X2NvbnRlbnRzX3MgbWVtX2NvbnRlbnRzX3Q7CitzdHJ1Y3QgbWVtX2NvbnRlbnRzX3MgeworCXVp bnRwdHJfdCBteV9hZGRyOworCXNpemVfdCBzaXplOworCWVkYXRhX3QgKm15X2VkYXRhOworCXJi X25vZGUobWVtX2NvbnRlbnRzX3QpIGxpbms7Cit9OworCitzdGF0aWMgaW50CittZW1fY29udGVu dHNfY21wKGNvbnN0IG1lbV9jb250ZW50c190ICphLCBjb25zdCBtZW1fY29udGVudHNfdCAqYikg eworCXJldHVybiAoYS0+bXlfYWRkciA+IGItPm15X2FkZHIpIC0gKGEtPm15X2FkZHIgPCBiLT5t eV9hZGRyKTsKK30KKwordHlwZWRlZiByYl90cmVlKG1lbV9jb250ZW50c190KSBtZW1fdHJlZV90 OworcmJfZ2VuKHN0YXRpYywgbWVtX3RyZWVfLCBtZW1fdHJlZV90LCBtZW1fY29udGVudHNfdCwg bGluaywKKyAgICBtZW1fY29udGVudHNfY21wKTsKKworc3RhdGljIHZvaWQKK25vZGVfYXNzZXJ0 X29yZGVyZWQobWVtX2NvbnRlbnRzX3QgKmEsIG1lbV9jb250ZW50c190ICpiKSB7CisJYXNzZXJ0 X3p1X2x0KGEtPm15X2FkZHIsIGEtPm15X2FkZHIgKyBhLT5zaXplLCAiT3ZlcmZsb3ciKTsKKwlh c3NlcnRfenVfbGUoYS0+bXlfYWRkciArIGEtPnNpemUsIGItPm15X2FkZHIsICIiKTsKK30KKwor c3RhdGljIHZvaWQKK25vZGVfY2hlY2sobWVtX3RyZWVfdCAqdHJlZSwgbWVtX2NvbnRlbnRzX3Qg KmNvbnRlbnRzKSB7CisJZWRhdGFfdCAqZWRhdGEgPSBjb250ZW50cy0+bXlfZWRhdGE7CisJYXNz ZXJ0X3B0cl9lcShjb250ZW50cywgKHZvaWQgKiljb250ZW50cy0+bXlfYWRkciwgIiIpOworCWFz c2VydF9wdHJfZXEoY29udGVudHMsIGVkYXRhX2Jhc2VfZ2V0KGVkYXRhKSwgIiIpOworCWFzc2Vy dF96dV9lcShjb250ZW50cy0+c2l6ZSwgZWRhdGFfc2l6ZV9nZXQoZWRhdGEpLCAiIik7CisJYXNz ZXJ0X3B0cl9lcShjb250ZW50cy0+bXlfZWRhdGEsIGVkYXRhLCAiIik7CisKKwltZW1fY29udGVu dHNfdCAqbmV4dCA9IG1lbV90cmVlX25leHQodHJlZSwgY29udGVudHMpOworCWlmIChuZXh0ICE9 IE5VTEwpIHsKKwkJbm9kZV9hc3NlcnRfb3JkZXJlZChjb250ZW50cywgbmV4dCk7CisJfQorCW1l bV9jb250ZW50c190ICpwcmV2ID0gbWVtX3RyZWVfcHJldih0cmVlLCBjb250ZW50cyk7CisJaWYg KHByZXYgIT0gTlVMTCkgeworCQlub2RlX2Fzc2VydF9vcmRlcmVkKHByZXYsIGNvbnRlbnRzKTsK Kwl9Cit9CisKK3N0YXRpYyB2b2lkCitub2RlX2luc2VydChtZW1fdHJlZV90ICp0cmVlLCBlZGF0 YV90ICplZGF0YSwgc2l6ZV90IG5wYWdlcykgeworCW1lbV9jb250ZW50c190ICpjb250ZW50cyA9 IChtZW1fY29udGVudHNfdCAqKWVkYXRhX2Jhc2VfZ2V0KGVkYXRhKTsKKwljb250ZW50cy0+bXlf YWRkciA9ICh1aW50cHRyX3QpZWRhdGFfYmFzZV9nZXQoZWRhdGEpOworCWNvbnRlbnRzLT5zaXpl ID0gZWRhdGFfc2l6ZV9nZXQoZWRhdGEpOworCWNvbnRlbnRzLT5teV9lZGF0YSA9IGVkYXRhOwor CW1lbV90cmVlX2luc2VydCh0cmVlLCBjb250ZW50cyk7CisJbm9kZV9jaGVjayh0cmVlLCBjb250 ZW50cyk7Cit9CisKK3N0YXRpYyB2b2lkCitub2RlX3JlbW92ZShtZW1fdHJlZV90ICp0cmVlLCBl ZGF0YV90ICplZGF0YSkgeworCW1lbV9jb250ZW50c190ICpjb250ZW50cyA9IChtZW1fY29udGVu dHNfdCAqKWVkYXRhX2Jhc2VfZ2V0KGVkYXRhKTsKKwlub2RlX2NoZWNrKHRyZWUsIGNvbnRlbnRz KTsKKwltZW1fdHJlZV9yZW1vdmUodHJlZSwgY29udGVudHMpOworfQorCitURVNUX0JFR0lOKHRl c3Rfc3RyZXNzKSB7CisJdGVzdF9za2lwX2lmKCFocGFfc3VwcG9ydGVkKCkpOworCisJaHBhX3No YXJkX3QgKnNoYXJkID0gY3JlYXRlX3Rlc3RfZGF0YSgmaHBhX2hvb2tzX2RlZmF1bHQsCisJICAg ICZ0ZXN0X2hwYV9zaGFyZF9vcHRzX2RlZmF1bHQpOworCisJdHNkbl90ICp0c2RuID0gdHNkX3Rz ZG4odHNkX2ZldGNoKCkpOworCisJY29uc3Qgc2l6ZV90IG5saXZlX2VkYXRhc19tYXggPSA1MDA7 CisJc2l6ZV90IG5saXZlX2VkYXRhcyA9IDA7CisJZWRhdGFfdCAqKmxpdmVfZWRhdGFzID0gY2Fs bG9jKG5saXZlX2VkYXRhc19tYXgsIHNpemVvZihlZGF0YV90ICopKTsKKwkvKgorCSAqIE5vdGhp bmcgc3BlY2lhbCBhYm91dCB0aGlzIGNvbnN0YW50OyB3ZSdyZSBvbmx5IGZpeGluZyBpdCBmb3IK KwkgKiBjb25zaXN0ZW5jeSBhY3Jvc3MgcnVucy4KKwkgKi8KKwlzaXplX3QgcHJuZ19zdGF0ZSA9 IChzaXplX3QpMHg3Njk5OWZmYjAxNGRmMDdjOworCisJbWVtX3RyZWVfdCB0cmVlOworCW1lbV90 cmVlX25ldygmdHJlZSk7CisKKwlib29sIGRlZmVycmVkX3dvcmtfZ2VuZXJhdGVkID0gZmFsc2U7 CisKKwlmb3IgKHNpemVfdCBpID0gMDsgaSA8IDEwMCAqIDEwMDA7IGkrKykgeworCQlzaXplX3Qg b3BlcmF0aW9uID0gcHJuZ19yYW5nZV96dSgmcHJuZ19zdGF0ZSwgMik7CisJCWlmIChvcGVyYXRp b24gPT0gMCkgeworCQkJLyogQWxsb2MgKi8KKwkJCWlmIChubGl2ZV9lZGF0YXMgPT0gbmxpdmVf ZWRhdGFzX21heCkgeworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQkvKgorCQkJICogV2UgbWFr ZSBzdXJlIHRvIGdldCBhbiBldmVuIGJhbGFuY2Ugb2Ygc21hbGwgYW5kCisJCQkgKiBsYXJnZSBh bGxvY2F0aW9ucy4KKwkJCSAqLworCQkJc2l6ZV90IG5wYWdlc19taW4gPSAxOworCQkJc2l6ZV90 IG5wYWdlc19tYXggPSBBTExPQ19NQVggLyBQQUdFOworCQkJc2l6ZV90IG5wYWdlcyA9IG5wYWdl c19taW4gKyBwcm5nX3JhbmdlX3p1KCZwcm5nX3N0YXRlLAorCQkJICAgIG5wYWdlc19tYXggLSBu cGFnZXNfbWluKTsKKwkJCWVkYXRhX3QgKmVkYXRhID0gcGFpX2FsbG9jKHRzZG4sICZzaGFyZC0+ cGFpLAorCQkJICAgIG5wYWdlcyAqIFBBR0UsIFBBR0UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsCisJ CQkgICAgJmRlZmVycmVkX3dvcmtfZ2VuZXJhdGVkKTsKKwkJCWFzc2VydF9wdHJfbm90X251bGwo ZWRhdGEsCisJCQkgICAgIlVuZXhwZWN0ZWQgYWxsb2NhdGlvbiBmYWlsdXJlIik7CisJCQlsaXZl X2VkYXRhc1tubGl2ZV9lZGF0YXNdID0gZWRhdGE7CisJCQlubGl2ZV9lZGF0YXMrKzsKKwkJCW5v ZGVfaW5zZXJ0KCZ0cmVlLCBlZGF0YSwgbnBhZ2VzKTsKKwkJfSBlbHNlIHsKKwkJCS8qIEZyZWUu ICovCisJCQlpZiAobmxpdmVfZWRhdGFzID09IDApIHsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJ CXNpemVfdCB2aWN0aW0gPSBwcm5nX3JhbmdlX3p1KCZwcm5nX3N0YXRlLCBubGl2ZV9lZGF0YXMp OworCQkJZWRhdGFfdCAqdG9fZnJlZSA9IGxpdmVfZWRhdGFzW3ZpY3RpbV07CisJCQlsaXZlX2Vk YXRhc1t2aWN0aW1dID0gbGl2ZV9lZGF0YXNbbmxpdmVfZWRhdGFzIC0gMV07CisJCQlubGl2ZV9l ZGF0YXMtLTsKKwkJCW5vZGVfcmVtb3ZlKCZ0cmVlLCB0b19mcmVlKTsKKwkJCXBhaV9kYWxsb2Mo dHNkbiwgJnNoYXJkLT5wYWksIHRvX2ZyZWUsCisJCQkgICAgJmRlZmVycmVkX3dvcmtfZ2VuZXJh dGVkKTsKKwkJfQorCX0KKworCXNpemVfdCBudHJlZW5vZGVzID0gMDsKKwlmb3IgKG1lbV9jb250 ZW50c190ICpjb250ZW50cyA9IG1lbV90cmVlX2ZpcnN0KCZ0cmVlKTsgY29udGVudHMgIT0gTlVM TDsKKwkgICAgY29udGVudHMgPSBtZW1fdHJlZV9uZXh0KCZ0cmVlLCBjb250ZW50cykpIHsKKwkJ bnRyZWVub2RlcysrOworCQlub2RlX2NoZWNrKCZ0cmVlLCBjb250ZW50cyk7CisJfQorCWV4cGVj dF96dV9lcShudHJlZW5vZGVzLCBubGl2ZV9lZGF0YXMsICIiKTsKKworCS8qCisJICogVGVzdCBo cGFfc2hhcmRfZGVzdHJveSwgd2hpY2ggcmVxdWlyZXMgYXMgYSBwcmVjb25kaXRpb24gdGhhdCBh bGwgaXRzCisJICogZXh0ZW50cyBoYXZlIGJlZW4gZGVhbGxvY2F0ZWQuCisJICovCisJZm9yIChz aXplX3QgaSA9IDA7IGkgPCBubGl2ZV9lZGF0YXM7IGkrKykgeworCQllZGF0YV90ICp0b19mcmVl ID0gbGl2ZV9lZGF0YXNbaV07CisJCW5vZGVfcmVtb3ZlKCZ0cmVlLCB0b19mcmVlKTsKKwkJcGFp X2RhbGxvYyh0c2RuLCAmc2hhcmQtPnBhaSwgdG9fZnJlZSwKKwkJICAgICZkZWZlcnJlZF93b3Jr X2dlbmVyYXRlZCk7CisJfQorCWhwYV9zaGFyZF9kZXN0cm95KHRzZG4sIHNoYXJkKTsKKworCWZy ZWUobGl2ZV9lZGF0YXMpOworCWRlc3Ryb3lfdGVzdF9kYXRhKHNoYXJkKTsKK30KK1RFU1RfRU5E CisKK3N0YXRpYyB2b2lkCitleHBlY3RfY29udGlndW91cyhlZGF0YV90ICoqZWRhdGFzLCBzaXpl X3QgbmVkYXRhcykgeworCWZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbmVkYXRhczsgaSsrKSB7CisJ CXNpemVfdCBleHBlY3RlZCA9IChzaXplX3QpZWRhdGFfYmFzZV9nZXQoZWRhdGFzWzBdKQorCQkg ICAgKyBpICogUEFHRTsKKwkJZXhwZWN0X3p1X2VxKGV4cGVjdGVkLCAoc2l6ZV90KWVkYXRhX2Jh c2VfZ2V0KGVkYXRhc1tpXSksCisJCSAgICAiTWlzbWF0Y2ggYXQgaW5kZXggJXp1IiwgaSk7CisJ fQorfQorCitURVNUX0JFR0lOKHRlc3RfYWxsb2NfZGFsbG9jX2JhdGNoKSB7CisJdGVzdF9za2lw X2lmKCFocGFfc3VwcG9ydGVkKCkpOworCisJaHBhX3NoYXJkX3QgKnNoYXJkID0gY3JlYXRlX3Rl c3RfZGF0YSgmaHBhX2hvb2tzX2RlZmF1bHQsCisJICAgICZ0ZXN0X2hwYV9zaGFyZF9vcHRzX2Rl ZmF1bHQpOworCXRzZG5fdCAqdHNkbiA9IHRzZF90c2RuKHRzZF9mZXRjaCgpKTsKKworCWJvb2wg ZGVmZXJyZWRfd29ya19nZW5lcmF0ZWQgPSBmYWxzZTsKKworCWVudW0ge05BTExPQ1MgPSA4fTsK KworCWVkYXRhX3QgKmFsbG9jc1tOQUxMT0NTXTsKKwkvKgorCSAqIEFsbG9jYXRlIGEgbWl4IG9m IHdheXM7IGZpcnN0IGhhbGYgZnJvbSByZWd1bGFyIGFsbG9jLCBzZWNvbmQgaGFsZgorCSAqIGZy b20gYWxsb2NfYmF0Y2guCisJICovCisJZm9yIChzaXplX3QgaSA9IDA7IGkgPCBOQUxMT0NTIC8g MjsgaSsrKSB7CisJCWFsbG9jc1tpXSA9IHBhaV9hbGxvYyh0c2RuLCAmc2hhcmQtPnBhaSwgUEFH RSwgUEFHRSwKKwkJICAgIC8qIHplcm8gKi8gZmFsc2UsIC8qIGd1YXJkZWQgKi8gZmFsc2UsCisJ CSAgICAvKiBmcmVxdWVudF9yZXVzZSAqLyBmYWxzZSwgJmRlZmVycmVkX3dvcmtfZ2VuZXJhdGVk KTsKKwkJZXhwZWN0X3B0cl9ub3RfbnVsbChhbGxvY3NbaV0sICJVbmV4cGVjdGVkIGFsbG9jIGZh aWx1cmUiKTsKKwl9CisJZWRhdGFfbGlzdF9hY3RpdmVfdCBhbGxvY3NfbGlzdDsKKwllZGF0YV9s aXN0X2FjdGl2ZV9pbml0KCZhbGxvY3NfbGlzdCk7CisJc2l6ZV90IG5zdWNjZXNzID0gcGFpX2Fs bG9jX2JhdGNoKHRzZG4sICZzaGFyZC0+cGFpLCBQQUdFLCBOQUxMT0NTIC8gMiwKKwkgICAgJmFs bG9jc19saXN0LCAmZGVmZXJyZWRfd29ya19nZW5lcmF0ZWQpOworCWV4cGVjdF96dV9lcShOQUxM T0NTIC8gMiwgbnN1Y2Nlc3MsICJVbmV4cGVjdGVkIG9vbSIpOworCWZvciAoc2l6ZV90IGkgPSBO QUxMT0NTIC8gMjsgaSA8IE5BTExPQ1M7IGkrKykgeworCQlhbGxvY3NbaV0gPSBlZGF0YV9saXN0 X2FjdGl2ZV9maXJzdCgmYWxsb2NzX2xpc3QpOworCQllZGF0YV9saXN0X2FjdGl2ZV9yZW1vdmUo JmFsbG9jc19saXN0LCBhbGxvY3NbaV0pOworCX0KKworCS8qCisJICogU2hvdWxkIGhhdmUgYWxs b2NhdGVkIHRoZW0gY29udGlndW91c2x5LCBkZXNwaXRlIHRoZSBkaWZmZXJpbmcKKwkgKiBtZXRo b2RzIHVzZWQuCisJICovCisJdm9pZCAqb3JpZ19iYXNlID0gZWRhdGFfYmFzZV9nZXQoYWxsb2Nz WzBdKTsKKwlleHBlY3RfY29udGlndW91cyhhbGxvY3MsIE5BTExPQ1MpOworCisJLyoKKwkgKiBC YXRjaCBkYWxsb2MgdGhlIGZpcnN0IGhhbGYsIGluZGl2aWR1YWxseSBkZWFsbG9jYXRlIHRoZSBz ZWNvbmQgaGFsZi4KKwkgKi8KKwlmb3IgKHNpemVfdCBpID0gMDsgaSA8IE5BTExPQ1MgLyAyOyBp KyspIHsKKwkJZWRhdGFfbGlzdF9hY3RpdmVfYXBwZW5kKCZhbGxvY3NfbGlzdCwgYWxsb2NzW2ld KTsKKwl9CisJcGFpX2RhbGxvY19iYXRjaCh0c2RuLCAmc2hhcmQtPnBhaSwgJmFsbG9jc19saXN0 LAorCSAgICAmZGVmZXJyZWRfd29ya19nZW5lcmF0ZWQpOworCWZvciAoc2l6ZV90IGkgPSBOQUxM T0NTIC8gMjsgaSA8IE5BTExPQ1M7IGkrKykgeworCQlwYWlfZGFsbG9jKHRzZG4sICZzaGFyZC0+ cGFpLCBhbGxvY3NbaV0sCisJCSAgICAmZGVmZXJyZWRfd29ya19nZW5lcmF0ZWQpOworCX0KKwor CS8qIFJlYWxsb2NhdGUgKGluZGl2aWR1YWxseSksIGFuZCBlbnN1cmUgcmV1c2UgYW5kIGNvbnRp Z3VpdHkuICovCisJZm9yIChzaXplX3QgaSA9IDA7IGkgPCBOQUxMT0NTOyBpKyspIHsKKwkJYWxs b2NzW2ldID0gcGFpX2FsbG9jKHRzZG4sICZzaGFyZC0+cGFpLCBQQUdFLCBQQUdFLAorCQkgICAg LyogemVybyAqLyBmYWxzZSwgLyogZ3VhcmRlZCAqLyBmYWxzZSwgLyogZnJlcXVlbnRfcmV1c2Ug Ki8KKwkJICAgIGZhbHNlLCAmZGVmZXJyZWRfd29ya19nZW5lcmF0ZWQpOworCQlleHBlY3RfcHRy X25vdF9udWxsKGFsbG9jc1tpXSwgIlVuZXhwZWN0ZWQgYWxsb2MgZmFpbHVyZS4iKTsKKwl9CisJ dm9pZCAqbmV3X2Jhc2UgPSBlZGF0YV9iYXNlX2dldChhbGxvY3NbMF0pOworCWV4cGVjdF9wdHJf ZXEob3JpZ19iYXNlLCBuZXdfYmFzZSwKKwkgICAgIkZhaWxlZCB0byByZXVzZSB0aGUgYWxsb2Nh dGVkIG1lbW9yeS4iKTsKKwlleHBlY3RfY29udGlndW91cyhhbGxvY3MsIE5BTExPQ1MpOworCisJ ZGVzdHJveV90ZXN0X2RhdGEoc2hhcmQpOworfQorVEVTVF9FTkQKKworc3RhdGljIHVpbnRwdHJf dCBkZWZlcl9idW1wX3B0ciA9IEhVR0VQQUdFICogMTIzOworc3RhdGljIHZvaWQgKgorZGVmZXJf dGVzdF9tYXAoc2l6ZV90IHNpemUpIHsKKwl2b2lkICpyZXN1bHQgPSAodm9pZCAqKWRlZmVyX2J1 bXBfcHRyOworCWRlZmVyX2J1bXBfcHRyICs9IHNpemU7CisJcmV0dXJuIHJlc3VsdDsKK30KKwor c3RhdGljIHZvaWQKK2RlZmVyX3Rlc3RfdW5tYXAodm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSkgewor CSh2b2lkKXB0cjsKKwkodm9pZClzaXplOworfQorCitzdGF0aWMgYm9vbCBkZWZlcl9wdXJnZV9j YWxsZWQgPSBmYWxzZTsKK3N0YXRpYyB2b2lkCitkZWZlcl90ZXN0X3B1cmdlKHZvaWQgKnB0ciwg c2l6ZV90IHNpemUpIHsKKwkodm9pZClwdHI7CisJKHZvaWQpc2l6ZTsKKwlkZWZlcl9wdXJnZV9j YWxsZWQgPSB0cnVlOworfQorCitzdGF0aWMgYm9vbCBkZWZlcl9odWdpZnlfY2FsbGVkID0gZmFs c2U7CitzdGF0aWMgdm9pZAorZGVmZXJfdGVzdF9odWdpZnkodm9pZCAqcHRyLCBzaXplX3Qgc2l6 ZSkgeworCWRlZmVyX2h1Z2lmeV9jYWxsZWQgPSB0cnVlOworfQorCitzdGF0aWMgYm9vbCBkZWZl cl9kZWh1Z2lmeV9jYWxsZWQgPSBmYWxzZTsKK3N0YXRpYyB2b2lkCitkZWZlcl90ZXN0X2RlaHVn aWZ5KHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpIHsKKwlkZWZlcl9kZWh1Z2lmeV9jYWxsZWQgPSB0 cnVlOworfQorCitzdGF0aWMgbnN0aW1lX3QgZGVmZXJfY3VydGltZTsKK3N0YXRpYyB2b2lkCitk ZWZlcl90ZXN0X2N1cnRpbWUobnN0aW1lX3QgKnJfdGltZSwgYm9vbCBmaXJzdF9yZWFkaW5nKSB7 CisJKnJfdGltZSA9IGRlZmVyX2N1cnRpbWU7Cit9CisKK3N0YXRpYyB1aW50NjRfdAorZGVmZXJf dGVzdF9tc19zaW5jZShuc3RpbWVfdCAqcGFzdF90aW1lKSB7CisJcmV0dXJuIChuc3RpbWVfbnMo JmRlZmVyX2N1cnRpbWUpIC0gbnN0aW1lX25zKHBhc3RfdGltZSkpIC8gMTAwMCAvIDEwMDA7Cit9 CisKK1RFU1RfQkVHSU4odGVzdF9kZWZlcl90aW1lKSB7CisJdGVzdF9za2lwX2lmKCFocGFfc3Vw cG9ydGVkKCkpOworCisJaHBhX2hvb2tzX3QgaG9va3M7CisJaG9va3MubWFwID0gJmRlZmVyX3Rl c3RfbWFwOworCWhvb2tzLnVubWFwID0gJmRlZmVyX3Rlc3RfdW5tYXA7CisJaG9va3MucHVyZ2Ug PSAmZGVmZXJfdGVzdF9wdXJnZTsKKwlob29rcy5odWdpZnkgPSAmZGVmZXJfdGVzdF9odWdpZnk7 CisJaG9va3MuZGVodWdpZnkgPSAmZGVmZXJfdGVzdF9kZWh1Z2lmeTsKKwlob29rcy5jdXJ0aW1l ID0gJmRlZmVyX3Rlc3RfY3VydGltZTsKKwlob29rcy5tc19zaW5jZSA9ICZkZWZlcl90ZXN0X21z X3NpbmNlOworCisJaHBhX3NoYXJkX29wdHNfdCBvcHRzID0gdGVzdF9ocGFfc2hhcmRfb3B0c19k ZWZhdWx0OworCW9wdHMuZGVmZXJyYWxfYWxsb3dlZCA9IHRydWU7CisKKwlocGFfc2hhcmRfdCAq c2hhcmQgPSBjcmVhdGVfdGVzdF9kYXRhKCZob29rcywgJm9wdHMpOworCisJYm9vbCBkZWZlcnJl ZF93b3JrX2dlbmVyYXRlZCA9IGZhbHNlOworCisJbnN0aW1lX2luaXQoJmRlZmVyX2N1cnRpbWUs IDApOworCXRzZG5fdCAqdHNkbiA9IHRzZF90c2RuKHRzZF9mZXRjaCgpKTsKKwllZGF0YV90ICpl ZGF0YXNbSFVHRVBBR0VfUEFHRVNdOworCWZvciAoaW50IGkgPSAwOyBpIDwgKGludClIVUdFUEFH RV9QQUdFUzsgaSsrKSB7CisJCWVkYXRhc1tpXSA9IHBhaV9hbGxvYyh0c2RuLCAmc2hhcmQtPnBh aSwgUEFHRSwgUEFHRSwgZmFsc2UsCisJCSAgICBmYWxzZSwgZmFsc2UsICZkZWZlcnJlZF93b3Jr X2dlbmVyYXRlZCk7CisJCWV4cGVjdF9wdHJfbm90X251bGwoZWRhdGFzW2ldLCAiVW5leHBlY3Rl ZCBudWxsIGVkYXRhIik7CisJfQorCWhwYV9zaGFyZF9kb19kZWZlcnJlZF93b3JrKHRzZG4sIHNo YXJkKTsKKwlleHBlY3RfZmFsc2UoZGVmZXJfaHVnaWZ5X2NhbGxlZCwgIkh1Z2lmaWVkIHRvbyBl YXJseSIpOworCisJLyogSHVnaWZpY2F0aW9uIGRlbGF5IGlzIHNldCB0byAxMCBzZWNvbmRzIGlu IG9wdGlvbnMuICovCisJbnN0aW1lX2luaXQyKCZkZWZlcl9jdXJ0aW1lLCAxMSwgMCk7CisJaHBh X3NoYXJkX2RvX2RlZmVycmVkX3dvcmsodHNkbiwgc2hhcmQpOworCWV4cGVjdF90cnVlKGRlZmVy X2h1Z2lmeV9jYWxsZWQsICJGYWlsZWQgdG8gaHVnaWZ5Iik7CisKKwlkZWZlcl9odWdpZnlfY2Fs bGVkID0gZmFsc2U7CisKKwkvKiBQdXJnZS4gIFJlY2FsbCB0aGF0IGRpcnR5X211bHQgaXMgLjI1 LiAqLworCWZvciAoaW50IGkgPSAwOyBpIDwgKGludClIVUdFUEFHRV9QQUdFUyAvIDI7IGkrKykg eworCQlwYWlfZGFsbG9jKHRzZG4sICZzaGFyZC0+cGFpLCBlZGF0YXNbaV0sCisJCSAgICAmZGVm ZXJyZWRfd29ya19nZW5lcmF0ZWQpOworCX0KKworCWhwYV9zaGFyZF9kb19kZWZlcnJlZF93b3Jr KHRzZG4sIHNoYXJkKTsKKworCWV4cGVjdF9mYWxzZShkZWZlcl9odWdpZnlfY2FsbGVkLCAiSHVn aWZpZWQgdG9vIGVhcmx5Iik7CisJZXhwZWN0X3RydWUoZGVmZXJfZGVodWdpZnlfY2FsbGVkLCAi U2hvdWxkIGhhdmUgZGVodWdpZmllZCIpOworCWV4cGVjdF90cnVlKGRlZmVyX3B1cmdlX2NhbGxl ZCwgIlNob3VsZCBoYXZlIHB1cmdlZCIpOworCWRlZmVyX2h1Z2lmeV9jYWxsZWQgPSBmYWxzZTsK KwlkZWZlcl9kZWh1Z2lmeV9jYWxsZWQgPSBmYWxzZTsKKwlkZWZlcl9wdXJnZV9jYWxsZWQgPSBm YWxzZTsKKworCS8qCisJICogUmVmaWxsIHRoZSBwYWdlLiAgV2Ugbm93IG1lZXQgdGhlIGh1Z2lm aWNhdGlvbiB0aHJlc2hvbGQ7IHdlIHNob3VsZAorCSAqIGJlIG1hcmtlZCBmb3IgcGVuZGluZyBo dWdpZnkuCisJICovCisJZm9yIChpbnQgaSA9IDA7IGkgPCAoaW50KUhVR0VQQUdFX1BBR0VTIC8g MjsgaSsrKSB7CisJCWVkYXRhc1tpXSA9IHBhaV9hbGxvYyh0c2RuLCAmc2hhcmQtPnBhaSwgUEFH RSwgUEFHRSwgZmFsc2UsCisJCSAgICBmYWxzZSwgZmFsc2UsICZkZWZlcnJlZF93b3JrX2dlbmVy YXRlZCk7CisJCWV4cGVjdF9wdHJfbm90X251bGwoZWRhdGFzW2ldLCAiVW5leHBlY3RlZCBudWxs IGVkYXRhIik7CisJfQorCS8qCisJICogV2Ugd291bGQgYmUgaW5lbGlnaWJsZSBmb3IgaHVnaWZp Y2F0aW9uLCBoYWQgd2Ugbm90IGFscmVhZHkgbWV0IHRoZQorCSAqIHRocmVzaG9sZCBiZWZvcmUg ZGlwcGluZyBiZWxvdyBpdC4KKwkgKi8KKwlwYWlfZGFsbG9jKHRzZG4sICZzaGFyZC0+cGFpLCBl ZGF0YXNbMF0sCisJICAgICZkZWZlcnJlZF93b3JrX2dlbmVyYXRlZCk7CisJLyogV2FpdCBmb3Ig dGhlIHRocmVzaG9sZCBhZ2Fpbi4gKi8KKwluc3RpbWVfaW5pdDIoJmRlZmVyX2N1cnRpbWUsIDIy LCAwKTsKKwlocGFfc2hhcmRfZG9fZGVmZXJyZWRfd29yayh0c2RuLCBzaGFyZCk7CisJZXhwZWN0 X3RydWUoZGVmZXJfaHVnaWZ5X2NhbGxlZCwgIkh1Z2lmaWVkIHRvbyBlYXJseSIpOworCWV4cGVj dF9mYWxzZShkZWZlcl9kZWh1Z2lmeV9jYWxsZWQsICJVbmV4cGVjdGVkIGRlaHVnaWZ5Iik7CisJ ZXhwZWN0X2ZhbHNlKGRlZmVyX3B1cmdlX2NhbGxlZCwgIlVuZXhwZWN0ZWQgcHVyZ2UiKTsKKwor CWRlc3Ryb3lfdGVzdF9kYXRhKHNoYXJkKTsKK30KK1RFU1RfRU5ECisKK2ludAorbWFpbih2b2lk KSB7CisJLyoKKwkgKiBUaGVzZSB0cmlnZ2VyIHVudXNlZC1mdW5jdGlvbiB3YXJuaW5ncyBvbiBD SSBydW5zLCBldmVuIGlmIGRlY2xhcmVkCisJICogd2l0aCBzdGF0aWMgaW5saW5lLgorCSAqLwor CSh2b2lkKW1lbV90cmVlX2VtcHR5OworCSh2b2lkKW1lbV90cmVlX2xhc3Q7CisJKHZvaWQpbWVt X3RyZWVfc2VhcmNoOworCSh2b2lkKW1lbV90cmVlX25zZWFyY2g7CisJKHZvaWQpbWVtX3RyZWVf cHNlYXJjaDsKKwkodm9pZCltZW1fdHJlZV9pdGVyOworCSh2b2lkKW1lbV90cmVlX3JldmVyc2Vf aXRlcjsKKwkodm9pZCltZW1fdHJlZV9kZXN0cm95OworCXJldHVybiB0ZXN0X25vX3JlZW50cmFu Y3koCisJICAgIHRlc3RfYWxsb2NfbWF4LAorCSAgICB0ZXN0X3N0cmVzcywKKwkgICAgdGVzdF9h bGxvY19kYWxsb2NfYmF0Y2gsCisJICAgIHRlc3RfZGVmZXJfdGltZSk7Cit9CgpkaWZmIC0tZ2l0 IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L2hwYV9i YWNrZ3JvdW5kX3RocmVhZC5jIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4z LjAvdGVzdC91bml0L2hwYV9iYWNrZ3JvdW5kX3RocmVhZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAuLjgxYzI1NjEKLS0tIC9kZXYvbnVsbAorKysgYi8zODktZHMtYmFzZS0z LjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvaHBhX2JhY2tncm91bmRfdGhyZWFk LmMKQEAgLTAsMCArMSwxODggQEAKKyNpbmNsdWRlICJ0ZXN0L2plbWFsbG9jX3Rlc3QuaCIKKyNp bmNsdWRlICJ0ZXN0L3NsZWVwLmgiCisKK3N0YXRpYyB2b2lkCitzbGVlcF9mb3JfYmFja2dyb3Vu ZF90aHJlYWRfaW50ZXJ2YWwoKSB7CisJLyoKKwkgKiBUaGUgc2xlZXAgaW50ZXJ2YWwgc2V0IGlu IG91ciAuc2ggZmlsZSBpcyA1MG1zLiAgU28gaXQgbGlrZWx5IHdpbGwKKwkgKiBydW4gaWYgd2Ug c2xlZXAgZm9yIGZvdXIgdGltZXMgdGhhdC4KKwkgKi8KKwlzbGVlcF9ucygyMDAgKiAxMDAwICog MTAwMCk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZAorY3JlYXRlX2FyZW5hKCkgeworCXVuc2lnbmVk IGFyZW5hX2luZDsKKwlzaXplX3Qgc3o7CisKKwlzeiA9IHNpemVvZih1bnNpZ25lZCk7CisJZXhw ZWN0X2RfZXEobWFsbGN0bCgiYXJlbmFzLmNyZWF0ZSIsICh2b2lkICopJmFyZW5hX2luZCwgJnN6 LCBOVUxMLCAyKSwKKwkgICAgMCwgIlVuZXhwZWN0ZWQgbWFsbGN0bCgpIGZhaWx1cmUiKTsKKwly ZXR1cm4gYXJlbmFfaW5kOworfQorCitzdGF0aWMgc2l6ZV90CitnZXRfZW1wdHlfbmRpcnR5KHVu c2lnbmVkIGFyZW5hX2luZCkgeworCWludCBlcnI7CisJc2l6ZV90IG5kaXJ0eV9odWdlOworCXNp emVfdCBuZGlydHlfbm9uaHVnZTsKKwl1aW50NjRfdCBlcG9jaCA9IDE7CisJc2l6ZV90IHN6ID0g c2l6ZW9mKGVwb2NoKTsKKwllcnIgPSBqZV9tYWxsY3RsKCJlcG9jaCIsICh2b2lkICopJmVwb2No LCAmc3osICh2b2lkICopJmVwb2NoLAorCSAgICBzaXplb2YoZXBvY2gpKTsKKwlleHBlY3RfZF9l cSgwLCBlcnIsICJVbmV4cGVjdGVkIG1hbGxjdGwoKSBmYWlsdXJlIik7CisKKwlzaXplX3QgbWli WzZdOworCXNpemVfdCBtaWJsZW4gPSBzaXplb2YobWliKS9zaXplb2YobWliWzBdKTsKKwllcnIg PSBtYWxsY3RsbmFtZXRvbWliKAorCSAgICAic3RhdHMuYXJlbmFzLjAuaHBhX3NoYXJkLmVtcHR5 X3NsYWJzLm5kaXJ0eV9ub25odWdlIiwgbWliLAorCSAgICAmbWlibGVuKTsKKwlleHBlY3RfZF9l cSgwLCBlcnIsICJVbmV4cGVjdGVkIG1hbGxjdGxuYW1ldG9taWIoKSBmYWlsdXJlIik7CisKKwlz eiA9IHNpemVvZihuZGlydHlfbm9uaHVnZSk7CisJbWliWzJdID0gYXJlbmFfaW5kOworCWVyciA9 IG1hbGxjdGxieW1pYihtaWIsIG1pYmxlbiwgJm5kaXJ0eV9ub25odWdlLCAmc3osIE5VTEwsIDAp OworCWV4cGVjdF9kX2VxKDAsIGVyciwgIlVuZXhwZWN0ZWQgbWFsbGN0bGJ5bWliKCkgZmFpbHVy ZSIpOworCisJZXJyID0gbWFsbGN0bG5hbWV0b21pYigKKwkgICAgInN0YXRzLmFyZW5hcy4wLmhw YV9zaGFyZC5lbXB0eV9zbGFicy5uZGlydHlfaHVnZSIsIG1pYiwKKwkgICAgJm1pYmxlbik7CisJ ZXhwZWN0X2RfZXEoMCwgZXJyLCAiVW5leHBlY3RlZCBtYWxsY3RsbmFtZXRvbWliKCkgZmFpbHVy ZSIpOworCisJc3ogPSBzaXplb2YobmRpcnR5X2h1Z2UpOworCW1pYlsyXSA9IGFyZW5hX2luZDsK KwllcnIgPSBtYWxsY3RsYnltaWIobWliLCBtaWJsZW4sICZuZGlydHlfaHVnZSwgJnN6LCBOVUxM LCAwKTsKKwlleHBlY3RfZF9lcSgwLCBlcnIsICJVbmV4cGVjdGVkIG1hbGxjdGxieW1pYigpIGZh aWx1cmUiKTsKKworCXJldHVybiBuZGlydHlfaHVnZSArIG5kaXJ0eV9ub25odWdlOworfQorCitz dGF0aWMgdm9pZAorc2V0X2JhY2tncm91bmRfdGhyZWFkX2VuYWJsZWQoYm9vbCBlbmFibGVkKSB7 CisJaW50IGVycjsKKwllcnIgPSBqZV9tYWxsY3RsKCJiYWNrZ3JvdW5kX3RocmVhZCIsIE5VTEws IE5VTEwsICZlbmFibGVkLAorCSAgICBzaXplb2YoZW5hYmxlZCkpOworCWV4cGVjdF9kX2VxKDAs IGVyciwgIlVuZXhwZWN0ZWQgbWFsbGN0bCBmYWlsdXJlIik7Cit9CisKK3N0YXRpYyB2b2lkCit3 YWl0X3VudGlsX3RocmVhZF9pc19lbmFibGVkKHVuc2lnbmVkIGFyZW5hX2lkKSB7CisJdHNkX3Qq IHRzZCA9IHRzZF9mZXRjaCgpOworCisJYm9vbCBzbGVlcGluZyA9IGZhbHNlOworCWludCBpdGVy YXRpb25zID0gMDsKKwlkbyB7CisJCWJhY2tncm91bmRfdGhyZWFkX2luZm9fdCAqaW5mbyA9CisJ CSAgICBiYWNrZ3JvdW5kX3RocmVhZF9pbmZvX2dldChhcmVuYV9pZCk7CisJCW1hbGxvY19tdXRl eF9sb2NrKHRzZF90c2RuKHRzZCksICZpbmZvLT5tdHgpOworCQltYWxsb2NfbXV0ZXhfdW5sb2Nr KHRzZF90c2RuKHRzZCksICZpbmZvLT5tdHgpOworCQlzbGVlcGluZyA9IGJhY2tncm91bmRfdGhy ZWFkX2luZGVmaW5pdGVfc2xlZXAoaW5mbyk7CisJCWFzc2VydF9kX2x0KGl0ZXJhdGlvbnMsIFVJ TlQ2NF9DKDEwMDAwMDApLAorCQkgICAgIldhaXRpbmcgZm9yIGEgdGhyZWFkIHRvIHN0YXJ0IGZv ciB0b28gbG9uZyIpOworCX0gd2hpbGUgKCFzbGVlcGluZyk7Cit9CisKK3N0YXRpYyB2b2lkCitl eHBlY3RfcHVyZ2luZyh1bnNpZ25lZCBhcmVuYV9pbmQsIGJvb2wgZXhwZWN0X2RlZmVycmVkKSB7 CisJc2l6ZV90IGVtcHR5X25kaXJ0eTsKKworCWVtcHR5X25kaXJ0eSA9IGdldF9lbXB0eV9uZGly dHkoYXJlbmFfaW5kKTsKKwlleHBlY3RfenVfZXEoMCwgZW1wdHlfbmRpcnR5LCAiRXhwZWN0ZWQg YXJlbmEgdG8gc3RhcnQgdW51c2VkLiIpOworCisJLyoKKwkgKiBJdCdzIHBvc3NpYmxlIHRoYXQg d2UgZ2V0IHVubHVja3kgd2l0aCBvdXIgc3RhdHMgY29sbGVjdGlvbiB0aW1pbmcsCisJICogYW5k IHRoZSBiYWNrZ3JvdW5kIHRocmVhZCBydW5zIGluIGJldHdlZW4gdGhlIGRlYWxsb2NhdGlvbiBh bmQgdGhlCisJICogc3RhdHMgY29sbGVjdGlvbi4gIFNvIHdlIHJldHJ5IDEwIHRpbWVzLCBhbmQg c2VlIGlmIHdlICpldmVyKiBzZWUKKwkgKiBkZWZlcnJlZCByZWNsYW1hdGlvbi4KKwkgKi8KKwli b29sIG9ic2VydmVkX2RpcnR5X3BhZ2UgPSBmYWxzZTsKKwlmb3IgKGludCBpID0gMDsgaSA8IDEw OyBpKyspIHsKKwkJdm9pZCAqcHRyID0gbWFsbG9jeChQQUdFLAorCQkgICAgTUFMTE9DWF9UQ0FD SEVfTk9ORSB8IE1BTExPQ1hfQVJFTkEoYXJlbmFfaW5kKSk7CisJCWVtcHR5X25kaXJ0eSA9IGdl dF9lbXB0eV9uZGlydHkoYXJlbmFfaW5kKTsKKwkJZXhwZWN0X3p1X2VxKDAsIGVtcHR5X25kaXJ0 eSwgIkFsbCBwYWdlcyBzaG91bGQgYmUgYWN0aXZlIik7CisJCWRhbGxvY3gocHRyLCBNQUxMT0NY X1RDQUNIRV9OT05FKTsKKwkJZW1wdHlfbmRpcnR5ID0gZ2V0X2VtcHR5X25kaXJ0eShhcmVuYV9p bmQpOworCQlpZiAoZXhwZWN0X2RlZmVycmVkKSB7CisJCQlleHBlY3RfdHJ1ZShlbXB0eV9uZGly dHkgPT0gMCB8fCBlbXB0eV9uZGlydHkgPT0gMSB8fAorCQkJICAgIG9wdF9wcm9mLCAiVW5leHBl Y3RlZCBleHRyYSBkaXJ0eSBwYWdlIGNvdW50OiAlenUiLAorCQkJICAgIGVtcHR5X25kaXJ0eSk7 CisJCX0gZWxzZSB7CisJCQlhc3NlcnRfenVfZXEoMCwgZW1wdHlfbmRpcnR5LAorCQkJICAgICJT YXcgZGlydHkgcGFnZXMgd2l0aG91dCBkZWZlcnJlZCBwdXJnaW5nIik7CisJCX0KKwkJaWYgKGVt cHR5X25kaXJ0eSA+IDApIHsKKwkJCW9ic2VydmVkX2RpcnR5X3BhZ2UgPSB0cnVlOworCQkJYnJl YWs7CisJCX0KKwl9CisJZXhwZWN0X2JfZXEoZXhwZWN0X2RlZmVycmVkLCBvYnNlcnZlZF9kaXJ0 eV9wYWdlLCAiIik7CisKKwkvKgorCSAqIFVuZGVyIGhpZ2ggY29uY3VycmVuY3kgLyBoZWF2eSB0 ZXN0IGxvYWQgKGUuZy4gdXNpbmcgcnVuX3Rlc3Quc2gpLAorCSAqIHRoZSBiYWNrZ3JvdW5kIHRo cmVhZCBtYXkgbm90IGdldCBzY2hlZHVsZWQgZm9yIGEgbG9uZ2VyIHBlcmlvZCBvZgorCSAqIHRp bWUuICBSZXRyeSAxMDAgdGltZXMgbWF4IGJlZm9yZSBiYWlsaW5nIG91dC4KKwkgKi8KKwl1bnNp Z25lZCByZXRyeSA9IDA7CisJd2hpbGUgKChlbXB0eV9uZGlydHkgPSBnZXRfZW1wdHlfbmRpcnR5 KGFyZW5hX2luZCkpID4gMCAmJgorCSAgICBleHBlY3RfZGVmZXJyZWQgJiYgKHJldHJ5KysgPCAx MDApKSB7CisJCXNsZWVwX2Zvcl9iYWNrZ3JvdW5kX3RocmVhZF9pbnRlcnZhbCgpOworCX0KKwor CWV4cGVjdF96dV9lcSgwLCBlbXB0eV9uZGlydHksICJTaG91bGQgaGF2ZSBzZWVuIGEgYmFja2dy b3VuZCBwdXJnZSIpOworfQorCitURVNUX0JFR0lOKHRlc3RfaHBhX2JhY2tncm91bmRfdGhyZWFk X3B1cmdlcykgeworCXRlc3Rfc2tpcF9pZighY29uZmlnX3N0YXRzKTsKKwl0ZXN0X3NraXBfaWYo IWhwYV9zdXBwb3J0ZWQoKSk7CisJdGVzdF9za2lwX2lmKCFoYXZlX2JhY2tncm91bmRfdGhyZWFk KTsKKwkvKiBTa2lwIHNpbmNlIGd1YXJkZWQgcGFnZXMgY2Fubm90IGJlIGFsbG9jYXRlZCBmcm9t IGhwYS4gKi8KKwl0ZXN0X3NraXBfaWYoc2FuX2d1YXJkX2VuYWJsZWQoKSk7CisKKwl1bnNpZ25l ZCBhcmVuYV9pbmQgPSBjcmVhdGVfYXJlbmEoKTsKKwkvKgorCSAqIE91ciAuc2ggc2V0cyBkaXJ0 eSBtdWx0IHRvIDAsIHNvIGFsbCBkaXJ0eSBwYWdlcyBzaG91bGQgZ2V0IHB1cmdlZAorCSAqIGFu eSB0aW1lIGFueSB0aHJlYWQgZnJlZXMuCisJICovCisJZXhwZWN0X3B1cmdpbmcoYXJlbmFfaW5k LCAvKiBleHBlY3RfZGVmZXJyZWQgKi8gdHJ1ZSk7Cit9CitURVNUX0VORAorCitURVNUX0JFR0lO KHRlc3RfaHBhX2JhY2tncm91bmRfdGhyZWFkX2VuYWJsZV9kaXNhYmxlKSB7CisJdGVzdF9za2lw X2lmKCFjb25maWdfc3RhdHMpOworCXRlc3Rfc2tpcF9pZighaHBhX3N1cHBvcnRlZCgpKTsKKwl0 ZXN0X3NraXBfaWYoIWhhdmVfYmFja2dyb3VuZF90aHJlYWQpOworCS8qIFNraXAgc2luY2UgZ3Vh cmRlZCBwYWdlcyBjYW5ub3QgYmUgYWxsb2NhdGVkIGZyb20gaHBhLiAqLworCXRlc3Rfc2tpcF9p ZihzYW5fZ3VhcmRfZW5hYmxlZCgpKTsKKworCXVuc2lnbmVkIGFyZW5hX2luZCA9IGNyZWF0ZV9h cmVuYSgpOworCisJc2V0X2JhY2tncm91bmRfdGhyZWFkX2VuYWJsZWQoZmFsc2UpOworCWV4cGVj dF9wdXJnaW5nKGFyZW5hX2luZCwgZmFsc2UpOworCisJc2V0X2JhY2tncm91bmRfdGhyZWFkX2Vu YWJsZWQodHJ1ZSk7CisJd2FpdF91bnRpbF90aHJlYWRfaXNfZW5hYmxlZChhcmVuYV9pbmQpOwor CWV4cGVjdF9wdXJnaW5nKGFyZW5hX2luZCwgdHJ1ZSk7Cit9CitURVNUX0VORAorCitpbnQKK21h aW4odm9pZCkgeworCS8qCisJICogT0ssIHRoaXMgaXMgYSBzb3J0IG9mIG5hc3R5IGhhY2suICBX ZSBkb24ndCB3YW50IHRvIGFkZCAqYW5vdGhlcioKKwkgKiBjb25maWcgb3B0aW9uIGZvciBIUEEg KHRoZSBpbnRlbnQgaXMgdGhhdCBpdCBiZWNvbWVzIGF2YWlsYWJsZSBvbgorCSAqIG1vcmUgcGxh dGZvcm1zIG92ZXIgdGltZSwgYW5kIHdlJ3JlIHRyeWluZyB0byBwcnVuZSBiYWNrIGNvbmZpZwor CSAqIG9wdGlvbnMgZ2VuZXJhbGx5LiAgQnV0IHdlJ2xsIGdldCBpbml0aWFsaXphdGlvbiBlcnJv cnMgb24gb3RoZXIKKwkgKiBwbGF0Zm9ybXMgaWYgd2Ugc2V0IGhwYTp0cnVlIGluIHRoZSBNQUxM T0NfQ09ORiAoZXZlbiBpZiB3ZSBzZXQKKwkgKiBhYm9ydF9jb25mOmZhbHNlIGFzIHdlbGwpLiAg U28gd2UgcmVhY2ggaW50byB0aGUgaW50ZXJuYWxzIGFuZCBzZXQKKwkgKiB0aGVtIGRpcmVjdGx5 LCBidXQgb25seSBpZiB3ZSBrbm93IHRoYXQgd2UncmUgYWN0dWFsbHkgZ29pbmcgdG8gZG8KKwkg KiBzb21ldGhpbmcgbm9udHJpdmlhbCBpbiB0aGUgdGVzdHMuCisJICovCisJaWYgKGNvbmZpZ19z dGF0cyAmJiBocGFfc3VwcG9ydGVkKCkgJiYgaGF2ZV9iYWNrZ3JvdW5kX3RocmVhZCkgeworCQlv cHRfaHBhID0gdHJ1ZTsKKwkJb3B0X2JhY2tncm91bmRfdGhyZWFkID0gdHJ1ZTsKKwl9CisJcmV0 dXJuIHRlc3Rfbm9fcmVlbnRyYW5jeSgKKwkgICAgdGVzdF9ocGFfYmFja2dyb3VuZF90aHJlYWRf cHVyZ2VzLAorCSAgICB0ZXN0X2hwYV9iYWNrZ3JvdW5kX3RocmVhZF9lbmFibGVfZGlzYWJsZSk7 Cit9CgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAv dGVzdC91bml0L2hwYV9iYWNrZ3JvdW5kX3RocmVhZC5zaCBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1 aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9ocGFfYmFja2dyb3VuZF90aHJlYWQuc2gKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjVhNTZhMAotLS0gL2Rldi9udWxsCisr KyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9ocGFf YmFja2dyb3VuZF90aHJlYWQuc2gKQEAgLTAsMCArMSw0IEBACisjIS9iaW4vc2gKKworZXhwb3J0 IE1BTExPQ19DT05GPSJocGFfZGlydHlfbXVsdDowLGhwYV9taW5fcHVyZ2VfaW50ZXJ2YWxfbXM6 NTAsaHBhX3NlY19uc2hhcmRzOjAiCisKCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1i dWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvaHBkYXRhLmMgYi8zODktZHMtYmFzZS0zLjMu MC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvaHBkYXRhLmMKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMC4uMjg4ZTcxZAotLS0gL2Rldi9udWxsCisrKyBiLzM4OS1kcy1i YXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9ocGRhdGEuYwpAQCAtMCww ICsxLDI0NCBAQAorI2luY2x1ZGUgInRlc3QvamVtYWxsb2NfdGVzdC5oIgorCisjZGVmaW5lIEhQ REFUQV9BRERSICgodm9pZCAqKSgxMCAqIEhVR0VQQUdFKSkKKyNkZWZpbmUgSFBEQVRBX0FHRSAx MjMKKworVEVTVF9CRUdJTih0ZXN0X3Jlc2VydmVfYWxsb2MpIHsKKwlocGRhdGFfdCBocGRhdGE7 CisJaHBkYXRhX2luaXQoJmhwZGF0YSwgSFBEQVRBX0FERFIsIEhQREFUQV9BR0UpOworCisJLyog QWxsb2NhdGluZyBhIHBhZ2UgYXQgYSB0aW1lLCB3ZSBzaG91bGQgZG8gZmlyc3QgZml0LiAqLwor CWZvciAoc2l6ZV90IGkgPSAwOyBpIDwgSFVHRVBBR0VfUEFHRVM7IGkrKykgeworCQlleHBlY3Rf dHJ1ZShocGRhdGFfY29uc2lzdGVudCgmaHBkYXRhKSwgIiIpOworCQlleHBlY3RfenVfZXEoSFVH RVBBR0VfUEFHRVMgLSBpLAorCQkgICAgaHBkYXRhX2xvbmdlc3RfZnJlZV9yYW5nZV9nZXQoJmhw ZGF0YSksICIiKTsKKwkJdm9pZCAqYWxsb2MgPSBocGRhdGFfcmVzZXJ2ZV9hbGxvYygmaHBkYXRh LCBQQUdFKTsKKwkJZXhwZWN0X3B0cl9lcSgoY2hhciAqKUhQREFUQV9BRERSICsgaSAqIFBBR0Us IGFsbG9jLCAiIik7CisJCWV4cGVjdF90cnVlKGhwZGF0YV9jb25zaXN0ZW50KCZocGRhdGEpLCAi Iik7CisJfQorCWV4cGVjdF90cnVlKGhwZGF0YV9jb25zaXN0ZW50KCZocGRhdGEpLCAiIik7CisJ ZXhwZWN0X3p1X2VxKDAsIGhwZGF0YV9sb25nZXN0X2ZyZWVfcmFuZ2VfZ2V0KCZocGRhdGEpLCAi Iik7CisKKwkvKgorCSAqIEJ1aWxkIHVwIGEgYmlnZ2VyIGZyZWUtcmFuZ2UsIDIgcGFnZXMgYXQg YSB0aW1lLCB1bnRpbCB3ZSd2ZSBnb3QgNgorCSAqIGFkamFjZW50IGZyZWUgcGFnZXMgdG90YWwu ICBQYWdlcyA4LTEzIHNob3VsZCBiZSB1bnJlc2VydmVkIGFmdGVyCisJICogdGhpcy4KKwkgKi8K KwlocGRhdGFfdW5yZXNlcnZlKCZocGRhdGEsIChjaGFyICopSFBEQVRBX0FERFIgKyAxMCAqIFBB R0UsIDIgKiBQQUdFKTsKKwlleHBlY3RfdHJ1ZShocGRhdGFfY29uc2lzdGVudCgmaHBkYXRhKSwg IiIpOworCWV4cGVjdF96dV9lcSgyLCBocGRhdGFfbG9uZ2VzdF9mcmVlX3JhbmdlX2dldCgmaHBk YXRhKSwgIiIpOworCisJaHBkYXRhX3VucmVzZXJ2ZSgmaHBkYXRhLCAoY2hhciAqKUhQREFUQV9B RERSICsgMTIgKiBQQUdFLCAyICogUEFHRSk7CisJZXhwZWN0X3RydWUoaHBkYXRhX2NvbnNpc3Rl bnQoJmhwZGF0YSksICIiKTsKKwlleHBlY3RfenVfZXEoNCwgaHBkYXRhX2xvbmdlc3RfZnJlZV9y YW5nZV9nZXQoJmhwZGF0YSksICIiKTsKKworCWhwZGF0YV91bnJlc2VydmUoJmhwZGF0YSwgKGNo YXIgKilIUERBVEFfQUREUiArIDggKiBQQUdFLCAyICogUEFHRSk7CisJZXhwZWN0X3RydWUoaHBk YXRhX2NvbnNpc3RlbnQoJmhwZGF0YSksICIiKTsKKwlleHBlY3RfenVfZXEoNiwgaHBkYXRhX2xv bmdlc3RfZnJlZV9yYW5nZV9nZXQoJmhwZGF0YSksICIiKTsKKworCS8qCisJICogTGVhdmUgcGFn ZSAxNCByZXNlcnZlZCwgYnV0IGZyZWUgcGFnZSAxNSAodGhpcyB0ZXN0IHRoZSBjYXNlIHdoZXJl CisJICogdW5yZXNlcnZpbmcgY29tYmluZXMgdHdvIHJhbmdlcykuCisJICovCisJaHBkYXRhX3Vu cmVzZXJ2ZSgmaHBkYXRhLCAoY2hhciAqKUhQREFUQV9BRERSICsgMTUgKiBQQUdFLCBQQUdFKTsK KwkvKgorCSAqIExvbmdlc3QgZnJlZSByYW5nZSBzaG91bGRuJ3QgY2hhbmdlOyB3ZSd2ZSBnb3Qg YSBmcmVlIHJhbmdlIG9mIHNpemUKKwkgKiA2LCB0aGVuIGEgcmVzZXJ2ZWQgcGFnZSwgdGhlbiBh bm90aGVyIGZyZWUgcmFuZ2UuCisJICovCisJZXhwZWN0X3RydWUoaHBkYXRhX2NvbnNpc3RlbnQo JmhwZGF0YSksICIiKTsKKwlleHBlY3RfenVfZXEoNiwgaHBkYXRhX2xvbmdlc3RfZnJlZV9yYW5n ZV9nZXQoJmhwZGF0YSksICIiKTsKKworCS8qIEFmdGVyIGZyZWVpbmcgcGFnZSAxNCwgdGhlIHR3 byByYW5nZXMgZ2V0IGNvbWJpbmVkLiAqLworCWhwZGF0YV91bnJlc2VydmUoJmhwZGF0YSwgKGNo YXIgKilIUERBVEFfQUREUiArIDE0ICogUEFHRSwgUEFHRSk7CisJZXhwZWN0X3RydWUoaHBkYXRh X2NvbnNpc3RlbnQoJmhwZGF0YSksICIiKTsKKwlleHBlY3RfenVfZXEoOCwgaHBkYXRhX2xvbmdl c3RfZnJlZV9yYW5nZV9nZXQoJmhwZGF0YSksICIiKTsKK30KK1RFU1RfRU5ECisKK1RFU1RfQkVH SU4odGVzdF9wdXJnZV9zaW1wbGUpIHsKKwlocGRhdGFfdCBocGRhdGE7CisJaHBkYXRhX2luaXQo JmhwZGF0YSwgSFBEQVRBX0FERFIsIEhQREFUQV9BR0UpOworCisJdm9pZCAqYWxsb2MgPSBocGRh dGFfcmVzZXJ2ZV9hbGxvYygmaHBkYXRhLCBIVUdFUEFHRV9QQUdFUyAvIDIgKiBQQUdFKTsKKwll eHBlY3RfcHRyX2VxKGFsbG9jLCBIUERBVEFfQUREUiwgIiIpOworCisJLyogQ3JlYXRlIEhVR0VQ QUdFX1BBR0VTIC8gNCBkaXJ0eSBpbmFjdGl2ZSBwYWdlcyBhdCB0aGUgYmVnaW5uaW5nLiAqLwor CWhwZGF0YV91bnJlc2VydmUoJmhwZGF0YSwgYWxsb2MsIEhVR0VQQUdFX1BBR0VTIC8gNCAqIFBB R0UpOworCisJZXhwZWN0X3p1X2VxKGhwZGF0YV9udG91Y2hlZF9nZXQoJmhwZGF0YSksIEhVR0VQ QUdFX1BBR0VTIC8gMiwgIiIpOworCisJaHBkYXRhX2FsbG9jX2FsbG93ZWRfc2V0KCZocGRhdGEs IGZhbHNlKTsKKwlocGRhdGFfcHVyZ2Vfc3RhdGVfdCBwdXJnZV9zdGF0ZTsKKwlzaXplX3QgdG9f cHVyZ2UgPSBocGRhdGFfcHVyZ2VfYmVnaW4oJmhwZGF0YSwgJnB1cmdlX3N0YXRlKTsKKwlleHBl Y3RfenVfZXEoSFVHRVBBR0VfUEFHRVMgLyA0LCB0b19wdXJnZSwgIiIpOworCisJdm9pZCAqcHVy Z2VfYWRkcjsKKwlzaXplX3QgcHVyZ2Vfc2l6ZTsKKwlib29sIGdvdF9yZXN1bHQgPSBocGRhdGFf cHVyZ2VfbmV4dCgmaHBkYXRhLCAmcHVyZ2Vfc3RhdGUsICZwdXJnZV9hZGRyLAorCSAgICAmcHVy Z2Vfc2l6ZSk7CisJZXhwZWN0X3RydWUoZ290X3Jlc3VsdCwgIiIpOworCWV4cGVjdF9wdHJfZXEo SFBEQVRBX0FERFIsIHB1cmdlX2FkZHIsICIiKTsKKwlleHBlY3RfenVfZXEoSFVHRVBBR0VfUEFH RVMgLyA0ICogUEFHRSwgcHVyZ2Vfc2l6ZSwgIiIpOworCisJZ290X3Jlc3VsdCA9IGhwZGF0YV9w dXJnZV9uZXh0KCZocGRhdGEsICZwdXJnZV9zdGF0ZSwgJnB1cmdlX2FkZHIsCisJICAgICZwdXJn ZV9zaXplKTsKKwlleHBlY3RfZmFsc2UoZ290X3Jlc3VsdCwgIlVuZXhwZWN0ZWQgYWRkaXRpb25h bCBwdXJnZSByYW5nZTogIgorCSAgICAiZXh0ZW50IGF0ICVwIG9mIHNpemUgJXp1IiwgcHVyZ2Vf YWRkciwgcHVyZ2Vfc2l6ZSk7CisKKwlocGRhdGFfcHVyZ2VfZW5kKCZocGRhdGEsICZwdXJnZV9z dGF0ZSk7CisJZXhwZWN0X3p1X2VxKGhwZGF0YV9udG91Y2hlZF9nZXQoJmhwZGF0YSksIEhVR0VQ QUdFX1BBR0VTIC8gNCwgIiIpOworfQorVEVTVF9FTkQKKworLyoKKyAqIFdlIG9ubHkgdGVzdCBp bnRlcnZlbmluZyBkYWxsb2MncyBub3QgaW50ZXJ2ZW5pbmcgYWxsb2NzOyB0aGUgbGF0dGVyIGFy ZQorICogZGlzYWxsb3dlZCBhcyBhIHB1cmdpbmcgcHJlY29uZGl0aW9uIChiZWNhdXNlIHRoZXkg aW50ZXJmZXJlIHdpdGggcHVyZ2luZworICogYWNyb3NzIGEgcmV0YWluZWQgZXh0ZW50LCBzYXZp bmcgYSBwdXJnZSBjYWxsKS4KKyAqLworVEVTVF9CRUdJTih0ZXN0X3B1cmdlX2ludGVydmVuaW5n X2RhbGxvYykgeworCWhwZGF0YV90IGhwZGF0YTsKKwlocGRhdGFfaW5pdCgmaHBkYXRhLCBIUERB VEFfQUREUiwgSFBEQVRBX0FHRSk7CisKKwkvKiBBbGxvY2F0ZSB0aGUgZmlyc3QgMy80IG9mIHRo ZSBwYWdlcy4gKi8KKwl2b2lkICphbGxvYyA9IGhwZGF0YV9yZXNlcnZlX2FsbG9jKCZocGRhdGEs IDMgKiBIVUdFUEFHRV9QQUdFUyAvIDQgICogUEFHRSk7CisJZXhwZWN0X3B0cl9lcShhbGxvYywg SFBEQVRBX0FERFIsICIiKTsKKworCS8qIEZyZWUgdGhlIGZpcnN0IDEvNCBhbmQgdGhlIHRoaXJk IDEvNCBvZiB0aGUgcGFnZXMuICovCisJaHBkYXRhX3VucmVzZXJ2ZSgmaHBkYXRhLCBhbGxvYywg SFVHRVBBR0VfUEFHRVMgLyA0ICogUEFHRSk7CisJaHBkYXRhX3VucmVzZXJ2ZSgmaHBkYXRhLAor CSAgICAodm9pZCAqKSgodWludHB0cl90KWFsbG9jICsgMiAqIEhVR0VQQUdFX1BBR0VTIC8gNCAq IFBBR0UpLAorCSAgICBIVUdFUEFHRV9QQUdFUyAvIDQgKiBQQUdFKTsKKworCWV4cGVjdF96dV9l cShocGRhdGFfbnRvdWNoZWRfZ2V0KCZocGRhdGEpLCAzICogSFVHRVBBR0VfUEFHRVMgLyA0LCAi Iik7CisKKwlocGRhdGFfYWxsb2NfYWxsb3dlZF9zZXQoJmhwZGF0YSwgZmFsc2UpOworCWhwZGF0 YV9wdXJnZV9zdGF0ZV90IHB1cmdlX3N0YXRlOworCXNpemVfdCB0b19wdXJnZSA9IGhwZGF0YV9w dXJnZV9iZWdpbigmaHBkYXRhLCAmcHVyZ2Vfc3RhdGUpOworCWV4cGVjdF96dV9lcShIVUdFUEFH RV9QQUdFUyAvIDIsIHRvX3B1cmdlLCAiIik7CisKKwl2b2lkICpwdXJnZV9hZGRyOworCXNpemVf dCBwdXJnZV9zaXplOworCS8qIEZpcnN0IHB1cmdlLiAqLworCWJvb2wgZ290X3Jlc3VsdCA9IGhw ZGF0YV9wdXJnZV9uZXh0KCZocGRhdGEsICZwdXJnZV9zdGF0ZSwgJnB1cmdlX2FkZHIsCisJICAg ICZwdXJnZV9zaXplKTsKKwlleHBlY3RfdHJ1ZShnb3RfcmVzdWx0LCAiIik7CisJZXhwZWN0X3B0 cl9lcShIUERBVEFfQUREUiwgcHVyZ2VfYWRkciwgIiIpOworCWV4cGVjdF96dV9lcShIVUdFUEFH RV9QQUdFUyAvIDQgKiBQQUdFLCBwdXJnZV9zaXplLCAiIik7CisKKwkvKiBEZWFsbG9jYXRlIHRo ZSBzZWNvbmQgMS80IGJlZm9yZSB0aGUgc2Vjb25kIHB1cmdlIG9jY3Vycy4gKi8KKwlocGRhdGFf dW5yZXNlcnZlKCZocGRhdGEsCisJICAgICh2b2lkICopKCh1aW50cHRyX3QpYWxsb2MgKyAxICog SFVHRVBBR0VfUEFHRVMgLyA0ICogUEFHRSksCisJICAgIEhVR0VQQUdFX1BBR0VTIC8gNCAqIFBB R0UpOworCisJLyogTm93IGNvbnRpbnVlIHB1cmdpbmcuICovCisJZ290X3Jlc3VsdCA9IGhwZGF0 YV9wdXJnZV9uZXh0KCZocGRhdGEsICZwdXJnZV9zdGF0ZSwgJnB1cmdlX2FkZHIsCisJICAgICZw dXJnZV9zaXplKTsKKwlleHBlY3RfdHJ1ZShnb3RfcmVzdWx0LCAiIik7CisJZXhwZWN0X3B0cl9l cSgKKwkgICAgKHZvaWQgKikoKHVpbnRwdHJfdClhbGxvYyArIDIgKiBIVUdFUEFHRV9QQUdFUyAv IDQgKiBQQUdFKSwKKwkgICAgcHVyZ2VfYWRkciwgIiIpOworCWV4cGVjdF96dV9nZShIVUdFUEFH RV9QQUdFUyAvIDQgKiBQQUdFLCBwdXJnZV9zaXplLCAiIik7CisKKwlnb3RfcmVzdWx0ID0gaHBk YXRhX3B1cmdlX25leHQoJmhwZGF0YSwgJnB1cmdlX3N0YXRlLCAmcHVyZ2VfYWRkciwKKwkgICAg JnB1cmdlX3NpemUpOworCWV4cGVjdF9mYWxzZShnb3RfcmVzdWx0LCAiVW5leHBlY3RlZCBhZGRp dGlvbmFsIHB1cmdlIHJhbmdlOiAiCisJICAgICJleHRlbnQgYXQgJXAgb2Ygc2l6ZSAlenUiLCBw dXJnZV9hZGRyLCBwdXJnZV9zaXplKTsKKworCWhwZGF0YV9wdXJnZV9lbmQoJmhwZGF0YSwgJnB1 cmdlX3N0YXRlKTsKKworCWV4cGVjdF96dV9lcShocGRhdGFfbnRvdWNoZWRfZ2V0KCZocGRhdGEp LCBIVUdFUEFHRV9QQUdFUyAvIDQsICIiKTsKK30KK1RFU1RfRU5ECisKK1RFU1RfQkVHSU4odGVz dF9wdXJnZV9vdmVyX3JldGFpbmVkKSB7CisJdm9pZCAqcHVyZ2VfYWRkcjsKKwlzaXplX3QgcHVy Z2Vfc2l6ZTsKKworCWhwZGF0YV90IGhwZGF0YTsKKwlocGRhdGFfaW5pdCgmaHBkYXRhLCBIUERB VEFfQUREUiwgSFBEQVRBX0FHRSk7CisKKwkvKiBBbGxvY2F0ZSB0aGUgZmlyc3QgMy80IG9mIHRo ZSBwYWdlcy4gKi8KKwl2b2lkICphbGxvYyA9IGhwZGF0YV9yZXNlcnZlX2FsbG9jKCZocGRhdGEs IDMgKiBIVUdFUEFHRV9QQUdFUyAvIDQgICogUEFHRSk7CisJZXhwZWN0X3B0cl9lcShhbGxvYywg SFBEQVRBX0FERFIsICIiKTsKKworCS8qIEZyZWUgdGhlIHNlY29uZCBxdWFydGVyLiAqLworCXZv aWQgKnNlY29uZF9xdWFydGVyID0KKwkgICAgKHZvaWQgKikoKHVpbnRwdHJfdClhbGxvYyArIEhV R0VQQUdFX1BBR0VTIC8gNCAqIFBBR0UpOworCWhwZGF0YV91bnJlc2VydmUoJmhwZGF0YSwgc2Vj b25kX3F1YXJ0ZXIsIEhVR0VQQUdFX1BBR0VTIC8gNCAqIFBBR0UpOworCisJZXhwZWN0X3p1X2Vx KGhwZGF0YV9udG91Y2hlZF9nZXQoJmhwZGF0YSksIDMgKiBIVUdFUEFHRV9QQUdFUyAvIDQsICIi KTsKKworCS8qIFB1cmdlIHRoZSBzZWNvbmQgcXVhcnRlci4gKi8KKwlocGRhdGFfYWxsb2NfYWxs b3dlZF9zZXQoJmhwZGF0YSwgZmFsc2UpOworCWhwZGF0YV9wdXJnZV9zdGF0ZV90IHB1cmdlX3N0 YXRlOworCXNpemVfdCB0b19wdXJnZV9kaXJ0eSA9IGhwZGF0YV9wdXJnZV9iZWdpbigmaHBkYXRh LCAmcHVyZ2Vfc3RhdGUpOworCWV4cGVjdF96dV9lcShIVUdFUEFHRV9QQUdFUyAvIDQsIHRvX3B1 cmdlX2RpcnR5LCAiIik7CisKKwlib29sIGdvdF9yZXN1bHQgPSBocGRhdGFfcHVyZ2VfbmV4dCgm aHBkYXRhLCAmcHVyZ2Vfc3RhdGUsICZwdXJnZV9hZGRyLAorCSAgICAmcHVyZ2Vfc2l6ZSk7CisJ ZXhwZWN0X3RydWUoZ290X3Jlc3VsdCwgIiIpOworCWV4cGVjdF9wdHJfZXEoc2Vjb25kX3F1YXJ0 ZXIsIHB1cmdlX2FkZHIsICIiKTsKKwlleHBlY3RfenVfZXEoSFVHRVBBR0VfUEFHRVMgLyA0ICog UEFHRSwgcHVyZ2Vfc2l6ZSwgIiIpOworCisJZ290X3Jlc3VsdCA9IGhwZGF0YV9wdXJnZV9uZXh0 KCZocGRhdGEsICZwdXJnZV9zdGF0ZSwgJnB1cmdlX2FkZHIsCisJICAgICZwdXJnZV9zaXplKTsK KwlleHBlY3RfZmFsc2UoZ290X3Jlc3VsdCwgIlVuZXhwZWN0ZWQgYWRkaXRpb25hbCBwdXJnZSBy YW5nZTogIgorCSAgICAiZXh0ZW50IGF0ICVwIG9mIHNpemUgJXp1IiwgcHVyZ2VfYWRkciwgcHVy Z2Vfc2l6ZSk7CisJaHBkYXRhX3B1cmdlX2VuZCgmaHBkYXRhLCAmcHVyZ2Vfc3RhdGUpOworCisJ ZXhwZWN0X3p1X2VxKGhwZGF0YV9udG91Y2hlZF9nZXQoJmhwZGF0YSksIEhVR0VQQUdFX1BBR0VT IC8gMiwgIiIpOworCisJLyogRnJlZSB0aGUgZmlyc3QgYW5kIHRoaXJkIHF1YXJ0ZXIuICovCisJ aHBkYXRhX3VucmVzZXJ2ZSgmaHBkYXRhLCBIUERBVEFfQUREUiwgSFVHRVBBR0VfUEFHRVMgLyA0 ICogUEFHRSk7CisJaHBkYXRhX3VucmVzZXJ2ZSgmaHBkYXRhLAorCSAgICAodm9pZCAqKSgodWlu dHB0cl90KWFsbG9jICsgMiAqIEhVR0VQQUdFX1BBR0VTIC8gNCAqIFBBR0UpLAorCSAgICBIVUdF UEFHRV9QQUdFUyAvIDQgKiBQQUdFKTsKKworCS8qCisJICogUHVyZ2UgYWdhaW4uICBUaGUgc2Vj b25kIHF1YXJ0ZXIgaXMgcmV0YWluZWQsIHNvIHdlIGNhbiBzYWZlbHkKKwkgKiByZS1wdXJnZSBp dC4gIFdlIGV4cGVjdCBhIHNpbmdsZSBwdXJnZSBvZiAzLzQgb2YgdGhlIGh1Z2VwYWdlLAorCSAq IHB1cmdpbmcgaGFsZiBpdHMgcGFnZXMuCisJICovCisJdG9fcHVyZ2VfZGlydHkgPSBocGRhdGFf cHVyZ2VfYmVnaW4oJmhwZGF0YSwgJnB1cmdlX3N0YXRlKTsKKwlleHBlY3RfenVfZXEoSFVHRVBB R0VfUEFHRVMgLyAyLCB0b19wdXJnZV9kaXJ0eSwgIiIpOworCisJZ290X3Jlc3VsdCA9IGhwZGF0 YV9wdXJnZV9uZXh0KCZocGRhdGEsICZwdXJnZV9zdGF0ZSwgJnB1cmdlX2FkZHIsCisJICAgICZw dXJnZV9zaXplKTsKKwlleHBlY3RfdHJ1ZShnb3RfcmVzdWx0LCAiIik7CisJZXhwZWN0X3B0cl9l cShIUERBVEFfQUREUiwgcHVyZ2VfYWRkciwgIiIpOworCWV4cGVjdF96dV9lcSgzICogSFVHRVBB R0VfUEFHRVMgLyA0ICogUEFHRSwgcHVyZ2Vfc2l6ZSwgIiIpOworCisJZ290X3Jlc3VsdCA9IGhw ZGF0YV9wdXJnZV9uZXh0KCZocGRhdGEsICZwdXJnZV9zdGF0ZSwgJnB1cmdlX2FkZHIsCisJICAg ICZwdXJnZV9zaXplKTsKKwlleHBlY3RfZmFsc2UoZ290X3Jlc3VsdCwgIlVuZXhwZWN0ZWQgYWRk aXRpb25hbCBwdXJnZSByYW5nZTogIgorCSAgICAiZXh0ZW50IGF0ICVwIG9mIHNpemUgJXp1Iiwg cHVyZ2VfYWRkciwgcHVyZ2Vfc2l6ZSk7CisJaHBkYXRhX3B1cmdlX2VuZCgmaHBkYXRhLCAmcHVy Z2Vfc3RhdGUpOworCisJZXhwZWN0X3p1X2VxKGhwZGF0YV9udG91Y2hlZF9nZXQoJmhwZGF0YSks IDAsICIiKTsKK30KK1RFU1RfRU5ECisKK1RFU1RfQkVHSU4odGVzdF9odWdpZnkpIHsKKwlocGRh dGFfdCBocGRhdGE7CisJaHBkYXRhX2luaXQoJmhwZGF0YSwgSFBEQVRBX0FERFIsIEhQREFUQV9B R0UpOworCisJdm9pZCAqYWxsb2MgPSBocGRhdGFfcmVzZXJ2ZV9hbGxvYygmaHBkYXRhLCBIVUdF UEFHRSAvIDIpOworCWV4cGVjdF9wdHJfZXEoYWxsb2MsIEhQREFUQV9BRERSLCAiIik7CisKKwll eHBlY3RfenVfZXEoSFVHRVBBR0VfUEFHRVMgLyAyLCBocGRhdGFfbnRvdWNoZWRfZ2V0KCZocGRh dGEpLCAiIik7CisKKwlocGRhdGFfaHVnaWZ5KCZocGRhdGEpOworCisJLyogSHVnZWlmeWluZyBz aG91bGQgaGF2ZSBpbmNyZWFzZWQgdGhlIGRpcnR5IHBhZ2UgY291bnQuICovCisJZXhwZWN0X3p1 X2VxKEhVR0VQQUdFX1BBR0VTLCBocGRhdGFfbnRvdWNoZWRfZ2V0KCZocGRhdGEpLCAiIik7Cit9 CitURVNUX0VORAorCitpbnQgbWFpbih2b2lkKSB7CisJcmV0dXJuIHRlc3Rfbm9fcmVlbnRyYW5j eSgKKwkgICAgdGVzdF9yZXNlcnZlX2FsbG9jLAorCSAgICB0ZXN0X3B1cmdlX3NpbXBsZSwKKwkg ICAgdGVzdF9wdXJnZV9pbnRlcnZlbmluZ19kYWxsb2MsCisJICAgIHRlc3RfcHVyZ2Vfb3Zlcl9y ZXRhaW5lZCwKKwkgICAgdGVzdF9odWdpZnkpOworfQoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNl LTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9odWdlLmMgYi8zODktZHMtYmFz ZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvaHVnZS5jCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjNjRlNTAKLS0tIC9kZXYvbnVsbAorKysgYi8zODkt ZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvaHVnZS5jCkBAIC0w LDAgKzEsMTA4IEBACisjaW5jbHVkZSAidGVzdC9qZW1hbGxvY190ZXN0LmgiCisKKy8qIFRocmVz aG9sZDogMiA8PCAyMCA9IDIwOTcxNTIuICovCitjb25zdCBjaGFyICptYWxsb2NfY29uZiA9ICJv dmVyc2l6ZV90aHJlc2hvbGQ6MjA5NzE1MiI7CisKKyNkZWZpbmUgSFVHRV9TWiAoMiA8PCAyMCkK KyNkZWZpbmUgU01BTExfU1ogKDgpCisKK1RFU1RfQkVHSU4oaHVnZV9iaW5kX3RocmVhZCkgewor CXVuc2lnbmVkIGFyZW5hMSwgYXJlbmEyOworCXNpemVfdCBzeiA9IHNpemVvZih1bnNpZ25lZCk7 CisKKwkvKiBCaW5kIHRvIGEgbWFudWFsIGFyZW5hLiAqLworCWV4cGVjdF9kX2VxKG1hbGxjdGwo ImFyZW5hcy5jcmVhdGUiLCAmYXJlbmExLCAmc3osIE5VTEwsIDApLCAwLAorCSAgICAiRmFpbGVk IHRvIGNyZWF0ZSBhcmVuYSIpOworCWV4cGVjdF9kX2VxKG1hbGxjdGwoInRocmVhZC5hcmVuYSIs IE5VTEwsIE5VTEwsICZhcmVuYTEsCisJICAgIHNpemVvZihhcmVuYTEpKSwgMCwgIkZhaWwgdG8g YmluZCB0aHJlYWQiKTsKKworCXZvaWQgKnB0ciA9IG1hbGxvY3goSFVHRV9TWiwgMCk7CisJZXhw ZWN0X3B0cl9ub3RfbnVsbChwdHIsICJGYWlsIHRvIGFsbG9jYXRlIGh1Z2Ugc2l6ZSIpOworCWV4 cGVjdF9kX2VxKG1hbGxjdGwoImFyZW5hcy5sb29rdXAiLCAmYXJlbmEyLCAmc3osICZwdHIsCisJ ICAgIHNpemVvZihwdHIpKSwgMCwgIlVuZXhwZWN0ZWQgbWFsbGN0bCgpIGZhaWx1cmUiKTsKKwll eHBlY3RfdV9lcShhcmVuYTEsIGFyZW5hMiwgIldyb25nIGFyZW5hIHVzZWQgYWZ0ZXIgYmluZGlu ZyIpOworCWRhbGxvY3gocHRyLCAwKTsKKworCS8qIFN3aXRjaCBiYWNrIHRvIGFyZW5hIDAuICov CisJdGVzdF9za2lwX2lmKGhhdmVfcGVyY3B1X2FyZW5hICYmCisJICAgIFBFUkNQVV9BUkVOQV9F TkFCTEVEKG9wdF9wZXJjcHVfYXJlbmEpKTsKKwlhcmVuYTIgPSAwOworCWV4cGVjdF9kX2VxKG1h bGxjdGwoInRocmVhZC5hcmVuYSIsIE5VTEwsIE5VTEwsICZhcmVuYTIsCisJICAgIHNpemVvZihh cmVuYTIpKSwgMCwgIkZhaWwgdG8gYmluZCB0aHJlYWQiKTsKKwlwdHIgPSBtYWxsb2N4KFNNQUxM X1NaLCBNQUxMT0NYX1RDQUNIRV9OT05FKTsKKwlleHBlY3RfZF9lcShtYWxsY3RsKCJhcmVuYXMu bG9va3VwIiwgJmFyZW5hMiwgJnN6LCAmcHRyLAorCSAgICBzaXplb2YocHRyKSksIDAsICJVbmV4 cGVjdGVkIG1hbGxjdGwoKSBmYWlsdXJlIik7CisJZXhwZWN0X3VfZXEoYXJlbmEyLCAwLCAiV3Jv bmcgYXJlbmEgdXNlZCBhZnRlciBiaW5kaW5nIik7CisJZGFsbG9jeChwdHIsIE1BTExPQ1hfVENB Q0hFX05PTkUpOworCisJLyogVGhlbiBodWdlIGFsbG9jYXRpb24gc2hvdWxkIHVzZSB0aGUgaHVn ZSBhcmVuYS4gKi8KKwlwdHIgPSBtYWxsb2N4KEhVR0VfU1osIDApOworCWV4cGVjdF9wdHJfbm90 X251bGwocHRyLCAiRmFpbCB0byBhbGxvY2F0ZSBodWdlIHNpemUiKTsKKwlleHBlY3RfZF9lcSht YWxsY3RsKCJhcmVuYXMubG9va3VwIiwgJmFyZW5hMiwgJnN6LCAmcHRyLAorCSAgICBzaXplb2Yo cHRyKSksIDAsICJVbmV4cGVjdGVkIG1hbGxjdGwoKSBmYWlsdXJlIik7CisJZXhwZWN0X3VfbmUo YXJlbmEyLCAwLCAiV3JvbmcgYXJlbmEgdXNlZCBhZnRlciBiaW5kaW5nIik7CisJZXhwZWN0X3Vf bmUoYXJlbmExLCBhcmVuYTIsICJXcm9uZyBhcmVuYSB1c2VkIGFmdGVyIGJpbmRpbmciKTsKKwlk YWxsb2N4KHB0ciwgMCk7Cit9CitURVNUX0VORAorCitURVNUX0JFR0lOKGh1Z2VfbWFsbG9jeCkg eworCXVuc2lnbmVkIGFyZW5hMSwgYXJlbmEyOworCXNpemVfdCBzeiA9IHNpemVvZih1bnNpZ25l ZCk7CisKKwlleHBlY3RfZF9lcShtYWxsY3RsKCJhcmVuYXMuY3JlYXRlIiwgJmFyZW5hMSwgJnN6 LCBOVUxMLCAwKSwgMCwKKwkgICAgIkZhaWxlZCB0byBjcmVhdGUgYXJlbmEiKTsKKwl2b2lkICpo dWdlID0gbWFsbG9jeChIVUdFX1NaLCBNQUxMT0NYX0FSRU5BKGFyZW5hMSkpOworCWV4cGVjdF9w dHJfbm90X251bGwoaHVnZSwgIkZhaWwgdG8gYWxsb2NhdGUgaHVnZSBzaXplIik7CisJZXhwZWN0 X2RfZXEobWFsbGN0bCgiYXJlbmFzLmxvb2t1cCIsICZhcmVuYTIsICZzeiwgJmh1Z2UsCisJICAg IHNpemVvZihodWdlKSksIDAsICJVbmV4cGVjdGVkIG1hbGxjdGwoKSBmYWlsdXJlIik7CisJZXhw ZWN0X3VfZXEoYXJlbmExLCBhcmVuYTIsICJXcm9uZyBhcmVuYSB1c2VkIGZvciBtYWxsb2N4Iik7 CisJZGFsbG9jeChodWdlLCBNQUxMT0NYX0FSRU5BKGFyZW5hMSkpOworCisJdm9pZCAqaHVnZTIg PSBtYWxsb2N4KEhVR0VfU1osIDApOworCWV4cGVjdF9wdHJfbm90X251bGwoaHVnZSwgIkZhaWwg dG8gYWxsb2NhdGUgaHVnZSBzaXplIik7CisJZXhwZWN0X2RfZXEobWFsbGN0bCgiYXJlbmFzLmxv b2t1cCIsICZhcmVuYTIsICZzeiwgJmh1Z2UyLAorCSAgICBzaXplb2YoaHVnZTIpKSwgMCwgIlVu ZXhwZWN0ZWQgbWFsbGN0bCgpIGZhaWx1cmUiKTsKKwlleHBlY3RfdV9uZShhcmVuYTEsIGFyZW5h MiwKKwkgICAgIkh1Z2UgYWxsb2NhdGlvbiBzaG91bGQgbm90IGNvbWUgZnJvbSB0aGUgbWFudWFs IGFyZW5hLiIpOworCWV4cGVjdF91X25lKGFyZW5hMiwgMCwKKwkgICAgIkh1Z2UgYWxsb2NhdGlv biBzaG91bGQgbm90IGNvbWUgZnJvbSB0aGUgYXJlbmEgMC4iKTsKKwlkYWxsb2N4KGh1Z2UyLCAw KTsKK30KK1RFU1RfRU5ECisKK1RFU1RfQkVHSU4oaHVnZV9hbGxvY2F0aW9uKSB7CisJdW5zaWdu ZWQgYXJlbmExLCBhcmVuYTI7CisKKwl2b2lkICpwdHIgPSBtYWxsb2N4KEhVR0VfU1osIDApOwor CWV4cGVjdF9wdHJfbm90X251bGwocHRyLCAiRmFpbCB0byBhbGxvY2F0ZSBodWdlIHNpemUiKTsK KwlzaXplX3Qgc3ogPSBzaXplb2YodW5zaWduZWQpOworCWV4cGVjdF9kX2VxKG1hbGxjdGwoImFy ZW5hcy5sb29rdXAiLCAmYXJlbmExLCAmc3osICZwdHIsIHNpemVvZihwdHIpKSwKKwkgICAgMCwg IlVuZXhwZWN0ZWQgbWFsbGN0bCgpIGZhaWx1cmUiKTsKKwlleHBlY3RfdV9ndChhcmVuYTEsIDAs ICJIdWdlIGFsbG9jYXRpb24gc2hvdWxkIG5vdCBjb21lIGZyb20gYXJlbmEgMCIpOworCWRhbGxv Y3gocHRyLCAwKTsKKworCXB0ciA9IG1hbGxvY3goSFVHRV9TWiA+PiAxLCAwKTsKKwlleHBlY3Rf cHRyX25vdF9udWxsKHB0ciwgIkZhaWwgdG8gYWxsb2NhdGUgaGFsZiBodWdlIHNpemUiKTsKKwll eHBlY3RfZF9lcShtYWxsY3RsKCJhcmVuYXMubG9va3VwIiwgJmFyZW5hMiwgJnN6LCAmcHRyLAor CSAgICBzaXplb2YocHRyKSksIDAsICJVbmV4cGVjdGVkIG1hbGxjdGwoKSBmYWlsdXJlIik7CisJ ZXhwZWN0X3VfbmUoYXJlbmExLCBhcmVuYTIsICJXcm9uZyBhcmVuYSB1c2VkIGZvciBoYWxmIGh1 Z2UiKTsKKwlkYWxsb2N4KHB0ciwgMCk7CisKKwlwdHIgPSBtYWxsb2N4KFNNQUxMX1NaLCBNQUxM T0NYX1RDQUNIRV9OT05FKTsKKwlleHBlY3RfcHRyX25vdF9udWxsKHB0ciwgIkZhaWwgdG8gYWxs b2NhdGUgc21hbGwgc2l6ZSIpOworCWV4cGVjdF9kX2VxKG1hbGxjdGwoImFyZW5hcy5sb29rdXAi LCAmYXJlbmEyLCAmc3osICZwdHIsCisJICAgIHNpemVvZihwdHIpKSwgMCwgIlVuZXhwZWN0ZWQg bWFsbGN0bCgpIGZhaWx1cmUiKTsKKwlleHBlY3RfdV9uZShhcmVuYTEsIGFyZW5hMiwKKwkgICAg Ikh1Z2UgYW5kIHNtYWxsIHNob3VsZCBiZSBmcm9tIGRpZmZlcmVudCBhcmVuYXMiKTsKKwlkYWxs b2N4KHB0ciwgMCk7Cit9CitURVNUX0VORAorCitpbnQKK21haW4odm9pZCkgeworCXJldHVybiB0 ZXN0KAorCSAgICBodWdlX2FsbG9jYXRpb24sCisJICAgIGh1Z2VfbWFsbG9jeCwKKwkgICAgaHVn ZV9iaW5kX3RocmVhZCk7Cit9CgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQv amVtYWxsb2MtNS4zLjAvdGVzdC91bml0L2luc3BlY3QuYyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1 aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9pbnNwZWN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMC4uZmU1OWU1OQotLS0gL2Rldi9udWxsCisrKyBiLzM4OS1kcy1iYXNl LTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9pbnNwZWN0LmMKQEAgLTAsMCAr MSwyNzggQEAKKyNpbmNsdWRlICJ0ZXN0L2plbWFsbG9jX3Rlc3QuaCIKKworI2RlZmluZSBURVNU X1VUSUxfRUlOVkFMKG5vZGUsIGEsIGIsIGMsIGQsIHdoeV9pbnZhbCkgZG8gewkJXAorCWFzc2Vy dF9kX2VxKG1hbGxjdGwoImV4cGVyaW1lbnRhbC51dGlsaXphdGlvbi4iIG5vZGUsCQlcCisJICAg IGEsIGIsIGMsIGQpLCBFSU5WQUwsICJTaG91bGQgZmFpbCB3aGVuICIgd2h5X2ludmFsKTsJXAor CWFzc2VydF96dV9lcShvdXRfc3osIG91dF9zel9yZWYsCQkJCVwKKwkgICAgIk91dHB1dCBzaXpl IHRvdWNoZWQgd2hlbiBnaXZlbiBpbnZhbGlkIGFyZ3VtZW50cyIpOwlcCisJYXNzZXJ0X2RfZXEo bWVtY21wKG91dCwgb3V0X3JlZiwgb3V0X3N6X3JlZiksIDAsCQlcCisJICAgICJPdXRwdXQgY29u dGVudCB0b3VjaGVkIHdoZW4gZ2l2ZW4gaW52YWxpZCBhcmd1bWVudHMiKTsJXAorfSB3aGlsZSAo MCkKKworI2RlZmluZSBURVNUX1VUSUxfUVVFUllfRUlOVkFMKGEsIGIsIGMsIGQsIHdoeV9pbnZh bCkJCQlcCisJVEVTVF9VVElMX0VJTlZBTCgicXVlcnkiLCBhLCBiLCBjLCBkLCB3aHlfaW52YWwp CisjZGVmaW5lIFRFU1RfVVRJTF9CQVRDSF9FSU5WQUwoYSwgYiwgYywgZCwgd2h5X2ludmFsKQkJ CVwKKwlURVNUX1VUSUxfRUlOVkFMKCJiYXRjaF9xdWVyeSIsIGEsIGIsIGMsIGQsIHdoeV9pbnZh bCkKKworI2RlZmluZSBURVNUX1VUSUxfVkFMSUQobm9kZSkgZG8gewkJCQkJXAorICAgICAgICBh c3NlcnRfZF9lcShtYWxsY3RsKCJleHBlcmltZW50YWwudXRpbGl6YXRpb24uIiBub2RlLAkJXAor CSAgICBvdXQsICZvdXRfc3osIGluLCBpbl9zeiksIDAsCQkJCVwKKwkgICAgIlNob3VsZCByZXR1 cm4gMCBvbiBjb3JyZWN0IGFyZ3VtZW50cyIpOwkJCVwKKyAgICAgICAgZXhwZWN0X3p1X2VxKG91 dF9zeiwgb3V0X3N6X3JlZiwgImluY29ycmVjdCBvdXRwdXQgc2l6ZSIpOwlcCisJZXhwZWN0X2Rf bmUobWVtY21wKG91dCwgb3V0X3JlZiwgb3V0X3N6X3JlZiksIDAsCQlcCisJICAgICJPdXRwdXQg Y29udGVudCBzaG91bGQgYmUgY2hhbmdlZCIpOwkJCVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUg VEVTVF9VVElMX0JBVENIX1ZBTElEIFRFU1RfVVRJTF9WQUxJRCgiYmF0Y2hfcXVlcnkiKQorCisj ZGVmaW5lIFRFU1RfTUFYX1NJWkUgKDEgPDwgMjApCisKK1RFU1RfQkVHSU4odGVzdF9xdWVyeSkg eworCXNpemVfdCBzejsKKwkvKgorCSAqIFNlbGVjdCBzb21lIHNpemVzIHRoYXQgY2FuIHNwYW4g Ym90aCBzbWFsbCBhbmQgbGFyZ2Ugc2l6ZXMsIGFuZCBhcmUKKwkgKiBudW1lcmljYWxseSB1bnJl bGF0ZWQgdG8gYW55IHNpemUgYm91bmRhcmllcy4KKwkgKi8KKwlmb3IgKHN6ID0gNzsgc3ogPD0g VEVTVF9NQVhfU0laRSAmJiBzeiA8PSBTQ19MQVJHRV9NQVhDTEFTUzsKKwkgICAgc3ogKz0gKHN6 IDw9IFNDX1NNQUxMX01BWENMQVNTID8gMTAwOSA6IDk5OTg5KSkgeworCQl2b2lkICpwID0gbWFs bG9jeChzeiwgMCk7CisJCXZvaWQgKippbiA9ICZwOworCQlzaXplX3QgaW5fc3ogPSBzaXplb2Yo Y29uc3Qgdm9pZCAqKTsKKwkJc2l6ZV90IG91dF9zeiA9IHNpemVvZih2b2lkICopICsgc2l6ZW9m KHNpemVfdCkgKiA1OworCQl2b2lkICpvdXQgPSBtYWxsb2N4KG91dF9zeiwgMCk7CisJCXZvaWQg Km91dF9yZWYgPSBtYWxsb2N4KG91dF9zeiwgMCk7CisJCXNpemVfdCBvdXRfc3pfcmVmID0gb3V0 X3N6OworCisJCWFzc2VydF9wdHJfbm90X251bGwocCwKKwkJICAgICJ0ZXN0IHBvaW50ZXIgYWxs b2NhdGlvbiBmYWlsZWQiKTsKKwkJYXNzZXJ0X3B0cl9ub3RfbnVsbChvdXQsCisJCSAgICAidGVz dCBvdXRwdXQgYWxsb2NhdGlvbiBmYWlsZWQiKTsKKwkJYXNzZXJ0X3B0cl9ub3RfbnVsbChvdXRf cmVmLAorCQkgICAgInRlc3QgcmVmZXJlbmNlIG91dHB1dCBhbGxvY2F0aW9uIGZhaWxlZCIpOwor CisjZGVmaW5lIFNMQUJDVVJfUkVBRChvdXQpICgqKHZvaWQgKiopb3V0KQorI2RlZmluZSBDT1VO VFMob3V0KSAoKHNpemVfdCAqKSgodm9pZCAqKilvdXQgKyAxKSkKKyNkZWZpbmUgTkZSRUVfUkVB RChvdXQpIENPVU5UUyhvdXQpWzBdCisjZGVmaW5lIE5SRUdTX1JFQUQob3V0KSBDT1VOVFMob3V0 KVsxXQorI2RlZmluZSBTSVpFX1JFQUQob3V0KSBDT1VOVFMob3V0KVsyXQorI2RlZmluZSBCSU5f TkZSRUVfUkVBRChvdXQpIENPVU5UUyhvdXQpWzNdCisjZGVmaW5lIEJJTl9OUkVHU19SRUFEKG91 dCkgQ09VTlRTKG91dClbNF0KKworCQlTTEFCQ1VSX1JFQUQob3V0KSA9IE5VTEw7CisJCU5GUkVF X1JFQUQob3V0KSA9IE5SRUdTX1JFQUQob3V0KSA9IFNJWkVfUkVBRChvdXQpID0gLTE7CisJCUJJ Tl9ORlJFRV9SRUFEKG91dCkgPSBCSU5fTlJFR1NfUkVBRChvdXQpID0gLTE7CisJCW1lbWNweShv dXRfcmVmLCBvdXQsIG91dF9zeik7CisKKwkJLyogVGVzdCBpbnZhbGlkIGFyZ3VtZW50KHMpIGVy cm9ycyAqLworCQlURVNUX1VUSUxfUVVFUllfRUlOVkFMKE5VTEwsICZvdXRfc3osIGluLCBpbl9z eiwKKwkJICAgICJvbGQgaXMgTlVMTCIpOworCQlURVNUX1VUSUxfUVVFUllfRUlOVkFMKG91dCwg TlVMTCwgaW4sIGluX3N6LAorCQkgICAgIm9sZGxlbnAgaXMgTlVMTCIpOworCQlURVNUX1VUSUxf UVVFUllfRUlOVkFMKG91dCwgJm91dF9zeiwgTlVMTCwgaW5fc3osCisJCSAgICAibmV3cCBpcyBO VUxMIik7CisJCVRFU1RfVVRJTF9RVUVSWV9FSU5WQUwob3V0LCAmb3V0X3N6LCBpbiwgMCwKKwkJ ICAgICJuZXdsZW4gaXMgemVybyIpOworCQlpbl9zeiAtPSAxOworCQlURVNUX1VUSUxfUVVFUllf RUlOVkFMKG91dCwgJm91dF9zeiwgaW4sIGluX3N6LAorCQkgICAgImludmFsaWQgbmV3bGVuIik7 CisJCWluX3N6ICs9IDE7CisJCW91dF9zel9yZWYgPSBvdXRfc3ogLT0gMiAqIHNpemVvZihzaXpl X3QpOworCQlURVNUX1VUSUxfUVVFUllfRUlOVkFMKG91dCwgJm91dF9zeiwgaW4sIGluX3N6LAor CQkgICAgImludmFsaWQgKm9sZGxlbnAiKTsKKwkJb3V0X3N6X3JlZiA9IG91dF9zeiArPSAyICog c2l6ZW9mKHNpemVfdCk7CisKKwkJLyogRXhhbWluZSBvdXRwdXQgZm9yIHZhbGlkIGNhbGwgKi8K KwkJVEVTVF9VVElMX1ZBTElEKCJxdWVyeSIpOworCQlleHBlY3RfenVfbGUoc3osIFNJWkVfUkVB RChvdXQpLAorCQkgICAgIkV4dGVudCBzaXplIHNob3VsZCBiZSBhdCBsZWFzdCBhbGxvY2F0aW9u IHNpemUiKTsKKwkJZXhwZWN0X3p1X2VxKFNJWkVfUkVBRChvdXQpICYgKFBBR0UgLSAxKSwgMCwK KwkJICAgICJFeHRlbnQgc2l6ZSBzaG91bGQgYmUgYSBtdWx0aXBsZSBvZiBwYWdlIHNpemUiKTsK KworCQkvKgorCQkgKiBXZSBkb24ndCBkbyBtdWNoIGJpbiBjaGVja2luZyBpZiBwcm9mIGlzIG9u LCBzaW5jZSBwcm9maWxpbmcKKwkJICogY2FuIHByb2R1Y2UgZXh0ZW50cyB0aGF0IGFyZSBmb3Ig c21hbGwgc2l6ZSBjbGFzc2VzIGJ1dCBub3QKKwkJICogc2xhYnMsIHdoaWNoIGludGVyZmVyZXMg d2l0aCB0aGluZ3MgbGlrZSByZWdpb24gY291bnRzLgorCQkgKi8KKwkJaWYgKCFvcHRfcHJvZiAm JiBzeiA8PSBTQ19TTUFMTF9NQVhDTEFTUykgeworCQkJZXhwZWN0X3p1X2xlKE5GUkVFX1JFQUQo b3V0KSwgTlJFR1NfUkVBRChvdXQpLAorCQkJICAgICJFeHRlbnQgZnJlZSBjb3VudCBleGNlZWRl ZCByZWdpb24gY291bnQiKTsKKwkJCWV4cGVjdF96dV9sZShOUkVHU19SRUFEKG91dCksIFNJWkVf UkVBRChvdXQpLAorCQkJICAgICJFeHRlbnQgcmVnaW9uIGNvdW50IGV4Y2VlZGVkIHNpemUiKTsK KwkJCWV4cGVjdF96dV9uZShOUkVHU19SRUFEKG91dCksIDAsCisJCQkgICAgIkV4dGVudCByZWdp b24gY291bnQgbXVzdCBiZSBwb3NpdGl2ZSIpOworCQkJZXhwZWN0X3RydWUoTkZSRUVfUkVBRChv dXQpID09IDAgfHwgKFNMQUJDVVJfUkVBRChvdXQpCisJCQkgICAgIT0gTlVMTCAmJiBTTEFCQ1VS X1JFQUQob3V0KSA8PSBwKSwKKwkJCSAgICAiQWxsb2NhdGlvbiBzaG91bGQgZm9sbG93IGZpcnN0 IGZpdCBwcmluY2lwbGUiKTsKKworCQkJaWYgKGNvbmZpZ19zdGF0cykgeworCQkJCWV4cGVjdF96 dV9sZShCSU5fTkZSRUVfUkVBRChvdXQpLAorCQkJCSAgICBCSU5fTlJFR1NfUkVBRChvdXQpLAor CQkJCSAgICAiQmluIGZyZWUgY291bnQgZXhjZWVkZWQgcmVnaW9uIGNvdW50Iik7CisJCQkJZXhw ZWN0X3p1X25lKEJJTl9OUkVHU19SRUFEKG91dCksIDAsCisJCQkJICAgICJCaW4gcmVnaW9uIGNv dW50IG11c3QgYmUgcG9zaXRpdmUiKTsKKwkJCQlleHBlY3RfenVfbGUoTkZSRUVfUkVBRChvdXQp LAorCQkJCSAgICBCSU5fTkZSRUVfUkVBRChvdXQpLAorCQkJCSAgICAiRXh0ZW50IGZyZWUgY291 bnQgZXhjZWVkZWQgYmluIGZyZWUgY291bnQiKTsKKwkJCQlleHBlY3RfenVfbGUoTlJFR1NfUkVB RChvdXQpLAorCQkJCSAgICBCSU5fTlJFR1NfUkVBRChvdXQpLAorCQkJCSAgICAiRXh0ZW50IHJl Z2lvbiBjb3VudCBleGNlZWRlZCAiCisJCQkJICAgICJiaW4gcmVnaW9uIGNvdW50Iik7CisJCQkJ ZXhwZWN0X3p1X2VxKEJJTl9OUkVHU19SRUFEKG91dCkKKwkJCQkgICAgJSBOUkVHU19SRUFEKG91 dCksIDAsCisJCQkJICAgICJCaW4gcmVnaW9uIGNvdW50IGlzbid0IGEgbXVsdGlwbGUgb2YgIgor CQkJCSAgICAiZXh0ZW50IHJlZ2lvbiBjb3VudCIpOworCQkJCWV4cGVjdF96dV9sZSgKKwkJCQkg ICAgQklOX05GUkVFX1JFQUQob3V0KSAtIE5GUkVFX1JFQUQob3V0KSwKKwkJCQkgICAgQklOX05S RUdTX1JFQUQob3V0KSAtIE5SRUdTX1JFQUQob3V0KSwKKwkJCQkgICAgIkZyZWUgY291bnQgaW4g b3RoZXIgZXh0ZW50cyBpbiB0aGUgYmluICIKKwkJCQkgICAgImV4Y2VlZGVkIHJlZ2lvbiBjb3Vu dCBpbiBvdGhlciBleHRlbnRzICIKKwkJCQkgICAgImluIHRoZSBiaW4iKTsKKwkJCQlleHBlY3Rf enVfbGUoTlJFR1NfUkVBRChvdXQpIC0gTkZSRUVfUkVBRChvdXQpLAorCQkJCSAgICBCSU5fTlJF R1NfUkVBRChvdXQpIC0gQklOX05GUkVFX1JFQUQob3V0KSwKKwkJCQkgICAgIkV4dGVudCB1dGls aXplZCBjb3VudCBleGNlZWRlZCAiCisJCQkJICAgICJiaW4gdXRpbGl6ZWQgY291bnQiKTsKKwkJ CX0KKwkJfSBlbHNlIGlmIChzeiA+IFNDX1NNQUxMX01BWENMQVNTKSB7CisJCQlleHBlY3RfenVf ZXEoTkZSRUVfUkVBRChvdXQpLCAwLAorCQkJICAgICJFeHRlbnQgZnJlZSBjb3VudCBzaG91bGQg YmUgemVybyIpOworCQkJZXhwZWN0X3p1X2VxKE5SRUdTX1JFQUQob3V0KSwgMSwKKwkJCSAgICAi RXh0ZW50IHJlZ2lvbiBjb3VudCBzaG91bGQgYmUgb25lIik7CisJCQlleHBlY3RfcHRyX251bGwo U0xBQkNVUl9SRUFEKG91dCksCisJCQkgICAgIkN1cnJlbnQgc2xhYiBtdXN0IGJlIG51bGwgZm9y IGxhcmdlIHNpemUgY2xhc3NlcyIpOworCQkJaWYgKGNvbmZpZ19zdGF0cykgeworCQkJCWV4cGVj dF96dV9lcShCSU5fTkZSRUVfUkVBRChvdXQpLCAwLAorCQkJCSAgICAiQmluIGZyZWUgY291bnQg bXVzdCBiZSB6ZXJvIGZvciAiCisJCQkJICAgICJsYXJnZSBzaXplcyIpOworCQkJCWV4cGVjdF96 dV9lcShCSU5fTlJFR1NfUkVBRChvdXQpLCAwLAorCQkJCSAgICAiQmluIHJlZ2lvbiBjb3VudCBt dXN0IGJlIHplcm8gZm9yICIKKwkJCQkgICAgImxhcmdlIHNpemVzIik7CisJCQl9CisJCX0KKwor I3VuZGVmIEJJTl9OUkVHU19SRUFECisjdW5kZWYgQklOX05GUkVFX1JFQUQKKyN1bmRlZiBTSVpF X1JFQUQKKyN1bmRlZiBOUkVHU19SRUFECisjdW5kZWYgTkZSRUVfUkVBRAorI3VuZGVmIENPVU5U UworI3VuZGVmIFNMQUJDVVJfUkVBRAorCisJCWZyZWUob3V0X3JlZik7CisJCWZyZWUob3V0KTsK KwkJZnJlZShwKTsKKwl9Cit9CitURVNUX0VORAorCitURVNUX0JFR0lOKHRlc3RfYmF0Y2gpIHsK KwlzaXplX3Qgc3o7CisJLyoKKwkgKiBTZWxlY3Qgc29tZSBzaXplcyB0aGF0IGNhbiBzcGFuIGJv dGggc21hbGwgYW5kIGxhcmdlIHNpemVzLCBhbmQgYXJlCisJICogbnVtZXJpY2FsbHkgdW5yZWxh dGVkIHRvIGFueSBzaXplIGJvdW5kYXJpZXMuCisJICovCisJZm9yIChzeiA9IDE3OyBzeiA8PSBU RVNUX01BWF9TSVpFICYmIHN6IDw9IFNDX0xBUkdFX01BWENMQVNTOworCSAgICBzeiArPSAoc3og PD0gU0NfU01BTExfTUFYQ0xBU1MgPyAxMDE5IDogOTk5OTEpKSB7CisJCXZvaWQgKnAgPSBtYWxs b2N4KHN6LCAwKTsKKwkJdm9pZCAqcSA9IG1hbGxvY3goc3osIDApOworCQl2b2lkICppbltdID0g e3AsIHF9OworCQlzaXplX3QgaW5fc3ogPSBzaXplb2YoY29uc3Qgdm9pZCAqKSAqIDI7CisJCXNp emVfdCBvdXRbXSA9IHstMSwgLTEsIC0xLCAtMSwgLTEsIC0xfTsKKwkJc2l6ZV90IG91dF9zeiA9 IHNpemVvZihzaXplX3QpICogNjsKKwkJc2l6ZV90IG91dF9yZWZbXSA9IHstMSwgLTEsIC0xLCAt MSwgLTEsIC0xfTsKKwkJc2l6ZV90IG91dF9zel9yZWYgPSBvdXRfc3o7CisKKwkJYXNzZXJ0X3B0 cl9ub3RfbnVsbChwLCAidGVzdCBwb2ludGVyIGFsbG9jYXRpb24gZmFpbGVkIik7CisJCWFzc2Vy dF9wdHJfbm90X251bGwocSwgInRlc3QgcG9pbnRlciBhbGxvY2F0aW9uIGZhaWxlZCIpOworCisJ CS8qIFRlc3QgaW52YWxpZCBhcmd1bWVudChzKSBlcnJvcnMgKi8KKwkJVEVTVF9VVElMX0JBVENI X0VJTlZBTChOVUxMLCAmb3V0X3N6LCBpbiwgaW5fc3osCisJCSAgICAib2xkIGlzIE5VTEwiKTsK KwkJVEVTVF9VVElMX0JBVENIX0VJTlZBTChvdXQsIE5VTEwsIGluLCBpbl9zeiwKKwkJICAgICJv bGRsZW5wIGlzIE5VTEwiKTsKKwkJVEVTVF9VVElMX0JBVENIX0VJTlZBTChvdXQsICZvdXRfc3os IE5VTEwsIGluX3N6LAorCQkgICAgIm5ld3AgaXMgTlVMTCIpOworCQlURVNUX1VUSUxfQkFUQ0hf RUlOVkFMKG91dCwgJm91dF9zeiwgaW4sIDAsCisJCSAgICAibmV3bGVuIGlzIHplcm8iKTsKKwkJ aW5fc3ogLT0gMTsKKwkJVEVTVF9VVElMX0JBVENIX0VJTlZBTChvdXQsICZvdXRfc3osIGluLCBp bl9zeiwKKwkJICAgICJuZXdsZW4gaXMgbm90IGFuIGV4YWN0IG11bHRpcGxlIik7CisJCWluX3N6 ICs9IDE7CisJCW91dF9zel9yZWYgPSBvdXRfc3ogLT0gMiAqIHNpemVvZihzaXplX3QpOworCQlU RVNUX1VUSUxfQkFUQ0hfRUlOVkFMKG91dCwgJm91dF9zeiwgaW4sIGluX3N6LAorCQkgICAgIipv bGRsZW5wIGlzIG5vdCBhbiBleGFjdCBtdWx0aXBsZSIpOworCQlvdXRfc3pfcmVmID0gb3V0X3N6 ICs9IDIgKiBzaXplb2Yoc2l6ZV90KTsKKwkJaW5fc3ogLT0gc2l6ZW9mKGNvbnN0IHZvaWQgKik7 CisJCVRFU1RfVVRJTF9CQVRDSF9FSU5WQUwob3V0LCAmb3V0X3N6LCBpbiwgaW5fc3osCisJCSAg ICAiKm9sZGxlbnAgYW5kIG5ld2xlbiBkbyBub3QgbWF0Y2giKTsKKwkJaW5fc3ogKz0gc2l6ZW9m KGNvbnN0IHZvaWQgKik7CisKKwkvKiBFeGFtaW5lIG91dHB1dCBmb3IgdmFsaWQgY2FsbHMgKi8K KyNkZWZpbmUgVEVTVF9FUVVBTF9SRUYoaSwgbWVzc2FnZSkgXAorCWFzc2VydF9kX2VxKG1lbWNt cChvdXQgKyAoaSkgKiAzLCBvdXRfcmVmICsgKGkpICogMywgMyksIDAsIG1lc3NhZ2UpCisKKyNk ZWZpbmUgTkZSRUVfUkVBRChvdXQsIGkpIG91dFsoaSkgKiAzXQorI2RlZmluZSBOUkVHU19SRUFE KG91dCwgaSkgb3V0WyhpKSAqIDMgKyAxXQorI2RlZmluZSBTSVpFX1JFQUQob3V0LCBpKSBvdXRb KGkpICogMyArIDJdCisKKwkJb3V0X3N6X3JlZiA9IG91dF9zeiAvPSAyOworCQlpbl9zeiAvPSAy OworCQlURVNUX1VUSUxfQkFUQ0hfVkFMSUQ7CisJCWV4cGVjdF96dV9sZShzeiwgU0laRV9SRUFE KG91dCwgMCksCisJCSAgICAiRXh0ZW50IHNpemUgc2hvdWxkIGJlIGF0IGxlYXN0IGFsbG9jYXRp b24gc2l6ZSIpOworCQlleHBlY3RfenVfZXEoU0laRV9SRUFEKG91dCwgMCkgJiAoUEFHRSAtIDEp LCAwLAorCQkgICAgIkV4dGVudCBzaXplIHNob3VsZCBiZSBhIG11bHRpcGxlIG9mIHBhZ2Ugc2l6 ZSIpOworCQkvKgorCQkgKiBTZWUgdGhlIGNvcnJlc3BvbmRpbmcgY29tbWVudCBpbiB0ZXN0X3F1 ZXJ5OyBwcm9maWxpbmcgYnJlYWtzCisJCSAqIG91ciBzbGFiIGNvdW50IGV4cGVjdGF0aW9ucy4K KwkJICovCisJCWlmIChzeiA8PSBTQ19TTUFMTF9NQVhDTEFTUyAmJiAhb3B0X3Byb2YpIHsKKwkJ CWV4cGVjdF96dV9sZShORlJFRV9SRUFEKG91dCwgMCksIE5SRUdTX1JFQUQob3V0LCAwKSwKKwkJ CSAgICAiRXh0ZW50IGZyZWUgY291bnQgZXhjZWVkZWQgcmVnaW9uIGNvdW50Iik7CisJCQlleHBl Y3RfenVfbGUoTlJFR1NfUkVBRChvdXQsIDApLCBTSVpFX1JFQUQob3V0LCAwKSwKKwkJCSAgICAi RXh0ZW50IHJlZ2lvbiBjb3VudCBleGNlZWRlZCBzaXplIik7CisJCQlleHBlY3RfenVfbmUoTlJF R1NfUkVBRChvdXQsIDApLCAwLAorCQkJICAgICJFeHRlbnQgcmVnaW9uIGNvdW50IG11c3QgYmUg cG9zaXRpdmUiKTsKKwkJfSBlbHNlIGlmIChzeiA+IFNDX1NNQUxMX01BWENMQVNTKSB7CisJCQll eHBlY3RfenVfZXEoTkZSRUVfUkVBRChvdXQsIDApLCAwLAorCQkJICAgICJFeHRlbnQgZnJlZSBj b3VudCBzaG91bGQgYmUgemVybyIpOworCQkJZXhwZWN0X3p1X2VxKE5SRUdTX1JFQUQob3V0LCAw KSwgMSwKKwkJCSAgICAiRXh0ZW50IHJlZ2lvbiBjb3VudCBzaG91bGQgYmUgb25lIik7CisJCX0K KwkJVEVTVF9FUVVBTF9SRUYoMSwKKwkJICAgICJTaG91bGQgbm90IG92ZXJ3cml0ZSBjb250ZW50 IGJleW9uZCB3aGF0J3MgbmVlZGVkIik7CisJCWluX3N6ICo9IDI7CisJCW91dF9zel9yZWYgPSBv dXRfc3ogKj0gMjsKKworCQltZW1jcHkob3V0X3JlZiwgb3V0LCAzICogc2l6ZW9mKHNpemVfdCkp OworCQlURVNUX1VUSUxfQkFUQ0hfVkFMSUQ7CisJCVRFU1RfRVFVQUxfUkVGKDAsICJTdGF0aXN0 aWNzIHNob3VsZCBiZSBzdGFibGUgYWNyb3NzIGNhbGxzIik7CisJCWlmIChzeiA8PSBTQ19TTUFM TF9NQVhDTEFTUykgeworCQkJZXhwZWN0X3p1X2xlKE5GUkVFX1JFQUQob3V0LCAxKSwgTlJFR1Nf UkVBRChvdXQsIDEpLAorCQkJICAgICJFeHRlbnQgZnJlZSBjb3VudCBleGNlZWRlZCByZWdpb24g Y291bnQiKTsKKwkJfSBlbHNlIHsKKwkJCWV4cGVjdF96dV9lcShORlJFRV9SRUFEKG91dCwgMCks IDAsCisJCQkgICAgIkV4dGVudCBmcmVlIGNvdW50IHNob3VsZCBiZSB6ZXJvIik7CisJCX0KKwkJ ZXhwZWN0X3p1X2VxKE5SRUdTX1JFQUQob3V0LCAwKSwgTlJFR1NfUkVBRChvdXQsIDEpLAorCQkg ICAgIkV4dGVudCByZWdpb24gY291bnQgc2hvdWxkIGJlIHNhbWUgZm9yIHNhbWUgcmVnaW9uIHNp emUiKTsKKwkJZXhwZWN0X3p1X2VxKFNJWkVfUkVBRChvdXQsIDApLCBTSVpFX1JFQUQob3V0LCAx KSwKKwkJICAgICJFeHRlbnQgc2l6ZSBzaG91bGQgYmUgc2FtZSBmb3Igc2FtZSByZWdpb24gc2l6 ZSIpOworCisjdW5kZWYgU0laRV9SRUFECisjdW5kZWYgTlJFR1NfUkVBRAorI3VuZGVmIE5GUkVF X1JFQUQKKworI3VuZGVmIFRFU1RfRVFVQUxfUkVGCisKKwkJZnJlZShxKTsKKwkJZnJlZShwKTsK Kwl9Cit9CitURVNUX0VORAorCitpbnQKK21haW4odm9pZCkgeworCWFzc2VydF96dV9sdChTQ19T TUFMTF9NQVhDTEFTUyArIDEwMDAwMCwgVEVTVF9NQVhfU0laRSwKKwkgICAgIlRlc3QgY2FzZSBj YW5ub3QgY292ZXIgbGFyZ2UgY2xhc3NlcyIpOworCXJldHVybiB0ZXN0KHRlc3RfcXVlcnksIHRl c3RfYmF0Y2gpOworfQoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFs bG9jLTUuMy4wL3Rlc3QvdW5pdC9pbnNwZWN0LnNoIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQv amVtYWxsb2MtNS4zLjAvdGVzdC91bml0L2luc3BlY3Quc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMC4uMzUyZDExMAotLS0gL2Rldi9udWxsCisrKyBiLzM4OS1kcy1iYXNlLTMu My4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9pbnNwZWN0LnNoCkBAIC0wLDAgKzEs NSBAQAorIyEvYmluL3NoCisKK2lmIFsgIngke2VuYWJsZV9wcm9mfSIgPSAieDEiIF0gOyB0aGVu CisgIGV4cG9ydCBNQUxMT0NfQ09ORj0icHJvZjpmYWxzZSIKK2ZpCgpkaWZmIC0tZ2l0IGEvMzg5 LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L2p1bmsuYyBiLzM4 OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9qdW5rLmMKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQzMDkyZgotLS0gL2Rldi9udWxsCisr KyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9qdW5r LmMKQEAgLTAsMCArMSwxOTUgQEAKKyNpbmNsdWRlICJ0ZXN0L2plbWFsbG9jX3Rlc3QuaCIKKwor I2RlZmluZSBhcnJheWxlbihhcnIpIChzaXplb2YoYXJyKS9zaXplb2YoYXJyWzBdKSkKK3N0YXRp YyBzaXplX3QgcHRyX2luZDsKK3N0YXRpYyB2b2lkICp2b2xhdGlsZSBwdHJzWzEwMF07CitzdGF0 aWMgdm9pZCAqbGFzdF9qdW5rZWRfcHRyOworc3RhdGljIHNpemVfdCBsYXN0X2p1bmtlZF91c2l6 ZTsKKworc3RhdGljIHZvaWQKK3Jlc2V0KCkgeworCXB0cl9pbmQgPSAwOworCWxhc3RfanVua2Vk X3B0ciA9IE5VTEw7CisJbGFzdF9qdW5rZWRfdXNpemUgPSAwOworfQorCitzdGF0aWMgdm9pZAor dGVzdF9qdW5rKHZvaWQgKnB0ciwgc2l6ZV90IHVzaXplKSB7CisJbGFzdF9qdW5rZWRfcHRyID0g cHRyOworCWxhc3RfanVua2VkX3VzaXplID0gdXNpemU7Cit9CisKK3N0YXRpYyB2b2lkCitkb19h bGxvY3Moc2l6ZV90IHNpemUsIGJvb2wgemVybywgc2l6ZV90IGxnX2FsaWduKSB7CisjZGVmaW5l IEpVTktfQUxMT0MoLi4uKQkJCQkJCQlcCisJZG8gewkJCQkJCQkJXAorCQlhc3NlcnQocHRyX2lu ZCArIDEgPCBhcnJheWxlbihwdHJzKSk7CQkJXAorCQl2b2lkICpwdHIgPSBfX1ZBX0FSR1NfXzsJ CQkJXAorCQlhc3NlcnRfcHRyX25vdF9udWxsKHB0ciwgIiIpOwkJCQlcCisJCXB0cnNbcHRyX2lu ZCsrXSA9IHB0cjsJCQkJCVwKKwkJaWYgKG9wdF9qdW5rX2FsbG9jICYmICF6ZXJvKSB7CQkJCVwK KwkJCWV4cGVjdF9wdHJfZXEocHRyLCBsYXN0X2p1bmtlZF9wdHIsICIiKTsJXAorCQkJZXhwZWN0 X3p1X2VxKGxhc3RfanVua2VkX3VzaXplLAkJCVwKKwkJCSAgICBURVNUX01BTExPQ19TSVpFKHB0 ciksICIiKTsJCQlcCisJCX0JCQkJCQkJXAorCX0gd2hpbGUgKDApCisJaWYgKCF6ZXJvICYmIGxn X2FsaWduID09IDApIHsKKwkJSlVOS19BTExPQyhtYWxsb2Moc2l6ZSkpOworCX0KKwlpZiAoIXpl cm8pIHsKKwkJSlVOS19BTExPQyhhbGlnbmVkX2FsbG9jKDEgPDwgbGdfYWxpZ24sIHNpemUpKTsK Kwl9CisjaWZkZWYgSkVNQUxMT0NfT1ZFUlJJREVfTUVNQUxJR04KKwlpZiAoIXplcm8pIHsKKwkJ SlVOS19BTExPQyhqZV9tZW1hbGlnbigxIDw8IGxnX2FsaWduLCBzaXplKSk7CisJfQorI2VuZGlm CisjaWZkZWYgSkVNQUxMT0NfT1ZFUlJJREVfVkFMTE9DCisJaWYgKCF6ZXJvICYmIGxnX2FsaWdu ID09IExHX1BBR0UpIHsKKwkJSlVOS19BTExPQyhqZV92YWxsb2Moc2l6ZSkpOworCX0KKyNlbmRp ZgorCWludCB6ZXJvX2ZsYWcgPSB6ZXJvID8gTUFMTE9DWF9aRVJPIDogMDsKKwlKVU5LX0FMTE9D KG1hbGxvY3goc2l6ZSwgemVyb19mbGFnIHwgTUFMTE9DWF9MR19BTElHTihsZ19hbGlnbikpKTsK KwlKVU5LX0FMTE9DKG1hbGxvY3goc2l6ZSwgemVyb19mbGFnIHwgTUFMTE9DWF9MR19BTElHTihs Z19hbGlnbikKKwkgICAgfCBNQUxMT0NYX1RDQUNIRV9OT05FKSk7CisJaWYgKGxnX2FsaWduID49 IExHX1NJWkVPRl9QVFIpIHsKKwkJdm9pZCAqbWVtYWxpZ25fcmVzdWx0OworCQlpbnQgZXJyID0g cG9zaXhfbWVtYWxpZ24oJm1lbWFsaWduX3Jlc3VsdCwgKDEgPDwgbGdfYWxpZ24pLAorCQkgICAg c2l6ZSk7CisJCWFzc2VydF9kX2VxKGVyciwgMCwgIiIpOworCQlKVU5LX0FMTE9DKG1lbWFsaWdu X3Jlc3VsdCk7CisJfQorfQorCitURVNUX0JFR0lOKHRlc3RfanVua19hbGxvY19mcmVlKSB7CisJ Ym9vbCB6ZXJvdmFsc1tdID0ge2ZhbHNlLCB0cnVlfTsKKwlzaXplX3Qgc2l6ZXZhbHNbXSA9IHsK KwkJMSwgOCwgMTAwLCAxMDAwLCAxMDAqMTAwMAorCS8qCisJICogTWVtb3J5IGFsbG9jYXRpb24g ZmFpbHVyZSBpcyBhIHJlYWwgcG9zc2liaWxpdHkgaW4gMzItYml0IG1vZGUuCisJICogUmF0aGVy IHRoYW4gdHJ5IHRvIGNoZWNrIGluIHRoZSBmYWNlIG9mIHJlc291cmNlIGV4aGF1c3Rpb24sIHdl IGp1c3QKKwkgKiByZWx5IG1vcmUgb24gdGhlIDY0LWJpdCB0ZXN0cy4gIFRoaXMgaXMgYSBsaXR0 bGUgYml0IHdoaXRlLWJveC15IGluCisJICogdGhlIHNlbnNlIHRoYXQgdGhpcyBpcyBvbmx5IGEg Z29vZCB0ZXN0IHN0cmF0ZWd5IGlmIHdlIGtub3cgdGhhdCB0aGUKKwkgKiBqdW5rIHBhdGh3YXlz IGRvbid0IHRvdWNoIGludGVyYWN0IHdpdGggdGhlIGFsbG9jYXRpb24gc2VsZWN0aW9uCisJICog bWVjaGFuaXNtczsgYnV0IHRoaXMgaXMgaW4gZmFjdCB0aGUgY2FzZS4KKwkgKi8KKyNpZiBMR19T SVpFT0ZfUFRSID09IDMKKwkJICAgICwgMTAgKiAxMDAwICogMTAwMAorI2VuZGlmCisJfTsKKwlz aXplX3QgbGdfYWxpZ252YWxzW10gPSB7CisJCTAsIDQsIDEwLCAxNSwgMTYsIExHX1BBR0UKKyNp ZiBMR19TSVpFT0ZfUFRSID09IDMKKwkJICAgICwgMjAsIDI0CisjZW5kaWYKKwl9OworCisjZGVm aW5lIEpVTktfRlJFRSguLi4pCQkJCQkJCVwKKwlkbyB7CQkJCQkJCQlcCisJCWRvX2FsbG9jcyhz aXplLCB6ZXJvLCBsZ19hbGlnbik7CQkJXAorCQlmb3IgKHNpemVfdCBuID0gMDsgbiA8IHB0cl9p bmQ7IG4rKykgewkJCVwKKwkJCXZvaWQgKnB0ciA9IHB0cnNbbl07CQkJCVwKKwkJCV9fVkFfQVJH U19fOwkJCQkJXAorCQkJaWYgKG9wdF9qdW5rX2ZyZWUpIHsJCQkJXAorCQkJCWFzc2VydF9wdHJf ZXEocHRyLCBsYXN0X2p1bmtlZF9wdHIsCVwKKwkJCQkgICAgIiIpOwkJCQlcCisJCQkJYXNzZXJ0 X3p1X2VxKHVzaXplLCBsYXN0X2p1bmtlZF91c2l6ZSwJXAorCQkJCSAgICAiIik7CQkJCVwKKwkJ CX0JCQkJCQlcCisJCQlyZXNldCgpOwkJCQkJXAorCQl9CQkJCQkJCVwKKwl9IHdoaWxlICgwKQor CWZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJyYXlsZW4oemVyb3ZhbHMpOyBpKyspIHsKKwkJZm9y IChzaXplX3QgaiA9IDA7IGogPCBhcnJheWxlbihzaXpldmFscyk7IGorKykgeworCQkJZm9yIChz aXplX3QgayA9IDA7IGsgPCBhcnJheWxlbihsZ19hbGlnbnZhbHMpOyBrKyspIHsKKwkJCQlib29s IHplcm8gPSB6ZXJvdmFsc1tpXTsKKwkJCQlzaXplX3Qgc2l6ZSA9IHNpemV2YWxzW2pdOworCQkJ CXNpemVfdCBsZ19hbGlnbiA9IGxnX2FsaWdudmFsc1trXTsKKwkJCQlzaXplX3QgdXNpemUgPSBu YWxsb2N4KHNpemUsCisJCQkJICAgIE1BTExPQ1hfTEdfQUxJR04obGdfYWxpZ24pKTsKKworCQkJ CUpVTktfRlJFRShmcmVlKHB0cikpOworCQkJCUpVTktfRlJFRShkYWxsb2N4KHB0ciwgMCkpOwor CQkJCUpVTktfRlJFRShkYWxsb2N4KHB0ciwgTUFMTE9DWF9UQ0FDSEVfTk9ORSkpOworCQkJCUpV TktfRlJFRShkYWxsb2N4KHB0ciwgTUFMTE9DWF9MR19BTElHTigKKwkJCQkgICAgbGdfYWxpZ24p KSk7CisJCQkJSlVOS19GUkVFKHNkYWxsb2N4KHB0ciwgdXNpemUsIE1BTExPQ1hfTEdfQUxJR04o CisJCQkJICAgIGxnX2FsaWduKSkpOworCQkJCUpVTktfRlJFRShzZGFsbG9jeChwdHIsIHVzaXpl LAorCQkJCSAgICBNQUxMT0NYX1RDQUNIRV9OT05FIHwgTUFMTE9DWF9MR19BTElHTihsZ19hbGln bikpKTsKKwkJCQlpZiAob3B0X3plcm9fcmVhbGxvY19hY3Rpb24KKwkJCQkgICAgPT0gemVyb19y ZWFsbG9jX2FjdGlvbl9mcmVlKSB7CisJCQkJCUpVTktfRlJFRShyZWFsbG9jKHB0ciwgMCkpOwor CQkJCX0KKwkJCX0KKwkJfQorCX0KK30KK1RFU1RfRU5ECisKK1RFU1RfQkVHSU4odGVzdF9yZWFs bG9jX2V4cGFuZCkgeworCWNoYXIgKnZvbGF0aWxlIHB0cjsKKwljaGFyICp2b2xhdGlsZSBleHBh bmRlZDsKKworCXRlc3Rfc2tpcF9pZighb3B0X2p1bmtfYWxsb2MpOworCisJLyogUmVhbGxvYyAq LworCXB0ciA9IG1hbGxvYyhTQ19TTUFMTF9NQVhDTEFTUyk7CisJZXhwYW5kZWQgPSByZWFsbG9j KHB0ciwgU0NfTEFSR0VfTUlOQ0xBU1MpOworCWV4cGVjdF9wdHJfZXEobGFzdF9qdW5rZWRfcHRy LCAmZXhwYW5kZWRbU0NfU01BTExfTUFYQ0xBU1NdLCAiIik7CisJZXhwZWN0X3p1X2VxKGxhc3Rf anVua2VkX3VzaXplLAorCSAgICBTQ19MQVJHRV9NSU5DTEFTUyAtIFNDX1NNQUxMX01BWENMQVNT LCAiIik7CisJZnJlZShleHBhbmRlZCk7CisKKwkvKiByYWxsb2N4KC4uLiwgMCkgKi8KKwlwdHIg PSBtYWxsb2MoU0NfU01BTExfTUFYQ0xBU1MpOworCWV4cGFuZGVkID0gcmFsbG9jeChwdHIsIFND X0xBUkdFX01JTkNMQVNTLCAwKTsKKwlleHBlY3RfcHRyX2VxKGxhc3RfanVua2VkX3B0ciwgJmV4 cGFuZGVkW1NDX1NNQUxMX01BWENMQVNTXSwgIiIpOworCWV4cGVjdF96dV9lcShsYXN0X2p1bmtl ZF91c2l6ZSwKKwkgICAgU0NfTEFSR0VfTUlOQ0xBU1MgLSBTQ19TTUFMTF9NQVhDTEFTUywgIiIp OworCWZyZWUoZXhwYW5kZWQpOworCisJLyogcmFsbG9jeCguLi4sIG5vbnplcm8pICovCisJcHRy ID0gbWFsbG9jKFNDX1NNQUxMX01BWENMQVNTKTsKKwlleHBhbmRlZCA9IHJhbGxvY3gocHRyLCBT Q19MQVJHRV9NSU5DTEFTUywgTUFMTE9DWF9UQ0FDSEVfTk9ORSk7CisJZXhwZWN0X3B0cl9lcShs YXN0X2p1bmtlZF9wdHIsICZleHBhbmRlZFtTQ19TTUFMTF9NQVhDTEFTU10sICIiKTsKKwlleHBl Y3RfenVfZXEobGFzdF9qdW5rZWRfdXNpemUsCisJICAgIFNDX0xBUkdFX01JTkNMQVNTIC0gU0Nf U01BTExfTUFYQ0xBU1MsICIiKTsKKwlmcmVlKGV4cGFuZGVkKTsKKworCS8qIHJhbGxvY3goLi4u LCBNQUxMT0NYX1pFUk8pICovCisJcHRyID0gbWFsbG9jKFNDX1NNQUxMX01BWENMQVNTKTsKKwls YXN0X2p1bmtlZF9wdHIgPSAodm9pZCAqKS0xOworCWxhc3RfanVua2VkX3VzaXplID0gKHNpemVf dCktMTsKKwlleHBhbmRlZCA9IHJhbGxvY3gocHRyLCBTQ19MQVJHRV9NSU5DTEFTUywgTUFMTE9D WF9aRVJPKTsKKwlleHBlY3RfcHRyX2VxKGxhc3RfanVua2VkX3B0ciwgKHZvaWQgKiktMSwgIiIp OworCWV4cGVjdF96dV9lcShsYXN0X2p1bmtlZF91c2l6ZSwgKHNpemVfdCktMSwgIiIpOworCWZy ZWUoZXhwYW5kZWQpOworCisJLyoKKwkgKiBVbmZvcnR1bmF0ZWx5LCB0ZXN0aW5nIHhhbGxvY3gg cmVsaWFibHkgaXMgZGlmZmljdWx0IHRvIGRvIHBvcnRhYmx5CisJICogKHNpbmNlIGFsbG9jYXRp b25zIGNhbiBiZSBleHBhbmRlZCAvIG5vdCBleHBhbmRlZCBkaWZmZXJlbnRseSBvbgorCSAqIGRp ZmZlcmVudCBwbGF0Zm9ybXMuICBXZSByZWx5IG9uIG1hbnVhbCBpbnNwZWN0aW9uIHRoZXJlIC0t IHRoZQorCSAqIHhhbGxvY3ggcGF0aHdheSBpcyBlYXN5IHRvIGluc3BlY3QsIHRob3VnaC4KKwkg KgorCSAqIExpa2V3aXNlLCB3ZSBkb24ndCB0ZXN0IHRoZSBzaHJpbmtpbmcgcGF0aHdheXMuICBJ dCdzIGRpZmZpY3VsdCB0byBkbworCSAqIHNvIGNvbnNpc3RlbnRseSAoYmVjYXVzZSBvZiB0aGUg cmlzayBvZiBzcGxpdCBmYWlsdXJlIG9yIG1lbW9yeQorCSAqIGV4aGF1c3Rpb24sIGluIHdoaWNo IGNhc2Ugbm8ganVua2luZyBzaG91bGQgaGFwcGVuKS4gIFRoaXMgaXMgZmluZQorCSAqIC0tIGp1 bmtpbmcgaXMgYSBiZXN0LWVmZm9ydCBkZWJ1ZyBtZWNoYW5pc20gaW4gdGhlIGZpcnN0IHBsYWNl LgorCSAqLworfQorVEVTVF9FTkQKKworaW50CittYWluKHZvaWQpIHsKKwlqdW5rX2FsbG9jX2Nh bGxiYWNrID0gJnRlc3RfanVuazsKKwlqdW5rX2ZyZWVfY2FsbGJhY2sgPSAmdGVzdF9qdW5rOwor CS8qCisJICogV2UgY2hlY2sgdGhlIGxhc3QgcG9pbnRlciBqdW5rZWQuICBJZiBhIHJlZW50cmFu dCBjYWxsIGhhcHBlbnMsIHRoYXQKKwkgKiBtaWdodCBiZSBhbiBpbnRlcm5hbCBhbGxvY2F0aW9u LgorCSAqLworCXJldHVybiB0ZXN0X25vX3JlZW50cmFuY3koCisJICAgIHRlc3RfanVua19hbGxv Y19mcmVlLAorCSAgICB0ZXN0X3JlYWxsb2NfZXhwYW5kKTsKK30KCmRpZmYgLS1naXQgYS8zODkt ZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvanVuay5zaCBiLzM4 OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9qdW5rLnNoCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3Y2Q4Y2EKLS0tIC9kZXYvbnVsbAor KysgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvanVu ay5zaApAQCAtMCwwICsxLDUgQEAKKyMhL2Jpbi9zaAorCitpZiBbICJ4JHtlbmFibGVfZmlsbH0i ID0gIngxIiBdIDsgdGhlbgorICBleHBvcnQgTUFMTE9DX0NPTkY9ImFib3J0OmZhbHNlLHplcm86 ZmFsc2UsanVuazp0cnVlIgorZmkKCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWls ZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvanVua19hbGxvYy5jIGIvMzg5LWRzLWJhc2UtMy4z LjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L2p1bmtfYWxsb2MuYwpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDQyYTBjCi0tLSAvZGV2L251bGwKKysrIGIvMzg5 LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L2p1bmtfYWxsb2Mu YwpAQCAtMCwwICsxIEBACisjaW5jbHVkZSAianVuay5jIgoKZGlmZiAtLWdpdCBhLzM4OS1kcy1i YXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9qdW5rX2FsbG9jLnNoIGIv Mzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L2p1bmtfYWxs b2Muc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTEwMDhjMgotLS0gL2Rl di9udWxsCisrKyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3Qv dW5pdC9qdW5rX2FsbG9jLnNoCkBAIC0wLDAgKzEsNSBAQAorIyEvYmluL3NoCisKK2lmIFsgIngk e2VuYWJsZV9maWxsfSIgPSAieDEiIF0gOyB0aGVuCisgIGV4cG9ydCBNQUxMT0NfQ09ORj0iYWJv cnQ6ZmFsc2UsemVybzpmYWxzZSxqdW5rOmFsbG9jIgorZmkKCmRpZmYgLS1naXQgYS8zODktZHMt YmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvanVua19mcmVlLmMgYi8z ODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvanVua19mcmVl LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQ0MmEwYwotLS0gL2Rldi9u dWxsCisrKyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5p dC9qdW5rX2ZyZWUuYwpAQCAtMCwwICsxIEBACisjaW5jbHVkZSAianVuay5jIgoKZGlmZiAtLWdp dCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9qdW5r X2ZyZWUuc2ggYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3Vu aXQvanVua19mcmVlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwMjE5 NmMKLS0tIC9kZXYvbnVsbAorKysgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01 LjMuMC90ZXN0L3VuaXQvanVua19mcmVlLnNoCkBAIC0wLDAgKzEsNSBAQAorIyEvYmluL3NoCisK K2lmIFsgIngke2VuYWJsZV9maWxsfSIgPSAieDEiIF0gOyB0aGVuCisgIGV4cG9ydCBNQUxMT0Nf Q09ORj0iYWJvcnQ6ZmFsc2UsemVybzpmYWxzZSxqdW5rOmZyZWUiCitmaQoKZGlmZiAtLWdpdCBh LzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9sb2cuYyBi LzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9sb2cuYwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDliNTg5Ci0tLSAvZGV2L251bGwK KysrIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L2xv Zy5jCkBAIC0wLDAgKzEsMTk4IEBACisjaW5jbHVkZSAidGVzdC9qZW1hbGxvY190ZXN0LmgiCisK KyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9sb2cuaCIKKworc3RhdGljIHZvaWQKK3VwZGF0 ZV9sb2dfdmFyX25hbWVzKGNvbnN0IGNoYXIgKm5hbWVzKSB7CisJc3RybmNweShsb2dfdmFyX25h bWVzLCBuYW1lcywgc2l6ZW9mKGxvZ192YXJfbmFtZXMpKTsKK30KKworc3RhdGljIHZvaWQKK2V4 cGVjdF9ub19sb2dnaW5nKGNvbnN0IGNoYXIgKm5hbWVzKSB7CisJbG9nX3Zhcl90IGxvZ19sMSA9 IExPR19WQVJfSU5JVCgibDEiKTsKKwlsb2dfdmFyX3QgbG9nX2wyID0gTE9HX1ZBUl9JTklUKCJs MiIpOworCWxvZ192YXJfdCBsb2dfbDJfYSA9IExPR19WQVJfSU5JVCgibDIuYSIpOworCisJdXBk YXRlX2xvZ192YXJfbmFtZXMobmFtZXMpOworCisJaW50IGNvdW50ID0gMDsKKworCWZvciAoaW50 IGkgPSAwOyBpIDwgMTA7IGkrKykgeworCQlsb2dfZG9fYmVnaW4obG9nX2wxKQorCQkJY291bnQr KzsKKwkJbG9nX2RvX2VuZChsb2dfbDEpCisKKwkJbG9nX2RvX2JlZ2luKGxvZ19sMikKKwkJCWNv dW50Kys7CisJCWxvZ19kb19lbmQobG9nX2wyKQorCisJCWxvZ19kb19iZWdpbihsb2dfbDJfYSkK KwkJCWNvdW50Kys7CisJCWxvZ19kb19lbmQobG9nX2wyX2EpCisJfQorCWV4cGVjdF9kX2VxKGNv dW50LCAwLCAiRGlzYWJsZWQgbG9nZ2luZyBub3QgaWdub3JlZCEiKTsKK30KKworVEVTVF9CRUdJ Tih0ZXN0X2xvZ19kaXNhYmxlZCkgeworCXRlc3Rfc2tpcF9pZighY29uZmlnX2xvZyk7CisJYXRv bWljX3N0b3JlX2IoJmxvZ19pbml0X2RvbmUsIHRydWUsIEFUT01JQ19SRUxBWEVEKTsKKwlleHBl Y3Rfbm9fbG9nZ2luZygiIik7CisJZXhwZWN0X25vX2xvZ2dpbmcoImFiYyIpOworCWV4cGVjdF9u b19sb2dnaW5nKCJhLmIuYyIpOworCWV4cGVjdF9ub19sb2dnaW5nKCJsMTIiKTsKKwlleHBlY3Rf bm9fbG9nZ2luZygibDEyM3xhNDU2fGI3ODkiKTsKKwlleHBlY3Rfbm9fbG9nZ2luZygifHx8Iik7 Cit9CitURVNUX0VORAorCitURVNUX0JFR0lOKHRlc3RfbG9nX2VuYWJsZWRfZGlyZWN0KSB7CisJ dGVzdF9za2lwX2lmKCFjb25maWdfbG9nKTsKKwlhdG9taWNfc3RvcmVfYigmbG9nX2luaXRfZG9u ZSwgdHJ1ZSwgQVRPTUlDX1JFTEFYRUQpOworCWxvZ192YXJfdCBsb2dfbDEgPSBMT0dfVkFSX0lO SVQoImwxIik7CisJbG9nX3Zhcl90IGxvZ19sMV9hID0gTE9HX1ZBUl9JTklUKCJsMS5hIik7CisJ bG9nX3Zhcl90IGxvZ19sMiA9IExPR19WQVJfSU5JVCgibDIiKTsKKworCWludCBjb3VudDsKKwor CWNvdW50ID0gMDsKKwl1cGRhdGVfbG9nX3Zhcl9uYW1lcygibDEiKTsKKwlmb3IgKGludCBpID0g MDsgaSA8IDEwOyBpKyspIHsKKwkJbG9nX2RvX2JlZ2luKGxvZ19sMSkKKwkJCWNvdW50Kys7CisJ CWxvZ19kb19lbmQobG9nX2wxKQorCX0KKwlleHBlY3RfZF9lcShjb3VudCwgMTAsICJNaXMtbG9n Z2VkISIpOworCisJY291bnQgPSAwOworCXVwZGF0ZV9sb2dfdmFyX25hbWVzKCJsMS5hIik7CisJ Zm9yIChpbnQgaSA9IDA7IGkgPCAxMDsgaSsrKSB7CisJCWxvZ19kb19iZWdpbihsb2dfbDFfYSkK KwkJCWNvdW50Kys7CisJCWxvZ19kb19lbmQobG9nX2wxX2EpCisJfQorCWV4cGVjdF9kX2VxKGNv dW50LCAxMCwgIk1pcy1sb2dnZWQhIik7CisKKwljb3VudCA9IDA7CisJdXBkYXRlX2xvZ192YXJf bmFtZXMoImwxLmF8YWJjfGwyfGRlZiIpOworCWZvciAoaW50IGkgPSAwOyBpIDwgMTA7IGkrKykg eworCQlsb2dfZG9fYmVnaW4obG9nX2wxX2EpCisJCQljb3VudCsrOworCQlsb2dfZG9fZW5kKGxv Z19sMV9hKQorCisJCWxvZ19kb19iZWdpbihsb2dfbDIpCisJCQljb3VudCsrOworCQlsb2dfZG9f ZW5kKGxvZ19sMikKKwl9CisJZXhwZWN0X2RfZXEoY291bnQsIDIwLCAiTWlzLWxvZ2dlZCEiKTsK K30KK1RFU1RfRU5ECisKK1RFU1RfQkVHSU4odGVzdF9sb2dfZW5hYmxlZF9pbmRpcmVjdCkgewor CXRlc3Rfc2tpcF9pZighY29uZmlnX2xvZyk7CisJYXRvbWljX3N0b3JlX2IoJmxvZ19pbml0X2Rv bmUsIHRydWUsIEFUT01JQ19SRUxBWEVEKTsKKwl1cGRhdGVfbG9nX3Zhcl9uYW1lcygibDB8bDF8 YWJjfGwyLmJ8ZGVmIik7CisKKwkvKiBPbi4gKi8KKwlsb2dfdmFyX3QgbG9nX2wxID0gTE9HX1ZB Ul9JTklUKCJsMSIpOworCS8qIE9mZi4gKi8KKwlsb2dfdmFyX3QgbG9nX2wxYSA9IExPR19WQVJf SU5JVCgibDFhIik7CisJLyogT24uICovCisJbG9nX3Zhcl90IGxvZ19sMV9hID0gTE9HX1ZBUl9J TklUKCJsMS5hIik7CisJLyogT2ZmLiAqLworCWxvZ192YXJfdCBsb2dfbDJfYSA9IExPR19WQVJf SU5JVCgibDIuYSIpOworCS8qIE9uLiAqLworCWxvZ192YXJfdCBsb2dfbDJfYl9hID0gTE9HX1ZB Ul9JTklUKCJsMi5iLmEiKTsKKwkvKiBPbi4gKi8KKwlsb2dfdmFyX3QgbG9nX2wyX2JfYiA9IExP R19WQVJfSU5JVCgibDIuYi5iIik7CisKKwkvKiA0IGFyZSBvbiB0b3RhbCwgc28gc2hvdWxkIHN1 bSB0byA0MC4gKi8KKwlpbnQgY291bnQgPSAwOworCWZvciAoaW50IGkgPSAwOyBpIDwgMTA7IGkr KykgeworCQlsb2dfZG9fYmVnaW4obG9nX2wxKQorCQkJY291bnQrKzsKKwkJbG9nX2RvX2VuZChs b2dfbDEpCisKKwkJbG9nX2RvX2JlZ2luKGxvZ19sMWEpCisJCQljb3VudCsrOworCQlsb2dfZG9f ZW5kKGxvZ19sMWEpCisKKwkJbG9nX2RvX2JlZ2luKGxvZ19sMV9hKQorCQkJY291bnQrKzsKKwkJ bG9nX2RvX2VuZChsb2dfbDFfYSkKKworCQlsb2dfZG9fYmVnaW4obG9nX2wyX2EpCisJCQljb3Vu dCsrOworCQlsb2dfZG9fZW5kKGxvZ19sMl9hKQorCisJCWxvZ19kb19iZWdpbihsb2dfbDJfYl9h KQorCQkJY291bnQrKzsKKwkJbG9nX2RvX2VuZChsb2dfbDJfYl9hKQorCisJCWxvZ19kb19iZWdp bihsb2dfbDJfYl9iKQorCQkJY291bnQrKzsKKwkJbG9nX2RvX2VuZChsb2dfbDJfYl9iKQorCX0K KworCWV4cGVjdF9kX2VxKGNvdW50LCA0MCwgIk1pcy1sb2dnZWQhIik7Cit9CitURVNUX0VORAor CitURVNUX0JFR0lOKHRlc3RfbG9nX2VuYWJsZWRfZ2xvYmFsKSB7CisJdGVzdF9za2lwX2lmKCFj b25maWdfbG9nKTsKKwlhdG9taWNfc3RvcmVfYigmbG9nX2luaXRfZG9uZSwgdHJ1ZSwgQVRPTUlD X1JFTEFYRUQpOworCXVwZGF0ZV9sb2dfdmFyX25hbWVzKCJhYmN8LnxkZWYiKTsKKworCWxvZ192 YXJfdCBsb2dfbDEgPSBMT0dfVkFSX0lOSVQoImwxIik7CisJbG9nX3Zhcl90IGxvZ19sMl9hX2Eg PSBMT0dfVkFSX0lOSVQoImwyLmEuYSIpOworCisJaW50IGNvdW50ID0gMDsKKwlmb3IgKGludCBp ID0gMDsgaSA8IDEwOyBpKyspIHsKKwkJbG9nX2RvX2JlZ2luKGxvZ19sMSkKKwkJICAgIGNvdW50 Kys7CisJCWxvZ19kb19lbmQobG9nX2wxKQorCisJCWxvZ19kb19iZWdpbihsb2dfbDJfYV9hKQor CQkgICAgY291bnQrKzsKKwkJbG9nX2RvX2VuZChsb2dfbDJfYV9hKQorCX0KKwlleHBlY3RfZF9l cShjb3VudCwgMjAsICJNaXMtbG9nZ2VkISIpOworfQorVEVTVF9FTkQKKworVEVTVF9CRUdJTih0 ZXN0X2xvZ3NfaWZfbm9faW5pdCkgeworCXRlc3Rfc2tpcF9pZighY29uZmlnX2xvZyk7CisJYXRv bWljX3N0b3JlX2IoJmxvZ19pbml0X2RvbmUsIGZhbHNlLCBBVE9NSUNfUkVMQVhFRCk7CisKKwls b2dfdmFyX3QgbCA9IExPR19WQVJfSU5JVCgiZGVmaW5pdGVseS5ub3QuZW5hYmxlZCIpOworCisJ aW50IGNvdW50ID0gMDsKKwlmb3IgKGludCBpID0gMDsgaSA8IDEwOyBpKyspIHsKKwkJbG9nX2Rv X2JlZ2luKGwpCisJCQljb3VudCsrOworCQlsb2dfZG9fZW5kKGwpCisJfQorCWV4cGVjdF9kX2Vx KGNvdW50LCAwLCAiTG9nZ2luZyBzaG91bGRuJ3QgaGFwcGVuIGlmIG5vdCBpbml0aWFsaXplZC4i KTsKK30KK1RFU1RfRU5ECisKKy8qCisgKiBUaGlzIHJlYWxseSBqdXN0IGNoZWNrcyB0byBtYWtl IHN1cmUgdGhhdCB0aGlzIHVzYWdlIGNvbXBpbGVzOyB3ZSBkb24ndCBoYXZlCisgKiBhbnkgdGVz dCBjb2RlIHRvIHJ1bi4KKyAqLworVEVTVF9CRUdJTih0ZXN0X2xvZ19vbmx5X2Zvcm1hdF9zdHJp bmcpIHsKKwlpZiAoZmFsc2UpIHsKKwkJTE9HKCJsb2dfc3RyIiwgIk5vIGFyZ3VtZW50cyBmb2xs b3cgdGhpcyBmb3JtYXQgc3RyaW5nLiIpOworCX0KK30KK1RFU1RfRU5ECisKK2ludAorbWFpbih2 b2lkKSB7CisJcmV0dXJuIHRlc3QoCisJICAgIHRlc3RfbG9nX2Rpc2FibGVkLAorCSAgICB0ZXN0 X2xvZ19lbmFibGVkX2RpcmVjdCwKKwkgICAgdGVzdF9sb2dfZW5hYmxlZF9pbmRpcmVjdCwKKwkg ICAgdGVzdF9sb2dfZW5hYmxlZF9nbG9iYWwsCisJICAgIHRlc3RfbG9nc19pZl9ub19pbml0LAor CSAgICB0ZXN0X2xvZ19vbmx5X2Zvcm1hdF9zdHJpbmcpOworfQoKZGlmZiAtLWdpdCBhLzM4OS1k cy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9tYWxsY3RsLmMgYi8z ODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvbWFsbGN0bC5j Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlZmM4ZjEKLS0tIC9kZXYvbnVs bAorKysgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQv bWFsbGN0bC5jCkBAIC0wLDAgKzEsMTI3NCBAQAorI2luY2x1ZGUgInRlc3QvamVtYWxsb2NfdGVz dC5oIgorCisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvY3RsLmgiCisjaW5jbHVkZSAiamVt YWxsb2MvaW50ZXJuYWwvaG9vay5oIgorI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL3V0aWwu aCIKKworVEVTVF9CRUdJTih0ZXN0X21hbGxjdGxfZXJyb3JzKSB7CisJdWludDY0X3QgZXBvY2g7 CisJc2l6ZV90IHN6OworCisJZXhwZWN0X2RfZXEobWFsbGN0bCgibm9fc3VjaF9uYW1lIiwgTlVM TCwgTlVMTCwgTlVMTCwgMCksIEVOT0VOVCwKKwkgICAgIm1hbGxjdGwoKSBzaG91bGQgcmV0dXJu IEVOT0VOVCBmb3Igbm9uLWV4aXN0ZW50IG5hbWVzIik7CisKKwlleHBlY3RfZF9lcShtYWxsY3Rs KCJ2ZXJzaW9uIiwgTlVMTCwgTlVMTCwgIjAuMC4wIiwgc3RybGVuKCIwLjAuMCIpKSwKKwkgICAg RVBFUk0sICJtYWxsY3RsKCkgc2hvdWxkIHJldHVybiBFUEVSTSBvbiBhdHRlbXB0IHRvIHdyaXRl ICIKKwkgICAgInJlYWQtb25seSB2YWx1ZSIpOworCisJZXhwZWN0X2RfZXEobWFsbGN0bCgiZXBv Y2giLCBOVUxMLCBOVUxMLCAodm9pZCAqKSZlcG9jaCwKKwkgICAgc2l6ZW9mKGVwb2NoKS0xKSwg RUlOVkFMLAorCSAgICAibWFsbGN0bCgpIHNob3VsZCByZXR1cm4gRUlOVkFMIGZvciBpbnB1dCBz aXplIG1pc21hdGNoIik7CisJZXhwZWN0X2RfZXEobWFsbGN0bCgiZXBvY2giLCBOVUxMLCBOVUxM LCAodm9pZCAqKSZlcG9jaCwKKwkgICAgc2l6ZW9mKGVwb2NoKSsxKSwgRUlOVkFMLAorCSAgICAi bWFsbGN0bCgpIHNob3VsZCByZXR1cm4gRUlOVkFMIGZvciBpbnB1dCBzaXplIG1pc21hdGNoIik7 CisKKwlzeiA9IHNpemVvZihlcG9jaCktMTsKKwlleHBlY3RfZF9lcShtYWxsY3RsKCJlcG9jaCIs ICh2b2lkICopJmVwb2NoLCAmc3osIE5VTEwsIDApLCBFSU5WQUwsCisJICAgICJtYWxsY3RsKCkg c2hvdWxkIHJldHVybiBFSU5WQUwgZm9yIG91dHB1dCBzaXplIG1pc21hdGNoIik7CisJc3ogPSBz aXplb2YoZXBvY2gpKzE7CisJZXhwZWN0X2RfZXEobWFsbGN0bCgiZXBvY2giLCAodm9pZCAqKSZl cG9jaCwgJnN6LCBOVUxMLCAwKSwgRUlOVkFMLAorCSAgICAibWFsbGN0bCgpIHNob3VsZCByZXR1 cm4gRUlOVkFMIGZvciBvdXRwdXQgc2l6ZSBtaXNtYXRjaCIpOworfQorVEVTVF9FTkQKKworVEVT VF9CRUdJTih0ZXN0X21hbGxjdGxuYW1ldG9taWJfZXJyb3JzKSB7CisJc2l6ZV90IG1pYlsxXTsK KwlzaXplX3QgbWlibGVuOworCisJbWlibGVuID0gc2l6ZW9mKG1pYikvc2l6ZW9mKHNpemVfdCk7 CisJZXhwZWN0X2RfZXEobWFsbGN0bG5hbWV0b21pYigibm9fc3VjaF9uYW1lIiwgbWliLCAmbWli bGVuKSwgRU5PRU5ULAorCSAgICAibWFsbGN0bG5hbWV0b21pYigpIHNob3VsZCByZXR1cm4gRU5P RU5UIGZvciBub24tZXhpc3RlbnQgbmFtZXMiKTsKK30KK1RFU1RfRU5ECisKK1RFU1RfQkVHSU4o dGVzdF9tYWxsY3RsYnltaWJfZXJyb3JzKSB7CisJdWludDY0X3QgZXBvY2g7CisJc2l6ZV90IHN6 OworCXNpemVfdCBtaWJbMV07CisJc2l6ZV90IG1pYmxlbjsKKworCW1pYmxlbiA9IHNpemVvZiht aWIpL3NpemVvZihzaXplX3QpOworCWV4cGVjdF9kX2VxKG1hbGxjdGxuYW1ldG9taWIoInZlcnNp b24iLCBtaWIsICZtaWJsZW4pLCAwLAorCSAgICAiVW5leHBlY3RlZCBtYWxsY3RsbmFtZXRvbWli KCkgZmFpbHVyZSIpOworCisJZXhwZWN0X2RfZXEobWFsbGN0bGJ5bWliKG1pYiwgbWlibGVuLCBO VUxMLCBOVUxMLCAiMC4wLjAiLAorCSAgICBzdHJsZW4oIjAuMC4wIikpLCBFUEVSTSwgIm1hbGxj dGwoKSBzaG91bGQgcmV0dXJuIEVQRVJNIG9uICIKKwkgICAgImF0dGVtcHQgdG8gd3JpdGUgcmVh ZC1vbmx5IHZhbHVlIik7CisKKwltaWJsZW4gPSBzaXplb2YobWliKS9zaXplb2Yoc2l6ZV90KTsK KwlleHBlY3RfZF9lcShtYWxsY3RsbmFtZXRvbWliKCJlcG9jaCIsIG1pYiwgJm1pYmxlbiksIDAs CisJICAgICJVbmV4cGVjdGVkIG1hbGxjdGxuYW1ldG9taWIoKSBmYWlsdXJlIik7CisKKwlleHBl Y3RfZF9lcShtYWxsY3RsYnltaWIobWliLCBtaWJsZW4sIE5VTEwsIE5VTEwsICh2b2lkICopJmVw b2NoLAorCSAgICBzaXplb2YoZXBvY2gpLTEpLCBFSU5WQUwsCisJICAgICJtYWxsY3RsYnltaWIo KSBzaG91bGQgcmV0dXJuIEVJTlZBTCBmb3IgaW5wdXQgc2l6ZSBtaXNtYXRjaCIpOworCWV4cGVj dF9kX2VxKG1hbGxjdGxieW1pYihtaWIsIG1pYmxlbiwgTlVMTCwgTlVMTCwgKHZvaWQgKikmZXBv Y2gsCisJICAgIHNpemVvZihlcG9jaCkrMSksIEVJTlZBTCwKKwkgICAgIm1hbGxjdGxieW1pYigp IHNob3VsZCByZXR1cm4gRUlOVkFMIGZvciBpbnB1dCBzaXplIG1pc21hdGNoIik7CisKKwlzeiA9 IHNpemVvZihlcG9jaCktMTsKKwlleHBlY3RfZF9lcShtYWxsY3RsYnltaWIobWliLCBtaWJsZW4s ICh2b2lkICopJmVwb2NoLCAmc3osIE5VTEwsIDApLAorCSAgICBFSU5WQUwsCisJICAgICJtYWxs Y3RsYnltaWIoKSBzaG91bGQgcmV0dXJuIEVJTlZBTCBmb3Igb3V0cHV0IHNpemUgbWlzbWF0Y2gi KTsKKwlzeiA9IHNpemVvZihlcG9jaCkrMTsKKwlleHBlY3RfZF9lcShtYWxsY3RsYnltaWIobWli LCBtaWJsZW4sICh2b2lkICopJmVwb2NoLCAmc3osIE5VTEwsIDApLAorCSAgICBFSU5WQUwsCisJ ICAgICJtYWxsY3RsYnltaWIoKSBzaG91bGQgcmV0dXJuIEVJTlZBTCBmb3Igb3V0cHV0IHNpemUg bWlzbWF0Y2giKTsKK30KK1RFU1RfRU5ECisKK1RFU1RfQkVHSU4odGVzdF9tYWxsY3RsX3JlYWRf d3JpdGUpIHsKKwl1aW50NjRfdCBvbGRfZXBvY2gsIG5ld19lcG9jaDsKKwlzaXplX3Qgc3ogPSBz aXplb2Yob2xkX2Vwb2NoKTsKKworCS8qIEJsaW5kLiAqLworCWV4cGVjdF9kX2VxKG1hbGxjdGwo ImVwb2NoIiwgTlVMTCwgTlVMTCwgTlVMTCwgMCksIDAsCisJICAgICJVbmV4cGVjdGVkIG1hbGxj dGwoKSBmYWlsdXJlIik7CisJZXhwZWN0X3p1X2VxKHN6LCBzaXplb2Yob2xkX2Vwb2NoKSwgIlVu ZXhwZWN0ZWQgb3V0cHV0IHNpemUiKTsKKworCS8qIFJlYWQuICovCisJZXhwZWN0X2RfZXEobWFs bGN0bCgiZXBvY2giLCAodm9pZCAqKSZvbGRfZXBvY2gsICZzeiwgTlVMTCwgMCksIDAsCisJICAg ICJVbmV4cGVjdGVkIG1hbGxjdGwoKSBmYWlsdXJlIik7CisJZXhwZWN0X3p1X2VxKHN6LCBzaXpl b2Yob2xkX2Vwb2NoKSwgIlVuZXhwZWN0ZWQgb3V0cHV0IHNpemUiKTsKKworCS8qIFdyaXRlLiAq LworCWV4cGVjdF9kX2VxKG1hbGxjdGwoImVwb2NoIiwgTlVMTCwgTlVMTCwgKHZvaWQgKikmbmV3 X2Vwb2NoLAorCSAgICBzaXplb2YobmV3X2Vwb2NoKSksIDAsICJVbmV4cGVjdGVkIG1hbGxjdGwo KSBmYWlsdXJlIik7CisJZXhwZWN0X3p1X2VxKHN6LCBzaXplb2Yob2xkX2Vwb2NoKSwgIlVuZXhw ZWN0ZWQgb3V0cHV0IHNpemUiKTsKKworCS8qIFJlYWQrd3JpdGUuICovCisJZXhwZWN0X2RfZXEo bWFsbGN0bCgiZXBvY2giLCAodm9pZCAqKSZvbGRfZXBvY2gsICZzeiwKKwkgICAgKHZvaWQgKikm bmV3X2Vwb2NoLCBzaXplb2YobmV3X2Vwb2NoKSksIDAsCisJICAgICJVbmV4cGVjdGVkIG1hbGxj dGwoKSBmYWlsdXJlIik7CisJZXhwZWN0X3p1X2VxKHN6LCBzaXplb2Yob2xkX2Vwb2NoKSwgIlVu ZXhwZWN0ZWQgb3V0cHV0IHNpemUiKTsKK30KK1RFU1RfRU5ECisKK1RFU1RfQkVHSU4odGVzdF9t YWxsY3RsbmFtZXRvbWliX3Nob3J0X21pYikgeworCXNpemVfdCBtaWJbNF07CisJc2l6ZV90IG1p YmxlbjsKKworCW1pYmxlbiA9IDM7CisJbWliWzNdID0gNDI7CisJZXhwZWN0X2RfZXEobWFsbGN0 bG5hbWV0b21pYigiYXJlbmFzLmJpbi4wLm5yZWdzIiwgbWliLCAmbWlibGVuKSwgMCwKKwkgICAg IlVuZXhwZWN0ZWQgbWFsbGN0bG5hbWV0b21pYigpIGZhaWx1cmUiKTsKKwlleHBlY3RfenVfZXEo bWlibGVuLCAzLCAiVW5leHBlY3RlZCBtaWIgb3V0cHV0IGxlbmd0aCIpOworCWV4cGVjdF96dV9l cShtaWJbM10sIDQyLAorCSAgICAibWFsbGN0bG5hbWV0b21pYigpIHdyb3RlIHBhc3QgdGhlIGVu ZCBvZiB0aGUgaW5wdXQgbWliIik7Cit9CitURVNUX0VORAorCitURVNUX0JFR0lOKHRlc3RfbWFs bGN0bG5hbWV0b21pYl9zaG9ydF9uYW1lKSB7CisJc2l6ZV90IG1pYls0XTsKKwlzaXplX3QgbWli bGVuOworCisJbWlibGVuID0gNDsKKwltaWJbM10gPSA0MjsKKwlleHBlY3RfZF9lcShtYWxsY3Rs bmFtZXRvbWliKCJhcmVuYXMuYmluLjAiLCBtaWIsICZtaWJsZW4pLCAwLAorCSAgICAiVW5leHBl Y3RlZCBtYWxsY3RsbmFtZXRvbWliKCkgZmFpbHVyZSIpOworCWV4cGVjdF96dV9lcShtaWJsZW4s IDMsICJVbmV4cGVjdGVkIG1pYiBvdXRwdXQgbGVuZ3RoIik7CisJZXhwZWN0X3p1X2VxKG1pYlsz XSwgNDIsCisJICAgICJtYWxsY3RsbmFtZXRvbWliKCkgd3JvdGUgcGFzdCB0aGUgZW5kIG9mIHRo ZSBpbnB1dCBtaWIiKTsKK30KK1RFU1RfRU5ECisKK1RFU1RfQkVHSU4odGVzdF9tYWxsY3RsbWli bmFtZXRvbWliKSB7CisJc2l6ZV90IG1pYls0XTsKKwlzaXplX3QgbWlibGVuID0gNDsKKwl1aW50 MzJfdCByZXN1bHQsIHJlc3VsdF9yZWY7CisJc2l6ZV90IGxlbl9yZXN1bHQgPSBzaXplb2YodWlu dDMyX3QpOworCisJdHNkX3QgKnRzZCA9IHRzZF9mZXRjaCgpOworCisJLyogRXJyb3IgY2FzZXMg Ki8KKwlhc3NlcnRfZF9lcShjdGxfbWlibmFtZXRvbWliKHRzZCwgbWliLCAwLCAiYm9iIiwgJm1p YmxlbiksIEVOT0VOVCwgIiIpOworCWFzc2VydF96dV9lcShtaWJsZW4sIDQsICIiKTsKKwlhc3Nl cnRfZF9lcShjdGxfbWlibmFtZXRvbWliKHRzZCwgbWliLCAwLCAiOTk5OSIsICZtaWJsZW4pLCBF Tk9FTlQsICIiKTsKKwlhc3NlcnRfenVfZXEobWlibGVuLCA0LCAiIik7CisKKwkvKiBWYWxpZCBj YXNlLiAqLworCWFzc2VydF9kX2VxKGN0bF9taWJuYW1ldG9taWIodHNkLCBtaWIsIDAsICJhcmVu YXMiLCAmbWlibGVuKSwgMCwgIiIpOworCWFzc2VydF96dV9lcShtaWJsZW4sIDEsICIiKTsKKwlt aWJsZW4gPSA0OworCWFzc2VydF9kX2VxKGN0bF9taWJuYW1ldG9taWIodHNkLCBtaWIsIDEsICJi aW4iLCAmbWlibGVuKSwgMCwgIiIpOworCWFzc2VydF96dV9lcShtaWJsZW4sIDIsICIiKTsKKwll eHBlY3RfZF9lcShtYWxsY3RsYnltaWIobWliLCBtaWJsZW4sICZyZXN1bHQsICZsZW5fcmVzdWx0 LCBOVUxMLCAwKSwKKwkgICAgRU5PRU5ULCAibWFsbGN0bGJ5bWliKCkgc2hvdWxkIGZhaWwgb24g cGFydGlhbCBwYXRoIik7CisKKwkvKiBFcnJvciBjYXNlcy4gKi8KKwltaWJsZW4gPSA0OworCWFz c2VydF9kX2VxKGN0bF9taWJuYW1ldG9taWIodHNkLCBtaWIsIDIsICJib2IiLCAmbWlibGVuKSwg RU5PRU5ULCAiIik7CisJYXNzZXJ0X3p1X2VxKG1pYmxlbiwgNCwgIiIpOworCWFzc2VydF9kX2Vx KGN0bF9taWJuYW1ldG9taWIodHNkLCBtaWIsIDIsICI5OTk5IiwgJm1pYmxlbiksIEVOT0VOVCwg IiIpOworCWFzc2VydF96dV9lcShtaWJsZW4sIDQsICIiKTsKKworCS8qIFZhbGlkIGNhc2UuICov CisJYXNzZXJ0X2RfZXEoY3RsX21pYm5hbWV0b21pYih0c2QsIG1pYiwgMiwgIjAiLCAmbWlibGVu KSwgMCwgIiIpOworCWFzc2VydF96dV9lcShtaWJsZW4sIDMsICIiKTsKKwlleHBlY3RfZF9lcSht YWxsY3RsYnltaWIobWliLCBtaWJsZW4sICZyZXN1bHQsICZsZW5fcmVzdWx0LCBOVUxMLCAwKSwK KwkgICAgRU5PRU5ULCAibWFsbGN0bGJ5bWliKCkgc2hvdWxkIGZhaWwgb24gcGFydGlhbCBwYXRo Iik7CisKKwkvKiBFcnJvciBjYXNlcy4gKi8KKwltaWJsZW4gPSA0OworCWFzc2VydF9kX2VxKGN0 bF9taWJuYW1ldG9taWIodHNkLCBtaWIsIDMsICJib2IiLCAmbWlibGVuKSwgRU5PRU5ULCAiIik7 CisJYXNzZXJ0X3p1X2VxKG1pYmxlbiwgNCwgIiIpOworCWFzc2VydF9kX2VxKGN0bF9taWJuYW1l dG9taWIodHNkLCBtaWIsIDMsICI5OTk5IiwgJm1pYmxlbiksIEVOT0VOVCwgIiIpOworCWFzc2Vy dF96dV9lcShtaWJsZW4sIDQsICIiKTsKKworCS8qIFZhbGlkIGNhc2UuICovCisJYXNzZXJ0X2Rf ZXEoY3RsX21pYm5hbWV0b21pYih0c2QsIG1pYiwgMywgIm5yZWdzIiwgJm1pYmxlbiksIDAsICIi KTsKKwlhc3NlcnRfenVfZXEobWlibGVuLCA0LCAiIik7CisJYXNzZXJ0X2RfZXEobWFsbGN0bGJ5 bWliKG1pYiwgbWlibGVuLCAmcmVzdWx0LCAmbGVuX3Jlc3VsdCwgTlVMTCwgMCksCisJICAgIDAs ICJVbmV4cGVjdGVkIG1hbGxjdGxieW1pYigpIGZhaWx1cmUiKTsKKwlhc3NlcnRfZF9lcShtYWxs Y3RsKCJhcmVuYXMuYmluLjAubnJlZ3MiLCAmcmVzdWx0X3JlZiwgJmxlbl9yZXN1bHQsCisJICAg IE5VTEwsIDApLCAwLCAiVW5leHBlY3RlZCBtYWxsY3RsKCkgZmFpbHVyZSIpOworCWV4cGVjdF96 dV9lcShyZXN1bHQsIHJlc3VsdF9yZWYsCisJICAgICJtYWxsY3RsYnltaWIoKSBhbmQgbWFsbGN0 bCgpIHJldHVybmVkIGRpZmZlcmVudCByZXN1bHQiKTsKK30KK1RFU1RfRU5ECisKK1RFU1RfQkVH SU4odGVzdF9tYWxsY3RsYnltaWJuYW1lKSB7CisJc2l6ZV90IG1pYls0XTsKKwlzaXplX3QgbWli bGVuID0gNDsKKwl1aW50MzJfdCByZXN1bHQsIHJlc3VsdF9yZWY7CisJc2l6ZV90IGxlbl9yZXN1 bHQgPSBzaXplb2YodWludDMyX3QpOworCisJdHNkX3QgKnRzZCA9IHRzZF9mZXRjaCgpOworCisJ LyogRXJyb3IgY2FzZXMuICovCisKKwlhc3NlcnRfZF9lcShtYWxsY3RsbmFtZXRvbWliKCJhcmVu YXMiLCBtaWIsICZtaWJsZW4pLCAwLAorCSAgICAiVW5leHBlY3RlZCBtYWxsY3RsbmFtZXRvbWli KCkgZmFpbHVyZSIpOworCWFzc2VydF96dV9lcShtaWJsZW4sIDEsICIiKTsKKworCW1pYmxlbiA9 IDQ7CisJYXNzZXJ0X2RfZXEoY3RsX2J5bWlibmFtZSh0c2QsIG1pYiwgMSwgImJpbi4wIiwgJm1p YmxlbiwKKwkgICAgJnJlc3VsdCwgJmxlbl9yZXN1bHQsIE5VTEwsIDApLCBFTk9FTlQsICIiKTsK KwltaWJsZW4gPSA0OworCWFzc2VydF9kX2VxKGN0bF9ieW1pYm5hbWUodHNkLCBtaWIsIDEsICJi aW4uMC5ib2IiLCAmbWlibGVuLAorCSAgICAmcmVzdWx0LCAmbGVuX3Jlc3VsdCwgTlVMTCwgMCks IEVOT0VOVCwgIiIpOworCWFzc2VydF96dV9lcShtaWJsZW4sIDQsICIiKTsKKworCS8qIFZhbGlk IGNhc2VzLiAqLworCisJYXNzZXJ0X2RfZXEobWFsbGN0bCgiYXJlbmFzLmJpbi4wLm5yZWdzIiwg JnJlc3VsdF9yZWYsICZsZW5fcmVzdWx0LAorCSAgICBOVUxMLCAwKSwgMCwgIlVuZXhwZWN0ZWQg bWFsbGN0bCgpIGZhaWx1cmUiKTsKKwltaWJsZW4gPSA0OworCisJYXNzZXJ0X2RfZXEoY3RsX2J5 bWlibmFtZSh0c2QsIG1pYiwgMCwgImFyZW5hcy5iaW4uMC5ucmVncyIsICZtaWJsZW4sCisJICAg ICZyZXN1bHQsICZsZW5fcmVzdWx0LCBOVUxMLCAwKSwgMCwgIiIpOworCWFzc2VydF96dV9lcSht aWJsZW4sIDQsICIiKTsKKwlleHBlY3RfenVfZXEocmVzdWx0LCByZXN1bHRfcmVmLCAiVW5leHBl Y3RlZCByZXN1bHQiKTsKKworCWFzc2VydF9kX2VxKGN0bF9ieW1pYm5hbWUodHNkLCBtaWIsIDEs ICJiaW4uMC5ucmVncyIsICZtaWJsZW4sICZyZXN1bHQsCisJICAgICZsZW5fcmVzdWx0LCBOVUxM LCAwKSwgMCwgIiIpOworCWFzc2VydF96dV9lcShtaWJsZW4sIDQsICIiKTsKKwlleHBlY3RfenVf ZXEocmVzdWx0LCByZXN1bHRfcmVmLCAiVW5leHBlY3RlZCByZXN1bHQiKTsKKworCWFzc2VydF9k X2VxKGN0bF9ieW1pYm5hbWUodHNkLCBtaWIsIDIsICIwLm5yZWdzIiwgJm1pYmxlbiwgJnJlc3Vs dCwKKwkgICAgJmxlbl9yZXN1bHQsIE5VTEwsIDApLCAwLCAiIik7CisJYXNzZXJ0X3p1X2VxKG1p YmxlbiwgNCwgIiIpOworCWV4cGVjdF96dV9lcShyZXN1bHQsIHJlc3VsdF9yZWYsICJVbmV4cGVj dGVkIHJlc3VsdCIpOworCisJYXNzZXJ0X2RfZXEoY3RsX2J5bWlibmFtZSh0c2QsIG1pYiwgMywg Im5yZWdzIiwgJm1pYmxlbiwgJnJlc3VsdCwKKwkgICAgJmxlbl9yZXN1bHQsIE5VTEwsIDApLCAw LCAiIik7CisJYXNzZXJ0X3p1X2VxKG1pYmxlbiwgNCwgIiIpOworCWV4cGVjdF96dV9lcShyZXN1 bHQsIHJlc3VsdF9yZWYsICJVbmV4cGVjdGVkIHJlc3VsdCIpOworfQorVEVTVF9FTkQKKworVEVT VF9CRUdJTih0ZXN0X21hbGxjdGxfY29uZmlnKSB7CisjZGVmaW5lIFRFU1RfTUFMTENUTF9DT05G SUcoY29uZmlnLCB0KSBkbyB7CQkJCVwKKwl0IG9sZHZhbDsJCQkJCQkJXAorCXNpemVfdCBzeiA9 IHNpemVvZihvbGR2YWwpOwkJCQkJXAorCWV4cGVjdF9kX2VxKG1hbGxjdGwoImNvbmZpZy4iI2Nv bmZpZywgKHZvaWQgKikmb2xkdmFsLCAmc3osCVwKKwkgICAgTlVMTCwgMCksIDAsICJVbmV4cGVj dGVkIG1hbGxjdGwoKSBmYWlsdXJlIik7CQlcCisJZXhwZWN0X2JfZXEob2xkdmFsLCBjb25maWdf IyNjb25maWcsICJJbmNvcnJlY3QgY29uZmlnIHZhbHVlIik7CVwKKwlleHBlY3RfenVfZXEoc3os IHNpemVvZihvbGR2YWwpLCAiVW5leHBlY3RlZCBvdXRwdXQgc2l6ZSIpOwlcCit9IHdoaWxlICgw KQorCisJVEVTVF9NQUxMQ1RMX0NPTkZJRyhjYWNoZV9vYmxpdmlvdXMsIGJvb2wpOworCVRFU1Rf TUFMTENUTF9DT05GSUcoZGVidWcsIGJvb2wpOworCVRFU1RfTUFMTENUTF9DT05GSUcoZmlsbCwg Ym9vbCk7CisJVEVTVF9NQUxMQ1RMX0NPTkZJRyhsYXp5X2xvY2ssIGJvb2wpOworCVRFU1RfTUFM TENUTF9DT05GSUcobWFsbG9jX2NvbmYsIGNvbnN0IGNoYXIgKik7CisJVEVTVF9NQUxMQ1RMX0NP TkZJRyhwcm9mLCBib29sKTsKKwlURVNUX01BTExDVExfQ09ORklHKHByb2ZfbGliZ2NjLCBib29s KTsKKwlURVNUX01BTExDVExfQ09ORklHKHByb2ZfbGlidW53aW5kLCBib29sKTsKKwlURVNUX01B TExDVExfQ09ORklHKHN0YXRzLCBib29sKTsKKwlURVNUX01BTExDVExfQ09ORklHKHV0cmFjZSwg Ym9vbCk7CisJVEVTVF9NQUxMQ1RMX0NPTkZJRyh4bWFsbG9jLCBib29sKTsKKworI3VuZGVmIFRF U1RfTUFMTENUTF9DT05GSUcKK30KK1RFU1RfRU5ECisKK1RFU1RfQkVHSU4odGVzdF9tYWxsY3Rs X29wdCkgeworCWJvb2wgY29uZmlnX2Fsd2F5cyA9IHRydWU7CisKKyNkZWZpbmUgVEVTVF9NQUxM Q1RMX09QVCh0LCBvcHQsIGNvbmZpZykgZG8gewkJCQlcCisJdCBvbGR2YWw7CQkJCQkJCVwKKwlz aXplX3Qgc3ogPSBzaXplb2Yob2xkdmFsKTsJCQkJCVwKKwlpbnQgZXhwZWN0ZWQgPSBjb25maWdf IyNjb25maWcgPyAwIDogRU5PRU5UOwkJCVwKKwlpbnQgcmVzdWx0ID0gbWFsbGN0bCgib3B0LiIj b3B0LCAodm9pZCAqKSZvbGR2YWwsICZzeiwgTlVMTCwJXAorCSAgICAwKTsJCQkJCQkJCVwKKwll eHBlY3RfZF9lcShyZXN1bHQsIGV4cGVjdGVkLAkJCQkJXAorCSAgICAiVW5leHBlY3RlZCBtYWxs Y3RsKCkgcmVzdWx0IGZvciBvcHQuIiNvcHQpOwkJXAorCWV4cGVjdF96dV9lcShzeiwgc2l6ZW9m KG9sZHZhbCksICJVbmV4cGVjdGVkIG91dHB1dCBzaXplIik7CVwKK30gd2hpbGUgKDApCisKKwlU RVNUX01BTExDVExfT1BUKGJvb2wsIGFib3J0LCBhbHdheXMpOworCVRFU1RfTUFMTENUTF9PUFQo Ym9vbCwgYWJvcnRfY29uZiwgYWx3YXlzKTsKKwlURVNUX01BTExDVExfT1BUKGJvb2wsIGNhY2hl X29ibGl2aW91cywgYWx3YXlzKTsKKwlURVNUX01BTExDVExfT1BUKGJvb2wsIHRydXN0X21hZHZp c2UsIGFsd2F5cyk7CisJVEVTVF9NQUxMQ1RMX09QVChib29sLCBjb25maXJtX2NvbmYsIGFsd2F5 cyk7CisJVEVTVF9NQUxMQ1RMX09QVChjb25zdCBjaGFyICosIG1ldGFkYXRhX3RocCwgYWx3YXlz KTsKKwlURVNUX01BTExDVExfT1BUKGJvb2wsIHJldGFpbiwgYWx3YXlzKTsKKwlURVNUX01BTExD VExfT1BUKGNvbnN0IGNoYXIgKiwgZHNzLCBhbHdheXMpOworCVRFU1RfTUFMTENUTF9PUFQoYm9v bCwgaHBhLCBhbHdheXMpOworCVRFU1RfTUFMTENUTF9PUFQoc2l6ZV90LCBocGFfc2xhYl9tYXhf YWxsb2MsIGFsd2F5cyk7CisJVEVTVF9NQUxMQ1RMX09QVChzaXplX3QsIGhwYV9zZWNfbnNoYXJk cywgYWx3YXlzKTsKKwlURVNUX01BTExDVExfT1BUKHNpemVfdCwgaHBhX3NlY19tYXhfYWxsb2Ms IGFsd2F5cyk7CisJVEVTVF9NQUxMQ1RMX09QVChzaXplX3QsIGhwYV9zZWNfbWF4X2J5dGVzLCBh bHdheXMpOworCVRFU1RfTUFMTENUTF9PUFQoc2l6ZV90LCBocGFfc2VjX2J5dGVzX2FmdGVyX2Zs dXNoLCBhbHdheXMpOworCVRFU1RfTUFMTENUTF9PUFQoc2l6ZV90LCBocGFfc2VjX2JhdGNoX2Zp bGxfZXh0cmEsIGFsd2F5cyk7CisJVEVTVF9NQUxMQ1RMX09QVCh1bnNpZ25lZCwgbmFyZW5hcywg YWx3YXlzKTsKKwlURVNUX01BTExDVExfT1BUKGNvbnN0IGNoYXIgKiwgcGVyY3B1X2FyZW5hLCBh bHdheXMpOworCVRFU1RfTUFMTENUTF9PUFQoc2l6ZV90LCBvdmVyc2l6ZV90aHJlc2hvbGQsIGFs d2F5cyk7CisJVEVTVF9NQUxMQ1RMX09QVChib29sLCBiYWNrZ3JvdW5kX3RocmVhZCwgYWx3YXlz KTsKKwlURVNUX01BTExDVExfT1BUKHNzaXplX3QsIGRpcnR5X2RlY2F5X21zLCBhbHdheXMpOwor CVRFU1RfTUFMTENUTF9PUFQoc3NpemVfdCwgbXV6enlfZGVjYXlfbXMsIGFsd2F5cyk7CisJVEVT VF9NQUxMQ1RMX09QVChib29sLCBzdGF0c19wcmludCwgYWx3YXlzKTsKKwlURVNUX01BTExDVExf T1BUKGNvbnN0IGNoYXIgKiwgc3RhdHNfcHJpbnRfb3B0cywgYWx3YXlzKTsKKwlURVNUX01BTExD VExfT1BUKGludDY0X3QsIHN0YXRzX2ludGVydmFsLCBhbHdheXMpOworCVRFU1RfTUFMTENUTF9P UFQoY29uc3QgY2hhciAqLCBzdGF0c19pbnRlcnZhbF9vcHRzLCBhbHdheXMpOworCVRFU1RfTUFM TENUTF9PUFQoY29uc3QgY2hhciAqLCBqdW5rLCBmaWxsKTsKKwlURVNUX01BTExDVExfT1BUKGJv b2wsIHplcm8sIGZpbGwpOworCVRFU1RfTUFMTENUTF9PUFQoYm9vbCwgdXRyYWNlLCB1dHJhY2Up OworCVRFU1RfTUFMTENUTF9PUFQoYm9vbCwgeG1hbGxvYywgeG1hbGxvYyk7CisJVEVTVF9NQUxM Q1RMX09QVChib29sLCB0Y2FjaGUsIGFsd2F5cyk7CisJVEVTVF9NQUxMQ1RMX09QVChzaXplX3Qs IGxnX2V4dGVudF9tYXhfYWN0aXZlX2ZpdCwgYWx3YXlzKTsKKwlURVNUX01BTExDVExfT1BUKHNp emVfdCwgdGNhY2hlX21heCwgYWx3YXlzKTsKKwlURVNUX01BTExDVExfT1BUKGNvbnN0IGNoYXIg KiwgdGhwLCBhbHdheXMpOworCVRFU1RfTUFMTENUTF9PUFQoY29uc3QgY2hhciAqLCB6ZXJvX3Jl YWxsb2MsIGFsd2F5cyk7CisJVEVTVF9NQUxMQ1RMX09QVChib29sLCBwcm9mLCBwcm9mKTsKKwlU RVNUX01BTExDVExfT1BUKGNvbnN0IGNoYXIgKiwgcHJvZl9wcmVmaXgsIHByb2YpOworCVRFU1Rf TUFMTENUTF9PUFQoYm9vbCwgcHJvZl9hY3RpdmUsIHByb2YpOworCVRFU1RfTUFMTENUTF9PUFQo c3NpemVfdCwgbGdfcHJvZl9zYW1wbGUsIHByb2YpOworCVRFU1RfTUFMTENUTF9PUFQoYm9vbCwg cHJvZl9hY2N1bSwgcHJvZik7CisJVEVTVF9NQUxMQ1RMX09QVChzc2l6ZV90LCBsZ19wcm9mX2lu dGVydmFsLCBwcm9mKTsKKwlURVNUX01BTExDVExfT1BUKGJvb2wsIHByb2ZfZ2R1bXAsIHByb2Yp OworCVRFU1RfTUFMTENUTF9PUFQoYm9vbCwgcHJvZl9maW5hbCwgcHJvZik7CisJVEVTVF9NQUxM Q1RMX09QVChib29sLCBwcm9mX2xlYWssIHByb2YpOworCVRFU1RfTUFMTENUTF9PUFQoYm9vbCwg cHJvZl9sZWFrX2Vycm9yLCBwcm9mKTsKKwlURVNUX01BTExDVExfT1BUKHNzaXplX3QsIHByb2Zf cmVjZW50X2FsbG9jX21heCwgcHJvZik7CisJVEVTVF9NQUxMQ1RMX09QVChib29sLCBwcm9mX3N0 YXRzLCBwcm9mKTsKKwlURVNUX01BTExDVExfT1BUKGJvb2wsIHByb2Zfc3lzX3RocmVhZF9uYW1l LCBwcm9mKTsKKwlURVNUX01BTExDVExfT1BUKHNzaXplX3QsIGxnX3Nhbl91YWZfYWxpZ24sIHVh Zl9kZXRlY3Rpb24pOworCisjdW5kZWYgVEVTVF9NQUxMQ1RMX09QVAorfQorVEVTVF9FTkQKKwor VEVTVF9CRUdJTih0ZXN0X21hbnBhZ2VfZXhhbXBsZSkgeworCXVuc2lnbmVkIG5iaW5zLCBpOwor CXNpemVfdCBtaWJbNF07CisJc2l6ZV90IGxlbiwgbWlibGVuOworCisJbGVuID0gc2l6ZW9mKG5i aW5zKTsKKwlleHBlY3RfZF9lcShtYWxsY3RsKCJhcmVuYXMubmJpbnMiLCAodm9pZCAqKSZuYmlu cywgJmxlbiwgTlVMTCwgMCksIDAsCisJICAgICJVbmV4cGVjdGVkIG1hbGxjdGwoKSBmYWlsdXJl Iik7CisKKwltaWJsZW4gPSA0OworCWV4cGVjdF9kX2VxKG1hbGxjdGxuYW1ldG9taWIoImFyZW5h cy5iaW4uMC5zaXplIiwgbWliLCAmbWlibGVuKSwgMCwKKwkgICAgIlVuZXhwZWN0ZWQgbWFsbGN0 bG5hbWV0b21pYigpIGZhaWx1cmUiKTsKKwlmb3IgKGkgPSAwOyBpIDwgbmJpbnM7IGkrKykgewor CQlzaXplX3QgYmluX3NpemU7CisKKwkJbWliWzJdID0gaTsKKwkJbGVuID0gc2l6ZW9mKGJpbl9z aXplKTsKKwkJZXhwZWN0X2RfZXEobWFsbGN0bGJ5bWliKG1pYiwgbWlibGVuLCAodm9pZCAqKSZi aW5fc2l6ZSwgJmxlbiwKKwkJICAgIE5VTEwsIDApLCAwLCAiVW5leHBlY3RlZCBtYWxsY3RsYnlt aWIoKSBmYWlsdXJlIik7CisJCS8qIERvIHNvbWV0aGluZyB3aXRoIGJpbl9zaXplLi4uICovCisJ fQorfQorVEVTVF9FTkQKKworVEVTVF9CRUdJTih0ZXN0X3RjYWNoZV9ub25lKSB7CisJdGVzdF9z a2lwX2lmKCFvcHRfdGNhY2hlKTsKKworCS8qIEFsbG9jYXRlIHAgYW5kIHEuICovCisJdm9pZCAq cDAgPSBtYWxsb2N4KDQyLCAwKTsKKwlleHBlY3RfcHRyX25vdF9udWxsKHAwLCAiVW5leHBlY3Rl ZCBtYWxsb2N4KCkgZmFpbHVyZSIpOworCXZvaWQgKnEgPSBtYWxsb2N4KDQyLCAwKTsKKwlleHBl Y3RfcHRyX25vdF9udWxsKHEsICJVbmV4cGVjdGVkIG1hbGxvY3goKSBmYWlsdXJlIik7CisKKwkv KiBEZWFsbG9jYXRlIHAgYW5kIHEsIGJ1dCBieXBhc3MgdGhlIHRjYWNoZSBmb3IgcS4gKi8KKwlk YWxsb2N4KHAwLCAwKTsKKwlkYWxsb2N4KHEsIE1BTExPQ1hfVENBQ0hFX05PTkUpOworCisJLyog TWFrZSBzdXJlIHRoYXQgdGNhY2hlLWJhc2VkIGFsbG9jYXRpb24gcmV0dXJucyBwLCBub3QgcS4g Ki8KKwl2b2lkICpwMSA9IG1hbGxvY3goNDIsIDApOworCWV4cGVjdF9wdHJfbm90X251bGwocDEs ICJVbmV4cGVjdGVkIG1hbGxvY3goKSBmYWlsdXJlIik7CisJaWYgKCFvcHRfcHJvZiAmJiAhc2Fu X3VhZl9kZXRlY3Rpb25fZW5hYmxlZCgpKSB7CisJCWV4cGVjdF9wdHJfZXEocDAsIHAxLAorCQkg ICAgIkV4cGVjdGVkIHRjYWNoZSB0byBhbGxvY2F0ZSBjYWNoZWQgcmVnaW9uIik7CisJfQorCisJ LyogQ2xlYW4gdXAuICovCisJZGFsbG9jeChwMSwgTUFMTE9DWF9UQ0FDSEVfTk9ORSk7Cit9CitU RVNUX0VORAorCitURVNUX0JFR0lOKHRlc3RfdGNhY2hlKSB7CisjZGVmaW5lIE5UQ0FDSEVTCTEw CisJdW5zaWduZWQgdGlzW05UQ0FDSEVTXTsKKwl2b2lkICpwc1tOVENBQ0hFU107CisJdm9pZCAq cXNbTlRDQUNIRVNdOworCXVuc2lnbmVkIGk7CisJc2l6ZV90IHN6LCBwc3osIHFzejsKKworCXBz eiA9IDQyOworCXFzeiA9IG5hbGxvY3gocHN6LCAwKSArIDE7CisKKwkvKiBDcmVhdGUgdGNhY2hl cy4gKi8KKwlmb3IgKGkgPSAwOyBpIDwgTlRDQUNIRVM7IGkrKykgeworCQlzeiA9IHNpemVvZih1 bnNpZ25lZCk7CisJCWV4cGVjdF9kX2VxKG1hbGxjdGwoInRjYWNoZS5jcmVhdGUiLCAodm9pZCAq KSZ0aXNbaV0sICZzeiwgTlVMTCwKKwkJICAgIDApLCAwLCAiVW5leHBlY3RlZCBtYWxsY3RsKCkg ZmFpbHVyZSwgaT0ldSIsIGkpOworCX0KKworCS8qIEV4ZXJjaXNlIHRjYWNoZSBJRCByZWN5Y2xp bmcuICovCisJZm9yIChpID0gMDsgaSA8IE5UQ0FDSEVTOyBpKyspIHsKKwkJZXhwZWN0X2RfZXEo bWFsbGN0bCgidGNhY2hlLmRlc3Ryb3kiLCBOVUxMLCBOVUxMLAorCQkgICAgKHZvaWQgKikmdGlz W2ldLCBzaXplb2YodW5zaWduZWQpKSwgMCwKKwkJICAgICJVbmV4cGVjdGVkIG1hbGxjdGwoKSBm YWlsdXJlLCBpPSV1IiwgaSk7CisJfQorCWZvciAoaSA9IDA7IGkgPCBOVENBQ0hFUzsgaSsrKSB7 CisJCXN6ID0gc2l6ZW9mKHVuc2lnbmVkKTsKKwkJZXhwZWN0X2RfZXEobWFsbGN0bCgidGNhY2hl LmNyZWF0ZSIsICh2b2lkICopJnRpc1tpXSwgJnN6LCBOVUxMLAorCQkgICAgMCksIDAsICJVbmV4 cGVjdGVkIG1hbGxjdGwoKSBmYWlsdXJlLCBpPSV1IiwgaSk7CisJfQorCisJLyogRmx1c2ggZW1w dHkgdGNhY2hlcy4gKi8KKwlmb3IgKGkgPSAwOyBpIDwgTlRDQUNIRVM7IGkrKykgeworCQlleHBl Y3RfZF9lcShtYWxsY3RsKCJ0Y2FjaGUuZmx1c2giLCBOVUxMLCBOVUxMLCAodm9pZCAqKSZ0aXNb aV0sCisJCSAgICBzaXplb2YodW5zaWduZWQpKSwgMCwgIlVuZXhwZWN0ZWQgbWFsbGN0bCgpIGZh aWx1cmUsIGk9JXUiLAorCQkgICAgaSk7CisJfQorCisJLyogQ2FjaGUgc29tZSBhbGxvY2F0aW9u cy4gKi8KKwlmb3IgKGkgPSAwOyBpIDwgTlRDQUNIRVM7IGkrKykgeworCQlwc1tpXSA9IG1hbGxv Y3gocHN6LCBNQUxMT0NYX1RDQUNIRSh0aXNbaV0pKTsKKwkJZXhwZWN0X3B0cl9ub3RfbnVsbChw c1tpXSwgIlVuZXhwZWN0ZWQgbWFsbG9jeCgpIGZhaWx1cmUsIGk9JXUiLAorCQkgICAgaSk7CisJ CWRhbGxvY3gocHNbaV0sIE1BTExPQ1hfVENBQ0hFKHRpc1tpXSkpOworCisJCXFzW2ldID0gbWFs bG9jeChxc3osIE1BTExPQ1hfVENBQ0hFKHRpc1tpXSkpOworCQlleHBlY3RfcHRyX25vdF9udWxs KHFzW2ldLCAiVW5leHBlY3RlZCBtYWxsb2N4KCkgZmFpbHVyZSwgaT0ldSIsCisJCSAgICBpKTsK KwkJZGFsbG9jeChxc1tpXSwgTUFMTE9DWF9UQ0FDSEUodGlzW2ldKSk7CisJfQorCisJLyogVmVy aWZ5IHRoYXQgdGNhY2hlcyBhbGxvY2F0ZSBjYWNoZWQgcmVnaW9ucy4gKi8KKwlmb3IgKGkgPSAw OyBpIDwgTlRDQUNIRVM7IGkrKykgeworCQl2b2lkICpwMCA9IHBzW2ldOworCQlwc1tpXSA9IG1h bGxvY3gocHN6LCBNQUxMT0NYX1RDQUNIRSh0aXNbaV0pKTsKKwkJZXhwZWN0X3B0cl9ub3RfbnVs bChwc1tpXSwgIlVuZXhwZWN0ZWQgbWFsbG9jeCgpIGZhaWx1cmUsIGk9JXUiLAorCQkgICAgaSk7 CisJCWlmICghc2FuX3VhZl9kZXRlY3Rpb25fZW5hYmxlZCgpKSB7CisJCQlleHBlY3RfcHRyX2Vx KHBzW2ldLCBwMCwgIkV4cGVjdGVkIG1hbGxvY3goKSB0byAiCisJCQkgICAgImFsbG9jYXRlIGNh Y2hlZCByZWdpb24sIGk9JXUiLCBpKTsKKwkJfQorCX0KKworCS8qIFZlcmlmeSB0aGF0IHJlYWxs b2NhdGlvbiB1c2VzIGNhY2hlZCByZWdpb25zLiAqLworCWZvciAoaSA9IDA7IGkgPCBOVENBQ0hF UzsgaSsrKSB7CisJCXZvaWQgKnEwID0gcXNbaV07CisJCXFzW2ldID0gcmFsbG9jeChwc1tpXSwg cXN6LCBNQUxMT0NYX1RDQUNIRSh0aXNbaV0pKTsKKwkJZXhwZWN0X3B0cl9ub3RfbnVsbChxc1tp XSwgIlVuZXhwZWN0ZWQgcmFsbG9jeCgpIGZhaWx1cmUsIGk9JXUiLAorCQkgICAgaSk7CisJCWlm ICghc2FuX3VhZl9kZXRlY3Rpb25fZW5hYmxlZCgpKSB7CisJCQlleHBlY3RfcHRyX2VxKHFzW2ld LCBxMCwgIkV4cGVjdGVkIHJhbGxvY3goKSB0byAiCisJCQkgICAgImFsbG9jYXRlIGNhY2hlZCBy ZWdpb24sIGk9JXUiLCBpKTsKKwkJfQorCQkvKiBBdm9pZCB1bmRlZmluZWQgYmVoYXZpb3IgaW4g Y2FzZSBvZiB0ZXN0IGZhaWx1cmUuICovCisJCWlmIChxc1tpXSA9PSBOVUxMKSB7CisJCQlxc1tp XSA9IHBzW2ldOworCQl9CisJfQorCWZvciAoaSA9IDA7IGkgPCBOVENBQ0hFUzsgaSsrKSB7CisJ CWRhbGxvY3gocXNbaV0sIE1BTExPQ1hfVENBQ0hFKHRpc1tpXSkpOworCX0KKworCS8qIEZsdXNo IHNvbWUgbm9uLWVtcHR5IHRjYWNoZXMuICovCisJZm9yIChpID0gMDsgaSA8IE5UQ0FDSEVTLzI7 IGkrKykgeworCQlleHBlY3RfZF9lcShtYWxsY3RsKCJ0Y2FjaGUuZmx1c2giLCBOVUxMLCBOVUxM LCAodm9pZCAqKSZ0aXNbaV0sCisJCSAgICBzaXplb2YodW5zaWduZWQpKSwgMCwgIlVuZXhwZWN0 ZWQgbWFsbGN0bCgpIGZhaWx1cmUsIGk9JXUiLAorCQkgICAgaSk7CisJfQorCisJLyogRGVzdHJv eSB0Y2FjaGVzLiAqLworCWZvciAoaSA9IDA7IGkgPCBOVENBQ0hFUzsgaSsrKSB7CisJCWV4cGVj dF9kX2VxKG1hbGxjdGwoInRjYWNoZS5kZXN0cm95IiwgTlVMTCwgTlVMTCwKKwkJICAgICh2b2lk ICopJnRpc1tpXSwgc2l6ZW9mKHVuc2lnbmVkKSksIDAsCisJCSAgICAiVW5leHBlY3RlZCBtYWxs Y3RsKCkgZmFpbHVyZSwgaT0ldSIsIGkpOworCX0KK30KK1RFU1RfRU5ECisKK1RFU1RfQkVHSU4o dGVzdF90aHJlYWRfYXJlbmEpIHsKKwl1bnNpZ25lZCBvbGRfYXJlbmFfaW5kLCBuZXdfYXJlbmFf aW5kLCBuYXJlbmFzOworCisJY29uc3QgY2hhciAqb3BhOworCXNpemVfdCBzeiA9IHNpemVvZihv cGEpOworCWV4cGVjdF9kX2VxKG1hbGxjdGwoIm9wdC5wZXJjcHVfYXJlbmEiLCAodm9pZCAqKSZv cGEsICZzeiwgTlVMTCwgMCksIDAsCisJICAgICJVbmV4cGVjdGVkIG1hbGxjdGwoKSBmYWlsdXJl Iik7CisKKwlzeiA9IHNpemVvZih1bnNpZ25lZCk7CisJZXhwZWN0X2RfZXEobWFsbGN0bCgiYXJl bmFzLm5hcmVuYXMiLCAodm9pZCAqKSZuYXJlbmFzLCAmc3osIE5VTEwsIDApLAorCSAgICAwLCAi VW5leHBlY3RlZCBtYWxsY3RsKCkgZmFpbHVyZSIpOworCWlmIChvcHRfb3ZlcnNpemVfdGhyZXNo b2xkICE9IDApIHsKKwkJbmFyZW5hcy0tOworCX0KKwlleHBlY3RfdV9lcShuYXJlbmFzLCBvcHRf bmFyZW5hcywgIk51bWJlciBvZiBhcmVuYXMgaW5jb3JyZWN0Iik7CisKKwlpZiAoc3RyY21wKG9w YSwgImRpc2FibGVkIikgPT0gMCkgeworCQluZXdfYXJlbmFfaW5kID0gbmFyZW5hcyAtIDE7CisJ CWV4cGVjdF9kX2VxKG1hbGxjdGwoInRocmVhZC5hcmVuYSIsICh2b2lkICopJm9sZF9hcmVuYV9p bmQsICZzeiwKKwkJICAgICh2b2lkICopJm5ld19hcmVuYV9pbmQsIHNpemVvZih1bnNpZ25lZCkp LCAwLAorCQkgICAgIlVuZXhwZWN0ZWQgbWFsbGN0bCgpIGZhaWx1cmUiKTsKKwkJbmV3X2FyZW5h X2luZCA9IDA7CisJCWV4cGVjdF9kX2VxKG1hbGxjdGwoInRocmVhZC5hcmVuYSIsICh2b2lkICop Jm9sZF9hcmVuYV9pbmQsICZzeiwKKwkJICAgICh2b2lkICopJm5ld19hcmVuYV9pbmQsIHNpemVv Zih1bnNpZ25lZCkpLCAwLAorCQkgICAgIlVuZXhwZWN0ZWQgbWFsbGN0bCgpIGZhaWx1cmUiKTsK Kwl9IGVsc2UgeworCQlleHBlY3RfZF9lcShtYWxsY3RsKCJ0aHJlYWQuYXJlbmEiLCAodm9pZCAq KSZvbGRfYXJlbmFfaW5kLCAmc3osCisJCSAgICBOVUxMLCAwKSwgMCwgIlVuZXhwZWN0ZWQgbWFs bGN0bCgpIGZhaWx1cmUiKTsKKwkJbmV3X2FyZW5hX2luZCA9IHBlcmNwdV9hcmVuYV9pbmRfbGlt aXQob3B0X3BlcmNwdV9hcmVuYSkgLSAxOworCQlpZiAob2xkX2FyZW5hX2luZCAhPSBuZXdfYXJl bmFfaW5kKSB7CisJCQlleHBlY3RfZF9lcShtYWxsY3RsKCJ0aHJlYWQuYXJlbmEiLAorCQkJICAg ICh2b2lkICopJm9sZF9hcmVuYV9pbmQsICZzeiwgKHZvaWQgKikmbmV3X2FyZW5hX2luZCwKKwkJ CSAgICBzaXplb2YodW5zaWduZWQpKSwgRVBFUk0sICJ0aHJlYWQuYXJlbmEgY3RsICIKKwkJCSAg ICAic2hvdWxkIG5vdCBiZSBhbGxvd2VkIHdpdGggcGVyY3B1IGFyZW5hIik7CisJCX0KKwl9Cit9 CitURVNUX0VORAorCitURVNUX0JFR0lOKHRlc3RfYXJlbmFfaV9pbml0aWFsaXplZCkgeworCXVu c2lnbmVkIG5hcmVuYXMsIGk7CisJc2l6ZV90IHN6OworCXNpemVfdCBtaWJbM107CisJc2l6ZV90 IG1pYmxlbiA9IHNpemVvZihtaWIpIC8gc2l6ZW9mKHNpemVfdCk7CisJYm9vbCBpbml0aWFsaXpl ZDsKKworCXN6ID0gc2l6ZW9mKG5hcmVuYXMpOworCWV4cGVjdF9kX2VxKG1hbGxjdGwoImFyZW5h cy5uYXJlbmFzIiwgKHZvaWQgKikmbmFyZW5hcywgJnN6LCBOVUxMLCAwKSwKKwkgICAgMCwgIlVu ZXhwZWN0ZWQgbWFsbGN0bCgpIGZhaWx1cmUiKTsKKworCWV4cGVjdF9kX2VxKG1hbGxjdGxuYW1l dG9taWIoImFyZW5hLjAuaW5pdGlhbGl6ZWQiLCBtaWIsICZtaWJsZW4pLCAwLAorCSAgICAiVW5l eHBlY3RlZCBtYWxsY3RsbmFtZXRvbWliKCkgZmFpbHVyZSIpOworCWZvciAoaSA9IDA7IGkgPCBu YXJlbmFzOyBpKyspIHsKKwkJbWliWzFdID0gaTsKKwkJc3ogPSBzaXplb2YoaW5pdGlhbGl6ZWQp OworCQlleHBlY3RfZF9lcShtYWxsY3RsYnltaWIobWliLCBtaWJsZW4sICZpbml0aWFsaXplZCwg JnN6LCBOVUxMLAorCQkgICAgMCksIDAsICJVbmV4cGVjdGVkIG1hbGxjdGwoKSBmYWlsdXJlIik7 CisJfQorCisJbWliWzFdID0gTUFMTENUTF9BUkVOQVNfQUxMOworCXN6ID0gc2l6ZW9mKGluaXRp YWxpemVkKTsKKwlleHBlY3RfZF9lcShtYWxsY3RsYnltaWIobWliLCBtaWJsZW4sICZpbml0aWFs aXplZCwgJnN6LCBOVUxMLCAwKSwgMCwKKwkgICAgIlVuZXhwZWN0ZWQgbWFsbGN0bCgpIGZhaWx1 cmUiKTsKKwlleHBlY3RfdHJ1ZShpbml0aWFsaXplZCwKKwkgICAgIk1lcmdlZCBhcmVuYSBzdGF0 aXN0aWNzIHNob3VsZCBhbHdheXMgYmUgaW5pdGlhbGl6ZWQiKTsKKworCS8qIEVxdWl2YWxlbnQg dG8gdGhlIGFib3ZlIGJ1dCB1c2luZyBtYWxsY3RsKCkgZGlyZWN0bHkuICovCisJc3ogPSBzaXpl b2YoaW5pdGlhbGl6ZWQpOworCWV4cGVjdF9kX2VxKG1hbGxjdGwoCisJICAgICJhcmVuYS4iIFNU UklOR0lGWShNQUxMQ1RMX0FSRU5BU19BTEwpICIuaW5pdGlhbGl6ZWQiLAorCSAgICAodm9pZCAq KSZpbml0aWFsaXplZCwgJnN6LCBOVUxMLCAwKSwgMCwKKwkgICAgIlVuZXhwZWN0ZWQgbWFsbGN0 bCgpIGZhaWx1cmUiKTsKKwlleHBlY3RfdHJ1ZShpbml0aWFsaXplZCwKKwkgICAgIk1lcmdlZCBh cmVuYSBzdGF0aXN0aWNzIHNob3VsZCBhbHdheXMgYmUgaW5pdGlhbGl6ZWQiKTsKK30KK1RFU1Rf RU5ECisKK1RFU1RfQkVHSU4odGVzdF9hcmVuYV9pX2RpcnR5X2RlY2F5X21zKSB7CisJc3NpemVf dCBkaXJ0eV9kZWNheV9tcywgb3JpZ19kaXJ0eV9kZWNheV9tcywgcHJldl9kaXJ0eV9kZWNheV9t czsKKwlzaXplX3Qgc3ogPSBzaXplb2Yoc3NpemVfdCk7CisKKwlleHBlY3RfZF9lcShtYWxsY3Rs KCJhcmVuYS4wLmRpcnR5X2RlY2F5X21zIiwKKwkgICAgKHZvaWQgKikmb3JpZ19kaXJ0eV9kZWNh eV9tcywgJnN6LCBOVUxMLCAwKSwgMCwKKwkgICAgIlVuZXhwZWN0ZWQgbWFsbGN0bCgpIGZhaWx1 cmUiKTsKKworCWRpcnR5X2RlY2F5X21zID0gLTI7CisJZXhwZWN0X2RfZXEobWFsbGN0bCgiYXJl bmEuMC5kaXJ0eV9kZWNheV9tcyIsIE5VTEwsIE5VTEwsCisJICAgICh2b2lkICopJmRpcnR5X2Rl Y2F5X21zLCBzaXplb2Yoc3NpemVfdCkpLCBFRkFVTFQsCisJICAgICJVbmV4cGVjdGVkIG1hbGxj dGwoKSBzdWNjZXNzIik7CisKKwlkaXJ0eV9kZWNheV9tcyA9IDB4N2ZmZmZmZmY7CisJZXhwZWN0 X2RfZXEobWFsbGN0bCgiYXJlbmEuMC5kaXJ0eV9kZWNheV9tcyIsIE5VTEwsIE5VTEwsCisJICAg ICh2b2lkICopJmRpcnR5X2RlY2F5X21zLCBzaXplb2Yoc3NpemVfdCkpLCAwLAorCSAgICAiVW5l eHBlY3RlZCBtYWxsY3RsKCkgZmFpbHVyZSIpOworCisJZm9yIChwcmV2X2RpcnR5X2RlY2F5X21z ID0gZGlydHlfZGVjYXlfbXMsIGRpcnR5X2RlY2F5X21zID0gLTE7CisJICAgIGRpcnR5X2RlY2F5 X21zIDwgMjA7IHByZXZfZGlydHlfZGVjYXlfbXMgPSBkaXJ0eV9kZWNheV9tcywKKwkgICAgZGly dHlfZGVjYXlfbXMrKykgeworCQlzc2l6ZV90IG9sZF9kaXJ0eV9kZWNheV9tczsKKworCQlleHBl Y3RfZF9lcShtYWxsY3RsKCJhcmVuYS4wLmRpcnR5X2RlY2F5X21zIiwKKwkJICAgICh2b2lkICop Jm9sZF9kaXJ0eV9kZWNheV9tcywgJnN6LCAodm9pZCAqKSZkaXJ0eV9kZWNheV9tcywKKwkJICAg IHNpemVvZihzc2l6ZV90KSksIDAsICJVbmV4cGVjdGVkIG1hbGxjdGwoKSBmYWlsdXJlIik7CisJ CWV4cGVjdF96ZF9lcShvbGRfZGlydHlfZGVjYXlfbXMsIHByZXZfZGlydHlfZGVjYXlfbXMsCisJ CSAgICAiVW5leHBlY3RlZCBvbGQgYXJlbmEuMC5kaXJ0eV9kZWNheV9tcyIpOworCX0KK30KK1RF U1RfRU5ECisKK1RFU1RfQkVHSU4odGVzdF9hcmVuYV9pX211enp5X2RlY2F5X21zKSB7CisJc3Np emVfdCBtdXp6eV9kZWNheV9tcywgb3JpZ19tdXp6eV9kZWNheV9tcywgcHJldl9tdXp6eV9kZWNh eV9tczsKKwlzaXplX3Qgc3ogPSBzaXplb2Yoc3NpemVfdCk7CisKKwlleHBlY3RfZF9lcShtYWxs Y3RsKCJhcmVuYS4wLm11enp5X2RlY2F5X21zIiwKKwkgICAgKHZvaWQgKikmb3JpZ19tdXp6eV9k ZWNheV9tcywgJnN6LCBOVUxMLCAwKSwgMCwKKwkgICAgIlVuZXhwZWN0ZWQgbWFsbGN0bCgpIGZh aWx1cmUiKTsKKworCW11enp5X2RlY2F5X21zID0gLTI7CisJZXhwZWN0X2RfZXEobWFsbGN0bCgi YXJlbmEuMC5tdXp6eV9kZWNheV9tcyIsIE5VTEwsIE5VTEwsCisJICAgICh2b2lkICopJm11enp5 X2RlY2F5X21zLCBzaXplb2Yoc3NpemVfdCkpLCBFRkFVTFQsCisJICAgICJVbmV4cGVjdGVkIG1h bGxjdGwoKSBzdWNjZXNzIik7CisKKwltdXp6eV9kZWNheV9tcyA9IDB4N2ZmZmZmZmY7CisJZXhw ZWN0X2RfZXEobWFsbGN0bCgiYXJlbmEuMC5tdXp6eV9kZWNheV9tcyIsIE5VTEwsIE5VTEwsCisJ ICAgICh2b2lkICopJm11enp5X2RlY2F5X21zLCBzaXplb2Yoc3NpemVfdCkpLCAwLAorCSAgICAi VW5leHBlY3RlZCBtYWxsY3RsKCkgZmFpbHVyZSIpOworCisJZm9yIChwcmV2X211enp5X2RlY2F5 X21zID0gbXV6enlfZGVjYXlfbXMsIG11enp5X2RlY2F5X21zID0gLTE7CisJICAgIG11enp5X2Rl Y2F5X21zIDwgMjA7IHByZXZfbXV6enlfZGVjYXlfbXMgPSBtdXp6eV9kZWNheV9tcywKKwkgICAg bXV6enlfZGVjYXlfbXMrKykgeworCQlzc2l6ZV90IG9sZF9tdXp6eV9kZWNheV9tczsKKworCQll eHBlY3RfZF9lcShtYWxsY3RsKCJhcmVuYS4wLm11enp5X2RlY2F5X21zIiwKKwkJICAgICh2b2lk ICopJm9sZF9tdXp6eV9kZWNheV9tcywgJnN6LCAodm9pZCAqKSZtdXp6eV9kZWNheV9tcywKKwkJ ICAgIHNpemVvZihzc2l6ZV90KSksIDAsICJVbmV4cGVjdGVkIG1hbGxjdGwoKSBmYWlsdXJlIik7 CisJCWV4cGVjdF96ZF9lcShvbGRfbXV6enlfZGVjYXlfbXMsIHByZXZfbXV6enlfZGVjYXlfbXMs CisJCSAgICAiVW5leHBlY3RlZCBvbGQgYXJlbmEuMC5tdXp6eV9kZWNheV9tcyIpOworCX0KK30K K1RFU1RfRU5ECisKK1RFU1RfQkVHSU4odGVzdF9hcmVuYV9pX3B1cmdlKSB7CisJdW5zaWduZWQg bmFyZW5hczsKKwlzaXplX3Qgc3ogPSBzaXplb2YodW5zaWduZWQpOworCXNpemVfdCBtaWJbM107 CisJc2l6ZV90IG1pYmxlbiA9IDM7CisKKwlleHBlY3RfZF9lcShtYWxsY3RsKCJhcmVuYS4wLnB1 cmdlIiwgTlVMTCwgTlVMTCwgTlVMTCwgMCksIDAsCisJICAgICJVbmV4cGVjdGVkIG1hbGxjdGwo KSBmYWlsdXJlIik7CisKKwlleHBlY3RfZF9lcShtYWxsY3RsKCJhcmVuYXMubmFyZW5hcyIsICh2 b2lkICopJm5hcmVuYXMsICZzeiwgTlVMTCwgMCksCisJICAgIDAsICJVbmV4cGVjdGVkIG1hbGxj dGwoKSBmYWlsdXJlIik7CisJZXhwZWN0X2RfZXEobWFsbGN0bG5hbWV0b21pYigiYXJlbmEuMC5w dXJnZSIsIG1pYiwgJm1pYmxlbiksIDAsCisJICAgICJVbmV4cGVjdGVkIG1hbGxjdGxuYW1ldG9t aWIoKSBmYWlsdXJlIik7CisJbWliWzFdID0gbmFyZW5hczsKKwlleHBlY3RfZF9lcShtYWxsY3Rs YnltaWIobWliLCBtaWJsZW4sIE5VTEwsIE5VTEwsIE5VTEwsIDApLCAwLAorCSAgICAiVW5leHBl Y3RlZCBtYWxsY3RsYnltaWIoKSBmYWlsdXJlIik7CisKKwltaWJbMV0gPSBNQUxMQ1RMX0FSRU5B U19BTEw7CisJZXhwZWN0X2RfZXEobWFsbGN0bGJ5bWliKG1pYiwgbWlibGVuLCBOVUxMLCBOVUxM LCBOVUxMLCAwKSwgMCwKKwkgICAgIlVuZXhwZWN0ZWQgbWFsbGN0bGJ5bWliKCkgZmFpbHVyZSIp OworfQorVEVTVF9FTkQKKworVEVTVF9CRUdJTih0ZXN0X2FyZW5hX2lfZGVjYXkpIHsKKwl1bnNp Z25lZCBuYXJlbmFzOworCXNpemVfdCBzeiA9IHNpemVvZih1bnNpZ25lZCk7CisJc2l6ZV90IG1p YlszXTsKKwlzaXplX3QgbWlibGVuID0gMzsKKworCWV4cGVjdF9kX2VxKG1hbGxjdGwoImFyZW5h LjAuZGVjYXkiLCBOVUxMLCBOVUxMLCBOVUxMLCAwKSwgMCwKKwkgICAgIlVuZXhwZWN0ZWQgbWFs bGN0bCgpIGZhaWx1cmUiKTsKKworCWV4cGVjdF9kX2VxKG1hbGxjdGwoImFyZW5hcy5uYXJlbmFz IiwgKHZvaWQgKikmbmFyZW5hcywgJnN6LCBOVUxMLCAwKSwKKwkgICAgMCwgIlVuZXhwZWN0ZWQg bWFsbGN0bCgpIGZhaWx1cmUiKTsKKwlleHBlY3RfZF9lcShtYWxsY3RsbmFtZXRvbWliKCJhcmVu YS4wLmRlY2F5IiwgbWliLCAmbWlibGVuKSwgMCwKKwkgICAgIlVuZXhwZWN0ZWQgbWFsbGN0bG5h bWV0b21pYigpIGZhaWx1cmUiKTsKKwltaWJbMV0gPSBuYXJlbmFzOworCWV4cGVjdF9kX2VxKG1h bGxjdGxieW1pYihtaWIsIG1pYmxlbiwgTlVMTCwgTlVMTCwgTlVMTCwgMCksIDAsCisJICAgICJV bmV4cGVjdGVkIG1hbGxjdGxieW1pYigpIGZhaWx1cmUiKTsKKworCW1pYlsxXSA9IE1BTExDVExf QVJFTkFTX0FMTDsKKwlleHBlY3RfZF9lcShtYWxsY3RsYnltaWIobWliLCBtaWJsZW4sIE5VTEws IE5VTEwsIE5VTEwsIDApLCAwLAorCSAgICAiVW5leHBlY3RlZCBtYWxsY3RsYnltaWIoKSBmYWls dXJlIik7Cit9CitURVNUX0VORAorCitURVNUX0JFR0lOKHRlc3RfYXJlbmFfaV9kc3MpIHsKKwlj b25zdCBjaGFyICpkc3NfcHJlY19vbGQsICpkc3NfcHJlY19uZXc7CisJc2l6ZV90IHN6ID0gc2l6 ZW9mKGRzc19wcmVjX29sZCk7CisJc2l6ZV90IG1pYlszXTsKKwlzaXplX3QgbWlibGVuOworCisJ bWlibGVuID0gc2l6ZW9mKG1pYikvc2l6ZW9mKHNpemVfdCk7CisJZXhwZWN0X2RfZXEobWFsbGN0 bG5hbWV0b21pYigiYXJlbmEuMC5kc3MiLCBtaWIsICZtaWJsZW4pLCAwLAorCSAgICAiVW5leHBl Y3RlZCBtYWxsY3RsbmFtZXRvbWliKCkgZXJyb3IiKTsKKworCWRzc19wcmVjX25ldyA9ICJkaXNh YmxlZCI7CisJZXhwZWN0X2RfZXEobWFsbGN0bGJ5bWliKG1pYiwgbWlibGVuLCAodm9pZCAqKSZk c3NfcHJlY19vbGQsICZzeiwKKwkgICAgKHZvaWQgKikmZHNzX3ByZWNfbmV3LCBzaXplb2YoZHNz X3ByZWNfbmV3KSksIDAsCisJICAgICJVbmV4cGVjdGVkIG1hbGxjdGwoKSBmYWlsdXJlIik7CisJ ZXhwZWN0X3N0cl9uZShkc3NfcHJlY19vbGQsICJwcmltYXJ5IiwKKwkgICAgIlVuZXhwZWN0ZWQg ZGVmYXVsdCBmb3IgZHNzIHByZWNlZGVuY2UiKTsKKworCWV4cGVjdF9kX2VxKG1hbGxjdGxieW1p YihtaWIsIG1pYmxlbiwgKHZvaWQgKikmZHNzX3ByZWNfbmV3LCAmc3osCisJICAgICh2b2lkICop JmRzc19wcmVjX29sZCwgc2l6ZW9mKGRzc19wcmVjX29sZCkpLCAwLAorCSAgICAiVW5leHBlY3Rl ZCBtYWxsY3RsKCkgZmFpbHVyZSIpOworCisJZXhwZWN0X2RfZXEobWFsbGN0bGJ5bWliKG1pYiwg bWlibGVuLCAodm9pZCAqKSZkc3NfcHJlY19vbGQsICZzeiwgTlVMTCwKKwkgICAgMCksIDAsICJV bmV4cGVjdGVkIG1hbGxjdGwoKSBmYWlsdXJlIik7CisJZXhwZWN0X3N0cl9uZShkc3NfcHJlY19v bGQsICJwcmltYXJ5IiwKKwkgICAgIlVuZXhwZWN0ZWQgdmFsdWUgZm9yIGRzcyBwcmVjZWRlbmNl Iik7CisKKwltaWJbMV0gPSBuYXJlbmFzX3RvdGFsX2dldCgpOworCWRzc19wcmVjX25ldyA9ICJk aXNhYmxlZCI7CisJZXhwZWN0X2RfZXEobWFsbGN0bGJ5bWliKG1pYiwgbWlibGVuLCAodm9pZCAq KSZkc3NfcHJlY19vbGQsICZzeiwKKwkgICAgKHZvaWQgKikmZHNzX3ByZWNfbmV3LCBzaXplb2Yo ZHNzX3ByZWNfbmV3KSksIDAsCisJICAgICJVbmV4cGVjdGVkIG1hbGxjdGwoKSBmYWlsdXJlIik7 CisJZXhwZWN0X3N0cl9uZShkc3NfcHJlY19vbGQsICJwcmltYXJ5IiwKKwkgICAgIlVuZXhwZWN0 ZWQgZGVmYXVsdCBmb3IgZHNzIHByZWNlZGVuY2UiKTsKKworCWV4cGVjdF9kX2VxKG1hbGxjdGxi eW1pYihtaWIsIG1pYmxlbiwgKHZvaWQgKikmZHNzX3ByZWNfbmV3LCAmc3osCisJICAgICh2b2lk ICopJmRzc19wcmVjX29sZCwgc2l6ZW9mKGRzc19wcmVjX25ldykpLCAwLAorCSAgICAiVW5leHBl Y3RlZCBtYWxsY3RsKCkgZmFpbHVyZSIpOworCisJZXhwZWN0X2RfZXEobWFsbGN0bGJ5bWliKG1p YiwgbWlibGVuLCAodm9pZCAqKSZkc3NfcHJlY19vbGQsICZzeiwgTlVMTCwKKwkgICAgMCksIDAs ICJVbmV4cGVjdGVkIG1hbGxjdGwoKSBmYWlsdXJlIik7CisJZXhwZWN0X3N0cl9uZShkc3NfcHJl Y19vbGQsICJwcmltYXJ5IiwKKwkgICAgIlVuZXhwZWN0ZWQgdmFsdWUgZm9yIGRzcyBwcmVjZWRl bmNlIik7Cit9CitURVNUX0VORAorCitURVNUX0JFR0lOKHRlc3RfYXJlbmFfaV9yZXRhaW5fZ3Jv d19saW1pdCkgeworCXNpemVfdCBvbGRfbGltaXQsIG5ld19saW1pdCwgZGVmYXVsdF9saW1pdDsK KwlzaXplX3QgbWliWzNdOworCXNpemVfdCBtaWJsZW47CisKKwlib29sIHJldGFpbl9lbmFibGVk OworCXNpemVfdCBzeiA9IHNpemVvZihyZXRhaW5fZW5hYmxlZCk7CisJZXhwZWN0X2RfZXEobWFs bGN0bCgib3B0LnJldGFpbiIsICZyZXRhaW5fZW5hYmxlZCwgJnN6LCBOVUxMLCAwKSwKKwkgICAg MCwgIlVuZXhwZWN0ZWQgbWFsbGN0bCgpIGZhaWx1cmUiKTsKKwl0ZXN0X3NraXBfaWYoIXJldGFp bl9lbmFibGVkKTsKKworCXN6ID0gc2l6ZW9mKGRlZmF1bHRfbGltaXQpOworCW1pYmxlbiA9IHNp emVvZihtaWIpL3NpemVvZihzaXplX3QpOworCWV4cGVjdF9kX2VxKG1hbGxjdGxuYW1ldG9taWIo ImFyZW5hLjAucmV0YWluX2dyb3dfbGltaXQiLCBtaWIsICZtaWJsZW4pLAorCSAgICAwLCAiVW5l eHBlY3RlZCBtYWxsY3RsbmFtZXRvbWliKCkgZXJyb3IiKTsKKworCWV4cGVjdF9kX2VxKG1hbGxj dGxieW1pYihtaWIsIG1pYmxlbiwgJmRlZmF1bHRfbGltaXQsICZzeiwgTlVMTCwgMCksIDAsCisJ ICAgICJVbmV4cGVjdGVkIG1hbGxjdGwoKSBmYWlsdXJlIik7CisJZXhwZWN0X3p1X2VxKGRlZmF1 bHRfbGltaXQsIFNDX0xBUkdFX01BWENMQVNTLAorCSAgICAiVW5leHBlY3RlZCBkZWZhdWx0IGZv ciByZXRhaW5fZ3Jvd19saW1pdCIpOworCisJbmV3X2xpbWl0ID0gUEFHRSAtIDE7CisJZXhwZWN0 X2RfZXEobWFsbGN0bGJ5bWliKG1pYiwgbWlibGVuLCBOVUxMLCBOVUxMLCAmbmV3X2xpbWl0LAor CSAgICBzaXplb2YobmV3X2xpbWl0KSksIEVGQVVMVCwgIlVuZXhwZWN0ZWQgbWFsbGN0bCgpIHN1 Y2Nlc3MiKTsKKworCW5ld19saW1pdCA9IFBBR0UgKyAxOworCWV4cGVjdF9kX2VxKG1hbGxjdGxi eW1pYihtaWIsIG1pYmxlbiwgTlVMTCwgTlVMTCwgJm5ld19saW1pdCwKKwkgICAgc2l6ZW9mKG5l d19saW1pdCkpLCAwLCAiVW5leHBlY3RlZCBtYWxsY3RsKCkgZmFpbHVyZSIpOworCWV4cGVjdF9k X2VxKG1hbGxjdGxieW1pYihtaWIsIG1pYmxlbiwgJm9sZF9saW1pdCwgJnN6LCBOVUxMLCAwKSwg MCwKKwkgICAgIlVuZXhwZWN0ZWQgbWFsbGN0bCgpIGZhaWx1cmUiKTsKKwlleHBlY3RfenVfZXEo b2xkX2xpbWl0LCBQQUdFLAorCSAgICAiVW5leHBlY3RlZCB2YWx1ZSBmb3IgcmV0YWluX2dyb3df bGltaXQiKTsKKworCS8qIEV4cGVjdCBncm93IGxlc3MgdGhhbiBwc2l6ZSBjbGFzcyAxMC4gKi8K KwluZXdfbGltaXQgPSBzel9waW5kMnN6KDEwKSAtIDE7CisJZXhwZWN0X2RfZXEobWFsbGN0bGJ5 bWliKG1pYiwgbWlibGVuLCBOVUxMLCBOVUxMLCAmbmV3X2xpbWl0LAorCSAgICBzaXplb2YobmV3 X2xpbWl0KSksIDAsICJVbmV4cGVjdGVkIG1hbGxjdGwoKSBmYWlsdXJlIik7CisJZXhwZWN0X2Rf ZXEobWFsbGN0bGJ5bWliKG1pYiwgbWlibGVuLCAmb2xkX2xpbWl0LCAmc3osIE5VTEwsIDApLCAw LAorCSAgICAiVW5leHBlY3RlZCBtYWxsY3RsKCkgZmFpbHVyZSIpOworCWV4cGVjdF96dV9lcShv bGRfbGltaXQsIHN6X3BpbmQyc3ooOSksCisJICAgICJVbmV4cGVjdGVkIHZhbHVlIGZvciByZXRh aW5fZ3Jvd19saW1pdCIpOworCisJLyogUmVzdG9yZSB0byBkZWZhdWx0LiAqLworCWV4cGVjdF9k X2VxKG1hbGxjdGxieW1pYihtaWIsIG1pYmxlbiwgTlVMTCwgTlVMTCwgJmRlZmF1bHRfbGltaXQs CisJICAgIHNpemVvZihkZWZhdWx0X2xpbWl0KSksIDAsICJVbmV4cGVjdGVkIG1hbGxjdGwoKSBm YWlsdXJlIik7Cit9CitURVNUX0VORAorCitURVNUX0JFR0lOKHRlc3RfYXJlbmFzX2RpcnR5X2Rl Y2F5X21zKSB7CisJc3NpemVfdCBkaXJ0eV9kZWNheV9tcywgb3JpZ19kaXJ0eV9kZWNheV9tcywg cHJldl9kaXJ0eV9kZWNheV9tczsKKwlzaXplX3Qgc3ogPSBzaXplb2Yoc3NpemVfdCk7CisKKwll eHBlY3RfZF9lcShtYWxsY3RsKCJhcmVuYXMuZGlydHlfZGVjYXlfbXMiLAorCSAgICAodm9pZCAq KSZvcmlnX2RpcnR5X2RlY2F5X21zLCAmc3osIE5VTEwsIDApLCAwLAorCSAgICAiVW5leHBlY3Rl ZCBtYWxsY3RsKCkgZmFpbHVyZSIpOworCisJZGlydHlfZGVjYXlfbXMgPSAtMjsKKwlleHBlY3Rf ZF9lcShtYWxsY3RsKCJhcmVuYXMuZGlydHlfZGVjYXlfbXMiLCBOVUxMLCBOVUxMLAorCSAgICAo dm9pZCAqKSZkaXJ0eV9kZWNheV9tcywgc2l6ZW9mKHNzaXplX3QpKSwgRUZBVUxULAorCSAgICAi VW5leHBlY3RlZCBtYWxsY3RsKCkgc3VjY2VzcyIpOworCisJZGlydHlfZGVjYXlfbXMgPSAweDdm ZmZmZmZmOworCWV4cGVjdF9kX2VxKG1hbGxjdGwoImFyZW5hcy5kaXJ0eV9kZWNheV9tcyIsIE5V TEwsIE5VTEwsCisJICAgICh2b2lkICopJmRpcnR5X2RlY2F5X21zLCBzaXplb2Yoc3NpemVfdCkp LCAwLAorCSAgICAiRXhwZWN0ZWQgbWFsbGN0bCgpIGZhaWx1cmUiKTsKKworCWZvciAocHJldl9k aXJ0eV9kZWNheV9tcyA9IGRpcnR5X2RlY2F5X21zLCBkaXJ0eV9kZWNheV9tcyA9IC0xOworCSAg ICBkaXJ0eV9kZWNheV9tcyA8IDIwOyBwcmV2X2RpcnR5X2RlY2F5X21zID0gZGlydHlfZGVjYXlf bXMsCisJICAgIGRpcnR5X2RlY2F5X21zKyspIHsKKwkJc3NpemVfdCBvbGRfZGlydHlfZGVjYXlf bXM7CisKKwkJZXhwZWN0X2RfZXEobWFsbGN0bCgiYXJlbmFzLmRpcnR5X2RlY2F5X21zIiwKKwkJ ICAgICh2b2lkICopJm9sZF9kaXJ0eV9kZWNheV9tcywgJnN6LCAodm9pZCAqKSZkaXJ0eV9kZWNh eV9tcywKKwkJICAgIHNpemVvZihzc2l6ZV90KSksIDAsICJVbmV4cGVjdGVkIG1hbGxjdGwoKSBm YWlsdXJlIik7CisJCWV4cGVjdF96ZF9lcShvbGRfZGlydHlfZGVjYXlfbXMsIHByZXZfZGlydHlf ZGVjYXlfbXMsCisJCSAgICAiVW5leHBlY3RlZCBvbGQgYXJlbmFzLmRpcnR5X2RlY2F5X21zIik7 CisJfQorfQorVEVTVF9FTkQKKworVEVTVF9CRUdJTih0ZXN0X2FyZW5hc19tdXp6eV9kZWNheV9t cykgeworCXNzaXplX3QgbXV6enlfZGVjYXlfbXMsIG9yaWdfbXV6enlfZGVjYXlfbXMsIHByZXZf bXV6enlfZGVjYXlfbXM7CisJc2l6ZV90IHN6ID0gc2l6ZW9mKHNzaXplX3QpOworCisJZXhwZWN0 X2RfZXEobWFsbGN0bCgiYXJlbmFzLm11enp5X2RlY2F5X21zIiwKKwkgICAgKHZvaWQgKikmb3Jp Z19tdXp6eV9kZWNheV9tcywgJnN6LCBOVUxMLCAwKSwgMCwKKwkgICAgIlVuZXhwZWN0ZWQgbWFs bGN0bCgpIGZhaWx1cmUiKTsKKworCW11enp5X2RlY2F5X21zID0gLTI7CisJZXhwZWN0X2RfZXEo bWFsbGN0bCgiYXJlbmFzLm11enp5X2RlY2F5X21zIiwgTlVMTCwgTlVMTCwKKwkgICAgKHZvaWQg KikmbXV6enlfZGVjYXlfbXMsIHNpemVvZihzc2l6ZV90KSksIEVGQVVMVCwKKwkgICAgIlVuZXhw ZWN0ZWQgbWFsbGN0bCgpIHN1Y2Nlc3MiKTsKKworCW11enp5X2RlY2F5X21zID0gMHg3ZmZmZmZm ZjsKKwlleHBlY3RfZF9lcShtYWxsY3RsKCJhcmVuYXMubXV6enlfZGVjYXlfbXMiLCBOVUxMLCBO VUxMLAorCSAgICAodm9pZCAqKSZtdXp6eV9kZWNheV9tcywgc2l6ZW9mKHNzaXplX3QpKSwgMCwK KwkgICAgIkV4cGVjdGVkIG1hbGxjdGwoKSBmYWlsdXJlIik7CisKKwlmb3IgKHByZXZfbXV6enlf ZGVjYXlfbXMgPSBtdXp6eV9kZWNheV9tcywgbXV6enlfZGVjYXlfbXMgPSAtMTsKKwkgICAgbXV6 enlfZGVjYXlfbXMgPCAyMDsgcHJldl9tdXp6eV9kZWNheV9tcyA9IG11enp5X2RlY2F5X21zLAor CSAgICBtdXp6eV9kZWNheV9tcysrKSB7CisJCXNzaXplX3Qgb2xkX211enp5X2RlY2F5X21zOwor CisJCWV4cGVjdF9kX2VxKG1hbGxjdGwoImFyZW5hcy5tdXp6eV9kZWNheV9tcyIsCisJCSAgICAo dm9pZCAqKSZvbGRfbXV6enlfZGVjYXlfbXMsICZzeiwgKHZvaWQgKikmbXV6enlfZGVjYXlfbXMs CisJCSAgICBzaXplb2Yoc3NpemVfdCkpLCAwLCAiVW5leHBlY3RlZCBtYWxsY3RsKCkgZmFpbHVy ZSIpOworCQlleHBlY3RfemRfZXEob2xkX211enp5X2RlY2F5X21zLCBwcmV2X211enp5X2RlY2F5 X21zLAorCQkgICAgIlVuZXhwZWN0ZWQgb2xkIGFyZW5hcy5tdXp6eV9kZWNheV9tcyIpOworCX0K K30KK1RFU1RfRU5ECisKK1RFU1RfQkVHSU4odGVzdF9hcmVuYXNfY29uc3RhbnRzKSB7CisjZGVm aW5lIFRFU1RfQVJFTkFTX0NPTlNUQU5UKHQsIG5hbWUsIGV4cGVjdGVkKSBkbyB7CQkJXAorCXQg bmFtZTsJCQkJCQkJCVwKKwlzaXplX3Qgc3ogPSBzaXplb2YodCk7CQkJCQkJXAorCWV4cGVjdF9k X2VxKG1hbGxjdGwoImFyZW5hcy4iI25hbWUsICh2b2lkICopJm5hbWUsICZzeiwgTlVMTCwJXAor CSAgICAwKSwgMCwgIlVuZXhwZWN0ZWQgbWFsbGN0bCgpIGZhaWx1cmUiKTsJCQlcCisJZXhwZWN0 X3p1X2VxKG5hbWUsIGV4cGVjdGVkLCAiSW5jb3JyZWN0ICIjbmFtZSIgc2l6ZSIpOwkJXAorfSB3 aGlsZSAoMCkKKworCVRFU1RfQVJFTkFTX0NPTlNUQU5UKHNpemVfdCwgcXVhbnR1bSwgUVVBTlRV TSk7CisJVEVTVF9BUkVOQVNfQ09OU1RBTlQoc2l6ZV90LCBwYWdlLCBQQUdFKTsKKwlURVNUX0FS RU5BU19DT05TVEFOVCh1bnNpZ25lZCwgbmJpbnMsIFNDX05CSU5TKTsKKwlURVNUX0FSRU5BU19D T05TVEFOVCh1bnNpZ25lZCwgbmxleHRlbnRzLCBTQ19OU0laRVMgLSBTQ19OQklOUyk7CisKKyN1 bmRlZiBURVNUX0FSRU5BU19DT05TVEFOVAorfQorVEVTVF9FTkQKKworVEVTVF9CRUdJTih0ZXN0 X2FyZW5hc19iaW5fY29uc3RhbnRzKSB7CisjZGVmaW5lIFRFU1RfQVJFTkFTX0JJTl9DT05TVEFO VCh0LCBuYW1lLCBleHBlY3RlZCkgZG8gewkJXAorCXQgbmFtZTsJCQkJCQkJCVwKKwlzaXplX3Qg c3ogPSBzaXplb2YodCk7CQkJCQkJXAorCWV4cGVjdF9kX2VxKG1hbGxjdGwoImFyZW5hcy5iaW4u MC4iI25hbWUsICh2b2lkICopJm5hbWUsICZzeiwJXAorCSAgICBOVUxMLCAwKSwgMCwgIlVuZXhw ZWN0ZWQgbWFsbGN0bCgpIGZhaWx1cmUiKTsJCVwKKwlleHBlY3RfenVfZXEobmFtZSwgZXhwZWN0 ZWQsICJJbmNvcnJlY3QgIiNuYW1lIiBzaXplIik7CQlcCit9IHdoaWxlICgwKQorCisJVEVTVF9B UkVOQVNfQklOX0NPTlNUQU5UKHNpemVfdCwgc2l6ZSwgYmluX2luZm9zWzBdLnJlZ19zaXplKTsK KwlURVNUX0FSRU5BU19CSU5fQ09OU1RBTlQodWludDMyX3QsIG5yZWdzLCBiaW5faW5mb3NbMF0u bnJlZ3MpOworCVRFU1RfQVJFTkFTX0JJTl9DT05TVEFOVChzaXplX3QsIHNsYWJfc2l6ZSwKKwkg ICAgYmluX2luZm9zWzBdLnNsYWJfc2l6ZSk7CisJVEVTVF9BUkVOQVNfQklOX0NPTlNUQU5UKHVp bnQzMl90LCBuc2hhcmRzLCBiaW5faW5mb3NbMF0ubl9zaGFyZHMpOworCisjdW5kZWYgVEVTVF9B UkVOQVNfQklOX0NPTlNUQU5UCit9CitURVNUX0VORAorCitURVNUX0JFR0lOKHRlc3RfYXJlbmFz X2xleHRlbnRfY29uc3RhbnRzKSB7CisjZGVmaW5lIFRFU1RfQVJFTkFTX0xFWFRFTlRfQ09OU1RB TlQodCwgbmFtZSwgZXhwZWN0ZWQpIGRvIHsJCVwKKwl0IG5hbWU7CQkJCQkJCQlcCisJc2l6ZV90 IHN6ID0gc2l6ZW9mKHQpOwkJCQkJCVwKKwlleHBlY3RfZF9lcShtYWxsY3RsKCJhcmVuYXMubGV4 dGVudC4wLiIjbmFtZSwgKHZvaWQgKikmbmFtZSwJXAorCSAgICAmc3osIE5VTEwsIDApLCAwLCAi VW5leHBlY3RlZCBtYWxsY3RsKCkgZmFpbHVyZSIpOwkJXAorCWV4cGVjdF96dV9lcShuYW1lLCBl eHBlY3RlZCwgIkluY29ycmVjdCAiI25hbWUiIHNpemUiKTsJCVwKK30gd2hpbGUgKDApCisKKwlU RVNUX0FSRU5BU19MRVhURU5UX0NPTlNUQU5UKHNpemVfdCwgc2l6ZSwKKwkgICAgU0NfTEFSR0Vf TUlOQ0xBU1MpOworCisjdW5kZWYgVEVTVF9BUkVOQVNfTEVYVEVOVF9DT05TVEFOVAorfQorVEVT VF9FTkQKKworVEVTVF9CRUdJTih0ZXN0X2FyZW5hc19jcmVhdGUpIHsKKwl1bnNpZ25lZCBuYXJl bmFzX2JlZm9yZSwgYXJlbmEsIG5hcmVuYXNfYWZ0ZXI7CisJc2l6ZV90IHN6ID0gc2l6ZW9mKHVu c2lnbmVkKTsKKworCWV4cGVjdF9kX2VxKG1hbGxjdGwoImFyZW5hcy5uYXJlbmFzIiwgKHZvaWQg KikmbmFyZW5hc19iZWZvcmUsICZzeiwKKwkgICAgTlVMTCwgMCksIDAsICJVbmV4cGVjdGVkIG1h bGxjdGwoKSBmYWlsdXJlIik7CisJZXhwZWN0X2RfZXEobWFsbGN0bCgiYXJlbmFzLmNyZWF0ZSIs ICh2b2lkICopJmFyZW5hLCAmc3osIE5VTEwsIDApLCAwLAorCSAgICAiVW5leHBlY3RlZCBtYWxs Y3RsKCkgZmFpbHVyZSIpOworCWV4cGVjdF9kX2VxKG1hbGxjdGwoImFyZW5hcy5uYXJlbmFzIiwg KHZvaWQgKikmbmFyZW5hc19hZnRlciwgJnN6LCBOVUxMLAorCSAgICAwKSwgMCwgIlVuZXhwZWN0 ZWQgbWFsbGN0bCgpIGZhaWx1cmUiKTsKKworCWV4cGVjdF91X2VxKG5hcmVuYXNfYmVmb3JlKzEs IG5hcmVuYXNfYWZ0ZXIsCisJICAgICJVbmV4cGVjdGVkIG51bWJlciBvZiBhcmVuYXMgYmVmb3Jl IHZlcnN1cyBhZnRlciBleHRlbnNpb24iKTsKKwlleHBlY3RfdV9lcShhcmVuYSwgbmFyZW5hc19h ZnRlci0xLCAiVW5leHBlY3RlZCBhcmVuYSBpbmRleCIpOworfQorVEVTVF9FTkQKKworVEVTVF9C RUdJTih0ZXN0X2FyZW5hc19sb29rdXApIHsKKwl1bnNpZ25lZCBhcmVuYSwgYXJlbmExOworCXZv aWQgKnB0cjsKKwlzaXplX3Qgc3ogPSBzaXplb2YodW5zaWduZWQpOworCisJZXhwZWN0X2RfZXEo bWFsbGN0bCgiYXJlbmFzLmNyZWF0ZSIsICh2b2lkICopJmFyZW5hLCAmc3osIE5VTEwsIDApLCAw LAorCSAgICAiVW5leHBlY3RlZCBtYWxsY3RsKCkgZmFpbHVyZSIpOworCXB0ciA9IG1hbGxvY3go NDIsIE1BTExPQ1hfQVJFTkEoYXJlbmEpIHwgTUFMTE9DWF9UQ0FDSEVfTk9ORSk7CisJZXhwZWN0 X3B0cl9ub3RfbnVsbChwdHIsICJVbmV4cGVjdGVkIG1hbGxvY3goKSBmYWlsdXJlIik7CisJZXhw ZWN0X2RfZXEobWFsbGN0bCgiYXJlbmFzLmxvb2t1cCIsICZhcmVuYTEsICZzeiwgJnB0ciwgc2l6 ZW9mKHB0cikpLAorCSAgICAwLCAiVW5leHBlY3RlZCBtYWxsY3RsKCkgZmFpbHVyZSIpOworCWV4 cGVjdF91X2VxKGFyZW5hLCBhcmVuYTEsICJVbmV4cGVjdGVkIGFyZW5hIGluZGV4Iik7CisJZGFs bG9jeChwdHIsIDApOworfQorVEVTVF9FTkQKKworVEVTVF9CRUdJTih0ZXN0X3Byb2ZfYWN0aXZl KSB7CisJLyoKKwkgKiBJZiBjb25maWdfcHJvZiBpcyBvZmYsIHRoZW4gdGhlIHRlc3QgZm9yIHBy b2ZfYWN0aXZlIGluCisJICogdGVzdF9tYWxsY3RsX29wdCB3YXMgYWxyZWFkeSBlbm91Z2guCisJ ICovCisJdGVzdF9za2lwX2lmKCFjb25maWdfcHJvZik7CisJdGVzdF9za2lwX2lmKG9wdF9wcm9m KTsKKworCWJvb2wgYWN0aXZlLCBvbGQ7CisJc2l6ZV90IGxlbiA9IHNpemVvZihib29sKTsKKwor CWFjdGl2ZSA9IHRydWU7CisJZXhwZWN0X2RfZXEobWFsbGN0bCgicHJvZi5hY3RpdmUiLCBOVUxM LCBOVUxMLCAmYWN0aXZlLCBsZW4pLCBFTk9FTlQsCisJICAgICJTZXR0aW5nIHByb2ZfYWN0aXZl IHRvIHRydWUgc2hvdWxkIGZhaWwgd2hlbiBvcHRfcHJvZiBpcyBvZmYiKTsKKwlvbGQgPSB0cnVl OworCWV4cGVjdF9kX2VxKG1hbGxjdGwoInByb2YuYWN0aXZlIiwgJm9sZCwgJmxlbiwgJmFjdGl2 ZSwgbGVuKSwgRU5PRU5ULAorCSAgICAiU2V0dGluZyBwcm9mX2FjdGl2ZSB0byB0cnVlIHNob3Vs ZCBmYWlsIHdoZW4gb3B0X3Byb2YgaXMgb2ZmIik7CisJZXhwZWN0X3RydWUob2xkLCAib2xkIHZh bHVlIHNob3VsZCBub3QgYmUgdG91Y2hlZCB3aGVuIG1hbGxjdGwgZmFpbHMiKTsKKwlhY3RpdmUg PSBmYWxzZTsKKwlleHBlY3RfZF9lcShtYWxsY3RsKCJwcm9mLmFjdGl2ZSIsIE5VTEwsIE5VTEws ICZhY3RpdmUsIGxlbiksIDAsCisJICAgICJTZXR0aW5nIHByb2ZfYWN0aXZlIHRvIGZhbHNlIHNo b3VsZCBzdWNjZWVkIHdoZW4gb3B0X3Byb2YgaXMgb2ZmIik7CisJZXhwZWN0X2RfZXEobWFsbGN0 bCgicHJvZi5hY3RpdmUiLCAmb2xkLCAmbGVuLCAmYWN0aXZlLCBsZW4pLCAwLAorCSAgICAiU2V0 dGluZyBwcm9mX2FjdGl2ZSB0byBmYWxzZSBzaG91bGQgc3VjY2VlZCB3aGVuIG9wdF9wcm9mIGlz IG9mZiIpOworCWV4cGVjdF9mYWxzZShvbGQsICJwcm9mX2FjdGl2ZSBzaG91bGQgYmUgZmFsc2Ug d2hlbiBvcHRfcHJvZiBpcyBvZmYiKTsKK30KK1RFU1RfRU5ECisKK1RFU1RfQkVHSU4odGVzdF9z dGF0c19hcmVuYXMpIHsKKyNkZWZpbmUgVEVTVF9TVEFUU19BUkVOQVModCwgbmFtZSkgZG8gewkJ CQkJXAorCXQgbmFtZTsJCQkJCQkJCVwKKwlzaXplX3Qgc3ogPSBzaXplb2YodCk7CQkJCQkJXAor CWV4cGVjdF9kX2VxKG1hbGxjdGwoInN0YXRzLmFyZW5hcy4wLiIjbmFtZSwgKHZvaWQgKikmbmFt ZSwgJnN6LAlcCisJICAgIE5VTEwsIDApLCAwLCAiVW5leHBlY3RlZCBtYWxsY3RsKCkgZmFpbHVy ZSIpOwkJXAorfSB3aGlsZSAoMCkKKworCVRFU1RfU1RBVFNfQVJFTkFTKHVuc2lnbmVkLCBudGhy ZWFkcyk7CisJVEVTVF9TVEFUU19BUkVOQVMoY29uc3QgY2hhciAqLCBkc3MpOworCVRFU1RfU1RB VFNfQVJFTkFTKHNzaXplX3QsIGRpcnR5X2RlY2F5X21zKTsKKwlURVNUX1NUQVRTX0FSRU5BUyhz c2l6ZV90LCBtdXp6eV9kZWNheV9tcyk7CisJVEVTVF9TVEFUU19BUkVOQVMoc2l6ZV90LCBwYWN0 aXZlKTsKKwlURVNUX1NUQVRTX0FSRU5BUyhzaXplX3QsIHBkaXJ0eSk7CisKKyN1bmRlZiBURVNU X1NUQVRTX0FSRU5BUworfQorVEVTVF9FTkQKKworc3RhdGljIHZvaWQKK2FsbG9jX2hvb2sodm9p ZCAqZXh0cmEsIFVOVVNFRCBob29rX2FsbG9jX3QgdHlwZSwgVU5VU0VEIHZvaWQgKnJlc3VsdCwK KyAgICBVTlVTRUQgdWludHB0cl90IHJlc3VsdF9yYXcsIFVOVVNFRCB1aW50cHRyX3QgYXJnc19y YXdbM10pIHsKKwkqKGJvb2wgKilleHRyYSA9IHRydWU7Cit9CisKK3N0YXRpYyB2b2lkCitkYWxs b2NfaG9vayh2b2lkICpleHRyYSwgVU5VU0VEIGhvb2tfZGFsbG9jX3QgdHlwZSwKKyAgICBVTlVT RUQgdm9pZCAqYWRkcmVzcywgVU5VU0VEIHVpbnRwdHJfdCBhcmdzX3Jhd1szXSkgeworCSooYm9v bCAqKWV4dHJhID0gdHJ1ZTsKK30KKworVEVTVF9CRUdJTih0ZXN0X2hvb2tzKSB7CisJYm9vbCBo b29rX2NhbGxlZCA9IGZhbHNlOworCWhvb2tzX3QgaG9va3MgPSB7JmFsbG9jX2hvb2ssICZkYWxs b2NfaG9vaywgTlVMTCwgJmhvb2tfY2FsbGVkfTsKKwl2b2lkICpoYW5kbGUgPSBOVUxMOworCXNp emVfdCBzeiA9IHNpemVvZihoYW5kbGUpOworCWludCBlcnIgPSBtYWxsY3RsKCJleHBlcmltZW50 YWwuaG9va3MuaW5zdGFsbCIsICZoYW5kbGUsICZzeiwgJmhvb2tzLAorCSAgICBzaXplb2YoaG9v a3MpKTsKKwlleHBlY3RfZF9lcShlcnIsIDAsICJIb29rIGluc3RhbGxhdGlvbiBmYWlsZWQiKTsK KwlleHBlY3RfcHRyX25lKGhhbmRsZSwgTlVMTCwgIkhvb2sgaW5zdGFsbGF0aW9uIGdhdmUgbnVs bCBoYW5kbGUiKTsKKwl2b2lkICpwdHIgPSBtYWxsb2N4KDEsIDApOworCWV4cGVjdF90cnVlKGhv b2tfY2FsbGVkLCAiQWxsb2MgaG9vayBub3QgY2FsbGVkIik7CisJaG9va19jYWxsZWQgPSBmYWxz ZTsKKwlmcmVlKHB0cik7CisJZXhwZWN0X3RydWUoaG9va19jYWxsZWQsICJGcmVlIGhvb2sgbm90 IGNhbGxlZCIpOworCisJZXJyID0gbWFsbGN0bCgiZXhwZXJpbWVudGFsLmhvb2tzLnJlbW92ZSIs IE5VTEwsIE5VTEwsICZoYW5kbGUsCisJICAgIHNpemVvZihoYW5kbGUpKTsKKwlleHBlY3RfZF9l cShlcnIsIDAsICJIb29rIHJlbW92YWwgZmFpbGVkIik7CisJaG9va19jYWxsZWQgPSBmYWxzZTsK KwlwdHIgPSBtYWxsb2N4KDEsIDApOworCWZyZWUocHRyKTsKKwlleHBlY3RfZmFsc2UoaG9va19j YWxsZWQsICJIb29rIGNhbGxlZCBhZnRlciByZW1vdmFsIik7Cit9CitURVNUX0VORAorCitURVNU X0JFR0lOKHRlc3RfaG9va3NfZXhoYXVzdGlvbikgeworCWJvb2wgaG9va19jYWxsZWQgPSBmYWxz ZTsKKwlob29rc190IGhvb2tzID0geyZhbGxvY19ob29rLCAmZGFsbG9jX2hvb2ssIE5VTEwsICZo b29rX2NhbGxlZH07CisKKwl2b2lkICpoYW5kbGU7CisJdm9pZCAqaGFuZGxlc1tIT09LX01BWF07 CisJc2l6ZV90IHN6ID0gc2l6ZW9mKGhhbmRsZSk7CisJaW50IGVycjsKKwlmb3IgKGludCBpID0g MDsgaSA8IEhPT0tfTUFYOyBpKyspIHsKKwkJaGFuZGxlID0gTlVMTDsKKwkJZXJyID0gbWFsbGN0 bCgiZXhwZXJpbWVudGFsLmhvb2tzLmluc3RhbGwiLCAmaGFuZGxlLCAmc3osCisJCSAgICAmaG9v a3MsIHNpemVvZihob29rcykpOworCQlleHBlY3RfZF9lcShlcnIsIDAsICJFcnJvciBpbnN0YWxs YXRpb24gaG9va3MiKTsKKwkJZXhwZWN0X3B0cl9uZShoYW5kbGUsIE5VTEwsICJHb3QgTlVMTCBo YW5kbGUiKTsKKwkJaGFuZGxlc1tpXSA9IGhhbmRsZTsKKwl9CisJZXJyID0gbWFsbGN0bCgiZXhw ZXJpbWVudGFsLmhvb2tzLmluc3RhbGwiLCAmaGFuZGxlLCAmc3osICZob29rcywKKwkgICAgc2l6 ZW9mKGhvb2tzKSk7CisJZXhwZWN0X2RfZXEoZXJyLCBFQUdBSU4sICJTaG91bGQgaGF2ZSBmYWls ZWQgaG9vayBpbnN0YWxsYXRpb24iKTsKKwlmb3IgKGludCBpID0gMDsgaSA8IEhPT0tfTUFYOyBp KyspIHsKKwkJZXJyID0gbWFsbGN0bCgiZXhwZXJpbWVudGFsLmhvb2tzLnJlbW92ZSIsIE5VTEws IE5VTEwsCisJCSAgICAmaGFuZGxlc1tpXSwgc2l6ZW9mKGhhbmRsZXNbaV0pKTsKKwkJZXhwZWN0 X2RfZXEoZXJyLCAwLCAiSG9vayByZW1vdmFsIGZhaWxlZCIpOworCX0KKwkvKiBJbnNlcnRpb24g ZmFpbGVkLCBidXQgdGhlbiB3ZSByZW1vdmVkIHNvbWU7IGl0IHNob3VsZCB3b3JrIG5vdy4gKi8K KwloYW5kbGUgPSBOVUxMOworCWVyciA9IG1hbGxjdGwoImV4cGVyaW1lbnRhbC5ob29rcy5pbnN0 YWxsIiwgJmhhbmRsZSwgJnN6LCAmaG9va3MsCisJICAgIHNpemVvZihob29rcykpOworCWV4cGVj dF9kX2VxKGVyciwgMCwgIkhvb2sgaW5zZXJ0aW9uIGZhaWxlZCIpOworCWV4cGVjdF9wdHJfbmUo aGFuZGxlLCBOVUxMLCAiR290IE5VTEwgaGFuZGxlIik7CisJZXJyID0gbWFsbGN0bCgiZXhwZXJp bWVudGFsLmhvb2tzLnJlbW92ZSIsIE5VTEwsIE5VTEwsICZoYW5kbGUsCisJICAgIHNpemVvZiho YW5kbGUpKTsKKwlleHBlY3RfZF9lcShlcnIsIDAsICJIb29rIHJlbW92YWwgZmFpbGVkIik7Cit9 CitURVNUX0VORAorCitURVNUX0JFR0lOKHRlc3RfdGhyZWFkX2lkbGUpIHsKKwkvKgorCSAqIFdl J3JlIGNoZWF0aW5nIGEgbGl0dGxlIGJpdCBpbiB0aGlzIHRlc3QsIGFuZCBpbmZlcnJpbmcgdGhp bmdzIGFib3V0CisJICogaW1wbGVtZW50YXRpb24gaW50ZXJuYWxzIChsaWtlIHRjYWNoZSBkZXRh aWxzKS4gIFdlIGhhdmUgdG87CisJICogdGhyZWFkLmlkbGUgaGFzIG5vIGd1YXJhbnRlZWQgZWZm ZWN0cy4gIFdlIG5lZWQgc3RhdHMgdG8gbWFrZSB0aGVzZQorCSAqIGluZmVyZW5jZXMuCisJICov CisJdGVzdF9za2lwX2lmKCFjb25maWdfc3RhdHMpOworCisJaW50IGVycjsKKwlzaXplX3Qgc3o7 CisJc2l6ZV90IG1pYmxlbjsKKworCWJvb2wgdGNhY2hlX2VuYWJsZWQgPSBmYWxzZTsKKwlzeiA9 IHNpemVvZih0Y2FjaGVfZW5hYmxlZCk7CisJZXJyID0gbWFsbGN0bCgidGhyZWFkLnRjYWNoZS5l bmFibGVkIiwgJnRjYWNoZV9lbmFibGVkLCAmc3osIE5VTEwsIDApOworCWV4cGVjdF9kX2VxKGVy ciwgMCwgIiIpOworCXRlc3Rfc2tpcF9pZighdGNhY2hlX2VuYWJsZWQpOworCisJc2l6ZV90IHRj YWNoZV9tYXg7CisJc3ogPSBzaXplb2YodGNhY2hlX21heCk7CisJZXJyID0gbWFsbGN0bCgiYXJl bmFzLnRjYWNoZV9tYXgiLCAmdGNhY2hlX21heCwgJnN6LCBOVUxMLCAwKTsKKwlleHBlY3RfZF9l cShlcnIsIDAsICIiKTsKKwl0ZXN0X3NraXBfaWYodGNhY2hlX21heCA9PSAwKTsKKworCXVuc2ln bmVkIGFyZW5hX2luZDsKKwlzeiA9IHNpemVvZihhcmVuYV9pbmQpOworCWVyciA9IG1hbGxjdGwo InRocmVhZC5hcmVuYSIsICZhcmVuYV9pbmQsICZzeiwgTlVMTCwgMCk7CisJZXhwZWN0X2RfZXEo ZXJyLCAwLCAiIik7CisKKwkvKiBXZSdyZSBnb2luZyB0byBkbyBhbiBhbGxvY2F0aW9uIG9mIHNp emUgMSwgd2hpY2ggd2Uga25vdyBpcyBzbWFsbC4gKi8KKwlzaXplX3QgbWliWzVdOworCW1pYmxl biA9IHNpemVvZihtaWIpL3NpemVvZihtaWJbMF0pOworCWVyciA9IG1hbGxjdGxuYW1ldG9taWIo InN0YXRzLmFyZW5hcy4wLnNtYWxsLm5kYWxsb2MiLCBtaWIsICZtaWJsZW4pOworCWV4cGVjdF9k X2VxKGVyciwgMCwgIiIpOworCW1pYlsyXSA9IGFyZW5hX2luZDsKKworCS8qCisJICogVGhpcyBh bGxvYyBhbmQgZGFsbG9jIHNob3VsZCBsZWF2ZSBzb21ldGhpbmcgaW4gdGhlIHRjYWNoZSwgaW4g YQorCSAqIHNtYWxsIHNpemUncyBjYWNoZSBiaW4uCisJICovCisJdm9pZCAqcHRyID0gbWFsbG9j eCgxLCAwKTsKKwlkYWxsb2N4KHB0ciwgMCk7CisKKwl1aW50NjRfdCBlcG9jaDsKKwllcnIgPSBt YWxsY3RsKCJlcG9jaCIsIE5VTEwsIE5VTEwsICZlcG9jaCwgc2l6ZW9mKGVwb2NoKSk7CisJZXhw ZWN0X2RfZXEoZXJyLCAwLCAiIik7CisKKwl1aW50NjRfdCBzbWFsbF9kYWxsb2NfcHJlX2lkbGU7 CisJc3ogPSBzaXplb2Yoc21hbGxfZGFsbG9jX3ByZV9pZGxlKTsKKwllcnIgPSBtYWxsY3RsYnlt aWIobWliLCBtaWJsZW4sICZzbWFsbF9kYWxsb2NfcHJlX2lkbGUsICZzeiwgTlVMTCwgMCk7CisJ ZXhwZWN0X2RfZXEoZXJyLCAwLCAiIik7CisKKwllcnIgPSBtYWxsY3RsKCJ0aHJlYWQuaWRsZSIs IE5VTEwsIE5VTEwsIE5VTEwsIDApOworCWV4cGVjdF9kX2VxKGVyciwgMCwgIiIpOworCisJZXJy ID0gbWFsbGN0bCgiZXBvY2giLCBOVUxMLCBOVUxMLCAmZXBvY2gsIHNpemVvZihlcG9jaCkpOwor CWV4cGVjdF9kX2VxKGVyciwgMCwgIiIpOworCisJdWludDY0X3Qgc21hbGxfZGFsbG9jX3Bvc3Rf aWRsZTsKKwlzeiA9IHNpemVvZihzbWFsbF9kYWxsb2NfcG9zdF9pZGxlKTsKKwllcnIgPSBtYWxs Y3RsYnltaWIobWliLCBtaWJsZW4sICZzbWFsbF9kYWxsb2NfcG9zdF9pZGxlLCAmc3osIE5VTEws IDApOworCWV4cGVjdF9kX2VxKGVyciwgMCwgIiIpOworCisJZXhwZWN0X3U2NF9sdChzbWFsbF9k YWxsb2NfcHJlX2lkbGUsIHNtYWxsX2RhbGxvY19wb3N0X2lkbGUsCisJICAgICJQdXJnZSBkaWRu J3QgZmx1c2ggdGhlIHRjYWNoZSIpOworfQorVEVTVF9FTkQKKworVEVTVF9CRUdJTih0ZXN0X3Ro cmVhZF9wZWFrKSB7CisJdGVzdF9za2lwX2lmKCFjb25maWdfc3RhdHMpOworCisJLyoKKwkgKiBX ZSBkb24ndCBjb21taXQgdG8gYW55IHN0YWJsZSBhbW91bnQgb2YgYWNjdXJhY3kgZm9yIHBlYWsg dHJhY2tpbmcKKwkgKiAoaW4gcHJhY3RpY2UsIHdoZW4gdGhpcyB0ZXN0IHdhcyB3cml0dGVuLCB3 ZSBtYWRlIHN1cmUgdG8gYmUgd2l0aGluCisJICogMTAwaykuICBCdXQgMTBNQiBpcyBiaWcgZm9y IG1vcmUgb3IgbGVzcyBhbnkgZGVmaW5pdGlvbiBvZiBiaWcuCisJICovCisJc2l6ZV90IGJpZ19z aXplID0gMTAgKiAxMDI0ICogMTAyNDsKKwlzaXplX3Qgc21hbGxfc2l6ZSA9IDI1NjsKKworCXZv aWQgKnB0cjsKKwlpbnQgZXJyOworCXNpemVfdCBzejsKKwl1aW50NjRfdCBwZWFrOworCXN6ID0g c2l6ZW9mKHVpbnQ2NF90KTsKKworCWVyciA9IG1hbGxjdGwoInRocmVhZC5wZWFrLnJlc2V0Iiwg TlVMTCwgTlVMTCwgTlVMTCwgMCk7CisJZXhwZWN0X2RfZXEoZXJyLCAwLCAiIik7CisJcHRyID0g bWFsbG9jeChTQ19TTUFMTF9NQVhDTEFTUywgMCk7CisJZXJyID0gbWFsbGN0bCgidGhyZWFkLnBl YWsucmVhZCIsICZwZWFrLCAmc3osIE5VTEwsIDApOworCWV4cGVjdF9kX2VxKGVyciwgMCwgIiIp OworCWV4cGVjdF91NjRfZXEocGVhaywgU0NfU01BTExfTUFYQ0xBU1MsICJNaXNzZWQgYW4gdXBk YXRlIik7CisJZnJlZShwdHIpOworCWVyciA9IG1hbGxjdGwoInRocmVhZC5wZWFrLnJlYWQiLCAm cGVhaywgJnN6LCBOVUxMLCAwKTsKKwlleHBlY3RfZF9lcShlcnIsIDAsICIiKTsKKwlleHBlY3Rf dTY0X2VxKHBlYWssIFNDX1NNQUxMX01BWENMQVNTLCAiRnJlZWluZyBjaGFuZ2VkIHBlYWsiKTsK KwlwdHIgPSBtYWxsb2N4KGJpZ19zaXplLCAwKTsKKwlmcmVlKHB0cik7CisJLyoKKwkgKiBUaGUg cGVhayBzaG91bGQgaGF2ZSBoaXQgYmlnX3NpemUgaW4gdGhlIGxhc3QgdHdvIGxpbmVzLCBldmVu IHRob3VnaAorCSAqIHRoZSBuZXQgYWxsb2NhdGVkIGJ5dGVzIGhhcyBzaW5jZSBkcm9wcGVkIGJh Y2sgZG93biB0byB6ZXJvLiAgV2UKKwkgKiBzaG91bGQgaGF2ZSBub3RpY2VkIHRoZSBwZWFrIGNo YW5nZSB3aXRob3V0IGhhdmluZyBkb3duIGFueSBtYWxsY3RsCisJICogY2FsbHMgd2hpbGUgbmV0 IGFsbG9jYXRlZCBieXRlcyB3YXMgaGlnaC4KKwkgKi8KKwllcnIgPSBtYWxsY3RsKCJ0aHJlYWQu cGVhay5yZWFkIiwgJnBlYWssICZzeiwgTlVMTCwgMCk7CisJZXhwZWN0X2RfZXEoZXJyLCAwLCAi Iik7CisJZXhwZWN0X3U2NF9nZShwZWFrLCBiaWdfc2l6ZSwgIk1pc3NlZCBhIHBlYWsgY2hhbmdl LiIpOworCisJLyogQWxsb2NhdGUgYmlnX3NpemUsIGJ1dCB1c2luZyBzbWFsbCBhbGxvY2F0aW9u cy4gKi8KKwlzaXplX3QgbmFsbG9jcyA9IGJpZ19zaXplIC8gc21hbGxfc2l6ZTsKKwl2b2lkICoq cHRycyA9IGNhbGxvYyhuYWxsb2NzLCBzaXplb2Yodm9pZCAqKSk7CisJZXJyID0gbWFsbGN0bCgi dGhyZWFkLnBlYWsucmVzZXQiLCBOVUxMLCBOVUxMLCBOVUxMLCAwKTsKKwlleHBlY3RfZF9lcShl cnIsIDAsICIiKTsKKwllcnIgPSBtYWxsY3RsKCJ0aHJlYWQucGVhay5yZWFkIiwgJnBlYWssICZz eiwgTlVMTCwgMCk7CisJZXhwZWN0X2RfZXEoZXJyLCAwLCAiIik7CisJZXhwZWN0X3U2NF9lcSgw LCBwZWFrLCAiTWlzc2VkIGEgcmVzZXQuIik7CisJZm9yIChzaXplX3QgaSA9IDA7IGkgPCBuYWxs b2NzOyBpKyspIHsKKwkJcHRyc1tpXSA9IG1hbGxvY3goc21hbGxfc2l6ZSwgMCk7CisJfQorCWZv ciAoc2l6ZV90IGkgPSAwOyBpIDwgbmFsbG9jczsgaSsrKSB7CisJCWZyZWUocHRyc1tpXSk7CisJ fQorCWVyciA9IG1hbGxjdGwoInRocmVhZC5wZWFrLnJlYWQiLCAmcGVhaywgJnN6LCBOVUxMLCAw KTsKKwlleHBlY3RfZF9lcShlcnIsIDAsICIiKTsKKwkvKgorCSAqIFdlIGRvbid0IGd1YXJhbnRl ZSBleGFjdG5lc3M7IG1ha2Ugc3VyZSB3ZSdyZSB3aXRoaW4gMTAlIG9mIHRoZSBwZWFrLAorCSAq IHRob3VnaC4KKwkgKi8KKwlleHBlY3RfdTY0X2dlKHBlYWssIG5hbGxvY3goc21hbGxfc2l6ZSwg MCkgKiBuYWxsb2NzICogOSAvIDEwLAorCSAgICAiTWlzc2VkIHNvbWUgcGVhayBjaGFuZ2VzLiIp OworCWV4cGVjdF91NjRfbGUocGVhaywgbmFsbG9jeChzbWFsbF9zaXplLCAwKSAqIG5hbGxvY3Mg KiAxMSAvIDEwLAorCSAgICAiT3ZlcmNvdW50ZWQgcGVhayBjaGFuZ2VzLiIpOworCWZyZWUocHRy cyk7Cit9CitURVNUX0VORAorCit0eXBlZGVmIHN0cnVjdCBhY3Rpdml0eV90ZXN0X2RhdGFfcyBh Y3Rpdml0eV90ZXN0X2RhdGFfdDsKK3N0cnVjdCBhY3Rpdml0eV90ZXN0X2RhdGFfcyB7CisJdWlu dDY0X3Qgb2J0YWluZWRfYWxsb2M7CisJdWludDY0X3Qgb2J0YWluZWRfZGFsbG9jOworfTsKKwor c3RhdGljIHZvaWQKK2FjdGl2aXR5X3Rlc3RfY2FsbGJhY2sodm9pZCAqdWN0eCwgdWludDY0X3Qg YWxsb2MsIHVpbnQ2NF90IGRhbGxvYykgeworCWFjdGl2aXR5X3Rlc3RfZGF0YV90ICp0ZXN0X2Rh dGEgPSAoYWN0aXZpdHlfdGVzdF9kYXRhX3QgKil1Y3R4OworCXRlc3RfZGF0YS0+b2J0YWluZWRf YWxsb2MgPSBhbGxvYzsKKwl0ZXN0X2RhdGEtPm9idGFpbmVkX2RhbGxvYyA9IGRhbGxvYzsKK30K KworVEVTVF9CRUdJTih0ZXN0X3RocmVhZF9hY3Rpdml0eV9jYWxsYmFjaykgeworCXRlc3Rfc2tp cF9pZighY29uZmlnX3N0YXRzKTsKKworCWNvbnN0IHNpemVfdCBiaWdfc2l6ZSA9IDEwICogMTAy NCAqIDEwMjQ7CisJdm9pZCAqcHRyOworCWludCBlcnI7CisJc2l6ZV90IHN6OworCisJdWludDY0 X3QgKmFsbG9jYXRlZHA7CisJdWludDY0X3QgKmRlYWxsb2NhdGVkcDsKKwlzeiA9IHNpemVvZihh bGxvY2F0ZWRwKTsKKwllcnIgPSBtYWxsY3RsKCJ0aHJlYWQuYWxsb2NhdGVkcCIsICZhbGxvY2F0 ZWRwLCAmc3osIE5VTEwsIDApOworCWFzc2VydF9kX2VxKDAsIGVyciwgIiIpOworCWVyciA9IG1h bGxjdGwoInRocmVhZC5kZWFsbG9jYXRlZHAiLCAmZGVhbGxvY2F0ZWRwLCAmc3osIE5VTEwsIDAp OworCWFzc2VydF9kX2VxKDAsIGVyciwgIiIpOworCisJYWN0aXZpdHlfY2FsbGJhY2tfdGh1bmtf dCBvbGRfdGh1bmsgPSB7KGFjdGl2aXR5X2NhbGxiYWNrX3QpMTExLAorCQkodm9pZCAqKTIyMn07 CisKKwlhY3Rpdml0eV90ZXN0X2RhdGFfdCB0ZXN0X2RhdGEgPSB7MzMzLCA0NDR9OworCWFjdGl2 aXR5X2NhbGxiYWNrX3RodW5rX3QgbmV3X3RodW5rID0KKwkgICAgeyZhY3Rpdml0eV90ZXN0X2Nh bGxiYWNrLCAmdGVzdF9kYXRhfTsKKworCXN6ID0gc2l6ZW9mKG9sZF90aHVuayk7CisJZXJyID0g bWFsbGN0bCgiZXhwZXJpbWVudGFsLnRocmVhZC5hY3Rpdml0eV9jYWxsYmFjayIsICZvbGRfdGh1 bmssICZzeiwKKwkgICAgJm5ld190aHVuaywgc2l6ZW9mKG5ld190aHVuaykpOworCWFzc2VydF9k X2VxKDAsIGVyciwgIiIpOworCisJZXhwZWN0X3RydWUob2xkX3RodW5rLmNhbGxiYWNrID09IE5V TEwsICJDYWxsYmFjayBhbHJlYWR5IGluc3RhbGxlZCIpOworCWV4cGVjdF90cnVlKG9sZF90aHVu ay51Y3R4ID09IE5VTEwsICJDYWxsYmFjayBkYXRhIGFscmVhZHkgaW5zdGFsbGVkIik7CisKKwlw dHIgPSBtYWxsb2N4KGJpZ19zaXplLCAwKTsKKwlleHBlY3RfdTY0X2VxKHRlc3RfZGF0YS5vYnRh aW5lZF9hbGxvYywgKmFsbG9jYXRlZHAsICIiKTsKKwlleHBlY3RfdTY0X2VxKHRlc3RfZGF0YS5v YnRhaW5lZF9kYWxsb2MsICpkZWFsbG9jYXRlZHAsICIiKTsKKworCWZyZWUocHRyKTsKKwlleHBl Y3RfdTY0X2VxKHRlc3RfZGF0YS5vYnRhaW5lZF9hbGxvYywgKmFsbG9jYXRlZHAsICIiKTsKKwll eHBlY3RfdTY0X2VxKHRlc3RfZGF0YS5vYnRhaW5lZF9kYWxsb2MsICpkZWFsbG9jYXRlZHAsICIi KTsKKworCXN6ID0gc2l6ZW9mKG9sZF90aHVuayk7CisJbmV3X3RodW5rID0gKGFjdGl2aXR5X2Nh bGxiYWNrX3RodW5rX3QpeyBOVUxMLCBOVUxMIH07CisJZXJyID0gbWFsbGN0bCgiZXhwZXJpbWVu dGFsLnRocmVhZC5hY3Rpdml0eV9jYWxsYmFjayIsICZvbGRfdGh1bmssICZzeiwKKwkgICAgJm5l d190aHVuaywgc2l6ZW9mKG5ld190aHVuaykpOworCWFzc2VydF9kX2VxKDAsIGVyciwgIiIpOwor CisJZXhwZWN0X3RydWUob2xkX3RodW5rLmNhbGxiYWNrID09ICZhY3Rpdml0eV90ZXN0X2NhbGxi YWNrLCAiIik7CisJZXhwZWN0X3RydWUob2xkX3RodW5rLnVjdHggPT0gJnRlc3RfZGF0YSwgIiIp OworCisJLyogSW5zZXJ0aW5nIE5VTEwgc2hvdWxkIGhhdmUgdHVybmVkIG9mZiB0cmFja2luZy4g Ki8KKwl0ZXN0X2RhdGEub2J0YWluZWRfYWxsb2MgPSAzMzM7CisJdGVzdF9kYXRhLm9idGFpbmVk X2RhbGxvYyA9IDQ0NDsKKwlwdHIgPSBtYWxsb2N4KGJpZ19zaXplLCAwKTsKKwlmcmVlKHB0cik7 CisJZXhwZWN0X3U2NF9lcSgzMzMsIHRlc3RfZGF0YS5vYnRhaW5lZF9hbGxvYywgIiIpOworCWV4 cGVjdF91NjRfZXEoNDQ0LCB0ZXN0X2RhdGEub2J0YWluZWRfZGFsbG9jLCAiIik7Cit9CitURVNU X0VORAorCitpbnQKK21haW4odm9pZCkgeworCXJldHVybiB0ZXN0KAorCSAgICB0ZXN0X21hbGxj dGxfZXJyb3JzLAorCSAgICB0ZXN0X21hbGxjdGxuYW1ldG9taWJfZXJyb3JzLAorCSAgICB0ZXN0 X21hbGxjdGxieW1pYl9lcnJvcnMsCisJICAgIHRlc3RfbWFsbGN0bF9yZWFkX3dyaXRlLAorCSAg ICB0ZXN0X21hbGxjdGxuYW1ldG9taWJfc2hvcnRfbWliLAorCSAgICB0ZXN0X21hbGxjdGxuYW1l dG9taWJfc2hvcnRfbmFtZSwKKwkgICAgdGVzdF9tYWxsY3RsbWlibmFtZXRvbWliLAorCSAgICB0 ZXN0X21hbGxjdGxieW1pYm5hbWUsCisJICAgIHRlc3RfbWFsbGN0bF9jb25maWcsCisJICAgIHRl c3RfbWFsbGN0bF9vcHQsCisJICAgIHRlc3RfbWFucGFnZV9leGFtcGxlLAorCSAgICB0ZXN0X3Rj YWNoZV9ub25lLAorCSAgICB0ZXN0X3RjYWNoZSwKKwkgICAgdGVzdF90aHJlYWRfYXJlbmEsCisJ ICAgIHRlc3RfYXJlbmFfaV9pbml0aWFsaXplZCwKKwkgICAgdGVzdF9hcmVuYV9pX2RpcnR5X2Rl Y2F5X21zLAorCSAgICB0ZXN0X2FyZW5hX2lfbXV6enlfZGVjYXlfbXMsCisJICAgIHRlc3RfYXJl bmFfaV9wdXJnZSwKKwkgICAgdGVzdF9hcmVuYV9pX2RlY2F5LAorCSAgICB0ZXN0X2FyZW5hX2lf ZHNzLAorCSAgICB0ZXN0X2FyZW5hX2lfcmV0YWluX2dyb3dfbGltaXQsCisJICAgIHRlc3RfYXJl bmFzX2RpcnR5X2RlY2F5X21zLAorCSAgICB0ZXN0X2FyZW5hc19tdXp6eV9kZWNheV9tcywKKwkg ICAgdGVzdF9hcmVuYXNfY29uc3RhbnRzLAorCSAgICB0ZXN0X2FyZW5hc19iaW5fY29uc3RhbnRz LAorCSAgICB0ZXN0X2FyZW5hc19sZXh0ZW50X2NvbnN0YW50cywKKwkgICAgdGVzdF9hcmVuYXNf Y3JlYXRlLAorCSAgICB0ZXN0X2FyZW5hc19sb29rdXAsCisJICAgIHRlc3RfcHJvZl9hY3RpdmUs CisJICAgIHRlc3Rfc3RhdHNfYXJlbmFzLAorCSAgICB0ZXN0X2hvb2tzLAorCSAgICB0ZXN0X2hv b2tzX2V4aGF1c3Rpb24sCisJICAgIHRlc3RfdGhyZWFkX2lkbGUsCisJICAgIHRlc3RfdGhyZWFk X3BlYWssCisJICAgIHRlc3RfdGhyZWFkX2FjdGl2aXR5X2NhbGxiYWNrKTsKK30KCmRpZmYgLS1n aXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvbWFs bG9jX2NvbmZfMi5jIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVz dC91bml0L21hbGxvY19jb25mXzIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw Li5lY2ZhNDk5Ci0tLSAvZGV2L251bGwKKysrIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVt YWxsb2MtNS4zLjAvdGVzdC91bml0L21hbGxvY19jb25mXzIuYwpAQCAtMCwwICsxLDI5IEBACisj aW5jbHVkZSAidGVzdC9qZW1hbGxvY190ZXN0LmgiCisKK2NvbnN0IGNoYXIgKm1hbGxvY19jb25m ID0gImRpcnR5X2RlY2F5X21zOjEwMDAiOworY29uc3QgY2hhciAqbWFsbG9jX2NvbmZfMl9jb25m X2hhcmRlciA9ICJkaXJ0eV9kZWNheV9tczoxMjM0IjsKKworVEVTVF9CRUdJTih0ZXN0X21hbGxv Y19jb25mXzIpIHsKKyNpZmRlZiBfV0lOMzIKKwlib29sIHdpbmRvd3MgPSB0cnVlOworI2Vsc2UK Kwlib29sIHdpbmRvd3MgPSBmYWxzZTsKKyNlbmRpZgorCS8qIFdpbmRvd3MgZG9lc24ndCBzdXBw b3J0IHdlYWsgc3ltYm9sIGxpbmtlciB0cmlja2VyeS4gKi8KKwl0ZXN0X3NraXBfaWYod2luZG93 cyk7CisKKwlzc2l6ZV90IGRpcnR5X2RlY2F5X21zOworCXNpemVfdCBzeiA9IHNpemVvZihkaXJ0 eV9kZWNheV9tcyk7CisKKwlpbnQgZXJyID0gbWFsbGN0bCgib3B0LmRpcnR5X2RlY2F5X21zIiwg JmRpcnR5X2RlY2F5X21zLCAmc3osIE5VTEwsIDApOworCWFzc2VydF9kX2VxKGVyciwgMCwgIlVu ZXhwZWN0ZWQgbWFsbGN0bCBmYWlsdXJlIik7CisJZXhwZWN0X3pkX2VxKGRpcnR5X2RlY2F5X21z LCAxMjM0LAorCSAgICAibWFsbG9jX2NvbmZfMiBzZXR0aW5nIGRpZG4ndCB0YWtlIGVmZmVjdCIp OworfQorVEVTVF9FTkQKKworaW50CittYWluKHZvaWQpIHsKKwlyZXR1cm4gdGVzdCgKKwkgICAg dGVzdF9tYWxsb2NfY29uZl8yKTsKK30KCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1i dWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvbWFsbG9jX2NvbmZfMi5zaCBiLzM4OS1kcy1i YXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9tYWxsb2NfY29uZl8yLnNo Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjNzgwZjEKLS0tIC9kZXYvbnVs bAorKysgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQv bWFsbG9jX2NvbmZfMi5zaApAQCAtMCwwICsxIEBACitleHBvcnQgTUFMTE9DX0NPTkY9ImRpcnR5 X2RlY2F5X21zOjUwMCIKCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1h bGxvYy01LjMuMC90ZXN0L3VuaXQvbWFsbG9jX2lvLmMgYi8zODktZHMtYmFzZS0zLjMuMC1idWls ZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvbWFsbG9jX2lvLmMKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMC4uMzg1Zjc0NQotLS0gL2Rldi9udWxsCisrKyBiLzM4OS1kcy1iYXNl LTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9tYWxsb2NfaW8uYwpAQCAtMCww ICsxLDI2OCBAQAorI2luY2x1ZGUgInRlc3QvamVtYWxsb2NfdGVzdC5oIgorCitURVNUX0JFR0lO KHRlc3RfbWFsbG9jX3N0cnRvdW1heF9ub19lbmRwdHIpIHsKKwlpbnQgZXJyOworCisJc2V0X2Vy cm5vKDApOworCWV4cGVjdF9qdV9lcShtYWxsb2Nfc3RydG91bWF4KCIwIiwgTlVMTCwgMCksIDAs ICJVbmV4cGVjdGVkIHJlc3VsdCIpOworCWVyciA9IGdldF9lcnJubygpOworCWV4cGVjdF9kX2Vx KGVyciwgMCwgIlVuZXhwZWN0ZWQgZmFpbHVyZSIpOworfQorVEVTVF9FTkQKKworVEVTVF9CRUdJ Tih0ZXN0X21hbGxvY19zdHJ0b3VtYXgpIHsKKwlzdHJ1Y3QgdGVzdF9zIHsKKwkJY29uc3QgY2hh ciAqaW5wdXQ7CisJCWNvbnN0IGNoYXIgKmV4cGVjdGVkX3JlbWFpbmRlcjsKKwkJaW50IGJhc2U7 CisJCWludCBleHBlY3RlZF9lcnJubzsKKwkJY29uc3QgY2hhciAqZXhwZWN0ZWRfZXJybm9fbmFt ZTsKKwkJdWludG1heF90IGV4cGVjdGVkX3g7CisJfTsKKyNkZWZpbmUgRVJSKGUpCQllLCAjZQor I2RlZmluZSBLVU1BWCh4KQkoKHVpbnRtYXhfdCl4IyNVTEwpCisjZGVmaW5lIEtTTUFYKHgpCSgo dWludG1heF90KShpbnRtYXhfdCl4IyNMTCkKKwlzdHJ1Y3QgdGVzdF9zIHRlc3RzW10gPSB7CisJ CXsiMCIsCQkiMCIsCS0xLAlFUlIoRUlOVkFMKSwJVUlOVE1BWF9NQVh9LAorCQl7IjAiLAkJIjAi LAkxLAlFUlIoRUlOVkFMKSwJVUlOVE1BWF9NQVh9LAorCQl7IjAiLAkJIjAiLAkzNywJRVJSKEVJ TlZBTCksCVVJTlRNQVhfTUFYfSwKKworCQl7IiIsCQkiIiwJMCwJRVJSKEVJTlZBTCksCVVJTlRN QVhfTUFYfSwKKwkJeyIrIiwJCSIrIiwJMCwJRVJSKEVJTlZBTCksCVVJTlRNQVhfTUFYfSwKKwkJ eyIrKzMiLAkJIisrMyIsCTAsCUVSUihFSU5WQUwpLAlVSU5UTUFYX01BWH0sCisJCXsiLSIsCQki LSIsCTAsCUVSUihFSU5WQUwpLAlVSU5UTUFYX01BWH0sCisKKwkJeyI0MiIsCQkiIiwJMCwJRVJS KDApLAkJS1VNQVgoNDIpfSwKKwkJeyIrNDIiLAkJIiIsCTAsCUVSUigwKSwJCUtVTUFYKDQyKX0s CisJCXsiLTQyIiwJCSIiLAkwLAlFUlIoMCksCQlLU01BWCgtNDIpfSwKKwkJeyIwNDIiLAkJIiIs CTAsCUVSUigwKSwJCUtVTUFYKDA0Mil9LAorCQl7IiswNDIiLAkiIiwJMCwJRVJSKDApLAkJS1VN QVgoMDQyKX0sCisJCXsiLTA0MiIsCSIiLAkwLAlFUlIoMCksCQlLU01BWCgtMDQyKX0sCisJCXsi MHg0MiIsCSIiLAkwLAlFUlIoMCksCQlLVU1BWCgweDQyKX0sCisJCXsiKzB4NDIiLAkiIiwJMCwJ RVJSKDApLAkJS1VNQVgoMHg0Mil9LAorCQl7Ii0weDQyIiwJIiIsCTAsCUVSUigwKSwJCUtTTUFY KC0weDQyKX0sCisKKwkJeyIwIiwJCSIiLAkwLAlFUlIoMCksCQlLVU1BWCgwKX0sCisJCXsiMSIs CQkiIiwJMCwJRVJSKDApLAkJS1VNQVgoMSl9LAorCisJCXsiNDIiLAkJIiIsCTAsCUVSUigwKSwJ CUtVTUFYKDQyKX0sCisJCXsiIDQyIiwJCSIiLAkwLAlFUlIoMCksCQlLVU1BWCg0Mil9LAorCQl7 IjQyICIsCQkiICIsCTAsCUVSUigwKSwJCUtVTUFYKDQyKX0sCisJCXsiMHgiLAkJIngiLAkwLAlF UlIoMCksCQlLVU1BWCgwKX0sCisJCXsiNDJ4IiwJCSJ4IiwJMCwJRVJSKDApLAkJS1VNQVgoNDIp fSwKKworCQl7IjA3IiwJCSIiLAkwLAlFUlIoMCksCQlLVU1BWCg3KX0sCisJCXsiMDEwIiwJCSIi LAkwLAlFUlIoMCksCQlLVU1BWCg4KX0sCisJCXsiMDgiLAkJIjgiLAkwLAlFUlIoMCksCQlLVU1B WCgwKX0sCisJCXsiMF8iLAkJIl8iLAkwLAlFUlIoMCksCQlLVU1BWCgwKX0sCisKKwkJeyIweCIs CQkieCIsCTAsCUVSUigwKSwJCUtVTUFYKDApfSwKKwkJeyIwWCIsCQkiWCIsCTAsCUVSUigwKSwJ CUtVTUFYKDApfSwKKwkJeyIweGciLAkJInhnIiwJMCwJRVJSKDApLAkJS1VNQVgoMCl9LAorCQl7 IjBYQSIsCQkiIiwJMCwJRVJSKDApLAkJS1VNQVgoMTApfSwKKworCQl7IjAxMCIsCQkiIiwJMTAs CUVSUigwKSwJCUtVTUFYKDEwKX0sCisJCXsiMHgzIiwJCSJ4MyIsCTEwLAlFUlIoMCksCQlLVU1B WCgwKX0sCisKKwkJeyIxMiIsCQkiMiIsCTIsCUVSUigwKSwJCUtVTUFYKDEpfSwKKwkJeyI3OCIs CQkiOCIsCTgsCUVSUigwKSwJCUtVTUFYKDcpfSwKKwkJeyI5YSIsCQkiYSIsCTEwLAlFUlIoMCks CQlLVU1BWCg5KX0sCisJCXsiOUEiLAkJIkEiLAkxMCwJRVJSKDApLAkJS1VNQVgoOSl9LAorCQl7 ImZnIiwJCSJnIiwJMTYsCUVSUigwKSwJCUtVTUFYKDE1KX0sCisJCXsiRkciLAkJIkciLAkxNiwJ RVJSKDApLAkJS1VNQVgoMTUpfSwKKwkJeyIweGZnIiwJImciLAkxNiwJRVJSKDApLAkJS1VNQVgo MTUpfSwKKwkJeyIwWEZHIiwJIkciLAkxNiwJRVJSKDApLAkJS1VNQVgoMTUpfSwKKwkJeyJ6XyIs CQkiXyIsCTM2LAlFUlIoMCksCQlLVU1BWCgzNSl9LAorCQl7IlpfIiwJCSJfIiwJMzYsCUVSUigw KSwJCUtVTUFYKDM1KX0KKwl9OworI3VuZGVmIEVSUgorI3VuZGVmIEtVTUFYCisjdW5kZWYgS1NN QVgKKwl1bnNpZ25lZCBpOworCisJZm9yIChpID0gMDsgaSA8IHNpemVvZih0ZXN0cykvc2l6ZW9m KHN0cnVjdCB0ZXN0X3MpOyBpKyspIHsKKwkJc3RydWN0IHRlc3RfcyAqdGVzdCA9ICZ0ZXN0c1tp XTsKKwkJaW50IGVycjsKKwkJdWludG1heF90IHJlc3VsdDsKKwkJY2hhciAqcmVtYWluZGVyOwor CisJCXNldF9lcnJubygwKTsKKwkJcmVzdWx0ID0gbWFsbG9jX3N0cnRvdW1heCh0ZXN0LT5pbnB1 dCwgJnJlbWFpbmRlciwgdGVzdC0+YmFzZSk7CisJCWVyciA9IGdldF9lcnJubygpOworCQlleHBl Y3RfZF9lcShlcnIsIHRlc3QtPmV4cGVjdGVkX2Vycm5vLAorCQkgICAgIkV4cGVjdGVkIGVycm5v ICVzIGZvciBcIiVzXCIsIGJhc2UgJWQiLAorCQkgICAgdGVzdC0+ZXhwZWN0ZWRfZXJybm9fbmFt ZSwgdGVzdC0+aW5wdXQsIHRlc3QtPmJhc2UpOworCQlleHBlY3Rfc3RyX2VxKHJlbWFpbmRlciwg dGVzdC0+ZXhwZWN0ZWRfcmVtYWluZGVyLAorCQkgICAgIlVuZXhwZWN0ZWQgcmVtYWluZGVyIGZv ciBcIiVzXCIsIGJhc2UgJWQiLAorCQkgICAgdGVzdC0+aW5wdXQsIHRlc3QtPmJhc2UpOworCQlp ZiAoZXJyID09IDApIHsKKwkJCWV4cGVjdF9qdV9lcShyZXN1bHQsIHRlc3QtPmV4cGVjdGVkX3gs CisJCQkgICAgIlVuZXhwZWN0ZWQgcmVzdWx0IGZvciBcIiVzXCIsIGJhc2UgJWQiLAorCQkJICAg IHRlc3QtPmlucHV0LCB0ZXN0LT5iYXNlKTsKKwkJfQorCX0KK30KK1RFU1RfRU5ECisKK1RFU1Rf QkVHSU4odGVzdF9tYWxsb2Nfc25wcmludGZfdHJ1bmNhdGVkKSB7CisjZGVmaW5lIEJVRkxFTgkx NQorCWNoYXIgYnVmW0JVRkxFTl07CisJc2l6ZV90IHJlc3VsdDsKKwlzaXplX3QgbGVuOworI2Rl ZmluZSBURVNUKGV4cGVjdGVkX3N0cl91bnRydW5jYXRlZCwgLi4uKSBkbyB7CQkJXAorCXJlc3Vs dCA9IG1hbGxvY19zbnByaW50ZihidWYsIGxlbiwgX19WQV9BUkdTX18pOwkJXAorCWV4cGVjdF9k X2VxKHN0cm5jbXAoYnVmLCBleHBlY3RlZF9zdHJfdW50cnVuY2F0ZWQsIGxlbi0xKSwgMCwJXAor CSAgICAiVW5leHBlY3RlZCBzdHJpbmcgaW5lcXVhbGl0eSAoXCIlc1wiIHZzIFwiJXNcIikiLAkJ XAorCSAgICBidWYsIGV4cGVjdGVkX3N0cl91bnRydW5jYXRlZCk7CQkJCVwKKwlleHBlY3RfenVf ZXEocmVzdWx0LCBzdHJsZW4oZXhwZWN0ZWRfc3RyX3VudHJ1bmNhdGVkKSwJCVwKKwkgICAgIlVu ZXhwZWN0ZWQgcmVzdWx0Iik7CQkJCQlcCit9IHdoaWxlICgwKQorCisJZm9yIChsZW4gPSAxOyBs ZW4gPCBCVUZMRU47IGxlbisrKSB7CisJCVRFU1QoIjAxMjM0Njc4OSIsCSIwMTIzNDY3ODkiKTsK KwkJVEVTVCgiYTAxMjNiIiwJCSJhJXNiIiwgIjAxMjMiKTsKKwkJVEVTVCgiYTAxMjM0NTY3IiwJ ImElcyVzIiwgIjAxMjMiLCAiNDU2NyIpOworCQlURVNUKCJhMDEyMyAgIiwJCSJhJS02cyIsICIw MTIzIik7CisJCVRFU1QoImEgIDAxMjMiLAkJImElNnMiLCAiMDEyMyIpOworCQlURVNUKCJhICAg MDEyIiwJCSJhJTYuM3MiLCAiMDEyMyIpOworCQlURVNUKCJhICAgMDEyIiwJCSJhJSouKnMiLCA2 LCAzLCAiMDEyMyIpOworCQlURVNUKCJhIDEyM2IiLAkJImElIGRiIiwgMTIzKTsKKwkJVEVTVCgi YTEyM2IiLAkJImElLWRiIiwgMTIzKTsKKwkJVEVTVCgiYS0xMjNiIiwJCSJhJS1kYiIsIC0xMjMp OworCQlURVNUKCJhKzEyM2IiLAkJImElK2RiIiwgMTIzKTsKKwl9CisjdW5kZWYgQlVGTEVOCisj dW5kZWYgVEVTVAorfQorVEVTVF9FTkQKKworVEVTVF9CRUdJTih0ZXN0X21hbGxvY19zbnByaW50 ZikgeworI2RlZmluZSBCVUZMRU4JMTI4CisJY2hhciBidWZbQlVGTEVOXTsKKwlzaXplX3QgcmVz dWx0OworI2RlZmluZSBURVNUKGV4cGVjdGVkX3N0ciwgLi4uKSBkbyB7CQkJCQlcCisJcmVzdWx0 ID0gbWFsbG9jX3NucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIF9fVkFfQVJHU19fKTsJXAorCWV4 cGVjdF9zdHJfZXEoYnVmLCBleHBlY3RlZF9zdHIsICJVbmV4cGVjdGVkIG91dHB1dCIpOwkJXAor CWV4cGVjdF96dV9lcShyZXN1bHQsIHN0cmxlbihleHBlY3RlZF9zdHIpLCAiVW5leHBlY3RlZCBy ZXN1bHQiKTtcCit9IHdoaWxlICgwKQorCisJVEVTVCgiaGVsbG8iLCAiaGVsbG8iKTsKKworCVRF U1QoIjUwJSwgMTAwJSIsICI1MCUlLCAlZCUlIiwgMTAwKTsKKworCVRFU1QoImEwMTIzYiIsICJh JXNiIiwgIjAxMjMiKTsKKworCVRFU1QoImEgMDEyM2IiLCAiYSU1c2IiLCAiMDEyMyIpOworCVRF U1QoImEgMDEyM2IiLCAiYSUqc2IiLCA1LCAiMDEyMyIpOworCisJVEVTVCgiYTAxMjMgYiIsICJh JS01c2IiLCAiMDEyMyIpOworCVRFU1QoImEwMTIzYiIsICJhJSpzYiIsIC0xLCAiMDEyMyIpOwor CVRFU1QoImEwMTIzIGIiLCAiYSUqc2IiLCAtNSwgIjAxMjMiKTsKKwlURVNUKCJhMDEyMyBiIiwg ImElLSpzYiIsIC01LCAiMDEyMyIpOworCisJVEVTVCgiYTAxMmIiLCAiYSUuM3NiIiwgIjAxMjMi KTsKKwlURVNUKCJhMDEyYiIsICJhJS4qc2IiLCAzLCAiMDEyMyIpOworCVRFU1QoImEwMTIzYiIs ICJhJS4qc2IiLCAtMywgIjAxMjMiKTsKKworCVRFU1QoImEgIDAxMmIiLCAiYSU1LjNzYiIsICIw MTIzIik7CisJVEVTVCgiYSAgMDEyYiIsICJhJTUuKnNiIiwgMywgIjAxMjMiKTsKKwlURVNUKCJh ICAwMTJiIiwgImElKi4zc2IiLCA1LCAiMDEyMyIpOworCVRFU1QoImEgIDAxMmIiLCAiYSUqLipz YiIsIDUsIDMsICIwMTIzIik7CisJVEVTVCgiYSAwMTIzYiIsICJhJSouKnNiIiwgNSwgLTMsICIw MTIzIik7CisKKwlURVNUKCJfYWJjZF8iLCAiXyV4XyIsIDB4YWJjZCk7CisJVEVTVCgiXzB4YWJj ZF8iLCAiXyUjeF8iLCAweGFiY2QpOworCVRFU1QoIl8xMjM0XyIsICJfJW9fIiwgMDEyMzQpOwor CVRFU1QoIl8wMTIzNF8iLCAiXyUjb18iLCAwMTIzNCk7CisJVEVTVCgiXzEyMzRfIiwgIl8ldV8i LCAxMjM0KTsKKwlURVNUKCIwMTIzNCIsICIlMDV1IiwgMTIzNCk7CisKKwlURVNUKCJfMTIzNF8i LCAiXyVkXyIsIDEyMzQpOworCVRFU1QoIl8gMTIzNF8iLCAiXyUgZF8iLCAxMjM0KTsKKwlURVNU KCJfKzEyMzRfIiwgIl8lK2RfIiwgMTIzNCk7CisJVEVTVCgiXy0xMjM0XyIsICJfJWRfIiwgLTEy MzQpOworCVRFU1QoIl8tMTIzNF8iLCAiXyUgZF8iLCAtMTIzNCk7CisJVEVTVCgiXy0xMjM0XyIs ICJfJStkXyIsIC0xMjM0KTsKKworCS8qCisJICogTW9yYWxseSwgd2Ugc2hvdWxkIHRlc3QgdGhl c2UgdG9vLCBidXQgMC1wYWRkZWQgc2lnbmVkIHR5cGVzIGFyZSBub3QKKwkgKiB5ZXQgc3VwcG9y dGVkLgorCSAqCisJICogVEVTVCgiMDEyMzQiLCAiJTA1IiwgMTIzNCk7CisJICogVEVTVCgiLTEy MzQiLCAiJTA1ZCIsIC0xMjM0KTsKKwkgKiBURVNUKCItMDEyMzQiLCAiJTA2ZCIsIC0xMjM0KTsK KwkqLworCisJVEVTVCgiXy0xMjM0XyIsICJfJWRfIiwgLTEyMzQpOworCVRFU1QoIl8xMjM0XyIs ICJfJWRfIiwgMTIzNCk7CisJVEVTVCgiXy0xMjM0XyIsICJfJWlfIiwgLTEyMzQpOworCVRFU1Qo Il8xMjM0XyIsICJfJWlfIiwgMTIzNCk7CisJVEVTVCgiXzAxMjM0XyIsICJfJSNvXyIsIDAxMjM0 KTsKKwlURVNUKCJfMTIzNF8iLCAiXyV1XyIsIDEyMzQpOworCVRFU1QoIl8weDEyMzRhYmNfIiwg Il8lI3hfIiwgMHgxMjM0YWJjKTsKKwlURVNUKCJfMFgxMjM0QUJDXyIsICJfJSNYXyIsIDB4MTIz NGFiYyk7CisJVEVTVCgiX2NfIiwgIl8lY18iLCAnYycpOworCVRFU1QoIl9zdHJpbmdfIiwgIl8l c18iLCAic3RyaW5nIik7CisJVEVTVCgiXzB4NDJfIiwgIl8lcF8iLCAoKHZvaWQgKikweDQyKSk7 CisKKwlURVNUKCJfLTEyMzRfIiwgIl8lbGRfIiwgKChsb25nKS0xMjM0KSk7CisJVEVTVCgiXzEy MzRfIiwgIl8lbGRfIiwgKChsb25nKTEyMzQpKTsKKwlURVNUKCJfLTEyMzRfIiwgIl8lbGlfIiwg KChsb25nKS0xMjM0KSk7CisJVEVTVCgiXzEyMzRfIiwgIl8lbGlfIiwgKChsb25nKTEyMzQpKTsK KwlURVNUKCJfMDEyMzRfIiwgIl8lI2xvXyIsICgobG9uZykwMTIzNCkpOworCVRFU1QoIl8xMjM0 XyIsICJfJWx1XyIsICgobG9uZykxMjM0KSk7CisJVEVTVCgiXzB4MTIzNGFiY18iLCAiXyUjbHhf IiwgKChsb25nKTB4MTIzNGFiYykpOworCVRFU1QoIl8wWDEyMzRBQkNfIiwgIl8lI2xYXyIsICgo bG9uZykweDEyMzRBQkMpKTsKKworCVRFU1QoIl8tMTIzNF8iLCAiXyVsbGRfIiwgKChsb25nIGxv bmcpLTEyMzQpKTsKKwlURVNUKCJfMTIzNF8iLCAiXyVsbGRfIiwgKChsb25nIGxvbmcpMTIzNCkp OworCVRFU1QoIl8tMTIzNF8iLCAiXyVsbGlfIiwgKChsb25nIGxvbmcpLTEyMzQpKTsKKwlURVNU KCJfMTIzNF8iLCAiXyVsbGlfIiwgKChsb25nIGxvbmcpMTIzNCkpOworCVRFU1QoIl8wMTIzNF8i LCAiXyUjbGxvXyIsICgobG9uZyBsb25nKTAxMjM0KSk7CisJVEVTVCgiXzEyMzRfIiwgIl8lbGx1 XyIsICgobG9uZyBsb25nKTEyMzQpKTsKKwlURVNUKCJfMHgxMjM0YWJjXyIsICJfJSNsbHhfIiwg KChsb25nIGxvbmcpMHgxMjM0YWJjKSk7CisJVEVTVCgiXzBYMTIzNEFCQ18iLCAiXyUjbGxYXyIs ICgobG9uZyBsb25nKTB4MTIzNEFCQykpOworCisJVEVTVCgiXy0xMjM0XyIsICJfJXFkXyIsICgo bG9uZyBsb25nKS0xMjM0KSk7CisJVEVTVCgiXzEyMzRfIiwgIl8lcWRfIiwgKChsb25nIGxvbmcp MTIzNCkpOworCVRFU1QoIl8tMTIzNF8iLCAiXyVxaV8iLCAoKGxvbmcgbG9uZyktMTIzNCkpOwor CVRFU1QoIl8xMjM0XyIsICJfJXFpXyIsICgobG9uZyBsb25nKTEyMzQpKTsKKwlURVNUKCJfMDEy MzRfIiwgIl8lI3FvXyIsICgobG9uZyBsb25nKTAxMjM0KSk7CisJVEVTVCgiXzEyMzRfIiwgIl8l cXVfIiwgKChsb25nIGxvbmcpMTIzNCkpOworCVRFU1QoIl8weDEyMzRhYmNfIiwgIl8lI3F4XyIs ICgobG9uZyBsb25nKTB4MTIzNGFiYykpOworCVRFU1QoIl8wWDEyMzRBQkNfIiwgIl8lI3FYXyIs ICgobG9uZyBsb25nKTB4MTIzNEFCQykpOworCisJVEVTVCgiXy0xMjM0XyIsICJfJWpkXyIsICgo aW50bWF4X3QpLTEyMzQpKTsKKwlURVNUKCJfMTIzNF8iLCAiXyVqZF8iLCAoKGludG1heF90KTEy MzQpKTsKKwlURVNUKCJfLTEyMzRfIiwgIl8lamlfIiwgKChpbnRtYXhfdCktMTIzNCkpOworCVRF U1QoIl8xMjM0XyIsICJfJWppXyIsICgoaW50bWF4X3QpMTIzNCkpOworCVRFU1QoIl8wMTIzNF8i LCAiXyUjam9fIiwgKChpbnRtYXhfdCkwMTIzNCkpOworCVRFU1QoIl8xMjM0XyIsICJfJWp1XyIs ICgoaW50bWF4X3QpMTIzNCkpOworCVRFU1QoIl8weDEyMzRhYmNfIiwgIl8lI2p4XyIsICgoaW50 bWF4X3QpMHgxMjM0YWJjKSk7CisJVEVTVCgiXzBYMTIzNEFCQ18iLCAiXyUjalhfIiwgKChpbnRt YXhfdCkweDEyMzRBQkMpKTsKKworCVRFU1QoIl8xMjM0XyIsICJfJXRkXyIsICgocHRyZGlmZl90 KTEyMzQpKTsKKwlURVNUKCJfLTEyMzRfIiwgIl8ldGRfIiwgKChwdHJkaWZmX3QpLTEyMzQpKTsK KwlURVNUKCJfMTIzNF8iLCAiXyV0aV8iLCAoKHB0cmRpZmZfdCkxMjM0KSk7CisJVEVTVCgiXy0x MjM0XyIsICJfJXRpXyIsICgocHRyZGlmZl90KS0xMjM0KSk7CisKKwlURVNUKCJfLTEyMzRfIiwg Il8lemRfIiwgKChzc2l6ZV90KS0xMjM0KSk7CisJVEVTVCgiXzEyMzRfIiwgIl8lemRfIiwgKChz c2l6ZV90KTEyMzQpKTsKKwlURVNUKCJfLTEyMzRfIiwgIl8lemlfIiwgKChzc2l6ZV90KS0xMjM0 KSk7CisJVEVTVCgiXzEyMzRfIiwgIl8lemlfIiwgKChzc2l6ZV90KTEyMzQpKTsKKwlURVNUKCJf MDEyMzRfIiwgIl8lI3pvXyIsICgoc3NpemVfdCkwMTIzNCkpOworCVRFU1QoIl8xMjM0XyIsICJf JXp1XyIsICgoc3NpemVfdCkxMjM0KSk7CisJVEVTVCgiXzB4MTIzNGFiY18iLCAiXyUjenhfIiwg KChzc2l6ZV90KTB4MTIzNGFiYykpOworCVRFU1QoIl8wWDEyMzRBQkNfIiwgIl8lI3pYXyIsICgo c3NpemVfdCkweDEyMzRBQkMpKTsKKyN1bmRlZiBCVUZMRU4KK30KK1RFU1RfRU5ECisKK2ludAor bWFpbih2b2lkKSB7CisJcmV0dXJuIHRlc3QoCisJICAgIHRlc3RfbWFsbG9jX3N0cnRvdW1heF9u b19lbmRwdHIsCisJICAgIHRlc3RfbWFsbG9jX3N0cnRvdW1heCwKKwkgICAgdGVzdF9tYWxsb2Nf c25wcmludGZfdHJ1bmNhdGVkLAorCSAgICB0ZXN0X21hbGxvY19zbnByaW50Zik7Cit9CgpkaWZm IC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0 L21hdGguYyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5p dC9tYXRoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTMyNzY3YwotLS0g L2Rldi9udWxsCisrKyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rl c3QvdW5pdC9tYXRoLmMKQEAgLTAsMCArMSwzOTAgQEAKKyNpbmNsdWRlICJ0ZXN0L2plbWFsbG9j X3Rlc3QuaCIKKworI2RlZmluZSBNQVhfUkVMX0VSUiAxLjBlLTkKKyNkZWZpbmUgTUFYX0FCU19F UlIgMS4wZS05CisKKyNpbmNsdWRlIDxmbG9hdC5oPgorCisjaWZkZWYgX19QR0kKKyN1bmRlZiBJ TkZJTklUWQorI2VuZGlmCisKKyNpZm5kZWYgSU5GSU5JVFkKKyNkZWZpbmUgSU5GSU5JVFkgKERC TF9NQVggKyBEQkxfTUFYKQorI2VuZGlmCisKK3N0YXRpYyBib29sCitkb3VibGVfZXFfcmVsKGRv dWJsZSBhLCBkb3VibGUgYiwgZG91YmxlIG1heF9yZWxfZXJyLCBkb3VibGUgbWF4X2Fic19lcnIp IHsKKwlkb3VibGUgcmVsX2VycjsKKworCWlmIChmYWJzKGEgLSBiKSA8IG1heF9hYnNfZXJyKSB7 CisJCXJldHVybiB0cnVlOworCX0KKwlyZWxfZXJyID0gKGZhYnMoYikgPiBmYWJzKGEpKSA/IGZh YnMoKGEtYikvYikgOiBmYWJzKChhLWIpL2EpOworCXJldHVybiAocmVsX2VyciA8IG1heF9yZWxf ZXJyKTsKK30KKworc3RhdGljIHVpbnQ2NF90CitmYWN0b3JpYWwodW5zaWduZWQgeCkgeworCXVp bnQ2NF90IHJldCA9IDE7CisJdW5zaWduZWQgaTsKKworCWZvciAoaSA9IDI7IGkgPD0geDsgaSsr KSB7CisJCXJldCAqPSAodWludDY0X3QpaTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitURVNU X0JFR0lOKHRlc3RfbG5fZ2FtbWFfZmFjdG9yaWFsKSB7CisJdW5zaWduZWQgeDsKKworCS8qIGV4 cChsbl9nYW1tYSh4KSkgPT0gKHgtMSkhIGZvciBpbnRlZ2VyIHguICovCisJZm9yICh4ID0gMTsg eCA8PSAyMTsgeCsrKSB7CisJCWV4cGVjdF90cnVlKGRvdWJsZV9lcV9yZWwoZXhwKGxuX2dhbW1h KHgpKSwKKwkJICAgIChkb3VibGUpZmFjdG9yaWFsKHgtMSksIE1BWF9SRUxfRVJSLCBNQVhfQUJT X0VSUiksCisJCSAgICAiSW5jb3JyZWN0IGZhY3RvcmlhbCByZXN1bHQgZm9yIHg9JXUiLCB4KTsK Kwl9Cit9CitURVNUX0VORAorCisvKiBFeHBlY3RlZCBsbl9nYW1tYShbMC4wLi4xMDAuMF0gaW5j cmVtZW50PTAuMjUpLiAqLworc3RhdGljIGNvbnN0IGRvdWJsZSBsbl9nYW1tYV9taXNjX2V4cGVj dGVkW10gPSB7CisJSU5GSU5JVFksCisJMS4yODgwMjI1MjQ2OTgwNzc0MywgMC41NzIzNjQ5NDI5 MjQ3MDAwOCwgMC4yMDMyODA5NTE0MzEyOTUzOCwKKwkwLjAwMDAwMDAwMDAwMDAwMDAwLCAtMC4w OTgyNzE4MzY0MjE4MTMyMCwgLTAuMTIwNzgyMjM3NjM1MjQ1MTgsCisJLTAuMDg0NDAxMTIxMDIw NDg1NTUsIDAuMDAwMDAwMDAwMDAwMDAwMDAsIDAuMTI0ODcxNzE0ODkyMzk2NTEsCisJMC4yODQ2 ODI4NzA0NzI5MTkxOCwgMC40NzUyMTQ2NjY5MTQ5MzcxOSwgMC42OTMxNDcxODA1NTk5NDUyOSwK KwkwLjkzNTgwMTkzMTEwODcyNTIzLCAxLjIwMDk3MzYwMjM0NzA3NDI5LCAxLjQ4NjgxNTU3ODU5 MzQxNzE4LAorCTEuNzkxNzU5NDY5MjI4MDU0OTYsIDIuMTE0NDU2OTI3NDUwMzcxMjgsIDIuNDUz NzM2NTcwODQyNDQyMzQsCisJMi44MDg1NzE0MTg1NzU3MzY0NCwgMy4xNzgwNTM4MzAzNDc5NDU3 NSwgMy41NjEzNzU5MTAzODY2OTcxMCwKKwkzLjk1NzgxMzk2NzYxODcxNjUxLCA0LjM2NjcxNjAz NjYyMjI4NjgwLCA0Ljc4NzQ5MTc0Mjc4MjA0NTgxLAorCTUuMjE5NjAzOTg2OTkwMjI5MzIsIDUu NjYyNTYyMDU5ODU3MTQxNzgsIDYuMTE1OTE1ODkxNDMxNTQ1NjgsCisJNi41NzkyNTEyMTIwMTAx MDEyMSwgNy4wNTIxODU0NTA3Mzg1Mzk1MywgNy41MzQzNjQyMzY3NTg3MzI2OCwKKwk4LjAyNTQ1 ODM5NjMxNTk4MzEyLCA4LjUyNTE2MTM2MTA2NTQxNDY3LCA5LjAzMzE4NjkxOTYwNTEyMzMyLAor CTkuNTQ5MjY3MjU3MzAwOTk2OTAsIDEwLjA3MzE1MTIzOTY4MTIzOTQ5LCAxMC42MDQ2MDI5MDI3 NDUyNTA4NiwKKwkxMS4xNDM0MDAxMTk5NTE3MTIzMSwgMTEuNjg5MzMzNDIwNzk3MjY4NTYsIDEy LjI0MjIwNDk0MDA1MDc2MTc2LAorCTEyLjgwMTgyNzQ4MDA4MTQ2OTA5LCAxMy4zNjgwMjM2NzE0 NzYwNDcyMCwgMTMuOTQwNjI1MjE5NDAzNzYzNDIsCisJMTQuNTE5NDcyMjI1MDYwNTE4MTYsIDE1 LjEwNDQxMjU3MzA3NTUxOTQzLCAxNS42OTUzMDEzNzcwNjA0NjUyNCwKKwkxNi4yOTIwMDA0NzY1 NjcyNDIzNywgMTYuODk0Mzc3OTc5NjM0MTkyODUsIDE3LjUwMjMwNzg0NTg3Mzg5MDEwLAorCTE4 LjExNTY2OTUwNTcxMDg5NDA3LCAxOC43MzQzNDc1MTE5MzY0NDg0MywgMTkuMzU4MjMxMjIwMjI0 MzU0MjcsCisJMTkuOTg3MjE0NDk1NjYxODg0NjgsIDIwLjYyMTE5NTQ0MjcwMTYzMDE4LCAyMS4y NjAwNzYxNTYyNDQ3MDA0OCwKKwkyMS45MDM3NjI0OTE4Mjg3OTMyMCwgMjIuNTUyMTYzODUzMTIz NDIwOTgsIDIzLjIwNTE5Mjk5NTEzMzg2MDAyLAorCTIzLjg2Mjc2NTg0MTY4OTA4OTU0LCAyNC41 MjQ4MDEzMTU5NDEzNzgwMiwgMjUuMTkxMjIxMTgyNzM4NjgzMzgsCisJMjUuODYxOTQ5OTAxODQ4 NTE4NjEsIDI2LjUzNjkxNDQ5MTExNTYxMzQwLCAyNy4yMTYwNDQzOTg3MjcyMDYwNCwKKwkyNy44 OTkyNzEzODM4NDA4OTM4OSwgMjguNTg2NTI5NDA0OTAxOTM4MjgsIDI5LjI3Nzc1NDUxNTA0MDgx NTE2LAorCTI5Ljk3Mjg4NDc2Mzk5ODg0ODcxLCAzMC42NzE4NjAxMDYwODA2NzU0OCwgMzEuMzc0 NjIyMzEzNjc3NjkwNTAsCisJMzIuMDgxMTE0ODk1OTQ3MzU4NDMsIDMyLjc5MTI4MzAyMjI2OTkx NTY1LCAzMy41MDUwNzM0NTAxMzY4OTA3NiwKKwkzNC4yMjI0MzQ0NTcxNTUwNTMxNywgMzQuOTQz MzE1Nzc2ODc2ODE1NDUsIDM1LjY2NzY2ODUzODE5MTM0Mjk4LAorCTM2LjM5NTQ0NTIwODAzMzA1 MjYxLCAzNy4xMjY1OTk1MzcxODM1NTg2NSwgMzcuODYxMDg2NTA4OTYxMDkzOTUsCisJMzguNTk4 ODYyMjkwNjA3NzYyMzAsIDM5LjMzOTg4NDE4NzE5OTQ5NDY1LCA0MC4wODQxMTA1OTc5MTczNTE5 OCwKKwk0MC44MzE1MDA5NzQ1MzA3OTc1MiwgNDEuNTgyMDE1NzgxOTU0OTAxMDAsIDQyLjMzNTYx NjQ2MDc1MzQ4NTA2LAorCTQzLjA5MjI2NTM5MTQ2OTg4Njk5LCA0My44NTE5MjU4NjA2NzUxNTIw OCwgNDQuNjE0NTYyMDI4NjMxNTg4OTMsCisJNDUuMzgwMTM4ODk4NDc2OTAwNTIsIDQ2LjE0ODYy MjI4Njg0MDMyODg1LCA0Ni45MTk5Nzg3OTU4MDg3NzM5NSwKKwk0Ny42OTQxNzU3ODYxNjYyODM2 MSwgNDguNDcxMTgxMzUxODM1MjIwMTQsIDQ5LjI1MDk2NDI5NTQ1MjU2ODgyLAorCTUwLjAzMzQ5 NDEwNTAxOTE0NDYzLCA1MC44MTg3NDA5MzE1NjMyNDc5MCwgNTEuNjA2Njc1NTY3NzY0MzY5ODIs CisJNTIuMzk3MjY5NDI3NDg1OTIzNjQsIDUzLjE5MDQ5NDUyNjE2OTI2NzQzLCA1My45ODYzMjM0 NjIwNDM5MDU4NiwKKwk1NC43ODQ3MjkzOTgxMTIzMTE1NywgNTUuNTg1Njg2MDQ0ODY5NDI2MzMs IDU2LjM4OTE2NzY0MzcxOTkyOTQwLAorCTU3LjE5NTE0ODk1MTA1ODU5ODY0LCA1OC4wMDM2MDUy MjI5ODA1MTA4MCwgNTguODE0NTEyMjAwNTkwNzk3ODcsCisJNTkuNjI3ODQ2MDk1ODg0MzIyNjEs IDYwLjQ0MzU4MzU3ODE2ODM0MzcxLCA2MS4yNjE3MDE3NjEwMDE5OTQyNywKKwk2Mi4wODIxNzgx ODk2Mjg0MjkyNywgNjIuOTA0OTkwODI4ODc2NDk5NjIsIDYzLjczMDExODA1MTUxMDM1OTU4LAor CTY0LjU1NzUzODYyNzAwNjMyMzQwLCA2NS4zODcyMzE3MTA3Mzc2ODAxNSwgNjYuMjE5MTc2ODMz NTQ5MDEzODUsCisJNjcuMDUzMzUzODkxNzAyNzk4MjUsIDY3Ljg4OTc0MzEzNzE4MTU0MDA4LCA2 OC43MjgzMjUxNjgzMzAxMzAxNywKKwk2OS41NjkwODA5MjA4MjM2MzczNywgNzAuNDExOTkxNjU4 OTQ2MTYzODUsIDcxLjI1NzAzODk2NzE2ODAwMDQ1LAorCTcyLjEwNDIwNDc0MjAwNzk5MzkwLCA3 Mi45NTM0NzExODQxNjk0MDE5MSwgNzMuODA0ODIwNzkwOTM3Nzk2NDYsCisJNzQuNjU4MjM2MzQ4 ODMwMTU4MTQsIDc1LjUxMzcwMDkyNjQ4NDg1ODY2LCA3Ni4zNzExOTc4Njc3ODI3NTQ1NCwKKwk3 Ny4yMzA3MTA3ODUxOTAzMzk2MSwgNzguMDkyMjIzNTUzMzE1MzA3MDcsIDc4Ljk1NTcyMDMwMjY2 NzI1OTYwLAorCTc5LjgyMTE4NTQxMzYxNDM1ODU5LCA4MC42ODg2MDM1MTA1MjkwMzQ2OCwgODEu NTU3OTU5NDU2MTE1MDI4NzMsCisJODIuNDI5MjM4MzQ1OTA5MDQxNjQsIDgzLjMwMjQyNTUwMjk1 MDA0Mzc4LCA4NC4xNzc1MDY0NzI2MTAyODk3MywKKwk4NS4wNTQ0NjcwMTc1ODE1Mjk4MywgODUu OTMzMjkzMTEzMDEwOTA0NTYsIDg2LjgxMzk3MDk0MTc4MTA3OTIwLAorCTg3LjY5NjQ4Njg4OTky ODgyMDU3LCA4OC41ODA4Mjc1NDIxOTc2Njc0MSwgODkuNDY2OTc5Njc3NzE5MTM3OTUsCisJOTAu MzU0OTMwMjY1ODE4MzgxOTQsIDkxLjI0NDY2NjQ2MTkzOTYzMDE1LCA5Mi4xMzYxNzU2MDM2ODcw OTI5MiwKKwk5My4wMjk0NDUyMDY5Nzc0MjgwMywgOTMuOTI0NDYyOTYyMjk5Nzg0ODYsIDk0Ljgy MTIxNjczMTA3OTY3Mjk3LAorCTk1LjcxOTY5NDU0MjE0MzIxNjE1LCA5Ni42MTk4ODQ1ODgyNzgw OTcyMywgOTcuNTIxNzc1MjIyODg4MjA5MTAsCisJOTguNDI1MzU0OTU2NzM4NDg4MDAsIDk5LjMz MDYxMjQ1NDc4NzQxMzQxLCAxMDAuMjM3NTM2NTMzMTAzNjc4OTUsCisJMTAxLjE0NjExNjE1NTg2 NDU4OTgxLCAxMDIuMDU2MzQwNDMyNDMzNTQzNzAsIDEwMi45NjgxOTg2MTQ1MTM4MjM5NCwKKwkx MDMuODgxNjgwMDkzMzc2MjE4MTEsIDEwNC43OTY3NzQzOTcxNTgzMzAzMiwgMTA1LjcxMzQ3MTE4 ODIzMjg3MzAzLAorCTEwNi42MzE3NjAyNjA2NDM0NjA0NywgMTA3LjU1MTYzMTUzNzYwNDYzNTAx LCAxMDguNDczMDc1MDY5MDY1NDAxOTgsCisJMTA5LjM5NjA4MTAyOTMzMzIzMTUzLCAxMTAuMzIw NjM5NzE0NzU3NDA1MTYsIDExMS4yNDY3NDE1NDE0NjkyMDU1NywKKwkxMTIuMTc0Mzc3MDQzMTc3 ODY5OTUsIDExMy4xMDM1MzY4NjkwMjAxMzIzNywgMTE0LjAzNDIxMTc4MTQ2MTcwNjg5LAorCTEx NC45NjYzOTI2NTQyNDk5MDEyOCwgMTE1LjkwMDA3MDQ3MDQxNDU0NzY5LCAxMTYuODM1MjM2MzIw MzE2OTgwMTQsCisJMTE3Ljc3MTg4MTM5OTc0NTA2OTUzLCAxMTguNzA5OTk3MDA4MDUzMTA3OTUs IDExOS42NDk1NzQ1NDYzNDQ5MDgzMCwKKwkxMjAuNTkwNjA1NTE1Njk5NzQ5NjIsIDEyMS41MzMw ODE1MTU0Mzg2NTI3OSwgMTIyLjQ3Njk5NDI0MTQzMDk3MjQ3LAorCTEyMy40MjIzMzU0ODQ0Mzk1 NTcyNiwgMTI0LjM2OTA5NzEyODUwMzM4Mzk0LCAxMjUuMzE3MjcxMTQ5MzU2ODk4MjYsCisJMTI2 LjI2Njg0OTYxMjg4NDkyNTU5LCAxMjcuMjE3ODI0NjczNjExNzU4NjEsIDEyOC4xNzAxODg1NzMy MjQyMDg5OSwKKwkxMjkuMTIzOTMzNjM5MTI3MjQ0NTMsIDEzMC4wNzkwNTIyODMwMzA4NDc1NSwg MTMxLjAzNTUzNjk5OTU2ODYyMDMzLAorCTEzMS45OTMzODAzNjQ5NDU3Nzg2NCwgMTMyLjk1MjU3 NTAzNTYxNjI5MTY0LCAxMzMuOTEzMTEzNzQ2OTg5MjY3ODQsCisJMTM0Ljg3NDk4OTMxMjE2MTk0 MzY0LCAxMzUuODM4MTk0NjIwNjgwNDY4NDYsIDEzNi44MDI3MjI2MzczMjYzODI5NCwKKwkxMzcu NzY4NTY2NDAwOTI5MDE3ODUsIDEzOC43MzU3MTkwMjMyMDI1NjI5OSwgMTM5LjcwNDE3MzY4NzYw NzE4MDkxLAorCTE0MC42NzM5MjM2NDgyMzQyNTA1NSwgMTQxLjY0NDk2MjIyODcxNDAwNzMyLCAx NDIuNjE3MjgyODIxMTQ2MDA1NzQsCisJMTQzLjU5MDg3ODg4NTA1MTA0MDQ3LCAxNDQuNTY1NzQz OTQ2MzQ0ODY2ODAsIDE0NS41NDE4NzE1OTYzMzIxMDA1OCwKKwkxNDYuNTE5MjU1NDkwNzIwNjM4 NTksIDE0Ny40OTc4ODkzNDg2NTU2NjE0OCwgMTQ4LjQ3Nzc2Njk1MTc3MzAyMDMxLAorCTE0OS40 NTg4ODIxNDMyNzEyOTYxNywgMTUwLjQ0MTIyODgyNzAwMTkzNjAwLCAxNTEuNDI0ODAwOTY2NTc3 NTQ5ODQsCisJMTUyLjQwOTU5MjU4NDQ5NzM3NDkwLCAxNTMuMzk1NTk3NzYxMjg5ODIwOTQsIDE1 NC4zODI4MTA2MzQ2NzE2NDI0NSwKKwkxNTUuMzcxMjI1Mzk4NzIzMDI2OTYsIDE1Ni4zNjA4MzYz MDMwNzg3OTg0NCwgMTU3LjM1MTYzNzY1MjEzNDc0MTA3LAorCTE1OC4zNDM2MjM4MDQyNjkyMTM5 MSwgMTU5LjMzNjc4OTE3MTA3OTIwMzcwLCAxNjAuMzMxMTI4MjE2NjMwOTI5NzMsCisJMTYxLjMy NjYzNTQ1NjcyNDI4OTk1LCAxNjIuMzIzMzA1NDU4MTcxMTc2OTUsIDE2My4zMjExMzI4MzgwODY5 NTMxNCwKKwkxNjQuMzIwMTEyMjYzMTk1MTk4OTIsIDE2NS4zMjAyMzg0NDkxNDQ4NTI2NywgMTY2 LjMyMTUwNjE1OTg0MDM2NzkwLAorCTE2Ny4zMjM5MTAyMDY3ODM1ODAxOCwgMTY4LjMyNzQ0NTQ0 ODQyNzY4MTY0LCAxNjkuMzMyMTA2Nzg5NTQyNzA2MzQsCisJMTcwLjMzNzg4OTE4MDU5Mjc1Mzc1 LCAxNzEuMzQ0Nzg3NjE3MTIzODQxOTgsIDE3Mi4zNTI3OTcxMzkxNjI4MTcwNywKKwkxNzMuMzYx OTEyODMwNjI3MjYxNDMsIDE3NC4zNzIxMjk4MTg3NDUxNTA5NCwgMTc1LjM4MzQ0MzI3MzQ4NTM0 MDgwLAorCTE3Ni4zOTU4NDg0MDY5OTczNDUxNCwgMTc3LjQwOTM0MDQ3MzA2MTYwNDM3LCAxNzgu NDIzOTE0NzY2NTQ4NDc3OTMsCisJMTc5LjQzOTU2NjYyMjg4NzIxMzA0LCAxODAuNDU2MjkxNDE3 NTQzNzgxMTEsIDE4MS40NzQwODQ1NjU1MDc0MTEwNywKKwkxODIuNDkyOTQxNTIwNzg2MzAzMDQs IDE4My41MTI4NTc3NzU5MTE1MjczNywgMTg0LjUzMzgyODg2MTQ0OTQ3ODYxLAorCTE4NS41NTU4 NTAzNDU1MjI2Mjg2OSwgMTg2LjU3ODkxNzgzMzMzNzg2ODYxLCAxODcuNjAzMDI2OTY2NzIzMTIw OTUsCisJMTg4LjYyODE3MzQyMzY3MTYyNjEwLCAxODkuNjU0MzUyOTE3ODkzNDE5MzIsIDE5MC42 ODE1NjExOTgzNzQ2ODA1NCwKKwkxOTEuNzA5Nzk0MDQ4OTQzNzYzMzAsIDE5Mi43MzkwNDcyODc4 NDQ5MjU5MCwgMTkzLjc2OTMxNjc2NzMxODIwMTc2LAorCTE5NC44MDA1OTgzNzMxODcxNDI0NCwg MTk1LjgzMjg4ODAyNDQ1MTg0NzI5LCAxOTYuODY2MTgxNjcyODg5OTUwOTYsCisJMTk3LjkwMDQ3 NTMwMjY2MzAxMTIzLCAxOTguOTM1NzY0OTI5OTI5NDYyMTQsIDE5OS45NzIwNDY2MDI0NjM3MzQ2 NCwKKwkyMDEuMDA5MzE2Mzk5MjgxNDg3OTcsIDIwMi4wNDc1NzA0MzAyNzA2MzkwMSwgMjAzLjA4 NjgwNDgzNTgyODA3NTk3LAorCTIwNC4xMjcwMTU3ODY1MDIyODM4NSwgMjA1LjE2ODE5OTQ4MjY0 MTE3MTAyLCAyMDYuMjEwMzUyMTU0MDQ1OTc4MDcsCisJMjA3LjI1MzQ3MDA1OTYyOTg3NjIzLCAy MDguMjk3NTQ5NDg3MDgxOTA5MDksIDIwOS4zNDI1ODY3NTI1MzY3ODkxNiwKKwkyMTAuMzg4NTc4 MjAwMjQ4NzU4NzgsIDIxMS40MzU1MjAyMDIyNzA5OTMyMCwgMjEyLjQ4MzQwOTE1ODEzOTc3ODU4 LAorCTIxMy41MzIyNDE0OTQ1NjMyMzc0NCwgMjE0LjU4MjAxMzY2NTExNTE0MTUyLCAyMTUuNjMy NzIyMTQ5OTMyODQ1OTIsCisJMjE2LjY4NDM2MzQ1NTQyMDE0MDEwLCAyMTcuNzM2OTM0MTEzOTU0 MjIwMDQsIDIxOC43OTA0MzA2ODM1OTcwMzczOSwKKwkyMTkuODQ0ODQ5NzQ3ODExMzM4MTUsIDIy MC45MDAxODc5MTUxNzk5Njk4OCwgMjIxLjk1NjQ0MTgxOTEzMDMzMzIyLAorCTIyMy4wMTM2MDgx MTc2NjIxNTg3NSwgMjI0LjA3MTY4MzQ5MzA3OTUxODcxLCAyMjUuMTMwNjY0NjUxNzI2NjE4Nzks CisJMjI2LjE5MDU0ODMyMzcyNzU5NzM0LCAyMjcuMjUxMzMxMjYyNzI5NjIxNTksIDIyOC4zMTMw MTAyNDU2NTAyNDcwNCwKKwkyMjkuMzc1NTgyMDcyNDI4MDczODQsIDIzMC40MzkwNDM1NjU3NzY4 OTg5NiwgMjMxLjUwMzM5MTU3MDk0MzQyMTEzLAorCTIzMi41Njg2MjI5NTU0Njg0NzAwOCwgMjMz LjYzNDczNDYwODk1MTQ0NzQwLCAyMzQuNzAxNzIzNDQyODE4MjM0ODQsCisJMjM1Ljc2OTU4NjM5 MDA5MjIyOTA3LCAyMzYuODM4MzIwNDA1MTY4NDQ1ODYsIDIzNy45MDc5MjI0NjM1OTExNzcxMiwK KwkyMzguOTc4Mzg5NTYxODM0MzE5NDcsIDI0MC4wNDk3MTg3MTcwODQ3NzIzOCwgMjQxLjEyMTkw Njk2NzAyOTA0ODAyLAorCTI0Mi4xOTQ5NTEzNjk2NDI4MDg0NiwgMjQzLjI2ODg0OTAwMjk4Mjcw NTA5LCAyNDQuMzQzNTk2OTY0OTgxOTEyODMsCisJMjQ1LjQxOTE5MjM3MzI0NzgyNDQzLCAyNDYu NDk1NjMyMzY0ODYyNzAwNTcsIDI0Ny41NzI5MTQwOTYxODY4MjExMCwKKwkyNDguNjUxMDM0NzQy NjY0NzYyNjksIDI0OS43Mjk5OTE0OTg2MzMzODE3NSwgMjUwLjgwOTc4MTU3NzEzMzU0OTA0LAor CTI1MS44OTA0MDIyMDk3MjMxNjMyMCwgMjUyLjk3MTg1MDY0NjI5Mzc0NTUxLCAyNTQuMDU0MTI0 MTU0ODg4MzQxOTksCisJMjU1LjEzNzIyMDAyMTUyMzAwNjYxLCAyNTYuMjIxMTM1NTUwMDA5NTM1 MTEsIDI1Ny4zMDU4NjgwNjE3ODEyNjgzNSwKKwkyNTguMzkxNDE0ODk1NzIwODU2NzUsIDI1OS40 Nzc3NzM0MDc5OTAyOTg0NCwgMjYwLjU2NDk0MDk3MTg2MzIyMjc5LAorCTI2MS42NTI5MTQ5Nzc1 NTkxMzQ5NywgMjYyLjc0MTY5MjgzMjA4MDIxODUyLCAyNjMuODMxMjcxOTU5MDQ5NjcyNjYsCisJ MjY0LjkyMTY0OTc5ODU1Mjc3ODA3LCAyNjYuMDEyODIzODA2OTc5MzgzNzksIDI2Ny4xMDQ3OTE0 NTY4Njg0OTczMywKKwkyNjguMTk3NTUwMjM2NzU1Mzc1ODYsIDI2OS4yOTEwOTc2NTEwMTk3NTQy NywgMjcwLjM4NTQzMTIxOTczNjc0NDg4LAorCTI3MS40ODA1NDg0Nzg1Mjg4MTcyMSwgMjcyLjU3 NjQ0Njk3ODQyMDMzNTY1LCAyNzMuNjczMTI0Mjg1NjkzNzQ1NjEsCisJMjc0Ljc3MDU3Nzk4MTc0 NjgzOTY3LCAyNzUuODY4ODA1NjYyOTUzMjYzODksIDI3Ni45Njc4MDQ5NDA1MjMxMzc3MCwKKwky NzguMDY3NTczNDQwMzY2MTc0OTYsIDI3OS4xNjgxMDg4MDI5NTY2ODA4NSwgMjgwLjI2OTQwODY4 MzIwMDA4MzQ5LAorCTI4MS4zNzE0NzA3NTAzMDA0MzE5NywgMjgyLjQ3NDI5MjY4NzYzMDQ1MjI5 LCAyODMuNTc3ODcyMTkyNjAyMTcxNzEsCisJMjg0LjY4MjIwNjk3NjU0MDc4MzIyLCAyODUuNzg3 Mjk0NzY0NTU3NjAwNTAsIDI4Ni44OTMxMzMyOTU0MjY5OTE5NCwKKwkyODcuOTk5NzIwMzIxNDYy Njg5MzAsIDI4OS4xMDcwNTM2MDgzOTc1NjM5NSwgMjkwLjIxNTEzMDkzNTI2Mjg5MTQwLAorCTI5 MS4zMjM5NTAwOTQyNzAyODc1NCwgMjkyLjQzMzUwODg5MDY5NTIzNjQ2LCAyOTMuNTQzODA1MTQy NzYwNzMyMDAsCisJMjk0LjY1NDgzNjY4MTUyMzM2MzUwLCAyOTUuNzY2NjAxMzUwNzYwNTk1MzIs IDI5Ni44NzkwOTcwMDY4NTg4OTkwMiwKKwkyOTcuOTkyMzIxNTE4NzAzNDIwMjIsIDI5OS4xMDYy NzI3Njc1Njk0NjQ1OCwgMzAwLjIyMDk0ODY0NzAxNDA5NzMzLAorCTMwMS4zMzYzNDcwNjI3NzAz MDA5MSwgMzAyLjQ1MjQ2NTkzMjY0MTMwMjk3LCAzMDMuNTY5MzAzMTg2Mzk2NDM5MjksCisJMzA0 LjY4Njg1Njc2NTY2ODcyMTg5LCAzMDUuODA1MTI0NjIzODUyODA1MTQsIDMwNi45MjQxMDQ3MjYw MDQ3NzA3OCwKKwkzMDguMDQzNzk1MDQ4NzQyMzY3NzMsIDMwOS4xNjQxOTM1ODAxNDY5MDAzMywg MzEwLjI4NTI5ODMxOTY2NjMxMDM2LAorCTMxMS40MDcxMDcyNzgwMTg2NTY4NywgMzEyLjUyOTYx ODQ3NzA5NzkyNjY0LCAzMTMuNjUyODI5OTQ5ODc4OTkyMDEsCisJMzE0Ljc3NjczOTc0MDMyNjAz NjEwLCAzMTUuOTAxMzQ1OTAzMjk5NTAwMTUsIDMxNy4wMjY2NDY1MDQ0NjYzMjc3NywKKwkzMTgu MTUyNjM5NjIwMjA5Mjk5NjYsIDMxOS4yNzkzMjMzMzc1Mzg5MjYzNSwgMzIwLjQwNjY5NTc1NDAw NTQ1NDU1LAorCTMyMS41MzQ3NTQ5Nzc2MTEyNzE0NCwgMzIyLjY2MzQ5OTEyNjcyNjIwODAzLCAz MjMuNzkyOTI2MzMwMDAxNTkxODUsCisJMzI0LjkyMzAzNDcyNjI4NjkxNDUyLCAzMjYuMDUzODIy NDY0NTQ1ODc0MDMsIDMyNy4xODUyODc3MDM3NzUyNTkxNiwKKwkzMjguMzE3NDI4NjEyOTIyMjQy MzQsIDMyOS40NTAyNDMzNzA4MDUyNTM1NiwgMzMwLjU4MzczMDE2NjAzMzQzMzMxLAorCTMzMS43 MTc4ODcxOTY5Mjg0NzI4MCwgMzMyLjg1MjcxMjY3MTQ0NjExMzI5LCAzMzMuOTg4MjA0ODA3MDk5 OTE4OTgsCisJMzM1LjEyNDM2MTgzMDg4Mzk3MDAxLCAzMzYuMjYxMTgxOTc5MTk4NDU0NDMsIDMz Ny4zOTg2NjM0OTc3NzQyOTM3NywKKwkzMzguNTM2ODA0NjQxNTk5NTg3NzQsIDMzOS42NzU2MDM2 NzQ4NDY1NzAzNiwgMzQwLjgxNTA1ODg3MDc5ODk2NDExLAorCTM0MS45NTUxNjg1MTE3ODEwOTYx OSwgMzQzLjA5NTkzMDg4OTA4NjI3NTc4LCAzNDQuMjM3MzQ0MzAyOTA3Mjc0NjAsCisJMzQ1LjM3 OTQwNzA2MjI2Njg2NDE2LCAzNDYuNTIyMTE3NDg0OTQ5MDM1MzIsIDM0Ny42NjU0NzM4OTc0MzEx ODQwMSwKKwkzNDguODA5NDc0NjM0ODE3MjA2NjEsIDM0OS45NTQxMTgwNDA3NzAyNTQwOCwgMzUx LjA5OTQwMjQ2NzQ0NzUzMjY3LAorCTM1Mi4yNDUzMjYyNzU0MzUwNDc1OSwgMzUzLjM5MTg4Nzgz MzY4MjYzMTAzLCAzNTQuNTM5MDg1NTE5NDQwNzg5MDgsCisJMzU1LjY4NjkxNzcxODE5NjkyMzQ5 LCAzNTYuODM1MzgyODIzNjEzMDMxMTgsIDM1Ny45ODQ0NzkyMzc0NjM4NTg2OCwKKwkzNTkuMTM0 MjA1MzY5NTc1Mzk3NTMKK307CisKK1RFU1RfQkVHSU4odGVzdF9sbl9nYW1tYV9taXNjKSB7CisJ dW5zaWduZWQgaTsKKworCWZvciAoaSA9IDE7IGkgPCBzaXplb2YobG5fZ2FtbWFfbWlzY19leHBl Y3RlZCkvc2l6ZW9mKGRvdWJsZSk7IGkrKykgeworCQlkb3VibGUgeCA9IChkb3VibGUpaSAqIDAu MjU7CisJCWV4cGVjdF90cnVlKGRvdWJsZV9lcV9yZWwobG5fZ2FtbWEoeCksCisJCSAgICBsbl9n YW1tYV9taXNjX2V4cGVjdGVkW2ldLCBNQVhfUkVMX0VSUiwgTUFYX0FCU19FUlIpLAorCQkgICAg IkluY29ycmVjdCBsbl9nYW1tYSByZXN1bHQgZm9yIGk9JXUiLCBpKTsKKwl9Cit9CitURVNUX0VO RAorCisvKiBFeHBlY3RlZCBwdF9ub3JtKFswLjAxLi4wLjk5XSBpbmNyZW1lbnQ9MC4wMSkuICov CitzdGF0aWMgY29uc3QgZG91YmxlIHB0X25vcm1fZXhwZWN0ZWRbXSA9IHsKKwktSU5GSU5JVFks CisJLTIuMzI2MzQ3ODc0MDQwODQwNzYsIC0yLjA1Mzc0ODkxMDYzMTgyMjUyLCAtMS44ODA3OTM2 MDgxNTEyNTA4NSwKKwktMS43NTA2ODYwNzEyNTIxNjk0NiwgLTEuNjQ0ODUzNjI2OTUxNDcyNjQs IC0xLjU1NDc3MzU5NDU5Njg1MzA1LAorCS0xLjQ3NTc5MTAyODE3OTE3MDYzLCAtMS40MDUwNzE1 NjAzMDk2MzIyMSwgLTEuMzQwNzU1MDMzNjkwMjE2NTQsCisJLTEuMjgxNTUxNTY1NTQ0NjAwODEs IC0xLjIyNjUyODEyMDAzNjYxMDQ5LCAtMS4xNzQ5ODY3OTIwNjYwODk5MSwKKwktMS4xMjYzOTEx MjkwMzg4MDA0NSwgLTEuMDgwMzE5MzQwODE0OTU2MDYsIC0xLjAzNjQzMzM4OTQ5Mzc4OTM4LAor CS0wLjk5NDQ1Nzg4MzIwOTc1MjgxLCAtMC45NTQxNjUyNTMxNDYxOTQxNiwgLTAuOTE1MzY1MDg3 ODQyODEzOTAsCisJLTAuODc3ODk2Mjk1MDUxMjI4NDYsIC0wLjg0MTYyMTIzMzU3MjkxNDE4LCAt MC44MDY0MjEyNDcwMTgyNDAyNSwKKwktMC43NzIxOTMyMTQxODg2ODQ5MiwgLTAuNzM4ODQ2ODQ5 MTg1MjEzNzEsIC0wLjcwNjMwMjU2Mjg0MDA4NzUyLAorCS0wLjY3NDQ4OTc1MDE5NjA4MTcxLCAt MC42NDMzNDU0MDUzOTI5MTY4NSwgLTAuNjEyODEyOTkxMDE2NjI3MDEsCisJLTAuNTgyODQxNTA3 MjcxMjE2MjAsIC0wLjU1MzM4NDcxOTU1NTY3MjgxLCAtMC41MjQ0MDA1MTI3MDgwNDA2NywKKwkt MC40OTU4NTAzNDczNDc0NTMyMCwgLTAuNDY3Njk4Nzk5MTE0NTA4MTIsIC0wLjQzOTkxMzE2NTY3 MzIzMzgwLAorCS0wLjQxMjQ2MzEyOTQ0MTQwNDYyLCAtMC4zODUzMjA0NjY0MDc1Njc1MSwgLTAu MzU4NDU4NzkzMjUxMTkzNzMsCisJLTAuMzMxODUzMzQ2NDM2ODE2NTIsIC0wLjMwNTQ4MDc4ODA5 OTM5NzM4LCAtMC4yNzkzMTkwMzQ0NDc0NTQwNCwKKwktMC4yNTMzNDcxMDMxMzU3OTk3OCwgLTAu MjI3NTQ0OTc2NjQxMTQ5MzEsIC0wLjIwMTg5MzQ3OTE0MTg1MDc3LAorCS0wLjE3NjM3NDE2NDc4 MDg2MTM1LCAtMC4xNTA5NjkyMTU0OTY3NzcyNSwgLTAuMTI1NjYxMzQ2ODU1MDczOTksCisJLTAu MTAwNDMzNzIwNTExNDY5NzUsIC0wLjA3NTI2OTg2MjA5OTgyOTc2LCAtMC4wNTAxNTM1ODM0NjQ3 MzM1MiwKKwktMC4wMjUwNjg5MDgyNTg3MTEwNiwgMC4wMDAwMDAwMDAwMDAwMDAwMCwgMC4wMjUw Njg5MDgyNTg3MTEwNiwKKwkwLjA1MDE1MzU4MzQ2NDczMzY2LCAwLjA3NTI2OTg2MjA5OTgyOTkw LCAwLjEwMDQzMzcyMDUxMTQ2OTkwLAorCTAuMTI1NjYxMzQ2ODU1MDc0MTMsIDAuMTUwOTY5MjE1 NDk2Nzc3MzksIDAuMTc2Mzc0MTY0NzgwODYxNDYsCisJMC4yMDE4OTM0NzkxNDE4NTEwNSwgMC4y Mjc1NDQ5NzY2NDExNDkzMSwgMC4yNTMzNDcxMDMxMzU3OTk3OCwKKwkwLjI3OTMxOTAzNDQ0NzQ1 NDA0LCAwLjMwNTQ4MDc4ODA5OTM5NzM4LCAwLjMzMTg1MzM0NjQzNjgxNjUyLAorCTAuMzU4NDU4 NzkzMjUxMTkzNzMsIDAuMzg1MzIwNDY2NDA3NTY3NjIsIDAuNDEyNDYzMTI5NDQxNDA0ODQsCisJ MC40Mzk5MTMxNjU2NzMyMzM5MSwgMC40Njc2OTg3OTkxMTQ1MDgzNSwgMC40OTU4NTAzNDczNDc0 NTM0OCwKKwkwLjUyNDQwMDUxMjcwODA0MTExLCAwLjU1MzM4NDcxOTU1NTY3MzAzLCAwLjU4Mjg0 MTUwNzI3MTIxNjIwLAorCTAuNjEyODEyOTkxMDE2NjI3MDEsIDAuNjQzMzQ1NDA1MzkyOTE2ODUs IDAuNjc0NDg5NzUwMTk2MDgxNzEsCisJMC43MDYzMDI1NjI4NDAwODc1MiwgMC43Mzg4NDY4NDkx ODUyMTM3MSwgMC43NzIxOTMyMTQxODg2ODQ5MiwKKwkwLjgwNjQyMTI0NzAxODI0MDM2LCAwLjg0 MTYyMTIzMzU3MjkxNDQxLCAwLjg3Nzg5NjI5NTA1MTIyODc5LAorCTAuOTE1MzY1MDg3ODQyODE0 MjMsIDAuOTU0MTY1MjUzMTQ2MTk0NjAsIDAuOTk0NDU3ODgzMjA5NzUzNDgsCisJMS4wMzY0MzMz ODk0OTM3ODkzOCwgMS4wODAzMTkzNDA4MTQ5NTYwNiwgMS4xMjYzOTExMjkwMzg4MDA0NSwKKwkx LjE3NDk4Njc5MjA2NjA4OTkxLCAxLjIyNjUyODEyMDAzNjYxMDQ5LCAxLjI4MTU1MTU2NTU0NDYw MDgxLAorCTEuMzQwNzU1MDMzNjkwMjE2NTQsIDEuNDA1MDcxNTYwMzA5NjMyNjUsIDEuNDc1Nzkx MDI4MTc5MTcwODUsCisJMS41NTQ3NzM1OTQ1OTY4NTM5NCwgMS42NDQ4NTM2MjY5NTE0NzMwOCwg MS43NTA2ODYwNzEyNTIxNzEwMiwKKwkxLjg4MDc5MzYwODE1MTI1MDQxLCAyLjA1Mzc0ODkxMDYz MTgyMjA4LCAyLjMyNjM0Nzg3NDA0MDg0MDc2Cit9OworCitURVNUX0JFR0lOKHRlc3RfcHRfbm9y bSkgeworCXVuc2lnbmVkIGk7CisKKwlmb3IgKGkgPSAxOyBpIDwgc2l6ZW9mKHB0X25vcm1fZXhw ZWN0ZWQpL3NpemVvZihkb3VibGUpOyBpKyspIHsKKwkJZG91YmxlIHAgPSAoZG91YmxlKWkgKiAw LjAxOworCQlleHBlY3RfdHJ1ZShkb3VibGVfZXFfcmVsKHB0X25vcm0ocCksIHB0X25vcm1fZXhw ZWN0ZWRbaV0sCisJCSAgICBNQVhfUkVMX0VSUiwgTUFYX0FCU19FUlIpLAorCQkgICAgIkluY29y cmVjdCBwdF9ub3JtIHJlc3VsdCBmb3IgaT0ldSIsIGkpOworCX0KK30KK1RFU1RfRU5ECisKKy8q CisgKiBFeHBlY3RlZCBwdF9jaGkyKHA9WzAuMDEuLjAuOTldIGluY3JlbWVudD0wLjA3LAorICog ICAgICAgICAgICAgICAgICBkZj17MC4xLCAxLjEsIDEwLjEsIDEwMC4xLCAxMDAwLjF9KS4KKyAq Lworc3RhdGljIGNvbnN0IGRvdWJsZSBwdF9jaGkyX2RmW10gPSB7MC4xLCAxLjEsIDEwLjEsIDEw MC4xLCAxMDAwLjF9Oworc3RhdGljIGNvbnN0IGRvdWJsZSBwdF9jaGkyX2V4cGVjdGVkW10gPSB7 CisJMS4xNjg5MjY0MTE0NTczMjBlLTQwLCAxLjM0NzY4MDM5NzA3MjAzNGUtMjIsIDMuODg2OTgw NDE2NjY2MjYwZS0xNywKKwk4LjI0NTk1MTcyNDM1NjU2NGUtMTQsIDIuMDY4OTM2MzQ3NDk3NjA0 ZS0xMSwgMS41NjI1NjE3NDMzMDkyMzNlLTA5LAorCTUuNDU5NTQzMDQzNDI2NTY0ZS0wOCwgMS4x MTQ3NzU2ODgxNDkyNTJlLTA2LCAxLjUzMjEwMTIwMjM2NDM3MWUtMDUsCisJMS41NTM4ODQ2ODM3 MjY1ODVlLTA0LCAxLjIzOTM5Njk1NDkxNTkzOWUtMDMsIDguMTUzODcyMzIwMjU1NzIxZS0wMywK Kwk0LjYzMTE4MzczOTY0NzUyM2UtMDIsIDIuNDczMTg3MzExNzAxMzI3ZS0wMSwgMi4xNzUyNTQ4 MDAxODM2MTdlKzAwLAorCisJMC4wMDAzNzI5ODg3ODg4ODc2Mzc5LCAwLjAxNjQ0MDkyMzgyMjg5 Mjk1MTMsIDAuMDUyMTUyMzAxNTE5MDY1MDExMywKKwkwLjEwNjQ3MDEzNzIyNzEyMTY2MTIsIDAu MTgwMDkxMzczNTc5MzA4MjExNSwgMC4yNzQ4NzA0MjgxMTk1NjI2OTMxLAorCTAuMzkzOTI0NjI4 Mjc4Nzk4NjQ5NywgMC41NDIwNzI3NTUyMjYwODE3ODE2LCAwLjcyNjcyNjU4MjIyMjE5NzMyNTks CisJMC45NTk2NTU0Mjk2MDAwMjUzNjcwLCAxLjI2MDc0NDAzNzYzODYxNjUzMjYsIDEuNjY3MTE4 NTA4NDU0MTYwNDMwNCwKKwkyLjI2MDQ4Mjg5ODQ3Mzg3MDUxNjcsIDMuMjg2ODYxMzM0MjE0ODYw NzA4MiwgNi45Mjk4NTc0OTIxNjkyMTM5ODM5LAorCisJMi42MDY2NzM1NDg2MzI1MDgsIDQuNjAy OTEzNzI1Mjk0ODc3LCA1LjY0NjE1MjgxMzkyNDIxMiwKKwk2LjQ4ODk3MTMxNTU0MDg2OSwgNy4y NDk4MjMyNzU4MTYyODUsIDcuOTc3MzE0MjMxNDEwODQxLAorCTguNzAwMzU0OTM5OTQ0MDQ3LCA5 LjQ0MTcyODAyNDIyNTg5MiwgMTAuMjI0MzM4MzIxMzc0MTI3LAorCTExLjA3NjQzNTM2ODgwMTA2 MSwgMTIuMDM5MzIwOTM3MDM4Mzg2LCAxMy4xODM4Nzg3NTI2OTcxNjcsCisJMTQuNjU3NzkxOTM1 MDg0NTc1LCAxNi44ODU3MjgyMTYzMzkzNzMsIDIzLjM2MTk5MTY4MDAzMTgxNywKKworCTcwLjE0 ODQ0MDg3MzkyMTUyLCA4MC45MjM3OTQ5ODg0OTM1NSwgODUuNTMzMjU0MjAwODU4OTEsCisJODgu OTQ0MzMxMjA3MTUzNDcsIDkxLjgzNzMyNzEyODU3MDE3LCA5NC40NjcxOTk0MzYwNjMwMSwKKwk5 Ni45Njg5NjQ3OTk5NDYzNSwgOTkuNDM0MTI4NDM1MTAzNjMsIDEwMS45NDA3NDcxOTgyOTczMywK KwkxMDQuNTcyMjg2NDQzMDcyNDcsIDEwNy40MzkwMDA5MzQ0ODczNCwgMTEwLjcxODQ0NjczNDE3 Mjg3LAorCTExNC43NjYxNjgxOTg3MTMyNSwgMTIwLjU3NDIyNTA1OTU5NTYzLCAxMzUuOTIzMTg4 MTg3NTc1NTYsCisKKwk4OTkuMDA3MjQ0Nzg0OTY0OSwgOTM3LjkyNzEyNzg4NTgyMjAsIDk1My44 MTE3MTg5NTYwMjA3LAorCTk2NS4zMDc5MzcxNTAxMTU0LCA5NzQuODk3NDA2MTIwNzk1NCwgOTgz LjQ5MzYyMzUxODIzNDcsCisJOTkxLjU2OTExNzA1MTg5NDYsIDk5OS40MzM0MTIzOTU0NjkwLCAx MDA3LjMzOTE4MjY4NTY1NTMsCisJMTAxNS41NDQ1MTU0OTk5OTUxLCAxMDI0LjM3NzcwNzU2MTk1 NjksIDEwMzQuMzUzODc4OTgzNjIyMywKKwkxMDQ2LjQ4NzI1NjE4Njk1NzcsIDEwNjMuNTcxNzQ2 MTk5OTY1NCwgMTEwNy4wNzQxOTY2MDUzODU5Cit9OworCitURVNUX0JFR0lOKHRlc3RfcHRfY2hp MikgeworCXVuc2lnbmVkIGksIGo7CisJdW5zaWduZWQgZSA9IDA7CisKKwlmb3IgKGkgPSAwOyBp IDwgc2l6ZW9mKHB0X2NoaTJfZGYpL3NpemVvZihkb3VibGUpOyBpKyspIHsKKwkJZG91YmxlIGRm ID0gcHRfY2hpMl9kZltpXTsKKwkJZG91YmxlIGxuX2dhbW1hX2RmID0gbG5fZ2FtbWEoZGYgKiAw LjUpOworCQlmb3IgKGogPSAxOyBqIDwgMTAwOyBqICs9IDcpIHsKKwkJCWRvdWJsZSBwID0gKGRv dWJsZSlqICogMC4wMTsKKwkJCWV4cGVjdF90cnVlKGRvdWJsZV9lcV9yZWwocHRfY2hpMihwLCBk ZiwgbG5fZ2FtbWFfZGYpLAorCQkJICAgIHB0X2NoaTJfZXhwZWN0ZWRbZV0sIE1BWF9SRUxfRVJS LCBNQVhfQUJTX0VSUiksCisJCQkgICAgIkluY29ycmVjdCBwdF9jaGkyIHJlc3VsdCBmb3IgaT0l dSwgaj0ldSIsIGksIGopOworCQkJZSsrOworCQl9CisJfQorfQorVEVTVF9FTkQKKworLyoKKyAq IEV4cGVjdGVkIHB0X2dhbW1hKHA9WzAuMS4uMC45OV0gaW5jcmVtZW50PTAuMDcsCisgKiAgICAg ICAgICAgICAgICAgICBzaGFwZT1bMC41Li4zLjBdIGluY3JlbWVudD0wLjUpLgorICovCitzdGF0 aWMgY29uc3QgZG91YmxlIHB0X2dhbW1hX3NoYXBlW10gPSB7MC41LCAxLjAsIDEuNSwgMi4wLCAy LjUsIDMuMH07CitzdGF0aWMgY29uc3QgZG91YmxlIHB0X2dhbW1hX2V4cGVjdGVkW10gPSB7CisJ Ny44NTQzOTI4OTU0ODUxMDNlLTA1LCA1LjA0MzQ2NjEwNzg4ODAxNmUtMDMsIDEuNzg4Mjg4OTU3 Nzk0ODgzZS0wMiwKKwkzLjkwMDk1NjE1MDIzMjkwNmUtMDIsIDYuOTEzODQ3NTYwNjM4MDM0ZS0w MiwgMS4wOTM3MTA4MzM0NjU3NjZlLTAxLAorCTEuNjEzNDEyNTIzODI1ODE3ZS0wMSwgMi4yNzQ2 ODIxMTU1OTc4NjRlLTAxLCAzLjExNDExNzMyMzEyNzA4M2UtMDEsCisJNC4xODk0NjYyMjAyMDc0 MTdlLTAxLCA1LjU5ODEwNjc4OTA1OTI0NmUtMDEsIDcuNTIxODU2MTQ2MjAyNzA2ZS0wMSwKKwkx LjAzNjEyNTQyNzkxMTExOWUrMDAsIDEuNTMyNDUwODYwMDM4MTgwZSswMCwgMy4zMTc0NDgzMDA1 MTA2MDZlKzAwLAorCisJMC4wMTAwNTAzMzU4NTM1MDE0NCwgMC4wODMzODE2MDg5MzkwNTEwNywg MC4xNjI1MTg5Mjk0OTc3NzQ5NywKKwkwLjI0ODQ2MTM1OTI5ODQ5OTY2LCAwLjM0MjQ5MDMwODk0 Njc3NTk2LCAwLjQ0NjI4NzEwMjYyODQxOTQ3LAorCTAuNTYyMTE4OTE4MTUzNTQxNDIsIDAuNjkz MTQ3MTgwNTU5OTQ1MjksIDAuODQzOTcwMDcwMjk0NTI5MjAsCisJMS4wMjE2NTEyNDc1MzE5ODE2 NywgMS4yMzc4NzQzNTYwMDE2MTc2NiwgMS41MTQxMjc3MzI2Mjk3NzU3NCwKKwkxLjg5NzExOTk4 NDg4NTg4MTk2LCAyLjUyNTcyODY0NDMwODI1NzgzLCA0LjYwNTE3MDE4NTk4ODA5MDkxLAorCisJ MC4wNTc0MTU5MDA5NDk1NTg1MywgMC4yNDc0NzM3ODA4NDg2MDc0NCwgMC4zOTg4ODU3MjIxMjIz NjA4NCwKKwkwLjU0Mzk0MTM5OTk3NDQ0OTAxLCAwLjY5MDQ4ODEyNTEzOTE1MTU5LCAwLjg0MzEx Mzg5ODYxMjk2MTA0LAorCTEuMDA1ODA2MjIyMjE0Nzk4OTgsIDEuMTgyOTg2OTQyMTg3NjY5MzEs IDEuMzgwMzgwOTYzMDU4NjEyMTMsCisJMS42MDYyNzczNjM4MzAyNzQ1MywgMS44NzM5Njk3MDUy MjMzNzk0NywgMi4yMDc0OTIyMDQwODA4MTA3MCwKKwkyLjY1ODUyMzkxODY1ODU0OTQyLCAzLjM3 OTM0NjMwOTg0ODQyMjQ0LCA1LjY3MjQzMzM2NTA3MjE4NDc2LAorCisJMC4xNDg1NTQ3NDAyNTMy NjU5LCAwLjQ2NTc0NTgwMTE2NDAzOTEsIDAuNjgzMjM4NjEzMDcwOTQwNiwKKwkwLjg3OTQyOTc4 MzQ2NzIxMDAsIDEuMDcwMDc1Mjg1MjQ3NDUyNCwgMS4yNjI5NjE0MjE3MzUwNzQ0LAorCTEuNDYz ODQwMDQ0ODU4MDc3OSwgMS42NzgzNDY5OTAwMTY2NjEwLCAxLjkxMzIzMzgwOTA2MDY5NDAsCisJ Mi4xNzc4NTg5MjI4NjE4Nzc3LCAyLjQ4Njg4MjM5NzAwMTA5OTEsIDIuODY2NDY5NTY2NjI2NDE5 NSwKKwkzLjM3MjQ0MTU0MzYwNjIxMTQsIDQuMTY4MjY1ODUxMjc1ODA3MSwgNi42MzgzNTIwNjc5 OTM4MTA4LAorCisJMC4yNzcxNDkwMzgzNjQxMzg1LCAwLjcxOTUwMDEyNzk2NDM3MjcsIDAuOTk2 OTA4MTczMjI2NTI0MywKKwkxLjIzODM0OTc4ODA2MDgwNjEsIDEuNDY3NTIwNjU5NzI2OTkyNywg MS42OTUzMDY0MjUxODE2NTUyLAorCTEuOTI5MTI0MzQzNTYwNjgwOSwgMi4xNzU3MzAwOTU1NDc3 NjQxLCAyLjQ0MjgwMzIxMzEyMTYzOTEsCisJMi43NDA2NTM0NTY5MjMwNjE2LCAzLjA4NTE0NDUw Mzk2NjU1MTMsIDMuNTA0MzEwMTEyMjAzMzM2NywKKwk0LjA1NzU5OTcwNjUyNjQ2MzcsIDQuOTE4 Mjk1NjQyNDY3NTI4NiwgNy41NDMxMzYyMzQ2OTQ0OTM3LAorCisJMC40MzYwNDUxNjUwNzgyOTMy LCAwLjk5ODM2MDA5MDI0ODYyNjcsIDEuMzMwNjM2NTg4MDczNDUyOCwKKwkxLjYxMjk3NTA4MzQ3 NTM4MDIsIDEuODc2NzI0MTYwNjk5NDI5NCwgMi4xMzU3MDMyNDM2MDk3NjYwLAorCTIuMzk4ODg1 MzMzNjg2NTU2NSwgMi42NzQwNjAzMTM3MjM1NjAzLCAyLjk2OTc1NjE3Mzc1MTc5NTksCisJMy4y OTcxNDU3NzEzODgzMjY1LCAzLjY3MzE3OTU4OTg1MDQ2NjAsIDQuMTI3NTc1MTYxNzc3MDYzMSwK Kwk0LjcyMzA1MTU2MzM5NDY2NzcsIDUuNjQxNzQ3Nzg2NTMwNjAyMCwgOC40MDU5NDY5MTQ4ODU0 NjM1Cit9OworCitURVNUX0JFR0lOKHRlc3RfcHRfZ2FtbWFfc2hhcGUpIHsKKwl1bnNpZ25lZCBp LCBqOworCXVuc2lnbmVkIGUgPSAwOworCisJZm9yIChpID0gMDsgaSA8IHNpemVvZihwdF9nYW1t YV9zaGFwZSkvc2l6ZW9mKGRvdWJsZSk7IGkrKykgeworCQlkb3VibGUgc2hhcGUgPSBwdF9nYW1t YV9zaGFwZVtpXTsKKwkJZG91YmxlIGxuX2dhbW1hX3NoYXBlID0gbG5fZ2FtbWEoc2hhcGUpOwor CQlmb3IgKGogPSAxOyBqIDwgMTAwOyBqICs9IDcpIHsKKwkJCWRvdWJsZSBwID0gKGRvdWJsZSlq ICogMC4wMTsKKwkJCWV4cGVjdF90cnVlKGRvdWJsZV9lcV9yZWwocHRfZ2FtbWEocCwgc2hhcGUs IDEuMCwKKwkJCSAgICBsbl9nYW1tYV9zaGFwZSksIHB0X2dhbW1hX2V4cGVjdGVkW2VdLCBNQVhf UkVMX0VSUiwKKwkJCSAgICBNQVhfQUJTX0VSUiksCisJCQkgICAgIkluY29ycmVjdCBwdF9nYW1t YSByZXN1bHQgZm9yIGk9JXUsIGo9JXUiLCBpLCBqKTsKKwkJCWUrKzsKKwkJfQorCX0KK30KK1RF U1RfRU5ECisKK1RFU1RfQkVHSU4odGVzdF9wdF9nYW1tYV9zY2FsZSkgeworCWRvdWJsZSBzaGFw ZSA9IDEuMDsKKwlkb3VibGUgbG5fZ2FtbWFfc2hhcGUgPSBsbl9nYW1tYShzaGFwZSk7CisKKwll eHBlY3RfdHJ1ZShkb3VibGVfZXFfcmVsKAorCSAgICBwdF9nYW1tYSgwLjUsIHNoYXBlLCAxLjAs IGxuX2dhbW1hX3NoYXBlKSAqIDEwLjAsCisJICAgIHB0X2dhbW1hKDAuNSwgc2hhcGUsIDEwLjAs IGxuX2dhbW1hX3NoYXBlKSwgTUFYX1JFTF9FUlIsCisJICAgIE1BWF9BQlNfRVJSKSwKKwkgICAg IlNjYWxlIHNob3VsZCBiZSB0cml2aWFsbHkgZXF1aXZhbGVudCB0byBleHRlcm5hbCBtdWx0aXBs aWNhdGlvbiIpOworfQorVEVTVF9FTkQKKworaW50CittYWluKHZvaWQpIHsKKwlyZXR1cm4gdGVz dCgKKwkgICAgdGVzdF9sbl9nYW1tYV9mYWN0b3JpYWwsCisJICAgIHRlc3RfbG5fZ2FtbWFfbWlz YywKKwkgICAgdGVzdF9wdF9ub3JtLAorCSAgICB0ZXN0X3B0X2NoaTIsCisJICAgIHRlc3RfcHRf Z2FtbWFfc2hhcGUsCisJICAgIHRlc3RfcHRfZ2FtbWFfc2NhbGUpOworfQoKZGlmZiAtLWdpdCBh LzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9tcHNjX3F1 ZXVlLmMgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQv bXBzY19xdWV1ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5NWVkZjgK LS0tIC9kZXYvbnVsbAorKysgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMu MC90ZXN0L3VuaXQvbXBzY19xdWV1ZS5jCkBAIC0wLDAgKzEsMzA0IEBACisjaW5jbHVkZSAidGVz dC9qZW1hbGxvY190ZXN0LmgiCisKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9tcHNjX3F1 ZXVlLmgiCisKK3R5cGVkZWYgc3RydWN0IGVsZW1fcyBlbGVtX3Q7Cit0eXBlZGVmIHFsX2hlYWQo ZWxlbV90KSBlbGVtX2xpc3RfdDsKK3R5cGVkZWYgbXBzY19xdWV1ZShlbGVtX3QpIGVsZW1fbXBz Y19xdWV1ZV90Oworc3RydWN0IGVsZW1fcyB7CisJaW50IHRocmVhZDsKKwlpbnQgaWR4OworCXFs X2VsbShlbGVtX3QpIGxpbms7Cit9OworCisvKiBJbmNsdWRlIGJvdGggcHJvdG8gYW5kIGdlbiB0 byBtYWtlIHN1cmUgdGhleSBtYXRjaCB1cC4gKi8KK21wc2NfcXVldWVfcHJvdG8oc3RhdGljLCBl bGVtX21wc2NfcXVldWVfLCBlbGVtX21wc2NfcXVldWVfdCwgZWxlbV90LAorICAgIGVsZW1fbGlz dF90KTsKK21wc2NfcXVldWVfZ2VuKHN0YXRpYywgZWxlbV9tcHNjX3F1ZXVlXywgZWxlbV9tcHNj X3F1ZXVlX3QsIGVsZW1fdCwKKyAgICBlbGVtX2xpc3RfdCwgbGluayk7CisKK3N0YXRpYyB2b2lk Citpbml0X2VsZW1zX3NpbXBsZShlbGVtX3QgKmVsZW1zLCBpbnQgbmVsZW1zLCBpbnQgdGhyZWFk KSB7CisJZm9yIChpbnQgaSA9IDA7IGkgPCBuZWxlbXM7IGkrKykgeworCQllbGVtc1tpXS50aHJl YWQgPSB0aHJlYWQ7CisJCWVsZW1zW2ldLmlkeCA9IGk7CisJCXFsX2VsbV9uZXcoJmVsZW1zW2ld LCBsaW5rKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitjaGVja19lbGVtc19zaW1wbGUoZWxlbV9s aXN0X3QgKmxpc3QsIGludCBuZWxlbXMsIGludCB0aHJlYWQpIHsKKwllbGVtX3QgKmVsZW07CisJ aW50IG5leHRfaWR4ID0gMDsKKwlxbF9mb3JlYWNoKGVsZW0sIGxpc3QsIGxpbmspIHsKKwkJZXhw ZWN0X2RfbHQobmV4dF9pZHgsIG5lbGVtcywgIlRvbyBtYW55IGxpc3QgaXRlbXMiKTsKKwkJZXhw ZWN0X2RfZXEodGhyZWFkLCBlbGVtLT50aHJlYWQsICIiKTsKKwkJZXhwZWN0X2RfZXEobmV4dF9p ZHgsIGVsZW0tPmlkeCwgIkxpc3Qgb3V0IG9mIG9yZGVyIik7CisJCW5leHRfaWR4Kys7CisJfQor fQorCitURVNUX0JFR0lOKHRlc3Rfc2ltcGxlKSB7CisJZW51bSB7TkVMRU1TID0gMTB9OworCWVs ZW1fdCBlbGVtc1tORUxFTVNdOworCWVsZW1fbGlzdF90IGxpc3Q7CisJZWxlbV9tcHNjX3F1ZXVl X3QgcXVldWU7CisKKwkvKiBQb3AgZW1wdHkgcXVldWUgb250byBlbXB0eSBsaXN0IC0+IGVtcHR5 IGxpc3QgKi8KKwlxbF9uZXcoJmxpc3QpOworCWVsZW1fbXBzY19xdWV1ZV9uZXcoJnF1ZXVlKTsK KwllbGVtX21wc2NfcXVldWVfcG9wX2JhdGNoKCZxdWV1ZSwgJmxpc3QpOworCWV4cGVjdF90cnVl KHFsX2VtcHR5KCZsaXN0KSwgIiIpOworCisJLyogUG9wIGVtcHR5IHF1ZXVlIG9udG8gbm9uZW1w dHkgbGlzdCAtPiBsaXN0IHVuY2hhbmdlZCAqLworCXFsX25ldygmbGlzdCk7CisJZWxlbV9tcHNj X3F1ZXVlX25ldygmcXVldWUpOworCWluaXRfZWxlbXNfc2ltcGxlKGVsZW1zLCBORUxFTVMsIDAp OworCWZvciAoaW50IGkgPSAwOyBpIDwgTkVMRU1TOyBpKyspIHsKKwkJcWxfdGFpbF9pbnNlcnQo Jmxpc3QsICZlbGVtc1tpXSwgbGluayk7CisJfQorCWVsZW1fbXBzY19xdWV1ZV9wb3BfYmF0Y2go JnF1ZXVlLCAmbGlzdCk7CisJY2hlY2tfZWxlbXNfc2ltcGxlKCZsaXN0LCBORUxFTVMsIDApOwor CisJLyogUG9wIG5vbmVtcHR5IHF1ZXVlIG9udG8gZW1wdHkgbGlzdCAtPiBsaXN0IHRha2VzIHF1 ZXVlIGNvbnRlbnRzICovCisJcWxfbmV3KCZsaXN0KTsKKwllbGVtX21wc2NfcXVldWVfbmV3KCZx dWV1ZSk7CisJaW5pdF9lbGVtc19zaW1wbGUoZWxlbXMsIE5FTEVNUywgMCk7CisJZm9yIChpbnQg aSA9IDA7IGkgPCBORUxFTVM7IGkrKykgeworCQllbGVtX21wc2NfcXVldWVfcHVzaCgmcXVldWUs ICZlbGVtc1tpXSk7CisJfQorCWVsZW1fbXBzY19xdWV1ZV9wb3BfYmF0Y2goJnF1ZXVlLCAmbGlz dCk7CisJY2hlY2tfZWxlbXNfc2ltcGxlKCZsaXN0LCBORUxFTVMsIDApOworCisJLyogUG9wIG5v bmVtcHR5IHF1ZXVlIG9udG8gbm9uZW1wdHkgbGlzdCAtPiBsaXN0IGdhaW5zIHF1ZXVlIGNvbnRl bnRzICovCisJcWxfbmV3KCZsaXN0KTsKKwllbGVtX21wc2NfcXVldWVfbmV3KCZxdWV1ZSk7CisJ aW5pdF9lbGVtc19zaW1wbGUoZWxlbXMsIE5FTEVNUywgMCk7CisJZm9yIChpbnQgaSA9IDA7IGkg PCBORUxFTVMgLyAyOyBpKyspIHsKKwkJcWxfdGFpbF9pbnNlcnQoJmxpc3QsICZlbGVtc1tpXSwg bGluayk7CisJfQorCWZvciAoaW50IGkgPSBORUxFTVMgLyAyOyBpIDwgTkVMRU1TOyBpKyspIHsK KwkJZWxlbV9tcHNjX3F1ZXVlX3B1c2goJnF1ZXVlLCAmZWxlbXNbaV0pOworCX0KKwllbGVtX21w c2NfcXVldWVfcG9wX2JhdGNoKCZxdWV1ZSwgJmxpc3QpOworCWNoZWNrX2VsZW1zX3NpbXBsZSgm bGlzdCwgTkVMRU1TLCAwKTsKKworfQorVEVTVF9FTkQKKworVEVTVF9CRUdJTih0ZXN0X3B1c2hf c2luZ2xlX29yX2JhdGNoKSB7CisJZW51bSB7CisJCUJBVENIX01BWCA9IDEwLAorCQkvKgorCQkg KiBXZSdsbCBwdXNoIGkgaXRlbXMgb25lLWF0LWEtdGltZSwgdGhlbiBpIGl0ZW1zIGFzIGEgYmF0 Y2gsCisJCSAqIHRoZW4gaSBpdGVtcyBhcyBhIGJhdGNoIGFnYWluLCBhcyBpIHJhbmdlcyBmcm9t IDEgdG8KKwkJICogQkFUQ0hfTUFYLiAgU28gd2UgbmVlZCAzIHRpbWVzIHRoZSBzdW0gb2YgdGhl IG51bWJlcnMgZnJvbSAxCisJCSAqIHRvIEJBVENIX01BWCBlbGVtZW50cyB0b3RhbC4KKwkJICov CisJCU5FTEVNUyA9IDMgKiBCQVRDSF9NQVggKiAoQkFUQ0hfTUFYIC0gMSkgLyAyCisJfTsKKwll bGVtX3QgZWxlbXNbTkVMRU1TXTsKKwlpbml0X2VsZW1zX3NpbXBsZShlbGVtcywgTkVMRU1TLCAw KTsKKwllbGVtX2xpc3RfdCBsaXN0OworCXFsX25ldygmbGlzdCk7CisJZWxlbV9tcHNjX3F1ZXVl X3QgcXVldWU7CisJZWxlbV9tcHNjX3F1ZXVlX25ldygmcXVldWUpOworCWludCBuZXh0X2lkeCA9 IDA7CisJZm9yIChpbnQgaSA9IDE7IGkgPCAxMDsgaSsrKSB7CisJCS8qIFB1c2ggaSBpdGVtcyAx IGF0IGEgdGltZS4gKi8KKwkJZm9yIChpbnQgaiA9IDA7IGogPCBpOyBqKyspIHsKKwkJCWVsZW1f bXBzY19xdWV1ZV9wdXNoKCZxdWV1ZSwgJmVsZW1zW25leHRfaWR4XSk7CisJCQluZXh0X2lkeCsr OworCQl9CisJCS8qIFB1c2ggaSBpdGVtcyBpbiBiYXRjaC4gKi8KKwkJZm9yIChpbnQgaiA9IDA7 IGogPCBpOyBqKyspIHsKKwkJCXFsX3RhaWxfaW5zZXJ0KCZsaXN0LCAmZWxlbXNbbmV4dF9pZHhd LCBsaW5rKTsKKwkJCW5leHRfaWR4Kys7CisJCX0KKwkJZWxlbV9tcHNjX3F1ZXVlX3B1c2hfYmF0 Y2goJnF1ZXVlLCAmbGlzdCk7CisJCWV4cGVjdF90cnVlKHFsX2VtcHR5KCZsaXN0KSwgIkJhdGNo IHB1c2ggc2hvdWxkIGVtcHR5IHNvdXJjZSIpOworCQkvKgorCQkgKiBQdXNoIGkgaXRlbXMgaW4g YmF0Y2gsIGFnYWluLiAgVGhpcyB0ZXN0cyB0d28gYmF0Y2hlcworCQkgKiBwcm9jZWVkaW5nIG9u ZSBhZnRlciB0aGUgb3RoZXIuCisJCSAqLworCQlmb3IgKGludCBqID0gMDsgaiA8IGk7IGorKykg eworCQkJcWxfdGFpbF9pbnNlcnQoJmxpc3QsICZlbGVtc1tuZXh0X2lkeF0sIGxpbmspOworCQkJ bmV4dF9pZHgrKzsKKwkJfQorCQllbGVtX21wc2NfcXVldWVfcHVzaF9iYXRjaCgmcXVldWUsICZs aXN0KTsKKwkJZXhwZWN0X3RydWUocWxfZW1wdHkoJmxpc3QpLCAiQmF0Y2ggcHVzaCBzaG91bGQg ZW1wdHkgc291cmNlIik7CisJfQorCWV4cGVjdF9kX2VxKE5FTEVNUywgbmV4dF9pZHgsICJNaXNj b21wdXRlZCBudW1iZXIgb2YgZWxlbXMgdG8gcHVzaC4iKTsKKworCWV4cGVjdF90cnVlKHFsX2Vt cHR5KCZsaXN0KSwgIiIpOworCWVsZW1fbXBzY19xdWV1ZV9wb3BfYmF0Y2goJnF1ZXVlLCAmbGlz dCk7CisJY2hlY2tfZWxlbXNfc2ltcGxlKCZsaXN0LCBORUxFTVMsIDApOworfQorVEVTVF9FTkQK KworVEVTVF9CRUdJTih0ZXN0X211bHRpX29wKSB7CisJZW51bSB7TkVMRU1TID0gMjB9OworCWVs ZW1fdCBlbGVtc1tORUxFTVNdOworCWluaXRfZWxlbXNfc2ltcGxlKGVsZW1zLCBORUxFTVMsIDAp OworCWVsZW1fbGlzdF90IHB1c2hfbGlzdDsKKwlxbF9uZXcoJnB1c2hfbGlzdCk7CisJZWxlbV9s aXN0X3QgcmVzdWx0X2xpc3Q7CisJcWxfbmV3KCZyZXN1bHRfbGlzdCk7CisJZWxlbV9tcHNjX3F1 ZXVlX3QgcXVldWU7CisJZWxlbV9tcHNjX3F1ZXVlX25ldygmcXVldWUpOworCisJaW50IG5leHRf aWR4ID0gMDsKKwkvKiBQdXNoIGZpcnN0IHF1YXJ0ZXIgMS1hdC1hLXRpbWUuICovCisJZm9yIChp bnQgaSA9IDA7IGkgPCBORUxFTVMgLyA0OyBpKyspIHsKKwkJZWxlbV9tcHNjX3F1ZXVlX3B1c2go JnF1ZXVlLCAmZWxlbXNbbmV4dF9pZHhdKTsKKwkJbmV4dF9pZHgrKzsKKwl9CisJLyogUHVzaCBz ZWNvbmQgcXVhcnRlciBpbiBiYXRjaC4gKi8KKwlmb3IgKGludCBpID0gTkVMRU1TIC8gNDsgaSA8 IE5FTEVNUyAvIDI7IGkrKykgeworCQlxbF90YWlsX2luc2VydCgmcHVzaF9saXN0LCAmZWxlbXNb bmV4dF9pZHhdLCBsaW5rKTsKKwkJbmV4dF9pZHgrKzsKKwl9CisJZWxlbV9tcHNjX3F1ZXVlX3B1 c2hfYmF0Y2goJnF1ZXVlLCAmcHVzaF9saXN0KTsKKwkvKiBCYXRjaCBwb3AgYWxsIHB1c2hlZCBl bGVtZW50cy4gKi8KKwllbGVtX21wc2NfcXVldWVfcG9wX2JhdGNoKCZxdWV1ZSwgJnJlc3VsdF9s aXN0KTsKKwkvKiBQdXNoIHRoaXJkIHF1YXJ0ZXIgaW4gYmF0Y2guICovCisJZm9yIChpbnQgaSA9 IE5FTEVNUyAvIDI7IGkgPCAzICogTkVMRU1TIC8gNDsgaSsrKSB7CisJCXFsX3RhaWxfaW5zZXJ0 KCZwdXNoX2xpc3QsICZlbGVtc1tuZXh0X2lkeF0sIGxpbmspOworCQluZXh0X2lkeCsrOworCX0K KwllbGVtX21wc2NfcXVldWVfcHVzaF9iYXRjaCgmcXVldWUsICZwdXNoX2xpc3QpOworCS8qIFB1 c2ggbGFzdCBxdWFydGVyIG9uZS1hdC1hLXRpbWUuICovCisJZm9yIChpbnQgaSA9IDMgKiBORUxF TVMgLyA0OyBpIDwgTkVMRU1TOyBpKyspIHsKKwkJZWxlbV9tcHNjX3F1ZXVlX3B1c2goJnF1ZXVl LCAmZWxlbXNbbmV4dF9pZHhdKTsKKwkJbmV4dF9pZHgrKzsKKwl9CisJLyogUG9wIHRoZW0gYWdh aW4uICBPcmRlciBvZiBleGlzdGluZyBsaXN0IHNob3VsZCBiZSBwcmVzZXJ2ZWQuICovCisJZWxl bV9tcHNjX3F1ZXVlX3BvcF9iYXRjaCgmcXVldWUsICZyZXN1bHRfbGlzdCk7CisKKwljaGVja19l bGVtc19zaW1wbGUoJnJlc3VsdF9saXN0LCBORUxFTVMsIDApOworCit9CitURVNUX0VORAorCit0 eXBlZGVmIHN0cnVjdCBwdXNoZXJfYXJnX3MgcHVzaGVyX2FyZ190Oworc3RydWN0IHB1c2hlcl9h cmdfcyB7CisJZWxlbV9tcHNjX3F1ZXVlX3QgKnF1ZXVlOworCWludCB0aHJlYWQ7CisJZWxlbV90 ICplbGVtczsKKwlpbnQgbmVsZW1zOworfTsKKwordHlwZWRlZiBzdHJ1Y3QgcG9wcGVyX2FyZ19z IHBvcHBlcl9hcmdfdDsKK3N0cnVjdCBwb3BwZXJfYXJnX3MgeworCWVsZW1fbXBzY19xdWV1ZV90 ICpxdWV1ZTsKKwlpbnQgbnB1c2hlcnM7CisJaW50IG5lbGVtc19wZXJfcHVzaGVyOworCWludCAq cHVzaGVyX2NvdW50czsKK307CisKK3N0YXRpYyB2b2lkICoKK3RoZF9wdXNoZXIodm9pZCAqdm9p ZF9hcmcpIHsKKwlwdXNoZXJfYXJnX3QgKmFyZyA9IChwdXNoZXJfYXJnX3QgKil2b2lkX2FyZzsK KwlpbnQgbmV4dF9pZHggPSAwOworCXdoaWxlIChuZXh0X2lkeCA8IGFyZy0+bmVsZW1zKSB7CisJ CS8qIFB1c2ggMTAgaXRlbXMgaW4gYmF0Y2guICovCisJCWVsZW1fbGlzdF90IGxpc3Q7CisJCXFs X25ldygmbGlzdCk7CisJCWludCBsaW1pdCA9IG5leHRfaWR4ICsgMTA7CisJCXdoaWxlIChuZXh0 X2lkeCA8IGFyZy0+bmVsZW1zICYmIG5leHRfaWR4IDwgbGltaXQpIHsKKwkJCXFsX3RhaWxfaW5z ZXJ0KCZsaXN0LCAmYXJnLT5lbGVtc1tuZXh0X2lkeF0sIGxpbmspOworCQkJbmV4dF9pZHgrKzsK KwkJfQorCQllbGVtX21wc2NfcXVldWVfcHVzaF9iYXRjaChhcmctPnF1ZXVlLCAmbGlzdCk7CisJ CS8qIFB1c2ggMTAgaXRlbXMgb25lLWF0LWEtdGltZS4gKi8KKwkJbGltaXQgPSBuZXh0X2lkeCAr IDEwOworCQl3aGlsZSAobmV4dF9pZHggPCBhcmctPm5lbGVtcyAmJiBuZXh0X2lkeCA8IGxpbWl0 KSB7CisJCQllbGVtX21wc2NfcXVldWVfcHVzaChhcmctPnF1ZXVlLCAmYXJnLT5lbGVtc1tuZXh0 X2lkeF0pOworCQkJbmV4dF9pZHgrKzsKKwkJfQorCisJfQorCXJldHVybiBOVUxMOworfQorCitz dGF0aWMgdm9pZCAqCit0aGRfcG9wcGVyKHZvaWQgKnZvaWRfYXJnKSB7CisJcG9wcGVyX2FyZ190 ICphcmcgPSAocG9wcGVyX2FyZ190ICopdm9pZF9hcmc7CisJaW50IGRvbmVfcHVzaGVycyA9IDA7 CisJd2hpbGUgKGRvbmVfcHVzaGVycyA8IGFyZy0+bnB1c2hlcnMpIHsKKwkJZWxlbV9saXN0X3Qg bGlzdDsKKwkJcWxfbmV3KCZsaXN0KTsKKwkJZWxlbV9tcHNjX3F1ZXVlX3BvcF9iYXRjaChhcmct PnF1ZXVlLCAmbGlzdCk7CisJCWVsZW1fdCAqZWxlbTsKKwkJcWxfZm9yZWFjaChlbGVtLCAmbGlz dCwgbGluaykgeworCQkJaW50IHRocmVhZCA9IGVsZW0tPnRocmVhZDsKKwkJCWludCBpZHggPSBl bGVtLT5pZHg7CisJCQlleHBlY3RfZF9lcShhcmctPnB1c2hlcl9jb3VudHNbdGhyZWFkXSwgaWR4 LAorCQkJICAgICJUaHJlYWQncyBwdXNoZXMgcmVvcmRlcmVkIik7CisJCQlhcmctPnB1c2hlcl9j b3VudHNbdGhyZWFkXSsrOworCQkJaWYgKGFyZy0+cHVzaGVyX2NvdW50c1t0aHJlYWRdCisJCQkg ICAgPT0gYXJnLT5uZWxlbXNfcGVyX3B1c2hlcikgeworCQkJCWRvbmVfcHVzaGVycysrOworCQkJ fQorCQl9CisJfQorCXJldHVybiBOVUxMOworfQorCitURVNUX0JFR0lOKHRlc3RfbXVsdGlwbGVf dGhyZWFkcykgeworCWVudW0geworCQlOUFVTSEVSUyA9IDQsCisJCU5FTEVNU19QRVJfUFVTSEVS ID0gMTAwMCoxMDAwLAorCX07CisJdGhkX3QgcHVzaGVyc1tOUFVTSEVSU107CisJcHVzaGVyX2Fy Z190IHB1c2hlcl9hcmdbTlBVU0hFUlNdOworCisJdGhkX3QgcG9wcGVyOworCXBvcHBlcl9hcmdf dCBwb3BwZXJfYXJnOworCisJZWxlbV9tcHNjX3F1ZXVlX3QgcXVldWU7CisJZWxlbV9tcHNjX3F1 ZXVlX25ldygmcXVldWUpOworCisJZWxlbV90ICplbGVtcyA9IGNhbGxvYyhOUFVTSEVSUyAqIE5F TEVNU19QRVJfUFVTSEVSLCBzaXplb2YoZWxlbV90KSk7CisJZWxlbV90ICplbGVtX2l0ZXIgPSBl bGVtczsKKwlmb3IgKGludCBpID0gMDsgaSA8IE5QVVNIRVJTOyBpKyspIHsKKwkJcHVzaGVyX2Fy Z1tpXS5xdWV1ZSA9ICZxdWV1ZTsKKwkJcHVzaGVyX2FyZ1tpXS50aHJlYWQgPSBpOworCQlwdXNo ZXJfYXJnW2ldLmVsZW1zID0gZWxlbV9pdGVyOworCQlwdXNoZXJfYXJnW2ldLm5lbGVtcyA9IE5F TEVNU19QRVJfUFVTSEVSOworCisJCWluaXRfZWxlbXNfc2ltcGxlKGVsZW1faXRlciwgTkVMRU1T X1BFUl9QVVNIRVIsIGkpOworCQllbGVtX2l0ZXIgKz0gTkVMRU1TX1BFUl9QVVNIRVI7CisJfQor CXBvcHBlcl9hcmcucXVldWUgPSAmcXVldWU7CisJcG9wcGVyX2FyZy5ucHVzaGVycyA9IE5QVVNI RVJTOworCXBvcHBlcl9hcmcubmVsZW1zX3Blcl9wdXNoZXIgPSBORUxFTVNfUEVSX1BVU0hFUjsK KwlpbnQgcHVzaGVyX2NvdW50c1tOUFVTSEVSU10gPSB7MH07CisJcG9wcGVyX2FyZy5wdXNoZXJf Y291bnRzID0gcHVzaGVyX2NvdW50czsKKworCXRoZF9jcmVhdGUoJnBvcHBlciwgdGhkX3BvcHBl ciwgKHZvaWQgKikmcG9wcGVyX2FyZyk7CisJZm9yIChpbnQgaSA9IDA7IGkgPCBOUFVTSEVSUzsg aSsrKSB7CisJCXRoZF9jcmVhdGUoJnB1c2hlcnNbaV0sIHRoZF9wdXNoZXIsICZwdXNoZXJfYXJn W2ldKTsKKwl9CisKKwl0aGRfam9pbihwb3BwZXIsIE5VTEwpOworCWZvciAoaW50IGkgPSAwOyBp IDwgTlBVU0hFUlM7IGkrKykgeworCQl0aGRfam9pbihwdXNoZXJzW2ldLCBOVUxMKTsKKwl9CisK Kwlmb3IgKGludCBpID0gMDsgaSA8IE5QVVNIRVJTOyBpKyspIHsKKwkJZXhwZWN0X2RfZXEoTkVM RU1TX1BFUl9QVVNIRVIsIHB1c2hlcl9jb3VudHNbaV0sICIiKTsKKwl9CisKKwlmcmVlKGVsZW1z KTsKK30KK1RFU1RfRU5ECisKK2ludAorbWFpbih2b2lkKSB7CisJcmV0dXJuIHRlc3Rfbm9fcmVl bnRyYW5jeSgKKwkgICAgdGVzdF9zaW1wbGUsCisJICAgIHRlc3RfcHVzaF9zaW5nbGVfb3JfYmF0 Y2gsCisJICAgIHRlc3RfbXVsdGlfb3AsCisJICAgIHRlc3RfbXVsdGlwbGVfdGhyZWFkcyk7Cit9 CgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVz dC91bml0L21xLmMgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0 L3VuaXQvbXEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODMzZjc3Ci0t LSAvZGV2L251bGwKKysrIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAv dGVzdC91bml0L21xLmMKQEAgLTAsMCArMSw4OSBAQAorI2luY2x1ZGUgInRlc3QvamVtYWxsb2Nf dGVzdC5oIgorCisjZGVmaW5lIE5TRU5ERVJTCTMKKyNkZWZpbmUgTk1TR1MJCTEwMDAwMAorCit0 eXBlZGVmIHN0cnVjdCBtcV9tc2dfcyBtcV9tc2dfdDsKK3N0cnVjdCBtcV9tc2dfcyB7CisJbXFf bXNnKG1xX21zZ190KQlsaW5rOworfTsKK21xX2dlbihzdGF0aWMsIG1xXywgbXFfdCwgbXFfbXNn X3QsIGxpbmspCisKK1RFU1RfQkVHSU4odGVzdF9tcV9iYXNpYykgeworCW1xX3QgbXE7CisJbXFf bXNnX3QgbXNnOworCisJZXhwZWN0X2ZhbHNlKG1xX2luaXQoJm1xKSwgIlVuZXhwZWN0ZWQgbXFf aW5pdCgpIGZhaWx1cmUiKTsKKwlleHBlY3RfdV9lcShtcV9jb3VudCgmbXEpLCAwLCAibXEgc2hv dWxkIGJlIGVtcHR5Iik7CisJZXhwZWN0X3B0cl9udWxsKG1xX3RyeWdldCgmbXEpLAorCSAgICAi bXFfdHJ5Z2V0KCkgc2hvdWxkIGZhaWwgd2hlbiB0aGUgcXVldWUgaXMgZW1wdHkiKTsKKworCW1x X3B1dCgmbXEsICZtc2cpOworCWV4cGVjdF91X2VxKG1xX2NvdW50KCZtcSksIDEsICJtcSBzaG91 bGQgY29udGFpbiBvbmUgbWVzc2FnZSIpOworCWV4cGVjdF9wdHJfZXEobXFfdHJ5Z2V0KCZtcSks ICZtc2csICJtcV90cnlnZXQoKSBzaG91bGQgcmV0dXJuIG1zZyIpOworCisJbXFfcHV0KCZtcSwg Jm1zZyk7CisJZXhwZWN0X3B0cl9lcShtcV9nZXQoJm1xKSwgJm1zZywgIm1xX2dldCgpIHNob3Vs ZCByZXR1cm4gbXNnIik7CisKKwltcV9maW5pKCZtcSk7Cit9CitURVNUX0VORAorCitzdGF0aWMg dm9pZCAqCit0aGRfcmVjZWl2ZXJfc3RhcnQodm9pZCAqYXJnKSB7CisJbXFfdCAqbXEgPSAobXFf dCAqKWFyZzsKKwl1bnNpZ25lZCBpOworCisJZm9yIChpID0gMDsgaSA8IChOU0VOREVSUyAqIE5N U0dTKTsgaSsrKSB7CisJCW1xX21zZ190ICptc2cgPSBtcV9nZXQobXEpOworCQlleHBlY3RfcHRy X25vdF9udWxsKG1zZywgIm1xX2dldCgpIHNob3VsZCBuZXZlciByZXR1cm4gTlVMTCIpOworCQlk YWxsb2N4KG1zZywgMCk7CisJfQorCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCAqCit0 aGRfc2VuZGVyX3N0YXJ0KHZvaWQgKmFyZykgeworCW1xX3QgKm1xID0gKG1xX3QgKilhcmc7CisJ dW5zaWduZWQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBOTVNHUzsgaSsrKSB7CisJCW1xX21zZ190 ICptc2c7CisJCXZvaWQgKnA7CisJCXAgPSBtYWxsb2N4KHNpemVvZihtcV9tc2dfdCksIDApOwor CQlleHBlY3RfcHRyX25vdF9udWxsKHAsICJVbmV4cGVjdGVkIG1hbGxvY3goKSBmYWlsdXJlIik7 CisJCW1zZyA9IChtcV9tc2dfdCAqKXA7CisJCW1xX3B1dChtcSwgbXNnKTsKKwl9CisJcmV0dXJu IE5VTEw7Cit9CisKK1RFU1RfQkVHSU4odGVzdF9tcV90aHJlYWRlZCkgeworCW1xX3QgbXE7CisJ dGhkX3QgcmVjZWl2ZXI7CisJdGhkX3Qgc2VuZGVyc1tOU0VOREVSU107CisJdW5zaWduZWQgaTsK KworCWV4cGVjdF9mYWxzZShtcV9pbml0KCZtcSksICJVbmV4cGVjdGVkIG1xX2luaXQoKSBmYWls dXJlIik7CisKKwl0aGRfY3JlYXRlKCZyZWNlaXZlciwgdGhkX3JlY2VpdmVyX3N0YXJ0LCAodm9p ZCAqKSZtcSk7CisJZm9yIChpID0gMDsgaSA8IE5TRU5ERVJTOyBpKyspIHsKKwkJdGhkX2NyZWF0 ZSgmc2VuZGVyc1tpXSwgdGhkX3NlbmRlcl9zdGFydCwgKHZvaWQgKikmbXEpOworCX0KKworCXRo ZF9qb2luKHJlY2VpdmVyLCBOVUxMKTsKKwlmb3IgKGkgPSAwOyBpIDwgTlNFTkRFUlM7IGkrKykg eworCQl0aGRfam9pbihzZW5kZXJzW2ldLCBOVUxMKTsKKwl9CisKKwltcV9maW5pKCZtcSk7Cit9 CitURVNUX0VORAorCitpbnQKK21haW4odm9pZCkgeworCXJldHVybiB0ZXN0KAorCSAgICB0ZXN0 X21xX2Jhc2ljLAorCSAgICB0ZXN0X21xX3RocmVhZGVkKTsKK30KKwoKZGlmZiAtLWdpdCBhLzM4 OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9tdHguYyBiLzM4 OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9tdHguYwpuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWVlYmMxCi0tLSAvZGV2L251bGwKKysr IGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L210eC5j CkBAIC0wLDAgKzEsNTcgQEAKKyNpbmNsdWRlICJ0ZXN0L2plbWFsbG9jX3Rlc3QuaCIKKworI2Rl ZmluZSBOVEhSRUFEUwkyCisjZGVmaW5lIE5JTkNSUwkJMjAwMDAwMAorCitURVNUX0JFR0lOKHRl c3RfbXR4X2Jhc2ljKSB7CisJbXR4X3QgbXR4OworCisJZXhwZWN0X2ZhbHNlKG10eF9pbml0KCZt dHgpLCAiVW5leHBlY3RlZCBtdHhfaW5pdCgpIGZhaWx1cmUiKTsKKwltdHhfbG9jaygmbXR4KTsK KwltdHhfdW5sb2NrKCZtdHgpOworCW10eF9maW5pKCZtdHgpOworfQorVEVTVF9FTkQKKwordHlw ZWRlZiBzdHJ1Y3QgeworCW10eF90CQltdHg7CisJdW5zaWduZWQJeDsKK30gdGhkX3N0YXJ0X2Fy Z190OworCitzdGF0aWMgdm9pZCAqCit0aGRfc3RhcnQodm9pZCAqdmFyZykgeworCXRoZF9zdGFy dF9hcmdfdCAqYXJnID0gKHRoZF9zdGFydF9hcmdfdCAqKXZhcmc7CisJdW5zaWduZWQgaTsKKwor CWZvciAoaSA9IDA7IGkgPCBOSU5DUlM7IGkrKykgeworCQltdHhfbG9jaygmYXJnLT5tdHgpOwor CQlhcmctPngrKzsKKwkJbXR4X3VubG9jaygmYXJnLT5tdHgpOworCX0KKwlyZXR1cm4gTlVMTDsK K30KKworVEVTVF9CRUdJTih0ZXN0X210eF9yYWNlKSB7CisJdGhkX3N0YXJ0X2FyZ190IGFyZzsK Kwl0aGRfdCB0aGRzW05USFJFQURTXTsKKwl1bnNpZ25lZCBpOworCisJZXhwZWN0X2ZhbHNlKG10 eF9pbml0KCZhcmcubXR4KSwgIlVuZXhwZWN0ZWQgbXR4X2luaXQoKSBmYWlsdXJlIik7CisJYXJn LnggPSAwOworCWZvciAoaSA9IDA7IGkgPCBOVEhSRUFEUzsgaSsrKSB7CisJCXRoZF9jcmVhdGUo JnRoZHNbaV0sIHRoZF9zdGFydCwgKHZvaWQgKikmYXJnKTsKKwl9CisJZm9yIChpID0gMDsgaSA8 IE5USFJFQURTOyBpKyspIHsKKwkJdGhkX2pvaW4odGhkc1tpXSwgTlVMTCk7CisJfQorCWV4cGVj dF91X2VxKGFyZy54LCBOVEhSRUFEUyAqIE5JTkNSUywKKwkgICAgIlJhY2UtcmVsYXRlZCBjb3Vu dGVyIGNvcnJ1cHRpb24iKTsKK30KK1RFU1RfRU5ECisKK2ludAorbWFpbih2b2lkKSB7CisJcmV0 dXJuIHRlc3QoCisJICAgIHRlc3RfbXR4X2Jhc2ljLAorCSAgICB0ZXN0X210eF9yYWNlKTsKK30K CmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0 L3VuaXQvbnN0aW1lLmMgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90 ZXN0L3VuaXQvbnN0aW1lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTYy MzhhYgotLS0gL2Rldi9udWxsCisrKyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9j LTUuMy4wL3Rlc3QvdW5pdC9uc3RpbWUuYwpAQCAtMCwwICsxLDI1MiBAQAorI2luY2x1ZGUgInRl c3QvamVtYWxsb2NfdGVzdC5oIgorCisjZGVmaW5lIEJJTExJT04JVUlOVDY0X0MoMTAwMDAwMDAw MCkKKworVEVTVF9CRUdJTih0ZXN0X25zdGltZV9pbml0KSB7CisJbnN0aW1lX3QgbnN0OworCisJ bnN0aW1lX2luaXQoJm5zdCwgNDIwMDAwMDAwNDMpOworCWV4cGVjdF91NjRfZXEobnN0aW1lX25z KCZuc3QpLCA0MjAwMDAwMDA0MywgIm5zIGluY29ycmVjdGx5IHJlYWQiKTsKKwlleHBlY3RfdTY0 X2VxKG5zdGltZV9zZWMoJm5zdCksIDQyLCAic2VjIGluY29ycmVjdGx5IHJlYWQiKTsKKwlleHBl Y3RfdTY0X2VxKG5zdGltZV9uc2VjKCZuc3QpLCA0MywgIm5zZWMgaW5jb3JyZWN0bHkgcmVhZCIp OworfQorVEVTVF9FTkQKKworVEVTVF9CRUdJTih0ZXN0X25zdGltZV9pbml0MikgeworCW5zdGlt ZV90IG5zdDsKKworCW5zdGltZV9pbml0MigmbnN0LCA0MiwgNDMpOworCWV4cGVjdF91NjRfZXEo bnN0aW1lX3NlYygmbnN0KSwgNDIsICJzZWMgaW5jb3JyZWN0bHkgcmVhZCIpOworCWV4cGVjdF91 NjRfZXEobnN0aW1lX25zZWMoJm5zdCksIDQzLCAibnNlYyBpbmNvcnJlY3RseSByZWFkIik7Cit9 CitURVNUX0VORAorCitURVNUX0JFR0lOKHRlc3RfbnN0aW1lX2NvcHkpIHsKKwluc3RpbWVfdCBu c3RhLCBuc3RiOworCisJbnN0aW1lX2luaXQyKCZuc3RhLCA0MiwgNDMpOworCW5zdGltZV9pbml0 X3plcm8oJm5zdGIpOworCW5zdGltZV9jb3B5KCZuc3RiLCAmbnN0YSk7CisJZXhwZWN0X3U2NF9l cShuc3RpbWVfc2VjKCZuc3RiKSwgNDIsICJzZWMgaW5jb3JyZWN0bHkgY29waWVkIik7CisJZXhw ZWN0X3U2NF9lcShuc3RpbWVfbnNlYygmbnN0YiksIDQzLCAibnNlYyBpbmNvcnJlY3RseSBjb3Bp ZWQiKTsKK30KK1RFU1RfRU5ECisKK1RFU1RfQkVHSU4odGVzdF9uc3RpbWVfY29tcGFyZSkgewor CW5zdGltZV90IG5zdGEsIG5zdGI7CisKKwluc3RpbWVfaW5pdDIoJm5zdGEsIDQyLCA0Myk7CisJ bnN0aW1lX2NvcHkoJm5zdGIsICZuc3RhKTsKKwlleHBlY3RfZF9lcShuc3RpbWVfY29tcGFyZSgm bnN0YSwgJm5zdGIpLCAwLCAiVGltZXMgc2hvdWxkIGJlIGVxdWFsIik7CisJZXhwZWN0X2RfZXEo bnN0aW1lX2NvbXBhcmUoJm5zdGIsICZuc3RhKSwgMCwgIlRpbWVzIHNob3VsZCBiZSBlcXVhbCIp OworCisJbnN0aW1lX2luaXQyKCZuc3RiLCA0MiwgNDIpOworCWV4cGVjdF9kX2VxKG5zdGltZV9j b21wYXJlKCZuc3RhLCAmbnN0YiksIDEsCisJICAgICJuc3RhIHNob3VsZCBiZSBncmVhdGVyIHRo YW4gbnN0YiIpOworCWV4cGVjdF9kX2VxKG5zdGltZV9jb21wYXJlKCZuc3RiLCAmbnN0YSksIC0x LAorCSAgICAibnN0YiBzaG91bGQgYmUgbGVzcyB0aGFuIG5zdGEiKTsKKworCW5zdGltZV9pbml0 MigmbnN0YiwgNDIsIDQ0KTsKKwlleHBlY3RfZF9lcShuc3RpbWVfY29tcGFyZSgmbnN0YSwgJm5z dGIpLCAtMSwKKwkgICAgIm5zdGEgc2hvdWxkIGJlIGxlc3MgdGhhbiBuc3RiIik7CisJZXhwZWN0 X2RfZXEobnN0aW1lX2NvbXBhcmUoJm5zdGIsICZuc3RhKSwgMSwKKwkgICAgIm5zdGIgc2hvdWxk IGJlIGdyZWF0ZXIgdGhhbiBuc3RhIik7CisKKwluc3RpbWVfaW5pdDIoJm5zdGIsIDQxLCBCSUxM SU9OIC0gMSk7CisJZXhwZWN0X2RfZXEobnN0aW1lX2NvbXBhcmUoJm5zdGEsICZuc3RiKSwgMSwK KwkgICAgIm5zdGEgc2hvdWxkIGJlIGdyZWF0ZXIgdGhhbiBuc3RiIik7CisJZXhwZWN0X2RfZXEo bnN0aW1lX2NvbXBhcmUoJm5zdGIsICZuc3RhKSwgLTEsCisJICAgICJuc3RiIHNob3VsZCBiZSBs ZXNzIHRoYW4gbnN0YSIpOworCisJbnN0aW1lX2luaXQyKCZuc3RiLCA0MywgMCk7CisJZXhwZWN0 X2RfZXEobnN0aW1lX2NvbXBhcmUoJm5zdGEsICZuc3RiKSwgLTEsCisJICAgICJuc3RhIHNob3Vs ZCBiZSBsZXNzIHRoYW4gbnN0YiIpOworCWV4cGVjdF9kX2VxKG5zdGltZV9jb21wYXJlKCZuc3Ri LCAmbnN0YSksIDEsCisJICAgICJuc3RiIHNob3VsZCBiZSBncmVhdGVyIHRoYW4gbnN0YSIpOwor fQorVEVTVF9FTkQKKworVEVTVF9CRUdJTih0ZXN0X25zdGltZV9hZGQpIHsKKwluc3RpbWVfdCBu c3RhLCBuc3RiOworCisJbnN0aW1lX2luaXQyKCZuc3RhLCA0MiwgNDMpOworCW5zdGltZV9jb3B5 KCZuc3RiLCAmbnN0YSk7CisJbnN0aW1lX2FkZCgmbnN0YSwgJm5zdGIpOworCW5zdGltZV9pbml0 MigmbnN0YiwgODQsIDg2KTsKKwlleHBlY3RfZF9lcShuc3RpbWVfY29tcGFyZSgmbnN0YSwgJm5z dGIpLCAwLAorCSAgICAiSW5jb3JyZWN0IGFkZGl0aW9uIHJlc3VsdCIpOworCisJbnN0aW1lX2lu aXQyKCZuc3RhLCA0MiwgQklMTElPTiAtIDEpOworCW5zdGltZV9jb3B5KCZuc3RiLCAmbnN0YSk7 CisJbnN0aW1lX2FkZCgmbnN0YSwgJm5zdGIpOworCW5zdGltZV9pbml0MigmbnN0YiwgODUsIEJJ TExJT04gLSAyKTsKKwlleHBlY3RfZF9lcShuc3RpbWVfY29tcGFyZSgmbnN0YSwgJm5zdGIpLCAw LAorCSAgICAiSW5jb3JyZWN0IGFkZGl0aW9uIHJlc3VsdCIpOworfQorVEVTVF9FTkQKKworVEVT VF9CRUdJTih0ZXN0X25zdGltZV9pYWRkKSB7CisJbnN0aW1lX3QgbnN0YSwgbnN0YjsKKworCW5z dGltZV9pbml0MigmbnN0YSwgNDIsIEJJTExJT04gLSAxKTsKKwluc3RpbWVfaWFkZCgmbnN0YSwg MSk7CisJbnN0aW1lX2luaXQyKCZuc3RiLCA0MywgMCk7CisJZXhwZWN0X2RfZXEobnN0aW1lX2Nv bXBhcmUoJm5zdGEsICZuc3RiKSwgMCwKKwkgICAgIkluY29ycmVjdCBhZGRpdGlvbiByZXN1bHQi KTsKKworCW5zdGltZV9pbml0MigmbnN0YSwgNDIsIDEpOworCW5zdGltZV9pYWRkKCZuc3RhLCBC SUxMSU9OICsgMSk7CisJbnN0aW1lX2luaXQyKCZuc3RiLCA0MywgMik7CisJZXhwZWN0X2RfZXEo bnN0aW1lX2NvbXBhcmUoJm5zdGEsICZuc3RiKSwgMCwKKwkgICAgIkluY29ycmVjdCBhZGRpdGlv biByZXN1bHQiKTsKK30KK1RFU1RfRU5ECisKK1RFU1RfQkVHSU4odGVzdF9uc3RpbWVfc3VidHJh Y3QpIHsKKwluc3RpbWVfdCBuc3RhLCBuc3RiOworCisJbnN0aW1lX2luaXQyKCZuc3RhLCA0Miwg NDMpOworCW5zdGltZV9jb3B5KCZuc3RiLCAmbnN0YSk7CisJbnN0aW1lX3N1YnRyYWN0KCZuc3Rh LCAmbnN0Yik7CisJbnN0aW1lX2luaXRfemVybygmbnN0Yik7CisJZXhwZWN0X2RfZXEobnN0aW1l X2NvbXBhcmUoJm5zdGEsICZuc3RiKSwgMCwKKwkgICAgIkluY29ycmVjdCBzdWJ0cmFjdGlvbiBy ZXN1bHQiKTsKKworCW5zdGltZV9pbml0MigmbnN0YSwgNDIsIDQzKTsKKwluc3RpbWVfaW5pdDIo Jm5zdGIsIDQxLCA0NCk7CisJbnN0aW1lX3N1YnRyYWN0KCZuc3RhLCAmbnN0Yik7CisJbnN0aW1l X2luaXQyKCZuc3RiLCAwLCBCSUxMSU9OIC0gMSk7CisJZXhwZWN0X2RfZXEobnN0aW1lX2NvbXBh cmUoJm5zdGEsICZuc3RiKSwgMCwKKwkgICAgIkluY29ycmVjdCBzdWJ0cmFjdGlvbiByZXN1bHQi KTsKK30KK1RFU1RfRU5ECisKK1RFU1RfQkVHSU4odGVzdF9uc3RpbWVfaXN1YnRyYWN0KSB7CisJ bnN0aW1lX3QgbnN0YSwgbnN0YjsKKworCW5zdGltZV9pbml0MigmbnN0YSwgNDIsIDQzKTsKKwlu c3RpbWVfaXN1YnRyYWN0KCZuc3RhLCA0MipCSUxMSU9OICsgNDMpOworCW5zdGltZV9pbml0X3pl cm8oJm5zdGIpOworCWV4cGVjdF9kX2VxKG5zdGltZV9jb21wYXJlKCZuc3RhLCAmbnN0YiksIDAs CisJICAgICJJbmNvcnJlY3Qgc3VidHJhY3Rpb24gcmVzdWx0Iik7CisKKwluc3RpbWVfaW5pdDIo Jm5zdGEsIDQyLCA0Myk7CisJbnN0aW1lX2lzdWJ0cmFjdCgmbnN0YSwgNDEqQklMTElPTiArIDQ0 KTsKKwluc3RpbWVfaW5pdDIoJm5zdGIsIDAsIEJJTExJT04gLSAxKTsKKwlleHBlY3RfZF9lcShu c3RpbWVfY29tcGFyZSgmbnN0YSwgJm5zdGIpLCAwLAorCSAgICAiSW5jb3JyZWN0IHN1YnRyYWN0 aW9uIHJlc3VsdCIpOworfQorVEVTVF9FTkQKKworVEVTVF9CRUdJTih0ZXN0X25zdGltZV9pbXVs dGlwbHkpIHsKKwluc3RpbWVfdCBuc3RhLCBuc3RiOworCisJbnN0aW1lX2luaXQyKCZuc3RhLCA0 MiwgNDMpOworCW5zdGltZV9pbXVsdGlwbHkoJm5zdGEsIDEwKTsKKwluc3RpbWVfaW5pdDIoJm5z dGIsIDQyMCwgNDMwKTsKKwlleHBlY3RfZF9lcShuc3RpbWVfY29tcGFyZSgmbnN0YSwgJm5zdGIp LCAwLAorCSAgICAiSW5jb3JyZWN0IG11bHRpcGxpY2F0aW9uIHJlc3VsdCIpOworCisJbnN0aW1l X2luaXQyKCZuc3RhLCA0MiwgNjY2NjY2NjY2KTsKKwluc3RpbWVfaW11bHRpcGx5KCZuc3RhLCAz KTsKKwluc3RpbWVfaW5pdDIoJm5zdGIsIDEyNywgOTk5OTk5OTk4KTsKKwlleHBlY3RfZF9lcShu c3RpbWVfY29tcGFyZSgmbnN0YSwgJm5zdGIpLCAwLAorCSAgICAiSW5jb3JyZWN0IG11bHRpcGxp Y2F0aW9uIHJlc3VsdCIpOworfQorVEVTVF9FTkQKKworVEVTVF9CRUdJTih0ZXN0X25zdGltZV9p ZGl2aWRlKSB7CisJbnN0aW1lX3QgbnN0YSwgbnN0YjsKKworCW5zdGltZV9pbml0MigmbnN0YSwg NDIsIDQzKTsKKwluc3RpbWVfY29weSgmbnN0YiwgJm5zdGEpOworCW5zdGltZV9pbXVsdGlwbHko Jm5zdGEsIDEwKTsKKwluc3RpbWVfaWRpdmlkZSgmbnN0YSwgMTApOworCWV4cGVjdF9kX2VxKG5z dGltZV9jb21wYXJlKCZuc3RhLCAmbnN0YiksIDAsCisJICAgICJJbmNvcnJlY3QgZGl2aXNpb24g cmVzdWx0Iik7CisKKwluc3RpbWVfaW5pdDIoJm5zdGEsIDQyLCA2NjY2NjY2NjYpOworCW5zdGlt ZV9jb3B5KCZuc3RiLCAmbnN0YSk7CisJbnN0aW1lX2ltdWx0aXBseSgmbnN0YSwgMyk7CisJbnN0 aW1lX2lkaXZpZGUoJm5zdGEsIDMpOworCWV4cGVjdF9kX2VxKG5zdGltZV9jb21wYXJlKCZuc3Rh LCAmbnN0YiksIDAsCisJICAgICJJbmNvcnJlY3QgZGl2aXNpb24gcmVzdWx0Iik7Cit9CitURVNU X0VORAorCitURVNUX0JFR0lOKHRlc3RfbnN0aW1lX2RpdmlkZSkgeworCW5zdGltZV90IG5zdGEs IG5zdGIsIG5zdGM7CisKKwluc3RpbWVfaW5pdDIoJm5zdGEsIDQyLCA0Myk7CisJbnN0aW1lX2Nv cHkoJm5zdGIsICZuc3RhKTsKKwluc3RpbWVfaW11bHRpcGx5KCZuc3RhLCAxMCk7CisJZXhwZWN0 X3U2NF9lcShuc3RpbWVfZGl2aWRlKCZuc3RhLCAmbnN0YiksIDEwLAorCSAgICAiSW5jb3JyZWN0 IGRpdmlzaW9uIHJlc3VsdCIpOworCisJbnN0aW1lX2luaXQyKCZuc3RhLCA0MiwgNDMpOworCW5z dGltZV9jb3B5KCZuc3RiLCAmbnN0YSk7CisJbnN0aW1lX2ltdWx0aXBseSgmbnN0YSwgMTApOwor CW5zdGltZV9pbml0KCZuc3RjLCAxKTsKKwluc3RpbWVfYWRkKCZuc3RhLCAmbnN0Yyk7CisJZXhw ZWN0X3U2NF9lcShuc3RpbWVfZGl2aWRlKCZuc3RhLCAmbnN0YiksIDEwLAorCSAgICAiSW5jb3Jy ZWN0IGRpdmlzaW9uIHJlc3VsdCIpOworCisJbnN0aW1lX2luaXQyKCZuc3RhLCA0MiwgNDMpOwor CW5zdGltZV9jb3B5KCZuc3RiLCAmbnN0YSk7CisJbnN0aW1lX2ltdWx0aXBseSgmbnN0YSwgMTAp OworCW5zdGltZV9pbml0KCZuc3RjLCAxKTsKKwluc3RpbWVfc3VidHJhY3QoJm5zdGEsICZuc3Rj KTsKKwlleHBlY3RfdTY0X2VxKG5zdGltZV9kaXZpZGUoJm5zdGEsICZuc3RiKSwgOSwKKwkgICAg IkluY29ycmVjdCBkaXZpc2lvbiByZXN1bHQiKTsKK30KK1RFU1RfRU5ECisKK3ZvaWQKK3Rlc3Rf bnN0aW1lX3NpbmNlX29uY2UobnN0aW1lX3QgKnQpIHsKKwluc3RpbWVfdCBvbGRfdDsKKwluc3Rp bWVfY29weSgmb2xkX3QsIHQpOworCisJdWludDY0X3QgbnNfc2luY2UgPSBuc3RpbWVfbnNfc2lu Y2UodCk7CisJbnN0aW1lX3VwZGF0ZSh0KTsKKworCW5zdGltZV90IG5ld190OworCW5zdGltZV9j b3B5KCZuZXdfdCwgdCk7CisJbnN0aW1lX3N1YnRyYWN0KCZuZXdfdCwgJm9sZF90KTsKKworCWV4 cGVjdF91NjRfZ2UobnN0aW1lX25zKCZuZXdfdCksIG5zX3NpbmNlLAorCSAgICAiSW5jb3JyZWN0 IHRpbWUgc2luY2UgcmVzdWx0Iik7Cit9CisKK1RFU1RfQkVHSU4odGVzdF9uc3RpbWVfbnNfc2lu Y2UpIHsKKwluc3RpbWVfdCB0OworCisJbnN0aW1lX2luaXRfdXBkYXRlKCZ0KTsKKwlmb3IgKHVp bnQ2NF90IGkgPSAwOyBpIDwgMTAwMDA7IGkrKykgeworCQkvKiBLZWVwcyB1cGRhdGluZyB0IGFu ZCB2ZXJpZmllcyBuc19zaW5jZSBpcyB2YWxpZC4gKi8KKwkJdGVzdF9uc3RpbWVfc2luY2Vfb25j ZSgmdCk7CisJfQorfQorVEVTVF9FTkQKKworVEVTVF9CRUdJTih0ZXN0X25zdGltZV9tb25vdG9u aWMpIHsKKwluc3RpbWVfbW9ub3RvbmljKCk7Cit9CitURVNUX0VORAorCitpbnQKK21haW4odm9p ZCkgeworCXJldHVybiB0ZXN0KAorCSAgICB0ZXN0X25zdGltZV9pbml0LAorCSAgICB0ZXN0X25z dGltZV9pbml0MiwKKwkgICAgdGVzdF9uc3RpbWVfY29weSwKKwkgICAgdGVzdF9uc3RpbWVfY29t cGFyZSwKKwkgICAgdGVzdF9uc3RpbWVfYWRkLAorCSAgICB0ZXN0X25zdGltZV9pYWRkLAorCSAg ICB0ZXN0X25zdGltZV9zdWJ0cmFjdCwKKwkgICAgdGVzdF9uc3RpbWVfaXN1YnRyYWN0LAorCSAg ICB0ZXN0X25zdGltZV9pbXVsdGlwbHksCisJICAgIHRlc3RfbnN0aW1lX2lkaXZpZGUsCisJICAg IHRlc3RfbnN0aW1lX2RpdmlkZSwKKwkgICAgdGVzdF9uc3RpbWVfbnNfc2luY2UsCisJICAgIHRl c3RfbnN0aW1lX21vbm90b25pYyk7Cit9CgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAt YnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L292ZXJzaXplX3RocmVzaG9sZC5jIGIvMzg5 LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L292ZXJzaXplX3Ro cmVzaG9sZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0YThmNzYKLS0t IC9kZXYvbnVsbAorKysgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90 ZXN0L3VuaXQvb3ZlcnNpemVfdGhyZXNob2xkLmMKQEAgLTAsMCArMSwxMzMgQEAKKyNpbmNsdWRl ICJ0ZXN0L2plbWFsbG9jX3Rlc3QuaCIKKworI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2N0 bC5oIgorCitzdGF0aWMgdm9pZAorYXJlbmFfbWFsbGN0bChjb25zdCBjaGFyICptYWxsY3RsX3N0 ciwgdW5zaWduZWQgYXJlbmEsIHZvaWQgKm9sZHAsCisgICAgc2l6ZV90ICpvbGRsZW4sIHZvaWQg Km5ld3AsIHNpemVfdCBuZXdsZW4pIHsKKwlpbnQgZXJyOworCWNoYXIgYnVmWzEwMF07CisJbWFs bG9jX3NucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIG1hbGxjdGxfc3RyLCBhcmVuYSk7CisKKwll cnIgPSBtYWxsY3RsKGJ1Ziwgb2xkcCwgb2xkbGVuLCBuZXdwLCBuZXdsZW4pOworCWV4cGVjdF9k X2VxKDAsIGVyciwgIk1hbGxjdGwgZmFpbGVkOyAlcyIsIGJ1Zik7Cit9CisKK1RFU1RfQkVHSU4o dGVzdF9vdmVyc2l6ZV90aHJlc2hvbGRfZ2V0X3NldCkgeworCWludCBlcnI7CisJc2l6ZV90IG9s ZF90aHJlc2hvbGQ7CisJc2l6ZV90IG5ld190aHJlc2hvbGQ7CisJc2l6ZV90IHRocmVzaG9sZF9z eiA9IHNpemVvZihvbGRfdGhyZXNob2xkKTsKKworCXVuc2lnbmVkIGFyZW5hOworCXNpemVfdCBh cmVuYV9zeiA9IHNpemVvZihhcmVuYSk7CisJZXJyID0gbWFsbGN0bCgiYXJlbmFzLmNyZWF0ZSIs ICh2b2lkICopJmFyZW5hLCAmYXJlbmFfc3osIE5VTEwsIDApOworCWV4cGVjdF9kX2VxKDAsIGVy ciwgIkFyZW5hIGNyZWF0aW9uIGZhaWxlZCIpOworCisJLyogSnVzdCBhIHdyaXRlLiAqLworCW5l d190aHJlc2hvbGQgPSAxMDI0ICogMTAyNDsKKwlhcmVuYV9tYWxsY3RsKCJhcmVuYS4ldS5vdmVy c2l6ZV90aHJlc2hvbGQiLCBhcmVuYSwgTlVMTCwgTlVMTCwKKwkgICAgJm5ld190aHJlc2hvbGQs IHRocmVzaG9sZF9zeik7CisKKwkvKiBSZWFkIGFuZCB3cml0ZSAqLworCW5ld190aHJlc2hvbGQg PSAyICogMTAyNCAqIDEwMjQ7CisJYXJlbmFfbWFsbGN0bCgiYXJlbmEuJXUub3ZlcnNpemVfdGhy ZXNob2xkIiwgYXJlbmEsICZvbGRfdGhyZXNob2xkLAorCSAgICAmdGhyZXNob2xkX3N6LCAmbmV3 X3RocmVzaG9sZCwgdGhyZXNob2xkX3N6KTsKKwlleHBlY3RfenVfZXEoMTAyNCAqIDEwMjQsIG9s ZF90aHJlc2hvbGQsICJTaG91bGQgaGF2ZSByZWFkIG9sZCB2YWx1ZSIpOworCisJLyogSnVzdCBh IHJlYWQgKi8KKwlhcmVuYV9tYWxsY3RsKCJhcmVuYS4ldS5vdmVyc2l6ZV90aHJlc2hvbGQiLCBh cmVuYSwgJm9sZF90aHJlc2hvbGQsCisJICAgICZ0aHJlc2hvbGRfc3osIE5VTEwsIDApOworCWV4 cGVjdF96dV9lcSgyICogMTAyNCAqIDEwMjQsIG9sZF90aHJlc2hvbGQsICJTaG91bGQgaGF2ZSBy ZWFkIG9sZCB2YWx1ZSIpOworfQorVEVTVF9FTkQKKworc3RhdGljIHNpemVfdCBtYXhfcHVyZ2Vk ID0gMDsKK3N0YXRpYyBib29sCitwdXJnZV9mb3JjZWRfcmVjb3JkX21heChleHRlbnRfaG9va3Nf dCogaG9va3MsIHZvaWQgKmFkZHIsIHNpemVfdCBzeiwKKyAgICBzaXplX3Qgb2Zmc2V0LCBzaXpl X3QgbGVuZ3RoLCB1bnNpZ25lZCBhcmVuYV9pbmQpIHsKKwlpZiAobGVuZ3RoID4gbWF4X3B1cmdl ZCkgeworCQltYXhfcHVyZ2VkID0gbGVuZ3RoOworCX0KKwlyZXR1cm4gZmFsc2U7Cit9CisKK3N0 YXRpYyBib29sCitkYWxsb2NfcmVjb3JkX21heChleHRlbnRfaG9va3NfdCAqZXh0ZW50X2hvb2tz LCB2b2lkICphZGRyLCBzaXplX3Qgc3osCisgICAgYm9vbCBjb21pdHRlZCwgdW5zaWduZWQgYXJl bmFfaW5kKSB7CisJaWYgKHN6ID4gbWF4X3B1cmdlZCkgeworCQltYXhfcHVyZ2VkID0gc3o7CisJ fQorCXJldHVybiBmYWxzZTsKK30KKworZXh0ZW50X2hvb2tzX3QgbWF4X3JlY29yZGluZ19leHRl bnRfaG9va3M7CisKK1RFU1RfQkVHSU4odGVzdF9vdmVyc2l6ZV90aHJlc2hvbGQpIHsKKwltYXhf cmVjb3JkaW5nX2V4dGVudF9ob29rcyA9IGVob29rc19kZWZhdWx0X2V4dGVudF9ob29rczsKKwlt YXhfcmVjb3JkaW5nX2V4dGVudF9ob29rcy5wdXJnZV9mb3JjZWQgPSAmcHVyZ2VfZm9yY2VkX3Jl Y29yZF9tYXg7CisJbWF4X3JlY29yZGluZ19leHRlbnRfaG9va3MuZGFsbG9jID0gJmRhbGxvY19y ZWNvcmRfbWF4OworCisJZXh0ZW50X2hvb2tzX3QgKmV4dGVudF9ob29rcyA9ICZtYXhfcmVjb3Jk aW5nX2V4dGVudF9ob29rczsKKworCWludCBlcnI7CisKKwl1bnNpZ25lZCBhcmVuYTsKKwlzaXpl X3QgYXJlbmFfc3ogPSBzaXplb2YoYXJlbmEpOworCWVyciA9IG1hbGxjdGwoImFyZW5hcy5jcmVh dGUiLCAodm9pZCAqKSZhcmVuYSwgJmFyZW5hX3N6LCBOVUxMLCAwKTsKKwlleHBlY3RfZF9lcSgw LCBlcnIsICJBcmVuYSBjcmVhdGlvbiBmYWlsZWQiKTsKKwlhcmVuYV9tYWxsY3RsKCJhcmVuYS4l dS5leHRlbnRfaG9va3MiLCBhcmVuYSwgTlVMTCwgTlVMTCwgJmV4dGVudF9ob29rcywKKwkgICAg c2l6ZW9mKGV4dGVudF9ob29rcykpOworCisJLyoKKwkgKiBUaGlzIHRlc3Qgd2lsbCBmdW5kYW1l bnRhbGx5IHJhY2Ugd2l0aCBwdXJnaW5nLCBzaW5jZSB3ZSdyZSBnb2luZyB0bworCSAqIGNoZWNr IHRoZSBkaXJ0eSBzdGF0cyB0byBzZWUgaWYgb3VyIG92ZXJzaXplZCBhbGxvY2F0aW9uIGdvdCBw dXJnZWQuCisJICogV2UgZG9uJ3Qgd2FudCBvdGhlciBwdXJnaW5nIHRvIGhhcHBlbiBhY2NpZGVu dGFsbHkuICBXZSBjYW4ndCBqdXN0CisJICogZGlzYWJsZSBwdXJnaW5nIGVudGlyZWx5LCB0aG91 Z2gsIHNpbmNlIHRoYXQgd2lsbCBhbHNvIGRpc2FibGUKKwkgKiBvdmVyc2l6ZSBwdXJnaW5nLiAg SnVzdCBzZXQgcHVyZ2luZyBpbnRlcnZhbHMgdG8gYmUgdmVyeSBsYXJnZS4KKwkgKi8KKwlzc2l6 ZV90IGRlY2F5X21zID0gMTAwICogMTAwMDsKKwlzc2l6ZV90IGRlY2F5X21zX3N6ID0gc2l6ZW9m KGRlY2F5X21zKTsKKwlhcmVuYV9tYWxsY3RsKCJhcmVuYS4ldS5kaXJ0eV9kZWNheV9tcyIsIGFy ZW5hLCBOVUxMLCBOVUxMLCAmZGVjYXlfbXMsCisJICAgIGRlY2F5X21zX3N6KTsKKwlhcmVuYV9t YWxsY3RsKCJhcmVuYS4ldS5tdXp6eV9kZWNheV9tcyIsIGFyZW5hLCBOVUxMLCBOVUxMLCAmZGVj YXlfbXMsCisJICAgIGRlY2F5X21zX3N6KTsKKworCS8qIENsZWFuIGV2ZXJ5dGhpbmcgb3V0LiAq LworCWFyZW5hX21hbGxjdGwoImFyZW5hLiV1LnB1cmdlIiwgYXJlbmEsIE5VTEwsIE5VTEwsIE5V TEwsIDApOworCW1heF9wdXJnZWQgPSAwOworCisJLyogU2V0IHRocmVzaG9sZCB0byAxTUIuICov CisJc2l6ZV90IHRocmVzaG9sZCA9IDEwMjQgKiAxMDI0OworCXNpemVfdCB0aHJlc2hvbGRfc3og PSBzaXplb2YodGhyZXNob2xkKTsKKwlhcmVuYV9tYWxsY3RsKCJhcmVuYS4ldS5vdmVyc2l6ZV90 aHJlc2hvbGQiLCBhcmVuYSwgTlVMTCwgTlVMTCwKKwkgICAgJnRocmVzaG9sZCwgdGhyZXNob2xk X3N6KTsKKworCS8qIEFsbG9jYXRpbmcgYW5kIGZyZWVpbmcgaGFsZiBhIG1lZ2FieXRlIHNob3Vs ZCBsZWF2ZSB0aGVtIGRpcnR5LiAqLworCXZvaWQgKnB0ciA9IG1hbGxvY3goNTEyICogMTAyNCwg TUFMTE9DWF9BUkVOQShhcmVuYSkpOworCWRhbGxvY3gocHRyLCBNQUxMT0NYX1RDQUNIRV9OT05F KTsKKwlpZiAoIWlzX2JhY2tncm91bmRfdGhyZWFkX2VuYWJsZWQoKSkgeworCQlleHBlY3RfenVf bHQobWF4X3B1cmdlZCwgNTEyICogMTAyNCwgIkV4cGVjdGVkIG5vIDUxMmsgcHVyZ2UiKTsKKwl9 CisKKwkvKiBQdXJnZSBhZ2FpbiB0byByZXNldCBldmVyeXRoaW5nIG91dC4gKi8KKwlhcmVuYV9t YWxsY3RsKCJhcmVuYS4ldS5wdXJnZSIsIGFyZW5hLCBOVUxMLCBOVUxMLCBOVUxMLCAwKTsKKwlt YXhfcHVyZ2VkID0gMDsKKworCS8qCisJICogQWxsb2NhdGluZyBhbmQgZnJlZWluZyAyIG1lZ2Fi eXRlcyBzaG91bGQgaGF2ZSB0aGVtIHB1cmdlZCBiZWNhdXNlIG9mCisJICogdGhlIG92ZXJzaXpl IHRocmVzaG9sZC4KKwkgKi8KKwlwdHIgPSBtYWxsb2N4KDIgKiAxMDI0ICogMTAyNCwgTUFMTE9D WF9BUkVOQShhcmVuYSkpOworCWRhbGxvY3gocHRyLCBNQUxMT0NYX1RDQUNIRV9OT05FKTsKKwll eHBlY3RfenVfZ2UobWF4X3B1cmdlZCwgMiAqIDEwMjQgKiAxMDI0LCAiRXhwZWN0ZWQgYSAyTUIg cHVyZ2UiKTsKK30KK1RFU1RfRU5ECisKK2ludAorbWFpbih2b2lkKSB7CisJcmV0dXJuIHRlc3Rf bm9fcmVlbnRyYW5jeSgKKwkgICAgdGVzdF9vdmVyc2l6ZV90aHJlc2hvbGRfZ2V0X3NldCwKKwkg ICAgdGVzdF9vdmVyc2l6ZV90aHJlc2hvbGQpOworfQorCgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJh c2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L3BhLmMgYi8zODktZHMtYmFz ZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvcGEuYwpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMWUyZjZlCi0tLSAvZGV2L251bGwKKysrIGIvMzg5LWRz LWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L3BhLmMKQEAgLTAsMCAr MSwxMjYgQEAKKyNpbmNsdWRlICJ0ZXN0L2plbWFsbG9jX3Rlc3QuaCIKKworI2luY2x1ZGUgImpl bWFsbG9jL2ludGVybmFsL3BhLmgiCisKK3N0YXRpYyB2b2lkICoKK2FsbG9jX2hvb2soZXh0ZW50 X2hvb2tzX3QgKmV4dGVudF9ob29rcywgdm9pZCAqbmV3X2FkZHIsIHNpemVfdCBzaXplLAorICAg IHNpemVfdCBhbGlnbm1lbnQsIGJvb2wgKnplcm8sIGJvb2wgKmNvbW1pdCwgdW5zaWduZWQgYXJl bmFfaW5kKSB7CisJdm9pZCAqcmV0ID0gcGFnZXNfbWFwKG5ld19hZGRyLCBzaXplLCBhbGlnbm1l bnQsIGNvbW1pdCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGJvb2wKK21lcmdlX2hvb2so ZXh0ZW50X2hvb2tzX3QgKmV4dGVudF9ob29rcywgdm9pZCAqYWRkcl9hLCBzaXplX3Qgc2l6ZV9h LAorICAgIHZvaWQgKmFkZHJfYiwgc2l6ZV90IHNpemVfYiwgYm9vbCBjb21taXR0ZWQsIHVuc2ln bmVkIGFyZW5hX2luZCkgeworCXJldHVybiAhbWFwc19jb2FsZXNjZTsKK30KKworc3RhdGljIGJv b2wKK3NwbGl0X2hvb2soZXh0ZW50X2hvb2tzX3QgKmV4dGVudF9ob29rcywgdm9pZCAqYWRkciwg c2l6ZV90IHNpemUsCisgICAgc2l6ZV90IHNpemVfYSwgc2l6ZV90IHNpemVfYiwgYm9vbCBjb21t aXR0ZWQsIHVuc2lnbmVkIGFyZW5hX2luZCkgeworCXJldHVybiAhbWFwc19jb2FsZXNjZTsKK30K Kworc3RhdGljIHZvaWQKK2luaXRfdGVzdF9leHRlbnRfaG9va3MoZXh0ZW50X2hvb2tzX3QgKmhv b2tzKSB7CisJLyoKKwkgKiBUaGUgZGVmYXVsdCBob29rcyBhcmUgbW9zdGx5IGZpbmUgZm9yIHRl c3RpbmcuICBBIGZldyBvZiB0aGVtLAorCSAqIHRob3VnaCwgYWNjZXNzIGdsb2JhbHMgKGFsbG9j IGZvciBkc3Mgc2V0dGluZyBpbiBhbiBhcmVuYSwgc3BsaXQgYW5kCisJICogbWVyZ2UgdG91Y2gg dGhlIGdsb2JhbCBlbWFwIHRvIGZpbmQgaGVhZCBzdGF0ZS4gIFRoZSBmaXJzdCBvZiB0aGVzZQor CSAqIGNhbiBiZSBmaXhlZCBieSBrZWVwaW5nIHRoYXQgc3RhdGUgd2l0aCB0aGUgaG9va3MsIHdo ZXJlIGl0IGxvZ2ljYWxseQorCSAqIGJlbG9uZ3MuICBUaGUgc2Vjb25kLCB0aG91Z2gsIHdlIGNh biBvbmx5IGZpeCB3aGVuIHdlIHVzZSB0aGUgZXh0ZW50CisJICogaG9vayBBUEkuCisJICovCisJ bWVtY3B5KGhvb2tzLCAmZWhvb2tzX2RlZmF1bHRfZXh0ZW50X2hvb2tzLCBzaXplb2YoZXh0ZW50 X2hvb2tzX3QpKTsKKwlob29rcy0+YWxsb2MgPSAmYWxsb2NfaG9vazsKKwlob29rcy0+bWVyZ2Ug PSAmbWVyZ2VfaG9vazsKKwlob29rcy0+c3BsaXQgPSAmc3BsaXRfaG9vazsKK30KKwordHlwZWRl ZiBzdHJ1Y3QgdGVzdF9kYXRhX3MgdGVzdF9kYXRhX3Q7CitzdHJ1Y3QgdGVzdF9kYXRhX3Mgewor CXBhX3NoYXJkX3Qgc2hhcmQ7CisJcGFfY2VudHJhbF90IGNlbnRyYWw7CisJYmFzZV90ICpiYXNl OworCWVtYXBfdCBlbWFwOworCXBhX3NoYXJkX3N0YXRzX3Qgc3RhdHM7CisJbWFsbG9jX211dGV4 X3Qgc3RhdHNfbXR4OworCWV4dGVudF9ob29rc190IGhvb2tzOworfTsKKwordGVzdF9kYXRhX3Qg KmluaXRfdGVzdF9kYXRhKHNzaXplX3QgZGlydHlfZGVjYXlfbXMsIHNzaXplX3QgbXV6enlfZGVj YXlfbXMpIHsKKwl0ZXN0X2RhdGFfdCAqdGVzdF9kYXRhID0gY2FsbG9jKDEsIHNpemVvZih0ZXN0 X2RhdGFfdCkpOworCWFzc2VydF9wdHJfbm90X251bGwodGVzdF9kYXRhLCAiIik7CisJaW5pdF90 ZXN0X2V4dGVudF9ob29rcygmdGVzdF9kYXRhLT5ob29rcyk7CisKKwliYXNlX3QgKmJhc2UgPSBi YXNlX25ldyhUU0ROX05VTEwsIC8qIGluZCAqLyAxLCAmdGVzdF9kYXRhLT5ob29rcywKKwkgICAg LyogbWV0YWRhdGFfdXNlX2hvb2tzICovIHRydWUpOworCWFzc2VydF9wdHJfbm90X251bGwoYmFz ZSwgIiIpOworCisJdGVzdF9kYXRhLT5iYXNlID0gYmFzZTsKKwlib29sIGVyciA9IGVtYXBfaW5p dCgmdGVzdF9kYXRhLT5lbWFwLCB0ZXN0X2RhdGEtPmJhc2UsCisJICAgIC8qIHplcm9lZCAqLyB0 cnVlKTsKKwlhc3NlcnRfZmFsc2UoZXJyLCAiIik7CisKKwluc3RpbWVfdCB0aW1lOworCW5zdGlt ZV9pbml0KCZ0aW1lLCAwKTsKKworCWVyciA9IHBhX2NlbnRyYWxfaW5pdCgmdGVzdF9kYXRhLT5j ZW50cmFsLCBiYXNlLCBvcHRfaHBhLAorCSAgICAmaHBhX2hvb2tzX2RlZmF1bHQpOworCWFzc2Vy dF9mYWxzZShlcnIsICIiKTsKKworCWNvbnN0IHNpemVfdCBwYV9vdmVyc2l6ZV90aHJlc2hvbGQg PSA4ICogMTAyNCAqIDEwMjQ7CisJZXJyID0gcGFfc2hhcmRfaW5pdChUU0ROX05VTEwsICZ0ZXN0 X2RhdGEtPnNoYXJkLCAmdGVzdF9kYXRhLT5jZW50cmFsLAorCSAgICAmdGVzdF9kYXRhLT5lbWFw LCB0ZXN0X2RhdGEtPmJhc2UsIC8qIGluZCAqLyAxLCAmdGVzdF9kYXRhLT5zdGF0cywKKwkgICAg JnRlc3RfZGF0YS0+c3RhdHNfbXR4LCAmdGltZSwgcGFfb3ZlcnNpemVfdGhyZXNob2xkLCBkaXJ0 eV9kZWNheV9tcywKKwkgICAgbXV6enlfZGVjYXlfbXMpOworCWFzc2VydF9mYWxzZShlcnIsICIi KTsKKworCXJldHVybiB0ZXN0X2RhdGE7Cit9CisKK3ZvaWQgZGVzdHJveV90ZXN0X2RhdGEodGVz dF9kYXRhX3QgKmRhdGEpIHsKKwliYXNlX2RlbGV0ZShUU0ROX05VTEwsIGRhdGEtPmJhc2UpOwor CWZyZWUoZGF0YSk7Cit9CisKK3N0YXRpYyB2b2lkICoKK2RvX2FsbG9jX2ZyZWVfcHVyZ2Uodm9p ZCAqYXJnKSB7CisJdGVzdF9kYXRhX3QgKnRlc3RfZGF0YSA9ICh0ZXN0X2RhdGFfdCAqKWFyZzsK Kwlmb3IgKGludCBpID0gMDsgaSA8IDEwICogMTAwMDsgaSsrKSB7CisJCWJvb2wgZGVmZXJyZWRf d29ya19nZW5lcmF0ZWQgPSBmYWxzZTsKKwkJZWRhdGFfdCAqZWRhdGEgPSBwYV9hbGxvYyhUU0RO X05VTEwsICZ0ZXN0X2RhdGEtPnNoYXJkLCBQQUdFLAorCQkgICAgUEFHRSwgLyogc2xhYiAqLyBm YWxzZSwgLyogc3ppbmQgKi8gMCwgLyogemVybyAqLyBmYWxzZSwKKwkJICAgIC8qIGd1YXJkZWQg Ki8gZmFsc2UsICZkZWZlcnJlZF93b3JrX2dlbmVyYXRlZCk7CisJCWFzc2VydF9wdHJfbm90X251 bGwoZWRhdGEsICIiKTsKKwkJcGFfZGFsbG9jKFRTRE5fTlVMTCwgJnRlc3RfZGF0YS0+c2hhcmQs IGVkYXRhLAorCQkgICAgJmRlZmVycmVkX3dvcmtfZ2VuZXJhdGVkKTsKKwkJbWFsbG9jX211dGV4 X2xvY2soVFNETl9OVUxMLAorCQkgICAgJnRlc3RfZGF0YS0+c2hhcmQucGFjLmRlY2F5X2RpcnR5 Lm10eCk7CisJCXBhY19kZWNheV9hbGwoVFNETl9OVUxMLCAmdGVzdF9kYXRhLT5zaGFyZC5wYWMs CisJCSAgICAmdGVzdF9kYXRhLT5zaGFyZC5wYWMuZGVjYXlfZGlydHksCisJCSAgICAmdGVzdF9k YXRhLT5zaGFyZC5wYWMuc3RhdHMtPmRlY2F5X2RpcnR5LAorCQkgICAgJnRlc3RfZGF0YS0+c2hh cmQucGFjLmVjYWNoZV9kaXJ0eSwgdHJ1ZSk7CisJCW1hbGxvY19tdXRleF91bmxvY2soVFNETl9O VUxMLAorCQkgICAgJnRlc3RfZGF0YS0+c2hhcmQucGFjLmRlY2F5X2RpcnR5Lm10eCk7CisJfQor CXJldHVybiBOVUxMOworfQorCitURVNUX0JFR0lOKHRlc3RfYWxsb2NfZnJlZV9wdXJnZV90aGRz KSB7CisJdGVzdF9kYXRhX3QgKnRlc3RfZGF0YSA9IGluaXRfdGVzdF9kYXRhKDAsIDApOworCXRo ZF90IHRoZHNbNF07CisJZm9yIChpbnQgaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJdGhkX2NyZWF0 ZSgmdGhkc1tpXSwgZG9fYWxsb2NfZnJlZV9wdXJnZSwgdGVzdF9kYXRhKTsKKwl9CisJZm9yIChp bnQgaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJdGhkX2pvaW4odGhkc1tpXSwgTlVMTCk7CisJfQor fQorVEVTVF9FTkQKKworaW50CittYWluKHZvaWQpIHsKKwlyZXR1cm4gdGVzdCgKKwkgICAgdGVz dF9hbGxvY19mcmVlX3B1cmdlX3RoZHMpOworfQoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMu My4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9wYWNrLmMgYi8zODktZHMtYmFzZS0z LjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvcGFjay5jCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2MzkyODIKLS0tIC9kZXYvbnVsbAorKysgYi8zODktZHMt YmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvcGFjay5jCkBAIC0wLDAg KzEsMTY2IEBACisjaW5jbHVkZSAidGVzdC9qZW1hbGxvY190ZXN0LmgiCisKKy8qCisgKiBTaXpl IGNsYXNzIHRoYXQgaXMgYSBkaXZpc29yIG9mIHRoZSBwYWdlIHNpemUsIGlkZWFsbHkgNCsgcmVn aW9ucyBwZXIgcnVuLgorICovCisjaWYgTEdfUEFHRSA8PSAxNAorI2RlZmluZSBTWgkoWlUoMSkg PDwgKExHX1BBR0UgLSAyKSkKKyNlbHNlCisjZGVmaW5lIFNaCVpVKDQwOTYpCisjZW5kaWYKKwor LyoKKyAqIE51bWJlciBvZiBzbGFicyB0byBjb25zdW1lIGF0IGhpZ2ggd2F0ZXIgbWFyay4gIFNo b3VsZCBiZSBhdCBsZWFzdCAyIHNvIHRoYXQKKyAqIGlmIG1tYXAoKWVkIG1lbW9yeSBncm93cyBk b3dud2FyZCwgZG93bndhcmQgZ3Jvd3RoIG9mIG1tYXAoKWVkIG1lbW9yeSBpcworICogdGVzdGVk LgorICovCisjZGVmaW5lIE5TTEFCUwk4CisKK3N0YXRpYyB1bnNpZ25lZAorYmluaW5kX2NvbXB1 dGUodm9pZCkgeworCXNpemVfdCBzejsKKwl1bnNpZ25lZCBuYmlucywgaTsKKworCXN6ID0gc2l6 ZW9mKG5iaW5zKTsKKwlleHBlY3RfZF9lcShtYWxsY3RsKCJhcmVuYXMubmJpbnMiLCAodm9pZCAq KSZuYmlucywgJnN6LCBOVUxMLCAwKSwgMCwKKwkgICAgIlVuZXhwZWN0ZWQgbWFsbGN0bCBmYWls dXJlIik7CisKKwlmb3IgKGkgPSAwOyBpIDwgbmJpbnM7IGkrKykgeworCQlzaXplX3QgbWliWzRd OworCQlzaXplX3QgbWlibGVuID0gc2l6ZW9mKG1pYikvc2l6ZW9mKHNpemVfdCk7CisJCXNpemVf dCBzaXplOworCisJCWV4cGVjdF9kX2VxKG1hbGxjdGxuYW1ldG9taWIoImFyZW5hcy5iaW4uMC5z aXplIiwgbWliLAorCQkgICAgJm1pYmxlbiksIDAsICJVbmV4cGVjdGVkIG1hbGxjdGxuYW1ldG9t YiBmYWlsdXJlIik7CisJCW1pYlsyXSA9IChzaXplX3QpaTsKKworCQlzeiA9IHNpemVvZihzaXpl KTsKKwkJZXhwZWN0X2RfZXEobWFsbGN0bGJ5bWliKG1pYiwgbWlibGVuLCAodm9pZCAqKSZzaXpl LCAmc3osIE5VTEwsCisJCSAgICAwKSwgMCwgIlVuZXhwZWN0ZWQgbWFsbGN0bGJ5bWliIGZhaWx1 cmUiKTsKKwkJaWYgKHNpemUgPT0gU1opIHsKKwkJCXJldHVybiBpOworCQl9CisJfQorCisJdGVz dF9mYWlsKCJVbmFibGUgdG8gY29tcHV0ZSBucmVnc19wZXJfcnVuIik7CisJcmV0dXJuIDA7Cit9 CisKK3N0YXRpYyBzaXplX3QKK25yZWdzX3Blcl9ydW5fY29tcHV0ZSh2b2lkKSB7CisJdWludDMy X3QgbnJlZ3M7CisJc2l6ZV90IHN6OworCXVuc2lnbmVkIGJpbmluZCA9IGJpbmluZF9jb21wdXRl KCk7CisJc2l6ZV90IG1pYls0XTsKKwlzaXplX3QgbWlibGVuID0gc2l6ZW9mKG1pYikvc2l6ZW9m KHNpemVfdCk7CisKKwlleHBlY3RfZF9lcShtYWxsY3RsbmFtZXRvbWliKCJhcmVuYXMuYmluLjAu bnJlZ3MiLCBtaWIsICZtaWJsZW4pLCAwLAorCSAgICAiVW5leHBlY3RlZCBtYWxsY3RsbmFtZXRv bWIgZmFpbHVyZSIpOworCW1pYlsyXSA9IChzaXplX3QpYmluaW5kOworCXN6ID0gc2l6ZW9mKG5y ZWdzKTsKKwlleHBlY3RfZF9lcShtYWxsY3RsYnltaWIobWliLCBtaWJsZW4sICh2b2lkICopJm5y ZWdzLCAmc3osIE5VTEwsCisJICAgIDApLCAwLCAiVW5leHBlY3RlZCBtYWxsY3RsYnltaWIgZmFp bHVyZSIpOworCXJldHVybiBucmVnczsKK30KKworc3RhdGljIHVuc2lnbmVkCithcmVuYXNfY3Jl YXRlX21hbGxjdGwodm9pZCkgeworCXVuc2lnbmVkIGFyZW5hX2luZDsKKwlzaXplX3Qgc3o7CisK KwlzeiA9IHNpemVvZihhcmVuYV9pbmQpOworCWV4cGVjdF9kX2VxKG1hbGxjdGwoImFyZW5hcy5j cmVhdGUiLCAodm9pZCAqKSZhcmVuYV9pbmQsICZzeiwgTlVMTCwgMCksCisJICAgIDAsICJFcnJv ciBpbiBhcmVuYXMuY3JlYXRlIik7CisKKwlyZXR1cm4gYXJlbmFfaW5kOworfQorCitzdGF0aWMg dm9pZAorYXJlbmFfcmVzZXRfbWFsbGN0bCh1bnNpZ25lZCBhcmVuYV9pbmQpIHsKKwlzaXplX3Qg bWliWzNdOworCXNpemVfdCBtaWJsZW4gPSBzaXplb2YobWliKS9zaXplb2Yoc2l6ZV90KTsKKwor CWV4cGVjdF9kX2VxKG1hbGxjdGxuYW1ldG9taWIoImFyZW5hLjAucmVzZXQiLCBtaWIsICZtaWJs ZW4pLCAwLAorCSAgICAiVW5leHBlY3RlZCBtYWxsY3RsbmFtZXRvbWliKCkgZmFpbHVyZSIpOwor CW1pYlsxXSA9IChzaXplX3QpYXJlbmFfaW5kOworCWV4cGVjdF9kX2VxKG1hbGxjdGxieW1pYiht aWIsIG1pYmxlbiwgTlVMTCwgTlVMTCwgTlVMTCwgMCksIDAsCisJICAgICJVbmV4cGVjdGVkIG1h bGxjdGxieW1pYigpIGZhaWx1cmUiKTsKK30KKworVEVTVF9CRUdJTih0ZXN0X3BhY2spIHsKKwli b29sIHByb2ZfZW5hYmxlZDsKKwlzaXplX3Qgc3ogPSBzaXplb2YocHJvZl9lbmFibGVkKTsKKwlp ZiAobWFsbGN0bCgib3B0LnByb2YiLCAodm9pZCAqKSZwcm9mX2VuYWJsZWQsICZzeiwgTlVMTCwg MCkgPT0gMCkgeworCQl0ZXN0X3NraXBfaWYocHJvZl9lbmFibGVkKTsKKwl9CisKKwl1bnNpZ25l ZCBhcmVuYV9pbmQgPSBhcmVuYXNfY3JlYXRlX21hbGxjdGwoKTsKKwlzaXplX3QgbnJlZ3NfcGVy X3J1biA9IG5yZWdzX3Blcl9ydW5fY29tcHV0ZSgpOworCXNpemVfdCBucmVncyA9IG5yZWdzX3Bl cl9ydW4gKiBOU0xBQlM7CisJVkFSSUFCTEVfQVJSQVkodm9pZCAqLCBwdHJzLCBucmVncyk7CisJ c2l6ZV90IGksIGosIG9mZnNldDsKKworCS8qIEZpbGwgbWF0cml4LiAqLworCWZvciAoaSA9IG9m ZnNldCA9IDA7IGkgPCBOU0xBQlM7IGkrKykgeworCQlmb3IgKGogPSAwOyBqIDwgbnJlZ3NfcGVy X3J1bjsgaisrKSB7CisJCQl2b2lkICpwID0gbWFsbG9jeChTWiwgTUFMTE9DWF9BUkVOQShhcmVu YV9pbmQpIHwKKwkJCSAgICBNQUxMT0NYX1RDQUNIRV9OT05FKTsKKwkJCWV4cGVjdF9wdHJfbm90 X251bGwocCwKKwkJCSAgICAiVW5leHBlY3RlZCBtYWxsb2N4KCV6dSwgTUFMTE9DWF9BUkVOQSgl dSkgfCIKKwkJCSAgICAiIE1BTExPQ1hfVENBQ0hFX05PTkUpIGZhaWx1cmUsIHJ1bj0lenUsIHJl Zz0lenUiLAorCQkJICAgIFNaLCBhcmVuYV9pbmQsIGksIGopOworCQkJcHRyc1soaSAqIG5yZWdz X3Blcl9ydW4pICsgal0gPSBwOworCQl9CisJfQorCisJLyoKKwkgKiBGcmVlIGFsbCBidXQgb25l IHJlZ2lvbiBvZiBlYWNoIHJ1biwgYnV0IHJvdGF0ZSB3aGljaCByZWdpb24gaXMKKwkgKiBwcmVz ZXJ2ZWQsIHNvIHRoYXQgc3Vic2VxdWVudCBhbGxvY2F0aW9ucyBleGVyY2lzZSB0aGUgd2l0aGlu LXJ1bgorCSAqIGxheW91dCBwb2xpY3kuCisJICovCisJb2Zmc2V0ID0gMDsKKwlmb3IgKGkgPSBv ZmZzZXQgPSAwOworCSAgICBpIDwgTlNMQUJTOworCSAgICBpKyssIG9mZnNldCA9IChvZmZzZXQg KyAxKSAlIG5yZWdzX3Blcl9ydW4pIHsKKwkJZm9yIChqID0gMDsgaiA8IG5yZWdzX3Blcl9ydW47 IGorKykgeworCQkJdm9pZCAqcCA9IHB0cnNbKGkgKiBucmVnc19wZXJfcnVuKSArIGpdOworCQkJ aWYgKG9mZnNldCA9PSBqKSB7CisJCQkJY29udGludWU7CisJCQl9CisJCQlkYWxsb2N4KHAsIE1B TExPQ1hfQVJFTkEoYXJlbmFfaW5kKSB8CisJCQkgICAgTUFMTE9DWF9UQ0FDSEVfTk9ORSk7CisJ CX0KKwl9CisKKwkvKgorCSAqIExvZ2ljYWxseSByZWZpbGwgbWF0cml4LCBza2lwcGluZyBwcmVz ZXJ2ZWQgcmVnaW9ucyBhbmQgdmVyaWZ5aW5nCisJICogdGhhdCB0aGUgbWF0cml4IGlzIHVubW9k aWZpZWQuCisJICovCisJb2Zmc2V0ID0gMDsKKwlmb3IgKGkgPSBvZmZzZXQgPSAwOworCSAgICBp IDwgTlNMQUJTOworCSAgICBpKyssIG9mZnNldCA9IChvZmZzZXQgKyAxKSAlIG5yZWdzX3Blcl9y dW4pIHsKKwkJZm9yIChqID0gMDsgaiA8IG5yZWdzX3Blcl9ydW47IGorKykgeworCQkJdm9pZCAq cDsKKworCQkJaWYgKG9mZnNldCA9PSBqKSB7CisJCQkJY29udGludWU7CisJCQl9CisJCQlwID0g bWFsbG9jeChTWiwgTUFMTE9DWF9BUkVOQShhcmVuYV9pbmQpIHwKKwkJCSAgICBNQUxMT0NYX1RD QUNIRV9OT05FKTsKKwkJCWV4cGVjdF9wdHJfZXEocCwgcHRyc1soaSAqIG5yZWdzX3Blcl9ydW4p ICsgal0sCisJCQkgICAgIlVuZXhwZWN0ZWQgcmVmaWxsIGRpc2NyZXBhbmN5LCBydW49JXp1LCBy ZWc9JXp1XG4iLAorCQkJICAgIGksIGopOworCQl9CisJfQorCisJLyogQ2xlYW4gdXAuICovCisJ YXJlbmFfcmVzZXRfbWFsbGN0bChhcmVuYV9pbmQpOworfQorVEVTVF9FTkQKKworaW50CittYWlu KHZvaWQpIHsKKwlyZXR1cm4gdGVzdCgKKwkgICAgdGVzdF9wYWNrKTsKK30KCmRpZmYgLS1naXQg YS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvcGFjay5z aCBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9wYWNr LnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmNDUxNDgKLS0tIC9kZXYv bnVsbAorKysgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3Vu aXQvcGFjay5zaApAQCAtMCwwICsxLDQgQEAKKyMhL2Jpbi9zaAorCisjIEltbWVkaWF0ZWx5IHB1 cmdlIHRvIG1pbmltaXplIGZyYWdtZW50YXRpb24uCitleHBvcnQgTUFMTE9DX0NPTkY9ImRpcnR5 X2RlY2F5X21zOjAsbXV6enlfZGVjYXlfbXM6MCIKCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0z LjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvcGFnZXMuYyBiLzM4OS1kcy1iYXNl LTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9wYWdlcy5jCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkZmQxYTcKLS0tIC9kZXYvbnVsbAorKysgYi8zODkt ZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvcGFnZXMuYwpAQCAt MCwwICsxLDI5IEBACisjaW5jbHVkZSAidGVzdC9qZW1hbGxvY190ZXN0LmgiCisKK1RFU1RfQkVH SU4odGVzdF9wYWdlc19odWdlKSB7CisJc2l6ZV90IGFsbG9jX3NpemU7CisJYm9vbCBjb21taXQ7 CisJdm9pZCAqcGFnZXMsICpodWdlcGFnZTsKKworCWFsbG9jX3NpemUgPSBIVUdFUEFHRSAqIDIg LSBQQUdFOworCWNvbW1pdCA9IHRydWU7CisJcGFnZXMgPSBwYWdlc19tYXAoTlVMTCwgYWxsb2Nf c2l6ZSwgUEFHRSwgJmNvbW1pdCk7CisJZXhwZWN0X3B0cl9ub3RfbnVsbChwYWdlcywgIlVuZXhw ZWN0ZWQgcGFnZXNfbWFwKCkgZXJyb3IiKTsKKworCWlmIChpbml0X3N5c3RlbV90aHBfbW9kZSA9 PSB0aHBfbW9kZV9kZWZhdWx0KSB7CisJICAgIGh1Z2VwYWdlID0gKHZvaWQgKikoQUxJR05NRU5U X0NFSUxJTkcoKHVpbnRwdHJfdClwYWdlcywgSFVHRVBBR0UpKTsKKwkgICAgZXhwZWN0X2JfbmUo cGFnZXNfaHVnZShodWdlcGFnZSwgSFVHRVBBR0UpLCBoYXZlX21hZHZpc2VfaHVnZSwKKwkgICAg ICAgICJVbmV4cGVjdGVkIHBhZ2VzX2h1Z2UoKSByZXN1bHQiKTsKKwkgICAgZXhwZWN0X2ZhbHNl KHBhZ2VzX25vaHVnZShodWdlcGFnZSwgSFVHRVBBR0UpLAorCSAgICAgICAgIlVuZXhwZWN0ZWQg cGFnZXNfbm9odWdlKCkgcmVzdWx0Iik7CisJfQorCisJcGFnZXNfdW5tYXAocGFnZXMsIGFsbG9j X3NpemUpOworfQorVEVTVF9FTkQKKworaW50CittYWluKHZvaWQpIHsKKwlyZXR1cm4gdGVzdCgK KwkgICAgdGVzdF9wYWdlc19odWdlKTsKK30KCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMu MC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvcGVhay5jIGIvMzg5LWRzLWJhc2UtMy4z LjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L3BlYWsuYwpuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwLi4xMTEyOTc4Ci0tLSAvZGV2L251bGwKKysrIGIvMzg5LWRzLWJh c2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L3BlYWsuYwpAQCAtMCwwICsx LDQ3IEBACisjaW5jbHVkZSAidGVzdC9qZW1hbGxvY190ZXN0LmgiCisKKyNpbmNsdWRlICJqZW1h bGxvYy9pbnRlcm5hbC9wZWFrLmgiCisKK1RFU1RfQkVHSU4odGVzdF9wZWFrKSB7CisJcGVha190 IHBlYWsgPSBQRUFLX0lOSVRJQUxJWkVSOworCWV4cGVjdF91NjRfZXEoMCwgcGVha19tYXgoJnBl YWspLAorCSAgICAiUGVhayBzaG91bGQgYmUgemVybyBhdCBpbml0aWFsaXphdGlvbiIpOworCXBl YWtfdXBkYXRlKCZwZWFrLCAxMDAsIDUwKTsKKwlleHBlY3RfdTY0X2VxKDUwLCBwZWFrX21heCgm cGVhayksCisJICAgICJNaXNzZWQgdXBkYXRlIik7CisJcGVha191cGRhdGUoJnBlYWssIDEwMCwg MTAwKTsKKwlleHBlY3RfdTY0X2VxKDUwLCBwZWFrX21heCgmcGVhayksICJEYWxsb2NzIHNob3Vs ZG4ndCBjaGFuZ2UgcGVhayIpOworCXBlYWtfdXBkYXRlKCZwZWFrLCAxMDAsIDIwMCk7CisJZXhw ZWN0X3U2NF9lcSg1MCwgcGVha19tYXgoJnBlYWspLCAiRGFsbG9jcyBzaG91bGRuJ3QgY2hhbmdl IHBlYWsiKTsKKwlwZWFrX3VwZGF0ZSgmcGVhaywgMjAwLCAyMDApOworCWV4cGVjdF91NjRfZXEo NTAsIHBlYWtfbWF4KCZwZWFrKSwgIkhhdmVuJ3QgcmVhY2hlZCBwZWFrIGFnYWluIik7CisJcGVh a191cGRhdGUoJnBlYWssIDMwMCwgMjAwKTsKKwlleHBlY3RfdTY0X2VxKDEwMCwgcGVha19tYXgo JnBlYWspLCAiTWlzc2VkIGFuIHVwZGF0ZS4iKTsKKwlwZWFrX3NldF96ZXJvKCZwZWFrLCAzMDAs IDIwMCk7CisJZXhwZWN0X3U2NF9lcSgwLCBwZWFrX21heCgmcGVhayksICJObyBlZmZlY3QgZnJv bSB6ZXJvaW5nIik7CisJcGVha191cGRhdGUoJnBlYWssIDMwMCwgMzAwKTsKKwlleHBlY3RfdTY0 X2VxKDAsIHBlYWtfbWF4KCZwZWFrKSwgIkRhbGxvYyBzaG91bGRuJ3QgY2hhbmdlIHBlYWsiKTsK KwlwZWFrX3VwZGF0ZSgmcGVhaywgNDAwLCAzMDApOworCWV4cGVjdF91NjRfZXEoMCwgcGVha19t YXgoJnBlYWspLCAiU2hvdWxkIHN0aWxsIGJlIG5ldCBuZWdhdGl2ZSIpOworCXBlYWtfdXBkYXRl KCZwZWFrLCA1MDAsIDMwMCk7CisJZXhwZWN0X3U2NF9lcSgxMDAsIHBlYWtfbWF4KCZwZWFrKSwg Ik1pc3NlZCBhbiB1cGRhdGUuIik7CisJLyoKKwkgKiBBYm92ZSwgd2Ugc2V0IHRvIHplcm8gd2hp bGUgYSBuZXQgYWxsb2NhdG9yOyBsZXQncyB0cnkgYXMgYQorCSAqIG5ldC1kZWFsbG9jYXRvci4K KwkgKi8KKwlwZWFrX3NldF96ZXJvKCZwZWFrLCA2MDAsIDcwMCk7CisJZXhwZWN0X3U2NF9lcSgw LCBwZWFrX21heCgmcGVhayksICJObyBlZmZlY3QgZnJvbSB6ZXJvaW5nLiIpOworCXBlYWtfdXBk YXRlKCZwZWFrLCA2MDAsIDgwMCk7CisJZXhwZWN0X3U2NF9lcSgwLCBwZWFrX21heCgmcGVhayks ICJEYWxsb2Mgc2hvdWxkbid0IGNoYW5nZSBwZWFrLiIpOworCXBlYWtfdXBkYXRlKCZwZWFrLCA3 MDAsIDgwMCk7CisJZXhwZWN0X3U2NF9lcSgwLCBwZWFrX21heCgmcGVhayksICJTaG91bGQgc3Rp bGwgYmUgbmV0IG5lZ2F0aXZlLiIpOworCXBlYWtfdXBkYXRlKCZwZWFrLCA4MDAsIDgwMCk7CisJ ZXhwZWN0X3U2NF9lcSgxMDAsIHBlYWtfbWF4KCZwZWFrKSwgIk1pc3NlZCBhbiB1cGRhdGUuIik7 Cit9CitURVNUX0VORAorCitpbnQKK21haW4odm9pZCkgeworCXJldHVybiB0ZXN0X25vX3JlZW50 cmFuY3koCisJICAgIHRlc3RfcGVhayk7Cit9CgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4z LjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L3BoLmMgYi8zODktZHMtYmFzZS0zLjMu MC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvcGguYwpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwLi4yOGY1ZTQ4Ci0tLSAvZGV2L251bGwKKysrIGIvMzg5LWRzLWJhc2Ut My4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L3BoLmMKQEAgLTAsMCArMSwzMzAg QEAKKyNpbmNsdWRlICJ0ZXN0L2plbWFsbG9jX3Rlc3QuaCIKKworI2luY2x1ZGUgImplbWFsbG9j L2ludGVybmFsL3BoLmgiCisKK3R5cGVkZWYgc3RydWN0IG5vZGVfcyBub2RlX3Q7CitwaF9zdHJ1 Y3RzKGhlYXAsIG5vZGVfdCk7CisKK3N0cnVjdCBub2RlX3MgeworI2RlZmluZSBOT0RFX01BR0lD IDB4OTgyM2FmN2UKKwl1aW50MzJfdCBtYWdpYzsKKwloZWFwX2xpbmtfdCBsaW5rOworCXVpbnQ2 NF90IGtleTsKK307CisKK3N0YXRpYyBpbnQKK25vZGVfY21wKGNvbnN0IG5vZGVfdCAqYSwgY29u c3Qgbm9kZV90ICpiKSB7CisJaW50IHJldDsKKworCXJldCA9IChhLT5rZXkgPiBiLT5rZXkpIC0g KGEtPmtleSA8IGItPmtleSk7CisJaWYgKHJldCA9PSAwKSB7CisJCS8qCisJCSAqIER1cGxpY2F0 ZXMgYXJlIG5vdCBhbGxvd2VkIGluIHRoZSBoZWFwLCBzbyBmb3JjZSBhbgorCQkgKiBhcmJpdHJh cnkgb3JkZXJpbmcgZm9yIG5vbi1pZGVudGljYWwgaXRlbXMgd2l0aCBlcXVhbCBrZXlzLgorCQkg Ki8KKwkJcmV0ID0gKCgodWludHB0cl90KWEpID4gKCh1aW50cHRyX3QpYikpCisJCSAgICAtICgo KHVpbnRwdHJfdClhKSA8ICgodWludHB0cl90KWIpKTsKKwl9CisJcmV0dXJuIHJldDsKK30KKwor c3RhdGljIGludAorbm9kZV9jbXBfbWFnaWMoY29uc3Qgbm9kZV90ICphLCBjb25zdCBub2RlX3Qg KmIpIHsKKworCWV4cGVjdF91MzJfZXEoYS0+bWFnaWMsIE5PREVfTUFHSUMsICJCYWQgbWFnaWMi KTsKKwlleHBlY3RfdTMyX2VxKGItPm1hZ2ljLCBOT0RFX01BR0lDLCAiQmFkIG1hZ2ljIik7CisK KwlyZXR1cm4gbm9kZV9jbXAoYSwgYik7Cit9CisKK3BoX2dlbihzdGF0aWMsIGhlYXAsIG5vZGVf dCwgbGluaywgbm9kZV9jbXBfbWFnaWMpOworCitzdGF0aWMgbm9kZV90ICoKK25vZGVfbmV4dF9n ZXQoY29uc3Qgbm9kZV90ICpub2RlKSB7CisJcmV0dXJuIHBobl9uZXh0X2dldCgobm9kZV90ICop bm9kZSwgb2Zmc2V0b2Yobm9kZV90LCBsaW5rKSk7Cit9CisKK3N0YXRpYyBub2RlX3QgKgorbm9k ZV9wcmV2X2dldChjb25zdCBub2RlX3QgKm5vZGUpIHsKKwlyZXR1cm4gcGhuX3ByZXZfZ2V0KChu b2RlX3QgKilub2RlLCBvZmZzZXRvZihub2RlX3QsIGxpbmspKTsKK30KKworc3RhdGljIG5vZGVf dCAqCitub2RlX2xjaGlsZF9nZXQoY29uc3Qgbm9kZV90ICpub2RlKSB7CisJcmV0dXJuIHBobl9s Y2hpbGRfZ2V0KChub2RlX3QgKilub2RlLCBvZmZzZXRvZihub2RlX3QsIGxpbmspKTsKK30KKwor c3RhdGljIHZvaWQKK25vZGVfcHJpbnQoY29uc3Qgbm9kZV90ICpub2RlLCB1bnNpZ25lZCBkZXB0 aCkgeworCXVuc2lnbmVkIGk7CisJbm9kZV90ICpsZWZ0bW9zdF9jaGlsZCwgKnNpYmxpbmc7CisK Kwlmb3IgKGkgPSAwOyBpIDwgZGVwdGg7IGkrKykgeworCQltYWxsb2NfcHJpbnRmKCJcdCIpOwor CX0KKwltYWxsb2NfcHJpbnRmKCIlMiJGTVR1NjQiXG4iLCBub2RlLT5rZXkpOworCisJbGVmdG1v c3RfY2hpbGQgPSBub2RlX2xjaGlsZF9nZXQobm9kZSk7CisJaWYgKGxlZnRtb3N0X2NoaWxkID09 IE5VTEwpIHsKKwkJcmV0dXJuOworCX0KKwlub2RlX3ByaW50KGxlZnRtb3N0X2NoaWxkLCBkZXB0 aCArIDEpOworCisJZm9yIChzaWJsaW5nID0gbm9kZV9uZXh0X2dldChsZWZ0bW9zdF9jaGlsZCk7 IHNpYmxpbmcgIT0KKwkgICAgTlVMTDsgc2libGluZyA9IG5vZGVfbmV4dF9nZXQoc2libGluZykp IHsKKwkJbm9kZV9wcmludChzaWJsaW5nLCBkZXB0aCArIDEpOworCX0KK30KKworc3RhdGljIHZv aWQKK2hlYXBfcHJpbnQoY29uc3QgaGVhcF90ICpoZWFwKSB7CisJbm9kZV90ICphdXhlbG07CisK KwltYWxsb2NfcHJpbnRmKCJ2dnYgaGVhcCAlcCB2dnZcbiIsIGhlYXApOworCWlmIChoZWFwLT5w aC5yb290ID09IE5VTEwpIHsKKwkJZ290byBsYWJlbF9yZXR1cm47CisJfQorCisJbm9kZV9wcmlu dChoZWFwLT5waC5yb290LCAwKTsKKworCWZvciAoYXV4ZWxtID0gbm9kZV9uZXh0X2dldChoZWFw LT5waC5yb290KTsgYXV4ZWxtICE9IE5VTEw7CisJICAgIGF1eGVsbSA9IG5vZGVfbmV4dF9nZXQo YXV4ZWxtKSkgeworCQlleHBlY3RfcHRyX2VxKG5vZGVfbmV4dF9nZXQobm9kZV9wcmV2X2dldChh dXhlbG0pKSwgYXV4ZWxtLAorCQkgICAgImF1eGVsbSdzIHByZXYgZG9lc24ndCBsaW5rIHRvIGF1 eGVsbSIpOworCQlub2RlX3ByaW50KGF1eGVsbSwgMCk7CisJfQorCitsYWJlbF9yZXR1cm46CisJ bWFsbG9jX3ByaW50ZigiXl5eIGhlYXAgJXAgXl5eXG4iLCBoZWFwKTsKK30KKworc3RhdGljIHVu c2lnbmVkCitub2RlX3ZhbGlkYXRlKGNvbnN0IG5vZGVfdCAqbm9kZSwgY29uc3Qgbm9kZV90ICpw YXJlbnQpIHsKKwl1bnNpZ25lZCBubm9kZXMgPSAxOworCW5vZGVfdCAqbGVmdG1vc3RfY2hpbGQs ICpzaWJsaW5nOworCisJaWYgKHBhcmVudCAhPSBOVUxMKSB7CisJCWV4cGVjdF9kX2dlKG5vZGVf Y21wX21hZ2ljKG5vZGUsIHBhcmVudCksIDAsCisJCSAgICAiQ2hpbGQgaXMgbGVzcyB0aGFuIHBh cmVudCIpOworCX0KKworCWxlZnRtb3N0X2NoaWxkID0gbm9kZV9sY2hpbGRfZ2V0KG5vZGUpOwor CWlmIChsZWZ0bW9zdF9jaGlsZCA9PSBOVUxMKSB7CisJCXJldHVybiBubm9kZXM7CisJfQorCWV4 cGVjdF9wdHJfZXEobm9kZV9wcmV2X2dldChsZWZ0bW9zdF9jaGlsZCksCisJICAgICh2b2lkICop bm9kZSwgIkxlZnRtb3N0IGNoaWxkIGRvZXMgbm90IGxpbmsgdG8gbm9kZSIpOworCW5ub2RlcyAr PSBub2RlX3ZhbGlkYXRlKGxlZnRtb3N0X2NoaWxkLCBub2RlKTsKKworCWZvciAoc2libGluZyA9 IG5vZGVfbmV4dF9nZXQobGVmdG1vc3RfY2hpbGQpOyBzaWJsaW5nICE9CisJICAgIE5VTEw7IHNp YmxpbmcgPSBub2RlX25leHRfZ2V0KHNpYmxpbmcpKSB7CisJCWV4cGVjdF9wdHJfZXEobm9kZV9u ZXh0X2dldChub2RlX3ByZXZfZ2V0KHNpYmxpbmcpKSwgc2libGluZywKKwkJICAgICJzaWJsaW5n J3MgcHJldiBkb2Vzbid0IGxpbmsgdG8gc2libGluZyIpOworCQlubm9kZXMgKz0gbm9kZV92YWxp ZGF0ZShzaWJsaW5nLCBub2RlKTsKKwl9CisJcmV0dXJuIG5ub2RlczsKK30KKworc3RhdGljIHVu c2lnbmVkCitoZWFwX3ZhbGlkYXRlKGNvbnN0IGhlYXBfdCAqaGVhcCkgeworCXVuc2lnbmVkIG5u b2RlcyA9IDA7CisJbm9kZV90ICphdXhlbG07CisKKwlpZiAoaGVhcC0+cGgucm9vdCA9PSBOVUxM KSB7CisJCWdvdG8gbGFiZWxfcmV0dXJuOworCX0KKworCW5ub2RlcyArPSBub2RlX3ZhbGlkYXRl KGhlYXAtPnBoLnJvb3QsIE5VTEwpOworCisJZm9yIChhdXhlbG0gPSBub2RlX25leHRfZ2V0KGhl YXAtPnBoLnJvb3QpOyBhdXhlbG0gIT0gTlVMTDsKKwkgICAgYXV4ZWxtID0gbm9kZV9uZXh0X2dl dChhdXhlbG0pKSB7CisJCWV4cGVjdF9wdHJfZXEobm9kZV9uZXh0X2dldChub2RlX3ByZXZfZ2V0 KGF1eGVsbSkpLCBhdXhlbG0sCisJCSAgICAiYXV4ZWxtJ3MgcHJldiBkb2Vzbid0IGxpbmsgdG8g YXV4ZWxtIik7CisJCW5ub2RlcyArPSBub2RlX3ZhbGlkYXRlKGF1eGVsbSwgTlVMTCk7CisJfQor CitsYWJlbF9yZXR1cm46CisJaWYgKGZhbHNlKSB7CisJCWhlYXBfcHJpbnQoaGVhcCk7CisJfQor CXJldHVybiBubm9kZXM7Cit9CisKK1RFU1RfQkVHSU4odGVzdF9waF9lbXB0eSkgeworCWhlYXBf dCBoZWFwOworCisJaGVhcF9uZXcoJmhlYXApOworCWV4cGVjdF90cnVlKGhlYXBfZW1wdHkoJmhl YXApLCAiSGVhcCBzaG91bGQgYmUgZW1wdHkiKTsKKwlleHBlY3RfcHRyX251bGwoaGVhcF9maXJz dCgmaGVhcCksICJVbmV4cGVjdGVkIG5vZGUiKTsKKwlleHBlY3RfcHRyX251bGwoaGVhcF9hbnko JmhlYXApLCAiVW5leHBlY3RlZCBub2RlIik7Cit9CitURVNUX0VORAorCitzdGF0aWMgdm9pZAor bm9kZV9yZW1vdmUoaGVhcF90ICpoZWFwLCBub2RlX3QgKm5vZGUpIHsKKwloZWFwX3JlbW92ZSho ZWFwLCBub2RlKTsKKworCW5vZGUtPm1hZ2ljID0gMDsKK30KKworc3RhdGljIG5vZGVfdCAqCitu b2RlX3JlbW92ZV9maXJzdChoZWFwX3QgKmhlYXApIHsKKwlub2RlX3QgKm5vZGUgPSBoZWFwX3Jl bW92ZV9maXJzdChoZWFwKTsKKwlub2RlLT5tYWdpYyA9IDA7CisJcmV0dXJuIG5vZGU7Cit9CisK K3N0YXRpYyBub2RlX3QgKgorbm9kZV9yZW1vdmVfYW55KGhlYXBfdCAqaGVhcCkgeworCW5vZGVf dCAqbm9kZSA9IGhlYXBfcmVtb3ZlX2FueShoZWFwKTsKKwlub2RlLT5tYWdpYyA9IDA7CisJcmV0 dXJuIG5vZGU7Cit9CisKK1RFU1RfQkVHSU4odGVzdF9waF9yYW5kb20pIHsKKyNkZWZpbmUgTk5P REVTIDI1CisjZGVmaW5lIE5CQUdTIDI1MAorI2RlZmluZSBTRUVEIDQyCisJc2ZtdF90ICpzZm10 OworCXVpbnQ2NF90IGJhZ1tOTk9ERVNdOworCWhlYXBfdCBoZWFwOworCW5vZGVfdCBub2Rlc1tO Tk9ERVNdOworCXVuc2lnbmVkIGksIGosIGs7CisKKwlzZm10ID0gaW5pdF9nZW5fcmFuZChTRUVE KTsKKwlmb3IgKGkgPSAwOyBpIDwgTkJBR1M7IGkrKykgeworCQlzd2l0Y2ggKGkpIHsKKwkJY2Fz ZSAwOgorCQkJLyogSW5zZXJ0IGluIG9yZGVyLiAqLworCQkJZm9yIChqID0gMDsgaiA8IE5OT0RF UzsgaisrKSB7CisJCQkJYmFnW2pdID0gajsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIDE6CisJ CQkvKiBJbnNlcnQgaW4gcmV2ZXJzZSBvcmRlci4gKi8KKwkJCWZvciAoaiA9IDA7IGogPCBOTk9E RVM7IGorKykgeworCQkJCWJhZ1tqXSA9IE5OT0RFUyAtIGogLSAxOworCQkJfQorCQkJYnJlYWs7 CisJCWRlZmF1bHQ6CisJCQlmb3IgKGogPSAwOyBqIDwgTk5PREVTOyBqKyspIHsKKwkJCQliYWdb al0gPSBnZW5fcmFuZDY0X3JhbmdlKHNmbXQsIE5OT0RFUyk7CisJCQl9CisJCX0KKworCQlmb3Ig KGogPSAxOyBqIDw9IE5OT0RFUzsgaisrKSB7CisJCQkvKiBJbml0aWFsaXplIGhlYXAgYW5kIG5v ZGVzLiAqLworCQkJaGVhcF9uZXcoJmhlYXApOworCQkJZXhwZWN0X3VfZXEoaGVhcF92YWxpZGF0 ZSgmaGVhcCksIDAsCisJCQkgICAgIkluY29ycmVjdCBub2RlIGNvdW50Iik7CisJCQlmb3IgKGsg PSAwOyBrIDwgajsgaysrKSB7CisJCQkJbm9kZXNba10ubWFnaWMgPSBOT0RFX01BR0lDOworCQkJ CW5vZGVzW2tdLmtleSA9IGJhZ1trXTsKKwkJCX0KKworCQkJLyogSW5zZXJ0IG5vZGVzLiAqLwor CQkJZm9yIChrID0gMDsgayA8IGo7IGsrKykgeworCQkJCWhlYXBfaW5zZXJ0KCZoZWFwLCAmbm9k ZXNba10pOworCQkJCWlmIChpICUgMTMgPT0gMTIpIHsKKwkJCQkJZXhwZWN0X3B0cl9ub3RfbnVs bChoZWFwX2FueSgmaGVhcCksCisJCQkJCSAgICAiSGVhcCBzaG91bGQgbm90IGJlIGVtcHR5Iik7 CisJCQkJCS8qIFRyaWdnZXIgbWVyZ2luZy4gKi8KKwkJCQkJZXhwZWN0X3B0cl9ub3RfbnVsbCho ZWFwX2ZpcnN0KCZoZWFwKSwKKwkJCQkJICAgICJIZWFwIHNob3VsZCBub3QgYmUgZW1wdHkiKTsK KwkJCQl9CisJCQkJZXhwZWN0X3VfZXEoaGVhcF92YWxpZGF0ZSgmaGVhcCksIGsgKyAxLAorCQkJ CSAgICAiSW5jb3JyZWN0IG5vZGUgY291bnQiKTsKKwkJCX0KKworCQkJZXhwZWN0X2ZhbHNlKGhl YXBfZW1wdHkoJmhlYXApLAorCQkJICAgICJIZWFwIHNob3VsZCBub3QgYmUgZW1wdHkiKTsKKwor CQkJLyogUmVtb3ZlIG5vZGVzLiAqLworCQkJc3dpdGNoIChpICUgNikgeworCQkJY2FzZSAwOgor CQkJCWZvciAoayA9IDA7IGsgPCBqOyBrKyspIHsKKwkJCQkJZXhwZWN0X3VfZXEoaGVhcF92YWxp ZGF0ZSgmaGVhcCksIGogLSBrLAorCQkJCQkgICAgIkluY29ycmVjdCBub2RlIGNvdW50Iik7CisJ CQkJCW5vZGVfcmVtb3ZlKCZoZWFwLCAmbm9kZXNba10pOworCQkJCQlleHBlY3RfdV9lcShoZWFw X3ZhbGlkYXRlKCZoZWFwKSwgaiAtIGsKKwkJCQkJICAgIC0gMSwgIkluY29ycmVjdCBub2RlIGNv dW50Iik7CisJCQkJfQorCQkJCWJyZWFrOworCQkJY2FzZSAxOgorCQkJCWZvciAoayA9IGo7IGsg PiAwOyBrLS0pIHsKKwkJCQkJbm9kZV9yZW1vdmUoJmhlYXAsICZub2Rlc1trLTFdKTsKKwkJCQkJ ZXhwZWN0X3VfZXEoaGVhcF92YWxpZGF0ZSgmaGVhcCksIGsgLSAxLAorCQkJCQkgICAgIkluY29y cmVjdCBub2RlIGNvdW50Iik7CisJCQkJfQorCQkJCWJyZWFrOworCQkJY2FzZSAyOiB7CisJCQkJ bm9kZV90ICpwcmV2ID0gTlVMTDsKKwkJCQlmb3IgKGsgPSAwOyBrIDwgajsgaysrKSB7CisJCQkJ CW5vZGVfdCAqbm9kZSA9IG5vZGVfcmVtb3ZlX2ZpcnN0KCZoZWFwKTsKKwkJCQkJZXhwZWN0X3Vf ZXEoaGVhcF92YWxpZGF0ZSgmaGVhcCksIGogLSBrCisJCQkJCSAgICAtIDEsICJJbmNvcnJlY3Qg bm9kZSBjb3VudCIpOworCQkJCQlpZiAocHJldiAhPSBOVUxMKSB7CisJCQkJCQlleHBlY3RfZF9n ZShub2RlX2NtcChub2RlLAorCQkJCQkJICAgIHByZXYpLCAwLAorCQkJCQkJICAgICJCYWQgcmVt b3ZhbCBvcmRlciIpOworCQkJCQl9CisJCQkJCXByZXYgPSBub2RlOworCQkJCX0KKwkJCQlicmVh azsKKwkJCX0gY2FzZSAzOiB7CisJCQkJbm9kZV90ICpwcmV2ID0gTlVMTDsKKwkJCQlmb3IgKGsg PSAwOyBrIDwgajsgaysrKSB7CisJCQkJCW5vZGVfdCAqbm9kZSA9IGhlYXBfZmlyc3QoJmhlYXAp OworCQkJCQlleHBlY3RfdV9lcShoZWFwX3ZhbGlkYXRlKCZoZWFwKSwgaiAtIGssCisJCQkJCSAg ICAiSW5jb3JyZWN0IG5vZGUgY291bnQiKTsKKwkJCQkJaWYgKHByZXYgIT0gTlVMTCkgeworCQkJ CQkJZXhwZWN0X2RfZ2Uobm9kZV9jbXAobm9kZSwKKwkJCQkJCSAgICBwcmV2KSwgMCwKKwkJCQkJ CSAgICAiQmFkIHJlbW92YWwgb3JkZXIiKTsKKwkJCQkJfQorCQkJCQlub2RlX3JlbW92ZSgmaGVh cCwgbm9kZSk7CisJCQkJCWV4cGVjdF91X2VxKGhlYXBfdmFsaWRhdGUoJmhlYXApLCBqIC0gawor CQkJCQkgICAgLSAxLCAiSW5jb3JyZWN0IG5vZGUgY291bnQiKTsKKwkJCQkJcHJldiA9IG5vZGU7 CisJCQkJfQorCQkJCWJyZWFrOworCQkJfSBjYXNlIDQ6IHsKKwkJCQlmb3IgKGsgPSAwOyBrIDwg ajsgaysrKSB7CisJCQkJCW5vZGVfcmVtb3ZlX2FueSgmaGVhcCk7CisJCQkJCWV4cGVjdF91X2Vx KGhlYXBfdmFsaWRhdGUoJmhlYXApLCBqIC0gaworCQkJCQkgICAgLSAxLCAiSW5jb3JyZWN0IG5v ZGUgY291bnQiKTsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQl9IGNhc2UgNTogeworCQkJCWZvciAo ayA9IDA7IGsgPCBqOyBrKyspIHsKKwkJCQkJbm9kZV90ICpub2RlID0gaGVhcF9hbnkoJmhlYXAp OworCQkJCQlleHBlY3RfdV9lcShoZWFwX3ZhbGlkYXRlKCZoZWFwKSwgaiAtIGssCisJCQkJCSAg ICAiSW5jb3JyZWN0IG5vZGUgY291bnQiKTsKKwkJCQkJbm9kZV9yZW1vdmUoJmhlYXAsIG5vZGUp OworCQkJCQlleHBlY3RfdV9lcShoZWFwX3ZhbGlkYXRlKCZoZWFwKSwgaiAtIGsKKwkJCQkJICAg IC0gMSwgIkluY29ycmVjdCBub2RlIGNvdW50Iik7CisJCQkJfQorCQkJCWJyZWFrOworCQkJfSBk ZWZhdWx0OgorCQkJCW5vdF9yZWFjaGVkKCk7CisJCQl9CisKKwkJCWV4cGVjdF9wdHJfbnVsbCho ZWFwX2ZpcnN0KCZoZWFwKSwKKwkJCSAgICAiSGVhcCBzaG91bGQgYmUgZW1wdHkiKTsKKwkJCWV4 cGVjdF9wdHJfbnVsbChoZWFwX2FueSgmaGVhcCksCisJCQkgICAgIkhlYXAgc2hvdWxkIGJlIGVt cHR5Iik7CisJCQlleHBlY3RfdHJ1ZShoZWFwX2VtcHR5KCZoZWFwKSwgIkhlYXAgc2hvdWxkIGJl IGVtcHR5Iik7CisJCX0KKwl9CisJZmluaV9nZW5fcmFuZChzZm10KTsKKyN1bmRlZiBOTk9ERVMK KyN1bmRlZiBTRUVECit9CitURVNUX0VORAorCitpbnQKK21haW4odm9pZCkgeworCXJldHVybiB0 ZXN0KAorCSAgICB0ZXN0X3BoX2VtcHR5LAorCSAgICB0ZXN0X3BoX3JhbmRvbSk7Cit9CgpkaWZm IC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0 L3BybmcuYyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5p dC9wcm5nLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTZkOWIwMQotLS0g L2Rldi9udWxsCisrKyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rl c3QvdW5pdC9wcm5nLmMKQEAgLTAsMCArMSwxODkgQEAKKyNpbmNsdWRlICJ0ZXN0L2plbWFsbG9j X3Rlc3QuaCIKKworVEVTVF9CRUdJTih0ZXN0X3BybmdfbGdfcmFuZ2VfdTMyKSB7CisJdWludDMy X3Qgc2EsIHNiOworCXVpbnQzMl90IHJhLCByYjsKKwl1bnNpZ25lZCBsZ19yYW5nZTsKKworCXNh ID0gNDI7CisJcmEgPSBwcm5nX2xnX3JhbmdlX3UzMigmc2EsIDMyKTsKKwlzYSA9IDQyOworCXJi ID0gcHJuZ19sZ19yYW5nZV91MzIoJnNhLCAzMik7CisJZXhwZWN0X3UzMl9lcShyYSwgcmIsCisJ ICAgICJSZXBlYXRlZCBnZW5lcmF0aW9uIHNob3VsZCBwcm9kdWNlIHJlcGVhdGVkIHJlc3VsdHMi KTsKKworCXNiID0gNDI7CisJcmIgPSBwcm5nX2xnX3JhbmdlX3UzMigmc2IsIDMyKTsKKwlleHBl Y3RfdTMyX2VxKHJhLCByYiwKKwkgICAgIkVxdWl2YWxlbnQgZ2VuZXJhdGlvbiBzaG91bGQgcHJv ZHVjZSBlcXVpdmFsZW50IHJlc3VsdHMiKTsKKworCXNhID0gNDI7CisJcmEgPSBwcm5nX2xnX3Jh bmdlX3UzMigmc2EsIDMyKTsKKwlyYiA9IHBybmdfbGdfcmFuZ2VfdTMyKCZzYSwgMzIpOworCWV4 cGVjdF91MzJfbmUocmEsIHJiLAorCSAgICAiRnVsbC13aWR0aCByZXN1bHRzIG11c3Qgbm90IGlt bWVkaWF0ZWx5IHJlcGVhdCIpOworCisJc2EgPSA0MjsKKwlyYSA9IHBybmdfbGdfcmFuZ2VfdTMy KCZzYSwgMzIpOworCWZvciAobGdfcmFuZ2UgPSAzMTsgbGdfcmFuZ2UgPiAwOyBsZ19yYW5nZS0t KSB7CisJCXNiID0gNDI7CisJCXJiID0gcHJuZ19sZ19yYW5nZV91MzIoJnNiLCBsZ19yYW5nZSk7 CisJCWV4cGVjdF91MzJfZXEoKHJiICYgKFVJTlQzMl9DKDB4ZmZmZmZmZmYpIDw8IGxnX3Jhbmdl KSksCisJCSAgICAwLCAiSGlnaCBvcmRlciBiaXRzIHNob3VsZCBiZSAwLCBsZ19yYW5nZT0ldSIs IGxnX3JhbmdlKTsKKwkJZXhwZWN0X3UzMl9lcShyYiwgKHJhID4+ICgzMiAtIGxnX3JhbmdlKSks CisJCSAgICAiRXhwZWN0ZWQgaGlnaCBvcmRlciBiaXRzIG9mIGZ1bGwtd2lkdGggcmVzdWx0LCAi CisJCSAgICAibGdfcmFuZ2U9JXUiLCBsZ19yYW5nZSk7CisJfQorCit9CitURVNUX0VORAorCitU RVNUX0JFR0lOKHRlc3RfcHJuZ19sZ19yYW5nZV91NjQpIHsKKwl1aW50NjRfdCBzYSwgc2IsIHJh LCByYjsKKwl1bnNpZ25lZCBsZ19yYW5nZTsKKworCXNhID0gNDI7CisJcmEgPSBwcm5nX2xnX3Jh bmdlX3U2NCgmc2EsIDY0KTsKKwlzYSA9IDQyOworCXJiID0gcHJuZ19sZ19yYW5nZV91NjQoJnNh LCA2NCk7CisJZXhwZWN0X3U2NF9lcShyYSwgcmIsCisJICAgICJSZXBlYXRlZCBnZW5lcmF0aW9u IHNob3VsZCBwcm9kdWNlIHJlcGVhdGVkIHJlc3VsdHMiKTsKKworCXNiID0gNDI7CisJcmIgPSBw cm5nX2xnX3JhbmdlX3U2NCgmc2IsIDY0KTsKKwlleHBlY3RfdTY0X2VxKHJhLCByYiwKKwkgICAg IkVxdWl2YWxlbnQgZ2VuZXJhdGlvbiBzaG91bGQgcHJvZHVjZSBlcXVpdmFsZW50IHJlc3VsdHMi KTsKKworCXNhID0gNDI7CisJcmEgPSBwcm5nX2xnX3JhbmdlX3U2NCgmc2EsIDY0KTsKKwlyYiA9 IHBybmdfbGdfcmFuZ2VfdTY0KCZzYSwgNjQpOworCWV4cGVjdF91NjRfbmUocmEsIHJiLAorCSAg ICAiRnVsbC13aWR0aCByZXN1bHRzIG11c3Qgbm90IGltbWVkaWF0ZWx5IHJlcGVhdCIpOworCisJ c2EgPSA0MjsKKwlyYSA9IHBybmdfbGdfcmFuZ2VfdTY0KCZzYSwgNjQpOworCWZvciAobGdfcmFu Z2UgPSA2MzsgbGdfcmFuZ2UgPiAwOyBsZ19yYW5nZS0tKSB7CisJCXNiID0gNDI7CisJCXJiID0g cHJuZ19sZ19yYW5nZV91NjQoJnNiLCBsZ19yYW5nZSk7CisJCWV4cGVjdF91NjRfZXEoKHJiICYg KFVJTlQ2NF9DKDB4ZmZmZmZmZmZmZmZmZmZmZikgPDwgbGdfcmFuZ2UpKSwKKwkJICAgIDAsICJI aWdoIG9yZGVyIGJpdHMgc2hvdWxkIGJlIDAsIGxnX3JhbmdlPSV1IiwgbGdfcmFuZ2UpOworCQll eHBlY3RfdTY0X2VxKHJiLCAocmEgPj4gKDY0IC0gbGdfcmFuZ2UpKSwKKwkJICAgICJFeHBlY3Rl ZCBoaWdoIG9yZGVyIGJpdHMgb2YgZnVsbC13aWR0aCByZXN1bHQsICIKKwkJICAgICJsZ19yYW5n ZT0ldSIsIGxnX3JhbmdlKTsKKwl9Cit9CitURVNUX0VORAorCitURVNUX0JFR0lOKHRlc3RfcHJu Z19sZ19yYW5nZV96dSkgeworCXNpemVfdCBzYSwgc2I7CisJc2l6ZV90IHJhLCByYjsKKwl1bnNp Z25lZCBsZ19yYW5nZTsKKworCXNhID0gNDI7CisJcmEgPSBwcm5nX2xnX3JhbmdlX3p1KCZzYSwg WlUoMSkgPDwgKDMgKyBMR19TSVpFT0ZfUFRSKSk7CisJc2EgPSA0MjsKKwlyYiA9IHBybmdfbGdf cmFuZ2VfenUoJnNhLCBaVSgxKSA8PCAoMyArIExHX1NJWkVPRl9QVFIpKTsKKwlleHBlY3RfenVf ZXEocmEsIHJiLAorCSAgICAiUmVwZWF0ZWQgZ2VuZXJhdGlvbiBzaG91bGQgcHJvZHVjZSByZXBl YXRlZCByZXN1bHRzIik7CisKKwlzYiA9IDQyOworCXJiID0gcHJuZ19sZ19yYW5nZV96dSgmc2Is IFpVKDEpIDw8ICgzICsgTEdfU0laRU9GX1BUUikpOworCWV4cGVjdF96dV9lcShyYSwgcmIsCisJ ICAgICJFcXVpdmFsZW50IGdlbmVyYXRpb24gc2hvdWxkIHByb2R1Y2UgZXF1aXZhbGVudCByZXN1 bHRzIik7CisKKwlzYSA9IDQyOworCXJhID0gcHJuZ19sZ19yYW5nZV96dSgmc2EsIFpVKDEpIDw8 ICgzICsgTEdfU0laRU9GX1BUUikpOworCXJiID0gcHJuZ19sZ19yYW5nZV96dSgmc2EsIFpVKDEp IDw8ICgzICsgTEdfU0laRU9GX1BUUikpOworCWV4cGVjdF96dV9uZShyYSwgcmIsCisJICAgICJG dWxsLXdpZHRoIHJlc3VsdHMgbXVzdCBub3QgaW1tZWRpYXRlbHkgcmVwZWF0Iik7CisKKwlzYSA9 IDQyOworCXJhID0gcHJuZ19sZ19yYW5nZV96dSgmc2EsIFpVKDEpIDw8ICgzICsgTEdfU0laRU9G X1BUUikpOworCWZvciAobGdfcmFuZ2UgPSAoWlUoMSkgPDwgKDMgKyBMR19TSVpFT0ZfUFRSKSkg LSAxOyBsZ19yYW5nZSA+IDA7CisJICAgIGxnX3JhbmdlLS0pIHsKKwkJc2IgPSA0MjsKKwkJcmIg PSBwcm5nX2xnX3JhbmdlX3p1KCZzYiwgbGdfcmFuZ2UpOworCQlleHBlY3RfenVfZXEoKHJiICYg KFNJWkVfVF9NQVggPDwgbGdfcmFuZ2UpKSwKKwkJICAgIDAsICJIaWdoIG9yZGVyIGJpdHMgc2hv dWxkIGJlIDAsIGxnX3JhbmdlPSV1IiwgbGdfcmFuZ2UpOworCQlleHBlY3RfenVfZXEocmIsIChy YSA+PiAoKFpVKDEpIDw8ICgzICsgTEdfU0laRU9GX1BUUikpIC0KKwkJICAgIGxnX3JhbmdlKSks ICJFeHBlY3RlZCBoaWdoIG9yZGVyIGJpdHMgb2YgZnVsbC13aWR0aCAiCisJCSAgICAicmVzdWx0 LCBsZ19yYW5nZT0ldSIsIGxnX3JhbmdlKTsKKwl9CisKK30KK1RFU1RfRU5ECisKK1RFU1RfQkVH SU4odGVzdF9wcm5nX3JhbmdlX3UzMikgeworCXVpbnQzMl90IHJhbmdlOworCisJY29uc3QgdWlu dDMyX3QgbWF4X3JhbmdlID0gMTAwMDAwMDA7CisJY29uc3QgdWludDMyX3QgcmFuZ2Vfc3RlcCA9 IDk3OworCWNvbnN0IHVuc2lnbmVkIG5yZXBzID0gMTA7CisKKwlmb3IgKHJhbmdlID0gMjsgcmFu Z2UgPCBtYXhfcmFuZ2U7IHJhbmdlICs9IHJhbmdlX3N0ZXApIHsKKwkJdWludDMyX3QgczsKKwkJ dW5zaWduZWQgcmVwOworCisJCXMgPSByYW5nZTsKKwkJZm9yIChyZXAgPSAwOyByZXAgPCBucmVw czsgcmVwKyspIHsKKwkJCXVpbnQzMl90IHIgPSBwcm5nX3JhbmdlX3UzMigmcywgcmFuZ2UpOwor CisJCQlleHBlY3RfdTMyX2x0KHIsIHJhbmdlLCAiT3V0IG9mIHJhbmdlIik7CisJCX0KKwl9Cit9 CitURVNUX0VORAorCitURVNUX0JFR0lOKHRlc3RfcHJuZ19yYW5nZV91NjQpIHsKKwl1aW50NjRf dCByYW5nZTsKKworCWNvbnN0IHVpbnQ2NF90IG1heF9yYW5nZSA9IDEwMDAwMDAwOworCWNvbnN0 IHVpbnQ2NF90IHJhbmdlX3N0ZXAgPSA5NzsKKwljb25zdCB1bnNpZ25lZCBucmVwcyA9IDEwOwor CisJZm9yIChyYW5nZSA9IDI7IHJhbmdlIDwgbWF4X3JhbmdlOyByYW5nZSArPSByYW5nZV9zdGVw KSB7CisJCXVpbnQ2NF90IHM7CisJCXVuc2lnbmVkIHJlcDsKKworCQlzID0gcmFuZ2U7CisJCWZv ciAocmVwID0gMDsgcmVwIDwgbnJlcHM7IHJlcCsrKSB7CisJCQl1aW50NjRfdCByID0gcHJuZ19y YW5nZV91NjQoJnMsIHJhbmdlKTsKKworCQkJZXhwZWN0X3U2NF9sdChyLCByYW5nZSwgIk91dCBv ZiByYW5nZSIpOworCQl9CisJfQorfQorVEVTVF9FTkQKKworVEVTVF9CRUdJTih0ZXN0X3Bybmdf cmFuZ2VfenUpIHsKKwlzaXplX3QgcmFuZ2U7CisKKwljb25zdCBzaXplX3QgbWF4X3JhbmdlID0g MTAwMDAwMDA7CisJY29uc3Qgc2l6ZV90IHJhbmdlX3N0ZXAgPSA5NzsKKwljb25zdCB1bnNpZ25l ZCBucmVwcyA9IDEwOworCisKKwlmb3IgKHJhbmdlID0gMjsgcmFuZ2UgPCBtYXhfcmFuZ2U7IHJh bmdlICs9IHJhbmdlX3N0ZXApIHsKKwkJc2l6ZV90IHM7CisJCXVuc2lnbmVkIHJlcDsKKworCQlz ID0gcmFuZ2U7CisJCWZvciAocmVwID0gMDsgcmVwIDwgbnJlcHM7IHJlcCsrKSB7CisJCQlzaXpl X3QgciA9IHBybmdfcmFuZ2VfenUoJnMsIHJhbmdlKTsKKworCQkJZXhwZWN0X3p1X2x0KHIsIHJh bmdlLCAiT3V0IG9mIHJhbmdlIik7CisJCX0KKwl9Cit9CitURVNUX0VORAorCitpbnQKK21haW4o dm9pZCkgeworCXJldHVybiB0ZXN0X25vX3JlZW50cmFuY3koCisJICAgIHRlc3RfcHJuZ19sZ19y YW5nZV91MzIsCisJICAgIHRlc3RfcHJuZ19sZ19yYW5nZV91NjQsCisJICAgIHRlc3RfcHJuZ19s Z19yYW5nZV96dSwKKwkgICAgdGVzdF9wcm5nX3JhbmdlX3UzMiwKKwkgICAgdGVzdF9wcm5nX3Jh bmdlX3U2NCwKKwkgICAgdGVzdF9wcm5nX3JhbmdlX3p1KTsKK30KCmRpZmYgLS1naXQgYS8zODkt ZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvcHJvZl9hY2N1bS5j IGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L3Byb2Zf YWNjdW0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjM5MmFjCi0tLSAv ZGV2L251bGwKKysrIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVz dC91bml0L3Byb2ZfYWNjdW0uYwpAQCAtMCwwICsxLDg0IEBACisjaW5jbHVkZSAidGVzdC9qZW1h bGxvY190ZXN0LmgiCisKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9wcm9mX2RhdGEuaCIK KyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9wcm9mX3N5cy5oIgorCisjZGVmaW5lIE5USFJF QURTCQk0CisjZGVmaW5lIE5BTExPQ1NfUEVSX1RIUkVBRAk1MAorI2RlZmluZSBEVU1QX0lOVEVS VkFMCQkxCisjZGVmaW5lIEJUX0NPVU5UX0NIRUNLX0lOVEVSVkFMCTUKKworc3RhdGljIGludAor cHJvZl9kdW1wX29wZW5fZmlsZV9pbnRlcmNlcHQoY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBt b2RlKSB7CisJaW50IGZkOworCisJZmQgPSBvcGVuKCIvZGV2L251bGwiLCBPX1dST05MWSk7CisJ YXNzZXJ0X2RfbmUoZmQsIC0xLCAiVW5leHBlY3RlZCBvcGVuKCkgZmFpbHVyZSIpOworCisJcmV0 dXJuIGZkOworfQorCitzdGF0aWMgdm9pZCAqCithbGxvY19mcm9tX3Blcm11dGVkX2JhY2t0cmFj ZSh1bnNpZ25lZCB0aGRfaW5kLCB1bnNpZ25lZCBpdGVyYXRpb24pIHsKKwlyZXR1cm4gYnRhbGxv YygxLCB0aGRfaW5kKk5BTExPQ1NfUEVSX1RIUkVBRCArIGl0ZXJhdGlvbik7Cit9CisKK3N0YXRp YyB2b2lkICoKK3RoZF9zdGFydCh2b2lkICp2YXJnKSB7CisJdW5zaWduZWQgdGhkX2luZCA9ICoo dW5zaWduZWQgKil2YXJnOworCXNpemVfdCBidF9jb3VudF9wcmV2LCBidF9jb3VudDsKKwl1bnNp Z25lZCBpX3ByZXYsIGk7CisKKwlpX3ByZXYgPSAwOworCWJ0X2NvdW50X3ByZXYgPSAwOworCWZv ciAoaSA9IDA7IGkgPCBOQUxMT0NTX1BFUl9USFJFQUQ7IGkrKykgeworCQl2b2lkICpwID0gYWxs b2NfZnJvbV9wZXJtdXRlZF9iYWNrdHJhY2UodGhkX2luZCwgaSk7CisJCWRhbGxvY3gocCwgMCk7 CisJCWlmIChpICUgRFVNUF9JTlRFUlZBTCA9PSAwKSB7CisJCQlleHBlY3RfZF9lcShtYWxsY3Rs KCJwcm9mLmR1bXAiLCBOVUxMLCBOVUxMLCBOVUxMLCAwKSwKKwkJCSAgICAwLCAiVW5leHBlY3Rl ZCBlcnJvciB3aGlsZSBkdW1waW5nIGhlYXAgcHJvZmlsZSIpOworCQl9CisKKwkJaWYgKGkgJSBC VF9DT1VOVF9DSEVDS19JTlRFUlZBTCA9PSAwIHx8CisJCSAgICBpKzEgPT0gTkFMTE9DU19QRVJf VEhSRUFEKSB7CisJCQlidF9jb3VudCA9IHByb2ZfYnRfY291bnQoKTsKKwkJCWV4cGVjdF96dV9s ZShidF9jb3VudF9wcmV2KyhpLWlfcHJldiksIGJ0X2NvdW50LAorCQkJICAgICJFeHBlY3RlZCBs YXJnZXIgYmFja3RyYWNlIGNvdW50IGluY3JlYXNlIik7CisJCQlpX3ByZXYgPSBpOworCQkJYnRf Y291bnRfcHJldiA9IGJ0X2NvdW50OworCQl9CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKK1RF U1RfQkVHSU4odGVzdF9pZHVtcCkgeworCWJvb2wgYWN0aXZlOworCXRoZF90IHRoZHNbTlRIUkVB RFNdOworCXVuc2lnbmVkIHRoZF9hcmdzW05USFJFQURTXTsKKwl1bnNpZ25lZCBpOworCisJdGVz dF9za2lwX2lmKCFjb25maWdfcHJvZik7CisKKwlhY3RpdmUgPSB0cnVlOworCWV4cGVjdF9kX2Vx KG1hbGxjdGwoInByb2YuYWN0aXZlIiwgTlVMTCwgTlVMTCwgKHZvaWQgKikmYWN0aXZlLAorCSAg ICBzaXplb2YoYWN0aXZlKSksIDAsCisJICAgICJVbmV4cGVjdGVkIG1hbGxjdGwgZmFpbHVyZSB3 aGlsZSBhY3RpdmF0aW5nIHByb2ZpbGluZyIpOworCisJcHJvZl9kdW1wX29wZW5fZmlsZSA9IHBy b2ZfZHVtcF9vcGVuX2ZpbGVfaW50ZXJjZXB0OworCisJZm9yIChpID0gMDsgaSA8IE5USFJFQURT OyBpKyspIHsKKwkJdGhkX2FyZ3NbaV0gPSBpOworCQl0aGRfY3JlYXRlKCZ0aGRzW2ldLCB0aGRf c3RhcnQsICh2b2lkICopJnRoZF9hcmdzW2ldKTsKKwl9CisJZm9yIChpID0gMDsgaSA8IE5USFJF QURTOyBpKyspIHsKKwkJdGhkX2pvaW4odGhkc1tpXSwgTlVMTCk7CisJfQorfQorVEVTVF9FTkQK KworaW50CittYWluKHZvaWQpIHsKKwlyZXR1cm4gdGVzdF9ub19yZWVudHJhbmN5KAorCSAgICB0 ZXN0X2lkdW1wKTsKK30KCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1h bGxvYy01LjMuMC90ZXN0L3VuaXQvcHJvZl9hY2N1bS5zaCBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1 aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9wcm9mX2FjY3VtLnNoCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzZTEzZmMKLS0tIC9kZXYvbnVsbAorKysgYi8zODktZHMt YmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvcHJvZl9hY2N1bS5zaApA QCAtMCwwICsxLDUgQEAKKyMhL2Jpbi9zaAorCitpZiBbICJ4JHtlbmFibGVfcHJvZn0iID0gIngx IiBdIDsgdGhlbgorICBleHBvcnQgTUFMTE9DX0NPTkY9InByb2Y6dHJ1ZSxwcm9mX2FjY3VtOnRy dWUscHJvZl9hY3RpdmU6ZmFsc2UsbGdfcHJvZl9zYW1wbGU6MCIKK2ZpCgpkaWZmIC0tZ2l0IGEv Mzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L3Byb2ZfYWN0 aXZlLmMgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQv cHJvZl9hY3RpdmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjI5ZTdh Ci0tLSAvZGV2L251bGwKKysrIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4z LjAvdGVzdC91bml0L3Byb2ZfYWN0aXZlLmMKQEAgLTAsMCArMSwxMTkgQEAKKyNpbmNsdWRlICJ0 ZXN0L2plbWFsbG9jX3Rlc3QuaCIKKworI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL3Byb2Zf ZGF0YS5oIgorCitzdGF0aWMgdm9pZAorbWFsbGN0bF9ib29sX2dldChjb25zdCBjaGFyICpuYW1l LCBib29sIGV4cGVjdGVkLCBjb25zdCBjaGFyICpmdW5jLCBpbnQgbGluZSkgeworCWJvb2wgb2xk OworCXNpemVfdCBzejsKKworCXN6ID0gc2l6ZW9mKG9sZCk7CisJZXhwZWN0X2RfZXEobWFsbGN0 bChuYW1lLCAodm9pZCAqKSZvbGQsICZzeiwgTlVMTCwgMCksIDAsCisJICAgICIlcygpOiVkOiBV bmV4cGVjdGVkIG1hbGxjdGwgZmFpbHVyZSByZWFkaW5nICVzIiwgZnVuYywgbGluZSwgbmFtZSk7 CisJZXhwZWN0X2JfZXEob2xkLCBleHBlY3RlZCwgIiVzKCk6JWQ6IFVuZXhwZWN0ZWQgJXMgdmFs dWUiLCBmdW5jLCBsaW5lLAorCSAgICBuYW1lKTsKK30KKworc3RhdGljIHZvaWQKK21hbGxjdGxf Ym9vbF9zZXQoY29uc3QgY2hhciAqbmFtZSwgYm9vbCBvbGRfZXhwZWN0ZWQsIGJvb2wgdmFsX25l dywKKyAgICBjb25zdCBjaGFyICpmdW5jLCBpbnQgbGluZSkgeworCWJvb2wgb2xkOworCXNpemVf dCBzejsKKworCXN6ID0gc2l6ZW9mKG9sZCk7CisJZXhwZWN0X2RfZXEobWFsbGN0bChuYW1lLCAo dm9pZCAqKSZvbGQsICZzeiwgKHZvaWQgKikmdmFsX25ldywKKwkgICAgc2l6ZW9mKHZhbF9uZXcp KSwgMCwKKwkgICAgIiVzKCk6JWQ6IFVuZXhwZWN0ZWQgbWFsbGN0bCBmYWlsdXJlIHJlYWRpbmcv d3JpdGluZyAlcyIsIGZ1bmMsCisJICAgIGxpbmUsIG5hbWUpOworCWV4cGVjdF9iX2VxKG9sZCwg b2xkX2V4cGVjdGVkLCAiJXMoKTolZDogVW5leHBlY3RlZCAlcyB2YWx1ZSIsIGZ1bmMsCisJICAg IGxpbmUsIG5hbWUpOworfQorCitzdGF0aWMgdm9pZAorbWFsbGN0bF9wcm9mX2FjdGl2ZV9nZXRf aW1wbChib29sIHByb2ZfYWN0aXZlX29sZF9leHBlY3RlZCwgY29uc3QgY2hhciAqZnVuYywKKyAg ICBpbnQgbGluZSkgeworCW1hbGxjdGxfYm9vbF9nZXQoInByb2YuYWN0aXZlIiwgcHJvZl9hY3Rp dmVfb2xkX2V4cGVjdGVkLCBmdW5jLCBsaW5lKTsKK30KKyNkZWZpbmUgbWFsbGN0bF9wcm9mX2Fj dGl2ZV9nZXQoYSkJCQkJCVwKKwltYWxsY3RsX3Byb2ZfYWN0aXZlX2dldF9pbXBsKGEsIF9fZnVu Y19fLCBfX0xJTkVfXykKKworc3RhdGljIHZvaWQKK21hbGxjdGxfcHJvZl9hY3RpdmVfc2V0X2lt cGwoYm9vbCBwcm9mX2FjdGl2ZV9vbGRfZXhwZWN0ZWQsCisgICAgYm9vbCBwcm9mX2FjdGl2ZV9u ZXcsIGNvbnN0IGNoYXIgKmZ1bmMsIGludCBsaW5lKSB7CisJbWFsbGN0bF9ib29sX3NldCgicHJv Zi5hY3RpdmUiLCBwcm9mX2FjdGl2ZV9vbGRfZXhwZWN0ZWQsCisJICAgIHByb2ZfYWN0aXZlX25l dywgZnVuYywgbGluZSk7Cit9CisjZGVmaW5lIG1hbGxjdGxfcHJvZl9hY3RpdmVfc2V0KGEsIGIp CQkJCQlcCisJbWFsbGN0bF9wcm9mX2FjdGl2ZV9zZXRfaW1wbChhLCBiLCBfX2Z1bmNfXywgX19M SU5FX18pCisKK3N0YXRpYyB2b2lkCittYWxsY3RsX3RocmVhZF9wcm9mX2FjdGl2ZV9nZXRfaW1w bChib29sIHRocmVhZF9wcm9mX2FjdGl2ZV9vbGRfZXhwZWN0ZWQsCisgICAgY29uc3QgY2hhciAq ZnVuYywgaW50IGxpbmUpIHsKKwltYWxsY3RsX2Jvb2xfZ2V0KCJ0aHJlYWQucHJvZi5hY3RpdmUi LCB0aHJlYWRfcHJvZl9hY3RpdmVfb2xkX2V4cGVjdGVkLAorCSAgICBmdW5jLCBsaW5lKTsKK30K KyNkZWZpbmUgbWFsbGN0bF90aHJlYWRfcHJvZl9hY3RpdmVfZ2V0KGEpCQkJCVwKKwltYWxsY3Rs X3RocmVhZF9wcm9mX2FjdGl2ZV9nZXRfaW1wbChhLCBfX2Z1bmNfXywgX19MSU5FX18pCisKK3N0 YXRpYyB2b2lkCittYWxsY3RsX3RocmVhZF9wcm9mX2FjdGl2ZV9zZXRfaW1wbChib29sIHRocmVh ZF9wcm9mX2FjdGl2ZV9vbGRfZXhwZWN0ZWQsCisgICAgYm9vbCB0aHJlYWRfcHJvZl9hY3RpdmVf bmV3LCBjb25zdCBjaGFyICpmdW5jLCBpbnQgbGluZSkgeworCW1hbGxjdGxfYm9vbF9zZXQoInRo cmVhZC5wcm9mLmFjdGl2ZSIsIHRocmVhZF9wcm9mX2FjdGl2ZV9vbGRfZXhwZWN0ZWQsCisJICAg IHRocmVhZF9wcm9mX2FjdGl2ZV9uZXcsIGZ1bmMsIGxpbmUpOworfQorI2RlZmluZSBtYWxsY3Rs X3RocmVhZF9wcm9mX2FjdGl2ZV9zZXQoYSwgYikJCQkJXAorCW1hbGxjdGxfdGhyZWFkX3Byb2Zf YWN0aXZlX3NldF9pbXBsKGEsIGIsIF9fZnVuY19fLCBfX0xJTkVfXykKKworc3RhdGljIHZvaWQK K3Byb2Zfc2FtcGxpbmdfcHJvYmVfaW1wbChib29sIGV4cGVjdF9zYW1wbGUsIGNvbnN0IGNoYXIg KmZ1bmMsIGludCBsaW5lKSB7CisJdm9pZCAqcDsKKwlzaXplX3QgZXhwZWN0ZWRfYmFja3RyYWNl cyA9IGV4cGVjdF9zYW1wbGUgPyAxIDogMDsKKworCWV4cGVjdF96dV9lcShwcm9mX2J0X2NvdW50 KCksIDAsICIlcygpOiVkOiBFeHBlY3RlZCAwIGJhY2t0cmFjZXMiLCBmdW5jLAorCSAgICBsaW5l KTsKKwlwID0gbWFsbG9jeCgxLCAwKTsKKwlleHBlY3RfcHRyX25vdF9udWxsKHAsICJVbmV4cGVj dGVkIG1hbGxvY3goKSBmYWlsdXJlIik7CisJZXhwZWN0X3p1X2VxKHByb2ZfYnRfY291bnQoKSwg ZXhwZWN0ZWRfYmFja3RyYWNlcywKKwkgICAgIiVzKCk6JWQ6IFVuZXhwZWN0ZWQgYmFja3RyYWNl IGNvdW50IiwgZnVuYywgbGluZSk7CisJZGFsbG9jeChwLCAwKTsKK30KKyNkZWZpbmUgcHJvZl9z YW1wbGluZ19wcm9iZShhKQkJCQkJCVwKKwlwcm9mX3NhbXBsaW5nX3Byb2JlX2ltcGwoYSwgX19m dW5jX18sIF9fTElORV9fKQorCitURVNUX0JFR0lOKHRlc3RfcHJvZl9hY3RpdmUpIHsKKwl0ZXN0 X3NraXBfaWYoIWNvbmZpZ19wcm9mKTsKKworCW1hbGxjdGxfcHJvZl9hY3RpdmVfZ2V0KHRydWUp OworCW1hbGxjdGxfdGhyZWFkX3Byb2ZfYWN0aXZlX2dldChmYWxzZSk7CisKKwltYWxsY3RsX3By b2ZfYWN0aXZlX3NldCh0cnVlLCB0cnVlKTsKKwltYWxsY3RsX3RocmVhZF9wcm9mX2FjdGl2ZV9z ZXQoZmFsc2UsIGZhbHNlKTsKKwkvKiBwcm9mLmFjdGl2ZSwgIXRocmVhZC5wcm9mLmFjdGl2ZS4g Ki8KKwlwcm9mX3NhbXBsaW5nX3Byb2JlKGZhbHNlKTsKKworCW1hbGxjdGxfcHJvZl9hY3RpdmVf c2V0KHRydWUsIGZhbHNlKTsKKwltYWxsY3RsX3RocmVhZF9wcm9mX2FjdGl2ZV9zZXQoZmFsc2Us IGZhbHNlKTsKKwkvKiAhcHJvZi5hY3RpdmUsICF0aHJlYWQucHJvZi5hY3RpdmUuICovCisJcHJv Zl9zYW1wbGluZ19wcm9iZShmYWxzZSk7CisKKwltYWxsY3RsX3Byb2ZfYWN0aXZlX3NldChmYWxz ZSwgZmFsc2UpOworCW1hbGxjdGxfdGhyZWFkX3Byb2ZfYWN0aXZlX3NldChmYWxzZSwgdHJ1ZSk7 CisJLyogIXByb2YuYWN0aXZlLCB0aHJlYWQucHJvZi5hY3RpdmUuICovCisJcHJvZl9zYW1wbGlu Z19wcm9iZShmYWxzZSk7CisKKwltYWxsY3RsX3Byb2ZfYWN0aXZlX3NldChmYWxzZSwgdHJ1ZSk7 CisJbWFsbGN0bF90aHJlYWRfcHJvZl9hY3RpdmVfc2V0KHRydWUsIHRydWUpOworCS8qIHByb2Yu YWN0aXZlLCB0aHJlYWQucHJvZi5hY3RpdmUuICovCisJcHJvZl9zYW1wbGluZ19wcm9iZSh0cnVl KTsKKworCS8qIFJlc3RvcmUgc2V0dGluZ3MuICovCisJbWFsbGN0bF9wcm9mX2FjdGl2ZV9zZXQo dHJ1ZSwgdHJ1ZSk7CisJbWFsbGN0bF90aHJlYWRfcHJvZl9hY3RpdmVfc2V0KHRydWUsIGZhbHNl KTsKK30KK1RFU1RfRU5ECisKK2ludAorbWFpbih2b2lkKSB7CisJcmV0dXJuIHRlc3Rfbm9fcmVl bnRyYW5jeSgKKwkgICAgdGVzdF9wcm9mX2FjdGl2ZSk7Cit9CgpkaWZmIC0tZ2l0IGEvMzg5LWRz LWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L3Byb2ZfYWN0aXZlLnNo IGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L3Byb2Zf YWN0aXZlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3NDk2NzQKLS0t IC9kZXYvbnVsbAorKysgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90 ZXN0L3VuaXQvcHJvZl9hY3RpdmUuc2gKQEAgLTAsMCArMSw1IEBACisjIS9iaW4vc2gKKworaWYg WyAieCR7ZW5hYmxlX3Byb2Z9IiA9ICJ4MSIgXSA7IHRoZW4KKyAgZXhwb3J0IE1BTExPQ19DT05G PSJwcm9mOnRydWUscHJvZl9hY3RpdmU6dHJ1ZSxwcm9mX3RocmVhZF9hY3RpdmVfaW5pdDpmYWxz ZSxsZ19wcm9mX3NhbXBsZTowIgorZmkKCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1i dWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvcHJvZl9nZHVtcC5jIGIvMzg5LWRzLWJhc2Ut My4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L3Byb2ZfZ2R1bXAuYwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NmU0NTAzCi0tLSAvZGV2L251bGwKKysrIGIv Mzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L3Byb2ZfZ2R1 bXAuYwpAQCAtMCwwICsxLDc3IEBACisjaW5jbHVkZSAidGVzdC9qZW1hbGxvY190ZXN0LmgiCisK KyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9wcm9mX3N5cy5oIgorCitzdGF0aWMgYm9vbCBk aWRfcHJvZl9kdW1wX29wZW47CisKK3N0YXRpYyBpbnQKK3Byb2ZfZHVtcF9vcGVuX2ZpbGVfaW50 ZXJjZXB0KGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgbW9kZSkgeworCWludCBmZDsKKworCWRp ZF9wcm9mX2R1bXBfb3BlbiA9IHRydWU7CisKKwlmZCA9IG9wZW4oIi9kZXYvbnVsbCIsIE9fV1JP TkxZKTsKKwlhc3NlcnRfZF9uZShmZCwgLTEsICJVbmV4cGVjdGVkIG9wZW4oKSBmYWlsdXJlIik7 CisKKwlyZXR1cm4gZmQ7Cit9CisKK1RFU1RfQkVHSU4odGVzdF9nZHVtcCkgeworCXRlc3Rfc2tp cF9pZihvcHRfaHBhKTsKKwlib29sIGFjdGl2ZSwgZ2R1bXAsIGdkdW1wX29sZDsKKwl2b2lkICpw LCAqcSwgKnIsICpzOworCXNpemVfdCBzejsKKworCXRlc3Rfc2tpcF9pZighY29uZmlnX3Byb2Yp OworCisJYWN0aXZlID0gdHJ1ZTsKKwlleHBlY3RfZF9lcShtYWxsY3RsKCJwcm9mLmFjdGl2ZSIs IE5VTEwsIE5VTEwsICh2b2lkICopJmFjdGl2ZSwKKwkgICAgc2l6ZW9mKGFjdGl2ZSkpLCAwLAor CSAgICAiVW5leHBlY3RlZCBtYWxsY3RsIGZhaWx1cmUgd2hpbGUgYWN0aXZhdGluZyBwcm9maWxp bmciKTsKKworCXByb2ZfZHVtcF9vcGVuX2ZpbGUgPSBwcm9mX2R1bXBfb3Blbl9maWxlX2ludGVy Y2VwdDsKKworCWRpZF9wcm9mX2R1bXBfb3BlbiA9IGZhbHNlOworCXAgPSBtYWxsb2N4KCgxVSA8 PCBTQ19MR19MQVJHRV9NSU5DTEFTUyksIDApOworCWV4cGVjdF9wdHJfbm90X251bGwocCwgIlVu ZXhwZWN0ZWQgbWFsbG9jeCgpIGZhaWx1cmUiKTsKKwlleHBlY3RfdHJ1ZShkaWRfcHJvZl9kdW1w X29wZW4sICJFeHBlY3RlZCBhIHByb2ZpbGUgZHVtcCIpOworCisJZGlkX3Byb2ZfZHVtcF9vcGVu ID0gZmFsc2U7CisJcSA9IG1hbGxvY3goKDFVIDw8IFNDX0xHX0xBUkdFX01JTkNMQVNTKSwgMCk7 CisJZXhwZWN0X3B0cl9ub3RfbnVsbChxLCAiVW5leHBlY3RlZCBtYWxsb2N4KCkgZmFpbHVyZSIp OworCWV4cGVjdF90cnVlKGRpZF9wcm9mX2R1bXBfb3BlbiwgIkV4cGVjdGVkIGEgcHJvZmlsZSBk dW1wIik7CisKKwlnZHVtcCA9IGZhbHNlOworCXN6ID0gc2l6ZW9mKGdkdW1wX29sZCk7CisJZXhw ZWN0X2RfZXEobWFsbGN0bCgicHJvZi5nZHVtcCIsICh2b2lkICopJmdkdW1wX29sZCwgJnN6LAor CSAgICAodm9pZCAqKSZnZHVtcCwgc2l6ZW9mKGdkdW1wKSksIDAsCisJICAgICJVbmV4cGVjdGVk IG1hbGxjdGwgZmFpbHVyZSB3aGlsZSBkaXNhYmxpbmcgcHJvZi5nZHVtcCIpOworCWFzc2VydChn ZHVtcF9vbGQpOworCWRpZF9wcm9mX2R1bXBfb3BlbiA9IGZhbHNlOworCXIgPSBtYWxsb2N4KCgx VSA8PCBTQ19MR19MQVJHRV9NSU5DTEFTUyksIDApOworCWV4cGVjdF9wdHJfbm90X251bGwocSwg IlVuZXhwZWN0ZWQgbWFsbG9jeCgpIGZhaWx1cmUiKTsKKwlleHBlY3RfZmFsc2UoZGlkX3Byb2Zf ZHVtcF9vcGVuLCAiVW5leHBlY3RlZCBwcm9maWxlIGR1bXAiKTsKKworCWdkdW1wID0gdHJ1ZTsK KwlzeiA9IHNpemVvZihnZHVtcF9vbGQpOworCWV4cGVjdF9kX2VxKG1hbGxjdGwoInByb2YuZ2R1 bXAiLCAodm9pZCAqKSZnZHVtcF9vbGQsICZzeiwKKwkgICAgKHZvaWQgKikmZ2R1bXAsIHNpemVv ZihnZHVtcCkpLCAwLAorCSAgICAiVW5leHBlY3RlZCBtYWxsY3RsIGZhaWx1cmUgd2hpbGUgZW5h YmxpbmcgcHJvZi5nZHVtcCIpOworCWFzc2VydCghZ2R1bXBfb2xkKTsKKwlkaWRfcHJvZl9kdW1w X29wZW4gPSBmYWxzZTsKKwlzID0gbWFsbG9jeCgoMVUgPDwgU0NfTEdfTEFSR0VfTUlOQ0xBU1Mp LCAwKTsKKwlleHBlY3RfcHRyX25vdF9udWxsKHEsICJVbmV4cGVjdGVkIG1hbGxvY3goKSBmYWls dXJlIik7CisJZXhwZWN0X3RydWUoZGlkX3Byb2ZfZHVtcF9vcGVuLCAiRXhwZWN0ZWQgYSBwcm9m aWxlIGR1bXAiKTsKKworCWRhbGxvY3gocCwgMCk7CisJZGFsbG9jeChxLCAwKTsKKwlkYWxsb2N4 KHIsIDApOworCWRhbGxvY3gocywgMCk7Cit9CitURVNUX0VORAorCitpbnQKK21haW4odm9pZCkg eworCXJldHVybiB0ZXN0X25vX3JlZW50cmFuY3koCisJICAgIHRlc3RfZ2R1bXApOworfQoKZGlm ZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5p dC9wcm9mX2dkdW1wLnNoIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAv dGVzdC91bml0L3Byb2ZfZ2R1bXAuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MC4uM2Y2MDBkMgotLS0gL2Rldi9udWxsCisrKyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2pl bWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9wcm9mX2dkdW1wLnNoCkBAIC0wLDAgKzEsNiBAQAorIyEv YmluL3NoCisKK2lmIFsgIngke2VuYWJsZV9wcm9mfSIgPSAieDEiIF0gOyB0aGVuCisgIGV4cG9y dCBNQUxMT0NfQ09ORj0icHJvZjp0cnVlLHByb2ZfYWN0aXZlOmZhbHNlLHByb2ZfZ2R1bXA6dHJ1 ZSIKK2ZpCisKCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01 LjMuMC90ZXN0L3VuaXQvcHJvZl9ob29rLmMgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1h bGxvYy01LjMuMC90ZXN0L3VuaXQvcHJvZl9ob29rLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMC4uNjQ4MGQ5MwotLS0gL2Rldi9udWxsCisrKyBiLzM4OS1kcy1iYXNlLTMuMy4w LWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9wcm9mX2hvb2suYwpAQCAtMCwwICsxLDE2 OSBAQAorI2luY2x1ZGUgInRlc3QvamVtYWxsb2NfdGVzdC5oIgorCitjb25zdCBjaGFyICpkdW1w X2ZpbGVuYW1lID0gIi9kZXYvbnVsbCI7CisKK3Byb2ZfYmFja3RyYWNlX2hvb2tfdCBkZWZhdWx0 X2hvb2s7CisKK2Jvb2wgbW9ja19idF9ob29rX2NhbGxlZCA9IGZhbHNlOworYm9vbCBtb2NrX2R1 bXBfaG9va19jYWxsZWQgPSBmYWxzZTsKKwordm9pZAorbW9ja19idF9ob29rKHZvaWQgKip2ZWMs IHVuc2lnbmVkICpsZW4sIHVuc2lnbmVkIG1heF9sZW4pIHsKKwkqbGVuID0gbWF4X2xlbjsKKwlm b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbWF4X2xlbjsgKytpKSB7CisJCXZlY1tpXSA9ICh2b2lk ICopKCh1aW50cHRyX3QpaSk7CisJfQorCW1vY2tfYnRfaG9va19jYWxsZWQgPSB0cnVlOworfQor Cit2b2lkCittb2NrX2J0X2F1Z21lbnRpbmdfaG9vayh2b2lkICoqdmVjLCB1bnNpZ25lZCAqbGVu LCB1bnNpZ25lZCBtYXhfbGVuKSB7CisJZGVmYXVsdF9ob29rKHZlYywgbGVuLCBtYXhfbGVuKTsK KwlleHBlY3RfdV9ndCgqbGVuLCAwLCAiRGVmYXVsdCBiYWNrdHJhY2UgaG9vayByZXR1cm5lZCBl bXB0eSBiYWNrdHJhY2UiKTsKKwlleHBlY3RfdV9sdCgqbGVuLCBtYXhfbGVuLAorCSAgICAiRGVm YXVsdCBiYWNrdHJhY2UgaG9vayByZXR1cm5lZCB0b28gbGFyZ2UgYmFja3RyYWNlIik7CisKKwkv KiBBZGQgYSBzZXBhcmF0b3IgYmV0d2VlbiBkZWZhdWx0IGZyYW1lcyBhbmQgYXVnbWVudGVkICov CisJdmVjWypsZW5dID0gKHZvaWQgKikweDAzMDMwMzAzMDsKKwkoKmxlbikrKzsKKworCS8qIEFk ZCBtb3JlIHN0YWNrIGZyYW1lcyAqLworCWZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAzOyArK2kp IHsKKwkJaWYgKCpsZW4gPT0gbWF4X2xlbikgeworCQkJYnJlYWs7CisJCX0KKwkJdmVjWypsZW5d ID0gKHZvaWQgKikoKHVpbnRwdHJfdClpKTsKKwkJKCpsZW4pKys7CisJfQorCisKKwltb2NrX2J0 X2hvb2tfY2FsbGVkID0gdHJ1ZTsKK30KKwordm9pZAorbW9ja19kdW1wX2hvb2soY29uc3QgY2hh ciAqZmlsZW5hbWUpIHsKKwltb2NrX2R1bXBfaG9va19jYWxsZWQgPSB0cnVlOworCWV4cGVjdF9z dHJfZXEoZmlsZW5hbWUsIGR1bXBfZmlsZW5hbWUsCisJICAgICJJbmNvcnJlY3QgZmlsZSBuYW1l IHBhc3NlZCB0byB0aGUgZHVtcCBob29rIik7Cit9CisKK1RFU1RfQkVHSU4odGVzdF9wcm9mX2Jh Y2t0cmFjZV9ob29rX3JlcGxhY2UpIHsKKworCXRlc3Rfc2tpcF9pZighY29uZmlnX3Byb2YpOwor CisJbW9ja19idF9ob29rX2NhbGxlZCA9IGZhbHNlOworCisJdm9pZCAqcDAgPSBtYWxsb2N4KDEs IDApOworCWFzc2VydF9wdHJfbm90X251bGwocDAsICJGYWlsZWQgdG8gYWxsb2NhdGUiKTsKKwor CWV4cGVjdF9mYWxzZShtb2NrX2J0X2hvb2tfY2FsbGVkLCAiQ2FsbGVkIG1vY2sgaG9vayBiZWZv cmUgaXQncyBzZXQiKTsKKworCXByb2ZfYmFja3RyYWNlX2hvb2tfdCBudWxsX2hvb2sgPSBOVUxM OworCWV4cGVjdF9kX2VxKG1hbGxjdGwoImV4cGVyaW1lbnRhbC5ob29rcy5wcm9mX2JhY2t0cmFj ZSIsCisJICAgIE5VTEwsIDAsICh2b2lkICopJm51bGxfaG9vaywgIHNpemVvZihudWxsX2hvb2sp KSwKKwkJRUlOVkFMLCAiSW5jb3JyZWN0bHkgYWxsb3dlZCBOVUxMIGJhY2t0cmFjZSBob29rIik7 CisKKwlzaXplX3QgZGVmYXVsdF9ob29rX3N6ID0gc2l6ZW9mKHByb2ZfYmFja3RyYWNlX2hvb2tf dCk7CisJcHJvZl9iYWNrdHJhY2VfaG9va190IGhvb2sgPSAmbW9ja19idF9ob29rOworCWV4cGVj dF9kX2VxKG1hbGxjdGwoImV4cGVyaW1lbnRhbC5ob29rcy5wcm9mX2JhY2t0cmFjZSIsCisJICAg ICh2b2lkICopJmRlZmF1bHRfaG9vaywgJmRlZmF1bHRfaG9va19zeiwgKHZvaWQgKikmaG9vaywK KwkgICAgc2l6ZW9mKGhvb2spKSwgMCwgIlVuZXhwZWN0ZWQgbWFsbGN0bCBmYWlsdXJlIHNldHRp bmcgaG9vayIpOworCisJdm9pZCAqcDEgPSBtYWxsb2N4KDEsIDApOworCWFzc2VydF9wdHJfbm90 X251bGwocDEsICJGYWlsZWQgdG8gYWxsb2NhdGUiKTsKKworCWV4cGVjdF90cnVlKG1vY2tfYnRf aG9va19jYWxsZWQsICJEaWRuJ3QgY2FsbCBtb2NrIGhvb2siKTsKKworCXByb2ZfYmFja3RyYWNl X2hvb2tfdCBjdXJyZW50X2hvb2s7CisJc2l6ZV90IGN1cnJlbnRfaG9va19zeiA9IHNpemVvZihw cm9mX2JhY2t0cmFjZV9ob29rX3QpOworCWV4cGVjdF9kX2VxKG1hbGxjdGwoImV4cGVyaW1lbnRh bC5ob29rcy5wcm9mX2JhY2t0cmFjZSIsCisJICAgICh2b2lkICopJmN1cnJlbnRfaG9vaywgJmN1 cnJlbnRfaG9va19zeiwgKHZvaWQgKikmZGVmYXVsdF9ob29rLAorCSAgICBzaXplb2YoZGVmYXVs dF9ob29rKSksIDAsCisJICAgICJVbmV4cGVjdGVkIG1hbGxjdGwgZmFpbHVyZSByZXNldHRpbmcg aG9vayB0byBkZWZhdWx0Iik7CisKKwlleHBlY3RfcHRyX2VxKGN1cnJlbnRfaG9vaywgaG9vaywK KwkgICAgIkhvb2sgcmV0dXJuZWQgYnkgbWFsbGN0bCBpcyBub3QgZXF1YWwgdG8gbW9jayBob29r Iik7CisKKwlkYWxsb2N4KHAxLCAwKTsKKwlkYWxsb2N4KHAwLCAwKTsKK30KK1RFU1RfRU5ECisK K1RFU1RfQkVHSU4odGVzdF9wcm9mX2JhY2t0cmFjZV9ob29rX2F1Z21lbnQpIHsKKworCXRlc3Rf c2tpcF9pZighY29uZmlnX3Byb2YpOworCisJbW9ja19idF9ob29rX2NhbGxlZCA9IGZhbHNlOwor CisJdm9pZCAqcDAgPSBtYWxsb2N4KDEsIDApOworCWFzc2VydF9wdHJfbm90X251bGwocDAsICJG YWlsZWQgdG8gYWxsb2NhdGUiKTsKKworCWV4cGVjdF9mYWxzZShtb2NrX2J0X2hvb2tfY2FsbGVk LCAiQ2FsbGVkIG1vY2sgaG9vayBiZWZvcmUgaXQncyBzZXQiKTsKKworCXNpemVfdCBkZWZhdWx0 X2hvb2tfc3ogPSBzaXplb2YocHJvZl9iYWNrdHJhY2VfaG9va190KTsKKwlwcm9mX2JhY2t0cmFj ZV9ob29rX3QgaG9vayA9ICZtb2NrX2J0X2F1Z21lbnRpbmdfaG9vazsKKwlleHBlY3RfZF9lcSht YWxsY3RsKCJleHBlcmltZW50YWwuaG9va3MucHJvZl9iYWNrdHJhY2UiLAorCSAgICAodm9pZCAq KSZkZWZhdWx0X2hvb2ssICZkZWZhdWx0X2hvb2tfc3osICh2b2lkICopJmhvb2ssCisJICAgIHNp emVvZihob29rKSksIDAsICJVbmV4cGVjdGVkIG1hbGxjdGwgZmFpbHVyZSBzZXR0aW5nIGhvb2si KTsKKworCXZvaWQgKnAxID0gbWFsbG9jeCgxLCAwKTsKKwlhc3NlcnRfcHRyX25vdF9udWxsKHAx LCAiRmFpbGVkIHRvIGFsbG9jYXRlIik7CisKKwlleHBlY3RfdHJ1ZShtb2NrX2J0X2hvb2tfY2Fs bGVkLCAiRGlkbid0IGNhbGwgbW9jayBob29rIik7CisKKwlwcm9mX2JhY2t0cmFjZV9ob29rX3Qg Y3VycmVudF9ob29rOworCXNpemVfdCBjdXJyZW50X2hvb2tfc3ogPSBzaXplb2YocHJvZl9iYWNr dHJhY2VfaG9va190KTsKKwlleHBlY3RfZF9lcShtYWxsY3RsKCJleHBlcmltZW50YWwuaG9va3Mu cHJvZl9iYWNrdHJhY2UiLAorCSAgICAodm9pZCAqKSZjdXJyZW50X2hvb2ssICZjdXJyZW50X2hv b2tfc3osICh2b2lkICopJmRlZmF1bHRfaG9vaywKKwkgICAgc2l6ZW9mKGRlZmF1bHRfaG9vaykp LCAwLAorCSAgICAiVW5leHBlY3RlZCBtYWxsY3RsIGZhaWx1cmUgcmVzZXR0aW5nIGhvb2sgdG8g ZGVmYXVsdCIpOworCisJZXhwZWN0X3B0cl9lcShjdXJyZW50X2hvb2ssIGhvb2ssCisJICAgICJI b29rIHJldHVybmVkIGJ5IG1hbGxjdGwgaXMgbm90IGVxdWFsIHRvIG1vY2sgaG9vayIpOworCisJ ZGFsbG9jeChwMSwgMCk7CisJZGFsbG9jeChwMCwgMCk7Cit9CitURVNUX0VORAorCitURVNUX0JF R0lOKHRlc3RfcHJvZl9kdW1wX2hvb2spIHsKKworCXRlc3Rfc2tpcF9pZighY29uZmlnX3Byb2Yp OworCisJbW9ja19kdW1wX2hvb2tfY2FsbGVkID0gZmFsc2U7CisKKwlleHBlY3RfZF9lcShtYWxs Y3RsKCJwcm9mLmR1bXAiLCBOVUxMLCBOVUxMLCAodm9pZCAqKSZkdW1wX2ZpbGVuYW1lLAorCSAg ICBzaXplb2YoZHVtcF9maWxlbmFtZSkpLCAwLCAiRmFpbGVkIHRvIGR1bXAgaGVhcCBwcm9maWxl Iik7CisKKwlleHBlY3RfZmFsc2UobW9ja19kdW1wX2hvb2tfY2FsbGVkLCAiQ2FsbGVkIGR1bXAg aG9vayBiZWZvcmUgaXQncyBzZXQiKTsKKworCXNpemVfdCBkZWZhdWx0X2hvb2tfc3ogPSBzaXpl b2YocHJvZl9kdW1wX2hvb2tfdCk7CisJcHJvZl9kdW1wX2hvb2tfdCBob29rID0gJm1vY2tfZHVt cF9ob29rOworCWV4cGVjdF9kX2VxKG1hbGxjdGwoImV4cGVyaW1lbnRhbC5ob29rcy5wcm9mX2R1 bXAiLAorCSAgICAodm9pZCAqKSZkZWZhdWx0X2hvb2ssICZkZWZhdWx0X2hvb2tfc3osICh2b2lk ICopJmhvb2ssCisJICAgIHNpemVvZihob29rKSksIDAsICJVbmV4cGVjdGVkIG1hbGxjdGwgZmFp bHVyZSBzZXR0aW5nIGhvb2siKTsKKworCWV4cGVjdF9kX2VxKG1hbGxjdGwoInByb2YuZHVtcCIs IE5VTEwsIE5VTEwsICh2b2lkICopJmR1bXBfZmlsZW5hbWUsCisJICAgIHNpemVvZihkdW1wX2Zp bGVuYW1lKSksIDAsICJGYWlsZWQgdG8gZHVtcCBoZWFwIHByb2ZpbGUiKTsKKworCWV4cGVjdF90 cnVlKG1vY2tfZHVtcF9ob29rX2NhbGxlZCwgIkRpZG4ndCBjYWxsIG1vY2sgaG9vayIpOworCisJ cHJvZl9kdW1wX2hvb2tfdCBjdXJyZW50X2hvb2s7CisJc2l6ZV90IGN1cnJlbnRfaG9va19zeiA9 IHNpemVvZihwcm9mX2R1bXBfaG9va190KTsKKwlleHBlY3RfZF9lcShtYWxsY3RsKCJleHBlcmlt ZW50YWwuaG9va3MucHJvZl9kdW1wIiwKKwkgICAgKHZvaWQgKikmY3VycmVudF9ob29rLCAmY3Vy cmVudF9ob29rX3N6LCAodm9pZCAqKSZkZWZhdWx0X2hvb2ssCisJICAgIHNpemVvZihkZWZhdWx0 X2hvb2spKSwgMCwKKwkgICAgIlVuZXhwZWN0ZWQgbWFsbGN0bCBmYWlsdXJlIHJlc2V0dGluZyBo b29rIHRvIGRlZmF1bHQiKTsKKworCWV4cGVjdF9wdHJfZXEoY3VycmVudF9ob29rLCBob29rLAor CSAgICAiSG9vayByZXR1cm5lZCBieSBtYWxsY3RsIGlzIG5vdCBlcXVhbCB0byBtb2NrIGhvb2si KTsKK30KK1RFU1RfRU5ECisKK2ludAorbWFpbih2b2lkKSB7CisJcmV0dXJuIHRlc3QoCisJICAg IHRlc3RfcHJvZl9iYWNrdHJhY2VfaG9va19yZXBsYWNlLAorCSAgICB0ZXN0X3Byb2ZfYmFja3Ry YWNlX2hvb2tfYXVnbWVudCwKKwkgICAgdGVzdF9wcm9mX2R1bXBfaG9vayk7Cit9CgpkaWZmIC0t Z2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L3By b2ZfaG9vay5zaCBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3Qv dW5pdC9wcm9mX2hvb2suc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzdl YmQ4ZgotLS0gL2Rldi9udWxsCisrKyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9j LTUuMy4wL3Rlc3QvdW5pdC9wcm9mX2hvb2suc2gKQEAgLTAsMCArMSw2IEBACisjIS9iaW4vc2gK KworaWYgWyAieCR7ZW5hYmxlX3Byb2Z9IiA9ICJ4MSIgXSA7IHRoZW4KKyAgZXhwb3J0IE1BTExP Q19DT05GPSJwcm9mOnRydWUscHJvZl9hY3RpdmU6dHJ1ZSxsZ19wcm9mX3NhbXBsZTowIgorZmkK KwoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rl c3QvdW5pdC9wcm9mX2lkdW1wLmMgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01 LjMuMC90ZXN0L3VuaXQvcHJvZl9pZHVtcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAuLjQ1NWFjNTIKLS0tIC9kZXYvbnVsbAorKysgYi8zODktZHMtYmFzZS0zLjMuMC1idWls ZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvcHJvZl9pZHVtcC5jCkBAIC0wLDAgKzEsNTcgQEAK KyNpbmNsdWRlICJ0ZXN0L2plbWFsbG9jX3Rlc3QuaCIKKworI2luY2x1ZGUgImplbWFsbG9jL2lu dGVybmFsL3Byb2Zfc3lzLmgiCisKKyNkZWZpbmUgVEVTVF9QUkVGSVggInRlc3RfcHJlZml4Igor CitzdGF0aWMgYm9vbCBkaWRfcHJvZl9kdW1wX29wZW47CisKK3N0YXRpYyBpbnQKK3Byb2ZfZHVt cF9vcGVuX2ZpbGVfaW50ZXJjZXB0KGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgbW9kZSkgewor CWludCBmZDsKKworCWRpZF9wcm9mX2R1bXBfb3BlbiA9IHRydWU7CisKKwljb25zdCBjaGFyIGZp bGVuYW1lX3ByZWZpeFtdID0gVEVTVF9QUkVGSVggIi4iOworCWV4cGVjdF9kX2VxKHN0cm5jbXAo ZmlsZW5hbWVfcHJlZml4LCBmaWxlbmFtZSwgc2l6ZW9mKGZpbGVuYW1lX3ByZWZpeCkKKwkgICAg LSAxKSwgMCwgIkR1bXAgZmlsZSBuYW1lIHNob3VsZCBzdGFydCB3aXRoIFwiIiBURVNUX1BSRUZJ WCAiLlwiIik7CisKKwlmZCA9IG9wZW4oIi9kZXYvbnVsbCIsIE9fV1JPTkxZKTsKKwlhc3NlcnRf ZF9uZShmZCwgLTEsICJVbmV4cGVjdGVkIG9wZW4oKSBmYWlsdXJlIik7CisKKwlyZXR1cm4gZmQ7 Cit9CisKK1RFU1RfQkVHSU4odGVzdF9pZHVtcCkgeworCWJvb2wgYWN0aXZlOworCXZvaWQgKnA7 CisKKwljb25zdCBjaGFyICp0ZXN0X3ByZWZpeCA9IFRFU1RfUFJFRklYOworCisJdGVzdF9za2lw X2lmKCFjb25maWdfcHJvZik7CisKKwlhY3RpdmUgPSB0cnVlOworCisJZXhwZWN0X2RfZXEobWFs bGN0bCgicHJvZi5wcmVmaXgiLCBOVUxMLCBOVUxMLCAodm9pZCAqKSZ0ZXN0X3ByZWZpeCwKKwkg ICAgc2l6ZW9mKHRlc3RfcHJlZml4KSksIDAsCisJICAgICJVbmV4cGVjdGVkIG1hbGxjdGwgZmFp bHVyZSB3aGlsZSBvdmVyd3JpdGluZyBkdW1wIHByZWZpeCIpOworCisJZXhwZWN0X2RfZXEobWFs bGN0bCgicHJvZi5hY3RpdmUiLCBOVUxMLCBOVUxMLCAodm9pZCAqKSZhY3RpdmUsCisJICAgIHNp emVvZihhY3RpdmUpKSwgMCwKKwkgICAgIlVuZXhwZWN0ZWQgbWFsbGN0bCBmYWlsdXJlIHdoaWxl IGFjdGl2YXRpbmcgcHJvZmlsaW5nIik7CisKKwlwcm9mX2R1bXBfb3Blbl9maWxlID0gcHJvZl9k dW1wX29wZW5fZmlsZV9pbnRlcmNlcHQ7CisKKwlkaWRfcHJvZl9kdW1wX29wZW4gPSBmYWxzZTsK KwlwID0gbWFsbG9jeCgxLCAwKTsKKwlleHBlY3RfcHRyX25vdF9udWxsKHAsICJVbmV4cGVjdGVk IG1hbGxvY3goKSBmYWlsdXJlIik7CisJZGFsbG9jeChwLCAwKTsKKwlleHBlY3RfdHJ1ZShkaWRf cHJvZl9kdW1wX29wZW4sICJFeHBlY3RlZCBhIHByb2ZpbGUgZHVtcCIpOworfQorVEVTVF9FTkQK KworaW50CittYWluKHZvaWQpIHsKKwlyZXR1cm4gdGVzdCgKKwkgICAgdGVzdF9pZHVtcCk7Cit9 CgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVz dC91bml0L3Byb2ZfaWR1bXAuc2ggYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01 LjMuMC90ZXN0L3VuaXQvcHJvZl9pZHVtcC5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwLi40ZGM1OTlhCi0tLSAvZGV2L251bGwKKysrIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVp bGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L3Byb2ZfaWR1bXAuc2gKQEAgLTAsMCArMSw4IEBA CisjIS9iaW4vc2gKKworZXhwb3J0IE1BTExPQ19DT05GPSJ0Y2FjaGU6ZmFsc2UiCitpZiBbICJ4 JHtlbmFibGVfcHJvZn0iID0gIngxIiBdIDsgdGhlbgorICBleHBvcnQgTUFMTE9DX0NPTkY9IiR7 TUFMTE9DX0NPTkZ9LHByb2Y6dHJ1ZSxwcm9mX2FjY3VtOnRydWUscHJvZl9hY3RpdmU6ZmFsc2Us bGdfcHJvZl9zYW1wbGU6MCxsZ19wcm9mX2ludGVydmFsOjAiCitmaQorCisKCmRpZmYgLS1naXQg YS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvcHJvZl9s b2cuYyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9w cm9mX2xvZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmZjIwOGUKLS0t IC9kZXYvbnVsbAorKysgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90 ZXN0L3VuaXQvcHJvZl9sb2cuYwpAQCAtMCwwICsxLDE1MSBAQAorI2luY2x1ZGUgInRlc3QvamVt YWxsb2NfdGVzdC5oIgorI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL3Byb2ZfbG9nLmgiCisK KyNkZWZpbmUgTl9QQVJBTSAxMDAKKyNkZWZpbmUgTl9USFJFQURTIDEwCisKK3N0YXRpYyB2b2lk IGV4cGVjdF9yZXAoKSB7CisJZXhwZWN0X2JfZXEocHJvZl9sb2dfcmVwX2NoZWNrKCksIGZhbHNl LCAiUmVwIGNoZWNrIGZhaWxlZCIpOworfQorCitzdGF0aWMgdm9pZCBleHBlY3RfbG9nX2VtcHR5 KCkgeworCWV4cGVjdF96dV9lcShwcm9mX2xvZ19idF9jb3VudCgpLCAwLAorCSAgICAiVGhlIGxv ZyBoYXMgYmFja3RyYWNlczsgaXQgaXNuJ3QgZW1wdHkiKTsKKwlleHBlY3RfenVfZXEocHJvZl9s b2dfdGhyX2NvdW50KCksIDAsCisJICAgICJUaGUgbG9nIGhhcyB0aHJlYWRzOyBpdCBpc24ndCBl bXB0eSIpOworCWV4cGVjdF96dV9lcShwcm9mX2xvZ19hbGxvY19jb3VudCgpLCAwLAorCSAgICAi VGhlIGxvZyBoYXMgYWxsb2NhdGlvbnM7IGl0IGlzbid0IGVtcHR5Iik7Cit9CisKK3ZvaWQgKmJ1 ZltOX1BBUkFNXTsKKworc3RhdGljIHZvaWQgZigpIHsKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBp IDwgTl9QQVJBTTsgaSsrKSB7CisJCWJ1ZltpXSA9IG1hbGxvYygxMDApOworCX0KKwlmb3IgKGkg PSAwOyBpIDwgTl9QQVJBTTsgaSsrKSB7CisJCWZyZWUoYnVmW2ldKTsKKwl9Cit9CisKK1RFU1Rf QkVHSU4odGVzdF9wcm9mX2xvZ19tYW55X2xvZ3MpIHsKKwlpbnQgaTsKKworCXRlc3Rfc2tpcF9p ZighY29uZmlnX3Byb2YpOworCisJZm9yIChpID0gMDsgaSA8IE5fUEFSQU07IGkrKykgeworCQll eHBlY3RfYl9lcShwcm9mX2xvZ19pc19sb2dnaW5nKCksIGZhbHNlLAorCQkgICAgIkxvZ2dpbmcg c2hvdWxkbid0IGhhdmUgc3RhcnRlZCB5ZXQiKTsKKwkJZXhwZWN0X2RfZXEobWFsbGN0bCgicHJv Zi5sb2dfc3RhcnQiLCBOVUxMLCBOVUxMLCBOVUxMLCAwKSwgMCwKKwkJICAgICJVbmV4cGVjdGVk IG1hbGxjdGwgZmFpbHVyZSB3aGVuIHN0YXJ0aW5nIGxvZ2dpbmciKTsKKwkJZXhwZWN0X2JfZXEo cHJvZl9sb2dfaXNfbG9nZ2luZygpLCB0cnVlLAorCQkgICAgIkxvZ2dpbmcgc2hvdWxkIGJlIHN0 YXJ0ZWQgYnkgbm93Iik7CisJCWV4cGVjdF9sb2dfZW1wdHkoKTsKKwkJZXhwZWN0X3JlcCgpOwor CQlmKCk7CisJCWV4cGVjdF96dV9lcShwcm9mX2xvZ190aHJfY291bnQoKSwgMSwgIldyb25nIHRo cmVhZCBjb3VudCIpOworCQlleHBlY3RfcmVwKCk7CisJCWV4cGVjdF9iX2VxKHByb2ZfbG9nX2lz X2xvZ2dpbmcoKSwgdHJ1ZSwKKwkJICAgICJMb2dnaW5nIHNob3VsZCBzdGlsbCBiZSBvbiIpOwor CQlleHBlY3RfZF9lcShtYWxsY3RsKCJwcm9mLmxvZ19zdG9wIiwgTlVMTCwgTlVMTCwgTlVMTCwg MCksIDAsCisJCSAgICAiVW5leHBlY3RlZCBtYWxsY3RsIGZhaWx1cmUgd2hlbiBzdG9wcGluZyBs b2dnaW5nIik7CisJCWV4cGVjdF9iX2VxKHByb2ZfbG9nX2lzX2xvZ2dpbmcoKSwgZmFsc2UsCisJ CSAgICAiTG9nZ2luZyBzaG91bGQgaGF2ZSB0dXJuZWQgb2ZmIik7CisJfQorfQorVEVTVF9FTkQK KwordGhkX3QgdGhyX2J1ZltOX1RIUkVBRFNdOworCitzdGF0aWMgdm9pZCAqZl90aHJlYWQodm9p ZCAqdW51c2VkKSB7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IE5fUEFSQU07IGkrKykgewor CQl2b2lkICpwID0gbWFsbG9jKDEwMCk7CisJCW1lbXNldChwLCAxMDAsIDEpOworCQlmcmVlKHAp OworCX0KKworCXJldHVybiBOVUxMOworfQorCitURVNUX0JFR0lOKHRlc3RfcHJvZl9sb2dfbWFu eV90aHJlYWRzKSB7CisKKwl0ZXN0X3NraXBfaWYoIWNvbmZpZ19wcm9mKTsKKworCWludCBpOwor CWV4cGVjdF9kX2VxKG1hbGxjdGwoInByb2YubG9nX3N0YXJ0IiwgTlVMTCwgTlVMTCwgTlVMTCwg MCksIDAsCisJICAgICJVbmV4cGVjdGVkIG1hbGxjdGwgZmFpbHVyZSB3aGVuIHN0YXJ0aW5nIGxv Z2dpbmciKTsKKwlmb3IgKGkgPSAwOyBpIDwgTl9USFJFQURTOyBpKyspIHsKKwkJdGhkX2NyZWF0 ZSgmdGhyX2J1ZltpXSwgJmZfdGhyZWFkLCBOVUxMKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwg Tl9USFJFQURTOyBpKyspIHsKKwkJdGhkX2pvaW4odGhyX2J1ZltpXSwgTlVMTCk7CisJfQorCWV4 cGVjdF96dV9lcShwcm9mX2xvZ190aHJfY291bnQoKSwgTl9USFJFQURTLAorCSAgICAiV3Jvbmcg bnVtYmVyIG9mIHRocmVhZCBlbnRyaWVzIik7CisJZXhwZWN0X3JlcCgpOworCWV4cGVjdF9kX2Vx KG1hbGxjdGwoInByb2YubG9nX3N0b3AiLCBOVUxMLCBOVUxMLCBOVUxMLCAwKSwgMCwKKwkgICAg IlVuZXhwZWN0ZWQgbWFsbGN0bCBmYWlsdXJlIHdoZW4gc3RvcHBpbmcgbG9nZ2luZyIpOworfQor VEVTVF9FTkQKKworc3RhdGljIHZvaWQgZjMoKSB7CisJdm9pZCAqcCA9IG1hbGxvYygxMDApOwor CWZyZWUocCk7Cit9CisKK3N0YXRpYyB2b2lkIGYxKCkgeworCXZvaWQgKnAgPSBtYWxsb2MoMTAw KTsKKwlmMygpOworCWZyZWUocCk7Cit9CisKK3N0YXRpYyB2b2lkIGYyKCkgeworCXZvaWQgKnAg PSBtYWxsb2MoMTAwKTsKKwlmcmVlKHApOworfQorCitURVNUX0JFR0lOKHRlc3RfcHJvZl9sb2df bWFueV90cmFjZXMpIHsKKworCXRlc3Rfc2tpcF9pZighY29uZmlnX3Byb2YpOworCisJZXhwZWN0 X2RfZXEobWFsbGN0bCgicHJvZi5sb2dfc3RhcnQiLCBOVUxMLCBOVUxMLCBOVUxMLCAwKSwgMCwK KwkgICAgIlVuZXhwZWN0ZWQgbWFsbGN0bCBmYWlsdXJlIHdoZW4gc3RhcnRpbmcgbG9nZ2luZyIp OworCWludCBpOworCWV4cGVjdF9yZXAoKTsKKwlleHBlY3RfbG9nX2VtcHR5KCk7CisJZm9yIChp ID0gMDsgaSA8IE5fUEFSQU07IGkrKykgeworCQlleHBlY3RfcmVwKCk7CisJCWYxKCk7CisJCWV4 cGVjdF9yZXAoKTsKKwkJZjIoKTsKKwkJZXhwZWN0X3JlcCgpOworCQlmMygpOworCQlleHBlY3Rf cmVwKCk7CisJfQorCS8qCisJICogVGhlcmUgc2hvdWxkIGJlIDggdG90YWwgYmFja3RyYWNlczog dHdvIGZvciBtYWxsb2MvZnJlZSBpbiBmMSgpLCB0d28KKwkgKiBmb3IgbWFsbG9jL2ZyZWUgaW4g ZjIoKSwgdHdvIGZvciBtYWxsb2MvZnJlZSBpbiBmMygpLCBhbmQgdGhlbiB0d28KKwkgKiBmb3Ig bWFsbG9jL2ZyZWUgaW4gZjEoKSdzIGNhbGwgdG8gZjMoKS4gIEhvd2V2ZXIgY29tcGlsZXIKKwkg KiBvcHRpbWl6YXRpb25zIHN1Y2ggYXMgbG9vcCB1bnJvbGxpbmcgbWlnaHQgZ2VuZXJhdGUgbW9y ZSBjYWxsIHNpdGVzLgorCSAqIFNvID49IDggdHJhY2VzIGFyZSBleHBlY3RlZC4KKwkgKi8KKwll eHBlY3RfenVfZ2UocHJvZl9sb2dfYnRfY291bnQoKSwgOCwKKwkgICAgIkV4cGVjdCBhdCBsZWFz dCA4IGJhY2t0cmFjZXMgZ2l2ZW4gc2FtcGxlIHdvcmtsb2FkIik7CisJZXhwZWN0X2RfZXEobWFs bGN0bCgicHJvZi5sb2dfc3RvcCIsIE5VTEwsIE5VTEwsIE5VTEwsIDApLCAwLAorCSAgICAiVW5l eHBlY3RlZCBtYWxsY3RsIGZhaWx1cmUgd2hlbiBzdG9wcGluZyBsb2dnaW5nIik7Cit9CitURVNU X0VORAorCitpbnQKK21haW4odm9pZCkgeworCWlmIChjb25maWdfcHJvZikgeworCQlwcm9mX2xv Z19kdW1teV9zZXQodHJ1ZSk7CisJfQorCXJldHVybiB0ZXN0X25vX3JlZW50cmFuY3koCisJICAg IHRlc3RfcHJvZl9sb2dfbWFueV9sb2dzLAorCSAgICB0ZXN0X3Byb2ZfbG9nX21hbnlfdHJhY2Vz LAorCSAgICB0ZXN0X3Byb2ZfbG9nX21hbnlfdGhyZWFkcyk7Cit9CgpkaWZmIC0tZ2l0IGEvMzg5 LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L3Byb2ZfbG9nLnNo IGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L3Byb2Zf bG9nLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4NWY5YmYKLS0tIC9k ZXYvbnVsbAorKysgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0 L3VuaXQvcHJvZl9sb2cuc2gKQEAgLTAsMCArMSw1IEBACisjIS9iaW4vc2gKKworaWYgWyAieCR7 ZW5hYmxlX3Byb2Z9IiA9ICJ4MSIgXSA7IHRoZW4KKyAgZXhwb3J0IE1BTExPQ19DT05GPSJwcm9m OnRydWUscHJvZl9hY3RpdmU6dHJ1ZSxsZ19wcm9mX3NhbXBsZTowIgorZmkKCmRpZmYgLS1naXQg YS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvcHJvZl9t ZHVtcC5jIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0 L3Byb2ZfbWR1bXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NWIzYTUx Ci0tLSAvZGV2L251bGwKKysrIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4z LjAvdGVzdC91bml0L3Byb2ZfbWR1bXAuYwpAQCAtMCwwICsxLDIxNiBAQAorI2luY2x1ZGUgInRl c3QvamVtYWxsb2NfdGVzdC5oIgorCisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvcHJvZl9z eXMuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgKnRlc3RfZmlsZW5hbWUgPSAidGVzdF9maWxlbmFt ZSI7CitzdGF0aWMgYm9vbCBkaWRfcHJvZl9kdW1wX29wZW47CisKK3N0YXRpYyBpbnQKK3Byb2Zf ZHVtcF9vcGVuX2ZpbGVfaW50ZXJjZXB0KGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgbW9kZSkg eworCWludCBmZDsKKworCWRpZF9wcm9mX2R1bXBfb3BlbiA9IHRydWU7CisKKwkvKgorCSAqIFN0 cm9uZ2VyIHRoYW4gYSBzdHJjbXAoKSAtIHZlcmlmeWluZyB0aGF0IHdlIGludGVybmFsbHkgZGly ZWN0bHkgdXNlCisJICogdGhlIGNhbGxlciBzdXBwbGllZCBjaGFyIHBvaW50ZXIuCisJICovCisJ ZXhwZWN0X3B0cl9lcShmaWxlbmFtZSwgdGVzdF9maWxlbmFtZSwKKwkgICAgIkR1bXAgZmlsZSBu YW1lIHNob3VsZCBiZSBcIiVzXCIiLCB0ZXN0X2ZpbGVuYW1lKTsKKworCWZkID0gb3BlbigiL2Rl di9udWxsIiwgT19XUk9OTFkpOworCWFzc2VydF9kX25lKGZkLCAtMSwgIlVuZXhwZWN0ZWQgb3Bl bigpIGZhaWx1cmUiKTsKKworCXJldHVybiBmZDsKK30KKworVEVTVF9CRUdJTih0ZXN0X21kdW1w X25vcm1hbCkgeworCXRlc3Rfc2tpcF9pZighY29uZmlnX3Byb2YpOworCisJcHJvZl9kdW1wX29w ZW5fZmlsZV90ICpvcGVuX2ZpbGVfb3JpZyA9IHByb2ZfZHVtcF9vcGVuX2ZpbGU7CisKKwl2b2lk ICpwID0gbWFsbG9jeCgxLCAwKTsKKwlhc3NlcnRfcHRyX25vdF9udWxsKHAsICJVbmV4cGVjdGVk IG1hbGxvY3goKSBmYWlsdXJlIik7CisKKwlwcm9mX2R1bXBfb3Blbl9maWxlID0gcHJvZl9kdW1w X29wZW5fZmlsZV9pbnRlcmNlcHQ7CisJZGlkX3Byb2ZfZHVtcF9vcGVuID0gZmFsc2U7CisJZXhw ZWN0X2RfZXEobWFsbGN0bCgicHJvZi5kdW1wIiwgTlVMTCwgTlVMTCwgKHZvaWQgKikmdGVzdF9m aWxlbmFtZSwKKwkgICAgc2l6ZW9mKHRlc3RfZmlsZW5hbWUpKSwgMCwKKwkgICAgIlVuZXhwZWN0 ZWQgbWFsbGN0bCBmYWlsdXJlIHdoaWxlIGR1bXBpbmciKTsKKwlleHBlY3RfdHJ1ZShkaWRfcHJv Zl9kdW1wX29wZW4sICJFeHBlY3RlZCBhIHByb2ZpbGUgZHVtcCIpOworCisJZGFsbG9jeChwLCAw KTsKKworCXByb2ZfZHVtcF9vcGVuX2ZpbGUgPSBvcGVuX2ZpbGVfb3JpZzsKK30KK1RFU1RfRU5E CisKK3N0YXRpYyBpbnQKK3Byb2ZfZHVtcF9vcGVuX2ZpbGVfZXJyb3IoY29uc3QgY2hhciAqZmls ZW5hbWUsIGludCBtb2RlKSB7CisJcmV0dXJuIC0xOworfQorCisvKgorICogSW4gdGhlIGNvbnRl eHQgb2YgdGVzdF9tZHVtcF9vdXRwdXRfZXJyb3IsIHByb2ZfZHVtcF93cml0ZV9maWxlX2NvdW50 IGlzIHRoZQorICogdG90YWwgbnVtYmVyIG9mIHRpbWVzIHByb2ZfZHVtcF93cml0ZV9maWxlX2Vy cm9yKCkgaXMgZXhwZWN0ZWQgdG8gYmUgY2FsbGVkLgorICogSW4gdGhlIGNvbnRleHQgb2YgdGVz dF9tZHVtcF9tYXBzX2Vycm9yLCBwcm9mX2R1bXBfd3JpdGVfZmlsZV9jb3VudCBpcyB0aGUKKyAq IHRvdGFsIG51bWJlciBvZiB0aW1lcyBwcm9mX2R1bXBfd3JpdGVfZmlsZV9lcnJvcigpIGlzIGV4 cGVjdGVkIHRvIGJlIGNhbGxlZAorICogc3RhcnRpbmcgZnJvbSB0aGUgb25lIHRoYXQgY29udGFp bnMgYW4gJ00nIChiZWdpbm5pbmcgdGhlICJNQVBQRURfTElCUkFSSUVTIgorICogaGVhZGVyKS4K KyAqLworc3RhdGljIGludCBwcm9mX2R1bXBfd3JpdGVfZmlsZV9jb3VudDsKKworc3RhdGljIHNz aXplX3QKK3Byb2ZfZHVtcF93cml0ZV9maWxlX2Vycm9yKGludCBmZCwgY29uc3Qgdm9pZCAqcywg c2l6ZV90IGxlbikgeworCS0tcHJvZl9kdW1wX3dyaXRlX2ZpbGVfY291bnQ7CisKKwlleHBlY3Rf ZF9nZShwcm9mX2R1bXBfd3JpdGVfZmlsZV9jb3VudCwgMCwKKwkgICAgIldyaXRlIGlzIGNhbGxl ZCBhZnRlciBlcnJvciBvY2N1cnMiKTsKKworCWlmIChwcm9mX2R1bXBfd3JpdGVfZmlsZV9jb3Vu dCA9PSAwKSB7CisJCXJldHVybiAtMTsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBBbnkgbm9uLW5l Z2F0aXZlIG51bWJlciBpbmRpY2F0ZXMgc3VjY2VzcywgYW5kIGZvcgorCQkgKiBzaW1wbGljaXR5 IHdlIGp1c3QgdXNlIDAuICBXaGVuIHByb2ZfZHVtcF93cml0ZV9maWxlX2NvdW50CisJCSAqIGlz IHBvc2l0aXZlLCBpdCBtZWFucyB0aGF0IHdlIGhhdmVuJ3QgcmVhY2hlZCB0aGUgd3JpdGUgdGhh dAorCQkgKiB3ZSB3YW50IHRvIGZhaWw7IHdoZW4gcHJvZl9kdW1wX3dyaXRlX2ZpbGVfY291bnQg aXMKKwkJICogbmVnYXRpdmUsIGl0IG1lYW5zIHRoYXQgd2UndmUgYWxyZWFkeSB2aW9sYXRlZCB0 aGUKKwkJICogZXhwZWN0X2RfZ2UocHJvZl9kdW1wX3dyaXRlX2ZpbGVfY291bnQsIDApIHN0YXRl bWVudCBhYm92ZSwKKwkJICogYnV0IGluc3RlYWQgb2YgYWJvcnRpbmcsIHdlIGNvbnRpbnVlIHRo ZSByZXN0IG9mIHRoZSB0ZXN0LAorCQkgKiBhbmQgd2UgaW5kaWNhdGUgdGhhdCBhbGwgdGhlIHdy aXRlcyBhZnRlciB0aGUgZmFpbGVkIHdyaXRlCisJCSAqIGFyZSBzdWNjZXNzZnVsLgorCQkgKi8K KwkJcmV0dXJuIDA7CisJfQorfQorCitzdGF0aWMgdm9pZAorZXhwZWN0X3dyaXRlX2ZhaWx1cmUo aW50IGNvdW50KSB7CisJcHJvZl9kdW1wX3dyaXRlX2ZpbGVfY291bnQgPSBjb3VudDsKKwlleHBl Y3RfZF9lcShtYWxsY3RsKCJwcm9mLmR1bXAiLCBOVUxMLCBOVUxMLCAodm9pZCAqKSZ0ZXN0X2Zp bGVuYW1lLAorCSAgICBzaXplb2YodGVzdF9maWxlbmFtZSkpLCBFRkFVTFQsICJEdW1wIHNob3Vs ZCBlcnIiKTsKKwlleHBlY3RfZF9lcShwcm9mX2R1bXBfd3JpdGVfZmlsZV9jb3VudCwgMCwKKwkg ICAgIkR1bXBpbmcgc3RvcHBlZCBhZnRlciBhIHdyb25nIG51bWJlciBvZiB3cml0ZXMiKTsKK30K KworVEVTVF9CRUdJTih0ZXN0X21kdW1wX291dHB1dF9lcnJvcikgeworCXRlc3Rfc2tpcF9pZigh Y29uZmlnX3Byb2YpOworCXRlc3Rfc2tpcF9pZighY29uZmlnX2RlYnVnKTsKKworCXByb2ZfZHVt cF9vcGVuX2ZpbGVfdCAqb3Blbl9maWxlX29yaWcgPSBwcm9mX2R1bXBfb3Blbl9maWxlOworCXBy b2ZfZHVtcF93cml0ZV9maWxlX3QgKndyaXRlX2ZpbGVfb3JpZyA9IHByb2ZfZHVtcF93cml0ZV9m aWxlOworCisJcHJvZl9kdW1wX3dyaXRlX2ZpbGUgPSBwcm9mX2R1bXBfd3JpdGVfZmlsZV9lcnJv cjsKKworCXZvaWQgKnAgPSBtYWxsb2N4KDEsIDApOworCWFzc2VydF9wdHJfbm90X251bGwocCwg IlVuZXhwZWN0ZWQgbWFsbG9jeCgpIGZhaWx1cmUiKTsKKworCS8qCisJICogV2hlbiBvcGVuaW5n IHRoZSBkdW1wIGZpbGUgZmFpbHMsIHRoZXJlIHNob3VsZG4ndCBiZSBhbnkgd3JpdGUsIGFuZAor CSAqIG1hbGxjdGwoKSBzaG91bGQgcmV0dXJuIGZhaWx1cmUuCisJICovCisJcHJvZl9kdW1wX29w ZW5fZmlsZSA9IHByb2ZfZHVtcF9vcGVuX2ZpbGVfZXJyb3I7CisJZXhwZWN0X3dyaXRlX2ZhaWx1 cmUoMCk7CisKKwkvKgorCSAqIFdoZW4gdGhlIG4tdGggd3JpdGUgZmFpbHMsIHRoZXJlIHNob3Vs ZG4ndCBiZSBhbnkgbW9yZSB3cml0ZSwgYW5kCisJICogbWFsbGN0bCgpIHNob3VsZCByZXR1cm4g ZmFpbHVyZS4KKwkgKi8KKwlwcm9mX2R1bXBfb3Blbl9maWxlID0gcHJvZl9kdW1wX29wZW5fZmls ZV9pbnRlcmNlcHQ7CisJZXhwZWN0X3dyaXRlX2ZhaWx1cmUoMSk7IC8qIEZpcnN0IHdyaXRlIGZh aWxzLiAqLworCWV4cGVjdF93cml0ZV9mYWlsdXJlKDIpOyAvKiBTZWNvbmQgd3JpdGUgZmFpbHMu ICovCisKKwlkYWxsb2N4KHAsIDApOworCisJcHJvZl9kdW1wX29wZW5fZmlsZSA9IG9wZW5fZmls ZV9vcmlnOworCXByb2ZfZHVtcF93cml0ZV9maWxlID0gd3JpdGVfZmlsZV9vcmlnOworfQorVEVT VF9FTkQKKworc3RhdGljIGludAorcHJvZl9kdW1wX29wZW5fbWFwc19lcnJvcigpIHsKKwlyZXR1 cm4gLTE7Cit9CisKK3N0YXRpYyBib29sIHN0YXJ0ZWRfcGlwaW5nX21hcHNfZmlsZTsKKworc3Rh dGljIHNzaXplX3QKK3Byb2ZfZHVtcF93cml0ZV9tYXBzX2ZpbGVfZXJyb3IoaW50IGZkLCBjb25z dCB2b2lkICpzLCBzaXplX3QgbGVuKSB7CisJLyogVGhlIG1haW4gZHVtcCBkb2Vzbid0IGNvbnRh aW4gYW55IGNhcGl0YWwgJ00nLiAqLworCWlmICghc3RhcnRlZF9waXBpbmdfbWFwc19maWxlICYm IHN0cmNocihzLCAnTScpICE9IE5VTEwpIHsKKwkJc3RhcnRlZF9waXBpbmdfbWFwc19maWxlID0g dHJ1ZTsKKwl9CisKKwlpZiAoc3RhcnRlZF9waXBpbmdfbWFwc19maWxlKSB7CisJCXJldHVybiBw cm9mX2R1bXBfd3JpdGVfZmlsZV9lcnJvcihmZCwgcywgbGVuKTsKKwl9IGVsc2UgeworCQkvKiBS ZXR1cm4gc3VjY2VzcyB3aGVuIHdlIGhhdmVuJ3Qgc3RhcnRlZCBwaXBpbmcgbWFwcy4gKi8KKwkJ cmV0dXJuIDA7CisJfQorfQorCitzdGF0aWMgdm9pZAorZXhwZWN0X21hcHNfd3JpdGVfZmFpbHVy ZShpbnQgY291bnQpIHsKKwlpbnQgbWZkID0gcHJvZl9kdW1wX29wZW5fbWFwcygpOworCWlmICht ZmQgPT0gLTEpIHsKKwkJLyogTm8gbmVlZCB0byBjb250aW51ZSBpZiB3ZSBqdXN0IGNhbid0IGZp bmQgdGhlIG1hcHMgZmlsZS4gKi8KKwkJcmV0dXJuOworCX0KKwljbG9zZShtZmQpOworCXN0YXJ0 ZWRfcGlwaW5nX21hcHNfZmlsZSA9IGZhbHNlOworCWV4cGVjdF93cml0ZV9mYWlsdXJlKGNvdW50 KTsKKwlleHBlY3RfdHJ1ZShzdGFydGVkX3BpcGluZ19tYXBzX2ZpbGUsICJTaG91bGQgc3RhcnQg cGlwaW5nIG1hcHMiKTsKK30KKworVEVTVF9CRUdJTih0ZXN0X21kdW1wX21hcHNfZXJyb3IpIHsK Kwl0ZXN0X3NraXBfaWYoIWNvbmZpZ19wcm9mKTsKKwl0ZXN0X3NraXBfaWYoIWNvbmZpZ19kZWJ1 Zyk7CisKKwlwcm9mX2R1bXBfb3Blbl9maWxlX3QgKm9wZW5fZmlsZV9vcmlnID0gcHJvZl9kdW1w X29wZW5fZmlsZTsKKwlwcm9mX2R1bXBfd3JpdGVfZmlsZV90ICp3cml0ZV9maWxlX29yaWcgPSBw cm9mX2R1bXBfd3JpdGVfZmlsZTsKKwlwcm9mX2R1bXBfb3Blbl9tYXBzX3QgKm9wZW5fbWFwc19v cmlnID0gcHJvZl9kdW1wX29wZW5fbWFwczsKKworCXByb2ZfZHVtcF9vcGVuX2ZpbGUgPSBwcm9m X2R1bXBfb3Blbl9maWxlX2ludGVyY2VwdDsKKwlwcm9mX2R1bXBfd3JpdGVfZmlsZSA9IHByb2Zf ZHVtcF93cml0ZV9tYXBzX2ZpbGVfZXJyb3I7CisKKwl2b2lkICpwID0gbWFsbG9jeCgxLCAwKTsK Kwlhc3NlcnRfcHRyX25vdF9udWxsKHAsICJVbmV4cGVjdGVkIG1hbGxvY3goKSBmYWlsdXJlIik7 CisKKwkvKgorCSAqIFdoZW4gb3BlbmluZyB0aGUgbWFwcyBmaWxlIGZhaWxzLCB0aGVyZSBzaG91 bGRuJ3QgYmUgYW55IG1hcHMgd3JpdGUsCisJICogYW5kIG1hbGxjdGwoKSBzaG91bGQgcmV0dXJu IHN1Y2Nlc3MuCisJICovCisJcHJvZl9kdW1wX29wZW5fbWFwcyA9IHByb2ZfZHVtcF9vcGVuX21h cHNfZXJyb3I7CisJc3RhcnRlZF9waXBpbmdfbWFwc19maWxlID0gZmFsc2U7CisJcHJvZl9kdW1w X3dyaXRlX2ZpbGVfY291bnQgPSAwOworCWV4cGVjdF9kX2VxKG1hbGxjdGwoInByb2YuZHVtcCIs IE5VTEwsIE5VTEwsICh2b2lkICopJnRlc3RfZmlsZW5hbWUsCisJICAgIHNpemVvZih0ZXN0X2Zp bGVuYW1lKSksIDAsCisJICAgICJtYWxsY3RsIHNob3VsZCBub3QgZmFpbCBpbiBjYXNlIG9mIG1h cHMgZmlsZSBvcGVuaW5nIGZhaWx1cmUiKTsKKwlleHBlY3RfZmFsc2Uoc3RhcnRlZF9waXBpbmdf bWFwc19maWxlLCAiU2hvdWxkbid0IHN0YXJ0IHBpcGluZyBtYXBzIik7CisJZXhwZWN0X2RfZXEo cHJvZl9kdW1wX3dyaXRlX2ZpbGVfY291bnQsIDAsCisJICAgICJEdW1waW5nIHN0b3BwZWQgYWZ0 ZXIgYSB3cm9uZyBudW1iZXIgb2Ygd3JpdGVzIik7CisKKwkvKgorCSAqIFdoZW4gdGhlIG4tdGgg bWFwcyB3cml0ZSBmYWlscyAoZ2l2ZW4gdGhhdCB3ZSBhcmUgYWJsZSB0byBmaW5kIHRoZQorCSAq IG1hcHMgZmlsZSksIHRoZXJlIHNob3VsZG4ndCBiZSBhbnkgbW9yZSBtYXBzIHdyaXRlLCBhbmQg bWFsbGN0bCgpCisJICogc2hvdWxkIHJldHVybiBmYWlsdXJlLgorCSAqLworCXByb2ZfZHVtcF9v cGVuX21hcHMgPSBvcGVuX21hcHNfb3JpZzsKKwlleHBlY3RfbWFwc193cml0ZV9mYWlsdXJlKDEp OyAvKiBGaXJzdCB3cml0ZSBmYWlscy4gKi8KKwlleHBlY3RfbWFwc193cml0ZV9mYWlsdXJlKDIp OyAvKiBTZWNvbmQgd3JpdGUgZmFpbHMuICovCisKKwlkYWxsb2N4KHAsIDApOworCisJcHJvZl9k dW1wX29wZW5fZmlsZSA9IG9wZW5fZmlsZV9vcmlnOworCXByb2ZfZHVtcF93cml0ZV9maWxlID0g d3JpdGVfZmlsZV9vcmlnOworfQorVEVTVF9FTkQKKworaW50CittYWluKHZvaWQpIHsKKwlyZXR1 cm4gdGVzdCgKKwkgICAgdGVzdF9tZHVtcF9ub3JtYWwsCisJICAgIHRlc3RfbWR1bXBfb3V0cHV0 X2Vycm9yLAorCSAgICB0ZXN0X21kdW1wX21hcHNfZXJyb3IpOworfQoKZGlmZiAtLWdpdCBhLzM4 OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9wcm9mX21kdW1w LnNoIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L3By b2ZfbWR1bXAuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDE0Y2I4Ywot LS0gL2Rldi9udWxsCisrKyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4w L3Rlc3QvdW5pdC9wcm9mX21kdW1wLnNoCkBAIC0wLDAgKzEsNiBAQAorIyEvYmluL3NoCisKK2lm IFsgIngke2VuYWJsZV9wcm9mfSIgPSAieDEiIF0gOyB0aGVuCisgIGV4cG9ydCBNQUxMT0NfQ09O Rj0icHJvZjp0cnVlLGxnX3Byb2Zfc2FtcGxlOjAiCitmaQorCgpkaWZmIC0tZ2l0IGEvMzg5LWRz LWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L3Byb2ZfcmVjZW50LmMg Yi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvcHJvZl9y ZWNlbnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZmIzNzIzCi0tLSAv ZGV2L251bGwKKysrIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVz dC91bml0L3Byb2ZfcmVjZW50LmMKQEAgLTAsMCArMSw2NzggQEAKKyNpbmNsdWRlICJ0ZXN0L2pl bWFsbG9jX3Rlc3QuaCIKKworI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL3Byb2ZfcmVjZW50 LmgiCisKKy8qIEFzIHNwZWNpZmllZCBpbiB0aGUgc2hlbGwgc2NyaXB0ICovCisjZGVmaW5lIE9Q VF9BTExPQ19NQVggMworCisvKiBJbnZhcmlhbnQgYmVmb3JlIGFuZCBhZnRlciBldmVyeSB0ZXN0 ICh3aGVuIGNvbmZpZ19wcm9mIGlzIG9uKSAqLworc3RhdGljIHZvaWQKK2NvbmZpcm1fcHJvZl9z ZXR1cCgpIHsKKwkvKiBPcHRpb25zICovCisJYXNzZXJ0X3RydWUob3B0X3Byb2YsICJvcHRfcHJv ZiBub3Qgb24iKTsKKwlhc3NlcnRfdHJ1ZShvcHRfcHJvZl9hY3RpdmUsICJvcHRfcHJvZl9hY3Rp dmUgbm90IG9uIik7CisJYXNzZXJ0X3pkX2VxKG9wdF9wcm9mX3JlY2VudF9hbGxvY19tYXgsIE9Q VF9BTExPQ19NQVgsCisJICAgICJvcHRfcHJvZl9yZWNlbnRfYWxsb2NfbWF4IG5vdCBzZXQgY29y cmVjdGx5Iik7CisKKwkvKiBEeW5hbWljcyAqLworCWFzc2VydF90cnVlKHByb2ZfYWN0aXZlX3N0 YXRlLCAicHJvZl9hY3RpdmUgbm90IG9uIik7CisJYXNzZXJ0X3pkX2VxKHByb2ZfcmVjZW50X2Fs bG9jX21heF9jdGxfcmVhZCgpLCBPUFRfQUxMT0NfTUFYLAorCSAgICAicHJvZl9yZWNlbnRfYWxs b2NfbWF4IG5vdCBzZXQgY29ycmVjdGx5Iik7Cit9CisKK1RFU1RfQkVHSU4odGVzdF9jb25maXJt X3NldHVwKSB7CisJdGVzdF9za2lwX2lmKCFjb25maWdfcHJvZik7CisJY29uZmlybV9wcm9mX3Nl dHVwKCk7Cit9CitURVNUX0VORAorCitURVNUX0JFR0lOKHRlc3RfcHJvZl9yZWNlbnRfb2ZmKSB7 CisJdGVzdF9za2lwX2lmKGNvbmZpZ19wcm9mKTsKKworCWNvbnN0IHNzaXplX3QgcGFzdF9yZWYg PSAwLCBmdXR1cmVfcmVmID0gMDsKKwljb25zdCBzaXplX3QgbGVuX3JlZiA9IHNpemVvZihzc2l6 ZV90KTsKKworCXNzaXplX3QgcGFzdCA9IHBhc3RfcmVmLCBmdXR1cmUgPSBmdXR1cmVfcmVmOwor CXNpemVfdCBsZW4gPSBsZW5fcmVmOworCisjZGVmaW5lIEFTU0VSVF9TSE9VTERfRkFJTChvcHQs IGEsIGIsIGMsIGQpIGRvIHsJCQlcCisJYXNzZXJ0X2RfZXEobWFsbGN0bCgiZXhwZXJpbWVudGFs LnByb2ZfcmVjZW50LiIgb3B0LCBhLCBiLCBjLAlcCisJICAgIGQpLCBFTk9FTlQsICJTaG91bGQg cmV0dXJuIEVOT0VOVCB3aGVuIGNvbmZpZ19wcm9mIGlzIG9mZiIpO1wKKwlhc3NlcnRfemRfZXEo cGFzdCwgcGFzdF9yZWYsICJvdXRwdXQgd2FzIHRvdWNoZWQiKTsJCVwKKwlhc3NlcnRfenVfZXEo bGVuLCBsZW5fcmVmLCAib3V0cHV0IGxlbmd0aCB3YXMgdG91Y2hlZCIpOwlcCisJYXNzZXJ0X3pk X2VxKGZ1dHVyZSwgZnV0dXJlX3JlZiwgImlucHV0IHdhcyB0b3VjaGVkIik7CQlcCit9IHdoaWxl ICgwKQorCisJQVNTRVJUX1NIT1VMRF9GQUlMKCJhbGxvY19tYXgiLCBOVUxMLCBOVUxMLCBOVUxM LCAwKTsKKwlBU1NFUlRfU0hPVUxEX0ZBSUwoImFsbG9jX21heCIsICZwYXN0LCAmbGVuLCBOVUxM LCAwKTsKKwlBU1NFUlRfU0hPVUxEX0ZBSUwoImFsbG9jX21heCIsIE5VTEwsIE5VTEwsICZmdXR1 cmUsIGxlbik7CisJQVNTRVJUX1NIT1VMRF9GQUlMKCJhbGxvY19tYXgiLCAmcGFzdCwgJmxlbiwg JmZ1dHVyZSwgbGVuKTsKKworI3VuZGVmIEFTU0VSVF9TSE9VTERfRkFJTAorfQorVEVTVF9FTkQK KworVEVTVF9CRUdJTih0ZXN0X3Byb2ZfcmVjZW50X29uKSB7CisJdGVzdF9za2lwX2lmKCFjb25m aWdfcHJvZik7CisKKwlzc2l6ZV90IHBhc3QsIGZ1dHVyZTsKKwlzaXplX3QgbGVuID0gc2l6ZW9m KHNzaXplX3QpOworCisJY29uZmlybV9wcm9mX3NldHVwKCk7CisKKwlhc3NlcnRfZF9lcShtYWxs Y3RsKCJleHBlcmltZW50YWwucHJvZl9yZWNlbnQuYWxsb2NfbWF4IiwKKwkgICAgTlVMTCwgTlVM TCwgTlVMTCwgMCksIDAsICJuby1vcCBtYWxsY3RsIHNob3VsZCBiZSBhbGxvd2VkIik7CisJY29u ZmlybV9wcm9mX3NldHVwKCk7CisKKwlhc3NlcnRfZF9lcShtYWxsY3RsKCJleHBlcmltZW50YWwu cHJvZl9yZWNlbnQuYWxsb2NfbWF4IiwKKwkgICAgJnBhc3QsICZsZW4sIE5VTEwsIDApLCAwLCAi UmVhZCBlcnJvciIpOworCWV4cGVjdF96ZF9lcShwYXN0LCBPUFRfQUxMT0NfTUFYLCAiV3Jvbmcg cmVhZCByZXN1bHQiKTsKKwlmdXR1cmUgPSBPUFRfQUxMT0NfTUFYICsgMTsKKwlhc3NlcnRfZF9l cShtYWxsY3RsKCJleHBlcmltZW50YWwucHJvZl9yZWNlbnQuYWxsb2NfbWF4IiwKKwkgICAgTlVM TCwgTlVMTCwgJmZ1dHVyZSwgbGVuKSwgMCwgIldyaXRlIGVycm9yIik7CisJZnV0dXJlID0gLTE7 CisJYXNzZXJ0X2RfZXEobWFsbGN0bCgiZXhwZXJpbWVudGFsLnByb2ZfcmVjZW50LmFsbG9jX21h eCIsCisJICAgICZwYXN0LCAmbGVuLCAmZnV0dXJlLCBsZW4pLCAwLCAiUmVhZC93cml0ZSBlcnJv ciIpOworCWV4cGVjdF96ZF9lcShwYXN0LCBPUFRfQUxMT0NfTUFYICsgMSwgIldyb25nIHJlYWQg cmVzdWx0Iik7CisJZnV0dXJlID0gLTI7CisJYXNzZXJ0X2RfZXEobWFsbGN0bCgiZXhwZXJpbWVu dGFsLnByb2ZfcmVjZW50LmFsbG9jX21heCIsCisJICAgICZwYXN0LCAmbGVuLCAmZnV0dXJlLCBs ZW4pLCBFSU5WQUwsCisJICAgICJJbnZhbGlkIHdyaXRlIHNob3VsZCByZXR1cm4gRUlOVkFMIik7 CisJZXhwZWN0X3pkX2VxKHBhc3QsIE9QVF9BTExPQ19NQVggKyAxLAorCSAgICAiT3V0cHV0IHNo b3VsZCBub3QgYmUgdG91Y2hlZCBnaXZlbiBpbnZhbGlkIHdyaXRlIik7CisJZnV0dXJlID0gT1BU X0FMTE9DX01BWDsKKwlhc3NlcnRfZF9lcShtYWxsY3RsKCJleHBlcmltZW50YWwucHJvZl9yZWNl bnQuYWxsb2NfbWF4IiwKKwkgICAgJnBhc3QsICZsZW4sICZmdXR1cmUsIGxlbiksIDAsICJSZWFk L3dyaXRlIGVycm9yIik7CisJZXhwZWN0X3pkX2VxKHBhc3QsIC0xLCAiV3JvbmcgcmVhZCByZXN1 bHQiKTsKKwlmdXR1cmUgPSBPUFRfQUxMT0NfTUFYICsgMjsKKwlhc3NlcnRfZF9lcShtYWxsY3Rs KCJleHBlcmltZW50YWwucHJvZl9yZWNlbnQuYWxsb2NfbWF4IiwKKwkgICAgJnBhc3QsICZsZW4s ICZmdXR1cmUsIGxlbiAqIDIpLCBFSU5WQUwsCisJICAgICJJbnZhbGlkIHdyaXRlIHNob3VsZCBy ZXR1cm4gRUlOVkFMIik7CisJZXhwZWN0X3pkX2VxKHBhc3QsIC0xLAorCSAgICAiT3V0cHV0IHNo b3VsZCBub3QgYmUgdG91Y2hlZCBnaXZlbiBpbnZhbGlkIHdyaXRlIik7CisKKwljb25maXJtX3By b2Zfc2V0dXAoKTsKK30KK1RFU1RfRU5ECisKKy8qIFJlcHJvZHVjaWJsZSBzZXF1ZW5jZSBvZiBy ZXF1ZXN0IHNpemVzICovCisjZGVmaW5lIE5USF9SRVFfU0laRShuKSAoKG4pICogOTcgKyAxMDEp CisKK3N0YXRpYyB2b2lkCitjb25maXJtX21hbGxvYyh2b2lkICpwKSB7CisJYXNzZXJ0X3B0cl9u b3RfbnVsbChwLCAibWFsbG9jIGZhaWxlZCB1bmV4cGVjdGVkbHkiKTsKKwllZGF0YV90ICplID0g ZW1hcF9lZGF0YV9sb29rdXAoVFNETl9OVUxMLCAmYXJlbmFfZW1hcF9nbG9iYWwsIHApOworCWFz c2VydF9wdHJfbm90X251bGwoZSwgIk5VTEwgZWRhdGEgZm9yIGxpdmluZyBwb2ludGVyIik7CisJ cHJvZl9yZWNlbnRfdCAqbiA9IGVkYXRhX3Byb2ZfcmVjZW50X2FsbG9jX2dldF9ub19sb2NrX3Rl c3QoZSk7CisJYXNzZXJ0X3B0cl9ub3RfbnVsbChuLCAiUmVjb3JkIGluIGVkYXRhIHNob3VsZCBu b3QgYmUgTlVMTCIpOworCWV4cGVjdF9wdHJfbm90X251bGwobi0+YWxsb2NfdGN0eCwKKwkgICAg ImFsbG9jX3RjdHggaW4gcmVjb3JkIHNob3VsZCBub3QgYmUgTlVMTCIpOworCWV4cGVjdF9wdHJf ZXEoZSwgcHJvZl9yZWNlbnRfYWxsb2NfZWRhdGFfZ2V0X25vX2xvY2tfdGVzdChuKSwKKwkgICAg ImVkYXRhIHBvaW50ZXIgaW4gcmVjb3JkIGlzIG5vdCBjb3JyZWN0Iik7CisJZXhwZWN0X3B0cl9u dWxsKG4tPmRhbGxvY190Y3R4LCAiZGFsbG9jX3RjdHggaW4gcmVjb3JkIHNob3VsZCBiZSBOVUxM Iik7Cit9CisKK3N0YXRpYyB2b2lkCitjb25maXJtX3JlY29yZF9zaXplKHByb2ZfcmVjZW50X3Qg Km4sIHVuc2lnbmVkIGt0aCkgeworCWV4cGVjdF96dV9lcShuLT5zaXplLCBOVEhfUkVRX1NJWkUo a3RoKSwKKwkgICAgIlJlY29yZGVkIGFsbG9jYXRpb24gc2l6ZSBpcyB3cm9uZyIpOworfQorCitz dGF0aWMgdm9pZAorY29uZmlybV9yZWNvcmRfbGl2aW5nKHByb2ZfcmVjZW50X3QgKm4pIHsKKwll eHBlY3RfcHRyX25vdF9udWxsKG4tPmFsbG9jX3RjdHgsCisJICAgICJhbGxvY190Y3R4IGluIHJl Y29yZCBzaG91bGQgbm90IGJlIE5VTEwiKTsKKwllZGF0YV90ICplZGF0YSA9IHByb2ZfcmVjZW50 X2FsbG9jX2VkYXRhX2dldF9ub19sb2NrX3Rlc3Qobik7CisJYXNzZXJ0X3B0cl9ub3RfbnVsbChl ZGF0YSwKKwkgICAgIlJlY29yZGVkIGVkYXRhIHNob3VsZCBub3QgYmUgTlVMTCBmb3IgbGl2aW5n IHBvaW50ZXIiKTsKKwlleHBlY3RfcHRyX2VxKG4sIGVkYXRhX3Byb2ZfcmVjZW50X2FsbG9jX2dl dF9ub19sb2NrX3Rlc3QoZWRhdGEpLAorCSAgICAiUmVjb3JkIGluIGVkYXRhIGlzIG5vdCBjb3Jy ZWN0Iik7CisJZXhwZWN0X3B0cl9udWxsKG4tPmRhbGxvY190Y3R4LCAiZGFsbG9jX3RjdHggaW4g cmVjb3JkIHNob3VsZCBiZSBOVUxMIik7Cit9CisKK3N0YXRpYyB2b2lkCitjb25maXJtX3JlY29y ZF9yZWxlYXNlZChwcm9mX3JlY2VudF90ICpuKSB7CisJZXhwZWN0X3B0cl9ub3RfbnVsbChuLT5h bGxvY190Y3R4LAorCSAgICAiYWxsb2NfdGN0eCBpbiByZWNvcmQgc2hvdWxkIG5vdCBiZSBOVUxM Iik7CisJZXhwZWN0X3B0cl9udWxsKHByb2ZfcmVjZW50X2FsbG9jX2VkYXRhX2dldF9ub19sb2Nr X3Rlc3QobiksCisJICAgICJSZWNvcmRlZCBlZGF0YSBzaG91bGQgYmUgTlVMTCBmb3IgcmVsZWFz ZWQgcG9pbnRlciIpOworCWV4cGVjdF9wdHJfbm90X251bGwobi0+ZGFsbG9jX3RjdHgsCisJICAg ICJkYWxsb2NfdGN0eCBpbiByZWNvcmQgc2hvdWxkIG5vdCBiZSBOVUxMIGZvciByZWxlYXNlZCBw b2ludGVyIik7Cit9CisKK1RFU1RfQkVHSU4odGVzdF9wcm9mX3JlY2VudF9hbGxvYykgeworCXRl c3Rfc2tpcF9pZighY29uZmlnX3Byb2YpOworCisJYm9vbCBiOworCXVuc2lnbmVkIGksIGM7CisJ c2l6ZV90IHJlcV9zaXplOworCXZvaWQgKnA7CisJcHJvZl9yZWNlbnRfdCAqbjsKKwlzc2l6ZV90 IGZ1dHVyZTsKKworCWNvbmZpcm1fcHJvZl9zZXR1cCgpOworCisJLyoKKwkgKiBGaXJzdCBiYXRj aCBvZiAyICogT1BUX0FMTE9DX01BWCBhbGxvY2F0aW9ucy4gIEFmdGVyIHRoZQorCSAqIChPUFRf QUxMT0NfTUFYIC0gMSkndGggYWxsb2NhdGlvbiB0aGUgcmVjb3JkZWQgYWxsb2NhdGlvbnMgc2hv dWxkCisJICogYWx3YXlzIGJlIHRoZSBsYXN0IE9QVF9BTExPQ19NQVggYWxsb2NhdGlvbnMgY29t aW5nIGZyb20gaGVyZS4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMiAqIE9QVF9BTExPQ19NQVg7 ICsraSkgeworCQlyZXFfc2l6ZSA9IE5USF9SRVFfU0laRShpKTsKKwkJcCA9IG1hbGxvYyhyZXFf c2l6ZSk7CisJCWNvbmZpcm1fbWFsbG9jKHApOworCQlpZiAoaSA8IE9QVF9BTExPQ19NQVggLSAx KSB7CisJCQlhc3NlcnRfZmFsc2UocWxfZW1wdHkoJnByb2ZfcmVjZW50X2FsbG9jX2xpc3QpLAor CQkJICAgICJFbXB0eSByZWNlbnQgYWxsb2NhdGlvbiIpOworCQkJZnJlZShwKTsKKwkJCS8qCisJ CQkgKiBUaGUgcmVjb3JkZWQgYWxsb2NhdGlvbnMgbWF5IHN0aWxsIGluY2x1ZGUgc29tZQorCQkJ ICogb3RoZXIgYWxsb2NhdGlvbnMgYmVmb3JlIHRoZSB0ZXN0IHJ1biBzdGFydGVkLAorCQkJICog c28ga2VlcCBhbGxvY2F0aW5nIHdpdGhvdXQgY2hlY2tpbmcgYW55dGhpbmcuCisJCQkgKi8KKwkJ CWNvbnRpbnVlOworCQl9CisJCWMgPSAwOworCQlxbF9mb3JlYWNoKG4sICZwcm9mX3JlY2VudF9h bGxvY19saXN0LCBsaW5rKSB7CisJCQkrK2M7CisJCQljb25maXJtX3JlY29yZF9zaXplKG4sIGkg KyBjIC0gT1BUX0FMTE9DX01BWCk7CisJCQlpZiAoYyA9PSBPUFRfQUxMT0NfTUFYKSB7CisJCQkJ Y29uZmlybV9yZWNvcmRfbGl2aW5nKG4pOworCQkJfSBlbHNlIHsKKwkJCQljb25maXJtX3JlY29y ZF9yZWxlYXNlZChuKTsKKwkJCX0KKwkJfQorCQlhc3NlcnRfdV9lcShjLCBPUFRfQUxMT0NfTUFY LAorCQkgICAgIkluY29ycmVjdCB0b3RhbCBudW1iZXIgb2YgYWxsb2NhdGlvbnMiKTsKKwkJZnJl ZShwKTsKKwl9CisKKwljb25maXJtX3Byb2Zfc2V0dXAoKTsKKworCWIgPSBmYWxzZTsKKwlhc3Nl cnRfZF9lcShtYWxsY3RsKCJwcm9mLmFjdGl2ZSIsIE5VTEwsIE5VTEwsICZiLCBzaXplb2YoYm9v bCkpLCAwLAorCSAgICAibWFsbGN0bCBmb3IgdHVybmluZyBvZmYgcHJvZl9hY3RpdmUgZmFpbGVk Iik7CisKKwkvKgorCSAqIFNlY29uZCBiYXRjaCBvZiBPUFRfQUxMT0NfTUFYIGFsbG9jYXRpb25z LiAgU2luY2UgcHJvZl9hY3RpdmUgaXMKKwkgKiB0dXJuZWQgb2ZmLCB0aGlzIGJhdGNoIHNob3Vs ZG4ndCBiZSByZWNvcmRlZC4KKwkgKi8KKwlmb3IgKDsgaSA8IDMgKiBPUFRfQUxMT0NfTUFYOyAr K2kpIHsKKwkJcmVxX3NpemUgPSBOVEhfUkVRX1NJWkUoaSk7CisJCXAgPSBtYWxsb2MocmVxX3Np emUpOworCQlhc3NlcnRfcHRyX25vdF9udWxsKHAsICJtYWxsb2MgZmFpbGVkIHVuZXhwZWN0ZWRs eSIpOworCQljID0gMDsKKwkJcWxfZm9yZWFjaChuLCAmcHJvZl9yZWNlbnRfYWxsb2NfbGlzdCwg bGluaykgeworCQkJY29uZmlybV9yZWNvcmRfc2l6ZShuLCBjICsgT1BUX0FMTE9DX01BWCk7CisJ CQljb25maXJtX3JlY29yZF9yZWxlYXNlZChuKTsKKwkJCSsrYzsKKwkJfQorCQlhc3NlcnRfdV9l cShjLCBPUFRfQUxMT0NfTUFYLAorCQkgICAgIkluY29ycmVjdCB0b3RhbCBudW1iZXIgb2YgYWxs b2NhdGlvbnMiKTsKKwkJZnJlZShwKTsKKwl9CisKKwliID0gdHJ1ZTsKKwlhc3NlcnRfZF9lcSht YWxsY3RsKCJwcm9mLmFjdGl2ZSIsIE5VTEwsIE5VTEwsICZiLCBzaXplb2YoYm9vbCkpLCAwLAor CSAgICAibWFsbGN0bCBmb3IgdHVybmluZyBvbiBwcm9mX2FjdGl2ZSBmYWlsZWQiKTsKKworCWNv bmZpcm1fcHJvZl9zZXR1cCgpOworCisJLyoKKwkgKiBUaGlyZCBiYXRjaCBvZiBPUFRfQUxMT0Nf TUFYIGFsbG9jYXRpb25zLiAgU2luY2UgcHJvZl9hY3RpdmUgaXMKKwkgKiB0dXJuZWQgYmFjayBv biwgdGhleSBzaG91bGQgYmUgcmVjb3JkZWQsIGFuZCBpbiB0aGUgbGlzdCBvZiByZWNvcmRlZAor CSAqIGFsbG9jYXRpb25zIHRoZXkgc2hvdWxkIGZvbGxvdyB0aGUgZmlyc3QgYmF0Y2ggcmF0aGVy IHRoYW4gdGhlCisJICogc2Vjb25kIGJhdGNoLgorCSAqLworCWZvciAoOyBpIDwgNCAqIE9QVF9B TExPQ19NQVg7ICsraSkgeworCQlyZXFfc2l6ZSA9IE5USF9SRVFfU0laRShpKTsKKwkJcCA9IG1h bGxvYyhyZXFfc2l6ZSk7CisJCWNvbmZpcm1fbWFsbG9jKHApOworCQljID0gMDsKKwkJcWxfZm9y ZWFjaChuLCAmcHJvZl9yZWNlbnRfYWxsb2NfbGlzdCwgbGluaykgeworCQkJKytjOworCQkJY29u ZmlybV9yZWNvcmRfc2l6ZShuLAorCQkJICAgIC8qIElzIHRoZSBhbGxvY2F0aW9uIGZyb20gdGhl IHRoaXJkIGJhdGNoPyAqLworCQkJICAgIGkgKyBjIC0gT1BUX0FMTE9DX01BWCA+PSAzICogT1BU X0FMTE9DX01BWCA/CisJCQkgICAgLyogSWYgeWVzLCB0aGVuIGl0J3MganVzdCByZWNvcmRlZC4g Ki8KKwkJCSAgICBpICsgYyAtIE9QVF9BTExPQ19NQVggOgorCQkJICAgIC8qCisJCQkgICAgICog T3RoZXJ3aXNlLCBpdCBzaG91bGQgY29tZSBmcm9tIHRoZSBmaXJzdCBiYXRjaAorCQkJICAgICAq IGluc3RlYWQgb2YgdGhlIHNlY29uZCBiYXRjaC4KKwkJCSAgICAgKi8KKwkJCSAgICBpICsgYyAt IDIgKiBPUFRfQUxMT0NfTUFYKTsKKwkJCWlmIChjID09IE9QVF9BTExPQ19NQVgpIHsKKwkJCQlj b25maXJtX3JlY29yZF9saXZpbmcobik7CisJCQl9IGVsc2UgeworCQkJCWNvbmZpcm1fcmVjb3Jk X3JlbGVhc2VkKG4pOworCQkJfQorCQl9CisJCWFzc2VydF91X2VxKGMsIE9QVF9BTExPQ19NQVgs CisJCSAgICAiSW5jb3JyZWN0IHRvdGFsIG51bWJlciBvZiBhbGxvY2F0aW9ucyIpOworCQlmcmVl KHApOworCX0KKworCS8qIEluY3JlYXNpbmcgdGhlIGxpbWl0IHNob3VsZG4ndCBhbHRlciB0aGUg bGlzdCBvZiByZWNvcmRzLiAqLworCWZ1dHVyZSA9IE9QVF9BTExPQ19NQVggKyAxOworCWFzc2Vy dF9kX2VxKG1hbGxjdGwoImV4cGVyaW1lbnRhbC5wcm9mX3JlY2VudC5hbGxvY19tYXgiLAorCSAg ICBOVUxMLCBOVUxMLCAmZnV0dXJlLCBzaXplb2Yoc3NpemVfdCkpLCAwLCAiV3JpdGUgZXJyb3Ii KTsKKwljID0gMDsKKwlxbF9mb3JlYWNoKG4sICZwcm9mX3JlY2VudF9hbGxvY19saXN0LCBsaW5r KSB7CisJCWNvbmZpcm1fcmVjb3JkX3NpemUobiwgYyArIDMgKiBPUFRfQUxMT0NfTUFYKTsKKwkJ Y29uZmlybV9yZWNvcmRfcmVsZWFzZWQobik7CisJCSsrYzsKKwl9CisJYXNzZXJ0X3VfZXEoYywg T1BUX0FMTE9DX01BWCwKKwkgICAgIkluY29ycmVjdCB0b3RhbCBudW1iZXIgb2YgYWxsb2NhdGlv bnMiKTsKKworCS8qCisJICogRGVjcmVhc2luZyB0aGUgbGltaXQgc2hvdWxkbid0IGFsdGVyIHRo ZSBsaXN0IG9mIHJlY29yZHMgYXMgbG9uZyBhcworCSAqIHRoZSBuZXcgbGltaXQgaXMgc3RpbGwg bm8gbGVzcyB0aGFuIHRoZSBsZW5ndGggb2YgdGhlIGxpc3QuCisJICovCisJZnV0dXJlID0gT1BU X0FMTE9DX01BWDsKKwlhc3NlcnRfZF9lcShtYWxsY3RsKCJleHBlcmltZW50YWwucHJvZl9yZWNl bnQuYWxsb2NfbWF4IiwKKwkgICAgTlVMTCwgTlVMTCwgJmZ1dHVyZSwgc2l6ZW9mKHNzaXplX3Qp KSwgMCwgIldyaXRlIGVycm9yIik7CisJYyA9IDA7CisJcWxfZm9yZWFjaChuLCAmcHJvZl9yZWNl bnRfYWxsb2NfbGlzdCwgbGluaykgeworCQljb25maXJtX3JlY29yZF9zaXplKG4sIGMgKyAzICog T1BUX0FMTE9DX01BWCk7CisJCWNvbmZpcm1fcmVjb3JkX3JlbGVhc2VkKG4pOworCQkrK2M7CisJ fQorCWFzc2VydF91X2VxKGMsIE9QVF9BTExPQ19NQVgsCisJICAgICJJbmNvcnJlY3QgdG90YWwg bnVtYmVyIG9mIGFsbG9jYXRpb25zIik7CisKKwkvKgorCSAqIERlY3JlYXNpbmcgdGhlIGxpbWl0 IHNob3VsZCBzaG9ydGVuIHRoZSBsaXN0IG9mIHJlY29yZHMgaWYgdGhlIG5ldworCSAqIGxpbWl0 IGlzIGxlc3MgdGhhbiB0aGUgbGVuZ3RoIG9mIHRoZSBsaXN0LgorCSAqLworCWZ1dHVyZSA9IE9Q VF9BTExPQ19NQVggLSAxOworCWFzc2VydF9kX2VxKG1hbGxjdGwoImV4cGVyaW1lbnRhbC5wcm9m X3JlY2VudC5hbGxvY19tYXgiLAorCSAgICBOVUxMLCBOVUxMLCAmZnV0dXJlLCBzaXplb2Yoc3Np emVfdCkpLCAwLCAiV3JpdGUgZXJyb3IiKTsKKwljID0gMDsKKwlxbF9mb3JlYWNoKG4sICZwcm9m X3JlY2VudF9hbGxvY19saXN0LCBsaW5rKSB7CisJCSsrYzsKKwkJY29uZmlybV9yZWNvcmRfc2l6 ZShuLCBjICsgMyAqIE9QVF9BTExPQ19NQVgpOworCQljb25maXJtX3JlY29yZF9yZWxlYXNlZChu KTsKKwl9CisJYXNzZXJ0X3VfZXEoYywgT1BUX0FMTE9DX01BWCAtIDEsCisJICAgICJJbmNvcnJl Y3QgdG90YWwgbnVtYmVyIG9mIGFsbG9jYXRpb25zIik7CisKKwkvKiBTZXR0aW5nIHRvIHVubGlt aXRlZCBzaG91bGRuJ3QgYWx0ZXIgdGhlIGxpc3Qgb2YgcmVjb3Jkcy4gKi8KKwlmdXR1cmUgPSAt MTsKKwlhc3NlcnRfZF9lcShtYWxsY3RsKCJleHBlcmltZW50YWwucHJvZl9yZWNlbnQuYWxsb2Nf bWF4IiwKKwkgICAgTlVMTCwgTlVMTCwgJmZ1dHVyZSwgc2l6ZW9mKHNzaXplX3QpKSwgMCwgIldy aXRlIGVycm9yIik7CisJYyA9IDA7CisJcWxfZm9yZWFjaChuLCAmcHJvZl9yZWNlbnRfYWxsb2Nf bGlzdCwgbGluaykgeworCQkrK2M7CisJCWNvbmZpcm1fcmVjb3JkX3NpemUobiwgYyArIDMgKiBP UFRfQUxMT0NfTUFYKTsKKwkJY29uZmlybV9yZWNvcmRfcmVsZWFzZWQobik7CisJfQorCWFzc2Vy dF91X2VxKGMsIE9QVF9BTExPQ19NQVggLSAxLAorCSAgICAiSW5jb3JyZWN0IHRvdGFsIG51bWJl ciBvZiBhbGxvY2F0aW9ucyIpOworCisJLyogRG93bnNoaWZ0IHRvIG9ubHkgb25lIHJlY29yZC4g Ki8KKwlmdXR1cmUgPSAxOworCWFzc2VydF9kX2VxKG1hbGxjdGwoImV4cGVyaW1lbnRhbC5wcm9m X3JlY2VudC5hbGxvY19tYXgiLAorCSAgICBOVUxMLCBOVUxMLCAmZnV0dXJlLCBzaXplb2Yoc3Np emVfdCkpLCAwLCAiV3JpdGUgZXJyb3IiKTsKKwlhc3NlcnRfZmFsc2UocWxfZW1wdHkoJnByb2Zf cmVjZW50X2FsbG9jX2xpc3QpLCAiUmVjZW50IGxpc3QgaXMgZW1wdHkiKTsKKwluID0gcWxfZmly c3QoJnByb2ZfcmVjZW50X2FsbG9jX2xpc3QpOworCWNvbmZpcm1fcmVjb3JkX3NpemUobiwgNCAq IE9QVF9BTExPQ19NQVggLSAxKTsKKwljb25maXJtX3JlY29yZF9yZWxlYXNlZChuKTsKKwluID0g cWxfbmV4dCgmcHJvZl9yZWNlbnRfYWxsb2NfbGlzdCwgbiwgbGluayk7CisJYXNzZXJ0X3B0cl9u dWxsKG4sICJSZWNlbnQgbGlzdCBzaG91bGQgb25seSBjb250YWluIG9uZSByZWNvcmQiKTsKKwor CS8qIENvbXBsZXRlbHkgdHVybiBvZmYuICovCisJZnV0dXJlID0gMDsKKwlhc3NlcnRfZF9lcSht YWxsY3RsKCJleHBlcmltZW50YWwucHJvZl9yZWNlbnQuYWxsb2NfbWF4IiwKKwkgICAgTlVMTCwg TlVMTCwgJmZ1dHVyZSwgc2l6ZW9mKHNzaXplX3QpKSwgMCwgIldyaXRlIGVycm9yIik7CisJYXNz ZXJ0X3RydWUocWxfZW1wdHkoJnByb2ZfcmVjZW50X2FsbG9jX2xpc3QpLAorCSAgICAiUmVjZW50 IGxpc3Qgc2hvdWxkIGJlIGVtcHR5Iik7CisKKwkvKiBSZXN0b3JlIHRoZSBzZXR0aW5ncy4gKi8K KwlmdXR1cmUgPSBPUFRfQUxMT0NfTUFYOworCWFzc2VydF9kX2VxKG1hbGxjdGwoImV4cGVyaW1l bnRhbC5wcm9mX3JlY2VudC5hbGxvY19tYXgiLAorCSAgICBOVUxMLCBOVUxMLCAmZnV0dXJlLCBz aXplb2Yoc3NpemVfdCkpLCAwLCAiV3JpdGUgZXJyb3IiKTsKKwlhc3NlcnRfdHJ1ZShxbF9lbXB0 eSgmcHJvZl9yZWNlbnRfYWxsb2NfbGlzdCksCisJICAgICJSZWNlbnQgbGlzdCBzaG91bGQgYmUg ZW1wdHkiKTsKKworCWNvbmZpcm1fcHJvZl9zZXR1cCgpOworfQorVEVTVF9FTkQKKworI3VuZGVm IE5USF9SRVFfU0laRQorCisjZGVmaW5lIERVTVBfT1VUX1NJWkUgNDA5Ngorc3RhdGljIGNoYXIg ZHVtcF9vdXRbRFVNUF9PVVRfU0laRV07CitzdGF0aWMgc2l6ZV90IGR1bXBfb3V0X2xlbiA9IDA7 CisKK3N0YXRpYyB2b2lkCit0ZXN0X2R1bXBfd3JpdGVfY2Iodm9pZCAqbm90X3VzZWQsIGNvbnN0 IGNoYXIgKnN0cikgeworCXNpemVfdCBsZW4gPSBzdHJsZW4oc3RyKTsKKwlhc3NlcnQoZHVtcF9v dXRfbGVuICsgbGVuIDwgRFVNUF9PVVRfU0laRSk7CisJbWVtY3B5KGR1bXBfb3V0ICsgZHVtcF9v dXRfbGVuLCBzdHIsIGxlbiArIDEpOworCWR1bXBfb3V0X2xlbiArPSBsZW47Cit9CisKK3N0YXRp YyB2b2lkCitjYWxsX2R1bXAoKSB7CisJc3RhdGljIHZvaWQgKmluWzJdID0ge3Rlc3RfZHVtcF93 cml0ZV9jYiwgTlVMTH07CisJZHVtcF9vdXRfbGVuID0gMDsKKwlhc3NlcnRfZF9lcShtYWxsY3Rs KCJleHBlcmltZW50YWwucHJvZl9yZWNlbnQuYWxsb2NfZHVtcCIsCisJICAgIE5VTEwsIE5VTEws IGluLCBzaXplb2YoaW4pKSwgMCwgIkR1bXAgbWFsbGN0bCByYWlzZWQgZXJyb3IiKTsKK30KKwor dHlwZWRlZiBzdHJ1Y3QgeworCXNpemVfdCBzaXplOworCXNpemVfdCB1c2l6ZTsKKwlib29sIHJl bGVhc2VkOworfSBjb25maXJtX3JlY29yZF90OworCisjZGVmaW5lIERVTVBfRVJST1IgIkR1bXAg b3V0cHV0IGlzIHdyb25nIgorCitzdGF0aWMgdm9pZAorY29uZmlybV9yZWNvcmQoY29uc3QgY2hh ciAqdGVtcGxhdGUsIGNvbnN0IGNvbmZpcm1fcmVjb3JkX3QgKnJlY29yZHMsCisgICAgY29uc3Qg c2l6ZV90IG5fcmVjb3JkcykgeworCXN0YXRpYyBjb25zdCBjaGFyICp0eXBlc1syXSA9IHsiYWxs b2MiLCAiZGFsbG9jIn07CisJc3RhdGljIGNoYXIgYnVmWzY0XTsKKworCS8qCisJICogVGhlIHRl bXBsYXRlIHN0cmluZyB3b3VsZCBiZSBpbiB0aGUgZm9ybSBvZjoKKwkgKiAiey4uLixcInJlY2Vu dF9hbGxvY1wiOltdfSIsCisJICogYW5kIGR1bXBfb3V0IHdvdWxkIGJlIGluIHRoZSBmb3JtIG9m OgorCSAqICJ7Li4uLFwicmVjZW50X2FsbG9jXCI6Wy4uLl19Ii4KKwkgKiBVc2luZyAiLSAyIiBz ZXJ2ZXMgdG8gY3V0IHJpZ2h0IGJlZm9yZSB0aGUgZW5kaW5nICJdfSIuCisJICovCisJYXNzZXJ0 X2RfZXEobWVtY21wKGR1bXBfb3V0LCB0ZW1wbGF0ZSwgc3RybGVuKHRlbXBsYXRlKSAtIDIpLCAw LAorCSAgICBEVU1QX0VSUk9SKTsKKwlhc3NlcnRfZF9lcShtZW1jbXAoZHVtcF9vdXQgKyBzdHJs ZW4oZHVtcF9vdXQpIC0gMiwKKwkgICAgdGVtcGxhdGUgKyBzdHJsZW4odGVtcGxhdGUpIC0gMiwg MiksIDAsIERVTVBfRVJST1IpOworCisJY29uc3QgY2hhciAqc3RhcnQgPSBkdW1wX291dCArIHN0 cmxlbih0ZW1wbGF0ZSkgLSAyOworCWNvbnN0IGNoYXIgKmVuZCA9IGR1bXBfb3V0ICsgc3RybGVu KGR1bXBfb3V0KSAtIDI7CisJY29uc3QgY29uZmlybV9yZWNvcmRfdCAqcmVjb3JkOworCWZvciAo cmVjb3JkID0gcmVjb3JkczsgcmVjb3JkIDwgcmVjb3JkcyArIG5fcmVjb3JkczsgKytyZWNvcmQp IHsKKworI2RlZmluZSBBU1NFUlRfQ0hBUihjKSBkbyB7CQkJCQkJXAorCWFzc2VydF90cnVlKHN0 YXJ0IDwgZW5kLCBEVU1QX0VSUk9SKTsJCQkJXAorCWFzc2VydF9jX2VxKCpzdGFydCsrLCBjLCBE VU1QX0VSUk9SKTsJCQkJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBBU1NFUlRfU1RSKHMpIGRv IHsJCQkJCQlcCisJY29uc3Qgc2l6ZV90IGxlbiA9IHN0cmxlbihzKTsJCQkJCVwKKwlhc3NlcnRf dHJ1ZShzdGFydCArIGxlbiA8PSBlbmQsIERVTVBfRVJST1IpOwkJCVwKKwlhc3NlcnRfZF9lcSht ZW1jbXAoc3RhcnQsIHMsIGxlbiksIDAsIERVTVBfRVJST1IpOwkJXAorCXN0YXJ0ICs9IGxlbjsJ CQkJCQkJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBBU1NFUlRfRk9STUFUVEVEX1NUUihzLCAu Li4pIGRvIHsJCQkJXAorCW1hbGxvY19zbnByaW50ZihidWYsIHNpemVvZihidWYpLCBzLCBfX1ZB X0FSR1NfXyk7CQlcCisJQVNTRVJUX1NUUihidWYpOwkJCQkJCVwKK30gd2hpbGUgKDApCisKKwkJ aWYgKHJlY29yZCAhPSByZWNvcmRzKSB7CisJCQlBU1NFUlRfQ0hBUignLCcpOworCQl9CisKKwkJ QVNTRVJUX0NIQVIoJ3snKTsKKworCQlBU1NFUlRfU1RSKCJcInNpemVcIiIpOworCQlBU1NFUlRf Q0hBUignOicpOworCQlBU1NFUlRfRk9STUFUVEVEX1NUUigiJXp1IiwgcmVjb3JkLT5zaXplKTsK KwkJQVNTRVJUX0NIQVIoJywnKTsKKworCQlBU1NFUlRfU1RSKCJcInVzaXplXCIiKTsKKwkJQVNT RVJUX0NIQVIoJzonKTsKKwkJQVNTRVJUX0ZPUk1BVFRFRF9TVFIoIiV6dSIsIHJlY29yZC0+dXNp emUpOworCQlBU1NFUlRfQ0hBUignLCcpOworCisJCUFTU0VSVF9TVFIoIlwicmVsZWFzZWRcIiIp OworCQlBU1NFUlRfQ0hBUignOicpOworCQlBU1NFUlRfU1RSKHJlY29yZC0+cmVsZWFzZWQgPyAi dHJ1ZSIgOiAiZmFsc2UiKTsKKwkJQVNTRVJUX0NIQVIoJywnKTsKKworCQljb25zdCBjaGFyICoq dHlwZSA9IHR5cGVzOworCQl3aGlsZSAodHJ1ZSkgeworCQkJQVNTRVJUX0ZPUk1BVFRFRF9TVFIo IlwiJXNfdGhyZWFkX3VpZFwiIiwgKnR5cGUpOworCQkJQVNTRVJUX0NIQVIoJzonKTsKKwkJCXdo aWxlIChpc2RpZ2l0KCpzdGFydCkpIHsKKwkJCQkrK3N0YXJ0OworCQkJfQorCQkJQVNTRVJUX0NI QVIoJywnKTsKKworCQkJaWYgKG9wdF9wcm9mX3N5c190aHJlYWRfbmFtZSkgeworCQkJCUFTU0VS VF9GT1JNQVRURURfU1RSKCJcIiVzX3RocmVhZF9uYW1lXCIiLAorCQkJCSAgICAqdHlwZSk7CisJ CQkJQVNTRVJUX0NIQVIoJzonKTsKKwkJCQlBU1NFUlRfQ0hBUignIicpOworCQkJCXdoaWxlICgq c3RhcnQgIT0gJyInKSB7CisJCQkJCSsrc3RhcnQ7CisJCQkJfQorCQkJCUFTU0VSVF9DSEFSKCci Jyk7CisJCQkJQVNTRVJUX0NIQVIoJywnKTsKKwkJCX0KKworCQkJQVNTRVJUX0ZPUk1BVFRFRF9T VFIoIlwiJXNfdGltZVwiIiwgKnR5cGUpOworCQkJQVNTRVJUX0NIQVIoJzonKTsKKwkJCXdoaWxl IChpc2RpZ2l0KCpzdGFydCkpIHsKKwkJCQkrK3N0YXJ0OworCQkJfQorCQkJQVNTRVJUX0NIQVIo JywnKTsKKworCQkJQVNTRVJUX0ZPUk1BVFRFRF9TVFIoIlwiJXNfdHJhY2VcIiIsICp0eXBlKTsK KwkJCUFTU0VSVF9DSEFSKCc6Jyk7CisJCQlBU1NFUlRfQ0hBUignWycpOworCQkJd2hpbGUgKGlz ZGlnaXQoKnN0YXJ0KSB8fCAqc3RhcnQgPT0gJ3gnIHx8CisJCQkgICAgKCpzdGFydCA+PSAnYScg JiYgKnN0YXJ0IDw9ICdmJykgfHwKKwkJCSAgICAqc3RhcnQgPT0gJ1wiJyB8fCAqc3RhcnQgPT0g JywnKSB7CisJCQkJKytzdGFydDsKKwkJCX0KKwkJCUFTU0VSVF9DSEFSKCddJyk7CisKKwkJCWlm IChzdHJjbXAoKnR5cGUsICJkYWxsb2MiKSA9PSAwKSB7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJ CWFzc2VydChzdHJjbXAoKnR5cGUsICJhbGxvYyIpID09IDApOworCQkJaWYgKCFyZWNvcmQtPnJl bGVhc2VkKSB7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCUFTU0VSVF9DSEFSKCcsJyk7CisJCQkr K3R5cGU7CisJCX0KKworCQlBU1NFUlRfQ0hBUignfScpOworCisjdW5kZWYgQVNTRVJUX0ZPUk1B VFRFRF9TVFIKKyN1bmRlZiBBU1NFUlRfU1RSCisjdW5kZWYgQVNTRVJUX0NIQVIKKworCX0KKwlh c3NlcnRfcHRyX2VxKHJlY29yZCwgcmVjb3JkcyArIG5fcmVjb3JkcywgRFVNUF9FUlJPUik7CisJ YXNzZXJ0X3B0cl9lcShzdGFydCwgZW5kLCBEVU1QX0VSUk9SKTsKK30KKworVEVTVF9CRUdJTih0 ZXN0X3Byb2ZfcmVjZW50X2FsbG9jX2R1bXApIHsKKwl0ZXN0X3NraXBfaWYoIWNvbmZpZ19wcm9m KTsKKworCWNvbmZpcm1fcHJvZl9zZXR1cCgpOworCisJc3NpemVfdCBmdXR1cmU7CisJdm9pZCAq cCwgKnE7CisJY29uZmlybV9yZWNvcmRfdCByZWNvcmRzWzJdOworCisJYXNzZXJ0X3p1X2VxKGxn X3Byb2Zfc2FtcGxlLCAoc2l6ZV90KTAsCisJICAgICJsZ19wcm9mX3NhbXBsZSBub3Qgc2V0IGNv cnJlY3RseSIpOworCisJZnV0dXJlID0gMDsKKwlhc3NlcnRfZF9lcShtYWxsY3RsKCJleHBlcmlt ZW50YWwucHJvZl9yZWNlbnQuYWxsb2NfbWF4IiwKKwkgICAgTlVMTCwgTlVMTCwgJmZ1dHVyZSwg c2l6ZW9mKHNzaXplX3QpKSwgMCwgIldyaXRlIGVycm9yIik7CisJY2FsbF9kdW1wKCk7CisJZXhw ZWN0X3N0cl9lcShkdW1wX291dCwgIntcInNhbXBsZV9pbnRlcnZhbFwiOjEsIgorCSAgICAiXCJy ZWNlbnRfYWxsb2NfbWF4XCI6MCxcInJlY2VudF9hbGxvY1wiOltdfSIsIERVTVBfRVJST1IpOwor CisJZnV0dXJlID0gMjsKKwlhc3NlcnRfZF9lcShtYWxsY3RsKCJleHBlcmltZW50YWwucHJvZl9y ZWNlbnQuYWxsb2NfbWF4IiwKKwkgICAgTlVMTCwgTlVMTCwgJmZ1dHVyZSwgc2l6ZW9mKHNzaXpl X3QpKSwgMCwgIldyaXRlIGVycm9yIik7CisJY2FsbF9kdW1wKCk7CisJY29uc3QgY2hhciAqdGVt cGxhdGUgPSAie1wic2FtcGxlX2ludGVydmFsXCI6MSwiCisJICAgICJcInJlY2VudF9hbGxvY19t YXhcIjoyLFwicmVjZW50X2FsbG9jXCI6W119IjsKKwlleHBlY3Rfc3RyX2VxKGR1bXBfb3V0LCB0 ZW1wbGF0ZSwgRFVNUF9FUlJPUik7CisKKwlwID0gbWFsbG9jKDcpOworCWNhbGxfZHVtcCgpOwor CXJlY29yZHNbMF0uc2l6ZSA9IDc7CisJcmVjb3Jkc1swXS51c2l6ZSA9IHN6X3MydSg3KTsKKwly ZWNvcmRzWzBdLnJlbGVhc2VkID0gZmFsc2U7CisJY29uZmlybV9yZWNvcmQodGVtcGxhdGUsIHJl Y29yZHMsIDEpOworCisJcSA9IG1hbGxvY3goMTcsIE1BTExPQ1hfQUxJR04oMTI4KSk7CisJY2Fs bF9kdW1wKCk7CisJcmVjb3Jkc1sxXS5zaXplID0gMTc7CisJcmVjb3Jkc1sxXS51c2l6ZSA9IHN6 X3NhMnUoMTcsIDEyOCk7CisJcmVjb3Jkc1sxXS5yZWxlYXNlZCA9IGZhbHNlOworCWNvbmZpcm1f cmVjb3JkKHRlbXBsYXRlLCByZWNvcmRzLCAyKTsKKworCWZyZWUocSk7CisJY2FsbF9kdW1wKCk7 CisJcmVjb3Jkc1sxXS5yZWxlYXNlZCA9IHRydWU7CisJY29uZmlybV9yZWNvcmQodGVtcGxhdGUs IHJlY29yZHMsIDIpOworCisJZnJlZShwKTsKKwljYWxsX2R1bXAoKTsKKwlyZWNvcmRzWzBdLnJl bGVhc2VkID0gdHJ1ZTsKKwljb25maXJtX3JlY29yZCh0ZW1wbGF0ZSwgcmVjb3JkcywgMik7CisK KwlmdXR1cmUgPSBPUFRfQUxMT0NfTUFYOworCWFzc2VydF9kX2VxKG1hbGxjdGwoImV4cGVyaW1l bnRhbC5wcm9mX3JlY2VudC5hbGxvY19tYXgiLAorCSAgICBOVUxMLCBOVUxMLCAmZnV0dXJlLCBz aXplb2Yoc3NpemVfdCkpLCAwLCAiV3JpdGUgZXJyb3IiKTsKKwljb25maXJtX3Byb2Zfc2V0dXAo KTsKK30KK1RFU1RfRU5ECisKKyN1bmRlZiBEVU1QX0VSUk9SCisjdW5kZWYgRFVNUF9PVVRfU0la RQorCisjZGVmaW5lIE5fVEhSRUFEUyA4CisjZGVmaW5lIE5fUFRSUyA1MTIKKyNkZWZpbmUgTl9D VExTIDgKKyNkZWZpbmUgTl9JVEVSUyAyMDQ4CisjZGVmaW5lIFNUUkVTU19BTExPQ19NQVggNDA5 NgorCit0eXBlZGVmIHN0cnVjdCB7CisJdGhkX3QgdGhkOworCXNpemVfdCBpZDsKKwl2b2lkICpw dHJzW05fUFRSU107CisJc2l6ZV90IGNvdW50OworfSB0aGRfZGF0YV90OworCitzdGF0aWMgdGhk X2RhdGFfdCB0aGRfZGF0YVtOX1RIUkVBRFNdOworc3RhdGljIHNzaXplX3QgdGVzdF9tYXg7CisK K3N0YXRpYyB2b2lkCit0ZXN0X3dyaXRlX2NiKHZvaWQgKmNib3BhcXVlLCBjb25zdCBjaGFyICpz dHIpIHsKKwlzbGVlcF9ucygxMDAwICogMTAwMCk7Cit9CisKK3N0YXRpYyB2b2lkICoKK2ZfdGhy ZWFkKHZvaWQgKmFyZykgeworCWNvbnN0IHNpemVfdCB0aGRfaWQgPSAqKHNpemVfdCAqKWFyZzsK Kwl0aGRfZGF0YV90ICpkYXRhX3AgPSB0aGRfZGF0YSArIHRoZF9pZDsKKwlhc3NlcnQoZGF0YV9w LT5pZCA9PSB0aGRfaWQpOworCWRhdGFfcC0+Y291bnQgPSAwOworCXVpbnQ2NF90IHJhbmQgPSAo dWludDY0X3QpdGhkX2lkOworCXRzZF90ICp0c2QgPSB0c2RfZmV0Y2goKTsKKwlhc3NlcnQodGVz dF9tYXggPiAxKTsKKwlzc2l6ZV90IGxhc3RfbWF4ID0gLTE7CisJZm9yIChpbnQgaSA9IDA7IGkg PCBOX0lURVJTOyBpKyspIHsKKwkJcmFuZCA9IHBybmdfcmFuZ2VfdTY0KCZyYW5kLCBOX1BUUlMg KyBOX0NUTFMgKiA1KTsKKwkJYXNzZXJ0KGRhdGFfcC0+Y291bnQgPD0gTl9QVFJTKTsKKwkJaWYg KHJhbmQgPCBkYXRhX3AtPmNvdW50KSB7CisJCQlhc3NlcnQoZGF0YV9wLT5jb3VudCA+IDApOwor CQkJaWYgKHJhbmQgIT0gZGF0YV9wLT5jb3VudCAtIDEpIHsKKwkJCQlhc3NlcnQoZGF0YV9wLT5j b3VudCA+IDEpOworCQkJCXZvaWQgKnRlbXAgPSBkYXRhX3AtPnB0cnNbcmFuZF07CisJCQkJZGF0 YV9wLT5wdHJzW3JhbmRdID0KKwkJCQkgICAgZGF0YV9wLT5wdHJzW2RhdGFfcC0+Y291bnQgLSAx XTsKKwkJCQlkYXRhX3AtPnB0cnNbZGF0YV9wLT5jb3VudCAtIDFdID0gdGVtcDsKKwkJCX0KKwkJ CWZyZWUoZGF0YV9wLT5wdHJzWy0tZGF0YV9wLT5jb3VudF0pOworCQl9IGVsc2UgaWYgKHJhbmQg PCBOX1BUUlMpIHsKKwkJCWFzc2VydChkYXRhX3AtPmNvdW50IDwgTl9QVFJTKTsKKwkJCWRhdGFf cC0+cHRyc1tkYXRhX3AtPmNvdW50KytdID0gbWFsbG9jKDEpOworCQl9IGVsc2UgaWYgKHJhbmQg JSA1ID09IDApIHsKKwkJCXByb2ZfcmVjZW50X2FsbG9jX2R1bXAodHNkLCB0ZXN0X3dyaXRlX2Ni LCBOVUxMKTsKKwkJfSBlbHNlIGlmIChyYW5kICUgNSA9PSAxKSB7CisJCQlsYXN0X21heCA9IHBy b2ZfcmVjZW50X2FsbG9jX21heF9jdGxfcmVhZCgpOworCQl9IGVsc2UgaWYgKHJhbmQgJSA1ID09 IDIpIHsKKwkJCWxhc3RfbWF4ID0KKwkJCSAgICBwcm9mX3JlY2VudF9hbGxvY19tYXhfY3RsX3dy aXRlKHRzZCwgdGVzdF9tYXggKiAyKTsKKwkJfSBlbHNlIGlmIChyYW5kICUgNSA9PSAzKSB7CisJ CQlsYXN0X21heCA9CisJCQkgICAgcHJvZl9yZWNlbnRfYWxsb2NfbWF4X2N0bF93cml0ZSh0c2Qs IHRlc3RfbWF4KTsKKwkJfSBlbHNlIHsKKwkJCWFzc2VydChyYW5kICUgNSA9PSA0KTsKKwkJCWxh c3RfbWF4ID0KKwkJCSAgICBwcm9mX3JlY2VudF9hbGxvY19tYXhfY3RsX3dyaXRlKHRzZCwgdGVz dF9tYXggLyAyKTsKKwkJfQorCQlhc3NlcnRfemRfZ2UobGFzdF9tYXgsIC0xLCAiSWxsZWdhbCBs YXN0LU4gbWF4Iik7CisJfQorCisJd2hpbGUgKGRhdGFfcC0+Y291bnQgPiAwKSB7CisJCWZyZWUo ZGF0YV9wLT5wdHJzWy0tZGF0YV9wLT5jb3VudF0pOworCX0KKworCXJldHVybiBOVUxMOworfQor CitURVNUX0JFR0lOKHRlc3RfcHJvZl9yZWNlbnRfc3RyZXNzKSB7CisJdGVzdF9za2lwX2lmKCFj b25maWdfcHJvZik7CisKKwljb25maXJtX3Byb2Zfc2V0dXAoKTsKKworCXRlc3RfbWF4ID0gT1BU X0FMTE9DX01BWDsKKwlmb3IgKHNpemVfdCBpID0gMDsgaSA8IE5fVEhSRUFEUzsgaSsrKSB7CisJ CXRoZF9kYXRhX3QgKmRhdGFfcCA9IHRoZF9kYXRhICsgaTsKKwkJZGF0YV9wLT5pZCA9IGk7CisJ CXRoZF9jcmVhdGUoJmRhdGFfcC0+dGhkLCAmZl90aHJlYWQsICZkYXRhX3AtPmlkKTsKKwl9CisJ Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBOX1RIUkVBRFM7IGkrKykgeworCQl0aGRfZGF0YV90ICpk YXRhX3AgPSB0aGRfZGF0YSArIGk7CisJCXRoZF9qb2luKGRhdGFfcC0+dGhkLCBOVUxMKTsKKwl9 CisKKwl0ZXN0X21heCA9IFNUUkVTU19BTExPQ19NQVg7CisJYXNzZXJ0X2RfZXEobWFsbGN0bCgi ZXhwZXJpbWVudGFsLnByb2ZfcmVjZW50LmFsbG9jX21heCIsCisJICAgIE5VTEwsIE5VTEwsICZ0 ZXN0X21heCwgc2l6ZW9mKHNzaXplX3QpKSwgMCwgIldyaXRlIGVycm9yIik7CisJZm9yIChzaXpl X3QgaSA9IDA7IGkgPCBOX1RIUkVBRFM7IGkrKykgeworCQl0aGRfZGF0YV90ICpkYXRhX3AgPSB0 aGRfZGF0YSArIGk7CisJCWRhdGFfcC0+aWQgPSBpOworCQl0aGRfY3JlYXRlKCZkYXRhX3AtPnRo ZCwgJmZfdGhyZWFkLCAmZGF0YV9wLT5pZCk7CisJfQorCWZvciAoc2l6ZV90IGkgPSAwOyBpIDwg Tl9USFJFQURTOyBpKyspIHsKKwkJdGhkX2RhdGFfdCAqZGF0YV9wID0gdGhkX2RhdGEgKyBpOwor CQl0aGRfam9pbihkYXRhX3AtPnRoZCwgTlVMTCk7CisJfQorCisJdGVzdF9tYXggPSBPUFRfQUxM T0NfTUFYOworCWFzc2VydF9kX2VxKG1hbGxjdGwoImV4cGVyaW1lbnRhbC5wcm9mX3JlY2VudC5h bGxvY19tYXgiLAorCSAgICBOVUxMLCBOVUxMLCAmdGVzdF9tYXgsIHNpemVvZihzc2l6ZV90KSks IDAsICJXcml0ZSBlcnJvciIpOworCWNvbmZpcm1fcHJvZl9zZXR1cCgpOworfQorVEVTVF9FTkQK KworI3VuZGVmIFNUUkVTU19BTExPQ19NQVgKKyN1bmRlZiBOX0lURVJTCisjdW5kZWYgTl9QVFJT CisjdW5kZWYgTl9USFJFQURTCisKK2ludAorbWFpbih2b2lkKSB7CisJcmV0dXJuIHRlc3QoCisJ ICAgIHRlc3RfY29uZmlybV9zZXR1cCwKKwkgICAgdGVzdF9wcm9mX3JlY2VudF9vZmYsCisJICAg IHRlc3RfcHJvZl9yZWNlbnRfb24sCisJICAgIHRlc3RfcHJvZl9yZWNlbnRfYWxsb2MsCisJICAg IHRlc3RfcHJvZl9yZWNlbnRfYWxsb2NfZHVtcCwKKwkgICAgdGVzdF9wcm9mX3JlY2VudF9zdHJl c3MpOworfQoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUu My4wL3Rlc3QvdW5pdC9wcm9mX3JlY2VudC5zaCBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2pl bWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9wcm9mX3JlY2VudC5zaApuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwLi41OGE1NGE0Ci0tLSAvZGV2L251bGwKKysrIGIvMzg5LWRzLWJhc2Ut My4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L3Byb2ZfcmVjZW50LnNoCkBAIC0w LDAgKzEsNSBAQAorIyEvYmluL3NoCisKK2lmIFsgIngke2VuYWJsZV9wcm9mfSIgPSAieDEiIF0g OyB0aGVuCisgIGV4cG9ydCBNQUxMT0NfQ09ORj0icHJvZjp0cnVlLHByb2ZfYWN0aXZlOnRydWUs bGdfcHJvZl9zYW1wbGU6MCxwcm9mX3JlY2VudF9hbGxvY19tYXg6MyIKK2ZpCgpkaWZmIC0tZ2l0 IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L3Byb2Zf cmVzZXQuYyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5p dC9wcm9mX3Jlc2V0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWIzM2Iy MAotLS0gL2Rldi9udWxsCisrKyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUu My4wL3Rlc3QvdW5pdC9wcm9mX3Jlc2V0LmMKQEAgLTAsMCArMSwyNjYgQEAKKyNpbmNsdWRlICJ0 ZXN0L2plbWFsbG9jX3Rlc3QuaCIKKworI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL3Byb2Zf ZGF0YS5oIgorI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL3Byb2Zfc3lzLmgiCisKK3N0YXRp YyBpbnQKK3Byb2ZfZHVtcF9vcGVuX2ZpbGVfaW50ZXJjZXB0KGNvbnN0IGNoYXIgKmZpbGVuYW1l LCBpbnQgbW9kZSkgeworCWludCBmZDsKKworCWZkID0gb3BlbigiL2Rldi9udWxsIiwgT19XUk9O TFkpOworCWFzc2VydF9kX25lKGZkLCAtMSwgIlVuZXhwZWN0ZWQgb3BlbigpIGZhaWx1cmUiKTsK KworCXJldHVybiBmZDsKK30KKworc3RhdGljIHZvaWQKK3NldF9wcm9mX2FjdGl2ZShib29sIGFj dGl2ZSkgeworCWV4cGVjdF9kX2VxKG1hbGxjdGwoInByb2YuYWN0aXZlIiwgTlVMTCwgTlVMTCwg KHZvaWQgKikmYWN0aXZlLAorCSAgICBzaXplb2YoYWN0aXZlKSksIDAsICJVbmV4cGVjdGVkIG1h bGxjdGwgZmFpbHVyZSIpOworfQorCitzdGF0aWMgc2l6ZV90CitnZXRfbGdfcHJvZl9zYW1wbGUo dm9pZCkgeworCXNpemVfdCByZXQ7CisJc2l6ZV90IHN6ID0gc2l6ZW9mKHNpemVfdCk7CisKKwll eHBlY3RfZF9lcShtYWxsY3RsKCJwcm9mLmxnX3NhbXBsZSIsICh2b2lkICopJnJldCwgJnN6LCBO VUxMLCAwKSwgMCwKKwkgICAgIlVuZXhwZWN0ZWQgbWFsbGN0bCBmYWlsdXJlIHdoaWxlIHJlYWRp bmcgcHJvZmlsaW5nIHNhbXBsZSByYXRlIik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZv aWQKK2RvX3Byb2ZfcmVzZXQoc2l6ZV90IGxnX3Byb2Zfc2FtcGxlX2lucHV0KSB7CisJZXhwZWN0 X2RfZXEobWFsbGN0bCgicHJvZi5yZXNldCIsIE5VTEwsIE5VTEwsCisJICAgICh2b2lkICopJmxn X3Byb2Zfc2FtcGxlX2lucHV0LCBzaXplb2Yoc2l6ZV90KSksIDAsCisJICAgICJVbmV4cGVjdGVk IG1hbGxjdGwgZmFpbHVyZSB3aGlsZSByZXNldHRpbmcgcHJvZmlsZSBkYXRhIik7CisJZXhwZWN0 X3p1X2VxKGxnX3Byb2Zfc2FtcGxlX2lucHV0LCBnZXRfbGdfcHJvZl9zYW1wbGUoKSwKKwkgICAg IkV4cGVjdGVkIHByb2ZpbGUgc2FtcGxlIHJhdGUgY2hhbmdlIik7Cit9CisKK1RFU1RfQkVHSU4o dGVzdF9wcm9mX3Jlc2V0X2Jhc2ljKSB7CisJc2l6ZV90IGxnX3Byb2Zfc2FtcGxlX29yaWcsIGxn X3Byb2Zfc2FtcGxlX2N1ciwgbGdfcHJvZl9zYW1wbGVfbmV4dDsKKwlzaXplX3Qgc3o7CisJdW5z aWduZWQgaTsKKworCXRlc3Rfc2tpcF9pZighY29uZmlnX3Byb2YpOworCisJc3ogPSBzaXplb2Yo c2l6ZV90KTsKKwlleHBlY3RfZF9lcShtYWxsY3RsKCJvcHQubGdfcHJvZl9zYW1wbGUiLCAodm9p ZCAqKSZsZ19wcm9mX3NhbXBsZV9vcmlnLAorCSAgICAmc3osIE5VTEwsIDApLCAwLAorCSAgICAi VW5leHBlY3RlZCBtYWxsY3RsIGZhaWx1cmUgd2hpbGUgcmVhZGluZyBwcm9maWxpbmcgc2FtcGxl IHJhdGUiKTsKKwlleHBlY3RfenVfZXEobGdfcHJvZl9zYW1wbGVfb3JpZywgMCwKKwkgICAgIlVu ZXhwZWN0ZWQgcHJvZmlsaW5nIHNhbXBsZSByYXRlIik7CisJbGdfcHJvZl9zYW1wbGVfY3VyID0g Z2V0X2xnX3Byb2Zfc2FtcGxlKCk7CisJZXhwZWN0X3p1X2VxKGxnX3Byb2Zfc2FtcGxlX29yaWcs IGxnX3Byb2Zfc2FtcGxlX2N1ciwKKwkgICAgIlVuZXhwZWN0ZWQgZGlzYWdyZWVtZW50IGJldHdl ZW4gXCJvcHQubGdfcHJvZl9zYW1wbGVcIiBhbmQgIgorCSAgICAiXCJwcm9mLmxnX3NhbXBsZVwi Iik7CisKKwkvKiBUZXN0IHNpbXBsZSByZXNldHMuICovCisJZm9yIChpID0gMDsgaSA8IDI7IGkr KykgeworCQlleHBlY3RfZF9lcShtYWxsY3RsKCJwcm9mLnJlc2V0IiwgTlVMTCwgTlVMTCwgTlVM TCwgMCksIDAsCisJCSAgICAiVW5leHBlY3RlZCBtYWxsY3RsIGZhaWx1cmUgd2hpbGUgcmVzZXR0 aW5nIHByb2ZpbGUgZGF0YSIpOworCQlsZ19wcm9mX3NhbXBsZV9jdXIgPSBnZXRfbGdfcHJvZl9z YW1wbGUoKTsKKwkJZXhwZWN0X3p1X2VxKGxnX3Byb2Zfc2FtcGxlX29yaWcsIGxnX3Byb2Zfc2Ft cGxlX2N1ciwKKwkJICAgICJVbmV4cGVjdGVkIHByb2ZpbGUgc2FtcGxlIHJhdGUgY2hhbmdlIik7 CisJfQorCisJLyogVGVzdCByZXNldHMgd2l0aCBwcm9mLmxnX3NhbXBsZSBjaGFuZ2VzLiAqLwor CWxnX3Byb2Zfc2FtcGxlX25leHQgPSAxOworCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKKwkJ ZG9fcHJvZl9yZXNldChsZ19wcm9mX3NhbXBsZV9uZXh0KTsKKwkJbGdfcHJvZl9zYW1wbGVfY3Vy ID0gZ2V0X2xnX3Byb2Zfc2FtcGxlKCk7CisJCWV4cGVjdF96dV9lcShsZ19wcm9mX3NhbXBsZV9j dXIsIGxnX3Byb2Zfc2FtcGxlX25leHQsCisJCSAgICAiRXhwZWN0ZWQgcHJvZmlsZSBzYW1wbGUg cmF0ZSBjaGFuZ2UiKTsKKwkJbGdfcHJvZl9zYW1wbGVfbmV4dCA9IGxnX3Byb2Zfc2FtcGxlX29y aWc7CisJfQorCisJLyogTWFrZSBzdXJlIHRoZSB0ZXN0IGNvZGUgcmVzdG9yZWQgcHJvZi5sZ19z YW1wbGUuICovCisJbGdfcHJvZl9zYW1wbGVfY3VyID0gZ2V0X2xnX3Byb2Zfc2FtcGxlKCk7CisJ ZXhwZWN0X3p1X2VxKGxnX3Byb2Zfc2FtcGxlX29yaWcsIGxnX3Byb2Zfc2FtcGxlX2N1ciwKKwkg ICAgIlVuZXhwZWN0ZWQgZGlzYWdyZWVtZW50IGJldHdlZW4gXCJvcHQubGdfcHJvZl9zYW1wbGVc IiBhbmQgIgorCSAgICAiXCJwcm9mLmxnX3NhbXBsZVwiIik7Cit9CitURVNUX0VORAorCitURVNU X0JFR0lOKHRlc3RfcHJvZl9yZXNldF9jbGVhbnVwKSB7CisJdGVzdF9za2lwX2lmKCFjb25maWdf cHJvZik7CisKKwlzZXRfcHJvZl9hY3RpdmUodHJ1ZSk7CisKKwlleHBlY3RfenVfZXEocHJvZl9i dF9jb3VudCgpLCAwLCAiRXhwZWN0ZWQgMCBiYWNrdHJhY2VzIik7CisJdm9pZCAqcCA9IG1hbGxv Y3goMSwgMCk7CisJZXhwZWN0X3B0cl9ub3RfbnVsbChwLCAiVW5leHBlY3RlZCBtYWxsb2N4KCkg ZmFpbHVyZSIpOworCWV4cGVjdF96dV9lcShwcm9mX2J0X2NvdW50KCksIDEsICJFeHBlY3RlZCAx IGJhY2t0cmFjZSIpOworCisJcHJvZl9jbnRfdCBjbnRfYWxsOworCXByb2ZfY250X2FsbCgmY250 X2FsbCk7CisJZXhwZWN0X3U2NF9lcShjbnRfYWxsLmN1cm9ianMsIDEsICJFeHBlY3RlZCAxIGFs bG9jYXRpb24iKTsKKworCWV4cGVjdF9kX2VxKG1hbGxjdGwoInByb2YucmVzZXQiLCBOVUxMLCBO VUxMLCBOVUxMLCAwKSwgMCwKKwkgICAgIlVuZXhwZWN0ZWQgZXJyb3Igd2hpbGUgcmVzZXR0aW5n IGhlYXAgcHJvZmlsZSBkYXRhIik7CisJcHJvZl9jbnRfYWxsKCZjbnRfYWxsKTsKKwlleHBlY3Rf dTY0X2VxKGNudF9hbGwuY3Vyb2JqcywgMCwgIkV4cGVjdGVkIDAgYWxsb2NhdGlvbnMiKTsKKwll eHBlY3RfenVfZXEocHJvZl9idF9jb3VudCgpLCAxLCAiRXhwZWN0ZWQgMSBiYWNrdHJhY2UiKTsK KworCWRhbGxvY3gocCwgMCk7CisJZXhwZWN0X3p1X2VxKHByb2ZfYnRfY291bnQoKSwgMCwgIkV4 cGVjdGVkIDAgYmFja3RyYWNlcyIpOworCisJc2V0X3Byb2ZfYWN0aXZlKGZhbHNlKTsKK30KK1RF U1RfRU5ECisKKyNkZWZpbmUgTlRIUkVBRFMJCTQKKyNkZWZpbmUgTkFMTE9DU19QRVJfVEhSRUFE CSgxVSA8PCAxMykKKyNkZWZpbmUgT0JKX1JJTkdfQlVGX0NPVU5UCTE1MzEKKyNkZWZpbmUgUkVT RVRfSU5URVJWQUwJCSgxVSA8PCAxMCkKKyNkZWZpbmUgRFVNUF9JTlRFUlZBTAkJMzY3Nworc3Rh dGljIHZvaWQgKgordGhkX3N0YXJ0KHZvaWQgKnZhcmcpIHsKKwl1bnNpZ25lZCB0aGRfaW5kID0g Kih1bnNpZ25lZCAqKXZhcmc7CisJdW5zaWduZWQgaTsKKwl2b2lkICpvYmpzW09CSl9SSU5HX0JV Rl9DT1VOVF07CisKKwltZW1zZXQob2JqcywgMCwgc2l6ZW9mKG9ianMpKTsKKworCWZvciAoaSA9 IDA7IGkgPCBOQUxMT0NTX1BFUl9USFJFQUQ7IGkrKykgeworCQlpZiAoaSAlIFJFU0VUX0lOVEVS VkFMID09IDApIHsKKwkJCWV4cGVjdF9kX2VxKG1hbGxjdGwoInByb2YucmVzZXQiLCBOVUxMLCBO VUxMLCBOVUxMLCAwKSwKKwkJCSAgICAwLCAiVW5leHBlY3RlZCBlcnJvciB3aGlsZSByZXNldHRp bmcgaGVhcCBwcm9maWxlICIKKwkJCSAgICAiZGF0YSIpOworCQl9CisKKwkJaWYgKGkgJSBEVU1Q X0lOVEVSVkFMID09IDApIHsKKwkJCWV4cGVjdF9kX2VxKG1hbGxjdGwoInByb2YuZHVtcCIsIE5V TEwsIE5VTEwsIE5VTEwsIDApLAorCQkJICAgIDAsICJVbmV4cGVjdGVkIGVycm9yIHdoaWxlIGR1 bXBpbmcgaGVhcCBwcm9maWxlIik7CisJCX0KKworCQl7CisJCQl2b2lkICoqcHAgPSAmb2Jqc1tp ICUgT0JKX1JJTkdfQlVGX0NPVU5UXTsKKwkJCWlmICgqcHAgIT0gTlVMTCkgeworCQkJCWRhbGxv Y3goKnBwLCAwKTsKKwkJCQkqcHAgPSBOVUxMOworCQkJfQorCQkJKnBwID0gYnRhbGxvYygxLCB0 aGRfaW5kKk5BTExPQ1NfUEVSX1RIUkVBRCArIGkpOworCQkJZXhwZWN0X3B0cl9ub3RfbnVsbCgq cHAsCisJCQkgICAgIlVuZXhwZWN0ZWQgYnRhbGxvYygpIGZhaWx1cmUiKTsKKwkJfQorCX0KKwor CS8qIENsZWFuIHVwIGFueSByZW1haW5pbmcgb2JqZWN0cy4gKi8KKwlmb3IgKGkgPSAwOyBpIDwg T0JKX1JJTkdfQlVGX0NPVU5UOyBpKyspIHsKKwkJdm9pZCAqKnBwID0gJm9ianNbaSAlIE9CSl9S SU5HX0JVRl9DT1VOVF07CisJCWlmICgqcHAgIT0gTlVMTCkgeworCQkJZGFsbG9jeCgqcHAsIDAp OworCQkJKnBwID0gTlVMTDsKKwkJfQorCX0KKworCXJldHVybiBOVUxMOworfQorCitURVNUX0JF R0lOKHRlc3RfcHJvZl9yZXNldCkgeworCXNpemVfdCBsZ19wcm9mX3NhbXBsZV9vcmlnOworCXRo ZF90IHRoZHNbTlRIUkVBRFNdOworCXVuc2lnbmVkIHRoZF9hcmdzW05USFJFQURTXTsKKwl1bnNp Z25lZCBpOworCXNpemVfdCBidF9jb3VudCwgdGRhdGFfY291bnQ7CisKKwl0ZXN0X3NraXBfaWYo IWNvbmZpZ19wcm9mKTsKKworCWJ0X2NvdW50ID0gcHJvZl9idF9jb3VudCgpOworCWV4cGVjdF96 dV9lcShidF9jb3VudCwgMCwKKwkgICAgIlVuZXhwZWN0ZWQgcHJlLWV4aXN0aW5nIHRkYXRhIHN0 cnVjdHVyZXMiKTsKKwl0ZGF0YV9jb3VudCA9IHByb2ZfdGRhdGFfY291bnQoKTsKKworCWxnX3By b2Zfc2FtcGxlX29yaWcgPSBnZXRfbGdfcHJvZl9zYW1wbGUoKTsKKwlkb19wcm9mX3Jlc2V0KDUp OworCisJc2V0X3Byb2ZfYWN0aXZlKHRydWUpOworCisJZm9yIChpID0gMDsgaSA8IE5USFJFQURT OyBpKyspIHsKKwkJdGhkX2FyZ3NbaV0gPSBpOworCQl0aGRfY3JlYXRlKCZ0aGRzW2ldLCB0aGRf c3RhcnQsICh2b2lkICopJnRoZF9hcmdzW2ldKTsKKwl9CisJZm9yIChpID0gMDsgaSA8IE5USFJF QURTOyBpKyspIHsKKwkJdGhkX2pvaW4odGhkc1tpXSwgTlVMTCk7CisJfQorCisJZXhwZWN0X3p1 X2VxKHByb2ZfYnRfY291bnQoKSwgYnRfY291bnQsCisJICAgICJVbmV4cGVjdGVkIGJhY3RyYWNl IGNvdW50IGNoYW5nZSIpOworCWV4cGVjdF96dV9lcShwcm9mX3RkYXRhX2NvdW50KCksIHRkYXRh X2NvdW50LAorCSAgICAiVW5leHBlY3RlZCByZW1haW5pbmcgdGRhdGEgc3RydWN0dXJlcyIpOwor CisJc2V0X3Byb2ZfYWN0aXZlKGZhbHNlKTsKKworCWRvX3Byb2ZfcmVzZXQobGdfcHJvZl9zYW1w bGVfb3JpZyk7Cit9CitURVNUX0VORAorI3VuZGVmIE5USFJFQURTCisjdW5kZWYgTkFMTE9DU19Q RVJfVEhSRUFECisjdW5kZWYgT0JKX1JJTkdfQlVGX0NPVU5UCisjdW5kZWYgUkVTRVRfSU5URVJW QUwKKyN1bmRlZiBEVU1QX0lOVEVSVkFMCisKKy8qIFRlc3Qgc2FtcGxpbmcgYXQgdGhlIHNhbWUg YWxsb2NhdGlvbiBzaXRlIGFjcm9zcyByZXNldHMuICovCisjZGVmaW5lIE5JVEVSIDEwCitURVNU X0JFR0lOKHRlc3RfeGFsbG9jeCkgeworCXNpemVfdCBsZ19wcm9mX3NhbXBsZV9vcmlnOworCXVu c2lnbmVkIGk7CisJdm9pZCAqcHRyc1tOSVRFUl07CisKKwl0ZXN0X3NraXBfaWYoIWNvbmZpZ19w cm9mKTsKKworCWxnX3Byb2Zfc2FtcGxlX29yaWcgPSBnZXRfbGdfcHJvZl9zYW1wbGUoKTsKKwlz ZXRfcHJvZl9hY3RpdmUodHJ1ZSk7CisKKwkvKiBSZXNldCBwcm9maWxpbmcuICovCisJZG9fcHJv Zl9yZXNldCgwKTsKKworCWZvciAoaSA9IDA7IGkgPCBOSVRFUjsgaSsrKSB7CisJCXZvaWQgKnA7 CisJCXNpemVfdCBzeiwgbnN6OworCisJCS8qIFJlc2V0IHByb2ZpbGluZy4gKi8KKwkJZG9fcHJv Zl9yZXNldCgwKTsKKworCQkvKiBBbGxvY2F0ZSBzbWFsbCBvYmplY3QgKHdoaWNoIHdpbGwgYmUg cHJvbW90ZWQpLiAqLworCQlwID0gcHRyc1tpXSA9IG1hbGxvY3goMSwgMCk7CisJCWV4cGVjdF9w dHJfbm90X251bGwocCwgIlVuZXhwZWN0ZWQgbWFsbG9jeCgpIGZhaWx1cmUiKTsKKworCQkvKiBS ZXNldCBwcm9maWxpbmcuICovCisJCWRvX3Byb2ZfcmVzZXQoMCk7CisKKwkJLyogUGVyZm9ybSBz dWNjZXNzZnVsIHhhbGxvY3goKS4gKi8KKwkJc3ogPSBzYWxsb2N4KHAsIDApOworCQlleHBlY3Rf enVfZXEoeGFsbG9jeChwLCBzeiwgMCwgMCksIHN6LAorCQkgICAgIlVuZXhwZWN0ZWQgeGFsbG9j eCgpIGZhaWx1cmUiKTsKKworCQkvKiBQZXJmb3JtIHVuc3VjY2Vzc2Z1bCB4YWxsb2N4KCkuICov CisJCW5zeiA9IG5hbGxvY3goc3orMSwgMCk7CisJCWV4cGVjdF96dV9lcSh4YWxsb2N4KHAsIG5z eiwgMCwgMCksIHN6LAorCQkgICAgIlVuZXhwZWN0ZWQgeGFsbG9jeCgpIHN1Y2Nlc3MiKTsKKwl9 CisKKwlmb3IgKGkgPSAwOyBpIDwgTklURVI7IGkrKykgeworCQkvKiBkYWxsb2N4LiAqLworCQlk YWxsb2N4KHB0cnNbaV0sIDApOworCX0KKworCXNldF9wcm9mX2FjdGl2ZShmYWxzZSk7CisJZG9f cHJvZl9yZXNldChsZ19wcm9mX3NhbXBsZV9vcmlnKTsKK30KK1RFU1RfRU5ECisjdW5kZWYgTklU RVIKKworaW50CittYWluKHZvaWQpIHsKKwkvKiBJbnRlcmNlcHQgZHVtcGluZyBwcmlvciB0byBy dW5uaW5nIGFueSB0ZXN0cy4gKi8KKwlwcm9mX2R1bXBfb3Blbl9maWxlID0gcHJvZl9kdW1wX29w ZW5fZmlsZV9pbnRlcmNlcHQ7CisKKwlyZXR1cm4gdGVzdF9ub19yZWVudHJhbmN5KAorCSAgICB0 ZXN0X3Byb2ZfcmVzZXRfYmFzaWMsCisJICAgIHRlc3RfcHJvZl9yZXNldF9jbGVhbnVwLAorCSAg ICB0ZXN0X3Byb2ZfcmVzZXQsCisJICAgIHRlc3RfeGFsbG9jeCk7Cit9CgpkaWZmIC0tZ2l0IGEv Mzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L3Byb2ZfcmVz ZXQuc2ggYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQv cHJvZl9yZXNldC5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYWVmZWI3 Ci0tLSAvZGV2L251bGwKKysrIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4z LjAvdGVzdC91bml0L3Byb2ZfcmVzZXQuc2gKQEAgLTAsMCArMSw1IEBACisjIS9iaW4vc2gKKwor aWYgWyAieCR7ZW5hYmxlX3Byb2Z9IiA9ICJ4MSIgXSA7IHRoZW4KKyAgZXhwb3J0IE1BTExPQ19D T05GPSJwcm9mOnRydWUscHJvZl9hY3RpdmU6ZmFsc2UsbGdfcHJvZl9zYW1wbGU6MCxwcm9mX3Jl Y2VudF9hbGxvY19tYXg6MCIKK2ZpCgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVp bGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L3Byb2Zfc3RhdHMuYyBiLzM4OS1kcy1iYXNlLTMu My4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9wcm9mX3N0YXRzLmMKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzg4YzRhZQotLS0gL2Rldi9udWxsCisrKyBiLzM4 OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9wcm9mX3N0YXRz LmMKQEAgLTAsMCArMSwxNTEgQEAKKyNpbmNsdWRlICJ0ZXN0L2plbWFsbG9jX3Rlc3QuaCIKKwor I2RlZmluZSBOX1BUUlMgMworCitzdGF0aWMgdm9pZAordGVzdF9jb21iaW5hdGlvbnMoc3ppbmRf dCBpbmQsIHNpemVfdCBzaXplc19hcnJheVtOX1BUUlNdLAorICAgIGludCBmbGFnc19hcnJheVtO X1BUUlNdKSB7CisjZGVmaW5lIE1BTExDVExfU1RSX0xFTiA2NAorCWFzc2VydChvcHRfcHJvZiAm JiBvcHRfcHJvZl9zdGF0cyk7CisKKwljaGFyIG1hbGxjdGxfbGl2ZV9zdHJbTUFMTENUTF9TVFJf TEVOXTsKKwljaGFyIG1hbGxjdGxfYWNjdW1fc3RyW01BTExDVExfU1RSX0xFTl07CisJaWYgKGlu ZCA8IFNDX05CSU5TKSB7CisJCW1hbGxvY19zbnByaW50ZihtYWxsY3RsX2xpdmVfc3RyLCBNQUxM Q1RMX1NUUl9MRU4sCisJCSAgICAicHJvZi5zdGF0cy5iaW5zLiV1LmxpdmUiLCAodW5zaWduZWQp aW5kKTsKKwkJbWFsbG9jX3NucHJpbnRmKG1hbGxjdGxfYWNjdW1fc3RyLCBNQUxMQ1RMX1NUUl9M RU4sCisJCSAgICAicHJvZi5zdGF0cy5iaW5zLiV1LmFjY3VtIiwgKHVuc2lnbmVkKWluZCk7CisJ fSBlbHNlIHsKKwkJbWFsbG9jX3NucHJpbnRmKG1hbGxjdGxfbGl2ZV9zdHIsIE1BTExDVExfU1RS X0xFTiwKKwkJICAgICJwcm9mLnN0YXRzLmxleHRlbnRzLiV1LmxpdmUiLCAodW5zaWduZWQpKGlu ZCAtIFNDX05CSU5TKSk7CisJCW1hbGxvY19zbnByaW50ZihtYWxsY3RsX2FjY3VtX3N0ciwgTUFM TENUTF9TVFJfTEVOLAorCQkgICAgInByb2Yuc3RhdHMubGV4dGVudHMuJXUuYWNjdW0iLCAodW5z aWduZWQpKGluZCAtIFNDX05CSU5TKSk7CisJfQorCisJc2l6ZV90IHN0YXRzX2xlbiA9IDIgKiBz aXplb2YodWludDY0X3QpOworCisJdWludDY0X3QgbGl2ZV9zdGF0c19vcmlnWzJdOworCWFzc2Vy dF9kX2VxKG1hbGxjdGwobWFsbGN0bF9saXZlX3N0ciwgJmxpdmVfc3RhdHNfb3JpZywgJnN0YXRz X2xlbiwKKwkgICAgTlVMTCwgMCksIDAsICIiKTsKKwl1aW50NjRfdCBhY2N1bV9zdGF0c19vcmln WzJdOworCWFzc2VydF9kX2VxKG1hbGxjdGwobWFsbGN0bF9hY2N1bV9zdHIsICZhY2N1bV9zdGF0 c19vcmlnLCAmc3RhdHNfbGVuLAorCSAgICBOVUxMLCAwKSwgMCwgIiIpOworCisJdm9pZCAqcHRy c1tOX1BUUlNdOworCisJdWludDY0X3QgbGl2ZV9yZXFfc3VtID0gMDsKKwl1aW50NjRfdCBsaXZl X2NvdW50ID0gMDsKKwl1aW50NjRfdCBhY2N1bV9yZXFfc3VtID0gMDsKKwl1aW50NjRfdCBhY2N1 bV9jb3VudCA9IDA7CisKKwlmb3IgKHNpemVfdCBpID0gMDsgaSA8IE5fUFRSUzsgKytpKSB7CisJ CXNpemVfdCBzeiA9IHNpemVzX2FycmF5W2ldOworCQlpbnQgZmxhZ3MgPSBmbGFnc19hcnJheVtp XTsKKwkJdm9pZCAqcCA9IG1hbGxvY3goc3osIGZsYWdzKTsKKwkJYXNzZXJ0X3B0cl9ub3RfbnVs bChwLCAibWFsbG9jKCkgZmFpbGVkIik7CisJCWFzc2VydChURVNUX01BTExPQ19TSVpFKHApID09 IHN6X2luZGV4MnNpemUoaW5kKSk7CisJCXB0cnNbaV0gPSBwOworCQlsaXZlX3JlcV9zdW0gKz0g c3o7CisJCWxpdmVfY291bnQrKzsKKwkJYWNjdW1fcmVxX3N1bSArPSBzejsKKwkJYWNjdW1fY291 bnQrKzsKKwkJdWludDY0X3QgbGl2ZV9zdGF0c1syXTsKKwkJYXNzZXJ0X2RfZXEobWFsbGN0bCht YWxsY3RsX2xpdmVfc3RyLCAmbGl2ZV9zdGF0cywgJnN0YXRzX2xlbiwKKwkJICAgIE5VTEwsIDAp LCAwLCAiIik7CisJCWV4cGVjdF91NjRfZXEobGl2ZV9zdGF0c1swXSAtIGxpdmVfc3RhdHNfb3Jp Z1swXSwKKwkJICAgIGxpdmVfcmVxX3N1bSwgIiIpOworCQlleHBlY3RfdTY0X2VxKGxpdmVfc3Rh dHNbMV0gLSBsaXZlX3N0YXRzX29yaWdbMV0sCisJCSAgICBsaXZlX2NvdW50LCAiIik7CisJCXVp bnQ2NF90IGFjY3VtX3N0YXRzWzJdOworCQlhc3NlcnRfZF9lcShtYWxsY3RsKG1hbGxjdGxfYWNj dW1fc3RyLCAmYWNjdW1fc3RhdHMsICZzdGF0c19sZW4sCisJCSAgICBOVUxMLCAwKSwgMCwgIiIp OworCQlleHBlY3RfdTY0X2VxKGFjY3VtX3N0YXRzWzBdIC0gYWNjdW1fc3RhdHNfb3JpZ1swXSwK KwkJICAgIGFjY3VtX3JlcV9zdW0sICIiKTsKKwkJZXhwZWN0X3U2NF9lcShhY2N1bV9zdGF0c1sx XSAtIGFjY3VtX3N0YXRzX29yaWdbMV0sCisJCSAgICBhY2N1bV9jb3VudCwgIiIpOworCX0KKwor CWZvciAoc2l6ZV90IGkgPSAwOyBpIDwgTl9QVFJTOyArK2kpIHsKKwkJc2l6ZV90IHN6ID0gc2l6 ZXNfYXJyYXlbaV07CisJCWludCBmbGFncyA9IGZsYWdzX2FycmF5W2ldOworCQlzZGFsbG9jeChw dHJzW2ldLCBzeiwgZmxhZ3MpOworCQlsaXZlX3JlcV9zdW0gLT0gc3o7CisJCWxpdmVfY291bnQt LTsKKwkJdWludDY0X3QgbGl2ZV9zdGF0c1syXTsKKwkJYXNzZXJ0X2RfZXEobWFsbGN0bChtYWxs Y3RsX2xpdmVfc3RyLCAmbGl2ZV9zdGF0cywgJnN0YXRzX2xlbiwKKwkJICAgIE5VTEwsIDApLCAw LCAiIik7CisJCWV4cGVjdF91NjRfZXEobGl2ZV9zdGF0c1swXSAtIGxpdmVfc3RhdHNfb3JpZ1sw XSwKKwkJICAgIGxpdmVfcmVxX3N1bSwgIiIpOworCQlleHBlY3RfdTY0X2VxKGxpdmVfc3RhdHNb MV0gLSBsaXZlX3N0YXRzX29yaWdbMV0sCisJCSAgICBsaXZlX2NvdW50LCAiIik7CisJCXVpbnQ2 NF90IGFjY3VtX3N0YXRzWzJdOworCQlhc3NlcnRfZF9lcShtYWxsY3RsKG1hbGxjdGxfYWNjdW1f c3RyLCAmYWNjdW1fc3RhdHMsICZzdGF0c19sZW4sCisJCSAgICBOVUxMLCAwKSwgMCwgIiIpOwor CQlleHBlY3RfdTY0X2VxKGFjY3VtX3N0YXRzWzBdIC0gYWNjdW1fc3RhdHNfb3JpZ1swXSwKKwkJ ICAgIGFjY3VtX3JlcV9zdW0sICIiKTsKKwkJZXhwZWN0X3U2NF9lcShhY2N1bV9zdGF0c1sxXSAt IGFjY3VtX3N0YXRzX29yaWdbMV0sCisJCSAgICBhY2N1bV9jb3VudCwgIiIpOworCX0KKyN1bmRl ZiBNQUxMQ1RMX1NUUl9MRU4KK30KKworc3RhdGljIHZvaWQKK3Rlc3Rfc3ppbmRfd3JhcHBlcihz emluZF90IGluZCkgeworCXNpemVfdCBzaXplc19hcnJheVtOX1BUUlNdOworCWludCBmbGFnc19h cnJheVtOX1BUUlNdOworCWZvciAoc2l6ZV90IGkgPSAwLCBzeiA9IHN6X2luZGV4MnNpemUoaW5k KSAtIE5fUFRSUzsgaSA8IE5fUFRSUzsKKwkgICAgKytpLCArK3N6KSB7CisJCXNpemVzX2FycmF5 W2ldID0gc3o7CisJCWZsYWdzX2FycmF5W2ldID0gMDsKKwl9CisJdGVzdF9jb21iaW5hdGlvbnMo aW5kLCBzaXplc19hcnJheSwgZmxhZ3NfYXJyYXkpOworfQorCitURVNUX0JFR0lOKHRlc3RfcHJv Zl9zdGF0cykgeworCXRlc3Rfc2tpcF9pZighY29uZmlnX3Byb2YpOworCXRlc3Rfc3ppbmRfd3Jh cHBlcigwKTsKKwl0ZXN0X3N6aW5kX3dyYXBwZXIoMSk7CisJdGVzdF9zemluZF93cmFwcGVyKDIp OworCXRlc3Rfc3ppbmRfd3JhcHBlcihTQ19OQklOUyk7CisJdGVzdF9zemluZF93cmFwcGVyKFND X05CSU5TICsgMSk7CisJdGVzdF9zemluZF93cmFwcGVyKFNDX05CSU5TICsgMik7Cit9CitURVNU X0VORAorCitzdGF0aWMgdm9pZAordGVzdF9zemluZF9hbGlnbmVkX3dyYXBwZXIoc3ppbmRfdCBp bmQsIHVuc2lnbmVkIGxnX2FsaWduKSB7CisJc2l6ZV90IHNpemVzX2FycmF5W05fUFRSU107CisJ aW50IGZsYWdzX2FycmF5W05fUFRSU107CisJaW50IGZsYWdzID0gTUFMTE9DWF9MR19BTElHTihs Z19hbGlnbik7CisJZm9yIChzaXplX3QgaSA9IDAsIHN6ID0gc3pfaW5kZXgyc2l6ZShpbmQpIC0g Tl9QVFJTOyBpIDwgTl9QVFJTOworCSAgICArK2ksICsrc3opIHsKKwkJc2l6ZXNfYXJyYXlbaV0g PSBzejsKKwkJZmxhZ3NfYXJyYXlbaV0gPSBmbGFnczsKKwl9CisJdGVzdF9jb21iaW5hdGlvbnMo CisJICAgIHN6X3NpemUyaW5kZXgoc3pfc2EydShzel9pbmRleDJzaXplKGluZCksIDEgPDwgbGdf YWxpZ24pKSwKKwkgICAgc2l6ZXNfYXJyYXksIGZsYWdzX2FycmF5KTsKK30KKworVEVTVF9CRUdJ Tih0ZXN0X3Byb2Zfc3RhdHNfYWxpZ25lZCkgeworCXRlc3Rfc2tpcF9pZighY29uZmlnX3Byb2Yp OworCWZvciAoc3ppbmRfdCBpbmQgPSAwOyBpbmQgPCAxMDsgKytpbmQpIHsKKwkJZm9yICh1bnNp Z25lZCBsZ19hbGlnbiA9IDA7IGxnX2FsaWduIDwgMTA7ICsrbGdfYWxpZ24pIHsKKwkJCXRlc3Rf c3ppbmRfYWxpZ25lZF93cmFwcGVyKGluZCwgbGdfYWxpZ24pOworCQl9CisJfQorCWZvciAoc3pp bmRfdCBpbmQgPSBTQ19OQklOUyAtIDU7IGluZCA8IFNDX05CSU5TICsgNTsgKytpbmQpIHsKKwkJ Zm9yICh1bnNpZ25lZCBsZ19hbGlnbiA9IFNDX0xHX0xBUkdFX01JTkNMQVNTIC0gNTsKKwkJICAg IGxnX2FsaWduIDwgU0NfTEdfTEFSR0VfTUlOQ0xBU1MgKyA1OyArK2xnX2FsaWduKSB7CisJCQl0 ZXN0X3N6aW5kX2FsaWduZWRfd3JhcHBlcihpbmQsIGxnX2FsaWduKTsKKwkJfQorCX0KK30KK1RF U1RfRU5ECisKK2ludAorbWFpbih2b2lkKSB7CisJcmV0dXJuIHRlc3QoCisJICAgIHRlc3RfcHJv Zl9zdGF0cywKKwkgICAgdGVzdF9wcm9mX3N0YXRzX2FsaWduZWQpOworfQoKZGlmZiAtLWdpdCBh LzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9wcm9mX3N0 YXRzLnNoIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0 L3Byb2Zfc3RhdHMuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjNjODE5 YgotLS0gL2Rldi9udWxsCisrKyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUu My4wL3Rlc3QvdW5pdC9wcm9mX3N0YXRzLnNoCkBAIC0wLDAgKzEsNSBAQAorIyEvYmluL3NoCisK K2lmIFsgIngke2VuYWJsZV9wcm9mfSIgPSAieDEiIF0gOyB0aGVuCisgIGV4cG9ydCBNQUxMT0Nf Q09ORj0icHJvZjp0cnVlLHByb2ZfYWN0aXZlOnRydWUsbGdfcHJvZl9zYW1wbGU6MCxwcm9mX3N0 YXRzOnRydWUiCitmaQoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFs bG9jLTUuMy4wL3Rlc3QvdW5pdC9wcm9mX3N5c190aHJlYWRfbmFtZS5jIGIvMzg5LWRzLWJhc2Ut My4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L3Byb2Zfc3lzX3RocmVhZF9uYW1l LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWZmYzc4OAotLS0gL2Rldi9u dWxsCisrKyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5p dC9wcm9mX3N5c190aHJlYWRfbmFtZS5jCkBAIC0wLDAgKzEsNzcgQEAKKyNpbmNsdWRlICJ0ZXN0 L2plbWFsbG9jX3Rlc3QuaCIKKworI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL3Byb2Zfc3lz LmgiCisKK3N0YXRpYyBjb25zdCBjaGFyICp0ZXN0X3RocmVhZF9uYW1lID0gInRlc3RfbmFtZSI7 CisKK3N0YXRpYyBpbnQKK3Rlc3RfcHJvZl9zeXNfdGhyZWFkX25hbWVfcmVhZF9lcnJvcihjaGFy ICpidWYsIHNpemVfdCBsaW1pdCkgeworCXJldHVybiBFTk9TWVM7Cit9CisKK3N0YXRpYyBpbnQK K3Rlc3RfcHJvZl9zeXNfdGhyZWFkX25hbWVfcmVhZChjaGFyICpidWYsIHNpemVfdCBsaW1pdCkg eworCWFzc2VydChzdHJsZW4odGVzdF90aHJlYWRfbmFtZSkgPCBsaW1pdCk7CisJc3RybmNweShi dWYsIHRlc3RfdGhyZWFkX25hbWUsIGxpbWl0KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlu dAordGVzdF9wcm9mX3N5c190aHJlYWRfbmFtZV9yZWFkX2NsZWFyKGNoYXIgKmJ1Ziwgc2l6ZV90 IGxpbWl0KSB7CisJYXNzZXJ0KGxpbWl0ID4gMCk7CisJYnVmWzBdID0gJ1wwJzsKKwlyZXR1cm4g MDsKK30KKworVEVTVF9CRUdJTih0ZXN0X3Byb2Zfc3lzX3RocmVhZF9uYW1lKSB7CisJdGVzdF9z a2lwX2lmKCFjb25maWdfcHJvZik7CisKKwlib29sIG9sZHZhbDsKKwlzaXplX3Qgc3ogPSBzaXpl b2Yob2xkdmFsKTsKKwlhc3NlcnRfZF9lcShtYWxsY3RsKCJvcHQucHJvZl9zeXNfdGhyZWFkX25h bWUiLCAmb2xkdmFsLCAmc3osIE5VTEwsIDApLAorCSAgICAwLCAibWFsbGN0bCBmYWlsZWQiKTsK Kwlhc3NlcnRfdHJ1ZShvbGR2YWwsICJvcHRpb24gd2FzIG5vdCBzZXQgY29ycmVjdGx5Iik7CisK Kwljb25zdCBjaGFyICp0aHJlYWRfbmFtZTsKKwlzeiA9IHNpemVvZih0aHJlYWRfbmFtZSk7CisJ YXNzZXJ0X2RfZXEobWFsbGN0bCgidGhyZWFkLnByb2YubmFtZSIsICZ0aHJlYWRfbmFtZSwgJnN6 LCBOVUxMLCAwKSwgMCwKKwkgICAgIm1hbGxjdGwgcmVhZCBmb3IgdGhyZWFkIG5hbWUgc2hvdWxk IG5vdCBmYWlsIik7CisJZXhwZWN0X3N0cl9lcSh0aHJlYWRfbmFtZSwgIiIsICJJbml0aWFsIHRo cmVhZCBuYW1lIHNob3VsZCBiZSBlbXB0eSIpOworCisJdGhyZWFkX25hbWUgPSB0ZXN0X3RocmVh ZF9uYW1lOworCWFzc2VydF9kX2VxKG1hbGxjdGwoInRocmVhZC5wcm9mLm5hbWUiLCBOVUxMLCBO VUxMLCAmdGhyZWFkX25hbWUsIHN6KSwKKwkgICAgRU5PRU5ULCAibWFsbGN0bCB3cml0ZSBmb3Ig dGhyZWFkIG5hbWUgc2hvdWxkIGZhaWwiKTsKKwlhc3NlcnRfcHRyX2VxKHRocmVhZF9uYW1lLCB0 ZXN0X3RocmVhZF9uYW1lLAorCSAgICAiVGhyZWFkIG5hbWUgc2hvdWxkIG5vdCBiZSB0b3VjaGVk Iik7CisKKwlwcm9mX3N5c190aHJlYWRfbmFtZV9yZWFkID0gdGVzdF9wcm9mX3N5c190aHJlYWRf bmFtZV9yZWFkX2Vycm9yOworCXZvaWQgKnAgPSBtYWxsb2MoMSk7CisJZnJlZShwKTsKKwlhc3Nl cnRfZF9lcShtYWxsY3RsKCJ0aHJlYWQucHJvZi5uYW1lIiwgJnRocmVhZF9uYW1lLCAmc3osIE5V TEwsIDApLCAwLAorCSAgICAibWFsbGN0bCByZWFkIGZvciB0aHJlYWQgbmFtZSBzaG91bGQgbm90 IGZhaWwiKTsKKwlhc3NlcnRfc3RyX2VxKHRocmVhZF9uYW1lLCAiIiwKKwkgICAgIlRocmVhZCBu YW1lIHNob3VsZCBzdGF5IHRoZSBzYW1lIGlmIHRoZSBzeXN0ZW0gY2FsbCBmYWlscyIpOworCisJ cHJvZl9zeXNfdGhyZWFkX25hbWVfcmVhZCA9IHRlc3RfcHJvZl9zeXNfdGhyZWFkX25hbWVfcmVh ZDsKKwlwID0gbWFsbG9jKDEpOworCWZyZWUocCk7CisJYXNzZXJ0X2RfZXEobWFsbGN0bCgidGhy ZWFkLnByb2YubmFtZSIsICZ0aHJlYWRfbmFtZSwgJnN6LCBOVUxMLCAwKSwgMCwKKwkgICAgIm1h bGxjdGwgcmVhZCBmb3IgdGhyZWFkIG5hbWUgc2hvdWxkIG5vdCBmYWlsIik7CisJYXNzZXJ0X3N0 cl9lcSh0aHJlYWRfbmFtZSwgdGVzdF90aHJlYWRfbmFtZSwKKwkgICAgIlRocmVhZCBuYW1lIHNo b3VsZCBiZSBjaGFuZ2VkIGlmIHRoZSBzeXN0ZW0gY2FsbCBzdWNjZWVkcyIpOworCisJcHJvZl9z eXNfdGhyZWFkX25hbWVfcmVhZCA9IHRlc3RfcHJvZl9zeXNfdGhyZWFkX25hbWVfcmVhZF9jbGVh cjsKKwlwID0gbWFsbG9jKDEpOworCWZyZWUocCk7CisJYXNzZXJ0X2RfZXEobWFsbGN0bCgidGhy ZWFkLnByb2YubmFtZSIsICZ0aHJlYWRfbmFtZSwgJnN6LCBOVUxMLCAwKSwgMCwKKwkgICAgIm1h bGxjdGwgcmVhZCBmb3IgdGhyZWFkIG5hbWUgc2hvdWxkIG5vdCBmYWlsIik7CisJZXhwZWN0X3N0 cl9lcSh0aHJlYWRfbmFtZSwgIiIsICJUaHJlYWQgbmFtZSBzaG91bGQgYmUgdXBkYXRlZCBpZiB0 aGUgIgorCSAgICAic3lzdGVtIGNhbGwgcmV0dXJucyBhIGRpZmZlcmVudCBuYW1lIik7Cit9CitU RVNUX0VORAorCitpbnQKK21haW4odm9pZCkgeworCXJldHVybiB0ZXN0KAorCSAgICB0ZXN0X3By b2Zfc3lzX3RocmVhZF9uYW1lKTsKK30KCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1i dWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvcHJvZl9zeXNfdGhyZWFkX25hbWUuc2ggYi8z ODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvcHJvZl9zeXNf dGhyZWFkX25hbWUuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWYwMmE4 YQotLS0gL2Rldi9udWxsCisrKyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUu My4wL3Rlc3QvdW5pdC9wcm9mX3N5c190aHJlYWRfbmFtZS5zaApAQCAtMCwwICsxLDUgQEAKKyMh L2Jpbi9zaAorCitpZiBbICJ4JHtlbmFibGVfcHJvZn0iID0gIngxIiBdIDsgdGhlbgorICBleHBv cnQgTUFMTE9DX0NPTkY9InByb2Y6dHJ1ZSxwcm9mX2FjdGl2ZTp0cnVlLGxnX3Byb2Zfc2FtcGxl OjAscHJvZl9zeXNfdGhyZWFkX25hbWU6dHJ1ZSIKK2ZpCgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJh c2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L3Byb2ZfdGN0eC5jIGIvMzg5 LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L3Byb2ZfdGN0eC5j Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwZWZkYzMKLS0tIC9kZXYvbnVs bAorKysgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQv cHJvZl90Y3R4LmMKQEAgLTAsMCArMSw0OCBAQAorI2luY2x1ZGUgInRlc3QvamVtYWxsb2NfdGVz dC5oIgorCisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvcHJvZl9kYXRhLmgiCisKK1RFU1Rf QkVHSU4odGVzdF9wcm9mX3JlYWxsb2MpIHsKKwl0c2RfdCAqdHNkOworCWludCBmbGFnczsKKwl2 b2lkICpwLCAqcTsKKwlwcm9mX2luZm9fdCBwcm9mX2luZm9fcCwgcHJvZl9pbmZvX3E7CisJcHJv Zl9jbnRfdCBjbnRfMCwgY250XzEsIGNudF8yLCBjbnRfMzsKKworCXRlc3Rfc2tpcF9pZighY29u ZmlnX3Byb2YpOworCisJdHNkID0gdHNkX2ZldGNoKCk7CisJZmxhZ3MgPSBNQUxMT0NYX1RDQUNI RV9OT05FOworCisJcHJvZl9jbnRfYWxsKCZjbnRfMCk7CisJcCA9IG1hbGxvY3goMTAyNCwgZmxh Z3MpOworCWV4cGVjdF9wdHJfbm90X251bGwocCwgIlVuZXhwZWN0ZWQgbWFsbG9jeCgpIGZhaWx1 cmUiKTsKKwlwcm9mX2luZm9fZ2V0KHRzZCwgcCwgTlVMTCwgJnByb2ZfaW5mb19wKTsKKwlleHBl Y3RfcHRyX25lKHByb2ZfaW5mb19wLmFsbG9jX3RjdHgsIChwcm9mX3RjdHhfdCAqKSh1aW50cHRy X3QpMVUsCisJICAgICJFeHBlY3RlZCB2YWxpZCB0Y3R4Iik7CisJcHJvZl9jbnRfYWxsKCZjbnRf MSk7CisJZXhwZWN0X3U2NF9lcShjbnRfMC5jdXJvYmpzICsgMSwgY250XzEuY3Vyb2JqcywKKwkg ICAgIkFsbG9jYXRpb24gc2hvdWxkIGhhdmUgaW5jcmVhc2VkIHNhbXBsZSBzaXplIik7CisKKwlx ID0gcmFsbG9jeChwLCAyMDQ4LCBmbGFncyk7CisJZXhwZWN0X3B0cl9uZShwLCBxLCAiRXhwZWN0 ZWQgbW92ZSIpOworCWV4cGVjdF9wdHJfbm90X251bGwocCwgIlVuZXhwZWN0ZWQgcm1hbGxvY3go KSBmYWlsdXJlIik7CisJcHJvZl9pbmZvX2dldCh0c2QsIHEsIE5VTEwsICZwcm9mX2luZm9fcSk7 CisJZXhwZWN0X3B0cl9uZShwcm9mX2luZm9fcS5hbGxvY190Y3R4LCAocHJvZl90Y3R4X3QgKiko dWludHB0cl90KTFVLAorCSAgICAiRXhwZWN0ZWQgdmFsaWQgdGN0eCIpOworCXByb2ZfY250X2Fs bCgmY250XzIpOworCWV4cGVjdF91NjRfZXEoY250XzEuY3Vyb2JqcywgY250XzIuY3Vyb2JqcywK KwkgICAgIlJlYWxsb2NhdGlvbiBzaG91bGQgbm90IGhhdmUgY2hhbmdlZCBzYW1wbGUgc2l6ZSIp OworCisJZGFsbG9jeChxLCBmbGFncyk7CisJcHJvZl9jbnRfYWxsKCZjbnRfMyk7CisJZXhwZWN0 X3U2NF9lcShjbnRfMC5jdXJvYmpzLCBjbnRfMy5jdXJvYmpzLAorCSAgICAiU2FtcGxlIHNpemUg c2hvdWxkIGhhdmUgcmV0dXJuZWQgdG8gYmFzZSBsZXZlbCIpOworfQorVEVTVF9FTkQKKworaW50 CittYWluKHZvaWQpIHsKKwlyZXR1cm4gdGVzdF9ub19yZWVudHJhbmN5KAorCSAgICB0ZXN0X3By b2ZfcmVhbGxvYyk7Cit9CgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVt YWxsb2MtNS4zLjAvdGVzdC91bml0L3Byb2ZfdGN0eC5zaCBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1 aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9wcm9mX3RjdHguc2gKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMC4uNDg1ZjliZgotLS0gL2Rldi9udWxsCisrKyBiLzM4OS1kcy1i YXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9wcm9mX3RjdHguc2gKQEAg LTAsMCArMSw1IEBACisjIS9iaW4vc2gKKworaWYgWyAieCR7ZW5hYmxlX3Byb2Z9IiA9ICJ4MSIg XSA7IHRoZW4KKyAgZXhwb3J0IE1BTExPQ19DT05GPSJwcm9mOnRydWUscHJvZl9hY3RpdmU6dHJ1 ZSxsZ19wcm9mX3NhbXBsZTowIgorZmkKCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1i dWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvcHJvZl90aHJlYWRfbmFtZS5jIGIvMzg5LWRz LWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L3Byb2ZfdGhyZWFkX25h bWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzQ2MTRmCi0tLSAvZGV2 L251bGwKKysrIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91 bml0L3Byb2ZfdGhyZWFkX25hbWUuYwpAQCAtMCwwICsxLDEyMiBAQAorI2luY2x1ZGUgInRlc3Qv amVtYWxsb2NfdGVzdC5oIgorCitzdGF0aWMgdm9pZAorbWFsbGN0bF90aHJlYWRfbmFtZV9nZXRf aW1wbChjb25zdCBjaGFyICp0aHJlYWRfbmFtZV9leHBlY3RlZCwgY29uc3QgY2hhciAqZnVuYywK KyAgICBpbnQgbGluZSkgeworCWNvbnN0IGNoYXIgKnRocmVhZF9uYW1lX29sZDsKKwlzaXplX3Qg c3o7CisKKwlzeiA9IHNpemVvZih0aHJlYWRfbmFtZV9vbGQpOworCWV4cGVjdF9kX2VxKG1hbGxj dGwoInRocmVhZC5wcm9mLm5hbWUiLCAodm9pZCAqKSZ0aHJlYWRfbmFtZV9vbGQsICZzeiwKKwkg ICAgTlVMTCwgMCksIDAsCisJICAgICIlcygpOiVkOiBVbmV4cGVjdGVkIG1hbGxjdGwgZmFpbHVy ZSByZWFkaW5nIHRocmVhZC5wcm9mLm5hbWUiLAorCSAgICBmdW5jLCBsaW5lKTsKKwlleHBlY3Rf c3RyX2VxKHRocmVhZF9uYW1lX29sZCwgdGhyZWFkX25hbWVfZXhwZWN0ZWQsCisJICAgICIlcygp OiVkOiBVbmV4cGVjdGVkIHRocmVhZC5wcm9mLm5hbWUgdmFsdWUiLCBmdW5jLCBsaW5lKTsKK30K KyNkZWZpbmUgbWFsbGN0bF90aHJlYWRfbmFtZV9nZXQoYSkJCQkJCVwKKwltYWxsY3RsX3RocmVh ZF9uYW1lX2dldF9pbXBsKGEsIF9fZnVuY19fLCBfX0xJTkVfXykKKworc3RhdGljIHZvaWQKK21h bGxjdGxfdGhyZWFkX25hbWVfc2V0X2ltcGwoY29uc3QgY2hhciAqdGhyZWFkX25hbWUsIGNvbnN0 IGNoYXIgKmZ1bmMsCisgICAgaW50IGxpbmUpIHsKKwlleHBlY3RfZF9lcShtYWxsY3RsKCJ0aHJl YWQucHJvZi5uYW1lIiwgTlVMTCwgTlVMTCwKKwkgICAgKHZvaWQgKikmdGhyZWFkX25hbWUsIHNp emVvZih0aHJlYWRfbmFtZSkpLCAwLAorCSAgICAiJXMoKTolZDogVW5leHBlY3RlZCBtYWxsY3Rs IGZhaWx1cmUgd3JpdGluZyB0aHJlYWQucHJvZi5uYW1lIiwKKwkgICAgZnVuYywgbGluZSk7CisJ bWFsbGN0bF90aHJlYWRfbmFtZV9nZXRfaW1wbCh0aHJlYWRfbmFtZSwgZnVuYywgbGluZSk7Cit9 CisjZGVmaW5lIG1hbGxjdGxfdGhyZWFkX25hbWVfc2V0KGEpCQkJCQlcCisJbWFsbGN0bF90aHJl YWRfbmFtZV9zZXRfaW1wbChhLCBfX2Z1bmNfXywgX19MSU5FX18pCisKK1RFU1RfQkVHSU4odGVz dF9wcm9mX3RocmVhZF9uYW1lX3ZhbGlkYXRpb24pIHsKKwljb25zdCBjaGFyICp0aHJlYWRfbmFt ZTsKKworCXRlc3Rfc2tpcF9pZighY29uZmlnX3Byb2YpOworCXRlc3Rfc2tpcF9pZihvcHRfcHJv Zl9zeXNfdGhyZWFkX25hbWUpOworCisJbWFsbGN0bF90aHJlYWRfbmFtZV9nZXQoIiIpOworCW1h bGxjdGxfdGhyZWFkX25hbWVfc2V0KCJoaSB0aGVyZSIpOworCisJLyogTlVMTCBpbnB1dCBzaG91 bGRuJ3QgYmUgYWxsb3dlZC4gKi8KKwl0aHJlYWRfbmFtZSA9IE5VTEw7CisJZXhwZWN0X2RfZXEo bWFsbGN0bCgidGhyZWFkLnByb2YubmFtZSIsIE5VTEwsIE5VTEwsCisJICAgICh2b2lkICopJnRo cmVhZF9uYW1lLCBzaXplb2YodGhyZWFkX25hbWUpKSwgRUZBVUxULAorCSAgICAiVW5leHBlY3Rl ZCBtYWxsY3RsIHJlc3VsdCB3cml0aW5nIFwiJXNcIiB0byB0aHJlYWQucHJvZi5uYW1lIiwKKwkg ICAgdGhyZWFkX25hbWUpOworCisJLyogJ1xuJyBzaG91bGRuJ3QgYmUgYWxsb3dlZC4gKi8KKwl0 aHJlYWRfbmFtZSA9ICJoaVxudGhlcmUiOworCWV4cGVjdF9kX2VxKG1hbGxjdGwoInRocmVhZC5w cm9mLm5hbWUiLCBOVUxMLCBOVUxMLAorCSAgICAodm9pZCAqKSZ0aHJlYWRfbmFtZSwgc2l6ZW9m KHRocmVhZF9uYW1lKSksIEVGQVVMVCwKKwkgICAgIlVuZXhwZWN0ZWQgbWFsbGN0bCByZXN1bHQg d3JpdGluZyBcIiVzXCIgdG8gdGhyZWFkLnByb2YubmFtZSIsCisJICAgIHRocmVhZF9uYW1lKTsK KworCS8qIFNpbXVsdGFuZW91cyByZWFkL3dyaXRlIHNob3VsZG4ndCBiZSBhbGxvd2VkLiAqLwor CXsKKwkJY29uc3QgY2hhciAqdGhyZWFkX25hbWVfb2xkOworCQlzaXplX3Qgc3o7CisKKwkJc3og PSBzaXplb2YodGhyZWFkX25hbWVfb2xkKTsKKwkJZXhwZWN0X2RfZXEobWFsbGN0bCgidGhyZWFk LnByb2YubmFtZSIsCisJCSAgICAodm9pZCAqKSZ0aHJlYWRfbmFtZV9vbGQsICZzeiwgKHZvaWQg KikmdGhyZWFkX25hbWUsCisJCSAgICBzaXplb2YodGhyZWFkX25hbWUpKSwgRVBFUk0sCisJCSAg ICAiVW5leHBlY3RlZCBtYWxsY3RsIHJlc3VsdCB3cml0aW5nIFwiJXNcIiB0byAiCisJCSAgICAi dGhyZWFkLnByb2YubmFtZSIsIHRocmVhZF9uYW1lKTsKKwl9CisKKwltYWxsY3RsX3RocmVhZF9u YW1lX3NldCgiIik7Cit9CitURVNUX0VORAorCisjZGVmaW5lIE5USFJFQURTCTQKKyNkZWZpbmUg TlJFU0VUCQkyNQorc3RhdGljIHZvaWQgKgordGhkX3N0YXJ0KHZvaWQgKnZhcmcpIHsKKwl1bnNp Z25lZCB0aGRfaW5kID0gKih1bnNpZ25lZCAqKXZhcmc7CisJY2hhciB0aHJlYWRfbmFtZVsxNl0g PSAiIjsKKwl1bnNpZ25lZCBpOworCisJbWFsbG9jX3NucHJpbnRmKHRocmVhZF9uYW1lLCBzaXpl b2YodGhyZWFkX25hbWUpLCAidGhyZWFkICV1IiwgdGhkX2luZCk7CisKKwltYWxsY3RsX3RocmVh ZF9uYW1lX2dldCgiIik7CisJbWFsbGN0bF90aHJlYWRfbmFtZV9zZXQodGhyZWFkX25hbWUpOwor CisJZm9yIChpID0gMDsgaSA8IE5SRVNFVDsgaSsrKSB7CisJCWV4cGVjdF9kX2VxKG1hbGxjdGwo InByb2YucmVzZXQiLCBOVUxMLCBOVUxMLCBOVUxMLCAwKSwgMCwKKwkJICAgICJVbmV4cGVjdGVk IGVycm9yIHdoaWxlIHJlc2V0dGluZyBoZWFwIHByb2ZpbGUgZGF0YSIpOworCQltYWxsY3RsX3Ro cmVhZF9uYW1lX2dldCh0aHJlYWRfbmFtZSk7CisJfQorCisJbWFsbGN0bF90aHJlYWRfbmFtZV9z ZXQodGhyZWFkX25hbWUpOworCW1hbGxjdGxfdGhyZWFkX25hbWVfc2V0KCIiKTsKKworCXJldHVy biBOVUxMOworfQorCitURVNUX0JFR0lOKHRlc3RfcHJvZl90aHJlYWRfbmFtZV90aHJlYWRlZCkg eworCXRlc3Rfc2tpcF9pZighY29uZmlnX3Byb2YpOworCXRlc3Rfc2tpcF9pZihvcHRfcHJvZl9z eXNfdGhyZWFkX25hbWUpOworCisJdGhkX3QgdGhkc1tOVEhSRUFEU107CisJdW5zaWduZWQgdGhk X2FyZ3NbTlRIUkVBRFNdOworCXVuc2lnbmVkIGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTlRIUkVB RFM7IGkrKykgeworCQl0aGRfYXJnc1tpXSA9IGk7CisJCXRoZF9jcmVhdGUoJnRoZHNbaV0sIHRo ZF9zdGFydCwgKHZvaWQgKikmdGhkX2FyZ3NbaV0pOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgTlRI UkVBRFM7IGkrKykgeworCQl0aGRfam9pbih0aGRzW2ldLCBOVUxMKTsKKwl9Cit9CitURVNUX0VO RAorI3VuZGVmIE5USFJFQURTCisjdW5kZWYgTlJFU0VUCisKK2ludAorbWFpbih2b2lkKSB7CisJ cmV0dXJuIHRlc3QoCisJICAgIHRlc3RfcHJvZl90aHJlYWRfbmFtZV92YWxpZGF0aW9uLAorCSAg ICB0ZXN0X3Byb2ZfdGhyZWFkX25hbWVfdGhyZWFkZWQpOworfQoKZGlmZiAtLWdpdCBhLzM4OS1k cy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9wcm9mX3RocmVhZF9u YW1lLnNoIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0 L3Byb2ZfdGhyZWFkX25hbWUuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u Mjk4YzEwNQotLS0gL2Rldi9udWxsCisrKyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFs bG9jLTUuMy4wL3Rlc3QvdW5pdC9wcm9mX3RocmVhZF9uYW1lLnNoCkBAIC0wLDAgKzEsNSBAQAor IyEvYmluL3NoCisKK2lmIFsgIngke2VuYWJsZV9wcm9mfSIgPSAieDEiIF0gOyB0aGVuCisgIGV4 cG9ydCBNQUxMT0NfQ09ORj0icHJvZjp0cnVlLHByb2ZfYWN0aXZlOmZhbHNlIgorZmkKCmRpZmYg LS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQv cHNzZXQuYyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5p dC9wc3NldC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmZjcyMDEKLS0t IC9kZXYvbnVsbAorKysgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90 ZXN0L3VuaXQvcHNzZXQuYwpAQCAtMCwwICsxLDc0OCBAQAorI2luY2x1ZGUgInRlc3QvamVtYWxs b2NfdGVzdC5oIgorCisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvcHNzZXQuaCIKKworI2Rl ZmluZSBQQUdFU0xBQl9BRERSICgodm9pZCAqKSgxMjM0ICogSFVHRVBBR0UpKQorI2RlZmluZSBQ QUdFU0xBQl9BR0UgNTY3OAorCisjZGVmaW5lIEFMTE9DX0FSRU5BX0lORCAxMTEKKyNkZWZpbmUg QUxMT0NfRVNOIDIyMgorCitzdGF0aWMgdm9pZAorZWRhdGFfaW5pdF90ZXN0KGVkYXRhX3QgKmVk YXRhKSB7CisJbWVtc2V0KGVkYXRhLCAwLCBzaXplb2YoKmVkYXRhKSk7CisJZWRhdGFfYXJlbmFf aW5kX3NldChlZGF0YSwgQUxMT0NfQVJFTkFfSU5EKTsKKwllZGF0YV9lc25fc2V0KGVkYXRhLCBB TExPQ19FU04pOworfQorCitzdGF0aWMgdm9pZAordGVzdF9wc3NldF9mYWtlX3B1cmdlKGhwZGF0 YV90ICpwcykgeworCWhwZGF0YV9wdXJnZV9zdGF0ZV90IHB1cmdlX3N0YXRlOworCWhwZGF0YV9h bGxvY19hbGxvd2VkX3NldChwcywgZmFsc2UpOworCWhwZGF0YV9wdXJnZV9iZWdpbihwcywgJnB1 cmdlX3N0YXRlKTsKKwl2b2lkICphZGRyOworCXNpemVfdCBzaXplOworCXdoaWxlIChocGRhdGFf cHVyZ2VfbmV4dChwcywgJnB1cmdlX3N0YXRlLCAmYWRkciwgJnNpemUpKSB7CisJfQorCWhwZGF0 YV9wdXJnZV9lbmQocHMsICZwdXJnZV9zdGF0ZSk7CisJaHBkYXRhX2FsbG9jX2FsbG93ZWRfc2V0 KHBzLCB0cnVlKTsKK30KKworc3RhdGljIHZvaWQKK3Rlc3RfcHNzZXRfYWxsb2NfbmV3KHBzc2V0 X3QgKnBzc2V0LCBocGRhdGFfdCAqcHMsIGVkYXRhX3QgKnJfZWRhdGEsCisgICAgc2l6ZV90IHNp emUpIHsKKwlocGRhdGFfYXNzZXJ0X2VtcHR5KHBzKTsKKworCXRlc3RfcHNzZXRfZmFrZV9wdXJn ZShwcyk7CisKKwlwc3NldF9pbnNlcnQocHNzZXQsIHBzKTsKKwlwc3NldF91cGRhdGVfYmVnaW4o cHNzZXQsIHBzKTsKKworICAgICAgICB2b2lkICphZGRyID0gaHBkYXRhX3Jlc2VydmVfYWxsb2Mo cHMsIHNpemUpOworICAgICAgICBlZGF0YV9pbml0KHJfZWRhdGEsIGVkYXRhX2FyZW5hX2luZF9n ZXQocl9lZGF0YSksIGFkZHIsIHNpemUsCisJICAgIC8qIHNsYWIgKi8gZmFsc2UsIFNDX05TSVpF UywgLyogc24gKi8gMCwgZXh0ZW50X3N0YXRlX2FjdGl2ZSwKKyAgICAgICAgICAgIC8qIHplcm9l ZCAqLyBmYWxzZSwgLyogY29tbWl0dGVkICovIHRydWUsIEVYVEVOVF9QQUlfSFBBLAorICAgICAg ICAgICAgRVhURU5UX05PVF9IRUFEKTsKKyAgICAgICAgZWRhdGFfcHNfc2V0KHJfZWRhdGEsIHBz KTsKKwlwc3NldF91cGRhdGVfZW5kKHBzc2V0LCBwcyk7Cit9CisKK3N0YXRpYyBib29sCit0ZXN0 X3Bzc2V0X2FsbG9jX3JldXNlKHBzc2V0X3QgKnBzc2V0LCBlZGF0YV90ICpyX2VkYXRhLCBzaXpl X3Qgc2l6ZSkgeworCWhwZGF0YV90ICpwcyA9IHBzc2V0X3BpY2tfYWxsb2MocHNzZXQsIHNpemUp OworCWlmIChwcyA9PSBOVUxMKSB7CisJCXJldHVybiB0cnVlOworCX0KKwlwc3NldF91cGRhdGVf YmVnaW4ocHNzZXQsIHBzKTsKKwl2b2lkICphZGRyID0gaHBkYXRhX3Jlc2VydmVfYWxsb2MocHMs IHNpemUpOworCWVkYXRhX2luaXQocl9lZGF0YSwgZWRhdGFfYXJlbmFfaW5kX2dldChyX2VkYXRh KSwgYWRkciwgc2l6ZSwKKwkgICAgLyogc2xhYiAqLyBmYWxzZSwgU0NfTlNJWkVTLCAvKiBzbiAq LyAwLCBleHRlbnRfc3RhdGVfYWN0aXZlLAorCSAgICAvKiB6ZXJvZWQgKi8gZmFsc2UsIC8qIGNv bW1pdHRlZCAqLyB0cnVlLCBFWFRFTlRfUEFJX0hQQSwKKwkgICAgRVhURU5UX05PVF9IRUFEKTsK KwllZGF0YV9wc19zZXQocl9lZGF0YSwgcHMpOworCXBzc2V0X3VwZGF0ZV9lbmQocHNzZXQsIHBz KTsKKwlyZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBocGRhdGFfdCAqCit0ZXN0X3Bzc2V0X2Rh bGxvYyhwc3NldF90ICpwc3NldCwgZWRhdGFfdCAqZWRhdGEpIHsKKwlocGRhdGFfdCAqcHMgPSBl ZGF0YV9wc19nZXQoZWRhdGEpOworCXBzc2V0X3VwZGF0ZV9iZWdpbihwc3NldCwgcHMpOworCWhw ZGF0YV91bnJlc2VydmUocHMsIGVkYXRhX2FkZHJfZ2V0KGVkYXRhKSwgZWRhdGFfc2l6ZV9nZXQo ZWRhdGEpKTsKKwlwc3NldF91cGRhdGVfZW5kKHBzc2V0LCBwcyk7CisJaWYgKGhwZGF0YV9lbXB0 eShwcykpIHsKKwkJcHNzZXRfcmVtb3ZlKHBzc2V0LCBwcyk7CisJCXJldHVybiBwczsKKwl9IGVs c2UgeworCQlyZXR1cm4gTlVMTDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitlZGF0YV9leHBlY3Qo ZWRhdGFfdCAqZWRhdGEsIHNpemVfdCBwYWdlX29mZnNldCwgc2l6ZV90IHBhZ2VfY250KSB7CisJ LyoKKwkgKiBOb3RlIHRoYXQgYWxsb2NhdGlvbnMgc2hvdWxkIGdldCB0aGUgYXJlbmEgaW5kIG9m IHRoZWlyIGhvbWUKKwkgKiBhcmVuYSwgKm5vdCogdGhlIGFyZW5hIGluZCBvZiB0aGUgcGFnZXNs YWIgYWxsb2NhdG9yLgorCSAqLworCWV4cGVjdF91X2VxKEFMTE9DX0FSRU5BX0lORCwgZWRhdGFf YXJlbmFfaW5kX2dldChlZGF0YSksCisJICAgICJBcmVuYSBpbmQgY2hhbmdlZCIpOworCWV4cGVj dF9wdHJfZXEoCisJICAgICh2b2lkICopKCh1aW50cHRyX3QpUEFHRVNMQUJfQUREUiArIChwYWdl X29mZnNldCA8PCBMR19QQUdFKSksCisJICAgIGVkYXRhX2FkZHJfZ2V0KGVkYXRhKSwgIkRpZG4n dCBhbGxvY2F0ZSBpbiBvcmRlciIpOworCWV4cGVjdF96dV9lcShwYWdlX2NudCA8PCBMR19QQUdF LCBlZGF0YV9zaXplX2dldChlZGF0YSksICIiKTsKKwlleHBlY3RfZmFsc2UoZWRhdGFfc2xhYl9n ZXQoZWRhdGEpLCAiIik7CisJZXhwZWN0X3VfZXEoU0NfTlNJWkVTLCBlZGF0YV9zemluZF9nZXRf bWF5YmVfaW52YWxpZChlZGF0YSksCisJICAgICIiKTsKKwlleHBlY3RfdTY0X2VxKDAsIGVkYXRh X3NuX2dldChlZGF0YSksICIiKTsKKwlleHBlY3RfZF9lcShlZGF0YV9zdGF0ZV9nZXQoZWRhdGEp LCBleHRlbnRfc3RhdGVfYWN0aXZlLCAiIik7CisJZXhwZWN0X2ZhbHNlKGVkYXRhX3plcm9lZF9n ZXQoZWRhdGEpLCAiIik7CisJZXhwZWN0X3RydWUoZWRhdGFfY29tbWl0dGVkX2dldChlZGF0YSks ICIiKTsKKwlleHBlY3RfZF9lcShFWFRFTlRfUEFJX0hQQSwgZWRhdGFfcGFpX2dldChlZGF0YSks ICIiKTsKKwlleHBlY3RfZmFsc2UoZWRhdGFfaXNfaGVhZF9nZXQoZWRhdGEpLCAiIik7Cit9CisK K1RFU1RfQkVHSU4odGVzdF9lbXB0eSkgeworCWJvb2wgZXJyOworCWhwZGF0YV90IHBhZ2VzbGFi OworCWhwZGF0YV9pbml0KCZwYWdlc2xhYiwgUEFHRVNMQUJfQUREUiwgUEFHRVNMQUJfQUdFKTsK KworCWVkYXRhX3QgYWxsb2M7CisJZWRhdGFfaW5pdF90ZXN0KCZhbGxvYyk7CisKKwlwc3NldF90 IHBzc2V0OworCXBzc2V0X2luaXQoJnBzc2V0KTsKKworCS8qIEVtcHR5IHBzc2V0IHNob3VsZCBy ZXR1cm4gZmFpbCBhbGxvY2F0aW9ucy4gKi8KKwllcnIgPSB0ZXN0X3Bzc2V0X2FsbG9jX3JldXNl KCZwc3NldCwgJmFsbG9jLCBQQUdFKTsKKwlleHBlY3RfdHJ1ZShlcnIsICJFbXB0eSBwc3NldCBz dWNjZWVkZWQgaW4gYW4gYWxsb2NhdGlvbi4iKTsKK30KK1RFU1RfRU5ECisKK1RFU1RfQkVHSU4o dGVzdF9maWxsKSB7CisJYm9vbCBlcnI7CisKKwlocGRhdGFfdCBwYWdlc2xhYjsKKwlocGRhdGFf aW5pdCgmcGFnZXNsYWIsIFBBR0VTTEFCX0FERFIsIFBBR0VTTEFCX0FHRSk7CisKKwllZGF0YV90 IGFsbG9jW0hVR0VQQUdFX1BBR0VTXTsKKworCXBzc2V0X3QgcHNzZXQ7CisJcHNzZXRfaW5pdCgm cHNzZXQpOworCisJZWRhdGFfaW5pdF90ZXN0KCZhbGxvY1swXSk7CisJdGVzdF9wc3NldF9hbGxv Y19uZXcoJnBzc2V0LCAmcGFnZXNsYWIsICZhbGxvY1swXSwgUEFHRSk7CisJZm9yIChzaXplX3Qg aSA9IDE7IGkgPCBIVUdFUEFHRV9QQUdFUzsgaSsrKSB7CisJCWVkYXRhX2luaXRfdGVzdCgmYWxs b2NbaV0pOworCQllcnIgPSB0ZXN0X3Bzc2V0X2FsbG9jX3JldXNlKCZwc3NldCwgJmFsbG9jW2ld LCBQQUdFKTsKKwkJZXhwZWN0X2ZhbHNlKGVyciwgIk5vbmVtcHR5IHBzc2V0IGZhaWxlZCBwYWdl IGFsbG9jYXRpb24uIik7CisJfQorCisJZm9yIChzaXplX3QgaSA9IDA7IGkgPCBIVUdFUEFHRV9Q QUdFUzsgaSsrKSB7CisJCWVkYXRhX3QgKmVkYXRhID0gJmFsbG9jW2ldOworCQllZGF0YV9leHBl Y3QoZWRhdGEsIGksIDEpOworCX0KKworCS8qIFRoZSBwYWdlc2xhYiwgYW5kIHRodXMgcHNzZXQs IHNob3VsZCBub3cgaGF2ZSBubyBhbGxvY2F0aW9ucy4gKi8KKwllZGF0YV90IGV4dHJhX2FsbG9j OworCWVkYXRhX2luaXRfdGVzdCgmZXh0cmFfYWxsb2MpOworCWVyciA9IHRlc3RfcHNzZXRfYWxs b2NfcmV1c2UoJnBzc2V0LCAmZXh0cmFfYWxsb2MsIFBBR0UpOworCWV4cGVjdF90cnVlKGVyciwg IkFsbG9jIHN1Y2NlZWRlZCBldmVuIHRob3VnaCBwc3NldCBzaG91bGQgYmUgZW1wdHkiKTsKK30K K1RFU1RfRU5ECisKK1RFU1RfQkVHSU4odGVzdF9yZXVzZSkgeworCWJvb2wgZXJyOworCWhwZGF0 YV90ICpwczsKKworCWhwZGF0YV90IHBhZ2VzbGFiOworCWhwZGF0YV9pbml0KCZwYWdlc2xhYiwg UEFHRVNMQUJfQUREUiwgUEFHRVNMQUJfQUdFKTsKKworCWVkYXRhX3QgYWxsb2NbSFVHRVBBR0Vf UEFHRVNdOworCisJcHNzZXRfdCBwc3NldDsKKwlwc3NldF9pbml0KCZwc3NldCk7CisKKwllZGF0 YV9pbml0X3Rlc3QoJmFsbG9jWzBdKTsKKwl0ZXN0X3Bzc2V0X2FsbG9jX25ldygmcHNzZXQsICZw YWdlc2xhYiwgJmFsbG9jWzBdLCBQQUdFKTsKKwlmb3IgKHNpemVfdCBpID0gMTsgaSA8IEhVR0VQ QUdFX1BBR0VTOyBpKyspIHsKKwkJZWRhdGFfaW5pdF90ZXN0KCZhbGxvY1tpXSk7CisJCWVyciA9 IHRlc3RfcHNzZXRfYWxsb2NfcmV1c2UoJnBzc2V0LCAmYWxsb2NbaV0sIFBBR0UpOworCQlleHBl Y3RfZmFsc2UoZXJyLCAiTm9uZW1wdHkgcHNzZXQgZmFpbGVkIHBhZ2UgYWxsb2NhdGlvbi4iKTsK Kwl9CisKKwkvKiBGcmVlIG9kZCBpbmRpY2VzLiAqLworCWZvciAoc2l6ZV90IGkgPSAwOyBpIDwg SFVHRVBBR0VfUEFHRVM7IGkgKyspIHsKKwkJaWYgKGkgJSAyID09IDApIHsKKwkJCWNvbnRpbnVl OworCQl9CisJCXBzID0gdGVzdF9wc3NldF9kYWxsb2MoJnBzc2V0LCAmYWxsb2NbaV0pOworCQll eHBlY3RfcHRyX251bGwocHMsICJOb25lbXB0eSBwYWdlc2xhYiBldmljdGVkIik7CisJfQorCS8q IFJlYWxsb2MgaW50byB0aGVtLiAqLworCWZvciAoc2l6ZV90IGkgPSAwOyBpIDwgSFVHRVBBR0Vf UEFHRVM7IGkrKykgeworCQlpZiAoaSAlIDIgPT0gMCkgeworCQkJY29udGludWU7CisJCX0KKwkJ ZXJyID0gdGVzdF9wc3NldF9hbGxvY19yZXVzZSgmcHNzZXQsICZhbGxvY1tpXSwgUEFHRSk7CisJ CWV4cGVjdF9mYWxzZShlcnIsICJOb25lbXB0eSBwc3NldCBmYWlsZWQgcGFnZSBhbGxvY2F0aW9u LiIpOworCQllZGF0YV9leHBlY3QoJmFsbG9jW2ldLCBpLCAxKTsKKwl9CisJLyogTm93LCBmcmVl IHRoZSBwYWdlcyBhdCBpbmRpY2VzIDAgb3IgMSBtb2QgMi4gKi8KKwlmb3IgKHNpemVfdCBpID0g MDsgaSA8IEhVR0VQQUdFX1BBR0VTOyBpKyspIHsKKwkJaWYgKGkgJSA0ID4gMSkgeworCQkJY29u dGludWU7CisJCX0KKwkJcHMgPSB0ZXN0X3Bzc2V0X2RhbGxvYygmcHNzZXQsICZhbGxvY1tpXSk7 CisJCWV4cGVjdF9wdHJfbnVsbChwcywgIk5vbmVtcHR5IHBhZ2VzbGFiIGV2aWN0ZWQiKTsKKwl9 CisJLyogQW5kIHJlYWxsb2MgMi1wYWdlIGFsbG9jYXRpb25zIGludG8gdGhlbS4gKi8KKwlmb3Ig KHNpemVfdCBpID0gMDsgaSA8IEhVR0VQQUdFX1BBR0VTOyBpKyspIHsKKwkJaWYgKGkgJSA0ICE9 IDApIHsKKwkJCWNvbnRpbnVlOworCQl9CisJCWVyciA9IHRlc3RfcHNzZXRfYWxsb2NfcmV1c2Uo JnBzc2V0LCAmYWxsb2NbaV0sIDIgKiBQQUdFKTsKKwkJZXhwZWN0X2ZhbHNlKGVyciwgIk5vbmVt cHR5IHBzc2V0IGZhaWxlZCBwYWdlIGFsbG9jYXRpb24uIik7CisJCWVkYXRhX2V4cGVjdCgmYWxs b2NbaV0sIGksIDIpOworCX0KKwkvKiBGcmVlIGFsbCB0aGUgMi1wYWdlIGFsbG9jYXRpb25zLiAq LworCWZvciAoc2l6ZV90IGkgPSAwOyBpIDwgSFVHRVBBR0VfUEFHRVM7IGkrKykgeworCQlpZiAo aSAlIDQgIT0gMCkgeworCQkJY29udGludWU7CisJCX0KKwkJcHMgPSB0ZXN0X3Bzc2V0X2RhbGxv YygmcHNzZXQsICZhbGxvY1tpXSk7CisJCWV4cGVjdF9wdHJfbnVsbChwcywgIk5vbmVtcHR5IHBh Z2VzbGFiIGV2aWN0ZWQiKTsKKwl9CisJLyoKKwkgKiBGcmVlIHVwIGEgMS1wYWdlIGhvbGUgbmV4 dCB0byBhIDItcGFnZSBob2xlLCBidXQgc29tZXdoZXJlIGluIHRoZQorCSAqIG1pZGRsZSBvZiB0 aGUgcGFnZXNsYWIuICBJbmRleCAxMSBzaG91bGQgYmUgcmlnaHQgYmVmb3JlIHN1Y2ggYSBob2xl CisJICogKHNpbmNlIDEyICUgNCA9PSAwKS4KKwkgKi8KKwlzaXplX3QgaW5kZXhfb2ZfMyA9IDEx OworCXBzID0gdGVzdF9wc3NldF9kYWxsb2MoJnBzc2V0LCAmYWxsb2NbaW5kZXhfb2ZfM10pOwor CWV4cGVjdF9wdHJfbnVsbChwcywgIk5vbmVtcHR5IHBhZ2VzbGFiIGV2aWN0ZWQiKTsKKwllcnIg PSB0ZXN0X3Bzc2V0X2FsbG9jX3JldXNlKCZwc3NldCwgJmFsbG9jW2luZGV4X29mXzNdLCAzICog UEFHRSk7CisJZXhwZWN0X2ZhbHNlKGVyciwgIlNob3VsZCBoYXZlIGJlZW4gYWJsZSB0byBmaW5k IGFsbG9jLiIpOworCWVkYXRhX2V4cGVjdCgmYWxsb2NbaW5kZXhfb2ZfM10sIGluZGV4X29mXzMs IDMpOworCisJLyoKKwkgKiBGcmVlIHVwIGEgNC1wYWdlIGhvbGUgYXQgdGhlIGVuZC4gIFJlY2Fs bCB0aGF0IHRoZSBwYWdlcyBhdCBvZmZzZXRzIDAKKwkgKiBhbmQgMSBtb2QgNCB3ZXJlIGZyZWVk IGFib3ZlLCBzbyB3ZSBqdXN0IGhhdmUgdG8gZnJlZSB0aGUgbGFzdAorCSAqIGFsbG9jYXRpb25z LgorCSAqLworCXBzID0gdGVzdF9wc3NldF9kYWxsb2MoJnBzc2V0LCAmYWxsb2NbSFVHRVBBR0Vf UEFHRVMgLSAxXSk7CisJZXhwZWN0X3B0cl9udWxsKHBzLCAiTm9uZW1wdHkgcGFnZXNsYWIgZXZp Y3RlZCIpOworCXBzID0gdGVzdF9wc3NldF9kYWxsb2MoJnBzc2V0LCAmYWxsb2NbSFVHRVBBR0Vf UEFHRVMgLSAyXSk7CisJZXhwZWN0X3B0cl9udWxsKHBzLCAiTm9uZW1wdHkgcGFnZXNsYWIgZXZp Y3RlZCIpOworCisJLyogTWFrZSBzdXJlIHdlIGNhbiBzYXRpc2Z5IGFuIGFsbG9jYXRpb24gYXQg dGhlIHZlcnkgZW5kIG9mIGEgc2xhYi4gKi8KKwlzaXplX3QgaW5kZXhfb2ZfNCA9IEhVR0VQQUdF X1BBR0VTIC0gNDsKKwllcnIgPSB0ZXN0X3Bzc2V0X2FsbG9jX3JldXNlKCZwc3NldCwgJmFsbG9j W2luZGV4X29mXzRdLCA0ICogUEFHRSk7CisJZXhwZWN0X2ZhbHNlKGVyciwgIlNob3VsZCBoYXZl IGJlZW4gYWJsZSB0byBmaW5kIGFsbG9jLiIpOworCWVkYXRhX2V4cGVjdCgmYWxsb2NbaW5kZXhf b2ZfNF0sIGluZGV4X29mXzQsIDQpOworfQorVEVTVF9FTkQKKworVEVTVF9CRUdJTih0ZXN0X2V2 aWN0KSB7CisJYm9vbCBlcnI7CisJaHBkYXRhX3QgKnBzOworCisJaHBkYXRhX3QgcGFnZXNsYWI7 CisJaHBkYXRhX2luaXQoJnBhZ2VzbGFiLCBQQUdFU0xBQl9BRERSLCBQQUdFU0xBQl9BR0UpOwor CisJZWRhdGFfdCBhbGxvY1tIVUdFUEFHRV9QQUdFU107CisKKwlwc3NldF90IHBzc2V0OworCXBz c2V0X2luaXQoJnBzc2V0KTsKKworCS8qIEFsbG9jIHRoZSB3aG9sZSBzbGFiLiAqLworCWVkYXRh X2luaXRfdGVzdCgmYWxsb2NbMF0pOworCXRlc3RfcHNzZXRfYWxsb2NfbmV3KCZwc3NldCwgJnBh Z2VzbGFiLCAmYWxsb2NbMF0sIFBBR0UpOworCWZvciAoc2l6ZV90IGkgPSAxOyBpIDwgSFVHRVBB R0VfUEFHRVM7IGkrKykgeworCQllZGF0YV9pbml0X3Rlc3QoJmFsbG9jW2ldKTsKKwkJZXJyID0g dGVzdF9wc3NldF9hbGxvY19yZXVzZSgmcHNzZXQsICZhbGxvY1tpXSwgUEFHRSk7CisJCWV4cGVj dF9mYWxzZShlcnIsICJVbnhwZWN0ZWQgYWxsb2NhdGlvbiBmYWlsdXJlIik7CisJfQorCisJLyog RGVhbGxvYyB0aGUgd2hvbGUgc2xhYiwgZ29pbmcgZm9yd2FyZHMuICovCisJZm9yIChzaXplX3Qg aSA9IDA7IGkgPCBIVUdFUEFHRV9QQUdFUyAtIDE7IGkrKykgeworCQlwcyA9IHRlc3RfcHNzZXRf ZGFsbG9jKCZwc3NldCwgJmFsbG9jW2ldKTsKKwkJZXhwZWN0X3B0cl9udWxsKHBzLCAiTm9uZW1w dHkgcGFnZXNsYWIgZXZpY3RlZCIpOworCX0KKwlwcyA9IHRlc3RfcHNzZXRfZGFsbG9jKCZwc3Nl dCwgJmFsbG9jW0hVR0VQQUdFX1BBR0VTIC0gMV0pOworCWV4cGVjdF9wdHJfZXEoJnBhZ2VzbGFi LCBwcywgIkVtcHR5IHBhZ2VzbGFiIG5vdCBldmljdGVkLiIpOworCisJZXJyID0gdGVzdF9wc3Nl dF9hbGxvY19yZXVzZSgmcHNzZXQsICZhbGxvY1swXSwgUEFHRSk7CisJZXhwZWN0X3RydWUoZXJy LCAicHNzZXQgc2hvdWxkIGJlIGVtcHR5LiIpOworfQorVEVTVF9FTkQKKworVEVTVF9CRUdJTih0 ZXN0X211bHRpX3BhZ2VzbGFiKSB7CisJYm9vbCBlcnI7CisJaHBkYXRhX3QgKnBzOworCisJaHBk YXRhX3QgcGFnZXNsYWJbMl07CisJaHBkYXRhX2luaXQoJnBhZ2VzbGFiWzBdLCBQQUdFU0xBQl9B RERSLCBQQUdFU0xBQl9BR0UpOworCWhwZGF0YV9pbml0KCZwYWdlc2xhYlsxXSwKKwkgICAgKHZv aWQgKikoKHVpbnRwdHJfdClQQUdFU0xBQl9BRERSICsgSFVHRVBBR0UpLAorCSAgICBQQUdFU0xB Ql9BR0UgKyAxKTsKKworCWVkYXRhX3QgYWxsb2NbMl1bSFVHRVBBR0VfUEFHRVNdOworCisJcHNz ZXRfdCBwc3NldDsKKwlwc3NldF9pbml0KCZwc3NldCk7CisKKwkvKiBJbnNlcnQgYm90aCBzbGFi cy4gKi8KKwllZGF0YV9pbml0X3Rlc3QoJmFsbG9jWzBdWzBdKTsKKwl0ZXN0X3Bzc2V0X2FsbG9j X25ldygmcHNzZXQsICZwYWdlc2xhYlswXSwgJmFsbG9jWzBdWzBdLCBQQUdFKTsKKwllZGF0YV9p bml0X3Rlc3QoJmFsbG9jWzFdWzBdKTsKKwl0ZXN0X3Bzc2V0X2FsbG9jX25ldygmcHNzZXQsICZw YWdlc2xhYlsxXSwgJmFsbG9jWzFdWzBdLCBQQUdFKTsKKworCS8qIEZpbGwgdGhlbSBib3RoIHVw OyBtYWtlIHN1cmUgd2UgZG8gc28gaW4gZmlyc3QtZml0IG9yZGVyLiAqLworCWZvciAoc2l6ZV90 IGkgPSAwOyBpIDwgMjsgaSsrKSB7CisJCWZvciAoc2l6ZV90IGogPSAxOyBqIDwgSFVHRVBBR0Vf UEFHRVM7IGorKykgeworCQkJZWRhdGFfaW5pdF90ZXN0KCZhbGxvY1tpXVtqXSk7CisJCQllcnIg PSB0ZXN0X3Bzc2V0X2FsbG9jX3JldXNlKCZwc3NldCwgJmFsbG9jW2ldW2pdLCBQQUdFKTsKKwkJ CWV4cGVjdF9mYWxzZShlcnIsCisJCQkgICAgIk5vbmVtcHR5IHBzc2V0IGZhaWxlZCBwYWdlIGFs bG9jYXRpb24uIik7CisJCQlhc3NlcnRfcHRyX2VxKCZwYWdlc2xhYltpXSwgZWRhdGFfcHNfZ2V0 KCZhbGxvY1tpXVtqXSksCisJCQkgICAgIkRpZG4ndCBwaWNrIHBhZ2VzbGFicyBpbiBmaXJzdC1m aXQiKTsKKwkJfQorCX0KKworCS8qCisJICogRnJlZSB1cCBhIDItcGFnZSBob2xlIGluIHRoZSBl YXJsaWVyIHNsYWIsIGFuZCBhIDEtcGFnZSBvbmUgaW4gdGhlCisJICogbGF0ZXIgb25lLiAgV2Ug c2hvdWxkIHN0aWxsIHBpY2sgdGhlIGxhdGVyIG9uZS4KKwkgKi8KKwlwcyA9IHRlc3RfcHNzZXRf ZGFsbG9jKCZwc3NldCwgJmFsbG9jWzBdWzBdKTsKKwlleHBlY3RfcHRyX251bGwocHMsICJVbmV4 cGVjdGVkIGV2aWN0aW9uIik7CisJcHMgPSB0ZXN0X3Bzc2V0X2RhbGxvYygmcHNzZXQsICZhbGxv Y1swXVsxXSk7CisJZXhwZWN0X3B0cl9udWxsKHBzLCAiVW5leHBlY3RlZCBldmljdGlvbiIpOwor CXBzID0gdGVzdF9wc3NldF9kYWxsb2MoJnBzc2V0LCAmYWxsb2NbMV1bMF0pOworCWV4cGVjdF9w dHJfbnVsbChwcywgIlVuZXhwZWN0ZWQgZXZpY3Rpb24iKTsKKwllcnIgPSB0ZXN0X3Bzc2V0X2Fs bG9jX3JldXNlKCZwc3NldCwgJmFsbG9jWzBdWzBdLCBQQUdFKTsKKwlleHBlY3RfcHRyX2VxKCZw YWdlc2xhYlsxXSwgZWRhdGFfcHNfZ2V0KCZhbGxvY1swXVswXSksCisJICAgICJTaG91bGQgaGF2 ZSBwaWNrZWQgdGhlIGZ1bGxlciBwYWdlc2xhYiIpOworCisJLyoKKwkgKiBOb3cgYm90aCBzbGFi cyBoYXZlIDEtcGFnZSBob2xlcy4gRnJlZSB1cCBhIHNlY29uZCBvbmUgaW4gdGhlIGxhdGVyCisJ ICogc2xhYi4KKwkgKi8KKwlwcyA9IHRlc3RfcHNzZXRfZGFsbG9jKCZwc3NldCwgJmFsbG9jWzFd WzFdKTsKKwlleHBlY3RfcHRyX251bGwocHMsICJVbmV4cGVjdGVkIGV2aWN0aW9uIik7CisKKwkv KgorCSAqIFdlIHNob3VsZCBiZSBhYmxlIHRvIGFsbG9jYXRlIGEgMi1wYWdlIG9iamVjdCwgZXZl biB0aG91Z2ggYW4gZWFybGllcgorCSAqIHNpemUgY2xhc3MgaXMgbm9uZW1wdHkuCisJICovCisJ ZXJyID0gdGVzdF9wc3NldF9hbGxvY19yZXVzZSgmcHNzZXQsICZhbGxvY1sxXVswXSwgMiAqIFBB R0UpOworCWV4cGVjdF9mYWxzZShlcnIsICJBbGxvY2F0aW9uIHNob3VsZCBoYXZlIHN1Y2NlZWRl ZCIpOworfQorVEVTVF9FTkQKKworc3RhdGljIHZvaWQKK3N0YXRzX2V4cGVjdF9lbXB0eShwc3Nl dF9iaW5fc3RhdHNfdCAqc3RhdHMpIHsKKwlhc3NlcnRfenVfZXEoMCwgc3RhdHMtPm5wYWdlc2xh YnMsCisJICAgICJTdXBwb3NlZGx5IGVtcHR5IGJpbiBoYWQgcG9zaXRpdmUgbnBhZ2VzbGFicyIp OworCWV4cGVjdF96dV9lcSgwLCBzdGF0cy0+bmFjdGl2ZSwgIlVuZXhwZWN0ZWQgbm9uZW1wdHkg YmluIgorCSAgICAiU3VwcG9zZWRseSBlbXB0eSBiaW4gaGFkIHBvc2l0aXZlIG5hY3RpdmUiKTsK K30KKworc3RhdGljIHZvaWQKK3N0YXRzX2V4cGVjdChwc3NldF90ICpwc3NldCwgc2l6ZV90IG5h Y3RpdmUpIHsKKwlpZiAobmFjdGl2ZSA9PSBIVUdFUEFHRV9QQUdFUykgeworCQlleHBlY3RfenVf ZXEoMSwgcHNzZXQtPnN0YXRzLmZ1bGxfc2xhYnNbMF0ubnBhZ2VzbGFicywKKwkJICAgICJFeHBl Y3RlZCBhIGZ1bGwgc2xhYiIpOworCQlleHBlY3RfenVfZXEoSFVHRVBBR0VfUEFHRVMsCisJCSAg ICBwc3NldC0+c3RhdHMuZnVsbF9zbGFic1swXS5uYWN0aXZlLAorCQkgICAgIlNob3VsZCBoYXZl IGV4YWN0bHkgZmlsbGVkIHRoZSBiaW4iKTsKKwl9IGVsc2UgeworCQlzdGF0c19leHBlY3RfZW1w dHkoJnBzc2V0LT5zdGF0cy5mdWxsX3NsYWJzWzBdKTsKKwl9CisJc2l6ZV90IG5pbmFjdGl2ZSA9 IEhVR0VQQUdFX1BBR0VTIC0gbmFjdGl2ZTsKKwlwc3ppbmRfdCBub25lbXB0eV9waW5kID0gUFNT RVRfTlBTSVpFUzsKKwlpZiAobmluYWN0aXZlICE9IDAgJiYgbmluYWN0aXZlIDwgSFVHRVBBR0Vf UEFHRVMpIHsKKwkJbm9uZW1wdHlfcGluZCA9IHN6X3BzejJpbmQoc3pfcHN6X3F1YW50aXplX2Zs b29yKAorCQkgICAgbmluYWN0aXZlIDw8IExHX1BBR0UpKTsKKwl9CisJZm9yIChwc3ppbmRfdCBp ID0gMDsgaSA8IFBTU0VUX05QU0laRVM7IGkrKykgeworCQlpZiAoaSA9PSBub25lbXB0eV9waW5k KSB7CisJCQlhc3NlcnRfenVfZXEoMSwKKwkJCSAgICBwc3NldC0+c3RhdHMubm9uZnVsbF9zbGFi c1tpXVswXS5ucGFnZXNsYWJzLAorCQkJICAgICJTaG91bGQgaGF2ZSBmb3VuZCBhIHNsYWIiKTsK KwkJCWV4cGVjdF96dV9lcShuYWN0aXZlLAorCQkJICAgIHBzc2V0LT5zdGF0cy5ub25mdWxsX3Ns YWJzW2ldWzBdLm5hY3RpdmUsCisJCQkgICAgIk1pc21hdGNoIGluIGFjdGl2ZSBwYWdlcyIpOwor CQl9IGVsc2UgeworCQkJc3RhdHNfZXhwZWN0X2VtcHR5KCZwc3NldC0+c3RhdHMubm9uZnVsbF9z bGFic1tpXVswXSk7CisJCX0KKwl9CisJZXhwZWN0X3p1X2VxKG5hY3RpdmUsIHBzc2V0X25hY3Rp dmUocHNzZXQpLCAiIik7Cit9CisKK1RFU1RfQkVHSU4odGVzdF9zdGF0cykgeworCWJvb2wgZXJy OworCisJaHBkYXRhX3QgcGFnZXNsYWI7CisJaHBkYXRhX2luaXQoJnBhZ2VzbGFiLCBQQUdFU0xB Ql9BRERSLCBQQUdFU0xBQl9BR0UpOworCisJZWRhdGFfdCBhbGxvY1tIVUdFUEFHRV9QQUdFU107 CisKKwlwc3NldF90IHBzc2V0OworCXBzc2V0X2luaXQoJnBzc2V0KTsKKwlzdGF0c19leHBlY3Qo JnBzc2V0LCAwKTsKKworCWVkYXRhX2luaXRfdGVzdCgmYWxsb2NbMF0pOworCXRlc3RfcHNzZXRf YWxsb2NfbmV3KCZwc3NldCwgJnBhZ2VzbGFiLCAmYWxsb2NbMF0sIFBBR0UpOworCWZvciAoc2l6 ZV90IGkgPSAxOyBpIDwgSFVHRVBBR0VfUEFHRVM7IGkrKykgeworCQlzdGF0c19leHBlY3QoJnBz c2V0LCBpKTsKKwkJZWRhdGFfaW5pdF90ZXN0KCZhbGxvY1tpXSk7CisJCWVyciA9IHRlc3RfcHNz ZXRfYWxsb2NfcmV1c2UoJnBzc2V0LCAmYWxsb2NbaV0sIFBBR0UpOworCQlleHBlY3RfZmFsc2Uo ZXJyLCAiTm9uZW1wdHkgcHNzZXQgZmFpbGVkIHBhZ2UgYWxsb2NhdGlvbi4iKTsKKwl9CisJc3Rh dHNfZXhwZWN0KCZwc3NldCwgSFVHRVBBR0VfUEFHRVMpOworCWhwZGF0YV90ICpwczsKKwlmb3Ig KHNzaXplX3QgaSA9IEhVR0VQQUdFX1BBR0VTIC0gMTsgaSA+PSAwOyBpLS0pIHsKKwkJcHMgPSB0 ZXN0X3Bzc2V0X2RhbGxvYygmcHNzZXQsICZhbGxvY1tpXSk7CisJCWV4cGVjdF90cnVlKChwcyA9 PSBOVUxMKSA9PSAoaSAhPSAwKSwKKwkJICAgICJ0ZXN0X3Bzc2V0X2RhbGxvYyBzaG91bGQgb25s eSBldmljdCBhIHNsYWIgb24gdGhlIGxhc3QgIgorCQkgICAgImZyZWUiKTsKKwkJc3RhdHNfZXhw ZWN0KCZwc3NldCwgaSk7CisJfQorCisJdGVzdF9wc3NldF9hbGxvY19uZXcoJnBzc2V0LCAmcGFn ZXNsYWIsICZhbGxvY1swXSwgUEFHRSk7CisJc3RhdHNfZXhwZWN0KCZwc3NldCwgMSk7CisJcHNz ZXRfdXBkYXRlX2JlZ2luKCZwc3NldCwgJnBhZ2VzbGFiKTsKKwlzdGF0c19leHBlY3QoJnBzc2V0 LCAwKTsKKwlwc3NldF91cGRhdGVfZW5kKCZwc3NldCwgJnBhZ2VzbGFiKTsKKwlzdGF0c19leHBl Y3QoJnBzc2V0LCAxKTsKK30KK1RFU1RfRU5ECisKKy8qCisgKiBGaWxscyBpbiBhbmQgaW5zZXJ0 cyB0d28gcGFnZXNsYWJzLCB3aXRoIHRoZSBmaXJzdCBiZXR0ZXIgdGhhbiB0aGUgc2Vjb25kLAor ICogYW5kIGVhY2ggZnVsbHkgYWxsb2NhdGVkIChpbnRvIHRoZSBhbGxvY2F0aW9ucyBpbiBhbGxv Y3MgYW5kIHdvcnNlX2FsbG9jcywKKyAqIGVhY2ggb2Ygd2hpY2ggc2hvdWxkIGJlIEhVR0VQQUdF X1BBR0VTIGxvbmcpLCBleGNlcHQgZm9yIGEgc2luZ2xlIGZyZWUgcGFnZQorICogYXQgdGhlIGVu ZC4KKyAqCisgKiAoVGhlcmUncyBub3RoaW5nIG1hZ2ljIGFib3V0IHRoZXNlIG51bWJlcnM7IGl0 J3MganVzdCB1c2VmdWwgdG8gc2hhcmUgdGhlCisgKiBzZXR1cCBiZXR3ZWVuIHRoZSBvbGRlc3Qg Zml0IGFuZCB0aGUgaW5zZXJ0L3JlbW92ZSB0ZXN0KS4KKyAqLworc3RhdGljIHZvaWQKK2luaXRf dGVzdF9wYWdlc2xhYnMocHNzZXRfdCAqcHNzZXQsIGhwZGF0YV90ICpwYWdlc2xhYiwKKyAgICBo cGRhdGFfdCAqd29yc2VfcGFnZXNsYWIsIGVkYXRhX3QgKmFsbG9jLCBlZGF0YV90ICp3b3JzZV9h bGxvYykgeworCWJvb2wgZXJyOworCisJaHBkYXRhX2luaXQocGFnZXNsYWIsICh2b2lkICopKDEw ICogSFVHRVBBR0UpLCBQQUdFU0xBQl9BR0UpOworCS8qCisJICogVGhpcyBwYWdlc2xhYiB3b3Vs ZCBiZSBiZXR0ZXIgZnJvbSBhbiBhZGRyZXNzLWZpcnN0LWZpdCBQT1YsIGJ1dAorCSAqIHdvcnNl IGZyb20gYW4gYWdlIFBPVi4KKwkgKi8KKwlocGRhdGFfaW5pdCh3b3JzZV9wYWdlc2xhYiwgKHZv aWQgKikoOSAqIEhVR0VQQUdFKSwgUEFHRVNMQUJfQUdFICsgMSk7CisKKwlwc3NldF9pbml0KHBz c2V0KTsKKworCWVkYXRhX2luaXRfdGVzdCgmYWxsb2NbMF0pOworCXRlc3RfcHNzZXRfYWxsb2Nf bmV3KHBzc2V0LCBwYWdlc2xhYiwgJmFsbG9jWzBdLCBQQUdFKTsKKwlmb3IgKHNpemVfdCBpID0g MTsgaSA8IEhVR0VQQUdFX1BBR0VTOyBpKyspIHsKKwkJZWRhdGFfaW5pdF90ZXN0KCZhbGxvY1tp XSk7CisJCWVyciA9IHRlc3RfcHNzZXRfYWxsb2NfcmV1c2UocHNzZXQsICZhbGxvY1tpXSwgUEFH RSk7CisJCWV4cGVjdF9mYWxzZShlcnIsICJOb25lbXB0eSBwc3NldCBmYWlsZWQgcGFnZSBhbGxv Y2F0aW9uLiIpOworCQlleHBlY3RfcHRyX2VxKHBhZ2VzbGFiLCBlZGF0YV9wc19nZXQoJmFsbG9j W2ldKSwKKwkJICAgICJBbGxvY2F0ZWQgZnJvbSB0aGUgd3JvbmcgcGFnZXNsYWIiKTsKKwl9CisK KwllZGF0YV9pbml0X3Rlc3QoJndvcnNlX2FsbG9jWzBdKTsKKwl0ZXN0X3Bzc2V0X2FsbG9jX25l dyhwc3NldCwgd29yc2VfcGFnZXNsYWIsICZ3b3JzZV9hbGxvY1swXSwgUEFHRSk7CisJZXhwZWN0 X3B0cl9lcSh3b3JzZV9wYWdlc2xhYiwgZWRhdGFfcHNfZ2V0KCZ3b3JzZV9hbGxvY1swXSksCisJ ICAgICJBbGxvY2F0ZWQgZnJvbSB0aGUgd3JvbmcgcGFnZXNsYWIiKTsKKwkvKgorCSAqIE1ha2Ug dGhlIHR3byBwc3NldHMgb3RoZXJ3aXNlIGluZGlzdGluZ3Vpc2hhYmxlOyBhbGwgZnVsbCBleGNl cHQgZm9yCisJICogYSBzaW5nbGUgcGFnZS4KKwkgKi8KKwlmb3IgKHNpemVfdCBpID0gMTsgaSA8 IEhVR0VQQUdFX1BBR0VTIC0gMTsgaSsrKSB7CisJCWVkYXRhX2luaXRfdGVzdCgmd29yc2VfYWxs b2NbaV0pOworCQllcnIgPSB0ZXN0X3Bzc2V0X2FsbG9jX3JldXNlKHBzc2V0LCAmYWxsb2NbaV0s IFBBR0UpOworCQlleHBlY3RfZmFsc2UoZXJyLCAiTm9uZW1wdHkgcHNzZXQgZmFpbGVkIHBhZ2Ug YWxsb2NhdGlvbi4iKTsKKwkJZXhwZWN0X3B0cl9lcSh3b3JzZV9wYWdlc2xhYiwgZWRhdGFfcHNf Z2V0KCZhbGxvY1tpXSksCisJCSAgICAiQWxsb2NhdGVkIGZyb20gdGhlIHdyb25nIHBhZ2VzbGFi Iik7CisJfQorCisJLyogRGVhbGxvY2F0ZSB0aGUgbGFzdCBwYWdlIGZyb20gdGhlIG9sZGVyIHBh Z2VzbGFiLiAqLworCWhwZGF0YV90ICpldmljdGVkID0gdGVzdF9wc3NldF9kYWxsb2MocHNzZXQs CisJICAgICZhbGxvY1tIVUdFUEFHRV9QQUdFUyAtIDFdKTsKKwlleHBlY3RfcHRyX251bGwoZXZp Y3RlZCwgIlVuZXhwZWN0ZWQgZXZpY3Rpb24iKTsKK30KKworVEVTVF9CRUdJTih0ZXN0X29sZGVz dF9maXQpIHsKKwlib29sIGVycjsKKwllZGF0YV90IGFsbG9jW0hVR0VQQUdFX1BBR0VTXTsKKwll ZGF0YV90IHdvcnNlX2FsbG9jW0hVR0VQQUdFX1BBR0VTXTsKKworCWhwZGF0YV90IHBhZ2VzbGFi OworCWhwZGF0YV90IHdvcnNlX3BhZ2VzbGFiOworCisJcHNzZXRfdCBwc3NldDsKKworCWluaXRf dGVzdF9wYWdlc2xhYnMoJnBzc2V0LCAmcGFnZXNsYWIsICZ3b3JzZV9wYWdlc2xhYiwgYWxsb2Ms CisJICAgIHdvcnNlX2FsbG9jKTsKKworCS8qIFRoZSBlZGF0YSBzaG91bGQgY29tZSBmcm9tIHRo ZSBiZXR0ZXIgcGFnZXNsYWIuICovCisJZWRhdGFfdCB0ZXN0X2VkYXRhOworCWVkYXRhX2luaXRf dGVzdCgmdGVzdF9lZGF0YSk7CisJZXJyID0gdGVzdF9wc3NldF9hbGxvY19yZXVzZSgmcHNzZXQs ICZ0ZXN0X2VkYXRhLCBQQUdFKTsKKwlleHBlY3RfZmFsc2UoZXJyLCAiTm9uZW1wdHkgcHNzZXQg ZmFpbGVkIHBhZ2UgYWxsb2NhdGlvbiIpOworCWV4cGVjdF9wdHJfZXEoJnBhZ2VzbGFiLCBlZGF0 YV9wc19nZXQoJnRlc3RfZWRhdGEpLAorCSAgICAiQWxsb2NhdGVkIGZyb20gdGhlIHdyb25nIHBh Z2VzbGFiIik7Cit9CitURVNUX0VORAorCitURVNUX0JFR0lOKHRlc3RfaW5zZXJ0X3JlbW92ZSkg eworCWJvb2wgZXJyOworCWhwZGF0YV90ICpwczsKKwllZGF0YV90IGFsbG9jW0hVR0VQQUdFX1BB R0VTXTsKKwllZGF0YV90IHdvcnNlX2FsbG9jW0hVR0VQQUdFX1BBR0VTXTsKKworCWhwZGF0YV90 IHBhZ2VzbGFiOworCWhwZGF0YV90IHdvcnNlX3BhZ2VzbGFiOworCisJcHNzZXRfdCBwc3NldDsK KworCWluaXRfdGVzdF9wYWdlc2xhYnMoJnBzc2V0LCAmcGFnZXNsYWIsICZ3b3JzZV9wYWdlc2xh YiwgYWxsb2MsCisJICAgIHdvcnNlX2FsbG9jKTsKKworCS8qIFJlbW92ZSBiZXR0ZXI7IHNob3Vs ZCBzdGlsbCBiZSBhYmxlIHRvIGFsbG9jIGZyb20gd29yc2UuICovCisJcHNzZXRfdXBkYXRlX2Jl Z2luKCZwc3NldCwgJnBhZ2VzbGFiKTsKKwllcnIgPSB0ZXN0X3Bzc2V0X2FsbG9jX3JldXNlKCZw c3NldCwgJndvcnNlX2FsbG9jW0hVR0VQQUdFX1BBR0VTIC0gMV0sCisJICAgIFBBR0UpOworCWV4 cGVjdF9mYWxzZShlcnIsICJSZW1vdmFsIHNob3VsZCBzdGlsbCBsZWF2ZSBhbiBlbXB0eSBwYWdl Iik7CisJZXhwZWN0X3B0cl9lcSgmd29yc2VfcGFnZXNsYWIsCisJICAgIGVkYXRhX3BzX2dldCgm d29yc2VfYWxsb2NbSFVHRVBBR0VfUEFHRVMgLSAxXSksCisJICAgICJBbGxvY2F0ZWQgb3V0IG9m IHdyb25nIHBzIik7CisKKwkvKgorCSAqIEFmdGVyIGRlYWxsb2NhdGluZyB0aGUgcHJldmlvdXMg YWxsb2MgYW5kIHJlaW5zZXJ0aW5nIGJldHRlciwgaXQKKwkgKiBzaG91bGQgYmUgcHJlZmVycmVk IGZvciBmdXR1cmUgYWxsb2NhdGlvbnMuCisJICovCisJcHMgPSB0ZXN0X3Bzc2V0X2RhbGxvYygm cHNzZXQsICZ3b3JzZV9hbGxvY1tIVUdFUEFHRV9QQUdFUyAtIDFdKTsKKwlleHBlY3RfcHRyX251 bGwocHMsICJJbmNvcnJlY3QgZXZpY3Rpb24gb2Ygbm9uZW1wdHkgcGFnZXNsYWIiKTsKKwlwc3Nl dF91cGRhdGVfZW5kKCZwc3NldCwgJnBhZ2VzbGFiKTsKKwllcnIgPSB0ZXN0X3Bzc2V0X2FsbG9j X3JldXNlKCZwc3NldCwgJmFsbG9jW0hVR0VQQUdFX1BBR0VTIC0gMV0sIFBBR0UpOworCWV4cGVj dF9mYWxzZShlcnIsICJwc3NldCBzaG91bGQgYmUgbm9uZW1wdHkiKTsKKwlleHBlY3RfcHRyX2Vx KCZwYWdlc2xhYiwgZWRhdGFfcHNfZ2V0KCZhbGxvY1tIVUdFUEFHRV9QQUdFUyAtIDFdKSwKKwkg ICAgIlJlbW92YWwvcmVpbnNlcnRpb24gc2hvdWxkbid0IGNoYW5nZSBvcmRlcmluZyIpOworCS8q CisJICogQWZ0ZXIgZGVhbGxvY2F0aW5nIGFuZCByZW1vdmluZyBib3RoLCBhbGxvY2F0aW9ucyBz aG91bGQgZmFpbC4KKwkgKi8KKwlwcyA9IHRlc3RfcHNzZXRfZGFsbG9jKCZwc3NldCwgJmFsbG9j W0hVR0VQQUdFX1BBR0VTIC0gMV0pOworCWV4cGVjdF9wdHJfbnVsbChwcywgIkluY29ycmVjdCBl dmljdGlvbiIpOworCXBzc2V0X3VwZGF0ZV9iZWdpbigmcHNzZXQsICZwYWdlc2xhYik7CisJcHNz ZXRfdXBkYXRlX2JlZ2luKCZwc3NldCwgJndvcnNlX3BhZ2VzbGFiKTsKKwllcnIgPSB0ZXN0X3Bz c2V0X2FsbG9jX3JldXNlKCZwc3NldCwgJmFsbG9jW0hVR0VQQUdFX1BBR0VTIC0gMV0sIFBBR0Up OworCWV4cGVjdF90cnVlKGVyciwgInBzc2V0IHNob3VsZCBiZSBlbXB0eSwgYnV0IGFuIGFsbG9j IHN1Y2NlZWRlZCIpOworfQorVEVTVF9FTkQKKworVEVTVF9CRUdJTih0ZXN0X3B1cmdlX3ByZWZl cnNfbm9uaHVnZSkgeworCS8qCisJICogQWxsIGVsc2UgYmVpbmcgZXF1YWwsIHdlIHNob3VsZCBw cmVmZXIgcHVyZ2luZyBub24taHVnZSBwYWdlcyBvdmVyCisJICogaHVnZSBvbmVzIGZvciBub24t ZW1wdHkgZXh0ZW50cy4KKwkgKi8KKworCS8qIE5vdGhpbmcgbWFnaWMgYWJvdXQgdGhpcyBjb25z dGFudC4gKi8KKwllbnVtIHsKKwkJTkhQID0gMjMsCisJfTsKKwlocGRhdGFfdCAqaHBkYXRhOwor CisJcHNzZXRfdCBwc3NldDsKKwlwc3NldF9pbml0KCZwc3NldCk7CisKKwlocGRhdGFfdCBocGRh dGFfaHVnZVtOSFBdOworCXVpbnRwdHJfdCBodWdlX2JlZ2luID0gKHVpbnRwdHJfdCkmaHBkYXRh X2h1Z2VbMF07CisJdWludHB0cl90IGh1Z2VfZW5kID0gKHVpbnRwdHJfdCkmaHBkYXRhX2h1Z2Vb TkhQXTsKKwlocGRhdGFfdCBocGRhdGFfbm9uaHVnZVtOSFBdOworCXVpbnRwdHJfdCBub25odWdl X2JlZ2luID0gKHVpbnRwdHJfdCkmaHBkYXRhX25vbmh1Z2VbMF07CisJdWludHB0cl90IG5vbmh1 Z2VfZW5kID0gKHVpbnRwdHJfdCkmaHBkYXRhX25vbmh1Z2VbTkhQXTsKKworCWZvciAoc2l6ZV90 IGkgPSAwOyBpIDwgTkhQOyBpKyspIHsKKwkJaHBkYXRhX2luaXQoJmhwZGF0YV9odWdlW2ldLCAo dm9pZCAqKSgoMTAgKyBpKSAqIEhVR0VQQUdFKSwKKwkJICAgIDEyMyArIGkpOworCQlwc3NldF9p bnNlcnQoJnBzc2V0LCAmaHBkYXRhX2h1Z2VbaV0pOworCisJCWhwZGF0YV9pbml0KCZocGRhdGFf bm9uaHVnZVtpXSwKKwkJICAgICh2b2lkICopKCgxMCArIE5IUCArIGkpICogSFVHRVBBR0UpLAor CQkgICAgNDU2ICsgaSk7CisJCXBzc2V0X2luc2VydCgmcHNzZXQsICZocGRhdGFfbm9uaHVnZVtp XSk7CisKKwl9CisJZm9yIChpbnQgaSA9IDA7IGkgPCAyICogTkhQOyBpKyspIHsKKwkJaHBkYXRh ID0gcHNzZXRfcGlja19hbGxvYygmcHNzZXQsIEhVR0VQQUdFICogMyAvIDQpOworCQlwc3NldF91 cGRhdGVfYmVnaW4oJnBzc2V0LCBocGRhdGEpOworCQl2b2lkICpwdHI7CisJCXB0ciA9IGhwZGF0 YV9yZXNlcnZlX2FsbG9jKGhwZGF0YSwgSFVHRVBBR0UgKiAzIC8gNCk7CisJCS8qIElnbm9yZSB0 aGUgZmlyc3QgYWxsb2MsIHdoaWNoIHdpbGwgc3RpY2sgYXJvdW5kLiAqLworCQkodm9pZClwdHI7 CisJCS8qCisJCSAqIFRoZSBzZWNvbmQgYWxsb2MgaXMgdG8gZGlydHkgdGhlIHBhZ2VzOyBmcmVl IGl0IGltbWVkaWF0ZWx5CisJCSAqIGFmdGVyIGFsbG9jYXRpbmcuCisJCSAqLworCQlwdHIgPSBo cGRhdGFfcmVzZXJ2ZV9hbGxvYyhocGRhdGEsIEhVR0VQQUdFIC8gNCk7CisJCWhwZGF0YV91bnJl c2VydmUoaHBkYXRhLCBwdHIsIEhVR0VQQUdFIC8gNCk7CisKKwkJaWYgKGh1Z2VfYmVnaW4gPD0g KHVpbnRwdHJfdClocGRhdGEKKwkJICAgICYmICh1aW50cHRyX3QpaHBkYXRhIDwgaHVnZV9lbmQp IHsKKwkJCWhwZGF0YV9odWdpZnkoaHBkYXRhKTsKKwkJfQorCisJCWhwZGF0YV9wdXJnZV9hbGxv d2VkX3NldChocGRhdGEsIHRydWUpOworCQlwc3NldF91cGRhdGVfZW5kKCZwc3NldCwgaHBkYXRh KTsKKwl9CisKKwkvKgorCSAqIFdlJ3ZlIGdvdCBhIGJ1bmNoIG9mIDEvOHRoIGRpcnR5IGhwZGF0 YXMuICBJdCBzaG91bGQgZ2l2ZSB1cyBhbGwgdGhlCisJICogbm9uLWh1Z2Ugb25lcyB0byBwdXJn ZSwgdGhlbiBhbGwgdGhlIGh1Z2Ugb25lcywgdGhlbiByZWZ1c2UgdG8gcHVyZ2UKKwkgKiBmdXJ0 aGVyLgorCSAqLworCWZvciAoaW50IGkgPSAwOyBpIDwgTkhQOyBpKyspIHsKKwkJaHBkYXRhID0g cHNzZXRfcGlja19wdXJnZSgmcHNzZXQpOworCQlhc3NlcnRfdHJ1ZShub25odWdlX2JlZ2luIDw9 ICh1aW50cHRyX3QpaHBkYXRhCisJCSAgICAmJiAodWludHB0cl90KWhwZGF0YSA8IG5vbmh1Z2Vf ZW5kLCAiIik7CisJCXBzc2V0X3VwZGF0ZV9iZWdpbigmcHNzZXQsIGhwZGF0YSk7CisJCXRlc3Rf cHNzZXRfZmFrZV9wdXJnZShocGRhdGEpOworCQlocGRhdGFfcHVyZ2VfYWxsb3dlZF9zZXQoaHBk YXRhLCBmYWxzZSk7CisJCXBzc2V0X3VwZGF0ZV9lbmQoJnBzc2V0LCBocGRhdGEpOworCX0KKwlm b3IgKGludCBpID0gMDsgaSA8IE5IUDsgaSsrKSB7CisJCWhwZGF0YSA9IHBzc2V0X3BpY2tfcHVy Z2UoJnBzc2V0KTsKKwkJZXhwZWN0X3RydWUoaHVnZV9iZWdpbiA8PSAodWludHB0cl90KWhwZGF0 YQorCQkgICAgJiYgKHVpbnRwdHJfdClocGRhdGEgPCBodWdlX2VuZCwgIiIpOworCQlwc3NldF91 cGRhdGVfYmVnaW4oJnBzc2V0LCBocGRhdGEpOworCQlocGRhdGFfZGVodWdpZnkoaHBkYXRhKTsK KwkJdGVzdF9wc3NldF9mYWtlX3B1cmdlKGhwZGF0YSk7CisJCWhwZGF0YV9wdXJnZV9hbGxvd2Vk X3NldChocGRhdGEsIGZhbHNlKTsKKwkJcHNzZXRfdXBkYXRlX2VuZCgmcHNzZXQsIGhwZGF0YSk7 CisJfQorfQorVEVTVF9FTkQKKworVEVTVF9CRUdJTih0ZXN0X3B1cmdlX3ByZWZlcnNfZW1wdHkp IHsKKwl2b2lkICpwdHI7CisKKwlwc3NldF90IHBzc2V0OworCXBzc2V0X2luaXQoJnBzc2V0KTsK KworCWhwZGF0YV90IGhwZGF0YV9lbXB0eTsKKwlocGRhdGFfdCBocGRhdGFfbm9uZW1wdHk7CisJ aHBkYXRhX2luaXQoJmhwZGF0YV9lbXB0eSwgKHZvaWQgKikoMTAgKiBIVUdFUEFHRSksIDEyMyk7 CisJcHNzZXRfaW5zZXJ0KCZwc3NldCwgJmhwZGF0YV9lbXB0eSk7CisJaHBkYXRhX2luaXQoJmhw ZGF0YV9ub25lbXB0eSwgKHZvaWQgKikoMTEgKiBIVUdFUEFHRSksIDQ1Nik7CisJcHNzZXRfaW5z ZXJ0KCZwc3NldCwgJmhwZGF0YV9ub25lbXB0eSk7CisKKwlwc3NldF91cGRhdGVfYmVnaW4oJnBz c2V0LCAmaHBkYXRhX2VtcHR5KTsKKwlwdHIgPSBocGRhdGFfcmVzZXJ2ZV9hbGxvYygmaHBkYXRh X2VtcHR5LCBQQUdFKTsKKwlleHBlY3RfcHRyX2VxKGhwZGF0YV9hZGRyX2dldCgmaHBkYXRhX2Vt cHR5KSwgcHRyLCAiIik7CisJaHBkYXRhX3VucmVzZXJ2ZSgmaHBkYXRhX2VtcHR5LCBwdHIsIFBB R0UpOworCWhwZGF0YV9wdXJnZV9hbGxvd2VkX3NldCgmaHBkYXRhX2VtcHR5LCB0cnVlKTsKKwlw c3NldF91cGRhdGVfZW5kKCZwc3NldCwgJmhwZGF0YV9lbXB0eSk7CisKKwlwc3NldF91cGRhdGVf YmVnaW4oJnBzc2V0LCAmaHBkYXRhX25vbmVtcHR5KTsKKwlwdHIgPSBocGRhdGFfcmVzZXJ2ZV9h bGxvYygmaHBkYXRhX25vbmVtcHR5LCAxMCAqIFBBR0UpOworCWV4cGVjdF9wdHJfZXEoaHBkYXRh X2FkZHJfZ2V0KCZocGRhdGFfbm9uZW1wdHkpLCBwdHIsICIiKTsKKwlocGRhdGFfdW5yZXNlcnZl KCZocGRhdGFfbm9uZW1wdHksIHB0ciwgOSAqIFBBR0UpOworCWhwZGF0YV9wdXJnZV9hbGxvd2Vk X3NldCgmaHBkYXRhX25vbmVtcHR5LCB0cnVlKTsKKwlwc3NldF91cGRhdGVfZW5kKCZwc3NldCwg JmhwZGF0YV9ub25lbXB0eSk7CisKKwkvKgorCSAqIFRoZSBub25lbXB0eSBzbGFiIGhhcyA5IGRp cnR5IHBhZ2VzLCB3aGlsZSB0aGUgZW1wdHkgb25lIGhhcyBvbmx5IDEuCisJICogV2Ugc2hvdWxk IHN0aWxsIHBpY2sgdGhlIGVtcHR5IG9uZSBmb3IgcHVyZ2luZy4KKwkgKi8KKwlocGRhdGFfdCAq dG9fcHVyZ2UgPSBwc3NldF9waWNrX3B1cmdlKCZwc3NldCk7CisJZXhwZWN0X3B0cl9lcSgmaHBk YXRhX2VtcHR5LCB0b19wdXJnZSwgIiIpOworfQorVEVTVF9FTkQKKworVEVTVF9CRUdJTih0ZXN0 X3B1cmdlX3ByZWZlcnNfZW1wdHlfaHVnZSkgeworCXZvaWQgKnB0cjsKKworCXBzc2V0X3QgcHNz ZXQ7CisJcHNzZXRfaW5pdCgmcHNzZXQpOworCisJZW51bSB7TkhQID0gMTAgfTsKKworCWhwZGF0 YV90IGhwZGF0YV9odWdlW05IUF07CisJaHBkYXRhX3QgaHBkYXRhX25vbmh1Z2VbTkhQXTsKKwor CXVpbnRwdHJfdCBjdXJfYWRkciA9IDEwMCAqIEhVR0VQQUdFOworCXVpbnQ2NF90IGN1cl9hZ2Ug PSAxMjM7CisJZm9yIChpbnQgaSA9IDA7IGkgPCBOSFA7IGkrKykgeworCQlocGRhdGFfaW5pdCgm aHBkYXRhX2h1Z2VbaV0sICh2b2lkICopY3VyX2FkZHIsIGN1cl9hZ2UpOworCQljdXJfYWRkciAr PSBIVUdFUEFHRTsKKwkJY3VyX2FnZSsrOworCQlwc3NldF9pbnNlcnQoJnBzc2V0LCAmaHBkYXRh X2h1Z2VbaV0pOworCisJCWhwZGF0YV9pbml0KCZocGRhdGFfbm9uaHVnZVtpXSwgKHZvaWQgKilj dXJfYWRkciwgY3VyX2FnZSk7CisJCWN1cl9hZGRyICs9IEhVR0VQQUdFOworCQljdXJfYWdlKys7 CisJCXBzc2V0X2luc2VydCgmcHNzZXQsICZocGRhdGFfbm9uaHVnZVtpXSk7CisKKwkJLyoKKwkJ ICogTWFrZSB0aGUgaHBkYXRhX2h1Z2VbaV0gZnVsbHkgZGlydHksIGVtcHR5LCBwdXJnYWJsZSwg YW5kCisJCSAqIGh1Z2UuCisJCSAqLworCQlwc3NldF91cGRhdGVfYmVnaW4oJnBzc2V0LCAmaHBk YXRhX2h1Z2VbaV0pOworCQlwdHIgPSBocGRhdGFfcmVzZXJ2ZV9hbGxvYygmaHBkYXRhX2h1Z2Vb aV0sIEhVR0VQQUdFKTsKKwkJZXhwZWN0X3B0cl9lcShocGRhdGFfYWRkcl9nZXQoJmhwZGF0YV9o dWdlW2ldKSwgcHRyLCAiIik7CisJCWhwZGF0YV9odWdpZnkoJmhwZGF0YV9odWdlW2ldKTsKKwkJ aHBkYXRhX3VucmVzZXJ2ZSgmaHBkYXRhX2h1Z2VbaV0sIHB0ciwgSFVHRVBBR0UpOworCQlocGRh dGFfcHVyZ2VfYWxsb3dlZF9zZXQoJmhwZGF0YV9odWdlW2ldLCB0cnVlKTsKKwkJcHNzZXRfdXBk YXRlX2VuZCgmcHNzZXQsICZocGRhdGFfaHVnZVtpXSk7CisKKwkJLyoKKwkJICogTWFrZSBocGRh dGFfbm9uaHVnZVtpXSBmdWxseSBkaXJ0eSwgZW1wdHksIHB1cmdhYmxlLCBhbmQKKwkJICogbm9u LWh1Z2UuCisJCSAqLworCQlwc3NldF91cGRhdGVfYmVnaW4oJnBzc2V0LCAmaHBkYXRhX25vbmh1 Z2VbaV0pOworCQlwdHIgPSBocGRhdGFfcmVzZXJ2ZV9hbGxvYygmaHBkYXRhX25vbmh1Z2VbaV0s IEhVR0VQQUdFKTsKKwkJZXhwZWN0X3B0cl9lcShocGRhdGFfYWRkcl9nZXQoJmhwZGF0YV9ub25o dWdlW2ldKSwgcHRyLCAiIik7CisJCWhwZGF0YV91bnJlc2VydmUoJmhwZGF0YV9ub25odWdlW2ld LCBwdHIsIEhVR0VQQUdFKTsKKwkJaHBkYXRhX3B1cmdlX2FsbG93ZWRfc2V0KCZocGRhdGFfbm9u aHVnZVtpXSwgdHJ1ZSk7CisJCXBzc2V0X3VwZGF0ZV9lbmQoJnBzc2V0LCAmaHBkYXRhX25vbmh1 Z2VbaV0pOworCX0KKworCS8qCisJICogV2UgaGF2ZSBhIGJ1bmNoIG9mIGVtcHR5IHNsYWJzLCBo YWxmIGh1Z2UsIGhhbGYgbm9uaHVnZSwgaW5zZXJ0ZWQgaW4KKwkgKiBhbHRlcm5hdGluZyBvcmRl ci4gIFdlIHNob3VsZCBwb3AgYWxsIHRoZSBodWdlIG9uZXMgYmVmb3JlIHBvcHBpbmcKKwkgKiBh bnkgb2YgdGhlIG5vbi1odWdlIG9uZXMgZm9yIHB1cmdpbmcuCisJICovCisJZm9yIChpbnQgaSA9 IDA7IGkgPCBOSFA7IGkrKykgeworCQlocGRhdGFfdCAqdG9fcHVyZ2UgPSBwc3NldF9waWNrX3B1 cmdlKCZwc3NldCk7CisJCWV4cGVjdF9wdHJfZXEoJmhwZGF0YV9odWdlW2ldLCB0b19wdXJnZSwg IiIpOworCQlwc3NldF91cGRhdGVfYmVnaW4oJnBzc2V0LCB0b19wdXJnZSk7CisJCWhwZGF0YV9w dXJnZV9hbGxvd2VkX3NldCh0b19wdXJnZSwgZmFsc2UpOworCQlwc3NldF91cGRhdGVfZW5kKCZw c3NldCwgdG9fcHVyZ2UpOworCX0KKwlmb3IgKGludCBpID0gMDsgaSA8IE5IUDsgaSsrKSB7CisJ CWhwZGF0YV90ICp0b19wdXJnZSA9IHBzc2V0X3BpY2tfcHVyZ2UoJnBzc2V0KTsKKwkJZXhwZWN0 X3B0cl9lcSgmaHBkYXRhX25vbmh1Z2VbaV0sIHRvX3B1cmdlLCAiIik7CisJCXBzc2V0X3VwZGF0 ZV9iZWdpbigmcHNzZXQsIHRvX3B1cmdlKTsKKwkJaHBkYXRhX3B1cmdlX2FsbG93ZWRfc2V0KHRv X3B1cmdlLCBmYWxzZSk7CisJCXBzc2V0X3VwZGF0ZV9lbmQoJnBzc2V0LCB0b19wdXJnZSk7CisJ fQorfQorVEVTVF9FTkQKKworaW50CittYWluKHZvaWQpIHsKKwlyZXR1cm4gdGVzdF9ub19yZWVu dHJhbmN5KAorCSAgICB0ZXN0X2VtcHR5LAorCSAgICB0ZXN0X2ZpbGwsCisJICAgIHRlc3RfcmV1 c2UsCisJICAgIHRlc3RfZXZpY3QsCisJICAgIHRlc3RfbXVsdGlfcGFnZXNsYWIsCisJICAgIHRl c3Rfc3RhdHMsCisJICAgIHRlc3Rfb2xkZXN0X2ZpdCwKKwkgICAgdGVzdF9pbnNlcnRfcmVtb3Zl LAorCSAgICB0ZXN0X3B1cmdlX3ByZWZlcnNfbm9uaHVnZSwKKwkgICAgdGVzdF9wdXJnZV9wcmVm ZXJzX2VtcHR5LAorCSAgICB0ZXN0X3B1cmdlX3ByZWZlcnNfZW1wdHlfaHVnZSk7Cit9CgpkaWZm IC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0 L3FsLmMgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQv cWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTEzMDU4Ci0tLSAvZGV2 L251bGwKKysrIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91 bml0L3FsLmMKQEAgLTAsMCArMSwzMTcgQEAKKyNpbmNsdWRlICJ0ZXN0L2plbWFsbG9jX3Rlc3Qu aCIKKworI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL3FsLmgiCisKKy8qIE51bWJlciBvZiBy aW5nIGVudHJpZXMsIGluIFsyLi4yNl0uICovCisjZGVmaW5lIE5FTlRSSUVTIDkKKwordHlwZWRl ZiBzdHJ1Y3QgbGlzdF9zIGxpc3RfdDsKK3R5cGVkZWYgcWxfaGVhZChsaXN0X3QpIGxpc3RfaGVh ZF90OworCitzdHJ1Y3QgbGlzdF9zIHsKKwlxbF9lbG0obGlzdF90KSBsaW5rOworCWNoYXIgaWQ7 Cit9OworCitzdGF0aWMgdm9pZAordGVzdF9lbXB0eV9saXN0KGxpc3RfaGVhZF90ICpoZWFkKSB7 CisJbGlzdF90ICp0OworCXVuc2lnbmVkIGk7CisKKwlleHBlY3RfdHJ1ZShxbF9lbXB0eShoZWFk KSwgIlVuZXhwZWN0ZWQgZWxlbWVudCBmb3IgZW1wdHkgbGlzdCIpOworCWV4cGVjdF9wdHJfbnVs bChxbF9maXJzdChoZWFkKSwgIlVuZXhwZWN0ZWQgZWxlbWVudCBmb3IgZW1wdHkgbGlzdCIpOwor CWV4cGVjdF9wdHJfbnVsbChxbF9sYXN0KGhlYWQsIGxpbmspLAorCSAgICAiVW5leHBlY3RlZCBl bGVtZW50IGZvciBlbXB0eSBsaXN0Iik7CisKKwlpID0gMDsKKwlxbF9mb3JlYWNoKHQsIGhlYWQs IGxpbmspIHsKKwkJaSsrOworCX0KKwlleHBlY3RfdV9lcShpLCAwLCAiVW5leHBlY3RlZCBlbGVt ZW50IGZvciBlbXB0eSBsaXN0Iik7CisKKwlpID0gMDsKKwlxbF9yZXZlcnNlX2ZvcmVhY2godCwg aGVhZCwgbGluaykgeworCQlpKys7CisJfQorCWV4cGVjdF91X2VxKGksIDAsICJVbmV4cGVjdGVk IGVsZW1lbnQgZm9yIGVtcHR5IGxpc3QiKTsKK30KKworVEVTVF9CRUdJTih0ZXN0X3FsX2VtcHR5 KSB7CisJbGlzdF9oZWFkX3QgaGVhZDsKKworCXFsX25ldygmaGVhZCk7CisJdGVzdF9lbXB0eV9s aXN0KCZoZWFkKTsKK30KK1RFU1RfRU5ECisKK3N0YXRpYyB2b2lkCitpbml0X2VudHJpZXMobGlz dF90ICplbnRyaWVzLCB1bnNpZ25lZCBuZW50cmllcykgeworCXVuc2lnbmVkIGk7CisKKwlmb3Ig KGkgPSAwOyBpIDwgbmVudHJpZXM7IGkrKykgeworCQllbnRyaWVzW2ldLmlkID0gJ2EnICsgaTsK KwkJcWxfZWxtX25ldygmZW50cmllc1tpXSwgbGluayk7CisJfQorfQorCitzdGF0aWMgdm9pZAor dGVzdF9lbnRyaWVzX2xpc3QobGlzdF9oZWFkX3QgKmhlYWQsIGxpc3RfdCAqZW50cmllcywgdW5z aWduZWQgbmVudHJpZXMpIHsKKwlsaXN0X3QgKnQ7CisJdW5zaWduZWQgaTsKKworCWV4cGVjdF9m YWxzZShxbF9lbXB0eShoZWFkKSwgIkxpc3Qgc2hvdWxkIG5vdCBiZSBlbXB0eSIpOworCWV4cGVj dF9jX2VxKHFsX2ZpcnN0KGhlYWQpLT5pZCwgZW50cmllc1swXS5pZCwgIkVsZW1lbnQgaWQgbWlz bWF0Y2giKTsKKwlleHBlY3RfY19lcShxbF9sYXN0KGhlYWQsIGxpbmspLT5pZCwgZW50cmllc1tu ZW50cmllcy0xXS5pZCwKKwkgICAgIkVsZW1lbnQgaWQgbWlzbWF0Y2giKTsKKworCWkgPSAwOwor CXFsX2ZvcmVhY2godCwgaGVhZCwgbGluaykgeworCQlleHBlY3RfY19lcSh0LT5pZCwgZW50cmll c1tpXS5pZCwgIkVsZW1lbnQgaWQgbWlzbWF0Y2giKTsKKwkJaSsrOworCX0KKworCWkgPSAwOwor CXFsX3JldmVyc2VfZm9yZWFjaCh0LCBoZWFkLCBsaW5rKSB7CisJCWV4cGVjdF9jX2VxKHQtPmlk LCBlbnRyaWVzW25lbnRyaWVzLWktMV0uaWQsCisJCSAgICAiRWxlbWVudCBpZCBtaXNtYXRjaCIp OworCQlpKys7CisJfQorCisJZm9yIChpID0gMDsgaSA8IG5lbnRyaWVzLTE7IGkrKykgeworCQl0 ID0gcWxfbmV4dChoZWFkLCAmZW50cmllc1tpXSwgbGluayk7CisJCWV4cGVjdF9jX2VxKHQtPmlk LCBlbnRyaWVzW2krMV0uaWQsICJFbGVtZW50IGlkIG1pc21hdGNoIik7CisJfQorCWV4cGVjdF9w dHJfbnVsbChxbF9uZXh0KGhlYWQsICZlbnRyaWVzW25lbnRyaWVzLTFdLCBsaW5rKSwKKwkgICAg IlVuZXhwZWN0ZWQgZWxlbWVudCIpOworCisJZXhwZWN0X3B0cl9udWxsKHFsX3ByZXYoaGVhZCwg JmVudHJpZXNbMF0sIGxpbmspLCAiVW5leHBlY3RlZCBlbGVtZW50Iik7CisJZm9yIChpID0gMTsg aSA8IG5lbnRyaWVzOyBpKyspIHsKKwkJdCA9IHFsX3ByZXYoaGVhZCwgJmVudHJpZXNbaV0sIGxp bmspOworCQlleHBlY3RfY19lcSh0LT5pZCwgZW50cmllc1tpLTFdLmlkLCAiRWxlbWVudCBpZCBt aXNtYXRjaCIpOworCX0KK30KKworVEVTVF9CRUdJTih0ZXN0X3FsX3RhaWxfaW5zZXJ0KSB7CisJ bGlzdF9oZWFkX3QgaGVhZDsKKwlsaXN0X3QgZW50cmllc1tORU5UUklFU107CisJdW5zaWduZWQg aTsKKworCXFsX25ldygmaGVhZCk7CisJaW5pdF9lbnRyaWVzKGVudHJpZXMsIHNpemVvZihlbnRy aWVzKS9zaXplb2YobGlzdF90KSk7CisJZm9yIChpID0gMDsgaSA8IE5FTlRSSUVTOyBpKyspIHsK KwkJcWxfdGFpbF9pbnNlcnQoJmhlYWQsICZlbnRyaWVzW2ldLCBsaW5rKTsKKwl9CisKKwl0ZXN0 X2VudHJpZXNfbGlzdCgmaGVhZCwgZW50cmllcywgTkVOVFJJRVMpOworfQorVEVTVF9FTkQKKwor VEVTVF9CRUdJTih0ZXN0X3FsX3RhaWxfcmVtb3ZlKSB7CisJbGlzdF9oZWFkX3QgaGVhZDsKKwls aXN0X3QgZW50cmllc1tORU5UUklFU107CisJdW5zaWduZWQgaTsKKworCXFsX25ldygmaGVhZCk7 CisJaW5pdF9lbnRyaWVzKGVudHJpZXMsIHNpemVvZihlbnRyaWVzKS9zaXplb2YobGlzdF90KSk7 CisJZm9yIChpID0gMDsgaSA8IE5FTlRSSUVTOyBpKyspIHsKKwkJcWxfdGFpbF9pbnNlcnQoJmhl YWQsICZlbnRyaWVzW2ldLCBsaW5rKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgTkVOVFJJRVM7 IGkrKykgeworCQl0ZXN0X2VudHJpZXNfbGlzdCgmaGVhZCwgZW50cmllcywgTkVOVFJJRVMtaSk7 CisJCXFsX3RhaWxfcmVtb3ZlKCZoZWFkLCBsaXN0X3QsIGxpbmspOworCX0KKwl0ZXN0X2VtcHR5 X2xpc3QoJmhlYWQpOworfQorVEVTVF9FTkQKKworVEVTVF9CRUdJTih0ZXN0X3FsX2hlYWRfaW5z ZXJ0KSB7CisJbGlzdF9oZWFkX3QgaGVhZDsKKwlsaXN0X3QgZW50cmllc1tORU5UUklFU107CisJ dW5zaWduZWQgaTsKKworCXFsX25ldygmaGVhZCk7CisJaW5pdF9lbnRyaWVzKGVudHJpZXMsIHNp emVvZihlbnRyaWVzKS9zaXplb2YobGlzdF90KSk7CisJZm9yIChpID0gMDsgaSA8IE5FTlRSSUVT OyBpKyspIHsKKwkJcWxfaGVhZF9pbnNlcnQoJmhlYWQsICZlbnRyaWVzW05FTlRSSUVTLWktMV0s IGxpbmspOworCX0KKworCXRlc3RfZW50cmllc19saXN0KCZoZWFkLCBlbnRyaWVzLCBORU5UUklF Uyk7Cit9CitURVNUX0VORAorCitURVNUX0JFR0lOKHRlc3RfcWxfaGVhZF9yZW1vdmUpIHsKKwls aXN0X2hlYWRfdCBoZWFkOworCWxpc3RfdCBlbnRyaWVzW05FTlRSSUVTXTsKKwl1bnNpZ25lZCBp OworCisJcWxfbmV3KCZoZWFkKTsKKwlpbml0X2VudHJpZXMoZW50cmllcywgc2l6ZW9mKGVudHJp ZXMpL3NpemVvZihsaXN0X3QpKTsKKwlmb3IgKGkgPSAwOyBpIDwgTkVOVFJJRVM7IGkrKykgewor CQlxbF9oZWFkX2luc2VydCgmaGVhZCwgJmVudHJpZXNbTkVOVFJJRVMtaS0xXSwgbGluayk7CisJ fQorCisJZm9yIChpID0gMDsgaSA8IE5FTlRSSUVTOyBpKyspIHsKKwkJdGVzdF9lbnRyaWVzX2xp c3QoJmhlYWQsICZlbnRyaWVzW2ldLCBORU5UUklFUy1pKTsKKwkJcWxfaGVhZF9yZW1vdmUoJmhl YWQsIGxpc3RfdCwgbGluayk7CisJfQorCXRlc3RfZW1wdHlfbGlzdCgmaGVhZCk7Cit9CitURVNU X0VORAorCitURVNUX0JFR0lOKHRlc3RfcWxfaW5zZXJ0KSB7CisJbGlzdF9oZWFkX3QgaGVhZDsK KwlsaXN0X3QgZW50cmllc1s4XTsKKwlsaXN0X3QgKmEsICpiLCAqYywgKmQsICplLCAqZiwgKmcs ICpoOworCisJcWxfbmV3KCZoZWFkKTsKKwlpbml0X2VudHJpZXMoZW50cmllcywgc2l6ZW9mKGVu dHJpZXMpL3NpemVvZihsaXN0X3QpKTsKKwlhID0gJmVudHJpZXNbMF07CisJYiA9ICZlbnRyaWVz WzFdOworCWMgPSAmZW50cmllc1syXTsKKwlkID0gJmVudHJpZXNbM107CisJZSA9ICZlbnRyaWVz WzRdOworCWYgPSAmZW50cmllc1s1XTsKKwlnID0gJmVudHJpZXNbNl07CisJaCA9ICZlbnRyaWVz WzddOworCisJLyoKKwkgKiBxbF9yZW1vdmUoKSwgcWxfYmVmb3JlX2luc2VydCgpLCBhbmQgcWxf YWZ0ZXJfaW5zZXJ0KCkgYXJlIHVzZWQKKwkgKiBpbnRlcm5hbGx5IGJ5IG90aGVyIG1hY3JvcyB0 aGF0IGFyZSBhbHJlYWR5IHRlc3RlZCwgc28gdGhlcmUncyBubworCSAqIG5lZWQgdG8gdGVzdCB0 aGVtIGNvbXBsZXRlbHkuICBIb3dldmVyLCBpbnNlcnRpb24vZGVsZXRpb24gZnJvbSB0aGUKKwkg KiBtaWRkbGUgb2YgbGlzdHMgaXMgbm90IG90aGVyd2lzZSB0ZXN0ZWQ7IGRvIHNvIGhlcmUuCisJ ICovCisJcWxfdGFpbF9pbnNlcnQoJmhlYWQsIGYsIGxpbmspOworCXFsX2JlZm9yZV9pbnNlcnQo JmhlYWQsIGYsIGIsIGxpbmspOworCXFsX2JlZm9yZV9pbnNlcnQoJmhlYWQsIGYsIGMsIGxpbmsp OworCXFsX2FmdGVyX2luc2VydChmLCBoLCBsaW5rKTsKKwlxbF9hZnRlcl9pbnNlcnQoZiwgZywg bGluayk7CisJcWxfYmVmb3JlX2luc2VydCgmaGVhZCwgYiwgYSwgbGluayk7CisJcWxfYWZ0ZXJf aW5zZXJ0KGMsIGQsIGxpbmspOworCXFsX2JlZm9yZV9pbnNlcnQoJmhlYWQsIGYsIGUsIGxpbmsp OworCisJdGVzdF9lbnRyaWVzX2xpc3QoJmhlYWQsIGVudHJpZXMsIHNpemVvZihlbnRyaWVzKS9z aXplb2YobGlzdF90KSk7Cit9CitURVNUX0VORAorCitzdGF0aWMgdm9pZAordGVzdF9jb25jYXRf c3BsaXRfZW50cmllcyhsaXN0X3QgKmVudHJpZXMsIHVuc2lnbmVkIG5lbnRyaWVzX2EsCisgICAg dW5zaWduZWQgbmVudHJpZXNfYikgeworCWluaXRfZW50cmllcyhlbnRyaWVzLCBuZW50cmllc19h ICsgbmVudHJpZXNfYik7CisKKwlsaXN0X2hlYWRfdCBoZWFkX2E7CisJcWxfbmV3KCZoZWFkX2Ep OworCWZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBuZW50cmllc19hOyBpKyspIHsKKwkJcWxfdGFp bF9pbnNlcnQoJmhlYWRfYSwgJmVudHJpZXNbaV0sIGxpbmspOworCX0KKwlpZiAobmVudHJpZXNf YSA9PSAwKSB7CisJCXRlc3RfZW1wdHlfbGlzdCgmaGVhZF9hKTsKKwl9IGVsc2UgeworCQl0ZXN0 X2VudHJpZXNfbGlzdCgmaGVhZF9hLCBlbnRyaWVzLCBuZW50cmllc19hKTsKKwl9CisKKwlsaXN0 X2hlYWRfdCBoZWFkX2I7CisJcWxfbmV3KCZoZWFkX2IpOworCWZvciAodW5zaWduZWQgaSA9IDA7 IGkgPCBuZW50cmllc19iOyBpKyspIHsKKwkJcWxfdGFpbF9pbnNlcnQoJmhlYWRfYiwgJmVudHJp ZXNbbmVudHJpZXNfYSArIGldLCBsaW5rKTsKKwl9CisJaWYgKG5lbnRyaWVzX2IgPT0gMCkgewor CQl0ZXN0X2VtcHR5X2xpc3QoJmhlYWRfYik7CisJfSBlbHNlIHsKKwkJdGVzdF9lbnRyaWVzX2xp c3QoJmhlYWRfYiwgZW50cmllcyArIG5lbnRyaWVzX2EsIG5lbnRyaWVzX2IpOworCX0KKworCXFs X2NvbmNhdCgmaGVhZF9hLCAmaGVhZF9iLCBsaW5rKTsKKwlpZiAobmVudHJpZXNfYSArIG5lbnRy aWVzX2IgPT0gMCkgeworCQl0ZXN0X2VtcHR5X2xpc3QoJmhlYWRfYSk7CisJfSBlbHNlIHsKKwkJ dGVzdF9lbnRyaWVzX2xpc3QoJmhlYWRfYSwgZW50cmllcywgbmVudHJpZXNfYSArIG5lbnRyaWVz X2IpOworCX0KKwl0ZXN0X2VtcHR5X2xpc3QoJmhlYWRfYik7CisKKwlpZiAobmVudHJpZXNfYiA9 PSAwKSB7CisJCXJldHVybjsKKwl9CisKKwlsaXN0X2hlYWRfdCBoZWFkX2M7CisJcWxfc3BsaXQo JmhlYWRfYSwgJmVudHJpZXNbbmVudHJpZXNfYV0sICZoZWFkX2MsIGxpbmspOworCWlmIChuZW50 cmllc19hID09IDApIHsKKwkJdGVzdF9lbXB0eV9saXN0KCZoZWFkX2EpOworCX0gZWxzZSB7CisJ CXRlc3RfZW50cmllc19saXN0KCZoZWFkX2EsIGVudHJpZXMsIG5lbnRyaWVzX2EpOworCX0KKwl0 ZXN0X2VudHJpZXNfbGlzdCgmaGVhZF9jLCBlbnRyaWVzICsgbmVudHJpZXNfYSwgbmVudHJpZXNf Yik7Cit9CisKK1RFU1RfQkVHSU4odGVzdF9xbF9jb25jYXRfc3BsaXQpIHsKKwlsaXN0X3QgZW50 cmllc1tORU5UUklFU107CisKKwl0ZXN0X2NvbmNhdF9zcGxpdF9lbnRyaWVzKGVudHJpZXMsIDAs IDApOworCisJdGVzdF9jb25jYXRfc3BsaXRfZW50cmllcyhlbnRyaWVzLCAwLCAxKTsKKwl0ZXN0 X2NvbmNhdF9zcGxpdF9lbnRyaWVzKGVudHJpZXMsIDEsIDApOworCisJdGVzdF9jb25jYXRfc3Bs aXRfZW50cmllcyhlbnRyaWVzLCAwLCBORU5UUklFUyk7CisJdGVzdF9jb25jYXRfc3BsaXRfZW50 cmllcyhlbnRyaWVzLCAxLCBORU5UUklFUyAtIDEpOworCXRlc3RfY29uY2F0X3NwbGl0X2VudHJp ZXMoZW50cmllcywgTkVOVFJJRVMgLyAyLAorCSAgICBORU5UUklFUyAtIE5FTlRSSUVTIC8gMik7 CisJdGVzdF9jb25jYXRfc3BsaXRfZW50cmllcyhlbnRyaWVzLCBORU5UUklFUyAtIDEsIDEpOwor CXRlc3RfY29uY2F0X3NwbGl0X2VudHJpZXMoZW50cmllcywgTkVOVFJJRVMsIDApOworfQorVEVT VF9FTkQKKworVEVTVF9CRUdJTih0ZXN0X3FsX3JvdGF0ZSkgeworCWxpc3RfaGVhZF90IGhlYWQ7 CisJbGlzdF90IGVudHJpZXNbTkVOVFJJRVNdOworCXVuc2lnbmVkIGk7CisKKwlxbF9uZXcoJmhl YWQpOworCWluaXRfZW50cmllcyhlbnRyaWVzLCBzaXplb2YoZW50cmllcykvc2l6ZW9mKGxpc3Rf dCkpOworCWZvciAoaSA9IDA7IGkgPCBORU5UUklFUzsgaSsrKSB7CisJCXFsX3RhaWxfaW5zZXJ0 KCZoZWFkLCAmZW50cmllc1tpXSwgbGluayk7CisJfQorCisJY2hhciBoZWFkX2lkID0gcWxfZmly c3QoJmhlYWQpLT5pZDsKKwlmb3IgKGkgPSAwOyBpIDwgTkVOVFJJRVM7IGkrKykgeworCQlhc3Nl cnRfY19lcShxbF9maXJzdCgmaGVhZCktPmlkLCBoZWFkX2lkLCAiIik7CisJCXFsX3JvdGF0ZSgm aGVhZCwgbGluayk7CisJCWFzc2VydF9jX2VxKHFsX2xhc3QoJmhlYWQsIGxpbmspLT5pZCwgaGVh ZF9pZCwgIiIpOworCQloZWFkX2lkKys7CisJfQorCXRlc3RfZW50cmllc19saXN0KCZoZWFkLCBl bnRyaWVzLCBORU5UUklFUyk7Cit9CitURVNUX0VORAorCitURVNUX0JFR0lOKHRlc3RfcWxfbW92 ZSkgeworCWxpc3RfaGVhZF90IGhlYWRfZGVzdCwgaGVhZF9zcmM7CisJbGlzdF90IGVudHJpZXNb TkVOVFJJRVNdOworCXVuc2lnbmVkIGk7CisKKwlxbF9uZXcoJmhlYWRfc3JjKTsKKwlxbF9tb3Zl KCZoZWFkX2Rlc3QsICZoZWFkX3NyYyk7CisJdGVzdF9lbXB0eV9saXN0KCZoZWFkX3NyYyk7CisJ dGVzdF9lbXB0eV9saXN0KCZoZWFkX2Rlc3QpOworCisJaW5pdF9lbnRyaWVzKGVudHJpZXMsIHNp emVvZihlbnRyaWVzKS9zaXplb2YobGlzdF90KSk7CisJZm9yIChpID0gMDsgaSA8IE5FTlRSSUVT OyBpKyspIHsKKwkJcWxfdGFpbF9pbnNlcnQoJmhlYWRfc3JjLCAmZW50cmllc1tpXSwgbGluayk7 CisJfQorCXFsX21vdmUoJmhlYWRfZGVzdCwgJmhlYWRfc3JjKTsKKwl0ZXN0X2VtcHR5X2xpc3Qo JmhlYWRfc3JjKTsKKwl0ZXN0X2VudHJpZXNfbGlzdCgmaGVhZF9kZXN0LCBlbnRyaWVzLCBORU5U UklFUyk7Cit9CitURVNUX0VORAorCitpbnQKK21haW4odm9pZCkgeworCXJldHVybiB0ZXN0KAor CSAgICB0ZXN0X3FsX2VtcHR5LAorCSAgICB0ZXN0X3FsX3RhaWxfaW5zZXJ0LAorCSAgICB0ZXN0 X3FsX3RhaWxfcmVtb3ZlLAorCSAgICB0ZXN0X3FsX2hlYWRfaW5zZXJ0LAorCSAgICB0ZXN0X3Fs X2hlYWRfcmVtb3ZlLAorCSAgICB0ZXN0X3FsX2luc2VydCwKKwkgICAgdGVzdF9xbF9jb25jYXRf c3BsaXQsCisJICAgIHRlc3RfcWxfcm90YXRlLAorCSAgICB0ZXN0X3FsX21vdmUpOworfQoKZGlm ZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5p dC9xci5jIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0 L3FyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTZlZWQwZQotLS0gL2Rl di9udWxsCisrKyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3Qv dW5pdC9xci5jCkBAIC0wLDAgKzEsMjQzIEBACisjaW5jbHVkZSAidGVzdC9qZW1hbGxvY190ZXN0 LmgiCisKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9xci5oIgorCisvKiBOdW1iZXIgb2Yg cmluZyBlbnRyaWVzLCBpbiBbMi4uMjZdLiAqLworI2RlZmluZSBORU5UUklFUyA5CisvKiBTcGxp dCBpbmRleCwgaW4gWzEuLk5FTlRSSUVTKS4gKi8KKyNkZWZpbmUgU1BMSVRfSU5ERVggNQorCit0 eXBlZGVmIHN0cnVjdCByaW5nX3MgcmluZ190OworCitzdHJ1Y3QgcmluZ19zIHsKKwlxcihyaW5n X3QpIGxpbms7CisJY2hhciBpZDsKK307CisKK3N0YXRpYyB2b2lkCitpbml0X2VudHJpZXMocmlu Z190ICplbnRyaWVzKSB7CisJdW5zaWduZWQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBORU5UUklF UzsgaSsrKSB7CisJCXFyX25ldygmZW50cmllc1tpXSwgbGluayk7CisJCWVudHJpZXNbaV0uaWQg PSAnYScgKyBpOworCX0KK30KKworc3RhdGljIHZvaWQKK3Rlc3RfaW5kZXBlbmRlbnRfZW50cmll cyhyaW5nX3QgKmVudHJpZXMpIHsKKwlyaW5nX3QgKnQ7CisJdW5zaWduZWQgaSwgajsKKworCWZv ciAoaSA9IDA7IGkgPCBORU5UUklFUzsgaSsrKSB7CisJCWogPSAwOworCQlxcl9mb3JlYWNoKHQs ICZlbnRyaWVzW2ldLCBsaW5rKSB7CisJCQlqKys7CisJCX0KKwkJZXhwZWN0X3VfZXEoaiwgMSwK KwkJICAgICJJdGVyYXRpb24gb3ZlciBzaW5nbGUtZWxlbWVudCByaW5nIHNob3VsZCB2aXNpdCBw cmVjaXNlbHkgIgorCQkgICAgIm9uZSBlbGVtZW50Iik7CisJfQorCWZvciAoaSA9IDA7IGkgPCBO RU5UUklFUzsgaSsrKSB7CisJCWogPSAwOworCQlxcl9yZXZlcnNlX2ZvcmVhY2godCwgJmVudHJp ZXNbaV0sIGxpbmspIHsKKwkJCWorKzsKKwkJfQorCQlleHBlY3RfdV9lcShqLCAxLAorCQkgICAg Ikl0ZXJhdGlvbiBvdmVyIHNpbmdsZS1lbGVtZW50IHJpbmcgc2hvdWxkIHZpc2l0IHByZWNpc2Vs eSAiCisJCSAgICAib25lIGVsZW1lbnQiKTsKKwl9CisJZm9yIChpID0gMDsgaSA8IE5FTlRSSUVT OyBpKyspIHsKKwkJdCA9IHFyX25leHQoJmVudHJpZXNbaV0sIGxpbmspOworCQlleHBlY3RfcHRy X2VxKHQsICZlbnRyaWVzW2ldLAorCQkgICAgIk5leHQgZWxlbWVudCBpbiBzaW5nbGUtZWxlbWVu dCByaW5nIHNob3VsZCBiZSBzYW1lIGFzICIKKwkJICAgICJjdXJyZW50IGVsZW1lbnQiKTsKKwl9 CisJZm9yIChpID0gMDsgaSA8IE5FTlRSSUVTOyBpKyspIHsKKwkJdCA9IHFyX3ByZXYoJmVudHJp ZXNbaV0sIGxpbmspOworCQlleHBlY3RfcHRyX2VxKHQsICZlbnRyaWVzW2ldLAorCQkgICAgIlBy ZXZpb3VzIGVsZW1lbnQgaW4gc2luZ2xlLWVsZW1lbnQgcmluZyBzaG91bGQgYmUgc2FtZSBhcyAi CisJCSAgICAiY3VycmVudCBlbGVtZW50Iik7CisJfQorfQorCitURVNUX0JFR0lOKHRlc3RfcXJf b25lKSB7CisJcmluZ190IGVudHJpZXNbTkVOVFJJRVNdOworCisJaW5pdF9lbnRyaWVzKGVudHJp ZXMpOworCXRlc3RfaW5kZXBlbmRlbnRfZW50cmllcyhlbnRyaWVzKTsKK30KK1RFU1RfRU5ECisK K3N0YXRpYyB2b2lkCit0ZXN0X2VudHJpZXNfcmluZyhyaW5nX3QgKmVudHJpZXMpIHsKKwlyaW5n X3QgKnQ7CisJdW5zaWduZWQgaSwgajsKKworCWZvciAoaSA9IDA7IGkgPCBORU5UUklFUzsgaSsr KSB7CisJCWogPSAwOworCQlxcl9mb3JlYWNoKHQsICZlbnRyaWVzW2ldLCBsaW5rKSB7CisJCQll eHBlY3RfY19lcSh0LT5pZCwgZW50cmllc1soaStqKSAlIE5FTlRSSUVTXS5pZCwKKwkJCSAgICAi RWxlbWVudCBpZCBtaXNtYXRjaCIpOworCQkJaisrOworCQl9CisJfQorCWZvciAoaSA9IDA7IGkg PCBORU5UUklFUzsgaSsrKSB7CisJCWogPSAwOworCQlxcl9yZXZlcnNlX2ZvcmVhY2godCwgJmVu dHJpZXNbaV0sIGxpbmspIHsKKwkJCWV4cGVjdF9jX2VxKHQtPmlkLCBlbnRyaWVzWyhORU5UUklF UytpLWotMSkgJQorCQkJICAgIE5FTlRSSUVTXS5pZCwgIkVsZW1lbnQgaWQgbWlzbWF0Y2giKTsK KwkJCWorKzsKKwkJfQorCX0KKwlmb3IgKGkgPSAwOyBpIDwgTkVOVFJJRVM7IGkrKykgeworCQl0 ID0gcXJfbmV4dCgmZW50cmllc1tpXSwgbGluayk7CisJCWV4cGVjdF9jX2VxKHQtPmlkLCBlbnRy aWVzWyhpKzEpICUgTkVOVFJJRVNdLmlkLAorCQkgICAgIkVsZW1lbnQgaWQgbWlzbWF0Y2giKTsK Kwl9CisJZm9yIChpID0gMDsgaSA8IE5FTlRSSUVTOyBpKyspIHsKKwkJdCA9IHFyX3ByZXYoJmVu dHJpZXNbaV0sIGxpbmspOworCQlleHBlY3RfY19lcSh0LT5pZCwgZW50cmllc1soTkVOVFJJRVMr aS0xKSAlIE5FTlRSSUVTXS5pZCwKKwkJICAgICJFbGVtZW50IGlkIG1pc21hdGNoIik7CisJfQor fQorCitURVNUX0JFR0lOKHRlc3RfcXJfYWZ0ZXJfaW5zZXJ0KSB7CisJcmluZ190IGVudHJpZXNb TkVOVFJJRVNdOworCXVuc2lnbmVkIGk7CisKKwlpbml0X2VudHJpZXMoZW50cmllcyk7CisJZm9y IChpID0gMTsgaSA8IE5FTlRSSUVTOyBpKyspIHsKKwkJcXJfYWZ0ZXJfaW5zZXJ0KCZlbnRyaWVz W2kgLSAxXSwgJmVudHJpZXNbaV0sIGxpbmspOworCX0KKwl0ZXN0X2VudHJpZXNfcmluZyhlbnRy aWVzKTsKK30KK1RFU1RfRU5ECisKK1RFU1RfQkVHSU4odGVzdF9xcl9yZW1vdmUpIHsKKwlyaW5n X3QgZW50cmllc1tORU5UUklFU107CisJcmluZ190ICp0OworCXVuc2lnbmVkIGksIGo7CisKKwlp bml0X2VudHJpZXMoZW50cmllcyk7CisJZm9yIChpID0gMTsgaSA8IE5FTlRSSUVTOyBpKyspIHsK KwkJcXJfYWZ0ZXJfaW5zZXJ0KCZlbnRyaWVzW2kgLSAxXSwgJmVudHJpZXNbaV0sIGxpbmspOwor CX0KKworCWZvciAoaSA9IDA7IGkgPCBORU5UUklFUzsgaSsrKSB7CisJCWogPSAwOworCQlxcl9m b3JlYWNoKHQsICZlbnRyaWVzW2ldLCBsaW5rKSB7CisJCQlleHBlY3RfY19lcSh0LT5pZCwgZW50 cmllc1tpK2pdLmlkLAorCQkJICAgICJFbGVtZW50IGlkIG1pc21hdGNoIik7CisJCQlqKys7CisJ CX0KKwkJaiA9IDA7CisJCXFyX3JldmVyc2VfZm9yZWFjaCh0LCAmZW50cmllc1tpXSwgbGluaykg eworCQkJZXhwZWN0X2NfZXEodC0+aWQsIGVudHJpZXNbTkVOVFJJRVMgLSAxIC0gal0uaWQsCisJ CQkiRWxlbWVudCBpZCBtaXNtYXRjaCIpOworCQkJaisrOworCQl9CisJCXFyX3JlbW92ZSgmZW50 cmllc1tpXSwgbGluayk7CisJfQorCXRlc3RfaW5kZXBlbmRlbnRfZW50cmllcyhlbnRyaWVzKTsK K30KK1RFU1RfRU5ECisKK1RFU1RfQkVHSU4odGVzdF9xcl9iZWZvcmVfaW5zZXJ0KSB7CisJcmlu Z190IGVudHJpZXNbTkVOVFJJRVNdOworCXJpbmdfdCAqdDsKKwl1bnNpZ25lZCBpLCBqOworCisJ aW5pdF9lbnRyaWVzKGVudHJpZXMpOworCWZvciAoaSA9IDE7IGkgPCBORU5UUklFUzsgaSsrKSB7 CisJCXFyX2JlZm9yZV9pbnNlcnQoJmVudHJpZXNbaSAtIDFdLCAmZW50cmllc1tpXSwgbGluayk7 CisJfQorCWZvciAoaSA9IDA7IGkgPCBORU5UUklFUzsgaSsrKSB7CisJCWogPSAwOworCQlxcl9m b3JlYWNoKHQsICZlbnRyaWVzW2ldLCBsaW5rKSB7CisJCQlleHBlY3RfY19lcSh0LT5pZCwgZW50 cmllc1soTkVOVFJJRVMraS1qKSAlCisJCQkgICAgTkVOVFJJRVNdLmlkLCAiRWxlbWVudCBpZCBt aXNtYXRjaCIpOworCQkJaisrOworCQl9CisJfQorCWZvciAoaSA9IDA7IGkgPCBORU5UUklFUzsg aSsrKSB7CisJCWogPSAwOworCQlxcl9yZXZlcnNlX2ZvcmVhY2godCwgJmVudHJpZXNbaV0sIGxp bmspIHsKKwkJCWV4cGVjdF9jX2VxKHQtPmlkLCBlbnRyaWVzWyhpK2orMSkgJSBORU5UUklFU10u aWQsCisJCQkgICAgIkVsZW1lbnQgaWQgbWlzbWF0Y2giKTsKKwkJCWorKzsKKwkJfQorCX0KKwlm b3IgKGkgPSAwOyBpIDwgTkVOVFJJRVM7IGkrKykgeworCQl0ID0gcXJfbmV4dCgmZW50cmllc1tp XSwgbGluayk7CisJCWV4cGVjdF9jX2VxKHQtPmlkLCBlbnRyaWVzWyhORU5UUklFUytpLTEpICUg TkVOVFJJRVNdLmlkLAorCQkgICAgIkVsZW1lbnQgaWQgbWlzbWF0Y2giKTsKKwl9CisJZm9yIChp ID0gMDsgaSA8IE5FTlRSSUVTOyBpKyspIHsKKwkJdCA9IHFyX3ByZXYoJmVudHJpZXNbaV0sIGxp bmspOworCQlleHBlY3RfY19lcSh0LT5pZCwgZW50cmllc1soaSsxKSAlIE5FTlRSSUVTXS5pZCwK KwkJICAgICJFbGVtZW50IGlkIG1pc21hdGNoIik7CisJfQorfQorVEVTVF9FTkQKKworc3RhdGlj IHZvaWQKK3Rlc3Rfc3BsaXRfZW50cmllcyhyaW5nX3QgKmVudHJpZXMpIHsKKwlyaW5nX3QgKnQ7 CisJdW5zaWduZWQgaSwgajsKKworCWZvciAoaSA9IDA7IGkgPCBORU5UUklFUzsgaSsrKSB7CisJ CWogPSAwOworCQlxcl9mb3JlYWNoKHQsICZlbnRyaWVzW2ldLCBsaW5rKSB7CisJCQlpZiAoaSA8 IFNQTElUX0lOREVYKSB7CisJCQkJZXhwZWN0X2NfZXEodC0+aWQsCisJCQkJICAgIGVudHJpZXNb KGkraikgJSBTUExJVF9JTkRFWF0uaWQsCisJCQkJICAgICJFbGVtZW50IGlkIG1pc21hdGNoIik7 CisJCQl9IGVsc2UgeworCQkJCWV4cGVjdF9jX2VxKHQtPmlkLCBlbnRyaWVzWyhpK2otU1BMSVRf SU5ERVgpICUKKwkJCQkgICAgKE5FTlRSSUVTLVNQTElUX0lOREVYKSArIFNQTElUX0lOREVYXS5p ZCwKKwkJCQkgICAgIkVsZW1lbnQgaWQgbWlzbWF0Y2giKTsKKwkJCX0KKwkJCWorKzsKKwkJfQor CX0KK30KKworVEVTVF9CRUdJTih0ZXN0X3FyX21lbGRfc3BsaXQpIHsKKwlyaW5nX3QgZW50cmll c1tORU5UUklFU107CisJdW5zaWduZWQgaTsKKworCWluaXRfZW50cmllcyhlbnRyaWVzKTsKKwlm b3IgKGkgPSAxOyBpIDwgTkVOVFJJRVM7IGkrKykgeworCQlxcl9hZnRlcl9pbnNlcnQoJmVudHJp ZXNbaSAtIDFdLCAmZW50cmllc1tpXSwgbGluayk7CisJfQorCisJcXJfc3BsaXQoJmVudHJpZXNb MF0sICZlbnRyaWVzW1NQTElUX0lOREVYXSwgbGluayk7CisJdGVzdF9zcGxpdF9lbnRyaWVzKGVu dHJpZXMpOworCisJcXJfbWVsZCgmZW50cmllc1swXSwgJmVudHJpZXNbU1BMSVRfSU5ERVhdLCBs aW5rKTsKKwl0ZXN0X2VudHJpZXNfcmluZyhlbnRyaWVzKTsKKworCXFyX21lbGQoJmVudHJpZXNb MF0sICZlbnRyaWVzW1NQTElUX0lOREVYXSwgbGluayk7CisJdGVzdF9zcGxpdF9lbnRyaWVzKGVu dHJpZXMpOworCisJcXJfc3BsaXQoJmVudHJpZXNbMF0sICZlbnRyaWVzW1NQTElUX0lOREVYXSwg bGluayk7CisJdGVzdF9lbnRyaWVzX3JpbmcoZW50cmllcyk7CisKKwlxcl9zcGxpdCgmZW50cmll c1swXSwgJmVudHJpZXNbMF0sIGxpbmspOworCXRlc3RfZW50cmllc19yaW5nKGVudHJpZXMpOwor CisJcXJfbWVsZCgmZW50cmllc1swXSwgJmVudHJpZXNbMF0sIGxpbmspOworCXRlc3RfZW50cmll c19yaW5nKGVudHJpZXMpOworfQorVEVTVF9FTkQKKworaW50CittYWluKHZvaWQpIHsKKwlyZXR1 cm4gdGVzdCgKKwkgICAgdGVzdF9xcl9vbmUsCisJICAgIHRlc3RfcXJfYWZ0ZXJfaW5zZXJ0LAor CSAgICB0ZXN0X3FyX3JlbW92ZSwKKwkgICAgdGVzdF9xcl9iZWZvcmVfaW5zZXJ0LAorCSAgICB0 ZXN0X3FyX21lbGRfc3BsaXQpOworfQoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1 aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9yYi5jIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVp bGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L3JiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMC4uODI3ZWM1MQotLS0gL2Rldi9udWxsCisrKyBiLzM4OS1kcy1iYXNlLTMuMy4w LWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9yYi5jCkBAIC0wLDAgKzEsMTAxOSBAQAor I2luY2x1ZGUgInRlc3QvamVtYWxsb2NfdGVzdC5oIgorCisjaW5jbHVkZSA8c3RkbGliLmg+CisK KyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9yYi5oIgorCisjZGVmaW5lIHJidG5fYmxhY2tf aGVpZ2h0KGFfdHlwZSwgYV9maWVsZCwgYV9yYnQsIHJfaGVpZ2h0KSBkbyB7CVwKKwlhX3R5cGUg KnJicF9iaF90OwkJCQkJCVwKKwlmb3IgKHJicF9iaF90ID0gKGFfcmJ0KS0+cmJ0X3Jvb3QsIChy X2hlaWdodCkgPSAwOyByYnBfYmhfdCAhPQlcCisJICAgIE5VTEw7IHJicF9iaF90ID0gcmJ0bl9s ZWZ0X2dldChhX3R5cGUsIGFfZmllbGQsCQlcCisJICAgIHJicF9iaF90KSkgewkJCQkJCVwKKwkJ aWYgKCFyYnRuX3JlZF9nZXQoYV90eXBlLCBhX2ZpZWxkLCByYnBfYmhfdCkpIHsJCVwKKwkJKHJf aGVpZ2h0KSsrOwkJCQkJCVwKKwkJfQkJCQkJCQlcCisJfQkJCQkJCQkJXAorfSB3aGlsZSAoMCkK Kworc3RhdGljIGJvb2wgc3VtbWFyaXplX2Fsd2F5c19yZXR1cm5zX3RydWUgPSBmYWxzZTsKKwor dHlwZWRlZiBzdHJ1Y3Qgbm9kZV9zIG5vZGVfdDsKK3N0cnVjdCBub2RlX3MgeworI2RlZmluZSBO T0RFX01BR0lDIDB4OTgyM2FmN2UKKwl1aW50MzJfdCBtYWdpYzsKKwlyYl9ub2RlKG5vZGVfdCkg bGluazsKKwkvKiBPcmRlciB1c2VkIGJ5IG5vZGVzLiAqLworCXVpbnQ2NF90IGtleTsKKwkvKgor CSAqIE91ciBtYWRlLXVwIHN1bW1hcnkgcHJvcGVydHkgaXMgInNwZWNpYWxuZXNzIiwgd2l0aCBz dW1tYXJpemF0aW9uCisJICogdGFraW5nIHRoZSBtYXguCisJICovCisJdWludDY0X3Qgc3BlY2lh bG5lc3M7CisKKwkvKgorCSAqIFVzZWQgYnkgc29tZSBvZiB0aGUgdGVzdCByYW5kb21pemF0aW9u IHRvIGF2b2lkIGRvdWJsZS1yZW1vdmluZworCSAqIG5vZGVzLgorCSAqLworCWJvb2wgbWlkX3Jl bW92ZTsKKworCS8qCisJICogVG8gdGVzdCBzZWFyY2hpbmcgZnVuY3Rpb25hbGl0eSwgd2Ugd2Fu dCB0byB0ZW1wb3JhcmlseSB3ZWFrZW4gdGhlCisJICogb3JkZXJpbmcgdG8gYWxsb3cgbm9uLWVx dWFsIG5vZGVzIHRoYXQgbmV2ZXJ0aGVsZXNzIGNvbXBhcmUgZXF1YWwuCisJICovCisJYm9vbCBh bGxvd19kdXBsaWNhdGVzOworCisJLyoKKwkgKiBJbiBjaGVja19jb25zaXN0ZW5jeSwgaXQncyBo YW5keSB0byBrbm93IGEgbm9kZSdzIHJhbmsgaW4gdGhlIHRyZWU7CisJICogdGhpcyB0cmFja3Mg aXQgKGJ1dCBvbmx5IHRoZXJlOyBub3QgYWxsIHRlc3RzIHVzZSB0aGlzKS4KKwkgKi8KKwlpbnQg cmFuazsKKwlpbnQgZmlsdGVyZWRfcmFuazsKKworCS8qCisJICogUmVwbGljYXRlIHRoZSBpbnRl cm5hbCBzdHJ1Y3R1cmUgb2YgdGhlIHRyZWUsIHRvIG1ha2Ugc3VyZSB0aGUKKwkgKiBpbXBsZW1l bnRhdGlvbiBkb2Vzbid0IG1pc3MgYW55IHVwZGF0ZXMuCisJICovCisJY29uc3Qgbm9kZV90ICpz dW1tYXJ5X2xjaGlsZDsKKwljb25zdCBub2RlX3QgKnN1bW1hcnlfcmNoaWxkOworCXVpbnQ2NF90 IHN1bW1hcnlfbWF4X3NwZWNpYWxuZXNzOworfTsKKworc3RhdGljIGludAorbm9kZV9jbXAoY29u c3Qgbm9kZV90ICphLCBjb25zdCBub2RlX3QgKmIpIHsKKwlpbnQgcmV0OworCisJZXhwZWN0X3Uz Ml9lcShhLT5tYWdpYywgTk9ERV9NQUdJQywgIkJhZCBtYWdpYyIpOworCWV4cGVjdF91MzJfZXEo Yi0+bWFnaWMsIE5PREVfTUFHSUMsICJCYWQgbWFnaWMiKTsKKworCXJldCA9IChhLT5rZXkgPiBi LT5rZXkpIC0gKGEtPmtleSA8IGItPmtleSk7CisJaWYgKHJldCA9PSAwICYmICFhLT5hbGxvd19k dXBsaWNhdGVzKSB7CisJCS8qCisJCSAqIER1cGxpY2F0ZXMgYXJlIG5vdCBhbGxvd2VkIGluIHRo ZSB0cmVlLCBzbyBmb3JjZSBhbgorCQkgKiBhcmJpdHJhcnkgb3JkZXJpbmcgZm9yIG5vbi1pZGVu dGljYWwgaXRlbXMgd2l0aCBlcXVhbCBrZXlzLAorCQkgKiB1bmxlc3MgdGhlIHVzZXIgaXMgc2Vh cmNoaW5nIGFuZCB3YW50cyB0byBhbGxvdyB0aGUKKwkJICogZHVwbGljYXRlLgorCQkgKi8KKwkJ cmV0ID0gKCgodWludHB0cl90KWEpID4gKCh1aW50cHRyX3QpYikpCisJCSAgICAtICgoKHVpbnRw dHJfdClhKSA8ICgodWludHB0cl90KWIpKTsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGlj IHVpbnQ2NF90Citub2RlX3N1YnRyZWVfc3BlY2lhbG5lc3Mobm9kZV90ICpuLCBjb25zdCBub2Rl X3QgKmxjaGlsZCwKKyAgICBjb25zdCBub2RlX3QgKnJjaGlsZCkgeworCXVpbnQ2NF90IHN1YnRy ZWVfc3BlY2lhbG5lc3MgPSBuLT5zcGVjaWFsbmVzczsKKwlpZiAobGNoaWxkICE9IE5VTEwKKwkg ICAgJiYgbGNoaWxkLT5zdW1tYXJ5X21heF9zcGVjaWFsbmVzcyA+IHN1YnRyZWVfc3BlY2lhbG5l c3MpIHsKKwkJc3VidHJlZV9zcGVjaWFsbmVzcyA9IGxjaGlsZC0+c3VtbWFyeV9tYXhfc3BlY2lh bG5lc3M7CisJfQorCWlmIChyY2hpbGQgIT0gTlVMTAorCSAgICAmJiByY2hpbGQtPnN1bW1hcnlf bWF4X3NwZWNpYWxuZXNzID4gc3VidHJlZV9zcGVjaWFsbmVzcykgeworCQlzdWJ0cmVlX3NwZWNp YWxuZXNzID0gcmNoaWxkLT5zdW1tYXJ5X21heF9zcGVjaWFsbmVzczsKKwl9CisJcmV0dXJuIHN1 YnRyZWVfc3BlY2lhbG5lc3M7Cit9CisKK3N0YXRpYyBib29sCitub2RlX3N1bW1hcml6ZShub2Rl X3QgKmEsIGNvbnN0IG5vZGVfdCAqbGNoaWxkLCBjb25zdCBub2RlX3QgKnJjaGlsZCkgeworCXVp bnQ2NF90IG5ld19zdW1tYXJ5X21heF9zcGVjaWFsbmVzcyA9IG5vZGVfc3VidHJlZV9zcGVjaWFs bmVzcygKKwkgICAgYSwgbGNoaWxkLCByY2hpbGQpOworCWJvb2wgY2hhbmdlZCA9IChhLT5zdW1t YXJ5X2xjaGlsZCAhPSBsY2hpbGQpCisJICAgIHx8IChhLT5zdW1tYXJ5X3JjaGlsZCAhPSByY2hp bGQpCisJICAgIHx8IChuZXdfc3VtbWFyeV9tYXhfc3BlY2lhbG5lc3MgIT0gYS0+c3VtbWFyeV9t YXhfc3BlY2lhbG5lc3MpOworCWEtPnN1bW1hcnlfbWF4X3NwZWNpYWxuZXNzID0gbmV3X3N1bW1h cnlfbWF4X3NwZWNpYWxuZXNzOworCWEtPnN1bW1hcnlfbGNoaWxkID0gbGNoaWxkOworCWEtPnN1 bW1hcnlfcmNoaWxkID0gcmNoaWxkOworCXJldHVybiBjaGFuZ2VkIHx8IHN1bW1hcml6ZV9hbHdh eXNfcmV0dXJuc190cnVlOworfQorCit0eXBlZGVmIHJiX3RyZWUobm9kZV90KSB0cmVlX3Q7City Yl9zdW1tYXJpemVkX3Byb3RvKHN0YXRpYywgdHJlZV8sIHRyZWVfdCwgbm9kZV90KTsKK3JiX3N1 bW1hcml6ZWRfZ2VuKHN0YXRpYywgdHJlZV8sIHRyZWVfdCwgbm9kZV90LCBsaW5rLCBub2RlX2Nt cCwKKyAgICBub2RlX3N1bW1hcml6ZSk7CisKK3N0YXRpYyBib29sCitzcGVjaWFsbmVzc19maWx0 ZXJfbm9kZSh2b2lkICpjdHgsIG5vZGVfdCAqbm9kZSkgeworCXVpbnQ2NF90IHNwZWNpYWxuZXNz ID0gKih1aW50NjRfdCAqKWN0eDsKKwlyZXR1cm4gbm9kZS0+c3BlY2lhbG5lc3MgPj0gc3BlY2lh bG5lc3M7Cit9CisKK3N0YXRpYyBib29sCitzcGVjaWFsbmVzc19maWx0ZXJfc3VidHJlZSh2b2lk ICpjdHgsIG5vZGVfdCAqbm9kZSkgeworCXVpbnQ2NF90IHNwZWNpYWxuZXNzID0gKih1aW50NjRf dCAqKWN0eDsKKwlyZXR1cm4gbm9kZS0+c3VtbWFyeV9tYXhfc3BlY2lhbG5lc3MgPj0gc3BlY2lh bG5lc3M7Cit9CisKK3N0YXRpYyBub2RlX3QgKgordHJlZV9pdGVyYXRlX2NiKHRyZWVfdCAqdHJl ZSwgbm9kZV90ICpub2RlLCB2b2lkICpkYXRhKSB7CisJdW5zaWduZWQgKmkgPSAodW5zaWduZWQg KilkYXRhOworCW5vZGVfdCAqc2VhcmNoX25vZGU7CisKKwlleHBlY3RfdTMyX2VxKG5vZGUtPm1h Z2ljLCBOT0RFX01BR0lDLCAiQmFkIG1hZ2ljIik7CisKKwkvKiBUZXN0IHJiX3NlYXJjaCgpLiAq LworCXNlYXJjaF9ub2RlID0gdHJlZV9zZWFyY2godHJlZSwgbm9kZSk7CisJZXhwZWN0X3B0cl9l cShzZWFyY2hfbm9kZSwgbm9kZSwKKwkgICAgInRyZWVfc2VhcmNoKCkgcmV0dXJuZWQgdW5leHBl Y3RlZCBub2RlIik7CisKKwkvKiBUZXN0IHJiX25zZWFyY2goKS4gKi8KKwlzZWFyY2hfbm9kZSA9 IHRyZWVfbnNlYXJjaCh0cmVlLCBub2RlKTsKKwlleHBlY3RfcHRyX2VxKHNlYXJjaF9ub2RlLCBu b2RlLAorCSAgICAidHJlZV9uc2VhcmNoKCkgcmV0dXJuZWQgdW5leHBlY3RlZCBub2RlIik7CisK KwkvKiBUZXN0IHJiX3BzZWFyY2goKS4gKi8KKwlzZWFyY2hfbm9kZSA9IHRyZWVfcHNlYXJjaCh0 cmVlLCBub2RlKTsKKwlleHBlY3RfcHRyX2VxKHNlYXJjaF9ub2RlLCBub2RlLAorCSAgICAidHJl ZV9wc2VhcmNoKCkgcmV0dXJuZWQgdW5leHBlY3RlZCBub2RlIik7CisKKwkoKmkpKys7CisKKwly ZXR1cm4gTlVMTDsKK30KKworVEVTVF9CRUdJTih0ZXN0X3JiX2VtcHR5KSB7CisJdHJlZV90IHRy ZWU7CisJbm9kZV90IGtleTsKKworCXRyZWVfbmV3KCZ0cmVlKTsKKworCWV4cGVjdF90cnVlKHRy ZWVfZW1wdHkoJnRyZWUpLCAiVHJlZSBzaG91bGQgYmUgZW1wdHkiKTsKKwlleHBlY3RfcHRyX251 bGwodHJlZV9maXJzdCgmdHJlZSksICJVbmV4cGVjdGVkIG5vZGUiKTsKKwlleHBlY3RfcHRyX251 bGwodHJlZV9sYXN0KCZ0cmVlKSwgIlVuZXhwZWN0ZWQgbm9kZSIpOworCisJa2V5LmtleSA9IDA7 CisJa2V5Lm1hZ2ljID0gTk9ERV9NQUdJQzsKKwlleHBlY3RfcHRyX251bGwodHJlZV9zZWFyY2go JnRyZWUsICZrZXkpLCAiVW5leHBlY3RlZCBub2RlIik7CisKKwlrZXkua2V5ID0gMDsKKwlrZXku bWFnaWMgPSBOT0RFX01BR0lDOworCWV4cGVjdF9wdHJfbnVsbCh0cmVlX25zZWFyY2goJnRyZWUs ICZrZXkpLCAiVW5leHBlY3RlZCBub2RlIik7CisKKwlrZXkua2V5ID0gMDsKKwlrZXkubWFnaWMg PSBOT0RFX01BR0lDOworCWV4cGVjdF9wdHJfbnVsbCh0cmVlX3BzZWFyY2goJnRyZWUsICZrZXkp LCAiVW5leHBlY3RlZCBub2RlIik7CisKKwl1bnNpZ25lZCBub2RlcyA9IDA7CisJdHJlZV9pdGVy X2ZpbHRlcmVkKCZ0cmVlLCBOVUxMLCAmdHJlZV9pdGVyYXRlX2NiLAorCSAgICAmbm9kZXMsICZz cGVjaWFsbmVzc19maWx0ZXJfbm9kZSwgJnNwZWNpYWxuZXNzX2ZpbHRlcl9zdWJ0cmVlLAorCSAg ICBOVUxMKTsKKwlleHBlY3RfdV9lcSgwLCBub2RlcywgIiIpOworCisJbm9kZXMgPSAwOworCXRy ZWVfcmV2ZXJzZV9pdGVyX2ZpbHRlcmVkKCZ0cmVlLCBOVUxMLCAmdHJlZV9pdGVyYXRlX2NiLAor CSAgICAmbm9kZXMsICZzcGVjaWFsbmVzc19maWx0ZXJfbm9kZSwgJnNwZWNpYWxuZXNzX2ZpbHRl cl9zdWJ0cmVlLAorCSAgICBOVUxMKTsKKwlleHBlY3RfdV9lcSgwLCBub2RlcywgIiIpOworCisJ ZXhwZWN0X3B0cl9udWxsKHRyZWVfZmlyc3RfZmlsdGVyZWQoJnRyZWUsICZzcGVjaWFsbmVzc19m aWx0ZXJfbm9kZSwKKwkgICAgJnNwZWNpYWxuZXNzX2ZpbHRlcl9zdWJ0cmVlLCBOVUxMKSwgIiIp OworCWV4cGVjdF9wdHJfbnVsbCh0cmVlX2xhc3RfZmlsdGVyZWQoJnRyZWUsICZzcGVjaWFsbmVz c19maWx0ZXJfbm9kZSwKKwkgICAgJnNwZWNpYWxuZXNzX2ZpbHRlcl9zdWJ0cmVlLCBOVUxMKSwg IiIpOworCisJa2V5LmtleSA9IDA7CisJa2V5Lm1hZ2ljID0gTk9ERV9NQUdJQzsKKwlleHBlY3Rf cHRyX251bGwodHJlZV9zZWFyY2hfZmlsdGVyZWQoJnRyZWUsICZrZXksCisJICAgICZzcGVjaWFs bmVzc19maWx0ZXJfbm9kZSwgJnNwZWNpYWxuZXNzX2ZpbHRlcl9zdWJ0cmVlLCBOVUxMKSwgIiIp OworCWV4cGVjdF9wdHJfbnVsbCh0cmVlX25zZWFyY2hfZmlsdGVyZWQoJnRyZWUsICZrZXksCisJ ICAgICZzcGVjaWFsbmVzc19maWx0ZXJfbm9kZSwgJnNwZWNpYWxuZXNzX2ZpbHRlcl9zdWJ0cmVl LCBOVUxMKSwgIiIpOworCWV4cGVjdF9wdHJfbnVsbCh0cmVlX3BzZWFyY2hfZmlsdGVyZWQoJnRy ZWUsICZrZXksCisJICAgICZzcGVjaWFsbmVzc19maWx0ZXJfbm9kZSwgJnNwZWNpYWxuZXNzX2Zp bHRlcl9zdWJ0cmVlLCBOVUxMKSwgIiIpOworfQorVEVTVF9FTkQKKworc3RhdGljIHVuc2lnbmVk Cit0cmVlX3JlY3Vyc2Uobm9kZV90ICpub2RlLCB1bnNpZ25lZCBibGFja19oZWlnaHQsIHVuc2ln bmVkIGJsYWNrX2RlcHRoKSB7CisJdW5zaWduZWQgcmV0ID0gMDsKKwlub2RlX3QgKmxlZnRfbm9k ZTsKKwlub2RlX3QgKnJpZ2h0X25vZGU7CisKKwlpZiAobm9kZSA9PSBOVUxMKSB7CisJCXJldHVy biByZXQ7CisJfQorCisJbGVmdF9ub2RlID0gcmJ0bl9sZWZ0X2dldChub2RlX3QsIGxpbmssIG5v ZGUpOworCXJpZ2h0X25vZGUgPSByYnRuX3JpZ2h0X2dldChub2RlX3QsIGxpbmssIG5vZGUpOwor CisJZXhwZWN0X3B0cl9lcShsZWZ0X25vZGUsIG5vZGUtPnN1bW1hcnlfbGNoaWxkLAorCSAgICAi c3VtbWFyeSBtaXNzZWQgYSB0cmVlIHVwZGF0ZSIpOworCWV4cGVjdF9wdHJfZXEocmlnaHRfbm9k ZSwgbm9kZS0+c3VtbWFyeV9yY2hpbGQsCisJICAgICJzdW1tYXJ5IG1pc3NlZCBhIHRyZWUgdXBk YXRlIik7CisKKwl1aW50NjRfdCBleHBlY3RlZF9zdWJ0cmVlX3NwZWNpYWxuZXNzID0gbm9kZV9z dWJ0cmVlX3NwZWNpYWxuZXNzKG5vZGUsCisJICAgIGxlZnRfbm9kZSwgcmlnaHRfbm9kZSk7CisJ ZXhwZWN0X3U2NF9lcShleHBlY3RlZF9zdWJ0cmVlX3NwZWNpYWxuZXNzLAorCSAgICBub2RlLT5z dW1tYXJ5X21heF9zcGVjaWFsbmVzcywgIkluY29ycmVjdCBzdW1tYXJ5Iik7CisKKwlpZiAoIXJi dG5fcmVkX2dldChub2RlX3QsIGxpbmssIG5vZGUpKSB7CisJCWJsYWNrX2RlcHRoKys7CisJfQor CisJLyogUmVkIG5vZGVzIG11c3QgYmUgaW50ZXJsZWF2ZWQgd2l0aCBibGFjayBub2Rlcy4gKi8K KwlpZiAocmJ0bl9yZWRfZ2V0KG5vZGVfdCwgbGluaywgbm9kZSkpIHsKKwkJaWYgKGxlZnRfbm9k ZSAhPSBOVUxMKSB7CisJCQlleHBlY3RfZmFsc2UocmJ0bl9yZWRfZ2V0KG5vZGVfdCwgbGluaywg bGVmdF9ub2RlKSwKKwkJCQkiTm9kZSBzaG91bGQgYmUgYmxhY2siKTsKKwkJfQorCQlpZiAocmln aHRfbm9kZSAhPSBOVUxMKSB7CisJCQlleHBlY3RfZmFsc2UocmJ0bl9yZWRfZ2V0KG5vZGVfdCwg bGluaywgcmlnaHRfbm9kZSksCisJCQkgICAgIk5vZGUgc2hvdWxkIGJlIGJsYWNrIik7CisJCX0K Kwl9CisKKwkvKiBTZWxmLiAqLworCWV4cGVjdF91MzJfZXEobm9kZS0+bWFnaWMsIE5PREVfTUFH SUMsICJCYWQgbWFnaWMiKTsKKworCS8qIExlZnQgc3VidHJlZS4gKi8KKwlpZiAobGVmdF9ub2Rl ICE9IE5VTEwpIHsKKwkJcmV0ICs9IHRyZWVfcmVjdXJzZShsZWZ0X25vZGUsIGJsYWNrX2hlaWdo dCwgYmxhY2tfZGVwdGgpOworCX0gZWxzZSB7CisJCXJldCArPSAoYmxhY2tfZGVwdGggIT0gYmxh Y2tfaGVpZ2h0KTsKKwl9CisKKwkvKiBSaWdodCBzdWJ0cmVlLiAqLworCWlmIChyaWdodF9ub2Rl ICE9IE5VTEwpIHsKKwkJcmV0ICs9IHRyZWVfcmVjdXJzZShyaWdodF9ub2RlLCBibGFja19oZWln aHQsIGJsYWNrX2RlcHRoKTsKKwl9IGVsc2UgeworCQlyZXQgKz0gKGJsYWNrX2RlcHRoICE9IGJs YWNrX2hlaWdodCk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHVuc2lnbmVkCit0 cmVlX2l0ZXJhdGUodHJlZV90ICp0cmVlKSB7CisJdW5zaWduZWQgaTsKKworCWkgPSAwOworCXRy ZWVfaXRlcih0cmVlLCBOVUxMLCB0cmVlX2l0ZXJhdGVfY2IsICh2b2lkICopJmkpOworCisJcmV0 dXJuIGk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZAordHJlZV9pdGVyYXRlX3JldmVyc2UodHJlZV90 ICp0cmVlKSB7CisJdW5zaWduZWQgaTsKKworCWkgPSAwOworCXRyZWVfcmV2ZXJzZV9pdGVyKHRy ZWUsIE5VTEwsIHRyZWVfaXRlcmF0ZV9jYiwgKHZvaWQgKikmaSk7CisKKwlyZXR1cm4gaTsKK30K Kworc3RhdGljIHZvaWQKK25vZGVfcmVtb3ZlKHRyZWVfdCAqdHJlZSwgbm9kZV90ICpub2RlLCB1 bnNpZ25lZCBubm9kZXMpIHsKKwlub2RlX3QgKnNlYXJjaF9ub2RlOworCXVuc2lnbmVkIGJsYWNr X2hlaWdodCwgaW1iYWxhbmNlczsKKworCXRyZWVfcmVtb3ZlKHRyZWUsIG5vZGUpOworCisJLyog VGVzdCByYl9uc2VhcmNoKCkuICovCisJc2VhcmNoX25vZGUgPSB0cmVlX25zZWFyY2godHJlZSwg bm9kZSk7CisJaWYgKHNlYXJjaF9ub2RlICE9IE5VTEwpIHsKKwkJZXhwZWN0X3U2NF9nZShzZWFy Y2hfbm9kZS0+a2V5LCBub2RlLT5rZXksCisJCSAgICAiS2V5IG9yZGVyaW5nIGVycm9yIik7CisJ fQorCisJLyogVGVzdCByYl9wc2VhcmNoKCkuICovCisJc2VhcmNoX25vZGUgPSB0cmVlX3BzZWFy Y2godHJlZSwgbm9kZSk7CisJaWYgKHNlYXJjaF9ub2RlICE9IE5VTEwpIHsKKwkJZXhwZWN0X3U2 NF9sZShzZWFyY2hfbm9kZS0+a2V5LCBub2RlLT5rZXksCisJCSAgICAiS2V5IG9yZGVyaW5nIGVy cm9yIik7CisJfQorCisJbm9kZS0+bWFnaWMgPSAwOworCisJcmJ0bl9ibGFja19oZWlnaHQobm9k ZV90LCBsaW5rLCB0cmVlLCBibGFja19oZWlnaHQpOworCWltYmFsYW5jZXMgPSB0cmVlX3JlY3Vy c2UodHJlZS0+cmJ0X3Jvb3QsIGJsYWNrX2hlaWdodCwgMCk7CisJZXhwZWN0X3VfZXEoaW1iYWxh bmNlcywgMCwgIlRyZWUgaXMgdW5iYWxhbmNlZCIpOworCWV4cGVjdF91X2VxKHRyZWVfaXRlcmF0 ZSh0cmVlKSwgbm5vZGVzLTEsCisJICAgICJVbmV4cGVjdGVkIG5vZGUgaXRlcmF0aW9uIGNvdW50 Iik7CisJZXhwZWN0X3VfZXEodHJlZV9pdGVyYXRlX3JldmVyc2UodHJlZSksIG5ub2Rlcy0xLAor CSAgICAiVW5leHBlY3RlZCBub2RlIGl0ZXJhdGlvbiBjb3VudCIpOworfQorCitzdGF0aWMgbm9k ZV90ICoKK3JlbW92ZV9pdGVyYXRlX2NiKHRyZWVfdCAqdHJlZSwgbm9kZV90ICpub2RlLCB2b2lk ICpkYXRhKSB7CisJdW5zaWduZWQgKm5ub2RlcyA9ICh1bnNpZ25lZCAqKWRhdGE7CisJbm9kZV90 ICpyZXQgPSB0cmVlX25leHQodHJlZSwgbm9kZSk7CisKKwlub2RlX3JlbW92ZSh0cmVlLCBub2Rl LCAqbm5vZGVzKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBub2RlX3QgKgorcmVtb3Zl X3JldmVyc2VfaXRlcmF0ZV9jYih0cmVlX3QgKnRyZWUsIG5vZGVfdCAqbm9kZSwgdm9pZCAqZGF0 YSkgeworCXVuc2lnbmVkICpubm9kZXMgPSAodW5zaWduZWQgKilkYXRhOworCW5vZGVfdCAqcmV0 ID0gdHJlZV9wcmV2KHRyZWUsIG5vZGUpOworCisJbm9kZV9yZW1vdmUodHJlZSwgbm9kZSwgKm5u b2Rlcyk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZAorZGVzdHJveV9jYihub2Rl X3QgKm5vZGUsIHZvaWQgKmRhdGEpIHsKKwl1bnNpZ25lZCAqbm5vZGVzID0gKHVuc2lnbmVkICop ZGF0YTsKKworCWV4cGVjdF91X2d0KCpubm9kZXMsIDAsICJEZXN0cnVjdGlvbiByZW1vdmVkIHRv byBtYW55IG5vZGVzIik7CisJKCpubm9kZXMpLS07Cit9CisKK1RFU1RfQkVHSU4odGVzdF9yYl9y YW5kb20pIHsKKwllbnVtIHsKKwkJTk5PREVTID0gMjUsCisJCU5CQUdTID0gNTAwLAorCQlTRUVE ID0gNDIKKwl9OworCXNmbXRfdCAqc2ZtdDsKKwl1aW50NjRfdCBiYWdbTk5PREVTXTsKKwl0cmVl X3QgdHJlZTsKKwlub2RlX3Qgbm9kZXNbTk5PREVTXTsKKwl1bnNpZ25lZCBpLCBqLCBrLCBibGFj a19oZWlnaHQsIGltYmFsYW5jZXM7CisKKwlzZm10ID0gaW5pdF9nZW5fcmFuZChTRUVEKTsKKwlm b3IgKGkgPSAwOyBpIDwgTkJBR1M7IGkrKykgeworCQlzd2l0Y2ggKGkpIHsKKwkJY2FzZSAwOgor CQkJLyogSW5zZXJ0IGluIG9yZGVyLiAqLworCQkJZm9yIChqID0gMDsgaiA8IE5OT0RFUzsgaisr KSB7CisJCQkJYmFnW2pdID0gajsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQkvKiBJ bnNlcnQgaW4gcmV2ZXJzZSBvcmRlci4gKi8KKwkJCWZvciAoaiA9IDA7IGogPCBOTk9ERVM7IGor KykgeworCQkJCWJhZ1tqXSA9IE5OT0RFUyAtIGogLSAxOworCQkJfQorCQkJYnJlYWs7CisJCWRl ZmF1bHQ6CisJCQlmb3IgKGogPSAwOyBqIDwgTk5PREVTOyBqKyspIHsKKwkJCQliYWdbal0gPSBn ZW5fcmFuZDY0X3JhbmdlKHNmbXQsIE5OT0RFUyk7CisJCQl9CisJCX0KKworCQkvKgorCQkgKiBX ZSBhbHRlcm5hdGUgdGVzdCBiZWhhdmlvciB3aXRoIGEgcGVyaW9kIG9mIDIgaGVyZSwgYW5kIGEK KwkJICogcGVyaW9kIG9mIDUgZG93biBiZWxvdywgc28gdGhlcmUncyBubyBjeWNsZSBpbiB3aGlj aCBjZXJ0YWluCisJCSAqIGNvbWJpbmF0aW9ucyBnZXQgb21pdHRlZC4KKwkJICovCisJCXN1bW1h cml6ZV9hbHdheXNfcmV0dXJuc190cnVlID0gKGkgJSAyID09IDApOworCisJCWZvciAoaiA9IDE7 IGogPD0gTk5PREVTOyBqKyspIHsKKwkJCS8qIEluaXRpYWxpemUgdHJlZSBhbmQgbm9kZXMuICov CisJCQl0cmVlX25ldygmdHJlZSk7CisJCQlmb3IgKGsgPSAwOyBrIDwgajsgaysrKSB7CisJCQkJ bm9kZXNba10ubWFnaWMgPSBOT0RFX01BR0lDOworCQkJCW5vZGVzW2tdLmtleSA9IGJhZ1trXTsK KwkJCQlub2Rlc1trXS5zcGVjaWFsbmVzcyA9IGdlbl9yYW5kNjRfcmFuZ2Uoc2ZtdCwKKwkJCQkg ICAgTk5PREVTKTsKKwkJCQlub2Rlc1trXS5taWRfcmVtb3ZlID0gZmFsc2U7CisJCQkJbm9kZXNb a10uYWxsb3dfZHVwbGljYXRlcyA9IGZhbHNlOworCQkJCW5vZGVzW2tdLnN1bW1hcnlfbGNoaWxk ID0gTlVMTDsKKwkJCQlub2Rlc1trXS5zdW1tYXJ5X3JjaGlsZCA9IE5VTEw7CisJCQkJbm9kZXNb a10uc3VtbWFyeV9tYXhfc3BlY2lhbG5lc3MgPSAwOworCQkJfQorCisJCQkvKiBJbnNlcnQgbm9k ZXMuICovCisJCQlmb3IgKGsgPSAwOyBrIDwgajsgaysrKSB7CisJCQkJdHJlZV9pbnNlcnQoJnRy ZWUsICZub2Rlc1trXSk7CisKKwkJCQlyYnRuX2JsYWNrX2hlaWdodChub2RlX3QsIGxpbmssICZ0 cmVlLAorCQkJCSAgICBibGFja19oZWlnaHQpOworCQkJCWltYmFsYW5jZXMgPSB0cmVlX3JlY3Vy c2UodHJlZS5yYnRfcm9vdCwKKwkJCQkgICAgYmxhY2tfaGVpZ2h0LCAwKTsKKwkJCQlleHBlY3Rf dV9lcShpbWJhbGFuY2VzLCAwLAorCQkJCSAgICAiVHJlZSBpcyB1bmJhbGFuY2VkIik7CisKKwkJ CQlleHBlY3RfdV9lcSh0cmVlX2l0ZXJhdGUoJnRyZWUpLCBrKzEsCisJCQkJICAgICJVbmV4cGVj dGVkIG5vZGUgaXRlcmF0aW9uIGNvdW50Iik7CisJCQkJZXhwZWN0X3VfZXEodHJlZV9pdGVyYXRl X3JldmVyc2UoJnRyZWUpLCBrKzEsCisJCQkJICAgICJVbmV4cGVjdGVkIG5vZGUgaXRlcmF0aW9u IGNvdW50Iik7CisKKwkJCQlleHBlY3RfZmFsc2UodHJlZV9lbXB0eSgmdHJlZSksCisJCQkJICAg ICJUcmVlIHNob3VsZCBub3QgYmUgZW1wdHkiKTsKKwkJCQlleHBlY3RfcHRyX25vdF9udWxsKHRy ZWVfZmlyc3QoJnRyZWUpLAorCQkJCSAgICAiVHJlZSBzaG91bGQgbm90IGJlIGVtcHR5Iik7CisJ CQkJZXhwZWN0X3B0cl9ub3RfbnVsbCh0cmVlX2xhc3QoJnRyZWUpLAorCQkJCSAgICAiVHJlZSBz aG91bGQgbm90IGJlIGVtcHR5Iik7CisKKwkJCQl0cmVlX25leHQoJnRyZWUsICZub2Rlc1trXSk7 CisJCQkJdHJlZV9wcmV2KCZ0cmVlLCAmbm9kZXNba10pOworCQkJfQorCisJCQkvKiBSZW1vdmUg bm9kZXMuICovCisJCQlzd2l0Y2ggKGkgJSA1KSB7CisJCQljYXNlIDA6CisJCQkJZm9yIChrID0g MDsgayA8IGo7IGsrKykgeworCQkJCQlub2RlX3JlbW92ZSgmdHJlZSwgJm5vZGVzW2tdLCBqIC0g ayk7CisJCQkJfQorCQkJCWJyZWFrOworCQkJY2FzZSAxOgorCQkJCWZvciAoayA9IGo7IGsgPiAw OyBrLS0pIHsKKwkJCQkJbm9kZV9yZW1vdmUoJnRyZWUsICZub2Rlc1trLTFdLCBrKTsKKwkJCQl9 CisJCQkJYnJlYWs7CisJCQljYXNlIDI6IHsKKwkJCQlub2RlX3QgKnN0YXJ0OworCQkJCXVuc2ln bmVkIG5ub2RlcyA9IGo7CisKKwkJCQlzdGFydCA9IE5VTEw7CisJCQkJZG8geworCQkJCQlzdGFy dCA9IHRyZWVfaXRlcigmdHJlZSwgc3RhcnQsCisJCQkJCSAgICByZW1vdmVfaXRlcmF0ZV9jYiwg KHZvaWQgKikmbm5vZGVzKTsKKwkJCQkJbm5vZGVzLS07CisJCQkJfSB3aGlsZSAoc3RhcnQgIT0g TlVMTCk7CisJCQkJZXhwZWN0X3VfZXEobm5vZGVzLCAwLAorCQkJCSAgICAiUmVtb3ZhbCB0ZXJt aW5hdGVkIGVhcmx5Iik7CisJCQkJYnJlYWs7CisJCQl9IGNhc2UgMzogeworCQkJCW5vZGVfdCAq c3RhcnQ7CisJCQkJdW5zaWduZWQgbm5vZGVzID0gajsKKworCQkJCXN0YXJ0ID0gTlVMTDsKKwkJ CQlkbyB7CisJCQkJCXN0YXJ0ID0gdHJlZV9yZXZlcnNlX2l0ZXIoJnRyZWUsIHN0YXJ0LAorCQkJ CQkgICAgcmVtb3ZlX3JldmVyc2VfaXRlcmF0ZV9jYiwKKwkJCQkJICAgICh2b2lkICopJm5ub2Rl cyk7CisJCQkJCW5ub2Rlcy0tOworCQkJCX0gd2hpbGUgKHN0YXJ0ICE9IE5VTEwpOworCQkJCWV4 cGVjdF91X2VxKG5ub2RlcywgMCwKKwkJCQkgICAgIlJlbW92YWwgdGVybWluYXRlZCBlYXJseSIp OworCQkJCWJyZWFrOworCQkJfSBjYXNlIDQ6IHsKKwkJCQl1bnNpZ25lZCBubm9kZXMgPSBqOwor CQkJCXRyZWVfZGVzdHJveSgmdHJlZSwgZGVzdHJveV9jYiwgJm5ub2Rlcyk7CisJCQkJZXhwZWN0 X3VfZXEobm5vZGVzLCAwLAorCQkJCSAgICAiRGVzdHJ1Y3Rpb24gdGVybWluYXRlZCBlYXJseSIp OworCQkJCWJyZWFrOworCQkJfSBkZWZhdWx0OgorCQkJCW5vdF9yZWFjaGVkKCk7CisJCQl9CisJ CX0KKwl9CisJZmluaV9nZW5fcmFuZChzZm10KTsKK30KK1RFU1RfRU5ECisKK3N0YXRpYyB2b2lk CitleHBlY3Rfc2ltcGxlX2NvbnNpc3RlbmN5KHRyZWVfdCAqdHJlZSwgdWludDY0X3Qgc3BlY2lh bG5lc3MsCisgICAgYm9vbCBleHBlY3RlZF9lbXB0eSwgbm9kZV90ICpleHBlY3RlZF9maXJzdCwg bm9kZV90ICpleHBlY3RlZF9sYXN0KSB7CisJYm9vbCBlbXB0eTsKKwlub2RlX3QgKmZpcnN0Owor CW5vZGVfdCAqbGFzdDsKKworCWVtcHR5ID0gdHJlZV9lbXB0eV9maWx0ZXJlZCh0cmVlLCAmc3Bl Y2lhbG5lc3NfZmlsdGVyX25vZGUsCisJICAgICZzcGVjaWFsbmVzc19maWx0ZXJfc3VidHJlZSwg JnNwZWNpYWxuZXNzKTsKKwlleHBlY3RfYl9lcShleHBlY3RlZF9lbXB0eSwgZW1wdHksICIiKTsK KworCWZpcnN0ID0gdHJlZV9maXJzdF9maWx0ZXJlZCh0cmVlLAorCSAgICAmc3BlY2lhbG5lc3Nf ZmlsdGVyX25vZGUsICZzcGVjaWFsbmVzc19maWx0ZXJfc3VidHJlZSwKKwkgICAgKHZvaWQgKikm c3BlY2lhbG5lc3MpOworCWV4cGVjdF9wdHJfZXEoZXhwZWN0ZWRfZmlyc3QsIGZpcnN0LCAiIik7 CisKKwlsYXN0ID0gdHJlZV9sYXN0X2ZpbHRlcmVkKHRyZWUsCisJICAgICZzcGVjaWFsbmVzc19m aWx0ZXJfbm9kZSwgJnNwZWNpYWxuZXNzX2ZpbHRlcl9zdWJ0cmVlLAorCSAgICAodm9pZCAqKSZz cGVjaWFsbmVzcyk7CisJZXhwZWN0X3B0cl9lcShleHBlY3RlZF9sYXN0LCBsYXN0LCAiIik7Cit9 CisKK1RFU1RfQkVHSU4odGVzdF9yYl9maWx0ZXJfc2ltcGxlKSB7CisJZW51bSB7RklMVEVSX05P REVTID0gMTB9OworCW5vZGVfdCBub2Rlc1tGSUxURVJfTk9ERVNdOworCWZvciAodW5zaWduZWQg aSA9IDA7IGkgPCBGSUxURVJfTk9ERVM7IGkrKykgeworCQlub2Rlc1tpXS5tYWdpYyA9IE5PREVf TUFHSUM7CisJCW5vZGVzW2ldLmtleSA9IGk7CisJCWlmIChpID09IDApIHsKKwkJCW5vZGVzW2ld LnNwZWNpYWxuZXNzID0gMDsKKwkJfSBlbHNlIHsKKwkJCW5vZGVzW2ldLnNwZWNpYWxuZXNzID0g ZmZzX3UoaSk7CisJCX0KKwkJbm9kZXNbaV0ubWlkX3JlbW92ZSA9IGZhbHNlOworCQlub2Rlc1tp XS5hbGxvd19kdXBsaWNhdGVzID0gZmFsc2U7CisJCW5vZGVzW2ldLnN1bW1hcnlfbGNoaWxkID0g TlVMTDsKKwkJbm9kZXNbaV0uc3VtbWFyeV9yY2hpbGQgPSBOVUxMOworCQlub2Rlc1tpXS5zdW1t YXJ5X21heF9zcGVjaWFsbmVzcyA9IDA7CisJfQorCisJc3VtbWFyaXplX2Fsd2F5c19yZXR1cm5z X3RydWUgPSBmYWxzZTsKKworCXRyZWVfdCB0cmVlOworCXRyZWVfbmV3KCZ0cmVlKTsKKworCS8q IFNob3VsZCBiZSBlbXB0eSAqLworCWV4cGVjdF9zaW1wbGVfY29uc2lzdGVuY3koJnRyZWUsIC8q IHNwZWNpYWxuZXNzICovIDAsIC8qIGVtcHR5ICovIHRydWUsCisJICAgIC8qIGZpcnN0ICovIE5V TEwsIC8qIGxhc3QgKi8gTlVMTCk7CisKKwkvKiBGaWxsIGluIGp1c3QgdGhlIG9kZCBub2Rlcy4g Ki8KKwlmb3IgKGludCBpID0gMTsgaSA8IEZJTFRFUl9OT0RFUzsgaSArPSAyKSB7CisJCXRyZWVf aW5zZXJ0KCZ0cmVlLCAmbm9kZXNbaV0pOworCX0KKworCS8qIEEgc2VhcmNoIGZvciBhbiBvZGQg bm9kZSBzaG91bGQgc3VjY2VlZC4gKi8KKwlleHBlY3Rfc2ltcGxlX2NvbnNpc3RlbmN5KCZ0cmVl LCAvKiBzcGVjaWFsbmVzcyAqLyAwLCAvKiBlbXB0eSAqLyBmYWxzZSwKKwkgICAgLyogZmlyc3Qg Ki8gJm5vZGVzWzFdLCAvKiBsYXN0ICovICZub2Rlc1s5XSk7CisKKwkvKiBCdXQgYSBzZWFyY2gg Zm9yIGFuIGV2ZW4gb25lIHNob3VsZCBmYWlsLiAqLworCWV4cGVjdF9zaW1wbGVfY29uc2lzdGVu Y3koJnRyZWUsIC8qIHNwZWNpYWxuZXNzICovIDEsIC8qIGVtcHR5ICovIHRydWUsCisJICAgIC8q IGZpcnN0ICovIE5VTEwsIC8qIGxhc3QgKi8gTlVMTCk7CisKKwkvKiBOb3cgd2UgYWRkIGFuIGV2 ZW4uICovCisJdHJlZV9pbnNlcnQoJnRyZWUsICZub2Rlc1s0XSk7CisJZXhwZWN0X3NpbXBsZV9j b25zaXN0ZW5jeSgmdHJlZSwgLyogc3BlY2lhbG5lc3MgKi8gMSwgLyogZW1wdHkgKi8gZmFsc2Us CisJICAgIC8qIGZpcnN0ICovICZub2Rlc1s0XSwgLyogbGFzdCAqLyAmbm9kZXNbNF0pOworCisJ LyogQSBzbWFsbGVyIGV2ZW4sIGFuZCBhIGxhcmdlciBldmVuLiAqLworCXRyZWVfaW5zZXJ0KCZ0 cmVlLCAmbm9kZXNbMl0pOworCXRyZWVfaW5zZXJ0KCZ0cmVlLCAmbm9kZXNbOF0pOworCisJLyoK KwkgKiBBIGZpcnN0LXNlYXJjaCAocmVzcC4gbGFzdC1zZWFyY2gpIGZvciBhbiBldmVuIHNob3Vs ZCBzd2l0Y2ggdG8gdGhlCisJICogbG93ZXIgKGhpZ2hlcikgb25lLCBub3cgdGhhdCBpdCdzIGJl ZW4gYWRkZWQuCisJICovCisJZXhwZWN0X3NpbXBsZV9jb25zaXN0ZW5jeSgmdHJlZSwgLyogc3Bl Y2lhbG5lc3MgKi8gMSwgLyogZW1wdHkgKi8gZmFsc2UsCisJICAgIC8qIGZpcnN0ICovICZub2Rl c1syXSwgLyogbGFzdCAqLyAmbm9kZXNbOF0pOworCisJLyoKKwkgKiBJZiB3ZSByZW1vdmUgMiwg YSBmaXJzdC1zZWFyY2ggd2Ugc2hvdWxkIGdvIGJhY2sgdG8gNCwgd2hpbGUgYQorCSAqIGxhc3Qt c2VhcmNoIHNob3VsZCByZW1haW4gdW5jaGFuZ2VkLgorCSAqLworCXRyZWVfcmVtb3ZlKCZ0cmVl LCAmbm9kZXNbMl0pOworCWV4cGVjdF9zaW1wbGVfY29uc2lzdGVuY3koJnRyZWUsIC8qIHNwZWNp YWxuZXNzICovIDEsIC8qIGVtcHR5ICovIGZhbHNlLAorCSAgICAvKiBmaXJzdCAqLyAmbm9kZXNb NF0sIC8qIGxhc3QgKi8gJm5vZGVzWzhdKTsKKworCS8qIFJlaW5zZXJ0IDIsIHRoZW4gZmluZCBp dCBhZ2Fpbi4gKi8KKwl0cmVlX2luc2VydCgmdHJlZSwgJm5vZGVzWzJdKTsKKwlleHBlY3Rfc2lt cGxlX2NvbnNpc3RlbmN5KCZ0cmVlLCAvKiBzcGVjaWFsbmVzcyAqLyAxLCAvKiBlbXB0eSAqLyBm YWxzZSwKKwkgICAgLyogZmlyc3QgKi8gJm5vZGVzWzJdLCAvKiBsYXN0ICovICZub2Rlc1s4XSk7 CisKKwkvKiBTZWFyY2hpbmcgZm9yIGEgbXVsdGlwbGUgb2YgNCBzaG91bGQgbm90IGhhdmUgY2hh bmdlZC4gKi8KKwlleHBlY3Rfc2ltcGxlX2NvbnNpc3RlbmN5KCZ0cmVlLCAvKiBzcGVjaWFsbmVz cyAqLyAyLCAvKiBlbXB0eSAqLyBmYWxzZSwKKwkgICAgLyogZmlyc3QgKi8gJm5vZGVzWzRdLCAv KiBsYXN0ICovICZub2Rlc1s4XSk7CisKKwkvKiBBbmQgYSBtdWx0aXBsZSBvZiA4ICovCisJZXhw ZWN0X3NpbXBsZV9jb25zaXN0ZW5jeSgmdHJlZSwgLyogc3BlY2lhbG5lc3MgKi8gMywgLyogZW1w dHkgKi8gZmFsc2UsCisJICAgIC8qIGZpcnN0ICovICZub2Rlc1s4XSwgLyogbGFzdCAqLyAmbm9k ZXNbOF0pOworCisJLyogQnV0IG5vdCBhIG11bHRpcGxlIG9mIDE2ICovCisJZXhwZWN0X3NpbXBs ZV9jb25zaXN0ZW5jeSgmdHJlZSwgLyogc3BlY2lhbG5lc3MgKi8gNCwgLyogZW1wdHkgKi8gdHJ1 ZSwKKwkgICAgLyogZmlyc3QgKi8gTlVMTCwgLyogbGFzdCAqLyBOVUxMKTsKK30KK1RFU1RfRU5E CisKK3R5cGVkZWYgc3RydWN0IGl0ZXJfY3R4X3MgaXRlcl9jdHhfdDsKK3N0cnVjdCBpdGVyX2N0 eF9zIHsKKwlpbnQgbmNhbGxzOworCW5vZGVfdCAqbGFzdF9ub2RlOworCisJaW50IG5jYWxsc19t YXg7CisJYm9vbCBmb3J3YXJkOworfTsKKworc3RhdGljIG5vZGVfdCAqCit0cmVlX2l0ZXJhdGVf ZmlsdGVyZWRfY2IodHJlZV90ICp0cmVlLCBub2RlX3QgKm5vZGUsIHZvaWQgKmFyZykgeworCWl0 ZXJfY3R4X3QgKmN0eCA9IChpdGVyX2N0eF90ICopYXJnOworCWN0eC0+bmNhbGxzKys7CisJZXhw ZWN0X3U2NF9nZShub2RlLT5zcGVjaWFsbmVzcywgMSwKKwkgICAgIlNob3VsZCBvbmx5IGludm9r ZSBjYiBvbiBub2RlcyB0aGF0IHBhc3MgdGhlIGZpbHRlciIpOworCWlmIChjdHgtPmxhc3Rfbm9k ZSAhPSBOVUxMKSB7CisJCWlmIChjdHgtPmZvcndhcmQpIHsKKwkJCWV4cGVjdF9kX2x0KG5vZGVf Y21wKGN0eC0+bGFzdF9ub2RlLCBub2RlKSwgMCwKKwkJCSAgICAiSW5jb3JyZWN0IGl0ZXJhdGlv biBvcmRlciIpOworCQl9IGVsc2UgeworCQkJZXhwZWN0X2RfZ3Qobm9kZV9jbXAoY3R4LT5sYXN0 X25vZGUsIG5vZGUpLCAwLAorCQkJICAgICJJbmNvcnJlY3QgaXRlcmF0aW9uIG9yZGVyIik7CisJ CX0KKwl9CisJY3R4LT5sYXN0X25vZGUgPSBub2RlOworCWlmIChjdHgtPm5jYWxscyA9PSBjdHgt Pm5jYWxsc19tYXgpIHsKKwkJcmV0dXJuIG5vZGU7CisJfQorCXJldHVybiBOVUxMOworfQorCitz dGF0aWMgaW50Citxc29ydF9ub2RlX2NtcChjb25zdCB2b2lkICphcCwgY29uc3Qgdm9pZCAqYnAp IHsKKwlub2RlX3QgKmEgPSAqKG5vZGVfdCAqKilhcDsKKwlub2RlX3QgKmIgPSAqKG5vZGVfdCAq KilicDsKKwlyZXR1cm4gbm9kZV9jbXAoYSwgYik7Cit9CisKKyNkZWZpbmUgVVBEQVRFX1RFU1Rf TUFYIDEwMAorc3RhdGljIHZvaWQKK2NoZWNrX2NvbnNpc3RlbmN5KHRyZWVfdCAqdHJlZSwgbm9k ZV90IG5vZGVzW1VQREFURV9URVNUX01BWF0sIGludCBubm9kZXMpIHsKKwl1aW50NjRfdCBzcGVj aWFsbmVzcyA9IDE7CisKKwlib29sIGVtcHR5OworCWJvb2wgcmVhbF9lbXB0eSA9IHRydWU7CisJ bm9kZV90ICpmaXJzdDsKKwlub2RlX3QgKnJlYWxfZmlyc3QgPSBOVUxMOworCW5vZGVfdCAqbGFz dDsKKwlub2RlX3QgKnJlYWxfbGFzdCA9IE5VTEw7CisJZm9yIChpbnQgaSA9IDA7IGkgPCBubm9k ZXM7IGkrKykgeworCQlpZiAobm9kZXNbaV0uc3BlY2lhbG5lc3MgPj0gc3BlY2lhbG5lc3MpIHsK KwkJCXJlYWxfZW1wdHkgPSBmYWxzZTsKKwkJCWlmIChyZWFsX2ZpcnN0ID09IE5VTEwKKwkJCSAg ICB8fCBub2RlX2NtcCgmbm9kZXNbaV0sIHJlYWxfZmlyc3QpIDwgMCkgeworCQkJCXJlYWxfZmly c3QgPSAmbm9kZXNbaV07CisJCQl9CisJCQlpZiAocmVhbF9sYXN0ID09IE5VTEwKKwkJCSAgICB8 fCBub2RlX2NtcCgmbm9kZXNbaV0sIHJlYWxfbGFzdCkgPiAwKSB7CisJCQkJcmVhbF9sYXN0ID0g Jm5vZGVzW2ldOworCQkJfQorCQl9CisJfQorCisJZW1wdHkgPSB0cmVlX2VtcHR5X2ZpbHRlcmVk KHRyZWUsICZzcGVjaWFsbmVzc19maWx0ZXJfbm9kZSwKKwkgICAgJnNwZWNpYWxuZXNzX2ZpbHRl cl9zdWJ0cmVlLCAmc3BlY2lhbG5lc3MpOworCWV4cGVjdF9iX2VxKHJlYWxfZW1wdHksIGVtcHR5 LCAiIik7CisKKwlmaXJzdCA9IHRyZWVfZmlyc3RfZmlsdGVyZWQodHJlZSwgJnNwZWNpYWxuZXNz X2ZpbHRlcl9ub2RlLAorCSAgICAmc3BlY2lhbG5lc3NfZmlsdGVyX3N1YnRyZWUsICZzcGVjaWFs bmVzcyk7CisJZXhwZWN0X3B0cl9lcShyZWFsX2ZpcnN0LCBmaXJzdCwgIiIpOworCisJbGFzdCA9 IHRyZWVfbGFzdF9maWx0ZXJlZCh0cmVlLCAmc3BlY2lhbG5lc3NfZmlsdGVyX25vZGUsCisJICAg ICZzcGVjaWFsbmVzc19maWx0ZXJfc3VidHJlZSwgJnNwZWNpYWxuZXNzKTsKKwlleHBlY3RfcHRy X2VxKHJlYWxfbGFzdCwgbGFzdCwgIiIpOworCisJZm9yIChpbnQgaSA9IDA7IGkgPCBubm9kZXM7 IGkrKykgeworCQlub2RlX3QgKm5leHRfZmlsdGVyZWQ7CisJCW5vZGVfdCAqcmVhbF9uZXh0X2Zp bHRlcmVkID0gTlVMTDsKKwkJbm9kZV90ICpwcmV2X2ZpbHRlcmVkOworCQlub2RlX3QgKnJlYWxf cHJldl9maWx0ZXJlZCA9IE5VTEw7CisJCWZvciAoaW50IGogPSAwOyBqIDwgbm5vZGVzOyBqKysp IHsKKwkJCWlmIChub2Rlc1tqXS5zcGVjaWFsbmVzcyA8IHNwZWNpYWxuZXNzKSB7CisJCQkJY29u dGludWU7CisJCQl9CisJCQlpZiAobm9kZV9jbXAoJm5vZGVzW2pdLCAmbm9kZXNbaV0pIDwgMAor CQkJICAgICYmIChyZWFsX3ByZXZfZmlsdGVyZWQgPT0gTlVMTAorCQkJICAgIHx8IG5vZGVfY21w KCZub2Rlc1tqXSwgcmVhbF9wcmV2X2ZpbHRlcmVkKSA+IDApKSB7CisJCQkJcmVhbF9wcmV2X2Zp bHRlcmVkID0gJm5vZGVzW2pdOworCQkJfQorCQkJaWYgKG5vZGVfY21wKCZub2Rlc1tqXSwgJm5v ZGVzW2ldKSA+IDAKKwkJCSAgICAmJiAocmVhbF9uZXh0X2ZpbHRlcmVkID09IE5VTEwKKwkJCSAg ICB8fCBub2RlX2NtcCgmbm9kZXNbal0sIHJlYWxfbmV4dF9maWx0ZXJlZCkgPCAwKSkgeworCQkJ CXJlYWxfbmV4dF9maWx0ZXJlZCA9ICZub2Rlc1tqXTsKKwkJCX0KKwkJfQorCQluZXh0X2ZpbHRl cmVkID0gdHJlZV9uZXh0X2ZpbHRlcmVkKHRyZWUsICZub2Rlc1tpXSwKKwkJICAgICZzcGVjaWFs bmVzc19maWx0ZXJfbm9kZSwgJnNwZWNpYWxuZXNzX2ZpbHRlcl9zdWJ0cmVlLAorCQkgICAgJnNw ZWNpYWxuZXNzKTsKKwkJZXhwZWN0X3B0cl9lcShyZWFsX25leHRfZmlsdGVyZWQsIG5leHRfZmls dGVyZWQsICIiKTsKKworCQlwcmV2X2ZpbHRlcmVkID0gdHJlZV9wcmV2X2ZpbHRlcmVkKHRyZWUs ICZub2Rlc1tpXSwKKwkJICAgICZzcGVjaWFsbmVzc19maWx0ZXJfbm9kZSwgJnNwZWNpYWxuZXNz X2ZpbHRlcl9zdWJ0cmVlLAorCQkgICAgJnNwZWNpYWxuZXNzKTsKKwkJZXhwZWN0X3B0cl9lcShy ZWFsX3ByZXZfZmlsdGVyZWQsIHByZXZfZmlsdGVyZWQsICIiKTsKKworCQlub2RlX3QgKnNlYXJj aF9maWx0ZXJlZDsKKwkJbm9kZV90ICpyZWFsX3NlYXJjaF9maWx0ZXJlZDsKKwkJbm9kZV90ICpu c2VhcmNoX2ZpbHRlcmVkOworCQlub2RlX3QgKnJlYWxfbnNlYXJjaF9maWx0ZXJlZDsKKwkJbm9k ZV90ICpwc2VhcmNoX2ZpbHRlcmVkOworCQlub2RlX3QgKnJlYWxfcHNlYXJjaF9maWx0ZXJlZDsK KworCQkvKgorCQkgKiBzZWFyY2gsIG5zZWFyY2gsIHBzZWFyY2ggZnJvbSBhIG5vZGUgYmVmb3Jl IG5vZGVzW2ldIGluIHRoZQorCQkgKiBvcmRlcmluZy4KKwkJICovCisJCW5vZGVfdCBiZWZvcmU7 CisJCWJlZm9yZS5tYWdpYyA9IE5PREVfTUFHSUM7CisJCWJlZm9yZS5rZXkgPSBub2Rlc1tpXS5r ZXkgLSAxOworCQliZWZvcmUuYWxsb3dfZHVwbGljYXRlcyA9IGZhbHNlOworCQlyZWFsX3NlYXJj aF9maWx0ZXJlZCA9IE5VTEw7CisJCXNlYXJjaF9maWx0ZXJlZCA9IHRyZWVfc2VhcmNoX2ZpbHRl cmVkKHRyZWUsICZiZWZvcmUsCisJCSAgICAmc3BlY2lhbG5lc3NfZmlsdGVyX25vZGUsICZzcGVj aWFsbmVzc19maWx0ZXJfc3VidHJlZSwKKwkJICAgICZzcGVjaWFsbmVzcyk7CisJCWV4cGVjdF9w dHJfZXEocmVhbF9zZWFyY2hfZmlsdGVyZWQsIHNlYXJjaF9maWx0ZXJlZCwgIiIpOworCisJCXJl YWxfbnNlYXJjaF9maWx0ZXJlZCA9IChub2Rlc1tpXS5zcGVjaWFsbmVzcyA+PSBzcGVjaWFsbmVz cyA/CisJCSAgICAmbm9kZXNbaV0gOiByZWFsX25leHRfZmlsdGVyZWQpOworCQluc2VhcmNoX2Zp bHRlcmVkID0gdHJlZV9uc2VhcmNoX2ZpbHRlcmVkKHRyZWUsICZiZWZvcmUsCisJCSAgICAmc3Bl Y2lhbG5lc3NfZmlsdGVyX25vZGUsICZzcGVjaWFsbmVzc19maWx0ZXJfc3VidHJlZSwKKwkJICAg ICZzcGVjaWFsbmVzcyk7CisJCWV4cGVjdF9wdHJfZXEocmVhbF9uc2VhcmNoX2ZpbHRlcmVkLCBu c2VhcmNoX2ZpbHRlcmVkLCAiIik7CisKKwkJcmVhbF9wc2VhcmNoX2ZpbHRlcmVkID0gcmVhbF9w cmV2X2ZpbHRlcmVkOworCQlwc2VhcmNoX2ZpbHRlcmVkID0gdHJlZV9wc2VhcmNoX2ZpbHRlcmVk KHRyZWUsICZiZWZvcmUsCisJCSAgICAmc3BlY2lhbG5lc3NfZmlsdGVyX25vZGUsICZzcGVjaWFs bmVzc19maWx0ZXJfc3VidHJlZSwKKwkJICAgICZzcGVjaWFsbmVzcyk7CisJCWV4cGVjdF9wdHJf ZXEocmVhbF9wc2VhcmNoX2ZpbHRlcmVkLCBwc2VhcmNoX2ZpbHRlcmVkLCAiIik7CisKKwkJLyog c2VhcmNoLCBuc2VhcmNoLCBwc2VhcmNoIGZyb20gbm9kZXNbaV0gKi8KKwkJcmVhbF9zZWFyY2hf ZmlsdGVyZWQgPSAobm9kZXNbaV0uc3BlY2lhbG5lc3MgPj0gc3BlY2lhbG5lc3MgPworCQkgICAg Jm5vZGVzW2ldIDogTlVMTCk7CisJCXNlYXJjaF9maWx0ZXJlZCA9IHRyZWVfc2VhcmNoX2ZpbHRl cmVkKHRyZWUsICZub2Rlc1tpXSwKKwkJICAgICZzcGVjaWFsbmVzc19maWx0ZXJfbm9kZSwgJnNw ZWNpYWxuZXNzX2ZpbHRlcl9zdWJ0cmVlLAorCQkgICAgJnNwZWNpYWxuZXNzKTsKKwkJZXhwZWN0 X3B0cl9lcShyZWFsX3NlYXJjaF9maWx0ZXJlZCwgc2VhcmNoX2ZpbHRlcmVkLCAiIik7CisKKwkJ cmVhbF9uc2VhcmNoX2ZpbHRlcmVkID0gKG5vZGVzW2ldLnNwZWNpYWxuZXNzID49IHNwZWNpYWxu ZXNzID8KKwkJICAgICZub2Rlc1tpXSA6IHJlYWxfbmV4dF9maWx0ZXJlZCk7CisJCW5zZWFyY2hf ZmlsdGVyZWQgPSB0cmVlX25zZWFyY2hfZmlsdGVyZWQodHJlZSwgJm5vZGVzW2ldLAorCQkgICAg JnNwZWNpYWxuZXNzX2ZpbHRlcl9ub2RlLCAmc3BlY2lhbG5lc3NfZmlsdGVyX3N1YnRyZWUsCisJ CSAgICAmc3BlY2lhbG5lc3MpOworCQlleHBlY3RfcHRyX2VxKHJlYWxfbnNlYXJjaF9maWx0ZXJl ZCwgbnNlYXJjaF9maWx0ZXJlZCwgIiIpOworCisJCXJlYWxfcHNlYXJjaF9maWx0ZXJlZCA9IChu b2Rlc1tpXS5zcGVjaWFsbmVzcyA+PSBzcGVjaWFsbmVzcyA/CisJCSAgICAmbm9kZXNbaV0gOiBy ZWFsX3ByZXZfZmlsdGVyZWQpOworCQlwc2VhcmNoX2ZpbHRlcmVkID0gdHJlZV9wc2VhcmNoX2Zp bHRlcmVkKHRyZWUsICZub2Rlc1tpXSwKKwkJICAgICZzcGVjaWFsbmVzc19maWx0ZXJfbm9kZSwg JnNwZWNpYWxuZXNzX2ZpbHRlcl9zdWJ0cmVlLAorCQkgICAgJnNwZWNpYWxuZXNzKTsKKwkJZXhw ZWN0X3B0cl9lcShyZWFsX3BzZWFyY2hfZmlsdGVyZWQsIHBzZWFyY2hfZmlsdGVyZWQsICIiKTsK KworCQkvKgorCQkgKiBzZWFyY2gsIG5zZWFyY2gsIHBzZWFyY2ggZnJvbSBhIG5vZGUgZXF1aXZh bGVudCB0byBidXQKKwkJICogZGlzdGluY3QgZnJvbSBub2Rlc1tpXS4KKwkJICovCisJCW5vZGVf dCBlcXVpdjsKKwkJZXF1aXYubWFnaWMgPSBOT0RFX01BR0lDOworCQllcXVpdi5rZXkgPSBub2Rl c1tpXS5rZXk7CisJCWVxdWl2LmFsbG93X2R1cGxpY2F0ZXMgPSB0cnVlOworCQlyZWFsX3NlYXJj aF9maWx0ZXJlZCA9IChub2Rlc1tpXS5zcGVjaWFsbmVzcyA+PSBzcGVjaWFsbmVzcyA/CisJCSAg ICAmbm9kZXNbaV0gOiBOVUxMKTsKKwkJc2VhcmNoX2ZpbHRlcmVkID0gdHJlZV9zZWFyY2hfZmls dGVyZWQodHJlZSwgJmVxdWl2LAorCQkgICAgJnNwZWNpYWxuZXNzX2ZpbHRlcl9ub2RlLCAmc3Bl Y2lhbG5lc3NfZmlsdGVyX3N1YnRyZWUsCisJCSAgICAmc3BlY2lhbG5lc3MpOworCQlleHBlY3Rf cHRyX2VxKHJlYWxfc2VhcmNoX2ZpbHRlcmVkLCBzZWFyY2hfZmlsdGVyZWQsICIiKTsKKworCQly ZWFsX25zZWFyY2hfZmlsdGVyZWQgPSAobm9kZXNbaV0uc3BlY2lhbG5lc3MgPj0gc3BlY2lhbG5l c3MgPworCQkgICAgJm5vZGVzW2ldIDogcmVhbF9uZXh0X2ZpbHRlcmVkKTsKKwkJbnNlYXJjaF9m aWx0ZXJlZCA9IHRyZWVfbnNlYXJjaF9maWx0ZXJlZCh0cmVlLCAmZXF1aXYsCisJCSAgICAmc3Bl Y2lhbG5lc3NfZmlsdGVyX25vZGUsICZzcGVjaWFsbmVzc19maWx0ZXJfc3VidHJlZSwKKwkJICAg ICZzcGVjaWFsbmVzcyk7CisJCWV4cGVjdF9wdHJfZXEocmVhbF9uc2VhcmNoX2ZpbHRlcmVkLCBu c2VhcmNoX2ZpbHRlcmVkLCAiIik7CisKKwkJcmVhbF9wc2VhcmNoX2ZpbHRlcmVkID0gKG5vZGVz W2ldLnNwZWNpYWxuZXNzID49IHNwZWNpYWxuZXNzID8KKwkJICAgICZub2Rlc1tpXSA6IHJlYWxf cHJldl9maWx0ZXJlZCk7CisJCXBzZWFyY2hfZmlsdGVyZWQgPSB0cmVlX3BzZWFyY2hfZmlsdGVy ZWQodHJlZSwgJmVxdWl2LAorCQkgICAgJnNwZWNpYWxuZXNzX2ZpbHRlcl9ub2RlLCAmc3BlY2lh bG5lc3NfZmlsdGVyX3N1YnRyZWUsCisJCSAgICAmc3BlY2lhbG5lc3MpOworCQlleHBlY3RfcHRy X2VxKHJlYWxfcHNlYXJjaF9maWx0ZXJlZCwgcHNlYXJjaF9maWx0ZXJlZCwgIiIpOworCisJCS8q CisJCSAqIHNlYXJjaCwgbnNlYXJjaCwgcHNlYXJjaCBmcm9tIGEgbm9kZSBhZnRlciBub2Rlc1tp XSBpbiB0aGUKKwkJICogb3JkZXJpbmcuCisJCSAqLworCQlub2RlX3QgYWZ0ZXI7CisJCWFmdGVy Lm1hZ2ljID0gTk9ERV9NQUdJQzsKKwkJYWZ0ZXIua2V5ID0gbm9kZXNbaV0ua2V5ICsgMTsKKwkJ YWZ0ZXIuYWxsb3dfZHVwbGljYXRlcyA9IGZhbHNlOworCQlyZWFsX3NlYXJjaF9maWx0ZXJlZCA9 IE5VTEw7CisJCXNlYXJjaF9maWx0ZXJlZCA9IHRyZWVfc2VhcmNoX2ZpbHRlcmVkKHRyZWUsICZh ZnRlciwKKwkJICAgICZzcGVjaWFsbmVzc19maWx0ZXJfbm9kZSwgJnNwZWNpYWxuZXNzX2ZpbHRl cl9zdWJ0cmVlLAorCQkgICAgJnNwZWNpYWxuZXNzKTsKKwkJZXhwZWN0X3B0cl9lcShyZWFsX3Nl YXJjaF9maWx0ZXJlZCwgc2VhcmNoX2ZpbHRlcmVkLCAiIik7CisKKwkJcmVhbF9uc2VhcmNoX2Zp bHRlcmVkID0gcmVhbF9uZXh0X2ZpbHRlcmVkOworCQluc2VhcmNoX2ZpbHRlcmVkID0gdHJlZV9u c2VhcmNoX2ZpbHRlcmVkKHRyZWUsICZhZnRlciwKKwkJICAgICZzcGVjaWFsbmVzc19maWx0ZXJf bm9kZSwgJnNwZWNpYWxuZXNzX2ZpbHRlcl9zdWJ0cmVlLAorCQkgICAgJnNwZWNpYWxuZXNzKTsK KwkJZXhwZWN0X3B0cl9lcShyZWFsX25zZWFyY2hfZmlsdGVyZWQsIG5zZWFyY2hfZmlsdGVyZWQs ICIiKTsKKworCQlyZWFsX3BzZWFyY2hfZmlsdGVyZWQgPSAobm9kZXNbaV0uc3BlY2lhbG5lc3Mg Pj0gc3BlY2lhbG5lc3MgPworCQkgICAgJm5vZGVzW2ldIDogcmVhbF9wcmV2X2ZpbHRlcmVkKTsK KwkJcHNlYXJjaF9maWx0ZXJlZCA9IHRyZWVfcHNlYXJjaF9maWx0ZXJlZCh0cmVlLCAmYWZ0ZXIs CisJCSAgICAmc3BlY2lhbG5lc3NfZmlsdGVyX25vZGUsICZzcGVjaWFsbmVzc19maWx0ZXJfc3Vi dHJlZSwKKwkJICAgICZzcGVjaWFsbmVzcyk7CisJCWV4cGVjdF9wdHJfZXEocmVhbF9wc2VhcmNo X2ZpbHRlcmVkLCBwc2VhcmNoX2ZpbHRlcmVkLCAiIik7CisJfQorCisJLyogRmlsdGVyZWQgaXRl cmF0aW9uIHRlc3Qgc2V0dXAuICovCisJaW50IG5zcGVjaWFsID0gMDsKKwlub2RlX3QgKnNvcnRl ZF9ub2Rlc1tVUERBVEVfVEVTVF9NQVhdOworCW5vZGVfdCAqc29ydGVkX2ZpbHRlcmVkX25vZGVz W1VQREFURV9URVNUX01BWF07CisJZm9yIChpbnQgaSA9IDA7IGkgPCBubm9kZXM7IGkrKykgewor CQlzb3J0ZWRfbm9kZXNbaV0gPSAmbm9kZXNbaV07CisJfQorCXFzb3J0KHNvcnRlZF9ub2Rlcywg bm5vZGVzLCBzaXplb2Yobm9kZV90ICopLCAmcXNvcnRfbm9kZV9jbXApOworCWZvciAoaW50IGkg PSAwOyBpIDwgbm5vZGVzOyBpKyspIHsKKwkJc29ydGVkX25vZGVzW2ldLT5yYW5rID0gaTsKKwkJ c29ydGVkX25vZGVzW2ldLT5maWx0ZXJlZF9yYW5rID0gbnNwZWNpYWw7CisJCWlmIChzb3J0ZWRf bm9kZXNbaV0tPnNwZWNpYWxuZXNzID49IDEpIHsKKwkJCXNvcnRlZF9maWx0ZXJlZF9ub2Rlc1tu c3BlY2lhbF0gPSBzb3J0ZWRfbm9kZXNbaV07CisJCQluc3BlY2lhbCsrOworCQl9CisJfQorCisJ bm9kZV90ICppdGVyX3Jlc3VsdDsKKworCWl0ZXJfY3R4X3QgY3R4OworCWN0eC5uY2FsbHMgPSAw OworCWN0eC5sYXN0X25vZGUgPSBOVUxMOworCWN0eC5uY2FsbHNfbWF4ID0gSU5UX01BWDsKKwlj dHguZm9yd2FyZCA9IHRydWU7CisKKwkvKiBGaWx0ZXJlZCBmb3J3YXJkIGl0ZXJhdGlvbiBmcm9t IHRoZSBiZWdpbm5pbmcuICovCisJaXRlcl9yZXN1bHQgPSB0cmVlX2l0ZXJfZmlsdGVyZWQodHJl ZSwgTlVMTCwgJnRyZWVfaXRlcmF0ZV9maWx0ZXJlZF9jYiwKKwkgICAgJmN0eCwgJnNwZWNpYWxu ZXNzX2ZpbHRlcl9ub2RlLCAmc3BlY2lhbG5lc3NfZmlsdGVyX3N1YnRyZWUsCisJICAgICZzcGVj aWFsbmVzcyk7CisJZXhwZWN0X3B0cl9udWxsKGl0ZXJfcmVzdWx0LCAiIik7CisJZXhwZWN0X2Rf ZXEobnNwZWNpYWwsIGN0eC5uY2FsbHMsICIiKTsKKwkvKiBGaWx0ZXJlZCBmb3J3YXJkIGl0ZXJh dGlvbiBmcm9tIGEgc3RhcnRpbmcgcG9pbnQuICovCisJZm9yIChpbnQgaSA9IDA7IGkgPCBubm9k ZXM7IGkrKykgeworCQljdHgubmNhbGxzID0gMDsKKwkJY3R4Lmxhc3Rfbm9kZSA9IE5VTEw7CisJ CWl0ZXJfcmVzdWx0ID0gdHJlZV9pdGVyX2ZpbHRlcmVkKHRyZWUsICZub2Rlc1tpXSwKKwkJICAg ICZ0cmVlX2l0ZXJhdGVfZmlsdGVyZWRfY2IsICZjdHgsICZzcGVjaWFsbmVzc19maWx0ZXJfbm9k ZSwKKwkJICAgICZzcGVjaWFsbmVzc19maWx0ZXJfc3VidHJlZSwgJnNwZWNpYWxuZXNzKTsKKwkJ ZXhwZWN0X3B0cl9udWxsKGl0ZXJfcmVzdWx0LCAiIik7CisJCWV4cGVjdF9kX2VxKG5zcGVjaWFs IC0gbm9kZXNbaV0uZmlsdGVyZWRfcmFuaywgY3R4Lm5jYWxscywgIiIpOworCX0KKwkvKiBGaWx0 ZXJlZCBmb3J3YXJkIGl0ZXJhdGlvbiBmcm9tIHRoZSBiZWdpbm5pbmcsIHdpdGggc3RvcHBpbmcg Ki8KKwlmb3IgKGludCBpID0gMDsgaSA8IG5zcGVjaWFsOyBpKyspIHsKKwkJY3R4Lm5jYWxscyA9 IDA7CisJCWN0eC5sYXN0X25vZGUgPSBOVUxMOworCQljdHgubmNhbGxzX21heCA9IGkgKyAxOwor CQlpdGVyX3Jlc3VsdCA9IHRyZWVfaXRlcl9maWx0ZXJlZCh0cmVlLCBOVUxMLAorCQkgICAgJnRy ZWVfaXRlcmF0ZV9maWx0ZXJlZF9jYiwgJmN0eCwgJnNwZWNpYWxuZXNzX2ZpbHRlcl9ub2RlLAor CQkgICAgJnNwZWNpYWxuZXNzX2ZpbHRlcl9zdWJ0cmVlLCAmc3BlY2lhbG5lc3MpOworCQlleHBl Y3RfcHRyX2VxKHNvcnRlZF9maWx0ZXJlZF9ub2Rlc1tpXSwgaXRlcl9yZXN1bHQsICIiKTsKKwkJ ZXhwZWN0X2RfZXEoY3R4Lm5jYWxscywgaSArIDEsICIiKTsKKwl9CisJLyogRmlsdGVyZWQgZm9y d2FyZCBpdGVyYXRpb24gZnJvbSBhIHN0YXJ0aW5nIHBvaW50LCB3aXRoIHN0b3BwaW5nLiAqLwor CWZvciAoaW50IGkgPSAwOyBpIDwgbm5vZGVzOyBpKyspIHsKKwkJZm9yIChpbnQgaiA9IDA7IGog PCBuc3BlY2lhbCAtIG5vZGVzW2ldLmZpbHRlcmVkX3Jhbms7IGorKykgeworCQkJY3R4Lm5jYWxs cyA9IDA7CisJCQljdHgubGFzdF9ub2RlID0gTlVMTDsKKwkJCWN0eC5uY2FsbHNfbWF4ID0gaiAr IDE7CisJCQlpdGVyX3Jlc3VsdCA9IHRyZWVfaXRlcl9maWx0ZXJlZCh0cmVlLCAmbm9kZXNbaV0s CisJCQkgICAgJnRyZWVfaXRlcmF0ZV9maWx0ZXJlZF9jYiwgJmN0eCwKKwkJCSAgICAmc3BlY2lh bG5lc3NfZmlsdGVyX25vZGUsCisJCQkgICAgJnNwZWNpYWxuZXNzX2ZpbHRlcl9zdWJ0cmVlLCAm c3BlY2lhbG5lc3MpOworCQkJZXhwZWN0X2RfZXEoaiArIDEsIGN0eC5uY2FsbHMsICIiKTsKKwkJ CWV4cGVjdF9wdHJfZXEoc29ydGVkX2ZpbHRlcmVkX25vZGVzWworCQkJICAgIG5vZGVzW2ldLmZp bHRlcmVkX3JhbmsgKyBqXSwgaXRlcl9yZXN1bHQsICIiKTsKKwkJfQorCX0KKworCS8qIEJhY2t3 YXJkcyBpdGVyYXRpb24uICovCisJY3R4Lm5jYWxscyA9IDA7CisJY3R4Lmxhc3Rfbm9kZSA9IE5V TEw7CisJY3R4Lm5jYWxsc19tYXggPSBJTlRfTUFYOworCWN0eC5mb3J3YXJkID0gZmFsc2U7CisK KwkvKiBGaWx0ZXJlZCBiYWNrd2FyZCBpdGVyYXRpb24gZnJvbSB0aGUgZW5kLiAqLworCWl0ZXJf cmVzdWx0ID0gdHJlZV9yZXZlcnNlX2l0ZXJfZmlsdGVyZWQodHJlZSwgTlVMTCwKKwkgICAgJnRy ZWVfaXRlcmF0ZV9maWx0ZXJlZF9jYiwgJmN0eCwgJnNwZWNpYWxuZXNzX2ZpbHRlcl9ub2RlLAor CSAgICAmc3BlY2lhbG5lc3NfZmlsdGVyX3N1YnRyZWUsICZzcGVjaWFsbmVzcyk7CisJZXhwZWN0 X3B0cl9udWxsKGl0ZXJfcmVzdWx0LCAiIik7CisJZXhwZWN0X2RfZXEobnNwZWNpYWwsIGN0eC5u Y2FsbHMsICIiKTsKKwkvKiBGaWx0ZXJlZCBiYWNrd2FyZCBpdGVyYXRpb24gZnJvbSBhIHN0YXJ0 aW5nIHBvaW50LiAqLworCWZvciAoaW50IGkgPSAwOyBpIDwgbm5vZGVzOyBpKyspIHsKKwkJY3R4 Lm5jYWxscyA9IDA7CisJCWN0eC5sYXN0X25vZGUgPSBOVUxMOworCQlpdGVyX3Jlc3VsdCA9IHRy ZWVfcmV2ZXJzZV9pdGVyX2ZpbHRlcmVkKHRyZWUsICZub2Rlc1tpXSwKKwkJICAgICZ0cmVlX2l0 ZXJhdGVfZmlsdGVyZWRfY2IsICZjdHgsICZzcGVjaWFsbmVzc19maWx0ZXJfbm9kZSwKKwkJICAg ICZzcGVjaWFsbmVzc19maWx0ZXJfc3VidHJlZSwgJnNwZWNpYWxuZXNzKTsKKwkJZXhwZWN0X3B0 cl9udWxsKGl0ZXJfcmVzdWx0LCAiIik7CisJCWludCBzdXJwbHVzX3JhbmsgPSAobm9kZXNbaV0u c3BlY2lhbG5lc3MgPj0gMSA/IDEgOiAwKTsKKwkJZXhwZWN0X2RfZXEobm9kZXNbaV0uZmlsdGVy ZWRfcmFuayArIHN1cnBsdXNfcmFuaywgY3R4Lm5jYWxscywKKwkJICAgICIiKTsKKwl9CisJLyog RmlsdGVyZWQgYmFja3dhcmQgaXRlcmF0aW9uIGZyb20gdGhlIGVuZCwgd2l0aCBzdG9wcGluZyAq LworCWZvciAoaW50IGkgPSAwOyBpIDwgbnNwZWNpYWw7IGkrKykgeworCQljdHgubmNhbGxzID0g MDsKKwkJY3R4Lmxhc3Rfbm9kZSA9IE5VTEw7CisJCWN0eC5uY2FsbHNfbWF4ID0gaSArIDE7CisJ CWl0ZXJfcmVzdWx0ID0gdHJlZV9yZXZlcnNlX2l0ZXJfZmlsdGVyZWQodHJlZSwgTlVMTCwKKwkJ ICAgICZ0cmVlX2l0ZXJhdGVfZmlsdGVyZWRfY2IsICZjdHgsICZzcGVjaWFsbmVzc19maWx0ZXJf bm9kZSwKKwkJICAgICZzcGVjaWFsbmVzc19maWx0ZXJfc3VidHJlZSwgJnNwZWNpYWxuZXNzKTsK KwkJZXhwZWN0X3B0cl9lcShzb3J0ZWRfZmlsdGVyZWRfbm9kZXNbbnNwZWNpYWwgLSBpIC0gMV0s CisJCSAgICBpdGVyX3Jlc3VsdCwgIiIpOworCQlleHBlY3RfZF9lcShjdHgubmNhbGxzLCBpICsg MSwgIiIpOworCX0KKwkvKiBGaWx0ZXJlZCBiYWNrd2FyZCBpdGVyYXRpb24gZnJvbSBhIHN0YXJ0 aW5nIHBvaW50LCB3aXRoIHN0b3BwaW5nLiAqLworCWZvciAoaW50IGkgPSAwOyBpIDwgbm5vZGVz OyBpKyspIHsKKwkJaW50IHN1cnBsdXNfcmFuayA9IChub2Rlc1tpXS5zcGVjaWFsbmVzcyA+PSAx ID8gMSA6IDApOworCQlmb3IgKGludCBqID0gMDsgaiA8IG5vZGVzW2ldLmZpbHRlcmVkX3Jhbmsg KyBzdXJwbHVzX3Jhbms7CisJCSAgICBqKyspIHsKKwkJCWN0eC5uY2FsbHMgPSAwOworCQkJY3R4 Lmxhc3Rfbm9kZSA9IE5VTEw7CisJCQljdHgubmNhbGxzX21heCA9IGogKyAxOworCQkJaXRlcl9y ZXN1bHQgPSB0cmVlX3JldmVyc2VfaXRlcl9maWx0ZXJlZCh0cmVlLAorCQkJICAgICZub2Rlc1tp XSwgJnRyZWVfaXRlcmF0ZV9maWx0ZXJlZF9jYiwgJmN0eCwKKwkJCSAgICAmc3BlY2lhbG5lc3Nf ZmlsdGVyX25vZGUsCisJCQkgICAgJnNwZWNpYWxuZXNzX2ZpbHRlcl9zdWJ0cmVlLCAmc3BlY2lh bG5lc3MpOworCQkJZXhwZWN0X2RfZXEoaiArIDEsIGN0eC5uY2FsbHMsICIiKTsKKwkJCWV4cGVj dF9wdHJfZXEoc29ydGVkX2ZpbHRlcmVkX25vZGVzWworCQkJICAgIG5vZGVzW2ldLmZpbHRlcmVk X3JhbmsgLSBqIC0gMSArIHN1cnBsdXNfcmFua10sCisJCQkgICAgaXRlcl9yZXN1bHQsICIiKTsK KwkJfQorCX0KK30KKworc3RhdGljIHZvaWQKK2RvX3VwZGF0ZV9zZWFyY2hfdGVzdChpbnQgbm5v ZGVzLCBpbnQgbnRyZWVzLCBpbnQgbnJlbW92YWxzLAorICAgIGludCBudXBkYXRlcykgeworCW5v ZGVfdCBub2Rlc1tVUERBVEVfVEVTVF9NQVhdOworCWFzc2VydChubm9kZXMgPD0gVVBEQVRFX1RF U1RfTUFYKTsKKworCXNmbXRfdCAqc2ZtdCA9IGluaXRfZ2VuX3JhbmQoMTIzNDUpOworCWZvciAo aW50IGkgPSAwOyBpIDwgbnRyZWVzOyBpKyspIHsKKwkJdHJlZV90IHRyZWU7CisJCXRyZWVfbmV3 KCZ0cmVlKTsKKwkJZm9yIChpbnQgaiA9IDA7IGogPCBubm9kZXM7IGorKykgeworCQkJbm9kZXNb al0ubWFnaWMgPSBOT0RFX01BR0lDOworCQkJLyoKKwkJCSAqIEluIGNvbnNpc3RlbmN5IGNoZWNr aW5nLCB3ZSBpbmNyZW1lbnQgb3IgZGVjcmVtZW50IGEKKwkJCSAqIGtleSBhbmQgYXNzdW1lIHRo YXQgdGhlIHJlc3VsdCBpcyBub3QgYSBrZXkgaW4gdGhlCisJCQkgKiB0cmVlLiAgVGhpcyBpc24n dCBhICpyZWFsKiBjb25jZXJuIHdpdGggNjQtYml0IGtleXMKKwkJCSAqIGFuZCBhIGdvb2QgUFJO RywgYnV0IHdoeSBub3QgYmUgY29ycmVjdCBhbnl3YXlzPworCQkJICovCisJCQlub2Rlc1tqXS5r ZXkgPSAyICogZ2VuX3JhbmQ2NChzZm10KTsKKwkJCW5vZGVzW2pdLnNwZWNpYWxuZXNzID0gMDsK KwkJCW5vZGVzW2pdLm1pZF9yZW1vdmUgPSBmYWxzZTsKKwkJCW5vZGVzW2pdLmFsbG93X2R1cGxp Y2F0ZXMgPSBmYWxzZTsKKwkJCW5vZGVzW2pdLnN1bW1hcnlfbGNoaWxkID0gTlVMTDsKKwkJCW5v ZGVzW2pdLnN1bW1hcnlfcmNoaWxkID0gTlVMTDsKKwkJCW5vZGVzW2pdLnN1bW1hcnlfbWF4X3Nw ZWNpYWxuZXNzID0gMDsKKwkJCXRyZWVfaW5zZXJ0KCZ0cmVlLCAmbm9kZXNbal0pOworCQl9CisJ CWZvciAoaW50IGogPSAwOyBqIDwgbnJlbW92YWxzOyBqKyspIHsKKwkJCWludCB2aWN0aW0gPSAo aW50KWdlbl9yYW5kNjRfcmFuZ2Uoc2ZtdCwgbm5vZGVzKTsKKwkJCWlmICghbm9kZXNbdmljdGlt XS5taWRfcmVtb3ZlKSB7CisJCQkJdHJlZV9yZW1vdmUoJnRyZWUsICZub2Rlc1t2aWN0aW1dKTsK KwkJCQlub2Rlc1t2aWN0aW1dLm1pZF9yZW1vdmUgPSB0cnVlOworCQkJfQorCQl9CisJCWZvciAo aW50IGogPSAwOyBqIDwgbm5vZGVzOyBqKyspIHsKKwkJCWlmIChub2Rlc1tqXS5taWRfcmVtb3Zl KSB7CisJCQkJbm9kZXNbal0ubWlkX3JlbW92ZSA9IGZhbHNlOworCQkJCW5vZGVzW2pdLmtleSA9 IDIgKiBnZW5fcmFuZDY0KHNmbXQpOworCQkJCXRyZWVfaW5zZXJ0KCZ0cmVlLCAmbm9kZXNbal0p OworCQkJfQorCQl9CisJCWZvciAoaW50IGogPSAwOyBqIDwgbnVwZGF0ZXM7IGorKykgeworCQkJ dWludDMyX3QgaW5kID0gZ2VuX3JhbmQzMl9yYW5nZShzZm10LCBubm9kZXMpOworCQkJbm9kZXNb aW5kXS5zcGVjaWFsbmVzcyA9IDEgLSBub2Rlc1tpbmRdLnNwZWNpYWxuZXNzOworCQkJdHJlZV91 cGRhdGVfc3VtbWFyaWVzKCZ0cmVlLCAmbm9kZXNbaW5kXSk7CisJCQljaGVja19jb25zaXN0ZW5j eSgmdHJlZSwgbm9kZXMsIG5ub2Rlcyk7CisJCX0KKwl9Cit9CisKK1RFU1RfQkVHSU4odGVzdF9y Yl91cGRhdGVfc2VhcmNoKSB7CisJc3VtbWFyaXplX2Fsd2F5c19yZXR1cm5zX3RydWUgPSBmYWxz ZTsKKwlkb191cGRhdGVfc2VhcmNoX3Rlc3QoMiwgMTAwLCAzLCA1MCk7CisJZG9fdXBkYXRlX3Nl YXJjaF90ZXN0KDUsIDEwMCwgMywgNTApOworCWRvX3VwZGF0ZV9zZWFyY2hfdGVzdCgxMiwgMTAw LCA1LCAxMDAwKTsKKwlkb191cGRhdGVfc2VhcmNoX3Rlc3QoMTAwLCAxLCA1MCwgNTAwKTsKK30K K1RFU1RfRU5ECisKK3R5cGVkZWYgcmJfdHJlZShub2RlX3QpIHVuc3VtbWFyaXplZF90cmVlX3Q7 CityYl9nZW4oc3RhdGljIFVOVVNFRCwgdW5zdW1tYXJpemVkX3RyZWVfLCB1bnN1bW1hcml6ZWRf dHJlZV90LCBub2RlX3QsIGxpbmssCisgICAgbm9kZV9jbXApOworCitzdGF0aWMgbm9kZV90ICoK K3Vuc3VtbWFyaXplZF90cmVlX2l0ZXJhdGVfY2IodW5zdW1tYXJpemVkX3RyZWVfdCAqdHJlZSwg bm9kZV90ICpub2RlLAorICAgIHZvaWQgKmRhdGEpIHsKKwl1bnNpZ25lZCAqaSA9ICh1bnNpZ25l ZCAqKWRhdGE7CisJKCppKSsrOworCXJldHVybiBOVUxMOworfQorLyoKKyAqIFRoZSB1bnN1bW1h cml6ZWQgYW5kIHN1bW1hcml6ZWQgZnVudGlvbmFsaXR5IGlzIGltcGxlbWVudGVkIHZpYSB0aGUg c2FtZQorICogZnVuY3Rpb25zOyB3ZSBkb24ndCByZWFsbHkgbmVlZCB0byBkbyBtdWNoIG1vcmUg dGhhbiB0ZXN0IHRoYXQgd2UgY2FuIGV4Y2x1ZGUKKyAqIHRoZSBmaWx0ZXJlZCBmdW5jdGlvbmFs aXR5IHdpdGhvdXQgYW55dGhpbmcgYnJlYWtpbmcuCisgKi8KK1RFU1RfQkVHSU4odGVzdF9yYl91 bnN1bW1hcml6ZWQpIHsKKwl1bnN1bW1hcml6ZWRfdHJlZV90IHRyZWU7CisJdW5zdW1tYXJpemVk X3RyZWVfbmV3KCZ0cmVlKTsKKwl1bnNpZ25lZCBubm9kZXMgPSAwOworCXVuc3VtbWFyaXplZF90 cmVlX2l0ZXIoJnRyZWUsIE5VTEwsICZ1bnN1bW1hcml6ZWRfdHJlZV9pdGVyYXRlX2NiLAorCSAg ICAmbm5vZGVzKTsKKwlleHBlY3RfdV9lcSgwLCBubm9kZXMsICIiKTsKK30KK1RFU1RfRU5ECisK K2ludAorbWFpbih2b2lkKSB7CisJcmV0dXJuIHRlc3Rfbm9fcmVlbnRyYW5jeSgKKwkgICAgdGVz dF9yYl9lbXB0eSwKKwkgICAgdGVzdF9yYl9yYW5kb20sCisJICAgIHRlc3RfcmJfZmlsdGVyX3Np bXBsZSwKKwkgICAgdGVzdF9yYl91cGRhdGVfc2VhcmNoLAorCSAgICB0ZXN0X3JiX3Vuc3VtbWFy aXplZCk7Cit9CgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2Mt NS4zLjAvdGVzdC91bml0L3JldGFpbmVkLmMgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1h bGxvYy01LjMuMC90ZXN0L3VuaXQvcmV0YWluZWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwLi5hYTlmNjg0Ci0tLSAvZGV2L251bGwKKysrIGIvMzg5LWRzLWJhc2UtMy4zLjAt YnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L3JldGFpbmVkLmMKQEAgLTAsMCArMSwxODgg QEAKKyNpbmNsdWRlICJ0ZXN0L2plbWFsbG9jX3Rlc3QuaCIKKworI2luY2x1ZGUgImplbWFsbG9j L2ludGVybmFsL3Nhbi5oIgorI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL3NwaW4uaCIKKwor c3RhdGljIHVuc2lnbmVkCQlhcmVuYV9pbmQ7CitzdGF0aWMgc2l6ZV90CQlzejsKK3N0YXRpYyBz aXplX3QJCWVzejsKKyNkZWZpbmUgTkVQT0NIUwkJOAorI2RlZmluZSBQRVJfVEhEX05BTExPQ1MJ MQorc3RhdGljIGF0b21pY191X3QJZXBvY2g7CitzdGF0aWMgYXRvbWljX3VfdAluZmluaXNoZWQ7 CisKK3N0YXRpYyB1bnNpZ25lZAorZG9fYXJlbmFfY3JlYXRlKGV4dGVudF9ob29rc190ICpoKSB7 CisJdW5zaWduZWQgbmV3X2FyZW5hX2luZDsKKwlzaXplX3QgaW5kX3N6ID0gc2l6ZW9mKHVuc2ln bmVkKTsKKwlleHBlY3RfZF9lcShtYWxsY3RsKCJhcmVuYXMuY3JlYXRlIiwgKHZvaWQgKikmbmV3 X2FyZW5hX2luZCwgJmluZF9zeiwKKwkgICAgKHZvaWQgKikoaCAhPSBOVUxMID8gJmggOiBOVUxM KSwgKGggIT0gTlVMTCA/IHNpemVvZihoKSA6IDApKSwgMCwKKwkgICAgIlVuZXhwZWN0ZWQgbWFs bGN0bCgpIGZhaWx1cmUiKTsKKwlyZXR1cm4gbmV3X2FyZW5hX2luZDsKK30KKworc3RhdGljIHZv aWQKK2RvX2FyZW5hX2Rlc3Ryb3kodW5zaWduZWQgaW5kKSB7CisJc2l6ZV90IG1pYlszXTsKKwlz aXplX3QgbWlibGVuOworCisJbWlibGVuID0gc2l6ZW9mKG1pYikvc2l6ZW9mKHNpemVfdCk7CisJ ZXhwZWN0X2RfZXEobWFsbGN0bG5hbWV0b21pYigiYXJlbmEuMC5kZXN0cm95IiwgbWliLCAmbWli bGVuKSwgMCwKKwkgICAgIlVuZXhwZWN0ZWQgbWFsbGN0bG5hbWV0b21pYigpIGZhaWx1cmUiKTsK KwltaWJbMV0gPSAoc2l6ZV90KWluZDsKKwlleHBlY3RfZF9lcShtYWxsY3RsYnltaWIobWliLCBt aWJsZW4sIE5VTEwsIE5VTEwsIE5VTEwsIDApLCAwLAorCSAgICAiVW5leHBlY3RlZCBtYWxsY3Rs YnltaWIoKSBmYWlsdXJlIik7Cit9CisKK3N0YXRpYyB2b2lkCitkb19yZWZyZXNoKHZvaWQpIHsK Kwl1aW50NjRfdCByZWZyZXNoX2Vwb2NoID0gMTsKKwlleHBlY3RfZF9lcShtYWxsY3RsKCJlcG9j aCIsIE5VTEwsIE5VTEwsICh2b2lkICopJnJlZnJlc2hfZXBvY2gsCisJICAgIHNpemVvZihyZWZy ZXNoX2Vwb2NoKSksIDAsICJVbmV4cGVjdGVkIG1hbGxjdGwoKSBmYWlsdXJlIik7Cit9CisKK3N0 YXRpYyBzaXplX3QKK2RvX2dldF9zaXplX2ltcGwoY29uc3QgY2hhciAqY21kLCB1bnNpZ25lZCBp bmQpIHsKKwlzaXplX3QgbWliWzRdOworCXNpemVfdCBtaWJsZW4gPSBzaXplb2YobWliKSAvIHNp emVvZihzaXplX3QpOworCXNpemVfdCB6ID0gc2l6ZW9mKHNpemVfdCk7CisKKwlleHBlY3RfZF9l cShtYWxsY3RsbmFtZXRvbWliKGNtZCwgbWliLCAmbWlibGVuKSwKKwkgICAgMCwgIlVuZXhwZWN0 ZWQgbWFsbGN0bG5hbWV0b21pYihcIiVzXCIsIC4uLikgZmFpbHVyZSIsIGNtZCk7CisJbWliWzJd ID0gaW5kOworCXNpemVfdCBzaXplOworCWV4cGVjdF9kX2VxKG1hbGxjdGxieW1pYihtaWIsIG1p YmxlbiwgKHZvaWQgKikmc2l6ZSwgJnosIE5VTEwsIDApLAorCSAgICAwLCAiVW5leHBlY3RlZCBt YWxsY3RsYnltaWIoW1wiJXNcIl0sIC4uLikgZmFpbHVyZSIsIGNtZCk7CisKKwlyZXR1cm4gc2l6 ZTsKK30KKworc3RhdGljIHNpemVfdAorZG9fZ2V0X2FjdGl2ZSh1bnNpZ25lZCBpbmQpIHsKKwly ZXR1cm4gZG9fZ2V0X3NpemVfaW1wbCgic3RhdHMuYXJlbmFzLjAucGFjdGl2ZSIsIGluZCkgKiBQ QUdFOworfQorCitzdGF0aWMgc2l6ZV90Citkb19nZXRfbWFwcGVkKHVuc2lnbmVkIGluZCkgewor CXJldHVybiBkb19nZXRfc2l6ZV9pbXBsKCJzdGF0cy5hcmVuYXMuMC5tYXBwZWQiLCBpbmQpOwor fQorCitzdGF0aWMgdm9pZCAqCit0aGRfc3RhcnQodm9pZCAqYXJnKSB7CisJZm9yICh1bnNpZ25l ZCBuZXh0X2Vwb2NoID0gMTsgbmV4dF9lcG9jaCA8IE5FUE9DSFM7IG5leHRfZXBvY2grKykgewor CQkvKiBCdXN5LXdhaXQgZm9yIG5leHQgZXBvY2guICovCisJCXVuc2lnbmVkIGN1cl9lcG9jaDsK KwkJc3Bpbl90IHNwaW5uZXIgPSBTUElOX0lOSVRJQUxJWkVSOworCQl3aGlsZSAoKGN1cl9lcG9j aCA9IGF0b21pY19sb2FkX3UoJmVwb2NoLCBBVE9NSUNfQUNRVUlSRSkpICE9CisJCSAgICBuZXh0 X2Vwb2NoKSB7CisJCQlzcGluX2FkYXB0aXZlKCZzcGlubmVyKTsKKwkJfQorCQlleHBlY3RfdV9l cShjdXJfZXBvY2gsIG5leHRfZXBvY2gsICJVbmV4cGVjdGVkIGVwb2NoIik7CisKKwkJLyoKKwkJ ICogQWxsb2NhdGUuICBUaGUgbWFpbiB0aHJlYWQgd2lsbCByZXNldCB0aGUgYXJlbmEsIHNvIHRo ZXJlJ3MKKwkJICogbm8gbmVlZCB0byBkZWFsbG9jYXRlLgorCQkgKi8KKwkJZm9yICh1bnNpZ25l ZCBpID0gMDsgaSA8IFBFUl9USERfTkFMTE9DUzsgaSsrKSB7CisJCQl2b2lkICpwID0gbWFsbG9j eChzeiwgTUFMTE9DWF9BUkVOQShhcmVuYV9pbmQpIHwKKwkJCSAgICBNQUxMT0NYX1RDQUNIRV9O T05FCisJCQkgICAgKTsKKwkJCWV4cGVjdF9wdHJfbm90X251bGwocCwKKwkJCSAgICAiVW5leHBl Y3RlZCBtYWxsb2N4KCkgZmFpbHVyZVxuIik7CisJCX0KKworCQkvKiBMZXQgdGhlIG1haW4gdGhy ZWFkIGtub3cgd2UndmUgZmluaXNoZWQgdGhpcyBpdGVyYXRpb24uICovCisJCWF0b21pY19mZXRj aF9hZGRfdSgmbmZpbmlzaGVkLCAxLCBBVE9NSUNfUkVMRUFTRSk7CisJfQorCisJcmV0dXJuIE5V TEw7Cit9CisKK1RFU1RfQkVHSU4odGVzdF9yZXRhaW5lZCkgeworCXRlc3Rfc2tpcF9pZighY29u ZmlnX3N0YXRzKTsKKwl0ZXN0X3NraXBfaWYob3B0X2hwYSk7CisKKwlhcmVuYV9pbmQgPSBkb19h cmVuYV9jcmVhdGUoTlVMTCk7CisJc3ogPSBuYWxsb2N4KEhVR0VQQUdFLCAwKTsKKwlzaXplX3Qg Z3VhcmRfc3ogPSBzYW5fZ3VhcmRfZW5hYmxlZCgpID8gU0FOX1BBR0VfR1VBUkRTX1NJWkUgOiAw OworCWVzeiA9IHN6ICsgc3pfbGFyZ2VfcGFkICsgZ3VhcmRfc3o7CisKKwlhdG9taWNfc3RvcmVf dSgmZXBvY2gsIDAsIEFUT01JQ19SRUxBWEVEKTsKKworCXVuc2lnbmVkIG50aHJlYWRzID0gbmNw dXMgKiAyOworCWlmIChMR19TSVpFT0ZfUFRSIDwgMyAmJiBudGhyZWFkcyA+IDE2KSB7CisJCW50 aHJlYWRzID0gMTY7IC8qIDMyLWJpdCBwbGF0Zm9ybSBjb3VsZCBydW4gb3V0IG9mIHZhZGRyLiAq LworCX0KKwlWQVJJQUJMRV9BUlJBWSh0aGRfdCwgdGhyZWFkcywgbnRocmVhZHMpOworCWZvciAo dW5zaWduZWQgaSA9IDA7IGkgPCBudGhyZWFkczsgaSsrKSB7CisJCXRoZF9jcmVhdGUoJnRocmVh ZHNbaV0sIHRoZF9zdGFydCwgTlVMTCk7CisJfQorCisJZm9yICh1bnNpZ25lZCBlID0gMTsgZSA8 IE5FUE9DSFM7IGUrKykgeworCQlhdG9taWNfc3RvcmVfdSgmbmZpbmlzaGVkLCAwLCBBVE9NSUNf UkVMRUFTRSk7CisJCWF0b21pY19zdG9yZV91KCZlcG9jaCwgZSwgQVRPTUlDX1JFTEVBU0UpOwor CisJCS8qIFdhaXQgZm9yIHRocmVhZHMgdG8gZmluaXNoIGFsbG9jYXRpbmcuICovCisJCXNwaW5f dCBzcGlubmVyID0gU1BJTl9JTklUSUFMSVpFUjsKKwkJd2hpbGUgKGF0b21pY19sb2FkX3UoJm5m aW5pc2hlZCwgQVRPTUlDX0FDUVVJUkUpIDwgbnRocmVhZHMpIHsKKwkJCXNwaW5fYWRhcHRpdmUo JnNwaW5uZXIpOworCQl9CisKKwkJLyoKKwkJICogQXNzZXJ0IHRoYXQgcmV0YWluZWQgaXMgbm8g bW9yZSB0aGFuIHRoZSBzdW0gb2Ygc2l6ZSBjbGFzc2VzCisJCSAqIHRoYXQgc2hvdWxkIGhhdmUg YmVlbiB1c2VkIHRvIHNhdGlzZnkgdGhlIHdvcmtlciB0aHJlYWRzJworCQkgKiByZXF1ZXN0cywg ZGlzY291bnRpbmcgcGVyIGdyb3d0aCBmcmFnbWVudGF0aW9uLgorCQkgKi8KKwkJZG9fcmVmcmVz aCgpOworCisJCXNpemVfdCBhbGxvY2F0ZWQgPSAoZXN6IC0gZ3VhcmRfc3opICogbnRocmVhZHMg KgorCQkgICAgUEVSX1RIRF9OQUxMT0NTOworCQlzaXplX3QgYWN0aXZlID0gZG9fZ2V0X2FjdGl2 ZShhcmVuYV9pbmQpOworCQlleHBlY3RfenVfbGUoYWxsb2NhdGVkLCBhY3RpdmUsICJVbmV4cGVj dGVkIGFjdGl2ZSBtZW1vcnkiKTsKKwkJc2l6ZV90IG1hcHBlZCA9IGRvX2dldF9tYXBwZWQoYXJl bmFfaW5kKTsKKwkJZXhwZWN0X3p1X2xlKGFjdGl2ZSwgbWFwcGVkLCAiVW5leHBlY3RlZCBtYXBw ZWQgbWVtb3J5Iik7CisKKwkJYXJlbmFfdCAqYXJlbmEgPSBhcmVuYV9nZXQodHNkbl9mZXRjaCgp LCBhcmVuYV9pbmQsIGZhbHNlKTsKKwkJc2l6ZV90IHVzYWJsZSA9IDA7CisJCXNpemVfdCBmcmFn bWVudGVkID0gMDsKKwkJZm9yIChwc3ppbmRfdCBwaW5kID0gc3pfcHN6MmluZChIVUdFUEFHRSk7 IHBpbmQgPAorCQkgICAgYXJlbmEtPnBhX3NoYXJkLnBhYy5leHBfZ3Jvdy5uZXh0OyBwaW5kKysp IHsKKwkJCXNpemVfdCBwc3ogPSBzel9waW5kMnN6KHBpbmQpOworCQkJc2l6ZV90IHBzel9mcmFn bWVudGVkID0gcHN6ICUgZXN6OworCQkJc2l6ZV90IHBzel91c2FibGUgPSBwc3ogLSBwc3pfZnJh Z21lbnRlZDsKKwkJCS8qCisJCQkgKiBPbmx5IGNvbnNpZGVyIHNpemUgY2xhc3NlcyB0aGF0IHdv dWxkbid0IGJlIHNraXBwZWQuCisJCQkgKi8KKwkJCWlmIChwc3pfdXNhYmxlID4gMCkgeworCQkJ CWV4cGVjdF96dV9sdCh1c2FibGUsIGFsbG9jYXRlZCwKKwkJCQkgICAgIkV4Y2Vzc2l2ZSByZXRh aW5lZCBtZW1vcnkgIgorCQkJCSAgICAiKCUjenhbKyUjenhdID4gJSN6eCkiLCB1c2FibGUsIHBz el91c2FibGUsCisJCQkJICAgIGFsbG9jYXRlZCk7CisJCQkJZnJhZ21lbnRlZCArPSBwc3pfZnJh Z21lbnRlZDsKKwkJCQl1c2FibGUgKz0gcHN6X3VzYWJsZTsKKwkJCX0KKwkJfQorCisJCS8qCisJ CSAqIENsZWFuIHVwIGFyZW5hLiAgRGVzdHJveWluZyBhbmQgcmVjcmVhdGluZyB0aGUgYXJlbmEK KwkJICogaXMgc2ltcGxlciB0aGF0IHNwZWNpZnlpbmcgZXh0ZW50IGhvb2tzIHRoYXQgZGVhbGxv Y2F0ZQorCQkgKiAocmF0aGVyIHRoYW4gcmV0YWluaW5nKSBkdXJpbmcgcmVzZXQuCisJCSAqLwor CQlkb19hcmVuYV9kZXN0cm95KGFyZW5hX2luZCk7CisJCWV4cGVjdF91X2VxKGRvX2FyZW5hX2Ny ZWF0ZShOVUxMKSwgYXJlbmFfaW5kLAorCQkgICAgIlVuZXhwZWN0ZWQgYXJlbmEgaW5kZXgiKTsK Kwl9CisKKwlmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnRocmVhZHM7IGkrKykgeworCQl0aGRf am9pbih0aHJlYWRzW2ldLCBOVUxMKTsKKwl9CisKKwlkb19hcmVuYV9kZXN0cm95KGFyZW5hX2lu ZCk7Cit9CitURVNUX0VORAorCitpbnQKK21haW4odm9pZCkgeworCXJldHVybiB0ZXN0KAorCSAg ICB0ZXN0X3JldGFpbmVkKTsKK30KCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWls ZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvcnRyZWUuYyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1 aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9ydHJlZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAuLjQxMDFiNzIKLS0tIC9kZXYvbnVsbAorKysgYi8zODktZHMtYmFzZS0z LjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvcnRyZWUuYwpAQCAtMCwwICsxLDI4 OSBAQAorI2luY2x1ZGUgInRlc3QvamVtYWxsb2NfdGVzdC5oIgorCisjaW5jbHVkZSAiamVtYWxs b2MvaW50ZXJuYWwvcnRyZWUuaCIKKworI2RlZmluZSBJTlZBTElEX0FSRU5BX0lORCAoKDFVIDw8 IE1BTExPQ1hfQVJFTkFfQklUUykgLSAxKQorCisvKiBQb3RlbnRpYWxseSB0b28gbGFyZ2UgdG8g c2FmZWx5IHBsYWNlIG9uIHRoZSBzdGFjay4gKi8KK3J0cmVlX3QgdGVzdF9ydHJlZTsKKworVEVT VF9CRUdJTih0ZXN0X3J0cmVlX3JlYWRfZW1wdHkpIHsKKwl0c2RuX3QgKnRzZG47CisKKwl0c2Ru ID0gdHNkbl9mZXRjaCgpOworCisJYmFzZV90ICpiYXNlID0gYmFzZV9uZXcodHNkbiwgMCwgJmVo b29rc19kZWZhdWx0X2V4dGVudF9ob29rcywKKwkgICAgLyogbWV0YWRhdGFfdXNlX2hvb2tzICov IHRydWUpOworCWV4cGVjdF9wdHJfbm90X251bGwoYmFzZSwgIlVuZXhwZWN0ZWQgYmFzZV9uZXcg ZmFpbHVyZSIpOworCisJcnRyZWVfdCAqcnRyZWUgPSAmdGVzdF9ydHJlZTsKKwlydHJlZV9jdHhf dCBydHJlZV9jdHg7CisJcnRyZWVfY3R4X2RhdGFfaW5pdCgmcnRyZWVfY3R4KTsKKwlleHBlY3Rf ZmFsc2UocnRyZWVfbmV3KHJ0cmVlLCBiYXNlLCBmYWxzZSksCisJICAgICJVbmV4cGVjdGVkIHJ0 cmVlX25ldygpIGZhaWx1cmUiKTsKKwlydHJlZV9jb250ZW50c190IGNvbnRlbnRzOworCWV4cGVj dF90cnVlKHJ0cmVlX3JlYWRfaW5kZXBlbmRlbnQodHNkbiwgcnRyZWUsICZydHJlZV9jdHgsIFBB R0UsCisJICAgICZjb250ZW50cyksICJydHJlZV9yZWFkX2luZGVwZW5kZW50KCkgc2hvdWxkIGZh aWwgb24gZW1wdHkgcnRyZWUuIik7CisKKwliYXNlX2RlbGV0ZSh0c2RuLCBiYXNlKTsKK30KK1RF U1RfRU5ECisKKyN1bmRlZiBOVEhSRUFEUworI3VuZGVmIE5JVEVSUworI3VuZGVmIFNFRUQKKwor c3RhdGljIGVkYXRhX3QgKgorYWxsb2NfZWRhdGEodm9pZCkgeworCXZvaWQgKnJldCA9IG1hbGxv Y3goc2l6ZW9mKGVkYXRhX3QpLCBNQUxMT0NYX0FMSUdOKEVEQVRBX0FMSUdOTUVOVCkpOworCWFz c2VydF9wdHJfbm90X251bGwocmV0LCAiVW5leHBlY3RlZCBtYWxsb2N4KCkgZmFpbHVyZSIpOwor CisJcmV0dXJuIHJldDsKK30KKworVEVTVF9CRUdJTih0ZXN0X3J0cmVlX2V4dHJlbWEpIHsKKwll ZGF0YV90ICplZGF0YV9hLCAqZWRhdGFfYjsKKwllZGF0YV9hID0gYWxsb2NfZWRhdGEoKTsKKwll ZGF0YV9iID0gYWxsb2NfZWRhdGEoKTsKKwllZGF0YV9pbml0KGVkYXRhX2EsIElOVkFMSURfQVJF TkFfSU5ELCBOVUxMLCBTQ19MQVJHRV9NSU5DTEFTUywKKwkgICAgZmFsc2UsIHN6X3NpemUyaW5k ZXgoU0NfTEFSR0VfTUlOQ0xBU1MpLCAwLAorCSAgICBleHRlbnRfc3RhdGVfYWN0aXZlLCBmYWxz ZSwgZmFsc2UsIEVYVEVOVF9QQUlfUEFDLCBFWFRFTlRfTk9UX0hFQUQpOworCWVkYXRhX2luaXQo ZWRhdGFfYiwgSU5WQUxJRF9BUkVOQV9JTkQsIE5VTEwsIDAsIGZhbHNlLCBTQ19OU0laRVMsIDAs CisJICAgIGV4dGVudF9zdGF0ZV9hY3RpdmUsIGZhbHNlLCBmYWxzZSwgRVhURU5UX1BBSV9QQUMs IEVYVEVOVF9OT1RfSEVBRCk7CisKKwl0c2RuX3QgKnRzZG4gPSB0c2RuX2ZldGNoKCk7CisKKwli YXNlX3QgKmJhc2UgPSBiYXNlX25ldyh0c2RuLCAwLCAmZWhvb2tzX2RlZmF1bHRfZXh0ZW50X2hv b2tzLAorCSAgICAvKiBtZXRhZGF0YV91c2VfaG9va3MgKi8gdHJ1ZSk7CisJZXhwZWN0X3B0cl9u b3RfbnVsbChiYXNlLCAiVW5leHBlY3RlZCBiYXNlX25ldyBmYWlsdXJlIik7CisKKwlydHJlZV90 ICpydHJlZSA9ICZ0ZXN0X3J0cmVlOworCXJ0cmVlX2N0eF90IHJ0cmVlX2N0eDsKKwlydHJlZV9j dHhfZGF0YV9pbml0KCZydHJlZV9jdHgpOworCWV4cGVjdF9mYWxzZShydHJlZV9uZXcocnRyZWUs IGJhc2UsIGZhbHNlKSwKKwkgICAgIlVuZXhwZWN0ZWQgcnRyZWVfbmV3KCkgZmFpbHVyZSIpOwor CisJcnRyZWVfY29udGVudHNfdCBjb250ZW50c19hOworCWNvbnRlbnRzX2EuZWRhdGEgPSBlZGF0 YV9hOworCWNvbnRlbnRzX2EubWV0YWRhdGEuc3ppbmQgPSBlZGF0YV9zemluZF9nZXQoZWRhdGFf YSk7CisJY29udGVudHNfYS5tZXRhZGF0YS5zbGFiID0gZWRhdGFfc2xhYl9nZXQoZWRhdGFfYSk7 CisJY29udGVudHNfYS5tZXRhZGF0YS5pc19oZWFkID0gZWRhdGFfaXNfaGVhZF9nZXQoZWRhdGFf YSk7CisJY29udGVudHNfYS5tZXRhZGF0YS5zdGF0ZSA9IGVkYXRhX3N0YXRlX2dldChlZGF0YV9h KTsKKwlleHBlY3RfZmFsc2UocnRyZWVfd3JpdGUodHNkbiwgcnRyZWUsICZydHJlZV9jdHgsIFBB R0UsIGNvbnRlbnRzX2EpLAorCSAgICAiVW5leHBlY3RlZCBydHJlZV93cml0ZSgpIGZhaWx1cmUi KTsKKwlleHBlY3RfZmFsc2UocnRyZWVfd3JpdGUodHNkbiwgcnRyZWUsICZydHJlZV9jdHgsIFBB R0UsIGNvbnRlbnRzX2EpLAorCSAgICAiVW5leHBlY3RlZCBydHJlZV93cml0ZSgpIGZhaWx1cmUi KTsKKwlydHJlZV9jb250ZW50c190IHJlYWRfY29udGVudHNfYSA9IHJ0cmVlX3JlYWQodHNkbiwg cnRyZWUsICZydHJlZV9jdHgsCisJICAgIFBBR0UpOworCWV4cGVjdF90cnVlKGNvbnRlbnRzX2Eu ZWRhdGEgPT0gcmVhZF9jb250ZW50c19hLmVkYXRhCisJICAgICYmIGNvbnRlbnRzX2EubWV0YWRh dGEuc3ppbmQgPT0gcmVhZF9jb250ZW50c19hLm1ldGFkYXRhLnN6aW5kCisJICAgICYmIGNvbnRl bnRzX2EubWV0YWRhdGEuc2xhYiA9PSByZWFkX2NvbnRlbnRzX2EubWV0YWRhdGEuc2xhYgorCSAg ICAmJiBjb250ZW50c19hLm1ldGFkYXRhLmlzX2hlYWQgPT0gcmVhZF9jb250ZW50c19hLm1ldGFk YXRhLmlzX2hlYWQKKwkgICAgJiYgY29udGVudHNfYS5tZXRhZGF0YS5zdGF0ZSA9PSByZWFkX2Nv bnRlbnRzX2EubWV0YWRhdGEuc3RhdGUsCisJICAgICJydHJlZV9yZWFkKCkgc2hvdWxkIHJldHVy biBwcmV2aW91c2x5IHNldCB2YWx1ZSIpOworCisJcnRyZWVfY29udGVudHNfdCBjb250ZW50c19i OworCWNvbnRlbnRzX2IuZWRhdGEgPSBlZGF0YV9iOworCWNvbnRlbnRzX2IubWV0YWRhdGEuc3pp bmQgPSBlZGF0YV9zemluZF9nZXRfbWF5YmVfaW52YWxpZChlZGF0YV9iKTsKKwljb250ZW50c19i Lm1ldGFkYXRhLnNsYWIgPSBlZGF0YV9zbGFiX2dldChlZGF0YV9iKTsKKwljb250ZW50c19iLm1l dGFkYXRhLmlzX2hlYWQgPSBlZGF0YV9pc19oZWFkX2dldChlZGF0YV9iKTsKKwljb250ZW50c19i Lm1ldGFkYXRhLnN0YXRlID0gZWRhdGFfc3RhdGVfZ2V0KGVkYXRhX2IpOworCWV4cGVjdF9mYWxz ZShydHJlZV93cml0ZSh0c2RuLCBydHJlZSwgJnJ0cmVlX2N0eCwgfigodWludHB0cl90KTApLAor CSAgICBjb250ZW50c19iKSwgIlVuZXhwZWN0ZWQgcnRyZWVfd3JpdGUoKSBmYWlsdXJlIik7CisJ cnRyZWVfY29udGVudHNfdCByZWFkX2NvbnRlbnRzX2IgPSBydHJlZV9yZWFkKHRzZG4sIHJ0cmVl LCAmcnRyZWVfY3R4LAorCSAgICB+KCh1aW50cHRyX3QpMCkpOworCWFzc2VydF90cnVlKGNvbnRl bnRzX2IuZWRhdGEgPT0gcmVhZF9jb250ZW50c19iLmVkYXRhCisJICAgICYmIGNvbnRlbnRzX2Iu bWV0YWRhdGEuc3ppbmQgPT0gcmVhZF9jb250ZW50c19iLm1ldGFkYXRhLnN6aW5kCisJICAgICYm IGNvbnRlbnRzX2IubWV0YWRhdGEuc2xhYiA9PSByZWFkX2NvbnRlbnRzX2IubWV0YWRhdGEuc2xh YgorCSAgICAmJiBjb250ZW50c19iLm1ldGFkYXRhLmlzX2hlYWQgPT0gcmVhZF9jb250ZW50c19i Lm1ldGFkYXRhLmlzX2hlYWQKKwkgICAgJiYgY29udGVudHNfYi5tZXRhZGF0YS5zdGF0ZSA9PSBy ZWFkX2NvbnRlbnRzX2IubWV0YWRhdGEuc3RhdGUsCisJICAgICJydHJlZV9yZWFkKCkgc2hvdWxk IHJldHVybiBwcmV2aW91c2x5IHNldCB2YWx1ZSIpOworCisJYmFzZV9kZWxldGUodHNkbiwgYmFz ZSk7Cit9CitURVNUX0VORAorCitURVNUX0JFR0lOKHRlc3RfcnRyZWVfYml0cykgeworCXRzZG5f dCAqdHNkbiA9IHRzZG5fZmV0Y2goKTsKKwliYXNlX3QgKmJhc2UgPSBiYXNlX25ldyh0c2RuLCAw LCAmZWhvb2tzX2RlZmF1bHRfZXh0ZW50X2hvb2tzLAorCSAgICAvKiBtZXRhZGF0YV91c2VfaG9v a3MgKi8gdHJ1ZSk7CisJZXhwZWN0X3B0cl9ub3RfbnVsbChiYXNlLCAiVW5leHBlY3RlZCBiYXNl X25ldyBmYWlsdXJlIik7CisKKwl1aW50cHRyX3Qga2V5c1tdID0ge1BBR0UsIFBBR0UgKyAxLAor CSAgICBQQUdFICsgKCgodWludHB0cl90KTEpIDw8IExHX1BBR0UpIC0gMX07CisJZWRhdGFfdCAq ZWRhdGFfYyA9IGFsbG9jX2VkYXRhKCk7CisJZWRhdGFfaW5pdChlZGF0YV9jLCBJTlZBTElEX0FS RU5BX0lORCwgTlVMTCwgMCwgZmFsc2UsIFNDX05TSVpFUywgMCwKKwkgICAgZXh0ZW50X3N0YXRl X2FjdGl2ZSwgZmFsc2UsIGZhbHNlLCBFWFRFTlRfUEFJX1BBQywgRVhURU5UX05PVF9IRUFEKTsK KworCXJ0cmVlX3QgKnJ0cmVlID0gJnRlc3RfcnRyZWU7CisJcnRyZWVfY3R4X3QgcnRyZWVfY3R4 OworCXJ0cmVlX2N0eF9kYXRhX2luaXQoJnJ0cmVlX2N0eCk7CisJZXhwZWN0X2ZhbHNlKHJ0cmVl X25ldyhydHJlZSwgYmFzZSwgZmFsc2UpLAorCSAgICAiVW5leHBlY3RlZCBydHJlZV9uZXcoKSBm YWlsdXJlIik7CisKKwlmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZW9mKGtleXMpL3NpemVv Zih1aW50cHRyX3QpOyBpKyspIHsKKwkJcnRyZWVfY29udGVudHNfdCBjb250ZW50czsKKwkJY29u dGVudHMuZWRhdGEgPSBlZGF0YV9jOworCQljb250ZW50cy5tZXRhZGF0YS5zemluZCA9IFNDX05T SVpFUzsKKwkJY29udGVudHMubWV0YWRhdGEuc2xhYiA9IGZhbHNlOworCQljb250ZW50cy5tZXRh ZGF0YS5pc19oZWFkID0gZmFsc2U7CisJCWNvbnRlbnRzLm1ldGFkYXRhLnN0YXRlID0gZXh0ZW50 X3N0YXRlX2FjdGl2ZTsKKworCQlleHBlY3RfZmFsc2UocnRyZWVfd3JpdGUodHNkbiwgcnRyZWUs ICZydHJlZV9jdHgsIGtleXNbaV0sCisJCSAgICBjb250ZW50cyksICJVbmV4cGVjdGVkIHJ0cmVl X3dyaXRlKCkgZmFpbHVyZSIpOworCQlmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgc2l6ZW9mKGtl eXMpL3NpemVvZih1aW50cHRyX3QpOyBqKyspIHsKKwkJCWV4cGVjdF9wdHJfZXEocnRyZWVfcmVh ZCh0c2RuLCBydHJlZSwgJnJ0cmVlX2N0eCwKKwkJCSAgICBrZXlzW2pdKS5lZGF0YSwgZWRhdGFf YywKKwkJCSAgICAicnRyZWVfZWRhdGFfcmVhZCgpIHNob3VsZCByZXR1cm4gcHJldmlvdXNseSBz ZXQgIgorCQkJICAgICJ2YWx1ZSBhbmQgaWdub3JlIGluc2lnbmlmaWNhbnQga2V5IGJpdHM7IGk9 JXUsICIKKwkJCSAgICAiaj0ldSwgc2V0IGtleT0lIyJGTVR4UFRSIiwgZ2V0IGtleT0lIyJGTVR4 UFRSLCBpLAorCQkJICAgIGosIGtleXNbaV0sIGtleXNbal0pOworCQl9CisJCWV4cGVjdF9wdHJf bnVsbChydHJlZV9yZWFkKHRzZG4sIHJ0cmVlLCAmcnRyZWVfY3R4LAorCQkgICAgKCgodWludHB0 cl90KTIpIDw8IExHX1BBR0UpKS5lZGF0YSwKKwkJICAgICJPbmx5IGxlZnRtb3N0IHJ0cmVlIGxl YWYgc2hvdWxkIGJlIHNldDsgaT0ldSIsIGkpOworCQlydHJlZV9jbGVhcih0c2RuLCBydHJlZSwg JnJ0cmVlX2N0eCwga2V5c1tpXSk7CisJfQorCisJYmFzZV9kZWxldGUodHNkbiwgYmFzZSk7Cit9 CitURVNUX0VORAorCitURVNUX0JFR0lOKHRlc3RfcnRyZWVfcmFuZG9tKSB7CisjZGVmaW5lIE5T RVQgMTYKKyNkZWZpbmUgU0VFRCA0MgorCXNmbXRfdCAqc2ZtdCA9IGluaXRfZ2VuX3JhbmQoU0VF RCk7CisJdHNkbl90ICp0c2RuID0gdHNkbl9mZXRjaCgpOworCisJYmFzZV90ICpiYXNlID0gYmFz ZV9uZXcodHNkbiwgMCwgJmVob29rc19kZWZhdWx0X2V4dGVudF9ob29rcywKKwkgICAgLyogbWV0 YWRhdGFfdXNlX2hvb2tzICovIHRydWUpOworCWV4cGVjdF9wdHJfbm90X251bGwoYmFzZSwgIlVu ZXhwZWN0ZWQgYmFzZV9uZXcgZmFpbHVyZSIpOworCisJdWludHB0cl90IGtleXNbTlNFVF07CisJ cnRyZWVfdCAqcnRyZWUgPSAmdGVzdF9ydHJlZTsKKwlydHJlZV9jdHhfdCBydHJlZV9jdHg7CisJ cnRyZWVfY3R4X2RhdGFfaW5pdCgmcnRyZWVfY3R4KTsKKworCWVkYXRhX3QgKmVkYXRhX2QgPSBh bGxvY19lZGF0YSgpOworCWVkYXRhX2luaXQoZWRhdGFfZCwgSU5WQUxJRF9BUkVOQV9JTkQsIE5V TEwsIDAsIGZhbHNlLCBTQ19OU0laRVMsIDAsCisJICAgIGV4dGVudF9zdGF0ZV9hY3RpdmUsIGZh bHNlLCBmYWxzZSwgRVhURU5UX1BBSV9QQUMsIEVYVEVOVF9OT1RfSEVBRCk7CisKKwlleHBlY3Rf ZmFsc2UocnRyZWVfbmV3KHJ0cmVlLCBiYXNlLCBmYWxzZSksCisJICAgICJVbmV4cGVjdGVkIHJ0 cmVlX25ldygpIGZhaWx1cmUiKTsKKworCWZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBOU0VUOyBp KyspIHsKKwkJa2V5c1tpXSA9ICh1aW50cHRyX3QpZ2VuX3JhbmQ2NChzZm10KTsKKwkJcnRyZWVf bGVhZl9lbG1fdCAqZWxtID0gcnRyZWVfbGVhZl9lbG1fbG9va3VwKHRzZG4sIHJ0cmVlLAorCQkg ICAgJnJ0cmVlX2N0eCwga2V5c1tpXSwgZmFsc2UsIHRydWUpOworCQlleHBlY3RfcHRyX25vdF9u dWxsKGVsbSwKKwkJICAgICJVbmV4cGVjdGVkIHJ0cmVlX2xlYWZfZWxtX2xvb2t1cCgpIGZhaWx1 cmUiKTsKKwkJcnRyZWVfY29udGVudHNfdCBjb250ZW50czsKKwkJY29udGVudHMuZWRhdGEgPSBl ZGF0YV9kOworCQljb250ZW50cy5tZXRhZGF0YS5zemluZCA9IFNDX05TSVpFUzsKKwkJY29udGVu dHMubWV0YWRhdGEuc2xhYiA9IGZhbHNlOworCQljb250ZW50cy5tZXRhZGF0YS5pc19oZWFkID0g ZmFsc2U7CisJCWNvbnRlbnRzLm1ldGFkYXRhLnN0YXRlID0gZWRhdGFfc3RhdGVfZ2V0KGVkYXRh X2QpOworCQlydHJlZV9sZWFmX2VsbV93cml0ZSh0c2RuLCBydHJlZSwgZWxtLCBjb250ZW50cyk7 CisJCWV4cGVjdF9wdHJfZXEocnRyZWVfcmVhZCh0c2RuLCBydHJlZSwgJnJ0cmVlX2N0eCwKKwkJ ICAgIGtleXNbaV0pLmVkYXRhLCBlZGF0YV9kLAorCQkgICAgInJ0cmVlX2VkYXRhX3JlYWQoKSBz aG91bGQgcmV0dXJuIHByZXZpb3VzbHkgc2V0IHZhbHVlIik7CisJfQorCWZvciAodW5zaWduZWQg aSA9IDA7IGkgPCBOU0VUOyBpKyspIHsKKwkJZXhwZWN0X3B0cl9lcShydHJlZV9yZWFkKHRzZG4s IHJ0cmVlLCAmcnRyZWVfY3R4LAorCQkgICAga2V5c1tpXSkuZWRhdGEsIGVkYXRhX2QsCisJCSAg ICAicnRyZWVfZWRhdGFfcmVhZCgpIHNob3VsZCByZXR1cm4gcHJldmlvdXNseSBzZXQgdmFsdWUs ICIKKwkJICAgICJpPSV1IiwgaSk7CisJfQorCisJZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IE5T RVQ7IGkrKykgeworCQlydHJlZV9jbGVhcih0c2RuLCBydHJlZSwgJnJ0cmVlX2N0eCwga2V5c1tp XSk7CisJCWV4cGVjdF9wdHJfbnVsbChydHJlZV9yZWFkKHRzZG4sIHJ0cmVlLCAmcnRyZWVfY3R4 LAorCQkgICAga2V5c1tpXSkuZWRhdGEsCisJCSAgICJydHJlZV9lZGF0YV9yZWFkKCkgc2hvdWxk IHJldHVybiBwcmV2aW91c2x5IHNldCB2YWx1ZSIpOworCX0KKwlmb3IgKHVuc2lnbmVkIGkgPSAw OyBpIDwgTlNFVDsgaSsrKSB7CisJCWV4cGVjdF9wdHJfbnVsbChydHJlZV9yZWFkKHRzZG4sIHJ0 cmVlLCAmcnRyZWVfY3R4LAorCQkgICAga2V5c1tpXSkuZWRhdGEsCisJCSAgICAicnRyZWVfZWRh dGFfcmVhZCgpIHNob3VsZCByZXR1cm4gcHJldmlvdXNseSBzZXQgdmFsdWUiKTsKKwl9CisKKwli YXNlX2RlbGV0ZSh0c2RuLCBiYXNlKTsKKwlmaW5pX2dlbl9yYW5kKHNmbXQpOworI3VuZGVmIE5T RVQKKyN1bmRlZiBTRUVECit9CitURVNUX0VORAorCitzdGF0aWMgdm9pZAordGVzdF9ydHJlZV9y YW5nZV93cml0ZSh0c2RuX3QgKnRzZG4sIHJ0cmVlX3QgKnJ0cmVlLCB1aW50cHRyX3Qgc3RhcnQs CisgICAgdWludHB0cl90IGVuZCkgeworCXJ0cmVlX2N0eF90IHJ0cmVlX2N0eDsKKwlydHJlZV9j dHhfZGF0YV9pbml0KCZydHJlZV9jdHgpOworCisJZWRhdGFfdCAqZWRhdGFfZSA9IGFsbG9jX2Vk YXRhKCk7CisJZWRhdGFfaW5pdChlZGF0YV9lLCBJTlZBTElEX0FSRU5BX0lORCwgTlVMTCwgMCwg ZmFsc2UsIFNDX05TSVpFUywgMCwKKwkgICAgZXh0ZW50X3N0YXRlX2FjdGl2ZSwgZmFsc2UsIGZh bHNlLCBFWFRFTlRfUEFJX1BBQywgRVhURU5UX05PVF9IRUFEKTsKKwlydHJlZV9jb250ZW50c190 IGNvbnRlbnRzOworCWNvbnRlbnRzLmVkYXRhID0gZWRhdGFfZTsKKwljb250ZW50cy5tZXRhZGF0 YS5zemluZCA9IFNDX05TSVpFUzsKKwljb250ZW50cy5tZXRhZGF0YS5zbGFiID0gZmFsc2U7CisJ Y29udGVudHMubWV0YWRhdGEuaXNfaGVhZCA9IGZhbHNlOworCWNvbnRlbnRzLm1ldGFkYXRhLnN0 YXRlID0gZXh0ZW50X3N0YXRlX2FjdGl2ZTsKKworCWV4cGVjdF9mYWxzZShydHJlZV93cml0ZSh0 c2RuLCBydHJlZSwgJnJ0cmVlX2N0eCwgc3RhcnQsCisJICAgIGNvbnRlbnRzKSwgIlVuZXhwZWN0 ZWQgcnRyZWVfd3JpdGUoKSBmYWlsdXJlIik7CisJZXhwZWN0X2ZhbHNlKHJ0cmVlX3dyaXRlKHRz ZG4sIHJ0cmVlLCAmcnRyZWVfY3R4LCBlbmQsCisJICAgIGNvbnRlbnRzKSwgIlVuZXhwZWN0ZWQg cnRyZWVfd3JpdGUoKSBmYWlsdXJlIik7CisKKwlydHJlZV93cml0ZV9yYW5nZSh0c2RuLCBydHJl ZSwgJnJ0cmVlX2N0eCwgc3RhcnQsIGVuZCwgY29udGVudHMpOworCWZvciAodWludHB0cl90IGkg PSAwOyBpIDwgKChlbmQgLSBzdGFydCkgPj4gTEdfUEFHRSk7IGkrKykgeworCQlleHBlY3RfcHRy X2VxKHJ0cmVlX3JlYWQodHNkbiwgcnRyZWUsICZydHJlZV9jdHgsCisJCSAgICBzdGFydCArIChp IDw8IExHX1BBR0UpKS5lZGF0YSwgZWRhdGFfZSwKKwkJICAgICJydHJlZV9lZGF0YV9yZWFkKCkg c2hvdWxkIHJldHVybiBwcmV2aW91c2x5IHNldCB2YWx1ZSIpOworCX0KKwlydHJlZV9jbGVhcl9y YW5nZSh0c2RuLCBydHJlZSwgJnJ0cmVlX2N0eCwgc3RhcnQsIGVuZCk7CisJcnRyZWVfbGVhZl9l bG1fdCAqZWxtOworCWZvciAodWludHB0cl90IGkgPSAwOyBpIDwgKChlbmQgLSBzdGFydCkgPj4g TEdfUEFHRSk7IGkrKykgeworCQllbG0gPSBydHJlZV9sZWFmX2VsbV9sb29rdXAodHNkbiwgcnRy ZWUsICZydHJlZV9jdHgsCisJCSAgICBzdGFydCArIChpIDw8IExHX1BBR0UpLCBmYWxzZSwgZmFs c2UpOworCQlleHBlY3RfcHRyX25vdF9udWxsKGVsbSwgIlNob3VsZCBoYXZlIGJlZW4gaW5pdGlh bGl6ZWQuIik7CisJCWV4cGVjdF9wdHJfbnVsbChydHJlZV9sZWFmX2VsbV9yZWFkKHRzZG4sIHJ0 cmVlLCBlbG0sCisJCSAgICBmYWxzZSkuZWRhdGEsICJTaG91bGQgaGF2ZSBiZWVuIGNsZWFyZWQu Iik7CisJfQorfQorCitURVNUX0JFR0lOKHRlc3RfcnRyZWVfcmFuZ2UpIHsKKwl0c2RuX3QgKnRz ZG4gPSB0c2RuX2ZldGNoKCk7CisJYmFzZV90ICpiYXNlID0gYmFzZV9uZXcodHNkbiwgMCwgJmVo b29rc19kZWZhdWx0X2V4dGVudF9ob29rcywKKwkgICAgLyogbWV0YWRhdGFfdXNlX2hvb2tzICov IHRydWUpOworCWV4cGVjdF9wdHJfbm90X251bGwoYmFzZSwgIlVuZXhwZWN0ZWQgYmFzZV9uZXcg ZmFpbHVyZSIpOworCisJcnRyZWVfdCAqcnRyZWUgPSAmdGVzdF9ydHJlZTsKKwlleHBlY3RfZmFs c2UocnRyZWVfbmV3KHJ0cmVlLCBiYXNlLCBmYWxzZSksCisJICAgICJVbmV4cGVjdGVkIHJ0cmVl X25ldygpIGZhaWx1cmUiKTsKKworCS8qIE5vdCBjcm9zc2luZyBydHJlZSBub2RlIGJvdW5kYXJ5 IGZpcnN0LiAqLworCXVpbnRwdHJfdCBzdGFydCA9IFpVKDEpIDw8IHJ0cmVlX2xlYWZfbWFza2Jp dHMoKTsKKwl1aW50cHRyX3QgZW5kID0gc3RhcnQgKyAoWlUoMTAwKSA8PCBMR19QQUdFKTsKKwl0 ZXN0X3J0cmVlX3JhbmdlX3dyaXRlKHRzZG4sIHJ0cmVlLCBzdGFydCwgZW5kKTsKKworCS8qIENy b3NzaW5nIHJ0cmVlIG5vZGUgYm91bmRhcnkuICovCisJc3RhcnQgPSAoWlUoMSkgPDwgcnRyZWVf bGVhZl9tYXNrYml0cygpKSAtIChaVSgxMCkgPDwgTEdfUEFHRSk7CisJZW5kID0gc3RhcnQgKyAo WlUoMTAwKSA8PCBMR19QQUdFKTsKKwlhc3NlcnRfcHRyX25lKCh2b2lkICopcnRyZWVfbGVhZmtl eShzdGFydCksICh2b2lkICopcnRyZWVfbGVhZmtleShlbmQpLAorCSAgICAiVGhlIHJhbmdlIHNo b3VsZCBzcGFuIGFjcm9zcyB0d28gcnRyZWUgbm9kZXMiKTsKKwl0ZXN0X3J0cmVlX3JhbmdlX3dy aXRlKHRzZG4sIHJ0cmVlLCBzdGFydCwgZW5kKTsKKworCWJhc2VfZGVsZXRlKHRzZG4sIGJhc2Up OworfQorVEVTVF9FTkQKKworaW50CittYWluKHZvaWQpIHsKKwlyZXR1cm4gdGVzdCgKKwkgICAg dGVzdF9ydHJlZV9yZWFkX2VtcHR5LAorCSAgICB0ZXN0X3J0cmVlX2V4dHJlbWEsCisJICAgIHRl c3RfcnRyZWVfYml0cywKKwkgICAgdGVzdF9ydHJlZV9yYW5kb20sCisJICAgIHRlc3RfcnRyZWVf cmFuZ2UpOworfQoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9j LTUuMy4wL3Rlc3QvdW5pdC9zYWZldHlfY2hlY2suYyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxk L2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9zYWZldHlfY2hlY2suYwpuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwLi44NDcyNjY3Ci0tLSAvZGV2L251bGwKKysrIGIvMzg5LWRzLWJh c2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L3NhZmV0eV9jaGVjay5jCkBA IC0wLDAgKzEsMTYzIEBACisjaW5jbHVkZSAidGVzdC9qZW1hbGxvY190ZXN0LmgiCisKKyNpbmNs dWRlICJqZW1hbGxvYy9pbnRlcm5hbC9zYWZldHlfY2hlY2suaCIKKworLyoKKyAqIE5vdGUgdGhh dCB3ZSBnZXQgY2FsbGVkIHRocm91Z2ggc2FmZXR5X2NoZWNrLnNoLCB3aGljaCB0dXJucyBvbiBz YW1wbGluZyBmb3IKKyAqIGV2ZXJ5dGhpbmcuCisgKi8KKworYm9vbCBmYWtlX2Fib3J0X2NhbGxl ZDsKK3ZvaWQgZmFrZV9hYm9ydChjb25zdCBjaGFyICptZXNzYWdlKSB7CisJKHZvaWQpbWVzc2Fn ZTsKKwlmYWtlX2Fib3J0X2NhbGxlZCA9IHRydWU7Cit9CisKK3N0YXRpYyB2b2lkCitidWZmZXJf b3ZlcmZsb3dfd3JpdGUoY2hhciAqcHRyLCBzaXplX3Qgc2l6ZSkgeworCS8qIEF2b2lkIG92ZXJm bG93IHdhcm5pbmdzLiAqLworCXZvbGF0aWxlIHNpemVfdCBpZHggPSBzaXplOworCXB0cltpZHhd ID0gMDsKK30KKworVEVTVF9CRUdJTih0ZXN0X21hbGxvY19mcmVlX292ZXJmbG93KSB7CisJdGVz dF9za2lwX2lmKCFjb25maWdfcHJvZik7CisJdGVzdF9za2lwX2lmKCFjb25maWdfb3B0X3NhZmV0 eV9jaGVja3MpOworCisJc2FmZXR5X2NoZWNrX3NldF9hYm9ydCgmZmFrZV9hYm9ydCk7CisJLyog QnVmZmVyIG92ZXJmbG93ISAqLworCWNoYXIqIHB0ciA9IG1hbGxvYygxMjgpOworCWJ1ZmZlcl9v dmVyZmxvd193cml0ZShwdHIsIDEyOCk7CisJZnJlZShwdHIpOworCXNhZmV0eV9jaGVja19zZXRf YWJvcnQoTlVMTCk7CisKKwlleHBlY3RfYl9lcShmYWtlX2Fib3J0X2NhbGxlZCwgdHJ1ZSwgIlJl ZHpvbmUgY2hlY2sgZGlkbid0IGZpcmUuIik7CisJZmFrZV9hYm9ydF9jYWxsZWQgPSBmYWxzZTsK K30KK1RFU1RfRU5ECisKK1RFU1RfQkVHSU4odGVzdF9tYWxsb2N4X2RhbGxvY3hfb3ZlcmZsb3cp IHsKKwl0ZXN0X3NraXBfaWYoIWNvbmZpZ19wcm9mKTsKKwl0ZXN0X3NraXBfaWYoIWNvbmZpZ19v cHRfc2FmZXR5X2NoZWNrcyk7CisKKwlzYWZldHlfY2hlY2tfc2V0X2Fib3J0KCZmYWtlX2Fib3J0 KTsKKwkvKiBCdWZmZXIgb3ZlcmZsb3chICovCisJY2hhciogcHRyID0gbWFsbG9jeCgxMjgsIDAp OworCWJ1ZmZlcl9vdmVyZmxvd193cml0ZShwdHIsIDEyOCk7CisJZGFsbG9jeChwdHIsIDApOwor CXNhZmV0eV9jaGVja19zZXRfYWJvcnQoTlVMTCk7CisKKwlleHBlY3RfYl9lcShmYWtlX2Fib3J0 X2NhbGxlZCwgdHJ1ZSwgIlJlZHpvbmUgY2hlY2sgZGlkbid0IGZpcmUuIik7CisJZmFrZV9hYm9y dF9jYWxsZWQgPSBmYWxzZTsKK30KK1RFU1RfRU5ECisKK1RFU1RfQkVHSU4odGVzdF9tYWxsb2Nf c2RhbGxvY3hfb3ZlcmZsb3cpIHsKKwl0ZXN0X3NraXBfaWYoIWNvbmZpZ19wcm9mKTsKKwl0ZXN0 X3NraXBfaWYoIWNvbmZpZ19vcHRfc2FmZXR5X2NoZWNrcyk7CisKKwlzYWZldHlfY2hlY2tfc2V0 X2Fib3J0KCZmYWtlX2Fib3J0KTsKKwkvKiBCdWZmZXIgb3ZlcmZsb3chICovCisJY2hhciogcHRy ID0gbWFsbG9jKDEyOCk7CisJYnVmZmVyX292ZXJmbG93X3dyaXRlKHB0ciwgMTI4KTsKKwlzZGFs bG9jeChwdHIsIDEyOCwgMCk7CisJc2FmZXR5X2NoZWNrX3NldF9hYm9ydChOVUxMKTsKKworCWV4 cGVjdF9iX2VxKGZha2VfYWJvcnRfY2FsbGVkLCB0cnVlLCAiUmVkem9uZSBjaGVjayBkaWRuJ3Qg ZmlyZS4iKTsKKwlmYWtlX2Fib3J0X2NhbGxlZCA9IGZhbHNlOworfQorVEVTVF9FTkQKKworVEVT VF9CRUdJTih0ZXN0X3JlYWxsb2Nfb3ZlcmZsb3cpIHsKKwl0ZXN0X3NraXBfaWYoIWNvbmZpZ19w cm9mKTsKKwl0ZXN0X3NraXBfaWYoIWNvbmZpZ19vcHRfc2FmZXR5X2NoZWNrcyk7CisKKwlzYWZl dHlfY2hlY2tfc2V0X2Fib3J0KCZmYWtlX2Fib3J0KTsKKwkvKiBCdWZmZXIgb3ZlcmZsb3chICov CisJY2hhciogcHRyID0gbWFsbG9jKDEyOCk7CisJYnVmZmVyX292ZXJmbG93X3dyaXRlKHB0ciwg MTI4KTsKKwlwdHIgPSByZWFsbG9jKHB0ciwgMTI5KTsKKwlzYWZldHlfY2hlY2tfc2V0X2Fib3J0 KE5VTEwpOworCWZyZWUocHRyKTsKKworCWV4cGVjdF9iX2VxKGZha2VfYWJvcnRfY2FsbGVkLCB0 cnVlLCAiUmVkem9uZSBjaGVjayBkaWRuJ3QgZmlyZS4iKTsKKwlmYWtlX2Fib3J0X2NhbGxlZCA9 IGZhbHNlOworfQorVEVTVF9FTkQKKworVEVTVF9CRUdJTih0ZXN0X3JhbGxvY3hfb3ZlcmZsb3cp IHsKKwl0ZXN0X3NraXBfaWYoIWNvbmZpZ19wcm9mKTsKKwl0ZXN0X3NraXBfaWYoIWNvbmZpZ19v cHRfc2FmZXR5X2NoZWNrcyk7CisKKwlzYWZldHlfY2hlY2tfc2V0X2Fib3J0KCZmYWtlX2Fib3J0 KTsKKwkvKiBCdWZmZXIgb3ZlcmZsb3chICovCisJY2hhciogcHRyID0gbWFsbG9jKDEyOCk7CisJ YnVmZmVyX292ZXJmbG93X3dyaXRlKHB0ciwgMTI4KTsKKwlwdHIgPSByYWxsb2N4KHB0ciwgMTI5 LCAwKTsKKwlzYWZldHlfY2hlY2tfc2V0X2Fib3J0KE5VTEwpOworCWZyZWUocHRyKTsKKworCWV4 cGVjdF9iX2VxKGZha2VfYWJvcnRfY2FsbGVkLCB0cnVlLCAiUmVkem9uZSBjaGVjayBkaWRuJ3Qg ZmlyZS4iKTsKKwlmYWtlX2Fib3J0X2NhbGxlZCA9IGZhbHNlOworfQorVEVTVF9FTkQKKworVEVT VF9CRUdJTih0ZXN0X3hhbGxvY3hfb3ZlcmZsb3cpIHsKKwl0ZXN0X3NraXBfaWYoIWNvbmZpZ19w cm9mKTsKKwl0ZXN0X3NraXBfaWYoIWNvbmZpZ19vcHRfc2FmZXR5X2NoZWNrcyk7CisKKwlzYWZl dHlfY2hlY2tfc2V0X2Fib3J0KCZmYWtlX2Fib3J0KTsKKwkvKiBCdWZmZXIgb3ZlcmZsb3chICov CisJY2hhciogcHRyID0gbWFsbG9jKDEyOCk7CisJYnVmZmVyX292ZXJmbG93X3dyaXRlKHB0ciwg MTI4KTsKKwlzaXplX3QgcmVzdWx0ID0geGFsbG9jeChwdHIsIDEyOSwgMCwgMCk7CisJZXhwZWN0 X3p1X2VxKHJlc3VsdCwgMTI4LCAiIik7CisJZnJlZShwdHIpOworCWV4cGVjdF9iX2VxKGZha2Vf YWJvcnRfY2FsbGVkLCB0cnVlLCAiUmVkem9uZSBjaGVjayBkaWRuJ3QgZmlyZS4iKTsKKwlmYWtl X2Fib3J0X2NhbGxlZCA9IGZhbHNlOworCXNhZmV0eV9jaGVja19zZXRfYWJvcnQoTlVMTCk7Cit9 CitURVNUX0VORAorCitURVNUX0JFR0lOKHRlc3RfcmVhbGxvY19ub19vdmVyZmxvdykgeworCWNo YXIqIHB0ciA9IG1hbGxvYygxMjgpOworCXB0ciA9IHJlYWxsb2MocHRyLCAyNTYpOworCXB0clsx MjhdID0gMDsKKwlwdHJbMjU1XSA9IDA7CisJZnJlZShwdHIpOworCisJcHRyID0gbWFsbG9jKDEy OCk7CisJcHRyID0gcmVhbGxvYyhwdHIsIDY0KTsKKwlwdHJbNjNdID0gMDsKKwlwdHJbMF0gPSAw OworCWZyZWUocHRyKTsKK30KK1RFU1RfRU5ECisKK1RFU1RfQkVHSU4odGVzdF9yYWxsb2N4X25v X292ZXJmbG93KSB7CisJY2hhciogcHRyID0gbWFsbG9jKDEyOCk7CisJcHRyID0gcmFsbG9jeChw dHIsIDI1NiwgMCk7CisJcHRyWzEyOF0gPSAwOworCXB0clsyNTVdID0gMDsKKwlmcmVlKHB0cik7 CisKKwlwdHIgPSBtYWxsb2MoMTI4KTsKKwlwdHIgPSByYWxsb2N4KHB0ciwgNjQsIDApOworCXB0 cls2M10gPSAwOworCXB0clswXSA9IDA7CisJZnJlZShwdHIpOworfQorVEVTVF9FTkQKKworaW50 CittYWluKHZvaWQpIHsKKwlyZXR1cm4gdGVzdCgKKwkgICAgdGVzdF9tYWxsb2NfZnJlZV9vdmVy ZmxvdywKKwkgICAgdGVzdF9tYWxsb2N4X2RhbGxvY3hfb3ZlcmZsb3csCisJICAgIHRlc3RfbWFs bG9jX3NkYWxsb2N4X292ZXJmbG93LAorCSAgICB0ZXN0X3JlYWxsb2Nfb3ZlcmZsb3csCisJICAg IHRlc3RfcmFsbG9jeF9vdmVyZmxvdywKKwkgICAgdGVzdF94YWxsb2N4X292ZXJmbG93LAorCSAg ICB0ZXN0X3JlYWxsb2Nfbm9fb3ZlcmZsb3csCisJICAgIHRlc3RfcmFsbG9jeF9ub19vdmVyZmxv dyk7Cit9CgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4z LjAvdGVzdC91bml0L3NhZmV0eV9jaGVjay5zaCBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2pl bWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9zYWZldHlfY2hlY2suc2gKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMC4uNDg1ZjliZgotLS0gL2Rldi9udWxsCisrKyBiLzM4OS1kcy1iYXNl LTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9zYWZldHlfY2hlY2suc2gKQEAg LTAsMCArMSw1IEBACisjIS9iaW4vc2gKKworaWYgWyAieCR7ZW5hYmxlX3Byb2Z9IiA9ICJ4MSIg XSA7IHRoZW4KKyAgZXhwb3J0IE1BTExPQ19DT05GPSJwcm9mOnRydWUscHJvZl9hY3RpdmU6dHJ1 ZSxsZ19wcm9mX3NhbXBsZTowIgorZmkKCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1i dWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvc2FuLmMgYi8zODktZHMtYmFzZS0zLjMuMC1i dWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvc2FuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMC4uNWI5OGY1MgotLS0gL2Rldi9udWxsCisrKyBiLzM4OS1kcy1iYXNlLTMu My4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9zYW4uYwpAQCAtMCwwICsxLDIwNyBA QAorI2luY2x1ZGUgInRlc3QvamVtYWxsb2NfdGVzdC5oIgorI2luY2x1ZGUgInRlc3QvYXJlbmFf dXRpbC5oIgorI2luY2x1ZGUgInRlc3Qvc2FuLmgiCisKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRl cm5hbC9zYW4uaCIKKworc3RhdGljIHZvaWQKK3ZlcmlmeV9leHRlbnRfZ3VhcmRlZCh0c2RuX3Qg KnRzZG4sIHZvaWQgKnB0cikgeworCWV4cGVjdF90cnVlKGV4dGVudF9pc19ndWFyZGVkKHRzZG4s IHB0ciksCisJICAgICJBbGwgZXh0ZW50cyBzaG91bGQgYmUgZ3VhcmRlZC4iKTsKK30KKworI2Rl ZmluZSBNQVhfU01BTExfQUxMT0NBVElPTlMgNDA5Ngordm9pZCAqc21hbGxfYWxsb2NbTUFYX1NN QUxMX0FMTE9DQVRJT05TXTsKKworLyoKKyAqIFRoaXMgdGVzdCBhbGxvY2F0ZXMgcGFnZSBzaXpl ZCBzbGFicyBhbmQgY2hlY2tzIHRoYXQgZXZlcnkgdHdvIHNsYWJzIGhhdmUKKyAqIGF0IGxlYXN0 IG9uZSBwYWdlIGluIGJldHdlZW4gdGhlbS4gVGhhdCBwYWdlIGlzIHN1cHBvc2VkIHRvIGJlIHRo ZSBndWFyZAorICogcGFnZS4KKyAqLworVEVTVF9CRUdJTih0ZXN0X2d1YXJkZWRfc21hbGwpIHsK Kwl0ZXN0X3NraXBfaWYob3B0X3Byb2YpOworCisJdHNkbl90ICp0c2RuID0gdHNkX3RzZG4odHNk X2ZldGNoKCkpOworCXVuc2lnbmVkIG5wYWdlcyA9IDE2LCBwYWdlc19mb3VuZCA9IDAsIGVuZHNf Zm91bmQgPSAwOworCVZBUklBQkxFX0FSUkFZKHVpbnRwdHJfdCwgcGFnZXMsIG5wYWdlcyk7CisK KwkvKiBBbGxvY2F0ZSB0byBnZXQgc2FuaXRpemVkIHBvaW50ZXJzLiAqLworCXNpemVfdCBzbGFi X3N6ID0gUEFHRTsKKwlzaXplX3Qgc3ogPSBzbGFiX3N6IC8gODsKKwl1bnNpZ25lZCBuX2FsbG9j ID0gMDsKKwl3aGlsZSAobl9hbGxvYyA8IE1BWF9TTUFMTF9BTExPQ0FUSU9OUykgeworCQl2b2lk ICpwdHIgPSBtYWxsb2Moc3opOworCQlleHBlY3RfcHRyX25vdF9udWxsKHB0ciwgIlVuZXhwZWN0 ZWQgbWFsbG9jKCkgZmFpbHVyZSIpOworCQlzbWFsbF9hbGxvY1tuX2FsbG9jXSA9IHB0cjsKKwkJ dmVyaWZ5X2V4dGVudF9ndWFyZGVkKHRzZG4sIHB0cik7CisJCWlmICgodWludHB0cl90KXB0ciAl IFBBR0UgPT0gMCkgeworCQkJYXNzZXJ0X3VfbHQocGFnZXNfZm91bmQsIG5wYWdlcywKKwkJCSAg ICAiVW5leHBlY3RlZGx5IGxhcmdlIG51bWJlciBvZiBwYWdlIGFsaWduZWQgYWxsb2NzIik7CisJ CQlwYWdlc1twYWdlc19mb3VuZCsrXSA9ICh1aW50cHRyX3QpcHRyOworCQl9CisJCWlmICgoKHVp bnRwdHJfdClwdHIgKyAodWludHB0cl90KXN6KSAlIFBBR0UgPT0gMCkgeworCQkJZW5kc19mb3Vu ZCsrOworCQl9CisJCW5fYWxsb2MrKzsKKwkJaWYgKHBhZ2VzX2ZvdW5kID09IG5wYWdlcyAmJiBl bmRzX2ZvdW5kID09IG5wYWdlcykgeworCQkJYnJlYWs7CisJCX0KKwl9CisJLyogU2hvdWxkIGZv dW5kIHRoZSBwdHJzIGJlaW5nIGNoZWNrZWQgZm9yIG92ZXJmbG93IGFuZCB1bmRlcmZsb3cuICov CisJZXhwZWN0X3VfZXEocGFnZXNfZm91bmQsIG5wYWdlcywgIkNvdWxkIG5vdCBmb3VuZCB0aGUg ZXhwZWN0ZWQgcGFnZXMuIik7CisJZXhwZWN0X3VfZXEoZW5kc19mb3VuZCwgbnBhZ2VzLCAiQ291 bGQgbm90IGZvdW5kIHRoZSBleHBlY3RlZCBwYWdlcy4iKTsKKworCS8qIFZlcmlmeSB0aGUgcGFn ZXMgYXJlIG5vdCBjb250aW51b3VzLCBpLmUuIHNlcGFyYXRlZCBieSBndWFyZHMuICovCisJZm9y ICh1bnNpZ25lZCBpID0gMDsgaSA8IG5wYWdlcyAtIDE7IGkrKykgeworCQlmb3IgKHVuc2lnbmVk IGogPSBpICsgMTsgaiA8IG5wYWdlczsgaisrKSB7CisJCQl1aW50cHRyX3QgcHRyX2RpZmYgPSBw YWdlc1tpXSA+IHBhZ2VzW2pdID8KKwkJCSAgICBwYWdlc1tpXSAtIHBhZ2VzW2pdIDogcGFnZXNb al0gLSBwYWdlc1tpXTsKKwkJCWV4cGVjdF96dV9nZSgoc2l6ZV90KXB0cl9kaWZmLCBzbGFiX3N6 ICsgUEFHRSwKKwkJCSAgICAiVGhlcmUgc2hvdWxkIGJlIGF0IGxlYXN0IG9uZSBwYWdlcyBiZXR3 ZWVuICIKKwkJCSAgICAiZ3VhcmRlZCBzbGFicyIpOworCQl9CisJfQorCisJZm9yICh1bnNpZ25l ZCBpID0gMDsgaSA8IG5fYWxsb2MgKyAxOyBpKyspIHsKKwkJZnJlZShzbWFsbF9hbGxvY1tpXSk7 CisJfQorfQorVEVTVF9FTkQKKworVEVTVF9CRUdJTih0ZXN0X2d1YXJkZWRfbGFyZ2UpIHsKKwl0 c2RuX3QgKnRzZG4gPSB0c2RfdHNkbih0c2RfZmV0Y2goKSk7CisJdW5zaWduZWQgbmxhcmdlID0g MzI7CisJVkFSSUFCTEVfQVJSQVkodWludHB0cl90LCBsYXJnZSwgbmxhcmdlKTsKKworCS8qIEFs bG9jYXRlIHRvIGdldCBzYW5pdGl6ZWQgcG9pbnRlcnMuICovCisJc2l6ZV90IGxhcmdlX3N6ID0g U0NfTEFSR0VfTUlOQ0xBU1M7CisJZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG5sYXJnZTsgaSsr KSB7CisJCXZvaWQgKnB0ciA9IG1hbGxvYyhsYXJnZV9zeik7CisJCXZlcmlmeV9leHRlbnRfZ3Vh cmRlZCh0c2RuLCBwdHIpOworCQlleHBlY3RfcHRyX25vdF9udWxsKHB0ciwgIlVuZXhwZWN0ZWQg bWFsbG9jKCkgZmFpbHVyZSIpOworCQlsYXJnZVtpXSA9ICh1aW50cHRyX3QpcHRyOworCX0KKwor CS8qIFZlcmlmeSB0aGUgcGFnZXMgYXJlIG5vdCBjb250aW51b3VzLCBpLmUuIHNlcGFyYXRlZCBi eSBndWFyZHMuICovCisJZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG5sYXJnZTsgaSsrKSB7CisJ CWZvciAodW5zaWduZWQgaiA9IGkgKyAxOyBqIDwgbmxhcmdlOyBqKyspIHsKKwkJCXVpbnRwdHJf dCBwdHJfZGlmZiA9IGxhcmdlW2ldID4gbGFyZ2Vbal0gPworCQkJICAgIGxhcmdlW2ldIC0gbGFy Z2Vbal0gOiBsYXJnZVtqXSAtIGxhcmdlW2ldOworCQkJZXhwZWN0X3p1X2dlKChzaXplX3QpcHRy X2RpZmYsIGxhcmdlX3N6ICsgMiAqIFBBR0UsCisJCQkgICAgIlRoZXJlIHNob3VsZCBiZSBhdCBs ZWFzdCB0d28gcGFnZXMgYmV0d2VlbiAiCisJCQkgICAgIiBndWFyZGVkIGxhcmdlIGFsbG9jYXRp b25zIik7CisJCX0KKwl9CisKKwlmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbmxhcmdlOyBpKysp IHsKKwkJZnJlZSgodm9pZCAqKWxhcmdlW2ldKTsKKwl9Cit9CitURVNUX0VORAorCitzdGF0aWMg dm9pZAordmVyaWZ5X3BkaXJ0eSh1bnNpZ25lZCBhcmVuYV9pbmQsIHVpbnQ2NF90IGV4cGVjdGVk KSB7CisJdWludDY0X3QgcGRpcnR5ID0gZ2V0X2FyZW5hX3BkaXJ0eShhcmVuYV9pbmQpOworCWV4 cGVjdF91NjRfZXEocGRpcnR5LCBleHBlY3RlZCAvIFBBR0UsCisJICAgICJVbmV4cGVjdGVkIGRp cnR5IHBhZ2UgYW1vdW50LiIpOworfQorCitzdGF0aWMgdm9pZAordmVyaWZ5X3BtdXp6eSh1bnNp Z25lZCBhcmVuYV9pbmQsIHVpbnQ2NF90IGV4cGVjdGVkKSB7CisJdWludDY0X3QgcG11enp5ID0g Z2V0X2FyZW5hX3BtdXp6eShhcmVuYV9pbmQpOworCWV4cGVjdF91NjRfZXEocG11enp5LCBleHBl Y3RlZCAvIFBBR0UsCisJICAgICJVbmV4cGVjdGVkIG11enp5IHBhZ2UgYW1vdW50LiIpOworfQor CitURVNUX0JFR0lOKHRlc3RfZ3VhcmRlZF9kZWNheSkgeworCXVuc2lnbmVkIGFyZW5hX2luZCA9 IGRvX2FyZW5hX2NyZWF0ZSgtMSwgLTEpOworCWRvX2RlY2F5KGFyZW5hX2luZCk7CisJZG9fcHVy Z2UoYXJlbmFfaW5kKTsKKworCXZlcmlmeV9wZGlydHkoYXJlbmFfaW5kLCAwKTsKKwl2ZXJpZnlf cG11enp5KGFyZW5hX2luZCwgMCk7CisKKwkvKiBWZXJpZnkgdGhhdCBndWFyZGVkIGV4dGVudHMg YXMgZGlydHkuICovCisJc2l6ZV90IHN6MSA9IFBBR0UsIHN6MiA9IFBBR0UgKiAyOworCS8qIFcv byBtYXBzX2NvYWxlc2NlLCBndWFyZGVkIGV4dGVudHMgYXJlIHVuZ3VhcmRlZCBlYWdlcmx5LiAq LworCXNpemVfdCBhZGRfZ3VhcmRfc2l6ZSA9IG1hcHNfY29hbGVzY2UgPyAwIDogU0FOX1BBR0Vf R1VBUkRTX1NJWkU7CisJZ2VuZXJhdGVfZGlydHkoYXJlbmFfaW5kLCBzejEpOworCXZlcmlmeV9w ZGlydHkoYXJlbmFfaW5kLCBzejEgKyBhZGRfZ3VhcmRfc2l6ZSk7CisJdmVyaWZ5X3BtdXp6eShh cmVuYV9pbmQsIDApOworCisJLyogU2hvdWxkIHJldXNlIHRoZSBmaXJzdCBleHRlbnQuICovCisJ Z2VuZXJhdGVfZGlydHkoYXJlbmFfaW5kLCBzejEpOworCXZlcmlmeV9wZGlydHkoYXJlbmFfaW5k LCBzejEgKyBhZGRfZ3VhcmRfc2l6ZSk7CisJdmVyaWZ5X3BtdXp6eShhcmVuYV9pbmQsIDApOwor CisJLyogU2hvdWxkIG5vdCByZXVzZTsgZXhwZWN0IG5ldyBkaXJ0eSBwYWdlcy4gKi8KKwlnZW5l cmF0ZV9kaXJ0eShhcmVuYV9pbmQsIHN6Mik7CisJdmVyaWZ5X3BkaXJ0eShhcmVuYV9pbmQsIHN6 MSArIHN6MiArIDIgKiBhZGRfZ3VhcmRfc2l6ZSk7CisJdmVyaWZ5X3BtdXp6eShhcmVuYV9pbmQs IDApOworCisJdHNkbl90ICp0c2RuID0gdHNkX3RzZG4odHNkX2ZldGNoKCkpOworCWludCBmbGFn cyA9IE1BTExPQ1hfQVJFTkEoYXJlbmFfaW5kKSB8IE1BTExPQ1hfVENBQ0hFX05PTkU7CisKKwkv KiBTaG91bGQgcmV1c2UgZGlydHkgZXh0ZW50cyBmb3IgdGhlIHR3byBtYWxsb2N4LiAqLworCXZv aWQgKnAxID0gZG9fbWFsbG9jeChzejEsIGZsYWdzKTsKKwl2ZXJpZnlfZXh0ZW50X2d1YXJkZWQo dHNkbiwgcDEpOworCXZlcmlmeV9wZGlydHkoYXJlbmFfaW5kLCBzejIgKyBhZGRfZ3VhcmRfc2l6 ZSk7CisKKwl2b2lkICpwMiA9IGRvX21hbGxvY3goc3oyLCBmbGFncyk7CisJdmVyaWZ5X2V4dGVu dF9ndWFyZGVkKHRzZG4sIHAyKTsKKwl2ZXJpZnlfcGRpcnR5KGFyZW5hX2luZCwgMCk7CisJdmVy aWZ5X3BtdXp6eShhcmVuYV9pbmQsIDApOworCisJZGFsbG9jeChwMSwgZmxhZ3MpOworCXZlcmlm eV9wZGlydHkoYXJlbmFfaW5kLCBzejEgKyBhZGRfZ3VhcmRfc2l6ZSk7CisJZGFsbG9jeChwMiwg ZmxhZ3MpOworCXZlcmlmeV9wZGlydHkoYXJlbmFfaW5kLCBzejEgKyBzejIgKyAyICogYWRkX2d1 YXJkX3NpemUpOworCXZlcmlmeV9wbXV6enkoYXJlbmFfaW5kLCAwKTsKKworCWRvX3B1cmdlKGFy ZW5hX2luZCk7CisJdmVyaWZ5X3BkaXJ0eShhcmVuYV9pbmQsIDApOworCXZlcmlmeV9wbXV6enko YXJlbmFfaW5kLCAwKTsKKworCWlmIChjb25maWdfc3RhdHMpIHsKKwkJZXhwZWN0X3U2NF9lcShn ZXRfYXJlbmFfbnB1cmdlKGFyZW5hX2luZCksIDEsCisJCSAgICAiRXhwZWN0ZWQgcHVyZ2luZyB0 byBvY2N1ciIpOworCQlleHBlY3RfdTY0X2VxKGdldF9hcmVuYV9kaXJ0eV9ucHVyZ2UoYXJlbmFf aW5kKSwgMSwKKwkJICAgICJFeHBlY3RlZCBwdXJnaW5nIHRvIG9jY3VyIik7CisJCWV4cGVjdF91 NjRfZXEoZ2V0X2FyZW5hX2RpcnR5X3B1cmdlZChhcmVuYV9pbmQpLAorCQkgICAgKHN6MSArIHN6 MiArIDIgKiBhZGRfZ3VhcmRfc2l6ZSkgLyBQQUdFLAorCQkgICAgIkV4cGVjdGVkIHB1cmdpbmcg dG8gb2NjdXIiKTsKKwkJZXhwZWN0X3U2NF9lcShnZXRfYXJlbmFfbXV6enlfbnB1cmdlKGFyZW5h X2luZCksIDAsCisJCSAgICAiRXhwZWN0ZWQgcHVyZ2luZyB0byBvY2N1ciIpOworCX0KKworCWlm IChvcHRfcmV0YWluKSB7CisJCS8qCisJCSAqIFdpdGggcmV0YWluLCBndWFyZGVkIGV4dGVudHMg YXJlIG5vdCBtZXJnYWJsZSBhbmQgd2lsbCBiZQorCQkgKiBjYWNoZWQgaW4gZWNhY2hlX3JldGFp bmVkLiAgVGhleSBzaG91bGQgYmUgcmV1c2VkLgorCQkgKi8KKwkJdm9pZCAqbmV3X3AxID0gZG9f bWFsbG9jeChzejEsIGZsYWdzKTsKKwkJdmVyaWZ5X2V4dGVudF9ndWFyZGVkKHRzZG4sIHAxKTsK KwkJZXhwZWN0X3B0cl9lcShwMSwgbmV3X3AxLCAiRXhwZWN0IHRvIHJldXNlIHAxIik7CisKKwkJ dm9pZCAqbmV3X3AyID0gZG9fbWFsbG9jeChzejIsIGZsYWdzKTsKKwkJdmVyaWZ5X2V4dGVudF9n dWFyZGVkKHRzZG4sIHAyKTsKKwkJZXhwZWN0X3B0cl9lcShwMiwgbmV3X3AyLCAiRXhwZWN0IHRv IHJldXNlIHAyIik7CisKKwkJZGFsbG9jeChuZXdfcDEsIGZsYWdzKTsKKwkJdmVyaWZ5X3BkaXJ0 eShhcmVuYV9pbmQsIHN6MSArIGFkZF9ndWFyZF9zaXplKTsKKwkJZGFsbG9jeChuZXdfcDIsIGZs YWdzKTsKKwkJdmVyaWZ5X3BkaXJ0eShhcmVuYV9pbmQsIHN6MSArIHN6MiArIDIgKiBhZGRfZ3Vh cmRfc2l6ZSk7CisJCXZlcmlmeV9wbXV6enkoYXJlbmFfaW5kLCAwKTsKKwl9CisKKwlkb19hcmVu YV9kZXN0cm95KGFyZW5hX2luZCk7Cit9CitURVNUX0VORAorCitpbnQKK21haW4odm9pZCkgewor CXJldHVybiB0ZXN0KAorCSAgICB0ZXN0X2d1YXJkZWRfc21hbGwsCisJICAgIHRlc3RfZ3VhcmRl ZF9sYXJnZSwKKwkgICAgdGVzdF9ndWFyZGVkX2RlY2F5KTsKK30KCmRpZmYgLS1naXQgYS8zODkt ZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvc2FuLnNoIGIvMzg5 LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L3Nhbi5zaApuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MzNiNGE0Ci0tLSAvZGV2L251bGwKKysr IGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L3Nhbi5z aApAQCAtMCwwICsxLDMgQEAKKyMhL2Jpbi9zaAorCitleHBvcnQgTUFMTE9DX0NPTkY9InNhbl9n dWFyZF9sYXJnZToxLHNhbl9ndWFyZF9zbWFsbDoxIgoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNl LTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9zYW5fYnVtcC5jIGIvMzg5LWRz LWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L3Nhbl9idW1wLmMKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2FmYTM3ZgotLS0gL2Rldi9udWxsCisr KyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9zYW5f YnVtcC5jCkBAIC0wLDAgKzEsMTExIEBACisjaW5jbHVkZSAidGVzdC9qZW1hbGxvY190ZXN0Lmgi CisjaW5jbHVkZSAidGVzdC9hcmVuYV91dGlsLmgiCisKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRl cm5hbC9hcmVuYV9zdHJ1Y3RzLmgiCisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvc2FuX2J1 bXAuaCIKKworVEVTVF9CRUdJTih0ZXN0X3Nhbl9idW1wX2FsbG9jKSB7CisJdGVzdF9za2lwX2lm KCFtYXBzX2NvYWxlc2NlIHx8ICFvcHRfcmV0YWluKTsKKworCXRzZG5fdCAqdHNkbiA9IHRzZG5f ZmV0Y2goKTsKKworCXNhbl9idW1wX2FsbG9jX3Qgc2JhOworCXNhbl9idW1wX2FsbG9jX2luaXQo JnNiYSk7CisKKwl1bnNpZ25lZCBhcmVuYV9pbmQgPSBkb19hcmVuYV9jcmVhdGUoMCwgMCk7CisJ YXNzZXJ0X3VfbmUoYXJlbmFfaW5kLCBVSU5UX01BWCwgIkZhaWxlZCB0byBjcmVhdGUgYW4gYXJl bmEiKTsKKworCWFyZW5hX3QgKmFyZW5hID0gYXJlbmFfZ2V0KHRzZG4sIGFyZW5hX2luZCwgZmFs c2UpOworCXBhY190ICpwYWMgPSAmYXJlbmEtPnBhX3NoYXJkLnBhYzsKKworCXNpemVfdCBhbGxv Y19zaXplID0gUEFHRSAqIDE2OworCXNpemVfdCBhbGxvY19uID0gYWxsb2Nfc2l6ZSAvIHNpemVv Zih1bnNpZ25lZCk7CisJZWRhdGFfdCogZWRhdGEgPSBzYW5fYnVtcF9hbGxvYyh0c2RuLCAmc2Jh LCBwYWMsIHBhY19laG9va3NfZ2V0KHBhYyksCisJICAgIGFsbG9jX3NpemUsIC8qIHplcm8gKi8g ZmFsc2UpOworCisJZXhwZWN0X3B0cl9ub3RfbnVsbChlZGF0YSwgIkZhaWxlZCB0byBhbGxvY2F0 ZSBlZGF0YSIpOworCWV4cGVjdF91X2VxKGVkYXRhX2FyZW5hX2luZF9nZXQoZWRhdGEpLCBhcmVu YV9pbmQsCisJICAgICJFZGF0YSB3YXMgYXNzaWduZWQgYW4gaW5jb3JyZWN0IGFyZW5hIGlkIik7 CisJZXhwZWN0X3p1X2VxKGVkYXRhX3NpemVfZ2V0KGVkYXRhKSwgYWxsb2Nfc2l6ZSwKKwkgICAg IkFsbG9jYXRlZCBlZGF0YSBvZiBpbmNvcnJlY3Qgc2l6ZSIpOworCWV4cGVjdF9mYWxzZShlZGF0 YV9zbGFiX2dldChlZGF0YSksCisJICAgICJCdW1wIGFsbG9jYXRvciBpbmNvcnJlY3RseSBhc3Np Z25lZCAnc2xhYicgdG8gdHJ1ZSIpOworCWV4cGVjdF90cnVlKGVkYXRhX2NvbW1pdHRlZF9nZXQo ZWRhdGEpLCAiRWRhdGEgaXMgbm90IGNvbW1pdHRlZCIpOworCisJdm9pZCAqcHRyID0gZWRhdGFf YWRkcl9nZXQoZWRhdGEpOworCWV4cGVjdF9wdHJfbm90X251bGwocHRyLCAiRWRhdGEgd2FzIGFz c2lnbmVkIGFuIGludmFsaWQgYWRkcmVzcyIpOworCS8qIFRlc3QgdGhhdCBtZW1vcnkgaXMgYWxs b2NhdGVkOyBubyBndWFyZCBwYWdlcyBhcmUgbWlzcGxhY2VkICovCisJZm9yICh1bnNpZ25lZCBp ID0gMDsgaSA8IGFsbG9jX247ICsraSkgeworCQkoKHVuc2lnbmVkICopcHRyKVtpXSA9IDE7CisJ fQorCisJc2l6ZV90IGFsbG9jX3NpemUyID0gUEFHRSAqIDI4OworCXNpemVfdCBhbGxvY19uMiA9 IGFsbG9jX3NpemUgLyBzaXplb2YodW5zaWduZWQpOworCWVkYXRhX3QgKmVkYXRhMiA9IHNhbl9i dW1wX2FsbG9jKHRzZG4sICZzYmEsIHBhYywgcGFjX2Vob29rc19nZXQocGFjKSwKKwkgICAgYWxs b2Nfc2l6ZTIsIC8qIHplcm8gKi8gdHJ1ZSk7CisKKwlleHBlY3RfcHRyX25vdF9udWxsKGVkYXRh MiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBlZGF0YSIpOworCWV4cGVjdF91X2VxKGVkYXRhX2FyZW5h X2luZF9nZXQoZWRhdGEyKSwgYXJlbmFfaW5kLAorCSAgICAiRWRhdGEgd2FzIGFzc2lnbmVkIGFu IGluY29ycmVjdCBhcmVuYSBpZCIpOworCWV4cGVjdF96dV9lcShlZGF0YV9zaXplX2dldChlZGF0 YTIpLCBhbGxvY19zaXplMiwKKwkgICAgIkFsbG9jYXRlZCBlZGF0YSBvZiBpbmNvcnJlY3Qgc2l6 ZSIpOworCWV4cGVjdF9mYWxzZShlZGF0YV9zbGFiX2dldChlZGF0YTIpLAorCSAgICAiQnVtcCBh bGxvY2F0b3IgaW5jb3JyZWN0bHkgYXNzaWduZWQgJ3NsYWInIHRvIHRydWUiKTsKKwlleHBlY3Rf dHJ1ZShlZGF0YV9jb21taXR0ZWRfZ2V0KGVkYXRhMiksICJFZGF0YSBpcyBub3QgY29tbWl0dGVk Iik7CisKKwl2b2lkICpwdHIyID0gZWRhdGFfYWRkcl9nZXQoZWRhdGEyKTsKKwlleHBlY3RfcHRy X25vdF9udWxsKHB0ciwgIkVkYXRhIHdhcyBhc3NpZ25lZCBhbiBpbnZhbGlkIGFkZHJlc3MiKTsK KworCXVpbnRwdHJfdCBwdHJkaWZmID0gcHRyMiA+IHB0ciA/ICh1aW50cHRyX3QpcHRyMiAtICh1 aW50cHRyX3QpcHRyCisJICAgIDogKHVpbnRwdHJfdClwdHIgLSAodWludHB0cl90KXB0cjI7CisJ c2l6ZV90IGJldHdlZW5fYWxsb2NzID0gKHNpemVfdClwdHJkaWZmIC0gYWxsb2Nfc2l6ZTsKKwor CWV4cGVjdF96dV9nZShiZXR3ZWVuX2FsbG9jcywgUEFHRSwKKwkgICAgIkd1YXJkIHBhZ2UgYmV0 d2VlbiBhbGxvY3MgaXMgbWlzc2luZyIpOworCisJZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFs bG9jX24yOyArK2kpIHsKKwkJZXhwZWN0X3VfZXEoKCh1bnNpZ25lZCAqKXB0cjIpW2ldLCAwLCAi TWVtb3J5IGlzIG5vdCB6ZXJvZWQiKTsKKwl9Cit9CitURVNUX0VORAorCitURVNUX0JFR0lOKHRl c3RfbGFyZ2VfYWxsb2Nfc2l6ZSkgeworCXRlc3Rfc2tpcF9pZighbWFwc19jb2FsZXNjZSB8fCAh b3B0X3JldGFpbik7CisKKwl0c2RuX3QgKnRzZG4gPSB0c2RuX2ZldGNoKCk7CisKKwlzYW5fYnVt cF9hbGxvY190IHNiYTsKKwlzYW5fYnVtcF9hbGxvY19pbml0KCZzYmEpOworCisJdW5zaWduZWQg YXJlbmFfaW5kID0gZG9fYXJlbmFfY3JlYXRlKDAsIDApOworCWFzc2VydF91X25lKGFyZW5hX2lu ZCwgVUlOVF9NQVgsICJGYWlsZWQgdG8gY3JlYXRlIGFuIGFyZW5hIik7CisKKwlhcmVuYV90ICph cmVuYSA9IGFyZW5hX2dldCh0c2RuLCBhcmVuYV9pbmQsIGZhbHNlKTsKKwlwYWNfdCAqcGFjID0g JmFyZW5hLT5wYV9zaGFyZC5wYWM7CisKKwlzaXplX3QgYWxsb2Nfc2l6ZSA9IFNCQV9SRVRBSU5F RF9BTExPQ19TSVpFICogMjsKKwllZGF0YV90KiBlZGF0YSA9IHNhbl9idW1wX2FsbG9jKHRzZG4s ICZzYmEsIHBhYywgcGFjX2Vob29rc19nZXQocGFjKSwKKwkgICAgYWxsb2Nfc2l6ZSwgLyogemVy byAqLyBmYWxzZSk7CisJZXhwZWN0X3VfZXEoZWRhdGFfYXJlbmFfaW5kX2dldChlZGF0YSksIGFy ZW5hX2luZCwKKwkgICAgIkVkYXRhIHdhcyBhc3NpZ25lZCBhbiBpbmNvcnJlY3QgYXJlbmEgaWQi KTsKKwlleHBlY3RfenVfZXEoZWRhdGFfc2l6ZV9nZXQoZWRhdGEpLCBhbGxvY19zaXplLAorCSAg ICAiQWxsb2NhdGVkIGVkYXRhIG9mIGluY29ycmVjdCBzaXplIik7CisJZXhwZWN0X2ZhbHNlKGVk YXRhX3NsYWJfZ2V0KGVkYXRhKSwKKwkgICAgIkJ1bXAgYWxsb2NhdG9yIGluY29ycmVjdGx5IGFz c2lnbmVkICdzbGFiJyB0byB0cnVlIik7CisJZXhwZWN0X3RydWUoZWRhdGFfY29tbWl0dGVkX2dl dChlZGF0YSksICJFZGF0YSBpcyBub3QgY29tbWl0dGVkIik7CisKKwl2b2lkICpwdHIgPSBlZGF0 YV9hZGRyX2dldChlZGF0YSk7CisJZXhwZWN0X3B0cl9ub3RfbnVsbChwdHIsICJFZGF0YSB3YXMg YXNzaWduZWQgYW4gaW52YWxpZCBhZGRyZXNzIik7CisJLyogVGVzdCB0aGF0IG1lbW9yeSBpcyBh bGxvY2F0ZWQ7IG5vIGd1YXJkIHBhZ2VzIGFyZSBtaXNwbGFjZWQgKi8KKwlmb3IgKHVuc2lnbmVk IGkgPSAwOyBpIDwgYWxsb2Nfc2l6ZSAvIFBBR0U7ICsraSkgeworCQkqKChjaGFyICopcHRyICsg UEFHRSAqIGkpID0gMTsKKwl9Cit9CitURVNUX0VORAorCitpbnQKK21haW4odm9pZCkgeworCXJl dHVybiB0ZXN0KAorCSAgICB0ZXN0X3Nhbl9idW1wX2FsbG9jLAorCSAgICB0ZXN0X2xhcmdlX2Fs bG9jX3NpemUpOworfQoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFs bG9jLTUuMy4wL3Rlc3QvdW5pdC9zYy5jIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxs b2MtNS4zLjAvdGVzdC91bml0L3NjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MC4uZDIwNzQ4MQotLS0gL2Rldi9udWxsCisrKyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2pl bWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9zYy5jCkBAIC0wLDAgKzEsMzMgQEAKKyNpbmNsdWRlICJ0 ZXN0L2plbWFsbG9jX3Rlc3QuaCIKKworVEVTVF9CRUdJTih0ZXN0X3VwZGF0ZV9zbGFiX3NpemUp IHsKKwlzY19kYXRhX3QgZGF0YTsKKwltZW1zZXQoJmRhdGEsIDAsIHNpemVvZihkYXRhKSk7CisJ c2NfZGF0YV9pbml0KCZkYXRhKTsKKwlzY190ICp0aW55ID0gJmRhdGEuc2NbMF07CisJc2l6ZV90 IHRpbnlfc2l6ZSA9IChaVSgxKSA8PCB0aW55LT5sZ19iYXNlKQorCSAgICArIChaVSh0aW55LT5u ZGVsdGEpIDw8IHRpbnktPmxnX2RlbHRhKTsKKwlzaXplX3QgcGdzX3Rvb19iaWcgPSAodGlueV9z aXplICogQklUTUFQX01BWEJJVFMgKyBQQUdFIC0gMSkgLyBQQUdFICsgMTsKKwlzY19kYXRhX3Vw ZGF0ZV9zbGFiX3NpemUoJmRhdGEsIHRpbnlfc2l6ZSwgdGlueV9zaXplLCAoaW50KXBnc190b29f YmlnKTsKKwlleHBlY3RfenVfbHQoKHNpemVfdCl0aW55LT5wZ3MsIHBnc190b29fYmlnLCAiQWxs b3dlZCBleGNlc3NpdmUgcGFnZXMiKTsKKworCXNjX2RhdGFfdXBkYXRlX3NsYWJfc2l6ZSgmZGF0 YSwgMSwgMTAgKiBQQUdFLCAxKTsKKwlmb3IgKGludCBpID0gMDsgaSA8IGRhdGEubmJpbnM7IGkr KykgeworCQlzY190ICpzYyA9ICZkYXRhLnNjW2ldOworCQlzaXplX3QgcmVnX3NpemUgPSAoWlUo MSkgPDwgc2MtPmxnX2Jhc2UpCisJCSAgICArIChaVShzYy0+bmRlbHRhKSA8PCBzYy0+bGdfZGVs dGEpOworCQlpZiAocmVnX3NpemUgPD0gUEFHRSkgeworCQkJZXhwZWN0X2RfZXEoc2MtPnBncywg MSwgIklnbm9yZWQgdmFsaWQgcGFnZSBzaXplIGhpbnQiKTsKKwkJfSBlbHNlIHsKKwkJCWV4cGVj dF9kX2d0KHNjLT5wZ3MsIDEsCisJCQkgICAgIkFsbG93ZWQgaW52YWxpZCBwYWdlIHNpemUgaGlu dCIpOworCQl9CisJfQorfQorVEVTVF9FTkQKKworaW50CittYWluKHZvaWQpIHsKKwlyZXR1cm4g dGVzdCgKKwkgICAgdGVzdF91cGRhdGVfc2xhYl9zaXplKTsKK30KCmRpZmYgLS1naXQgYS8zODkt ZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvc2VjLmMgYi8zODkt ZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvc2VjLmMKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjNlYzQwMwotLS0gL2Rldi9udWxsCisrKyBi LzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9zZWMuYwpA QCAtMCwwICsxLDYzNCBAQAorI2luY2x1ZGUgInRlc3QvamVtYWxsb2NfdGVzdC5oIgorCisjaW5j bHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvc2VjLmgiCisKK3R5cGVkZWYgc3RydWN0IHBhaV90ZXN0 X2FsbG9jYXRvcl9zIHBhaV90ZXN0X2FsbG9jYXRvcl90Oworc3RydWN0IHBhaV90ZXN0X2FsbG9j YXRvcl9zIHsKKwlwYWlfdCBwYWk7CisJYm9vbCBhbGxvY19mYWlsOworCXNpemVfdCBhbGxvY19j b3VudDsKKwlzaXplX3QgYWxsb2NfYmF0Y2hfY291bnQ7CisJc2l6ZV90IGRhbGxvY19jb3VudDsK KwlzaXplX3QgZGFsbG9jX2JhdGNoX2NvdW50OworCS8qCisJICogV2UgdXNlIGEgc2ltcGxlIGJ1 bXAgYWxsb2NhdG9yIGFzIHRoZSBpbXBsZW1lbnRhdGlvbi4gIFRoaXMgaXNuJ3QKKwkgKiAqcmVh bGx5KiBjb3JyZWN0LCBzaW5jZSB3ZSBtYXkgYWxsb3cgZXhwYW5zaW9uIGludG8gYSBzdWJzZXF1 ZW50CisJICogYWxsb2NhdGlvbiwgYnV0IGl0J3Mgbm90IGxpa2UgdGhlIFNFQyBpcyByZWFsbHkg ZXhhbWluaW5nIHRoZQorCSAqIHBvaW50ZXJzIGl0IGdldHMgYmFjazsgdGhpcyBpcyBtb3N0bHkg anVzdCBoZWxwZnVsIGZvciBkZWJ1Z2dpbmcuCisJICovCisJdWludHB0cl90IG5leHRfcHRyOwor CXNpemVfdCBleHBhbmRfY291bnQ7CisJYm9vbCBleHBhbmRfcmV0dXJuX3ZhbHVlOworCXNpemVf dCBzaHJpbmtfY291bnQ7CisJYm9vbCBzaHJpbmtfcmV0dXJuX3ZhbHVlOworfTsKKworc3RhdGlj IHZvaWQKK3Rlc3Rfc2VjX2luaXQoc2VjX3QgKnNlYywgcGFpX3QgKmZhbGxiYWNrLCBzaXplX3Qg bnNoYXJkcywgc2l6ZV90IG1heF9hbGxvYywKKyAgICBzaXplX3QgbWF4X2J5dGVzKSB7CisJc2Vj X29wdHNfdCBvcHRzOworCW9wdHMubnNoYXJkcyA9IDE7CisJb3B0cy5tYXhfYWxsb2MgPSBtYXhf YWxsb2M7CisJb3B0cy5tYXhfYnl0ZXMgPSBtYXhfYnl0ZXM7CisJLyoKKwkgKiBKdXN0IGNob29z ZSByZWFzb25hYmxlIGRlZmF1bHRzIGZvciB0aGVzZTsgbW9zdCB0ZXN0cyBkb24ndCBjYXJlIHNv CisJICogbG9uZyBhcyB0aGV5J3JlIHNvbWV0aGluZyByZWFzb25hYmxlLgorCSAqLworCW9wdHMu Ynl0ZXNfYWZ0ZXJfZmx1c2ggPSBtYXhfYnl0ZXMgLyAyOworCW9wdHMuYmF0Y2hfZmlsbF9leHRy YSA9IDQ7CisKKwkvKgorCSAqIFdlIGVuZCB1cCBsZWFraW5nIHRoaXMgYmFzZSwgYnV0IHRoYXQn cyBmaW5lOyB0aGlzIHRlc3QgaXMKKwkgKiBzaG9ydC1ydW5uaW5nLCBhbmQgU0VDcyBhcmUgYXJl bmEtc2NvcGVkIGluIHJlYWxpdHkuCisJICovCisJYmFzZV90ICpiYXNlID0gYmFzZV9uZXcoVFNE Tl9OVUxMLCAvKiBpbmQgKi8gMTIzLAorCSAgICAmZWhvb2tzX2RlZmF1bHRfZXh0ZW50X2hvb2tz LCAvKiBtZXRhZGF0YV91c2VfaG9va3MgKi8gdHJ1ZSk7CisKKwlib29sIGVyciA9IHNlY19pbml0 KFRTRE5fTlVMTCwgc2VjLCBiYXNlLCBmYWxsYmFjaywgJm9wdHMpOworCWFzc2VydF9mYWxzZShl cnIsICJVbmV4cGVjdGVkIGluaXRpYWxpemF0aW9uIGZhaWx1cmUiKTsKKwlhc3NlcnRfdV9nZShz ZWMtPm5wc2l6ZXMsIDAsICJaZXJvIHNpemUgY2xhc3NlcyBhbGxvd2VkIGZvciBjYWNoaW5nIik7 Cit9CisKK3N0YXRpYyBpbmxpbmUgZWRhdGFfdCAqCitwYWlfdGVzdF9hbGxvY2F0b3JfYWxsb2Mo dHNkbl90ICp0c2RuLCBwYWlfdCAqc2VsZiwgc2l6ZV90IHNpemUsCisgICAgc2l6ZV90IGFsaWdu bWVudCwgYm9vbCB6ZXJvLCBib29sIGd1YXJkZWQsIGJvb2wgZnJlcXVlbnRfcmV1c2UsCisgICAg Ym9vbCAqZGVmZXJyZWRfd29ya19nZW5lcmF0ZWQpIHsKKwlhc3NlcnQoIWd1YXJkZWQpOworCXBh aV90ZXN0X2FsbG9jYXRvcl90ICp0YSA9IChwYWlfdGVzdF9hbGxvY2F0b3JfdCAqKXNlbGY7CisJ aWYgKHRhLT5hbGxvY19mYWlsKSB7CisJCXJldHVybiBOVUxMOworCX0KKwllZGF0YV90ICplZGF0 YSA9IG1hbGxvYyhzaXplb2YoZWRhdGFfdCkpOworCWFzc2VydF9wdHJfbm90X251bGwoZWRhdGEs ICIiKTsKKwl0YS0+bmV4dF9wdHIgKz0gYWxpZ25tZW50IC0gMTsKKwllZGF0YV9pbml0KGVkYXRh LCAvKiBhcmVuYV9pbmQgKi8gMCwKKwkgICAgKHZvaWQgKikodGEtPm5leHRfcHRyICYgfihhbGln bm1lbnQgLSAxKSksIHNpemUsCisJICAgIC8qIHNsYWIgKi8gZmFsc2UsCisJICAgIC8qIHN6aW5k ICovIDAsIC8qIHNuICovIDEsIGV4dGVudF9zdGF0ZV9hY3RpdmUsIC8qIHplcm8gKi8gemVybywK KwkgICAgLyogY29taXR0ZWQgKi8gdHJ1ZSwgLyogcmFuZ2VkICovIGZhbHNlLCBFWFRFTlRfTk9U X0hFQUQpOworCXRhLT5uZXh0X3B0ciArPSBzaXplOworCXRhLT5hbGxvY19jb3VudCsrOworCXJl dHVybiBlZGF0YTsKK30KKworc3RhdGljIGlubGluZSBzaXplX3QKK3BhaV90ZXN0X2FsbG9jYXRv cl9hbGxvY19iYXRjaCh0c2RuX3QgKnRzZG4sIHBhaV90ICpzZWxmLCBzaXplX3Qgc2l6ZSwKKyAg ICBzaXplX3QgbmFsbG9jcywgZWRhdGFfbGlzdF9hY3RpdmVfdCAqcmVzdWx0cywKKyAgICBib29s ICpkZWZlcnJlZF93b3JrX2dlbmVyYXRlZCkgeworCXBhaV90ZXN0X2FsbG9jYXRvcl90ICp0YSA9 IChwYWlfdGVzdF9hbGxvY2F0b3JfdCAqKXNlbGY7CisJaWYgKHRhLT5hbGxvY19mYWlsKSB7CisJ CXJldHVybiAwOworCX0KKwlmb3IgKHNpemVfdCBpID0gMDsgaSA8IG5hbGxvY3M7IGkrKykgewor CQllZGF0YV90ICplZGF0YSA9IG1hbGxvYyhzaXplb2YoZWRhdGFfdCkpOworCQlhc3NlcnRfcHRy X25vdF9udWxsKGVkYXRhLCAiIik7CisJCWVkYXRhX2luaXQoZWRhdGEsIC8qIGFyZW5hX2luZCAq LyAwLAorCQkgICAgKHZvaWQgKil0YS0+bmV4dF9wdHIsIHNpemUsCisJCSAgICAvKiBzbGFiICov IGZhbHNlLCAvKiBzemluZCAqLyAwLCAvKiBzbiAqLyAxLAorCQkgICAgZXh0ZW50X3N0YXRlX2Fj dGl2ZSwgLyogemVybyAqLyBmYWxzZSwgLyogY29taXR0ZWQgKi8gdHJ1ZSwKKwkJICAgIC8qIHJh bmdlZCAqLyBmYWxzZSwgRVhURU5UX05PVF9IRUFEKTsKKwkJdGEtPm5leHRfcHRyICs9IHNpemU7 CisJCXRhLT5hbGxvY19iYXRjaF9jb3VudCsrOworCQllZGF0YV9saXN0X2FjdGl2ZV9hcHBlbmQo cmVzdWx0cywgZWRhdGEpOworCX0KKwlyZXR1cm4gbmFsbG9jczsKK30KKworc3RhdGljIGJvb2wK K3BhaV90ZXN0X2FsbG9jYXRvcl9leHBhbmQodHNkbl90ICp0c2RuLCBwYWlfdCAqc2VsZiwgZWRh dGFfdCAqZWRhdGEsCisgICAgc2l6ZV90IG9sZF9zaXplLCBzaXplX3QgbmV3X3NpemUsIGJvb2wg emVybywKKyAgICBib29sICpkZWZlcnJlZF93b3JrX2dlbmVyYXRlZCkgeworCXBhaV90ZXN0X2Fs bG9jYXRvcl90ICp0YSA9IChwYWlfdGVzdF9hbGxvY2F0b3JfdCAqKXNlbGY7CisJdGEtPmV4cGFu ZF9jb3VudCsrOworCXJldHVybiB0YS0+ZXhwYW5kX3JldHVybl92YWx1ZTsKK30KKworc3RhdGlj IGJvb2wKK3BhaV90ZXN0X2FsbG9jYXRvcl9zaHJpbmsodHNkbl90ICp0c2RuLCBwYWlfdCAqc2Vs ZiwgZWRhdGFfdCAqZWRhdGEsCisgICAgc2l6ZV90IG9sZF9zaXplLCBzaXplX3QgbmV3X3NpemUs IGJvb2wgKmRlZmVycmVkX3dvcmtfZ2VuZXJhdGVkKSB7CisJcGFpX3Rlc3RfYWxsb2NhdG9yX3Qg KnRhID0gKHBhaV90ZXN0X2FsbG9jYXRvcl90ICopc2VsZjsKKwl0YS0+c2hyaW5rX2NvdW50Kys7 CisJcmV0dXJuIHRhLT5zaHJpbmtfcmV0dXJuX3ZhbHVlOworfQorCitzdGF0aWMgdm9pZAorcGFp X3Rlc3RfYWxsb2NhdG9yX2RhbGxvYyh0c2RuX3QgKnRzZG4sIHBhaV90ICpzZWxmLCBlZGF0YV90 ICplZGF0YSwKKyAgICBib29sICpkZWZlcnJlZF93b3JrX2dlbmVyYXRlZCkgeworCXBhaV90ZXN0 X2FsbG9jYXRvcl90ICp0YSA9IChwYWlfdGVzdF9hbGxvY2F0b3JfdCAqKXNlbGY7CisJdGEtPmRh bGxvY19jb3VudCsrOworCWZyZWUoZWRhdGEpOworfQorCitzdGF0aWMgdm9pZAorcGFpX3Rlc3Rf YWxsb2NhdG9yX2RhbGxvY19iYXRjaCh0c2RuX3QgKnRzZG4sIHBhaV90ICpzZWxmLAorICAgIGVk YXRhX2xpc3RfYWN0aXZlX3QgKmxpc3QsIGJvb2wgKmRlZmVycmVkX3dvcmtfZ2VuZXJhdGVkKSB7 CisJcGFpX3Rlc3RfYWxsb2NhdG9yX3QgKnRhID0gKHBhaV90ZXN0X2FsbG9jYXRvcl90ICopc2Vs ZjsKKworCWVkYXRhX3QgKmVkYXRhOworCXdoaWxlICgoZWRhdGEgPSBlZGF0YV9saXN0X2FjdGl2 ZV9maXJzdChsaXN0KSkgIT0gTlVMTCkgeworCQllZGF0YV9saXN0X2FjdGl2ZV9yZW1vdmUobGlz dCwgZWRhdGEpOworCQl0YS0+ZGFsbG9jX2JhdGNoX2NvdW50Kys7CisJCWZyZWUoZWRhdGEpOwor CX0KK30KKworc3RhdGljIGlubGluZSB2b2lkCitwYWlfdGVzdF9hbGxvY2F0b3JfaW5pdChwYWlf dGVzdF9hbGxvY2F0b3JfdCAqdGEpIHsKKwl0YS0+YWxsb2NfZmFpbCA9IGZhbHNlOworCXRhLT5h bGxvY19jb3VudCA9IDA7CisJdGEtPmFsbG9jX2JhdGNoX2NvdW50ID0gMDsKKwl0YS0+ZGFsbG9j X2NvdW50ID0gMDsKKwl0YS0+ZGFsbG9jX2JhdGNoX2NvdW50ID0gMDsKKwkvKiBKdXN0IGRvbid0 IHN0YXJ0IHRoZSBlZGF0YSBhdCAwLiAqLworCXRhLT5uZXh0X3B0ciA9IDEwICogUEFHRTsKKwl0 YS0+ZXhwYW5kX2NvdW50ID0gMDsKKwl0YS0+ZXhwYW5kX3JldHVybl92YWx1ZSA9IGZhbHNlOwor CXRhLT5zaHJpbmtfY291bnQgPSAwOworCXRhLT5zaHJpbmtfcmV0dXJuX3ZhbHVlID0gZmFsc2U7 CisJdGEtPnBhaS5hbGxvYyA9ICZwYWlfdGVzdF9hbGxvY2F0b3JfYWxsb2M7CisJdGEtPnBhaS5h bGxvY19iYXRjaCA9ICZwYWlfdGVzdF9hbGxvY2F0b3JfYWxsb2NfYmF0Y2g7CisJdGEtPnBhaS5l eHBhbmQgPSAmcGFpX3Rlc3RfYWxsb2NhdG9yX2V4cGFuZDsKKwl0YS0+cGFpLnNocmluayA9ICZw YWlfdGVzdF9hbGxvY2F0b3Jfc2hyaW5rOworCXRhLT5wYWkuZGFsbG9jID0gJnBhaV90ZXN0X2Fs bG9jYXRvcl9kYWxsb2M7CisJdGEtPnBhaS5kYWxsb2NfYmF0Y2ggPSAmcGFpX3Rlc3RfYWxsb2Nh dG9yX2RhbGxvY19iYXRjaDsKK30KKworVEVTVF9CRUdJTih0ZXN0X3JldXNlKSB7CisJcGFpX3Rl c3RfYWxsb2NhdG9yX3QgdGE7CisJcGFpX3Rlc3RfYWxsb2NhdG9yX2luaXQoJnRhKTsKKwlzZWNf dCBzZWM7CisJLyoKKwkgKiBXZSBjYW4ndCB1c2UgdGhlICJyZWFsIiB0c2QsIHNpbmNlIHdlIG1h bGxvYyB3aXRoaW4gdGhlIHRlc3QKKwkgKiBhbGxvY2F0b3IgaG9va3M7IHdlJ2QgZ2V0IGxvY2sg aW52ZXJzaW9uIGNyYXNoZXMuICBFdmVudHVhbGx5LCB3ZQorCSAqIHNob3VsZCBoYXZlIGEgd2F5 IHRvIG1vY2sgdHNkcywgYnV0IGZvciBub3cganVzdCBkb24ndCBkbyBhbnkKKwkgKiBsb2NrLW9y ZGVyIGNoZWNraW5nLgorCSAqLworCXRzZG5fdCAqdHNkbiA9IFRTRE5fTlVMTDsKKwkvKgorCSAq IDExIGFsbG9jcyBhcGllY2Ugb2YgMS1QQUdFIGFuZCAyLVBBR0Ugb2JqZWN0cyBtZWFucyB0aGF0 IHdlIHNob3VsZCBiZQorCSAqIGFibGUgdG8gZ2V0IHRvIDMzIHBhZ2VzIGluIHRoZSBjYWNoZSBi ZWZvcmUgdHJpZ2dlcmluZyBhIGZsdXNoLiAgV2UKKwkgKiBzZXQgdGhlIGZsdXNoIGxpaW10IHRv IHR3aWNlIHRoaXMgYW1vdW50LCB0byBhdm9pZCBhY2NpZGVudGFsbHkKKwkgKiB0cmlnZ2VyaW5n IGEgZmx1c2ggY2F1c2VkIGJ5IHRoZSBiYXRjaC1hbGxvY2F0aW9uIGRvd24gdGhlIGNhY2hlIGZp bGwKKwkgKiBwYXRod2F5IGRpc3J1cHRpbmcgb3JkZXJpbmcuCisJICovCisJZW51bSB7IE5BTExP Q1MgPSAxMSB9OworCWVkYXRhX3QgKm9uZV9wYWdlW05BTExPQ1NdOworCWVkYXRhX3QgKnR3b19w YWdlW05BTExPQ1NdOworCWJvb2wgZGVmZXJyZWRfd29ya19nZW5lcmF0ZWQgPSBmYWxzZTsKKwl0 ZXN0X3NlY19pbml0KCZzZWMsICZ0YS5wYWksIC8qIG5zaGFyZHMgKi8gMSwgLyogbWF4X2FsbG9j ICovIDIgKiBQQUdFLAorCSAgICAvKiBtYXhfYnl0ZXMgKi8gMiAqIChOQUxMT0NTICogUEFHRSAr IE5BTExPQ1MgKiAyICogUEFHRSkpOworCWZvciAoaW50IGkgPSAwOyBpIDwgTkFMTE9DUzsgaSsr KSB7CisJCW9uZV9wYWdlW2ldID0gcGFpX2FsbG9jKHRzZG4sICZzZWMucGFpLCBQQUdFLCBQQUdF LAorCQkgICAgLyogemVybyAqLyBmYWxzZSwgLyogZ3VhcmRlZCAqLyBmYWxzZSwgLyogZnJlcXVl bnRfcmV1c2UgKi8KKwkJICAgIGZhbHNlLCAmZGVmZXJyZWRfd29ya19nZW5lcmF0ZWQpOworCQll eHBlY3RfcHRyX25vdF9udWxsKG9uZV9wYWdlW2ldLCAiVW5leHBlY3RlZCBhbGxvYyBmYWlsdXJl Iik7CisJCXR3b19wYWdlW2ldID0gcGFpX2FsbG9jKHRzZG4sICZzZWMucGFpLCAyICogUEFHRSwg UEFHRSwKKwkJICAgIC8qIHplcm8gKi8gZmFsc2UsIC8qIGd1YXJkZWQgKi8gZmFsc2UsIC8qIGZy ZXF1ZW50X3JldXNlICovCisJCSAgICBmYWxzZSwgJmRlZmVycmVkX3dvcmtfZ2VuZXJhdGVkKTsK KwkJZXhwZWN0X3B0cl9ub3RfbnVsbChvbmVfcGFnZVtpXSwgIlVuZXhwZWN0ZWQgYWxsb2MgZmFp bHVyZSIpOworCX0KKwlleHBlY3RfenVfZXEoMCwgdGEuYWxsb2NfY291bnQsICJTaG91bGQgYmUg dXNpbmcgYmF0Y2ggYWxsb2NzIik7CisJc2l6ZV90IG1heF9hbGxvY3MgPSB0YS5hbGxvY19jb3Vu dCArIHRhLmFsbG9jX2JhdGNoX2NvdW50OworCWV4cGVjdF96dV9sZSgyICogTkFMTE9DUywgbWF4 X2FsbG9jcywKKwkgICAgIkluY29ycmVjdCBudW1iZXIgb2YgYWxsb2NhdGlvbnMiKTsKKwlleHBl Y3RfenVfZXEoMCwgdGEuZGFsbG9jX2NvdW50LAorCSAgICAiSW5jb3JyZWN0IG51bWJlciBvZiBh bGxvY2F0aW9ucyIpOworCS8qCisJICogRnJlZSBpbiBhIGRpZmZlcmVudCBvcmRlciB0aGFuIHdl IGFsbG9jYXRlZCwgdG8gbWFrZSBzdXJlIGZyZWUtbGlzdAorCSAqIHNlcGFyYXRpb24gd29ya3Mg Y29ycmVjdGx5LgorCSAqLworCWZvciAoaW50IGkgPSBOQUxMT0NTIC0gMTsgaSA+PSAwOyBpLS0p IHsKKwkJcGFpX2RhbGxvYyh0c2RuLCAmc2VjLnBhaSwgb25lX3BhZ2VbaV0sCisJCSAgICAmZGVm ZXJyZWRfd29ya19nZW5lcmF0ZWQpOworCX0KKwlmb3IgKGludCBpID0gTkFMTE9DUyAtIDE7IGkg Pj0gMDsgaS0tKSB7CisJCXBhaV9kYWxsb2ModHNkbiwgJnNlYy5wYWksIHR3b19wYWdlW2ldLAor CQkgICAgJmRlZmVycmVkX3dvcmtfZ2VuZXJhdGVkKTsKKwl9CisJZXhwZWN0X3p1X2VxKG1heF9h bGxvY3MsIHRhLmFsbG9jX2NvdW50ICsgdGEuYWxsb2NfYmF0Y2hfY291bnQsCisJICAgICJJbmNv cnJlY3QgbnVtYmVyIG9mIGFsbG9jYXRpb25zIik7CisJZXhwZWN0X3p1X2VxKDAsIHRhLmRhbGxv Y19jb3VudCwKKwkgICAgIkluY29ycmVjdCBudW1iZXIgb2YgYWxsb2NhdGlvbnMiKTsKKwkvKgor CSAqIENoZWNrIHRoYXQgdGhlIG4ndGggbW9zdCByZWNlbnQgZGVhbGxvY2F0ZWQgZXh0ZW50IGlz IHJldHVybmVkIGZvcgorCSAqIHRoZSBuJ3RoIGFsbG9jIHJlcXVlc3Qgb2YgYSBnaXZlbiBzaXpl LgorCSAqLworCWZvciAoaW50IGkgPSAwOyBpIDwgTkFMTE9DUzsgaSsrKSB7CisJCWVkYXRhX3Qg KmFsbG9jMSA9IHBhaV9hbGxvYyh0c2RuLCAmc2VjLnBhaSwgUEFHRSwgUEFHRSwKKwkJICAgIC8q IHplcm8gKi8gZmFsc2UsIC8qIGd1YXJkZWQgKi8gZmFsc2UsIC8qIGZyZXF1ZW50X3JldXNlICov CisJCSAgICBmYWxzZSwgJmRlZmVycmVkX3dvcmtfZ2VuZXJhdGVkKTsKKwkJZWRhdGFfdCAqYWxs b2MyID0gcGFpX2FsbG9jKHRzZG4sICZzZWMucGFpLCAyICogUEFHRSwgUEFHRSwKKwkJICAgIC8q IHplcm8gKi8gZmFsc2UsIC8qIGd1YXJkZWQgKi8gZmFsc2UsIC8qIGZyZXF1ZW50X3JldXNlICov CisJCSAgICBmYWxzZSwgJmRlZmVycmVkX3dvcmtfZ2VuZXJhdGVkKTsKKwkJZXhwZWN0X3B0cl9l cShvbmVfcGFnZVtpXSwgYWxsb2MxLAorCQkgICAgIkdvdCB1bmV4cGVjdGVkIGFsbG9jYXRpb24i KTsKKwkJZXhwZWN0X3B0cl9lcSh0d29fcGFnZVtpXSwgYWxsb2MyLAorCQkgICAgIkdvdCB1bmV4 cGVjdGVkIGFsbG9jYXRpb24iKTsKKwl9CisJZXhwZWN0X3p1X2VxKG1heF9hbGxvY3MsIHRhLmFs bG9jX2NvdW50ICsgdGEuYWxsb2NfYmF0Y2hfY291bnQsCisJICAgICJJbmNvcnJlY3QgbnVtYmVy IG9mIGFsbG9jYXRpb25zIik7CisJZXhwZWN0X3p1X2VxKDAsIHRhLmRhbGxvY19jb3VudCwKKwkg ICAgIkluY29ycmVjdCBudW1iZXIgb2YgYWxsb2NhdGlvbnMiKTsKK30KK1RFU1RfRU5ECisKKwor VEVTVF9CRUdJTih0ZXN0X2F1dG9fZmx1c2gpIHsKKwlwYWlfdGVzdF9hbGxvY2F0b3JfdCB0YTsK KwlwYWlfdGVzdF9hbGxvY2F0b3JfaW5pdCgmdGEpOworCXNlY190IHNlYzsKKwkvKiBTZWUgdGhl IG5vdGUgYWJvdmUgLS0gd2UgY2FuJ3QgdXNlIHRoZSByZWFsIHRzZC4gKi8KKwl0c2RuX3QgKnRz ZG4gPSBUU0ROX05VTEw7CisJLyoKKwkgKiAxMC1hbGxvY3MgYXBpZWNlIG9mIDEtUEFHRSBhbmQg Mi1QQUdFIG9iamVjdHMgbWVhbnMgdGhhdCB3ZSBzaG91bGQgYmUKKwkgKiBhYmxlIHRvIGdldCB0 byAzMCBwYWdlcyBpbiB0aGUgY2FjaGUgYmVmb3JlIHRyaWdnZXJpbmcgYSBmbHVzaC4gIFRoZQor CSAqIGNob2ljZSBvZiBOQUxMT0NTIGhlcmUgaXMgY2hvc2VuIHRvIG1hdGNoIHRoZSBiYXRjaCBh bGxvY2F0aW9uCisJICogZGVmYXVsdCAoNCBleHRyYSArIDEgPT0gNTsgc28gMTAgYWxsb2NhdGlv bnMgbGVhdmVzIHRoZSBjYWNoZSBleGFjdGx5CisJICogZW1wdHksIGV2ZW4gaW4gdGhlIHByZXNl bmNlIG9mIGJhdGNoIGFsbG9jYXRpb24gb24gZmlsbCkuCisJICogRXZlbnR1YWxseSwgb25jZSBv dXIgYWxsb2NhdGlvbiBiYXRjaGluZyBzdHJhdGVnaWVzIGJlY29tZSBzbWFydGVyLAorCSAqIHRo aXMgc2hvdWxkIGNoYW5nZS4KKwkgKi8KKwllbnVtIHsgTkFMTE9DUyA9IDEwIH07CisJZWRhdGFf dCAqZXh0cmFfYWxsb2M7CisJZWRhdGFfdCAqYWxsb2NzW05BTExPQ1NdOworCWJvb2wgZGVmZXJy ZWRfd29ya19nZW5lcmF0ZWQgPSBmYWxzZTsKKwl0ZXN0X3NlY19pbml0KCZzZWMsICZ0YS5wYWks IC8qIG5zaGFyZHMgKi8gMSwgLyogbWF4X2FsbG9jICovIFBBR0UsCisJICAgIC8qIG1heF9ieXRl cyAqLyBOQUxMT0NTICogUEFHRSk7CisJZm9yIChpbnQgaSA9IDA7IGkgPCBOQUxMT0NTOyBpKysp IHsKKwkJYWxsb2NzW2ldID0gcGFpX2FsbG9jKHRzZG4sICZzZWMucGFpLCBQQUdFLCBQQUdFLAor CQkgICAgLyogemVybyAqLyBmYWxzZSwgLyogZ3VhcmRlZCAqLyBmYWxzZSwgLyogZnJlcXVlbnRf cmV1c2UgKi8KKwkJICAgIGZhbHNlLCAmZGVmZXJyZWRfd29ya19nZW5lcmF0ZWQpOworCQlleHBl Y3RfcHRyX25vdF9udWxsKGFsbG9jc1tpXSwgIlVuZXhwZWN0ZWQgYWxsb2MgZmFpbHVyZSIpOwor CX0KKwlleHRyYV9hbGxvYyA9IHBhaV9hbGxvYyh0c2RuLCAmc2VjLnBhaSwgUEFHRSwgUEFHRSwg LyogemVybyAqLyBmYWxzZSwKKwkgICAgLyogZ3VhcmRlZCAqLyBmYWxzZSwgLyogZnJlcXVlbnRf cmV1c2UgKi8gZmFsc2UsCisJICAgICZkZWZlcnJlZF93b3JrX2dlbmVyYXRlZCk7CisJZXhwZWN0 X3B0cl9ub3RfbnVsbChleHRyYV9hbGxvYywgIlVuZXhwZWN0ZWQgYWxsb2MgZmFpbHVyZSIpOwor CXNpemVfdCBtYXhfYWxsb2NzID0gdGEuYWxsb2NfY291bnQgKyB0YS5hbGxvY19iYXRjaF9jb3Vu dDsKKwlleHBlY3RfenVfbGUoTkFMTE9DUyArIDEsIG1heF9hbGxvY3MsCisJICAgICJJbmNvcnJl Y3QgbnVtYmVyIG9mIGFsbG9jYXRpb25zIik7CisJZXhwZWN0X3p1X2VxKDAsIHRhLmRhbGxvY19j b3VudCwKKwkgICAgIkluY29ycmVjdCBudW1iZXIgb2YgYWxsb2NhdGlvbnMiKTsKKwkvKiBGcmVl IHVudGlsIHRoZSBTRUMgaXMgZnVsbCwgYnV0IHNob3VsZCBub3QgaGF2ZSBmbHVzaGVkIHlldC4g Ki8KKwlmb3IgKGludCBpID0gMDsgaSA8IE5BTExPQ1M7IGkrKykgeworCQlwYWlfZGFsbG9jKHRz ZG4sICZzZWMucGFpLCBhbGxvY3NbaV0sICZkZWZlcnJlZF93b3JrX2dlbmVyYXRlZCk7CisJfQor CWV4cGVjdF96dV9sZShOQUxMT0NTICsgMSwgbWF4X2FsbG9jcywKKwkgICAgIkluY29ycmVjdCBu dW1iZXIgb2YgYWxsb2NhdGlvbnMiKTsKKwlleHBlY3RfenVfZXEoMCwgdGEuZGFsbG9jX2NvdW50 LAorCSAgICAiSW5jb3JyZWN0IG51bWJlciBvZiBhbGxvY2F0aW9ucyIpOworCS8qCisJICogRnJl ZSB0aGUgZXh0cmEgYWxsb2NhdGlvbjsgdGhpcyBzaG91bGQgdHJpZ2dlciBhIGZsdXNoLiAgVGhl IGludGVybmFsCisJICogZmx1c2hpbmcgbG9naWMgaXMgYWxsb3dlZCB0byBnZXQgY29tcGxpY2F0 ZWQ7IGZvciBub3csIHdlIHJlbHkgb24gb3VyCisJICogd2hpdGVib3gga25vd2xlZGdlIG9mIHRo ZSBmYWN0IHRoYXQgdGhlIFNFQyBmbHVzaGVzIGJpbnMgaW4gdGhlaXIKKwkgKiBlbnRpcmV0eSB3 aGVuIGl0IGRlY2lkZXMgdG8gZG8gc28sIGFuZCBpdCBoYXMgb25seSBvbmUgYmluIGFjdGl2ZQor CSAqIHJpZ2h0IG5vdy4KKwkgKi8KKwlwYWlfZGFsbG9jKHRzZG4sICZzZWMucGFpLCBleHRyYV9h bGxvYywgJmRlZmVycmVkX3dvcmtfZ2VuZXJhdGVkKTsKKwlleHBlY3RfenVfZXEobWF4X2FsbG9j cywgdGEuYWxsb2NfY291bnQgKyB0YS5hbGxvY19iYXRjaF9jb3VudCwKKwkgICAgIkluY29ycmVj dCBudW1iZXIgb2YgYWxsb2NhdGlvbnMiKTsKKwlleHBlY3RfenVfZXEoMCwgdGEuZGFsbG9jX2Nv dW50LAorCSAgICAiSW5jb3JyZWN0IG51bWJlciBvZiAobm9uLWJhdGNoKSBkZWFsbG9jYXRpb25z Iik7CisJZXhwZWN0X3p1X2VxKE5BTExPQ1MgKyAxLCB0YS5kYWxsb2NfYmF0Y2hfY291bnQsCisJ ICAgICJJbmNvcnJlY3QgbnVtYmVyIG9mIGJhdGNoIGRlYWxsb2NhdGlvbnMiKTsKK30KK1RFU1Rf RU5ECisKKy8qCisgKiBBIGRpc2FibGUgYW5kIGEgZmx1c2ggYXJlICphbG1vc3QqIGVxdWl2YWxl bnQ7IHRoZSBvbmx5IGRpZmZlcmVuY2UgaXMgd2hhdAorICogaGFwcGVucyBhZnRlcndhcmRzOyBk aXNhYmxpbmcgZGlzYWxsb3dzIGFsbCBmdXR1cmUgY2FjaGluZyBhcyB3ZWxsLgorICovCitzdGF0 aWMgdm9pZAorZG9fZGlzYWJsZV9mbHVzaF90ZXN0KGJvb2wgaXNfZGlzYWJsZSkgeworCXBhaV90 ZXN0X2FsbG9jYXRvcl90IHRhOworCXBhaV90ZXN0X2FsbG9jYXRvcl9pbml0KCZ0YSk7CisJc2Vj X3Qgc2VjOworCS8qIFNlZSB0aGUgbm90ZSBhYm92ZSAtLSB3ZSBjYW4ndCB1c2UgdGhlIHJlYWwg dHNkLiAqLworCXRzZG5fdCAqdHNkbiA9IFRTRE5fTlVMTDsKKworCWVudW0geyBOQUxMT0NTID0g MTEgfTsKKwllZGF0YV90ICphbGxvY3NbTkFMTE9DU107CisJYm9vbCBkZWZlcnJlZF93b3JrX2dl bmVyYXRlZCA9IGZhbHNlOworCXRlc3Rfc2VjX2luaXQoJnNlYywgJnRhLnBhaSwgLyogbnNoYXJk cyAqLyAxLCAvKiBtYXhfYWxsb2MgKi8gUEFHRSwKKwkgICAgLyogbWF4X2J5dGVzICovIE5BTExP Q1MgKiBQQUdFKTsKKwlmb3IgKGludCBpID0gMDsgaSA8IE5BTExPQ1M7IGkrKykgeworCQlhbGxv Y3NbaV0gPSBwYWlfYWxsb2ModHNkbiwgJnNlYy5wYWksIFBBR0UsIFBBR0UsCisJCSAgICAvKiB6 ZXJvICovIGZhbHNlLCAvKiBndWFyZGVkICovIGZhbHNlLCAvKiBmcmVxdWVudF9yZXVzZSAqLwor CQkgICAgZmFsc2UsICZkZWZlcnJlZF93b3JrX2dlbmVyYXRlZCk7CisJCWV4cGVjdF9wdHJfbm90 X251bGwoYWxsb2NzW2ldLCAiVW5leHBlY3RlZCBhbGxvYyBmYWlsdXJlIik7CisJfQorCS8qIEZy ZWUgYWxsIGJ1dCB0aGUgbGFzdCBhbG9jLiAqLworCWZvciAoaW50IGkgPSAwOyBpIDwgTkFMTE9D UyAtIDE7IGkrKykgeworCQlwYWlfZGFsbG9jKHRzZG4sICZzZWMucGFpLCBhbGxvY3NbaV0sICZk ZWZlcnJlZF93b3JrX2dlbmVyYXRlZCk7CisJfQorCXNpemVfdCBtYXhfYWxsb2NzID0gdGEuYWxs b2NfY291bnQgKyB0YS5hbGxvY19iYXRjaF9jb3VudDsKKworCWV4cGVjdF96dV9sZShOQUxMT0NT LCBtYXhfYWxsb2NzLCAiSW5jb3JyZWN0IG51bWJlciBvZiBhbGxvY2F0aW9ucyIpOworCWV4cGVj dF96dV9lcSgwLCB0YS5kYWxsb2NfY291bnQsCisJICAgICJJbmNvcnJlY3QgbnVtYmVyIG9mIGFs bG9jYXRpb25zIik7CisKKwlpZiAoaXNfZGlzYWJsZSkgeworCQlzZWNfZGlzYWJsZSh0c2RuLCAm c2VjKTsKKwl9IGVsc2UgeworCQlzZWNfZmx1c2godHNkbiwgJnNlYyk7CisJfQorCisJZXhwZWN0 X3p1X2VxKG1heF9hbGxvY3MsIHRhLmFsbG9jX2NvdW50ICsgdGEuYWxsb2NfYmF0Y2hfY291bnQs CisJICAgICJJbmNvcnJlY3QgbnVtYmVyIG9mIGFsbG9jYXRpb25zIik7CisJZXhwZWN0X3p1X2Vx KDAsIHRhLmRhbGxvY19jb3VudCwKKwkgICAgIkluY29ycmVjdCBudW1iZXIgb2YgKG5vbi1iYXRj aCkgZGVhbGxvY2F0aW9ucyIpOworCWV4cGVjdF96dV9sZShOQUxMT0NTIC0gMSwgdGEuZGFsbG9j X2JhdGNoX2NvdW50LAorCSAgICAiSW5jb3JyZWN0IG51bWJlciBvZiBiYXRjaCBkZWFsbG9jYXRp b25zIik7CisJc2l6ZV90IG9sZF9kYWxsb2NfYmF0Y2hfY291bnQgPSB0YS5kYWxsb2NfYmF0Y2hf Y291bnQ7CisKKwkvKgorCSAqIElmIHdlIGZyZWUgaW50byBhIGRpc2FibGVkIFNFQywgaXQgc2hv dWxkIGZvcndhcmQgdG8gdGhlIGZhbGxiYWNrLgorCSAqIE90aGVyd2lzZSwgdGhlIFNFQyBzaG91 bGQgYWNjZXB0IHRoZSBhbGxvY2F0aW9uLgorCSAqLworCXBhaV9kYWxsb2ModHNkbiwgJnNlYy5w YWksIGFsbG9jc1tOQUxMT0NTIC0gMV0sCisJICAgICZkZWZlcnJlZF93b3JrX2dlbmVyYXRlZCk7 CisKKwlleHBlY3RfenVfZXEobWF4X2FsbG9jcywgdGEuYWxsb2NfY291bnQgKyB0YS5hbGxvY19i YXRjaF9jb3VudCwKKwkgICAgIkluY29ycmVjdCBudW1iZXIgb2YgYWxsb2NhdGlvbnMiKTsKKwll eHBlY3RfenVfZXEoaXNfZGlzYWJsZSA/IDEgOiAwLCB0YS5kYWxsb2NfY291bnQsCisJICAgICJJ bmNvcnJlY3QgbnVtYmVyIG9mIChub24tYmF0Y2gpIGRlYWxsb2NhdGlvbnMiKTsKKwlleHBlY3Rf enVfZXEob2xkX2RhbGxvY19iYXRjaF9jb3VudCwgdGEuZGFsbG9jX2JhdGNoX2NvdW50LAorCSAg ICAiSW5jb3JyZWN0IG51bWJlciBvZiBiYXRjaCBkZWFsbG9jYXRpb25zIik7Cit9CisKK1RFU1Rf QkVHSU4odGVzdF9kaXNhYmxlKSB7CisJZG9fZGlzYWJsZV9mbHVzaF90ZXN0KC8qIGlzX2Rpc2Fi bGUgKi8gdHJ1ZSk7Cit9CitURVNUX0VORAorCitURVNUX0JFR0lOKHRlc3RfZmx1c2gpIHsKKwlk b19kaXNhYmxlX2ZsdXNoX3Rlc3QoLyogaXNfZGlzYWJsZSAqLyBmYWxzZSk7Cit9CitURVNUX0VO RAorCitURVNUX0JFR0lOKHRlc3RfbWF4X2FsbG9jX3Jlc3BlY3RlZCkgeworCXBhaV90ZXN0X2Fs bG9jYXRvcl90IHRhOworCXBhaV90ZXN0X2FsbG9jYXRvcl9pbml0KCZ0YSk7CisJc2VjX3Qgc2Vj OworCS8qIFNlZSB0aGUgbm90ZSBhYm92ZSAtLSB3ZSBjYW4ndCB1c2UgdGhlIHJlYWwgdHNkLiAq LworCXRzZG5fdCAqdHNkbiA9IFRTRE5fTlVMTDsKKworCXNpemVfdCBtYXhfYWxsb2MgPSAyICog UEFHRTsKKwlzaXplX3QgYXR0ZW1wdGVkX2FsbG9jID0gMyAqIFBBR0U7CisKKwlib29sIGRlZmVy cmVkX3dvcmtfZ2VuZXJhdGVkID0gZmFsc2U7CisKKwl0ZXN0X3NlY19pbml0KCZzZWMsICZ0YS5w YWksIC8qIG5zaGFyZHMgKi8gMSwgbWF4X2FsbG9jLAorCSAgICAvKiBtYXhfYnl0ZXMgKi8gMTAw MCAqIFBBR0UpOworCisJZm9yIChzaXplX3QgaSA9IDA7IGkgPCAxMDA7IGkrKykgeworCQlleHBl Y3RfenVfZXEoaSwgdGEuYWxsb2NfY291bnQsCisJCSAgICAiSW5jb3JyZWN0IG51bWJlciBvZiBh bGxvY2F0aW9ucyIpOworCQlleHBlY3RfenVfZXEoaSwgdGEuZGFsbG9jX2NvdW50LAorCQkgICAg IkluY29ycmVjdCBudW1iZXIgb2YgZGVhbGxvY2F0aW9ucyIpOworCQllZGF0YV90ICplZGF0YSA9 IHBhaV9hbGxvYyh0c2RuLCAmc2VjLnBhaSwgYXR0ZW1wdGVkX2FsbG9jLAorCQkgICAgUEFHRSwg LyogemVybyAqLyBmYWxzZSwgLyogZ3VhcmRlZCAqLyBmYWxzZSwKKwkJICAgIC8qIGZyZXF1ZW50 X3JldXNlICovIGZhbHNlLCAmZGVmZXJyZWRfd29ya19nZW5lcmF0ZWQpOworCQlleHBlY3RfcHRy X25vdF9udWxsKGVkYXRhLCAiVW5leHBlY3RlZCBhbGxvYyBmYWlsdXJlIik7CisJCWV4cGVjdF96 dV9lcShpICsgMSwgdGEuYWxsb2NfY291bnQsCisJCSAgICAiSW5jb3JyZWN0IG51bWJlciBvZiBh bGxvY2F0aW9ucyIpOworCQlleHBlY3RfenVfZXEoaSwgdGEuZGFsbG9jX2NvdW50LAorCQkgICAg IkluY29ycmVjdCBudW1iZXIgb2YgZGVhbGxvY2F0aW9ucyIpOworCQlwYWlfZGFsbG9jKHRzZG4s ICZzZWMucGFpLCBlZGF0YSwgJmRlZmVycmVkX3dvcmtfZ2VuZXJhdGVkKTsKKwl9Cit9CitURVNU X0VORAorCitURVNUX0JFR0lOKHRlc3RfZXhwYW5kX3Nocmlua19kZWxlZ2F0ZSkgeworCS8qCisJ ICogRXhwYW5kIGFuZCBzaHJpbmsgc2hvdWxkbid0IGFmZmVjdCBzZWMgc3RhdGU7IHRoZXkgc2hv dWxkIGp1c3QKKwkgKiBkZWxlZ2F0ZSB0byB0aGUgZmFsbGJhY2sgUEFJLgorCSAqLworCXBhaV90 ZXN0X2FsbG9jYXRvcl90IHRhOworCXBhaV90ZXN0X2FsbG9jYXRvcl9pbml0KCZ0YSk7CisJc2Vj X3Qgc2VjOworCS8qIFNlZSB0aGUgbm90ZSBhYm92ZSAtLSB3ZSBjYW4ndCB1c2UgdGhlIHJlYWwg dHNkLiAqLworCXRzZG5fdCAqdHNkbiA9IFRTRE5fTlVMTDsKKworCWJvb2wgZGVmZXJyZWRfd29y a19nZW5lcmF0ZWQgPSBmYWxzZTsKKworCXRlc3Rfc2VjX2luaXQoJnNlYywgJnRhLnBhaSwgLyog bnNoYXJkcyAqLyAxLCAvKiBtYXhfYWxsb2MgKi8gMTAgKiBQQUdFLAorCSAgICAvKiBtYXhfYnl0 ZXMgKi8gMTAwMCAqIFBBR0UpOworCWVkYXRhX3QgKmVkYXRhID0gcGFpX2FsbG9jKHRzZG4sICZz ZWMucGFpLCBQQUdFLCBQQUdFLAorCSAgICAvKiB6ZXJvICovIGZhbHNlLCAvKiBndWFyZGVkICov IGZhbHNlLCAvKiBmcmVxdWVudF9yZXVzZSAqLyBmYWxzZSwKKwkgICAgJmRlZmVycmVkX3dvcmtf Z2VuZXJhdGVkKTsKKwlleHBlY3RfcHRyX25vdF9udWxsKGVkYXRhLCAiVW5leHBlY3RlZCBhbGxv YyBmYWlsdXJlIik7CisKKwlib29sIGVyciA9IHBhaV9leHBhbmQodHNkbiwgJnNlYy5wYWksIGVk YXRhLCBQQUdFLCA0ICogUEFHRSwKKwkgICAgLyogemVybyAqLyBmYWxzZSwgJmRlZmVycmVkX3dv cmtfZ2VuZXJhdGVkKTsKKwlleHBlY3RfZmFsc2UoZXJyLCAiVW5leHBlY3RlZCBleHBhbmQgZmFp bHVyZSIpOworCWV4cGVjdF96dV9lcSgxLCB0YS5leHBhbmRfY291bnQsICIiKTsKKwl0YS5leHBh bmRfcmV0dXJuX3ZhbHVlID0gdHJ1ZTsKKwllcnIgPSBwYWlfZXhwYW5kKHRzZG4sICZzZWMucGFp LCBlZGF0YSwgNCAqIFBBR0UsIDMgKiBQQUdFLAorCSAgICAvKiB6ZXJvICovIGZhbHNlLCAmZGVm ZXJyZWRfd29ya19nZW5lcmF0ZWQpOworCWV4cGVjdF90cnVlKGVyciwgIlVuZXhwZWN0ZWQgZXhw YW5kIHN1Y2Nlc3MiKTsKKwlleHBlY3RfenVfZXEoMiwgdGEuZXhwYW5kX2NvdW50LCAiIik7CisK KwllcnIgPSBwYWlfc2hyaW5rKHRzZG4sICZzZWMucGFpLCBlZGF0YSwgNCAqIFBBR0UsIDIgKiBQ QUdFLAorCSAgICAmZGVmZXJyZWRfd29ya19nZW5lcmF0ZWQpOworCWV4cGVjdF9mYWxzZShlcnIs ICJVbmV4cGVjdGVkIHNocmluayBmYWlsdXJlIik7CisJZXhwZWN0X3p1X2VxKDEsIHRhLnNocmlu a19jb3VudCwgIiIpOworCXRhLnNocmlua19yZXR1cm5fdmFsdWUgPSB0cnVlOworCWVyciA9IHBh aV9zaHJpbmsodHNkbiwgJnNlYy5wYWksIGVkYXRhLCAyICogUEFHRSwgUEFHRSwKKwkgICAgJmRl ZmVycmVkX3dvcmtfZ2VuZXJhdGVkKTsKKwlleHBlY3RfdHJ1ZShlcnIsICJVbmV4cGVjdGVkIHNo cmluayBzdWNjZXNzIik7CisJZXhwZWN0X3p1X2VxKDIsIHRhLnNocmlua19jb3VudCwgIiIpOwor fQorVEVTVF9FTkQKKworVEVTVF9CRUdJTih0ZXN0X25zaGFyZHNfMCkgeworCXBhaV90ZXN0X2Fs bG9jYXRvcl90IHRhOworCXBhaV90ZXN0X2FsbG9jYXRvcl9pbml0KCZ0YSk7CisJc2VjX3Qgc2Vj OworCS8qIFNlZSB0aGUgbm90ZSBhYm92ZSAtLSB3ZSBjYW4ndCB1c2UgdGhlIHJlYWwgdHNkLiAq LworCXRzZG5fdCAqdHNkbiA9IFRTRE5fTlVMTDsKKwliYXNlX3QgKmJhc2UgPSBiYXNlX25ldyhU U0ROX05VTEwsIC8qIGluZCAqLyAxMjMsCisJICAgICZlaG9va3NfZGVmYXVsdF9leHRlbnRfaG9v a3MsIC8qIG1ldGFkYXRhX3VzZV9ob29rcyAqLyB0cnVlKTsKKworCXNlY19vcHRzX3Qgb3B0cyA9 IFNFQ19PUFRTX0RFRkFVTFQ7CisJb3B0cy5uc2hhcmRzID0gMDsKKwlzZWNfaW5pdChUU0ROX05V TEwsICZzZWMsIGJhc2UsICZ0YS5wYWksICZvcHRzKTsKKworCWJvb2wgZGVmZXJyZWRfd29ya19n ZW5lcmF0ZWQgPSBmYWxzZTsKKwllZGF0YV90ICplZGF0YSA9IHBhaV9hbGxvYyh0c2RuLCAmc2Vj LnBhaSwgUEFHRSwgUEFHRSwKKwkgICAgLyogemVybyAqLyBmYWxzZSwgLyogZ3VhcmRlZCAqLyBm YWxzZSwgLyogZnJlcXVlbnRfcmV1c2UgKi8gZmFsc2UsCisJICAgICZkZWZlcnJlZF93b3JrX2dl bmVyYXRlZCk7CisJcGFpX2RhbGxvYyh0c2RuLCAmc2VjLnBhaSwgZWRhdGEsICZkZWZlcnJlZF93 b3JrX2dlbmVyYXRlZCk7CisKKwkvKiBCb3RoIG9wZXJhdGlvbnMgc2hvdWxkIGhhdmUgZ29uZSBk aXJlY3RseSB0byB0aGUgZmFsbGJhY2suICovCisJZXhwZWN0X3p1X2VxKDEsIHRhLmFsbG9jX2Nv dW50LCAiIik7CisJZXhwZWN0X3p1X2VxKDEsIHRhLmRhbGxvY19jb3VudCwgIiIpOworfQorVEVT VF9FTkQKKworc3RhdGljIHZvaWQKK2V4cGVjdF9zdGF0c19wYWdlcyh0c2RuX3QgKnRzZG4sIHNl Y190ICpzZWMsIHNpemVfdCBucGFnZXMpIHsKKwlzZWNfc3RhdHNfdCBzdGF0czsKKwkvKgorCSAq IENoZWNrIHRoYXQgdGhlIHN0YXRzIG1lcmdpbmcgYWNjdW11bGF0ZXMgcmF0aGVyIHRoYW4gb3Zl cndyaXRlcyBieQorCSAqIHB1dHRpbmcgc29tZSAobWFkZSB1cCkgZGF0YSB0aGVyZSB0byBiZWdp biB3aXRoLgorCSAqLworCXN0YXRzLmJ5dGVzID0gMTIzOworCXNlY19zdGF0c19tZXJnZSh0c2Ru LCBzZWMsICZzdGF0cyk7CisJYXNzZXJ0X3p1X2xlKG5wYWdlcyAqIFBBR0UgKyAxMjMsIHN0YXRz LmJ5dGVzLCAiIik7Cit9CisKK1RFU1RfQkVHSU4odGVzdF9zdGF0c19zaW1wbGUpIHsKKwlwYWlf dGVzdF9hbGxvY2F0b3JfdCB0YTsKKwlwYWlfdGVzdF9hbGxvY2F0b3JfaW5pdCgmdGEpOworCXNl Y190IHNlYzsKKworCS8qIFNlZSB0aGUgbm90ZSBhYm92ZSAtLSB3ZSBjYW4ndCB1c2UgdGhlIHJl YWwgdHNkLiAqLworCXRzZG5fdCAqdHNkbiA9IFRTRE5fTlVMTDsKKworCWVudW0geworCQlOSVRF UlMgPSAxMDAsCisJCUZMVVNIX1BBR0VTID0gMjAsCisJfTsKKworCWJvb2wgZGVmZXJyZWRfd29y a19nZW5lcmF0ZWQgPSBmYWxzZTsKKworCXRlc3Rfc2VjX2luaXQoJnNlYywgJnRhLnBhaSwgLyog bnNoYXJkcyAqLyAxLCAvKiBtYXhfYWxsb2MgKi8gUEFHRSwKKwkgICAgLyogbWF4X2J5dGVzICov IEZMVVNIX1BBR0VTICogUEFHRSk7CisKKwllZGF0YV90ICphbGxvY3NbRkxVU0hfUEFHRVNdOwor CWZvciAoc2l6ZV90IGkgPSAwOyBpIDwgRkxVU0hfUEFHRVM7IGkrKykgeworCQlhbGxvY3NbaV0g PSBwYWlfYWxsb2ModHNkbiwgJnNlYy5wYWksIFBBR0UsIFBBR0UsCisJCSAgICAvKiB6ZXJvICov IGZhbHNlLCAvKiBndWFyZGVkICovIGZhbHNlLCAvKiBmcmVxdWVudF9yZXVzZSAqLworCQkgICAg ZmFsc2UsICZkZWZlcnJlZF93b3JrX2dlbmVyYXRlZCk7CisJCWV4cGVjdF9zdGF0c19wYWdlcyh0 c2RuLCAmc2VjLCAwKTsKKwl9CisKKwkvKiBJbmNyZWFzZSBhbmQgZGVjcmVhc2UsIHdpdGhvdXQg Zmx1c2hpbmcuICovCisJZm9yIChzaXplX3QgaSA9IDA7IGkgPCBOSVRFUlM7IGkrKykgeworCQlm b3IgKHNpemVfdCBqID0gMDsgaiA8IEZMVVNIX1BBR0VTIC8gMjsgaisrKSB7CisJCQlwYWlfZGFs bG9jKHRzZG4sICZzZWMucGFpLCBhbGxvY3Nbal0sCisJCQkgICAgJmRlZmVycmVkX3dvcmtfZ2Vu ZXJhdGVkKTsKKwkJCWV4cGVjdF9zdGF0c19wYWdlcyh0c2RuLCAmc2VjLCBqICsgMSk7CisJCX0K KwkJZm9yIChzaXplX3QgaiA9IDA7IGogPCBGTFVTSF9QQUdFUyAvIDI7IGorKykgeworCQkJYWxs b2NzW2pdID0gcGFpX2FsbG9jKHRzZG4sICZzZWMucGFpLCBQQUdFLCBQQUdFLAorCQkJICAgIC8q IHplcm8gKi8gZmFsc2UsIC8qIGd1YXJkZWQgKi8gZmFsc2UsCisJCQkgICAgLyogZnJlcXVlbnRf cmV1c2UgKi8gZmFsc2UsCisJCQkgICAgJmRlZmVycmVkX3dvcmtfZ2VuZXJhdGVkKTsKKwkJCWV4 cGVjdF9zdGF0c19wYWdlcyh0c2RuLCAmc2VjLCBGTFVTSF9QQUdFUyAvIDIgLSBqIC0gMSk7CisJ CX0KKwl9Cit9CitURVNUX0VORAorCitURVNUX0JFR0lOKHRlc3Rfc3RhdHNfYXV0b19mbHVzaCkg eworCXBhaV90ZXN0X2FsbG9jYXRvcl90IHRhOworCXBhaV90ZXN0X2FsbG9jYXRvcl9pbml0KCZ0 YSk7CisJc2VjX3Qgc2VjOworCisJLyogU2VlIHRoZSBub3RlIGFib3ZlIC0tIHdlIGNhbid0IHVz ZSB0aGUgcmVhbCB0c2QuICovCisJdHNkbl90ICp0c2RuID0gVFNETl9OVUxMOworCisJZW51bSB7 CisJCUZMVVNIX1BBR0VTID0gMTAsCisJfTsKKworCXRlc3Rfc2VjX2luaXQoJnNlYywgJnRhLnBh aSwgLyogbnNoYXJkcyAqLyAxLCAvKiBtYXhfYWxsb2MgKi8gUEFHRSwKKwkgICAgLyogbWF4X2J5 dGVzICovIEZMVVNIX1BBR0VTICogUEFHRSk7CisKKwllZGF0YV90ICpleHRyYV9hbGxvYzA7CisJ ZWRhdGFfdCAqZXh0cmFfYWxsb2MxOworCWVkYXRhX3QgKmFsbG9jc1syICogRkxVU0hfUEFHRVNd OworCisJYm9vbCBkZWZlcnJlZF93b3JrX2dlbmVyYXRlZCA9IGZhbHNlOworCisJZXh0cmFfYWxs b2MwID0gcGFpX2FsbG9jKHRzZG4sICZzZWMucGFpLCBQQUdFLCBQQUdFLCAvKiB6ZXJvICovIGZh bHNlLAorCSAgICAvKiBndWFyZGVkICovIGZhbHNlLCAvKiBmcmVxdWVudF9yZXVzZSAqLyBmYWxz ZSwKKwkgICAgJmRlZmVycmVkX3dvcmtfZ2VuZXJhdGVkKTsKKwlleHRyYV9hbGxvYzEgPSBwYWlf YWxsb2ModHNkbiwgJnNlYy5wYWksIFBBR0UsIFBBR0UsIC8qIHplcm8gKi8gZmFsc2UsCisJICAg IC8qIGd1YXJkZWQgKi8gZmFsc2UsIC8qIGZyZXF1ZW50X3JldXNlICovIGZhbHNlLAorCSAgICAm ZGVmZXJyZWRfd29ya19nZW5lcmF0ZWQpOworCisJZm9yIChzaXplX3QgaSA9IDA7IGkgPCAyICog RkxVU0hfUEFHRVM7IGkrKykgeworCQlhbGxvY3NbaV0gPSBwYWlfYWxsb2ModHNkbiwgJnNlYy5w YWksIFBBR0UsIFBBR0UsCisJCSAgICAvKiB6ZXJvICovIGZhbHNlLCAvKiBndWFyZGVkICovIGZh bHNlLCAvKiBmcmVxdWVudF9yZXVzZSAqLworCQkgICAgZmFsc2UsICZkZWZlcnJlZF93b3JrX2dl bmVyYXRlZCk7CisJfQorCisJZm9yIChzaXplX3QgaSA9IDA7IGkgPCBGTFVTSF9QQUdFUzsgaSsr KSB7CisJCXBhaV9kYWxsb2ModHNkbiwgJnNlYy5wYWksIGFsbG9jc1tpXSwgJmRlZmVycmVkX3dv cmtfZ2VuZXJhdGVkKTsKKwl9CisJcGFpX2RhbGxvYyh0c2RuLCAmc2VjLnBhaSwgZXh0cmFfYWxs b2MwLCAmZGVmZXJyZWRfd29ya19nZW5lcmF0ZWQpOworCisJLyogRmx1c2ggdGhlIHJlbWFpbmlu ZyBwYWdlczsgc3RhdHMgc2hvdWxkIHN0aWxsIHdvcmsuICovCisJZm9yIChzaXplX3QgaSA9IDA7 IGkgPCBGTFVTSF9QQUdFUzsgaSsrKSB7CisJCXBhaV9kYWxsb2ModHNkbiwgJnNlYy5wYWksIGFs bG9jc1tGTFVTSF9QQUdFUyArIGldLAorCQkgICAgJmRlZmVycmVkX3dvcmtfZ2VuZXJhdGVkKTsK Kwl9CisKKwlwYWlfZGFsbG9jKHRzZG4sICZzZWMucGFpLCBleHRyYV9hbGxvYzEsICZkZWZlcnJl ZF93b3JrX2dlbmVyYXRlZCk7CisKKwlleHBlY3Rfc3RhdHNfcGFnZXModHNkbiwgJnNlYywgdGEu YWxsb2NfY291bnQgKyB0YS5hbGxvY19iYXRjaF9jb3VudAorCSAgICAtIHRhLmRhbGxvY19jb3Vu dCAtIHRhLmRhbGxvY19iYXRjaF9jb3VudCk7Cit9CitURVNUX0VORAorCitURVNUX0JFR0lOKHRl c3Rfc3RhdHNfbWFudWFsX2ZsdXNoKSB7CisJcGFpX3Rlc3RfYWxsb2NhdG9yX3QgdGE7CisJcGFp X3Rlc3RfYWxsb2NhdG9yX2luaXQoJnRhKTsKKwlzZWNfdCBzZWM7CisKKwkvKiBTZWUgdGhlIG5v dGUgYWJvdmUgLS0gd2UgY2FuJ3QgdXNlIHRoZSByZWFsIHRzZC4gKi8KKwl0c2RuX3QgKnRzZG4g PSBUU0ROX05VTEw7CisKKwllbnVtIHsKKwkJRkxVU0hfUEFHRVMgPSAxMCwKKwl9OworCisJdGVz dF9zZWNfaW5pdCgmc2VjLCAmdGEucGFpLCAvKiBuc2hhcmRzICovIDEsIC8qIG1heF9hbGxvYyAq LyBQQUdFLAorCSAgICAvKiBtYXhfYnl0ZXMgKi8gRkxVU0hfUEFHRVMgKiBQQUdFKTsKKworCWJv b2wgZGVmZXJyZWRfd29ya19nZW5lcmF0ZWQgPSBmYWxzZTsKKwllZGF0YV90ICphbGxvY3NbRkxV U0hfUEFHRVNdOworCWZvciAoc2l6ZV90IGkgPSAwOyBpIDwgRkxVU0hfUEFHRVM7IGkrKykgewor CQlhbGxvY3NbaV0gPSBwYWlfYWxsb2ModHNkbiwgJnNlYy5wYWksIFBBR0UsIFBBR0UsCisJCSAg ICAvKiB6ZXJvICovIGZhbHNlLCAvKiBndWFyZGVkICovIGZhbHNlLCAvKiBmcmVxdWVudF9yZXVz ZSAqLworCQkgICAgZmFsc2UsICZkZWZlcnJlZF93b3JrX2dlbmVyYXRlZCk7CisJCWV4cGVjdF9z dGF0c19wYWdlcyh0c2RuLCAmc2VjLCAwKTsKKwl9CisKKwkvKiBEYWxsb2MgdGhlIGZpcnN0IGhh bGYgb2YgdGhlIGFsbG9jYXRpb25zLiAqLworCWZvciAoc2l6ZV90IGkgPSAwOyBpIDwgRkxVU0hf UEFHRVMgLyAyOyBpKyspIHsKKwkJcGFpX2RhbGxvYyh0c2RuLCAmc2VjLnBhaSwgYWxsb2NzW2ld LCAmZGVmZXJyZWRfd29ya19nZW5lcmF0ZWQpOworCQlleHBlY3Rfc3RhdHNfcGFnZXModHNkbiwg JnNlYywgaSArIDEpOworCX0KKworCXNlY19mbHVzaCh0c2RuLCAmc2VjKTsKKwlleHBlY3Rfc3Rh dHNfcGFnZXModHNkbiwgJnNlYywgMCk7CisKKwkvKiBGbHVzaCB0aGUgcmVtYWluaW5nIHBhZ2Vz LiAqLworCWZvciAoc2l6ZV90IGkgPSAwOyBpIDwgRkxVU0hfUEFHRVMgLyAyOyBpKyspIHsKKwkJ cGFpX2RhbGxvYyh0c2RuLCAmc2VjLnBhaSwgYWxsb2NzW0ZMVVNIX1BBR0VTIC8gMiArIGldLAor CQkgICAgJmRlZmVycmVkX3dvcmtfZ2VuZXJhdGVkKTsKKwkJZXhwZWN0X3N0YXRzX3BhZ2VzKHRz ZG4sICZzZWMsIGkgKyAxKTsKKwl9CisJc2VjX2Rpc2FibGUodHNkbiwgJnNlYyk7CisJZXhwZWN0 X3N0YXRzX3BhZ2VzKHRzZG4sICZzZWMsIDApOworfQorVEVTVF9FTkQKKworaW50CittYWluKHZv aWQpIHsKKwlyZXR1cm4gdGVzdCgKKwkgICAgdGVzdF9yZXVzZSwKKwkgICAgdGVzdF9hdXRvX2Zs dXNoLAorCSAgICB0ZXN0X2Rpc2FibGUsCisJICAgIHRlc3RfZmx1c2gsCisJICAgIHRlc3RfbWF4 X2FsbG9jX3Jlc3BlY3RlZCwKKwkgICAgdGVzdF9leHBhbmRfc2hyaW5rX2RlbGVnYXRlLAorCSAg ICB0ZXN0X25zaGFyZHNfMCwKKwkgICAgdGVzdF9zdGF0c19zaW1wbGUsCisJICAgIHRlc3Rfc3Rh dHNfYXV0b19mbHVzaCwKKwkgICAgdGVzdF9zdGF0c19tYW51YWxfZmx1c2gpOworfQoKZGlmZiAt LWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9z ZXEuYyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9z ZXEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNmVkNjgzCi0tLSAvZGV2 L251bGwKKysrIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91 bml0L3NlcS5jCkBAIC0wLDAgKzEsOTUgQEAKKyNpbmNsdWRlICJ0ZXN0L2plbWFsbG9jX3Rlc3Qu aCIKKworI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL3NlcS5oIgorCit0eXBlZGVmIHN0cnVj dCBkYXRhX3MgZGF0YV90Oworc3RydWN0IGRhdGFfcyB7CisJaW50IGFyclsxMF07Cit9OworCitz dGF0aWMgdm9pZAorc2V0X2RhdGEoZGF0YV90ICpkYXRhLCBpbnQgbnVtKSB7CisJZm9yIChpbnQg aSA9IDA7IGkgPCAxMDsgaSsrKSB7CisJCWRhdGEtPmFycltpXSA9IG51bTsKKwl9Cit9CisKK3N0 YXRpYyB2b2lkCitleHBlY3RfZGF0YShkYXRhX3QgKmRhdGEpIHsKKwlpbnQgbnVtID0gZGF0YS0+ YXJyWzBdOworCWZvciAoaW50IGkgPSAwOyBpIDwgMTA7IGkrKykgeworCQlleHBlY3RfZF9lcShu dW0sIGRhdGEtPmFycltpXSwgIkRhdGEgY29uc2lzdGVuY3kgZXJyb3IiKTsKKwl9Cit9CisKK3Nl cV9kZWZpbmUoZGF0YV90LCBkYXRhKQorCit0eXBlZGVmIHN0cnVjdCB0aGRfZGF0YV9zIHRoZF9k YXRhX3Q7CitzdHJ1Y3QgdGhkX2RhdGFfcyB7CisJc2VxX2RhdGFfdCBkYXRhOworfTsKKworc3Rh dGljIHZvaWQgKgorc2VxX3JlYWRlcl90aGQodm9pZCAqYXJnKSB7CisJdGhkX2RhdGFfdCAqdGhk X2RhdGEgPSAodGhkX2RhdGFfdCAqKWFyZzsKKwlpbnQgaXRlciA9IDA7CisJZGF0YV90IGxvY2Fs X2RhdGE7CisJd2hpbGUgKGl0ZXIgPCAxMDAwICogMTAwMCAtIDEpIHsKKwkJYm9vbCBzdWNjZXNz ID0gc2VxX3RyeV9sb2FkX2RhdGEoJmxvY2FsX2RhdGEsICZ0aGRfZGF0YS0+ZGF0YSk7CisJCWlm IChzdWNjZXNzKSB7CisJCQlleHBlY3RfZGF0YSgmbG9jYWxfZGF0YSk7CisJCQlleHBlY3RfZF9s ZShpdGVyLCBsb2NhbF9kYXRhLmFyclswXSwKKwkJCSAgICAiU2VxIHJlYWQgd2VudCBiYWNrIGlu IHRpbWUuIik7CisJCQlpdGVyID0gbG9jYWxfZGF0YS5hcnJbMF07CisJCX0KKwl9CisJcmV0dXJu IE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkICoKK3NlcV93cml0ZXJfdGhkKHZvaWQgKmFyZykgewor CXRoZF9kYXRhX3QgKnRoZF9kYXRhID0gKHRoZF9kYXRhX3QgKilhcmc7CisJZGF0YV90IGxvY2Fs X2RhdGE7CisJbWVtc2V0KCZsb2NhbF9kYXRhLCAwLCBzaXplb2YobG9jYWxfZGF0YSkpOworCWZv ciAoaW50IGkgPSAwOyBpIDwgMTAwMCAqIDEwMDA7IGkrKykgeworCQlzZXRfZGF0YSgmbG9jYWxf ZGF0YSwgaSk7CisJCXNlcV9zdG9yZV9kYXRhKCZ0aGRfZGF0YS0+ZGF0YSwgJmxvY2FsX2RhdGEp OworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworVEVTVF9CRUdJTih0ZXN0X3NlcV90aHJlYWRlZCkg eworCXRoZF9kYXRhX3QgdGhkX2RhdGE7CisJbWVtc2V0KCZ0aGRfZGF0YSwgMCwgc2l6ZW9mKHRo ZF9kYXRhKSk7CisKKwl0aGRfdCByZWFkZXI7CisJdGhkX3Qgd3JpdGVyOworCisJdGhkX2NyZWF0 ZSgmcmVhZGVyLCBzZXFfcmVhZGVyX3RoZCwgJnRoZF9kYXRhKTsKKwl0aGRfY3JlYXRlKCZ3cml0 ZXIsIHNlcV93cml0ZXJfdGhkLCAmdGhkX2RhdGEpOworCisJdGhkX2pvaW4ocmVhZGVyLCBOVUxM KTsKKwl0aGRfam9pbih3cml0ZXIsIE5VTEwpOworfQorVEVTVF9FTkQKKworVEVTVF9CRUdJTih0 ZXN0X3NlcV9zaW1wbGUpIHsKKwlkYXRhX3QgZGF0YTsKKwlzZXFfZGF0YV90IHNlcTsKKwltZW1z ZXQoJnNlcSwgMCwgc2l6ZW9mKHNlcSkpOworCWZvciAoaW50IGkgPSAwOyBpIDwgMTAwMCAqIDEw MDA7IGkrKykgeworCQlzZXRfZGF0YSgmZGF0YSwgaSk7CisJCXNlcV9zdG9yZV9kYXRhKCZzZXEs ICZkYXRhKTsKKwkJc2V0X2RhdGEoJmRhdGEsIDApOworCQlib29sIHN1Y2Nlc3MgPSBzZXFfdHJ5 X2xvYWRfZGF0YSgmZGF0YSwgJnNlcSk7CisJCWV4cGVjdF9iX2VxKHN1Y2Nlc3MsIHRydWUsICJG YWlsZWQgbm9uLXJhY2luZyByZWFkIik7CisJCWV4cGVjdF9kYXRhKCZkYXRhKTsKKwl9Cit9CitU RVNUX0VORAorCitpbnQgbWFpbih2b2lkKSB7CisJcmV0dXJuIHRlc3Rfbm9fcmVlbnRyYW5jeSgK KwkgICAgdGVzdF9zZXFfc2ltcGxlLAorCSAgICB0ZXN0X3NlcV90aHJlYWRlZCk7Cit9CgpkaWZm IC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0 L3NpemVfY2hlY2suYyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rl c3QvdW5pdC9zaXplX2NoZWNrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u YWNjZGM0MAotLS0gL2Rldi9udWxsCisrKyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFs bG9jLTUuMy4wL3Rlc3QvdW5pdC9zaXplX2NoZWNrLmMKQEAgLTAsMCArMSw3OSBAQAorI2luY2x1 ZGUgInRlc3QvamVtYWxsb2NfdGVzdC5oIgorCisjaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwv c2FmZXR5X2NoZWNrLmgiCisKK2Jvb2wgZmFrZV9hYm9ydF9jYWxsZWQ7Cit2b2lkIGZha2VfYWJv cnQoY29uc3QgY2hhciAqbWVzc2FnZSkgeworCSh2b2lkKW1lc3NhZ2U7CisJZmFrZV9hYm9ydF9j YWxsZWQgPSB0cnVlOworfQorCisjZGVmaW5lIFNNQUxMX1NJWkUxIFNDX1NNQUxMX01BWENMQVNT CisjZGVmaW5lIFNNQUxMX1NJWkUyIChTQ19TTUFMTF9NQVhDTEFTUyAvIDIpCisKKyNkZWZpbmUg TEFSR0VfU0laRTEgU0NfTEFSR0VfTUlOQ0xBU1MKKyNkZWZpbmUgTEFSR0VfU0laRTIgKExBUkdF X1NJWkUxICogMikKKwordm9pZCAqCit0ZXN0X2ludmFsaWRfc2l6ZV9wcmUoc2l6ZV90IHN6KSB7 CisJc2FmZXR5X2NoZWNrX3NldF9hYm9ydCgmZmFrZV9hYm9ydCk7CisKKwlmYWtlX2Fib3J0X2Nh bGxlZCA9IGZhbHNlOworCXZvaWQgKnB0ciA9IG1hbGxvYyhzeik7CisJYXNzZXJ0X3B0cl9ub3Rf bnVsbChwdHIsICJVbmV4cGVjdGVkIGZhaWx1cmUiKTsKKworCXJldHVybiBwdHI7Cit9CisKK3Zv aWQKK3Rlc3RfaW52YWxpZF9zaXplX3Bvc3Qodm9pZCkgeworCWV4cGVjdF90cnVlKGZha2VfYWJv cnRfY2FsbGVkLCAiU2FmZXR5IGNoZWNrIGRpZG4ndCBmaXJlIik7CisJc2FmZXR5X2NoZWNrX3Nl dF9hYm9ydChOVUxMKTsKK30KKworVEVTVF9CRUdJTih0ZXN0X2ludmFsaWRfc2l6ZV9zZGFsbG9j eCkgeworCXRlc3Rfc2tpcF9pZighY29uZmlnX29wdF9zaXplX2NoZWNrcyk7CisKKwl2b2lkICpw dHIgPSB0ZXN0X2ludmFsaWRfc2l6ZV9wcmUoU01BTExfU0laRTEpOworCXNkYWxsb2N4KHB0ciwg U01BTExfU0laRTIsIDApOworCXRlc3RfaW52YWxpZF9zaXplX3Bvc3QoKTsKKworCXB0ciA9IHRl c3RfaW52YWxpZF9zaXplX3ByZShMQVJHRV9TSVpFMSk7CisJc2RhbGxvY3gocHRyLCBMQVJHRV9T SVpFMiwgMCk7CisJdGVzdF9pbnZhbGlkX3NpemVfcG9zdCgpOworfQorVEVTVF9FTkQKKworVEVT VF9CRUdJTih0ZXN0X2ludmFsaWRfc2l6ZV9zZGFsbG9jeF9ub256ZXJvX2ZsYWcpIHsKKwl0ZXN0 X3NraXBfaWYoIWNvbmZpZ19vcHRfc2l6ZV9jaGVja3MpOworCisJdm9pZCAqcHRyID0gdGVzdF9p bnZhbGlkX3NpemVfcHJlKFNNQUxMX1NJWkUxKTsKKwlzZGFsbG9jeChwdHIsIFNNQUxMX1NJWkUy LCBNQUxMT0NYX1RDQUNIRV9OT05FKTsKKwl0ZXN0X2ludmFsaWRfc2l6ZV9wb3N0KCk7CisKKwlw dHIgPSB0ZXN0X2ludmFsaWRfc2l6ZV9wcmUoTEFSR0VfU0laRTEpOworCXNkYWxsb2N4KHB0ciwg TEFSR0VfU0laRTIsIE1BTExPQ1hfVENBQ0hFX05PTkUpOworCXRlc3RfaW52YWxpZF9zaXplX3Bv c3QoKTsKK30KK1RFU1RfRU5ECisKK1RFU1RfQkVHSU4odGVzdF9pbnZhbGlkX3NpemVfc2RhbGxv Y3hfbm9mbGFncykgeworCXRlc3Rfc2tpcF9pZighY29uZmlnX29wdF9zaXplX2NoZWNrcyk7CisK Kwl2b2lkICpwdHIgPSB0ZXN0X2ludmFsaWRfc2l6ZV9wcmUoU01BTExfU0laRTEpOworCWplX3Nk YWxsb2N4X25vZmxhZ3MocHRyLCBTTUFMTF9TSVpFMik7CisJdGVzdF9pbnZhbGlkX3NpemVfcG9z dCgpOworCisJcHRyID0gdGVzdF9pbnZhbGlkX3NpemVfcHJlKExBUkdFX1NJWkUxKTsKKwlqZV9z ZGFsbG9jeF9ub2ZsYWdzKHB0ciwgTEFSR0VfU0laRTIpOworCXRlc3RfaW52YWxpZF9zaXplX3Bv c3QoKTsKK30KK1RFU1RfRU5ECisKK2ludAorbWFpbih2b2lkKSB7CisJcmV0dXJuIHRlc3QoCisJ ICAgIHRlc3RfaW52YWxpZF9zaXplX3NkYWxsb2N4LAorCSAgICB0ZXN0X2ludmFsaWRfc2l6ZV9z ZGFsbG9jeF9ub256ZXJvX2ZsYWcsCisJICAgIHRlc3RfaW52YWxpZF9zaXplX3NkYWxsb2N4X25v ZmxhZ3MpOworfQoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9j LTUuMy4wL3Rlc3QvdW5pdC9zaXplX2NoZWNrLnNoIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQv amVtYWxsb2MtNS4zLjAvdGVzdC91bml0L3NpemVfY2hlY2suc2gKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMC4uMzUyZDExMAotLS0gL2Rldi9udWxsCisrKyBiLzM4OS1kcy1iYXNl LTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9zaXplX2NoZWNrLnNoCkBAIC0w LDAgKzEsNSBAQAorIyEvYmluL3NoCisKK2lmIFsgIngke2VuYWJsZV9wcm9mfSIgPSAieDEiIF0g OyB0aGVuCisgIGV4cG9ydCBNQUxMT0NfQ09ORj0icHJvZjpmYWxzZSIKK2ZpCgpkaWZmIC0tZ2l0 IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L3NpemVf Y2xhc3Nlcy5jIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91 bml0L3NpemVfY2xhc3Nlcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3 MGViNTkKLS0tIC9kZXYvbnVsbAorKysgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxv Yy01LjMuMC90ZXN0L3VuaXQvc2l6ZV9jbGFzc2VzLmMKQEAgLTAsMCArMSwxODggQEAKKyNpbmNs dWRlICJ0ZXN0L2plbWFsbG9jX3Rlc3QuaCIKKworc3RhdGljIHNpemVfdAorZ2V0X21heF9zaXpl X2NsYXNzKHZvaWQpIHsKKwl1bnNpZ25lZCBubGV4dGVudHM7CisJc2l6ZV90IG1pYls0XTsKKwlz aXplX3Qgc3osIG1pYmxlbiwgbWF4X3NpemVfY2xhc3M7CisKKwlzeiA9IHNpemVvZih1bnNpZ25l ZCk7CisJZXhwZWN0X2RfZXEobWFsbGN0bCgiYXJlbmFzLm5sZXh0ZW50cyIsICh2b2lkICopJm5s ZXh0ZW50cywgJnN6LCBOVUxMLAorCSAgICAwKSwgMCwgIlVuZXhwZWN0ZWQgbWFsbGN0bCgpIGVy cm9yIik7CisKKwltaWJsZW4gPSBzaXplb2YobWliKSAvIHNpemVvZihzaXplX3QpOworCWV4cGVj dF9kX2VxKG1hbGxjdGxuYW1ldG9taWIoImFyZW5hcy5sZXh0ZW50LjAuc2l6ZSIsIG1pYiwgJm1p YmxlbiksIDAsCisJICAgICJVbmV4cGVjdGVkIG1hbGxjdGxuYW1ldG9taWIoKSBlcnJvciIpOwor CW1pYlsyXSA9IG5sZXh0ZW50cyAtIDE7CisKKwlzeiA9IHNpemVvZihzaXplX3QpOworCWV4cGVj dF9kX2VxKG1hbGxjdGxieW1pYihtaWIsIG1pYmxlbiwgKHZvaWQgKikmbWF4X3NpemVfY2xhc3Ms ICZzeiwKKwkgICAgTlVMTCwgMCksIDAsICJVbmV4cGVjdGVkIG1hbGxjdGxieW1pYigpIGVycm9y Iik7CisKKwlyZXR1cm4gbWF4X3NpemVfY2xhc3M7Cit9CisKK1RFU1RfQkVHSU4odGVzdF9zaXpl X2NsYXNzZXMpIHsKKwlzaXplX3Qgc2l6ZV9jbGFzcywgbWF4X3NpemVfY2xhc3M7CisJc3ppbmRf dCBpbmRleCwgbWF4X2luZGV4OworCisJbWF4X3NpemVfY2xhc3MgPSBnZXRfbWF4X3NpemVfY2xh c3MoKTsKKwltYXhfaW5kZXggPSBzel9zaXplMmluZGV4KG1heF9zaXplX2NsYXNzKTsKKworCWZv ciAoaW5kZXggPSAwLCBzaXplX2NsYXNzID0gc3pfaW5kZXgyc2l6ZShpbmRleCk7IGluZGV4IDwg bWF4X2luZGV4IHx8CisJICAgIHNpemVfY2xhc3MgPCBtYXhfc2l6ZV9jbGFzczsgaW5kZXgrKywg c2l6ZV9jbGFzcyA9CisJICAgIHN6X2luZGV4MnNpemUoaW5kZXgpKSB7CisJCWV4cGVjdF90cnVl KGluZGV4IDwgbWF4X2luZGV4LAorCQkgICAgIkxvb3AgY29uZGl0aW9uYWxzIHNob3VsZCBiZSBl cXVpdmFsZW50OyBpbmRleD0ldSwgIgorCQkgICAgInNpemVfY2xhc3M9JXp1ICglI3p4KSIsIGlu ZGV4LCBzaXplX2NsYXNzLCBzaXplX2NsYXNzKTsKKwkJZXhwZWN0X3RydWUoc2l6ZV9jbGFzcyA8 IG1heF9zaXplX2NsYXNzLAorCQkgICAgIkxvb3AgY29uZGl0aW9uYWxzIHNob3VsZCBiZSBlcXVp dmFsZW50OyBpbmRleD0ldSwgIgorCQkgICAgInNpemVfY2xhc3M9JXp1ICglI3p4KSIsIGluZGV4 LCBzaXplX2NsYXNzLCBzaXplX2NsYXNzKTsKKworCQlleHBlY3RfdV9lcShpbmRleCwgc3pfc2l6 ZTJpbmRleChzaXplX2NsYXNzKSwKKwkJICAgICJzel9zaXplMmluZGV4KCkgZG9lcyBub3QgcmV2 ZXJzZSBzel9pbmRleDJzaXplKCk6IGluZGV4PSV1IgorCQkgICAgIiAtLT4gc2l6ZV9jbGFzcz0l enUgLS0+IGluZGV4PSV1IC0tPiBzaXplX2NsYXNzPSV6dSIsCisJCSAgICBpbmRleCwgc2l6ZV9j bGFzcywgc3pfc2l6ZTJpbmRleChzaXplX2NsYXNzKSwKKwkJICAgIHN6X2luZGV4MnNpemUoc3pf c2l6ZTJpbmRleChzaXplX2NsYXNzKSkpOworCQlleHBlY3RfenVfZXEoc2l6ZV9jbGFzcywKKwkJ ICAgIHN6X2luZGV4MnNpemUoc3pfc2l6ZTJpbmRleChzaXplX2NsYXNzKSksCisJCSAgICAic3pf aW5kZXgyc2l6ZSgpIGRvZXMgbm90IHJldmVyc2Ugc3pfc2l6ZTJpbmRleCgpOiBpbmRleD0ldSIK KwkJICAgICIgLS0+IHNpemVfY2xhc3M9JXp1IC0tPiBpbmRleD0ldSAtLT4gc2l6ZV9jbGFzcz0l enUiLAorCQkgICAgaW5kZXgsIHNpemVfY2xhc3MsIHN6X3NpemUyaW5kZXgoc2l6ZV9jbGFzcyks CisJCSAgICBzel9pbmRleDJzaXplKHN6X3NpemUyaW5kZXgoc2l6ZV9jbGFzcykpKTsKKworCQll eHBlY3RfdV9lcShpbmRleCsxLCBzel9zaXplMmluZGV4KHNpemVfY2xhc3MrMSksCisJCSAgICAi TmV4dCBzaXplX2NsYXNzIGRvZXMgbm90IHJvdW5kIHVwIHByb3Blcmx5Iik7CisKKwkJZXhwZWN0 X3p1X2VxKHNpemVfY2xhc3MsIChpbmRleCA+IDApID8KKwkJICAgIHN6X3MydShzel9pbmRleDJz aXplKGluZGV4LTEpKzEpIDogc3pfczJ1KDEpLAorCQkgICAgInN6X3MydSgpIGRvZXMgbm90IHJv dW5kIHVwIHRvIHNpemUgY2xhc3MiKTsKKwkJZXhwZWN0X3p1X2VxKHNpemVfY2xhc3MsIHN6X3My dShzaXplX2NsYXNzLTEpLAorCQkgICAgInN6X3MydSgpIGRvZXMgbm90IHJvdW5kIHVwIHRvIHNp emUgY2xhc3MiKTsKKwkJZXhwZWN0X3p1X2VxKHNpemVfY2xhc3MsIHN6X3MydShzaXplX2NsYXNz KSwKKwkJICAgICJzel9zMnUoKSBkb2VzIG5vdCBjb21wdXRlIHNhbWUgc2l6ZSBjbGFzcyIpOwor CQlleHBlY3RfenVfZXEoc3pfczJ1KHNpemVfY2xhc3MrMSksIHN6X2luZGV4MnNpemUoaW5kZXgr MSksCisJCSAgICAic3pfczJ1KCkgZG9lcyBub3Qgcm91bmQgdXAgdG8gbmV4dCBzaXplIGNsYXNz Iik7CisJfQorCisJZXhwZWN0X3VfZXEoaW5kZXgsIHN6X3NpemUyaW5kZXgoc3pfaW5kZXgyc2l6 ZShpbmRleCkpLAorCSAgICAic3pfc2l6ZTJpbmRleCgpIGRvZXMgbm90IHJldmVyc2Ugc3pfaW5k ZXgyc2l6ZSgpIik7CisJZXhwZWN0X3p1X2VxKG1heF9zaXplX2NsYXNzLCBzel9pbmRleDJzaXpl KAorCSAgICBzel9zaXplMmluZGV4KG1heF9zaXplX2NsYXNzKSksCisJICAgICJzel9pbmRleDJz aXplKCkgZG9lcyBub3QgcmV2ZXJzZSBzel9zaXplMmluZGV4KCkiKTsKKworCWV4cGVjdF96dV9l cShzaXplX2NsYXNzLCBzel9zMnUoc3pfaW5kZXgyc2l6ZShpbmRleC0xKSsxKSwKKwkgICAgInN6 X3MydSgpIGRvZXMgbm90IHJvdW5kIHVwIHRvIHNpemUgY2xhc3MiKTsKKwlleHBlY3RfenVfZXEo c2l6ZV9jbGFzcywgc3pfczJ1KHNpemVfY2xhc3MtMSksCisJICAgICJzel9zMnUoKSBkb2VzIG5v dCByb3VuZCB1cCB0byBzaXplIGNsYXNzIik7CisJZXhwZWN0X3p1X2VxKHNpemVfY2xhc3MsIHN6 X3MydShzaXplX2NsYXNzKSwKKwkgICAgInN6X3MydSgpIGRvZXMgbm90IGNvbXB1dGUgc2FtZSBz aXplIGNsYXNzIik7Cit9CitURVNUX0VORAorCitURVNUX0JFR0lOKHRlc3RfcHNpemVfY2xhc3Nl cykgeworCXNpemVfdCBzaXplX2NsYXNzLCBtYXhfcHN6OworCXBzemluZF90IHBpbmQsIG1heF9w aW5kOworCisJbWF4X3BzeiA9IGdldF9tYXhfc2l6ZV9jbGFzcygpICsgUEFHRTsKKwltYXhfcGlu ZCA9IHN6X3BzejJpbmQobWF4X3Bzeik7CisKKwlmb3IgKHBpbmQgPSAwLCBzaXplX2NsYXNzID0g c3pfcGluZDJzeihwaW5kKTsKKwkgICAgcGluZCA8IG1heF9waW5kIHx8IHNpemVfY2xhc3MgPCBt YXhfcHN6OworCSAgICBwaW5kKyssIHNpemVfY2xhc3MgPSBzel9waW5kMnN6KHBpbmQpKSB7CisJ CWV4cGVjdF90cnVlKHBpbmQgPCBtYXhfcGluZCwKKwkJICAgICJMb29wIGNvbmRpdGlvbmFscyBz aG91bGQgYmUgZXF1aXZhbGVudDsgcGluZD0ldSwgIgorCQkgICAgInNpemVfY2xhc3M9JXp1ICgl I3p4KSIsIHBpbmQsIHNpemVfY2xhc3MsIHNpemVfY2xhc3MpOworCQlleHBlY3RfdHJ1ZShzaXpl X2NsYXNzIDwgbWF4X3BzeiwKKwkJICAgICJMb29wIGNvbmRpdGlvbmFscyBzaG91bGQgYmUgZXF1 aXZhbGVudDsgcGluZD0ldSwgIgorCQkgICAgInNpemVfY2xhc3M9JXp1ICglI3p4KSIsIHBpbmQs IHNpemVfY2xhc3MsIHNpemVfY2xhc3MpOworCisJCWV4cGVjdF91X2VxKHBpbmQsIHN6X3BzejJp bmQoc2l6ZV9jbGFzcyksCisJCSAgICAic3pfcHN6MmluZCgpIGRvZXMgbm90IHJldmVyc2Ugc3pf cGluZDJzeigpOiBwaW5kPSV1IC0tPiIKKwkJICAgICIgc2l6ZV9jbGFzcz0lenUgLS0+IHBpbmQ9 JXUgLS0+IHNpemVfY2xhc3M9JXp1IiwgcGluZCwKKwkJICAgIHNpemVfY2xhc3MsIHN6X3BzejJp bmQoc2l6ZV9jbGFzcyksCisJCSAgICBzel9waW5kMnN6KHN6X3BzejJpbmQoc2l6ZV9jbGFzcykp KTsKKwkJZXhwZWN0X3p1X2VxKHNpemVfY2xhc3MsIHN6X3BpbmQyc3ooc3pfcHN6MmluZChzaXpl X2NsYXNzKSksCisJCSAgICAic3pfcGluZDJzeigpIGRvZXMgbm90IHJldmVyc2Ugc3pfcHN6Mmlu ZCgpOiBwaW5kPSV1IC0tPiIKKwkJICAgICIgc2l6ZV9jbGFzcz0lenUgLS0+IHBpbmQ9JXUgLS0+ IHNpemVfY2xhc3M9JXp1IiwgcGluZCwKKwkJICAgIHNpemVfY2xhc3MsIHN6X3BzejJpbmQoc2l6 ZV9jbGFzcyksCisJCSAgICBzel9waW5kMnN6KHN6X3BzejJpbmQoc2l6ZV9jbGFzcykpKTsKKwor CQlpZiAoc2l6ZV9jbGFzcyA9PSBTQ19MQVJHRV9NQVhDTEFTUykgeworCQkJZXhwZWN0X3VfZXEo U0NfTlBTSVpFUywgc3pfcHN6MmluZChzaXplX2NsYXNzICsgMSksCisJCQkgICAgIk5leHQgc2l6 ZV9jbGFzcyBkb2VzIG5vdCByb3VuZCB1cCBwcm9wZXJseSIpOworCQl9IGVsc2UgeworCQkJZXhw ZWN0X3VfZXEocGluZCArIDEsIHN6X3BzejJpbmQoc2l6ZV9jbGFzcyArIDEpLAorCQkJICAgICJO ZXh0IHNpemVfY2xhc3MgZG9lcyBub3Qgcm91bmQgdXAgcHJvcGVybHkiKTsKKwkJfQorCisJCWV4 cGVjdF96dV9lcShzaXplX2NsYXNzLCAocGluZCA+IDApID8KKwkJICAgIHN6X3BzejJ1KHN6X3Bp bmQyc3oocGluZC0xKSsxKSA6IHN6X3BzejJ1KDEpLAorCQkgICAgInN6X3BzejJ1KCkgZG9lcyBu b3Qgcm91bmQgdXAgdG8gc2l6ZSBjbGFzcyIpOworCQlleHBlY3RfenVfZXEoc2l6ZV9jbGFzcywg c3pfcHN6MnUoc2l6ZV9jbGFzcy0xKSwKKwkJICAgICJzel9wc3oydSgpIGRvZXMgbm90IHJvdW5k IHVwIHRvIHNpemUgY2xhc3MiKTsKKwkJZXhwZWN0X3p1X2VxKHNpemVfY2xhc3MsIHN6X3BzejJ1 KHNpemVfY2xhc3MpLAorCQkgICAgInN6X3BzejJ1KCkgZG9lcyBub3QgY29tcHV0ZSBzYW1lIHNp emUgY2xhc3MiKTsKKwkJZXhwZWN0X3p1X2VxKHN6X3BzejJ1KHNpemVfY2xhc3MrMSksIHN6X3Bp bmQyc3oocGluZCsxKSwKKwkJICAgICJzel9wc3oydSgpIGRvZXMgbm90IHJvdW5kIHVwIHRvIG5l eHQgc2l6ZSBjbGFzcyIpOworCX0KKworCWV4cGVjdF91X2VxKHBpbmQsIHN6X3BzejJpbmQoc3pf cGluZDJzeihwaW5kKSksCisJICAgICJzel9wc3oyaW5kKCkgZG9lcyBub3QgcmV2ZXJzZSBzel9w aW5kMnN6KCkiKTsKKwlleHBlY3RfenVfZXEobWF4X3Bzeiwgc3pfcGluZDJzeihzel9wc3oyaW5k KG1heF9wc3opKSwKKwkgICAgInN6X3BpbmQyc3ooKSBkb2VzIG5vdCByZXZlcnNlIHN6X3BzejJp bmQoKSIpOworCisJZXhwZWN0X3p1X2VxKHNpemVfY2xhc3MsIHN6X3BzejJ1KHN6X3BpbmQyc3oo cGluZC0xKSsxKSwKKwkgICAgInN6X3BzejJ1KCkgZG9lcyBub3Qgcm91bmQgdXAgdG8gc2l6ZSBj bGFzcyIpOworCWV4cGVjdF96dV9lcShzaXplX2NsYXNzLCBzel9wc3oydShzaXplX2NsYXNzLTEp LAorCSAgICAic3pfcHN6MnUoKSBkb2VzIG5vdCByb3VuZCB1cCB0byBzaXplIGNsYXNzIik7CisJ ZXhwZWN0X3p1X2VxKHNpemVfY2xhc3MsIHN6X3BzejJ1KHNpemVfY2xhc3MpLAorCSAgICAic3pf cHN6MnUoKSBkb2VzIG5vdCBjb21wdXRlIHNhbWUgc2l6ZSBjbGFzcyIpOworfQorVEVTVF9FTkQK KworVEVTVF9CRUdJTih0ZXN0X292ZXJmbG93KSB7CisJc2l6ZV90IG1heF9zaXplX2NsYXNzLCBt YXhfcHN6OworCisJbWF4X3NpemVfY2xhc3MgPSBnZXRfbWF4X3NpemVfY2xhc3MoKTsKKwltYXhf cHN6ID0gbWF4X3NpemVfY2xhc3MgKyBQQUdFOworCisJZXhwZWN0X3VfZXEoc3pfc2l6ZTJpbmRl eChtYXhfc2l6ZV9jbGFzcysxKSwgU0NfTlNJWkVTLAorCSAgICAic3pfc2l6ZTJpbmRleCgpIHNo b3VsZCByZXR1cm4gTlNJWkVTIG9uIG92ZXJmbG93Iik7CisJZXhwZWN0X3VfZXEoc3pfc2l6ZTJp bmRleChaVShQVFJESUZGX01BWCkrMSksIFNDX05TSVpFUywKKwkgICAgInN6X3NpemUyaW5kZXgo KSBzaG91bGQgcmV0dXJuIE5TSVpFUyBvbiBvdmVyZmxvdyIpOworCWV4cGVjdF91X2VxKHN6X3Np emUyaW5kZXgoU0laRV9UX01BWCksIFNDX05TSVpFUywKKwkgICAgInN6X3NpemUyaW5kZXgoKSBz aG91bGQgcmV0dXJuIE5TSVpFUyBvbiBvdmVyZmxvdyIpOworCisJZXhwZWN0X3p1X2VxKHN6X3My dShtYXhfc2l6ZV9jbGFzcysxKSwgMCwKKwkgICAgInN6X3MydSgpIHNob3VsZCByZXR1cm4gMCBm b3IgdW5zdXBwb3J0ZWQgc2l6ZSIpOworCWV4cGVjdF96dV9lcShzel9zMnUoWlUoUFRSRElGRl9N QVgpKzEpLCAwLAorCSAgICAic3pfczJ1KCkgc2hvdWxkIHJldHVybiAwIGZvciB1bnN1cHBvcnRl ZCBzaXplIik7CisJZXhwZWN0X3p1X2VxKHN6X3MydShTSVpFX1RfTUFYKSwgMCwKKwkgICAgInN6 X3MydSgpIHNob3VsZCByZXR1cm4gMCBvbiBvdmVyZmxvdyIpOworCisJZXhwZWN0X3VfZXEoc3pf cHN6MmluZChtYXhfc2l6ZV9jbGFzcysxKSwgU0NfTlBTSVpFUywKKwkgICAgInN6X3BzejJpbmQo KSBzaG91bGQgcmV0dXJuIE5QU0laRVMgb24gb3ZlcmZsb3ciKTsKKwlleHBlY3RfdV9lcShzel9w c3oyaW5kKFpVKFBUUkRJRkZfTUFYKSsxKSwgU0NfTlBTSVpFUywKKwkgICAgInN6X3BzejJpbmQo KSBzaG91bGQgcmV0dXJuIE5QU0laRVMgb24gb3ZlcmZsb3ciKTsKKwlleHBlY3RfdV9lcShzel9w c3oyaW5kKFNJWkVfVF9NQVgpLCBTQ19OUFNJWkVTLAorCSAgICAic3pfcHN6MmluZCgpIHNob3Vs ZCByZXR1cm4gTlBTSVpFUyBvbiBvdmVyZmxvdyIpOworCisJZXhwZWN0X3p1X2VxKHN6X3BzejJ1 KG1heF9zaXplX2NsYXNzKzEpLCBtYXhfcHN6LAorCSAgICAic3pfcHN6MnUoKSBzaG91bGQgcmV0 dXJuIChMQVJHRV9NQVhDTEFTUyArIFBBR0UpIGZvciB1bnN1cHBvcnRlZCIKKwkgICAgIiBzaXpl Iik7CisJZXhwZWN0X3p1X2VxKHN6X3BzejJ1KFpVKFBUUkRJRkZfTUFYKSsxKSwgbWF4X3BzeiwK KwkgICAgInN6X3BzejJ1KCkgc2hvdWxkIHJldHVybiAoTEFSR0VfTUFYQ0xBU1MgKyBQQUdFKSBm b3IgdW5zdXBwb3J0ZWQgIgorCSAgICAic2l6ZSIpOworCWV4cGVjdF96dV9lcShzel9wc3oydShT SVpFX1RfTUFYKSwgbWF4X3BzeiwKKwkgICAgInN6X3BzejJ1KCkgc2hvdWxkIHJldHVybiAoTEFS R0VfTUFYQ0xBU1MgKyBQQUdFKSBvbiBvdmVyZmxvdyIpOworfQorVEVTVF9FTkQKKworaW50Citt YWluKHZvaWQpIHsKKwlyZXR1cm4gdGVzdCgKKwkgICAgdGVzdF9zaXplX2NsYXNzZXMsCisJICAg IHRlc3RfcHNpemVfY2xhc3NlcywKKwkgICAgdGVzdF9vdmVyZmxvdyk7Cit9CgpkaWZmIC0tZ2l0 IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L3NsYWIu YyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9zbGFi LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzBmYzVjNwotLS0gL2Rldi9u dWxsCisrKyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5p dC9zbGFiLmMKQEAgLTAsMCArMSwzOSBAQAorI2luY2x1ZGUgInRlc3QvamVtYWxsb2NfdGVzdC5o IgorCisjZGVmaW5lIElOVkFMSURfQVJFTkFfSU5EICgoMVUgPDwgTUFMTE9DWF9BUkVOQV9CSVRT KSAtIDEpCisKK1RFU1RfQkVHSU4odGVzdF9hcmVuYV9zbGFiX3JlZ2luZCkgeworCXN6aW5kX3Qg YmluaW5kOworCisJZm9yIChiaW5pbmQgPSAwOyBiaW5pbmQgPCBTQ19OQklOUzsgYmluaW5kKysp IHsKKwkJc2l6ZV90IHJlZ2luZDsKKwkJZWRhdGFfdCBzbGFiOworCQljb25zdCBiaW5faW5mb190 ICpiaW5faW5mbyA9ICZiaW5faW5mb3NbYmluaW5kXTsKKwkJZWRhdGFfaW5pdCgmc2xhYiwgSU5W QUxJRF9BUkVOQV9JTkQsCisJCSAgICBtYWxsb2N4KGJpbl9pbmZvLT5zbGFiX3NpemUsIE1BTExP Q1hfTEdfQUxJR04oTEdfUEFHRSkpLAorCQkgICAgYmluX2luZm8tPnNsYWJfc2l6ZSwgdHJ1ZSwK KwkJICAgIGJpbmluZCwgMCwgZXh0ZW50X3N0YXRlX2FjdGl2ZSwgZmFsc2UsIHRydWUsIEVYVEVO VF9QQUlfUEFDLAorCQkgICAgRVhURU5UX05PVF9IRUFEKTsKKwkJZXhwZWN0X3B0cl9ub3RfbnVs bChlZGF0YV9hZGRyX2dldCgmc2xhYiksCisJCSAgICAiVW5leHBlY3RlZCBtYWxsb2MoKSBmYWls dXJlIik7CisJCWFyZW5hX2RhbGxvY19iaW5fbG9ja2VkX2luZm9fdCBkYWxsb2NfaW5mbzsKKwkJ YXJlbmFfZGFsbG9jX2Jpbl9sb2NrZWRfYmVnaW4oJmRhbGxvY19pbmZvLCBiaW5pbmQpOworCQlm b3IgKHJlZ2luZCA9IDA7IHJlZ2luZCA8IGJpbl9pbmZvLT5ucmVnczsgcmVnaW5kKyspIHsKKwkJ CXZvaWQgKnJlZyA9ICh2b2lkICopKCh1aW50cHRyX3QpZWRhdGFfYWRkcl9nZXQoJnNsYWIpICsK KwkJCSAgICAoYmluX2luZm8tPnJlZ19zaXplICogcmVnaW5kKSk7CisJCQlleHBlY3RfenVfZXEo YXJlbmFfc2xhYl9yZWdpbmQoJmRhbGxvY19pbmZvLCBiaW5pbmQsCisJCQkgICAgJnNsYWIsIHJl ZyksCisJCQkgICAgcmVnaW5kLAorCQkJICAgICJJbmNvcnJlY3QgcmVnaW9uIGluZGV4IGNvbXB1 dGVkIGZvciBzaXplICV6dSIsCisJCQkgICAgYmluX2luZm8tPnJlZ19zaXplKTsKKwkJfQorCQlm cmVlKGVkYXRhX2FkZHJfZ2V0KCZzbGFiKSk7CisJfQorfQorVEVTVF9FTkQKKworaW50CittYWlu KHZvaWQpIHsKKwlyZXR1cm4gdGVzdCgKKwkgICAgdGVzdF9hcmVuYV9zbGFiX3JlZ2luZCk7Cit9 CgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVz dC91bml0L3Ntb290aHN0ZXAuYyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUu My4wL3Rlc3QvdW5pdC9zbW9vdGhzdGVwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMC4uNTg4YzlmNAotLS0gL2Rldi9udWxsCisrKyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxk L2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9zbW9vdGhzdGVwLmMKQEAgLTAsMCArMSwxMDIgQEAK KyNpbmNsdWRlICJ0ZXN0L2plbWFsbG9jX3Rlc3QuaCIKKworc3RhdGljIGNvbnN0IHVpbnQ2NF90 IHNtb290aHN0ZXBfdGFiW10gPSB7CisjZGVmaW5lIFNURVAoc3RlcCwgaCwgeCwgeSkJCQlcCisJ aCwKKwlTTU9PVEhTVEVQCisjdW5kZWYgU1RFUAorfTsKKworVEVTVF9CRUdJTih0ZXN0X3Ntb290 aHN0ZXBfaW50ZWdyYWwpIHsKKwl1aW50NjRfdCBzdW0sIG1pbiwgbWF4OworCXVuc2lnbmVkIGk7 CisKKwkvKgorCSAqIFRoZSBpbnRlZ3JhbCBvZiBzbW9vdGhzdGVwIGluIHRoZSBbMC4uMV0gcmFu Z2UgZXF1YWxzIDEvMi4gIFZlcmlmeQorCSAqIHRoYXQgdGhlIGZpeGVkIHBvaW50IHJlcHJlc2Vu dGF0aW9uJ3MgaW50ZWdyYWwgaXMgbm8gbW9yZSB0aGFuCisJICogcm91bmRpbmcgZXJyb3IgZGlz dGFudCBmcm9tIDEvMi4gIFJlZ2FyZGluZyByb3VuZGluZywgZWFjaCB0YWJsZQorCSAqIGVsZW1l bnQgaXMgcm91bmRlZCBkb3duIHRvIHRoZSBuZWFyZXN0IGZpeGVkIHBvaW50IHZhbHVlLCBzbyB0 aGUKKwkgKiBpbnRlZ3JhbCBtYXkgYmUgb2ZmIGJ5IGFzIG11Y2ggYXMgU01PT1RIU1RFUF9OU1RF UFMgdWxwcy4KKwkgKi8KKwlzdW0gPSAwOworCWZvciAoaSA9IDA7IGkgPCBTTU9PVEhTVEVQX05T VEVQUzsgaSsrKSB7CisJCXN1bSArPSBzbW9vdGhzdGVwX3RhYltpXTsKKwl9CisKKwltYXggPSAo S1FVKDEpIDw8IChTTU9PVEhTVEVQX0JGUC0xKSkgKiAoU01PT1RIU1RFUF9OU1RFUFMrMSk7CisJ bWluID0gbWF4IC0gU01PT1RIU1RFUF9OU1RFUFM7CisKKwlleHBlY3RfdTY0X2dlKHN1bSwgbWlu LAorCSAgICAiSW50ZWdyYWwgdG9vIHNtYWxsLCBldmVuIGFjY291bnRpbmcgZm9yIHRydW5jYXRp b24iKTsKKwlleHBlY3RfdTY0X2xlKHN1bSwgbWF4LCAiSW50ZWdyYWwgZXhjZWVkcyAxLzIiKTsK KwlpZiAoZmFsc2UpIHsKKwkJbWFsbG9jX3ByaW50ZigiJSJGTVR1NjQiIHVscHMgdW5kZXIgMS8y IChsaW1pdCAlZClcbiIsCisJCSAgICBtYXggLSBzdW0sIFNNT09USFNURVBfTlNURVBTKTsKKwl9 Cit9CitURVNUX0VORAorCitURVNUX0JFR0lOKHRlc3Rfc21vb3Roc3RlcF9tb25vdG9uaWMpIHsK Kwl1aW50NjRfdCBwcmV2X2g7CisJdW5zaWduZWQgaTsKKworCS8qCisJICogVGhlIHNtb290aHN0 ZXAgZnVuY3Rpb24gaXMgbW9ub3RvbmljIGluIFswLi4xXSwgaS5lLiBpdHMgc2xvcGUgaXMKKwkg KiBub24tbmVnYXRpdmUuICBJbiBwcmFjdGljZSB3ZSB3YW50IHRvIHBhcmFtZXRyaXplIHRhYmxl IGdlbmVyYXRpb24KKwkgKiBzdWNoIHRoYXQgcGllY2V3aXNlIHNsb3BlIGlzIGdyZWF0ZXIgdGhh biB6ZXJvLCBidXQgZG8gbm90IHJlcXVpcmUKKwkgKiB0aGF0IGhlcmUuCisJICovCisJcHJldl9o ID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgU01PT1RIU1RFUF9OU1RFUFM7IGkrKykgeworCQl1aW50 NjRfdCBoID0gc21vb3Roc3RlcF90YWJbaV07CisJCWV4cGVjdF91NjRfZ2UoaCwgcHJldl9oLCAi UGllY2V3aXNlIG5vbi1tb25vdG9uaWMsIGk9JXUiLCBpKTsKKwkJcHJldl9oID0gaDsKKwl9CisJ ZXhwZWN0X3U2NF9lcShzbW9vdGhzdGVwX3RhYltTTU9PVEhTVEVQX05TVEVQUy0xXSwKKwkgICAg KEtRVSgxKSA8PCBTTU9PVEhTVEVQX0JGUCksICJMYXN0IHN0ZXAgbXVzdCBlcXVhbCAxIik7Cit9 CitURVNUX0VORAorCitURVNUX0JFR0lOKHRlc3Rfc21vb3Roc3RlcF9zbG9wZSkgeworCXVpbnQ2 NF90IHByZXZfaCwgcHJldl9kZWx0YTsKKwl1bnNpZ25lZCBpOworCisJLyoKKwkgKiBUaGUgc21v b3Roc3RlcCBzbG9wZSBzdHJpY3RseSBpbmNyZWFzZXMgdW50aWwgeD0wLjUsIGFuZCB0aGVuCisJ ICogc3RyaWN0bHkgZGVjcmVhc2VzIHVudGlsIHg9MS4wLiAgVmVyaWZ5IHRoZSBzbGlnaHRseSB3 ZWFrZXIKKwkgKiByZXF1aXJlbWVudCBvZiBtb25vdG9uaWNpdHksIHNvIHRoYXQgaW5hZGVxdWF0 ZSB0YWJsZSBwcmVjaXNpb24gZG9lcworCSAqIG5vdCBjYXVzZSBmYWxzZSB0ZXN0IGZhaWx1cmVz LgorCSAqLworCXByZXZfaCA9IDA7CisJcHJldl9kZWx0YSA9IDA7CisJZm9yIChpID0gMDsgaSA8 IFNNT09USFNURVBfTlNURVBTIC8gMiArIFNNT09USFNURVBfTlNURVBTICUgMjsgaSsrKSB7CisJ CXVpbnQ2NF90IGggPSBzbW9vdGhzdGVwX3RhYltpXTsKKwkJdWludDY0X3QgZGVsdGEgPSBoIC0g cHJldl9oOworCQlleHBlY3RfdTY0X2dlKGRlbHRhLCBwcmV2X2RlbHRhLAorCQkgICAgIlNsb3Bl IG11c3QgbW9ub3RvbmljYWxseSBpbmNyZWFzZSBpbiAwLjAgPD0geCA8PSAwLjUsICIKKwkJICAg ICJpPSV1IiwgaSk7CisJCXByZXZfaCA9IGg7CisJCXByZXZfZGVsdGEgPSBkZWx0YTsKKwl9CisK KwlwcmV2X2ggPSBLUVUoMSkgPDwgU01PT1RIU1RFUF9CRlA7CisJcHJldl9kZWx0YSA9IDA7CisJ Zm9yIChpID0gU01PT1RIU1RFUF9OU1RFUFMtMTsgaSA+PSBTTU9PVEhTVEVQX05TVEVQUyAvIDI7 IGktLSkgeworCQl1aW50NjRfdCBoID0gc21vb3Roc3RlcF90YWJbaV07CisJCXVpbnQ2NF90IGRl bHRhID0gcHJldl9oIC0gaDsKKwkJZXhwZWN0X3U2NF9nZShkZWx0YSwgcHJldl9kZWx0YSwKKwkJ ICAgICJTbG9wZSBtdXN0IG1vbm90b25pY2FsbHkgZGVjcmVhc2UgaW4gMC41IDw9IHggPD0gMS4w LCAiCisJCSAgICAiaT0ldSIsIGkpOworCQlwcmV2X2ggPSBoOworCQlwcmV2X2RlbHRhID0gZGVs dGE7CisJfQorfQorVEVTVF9FTkQKKworaW50CittYWluKHZvaWQpIHsKKwlyZXR1cm4gdGVzdCgK KwkgICAgdGVzdF9zbW9vdGhzdGVwX2ludGVncmFsLAorCSAgICB0ZXN0X3Ntb290aHN0ZXBfbW9u b3RvbmljLAorCSAgICB0ZXN0X3Ntb290aHN0ZXBfc2xvcGUpOworfQoKZGlmZiAtLWdpdCBhLzM4 OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9zcGluLmMgYi8z ODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvc3Bpbi5jCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5NjVmNzQKLS0tIC9kZXYvbnVsbAor KysgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvc3Bp bi5jCkBAIC0wLDAgKzEsMTggQEAKKyNpbmNsdWRlICJ0ZXN0L2plbWFsbG9jX3Rlc3QuaCIKKwor I2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL3NwaW4uaCIKKworVEVTVF9CRUdJTih0ZXN0X3Nw aW4pIHsKKwlzcGluX3Qgc3Bpbm5lciA9IFNQSU5fSU5JVElBTElaRVI7CisKKwlmb3IgKHVuc2ln bmVkIGkgPSAwOyBpIDwgMTAwOyBpKyspIHsKKwkJc3Bpbl9hZGFwdGl2ZSgmc3Bpbm5lcik7CisJ fQorfQorVEVTVF9FTkQKKworaW50CittYWluKHZvaWQpIHsKKwlyZXR1cm4gdGVzdCgKKwkgICAg dGVzdF9zcGluKTsKK30KCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1h bGxvYy01LjMuMC90ZXN0L3VuaXQvc3RhdHMuYyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2pl bWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9zdGF0cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAuLmJiZGJkMTgKLS0tIC9kZXYvbnVsbAorKysgYi8zODktZHMtYmFzZS0zLjMuMC1i dWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvc3RhdHMuYwpAQCAtMCwwICsxLDQzMSBAQAor I2luY2x1ZGUgInRlc3QvamVtYWxsb2NfdGVzdC5oIgorCisjZGVmaW5lIFNUUklOR0lGWV9IRUxQ RVIoeCkgI3gKKyNkZWZpbmUgU1RSSU5HSUZZKHgpIFNUUklOR0lGWV9IRUxQRVIoeCkKKworVEVT VF9CRUdJTih0ZXN0X3N0YXRzX3N1bW1hcnkpIHsKKwlzaXplX3Qgc3osIGFsbG9jYXRlZCwgYWN0 aXZlLCByZXNpZGVudCwgbWFwcGVkOworCWludCBleHBlY3RlZCA9IGNvbmZpZ19zdGF0cyA/IDAg OiBFTk9FTlQ7CisKKwlzeiA9IHNpemVvZihzaXplX3QpOworCWV4cGVjdF9kX2VxKG1hbGxjdGwo InN0YXRzLmFsbG9jYXRlZCIsICh2b2lkICopJmFsbG9jYXRlZCwgJnN6LCBOVUxMLAorCSAgICAw KSwgZXhwZWN0ZWQsICJVbmV4cGVjdGVkIG1hbGxjdGwoKSByZXN1bHQiKTsKKwlleHBlY3RfZF9l cShtYWxsY3RsKCJzdGF0cy5hY3RpdmUiLCAodm9pZCAqKSZhY3RpdmUsICZzeiwgTlVMTCwgMCks CisJICAgIGV4cGVjdGVkLCAiVW5leHBlY3RlZCBtYWxsY3RsKCkgcmVzdWx0Iik7CisJZXhwZWN0 X2RfZXEobWFsbGN0bCgic3RhdHMucmVzaWRlbnQiLCAodm9pZCAqKSZyZXNpZGVudCwgJnN6LCBO VUxMLCAwKSwKKwkgICAgZXhwZWN0ZWQsICJVbmV4cGVjdGVkIG1hbGxjdGwoKSByZXN1bHQiKTsK KwlleHBlY3RfZF9lcShtYWxsY3RsKCJzdGF0cy5tYXBwZWQiLCAodm9pZCAqKSZtYXBwZWQsICZz eiwgTlVMTCwgMCksCisJICAgIGV4cGVjdGVkLCAiVW5leHBlY3RlZCBtYWxsY3RsKCkgcmVzdWx0 Iik7CisKKwlpZiAoY29uZmlnX3N0YXRzKSB7CisJCWV4cGVjdF96dV9sZShhbGxvY2F0ZWQsIGFj dGl2ZSwKKwkJICAgICJhbGxvY2F0ZWQgc2hvdWxkIGJlIG5vIGxhcmdlciB0aGFuIGFjdGl2ZSIp OworCQlleHBlY3RfenVfbHQoYWN0aXZlLCByZXNpZGVudCwKKwkJICAgICJhY3RpdmUgc2hvdWxk IGJlIGxlc3MgdGhhbiByZXNpZGVudCIpOworCQlleHBlY3RfenVfbHQoYWN0aXZlLCBtYXBwZWQs CisJCSAgICAiYWN0aXZlIHNob3VsZCBiZSBsZXNzIHRoYW4gbWFwcGVkIik7CisJfQorfQorVEVT VF9FTkQKKworVEVTVF9CRUdJTih0ZXN0X3N0YXRzX2xhcmdlKSB7CisJdm9pZCAqcDsKKwl1aW50 NjRfdCBlcG9jaDsKKwlzaXplX3QgYWxsb2NhdGVkOworCXVpbnQ2NF90IG5tYWxsb2MsIG5kYWxs b2MsIG5yZXF1ZXN0czsKKwlzaXplX3Qgc3o7CisJaW50IGV4cGVjdGVkID0gY29uZmlnX3N0YXRz ID8gMCA6IEVOT0VOVDsKKworCXAgPSBtYWxsb2N4KFNDX1NNQUxMX01BWENMQVNTICsgMSwgTUFM TE9DWF9BUkVOQSgwKSk7CisJZXhwZWN0X3B0cl9ub3RfbnVsbChwLCAiVW5leHBlY3RlZCBtYWxs b2N4KCkgZmFpbHVyZSIpOworCisJZXhwZWN0X2RfZXEobWFsbGN0bCgiZXBvY2giLCBOVUxMLCBO VUxMLCAodm9pZCAqKSZlcG9jaCwgc2l6ZW9mKGVwb2NoKSksCisJICAgIDAsICJVbmV4cGVjdGVk IG1hbGxjdGwoKSBmYWlsdXJlIik7CisKKwlzeiA9IHNpemVvZihzaXplX3QpOworCWV4cGVjdF9k X2VxKG1hbGxjdGwoInN0YXRzLmFyZW5hcy4wLmxhcmdlLmFsbG9jYXRlZCIsCisJICAgICh2b2lk ICopJmFsbG9jYXRlZCwgJnN6LCBOVUxMLCAwKSwgZXhwZWN0ZWQsCisJICAgICJVbmV4cGVjdGVk IG1hbGxjdGwoKSByZXN1bHQiKTsKKwlzeiA9IHNpemVvZih1aW50NjRfdCk7CisJZXhwZWN0X2Rf ZXEobWFsbGN0bCgic3RhdHMuYXJlbmFzLjAubGFyZ2Uubm1hbGxvYyIsICh2b2lkICopJm5tYWxs b2MsCisJICAgICZzeiwgTlVMTCwgMCksIGV4cGVjdGVkLCAiVW5leHBlY3RlZCBtYWxsY3RsKCkg cmVzdWx0Iik7CisJZXhwZWN0X2RfZXEobWFsbGN0bCgic3RhdHMuYXJlbmFzLjAubGFyZ2UubmRh bGxvYyIsICh2b2lkICopJm5kYWxsb2MsCisJICAgICZzeiwgTlVMTCwgMCksIGV4cGVjdGVkLCAi VW5leHBlY3RlZCBtYWxsY3RsKCkgcmVzdWx0Iik7CisJZXhwZWN0X2RfZXEobWFsbGN0bCgic3Rh dHMuYXJlbmFzLjAubGFyZ2UubnJlcXVlc3RzIiwKKwkgICAgKHZvaWQgKikmbnJlcXVlc3RzLCAm c3osIE5VTEwsIDApLCBleHBlY3RlZCwKKwkgICAgIlVuZXhwZWN0ZWQgbWFsbGN0bCgpIHJlc3Vs dCIpOworCisJaWYgKGNvbmZpZ19zdGF0cykgeworCQlleHBlY3RfenVfZ3QoYWxsb2NhdGVkLCAw LAorCQkgICAgImFsbG9jYXRlZCBzaG91bGQgYmUgZ3JlYXRlciB0aGFuIHplcm8iKTsKKwkJZXhw ZWN0X3U2NF9nZShubWFsbG9jLCBuZGFsbG9jLAorCQkgICAgIm5tYWxsb2Mgc2hvdWxkIGJlIGF0 IGxlYXN0IGFzIGxhcmdlIGFzIG5kYWxsb2MiKTsKKwkJZXhwZWN0X3U2NF9sZShubWFsbG9jLCBu cmVxdWVzdHMsCisJCSAgICAibm1hbGxvYyBzaG91bGQgbm8gbGFyZ2VyIHRoYW4gbnJlcXVlc3Rz Iik7CisJfQorCisJZGFsbG9jeChwLCAwKTsKK30KK1RFU1RfRU5ECisKK1RFU1RfQkVHSU4odGVz dF9zdGF0c19hcmVuYXNfc3VtbWFyeSkgeworCXZvaWQgKmxpdHRsZSwgKmxhcmdlOworCXVpbnQ2 NF90IGVwb2NoOworCXNpemVfdCBzejsKKwlpbnQgZXhwZWN0ZWQgPSBjb25maWdfc3RhdHMgPyAw IDogRU5PRU5UOworCXNpemVfdCBtYXBwZWQ7CisJdWludDY0X3QgZGlydHlfbnB1cmdlLCBkaXJ0 eV9ubWFkdmlzZSwgZGlydHlfcHVyZ2VkOworCXVpbnQ2NF90IG11enp5X25wdXJnZSwgbXV6enlf bm1hZHZpc2UsIG11enp5X3B1cmdlZDsKKworCWxpdHRsZSA9IG1hbGxvY3goU0NfU01BTExfTUFY Q0xBU1MsIE1BTExPQ1hfQVJFTkEoMCkpOworCWV4cGVjdF9wdHJfbm90X251bGwobGl0dGxlLCAi VW5leHBlY3RlZCBtYWxsb2N4KCkgZmFpbHVyZSIpOworCWxhcmdlID0gbWFsbG9jeCgoMVUgPDwg U0NfTEdfTEFSR0VfTUlOQ0xBU1MpLAorCSAgICBNQUxMT0NYX0FSRU5BKDApKTsKKwlleHBlY3Rf cHRyX25vdF9udWxsKGxhcmdlLCAiVW5leHBlY3RlZCBtYWxsb2N4KCkgZmFpbHVyZSIpOworCisJ ZGFsbG9jeChsaXR0bGUsIDApOworCWRhbGxvY3gobGFyZ2UsIDApOworCisJZXhwZWN0X2RfZXEo bWFsbGN0bCgidGhyZWFkLnRjYWNoZS5mbHVzaCIsIE5VTEwsIE5VTEwsIE5VTEwsIDApLAorCSAg ICBvcHRfdGNhY2hlID8gMCA6IEVGQVVMVCwgIlVuZXhwZWN0ZWQgbWFsbGN0bCgpIHJlc3VsdCIp OworCWV4cGVjdF9kX2VxKG1hbGxjdGwoImFyZW5hLjAucHVyZ2UiLCBOVUxMLCBOVUxMLCBOVUxM LCAwKSwgMCwKKwkgICAgIlVuZXhwZWN0ZWQgbWFsbGN0bCgpIGZhaWx1cmUiKTsKKworCWV4cGVj dF9kX2VxKG1hbGxjdGwoImVwb2NoIiwgTlVMTCwgTlVMTCwgKHZvaWQgKikmZXBvY2gsIHNpemVv ZihlcG9jaCkpLAorCSAgICAwLCAiVW5leHBlY3RlZCBtYWxsY3RsKCkgZmFpbHVyZSIpOworCisJ c3ogPSBzaXplb2Yoc2l6ZV90KTsKKwlleHBlY3RfZF9lcShtYWxsY3RsKCJzdGF0cy5hcmVuYXMu MC5tYXBwZWQiLCAodm9pZCAqKSZtYXBwZWQsICZzeiwgTlVMTCwKKwkgICAgMCksIGV4cGVjdGVk LCAiVW5leGVwZWN0ZWQgbWFsbGN0bCgpIHJlc3VsdCIpOworCisJc3ogPSBzaXplb2YodWludDY0 X3QpOworCWV4cGVjdF9kX2VxKG1hbGxjdGwoInN0YXRzLmFyZW5hcy4wLmRpcnR5X25wdXJnZSIs CisJICAgICh2b2lkICopJmRpcnR5X25wdXJnZSwgJnN6LCBOVUxMLCAwKSwgZXhwZWN0ZWQsCisJ ICAgICJVbmV4ZXBlY3RlZCBtYWxsY3RsKCkgcmVzdWx0Iik7CisJZXhwZWN0X2RfZXEobWFsbGN0 bCgic3RhdHMuYXJlbmFzLjAuZGlydHlfbm1hZHZpc2UiLAorCSAgICAodm9pZCAqKSZkaXJ0eV9u bWFkdmlzZSwgJnN6LCBOVUxMLCAwKSwgZXhwZWN0ZWQsCisJICAgICJVbmV4ZXBlY3RlZCBtYWxs Y3RsKCkgcmVzdWx0Iik7CisJZXhwZWN0X2RfZXEobWFsbGN0bCgic3RhdHMuYXJlbmFzLjAuZGly dHlfcHVyZ2VkIiwKKwkgICAgKHZvaWQgKikmZGlydHlfcHVyZ2VkLCAmc3osIE5VTEwsIDApLCBl eHBlY3RlZCwKKwkgICAgIlVuZXhlcGVjdGVkIG1hbGxjdGwoKSByZXN1bHQiKTsKKwlleHBlY3Rf ZF9lcShtYWxsY3RsKCJzdGF0cy5hcmVuYXMuMC5tdXp6eV9ucHVyZ2UiLAorCSAgICAodm9pZCAq KSZtdXp6eV9ucHVyZ2UsICZzeiwgTlVMTCwgMCksIGV4cGVjdGVkLAorCSAgICAiVW5leGVwZWN0 ZWQgbWFsbGN0bCgpIHJlc3VsdCIpOworCWV4cGVjdF9kX2VxKG1hbGxjdGwoInN0YXRzLmFyZW5h cy4wLm11enp5X25tYWR2aXNlIiwKKwkgICAgKHZvaWQgKikmbXV6enlfbm1hZHZpc2UsICZzeiwg TlVMTCwgMCksIGV4cGVjdGVkLAorCSAgICAiVW5leGVwZWN0ZWQgbWFsbGN0bCgpIHJlc3VsdCIp OworCWV4cGVjdF9kX2VxKG1hbGxjdGwoInN0YXRzLmFyZW5hcy4wLm11enp5X3B1cmdlZCIsCisJ ICAgICh2b2lkICopJm11enp5X3B1cmdlZCwgJnN6LCBOVUxMLCAwKSwgZXhwZWN0ZWQsCisJICAg ICJVbmV4ZXBlY3RlZCBtYWxsY3RsKCkgcmVzdWx0Iik7CisKKwlpZiAoY29uZmlnX3N0YXRzKSB7 CisJCWlmICghaXNfYmFja2dyb3VuZF90aHJlYWRfZW5hYmxlZCgpICYmICFvcHRfaHBhKSB7CisJ CQlleHBlY3RfdTY0X2d0KGRpcnR5X25wdXJnZSArIG11enp5X25wdXJnZSwgMCwKKwkJCSAgICAi QXQgbGVhc3Qgb25lIHB1cmdlIHNob3VsZCBoYXZlIG9jY3VycmVkIik7CisJCX0KKwkJZXhwZWN0 X3U2NF9sZShkaXJ0eV9ubWFkdmlzZSwgZGlydHlfcHVyZ2VkLAorCQkgICAgImRpcnR5X25tYWR2 aXNlIHNob3VsZCBiZSBubyBncmVhdGVyIHRoYW4gZGlydHlfcHVyZ2VkIik7CisJCWV4cGVjdF91 NjRfbGUobXV6enlfbm1hZHZpc2UsIG11enp5X3B1cmdlZCwKKwkJICAgICJtdXp6eV9ubWFkdmlz ZSBzaG91bGQgYmUgbm8gZ3JlYXRlciB0aGFuIG11enp5X3B1cmdlZCIpOworCX0KK30KK1RFU1Rf RU5ECisKK3ZvaWQgKgordGhkX3N0YXJ0KHZvaWQgKmFyZykgeworCXJldHVybiBOVUxMOworfQor CitzdGF0aWMgdm9pZAorbm9fbGF6eV9sb2NrKHZvaWQpIHsKKwl0aGRfdCB0aGQ7CisKKwl0aGRf Y3JlYXRlKCZ0aGQsIHRoZF9zdGFydCwgTlVMTCk7CisJdGhkX2pvaW4odGhkLCBOVUxMKTsKK30K KworVEVTVF9CRUdJTih0ZXN0X3N0YXRzX2FyZW5hc19zbWFsbCkgeworCXZvaWQgKnA7CisJc2l6 ZV90IHN6LCBhbGxvY2F0ZWQ7CisJdWludDY0X3QgZXBvY2gsIG5tYWxsb2MsIG5kYWxsb2MsIG5y ZXF1ZXN0czsKKwlpbnQgZXhwZWN0ZWQgPSBjb25maWdfc3RhdHMgPyAwIDogRU5PRU5UOworCisJ bm9fbGF6eV9sb2NrKCk7IC8qIExhenkgbG9ja2luZyB3b3VsZCBkb2RnZSB0Y2FjaGUgdGVzdGlu Zy4gKi8KKworCXAgPSBtYWxsb2N4KFNDX1NNQUxMX01BWENMQVNTLCBNQUxMT0NYX0FSRU5BKDAp KTsKKwlleHBlY3RfcHRyX25vdF9udWxsKHAsICJVbmV4cGVjdGVkIG1hbGxvY3goKSBmYWlsdXJl Iik7CisKKwlleHBlY3RfZF9lcShtYWxsY3RsKCJ0aHJlYWQudGNhY2hlLmZsdXNoIiwgTlVMTCwg TlVMTCwgTlVMTCwgMCksCisJICAgIG9wdF90Y2FjaGUgPyAwIDogRUZBVUxULCAiVW5leHBlY3Rl ZCBtYWxsY3RsKCkgcmVzdWx0Iik7CisKKwlleHBlY3RfZF9lcShtYWxsY3RsKCJlcG9jaCIsIE5V TEwsIE5VTEwsICh2b2lkICopJmVwb2NoLCBzaXplb2YoZXBvY2gpKSwKKwkgICAgMCwgIlVuZXhw ZWN0ZWQgbWFsbGN0bCgpIGZhaWx1cmUiKTsKKworCXN6ID0gc2l6ZW9mKHNpemVfdCk7CisJZXhw ZWN0X2RfZXEobWFsbGN0bCgic3RhdHMuYXJlbmFzLjAuc21hbGwuYWxsb2NhdGVkIiwKKwkgICAg KHZvaWQgKikmYWxsb2NhdGVkLCAmc3osIE5VTEwsIDApLCBleHBlY3RlZCwKKwkgICAgIlVuZXhw ZWN0ZWQgbWFsbGN0bCgpIHJlc3VsdCIpOworCXN6ID0gc2l6ZW9mKHVpbnQ2NF90KTsKKwlleHBl Y3RfZF9lcShtYWxsY3RsKCJzdGF0cy5hcmVuYXMuMC5zbWFsbC5ubWFsbG9jIiwgKHZvaWQgKikm bm1hbGxvYywKKwkgICAgJnN6LCBOVUxMLCAwKSwgZXhwZWN0ZWQsICJVbmV4cGVjdGVkIG1hbGxj dGwoKSByZXN1bHQiKTsKKwlleHBlY3RfZF9lcShtYWxsY3RsKCJzdGF0cy5hcmVuYXMuMC5zbWFs bC5uZGFsbG9jIiwgKHZvaWQgKikmbmRhbGxvYywKKwkgICAgJnN6LCBOVUxMLCAwKSwgZXhwZWN0 ZWQsICJVbmV4cGVjdGVkIG1hbGxjdGwoKSByZXN1bHQiKTsKKwlleHBlY3RfZF9lcShtYWxsY3Rs KCJzdGF0cy5hcmVuYXMuMC5zbWFsbC5ucmVxdWVzdHMiLAorCSAgICAodm9pZCAqKSZucmVxdWVz dHMsICZzeiwgTlVMTCwgMCksIGV4cGVjdGVkLAorCSAgICAiVW5leHBlY3RlZCBtYWxsY3RsKCkg cmVzdWx0Iik7CisKKwlpZiAoY29uZmlnX3N0YXRzKSB7CisJCWV4cGVjdF96dV9ndChhbGxvY2F0 ZWQsIDAsCisJCSAgICAiYWxsb2NhdGVkIHNob3VsZCBiZSBncmVhdGVyIHRoYW4gemVybyIpOwor CQlleHBlY3RfdTY0X2d0KG5tYWxsb2MsIDAsCisJCSAgICAibm1hbGxvYyBzaG91bGQgYmUgbm8g Z3JlYXRlciB0aGFuIHplcm8iKTsKKwkJZXhwZWN0X3U2NF9nZShubWFsbG9jLCBuZGFsbG9jLAor CQkgICAgIm5tYWxsb2Mgc2hvdWxkIGJlIGF0IGxlYXN0IGFzIGxhcmdlIGFzIG5kYWxsb2MiKTsK KwkJZXhwZWN0X3U2NF9ndChucmVxdWVzdHMsIDAsCisJCSAgICAibnJlcXVlc3RzIHNob3VsZCBi ZSBncmVhdGVyIHRoYW4gemVybyIpOworCX0KKworCWRhbGxvY3gocCwgMCk7Cit9CitURVNUX0VO RAorCitURVNUX0JFR0lOKHRlc3Rfc3RhdHNfYXJlbmFzX2xhcmdlKSB7CisJdm9pZCAqcDsKKwlz aXplX3Qgc3osIGFsbG9jYXRlZDsKKwl1aW50NjRfdCBlcG9jaCwgbm1hbGxvYywgbmRhbGxvYzsK KwlpbnQgZXhwZWN0ZWQgPSBjb25maWdfc3RhdHMgPyAwIDogRU5PRU5UOworCisJcCA9IG1hbGxv Y3goKDFVIDw8IFNDX0xHX0xBUkdFX01JTkNMQVNTKSwgTUFMTE9DWF9BUkVOQSgwKSk7CisJZXhw ZWN0X3B0cl9ub3RfbnVsbChwLCAiVW5leHBlY3RlZCBtYWxsb2N4KCkgZmFpbHVyZSIpOworCisJ ZXhwZWN0X2RfZXEobWFsbGN0bCgiZXBvY2giLCBOVUxMLCBOVUxMLCAodm9pZCAqKSZlcG9jaCwg c2l6ZW9mKGVwb2NoKSksCisJICAgIDAsICJVbmV4cGVjdGVkIG1hbGxjdGwoKSBmYWlsdXJlIik7 CisKKwlzeiA9IHNpemVvZihzaXplX3QpOworCWV4cGVjdF9kX2VxKG1hbGxjdGwoInN0YXRzLmFy ZW5hcy4wLmxhcmdlLmFsbG9jYXRlZCIsCisJICAgICh2b2lkICopJmFsbG9jYXRlZCwgJnN6LCBO VUxMLCAwKSwgZXhwZWN0ZWQsCisJICAgICJVbmV4cGVjdGVkIG1hbGxjdGwoKSByZXN1bHQiKTsK KwlzeiA9IHNpemVvZih1aW50NjRfdCk7CisJZXhwZWN0X2RfZXEobWFsbGN0bCgic3RhdHMuYXJl bmFzLjAubGFyZ2Uubm1hbGxvYyIsICh2b2lkICopJm5tYWxsb2MsCisJICAgICZzeiwgTlVMTCwg MCksIGV4cGVjdGVkLCAiVW5leHBlY3RlZCBtYWxsY3RsKCkgcmVzdWx0Iik7CisJZXhwZWN0X2Rf ZXEobWFsbGN0bCgic3RhdHMuYXJlbmFzLjAubGFyZ2UubmRhbGxvYyIsICh2b2lkICopJm5kYWxs b2MsCisJICAgICZzeiwgTlVMTCwgMCksIGV4cGVjdGVkLCAiVW5leHBlY3RlZCBtYWxsY3RsKCkg cmVzdWx0Iik7CisKKwlpZiAoY29uZmlnX3N0YXRzKSB7CisJCWV4cGVjdF96dV9ndChhbGxvY2F0 ZWQsIDAsCisJCSAgICAiYWxsb2NhdGVkIHNob3VsZCBiZSBncmVhdGVyIHRoYW4gemVybyIpOwor CQlleHBlY3RfdTY0X2d0KG5tYWxsb2MsIDAsCisJCSAgICAibm1hbGxvYyBzaG91bGQgYmUgZ3Jl YXRlciB0aGFuIHplcm8iKTsKKwkJZXhwZWN0X3U2NF9nZShubWFsbG9jLCBuZGFsbG9jLAorCQkg ICAgIm5tYWxsb2Mgc2hvdWxkIGJlIGF0IGxlYXN0IGFzIGxhcmdlIGFzIG5kYWxsb2MiKTsKKwl9 CisKKwlkYWxsb2N4KHAsIDApOworfQorVEVTVF9FTkQKKworc3RhdGljIHZvaWQKK2dlbl9tYWxs Y3RsX3N0cihjaGFyICpjbWQsIGNoYXIgKm5hbWUsIHVuc2lnbmVkIGFyZW5hX2luZCkgeworCXNw cmludGYoY21kLCAic3RhdHMuYXJlbmFzLiV1LmJpbnMuMC4lcyIsIGFyZW5hX2luZCwgbmFtZSk7 Cit9CisKK1RFU1RfQkVHSU4odGVzdF9zdGF0c19hcmVuYXNfYmlucykgeworCXZvaWQgKnA7CisJ c2l6ZV90IHN6LCBjdXJzbGFicywgY3VycmVncywgbm9uZnVsbF9zbGFiczsKKwl1aW50NjRfdCBl cG9jaCwgbm1hbGxvYywgbmRhbGxvYywgbnJlcXVlc3RzLCBuZmlsbHMsIG5mbHVzaGVzOworCXVp bnQ2NF90IG5zbGFicywgbnJlc2xhYnM7CisJaW50IGV4cGVjdGVkID0gY29uZmlnX3N0YXRzID8g MCA6IEVOT0VOVDsKKworCS8qIE1ha2Ugc3VyZSBhbGxvY2F0aW9uIGJlbG93IGlzbid0IHNhdGlz ZmllZCBieSB0Y2FjaGUuICovCisJZXhwZWN0X2RfZXEobWFsbGN0bCgidGhyZWFkLnRjYWNoZS5m bHVzaCIsIE5VTEwsIE5VTEwsIE5VTEwsIDApLAorCSAgICBvcHRfdGNhY2hlID8gMCA6IEVGQVVM VCwgIlVuZXhwZWN0ZWQgbWFsbGN0bCgpIHJlc3VsdCIpOworCisJdW5zaWduZWQgYXJlbmFfaW5k LCBvbGRfYXJlbmFfaW5kOworCXN6ID0gc2l6ZW9mKHVuc2lnbmVkKTsKKwlleHBlY3RfZF9lcSht YWxsY3RsKCJhcmVuYXMuY3JlYXRlIiwgKHZvaWQgKikmYXJlbmFfaW5kLCAmc3osIE5VTEwsIDAp LAorCSAgICAwLCAiQXJlbmEgY3JlYXRpb24gZmFpbHVyZSIpOworCXN6ID0gc2l6ZW9mKGFyZW5h X2luZCk7CisJZXhwZWN0X2RfZXEobWFsbGN0bCgidGhyZWFkLmFyZW5hIiwgKHZvaWQgKikmb2xk X2FyZW5hX2luZCwgJnN6LAorCSAgICAodm9pZCAqKSZhcmVuYV9pbmQsIHNpemVvZihhcmVuYV9p bmQpKSwgMCwKKwkgICAgIlVuZXhwZWN0ZWQgbWFsbGN0bCgpIGZhaWx1cmUiKTsKKworCXAgPSBt YWxsb2MoYmluX2luZm9zWzBdLnJlZ19zaXplKTsKKwlleHBlY3RfcHRyX25vdF9udWxsKHAsICJV bmV4cGVjdGVkIG1hbGxvYygpIGZhaWx1cmUiKTsKKworCWV4cGVjdF9kX2VxKG1hbGxjdGwoInRo cmVhZC50Y2FjaGUuZmx1c2giLCBOVUxMLCBOVUxMLCBOVUxMLCAwKSwKKwkgICAgb3B0X3RjYWNo ZSA/IDAgOiBFRkFVTFQsICJVbmV4cGVjdGVkIG1hbGxjdGwoKSByZXN1bHQiKTsKKworCWV4cGVj dF9kX2VxKG1hbGxjdGwoImVwb2NoIiwgTlVMTCwgTlVMTCwgKHZvaWQgKikmZXBvY2gsIHNpemVv ZihlcG9jaCkpLAorCSAgICAwLCAiVW5leHBlY3RlZCBtYWxsY3RsKCkgZmFpbHVyZSIpOworCisJ Y2hhciBjbWRbMTI4XTsKKwlzeiA9IHNpemVvZih1aW50NjRfdCk7CisJZ2VuX21hbGxjdGxfc3Ry KGNtZCwgIm5tYWxsb2MiLCBhcmVuYV9pbmQpOworCWV4cGVjdF9kX2VxKG1hbGxjdGwoY21kLCAo dm9pZCAqKSZubWFsbG9jLCAmc3osIE5VTEwsIDApLCBleHBlY3RlZCwKKwkgICAgIlVuZXhwZWN0 ZWQgbWFsbGN0bCgpIHJlc3VsdCIpOworCWdlbl9tYWxsY3RsX3N0cihjbWQsICJuZGFsbG9jIiwg YXJlbmFfaW5kKTsKKwlleHBlY3RfZF9lcShtYWxsY3RsKGNtZCwgKHZvaWQgKikmbmRhbGxvYywg JnN6LCBOVUxMLCAwKSwgZXhwZWN0ZWQsCisJICAgICJVbmV4cGVjdGVkIG1hbGxjdGwoKSByZXN1 bHQiKTsKKwlnZW5fbWFsbGN0bF9zdHIoY21kLCAibnJlcXVlc3RzIiwgYXJlbmFfaW5kKTsKKwll eHBlY3RfZF9lcShtYWxsY3RsKGNtZCwgKHZvaWQgKikmbnJlcXVlc3RzLCAmc3osIE5VTEwsIDAp LCBleHBlY3RlZCwKKwkgICAgIlVuZXhwZWN0ZWQgbWFsbGN0bCgpIHJlc3VsdCIpOworCXN6ID0g c2l6ZW9mKHNpemVfdCk7CisJZ2VuX21hbGxjdGxfc3RyKGNtZCwgImN1cnJlZ3MiLCBhcmVuYV9p bmQpOworCWV4cGVjdF9kX2VxKG1hbGxjdGwoY21kLCAodm9pZCAqKSZjdXJyZWdzLCAmc3osIE5V TEwsIDApLCBleHBlY3RlZCwKKwkgICAgIlVuZXhwZWN0ZWQgbWFsbGN0bCgpIHJlc3VsdCIpOwor CisJc3ogPSBzaXplb2YodWludDY0X3QpOworCWdlbl9tYWxsY3RsX3N0cihjbWQsICJuZmlsbHMi LCBhcmVuYV9pbmQpOworCWV4cGVjdF9kX2VxKG1hbGxjdGwoY21kLCAodm9pZCAqKSZuZmlsbHMs ICZzeiwgTlVMTCwgMCksIGV4cGVjdGVkLAorCSAgICAiVW5leHBlY3RlZCBtYWxsY3RsKCkgcmVz dWx0Iik7CisJZ2VuX21hbGxjdGxfc3RyKGNtZCwgIm5mbHVzaGVzIiwgYXJlbmFfaW5kKTsKKwll eHBlY3RfZF9lcShtYWxsY3RsKGNtZCwgKHZvaWQgKikmbmZsdXNoZXMsICZzeiwgTlVMTCwgMCks IGV4cGVjdGVkLAorCSAgICAiVW5leHBlY3RlZCBtYWxsY3RsKCkgcmVzdWx0Iik7CisKKwlnZW5f bWFsbGN0bF9zdHIoY21kLCAibnNsYWJzIiwgYXJlbmFfaW5kKTsKKwlleHBlY3RfZF9lcShtYWxs Y3RsKGNtZCwgKHZvaWQgKikmbnNsYWJzLCAmc3osIE5VTEwsIDApLCBleHBlY3RlZCwKKwkgICAg IlVuZXhwZWN0ZWQgbWFsbGN0bCgpIHJlc3VsdCIpOworCWdlbl9tYWxsY3RsX3N0cihjbWQsICJu cmVzbGFicyIsIGFyZW5hX2luZCk7CisJZXhwZWN0X2RfZXEobWFsbGN0bChjbWQsICh2b2lkICop Jm5yZXNsYWJzLCAmc3osIE5VTEwsIDApLCBleHBlY3RlZCwKKwkgICAgIlVuZXhwZWN0ZWQgbWFs bGN0bCgpIHJlc3VsdCIpOworCXN6ID0gc2l6ZW9mKHNpemVfdCk7CisJZ2VuX21hbGxjdGxfc3Ry KGNtZCwgImN1cnNsYWJzIiwgYXJlbmFfaW5kKTsKKwlleHBlY3RfZF9lcShtYWxsY3RsKGNtZCwg KHZvaWQgKikmY3Vyc2xhYnMsICZzeiwgTlVMTCwgMCksIGV4cGVjdGVkLAorCSAgICAiVW5leHBl Y3RlZCBtYWxsY3RsKCkgcmVzdWx0Iik7CisJZ2VuX21hbGxjdGxfc3RyKGNtZCwgIm5vbmZ1bGxf c2xhYnMiLCBhcmVuYV9pbmQpOworCWV4cGVjdF9kX2VxKG1hbGxjdGwoY21kLCAodm9pZCAqKSZu b25mdWxsX3NsYWJzLCAmc3osIE5VTEwsIDApLAorCSAgICBleHBlY3RlZCwgIlVuZXhwZWN0ZWQg bWFsbGN0bCgpIHJlc3VsdCIpOworCisJaWYgKGNvbmZpZ19zdGF0cykgeworCQlleHBlY3RfdTY0 X2d0KG5tYWxsb2MsIDAsCisJCSAgICAibm1hbGxvYyBzaG91bGQgYmUgZ3JlYXRlciB0aGFuIHpl cm8iKTsKKwkJZXhwZWN0X3U2NF9nZShubWFsbG9jLCBuZGFsbG9jLAorCQkgICAgIm5tYWxsb2Mg c2hvdWxkIGJlIGF0IGxlYXN0IGFzIGxhcmdlIGFzIG5kYWxsb2MiKTsKKwkJZXhwZWN0X3U2NF9n dChucmVxdWVzdHMsIDAsCisJCSAgICAibnJlcXVlc3RzIHNob3VsZCBiZSBncmVhdGVyIHRoYW4g emVybyIpOworCQlleHBlY3RfenVfZ3QoY3VycmVncywgMCwKKwkJICAgICJhbGxvY2F0ZWQgc2hv dWxkIGJlIGdyZWF0ZXIgdGhhbiB6ZXJvIik7CisJCWlmIChvcHRfdGNhY2hlKSB7CisJCQlleHBl Y3RfdTY0X2d0KG5maWxscywgMCwKKwkJCSAgICAiQXQgbGVhc3Qgb25lIGZpbGwgc2hvdWxkIGhh dmUgb2NjdXJyZWQiKTsKKwkJCWV4cGVjdF91NjRfZ3QobmZsdXNoZXMsIDAsCisJCQkgICAgIkF0 IGxlYXN0IG9uZSBmbHVzaCBzaG91bGQgaGF2ZSBvY2N1cnJlZCIpOworCQl9CisJCWV4cGVjdF91 NjRfZ3QobnNsYWJzLCAwLAorCQkgICAgIkF0IGxlYXN0IG9uZSBzbGFiIHNob3VsZCBoYXZlIGJl ZW4gYWxsb2NhdGVkIik7CisJCWV4cGVjdF96dV9ndChjdXJzbGFicywgMCwKKwkJICAgICJBdCBs ZWFzdCBvbmUgc2xhYiBzaG91bGQgYmUgY3VycmVudGx5IGFsbG9jYXRlZCIpOworCQlleHBlY3Rf enVfZXEobm9uZnVsbF9zbGFicywgMCwKKwkJICAgICJzbGFic19ub25mdWxsIHNob3VsZCBiZSBl bXB0eSIpOworCX0KKworCWRhbGxvY3gocCwgMCk7Cit9CitURVNUX0VORAorCitURVNUX0JFR0lO KHRlc3Rfc3RhdHNfYXJlbmFzX2xleHRlbnRzKSB7CisJdm9pZCAqcDsKKwl1aW50NjRfdCBlcG9j aCwgbm1hbGxvYywgbmRhbGxvYzsKKwlzaXplX3QgY3VybGV4dGVudHMsIHN6LCBoc2l6ZTsKKwlp bnQgZXhwZWN0ZWQgPSBjb25maWdfc3RhdHMgPyAwIDogRU5PRU5UOworCisJc3ogPSBzaXplb2Yo c2l6ZV90KTsKKwlleHBlY3RfZF9lcShtYWxsY3RsKCJhcmVuYXMubGV4dGVudC4wLnNpemUiLCAo dm9pZCAqKSZoc2l6ZSwgJnN6LCBOVUxMLAorCSAgICAwKSwgMCwgIlVuZXhwZWN0ZWQgbWFsbGN0 bCgpIGZhaWx1cmUiKTsKKworCXAgPSBtYWxsb2N4KGhzaXplLCBNQUxMT0NYX0FSRU5BKDApKTsK KwlleHBlY3RfcHRyX25vdF9udWxsKHAsICJVbmV4cGVjdGVkIG1hbGxvY3goKSBmYWlsdXJlIik7 CisKKwlleHBlY3RfZF9lcShtYWxsY3RsKCJlcG9jaCIsIE5VTEwsIE5VTEwsICh2b2lkICopJmVw b2NoLCBzaXplb2YoZXBvY2gpKSwKKwkgICAgMCwgIlVuZXhwZWN0ZWQgbWFsbGN0bCgpIGZhaWx1 cmUiKTsKKworCXN6ID0gc2l6ZW9mKHVpbnQ2NF90KTsKKwlleHBlY3RfZF9lcShtYWxsY3RsKCJz dGF0cy5hcmVuYXMuMC5sZXh0ZW50cy4wLm5tYWxsb2MiLAorCSAgICAodm9pZCAqKSZubWFsbG9j LCAmc3osIE5VTEwsIDApLCBleHBlY3RlZCwKKwkgICAgIlVuZXhwZWN0ZWQgbWFsbGN0bCgpIHJl c3VsdCIpOworCWV4cGVjdF9kX2VxKG1hbGxjdGwoInN0YXRzLmFyZW5hcy4wLmxleHRlbnRzLjAu bmRhbGxvYyIsCisJICAgICh2b2lkICopJm5kYWxsb2MsICZzeiwgTlVMTCwgMCksIGV4cGVjdGVk LAorCSAgICAiVW5leHBlY3RlZCBtYWxsY3RsKCkgcmVzdWx0Iik7CisJc3ogPSBzaXplb2Yoc2l6 ZV90KTsKKwlleHBlY3RfZF9lcShtYWxsY3RsKCJzdGF0cy5hcmVuYXMuMC5sZXh0ZW50cy4wLmN1 cmxleHRlbnRzIiwKKwkgICAgKHZvaWQgKikmY3VybGV4dGVudHMsICZzeiwgTlVMTCwgMCksIGV4 cGVjdGVkLAorCSAgICAiVW5leHBlY3RlZCBtYWxsY3RsKCkgcmVzdWx0Iik7CisKKwlpZiAoY29u ZmlnX3N0YXRzKSB7CisJCWV4cGVjdF91NjRfZ3Qobm1hbGxvYywgMCwKKwkJICAgICJubWFsbG9j IHNob3VsZCBiZSBncmVhdGVyIHRoYW4gemVybyIpOworCQlleHBlY3RfdTY0X2dlKG5tYWxsb2Ms IG5kYWxsb2MsCisJCSAgICAibm1hbGxvYyBzaG91bGQgYmUgYXQgbGVhc3QgYXMgbGFyZ2UgYXMg bmRhbGxvYyIpOworCQlleHBlY3RfdTY0X2d0KGN1cmxleHRlbnRzLCAwLAorCQkgICAgIkF0IGxl YXN0IG9uZSBleHRlbnQgc2hvdWxkIGJlIGN1cnJlbnRseSBhbGxvY2F0ZWQiKTsKKwl9CisKKwlk YWxsb2N4KHAsIDApOworfQorVEVTVF9FTkQKKworc3RhdGljIHZvaWQKK3Rlc3RfdGNhY2hlX2J5 dGVzX2Zvcl91c2l6ZShzaXplX3QgdXNpemUpIHsKKwl1aW50NjRfdCBlcG9jaDsKKwlzaXplX3Qg dGNhY2hlX2J5dGVzLCB0Y2FjaGVfc3Rhc2hlZF9ieXRlczsKKwlzaXplX3Qgc3ogPSBzaXplb2Yo dGNhY2hlX2J5dGVzKTsKKworCXZvaWQgKnB0ciA9IG1hbGxvY3godXNpemUsIDApOworCisJZXhw ZWN0X2RfZXEobWFsbGN0bCgiZXBvY2giLCBOVUxMLCBOVUxMLCAodm9pZCAqKSZlcG9jaCwgc2l6 ZW9mKGVwb2NoKSksCisJICAgIDAsICJVbmV4cGVjdGVkIG1hbGxjdGwoKSBmYWlsdXJlIik7CisJ YXNzZXJ0X2RfZXEobWFsbGN0bCgKKwkgICAgInN0YXRzLmFyZW5hcy4iIFNUUklOR0lGWShNQUxM Q1RMX0FSRU5BU19BTEwpICIudGNhY2hlX2J5dGVzIiwKKwkgICAgJnRjYWNoZV9ieXRlcywgJnN6 LCBOVUxMLCAwKSwgMCwgIlVuZXhwZWN0ZWQgbWFsbGN0bCBmYWlsdXJlIik7CisJYXNzZXJ0X2Rf ZXEobWFsbGN0bCgKKwkgICAgInN0YXRzLmFyZW5hcy4iIFNUUklOR0lGWShNQUxMQ1RMX0FSRU5B U19BTEwpCisJICAgICIudGNhY2hlX3N0YXNoZWRfYnl0ZXMiLCAmdGNhY2hlX3N0YXNoZWRfYnl0 ZXMsICZzeiwgTlVMTCwgMCksIDAsCisJICAgICJVbmV4cGVjdGVkIG1hbGxjdGwgZmFpbHVyZSIp OworCXNpemVfdCB0Y2FjaGVfYnl0ZXNfYmVmb3JlID0gdGNhY2hlX2J5dGVzICsgdGNhY2hlX3N0 YXNoZWRfYnl0ZXM7CisJZGFsbG9jeChwdHIsIDApOworCisJZXhwZWN0X2RfZXEobWFsbGN0bCgi ZXBvY2giLCBOVUxMLCBOVUxMLCAodm9pZCAqKSZlcG9jaCwgc2l6ZW9mKGVwb2NoKSksCisJICAg IDAsICJVbmV4cGVjdGVkIG1hbGxjdGwoKSBmYWlsdXJlIik7CisJYXNzZXJ0X2RfZXEobWFsbGN0 bCgKKwkgICAgInN0YXRzLmFyZW5hcy4iIFNUUklOR0lGWShNQUxMQ1RMX0FSRU5BU19BTEwpICIu dGNhY2hlX2J5dGVzIiwKKwkgICAgJnRjYWNoZV9ieXRlcywgJnN6LCBOVUxMLCAwKSwgMCwgIlVu ZXhwZWN0ZWQgbWFsbGN0bCBmYWlsdXJlIik7CisJYXNzZXJ0X2RfZXEobWFsbGN0bCgKKwkgICAg InN0YXRzLmFyZW5hcy4iIFNUUklOR0lGWShNQUxMQ1RMX0FSRU5BU19BTEwpCisJICAgICIudGNh Y2hlX3N0YXNoZWRfYnl0ZXMiLCAmdGNhY2hlX3N0YXNoZWRfYnl0ZXMsICZzeiwgTlVMTCwgMCks IDAsCisJICAgICJVbmV4cGVjdGVkIG1hbGxjdGwgZmFpbHVyZSIpOworCXNpemVfdCB0Y2FjaGVf Ynl0ZXNfYWZ0ZXIgPSB0Y2FjaGVfYnl0ZXMgKyB0Y2FjaGVfc3Rhc2hlZF9ieXRlczsKKwlhc3Nl cnRfenVfZXEodGNhY2hlX2J5dGVzX2FmdGVyIC0gdGNhY2hlX2J5dGVzX2JlZm9yZSwKKwkgICAg dXNpemUsICJJbmNvcnJlY3RseSBhdHRyaWJ1dGVkIGEgZnJlZSIpOworfQorCitURVNUX0JFR0lO KHRlc3Rfc3RhdHNfdGNhY2hlX2J5dGVzX3NtYWxsKSB7CisJdGVzdF9za2lwX2lmKCFjb25maWdf c3RhdHMpOworCXRlc3Rfc2tpcF9pZighb3B0X3RjYWNoZSk7CisJdGVzdF9za2lwX2lmKG9wdF90 Y2FjaGVfbWF4IDwgU0NfU01BTExfTUFYQ0xBU1MpOworCisJdGVzdF90Y2FjaGVfYnl0ZXNfZm9y X3VzaXplKFNDX1NNQUxMX01BWENMQVNTKTsKK30KK1RFU1RfRU5ECisKK1RFU1RfQkVHSU4odGVz dF9zdGF0c190Y2FjaGVfYnl0ZXNfbGFyZ2UpIHsKKwl0ZXN0X3NraXBfaWYoIWNvbmZpZ19zdGF0 cyk7CisJdGVzdF9za2lwX2lmKCFvcHRfdGNhY2hlKTsKKwl0ZXN0X3NraXBfaWYob3B0X3RjYWNo ZV9tYXggPCBTQ19MQVJHRV9NSU5DTEFTUyk7CisKKwl0ZXN0X3RjYWNoZV9ieXRlc19mb3JfdXNp emUoU0NfTEFSR0VfTUlOQ0xBU1MpOworfQorVEVTVF9FTkQKKworaW50CittYWluKHZvaWQpIHsK KwlyZXR1cm4gdGVzdF9ub19yZWVudHJhbmN5KAorCSAgICB0ZXN0X3N0YXRzX3N1bW1hcnksCisJ ICAgIHRlc3Rfc3RhdHNfbGFyZ2UsCisJICAgIHRlc3Rfc3RhdHNfYXJlbmFzX3N1bW1hcnksCisJ ICAgIHRlc3Rfc3RhdHNfYXJlbmFzX3NtYWxsLAorCSAgICB0ZXN0X3N0YXRzX2FyZW5hc19sYXJn ZSwKKwkgICAgdGVzdF9zdGF0c19hcmVuYXNfYmlucywKKwkgICAgdGVzdF9zdGF0c19hcmVuYXNf bGV4dGVudHMsCisJICAgIHRlc3Rfc3RhdHNfdGNhY2hlX2J5dGVzX3NtYWxsLAorCSAgICB0ZXN0 X3N0YXRzX3RjYWNoZV9ieXRlc19sYXJnZSk7Cit9CgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2Ut My4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L3N0YXRzX3ByaW50LmMgYi8zODkt ZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvc3RhdHNfcHJpbnQu YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjMxNzc1Ci0tLSAvZGV2L251 bGwKKysrIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0 L3N0YXRzX3ByaW50LmMKQEAgLTAsMCArMSw5OTkgQEAKKyNpbmNsdWRlICJ0ZXN0L2plbWFsbG9j X3Rlc3QuaCIKKworI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL3V0aWwuaCIKKwordHlwZWRl ZiBlbnVtIHsKKwlUT0tFTl9UWVBFX05PTkUsCisJVE9LRU5fVFlQRV9FUlJPUiwKKwlUT0tFTl9U WVBFX0VPSSwKKwlUT0tFTl9UWVBFX05VTEwsCisJVE9LRU5fVFlQRV9GQUxTRSwKKwlUT0tFTl9U WVBFX1RSVUUsCisJVE9LRU5fVFlQRV9MQlJBQ0tFVCwKKwlUT0tFTl9UWVBFX1JCUkFDS0VULAor CVRPS0VOX1RZUEVfTEJSQUNFLAorCVRPS0VOX1RZUEVfUkJSQUNFLAorCVRPS0VOX1RZUEVfQ09M T04sCisJVE9LRU5fVFlQRV9DT01NQSwKKwlUT0tFTl9UWVBFX1NUUklORywKKwlUT0tFTl9UWVBF X05VTUJFUgorfSB0b2tlbl90eXBlX3Q7CisKK3R5cGVkZWYgc3RydWN0IHBhcnNlcl9zIHBhcnNl cl90OwordHlwZWRlZiBzdHJ1Y3QgeworCXBhcnNlcl90CSpwYXJzZXI7CisJdG9rZW5fdHlwZV90 CXRva2VuX3R5cGU7CisJc2l6ZV90CQlwb3M7CisJc2l6ZV90CQlsZW47CisJc2l6ZV90CQlsaW5l OworCXNpemVfdAkJY29sOworfSB0b2tlbl90OworCitzdHJ1Y3QgcGFyc2VyX3MgeworCWJvb2wg dmVyYm9zZTsKKwljaGFyCSpidWY7IC8qICdcMCctdGVybWluYXRlZC4gKi8KKwlzaXplX3QJbGVu OyAvKiBOdW1iZXIgb2YgY2hhcmFjdGVycyBwcmVjZWRpbmcgJ1wwJyBpbiBidWYuICovCisJc2l6 ZV90CXBvczsKKwlzaXplX3QJbGluZTsKKwlzaXplX3QJY29sOworCXRva2VuX3QJdG9rZW47Cit9 OworCitzdGF0aWMgdm9pZAordG9rZW5faW5pdCh0b2tlbl90ICp0b2tlbiwgcGFyc2VyX3QgKnBh cnNlciwgdG9rZW5fdHlwZV90IHRva2VuX3R5cGUsCisgICAgc2l6ZV90IHBvcywgc2l6ZV90IGxl biwgc2l6ZV90IGxpbmUsIHNpemVfdCBjb2wpIHsKKwl0b2tlbi0+cGFyc2VyID0gcGFyc2VyOwor CXRva2VuLT50b2tlbl90eXBlID0gdG9rZW5fdHlwZTsKKwl0b2tlbi0+cG9zID0gcG9zOworCXRv a2VuLT5sZW4gPSBsZW47CisJdG9rZW4tPmxpbmUgPSBsaW5lOworCXRva2VuLT5jb2wgPSBjb2w7 Cit9CisKK3N0YXRpYyB2b2lkCit0b2tlbl9lcnJvcih0b2tlbl90ICp0b2tlbikgeworCWlmICgh dG9rZW4tPnBhcnNlci0+dmVyYm9zZSkgeworCQlyZXR1cm47CisJfQorCXN3aXRjaCAodG9rZW4t PnRva2VuX3R5cGUpIHsKKwljYXNlIFRPS0VOX1RZUEVfTk9ORToKKwkJbm90X3JlYWNoZWQoKTsK KwljYXNlIFRPS0VOX1RZUEVfRVJST1I6CisJCW1hbGxvY19wcmludGYoIiV6dTolenU6IFVuZXhw ZWN0ZWQgY2hhcmFjdGVyIGluIHRva2VuOiAiLAorCQkgICAgdG9rZW4tPmxpbmUsIHRva2VuLT5j b2wpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQltYWxsb2NfcHJpbnRmKCIlenU6JXp1OiBVbmV4 cGVjdGVkIHRva2VuOiAiLCB0b2tlbi0+bGluZSwKKwkJICAgIHRva2VuLT5jb2wpOworCQlicmVh azsKKwl9CisJVU5VU0VEIHNzaXplX3QgZXJyID0gbWFsbG9jX3dyaXRlX2ZkKFNUREVSUl9GSUxF Tk8sCisJICAgICZ0b2tlbi0+cGFyc2VyLT5idWZbdG9rZW4tPnBvc10sIHRva2VuLT5sZW4pOwor CW1hbGxvY19wcmludGYoIlxuIik7Cit9CisKK3N0YXRpYyB2b2lkCitwYXJzZXJfaW5pdChwYXJz ZXJfdCAqcGFyc2VyLCBib29sIHZlcmJvc2UpIHsKKwlwYXJzZXItPnZlcmJvc2UgPSB2ZXJib3Nl OworCXBhcnNlci0+YnVmID0gTlVMTDsKKwlwYXJzZXItPmxlbiA9IDA7CisJcGFyc2VyLT5wb3Mg PSAwOworCXBhcnNlci0+bGluZSA9IDE7CisJcGFyc2VyLT5jb2wgPSAwOworfQorCitzdGF0aWMg dm9pZAorcGFyc2VyX2ZpbmkocGFyc2VyX3QgKnBhcnNlcikgeworCWlmIChwYXJzZXItPmJ1ZiAh PSBOVUxMKSB7CisJCWRhbGxvY3gocGFyc2VyLT5idWYsIE1BTExPQ1hfVENBQ0hFX05PTkUpOwor CX0KK30KKworc3RhdGljIGJvb2wKK3BhcnNlcl9hcHBlbmQocGFyc2VyX3QgKnBhcnNlciwgY29u c3QgY2hhciAqc3RyKSB7CisJc2l6ZV90IGxlbiA9IHN0cmxlbihzdHIpOworCWNoYXIgKmJ1ZiA9 IChwYXJzZXItPmJ1ZiA9PSBOVUxMKSA/IG1hbGxvY3gobGVuICsgMSwKKwkgICAgTUFMTE9DWF9U Q0FDSEVfTk9ORSkgOiByYWxsb2N4KHBhcnNlci0+YnVmLCBwYXJzZXItPmxlbiArIGxlbiArIDEs CisJICAgIE1BTExPQ1hfVENBQ0hFX05PTkUpOworCWlmIChidWYgPT0gTlVMTCkgeworCQlyZXR1 cm4gdHJ1ZTsKKwl9CisJbWVtY3B5KCZidWZbcGFyc2VyLT5sZW5dLCBzdHIsIGxlbiArIDEpOwor CXBhcnNlci0+YnVmID0gYnVmOworCXBhcnNlci0+bGVuICs9IGxlbjsKKwlyZXR1cm4gZmFsc2U7 Cit9CisKK3N0YXRpYyBib29sCitwYXJzZXJfdG9rZW5pemUocGFyc2VyX3QgKnBhcnNlcikgewor CWVudW0geworCQlTVEFURV9TVEFSVCwKKwkJU1RBVEVfRU9JLAorCQlTVEFURV9OLCBTVEFURV9O VSwgU1RBVEVfTlVMLCBTVEFURV9OVUxMLAorCQlTVEFURV9GLCBTVEFURV9GQSwgU1RBVEVfRkFM LCBTVEFURV9GQUxTLCBTVEFURV9GQUxTRSwKKwkJU1RBVEVfVCwgU1RBVEVfVFIsIFNUQVRFX1RS VSwgU1RBVEVfVFJVRSwKKwkJU1RBVEVfTEJSQUNLRVQsCisJCVNUQVRFX1JCUkFDS0VULAorCQlT VEFURV9MQlJBQ0UsCisJCVNUQVRFX1JCUkFDRSwKKwkJU1RBVEVfQ09MT04sCisJCVNUQVRFX0NP TU1BLAorCQlTVEFURV9DSEFSUywKKwkJU1RBVEVfQ0hBUl9FU0NBUEUsCisJCVNUQVRFX0NIQVJf VSwgU1RBVEVfQ0hBUl9VRCwgU1RBVEVfQ0hBUl9VREQsIFNUQVRFX0NIQVJfVURERCwKKwkJU1RB VEVfU1RSSU5HLAorCQlTVEFURV9NSU5VUywKKwkJU1RBVEVfTEVBRElOR19aRVJPLAorCQlTVEFU RV9ESUdJVFMsCisJCVNUQVRFX0RFQ0lNQUwsCisJCVNUQVRFX0ZSQUNfRElHSVRTLAorCQlTVEFU RV9FWFAsCisJCVNUQVRFX0VYUF9TSUdOLAorCQlTVEFURV9FWFBfRElHSVRTLAorCQlTVEFURV9B Q0NFUFQKKwl9IHN0YXRlID0gU1RBVEVfU1RBUlQ7CisJc2l6ZV90IHRva2VuX3BvcyBKRU1BTExP Q19DQ19TSUxFTkNFX0lOSVQoMCk7CisJc2l6ZV90IHRva2VuX2xpbmUgSkVNQUxMT0NfQ0NfU0lM RU5DRV9JTklUKDEpOworCXNpemVfdCB0b2tlbl9jb2wgSkVNQUxMT0NfQ0NfU0lMRU5DRV9JTklU KDApOworCisJZXhwZWN0X3p1X2xlKHBhcnNlci0+cG9zLCBwYXJzZXItPmxlbiwKKwkgICAgIlBv c2l0aW9uIGlzIHBhc3QgZW5kIG9mIGJ1ZmZlciIpOworCisJd2hpbGUgKHN0YXRlICE9IFNUQVRF X0FDQ0VQVCkgeworCQljaGFyIGMgPSBwYXJzZXItPmJ1ZltwYXJzZXItPnBvc107CisKKwkJc3dp dGNoIChzdGF0ZSkgeworCQljYXNlIFNUQVRFX1NUQVJUOgorCQkJdG9rZW5fcG9zID0gcGFyc2Vy LT5wb3M7CisJCQl0b2tlbl9saW5lID0gcGFyc2VyLT5saW5lOworCQkJdG9rZW5fY29sID0gcGFy c2VyLT5jb2w7CisJCQlzd2l0Y2ggKGMpIHsKKwkJCWNhc2UgJyAnOiBjYXNlICdcYic6IGNhc2Ug J1xuJzogY2FzZSAnXHInOiBjYXNlICdcdCc6CisJCQkJYnJlYWs7CisJCQljYXNlICdcMCc6CisJ CQkJc3RhdGUgPSBTVEFURV9FT0k7CisJCQkJYnJlYWs7CisJCQljYXNlICduJzoKKwkJCQlzdGF0 ZSA9IFNUQVRFX047CisJCQkJYnJlYWs7CisJCQljYXNlICdmJzoKKwkJCQlzdGF0ZSA9IFNUQVRF X0Y7CisJCQkJYnJlYWs7CisJCQljYXNlICd0JzoKKwkJCQlzdGF0ZSA9IFNUQVRFX1Q7CisJCQkJ YnJlYWs7CisJCQljYXNlICdbJzoKKwkJCQlzdGF0ZSA9IFNUQVRFX0xCUkFDS0VUOworCQkJCWJy ZWFrOworCQkJY2FzZSAnXSc6CisJCQkJc3RhdGUgPSBTVEFURV9SQlJBQ0tFVDsKKwkJCQlicmVh azsKKwkJCWNhc2UgJ3snOgorCQkJCXN0YXRlID0gU1RBVEVfTEJSQUNFOworCQkJCWJyZWFrOwor CQkJY2FzZSAnfSc6CisJCQkJc3RhdGUgPSBTVEFURV9SQlJBQ0U7CisJCQkJYnJlYWs7CisJCQlj YXNlICc6JzoKKwkJCQlzdGF0ZSA9IFNUQVRFX0NPTE9OOworCQkJCWJyZWFrOworCQkJY2FzZSAn LCc6CisJCQkJc3RhdGUgPSBTVEFURV9DT01NQTsKKwkJCQlicmVhazsKKwkJCWNhc2UgJyInOgor CQkJCXN0YXRlID0gU1RBVEVfQ0hBUlM7CisJCQkJYnJlYWs7CisJCQljYXNlICctJzoKKwkJCQlz dGF0ZSA9IFNUQVRFX01JTlVTOworCQkJCWJyZWFrOworCQkJY2FzZSAnMCc6CisJCQkJc3RhdGUg PSBTVEFURV9MRUFESU5HX1pFUk87CisJCQkJYnJlYWs7CisJCQljYXNlICcxJzogY2FzZSAnMic6 IGNhc2UgJzMnOiBjYXNlICc0JzoKKwkJCWNhc2UgJzUnOiBjYXNlICc2JzogY2FzZSAnNyc6IGNh c2UgJzgnOiBjYXNlICc5JzoKKwkJCQlzdGF0ZSA9IFNUQVRFX0RJR0lUUzsKKwkJCQlicmVhazsK KwkJCWRlZmF1bHQ6CisJCQkJdG9rZW5faW5pdCgmcGFyc2VyLT50b2tlbiwgcGFyc2VyLAorCQkJ CSAgICBUT0tFTl9UWVBFX0VSUk9SLCB0b2tlbl9wb3MsIHBhcnNlci0+cG9zICsgMQorCQkJCSAg ICAtIHRva2VuX3BvcywgdG9rZW5fbGluZSwgdG9rZW5fY29sKTsKKwkJCQlyZXR1cm4gdHJ1ZTsK KwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFNUQVRFX0VPSToKKwkJCXRva2VuX2luaXQoJnBhcnNl ci0+dG9rZW4sIHBhcnNlciwKKwkJCSAgICBUT0tFTl9UWVBFX0VPSSwgdG9rZW5fcG9zLCBwYXJz ZXItPnBvcyAtCisJCQkgICAgdG9rZW5fcG9zLCB0b2tlbl9saW5lLCB0b2tlbl9jb2wpOworCQkJ c3RhdGUgPSBTVEFURV9BQ0NFUFQ7CisJCQlicmVhazsKKwkJY2FzZSBTVEFURV9OOgorCQkJc3dp dGNoIChjKSB7CisJCQljYXNlICd1JzoKKwkJCQlzdGF0ZSA9IFNUQVRFX05VOworCQkJCWJyZWFr OworCQkJZGVmYXVsdDoKKwkJCQl0b2tlbl9pbml0KCZwYXJzZXItPnRva2VuLCBwYXJzZXIsCisJ CQkJICAgIFRPS0VOX1RZUEVfRVJST1IsIHRva2VuX3BvcywgcGFyc2VyLT5wb3MgKyAxCisJCQkJ ICAgIC0gdG9rZW5fcG9zLCB0b2tlbl9saW5lLCB0b2tlbl9jb2wpOworCQkJCXJldHVybiB0cnVl OworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgU1RBVEVfTlU6CisJCQlzd2l0Y2ggKGMpIHsKKwkJ CWNhc2UgJ2wnOgorCQkJCXN0YXRlID0gU1RBVEVfTlVMOworCQkJCWJyZWFrOworCQkJZGVmYXVs dDoKKwkJCQl0b2tlbl9pbml0KCZwYXJzZXItPnRva2VuLCBwYXJzZXIsCisJCQkJICAgIFRPS0VO X1RZUEVfRVJST1IsIHRva2VuX3BvcywgcGFyc2VyLT5wb3MgKyAxCisJCQkJICAgIC0gdG9rZW5f cG9zLCB0b2tlbl9saW5lLCB0b2tlbl9jb2wpOworCQkJCXJldHVybiB0cnVlOworCQkJfQorCQkJ YnJlYWs7CisJCWNhc2UgU1RBVEVfTlVMOgorCQkJc3dpdGNoIChjKSB7CisJCQljYXNlICdsJzoK KwkJCQlzdGF0ZSA9IFNUQVRFX05VTEw7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCXRv a2VuX2luaXQoJnBhcnNlci0+dG9rZW4sIHBhcnNlciwKKwkJCQkgICAgVE9LRU5fVFlQRV9FUlJP UiwgdG9rZW5fcG9zLCBwYXJzZXItPnBvcyArIDEKKwkJCQkgICAgLSB0b2tlbl9wb3MsIHRva2Vu X2xpbmUsIHRva2VuX2NvbCk7CisJCQkJcmV0dXJuIHRydWU7CisJCQl9CisJCQlicmVhazsKKwkJ Y2FzZSBTVEFURV9OVUxMOgorCQkJc3dpdGNoIChjKSB7CisJCQljYXNlICcgJzogY2FzZSAnXGIn OiBjYXNlICdcbic6IGNhc2UgJ1xyJzogY2FzZSAnXHQnOgorCQkJY2FzZSAnXDAnOgorCQkJY2Fz ZSAnWyc6IGNhc2UgJ10nOiBjYXNlICd7JzogY2FzZSAnfSc6IGNhc2UgJzonOgorCQkJY2FzZSAn LCc6CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCXRva2VuX2luaXQoJnBhcnNlci0+dG9r ZW4sIHBhcnNlciwKKwkJCQkgICAgVE9LRU5fVFlQRV9FUlJPUiwgdG9rZW5fcG9zLCBwYXJzZXIt PnBvcyArIDEKKwkJCQkgICAgLSB0b2tlbl9wb3MsIHRva2VuX2xpbmUsIHRva2VuX2NvbCk7CisJ CQkJcmV0dXJuIHRydWU7CisJCQl9CisJCQl0b2tlbl9pbml0KCZwYXJzZXItPnRva2VuLCBwYXJz ZXIsIFRPS0VOX1RZUEVfTlVMTCwKKwkJCSAgICB0b2tlbl9wb3MsIHBhcnNlci0+cG9zIC0gdG9r ZW5fcG9zLCB0b2tlbl9saW5lLAorCQkJICAgIHRva2VuX2NvbCk7CisJCQlzdGF0ZSA9IFNUQVRF X0FDQ0VQVDsKKwkJCWJyZWFrOworCQljYXNlIFNUQVRFX0Y6CisJCQlzd2l0Y2ggKGMpIHsKKwkJ CWNhc2UgJ2EnOgorCQkJCXN0YXRlID0gU1RBVEVfRkE7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0 OgorCQkJCXRva2VuX2luaXQoJnBhcnNlci0+dG9rZW4sIHBhcnNlciwKKwkJCQkgICAgVE9LRU5f VFlQRV9FUlJPUiwgdG9rZW5fcG9zLCBwYXJzZXItPnBvcyArIDEKKwkJCQkgICAgLSB0b2tlbl9w b3MsIHRva2VuX2xpbmUsIHRva2VuX2NvbCk7CisJCQkJcmV0dXJuIHRydWU7CisJCQl9CisJCQli cmVhazsKKwkJY2FzZSBTVEFURV9GQToKKwkJCXN3aXRjaCAoYykgeworCQkJY2FzZSAnbCc6CisJ CQkJc3RhdGUgPSBTVEFURV9GQUw7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCXRva2Vu X2luaXQoJnBhcnNlci0+dG9rZW4sIHBhcnNlciwKKwkJCQkgICAgVE9LRU5fVFlQRV9FUlJPUiwg dG9rZW5fcG9zLCBwYXJzZXItPnBvcyArIDEKKwkJCQkgICAgLSB0b2tlbl9wb3MsIHRva2VuX2xp bmUsIHRva2VuX2NvbCk7CisJCQkJcmV0dXJuIHRydWU7CisJCQl9CisJCQlicmVhazsKKwkJY2Fz ZSBTVEFURV9GQUw6CisJCQlzd2l0Y2ggKGMpIHsKKwkJCWNhc2UgJ3MnOgorCQkJCXN0YXRlID0g U1RBVEVfRkFMUzsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJdG9rZW5faW5pdCgmcGFy c2VyLT50b2tlbiwgcGFyc2VyLAorCQkJCSAgICBUT0tFTl9UWVBFX0VSUk9SLCB0b2tlbl9wb3Ms IHBhcnNlci0+cG9zICsgMQorCQkJCSAgICAtIHRva2VuX3BvcywgdG9rZW5fbGluZSwgdG9rZW5f Y29sKTsKKwkJCQlyZXR1cm4gdHJ1ZTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFNUQVRFX0ZB TFM6CisJCQlzd2l0Y2ggKGMpIHsKKwkJCWNhc2UgJ2UnOgorCQkJCXN0YXRlID0gU1RBVEVfRkFM U0U7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCXRva2VuX2luaXQoJnBhcnNlci0+dG9r ZW4sIHBhcnNlciwKKwkJCQkgICAgVE9LRU5fVFlQRV9FUlJPUiwgdG9rZW5fcG9zLCBwYXJzZXIt PnBvcyArIDEKKwkJCQkgICAgLSB0b2tlbl9wb3MsIHRva2VuX2xpbmUsIHRva2VuX2NvbCk7CisJ CQkJcmV0dXJuIHRydWU7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBTVEFURV9GQUxTRToKKwkJ CXN3aXRjaCAoYykgeworCQkJY2FzZSAnICc6IGNhc2UgJ1xiJzogY2FzZSAnXG4nOiBjYXNlICdc cic6IGNhc2UgJ1x0JzoKKwkJCWNhc2UgJ1wwJzoKKwkJCWNhc2UgJ1snOiBjYXNlICddJzogY2Fz ZSAneyc6IGNhc2UgJ30nOiBjYXNlICc6JzoKKwkJCWNhc2UgJywnOgorCQkJCWJyZWFrOworCQkJ ZGVmYXVsdDoKKwkJCQl0b2tlbl9pbml0KCZwYXJzZXItPnRva2VuLCBwYXJzZXIsCisJCQkJICAg IFRPS0VOX1RZUEVfRVJST1IsIHRva2VuX3BvcywgcGFyc2VyLT5wb3MgKyAxCisJCQkJICAgIC0g dG9rZW5fcG9zLCB0b2tlbl9saW5lLCB0b2tlbl9jb2wpOworCQkJCXJldHVybiB0cnVlOworCQkJ fQorCQkJdG9rZW5faW5pdCgmcGFyc2VyLT50b2tlbiwgcGFyc2VyLAorCQkJICAgIFRPS0VOX1RZ UEVfRkFMU0UsIHRva2VuX3BvcywgcGFyc2VyLT5wb3MgLQorCQkJICAgIHRva2VuX3BvcywgdG9r ZW5fbGluZSwgdG9rZW5fY29sKTsKKwkJCXN0YXRlID0gU1RBVEVfQUNDRVBUOworCQkJYnJlYWs7 CisJCWNhc2UgU1RBVEVfVDoKKwkJCXN3aXRjaCAoYykgeworCQkJY2FzZSAncic6CisJCQkJc3Rh dGUgPSBTVEFURV9UUjsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJdG9rZW5faW5pdCgm cGFyc2VyLT50b2tlbiwgcGFyc2VyLAorCQkJCSAgICBUT0tFTl9UWVBFX0VSUk9SLCB0b2tlbl9w b3MsIHBhcnNlci0+cG9zICsgMQorCQkJCSAgICAtIHRva2VuX3BvcywgdG9rZW5fbGluZSwgdG9r ZW5fY29sKTsKKwkJCQlyZXR1cm4gdHJ1ZTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFNUQVRF X1RSOgorCQkJc3dpdGNoIChjKSB7CisJCQljYXNlICd1JzoKKwkJCQlzdGF0ZSA9IFNUQVRFX1RS VTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJdG9rZW5faW5pdCgmcGFyc2VyLT50b2tl biwgcGFyc2VyLAorCQkJCSAgICBUT0tFTl9UWVBFX0VSUk9SLCB0b2tlbl9wb3MsIHBhcnNlci0+ cG9zICsgMQorCQkJCSAgICAtIHRva2VuX3BvcywgdG9rZW5fbGluZSwgdG9rZW5fY29sKTsKKwkJ CQlyZXR1cm4gdHJ1ZTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFNUQVRFX1RSVToKKwkJCXN3 aXRjaCAoYykgeworCQkJY2FzZSAnZSc6CisJCQkJc3RhdGUgPSBTVEFURV9UUlVFOworCQkJCWJy ZWFrOworCQkJZGVmYXVsdDoKKwkJCQl0b2tlbl9pbml0KCZwYXJzZXItPnRva2VuLCBwYXJzZXIs CisJCQkJICAgIFRPS0VOX1RZUEVfRVJST1IsIHRva2VuX3BvcywgcGFyc2VyLT5wb3MgKyAxCisJ CQkJICAgIC0gdG9rZW5fcG9zLCB0b2tlbl9saW5lLCB0b2tlbl9jb2wpOworCQkJCXJldHVybiB0 cnVlOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgU1RBVEVfVFJVRToKKwkJCXN3aXRjaCAoYykg eworCQkJY2FzZSAnICc6IGNhc2UgJ1xiJzogY2FzZSAnXG4nOiBjYXNlICdccic6IGNhc2UgJ1x0 JzoKKwkJCWNhc2UgJ1wwJzoKKwkJCWNhc2UgJ1snOiBjYXNlICddJzogY2FzZSAneyc6IGNhc2Ug J30nOiBjYXNlICc6JzoKKwkJCWNhc2UgJywnOgorCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJ CQl0b2tlbl9pbml0KCZwYXJzZXItPnRva2VuLCBwYXJzZXIsCisJCQkJICAgIFRPS0VOX1RZUEVf RVJST1IsIHRva2VuX3BvcywgcGFyc2VyLT5wb3MgKyAxCisJCQkJICAgIC0gdG9rZW5fcG9zLCB0 b2tlbl9saW5lLCB0b2tlbl9jb2wpOworCQkJCXJldHVybiB0cnVlOworCQkJfQorCQkJdG9rZW5f aW5pdCgmcGFyc2VyLT50b2tlbiwgcGFyc2VyLCBUT0tFTl9UWVBFX1RSVUUsCisJCQkgICAgdG9r ZW5fcG9zLCBwYXJzZXItPnBvcyAtIHRva2VuX3BvcywgdG9rZW5fbGluZSwKKwkJCSAgICB0b2tl bl9jb2wpOworCQkJc3RhdGUgPSBTVEFURV9BQ0NFUFQ7CisJCQlicmVhazsKKwkJY2FzZSBTVEFU RV9MQlJBQ0tFVDoKKwkJCXRva2VuX2luaXQoJnBhcnNlci0+dG9rZW4sIHBhcnNlciwgVE9LRU5f VFlQRV9MQlJBQ0tFVCwKKwkJCSAgICB0b2tlbl9wb3MsIHBhcnNlci0+cG9zIC0gdG9rZW5fcG9z LCB0b2tlbl9saW5lLAorCQkJICAgIHRva2VuX2NvbCk7CisJCQlzdGF0ZSA9IFNUQVRFX0FDQ0VQ VDsKKwkJCWJyZWFrOworCQljYXNlIFNUQVRFX1JCUkFDS0VUOgorCQkJdG9rZW5faW5pdCgmcGFy c2VyLT50b2tlbiwgcGFyc2VyLCBUT0tFTl9UWVBFX1JCUkFDS0VULAorCQkJICAgIHRva2VuX3Bv cywgcGFyc2VyLT5wb3MgLSB0b2tlbl9wb3MsIHRva2VuX2xpbmUsCisJCQkgICAgdG9rZW5fY29s KTsKKwkJCXN0YXRlID0gU1RBVEVfQUNDRVBUOworCQkJYnJlYWs7CisJCWNhc2UgU1RBVEVfTEJS QUNFOgorCQkJdG9rZW5faW5pdCgmcGFyc2VyLT50b2tlbiwgcGFyc2VyLCBUT0tFTl9UWVBFX0xC UkFDRSwKKwkJCSAgICB0b2tlbl9wb3MsIHBhcnNlci0+cG9zIC0gdG9rZW5fcG9zLCB0b2tlbl9s aW5lLAorCQkJICAgIHRva2VuX2NvbCk7CisJCQlzdGF0ZSA9IFNUQVRFX0FDQ0VQVDsKKwkJCWJy ZWFrOworCQljYXNlIFNUQVRFX1JCUkFDRToKKwkJCXRva2VuX2luaXQoJnBhcnNlci0+dG9rZW4s IHBhcnNlciwgVE9LRU5fVFlQRV9SQlJBQ0UsCisJCQkgICAgdG9rZW5fcG9zLCBwYXJzZXItPnBv cyAtIHRva2VuX3BvcywgdG9rZW5fbGluZSwKKwkJCSAgICB0b2tlbl9jb2wpOworCQkJc3RhdGUg PSBTVEFURV9BQ0NFUFQ7CisJCQlicmVhazsKKwkJY2FzZSBTVEFURV9DT0xPTjoKKwkJCXRva2Vu X2luaXQoJnBhcnNlci0+dG9rZW4sIHBhcnNlciwgVE9LRU5fVFlQRV9DT0xPTiwKKwkJCSAgICB0 b2tlbl9wb3MsIHBhcnNlci0+cG9zIC0gdG9rZW5fcG9zLCB0b2tlbl9saW5lLAorCQkJICAgIHRv a2VuX2NvbCk7CisJCQlzdGF0ZSA9IFNUQVRFX0FDQ0VQVDsKKwkJCWJyZWFrOworCQljYXNlIFNU QVRFX0NPTU1BOgorCQkJdG9rZW5faW5pdCgmcGFyc2VyLT50b2tlbiwgcGFyc2VyLCBUT0tFTl9U WVBFX0NPTU1BLAorCQkJICAgIHRva2VuX3BvcywgcGFyc2VyLT5wb3MgLSB0b2tlbl9wb3MsIHRv a2VuX2xpbmUsCisJCQkgICAgdG9rZW5fY29sKTsKKwkJCXN0YXRlID0gU1RBVEVfQUNDRVBUOwor CQkJYnJlYWs7CisJCWNhc2UgU1RBVEVfQ0hBUlM6CisJCQlzd2l0Y2ggKGMpIHsKKwkJCWNhc2Ug J1xcJzoKKwkJCQlzdGF0ZSA9IFNUQVRFX0NIQVJfRVNDQVBFOworCQkJCWJyZWFrOworCQkJY2Fz ZSAnIic6CisJCQkJc3RhdGUgPSBTVEFURV9TVFJJTkc7CisJCQkJYnJlYWs7CisJCQljYXNlIDB4 MDA6IGNhc2UgMHgwMTogY2FzZSAweDAyOiBjYXNlIDB4MDM6IGNhc2UgMHgwNDoKKwkJCWNhc2Ug MHgwNTogY2FzZSAweDA2OiBjYXNlIDB4MDc6IGNhc2UgMHgwODogY2FzZSAweDA5OgorCQkJY2Fz ZSAweDBhOiBjYXNlIDB4MGI6IGNhc2UgMHgwYzogY2FzZSAweDBkOiBjYXNlIDB4MGU6CisJCQlj YXNlIDB4MGY6IGNhc2UgMHgxMDogY2FzZSAweDExOiBjYXNlIDB4MTI6IGNhc2UgMHgxMzoKKwkJ CWNhc2UgMHgxNDogY2FzZSAweDE1OiBjYXNlIDB4MTY6IGNhc2UgMHgxNzogY2FzZSAweDE4Ogor CQkJY2FzZSAweDE5OiBjYXNlIDB4MWE6IGNhc2UgMHgxYjogY2FzZSAweDFjOiBjYXNlIDB4MWQ6 CisJCQljYXNlIDB4MWU6IGNhc2UgMHgxZjoKKwkJCQl0b2tlbl9pbml0KCZwYXJzZXItPnRva2Vu LCBwYXJzZXIsCisJCQkJICAgIFRPS0VOX1RZUEVfRVJST1IsIHRva2VuX3BvcywgcGFyc2VyLT5w b3MgKyAxCisJCQkJICAgIC0gdG9rZW5fcG9zLCB0b2tlbl9saW5lLCB0b2tlbl9jb2wpOworCQkJ CXJldHVybiB0cnVlOworCQkJZGVmYXVsdDoKKwkJCQlicmVhazsKKwkJCX0KKwkJCWJyZWFrOwor CQljYXNlIFNUQVRFX0NIQVJfRVNDQVBFOgorCQkJc3dpdGNoIChjKSB7CisJCQljYXNlICciJzog Y2FzZSAnXFwnOiBjYXNlICcvJzogY2FzZSAnYic6IGNhc2UgJ24nOgorCQkJY2FzZSAncic6IGNh c2UgJ3QnOgorCQkJCXN0YXRlID0gU1RBVEVfQ0hBUlM7CisJCQkJYnJlYWs7CisJCQljYXNlICd1 JzoKKwkJCQlzdGF0ZSA9IFNUQVRFX0NIQVJfVTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJ CQkJdG9rZW5faW5pdCgmcGFyc2VyLT50b2tlbiwgcGFyc2VyLAorCQkJCSAgICBUT0tFTl9UWVBF X0VSUk9SLCB0b2tlbl9wb3MsIHBhcnNlci0+cG9zICsgMQorCQkJCSAgICAtIHRva2VuX3Bvcywg dG9rZW5fbGluZSwgdG9rZW5fY29sKTsKKwkJCQlyZXR1cm4gdHJ1ZTsKKwkJCX0KKwkJCWJyZWFr OworCQljYXNlIFNUQVRFX0NIQVJfVToKKwkJCXN3aXRjaCAoYykgeworCQkJY2FzZSAnMCc6IGNh c2UgJzEnOiBjYXNlICcyJzogY2FzZSAnMyc6IGNhc2UgJzQnOgorCQkJY2FzZSAnNSc6IGNhc2Ug JzYnOiBjYXNlICc3JzogY2FzZSAnOCc6IGNhc2UgJzknOgorCQkJY2FzZSAnYSc6IGNhc2UgJ2In OiBjYXNlICdjJzogY2FzZSAnZCc6IGNhc2UgJ2UnOgorCQkJY2FzZSAnZic6CisJCQljYXNlICdB JzogY2FzZSAnQic6IGNhc2UgJ0MnOiBjYXNlICdEJzogY2FzZSAnRSc6CisJCQljYXNlICdGJzoK KwkJCQlzdGF0ZSA9IFNUQVRFX0NIQVJfVUQ7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJ CXRva2VuX2luaXQoJnBhcnNlci0+dG9rZW4sIHBhcnNlciwKKwkJCQkgICAgVE9LRU5fVFlQRV9F UlJPUiwgdG9rZW5fcG9zLCBwYXJzZXItPnBvcyArIDEKKwkJCQkgICAgLSB0b2tlbl9wb3MsIHRv a2VuX2xpbmUsIHRva2VuX2NvbCk7CisJCQkJcmV0dXJuIHRydWU7CisJCQl9CisJCQlicmVhazsK KwkJY2FzZSBTVEFURV9DSEFSX1VEOgorCQkJc3dpdGNoIChjKSB7CisJCQljYXNlICcwJzogY2Fz ZSAnMSc6IGNhc2UgJzInOiBjYXNlICczJzogY2FzZSAnNCc6CisJCQljYXNlICc1JzogY2FzZSAn Nic6IGNhc2UgJzcnOiBjYXNlICc4JzogY2FzZSAnOSc6CisJCQljYXNlICdhJzogY2FzZSAnYic6 IGNhc2UgJ2MnOiBjYXNlICdkJzogY2FzZSAnZSc6CisJCQljYXNlICdmJzoKKwkJCWNhc2UgJ0En OiBjYXNlICdCJzogY2FzZSAnQyc6IGNhc2UgJ0QnOiBjYXNlICdFJzoKKwkJCWNhc2UgJ0YnOgor CQkJCXN0YXRlID0gU1RBVEVfQ0hBUl9VREQ7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJ CXRva2VuX2luaXQoJnBhcnNlci0+dG9rZW4sIHBhcnNlciwKKwkJCQkgICAgVE9LRU5fVFlQRV9F UlJPUiwgdG9rZW5fcG9zLCBwYXJzZXItPnBvcyArIDEKKwkJCQkgICAgLSB0b2tlbl9wb3MsIHRv a2VuX2xpbmUsIHRva2VuX2NvbCk7CisJCQkJcmV0dXJuIHRydWU7CisJCQl9CisJCQlicmVhazsK KwkJY2FzZSBTVEFURV9DSEFSX1VERDoKKwkJCXN3aXRjaCAoYykgeworCQkJY2FzZSAnMCc6IGNh c2UgJzEnOiBjYXNlICcyJzogY2FzZSAnMyc6IGNhc2UgJzQnOgorCQkJY2FzZSAnNSc6IGNhc2Ug JzYnOiBjYXNlICc3JzogY2FzZSAnOCc6IGNhc2UgJzknOgorCQkJY2FzZSAnYSc6IGNhc2UgJ2In OiBjYXNlICdjJzogY2FzZSAnZCc6IGNhc2UgJ2UnOgorCQkJY2FzZSAnZic6CisJCQljYXNlICdB JzogY2FzZSAnQic6IGNhc2UgJ0MnOiBjYXNlICdEJzogY2FzZSAnRSc6CisJCQljYXNlICdGJzoK KwkJCQlzdGF0ZSA9IFNUQVRFX0NIQVJfVURERDsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJ CQkJdG9rZW5faW5pdCgmcGFyc2VyLT50b2tlbiwgcGFyc2VyLAorCQkJCSAgICBUT0tFTl9UWVBF X0VSUk9SLCB0b2tlbl9wb3MsIHBhcnNlci0+cG9zICsgMQorCQkJCSAgICAtIHRva2VuX3Bvcywg dG9rZW5fbGluZSwgdG9rZW5fY29sKTsKKwkJCQlyZXR1cm4gdHJ1ZTsKKwkJCX0KKwkJCWJyZWFr OworCQljYXNlIFNUQVRFX0NIQVJfVURERDoKKwkJCXN3aXRjaCAoYykgeworCQkJY2FzZSAnMCc6 IGNhc2UgJzEnOiBjYXNlICcyJzogY2FzZSAnMyc6IGNhc2UgJzQnOgorCQkJY2FzZSAnNSc6IGNh c2UgJzYnOiBjYXNlICc3JzogY2FzZSAnOCc6IGNhc2UgJzknOgorCQkJY2FzZSAnYSc6IGNhc2Ug J2InOiBjYXNlICdjJzogY2FzZSAnZCc6IGNhc2UgJ2UnOgorCQkJY2FzZSAnZic6CisJCQljYXNl ICdBJzogY2FzZSAnQic6IGNhc2UgJ0MnOiBjYXNlICdEJzogY2FzZSAnRSc6CisJCQljYXNlICdG JzoKKwkJCQlzdGF0ZSA9IFNUQVRFX0NIQVJTOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJ CQl0b2tlbl9pbml0KCZwYXJzZXItPnRva2VuLCBwYXJzZXIsCisJCQkJICAgIFRPS0VOX1RZUEVf RVJST1IsIHRva2VuX3BvcywgcGFyc2VyLT5wb3MgKyAxCisJCQkJICAgIC0gdG9rZW5fcG9zLCB0 b2tlbl9saW5lLCB0b2tlbl9jb2wpOworCQkJCXJldHVybiB0cnVlOworCQkJfQorCQkJYnJlYWs7 CisJCWNhc2UgU1RBVEVfU1RSSU5HOgorCQkJdG9rZW5faW5pdCgmcGFyc2VyLT50b2tlbiwgcGFy c2VyLCBUT0tFTl9UWVBFX1NUUklORywKKwkJCSAgICB0b2tlbl9wb3MsIHBhcnNlci0+cG9zIC0g dG9rZW5fcG9zLCB0b2tlbl9saW5lLAorCQkJICAgIHRva2VuX2NvbCk7CisJCQlzdGF0ZSA9IFNU QVRFX0FDQ0VQVDsKKwkJCWJyZWFrOworCQljYXNlIFNUQVRFX01JTlVTOgorCQkJc3dpdGNoIChj KSB7CisJCQljYXNlICcwJzoKKwkJCQlzdGF0ZSA9IFNUQVRFX0xFQURJTkdfWkVSTzsKKwkJCQli cmVhazsKKwkJCWNhc2UgJzEnOiBjYXNlICcyJzogY2FzZSAnMyc6IGNhc2UgJzQnOgorCQkJY2Fz ZSAnNSc6IGNhc2UgJzYnOiBjYXNlICc3JzogY2FzZSAnOCc6IGNhc2UgJzknOgorCQkJCXN0YXRl ID0gU1RBVEVfRElHSVRTOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQl0b2tlbl9pbml0 KCZwYXJzZXItPnRva2VuLCBwYXJzZXIsCisJCQkJICAgIFRPS0VOX1RZUEVfRVJST1IsIHRva2Vu X3BvcywgcGFyc2VyLT5wb3MgKyAxCisJCQkJICAgIC0gdG9rZW5fcG9zLCB0b2tlbl9saW5lLCB0 b2tlbl9jb2wpOworCQkJCXJldHVybiB0cnVlOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgU1RB VEVfTEVBRElOR19aRVJPOgorCQkJc3dpdGNoIChjKSB7CisJCQljYXNlICcuJzoKKwkJCQlzdGF0 ZSA9IFNUQVRFX0RFQ0lNQUw7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCXRva2VuX2lu aXQoJnBhcnNlci0+dG9rZW4sIHBhcnNlciwKKwkJCQkgICAgVE9LRU5fVFlQRV9OVU1CRVIsIHRv a2VuX3BvcywgcGFyc2VyLT5wb3MgLQorCQkJCSAgICB0b2tlbl9wb3MsIHRva2VuX2xpbmUsIHRv a2VuX2NvbCk7CisJCQkJc3RhdGUgPSBTVEFURV9BQ0NFUFQ7CisJCQkJYnJlYWs7CisJCQl9CisJ CQlicmVhazsKKwkJY2FzZSBTVEFURV9ESUdJVFM6CisJCQlzd2l0Y2ggKGMpIHsKKwkJCWNhc2Ug JzAnOiBjYXNlICcxJzogY2FzZSAnMic6IGNhc2UgJzMnOiBjYXNlICc0JzoKKwkJCWNhc2UgJzUn OiBjYXNlICc2JzogY2FzZSAnNyc6IGNhc2UgJzgnOiBjYXNlICc5JzoKKwkJCQlicmVhazsKKwkJ CWNhc2UgJy4nOgorCQkJCXN0YXRlID0gU1RBVEVfREVDSU1BTDsKKwkJCQlicmVhazsKKwkJCWRl ZmF1bHQ6CisJCQkJdG9rZW5faW5pdCgmcGFyc2VyLT50b2tlbiwgcGFyc2VyLAorCQkJCSAgICBU T0tFTl9UWVBFX05VTUJFUiwgdG9rZW5fcG9zLCBwYXJzZXItPnBvcyAtCisJCQkJICAgIHRva2Vu X3BvcywgdG9rZW5fbGluZSwgdG9rZW5fY29sKTsKKwkJCQlzdGF0ZSA9IFNUQVRFX0FDQ0VQVDsK KwkJCQlicmVhazsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFNUQVRFX0RFQ0lNQUw6CisJCQlz d2l0Y2ggKGMpIHsKKwkJCWNhc2UgJzAnOiBjYXNlICcxJzogY2FzZSAnMic6IGNhc2UgJzMnOiBj YXNlICc0JzoKKwkJCWNhc2UgJzUnOiBjYXNlICc2JzogY2FzZSAnNyc6IGNhc2UgJzgnOiBjYXNl ICc5JzoKKwkJCQlzdGF0ZSA9IFNUQVRFX0ZSQUNfRElHSVRTOworCQkJCWJyZWFrOworCQkJZGVm YXVsdDoKKwkJCQl0b2tlbl9pbml0KCZwYXJzZXItPnRva2VuLCBwYXJzZXIsCisJCQkJICAgIFRP S0VOX1RZUEVfRVJST1IsIHRva2VuX3BvcywgcGFyc2VyLT5wb3MgKyAxCisJCQkJICAgIC0gdG9r ZW5fcG9zLCB0b2tlbl9saW5lLCB0b2tlbl9jb2wpOworCQkJCXJldHVybiB0cnVlOworCQkJfQor CQkJYnJlYWs7CisJCWNhc2UgU1RBVEVfRlJBQ19ESUdJVFM6CisJCQlzd2l0Y2ggKGMpIHsKKwkJ CWNhc2UgJzAnOiBjYXNlICcxJzogY2FzZSAnMic6IGNhc2UgJzMnOiBjYXNlICc0JzoKKwkJCWNh c2UgJzUnOiBjYXNlICc2JzogY2FzZSAnNyc6IGNhc2UgJzgnOiBjYXNlICc5JzoKKwkJCQlicmVh azsKKwkJCWNhc2UgJ2UnOiBjYXNlICdFJzoKKwkJCQlzdGF0ZSA9IFNUQVRFX0VYUDsKKwkJCQli cmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJdG9rZW5faW5pdCgmcGFyc2VyLT50b2tlbiwgcGFyc2Vy LAorCQkJCSAgICBUT0tFTl9UWVBFX05VTUJFUiwgdG9rZW5fcG9zLCBwYXJzZXItPnBvcyAtCisJ CQkJICAgIHRva2VuX3BvcywgdG9rZW5fbGluZSwgdG9rZW5fY29sKTsKKwkJCQlzdGF0ZSA9IFNU QVRFX0FDQ0VQVDsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFNUQVRFX0VY UDoKKwkJCXN3aXRjaCAoYykgeworCQkJY2FzZSAnLSc6IGNhc2UgJysnOgorCQkJCXN0YXRlID0g U1RBVEVfRVhQX1NJR047CisJCQkJYnJlYWs7CisJCQljYXNlICcwJzogY2FzZSAnMSc6IGNhc2Ug JzInOiBjYXNlICczJzogY2FzZSAnNCc6CisJCQljYXNlICc1JzogY2FzZSAnNic6IGNhc2UgJzcn OiBjYXNlICc4JzogY2FzZSAnOSc6CisJCQkJc3RhdGUgPSBTVEFURV9FWFBfRElHSVRTOworCQkJ CWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQl0b2tlbl9pbml0KCZwYXJzZXItPnRva2VuLCBwYXJz ZXIsCisJCQkJICAgIFRPS0VOX1RZUEVfRVJST1IsIHRva2VuX3BvcywgcGFyc2VyLT5wb3MgKyAx CisJCQkJICAgIC0gdG9rZW5fcG9zLCB0b2tlbl9saW5lLCB0b2tlbl9jb2wpOworCQkJCXJldHVy biB0cnVlOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgU1RBVEVfRVhQX1NJR046CisJCQlzd2l0 Y2ggKGMpIHsKKwkJCWNhc2UgJzAnOiBjYXNlICcxJzogY2FzZSAnMic6IGNhc2UgJzMnOiBjYXNl ICc0JzoKKwkJCWNhc2UgJzUnOiBjYXNlICc2JzogY2FzZSAnNyc6IGNhc2UgJzgnOiBjYXNlICc5 JzoKKwkJCQlzdGF0ZSA9IFNUQVRFX0VYUF9ESUdJVFM7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0 OgorCQkJCXRva2VuX2luaXQoJnBhcnNlci0+dG9rZW4sIHBhcnNlciwKKwkJCQkgICAgVE9LRU5f VFlQRV9FUlJPUiwgdG9rZW5fcG9zLCBwYXJzZXItPnBvcyArIDEKKwkJCQkgICAgLSB0b2tlbl9w b3MsIHRva2VuX2xpbmUsIHRva2VuX2NvbCk7CisJCQkJcmV0dXJuIHRydWU7CisJCQl9CisJCQli cmVhazsKKwkJY2FzZSBTVEFURV9FWFBfRElHSVRTOgorCQkJc3dpdGNoIChjKSB7CisJCQljYXNl ICcwJzogY2FzZSAnMSc6IGNhc2UgJzInOiBjYXNlICczJzogY2FzZSAnNCc6CisJCQljYXNlICc1 JzogY2FzZSAnNic6IGNhc2UgJzcnOiBjYXNlICc4JzogY2FzZSAnOSc6CisJCQkJYnJlYWs7CisJ CQlkZWZhdWx0OgorCQkJCXRva2VuX2luaXQoJnBhcnNlci0+dG9rZW4sIHBhcnNlciwKKwkJCQkg ICAgVE9LRU5fVFlQRV9OVU1CRVIsIHRva2VuX3BvcywgcGFyc2VyLT5wb3MgLQorCQkJCSAgICB0 b2tlbl9wb3MsIHRva2VuX2xpbmUsIHRva2VuX2NvbCk7CisJCQkJc3RhdGUgPSBTVEFURV9BQ0NF UFQ7CisJCQkJYnJlYWs7CisJCQl9CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCW5vdF9yZWFj aGVkKCk7CisJCX0KKworCQlpZiAoc3RhdGUgIT0gU1RBVEVfQUNDRVBUKSB7CisJCQlpZiAoYyA9 PSAnXG4nKSB7CisJCQkJcGFyc2VyLT5saW5lKys7CisJCQkJcGFyc2VyLT5jb2wgPSAwOworCQkJ fSBlbHNlIHsKKwkJCQlwYXJzZXItPmNvbCsrOworCQkJfQorCQkJcGFyc2VyLT5wb3MrKzsKKwkJ fQorCX0KKwlyZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBib29sCXBhcnNlcl9wYXJzZV9hcnJh eShwYXJzZXJfdCAqcGFyc2VyKTsKK3N0YXRpYyBib29sCXBhcnNlcl9wYXJzZV9vYmplY3QocGFy c2VyX3QgKnBhcnNlcik7CisKK3N0YXRpYyBib29sCitwYXJzZXJfcGFyc2VfdmFsdWUocGFyc2Vy X3QgKnBhcnNlcikgeworCXN3aXRjaCAocGFyc2VyLT50b2tlbi50b2tlbl90eXBlKSB7CisJY2Fz ZSBUT0tFTl9UWVBFX05VTEw6CisJY2FzZSBUT0tFTl9UWVBFX0ZBTFNFOgorCWNhc2UgVE9LRU5f VFlQRV9UUlVFOgorCWNhc2UgVE9LRU5fVFlQRV9TVFJJTkc6CisJY2FzZSBUT0tFTl9UWVBFX05V TUJFUjoKKwkJcmV0dXJuIGZhbHNlOworCWNhc2UgVE9LRU5fVFlQRV9MQlJBQ0U6CisJCXJldHVy biBwYXJzZXJfcGFyc2Vfb2JqZWN0KHBhcnNlcik7CisJY2FzZSBUT0tFTl9UWVBFX0xCUkFDS0VU OgorCQlyZXR1cm4gcGFyc2VyX3BhcnNlX2FycmF5KHBhcnNlcik7CisJZGVmYXVsdDoKKwkJcmV0 dXJuIHRydWU7CisJfQorCW5vdF9yZWFjaGVkKCk7Cit9CisKK3N0YXRpYyBib29sCitwYXJzZXJf cGFyc2VfcGFpcihwYXJzZXJfdCAqcGFyc2VyKSB7CisJZXhwZWN0X2RfZXEocGFyc2VyLT50b2tl bi50b2tlbl90eXBlLCBUT0tFTl9UWVBFX1NUUklORywKKwkgICAgIlBhaXIgc2hvdWxkIHN0YXJ0 IHdpdGggc3RyaW5nIik7CisJaWYgKHBhcnNlcl90b2tlbml6ZShwYXJzZXIpKSB7CisJCXJldHVy biB0cnVlOworCX0KKwlzd2l0Y2ggKHBhcnNlci0+dG9rZW4udG9rZW5fdHlwZSkgeworCWNhc2Ug VE9LRU5fVFlQRV9DT0xPTjoKKwkJaWYgKHBhcnNlcl90b2tlbml6ZShwYXJzZXIpKSB7CisJCQly ZXR1cm4gdHJ1ZTsKKwkJfQorCQlyZXR1cm4gcGFyc2VyX3BhcnNlX3ZhbHVlKHBhcnNlcik7CisJ ZGVmYXVsdDoKKwkJcmV0dXJuIHRydWU7CisJfQorfQorCitzdGF0aWMgYm9vbAorcGFyc2VyX3Bh cnNlX3ZhbHVlcyhwYXJzZXJfdCAqcGFyc2VyKSB7CisJaWYgKHBhcnNlcl9wYXJzZV92YWx1ZShw YXJzZXIpKSB7CisJCXJldHVybiB0cnVlOworCX0KKworCXdoaWxlICh0cnVlKSB7CisJCWlmIChw YXJzZXJfdG9rZW5pemUocGFyc2VyKSkgeworCQkJcmV0dXJuIHRydWU7CisJCX0KKwkJc3dpdGNo IChwYXJzZXItPnRva2VuLnRva2VuX3R5cGUpIHsKKwkJY2FzZSBUT0tFTl9UWVBFX0NPTU1BOgor CQkJaWYgKHBhcnNlcl90b2tlbml6ZShwYXJzZXIpKSB7CisJCQkJcmV0dXJuIHRydWU7CisJCQl9 CisJCQlpZiAocGFyc2VyX3BhcnNlX3ZhbHVlKHBhcnNlcikpIHsKKwkJCQlyZXR1cm4gdHJ1ZTsK KwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFRPS0VOX1RZUEVfUkJSQUNLRVQ6CisJCQlyZXR1cm4g ZmFsc2U7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCX0KK30KKworc3RhdGlj IGJvb2wKK3BhcnNlcl9wYXJzZV9hcnJheShwYXJzZXJfdCAqcGFyc2VyKSB7CisJZXhwZWN0X2Rf ZXEocGFyc2VyLT50b2tlbi50b2tlbl90eXBlLCBUT0tFTl9UWVBFX0xCUkFDS0VULAorCSAgICAi QXJyYXkgc2hvdWxkIHN0YXJ0IHdpdGggWyIpOworCWlmIChwYXJzZXJfdG9rZW5pemUocGFyc2Vy KSkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9CisJc3dpdGNoIChwYXJzZXItPnRva2VuLnRva2VuX3R5 cGUpIHsKKwljYXNlIFRPS0VOX1RZUEVfUkJSQUNLRVQ6CisJCXJldHVybiBmYWxzZTsKKwlkZWZh dWx0OgorCQlyZXR1cm4gcGFyc2VyX3BhcnNlX3ZhbHVlcyhwYXJzZXIpOworCX0KKwlub3RfcmVh Y2hlZCgpOworfQorCitzdGF0aWMgYm9vbAorcGFyc2VyX3BhcnNlX3BhaXJzKHBhcnNlcl90ICpw YXJzZXIpIHsKKwlleHBlY3RfZF9lcShwYXJzZXItPnRva2VuLnRva2VuX3R5cGUsIFRPS0VOX1RZ UEVfU1RSSU5HLAorCSAgICAiT2JqZWN0IHNob3VsZCBzdGFydCB3aXRoIHN0cmluZyIpOworCWlm IChwYXJzZXJfcGFyc2VfcGFpcihwYXJzZXIpKSB7CisJCXJldHVybiB0cnVlOworCX0KKworCXdo aWxlICh0cnVlKSB7CisJCWlmIChwYXJzZXJfdG9rZW5pemUocGFyc2VyKSkgeworCQkJcmV0dXJu IHRydWU7CisJCX0KKwkJc3dpdGNoIChwYXJzZXItPnRva2VuLnRva2VuX3R5cGUpIHsKKwkJY2Fz ZSBUT0tFTl9UWVBFX0NPTU1BOgorCQkJaWYgKHBhcnNlcl90b2tlbml6ZShwYXJzZXIpKSB7CisJ CQkJcmV0dXJuIHRydWU7CisJCQl9CisJCQlzd2l0Y2ggKHBhcnNlci0+dG9rZW4udG9rZW5fdHlw ZSkgeworCQkJY2FzZSBUT0tFTl9UWVBFX1NUUklORzoKKwkJCQlpZiAocGFyc2VyX3BhcnNlX3Bh aXIocGFyc2VyKSkgeworCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQlk ZWZhdWx0OgorCQkJCXJldHVybiB0cnVlOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgVE9LRU5f VFlQRV9SQlJBQ0U6CisJCQlyZXR1cm4gZmFsc2U7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gdHJ1 ZTsKKwkJfQorCX0KK30KKworc3RhdGljIGJvb2wKK3BhcnNlcl9wYXJzZV9vYmplY3QocGFyc2Vy X3QgKnBhcnNlcikgeworCWV4cGVjdF9kX2VxKHBhcnNlci0+dG9rZW4udG9rZW5fdHlwZSwgVE9L RU5fVFlQRV9MQlJBQ0UsCisJICAgICJPYmplY3Qgc2hvdWxkIHN0YXJ0IHdpdGggeyIpOworCWlm IChwYXJzZXJfdG9rZW5pemUocGFyc2VyKSkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9CisJc3dpdGNo IChwYXJzZXItPnRva2VuLnRva2VuX3R5cGUpIHsKKwljYXNlIFRPS0VOX1RZUEVfU1RSSU5HOgor CQlyZXR1cm4gcGFyc2VyX3BhcnNlX3BhaXJzKHBhcnNlcik7CisJY2FzZSBUT0tFTl9UWVBFX1JC UkFDRToKKwkJcmV0dXJuIGZhbHNlOworCWRlZmF1bHQ6CisJCXJldHVybiB0cnVlOworCX0KKwlu b3RfcmVhY2hlZCgpOworfQorCitzdGF0aWMgYm9vbAorcGFyc2VyX3BhcnNlKHBhcnNlcl90ICpw YXJzZXIpIHsKKwlpZiAocGFyc2VyX3Rva2VuaXplKHBhcnNlcikpIHsKKwkJZ290byBsYWJlbF9l cnJvcjsKKwl9CisJaWYgKHBhcnNlcl9wYXJzZV92YWx1ZShwYXJzZXIpKSB7CisJCWdvdG8gbGFi ZWxfZXJyb3I7CisJfQorCisJaWYgKHBhcnNlcl90b2tlbml6ZShwYXJzZXIpKSB7CisJCWdvdG8g bGFiZWxfZXJyb3I7CisJfQorCXN3aXRjaCAocGFyc2VyLT50b2tlbi50b2tlbl90eXBlKSB7CisJ Y2FzZSBUT0tFTl9UWVBFX0VPSToKKwkJcmV0dXJuIGZhbHNlOworCWRlZmF1bHQ6CisJCWdvdG8g bGFiZWxfZXJyb3I7CisJfQorCW5vdF9yZWFjaGVkKCk7CisKK2xhYmVsX2Vycm9yOgorCXRva2Vu X2Vycm9yKCZwYXJzZXItPnRva2VuKTsKKwlyZXR1cm4gdHJ1ZTsKK30KKworVEVTVF9CRUdJTih0 ZXN0X2pzb25fcGFyc2VyKSB7CisJc2l6ZV90IGk7CisJY29uc3QgY2hhciAqaW52YWxpZF9pbnB1 dHNbXSA9IHsKKwkJLyogVG9rZW5pemVyIGVycm9yIGNhc2UgdGVzdHMuICovCisJCSJ7IFwic3Ry aW5nXCI6IFggfSIsCisJCSJ7IFwic3RyaW5nXCI6IG5YbGwgfSIsCisJCSJ7IFwic3RyaW5nXCI6 IG51WGwgfSIsCisJCSJ7IFwic3RyaW5nXCI6IG51bFggfSIsCisJCSJ7IFwic3RyaW5nXCI6IG51 bGxYIH0iLAorCQkieyBcInN0cmluZ1wiOiBmWGxzZSB9IiwKKwkJInsgXCJzdHJpbmdcIjogZmFY c2UgfSIsCisJCSJ7IFwic3RyaW5nXCI6IGZhbFhlIH0iLAorCQkieyBcInN0cmluZ1wiOiBmYWxz WCB9IiwKKwkJInsgXCJzdHJpbmdcIjogZmFsc2VYIH0iLAorCQkieyBcInN0cmluZ1wiOiB0WHVl IH0iLAorCQkieyBcInN0cmluZ1wiOiB0clhlIH0iLAorCQkieyBcInN0cmluZ1wiOiB0cnVYIH0i LAorCQkieyBcInN0cmluZ1wiOiB0cnVlWCB9IiwKKwkJInsgXCJzdHJpbmdcIjogXCJcblwiIH0i LAorCQkieyBcInN0cmluZ1wiOiBcIlxcelwiIH0iLAorCQkieyBcInN0cmluZ1wiOiBcIlxcdVgw MDBcIiB9IiwKKwkJInsgXCJzdHJpbmdcIjogXCJcXHUwWDAwXCIgfSIsCisJCSJ7IFwic3RyaW5n XCI6IFwiXFx1MDBYMFwiIH0iLAorCQkieyBcInN0cmluZ1wiOiBcIlxcdTAwMFhcIiB9IiwKKwkJ InsgXCJzdHJpbmdcIjogLVggfSIsCisJCSJ7IFwic3RyaW5nXCI6IDAuWCB9IiwKKwkJInsgXCJz dHJpbmdcIjogMC4wZVggfSIsCisJCSJ7IFwic3RyaW5nXCI6IDAuMGUrWCB9IiwKKworCQkvKiBQ YXJzZXIgZXJyb3IgdGVzdCBjYXNlcy4gKi8KKwkJIntcInN0cmluZ1wiOiB9IiwKKwkJIntcInN0 cmluZ1wiIH0iLAorCQkie1wic3RyaW5nXCI6IFsgMCB9IiwKKwkJIntcInN0cmluZ1wiOiB7XCJh XCI6MCwgMSB9IH0iLAorCQkie1wic3RyaW5nXCI6IHtcImFcIjowOiB9IH0iLAorCQkieyIsCisJ CSJ7fXsiLAorCX07CisJY29uc3QgY2hhciAqdmFsaWRfaW5wdXRzW10gPSB7CisJCS8qIFRva2Vu IHRlc3RzLiAqLworCQkibnVsbCIsCisJCSJmYWxzZSIsCisJCSJ0cnVlIiwKKwkJInt9IiwKKwkJ IntcImFcIjogMH0iLAorCQkiW10iLAorCQkiWzAsIDFdIiwKKwkJIjAiLAorCQkiMSIsCisJCSIx MCIsCisJCSItMTAiLAorCQkiMTAuMjMiLAorCQkiMTAuMjNlNCIsCisJCSIxMC4yM2UtNCIsCisJ CSIxMC4yM2UrNCIsCisJCSIxMC4yM0U0IiwKKwkJIjEwLjIzRS00IiwKKwkJIjEwLjIzRSs0IiwK KwkJIi0xMC4yMyIsCisJCSItMTAuMjNlNCIsCisJCSItMTAuMjNlLTQiLAorCQkiLTEwLjIzZSs0 IiwKKwkJIi0xMC4yM0U0IiwKKwkJIi0xMC4yM0UtNCIsCisJCSItMTAuMjNFKzQiLAorCQkiXCJ2 YWx1ZVwiIiwKKwkJIlwiIFxcXCIgXFwvIFxcYiBcXG4gXFxyIFxcdCBcXHUwYWJjIFxcdTFERUYg XCIiLAorCisJCS8qIFBhcnNlciB0ZXN0IHdpdGggdmFyaW91cyBuZXN0aW5nLiAqLworCQkie1wi YVwiOm51bGwsIFwiYlwiOlsxLFt7XCJjXCI6Mn0sM11dLCBcImRcIjp7XCJlXCI6dHJ1ZX19IiwK Kwl9OworCisJZm9yIChpID0gMDsgaSA8IHNpemVvZihpbnZhbGlkX2lucHV0cykvc2l6ZW9mKGNv bnN0IGNoYXIgKik7IGkrKykgeworCQljb25zdCBjaGFyICppbnB1dCA9IGludmFsaWRfaW5wdXRz W2ldOworCQlwYXJzZXJfdCBwYXJzZXI7CisJCXBhcnNlcl9pbml0KCZwYXJzZXIsIGZhbHNlKTsK KwkJZXhwZWN0X2ZhbHNlKHBhcnNlcl9hcHBlbmQoJnBhcnNlciwgaW5wdXQpLAorCQkgICAgIlVu ZXhwZWN0ZWQgaW5wdXQgYXBwZW5kaW5nIGZhaWx1cmUiKTsKKwkJZXhwZWN0X3RydWUocGFyc2Vy X3BhcnNlKCZwYXJzZXIpLAorCQkgICAgIlVuZXhwZWN0ZWQgcGFyc2Ugc3VjY2VzcyBmb3IgaW5w dXQ6ICVzIiwgaW5wdXQpOworCQlwYXJzZXJfZmluaSgmcGFyc2VyKTsKKwl9CisKKwlmb3IgKGkg PSAwOyBpIDwgc2l6ZW9mKHZhbGlkX2lucHV0cykvc2l6ZW9mKGNvbnN0IGNoYXIgKik7IGkrKykg eworCQljb25zdCBjaGFyICppbnB1dCA9IHZhbGlkX2lucHV0c1tpXTsKKwkJcGFyc2VyX3QgcGFy c2VyOworCQlwYXJzZXJfaW5pdCgmcGFyc2VyLCB0cnVlKTsKKwkJZXhwZWN0X2ZhbHNlKHBhcnNl cl9hcHBlbmQoJnBhcnNlciwgaW5wdXQpLAorCQkgICAgIlVuZXhwZWN0ZWQgaW5wdXQgYXBwZW5k aW5nIGZhaWx1cmUiKTsKKwkJZXhwZWN0X2ZhbHNlKHBhcnNlcl9wYXJzZSgmcGFyc2VyKSwKKwkJ ICAgICJVbmV4cGVjdGVkIHBhcnNlIGVycm9yIGZvciBpbnB1dDogJXMiLCBpbnB1dCk7CisJCXBh cnNlcl9maW5pKCZwYXJzZXIpOworCX0KK30KK1RFU1RfRU5ECisKK3ZvaWQKK3dyaXRlX2NiKHZv aWQgKm9wYXF1ZSwgY29uc3QgY2hhciAqc3RyKSB7CisJcGFyc2VyX3QgKnBhcnNlciA9IChwYXJz ZXJfdCAqKW9wYXF1ZTsKKwlpZiAocGFyc2VyX2FwcGVuZChwYXJzZXIsIHN0cikpIHsKKwkJdGVz dF9mYWlsKCJVbmV4cGVjdGVkIGlucHV0IGFwcGVuZGluZyBmYWlsdXJlIik7CisJfQorfQorCitU RVNUX0JFR0lOKHRlc3Rfc3RhdHNfcHJpbnRfanNvbikgeworCWNvbnN0IGNoYXIgKm9wdHNbXSA9 IHsKKwkJIkoiLAorCQkiSmciLAorCQkiSm0iLAorCQkiSmQiLAorCQkiSm1kIiwKKwkJIkpnZCIs CisJCSJKZ20iLAorCQkiSmdtZCIsCisJCSJKYSIsCisJCSJKYiIsCisJCSJKbCIsCisJCSJKeCIs CisJCSJKYmwiLAorCQkiSmFsIiwKKwkJIkphYiIsCisJCSJKYWJsIiwKKwkJIkpheCIsCisJCSJK YngiLAorCQkiSmx4IiwKKwkJIkphYmx4IiwKKwkJIkpnbWRhYmx4IiwKKwl9OworCXVuc2lnbmVk IGFyZW5hX2luZCwgaTsKKworCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKKwkJdW5zaWduZWQg ajsKKworCQlzd2l0Y2ggKGkpIHsKKwkJY2FzZSAwOgorCQkJYnJlYWs7CisJCWNhc2UgMTogewor CQkJc2l6ZV90IHN6ID0gc2l6ZW9mKGFyZW5hX2luZCk7CisJCQlleHBlY3RfZF9lcShtYWxsY3Rs KCJhcmVuYXMuY3JlYXRlIiwgKHZvaWQgKikmYXJlbmFfaW5kLAorCQkJICAgICZzeiwgTlVMTCwg MCksIDAsICJVbmV4cGVjdGVkIG1hbGxjdGwgZmFpbHVyZSIpOworCQkJYnJlYWs7CisJCX0gY2Fz ZSAyOiB7CisJCQlzaXplX3QgbWliWzNdOworCQkJc2l6ZV90IG1pYmxlbiA9IHNpemVvZihtaWIp L3NpemVvZihzaXplX3QpOworCQkJZXhwZWN0X2RfZXEobWFsbGN0bG5hbWV0b21pYigiYXJlbmEu MC5kZXN0cm95IiwKKwkJCSAgICBtaWIsICZtaWJsZW4pLCAwLAorCQkJICAgICJVbmV4cGVjdGVk IG1hbGxjdGxuYW1ldG9taWIgZmFpbHVyZSIpOworCQkJbWliWzFdID0gYXJlbmFfaW5kOworCQkJ ZXhwZWN0X2RfZXEobWFsbGN0bGJ5bWliKG1pYiwgbWlibGVuLCBOVUxMLCBOVUxMLCBOVUxMLAor CQkJICAgIDApLCAwLCAiVW5leHBlY3RlZCBtYWxsY3RsYnltaWIgZmFpbHVyZSIpOworCQkJYnJl YWs7CisJCX0gZGVmYXVsdDoKKwkJCW5vdF9yZWFjaGVkKCk7CisJCX0KKworCQlmb3IgKGogPSAw OyBqIDwgc2l6ZW9mKG9wdHMpL3NpemVvZihjb25zdCBjaGFyICopOyBqKyspIHsKKwkJCXBhcnNl cl90IHBhcnNlcjsKKworCQkJcGFyc2VyX2luaXQoJnBhcnNlciwgdHJ1ZSk7CisJCQltYWxsb2Nf c3RhdHNfcHJpbnQod3JpdGVfY2IsICh2b2lkICopJnBhcnNlciwgb3B0c1tqXSk7CisJCQlleHBl Y3RfZmFsc2UocGFyc2VyX3BhcnNlKCZwYXJzZXIpLAorCQkJICAgICJVbmV4cGVjdGVkIHBhcnNl IGVycm9yLCBvcHRzPVwiJXNcIiIsIG9wdHNbal0pOworCQkJcGFyc2VyX2ZpbmkoJnBhcnNlcik7 CisJCX0KKwl9Cit9CitURVNUX0VORAorCitpbnQKK21haW4odm9pZCkgeworCXJldHVybiB0ZXN0 KAorCSAgICB0ZXN0X2pzb25fcGFyc2VyLAorCSAgICB0ZXN0X3N0YXRzX3ByaW50X2pzb24pOwor fQoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rl c3QvdW5pdC9zei5jIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVz dC91bml0L3N6LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGFlMDRiOQot LS0gL2Rldi9udWxsCisrKyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4w L3Rlc3QvdW5pdC9zei5jCkBAIC0wLDAgKzEsNjYgQEAKKyNpbmNsdWRlICJ0ZXN0L2plbWFsbG9j X3Rlc3QuaCIKKworVEVTVF9CRUdJTih0ZXN0X3N6X3BzejJpbmQpIHsKKwkvKgorCSAqIFRlc3Rp bmcgcGFnZSBzaXplIGNsYXNzZXMgd2hpY2ggcmVzaWRlIHByaW9yIHRvIHRoZSByZWd1bGFyIGdy b3VwCisJICogd2l0aCBhbGwgc2l6ZSBjbGFzc2VzIGRpdmlzaWJsZSBieSBwYWdlIHNpemUuCisJ ICogRm9yIHg4Nl82NCBMaW51eCwgaXQncyA0MDk2LCA4MTkyLCAxMjI4OCwgMTYzODQsIHdpdGgg Y29ycmVzcG9uZGluZworCSAqIHBzemluZCAwLCAxLCAyIGFuZCAzLgorCSAqLworCWZvciAoc2l6 ZV90IGkgPSAwOyBpIDwgU0NfTkdST1VQOyBpKyspIHsKKwkJZm9yIChzaXplX3QgcHN6ID0gaSAq IFBBR0UgKyAxOyBwc3ogPD0gKGkgKyAxKSAqIFBBR0U7IHBzeisrKSB7CisJCQlwc3ppbmRfdCBp bmQgPSBzel9wc3oyaW5kKHBzeik7CisJCQlleHBlY3RfenVfZXEoaW5kLCBpLCAiR290ICV1IGFz IHN6X3BzejJpbmQgb2YgJXp1IiwgaW5kLAorCQkJICAgIHBzeik7CisJCX0KKwl9CisKKwlzY19k YXRhX3QgZGF0YTsKKwltZW1zZXQoJmRhdGEsIDAsIHNpemVvZihkYXRhKSk7CisJc2NfZGF0YV9p bml0KCZkYXRhKTsKKwkvKgorCSAqICdiYXNlJyBpcyB0aGUgYmFzZSBvZiB0aGUgZmlyc3QgcmVn dWxhciBncm91cCB3aXRoIGFsbCBzaXplIGNsYXNzZXMKKwkgKiBkaXZpc2libGUgYnkgcGFnZSBz aXplLgorCSAqIEZvciB4ODZfNjQgTGludXgsIGl0J3MgMTYzODQsIGFuZCBiYXNlX2luZCBpcyAz Ni4KKwkgKi8KKwlzaXplX3QgYmFzZV9wc3ogPSAxIDw8IChTQ19MR19OR1JPVVAgKyBMR19QQUdF KTsKKwlzaXplX3QgYmFzZV9pbmQgPSAwOworCXdoaWxlIChiYXNlX2luZCA8IFNDX05TSVpFUyAm JgorCSAgICByZWdfc2l6ZV9jb21wdXRlKGRhdGEuc2NbYmFzZV9pbmRdLmxnX2Jhc2UsCisJCWRh dGEuc2NbYmFzZV9pbmRdLmxnX2RlbHRhLAorCQlkYXRhLnNjW2Jhc2VfaW5kXS5uZGVsdGEpIDwg YmFzZV9wc3opIHsKKwkJYmFzZV9pbmQrKzsKKwl9CisJZXhwZWN0X3p1X2VxKAorCSAgICByZWdf c2l6ZV9jb21wdXRlKGRhdGEuc2NbYmFzZV9pbmRdLmxnX2Jhc2UsCisJCWRhdGEuc2NbYmFzZV9p bmRdLmxnX2RlbHRhLCBkYXRhLnNjW2Jhc2VfaW5kXS5uZGVsdGEpLAorCSAgICBiYXNlX3Bzeiwg IlNpemUgY2xhc3MgZXF1YWwgdG8gJXp1IG5vdCBmb3VuZCIsIGJhc2VfcHN6KTsKKwkvKgorCSAq IFRlc3QgZGlmZmVyZW50IHNpemVzIGZhbGxpbmcgaW50byBncm91cHMgYWZ0ZXIgdGhlICdiYXNl Jy4gVGhlCisJICogaW5jcmVtZW50IGlzIFBBR0UgLyAzIGZvciB0aGUgZXhlY3V0aW9uIHNwZWVk IHB1cnBvc2UuCisJICovCisJYmFzZV9pbmQgLT0gU0NfTkdST1VQOworCWZvciAoc2l6ZV90IHBz eiA9IGJhc2VfcHN6OyBwc3ogPD0gNjQgKiAxMDI0ICogMTAyNDsgcHN6ICs9IFBBR0UgLyAzKSB7 CisJCXBzemluZF90IGluZCA9IHN6X3BzejJpbmQocHN6KTsKKwkJc2NfdCBndF9zYyA9IGRhdGEu c2NbaW5kICsgYmFzZV9pbmRdOworCQlleHBlY3RfenVfZ3QocHN6LAorCQkgICAgcmVnX3NpemVf Y29tcHV0ZShndF9zYy5sZ19iYXNlLCBndF9zYy5sZ19kZWx0YSwKKwkJCWd0X3NjLm5kZWx0YSks CisJCSAgICAiR290ICV1IGFzIHN6X3BzejJpbmQgb2YgJXp1IiwgaW5kLCBwc3opOworCQlzY190 IGxlX3NjID0gZGF0YS5zY1tpbmQgKyBiYXNlX2luZCArIDFdOworCQlleHBlY3RfenVfbGUocHN6 LAorCQkgICAgcmVnX3NpemVfY29tcHV0ZShsZV9zYy5sZ19iYXNlLCBsZV9zYy5sZ19kZWx0YSwK KwkJCWxlX3NjLm5kZWx0YSksCisJCSAgICAiR290ICV1IGFzIHN6X3BzejJpbmQgb2YgJXp1Iiwg aW5kLCBwc3opOworCX0KKworCXBzemluZF90IG1heF9pbmQgPSBzel9wc3oyaW5kKFNDX0xBUkdF X01BWENMQVNTICsgMSk7CisJZXhwZWN0X2x1X2VxKG1heF9pbmQsIFNDX05QU0laRVMsCisJICAg ICJHb3QgJXUgYXMgc3pfcHN6MmluZCBvZiAlbGx1IiwgbWF4X2luZCwgU0NfTEFSR0VfTUFYQ0xB U1MpOworfQorVEVTVF9FTkQKKworaW50CittYWluKHZvaWQpIHsKKwlyZXR1cm4gdGVzdCh0ZXN0 X3N6X3BzejJpbmQpOworfQoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2pl bWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC90Y2FjaGVfbWF4LmMgYi8zODktZHMtYmFzZS0zLjMuMC1i dWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvdGNhY2hlX21heC5jCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmNjU3YzgKLS0tIC9kZXYvbnVsbAorKysgYi8zODktZHMt YmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvdGNhY2hlX21heC5jCkBA IC0wLDAgKzEsMTc1IEBACisjaW5jbHVkZSAidGVzdC9qZW1hbGxvY190ZXN0LmgiCisjaW5jbHVk ZSAidGVzdC9zYW4uaCIKKworY29uc3QgY2hhciAqbWFsbG9jX2NvbmYgPSBURVNUX1NBTl9VQUZf QUxJR05fRElTQUJMRTsKKworZW51bSB7CisJYWxsb2Nfb3B0aW9uX3N0YXJ0ID0gMCwKKwl1c2Vf bWFsbG9jID0gMCwKKwl1c2VfbWFsbG9jeCwKKwlhbGxvY19vcHRpb25fZW5kCit9OworCitlbnVt IHsKKwlkYWxsb2Nfb3B0aW9uX3N0YXJ0ID0gMCwKKwl1c2VfZnJlZSA9IDAsCisJdXNlX2RhbGxv Y3gsCisJdXNlX3NkYWxsb2N4LAorCWRhbGxvY19vcHRpb25fZW5kCit9OworCitzdGF0aWMgdW5z aWduZWQgYWxsb2Nfb3B0aW9uLCBkYWxsb2Nfb3B0aW9uOworc3RhdGljIHNpemVfdCB0Y2FjaGVf bWF4OworCitzdGF0aWMgdm9pZCAqCithbGxvY19mdW5jKHNpemVfdCBzeikgeworCXZvaWQgKnJl dDsKKworCXN3aXRjaCAoYWxsb2Nfb3B0aW9uKSB7CisJY2FzZSB1c2VfbWFsbG9jOgorCQlyZXQg PSBtYWxsb2Moc3opOworCQlicmVhazsKKwljYXNlIHVzZV9tYWxsb2N4OgorCQlyZXQgPSBtYWxs b2N4KHN6LCAwKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJdW5yZWFjaGFibGUoKTsKKwl9CisJ ZXhwZWN0X3B0cl9ub3RfbnVsbChyZXQsICJVbmV4cGVjdGVkIG1hbGxvYyAvIG1hbGxvY3ggZmFp bHVyZSIpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQKK2RhbGxvY19mdW5jKHZv aWQgKnB0ciwgc2l6ZV90IHN6KSB7CisJc3dpdGNoIChkYWxsb2Nfb3B0aW9uKSB7CisJY2FzZSB1 c2VfZnJlZToKKwkJZnJlZShwdHIpOworCQlicmVhazsKKwljYXNlIHVzZV9kYWxsb2N4OgorCQlk YWxsb2N4KHB0ciwgMCk7CisJCWJyZWFrOworCWNhc2UgdXNlX3NkYWxsb2N4OgorCQlzZGFsbG9j eChwdHIsIHN6LCAwKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJdW5yZWFjaGFibGUoKTsKKwl9 Cit9CisKK3N0YXRpYyBzaXplX3QKK3RjYWNoZV9ieXRlc19yZWFkKHZvaWQpIHsKKwl1aW50NjRf dCBlcG9jaDsKKwlhc3NlcnRfZF9lcShtYWxsY3RsKCJlcG9jaCIsIE5VTEwsIE5VTEwsICh2b2lk ICopJmVwb2NoLCBzaXplb2YoZXBvY2gpKSwKKwkgICAgMCwgIlVuZXhwZWN0ZWQgbWFsbGN0bCgp IGZhaWx1cmUiKTsKKworCXNpemVfdCB0Y2FjaGVfYnl0ZXM7CisJc2l6ZV90IHN6ID0gc2l6ZW9m KHRjYWNoZV9ieXRlcyk7CisJYXNzZXJ0X2RfZXEobWFsbGN0bCgKKwkgICAgInN0YXRzLmFyZW5h cy4iIFNUUklOR0lGWShNQUxMQ1RMX0FSRU5BU19BTEwpICIudGNhY2hlX2J5dGVzIiwKKwkgICAg JnRjYWNoZV9ieXRlcywgJnN6LCBOVUxMLCAwKSwgMCwgIlVuZXhwZWN0ZWQgbWFsbGN0bCBmYWls dXJlIik7CisKKwlyZXR1cm4gdGNhY2hlX2J5dGVzOworfQorCitzdGF0aWMgdm9pZAordGNhY2hl X2J5dGVzX2NoZWNrX3VwZGF0ZShzaXplX3QgKnByZXYsIHNzaXplX3QgZGlmZikgeworCXNpemVf dCB0Y2FjaGVfYnl0ZXMgPSB0Y2FjaGVfYnl0ZXNfcmVhZCgpOworCWV4cGVjdF96dV9lcSh0Y2Fj aGVfYnl0ZXMsICpwcmV2ICsgZGlmZiwgInRjYWNoZSBieXRlcyBub3QgZXhwZWN0ZWQiKTsKKwor CSpwcmV2ICs9IGRpZmY7Cit9CisKK3N0YXRpYyB2b2lkCit0ZXN0X3RjYWNoZV9ieXRlc19hbGxv YyhzaXplX3QgYWxsb2Nfc2l6ZSkgeworCWV4cGVjdF9kX2VxKG1hbGxjdGwoInRocmVhZC50Y2Fj aGUuZmx1c2giLCBOVUxMLCBOVUxMLCBOVUxMLCAwKSwgMCwKKwkgICAgIlVuZXhwZWN0ZWQgdGNh Y2hlIGZsdXNoIGZhaWx1cmUiKTsKKworCXNpemVfdCB1c2l6ZSA9IHN6X3MydShhbGxvY19zaXpl KTsKKwkvKiBObyBjaGFuZ2UgaXMgZXhwZWN0ZWQgaWYgdXNpemUgaXMgb3V0c2lkZSBvZiB0Y2Fj aGVfbWF4IHJhbmdlLiAqLworCWJvb2wgY2FjaGVkID0gKHVzaXplIDw9IHRjYWNoZV9tYXgpOwor CXNzaXplX3QgZGlmZiA9IGNhY2hlZCA/IHVzaXplIDogMDsKKworCXZvaWQgKnB0cjEgPSBhbGxv Y19mdW5jKGFsbG9jX3NpemUpOworCXZvaWQgKnB0cjIgPSBhbGxvY19mdW5jKGFsbG9jX3NpemUp OworCisJc2l6ZV90IGJ5dGVzID0gdGNhY2hlX2J5dGVzX3JlYWQoKTsKKwlkYWxsb2NfZnVuYyhw dHIyLCBhbGxvY19zaXplKTsKKwkvKiBFeHBlY3QgdGNhY2hlX2J5dGVzIGluY3JlYXNlIGFmdGVy IGRhbGxvYyAqLworCXRjYWNoZV9ieXRlc19jaGVja191cGRhdGUoJmJ5dGVzLCBkaWZmKTsKKwor CWRhbGxvY19mdW5jKHB0cjEsIGFsbG9jX3NpemUpOworCS8qIEV4cGVjdCB0Y2FjaGVfYnl0ZXMg aW5jcmVhc2UgYWdhaW4gKi8KKwl0Y2FjaGVfYnl0ZXNfY2hlY2tfdXBkYXRlKCZieXRlcywgZGlm Zik7CisKKwl2b2lkICpwdHIzID0gYWxsb2NfZnVuYyhhbGxvY19zaXplKTsKKwlpZiAoY2FjaGVk KSB7CisJCWV4cGVjdF9wdHJfZXEocHRyMSwgcHRyMywgIlVuZXhwZWN0ZWQgY2FjaGVkIHB0ciIp OworCX0KKwkvKiBFeHBlY3QgdGNhY2hlX2J5dGVzIGRlY3JlYXNlIGFmdGVyIGFsbG9jICovCisJ dGNhY2hlX2J5dGVzX2NoZWNrX3VwZGF0ZSgmYnl0ZXMsIC1kaWZmKTsKKworCXZvaWQgKnB0cjQg PSBhbGxvY19mdW5jKGFsbG9jX3NpemUpOworCWlmIChjYWNoZWQpIHsKKwkJZXhwZWN0X3B0cl9l cShwdHIyLCBwdHI0LCAiVW5leHBlY3RlZCBjYWNoZWQgcHRyIik7CisJfQorCS8qIEV4cGVjdCB0 Y2FjaGVfYnl0ZXMgZGVjcmVhc2UgYWdhaW4gKi8KKwl0Y2FjaGVfYnl0ZXNfY2hlY2tfdXBkYXRl KCZieXRlcywgLWRpZmYpOworCisJZGFsbG9jX2Z1bmMocHRyMywgYWxsb2Nfc2l6ZSk7CisJdGNh Y2hlX2J5dGVzX2NoZWNrX3VwZGF0ZSgmYnl0ZXMsIGRpZmYpOworCWRhbGxvY19mdW5jKHB0cjQs IGFsbG9jX3NpemUpOworCXRjYWNoZV9ieXRlc19jaGVja191cGRhdGUoJmJ5dGVzLCBkaWZmKTsK K30KKworc3RhdGljIHZvaWQKK3Rlc3RfdGNhY2hlX21heF9pbXBsKHZvaWQpIHsKKwlzaXplX3Qg c3o7CisJc3ogPSBzaXplb2YodGNhY2hlX21heCk7CisJYXNzZXJ0X2RfZXEobWFsbGN0bCgiYXJl bmFzLnRjYWNoZV9tYXgiLCAodm9pZCAqKSZ0Y2FjaGVfbWF4LAorCSAgICAmc3osIE5VTEwsIDAp LCAwLCAiVW5leHBlY3RlZCBtYWxsY3RsKCkgZmFpbHVyZSIpOworCisJLyogb3B0LnRjYWNoZV9t YXggc2V0IHRvIDEwMjQgaW4gdGNhY2hlX21heC5zaCAqLworCWV4cGVjdF96dV9lcSh0Y2FjaGVf bWF4LCAxMDI0LCAidGNhY2hlX21heCBub3QgZXhwZWN0ZWQiKTsKKworCXRlc3RfdGNhY2hlX2J5 dGVzX2FsbG9jKDEpOworCXRlc3RfdGNhY2hlX2J5dGVzX2FsbG9jKHRjYWNoZV9tYXggLSAxKTsK Kwl0ZXN0X3RjYWNoZV9ieXRlc19hbGxvYyh0Y2FjaGVfbWF4KTsKKwl0ZXN0X3RjYWNoZV9ieXRl c19hbGxvYyh0Y2FjaGVfbWF4ICsgMSk7CisKKwl0ZXN0X3RjYWNoZV9ieXRlc19hbGxvYyhQQUdF IC0gMSk7CisJdGVzdF90Y2FjaGVfYnl0ZXNfYWxsb2MoUEFHRSk7CisJdGVzdF90Y2FjaGVfYnl0 ZXNfYWxsb2MoUEFHRSArIDEpOworCisJc2l6ZV90IGxhcmdlOworCXN6ID0gc2l6ZW9mKGxhcmdl KTsKKwlhc3NlcnRfZF9lcShtYWxsY3RsKCJhcmVuYXMubGV4dGVudC4wLnNpemUiLCAodm9pZCAq KSZsYXJnZSwgJnN6LCBOVUxMLAorCSAgICAwKSwgMCwgIlVuZXhwZWN0ZWQgbWFsbGN0bCgpIGZh aWx1cmUiKTsKKworCXRlc3RfdGNhY2hlX2J5dGVzX2FsbG9jKGxhcmdlIC0gMSk7CisJdGVzdF90 Y2FjaGVfYnl0ZXNfYWxsb2MobGFyZ2UpOworCXRlc3RfdGNhY2hlX2J5dGVzX2FsbG9jKGxhcmdl ICsgMSk7Cit9CisKK1RFU1RfQkVHSU4odGVzdF90Y2FjaGVfbWF4KSB7CisJdGVzdF9za2lwX2lm KCFjb25maWdfc3RhdHMpOworCXRlc3Rfc2tpcF9pZighb3B0X3RjYWNoZSk7CisJdGVzdF9za2lw X2lmKG9wdF9wcm9mKTsKKwl0ZXN0X3NraXBfaWYoc2FuX3VhZl9kZXRlY3Rpb25fZW5hYmxlZCgp KTsKKworCWZvciAoYWxsb2Nfb3B0aW9uID0gYWxsb2Nfb3B0aW9uX3N0YXJ0OworCSAgICAgYWxs b2Nfb3B0aW9uIDwgYWxsb2Nfb3B0aW9uX2VuZDsKKwkgICAgIGFsbG9jX29wdGlvbisrKSB7CisJ CWZvciAoZGFsbG9jX29wdGlvbiA9IGRhbGxvY19vcHRpb25fc3RhcnQ7CisJCSAgICAgZGFsbG9j X29wdGlvbiA8IGRhbGxvY19vcHRpb25fZW5kOworCQkgICAgIGRhbGxvY19vcHRpb24rKykgewor CQkJdGVzdF90Y2FjaGVfbWF4X2ltcGwoKTsKKwkJfQorCX0KK30KK1RFU1RfRU5ECisKK2ludAor bWFpbih2b2lkKSB7CisJcmV0dXJuIHRlc3QodGVzdF90Y2FjaGVfbWF4KTsKK30KCmRpZmYgLS1n aXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvdGNh Y2hlX21heC5zaCBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3Qv dW5pdC90Y2FjaGVfbWF4LnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0 ODBkNzMKLS0tIC9kZXYvbnVsbAorKysgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxv Yy01LjMuMC90ZXN0L3VuaXQvdGNhY2hlX21heC5zaApAQCAtMCwwICsxLDMgQEAKKyMhL2Jpbi9z aAorCitleHBvcnQgTUFMTE9DX0NPTkY9InRjYWNoZV9tYXg6MTAyNCIKCmRpZmYgLS1naXQgYS8z ODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvdGVzdF9ob29r cy5jIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L3Rl c3RfaG9va3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Y2QyYjNiCi0t LSAvZGV2L251bGwKKysrIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAv dGVzdC91bml0L3Rlc3RfaG9va3MuYwpAQCAtMCwwICsxLDM4IEBACisjaW5jbHVkZSAidGVzdC9q ZW1hbGxvY190ZXN0LmgiCisKK3N0YXRpYyBib29sIGhvb2tfY2FsbGVkID0gZmFsc2U7CisKK3N0 YXRpYyB2b2lkCitob29rKCkgeworCWhvb2tfY2FsbGVkID0gdHJ1ZTsKK30KKworc3RhdGljIGlu dAorZnVuY190b19ob29rKGludCBhcmcxLCBpbnQgYXJnMikgeworCXJldHVybiBhcmcxICsgYXJn MjsKK30KKworI2RlZmluZSBmdW5jX3RvX2hvb2sgSkVNQUxMT0NfVEVTVF9IT09LKGZ1bmNfdG9f aG9vaywgdGVzdF9ob29rc19saWJjX2hvb2spCisKK1RFU1RfQkVHSU4odW5ob29rZWRfY2FsbCkg eworCXRlc3RfaG9va3NfbGliY19ob29rID0gTlVMTDsKKwlob29rX2NhbGxlZCA9IGZhbHNlOwor CWV4cGVjdF9kX2VxKDMsIGZ1bmNfdG9faG9vaygxLCAyKSwgIkhvb2tpbmcgY2hhbmdlZCByZXR1 cm4gdmFsdWUuIik7CisJZXhwZWN0X2ZhbHNlKGhvb2tfY2FsbGVkLCAiTnVsbGluZyBvdXQgaG9v ayBkaWRuJ3QgdGFrZS4iKTsKK30KK1RFU1RfRU5ECisKK1RFU1RfQkVHSU4oaG9va2VkX2NhbGwp IHsKKwl0ZXN0X2hvb2tzX2xpYmNfaG9vayA9ICZob29rOworCWhvb2tfY2FsbGVkID0gZmFsc2U7 CisJZXhwZWN0X2RfZXEoMywgZnVuY190b19ob29rKDEsIDIpLCAiSG9va2luZyBjaGFuZ2VkIHJl dHVybiB2YWx1ZS4iKTsKKwlleHBlY3RfdHJ1ZShob29rX2NhbGxlZCwgIkhvb2sgc2hvdWxkIGhh dmUgZXhlY3V0ZWQuIik7Cit9CitURVNUX0VORAorCitpbnQKK21haW4odm9pZCkgeworCXJldHVy biB0ZXN0KAorCSAgICB1bmhvb2tlZF9jYWxsLAorCSAgICBob29rZWRfY2FsbCk7Cit9CgpkaWZm IC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0 L3RocmVhZF9ldmVudC5jIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAv dGVzdC91bml0L3RocmVhZF9ldmVudC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAuLmUwYjg4YTkKLS0tIC9kZXYvbnVsbAorKysgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9q ZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvdGhyZWFkX2V2ZW50LmMKQEAgLTAsMCArMSwzNCBAQAor I2luY2x1ZGUgInRlc3QvamVtYWxsb2NfdGVzdC5oIgorCitURVNUX0JFR0lOKHRlc3RfbmV4dF9l dmVudF9mYXN0KSB7CisJdHNkX3QgKnRzZCA9IHRzZF9mZXRjaCgpOworCXRlX2N0eF90IGN0eDsK Kwl0ZV9jdHhfZ2V0KHRzZCwgJmN0eCwgdHJ1ZSk7CisKKwl0ZV9jdHhfbGFzdF9ldmVudF9zZXQo JmN0eCwgMCk7CisJdGVfY3R4X2N1cnJlbnRfYnl0ZXNfc2V0KCZjdHgsIFRFX05FWFRfRVZFTlRf RkFTVF9NQVggLSA4VSk7CisJdGVfY3R4X25leHRfZXZlbnRfc2V0KHRzZCwgJmN0eCwgVEVfTkVY VF9FVkVOVF9GQVNUX01BWCk7CisjZGVmaW5lIEUoZXZlbnQsIGNvbmRpdGlvbiwgaXNfYWxsb2Mp CQkJCQlcCisJaWYgKGlzX2FsbG9jICYmIGNvbmRpdGlvbikgewkJCQkJXAorCQlldmVudCMjX2V2 ZW50X3dhaXRfc2V0KHRzZCwgVEVfTkVYVF9FVkVOVF9GQVNUX01BWCk7CVwKKwl9CisJSVRFUkFU RV9PVkVSX0FMTF9FVkVOVFMKKyN1bmRlZiBFCisKKwkvKiBUZXN0IG5leHRfZXZlbnRfZmFzdCBy b2xsaW5nIGJhY2sgdG8gMC4gKi8KKwl2b2lkICpwID0gbWFsbG9jKDE2VSk7CisJYXNzZXJ0X3B0 cl9ub3RfbnVsbChwLCAibWFsbG9jKCkgZmFpbGVkIik7CisJZnJlZShwKTsKKworCS8qIFRlc3Qg bmV4dF9ldmVudF9mYXN0IHJlc3VtaW5nIHRvIGJlIGVxdWFsIHRvIG5leHRfZXZlbnQuICovCisJ dm9pZCAqcSA9IG1hbGxvYyhTQ19MT09LVVBfTUFYQ0xBU1MpOworCWFzc2VydF9wdHJfbm90X251 bGwocSwgIm1hbGxvYygpIGZhaWxlZCIpOworCWZyZWUocSk7Cit9CitURVNUX0VORAorCitpbnQK K21haW4odm9pZCkgeworCXJldHVybiB0ZXN0KAorCSAgICB0ZXN0X25leHRfZXZlbnRfZmFzdCk7 Cit9CgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAv dGVzdC91bml0L3RocmVhZF9ldmVudC5zaCBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFs bG9jLTUuMy4wL3Rlc3QvdW5pdC90aHJlYWRfZXZlbnQuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMC4uOGZjYzdkOAotLS0gL2Rldi9udWxsCisrKyBiLzM4OS1kcy1iYXNlLTMu My4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC90aHJlYWRfZXZlbnQuc2gKQEAgLTAs MCArMSw1IEBACisjIS9iaW4vc2gKKworaWYgWyAieCR7ZW5hYmxlX3Byb2Z9IiA9ICJ4MSIgXSA7 IHRoZW4KKyAgZXhwb3J0IE1BTExPQ19DT05GPSJwcm9mOnRydWUsbGdfcHJvZl9zYW1wbGU6MCIK K2ZpCgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAv dGVzdC91bml0L3RpY2tlci5jIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4z LjAvdGVzdC91bml0L3RpY2tlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu LjBkZDc3ODYKLS0tIC9kZXYvbnVsbAorKysgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1h bGxvYy01LjMuMC90ZXN0L3VuaXQvdGlja2VyLmMKQEAgLTAsMCArMSwxMDAgQEAKKyNpbmNsdWRl ICJ0ZXN0L2plbWFsbG9jX3Rlc3QuaCIKKworI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL3Rp Y2tlci5oIgorCitURVNUX0JFR0lOKHRlc3RfdGlja2VyX3RpY2spIHsKKyNkZWZpbmUgTlJFUFMg MgorI2RlZmluZSBOVElDS1MgMworCXRpY2tlcl90IHRpY2tlcjsKKwlpbnQzMl90IGksIGo7CisK Kwl0aWNrZXJfaW5pdCgmdGlja2VyLCBOVElDS1MpOworCWZvciAoaSA9IDA7IGkgPCBOUkVQUzsg aSsrKSB7CisJCWZvciAoaiA9IDA7IGogPCBOVElDS1M7IGorKykgeworCQkJZXhwZWN0X3VfZXEo dGlja2VyX3JlYWQoJnRpY2tlciksIE5USUNLUyAtIGosCisJCQkgICAgIlVuZXhwZWN0ZWQgdGlj a2VyIHZhbHVlIChpPSVkLCBqPSVkKSIsIGksIGopOworCQkJZXhwZWN0X2ZhbHNlKHRpY2tlcl90 aWNrKCZ0aWNrZXIpLAorCQkJICAgICJVbmV4cGVjdGVkIHRpY2tlciBmaXJlIChpPSVkLCBqPSVk KSIsIGksIGopOworCQl9CisJCWV4cGVjdF91MzJfZXEodGlja2VyX3JlYWQoJnRpY2tlciksIDAs CisJCSAgICAiRXhwZWN0ZWQgdGlja2VyIGRlcGxldGlvbiIpOworCQlleHBlY3RfdHJ1ZSh0aWNr ZXJfdGljaygmdGlja2VyKSwKKwkJICAgICJFeHBlY3RlZCB0aWNrZXIgZmlyZSAoaT0lZCkiLCBp KTsKKwkJZXhwZWN0X3UzMl9lcSh0aWNrZXJfcmVhZCgmdGlja2VyKSwgTlRJQ0tTLAorCQkgICAg IkV4cGVjdGVkIHRpY2tlciByZXNldCIpOworCX0KKyN1bmRlZiBOVElDS1MKK30KK1RFU1RfRU5E CisKK1RFU1RfQkVHSU4odGVzdF90aWNrZXJfdGlja3MpIHsKKyNkZWZpbmUgTlRJQ0tTIDMKKwl0 aWNrZXJfdCB0aWNrZXI7CisKKwl0aWNrZXJfaW5pdCgmdGlja2VyLCBOVElDS1MpOworCisJZXhw ZWN0X3VfZXEodGlja2VyX3JlYWQoJnRpY2tlciksIE5USUNLUywgIlVuZXhwZWN0ZWQgdGlja2Vy IHZhbHVlIik7CisJZXhwZWN0X2ZhbHNlKHRpY2tlcl90aWNrcygmdGlja2VyLCBOVElDS1MpLCAi VW5leHBlY3RlZCB0aWNrZXIgZmlyZSIpOworCWV4cGVjdF91X2VxKHRpY2tlcl9yZWFkKCZ0aWNr ZXIpLCAwLCAiVW5leHBlY3RlZCB0aWNrZXIgdmFsdWUiKTsKKwlleHBlY3RfdHJ1ZSh0aWNrZXJf dGlja3MoJnRpY2tlciwgTlRJQ0tTKSwgIkV4cGVjdGVkIHRpY2tlciBmaXJlIik7CisJZXhwZWN0 X3VfZXEodGlja2VyX3JlYWQoJnRpY2tlciksIE5USUNLUywgIlVuZXhwZWN0ZWQgdGlja2VyIHZh bHVlIik7CisKKwlleHBlY3RfdHJ1ZSh0aWNrZXJfdGlja3MoJnRpY2tlciwgTlRJQ0tTICsgMSks ICJFeHBlY3RlZCB0aWNrZXIgZmlyZSIpOworCWV4cGVjdF91X2VxKHRpY2tlcl9yZWFkKCZ0aWNr ZXIpLCBOVElDS1MsICJVbmV4cGVjdGVkIHRpY2tlciB2YWx1ZSIpOworI3VuZGVmIE5USUNLUwor fQorVEVTVF9FTkQKKworVEVTVF9CRUdJTih0ZXN0X3RpY2tlcl9jb3B5KSB7CisjZGVmaW5lIE5U SUNLUyAzCisJdGlja2VyX3QgdGEsIHRiOworCisJdGlja2VyX2luaXQoJnRhLCBOVElDS1MpOwor CXRpY2tlcl9jb3B5KCZ0YiwgJnRhKTsKKwlleHBlY3RfdV9lcSh0aWNrZXJfcmVhZCgmdGIpLCBO VElDS1MsICJVbmV4cGVjdGVkIHRpY2tlciB2YWx1ZSIpOworCWV4cGVjdF90cnVlKHRpY2tlcl90 aWNrcygmdGIsIE5USUNLUyArIDEpLCAiRXhwZWN0ZWQgdGlja2VyIGZpcmUiKTsKKwlleHBlY3Rf dV9lcSh0aWNrZXJfcmVhZCgmdGIpLCBOVElDS1MsICJVbmV4cGVjdGVkIHRpY2tlciB2YWx1ZSIp OworCisJdGlja2VyX3RpY2soJnRhKTsKKwl0aWNrZXJfY29weSgmdGIsICZ0YSk7CisJZXhwZWN0 X3VfZXEodGlja2VyX3JlYWQoJnRiKSwgTlRJQ0tTIC0gMSwgIlVuZXhwZWN0ZWQgdGlja2VyIHZh bHVlIik7CisJZXhwZWN0X3RydWUodGlja2VyX3RpY2tzKCZ0YiwgTlRJQ0tTKSwgIkV4cGVjdGVk IHRpY2tlciBmaXJlIik7CisJZXhwZWN0X3VfZXEodGlja2VyX3JlYWQoJnRiKSwgTlRJQ0tTLCAi VW5leHBlY3RlZCB0aWNrZXIgdmFsdWUiKTsKKyN1bmRlZiBOVElDS1MKK30KK1RFU1RfRU5ECisK K1RFU1RfQkVHSU4odGVzdF90aWNrZXJfZ2VvbSkgeworCWNvbnN0IGludDMyX3QgdGlja3MgPSAx MDA7CisJY29uc3QgdWludDY0X3Qgbml0ZXJzID0gMTAwICogMTAwMDsKKworCXRpY2tlcl9nZW9t X3QgdGlja2VyOworCXRpY2tlcl9nZW9tX2luaXQoJnRpY2tlciwgdGlja3MpOworCXVpbnQ2NF90 IHRvdGFsX3RpY2tzID0gMDsKKwkvKiBKdXN0IHNvbWUgcmFuZG9tIGNvbnN0YW50LiAqLworCXVp bnQ2NF90IHBybmdfc3RhdGUgPSAweDM0MzIxOWY5MzQ5NmRiOWZVTEw7CisJZm9yICh1aW50NjRf dCBpID0gMDsgaSA8IG5pdGVyczsgaSsrKSB7CisJCXdoaWxlKCF0aWNrZXJfZ2VvbV90aWNrKCZ0 aWNrZXIsICZwcm5nX3N0YXRlKSkgeworCQkJdG90YWxfdGlja3MrKzsKKwkJfQorCX0KKwkvKgor CSAqIEluIGZhY3QsIHdpdGggdGhpcyBjaG9pY2Ugb2YgcmFuZG9tIHNlZWQgYW5kIHRoZSBQUk5H IGltcGxlbWVudGF0aW9uCisJICogdXNlZCBhdCB0aGUgdGltZSB0aGlzIHdhcyB0ZXN0ZWQsIHRv dGFsX3RpY2tzIGlzIDk1LjElIG9mIHRoZQorCSAqIGV4cGVjdGVkIHRpY2tzLgorCSAqLworCWV4 cGVjdF91NjRfZ2UodG90YWxfdGlja3MgLCBuaXRlcnMgKiB0aWNrcyAqIDkgLyAxMCwKKwkgICAg Ik1lYW4gb2ZmIGJ5ID4gMTAlJSIpOworCWV4cGVjdF91NjRfbGUodG90YWxfdGlja3MgLCBuaXRl cnMgKiB0aWNrcyAqIDExIC8gMTAsCisJICAgICJNZWFuIG9mZiBieSA+IDEwJSUiKTsKK30KK1RF U1RfRU5ECisKK2ludAorbWFpbih2b2lkKSB7CisJcmV0dXJuIHRlc3QoCisJICAgIHRlc3RfdGlj a2VyX3RpY2ssCisJICAgIHRlc3RfdGlja2VyX3RpY2tzLAorCSAgICB0ZXN0X3RpY2tlcl9jb3B5 LAorCSAgICB0ZXN0X3RpY2tlcl9nZW9tKTsKK30KCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0z LjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvdHNkLmMgYi8zODktZHMtYmFzZS0z LjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvdHNkLmMKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMC4uMjA1ZDg3MAotLS0gL2Rldi9udWxsCisrKyBiLzM4OS1kcy1i YXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC90c2QuYwpAQCAtMCwwICsx LDI3NCBAQAorI2luY2x1ZGUgInRlc3QvamVtYWxsb2NfdGVzdC5oIgorCisvKgorICogSWYgd2Un cmUgZS5nLiBpbiBkZWJ1ZyBtb2RlLCB3ZSAqbmV2ZXIqIGVudGVyIHRoZSBmYXN0IHBhdGgsIGFu ZCBzbyBzaG91bGRuJ3QKKyAqIGJlIGFzc2VydGluZyB0aGF0IHdlJ3JlIG9uIG9uZS4KKyAqLwor c3RhdGljIGJvb2wgb3JpZ2luYWxseV9mYXN0Oworc3RhdGljIGludCBkYXRhX2NsZWFudXBfY291 bnQ7CisKK3ZvaWQKK2RhdGFfY2xlYW51cChpbnQgKmRhdGEpIHsKKwlpZiAoZGF0YV9jbGVhbnVw X2NvdW50ID09IDApIHsKKwkJZXhwZWN0X3hfZXEoKmRhdGEsIE1BTExPQ19UU0RfVEVTVF9EQVRB X0lOSVQsCisJCSAgICAiQXJndW1lbnQgcGFzc2VkIGludG8gY2xlYW51cCBmdW5jdGlvbiBzaG91 bGQgbWF0Y2ggdHNkICIKKwkJICAgICJ2YWx1ZSIpOworCX0KKwkrK2RhdGFfY2xlYW51cF9jb3Vu dDsKKworCS8qCisJICogQWxsb2NhdGUgZHVyaW5nIGNsZWFudXAgZm9yIHR3byByb3VuZHMsIGlu IG9yZGVyIHRvIGFzc3VyZSB0aGF0CisJICogamVtYWxsb2MncyBpbnRlcm5hbCB0c2QgcmVpbml0 aWFsaXphdGlvbiBoYXBwZW5zLgorCSAqLworCWJvb2wgcmVpbmNhcm5hdGUgPSBmYWxzZTsKKwlz d2l0Y2ggKCpkYXRhKSB7CisJY2FzZSBNQUxMT0NfVFNEX1RFU1RfREFUQV9JTklUOgorCQkqZGF0 YSA9IDE7CisJCXJlaW5jYXJuYXRlID0gdHJ1ZTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQkqZGF0 YSA9IDI7CisJCXJlaW5jYXJuYXRlID0gdHJ1ZTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlyZXR1 cm47CisJZGVmYXVsdDoKKwkJbm90X3JlYWNoZWQoKTsKKwl9CisKKwlpZiAocmVpbmNhcm5hdGUp IHsKKwkJdm9pZCAqcCA9IG1hbGxvY3goMSwgMCk7CisJCWV4cGVjdF9wdHJfbm90X251bGwocCwg IlVuZXhwZWNlZCBtYWxsb2N4KCkgZmFpbHVyZSIpOworCQlkYWxsb2N4KHAsIDApOworCX0KK30K Kworc3RhdGljIHZvaWQgKgordGhkX3N0YXJ0KHZvaWQgKmFyZykgeworCWludCBkID0gKGludCko dWludHB0cl90KWFyZzsKKwl2b2lkICpwOworCisJLyoKKwkgKiBUZXN0IGZyZWUgYmVmb3JlIHRz ZCBpbml0IC0tIHRoZSBmcmVlIGZhc3QgcGF0aCAod2hpY2ggZG9lcyBub3QKKwkgKiBleHBsaWNp dGx5IGNoZWNrIGZvciBOVUxMKSBoYXMgdG8gdG9sZXJhdGUgdGhpcyBjYXNlLCBhbmQgZmFsbCBi YWNrCisJICogdG8gZnJlZV9kZWZhdWx0LgorCSAqLworCWZyZWUoTlVMTCk7CisKKwl0c2RfdCAq dHNkID0gdHNkX2ZldGNoKCk7CisJZXhwZWN0X3hfZXEodHNkX3Rlc3RfZGF0YV9nZXQodHNkKSwg TUFMTE9DX1RTRF9URVNUX0RBVEFfSU5JVCwKKwkgICAgIkluaXRpYWwgdHNkIGdldCBzaG91bGQg cmV0dXJuIGluaXRpYWxpemF0aW9uIHZhbHVlIik7CisKKwlwID0gbWFsbG9jKDEpOworCWV4cGVj dF9wdHJfbm90X251bGwocCwgIlVuZXhwZWN0ZWQgbWFsbG9jKCkgZmFpbHVyZSIpOworCisJdHNk X3Rlc3RfZGF0YV9zZXQodHNkLCBkKTsKKwlleHBlY3RfeF9lcSh0c2RfdGVzdF9kYXRhX2dldCh0 c2QpLCBkLAorCSAgICAiQWZ0ZXIgdHNkIHNldCwgdHNkIGdldCBzaG91bGQgcmV0dXJuIHZhbHVl IHRoYXQgd2FzIHNldCIpOworCisJZCA9IDA7CisJZXhwZWN0X3hfZXEodHNkX3Rlc3RfZGF0YV9n ZXQodHNkKSwgKGludCkodWludHB0cl90KWFyZywKKwkgICAgIlJlc2V0dGluZyBsb2NhbCBkYXRh IHNob3VsZCBoYXZlIG5vIGVmZmVjdCBvbiB0c2QiKTsKKworCXRzZF90ZXN0X2NhbGxiYWNrX3Nl dCh0c2QsICZkYXRhX2NsZWFudXApOworCisJZnJlZShwKTsKKwlyZXR1cm4gTlVMTDsKK30KKwor VEVTVF9CRUdJTih0ZXN0X3RzZF9tYWluX3RocmVhZCkgeworCXRoZF9zdGFydCgodm9pZCAqKSh1 aW50cHRyX3QpMHhhNWYzZTMyOSk7Cit9CitURVNUX0VORAorCitURVNUX0JFR0lOKHRlc3RfdHNk X3N1Yl90aHJlYWQpIHsKKwl0aGRfdCB0aGQ7CisKKwlkYXRhX2NsZWFudXBfY291bnQgPSAwOwor CXRoZF9jcmVhdGUoJnRoZCwgdGhkX3N0YXJ0LCAodm9pZCAqKU1BTExPQ19UU0RfVEVTVF9EQVRB X0lOSVQpOworCXRoZF9qb2luKHRoZCwgTlVMTCk7CisJLyoKKwkgKiBXZSByZWluY2FybmF0ZSB0 d2ljZSBpbiB0aGUgZGF0YSBjbGVhbnVwLCBzbyBpdCBzaG91bGQgZXhlY3V0ZSBhdAorCSAqIGxl YXN0IDMgdGltZXMuCisJICovCisJZXhwZWN0X3hfZ2UoZGF0YV9jbGVhbnVwX2NvdW50LCAzLAor CSAgICAiQ2xlYW51cCBmdW5jdGlvbiBzaG91bGQgaGF2ZSBleGVjdXRlZCBtdWx0aXBsZSB0aW1l cy4iKTsKK30KK1RFU1RfRU5ECisKK3N0YXRpYyB2b2lkICoKK3RoZF9zdGFydF9yZWluY2FybmF0 ZWQodm9pZCAqYXJnKSB7CisJdHNkX3QgKnRzZCA9IHRzZF9mZXRjaCgpOworCWFzc2VydCh0c2Qp OworCisJdm9pZCAqcCA9IG1hbGxvYygxKTsKKwlleHBlY3RfcHRyX25vdF9udWxsKHAsICJVbmV4 cGVjdGVkIG1hbGxvYygpIGZhaWx1cmUiKTsKKworCS8qIE1hbnVhbGx5IHRyaWdnZXIgcmVpbmNh cm5hdGlvbi4gKi8KKwlleHBlY3RfcHRyX25vdF9udWxsKHRzZF9hcmVuYV9nZXQodHNkKSwKKwkg ICAgIlNob3VsZCBoYXZlIHRzZCBhcmVuYSBzZXQuIik7CisJdHNkX2NsZWFudXAoKHZvaWQgKil0 c2QpOworCWV4cGVjdF9wdHJfbnVsbCgqdHNkX2FyZW5hcF9nZXRfdW5zYWZlKHRzZCksCisJICAg ICJUU0QgYXJlbmEgc2hvdWxkIGhhdmUgYmVlbiBjbGVhcmVkLiIpOworCWV4cGVjdF91X2VxKHRz ZF9zdGF0ZV9nZXQodHNkKSwgdHNkX3N0YXRlX3B1cmdhdG9yeSwKKwkgICAgIlRTRCBzdGF0ZSBz aG91bGQgYmUgcHVyZ2F0b3J5XG4iKTsKKworCWZyZWUocCk7CisJZXhwZWN0X3VfZXEodHNkX3N0 YXRlX2dldCh0c2QpLCB0c2Rfc3RhdGVfcmVpbmNhcm5hdGVkLAorCSAgICAiVFNEIHN0YXRlIHNo b3VsZCBiZSByZWluY2FybmF0ZWRcbiIpOworCXAgPSBtYWxsb2N4KDEsIE1BTExPQ1hfVENBQ0hF X05PTkUpOworCWV4cGVjdF9wdHJfbm90X251bGwocCwgIlVuZXhwZWN0ZWQgbWFsbG9jKCkgZmFp bHVyZSIpOworCWV4cGVjdF9wdHJfbnVsbCgqdHNkX2FyZW5hcF9nZXRfdW5zYWZlKHRzZCksCisJ ICAgICJTaG91bGQgbm90IGhhdmUgdHNkIGFyZW5hIHNldCBhZnRlciByZWluY2FybmF0aW9uLiIp OworCisJZnJlZShwKTsKKwl0c2RfY2xlYW51cCgodm9pZCAqKXRzZCk7CisJZXhwZWN0X3B0cl9u dWxsKCp0c2RfYXJlbmFwX2dldF91bnNhZmUodHNkKSwKKwkgICAgIlRTRCBhcmVuYSBzaG91bGQg aGF2ZSBiZWVuIGNsZWFyZWQgYWZ0ZXIgMm5kIGNsZWFudXAuIik7CisKKwlyZXR1cm4gTlVMTDsK K30KKworVEVTVF9CRUdJTih0ZXN0X3RzZF9yZWluY2FybmF0aW9uKSB7CisJdGhkX3QgdGhkOwor CXRoZF9jcmVhdGUoJnRoZCwgdGhkX3N0YXJ0X3JlaW5jYXJuYXRlZCwgTlVMTCk7CisJdGhkX2pv aW4odGhkLCBOVUxMKTsKK30KK1RFU1RfRU5ECisKK3R5cGVkZWYgc3RydWN0IHsKKwlhdG9taWNf dTMyX3QgcGhhc2U7CisJYXRvbWljX2JfdCBlcnJvcjsKK30gZ2xvYmFsX3Nsb3dfZGF0YV90Owor CitzdGF0aWMgdm9pZCAqCit0aGRfc3RhcnRfZ2xvYmFsX3Nsb3codm9pZCAqYXJnKSB7CisJLyog UEhBU0UgMCAqLworCWdsb2JhbF9zbG93X2RhdGFfdCAqZGF0YSA9IChnbG9iYWxfc2xvd19kYXRh X3QgKilhcmc7CisJZnJlZShtYWxsb2N4KDEsIDApKTsKKworCXRzZF90ICp0c2QgPSB0c2RfZmV0 Y2goKTsKKwkvKgorCSAqIE5vIGdsb2JhbCBzbG93bmVzcyBoYXMgaGFwcGVuZWQgeWV0OyB0aGVy ZSB3YXMgYW4gZXJyb3IgaWYgd2Ugd2VyZQorCSAqIG9yaWdpbmFsbHkgZmFzdCBidXQgYXJlbid0 IG5vdy4KKwkgKi8KKwlhdG9taWNfc3RvcmVfYigmZGF0YS0+ZXJyb3IsIG9yaWdpbmFsbHlfZmFz dCAmJiAhdHNkX2Zhc3QodHNkKSwKKwkgICAgQVRPTUlDX1NFUV9DU1QpOworCWF0b21pY19zdG9y ZV91MzIoJmRhdGEtPnBoYXNlLCAxLCBBVE9NSUNfU0VRX0NTVCk7CisKKwkvKiBQSEFTRSAyICov CisJd2hpbGUgKGF0b21pY19sb2FkX3UzMigmZGF0YS0+cGhhc2UsIEFUT01JQ19TRVFfQ1NUKSAh PSAyKSB7CisJfQorCWZyZWUobWFsbG9jeCgxLCAwKSk7CisJYXRvbWljX3N0b3JlX2IoJmRhdGEt PmVycm9yLCB0c2RfZmFzdCh0c2QpLCBBVE9NSUNfU0VRX0NTVCk7CisJYXRvbWljX3N0b3JlX3Uz MigmZGF0YS0+cGhhc2UsIDMsIEFUT01JQ19TRVFfQ1NUKTsKKworCS8qIFBIQVNFIDQgKi8KKwl3 aGlsZSAoYXRvbWljX2xvYWRfdTMyKCZkYXRhLT5waGFzZSwgQVRPTUlDX1NFUV9DU1QpICE9IDQp IHsKKwl9CisJZnJlZShtYWxsb2N4KDEsIDApKTsKKwlhdG9taWNfc3RvcmVfYigmZGF0YS0+ZXJy b3IsIHRzZF9mYXN0KHRzZCksIEFUT01JQ19TRVFfQ1NUKTsKKwlhdG9taWNfc3RvcmVfdTMyKCZk YXRhLT5waGFzZSwgNSwgQVRPTUlDX1NFUV9DU1QpOworCisJLyogUEhBU0UgNiAqLworCXdoaWxl IChhdG9taWNfbG9hZF91MzIoJmRhdGEtPnBoYXNlLCBBVE9NSUNfU0VRX0NTVCkgIT0gNikgewor CX0KKwlmcmVlKG1hbGxvY3goMSwgMCkpOworCS8qIE9ubHkgb25lIGRlY3JlbWVudCBzbyBmYXIu ICovCisJYXRvbWljX3N0b3JlX2IoJmRhdGEtPmVycm9yLCB0c2RfZmFzdCh0c2QpLCBBVE9NSUNf U0VRX0NTVCk7CisJYXRvbWljX3N0b3JlX3UzMigmZGF0YS0+cGhhc2UsIDcsIEFUT01JQ19TRVFf Q1NUKTsKKworCS8qIFBIQVNFIDggKi8KKwl3aGlsZSAoYXRvbWljX2xvYWRfdTMyKCZkYXRhLT5w aGFzZSwgQVRPTUlDX1NFUV9DU1QpICE9IDgpIHsKKwl9CisJZnJlZShtYWxsb2N4KDEsIDApKTsK KwkvKgorCSAqIEJvdGggZGVjcmVtZW50cyBoYXBwZW5lZDsgd2Ugc2hvdWxkIGJlIGZhc3QgYWdh aW4gKGlmIHdlIGV2ZXIKKwkgKiB3ZXJlKQorCSAqLworCWF0b21pY19zdG9yZV9iKCZkYXRhLT5l cnJvciwgb3JpZ2luYWxseV9mYXN0ICYmICF0c2RfZmFzdCh0c2QpLAorCSAgICBBVE9NSUNfU0VR X0NTVCk7CisJYXRvbWljX3N0b3JlX3UzMigmZGF0YS0+cGhhc2UsIDksIEFUT01JQ19TRVFfQ1NU KTsKKworCXJldHVybiBOVUxMOworfQorCitURVNUX0JFR0lOKHRlc3RfdHNkX2dsb2JhbF9zbG93 KSB7CisJZ2xvYmFsX3Nsb3dfZGF0YV90IGRhdGEgPSB7QVRPTUlDX0lOSVQoMCksIEFUT01JQ19J TklUKGZhbHNlKX07CisJLyoKKwkgKiBOb3RlIHRoYXQgdGhlICJtYWxsb2N4IiBoZXJlICh2cy4g bWFsbG9jKSBpcyBpbXBvcnRhbnQsIHNpbmNlIHRoZQorCSAqIGNvbXBpbGVyIGlzIGFsbG93ZWQg dG8gb3B0aW1pemUgYXdheSBmcmVlKG1hbGxvYygxKSkgYnV0IG5vdAorCSAqIGZyZWUobWFsbG9j eCgxKSkuCisJICovCisJZnJlZShtYWxsb2N4KDEsIDApKTsKKwl0c2RfdCAqdHNkID0gdHNkX2Zl dGNoKCk7CisJb3JpZ2luYWxseV9mYXN0ID0gdHNkX2Zhc3QodHNkKTsKKworCXRoZF90IHRoZDsK Kwl0aGRfY3JlYXRlKCZ0aGQsIHRoZF9zdGFydF9nbG9iYWxfc2xvdywgKHZvaWQgKikmZGF0YS5w aGFzZSk7CisJLyogUEhBU0UgMSAqLworCXdoaWxlIChhdG9taWNfbG9hZF91MzIoJmRhdGEucGhh c2UsIEFUT01JQ19TRVFfQ1NUKSAhPSAxKSB7CisJCS8qCisJCSAqIFdlIGRvbid0IGhhdmUgYSBw b3J0YWJsZSBjb25kdmFyL3NlbWFwaG9yZSBtZWNoYW5pc20uCisJCSAqIFNwaW4td2FpdC4KKwkJ ICovCisJfQorCWV4cGVjdF9mYWxzZShhdG9taWNfbG9hZF9iKCZkYXRhLmVycm9yLCBBVE9NSUNf U0VRX0NTVCksICIiKTsKKwl0c2RfZ2xvYmFsX3Nsb3dfaW5jKHRzZF90c2RuKHRzZCkpOworCWZy ZWUobWFsbG9jeCgxLCAwKSk7CisJZXhwZWN0X2ZhbHNlKHRzZF9mYXN0KHRzZCksICIiKTsKKwlh dG9taWNfc3RvcmVfdTMyKCZkYXRhLnBoYXNlLCAyLCBBVE9NSUNfU0VRX0NTVCk7CisKKwkvKiBQ SEFTRSAzICovCisJd2hpbGUgKGF0b21pY19sb2FkX3UzMigmZGF0YS5waGFzZSwgQVRPTUlDX1NF UV9DU1QpICE9IDMpIHsKKwl9CisJZXhwZWN0X2ZhbHNlKGF0b21pY19sb2FkX2IoJmRhdGEuZXJy b3IsIEFUT01JQ19TRVFfQ1NUKSwgIiIpOworCS8qIEluY3JlYXNlIGFnYWluLCBzbyB0aGF0IHdl IGNhbiB0ZXN0IG11bHRpcGxlIGZhc3Qvc2xvdyBjaGFuZ2VzLiAqLworCXRzZF9nbG9iYWxfc2xv d19pbmModHNkX3RzZG4odHNkKSk7CisJYXRvbWljX3N0b3JlX3UzMigmZGF0YS5waGFzZSwgNCwg QVRPTUlDX1NFUV9DU1QpOworCWZyZWUobWFsbG9jeCgxLCAwKSk7CisJZXhwZWN0X2ZhbHNlKHRz ZF9mYXN0KHRzZCksICIiKTsKKworCS8qIFBIQVNFIDUgKi8KKwl3aGlsZSAoYXRvbWljX2xvYWRf dTMyKCZkYXRhLnBoYXNlLCBBVE9NSUNfU0VRX0NTVCkgIT0gNSkgeworCX0KKwlleHBlY3RfZmFs c2UoYXRvbWljX2xvYWRfYigmZGF0YS5lcnJvciwgQVRPTUlDX1NFUV9DU1QpLCAiIik7CisJdHNk X2dsb2JhbF9zbG93X2RlYyh0c2RfdHNkbih0c2QpKTsKKwlhdG9taWNfc3RvcmVfdTMyKCZkYXRh LnBoYXNlLCA2LCBBVE9NSUNfU0VRX0NTVCk7CisJLyogV2Ugb25seSBkZWNyZWFzZWQgb25jZTsg dGhpbmdzIHNob3VsZCBzdGlsbCBiZSBzbG93LiAqLworCWZyZWUobWFsbG9jeCgxLCAwKSk7CisJ ZXhwZWN0X2ZhbHNlKHRzZF9mYXN0KHRzZCksICIiKTsKKworCS8qIFBIQVNFIDcgKi8KKwl3aGls ZSAoYXRvbWljX2xvYWRfdTMyKCZkYXRhLnBoYXNlLCBBVE9NSUNfU0VRX0NTVCkgIT0gNykgewor CX0KKwlleHBlY3RfZmFsc2UoYXRvbWljX2xvYWRfYigmZGF0YS5lcnJvciwgQVRPTUlDX1NFUV9D U1QpLCAiIik7CisJdHNkX2dsb2JhbF9zbG93X2RlYyh0c2RfdHNkbih0c2QpKTsKKwlhdG9taWNf c3RvcmVfdTMyKCZkYXRhLnBoYXNlLCA4LCBBVE9NSUNfU0VRX0NTVCk7CisJLyogV2UgaW5jcmVt ZW50ZWQgYW5kIHRoZW4gZGVjcmVtZW50ZWQgdHdpY2U7IHdlIHNob3VsZCBiZSBmYXN0IG5vdy4g Ki8KKwlmcmVlKG1hbGxvY3goMSwgMCkpOworCWV4cGVjdF90cnVlKCFvcmlnaW5hbGx5X2Zhc3Qg fHwgdHNkX2Zhc3QodHNkKSwgIiIpOworCisJLyogUEhBU0UgOSAqLworCXdoaWxlIChhdG9taWNf bG9hZF91MzIoJmRhdGEucGhhc2UsIEFUT01JQ19TRVFfQ1NUKSAhPSA5KSB7CisJfQorCWV4cGVj dF9mYWxzZShhdG9taWNfbG9hZF9iKCZkYXRhLmVycm9yLCBBVE9NSUNfU0VRX0NTVCksICIiKTsK KworCXRoZF9qb2luKHRoZCwgTlVMTCk7Cit9CitURVNUX0VORAorCitpbnQKK21haW4odm9pZCkg eworCS8qIEVuc3VyZSB0c2QgYm9vdHN0cmFwcGVkLiAqLworCWlmIChuYWxsb2N4KDEsIDApID09 IDApIHsKKwkJbWFsbG9jX3ByaW50ZigiSW5pdGlhbGl6YXRpb24gZXJyb3IiKTsKKwkJcmV0dXJu IHRlc3Rfc3RhdHVzX2ZhaWw7CisJfQorCisJcmV0dXJuIHRlc3Rfbm9fcmVlbnRyYW5jeSgKKwkg ICAgdGVzdF90c2RfbWFpbl90aHJlYWQsCisJICAgIHRlc3RfdHNkX3N1Yl90aHJlYWQsCisJICAg IHRlc3RfdHNkX3JlaW5jYXJuYXRpb24sCisJICAgIHRlc3RfdHNkX2dsb2JhbF9zbG93KTsKK30K CmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0 L3VuaXQvdWFmLmMgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0 L3VuaXQvdWFmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTg0MzNjMgot LS0gL2Rldi9udWxsCisrKyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4w L3Rlc3QvdW5pdC91YWYuYwpAQCAtMCwwICsxLDI2MiBAQAorI2luY2x1ZGUgInRlc3QvamVtYWxs b2NfdGVzdC5oIgorI2luY2x1ZGUgInRlc3QvYXJlbmFfdXRpbC5oIgorI2luY2x1ZGUgInRlc3Qv c2FuLmgiCisKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9jYWNoZV9iaW4uaCIKKyNpbmNs dWRlICJqZW1hbGxvYy9pbnRlcm5hbC9zYW4uaCIKKyNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5h bC9zYWZldHlfY2hlY2suaCIKKworY29uc3QgY2hhciAqbWFsbG9jX2NvbmYgPSBURVNUX1NBTl9V QUZfQUxJR05fRU5BQkxFOworCitzdGF0aWMgc2l6ZV90IHNhbl91YWZfYWxpZ247CisKK3N0YXRp YyBib29sIGZha2VfYWJvcnRfY2FsbGVkOwordm9pZCBmYWtlX2Fib3J0KGNvbnN0IGNoYXIgKm1l c3NhZ2UpIHsKKwkodm9pZCltZXNzYWdlOworCWZha2VfYWJvcnRfY2FsbGVkID0gdHJ1ZTsKK30K Kworc3RhdGljIHZvaWQKK3Rlc3Rfd3JpdGVfYWZ0ZXJfZnJlZV9wcmUodm9pZCkgeworCXNhZmV0 eV9jaGVja19zZXRfYWJvcnQoJmZha2VfYWJvcnQpOworCWZha2VfYWJvcnRfY2FsbGVkID0gZmFs c2U7Cit9CisKK3N0YXRpYyB2b2lkCit0ZXN0X3dyaXRlX2FmdGVyX2ZyZWVfcG9zdCh2b2lkKSB7 CisJYXNzZXJ0X2RfZXEobWFsbGN0bCgidGhyZWFkLnRjYWNoZS5mbHVzaCIsIE5VTEwsIE5VTEws IE5VTEwsIDApLAorCSAgICAwLCAiVW5leHBlY3RlZCB0Y2FjaGUgZmx1c2ggZmFpbHVyZSIpOwor CWV4cGVjdF90cnVlKGZha2VfYWJvcnRfY2FsbGVkLCAiVXNlLWFmdGVyLWZyZWUgY2hlY2sgZGlk bid0IGZpcmUuIik7CisJc2FmZXR5X2NoZWNrX3NldF9hYm9ydChOVUxMKTsKK30KKworc3RhdGlj IGJvb2wKK3VhZl9kZXRlY3Rpb25fZW5hYmxlZCh2b2lkKSB7CisJaWYgKCFjb25maWdfdWFmX2Rl dGVjdGlvbiB8fCAhc2FuX3VhZl9kZXRlY3Rpb25fZW5hYmxlZCgpKSB7CisJCXJldHVybiBmYWxz ZTsKKwl9CisKKwlzc2l6ZV90IGxnX3Nhbl91YWZfYWxpZ247CisJc2l6ZV90IHN6ID0gc2l6ZW9m KGxnX3Nhbl91YWZfYWxpZ24pOworCWFzc2VydF9kX2VxKG1hbGxjdGwoIm9wdC5sZ19zYW5fdWFm X2FsaWduIiwgJmxnX3Nhbl91YWZfYWxpZ24sICZzeiwKKwkgICAgTlVMTCwgMCksIDAsICJVbmV4 cGVjdGVkIG1hbGxjdGwgZmFpbHVyZSIpOworCWlmIChsZ19zYW5fdWFmX2FsaWduIDwgMCkgewor CQlyZXR1cm4gZmFsc2U7CisJfQorCWFzc2VydF96ZF9nZShsZ19zYW5fdWFmX2FsaWduLCBMR19Q QUdFLCAic2FuX3VhZl9hbGlnbiBvdXQgb2YgcmFuZ2UiKTsKKwlzYW5fdWFmX2FsaWduID0gKHNp emVfdCkxIDw8IGxnX3Nhbl91YWZfYWxpZ247CisKKwlib29sIHRjYWNoZV9lbmFibGVkOworCXN6 ID0gc2l6ZW9mKHRjYWNoZV9lbmFibGVkKTsKKwlhc3NlcnRfZF9lcShtYWxsY3RsKCJ0aHJlYWQu dGNhY2hlLmVuYWJsZWQiLCAmdGNhY2hlX2VuYWJsZWQsICZzeiwgTlVMTCwKKwkgICAgMCksIDAs ICJVbmV4cGVjdGVkIG1hbGxjdGwgZmFpbHVyZSIpOworCWlmICghdGNhY2hlX2VuYWJsZWQpIHsK KwkJcmV0dXJuIGZhbHNlOworCX0KKworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgc2l6ZV90 CityZWFkX3RjYWNoZV9zdGFzaGVkX2J5dGVzKHVuc2lnbmVkIGFyZW5hX2luZCkgeworCWlmICgh Y29uZmlnX3N0YXRzKSB7CisJCXJldHVybiAwOworCX0KKworCXVpbnQ2NF90IGVwb2NoOworCWFz c2VydF9kX2VxKG1hbGxjdGwoImVwb2NoIiwgTlVMTCwgTlVMTCwgKHZvaWQgKikmZXBvY2gsIHNp emVvZihlcG9jaCkpLAorCSAgICAwLCAiVW5leHBlY3RlZCBtYWxsY3RsKCkgZmFpbHVyZSIpOwor CisJc2l6ZV90IHRjYWNoZV9zdGFzaGVkX2J5dGVzOworCXNpemVfdCBzeiA9IHNpemVvZih0Y2Fj aGVfc3Rhc2hlZF9ieXRlcyk7CisJYXNzZXJ0X2RfZXEobWFsbGN0bCgKKwkgICAgInN0YXRzLmFy ZW5hcy4iIFNUUklOR0lGWShNQUxMQ1RMX0FSRU5BU19BTEwpCisJICAgICIudGNhY2hlX3N0YXNo ZWRfYnl0ZXMiLCAmdGNhY2hlX3N0YXNoZWRfYnl0ZXMsICZzeiwgTlVMTCwgMCksIDAsCisJICAg ICJVbmV4cGVjdGVkIG1hbGxjdGwgZmFpbHVyZSIpOworCisJcmV0dXJuIHRjYWNoZV9zdGFzaGVk X2J5dGVzOworfQorCitzdGF0aWMgdm9pZAordGVzdF91c2VfYWZ0ZXJfZnJlZShzaXplX3QgYWxs b2Nfc2l6ZSwgYm9vbCB3cml0ZV9hZnRlcl9mcmVlKSB7CisJdm9pZCAqcHRyID0gKHZvaWQgKiko dWludHB0cl90KXNhbl91YWZfYWxpZ247CisJYXNzZXJ0X3RydWUoY2FjaGVfYmluX25vbmZhc3Rf YWxpZ25lZChwdHIpLCAiV3JvbmcgYWxpZ25tZW50Iik7CisJcHRyID0gKHZvaWQgKikoKHVpbnRw dHJfdCkxMjMgKiAodWludHB0cl90KXNhbl91YWZfYWxpZ24pOworCWFzc2VydF90cnVlKGNhY2hl X2Jpbl9ub25mYXN0X2FsaWduZWQocHRyKSwgIldyb25nIGFsaWdubWVudCIpOworCXB0ciA9ICh2 b2lkICopKCh1aW50cHRyX3Qpc2FuX3VhZl9hbGlnbiArIDEpOworCWFzc2VydF9mYWxzZShjYWNo ZV9iaW5fbm9uZmFzdF9hbGlnbmVkKHB0ciksICJXcm9uZyBhbGlnbm1lbnQiKTsKKworCS8qCisJ ICogRGlzYWJsZSBwdXJnaW5nICgtMSkgc28gdGhhdCBhbGwgZGlydHkgcGFnZXMgcmVtYWluIGNv bW1pdHRlZCwgdG8KKwkgKiBtYWtlIHVzZS1hZnRlci1mcmVlIHRvbGVyYWJsZS4KKwkgKi8KKwl1 bnNpZ25lZCBhcmVuYV9pbmQgPSBkb19hcmVuYV9jcmVhdGUoLTEsIC0xKTsKKwlpbnQgZmxhZ3Mg PSBNQUxMT0NYX0FSRU5BKGFyZW5hX2luZCkgfCBNQUxMT0NYX1RDQUNIRV9OT05FOworCisJc2l6 ZV90IG5fbWF4ID0gc2FuX3VhZl9hbGlnbiAqIDI7CisJdm9pZCAqKml0ZW1zID0gbWFsbG9jeChu X21heCAqIHNpemVvZih2b2lkICopLCBmbGFncyk7CisJYXNzZXJ0X3B0cl9ub3RfbnVsbChpdGVt cywgIlVuZXhwZWN0ZWQgbWFsbG9jeCBmYWlsdXJlIik7CisKKwlib29sIGZvdW5kID0gZmFsc2U7 CisJc2l6ZV90IGl0ZXIgPSAwOworCWNoYXIgbWFnaWMgPSAncyc7CisJYXNzZXJ0X2RfZXEobWFs bGN0bCgidGhyZWFkLnRjYWNoZS5mbHVzaCIsIE5VTEwsIE5VTEwsIE5VTEwsIDApLAorCSAgICAw LCAiVW5leHBlY3RlZCB0Y2FjaGUgZmx1c2ggZmFpbHVyZSIpOworCXdoaWxlICghZm91bmQpIHsK KwkJcHRyID0gbWFsbG9jeChhbGxvY19zaXplLCBmbGFncyk7CisJCWFzc2VydF9wdHJfbm90X251 bGwocHRyLCAiVW5leHBlY3RlZCBtYWxsb2N4IGZhaWx1cmUiKTsKKworCQlmb3VuZCA9IGNhY2hl X2Jpbl9ub25mYXN0X2FsaWduZWQocHRyKTsKKwkJKihjaGFyICopcHRyID0gbWFnaWM7CisJCWl0 ZW1zW2l0ZXJdID0gcHRyOworCQlhc3NlcnRfenVfbHQoaXRlcisrLCBuX21heCwgIk5vIGFsaWdu ZWQgcHRyIGZvdW5kIik7CisJfQorCisJaWYgKHdyaXRlX2FmdGVyX2ZyZWUpIHsKKwkJdGVzdF93 cml0ZV9hZnRlcl9mcmVlX3ByZSgpOworCX0KKwlib29sIGp1bmtlZCA9IGZhbHNlOworCXdoaWxl IChpdGVyLS0gIT0gMCkgeworCQljaGFyICp2b2xhdGlsZSBtZW0gPSBpdGVtc1tpdGVyXTsKKwkJ YXNzZXJ0X2NfZXEoKm1lbSwgbWFnaWMsICJVbmV4cGVjdGVkIG1lbW9yeSBjb250ZW50Iik7CisJ CXNpemVfdCBzdGFzaGVkX2JlZm9yZSA9IHJlYWRfdGNhY2hlX3N0YXNoZWRfYnl0ZXMoYXJlbmFf aW5kKTsKKwkJZnJlZShtZW0pOworCQlpZiAoKm1lbSAhPSBtYWdpYykgeworCQkJanVua2VkID0g dHJ1ZTsKKwkJCWFzc2VydF9jX2VxKCptZW0sIChjaGFyKXVhZl9kZXRlY3RfanVuaywKKwkJCSAg ICAiVW5leHBlY3RlZCBqdW5rLWZpbGxpbmcgYnl0ZXMiKTsKKwkJCWlmICh3cml0ZV9hZnRlcl9m cmVlKSB7CisJCQkJKihjaGFyICopbWVtID0gbWFnaWMgKyAxOworCQkJfQorCisJCQlzaXplX3Qg c3Rhc2hlZF9hZnRlciA9IHJlYWRfdGNhY2hlX3N0YXNoZWRfYnl0ZXMoCisJCQkgICAgYXJlbmFf aW5kKTsKKwkJCS8qCisJCQkgKiBBbiBlZGdlIGNhc2UgaXMgdGhlIGRlYWxsb2NhdGlvbiBhYm92 ZSB0cmlnZ2VyaW5nIHRoZQorCQkJICogdGNhY2hlIEdDIGV2ZW50LCBpbiB3aGljaCBjYXNlIHRo ZSBzdGFzaGVkIHBvaW50ZXJzCisJCQkgKiBtYXkgZ2V0IGZsdXNoZWQgaW1tZWRpYXRlbHksIGJl Zm9yZSByZXR1cm5pbmcgZnJvbQorCQkJICogZnJlZSgpLiAgVHJlYXQgdGhlc2UgY2FzZXMgYXMg Y2hlY2tlZCBhbHJlYWR5LgorCQkJICovCisJCQlpZiAoc3Rhc2hlZF9hZnRlciA8PSBzdGFzaGVk X2JlZm9yZSkgeworCQkJCWZha2VfYWJvcnRfY2FsbGVkID0gdHJ1ZTsKKwkJCX0KKwkJfQorCQkv KiBGbHVzaCB0Y2FjaGUgKGluY2x1ZGluZyBzdGFzaGVkKS4gKi8KKwkJYXNzZXJ0X2RfZXEobWFs bGN0bCgidGhyZWFkLnRjYWNoZS5mbHVzaCIsIE5VTEwsIE5VTEwsIE5VTEwsIDApLAorCQkgICAg MCwgIlVuZXhwZWN0ZWQgdGNhY2hlIGZsdXNoIGZhaWx1cmUiKTsKKwl9CisJZXhwZWN0X3RydWUo anVua2VkLCAiQWxpZ25lZCBwdHIgbm90IGp1bmtlZCIpOworCWlmICh3cml0ZV9hZnRlcl9mcmVl KSB7CisJCXRlc3Rfd3JpdGVfYWZ0ZXJfZnJlZV9wb3N0KCk7CisJfQorCisJZGFsbG9jeChpdGVt cywgZmxhZ3MpOworCWRvX2FyZW5hX2Rlc3Ryb3koYXJlbmFfaW5kKTsKK30KKworVEVTVF9CRUdJ Tih0ZXN0X3JlYWRfYWZ0ZXJfZnJlZSkgeworCXRlc3Rfc2tpcF9pZighdWFmX2RldGVjdGlvbl9l bmFibGVkKCkpOworCisJdGVzdF91c2VfYWZ0ZXJfZnJlZShzaXplb2Yodm9pZCAqKSwgLyogd3Jp dGVfYWZ0ZXJfZnJlZSAqLyBmYWxzZSk7CisJdGVzdF91c2VfYWZ0ZXJfZnJlZShzaXplb2Yodm9p ZCAqKSArIDEsIC8qIHdyaXRlX2FmdGVyX2ZyZWUgKi8gZmFsc2UpOworCXRlc3RfdXNlX2FmdGVy X2ZyZWUoMTYsIC8qIHdyaXRlX2FmdGVyX2ZyZWUgKi8gZmFsc2UpOworCXRlc3RfdXNlX2FmdGVy X2ZyZWUoMjAsIC8qIHdyaXRlX2FmdGVyX2ZyZWUgKi8gZmFsc2UpOworCXRlc3RfdXNlX2FmdGVy X2ZyZWUoMzIsIC8qIHdyaXRlX2FmdGVyX2ZyZWUgKi8gZmFsc2UpOworCXRlc3RfdXNlX2FmdGVy X2ZyZWUoMzMsIC8qIHdyaXRlX2FmdGVyX2ZyZWUgKi8gZmFsc2UpOworCXRlc3RfdXNlX2FmdGVy X2ZyZWUoNDgsIC8qIHdyaXRlX2FmdGVyX2ZyZWUgKi8gZmFsc2UpOworCXRlc3RfdXNlX2FmdGVy X2ZyZWUoNjQsIC8qIHdyaXRlX2FmdGVyX2ZyZWUgKi8gZmFsc2UpOworCXRlc3RfdXNlX2FmdGVy X2ZyZWUoNjUsIC8qIHdyaXRlX2FmdGVyX2ZyZWUgKi8gZmFsc2UpOworCXRlc3RfdXNlX2FmdGVy X2ZyZWUoMTI5LCAvKiB3cml0ZV9hZnRlcl9mcmVlICovIGZhbHNlKTsKKwl0ZXN0X3VzZV9hZnRl cl9mcmVlKDI1NSwgLyogd3JpdGVfYWZ0ZXJfZnJlZSAqLyBmYWxzZSk7CisJdGVzdF91c2VfYWZ0 ZXJfZnJlZSgyNTYsIC8qIHdyaXRlX2FmdGVyX2ZyZWUgKi8gZmFsc2UpOworfQorVEVTVF9FTkQK KworVEVTVF9CRUdJTih0ZXN0X3dyaXRlX2FmdGVyX2ZyZWUpIHsKKwl0ZXN0X3NraXBfaWYoIXVh Zl9kZXRlY3Rpb25fZW5hYmxlZCgpKTsKKworCXRlc3RfdXNlX2FmdGVyX2ZyZWUoc2l6ZW9mKHZv aWQgKiksIC8qIHdyaXRlX2FmdGVyX2ZyZWUgKi8gdHJ1ZSk7CisJdGVzdF91c2VfYWZ0ZXJfZnJl ZShzaXplb2Yodm9pZCAqKSArIDEsIC8qIHdyaXRlX2FmdGVyX2ZyZWUgKi8gdHJ1ZSk7CisJdGVz dF91c2VfYWZ0ZXJfZnJlZSgxNiwgLyogd3JpdGVfYWZ0ZXJfZnJlZSAqLyB0cnVlKTsKKwl0ZXN0 X3VzZV9hZnRlcl9mcmVlKDIwLCAvKiB3cml0ZV9hZnRlcl9mcmVlICovIHRydWUpOworCXRlc3Rf dXNlX2FmdGVyX2ZyZWUoMzIsIC8qIHdyaXRlX2FmdGVyX2ZyZWUgKi8gdHJ1ZSk7CisJdGVzdF91 c2VfYWZ0ZXJfZnJlZSgzMywgLyogd3JpdGVfYWZ0ZXJfZnJlZSAqLyB0cnVlKTsKKwl0ZXN0X3Vz ZV9hZnRlcl9mcmVlKDQ4LCAvKiB3cml0ZV9hZnRlcl9mcmVlICovIHRydWUpOworCXRlc3RfdXNl X2FmdGVyX2ZyZWUoNjQsIC8qIHdyaXRlX2FmdGVyX2ZyZWUgKi8gdHJ1ZSk7CisJdGVzdF91c2Vf YWZ0ZXJfZnJlZSg2NSwgLyogd3JpdGVfYWZ0ZXJfZnJlZSAqLyB0cnVlKTsKKwl0ZXN0X3VzZV9h ZnRlcl9mcmVlKDEyOSwgLyogd3JpdGVfYWZ0ZXJfZnJlZSAqLyB0cnVlKTsKKwl0ZXN0X3VzZV9h ZnRlcl9mcmVlKDI1NSwgLyogd3JpdGVfYWZ0ZXJfZnJlZSAqLyB0cnVlKTsKKwl0ZXN0X3VzZV9h ZnRlcl9mcmVlKDI1NiwgLyogd3JpdGVfYWZ0ZXJfZnJlZSAqLyB0cnVlKTsKK30KK1RFU1RfRU5E CisKK3N0YXRpYyBib29sCitjaGVja19hbGxvY2F0ZWRfaW50YWN0KHZvaWQgKiphbGxvY2F0ZWQs IHNpemVfdCBuX2FsbG9jKSB7CisJZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG5fYWxsb2M7IGkr KykgeworCQl2b2lkICpwdHIgPSAqKHZvaWQgKiopYWxsb2NhdGVkW2ldOworCQlib29sIGZvdW5k ID0gZmFsc2U7CisJCWZvciAodW5zaWduZWQgaiA9IDA7IGogPCBuX2FsbG9jOyBqKyspIHsKKwkJ CWlmIChwdHIgPT0gYWxsb2NhdGVkW2pdKSB7CisJCQkJZm91bmQgPSB0cnVlOworCQkJCWJyZWFr OworCQkJfQorCQl9CisJCWlmICghZm91bmQpIHsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCX0K KworCXJldHVybiB0cnVlOworfQorCitURVNUX0JFR0lOKHRlc3RfdXNlX2FmdGVyX2ZyZWVfaW50 ZWdyYXRpb24pIHsKKwl0ZXN0X3NraXBfaWYoIXVhZl9kZXRlY3Rpb25fZW5hYmxlZCgpKTsKKwor CXVuc2lnbmVkIGFyZW5hX2luZCA9IGRvX2FyZW5hX2NyZWF0ZSgtMSwgLTEpOworCWludCBmbGFn cyA9IE1BTExPQ1hfQVJFTkEoYXJlbmFfaW5kKTsKKworCXNpemVfdCBuX2FsbG9jID0gc2FuX3Vh Zl9hbGlnbiAqIDI7CisJdm9pZCAqKmFsbG9jYXRlZCA9IG1hbGxvY3gobl9hbGxvYyAqIHNpemVv Zih2b2lkICopLCBmbGFncyk7CisJYXNzZXJ0X3B0cl9ub3RfbnVsbChhbGxvY2F0ZWQsICJVbmV4 cGVjdGVkIG1hbGxvY3ggZmFpbHVyZSIpOworCisJZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG5f YWxsb2M7IGkrKykgeworCQlhbGxvY2F0ZWRbaV0gPSBtYWxsb2N4KHNpemVvZih2b2lkICopICog OCwgZmxhZ3MpOworCQlhc3NlcnRfcHRyX25vdF9udWxsKGFsbG9jYXRlZFtpXSwgIlVuZXhwZWN0 ZWQgbWFsbG9jeCBmYWlsdXJlIik7CisJCWlmIChpID4gMCkgeworCQkJLyogRW11bGF0ZSBhIGNp cmN1bGFyIGxpc3QuICovCisJCQkqKHZvaWQgKiopYWxsb2NhdGVkW2ldID0gYWxsb2NhdGVkW2kg LSAxXTsKKwkJfQorCX0KKwkqKHZvaWQgKiopYWxsb2NhdGVkWzBdID0gYWxsb2NhdGVkW25fYWxs b2MgLSAxXTsKKwlleHBlY3RfdHJ1ZShjaGVja19hbGxvY2F0ZWRfaW50YWN0KGFsbG9jYXRlZCwg bl9hbGxvYyksCisJICAgICJBbGxvY2F0ZWQgZGF0YSBjb3JydXB0ZWQiKTsKKworCWZvciAodW5z aWduZWQgaSA9IDA7IGkgPCBuX2FsbG9jOyBpKyspIHsKKwkJZnJlZShhbGxvY2F0ZWRbaV0pOwor CX0KKwkvKiBSZWFkLWFmdGVyLWZyZWUgKi8KKwlleHBlY3RfZmFsc2UoY2hlY2tfYWxsb2NhdGVk X2ludGFjdChhbGxvY2F0ZWQsIG5fYWxsb2MpLAorCSAgICAiSnVuay1maWxsaW5nIG5vdCBkZXRl Y3RlZCIpOworCisJdGVzdF93cml0ZV9hZnRlcl9mcmVlX3ByZSgpOworCWZvciAodW5zaWduZWQg aSA9IDA7IGkgPCBuX2FsbG9jOyBpKyspIHsKKwkJYWxsb2NhdGVkW2ldID0gbWFsbG9jeChzaXpl b2Yodm9pZCAqKSwgZmxhZ3MpOworCQlhc3NlcnRfcHRyX25vdF9udWxsKGFsbG9jYXRlZFtpXSwg IlVuZXhwZWN0ZWQgbWFsbG9jeCBmYWlsdXJlIik7CisJCSoodm9pZCAqKilhbGxvY2F0ZWRbaV0g PSAodm9pZCAqKSh1aW50cHRyX3QpaTsKKwl9CisJLyogV3JpdGUtYWZ0ZXItZnJlZSAqLworCWZv ciAodW5zaWduZWQgaSA9IDA7IGkgPCBuX2FsbG9jOyBpKyspIHsKKwkJZnJlZShhbGxvY2F0ZWRb aV0pOworCQkqKHZvaWQgKiopYWxsb2NhdGVkW2ldID0gTlVMTDsKKwl9CisJdGVzdF93cml0ZV9h ZnRlcl9mcmVlX3Bvc3QoKTsKK30KK1RFU1RfRU5ECisKK2ludAorbWFpbih2b2lkKSB7CisJcmV0 dXJuIHRlc3QoCisJICAgIHRlc3RfcmVhZF9hZnRlcl9mcmVlLAorCSAgICB0ZXN0X3dyaXRlX2Fm dGVyX2ZyZWUsCisJICAgIHRlc3RfdXNlX2FmdGVyX2ZyZWVfaW50ZWdyYXRpb24pOworfQoKZGlm ZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5p dC93aXRuZXNzLmMgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0 L3VuaXQvd2l0bmVzcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhNmM0 NDgKLS0tIC9kZXYvbnVsbAorKysgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01 LjMuMC90ZXN0L3VuaXQvd2l0bmVzcy5jCkBAIC0wLDAgKzEsMjgwIEBACisjaW5jbHVkZSAidGVz dC9qZW1hbGxvY190ZXN0LmgiCisKK3N0YXRpYyB3aXRuZXNzX2xvY2tfZXJyb3JfdCAqd2l0bmVz c19sb2NrX2Vycm9yX29yaWc7CitzdGF0aWMgd2l0bmVzc19vd25lcl9lcnJvcl90ICp3aXRuZXNz X293bmVyX2Vycm9yX29yaWc7CitzdGF0aWMgd2l0bmVzc19ub3Rfb3duZXJfZXJyb3JfdCAqd2l0 bmVzc19ub3Rfb3duZXJfZXJyb3Jfb3JpZzsKK3N0YXRpYyB3aXRuZXNzX2RlcHRoX2Vycm9yX3Qg KndpdG5lc3NfZGVwdGhfZXJyb3Jfb3JpZzsKKworc3RhdGljIGJvb2wgc2F3X2xvY2tfZXJyb3I7 CitzdGF0aWMgYm9vbCBzYXdfb3duZXJfZXJyb3I7CitzdGF0aWMgYm9vbCBzYXdfbm90X293bmVy X2Vycm9yOworc3RhdGljIGJvb2wgc2F3X2RlcHRoX2Vycm9yOworCitzdGF0aWMgdm9pZAord2l0 bmVzc19sb2NrX2Vycm9yX2ludGVyY2VwdChjb25zdCB3aXRuZXNzX2xpc3RfdCAqd2l0bmVzc2Vz LAorICAgIGNvbnN0IHdpdG5lc3NfdCAqd2l0bmVzcykgeworCXNhd19sb2NrX2Vycm9yID0gdHJ1 ZTsKK30KKworc3RhdGljIHZvaWQKK3dpdG5lc3Nfb3duZXJfZXJyb3JfaW50ZXJjZXB0KGNvbnN0 IHdpdG5lc3NfdCAqd2l0bmVzcykgeworCXNhd19vd25lcl9lcnJvciA9IHRydWU7Cit9CisKK3N0 YXRpYyB2b2lkCit3aXRuZXNzX25vdF9vd25lcl9lcnJvcl9pbnRlcmNlcHQoY29uc3Qgd2l0bmVz c190ICp3aXRuZXNzKSB7CisJc2F3X25vdF9vd25lcl9lcnJvciA9IHRydWU7Cit9CisKK3N0YXRp YyB2b2lkCit3aXRuZXNzX2RlcHRoX2Vycm9yX2ludGVyY2VwdChjb25zdCB3aXRuZXNzX2xpc3Rf dCAqd2l0bmVzc2VzLAorICAgIHdpdG5lc3NfcmFua190IHJhbmtfaW5jbHVzaXZlLCB1bnNpZ25l ZCBkZXB0aCkgeworCXNhd19kZXB0aF9lcnJvciA9IHRydWU7Cit9CisKK3N0YXRpYyBpbnQKK3dp dG5lc3NfY29tcChjb25zdCB3aXRuZXNzX3QgKmEsIHZvaWQgKm9hLCBjb25zdCB3aXRuZXNzX3Qg KmIsIHZvaWQgKm9iKSB7CisJZXhwZWN0X3VfZXEoYS0+cmFuaywgYi0+cmFuaywgIldpdG5lc3Nl cyBzaG91bGQgaGF2ZSBlcXVhbCByYW5rIik7CisKKwlhc3NlcnQob2EgPT0gKHZvaWQgKilhKTsK Kwlhc3NlcnQob2IgPT0gKHZvaWQgKiliKTsKKworCXJldHVybiBzdHJjbXAoYS0+bmFtZSwgYi0+ bmFtZSk7Cit9CisKK3N0YXRpYyBpbnQKK3dpdG5lc3NfY29tcF9yZXZlcnNlKGNvbnN0IHdpdG5l c3NfdCAqYSwgdm9pZCAqb2EsIGNvbnN0IHdpdG5lc3NfdCAqYiwKKyAgICB2b2lkICpvYikgewor CWV4cGVjdF91X2VxKGEtPnJhbmssIGItPnJhbmssICJXaXRuZXNzZXMgc2hvdWxkIGhhdmUgZXF1 YWwgcmFuayIpOworCisJYXNzZXJ0KG9hID09ICh2b2lkICopYSk7CisJYXNzZXJ0KG9iID09ICh2 b2lkICopYik7CisKKwlyZXR1cm4gLXN0cmNtcChhLT5uYW1lLCBiLT5uYW1lKTsKK30KKworVEVT VF9CRUdJTih0ZXN0X3dpdG5lc3MpIHsKKwl3aXRuZXNzX3QgYSwgYjsKKwl3aXRuZXNzX3RzZG5f dCB3aXRuZXNzX3RzZG4gPSB7IFdJVE5FU1NfVFNEX0lOSVRJQUxJWkVSIH07CisKKwl0ZXN0X3Nr aXBfaWYoIWNvbmZpZ19kZWJ1Zyk7CisKKwl3aXRuZXNzX2Fzc2VydF9sb2NrbGVzcygmd2l0bmVz c190c2RuKTsKKwl3aXRuZXNzX2Fzc2VydF9kZXB0aCgmd2l0bmVzc190c2RuLCAwKTsKKwl3aXRu ZXNzX2Fzc2VydF9kZXB0aF90b19yYW5rKCZ3aXRuZXNzX3RzZG4sICh3aXRuZXNzX3JhbmtfdCkx VSwgMCk7CisKKwl3aXRuZXNzX2luaXQoJmEsICJhIiwgMSwgTlVMTCwgTlVMTCk7CisJd2l0bmVz c19hc3NlcnRfbm90X293bmVyKCZ3aXRuZXNzX3RzZG4sICZhKTsKKwl3aXRuZXNzX2xvY2soJndp dG5lc3NfdHNkbiwgJmEpOworCXdpdG5lc3NfYXNzZXJ0X293bmVyKCZ3aXRuZXNzX3RzZG4sICZh KTsKKwl3aXRuZXNzX2Fzc2VydF9kZXB0aCgmd2l0bmVzc190c2RuLCAxKTsKKwl3aXRuZXNzX2Fz c2VydF9kZXB0aF90b19yYW5rKCZ3aXRuZXNzX3RzZG4sICh3aXRuZXNzX3JhbmtfdCkxVSwgMSk7 CisJd2l0bmVzc19hc3NlcnRfZGVwdGhfdG9fcmFuaygmd2l0bmVzc190c2RuLCAod2l0bmVzc19y YW5rX3QpMlUsIDApOworCisJd2l0bmVzc19pbml0KCZiLCAiYiIsIDIsIE5VTEwsIE5VTEwpOwor CXdpdG5lc3NfYXNzZXJ0X25vdF9vd25lcigmd2l0bmVzc190c2RuLCAmYik7CisJd2l0bmVzc19s b2NrKCZ3aXRuZXNzX3RzZG4sICZiKTsKKwl3aXRuZXNzX2Fzc2VydF9vd25lcigmd2l0bmVzc190 c2RuLCAmYik7CisJd2l0bmVzc19hc3NlcnRfZGVwdGgoJndpdG5lc3NfdHNkbiwgMik7CisJd2l0 bmVzc19hc3NlcnRfZGVwdGhfdG9fcmFuaygmd2l0bmVzc190c2RuLCAod2l0bmVzc19yYW5rX3Qp MVUsIDIpOworCXdpdG5lc3NfYXNzZXJ0X2RlcHRoX3RvX3JhbmsoJndpdG5lc3NfdHNkbiwgKHdp dG5lc3NfcmFua190KTJVLCAxKTsKKwl3aXRuZXNzX2Fzc2VydF9kZXB0aF90b19yYW5rKCZ3aXRu ZXNzX3RzZG4sICh3aXRuZXNzX3JhbmtfdCkzVSwgMCk7CisKKwl3aXRuZXNzX3VubG9jaygmd2l0 bmVzc190c2RuLCAmYSk7CisJd2l0bmVzc19hc3NlcnRfZGVwdGgoJndpdG5lc3NfdHNkbiwgMSk7 CisJd2l0bmVzc19hc3NlcnRfZGVwdGhfdG9fcmFuaygmd2l0bmVzc190c2RuLCAod2l0bmVzc19y YW5rX3QpMVUsIDEpOworCXdpdG5lc3NfYXNzZXJ0X2RlcHRoX3RvX3JhbmsoJndpdG5lc3NfdHNk biwgKHdpdG5lc3NfcmFua190KTJVLCAxKTsKKwl3aXRuZXNzX2Fzc2VydF9kZXB0aF90b19yYW5r KCZ3aXRuZXNzX3RzZG4sICh3aXRuZXNzX3JhbmtfdCkzVSwgMCk7CisJd2l0bmVzc191bmxvY2so JndpdG5lc3NfdHNkbiwgJmIpOworCisJd2l0bmVzc19hc3NlcnRfbG9ja2xlc3MoJndpdG5lc3Nf dHNkbik7CisJd2l0bmVzc19hc3NlcnRfZGVwdGgoJndpdG5lc3NfdHNkbiwgMCk7CisJd2l0bmVz c19hc3NlcnRfZGVwdGhfdG9fcmFuaygmd2l0bmVzc190c2RuLCAod2l0bmVzc19yYW5rX3QpMVUs IDApOworfQorVEVTVF9FTkQKKworVEVTVF9CRUdJTih0ZXN0X3dpdG5lc3NfY29tcCkgeworCXdp dG5lc3NfdCBhLCBiLCBjLCBkOworCXdpdG5lc3NfdHNkbl90IHdpdG5lc3NfdHNkbiA9IHsgV0lU TkVTU19UU0RfSU5JVElBTElaRVIgfTsKKworCXRlc3Rfc2tpcF9pZighY29uZmlnX2RlYnVnKTsK KworCXdpdG5lc3NfYXNzZXJ0X2xvY2tsZXNzKCZ3aXRuZXNzX3RzZG4pOworCisJd2l0bmVzc19p bml0KCZhLCAiYSIsIDEsIHdpdG5lc3NfY29tcCwgJmEpOworCXdpdG5lc3NfYXNzZXJ0X25vdF9v d25lcigmd2l0bmVzc190c2RuLCAmYSk7CisJd2l0bmVzc19sb2NrKCZ3aXRuZXNzX3RzZG4sICZh KTsKKwl3aXRuZXNzX2Fzc2VydF9vd25lcigmd2l0bmVzc190c2RuLCAmYSk7CisJd2l0bmVzc19h c3NlcnRfZGVwdGgoJndpdG5lc3NfdHNkbiwgMSk7CisKKwl3aXRuZXNzX2luaXQoJmIsICJiIiwg MSwgd2l0bmVzc19jb21wLCAmYik7CisJd2l0bmVzc19hc3NlcnRfbm90X293bmVyKCZ3aXRuZXNz X3RzZG4sICZiKTsKKwl3aXRuZXNzX2xvY2soJndpdG5lc3NfdHNkbiwgJmIpOworCXdpdG5lc3Nf YXNzZXJ0X293bmVyKCZ3aXRuZXNzX3RzZG4sICZiKTsKKwl3aXRuZXNzX2Fzc2VydF9kZXB0aCgm d2l0bmVzc190c2RuLCAyKTsKKwl3aXRuZXNzX3VubG9jaygmd2l0bmVzc190c2RuLCAmYik7CisJ d2l0bmVzc19hc3NlcnRfZGVwdGgoJndpdG5lc3NfdHNkbiwgMSk7CisKKwl3aXRuZXNzX2xvY2tf ZXJyb3Jfb3JpZyA9IHdpdG5lc3NfbG9ja19lcnJvcjsKKwl3aXRuZXNzX2xvY2tfZXJyb3IgPSB3 aXRuZXNzX2xvY2tfZXJyb3JfaW50ZXJjZXB0OworCXNhd19sb2NrX2Vycm9yID0gZmFsc2U7CisK Kwl3aXRuZXNzX2luaXQoJmMsICJjIiwgMSwgd2l0bmVzc19jb21wX3JldmVyc2UsICZjKTsKKwl3 aXRuZXNzX2Fzc2VydF9ub3Rfb3duZXIoJndpdG5lc3NfdHNkbiwgJmMpOworCWV4cGVjdF9mYWxz ZShzYXdfbG9ja19lcnJvciwgIlVuZXhwZWN0ZWQgd2l0bmVzcyBsb2NrIGVycm9yIik7CisJd2l0 bmVzc19sb2NrKCZ3aXRuZXNzX3RzZG4sICZjKTsKKwlleHBlY3RfdHJ1ZShzYXdfbG9ja19lcnJv ciwgIkV4cGVjdGVkIHdpdG5lc3MgbG9jayBlcnJvciIpOworCXdpdG5lc3NfdW5sb2NrKCZ3aXRu ZXNzX3RzZG4sICZjKTsKKwl3aXRuZXNzX2Fzc2VydF9kZXB0aCgmd2l0bmVzc190c2RuLCAxKTsK KworCXNhd19sb2NrX2Vycm9yID0gZmFsc2U7CisKKwl3aXRuZXNzX2luaXQoJmQsICJkIiwgMSwg TlVMTCwgTlVMTCk7CisJd2l0bmVzc19hc3NlcnRfbm90X293bmVyKCZ3aXRuZXNzX3RzZG4sICZk KTsKKwlleHBlY3RfZmFsc2Uoc2F3X2xvY2tfZXJyb3IsICJVbmV4cGVjdGVkIHdpdG5lc3MgbG9j ayBlcnJvciIpOworCXdpdG5lc3NfbG9jaygmd2l0bmVzc190c2RuLCAmZCk7CisJZXhwZWN0X3Ry dWUoc2F3X2xvY2tfZXJyb3IsICJFeHBlY3RlZCB3aXRuZXNzIGxvY2sgZXJyb3IiKTsKKwl3aXRu ZXNzX3VubG9jaygmd2l0bmVzc190c2RuLCAmZCk7CisJd2l0bmVzc19hc3NlcnRfZGVwdGgoJndp dG5lc3NfdHNkbiwgMSk7CisKKwl3aXRuZXNzX3VubG9jaygmd2l0bmVzc190c2RuLCAmYSk7CisK Kwl3aXRuZXNzX2Fzc2VydF9sb2NrbGVzcygmd2l0bmVzc190c2RuKTsKKworCXdpdG5lc3NfbG9j a19lcnJvciA9IHdpdG5lc3NfbG9ja19lcnJvcl9vcmlnOworfQorVEVTVF9FTkQKKworVEVTVF9C RUdJTih0ZXN0X3dpdG5lc3NfcmV2ZXJzYWwpIHsKKwl3aXRuZXNzX3QgYSwgYjsKKwl3aXRuZXNz X3RzZG5fdCB3aXRuZXNzX3RzZG4gPSB7IFdJVE5FU1NfVFNEX0lOSVRJQUxJWkVSIH07CisKKwl0 ZXN0X3NraXBfaWYoIWNvbmZpZ19kZWJ1Zyk7CisKKwl3aXRuZXNzX2xvY2tfZXJyb3Jfb3JpZyA9 IHdpdG5lc3NfbG9ja19lcnJvcjsKKwl3aXRuZXNzX2xvY2tfZXJyb3IgPSB3aXRuZXNzX2xvY2tf ZXJyb3JfaW50ZXJjZXB0OworCXNhd19sb2NrX2Vycm9yID0gZmFsc2U7CisKKwl3aXRuZXNzX2Fz c2VydF9sb2NrbGVzcygmd2l0bmVzc190c2RuKTsKKworCXdpdG5lc3NfaW5pdCgmYSwgImEiLCAx LCBOVUxMLCBOVUxMKTsKKwl3aXRuZXNzX2luaXQoJmIsICJiIiwgMiwgTlVMTCwgTlVMTCk7CisK Kwl3aXRuZXNzX2xvY2soJndpdG5lc3NfdHNkbiwgJmIpOworCXdpdG5lc3NfYXNzZXJ0X2RlcHRo KCZ3aXRuZXNzX3RzZG4sIDEpOworCWV4cGVjdF9mYWxzZShzYXdfbG9ja19lcnJvciwgIlVuZXhw ZWN0ZWQgd2l0bmVzcyBsb2NrIGVycm9yIik7CisJd2l0bmVzc19sb2NrKCZ3aXRuZXNzX3RzZG4s ICZhKTsKKwlleHBlY3RfdHJ1ZShzYXdfbG9ja19lcnJvciwgIkV4cGVjdGVkIHdpdG5lc3MgbG9j ayBlcnJvciIpOworCisJd2l0bmVzc191bmxvY2soJndpdG5lc3NfdHNkbiwgJmEpOworCXdpdG5l c3NfYXNzZXJ0X2RlcHRoKCZ3aXRuZXNzX3RzZG4sIDEpOworCXdpdG5lc3NfdW5sb2NrKCZ3aXRu ZXNzX3RzZG4sICZiKTsKKworCXdpdG5lc3NfYXNzZXJ0X2xvY2tsZXNzKCZ3aXRuZXNzX3RzZG4p OworCisJd2l0bmVzc19sb2NrX2Vycm9yID0gd2l0bmVzc19sb2NrX2Vycm9yX29yaWc7Cit9CitU RVNUX0VORAorCitURVNUX0JFR0lOKHRlc3Rfd2l0bmVzc19yZWN1cnNpdmUpIHsKKwl3aXRuZXNz X3QgYTsKKwl3aXRuZXNzX3RzZG5fdCB3aXRuZXNzX3RzZG4gPSB7IFdJVE5FU1NfVFNEX0lOSVRJ QUxJWkVSIH07CisKKwl0ZXN0X3NraXBfaWYoIWNvbmZpZ19kZWJ1Zyk7CisKKwl3aXRuZXNzX25v dF9vd25lcl9lcnJvcl9vcmlnID0gd2l0bmVzc19ub3Rfb3duZXJfZXJyb3I7CisJd2l0bmVzc19u b3Rfb3duZXJfZXJyb3IgPSB3aXRuZXNzX25vdF9vd25lcl9lcnJvcl9pbnRlcmNlcHQ7CisJc2F3 X25vdF9vd25lcl9lcnJvciA9IGZhbHNlOworCisJd2l0bmVzc19sb2NrX2Vycm9yX29yaWcgPSB3 aXRuZXNzX2xvY2tfZXJyb3I7CisJd2l0bmVzc19sb2NrX2Vycm9yID0gd2l0bmVzc19sb2NrX2Vy cm9yX2ludGVyY2VwdDsKKwlzYXdfbG9ja19lcnJvciA9IGZhbHNlOworCisJd2l0bmVzc19hc3Nl cnRfbG9ja2xlc3MoJndpdG5lc3NfdHNkbik7CisKKwl3aXRuZXNzX2luaXQoJmEsICJhIiwgMSwg TlVMTCwgTlVMTCk7CisKKwl3aXRuZXNzX2xvY2soJndpdG5lc3NfdHNkbiwgJmEpOworCWV4cGVj dF9mYWxzZShzYXdfbG9ja19lcnJvciwgIlVuZXhwZWN0ZWQgd2l0bmVzcyBsb2NrIGVycm9yIik7 CisJZXhwZWN0X2ZhbHNlKHNhd19ub3Rfb3duZXJfZXJyb3IsICJVbmV4cGVjdGVkIHdpdG5lc3Mg bm90IG93bmVyIGVycm9yIik7CisJd2l0bmVzc19sb2NrKCZ3aXRuZXNzX3RzZG4sICZhKTsKKwll eHBlY3RfdHJ1ZShzYXdfbG9ja19lcnJvciwgIkV4cGVjdGVkIHdpdG5lc3MgbG9jayBlcnJvciIp OworCWV4cGVjdF90cnVlKHNhd19ub3Rfb3duZXJfZXJyb3IsICJFeHBlY3RlZCB3aXRuZXNzIG5v dCBvd25lciBlcnJvciIpOworCisJd2l0bmVzc191bmxvY2soJndpdG5lc3NfdHNkbiwgJmEpOwor CisJd2l0bmVzc19hc3NlcnRfbG9ja2xlc3MoJndpdG5lc3NfdHNkbik7CisKKwl3aXRuZXNzX293 bmVyX2Vycm9yID0gd2l0bmVzc19vd25lcl9lcnJvcl9vcmlnOworCXdpdG5lc3NfbG9ja19lcnJv ciA9IHdpdG5lc3NfbG9ja19lcnJvcl9vcmlnOworCit9CitURVNUX0VORAorCitURVNUX0JFR0lO KHRlc3Rfd2l0bmVzc191bmxvY2tfbm90X293bmVkKSB7CisJd2l0bmVzc190IGE7CisJd2l0bmVz c190c2RuX3Qgd2l0bmVzc190c2RuID0geyBXSVRORVNTX1RTRF9JTklUSUFMSVpFUiB9OworCisJ dGVzdF9za2lwX2lmKCFjb25maWdfZGVidWcpOworCisJd2l0bmVzc19vd25lcl9lcnJvcl9vcmln ID0gd2l0bmVzc19vd25lcl9lcnJvcjsKKwl3aXRuZXNzX293bmVyX2Vycm9yID0gd2l0bmVzc19v d25lcl9lcnJvcl9pbnRlcmNlcHQ7CisJc2F3X293bmVyX2Vycm9yID0gZmFsc2U7CisKKwl3aXRu ZXNzX2Fzc2VydF9sb2NrbGVzcygmd2l0bmVzc190c2RuKTsKKworCXdpdG5lc3NfaW5pdCgmYSwg ImEiLCAxLCBOVUxMLCBOVUxMKTsKKworCWV4cGVjdF9mYWxzZShzYXdfb3duZXJfZXJyb3IsICJV bmV4cGVjdGVkIG93bmVyIGVycm9yIik7CisJd2l0bmVzc191bmxvY2soJndpdG5lc3NfdHNkbiwg JmEpOworCWV4cGVjdF90cnVlKHNhd19vd25lcl9lcnJvciwgIkV4cGVjdGVkIG93bmVyIGVycm9y Iik7CisKKwl3aXRuZXNzX2Fzc2VydF9sb2NrbGVzcygmd2l0bmVzc190c2RuKTsKKworCXdpdG5l c3Nfb3duZXJfZXJyb3IgPSB3aXRuZXNzX293bmVyX2Vycm9yX29yaWc7Cit9CitURVNUX0VORAor CitURVNUX0JFR0lOKHRlc3Rfd2l0bmVzc19kZXB0aCkgeworCXdpdG5lc3NfdCBhOworCXdpdG5l c3NfdHNkbl90IHdpdG5lc3NfdHNkbiA9IHsgV0lUTkVTU19UU0RfSU5JVElBTElaRVIgfTsKKwor CXRlc3Rfc2tpcF9pZighY29uZmlnX2RlYnVnKTsKKworCXdpdG5lc3NfZGVwdGhfZXJyb3Jfb3Jp ZyA9IHdpdG5lc3NfZGVwdGhfZXJyb3I7CisJd2l0bmVzc19kZXB0aF9lcnJvciA9IHdpdG5lc3Nf ZGVwdGhfZXJyb3JfaW50ZXJjZXB0OworCXNhd19kZXB0aF9lcnJvciA9IGZhbHNlOworCisJd2l0 bmVzc19hc3NlcnRfbG9ja2xlc3MoJndpdG5lc3NfdHNkbik7CisJd2l0bmVzc19hc3NlcnRfZGVw dGgoJndpdG5lc3NfdHNkbiwgMCk7CisKKwl3aXRuZXNzX2luaXQoJmEsICJhIiwgMSwgTlVMTCwg TlVMTCk7CisKKwlleHBlY3RfZmFsc2Uoc2F3X2RlcHRoX2Vycm9yLCAiVW5leHBlY3RlZCBkZXB0 aCBlcnJvciIpOworCXdpdG5lc3NfYXNzZXJ0X2xvY2tsZXNzKCZ3aXRuZXNzX3RzZG4pOworCXdp dG5lc3NfYXNzZXJ0X2RlcHRoKCZ3aXRuZXNzX3RzZG4sIDApOworCisJd2l0bmVzc19sb2NrKCZ3 aXRuZXNzX3RzZG4sICZhKTsKKwl3aXRuZXNzX2Fzc2VydF9sb2NrbGVzcygmd2l0bmVzc190c2Ru KTsKKwl3aXRuZXNzX2Fzc2VydF9kZXB0aCgmd2l0bmVzc190c2RuLCAwKTsKKwlleHBlY3RfdHJ1 ZShzYXdfZGVwdGhfZXJyb3IsICJFeHBlY3RlZCBkZXB0aCBlcnJvciIpOworCisJd2l0bmVzc191 bmxvY2soJndpdG5lc3NfdHNkbiwgJmEpOworCisJd2l0bmVzc19hc3NlcnRfbG9ja2xlc3MoJndp dG5lc3NfdHNkbik7CisJd2l0bmVzc19hc3NlcnRfZGVwdGgoJndpdG5lc3NfdHNkbiwgMCk7CisK Kwl3aXRuZXNzX2RlcHRoX2Vycm9yID0gd2l0bmVzc19kZXB0aF9lcnJvcl9vcmlnOworfQorVEVT VF9FTkQKKworaW50CittYWluKHZvaWQpIHsKKwlyZXR1cm4gdGVzdCgKKwkgICAgdGVzdF93aXRu ZXNzLAorCSAgICB0ZXN0X3dpdG5lc3NfY29tcCwKKwkgICAgdGVzdF93aXRuZXNzX3JldmVyc2Fs LAorCSAgICB0ZXN0X3dpdG5lc3NfcmVjdXJzaXZlLAorCSAgICB0ZXN0X3dpdG5lc3NfdW5sb2Nr X25vdF9vd25lZCwKKwkgICAgdGVzdF93aXRuZXNzX2RlcHRoKTsKK30KCmRpZmYgLS1naXQgYS8z ODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvemVyby5jIGIv Mzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L3plcm8uYwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kM2U4MWYxCi0tLSAvZGV2L251bGwK KysrIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L3pl cm8uYwpAQCAtMCwwICsxLDU5IEBACisjaW5jbHVkZSAidGVzdC9qZW1hbGxvY190ZXN0LmgiCisK K3N0YXRpYyB2b2lkCit0ZXN0X3plcm8oc2l6ZV90IHN6X21pbiwgc2l6ZV90IHN6X21heCkgewor CXVpbnQ4X3QgKnM7CisJc2l6ZV90IHN6X3ByZXYsIHN6LCBpOworI2RlZmluZSBNQUdJQwkoKHVp bnQ4X3QpMHg2MSkKKworCXN6X3ByZXYgPSAwOworCXMgPSAodWludDhfdCAqKW1hbGxvY3goc3pf bWluLCAwKTsKKwlleHBlY3RfcHRyX25vdF9udWxsKCh2b2lkICopcywgIlVuZXhwZWN0ZWQgbWFs bG9jeCgpIGZhaWx1cmUiKTsKKworCWZvciAoc3ogPSBzYWxsb2N4KHMsIDApOyBzeiA8PSBzel9t YXg7CisJICAgIHN6X3ByZXYgPSBzeiwgc3ogPSBzYWxsb2N4KHMsIDApKSB7CisJCWlmIChzel9w cmV2ID4gMCkgeworCQkJZXhwZWN0X3VfZXEoc1swXSwgTUFHSUMsCisJCQkgICAgIlByZXZpb3Vz bHkgYWxsb2NhdGVkIGJ5dGUgJXp1LyV6dSBpcyBjb3JydXB0ZWQiLAorCQkJICAgIFpVKDApLCBz el9wcmV2KTsKKwkJCWV4cGVjdF91X2VxKHNbc3pfcHJldi0xXSwgTUFHSUMsCisJCQkgICAgIlBy ZXZpb3VzbHkgYWxsb2NhdGVkIGJ5dGUgJXp1LyV6dSBpcyBjb3JydXB0ZWQiLAorCQkJICAgIHN6 X3ByZXYtMSwgc3pfcHJldik7CisJCX0KKworCQlmb3IgKGkgPSBzel9wcmV2OyBpIDwgc3o7IGkr KykgeworCQkJZXhwZWN0X3VfZXEoc1tpXSwgMHgwLAorCQkJICAgICJOZXdseSBhbGxvY2F0ZWQg Ynl0ZSAlenUvJXp1IGlzbid0IHplcm8tZmlsbGVkIiwKKwkJCSAgICBpLCBzeik7CisJCQlzW2ld ID0gTUFHSUM7CisJCX0KKworCQlpZiAoeGFsbG9jeChzLCBzeisxLCAwLCAwKSA9PSBzeikgewor CQkJcyA9ICh1aW50OF90ICopcmFsbG9jeChzLCBzeisxLCAwKTsKKwkJCWV4cGVjdF9wdHJfbm90 X251bGwoKHZvaWQgKilzLAorCQkJICAgICJVbmV4cGVjdGVkIHJhbGxvY3goKSBmYWlsdXJlIik7 CisJCX0KKwl9CisKKwlkYWxsb2N4KHMsIDApOworI3VuZGVmIE1BR0lDCit9CisKK1RFU1RfQkVH SU4odGVzdF96ZXJvX3NtYWxsKSB7CisJdGVzdF9za2lwX2lmKCFjb25maWdfZmlsbCk7CisJdGVz dF96ZXJvKDEsIFNDX1NNQUxMX01BWENMQVNTIC0gMSk7Cit9CitURVNUX0VORAorCitURVNUX0JF R0lOKHRlc3RfemVyb19sYXJnZSkgeworCXRlc3Rfc2tpcF9pZighY29uZmlnX2ZpbGwpOworCXRl c3RfemVybyhTQ19TTUFMTF9NQVhDTEFTUyArIDEsIDFVIDw8IChTQ19MR19MQVJHRV9NSU5DTEFT UyArIDEpKTsKK30KK1RFU1RfRU5ECisKK2ludAorbWFpbih2b2lkKSB7CisJcmV0dXJuIHRlc3Qo CisJICAgIHRlc3RfemVyb19zbWFsbCwKKwkgICAgdGVzdF96ZXJvX2xhcmdlKTsKK30KCmRpZmYg LS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQv emVyby5zaCBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5p dC96ZXJvLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0NTQwYjIKLS0t IC9kZXYvbnVsbAorKysgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90 ZXN0L3VuaXQvemVyby5zaApAQCAtMCwwICsxLDUgQEAKKyMhL2Jpbi9zaAorCitpZiBbICJ4JHtl bmFibGVfZmlsbH0iID0gIngxIiBdIDsgdGhlbgorICBleHBvcnQgTUFMTE9DX0NPTkY9ImFib3J0 OmZhbHNlLGp1bms6ZmFsc2UsemVybzp0cnVlIgorZmkKCmRpZmYgLS1naXQgYS8zODktZHMtYmFz ZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvemVyb19yZWFsbG9jX2Fib3J0 LmMgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvemVy b19yZWFsbG9jX2Fib3J0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTg4 MGQxMAotLS0gL2Rldi9udWxsCisrKyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9j LTUuMy4wL3Rlc3QvdW5pdC96ZXJvX3JlYWxsb2NfYWJvcnQuYwpAQCAtMCwwICsxLDI2IEBACisj aW5jbHVkZSAidGVzdC9qZW1hbGxvY190ZXN0LmgiCisKKyNpbmNsdWRlIDxzaWduYWwuaD4KKwor c3RhdGljIGJvb2wgYWJvcnRfY2FsbGVkID0gZmFsc2U7CisKK3ZvaWQgc2V0X2Fib3J0X2NhbGxl ZCgpIHsKKwlhYm9ydF9jYWxsZWQgPSB0cnVlOworfTsKKworVEVTVF9CRUdJTih0ZXN0X3JlYWxs b2NfYWJvcnQpIHsKKwlhYm9ydF9jYWxsZWQgPSBmYWxzZTsKKwlzYWZldHlfY2hlY2tfc2V0X2Fi b3J0KCZzZXRfYWJvcnRfY2FsbGVkKTsKKwl2b2lkICpwdHIgPSBtYWxsb2N4KDQyLCAwKTsKKwll eHBlY3RfcHRyX25vdF9udWxsKHB0ciwgIlVuZXhwZWN0ZWQgbWFsbG9jeCBlcnJvciIpOworCXB0 ciA9IHJlYWxsb2MocHRyLCAwKTsKKwlleHBlY3RfdHJ1ZShhYm9ydF9jYWxsZWQsICJSZWFsbG9j IHdpdGggemVybyBzaXplIGRpZG4ndCBhYm9ydCIpOworfQorVEVTVF9FTkQKKworaW50CittYWlu KHZvaWQpIHsKKwlyZXR1cm4gdGVzdCgKKwkgICAgdGVzdF9yZWFsbG9jX2Fib3J0KTsKK30KKwoK ZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3Qv dW5pdC96ZXJvX3JlYWxsb2NfYWJvcnQuc2ggYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1h bGxvYy01LjMuMC90ZXN0L3VuaXQvemVyb19yZWFsbG9jX2Fib3J0LnNoCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3ZGFlZWEKLS0tIC9kZXYvbnVsbAorKysgYi8zODktZHMt YmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvemVyb19yZWFsbG9jX2Fi b3J0LnNoCkBAIC0wLDAgKzEsMyBAQAorIyEvYmluL3NoCisKK2V4cG9ydCBNQUxMT0NfQ09ORj0i emVyb19yZWFsbG9jOmFib3J0IgoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxk L2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC96ZXJvX3JlYWxsb2NfYWxsb2MuYyBiLzM4OS1kcy1i YXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC96ZXJvX3JlYWxsb2NfYWxs b2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NWUwN2JkCi0tLSAvZGV2 L251bGwKKysrIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91 bml0L3plcm9fcmVhbGxvY19hbGxvYy5jCkBAIC0wLDAgKzEsNDggQEAKKyNpbmNsdWRlICJ0ZXN0 L2plbWFsbG9jX3Rlc3QuaCIKKworc3RhdGljIHVpbnQ2NF90CithbGxvY2F0ZWQoKSB7CisJaWYg KCFjb25maWdfc3RhdHMpIHsKKwkJcmV0dXJuIDA7CisJfQorCXVpbnQ2NF90IGFsbG9jYXRlZDsK KwlzaXplX3Qgc3ogPSBzaXplb2YoYWxsb2NhdGVkKTsKKwlleHBlY3RfZF9lcShtYWxsY3RsKCJ0 aHJlYWQuYWxsb2NhdGVkIiwgKHZvaWQgKikmYWxsb2NhdGVkLCAmc3osIE5VTEwsCisJICAgIDAp LCAwLCAiVW5leHBlY3RlZCBtYWxsY3RsIGZhaWx1cmUiKTsKKwlyZXR1cm4gYWxsb2NhdGVkOwor fQorCitzdGF0aWMgdWludDY0X3QKK2RlYWxsb2NhdGVkKCkgeworCWlmICghY29uZmlnX3N0YXRz KSB7CisJCXJldHVybiAwOworCX0KKwl1aW50NjRfdCBkZWFsbG9jYXRlZDsKKwlzaXplX3Qgc3og PSBzaXplb2YoZGVhbGxvY2F0ZWQpOworCWV4cGVjdF9kX2VxKG1hbGxjdGwoInRocmVhZC5kZWFs bG9jYXRlZCIsICh2b2lkICopJmRlYWxsb2NhdGVkLCAmc3osCisJICAgIE5VTEwsIDApLCAwLCAi VW5leHBlY3RlZCBtYWxsY3RsIGZhaWx1cmUiKTsKKwlyZXR1cm4gZGVhbGxvY2F0ZWQ7Cit9CisK K1RFU1RfQkVHSU4odGVzdF9yZWFsbG9jX2FsbG9jKSB7CisJdm9pZCAqcHRyID0gbWFsbG9jeCgx LCAwKTsKKwlleHBlY3RfcHRyX25vdF9udWxsKHB0ciwgIlVuZXhwZWN0ZWQgbWFsbG9jeCBlcnJv ciIpOworCXVpbnQ2NF90IGFsbG9jYXRlZF9iZWZvcmUgPSBhbGxvY2F0ZWQoKTsKKwl1aW50NjRf dCBkZWFsbG9jYXRlZF9iZWZvcmUgPSBkZWFsbG9jYXRlZCgpOworCXB0ciA9IHJlYWxsb2MocHRy LCAwKTsKKwl1aW50NjRfdCBhbGxvY2F0ZWRfYWZ0ZXIgPSBhbGxvY2F0ZWQoKTsKKwl1aW50NjRf dCBkZWFsbG9jYXRlZF9hZnRlciA9IGRlYWxsb2NhdGVkKCk7CisJaWYgKGNvbmZpZ19zdGF0cykg eworCQlleHBlY3RfdTY0X2x0KGFsbG9jYXRlZF9iZWZvcmUsIGFsbG9jYXRlZF9hZnRlciwKKwkJ ICAgICJVbmV4cGVjdGVkIHN0YXRzIGNoYW5nZSIpOworCQlleHBlY3RfdTY0X2x0KGRlYWxsb2Nh dGVkX2JlZm9yZSwgZGVhbGxvY2F0ZWRfYWZ0ZXIsCisJCSAgICAiVW5leHBlY3RlZCBzdGF0cyBj aGFuZ2UiKTsKKwl9CisJZGFsbG9jeChwdHIsIDApOworfQorVEVTVF9FTkQKK2ludAorbWFpbih2 b2lkKSB7CisJcmV0dXJuIHRlc3QoCisJICAgIHRlc3RfcmVhbGxvY19hbGxvYyk7Cit9CgpkaWZm IC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0 L3plcm9fcmVhbGxvY19hbGxvYy5zaCBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9j LTUuMy4wL3Rlc3QvdW5pdC96ZXJvX3JlYWxsb2NfYWxsb2Muc2gKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMC4uODAyNjg3YwotLS0gL2Rldi9udWxsCisrKyBiLzM4OS1kcy1iYXNl LTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC96ZXJvX3JlYWxsb2NfYWxsb2Mu c2gKQEAgLTAsMCArMSwzIEBACisjIS9iaW4vc2gKKworZXhwb3J0IE1BTExPQ19DT05GPSJ6ZXJv X3JlYWxsb2M6YWxsb2MiCgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVt YWxsb2MtNS4zLjAvdGVzdC91bml0L3plcm9fcmVhbGxvY19mcmVlLmMgYi8zODktZHMtYmFzZS0z LjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvemVyb19yZWFsbG9jX2ZyZWUuYwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYWVkODZjCi0tLSAvZGV2L251bGwK KysrIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L3pl cm9fcmVhbGxvY19mcmVlLmMKQEAgLTAsMCArMSwzMyBAQAorI2luY2x1ZGUgInRlc3QvamVtYWxs b2NfdGVzdC5oIgorCitzdGF0aWMgdWludDY0X3QKK2RlYWxsb2NhdGVkKCkgeworCWlmICghY29u ZmlnX3N0YXRzKSB7CisJCXJldHVybiAwOworCX0KKwl1aW50NjRfdCBkZWFsbG9jYXRlZDsKKwlz aXplX3Qgc3ogPSBzaXplb2YoZGVhbGxvY2F0ZWQpOworCWV4cGVjdF9kX2VxKG1hbGxjdGwoInRo cmVhZC5kZWFsbG9jYXRlZCIsICh2b2lkICopJmRlYWxsb2NhdGVkLCAmc3osCisJICAgIE5VTEws IDApLCAwLCAiVW5leHBlY3RlZCBtYWxsY3RsIGZhaWx1cmUiKTsKKwlyZXR1cm4gZGVhbGxvY2F0 ZWQ7Cit9CisKK1RFU1RfQkVHSU4odGVzdF9yZWFsbG9jX2ZyZWUpIHsKKwl2b2lkICpwdHIgPSBt YWxsb2N4KDQyLCAwKTsKKwlleHBlY3RfcHRyX25vdF9udWxsKHB0ciwgIlVuZXhwZWN0ZWQgbWFs bG9jeCBlcnJvciIpOworCXVpbnQ2NF90IGRlYWxsb2NhdGVkX2JlZm9yZSA9IGRlYWxsb2NhdGVk KCk7CisJcHRyID0gcmVhbGxvYyhwdHIsIDApOworCXVpbnQ2NF90IGRlYWxsb2NhdGVkX2FmdGVy ID0gZGVhbGxvY2F0ZWQoKTsKKwlleHBlY3RfcHRyX251bGwocHRyLCAiUmVhbGxvYyBkaWRuJ3Qg ZnJlZSIpOworCWlmIChjb25maWdfc3RhdHMpIHsKKwkJZXhwZWN0X3U2NF9ndChkZWFsbG9jYXRl ZF9hZnRlciwgZGVhbGxvY2F0ZWRfYmVmb3JlLAorCQkgICAgIlJlYWxsb2MgZGlkbid0IGZyZWUi KTsKKwl9Cit9CitURVNUX0VORAorCitpbnQKK21haW4odm9pZCkgeworCXJldHVybiB0ZXN0KAor CSAgICB0ZXN0X3JlYWxsb2NfZnJlZSk7Cit9CgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4z LjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L3plcm9fcmVhbGxvY19mcmVlLnNoIGIv Mzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L3plcm9fcmVh bGxvY19mcmVlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxYjAxYzkK LS0tIC9kZXYvbnVsbAorKysgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMu MC90ZXN0L3VuaXQvemVyb19yZWFsbG9jX2ZyZWUuc2gKQEAgLTAsMCArMSwzIEBACisjIS9iaW4v c2gKKworZXhwb3J0IE1BTExPQ19DT05GPSJ6ZXJvX3JlYWxsb2M6ZnJlZSIKCmRpZmYgLS1naXQg YS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvemVyb19y ZWFsbG9jcy5jIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91 bml0L3plcm9fcmVhbGxvY3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42 NmM3YTQwCi0tLSAvZGV2L251bGwKKysrIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxs b2MtNS4zLjAvdGVzdC91bml0L3plcm9fcmVhbGxvY3MuYwpAQCAtMCwwICsxLDQwIEBACisjaW5j bHVkZSAidGVzdC9qZW1hbGxvY190ZXN0LmgiCisKK3N0YXRpYyBzaXplX3QKK3plcm9fcmVhbGxv Y3MoKSB7CisJaWYgKCFjb25maWdfc3RhdHMpIHsKKwkJcmV0dXJuIDA7CisJfQorCXNpemVfdCBj b3VudCA9IDEyMzQ1OworCXNpemVfdCBzeiA9IHNpemVvZihjb3VudCk7CisKKwlleHBlY3RfZF9l cShtYWxsY3RsKCJzdGF0cy56ZXJvX3JlYWxsb2NzIiwgKHZvaWQgKikmY291bnQsICZzeiwKKwkg ICAgTlVMTCwgMCksIDAsICJVbmV4cGVjdGVkIG1hbGxjdGwgZmFpbHVyZSIpOworCXJldHVybiBj b3VudDsKK30KKworVEVTVF9CRUdJTih0ZXN0X3plcm9fcmVhbGxvY3MpIHsKKwl0ZXN0X3NraXBf aWYoIWNvbmZpZ19zdGF0cyk7CisKKwlmb3IgKHNpemVfdCBpID0gMDsgaSA8IDEwMDsgKytpKSB7 CisJCXZvaWQgKnB0ciA9IG1hbGxvY3goaSAqIGkgKyAxLCAwKTsKKwkJZXhwZWN0X3B0cl9ub3Rf bnVsbChwdHIsICJVbmV4cGVjdGVkIG1hbGxvY3ggZXJyb3IiKTsKKwkJc2l6ZV90IGNvdW50ID0g emVyb19yZWFsbG9jcygpOworCQlleHBlY3RfenVfZXEoaSwgY291bnQsICJJbmNvcnJlY3QgemVy byByZWFsbG9jIGNvdW50Iik7CisJCXB0ciA9IHJlYWxsb2MocHRyLCAwKTsKKwkJZXhwZWN0X3B0 cl9udWxsKHB0ciwgIlJlYWxsb2MgZGlkbid0IGZyZWUiKTsKKwkJY291bnQgPSB6ZXJvX3JlYWxs b2NzKCk7CisJCWV4cGVjdF96dV9lcShpICsgMSwgY291bnQsICJSZWFsbG9jIGRpZG4ndCBhZGp1 c3QgY291bnQiKTsKKwl9Cit9CitURVNUX0VORAorCitpbnQKK21haW4odm9pZCkgeworCS8qCisJ ICogV2UgZXhwZWN0IGV4cGxpY2l0IGNvdW50czsgcmVlbnRyYW50IHRlc3RzIHJ1biBtdWx0aXBs ZSB0aW1lcywgc28KKwkgKiBjb3VudHMgbGVhayBhY3Jvc3MgcnVucy4KKwkgKi8KKwlyZXR1cm4g dGVzdF9ub19yZWVudHJhbmN5KAorCSAgICB0ZXN0X3plcm9fcmVhbGxvY3MpOworfQoKZGlmZiAt LWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC96 ZXJvX3JlYWxsb2NzLnNoIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAv dGVzdC91bml0L3plcm9fcmVhbGxvY3Muc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMC4uNTFiMDFjOQotLS0gL2Rldi9udWxsCisrKyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxk L2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC96ZXJvX3JlYWxsb2NzLnNoCkBAIC0wLDAgKzEsMyBA QAorIyEvYmluL3NoCisKK2V4cG9ydCBNQUxMT0NfQ09ORj0iemVyb19yZWFsbG9jOmZyZWUiCgpk aWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2Uuc3BlYyBiLzM4OS1kcy1iYXNlLnNwZWMKaW5kZXggOTJm MTVmZS4uMTU1ZTk3MSAxMDA2NDQKLS0tIGEvMzg5LWRzLWJhc2Uuc3BlYworKysgYi8zODktZHMt YmFzZS5zcGVjCkBAIC0xLDYgKzEsNiBAQAogJWdsb2JhbCBwa2duYW1lIGRpcnNydgogCi0jIEV4 Y2x1ZGUgaTY4NiBiaXQgYXJjaGVzCisjIEV4Y2x1ZGUgaTY4NiBhcmNoaXRlY3R1cmUKIEV4Y2x1 ZGVBcmNoOiBpNjg2CiAKICViY29uZCBidW5kbGVfamVtYWxsb2MgMQpAQCAtMTAsMTEgKzEwLDcg QEAgRXhjbHVkZUFyY2g6IGk2ODYKICVnbG9iYWwgX19wcm92aWRlc19leGNsdWRlIF5saWJqZW1h bGxvY1xcLnNvLiokCiAlZW5kaWYKIAotJWJjb25kIGJ1bmRsZV9saWJkYiAwCi0laWYgMCV7P3Jo ZWx9ID49IDEwCi0lYmNvbmQgYnVuZGxlX2xpYmRiIDEKLSVlbmRpZgotCislYmNvbmQgYnVuZGxl X2xpYmRiICV7ZGVmaW5lZCByaGVsfQogJWlmICV7d2l0aCBidW5kbGVfbGliZGJ9CiAlZ2xvYmFs IGxpYmRiX3ZlcnNpb24gNS4zCiAlZ2xvYmFsIGxpYmRiX2Jhc2VfdmVyc2lvbiBkYi0le2xpYmRi X3ZlcnNpb259LjI4CkBAIC0yOCwxMyArMjQsMjEgQEAgRXhjbHVkZUFyY2g6IGk2ODYKICVlbmRp ZgogJWVuZGlmCiAKLSViY29uZCBsaWJiZGJfcm8gMAorJWJjb25kIHJlcGxfcmVwb3J0cyAwCisl aWYgMCV7P2ZlZG9yYX0gPj0gNDAgJiYgMCV7P2ZlZG9yYX0gPCA0NAorJWJjb25kIHJlcGxfcmVw b3J0cyAxCislZW5kaWYKKwogJWlmIDAlez9mZWRvcmF9ID49IDQzCiAlYmNvbmQgbGliYmRiX3Jv IDEKKyVlbHNlCislYmNvbmQgbGliYmRiX3JvIDAKICVlbmRpZgogCiAjIFRoaXMgaXMgdXNlZCBp biBjZXJ0YWluIGJ1aWxkcyB0byBoZWxwIHVzIGtub3cgaWYgaXQgaGFzIGV4dHJhIGZlYXR1cmVz LgogJWdsb2JhbCB2YXJpYW50IGJhc2UKKyVnbG9iYWwgcHJlcmVsIC4yMDI2MDgzMTA4MDVnaXQ4 OWVlODMxMmYle25pbH0KKwogIyBUaGlzIGVuYWJsZXMgYSBzYW5pdGl6ZWQgYnVpbGQuCiAlYmNv bmQgYXNhbiAwCiAlYmNvbmQgbXNhbiAwCkBAIC01NywyMCArNjEsMzQgQEAgRXhjbHVkZUFyY2g6 IGk2ODYKICVlbmRpZgogCiAjIEJ1aWxkIGNvY2twaXQgcGx1Z2luCisjIEVuYWJsZWQgb24gRmVk b3JhIGFuZCBFUEVMIGNvbW11bml0eSBidWlsZHMuCisjIERpc2FibGVkIG9uIFJIRUwvQ2VudE9T IFN0cmVhbSB1bmxlc3MgUkhEUyAoZGlzdHJpYnV0aW9uIGNvbnRhaW5zICJkc3J2IikuCislaWYg MCV7P3JoZWx9ICYmICEwJXs/ZXBlbH0KKyViY29uZCBjb2NrcGl0ICUoZWNobyAiJXs/ZGlzdHJp YnV0aW9ufSIgfCBncmVwIC1xIGRzcnYgJiYgZWNobyAxIHx8IGVjaG8gMCkKKyVlbHNlCiAlYmNv bmQgY29ja3BpdCAxCislZW5kaWYKIAotIyBCdWlsZCBISUJQIHBhc3N3b3JkIGJyZWFjaCBjaGVj a2luZyAocmVxdWlyZXMgbGliY3VybCkKKyMgSElCUCBwYXNzd29yZCBicmVhY2ggY2hlY2tpbmcK ICViY29uZCBoaWJwIDEKIAotIyBmZWRvcmEgMTUgYW5kIGxhdGVyIHVzZXMgdG1wZmlsZXMuZAot IyBvdGhlcndpc2UsIGNvbW1lbnQgdGhpcyBvdXQKLSV7IT93aXRoX3RtcGZpbGVzX2Q6ICVnbG9i YWwgd2l0aF90bXBmaWxlc19kICV7X3N5c2NvbmZkaXJ9L3RtcGZpbGVzLmR9CislYmNvbmQgdXNk dCAxCisKKyMgUGVybCBsb2cgYW5hbHl6ZXIgKGxvZ2NvbnYucGwpCisjIERpc2FibGVkIG9uIEZl ZG9yYSA+PSA0NiBhbmQgUkhFTCA+PSAxMSwgdXNlIGxvZ2NvbnYucHkgaW5zdGVhZAorJWlmIDAl ez9mZWRvcmF9ID49IDQ2IHx8IDAlez9yaGVsfSA+PSAxMQorJWJjb25kIGxvZ2NvbnZwbCAwCisl ZWxzZQorJWJjb25kIGxvZ2NvbnZwbCAxCislZW5kaWYKIAogIyBzeXN0ZW1kIHN1cHBvcnQKICVn bG9iYWwgZ3JvdXBuYW1lICV7cGtnbmFtZX0udGFyZ2V0CiAKICMgRmlsdGVyIGFyZ3BhcnNlLW1h bnBhZ2UgZnJvbSBhdXRvZ2VuZXJhdGVkIHBhY2thZ2UgUmVxdWlyZXMKICVnbG9iYWwgX19yZXF1 aXJlc19leGNsdWRlIF5weXRob24uKmFyZ3BhcnNlLW1hbnBhZ2UKKyMgRmlsdGVyIHBlcmwgYXV0 by1kZXAgZnJvbSBqZW1hbGxvYydzIGplcHJvZiBwcm9maWxlciBzY3JpcHQKKyVnbG9iYWwgX19y ZXF1aXJlc19leGNsdWRlX2Zyb20gJXtfbGliZGlyfS8le3BrZ25hbWV9L2Jpbi9qZXByb2YKIAog IyBGb3JjZSB0byByZXF1aXJlIG5zcyB2ZXJzaW9uIGdyZWF0ZXIgb3IgZXF1YWwgYXMgdGhlIHZl cnNpb24gYXZhaWxhYmxlIGF0IHRoZSBidWlsZCB0aW1lCiAjIFNlZSBiejE5ODYzMjcKQEAgLTgw LDIyMiArOTgsMTMgQEAgU3VtbWFyeTogICAgICAgICAgMzg5IERpcmVjdG9yeSBTZXJ2ZXIgKCV7 dmFyaWFudH0pCiBOYW1lOiAgICAgICAgICAgICAzODktZHMtYmFzZQogVmVyc2lvbjogICAgICAg ICAgMy4zLjAKIFJlbGVhc2U6ICAgICAgICAgICV7YXV0b3JlbGVhc2UgLW4gJXs/d2l0aF9hc2Fu Oi1lIGFzYW59fSV7P2Rpc3R9Ci1MaWNlbnNlOiAgICAgICAgICBHUEwtMy4wLW9yLWxhdGVyIFdJ VEggR1BMLTMuMC0zODktZHMtYmFzZS1leGNlcHRpb24gQU5EIChBcGFjaGUtMi4wIE9SIEFwYWNo ZS0yLjAgV0lUSCBMTFZNLWV4Y2VwdGlvbiBPUiBNSVQpIEFORCAoQXBhY2hlLTIuMCBPUiBMR1BM LTIuMS1vci1sYXRlciBPUiBNSVQpIEFORCAoQXBhY2hlLTIuMCBPUiBNSVQpIEFORCAoQ0MtQlkt NC4wIEFORCBNSVQpIEFORCAoTUlUIE9SIEFwYWNoZS0yLjApIEFORCBVbmljb2RlLTMuMCBBTkQg KE1JVCBPUiBVbmxpY2Vuc2UpIEFORCAwQlNEIEFORCBBcGFjaGUtMi4wIEFORCBCU0QtMy1DbGF1 c2UgQU5EIElTQyBBTkQgTUlUIEFORCBNSVQgQU5EIElTQyBBTkQgTVBMLTIuMCBBTkQgWmxpYgor TGljZW5zZTogICAgICAgICAgR1BMLTMuMC1vci1sYXRlciBXSVRIIEdQTC0zLjAtMzg5LWRzLWJh c2UtZXhjZXB0aW9uIEFORCAoMEJTRCBPUiBBcGFjaGUtMi4wIE9SIE1JVCkgQU5EIChBcGFjaGUt Mi4wIE9SIEFwYWNoZS0yLjAgV0lUSCBMTFZNLWV4Y2VwdGlvbiBPUiBNSVQpIEFORCAoQXBhY2hl LTIuMCBPUiBCU0wtMS4wKSBBTkQgKEFwYWNoZS0yLjAgT1IgTUlUIE9SIFpsaWIpIEFORCAoQXBh Y2hlLTIuMCBPUiBNSVQpIEFORCAoQ0MtQlktNC4wIEFORCBNSVQpIEFORCAoTUlUIE9SIEFwYWNo ZS0yLjApIEFORCBVbmljb2RlLURGUy0yMDE2IEFORCAoTUlUIE9SIENDMC0xLjApIEFORCAoTUlU IE9SIFVubGljZW5zZSkgQU5EIDBCU0QgQU5EIEFwYWNoZS0yLjAgQU5EIEJTRC0yLUNsYXVzZSBB TkQgQlNELTMtQ2xhdXNlIEFORCBJU0MgQU5EIE1JVCBBTkQgTUlUIEFORCBJU0MgQU5EIE1QTC0y LjAgQU5EIFBTRi0yLjAKIFVSTDogICAgICAgICAgICAgIGh0dHBzOi8vd3d3LnBvcnQzODkub3Jn Ci1PYnNvbGV0ZXM6ICAgICAgICAle25hbWV9LWxlZ2FjeS10b29scyA8IDEuNC40LjYKLU9ic29s ZXRlczogICAgICAgICV7bmFtZX0tbGVnYWN5LXRvb2xzLWRlYnVnaW5mbyA8IDEuNC40LjYKLVBy b3ZpZGVzOiAgICAgICAgIGxkaWYybGRibSA+PSAwCiAKICMjIyMjIEJ1bmRsZWQgY2FyZ28gY3Jh dGVzIGxpc3QgLSBTVEFSVCAjIyMjIwotUHJvdmlkZXM6ICBidW5kbGVkKGNyYXRlKGFsbG9jYXRv ci1hcGkyKSkgPSAwLjIuMjEKLVByb3ZpZGVzOiAgYnVuZGxlZChjcmF0ZShhbnlob3cpKSA9IDEu MC4xMDIKLVByb3ZpZGVzOiAgYnVuZGxlZChjcmF0ZShhdHR5KSkgPSAwLjIuMTQKLVByb3ZpZGVz OiAgYnVuZGxlZChjcmF0ZShhdXRvY2ZnKSkgPSAxLjUuMQotUHJvdmlkZXM6ICBidW5kbGVkKGNy YXRlKGJhc2U2NCkpID0gMC4xMy4xCi1Qcm92aWRlczogIGJ1bmRsZWQoY3JhdGUoYml0ZmxhZ3Mp KSA9IDIuMTIuMQotUHJvdmlkZXM6ICBidW5kbGVkKGNyYXRlKGJ1bXBhbG8pKSA9IDMuMjAuMwot UHJvdmlkZXM6ICBidW5kbGVkKGNyYXRlKGJ5dGVvcmRlcikpID0gMS41LjAKLVByb3ZpZGVzOiAg YnVuZGxlZChjcmF0ZShjYmluZGdlbikpID0gMC4yNi4wCi1Qcm92aWRlczogIGJ1bmRsZWQoY3Jh dGUoY2MpKSA9IDEuMi42MwotUHJvdmlkZXM6ICBidW5kbGVkKGNyYXRlKGNmZy1pZikpID0gMS4w LjQKLVByb3ZpZGVzOiAgYnVuZGxlZChjcmF0ZShjbGFwKSkgPSAzLjIuMjUKLVByb3ZpZGVzOiAg YnVuZGxlZChjcmF0ZShjbGFwX2xleCkpID0gMC4yLjQKLVByb3ZpZGVzOiAgYnVuZGxlZChjcmF0 ZShjb25jcmVhZCkpID0gMC41LjEwCi1Qcm92aWRlczogIGJ1bmRsZWQoY3JhdGUoY3Jvc3NiZWFt LWVwb2NoKSkgPSAwLjkuMTgKLVByb3ZpZGVzOiAgYnVuZGxlZChjcmF0ZShjcm9zc2JlYW0tcXVl dWUpKSA9IDAuMy4xMgotUHJvdmlkZXM6ICBidW5kbGVkKGNyYXRlKGNyb3NzYmVhbS11dGlscykp ID0gMC44LjIxCi1Qcm92aWRlczogIGJ1bmRsZWQoY3JhdGUoZXF1aXZhbGVudCkpID0gMS4wLjIK LVByb3ZpZGVzOiAgYnVuZGxlZChjcmF0ZShlcnJubykpID0gMC4zLjE0Ci1Qcm92aWRlczogIGJ1 bmRsZWQoY3JhdGUoZmFzdHJhbmQpKSA9IDIuNC4xCi1Qcm92aWRlczogIGJ1bmRsZWQoY3JhdGUo ZmVybmV0KSkgPSAwLjEuNAotUHJvdmlkZXM6ICBidW5kbGVkKGNyYXRlKGZpbmQtbXN2Yy10b29s cykpID0gMC4xLjkKLVByb3ZpZGVzOiAgYnVuZGxlZChjcmF0ZShmb2xkaGFzaCkpID0gMC4yLjAK LVByb3ZpZGVzOiAgYnVuZGxlZChjcmF0ZShmb3JlaWduLXR5cGVzKSkgPSAwLjMuMgotUHJvdmlk ZXM6ICBidW5kbGVkKGNyYXRlKGZvcmVpZ24tdHlwZXMtc2hhcmVkKSkgPSAwLjEuMQotUHJvdmlk ZXM6ICBidW5kbGVkKGNyYXRlKGZ1dHVyZXMtY29yZSkpID0gMC4zLjMyCi1Qcm92aWRlczogIGJ1 bmRsZWQoY3JhdGUoZnV0dXJlcy10YXNrKSkgPSAwLjMuMzIKLVByb3ZpZGVzOiAgYnVuZGxlZChj cmF0ZShmdXR1cmVzLXV0aWwpKSA9IDAuMy4zMgotUHJvdmlkZXM6ICBidW5kbGVkKGNyYXRlKGdl dHJhbmRvbSkpID0gMC40LjIKLVByb3ZpZGVzOiAgYnVuZGxlZChjcmF0ZShoYXNoYnJvd24pKSA9 IDAuMTcuMQotUHJvdmlkZXM6ICBidW5kbGVkKGNyYXRlKGhlY2spKSA9IDAuNS4wCi1Qcm92aWRl czogIGJ1bmRsZWQoY3JhdGUoaGVybWl0LWFiaSkpID0gMC4xLjE5Ci1Qcm92aWRlczogIGJ1bmRs ZWQoY3JhdGUoaWQtYXJlbmEpKSA9IDIuMy4wCi1Qcm92aWRlczogIGJ1bmRsZWQoY3JhdGUoaW5k ZXhtYXApKSA9IDIuMTQuMAotUHJvdmlkZXM6ICBidW5kbGVkKGNyYXRlKGl0b2EpKSA9IDEuMC4x OAotUHJvdmlkZXM6ICBidW5kbGVkKGNyYXRlKGpvYnNlcnZlcikpID0gMC4xLjM0Ci1Qcm92aWRl czogIGJ1bmRsZWQoY3JhdGUoanMtc3lzKSkgPSAwLjMuOTkKLVByb3ZpZGVzOiAgYnVuZGxlZChj cmF0ZShsZWIxMjhmbXQpKSA9IDAuMS4wCi1Qcm92aWRlczogIGJ1bmRsZWQoY3JhdGUobGliYykp ID0gMC4yLjE4NgotUHJvdmlkZXM6ICBidW5kbGVkKGNyYXRlKGxpbnV4LXJhdy1zeXMpKSA9IDAu MTIuMQotUHJvdmlkZXM6ICBidW5kbGVkKGNyYXRlKGxvZykpID0gMC40LjMxCi1Qcm92aWRlczog IGJ1bmRsZWQoY3JhdGUobHJ1KSkgPSAwLjE2LjQKLVByb3ZpZGVzOiAgYnVuZGxlZChjcmF0ZSht ZW1jaHIpKSA9IDIuOC4xCi1Qcm92aWRlczogIGJ1bmRsZWQoY3JhdGUob25jZV9jZWxsKSkgPSAx LjIxLjQKLVByb3ZpZGVzOiAgYnVuZGxlZChjcmF0ZShvcGVuc3NsKSkgPSAwLjEwLjgwCi1Qcm92 aWRlczogIGJ1bmRsZWQoY3JhdGUob3BlbnNzbC1tYWNyb3MpKSA9IDAuMS4xCi1Qcm92aWRlczog IGJ1bmRsZWQoY3JhdGUob3BlbnNzbC1zeXMpKSA9IDAuOS4xMTYKLVByb3ZpZGVzOiAgYnVuZGxl ZChjcmF0ZShvc19zdHJfYnl0ZXMpKSA9IDYuNi4xCi1Qcm92aWRlczogIGJ1bmRsZWQoY3JhdGUo cGFzdGUpKSA9IDEuMC4xNQotUHJvdmlkZXM6ICBidW5kbGVkKGNyYXRlKHBpbi1wcm9qZWN0LWxp dGUpKSA9IDAuMi4xNwotUHJvdmlkZXM6ICBidW5kbGVkKGNyYXRlKHBrZy1jb25maWcpKSA9IDAu My4zMwotUHJvdmlkZXM6ICBidW5kbGVkKGNyYXRlKHByZXR0eXBsZWFzZSkpID0gMC4yLjM3Ci1Q cm92aWRlczogIGJ1bmRsZWQoY3JhdGUocHJvYy1tYWNybzIpKSA9IDEuMC4xMDYKLVByb3ZpZGVz OiAgYnVuZGxlZChjcmF0ZShxdW90ZSkpID0gMS4wLjQ1Ci1Qcm92aWRlczogIGJ1bmRsZWQoY3Jh dGUoci1lZmkpKSA9IDYuMC4wCi1Qcm92aWRlczogIGJ1bmRsZWQoY3JhdGUocnVzdGl4KSkgPSAx LjEuNAotUHJvdmlkZXM6ICBidW5kbGVkKGNyYXRlKHJ1c3R2ZXJzaW9uKSkgPSAxLjAuMjIKLVBy b3ZpZGVzOiAgYnVuZGxlZChjcmF0ZShzZW12ZXIpKSA9IDEuMC4yOAotUHJvdmlkZXM6ICBidW5k bGVkKGNyYXRlKHNlcmRlKSkgPSAxLjAuMjI4Ci1Qcm92aWRlczogIGJ1bmRsZWQoY3JhdGUoc2Vy ZGVfY29yZSkpID0gMS4wLjIyOAotUHJvdmlkZXM6ICBidW5kbGVkKGNyYXRlKHNlcmRlX2Rlcml2 ZSkpID0gMS4wLjIyOAotUHJvdmlkZXM6ICBidW5kbGVkKGNyYXRlKHNlcmRlX2pzb24pKSA9IDEu MC4xNTAKLVByb3ZpZGVzOiAgYnVuZGxlZChjcmF0ZShzaGxleCkpID0gMi4wLjEKLVByb3ZpZGVz OiAgYnVuZGxlZChjcmF0ZShzbGFiKSkgPSAwLjQuMTIKLVByb3ZpZGVzOiAgYnVuZGxlZChjcmF0 ZShzbWFsbHZlYykpID0gMS4xNS4xCi1Qcm92aWRlczogIGJ1bmRsZWQoY3JhdGUoc3B0cikpID0g MC4zLjIKLVByb3ZpZGVzOiAgYnVuZGxlZChjcmF0ZShzdHJzaW0pKSA9IDAuMTAuMAotUHJvdmlk ZXM6ICBidW5kbGVkKGNyYXRlKHN5bikpID0gMi4wLjExNwotUHJvdmlkZXM6ICBidW5kbGVkKGNy YXRlKHRlbXBmaWxlKSkgPSAzLjI3LjAKLVByb3ZpZGVzOiAgYnVuZGxlZChjcmF0ZSh0ZXJtY29s b3IpKSA9IDEuNC4xCi1Qcm92aWRlczogIGJ1bmRsZWQoY3JhdGUodGV4dHdyYXApKSA9IDAuMTYu MgotUHJvdmlkZXM6ICBidW5kbGVkKGNyYXRlKHRva2lvKSkgPSAxLjUyLjMKLVByb3ZpZGVzOiAg YnVuZGxlZChjcmF0ZSh0b21sKSkgPSAwLjUuMTEKLVByb3ZpZGVzOiAgYnVuZGxlZChjcmF0ZSh0 cmFjaW5nKSkgPSAwLjEuNDQKLVByb3ZpZGVzOiAgYnVuZGxlZChjcmF0ZSh0cmFjaW5nLWF0dHJp YnV0ZXMpKSA9IDAuMS4zMQotUHJvdmlkZXM6ICBidW5kbGVkKGNyYXRlKHRyYWNpbmctY29yZSkp ID0gMC4xLjM2Ci1Qcm92aWRlczogIGJ1bmRsZWQoY3JhdGUodW5pY29kZS1pZGVudCkpID0gMS4w LjI0Ci1Qcm92aWRlczogIGJ1bmRsZWQoY3JhdGUodW5pY29kZS14aWQpKSA9IDAuMi42Ci1Qcm92 aWRlczogIGJ1bmRsZWQoY3JhdGUodXVpZCkpID0gMS4yMy4yCi1Qcm92aWRlczogIGJ1bmRsZWQo Y3JhdGUodmNwa2cpKSA9IDAuMi4xNQotUHJvdmlkZXM6ICBidW5kbGVkKGNyYXRlKHdhc2kpKSA9 IDAuMTEuMSt3YXNpX3NuYXBzaG90X3ByZXZpZXcxCi1Qcm92aWRlczogIGJ1bmRsZWQoY3JhdGUo d2FzaXAyKSkgPSAxLjAuMyt3YXNpXzAuMi45Ci1Qcm92aWRlczogIGJ1bmRsZWQoY3JhdGUod2Fz aXAzKSkgPSAwLjQuMCt3YXNpXzAuMy4wX3JjXzIwMjZfMDFfMDYKLVByb3ZpZGVzOiAgYnVuZGxl ZChjcmF0ZSh3YXNtLWJpbmRnZW4pKSA9IDAuMi4xMjIKLVByb3ZpZGVzOiAgYnVuZGxlZChjcmF0 ZSh3YXNtLWJpbmRnZW4tbWFjcm8pKSA9IDAuMi4xMjIKLVByb3ZpZGVzOiAgYnVuZGxlZChjcmF0 ZSh3YXNtLWJpbmRnZW4tbWFjcm8tc3VwcG9ydCkpID0gMC4yLjEyMgotUHJvdmlkZXM6ICBidW5k bGVkKGNyYXRlKHdhc20tYmluZGdlbi1zaGFyZWQpKSA9IDAuMi4xMjIKLVByb3ZpZGVzOiAgYnVu ZGxlZChjcmF0ZSh3YXNtLWVuY29kZXIpKSA9IDAuMjQ0LjAKLVByb3ZpZGVzOiAgYnVuZGxlZChj cmF0ZSh3YXNtLW1ldGFkYXRhKSkgPSAwLjI0NC4wCi1Qcm92aWRlczogIGJ1bmRsZWQoY3JhdGUo d2FzbXBhcnNlcikpID0gMC4yNDQuMAotUHJvdmlkZXM6ICBidW5kbGVkKGNyYXRlKHdpbmFwaSkp ID0gMC4zLjkKLVByb3ZpZGVzOiAgYnVuZGxlZChjcmF0ZSh3aW5hcGktaTY4Ni1wYy13aW5kb3dz LWdudSkpID0gMC40LjAKLVByb3ZpZGVzOiAgYnVuZGxlZChjcmF0ZSh3aW5hcGktdXRpbCkpID0g MC4xLjExCi1Qcm92aWRlczogIGJ1bmRsZWQoY3JhdGUod2luYXBpLXg4Nl82NC1wYy13aW5kb3dz LWdudSkpID0gMC40LjAKLVByb3ZpZGVzOiAgYnVuZGxlZChjcmF0ZSh3aW5kb3dzLWxpbmspKSA9 IDAuMi4xCi1Qcm92aWRlczogIGJ1bmRsZWQoY3JhdGUod2luZG93cy1zeXMpKSA9IDAuNjEuMgot UHJvdmlkZXM6ICBidW5kbGVkKGNyYXRlKHdpdC1iaW5kZ2VuKSkgPSAwLjU3LjEKLVByb3ZpZGVz OiAgYnVuZGxlZChjcmF0ZSh3aXQtYmluZGdlbi1jb3JlKSkgPSAwLjUxLjAKLVByb3ZpZGVzOiAg YnVuZGxlZChjcmF0ZSh3aXQtYmluZGdlbi1ydXN0KSkgPSAwLjUxLjAKLVByb3ZpZGVzOiAgYnVu ZGxlZChjcmF0ZSh3aXQtYmluZGdlbi1ydXN0LW1hY3JvKSkgPSAwLjUxLjAKLVByb3ZpZGVzOiAg YnVuZGxlZChjcmF0ZSh3aXQtY29tcG9uZW50KSkgPSAwLjI0NC4wCi1Qcm92aWRlczogIGJ1bmRs ZWQoY3JhdGUod2l0LXBhcnNlcikpID0gMC4yNDQuMAotUHJvdmlkZXM6ICBidW5kbGVkKGNyYXRl KHplcm9pemUpKSA9IDEuOC4yCi1Qcm92aWRlczogIGJ1bmRsZWQoY3JhdGUoemVyb2l6ZV9kZXJp dmUpKSA9IDEuNC4zCi1Qcm92aWRlczogIGJ1bmRsZWQoY3JhdGUoem1paikpID0gMS4wLjIxCi1Q cm92aWRlczogIGJ1bmRsZWQobnBtKEBmb3J0YXdlc29tZS9mb250YXdlc29tZS1jb21tb24tdHlw ZXMpKSA9IDAuMi4zNgotUHJvdmlkZXM6ICBidW5kbGVkKG5wbShAZm9ydGF3ZXNvbWUvZm9udGF3 ZXNvbWUtc3ZnLWNvcmUpKSA9IDEuMi4zNgotUHJvdmlkZXM6ICBidW5kbGVkKG5wbShAZm9ydGF3 ZXNvbWUvZnJlZS1zb2xpZC1zdmctaWNvbnMpKSA9IDUuMTUuNAotUHJvdmlkZXM6ICBidW5kbGVk KG5wbShAZm9ydGF3ZXNvbWUvcmVhY3QtZm9udGF3ZXNvbWUpKSA9IDAuMS4xOQotUHJvdmlkZXM6 ICBidW5kbGVkKG5wbShAcGF0dGVybmZseS9wYXR0ZXJuZmx5KSkgPSA1LjQuMQotUHJvdmlkZXM6 ICBidW5kbGVkKG5wbShAcGF0dGVybmZseS9yZWFjdC1jaGFydHMpKSA9IDcuNC4zCi1Qcm92aWRl czogIGJ1bmRsZWQobnBtKEBwYXR0ZXJuZmx5L3JlYWN0LWNvcmUpKSA9IDUuNC4xCi1Qcm92aWRl czogIGJ1bmRsZWQobnBtKEBwYXR0ZXJuZmx5L3JlYWN0LWljb25zKSkgPSA1LjQuMAotUHJvdmlk ZXM6ICBidW5kbGVkKG5wbShAcGF0dGVybmZseS9yZWFjdC1sb2ctdmlld2VyKSkgPSA1LjMuMAot UHJvdmlkZXM6ICBidW5kbGVkKG5wbShAcGF0dGVybmZseS9yZWFjdC1zdHlsZXMpKSA9IDUuNC4w Ci1Qcm92aWRlczogIGJ1bmRsZWQobnBtKEBwYXR0ZXJuZmx5L3JlYWN0LXRhYmxlKSkgPSA1LjQu MQotUHJvdmlkZXM6ICBidW5kbGVkKG5wbShAcGF0dGVybmZseS9yZWFjdC10b2tlbnMpKSA9IDUu NC4wCi1Qcm92aWRlczogIGJ1bmRsZWQobnBtKEB0eXBlcy9kMy1hcnJheSkpID0gMy4yLjIKLVBy b3ZpZGVzOiAgYnVuZGxlZChucG0oQHR5cGVzL2QzLWNvbG9yKSkgPSAzLjEuMwotUHJvdmlkZXM6 ICBidW5kbGVkKG5wbShAdHlwZXMvZDMtZWFzZSkpID0gMy4wLjIKLVByb3ZpZGVzOiAgYnVuZGxl ZChucG0oQHR5cGVzL2QzLWludGVycG9sYXRlKSkgPSAzLjAuNAotUHJvdmlkZXM6ICBidW5kbGVk KG5wbShAdHlwZXMvZDMtcGF0aCkpID0gMy4xLjEKLVByb3ZpZGVzOiAgYnVuZGxlZChucG0oQHR5 cGVzL2QzLXNjYWxlKSkgPSA0LjAuOQotUHJvdmlkZXM6ICBidW5kbGVkKG5wbShAdHlwZXMvZDMt c2hhcGUpKSA9IDMuMS44Ci1Qcm92aWRlczogIGJ1bmRsZWQobnBtKEB0eXBlcy9kMy10aW1lKSkg PSAzLjAuNAotUHJvdmlkZXM6ICBidW5kbGVkKG5wbShAdHlwZXMvZDMtdGltZXIpKSA9IDMuMC4y Ci1Qcm92aWRlczogIGJ1bmRsZWQobnBtKEB4dGVybS9hZGRvbi1jYW52YXMpKSA9IDAuNy4wCi1Q cm92aWRlczogIGJ1bmRsZWQobnBtKEB4dGVybS94dGVybSkpID0gNS41LjAKLVByb3ZpZGVzOiAg YnVuZGxlZChucG0oYXJncGFyc2UpKSA9IDEuMC4xMAotUHJvdmlkZXM6ICBidW5kbGVkKG5wbShh dHRyLWFjY2VwdCkpID0gMi4yLjUKLVByb3ZpZGVzOiAgYnVuZGxlZChucG0oYXV0b2xpbmtlcikp ID0gMy4xNi4yCi1Qcm92aWRlczogIGJ1bmRsZWQobnBtKGNvcmUtdXRpbC1pcykpID0gMS4wLjMK LVByb3ZpZGVzOiAgYnVuZGxlZChucG0oZDMtYXJyYXkpKSA9IDMuMi40Ci1Qcm92aWRlczogIGJ1 bmRsZWQobnBtKGQzLWNvbG9yKSkgPSAzLjEuMAotUHJvdmlkZXM6ICBidW5kbGVkKG5wbShkMy1l YXNlKSkgPSAzLjAuMQotUHJvdmlkZXM6ICBidW5kbGVkKG5wbShkMy1mb3JtYXQpKSA9IDMuMS4y Ci1Qcm92aWRlczogIGJ1bmRsZWQobnBtKGQzLWludGVycG9sYXRlKSkgPSAzLjAuMQotUHJvdmlk ZXM6ICBidW5kbGVkKG5wbShkMy1wYXRoKSkgPSAzLjEuMAotUHJvdmlkZXM6ICBidW5kbGVkKG5w bShkMy1zY2FsZSkpID0gNC4wLjIKLVByb3ZpZGVzOiAgYnVuZGxlZChucG0oZDMtc2hhcGUpKSA9 IDMuMi4wCi1Qcm92aWRlczogIGJ1bmRsZWQobnBtKGQzLXRpbWUpKSA9IDMuMS4wCi1Qcm92aWRl czogIGJ1bmRsZWQobnBtKGQzLXRpbWUtZm9ybWF0KSkgPSA0LjEuMAotUHJvdmlkZXM6ICBidW5k bGVkKG5wbShkMy10aW1lcikpID0gMy4wLjEKLVByb3ZpZGVzOiAgYnVuZGxlZChucG0oZGVsYXVu YXRvcikpID0gNC4wLjEKLVByb3ZpZGVzOiAgYnVuZGxlZChucG0oZGVsYXVuYXktZmluZCkpID0g MC4wLjYKLVByb3ZpZGVzOiAgYnVuZGxlZChucG0oZGVxdWFsKSkgPSAyLjAuMwotUHJvdmlkZXM6 ICBidW5kbGVkKG5wbShlbmNvZGluZykpID0gMC4xLjEzCi1Qcm92aWRlczogIGJ1bmRsZWQobnBt KGZpbGUtc2VsZWN0b3IpKSA9IDIuMS4yCi1Qcm92aWRlczogIGJ1bmRsZWQobnBtKGZvY3VzLXRy YXApKSA9IDcuNS40Ci1Qcm92aWRlczogIGJ1bmRsZWQobnBtKGdldHRleHQtcGFyc2VyKSkgPSAy LjEuMAotUHJvdmlkZXM6ICBidW5kbGVkKG5wbShob2lzdC1ub24tcmVhY3Qtc3RhdGljcykpID0g My4zLjIKLVByb3ZpZGVzOiAgYnVuZGxlZChucG0oaWNvbnYtbGl0ZSkpID0gMC42LjMKLVByb3Zp ZGVzOiAgYnVuZGxlZChucG0oaW5oZXJpdHMpKSA9IDIuMC40Ci1Qcm92aWRlczogIGJ1bmRsZWQo bnBtKGludGVybm1hcCkpID0gMi4wLjMKLVByb3ZpZGVzOiAgYnVuZGxlZChucG0oaXNhcnJheSkp ID0gMS4wLjAKLVByb3ZpZGVzOiAgYnVuZGxlZChucG0oanMtc2hhMSkpID0gMC43LjAKLVByb3Zp ZGVzOiAgYnVuZGxlZChucG0oanMtc2hhMjU2KSkgPSAwLjExLjAKLVByb3ZpZGVzOiAgYnVuZGxl ZChucG0oanMtdG9rZW5zKSkgPSA0LjAuMAotUHJvdmlkZXM6ICBidW5kbGVkKG5wbShqc29uLXN0 YWJsZS1zdHJpbmdpZnktd2l0aG91dC1qc29uaWZ5KSkgPSAxLjAuMQotUHJvdmlkZXM6ICBidW5k bGVkKG5wbShqc29uLXN0cmluZ2lmeS1zYWZlKSkgPSA1LjAuMQotUHJvdmlkZXM6ICBidW5kbGVk KG5wbShsb2Rhc2gpKSA9IDQuMTguMQotUHJvdmlkZXM6ICBidW5kbGVkKG5wbShsb29zZS1lbnZp ZnkpKSA9IDEuNC4wCi1Qcm92aWRlczogIGJ1bmRsZWQobnBtKG1lbW9pemUtb25lKSkgPSA1LjIu MQotUHJvdmlkZXM6ICBidW5kbGVkKG5wbShvYmplY3QtYXNzaWduKSkgPSA0LjEuMQotUHJvdmlk ZXM6ICBidW5kbGVkKG5wbShwcmV0dGllcikpID0gMy44LjMKLVByb3ZpZGVzOiAgYnVuZGxlZChu cG0ocHJvY2Vzcy1uZXh0aWNrLWFyZ3MpKSA9IDIuMC4xCi1Qcm92aWRlczogIGJ1bmRsZWQobnBt KHByb3AtdHlwZXMpKSA9IDE1LjguMQotUHJvdmlkZXM6ICBidW5kbGVkKG5wbShyZWFjdCkpID0g MTguMy4xCi1Qcm92aWRlczogIGJ1bmRsZWQobnBtKHJlYWN0LWRvbSkpID0gMTguMy4xCi1Qcm92 aWRlczogIGJ1bmRsZWQobnBtKHJlYWN0LWRyb3B6b25lKSkgPSAxNC40LjEKLVByb3ZpZGVzOiAg YnVuZGxlZChucG0ocmVhY3QtZmFzdC1jb21wYXJlKSkgPSAzLjIuMgotUHJvdmlkZXM6ICBidW5k bGVkKG5wbShyZWFjdC1pcykpID0gMTYuMTMuMQotUHJvdmlkZXM6ICBidW5kbGVkKG5wbShyZWFk YWJsZS1zdHJlYW0pKSA9IDIuMy44Ci1Qcm92aWRlczogIGJ1bmRsZWQobnBtKHJlbWFya2FibGUp KSA9IDIuMC4xCi1Qcm92aWRlczogIGJ1bmRsZWQobnBtKHNhZmUtYnVmZmVyKSkgPSA1LjIuMQot UHJvdmlkZXM6ICBidW5kbGVkKG5wbShzYWZlci1idWZmZXIpKSA9IDIuMS4yCi1Qcm92aWRlczog IGJ1bmRsZWQobnBtKHNjaGVkdWxlcikpID0gMC4yMy4yCi1Qcm92aWRlczogIGJ1bmRsZWQobnBt KHNwcmludGYtanMpKSA9IDEuMC4zCi1Qcm92aWRlczogIGJ1bmRsZWQobnBtKHN0cmluZ19kZWNv ZGVyKSkgPSAxLjEuMQotUHJvdmlkZXM6ICBidW5kbGVkKG5wbSh0YWJiYWJsZSkpID0gNi40LjAK LVByb3ZpZGVzOiAgYnVuZGxlZChucG0odGhyb3R0bGUtZGVib3VuY2UpKSA9IDUuMC4yCi1Qcm92 aWRlczogIGJ1bmRsZWQobnBtKHRzbGliKSkgPSAyLjguMQotUHJvdmlkZXM6ICBidW5kbGVkKG5w bSh1dGlsLWRlcHJlY2F0ZSkpID0gMS4wLjIKLVByb3ZpZGVzOiAgYnVuZGxlZChucG0odXVpZCkp ID0gMTQuMC4wCi1Qcm92aWRlczogIGJ1bmRsZWQobnBtKHZpY3RvcnktYXJlYSkpID0gMzcuMy42 Ci1Qcm92aWRlczogIGJ1bmRsZWQobnBtKHZpY3RvcnktYXhpcykpID0gMzcuMy42Ci1Qcm92aWRl czogIGJ1bmRsZWQobnBtKHZpY3RvcnktYmFyKSkgPSAzNy4zLjYKLVByb3ZpZGVzOiAgYnVuZGxl ZChucG0odmljdG9yeS1ib3gtcGxvdCkpID0gMzcuMy42Ci1Qcm92aWRlczogIGJ1bmRsZWQobnBt KHZpY3RvcnktYnJ1c2gtY29udGFpbmVyKSkgPSAzNy4zLjYKLVByb3ZpZGVzOiAgYnVuZGxlZChu cG0odmljdG9yeS1jaGFydCkpID0gMzcuMy42Ci1Qcm92aWRlczogIGJ1bmRsZWQobnBtKHZpY3Rv cnktY29yZSkpID0gMzcuMy42Ci1Qcm92aWRlczogIGJ1bmRsZWQobnBtKHZpY3RvcnktY3JlYXRl LWNvbnRhaW5lcikpID0gMzcuMy42Ci1Qcm92aWRlczogIGJ1bmRsZWQobnBtKHZpY3RvcnktY3Vy c29yLWNvbnRhaW5lcikpID0gMzcuMy42Ci1Qcm92aWRlczogIGJ1bmRsZWQobnBtKHZpY3Rvcnkt Z3JvdXApKSA9IDM3LjMuNgotUHJvdmlkZXM6ICBidW5kbGVkKG5wbSh2aWN0b3J5LWxlZ2VuZCkp ID0gMzcuMy42Ci1Qcm92aWRlczogIGJ1bmRsZWQobnBtKHZpY3RvcnktbGluZSkpID0gMzcuMy42 Ci1Qcm92aWRlczogIGJ1bmRsZWQobnBtKHZpY3RvcnktcGllKSkgPSAzNy4zLjYKLVByb3ZpZGVz OiAgYnVuZGxlZChucG0odmljdG9yeS1wb2xhci1heGlzKSkgPSAzNy4zLjYKLVByb3ZpZGVzOiAg YnVuZGxlZChucG0odmljdG9yeS1zY2F0dGVyKSkgPSAzNy4zLjYKLVByb3ZpZGVzOiAgYnVuZGxl ZChucG0odmljdG9yeS1zZWxlY3Rpb24tY29udGFpbmVyKSkgPSAzNy4zLjYKLVByb3ZpZGVzOiAg YnVuZGxlZChucG0odmljdG9yeS1zaGFyZWQtZXZlbnRzKSkgPSAzNy4zLjYKLVByb3ZpZGVzOiAg YnVuZGxlZChucG0odmljdG9yeS1zdGFjaykpID0gMzcuMy42Ci1Qcm92aWRlczogIGJ1bmRsZWQo bnBtKHZpY3RvcnktdG9vbHRpcCkpID0gMzcuMy42Ci1Qcm92aWRlczogIGJ1bmRsZWQobnBtKHZp Y3RvcnktdmVuZG9yKSkgPSAzNy4zLjYKLVByb3ZpZGVzOiAgYnVuZGxlZChucG0odmljdG9yeS12 b3Jvbm9pLWNvbnRhaW5lcikpID0gMzcuMy42Ci1Qcm92aWRlczogIGJ1bmRsZWQobnBtKHZpY3Rv cnktem9vbS1jb250YWluZXIpKSA9IDM3LjMuNgogIyMjIyMgQnVuZGxlZCBjYXJnbyBjcmF0ZXMg bGlzdCAtIEVORCAjIyMjIwogCi0jIEF0dGFjaCB0aGUgYnVpbGRyZXF1aXJlcyB0byB0aGUgdG9w IGxldmVsIHBhY2thZ2U6CisjIEJ1aWxkUmVxdWlyZXMgZm9yIHRoZSBtYWluIHBhY2thZ2U6CiBC dWlsZFJlcXVpcmVzOiAgICBuc3ByLWRldmVsCiBCdWlsZFJlcXVpcmVzOiAgICBuc3MtZGV2ZWwg Pj0gMy4zNAogQnVpbGRSZXF1aXJlczogICAgb3BlbmxkYXAtY2xpZW50cwpAQCAtMzA4LDYgKzEx Nyw3IEBAIEJ1aWxkUmVxdWlyZXM6ICAgIHBjcmUyLWRldmVsCiBCdWlsZFJlcXVpcmVzOiAgICBj cmFja2xpYi1kZXZlbAogQnVpbGRSZXF1aXJlczogICAganNvbi1jLWRldmVsCiBCdWlsZFJlcXVp cmVzOiAgICBsaWJ4Y3J5cHQtZGV2ZWwKK0J1aWxkUmVxdWlyZXM6ICAgIHpsaWItZGV2ZWwKICVp ZiAle3dpdGggY2xhbmd9CiBCdWlsZFJlcXVpcmVzOiAgICBsaWJhdG9taWMKIEJ1aWxkUmVxdWly ZXM6ICAgIGNsYW5nCkBAIC0zMzIsMzUgKzE0MiwzOSBAQCBCdWlsZFJlcXVpcmVzOiAgICBsaWJk Yi1kZXZlbAogJWVuZGlmCiAlZW5kaWYKIAotIyBUaGUgZm9sbG93aW5nIGFyZSBuZWVkZWQgdG8g YnVpbGQgdGhlIHNubXAgbGRhcC1hZ2VudAorIyBGb3IgU05NUCBsZGFwLWFnZW50CiBCdWlsZFJl cXVpcmVzOiAgICBuZXQtc25tcC1kZXZlbAogQnVpbGRSZXF1aXJlczogICAgYnppcDItZGV2ZWwK IEJ1aWxkUmVxdWlyZXM6ICAgIG9wZW5zc2wtZGV2ZWwKKyMgRm9yIEhJQlAgcGFzc3dvcmQgYnJl YWNoIGNoZWNraW5nCiAlaWYgJXt3aXRoIGhpYnB9CiBCdWlsZFJlcXVpcmVzOiAgICBsaWJjdXJs LWRldmVsCiAlZW5kaWYKLSMgdGhlIGZvbGxvd2luZyBpcyBmb3IgdGhlIHBhbSBwYXNzdGhydSBh dXRoIHBsdWctaW4KKyMgRm9yIFBBTSBwYXNzdGhydSBhdXRoIHBsdWctaW4KIEJ1aWxkUmVxdWly ZXM6ICAgIHBhbS1kZXZlbAogQnVpbGRSZXF1aXJlczogICAgc3lzdGVtZC11bml0cwogQnVpbGRS ZXF1aXJlczogICAgc3lzdGVtZC1kZXZlbAogQnVpbGRSZXF1aXJlczogICAgc3lzdGVtZC1ycG0t bWFjcm9zCiAlez9zeXN1c2Vyc19yZXF1aXJlc19jb21wYXR9CislaWYgJXt3aXRoIHVzZHR9CitC dWlsZFJlcXVpcmVzOiAgICBzeXN0ZW10YXAtc2R0LWRldmVsCislZW5kaWYKIEJ1aWxkUmVxdWly ZXM6ICAgIGNhcmdvCiBCdWlsZFJlcXVpcmVzOiAgICBydXN0CiBCdWlsZFJlcXVpcmVzOiAgICBw a2djb25maWcKIEJ1aWxkUmVxdWlyZXM6ICAgIHBrZ2NvbmZpZyhzeXN0ZW1kKQogQnVpbGRSZXF1 aXJlczogICAgcGtnY29uZmlnKGtyYjUpCiBCdWlsZFJlcXVpcmVzOiAgICBwa2djb25maWcobGli cGNyZTItOCkKLSMgTmVlZGVkIHRvIHN1cHBvcnQgcmVnZW5lcmF0aW9uIG9mIHRoZSBhdXRvdG9v bCBhcnRpZmFjdHMuCisjIEZvciBhdXRvdG9vbHMgcmVnZW5lcmF0aW9uCiBCdWlsZFJlcXVpcmVz OiAgICBhdXRvY29uZgogQnVpbGRSZXF1aXJlczogICAgYXV0b21ha2UKIEJ1aWxkUmVxdWlyZXM6 ICAgIGxpYnRvb2wKIEJ1aWxkUmVxdWlyZXM6ICAgIG1ha2UKLSMgRm9yIG91ciBkb2N1bWVudGF0 aW9uCisjIEZvciBkb3h5Z2VuIGRvY3VtZW50YXRpb24KIEJ1aWxkUmVxdWlyZXM6ICAgIGRveHln ZW4KLSMgRm9yIHRlc3RzIQorIyBGb3IgY21vY2thIHVuaXQgdGVzdHMKIEJ1aWxkUmVxdWlyZXM6 ICAgIGxpYmNtb2NrYS1kZXZlbAotIyBGb3IgbGliMzg5IGFuZCByZWxhdGVkIGNvbXBvbmVudHMu CisjIEZvciBsaWIzODkKIEJ1aWxkUmVxdWlyZXM6ICAgIHB5dGhvbiV7cHl0aG9uM19wa2d2ZXJz aW9ufS1kZXZlbAogCiAjIEZvciBjb2NrcGl0CkBAIC0zNzAsMjkgKzE4NCwzNiBAQCBCdWlsZFJl cXVpcmVzOiAgICAvdXNyL2Jpbi9ucG0KIEJ1aWxkUmVxdWlyZXM6ICAgIC91c3IvYmluL25vZGUK ICVlbmRpZgogCi0jIEZvciBhdXRvc2V0dXAgLVMgZ2l0Ci1CdWlsZFJlcXVpcmVzOiAgICBnaXQK LQorIyBSdW50aW1lIHJlcXVpcmVzIGZvciB0aGUgbWFpbiBwYWNrYWdlCiBSZXF1aXJlczogICAg ICAgICAle25hbWV9LWxpYnMgPSAle3ZlcnNpb259LSV7cmVsZWFzZX0KIFJlcXVpcmVzOiAgICAg ICAgIHB5dGhvbiV7cHl0aG9uM19wa2d2ZXJzaW9ufS1saWIzODkgPSAle3ZlcnNpb259LSV7cmVs ZWFzZX0KIAotIyB0aGlzIGlzIG5lZWRlZCBmb3IgdXNpbmcgc2VtYW5hZ2UgZnJvbSBvdXIgc2V0 dXAgc2NyaXB0cworIyBGb3Igc2VtYW5hZ2UgaW4gc2V0dXAgc2NyaXB0cwogUmVxdWlyZXM6ICAg ICAgICAgcG9saWN5Y29yZXV0aWxzLXB5dGhvbi11dGlscwogUmVxdWlyZXM6ICAgICAgICAgbGli c2VtYW5hZ2UtcHl0aG9uJXtweXRob24zX3BrZ3ZlcnNpb259Ci0jIHRoZSBmb2xsb3dpbmcgYXJl IG5lZWRlZCBmb3Igc29tZSBvZiBvdXIgc2NyaXB0cworIyBOb05ld1ByaXZpbGVnZXMgc3VwcG9y dCBpbiBkaXJzcnYgc2VydmljZSB1bml0cyByZXF1aXJlcworIyBzZWxpbnV4LXBvbGljeSB3aXRo IGluaXRfbm5wX2RhZW1vbl9kb21haW4gZm9yIGRpcnNydl90LgorIyBTZWU6IGh0dHBzOi8vYnVn emlsbGEucmVkaGF0LmNvbS9zaG93X2J1Zy5jZ2k/aWQ9MjQ1Nzk1MQorJWlmIDAlez9yaGVsfSA9 PSAxMAorUmVxdWlyZXM6ICAgICAgICAgc2VsaW51eC1wb2xpY3kgPj0gNDIuMS4yMi0xCislZW5k aWYKKyVpZiAwJXs/ZmVkb3JhfSA9PSA0MworUmVxdWlyZXM6ICAgICAgICAgc2VsaW51eC1wb2xp Y3kgPj0gNDMuNy0xCislZW5kaWYKKyVpZiAwJXs/ZmVkb3JhfSA9PSA0NAorUmVxdWlyZXM6ICAg ICAgICAgc2VsaW51eC1wb2xpY3kgPj0gNDQuMS0xCislZW5kaWYKKyMgRm9yIENMSSBzY3JpcHRz CiBSZXF1aXJlczogICAgICAgICBvcGVubGRhcC1jbGllbnRzCiBSZXF1aXJlczogICAgICAgICBh Y2wKLSMgdGhpcyBpcyBuZWVkZWQgdG8gc2V0dXAgU1NMIGlmIHlvdSBhcmUgbm90IHVzaW5nIHRo ZQotIyBhZG1pbmlzdHJhdGlvbiBzZXJ2ZXIgcGFja2FnZQorIyBGb3IgU1NML1RMUyBzZXR1cAog UmVxdWlyZXM6ICAgICAgICAgbnNzLXRvb2xzCiAlZGlyc3J2X3JlcXVpcmVzX2dlIG5zcwotIyB0 aGVzZSBhcmUgbm90IGZvdW5kIGJ5IHRoZSBhdXRvLWRlcGVuZGVuY3kgbWV0aG9kCi0jIHRoZXkg YXJlIHJlcXVpcmVkIHRvIHN1cHBvcnQgdGhlIG1hbmRhdG9yeSBMREFQIFNBU0wgbWVjaHMKKyMg TWFuZGF0b3J5IExEQVAgU0FTTCBtZWNoYW5pc21zCiBSZXF1aXJlczogICAgICAgICBjeXJ1cy1z YXNsLWdzc2FwaQogUmVxdWlyZXM6ICAgICAgICAgY3lydXMtc2FzbC1tZDUKLSMgVGhpcyBpcyBv cHRpb25hbGx5IHN1cHBvcnRlZCBieSB1cywgYXMgd2UgdXNlIGl0IGluIG91ciB0ZXN0cwogUmVx dWlyZXM6ICAgICAgICAgY3lydXMtc2FzbC1wbGFpbgotIyB0aGlzIGlzIG5lZWRlZCBmb3IgYmFj a2xkYm0KKyMgRm9yIGJhY2stbGRibQogJWlmICV7d2l0aCBsaWJiZGJfcm99CiBSZXF1aXJlczog ICAgICAgICAle25hbWV9LXJvYmRiLWxpYnMgPSAle3ZlcnNpb259LSV7cmVsZWFzZX0KICVlbHNl CkBAIC00MDEsNDQgKzIyMiw0MSBAQCBSZXF1aXJlczogICAgICAgICBsaWJkYgogJWVuZGlmCiAl ZW5kaWYKIFJlcXVpcmVzOiAgICAgICAgIGxtZGItbGlicwotIyBOZWVkZWQgYnkgbG9nY29udi5w bAotJWlmICV7d2l0aG91dCBsaWJiZGJfcm99Ci0laWYgJXt3aXRob3V0IGJ1bmRsZV9saWJkYn0K LVJlcXVpcmVzOiAgICAgICAgIHBlcmwtREJfRmlsZQotJWVuZGlmCi0lZW5kaWYKLVJlcXVpcmVz OiAgICAgICAgIHBlcmwtQXJjaGl2ZS1UYXIKLSVpZiAwJXs/ZmVkb3JhfSA+PSAzMyB8fCAwJXs/ cmhlbH0gPj0gOQotUmVxdWlyZXM6ICAgICAgICAgcGVybC1kZWJ1Z2dlcgotUmVxdWlyZXM6ICAg ICAgICAgcGVybC1zaWd0cmFwCi0lZW5kaWYKKwogIyBOZWVkZWQgZm9yIHBhc3N3b3JkIGRpY3Rp b25hcnkgY2hlY2tzCiBSZXF1aXJlczogICAgICAgICBjcmFja2xpYi1kaWN0cwogUmVxdWlyZXM6 ICAgICAgICAganNvbi1jCi0jIExvZyBjb21wcmVzc2lvbgotUmVxdWlyZXM6ICAgICAgICAgemxp Yi1kZXZlbAogIyBsb2djb252LnB5LCBNSU1FIHR5cGUKIFJlcXVpcmVzOiAgICAgICAgIHB5dGhv bjMtZmlsZS1tYWdpYwogIyBQaWNrcyB1cCBvdXIgc3lzdGVtZCBkZXBzLgogJXs/c3lzdGVtZF9y ZXF1aXJlc30KKyMgRW5zdXJlIHN5c3VzZXJzIGFyZSBjcmVhdGVkCislez9zeXN1c2Vyc19yZXF1 aXJlc19jb21wYXR9CisKKyVpZiAle3dpdGggdXNkdH0KKyMgT3B0aW9uYWwgZUJQRiB0cmFjZXIg Zm9yIHRoZSBzaGlwcGVkIFVTRFQgYnBmdHJhY2Ugc2NyaXB0cy4KKyMgVXNlIFN1Z2dlc3RzIHNv IGl0IGlzIG5vdCBpbnN0YWxsZWQgYnkgZGVmYXVsdCAoZGVidWctb25seSwgcHVsbHMgaW4gZ2Nj KS4KK1N1Z2dlc3RzOiAgICAgICAgIGJwZnRyYWNlCislZW5kaWYKIAotU291cmNlMDogICAgICAg ICAgaHR0cHM6Ly9naXRodWIuY29tLzM4OWRzLyV7bmFtZX0vcmVsZWFzZXMvZG93bmxvYWQvJXtu YW1lfS0le3ZlcnNpb259LyV7bmFtZX0tJXt2ZXJzaW9ufS50YXIuYnoyCisKK1NvdXJjZTA6ICAg ICAgICAgICV7bmFtZX0tJXt2ZXJzaW9ufS50YXIuYnoyCiBTb3VyY2UyOiAgICAgICAgICAle25h bWV9LWRldmVsLlJFQURNRQogJWlmICV7d2l0aCBidW5kbGVfamVtYWxsb2N9CiBTb3VyY2UzOiAg ICAgICAgICBodHRwczovL2dpdGh1Yi5jb20vamVtYWxsb2MvJXtqZW1hbGxvY19uYW1lfS9yZWxl YXNlcy9kb3dubG9hZC8le2plbWFsbG9jX3Zlcn0vJXtqZW1hbGxvY19uYW1lfS0le2plbWFsbG9j X3Zlcn0udGFyLmJ6MgotU291cmNlMTA6ICAgICAgICAgIGplbWFsbG9jLTUuMy4wX3Rocm93X2Jh ZF9hbGxvYy5wYXRjaAotJWVuZGlmCi1Tb3VyY2U0OiAgICAgICAgICAzODktZHMtYmFzZS5zeXN1 c2VycwotJWlmICV7d2l0aCBidW5kbGVfbGliZGJ9Ci1Tb3VyY2U1OiAgICAgICAgICBodHRwczov L2ZlZG9yYXBlb3BsZS5vcmcvZ3JvdXBzLzM4OWRzL2xpYmRiLTUuMy4yOC01OS50YXIuYnoyCitT b3VyY2U1OiAgICAgICAgICBqZW1hbGxvYy01LjMuMF90aHJvd19iYWRfYWxsb2MucGF0Y2gKICVl bmRpZgorU291cmNlNDogICAgICAgICAgaHR0cHM6Ly9mZWRvcmFwZW9wbGUub3JnL2dyb3Vwcy8z ODlkcy9saWJkYi01LjMuMjgtNTkudGFyLmJ6MgogCi1Tb3VyY2U2OiAgICAgICAgICB2ZW5kb3It JXt2ZXJzaW9ufS0xLnRhci5negotU291cmNlNzogICAgICAgICAgQ2FyZ28tJXt2ZXJzaW9ufS0x LmxvY2sKLVNvdXJjZTg6ICAgICAgICAgIGNvY2twaXRfZGlzdC0le3ZlcnNpb259LTEudGFyLmJ6 MgorIyBUbyBvdmVycmlkZSB2ZW5kb3IvQ2FyZ28ubG9jay9jb2NrcGl0X2Rpc3QgZnJvbSB0aGUg dXBzdHJlYW0gdGFyYmFsbAorIyB3aXRoIHNlcGFyYXRlbHkgdXBsb2FkZWQgc291cmNlcworIyB1 bmNvbW1lbnQgYW5kIHJlcGxhY2UgZG91YmxlIHBlcmNlbnQgd2l0aCBhIHNpbmdsZSBvbmUKKyNT b3VyY2U2OiAgICAgICAgICB2ZW5kb3ItJSV7dmVyc2lvbn0tMS50YXIuZ3oKKyNTb3VyY2U3OiAg ICAgICAgICBDYXJnby0lJXt2ZXJzaW9ufS0xLmxvY2sKKyNTb3VyY2U4OiAgICAgICAgICBjb2Nr cGl0X2Rpc3QtJSV7dmVyc2lvbn0tMS50YXIuYnoyCiAKICVkZXNjcmlwdGlvbgotMzg5IERpcmVj dG9yeSBTZXJ2ZXIgaXMgYW4gTERBUHYzIGNvbXBsaWFudCBzZXJ2ZXIuICBUaGUgYmFzZSBwYWNr YWdlIGluY2x1ZGVzCiszODkgRGlyZWN0b3J5IFNlcnZlciBpcyBhbiBMREFQdjMgY29tcGxpYW50 IHNlcnZlci4gVGhlIGJhc2UgcGFja2FnZSBpbmNsdWRlcwogdGhlIExEQVAgc2VydmVyIGFuZCBj b21tYW5kIGxpbmUgdXRpbGl0aWVzIGZvciBzZXJ2ZXIgYWRtaW5pc3RyYXRpb24uCiAlaWYgJXt3 aXRoIGFzYW59CiBXQVJOSU5HISBUaGlzIGJ1aWxkIGlzIGxpbmtlZCB0byBBZGRyZXNzIFNhbml0 aXNhdGlvbiBsaWJyYXJpZXMuIFRoaXMgcHJvYmFibHkKQEAgLTQ0OSw3ICsyNjcsNyBAQCBQbGVh c2Ugc2VlIGh0dHA6Ly9zZWNsaXN0cy5vcmcvb3NzLXNlYy8yMDE2L3ExLzM2MyBmb3IgbW9yZSBp bmZvcm1hdGlvbi4KICVpZiAle3dpdGggbGliYmRiX3JvfQogJXBhY2thZ2UgICAgICAgIHJvYmRi LWxpYnMKIFN1bW1hcnk6ICAgICAgICBSZWFkLW9ubHkgQmVya2VsZXkgRGF0YWJhc2UgTGlicmFy eQotTGljZW5zZTogICAgICAgICAgR1BMLTMuMC1vci1sYXRlciBXSVRIIEdQTC0zLjAtMzg5LWRz LWJhc2UtZXhjZXB0aW9uIEFORCAoQXBhY2hlLTIuMCBPUiBBcGFjaGUtMi4wIFdJVEggTExWTS1l eGNlcHRpb24gT1IgTUlUKSBBTkQgKEFwYWNoZS0yLjAgT1IgTEdQTC0yLjEtb3ItbGF0ZXIgT1Ig TUlUKSBBTkQgKEFwYWNoZS0yLjAgT1IgTUlUKSBBTkQgKENDLUJZLTQuMCBBTkQgTUlUKSBBTkQg KE1JVCBPUiBBcGFjaGUtMi4wKSBBTkQgVW5pY29kZS0zLjAgQU5EIChNSVQgT1IgQ0MwLTEuMCkg QU5EIChNSVQgT1IgVW5saWNlbnNlKSBBTkQgMEJTRCBBTkQgQXBhY2hlLTIuMCBBTkQgQlNELTIt Q2xhdXNlIEFORCBCU0QtMy1DbGF1c2UgQU5EIElTQyBBTkQgTUlUIEFORCBNSVQgQU5EIElTQyBB TkQgTVBMLTIuMCBBTkQgUFNGLTIuMCBBTkQgWmxpYgorTGljZW5zZTogICAgICAgIEdQTC0yLjAt b3ItbGF0ZXIgT1IgTEdQTC0yLjEtb3ItbGF0ZXIKIAogJWRlc2NyaXB0aW9uICAgIHJvYmRiLWxp YnMKIFRoZSAle25hbWV9LXJvYmRiLWxpYiBwYWNrYWdlIGNvbnRhaW5zIGEgbGlicmFyeSBkZXJp dmVkIGZyb20gcnBtCkBAIC00NjAsMTYgKzI3OCwxMyBAQCBzb21lIGJhc2ljIGZ1bmN0aW9ucyB0 byBzZWFyY2ggYW5kIHJlYWQgQmVya2VsZXkgRGF0YWJhc2UgcmVjb3JkcwogCiAlcGFja2FnZSAg ICAgICAgICBsaWJzCiBTdW1tYXJ5OiAgICAgICAgICBDb3JlIGxpYnJhcmllcyBmb3IgMzg5IERp cmVjdG9yeSBTZXJ2ZXIgKCV7dmFyaWFudH0pCi1Qcm92aWRlczogICAgICAgICBzdnJjb3JlID0g NC4xLjQKLU9ic29sZXRlczogICAgICAgIHN2cmNvcmUgPD0gNC4xLjMKLUNvbmZsaWN0czogICAg ICAgIHN2cmNvcmUKICVkaXJzcnZfcmVxdWlyZXNfZ2UgbnNzCiBSZXF1aXJlczogICAgICAgICBu c3ByCiBSZXF1aXJlczogICAgICAgICBvcGVubGRhcAogUmVxdWlyZXM6ICAgICAgICAgc3lzdGVt ZC1saWJzCi0jIFB1bGwgaW4gc2FzbAorIyBTQVNMCiBSZXF1aXJlczogICAgICAgICBjeXJ1cy1z YXNsLWxpYgotIyBLUkIKKyMgS2VyYmVyb3MKIFJlcXVpcmVzOiAgICAgICAgIGtyYjUtbGlicwog JWlmICV7d2l0aCBjbGFuZ30KIFJlcXVpcmVzOiAgICAgICAgIGxsdm0KQEAgLTQ5Myw2MCArMzA4 LDkwIEBAIHBhY2thZ2UgdG8gYmUgaW5zdGFsbGVkIHdpdGgganVzdCB0aGUgLWxpYnMgcGFja2Fn ZSBhbmQgd2l0aG91dCB0aGUgbWFpbiBwYWNrYWdlCiAKICVwYWNrYWdlICAgICAgICAgIGRldmVs CiBTdW1tYXJ5OiAgICAgICAgICBEZXZlbG9wbWVudCBsaWJyYXJpZXMgZm9yIDM4OSBEaXJlY3Rv cnkgU2VydmVyICgle3ZhcmlhbnR9KQotUHJvdmlkZXM6ICAgICAgICAgc3ZyY29yZS1kZXZlbCA9 IDQuMS40Ci1PYnNvbGV0ZXM6ICAgICAgICBzdnJjb3JlLWRldmVsIDw9IDQuMS4zCi1Db25mbGlj dHM6ICAgICAgICBzdnJjb3JlLWRldmVsCiBSZXF1aXJlczogICAgICAgICAle25hbWV9LWxpYnMg PSAle3ZlcnNpb259LSV7cmVsZWFzZX0KIFJlcXVpcmVzOiAgICAgICAgIHBrZ2NvbmZpZwogUmVx dWlyZXM6ICAgICAgICAgbnNwci1kZXZlbAogUmVxdWlyZXM6ICAgICAgICAgbnNzLWRldmVsID49 IDMuMzQKIFJlcXVpcmVzOiAgICAgICAgIG9wZW5sZGFwLWRldmVsCi0jIHN5c3RlbWQtbGlicyBj b250YWlucyB0aGUgaGVhZGVycyBpaXJjLgorIyBGb3Igc3lzdGVtZCBoZWFkZXJzCiBSZXF1aXJl czogICAgICAgICBzeXN0ZW1kLWxpYnMKIAogJWRlc2NyaXB0aW9uICAgICAgZGV2ZWwKIERldmVs b3BtZW50IExpYnJhcmllcyBhbmQgaGVhZGVycyBmb3IgdGhlIDM4OSBEaXJlY3RvcnkgU2VydmVy IGJhc2UgcGFja2FnZS4KIAorCiAlcGFja2FnZSAgICAgICAgICBzbm1wCiBTdW1tYXJ5OiAgICAg ICAgICBTTk1QIEFnZW50IGZvciAzODkgRGlyZWN0b3J5IFNlcnZlcgogUmVxdWlyZXM6ICAgICAg ICAgJXtuYW1lfSA9ICV7dmVyc2lvbn0tJXtyZWxlYXNlfQogCi1PYnNvbGV0ZXM6ICAgICAgICAl e25hbWV9IDw9IDEuNC4wLjAKLQogJWRlc2NyaXB0aW9uICAgICAgc25tcAogU05NUCBBZ2VudCBm b3IgdGhlIDM4OSBEaXJlY3RvcnkgU2VydmVyIGJhc2UgcGFja2FnZS4KIAorJWlmICV7d2l0aCBs b2djb252cGx9CislcGFja2FnZSAgICAgICAgICBsb2djb252LXBlcmwKK1N1bW1hcnk6ICAgICAg ICAgIExlZ2FjeSBQZXJsIGxvZyBhbmFseXplciBmb3IgMzg5IERpcmVjdG9yeSBTZXJ2ZXIKK1Jl cXVpcmVzOiAgICAgICAgICV7bmFtZX0gPSAle3ZlcnNpb259LSV7cmVsZWFzZX0KKyVpZiAle3dp dGhvdXQgbGliYmRiX3JvfQorJWlmICV7d2l0aG91dCBidW5kbGVfbGliZGJ9CitSZXF1aXJlczog ICAgICAgICBwZXJsLURCX0ZpbGUKKyVlbmRpZgorJWVuZGlmCitSZXF1aXJlczogICAgICAgICBw ZXJsLUFyY2hpdmUtVGFyCitSZXF1aXJlczogICAgICAgICBwZXJsLWRlYnVnZ2VyCitSZXF1aXJl czogICAgICAgICBwZXJsLXNpZ3RyYXAKK1Byb3ZpZGVzOiAgICAgICAgIGRlcHJlY2F0ZWQoKQor CislZGVzY3JpcHRpb24gICAgICBsb2djb252LXBlcmwKK0xlZ2FjeSBQZXJsIGxvZyBhbmFseXpl ciAobG9nY29udi5wbCkgZm9yIDM4OSBEaXJlY3RvcnkgU2VydmVyLgorVGhpcyB0b29sIGlzIGRl cHJlY2F0ZWQsIHVzZSBsb2djb252LnB5IGluc3RlYWQuCislZW5kaWYKKwogJWlmICV7d2l0aCBi dW5kbGVfbGliZGJ9CiAlcGFja2FnZSAgICAgICAgICBiZGIKIFN1bW1hcnk6ICAgICAgICAgIEJl cmtlbGV5IERhdGFiYXNlIGJhY2tlbmQgZm9yIDM4OSBEaXJlY3RvcnkgU2VydmVyCi0lZGVzY3Jp cHRpb24gICAgICBiZGIKLUJlcmtlbGV5IERhdGFiYXNlIGJhY2tlbmQgZm9yIDM4OSBEaXJlY3Rv cnkgU2VydmVyCi1XYXJuaW5nISBUaGlzIGJhY2tlbmQgaXMgZGVwcmVjYXRlZCBpbiBmYXZvciBv ZiBsbWRiIGFuZCBpdHMgc3VwcG9ydAotbWF5IGJlIHJlbW92ZWQgaW4gZnV0dXJlIHZlcnNpb25z LgogCiBSZXF1aXJlczogICAgICAgICAle25hbWV9ID0gJXt2ZXJzaW9ufS0le3JlbGVhc2V9CitS ZXF1aXJlczogICAgICAgICAle25hbWV9LWxpYnMgPSAle3ZlcnNpb259LSV7cmVsZWFzZX0KICMg QmVya2VsZXkgREIgZGF0YWJhc2UgbGliZGIgd2FzIG1hcmtlZCBhcyBkZXByZWNhdGVkIHNpbmNl IEY0MDoKICMgaHR0cHM6Ly9mZWRvcmFwcm9qZWN0Lm9yZy93aWtpL0NoYW5nZXMvMzg5X0RpcmVj dG9yeV9TZXJ2ZXJfMy4wLjAKICMgYmVjYXVzZSBsaWJkYiB3YXMgbWFya2VkIGFzIGRlcHJlY2F0 ZWQgc2luY2UgRjMzCiAjIGh0dHBzOi8vZmVkb3JhcHJvamVjdC5vcmcvd2lraS9DaGFuZ2VzL0xp YmRiX2RlcHJlY2F0ZWQKIFByb3ZpZGVzOiAgICAgICAgIGRlcHJlY2F0ZWQoKQotJWVuZGlmCiAK KyVkZXNjcmlwdGlvbiAgICAgIGJkYgorQmVya2VsZXkgRGF0YWJhc2UgYmFja2VuZCBmb3IgMzg5 IERpcmVjdG9yeSBTZXJ2ZXIKK1dhcm5pbmchIFRoaXMgYmFja2VuZCBpcyBkZXByZWNhdGVkIGlu IGZhdm9yIG9mIGxtZGIgYW5kIGl0cyBzdXBwb3J0CittYXkgYmUgcmVtb3ZlZCBpbiBmdXR1cmUg dmVyc2lvbnMuCislZW5kaWYKIAogJXBhY2thZ2UgLW4gcHl0aG9uJXtweXRob24zX3BrZ3ZlcnNp b259LWxpYjM4OQogU3VtbWFyeTogIEEgbGlicmFyeSBmb3IgYWNjZXNzaW5nLCB0ZXN0aW5nLCBh bmQgY29uZmlndXJpbmcgdGhlIDM4OSBEaXJlY3RvcnkgU2VydmVyCiBCdWlsZEFyY2g6ICAgICAg ICBub2FyY2gKIFJlcXVpcmVzOiAle25hbWV9ID0gJXt2ZXJzaW9ufS0le3JlbGVhc2V9CiBSZXF1 aXJlczogb3BlbnNzbAotIyBUaGlzIGlzIGZvciAvdXNyL2Jpbi9jX3JlaGFzaCB0b29sLCBvbmx5 IG5lZWRlZCBmb3Igb3BlbnNzbCA8IDEuMS4wCi1SZXF1aXJlczogb3BlbnNzbC1wZXJsCiBSZXF1 aXJlczogaXByb3V0ZQogUmVxdWlyZXM6IHB5dGhvbiV7cHl0aG9uM19wa2d2ZXJzaW9ufS1saWJz ZWxpbnV4CiBSZWNvbW1lbmRzOiBiYXNoLWNvbXBsZXRpb24KIAogJWRlc2NyaXB0aW9uIC1uIHB5 dGhvbiV7cHl0aG9uM19wa2d2ZXJzaW9ufS1saWIzODkKIFRoaXMgbW9kdWxlIGNvbnRhaW5zIHRv b2xzIGFuZCBsaWJyYXJpZXMgZm9yIGFjY2Vzc2luZywgdGVzdGluZywKLSBhbmQgY29uZmlndXJp bmcgdGhlIDM4OSBEaXJlY3RvcnkgU2VydmVyLgorYW5kIGNvbmZpZ3VyaW5nIHRoZSAzODkgRGly ZWN0b3J5IFNlcnZlci4KKworJWlmICV7d2l0aCByZXBsX3JlcG9ydHN9CislcGFja2FnZSAtbiBw eXRob24le3B5dGhvbjNfcGtndmVyc2lvbn0tbGliMzg5LXJlcGwtcmVwb3J0cworU3VtbWFyeTog SFRNTCBhbmQgUE5HIHJlcG9ydCBnZW5lcmF0aW9uIGZvciAzODkgRGlyZWN0b3J5IFNlcnZlciBy ZXBsaWNhdGlvbiBtb25pdG9yaW5nIHRvb2xzCitCdWlsZEFyY2g6IG5vYXJjaAorUmVxdWlyZXM6 IHB5dGhvbiV7cHl0aG9uM19wa2d2ZXJzaW9ufS1saWIzODkgPSAle3ZlcnNpb259LSV7cmVsZWFz ZX0KK1JlcXVpcmVzOiBweXRob24le3B5dGhvbjNfcGtndmVyc2lvbn0tcGxvdGx5CitSZXF1aXJl czogcHl0aG9uJXtweXRob24zX3BrZ3ZlcnNpb259LW1hdHBsb3RsaWIKKworJWRlc2NyaXB0aW9u IC1uIHB5dGhvbiV7cHl0aG9uM19wa2d2ZXJzaW9ufS1saWIzODktcmVwbC1yZXBvcnRzCitFeHRl bmRlZCByZXBvcnRpbmcgY2FwYWJpbGl0aWVzIGZvciAzODkgRGlyZWN0b3J5IFNlcnZlciByZXBs aWNhdGlvbiBhbmFseXNpcy4KK1RoaXMgcGFja2FnZSBwcm92aWRlcyBhZGRpdGlvbmFsIHJlcG9y dCBmb3JtYXRzIChIVE1MIGFuZCBQTkcpIHdpdGggaW50ZXJhY3RpdmUKK3Zpc3VhbGl6YXRpb25z IGFuZCBncmFwaHMgZm9yIHJlcGxpY2F0aW9uIGxhZyBhbmFseXNpcy4gVGhlc2UgZm9ybWF0cyBy ZXF1aXJlCithZGRpdGlvbmFsIGRlcGVuZGVuY2llcyBhbmQgYXJlIG9wdGlvbmFsIC0gdGhlIGJh c2UgcGFja2FnZSBzdXBwb3J0cyBDU1YKK3JlcG9ydHMgd2l0aG91dCB0aGlzIGV4dGVuc2lvbi4K KyVlbmRpZgogCiAlaWYgJXt3aXRoIGNvY2twaXR9CiAlcGFja2FnZSAtbiBjb2NrcGl0LTM4OS1k cwpAQCAtNTY4LDcgKzQxMyw3IEBAIGNkIHNyYy9saWIzODkKICVweXByb2plY3RfYnVpbGRyZXF1 aXJlcyAtZyB0ZXN0CiAKICVwcmVwCi0lYXV0b3NldHVwIC1TIGdpdCAtcDEgLW4gJXtuYW1lfS0l e3ZlcnNpb259CislYXV0b3NldHVwIC1wMSAtbiAle25hbWV9LSV7dmVyc2lvbn0KICVpZiAle2Rl ZmluZWQgU09VUkNFNn0KIHJtIC1yZiB2ZW5kb3IKIHRhciB4emYgJXtTT1VSQ0U2fQpAQCAtNTgy LDcgKzQyNyw3IEBAIGNwICV7U09VUkNFN30gc3JjL0NhcmdvLmxvY2sKICVlbmRpZgogCiAlaWYg JXt3aXRoIGJ1bmRsZV9saWJkYn0KLSVzZXR1cCAtcSAtbiAle25hbWV9LSV7dmVyc2lvbn0gLVQg LUQgLWIgNQorJXNldHVwIC1xIC1uICV7bmFtZX0tJXt2ZXJzaW9ufSAtVCAtRCAtYiA0CiAlZW5k aWYKIAogJWlmICV7ZGVmaW5lZCBTT1VSQ0U4fQpAQCAtNTkzLDE1ICs0MzgsMTAgQEAgdGFyIHh2 amYgJXtTT1VSQ0U4fSAtQyBzcmMvY29ja3BpdC8zODktY29uc29sZQogY3AgJXtTT1VSQ0UyfSBS RUFETUUuZGV2ZWwKIAogJWJ1aWxkCi0jIFdvcmthcm91bmQgdW50aWwgaHR0cHM6Ly9naXRodWIu Y29tLzM4OWRzLzM4OS1kcy1iYXNlL2lzc3Vlcy82NDc2IGlzIGZpeGVkCi1leHBvcnQgQ0ZMQUdT PSIle29wdGZsYWdzfSAtc3RkPWdudTE3IgotCiAlaWYgJXt3aXRoIGNsYW5nfQogQ0xBTkdfRkxB R1M9Ii0tZW5hYmxlLWNsYW5nIgogJWVuZGlmCiAKLSV7P3dpdGhfdG1wZmlsZXNfZDogVE1QRklM RVNfRkxBRz0iLS13aXRoLXRtcGZpbGVzLWQ9JXt3aXRoX3RtcGZpbGVzX2R9In0KLQogJWlmICV7 d2l0aCBhc2FufQogQVNBTl9GTEFHUz0iLS1lbmFibGUtYXNhbiAtLWVuYWJsZS1kZWJ1ZyIKICVl bmRpZgpAQCAtNjI0LDYgKzQ2NCwxMiBAQCBSVVNUX0ZMQUdTPSItLWVuYWJsZS1ydXN0IC0tZW5h YmxlLXJ1c3Qtb2ZmbGluZSIKIENPQ0tQSVRfRkxBR1M9Ii0tZGlzYWJsZS1jb2NrcGl0IgogJWVu ZGlmCiAKKyVpZiAle3dpdGggdXNkdH0KK1VTRFRfRkxBR1M9Ii0tZW5hYmxlLXVzZHQiCislZWxz ZQorVVNEVF9GTEFHUz0iLS1kaXNhYmxlLXVzZHQiCislZW5kaWYKKwogJWlmICV7d2l0aCBidW5k bGVfamVtYWxsb2N9CiAjIE92ZXJyaWRlIHBhZ2Ugc2l6ZSwgYnogIzE1NDU1MzkKICMgNEsKQEAg LTY0NCw3ICs0OTAsNyBAQCBDT0NLUElUX0ZMQUdTPSItLWRpc2FibGUtY29ja3BpdCIKIAogIyBC dWlsZCBqZW1hbGxvYwogcHVzaGQgLi4vJXtqZW1hbGxvY19uYW1lfS0le2plbWFsbG9jX3Zlcn0K LXBhdGNoIC1wMSAtRjMgPCAle1NPVVJDRTEwfQorcGF0Y2ggLXAxIC1GMyA8ICV7U09VUkNFNX0K ICVjb25maWd1cmUgXAogICAgICAgICAtLWxpYmRpcj0le19saWJkaXJ9LyV7cGtnbmFtZX0vbGli IFwKICAgICAgICAgLS1iaW5kaXI9JXtfbGliZGlyfS8le3BrZ25hbWV9L2JpbiBcCkBAIC02NTcs MTQgKzUwMywxNiBAQCBwb3BkCiAlaWYgJXt3aXRoIGJ1bmRsZV9saWJkYn0KIG1rZGlyIC1wIC4u LyV7bGliZGJfYmFzZV92ZXJzaW9ufQogcHVzaGQgLi4vJXtsaWJkYl9iYXNlX3ZlcnNpb259Ci10 YXIgLXhqZiAgJXtfdG9wZGlyfS9TT1VSQ0VTLyV7bGliZGJfZnVsbF92ZXJzaW9ufS50YXIuYnoy Cit0YXIgLXhqZiAle190b3BkaXJ9L1NPVVJDRVMvJXtsaWJkYl9mdWxsX3ZlcnNpb259LnRhci5i ejIKIG12ICV7bGliZGJfZnVsbF92ZXJzaW9ufSBTT1VSQ0VTCislaWYgMCV7P2ZlZG9yYX0KIHNl ZCAtaSAtZSAnL15DRkxBR1M9L3MvLWZuby1zdHJpY3QtYWxpYXNpbmcvJiAtc3RkPWdudTk5Lycg JXtfYnVpbGRkaXJ9LyV7bmFtZX0tJXt2ZXJzaW9ufS9ycG0vYnVuZGxlLWxpYmRiLnNwZWMuaW4K KyVlbmRpZgogcnBtYnVpbGQgIC0tZGVmaW5lICJfdG9wZGlyICRQV0QiIC1iYyAle19idWlsZGRp cn0vJXtuYW1lfS0le3ZlcnNpb259L3JwbS9idW5kbGUtbGliZGIuc3BlYy5pbgogcG9wZAogJWVu ZGlmCiAKLSMgUmVidWlsZCB0aGUgYXV0b3Rvb2wgYXJ0aWZhY3RzIG5vdy4KKyMgUmVidWlsZCBh dXRvdG9vbHMgYXJ0aWZhY3RzCiBhdXRvcmVjb25mIC1maXYKIAogJWNvbmZpZ3VyZSBcCkBAIC02 NzYsMjYgKzUyNCwxNSBAQCBhdXRvcmVjb25mIC1maXYKICVpZiAle3dpdGggYnVuZGxlX2xpYmRi fQogICAgICAgICAgICAtLXdpdGgtYnVuZGxlLWxpYmRiPSV7X2J1aWxkZGlyfS8le2xpYmRiX2Jh c2VfdmVyc2lvbn0vQlVJTEQvJXtsaWJkYl9iYXNlX2Rpcn0vZGlzdC9kaXN0LXRscyBcCiAlZW5k aWYKLSAgICAgICAgICAgLS13aXRoLXNlbGludXggJFRNUEZJTEVTX0ZMQUcgXAorICAgICAgICAg ICAtLXdpdGgtc2VsaW51eCBcCiAgICAgICAgICAgIC0td2l0aC1zeXN0ZW1kIFwKLSAgICAgICAg ICAgLS13aXRoLXN5c3RlbWRzeXN0ZW11bml0ZGlyPSV7X3VuaXRkaXJ9IFwKLSAgICAgICAgICAg LS13aXRoLXN5c3RlbWRzeXN0ZW1jb25mZGlyPSV7X3N5c2NvbmZkaXJ9L3N5c3RlbWQvc3lzdGVt IFwKLSAgICAgICAgICAgLS13aXRoLXN5c3RlbWRncm91cG5hbWU9JXtncm91cG5hbWV9IFwKLSAg ICAgICAgICAgLS1saWJleGVjZGlyPSV7X2xpYmV4ZWNkaXJ9LyV7cGtnbmFtZX0gXAotICAgICAg ICAgICAkQVNBTl9GTEFHUyAkTVNBTl9GTEFHUyAkVFNBTl9GTEFHUyAkVUJTQU5fRkxBR1MgJFJV U1RfRkxBR1MgJENMQU5HX0ZMQUdTICRDT0NLUElUX0ZMQUdTIFwKLSVpZiAwJXs/ZmVkb3JhfSA+ PSAzNCB8fCAwJXs/cmhlbH0gPj0gOQorICAgICAgICAgICAkQVNBTl9GTEFHUyAkTVNBTl9GTEFH UyAkVFNBTl9GTEFHUyAkVUJTQU5fRkxBR1MgJFJVU1RfRkxBR1MgJENMQU5HX0ZMQUdTICRDT0NL UElUX0ZMQUdTICRVU0RUX0ZMQUdTIFwKICAgICAgICAgICAgLS13aXRoLWxpYmxkYXAtcj1ubyBc Ci0lZW5kaWYKICVpZiAle3dpdGggaGlicH0KLQkgIC0tZW5hYmxlLWhpYnAgXAorICAgICAgICAg ICAtLWVuYWJsZS1oaWJwIFwKICVlbmRpZgogICAgICAgICAgICAtLWVuYWJsZS1jbW9ja2EKIAot IyBBdm9pZCAiVW5rbm93biBrZXkgbmFtZSAnWFhYJyBpbiBzZWN0aW9uICdTZXJ2aWNlJywgaWdu b3JpbmcuIiB3YXJuaW5ncyBmcm9tIHN5c3RlbWQgb24gb2xkZXIgcmVsZWFzZXMKLSVpZiAwJXs/ cmhlbH0gJiYgMCV7P3JoZWx9IDwgOQotICBzZWQgLXIgLWkgJy9eKFByb3RlY3QoSG9tZXxIb3N0 bmFtZXxLZXJuZWxMb2dzKXxQcml2YXRlTW91bnRzKT0vZCcgJXtfYnVpbGRkaXJ9LyV7bmFtZX0t JXt2ZXJzaW9ufS93cmFwcGVycy8qLnNlcnZpY2UuaW4KLSVlbmRpZgotCiAjIGxpYjM4OQogcHVz aGQgLi9zcmMvbGliMzg5CiAle3B5dGhvbjN9IHZhbGlkYXRlX3ZlcnNpb24ucHkgLS11cGRhdGUK QEAgLTcwMyw3ICs1NDAsNyBAQCBwdXNoZCAuL3NyYy9saWIzODkKIHBvcGQKIAogIyBHZW5lcmF0 ZSBzeW1ib2xpYyBpbmZvIGZvciBkZWJ1Z2dlcnMKLWV4cG9ydCBYQ0ZMQUdTPSRSUE1fT1BUX0ZM QUdTCitleHBvcnQgWENGTEFHUz0iJXtvcHRmbGFnc30iCiAKICVtYWtlX2J1aWxkCiAKQEAgLTcy NiwxMSArNTYzLDE2IEBAIHNlZCAtaSAtZSAiL2xpYmJhY2stYmRiL2QiIHBsdWdpbnMubGlzdAog JWVuZGlmCiAKICMgQ29weSBpbiBvdXIgZG9jcyBmcm9tIGRveHlnZW4uCi1jcCAtciAle19idWls ZGRpcn0vJXtuYW1lfS0le3ZlcnNpb259L21hbi9tYW4zICRSUE1fQlVJTERfUk9PVC8le19tYW5k aXJ9L21hbjMKK2NwIC1yICV7X2J1aWxkZGlyfS8le25hbWV9LSV7dmVyc2lvbn0vbWFuL21hbjMg JXtidWlsZHJvb3R9LyV7X21hbmRpcn0vbWFuMwogCiAjIGxpYjM4OQogcHVzaGQgc3JjL2xpYjM4 OQogJXB5cHJvamVjdF9pbnN0YWxsCislaWYgMCV7P2ZlZG9yYX0gPD0gNDEgfHwgKDAlez9yaGVs fSAmJiAwJXs/cmhlbH0gPD0gMTApCitmb3IgY2xpdG9vbCBpbiBkc2NvbmYgZHNjcmVhdGUgZHNj dGwgZHNpZG0gb3BlbmxkYXBfdG9fZHM7IGRvCisgICAgbXYgJXtidWlsZHJvb3R9JXtfYmluZGly fS8kY2xpdG9vbCAle2J1aWxkcm9vdH0le19zYmluZGlyfS8KK2RvbmUKKyVlbmRpZgogJXB5cHJv amVjdF9zYXZlX2ZpbGVzIC1sIGxpYjM4OQogcG9wZAogCkBAIC03NDEsMjYgKzU4MywyNSBAQCBk bwogICAgIGluc3RhbGwgLXAgLW0gMDY0NCAtRCAtdCAnJXtidWlsZHJvb3R9JXtiYXNoX2NvbXBs ZXRpb25zX2Rpcn0nICIke2NsaXRvb2x9IgogZG9uZQogCi1ta2RpciAtcCAkUlBNX0JVSUxEX1JP T1QvdmFyL2xvZy8le3BrZ25hbWV9Ci1ta2RpciAtcCAkUlBNX0JVSUxEX1JPT1QvdmFyL2xpYi8l e3BrZ25hbWV9Ci1ta2RpciAtcCAkUlBNX0JVSUxEX1JPT1QvdmFyL2xvY2svJXtwa2duYW1lfSBc Ci0gICAgJiYgY2htb2QgNzcwICRSUE1fQlVJTERfUk9PVC92YXIvbG9jay8le3BrZ25hbWV9Citt a2RpciAtcCAle2J1aWxkcm9vdH0vdmFyL2xvZy8le3BrZ25hbWV9Citta2RpciAtcCAle2J1aWxk cm9vdH0vdmFyL2xpYi8le3BrZ25hbWV9Citta2RpciAtcCAle2J1aWxkcm9vdH0vdmFyL2xvY2sv JXtwa2duYW1lfSBcCisgICAgJiYgY2htb2QgNzcwICV7YnVpbGRyb290fS92YXIvbG9jay8le3Br Z25hbWV9CiAKLSMgZm9yIHN5c3RlbWQKLW1rZGlyIC1wICRSUE1fQlVJTERfUk9PVCV7X3N5c2Nv bmZkaXJ9L3N5c3RlbWQvc3lzdGVtLyV7Z3JvdXBuYW1lfS53YW50cwotaW5zdGFsbCAtcCAtRCAt bSAwNjQ0ICV7U09VUkNFNH0gJXtidWlsZHJvb3R9JXtfc3lzdXNlcnNkaXJ9LzM4OS1kcy1iYXNl LmNvbmYKKyMgRm9yIHN5c3RlbWQKK21rZGlyIC1wICV7YnVpbGRyb290fSV7X3N5c2NvbmZkaXJ9 L3N5c3RlbWQvc3lzdGVtLyV7Z3JvdXBuYW1lfS53YW50cwogCi0jcmVtb3ZlIGxpYnRvb2wgYW5k IHN0YXRpYyBsaWJzCi1ybSAtZiAkUlBNX0JVSUxEX1JPT1Qle19saWJkaXJ9LyV7cGtnbmFtZX0v Ki5hCi1ybSAtZiAkUlBNX0JVSUxEX1JPT1Qle19saWJkaXJ9LyV7cGtnbmFtZX0vKi5sYQotcm0g LWYgJFJQTV9CVUlMRF9ST09UJXtfbGliZGlyfS8le3BrZ25hbWV9L3BsdWdpbnMvKi5hCi1ybSAt ZiAkUlBNX0JVSUxEX1JPT1Qle19saWJkaXJ9LyV7cGtnbmFtZX0vcGx1Z2lucy8qLmxhCi1ybSAt ZiAkUlBNX0JVSUxEX1JPT1Qle19saWJkaXJ9L2xpYnN2cmNvcmUuYQotcm0gLWYgJFJQTV9CVUlM RF9ST09UJXtfbGliZGlyfS9saWJzdnJjb3JlLmxhCisjIFJlbW92ZSBsaWJ0b29sIGFuZCBzdGF0 aWMgbGlicworcm0gLWYgJXtidWlsZHJvb3R9JXtfbGliZGlyfS8le3BrZ25hbWV9LyouYQorcm0g LWYgJXtidWlsZHJvb3R9JXtfbGliZGlyfS8le3BrZ25hbWV9LyoubGEKK3JtIC1mICV7YnVpbGRy b290fSV7X2xpYmRpcn0vJXtwa2duYW1lfS9wbHVnaW5zLyouYQorcm0gLWYgJXtidWlsZHJvb3R9 JXtfbGliZGlyfS8le3BrZ25hbWV9L3BsdWdpbnMvKi5sYQorcm0gLWYgJXtidWlsZHJvb3R9JXtf bGliZGlyfS9saWJzdnJjb3JlLmEKK3JtIC1mICV7YnVpbGRyb290fSV7X2xpYmRpcn0vbGlic3Zy Y29yZS5sYQogCiAlaWYgJXt3aXRoIGJ1bmRsZV9qZW1hbGxvY30KIHB1c2hkIC4uLyV7amVtYWxs b2NfbmFtZX0tJXtqZW1hbGxvY192ZXJ9Ci1tYWtlIERFU1RESVI9IiRSUE1fQlVJTERfUk9PVCIg aW5zdGFsbF9saWIgaW5zdGFsbF9iaW4KK21ha2UgREVTVERJUj0iJXtidWlsZHJvb3R9IiBpbnN0 YWxsX2xpYiBpbnN0YWxsX2JpbgogY3AgLXBhIENPUFlJTkcgLi4vJXtuYW1lfS0le3ZlcnNpb259 L0NPUFlJTkcuamVtYWxsb2MKIGNwIC1wYSBSRUFETUUgLi4vJXtuYW1lfS0le3ZlcnNpb259L1JF QURNRS5qZW1hbGxvYwogcG9wZApAQCAtNzczLDcgKzYxNCw3IEBAIGxpYmRiZGVzdGRpcj0kUFdE Ly4uLyV7bmFtZX0tJXt2ZXJzaW9ufQogY3AgLXBhICRsaWJkYmJ1aWxkZGlyL0xJQ0VOU0UgJGxp YmRiZGVzdGRpci9MSUNFTlNFLmxpYmRiCiBjcCAtcGEgJGxpYmRiYnVpbGRkaXIvUkVBRE1FICRs aWJkYmRlc3RkaXIvUkVBRE1FLmxpYmRiCiBjcCAtcGEgJGxpYmRiYnVpbGRkaXIvbGdwbC0yLjEu dHh0ICRsaWJkYmRlc3RkaXIvbGdwbC0yLjEudHh0LmxpYmRiCi1jcCAtcGEgJGxpYmRiYnVpbGRk aXIvZGlzdC9kaXN0LXRscy8ubGlicy8le2xpYmRiX2J1bmRsZV9uYW1lfSAkUlBNX0JVSUxEX1JP T1Qle19saWJkaXJ9LyV7cGtnbmFtZX0vJXtsaWJkYl9idW5kbGVfbmFtZX0KK2NwIC1wYSAkbGli ZGJidWlsZGRpci9kaXN0L2Rpc3QtdGxzLy5saWJzLyV7bGliZGJfYnVuZGxlX25hbWV9ICV7YnVp bGRyb290fSV7X2xpYmRpcn0vJXtwa2duYW1lfS8le2xpYmRiX2J1bmRsZV9uYW1lfQogcG9wZAog JWVuZGlmCiAKQEAgLTc5NCwxMiArNjM1LDEyIEBAIHBvcGQKICVlbmRpZgogCiAlY2hlY2sKLSMg VGhpcyBjaGVja3MgdGhlIGNvZGUsIGlmIGl0IGZhaWxzIGl0IHByaW50cyB3aHksIHRoZW4gcmUt cmFpc2VzIHRoZSBmYWlsIHRvIHNob3J0Y2lyY3VpdCB0aGUgcnBtIGJ1aWxkLgorIyBSdW4gY21v Y2thIHVuaXQgdGVzdHMKICVpZiAle3dpdGggdHNhbn0KIGV4cG9ydCBUU0FOX09QVElPTlM9cHJp bnRfc3RhY2t0cmFjZT0xOnNlY29uZF9kZWFkbG9ja19zdGFjaz0xOmhpc3Rvcnlfc2l6ZT03CiAl ZW5kaWYKICVpZiAle3dpdGhvdXQgYXNhbn0gJiYgJXt3aXRob3V0IG1zYW59Ci1pZiAhIG1ha2Ug REVTVERJUj0iJFJQTV9CVUlMRF9ST09UIiBjaGVjazsgdGhlbiBjYXQgLi90ZXN0LXN1aXRlLmxv ZyAmJiBmYWxzZTsgZmkKK2lmICEgbWFrZSBERVNURElSPSIle2J1aWxkcm9vdH0iIGNoZWNrOyB0 aGVuIGNhdCAuL3Rlc3Qtc3VpdGUubG9nICYmIGZhbHNlOyBmaQogJWVuZGlmCiAKICMgQ2hlY2sg aW1wb3J0IGZvciBsaWIzODkgbW9kdWxlcwpAQCAtODA4LDE5ICs2NDksMTcgQEAgaWYgISBtYWtl IERFU1RESVI9IiRSUE1fQlVJTERfUk9PVCIgY2hlY2s7IHRoZW4gY2F0IC4vdGVzdC1zdWl0ZS5s b2cgJiYgZmFsc2U7IGYKICVwb3N0CiBpZiBbIC1uICIkREVCVUdQT1NUVFJBTlMiIF0gOyB0aGVu CiAgICAgb3V0cHV0PSRERUJVR1BPU1RUUkFOUwotICAgIG91dHB1dDI9JHtERUJVR1BPU1RUUkFO U30udXBncmFkZQogZWxzZQogICAgIG91dHB1dD0vZGV2L251bGwKLSAgICBvdXRwdXQyPS9kZXYv bnVsbAogZmkKIAotIyByZWxvYWQgdG8gcGljayB1cCBhbnkgY2hhbmdlcyB0byBzeXN0ZW1kIGZp bGVzCisjIFJlbG9hZCB0byBwaWNrIHVwIGFueSBjaGFuZ2VzIHRvIHN5c3RlbWQgZmlsZXMKIC9i aW4vc3lzdGVtY3RsIGRhZW1vbi1yZWxvYWQgPiRvdXRwdXQgMj4mMSB8fCA6CiAKLSMgUmVsb2Fk IG91ciBzeXNjdGwgYmVmb3JlIHdlIHJlc3RhcnQgKGlmIHdlIGNhbikKLXN5c2N0bCAtLXN5c3Rl bSAmPiAkb3V0cHV0OyB0cnVlCisjIFJlbG9hZCBzeXNjdGwgYmVmb3JlIHJlc3RhcnRpbmcgaW5z dGFuY2VzCitzeXNjdGwgLS1zeXN0ZW0gJj4gIiRvdXRwdXQiOyB0cnVlCiAKLSMgR2F0aGVyIHJ1 bm5pbmcgaW5zdGFuY2VzLCBzdG9wIHRoZW0sIHJ1biBpbmRleC1jaGVjaywgdGhlbiByZXN0YXJ0 CisjIEdhdGhlciBydW5uaW5nIGluc3RhbmNlcywgc3RvcCBhbmQgcmVzdGFydCB0aGVtCiBpbnN0 YmFzZT0iJXtfc3lzY29uZmRpcn0vJXtwa2duYW1lfSIKIGluc3RhbmNlcz0iIgogbmluc3Q9MApA QCAtODMxLDcgKzY3MCw2IEBAIGZvciBkaXIgaW4gIiRpbnN0YmFzZSIvc2xhcGQtKiA7IGRvCiAg ICAgY2FzZSAiJGRpciIgaW4gKi5yZW1vdmVkKSBjb250aW51ZSA7OyBlc2FjCiAgICAgYmFzZW5h bWU9JChiYXNlbmFtZSAiJGRpciIpCiAgICAgaW5zdD0iJXtwa2duYW1lfUAke2Jhc2VuYW1lI3Ns YXBkLX0iCi0gICAgaW5zdF9uYW1lPSIke2Jhc2VuYW1lI3NsYXBkLX0iCiAgICAgZWNobyAiZm91 bmQgaW5zdGFuY2UgJGluc3QgLSBnZXR0aW5nIHN0YXR1cyIgPj4gIiRvdXRwdXQiIDI+JjEgfHwg OgogICAgIGlmIC9iaW4vc3lzdGVtY3RsIC1xIGlzLWFjdGl2ZSAiJGluc3QiIDsgdGhlbgogICAg ICAgIGVjaG8gImluc3RhbmNlICRpbnN0IGlzIHJ1bm5pbmcgLSBzdG9wcGluZyBmb3IgdXBncmFk ZSIgPj4gIiRvdXRwdXQiIDI+JjEgfHwgOgpAQCAtODc0LDYgKzcxMiw3IEBAIGZpCiAlcG9zdHVu IHNubXAKICVzeXN0ZW1kX3Bvc3R1bl93aXRoX3Jlc3RhcnQgJXtwa2duYW1lfS1zbm1wLnNlcnZp Y2UKIAorCiAlZmlsZXMgLWYgcGx1Z2lucy5saXN0CiAlaWYgJXt3aXRoIGJ1bmRsZV9qZW1hbGxv Y30KICVkb2MgTElDRU5TRSBMSUNFTlNFLkdQTHYzKyBMSUNFTlNFLm9wZW5zc2wgUkVBRE1FLmpl bWFsbG9jCkBAIC04ODYsNyArNzI1LDcgQEAgZmkKICVjb25maWcobm9yZXBsYWNlKSV7X3N5c2Nv bmZkaXJ9LyV7cGtnbmFtZX0vc2NoZW1hLyoubGRpZgogJWRpciAle19zeXNjb25mZGlyfS8le3Br Z25hbWV9L2NvbmZpZwogJWRpciAle19zeXNjb25mZGlyfS9zeXN0ZW1kL3N5c3RlbS8le2dyb3Vw bmFtZX0ud2FudHMKLSV7X3N5c3VzZXJzZGlyfS8zODktZHMtYmFzZS5jb25mCisle19zeXN1c2Vy c2Rpcn0vJXtuYW1lfS5jb25mCiAlY29uZmlnKG5vcmVwbGFjZSkle19zeXNjb25mZGlyfS8le3Br Z25hbWV9L2NvbmZpZy9zbGFwZC1jb2xsYXRpb25zLmNvbmYKICVjb25maWcobm9yZXBsYWNlKSV7 X3N5c2NvbmZkaXJ9LyV7cGtnbmFtZX0vY29uZmlnL2NlcnRtYXAuY29uZgogJXtfZGF0YWRpcn0v JXtwa2duYW1lfQpAQCAtOTAxLDggKzc0MCw2IEBAIGZpCiAle19tYW5kaXJ9L21hbjEvZHMtbG9n cGlwZS5weS4xLmd6CiAle19iaW5kaXJ9L2xkY2x0CiAle19tYW5kaXJ9L21hbjEvbGRjbHQuMS5n egotJXtfYmluZGlyfS9sb2djb252LnBsCi0le19tYW5kaXJ9L21hbjEvbG9nY29udi5wbC4xLmd6 CiAle19iaW5kaXJ9L2xvZ2NvbnYucHkKICV7X21hbmRpcn0vbWFuMS9sb2djb252LnB5LjEuZ3oK ICV7X2JpbmRpcn0vcHdkaGFzaApAQCAtOTIwLDggKzc1Nyw2IEBAIGZpCiAle19tYW5kaXJ9L21h bjUvZGlyc3J2LnN5c3RlbWQuNS5negogJXtfbGliZGlyfS8le3BrZ25hbWV9L3B5dGhvbgogJWRp ciAle19saWJkaXJ9LyV7cGtnbmFtZX0vcGx1Z2lucwotIyBUaGlzIGhhcyB0byBiZSBoYXJkY29k ZWQgdG8gL2xpYiAtICRsaWJkaXIgY2hhbmdlcyBiZXR3ZWVuIGxpYi9saWI2NCwgYnV0Ci0jIHN5 c2N0bC5kIGlzIGFsd2F5cyBpbiAvbGliLgogJXtfcHJlZml4fS9saWIvc3lzY3RsLmQvKgogJWRp ciAle19sb2NhbHN0YXRlZGlyfS9saWIvJXtwa2duYW1lfQogJWRpciAle19sb2NhbHN0YXRlZGly fS9sb2cvJXtwa2duYW1lfQpAQCAtOTI5LDYgKzc2NCw4IEBAIGZpCiAlZXhjbHVkZSAle19zYmlu ZGlyfS9sZGFwLWFnZW50KgogJWV4Y2x1ZGUgJXtfbWFuZGlyfS9tYW4xL2xkYXAtYWdlbnQuMS5n egogJWV4Y2x1ZGUgJXtfdW5pdGRpcn0vJXtwa2duYW1lfS1zbm1wLnNlcnZpY2UKKyVleGNsdWRl ICV7X2JpbmRpcn0vbG9nY29udi5wbAorJWV4Y2x1ZGUgJXtfbWFuZGlyfS9tYW4xL2xvZ2NvbnYu cGwuMS5negogJWlmICV7d2l0aCBidW5kbGVfamVtYWxsb2N9CiAle19saWJkaXJ9LyV7cGtnbmFt ZX0vbGliLwogJXtfbGliZGlyfS8le3BrZ25hbWV9L2Jpbi8KQEAgLTk4NSwxMSArODIyLDE5IEBA IGZpCiAlZG9jIHNyYy9saWIzODkvUkVBRE1FLm1kCiAlbGljZW5zZSBMSUNFTlNFIExJQ0VOU0Uu R1BMdjMrCiAjIEJpbmFyaWVzCislaWYgMCV7P2ZlZG9yYX0gPj0gNDIgfHwgMCV7P3JoZWx9ID49 IDExCiAle19iaW5kaXJ9L2RzY29uZgogJXtfYmluZGlyfS9kc2NyZWF0ZQogJXtfYmluZGlyfS9k c2N0bAogJXtfYmluZGlyfS9kc2lkbQogJXtfYmluZGlyfS9vcGVubGRhcF90b19kcworJWVsc2UK KyV7X3NiaW5kaXJ9L2RzY29uZgorJXtfc2JpbmRpcn0vZHNjcmVhdGUKKyV7X3NiaW5kaXJ9L2Rz Y3RsCisle19zYmluZGlyfS9kc2lkbQorJXtfc2JpbmRpcn0vb3BlbmxkYXBfdG9fZHMKKyVlbmRp ZgogJXtfbGliZXhlY2Rpcn0vJXtwa2duYW1lfS9kc2NvbnRhaW5lcgogIyBNYW4gcGFnZXMKICV7 X21hbmRpcn0vbWFuOC9kc2NvbmYuOC5negpAQCAtMTAwNCw2ICs4NDksMTcgQEAgZmkKICV7YmFz aF9jb21wbGV0aW9uc19kaXJ9L2RzY3JlYXRlCiAle2Jhc2hfY29tcGxldGlvbnNfZGlyfS9kc2lk bQogCislaWYgJXt3aXRoIGxvZ2NvbnZwbH0KKyVmaWxlcyBsb2djb252LXBlcmwKKyV7X2JpbmRp cn0vbG9nY29udi5wbAorJXtfbWFuZGlyfS9tYW4xL2xvZ2NvbnYucGwuMS5negorJWVuZGlmCisK KyVpZiAle3dpdGggcmVwbF9yZXBvcnRzfQorJWZpbGVzIC1uIHB5dGhvbiV7cHl0aG9uM19wa2d2 ZXJzaW9ufS1saWIzODktcmVwbC1yZXBvcnRzCisjIE5vIGZpbGVzIG5lZWRlZCBhcyB0aGlzIGlz IGp1c3QgYSBtZXRhLXBhY2thZ2UgZm9yIGRlcGVuZGVuY2llcworJWVuZGlmCisKICVpZiAle3dp dGggY29ja3BpdH0KICVmaWxlcyAtbiBjb2NrcGl0LTM4OS1kcyAtZiBjb2NrcGl0Lmxpc3QKICV7 X2RhdGFyb290ZGlyfS9tZXRhaW5mby8zODktY29uc29sZS9vcmcucG9ydDM4OS5jb2NrcGl0X2Nv bnNvbGUubWV0YWluZm8ueG1sCgpkaWZmIC0tZ2l0IGEvUkVBRE1FLnBhY2tpdCBiL1JFQURNRS5w YWNraXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDgxNjgwMwotLS0gL2Rl di9udWxsCisrKyBiL1JFQURNRS5wYWNraXQKQEAgLTAsMCArMSwzIEBACitUaGlzIHJlcG9zaXRv cnkgaXMgbWFpbnRhaW5lZCBieSBwYWNraXQuCitodHRwczovL3BhY2tpdC5kZXYvCitUaGUgZmls ZSB3YXMgZ2VuZXJhdGVkIHVzaW5nIHBhY2tpdCAxLjE2LjIuCg==