ZGlmZiAtLWdpdCBhL2F1dG8vY2MvY29uZiBiL2F1dG8vY2MvY29uZgppbmRleCBhY2I2OGY4Li5jMWY1NzdlIDEwMDY0NAotLS0gYS9hdXRvL2NjL2NvbmYKKysrIGIvYXV0by9jYy9jb25mCkBAIC01MiwxMSArNTIsMTIgQEAKICAgICAgICAgICAgIC4gYXV0by9jYy9pY2MKICAgICAgICAgOzsKIAotIyAgICAgICAgY2NjKQorICAgICAgICBjY2MpCiAjICAgICAgICAgICAgIyBDb21wYXEgQyBWNi41LTIwNwogIwogIyAgICAgICAgICAgIC4gYXV0by9jYy9jY2MKLSMgICAgICAgIDs7CisgICAgICAgICAgICAgbmd4X2luY2x1ZGVfb3B0PSItSSAiCisgICAgICAgIDs7CiAKICMgICAgICAgIGFjYykKICMgICAgICAgICAgICAjIGFDQzogSFAgQU5TSSBDKysgQjM5MTBCIEEuMDMuNTUuMDIKQEAgLTk1LDcgKzk2LDcgQEAKIAogICAgIGlmIHRlc3QgLW4gIiROR1hfTERfT1BUIjsgdGhlbgogICAgICAgICBuZ3hfZmVhdHVyZT0tLXdpdGgtbGQtb3B0PVwiJE5HWF9MRF9PUFRcIgotICAgICAgICBuZ3hfZmVhdHVyZV9uYW1lPURVTU1ZCisgICAgICAgIG5neF9mZWF0dXJlX25hbWU9IkRVTU1ZIgogICAgICAgICBuZ3hfZmVhdHVyZV9ydW49bm8KICAgICAgICAgbmd4X2ZlYXR1cmVfaW5jcz0KICAgICAgICAgbmd4X2ZlYXR1cmVfbGlicz0KQEAgLTExMCw3ICsxMTEsNyBAQAogICAgIGZpCiAKICAgICBuZ3hfZmVhdHVyZT0iZ2NjIHZhcmlhZGljIG1hY3JvcyIKLSAgICBuZ3hfZmVhdHVyZV9uYW1lPUhBVkVfR0NDX1ZBUklBRElDX01BQ1JPUworICAgIG5neF9mZWF0dXJlX25hbWU9IkhBVkVfR0NDX1ZBUklBRElDX01BQ1JPUyIKICAgICBuZ3hfZmVhdHVyZV9ydW49eWVzCiAgICAgbmd4X2ZlYXR1cmVfaW5jcz0iI2luY2x1ZGUgPHN0ZGlvLmg+CiAjZGVmaW5lIHZhcihkdW1teSwgYXJncy4uLikgIHNwcmludGYoYXJncykiCkBAIC0xMjIsNyArMTIzLDcgQEAKIAogCiAgICAgbmd4X2ZlYXR1cmU9IkM5OSB2YXJpYWRpYyBtYWNyb3MiCi0gICAgbmd4X2ZlYXR1cmVfbmFtZT1IQVZFX0M5OV9WQVJJQURJQ19NQUNST1MKKyAgICBuZ3hfZmVhdHVyZV9uYW1lPSJIQVZFX0M5OV9WQVJJQURJQ19NQUNST1MiCiAgICAgbmd4X2ZlYXR1cmVfcnVuPXllcwogICAgIG5neF9mZWF0dXJlX2luY3M9IiNpbmNsdWRlIDxzdGRpby5oPgogI2RlZmluZSB2YXIoZHVtbXksIC4uLikgc3ByaW50ZihfX1ZBX0FSR1NfXykiCkBAIC0xMzIsNCArMTMzLDE2IEBACiAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJ1ZlswXSAhPSAnMScpIHJldHVybiAxIgogICAgIC4gYXV0by9mZWF0dXJlCiAKKworIyAgICBuZ3hfZmVhdHVyZT0iaW5saW5lIgorIyAgICBuZ3hfZmVhdHVyZV9uYW1lPSJEVU1NWSIKKyMgICAgbmd4X2ZlYXR1cmVfcnVuPW5vCisjICAgIG5neF9mZWF0dXJlX2luY3M9ImludCBpbmxpbmUgZih2b2lkKSB7IHJldHVybiAxIH0iCisjICAgIG5neF9mZWF0dXJlX2xpYnM9CisjICAgIG5neF9mZWF0dXJlX3Rlc3Q9CisjICAgIC4gYXV0by9mZWF0dXJlCisjCisjICAgIGlmIFsgJG5neF9mb3VuZCA9IHllcyBdOyB0aGVuCisjICAgIGZpCisKIGZpCmRpZmYgLS1naXQgYS9hdXRvL2NjL2djYyBiL2F1dG8vY2MvZ2NjCmluZGV4IDc1NmUzOTcuLmQ1YmYxZGMgMTAwNjQ0Ci0tLSBhL2F1dG8vY2MvZ2NjCisrKyBiL2F1dG8vY2MvZ2NjCkBAIC0zLDcgKzMsNyBAQAogCiAKICMgZ2NjIDIuNy4yLjMsIDIuOC4xLCAyLjk1LjQsCi0jICAgICAzLjAuNCwgMy4xLjEsIDMuMi4zLCAzLjMuMiwgMy4zLjMsIDMuMy40LCAzLjQKKyMgICAgIDMuMC40LCAzLjEuMSwgMy4yLjMsIDMuMy4yLCAzLjMuMywgMy4zLjQsIDMuNCwgMy40LjIKIAogCiAjIFNvbGFyaXMgNydzIC91c3IvY2NzL2Jpbi9hcyBkb2VzIG5vdCBzdXBwb3J0ICItcGlwZSIKZGlmZiAtLWdpdCBhL2F1dG8vY29uZmlndXJlIGIvYXV0by9jb25maWd1cmUKaW5kZXggYjRhMGI1Ni4uZDVjYzdlMCAxMDA3NTUKLS0tIGEvYXV0by9jb25maWd1cmUKKysrIGIvYXV0by9jb25maWd1cmUKQEAgLTExLDYgKzExLDggQEAKIAogZWNobyA+ICROR1hfQVVUT19IRUFERVJTX0gKIGVjaG8gPiAkTkdYX0FVVE9fQ09ORklHX0gKK2VjaG8gPiAkTkdYX0FVVE9DT05GX0VSUgorCiAKIGlmIFsgJERFQlVHID0gWUVTIF07IHRoZW4KICAgICBoYXZlPU5HWF9ERUJVRyAuIGF1dG8vaGF2ZQpkaWZmIC0tZ2l0IGEvYXV0by9pbnN0YWxsIGIvYXV0by9pbnN0YWxsCmluZGV4IDBkYTliNmQuLmJhZTA5MmIgMTAwNjQ0Ci0tLSBhL2F1dG8vaW5zdGFsbAorKysgYi9hdXRvL2luc3RhbGwKQEAgLTMsNiArMyw3IEBACiAKIAogY2F0IDw8IEVORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPj4gJE1BS0VGSUxFCisKIGluc3RhbGw6CiAJdGVzdCAtZCAkUFJFRklYIHx8IG1rZGlyIC1wICRQUkVGSVgKIApkaWZmIC0tZ2l0IGEvYXV0by9saWIvbWQ1L21ha2UgYi9hdXRvL2xpYi9tZDUvbWFrZQppbmRleCA2ZTI4MzRlLi41ZGZkZGZhIDEwMDY0NAotLS0gYS9hdXRvL2xpYi9tZDUvbWFrZQorKysgYi9hdXRvL2xpYi9tZDUvbWFrZQpAQCAtMiwzNSArMiwyMSBAQAogIyBDb3B5cmlnaHQgKEMpIElnb3IgU3lzb2V2CiAKIAotY2FzZSAiJENDIiBpbgorY2FzZSAiJE5HWF9DQ19OQU1FIiBpbgogCi0gICAgY2wpCi0gICAgICAgIG1ha2VmaWxlPW1ha2VmaWxlLm1zdmMKLSAgICAgICAgb3B0PSJDUFVfT1BUPSRDUFVfT1BUIExJQkM9JExJQkMgTUQ1X0FTTT0kTUQ1X0FTTSIKKyAgICBtc3ZjKikKKyAgICAgICAgbmd4X21ha2VmaWxlPW1ha2VmaWxlLm1zdmMKKyAgICAgICAgbmd4X29wdD0iQ1BVX09QVD0kQ1BVX09QVCBMSUJDPSRMSUJDIE1ENV9BU009JE1ENV9BU00iCiAgICAgOzsKIAotICAgIHdjbDM4NikKLSAgICAgICAgbWFrZWZpbGU9bWFrZWZpbGUub3djCi0gICAgICAgIG9wdD0iQ1BVX09QVD0kQ1BVX09QVCIKKyAgICBvd2MqKQorICAgICAgICBuZ3hfbWFrZWZpbGU9bWFrZWZpbGUub3djCisgICAgICAgIG5neF9vcHQ9IkNQVV9PUFQ9JENQVV9PUFQiCiAgICAgOzsKIAotICAgIGJjYzMyKQotICAgICAgICBtYWtlZmlsZT1tYWtlZmlsZS5iY2MKLSAgICAgICAgb3B0PSItRENQVV9PUFQ9JENQVV9PUFQgLURNRDVfQVNNPSRNRDVfQVNNIgotICAgIDs7Ci0KLWVzYWMKLQotCi1jYXNlICRQTEFURk9STSBpbgotCi0gICAgd2luMzIpCi0gICAgICAgIGxpbmU9YGVjaG8gJE1ENS9tZDUubGliOiB8IHNlZCAtZSAicy9cLy8kbmd4X3JlZ2V4X2RpcnNlcC9nImAKLSAgICAgICAgZWNobyAiJGxpbmUiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4+ICRNQUtFRklMRQotICAgIDs7Ci0KLSAgICAqKQotICAgICAgICBlY2hvICIkTUQ1L2xpYm1kNS5hOiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPj4gJE1BS0VGSUxFCisgICAgYmNjKQorICAgICAgICBuZ3hfbWFrZWZpbGU9bWFrZWZpbGUuYmNjCisgICAgICAgIG5neF9vcHQ9Ii1EQ1BVX09QVD0kQ1BVX09QVCAtRE1ENV9BU009JE1ENV9BU00iCiAgICAgOzsKIAogZXNhYwpAQCAtNDIsMTIgKzI4LDE2IEBACiBjYXNlICRQTEFURk9STSBpbgogCiAgICAgd2luMzIpCi0gICAgICAgIG1kNT1gZWNobyAkTUQ1IHwgc2VkIC1lICJzL1wvLyRuZ3hfcmVnZXhfZGlyc2VwL2ciYAorICAgICAgICBjcCBhdXRvL2xpYi9tZDUvJG5neF9tYWtlZmlsZSAkTUQ1CiAKLSAgICAgICAgY3AgYXV0by9saWIvbWQ1LyRtYWtlZmlsZSAkTUQ1Ci0gICAgICAgIGVjaG8gIgljZCAkbWQ1IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4+ICRNQUtFRklMRQotICAgICAgICBlY2hvICIJXCQoTUFLRSkgLWYgJG1ha2VmaWxlICRvcHQiICAgICAgICAgICAgICAgICAgICAgICA+PiAkTUFLRUZJTEUKLSAgICAgICAgZWNobyAiCWNkIC4uXFwuLlxcLi4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPj4gJE1BS0VGSUxFCisgICAgICAgIGNhdCA8PCBFTkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPj4gJE5HWF9NQUtFRklMRQorCitgZWNobyAiJE1ENS9tZDUubGliOgkkTkdYX01BS0VGSUxFIiB8IHNlZCAtZSAicy9cLy8kbmd4X3JlZ2V4X2RpcnNlcC9nImAKKwljZCBgZWNobyAkTUQ1IHwgc2VkIC1lICJzL1wvLyRuZ3hfcmVnZXhfZGlyc2VwL2ciYAorCVwkKE1BS0UpIC1mICRuZ3hfbWFrZWZpbGUgJG5neF9vcHQKKwljZCAuLlxcLi5cXC4uCisKK0VORAogCiAgICAgICAgIGRvbmU9WUVTCiAgICAgOzsKQEAgLTU1LDEzICs0NSwxNSBAQAogICAgIFN1bk9TOio6aTg2cGMpCiAgICAgICAgIGlmIFsgJE1ENV9BU00gPSBZRVMgXTsgdGhlbgogCi0gICAgICAgICAgICBNRDVfT1BUPSJDRkxBR1M9XCIkTUQ1X09QVCAtRFNPTCAtRE1ENV9BU00gLURMX0VORElBTlwiIgorICAgICAgICAgICAgY2F0IDw8IEVORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PiAkTkdYX01BS0VGSUxFCiAKLSAgICAgICAgICAgIGVjaG8gIgljZCAkTUQ1IFxcIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PiAkTUFLRUZJTEUKLSAgICAgICAgICAgIGVjaG8gIgkmJiBcJChNQUtFKSAkTUQ1X09QVCBcXCIgICAgICAgICAgICAgICAgICA+PiAkTUFLRUZJTEUKLSAgICAgICAgICAgIGVjaG8gIgkJTUQ1X0FTTV9PQko9YXNtL214ODYtc29sLm8gXFwiICAgID4+ICRNQUtFRklMRQotICAgICAgICAgICAgZWNobyAiCQlDQz1cIlwkKENDKVwiIENQUD1cIlwkKENQUClcIiBcXCIgPj4gJE1BS0VGSUxFCi0gICAgICAgICAgICBlY2hvICIJCWxpYm1kNS5hIiAgICAgICAgICAgICAgICAgICAgICAgICA+PiAkTUFLRUZJTEUKKyRNRDUvbGlibWQ1LmE6CSROR1hfTUFLRUZJTEUKKwljZCAkTUQ1IFxcCisJJiYgXCQoTUFLRSkgQ0ZMQUdTPSIkTUQ1X09QVCAtRFNPTCAtRE1ENV9BU00gLURMX0VORElBTiIgXFwKKwkJQ0M9IlwkKENDKSIgQ1BQPSJcJChDUFApIiBcXAorCQlNRDVfQVNNX09CSj1hc20vbXg4Ni1zb2wubyBjbGVhbiBsaWJtZDUuYQorCitFTkQKIAogICAgICAgICAgICAgZG9uZT1ZRVMKICAgICAgICAgZmkKQEAgLTczLDEzICs2NSwxNSBAQAogICAgICo6aTM4NiB8ICo6aTY4NikKICAgICAgICAgaWYgWyAkTUQ1X0FTTSA9IFlFUyBdOyB0aGVuCiAKLSAgICAgICAgICAgIE1ENV9PUFQ9IkNGTEFHUz1cIiRNRDVfT1BUIC1ERUxGIC1ETUQ1X0FTTSAtRExfRU5ESUFOXCIiCisgICAgICAgICAgICBjYXQgPDwgRU5EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4+ICROR1hfTUFLRUZJTEUKIAotICAgICAgICAgICAgZWNobyAiCWNkICRNRDUgXFwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4+ICRNQUtFRklMRQotICAgICAgICAgICAgZWNobyAiCSYmIFwkKE1BS0UpICRNRDVfT1BUIFxcIiAgICAgICAgICAgICAgICAgID4+ICRNQUtFRklMRQotICAgICAgICAgICAgZWNobyAiCQlNRDVfQVNNX09CSj1hc20vbXg4Ni1lbGYubyBcXCIgICAgPj4gJE1BS0VGSUxFCi0gICAgICAgICAgICBlY2hvICIJCUNDPVwiXCQoQ0MpXCIgQ1BQPVwiXCQoQ1BQKVwiIFxcIiA+PiAkTUFLRUZJTEUKLSAgICAgICAgICAgIGVjaG8gIgkJbGlibWQ1LmEiICAgICAgICAgICAgICAgICAgICAgICAgID4+ICRNQUtFRklMRQorJE1ENS9saWJtZDUuYToJJE5HWF9NQUtFRklMRQorCWNkICRNRDUgXFwKKwkmJiBcJChNQUtFKSBDRkxBR1M9IiRNRDVfT1BUIC1ERUxGIC1ETUQ1X0FTTSAtRExfRU5ESUFOIiBcXAorCQlDQz0iXCQoQ0MpIiBDUFA9IlwkKENQUCkiIFxcCisJCU1ENV9BU01fT0JKPWFzbS9teDg2LWVsZi5vIGNsZWFuIGxpYm1kNS5hCisKK0VORAogCiAgICAgICAgICAgICBkb25lPVlFUwogICAgICAgICBmaQpAQCAtODksMTAgKzgzLDE0IEBACiAKIAogaWYgWyAkZG9uZSA9IE5PIF07IHRoZW4KLSAgICBlY2hvICIJY2QgJE1ENSBcXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PiAkTUFLRUZJTEUKLSAgICBlY2hvICIJJiYgXCQoTUFLRSkgQ0ZMQUdTPVwiJE1ENV9PUFRcIiBcXCIgICAgICAgICAgICAgICA+PiAkTUFLRUZJTEUKLSAgICBlY2hvICIJCU1ENV9BU01fT0JKPSBDQz1cIlwkKENDKVwiIGxpYm1kNS5hIiAgICAgID4+ICRNQUtFRklMRQorCisgICAgY2F0IDw8IEVORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4+ICROR1hfTUFLRUZJTEUKKworJE1ENS9saWJtZDUuYToJJE5HWF9NQUtFRklMRQorCWNkICRNRDUgXFwKKwkmJiBcJChNQUtFKSBDRkxBR1M9IiRNRDVfT1BUIiBcXAorCQlDQz0iXCQoQ0MpIiBNRDVfQVNNX09CSj0gY2xlYW4gbGlibWQ1LmEKKworRU5ECisKIGZpCi0KLQotZWNobyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPj4gJE1BS0VGSUxFCmRpZmYgLS1naXQgYS9hdXRvL2xpYi9wY3JlL21ha2UgYi9hdXRvL2xpYi9wY3JlL21ha2UKaW5kZXggNzE0OTk0ZC4uYTYwZmVkYiAxMDA2NDQKLS0tIGEvYXV0by9saWIvcGNyZS9tYWtlCisrKyBiL2F1dG8vbGliL3BjcmUvbWFrZQpAQCAtMiwyMSArMiwyMSBAQAogIyBDb3B5cmlnaHQgKEMpIElnb3IgU3lzb2V2CiAKIAotY2FzZSAiJENDIiBpbgorY2FzZSAiJE5HWF9DQ19OQU1FIiBpbgogCi0gICAgY2wpCi0gICAgICAgIG1ha2VmaWxlPW1ha2VmaWxlLm1zdmMKLSAgICAgICAgb3B0PSJDUFVfT1BUPSRDUFVfT1BUIExJQkM9JExJQkMiCisgICAgbXN2YyopCisgICAgICAgIG5neF9tYWtlZmlsZT1tYWtlZmlsZS5tc3ZjCisgICAgICAgIG5neF9vcHQ9IkNQVV9PUFQ9JENQVV9PUFQgTElCQz0kTElCQyIKICAgICA7OwogCi0gICAgd2NsMzg2KQotICAgICAgICBtYWtlZmlsZT1tYWtlZmlsZS5vd2MKLSAgICAgICAgb3B0PSJDUFVfT1BUPSRDUFVfT1BUIgorICAgIG93YyopCisgICAgICAgIG5neF9tYWtlZmlsZT1tYWtlZmlsZS5vd2MKKyAgICAgICAgbmd4X29wdD0iQ1BVX09QVD0kQ1BVX09QVCIKICAgICA7OwogCi0gICAgYmNjMzIpCi0gICAgICAgIG1ha2VmaWxlPW1ha2VmaWxlLmJjYwotICAgICAgICBvcHQ9Ii1EQ1BVX09QVD0kQ1BVX09QVCIKKyAgICBiY2MpCisgICAgICAgIG5neF9tYWtlZmlsZT1tYWtlZmlsZS5iY2MKKyAgICAgICAgbmd4X29wdD0iLURDUFVfT1BUPSRDUFVfT1BUIgogICAgIDs7CiAKIGVzYWMKQEAgLTI3LDM5ICsyNyw0NSBAQAogICAgIHdpbjMyKQogICAgICAgICBjcCBhdXRvL2xpYi9wY3JlL3BhdGNoLnBjcmUuaW4gJFBDUkUKICAgICAgICAgY3AgYXV0by9saWIvcGNyZS9wYXRjaC5jb25maWcuaW4gJFBDUkUKLSAgICAgICAgY3AgYXV0by9saWIvcGNyZS8kbWFrZWZpbGUgJFBDUkUKKyAgICAgICAgY3AgYXV0by9saWIvcGNyZS8kbmd4X21ha2VmaWxlICRQQ1JFCiAKLSAgICAgICAgcGNyZT1gZWNobyAkUENSRSB8IHNlZCAtZSAicy9cLy8kbmd4X3JlZ2V4X2RpcnNlcC9nImAKLSAgICAgICAgbGluZT1gZWNobyAkUENSRS9wY3JlLmg6IHwgc2VkIC1lICJzL1wvLyRuZ3hfcmVnZXhfZGlyc2VwL2ciYAorICAgICAgICBuZ3hfcGNyZT1gZWNobyAkUENSRSB8IHNlZCAtZSAicy9cLy8kbmd4X3JlZ2V4X2RpcnNlcC9nImAKIAotICAgICAgICBlY2hvICIkbGluZSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPj4gJE1BS0VGSUxFCi0gICAgICAgIGVjaG8gIgljZCAkcGNyZSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4+ICRNQUtFRklMRQotICAgICAgICBlY2hvICIJXCQoTUFLRSkgLWYgJG1ha2VmaWxlIHBjcmUuaCIgICAgICAgICAgICAgICAgICAgICA+PiAkTUFLRUZJTEUKLSAgICAgICAgZWNobyAiCWNkIC4uXFwuLlxcLi4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPj4gJE1BS0VGSUxFCi0gICAgICAgIGVjaG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PiAkTUFLRUZJTEUKKyAgICAgICAgY2F0IDw8IEVORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPj4gJE5HWF9NQUtFRklMRQogCi0gICAgICAgIGxpbmU9IiRQQ1JFL3BjcmUubGliOgkkUENSRS9wY3JlLmgiCi0gICAgICAgIGxpbmU9YGVjaG8gJGxpbmUgfCBzZWQgLWUgInMvXC8vJG5neF9yZWdleF9kaXJzZXAvZyJgCitgZWNobyAiJFBDUkUvcGNyZS5oOgkkTkdYX01BS0VGSUxFIiB8IHNlZCAtZSAicy9cLy8kbmd4X3JlZ2V4X2RpcnNlcC9nImAKKwljZCAkbmd4X3BjcmUKKwlcJChNQUtFKSAtZiAkbmd4X21ha2VmaWxlIHBjcmUuaAorCWNkIC4uXFwuLlxcLi4KIAotICAgICAgICBlY2hvICIkbGluZSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPj4gJE1BS0VGSUxFCi0gICAgICAgIGVjaG8gIgljZCAkcGNyZSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4+ICRNQUtFRklMRQotICAgICAgICBlY2hvICIJXCQoTUFLRSkgLWYgJG1ha2VmaWxlICRvcHQiICAgICAgICAgICAgICAgICAgICAgICA+PiAkTUFLRUZJTEUKLSAgICAgICAgZWNobyAiCWNkIC4uXFwuLlxcLi4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPj4gJE1BS0VGSUxFCisKK2BlY2hvICIkUENSRS9wY3JlLmxpYjoJJFBDUkUvcGNyZS5oIiB8IHNlZCAtZSAicy9cLy8kbmd4X3JlZ2V4X2RpcnNlcC9nImAKKwljZCAkbmd4X3BjcmUKKwlcJChNQUtFKSAtZiAkbmd4X21ha2VmaWxlICRuZ3hfb3B0CisJY2QgLi5cXC4uXFwuLgorCitFTkQKKwogICAgIDs7CiAKICAgICAqKQotICAgICAgICBQQ1JFX09QVD0iQ0ZMQUdTPVwiJFBDUkVfT1BUXCIiCisgICAgICAgIGNhdCA8PCBFTkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4+ICROR1hfTUFLRUZJTEUKIAotICAgICAgICBlY2hvICIkUENSRS9wY3JlLmg6IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPj4gJE1BS0VGSUxFCi0gICAgICAgIGVjaG8gIgljZCAkUENSRSBcXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4+ICRNQUtFRklMRQotICAgICAgICBlY2hvICIJJiYgQ0M9XCJcJChDQylcIiAkUENSRV9PUFQgXFwiICAgICAgICAgICAgICAgICAgICA+PiAkTUFLRUZJTEUKLSAgICAgICAgZWNobyAiCS4vY29uZmlndXJlIC0tZGlzYWJsZS1zaGFyZWQiICAgICAgICAgICAgICAgICAgICAgPj4gJE1BS0VGSUxFCi0gICAgICAgIGVjaG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PiAkTUFLRUZJTEUKLSAgICAgICAgZWNobyAiJFBDUkUvLmxpYnMvbGlicGNyZS5hOgkkUENSRS9wY3JlLmgiICAgICAgICAgICAgID4+ICRNQUtFRklMRQotICAgICAgICBlY2hvICIJY2QgJFBDUkUgXFwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PiAkTUFLRUZJTEUKLSAgICAgICAgZWNobyAiCSYmIFwkKE1BS0UpIGxpYnBjcmUubGEiICAgICAgICAgICAgICAgICAgICAgICAgICAgPj4gJE1BS0VGSUxFCiskUENSRS9wY3JlLmg6CSROR1hfTUFLRUZJTEUKKwljZCAkUENSRSBcXAorCSYmIGlmIFsgLWYgTWFrZWZpbGUgXTsgdGhlbiBcJChNQUtFKSBkaXN0Y2xlYW47IGZpCisKKwljZCAkUENSRSBcXAorCSYmIENDPSJcJChDQykiIENGTEFHUz0iJFBDUkVfT1BUIiBcXAorCS4vY29uZmlndXJlIC0tZGlzYWJsZS1zaGFyZWQKKworCiskUENSRS8ubGlicy9saWJwY3JlLmE6CSRQQ1JFL3BjcmUuaAorCWNkICRQQ1JFIFxcCisJJiYgXCQoTUFLRSkgbGlicGNyZS5sYQorCitFTkQKKwogICAgIDs7CiAKIGVzYWMKLQotZWNobyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPj4gJE1BS0VGSUxFCmRpZmYgLS1naXQgYS9hdXRvL2xpYi96bGliL21ha2UgYi9hdXRvL2xpYi96bGliL21ha2UKaW5kZXggNTgyMjc2Mi4uMmU1ZWE4NCAxMDA2NDQKLS0tIGEvYXV0by9saWIvemxpYi9tYWtlCisrKyBiL2F1dG8vbGliL3psaWIvbWFrZQpAQCAtMiwzNiArMiwyMiBAQAogIyBDb3B5cmlnaHQgKEMpIElnb3IgU3lzb2V2CiAKIAotY2FzZSAiJENDIiBpbgorY2FzZSAiJE5HWF9DQ19OQU1FIiBpbgogCi0gICAgY2wpCi0gICAgICAgIG1ha2VmaWxlPW1ha2VmaWxlLm1zdmMKLSAgICAgICAgb3B0PSJDUFVfT1BUPSRDUFVfT1BUIExJQkM9JExJQkMiCisgICAgbXN2YyopCisgICAgICAgIG5neF9tYWtlZmlsZT1tYWtlZmlsZS5tc3ZjCisgICAgICAgIG5neF9vcHQ9IkNQVV9PUFQ9JENQVV9PUFQgTElCQz0kTElCQyIKIAogICAgIDs7CiAKLSAgICB3Y2wzODYpCi0gICAgICAgIG1ha2VmaWxlPW1ha2VmaWxlLm93YwotICAgICAgICBvcHQ9IkNQVV9PUFQ9JENQVV9PUFQiCisgICAgb3djKikKKyAgICAgICAgbmd4X21ha2VmaWxlPW1ha2VmaWxlLm93YworICAgICAgICBuZ3hfb3B0PSJDUFVfT1BUPSRDUFVfT1BUIgogICAgIDs7CiAKLSAgICBiY2MzMikKLSAgICAgICAgbWFrZWZpbGU9bWFrZWZpbGUuYmNjCi0gICAgICAgIG9wdD0iLURDUFVfT1BUPSRDUFVfT1BUIgotICAgIDs7Ci0KLWVzYWMKLQotCi1jYXNlICRQTEFURk9STSBpbgotCi0gICAgd2luMzIpCi0gICAgICAgIGxpbmU9YGVjaG8gJFpMSUIvemxpYi5saWI6IHwgc2VkIC1lICJzL1wvLyRuZ3hfcmVnZXhfZGlyc2VwL2ciYAotICAgICAgICBlY2hvICIkbGluZSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPj4gJE1BS0VGSUxFCi0gICAgOzsKLQotICAgICopCi0gICAgICAgIGVjaG8gIiRaTElCL2xpYnouYToiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PiAkTUFLRUZJTEUKKyAgICBiY2MpCisgICAgICAgIG5neF9tYWtlZmlsZT1tYWtlZmlsZS5iY2MKKyAgICAgICAgbmd4X29wdD0iLURDUFVfT1BUPSRDUFVfT1BUIgogICAgIDs7CiAKIGVzYWMKQEAgLTQzLDEyICsyOSwxNiBAQAogY2FzZSAkUExBVEZPUk0gaW4KIAogICAgIHdpbjMyKQotICAgICAgICB6bGliPWBlY2hvICRaTElCIHwgc2VkIC1lICJzL1wvLyRuZ3hfcmVnZXhfZGlyc2VwL2ciYAorICAgICAgICBjcCBhdXRvL2xpYi96bGliLyRuZ3hfbWFrZWZpbGUgJFpMSUIKIAotICAgICAgICBjcCBhdXRvL2xpYi96bGliLyRtYWtlZmlsZSAkWkxJQgotICAgICAgICBlY2hvICIJY2QgJHpsaWIiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PiAkTUFLRUZJTEUKLSAgICAgICAgZWNobyAiCVwkKE1BS0UpIC1mICRtYWtlZmlsZSAkb3B0IiAgICAgICAgICAgICAgICAgICAgICAgPj4gJE1BS0VGSUxFCi0gICAgICAgIGVjaG8gIgljZCAuLlxcLi5cXC4uIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4+ICRNQUtFRklMRQorICAgICAgICBjYXQgPDwgRU5EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PiAkTkdYX01BS0VGSUxFCisKK2BlY2hvICIkWkxJQi96bGliLmxpYjoJJE5HWF9NQUtFRklMRSIgfCBzZWQgLWUgInMvXC8vJG5neF9yZWdleF9kaXJzZXAvZyJgCisJY2QgYGVjaG8gJFpMSUIgfCBzZWQgLWUgInMvXC8vJG5neF9yZWdleF9kaXJzZXAvZyJgCisJXCQoTUFLRSkgLWYgJG5neF9tYWtlZmlsZSAkbmd4X29wdAorCWNkIC4uXFwuLlxcLi4KKworRU5ECiAKICAgICAgICAgZG9uZT1ZRVMKICAgICA7OwpAQCAtNTksMjMgKzQ5LDM1IEBACiAgICAgKjppMzg2IHwgKjppNjg2KQogICAgICAgICBjYXNlICRaTElCX0FTTSBpbgogICAgICAgICAgICAgcGVudGl1bSkKLSAgICAgICAgICAgICAgICBlY2hvICIJY2QgJFpMSUIgXFwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPj4gJE1BS0VGSUxFCi0gICAgICAgICAgICAgICAgZWNobyAiCSYmIGNwIGNvbnRyaWIvYXNtNTg2L21hdGNoLlMgLiBcXCIgICAgICAgID4+ICRNQUtFRklMRQotICAgICAgICAgICAgICAgIGVjaG8gIgkmJiBDRkxBR1M9XCIkWkxJQl9PUFQgLURBU01WXCIgXFwiICAgICAgICA+PiAkTUFLRUZJTEUKLSAgICAgICAgICAgICAgICBlY2hvICIJCUNDPVwiXCQoQ0MpXCIgXFwiICAgICAgICAgICAgICAgICA+PiAkTUFLRUZJTEUKLSAgICAgICAgICAgICAgICBlY2hvICIJCS4vY29uZmlndXJlIFxcIiAgICAgICAgICAgICAgICAgICA+PiAkTUFLRUZJTEUKLSAgICAgICAgICAgICAgICBlY2hvICIJJiYgXCQoTUFLRSkgT0JKQT1tYXRjaC5vIGxpYnouYSIgICAgICAgICAgPj4gJE1BS0VGSUxFCisKKyAgICAgICAgICAgICAgICBjYXQgPDwgRU5EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPj4gJE5HWF9NQUtFRklMRQorCiskWkxJQi9saWJ6LmE6CSROR1hfTUFLRUZJTEUKKwljZCAkWkxJQiBcXAorCSYmIG1ha2UgY2xlYW4gXFwKKwkmJiBjcCBjb250cmliL2FzbTU4Ni9tYXRjaC5TIC4gXFwKKwkmJiBDRkxBR1M9IiRaTElCX09QVCAtREFTTVYiIENDPSJcJChDQykiIFxcCisJCS4vY29uZmlndXJlIFxcCisJJiYgXCQoTUFLRSkgT0JKQT1tYXRjaC5vIGxpYnouYQorCitFTkQKIAogICAgICAgICAgICAgICAgIGRvbmU9WUVTCiAgICAgICAgICAgICA7OwogCiAgICAgICAgICAgICBwZW50aXVtcHJvKQotICAgICAgICAgICAgICAgIGVjaG8gIgljZCAkWkxJQiBcXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PiAkTUFLRUZJTEUKLSAgICAgICAgICAgICAgICBlY2hvICIJJiYgY3AgY29udHJpYi9hc202ODYvbWF0Y2guUyAuIFxcIiAgICAgICAgPj4gJE1BS0VGSUxFCi0gICAgICAgICAgICAgICAgZWNobyAiCSYmIENGTEFHUz1cIiRaTElCX09QVCAtREFTTVZcIiBcXCIgICAgICAgID4+ICRNQUtFRklMRQotICAgICAgICAgICAgICAgIGVjaG8gIgkJQ0M9XCJcJChDQylcIiBcXCIgICAgICAgICAgICAgICAgID4+ICRNQUtFRklMRQotICAgICAgICAgICAgICAgIGVjaG8gIgkJLi9jb25maWd1cmUgXFwiICAgICAgICAgICAgICAgICAgID4+ICRNQUtFRklMRQotICAgICAgICAgICAgICAgIGVjaG8gIgkmJiBcJChNQUtFKSBPQkpBPW1hdGNoLm8gbGliei5hIiAgICAgICAgICA+PiAkTUFLRUZJTEUKKworICAgICAgICAgICAgICAgIGNhdCA8PCBFTkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PiAkTkdYX01BS0VGSUxFCisKKyRaTElCL2xpYnouYToJJE5HWF9NQUtFRklMRQorCWNkICRaTElCIFxcCisJJiYgbWFrZSBjbGVhbiBcXAorCSYmIGNwIGNvbnRyaWIvYXNtNjg2L21hdGNoLlMgLiBcXAorCSYmIENGTEFHUz0iJFpMSUJfT1BUIC1EQVNNViIgQ0M9IlwkKENDKSIgXFwKKwkJLi9jb25maWd1cmUgXFwKKwkmJiBcJChNQUtFKSBPQkpBPW1hdGNoLm8gbGliei5hCisKK0VORAogCiAgICAgICAgICAgICAgICAgZG9uZT1ZRVMKICAgICAgICAgICAgIDs7CkBAIC05NywxMSArOTksMTYgQEAKIAogCiBpZiBbICRkb25lID0gTk8gXTsgdGhlbgotICAgIGVjaG8gIgljZCAkWkxJQiBcXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4+ICRNQUtFRklMRQotICAgIGVjaG8gIgkmJiBDRkxBR1M9XCIkWkxJQl9PUFRcIiBDQz1cIlwkKENDKVwiIFxcIiAgICAgICAgID4+ICRNQUtFRklMRQotICAgIGVjaG8gIgkJLi9jb25maWd1cmUgXFwiICAgICAgICAgICAgICAgICAgICAgICAgICAgPj4gJE1BS0VGSUxFCi0gICAgZWNobyAiCSYmIFwkKE1BS0UpIGxpYnouYSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPj4gJE1BS0VGSUxFCisKKyAgICBjYXQgPDwgRU5EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPj4gJE5HWF9NQUtFRklMRQorCiskWkxJQi9saWJ6LmE6CSROR1hfTUFLRUZJTEUKKwljZCAkWkxJQiBcXAorCSYmIG1ha2UgY2xlYW4gXFwKKwkmJiBDRkxBR1M9IiRaTElCX09QVCIgQ0M9IlwkKENDKSIgXFwKKwkJLi9jb25maWd1cmUgXFwKKwkmJiBcJChNQUtFKSBsaWJ6LmEKKworRU5ECisKIGZpCi0KLQotZWNobyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPj4gJE1BS0VGSUxFCmRpZmYgLS1naXQgYS9hdXRvL21ha2UgYi9hdXRvL21ha2UKaW5kZXggYzE2NTA3OC4uNTVmMzZjOSAxMDA2NDQKLS0tIGEvYXV0by9tYWtlCisrKyBiL2F1dG8vbWFrZQpAQCAtMTIsNyArMTIsNyBAQAogbmd4X3VzZV9wY2g9YGVjaG8gJE5HWF9VU0VfUENIIHwgc2VkIC1lICJzL1wvLyRuZ3hfcmVnZXhfZGlyc2VwL2ciYAogCiAKLWNhdCA8PCBFTkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPj4gJE5HWF9NQUtFRklMRQorY2F0IDw8IEVORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPiAkTkdYX01BS0VGSUxFCiAKIENDID0JJENDCiBDRkxBR1MgPSAkQ0ZMQUdTCkBAIC00OSw3ICs0OSw3IEBACiAKICMgdGhlIGNvcmUgZGVwZW5kZW5jZXMgYW5kIGluY2x1ZGUgcGF0aGVzCiAKLW5neF9kZXBzPWBlY2hvICRDT1JFX0RFUFMgJE5HWF9QQ0ggXAorbmd4X2RlcHM9YGVjaG8gJENPUkVfREVQUyAkTkdYX0FVVE9fQ09ORklHX0ggJE5HWF9QQ0ggXAogICAgIHwgc2VkIC1lICJzLyAgKlwoW14gXVteIF0qXCkvJG5neF9yZWdleF9jb250XDEvZyIgXAogICAgICAgICAgIC1lICJzL1wvLyRuZ3hfcmVnZXhfZGlyc2VwL2ciYAogCmRpZmYgLS1naXQgYS9hdXRvL21vZHVsZXMgYi9hdXRvL21vZHVsZXMKaW5kZXggMzlkZmE5ZC4uZTlhNDJlMyAxMDA2NDQKLS0tIGEvYXV0by9tb2R1bGVzCisrKyBiL2F1dG8vbW9kdWxlcwpAQCAtNyw2ICs3LDcgQEAKIGZpCiAKIGlmIFsgJEVWRU5UX1NFTEVDVCA9IFlFUyBdOyB0aGVuCisgICAgaGF2ZT1IQVZFX1NFTEVDVCAuIGF1dG8vaGF2ZQogICAgIENPUkVfU1JDUz0iJENPUkVfU1JDUyAkU0VMRUNUX1NSQ1MiCiAgICAgRVZFTlRfTU9EVUxFUz0iJEVWRU5UX01PRFVMRVMgJFNFTEVDVF9NT0RVTEUiCiBmaQpAQCAtMTcsNiArMTgsNyBAQAogZmkKIAogaWYgWyAkRVZFTlRfUE9MTCA9IFlFUyBdOyB0aGVuCisgICAgaGF2ZT1IQVZFX1BPTEwgLiBhdXRvL2hhdmUKICAgICBDT1JFX1NSQ1M9IiRDT1JFX1NSQ1MgJFBPTExfU1JDUyIKICAgICBFVkVOVF9NT0RVTEVTPSIkRVZFTlRfTU9EVUxFUyAkUE9MTF9NT0RVTEUiCiBmaQpkaWZmIC0tZ2l0IGEvYXV0by9vcHRpb25zIGIvYXV0by9vcHRpb25zCmluZGV4IDcyZTViMzYuLjA2NDg4YzggMTAwNjQ0Ci0tLSBhL2F1dG8vb3B0aW9ucworKysgYi9hdXRvL29wdGlvbnMKQEAgLTUyLDYgKzUyLDggQEAKIAogSU1BUD1OTwogCitNT0RVTEVTPQorCiBVU0VfUENSRT1OTwogUENSRT1OT05FCiBQQ1JFX09QVD0KQEAgLTExOCw2ICsxMjAsOCBAQAogCiAgICAgICAgIC0td2l0aC1pbWFwKSAgICAgICAgICAgICAgICAgICAgIElNQVA9WUVTICAgICAgICAgICAgICAgICAgIDs7CiAKKyAgICAgICAgLS13aXRoLW1vZHVsZT0qKSAgICAgICAgICAgICAgICAgTkdYX01PRFVMRVM9IiROR1hfTU9EVUxFUyAkdmFsdWVzIiA7OworCiAgICAgICAgIC0td2l0aC1jYz0qKSAgICAgICAgICAgICAgICAgICAgIENDPSIkdmFsdWUiICAgICAgICAgICAgICAgIDs7CiAgICAgICAgIC0td2l0aC1jcHA9KikgICAgICAgICAgICAgICAgICAgIENQUD0iJHZhbHVlIiAgICAgICAgICAgICAgIDs7CiAgICAgICAgIC0td2l0aC1jYy1vcHQ9KikgICAgICAgICAgICAgICAgIE5HWF9DQ19PUFQ9IiR2YWx1ZSIgICAgICAgIDs7CmRpZmYgLS1naXQgYS9hdXRvL29zL2ZyZWVic2QgYi9hdXRvL29zL2ZyZWVic2QKaW5kZXggZjA4ZWY5Ny4uYmEyZTE4OCAxMDA2NDQKLS0tIGEvYXV0by9vcy9mcmVlYnNkCisrKyBiL2F1dG8vb3MvZnJlZWJzZApAQCAtOTcsOSArOTcsMjAgQEAKIAogCiBpZiBbICRFVkVOVF9BSU8gPSBZRVMgXTsgdGhlbgotICAgIGhhdmU9SEFWRV9BSU8gLiBhdXRvL2hhdmUKLSAgICBFVkVOVF9NT0RVTEVTPSIkRVZFTlRfTU9EVUxFUyAkQUlPX01PRFVMRSIKLSAgICBDT1JFX1NSQ1M9IiRDT1JFX1NSQ1MgJEFJT19TUkNTIgotZWxzZQotICAgIGhhdmU9SEFWRV9BSU8gLiBhdXRvL25vaGF2ZQorICAgIGlmIFsgXCggJHZlcnNpb24gLWx0IDUwMDAwMCAtYSAkdmVyc2lvbiAtZ2UgNDMwMDAwIFwpIFwKKyAgICAgICAgIC1vICR2ZXJzaW9uIC1nZSA1MDAwMTQgXQorICAgIHRoZW4KKyAgICAgICAgaGF2ZT1IQVZFX0FJTyAuIGF1dG8vaGF2ZQorICAgICAgICBFVkVOVF9NT0RVTEVTPSIkRVZFTlRfTU9EVUxFUyAkQUlPX01PRFVMRSIKKyAgICAgICAgQ09SRV9TUkNTPSIkQ09SRV9TUkNTICRBSU9fU1JDUyIKKyAgICBlbHNlCisKK2NhdCA8PCBFTkQKKworJDA6IGVycm9yOiB0aGUga3F1ZXVlIGRvZXMgbm90IHN1cHBvcnQgQUlPIG9uIHRoaXMgRnJlZUJTRCB2ZXJzaW9uCisKK0VORAorCisgICAgICAgIGV4aXQgMQorICAgIGZpCiBmaQpkaWZmIC0tZ2l0IGEvYXV0by9vcy9saW51eCBiL2F1dG8vb3MvbGludXgKaW5kZXggODUxOGM2MS4uZTRjYmQ2ZCAxMDA2NDQKLS0tIGEvYXV0by9vcy9saW51eAorKysgYi9hdXRvL29zL2xpbnV4CkBAIC00OCw3ICs0OCw3IEBACiAKIG5neF9mZWF0dXJlPSJlcG9sbCIKIG5neF9mZWF0dXJlX25hbWU9ImVwb2xsIgotbmd4X2ZlYXR1cmVfcnVuPXllcworbmd4X2ZlYXR1cmVfcnVuPW5vCiBuZ3hfZmVhdHVyZV9pbmNzPSIjaW5jbHVkZSA8c3lzL2Vwb2xsLmg+Igogbmd4X2ZlYXR1cmVfbGlicz0KIG5neF9mZWF0dXJlX3Rlc3Q9ImludCBlZmQgPSAwLCBmZCA9IDEsIG47CmRpZmYgLS1naXQgYS9hdXRvL3VuaXggYi9hdXRvL3VuaXgKaW5kZXggYWY5ZWUwMS4uZjBlN2YyZSAxMDA3NTUKLS0tIGEvYXV0by91bml4CisrKyBiL2F1dG8vdW5peApAQCAtNzMsNiArNzMsMTUgQEAKICMgc3lzY2FsbHMsIGxpYmMgY2FsbHMgYW5kIHNvbWUgZmVhdHVyZXMKIAogCituZ3hfZmVhdHVyZT0ic2V0cHJvY3RpdGxlKCkiCituZ3hfZmVhdHVyZV9uYW1lPSJIQVZFX1NFVFBST0NUSVRMRSIKK25neF9mZWF0dXJlX3J1bj1ubworbmd4X2ZlYXR1cmVfaW5jcz0KK25neF9mZWF0dXJlX2xpYnM9CituZ3hfZmVhdHVyZV90ZXN0PSJzZXRwcm9jdGl0bGUoXCJ0ZXN0XCIpOyIKKy4gYXV0by9mZWF0dXJlCisKKwogbmd4X2ZlYXR1cmU9InByZWFkKCkiCiBuZ3hfZmVhdHVyZV9uYW1lPSJwcmVhZCIKIG5neF9mZWF0dXJlX3J1bj1ubwpkaWZmIC0tZ2l0IGEvZG9jcy94bWwvbmdpbngvY2hhbmdlcy54bWwgYi9kb2NzL3htbC9uZ2lueC9jaGFuZ2VzLnhtbAppbmRleCBhODI1N2JmLi40M2ZkYTg4IDEwMDY0NAotLS0gYS9kb2NzL3htbC9uZ2lueC9jaGFuZ2VzLnhtbAorKysgYi9kb2NzL3htbC9uZ2lueC9jaGFuZ2VzLnhtbApAQCAtNiwxOCArNiw1MCBAQAogICAgICAgICAgICAgdGl0bGU9Im5naW54Ij4KIAogCis8Y2hhbmdlcyB2ZXI9IjAuMS44IiBkYXRlPSIyMC4xMS4yMDA0Ij4KKworPGNoYW5nZSB0eXBlPSJidWdmaXgiPgorPHBhcmEgbGFuZz0icnUiPgorz9vJwsvBINcgzc/E1czFIG5neF9odHRwX2F1dG9pbmRleF9tb2R1bGUg0NLJINDPy8HaxSDEzMnOztnIIMnNo84gxsHKzM/XLgorPC9wYXJhPgorPHBhcmEgbGFuZz0iZW4iPgoraW4gdGhlIG5neF9odHRwX2F1dG9pbmRleF9tb2R1bGUgaWYgdGhlIGxvbmcgZmlsZSBuYW1lcyB3ZXJlIGluIHRoZSBsaXN0aW5nLgorPC9wYXJhPgorPC9jaGFuZ2U+CisKKzxjaGFuZ2UgdHlwZT0iZmVhdHVyZSI+Cis8cGFyYSBsYW5nPSJydSI+CivNz8TJxsnLwdTP0iAiXn4iINcgxMnSxcvUydfFIGxvY2F0aW9uLgorPC9wYXJhPgorPHBhcmEgbGFuZz0iZW4iPgordGhlICJefiIgbW9kaWZpZXIgaW4gdGhlIGxvY2F0aW9uIGRpcmVjdGl2ZS4KKzwvcGFyYT4KKzwvY2hhbmdlPgorCis8Y2hhbmdlIHR5cGU9ImZlYXR1cmUiPgorPHBhcmEgbGFuZz0icnUiPgorxMnSxcvUydfBIHByb3h5X21heF90ZW1wX2ZpbGVfc2l6ZS4KKzwvcGFyYT4KKzxwYXJhIGxhbmc9ImVuIj4KK3RoZSBwcm94eV9tYXhfdGVtcF9maWxlX3NpemUgZGlyZWN0aXZlLgorPC9wYXJhPgorPC9jaGFuZ2U+CisKKzwvY2hhbmdlcz4KKworCiA8Y2hhbmdlcyB2ZXI9IjAuMS43IiBkYXRlPSIxMi4xMS4yMDA0Ij4KIAogPGNoYW5nZSB0eXBlPSJidWdmaXgiPgogPHBhcmEgbGFuZz0icnUiPgog0NLJIMnT0M/M2NrP18HOyckgc2VuZGZpbGUsIMXTzMkg0MXSxcTB18HFzdnKIMbByswgzcXO0czT0Swg1M8gzc/HCiDQ0s/J2s/K1Mkgc2VnbWVudGF0aW9uIGZhdWx0IM7BIEZyZWVCU0Q7Ci3P28nCy8Eg0M/R18nMwdPYINcgMC4xLjIuCivP28nCy8Eg0M/R18nMwdPYINcgMC4xLjUuCiA8L3BhcmE+CiA8cGFyYSBsYW5nPSJlbiI+CiBvbiBGcmVlQlNEIHRoZSBzZWdtZW50YXRpb24gZmF1bHQgbWF5IG9jY3VyZSBpZiB0aGUgc2l6ZSBvZiB0aGUgdHJhbnNmZXJyZWQKIGZpbGUgd2FzIGNoYW5nZWQ7Ci1idWcgYXBwZWFyZWQgaW4gMC4xLjIuCitidWcgYXBwZWFyZWQgaW4gMC4xLjUuCiA8L3BhcmE+CiA8L2NoYW5nZT4KIApkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmdpbnguaCBiL3NyYy9jb3JlL25naW54LmgKaW5kZXggNTI5YzQzZC4uNWYyMzM5YiAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbmdpbnguaAorKysgYi9zcmMvY29yZS9uZ2lueC5oCkBAIC04LDcgKzgsNyBAQAogI2RlZmluZSBfTkdJTlhfSF9JTkNMVURFRF8KIAogCi0jZGVmaW5lIE5HSU5YX1ZFUiAgICAgICAgICAibmdpbngvMC4xLjciCisjZGVmaW5lIE5HSU5YX1ZFUiAgICAgICAgICAibmdpbngvMC4xLjgiCiAKICNkZWZpbmUgTkdJTlhfVkFSICAgICAgICAgICJOR0lOWCIKICNkZWZpbmUgTkdYX05FV1BJRF9FWFQgICAgICIubmV3YmluIgpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmd4X2FycmF5LmggYi9zcmMvY29yZS9uZ3hfYXJyYXkuaAppbmRleCA4MjYzOTVkLi45MzFjN2ZiIDEwMDY0NAotLS0gYS9zcmMvY29yZS9uZ3hfYXJyYXkuaAorKysgYi9zcmMvY29yZS9uZ3hfYXJyYXkuaApAQCAtMjYsNyArMjYsNyBAQAogdm9pZCAqbmd4X3B1c2hfYXJyYXkobmd4X2FycmF5X3QgKmEpOwogCiAKLW5neF9pbmxpbmUgc3RhdGljIG5neF9pbnRfdCBuZ3hfYXJyYXlfaW5pdChuZ3hfYXJyYXlfdCAqYXJyYXksIG5neF9wb29sX3QgKnBvb2wsCitzdGF0aWMgbmd4X2lubGluZSBuZ3hfaW50X3Qgbmd4X2FycmF5X2luaXQobmd4X2FycmF5X3QgKmFycmF5LCBuZ3hfcG9vbF90ICpwb29sLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF91aW50X3Qgbiwgc2l6ZV90IHNpemUpCiB7CiAgICAgaWYgKCEoYXJyYXktPmVsdHMgPSBuZ3hfcGFsbG9jKHBvb2wsIG4gKiBzaXplKSkpIHsKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25neF9jb25maWcuaCBiL3NyYy9jb3JlL25neF9jb25maWcuaAppbmRleCA5ZmFmMDBhLi40M2ZkOTg1IDEwMDY0NAotLS0gYS9zcmMvY29yZS9uZ3hfY29uZmlnLmgKKysrIGIvc3JjL2NvcmUvbmd4X2NvbmZpZy5oCkBAIC0xMDksNyArMTA5LDcgQEAKIAogLyogVE9ETzogYXV0b19jb25mOiBuZ3hfaW5saW5lICAgaW5saW5lIF9faW5saW5lIF9faW5saW5lX18gKi8KICNpZm5kZWYgbmd4X2lubGluZQotI2RlZmluZSBuZ3hfaW5saW5lICAgaW5saW5lCisjZGVmaW5lIG5neF9pbmxpbmUgICBfX2lubGluZQogI2VuZGlmCiAKICNkZWZpbmUgTkdYX0FDQ0VQVF9USFJFU0hPTEQgICAxMDAKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25neF9jb25uZWN0aW9uLmMgYi9zcmMvY29yZS9uZ3hfY29ubmVjdGlvbi5jCmluZGV4IDA2ZmQ4NWMuLjYzMWNkNGYgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL25neF9jb25uZWN0aW9uLmMKKysrIGIvc3JjL2NvcmUvbmd4X2Nvbm5lY3Rpb24uYwpAQCAtMjk5LDcgKzI5OSw3IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBpZiAobmd4X2Nsb3NlX3NvY2tldChsc1tpXS5mZCkgPT0gLTEpIHsKKyAgICAgICAgaWYgKG5neF9jbG9zZV9zb2NrZXQoZmQpID09IC0xKSB7CiAgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfRU1FUkcsIGN5Y2xlLT5sb2csIG5neF9zb2NrZXRfZXJybm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9jbG9zZV9zb2NrZXRfbiAiICVWIGZhaWxlZCIsICZsc1tpXS5hZGRyX3RleHQpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9zcmMvY29yZS9uZ3hfY3JjLmggYi9zcmMvY29yZS9uZ3hfY3JjLmgKaW5kZXggYjc4ZjQ3OS4uNzNmNGNkZCAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbmd4X2NyYy5oCisrKyBiL3NyYy9jb3JlL25neF9jcmMuaApAQCAtMTAsNyArMTAsNyBAQAogCiAvKiAzMi1iaXQgY3JjMTYgKi8KIAotbmd4X2lubGluZSBzdGF0aWMgdWludDMyX3Qgbmd4X2NyYyhjaGFyICpkYXRhLCBzaXplX3QgbGVuKQorc3RhdGljIG5neF9pbmxpbmUgdWludDMyX3Qgbmd4X2NyYyhjaGFyICpkYXRhLCBzaXplX3QgbGVuKQogewogICAgIHVpbnQzMl90ICBzdW07CiAKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25neF9jeWNsZS5jIGIvc3JjL2NvcmUvbmd4X2N5Y2xlLmMKaW5kZXggODVkOTQ1OC4uZDkxYmE4NSAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbmd4X2N5Y2xlLmMKKysrIGIvc3JjL2NvcmUvbmd4X2N5Y2xlLmMKQEAgLTQ5LDYgKzQ5LDggQEAKICAgICBuZ3hfbGlzdF9wYXJ0X3QgICAgKnBhcnQ7CiAgICAgbmd4X29wZW5fZmlsZV90ICAgICpmaWxlOwogICAgIG5neF9saXN0ZW5pbmdfdCAgICAqbHMsICpubHM7CisgICAgbmd4X2NvcmVfY29uZl90ICAgICpjY2Y7CisgICAgbmd4X2V2ZW50X2NvbmZfdCAgICplY2Y7CiAgICAgbmd4X2NvcmVfbW9kdWxlX3QgICptb2R1bGU7CiAKICAgICBsb2cgPSBvbGRfY3ljbGUtPmxvZzsKQEAgLTIwNCw2ICsyMDYsMTYgQEAKIAogCiAgICAgaWYgKCFmYWlsZWQpIHsKKyAgICAgICAgIGNjZiA9IChuZ3hfY29yZV9jb25mX3QgKikgbmd4X2dldF9jb25mKGN5Y2xlLT5jb25mX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9jb3JlX21vZHVsZSk7CisKKyAgICAgICAgaWYgKG5neF9jcmVhdGVfcGF0aGVzKGN5Y2xlLCBjY2YtPnVzZXIpID09IE5HWF9FUlJPUikgeworICAgICAgICAgICAgZmFpbGVkID0gMTsKKyAgICAgICAgfQorICAgIH0KKworCisgICAgaWYgKCFmYWlsZWQpIHsKIAogICAgICAgICAvKiBvcGVuIHRoZSBuZXcgZmlsZXMgKi8KIApAQCAtNDIxLDYgKzQzMywxMyBAQAogICAgICAgICB9CiAgICAgfQogCisKKyAgICBlY2YgPSBuZ3hfZXZlbnRfZ2V0X2NvbmYoY3ljbGUtPmNvbmZfY3R4LCBuZ3hfZXZlbnRfY29yZV9tb2R1bGUpOworCisgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0lORk8sIGN5Y2xlLT5sb2csIDAsCisgICAgICAgICAgICAgICAgICAidXNpbmcgdGhlIFwiJXNcIiBldmVudCBtZXRob2QiLCBlY2YtPm5hbWUpOworCisKICAgICAvKiBjbG9zZSBhbmQgZGVsZXRlIHN0dWZmIHRoYXQgbGVmdHMgZnJvbSBhbiBvbGQgY3ljbGUgKi8KIAogICAgIC8qIGNsb3NlIHRoZSB1bm5lZWRlZCBsaXN0ZW5pbmcgc29ja2V0cyAqLwpAQCAtNjk3LDE2ICs3MTYsNiBAQAogICAgICAgICB9CiAjZWxzZQogICAgICAgICBpZiAodXNlciAhPSAobmd4X3VpZF90KSAtMSkgewotICAgICAgICAgICAgaWYgKGNob3duKChjb25zdCBjaGFyICopIGZpbGVbaV0ubmFtZS5kYXRhLCB1c2VyLCAtMSkgPT0gLTEpIHsKLSAgICAgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfRU1FUkcsIGN5Y2xlLT5sb2csIG5neF9lcnJubywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjaG93biBcIiVzXCIgZmFpbGVkIiwgZmlsZVtpXS5uYW1lLmRhdGEpOwotCi0gICAgICAgICAgICAgICAgaWYgKG5neF9jbG9zZV9maWxlKGZkKSA9PSBOR1hfRklMRV9FUlJPUikgewotICAgICAgICAgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfRU1FUkcsIGN5Y2xlLT5sb2csIG5neF9lcnJubywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfY2xvc2VfZmlsZV9uICIgXCIlc1wiIGZhaWxlZCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZVtpXS5uYW1lLmRhdGEpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKG5neF9maWxlX2luZm8oKGNvbnN0IGNoYXIgKikgZmlsZVtpXS5uYW1lLmRhdGEsICZmaSkgPT0gLTEpIHsKICAgICAgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfRU1FUkcsIGN5Y2xlLT5sb2csIG5neF9lcnJubywKQEAgLTcyMCwxNCArNzI5LDI3IEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCisgICAgICAgICAgICBpZiAoZmkuc3RfdWlkICE9IHVzZXIpIHsKKyAgICAgICAgICAgICAgICBpZiAoY2hvd24oKGNvbnN0IGNoYXIgKikgZmlsZVtpXS5uYW1lLmRhdGEsIHVzZXIsIC0xKSA9PSAtMSkgeworICAgICAgICAgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfRU1FUkcsIGN5Y2xlLT5sb2csIG5neF9lcnJubywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2hvd24oXCIlc1wiLCAlZCkgZmFpbGVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlW2ldLm5hbWUuZGF0YSwgdXNlcik7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5neF9jbG9zZV9maWxlKGZkKSA9PSBOR1hfRklMRV9FUlJPUikgeworICAgICAgICAgICAgICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0VNRVJHLCBjeWNsZS0+bG9nLCBuZ3hfZXJybm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9jbG9zZV9maWxlX24gIiBcIiVzXCIgZmFpbGVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZVtpXS5uYW1lLmRhdGEpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBpZiAoKGZpLnN0X21vZGUgJiAoU19JUlVTUnxTX0lXVVNSKSkgIT0gKFNfSVJVU1J8U19JV1VTUikpIHsKIAogICAgICAgICAgICAgICAgIGZpLnN0X21vZGUgfD0gKFNfSVJVU1J8U19JV1VTUik7CiAKICAgICAgICAgICAgICAgICBpZiAoY2htb2QoKGNvbnN0IGNoYXIgKikgZmlsZVtpXS5uYW1lLmRhdGEsIGZpLnN0X21vZGUpID09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19FTUVSRywgY3ljbGUtPmxvZywgbmd4X2Vycm5vLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjaG1vZCBcIiVzXCIgZmFpbGVkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlW2ldLm5hbWUuZGF0YSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNobW9kKCkgXCIlc1wiIGZhaWxlZCIsIGZpbGVbaV0ubmFtZS5kYXRhKTsKIAogICAgICAgICAgICAgICAgICAgICBpZiAobmd4X2Nsb3NlX2ZpbGUoZmQpID09IE5HWF9GSUxFX0VSUk9SKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfRU1FUkcsIGN5Y2xlLT5sb2csIG5neF9lcnJubywKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25neF9maWxlLmMgYi9zcmMvY29yZS9uZ3hfZmlsZS5jCmluZGV4IDhlMWVkYmQuLjA4ZDlhYmEgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL25neF9maWxlLmMKKysrIGIvc3JjL2NvcmUvbmd4X2ZpbGUuYwpAQCAtMTIsOSArMTIsOSBAQAogc3RhdGljIG5neF91aW50X3Qgbmd4X3JhbmRvbTsKIAogCi1pbnQgbmd4X3dyaXRlX2NoYWluX3RvX3RlbXBfZmlsZShuZ3hfdGVtcF9maWxlX3QgKnRmLCBuZ3hfY2hhaW5fdCAqY2hhaW4pCitzc2l6ZV90IG5neF93cml0ZV9jaGFpbl90b190ZW1wX2ZpbGUobmd4X3RlbXBfZmlsZV90ICp0Ziwgbmd4X2NoYWluX3QgKmNoYWluKQogewotICAgIGludCAgcmM7CisgICAgbmd4X2ludF90ICByYzsKIAogICAgIGlmICh0Zi0+ZmlsZS5mZCA9PSBOR1hfSU5WQUxJRF9GSUxFKSB7CiAgICAgICAgIHJjID0gbmd4X2NyZWF0ZV90ZW1wX2ZpbGUoJnRmLT5maWxlLCB0Zi0+cGF0aCwgdGYtPnBvb2wsCkBAIC0zMywxNiArMzMsMTcgQEAKIH0KIAogCi1pbnQgbmd4X2NyZWF0ZV90ZW1wX2ZpbGUobmd4X2ZpbGVfdCAqZmlsZSwgbmd4X3BhdGhfdCAqcGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfcG9vbF90ICpwb29sLCBpbnQgcGVyc2lzdGVudCkKK25neF9pbnRfdCBuZ3hfY3JlYXRlX3RlbXBfZmlsZShuZ3hfZmlsZV90ICpmaWxlLCBuZ3hfcGF0aF90ICpwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9wb29sX3QgKnBvb2wsIGludCBwZXJzaXN0ZW50KQogewotICAgIGludCAgICAgICAgbnVtOwotICAgIG5neF9lcnJfdCAgZXJyOworICAgIG5neF9lcnJfdCAgIGVycjsKKyAgICB1aW50MzJfdCAgICBudW07CiAKICAgICBmaWxlLT5uYW1lLmxlbiA9IHBhdGgtPm5hbWUubGVuICsgMSArIHBhdGgtPmxlbiArIDEwOwogCi0gICAgbmd4X3Rlc3RfbnVsbChmaWxlLT5uYW1lLmRhdGEsIG5neF9wYWxsb2MocG9vbCwgZmlsZS0+bmFtZS5sZW4gKyAxKSwKLSAgICAgICAgICAgICAgICAgIE5HWF9FUlJPUik7CisgICAgaWYgKCEoZmlsZS0+bmFtZS5kYXRhID0gbmd4X3BhbGxvYyhwb29sLCBmaWxlLT5uYW1lLmxlbiArIDEpKSkgeworICAgICAgICByZXR1cm4gTkdYX0VSUk9SOworICAgIH0KIAogI2lmIDAKICAgICBmb3IgKGkgPSAwOyBpIDwgZmlsZS0+bmFtZS5sZW47IGkrKykgewpAQCAtNTIsMTEgKzUzLDExIEBACiAKICAgICBuZ3hfbWVtY3B5KGZpbGUtPm5hbWUuZGF0YSwgcGF0aC0+bmFtZS5kYXRhLCBwYXRoLT5uYW1lLmxlbik7CiAKLSAgICBudW0gPSBuZ3hfbmV4dF90ZW1wX251bWJlcigwKTsKKyAgICBudW0gPSAodWludDMyX3QpIG5neF9uZXh0X3RlbXBfbnVtYmVyKDApOwogCiAgICAgZm9yICggOzsgKSB7CiAgICAgICAgIG5neF9zcHJpbnRmKGZpbGUtPm5hbWUuZGF0YSArIHBhdGgtPm5hbWUubGVuICsgMSArIHBhdGgtPmxlbiwKLSAgICAgICAgICAgICAgICAgICAgIiUwMTB1ZCVaIiwgbnVtKTsKKyAgICAgICAgICAgICAgICAgICAgIiUwMTB1aSVaIiwgbnVtKTsKIAogICAgICAgICBuZ3hfY3JlYXRlX2hhc2hlZF9maWxlbmFtZShmaWxlLCBwYXRoKTsKIApAQCAtODUsNyArODYsOCBAQAogI2lmIChOR1hfV0lOMzIpCiAgICAgICAgICAgICAgICAgJiYgZXJyICE9IE5HWF9FTk9URElSCiAjZW5kaWYKLSAgICAgICAgKSkgeworICAgICAgICAgICAgKSkKKyAgICAgICAgewogICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0NSSVQsIGZpbGUtPmxvZywgZXJyLAogICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfb3Blbl90ZW1wZmlsZV9uICIgXCIlc1wiIGZhaWxlZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUtPm5hbWUuZGF0YSk7CkBAIC0xMDEsOCArMTAzLDcgQEAKIAogdm9pZCBuZ3hfY3JlYXRlX2hhc2hlZF9maWxlbmFtZShuZ3hfZmlsZV90ICpmaWxlLCBuZ3hfcGF0aF90ICpwYXRoKQogewotICAgIGludCAgICAgaSwgbmFtZSwgcG9zOwotICAgIHNpemVfdCAgbGV2ZWw7CisgICAgbmd4X3VpbnRfdCAgaSwgbmFtZSwgcG9zLCBsZXZlbDsKIAogICAgIG5hbWUgPSBmaWxlLT5uYW1lLmxlbjsKICAgICBwb3MgPSBwYXRoLT5uYW1lLmxlbiArIDE7CkBAIC0xMjcsNyArMTI4LDcgQEAKIH0KIAogCi1pbnQgbmd4X2NyZWF0ZV9wYXRoKG5neF9maWxlX3QgKmZpbGUsIG5neF9wYXRoX3QgKnBhdGgpCituZ3hfaW50X3Qgbmd4X2NyZWF0ZV9wYXRoKG5neF9maWxlX3QgKmZpbGUsIG5neF9wYXRoX3QgKnBhdGgpCiB7CiAgICAgaW50ICAgICAgICBpLCBwb3M7CiAgICAgbmd4X2Vycl90ICBlcnI7CkBAIC0xODksMzIgKzE5MCwyOCBAQAogewogICAgIGNoYXIgICpwID0gY29uZjsKIAotICAgIG5neF9pbnRfdCAgICBsZXZlbDsKKyAgICBzc2l6ZV90ICAgICAgbGV2ZWw7CiAgICAgbmd4X3VpbnRfdCAgIGksIG47CiAgICAgbmd4X3N0cl90ICAgKnZhbHVlOwotICAgIG5neF9wYXRoX3QgICpwYXRoLCAqKnBwOworICAgIG5neF9wYXRoX3QgICpwYXRoLCAqKnBwLCAqKnNsb3Q7CiAKLSAgICBwcCA9IChuZ3hfcGF0aF90ICoqKSAocCArIGNtZC0+b2Zmc2V0KTsKKyAgICBzbG90ID0gKG5neF9wYXRoX3QgKiopIChwICsgY21kLT5vZmZzZXQpOwogCi0gICAgaWYgKCpwcCkgeworICAgIGlmICgqc2xvdCkgewogICAgICAgICByZXR1cm4gImlzIGR1cGxpY2F0ZSI7CiAgICAgfQogCi0gICAgLyogVE9ETzogY2hlY2sgZHVwbGljYXRlIGluIGNmLT5jeWNsZS0+cGF0aGVzICovCisgICAgaWYgKCEocGF0aCA9IG5neF9wY2FsbG9jKGNmLT5wb29sLCBzaXplb2Yobmd4X3BhdGhfdCkpKSkgeworICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7CisgICAgfQogCi0gICAgbmd4X3Rlc3RfbnVsbChwYXRoLCBuZ3hfcGNhbGxvYyhjZi0+cG9vbCwgc2l6ZW9mKG5neF9wYXRoX3QpKSwKLSAgICAgICAgICAgICAgICAgIE5HWF9DT05GX0VSUk9SKTsKLQotICAgICpwcCA9IHBhdGg7Ci0KLSAgICBuZ3hfdGVzdF9udWxsKHBwLCBuZ3hfcHVzaF9hcnJheSgmY2YtPmN5Y2xlLT5wYXRoZXMpLCBOR1hfQ09ORl9FUlJPUik7Ci0gICAgKnBwID0gcGF0aDsKLQotICAgIHZhbHVlID0gKG5neF9zdHJfdCAqKSBjZi0+YXJncy0+ZWx0czsKKyAgICB2YWx1ZSA9IGNmLT5hcmdzLT5lbHRzOwogCiAgICAgcGF0aC0+bmFtZSA9IHZhbHVlWzFdOwotCiAgICAgcGF0aC0+bGVuID0gMDsKKyAgICBwYXRoLT5nY19oYW5kbGVyID0gKG5neF9nY19oYW5kbGVyX3B0KSBjbWQtPnBvc3Q7CisgICAgcGF0aC0+Y29uZl9maWxlID0gY2YtPmNvbmZfZmlsZS0+ZmlsZS5uYW1lLmRhdGE7CisgICAgcGF0aC0+bGluZSA9IGNmLT5jb25mX2ZpbGUtPmxpbmU7CiAKICAgICBmb3IgKGkgPSAwLCBuID0gMjsgbiA8IGNmLT5hcmdzLT5uZWx0czsgaSsrLCBuKyspIHsKICAgICAgICAgbGV2ZWwgPSBuZ3hfYXRvaSh2YWx1ZVtuXS5kYXRhLCB2YWx1ZVtuXS5sZW4pOwpAQCAtMjMwLDcgKzIyNywxMDIgQEAKICAgICAgICAgcGF0aC0+bGV2ZWxbaSsrXSA9IDA7CiAgICAgfQogCi0gICAgcGF0aC0+Z2NfaGFuZGxlciA9IChuZ3hfZ2NfaGFuZGxlcl9wdCkgY21kLT5wb3N0OworCisgICAgcHAgPSBjZi0+Y3ljbGUtPnBhdGhlcy5lbHRzOworICAgIGZvciAoaSA9IDA7IGkgPCBjZi0+Y3ljbGUtPnBhdGhlcy5uZWx0czsgaSsrKSB7CisgICAgICAgIGlmIChwcFtpXS0+bmFtZS5sZW4gPT0gcGF0aC0+bmFtZS5sZW4KKyAgICAgICAgICAgICYmIG5neF9zdHJjbXAocHBbaV0tPm5hbWUuZGF0YSwgcGF0aC0+bmFtZS5kYXRhKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKG4gPSAwOyBuIDwgMzsgbisrKSB7CisgICAgICAgICAgICAgICAgaWYgKHBwW2ldLT5sZXZlbFtuXSAhPSBwYXRoLT5sZXZlbFtuXSkgeworICAgICAgICAgICAgICAgICAgICBuZ3hfY29uZl9sb2dfZXJyb3IoTkdYX0xPR19FTUVSRywgY2YsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0aGUgc2FtZSBcIiVWXCIgcGF0aCBuYW1lIGluICVzOiV1aSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXMgdGhlIGRpZmZlcmVudCBsZXZlbHMgdGhhbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwcFtpXS0+bmFtZSwgcHBbaV0tPmNvbmZfZmlsZSwgcHBbaV0tPmxpbmUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKHBwW2ldLT5sZXZlbFtuXSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgKnNsb3QgPSBwcFtpXTsKKworICAgICAgICAgICAgcmV0dXJuIE5HWF9DT05GX09LOworICAgICAgICB9CisgICAgfQorCisgICAgKnNsb3QgPSBwYXRoOworCisKKyAgICBpZiAoIShwcCA9IG5neF9hcnJheV9wdXNoKCZjZi0+Y3ljbGUtPnBhdGhlcykpKSB7CisgICAgICAgIHJldHVybiBOR1hfQ09ORl9FUlJPUjsKKyAgICB9CisKKyAgICAqcHAgPSBwYXRoOwogCiAgICAgcmV0dXJuIE5HWF9DT05GX09LOwogfQorCisKK25neF9pbnRfdCBuZ3hfY3JlYXRlX3BhdGhlcyhuZ3hfY3ljbGVfdCAqY3ljbGUsIG5neF91aWRfdCB1c2VyKQoreworICAgIG5neF9lcnJfdCAgICAgICAgIGVycjsKKyAgICBuZ3hfdWludF90ICAgICAgICBpOworICAgIG5neF9wYXRoX3QgICAgICAqKnBhdGg7CisjaWYgIShOR1hfV0lOMzIpCisgICAgbmd4X2ZpbGVfaW5mb190ICAgZmk7CisjZW5kaWYKKworICAgIHBhdGggPSBjeWNsZS0+cGF0aGVzLmVsdHM7CisgICAgZm9yIChpID0gMDsgaSA8IGN5Y2xlLT5wYXRoZXMubmVsdHM7IGkrKykgeworCisgICAgICAgIGlmIChuZ3hfY3JlYXRlX2RpcihwYXRoW2ldLT5uYW1lLmRhdGEpID09IE5HWF9GSUxFX0VSUk9SKSB7CisgICAgICAgICAgICBlcnIgPSBuZ3hfZXJybm87CisgICAgICAgICAgICBpZiAoZXJyICE9IE5HWF9FRVhJU1QpIHsKKyAgICAgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfRU1FUkcsIGN5Y2xlLT5sb2csIGVyciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9jcmVhdGVfZGlyX24gIiBcIiVzXCIgZmFpbGVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhbaV0tPm5hbWUuZGF0YSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICh1c2VyID09IChuZ3hfdWlkX3QpIC0xKSB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisjaWYgIShOR1hfV0lOMzIpCisKKyAgICAgICAgaWYgKG5neF9maWxlX2luZm8oKGNvbnN0IGNoYXIgKikgcGF0aFtpXS0+bmFtZS5kYXRhLCAmZmkpID09IC0xKSB7CisgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfRU1FUkcsIGN5Y2xlLT5sb2csIG5neF9lcnJubywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X2ZpbGVfaW5mb19uICIgXCIlc1wiIGZhaWxlZCIsIHBhdGhbaV0tPm5hbWUuZGF0YSk7CisgICAgICAgICAgICByZXR1cm4gTkdYX0VSUk9SOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGZpLnN0X3VpZCAhPSB1c2VyKSB7CisgICAgICAgICAgICBpZiAoY2hvd24oKGNvbnN0IGNoYXIgKikgcGF0aFtpXS0+bmFtZS5kYXRhLCB1c2VyLCAtMSkgPT0gLTEpIHsKKyAgICAgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfRU1FUkcsIGN5Y2xlLT5sb2csIG5neF9lcnJubywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjaG93bihcIiVzXCIsICVkKSBmYWlsZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aFtpXS0+bmFtZS5kYXRhLCB1c2VyKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTkdYX0VSUk9SOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKChmaS5zdF9tb2RlICYgKFNfSVJVU1J8U19JV1VTUnxTX0lYVVNSKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIT0gKFNfSVJVU1J8U19JV1VTUnxTX0lYVVNSKSkKKyAgICAgICAgeworICAgICAgICAgICAgZmkuc3RfbW9kZSB8PSAoU19JUlVTUnxTX0lXVVNSfFNfSVhVU1IpOworCisgICAgICAgICAgICBpZiAoY2htb2QoKGNvbnN0IGNoYXIgKikgcGF0aFtpXS0+bmFtZS5kYXRhLCBmaS5zdF9tb2RlKSA9PSAtMSkgeworICAgICAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19FTUVSRywgY3ljbGUtPmxvZywgbmd4X2Vycm5vLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNobW9kKCkgXCIlc1wiIGZhaWxlZCIsIHBhdGhbaV0tPm5hbWUuZGF0YSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisjZW5kaWYKKyAgICB9CisKKyAgICByZXR1cm4gTkdYX09LOworfQpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmd4X2ZpbGUuaCBiL3NyYy9jb3JlL25neF9maWxlLmgKaW5kZXggZDA1YjZkNy4uOTRmZDhjNyAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbmd4X2ZpbGUuaAorKysgYi9zcmMvY29yZS9uZ3hfZmlsZS5oCkBAIC0xNyw0NCArMTcsNDggQEAKIAogCiBzdHJ1Y3Qgbmd4X2ZpbGVfcyB7Ci0gICAgbmd4X2ZkX3QgICAgICAgICBmZDsKLSAgICBuZ3hfc3RyX3QgICAgICAgIG5hbWU7Ci0gICAgbmd4X2ZpbGVfaW5mb190ICBpbmZvOworICAgIG5neF9mZF90ICAgICAgICAgICAgZmQ7CisgICAgbmd4X3N0cl90ICAgICAgICAgICBuYW1lOworICAgIG5neF9maWxlX2luZm9fdCAgICAgaW5mbzsKIAotICAgIG9mZl90ICAgICAgICAgICAgb2Zmc2V0OwotICAgIG9mZl90ICAgICAgICAgICAgc3lzX29mZnNldDsKKyAgICBvZmZfdCAgICAgICAgICAgICAgIG9mZnNldDsKKyAgICBvZmZfdCAgICAgICAgICAgICAgIHN5c19vZmZzZXQ7CiAKLSAgICBuZ3hfbG9nX3QgICAgICAgKmxvZzsKKyAgICBuZ3hfbG9nX3QgICAgICAgICAgKmxvZzsKIAotICAgIG5neF91aW50X3QgICAgICAgdmFsaWRfaW5mbzoxOyAgLyogdW5zaWduZWQgIHZhbGlkX2luZm86MTsgKi8KKyAgICBuZ3hfdWludF90ICAgICAgICAgIHZhbGlkX2luZm86MTsgIC8qIHVuc2lnbmVkICB2YWxpZF9pbmZvOjE7ICovCiB9OwogCiAjZGVmaW5lIE5HWF9NQVhfUEFUSF9MRVZFTCAgMwogCiBzdHJ1Y3Qgbmd4X3BhdGhfcyB7CiAgICAgbmd4X3N0cl90ICAgICAgICAgICBuYW1lOwotICAgIHVfaW50ICAgICAgICAgICAgICAgbGVuOwotICAgIHVfaW50ICAgICAgICAgICAgICAgbGV2ZWxbM107CisgICAgbmd4X3VpbnRfdCAgICAgICAgICBsZW47CisgICAgbmd4X3VpbnRfdCAgICAgICAgICBsZXZlbFszXTsKICAgICBuZ3hfZ2NfaGFuZGxlcl9wdCAgIGdjX2hhbmRsZXI7CisKKyAgICB1X2NoYXIgICAgICAgICAgICAgKmNvbmZfZmlsZTsKKyAgICBuZ3hfdWludF90ICAgICAgICAgIGxpbmU7CiB9OwogCiAKIHR5cGVkZWYgc3RydWN0IHsKLSAgICBuZ3hfZmlsZV90ICAgZmlsZTsKLSAgICBvZmZfdCAgICAgICAgb2Zmc2V0OwotICAgIG5neF9wYXRoX3QgICpwYXRoOwotICAgIG5neF9wb29sX3QgICpwb29sOwotICAgIGNoYXIgICAgICAgICp3YXJuOworICAgIG5neF9maWxlX3QgICAgICAgICAgZmlsZTsKKyAgICBvZmZfdCAgICAgICAgICAgICAgIG9mZnNldDsKKyAgICBuZ3hfcGF0aF90ICAgICAgICAgKnBhdGg7CisgICAgbmd4X3Bvb2xfdCAgICAgICAgICpwb29sOworICAgIGNoYXIgICAgICAgICAgICAgICAqd2FybjsKIAotICAgIHVuc2lnbmVkICAgICBwZXJzaXN0ZW50OjE7CisgICAgdW5zaWduZWQgICAgICAgICAgICBwZXJzaXN0ZW50OjE7CiB9IG5neF90ZW1wX2ZpbGVfdDsKIAogCi1pbnQgbmd4X3dyaXRlX2NoYWluX3RvX3RlbXBfZmlsZShuZ3hfdGVtcF9maWxlX3QgKnRmLCBuZ3hfY2hhaW5fdCAqY2hhaW4pOwotaW50IG5neF9jcmVhdGVfdGVtcF9maWxlKG5neF9maWxlX3QgKmZpbGUsIG5neF9wYXRoX3QgKnBhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgbmd4X3Bvb2xfdCAqcG9vbCwgaW50IHBlcnNpc3RlbnQpOworc3NpemVfdCBuZ3hfd3JpdGVfY2hhaW5fdG9fdGVtcF9maWxlKG5neF90ZW1wX2ZpbGVfdCAqdGYsIG5neF9jaGFpbl90ICpjaGFpbik7CituZ3hfaW50X3Qgbmd4X2NyZWF0ZV90ZW1wX2ZpbGUobmd4X2ZpbGVfdCAqZmlsZSwgbmd4X3BhdGhfdCAqcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfcG9vbF90ICpwb29sLCBpbnQgcGVyc2lzdGVudCk7CiB2b2lkIG5neF9jcmVhdGVfaGFzaGVkX2ZpbGVuYW1lKG5neF9maWxlX3QgKmZpbGUsIG5neF9wYXRoX3QgKnBhdGgpOwotaW50IG5neF9jcmVhdGVfcGF0aChuZ3hfZmlsZV90ICpmaWxlLCBuZ3hfcGF0aF90ICpwYXRoKTsKK25neF9pbnRfdCBuZ3hfY3JlYXRlX3BhdGgobmd4X2ZpbGVfdCAqZmlsZSwgbmd4X3BhdGhfdCAqcGF0aCk7CituZ3hfaW50X3Qgbmd4X2NyZWF0ZV9wYXRoZXMobmd4X2N5Y2xlX3QgKmN5Y2xlLCBuZ3hfdWlkX3QgdXNlcik7CiAKIHZvaWQgbmd4X2luaXRfdGVtcF9udW1iZXIoKTsKIG5neF91aW50X3Qgbmd4X25leHRfdGVtcF9udW1iZXIobmd4X3VpbnRfdCBjb2xsaXNpb24pOwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmd4X2dhcmJhZ2VfY29sbGVjdG9yLmMgYi9zcmMvY29yZS9uZ3hfZ2FyYmFnZV9jb2xsZWN0b3IuYwppbmRleCA3M2Y5Y2MxLi5mYjZhZDc3IDEwMDY0NAotLS0gYS9zcmMvY29yZS9uZ3hfZ2FyYmFnZV9jb2xsZWN0b3IuYworKysgYi9zcmMvY29yZS9uZ3hfZ2FyYmFnZV9jb2xsZWN0b3IuYwpAQCAtOSw3MSArOSw4IEBACiAjaW5jbHVkZSA8bmd4X2dhcmJhZ2VfY29sbGVjdG9yLmg+CiAKIAotaW50IG5neF9nYXJiYWdlX2NvbGxlY3Rvcl90ZW1wX2hhbmRsZXIobmd4X2djX3QgKmN0eCwgbmd4X3N0cl90ICpuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X2Rpcl90ICpkaXIpOwogCi0KLXN0YXRpYyBpbnQgbmd4X2NvbGxlY3RfZ2FyYmFnZShuZ3hfZ2NfdCAqY3R4LCBuZ3hfc3RyX3QgKmRuYW1lLCBpbnQgbGV2ZWwpOwotCi0KLQotI2lmIDAKLQotewotICAgIG5neF90ZXN0X251bGwoY3ljbGUtPnRpbWVyX2V2ZW50cywKLSAgICAgICAgICAgICAgICAgIG5neF9hbGxvYyhzaXplb2Yobmd4X2V2ZW50X3QpICogVElNRVJTLCBjeWNsZS0+bG9nKSwKLSAgICAgICAgICAgICAgICAgIE5HWF9FUlJPUik7Ci0KLSAgICBuZ3hfZXZlbnRfdGltZXJfaW5pdChjeWNsZSk7Ci19Ci0KLQotdm9pZCBnYXJiYWdlX2NvbGxlY3RvcigpCi17Ci0gICAgbmd4X21zZWNfdCAgICAgICAgdGltZXI7Ci0gICAgc3RydWN0IHRpbWV2YWwgICAgdHY7Ci0gICAgbmd4X2Vwb2NoX21zZWNfdCAgZGVsdGE7Ci0KLSAgICBmb3IgKCA7OyApIHsKLSAgICAgICAgdGltZXIgPSBuZ3hfZXZlbnRfZmluZF90aW1lcigpOwotCi0gICAgICAgIG5neF9nZXR0aW1lb2ZkYXkoJnR2KTsKLSAgICAgICAgZGVsdGEgPSB0di50dl9zZWMgKiAxMDAwICsgdHYudHZfdXNlYyAvIDEwMDA7Ci0KLSAgICAgICAgbXNsZWVwKHRpbWVyKTsKLQotICAgICAgICBuZ3hfZ2V0dGltZW9mZGF5KCZ0dik7Ci0KLSAgICAgICAgbmd4X2NhY2hlZF90aW1lID0gdHYudHZfc2VjOwotICAgICAgICBuZ3hfdGltZV91cGRhdGUoKTsKLQotICAgICAgICBkZWx0YSA9IHR2LnR2X3NlYyAqIDEwMDAgKyB0di50dl91c2VjIC8gMTAwMCAtIGRlbHRhOwotCi0gICAgICAgIG5neF9ldmVudF9leHBpcmVfdGltZXJzKChuZ3hfbXNlY190KSBkZWx0YSk7Ci0gICAgfQotfQotCi0jZW5kaWYKLQotCi12b2lkIHN0dWJfaW5pdChuZ3hfY3ljbGVfdCAqY3ljbGUpCi17Ci0gICAgbmd4X3VpbnRfdCAgICBpOwotICAgIG5neF9nY190ICAgICAgY3R4OwotICAgIG5neF9wYXRoX3QgICoqcGF0aDsKLQotICAgIHBhdGggPSBjeWNsZS0+cGF0aGVzLmVsdHM7Ci0gICAgZm9yIChpID0gMDsgaSA8IGN5Y2xlLT5wYXRoZXMubmVsdHM7IGkrKykgewotICAgICAgICBjdHgucGF0aCA9IHBhdGhbaV07Ci0gICAgICAgIGN0eC5sb2cgPSBjeWNsZS0+bG9nOwotICAgICAgICBjdHguaGFuZGxlciA9IHBhdGhbaV0tPmdjX2hhbmRsZXI7Ci0KLSAgICAgICAgbmd4X2NvbGxlY3RfZ2FyYmFnZSgmY3R4LCAmcGF0aFtpXS0+bmFtZSwgMCk7Ci0gICAgfQotfQotCi0KLXN0YXRpYyBpbnQgbmd4X2NvbGxlY3RfZ2FyYmFnZShuZ3hfZ2NfdCAqY3R4LCBuZ3hfc3RyX3QgKmRuYW1lLCBpbnQgbGV2ZWwpCituZ3hfaW50X3Qgbmd4X2NvbGxlY3RfZ2FyYmFnZShuZ3hfZ2NfdCAqY3R4LCBuZ3hfc3RyX3QgKmRuYW1lLCBpbnQgbGV2ZWwpCiB7CiAgICAgaW50ICAgICAgICAgcmM7CiAgICAgdV9jaGFyICAgICAqbGFzdDsKQEAgLTIyNCw3ICsxNjEsOCBAQAogCiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQ1JJVCwgY3R4LT5sb2csIG5neF9lcnJubywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIlwiJXNcIiBoYXMgdW5rbm93biBmaWxlIHR5cGUsIGRlbGV0aW5nIiwgZm5hbWUuZGF0YSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICJ0aGUgZmlsZSBcIiVzXCIgaGFzIHVua25vd24gdHlwZSwgZGVsZXRpbmciLAorICAgICAgICAgICAgICAgICAgICAgICAgICBmbmFtZS5kYXRhKTsKIAogICAgICAgICAgICAgaWYgKG5neF9kZWxldGVfZmlsZShmbmFtZS5kYXRhKSA9PSBOR1hfRklMRV9FUlJPUikgewogICAgICAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19DUklULCBjdHgtPmxvZywgbmd4X2Vycm5vLApAQCAtMjQ5LDggKzE4Nyw4IEBACiB9CiAKIAotaW50IG5neF9nYXJiYWdlX2NvbGxlY3Rvcl90ZW1wX2hhbmRsZXIobmd4X2djX3QgKmN0eCwgbmd4X3N0cl90ICpuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X2Rpcl90ICpkaXIpCituZ3hfaW50X3Qgbmd4X2dhcmJhZ2VfY29sbGVjdG9yX3RlbXBfaGFuZGxlcihuZ3hfZ2NfdCAqY3R4LCBuZ3hfc3RyX3QgKm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfZGlyX3QgKmRpcikKIHsKICAgICAvKgogICAgICAqIFdlIHVzZSBtdGltZSBvbmx5IGFuZCBkbyBub3QgdXNlIGF0aW1lIGJlY2F1c2U6CkBAIC0yNjQsNyArMjAyLDcgQEAKICAgICB9CiAKICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfTk9USUNFLCBjdHgtPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICJkZWxldGUgc3RhbGUgdGVtcG9yYXJ5IFwiJXNcIiIsIG5hbWUtPmRhdGEpOworICAgICAgICAgICAgICAgICAgImRlbGV0ZSB0aGUgc3RhbGUgdGVtcG9yYXJ5IGZpbGUgXCIlc1wiIiwgbmFtZS0+ZGF0YSk7CiAKICAgICBpZiAobmd4X2RlbGV0ZV9maWxlKG5hbWUtPmRhdGEpID09IE5HWF9GSUxFX0VSUk9SKSB7CiAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19DUklULCBjdHgtPmxvZywgbmd4X2Vycm5vLApkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmd4X2dhcmJhZ2VfY29sbGVjdG9yLmggYi9zcmMvY29yZS9uZ3hfZ2FyYmFnZV9jb2xsZWN0b3IuaAppbmRleCA3MmY5NzYwLi5jZWMzYTg3IDEwMDY0NAotLS0gYS9zcmMvY29yZS9uZ3hfZ2FyYmFnZV9jb2xsZWN0b3IuaAorKysgYi9zcmMvY29yZS9uZ3hfZ2FyYmFnZV9jb2xsZWN0b3IuaApAQCAtMjMsOCArMjMsOSBAQAogfTsKIAogCi1pbnQgbmd4X2dhcmJhZ2VfY29sbGVjdG9yX3RlbXBfaGFuZGxlcihuZ3hfZ2NfdCAqY3R4LCBuZ3hfc3RyX3QgKm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfZGlyX3QgKmRpcik7CituZ3hfaW50X3Qgbmd4X2NvbGxlY3RfZ2FyYmFnZShuZ3hfZ2NfdCAqY3R4LCBuZ3hfc3RyX3QgKmRuYW1lLCBpbnQgbGV2ZWwpOworbmd4X2ludF90IG5neF9nYXJiYWdlX2NvbGxlY3Rvcl90ZW1wX2hhbmRsZXIobmd4X2djX3QgKmN0eCwgbmd4X3N0cl90ICpuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X2Rpcl90ICpkaXIpOwogCiAKICNlbmRpZiAvKiBfTkdYX0dBUkJBR0VfQ09MTEVDVE9SX0hfSU5DTFVERURfICovCmRpZmYgLS1naXQgYS9zcmMvY29yZS9uZ3hfaW5ldC5jIGIvc3JjL2NvcmUvbmd4X2luZXQuYwppbmRleCA1Y2FiYjQ5Li4yMmE1MzM0IDEwMDY0NAotLS0gYS9zcmMvY29yZS9uZ3hfaW5ldC5jCisrKyBiL3NyYy9jb3JlL25neF9pbmV0LmMKQEAgLTIwLDcgKzIwLDcgQEAKICAqLwogCiAKLW5neF9pbmxpbmUgc3RhdGljIHNpemVfdCBuZ3hfc3ByaW50X3VjaGFyKHVfY2hhciAqdGV4dCwgdV9jaGFyIGMsIHNpemVfdCBsZW4pCitzdGF0aWMgbmd4X2lubGluZSBzaXplX3Qgbmd4X3NwcmludF91Y2hhcih1X2NoYXIgKnRleHQsIHVfY2hhciBjLCBzaXplX3QgbGVuKQogewogICAgIHNpemVfdCAgICAgIG47CiAgICAgbmd4X3VpbnRfdCAgYzEsIGMyOwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmd4X2xpc3QuaCBiL3NyYy9jb3JlL25neF9saXN0LmgKaW5kZXggMDQ2YmRlZS4uMmRkOGFiMyAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbmd4X2xpc3QuaAorKysgYi9zcmMvY29yZS9uZ3hfbGlzdC5oCkBAIC0zMCw3ICszMCw3IEBACiB9IG5neF9saXN0X3Q7CiAKIAotbmd4X2lubGluZSBzdGF0aWMgbmd4X2ludF90IG5neF9saXN0X2luaXQobmd4X2xpc3RfdCAqbGlzdCwgbmd4X3Bvb2xfdCAqcG9vbCwKK3N0YXRpYyBuZ3hfaW5saW5lIG5neF9pbnRfdCBuZ3hfbGlzdF9pbml0KG5neF9saXN0X3QgKmxpc3QsIG5neF9wb29sX3QgKnBvb2wsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfdWludF90IG4sIHNpemVfdCBzaXplKQogewogICAgIGlmICghKGxpc3QtPnBhcnQuZWx0cyA9IG5neF9wYWxsb2MocG9vbCwgbiAqIHNpemUpKSkgewpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmd4X2xvZy5jIGIvc3JjL2NvcmUvbmd4X2xvZy5jCmluZGV4IDUyMWJhN2EuLmI3MTk4Y2QgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL25neF9sb2cuYworKysgYi9zcmMvY29yZS9uZ3hfbG9nLmMKQEAgLTE1NSw4ICsxNTUsMTUgQEAKIAogICAgIGVycnN0cltsZW4rK10gPSBDUjsKICAgICBlcnJzdHJbbGVuKytdID0gTEY7CisKICAgICBXcml0ZUZpbGUobG9nLT5maWxlLT5mZCwgZXJyc3RyLCBsZW4sICZ3cml0dGVuLCBOVUxMKTsKIAorI2lmIDAKKyAgICBpZiAoV3JpdGVGaWxlKGxvZy0+ZmlsZS0+ZmQsIGVycnN0ciwgbGVuLCAmd3JpdHRlbiwgTlVMTCkgPT0gMCkgeworICAgICAgICBuZ3hfbWVzc2FnZV9ib3goIm5naW54IiwgTUJfT0ssIG5neF9lcnJubywgIldyaXRlRmlsZSgpIGZhaWxlZCIpOworICAgIH0KKyNlbmRpZgorCiAjZWxzZQogCiAgICAgaWYgKGxlbiA9PSBOR1hfTUFYX0VSUk9SX1NUUikgewpAQCAtMTY0LDYgKzE3MSw3IEBACiAgICAgfQogCiAgICAgZXJyc3RyW2xlbisrXSA9IExGOworCiAgICAgd3JpdGUobG9nLT5maWxlLT5mZCwgZXJyc3RyLCBsZW4pOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25neF9vdXRwdXRfY2hhaW4uYyBiL3NyYy9jb3JlL25neF9vdXRwdXRfY2hhaW4uYwppbmRleCAzMGRkYTM1Li5kMmZiZjEyIDEwMDY0NAotLS0gYS9zcmMvY29yZS9uZ3hfb3V0cHV0X2NoYWluLmMKKysrIGIvc3JjL2NvcmUvbmd4X291dHB1dF9jaGFpbi5jCkBAIC0xMiw3ICsxMiw3IEBACiAjZGVmaW5lIE5HWF9OT05FICAgICAgMQogCiAKLW5neF9pbmxpbmUgc3RhdGljIG5neF9pbnRfdAorc3RhdGljIG5neF9pbmxpbmUgbmd4X2ludF90CiAgICAgbmd4X291dHB1dF9jaGFpbl9uZWVkX3RvX2NvcHkobmd4X291dHB1dF9jaGFpbl9jdHhfdCAqY3R4LCBuZ3hfYnVmX3QgKmJ1Zik7CiBzdGF0aWMgbmd4X2ludF90IG5neF9vdXRwdXRfY2hhaW5fY29weV9idWYobmd4X2J1Zl90ICpkc3QsIG5neF9idWZfdCAqc3JjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF91aW50X3Qgc2VuZGZpbGUpOwpAQCAtMTg4LDcgKzE4OCw3IEBACiB9CiAKIAotbmd4X2lubGluZSBzdGF0aWMgbmd4X2ludF90CitzdGF0aWMgbmd4X2lubGluZSBuZ3hfaW50X3QKICAgICBuZ3hfb3V0cHV0X2NoYWluX25lZWRfdG9fY29weShuZ3hfb3V0cHV0X2NoYWluX2N0eF90ICpjdHgsIG5neF9idWZfdCAqYnVmKQogewogICAgIGlmIChuZ3hfYnVmX3NwZWNpYWwoYnVmKSkgewpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmd4X3JidHJlZS5jIGIvc3JjL2NvcmUvbmd4X3JidHJlZS5jCmluZGV4IGM5NGRiMTMuLmVmNTcyODkgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL25neF9yYnRyZWUuYworKysgYi9zcmMvY29yZS9uZ3hfcmJ0cmVlLmMKQEAgLTIwLDEyICsyMCwxMiBAQAogI2RlZmluZSBuZ3hfcmJ0X2NvcHlfY29sb3IobjEsIG4yKSAgKG4xLT5jb2xvciA9IG4yLT5jb2xvcikKIAogCi1uZ3hfaW5saW5lIHZvaWQgbmd4X3JidHJlZV9sZWZ0X3JvdGF0ZShuZ3hfcmJ0cmVlX3QgKipyb290LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X3JidHJlZV90ICpzZW50aW5lbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9yYnRyZWVfdCAqbm9kZSk7Ci1uZ3hfaW5saW5lIHZvaWQgbmd4X3JidHJlZV9yaWdodF9yb3RhdGUobmd4X3JidHJlZV90ICoqcm9vdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfcmJ0cmVlX3QgKnNlbnRpbmVsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9yYnRyZWVfdCAqbm9kZSk7CitzdGF0aWMgbmd4X2lubGluZSB2b2lkIG5neF9yYnRyZWVfbGVmdF9yb3RhdGUobmd4X3JidHJlZV90ICoqcm9vdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfcmJ0cmVlX3QgKnNlbnRpbmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9yYnRyZWVfdCAqbm9kZSk7CitzdGF0aWMgbmd4X2lubGluZSB2b2lkIG5neF9yYnRyZWVfcmlnaHRfcm90YXRlKG5neF9yYnRyZWVfdCAqKnJvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9yYnRyZWVfdCAqc2VudGluZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9yYnRyZWVfdCAqbm9kZSk7CiAKIAogdm9pZCBuZ3hfcmJ0cmVlX2luc2VydChuZ3hfcmJ0cmVlX3QgKipyb290LCBuZ3hfcmJ0cmVlX3QgKnNlbnRpbmVsLApAQCAtMjg5LDkgKzI4OSw5IEBACiB9CiAKIAotbmd4X2lubGluZSB2b2lkIG5neF9yYnRyZWVfbGVmdF9yb3RhdGUobmd4X3JidHJlZV90ICoqcm9vdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9yYnRyZWVfdCAqc2VudGluZWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfcmJ0cmVlX3QgKm5vZGUpCitzdGF0aWMgbmd4X2lubGluZSB2b2lkIG5neF9yYnRyZWVfbGVmdF9yb3RhdGUobmd4X3JidHJlZV90ICoqcm9vdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfcmJ0cmVlX3QgKnNlbnRpbmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9yYnRyZWVfdCAqbm9kZSkKIHsKICAgICBuZ3hfcmJ0cmVlX3QgICp0ZW1wOwogCkBAIC0zMTksOSArMzE5LDkgQEAKIH0KIAogCi1uZ3hfaW5saW5lIHZvaWQgbmd4X3JidHJlZV9yaWdodF9yb3RhdGUobmd4X3JidHJlZV90ICoqcm9vdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfcmJ0cmVlX3QgKnNlbnRpbmVsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9yYnRyZWVfdCAqbm9kZSkKK3N0YXRpYyBuZ3hfaW5saW5lIHZvaWQgbmd4X3JidHJlZV9yaWdodF9yb3RhdGUobmd4X3JidHJlZV90ICoqcm9vdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X3JidHJlZV90ICpzZW50aW5lbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X3JidHJlZV90ICpub2RlKQogewogICAgIG5neF9yYnRyZWVfdCAgKnRlbXA7CiAKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25neF9yYnRyZWUuaCBiL3NyYy9jb3JlL25neF9yYnRyZWUuaAppbmRleCBhYTY5NTU2Li5kODc2ZWMwIDEwMDY0NAotLS0gYS9zcmMvY29yZS9uZ3hfcmJ0cmVlLmgKKysrIGIvc3JjL2NvcmUvbmd4X3JidHJlZS5oCkBAIC0yOSw3ICsyOSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgIG5neF9yYnRyZWVfdCAqbm9kZSk7CiAKIAotbmd4X2lubGluZSBzdGF0aWMgbmd4X3JidHJlZV90ICpuZ3hfcmJ0cmVlX21pbihuZ3hfcmJ0cmVlX3QgKm5vZGUsCitzdGF0aWMgbmd4X2lubGluZSBuZ3hfcmJ0cmVlX3QgKm5neF9yYnRyZWVfbWluKG5neF9yYnRyZWVfdCAqbm9kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X3JidHJlZV90ICpzZW50aW5lbCkKIHsKICAgIHdoaWxlIChub2RlLT5sZWZ0ICE9IHNlbnRpbmVsKSB7CmRpZmYgLS1naXQgYS9zcmMvY29yZS9uZ3hfc3RyaW5nLmMgYi9zcmMvY29yZS9uZ3hfc3RyaW5nLmMKaW5kZXggOTRlYWRmYi4uNGU1ZDI3MyAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbmd4X3N0cmluZy5jCisrKyBiL3NyYy9jb3JlL25neF9zdHJpbmcuYwpAQCAtMTM1LDYgKzEzNSwxMSBAQAogICAgICAgICAgICAgICAgICAgICBmbXQrKzsKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAKKyAgICAgICAgICAgICAgICBjYXNlICdtJzoKKyAgICAgICAgICAgICAgICAgICAgd2lkdGggPSBOR1hfSU5UX1RfTEVOOworICAgICAgICAgICAgICAgICAgICBmbXQrKzsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisKICAgICAgICAgICAgICAgICBjYXNlICdYJzoKICAgICAgICAgICAgICAgICAgICAgaGV4YWRlY2ltYWwgPSAyOwogICAgICAgICAgICAgICAgICAgICBzaWduID0gMDsKZGlmZiAtLWdpdCBhL3NyYy9ldmVudC9uZ3hfZXZlbnQuYyBiL3NyYy9ldmVudC9uZ3hfZXZlbnQuYwppbmRleCA1NjNjZjQyLi5iM2JmNTMwIDEwMDY0NAotLS0gYS9zcmMvZXZlbnQvbmd4X2V2ZW50LmMKKysrIGIvc3JjL2V2ZW50L25neF9ldmVudC5jCkBAIC0xMiwzMSArMTIsMTIgQEAKICNkZWZpbmUgREVGQVVMVF9DT05ORUNUSU9OUyAgNTEyCiAKIAotZXh0ZXJuIG5neF9tb2R1bGVfdCBuZ3hfc2VsZWN0X21vZHVsZTsKLWV4dGVybiBuZ3hfZXZlbnRfbW9kdWxlX3Qgbmd4X3NlbGVjdF9tb2R1bGVfY3R4OwotCi0jaWYgKEhBVkVfS1FVRVVFKQotI2luY2x1ZGUgPG5neF9rcXVldWVfbW9kdWxlLmg+Ci0jZW5kaWYKLQotI2lmIChIQVZFX0RFVlBPTEwpCitleHRlcm4gbmd4X21vZHVsZV90IG5neF9rcXVldWVfbW9kdWxlOwogZXh0ZXJuIG5neF9tb2R1bGVfdCBuZ3hfZGV2cG9sbF9tb2R1bGU7Ci1leHRlcm4gbmd4X2V2ZW50X21vZHVsZV90IG5neF9kZXZwb2xsX21vZHVsZV9jdHg7Ci0jZW5kaWYKLQotI2lmIChIQVZFX0VQT0xMKQogZXh0ZXJuIG5neF9tb2R1bGVfdCBuZ3hfZXBvbGxfbW9kdWxlOwotZXh0ZXJuIG5neF9ldmVudF9tb2R1bGVfdCBuZ3hfZXBvbGxfbW9kdWxlX2N0eDsKLSNlbmRpZgotCi0jaWYgKEhBVkVfUlRTSUcpCiBleHRlcm4gbmd4X21vZHVsZV90IG5neF9ydHNpZ19tb2R1bGU7Ci1leHRlcm4gbmd4X2V2ZW50X21vZHVsZV90IG5neF9ydHNpZ19tb2R1bGVfY3R4OwotI2VuZGlmCitleHRlcm4gbmd4X21vZHVsZV90IG5neF9zZWxlY3RfbW9kdWxlOwogCi0jaWYgKEhBVkVfQUlPKQotI2luY2x1ZGUgPG5neF9haW9fbW9kdWxlLmg+Ci0jZW5kaWYKIAogc3RhdGljIG5neF9pbnRfdCBuZ3hfZXZlbnRfbW9kdWxlX2luaXQobmd4X2N5Y2xlX3QgKmN5Y2xlKTsKIHN0YXRpYyBuZ3hfaW50X3Qgbmd4X2V2ZW50X3Byb2Nlc3NfaW5pdChuZ3hfY3ljbGVfdCAqY3ljbGUpOwpAQCAtNjMxLDEzICs2MTIsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgJiYgb2xkX2VjZi0+dXNlICE9IGVjZi0+dXNlKQogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgbmd4X2NvbmZfbG9nX2Vycm9yKE5HWF9MT0dfRU1FUkcsIGNmLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgIndoZW4gdGhlIHNlcnZlciBydW5zIHdpdGhvdXQgYSBtYXN0ZXIgcHJvY2VzcyAiCi0gICAgICAgICAgICAgICAgICAgICAgICAidGhlIFwiJVZcIiBldmVudCB0eXBlIG11c3QgYmUgdGhlIHNhbWUgYXMgIgotICAgICAgICAgICAgICAgICAgICAgICAgImluIHByZXZpb3VzIGNvbmZpZ3VyYXRpb24gLSBcIiVzXCIgIgotICAgICAgICAgICAgICAgICAgICAgICAgImFuZCBpdCBjYW4gbm90IGJlIGNoYW5nZWQgb24gdGhlIGZseSwgIgotICAgICAgICAgICAgICAgICAgICAgICAgInRvIGNoYW5nZSBpdCB5b3UgbmVlZCB0byBzdG9wIHNlcnZlciAiCi0gICAgICAgICAgICAgICAgICAgICAgICAiYW5kIHN0YXJ0IGl0IGFnYWluIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICZ2YWx1ZVsxXSwgb2xkX2VjZi0+bmFtZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndoZW4gdGhlIHNlcnZlciBydW5zIHdpdGhvdXQgYSBtYXN0ZXIgcHJvY2VzcyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRoZSBcIiVWXCIgZXZlbnQgdHlwZSBtdXN0IGJlIHRoZSBzYW1lIGFzICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW4gcHJldmlvdXMgY29uZmlndXJhdGlvbiAtIFwiJXNcIiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFuZCBpdCBjYW4gbm90IGJlIGNoYW5nZWQgb24gdGhlIGZseSwgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0byBjaGFuZ2UgaXQgeW91IG5lZWQgdG8gc3RvcCBzZXJ2ZXIgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhbmQgc3RhcnQgaXQgYWdhaW4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ2YWx1ZVsxXSwgb2xkX2VjZi0+bmFtZSk7CiAKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOwogICAgICAgICAgICAgICAgIH0KQEAgLTcyNiw5OSArNzA3LDEyMiBAQAogc3RhdGljIGNoYXIgKm5neF9ldmVudF9pbml0X2NvbmYobmd4X2N5Y2xlX3QgKmN5Y2xlLCB2b2lkICpjb25mKQogewogICAgIG5neF9ldmVudF9jb25mX3QgICplY2YgPSBjb25mOworCisgICAgaW50ICAgICAgICAgICAgICAgICAgZmQsIHJ0c2lnOworICAgIG5neF9pbnRfdCAgICAgICAgICAgIGksIGNvbm5lY3Rpb25zOworICAgIG5neF9tb2R1bGVfdCAgICAgICAgKm1vZHVsZTsKKyAgICBuZ3hfY29yZV9jb25mX3QgICAgICpjY2Y7CisgICAgbmd4X2V2ZW50X21vZHVsZV90ICAqZXZlbnRfbW9kdWxlOworCisgICAgY29ubmVjdGlvbnMgPSBOR1hfQ09ORl9VTlNFVF9VSU5UOworICAgIG1vZHVsZSA9IE5VTEw7CisgICAgcnRzaWcgPSAwOworICAgIGZkID0gMDsKKworI2lmIChIQVZFX0VQT0xMKSAmJiAhKFRFU1RfQlVJTERfRVBPTEwpCisKKyAgICBmZCA9IGVwb2xsX2NyZWF0ZSgxMDApOworCisgICAgaWYgKGZkICE9IC0xKSB7CisgICAgICAgIGNsb3NlKGZkKTsKKyAgICAgICAgY29ubmVjdGlvbnMgPSBERUZBVUxUX0NPTk5FQ1RJT05TOworICAgICAgICBtb2R1bGUgPSAmbmd4X2Vwb2xsX21vZHVsZTsKKworICAgIH0gZWxzZSBpZiAobmd4X2Vycm5vICE9IE5HWF9FTk9TWVMpIHsKKyAgICAgICAgY29ubmVjdGlvbnMgPSBERUZBVUxUX0NPTk5FQ1RJT05TOworICAgICAgICBtb2R1bGUgPSAmbmd4X2Vwb2xsX21vZHVsZTsKKyAgICB9CisKKyNlbmRpZgorCiAjaWYgKEhBVkVfUlRTSUcpCi0gICAgbmd4X2NvcmVfY29uZl90ICAqY2NmOworCisgICAgaWYgKG1vZHVsZSA9PSBOVUxMKSB7CisgICAgICAgIGNvbm5lY3Rpb25zID0gREVGQVVMVF9DT05ORUNUSU9OUzsKKyAgICAgICAgbW9kdWxlID0gJm5neF9ydHNpZ19tb2R1bGU7CisgICAgICAgIHJ0c2lnID0gMTsKKyAgICB9CisKKyNlbmRpZgorCisjaWYgKEhBVkVfREVWUE9MTCkKKworICAgIGNvbm5lY3Rpb25zID0gREVGQVVMVF9DT05ORUNUSU9OUzsKKyAgICBtb2R1bGUgPSAmbmd4X2RldnBvbGxfbW9kdWxlOworCiAjZW5kaWYKIAogI2lmIChIQVZFX0tRVUVVRSkKIAotICAgIG5neF9jb25mX2luaXRfdW5zaWduZWRfdmFsdWUoZWNmLT5jb25uZWN0aW9ucywgREVGQVVMVF9DT05ORUNUSU9OUyk7Ci0gICAgbmd4X2NvbmZfaW5pdF91bnNpZ25lZF92YWx1ZShlY2YtPnVzZSwgbmd4X2txdWV1ZV9tb2R1bGUuY3R4X2luZGV4KTsKLSAgICBuZ3hfY29uZl9pbml0X3B0cl92YWx1ZShlY2YtPm5hbWUsIG5neF9rcXVldWVfbW9kdWxlX2N0eC5uYW1lLT5kYXRhKTsKKyAgICBjb25uZWN0aW9ucyA9IERFRkFVTFRfQ09OTkVDVElPTlM7CisgICAgbW9kdWxlID0gJm5neF9rcXVldWVfbW9kdWxlOwogCi0jZWxpZiAoSEFWRV9ERVZQT0xMKQotCi0gICAgbmd4X2NvbmZfaW5pdF91bnNpZ25lZF92YWx1ZShlY2YtPmNvbm5lY3Rpb25zLCBERUZBVUxUX0NPTk5FQ1RJT05TKTsKLSAgICBuZ3hfY29uZl9pbml0X3Vuc2lnbmVkX3ZhbHVlKGVjZi0+dXNlLCBuZ3hfZGV2cG9sbF9tb2R1bGUuY3R4X2luZGV4KTsKLSAgICBuZ3hfY29uZl9pbml0X3B0cl92YWx1ZShlY2YtPm5hbWUsIG5neF9kZXZwb2xsX21vZHVsZV9jdHgubmFtZS0+ZGF0YSk7Ci0KLSNlbGlmIChIQVZFX0VQT0xMKQotCi0gICAgbmd4X2NvbmZfaW5pdF91bnNpZ25lZF92YWx1ZShlY2YtPmNvbm5lY3Rpb25zLCBERUZBVUxUX0NPTk5FQ1RJT05TKTsKLSAgICBuZ3hfY29uZl9pbml0X3Vuc2lnbmVkX3ZhbHVlKGVjZi0+dXNlLCBuZ3hfZXBvbGxfbW9kdWxlLmN0eF9pbmRleCk7Ci0gICAgbmd4X2NvbmZfaW5pdF9wdHJfdmFsdWUoZWNmLT5uYW1lLCBuZ3hfZXBvbGxfbW9kdWxlX2N0eC5uYW1lLT5kYXRhKTsKLQotI2VsaWYgKEhBVkVfUlRTSUcpCi0KLSAgICBuZ3hfY29uZl9pbml0X3Vuc2lnbmVkX3ZhbHVlKGVjZi0+Y29ubmVjdGlvbnMsIERFRkFVTFRfQ09OTkVDVElPTlMpOwotICAgIG5neF9jb25mX2luaXRfdW5zaWduZWRfdmFsdWUoZWNmLT51c2UsIG5neF9ydHNpZ19tb2R1bGUuY3R4X2luZGV4KTsKLSAgICBuZ3hfY29uZl9pbml0X3B0cl92YWx1ZShlY2YtPm5hbWUsIG5neF9ydHNpZ19tb2R1bGVfY3R4Lm5hbWUtPmRhdGEpOwotCi0jZWxpZiAoSEFWRV9TRUxFQ1QpCi0KLSNpZiAoTkdYX1dJTjMyKQotICAgIG5neF9jb25mX2luaXRfdW5zaWduZWRfdmFsdWUoZWNmLT5jb25uZWN0aW9ucywgREVGQVVMVF9DT05ORUNUSU9OUyk7Ci0jZWxzZQotICAgIG5neF9jb25mX2luaXRfdW5zaWduZWRfdmFsdWUoZWNmLT5jb25uZWN0aW9ucywKLSAgICAgICAgICBGRF9TRVRTSVpFIDwgREVGQVVMVF9DT05ORUNUSU9OUyA/IEZEX1NFVFNJWkUgOiBERUZBVUxUX0NPTk5FQ1RJT05TKTsKICNlbmRpZgogCi0gICAgbmd4X2NvbmZfaW5pdF91bnNpZ25lZF92YWx1ZShlY2YtPnVzZSwgbmd4X3NlbGVjdF9tb2R1bGUuY3R4X2luZGV4KTsKLSAgICBuZ3hfY29uZl9pbml0X3B0cl92YWx1ZShlY2YtPm5hbWUsIG5neF9zZWxlY3RfbW9kdWxlX2N0eC5uYW1lLT5kYXRhKTsKKyNpZiAoSEFWRV9TRUxFQ1QpCiAKKyAgICBpZiAobW9kdWxlID09IE5VTEwpIHsKKworI2lmIChOR1hfV0lOMzIpCisgICAgICAgIGNvbm5lY3Rpb25zID0gREVGQVVMVF9DT05ORUNUSU9OUzsKICNlbHNlCisgICAgICAgIGNvbm5lY3Rpb25zID0gRkRfU0VUU0laRSA8IERFRkFVTFRfQ09OTkVDVElPTlMgPyBGRF9TRVRTSVpFOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREVGQVVMVF9DT05ORUNUSU9OUzsKKyNlbmRpZgorICAgICAgICBtb2R1bGUgPSAmbmd4X3NlbGVjdF9tb2R1bGU7CisgICAgfQogCi0gICAgbmd4X2ludF90ICAgICAgICAgICAgaSwgbTsKLSAgICBuZ3hfZXZlbnRfbW9kdWxlX3QgICptb2R1bGU7CisjZW5kaWYKIAotICAgIG0gPSAtMTsKLSAgICBtb2R1bGUgPSBOVUxMOworICAgIGlmIChtb2R1bGUgPT0gTlVMTCkgeworICAgICAgICBmb3IgKGkgPSAwOyBuZ3hfbW9kdWxlc1tpXTsgaSsrKSB7CisgICAgICAgICAgICBpZiAobmd4X21vZHVsZXNbaV0tPnR5cGUgPT0gTkdYX0VWRU5UX01PRFVMRSkgeworICAgICAgICAgICAgICAgIGV2ZW50X21vZHVsZSA9IG5neF9tb2R1bGVzW2ldLT5jdHg7CiAKLSAgICBmb3IgKGkgPSAwOyBuZ3hfbW9kdWxlc1tpXTsgaSsrKSB7Ci0gICAgICAgIGlmIChuZ3hfbW9kdWxlc1tpXS0+dHlwZSA9PSBOR1hfRVZFTlRfTU9EVUxFKSB7Ci0gICAgICAgICAgICBtb2R1bGUgPSBuZ3hfbW9kdWxlc1tpXS0+Y3R4OworICAgICAgICAgICAgICAgIGlmIChuZ3hfc3RyY21wKGV2ZW50X21vZHVsZS0+bmFtZS0+ZGF0YSwgZXZlbnRfY29yZV9uYW1lLmRhdGEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID09IDApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmIChuZ3hfc3RyY21wKG1vZHVsZS0+bmFtZS0+ZGF0YSwgZXZlbnRfY29yZV9uYW1lLmRhdGEpID09IDApIHsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBtb2R1bGUgPSBuZ3hfbW9kdWxlc1tpXTsKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbSA9IG5neF9tb2R1bGVzW2ldLT5jdHhfaW5kZXg7Ci0gICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChtID09IC0xKSB7CisgICAgaWYgKG1vZHVsZSA9PSBOVUxMKSB7CiAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19FTUVSRywgY3ljbGUtPmxvZywgMCwgIm5vIGV2ZW50cyBtb2R1bGUgZm91bmQiKTsKICAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOwogICAgIH0KIAotICAgIG5neF9jb25mX2luaXRfdW5zaWduZWRfdmFsdWUoZWNmLT5jb25uZWN0aW9ucywgREVGQVVMVF9DT05ORUNUSU9OUyk7Ci0KLSAgICBuZ3hfY29uZl9pbml0X3Vuc2lnbmVkX3ZhbHVlKGVjZi0+dXNlLCBtKTsKLSAgICBuZ3hfY29uZl9pbml0X3B0cl92YWx1ZShlY2YtPm5hbWUsIG1vZHVsZS0+bmFtZS0+ZGF0YSk7Ci0KLSNlbmRpZgotCisgICAgbmd4X2NvbmZfaW5pdF91bnNpZ25lZF92YWx1ZShlY2YtPmNvbm5lY3Rpb25zLCBjb25uZWN0aW9ucyk7CiAgICAgY3ljbGUtPmNvbm5lY3Rpb25fbiA9IGVjZi0+Y29ubmVjdGlvbnM7CiAKKyAgICBuZ3hfY29uZl9pbml0X3Vuc2lnbmVkX3ZhbHVlKGVjZi0+dXNlLCBtb2R1bGUtPmN0eF9pbmRleCk7CisKKyAgICBldmVudF9tb2R1bGUgPSBtb2R1bGUtPmN0eDsKKyAgICBuZ3hfY29uZl9pbml0X3B0cl92YWx1ZShlY2YtPm5hbWUsIGV2ZW50X21vZHVsZS0+bmFtZS0+ZGF0YSk7CisKICAgICBuZ3hfY29uZl9pbml0X3ZhbHVlKGVjZi0+bXVsdGlfYWNjZXB0LCAwKTsKICAgICBuZ3hfY29uZl9pbml0X3ZhbHVlKGVjZi0+YWNjZXB0X211dGV4LCAxKTsKICAgICBuZ3hfY29uZl9pbml0X21zZWNfdmFsdWUoZWNmLT5hY2NlcHRfbXV0ZXhfZGVsYXksIDUwMCk7CiAKLSNpZiAoSEFWRV9SVFNJRykKLSAgICBpZiAoZWNmLT51c2UgPT0gbmd4X3J0c2lnX21vZHVsZS5jdHhfaW5kZXggJiYgZWNmLT5hY2NlcHRfbXV0ZXggPT0gMCkgewotICAgICAgICBjY2YgPSAobmd4X2NvcmVfY29uZl90ICopIG5neF9nZXRfY29uZihjeWNsZS0+Y29uZl9jdHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9jb3JlX21vZHVsZSk7Ci0gICAgICAgIGlmIChjY2YtPndvcmtlcl9wcm9jZXNzZXMpIHsKLSAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19FTUVSRywgY3ljbGUtPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgInRoZSBcInJ0c2lnXCIgbWV0aG9kIHJlcXVpcmVzICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIlwiYWNjZXB0X211dGV4XCIgdG8gYmUgb24iKTsKLSAgICAgICAgICAgIHJldHVybiBOR1hfQ09ORl9FUlJPUjsKLSAgICAgICAgfQotICAgIH0KLSNlbmRpZgogCi0gICAgcmV0dXJuIE5HWF9DT05GX09LOworICAgIGlmICghcnRzaWcgfHwgZWNmLT5hY2NlcHRfbXV0ZXgpIHsKKyAgICAgICAgcmV0dXJuIE5HWF9DT05GX09LOworICAgIH0KKworICAgIGNjZiA9IChuZ3hfY29yZV9jb25mX3QgKikgbmd4X2dldF9jb25mKGN5Y2xlLT5jb25mX2N0eCwgbmd4X2NvcmVfbW9kdWxlKTsKKworICAgIGlmIChjY2YtPndvcmtlcl9wcm9jZXNzZXMgPT0gMCkgeworICAgICAgICByZXR1cm4gTkdYX0NPTkZfT0s7CisgICAgfQorCisgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0VNRVJHLCBjeWNsZS0+bG9nLCAwLAorICAgICAgICAgICAgICAgICAgInRoZSBcInJ0c2lnXCIgbWV0aG9kIHJlcXVpcmVzIFwiYWNjZXB0X211dGV4XCIgdG8gYmUgb24iKTsKKworICAgIHJldHVybiBOR1hfQ09ORl9FUlJPUjsKIH0KIAogCmRpZmYgLS1naXQgYS9zcmMvZXZlbnQvbmd4X2V2ZW50LmggYi9zcmMvZXZlbnQvbmd4X2V2ZW50LmgKaW5kZXggMTkxYjQ5Mi4uNDQ3MjhlMyAxMDA2NDQKLS0tIGEvc3JjL2V2ZW50L25neF9ldmVudC5oCisrKyBiL3NyYy9ldmVudC9uZ3hfZXZlbnQuaApAQCAtNDk2LDcgKzQ5Niw3IEBACiAKIAogCi1uZ3hfaW5saW5lIHN0YXRpYyBpbnQgbmd4X2hhbmRsZV9yZWFkX2V2ZW50KG5neF9ldmVudF90ICpyZXYsIHVfaW50IGZsYWdzKQorc3RhdGljIG5neF9pbmxpbmUgbmd4X2ludF90IG5neF9oYW5kbGVfcmVhZF9ldmVudChuZ3hfZXZlbnRfdCAqcmV2LCB1X2ludCBmbGFncykKIHsKICAgICBpZiAobmd4X2V2ZW50X2ZsYWdzICYgTkdYX1VTRV9DTEVBUl9FVkVOVCkgewogCkBAIC01NDAsNyArNTQwLDcgQEAKIH0KIAogCi1uZ3hfaW5saW5lIHN0YXRpYyBpbnQgbmd4X2hhbmRsZV9sZXZlbF9yZWFkX2V2ZW50KG5neF9ldmVudF90ICpyZXYpCitzdGF0aWMgbmd4X2lubGluZSBuZ3hfaW50X3Qgbmd4X2hhbmRsZV9sZXZlbF9yZWFkX2V2ZW50KG5neF9ldmVudF90ICpyZXYpCiB7CiAgICAgaWYgKG5neF9ldmVudF9mbGFncyAmIE5HWF9VU0VfTEVWRUxfRVZFTlQpIHsKICAgICAgICAgaWYgKCFyZXYtPmFjdGl2ZSAmJiAhcmV2LT5yZWFkeSkgewpAQCAtNTY2LDcgKzU2Niw4IEBACiB9CiAKIAotbmd4X2lubGluZSBzdGF0aWMgaW50IG5neF9oYW5kbGVfd3JpdGVfZXZlbnQobmd4X2V2ZW50X3QgKndldiwgc2l6ZV90IGxvd2F0KQorc3RhdGljIG5neF9pbmxpbmUgbmd4X2ludF90IG5neF9oYW5kbGVfd3JpdGVfZXZlbnQobmd4X2V2ZW50X3QgKndldiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsb3dhdCkKIHsKICAgICBuZ3hfY29ubmVjdGlvbl90ICAqYzsKIApAQCAtNjIyLDcgKzYyMyw3IEBACiB9CiAKIAotbmd4X2lubGluZSBzdGF0aWMgaW50IG5neF9oYW5kbGVfbGV2ZWxfd3JpdGVfZXZlbnQobmd4X2V2ZW50X3QgKndldikKK3N0YXRpYyBuZ3hfaW5saW5lIG5neF9pbnRfdCBuZ3hfaGFuZGxlX2xldmVsX3dyaXRlX2V2ZW50KG5neF9ldmVudF90ICp3ZXYpCiB7CiAgICAgaWYgKG5neF9ldmVudF9mbGFncyAmIE5HWF9VU0VfTEVWRUxfRVZFTlQpIHsKICAgICAgICAgaWYgKCF3ZXYtPmFjdGl2ZSAmJiAhd2V2LT5yZWFkeSkgewpkaWZmIC0tZ2l0IGEvc3JjL2V2ZW50L25neF9ldmVudF9waXBlLmMgYi9zcmMvZXZlbnQvbmd4X2V2ZW50X3BpcGUuYwppbmRleCAyNzM5NDE5Li5hMmVkYzcxIDEwMDY0NAotLS0gYS9zcmMvZXZlbnQvbmd4X2V2ZW50X3BpcGUuYworKysgYi9zcmMvZXZlbnQvbmd4X2V2ZW50X3BpcGUuYwpAQCAtMTQsMTAgKzE0LDEwIEBACiBzdGF0aWMgbmd4X2ludF90IG5neF9ldmVudF9waXBlX3dyaXRlX3RvX2Rvd25zdHJlYW0obmd4X2V2ZW50X3BpcGVfdCAqcCk7CiAKIHN0YXRpYyBuZ3hfaW50X3Qgbmd4X2V2ZW50X3BpcGVfd3JpdGVfY2hhaW5fdG9fdGVtcF9maWxlKG5neF9ldmVudF9waXBlX3QgKnApOwotbmd4X2lubGluZSBzdGF0aWMgdm9pZCBuZ3hfZXZlbnRfcGlwZV9yZW1vdmVfc2hhZG93X2xpbmtzKG5neF9idWZfdCAqYnVmKTsKLW5neF9pbmxpbmUgc3RhdGljIHZvaWQgbmd4X2V2ZW50X3BpcGVfZnJlZV9zaGFkb3dfcmF3X2J1ZihuZ3hfY2hhaW5fdCAqKmZyZWUsCitzdGF0aWMgbmd4X2lubGluZSB2b2lkIG5neF9ldmVudF9waXBlX3JlbW92ZV9zaGFkb3dfbGlua3Mobmd4X2J1Zl90ICpidWYpOworc3RhdGljIG5neF9pbmxpbmUgdm9pZCBuZ3hfZXZlbnRfcGlwZV9mcmVlX3NoYWRvd19yYXdfYnVmKG5neF9jaGFpbl90ICoqZnJlZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfYnVmX3QgKmJ1Zik7Ci1uZ3hfaW5saW5lIHN0YXRpYyB2b2lkIG5neF9ldmVudF9waXBlX2FkZF9mcmVlX2J1ZihuZ3hfY2hhaW5fdCAqKmNoYWluLAorc3RhdGljIG5neF9pbmxpbmUgdm9pZCBuZ3hfZXZlbnRfcGlwZV9hZGRfZnJlZV9idWYobmd4X2NoYWluX3QgKipjaGFpbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9jaGFpbl90ICpjbCk7CiBzdGF0aWMgbmd4X2ludF90IG5neF9ldmVudF9waXBlX2RyYWluX2NoYWlucyhuZ3hfZXZlbnRfcGlwZV90ICpwKTsKIApAQCAtNjc2LDcgKzY3Niw3IEBACiB9CiAKIAotbmd4X2lubGluZSBzdGF0aWMgdm9pZCBuZ3hfZXZlbnRfcGlwZV9yZW1vdmVfc2hhZG93X2xpbmtzKG5neF9idWZfdCAqYnVmKQorc3RhdGljIG5neF9pbmxpbmUgdm9pZCBuZ3hfZXZlbnRfcGlwZV9yZW1vdmVfc2hhZG93X2xpbmtzKG5neF9idWZfdCAqYnVmKQogewogICAgIG5neF9idWZfdCAgKmIsICpuZXh0OwogCkBAIC03MDYsNyArNzA2LDcgQEAKIH0KIAogCi1uZ3hfaW5saW5lIHN0YXRpYyB2b2lkIG5neF9ldmVudF9waXBlX2ZyZWVfc2hhZG93X3Jhd19idWYobmd4X2NoYWluX3QgKipmcmVlLAorc3RhdGljIG5neF9pbmxpbmUgdm9pZCBuZ3hfZXZlbnRfcGlwZV9mcmVlX3NoYWRvd19yYXdfYnVmKG5neF9jaGFpbl90ICoqZnJlZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfYnVmX3QgKmJ1ZikKIHsKICAgICBuZ3hfYnVmX3QgICAgKnM7CkBAIC03MzUsNyArNzM1LDcgQEAKIH0KIAogCi1uZ3hfaW5saW5lIHN0YXRpYyB2b2lkIG5neF9ldmVudF9waXBlX2FkZF9mcmVlX2J1ZihuZ3hfY2hhaW5fdCAqKmNoYWluLAorc3RhdGljIG5neF9pbmxpbmUgdm9pZCBuZ3hfZXZlbnRfcGlwZV9hZGRfZnJlZV9idWYobmd4X2NoYWluX3QgKipjaGFpbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9jaGFpbl90ICpjbCkKIHsKICAgICBpZiAoKmNoYWluID09IE5VTEwpIHsKZGlmZiAtLWdpdCBhL3NyYy9ldmVudC9uZ3hfZXZlbnRfdGltZXIuaCBiL3NyYy9ldmVudC9uZ3hfZXZlbnRfdGltZXIuaAppbmRleCA5ZDYzMTlhLi4wOTBkNDA0IDEwMDY0NAotLS0gYS9zcmMvZXZlbnQvbmd4X2V2ZW50X3RpbWVyLmgKKysrIGIvc3JjL2V2ZW50L25neF9ldmVudF90aW1lci5oCkBAIC00Miw3ICs0Miw3IEBACiBleHRlcm4gbmd4X3JidHJlZV90ICAgICAgICAgICAgICAgICAgICAgICBuZ3hfZXZlbnRfdGltZXJfc2VudGluZWw7CiAKIAotbmd4X2lubGluZSBzdGF0aWMgdm9pZCBuZ3hfZXZlbnRfZGVsX3RpbWVyKG5neF9ldmVudF90ICpldikKK3N0YXRpYyBuZ3hfaW5saW5lIHZvaWQgbmd4X2V2ZW50X2RlbF90aW1lcihuZ3hfZXZlbnRfdCAqZXYpCiB7CiAgICAgbmd4X2xvZ19kZWJ1ZzIoTkdYX0xPR19ERUJVR19FVkVOVCwgZXYtPmxvZywgMCwKICAgICAgICAgICAgICAgICAgICAiZXZlbnQgdGltZXIgZGVsOiAlZDogJWQiLApAQCAtNjgsNyArNjgsNyBAQAogfQogCiAKLW5neF9pbmxpbmUgc3RhdGljIHZvaWQgbmd4X2V2ZW50X2FkZF90aW1lcihuZ3hfZXZlbnRfdCAqZXYsIG5neF9tc2VjX3QgdGltZXIpCitzdGF0aWMgbmd4X2lubGluZSB2b2lkIG5neF9ldmVudF9hZGRfdGltZXIobmd4X2V2ZW50X3QgKmV2LCBuZ3hfbXNlY190IHRpbWVyKQogewogICAgIG5neF9pbnRfdCAga2V5OwogCmRpZmYgLS1naXQgYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2F1dG9pbmRleF9oYW5kbGVyLmMgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2F1dG9pbmRleF9oYW5kbGVyLmMKaW5kZXggYzc4ZDRlNi4uZjVlYzk3MCAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9hdXRvaW5kZXhfaGFuZGxlci5jCisrKyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfYXV0b2luZGV4X2hhbmRsZXIuYwpAQCAtMzA0LDEwICszMDQsOSBAQAogICAgICAgICAgICAgICAgKyAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMSBpcyBmb3IgIi8iICovCiAgICAgICAgICAgICAgICArIGVudHJ5W2ldLm5hbWUubGVuICsgZW50cnlbaV0uZXNjYXBlCiAgICAgICAgICAgICAgICArIHNpemVvZigiXCI+IikgLSAxCi0gICAgICAgICAgICAgICArIE5HWF9IVFRQX0FVVE9JTkRFWF9OQU1FX0xFTgorICAgICAgICAgICAgICAgKyBOR1hfSFRUUF9BVVRPSU5ERVhfTkFNRV9MRU4gKyBzaXplb2YoIiZndDsiKSAtIDIKICAgICAgICAgICAgICAgICsgc2l6ZW9mKCI8L2E+IikgLSAxCi0gICAgICAgICAgICAgICArIDEKLSAgICAgICAgICAgICAgICsgc2l6ZW9mKCIyOC1TZXAtMTk3MCAxMjowMCAiKSAtIDEKKyAgICAgICAgICAgICAgICsgc2l6ZW9mKCIgMjgtU2VwLTE5NzAgMTI6MDAgIikgLSAxCiAgICAgICAgICAgICAgICArIHNpemVvZigiMTAyM0ciKSAtIDEKICAgICAgICAgICAgICAgICsgMjsKICAgICB9CmRpZmYgLS1naXQgYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3JhbmdlX2ZpbHRlci5jIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9yYW5nZV9maWx0ZXIuYwppbmRleCBmOTY0NTZjLi44Zjk4NzE5IDEwMDY0NAotLS0gYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3JhbmdlX2ZpbHRlci5jCisrKyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfcmFuZ2VfZmlsdGVyLmMKQEAgLTM0MCw3ICszNDAsNyBAQAogICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwogICAgIH0KIAotICAgIGJvdW5kYXJ5ID0gbmd4X25leHRfdGVtcF9udW1iZXIoMCk7CisgICAgYm91bmRhcnkgPSAodWludDMyX3QpIG5neF9uZXh0X3RlbXBfbnVtYmVyKDApOwogCiAgICAgLyoKICAgICAgKiBUaGUgYm91bmRhcnkgaGVhZGVyIG9mIHRoZSByYW5nZToKZGlmZiAtLWdpdCBhL3NyYy9odHRwL21vZHVsZXMvcHJveHkvbmd4X2h0dHBfcHJveHlfaGFuZGxlci5jIGIvc3JjL2h0dHAvbW9kdWxlcy9wcm94eS9uZ3hfaHR0cF9wcm94eV9oYW5kbGVyLmMKaW5kZXggOTE1ZDM3OC4uYzBhOGNmMyAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbW9kdWxlcy9wcm94eS9uZ3hfaHR0cF9wcm94eV9oYW5kbGVyLmMKKysrIGIvc3JjL2h0dHAvbW9kdWxlcy9wcm94eS9uZ3hfaHR0cF9wcm94eV9oYW5kbGVyLmMKQEAgLTE2NSw2ICsxNjUsMTMgQEAKICAgICAgIG9mZnNldG9mKG5neF9odHRwX3Byb3h5X2xvY19jb25mX3QsIHRlbXBfcGF0aCksCiAgICAgICAodm9pZCAqKSBuZ3hfZ2FyYmFnZV9jb2xsZWN0b3JfdGVtcF9oYW5kbGVyIH0sCiAKKyAgICB7IG5neF9zdHJpbmcoInByb3h5X21heF90ZW1wX2ZpbGVfc2l6ZSIpLAorICAgICAgTkdYX0hUVFBfTUFJTl9DT05GfE5HWF9IVFRQX1NSVl9DT05GfE5HWF9IVFRQX0xPQ19DT05GfE5HWF9DT05GX1RBS0UxLAorICAgICAgbmd4X2NvbmZfc2V0X3NpemVfc2xvdCwKKyAgICAgIE5HWF9IVFRQX0xPQ19DT05GX09GRlNFVCwKKyAgICAgIG9mZnNldG9mKG5neF9odHRwX3Byb3h5X2xvY19jb25mX3QsIG1heF90ZW1wX2ZpbGVfc2l6ZSksCisgICAgICBOVUxMIH0sCisKICAgICB7IG5neF9zdHJpbmcoInByb3h5X3RlbXBfZmlsZV93cml0ZV9zaXplIiksCiAgICAgICBOR1hfSFRUUF9NQUlOX0NPTkZ8TkdYX0hUVFBfU1JWX0NPTkZ8TkdYX0hUVFBfTE9DX0NPTkZ8TkdYX0NPTkZfVEFLRTEsCiAgICAgICBuZ3hfY29uZl9zZXRfc2l6ZV9zbG90LApAQCAtOTU0LDEyICs5NjEsNyBAQAogICAgIGNvbmYtPnJlYWRfdGltZW91dCA9IE5HWF9DT05GX1VOU0VUX01TRUM7CiAgICAgY29uZi0+YnVzeV9idWZmZXJzX3NpemUgPSBOR1hfQ09ORl9VTlNFVF9TSVpFOwogCi0gICAgLyoKLSAgICAgKiAicHJveHlfbWF4X3RlbXBfZmlsZV9zaXplIiBpcyBoYXJkY29kZWQgdG8gMUcgZm9yIHJldmVyc2UgcHJveHksCi0gICAgICogaXQgc2hvdWxkIGJlIGNvbmZpZ3VyYWJsZSBpbiB0aGUgZ2VuZXJpYyBwcm94eQotICAgICAqLwotICAgIGNvbmYtPm1heF90ZW1wX2ZpbGVfc2l6ZSA9IDEwMjQgKiAxMDI0ICogMTAyNDsKLQorICAgIGNvbmYtPm1heF90ZW1wX2ZpbGVfc2l6ZSA9IE5HWF9DT05GX1VOU0VUX1NJWkU7CiAgICAgY29uZi0+dGVtcF9maWxlX3dyaXRlX3NpemUgPSBOR1hfQ09ORl9VTlNFVF9TSVpFOwogCiAgICAgLyogInByb3h5X2N5Y2xpY190ZW1wX2ZpbGUiIGlzIGRpc2FibGVkICovCkBAIC0xMDU5LDExICsxMDYxLDI1IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2LT5tYXhfdGVtcF9maWxlX3NpemUsIE5HWF9DT05GX1VOU0VUX1NJWkUpOwogCiAgICAgaWYgKGNvbmYtPm1heF90ZW1wX2ZpbGVfc2l6ZSA9PSBOR1hfQ09ORl9VTlNFVF9TSVpFKSB7Ci0gICAgICAgIGNvbmYtPm1heF90ZW1wX2ZpbGVfc2l6ZSA9IDIgKiBzaXplOwogCi0gICAgfSBlbHNlIGlmIChjb25mLT5tYXhfdGVtcF9maWxlX3NpemUgPCBzaXplKSB7CisgICAgICAgIC8qCisgICAgICAgICAqICJwcm94eV9tYXhfdGVtcF9maWxlX3NpemUiIGlzIHNldCB0byAxRyBmb3IgcmV2ZXJzZSBwcm94eSwKKyAgICAgICAgICogaXQgc2hvdWxkIGJlIG11Y2ggbGVzcyBpbiB0aGUgZ2VuZXJpYyBwcm94eQorICAgICAgICAgKi8KKworICAgICAgICBjb25mLT5tYXhfdGVtcF9maWxlX3NpemUgPSAxMDI0ICogMTAyNCAqIDEwMjQ7CisKKyNpZiAwCisgICAgICAgIGNvbmYtPm1heF90ZW1wX2ZpbGVfc2l6ZSA9IDIgKiBzaXplOworI2VuZGlmCisKKworICAgIH0gZWxzZSBpZiAoY29uZi0+bWF4X3RlbXBfZmlsZV9zaXplICE9IDAKKyAgICAgICAgICAgICAgICYmIGNvbmYtPm1heF90ZW1wX2ZpbGVfc2l6ZSA8IHNpemUpCisgICAgewogICAgICAgICBuZ3hfY29uZl9sb2dfZXJyb3IoTkdYX0xPR19FTUVSRywgY2YsIDAsCi0gICAgICAgICAgICAgIlwicHJveHlfbWF4X3RlbXBfZmlsZV9zaXplXCIgbXVzdCBiZSBlcXVhbCBvciBiaWdnZXIgdGhhbiAiCisgICAgICAgICAgICAgIlwicHJveHlfbWF4X3RlbXBfZmlsZV9zaXplXCIgbXVzdCBiZSBlcXVhbCB0byB6ZXJvIHRvIGRpc2FibGUgIgorICAgICAgICAgICAgICJ0aGUgdGVtcG9yYXJ5IGZpbGVzIHVzYWdlIG9yIG11c3QgYmUgZXF1YWwgb3IgYmlnZ2VyIHRoYW4gIgogICAgICAgICAgICAgICJtYXhpbXVtIG9mIHRoZSB2YWx1ZSBvZiBcInByb3h5X2hlYWRlcl9idWZmZXJfc2l6ZVwiIGFuZCAiCiAgICAgICAgICAgICAgIm9uZSBvZiB0aGUgXCJwcm94eV9idWZmZXJzXCIiKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbmd4X2h0dHBfY29yZV9tb2R1bGUuYyBiL3NyYy9odHRwL25neF9odHRwX2NvcmVfbW9kdWxlLmMKaW5kZXggMjlhNmY3Ni4uYzc2NGIyYSAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbmd4X2h0dHBfY29yZV9tb2R1bGUuYworKysgYi9zcmMvaHR0cC9uZ3hfaHR0cF9jb3JlX21vZHVsZS5jCkBAIC0xMyw3ICsxMyw4IEBACiAKICNkZWZpbmUgTkdYX0hUVFBfTE9DQVRJT05fRVhBQ1QgICAgICAgICAgIDEKICNkZWZpbmUgTkdYX0hUVFBfTE9DQVRJT05fQVVUT19SRURJUkVDVCAgIDIKLSNkZWZpbmUgTkdYX0hUVFBfTE9DQVRJT05fUkVHRVggICAgICAgICAgIDMKKyNkZWZpbmUgTkdYX0hUVFBfTE9DQVRJT05fTk9SRUdFWCAgICAgICAgIDMKKyNkZWZpbmUgTkdYX0hUVFBfTE9DQVRJT05fUkVHRVggICAgICAgICAgIDQKIAogCiBzdGF0aWMgdm9pZCBuZ3hfaHR0cF9waGFzZV9ldmVudF9oYW5kbGVyKG5neF9ldmVudF90ICpyZXYpOwpAQCAtNTY0LDEyICs1NjUsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfYXJyYXlfdCAqbG9jYXRpb25zLCBzaXplX3QgbGVuKQogewogICAgIG5neF9pbnRfdCAgICAgICAgICAgICAgICAgIG4sIHJjOwotICAgIG5neF91aW50X3QgICAgICAgICAgICAgICAgIGksIGZvdW5kOworICAgIG5neF91aW50X3QgICAgICAgICAgICAgICAgIGksIGZvdW5kLCBub3JlZ2V4OwogICAgIG5neF9odHRwX2NvcmVfbG9jX2NvbmZfdCAgKmNsY2YsICoqY2xjZnA7CiAKICAgICBuZ3hfbG9nX2RlYnVnMChOR1hfTE9HX0RFQlVHX0hUVFAsIHItPmNvbm5lY3Rpb24tPmxvZywgMCwgImZpbmQgbG9jYXRpb24iKTsKIAogICAgIGZvdW5kID0gMDsKKyAgICBub3JlZ2V4ID0gMDsKIAogICAgIGNsY2ZwID0gbG9jYXRpb25zLT5lbHRzOwogICAgIGZvciAoaSA9IDA7IGkgPCBsb2NhdGlvbnMtPm5lbHRzOyBpKyspIHsKQEAgLTYxOSw2ICs2MjEsNyBAQAogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICByLT5sb2NfY29uZiA9IGNsY2ZwW2ldLT5sb2NfY29uZjsKKyAgICAgICAgICAgIG5vcmVnZXggPSBjbGNmcFtpXS0+bm9yZWdleDsKICAgICAgICAgICAgIGZvdW5kID0gMTsKICAgICAgICAgfQogICAgIH0KQEAgLTYzNyw2ICs2NDAsMTAgQEAKIAogI2lmIChOR1hfUENSRSkKIAorICAgIGlmIChub3JlZ2V4KSB7CisgICAgICAgIHJldHVybiBOR1hfSFRUUF9MT0NBVElPTl9OT1JFR0VYOworICAgIH0KKwogICAgIC8qIHJlZ2V4IG1hdGNoZXMgKi8KIAogICAgIGZvciAoLyogdm9pZCAqLzsgaSA8IGxvY2F0aW9ucy0+bmVsdHM7IGkrKykgewpAQCAtMTA2OSw2ICsxMDc2LDEzIEBACiAgICAgICAgICAgICBjbGNmLT5uYW1lID0gdmFsdWVbMl07CiAgICAgICAgICAgICBjbGNmLT5leGFjdF9tYXRjaCA9IDE7CiAKKyAgICAgICAgfSBlbHNlIGlmICh2YWx1ZVsxXS5sZW4gPT0gMgorICAgICAgICAgICAgICAgICAgICYmIHZhbHVlWzFdLmRhdGFbMF0gPT0gJ14nCisgICAgICAgICAgICAgICAgICAgJiYgdmFsdWVbMV0uZGF0YVsxXSA9PSAnficpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNsY2YtPm5hbWUgPSB2YWx1ZVsyXTsKKyAgICAgICAgICAgIGNsY2YtPm5vcmVnZXggPSAxOworCiAgICAgICAgIH0gZWxzZSBpZiAoKHZhbHVlWzFdLmxlbiA9PSAxICYmIHZhbHVlWzFdLmRhdGFbMF0gPT0gJ34nKQogICAgICAgICAgICAgICAgICAgIHx8ICh2YWx1ZVsxXS5sZW4gPT0gMgogICAgICAgICAgICAgICAgICAgICAgICAmJiB2YWx1ZVsxXS5kYXRhWzBdID09ICd+JwpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbmd4X2h0dHBfY29yZV9tb2R1bGUuaCBiL3NyYy9odHRwL25neF9odHRwX2NvcmVfbW9kdWxlLmgKaW5kZXggOWExNzEzMC4uYTcwYjQ3MiAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbmd4X2h0dHBfY29yZV9tb2R1bGUuaAorKysgYi9zcmMvaHR0cC9uZ3hfaHR0cF9jb3JlX21vZHVsZS5oCkBAIC0xNDIsNiArMTQyLDggQEAKICNlbmRpZgogCiAgICAgdW5zaWduZWQgICAgICBleGFjdF9tYXRjaDoxOworICAgIHVuc2lnbmVkICAgICAgbm9yZWdleDoxOworCiAgICAgdW5zaWduZWQgICAgICBhdXRvX3JlZGlyZWN0OjE7CiAgICAgdW5zaWduZWQgICAgICBhbGlhczoxOwogCmRpZmYgLS1naXQgYS9zcmMvb3MvdW5peC9uZ3hfZXJybm8uaCBiL3NyYy9vcy91bml4L25neF9lcnJuby5oCmluZGV4IDlhMzkyZjguLmU4N2VjNWYgMTAwNjQ0Ci0tLSBhL3NyYy9vcy91bml4L25neF9lcnJuby5oCisrKyBiL3NyYy9vcy91bml4L25neF9lcnJuby5oCkBAIC0zNCw2ICszNCw3IEBACiAjZGVmaW5lIE5HWF9FVElNRURPVVQgICAgIEVUSU1FRE9VVAogI2RlZmluZSBOR1hfRUNPTk5SRUZVU0VEICBFQ09OTlJFRlVTRUQKICNkZWZpbmUgTkdYX0VIT1NUVU5SRUFDSCAgRUhPU1RVTlJFQUNICisjZGVmaW5lIE5HWF9FTk9TWVMgICAgICAgIEVOT1NZUwogI2RlZmluZSBOR1hfRUNBTkNFTEVEICAgICBFQ0FOQ0VMRUQKICNkZWZpbmUgTkdYX0VOT01PUkVGSUxFUyAgMAogCmRpZmYgLS1naXQgYS9zcmMvb3MvdW5peC9uZ3hfZmlsZXMuYyBiL3NyYy9vcy91bml4L25neF9maWxlcy5jCmluZGV4IDdiZjVhZDEuLjUyYWE5YjYgMTAwNjQ0Ci0tLSBhL3NyYy9vcy91bml4L25neF9maWxlcy5jCisrKyBiL3NyYy9vcy91bml4L25neF9maWxlcy5jCkBAIC0xMDksNyArMTA5LDcgQEAKIH0KIAogCi1pbnQgbmd4X29wZW5fdGVtcGZpbGUodV9jaGFyICpuYW1lLCBuZ3hfdWludF90IHBlcnNpc3RlbnQpCituZ3hfZmRfdCBuZ3hfb3Blbl90ZW1wZmlsZSh1X2NoYXIgKm5hbWUsIG5neF91aW50X3QgcGVyc2lzdGVudCkKIHsKICAgICBuZ3hfZmRfdCAgZmQ7CiAKQEAgLTIxNiw3ICsyMTYsNyBAQAogfQogCiAKLWludCBuZ3hfb3Blbl9kaXIobmd4X3N0cl90ICpuYW1lLCBuZ3hfZGlyX3QgKmRpcikKK25neF9pbnRfdCBuZ3hfb3Blbl9kaXIobmd4X3N0cl90ICpuYW1lLCBuZ3hfZGlyX3QgKmRpcikKIHsKICAgICBkaXItPmRpciA9IG9wZW5kaXIoKGNvbnN0IGNoYXIgKikgbmFtZS0+ZGF0YSk7CiAKZGlmZiAtLWdpdCBhL3NyYy9vcy91bml4L25neF9maWxlcy5oIGIvc3JjL29zL3VuaXgvbmd4X2ZpbGVzLmgKaW5kZXggYjc4OWQ2MS4uMDNkZTk0NiAxMDA2NDQKLS0tIGEvc3JjL29zL3VuaXgvbmd4X2ZpbGVzLmgKKysrIGIvc3JjL29zL3VuaXgvbmd4X2ZpbGVzLmgKQEAgLTM3LDcgKzM3LDcgQEAKICNkZWZpbmUgbmd4X2RlbGV0ZV9maWxlX24gICAgICAgICJ1bmxpbmsoKSIKIAogCi1pbnQgbmd4X29wZW5fdGVtcGZpbGUodV9jaGFyICpuYW1lLCBuZ3hfdWludF90IHBlcnNpc3RlbnQpOworbmd4X2ZkX3Qgbmd4X29wZW5fdGVtcGZpbGUodV9jaGFyICpuYW1lLCBuZ3hfdWludF90IHBlcnNpc3RlbnQpOwogI2RlZmluZSBuZ3hfb3Blbl90ZW1wZmlsZV9uICAgICAgIm9wZW4oKSIKIAogCkBAIC03Nyw3ICs3Nyw3IEBACiAjZGVmaW5lIE5HWF9ESVJfTUFTS19MRU4gICAgICAgICAwCiAKIAotaW50IG5neF9vcGVuX2RpcihuZ3hfc3RyX3QgKm5hbWUsIG5neF9kaXJfdCAqZGlyKTsKK25neF9pbnRfdCBuZ3hfb3Blbl9kaXIobmd4X3N0cl90ICpuYW1lLCBuZ3hfZGlyX3QgKmRpcik7CiAjZGVmaW5lIG5neF9vcGVuX2Rpcl9uICAgICAgICAgICAib3BlbmRpcigpIgogCiAKZGlmZiAtLWdpdCBhL3NyYy9vcy91bml4L25neF9mcmVlYnNkX2NvbmZpZy5oIGIvc3JjL29zL3VuaXgvbmd4X2ZyZWVic2RfY29uZmlnLmgKaW5kZXggNDg0MGE5OS4uN2YzYjI4NiAxMDA2NDQKLS0tIGEvc3JjL29zL3VuaXgvbmd4X2ZyZWVic2RfY29uZmlnLmgKKysrIGIvc3JjL29zL3VuaXgvbmd4X2ZyZWVic2RfY29uZmlnLmgKQEAgLTYwLDQxICs2MCwyMyBAQAogI2luY2x1ZGUgPG5neF9hdXRvX2NvbmZpZy5oPgogCiAKLSNpZm5kZWYgSEFWRV9TRUxFQ1QKLSNkZWZpbmUgSEFWRV9TRUxFQ1QgIDEKLSNlbmRpZgotCi0KLSNpZm5kZWYgSEFWRV9QT0xMCi0jZGVmaW5lIEhBVkVfUE9MTCAgMQotI2VuZGlmCiAjaWYgKEhBVkVfUE9MTCkKICNpbmNsdWRlIDxwb2xsLmg+CiAjZW5kaWYKIAotICAgICAgIC8qIEZyZWVCU0QgYWlvIHN1cHBvcnRlZCB2aWEga3F1ZXVlICovCi0KLSNpZiAoX19GcmVlQlNEX18gPT0gNCAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA0MzAwMDApIFwKLSAgICB8fCBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA1MDAwMTQKLQotI2lmbmRlZiBIQVZFX0FJTwotI2RlZmluZSBIQVZFX0FJTyAgMQotI2VuZGlmCi0KLSNlbmRpZgogCiAjaWYgKEhBVkVfQUlPKQogI2luY2x1ZGUgPGFpby5oPgogI2VuZGlmCiAKIAotI2lmIGRlZmluZWQgU09fQUNDRVBURklMVEVSICYmICFkZWZpbmVkIEhBVkVfREVGRVJSRURfQUNDRVBUCi0jZGVmaW5lIEhBVkVfREVGRVJSRURfQUNDRVBUICAxCisjaWYgKEhBVkVfS1FVRVVFKQorI2luY2x1ZGUgPHN5cy9ldmVudC5oPgogI2VuZGlmCiAKIAotI2lmIChIQVZFX0tRVUVVRSkKLSNpbmNsdWRlIDxzeXMvZXZlbnQuaD4KKyNpZiBkZWZpbmVkIFNPX0FDQ0VQVEZJTFRFUiAmJiAhZGVmaW5lZCBIQVZFX0RFRkVSUkVEX0FDQ0VQVAorI2RlZmluZSBIQVZFX0RFRkVSUkVEX0FDQ0VQVCAgMQogI2VuZGlmCiAKIApkaWZmIC0tZ2l0IGEvc3JjL29zL3VuaXgvbmd4X2xpbnV4X2NvbmZpZy5oIGIvc3JjL29zL3VuaXgvbmd4X2xpbnV4X2NvbmZpZy5oCmluZGV4IGZiMmNiYzguLjU3ZWU1MDUgMTAwNjQ0Ci0tLSBhL3NyYy9vcy91bml4L25neF9saW51eF9jb25maWcuaAorKysgYi9zcmMvb3MvdW5peC9uZ3hfbGludXhfY29uZmlnLmgKQEAgLTYzLDE5ICs2MywxMSBAQAogI2VuZGlmCiAKIAotCi0jaWZuZGVmIEhBVkVfU0VMRUNUCi0jZGVmaW5lIEhBVkVfU0VMRUNUICAxCi0jZW5kaWYKLQotCi0jaWZuZGVmIEhBVkVfUE9MTAotI2RlZmluZSBIQVZFX1BPTEwgIDEKLSNlbmRpZgogI2lmIChIQVZFX1BPTEwpCiAjaW5jbHVkZSA8cG9sbC5oPgogI2VuZGlmCiAKKwogI2lmIChIQVZFX0VQT0xMKQogI2luY2x1ZGUgPHN5cy9lcG9sbC5oPgogI2VuZGlmIC8qIEhBVkVfRVBPTEwgKi8KZGlmZiAtLWdpdCBhL3NyYy9vcy91bml4L25neF9saW51eF9pbml0LmMgYi9zcmMvb3MvdW5peC9uZ3hfbGludXhfaW5pdC5jCmluZGV4IDNjN2QzNDQuLjM5N2QzNDIgMTAwNjQ0Ci0tLSBhL3NyYy9vcy91bml4L25neF9saW51eF9pbml0LmMKKysrIGIvc3JjL29zL3VuaXgvbmd4X2xpbnV4X2luaXQuYwpAQCAtMzAsOCArMzAsOSBAQAogCiBuZ3hfaW50X3Qgbmd4X29zX2luaXQobmd4X2xvZ190ICpsb2cpCiB7Ci0gICAgaW50ICAgICBuYW1lWzJdOwotICAgIHNpemVfdCAgbGVuOworICAgIGludCAgICAgICAgbmFtZVsyXTsKKyAgICBzaXplX3QgICAgIGxlbjsKKyAgICBuZ3hfZXJyX3QgIGVycjsKIAogICAgIG5hbWVbMF0gPSBDVExfS0VSTjsKICAgICBuYW1lWzFdID0gS0VSTl9PU1RZUEU7CkBAIC01OCwxMCArNTksMTYgQEAKICAgICBuYW1lWzFdID0gS0VSTl9SVFNJR01BWDsKICAgICBsZW4gPSBzaXplb2Yobmd4X2xpbnV4X3J0c2lnX21heCk7CiAgICAgaWYgKHN5c2N0bChuYW1lLCBzaXplb2YobmFtZSksICZuZ3hfbGludXhfcnRzaWdfbWF4LCAmbGVuLCBOVUxMLCAwKSA9PSAtMSkgewotICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfSU5GTywgbG9nLCBuZ3hfZXJybm8sCi0gICAgICAgICAgICAgICAgICAgICAgInN5c2N0bChLRVJOX1JUU0lHTUFYKSBmYWlsZWQiKTsKLSAgICAgICAgbmd4X2xpbnV4X3J0c2lnX21heCA9IDA7CisgICAgICAgIGVyciA9IG5neF9lcnJubzsKIAorICAgICAgICBpZiAoZXJyICE9IE5HWF9FTk9URElSKSB7CisgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIGxvZywgZXJyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAic3lzY3RsKEtFUk5fUlRTSUdNQVgpIGZhaWxlZCIpOworCisgICAgICAgICAgICByZXR1cm4gTkdYX0VSUk9SOworICAgICAgICB9CisKKyAgICAgICAgbmd4X2xpbnV4X3J0c2lnX21heCA9IDA7CiAgICAgfQogCiAgICAgbmd4X2luaXRfc2V0cHJvY3RpdGxlKGxvZyk7CmRpZmYgLS1naXQgYS9zcmMvb3MvdW5peC9uZ3hfcG9zaXhfY29uZmlnLmggYi9zcmMvb3MvdW5peC9uZ3hfcG9zaXhfY29uZmlnLmgKaW5kZXggYmFjMDJmNy4uYjE4NzIzNiAxMDA2NDQKLS0tIGEvc3JjL29zL3VuaXgvbmd4X3Bvc2l4X2NvbmZpZy5oCisrKyBiL3NyYy9vcy91bml4L25neF9wb3NpeF9jb25maWcuaApAQCAtMTQsNiArMTQsMTEgQEAKICNlbmRpZgogCiAKKyNpZiAwCisjZGVmaW5lIF9SRUVOVFJBTlQKKyNlbmRpZgorCisKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpbmNsdWRlIDxzeXMvdGltZS5oPgogI2lmIChOR1hfSEFWRV9VTklTVERfSCkKQEAgLTY1LDE0ICs3MCw2IEBACiAjaW5jbHVkZSA8bmd4X2F1dG9fY29uZmlnLmg+CiAKIAotI2lmbmRlZiBIQVZFX1NFTEVDVAotI2RlZmluZSBIQVZFX1NFTEVDVCAgMQotI2VuZGlmCi0KLQotI2lmbmRlZiBIQVZFX1BPTEwKLSNkZWZpbmUgSEFWRV9QT0xMICAxCi0jZW5kaWYKICNpZiAoSEFWRV9QT0xMKQogI2luY2x1ZGUgPHBvbGwuaD4KICNlbmRpZgpAQCAtMTA0LDcgKzEwMSwxMSBAQAogI2VuZGlmCiAKIAorI2lmIChOR1hfSEFWRV9TRVRQUk9DVElUTEUpCisjZGVmaW5lIG5neF9zZXRwcm9jdGl0bGUgICAgICAgIHNldHByb2N0aXRsZQorI2Vsc2UKICNkZWZpbmUgbmd4X3NldHByb2N0aXRsZSh0aXRsZSkKKyNlbmRpZgogCiAKICNkZWZpbmUgTkdYX1BPU0lYX0lPICAxCmRpZmYgLS1naXQgYS9zcmMvb3MvdW5peC9uZ3hfcHJvY2Vzc19jeWNsZS5jIGIvc3JjL29zL3VuaXgvbmd4X3Byb2Nlc3NfY3ljbGUuYwppbmRleCAwNDQ3YmM0Li4zN2IyZWYxIDEwMDY0NAotLS0gYS9zcmMvb3MvdW5peC9uZ3hfcHJvY2Vzc19jeWNsZS5jCisrKyBiL3NyYy9vcy91bml4L25neF9wcm9jZXNzX2N5Y2xlLmMKQEAgLTEyLDE1ICsxMiwxOCBAQAogCiBzdGF0aWMgdm9pZCBuZ3hfc3RhcnRfd29ya2VyX3Byb2Nlc3NlcyhuZ3hfY3ljbGVfdCAqY3ljbGUsIG5neF9pbnRfdCBuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X2ludF90IHR5cGUpOworc3RhdGljIHZvaWQgbmd4X3N0YXJ0X2dhcmJhZ2VfY29sbGVjdG9yKG5neF9jeWNsZV90ICpjeWNsZSwgbmd4X2ludF90IHR5cGUpOwogc3RhdGljIHZvaWQgbmd4X3NpZ25hbF93b3JrZXJfcHJvY2Vzc2VzKG5neF9jeWNsZV90ICpjeWNsZSwgaW50IHNpZ25vKTsKIHN0YXRpYyBuZ3hfdWludF90IG5neF9yZWFwX2NoaWxkcyhuZ3hfY3ljbGVfdCAqY3ljbGUpOwogc3RhdGljIHZvaWQgbmd4X21hc3Rlcl9leGl0KG5neF9jeWNsZV90ICpjeWNsZSk7CiBzdGF0aWMgdm9pZCBuZ3hfd29ya2VyX3Byb2Nlc3NfY3ljbGUobmd4X2N5Y2xlX3QgKmN5Y2xlLCB2b2lkICpkYXRhKTsKK3N0YXRpYyB2b2lkIG5neF93b3JrZXJfcHJvY2Vzc19pbml0KG5neF9jeWNsZV90ICpjeWNsZSk7CiBzdGF0aWMgdm9pZCBuZ3hfY2hhbm5lbF9oYW5kbGVyKG5neF9ldmVudF90ICpldik7CiAjaWYgKE5HWF9USFJFQURTKQogc3RhdGljIHZvaWQgbmd4X3dha2V1cF93b3JrZXJfdGhyZWFkcyhuZ3hfY3ljbGVfdCAqY3ljbGUpOwogc3RhdGljIHZvaWQgKm5neF93b3JrZXJfdGhyZWFkX2N5Y2xlKHZvaWQgKmRhdGEpOwogI2VuZGlmCitzdGF0aWMgdm9pZCBuZ3hfZ2FyYmFnZV9jb2xsZWN0b3JfY3ljbGUobmd4X2N5Y2xlX3QgKmN5Y2xlLCB2b2lkICpkYXRhKTsKIAogCiBuZ3hfdWludF90ICAgIG5neF9wcm9jZXNzOwpAQCAtMTA5LDYgKzExMiw3IEBACiAKICAgICBuZ3hfc3RhcnRfd29ya2VyX3Byb2Nlc3NlcyhjeWNsZSwgY2NmLT53b3JrZXJfcHJvY2Vzc2VzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5HWF9QUk9DRVNTX1JFU1BBV04pOworICAgIG5neF9zdGFydF9nYXJiYWdlX2NvbGxlY3RvcihjeWNsZSwgTkdYX1BST0NFU1NfUkVTUEFXTik7CiAKICAgICBuZ3hfbmV3X2JpbmFyeSA9IDA7CiAgICAgZGVsYXkgPSAwOwpAQCAtMTc5LDYgKzE4Myw3IEBACiAgICAgICAgICAgICBpZiAoIW5neF9ub2FjY2VwdGluZykgewogICAgICAgICAgICAgICAgIG5neF9zdGFydF93b3JrZXJfcHJvY2Vzc2VzKGN5Y2xlLCBjY2YtPndvcmtlcl9wcm9jZXNzZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkdYX1BST0NFU1NfSlVTVF9SRVNQQVdOKTsKKyAgICAgICAgICAgICAgICBuZ3hfc3RhcnRfZ2FyYmFnZV9jb2xsZWN0b3IoY3ljbGUsIE5HWF9QUk9DRVNTX0pVU1RfUkVTUEFXTik7CiAgICAgICAgICAgICAgICAgbGl2ZSA9IDE7CiAgICAgICAgICAgICAgICAgbmd4X3NpZ25hbF93b3JrZXJfcHJvY2Vzc2VzKGN5Y2xlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9zaWduYWxfdmFsdWUoTkdYX1NIVVRET1dOX1NJR05BTCkpOwpAQCAtMTkzLDYgKzE5OCw3IEBACiAKICAgICAgICAgICAgICAgICBuZ3hfc3RhcnRfd29ya2VyX3Byb2Nlc3NlcyhjeWNsZSwgY2NmLT53b3JrZXJfcHJvY2Vzc2VzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5HWF9QUk9DRVNTX1JFU1BBV04pOworICAgICAgICAgICAgICAgIG5neF9zdGFydF9nYXJiYWdlX2NvbGxlY3RvcihjeWNsZSwgTkdYX1BST0NFU1NfUkVTUEFXTik7CiAgICAgICAgICAgICAgICAgbmd4X25vYWNjZXB0aW5nID0gMDsKIAogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMjExLDYgKzIxNyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfY29yZV9tb2R1bGUpOwogICAgICAgICAgICAgbmd4X3N0YXJ0X3dvcmtlcl9wcm9jZXNzZXMoY3ljbGUsIGNjZi0+d29ya2VyX3Byb2Nlc3NlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5HWF9QUk9DRVNTX0pVU1RfUkVTUEFXTik7CisgICAgICAgICAgICBuZ3hfc3RhcnRfZ2FyYmFnZV9jb2xsZWN0b3IoY3ljbGUsIE5HWF9QUk9DRVNTX0pVU1RfUkVTUEFXTik7CiAgICAgICAgICAgICBsaXZlID0gMTsKICAgICAgICAgICAgIG5neF9zaWduYWxfd29ya2VyX3Byb2Nlc3NlcyhjeWNsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfc2lnbmFsX3ZhbHVlKE5HWF9TSFVURE9XTl9TSUdOQUwpKTsKQEAgLTIyMCw2ICsyMjcsNyBAQAogICAgICAgICAgICAgbmd4X3Jlc3RhcnQgPSAwOwogICAgICAgICAgICAgbmd4X3N0YXJ0X3dvcmtlcl9wcm9jZXNzZXMoY3ljbGUsIGNjZi0+d29ya2VyX3Byb2Nlc3NlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5HWF9QUk9DRVNTX1JFU1BBV04pOworICAgICAgICAgICAgbmd4X3N0YXJ0X2dhcmJhZ2VfY29sbGVjdG9yKGN5Y2xlLCBOR1hfUFJPQ0VTU19SRVNQQVdOKTsKICAgICAgICAgICAgIGxpdmUgPSAxOwogICAgICAgICB9CiAKQEAgLTM1Miw2ICszNjAsNDcgQEAKIH0KIAogCitzdGF0aWMgdm9pZCBuZ3hfc3RhcnRfZ2FyYmFnZV9jb2xsZWN0b3Iobmd4X2N5Y2xlX3QgKmN5Y2xlLCBuZ3hfaW50X3QgdHlwZSkKK3sKKyAgICBuZ3hfaW50X3QgICAgICAgICBpOworICAgIG5neF9jaGFubmVsX3QgICAgIGNoOworCisgICAgcmV0dXJuOworCisgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0lORk8sIGN5Y2xlLT5sb2csIDAsICJzdGFydCBnYXJiYWdlIGNvbGxlY3RvciIpOworCisgICAgY2guY29tbWFuZCA9IE5HWF9DTURfT1BFTl9DSEFOTkVMOworCisgICAgbmd4X3NwYXduX3Byb2Nlc3MoY3ljbGUsIG5neF9nYXJiYWdlX2NvbGxlY3Rvcl9jeWNsZSwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAiZ2FyYmFnZSBjb2xsZWN0b3IiLCB0eXBlKTsKKworICAgIGNoLnBpZCA9IG5neF9wcm9jZXNzZXNbbmd4X3Byb2Nlc3Nfc2xvdF0ucGlkOworICAgIGNoLnNsb3QgPSBuZ3hfcHJvY2Vzc19zbG90OworICAgIGNoLmZkID0gbmd4X3Byb2Nlc3Nlc1tuZ3hfcHJvY2Vzc19zbG90XS5jaGFubmVsWzBdOworCisgICAgZm9yIChpID0gMDsgaSA8IG5neF9sYXN0X3Byb2Nlc3M7IGkrKykgeworCisgICAgICAgIGlmIChpID09IG5neF9wcm9jZXNzX3Nsb3QKKyAgICAgICAgICAgIHx8IG5neF9wcm9jZXNzZXNbaV0ucGlkID09IC0xCisgICAgICAgICAgICB8fCBuZ3hfcHJvY2Vzc2VzW2ldLmNoYW5uZWxbMF0gPT0gLTEpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgbmd4X2xvZ19kZWJ1ZzYoTkdYX0xPR19ERUJVR19DT1JFLCBjeWNsZS0+bG9nLCAwLAorICAgICAgICAgICAgICAgICAgICAgICJwYXNzIGNoYW5uZWwgczolZCBwaWQ6JVAgZmQ6JWQgdG8gczolaSBwaWQ6JVAgZmQ6JWQiLAorICAgICAgICAgICAgICAgICAgICAgIGNoLnNsb3QsIGNoLnBpZCwgY2guZmQsCisgICAgICAgICAgICAgICAgICAgICAgaSwgbmd4X3Byb2Nlc3Nlc1tpXS5waWQsCisgICAgICAgICAgICAgICAgICAgICAgbmd4X3Byb2Nlc3Nlc1tpXS5jaGFubmVsWzBdKTsKKworICAgICAgICAvKiBUT0RPOiBOR1hfQUdBSU4gKi8KKworICAgICAgICBuZ3hfd3JpdGVfY2hhbm5lbChuZ3hfcHJvY2Vzc2VzW2ldLmNoYW5uZWxbMF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICZjaCwgc2l6ZW9mKG5neF9jaGFubmVsX3QpLCBjeWNsZS0+bG9nKTsKKyAgICB9Cit9CisKKwogc3RhdGljIHZvaWQgbmd4X3NpZ25hbF93b3JrZXJfcHJvY2Vzc2VzKG5neF9jeWNsZV90ICpjeWNsZSwgaW50IHNpZ25vKQogewogICAgIG5neF9pbnRfdCAgICAgIGk7CkBAIC01NTgsMTE2ICs2MDcsNyBAQAogCiBzdGF0aWMgdm9pZCBuZ3hfd29ya2VyX3Byb2Nlc3NfY3ljbGUobmd4X2N5Y2xlX3QgKmN5Y2xlLCB2b2lkICpkYXRhKQogewotICAgIHNpZ3NldF90ICAgICAgICAgICBzZXQ7Ci0gICAgbmd4X2Vycl90ICAgICAgICAgIGVycjsKLSAgICBuZ3hfaW50X3QgICAgICAgICAgbjsKLSAgICBuZ3hfdWludF90ICAgICAgICAgaTsKLSAgICBzdHJ1Y3QgdGltZXZhbCAgICAgdHY7Ci0gICAgbmd4X2xpc3RlbmluZ190ICAgKmxzOwotICAgIG5neF9jb3JlX2NvbmZfdCAgICpjY2Y7Ci0gICAgbmd4X2Nvbm5lY3Rpb25fdCAgKmM7Ci0KLQotICAgIG5neF9nZXR0aW1lb2ZkYXkoJnR2KTsKLQotICAgIG5neF9zdGFydF9tc2VjID0gKG5neF9lcG9jaF9tc2VjX3QpIHR2LnR2X3NlYyAqIDEwMDAgKyB0di50dl91c2VjIC8gMTAwMDsKLSAgICBuZ3hfb2xkX2VsYXBzZWRfbXNlYyA9IDA7Ci0gICAgbmd4X2VsYXBzZWRfbXNlYyA9IDA7Ci0KLQotICAgIG5neF9wcm9jZXNzID0gTkdYX1BST0NFU1NfV09SS0VSOwotCi0gICAgY2NmID0gKG5neF9jb3JlX2NvbmZfdCAqKSBuZ3hfZ2V0X2NvbmYoY3ljbGUtPmNvbmZfY3R4LCBuZ3hfY29yZV9tb2R1bGUpOwotCi0gICAgaWYgKGdldGV1aWQoKSA9PSAwKSB7Ci0gICAgICAgIGlmIChzZXRnaWQoY2NmLT5ncm91cCkgPT0gLTEpIHsKLSAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19FTUVSRywgY3ljbGUtPmxvZywgbmd4X2Vycm5vLAotICAgICAgICAgICAgICAgICAgICAgICAgICAic2V0Z2lkKCVkKSBmYWlsZWQiLCBjY2YtPmdyb3VwKTsKLSAgICAgICAgICAgIC8qIGZhdGFsICovCi0gICAgICAgICAgICBleGl0KDIpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHNldHVpZChjY2YtPnVzZXIpID09IC0xKSB7Ci0gICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfRU1FUkcsIGN5Y2xlLT5sb2csIG5neF9lcnJubywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgInNldHVpZCglZCkgZmFpbGVkIiwgY2NmLT51c2VyKTsKLSAgICAgICAgICAgIC8qIGZhdGFsICovCi0gICAgICAgICAgICBleGl0KDIpOwotICAgICAgICB9Ci0gICAgfQotCi0jaWYgKE5HWF9IQVZFX1BSX1NFVF9EVU1QQUJMRSkKLQotICAgIC8qIGFsbG93IGNvcmVkdW1wIGFmdGVyIHNldHVpZCgpIGluIExpbnV4IDIuNC54ICovCi0KLSAgICBpZiAocHJjdGwoUFJfU0VUX0RVTVBBQkxFLCAxLCAwLCAwLCAwKSA9PSAtMSkgewotICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIGN5Y2xlLT5sb2csIG5neF9lcnJubywKLSAgICAgICAgICAgICAgICAgICAgICAicHJjdGwoUFJfU0VUX0RVTVBBQkxFKSBmYWlsZWQiKTsKLSAgICB9Ci0KLSNlbmRpZgotCi0gICAgc2lnZW1wdHlzZXQoJnNldCk7Ci0KLSAgICBpZiAoc2lncHJvY21hc2soU0lHX1NFVE1BU0ssICZzZXQsIE5VTEwpID09IC0xKSB7Ci0gICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19BTEVSVCwgY3ljbGUtPmxvZywgbmd4X2Vycm5vLAotICAgICAgICAgICAgICAgICAgICAgICJzaWdwcm9jbWFzaygpIGZhaWxlZCIpOwotICAgIH0KLQotICAgIG5neF9pbml0X3RlbXBfbnVtYmVyKCk7Ci0KLSAgICAvKgotICAgICAqIGRpc2FibGUgZGVsZXRpbmcgcHJldmlvdXMgZXZlbnRzIGZvciB0aGUgbGlzdGVuaW5nIHNvY2tldHMgYmVjYXVzZQotICAgICAqIGluIHRoZSB3b3JrZXIgcHJvY2Vzc2VzIHRoZXJlIGFyZSBubyBldmVudHMgYXQgYWxsIGF0IHRoaXMgcG9pbnQKLSAgICAgKi8gCi0gICAgbHMgPSBjeWNsZS0+bGlzdGVuaW5nLmVsdHM7Ci0gICAgZm9yIChpID0gMDsgaSA8IGN5Y2xlLT5saXN0ZW5pbmcubmVsdHM7IGkrKykgewotICAgICAgICBsc1tpXS5yZW1haW4gPSAwOwotICAgIH0KLQotICAgIGZvciAoaSA9IDA7IG5neF9tb2R1bGVzW2ldOyBpKyspIHsKLSAgICAgICAgaWYgKG5neF9tb2R1bGVzW2ldLT5pbml0X3Byb2Nlc3MpIHsKLSAgICAgICAgICAgIGlmIChuZ3hfbW9kdWxlc1tpXS0+aW5pdF9wcm9jZXNzKGN5Y2xlKSA9PSBOR1hfRVJST1IpIHsKLSAgICAgICAgICAgICAgICAvKiBmYXRhbCAqLwotICAgICAgICAgICAgICAgIGV4aXQoMik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBmb3IgKG4gPSAwOyBuIDwgbmd4X2xhc3RfcHJvY2VzczsgbisrKSB7Ci0KLSAgICAgICAgaWYgKG5neF9wcm9jZXNzZXNbbl0ucGlkID09IC0xKSB7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChuID09IG5neF9wcm9jZXNzX3Nsb3QpIHsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG5neF9wcm9jZXNzZXNbbl0uY2hhbm5lbFsxXSA9PSAtMSkgewotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoY2xvc2Uobmd4X3Byb2Nlc3Nlc1tuXS5jaGFubmVsWzFdKSA9PSAtMSkgewotICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0FMRVJULCBjeWNsZS0+bG9nLCBuZ3hfZXJybm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJjbG9zZSgpIGZhaWxlZCIpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGNsb3NlKG5neF9wcm9jZXNzZXNbbmd4X3Byb2Nlc3Nfc2xvdF0uY2hhbm5lbFswXSkgPT0gLTEpIHsKLSAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0FMRVJULCBjeWNsZS0+bG9nLCBuZ3hfZXJybm8sCi0gICAgICAgICAgICAgICAgICAgICAgImNsb3NlKCkgZmFpbGVkIik7Ci0gICAgfQotCi0jaWYgMAotICAgIG5neF9sYXN0X3Byb2Nlc3MgPSAwOwotI2VuZGlmCi0KLSAgICBpZiAobmd4X2FkZF9jaGFubmVsX2V2ZW50KGN5Y2xlLCBuZ3hfY2hhbm5lbCwgTkdYX1JFQURfRVZFTlQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfY2hhbm5lbF9oYW5kbGVyKSA9PSBOR1hfRVJST1IpCi0gICAgewotICAgICAgICAvKiBmYXRhbCAqLwotICAgICAgICBleGl0KDIpOwotICAgIH0KKyAgICBuZ3hfd29ya2VyX3Byb2Nlc3NfaW5pdChjeWNsZSk7CiAKICAgICBuZ3hfc2V0cHJvY3RpdGxlKCJ3b3JrZXIgcHJvY2VzcyIpOwogCkBAIC03NzIsMTIgKzcxMiwxMjkgQEAKIH0KIAogCitzdGF0aWMgdm9pZCBuZ3hfd29ya2VyX3Byb2Nlc3NfaW5pdChuZ3hfY3ljbGVfdCAqY3ljbGUpCit7CisgICAgc2lnc2V0X3QgICAgICAgICAgIHNldDsKKyAgICBuZ3hfaW50X3QgICAgICAgICAgbjsKKyAgICBuZ3hfdWludF90ICAgICAgICAgaTsKKyAgICBzdHJ1Y3QgdGltZXZhbCAgICAgdHY7CisgICAgbmd4X2NvcmVfY29uZl90ICAgKmNjZjsKKyAgICBuZ3hfbGlzdGVuaW5nX3QgICAqbHM7CisKKyAgICBuZ3hfZ2V0dGltZW9mZGF5KCZ0dik7CisKKyAgICBuZ3hfc3RhcnRfbXNlYyA9IChuZ3hfZXBvY2hfbXNlY190KSB0di50dl9zZWMgKiAxMDAwICsgdHYudHZfdXNlYyAvIDEwMDA7CisgICAgbmd4X29sZF9lbGFwc2VkX21zZWMgPSAwOworICAgIG5neF9lbGFwc2VkX21zZWMgPSAwOworCisKKyAgICBuZ3hfcHJvY2VzcyA9IE5HWF9QUk9DRVNTX1dPUktFUjsKKworICAgIGNjZiA9IChuZ3hfY29yZV9jb25mX3QgKikgbmd4X2dldF9jb25mKGN5Y2xlLT5jb25mX2N0eCwgbmd4X2NvcmVfbW9kdWxlKTsKKworICAgIGlmIChnZXRldWlkKCkgPT0gMCkgeworICAgICAgICBpZiAoc2V0Z2lkKGNjZi0+Z3JvdXApID09IC0xKSB7CisgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfRU1FUkcsIGN5Y2xlLT5sb2csIG5neF9lcnJubywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgInNldGdpZCglZCkgZmFpbGVkIiwgY2NmLT5ncm91cCk7CisgICAgICAgICAgICAvKiBmYXRhbCAqLworICAgICAgICAgICAgZXhpdCgyKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzZXR1aWQoY2NmLT51c2VyKSA9PSAtMSkgeworICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0VNRVJHLCBjeWNsZS0+bG9nLCBuZ3hfZXJybm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICJzZXR1aWQoJWQpIGZhaWxlZCIsIGNjZi0+dXNlcik7CisgICAgICAgICAgICAvKiBmYXRhbCAqLworICAgICAgICAgICAgZXhpdCgyKTsKKyAgICAgICAgfQorICAgIH0KKworI2lmIChOR1hfSEFWRV9QUl9TRVRfRFVNUEFCTEUpCisKKyAgICAvKiBhbGxvdyBjb3JlZHVtcCBhZnRlciBzZXR1aWQoKSBpbiBMaW51eCAyLjQueCAqLworCisgICAgaWYgKHByY3RsKFBSX1NFVF9EVU1QQUJMRSwgMSwgMCwgMCwgMCkgPT0gLTEpIHsKKyAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0FMRVJULCBjeWNsZS0+bG9nLCBuZ3hfZXJybm8sCisgICAgICAgICAgICAgICAgICAgICAgInByY3RsKFBSX1NFVF9EVU1QQUJMRSkgZmFpbGVkIik7CisgICAgfQorCisjZW5kaWYKKworICAgIHNpZ2VtcHR5c2V0KCZzZXQpOworCisgICAgaWYgKHNpZ3Byb2NtYXNrKFNJR19TRVRNQVNLLCAmc2V0LCBOVUxMKSA9PSAtMSkgeworICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIGN5Y2xlLT5sb2csIG5neF9lcnJubywKKyAgICAgICAgICAgICAgICAgICAgICAic2lncHJvY21hc2soKSBmYWlsZWQiKTsKKyAgICB9CisKKyAgICBuZ3hfaW5pdF90ZW1wX251bWJlcigpOworCisgICAgLyoKKyAgICAgKiBkaXNhYmxlIGRlbGV0aW5nIHByZXZpb3VzIGV2ZW50cyBmb3IgdGhlIGxpc3RlbmluZyBzb2NrZXRzIGJlY2F1c2UKKyAgICAgKiBpbiB0aGUgd29ya2VyIHByb2Nlc3NlcyB0aGVyZSBhcmUgbm8gZXZlbnRzIGF0IGFsbCBhdCB0aGlzIHBvaW50CisgICAgICovIAorICAgIGxzID0gY3ljbGUtPmxpc3RlbmluZy5lbHRzOworICAgIGZvciAoaSA9IDA7IGkgPCBjeWNsZS0+bGlzdGVuaW5nLm5lbHRzOyBpKyspIHsKKyAgICAgICAgbHNbaV0ucmVtYWluID0gMDsKKyAgICB9CisKKyAgICBmb3IgKGkgPSAwOyBuZ3hfbW9kdWxlc1tpXTsgaSsrKSB7CisgICAgICAgIGlmIChuZ3hfbW9kdWxlc1tpXS0+aW5pdF9wcm9jZXNzKSB7CisgICAgICAgICAgICBpZiAobmd4X21vZHVsZXNbaV0tPmluaXRfcHJvY2VzcyhjeWNsZSkgPT0gTkdYX0VSUk9SKSB7CisgICAgICAgICAgICAgICAgLyogZmF0YWwgKi8KKyAgICAgICAgICAgICAgICBleGl0KDIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChuID0gMDsgbiA8IG5neF9sYXN0X3Byb2Nlc3M7IG4rKykgeworCisgICAgICAgIGlmIChuZ3hfcHJvY2Vzc2VzW25dLnBpZCA9PSAtMSkgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAobiA9PSBuZ3hfcHJvY2Vzc19zbG90KSB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChuZ3hfcHJvY2Vzc2VzW25dLmNoYW5uZWxbMV0gPT0gLTEpIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGNsb3NlKG5neF9wcm9jZXNzZXNbbl0uY2hhbm5lbFsxXSkgPT0gLTEpIHsKKyAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19BTEVSVCwgY3ljbGUtPmxvZywgbmd4X2Vycm5vLAorICAgICAgICAgICAgICAgICAgICAgICAgICAiY2xvc2UoKSBjaGFubmVsIGZhaWxlZCIpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGNsb3NlKG5neF9wcm9jZXNzZXNbbmd4X3Byb2Nlc3Nfc2xvdF0uY2hhbm5lbFswXSkgPT0gLTEpIHsKKyAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0FMRVJULCBjeWNsZS0+bG9nLCBuZ3hfZXJybm8sCisgICAgICAgICAgICAgICAgICAgICAgImNsb3NlKCkgY2hhbm5lbCBmYWlsZWQiKTsKKyAgICB9CisKKyNpZiAwCisgICAgbmd4X2xhc3RfcHJvY2VzcyA9IDA7CisjZW5kaWYKKworICAgIGlmIChuZ3hfYWRkX2NoYW5uZWxfZXZlbnQoY3ljbGUsIG5neF9jaGFubmVsLCBOR1hfUkVBRF9FVkVOVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9jaGFubmVsX2hhbmRsZXIpID09IE5HWF9FUlJPUikKKyAgICB7CisgICAgICAgIC8qIGZhdGFsICovCisgICAgICAgIGV4aXQoMik7CisgICAgfQorfQorCisKIHN0YXRpYyB2b2lkIG5neF9jaGFubmVsX2hhbmRsZXIobmd4X2V2ZW50X3QgKmV2KQogewogICAgIG5neF9pbnRfdCAgICAgICAgICBuOwogICAgIG5neF9jaGFubmVsX3QgICAgICBjaDsKICAgICBuZ3hfY29ubmVjdGlvbl90ICAqYzsKIAorICAgIGlmIChldi0+dGltZWRvdXQpIHsKKyAgICAgICAgZXYtPnRpbWVkb3V0ID0gMDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIGMgPSBldi0+ZGF0YTsKIAogICAgIG5neF9sb2dfZGVidWcwKE5HWF9MT0dfREVCVUdfQ09SRSwgZXYtPmxvZywgMCwgImNoYW5uZWwgaGFuZGxlciIpOwpAQCAtODM0LDcgKzg5MSw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgIG5neF9wcm9jZXNzZXNbY2guc2xvdF0uY2hhbm5lbFswXSk7CiAKICAgICAgICAgaWYgKGNsb3NlKG5neF9wcm9jZXNzZXNbY2guc2xvdF0uY2hhbm5lbFswXSkgPT0gLTEpIHsKLSAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19BTEVSVCwgZXYtPmxvZywgbmd4X2Vycm5vLCAiY2xvc2UoKSBmYWlsZWQiKTsKKyAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19BTEVSVCwgZXYtPmxvZywgbmd4X2Vycm5vLAorICAgICAgICAgICAgICAgICAgICAgICAgICAiY2xvc2UoKSBjaGFubmVsIGZhaWxlZCIpOwogICAgICAgICB9CiAKICAgICAgICAgbmd4X3Byb2Nlc3Nlc1tjaC5zbG90XS5jaGFubmVsWzBdID0gLTE7CkBAIC04OTYsNyArOTU0LDYgQEAKICAgICBuZ3hfZXJyX3QgICAgICAgICBlcnI7CiAgICAgbmd4X2NvcmVfdGxzX3QgICAqdGxzOwogICAgIG5neF9jeWNsZV90ICAgICAgKmN5Y2xlOwotICAgIHN0cnVjdCB0aW1ldmFsICAgIHR2OwogCiAgICAgdGhyLT5jdi0+dGlkID0gbmd4X3RocmVhZF9zZWxmKCk7CiAKQEAgLTk3MiwzICsxMDI5LDUxIEBACiB9CiAKICNlbmRpZgorCisKK3N0YXRpYyB2b2lkIG5neF9nYXJiYWdlX2NvbGxlY3Rvcl9jeWNsZShuZ3hfY3ljbGVfdCAqY3ljbGUsIHZvaWQgKmRhdGEpCit7CisgICAgbmd4X3VpbnRfdCAgICAgICAgIGk7CisgICAgbmd4X2djX3QgICAgICAgICAgIGN0eDsKKyAgICBuZ3hfcGF0aF90ICAgICAgICoqcGF0aDsKKyAgICBuZ3hfZXZlbnRfdCAgICAgICAqZXY7CisKKyAgICBuZ3hfd29ya2VyX3Byb2Nlc3NfaW5pdChjeWNsZSk7CisKKyAgICBldiA9ICZjeWNsZS0+cmVhZF9ldmVudHNbbmd4X2NoYW5uZWxdOworCisgICAgbmd4X2FjY2VwdF9tdXRleCA9IE5VTEw7CisKKyAgICBuZ3hfc2V0cHJvY3RpdGxlKCJnYXJiYWdlIGNvbGxlY3RvciIpOworCisjaWYgMAorICAgIG5neF9hZGRfdGltZXIoZXYsIDYwICogMTAwMCk7CisjZW5kaWYKKworICAgIGZvciAoIDs7ICkgeworCisgICAgICAgIGlmIChuZ3hfdGVybWluYXRlIHx8IG5neF9xdWl0KSB7CisgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfSU5GTywgY3ljbGUtPmxvZywgMCwgImV4aXRpbmciKTsKKyAgICAgICAgICAgIGV4aXQoMCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobmd4X3Jlb3BlbikgeworICAgICAgICAgICAgbmd4X3Jlb3BlbiA9IDA7CisgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfSU5GTywgY3ljbGUtPmxvZywgMCwgInJlb3BlbiBsb2dzIik7CisgICAgICAgICAgICBuZ3hfcmVvcGVuX2ZpbGVzKGN5Y2xlLCAtMSk7CisgICAgICAgIH0KKworICAgICAgICBwYXRoID0gY3ljbGUtPnBhdGhlcy5lbHRzOworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY3ljbGUtPnBhdGhlcy5uZWx0czsgaSsrKSB7CisgICAgICAgICAgICBjdHgucGF0aCA9IHBhdGhbaV07CisgICAgICAgICAgICBjdHgubG9nID0gY3ljbGUtPmxvZzsKKyAgICAgICAgICAgIGN0eC5oYW5kbGVyID0gcGF0aFtpXS0+Z2NfaGFuZGxlcjsKKworICAgICAgICAgICAgbmd4X2NvbGxlY3RfZ2FyYmFnZSgmY3R4LCAmcGF0aFtpXS0+bmFtZSwgMCk7CisgICAgICAgIH0KKworICAgICAgICBuZ3hfYWRkX3RpbWVyKGV2LCA2MCAqIDYwICogMTAwMCk7CisKKyAgICAgICAgbmd4X3Byb2Nlc3NfZXZlbnRzKGN5Y2xlKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvb3MvdW5peC9uZ3hfc2hhcmVkLmMgYi9zcmMvb3MvdW5peC9uZ3hfc2hhcmVkLmMKaW5kZXggN2YzYzVlOS4uMGVkYzhjYiAxMDA2NDQKLS0tIGEvc3JjL29zL3VuaXgvbmd4X3NoYXJlZC5jCisrKyBiL3NyYy9vcy91bml4L25neF9zaGFyZWQuYwpAQCAtMzYsNyArMzYsNyBAQAogCiAgICAgaWYgKGZkID09IC0xKSB7CiAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19BTEVSVCwgbG9nLCBuZ3hfZXJybm8sCi0gICAgICAgICAgICAgICAgICAgICAgIm9wZW4oL2Rldi96ZXJvKSBmYWlsZWQiKTsKKyAgICAgICAgICAgICAgICAgICAgICAib3BlbihcIi9kZXYvemVyb1wiKSBmYWlsZWQiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCkBAIC00OSw3ICs0OSw4IEBACiAgICAgfQogCiAgICAgaWYgKGNsb3NlKGZkKSA9PSAtMSkgewotICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIGxvZywgbmd4X2Vycm5vLCAiY2xvc2UoKSBmYWlsZWQiKTsKKyAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0FMRVJULCBsb2csIG5neF9lcnJubywKKyAgICAgICAgICAgICAgICAgICAgICAiY2xvc2UoXCIvZGV2L3plcm9cIikgZmFpbGVkIik7CiAgICAgfQogCiAgICAgcmV0dXJuIHA7CmRpZmYgLS1naXQgYS9zcmMvb3MvdW5peC9uZ3hfc29sYXJpc19jb25maWcuaCBiL3NyYy9vcy91bml4L25neF9zb2xhcmlzX2NvbmZpZy5oCmluZGV4IDVkOTRjZGMuLjhmMTg0MTcgMTAwNjQ0Ci0tLSBhL3NyYy9vcy91bml4L25neF9zb2xhcmlzX2NvbmZpZy5oCisrKyBiL3NyYy9vcy91bml4L25neF9zb2xhcmlzX2NvbmZpZy5oCkBAIC00OSwxNCArNDksNiBAQAogI2luY2x1ZGUgPG5neF9hdXRvX2NvbmZpZy5oPgogCiAKLSNpZm5kZWYgSEFWRV9TRUxFQ1QKLSNkZWZpbmUgSEFWRV9TRUxFQ1QgIDEKLSNlbmRpZgotCi0KLSNpZm5kZWYgSEFWRV9QT0xMCi0jZGVmaW5lIEhBVkVfUE9MTCAgMQotI2VuZGlmCiAjaWYgKEhBVkVfUE9MTCkKICNpbmNsdWRlIDxwb2xsLmg+CiAjZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy9vcy91bml4L25neF90aW1lLmggYi9zcmMvb3MvdW5peC9uZ3hfdGltZS5oCmluZGV4IDBlYWQwZDguLmE2YWNmNTkgMTAwNjQ0Ci0tLSBhL3NyYy9vcy91bml4L25neF90aW1lLmgKKysrIGIvc3JjL29zL3VuaXgvbmd4X3RpbWUuaApAQCAtNTcsNiArNTcsNyBAQAogCiAjZGVmaW5lIG5neF9nZXR0aW1lb2ZkYXkodHApICBnZXR0aW1lb2ZkYXkodHAsIE5VTEwpOwogI2RlZmluZSBuZ3hfbXNsZWVwKG1zKSAgICAgICAgdXNsZWVwKG1zICogMTAwMCkKKyNkZWZpbmUgbmd4X3NsZWVwKHMpICAgICAgICAgIHNsZWVwKHMpCiAKIAogI2VuZGlmIC8qIF9OR1hfVElNRV9IX0lOQ0xVREVEXyAqLwpkaWZmIC0tZ2l0IGEvc3JjL29zL3dpbjMyL25naW54LmljbyBiL3NyYy9vcy93aW4zMi9uZ2lueC5pY28KaW5kZXggNmZiMzMwYi4uYWY1M2E5NiAxMDA2NDQKLS0tIGEvc3JjL29zL3dpbjMyL25naW54LmljbworKysgYi9zcmMvb3Mvd2luMzIvbmdpbnguaWNvCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NyYy9vcy93aW4zMi9uZ3hfZXJybm8uaCBiL3NyYy9vcy93aW4zMi9uZ3hfZXJybm8uaAppbmRleCA4NjNkY2U4Li4zNzFiNzI5IDEwMDY0NAotLS0gYS9zcmMvb3Mvd2luMzIvbmd4X2Vycm5vLmgKKysrIGIvc3JjL29zL3dpbjMyL25neF9lcnJuby5oCkBAIC0yMSw3ICsyMSwxMCBAQAogCiAjZGVmaW5lIE5HWF9FTk9FTlQgICAgICAgICAgICAgICAgIEVSUk9SX0ZJTEVfTk9UX0ZPVU5ECiAjZGVmaW5lIE5HWF9FQUNDRVMgICAgICAgICAgICAgICAgIEVSUk9SX0FDQ0VTU19ERU5JRUQKKyNpZiAwCiAjZGVmaW5lIE5HWF9FRVhJU1QgICAgICAgICAgICAgICAgIEVSUk9SX0ZJTEVfRVhJU1RTCisjZW5kaWYKKyNkZWZpbmUgTkdYX0VFWElTVCAgICAgICAgICAgICAgICAgRVJST1JfQUxSRUFEWV9FWElTVFMKICNkZWZpbmUgTkdYX0VOT1RESVIgICAgICAgICAgICAgICAgRVJST1JfUEFUSF9OT1RfRk9VTkQKICNkZWZpbmUgTkdYX0VQSVBFICAgICAgICAgICAgICAgICAgRVBJUEUKICNkZWZpbmUgTkdYX0VBR0FJTiAgICAgICAgICAgICAgICAgV1NBRVdPVUxEQkxPQ0sKZGlmZiAtLWdpdCBhL3NyYy9vcy93aW4zMi9uZ3hfZmlsZXMuYyBiL3NyYy9vcy93aW4zMi9uZ3hfZmlsZXMuYwppbmRleCBmZmQ1MmM5Li4wMGQ2YmJjIDEwMDY0NAotLS0gYS9zcmMvb3Mvd2luMzIvbmd4X2ZpbGVzLmMKKysrIGIvc3JjL29zL3dpbjMyL25neF9maWxlcy5jCkBAIC0xNzEsNyArMTcxLDggQEAKIH0KIAogCi1pbnQgbmd4X3dpbjMyX3JlbmFtZV9maWxlKG5neF9zdHJfdCAqZnJvbSwgbmd4X3N0cl90ICp0bywgbmd4X3Bvb2xfdCAqcG9vbCkKK25neF9pbnRfdCBuZ3hfd2luMzJfcmVuYW1lX2ZpbGUobmd4X3N0cl90ICpmcm9tLCBuZ3hfc3RyX3QgKnRvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfcG9vbF90ICpwb29sKQogewogICAgIGludCAgICAgICAgIHJjLCBjb2xsaXNpb247CiAgICAgdV9pbnQgICAgICAgbnVtOwpAQCAtMjI5LDcgKzIzMCw3IEBACiAKICNpZiAwCiAKLWludCBuZ3hfZmlsZV9pbmZvKGNoYXIgKmZpbGUsIG5neF9maWxlX2luZm9fdCAqc2IpCituZ3hfaW50X3Qgbmd4X2ZpbGVfaW5mbyhjaGFyICpmaWxlLCBuZ3hfZmlsZV9pbmZvX3QgKnNiKQogewogICAgIFdJTjMyX0ZJTEVfQVRUUklCVVRFX0RBVEEgIGZhOwogCkBAIC0yNTIsNyArMjUzLDcgQEAKICNlbmRpZgogCiAKLWludCBuZ3hfZmlsZV9pbmZvKHVfY2hhciAqZmlsZSwgbmd4X2ZpbGVfaW5mb190ICpzYikKK25neF9pbnRfdCBuZ3hfZmlsZV9pbmZvKHVfY2hhciAqZmlsZSwgbmd4X2ZpbGVfaW5mb190ICpzYikKIHsKICAgICAvKiBXaW45NSAqLwogCkBAIC0yNjYsNyArMjY3LDcgQEAKIH0KIAogCi1pbnQgbmd4X29wZW5fZGlyKG5neF9zdHJfdCAqbmFtZSwgbmd4X2Rpcl90ICpkaXIpCituZ3hfaW50X3Qgbmd4X29wZW5fZGlyKG5neF9zdHJfdCAqbmFtZSwgbmd4X2Rpcl90ICpkaXIpCiB7CiAgICAgbmd4X2NweXN0cm4obmFtZS0+ZGF0YSArIG5hbWUtPmxlbiwgTkdYX0RJUl9NQVNLLCBOR1hfRElSX01BU0tfTEVOICsgMSk7CiAKQEAgLTI4Myw3ICsyODQsNyBAQAogfQogCiAKLWludCBuZ3hfcmVhZF9kaXIobmd4X2Rpcl90ICpkaXIpCituZ3hfaW50X3Qgbmd4X3JlYWRfZGlyKG5neF9kaXJfdCAqZGlyKQogewogICAgIGlmIChkaXItPnJlYWR5KSB7CiAgICAgICAgIGRpci0+cmVhZHkgPSAwOwpAQCAtMjk4LDEzICsyOTksMjUgQEAKIH0KIAogCi1pbnQgbmd4X2ZpbGVfYXBwZW5kX21vZGUobmd4X2ZkX3QgZmQpCituZ3hfaW50X3Qgbmd4X2ZpbGVfYXBwZW5kX21vZGUobmd4X2ZkX3QgZmQpCiB7CisjaWYgMAorICAgIGlmIChMb2NrRmlsZShmZCwgMCwgMCwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZikgPT0gMCkgeworICAgICAgICByZXR1cm4gTkdYX0VSUk9SOworICAgIH0KKyNlbmRpZgorCiAgICAgaWYgKFNldEZpbGVQb2ludGVyKGZkLCAwLCBOVUxMLCBGSUxFX0VORCkgPT0gSU5WQUxJRF9TRVRfRklMRV9QT0lOVEVSKSB7CiAgICAgICAgIGlmIChuZ3hfZXJybm8gIT0gTk9fRVJST1IpIHsKICAgICAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CiAgICAgICAgIH0KICAgICB9CiAKKyNpZiAwCisgICAgaWYgKFVubG9ja0ZpbGUoZmQsIDAsIDAsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYpID09IDApIHsKKyAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKKyAgICB9CisjZW5kaWYKKwogICAgIHJldHVybiBOR1hfT0s7CiB9CmRpZmYgLS1naXQgYS9zcmMvb3Mvd2luMzIvbmd4X2ZpbGVzLmggYi9zcmMvb3Mvd2luMzIvbmd4X2ZpbGVzLmgKaW5kZXggNmQ2MDMxNS4uYWYwODkyYSAxMDA2NDQKLS0tIGEvc3JjL29zL3dpbjMyL25neF9maWxlcy5oCisrKyBiL3NyYy9vcy93aW4zMi9uZ3hfZmlsZXMuaApAQCAtNDQsNyArNDQsNyBAQAogI2RlZmluZSBOR1hfRklMRV9BUFBFTkQgICAgICAgICAgICAgMAogCiAKLWludCBuZ3hfZmlsZV9hcHBlbmRfbW9kZShuZ3hfZmRfdCBmZCk7CituZ3hfaW50X3Qgbmd4X2ZpbGVfYXBwZW5kX21vZGUobmd4X2ZkX3QgZmQpOwogI2RlZmluZSBuZ3hfZmlsZV9hcHBlbmRfbW9kZV9uICAgICAgIlNldEZpbGVQb2ludGVyKCkiCiAKIApAQCAtNzEsMTAgKzcxLDExIEBACiAKICNkZWZpbmUgbmd4X3JlbmFtZV9maWxlICAgICAgICAgICAgIE1vdmVGaWxlCiAjZGVmaW5lIG5neF9yZW5hbWVfZmlsZV9uICAgICAgICAgICAiTW92ZUZpbGUoKSIKLWludCBuZ3hfd2luMzJfcmVuYW1lX2ZpbGUobmd4X3N0cl90ICpmcm9tLCBuZ3hfc3RyX3QgKnRvLCBuZ3hfcG9vbF90ICpwb29sKTsKK25neF9pbnRfdCBuZ3hfd2luMzJfcmVuYW1lX2ZpbGUobmd4X3N0cl90ICpmcm9tLCBuZ3hfc3RyX3QgKnRvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfcG9vbF90ICpwb29sKTsKIAogCi1pbnQgbmd4X2ZpbGVfaW5mbyh1X2NoYXIgKmZpbGVuYW1lLCBuZ3hfZmlsZV9pbmZvX3QgKmZpKTsKK25neF9pbnRfdCBuZ3hfZmlsZV9pbmZvKHVfY2hhciAqZmlsZW5hbWUsIG5neF9maWxlX2luZm9fdCAqZmkpOwogI2RlZmluZSBuZ3hfZmlsZV9pbmZvX24gICAgICAgICAgICAgIkdldEZpbGVBdHRyaWJ1dGVzRXgoKSIKIAogCkBAIC0xMDksMTEgKzExMCwxMSBAQAogI2RlZmluZSBOR1hfRElSX01BU0tfTEVOICAgICAgICAgICAgMgogCiAKLWludCBuZ3hfb3Blbl9kaXIobmd4X3N0cl90ICpuYW1lLCBuZ3hfZGlyX3QgKmRpcik7CituZ3hfaW50X3Qgbmd4X29wZW5fZGlyKG5neF9zdHJfdCAqbmFtZSwgbmd4X2Rpcl90ICpkaXIpOwogI2RlZmluZSBuZ3hfb3Blbl9kaXJfbiAgICAgICAgICAgICAgIkZpbmRGaXJzdEZpbGUoKSIKIAogCi1pbnQgbmd4X3JlYWRfZGlyKG5neF9kaXJfdCAqZGlyKTsKK25neF9pbnRfdCBuZ3hfcmVhZF9kaXIobmd4X2Rpcl90ICpkaXIpOwogI2RlZmluZSBuZ3hfcmVhZF9kaXJfbiAgICAgICAgICAgICAgIkZpbmROZXh0RmlsZSgpIgogCiAKZGlmZiAtLWdpdCBhL3NyYy9vcy93aW4zMi9uZ3hfc29ja2V0LmggYi9zcmMvb3Mvd2luMzIvbmd4X3NvY2tldC5oCmluZGV4IGQ0OWFkMmMuLjg4NzUyODggMTAwNjQ0Ci0tLSBhL3NyYy9vcy93aW4zMi9uZ3hfc29ja2V0LmgKKysrIGIvc3JjL29zL3dpbjMyL25neF9zb2NrZXQuaApAQCAtOTgsNyArOTgsNyBAQAogZXh0ZXJuIExQRk5fVFJBTlNNSVRGSUxFICAgICAgICAgIHRyYW5zbWl0ZmlsZTsKIAogCi1uZ3hfaW5saW5lIHN0YXRpYyBpbnQgbmd4X3RjcF9wdXNoKG5neF9zb2NrZXRfdCBzKSB7CitzdGF0aWMgbmd4X2lubGluZSBpbnQgbmd4X3RjcF9wdXNoKG5neF9zb2NrZXRfdCBzKSB7CiAgICAgIHJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9zcmMvb3Mvd2luMzIvdHJheS5pY28gYi9zcmMvb3Mvd2luMzIvdHJheS5pY28KaW5kZXggMDc3Y2JhYy4uYjM5ZTUyNCAxMDA2NDQKLS0tIGEvc3JjL29zL3dpbjMyL3RyYXkuaWNvCisrKyBiL3NyYy9vcy93aW4zMi90cmF5LmljbwpCaW5hcnkgZmlsZXMgZGlmZmVyCg==