ZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMKaW5kZXggODhjZjFlOS4uMzhmZWFjOCAxMDA2NDQKLS0tIGEvTUFJTlRBSU5FUlMKKysrIGIvTUFJTlRBSU5FUlMKQEAgLTQ4Nyw2ICs0ODcsMTAgQEAKIAogCWFybWFkaWxsbwlBUk03MjBUCiAKK0RpcmsgQmVobWUgPGRpcmsuYmVobWVAZ21haWwuY29tPgorCisJb21hcDNfYmVhZ2xlCUFSTSBDT1JURVgtQTggKE9NQVAzNTMwIFNvQykKKwogUmlzaGkgQmhhdHRhY2hhcnlhIDxyaXNoaUB0aS5jb20+CiAKIAlvbWFwNTkxMm9zawlBUk05MjZFSlMKQEAgLTUyNyw2ICs1MzEsMTAgQEAKIAlpbXgzMV9saXRla2l0CWkuTVgzMQogCWlteDMxX3BoeWNvcmUJaS5NWDMxCiAKK0dyYXp2eWRhcyBJZ25vdGFzIDxub3Rhc2FzQGdtYWlsLmNvbT4KKworCW9tYXAzX3BhbmRvcmEJQVJNIENPUlRFWC1BOCAoT01BUDN4eCBTb0MpCisKIEdhcnkgSmVubmVqb2huIDxnakBkZW54LmRlPgogCiAJc21kazI0MDAJQVJNOTIwVApAQCAtNTU0LDYgKzU2MiwxMCBAQAogCW14MzFhZHMJCWkuTVgzMQogCVNNREs2NDAwCVMzQzY0MDAKIAorTmlzaGFudGggTWVub24gPG5tQHRpLmNvbT4KKworCW9tYXAzX3pvb20xCUFSTSBDT1JURVgtQTggKE9NQVAzeHggU29DKQorCiBEYXZpZCBN/GxsZXIgPGQubXVlbGxlckBlbHNvZnQuY2g+CiAKIAlzbWRrMjQxMAlBUk05MjBUCkBAIC01NzcsNiArNTg5LDEwIEBACiAKIAlvbWFwNzMwcDIJQVJNOTI2RUpTCiAKK01hbmlrYW5kYW4gUGlsbGFpIDxtYW5pLnBpbGxhaUB0aS5jb20+CisKKwlvbWFwM19ldm0JQVJNIENPUlRFWC1BOCAoT01BUDN4eCBTb0MpCisKIFN0ZWxpYW4gUG9wIDxzdGVsaWFuLnBvcEBsZWFkdGVjaGRlc2lnbi5jb20+CiAKIAlhdDkxY2FwOWFkawlBUk05MjZFSlMgKEFUOTFDQVA5IFNvQykKQEAgLTU5MSw2ICs2MDcsMTUgQEAKIAlwZG5iMwkJeHNjYWxlCiAJc2NwdQkJeHNjYWxlCiAKK0FsZXNzYW5kcm8gUnViaW5pIDxydWJpbmlAdW5pcHYuaXQ+CitOb21hZGlrIExpbnV4IFRlYW0gPFNUTl9XTU1fbm9tYWRpa19saW51eEBsaXN0LnN0LmNvbT4KKworCW5tZGs4ODE1CUFSTTkyNkVKUyAoTm9tYWRpayA4ODE1IFNvYykKKworU3RldmUgU2Frb21hbiA8c2Frb21hbkBnbWFpbC5jb20+CisKKwlvbWFwM19vdmVybwlBUk0gQ09SVEVYLUE4IChPTUFQM3h4IFNvQykKKwogUm9iZXJ0IFNjaHdlYmVsIDxyLnNjaHdlYmVsQHBlbmd1dHJvbml4LmRlPgogCiAJY3NiMjI2CQl4c2NhbGUKZGlmZiAtLWdpdCBhL01BS0VBTEwgYi9NQUtFQUxMCmluZGV4IGU5NjNmNjEuLmNmMDUxMzMgMTAwNzU1Ci0tLSBhL01BS0VBTEwKKysrIGIvTUFLRUFMTApAQCAtNTAyLDYgKzUwMiw3IEBACiAJbXgxYWRzCQkJXAogCW14MWZzMgkJCVwKIAluZXRzdGFyCQkJXAorCW5tZGs4ODE1CQlcCiAJb21hcDE1MTBpbm4JCVwKIAlvbWFwMTYxMGgyCQlcCiAJb21hcDE2MTBpbm4JCVwKQEAgLTU0NSw2ICs1NDYsMTcgQEAKICIKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMgQVJNIENvcnRleC1BOCBTeXN0ZW1zCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitMSVNUX0FSTV9DT1JURVhfQTg9IgkJXAorCW9tYXAzX2JlYWdsZQkJXAorCW9tYXAzX292ZXJvCQlcCisJb21hcDNfZXZtCQlcCisJb21hcDNfcGFuZG9yYQkJXAorCW9tYXAzX3pvb20xCQlcCisiCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMjIEFUOTEgU3lzdGVtcwogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCkBAIC01OTgsMTUgKzYxMCwxNiBAQAogIyMgQVJNIGdyb3VwcwogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi1MSVNUX2FybT0iCQlcCi0JJHtMSVNUX1NBfQlcCi0JJHtMSVNUX0FSTTd9CVwKLQkke0xJU1RfQVJNOX0JXAotCSR7TElTVF9BUk0xMH0JXAotCSR7TElTVF9BUk0xMX0JXAotCSR7TElTVF9hdDkxfQlcCi0JJHtMSVNUX3B4YX0JXAotCSR7TElTVF9peHB9CVwKK0xJU1RfYXJtPSIJCQlcCisJJHtMSVNUX1NBfQkJXAorCSR7TElTVF9BUk03fQkJXAorCSR7TElTVF9BUk05fQkJXAorCSR7TElTVF9BUk0xMH0JCVwKKwkke0xJU1RfQVJNMTF9CQlcCisJJHtMSVNUX0FSTV9DT1JURVhfQTh9CVwKKwkke0xJU1RfYXQ5MX0JCVwKKwkke0xJU1RfcHhhfQkJXAorCSR7TElTVF9peHB9CQlcCiAiCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKQEAgLTgzNCw3ICs4NDcsNyBAQAogZm9yIGFyZyBpbiAkQAogZG8KIAljYXNlICIkYXJnIiBpbgotCWFybXxTQXxBUk03fEFSTTl8QVJNMTB8QVJNMTF8YXQ5MXxpeHB8cHhhIFwKKwlhcm18U0F8QVJNN3xBUk05fEFSTTEwfEFSTTExfEFSTV9DT1JURVhfQTh8YXQ5MXxpeHB8cHhhIFwKIAl8YXZyMzIgXAogCXxibGFja2ZpbiBcCiAJfGNvbGRmaXJlIFwKZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKaW5kZXggOTY0N2JkMi4uNzg3YzVmMiAxMDA2NDQKLS0tIGEvTWFrZWZpbGUKKysrIGIvTWFrZWZpbGUKQEAgLTI3MTYsNyArMjcxNiw3IEBACiBhcDkyMHRfY29uZmlnCQlcCiBhcDkyNmVqc19jb25maWcJCVwKIGFwOTQ2ZXNfY29uZmlnOiB1bmNvbmZpZwotCUBib2FyZC9pbnRlZ3JhdG9yYXAvc3BsaXRfYnlfdmFyaWFudC5zaCAkQAorCUBib2FyZC9hcm1sdGQvaW50ZWdyYXRvcmFwL3NwbGl0X2J5X3ZhcmlhbnQuc2ggJEAKIAogaW50ZWdyYXRvcmNwX2NvbmZpZwlcCiBjcF9jb25maWcJCVwKQEAgLTI3MjgsNyArMjcyOCw3IEBACiBjcDkyMl9jb25maWcJCVwKIGNwOTIyX1hBMTBfY29uZmlnCVwKIGNwMTAyNl9jb25maWc6IHVuY29uZmlnCi0JQGJvYXJkL2ludGVncmF0b3JjcC9zcGxpdF9ieV92YXJpYW50LnNoICRACisJQGJvYXJkL2FybWx0ZC9pbnRlZ3JhdG9yY3Avc3BsaXRfYnlfdmFyaWFudC5zaCAkQAogCiBkYXZpbmNpX2R2ZXZtX2NvbmZpZyA6CXVuY29uZmlnCiAJQCQoTUtDT05GSUcpICQoQDpfY29uZmlnPSkgYXJtIGFybTkyNmVqcyBkdmV2bSBkYXZpbmNpIGRhdmluY2kKQEAgLTI3NTUsNiArMjc1NSwxOCBAQAogbmV0c3Rhcl9jb25maWc6CQl1bmNvbmZpZwogCUAkKE1LQ09ORklHKSAkKEA6X2NvbmZpZz0pIGFybSBhcm05MjV0IG5ldHN0YXIKIAorbm1kazg4MTVfY29uZmlnIFwKK25tZGs4ODE1X29uZW5hbmRfY29uZmlnOgl1bmNvbmZpZworCUBta2RpciAtcCAkKG9iailpbmNsdWRlCisJQCA+ICQob2JqKWluY2x1ZGUvY29uZmlnLmgKKwlAaWYgWyAiJChmaW5kc3RyaW5nIF9vbmVuYW5kLCAkQCkiIF0gOyB0aGVuIFwKKwkJZWNobyAiI2RlZmluZSBDT05GSUdfQk9PVF9PTkVOQU5EIiA+PiAkKG9iailpbmNsdWRlL2NvbmZpZy5oOyBcCisJCSQoWEVDSE8pICIuLi4gY29uZmlndXJlZCBmb3IgT25lTmFuZCBGbGFzaCI7IFwKKwllbHNlIFwKKwkJJChYRUNITykgIi4uLiBjb25maWd1cmVkIGZvciBOYW5kIEZsYXNoIjsgXAorCWZpCisJQCQoTUtDT05GSUcpIC1hIG5tZGs4ODE1IGFybSBhcm05MjZlanMgbm1kazg4MTUgc3Qgbm9tYWRpaworCiBvbWFwMTUxMGlubl9jb25maWcgOgl1bmNvbmZpZwogCUAkKE1LQ09ORklHKSAkKEA6X2NvbmZpZz0pIGFybSBhcm05MjV0IG9tYXAxNTEwaW5uCiAKQEAgLTI4MDYsMTMgKzI4MTgsMjIgQEAKIAlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBhcm0gYXJtOTIwdCBzY2I5MzI4IE5VTEwgaW14CiAKIHNtZGsyNDAwX2NvbmZpZwk6CXVuY29uZmlnCi0JQCQoTUtDT05GSUcpICQoQDpfY29uZmlnPSkgYXJtIGFybTkyMHQgc21kazI0MDAgTlVMTCBzM2MyNHgwCisJQCQoTUtDT05GSUcpICQoQDpfY29uZmlnPSkgYXJtIGFybTkyMHQgc21kazI0MDAgc2Ftc3VuZyBzM2MyNHgwCiAKIHNtZGsyNDEwX2NvbmZpZwk6CXVuY29uZmlnCi0JQCQoTUtDT05GSUcpICQoQDpfY29uZmlnPSkgYXJtIGFybTkyMHQgc21kazI0MTAgTlVMTCBzM2MyNHgwCisJQCQoTUtDT05GSUcpICQoQDpfY29uZmlnPSkgYXJtIGFybTkyMHQgc21kazI0MTAgc2Ftc3VuZyBzM2MyNHgwCiAKLVNYMV9jb25maWcgOgkJdW5jb25maWcKLQlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBhcm0gYXJtOTI1dCBzeDEKK1NYMV9zdGRvdXRfc2VyaWFsX2NvbmZpZyBcCitTWDFfY29uZmlnOgkJdW5jb25maWcKKwlAbWtkaXIgLXAgJChvYmopaW5jbHVkZQorCUBpZiBbICIkKGZpbmRzdHJpbmcgX3N0ZG91dF9zZXJpYWxfLCAkQCkiIF0gOyB0aGVuIFwKKwkJZWNobyAiI3VuZGVmIENPTkZJR19TVERPVVRfVVNCVFRZIiA+PiAkKG9iailpbmNsdWRlL2NvbmZpZy5oIDsgXAorCQkkKFhFQ0hPKSAiLi4uIGNvbmZpZ3VyZWQgZm9yIHN0ZG91dCBzZXJpYWwiOyBcCisJZWxzZSBcCisJCWVjaG8gIiNkZWZpbmUgQ09ORklHX1NURE9VVF9VU0JUVFkiID4+ICQob2JqKWluY2x1ZGUvY29uZmlnLmggOyBcCisJCSQoWEVDSE8pICIuLi4gY29uZmlndXJlZCBmb3Igc3Rkb3V0IHVzYnR0eSI7IFwKKwlmaTsKKwlAJChNS0NPTkZJRykgU1gxIGFybSBhcm05MjV0IHN4MQogCiAjIFRSQUIgZGVmYXVsdCBjb25maWd1cmF0aW9uOgk4IE1CIEZsYXNoLCAzMiBNQiBSQU0KIHh0cmFjdF90cmFiID0gJChzdWJzdCBfYmlncmFtLCwkKHN1YnN0IF9iaWdmbGFzaCwsJChzdWJzdCBfb2xkLCwkKHN1YnN0IF9jb25maWcsLCQxKSkpKQpAQCAtMjg1OCw3ICsyODc5LDcgQEAKIHZlcnNhdGlsZV9jb25maWcJXAogdmVyc2F0aWxlYWJfY29uZmlnCVwKIHZlcnNhdGlsZXBiX2NvbmZpZyA6CXVuY29uZmlnCi0JQGJvYXJkL3ZlcnNhdGlsZS9zcGxpdF9ieV92YXJpYW50LnNoICRACisJQGJvYXJkL2FybWx0ZC92ZXJzYXRpbGUvc3BsaXRfYnlfdmFyaWFudC5zaCAkQAogCiB2b2ljZWJsdWVfY29uZmlnOgl1bmNvbmZpZwogCUAkKE1LQ09ORklHKSAkKEA6X2NvbmZpZz0pIGFybSBhcm05MjV0IHZvaWNlYmx1ZQpAQCAtMjg5Niw2ICsyOTE3LDI1IEBACiAJQCQoTUtDT05GSUcpICQoQDpfY29uZmlnPSkgYXJtIGFybTcyMHQgU01ONDIgc2llbWVucyBscGMyMjkyCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIEFSTSBDT1JURVggU3lzdGVtcworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitvbWFwM19iZWFnbGVfY29uZmlnIDoJdW5jb25maWcKKwlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBhcm0gYXJtX2NvcnRleGE4IGJlYWdsZSBvbWFwMyBvbWFwMworCitvbWFwM19vdmVyb19jb25maWcgOgl1bmNvbmZpZworCUAkKE1LQ09ORklHKSAkKEA6X2NvbmZpZz0pIGFybSBhcm1fY29ydGV4YTggb3Zlcm8gb21hcDMgb21hcDMKKworb21hcDNfZXZtX2NvbmZpZyA6CXVuY29uZmlnCisJQCQoTUtDT05GSUcpICQoQDpfY29uZmlnPSkgYXJtIGFybV9jb3J0ZXhhOCBldm0gb21hcDMgb21hcDMKKworb21hcDNfcGFuZG9yYV9jb25maWcgOgl1bmNvbmZpZworCUAkKE1LQ09ORklHKSAkKEA6X2NvbmZpZz0pIGFybSBhcm1fY29ydGV4YTggcGFuZG9yYSBvbWFwMyBvbWFwMworCitvbWFwM196b29tMV9jb25maWcgOgl1bmNvbmZpZworCUAkKE1LQ09ORklHKSAkKEA6X2NvbmZpZz0pIGFybSBhcm1fY29ydGV4YTggem9vbTEgb21hcDMgb21hcDMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyMgWFNjYWxlIFN5c3RlbXMKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIApkaWZmIC0tZ2l0IGEvYm9hcmQvYXJtbHRkLy5naXRpZ25vcmUgYi9ib2FyZC9hcm1sdGQvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hM2RmMTU2Ci0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvYXJtbHRkLy5naXRpZ25vcmUKQEAgLTAsMCArMSwyIEBACisvaW50ZWdyYXRvcmFwL3UtYm9vdC5sZHMKKy9pbnRlZ3JhdG9yY3AvdS1ib290LmxkcwpkaWZmIC0tZ2l0IGEvYm9hcmQvaW50ZWdyYXRvcmFwL01ha2VmaWxlIGIvYm9hcmQvYXJtbHRkL2ludGVncmF0b3JhcC9NYWtlZmlsZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYm9hcmQvaW50ZWdyYXRvcmFwL01ha2VmaWxlCnJlbmFtZSB0byBib2FyZC9hcm1sdGQvaW50ZWdyYXRvcmFwL01ha2VmaWxlCmRpZmYgLS1naXQgYS9ib2FyZC9pbnRlZ3JhdG9yYXAvY29uZmlnLm1rIGIvYm9hcmQvYXJtbHRkL2ludGVncmF0b3JhcC9jb25maWcubWsKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGJvYXJkL2ludGVncmF0b3JhcC9jb25maWcubWsKcmVuYW1lIHRvIGJvYXJkL2FybWx0ZC9pbnRlZ3JhdG9yYXAvY29uZmlnLm1rCmRpZmYgLS1naXQgYS9ib2FyZC9pbnRlZ3JhdG9yYXAvZmxhc2guYyBiL2JvYXJkL2FybWx0ZC9pbnRlZ3JhdG9yYXAvZmxhc2guYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYm9hcmQvaW50ZWdyYXRvcmFwL2ZsYXNoLmMKcmVuYW1lIHRvIGJvYXJkL2FybWx0ZC9pbnRlZ3JhdG9yYXAvZmxhc2guYwpkaWZmIC0tZ2l0IGEvYm9hcmQvaW50ZWdyYXRvcmFwL2ludGVncmF0b3JhcC5jIGIvYm9hcmQvYXJtbHRkL2ludGVncmF0b3JhcC9pbnRlZ3JhdG9yYXAuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYm9hcmQvaW50ZWdyYXRvcmFwL2ludGVncmF0b3JhcC5jCnJlbmFtZSB0byBib2FyZC9hcm1sdGQvaW50ZWdyYXRvcmFwL2ludGVncmF0b3JhcC5jCmRpZmYgLS1naXQgYS9ib2FyZC9pbnRlZ3JhdG9yYXAvbG93bGV2ZWxfaW5pdC5TIGIvYm9hcmQvYXJtbHRkL2ludGVncmF0b3JhcC9sb3dsZXZlbF9pbml0LlMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGJvYXJkL2ludGVncmF0b3JhcC9sb3dsZXZlbF9pbml0LlMKcmVuYW1lIHRvIGJvYXJkL2FybWx0ZC9pbnRlZ3JhdG9yYXAvbG93bGV2ZWxfaW5pdC5TCmRpZmYgLS1naXQgYS9ib2FyZC9pbnRlZ3JhdG9yYXAvc3BsaXRfYnlfdmFyaWFudC5zaCBiL2JvYXJkL2FybWx0ZC9pbnRlZ3JhdG9yYXAvc3BsaXRfYnlfdmFyaWFudC5zaApzaW1pbGFyaXR5IGluZGV4IDkyJQpyZW5hbWUgZnJvbSBib2FyZC9pbnRlZ3JhdG9yYXAvc3BsaXRfYnlfdmFyaWFudC5zaApyZW5hbWUgdG8gYm9hcmQvYXJtbHRkL2ludGVncmF0b3JhcC9zcGxpdF9ieV92YXJpYW50LnNoCmluZGV4IDhjNTQyNTAuLjUxZGM1M2YgMTAwNzU1Ci0tLSBhL2JvYXJkL2ludGVncmF0b3JhcC9zcGxpdF9ieV92YXJpYW50LnNoCisrKyBiL2JvYXJkL2FybWx0ZC9pbnRlZ3JhdG9yYXAvc3BsaXRfYnlfdmFyaWFudC5zaApAQCAtMTA1LDE1ICsxMDUsMTUgQEAKIGZpCiAKIG1rZGlyIC1wICR7b2JqfWluY2x1ZGUKLW1rZGlyIC1wICR7b2JqfWJvYXJkL2ludGVncmF0b3JhcAorbWtkaXIgLXAgJHtvYmp9Ym9hcmQvYXJtbHRkL2ludGVncmF0b3JhcAogbXYgdG1wLmZpbCAke29ian1pbmNsdWRlL2NvbmZpZy5oCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIwlFbnN1cmUgY29ycmVjdCBjb3JlIG9iamVjdCBsb2FkZWQgZmlyc3QgaW4gVS1Cb290IGltYWdlCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotc2VkIC1yICdzL0NQVV9GSUxFL2NwdVwvJyRjcHUnXC9zdGFydC5vLzsgcy8jLiovLycgJHtzcmN9Ym9hcmQvaW50ZWdyYXRvcmFwL3UtYm9vdC5sZHMudGVtcGxhdGUgPiAke29ian1ib2FyZC9pbnRlZ3JhdG9yYXAvdS1ib290Lmxkcworc2VkIC1yICdzL0NQVV9GSUxFL2NwdVwvJyRjcHUnXC9zdGFydC5vLzsgcy8jLiovLycgJHtzcmN9Ym9hcmQvYXJtbHRkL2ludGVncmF0b3JhcC91LWJvb3QubGRzLnRlbXBsYXRlID4gJHtvYmp9Ym9hcmQvYXJtbHRkL2ludGVncmF0b3JhcC91LWJvb3QubGRzCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBDb21wbGV0ZSB0aGUgY29uZmlndXJhdGlvbgogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSRNS0NPTkZJRyAtYSBpbnRlZ3JhdG9yYXAgYXJtICRjcHUgaW50ZWdyYXRvcmFwOworJE1LQ09ORklHIC1hIGludGVncmF0b3JhcCBhcm0gJGNwdSBpbnRlZ3JhdG9yYXAgYXJtbHRkOwogZWNobyAiVmFyaWFudDo6ICR2YXJpYW50IHdpdGggY29yZSAkY3B1IgogCmRpZmYgLS1naXQgYS9ib2FyZC9pbnRlZ3JhdG9yYXAvdS1ib290Lmxkcy50ZW1wbGF0ZSBiL2JvYXJkL2FybWx0ZC9pbnRlZ3JhdG9yYXAvdS1ib290Lmxkcy50ZW1wbGF0ZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYm9hcmQvaW50ZWdyYXRvcmFwL3UtYm9vdC5sZHMudGVtcGxhdGUKcmVuYW1lIHRvIGJvYXJkL2FybWx0ZC9pbnRlZ3JhdG9yYXAvdS1ib290Lmxkcy50ZW1wbGF0ZQpkaWZmIC0tZ2l0IGEvYm9hcmQvaW50ZWdyYXRvcmNwL01ha2VmaWxlIGIvYm9hcmQvYXJtbHRkL2ludGVncmF0b3JjcC9NYWtlZmlsZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYm9hcmQvaW50ZWdyYXRvcmNwL01ha2VmaWxlCnJlbmFtZSB0byBib2FyZC9hcm1sdGQvaW50ZWdyYXRvcmNwL01ha2VmaWxlCmRpZmYgLS1naXQgYS9ib2FyZC9pbnRlZ3JhdG9yY3AvY29uZmlnLm1rIGIvYm9hcmQvYXJtbHRkL2ludGVncmF0b3JjcC9jb25maWcubWsKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGJvYXJkL2ludGVncmF0b3JjcC9jb25maWcubWsKcmVuYW1lIHRvIGJvYXJkL2FybWx0ZC9pbnRlZ3JhdG9yY3AvY29uZmlnLm1rCmRpZmYgLS1naXQgYS9ib2FyZC9pbnRlZ3JhdG9yY3AvZmxhc2guYyBiL2JvYXJkL2FybWx0ZC9pbnRlZ3JhdG9yY3AvZmxhc2guYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYm9hcmQvaW50ZWdyYXRvcmNwL2ZsYXNoLmMKcmVuYW1lIHRvIGJvYXJkL2FybWx0ZC9pbnRlZ3JhdG9yY3AvZmxhc2guYwpkaWZmIC0tZ2l0IGEvYm9hcmQvaW50ZWdyYXRvcmNwL2ludGVncmF0b3JjcC5jIGIvYm9hcmQvYXJtbHRkL2ludGVncmF0b3JjcC9pbnRlZ3JhdG9yY3AuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYm9hcmQvaW50ZWdyYXRvcmNwL2ludGVncmF0b3JjcC5jCnJlbmFtZSB0byBib2FyZC9hcm1sdGQvaW50ZWdyYXRvcmNwL2ludGVncmF0b3JjcC5jCmRpZmYgLS1naXQgYS9ib2FyZC9pbnRlZ3JhdG9yY3AvbG93bGV2ZWxfaW5pdC5TIGIvYm9hcmQvYXJtbHRkL2ludGVncmF0b3JjcC9sb3dsZXZlbF9pbml0LlMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGJvYXJkL2ludGVncmF0b3JjcC9sb3dsZXZlbF9pbml0LlMKcmVuYW1lIHRvIGJvYXJkL2FybWx0ZC9pbnRlZ3JhdG9yY3AvbG93bGV2ZWxfaW5pdC5TCmRpZmYgLS1naXQgYS9ib2FyZC9pbnRlZ3JhdG9yY3Avc3BsaXRfYnlfdmFyaWFudC5zaCBiL2JvYXJkL2FybWx0ZC9pbnRlZ3JhdG9yY3Avc3BsaXRfYnlfdmFyaWFudC5zaApzaW1pbGFyaXR5IGluZGV4IDkyJQpyZW5hbWUgZnJvbSBib2FyZC9pbnRlZ3JhdG9yY3Avc3BsaXRfYnlfdmFyaWFudC5zaApyZW5hbWUgdG8gYm9hcmQvYXJtbHRkL2ludGVncmF0b3JjcC9zcGxpdF9ieV92YXJpYW50LnNoCmluZGV4IDNmMGE0NDcuLjM0NDIyZmQgMTAwNzU1Ci0tLSBhL2JvYXJkL2ludGVncmF0b3JjcC9zcGxpdF9ieV92YXJpYW50LnNoCisrKyBiL2JvYXJkL2FybWx0ZC9pbnRlZ3JhdG9yY3Avc3BsaXRfYnlfdmFyaWFudC5zaApAQCAtMTAwLDE1ICsxMDAsMTUgQEAKIGZpCiAKIG1rZGlyIC1wICR7b2JqfWluY2x1ZGUKLW1rZGlyIC1wICR7b2JqfWJvYXJkL2ludGVncmF0b3JjcAorbWtkaXIgLXAgJHtvYmp9Ym9hcmQvYXJtbHRkL2ludGVncmF0b3JjcAogbXYgdG1wLmZpbCAke29ian1pbmNsdWRlL2NvbmZpZy5oCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyAgRW5zdXJlIGNvcnJlY3QgY29yZSBvYmplY3QgbG9hZGVkIGZpcnN0IGluIFUtQm9vdCBpbWFnZQogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXNlZCAtciAncy9DUFVfRklMRS9jcHVcLyckY3B1J1wvc3RhcnQuby87IHMvIy4qLy8nICR7c3JjfWJvYXJkL2ludGVncmF0b3JjcC91LWJvb3QubGRzLnRlbXBsYXRlID4gJHtvYmp9Ym9hcmQvaW50ZWdyYXRvcmNwL3UtYm9vdC5sZHMKK3NlZCAtciAncy9DUFVfRklMRS9jcHVcLyckY3B1J1wvc3RhcnQuby87IHMvIy4qLy8nICR7c3JjfWJvYXJkL2FybWx0ZC9pbnRlZ3JhdG9yY3AvdS1ib290Lmxkcy50ZW1wbGF0ZSA+ICR7b2JqfWJvYXJkL2FybWx0ZC9pbnRlZ3JhdG9yY3AvdS1ib290LmxkcwogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgQ29tcGxldGUgdGhlIGNvbmZpZ3VyYXRpb24KICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0kTUtDT05GSUcgLWEgaW50ZWdyYXRvcmNwIGFybSAkY3B1IGludGVncmF0b3JjcDsKKyRNS0NPTkZJRyAtYSBpbnRlZ3JhdG9yY3AgYXJtICRjcHUgaW50ZWdyYXRvcmNwIGFybWx0ZDsKIGVjaG8gIlZhcmlhbnQ6OiAkdmFyaWFudCB3aXRoIGNvcmUgJGNwdSIKIApkaWZmIC0tZ2l0IGEvYm9hcmQvaW50ZWdyYXRvcmNwL3UtYm9vdC5sZHMudGVtcGxhdGUgYi9ib2FyZC9hcm1sdGQvaW50ZWdyYXRvcmNwL3UtYm9vdC5sZHMudGVtcGxhdGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGJvYXJkL2ludGVncmF0b3JjcC91LWJvb3QubGRzLnRlbXBsYXRlCnJlbmFtZSB0byBib2FyZC9hcm1sdGQvaW50ZWdyYXRvcmNwL3UtYm9vdC5sZHMudGVtcGxhdGUKZGlmZiAtLWdpdCBhL2JvYXJkL3ZlcnNhdGlsZS9NYWtlZmlsZSBiL2JvYXJkL2FybWx0ZC92ZXJzYXRpbGUvTWFrZWZpbGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGJvYXJkL3ZlcnNhdGlsZS9NYWtlZmlsZQpyZW5hbWUgdG8gYm9hcmQvYXJtbHRkL3ZlcnNhdGlsZS9NYWtlZmlsZQpkaWZmIC0tZ2l0IGEvYm9hcmQvdmVyc2F0aWxlL2NvbmZpZy5tayBiL2JvYXJkL2FybWx0ZC92ZXJzYXRpbGUvY29uZmlnLm1rCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBib2FyZC92ZXJzYXRpbGUvY29uZmlnLm1rCnJlbmFtZSB0byBib2FyZC9hcm1sdGQvdmVyc2F0aWxlL2NvbmZpZy5tawpkaWZmIC0tZ2l0IGEvYm9hcmQvdmVyc2F0aWxlL2ZsYXNoLmMgYi9ib2FyZC9hcm1sdGQvdmVyc2F0aWxlL2ZsYXNoLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGJvYXJkL3ZlcnNhdGlsZS9mbGFzaC5jCnJlbmFtZSB0byBib2FyZC9hcm1sdGQvdmVyc2F0aWxlL2ZsYXNoLmMKZGlmZiAtLWdpdCBhL2JvYXJkL3ZlcnNhdGlsZS9sb3dsZXZlbF9pbml0LlMgYi9ib2FyZC9hcm1sdGQvdmVyc2F0aWxlL2xvd2xldmVsX2luaXQuUwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYm9hcmQvdmVyc2F0aWxlL2xvd2xldmVsX2luaXQuUwpyZW5hbWUgdG8gYm9hcmQvYXJtbHRkL3ZlcnNhdGlsZS9sb3dsZXZlbF9pbml0LlMKZGlmZiAtLWdpdCBhL2JvYXJkL3ZlcnNhdGlsZS9zcGxpdF9ieV92YXJpYW50LnNoIGIvYm9hcmQvYXJtbHRkL3ZlcnNhdGlsZS9zcGxpdF9ieV92YXJpYW50LnNoCnNpbWlsYXJpdHkgaW5kZXggOTQlCnJlbmFtZSBmcm9tIGJvYXJkL3ZlcnNhdGlsZS9zcGxpdF9ieV92YXJpYW50LnNoCnJlbmFtZSB0byBib2FyZC9hcm1sdGQvdmVyc2F0aWxlL3NwbGl0X2J5X3ZhcmlhbnQuc2gKaW5kZXggY2NkZWQ3ZS4uNDc1ZTVhMyAxMDA3NTUKLS0tIGEvYm9hcmQvdmVyc2F0aWxlL3NwbGl0X2J5X3ZhcmlhbnQuc2gKKysrIGIvYm9hcmQvYXJtbHRkL3ZlcnNhdGlsZS9zcGxpdF9ieV92YXJpYW50LnNoCkBAIC0zOCw1ICszOCw1IEBACiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBDb21wbGV0ZSB0aGUgY29uZmlndXJhdGlvbgogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSRNS0NPTkZJRyAtYSB2ZXJzYXRpbGUgYXJtIGFybTkyNmVqcyB2ZXJzYXRpbGUgTlVMTCB2ZXJzYXRpbGUKKyRNS0NPTkZJRyAtYSB2ZXJzYXRpbGUgYXJtIGFybTkyNmVqcyB2ZXJzYXRpbGUgYXJtbHRkIHZlcnNhdGlsZQogZWNobyAiVmFyaWFudDo6ICR2YXJpYW50IgpkaWZmIC0tZ2l0IGEvYm9hcmQvdmVyc2F0aWxlL3UtYm9vdC5sZHMgYi9ib2FyZC9hcm1sdGQvdmVyc2F0aWxlL3UtYm9vdC5sZHMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGJvYXJkL3ZlcnNhdGlsZS91LWJvb3QubGRzCnJlbmFtZSB0byBib2FyZC9hcm1sdGQvdmVyc2F0aWxlL3UtYm9vdC5sZHMKZGlmZiAtLWdpdCBhL2JvYXJkL3ZlcnNhdGlsZS92ZXJzYXRpbGUuYyBiL2JvYXJkL2FybWx0ZC92ZXJzYXRpbGUvdmVyc2F0aWxlLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGJvYXJkL3ZlcnNhdGlsZS92ZXJzYXRpbGUuYwpyZW5hbWUgdG8gYm9hcmQvYXJtbHRkL3ZlcnNhdGlsZS92ZXJzYXRpbGUuYwpkaWZmIC0tZ2l0IGEvYm9hcmQvb21hcDMvYmVhZ2xlL01ha2VmaWxlIGIvYm9hcmQvb21hcDMvYmVhZ2xlL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3OTcxMTIKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9vbWFwMy9iZWFnbGUvTWFrZWZpbGUKQEAgLTAsMCArMSw0OSBAQAorIworIyAoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDEsIDIwMDIKKyMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KKyMKKyMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyMgcHJvamVjdC4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorIyB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyMgTUEgMDIxMTEtMTMwNyBVU0EKKyMKKworaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCisKK0xJQgk9ICQob2JqKWxpYiQoQk9BUkQpLmEKKworQ09CSlMJOj0gYmVhZ2xlLm8KKworU1JDUwk6PSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCisKKyQoTElCKToJJChvYmopLmRlcGVuZCAkKE9CSlMpCisJJChBUikgJChBUkZMQUdTKSAkQCAkKE9CSlMpCisKK2NsZWFuOgorCXJtIC1mICQoT0JKUykKKworZGlzdGNsZWFuOgljbGVhbgorCXJtIC1mICQoTElCKSBjb3JlICouYmFrICQob2JqKS5kZXBlbmQKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5taworCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL29tYXAzL2JlYWdsZS9iZWFnbGUuYyBiL2JvYXJkL29tYXAzL2JlYWdsZS9iZWFnbGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lY2RlYTA5Ci0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvb21hcDMvYmVhZ2xlL2JlYWdsZS5jCkBAIC0wLDAgKzEsOTAgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDQtMjAwOAorICogVGV4YXMgSW5zdHJ1bWVudHMsIDx3d3cudGkuY29tPgorICoKKyAqIEF1dGhvciA6CisgKglTdW5pbCBLdW1hciA8c3VuaWxzYWluaTA1QGdtYWlsLmNvbT4KKyAqCVNoYXNoaSBSYW5qYW4gPHNoYXNoaXJhbmphbm1jYTA1QGdtYWlsLmNvbT4KKyAqCisgKiBEZXJpdmVkIGZyb20gQmVhZ2xlIEJvYXJkIGFuZCAzNDMwIFNEUCBjb2RlIGJ5CisgKglSaWNoYXJkIFdvb2RydWZmIDxyLXdvb2RydWZmMkB0aS5jb20+CisgKglTeWVkIE1vaGFtbWVkIEtoYXNpbSA8a2hhc2ltQHRpLmNvbT4KKyAqCisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9tdXguaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9zeXNfcHJvdG8uaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgImJlYWdsZS5oIgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBSb3V0aW5lOiBib2FyZF9pbml0CisgKiBEZXNjcmlwdGlvbjogRWFybHkgaGFyZHdhcmUgaW5pdC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ludCBib2FyZF9pbml0KHZvaWQpCit7CisJREVDTEFSRV9HTE9CQUxfREFUQV9QVFI7CisKKwlncG1jX2luaXQoKTsgLyogaW4gU1JBTSBvciBTRFJBTSwgZmluaXNoIEdQTUMgKi8KKwkvKiBib2FyZCBpZCBmb3IgTGludXggKi8KKwlnZC0+YmQtPmJpX2FyY2hfbnVtYmVyID0gTUFDSF9UWVBFX09NQVAzX0JFQUdMRTsKKwkvKiBib290IHBhcmFtIGFkZHIgKi8KKwlnZC0+YmQtPmJpX2Jvb3RfcGFyYW1zID0gKE9NQVAzNFhYX1NEUkNfQ1MwICsgMHgxMDApOworCisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFJvdXRpbmU6IG1pc2NfaW5pdF9yCisgKiBEZXNjcmlwdGlvbjogQ29uZmlndXJlIGJvYXJkIHNwZWNpZmljIHBhcnRzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQgbWlzY19pbml0X3Iodm9pZCkKK3sKKwlncGlvX3QgKmdwaW81X2Jhc2UgPSAoZ3Bpb190ICopT01BUDM0WFhfR1BJTzVfQkFTRTsKKwlncGlvX3QgKmdwaW82X2Jhc2UgPSAoZ3Bpb190ICopT01BUDM0WFhfR1BJTzZfQkFTRTsKKworCXBvd2VyX2luaXRfcigpOworCisJLyogQ29uZmlndXJlIEdQSU9zIHRvIG91dHB1dCAqLworCXdyaXRlbCh+KEdQSU8yMyB8IEdQSU8xMCB8IEdQSU84IHwgR1BJTzIgfCBHUElPMSksICZncGlvNl9iYXNlLT5vZSk7CisJd3JpdGVsKH4oR1BJTzMxIHwgR1BJTzMwIHwgR1BJTzI5IHwgR1BJTzI4IHwgR1BJTzIyIHwgR1BJTzIxIHwKKwkJR1BJTzE1IHwgR1BJTzE0IHwgR1BJTzEzIHwgR1BJTzEyKSwgJmdwaW81X2Jhc2UtPm9lKTsKKworCS8qIFNldCBHUElPcyAqLworCXdyaXRlbChHUElPMjMgfCBHUElPMTAgfCBHUElPOCB8IEdQSU8yIHwgR1BJTzEsCisJCSZncGlvNl9iYXNlLT5zZXRkYXRhb3V0KTsKKwl3cml0ZWwoR1BJTzMxIHwgR1BJTzMwIHwgR1BJTzI5IHwgR1BJTzI4IHwgR1BJTzIyIHwgR1BJTzIxIHwKKwkJR1BJTzE1IHwgR1BJTzE0IHwgR1BJTzEzIHwgR1BJTzEyLCAmZ3BpbzVfYmFzZS0+c2V0ZGF0YW91dCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUm91dGluZTogc2V0X211eGNvbmZfcmVncworICogRGVzY3JpcHRpb246IFNldHRpbmcgdXAgdGhlIGNvbmZpZ3VyYXRpb24gTXV4IHJlZ2lzdGVycyBzcGVjaWZpYyB0byB0aGUKKyAqCQloYXJkd2FyZS4gTWFueSBwaW5zIG5lZWQgdG8gYmUgbW92ZWQgZnJvbSBwcm90ZWN0IHRvIHByaW1hcnkKKyAqCQltb2RlLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBzZXRfbXV4Y29uZl9yZWdzKHZvaWQpCit7CisJTVVYX0JFQUdMRSgpOworfQpkaWZmIC0tZ2l0IGEvYm9hcmQvb21hcDMvYmVhZ2xlL2JlYWdsZS5oIGIvYm9hcmQvb21hcDMvYmVhZ2xlL2JlYWdsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1MTFmZmEKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9vbWFwMy9iZWFnbGUvYmVhZ2xlLmgKQEAgLTAsMCArMSwzNzYgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDgKKyAqIERpcmsgQmVobWUgPGRpcmsuYmVobWVAZ21haWwuY29tPgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisjaWZuZGVmIF9CRUFHTEVfSF8KKyNkZWZpbmUgX0JFQUdMRV9IXworCitjb25zdCBvbWFwM19zeXNpbmZvIHN5c2luZm8gPSB7CisJU0RQXzM0MzBfVjEsCisJU0RQXzM0MzBfVjIsCisJRERSX1NUQUNLRUQsCisJIjM1MzAiLAorCSJPTUFQMyBCZWFnbGUgYm9hcmQiLAorI2lmIGRlZmluZWQoQ09ORklHX0VOVl9JU19JTl9PTkVOQU5EKQorCSJPbmVOQU5EIiwKKyNlbHNlCisJIk5BTkQiLAorI2VuZGlmCit9OworCisvKgorICogSUVOICAtIElucHV0IEVuYWJsZQorICogSURJUyAtIElucHV0IERpc2FibGUKKyAqIFBURCAgLSBQdWxsIHR5cGUgRG93bgorICogUFRVICAtIFB1bGwgdHlwZSBVcAorICogRElTICAtIFB1bGwgdHlwZSBzZWxlY3Rpb24gaXMgaW5hY3RpdmUKKyAqIEVOICAgLSBQdWxsIHR5cGUgc2VsZWN0aW9uIGlzIGFjdGl2ZQorICogTTAgICAtIE1vZGUgMAorICogVGhlIGNvbW1lbnRlZCBzdHJpbmcgZ2l2ZXMgdGhlIGZpbmFsIG11eCBjb25maWd1cmF0aW9uIGZvciB0aGF0IHBpbgorICovCisjZGVmaW5lIE1VWF9CRUFHTEUoKSBcCisgLypTRFJDKi9cCisgTVVYX1ZBTChDUChTRFJDX0QwKSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKlNEUkNfRDAqL1wKKyBNVVhfVkFMKENQKFNEUkNfRDEpLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qU0RSQ19EMSovXAorIE1VWF9WQUwoQ1AoU0RSQ19EMiksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypTRFJDX0QyKi9cCisgTVVYX1ZBTChDUChTRFJDX0QzKSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKlNEUkNfRDMqL1wKKyBNVVhfVkFMKENQKFNEUkNfRDQpLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qU0RSQ19ENCovXAorIE1VWF9WQUwoQ1AoU0RSQ19ENSksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypTRFJDX0Q1Ki9cCisgTVVYX1ZBTChDUChTRFJDX0Q2KSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKlNEUkNfRDYqL1wKKyBNVVhfVkFMKENQKFNEUkNfRDcpLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qU0RSQ19ENyovXAorIE1VWF9WQUwoQ1AoU0RSQ19EOCksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypTRFJDX0Q4Ki9cCisgTVVYX1ZBTChDUChTRFJDX0Q5KSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKlNEUkNfRDkqL1wKKyBNVVhfVkFMKENQKFNEUkNfRDEwKSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKlNEUkNfRDEwKi9cCisgTVVYX1ZBTChDUChTRFJDX0QxMSksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypTRFJDX0QxMSovXAorIE1VWF9WQUwoQ1AoU0RSQ19EMTIpLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qU0RSQ19EMTIqL1wKKyBNVVhfVkFMKENQKFNEUkNfRDEzKSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKlNEUkNfRDEzKi9cCisgTVVYX1ZBTChDUChTRFJDX0QxNCksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypTRFJDX0QxNCovXAorIE1VWF9WQUwoQ1AoU0RSQ19EMTUpLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qU0RSQ19EMTUqL1wKKyBNVVhfVkFMKENQKFNEUkNfRDE2KSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKlNEUkNfRDE2Ki9cCisgTVVYX1ZBTChDUChTRFJDX0QxNyksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypTRFJDX0QxNyovXAorIE1VWF9WQUwoQ1AoU0RSQ19EMTgpLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qU0RSQ19EMTgqL1wKKyBNVVhfVkFMKENQKFNEUkNfRDE5KSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKlNEUkNfRDE5Ki9cCisgTVVYX1ZBTChDUChTRFJDX0QyMCksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypTRFJDX0QyMCovXAorIE1VWF9WQUwoQ1AoU0RSQ19EMjEpLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qU0RSQ19EMjEqL1wKKyBNVVhfVkFMKENQKFNEUkNfRDIyKSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKlNEUkNfRDIyKi9cCisgTVVYX1ZBTChDUChTRFJDX0QyMyksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypTRFJDX0QyMyovXAorIE1VWF9WQUwoQ1AoU0RSQ19EMjQpLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qU0RSQ19EMjQqL1wKKyBNVVhfVkFMKENQKFNEUkNfRDI1KSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKlNEUkNfRDI1Ki9cCisgTVVYX1ZBTChDUChTRFJDX0QyNiksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypTRFJDX0QyNiovXAorIE1VWF9WQUwoQ1AoU0RSQ19EMjcpLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qU0RSQ19EMjcqL1wKKyBNVVhfVkFMKENQKFNEUkNfRDI4KSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKlNEUkNfRDI4Ki9cCisgTVVYX1ZBTChDUChTRFJDX0QyOSksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypTRFJDX0QyOSovXAorIE1VWF9WQUwoQ1AoU0RSQ19EMzApLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qU0RSQ19EMzAqL1wKKyBNVVhfVkFMKENQKFNEUkNfRDMxKSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKlNEUkNfRDMxKi9cCisgTVVYX1ZBTChDUChTRFJDX0NMSyksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypTRFJDX0NMSyovXAorIE1VWF9WQUwoQ1AoU0RSQ19EUVMwKSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKlNEUkNfRFFTMCovXAorIE1VWF9WQUwoQ1AoU0RSQ19EUVMxKSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKlNEUkNfRFFTMSovXAorIE1VWF9WQUwoQ1AoU0RSQ19EUVMyKSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKlNEUkNfRFFTMiovXAorIE1VWF9WQUwoQ1AoU0RSQ19EUVMzKSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKlNEUkNfRFFTMyovXAorIC8qR1BNQyovXAorIE1VWF9WQUwoQ1AoR1BNQ19BMSksCQkoSURJUyB8IFBURCB8IERJUyB8IE0wKSkgLypHUE1DX0ExKi9cCisgTVVYX1ZBTChDUChHUE1DX0EyKSwJCShJRElTIHwgUFREIHwgRElTIHwgTTApKSAvKkdQTUNfQTIqL1wKKyBNVVhfVkFMKENQKEdQTUNfQTMpLAkJKElESVMgfCBQVEQgfCBESVMgfCBNMCkpIC8qR1BNQ19BMyovXAorIE1VWF9WQUwoQ1AoR1BNQ19BNCksCQkoSURJUyB8IFBURCB8IERJUyB8IE0wKSkgLypHUE1DX0E0Ki9cCisgTVVYX1ZBTChDUChHUE1DX0E1KSwJCShJRElTIHwgUFREIHwgRElTIHwgTTApKSAvKkdQTUNfQTUqL1wKKyBNVVhfVkFMKENQKEdQTUNfQTYpLAkJKElESVMgfCBQVEQgfCBESVMgfCBNMCkpIC8qR1BNQ19BNiovXAorIE1VWF9WQUwoQ1AoR1BNQ19BNyksCQkoSURJUyB8IFBURCB8IERJUyB8IE0wKSkgLypHUE1DX0E3Ki9cCisgTVVYX1ZBTChDUChHUE1DX0E4KSwJCShJRElTIHwgUFREIHwgRElTIHwgTTApKSAvKkdQTUNfQTgqL1wKKyBNVVhfVkFMKENQKEdQTUNfQTkpLAkJKElESVMgfCBQVEQgfCBESVMgfCBNMCkpIC8qR1BNQ19BOSovXAorIE1VWF9WQUwoQ1AoR1BNQ19BMTApLAkJKElESVMgfCBQVEQgfCBESVMgfCBNMCkpIC8qR1BNQ19BMTAqL1wKKyBNVVhfVkFMKENQKEdQTUNfRDApLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qR1BNQ19EMCovXAorIE1VWF9WQUwoQ1AoR1BNQ19EMSksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypHUE1DX0QxKi9cCisgTVVYX1ZBTChDUChHUE1DX0QyKSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKkdQTUNfRDIqL1wKKyBNVVhfVkFMKENQKEdQTUNfRDMpLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qR1BNQ19EMyovXAorIE1VWF9WQUwoQ1AoR1BNQ19ENCksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypHUE1DX0Q0Ki9cCisgTVVYX1ZBTChDUChHUE1DX0Q1KSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKkdQTUNfRDUqL1wKKyBNVVhfVkFMKENQKEdQTUNfRDYpLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qR1BNQ19ENiovXAorIE1VWF9WQUwoQ1AoR1BNQ19ENyksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypHUE1DX0Q3Ki9cCisgTVVYX1ZBTChDUChHUE1DX0Q4KSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKkdQTUNfRDgqL1wKKyBNVVhfVkFMKENQKEdQTUNfRDkpLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qR1BNQ19EOSovXAorIE1VWF9WQUwoQ1AoR1BNQ19EMTApLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qR1BNQ19EMTAqL1wKKyBNVVhfVkFMKENQKEdQTUNfRDExKSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKkdQTUNfRDExKi9cCisgTVVYX1ZBTChDUChHUE1DX0QxMiksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypHUE1DX0QxMiovXAorIE1VWF9WQUwoQ1AoR1BNQ19EMTMpLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qR1BNQ19EMTMqL1wKKyBNVVhfVkFMKENQKEdQTUNfRDE0KSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKkdQTUNfRDE0Ki9cCisgTVVYX1ZBTChDUChHUE1DX0QxNSksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypHUE1DX0QxNSovXAorIE1VWF9WQUwoQ1AoR1BNQ19OQ1MwKSwJCShJRElTIHwgUFRVIHwgRU4gIHwgTTApKSAvKkdQTUNfbkNTMCovXAorIE1VWF9WQUwoQ1AoR1BNQ19OQ1MxKSwJCShJRElTIHwgUFRVIHwgRU4gIHwgTTApKSAvKkdQTUNfbkNTMSovXAorIE1VWF9WQUwoQ1AoR1BNQ19OQ1MyKSwJCShJRElTIHwgUFRVIHwgRU4gIHwgTTApKSAvKkdQTUNfbkNTMiovXAorIE1VWF9WQUwoQ1AoR1BNQ19OQ1MzKSwJCShJRElTIHwgUFRVIHwgRU4gIHwgTTApKSAvKkdQTUNfbkNTMyovXAorIE1VWF9WQUwoQ1AoR1BNQ19OQ1M0KSwJCShJRElTIHwgUFRVIHwgRU4gIHwgTTApKSAvKkdQTUNfbkNTNCovXAorIE1VWF9WQUwoQ1AoR1BNQ19OQ1M1KSwJCShJRElTIHwgUFREIHwgRElTIHwgTTApKSAvKkdQTUNfbkNTNSovXAorIE1VWF9WQUwoQ1AoR1BNQ19OQ1M2KSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTEpKSAvKlNZU19uRE1BX1JFUTIqL1wKKyBNVVhfVkFMKENQKEdQTUNfTkNTNyksCQkoSUVOICB8IFBUVSB8IEVOICB8IE0xKSkgLypTWVNfbkRNQV9SRVEzKi9cCisgTVVYX1ZBTChDUChHUE1DX05CRTEpLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qR1BNQ19uQkUxKi9cCisgTVVYX1ZBTChDUChHUE1DX1dBSVQyKSwJKElFTiAgfCBQVFUgfCBFTiAgfCBNMCkpIC8qR1BNQ19XQUlUMiovXAorIE1VWF9WQUwoQ1AoR1BNQ19XQUlUMyksCShJRU4gIHwgUFRVIHwgRU4gIHwgTTApKSAvKkdQTUNfV0FJVDMqL1wKKyBNVVhfVkFMKENQKEdQTUNfQ0xLKSwJCShJRElTIHwgUFREIHwgRElTIHwgTTApKSAvKkdQTUNfQ0xLKi9cCisgTVVYX1ZBTChDUChHUE1DX05BRFZfQUxFKSwJKElESVMgfCBQVEQgfCBESVMgfCBNMCkpIC8qR1BNQ19uQURWX0FMRSovXAorIE1VWF9WQUwoQ1AoR1BNQ19OT0UpLAkJKElESVMgfCBQVEQgfCBESVMgfCBNMCkpIC8qR1BNQ19uT0UqL1wKKyBNVVhfVkFMKENQKEdQTUNfTldFKSwJCShJRElTIHwgUFREIHwgRElTIHwgTTApKSAvKkdQTUNfbldFKi9cCisgTVVYX1ZBTChDUChHUE1DX05CRTBfQ0xFKSwJKElESVMgfCBQVEQgfCBESVMgfCBNMCkpIC8qR1BNQ19uQkUwX0NMRSovXAorIE1VWF9WQUwoQ1AoR1BNQ19OV1ApLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qR1BNQ19uV1AqL1wKKyBNVVhfVkFMKENQKEdQTUNfV0FJVDApLAkoSUVOICB8IFBUVSB8IEVOICB8IE0wKSkgLypHUE1DX1dBSVQwKi9cCisgTVVYX1ZBTChDUChHUE1DX1dBSVQxKSwJKElFTiAgfCBQVFUgfCBFTiAgfCBNMCkpIC8qR1BNQ19XQUlUMSovXAorIC8qRFNTKi9cCisgTVVYX1ZBTChDUChEU1NfUENMSyksCQkoSURJUyB8IFBURCB8IERJUyB8IE0wKSkgLypEU1NfUENMSyovXAorIE1VWF9WQUwoQ1AoRFNTX0hTWU5DKSwJCShJRElTIHwgUFREIHwgRElTIHwgTTApKSAvKkRTU19IU1lOQyovXAorIE1VWF9WQUwoQ1AoRFNTX1ZTWU5DKSwJCShJRElTIHwgUFREIHwgRElTIHwgTTApKSAvKkRTU19WU1lOQyovXAorIE1VWF9WQUwoQ1AoRFNTX0FDQklBUyksCShJRElTIHwgUFREIHwgRElTIHwgTTApKSAvKkRTU19BQ0JJQVMqL1wKKyBNVVhfVkFMKENQKERTU19EQVRBMCksCQkoSURJUyB8IFBURCB8IERJUyB8IE0wKSkgLypEU1NfREFUQTAqL1wKKyBNVVhfVkFMKENQKERTU19EQVRBMSksCQkoSURJUyB8IFBURCB8IERJUyB8IE0wKSkgLypEU1NfREFUQTEqL1wKKyBNVVhfVkFMKENQKERTU19EQVRBMiksCQkoSURJUyB8IFBURCB8IERJUyB8IE0wKSkgLypEU1NfREFUQTIqL1wKKyBNVVhfVkFMKENQKERTU19EQVRBMyksCQkoSURJUyB8IFBURCB8IERJUyB8IE0wKSkgLypEU1NfREFUQTMqL1wKKyBNVVhfVkFMKENQKERTU19EQVRBNCksCQkoSURJUyB8IFBURCB8IERJUyB8IE0wKSkgLypEU1NfREFUQTQqL1wKKyBNVVhfVkFMKENQKERTU19EQVRBNSksCQkoSURJUyB8IFBURCB8IERJUyB8IE0wKSkgLypEU1NfREFUQTUqL1wKKyBNVVhfVkFMKENQKERTU19EQVRBNiksCQkoSURJUyB8IFBURCB8IERJUyB8IE0wKSkgLypEU1NfREFUQTYqL1wKKyBNVVhfVkFMKENQKERTU19EQVRBNyksCQkoSURJUyB8IFBURCB8IERJUyB8IE0wKSkgLypEU1NfREFUQTcqL1wKKyBNVVhfVkFMKENQKERTU19EQVRBOCksCQkoSURJUyB8IFBURCB8IERJUyB8IE0wKSkgLypEU1NfREFUQTgqL1wKKyBNVVhfVkFMKENQKERTU19EQVRBOSksCQkoSURJUyB8IFBURCB8IERJUyB8IE0wKSkgLypEU1NfREFUQTkqL1wKKyBNVVhfVkFMKENQKERTU19EQVRBMTApLAkoSURJUyB8IFBURCB8IERJUyB8IE0wKSkgLypEU1NfREFUQTEwKi9cCisgTVVYX1ZBTChDUChEU1NfREFUQTExKSwJKElESVMgfCBQVEQgfCBESVMgfCBNMCkpIC8qRFNTX0RBVEExMSovXAorIE1VWF9WQUwoQ1AoRFNTX0RBVEExMiksCShJRElTIHwgUFREIHwgRElTIHwgTTApKSAvKkRTU19EQVRBMTIqL1wKKyBNVVhfVkFMKENQKERTU19EQVRBMTMpLAkoSURJUyB8IFBURCB8IERJUyB8IE0wKSkgLypEU1NfREFUQTEzKi9cCisgTVVYX1ZBTChDUChEU1NfREFUQTE0KSwJKElESVMgfCBQVEQgfCBESVMgfCBNMCkpIC8qRFNTX0RBVEExNCovXAorIE1VWF9WQUwoQ1AoRFNTX0RBVEExNSksCShJRElTIHwgUFREIHwgRElTIHwgTTApKSAvKkRTU19EQVRBMTUqL1wKKyBNVVhfVkFMKENQKERTU19EQVRBMTYpLAkoSURJUyB8IFBURCB8IERJUyB8IE0wKSkgLypEU1NfREFUQTE2Ki9cCisgTVVYX1ZBTChDUChEU1NfREFUQTE3KSwJKElESVMgfCBQVEQgfCBESVMgfCBNMCkpIC8qRFNTX0RBVEExNyovXAorIE1VWF9WQUwoQ1AoRFNTX0RBVEExOCksCShJRElTIHwgUFREIHwgRElTIHwgTTApKSAvKkRTU19EQVRBMTgqL1wKKyBNVVhfVkFMKENQKERTU19EQVRBMTkpLAkoSURJUyB8IFBURCB8IERJUyB8IE0wKSkgLypEU1NfREFUQTE5Ki9cCisgTVVYX1ZBTChDUChEU1NfREFUQTIwKSwJKElESVMgfCBQVEQgfCBESVMgfCBNMCkpIC8qRFNTX0RBVEEyMCovXAorIE1VWF9WQUwoQ1AoRFNTX0RBVEEyMSksCShJRElTIHwgUFREIHwgRElTIHwgTTApKSAvKkRTU19EQVRBMjEqL1wKKyBNVVhfVkFMKENQKERTU19EQVRBMjIpLAkoSURJUyB8IFBURCB8IERJUyB8IE0wKSkgLypEU1NfREFUQTIyKi9cCisgTVVYX1ZBTChDUChEU1NfREFUQTIzKSwJKElESVMgfCBQVEQgfCBESVMgfCBNMCkpIC8qRFNTX0RBVEEyMyovXAorIC8qQ0FNRVJBKi9cCisgTVVYX1ZBTChDUChDQU1fSFMpLAkJKElFTiAgfCBQVFUgfCBFTiAgfCBNMCkpIC8qQ0FNX0hTICovXAorIE1VWF9WQUwoQ1AoQ0FNX1ZTKSwJCShJRU4gIHwgUFRVIHwgRU4gIHwgTTApKSAvKkNBTV9WUyAqL1wKKyBNVVhfVkFMKENQKENBTV9YQ0xLQSksCQkoSURJUyB8IFBURCB8IERJUyB8IE0wKSkgLypDQU1fWENMS0EqL1wKKyBNVVhfVkFMKENQKENBTV9QQ0xLKSwJCShJRU4gIHwgUFRVIHwgRU4gIHwgTTApKSAvKkNBTV9QQ0xLKi9cCisgTVVYX1ZBTChDUChDQU1fRkxEKSwJCShJRElTIHwgUFREIHwgRElTIHwgTTQpKSAvKkdQSU9fOTgqL1wKKyBNVVhfVkFMKENQKENBTV9EMCksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypDQU1fRDAqL1wKKyBNVVhfVkFMKENQKENBTV9EMSksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypDQU1fRDEqL1wKKyBNVVhfVkFMKENQKENBTV9EMiksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypDQU1fRDIqL1wKKyBNVVhfVkFMKENQKENBTV9EMyksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypDQU1fRDMqL1wKKyBNVVhfVkFMKENQKENBTV9ENCksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypDQU1fRDQqL1wKKyBNVVhfVkFMKENQKENBTV9ENSksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypDQU1fRDUqL1wKKyBNVVhfVkFMKENQKENBTV9ENiksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypDQU1fRDYqL1wKKyBNVVhfVkFMKENQKENBTV9ENyksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypDQU1fRDcqL1wKKyBNVVhfVkFMKENQKENBTV9EOCksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypDQU1fRDgqL1wKKyBNVVhfVkFMKENQKENBTV9EOSksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypDQU1fRDkqL1wKKyBNVVhfVkFMKENQKENBTV9EMTApLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qQ0FNX0QxMCovXAorIE1VWF9WQUwoQ1AoQ0FNX0QxMSksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypDQU1fRDExKi9cCisgTVVYX1ZBTChDUChDQU1fWENMS0IpLAkJKElESVMgfCBQVEQgfCBESVMgfCBNMCkpIC8qQ0FNX1hDTEtCKi9cCisgTVVYX1ZBTChDUChDQU1fV0VOKSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTQpKSAvKkdQSU9fMTY3Ki9cCisgTVVYX1ZBTChDUChDQU1fU1RST0JFKSwJKElESVMgfCBQVEQgfCBESVMgfCBNMCkpIC8qQ0FNX1NUUk9CRSovXAorIE1VWF9WQUwoQ1AoQ1NJMl9EWDApLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qQ1NJMl9EWDAqL1wKKyBNVVhfVkFMKENQKENTSTJfRFkwKSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKkNTSTJfRFkwKi9cCisgTVVYX1ZBTChDUChDU0kyX0RYMSksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypDU0kyX0RYMSovXAorIE1VWF9WQUwoQ1AoQ1NJMl9EWTEpLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qQ1NJMl9EWTEqL1wKKyAvKkF1ZGlvIEludGVyZmFjZSAqL1wKKyBNVVhfVkFMKENQKE1DQlNQMl9GU1gpLAkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypNY0JTUDJfRlNYKi9cCisgTVVYX1ZBTChDUChNQ0JTUDJfQ0xLWCksCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKk1jQlNQMl9DTEtYKi9cCisgTVVYX1ZBTChDUChNQ0JTUDJfRFIpLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qTWNCU1AyX0RSKi9cCisgTVVYX1ZBTChDUChNQ0JTUDJfRFgpLAkJKElESVMgfCBQVEQgfCBESVMgfCBNMCkpIC8qTWNCU1AyX0RYKi9cCisgLypFeHBhbnNpb24gY2FyZCAqL1wKKyBNVVhfVkFMKENQKE1NQzFfQ0xLKSwJCShJRElTIHwgUFRVIHwgRU4gIHwgTTApKSAvKk1NQzFfQ0xLKi9cCisgTVVYX1ZBTChDUChNTUMxX0NNRCksCQkoSUVOICB8IFBUVSB8IEVOICB8IE0wKSkgLypNTUMxX0NNRCovXAorIE1VWF9WQUwoQ1AoTU1DMV9EQVQwKSwJCShJRU4gIHwgUFRVIHwgRU4gIHwgTTApKSAvKk1NQzFfREFUMCovXAorIE1VWF9WQUwoQ1AoTU1DMV9EQVQxKSwJCShJRU4gIHwgUFRVIHwgRU4gIHwgTTApKSAvKk1NQzFfREFUMSovXAorIE1VWF9WQUwoQ1AoTU1DMV9EQVQyKSwJCShJRU4gIHwgUFRVIHwgRU4gIHwgTTApKSAvKk1NQzFfREFUMiovXAorIE1VWF9WQUwoQ1AoTU1DMV9EQVQzKSwJCShJRU4gIHwgUFRVIHwgRU4gIHwgTTApKSAvKk1NQzFfREFUMyovXAorIE1VWF9WQUwoQ1AoTU1DMV9EQVQ0KSwJCShJRU4gIHwgUFRVIHwgRU4gIHwgTTApKSAvKk1NQzFfREFUNCovXAorIE1VWF9WQUwoQ1AoTU1DMV9EQVQ1KSwJCShJRU4gIHwgUFRVIHwgRU4gIHwgTTApKSAvKk1NQzFfREFUNSovXAorIE1VWF9WQUwoQ1AoTU1DMV9EQVQ2KSwJCShJRU4gIHwgUFRVIHwgRU4gIHwgTTApKSAvKk1NQzFfREFUNiovXAorIE1VWF9WQUwoQ1AoTU1DMV9EQVQ3KSwJCShJRU4gIHwgUFRVIHwgRU4gIHwgTTApKSAvKk1NQzFfREFUNyovXAorIC8qV2lyZWxlc3MgTEFOICovXAorIE1VWF9WQUwoQ1AoTU1DMl9DTEspLAkJKElFTiAgfCBQVFUgfCBFTiAgfCBNNCkpIC8qR1BJT18xMzAqL1wKKyBNVVhfVkFMKENQKE1NQzJfQ01EKSwJCShJRU4gIHwgUFRVIHwgRU4gIHwgTTQpKSAvKkdQSU9fMTMxKi9cCisgTVVYX1ZBTChDUChNTUMyX0RBVDApLAkJKElFTiAgfCBQVFUgfCBFTiAgfCBNNCkpIC8qR1BJT18xMzIqL1wKKyBNVVhfVkFMKENQKE1NQzJfREFUMSksCQkoSUVOICB8IFBUVSB8IEVOICB8IE00KSkgLypHUElPXzEzMyovXAorIE1VWF9WQUwoQ1AoTU1DMl9EQVQyKSwJCShJRU4gIHwgUFRVIHwgRU4gIHwgTTQpKSAvKkdQSU9fMTM0Ki9cCisgTVVYX1ZBTChDUChNTUMyX0RBVDMpLAkJKElFTiAgfCBQVFUgfCBFTiAgfCBNNCkpIC8qR1BJT18xMzUqL1wKKyBNVVhfVkFMKENQKE1NQzJfREFUNCksCQkoSUVOICB8IFBUVSB8IEVOICB8IE00KSkgLypHUElPXzEzNiovXAorIE1VWF9WQUwoQ1AoTU1DMl9EQVQ1KSwJCShJRU4gIHwgUFRVIHwgRU4gIHwgTTQpKSAvKkdQSU9fMTM3Ki9cCisgTVVYX1ZBTChDUChNTUMyX0RBVDYpLAkJKElFTiAgfCBQVFUgfCBFTiAgfCBNNCkpIC8qR1BJT18xMzgqL1wKKyBNVVhfVkFMKENQKE1NQzJfREFUNyksCQkoSUVOICB8IFBUVSB8IEVOICB8IE00KSkgLypHUElPXzEzOSovXAorIC8qQmx1ZXRvb3RoKi9cCisgTVVYX1ZBTChDUChNQ0JTUDNfRFgpLAkJKElESVMgfCBQVEQgfCBESVMgfCBNNCkpIC8qR1BJT18xNDAqL1wKKyBNVVhfVkFMKENQKE1DQlNQM19EUiksCQkoSURJUyB8IFBURCB8IERJUyB8IE00KSkgLypHUElPXzE0MiovXAorIE1VWF9WQUwoQ1AoTUNCU1AzX0NMS1gpLAkoSURJUyB8IFBURCB8IERJUyB8IE00KSkgLypHUElPXzE0MSovXAorIE1VWF9WQUwoQ1AoTUNCU1AzX0ZTWCksCShJRElTIHwgUFREIHwgRElTIHwgTTQpKSAvKkdQSU9fMTQzKi9cCisgTVVYX1ZBTChDUChVQVJUMl9DVFMpLAkJKElFTiAgfCBQVFUgfCBFTiAgfCBNMCkpIC8qVUFSVDJfQ1RTKi9cCisgTVVYX1ZBTChDUChVQVJUMl9SVFMpLAkJKElESVMgfCBQVEQgfCBESVMgfCBNMCkpIC8qVUFSVDJfUlRTKi9cCisgTVVYX1ZBTChDUChVQVJUMl9UWCksCQkoSURJUyB8IFBURCB8IERJUyB8IE0wKSkgLypVQVJUMl9UWCovXAorIE1VWF9WQUwoQ1AoVUFSVDJfUlgpLAkJKElESVMgfCBQVEQgfCBESVMgfCBNNCkpIC8qR1BJT18xNDcqL1wKKyAvKk1vZGVtIEludGVyZmFjZSAqL1wKKyBNVVhfVkFMKENQKFVBUlQxX1RYKSwJCShJRElTIHwgUFREIHwgRElTIHwgTTApKSAvKlVBUlQxX1RYKi9cCisgTVVYX1ZBTChDUChVQVJUMV9SVFMpLAkJKElESVMgfCBQVEQgfCBESVMgfCBNNCkpIC8qR1BJT18xNDkqLyBcCisgTVVYX1ZBTChDUChVQVJUMV9DVFMpLAkJKElESVMgfCBQVEQgfCBESVMgfCBNNCkpIC8qR1BJT18xNTAqLyBcCisgTVVYX1ZBTChDUChVQVJUMV9SWCksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypVQVJUMV9SWCovXAorIE1VWF9WQUwoQ1AoTUNCU1A0X0NMS1gpLAkoSUVOICB8IFBURCB8IERJUyB8IE0xKSkgLypTU0kxX0RBVF9SWCovXAorIE1VWF9WQUwoQ1AoTUNCU1A0X0RSKSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTEpKSAvKlNTSTFfRkxBR19SWCovXAorIE1VWF9WQUwoQ1AoTUNCU1A0X0RYKSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTEpKSAvKlNTSTFfUkRZX1JYKi9cCisgTVVYX1ZBTChDUChNQ0JTUDRfRlNYKSwJKElFTiAgfCBQVEQgfCBESVMgfCBNMSkpIC8qU1NJMV9XQUtFKi9cCisgTVVYX1ZBTChDUChNQ0JTUDFfQ0xLUiksCShJRElTIHwgUFREIHwgRElTIHwgTTQpKSAvKkdQSU9fMTU2Ki9cCisgTVVYX1ZBTChDUChNQ0JTUDFfRlNSKSwJKElESVMgfCBQVFUgfCBFTiAgfCBNNCkpIC8qR1BJT18xNTcqL1wKKyBNVVhfVkFMKENQKE1DQlNQMV9EWCksCQkoSURJUyB8IFBURCB8IERJUyB8IE00KSkgLypHUElPXzE1OCovXAorIE1VWF9WQUwoQ1AoTUNCU1AxX0RSKSwJCShJRElTIHwgUFREIHwgRElTIHwgTTQpKSAvKkdQSU9fMTU5Ki9cCisgTVVYX1ZBTChDUChNQ0JTUF9DTEtTKSwJKElFTiAgfCBQVFUgfCBESVMgfCBNMCkpIC8qTWNCU1BfQ0xLUyovXAorIE1VWF9WQUwoQ1AoTUNCU1AxX0ZTWCksCShJRElTIHwgUFREIHwgRElTIHwgTTQpKSAvKkdQSU9fMTYxKi9cCisgTVVYX1ZBTChDUChNQ0JTUDFfQ0xLWCksCShJRElTIHwgUFREIHwgRElTIHwgTTQpKSAvKkdQSU9fMTYyKi9cCisgLypTZXJpYWwgSW50ZXJmYWNlKi9cCisgTVVYX1ZBTChDUChVQVJUM19DVFNfUkNUWCksCShJRU4gIHwgUFREIHwgRU4gIHwgTTApKSAvKlVBUlQzX0NUU19SQ1RYKi9cCisgTVVYX1ZBTChDUChVQVJUM19SVFNfU0QpLAkoSURJUyB8IFBURCB8IERJUyB8IE0wKSkgLypVQVJUM19SVFNfU0QgKi9cCisgTVVYX1ZBTChDUChVQVJUM19SWF9JUlJYKSwJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qVUFSVDNfUlhfSVJSWCovXAorIE1VWF9WQUwoQ1AoVUFSVDNfVFhfSVJUWCksCShJRElTIHwgUFREIHwgRElTIHwgTTApKSAvKlVBUlQzX1RYX0lSVFgqL1wKKyBNVVhfVkFMKENQKEhTVVNCMF9DTEspLAkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypIU1VTQjBfQ0xLKi9cCisgTVVYX1ZBTChDUChIU1VTQjBfU1RQKSwJKElESVMgfCBQVFUgfCBFTiAgfCBNMCkpIC8qSFNVU0IwX1NUUCovXAorIE1VWF9WQUwoQ1AoSFNVU0IwX0RJUiksCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKkhTVVNCMF9ESVIqL1wKKyBNVVhfVkFMKENQKEhTVVNCMF9OWFQpLAkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypIU1VTQjBfTlhUKi9cCisgTVVYX1ZBTChDUChIU1VTQjBfREFUQTApLAkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypIU1VTQjBfREFUQTAqL1wKKyBNVVhfVkFMKENQKEhTVVNCMF9EQVRBMSksCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKkhTVVNCMF9EQVRBMSovXAorIE1VWF9WQUwoQ1AoSFNVU0IwX0RBVEEyKSwJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qSFNVU0IwX0RBVEEyKi9cCisgTVVYX1ZBTChDUChIU1VTQjBfREFUQTMpLAkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypIU1VTQjBfREFUQTMqL1wKKyBNVVhfVkFMKENQKEhTVVNCMF9EQVRBNCksCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKkhTVVNCMF9EQVRBNCovXAorIE1VWF9WQUwoQ1AoSFNVU0IwX0RBVEE1KSwJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qSFNVU0IwX0RBVEE1Ki9cCisgTVVYX1ZBTChDUChIU1VTQjBfREFUQTYpLAkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypIU1VTQjBfREFUQTYqL1wKKyBNVVhfVkFMKENQKEhTVVNCMF9EQVRBNyksCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKkhTVVNCMF9EQVRBNyovXAorIE1VWF9WQUwoQ1AoSTJDMV9TQ0wpLAkJKElFTiAgfCBQVFUgfCBFTiAgfCBNMCkpIC8qSTJDMV9TQ0wqL1wKKyBNVVhfVkFMKENQKEkyQzFfU0RBKSwJCShJRU4gIHwgUFRVIHwgRU4gIHwgTTApKSAvKkkyQzFfU0RBKi9cCisgTVVYX1ZBTChDUChJMkMyX1NDTCksCQkoSUVOICB8IFBUVSB8IEVOICB8IE00KSkgLypHUElPXzE2OCovXAorIE1VWF9WQUwoQ1AoSTJDMl9TREEpLAkJKElFTiAgfCBQVFUgfCBFTiAgfCBNNCkpIC8qR1BJT18xODMqL1wKKyBNVVhfVkFMKENQKEkyQzNfU0NMKSwJCShJRU4gIHwgUFRVIHwgRU4gIHwgTTApKSAvKkkyQzNfU0NMKi9cCisgTVVYX1ZBTChDUChJMkMzX1NEQSksCQkoSUVOICB8IFBUVSB8IEVOICB8IE0wKSkgLypJMkMzX1NEQSovXAorIE1VWF9WQUwoQ1AoSTJDNF9TQ0wpLAkJKElFTiAgfCBQVFUgfCBFTiAgfCBNMCkpIC8qSTJDNF9TQ0wqL1wKKyBNVVhfVkFMKENQKEkyQzRfU0RBKSwJCShJRU4gIHwgUFRVIHwgRU4gIHwgTTApKSAvKkkyQzRfU0RBKi9cCisgTVVYX1ZBTChDUChIRFFfU0lPKSwJCShJRElTIHwgUFRVIHwgRU4gIHwgTTQpKSAvKkdQSU9fMTcwKi9cCisgTVVYX1ZBTChDUChNQ1NQSTFfQ0xLKSwJKElFTiAgfCBQVFUgfCBFTiAgfCBNNCkpIC8qR1BJT18xNzEqL1wKKyBNVVhfVkFMKENQKE1DU1BJMV9TSU1PKSwJKElFTiAgfCBQVFUgfCBFTiAgfCBNNCkpIC8qR1BJT18xNzIqL1wKKyBNVVhfVkFMKENQKE1DU1BJMV9TT01JKSwJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qTWNTUEkxX1NPTUkqL1wKKyBNVVhfVkFMKENQKE1DU1BJMV9DUzApLAkoSUVOICB8IFBURCB8IEVOICB8IE0wKSkgLypNY1NQSTFfQ1MwKi9cCisgTVVYX1ZBTChDUChNQ1NQSTFfQ1MxKSwJKElESVMgfCBQVEQgfCBFTiAgfCBNMCkpIC8qTWNTUEkxX0NTMSovXAorIE1VWF9WQUwoQ1AoTUNTUEkxX0NTMiksCShJRElTIHwgUFREIHwgRElTIHwgTTQpKSAvKkdQSU9fMTc2Ki9cCisgLyogVVNCIEVIQ0kgKHBvcnQgMikgKi9cCisgTVVYX1ZBTChDUChNQ1NQSTFfQ1MzKSwJKElFTiAgfCBQVFUgfCBESVMgfCBNMykpIC8qSFNVU0IyX0RBVEEyKi9cCisgTVVYX1ZBTChDUChNQ1NQSTJfQ0xLKSwJKElFTiAgfCBQVFUgfCBESVMgfCBNMykpIC8qSFNVU0IyX0RBVEE3Ki9cCisgTVVYX1ZBTChDUChNQ1NQSTJfU0lNTyksCShJRU4gIHwgUFRVIHwgRElTIHwgTTMpKSAvKkhTVVNCMl9EQVRBNCovXAorIE1VWF9WQUwoQ1AoTUNTUEkyX1NPTUkpLAkoSUVOICB8IFBUVSB8IERJUyB8IE0zKSkgLypIU1VTQjJfREFUQTUqL1wKKyBNVVhfVkFMKENQKE1DU1BJMl9DUzApLAkoSUVOICB8IFBUVSB8IERJUyB8IE0zKSkgLypIU1VTQjJfREFUQTYqL1wKKyBNVVhfVkFMKENQKE1DU1BJMl9DUzEpLAkoSUVOICB8IFBUVSB8IERJUyB8IE0zKSkgLypIU1VTQjJfREFUQTMqL1wKKyBNVVhfVkFMKENQKEVUS19EMTBfRVMyKSwJKElESVMgfCBQVFUgfCBESVMgfCBNMykpIC8qSFNVU0IyX0NMSyovXAorIE1VWF9WQUwoQ1AoRVRLX0QxMV9FUzIpLAkoSURJUyB8IFBUVSB8IERJUyB8IE0zKSkgLypIU1VTQjJfU1RQKi9cCisgTVVYX1ZBTChDUChFVEtfRDEyX0VTMiksCShJRU4gIHwgUFRVIHwgRElTIHwgTTMpKSAvKkhTVVNCMl9ESVIqL1wKKyBNVVhfVkFMKENQKEVUS19EMTNfRVMyKSwJKElFTiAgfCBQVFUgfCBESVMgfCBNMykpIC8qSFNVU0IyX05YVCovXAorIE1VWF9WQUwoQ1AoRVRLX0QxNF9FUzIpLAkoSUVOICB8IFBUVSB8IERJUyB8IE0zKSkgLypIU1VTQjJfREFUQTAqL1wKKyBNVVhfVkFMKENQKEVUS19EMTVfRVMyKSwJKElFTiAgfCBQVFUgfCBESVMgfCBNMykpIC8qSFNVU0IyX0RBVEExKi9cCisgLypDb250cm9sIGFuZCBkZWJ1ZyAqL1wKKyBNVVhfVkFMKENQKFNZU18zMkspLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qU1lTXzMySyovXAorIE1VWF9WQUwoQ1AoU1lTX0NMS1JFUSksCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKlNZU19DTEtSRVEqL1wKKyBNVVhfVkFMKENQKFNZU19OSVJRKSwJCShJRU4gIHwgUFRVIHwgRU4gIHwgTTApKSAvKlNZU19uSVJRKi9cCisgTVVYX1ZBTChDUChTWVNfQk9PVDApLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNNCkpIC8qR1BJT18yKi9cCisgTVVYX1ZBTChDUChTWVNfQk9PVDEpLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNNCkpIC8qR1BJT18zKi9cCisgTVVYX1ZBTChDUChTWVNfQk9PVDIpLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNNCkpIC8qR1BJT180IC0gTU1DMV9XUCovXAorIE1VWF9WQUwoQ1AoU1lTX0JPT1QzKSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTQpKSAvKkdQSU9fNSovXAorIE1VWF9WQUwoQ1AoU1lTX0JPT1Q0KSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTQpKSAvKkdQSU9fNiovXAorIE1VWF9WQUwoQ1AoU1lTX0JPT1Q1KSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTQpKSAvKkdQSU9fNyovXAorIE1VWF9WQUwoQ1AoU1lTX0JPT1Q2KSwJCShJRElTIHwgUFREIHwgRElTIHwgTTQpKSAvKkdQSU9fOCovIFwKKyBNVVhfVkFMKENQKFNZU19PRkZfTU9ERSksCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKlNZU19PRkZfTU9ERSovXAorIE1VWF9WQUwoQ1AoU1lTX0NMS09VVDEpLAkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypTWVNfQ0xLT1VUMSovXAorIE1VWF9WQUwoQ1AoU1lTX0NMS09VVDIpLAkoSUVOICB8IFBUVSB8IEVOICB8IE00KSkgLypHUElPXzE4NiovXAorIE1VWF9WQUwoQ1AoRVRLX0NMS19FUzIpLAkoSURJUyB8IFBUVSB8IEVOICB8IE0zKSkgLypIU1VTQjFfU1RQKi9cCisgTVVYX1ZBTChDUChFVEtfQ1RMX0VTMiksCShJRElTIHwgUFRVIHwgRElTIHwgTTMpKSAvKkhTVVNCMV9DTEsqL1wKKyBNVVhfVkFMKENQKEVUS19EMF9FUzIpLAkoSUVOICB8IFBUVSB8IERJUyB8IE0zKSkgLypIU1VTQjFfREFUQTAqL1wKKyBNVVhfVkFMKENQKEVUS19EMV9FUzIpLAkoSUVOICB8IFBUVSB8IERJUyB8IE0zKSkgLypIU1VTQjFfREFUQTEqL1wKKyBNVVhfVkFMKENQKEVUS19EMl9FUzIpLAkoSUVOICB8IFBUVSB8IERJUyB8IE0zKSkgLypIU1VTQjFfREFUQTIqL1wKKyBNVVhfVkFMKENQKEVUS19EM19FUzIpLAkoSUVOICB8IFBUVSB8IERJUyB8IE0zKSkgLypIU1VTQjFfREFUQTcqL1wKKyBNVVhfVkFMKENQKEVUS19ENF9FUzIpLAkoSUVOICB8IFBUVSB8IERJUyB8IE0zKSkgLypIU1VTQjFfREFUQTQqL1wKKyBNVVhfVkFMKENQKEVUS19ENV9FUzIpLAkoSUVOICB8IFBUVSB8IERJUyB8IE0zKSkgLypIU1VTQjFfREFUQTUqL1wKKyBNVVhfVkFMKENQKEVUS19ENl9FUzIpLAkoSUVOICB8IFBUVSB8IERJUyB8IE0zKSkgLypIU1VTQjFfREFUQTYqL1wKKyBNVVhfVkFMKENQKEVUS19EN19FUzIpLAkoSUVOICB8IFBUVSB8IERJUyB8IE0zKSkgLypIU1VTQjFfREFUQTMqL1wKKyBNVVhfVkFMKENQKEVUS19EOF9FUzIpLAkoSUVOICB8IFBUVSB8IERJUyB8IE0zKSkgLypIU1VTQjFfRElSKi9cCisgTVVYX1ZBTChDUChFVEtfRDlfRVMyKSwJKElFTiAgfCBQVFUgfCBESVMgfCBNMykpIC8qSFNVU0IxX05YVCovXAorIE1VWF9WQUwoQ1AoRDJEX01DQUQxKSwJCShJRU4gIHwgUFREIHwgRU4gIHwgTTApKSAvKmQyZF9tY2FkMSovXAorIE1VWF9WQUwoQ1AoRDJEX01DQUQyKSwJCShJRU4gIHwgUFREIHwgRU4gIHwgTTApKSAvKmQyZF9tY2FkMiovXAorIE1VWF9WQUwoQ1AoRDJEX01DQUQzKSwJCShJRU4gIHwgUFREIHwgRU4gIHwgTTApKSAvKmQyZF9tY2FkMyovXAorIE1VWF9WQUwoQ1AoRDJEX01DQUQ0KSwJCShJRU4gIHwgUFREIHwgRU4gIHwgTTApKSAvKmQyZF9tY2FkNCovXAorIE1VWF9WQUwoQ1AoRDJEX01DQUQ1KSwJCShJRU4gIHwgUFREIHwgRU4gIHwgTTApKSAvKmQyZF9tY2FkNSovXAorIE1VWF9WQUwoQ1AoRDJEX01DQUQ2KSwJCShJRU4gIHwgUFREIHwgRU4gIHwgTTApKSAvKmQyZF9tY2FkNiovXAorIE1VWF9WQUwoQ1AoRDJEX01DQUQ3KSwJCShJRU4gIHwgUFREIHwgRU4gIHwgTTApKSAvKmQyZF9tY2FkNyovXAorIE1VWF9WQUwoQ1AoRDJEX01DQUQ4KSwJCShJRU4gIHwgUFREIHwgRU4gIHwgTTApKSAvKmQyZF9tY2FkOCovXAorIE1VWF9WQUwoQ1AoRDJEX01DQUQ5KSwJCShJRU4gIHwgUFREIHwgRU4gIHwgTTApKSAvKmQyZF9tY2FkOSovXAorIE1VWF9WQUwoQ1AoRDJEX01DQUQxMCksCShJRU4gIHwgUFREIHwgRU4gIHwgTTApKSAvKmQyZF9tY2FkMTAqL1wKKyBNVVhfVkFMKENQKEQyRF9NQ0FEMTEpLAkoSUVOICB8IFBURCB8IEVOICB8IE0wKSkgLypkMmRfbWNhZDExKi9cCisgTVVYX1ZBTChDUChEMkRfTUNBRDEyKSwJKElFTiAgfCBQVEQgfCBFTiAgfCBNMCkpIC8qZDJkX21jYWQxMiovXAorIE1VWF9WQUwoQ1AoRDJEX01DQUQxMyksCShJRU4gIHwgUFREIHwgRU4gIHwgTTApKSAvKmQyZF9tY2FkMTMqL1wKKyBNVVhfVkFMKENQKEQyRF9NQ0FEMTQpLAkoSUVOICB8IFBURCB8IEVOICB8IE0wKSkgLypkMmRfbWNhZDE0Ki9cCisgTVVYX1ZBTChDUChEMkRfTUNBRDE1KSwJKElFTiAgfCBQVEQgfCBFTiAgfCBNMCkpIC8qZDJkX21jYWQxNSovXAorIE1VWF9WQUwoQ1AoRDJEX01DQUQxNiksCShJRU4gIHwgUFREIHwgRU4gIHwgTTApKSAvKmQyZF9tY2FkMTYqL1wKKyBNVVhfVkFMKENQKEQyRF9NQ0FEMTcpLAkoSUVOICB8IFBURCB8IEVOICB8IE0wKSkgLypkMmRfbWNhZDE3Ki9cCisgTVVYX1ZBTChDUChEMkRfTUNBRDE4KSwJKElFTiAgfCBQVEQgfCBFTiAgfCBNMCkpIC8qZDJkX21jYWQxOCovXAorIE1VWF9WQUwoQ1AoRDJEX01DQUQxOSksCShJRU4gIHwgUFREIHwgRU4gIHwgTTApKSAvKmQyZF9tY2FkMTkqL1wKKyBNVVhfVkFMKENQKEQyRF9NQ0FEMjApLAkoSUVOICB8IFBURCB8IEVOICB8IE0wKSkgLypkMmRfbWNhZDIwKi9cCisgTVVYX1ZBTChDUChEMkRfTUNBRDIxKSwJKElFTiAgfCBQVEQgfCBFTiAgfCBNMCkpIC8qZDJkX21jYWQyMSovXAorIE1VWF9WQUwoQ1AoRDJEX01DQUQyMiksCShJRU4gIHwgUFREIHwgRU4gIHwgTTApKSAvKmQyZF9tY2FkMjIqL1wKKyBNVVhfVkFMKENQKEQyRF9NQ0FEMjMpLAkoSUVOICB8IFBURCB8IEVOICB8IE0wKSkgLypkMmRfbWNhZDIzKi9cCisgTVVYX1ZBTChDUChEMkRfTUNBRDI0KSwJKElFTiAgfCBQVEQgfCBFTiAgfCBNMCkpIC8qZDJkX21jYWQyNCovXAorIE1VWF9WQUwoQ1AoRDJEX01DQUQyNSksCShJRU4gIHwgUFREIHwgRU4gIHwgTTApKSAvKmQyZF9tY2FkMjUqL1wKKyBNVVhfVkFMKENQKEQyRF9NQ0FEMjYpLAkoSUVOICB8IFBURCB8IEVOICB8IE0wKSkgLypkMmRfbWNhZDI2Ki9cCisgTVVYX1ZBTChDUChEMkRfTUNBRDI3KSwJKElFTiAgfCBQVEQgfCBFTiAgfCBNMCkpIC8qZDJkX21jYWQyNyovXAorIE1VWF9WQUwoQ1AoRDJEX01DQUQyOCksCShJRU4gIHwgUFREIHwgRU4gIHwgTTApKSAvKmQyZF9tY2FkMjgqL1wKKyBNVVhfVkFMKENQKEQyRF9NQ0FEMjkpLAkoSUVOICB8IFBURCB8IEVOICB8IE0wKSkgLypkMmRfbWNhZDI5Ki9cCisgTVVYX1ZBTChDUChEMkRfTUNBRDMwKSwJKElFTiAgfCBQVEQgfCBFTiAgfCBNMCkpIC8qZDJkX21jYWQzMCovXAorIE1VWF9WQUwoQ1AoRDJEX01DQUQzMSksCShJRU4gIHwgUFREIHwgRU4gIHwgTTApKSAvKmQyZF9tY2FkMzEqL1wKKyBNVVhfVkFMKENQKEQyRF9NQ0FEMzIpLAkoSUVOICB8IFBURCB8IEVOICB8IE0wKSkgLypkMmRfbWNhZDMyKi9cCisgTVVYX1ZBTChDUChEMkRfTUNBRDMzKSwJKElFTiAgfCBQVEQgfCBFTiAgfCBNMCkpIC8qZDJkX21jYWQzMyovXAorIE1VWF9WQUwoQ1AoRDJEX01DQUQzNCksCShJRU4gIHwgUFREIHwgRU4gIHwgTTApKSAvKmQyZF9tY2FkMzQqL1wKKyBNVVhfVkFMKENQKEQyRF9NQ0FEMzUpLAkoSUVOICB8IFBURCB8IEVOICB8IE0wKSkgLypkMmRfbWNhZDM1Ki9cCisgTVVYX1ZBTChDUChEMkRfTUNBRDM2KSwJKElFTiAgfCBQVEQgfCBFTiAgfCBNMCkpIC8qZDJkX21jYWQzNiovXAorIE1VWF9WQUwoQ1AoRDJEX0NMSzI2TUkpLAkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypkMmRfY2xrMjZtaSovXAorIE1VWF9WQUwoQ1AoRDJEX05SRVNQV1JPTiksCShJRU4gIHwgUFREIHwgRU4gIHwgTTApKSAvKmQyZF9ucmVzcHdyb24qL1wKKyBNVVhfVkFMKENQKEQyRF9OUkVTV0FSTSksCShJRU4gIHwgUFRVIHwgRU4gIHwgTTApKSAvKmQyZF9ucmVzd2FybSAqL1wKKyBNVVhfVkFMKENQKEQyRF9BUk05TklSUSksCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKmQyZF9hcm05bmlycSAqL1wKKyBNVVhfVkFMKENQKEQyRF9VTUEyUDZGSVEpLAkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypkMmRfdW1hMnA2ZmlxKi9cCisgTVVYX1ZBTChDUChEMkRfU1BJTlQpLAkJKElFTiAgfCBQVEQgfCBFTiAgfCBNMCkpIC8qZDJkX3NwaW50Ki9cCisgTVVYX1ZBTChDUChEMkRfRlJJTlQpLAkJKElFTiAgfCBQVEQgfCBFTiAgfCBNMCkpIC8qZDJkX2ZyaW50Ki9cCisgTVVYX1ZBTChDUChEMkRfRE1BUkVRMCksCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKmQyZF9kbWFyZXEwKi9cCisgTVVYX1ZBTChDUChEMkRfRE1BUkVRMSksCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKmQyZF9kbWFyZXExKi9cCisgTVVYX1ZBTChDUChEMkRfRE1BUkVRMiksCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKmQyZF9kbWFyZXEyKi9cCisgTVVYX1ZBTChDUChEMkRfRE1BUkVRMyksCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKmQyZF9kbWFyZXEzKi9cCisgTVVYX1ZBTChDUChEMkRfTjNHVFJTVCksCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKmQyZF9uM2d0cnN0Ki9cCisgTVVYX1ZBTChDUChEMkRfTjNHVERJKSwJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qZDJkX24zZ3RkaSovXAorIE1VWF9WQUwoQ1AoRDJEX04zR1RETyksCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKmQyZF9uM2d0ZG8qL1wKKyBNVVhfVkFMKENQKEQyRF9OM0dUTVMpLAkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypkMmRfbjNndG1zKi9cCisgTVVYX1ZBTChDUChEMkRfTjNHVENLKSwJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qZDJkX24zZ3RjayovXAorIE1VWF9WQUwoQ1AoRDJEX04zR1JUQ0spLAkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypkMmRfbjNncnRjayovXAorIE1VWF9WQUwoQ1AoRDJEX01TVERCWSksCShJRU4gIHwgUFRVIHwgRU4gIHwgTTApKSAvKmQyZF9tc3RkYnkqL1wKKyBNVVhfVkFMKENQKEQyRF9TV0FLRVVQKSwJKElFTiAgfCBQVEQgfCBFTiAgfCBNMCkpIC8qZDJkX3N3YWtldXAqL1wKKyBNVVhfVkFMKENQKEQyRF9JRExFUkVRKSwJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qZDJkX2lkbGVyZXEqL1wKKyBNVVhfVkFMKENQKEQyRF9JRExFQUNLKSwJKElFTiAgfCBQVFUgfCBFTiAgfCBNMCkpIC8qZDJkX2lkbGVhY2sqL1wKKyBNVVhfVkFMKENQKEQyRF9NV1JJVEUpLAkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypkMmRfbXdyaXRlKi9cCisgTVVYX1ZBTChDUChEMkRfU1dSSVRFKSwJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qZDJkX3N3cml0ZSovXAorIE1VWF9WQUwoQ1AoRDJEX01SRUFEKSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKmQyZF9tcmVhZCovXAorIE1VWF9WQUwoQ1AoRDJEX1NSRUFEKSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKmQyZF9zcmVhZCovXAorIE1VWF9WQUwoQ1AoRDJEX01CVVNGTEFHKSwJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qZDJkX21idXNmbGFnKi9cCisgTVVYX1ZBTChDUChEMkRfU0JVU0ZMQUcpLAkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypkMmRfc2J1c2ZsYWcqL1wKKyBNVVhfVkFMKENQKFNEUkNfQ0tFMCksCQkoSURJUyB8IFBUVSB8IEVOICB8IE0wKSkgLypzZHJjX2NrZTAqL1wKKyBNVVhfVkFMKENQKFNEUkNfQ0tFMSksCQkoSURJUyB8IFBURCB8IERJUyB8IE03KSkgLypzZHJjX2NrZTEqLworI2VuZGlmCmRpZmYgLS1naXQgYS9ib2FyZC9vbWFwMy9iZWFnbGUvY29uZmlnLm1rIGIvYm9hcmQvb21hcDMvYmVhZ2xlL2NvbmZpZy5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzliMmUyCi0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvb21hcDMvYmVhZ2xlL2NvbmZpZy5tawpAQCAtMCwwICsxLDMzIEBACisjCisjIChDKSBDb3B5cmlnaHQgMjAwNgorIyBUZXhhcyBJbnN0cnVtZW50cywgPHd3dy50aS5jb20+CisjCisjIEJlYWdsZSBCb2FyZCB1c2VzIE9NQVAzIChBUk0tQ29ydGV4QTgpIGNwdQorIyBzZWUgaHR0cDovL3d3dy50aS5jb20vIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIFRleGFzIEluc3RydW1lbnRzCisjCisjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisjIHByb2plY3QuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyMgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyMgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisjIE1BIDAyMTExLTEzMDcgVVNBCisjCisjIFBoeXNpY2FsIEFkZHJlc3M6CisjIDgwMDAnMDAwMCAoYmFuazApCisjIEEwMDAvMDAwMCAoYmFuazEpCisjIExpbnV4LUtlcm5lbCBpcyBleHBlY3RlZCB0byBiZSBhdCA4MDAwJzgwMDAsIGVudHJ5IDgwMDAnODAwMAorIyAobWVtIGJhc2UgKyByZXNlcnZlZCkKKworIyBGb3IgdXNlIHdpdGggZXh0ZXJuYWwgb3IgaW50ZXJuYWwgYm9vdHMuCitURVhUX0JBU0UgPSAweDgwZTgwMDAwCmRpZmYgLS1naXQgYS9ib2FyZC9vbWFwMy9iZWFnbGUvdS1ib290LmxkcyBiL2JvYXJkL29tYXAzL2JlYWdsZS91LWJvb3QubGRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5ZDhhYzkKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9vbWFwMy9iZWFnbGUvdS1ib290LmxkcwpAQCAtMCwwICsxLDYzIEBACisvKgorICogSmFudWFyeSAyMDA0IC0gQ2hhbmdlZCB0byBzdXBwb3J0IEg0IGRldmljZQorICogQ29weXJpZ2h0IChjKSAyMDA0IFRleGFzIEluc3RydW1lbnRzCisgKgorICogKEMpIENvcHlyaWdodCAyMDAyCisgKiBHYXJ5IEplbm5lam9obiwgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgPGdqQGRlbnguZGU+CisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworT1VUUFVUX0ZPUk1BVCgiZWxmMzItbGl0dGxlYXJtIiwgImVsZjMyLWxpdHRsZWFybSIsICJlbGYzMi1saXR0bGVhcm0iKQorT1VUUFVUX0FSQ0goYXJtKQorRU5UUlkoX3N0YXJ0KQorU0VDVElPTlMKK3sKKwkuID0gMHgwMDAwMDAwMDsKKworCS4gPSBBTElHTig0KTsKKwkudGV4dAk6CisJeworCQljcHUvYXJtX2NvcnRleGE4L3N0YXJ0Lm8JKC50ZXh0KQorCQkqKC50ZXh0KQorCX0KKworCS4gPSBBTElHTig0KTsKKwkucm9kYXRhIDogeyAqKC5yb2RhdGEpIH0KKworCS5BUk0uZXh0YWIJOiB7ICooLkFSTS5leHRhYiogLmdudS5saW5rb25jZS5hcm1leHRhYi4qKSB9CisJX19leGlkeF9zdGFydCA9IC47CisJLkFSTS5leGlkeAk6IHsgKiguQVJNLmV4aWR4KiAuZ251LmxpbmtvbmNlLmFybWV4aWR4LiopIH0KKwlfX2V4aWR4X2VuZCA9IC47CisKKwkuID0gQUxJR04oNCk7CisJLmRhdGEgOiB7ICooLmRhdGEpIH0KKworCS4gPSBBTElHTig0KTsKKwkuZ290IDogeyAqKC5nb3QpIH0KKworCV9fdV9ib290X2NtZF9zdGFydCA9IC47CisJLnVfYm9vdF9jbWQgOiB7ICooLnVfYm9vdF9jbWQpIH0KKwlfX3VfYm9vdF9jbWRfZW5kID0gLjsKKworCS4gPSBBTElHTig0KTsKKwlfX2Jzc19zdGFydCA9IC47CisJLmJzcyA6IHsgKiguYnNzKSB9CisJX2VuZCA9IC47Cit9CmRpZmYgLS1naXQgYS9ib2FyZC9vbWFwMy9jb21tb24vTWFrZWZpbGUgYi9ib2FyZC9vbWFwMy9jb21tb24vTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2I4OTJmYQotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL29tYXAzL2NvbW1vbi9NYWtlZmlsZQpAQCAtMCwwICsxLDUzIEBACisjCisjIChDKSBDb3B5cmlnaHQgMjAwNgorIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgorIworIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworIyBwcm9qZWN0LgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisjIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisjIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLglTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisjIE1BIDAyMTExLTEzMDcgVVNBCisjCisKK2luY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5taworCitpZm5lcSAoJChPQkpUUkVFKSwkKFNSQ1RSRUUpKQorJChzaGVsbCBta2RpciAtcCAkKG9iailib2FyZC8kKFZFTkRPUikvY29tbW9uKQorZW5kaWYKKworTElCCT0gJChvYmopbGliJChWRU5ET1IpLmEKKworQ09CSlMtJChDT05GSUdfT01BUDNfQkVBR0xFKSArPSBwb3dlci5vCitDT0JKUy0kKENPTkZJR19PTUFQM19PVkVSTykgKz0gcG93ZXIubworQ09CSlMtJChDT05GSUdfT01BUDNfUEFORE9SQSkgKz0gcG93ZXIubworQ09CSlMtJChDT05GSUdfT01BUDNfWk9PTTEpICs9IHBvd2VyLm8KKworQ09CSlMJOj0gJChDT0JKUy15KQorU1JDUwk6PSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCisKK2FsbDoJJChMSUIpCisKKyQoTElCKToJJChvYmopLmRlcGVuZCAkKE9CSlMpCisJJChBUikgJChBUkZMQUdTKSAkQCAkKE9CSlMpCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKKworc2luY2x1ZGUgJChvYmopLmRlcGVuZAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC9vbWFwMy9jb21tb24vcG93ZXIuYyBiL2JvYXJkL29tYXAzL2NvbW1vbi9wb3dlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5MDhlNWIKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9vbWFwMy9jb21tb24vcG93ZXIuYwpAQCAtMCwwICsxLDc0IEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDA0LTIwMDgKKyAqIFRleGFzIEluc3RydW1lbnRzLCA8d3d3LnRpLmNvbT4KKyAqCisgKiBBdXRob3IgOgorICoJU3VuaWwgS3VtYXIgPHN1bmlsc2FpbmkwNUBnbWFpbC5jb20+CisgKglTaGFzaGkgUmFuamFuIDxzaGFzaGlyYW5qYW5tY2EwNUBnbWFpbC5jb20+CisgKgorICogRGVyaXZlZCBmcm9tIEJlYWdsZSBCb2FyZCBhbmQgMzQzMCBTRFAgY29kZSBieQorICoJUmljaGFyZCBXb29kcnVmZiA8ci13b29kcnVmZjJAdGkuY29tPgorICoJU3llZCBNb2hhbW1lZCBLaGFzaW0gPGtoYXNpbUB0aS5jb20+CisgKgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvc3lzX3Byb3RvLmg+CisjaW5jbHVkZSA8aTJjLmg+CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFJvdXRpbmU6IHBvd2VyX2luaXRfcgorICogRGVzY3JpcHRpb246IENvbmZpZ3VyZSBwb3dlciBzdXBwbHkKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgcG93ZXJfaW5pdF9yKHZvaWQpCit7CisJdW5zaWduZWQgY2hhciBieXRlOworCisjaWZkZWYgQ09ORklHX0RSSVZFUl9PTUFQMzRYWF9JMkMKKwlpMmNfaW5pdChDT05GSUdfU1lTX0kyQ19TUEVFRCwgQ09ORklHX1NZU19JMkNfU0xBVkUpOworI2VuZGlmCisKKwkvKgorCSAqIENvbmZpZ3VyZSBPTUFQMyBzdXBwbHkgdm9sdGFnZXMgaW4gcG93ZXIgbWFuYWdlbWVudAorCSAqIGNvbXBhbmlvbiBjaGlwLgorCSAqLworCisJLyogc2V0IFZBVVgzIHRvIDIuOFYgKi8KKwlieXRlID0gREVWX0dSUF9QMTsKKwlpMmNfd3JpdGUoUFdSTUdUX0FERFJfSUQ0LCBWQVVYM19ERVZfR1JQLCAxLCAmYnl0ZSwgMSk7CisJYnl0ZSA9IFZBVVgzX1ZTRUxfMjg7CisJaTJjX3dyaXRlKFBXUk1HVF9BRERSX0lENCwgVkFVWDNfREVESUNBVEVELCAxLCAmYnl0ZSwgMSk7CisKKwkvKiBzZXQgVlBMTDIgdG8gMS44ViAqLworCWJ5dGUgPSBERVZfR1JQX0FMTDsKKwlpMmNfd3JpdGUoUFdSTUdUX0FERFJfSUQ0LCBWUExMMl9ERVZfR1JQLCAxLCAmYnl0ZSwgMSk7CisJYnl0ZSA9IFZQTEwyX1ZTRUxfMTg7CisJaTJjX3dyaXRlKFBXUk1HVF9BRERSX0lENCwgVlBMTDJfREVESUNBVEVELCAxLCAmYnl0ZSwgMSk7CisKKwkvKiBzZXQgVkRBQyB0byAxLjhWICovCisJYnl0ZSA9IERFVl9HUlBfUDE7CisJaTJjX3dyaXRlKFBXUk1HVF9BRERSX0lENCwgVkRBQ19ERVZfR1JQLCAxLCAmYnl0ZSwgMSk7CisJYnl0ZSA9IFZEQUNfVlNFTF8xODsKKwlpMmNfd3JpdGUoUFdSTUdUX0FERFJfSUQ0LCBWREFDX0RFRElDQVRFRCwgMSwgJmJ5dGUsIDEpOworCisJLyogZW5hYmxlIExFRCAqLworCWJ5dGUgPSBMRURCUFdNIHwgTEVEQVBXTSB8IExFREJPTiB8IExFREFPTjsKKwlpMmNfd3JpdGUoUFdSTUdUX0FERFJfSUQzLCBMRURFTiwgMSwgJmJ5dGUsIDEpOworfQpkaWZmIC0tZ2l0IGEvYm9hcmQvb21hcDMvZXZtL01ha2VmaWxlIGIvYm9hcmQvb21hcDMvZXZtL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4M2NjZGMKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9vbWFwMy9ldm0vTWFrZWZpbGUKQEAgLTAsMCArMSw0OCBAQAorIworIyAoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDEsIDIwMDIKKyMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KKyMKKyMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyMgcHJvamVjdC4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorIyB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyMgTUEgMDIxMTEtMTMwNyBVU0EKKyMKKworaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCisKK0xJQgk9ICQob2JqKWxpYiQoQk9BUkQpLmEKKworQ09CSlMJOj0gZXZtLm8KKworU1JDUwk6PSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCisKKyQoTElCKToJJChvYmopLmRlcGVuZCAkKE9CSlMpCisJJChBUikgJChBUkZMQUdTKSAkQCAkKE9CSlMpCisKK2NsZWFuOgorCXJtIC1mICQoT0JKUykKKworZGlzdGNsZWFuOgljbGVhbgorCXJtIC1mICQoTElCKSBjb3JlICouYmFrICQob2JqKS5kZXBlbmQKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5taworCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCisKZGlmZiAtLWdpdCBhL2JvYXJkL29tYXAzL2V2bS9jb25maWcubWsgYi9ib2FyZC9vbWFwMy9ldm0vY29uZmlnLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkODczZWIKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9vbWFwMy9ldm0vY29uZmlnLm1rCkBAIC0wLDAgKzEsMzMgQEAKKyMKKyMgKEMpIENvcHlyaWdodCAyMDA2IC0gMjAwOAorIyBUZXhhcyBJbnN0cnVtZW50cywgPHd3dy50aS5jb20+CisjCisjIEVWTSB1c2VzIE9NQVAzIChBUk0tQ29ydGV4QTgpIGNwdQorIyBzZWUgaHR0cDovL3d3dy50aS5jb20vIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIFRleGFzIEluc3RydW1lbnRzCisjCisjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisjIHByb2plY3QuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyMgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyMgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisjIE1BIDAyMTExLTEzMDcgVVNBCisjCisjIFBoeXNpY2FsIEFkZHJlc3M6CisjIDgwMDAnMDAwMCAoYmFuazApCisjIEEwMDAvMDAwMCAoYmFuazEpCisjIExpbnV4LUtlcm5lbCBpcyBleHBlY3RlZCB0byBiZSBhdCA4MDAwJzgwMDAsIGVudHJ5IDgwMDAnODAwMAorIyAobWVtIGJhc2UgKyByZXNlcnZlZCkKKworIyBGb3IgdXNlIHdpdGggZXh0ZXJuYWwgb3IgaW50ZXJuYWwgYm9vdHMuCitURVhUX0JBU0UgPSAweDgwZTgwMDAwCmRpZmYgLS1naXQgYS9ib2FyZC9vbWFwMy9ldm0vZXZtLmMgYi9ib2FyZC9vbWFwMy9ldm0vZXZtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQwNjMxMgotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL29tYXAzL2V2bS9ldm0uYwpAQCAtMCwwICsxLDEyMiBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwNC0yMDA4CisgKiBUZXhhcyBJbnN0cnVtZW50cywgPHd3dy50aS5jb20+CisgKgorICogQXV0aG9yIDoKKyAqCU1hbmlrYW5kYW4gUGlsbGFpIDxtYW5pLnBpbGxhaUB0aS5jb20+CisgKgorICogRGVyaXZlZCBmcm9tIEJlYWdsZSBCb2FyZCBhbmQgMzQzMCBTRFAgY29kZSBieQorICoJUmljaGFyZCBXb29kcnVmZiA8ci13b29kcnVmZjJAdGkuY29tPgorICoJU3llZCBNb2hhbW1lZCBLaGFzaW0gPGtoYXNpbUB0aS5jb20+CisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9tZW0uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9tdXguaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9zeXNfcHJvdG8uaD4KKyNpbmNsdWRlIDxpMmMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgImV2bS5oIgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBSb3V0aW5lOiBib2FyZF9pbml0CisgKiBEZXNjcmlwdGlvbjogRWFybHkgaGFyZHdhcmUgaW5pdC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ludCBib2FyZF9pbml0KHZvaWQpCit7CisJREVDTEFSRV9HTE9CQUxfREFUQV9QVFI7CisKKwlncG1jX2luaXQoKTsgLyogaW4gU1JBTSBvciBTRFJBTSwgZmluaXNoIEdQTUMgKi8KKwkvKiBib2FyZCBpZCBmb3IgTGludXggKi8KKwlnZC0+YmQtPmJpX2FyY2hfbnVtYmVyID0gTUFDSF9UWVBFX09NQVAzRVZNOworCS8qIGJvb3QgcGFyYW0gYWRkciAqLworCWdkLT5iZC0+YmlfYm9vdF9wYXJhbXMgPSAoT01BUDM0WFhfU0RSQ19DUzAgKyAweDEwMCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUm91dGluZTogbWlzY19pbml0X3IKKyAqIERlc2NyaXB0aW9uOiBJbml0IGV0aGVybmV0IChkb25lIGhlcmUgc28gdWRlbGF5IHdvcmtzKQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW50IG1pc2NfaW5pdF9yKHZvaWQpCit7CisKKyNpZmRlZiBDT05GSUdfRFJJVkVSX09NQVAzNFhYX0kyQworCWkyY19pbml0KENPTkZJR19TWVNfSTJDX1NQRUVELCBDT05GSUdfU1lTX0kyQ19TTEFWRSk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX0NNRF9ORVQpCisJc2V0dXBfbmV0X2NoaXAoKTsKKyNlbmRpZgorCisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFJvdXRpbmU6IHNldF9tdXhjb25mX3JlZ3MKKyAqIERlc2NyaXB0aW9uOiBTZXR0aW5nIHVwIHRoZSBjb25maWd1cmF0aW9uIE11eCByZWdpc3RlcnMgc3BlY2lmaWMgdG8gdGhlCisgKgkJaGFyZHdhcmUuIE1hbnkgcGlucyBuZWVkIHRvIGJlIG1vdmVkIGZyb20gcHJvdGVjdCB0byBwcmltYXJ5CisgKgkJbW9kZS4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgc2V0X211eGNvbmZfcmVncyh2b2lkKQoreworCU1VWF9FVk0oKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUm91dGluZTogc2V0dXBfbmV0X2NoaXAKKyAqIERlc2NyaXB0aW9uOiBTZXR0aW5nIHVwIHRoZSBjb25maWd1cmF0aW9uIEdQTUMgcmVnaXN0ZXJzIHNwZWNpZmljIHRvIHRoZQorICoJCUV0aGVybmV0IGhhcmR3YXJlLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHZvaWQgc2V0dXBfbmV0X2NoaXAodm9pZCkKK3sKKwlncGlvX3QgKmdwaW8zX2Jhc2UgPSAoZ3Bpb190ICopT01BUDM0WFhfR1BJTzNfQkFTRTsKKwlncG1jX2NzeF90ICpncG1jX2NzNl9iYXNlID0gKGdwbWNfY3N4X3QgKilHUE1DX0NPTkZJR19DUzZfQkFTRTsKKwljdHJsX3QgKmN0cmxfYmFzZSA9IChjdHJsX3QgKilPTUFQMzRYWF9DVFJMX0JBU0U7CisKKwkvKiBDb25maWd1cmUgR1BNQyByZWdpc3RlcnMgKi8KKwl3cml0ZWwoTkVUX0dQTUNfQ09ORklHMSwgJmdwbWNfY3M2X2Jhc2UtPmNvbmZpZzEpOworCXdyaXRlbChORVRfR1BNQ19DT05GSUcyLCAmZ3BtY19jczZfYmFzZS0+Y29uZmlnMik7CisJd3JpdGVsKE5FVF9HUE1DX0NPTkZJRzMsICZncG1jX2NzNl9iYXNlLT5jb25maWczKTsKKwl3cml0ZWwoTkVUX0dQTUNfQ09ORklHNCwgJmdwbWNfY3M2X2Jhc2UtPmNvbmZpZzQpOworCXdyaXRlbChORVRfR1BNQ19DT05GSUc1LCAmZ3BtY19jczZfYmFzZS0+Y29uZmlnNSk7CisJd3JpdGVsKE5FVF9HUE1DX0NPTkZJRzYsICZncG1jX2NzNl9iYXNlLT5jb25maWc2KTsKKwl3cml0ZWwoTkVUX0dQTUNfQ09ORklHNywgJmdwbWNfY3M2X2Jhc2UtPmNvbmZpZzcpOworCisJLyogRW5hYmxlIG9mZiBtb2RlIGZvciBOV0UgaW4gUEFEQ09ORl9HUE1DX05XRSByZWdpc3RlciAqLworCXdyaXRldyhyZWFkdygmY3RybF9iYXNlIC0+Z3BtY19ud2UpIHwgMHgwRTAwLCAmY3RybF9iYXNlLT5ncG1jX253ZSk7CisJLyogRW5hYmxlIG9mZiBtb2RlIGZvciBOT0UgaW4gUEFEQ09ORl9HUE1DX05BRFZfQUxFIHJlZ2lzdGVyICovCisJd3JpdGV3KHJlYWR3KCZjdHJsX2Jhc2UtPmdwbWNfbm9lKSB8IDB4MEUwMCwgJmN0cmxfYmFzZS0+Z3BtY19ub2UpOworCS8qIEVuYWJsZSBvZmYgbW9kZSBmb3IgQUxFIGluIFBBRENPTkZfR1BNQ19OQURWX0FMRSByZWdpc3RlciAqLworCXdyaXRldyhyZWFkdygmY3RybF9iYXNlLT5ncG1jX25hZHZfYWxlKSB8IDB4MEUwMCwKKwkJJmN0cmxfYmFzZS0+Z3BtY19uYWR2X2FsZSk7CisKKwkvKiBNYWtlIEdQSU8gNjQgYXMgb3V0cHV0IHBpbiAqLworCXdyaXRlbChyZWFkbCgmZ3BpbzNfYmFzZS0+b2UpICYgfihHUElPMCksICZncGlvM19iYXNlLT5vZSk7CisKKwkvKiBOb3cgc2VuZCBhIHB1bHNlIG9uIHRoZSBHUElPIHBpbiAqLworCXdyaXRlbChHUElPMCwgJmdwaW8zX2Jhc2UtPnNldGRhdGFvdXQpOworCXVkZWxheSgxKTsKKwl3cml0ZWwoR1BJTzAsICZncGlvM19iYXNlLT5jbGVhcmRhdGFvdXQpOworCXVkZWxheSgxKTsKKwl3cml0ZWwoR1BJTzAsICZncGlvM19iYXNlLT5zZXRkYXRhb3V0KTsKK30KZGlmZiAtLWdpdCBhL2JvYXJkL29tYXAzL2V2bS9ldm0uaCBiL2JvYXJkL29tYXAzL2V2bS9ldm0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZWNlYTdmCi0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvb21hcDMvZXZtL2V2bS5oCkBAIC0wLDAgKzEsMzk2IEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDA4CisgKiBOaXNoYW50aCBNZW5vbiA8bWVub24ubmlzaGFudGhAZ21haWwuY29tPgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisjaWZuZGVmIF9FVk1fSF8KKyNkZWZpbmUgX0VWTV9IXworCitjb25zdCBvbWFwM19zeXNpbmZvIHN5c2luZm8gPSB7CisJT01BUDNFVk1fVjEsCisJT01BUDNFVk1fVjIsCisJRERSX0RJU0NSRVRFLAorCSIzNVgtRmFtaWx5IiwKKwkiT01BUDMgRVZNIGJvYXJkIiwKKyNpZiBkZWZpbmVkKENPTkZJR19FTlZfSVNfSU5fT05FTkFORCkKKwkiT25lTkFORCIsCisjZWxzZQorCSJOQU5EIiwKKyNlbmRpZgorfTsKKworc3RhdGljIHZvaWQgc2V0dXBfbmV0X2NoaXAodm9pZCk7CisKKy8qCisgKiBJRU4gIC0gSW5wdXQgRW5hYmxlCisgKiBJRElTIC0gSW5wdXQgRGlzYWJsZQorICogUFREICAtIFB1bGwgdHlwZSBEb3duCisgKiBQVFUgIC0gUHVsbCB0eXBlIFVwCisgKiBESVMgIC0gUHVsbCB0eXBlIHNlbGVjdGlvbiBpcyBpbmFjdGl2ZQorICogRU4gICAtIFB1bGwgdHlwZSBzZWxlY3Rpb24gaXMgYWN0aXZlCisgKiBNMCAgIC0gTW9kZSAwCisgKiBUaGUgY29tbWVudGVkIHN0cmluZyBnaXZlcyB0aGUgZmluYWwgbXV4IGNvbmZpZ3VyYXRpb24gZm9yIHRoYXQgcGluCisgKi8KKyNkZWZpbmUgTVVYX0VWTSgpIFwKKyAvKlNEUkMqL1wKKyBNVVhfVkFMKENQKFNEUkNfRDApLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qU0RSQ19EMCovXAorIE1VWF9WQUwoQ1AoU0RSQ19EMSksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypTRFJDX0QxKi9cCisgTVVYX1ZBTChDUChTRFJDX0QyKSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKlNEUkNfRDIqL1wKKyBNVVhfVkFMKENQKFNEUkNfRDMpLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qU0RSQ19EMyovXAorIE1VWF9WQUwoQ1AoU0RSQ19ENCksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypTRFJDX0Q0Ki9cCisgTVVYX1ZBTChDUChTRFJDX0Q1KSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKlNEUkNfRDUqL1wKKyBNVVhfVkFMKENQKFNEUkNfRDYpLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qU0RSQ19ENiovXAorIE1VWF9WQUwoQ1AoU0RSQ19ENyksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypTRFJDX0Q3Ki9cCisgTVVYX1ZBTChDUChTRFJDX0Q4KSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKlNEUkNfRDgqL1wKKyBNVVhfVkFMKENQKFNEUkNfRDkpLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qU0RSQ19EOSovXAorIE1VWF9WQUwoQ1AoU0RSQ19EMTApLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qU0RSQ19EMTAqL1wKKyBNVVhfVkFMKENQKFNEUkNfRDExKSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKlNEUkNfRDExKi9cCisgTVVYX1ZBTChDUChTRFJDX0QxMiksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypTRFJDX0QxMiovXAorIE1VWF9WQUwoQ1AoU0RSQ19EMTMpLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qU0RSQ19EMTMqL1wKKyBNVVhfVkFMKENQKFNEUkNfRDE0KSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKlNEUkNfRDE0Ki9cCisgTVVYX1ZBTChDUChTRFJDX0QxNSksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypTRFJDX0QxNSovXAorIE1VWF9WQUwoQ1AoU0RSQ19EMTYpLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qU0RSQ19EMTYqL1wKKyBNVVhfVkFMKENQKFNEUkNfRDE3KSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKlNEUkNfRDE3Ki9cCisgTVVYX1ZBTChDUChTRFJDX0QxOCksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypTRFJDX0QxOCovXAorIE1VWF9WQUwoQ1AoU0RSQ19EMTkpLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qU0RSQ19EMTkqL1wKKyBNVVhfVkFMKENQKFNEUkNfRDIwKSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKlNEUkNfRDIwKi9cCisgTVVYX1ZBTChDUChTRFJDX0QyMSksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypTRFJDX0QyMSovXAorIE1VWF9WQUwoQ1AoU0RSQ19EMjIpLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qU0RSQ19EMjIqL1wKKyBNVVhfVkFMKENQKFNEUkNfRDIzKSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKlNEUkNfRDIzKi9cCisgTVVYX1ZBTChDUChTRFJDX0QyNCksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypTRFJDX0QyNCovXAorIE1VWF9WQUwoQ1AoU0RSQ19EMjUpLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qU0RSQ19EMjUqL1wKKyBNVVhfVkFMKENQKFNEUkNfRDI2KSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKlNEUkNfRDI2Ki9cCisgTVVYX1ZBTChDUChTRFJDX0QyNyksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypTRFJDX0QyNyovXAorIE1VWF9WQUwoQ1AoU0RSQ19EMjgpLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qU0RSQ19EMjgqL1wKKyBNVVhfVkFMKENQKFNEUkNfRDI5KSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKlNEUkNfRDI5Ki9cCisgTVVYX1ZBTChDUChTRFJDX0QzMCksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypTRFJDX0QzMCovXAorIE1VWF9WQUwoQ1AoU0RSQ19EMzEpLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qU0RSQ19EMzEqL1wKKyBNVVhfVkFMKENQKFNEUkNfQ0xLKSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKlNEUkNfQ0xLKi9cCisgTVVYX1ZBTChDUChTRFJDX0RRUzApLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qU0RSQ19EUVMwKi9cCisgTVVYX1ZBTChDUChTRFJDX0RRUzEpLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qU0RSQ19EUVMxKi9cCisgTVVYX1ZBTChDUChTRFJDX0RRUzIpLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qU0RSQ19EUVMyKi9cCisgTVVYX1ZBTChDUChTRFJDX0RRUzMpLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qU0RSQ19EUVMzKi9cCisgLypHUE1DKi9cCisgTVVYX1ZBTChDUChHUE1DX0ExKSwJCShJRElTIHwgUFRVIHwgRU4gIHwgTTApKSAvKkdQTUNfQTEqL1wKKyBNVVhfVkFMKENQKEdQTUNfQTIpLAkJKElESVMgfCBQVFUgfCBFTiAgfCBNMCkpIC8qR1BNQ19BMiovXAorIE1VWF9WQUwoQ1AoR1BNQ19BMyksCQkoSURJUyB8IFBUVSB8IEVOICB8IE0wKSkgLypHUE1DX0EzKi9cCisgTVVYX1ZBTChDUChHUE1DX0E0KSwJCShJRElTIHwgUFRVIHwgRU4gIHwgTTApKSAvKkdQTUNfQTQqL1wKKyBNVVhfVkFMKENQKEdQTUNfQTUpLAkJKElESVMgfCBQVFUgfCBFTiAgfCBNMCkpIC8qR1BNQ19BNSovXAorIE1VWF9WQUwoQ1AoR1BNQ19BNiksCQkoSURJUyB8IFBUVSB8IEVOICB8IE0wKSkgLypHUE1DX0E2Ki9cCisgTVVYX1ZBTChDUChHUE1DX0E3KSwJCShJRElTIHwgUFRVIHwgRU4gIHwgTTApKSAvKkdQTUNfQTcqL1wKKyBNVVhfVkFMKENQKEdQTUNfQTgpLAkJKElESVMgfCBQVFUgfCBFTiAgfCBNMCkpIC8qR1BNQ19BOCovXAorIE1VWF9WQUwoQ1AoR1BNQ19BOSksCQkoSURJUyB8IFBUVSB8IEVOICB8IE0wKSkgLypHUE1DX0E5Ki9cCisgTVVYX1ZBTChDUChHUE1DX0ExMCksCQkoSURJUyB8IFBUVSB8IEVOICB8IE0wKSkgLypHUE1DX0ExMCovXAorIE1VWF9WQUwoQ1AoR1BNQ19EMCksCQkoSUVOICB8IFBUVSB8IEVOICB8IE0wKSkgLypHUE1DX0QwKi9cCisgTVVYX1ZBTChDUChHUE1DX0QxKSwJCShJRU4gIHwgUFRVIHwgRU4gIHwgTTApKSAvKkdQTUNfRDEqL1wKKyBNVVhfVkFMKENQKEdQTUNfRDIpLAkJKElFTiAgfCBQVFUgfCBFTiAgfCBNMCkpIC8qR1BNQ19EMiovXAorIE1VWF9WQUwoQ1AoR1BNQ19EMyksCQkoSUVOICB8IFBUVSB8IEVOICB8IE0wKSkgLypHUE1DX0QzKi9cCisgTVVYX1ZBTChDUChHUE1DX0Q0KSwJCShJRU4gIHwgUFRVIHwgRU4gIHwgTTApKSAvKkdQTUNfRDQqL1wKKyBNVVhfVkFMKENQKEdQTUNfRDUpLAkJKElFTiAgfCBQVFUgfCBFTiAgfCBNMCkpIC8qR1BNQ19ENSovXAorIE1VWF9WQUwoQ1AoR1BNQ19ENiksCQkoSUVOICB8IFBUVSB8IEVOICB8IE0wKSkgLypHUE1DX0Q2Ki9cCisgTVVYX1ZBTChDUChHUE1DX0Q3KSwJCShJRU4gIHwgUFRVIHwgRU4gIHwgTTApKSAvKkdQTUNfRDcqL1wKKyBNVVhfVkFMKENQKEdQTUNfRDgpLAkJKElFTiAgfCBQVFUgfCBFTiAgfCBNMCkpIC8qR1BNQ19EOCovXAorIE1VWF9WQUwoQ1AoR1BNQ19EOSksCQkoSUVOICB8IFBUVSB8IEVOICB8IE0wKSkgLypHUE1DX0Q5Ki9cCisgTVVYX1ZBTChDUChHUE1DX0QxMCksCQkoSUVOICB8IFBUVSB8IEVOICB8IE0wKSkgLypHUE1DX0QxMCovXAorIE1VWF9WQUwoQ1AoR1BNQ19EMTEpLAkJKElFTiAgfCBQVFUgfCBFTiAgfCBNMCkpIC8qR1BNQ19EMTEqL1wKKyBNVVhfVkFMKENQKEdQTUNfRDEyKSwJCShJRU4gIHwgUFRVIHwgRU4gIHwgTTApKSAvKkdQTUNfRDEyKi9cCisgTVVYX1ZBTChDUChHUE1DX0QxMyksCQkoSUVOICB8IFBUVSB8IEVOICB8IE0wKSkgLypHUE1DX0QxMyovXAorIE1VWF9WQUwoQ1AoR1BNQ19EMTQpLAkJKElFTiAgfCBQVFUgfCBFTiAgfCBNMCkpIC8qR1BNQ19EMTQqL1wKKyBNVVhfVkFMKENQKEdQTUNfRDE1KSwJCShJRU4gIHwgUFRVIHwgRU4gIHwgTTApKSAvKkdQTUNfRDE1Ki9cCisgTVVYX1ZBTChDUChHUE1DX05DUzApLAkJKElESVMgfCBQVFUgfCBFTiAgfCBNMCkpIC8qR1BNQ19uQ1MwKi9cCisgTVVYX1ZBTChDUChHUE1DX05DUzEpLAkJKElESVMgfCBQVFUgfCBFTiAgfCBNMCkpIC8qR1BNQ19uQ1MxKi9cCisgTVVYX1ZBTChDUChHUE1DX05DUzIpLAkJKElESVMgfCBQVFUgfCBFTiAgfCBNMCkpIC8qR1BNQ19uQ1MyKi9cCisgTVVYX1ZBTChDUChHUE1DX05DUzMpLAkJKElESVMgfCBQVFUgfCBFTiAgfCBNMCkpIC8qR1BNQ19uQ1MzKi9cCisgTVVYX1ZBTChDUChHUE1DX05DUzQpLAkJKElFTiAgfCBQVFUgfCBFTiAgfCBNMCkpIC8qR1BNQ19uQ1M0Ki9cCisgTVVYX1ZBTChDUChHUE1DX05DUzUpLAkJKElESVMgfCBQVFUgfCBFTiAgfCBNMCkpIC8qR1BNQ19uQ1M1Ki9cCisgTVVYX1ZBTChDUChHUE1DX05DUzYpLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qR1BNQ19uQ1M2Ki9cCisgTVVYX1ZBTChDUChHUE1DX05DUzcpLAkJKElFTiAgfCBQVFUgfCBFTiAgfCBNMCkpIC8qR1BNQ19uQ1M3Ki9cCisgTVVYX1ZBTChDUChHUE1DX0NMSyksCQkoSURJUyB8IFBUVSB8IEVOICB8IE0wKSkgLypHUE1DX0NMSyovXAorIE1VWF9WQUwoQ1AoR1BNQ19OQURWX0FMRSksCShJRElTIHwgUFREIHwgRElTIHwgTTApKSAvKkdQTUNfbkFEVl9BTEUqL1wKKyBNVVhfVkFMKENQKEdQTUNfTk9FKSwJCShJRElTIHwgUFREIHwgRElTIHwgTTApKSAvKkdQTUNfbk9FKi9cCisgTVVYX1ZBTChDUChHUE1DX05XRSksCQkoSURJUyB8IFBURCB8IERJUyB8IE0wKSkgLypHUE1DX25XRSovXAorIE1VWF9WQUwoQ1AoR1BNQ19OQkUwX0NMRSksCShJRElTIHwgUFRVIHwgRU4gIHwgTTApKSAvKkdQTUNfbkJFMF9DTEUqL1wKKyBNVVhfVkFMKENQKEdQTUNfTkJFMSksCQkoSUVOICB8IFBUVSB8IEVOICB8IE0wKSkgLypHUE1DX25CRTEqL1wKKyBNVVhfVkFMKENQKEdQTUNfTldQKSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKkdQTUNfbldQKi9cCisgTVVYX1ZBTChDUChHUE1DX1dBSVQwKSwJKElFTiAgfCBQVFUgfCBFTiAgfCBNMCkpIC8qR1BNQ19XQUlUMCovXAorIE1VWF9WQUwoQ1AoR1BNQ19XQUlUMSksCShJRU4gIHwgUFRVIHwgRU4gIHwgTTApKSAvKkdQTUNfV0FJVDEqL1wKKyBNVVhfVkFMKENQKEdQTUNfV0FJVDIpLAkoSUVOICB8IFBUVSB8IEVOICB8IE00KSkgLypHUElPXzY0Ki9cCisJCQkJCQkJIC8qIC0gRVRIX25SRVNFVCovXAorIE1VWF9WQUwoQ1AoR1BNQ19XQUlUMyksCShJRU4gIHwgUFRVIHwgRU4gIHwgTTApKSAvKkdQTUNfV0FJVDMqL1wKKyAvKkRTUyovXAorIE1VWF9WQUwoQ1AoRFNTX1BDTEspLAkJKElESVMgfCBQVEQgfCBESVMgfCBNMCkpIC8qRFNTX1BDTEsqL1wKKyBNVVhfVkFMKENQKERTU19IU1lOQyksCQkoSURJUyB8IFBURCB8IERJUyB8IE0wKSkgLypEU1NfSFNZTkMqL1wKKyBNVVhfVkFMKENQKERTU19WU1lOQyksCQkoSURJUyB8IFBURCB8IERJUyB8IE0wKSkgLypEU1NfVlNZTkMqL1wKKyBNVVhfVkFMKENQKERTU19BQ0JJQVMpLAkJKElESVMgfCBQVEQgfCBESVMgfCBNMCkpIC8qRFNTX0FDQklBUyovXAorIE1VWF9WQUwoQ1AoRFNTX0RBVEEwKSwJCShJRElTIHwgUFREIHwgRElTIHwgTTApKSAvKkRTU19EQVRBMCovXAorIE1VWF9WQUwoQ1AoRFNTX0RBVEExKSwJCShJRElTIHwgUFREIHwgRElTIHwgTTApKSAvKkRTU19EQVRBMSovXAorIE1VWF9WQUwoQ1AoRFNTX0RBVEEyKSwJCShJRElTIHwgUFREIHwgRElTIHwgTTApKSAvKkRTU19EQVRBMiovXAorIE1VWF9WQUwoQ1AoRFNTX0RBVEEzKSwJCShJRElTIHwgUFREIHwgRElTIHwgTTApKSAvKkRTU19EQVRBMyovXAorIE1VWF9WQUwoQ1AoRFNTX0RBVEE0KSwJCShJRElTIHwgUFREIHwgRElTIHwgTTApKSAvKkRTU19EQVRBNCovXAorIE1VWF9WQUwoQ1AoRFNTX0RBVEE1KSwJCShJRElTIHwgUFREIHwgRElTIHwgTTApKSAvKkRTU19EQVRBNSovXAorIE1VWF9WQUwoQ1AoRFNTX0RBVEE2KSwJCShJRElTIHwgUFREIHwgRElTIHwgTTApKSAvKkRTU19EQVRBNiovXAorIE1VWF9WQUwoQ1AoRFNTX0RBVEE3KSwJCShJRElTIHwgUFREIHwgRElTIHwgTTApKSAvKkRTU19EQVRBNyovXAorIE1VWF9WQUwoQ1AoRFNTX0RBVEE4KSwJCShJRElTIHwgUFREIHwgRElTIHwgTTApKSAvKkRTU19EQVRBOCovXAorIE1VWF9WQUwoQ1AoRFNTX0RBVEE5KSwJCShJRElTIHwgUFREIHwgRElTIHwgTTApKSAvKkRTU19EQVRBOSovXAorIE1VWF9WQUwoQ1AoRFNTX0RBVEExMCksCShJRElTIHwgUFREIHwgRElTIHwgTTApKSAvKkRTU19EQVRBMTAqL1wKKyBNVVhfVkFMKENQKERTU19EQVRBMTEpLAkoSURJUyB8IFBURCB8IERJUyB8IE0wKSkgLypEU1NfREFUQTExKi9cCisgTVVYX1ZBTChDUChEU1NfREFUQTEyKSwJKElESVMgfCBQVEQgfCBESVMgfCBNMCkpIC8qRFNTX0RBVEExMiovXAorIE1VWF9WQUwoQ1AoRFNTX0RBVEExMyksCShJRElTIHwgUFREIHwgRElTIHwgTTApKSAvKkRTU19EQVRBMTMqL1wKKyBNVVhfVkFMKENQKERTU19EQVRBMTQpLAkoSURJUyB8IFBURCB8IERJUyB8IE0wKSkgLypEU1NfREFUQTE0Ki9cCisgTVVYX1ZBTChDUChEU1NfREFUQTE1KSwJKElESVMgfCBQVEQgfCBESVMgfCBNMCkpIC8qRFNTX0RBVEExNSovXAorIE1VWF9WQUwoQ1AoRFNTX0RBVEExNiksCShJRElTIHwgUFREIHwgRElTIHwgTTApKSAvKkRTU19EQVRBMTYqL1wKKyBNVVhfVkFMKENQKERTU19EQVRBMTcpLAkoSURJUyB8IFBURCB8IERJUyB8IE0wKSkgLypEU1NfREFUQTE3Ki9cCisgTVVYX1ZBTChDUChEU1NfREFUQTE4KSwJKElESVMgfCBQVEQgfCBESVMgfCBNMCkpIC8qRFNTX0RBVEExOCovXAorIE1VWF9WQUwoQ1AoRFNTX0RBVEExOSksCShJRElTIHwgUFREIHwgRElTIHwgTTApKSAvKkRTU19EQVRBMTkqL1wKKyBNVVhfVkFMKENQKERTU19EQVRBMjApLAkoSURJUyB8IFBURCB8IERJUyB8IE0wKSkgLypEU1NfREFUQTIwKi9cCisgTVVYX1ZBTChDUChEU1NfREFUQTIxKSwJKElESVMgfCBQVEQgfCBESVMgfCBNMCkpIC8qRFNTX0RBVEEyMSovXAorIE1VWF9WQUwoQ1AoRFNTX0RBVEEyMiksCShJRElTIHwgUFREIHwgRElTIHwgTTApKSAvKkRTU19EQVRBMjIqL1wKKyBNVVhfVkFMKENQKERTU19EQVRBMjMpLAkoSURJUyB8IFBURCB8IERJUyB8IE0wKSkgLypEU1NfREFUQTIzKi9cCisgLypDQU1FUkEqL1wKKyBNVVhfVkFMKENQKENBTV9IUyksCQkoSUVOICB8IFBUVSB8IEVOICB8IE0wKSkgLypDQU1fSFMgKi9cCisgTVVYX1ZBTChDUChDQU1fVlMpLAkJKElFTiAgfCBQVFUgfCBFTiAgfCBNMCkpIC8qQ0FNX1ZTICovXAorIE1VWF9WQUwoQ1AoQ0FNX1hDTEtBKSwJCShJRElTIHwgUFREIHwgRElTIHwgTTApKSAvKkNBTV9YQ0xLQSovXAorIE1VWF9WQUwoQ1AoQ0FNX1BDTEspLAkJKElFTiAgfCBQVFUgfCBFTiAgfCBNMCkpIC8qQ0FNX1BDTEsqL1wKKyBNVVhfVkFMKENQKENBTV9GTEQpLAkJKElESVMgfCBQVEQgfCBESVMgfCBNNCkpIC8qR1BJT185OCovXAorCQkJCQkJCSAvKiAtIENBTV9SRVNFVCovXAorIE1VWF9WQUwoQ1AoQ0FNX0QwKSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKkNBTV9EMCovXAorIE1VWF9WQUwoQ1AoQ0FNX0QxKSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKkNBTV9EMSovXAorIE1VWF9WQUwoQ1AoQ0FNX0QyKSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKkNBTV9EMiovXAorIE1VWF9WQUwoQ1AoQ0FNX0QzKSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKkNBTV9EMyovXAorIE1VWF9WQUwoQ1AoQ0FNX0Q0KSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKkNBTV9ENCovXAorIE1VWF9WQUwoQ1AoQ0FNX0Q1KSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKkNBTV9ENSovXAorIE1VWF9WQUwoQ1AoQ0FNX0Q2KSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKkNBTV9ENiovXAorIE1VWF9WQUwoQ1AoQ0FNX0Q3KSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKkNBTV9ENyovXAorIE1VWF9WQUwoQ1AoQ0FNX0Q4KSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKkNBTV9EOCovXAorIE1VWF9WQUwoQ1AoQ0FNX0Q5KSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKkNBTV9EOSovXAorIE1VWF9WQUwoQ1AoQ0FNX0QxMCksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypDQU1fRDEwKi9cCisgTVVYX1ZBTChDUChDQU1fRDExKSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKkNBTV9EMTEqL1wKKyBNVVhfVkFMKENQKENBTV9YQ0xLQiksCQkoSURJUyB8IFBURCB8IERJUyB8IE0wKSkgLypDQU1fWENMS0IqL1wKKyBNVVhfVkFMKENQKENBTV9XRU4pLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNNCkpIC8qR1BJT18xNjcqL1wKKyBNVVhfVkFMKENQKENBTV9TVFJPQkUpLAkoSURJUyB8IFBURCB8IERJUyB8IE0wKSkgLypDQU1fU1RST0JFKi9cCisgTVVYX1ZBTChDUChDU0kyX0RYMCksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypDU0kyX0RYMCovXAorIE1VWF9WQUwoQ1AoQ1NJMl9EWTApLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qQ1NJMl9EWTAqL1wKKyBNVVhfVkFMKENQKENTSTJfRFgxKSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKkNTSTJfRFgxKi9cCisgTVVYX1ZBTChDUChDU0kyX0RZMSksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypDU0kyX0RZMSovXAorIC8qQXVkaW8gSW50ZXJmYWNlICovXAorIE1VWF9WQUwoQ1AoTUNCU1AyX0ZTWCksCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKk1jQlNQMl9GU1gqL1wKKyBNVVhfVkFMKENQKE1DQlNQMl9DTEtYKSwJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qTWNCU1AyX0NMS1gqL1wKKyBNVVhfVkFMKENQKE1DQlNQMl9EUiksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypNY0JTUDJfRFIqL1wKKyBNVVhfVkFMKENQKE1DQlNQMl9EWCksCQkoSURJUyB8IFBURCB8IERJUyB8IE0wKSkgLypNY0JTUDJfRFgqL1wKKyAvKkV4cGFuc2lvbiBjYXJkICAqL1wKKyBNVVhfVkFMKENQKE1NQzFfQ0xLKSwJCShJRElTIHwgUFRVIHwgRU4gIHwgTTApKSAvKk1NQzFfQ0xLKi9cCisgTVVYX1ZBTChDUChNTUMxX0NNRCksCQkoSUVOICB8IFBUVSB8IEVOICB8IE0wKSkgLypNTUMxX0NNRCovXAorIE1VWF9WQUwoQ1AoTU1DMV9EQVQwKSwJCShJRU4gIHwgUFRVIHwgRU4gIHwgTTApKSAvKk1NQzFfREFUMCovXAorIE1VWF9WQUwoQ1AoTU1DMV9EQVQxKSwJCShJRU4gIHwgUFRVIHwgRU4gIHwgTTApKSAvKk1NQzFfREFUMSovXAorIE1VWF9WQUwoQ1AoTU1DMV9EQVQyKSwJCShJRU4gIHwgUFRVIHwgRU4gIHwgTTApKSAvKk1NQzFfREFUMiovXAorIE1VWF9WQUwoQ1AoTU1DMV9EQVQzKSwJCShJRU4gIHwgUFRVIHwgRU4gIHwgTTApKSAvKk1NQzFfREFUMyovXAorIE1VWF9WQUwoQ1AoTU1DMV9EQVQ0KSwJCShJRU4gIHwgUFRVIHwgRU4gIHwgTTApKSAvKk1NQzFfREFUNCovXAorIE1VWF9WQUwoQ1AoTU1DMV9EQVQ1KSwJCShJRU4gIHwgUFRVIHwgRU4gIHwgTTApKSAvKk1NQzFfREFUNSovXAorIE1VWF9WQUwoQ1AoTU1DMV9EQVQ2KSwJCShJRU4gIHwgUFRVIHwgRU4gIHwgTTApKSAvKk1NQzFfREFUNiovXAorIE1VWF9WQUwoQ1AoTU1DMV9EQVQ3KSwJCShJRU4gIHwgUFRVIHwgRU4gIHwgTTApKSAvKk1NQzFfREFUNyovXAorIC8qV2lyZWxlc3MgTEFOICovXAorIE1VWF9WQUwoQ1AoTU1DMl9DTEspLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qTU1DMl9DTEsqL1wKKyBNVVhfVkFMKENQKE1NQzJfQ01EKSwJCShJRU4gIHwgUFRVIHwgRU4gIHwgTTApKSAvKk1NQzJfQ01EKi9cCisgTVVYX1ZBTChDUChNTUMyX0RBVDApLAkJKElFTiAgfCBQVFUgfCBFTiAgfCBNMCkpIC8qTU1DMl9EQVQwKi9cCisgTVVYX1ZBTChDUChNTUMyX0RBVDEpLAkJKElFTiAgfCBQVFUgfCBFTiAgfCBNMCkpIC8qTU1DMl9EQVQxKi9cCisgTVVYX1ZBTChDUChNTUMyX0RBVDIpLAkJKElFTiAgfCBQVFUgfCBFTiAgfCBNMCkpIC8qTU1DMl9EQVQyKi9cCisgTVVYX1ZBTChDUChNTUMyX0RBVDMpLAkJKElFTiAgfCBQVFUgfCBFTiAgfCBNMCkpIC8qTU1DMl9EQVQzKi9cCisgTVVYX1ZBTChDUChNTUMyX0RBVDQpLAkJKElESVMgfCBQVEQgfCBESVMgfCBNMCkpIC8qTU1DMl9EQVQ0Ki9cCisgTVVYX1ZBTChDUChNTUMyX0RBVDUpLAkJKElESVMgfCBQVEQgfCBESVMgfCBNMCkpIC8qTU1DMl9EQVQ1Ki9cCisgTVVYX1ZBTChDUChNTUMyX0RBVDYpLAkJKElESVMgfCBQVEQgfCBESVMgfCBNMCkpIC8qTU1DMl9EQVQ2ICovXAorIE1VWF9WQUwoQ1AoTU1DMl9EQVQ3KSwJCShJRU4gIHwgUFRVIHwgRU4gIHwgTTApKSAvKk1NQzJfREFUNyovXAorIC8qQmx1ZXRvb3RoKi9cCisgTVVYX1ZBTChDUChNQ0JTUDNfRFgpLAkJKElESVMgfCBQVEQgfCBESVMgfCBNMCkpIC8qTWNCU1AzX0RYKi9cCisgTVVYX1ZBTChDUChNQ0JTUDNfRFIpLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qTWNCU1AzX0RSKi9cCisgTVVYX1ZBTChDUChNQ0JTUDNfQ0xLWCksCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKk1jQlNQM19DTEtYICAqL1wKKyBNVVhfVkFMKENQKE1DQlNQM19GU1gpLAkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypNY0JTUDNfRlNYKi9cCisgTVVYX1ZBTChDUChVQVJUMl9DVFMpLAkJKElFTiAgfCBQVFUgfCBFTiAgfCBNMCkpIC8qVUFSVDJfQ1RTKi9cCisgTVVYX1ZBTChDUChVQVJUMl9SVFMpLAkJKElESVMgfCBQVEQgfCBESVMgfCBNMCkpIC8qVUFSVDJfUlRTKi9cCisgTVVYX1ZBTChDUChVQVJUMl9UWCksCQkoSURJUyB8IFBURCB8IERJUyB8IE0wKSkgLypVQVJUMl9UWCovXAorIE1VWF9WQUwoQ1AoVUFSVDJfUlgpLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qVUFSVDJfUlgqL1wKKyAvKk1vZGVtIEludGVyZmFjZSAqL1wKKyBNVVhfVkFMKENQKFVBUlQxX1RYKSwJCShJRElTIHwgUFREIHwgRElTIHwgTTApKSAvKlVBUlQxX1RYKi9cCisgTVVYX1ZBTChDUChVQVJUMV9SVFMpLAkJKElESVMgfCBQVEQgfCBESVMgfCBNMCkpIC8qVUFSVDFfUlRTKi9cCisgTVVYX1ZBTChDUChVQVJUMV9DVFMpLAkJKElFTiAgfCBQVFUgfCBESVMgfCBNMCkpIC8qVUFSVDFfQ1RTKi9cCisgTVVYX1ZBTChDUChVQVJUMV9SWCksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypVQVJUMV9SWCovXAorIE1VWF9WQUwoQ1AoTUNCU1A0X0NMS1gpLAkoSURJUyB8IFBURCB8IERJUyB8IE00KSkgLypHUElPXzE1MiovXAorCQkJCQkJCSAvKiAtIExDRF9JTkkqL1wKKyBNVVhfVkFMKENQKE1DQlNQNF9EUiksCQkoSURJUyB8IFBURCB8IERJUyB8IE00KSkgLypHUElPXzE1MyovXAorCQkJCQkJCSAvKiAtIExDRF9FTlZERCAqL1wKKyBNVVhfVkFMKENQKE1DQlNQNF9EWCksCQkoSURJUyB8IFBURCB8IERJUyB8IE00KSkgLypHUElPXzE1NCovXAorCQkJCQkJCSAvKiAtIExDRF9RVkdBL25WR0EgKi9cCisgTVVYX1ZBTChDUChNQ0JTUDRfRlNYKSwJKElESVMgfCBQVEQgfCBESVMgfCBNNCkpIC8qR1BJT18xNTUqL1wKKwkJCQkJCQkgLyogLSBMQ0RfUkVTQiAqL1wKKyBNVVhfVkFMKENQKE1DQlNQMV9DTEtSKSwJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qTUNCU1AxX0NMS1IgICovXAorIE1VWF9WQUwoQ1AoTUNCU1AxX0ZTUiksCShJRElTIHwgUFRVIHwgRU4gIHwgTTApKSAvKk1DQlNQMV9GU1IqL1wKKyBNVVhfVkFMKENQKE1DQlNQMV9EWCksCQkoSURJUyB8IFBURCB8IERJUyB8IE0wKSkgLypNQ0JTUDFfRFgqL1wKKyBNVVhfVkFMKENQKE1DQlNQMV9EUiksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypNQ0JTUDFfRFIqL1wKKyBNVVhfVkFMKENQKE1DQlNQX0NMS1MpLAkoSUVOICB8IFBUVSB8IERJUyB8IE0wKSkgLypNQ0JTUF9DTEtTICAqL1wKKyBNVVhfVkFMKENQKE1DQlNQMV9GU1gpLAkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypNQ0JTUDFfRlNYKi9cCisgTVVYX1ZBTChDUChNQ0JTUDFfQ0xLWCksCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKk1DQlNQMV9DTEtYICAqL1wKKyAvKlNlcmlhbCBJbnRlcmZhY2UqL1wKKyBNVVhfVkFMKENQKFVBUlQzX0NUU19SQ1RYKSwJKElFTiAgfCBQVEQgfCBFTiAgfCBNMCkpIC8qVUFSVDNfQ1RTXyovXAorCQkJCQkJCSAvKiBSQ1RYKi9cCisgTVVYX1ZBTChDUChVQVJUM19SVFNfU0QpLAkoSURJUyB8IFBURCB8IERJUyB8IE0wKSkgLypVQVJUM19SVFNfU0QgKi9cCisgTVVYX1ZBTChDUChVQVJUM19SWF9JUlJYKSwJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qVUFSVDNfUlhfSVJSWCovXAorIE1VWF9WQUwoQ1AoVUFSVDNfVFhfSVJUWCksCShJRElTIHwgUFREIHwgRElTIHwgTTApKSAvKlVBUlQzX1RYX0lSVFgqL1wKKyBNVVhfVkFMKENQKEhTVVNCMF9DTEspLAkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypIU1VTQjBfQ0xLKi9cCisgTVVYX1ZBTChDUChIU1VTQjBfU1RQKSwJKElESVMgfCBQVFUgfCBFTiAgfCBNMCkpIC8qSFNVU0IwX1NUUCovXAorIE1VWF9WQUwoQ1AoSFNVU0IwX0RJUiksCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKkhTVVNCMF9ESVIqL1wKKyBNVVhfVkFMKENQKEhTVVNCMF9OWFQpLAkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypIU1VTQjBfTlhUKi9cCisgTVVYX1ZBTChDUChIU1VTQjBfREFUQTApLAkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypIU1VTQjBfREFUQTAqL1wKKyBNVVhfVkFMKENQKEhTVVNCMF9EQVRBMSksCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKkhTVVNCMF9EQVRBMSovXAorIE1VWF9WQUwoQ1AoSFNVU0IwX0RBVEEyKSwJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qSFNVU0IwX0RBVEEyKi9cCisgTVVYX1ZBTChDUChIU1VTQjBfREFUQTMpLAkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypIU1VTQjBfREFUQTMqL1wKKyBNVVhfVkFMKENQKEhTVVNCMF9EQVRBNCksCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKkhTVVNCMF9EQVRBNCovXAorIE1VWF9WQUwoQ1AoSFNVU0IwX0RBVEE1KSwJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qSFNVU0IwX0RBVEE1Ki9cCisgTVVYX1ZBTChDUChIU1VTQjBfREFUQTYpLAkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypIU1VTQjBfREFUQTYqL1wKKyBNVVhfVkFMKENQKEhTVVNCMF9EQVRBNyksCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKkhTVVNCMF9EQVRBNyovXAorIE1VWF9WQUwoQ1AoSTJDMV9TQ0wpLAkJKElFTiAgfCBQVFUgfCBFTiAgfCBNMCkpIC8qSTJDMV9TQ0wqL1wKKyBNVVhfVkFMKENQKEkyQzFfU0RBKSwJCShJRU4gIHwgUFRVIHwgRU4gIHwgTTApKSAvKkkyQzFfU0RBKi9cCisgTVVYX1ZBTChDUChJMkMyX1NDTCksCQkoSUVOICB8IFBUVSB8IEVOICB8IE0wKSkgLypJMkMyX1NDTCovXAorIE1VWF9WQUwoQ1AoSTJDMl9TREEpLAkJKElFTiAgfCBQVFUgfCBFTiAgfCBNMCkpIC8qSTJDMl9TREEqL1wKKyBNVVhfVkFMKENQKEkyQzNfU0NMKSwJCShJRU4gIHwgUFRVIHwgRU4gIHwgTTApKSAvKkkyQzNfU0NMKi9cCisgTVVYX1ZBTChDUChJMkMzX1NEQSksCQkoSUVOICB8IFBUVSB8IEVOICB8IE0wKSkgLypJMkMzX1NEQSovXAorIE1VWF9WQUwoQ1AoSTJDNF9TQ0wpLAkJKElFTiAgfCBQVFUgfCBFTiAgfCBNMCkpIC8qSTJDNF9TQ0wqL1wKKyBNVVhfVkFMKENQKEkyQzRfU0RBKSwJCShJRU4gIHwgUFRVIHwgRU4gIHwgTTApKSAvKkkyQzRfU0RBKi9cCisgTVVYX1ZBTChDUChIRFFfU0lPKSwJCShJRU4gIHwgUFRVIHwgRU4gIHwgTTApKSAvKkhEUV9TSU8qL1wKKyBNVVhfVkFMKENQKE1DU1BJMV9DTEspLAkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypNY1NQSTFfQ0xLKi9cCisgTVVYX1ZBTChDUChNQ1NQSTFfU0lNTyksCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKk1jU1BJMV9TSU1PICAqL1wKKyBNVVhfVkFMKENQKE1DU1BJMV9TT01JKSwJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qTWNTUEkxX1NPTUkgICovXAorIE1VWF9WQUwoQ1AoTUNTUEkxX0NTMCksCShJRU4gIHwgUFREIHwgRU4gIHwgTTApKSAvKk1jU1BJMV9DUzAqL1wKKyBNVVhfVkFMKENQKE1DU1BJMV9DUzEpLAkoSUVOICB8IFBURCB8IEVOICB8IE00KSkgLypHUElPXzE3NSovXAorCQkJCQkJCSAvKiBUU19QRU5fSVJRICovXAorIE1VWF9WQUwoQ1AoTUNTUEkxX0NTMiksCShJRU4gIHwgUFRVIHwgRElTIHwgTTQpKSAvKkdQSU9fMTc2Ki9cCisJCQkJCQkJIC8qIC0gTEFOX0lOVFIqL1wKKyBNVVhfVkFMKENQKE1DU1BJMV9DUzMpLAkoSUVOICB8IFBURCB8IEVOICB8IE0wKSkgLypNY1NQSTFfQ1MzKi9cCisgTVVYX1ZBTChDUChNQ1NQSTJfQ0xLKSwJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qTWNTUEkyX0NMSyovXAorIE1VWF9WQUwoQ1AoTUNTUEkyX1NJTU8pLAkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypNY1NQSTJfU0lNTyovXAorIE1VWF9WQUwoQ1AoTUNTUEkyX1NPTUkpLAkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypNY1NQSTJfU09NSSovXAorIE1VWF9WQUwoQ1AoTUNTUEkyX0NTMCksCShJRU4gIHwgUFREIHwgRU4gIHwgTTApKSAvKk1jU1BJMl9DUzAqL1wKKyBNVVhfVkFMKENQKE1DU1BJMl9DUzEpLAkoSUVOICB8IFBURCB8IEVOICB8IE0wKSkgLypNY1NQSTJfQ1MxKi9cCisgLypDb250cm9sIGFuZCBkZWJ1ZyAqL1wKKyBNVVhfVkFMKENQKFNZU18zMkspLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qU1lTXzMySyovXAorIE1VWF9WQUwoQ1AoU1lTX0NMS1JFUSksCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKlNZU19DTEtSRVEqL1wKKyBNVVhfVkFMKENQKFNZU19OSVJRKSwJCShJRU4gIHwgUFRVIHwgRU4gIHwgTTApKSAvKlNZU19uSVJRKi9cCisgTVVYX1ZBTChDUChTWVNfQk9PVDApLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNNCkpIC8qR1BJT18yKi9cCisJCQkJCQkJIC8qIC0gUEVOX0lSUSAqL1wKKyBNVVhfVkFMKENQKFNZU19CT09UMSksCQkoSUVOICB8IFBURCB8IERJUyB8IE00KSkgLypHUElPXzMgKi9cCisgTVVYX1ZBTChDUChTWVNfQk9PVDIpLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNNCkpIC8qR1BJT180Ki9cCisgTVVYX1ZBTChDUChTWVNfQk9PVDMpLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNNCkpIC8qR1BJT181Ki9cCisgTVVYX1ZBTChDUChTWVNfQk9PVDQpLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNNCkpIC8qR1BJT182Ki9cCisgTVVYX1ZBTChDUChTWVNfQk9PVDUpLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNNCkpIC8qR1BJT183Ki9cCisgTVVYX1ZBTChDUChTWVNfQk9PVDYpLAkJKElESVMgfCBQVEQgfCBESVMgfCBNNCkpIC8qR1BJT184Ki9cCisJCQkJCQkJIC8qIC0gVklPXzFWOCovXAorIE1VWF9WQUwoQ1AoU1lTX09GRl9NT0RFKSwJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qU1lTX09GRl9NT0RFKi9cCisgTVVYX1ZBTChDUChTWVNfQ0xLT1VUMSksCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKlNZU19DTEtPVVQxKi9cCisgTVVYX1ZBTChDUChTWVNfQ0xLT1VUMiksCShJRU4gIHwgUFRVIHwgRU4gIHwgTTApKSAvKlNZU19DTEtPVVQyKi9cCisgTVVYX1ZBTChDUChKVEFHX25UUlNUKSwJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qSlRBR19uVFJTVCovXAorIE1VWF9WQUwoQ1AoSlRBR19UQ0spLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qSlRBR19UQ0sqL1wKKyBNVVhfVkFMKENQKEpUQUdfVE1TKSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKkpUQUdfVE1TKi9cCisgTVVYX1ZBTChDUChKVEFHX1RESSksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypKVEFHX1RESSovXAorIE1VWF9WQUwoQ1AoSlRBR19FTVUwKSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKkpUQUdfRU1VMCovXAorIE1VWF9WQUwoQ1AoSlRBR19FTVUxKSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKkpUQUdfRU1VMSovXAorIE1VWF9WQUwoQ1AoRVRLX0NMS19FUzIpLAkoSURJUyB8IFBUVSB8IEVOICB8IE0wKSkgLypFVEtfQ0xLKi9cCisgTVVYX1ZBTChDUChFVEtfQ1RMX0VTMiksCShJRElTIHwgUFREIHwgRElTIHwgTTApKSAvKkVUS19DVEwqL1wKKyBNVVhfVkFMKENQKEVUS19EMF9FUzIgKSwJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qRVRLX0QwKi9cCisgTVVYX1ZBTChDUChFVEtfRDFfRVMyICksCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKkVUS19EMSovXAorIE1VWF9WQUwoQ1AoRVRLX0QyX0VTMiApLAkoSUVOICB8IFBURCB8IEVOICB8IE0wKSkgLypFVEtfRDIqL1wKKyBNVVhfVkFMKENQKEVUS19EM19FUzIgKSwJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qRVRLX0QzKi9cCisgTVVYX1ZBTChDUChFVEtfRDRfRVMyICksCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKkVUS19ENCovXAorIE1VWF9WQUwoQ1AoRVRLX0Q1X0VTMiApLAkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypFVEtfRDUqL1wKKyBNVVhfVkFMKENQKEVUS19ENl9FUzIgKSwJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qRVRLX0Q2Ki9cCisgTVVYX1ZBTChDUChFVEtfRDdfRVMyICksCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKkVUS19ENyovXAorIE1VWF9WQUwoQ1AoRVRLX0Q4X0VTMiApLAkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypFVEtfRDgqL1wKKyBNVVhfVkFMKENQKEVUS19EOV9FUzIgKSwJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qRVRLX0Q5Ki9cCisgTVVYX1ZBTChDUChFVEtfRDEwX0VTMiksCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKkVUS19EMTAqL1wKKyBNVVhfVkFMKENQKEVUS19EMTFfRVMyKSwJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qRVRLX0QxMSovXAorIE1VWF9WQUwoQ1AoRVRLX0QxMl9FUzIpLAkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypFVEtfRDEyKi9cCisgTVVYX1ZBTChDUChFVEtfRDEzX0VTMiksCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKkVUS19EMTMqL1wKKyBNVVhfVkFMKENQKEVUS19EMTRfRVMyKSwJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qRVRLX0QxNCovXAorIE1VWF9WQUwoQ1AoRVRLX0QxNV9FUzIpLAkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypFVEtfRDE1Ki9cCisgLypEaWUgdG8gRGllICovXAorIE1VWF9WQUwoQ1AoRDJEX01DQUQxKSwJCShJRU4gIHwgUFREIHwgRU4gIHwgTTApKSAvKmQyZF9tY2FkMSovXAorIE1VWF9WQUwoQ1AoRDJEX01DQUQyKSwJCShJRU4gIHwgUFREIHwgRU4gIHwgTTApKSAvKmQyZF9tY2FkMiovXAorIE1VWF9WQUwoQ1AoRDJEX01DQUQzKSwJCShJRU4gIHwgUFREIHwgRU4gIHwgTTApKSAvKmQyZF9tY2FkMyovXAorIE1VWF9WQUwoQ1AoRDJEX01DQUQ0KSwJCShJRU4gIHwgUFREIHwgRU4gIHwgTTApKSAvKmQyZF9tY2FkNCovXAorIE1VWF9WQUwoQ1AoRDJEX01DQUQ1KSwJCShJRU4gIHwgUFREIHwgRU4gIHwgTTApKSAvKmQyZF9tY2FkNSovXAorIE1VWF9WQUwoQ1AoRDJEX01DQUQ2KSwJCShJRU4gIHwgUFREIHwgRU4gIHwgTTApKSAvKmQyZF9tY2FkNiovXAorIE1VWF9WQUwoQ1AoRDJEX01DQUQ3KSwJCShJRU4gIHwgUFREIHwgRU4gIHwgTTApKSAvKmQyZF9tY2FkNyovXAorIE1VWF9WQUwoQ1AoRDJEX01DQUQ4KSwJCShJRU4gIHwgUFREIHwgRU4gIHwgTTApKSAvKmQyZF9tY2FkOCovXAorIE1VWF9WQUwoQ1AoRDJEX01DQUQ5KSwJCShJRU4gIHwgUFREIHwgRU4gIHwgTTApKSAvKmQyZF9tY2FkOSovXAorIE1VWF9WQUwoQ1AoRDJEX01DQUQxMCksCShJRU4gIHwgUFREIHwgRU4gIHwgTTApKSAvKmQyZF9tY2FkMTAqL1wKKyBNVVhfVkFMKENQKEQyRF9NQ0FEMTEpLAkoSUVOICB8IFBURCB8IEVOICB8IE0wKSkgLypkMmRfbWNhZDExKi9cCisgTVVYX1ZBTChDUChEMkRfTUNBRDEyKSwJKElFTiAgfCBQVEQgfCBFTiAgfCBNMCkpIC8qZDJkX21jYWQxMiovXAorIE1VWF9WQUwoQ1AoRDJEX01DQUQxMyksCShJRU4gIHwgUFREIHwgRU4gIHwgTTApKSAvKmQyZF9tY2FkMTMqL1wKKyBNVVhfVkFMKENQKEQyRF9NQ0FEMTQpLAkoSUVOICB8IFBURCB8IEVOICB8IE0wKSkgLypkMmRfbWNhZDE0Ki9cCisgTVVYX1ZBTChDUChEMkRfTUNBRDE1KSwJKElFTiAgfCBQVEQgfCBFTiAgfCBNMCkpIC8qZDJkX21jYWQxNSovXAorIE1VWF9WQUwoQ1AoRDJEX01DQUQxNiksCShJRU4gIHwgUFREIHwgRU4gIHwgTTApKSAvKmQyZF9tY2FkMTYqL1wKKyBNVVhfVkFMKENQKEQyRF9NQ0FEMTcpLAkoSUVOICB8IFBURCB8IEVOICB8IE0wKSkgLypkMmRfbWNhZDE3Ki9cCisgTVVYX1ZBTChDUChEMkRfTUNBRDE4KSwJKElFTiAgfCBQVEQgfCBFTiAgfCBNMCkpIC8qZDJkX21jYWQxOCovXAorIE1VWF9WQUwoQ1AoRDJEX01DQUQxOSksCShJRU4gIHwgUFREIHwgRU4gIHwgTTApKSAvKmQyZF9tY2FkMTkqL1wKKyBNVVhfVkFMKENQKEQyRF9NQ0FEMjApLAkoSUVOICB8IFBURCB8IEVOICB8IE0wKSkgLypkMmRfbWNhZDIwKi9cCisgTVVYX1ZBTChDUChEMkRfTUNBRDIxKSwJKElFTiAgfCBQVEQgfCBFTiAgfCBNMCkpIC8qZDJkX21jYWQyMSovXAorIE1VWF9WQUwoQ1AoRDJEX01DQUQyMiksCShJRU4gIHwgUFREIHwgRU4gIHwgTTApKSAvKmQyZF9tY2FkMjIqL1wKKyBNVVhfVkFMKENQKEQyRF9NQ0FEMjMpLAkoSUVOICB8IFBURCB8IEVOICB8IE0wKSkgLypkMmRfbWNhZDIzKi9cCisgTVVYX1ZBTChDUChEMkRfTUNBRDI0KSwJKElFTiAgfCBQVEQgfCBFTiAgfCBNMCkpIC8qZDJkX21jYWQyNCovXAorIE1VWF9WQUwoQ1AoRDJEX01DQUQyNSksCShJRU4gIHwgUFREIHwgRU4gIHwgTTApKSAvKmQyZF9tY2FkMjUqL1wKKyBNVVhfVkFMKENQKEQyRF9NQ0FEMjYpLAkoSUVOICB8IFBURCB8IEVOICB8IE0wKSkgLypkMmRfbWNhZDI2Ki9cCisgTVVYX1ZBTChDUChEMkRfTUNBRDI3KSwJKElFTiAgfCBQVEQgfCBFTiAgfCBNMCkpIC8qZDJkX21jYWQyNyovXAorIE1VWF9WQUwoQ1AoRDJEX01DQUQyOCksCShJRU4gIHwgUFREIHwgRU4gIHwgTTApKSAvKmQyZF9tY2FkMjgqL1wKKyBNVVhfVkFMKENQKEQyRF9NQ0FEMjkpLAkoSUVOICB8IFBURCB8IEVOICB8IE0wKSkgLypkMmRfbWNhZDI5Ki9cCisgTVVYX1ZBTChDUChEMkRfTUNBRDMwKSwJKElFTiAgfCBQVEQgfCBFTiAgfCBNMCkpIC8qZDJkX21jYWQzMCovXAorIE1VWF9WQUwoQ1AoRDJEX01DQUQzMSksCShJRU4gIHwgUFREIHwgRU4gIHwgTTApKSAvKmQyZF9tY2FkMzEqL1wKKyBNVVhfVkFMKENQKEQyRF9NQ0FEMzIpLAkoSUVOICB8IFBURCB8IEVOICB8IE0wKSkgLypkMmRfbWNhZDMyKi9cCisgTVVYX1ZBTChDUChEMkRfTUNBRDMzKSwJKElFTiAgfCBQVEQgfCBFTiAgfCBNMCkpIC8qZDJkX21jYWQzMyovXAorIE1VWF9WQUwoQ1AoRDJEX01DQUQzNCksCShJRU4gIHwgUFREIHwgRU4gIHwgTTApKSAvKmQyZF9tY2FkMzQqL1wKKyBNVVhfVkFMKENQKEQyRF9NQ0FEMzUpLAkoSUVOICB8IFBURCB8IEVOICB8IE0wKSkgLypkMmRfbWNhZDM1Ki9cCisgTVVYX1ZBTChDUChEMkRfTUNBRDM2KSwJKElFTiAgfCBQVEQgfCBFTiAgfCBNMCkpIC8qZDJkX21jYWQzNiovXAorIE1VWF9WQUwoQ1AoRDJEX0NMSzI2TUkpLAkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypkMmRfY2xrMjZtaSovXAorIE1VWF9WQUwoQ1AoRDJEX05SRVNQV1JPTiksCShJRU4gIHwgUFREIHwgRU4gIHwgTTApKSAvKmQyZF9ucmVzcHdyb24qL1wKKyBNVVhfVkFMKENQKEQyRF9OUkVTV0FSTSksCShJRU4gIHwgUFRVIHwgRU4gIHwgTTApKSAvKmQyZF9ucmVzd2FybSAqL1wKKyBNVVhfVkFMKENQKEQyRF9BUk05TklSUSksCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKmQyZF9hcm05bmlycSAqL1wKKyBNVVhfVkFMKENQKEQyRF9VTUEyUDZGSVEpLAkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypkMmRfdW1hMnA2ZmlxKi9cCisgTVVYX1ZBTChDUChEMkRfU1BJTlQpLAkJKElFTiAgfCBQVEQgfCBFTiAgfCBNMCkpIC8qZDJkX3NwaW50Ki9cCisgTVVYX1ZBTChDUChEMkRfRlJJTlQpLAkJKElFTiAgfCBQVEQgfCBFTiAgfCBNMCkpIC8qZDJkX2ZyaW50Ki9cCisgTVVYX1ZBTChDUChEMkRfRE1BUkVRMCksCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKmQyZF9kbWFyZXEwKi9cCisgTVVYX1ZBTChDUChEMkRfRE1BUkVRMSksCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKmQyZF9kbWFyZXExKi9cCisgTVVYX1ZBTChDUChEMkRfRE1BUkVRMiksCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKmQyZF9kbWFyZXEyKi9cCisgTVVYX1ZBTChDUChEMkRfRE1BUkVRMyksCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKmQyZF9kbWFyZXEzKi9cCisgTVVYX1ZBTChDUChEMkRfTjNHVFJTVCksCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKmQyZF9uM2d0cnN0Ki9cCisgTVVYX1ZBTChDUChEMkRfTjNHVERJKSwJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qZDJkX24zZ3RkaSovXAorIE1VWF9WQUwoQ1AoRDJEX04zR1RETyksCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKmQyZF9uM2d0ZG8qL1wKKyBNVVhfVkFMKENQKEQyRF9OM0dUTVMpLAkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypkMmRfbjNndG1zKi9cCisgTVVYX1ZBTChDUChEMkRfTjNHVENLKSwJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qZDJkX24zZ3RjayovXAorIE1VWF9WQUwoQ1AoRDJEX04zR1JUQ0spLAkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypkMmRfbjNncnRjayovXAorIE1VWF9WQUwoQ1AoRDJEX01TVERCWSksCShJRU4gIHwgUFRVIHwgRU4gIHwgTTApKSAvKmQyZF9tc3RkYnkqL1wKKyBNVVhfVkFMKENQKEQyRF9TV0FLRVVQKSwJKElFTiAgfCBQVEQgfCBFTiAgfCBNMCkpIC8qZDJkX3N3YWtldXAqL1wKKyBNVVhfVkFMKENQKEQyRF9JRExFUkVRKSwJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qZDJkX2lkbGVyZXEqL1wKKyBNVVhfVkFMKENQKEQyRF9JRExFQUNLKSwJKElFTiAgfCBQVFUgfCBFTiAgfCBNMCkpIC8qZDJkX2lkbGVhY2sqL1wKKyBNVVhfVkFMKENQKEQyRF9NV1JJVEUpLAkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypkMmRfbXdyaXRlKi9cCisgTVVYX1ZBTChDUChEMkRfU1dSSVRFKSwJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qZDJkX3N3cml0ZSovXAorIE1VWF9WQUwoQ1AoRDJEX01SRUFEKSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKmQyZF9tcmVhZCovXAorIE1VWF9WQUwoQ1AoRDJEX1NSRUFEKSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKmQyZF9zcmVhZCovXAorIE1VWF9WQUwoQ1AoRDJEX01CVVNGTEFHKSwJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qZDJkX21idXNmbGFnKi9cCisgTVVYX1ZBTChDUChEMkRfU0JVU0ZMQUcpLAkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypkMmRfc2J1c2ZsYWcqL1wKKyBNVVhfVkFMKENQKFNEUkNfQ0tFMCksCQkoSURJUyB8IFBUVSB8IEVOICB8IE0wKSkgLypzZHJjX2NrZTAqL1wKKyBNVVhfVkFMKENQKFNEUkNfQ0tFMSksCQkoSURJUyB8IFBURCB8IERJUyB8IE03KSkgLypzZHJjX2NrZTEqL1wKKworI2VuZGlmCmRpZmYgLS1naXQgYS9ib2FyZC9vbWFwMy9ldm0vdS1ib290LmxkcyBiL2JvYXJkL29tYXAzL2V2bS91LWJvb3QubGRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5ZDhhYzkKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9vbWFwMy9ldm0vdS1ib290LmxkcwpAQCAtMCwwICsxLDYzIEBACisvKgorICogSmFudWFyeSAyMDA0IC0gQ2hhbmdlZCB0byBzdXBwb3J0IEg0IGRldmljZQorICogQ29weXJpZ2h0IChjKSAyMDA0IFRleGFzIEluc3RydW1lbnRzCisgKgorICogKEMpIENvcHlyaWdodCAyMDAyCisgKiBHYXJ5IEplbm5lam9obiwgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgPGdqQGRlbnguZGU+CisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworT1VUUFVUX0ZPUk1BVCgiZWxmMzItbGl0dGxlYXJtIiwgImVsZjMyLWxpdHRsZWFybSIsICJlbGYzMi1saXR0bGVhcm0iKQorT1VUUFVUX0FSQ0goYXJtKQorRU5UUlkoX3N0YXJ0KQorU0VDVElPTlMKK3sKKwkuID0gMHgwMDAwMDAwMDsKKworCS4gPSBBTElHTig0KTsKKwkudGV4dAk6CisJeworCQljcHUvYXJtX2NvcnRleGE4L3N0YXJ0Lm8JKC50ZXh0KQorCQkqKC50ZXh0KQorCX0KKworCS4gPSBBTElHTig0KTsKKwkucm9kYXRhIDogeyAqKC5yb2RhdGEpIH0KKworCS5BUk0uZXh0YWIJOiB7ICooLkFSTS5leHRhYiogLmdudS5saW5rb25jZS5hcm1leHRhYi4qKSB9CisJX19leGlkeF9zdGFydCA9IC47CisJLkFSTS5leGlkeAk6IHsgKiguQVJNLmV4aWR4KiAuZ251LmxpbmtvbmNlLmFybWV4aWR4LiopIH0KKwlfX2V4aWR4X2VuZCA9IC47CisKKwkuID0gQUxJR04oNCk7CisJLmRhdGEgOiB7ICooLmRhdGEpIH0KKworCS4gPSBBTElHTig0KTsKKwkuZ290IDogeyAqKC5nb3QpIH0KKworCV9fdV9ib290X2NtZF9zdGFydCA9IC47CisJLnVfYm9vdF9jbWQgOiB7ICooLnVfYm9vdF9jbWQpIH0KKwlfX3VfYm9vdF9jbWRfZW5kID0gLjsKKworCS4gPSBBTElHTig0KTsKKwlfX2Jzc19zdGFydCA9IC47CisJLmJzcyA6IHsgKiguYnNzKSB9CisJX2VuZCA9IC47Cit9CmRpZmYgLS1naXQgYS9ib2FyZC9vbWFwMy9vdmVyby9NYWtlZmlsZSBiL2JvYXJkL29tYXAzL292ZXJvL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkNWY0NTEKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9vbWFwMy9vdmVyby9NYWtlZmlsZQpAQCAtMCwwICsxLDQ4IEBACisjCisjIChDKSBDb3B5cmlnaHQgMjAwMCwgMjAwMSwgMjAwMgorIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgorIworIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworIyBwcm9qZWN0LgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisjIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisjIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorIyBNQSAwMjExMS0xMzA3IFVTQQorIworCitpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKKworTElCCT0gJChvYmopbGliJChCT0FSRCkuYQorCitDT0JKUwk6PSBvdmVyby5vCisKK1NSQ1MJOj0gJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQorCiskKExJQik6CSQob2JqKS5kZXBlbmQgJChPQkpTKQorCSQoQVIpICQoQVJGTEFHUykgJEAgJChPQkpTKQorCitjbGVhbjoKKwlybSAtZiAkKE9CSlMpCisKK2Rpc3RjbGVhbjoJY2xlYW4KKwlybSAtZiAkKExJQikgY29yZSAqLmJhayAkKG9iaikuZGVwZW5kCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKKworc2luY2x1ZGUgJChvYmopLmRlcGVuZAorCmRpZmYgLS1naXQgYS9ib2FyZC9vbWFwMy9vdmVyby9jb25maWcubWsgYi9ib2FyZC9vbWFwMy9vdmVyby9jb25maWcubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDM3MmZkOQotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL29tYXAzL292ZXJvL2NvbmZpZy5tawpAQCAtMCwwICsxLDI5IEBACisjCisjIE92ZXJvIHVzZXMgT01BUDMgKEFSTS1Db3J0ZXhBOCkgY3B1CisjCisjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisjIHByb2plY3QuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyMgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyMgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisjIE1BIDAyMTExLTEzMDcgVVNBCisjCisjIFBoeXNpY2FsIEFkZHJlc3M6CisjIDgwMDAnMDAwMCAoYmFuazApCisjIEEwMDAvMDAwMCAoYmFuazEpCisjIExpbnV4LUtlcm5lbCBpcyBleHBlY3RlZCB0byBiZSBhdCA4MDAwJzgwMDAsIGVudHJ5IDgwMDAnODAwMAorIyAobWVtIGJhc2UgKyByZXNlcnZlZCkKKworIyBGb3IgdXNlIHdpdGggZXh0ZXJuYWwgb3IgaW50ZXJuYWwgYm9vdHMuCitURVhUX0JBU0UgPSAweDgwZTgwMDAwCmRpZmYgLS1naXQgYS9ib2FyZC9vbWFwMy9vdmVyby9vdmVyby5jIGIvYm9hcmQvb21hcDMvb3Zlcm8vb3Zlcm8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTY0MTIzCi0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvb21hcDMvb3Zlcm8vb3Zlcm8uYwpAQCAtMCwwICsxLDg4IEBACisvKgorICogTWFpbnRhaW5lciA6IFN0ZXZlIFNha29tYW4gPHN0ZXZlQHNha29tYW4uY29tPgorICoKKyAqIERlcml2ZWQgZnJvbSBCZWFnbGUgQm9hcmQsIDM0MzAgU0RQLCBhbmQgT01BUDNFVk0gY29kZSBieQorICoJUmljaGFyZCBXb29kcnVmZiA8ci13b29kcnVmZjJAdGkuY29tPgorICoJU3llZCBNb2hhbW1lZCBLaGFzaW0gPGtoYXNpbUB0aS5jb20+CisgKglTdW5pbCBLdW1hciA8c3VuaWxzYWluaTA1QGdtYWlsLmNvbT4KKyAqCVNoYXNoaSBSYW5qYW4gPHNoYXNoaXJhbmphbm1jYTA1QGdtYWlsLmNvbT4KKyAqCisgKiAoQykgQ29weXJpZ2h0IDIwMDQtMjAwOAorICogVGV4YXMgSW5zdHJ1bWVudHMsIDx3d3cudGkuY29tPgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvbXV4Lmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvc3lzX3Byb3RvLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlICJvdmVyby5oIgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBSb3V0aW5lOiBib2FyZF9pbml0CisgKiBEZXNjcmlwdGlvbjogRWFybHkgaGFyZHdhcmUgaW5pdC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ludCBib2FyZF9pbml0KHZvaWQpCit7CisJREVDTEFSRV9HTE9CQUxfREFUQV9QVFI7CisKKwlncG1jX2luaXQoKTsgLyogaW4gU1JBTSBvciBTRFJBTSwgZmluaXNoIEdQTUMgKi8KKwkvKiBib2FyZCBpZCBmb3IgTGludXggKi8KKwlnZC0+YmQtPmJpX2FyY2hfbnVtYmVyID0gTUFDSF9UWVBFX09WRVJPOworCS8qIGJvb3QgcGFyYW0gYWRkciAqLworCWdkLT5iZC0+YmlfYm9vdF9wYXJhbXMgPSAoT01BUDM0WFhfU0RSQ19DUzAgKyAweDEwMCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUm91dGluZTogbWlzY19pbml0X3IKKyAqIERlc2NyaXB0aW9uOiBDb25maWd1cmUgYm9hcmQgc3BlY2lmaWMgcGFydHMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ludCBtaXNjX2luaXRfcih2b2lkKQoreworCWdwaW9fdCAqZ3BpbzVfYmFzZSA9IChncGlvX3QgKilPTUFQMzRYWF9HUElPNV9CQVNFOworCWdwaW9fdCAqZ3BpbzZfYmFzZSA9IChncGlvX3QgKilPTUFQMzRYWF9HUElPNl9CQVNFOworCisJcG93ZXJfaW5pdF9yKCk7CisKKwkvKiBDb25maWd1cmUgR1BJT3MgdG8gb3V0cHV0ICovCisJd3JpdGVsKH4oKEdQSU8xMCkgfCBHUElPOSB8IEdQSU8zIHwgR1BJTzIpLCAmZ3BpbzZfYmFzZS0+b2UpOworCXdyaXRlbCh+KEdQSU8zMSB8IEdQSU8zMCB8IEdQSU8yOSB8IEdQSU8yOCB8IEdQSU8yMiB8IEdQSU8yMSB8CisJCUdQSU8xNSB8IEdQSU8xNCB8IEdQSU8xMyB8IEdQSU8xMiksICZncGlvNV9iYXNlLT5vZSk7CisKKwkvKiBTZXQgR1BJT3MgKi8KKwl3cml0ZWwoR1BJTzEwIHwgR1BJTzkgfCBHUElPMyB8IEdQSU8yLCAmZ3BpbzZfYmFzZS0+c2V0ZGF0YW91dCk7CisJd3JpdGVsKEdQSU8zMSB8IEdQSU8zMCB8IEdQSU8yOSB8IEdQSU8yOCB8IEdQSU8yMiB8IEdQSU8yMSB8CisJCUdQSU8xNSB8IEdQSU8xNCB8IEdQSU8xMyB8IEdQSU8xMiwgJmdwaW81X2Jhc2UtPnNldGRhdGFvdXQpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFJvdXRpbmU6IHNldF9tdXhjb25mX3JlZ3MKKyAqIERlc2NyaXB0aW9uOiBTZXR0aW5nIHVwIHRoZSBjb25maWd1cmF0aW9uIE11eCByZWdpc3RlcnMgc3BlY2lmaWMgdG8gdGhlCisgKgkJaGFyZHdhcmUuIE1hbnkgcGlucyBuZWVkIHRvIGJlIG1vdmVkIGZyb20gcHJvdGVjdCB0byBwcmltYXJ5CisgKgkJbW9kZS4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgc2V0X211eGNvbmZfcmVncyh2b2lkKQoreworCU1VWF9PVkVSTygpOworfQpkaWZmIC0tZ2l0IGEvYm9hcmQvb21hcDMvb3Zlcm8vb3Zlcm8uaCBiL2JvYXJkL29tYXAzL292ZXJvL292ZXJvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2MxYjZiYwotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL29tYXAzL292ZXJvL292ZXJvLmgKQEAgLTAsMCArMSwzODEgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDgKKyAqIFN0ZXZlIFNha29tYW4gPHN0ZXZlQHNha29tYW4uY29tPgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisjaWZuZGVmIF9PVkVST19IXworI2RlZmluZSBfT1ZFUk9fSF8KKworY29uc3Qgb21hcDNfc3lzaW5mbyBzeXNpbmZvID0geworCVNEUF8zNDMwX1YxLAorCVNEUF8zNDMwX1YyLAorCUREUl9TVEFDS0VELAorCSIzNTAzIiwKKwkiR3Vtc3RpeCBPdmVybyBib2FyZCIsCisjaWYgZGVmaW5lZChDT05GSUdfRU5WX0lTX0lOX09ORU5BTkQpCisJIk9uZU5BTkQiLAorI2Vsc2UKKwkiTkFORCIsCisjZW5kaWYKK307CisKKy8qCisgKiBJRU4gIC0gSW5wdXQgRW5hYmxlCisgKiBJRElTIC0gSW5wdXQgRGlzYWJsZQorICogUFREICAtIFB1bGwgdHlwZSBEb3duCisgKiBQVFUgIC0gUHVsbCB0eXBlIFVwCisgKiBESVMgIC0gUHVsbCB0eXBlIHNlbGVjdGlvbiBpcyBpbmFjdGl2ZQorICogRU4gICAtIFB1bGwgdHlwZSBzZWxlY3Rpb24gaXMgYWN0aXZlCisgKiBNMCAgIC0gTW9kZSAwCisgKiBUaGUgY29tbWVudGVkIHN0cmluZyBnaXZlcyB0aGUgZmluYWwgbXV4IGNvbmZpZ3VyYXRpb24gZm9yIHRoYXQgcGluCisgKi8KKyNkZWZpbmUgTVVYX09WRVJPKCkgXAorIC8qU0RSQyovXAorIE1VWF9WQUwoQ1AoU0RSQ19EMCksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypTRFJDX0QwKi9cCisgTVVYX1ZBTChDUChTRFJDX0QxKSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKlNEUkNfRDEqL1wKKyBNVVhfVkFMKENQKFNEUkNfRDIpLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qU0RSQ19EMiovXAorIE1VWF9WQUwoQ1AoU0RSQ19EMyksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypTRFJDX0QzKi9cCisgTVVYX1ZBTChDUChTRFJDX0Q0KSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKlNEUkNfRDQqL1wKKyBNVVhfVkFMKENQKFNEUkNfRDUpLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qU0RSQ19ENSovXAorIE1VWF9WQUwoQ1AoU0RSQ19ENiksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypTRFJDX0Q2Ki9cCisgTVVYX1ZBTChDUChTRFJDX0Q3KSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKlNEUkNfRDcqL1wKKyBNVVhfVkFMKENQKFNEUkNfRDgpLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qU0RSQ19EOCovXAorIE1VWF9WQUwoQ1AoU0RSQ19EOSksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypTRFJDX0Q5Ki9cCisgTVVYX1ZBTChDUChTRFJDX0QxMCksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypTRFJDX0QxMCovXAorIE1VWF9WQUwoQ1AoU0RSQ19EMTEpLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qU0RSQ19EMTEqL1wKKyBNVVhfVkFMKENQKFNEUkNfRDEyKSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKlNEUkNfRDEyKi9cCisgTVVYX1ZBTChDUChTRFJDX0QxMyksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypTRFJDX0QxMyovXAorIE1VWF9WQUwoQ1AoU0RSQ19EMTQpLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qU0RSQ19EMTQqL1wKKyBNVVhfVkFMKENQKFNEUkNfRDE1KSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKlNEUkNfRDE1Ki9cCisgTVVYX1ZBTChDUChTRFJDX0QxNiksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypTRFJDX0QxNiovXAorIE1VWF9WQUwoQ1AoU0RSQ19EMTcpLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qU0RSQ19EMTcqL1wKKyBNVVhfVkFMKENQKFNEUkNfRDE4KSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKlNEUkNfRDE4Ki9cCisgTVVYX1ZBTChDUChTRFJDX0QxOSksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypTRFJDX0QxOSovXAorIE1VWF9WQUwoQ1AoU0RSQ19EMjApLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qU0RSQ19EMjAqL1wKKyBNVVhfVkFMKENQKFNEUkNfRDIxKSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKlNEUkNfRDIxKi9cCisgTVVYX1ZBTChDUChTRFJDX0QyMiksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypTRFJDX0QyMiovXAorIE1VWF9WQUwoQ1AoU0RSQ19EMjMpLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qU0RSQ19EMjMqL1wKKyBNVVhfVkFMKENQKFNEUkNfRDI0KSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKlNEUkNfRDI0Ki9cCisgTVVYX1ZBTChDUChTRFJDX0QyNSksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypTRFJDX0QyNSovXAorIE1VWF9WQUwoQ1AoU0RSQ19EMjYpLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qU0RSQ19EMjYqL1wKKyBNVVhfVkFMKENQKFNEUkNfRDI3KSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKlNEUkNfRDI3Ki9cCisgTVVYX1ZBTChDUChTRFJDX0QyOCksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypTRFJDX0QyOCovXAorIE1VWF9WQUwoQ1AoU0RSQ19EMjkpLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qU0RSQ19EMjkqL1wKKyBNVVhfVkFMKENQKFNEUkNfRDMwKSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKlNEUkNfRDMwKi9cCisgTVVYX1ZBTChDUChTRFJDX0QzMSksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypTRFJDX0QzMSovXAorIE1VWF9WQUwoQ1AoU0RSQ19DTEspLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qU0RSQ19DTEsqL1wKKyBNVVhfVkFMKENQKFNEUkNfRFFTMCksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypTRFJDX0RRUzAqL1wKKyBNVVhfVkFMKENQKFNEUkNfRFFTMSksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypTRFJDX0RRUzEqL1wKKyBNVVhfVkFMKENQKFNEUkNfRFFTMiksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypTRFJDX0RRUzIqL1wKKyBNVVhfVkFMKENQKFNEUkNfRFFTMyksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypTRFJDX0RRUzMqL1wKKyAvKkdQTUMqL1wKKyBNVVhfVkFMKENQKEdQTUNfQTEpLAkJKElESVMgfCBQVEQgfCBESVMgfCBNMCkpIC8qR1BNQ19BMSovXAorIE1VWF9WQUwoQ1AoR1BNQ19BMiksCQkoSURJUyB8IFBURCB8IERJUyB8IE0wKSkgLypHUE1DX0EyKi9cCisgTVVYX1ZBTChDUChHUE1DX0EzKSwJCShJRElTIHwgUFREIHwgRElTIHwgTTApKSAvKkdQTUNfQTMqL1wKKyBNVVhfVkFMKENQKEdQTUNfQTQpLAkJKElESVMgfCBQVEQgfCBESVMgfCBNMCkpIC8qR1BNQ19BNCovXAorIE1VWF9WQUwoQ1AoR1BNQ19BNSksCQkoSURJUyB8IFBURCB8IERJUyB8IE0wKSkgLypHUE1DX0E1Ki9cCisgTVVYX1ZBTChDUChHUE1DX0E2KSwJCShJRElTIHwgUFREIHwgRElTIHwgTTApKSAvKkdQTUNfQTYqL1wKKyBNVVhfVkFMKENQKEdQTUNfQTcpLAkJKElESVMgfCBQVEQgfCBESVMgfCBNMCkpIC8qR1BNQ19BNyovXAorIE1VWF9WQUwoQ1AoR1BNQ19BOCksCQkoSURJUyB8IFBURCB8IERJUyB8IE0wKSkgLypHUE1DX0E4Ki9cCisgTVVYX1ZBTChDUChHUE1DX0E5KSwJCShJRElTIHwgUFREIHwgRElTIHwgTTApKSAvKkdQTUNfQTkqL1wKKyBNVVhfVkFMKENQKEdQTUNfQTEwKSwJCShJRElTIHwgUFREIHwgRElTIHwgTTApKSAvKkdQTUNfQTEwKi9cCisgTVVYX1ZBTChDUChHUE1DX0QwKSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKkdQTUNfRDAqL1wKKyBNVVhfVkFMKENQKEdQTUNfRDEpLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qR1BNQ19EMSovXAorIE1VWF9WQUwoQ1AoR1BNQ19EMiksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypHUE1DX0QyKi9cCisgTVVYX1ZBTChDUChHUE1DX0QzKSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKkdQTUNfRDMqL1wKKyBNVVhfVkFMKENQKEdQTUNfRDQpLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qR1BNQ19ENCovXAorIE1VWF9WQUwoQ1AoR1BNQ19ENSksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypHUE1DX0Q1Ki9cCisgTVVYX1ZBTChDUChHUE1DX0Q2KSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKkdQTUNfRDYqL1wKKyBNVVhfVkFMKENQKEdQTUNfRDcpLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qR1BNQ19ENyovXAorIE1VWF9WQUwoQ1AoR1BNQ19EOCksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypHUE1DX0Q4Ki9cCisgTVVYX1ZBTChDUChHUE1DX0Q5KSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKkdQTUNfRDkqL1wKKyBNVVhfVkFMKENQKEdQTUNfRDEwKSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKkdQTUNfRDEwKi9cCisgTVVYX1ZBTChDUChHUE1DX0QxMSksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypHUE1DX0QxMSovXAorIE1VWF9WQUwoQ1AoR1BNQ19EMTIpLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qR1BNQ19EMTIqL1wKKyBNVVhfVkFMKENQKEdQTUNfRDEzKSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKkdQTUNfRDEzKi9cCisgTVVYX1ZBTChDUChHUE1DX0QxNCksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypHUE1DX0QxNCovXAorIE1VWF9WQUwoQ1AoR1BNQ19EMTUpLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qR1BNQ19EMTUqL1wKKyBNVVhfVkFMKENQKEdQTUNfTkNTMCksCQkoSURJUyB8IFBUVSB8IEVOICB8IE0wKSkgLypHUE1DX25DUzAqL1wKKyBNVVhfVkFMKENQKEdQTUNfTkNTMSksCQkoSURJUyB8IFBUVSB8IEVOICB8IE0wKSkgLypHUE1DX25DUzEqL1wKKyBNVVhfVkFMKENQKEdQTUNfTkNTMiksCQkoSURJUyB8IFBUVSB8IEVOICB8IE0wKSkgLypHUE1DX25DUzIqL1wKKyBNVVhfVkFMKENQKEdQTUNfTkNTMyksCQkoSUVOICB8IFBUVSB8IEVOICB8IE00KSkgLypHUElPXzU0Ki9cCisJCQkJCQkJIC8qIC0gTU1DMV9XUCovXAorIE1VWF9WQUwoQ1AoR1BNQ19OQ1M0KSwJCShJRElTIHwgUFRVIHwgRU4gIHwgTTApKSAvKkdQTUNfbkNTNCovXAorIE1VWF9WQUwoQ1AoR1BNQ19OQ1M1KSwJCShJRElTIHwgUFREIHwgRElTIHwgTTApKSAvKkdQTUNfbkNTNSovXAorIE1VWF9WQUwoQ1AoR1BNQ19OQ1M2KSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKkdQTUNfbkNTNiovXAorIE1VWF9WQUwoQ1AoR1BNQ19OQ1M3KSwJCShJRU4gIHwgUFRVIHwgRU4gIHwgTTApKSAvKkdQTUNfbkNTNyovXAorIE1VWF9WQUwoQ1AoR1BNQ19OQkUxKSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKkdQTUNfbkNTMyovXAorIE1VWF9WQUwoQ1AoR1BNQ19DTEspLAkJKElESVMgfCBQVEQgfCBESVMgfCBNMCkpIC8qR1BNQ19DTEsqL1wKKyBNVVhfVkFMKENQKEdQTUNfTkFEVl9BTEUpLAkoSURJUyB8IFBURCB8IERJUyB8IE0wKSkgLypHUE1DX25BRFZfQUxFKi9cCisgTVVYX1ZBTChDUChHUE1DX05PRSksCQkoSURJUyB8IFBURCB8IERJUyB8IE0wKSkgLypHUE1DX25PRSovXAorIE1VWF9WQUwoQ1AoR1BNQ19OV0UpLAkJKElESVMgfCBQVEQgfCBESVMgfCBNMCkpIC8qR1BNQ19uV0UqL1wKKyBNVVhfVkFMKENQKEdQTUNfTkJFMF9DTEUpLAkoSURJUyB8IFBURCB8IERJUyB8IE0wKSkgLypHUE1DX25CRTBfQ0xFKi9cCisgTVVYX1ZBTChDUChHUE1DX05XUCksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypHUE1DX25XUCovXAorIE1VWF9WQUwoQ1AoR1BNQ19XQUlUMCksCShJRU4gIHwgUFRVIHwgRU4gIHwgTTApKSAvKkdQTUNfV0FJVDAqL1wKKyBNVVhfVkFMKENQKEdQTUNfV0FJVDEpLAkoSUVOICB8IFBUVSB8IEVOICB8IE0wKSkgLypHUE1DX1dBSVQxKi9cCisgTVVYX1ZBTChDUChHUE1DX1dBSVQyKSwJKElFTiAgfCBQVFUgfCBFTiAgfCBNMCkpIC8qR1BNQ19uQ1MzKi9cCisgTVVYX1ZBTChDUChHUE1DX1dBSVQzKSwJKElFTiAgfCBQVFUgfCBFTiAgfCBNMCkpIC8qR1BNQ19uQ1MzKi9cCisgLypEU1MqL1wKKyBNVVhfVkFMKENQKERTU19QQ0xLKSwJCShJRElTIHwgUFREIHwgRElTIHwgTTApKSAvKkRTU19QQ0xLKi9cCisgTVVYX1ZBTChDUChEU1NfSFNZTkMpLAkJKElESVMgfCBQVEQgfCBESVMgfCBNMCkpIC8qRFNTX0hTWU5DKi9cCisgTVVYX1ZBTChDUChEU1NfVlNZTkMpLAkJKElESVMgfCBQVEQgfCBESVMgfCBNMCkpIC8qRFNTX1ZTWU5DKi9cCisgTVVYX1ZBTChDUChEU1NfQUNCSUFTKSwJKElESVMgfCBQVEQgfCBESVMgfCBNMCkpIC8qRFNTX0FDQklBUyovXAorIE1VWF9WQUwoQ1AoRFNTX0RBVEEwKSwJCShJRElTIHwgUFREIHwgRElTIHwgTTApKSAvKkRTU19EQVRBMCovXAorIE1VWF9WQUwoQ1AoRFNTX0RBVEExKSwJCShJRElTIHwgUFREIHwgRElTIHwgTTApKSAvKkRTU19EQVRBMSovXAorIE1VWF9WQUwoQ1AoRFNTX0RBVEEyKSwJCShJRElTIHwgUFREIHwgRElTIHwgTTApKSAvKkRTU19EQVRBMiovXAorIE1VWF9WQUwoQ1AoRFNTX0RBVEEzKSwJCShJRElTIHwgUFREIHwgRElTIHwgTTApKSAvKkRTU19EQVRBMyovXAorIE1VWF9WQUwoQ1AoRFNTX0RBVEE0KSwJCShJRElTIHwgUFREIHwgRElTIHwgTTApKSAvKkRTU19EQVRBNCovXAorIE1VWF9WQUwoQ1AoRFNTX0RBVEE1KSwJCShJRElTIHwgUFREIHwgRElTIHwgTTApKSAvKkRTU19EQVRBNSovXAorIE1VWF9WQUwoQ1AoRFNTX0RBVEE2KSwJCShJRElTIHwgUFREIHwgRElTIHwgTTApKSAvKkRTU19EQVRBNiovXAorIE1VWF9WQUwoQ1AoRFNTX0RBVEE3KSwJCShJRElTIHwgUFREIHwgRElTIHwgTTApKSAvKkRTU19EQVRBNyovXAorIE1VWF9WQUwoQ1AoRFNTX0RBVEE4KSwJCShJRElTIHwgUFREIHwgRElTIHwgTTApKSAvKkRTU19EQVRBOCovXAorIE1VWF9WQUwoQ1AoRFNTX0RBVEE5KSwJCShJRElTIHwgUFREIHwgRElTIHwgTTApKSAvKkRTU19EQVRBOSovXAorIE1VWF9WQUwoQ1AoRFNTX0RBVEExMCksCShJRElTIHwgUFREIHwgRElTIHwgTTApKSAvKkRTU19EQVRBMTAqL1wKKyBNVVhfVkFMKENQKERTU19EQVRBMTEpLAkoSURJUyB8IFBURCB8IERJUyB8IE0wKSkgLypEU1NfREFUQTExKi9cCisgTVVYX1ZBTChDUChEU1NfREFUQTEyKSwJKElESVMgfCBQVEQgfCBESVMgfCBNMCkpIC8qRFNTX0RBVEExMiovXAorIE1VWF9WQUwoQ1AoRFNTX0RBVEExMyksCShJRElTIHwgUFREIHwgRElTIHwgTTApKSAvKkRTU19EQVRBMTMqL1wKKyBNVVhfVkFMKENQKERTU19EQVRBMTQpLAkoSURJUyB8IFBURCB8IERJUyB8IE0wKSkgLypEU1NfREFUQTE0Ki9cCisgTVVYX1ZBTChDUChEU1NfREFUQTE1KSwJKElESVMgfCBQVEQgfCBESVMgfCBNMCkpIC8qRFNTX0RBVEExNSovXAorIE1VWF9WQUwoQ1AoRFNTX0RBVEExNiksCShJRElTIHwgUFREIHwgRElTIHwgTTApKSAvKkRTU19EQVRBMTYqL1wKKyBNVVhfVkFMKENQKERTU19EQVRBMTcpLAkoSURJUyB8IFBURCB8IERJUyB8IE0wKSkgLypEU1NfREFUQTE3Ki9cCisgTVVYX1ZBTChDUChEU1NfREFUQTE4KSwJKElESVMgfCBQVEQgfCBESVMgfCBNMCkpIC8qRFNTX0RBVEExOCovXAorIE1VWF9WQUwoQ1AoRFNTX0RBVEExOSksCShJRElTIHwgUFREIHwgRElTIHwgTTApKSAvKkRTU19EQVRBMTkqL1wKKyBNVVhfVkFMKENQKERTU19EQVRBMjApLAkoSURJUyB8IFBURCB8IERJUyB8IE0wKSkgLypEU1NfREFUQTIwKi9cCisgTVVYX1ZBTChDUChEU1NfREFUQTIxKSwJKElESVMgfCBQVEQgfCBESVMgfCBNMCkpIC8qRFNTX0RBVEEyMSovXAorIE1VWF9WQUwoQ1AoRFNTX0RBVEEyMiksCShJRElTIHwgUFREIHwgRElTIHwgTTApKSAvKkRTU19EQVRBMjIqL1wKKyBNVVhfVkFMKENQKERTU19EQVRBMjMpLAkoSURJUyB8IFBURCB8IERJUyB8IE0wKSkgLypEU1NfREFUQTIzKi9cCisgLypDQU1FUkEqL1wKKyBNVVhfVkFMKENQKENBTV9IUyksCQkoSUVOICB8IFBUVSB8IEVOICB8IE0wKSkgLypDQU1fSFMgKi9cCisgTVVYX1ZBTChDUChDQU1fVlMpLAkJKElFTiAgfCBQVFUgfCBFTiAgfCBNMCkpIC8qQ0FNX1ZTICovXAorIE1VWF9WQUwoQ1AoQ0FNX1hDTEtBKSwJCShJRElTIHwgUFREIHwgRElTIHwgTTApKSAvKkNBTV9YQ0xLQSovXAorIE1VWF9WQUwoQ1AoQ0FNX1BDTEspLAkJKElFTiAgfCBQVFUgfCBFTiAgfCBNMCkpIC8qQ0FNX1BDTEsqL1wKKyBNVVhfVkFMKENQKENBTV9GTEQpLAkJKElESVMgfCBQVEQgfCBESVMgfCBNNCkpIC8qQ0FNX0ZMRCovXAorIE1VWF9WQUwoQ1AoQ0FNX0QwKSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKkNBTV9EMCovXAorIE1VWF9WQUwoQ1AoQ0FNX0QxKSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKkNBTV9EMSovXAorIE1VWF9WQUwoQ1AoQ0FNX0QyKSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKkNBTV9EMiovXAorIE1VWF9WQUwoQ1AoQ0FNX0QzKSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKkNBTV9EMyovXAorIE1VWF9WQUwoQ1AoQ0FNX0Q0KSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKkNBTV9ENCovXAorIE1VWF9WQUwoQ1AoQ0FNX0Q1KSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKkNBTV9ENSovXAorIE1VWF9WQUwoQ1AoQ0FNX0Q2KSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKkNBTV9ENiovXAorIE1VWF9WQUwoQ1AoQ0FNX0Q3KSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKkNBTV9ENyovXAorIE1VWF9WQUwoQ1AoQ0FNX0Q4KSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKkNBTV9EOCovXAorIE1VWF9WQUwoQ1AoQ0FNX0Q5KSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKkNBTV9EOSovXAorIE1VWF9WQUwoQ1AoQ0FNX0QxMCksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypDQU1fRDEwKi9cCisgTVVYX1ZBTChDUChDQU1fRDExKSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKkNBTV9EMTEqL1wKKyBNVVhfVkFMKENQKENBTV9YQ0xLQiksCQkoSURJUyB8IFBURCB8IERJUyB8IE0wKSkgLypDQU1fWENMS0IqL1wKKyBNVVhfVkFMKENQKENBTV9XRU4pLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qQ0FNX1dFTiovXAorIE1VWF9WQUwoQ1AoQ0FNX1NUUk9CRSksCShJRElTIHwgUFREIHwgRElTIHwgTTApKSAvKkNBTV9TVFJPQkUqL1wKKyBNVVhfVkFMKENQKENTSTJfRFgwKSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKkNTSTJfRFgwKi9cCisgTVVYX1ZBTChDUChDU0kyX0RZMCksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypDU0kyX0RZMCovXAorIE1VWF9WQUwoQ1AoQ1NJMl9EWDEpLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qQ1NJMl9EWDEqL1wKKyBNVVhfVkFMKENQKENTSTJfRFkxKSwJCShJRU4gIHwgUFRVIHwgRU4gIHwgTTQpKSAvKkdQSU9fMTE1Ki9cCisgLypBdWRpbyBJbnRlcmZhY2UgKi9cCisgTVVYX1ZBTChDUChNQ0JTUDJfRlNYKSwJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qTWNCU1AyX0ZTWCovXAorIE1VWF9WQUwoQ1AoTUNCU1AyX0NMS1gpLAkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypNY0JTUDJfQ0xLWCovXAorIE1VWF9WQUwoQ1AoTUNCU1AyX0RSKSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKk1jQlNQMl9EUiovXAorIE1VWF9WQUwoQ1AoTUNCU1AyX0RYKSwJCShJRElTIHwgUFREIHwgRElTIHwgTTApKSAvKk1jQlNQMl9EWCovXAorIC8qRXhwYW5zaW9uIGNhcmQgKi9cCisgTVVYX1ZBTChDUChNTUMxX0NMSyksCQkoSURJUyB8IFBUVSB8IEVOICB8IE0wKSkgLypNTUMxX0NMSyovXAorIE1VWF9WQUwoQ1AoTU1DMV9DTUQpLAkJKElFTiAgfCBQVFUgfCBFTiAgfCBNMCkpIC8qTU1DMV9DTUQqL1wKKyBNVVhfVkFMKENQKE1NQzFfREFUMCksCQkoSUVOICB8IFBUVSB8IEVOICB8IE0wKSkgLypNTUMxX0RBVDAqL1wKKyBNVVhfVkFMKENQKE1NQzFfREFUMSksCQkoSUVOICB8IFBUVSB8IEVOICB8IE0wKSkgLypNTUMxX0RBVDEqL1wKKyBNVVhfVkFMKENQKE1NQzFfREFUMiksCQkoSUVOICB8IFBUVSB8IEVOICB8IE0wKSkgLypNTUMxX0RBVDIqL1wKKyBNVVhfVkFMKENQKE1NQzFfREFUMyksCQkoSUVOICB8IFBUVSB8IEVOICB8IE0wKSkgLypNTUMxX0RBVDMqL1wKKyBNVVhfVkFMKENQKE1NQzFfREFUNCksCQkoSUVOICB8IFBUVSB8IEVOICB8IE0wKSkgLypNTUMxX0RBVDQqL1wKKyBNVVhfVkFMKENQKE1NQzFfREFUNSksCQkoSUVOICB8IFBUVSB8IEVOICB8IE0wKSkgLypNTUMxX0RBVDUqL1wKKyBNVVhfVkFMKENQKE1NQzFfREFUNiksCQkoSUVOICB8IFBUVSB8IEVOICB8IE0wKSkgLypNTUMxX0RBVDYqL1wKKyBNVVhfVkFMKENQKE1NQzFfREFUNyksCQkoSUVOICB8IFBUVSB8IEVOICB8IE0wKSkgLypNTUMxX0RBVDcqL1wKKyAvKldpcmVsZXNzIExBTiAqL1wKKyBNVVhfVkFMKENQKE1NQzJfQ0xLKSwJCShJRU4gIHwgUFRVIHwgRU4gIHwgTTApKSAvKk1NQzJfQ0xLKi9cCisgTVVYX1ZBTChDUChNTUMyX0NNRCksCQkoSUVOICB8IFBUVSB8IEVOICB8IE0wKSkgLypNTUMyX0NNRCovXAorIE1VWF9WQUwoQ1AoTU1DMl9EQVQwKSwJCShJRU4gIHwgUFRVIHwgRU4gIHwgTTApKSAvKk1NQzJfREFUMCovXAorIE1VWF9WQUwoQ1AoTU1DMl9EQVQxKSwJCShJRU4gIHwgUFRVIHwgRU4gIHwgTTApKSAvKk1NQzJfREFUMSovXAorIE1VWF9WQUwoQ1AoTU1DMl9EQVQyKSwJCShJRU4gIHwgUFRVIHwgRU4gIHwgTTApKSAvKk1NQzJfREFUMiovXAorIE1VWF9WQUwoQ1AoTU1DMl9EQVQzKSwJCShJRU4gIHwgUFRVIHwgRU4gIHwgTTApKSAvKk1NQzJfREFUMyovXAorIE1VWF9WQUwoQ1AoTU1DMl9EQVQ0KSwJCShJRU4gIHwgUFRVIHwgRU4gIHwgTTEpKSAvKk1NQzJfRElSX0RBVDAqL1wKKyBNVVhfVkFMKENQKE1NQzJfREFUNSksCQkoSUVOICB8IFBUVSB8IEVOICB8IE0xKSkgLypNTUMyX0RJUl9EQVQxKi9cCisgTVVYX1ZBTChDUChNTUMyX0RBVDYpLAkJKElFTiAgfCBQVFUgfCBFTiAgfCBNMSkpIC8qTU1DMl9ESVJfQ01EKi9cCisgTVVYX1ZBTChDUChNTUMyX0RBVDcpLAkJKElFTiAgfCBQVFUgfCBFTiAgfCBNMSkpIC8qTU1DMl9DTEtJTiovXAorIC8qQmx1ZXRvb3RoKi9cCisgTVVYX1ZBTChDUChNQ0JTUDNfRFgpLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNMSkpIC8qVUFSVDJfQ1RTKi9cCisgTVVYX1ZBTChDUChNQ0JTUDNfRFIpLAkJKElESVMgfCBQVEQgfCBESVMgfCBNMSkpIC8qVUFSVDJfUlRTKi9cCisgTVVYX1ZBTChDUChNQ0JTUDNfQ0xLWCksCShJRElTIHwgUFREIHwgRElTIHwgTTEpKSAvKlVBUlQyX1RYKi9cCisgTVVYX1ZBTChDUChNQ0JTUDNfRlNYKSwJKElFTiAgfCBQVEQgfCBESVMgfCBNMSkpIC8qVUFSVDJfUlgqL1wKKyBNVVhfVkFMKENQKFVBUlQyX0NUUyksCQkoSURJUyB8IFBURCB8IERJUyB8IE00KSkgLypHUElPXzE0NCAtIExDRF9FTiovXAorIE1VWF9WQUwoQ1AoVUFSVDJfUlRTKSwJCShJRElTIHwgUFREIHwgRElTIHwgTTQpKSAvKkdQSU9fMTQ1Ki9cCisgTVVYX1ZBTChDUChVQVJUMl9UWCksCQkoSURJUyB8IFBURCB8IERJUyB8IE00KSkgLypHUElPXzE0NiovXAorIE1VWF9WQUwoQ1AoVUFSVDJfUlgpLAkJKElESVMgfCBQVEQgfCBESVMgfCBNNCkpIC8qR1BJT18xNDcqL1wKKyBNVVhfVkFMKENQKFVBUlQxX1RYKSwJCShJRElTIHwgUFREIHwgRElTIHwgTTApKSAvKlVBUlQxX1RYKi9cCisgTVVYX1ZBTChDUChVQVJUMV9SVFMpLAkJKElFTiAgfCBQVFUgfCBESVMgfCBNNCkpIC8qR1BJT18xNDkqLyBcCisgTVVYX1ZBTChDUChVQVJUMV9DVFMpLAkJKElFTiAgfCBQVFUgfCBESVMgfCBNNCkpIC8qR1BJT18xNTAtTU1DM19XUCovXAorIE1VWF9WQUwoQ1AoVUFSVDFfUlgpLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qVUFSVDFfUlgqL1wKKyBNVVhfVkFMKENQKE1DQlNQNF9DTEtYKSwJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qTWNCU1A0X0NMS1gqL1wKKyBNVVhfVkFMKENQKE1DQlNQNF9EUiksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypNY0JTUDRfRFIqL1wKKyBNVVhfVkFMKENQKE1DQlNQNF9EWCksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypNY0JTUDRfRFgqL1wKKyBNVVhfVkFMKENQKE1DQlNQNF9GU1gpLAkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypNY0JTUDRfRlNYKi9cCisgTVVYX1ZBTChDUChNQ0JTUDFfQ0xLUiksCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKk1jQlNQMV9DTEtSKi9cCisgTVVYX1ZBTChDUChNQ0JTUDFfRlNSKSwJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qTWNCU1AxX0ZTUiovXAorIE1VWF9WQUwoQ1AoTUNCU1AxX0RYKSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKk1jQlNQMV9EWCovXAorIE1VWF9WQUwoQ1AoTUNCU1AxX0RSKSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKk1jQlNQMV9EUiovXAorIE1VWF9WQUwoQ1AoTUNCU1BfQ0xLUyksCShJRU4gIHwgUFRVIHwgRElTIHwgTTApKSAvKk1jQlNQX0NMS1MqL1wKKyBNVVhfVkFMKENQKE1DQlNQMV9GU1gpLAkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypNY0JTUDFfRlNYKi9cCisgTVVYX1ZBTChDUChNQ0JTUDFfQ0xLWCksCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKk1jQlNQMV9DTEtYKi9cCisgLypTZXJpYWwgSW50ZXJmYWNlKi9cCisgTVVYX1ZBTChDUChVQVJUM19DVFNfUkNUWCksCShJRU4gIHwgUFREIHwgRU4gIHwgTTApKSAvKlVBUlQzX0NUU19SQ1RYKi9cCisgTVVYX1ZBTChDUChVQVJUM19SVFNfU0QpLAkoSUVOICB8IFBUVSB8IEVOICB8IE00KSkgLypHUElPXzE2NCBXMldfKi9cCisJCQkJCQkJIC8qIEJUX05SRVNFVCovXAorIE1VWF9WQUwoQ1AoVUFSVDNfUlhfSVJSWCksCShJRU4gIHwgUFRVIHwgRU4gIHwgTTApKSAvKlVBUlQzX1JYX0lSUlgqL1wKKyBNVVhfVkFMKENQKFVBUlQzX1RYX0lSVFgpLAkoSURJUyB8IFBURCB8IERJUyB8IE0wKSkgLypVQVJUM19UWF9JUlRYKi9cCisgTVVYX1ZBTChDUChIU1VTQjBfQ0xLKSwJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qSFNVU0IwX0NMSyovXAorIE1VWF9WQUwoQ1AoSFNVU0IwX1NUUCksCShJRElTIHwgUFRVIHwgRU4gIHwgTTApKSAvKkhTVVNCMF9TVFAqL1wKKyBNVVhfVkFMKENQKEhTVVNCMF9ESVIpLAkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypIU1VTQjBfRElSKi9cCisgTVVYX1ZBTChDUChIU1VTQjBfTlhUKSwJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qSFNVU0IwX05YVCovXAorIE1VWF9WQUwoQ1AoSFNVU0IwX0RBVEEwKSwJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qSFNVU0IwX0RBVEEwKi9cCisgTVVYX1ZBTChDUChIU1VTQjBfREFUQTEpLAkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypIU1VTQjBfREFUQTEqL1wKKyBNVVhfVkFMKENQKEhTVVNCMF9EQVRBMiksCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKkhTVVNCMF9EQVRBMiovXAorIE1VWF9WQUwoQ1AoSFNVU0IwX0RBVEEzKSwJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qSFNVU0IwX0RBVEEzKi9cCisgTVVYX1ZBTChDUChIU1VTQjBfREFUQTQpLAkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypIU1VTQjBfREFUQTQqL1wKKyBNVVhfVkFMKENQKEhTVVNCMF9EQVRBNSksCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKkhTVVNCMF9EQVRBNSovXAorIE1VWF9WQUwoQ1AoSFNVU0IwX0RBVEE2KSwJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qSFNVU0IwX0RBVEE2Ki9cCisgTVVYX1ZBTChDUChIU1VTQjBfREFUQTcpLAkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypIU1VTQjBfREFUQTcqL1wKKyBNVVhfVkFMKENQKEkyQzFfU0NMKSwJCShJRU4gIHwgUFRVIHwgRU4gIHwgTTApKSAvKkkyQzFfU0NMKi9cCisgTVVYX1ZBTChDUChJMkMxX1NEQSksCQkoSUVOICB8IFBUVSB8IEVOICB8IE0wKSkgLypJMkMxX1NEQSovXAorIE1VWF9WQUwoQ1AoSTJDMl9TQ0wpLAkJKElFTiAgfCBQVFUgfCBFTiAgfCBNNCkpIC8qR1BJT18xNjgqL1wKKwkJCQkJCQkgLyogLSBVU0JIX0NQRU4qL1wKKyBNVVhfVkFMKENQKEkyQzJfU0RBKSwJCShJRU4gIHwgUFRVIHwgRU4gIHwgTTQpKSAvKkdQSU9fMTgzKi9cCisJCQkJCQkJIC8qIC0gVVNCSF9SRVNFVCovXAorIE1VWF9WQUwoQ1AoSTJDM19TQ0wpLAkJKElFTiAgfCBQVFUgfCBFTiAgfCBNMCkpIC8qSTJDM19TQ0wqL1wKKyBNVVhfVkFMKENQKEkyQzNfU0RBKSwJCShJRU4gIHwgUFRVIHwgRU4gIHwgTTApKSAvKkkyQzNfU0RBKi9cCisgTVVYX1ZBTChDUChJMkM0X1NDTCksCQkoSUVOICB8IFBUVSB8IEVOICB8IE0wKSkgLypJMkM0X1NDTCovXAorIE1VWF9WQUwoQ1AoSTJDNF9TREEpLAkJKElFTiAgfCBQVFUgfCBFTiAgfCBNMCkpIC8qSTJDNF9TREEqL1wKKyBNVVhfVkFMKENQKEhEUV9TSU8pLAkJKElESVMgfCBQVFUgfCBFTiAgfCBNNCkpIC8qSERRX1NJTyovXAorIE1VWF9WQUwoQ1AoTUNTUEkxX0NMSyksCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKk1jU1BJMV9DTEsqL1wKKyBNVVhfVkFMKENQKE1DU1BJMV9TSU1PKSwJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qTWNTUEkxX1NJTU8gKi9cCisgTVVYX1ZBTChDUChNQ1NQSTFfU09NSSksCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKk1jU1BJMV9TT01JICovXAorIE1VWF9WQUwoQ1AoTUNTUEkxX0NTMCksCShJRU4gIHwgUFREIHwgRU4gIHwgTTApKSAvKk1jU1BJMV9DUzAqL1wKKyBNVVhfVkFMKENQKE1DU1BJMV9DUzEpLAkoSURJUyB8IFBURCB8IEVOICB8IE0wKSkgLypNY1NQSTFfQ1MxKi9cCisgTVVYX1ZBTChDUChNQ1NQSTFfQ1MyKSwJKElESVMgfCBQVEQgfCBESVMgfCBNNCkpIC8qR1BJT18xNzYqL1wKKyBNVVhfVkFMKENQKE1DU1BJMV9DUzMpLAkoSUVOICB8IFBURCB8IERJUyB8IE0zKSkgLypIU1VTQjJfREFUQTIqL1wKKyBNVVhfVkFMKENQKE1DU1BJMl9DTEspLAkoSUVOICB8IFBURCB8IERJUyB8IE0zKSkgLypIU1VTQjJfREFUQTcqL1wKKyBNVVhfVkFMKENQKE1DU1BJMl9TSU1PKSwJKElFTiAgfCBQVEQgfCBESVMgfCBNMykpIC8qSFNVU0IyX0RBVEE0Ki9cCisgTVVYX1ZBTChDUChNQ1NQSTJfU09NSSksCShJRU4gIHwgUFREIHwgRElTIHwgTTMpKSAvKkhTVVNCMl9EQVRBNSovXAorIE1VWF9WQUwoQ1AoTUNTUEkyX0NTMCksCShJRU4gIHwgUFREIHwgRElTIHwgTTMpKSAvKkhTVVNCMl9EQVRBNiovXAorIE1VWF9WQUwoQ1AoTUNTUEkyX0NTMSksCShJRU4gIHwgUFREIHwgRElTIHwgTTMpKSAvKkhTVVNCMl9EQVRBMyovXAorIC8qQ29udHJvbCBhbmQgZGVidWcgKi9cCisgTVVYX1ZBTChDUChTWVNfMzJLKSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKlNZU18zMksqL1wKKyBNVVhfVkFMKENQKFNZU19DTEtSRVEpLAkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypTWVNfQ0xLUkVRKi9cCisgTVVYX1ZBTChDUChTWVNfTklSUSksCQkoSUVOICB8IFBUVSB8IEVOICB8IE0wKSkgLypTWVNfbklSUSovXAorIE1VWF9WQUwoQ1AoU1lTX0JPT1QwKSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTQpKSAvKkdQSU9fMiovXAorIE1VWF9WQUwoQ1AoU1lTX0JPT1QxKSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTQpKSAvKkdQSU9fMyAqL1wKKyBNVVhfVkFMKENQKFNZU19CT09UMiksCQkoSUVOICB8IFBURCB8IERJUyB8IE00KSkgLypHUElPXzQgLSBNTUMxX1dQKi9cCisgTVVYX1ZBTChDUChTWVNfQk9PVDMpLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNNCkpIC8qR1BJT181Ki9cCisgTVVYX1ZBTChDUChTWVNfQk9PVDQpLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNNCkpIC8qR1BJT182Ki9cCisgTVVYX1ZBTChDUChTWVNfQk9PVDUpLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNNCkpIC8qR1BJT183Ki9cCisgTVVYX1ZBTChDUChTWVNfQk9PVDYpLAkJKElESVMgfCBQVEQgfCBESVMgfCBNNCkpIC8qR1BJT184Ki9cCisgTVVYX1ZBTChDUChTWVNfT0ZGX01PREUpLAkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypTWVNfT0ZGX01PREUqL1wKKyBNVVhfVkFMKENQKFNZU19DTEtPVVQxKSwJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qU1lTX0NMS09VVDEqL1wKKyBNVVhfVkFMKENQKFNZU19DTEtPVVQyKSwJKElFTiAgfCBQVFUgfCBFTiAgfCBNNCkpIC8qR1BJT18xODYqL1wKKyBNVVhfVkFMKENQKEVUS19DTEtfRVMyKSwJKElESVMgfCBQVFUgfCBFTiAgfCBNMikpIC8qTU1DM19DTEsqL1wKKyBNVVhfVkFMKENQKEVUS19DVExfRVMyKSwJKElFTiAgfCBQVFUgfCBFTiAgfCBNMikpIC8qTU1DM19DTUQqL1wKKyBNVVhfVkFMKENQKEVUS19EMF9FUzIpLAkoSUVOICB8IFBUVSB8IEVOICB8IE0yKSkgLypNTUMzX0RBVDQqL1wKKyBNVVhfVkFMKENQKEVUS19EMV9FUzIpLAkoSUVOICB8IFBURCB8IEVOICB8IE00KSkgLypHUElPXzE1IC0gWF9HQVRFKi9cCisgTVVYX1ZBTChDUChFVEtfRDJfRVMyKSwJKElFTiAgfCBQVFUgfCBFTiAgfCBNNCkpIC8qR1BJT18xNiovXAorCQkJCQkJCSAvKiAtIFcyV19OUkVTRVQqL1wKKyBNVVhfVkFMKENQKEVUS19EM19FUzIpLAkoSUVOICB8IFBUVSB8IEVOICB8IE0yKSkgLypNTUMzX0RBVDMqL1wKKyBNVVhfVkFMKENQKEVUS19ENF9FUzIpLAkoSUVOICB8IFBUVSB8IEVOICB8IE0yKSkgLypNTUMzX0RBVDAqL1wKKyBNVVhfVkFMKENQKEVUS19ENV9FUzIpLAkoSUVOICB8IFBUVSB8IEVOICB8IE0yKSkgLypNTUMzX0RBVDEqL1wKKyBNVVhfVkFMKENQKEVUS19ENl9FUzIpLAkoSUVOICB8IFBUVSB8IEVOICB8IE0yKSkgLypNTUMzX0RBVDIqL1wKKyBNVVhfVkFMKENQKEVUS19EN19FUzIpLAkoSUVOICB8IFBUVSB8IEVOICB8IE0yKSkgLypNTUMzX0RBVDcqL1wKKyBNVVhfVkFMKENQKEVUS19EOF9FUzIpLAkoSUVOICB8IFBUVSB8IEVOICB8IE0yKSkgLypNTUMzX0RBVDYqL1wKKyBNVVhfVkFMKENQKEVUS19EOV9FUzIpLAkoSUVOICB8IFBUVSB8IEVOICB8IE0yKSkgLypNTUMzX0RBVDUqL1wKKyBNVVhfVkFMKENQKEVUS19EMTBfRVMyKSwJKElESVMgfCBQVEQgfCBESVMgfCBNMykpIC8qSFNVU0IyX0NMSyovXAorIE1VWF9WQUwoQ1AoRVRLX0QxMV9FUzIpLAkoSURJUyB8IFBUVSB8IEVOICB8IE0zKSkgLypIU1VTQjJfU1RQKi9cCisgTVVYX1ZBTChDUChFVEtfRDEyX0VTMiksCShJRU4gIHwgUFREIHwgRElTIHwgTTMpKSAvKkhTVVNCMl9ESVIqL1wKKyBNVVhfVkFMKENQKEVUS19EMTNfRVMyKSwJKElFTiAgfCBQVEQgfCBESVMgfCBNMykpIC8qSFNVU0IyX05YVCovXAorIE1VWF9WQUwoQ1AoRVRLX0QxNF9FUzIpLAkoSUVOICB8IFBURCB8IERJUyB8IE0zKSkgLypIU1VTQjJfREFUQTAqL1wKKyBNVVhfVkFMKENQKEVUS19EMTVfRVMyKSwJKElFTiAgfCBQVEQgfCBESVMgfCBNMykpIC8qSFNVU0IyX0RBVEExKi9cCisgLyogZGllIHRvIGRpZSAqL1wKKyBNVVhfVkFMKENQKEQyRF9NQ0FEMSksCQkoSUVOICB8IFBURCB8IEVOICB8IE0wKSkgLypkMmRfbWNhZDEqL1wKKyBNVVhfVkFMKENQKEQyRF9NQ0FEMiksCQkoSUVOICB8IFBURCB8IEVOICB8IE0wKSkgLypkMmRfbWNhZDIqL1wKKyBNVVhfVkFMKENQKEQyRF9NQ0FEMyksCQkoSUVOICB8IFBURCB8IEVOICB8IE0wKSkgLypkMmRfbWNhZDMqL1wKKyBNVVhfVkFMKENQKEQyRF9NQ0FENCksCQkoSUVOICB8IFBURCB8IEVOICB8IE0wKSkgLypkMmRfbWNhZDQqL1wKKyBNVVhfVkFMKENQKEQyRF9NQ0FENSksCQkoSUVOICB8IFBURCB8IEVOICB8IE0wKSkgLypkMmRfbWNhZDUqL1wKKyBNVVhfVkFMKENQKEQyRF9NQ0FENiksCQkoSUVOICB8IFBURCB8IEVOICB8IE0wKSkgLypkMmRfbWNhZDYqL1wKKyBNVVhfVkFMKENQKEQyRF9NQ0FENyksCQkoSUVOICB8IFBURCB8IEVOICB8IE0wKSkgLypkMmRfbWNhZDcqL1wKKyBNVVhfVkFMKENQKEQyRF9NQ0FEOCksCQkoSUVOICB8IFBURCB8IEVOICB8IE0wKSkgLypkMmRfbWNhZDgqL1wKKyBNVVhfVkFMKENQKEQyRF9NQ0FEOSksCQkoSUVOICB8IFBURCB8IEVOICB8IE0wKSkgLypkMmRfbWNhZDkqL1wKKyBNVVhfVkFMKENQKEQyRF9NQ0FEMTApLAkoSUVOICB8IFBURCB8IEVOICB8IE0wKSkgLypkMmRfbWNhZDEwKi9cCisgTVVYX1ZBTChDUChEMkRfTUNBRDExKSwJKElFTiAgfCBQVEQgfCBFTiAgfCBNMCkpIC8qZDJkX21jYWQxMSovXAorIE1VWF9WQUwoQ1AoRDJEX01DQUQxMiksCShJRU4gIHwgUFREIHwgRU4gIHwgTTApKSAvKmQyZF9tY2FkMTIqL1wKKyBNVVhfVkFMKENQKEQyRF9NQ0FEMTMpLAkoSUVOICB8IFBURCB8IEVOICB8IE0wKSkgLypkMmRfbWNhZDEzKi9cCisgTVVYX1ZBTChDUChEMkRfTUNBRDE0KSwJKElFTiAgfCBQVEQgfCBFTiAgfCBNMCkpIC8qZDJkX21jYWQxNCovXAorIE1VWF9WQUwoQ1AoRDJEX01DQUQxNSksCShJRU4gIHwgUFREIHwgRU4gIHwgTTApKSAvKmQyZF9tY2FkMTUqL1wKKyBNVVhfVkFMKENQKEQyRF9NQ0FEMTYpLAkoSUVOICB8IFBURCB8IEVOICB8IE0wKSkgLypkMmRfbWNhZDE2Ki9cCisgTVVYX1ZBTChDUChEMkRfTUNBRDE3KSwJKElFTiAgfCBQVEQgfCBFTiAgfCBNMCkpIC8qZDJkX21jYWQxNyovXAorIE1VWF9WQUwoQ1AoRDJEX01DQUQxOCksCShJRU4gIHwgUFREIHwgRU4gIHwgTTApKSAvKmQyZF9tY2FkMTgqL1wKKyBNVVhfVkFMKENQKEQyRF9NQ0FEMTkpLAkoSUVOICB8IFBURCB8IEVOICB8IE0wKSkgLypkMmRfbWNhZDE5Ki9cCisgTVVYX1ZBTChDUChEMkRfTUNBRDIwKSwJKElFTiAgfCBQVEQgfCBFTiAgfCBNMCkpIC8qZDJkX21jYWQyMCovXAorIE1VWF9WQUwoQ1AoRDJEX01DQUQyMSksCShJRU4gIHwgUFREIHwgRU4gIHwgTTApKSAvKmQyZF9tY2FkMjEqL1wKKyBNVVhfVkFMKENQKEQyRF9NQ0FEMjIpLAkoSUVOICB8IFBURCB8IEVOICB8IE0wKSkgLypkMmRfbWNhZDIyKi9cCisgTVVYX1ZBTChDUChEMkRfTUNBRDIzKSwJKElFTiAgfCBQVEQgfCBFTiAgfCBNMCkpIC8qZDJkX21jYWQyMyovXAorIE1VWF9WQUwoQ1AoRDJEX01DQUQyNCksCShJRU4gIHwgUFREIHwgRU4gIHwgTTApKSAvKmQyZF9tY2FkMjQqL1wKKyBNVVhfVkFMKENQKEQyRF9NQ0FEMjUpLAkoSUVOICB8IFBURCB8IEVOICB8IE0wKSkgLypkMmRfbWNhZDI1Ki9cCisgTVVYX1ZBTChDUChEMkRfTUNBRDI2KSwJKElFTiAgfCBQVEQgfCBFTiAgfCBNMCkpIC8qZDJkX21jYWQyNiovXAorIE1VWF9WQUwoQ1AoRDJEX01DQUQyNyksCShJRU4gIHwgUFREIHwgRU4gIHwgTTApKSAvKmQyZF9tY2FkMjcqL1wKKyBNVVhfVkFMKENQKEQyRF9NQ0FEMjgpLAkoSUVOICB8IFBURCB8IEVOICB8IE0wKSkgLypkMmRfbWNhZDI4Ki9cCisgTVVYX1ZBTChDUChEMkRfTUNBRDI5KSwJKElFTiAgfCBQVEQgfCBFTiAgfCBNMCkpIC8qZDJkX21jYWQyOSovXAorIE1VWF9WQUwoQ1AoRDJEX01DQUQzMCksCShJRU4gIHwgUFREIHwgRU4gIHwgTTApKSAvKmQyZF9tY2FkMzAqL1wKKyBNVVhfVkFMKENQKEQyRF9NQ0FEMzEpLAkoSUVOICB8IFBURCB8IEVOICB8IE0wKSkgLypkMmRfbWNhZDMxKi9cCisgTVVYX1ZBTChDUChEMkRfTUNBRDMyKSwJKElFTiAgfCBQVEQgfCBFTiAgfCBNMCkpIC8qZDJkX21jYWQzMiovXAorIE1VWF9WQUwoQ1AoRDJEX01DQUQzMyksCShJRU4gIHwgUFREIHwgRU4gIHwgTTApKSAvKmQyZF9tY2FkMzMqL1wKKyBNVVhfVkFMKENQKEQyRF9NQ0FEMzQpLAkoSUVOICB8IFBURCB8IEVOICB8IE0wKSkgLypkMmRfbWNhZDM0Ki9cCisgTVVYX1ZBTChDUChEMkRfTUNBRDM1KSwJKElFTiAgfCBQVEQgfCBFTiAgfCBNMCkpIC8qZDJkX21jYWQzNSovXAorIE1VWF9WQUwoQ1AoRDJEX01DQUQzNiksCShJRU4gIHwgUFREIHwgRU4gIHwgTTApKSAvKmQyZF9tY2FkMzYqL1wKKyBNVVhfVkFMKENQKEQyRF9DTEsyNk1JKSwJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qZDJkX2NsazI2bWkqL1wKKyBNVVhfVkFMKENQKEQyRF9OUkVTUFdST04pLAkoSUVOICB8IFBURCB8IEVOICB8IE0wKSkgLypkMmRfbnJlc3B3cm9uKi9cCisgTVVYX1ZBTChDUChEMkRfTlJFU1dBUk0pLAkoSUVOICB8IFBUVSB8IEVOICB8IE0wKSkgLypkMmRfbnJlc3dhcm0gKi9cCisgTVVYX1ZBTChDUChEMkRfQVJNOU5JUlEpLAkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypkMmRfYXJtOW5pcnEgKi9cCisgTVVYX1ZBTChDUChEMkRfVU1BMlA2RklRKSwJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qZDJkX3VtYTJwNmZpcSovXAorIE1VWF9WQUwoQ1AoRDJEX1NQSU5UKSwJCShJRU4gIHwgUFREIHwgRU4gIHwgTTApKSAvKmQyZF9zcGludCovXAorIE1VWF9WQUwoQ1AoRDJEX0ZSSU5UKSwJCShJRU4gIHwgUFREIHwgRU4gIHwgTTApKSAvKmQyZF9mcmludCovXAorIE1VWF9WQUwoQ1AoRDJEX0RNQVJFUTApLAkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypkMmRfZG1hcmVxMCovXAorIE1VWF9WQUwoQ1AoRDJEX0RNQVJFUTEpLAkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypkMmRfZG1hcmVxMSovXAorIE1VWF9WQUwoQ1AoRDJEX0RNQVJFUTIpLAkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypkMmRfZG1hcmVxMiovXAorIE1VWF9WQUwoQ1AoRDJEX0RNQVJFUTMpLAkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypkMmRfZG1hcmVxMyovXAorIE1VWF9WQUwoQ1AoRDJEX04zR1RSU1QpLAkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypkMmRfbjNndHJzdCovXAorIE1VWF9WQUwoQ1AoRDJEX04zR1RESSksCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKmQyZF9uM2d0ZGkqL1wKKyBNVVhfVkFMKENQKEQyRF9OM0dURE8pLAkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypkMmRfbjNndGRvKi9cCisgTVVYX1ZBTChDUChEMkRfTjNHVE1TKSwJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qZDJkX24zZ3RtcyovXAorIE1VWF9WQUwoQ1AoRDJEX04zR1RDSyksCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKmQyZF9uM2d0Y2sqL1wKKyBNVVhfVkFMKENQKEQyRF9OM0dSVENLKSwJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qZDJkX24zZ3J0Y2sqL1wKKyBNVVhfVkFMKENQKEQyRF9NU1REQlkpLAkoSUVOICB8IFBUVSB8IEVOICB8IE0wKSkgLypkMmRfbXN0ZGJ5Ki9cCisgTVVYX1ZBTChDUChEMkRfU1dBS0VVUCksCShJRU4gIHwgUFREIHwgRU4gIHwgTTApKSAvKmQyZF9zd2FrZXVwKi9cCisgTVVYX1ZBTChDUChEMkRfSURMRVJFUSksCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKmQyZF9pZGxlcmVxKi9cCisgTVVYX1ZBTChDUChEMkRfSURMRUFDSyksCShJRU4gIHwgUFRVIHwgRU4gIHwgTTApKSAvKmQyZF9pZGxlYWNrKi9cCisgTVVYX1ZBTChDUChEMkRfTVdSSVRFKSwJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qZDJkX213cml0ZSovXAorIE1VWF9WQUwoQ1AoRDJEX1NXUklURSksCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKmQyZF9zd3JpdGUqL1wKKyBNVVhfVkFMKENQKEQyRF9NUkVBRCksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypkMmRfbXJlYWQqL1wKKyBNVVhfVkFMKENQKEQyRF9TUkVBRCksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypkMmRfc3JlYWQqL1wKKyBNVVhfVkFMKENQKEQyRF9NQlVTRkxBRyksCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKmQyZF9tYnVzZmxhZyovXAorIE1VWF9WQUwoQ1AoRDJEX1NCVVNGTEFHKSwJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qZDJkX3NidXNmbGFnKi9cCisgTVVYX1ZBTChDUChTRFJDX0NLRTApLAkJKElESVMgfCBQVFUgfCBFTiAgfCBNMCkpIC8qc2RyY19ja2UwKi9cCisgTVVYX1ZBTChDUChTRFJDX0NLRTEpLAkJKElESVMgfCBQVEQgfCBESVMgfCBNNykpIC8qc2RyY19ja2UxKi8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9ib2FyZC9vbWFwMy9vdmVyby91LWJvb3QubGRzIGIvYm9hcmQvb21hcDMvb3Zlcm8vdS1ib290LmxkcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OWQ4YWM5Ci0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvb21hcDMvb3Zlcm8vdS1ib290LmxkcwpAQCAtMCwwICsxLDYzIEBACisvKgorICogSmFudWFyeSAyMDA0IC0gQ2hhbmdlZCB0byBzdXBwb3J0IEg0IGRldmljZQorICogQ29weXJpZ2h0IChjKSAyMDA0IFRleGFzIEluc3RydW1lbnRzCisgKgorICogKEMpIENvcHlyaWdodCAyMDAyCisgKiBHYXJ5IEplbm5lam9obiwgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgPGdqQGRlbnguZGU+CisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworT1VUUFVUX0ZPUk1BVCgiZWxmMzItbGl0dGxlYXJtIiwgImVsZjMyLWxpdHRsZWFybSIsICJlbGYzMi1saXR0bGVhcm0iKQorT1VUUFVUX0FSQ0goYXJtKQorRU5UUlkoX3N0YXJ0KQorU0VDVElPTlMKK3sKKwkuID0gMHgwMDAwMDAwMDsKKworCS4gPSBBTElHTig0KTsKKwkudGV4dAk6CisJeworCQljcHUvYXJtX2NvcnRleGE4L3N0YXJ0Lm8JKC50ZXh0KQorCQkqKC50ZXh0KQorCX0KKworCS4gPSBBTElHTig0KTsKKwkucm9kYXRhIDogeyAqKC5yb2RhdGEpIH0KKworCS5BUk0uZXh0YWIJOiB7ICooLkFSTS5leHRhYiogLmdudS5saW5rb25jZS5hcm1leHRhYi4qKSB9CisJX19leGlkeF9zdGFydCA9IC47CisJLkFSTS5leGlkeAk6IHsgKiguQVJNLmV4aWR4KiAuZ251LmxpbmtvbmNlLmFybWV4aWR4LiopIH0KKwlfX2V4aWR4X2VuZCA9IC47CisKKwkuID0gQUxJR04oNCk7CisJLmRhdGEgOiB7ICooLmRhdGEpIH0KKworCS4gPSBBTElHTig0KTsKKwkuZ290IDogeyAqKC5nb3QpIH0KKworCV9fdV9ib290X2NtZF9zdGFydCA9IC47CisJLnVfYm9vdF9jbWQgOiB7ICooLnVfYm9vdF9jbWQpIH0KKwlfX3VfYm9vdF9jbWRfZW5kID0gLjsKKworCS4gPSBBTElHTig0KTsKKwlfX2Jzc19zdGFydCA9IC47CisJLmJzcyA6IHsgKiguYnNzKSB9CisJX2VuZCA9IC47Cit9CmRpZmYgLS1naXQgYS9ib2FyZC9vbWFwMy9wYW5kb3JhL01ha2VmaWxlIGIvYm9hcmQvb21hcDMvcGFuZG9yYS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDFlOGEwCi0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvb21hcDMvcGFuZG9yYS9NYWtlZmlsZQpAQCAtMCwwICsxLDQ5IEBACisjCisjIChDKSBDb3B5cmlnaHQgMjAwMCwgMjAwMSwgMjAwMgorIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgorIworIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworIyBwcm9qZWN0LgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisjIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisjIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorIyBNQSAwMjExMS0xMzA3IFVTQQorIworCitpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKKworTElCCT0gJChvYmopbGliJChCT0FSRCkuYQorCitDT0JKUwk6PSBwYW5kb3JhLm8KKworU1JDUwk6PSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCisKKyQoTElCKToJJChvYmopLmRlcGVuZCAkKE9CSlMpCisJJChBUikgJChBUkZMQUdTKSAkQCAkKE9CSlMpCisKK2NsZWFuOgorCXJtIC1mICQoT0JKUykKKworZGlzdGNsZWFuOgljbGVhbgorCXJtIC1mICQoTElCKSBjb3JlICouYmFrICQob2JqKS5kZXBlbmQKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5taworCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL29tYXAzL3BhbmRvcmEvY29uZmlnLm1rIGIvYm9hcmQvb21hcDMvcGFuZG9yYS9jb25maWcubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmIxZjY5YQotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL29tYXAzL3BhbmRvcmEvY29uZmlnLm1rCkBAIC0wLDAgKzEsMzMgQEAKKyMKKyMgKEMpIENvcHlyaWdodCAyMDA2CisjIFRleGFzIEluc3RydW1lbnRzLCA8d3d3LnRpLmNvbT4KKyMKKyMgUGFuZG9yYSB1c2VzIE9NQVAzIChBUk0tQ29ydGV4QTgpIGNwdQorIyBzZWUgaHR0cDovL3d3dy50aS5jb20vIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIFRleGFzIEluc3RydW1lbnRzCisjCisjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisjIHByb2plY3QuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyMgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyMgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisjIE1BIDAyMTExLTEzMDcgVVNBCisjCisjIFBoeXNpY2FsIEFkZHJlc3M6CisjIDgwMDAnMDAwMCAoYmFuazApCisjIEEwMDAvMDAwMCAoYmFuazEpCisjIExpbnV4LUtlcm5lbCBpcyBleHBlY3RlZCB0byBiZSBhdCA4MDAwJzgwMDAsIGVudHJ5IDgwMDAnODAwMAorIyAobWVtIGJhc2UgKyByZXNlcnZlZCkKKworIyBGb3IgdXNlIHdpdGggZXh0ZXJuYWwgb3IgaW50ZXJuYWwgYm9vdHMuCitURVhUX0JBU0UgPSAweDgwZTgwMDAwCmRpZmYgLS1naXQgYS9ib2FyZC9vbWFwMy9wYW5kb3JhL3BhbmRvcmEuYyBiL2JvYXJkL29tYXAzL3BhbmRvcmEvcGFuZG9yYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmOWRlOTkKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9vbWFwMy9wYW5kb3JhL3BhbmRvcmEuYwpAQCAtMCwwICsxLDkyIEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDA4CisgKiBHcmF6dnlkYXMgSWdub3RhcyA8bm90YXNhc0BnbWFpbC5jb20+CisgKgorICogRGVyaXZlZCBmcm9tIEJlYWdsZSBCb2FyZCwgMzQzMCBTRFAsIGFuZCBPTUFQM0VWTSBjb2RlIGJ5CisgKglSaWNoYXJkIFdvb2RydWZmIDxyLXdvb2RydWZmMkB0aS5jb20+CisgKglTeWVkIE1vaGFtbWVkIEtoYXNpbSA8a2hhc2ltQHRpLmNvbT4KKyAqCVN1bmlsIEt1bWFyIDxzdW5pbHNhaW5pMDVAZ21haWwuY29tPgorICoJU2hhc2hpIFJhbmphbiA8c2hhc2hpcmFuamFubWNhMDVAZ21haWwuY29tPgorICoKKyAqIChDKSBDb3B5cmlnaHQgMjAwNC0yMDA4CisgKiBUZXhhcyBJbnN0cnVtZW50cywgPHd3dy50aS5jb20+CisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9tdXguaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9zeXNfcHJvdG8uaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgInBhbmRvcmEuaCIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUm91dGluZTogYm9hcmRfaW5pdAorICogRGVzY3JpcHRpb246IEVhcmx5IGhhcmR3YXJlIGluaXQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQgYm9hcmRfaW5pdCh2b2lkKQoreworCURFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOworCisJZ3BtY19pbml0KCk7IC8qIGluIFNSQU0gb3IgU0RSQU0sIGZpbmlzaCBHUE1DICovCisJLyogYm9hcmQgaWQgZm9yIExpbnV4ICovCisJZ2QtPmJkLT5iaV9hcmNoX251bWJlciA9IE1BQ0hfVFlQRV9PTUFQM19QQU5ET1JBOworCS8qIGJvb3QgcGFyYW0gYWRkciAqLworCWdkLT5iZC0+YmlfYm9vdF9wYXJhbXMgPSAoT01BUDM0WFhfU0RSQ19DUzAgKyAweDEwMCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUm91dGluZTogbWlzY19pbml0X3IKKyAqIERlc2NyaXB0aW9uOiBDb25maWd1cmUgYm9hcmQgc3BlY2lmaWMgcGFydHMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ludCBtaXNjX2luaXRfcih2b2lkKQoreworCWdwaW9fdCAqZ3BpbzFfYmFzZSA9IChncGlvX3QgKilPTUFQMzRYWF9HUElPMV9CQVNFOworCWdwaW9fdCAqZ3BpbzRfYmFzZSA9IChncGlvX3QgKilPTUFQMzRYWF9HUElPNF9CQVNFOworCWdwaW9fdCAqZ3BpbzVfYmFzZSA9IChncGlvX3QgKilPTUFQMzRYWF9HUElPNV9CQVNFOworCWdwaW9fdCAqZ3BpbzZfYmFzZSA9IChncGlvX3QgKilPTUFQMzRYWF9HUElPNl9CQVNFOworCisJcG93ZXJfaW5pdF9yKCk7CisKKwkvKiBDb25maWd1cmUgR1BJT3MgdG8gb3V0cHV0ICovCisJd3JpdGVsKH4oR1BJTzE0IHwgR1BJTzE1IHwgR1BJTzE2IHwgR1BJTzIzKSwgJmdwaW8xX2Jhc2UtPm9lKTsKKwl3cml0ZWwofkdQSU8yMiwgJmdwaW80X2Jhc2UtPm9lKTsJLyogMTE4ICovCisJd3JpdGVsKH4oR1BJTzAgfCBHUElPMSB8IEdQSU8yOCB8IEdQSU8yOSB8IEdQSU8zMCB8IEdQSU8zMSksCisJCSZncGlvNV9iYXNlLT5vZSk7CS8qIDEyOCwgMTI5LCAxNTYtMTU5ICovCisJd3JpdGVsKH5HUElPNCwgJmdwaW82X2Jhc2UtPm9lKTsJLyogMTY0ICovCisKKwkvKiBTZXQgR1BJT3MgKi8KKwl3cml0ZWwoR1BJTzI4LCAmZ3BpbzVfYmFzZS0+c2V0ZGF0YW91dCk7CisJd3JpdGVsKEdQSU80LCAmZ3BpbzZfYmFzZS0+c2V0ZGF0YW91dCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUm91dGluZTogc2V0X211eGNvbmZfcmVncworICogRGVzY3JpcHRpb246IFNldHRpbmcgdXAgdGhlIGNvbmZpZ3VyYXRpb24gTXV4IHJlZ2lzdGVycyBzcGVjaWZpYyB0byB0aGUKKyAqCQloYXJkd2FyZS4gTWFueSBwaW5zIG5lZWQgdG8gYmUgbW92ZWQgZnJvbSBwcm90ZWN0IHRvIHByaW1hcnkKKyAqCQltb2RlLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBzZXRfbXV4Y29uZl9yZWdzKHZvaWQpCit7CisJTVVYX1BBTkRPUkEoKTsKK30KZGlmZiAtLWdpdCBhL2JvYXJkL29tYXAzL3BhbmRvcmEvcGFuZG9yYS5oIGIvYm9hcmQvb21hcDMvcGFuZG9yYS9wYW5kb3JhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODUyNWEwMwotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL29tYXAzL3BhbmRvcmEvcGFuZG9yYS5oCkBAIC0wLDAgKzEsNDIwIEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDA4CisgKiBHcmF6dnlkYXMgSWdub3RhcyA8bm90YXNhc0BnbWFpbC5jb20+CisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKyNpZm5kZWYgX1BBTkRPUkFfSF8KKyNkZWZpbmUgX1BBTkRPUkFfSF8KKworY29uc3Qgb21hcDNfc3lzaW5mbyBzeXNpbmZvID0geworCVNEUF8zNDMwX1YxLAorCVNEUF8zNDMwX1YyLAorCUREUl9TVEFDS0VELAorCSIzNTMwIiwKKwkiT01BUDMgUGFuZG9yYSIsCisJIk5BTkQiLAorfTsKKworLyoKKyAqIElFTiAgLSBJbnB1dCBFbmFibGUKKyAqIElESVMgLSBJbnB1dCBEaXNhYmxlCisgKiBQVEQgIC0gUHVsbCB0eXBlIERvd24KKyAqIFBUVSAgLSBQdWxsIHR5cGUgVXAKKyAqIERJUyAgLSBQdWxsIHR5cGUgc2VsZWN0aW9uIGlzIGluYWN0aXZlCisgKiBFTgktIFB1bGwgdHlwZSBzZWxlY3Rpb24gaXMgYWN0aXZlCisgKiBNMAktIE1vZGUgMAorICogVGhlIGNvbW1lbnRlZCBzdHJpbmcgZ2l2ZXMgdGhlIGZpbmFsIG11eCBjb25maWd1cmF0aW9uIGZvciB0aGF0IHBpbgorICovCisjZGVmaW5lIE1VWF9QQU5ET1JBKCkgXAorIC8qU0RSQyovXAorIE1VWF9WQUwoQ1AoU0RSQ19EMCksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypTRFJDX0QwKi9cCisgTVVYX1ZBTChDUChTRFJDX0QxKSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKlNEUkNfRDEqL1wKKyBNVVhfVkFMKENQKFNEUkNfRDIpLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qU0RSQ19EMiovXAorIE1VWF9WQUwoQ1AoU0RSQ19EMyksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypTRFJDX0QzKi9cCisgTVVYX1ZBTChDUChTRFJDX0Q0KSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKlNEUkNfRDQqL1wKKyBNVVhfVkFMKENQKFNEUkNfRDUpLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qU0RSQ19ENSovXAorIE1VWF9WQUwoQ1AoU0RSQ19ENiksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypTRFJDX0Q2Ki9cCisgTVVYX1ZBTChDUChTRFJDX0Q3KSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKlNEUkNfRDcqL1wKKyBNVVhfVkFMKENQKFNEUkNfRDgpLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qU0RSQ19EOCovXAorIE1VWF9WQUwoQ1AoU0RSQ19EOSksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypTRFJDX0Q5Ki9cCisgTVVYX1ZBTChDUChTRFJDX0QxMCksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypTRFJDX0QxMCovXAorIE1VWF9WQUwoQ1AoU0RSQ19EMTEpLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qU0RSQ19EMTEqL1wKKyBNVVhfVkFMKENQKFNEUkNfRDEyKSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKlNEUkNfRDEyKi9cCisgTVVYX1ZBTChDUChTRFJDX0QxMyksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypTRFJDX0QxMyovXAorIE1VWF9WQUwoQ1AoU0RSQ19EMTQpLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qU0RSQ19EMTQqL1wKKyBNVVhfVkFMKENQKFNEUkNfRDE1KSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKlNEUkNfRDE1Ki9cCisgTVVYX1ZBTChDUChTRFJDX0QxNiksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypTRFJDX0QxNiovXAorIE1VWF9WQUwoQ1AoU0RSQ19EMTcpLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qU0RSQ19EMTcqL1wKKyBNVVhfVkFMKENQKFNEUkNfRDE4KSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKlNEUkNfRDE4Ki9cCisgTVVYX1ZBTChDUChTRFJDX0QxOSksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypTRFJDX0QxOSovXAorIE1VWF9WQUwoQ1AoU0RSQ19EMjApLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qU0RSQ19EMjAqL1wKKyBNVVhfVkFMKENQKFNEUkNfRDIxKSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKlNEUkNfRDIxKi9cCisgTVVYX1ZBTChDUChTRFJDX0QyMiksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypTRFJDX0QyMiovXAorIE1VWF9WQUwoQ1AoU0RSQ19EMjMpLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qU0RSQ19EMjMqL1wKKyBNVVhfVkFMKENQKFNEUkNfRDI0KSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKlNEUkNfRDI0Ki9cCisgTVVYX1ZBTChDUChTRFJDX0QyNSksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypTRFJDX0QyNSovXAorIE1VWF9WQUwoQ1AoU0RSQ19EMjYpLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qU0RSQ19EMjYqL1wKKyBNVVhfVkFMKENQKFNEUkNfRDI3KSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKlNEUkNfRDI3Ki9cCisgTVVYX1ZBTChDUChTRFJDX0QyOCksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypTRFJDX0QyOCovXAorIE1VWF9WQUwoQ1AoU0RSQ19EMjkpLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qU0RSQ19EMjkqL1wKKyBNVVhfVkFMKENQKFNEUkNfRDMwKSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKlNEUkNfRDMwKi9cCisgTVVYX1ZBTChDUChTRFJDX0QzMSksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypTRFJDX0QzMSovXAorIE1VWF9WQUwoQ1AoU0RSQ19DTEspLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qU0RSQ19DTEsqL1wKKyBNVVhfVkFMKENQKFNEUkNfRFFTMCksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypTRFJDX0RRUzAqL1wKKyBNVVhfVkFMKENQKFNEUkNfRFFTMSksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypTRFJDX0RRUzEqL1wKKyBNVVhfVkFMKENQKFNEUkNfRFFTMiksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypTRFJDX0RRUzIqL1wKKyBNVVhfVkFMKENQKFNEUkNfRFFTMyksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypTRFJDX0RRUzMqL1wKKyAvKkdQTUMqL1wKKyBNVVhfVkFMKENQKEdQTUNfQTEpLAkJKElESVMgfCBQVEQgfCBESVMgfCBNMCkpIC8qR1BNQ19BMSovXAorIE1VWF9WQUwoQ1AoR1BNQ19BMiksCQkoSURJUyB8IFBURCB8IERJUyB8IE0wKSkgLypHUE1DX0EyKi9cCisgTVVYX1ZBTChDUChHUE1DX0EzKSwJCShJRElTIHwgUFREIHwgRElTIHwgTTApKSAvKkdQTUNfQTMqL1wKKyBNVVhfVkFMKENQKEdQTUNfQTQpLAkJKElESVMgfCBQVEQgfCBESVMgfCBNMCkpIC8qR1BNQ19BNCovXAorIE1VWF9WQUwoQ1AoR1BNQ19BNSksCQkoSURJUyB8IFBURCB8IERJUyB8IE0wKSkgLypHUE1DX0E1Ki9cCisgTVVYX1ZBTChDUChHUE1DX0E2KSwJCShJRElTIHwgUFREIHwgRElTIHwgTTApKSAvKkdQTUNfQTYqL1wKKyBNVVhfVkFMKENQKEdQTUNfQTcpLAkJKElESVMgfCBQVEQgfCBESVMgfCBNMCkpIC8qR1BNQ19BNyovXAorIE1VWF9WQUwoQ1AoR1BNQ19BOCksCQkoSURJUyB8IFBURCB8IERJUyB8IE0wKSkgLypHUE1DX0E4Ki9cCisgTVVYX1ZBTChDUChHUE1DX0E5KSwJCShJRElTIHwgUFREIHwgRElTIHwgTTApKSAvKkdQTUNfQTkqL1wKKyBNVVhfVkFMKENQKEdQTUNfQTEwKSwJCShJRElTIHwgUFREIHwgRElTIHwgTTApKSAvKkdQTUNfQTEwKi9cCisgTVVYX1ZBTChDUChHUE1DX0QwKSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKkdQTUNfRDAqL1wKKyBNVVhfVkFMKENQKEdQTUNfRDEpLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qR1BNQ19EMSovXAorIE1VWF9WQUwoQ1AoR1BNQ19EMiksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypHUE1DX0QyKi9cCisgTVVYX1ZBTChDUChHUE1DX0QzKSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKkdQTUNfRDMqL1wKKyBNVVhfVkFMKENQKEdQTUNfRDQpLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qR1BNQ19ENCovXAorIE1VWF9WQUwoQ1AoR1BNQ19ENSksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypHUE1DX0Q1Ki9cCisgTVVYX1ZBTChDUChHUE1DX0Q2KSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKkdQTUNfRDYqL1wKKyBNVVhfVkFMKENQKEdQTUNfRDcpLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qR1BNQ19ENyovXAorIE1VWF9WQUwoQ1AoR1BNQ19EOCksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypHUE1DX0Q4Ki9cCisgTVVYX1ZBTChDUChHUE1DX0Q5KSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKkdQTUNfRDkqL1wKKyBNVVhfVkFMKENQKEdQTUNfRDEwKSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKkdQTUNfRDEwKi9cCisgTVVYX1ZBTChDUChHUE1DX0QxMSksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypHUE1DX0QxMSovXAorIE1VWF9WQUwoQ1AoR1BNQ19EMTIpLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qR1BNQ19EMTIqL1wKKyBNVVhfVkFMKENQKEdQTUNfRDEzKSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKkdQTUNfRDEzKi9cCisgTVVYX1ZBTChDUChHUE1DX0QxNCksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypHUE1DX0QxNCovXAorIE1VWF9WQUwoQ1AoR1BNQ19EMTUpLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qR1BNQ19EMTUqL1wKKyBNVVhfVkFMKENQKEdQTUNfTkNTMCksCQkoSURJUyB8IFBUVSB8IEVOICB8IE0wKSkgLypHUE1DX25DUzAqL1wKKyBNVVhfVkFMKENQKEdQTUNfTkNTMSksCQkoSURJUyB8IFBUVSB8IEVOICB8IE0wKSkgLypHUE1DX25DUzEqL1wKKyBNVVhfVkFMKENQKEdQTUNfTkNTMiksCQkoSURJUyB8IFBUVSB8IEVOICB8IE0wKSkgLypHUE1DX25DUzIqL1wKKyBNVVhfVkFMKENQKEdQTUNfTkNTMyksCQkoSURJUyB8IFBUVSB8IEVOICB8IE0wKSkgLypHUE1DX25DUzMqL1wKKyBNVVhfVkFMKENQKEdQTUNfTkNTNCksCQkoSURJUyB8IFBUVSB8IEVOICB8IE0wKSlcCisgTVVYX1ZBTChDUChHUE1DX05DUzUpLAkJKElESVMgfCBQVEQgfCBESVMgfCBNMCkpXAorIE1VWF9WQUwoQ1AoR1BNQ19OQ1M2KSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTEpKVwKKyBNVVhfVkFMKENQKEdQTUNfTkNTNyksCQkoSUVOICB8IFBUVSB8IEVOICB8IE0xKSlcCisgTVVYX1ZBTChDUChHUE1DX05CRTEpLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpXAorIE1VWF9WQUwoQ1AoR1BNQ19XQUlUMiksCShJRU4gIHwgUFRVIHwgRU4gIHwgTTApKVwKKyBNVVhfVkFMKENQKEdQTUNfV0FJVDMpLAkoSUVOICB8IFBUVSB8IEVOICB8IE0wKSlcCisgTVVYX1ZBTChDUChHUE1DX0NMSyksCQkoSURJUyB8IFBURCB8IERJUyB8IE0wKSkgLypHUE1DX0NMSyovXAorIE1VWF9WQUwoQ1AoR1BNQ19OQURWX0FMRSksCShJRElTIHwgUFREIHwgRElTIHwgTTApKSAvKkdQTUNfbkFEVl9BTEUqL1wKKyBNVVhfVkFMKENQKEdQTUNfTk9FKSwJCShJRElTIHwgUFREIHwgRElTIHwgTTApKSAvKkdQTUNfbk9FKi9cCisgTVVYX1ZBTChDUChHUE1DX05XRSksCQkoSURJUyB8IFBURCB8IERJUyB8IE0wKSkgLypHUE1DX25XRSovXAorIE1VWF9WQUwoQ1AoR1BNQ19OQkUwX0NMRSksCShJRElTIHwgUFREIHwgRElTIHwgTTApKSAvKkdQTUNfbkJFMF9DTEUqL1wKKyBNVVhfVkFMKENQKEdQTUNfTldQKSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKkdQTUNfbldQKi9cCisgTVVYX1ZBTChDUChHUE1DX1dBSVQwKSwJKElFTiAgfCBQVFUgfCBFTiAgfCBNMCkpIC8qR1BNQ19XQUlUMCovXAorIE1VWF9WQUwoQ1AoR1BNQ19XQUlUMSksCShJRU4gIHwgUFRVIHwgRU4gIHwgTTApKSAvKkdQTUNfV0FJVDEqL1wKKyAvKkRTUyovXAorIE1VWF9WQUwoQ1AoRFNTX1BDTEspLAkJKElESVMgfCBQVEQgfCBESVMgfCBNMCkpIC8qRFNTX1BDTEsqL1wKKyBNVVhfVkFMKENQKERTU19IU1lOQyksCQkoSURJUyB8IFBURCB8IERJUyB8IE0wKSkgLypEU1NfSFNZTkMqL1wKKyBNVVhfVkFMKENQKERTU19WU1lOQyksCQkoSURJUyB8IFBURCB8IERJUyB8IE0wKSkgLypEU1NfVlNZTkMqL1wKKyBNVVhfVkFMKENQKERTU19BQ0JJQVMpLAkoSURJUyB8IFBURCB8IERJUyB8IE0wKSkgLypEU1NfQUNCSUFTKi9cCisgTVVYX1ZBTChDUChEU1NfREFUQTApLAkJKElESVMgfCBQVEQgfCBESVMgfCBNMCkpIC8qRFNTX0RBVEEwKi9cCisgTVVYX1ZBTChDUChEU1NfREFUQTEpLAkJKElESVMgfCBQVEQgfCBESVMgfCBNMCkpIC8qRFNTX0RBVEExKi9cCisgTVVYX1ZBTChDUChEU1NfREFUQTIpLAkJKElESVMgfCBQVEQgfCBESVMgfCBNMCkpIC8qRFNTX0RBVEEyKi9cCisgTVVYX1ZBTChDUChEU1NfREFUQTMpLAkJKElESVMgfCBQVEQgfCBESVMgfCBNMCkpIC8qRFNTX0RBVEEzKi9cCisgTVVYX1ZBTChDUChEU1NfREFUQTQpLAkJKElESVMgfCBQVEQgfCBESVMgfCBNMCkpIC8qRFNTX0RBVEE0Ki9cCisgTVVYX1ZBTChDUChEU1NfREFUQTUpLAkJKElESVMgfCBQVEQgfCBESVMgfCBNMCkpIC8qRFNTX0RBVEE1Ki9cCisgTVVYX1ZBTChDUChEU1NfREFUQTYpLAkJKElESVMgfCBQVEQgfCBESVMgfCBNMCkpIC8qRFNTX0RBVEE2Ki9cCisgTVVYX1ZBTChDUChEU1NfREFUQTcpLAkJKElESVMgfCBQVEQgfCBESVMgfCBNMCkpIC8qRFNTX0RBVEE3Ki9cCisgTVVYX1ZBTChDUChEU1NfREFUQTgpLAkJKElESVMgfCBQVEQgfCBESVMgfCBNMCkpIC8qRFNTX0RBVEE4Ki9cCisgTVVYX1ZBTChDUChEU1NfREFUQTkpLAkJKElESVMgfCBQVEQgfCBESVMgfCBNMCkpIC8qRFNTX0RBVEE5Ki9cCisgTVVYX1ZBTChDUChEU1NfREFUQTEwKSwJKElESVMgfCBQVEQgfCBESVMgfCBNMCkpIC8qRFNTX0RBVEExMCovXAorIE1VWF9WQUwoQ1AoRFNTX0RBVEExMSksCShJRElTIHwgUFREIHwgRElTIHwgTTApKSAvKkRTU19EQVRBMTEqL1wKKyBNVVhfVkFMKENQKERTU19EQVRBMTIpLAkoSURJUyB8IFBURCB8IERJUyB8IE0wKSkgLypEU1NfREFUQTEyKi9cCisgTVVYX1ZBTChDUChEU1NfREFUQTEzKSwJKElESVMgfCBQVEQgfCBESVMgfCBNMCkpIC8qRFNTX0RBVEExMyovXAorIE1VWF9WQUwoQ1AoRFNTX0RBVEExNCksCShJRElTIHwgUFREIHwgRElTIHwgTTApKSAvKkRTU19EQVRBMTQqL1wKKyBNVVhfVkFMKENQKERTU19EQVRBMTUpLAkoSURJUyB8IFBURCB8IERJUyB8IE0wKSkgLypEU1NfREFUQTE1Ki9cCisgTVVYX1ZBTChDUChEU1NfREFUQTE2KSwJKElESVMgfCBQVEQgfCBESVMgfCBNMCkpIC8qRFNTX0RBVEExNiovXAorIE1VWF9WQUwoQ1AoRFNTX0RBVEExNyksCShJRElTIHwgUFREIHwgRElTIHwgTTApKSAvKkRTU19EQVRBMTcqL1wKKyBNVVhfVkFMKENQKERTU19EQVRBMTgpLAkoSURJUyB8IFBURCB8IERJUyB8IE0wKSkgLypEU1NfREFUQTE4Ki9cCisgTVVYX1ZBTChDUChEU1NfREFUQTE5KSwJKElESVMgfCBQVEQgfCBESVMgfCBNMCkpIC8qRFNTX0RBVEExOSovXAorIE1VWF9WQUwoQ1AoRFNTX0RBVEEyMCksCShJRElTIHwgUFREIHwgRElTIHwgTTApKSAvKkRTU19EQVRBMjAqL1wKKyBNVVhfVkFMKENQKERTU19EQVRBMjEpLAkoSURJUyB8IFBURCB8IERJUyB8IE0wKSkgLypEU1NfREFUQTIxKi9cCisgTVVYX1ZBTChDUChEU1NfREFUQTIyKSwJKElESVMgfCBQVEQgfCBESVMgfCBNMCkpIC8qRFNTX0RBVEEyMiovXAorIE1VWF9WQUwoQ1AoRFNTX0RBVEEyMyksCShJRElTIHwgUFREIHwgRElTIHwgTTApKSAvKkRTU19EQVRBMjMqL1wKKyAvKkdQSU8gYmFzZWQgZ2FtZSBidXR0b25zKi9cCisgTVVYX1ZBTChDUChDQU1fWENMS0EpLAkJKElFTiAgfCBQVFUgfCBESVMgfCBNNCkpIC8qR1BJT185NiAtIExFRlQqL1wKKyBNVVhfVkFMKENQKENBTV9QQ0xLKSwJCShJRU4gIHwgUFRVIHwgRElTIHwgTTQpKSAvKkdQSU9fOTcgLSBMMiovXAorIE1VWF9WQUwoQ1AoQ0FNX0ZMRCksCQkoSUVOICB8IFBUVSB8IERJUyB8IE00KSkgLypHUElPXzk4IC0gUklHSFQqL1wKKyBNVVhfVkFMKENQKENBTV9EMCksCQkoSUVOICB8IFBUVSB8IERJUyB8IE00KSkgLypHUElPXzk5IC0gTUVOVSovXAorIE1VWF9WQUwoQ1AoQ0FNX0QxKSwJCShJRU4gIHwgUFRVIHwgRElTIHwgTTQpKSAvKkdQSU9fMTAwIC0gU1RBUlQqL1wKKyBNVVhfVkFMKENQKENBTV9EMiksCQkoSUVOICB8IFBUVSB8IERJUyB8IE00KSkgLypHUElPXzEwMSAtIFkqL1wKKyBNVVhfVkFMKENQKENBTV9EMyksCQkoSUVOICB8IFBUVSB8IERJUyB8IE00KSkgLypHUElPXzEwMiAtIEwxKi9cCisgTVVYX1ZBTChDUChDQU1fRDQpLAkJKElFTiAgfCBQVFUgfCBESVMgfCBNNCkpIC8qR1BJT18xMDMgLSBET1dOKi9cCisgTVVYX1ZBTChDUChDQU1fRDUpLAkJKElFTiAgfCBQVFUgfCBESVMgfCBNNCkpIC8qR1BJT18xMDQgLSBTRUxFQ1QqL1wKKyBNVVhfVkFMKENQKENBTV9ENiksCQkoSUVOICB8IFBUVSB8IERJUyB8IE00KSkgLypHUElPXzEwNSAtIFIxKi9cCisgTVVYX1ZBTChDUChDQU1fRDcpLAkJKElFTiAgfCBQVFUgfCBESVMgfCBNNCkpIC8qR1BJT18xMDYgLSBCKi9cCisgTVVYX1ZBTChDUChDQU1fRDgpLAkJKElFTiAgfCBQVFUgfCBESVMgfCBNNCkpIC8qR1BJT18xMDcgLSBSMiovXAorIE1VWF9WQUwoQ1AoQ0FNX0QxMCksCQkoSUVOICB8IFBUVSB8IERJUyB8IE00KSkgLypHUElPXzEwOSAtIFgqL1wKKyBNVVhfVkFMKENQKENBTV9EMTEpLAkJKElFTiAgfCBQVFUgfCBESVMgfCBNNCkpIC8qR1BJT18xMTAgLSBVUCovXAorIE1VWF9WQUwoQ1AoQ0FNX1hDTEtCKSwJCShJRU4gIHwgUFRVIHwgRElTIHwgTTQpKSAvKkdQSU9fMTExIC0gQSovXAorIC8qQXVkaW8gSW50ZXJmYWNlIFRvIEV4dGVybmFsIERBQyAoSGVhZHBob25lLCBTcGVha2VycykqL1wKKyBNVVhfVkFMKENQKE1DQlNQMl9GU1gpLAkoSURJUyB8IFBURCB8IERJUyB8IE0wKSkgLypNY0JTUDJfRlNYKi9cCisgTVVYX1ZBTChDUChNQ0JTUDJfQ0xLWCksCShJRElTIHwgUFREIHwgRElTIHwgTTApKSAvKk1jQlNQMl9DTEtYKi9cCisgTVVYX1ZBTChDUChNQ0JTUDJfRFgpLAkJKElESVMgfCBQVEQgfCBESVMgfCBNMCkpIC8qTWNCU1AyX0RYKi9cCisgTVVYX1ZBTChDUChNQ0JTUF9DTEtTKSwJKElFTiAgfCBQVFUgfCBESVMgfCBNMCkpIC8qTWNCU1BfQ0xLUyovXAorIE1VWF9WQUwoQ1AoTUNCU1AyX0RSKSwJCShJRElTIHwgUFREIHwgRElTIHwgTTQpKSAvKkdQSU9fMTE4Ki9cCisJCQkJCQkJIC8qIC0gblBPV0VSRE9XTl9EQUMqL1wKKyAvKkV4cGFuc2lvbiBjYXJkIDEqL1wKKyBNVVhfVkFMKENQKE1NQzFfQ0xLKSwJCShJRElTIHwgUFRVIHwgRU4gIHwgTTApKSAvKk1NQzFfQ0xLKi9cCisgTVVYX1ZBTChDUChNTUMxX0NNRCksCQkoSUVOICB8IFBUVSB8IEVOICB8IE0wKSkgLypNTUMxX0NNRCovXAorIE1VWF9WQUwoQ1AoTU1DMV9EQVQwKSwJCShJRU4gIHwgUFRVIHwgRU4gIHwgTTApKSAvKk1NQzFfREFUMCovXAorIE1VWF9WQUwoQ1AoTU1DMV9EQVQxKSwJCShJRU4gIHwgUFRVIHwgRU4gIHwgTTApKSAvKk1NQzFfREFUMSovXAorIE1VWF9WQUwoQ1AoTU1DMV9EQVQyKSwJCShJRU4gIHwgUFRVIHwgRU4gIHwgTTApKSAvKk1NQzFfREFUMiovXAorIE1VWF9WQUwoQ1AoTU1DMV9EQVQzKSwJCShJRU4gIHwgUFRVIHwgRU4gIHwgTTApKSAvKk1NQzFfREFUMyovXAorIE1VWF9WQUwoQ1AoTU1DMV9EQVQ0KSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTQpKSAvKkdQSU9fMTI2IC0gTU1DMV9XUCovXAorIC8qRXhwYW5zaW9uIGNhcmQgMiovXAorIE1VWF9WQUwoQ1AoTU1DMl9DTEspLAkJKElESVMgfCBQVEQgfCBESVMgfCBNMCkpIC8qTU1DMl9DTEsqL1wKKyBNVVhfVkFMKENQKE1NQzJfQ01EKSwJCShJRU4gIHwgUFRVIHwgRU4gIHwgTTApKSAvKk1NQzJfQ01EKi9cCisgTVVYX1ZBTChDUChNTUMyX0RBVDApLAkJKElFTiAgfCBQVFUgfCBFTiAgfCBNMCkpIC8qTU1DMl9EQVQwKi9cCisgTVVYX1ZBTChDUChNTUMyX0RBVDEpLAkJKElFTiAgfCBQVFUgfCBFTiAgfCBNMCkpIC8qTU1DMl9EQVQxKi9cCisgTVVYX1ZBTChDUChNTUMyX0RBVDIpLAkJKElFTiAgfCBQVFUgfCBFTiAgfCBNMCkpIC8qTU1DMl9EQVQyKi9cCisgTVVYX1ZBTChDUChNTUMyX0RBVDMpLAkJKElFTiAgfCBQVFUgfCBFTiAgfCBNMCkpIC8qTU1DMl9EQVQzKi9cCisgTVVYX1ZBTChDUChNTUMyX0RBVDQpLAkJKElESVMgfCBQVEQgfCBESVMgfCBNMSkpIC8qTU1DMl9ESVJfREFUMCovXAorIE1VWF9WQUwoQ1AoTU1DMl9EQVQ1KSwJCShJRElTIHwgUFREIHwgRElTIHwgTTEpKSAvKk1NQzJfRElSX0RBVDEqL1wKKyBNVVhfVkFMKENQKE1NQzJfREFUNiksCQkoSURJUyB8IFBURCB8IERJUyB8IE0xKSkgLypNTUMyX0RJUl9DTUQgKi9cCisgTVVYX1ZBTChDUChNTUMyX0RBVDcpLAkJKElFTiAgfCBQVFUgfCBFTiAgfCBNMSkpIC8qTU1DMl9DTEtJTiovXAorIE1VWF9WQUwoQ1AoTU1DMV9EQVQ1KSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTQpKSAvKkdQSU9fMTI3IC0gTU1DMl9XUCovXAorIC8qU0RJTyBJbnRlcmZhY2UgdG8gV0lGSSBNb2R1bGUqL1wKKyBNVVhfVkFMKENQKEVUS19DTEtfRVMyKSwJKElESVMgfCBQVFUgfCBFTiAgfCBNMikpIC8qTU1DM19DTEsqL1wKKyBNVVhfVkFMKENQKEVUS19DVExfRVMyKSwJKElFTiAgfCBQVEQgfCBESVMgfCBNMikpIC8qTU1DM19DTUQqL1wKKyBNVVhfVkFMKENQKEVUS19ENF9FUzIpLAkoSUVOICB8IFBURCB8IERJUyB8IE0yKSkgLypNTUMzX0RBVDAqL1wKKyBNVVhfVkFMKENQKEVUS19ENV9FUzIpLAkoSUVOICB8IFBURCB8IERJUyB8IE0yKSkgLypNTUMzX0RBVDEqL1wKKyBNVVhfVkFMKENQKEVUS19ENl9FUzIpLAkoSUVOICB8IFBURCB8IERJUyB8IE0yKSkgLypNTUMzX0RBVDIqL1wKKyBNVVhfVkFMKENQKEVUS19EM19FUzIpLAkoSUVOICB8IFBURCB8IERJUyB8IE0yKSkgLypNTUMzX0RBVDMqL1wKKyAvKkF1ZGlvIEludGVyZmFjZSBUbyBCbHVldG9vdGggY2hpcCovXAorIE1VWF9WQUwoQ1AoTUNCU1AzX0RYKSwJCShJRElTIHwgUFREIHwgRElTIHwgTTApKSAvKk1jQlNQM19EWCovXAorIE1VWF9WQUwoQ1AoTUNCU1AzX0RSKSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKk1jQlNQM19EUiovXAorIE1VWF9WQUwoQ1AoTUNCU1AzX0NMS1gpLAkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypNY0JTUDNfQ0xLWCovXAorIE1VWF9WQUwoQ1AoTUNCU1AzX0ZTWCksCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKk1jQlNQM19GU1gqL1wKKyAvKkRpZ2l0YWwgSW50ZXJmYWNlIHRvIEJsdWV0b290aCAoVUFSVCkqL1wKKyBNVVhfVkFMKENQKFVBUlQxX1RYKSwJCShJRElTIHwgUFREIHwgRElTIHwgTTApKSAvKlVBUlQxX1RYKi9cCisgTVVYX1ZBTChDUChVQVJUMV9SVFMpLAkJKElESVMgfCBQVEQgfCBESVMgfCBNMCkpIC8qVUFSVDFfUlRTKi9cCisgTVVYX1ZBTChDUChVQVJUMV9DVFMpLAkJKElFTiAgfCBQVFUgfCBFTiAgfCBNMCkpIC8qVUFSVDFfQ1RTKi9cCisgTVVYX1ZBTChDUChVQVJUMV9SWCksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypVQVJUMV9SWCovXAorIC8qQXVkaW8gSW50ZXJmYWNlIHRvIFRyaXRvbjIgY2hpcCAoVFBTNjU5NTApKi9cCisgTVVYX1ZBTChDUChNQ0JTUDRfQ0xLWCksCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKk1jQlNQNF9DTEtYKi9cCisgTVVYX1ZBTChDUChNQ0JTUDRfRFIpLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qTWNCU1A0X0RSKi9cCisgTVVYX1ZBTChDUChNQ0JTUDRfRFgpLAkJKElESVMgfCBQVEQgfCBESVMgfCBNMCkpIC8qTWNCU1A0X0RYKi9cCisgTVVYX1ZBTChDUChNQ0JTUDRfRlNYKSwJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qTWNCU1A0X0ZTWCovXAorIC8qR1BJTyBkZWZpbml0aW9ucyBmb3IgbXV4ZWQgcGlucyBvbiBBViBjb25uZWN0b3IqL1wKKyBNVVhfVkFMKENQKFVBUlQyX0NUUyksCQkoSUVOICB8IFBUVSB8IEVOICB8IE00KSkgLypHUElPXzE0NCwqL1wKKwkJCQkJCQkgLypVQVJUMl9DVFMqL1wKKyBNVVhfVkFMKENQKFVBUlQyX1JUUyksCQkoSUVOICB8IFBUVSB8IERJUyB8IE00KSkgLypHUElPXzE0NSwqL1wKKwkJCQkJCQkgLypVQVJUMl9SVFMqL1wKKyBNVVhfVkFMKENQKFVBUlQyX1RYKSwJCShJRU4gIHwgUFRVIHwgRU4gIHwgTTQpKSAvKkdQSU9fMTQ2LCovXAorCQkJCQkJCSAvKlVBUlQyX1RYKi9cCisgTVVYX1ZBTChDUChVQVJUMl9SWCksCQkoSUVOICB8IFBURCB8IERJUyB8IE00KSkgLypHUElPXzE0NywqL1wKKwkJCQkJCQkgLypVQVJUMl9SWCovXAorIC8qU2VyaWFsIEludGVyZmFjZSAoUGVyaXBoZXJhbCBib290LCBMaW51eCBjb25zb2xlLCBvbiBBViBjb25uZWN0b3IpKi9cCisgTVVYX1ZBTChDUChVQVJUM19SWF9JUlJYKSwJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qVUFSVDNfUlgqL1wKKyBNVVhfVkFMKENQKFVBUlQzX1RYX0lSVFgpLAkoSURJUyB8IFBURCB8IERJUyB8IE0wKSkgLypVQVJUM19UWCovXAorIC8qTEVEcyAoQ29udHJvbGxlZCBieSBPTUFQKSovXAorIE1VWF9WQUwoQ1AoTU1DMV9EQVQ2KSwJCShJRElTIHwgUFREIHwgRElTIHwgTTQpKSAvKkdQSU9fMTI4Ki9cCisJCQkJCQkJIC8qIC0gTEVEX01NQzEqL1wKKyBNVVhfVkFMKENQKE1NQzFfREFUNyksCQkoSURJUyB8IFBURCB8IERJUyB8IE00KSkgLypHUElPXzEyOSovXAorCQkJCQkJCSAvKiAtIExFRF9NTUMyKi9cCisgTVVYX1ZBTChDUChNQ0JTUDFfRFgpLAkJKElESVMgfCBQVEQgfCBESVMgfCBNNCkpIC8qR1BJT18xNTgqL1wKKwkJCQkJCQkgLyogLSBMRURfQlQqL1wKKyBNVVhfVkFMKENQKE1DQlNQMV9EUiksCQkoSURJUyB8IFBURCB8IERJUyB8IE00KSkgLypHUElPXzE1OSovXAorCQkJCQkJCSAvKiAtIExFRF9XSUZJKi9cCisgLypTd2l0Y2hlcyovXAorIE1VWF9WQUwoQ1AoTUNTUEkxX0NTMiksCShJRU4gIHwgUFRVIHwgRElTIHwgTTQpKSAvKkdQSU9fMTc2Ki9cCisJCQkJCQkJIC8qIC0gbkhPTERfU1dJVENIKi9cCisgTVVYX1ZBTChDUChDQU1fRDkpLAkJKElFTiAgfCBQVFUgfCBESVMgfCBNNCkpIC8qR1BJT18xMDgqL1wKKwkJCQkJCQkgLyogLSBuTElEX1NXSVRDSCovXAorIC8qRXh0ZXJuYWwgSVJRcyovXAorIE1VWF9WQUwoQ1AoQ0FNX0hTKSwJCShJRU4gIHwgUFRVIHwgRElTIHwgTTQpKSAvKkdQSU9fOTQqL1wKKwkJCQkJCQkgLyogLSBuVE9VQ0hfSVJRKi9cCisgTVVYX1ZBTChDUChFVEtfRDdfRVMyKSwJKElFTiAgfCBQVEQgfCBESVMgfCBNNCkpIC8qR1BJT18yMSovXAorCQkJCQkJCSAvKiAtIFdJRklfSVJRKi9cCisgTVVYX1ZBTChDUChNQ0JTUDFfRlNYKSwJKElFTiAgfCBQVEQgfCBESVMgfCBNNCkpIC8qR1BJT18xNjEqL1wKKwkJCQkJCQkgLyogLSBuSVJRX05VQjEqL1wKKyBNVVhfVkFMKENQKENBTV9XRU4pLAkJKElFTiAgfCBQVFUgfCBESVMgfCBNNCkpIC8qR1BJT18xNjcqL1wKKwkJCQkJCQkgLyogLSBuSVJRX05VQjIqL1wKKyAvKlZhcmlvdXMgb3RoZXIgc3R1ZmYqL1wKKyBNVVhfVkFMKENQKENBTV9WUyksCQkoSUVOICB8IFBUVSB8IERJUyB8IE00KSkgLypHUElPXzk1Ki9cCisJCQkJCQkJIC8qIC0gblRPVUNIX0JVU1kqL1wKKyBNVVhfVkFMKENQKFVBUlQzX0NUU19SQ1RYKSwJKElFTiAgfCBQVEQgfCBESVMgfCBNNCkpIC8qR1BJT18xNjMqL1wKKwkJCQkJCQkgLyogLSBuT0NfVVNCNSovXAorIE1VWF9WQUwoQ1AoTUNCU1AxX0NMS1gpLAkoSURJUyB8IFBURCB8IERJUyB8IE00KSkgLypHUElPXzE2MiovXAorCQkJCQkJCSAvKiAtIFNUQVJUX0FEQyovXAorIE1VWF9WQUwoQ1AoRVRLX0Q4X0VTMiksCShJRU4gIHwgUFREIHwgRElTIHwgTTQpKSAvKkdQSU9fMjIqL1wKKwkJCQkJCQkgLyogLSBNU0VDVVJFKi9cCisgTVVYX1ZBTChDUChDQU1fU1RST0JFKSwJKElFTiAgfCBQVFUgfCBESVMgfCBNNCkpIC8qR1BJT18xMjYqL1wKKwkJCQkJCQkgLyogLSBIUF9ERVRFQ1QqL1wKKyAvKkV4dGVybmFsIFJlc2V0cyBhbmQgRW5hYmxlcyovXAorIE1VWF9WQUwoQ1AoRVRLX0QwX0VTMiksCShJRElTIHwgUFREIHwgRElTIHwgTTQpKSAvKkdQSU9fMTQqL1wKKwkJCQkJCQkgLyogLSBuSERQSE5fU0hVVERPV04qL1wKKyBNVVhfVkFMKENQKEVUS19EMV9FUzIpLAkoSURJUyB8IFBURCB8IERJUyB8IE00KSkgLypHUElPXzE1Ki9cCisJCQkJCQkJIC8qIC0gbkJUX1NIVVRET1dOKi9cCisgTVVYX1ZBTChDUChFVEtfRDlfRVMyKSwJKElESVMgfCBQVEQgfCBESVMgfCBNNCkpIC8qR1BJT18yMyovXAorCQkJCQkJCSAvKiAtIG5XSUZJX1JFU0VUKi9cCisgTVVYX1ZBTChDUChNQ0JTUDFfRlNSKSwJKElESVMgfCBQVFUgfCBESVMgfCBNNCkpIC8qR1BJT18xNTcqL1wKKwkJCQkJCQkgLyogLSBuTENEX1JFU0VUKi9cCisgTVVYX1ZBTChDUChNQ0JTUDFfQ0xLUiksCShJRElTIHwgUFREIHwgRElTIHwgTTQpKSAvKkdQSU9fMTU2Ki9cCisJCQkJCQkJIC8qIC0gUkVTRVRfTlVCUyovXAorIE1VWF9WQUwoQ1AoVUFSVDNfUlRTX1NEKSwJKElESVMgfCBQVFUgfCBFTiAgfCBNNCkpIC8qR1BJT18xNjQqL1wKKwkJCQkJCQkgLyogLSBFTl9VU0JfNVYqL1wKKyAvKlVudXNlZCovXAorIE1VWF9WQUwoQ1AoSERRX1NJTyksCQkoSUVOICB8IFBUVSB8IEVOICB8IE0wKSkgLypIRFFfU0lPIC0gTkMqL1wKKyBNVVhfVkFMKENQKENTSTJfRFgwKSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKkNTSTJfRFgwIC0gTkMqL1wKKyBNVVhfVkFMKENQKENTSTJfRFkwKSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKkNTSTJfRFkwIC0gTkMqL1wKKyBNVVhfVkFMKENQKENTSTJfRFgxKSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKkNTSTJfRFgxIC0gTkMqL1wKKyBNVVhfVkFMKENQKENTSTJfRFkxKSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKkNTSTJfRFkxIC0gTkMqL1wKKyBNVVhfVkFMKENQKEkyQzJfU0NMKSwJCShJRU4gIHwgUFRVIHwgRU4gIHwgTTApKSAvKkkyQzJfU0NMIC0gTkMqL1wKKyBNVVhfVkFMKENQKEkyQzJfU0RBKSwJCShJRU4gIHwgUFRVIHwgRU4gIHwgTTApKSAvKkkyQzJfU0RBIC0gTkMqL1wKKyAvKkhTIFVTQiBPVEcgUG9ydCAoY29ubmVjdHMgdG8gSFNVU0IwKSovXAorIE1VWF9WQUwoQ1AoSFNVU0IwX0NMSyksCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKkhTVVNCMF9DTEsqL1wKKyBNVVhfVkFMKENQKEhTVVNCMF9TVFApLAkoSURJUyB8IFBUVSB8IEVOICB8IE0wKSkgLypIU1VTQjBfU1RQKi9cCisgTVVYX1ZBTChDUChIU1VTQjBfRElSKSwJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qSFNVU0IwX0RJUiovXAorIE1VWF9WQUwoQ1AoSFNVU0IwX05YVCksCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKkhTVVNCMF9OWFQqL1wKKyBNVVhfVkFMKENQKEhTVVNCMF9EQVRBMCksCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKkhTVVNCMF9EQVRBMCovXAorIE1VWF9WQUwoQ1AoSFNVU0IwX0RBVEExKSwJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qSFNVU0IwX0RBVEExKi9cCisgTVVYX1ZBTChDUChIU1VTQjBfREFUQTIpLAkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypIU1VTQjBfREFUQTIqL1wKKyBNVVhfVkFMKENQKEhTVVNCMF9EQVRBMyksCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKkhTVVNCMF9EQVRBMyovXAorIE1VWF9WQUwoQ1AoSFNVU0IwX0RBVEE0KSwJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qSFNVU0IwX0RBVEE0Ki9cCisgTVVYX1ZBTChDUChIU1VTQjBfREFUQTUpLAkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypIU1VTQjBfREFUQTUqL1wKKyBNVVhfVkFMKENQKEhTVVNCMF9EQVRBNiksCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKkhTVVNCMF9EQVRBNiovXAorIE1VWF9WQUwoQ1AoSFNVU0IwX0RBVEE3KSwJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qSFNVU0IwX0RBVEE3Ki9cCisgLypJMkMgUG9ydHMqL1wKKyBNVVhfVkFMKENQKEkyQzFfU0NMKSwJCShJRU4gIHwgUFRVIHwgRU4gIHwgTTApKSAvKkkyQzFfU0NMIC0gVDJfQ1RSTCovXAorIE1VWF9WQUwoQ1AoSTJDMV9TREEpLAkJKElFTiAgfCBQVFUgfCBFTiAgfCBNMCkpIC8qSTJDMV9TREEgLSBUMl9DVFJMKi9cCisgTVVYX1ZBTChDUChJMkMzX1NDTCksCQkoSUVOICB8IFBUVSB8IEVOICB8IE0wKSkgLypJMkMzX1NDTCAtIE5VQlMqL1wKKyBNVVhfVkFMKENQKEkyQzNfU0RBKSwJCShJRU4gIHwgUFRVIHwgRU4gIHwgTTApKSAvKkkyQzNfU0RBIC0gTlVCUyovXAorIE1VWF9WQUwoQ1AoSTJDNF9TQ0wpLAkJKElFTiAgfCBQVFUgfCBFTiAgfCBNMCkpIC8qSTJDNF9TQ0wgLSBUMl9TUiovXAorIE1VWF9WQUwoQ1AoSTJDNF9TREEpLAkJKElFTiAgfCBQVFUgfCBFTiAgfCBNMCkpIC8qSTJDNF9TREEgLSBUMl9TUiovXAorIC8qU2VyaWFsIEludGVyZmFjZSAoVG91Y2gsIExDRCBjb250cm9sKSovXAorIE1VWF9WQUwoQ1AoTUNTUEkxX0NMSyksCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKk1jU1BJMV9DTEsqL1wKKyBNVVhfVkFMKENQKE1DU1BJMV9TSU1PKSwJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qTWNTUEkxX1NJTU8qL1wKKyBNVVhfVkFMKENQKE1DU1BJMV9TT01JKSwJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qTWNTUEkxX1NPTUkqL1wKKyBNVVhfVkFMKENQKE1DU1BJMV9DUzApLAkoSURJUyB8IFBUVSB8IEVOICB8IE0wKSkgLypNY1NQSTFfQ1MwIC0gVE9VQ0gqL1wKKyBNVVhfVkFMKENQKE1DU1BJMV9DUzEpLAkoSURJUyB8IFBUVSB8IEVOICB8IE0wKSkgLypNY1NQSTFfQ1MxIC0gTENEKi9cCisgLypIUyBVU0IgSE9TVCBQb3J0IChjb25uZWN0cyB0byBIU1VTQjIpKi9cCisgTVVYX1ZBTChDUChFVEtfRDEwX0VTMiksCShJRElTIHwgUFREIHwgRElTIHwgTTMpKSAvKlVTQl9IT1NUX0NMSyovXAorIE1VWF9WQUwoQ1AoRVRLX0QxMV9FUzIpLAkoSURJUyB8IFBUVSB8IEVOICB8IE0zKSkgLypVU0JfSE9TVF9TVFAqL1wKKyBNVVhfVkFMKENQKEVUS19EMTJfRVMyKSwJKElFTiAgfCBQVEQgfCBESVMgfCBNMykpIC8qVVNCX0hPU1RfRElSKi9cCisgTVVYX1ZBTChDUChFVEtfRDEzX0VTMiksCShJRU4gIHwgUFREIHwgRElTIHwgTTMpKSAvKlVTQl9IT1NUX05YVCovXAorIE1VWF9WQUwoQ1AoRVRLX0QxNF9FUzIpLAkoSUVOICB8IFBURCB8IERJUyB8IE0zKSkgLypVU0JfSE9TVF9EMCovXAorIE1VWF9WQUwoQ1AoRVRLX0QxNV9FUzIpLAkoSUVOICB8IFBURCB8IERJUyB8IE0zKSkgLypVU0JfSE9TVF9EMSovXAorIE1VWF9WQUwoQ1AoTUNTUEkxX0NTMyksCShJRU4gIHwgUFREIHwgRElTIHwgTTMpKSAvKlVTQl9IT1NUX0QyKi9cCisgTVVYX1ZBTChDUChNQ1NQSTJfQ1MxKSwJKElFTiAgfCBQVEQgfCBESVMgfCBNMykpIC8qVVNCX0hPU1RfRDMqL1wKKyBNVVhfVkFMKENQKE1DU1BJMl9TSU1PKSwJKElFTiAgfCBQVEQgfCBESVMgfCBNMykpIC8qVVNCX0hPU1RfRDQqL1wKKyBNVVhfVkFMKENQKE1DU1BJMl9TT01JKSwJKElFTiAgfCBQVEQgfCBESVMgfCBNMykpIC8qVVNCX0hPU1RfRDUqL1wKKyBNVVhfVkFMKENQKE1DU1BJMl9DUzApLAkoSUVOICB8IFBURCB8IERJUyB8IE0zKSkgLypVU0JfSE9TVF9ENiovXAorIE1VWF9WQUwoQ1AoTUNTUEkyX0NMSyksCShJRU4gIHwgUFREIHwgRElTIHwgTTMpKSAvKlVTQl9IT1NUX0Q3Ki9cCisgTVVYX1ZBTChDUChFVEtfRDJfRVMyKSwJKElESVMgfCBQVEQgfCBESVMgfCBNNCkpIC8qR1BJT18xNiovXAorCQkJCQkJCSAvKiAtIG5SRVNFVF9VU0JfSE9TVCovXAorIC8qQ29udHJvbCBhbmQgZGVidWcgKi9cCisgTVVYX1ZBTChDUChTWVNfMzJLKSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKlNZU18zMksqL1wKKyBNVVhfVkFMKENQKFNZU19DTEtSRVEpLAkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypTWVNfQ0xLUkVRKi9cCisgTVVYX1ZBTChDUChTWVNfTklSUSksCQkoSUVOICB8IFBUVSB8IEVOICB8IE0wKSkgLypTWVNfbklSUSovXAorIE1VWF9WQUwoQ1AoU1lTX0JPT1QwKSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTQpKSAvKkdQSU9fMiovXAorIE1VWF9WQUwoQ1AoU1lTX0JPT1QxKSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTQpKSAvKkdQSU9fMyovXAorIE1VWF9WQUwoQ1AoU1lTX0JPT1QyKSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTQpKSAvKkdQSU9fNCovXAorIE1VWF9WQUwoQ1AoU1lTX0JPT1QzKSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTQpKSAvKkdQSU9fNSovXAorIE1VWF9WQUwoQ1AoU1lTX0JPT1Q0KSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTQpKSAvKkdQSU9fNiovXAorIE1VWF9WQUwoQ1AoU1lTX0JPT1Q1KSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTQpKSAvKkdQSU9fNyovXAorIE1VWF9WQUwoQ1AoU1lTX0JPT1Q2KSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTQpKSAvKkdQSU9fOCovXAorIE1VWF9WQUwoQ1AoU1lTX09GRl9NT0RFKSwJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qU1lTX09GRl9NT0RFKi9cCisgTVVYX1ZBTChDUChTWVNfQ0xLT1VUMSksCShJRU4gIHwgUFREIHwgRElTIHwgTTQpKSAvKlNZU19DTEtPVVQxIC0gTkMqL1wKKyBNVVhfVkFMKENQKFNZU19DTEtPVVQyKSwJKElFTiAgfCBQVEQgfCBESVMgfCBNNCkpIC8qU1lTX0NMS09VVDIgLSBOQyovXAorIC8qSlRBRyovXAorIE1VWF9WQUwoQ1AoSlRBR19uVFJTVCksCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKkpUQUdfblRSU1QqL1wKKyBNVVhfVkFMKENQKEpUQUdfVENLKSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKkpUQUdfVENLKi9cCisgTVVYX1ZBTChDUChKVEFHX1RNUyksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypKVEFHX1RNUyovXAorIE1VWF9WQUwoQ1AoSlRBR19UREkpLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qSlRBR19UREkqL1wKKyBNVVhfVkFMKENQKEpUQUdfRU1VMCksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypKVEFHX0VNVTAqL1wKKyBNVVhfVkFMKENQKEpUQUdfRU1VMSksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypKVEFHX0VNVTEqL1wKKyAvKkRpZSB0byBEaWUgc3R1ZmYqL1wKKyBNVVhfVkFMKENQKEQyRF9NQ0FEMSksCQkoSUVOICB8IFBURCB8IEVOICB8IE0wKSkgLypkMmRfbWNhZDEqL1wKKyBNVVhfVkFMKENQKEQyRF9NQ0FEMiksCQkoSUVOICB8IFBURCB8IEVOICB8IE0wKSkgLypkMmRfbWNhZDIqL1wKKyBNVVhfVkFMKENQKEQyRF9NQ0FEMyksCQkoSUVOICB8IFBURCB8IEVOICB8IE0wKSkgLypkMmRfbWNhZDMqL1wKKyBNVVhfVkFMKENQKEQyRF9NQ0FENCksCQkoSUVOICB8IFBURCB8IEVOICB8IE0wKSkgLypkMmRfbWNhZDQqL1wKKyBNVVhfVkFMKENQKEQyRF9NQ0FENSksCQkoSUVOICB8IFBURCB8IEVOICB8IE0wKSkgLypkMmRfbWNhZDUqL1wKKyBNVVhfVkFMKENQKEQyRF9NQ0FENiksCQkoSUVOICB8IFBURCB8IEVOICB8IE0wKSkgLypkMmRfbWNhZDYqL1wKKyBNVVhfVkFMKENQKEQyRF9NQ0FENyksCQkoSUVOICB8IFBURCB8IEVOICB8IE0wKSkgLypkMmRfbWNhZDcqL1wKKyBNVVhfVkFMKENQKEQyRF9NQ0FEOCksCQkoSUVOICB8IFBURCB8IEVOICB8IE0wKSkgLypkMmRfbWNhZDgqL1wKKyBNVVhfVkFMKENQKEQyRF9NQ0FEOSksCQkoSUVOICB8IFBURCB8IEVOICB8IE0wKSkgLypkMmRfbWNhZDkqL1wKKyBNVVhfVkFMKENQKEQyRF9NQ0FEMTApLAkoSUVOICB8IFBURCB8IEVOICB8IE0wKSkgLypkMmRfbWNhZDEwKi9cCisgTVVYX1ZBTChDUChEMkRfTUNBRDExKSwJKElFTiAgfCBQVEQgfCBFTiAgfCBNMCkpIC8qZDJkX21jYWQxMSovXAorIE1VWF9WQUwoQ1AoRDJEX01DQUQxMiksCShJRU4gIHwgUFREIHwgRU4gIHwgTTApKSAvKmQyZF9tY2FkMTIqL1wKKyBNVVhfVkFMKENQKEQyRF9NQ0FEMTMpLAkoSUVOICB8IFBURCB8IEVOICB8IE0wKSkgLypkMmRfbWNhZDEzKi9cCisgTVVYX1ZBTChDUChEMkRfTUNBRDE0KSwJKElFTiAgfCBQVEQgfCBFTiAgfCBNMCkpIC8qZDJkX21jYWQxNCovXAorIE1VWF9WQUwoQ1AoRDJEX01DQUQxNSksCShJRU4gIHwgUFREIHwgRU4gIHwgTTApKSAvKmQyZF9tY2FkMTUqL1wKKyBNVVhfVkFMKENQKEQyRF9NQ0FEMTYpLAkoSUVOICB8IFBURCB8IEVOICB8IE0wKSkgLypkMmRfbWNhZDE2Ki9cCisgTVVYX1ZBTChDUChEMkRfTUNBRDE3KSwJKElFTiAgfCBQVEQgfCBFTiAgfCBNMCkpIC8qZDJkX21jYWQxNyovXAorIE1VWF9WQUwoQ1AoRDJEX01DQUQxOCksCShJRU4gIHwgUFREIHwgRU4gIHwgTTApKSAvKmQyZF9tY2FkMTgqL1wKKyBNVVhfVkFMKENQKEQyRF9NQ0FEMTkpLAkoSUVOICB8IFBURCB8IEVOICB8IE0wKSkgLypkMmRfbWNhZDE5Ki9cCisgTVVYX1ZBTChDUChEMkRfTUNBRDIwKSwJKElFTiAgfCBQVEQgfCBFTiAgfCBNMCkpIC8qZDJkX21jYWQyMCovXAorIE1VWF9WQUwoQ1AoRDJEX01DQUQyMSksCShJRU4gIHwgUFREIHwgRU4gIHwgTTApKSAvKmQyZF9tY2FkMjEqL1wKKyBNVVhfVkFMKENQKEQyRF9NQ0FEMjIpLAkoSUVOICB8IFBURCB8IEVOICB8IE0wKSkgLypkMmRfbWNhZDIyKi9cCisgTVVYX1ZBTChDUChEMkRfTUNBRDIzKSwJKElFTiAgfCBQVEQgfCBFTiAgfCBNMCkpIC8qZDJkX21jYWQyMyovXAorIE1VWF9WQUwoQ1AoRDJEX01DQUQyNCksCShJRU4gIHwgUFREIHwgRU4gIHwgTTApKSAvKmQyZF9tY2FkMjQqL1wKKyBNVVhfVkFMKENQKEQyRF9NQ0FEMjUpLAkoSUVOICB8IFBURCB8IEVOICB8IE0wKSkgLypkMmRfbWNhZDI1Ki9cCisgTVVYX1ZBTChDUChEMkRfTUNBRDI2KSwJKElFTiAgfCBQVEQgfCBFTiAgfCBNMCkpIC8qZDJkX21jYWQyNiovXAorIE1VWF9WQUwoQ1AoRDJEX01DQUQyNyksCShJRU4gIHwgUFREIHwgRU4gIHwgTTApKSAvKmQyZF9tY2FkMjcqL1wKKyBNVVhfVkFMKENQKEQyRF9NQ0FEMjgpLAkoSUVOICB8IFBURCB8IEVOICB8IE0wKSkgLypkMmRfbWNhZDI4Ki9cCisgTVVYX1ZBTChDUChEMkRfTUNBRDI5KSwJKElFTiAgfCBQVEQgfCBFTiAgfCBNMCkpIC8qZDJkX21jYWQyOSovXAorIE1VWF9WQUwoQ1AoRDJEX01DQUQzMCksCShJRU4gIHwgUFREIHwgRU4gIHwgTTApKSAvKmQyZF9tY2FkMzAqL1wKKyBNVVhfVkFMKENQKEQyRF9NQ0FEMzEpLAkoSUVOICB8IFBURCB8IEVOICB8IE0wKSkgLypkMmRfbWNhZDMxKi9cCisgTVVYX1ZBTChDUChEMkRfTUNBRDMyKSwJKElFTiAgfCBQVEQgfCBFTiAgfCBNMCkpIC8qZDJkX21jYWQzMiovXAorIE1VWF9WQUwoQ1AoRDJEX01DQUQzMyksCShJRU4gIHwgUFREIHwgRU4gIHwgTTApKSAvKmQyZF9tY2FkMzMqL1wKKyBNVVhfVkFMKENQKEQyRF9NQ0FEMzQpLAkoSUVOICB8IFBURCB8IEVOICB8IE0wKSkgLypkMmRfbWNhZDM0Ki9cCisgTVVYX1ZBTChDUChEMkRfTUNBRDM1KSwJKElFTiAgfCBQVEQgfCBFTiAgfCBNMCkpIC8qZDJkX21jYWQzNSovXAorIE1VWF9WQUwoQ1AoRDJEX01DQUQzNiksCShJRU4gIHwgUFREIHwgRU4gIHwgTTApKSAvKmQyZF9tY2FkMzYqL1wKKyBNVVhfVkFMKENQKEQyRF9DTEsyNk1JKSwJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qZDJkX2NsazI2bWkqL1wKKyBNVVhfVkFMKENQKEQyRF9OUkVTUFdST04pLAkoSUVOICB8IFBURCB8IEVOICB8IE0wKSkgLypkMmRfbnJlc3B3cm9uKi9cCisgTVVYX1ZBTChDUChEMkRfTlJFU1dBUk0pLAkoSUVOICB8IFBUVSB8IEVOICB8IE0wKSkgLypkMmRfbnJlc3dhcm0qL1wKKyBNVVhfVkFMKENQKEQyRF9BUk05TklSUSksCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKmQyZF9hcm05bmlycSovXAorIE1VWF9WQUwoQ1AoRDJEX1VNQTJQNkZJUSksCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKmQyZF91bWEycDZmaXEqL1wKKyBNVVhfVkFMKENQKEQyRF9TUElOVCksCQkoSUVOICB8IFBURCB8IEVOICB8IE0wKSkgLypkMmRfc3BpbnQqL1wKKyBNVVhfVkFMKENQKEQyRF9GUklOVCksCQkoSUVOICB8IFBURCB8IEVOICB8IE0wKSkgLypkMmRfZnJpbnQqL1wKKyBNVVhfVkFMKENQKEQyRF9ETUFSRVEwKSwJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qZDJkX2RtYXJlcTAqL1wKKyBNVVhfVkFMKENQKEQyRF9ETUFSRVExKSwJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qZDJkX2RtYXJlcTEqL1wKKyBNVVhfVkFMKENQKEQyRF9ETUFSRVEyKSwJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qZDJkX2RtYXJlcTIqL1wKKyBNVVhfVkFMKENQKEQyRF9ETUFSRVEzKSwJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qZDJkX2RtYXJlcTMqL1wKKyBNVVhfVkFMKENQKEQyRF9OM0dUUlNUKSwJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qZDJkX24zZ3Ryc3QqL1wKKyBNVVhfVkFMKENQKEQyRF9OM0dUREkpLAkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypkMmRfbjNndGRpKi9cCisgTVVYX1ZBTChDUChEMkRfTjNHVERPKSwJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qZDJkX24zZ3RkbyovXAorIE1VWF9WQUwoQ1AoRDJEX04zR1RNUyksCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKmQyZF9uM2d0bXMqL1wKKyBNVVhfVkFMKENQKEQyRF9OM0dUQ0spLAkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypkMmRfbjNndGNrKi9cCisgTVVYX1ZBTChDUChEMkRfTjNHUlRDSyksCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKmQyZF9uM2dydGNrKi9cCisgTVVYX1ZBTChDUChEMkRfTVNUREJZKSwJKElFTiAgfCBQVFUgfCBFTiAgfCBNMCkpIC8qZDJkX21zdGRieSovXAorIE1VWF9WQUwoQ1AoRDJEX1NXQUtFVVApLAkoSUVOICB8IFBURCB8IEVOICB8IE0wKSkgLypkMmRfc3dha2V1cCovXAorIE1VWF9WQUwoQ1AoRDJEX0lETEVSRVEpLAkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypkMmRfaWRsZXJlcSovXAorIE1VWF9WQUwoQ1AoRDJEX0lETEVBQ0spLAkoSUVOICB8IFBUVSB8IEVOICB8IE0wKSkgLypkMmRfaWRsZWFjayovXAorIE1VWF9WQUwoQ1AoRDJEX01XUklURSksCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKmQyZF9td3JpdGUqL1wKKyBNVVhfVkFMKENQKEQyRF9TV1JJVEUpLAkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypkMmRfc3dyaXRlKi9cCisgTVVYX1ZBTChDUChEMkRfTVJFQUQpLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qZDJkX21yZWFkKi9cCisgTVVYX1ZBTChDUChEMkRfU1JFQUQpLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qZDJkX3NyZWFkKi9cCisgTVVYX1ZBTChDUChEMkRfTUJVU0ZMQUcpLAkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypkMmRfbWJ1c2ZsYWcqL1wKKyBNVVhfVkFMKENQKEQyRF9TQlVTRkxBRyksCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKmQyZF9zYnVzZmxhZyovXAorIE1VWF9WQUwoQ1AoU0RSQ19DS0UwKSwJCShJRElTIHwgUFRVIHwgRU4gIHwgTTApKSAvKnNkcmNfY2tlMCovXAorIE1VWF9WQUwoQ1AoU0RSQ19DS0UxKSwJCShJRElTIHwgUFREIHwgRElTIHwgTTcpKSAvKnNkcmNfY2tlMSovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYm9hcmQvb21hcDMvcGFuZG9yYS91LWJvb3QubGRzIGIvYm9hcmQvb21hcDMvcGFuZG9yYS91LWJvb3QubGRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5ZDhhYzkKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9vbWFwMy9wYW5kb3JhL3UtYm9vdC5sZHMKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIEphbnVhcnkgMjAwNCAtIENoYW5nZWQgdG8gc3VwcG9ydCBINCBkZXZpY2UKKyAqIENvcHlyaWdodCAoYykgMjAwNCBUZXhhcyBJbnN0cnVtZW50cworICoKKyAqIChDKSBDb3B5cmlnaHQgMjAwMgorICogR2FyeSBKZW5uZWpvaG4sIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIDxnakBkZW54LmRlPgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKK09VVFBVVF9GT1JNQVQoImVsZjMyLWxpdHRsZWFybSIsICJlbGYzMi1saXR0bGVhcm0iLCAiZWxmMzItbGl0dGxlYXJtIikKK09VVFBVVF9BUkNIKGFybSkKK0VOVFJZKF9zdGFydCkKK1NFQ1RJT05TCit7CisJLiA9IDB4MDAwMDAwMDA7CisKKwkuID0gQUxJR04oNCk7CisJLnRleHQJOgorCXsKKwkJY3B1L2FybV9jb3J0ZXhhOC9zdGFydC5vCSgudGV4dCkKKwkJKigudGV4dCkKKwl9CisKKwkuID0gQUxJR04oNCk7CisJLnJvZGF0YSA6IHsgKigucm9kYXRhKSB9CisKKwkuQVJNLmV4dGFiCTogeyAqKC5BUk0uZXh0YWIqIC5nbnUubGlua29uY2UuYXJtZXh0YWIuKikgfQorCV9fZXhpZHhfc3RhcnQgPSAuOworCS5BUk0uZXhpZHgJOiB7ICooLkFSTS5leGlkeCogLmdudS5saW5rb25jZS5hcm1leGlkeC4qKSB9CisJX19leGlkeF9lbmQgPSAuOworCisJLiA9IEFMSUdOKDQpOworCS5kYXRhIDogeyAqKC5kYXRhKSB9CisKKwkuID0gQUxJR04oNCk7CisJLmdvdCA6IHsgKiguZ290KSB9CisKKwlfX3VfYm9vdF9jbWRfc3RhcnQgPSAuOworCS51X2Jvb3RfY21kIDogeyAqKC51X2Jvb3RfY21kKSB9CisJX191X2Jvb3RfY21kX2VuZCA9IC47CisKKwkuID0gQUxJR04oNCk7CisJX19ic3Nfc3RhcnQgPSAuOworCS5ic3MgOiB7ICooLmJzcykgfQorCV9lbmQgPSAuOworfQpkaWZmIC0tZ2l0IGEvYm9hcmQvb21hcDMvem9vbTEvTWFrZWZpbGUgYi9ib2FyZC9vbWFwMy96b29tMS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTg3ZjE3Ci0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvb21hcDMvem9vbTEvTWFrZWZpbGUKQEAgLTAsMCArMSw0OSBAQAorIworIyAoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDEsIDIwMDIKKyMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KKyMKKyMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyMgcHJvamVjdC4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorIyB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorIyBNQSAwMjExMS0xMzA3IFVTQQorIworCitpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKKworTElCCT0gJChvYmopbGliJChCT0FSRCkuYQorCitDT0JKUwk6PSB6b29tMS5vCisKK1NSQ1MJOj0gJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQorCiskKExJQik6CSQob2JqKS5kZXBlbmQgJChPQkpTKQorCSQoQVIpICQoQVJGTEFHUykgJEAgJChPQkpTKQorCitjbGVhbjoKKwlybSAtZiAkKE9CSlMpCisKK2Rpc3RjbGVhbjoJY2xlYW4KKwlybSAtZiAkKExJQikgY29yZSAqLmJhayAkKG9iaikuZGVwZW5kCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKKworc2luY2x1ZGUgJChvYmopLmRlcGVuZAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC9vbWFwMy96b29tMS9jb25maWcubWsgYi9ib2FyZC9vbWFwMy96b29tMS9jb25maWcubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzM0NzQ5NwotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL29tYXAzL3pvb20xL2NvbmZpZy5tawpAQCAtMCwwICsxLDMzIEBACisjCisjIChDKSBDb3B5cmlnaHQgMjAwNi0yMDA4CisjIFRleGFzIEluc3RydW1lbnRzLCA8d3d3LnRpLmNvbT4KKyMKKyMgWm9vbSBNREsgdXNlcyBPTUFQMyAoQVJNLUNvcnRleEE4KSBjcHUKKyMgc2VlIGh0dHA6Ly93d3cudGkuY29tLyBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBUZXhhcyBJbnN0cnVtZW50cworIworIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworIyBwcm9qZWN0LgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisjIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisjIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisjIE1BIDAyMTExLTEzMDcgVVNBCisjCisjIFBoeXNpY2FsIEFkZHJlc3M6CisjIDgwMDAnMDAwMCAoYmFuazApCisjIEEwMDAvMDAwMCAoYmFuazEpCisjIExpbnV4LUtlcm5lbCBpcyBleHBlY3RlZCB0byBiZSBhdCA4MDAwJzgwMDAsIGVudHJ5IDgwMDAnODAwMAorIyAobWVtIGJhc2UgKyByZXNlcnZlZCkKKworIyBGb3IgdXNlIHdpdGggZXh0ZXJuYWwgb3IgaW50ZXJuYWwgYm9vdHMuCitURVhUX0JBU0UgPSAweDgwZTgwMDAwCmRpZmYgLS1naXQgYS9ib2FyZC9vbWFwMy96b29tMS91LWJvb3QubGRzIGIvYm9hcmQvb21hcDMvem9vbTEvdS1ib290LmxkcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTA0N2MzCi0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvb21hcDMvem9vbTEvdS1ib290LmxkcwpAQCAtMCwwICsxLDYzIEBACisvKgorICogSmFudWFyeSAyMDA0IC0gQ2hhbmdlZCB0byBzdXBwb3J0IEg0IGRldmljZQorICogQ29weXJpZ2h0IChjKSAyMDA0LTIwMDggVGV4YXMgSW5zdHJ1bWVudHMKKyAqCisgKiAoQykgQ29weXJpZ2h0IDIwMDIKKyAqIEdhcnkgSmVubmVqb2huLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCA8Z2pAZGVueC5kZT4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKK09VVFBVVF9GT1JNQVQoImVsZjMyLWxpdHRsZWFybSIsICJlbGYzMi1saXR0bGVhcm0iLCAiZWxmMzItbGl0dGxlYXJtIikKK09VVFBVVF9BUkNIKGFybSkKK0VOVFJZKF9zdGFydCkKK1NFQ1RJT05TCit7CisJLiA9IDB4MDAwMDAwMDA7CisKKwkuID0gQUxJR04oNCk7CisJLnRleHQJOgorCXsKKwkJY3B1L2FybV9jb3J0ZXhhOC9zdGFydC5vCSgudGV4dCkKKwkJKigudGV4dCkKKwl9CisKKwkuID0gQUxJR04oNCk7CisJLnJvZGF0YSA6IHsgKigucm9kYXRhKSB9CisKKwkuQVJNLmV4dGFiCTogeyAqKC5BUk0uZXh0YWIqIC5nbnUubGlua29uY2UuYXJtZXh0YWIuKikgfQorCV9fZXhpZHhfc3RhcnQgPSAuOworCS5BUk0uZXhpZHgJOiB7ICooLkFSTS5leGlkeCogLmdudS5saW5rb25jZS5hcm1leGlkeC4qKSB9CisJX19leGlkeF9lbmQgPSAuOworCisJLiA9IEFMSUdOKDQpOworCS5kYXRhIDogeyAqKC5kYXRhKSB9CisKKwkuID0gQUxJR04oNCk7CisJLmdvdCA6IHsgKiguZ290KSB9CisKKwlfX3VfYm9vdF9jbWRfc3RhcnQgPSAuOworCS51X2Jvb3RfY21kIDogeyAqKC51X2Jvb3RfY21kKSB9CisJX191X2Jvb3RfY21kX2VuZCA9IC47CisKKwkuID0gQUxJR04oNCk7CisJX19ic3Nfc3RhcnQgPSAuOworCS5ic3MgOiB7ICooLmJzcykgfQorCV9lbmQgPSAuOworfQpkaWZmIC0tZ2l0IGEvYm9hcmQvb21hcDMvem9vbTEvem9vbTEuYyBiL2JvYXJkL29tYXAzL3pvb20xL3pvb20xLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDY3YWJmNwotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL29tYXAzL3pvb20xL3pvb20xLmMKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwNC0yMDA4CisgKiBUZXhhcyBJbnN0cnVtZW50cywgPHd3dy50aS5jb20+CisgKgorICogQXV0aG9yIDoKKyAqCU5pc2hhbnRoIE1lbm9uIDxubUB0aS5jb20+CisgKgorICogRGVyaXZlZCBmcm9tIEJlYWdsZSBCb2FyZCBhbmQgMzQzMCBTRFAgY29kZSBieQorICoJU3VuaWwgS3VtYXIgPHN1bmlsc2FpbmkwNUBnbWFpbC5jb20+CisgKglTaGFzaGkgUmFuamFuIDxzaGFzaGlyYW5qYW5tY2EwNUBnbWFpbC5jb20+CisgKglSaWNoYXJkIFdvb2RydWZmIDxyLXdvb2RydWZmMkB0aS5jb20+CisgKglTeWVkIE1vaGFtbWVkIEtoYXNpbSA8a2hhc2ltQHRpLmNvbT4KKyAqCisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL211eC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3N5c19wcm90by5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSAiem9vbTEuaCIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUm91dGluZTogYm9hcmRfaW5pdAorICogRGVzY3JpcHRpb246IEVhcmx5IGhhcmR3YXJlIGluaXQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQgYm9hcmRfaW5pdCh2b2lkKQoreworCURFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOworCisJZ3BtY19pbml0KCk7IC8qIGluIFNSQU0gb3IgU0RSQU0sIGZpbmlzaCBHUE1DICovCisJLyogYm9hcmQgaWQgZm9yIExpbnV4ICovCisJZ2QtPmJkLT5iaV9hcmNoX251bWJlciA9IE1BQ0hfVFlQRV9PTUFQX0xEUDsKKwkvKiBib290IHBhcmFtIGFkZHIgKi8KKwlnZC0+YmQtPmJpX2Jvb3RfcGFyYW1zID0gKE9NQVAzNFhYX1NEUkNfQ1MwICsgMHgxMDApOworCisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFJvdXRpbmU6IG1pc2NfaW5pdF9yCisgKiBEZXNjcmlwdGlvbjogQ29uZmlndXJlIHpvb20gYm9hcmQgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ludCBtaXNjX2luaXRfcih2b2lkKQoreworCXBvd2VyX2luaXRfcigpOworCXJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBSb3V0aW5lOiBzZXRfbXV4Y29uZl9yZWdzCisgKiBEZXNjcmlwdGlvbjogU2V0dGluZyB1cCB0aGUgY29uZmlndXJhdGlvbiBNdXggcmVnaXN0ZXJzIHNwZWNpZmljIHRvIHRoZQorICoJCWhhcmR3YXJlLiBNYW55IHBpbnMgbmVlZCB0byBiZSBtb3ZlZCBmcm9tIHByb3RlY3QgdG8gcHJpbWFyeQorICoJCW1vZGUuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIHNldF9tdXhjb25mX3JlZ3Modm9pZCkKK3sKKwkvKiBwbGF0Zm9ybSBzcGVjaWZpYyBtdXhlcyAqLworCU1VWF9aT09NMV9NREsoKTsKK30KZGlmZiAtLWdpdCBhL2JvYXJkL29tYXAzL3pvb20xL3pvb20xLmggYi9ib2FyZC9vbWFwMy96b29tMS96b29tMS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzODk0OTIKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9vbWFwMy96b29tMS96b29tMS5oCkBAIC0wLDAgKzEsMTM1IEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDA4CisgKiBUZXhhcyBJbnN0cnVtZW50cworICogTmlzaGFudGggTWVub24gPG5tQHRpLmNvbT4KKyAqCisgKiBEZXJpdmVkIGZyb206IGJvYXJkL29tYXAzL2JlYWdsZS9iZWFnbGUuaAorICogRGlyayBCZWhtZSA8ZGlyay5iZWhtZUBnbWFpbC5jb20+CisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworI2lmbmRlZiBfQk9BUkRfWk9PTTFfSF8KKyNkZWZpbmUgX0JPQVJEX1pPT00xX0hfCisKK2NvbnN0IG9tYXAzX3N5c2luZm8gc3lzaW5mbyA9IHsKKwlTRFBfMzQzMF9WMSwKKwlTRFBfMzQzMF9WMiwKKwlERFJfU1RBQ0tFRCwKKwkiMzQzMCIsCisJIk9NQVAzIFpvb20gTURLIFJldiAxIiwKKwkiTkFORCIsCit9OworCisvKgorICogSUVOCS0gSW5wdXQgRW5hYmxlCisgKiBJRElTCS0gSW5wdXQgRGlzYWJsZQorICogUFRECS0gUHVsbCB0eXBlIERvd24KKyAqIFBUVQktIFB1bGwgdHlwZSBVcAorICogRElTCS0gUHVsbCB0eXBlIHNlbGVjdGlvbiBpcyBpbmFjdGl2ZQorICogRU4JLSBQdWxsIHR5cGUgc2VsZWN0aW9uIGlzIGFjdGl2ZQorICogTTAJLSBNb2RlIDAKKyAqIFRoZSBjb21tZW50ZWQgc3RyaW5nIGdpdmVzIHRoZSBmaW5hbCBtdXggY29uZmlndXJhdGlvbiBmb3IgdGhhdCBwaW4KKyAqLworI2RlZmluZSBNVVhfWk9PTTFfTURLKCkgXAorIC8qU0RSQyovXAorIE1VWF9WQUwoQ1AoU0RSQ19EMCksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypTRFJDX0QwKi9cCisgTVVYX1ZBTChDUChTRFJDX0QxKSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKlNEUkNfRDEqL1wKKyBNVVhfVkFMKENQKFNEUkNfRDIpLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qU0RSQ19EMiovXAorIE1VWF9WQUwoQ1AoU0RSQ19EMyksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypTRFJDX0QzKi9cCisgTVVYX1ZBTChDUChTRFJDX0Q0KSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKlNEUkNfRDQqL1wKKyBNVVhfVkFMKENQKFNEUkNfRDUpLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qU0RSQ19ENSovXAorIE1VWF9WQUwoQ1AoU0RSQ19ENiksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypTRFJDX0Q2Ki9cCisgTVVYX1ZBTChDUChTRFJDX0Q3KSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKlNEUkNfRDcqL1wKKyBNVVhfVkFMKENQKFNEUkNfRDgpLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qU0RSQ19EOCovXAorIE1VWF9WQUwoQ1AoU0RSQ19EOSksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypTRFJDX0Q5Ki9cCisgTVVYX1ZBTChDUChTRFJDX0QxMCksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypTRFJDX0QxMCovXAorIE1VWF9WQUwoQ1AoU0RSQ19EMTEpLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qU0RSQ19EMTEqL1wKKyBNVVhfVkFMKENQKFNEUkNfRDEyKSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKlNEUkNfRDEyKi9cCisgTVVYX1ZBTChDUChTRFJDX0QxMyksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypTRFJDX0QxMyovXAorIE1VWF9WQUwoQ1AoU0RSQ19EMTQpLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qU0RSQ19EMTQqL1wKKyBNVVhfVkFMKENQKFNEUkNfRDE1KSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKlNEUkNfRDE1Ki9cCisgTVVYX1ZBTChDUChTRFJDX0QxNiksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypTRFJDX0QxNiovXAorIE1VWF9WQUwoQ1AoU0RSQ19EMTcpLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qU0RSQ19EMTcqL1wKKyBNVVhfVkFMKENQKFNEUkNfRDE4KSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKlNEUkNfRDE4Ki9cCisgTVVYX1ZBTChDUChTRFJDX0QxOSksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypTRFJDX0QxOSovXAorIE1VWF9WQUwoQ1AoU0RSQ19EMjApLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qU0RSQ19EMjAqL1wKKyBNVVhfVkFMKENQKFNEUkNfRDIxKSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKlNEUkNfRDIxKi9cCisgTVVYX1ZBTChDUChTRFJDX0QyMiksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypTRFJDX0QyMiovXAorIE1VWF9WQUwoQ1AoU0RSQ19EMjMpLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qU0RSQ19EMjMqL1wKKyBNVVhfVkFMKENQKFNEUkNfRDI0KSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKlNEUkNfRDI0Ki9cCisgTVVYX1ZBTChDUChTRFJDX0QyNSksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypTRFJDX0QyNSovXAorIE1VWF9WQUwoQ1AoU0RSQ19EMjYpLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qU0RSQ19EMjYqL1wKKyBNVVhfVkFMKENQKFNEUkNfRDI3KSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKlNEUkNfRDI3Ki9cCisgTVVYX1ZBTChDUChTRFJDX0QyOCksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypTRFJDX0QyOCovXAorIE1VWF9WQUwoQ1AoU0RSQ19EMjkpLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qU0RSQ19EMjkqL1wKKyBNVVhfVkFMKENQKFNEUkNfRDMwKSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKlNEUkNfRDMwKi9cCisgTVVYX1ZBTChDUChTRFJDX0QzMSksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypTRFJDX0QzMSovXAorIE1VWF9WQUwoQ1AoU0RSQ19DTEspLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qU0RSQ19DTEsqL1wKKyBNVVhfVkFMKENQKFNEUkNfRFFTMCksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypTRFJDX0RRUzAqL1wKKyBNVVhfVkFMKENQKFNEUkNfRFFTMSksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypTRFJDX0RRUzEqL1wKKyBNVVhfVkFMKENQKFNEUkNfRFFTMiksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypTRFJDX0RRUzIqL1wKKyBNVVhfVkFMKENQKFNEUkNfRFFTMyksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypTRFJDX0RRUzMqL1wKKyAvKkdQTUMqL1wKKyBNVVhfVkFMKENQKEdQTUNfQTEpLAkJKElESVMgfCBQVEQgfCBESVMgfCBNMCkpIC8qR1BNQ19BMSovXAorIE1VWF9WQUwoQ1AoR1BNQ19BMiksCQkoSURJUyB8IFBURCB8IERJUyB8IE0wKSkgLypHUE1DX0EyKi9cCisgTVVYX1ZBTChDUChHUE1DX0EzKSwJCShJRElTIHwgUFREIHwgRElTIHwgTTApKSAvKkdQTUNfQTMqL1wKKyBNVVhfVkFMKENQKEdQTUNfQTQpLAkJKElESVMgfCBQVEQgfCBESVMgfCBNMCkpIC8qR1BNQ19BNCovXAorIE1VWF9WQUwoQ1AoR1BNQ19BNSksCQkoSURJUyB8IFBURCB8IERJUyB8IE0wKSkgLypHUE1DX0E1Ki9cCisgTVVYX1ZBTChDUChHUE1DX0E2KSwJCShJRElTIHwgUFREIHwgRElTIHwgTTApKSAvKkdQTUNfQTYqL1wKKyBNVVhfVkFMKENQKEdQTUNfQTcpLAkJKElESVMgfCBQVEQgfCBESVMgfCBNMCkpIC8qR1BNQ19BNyovXAorIE1VWF9WQUwoQ1AoR1BNQ19BOCksCQkoSURJUyB8IFBURCB8IERJUyB8IE0wKSkgLypHUE1DX0E4Ki9cCisgTVVYX1ZBTChDUChHUE1DX0E5KSwJCShJRElTIHwgUFREIHwgRElTIHwgTTApKSAvKkdQTUNfQTkqL1wKKyBNVVhfVkFMKENQKEdQTUNfQTEwKSwJCShJRElTIHwgUFREIHwgRElTIHwgTTApKSAvKkdQTUNfQTEwKi9cCisgTVVYX1ZBTChDUChHUE1DX0QwKSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKkdQTUNfRDAqL1wKKyBNVVhfVkFMKENQKEdQTUNfRDEpLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qR1BNQ19EMSovXAorIE1VWF9WQUwoQ1AoR1BNQ19EMiksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypHUE1DX0QyKi9cCisgTVVYX1ZBTChDUChHUE1DX0QzKSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKkdQTUNfRDMqL1wKKyBNVVhfVkFMKENQKEdQTUNfRDQpLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qR1BNQ19ENCovXAorIE1VWF9WQUwoQ1AoR1BNQ19ENSksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypHUE1DX0Q1Ki9cCisgTVVYX1ZBTChDUChHUE1DX0Q2KSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKkdQTUNfRDYqL1wKKyBNVVhfVkFMKENQKEdQTUNfRDcpLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qR1BNQ19ENyovXAorIE1VWF9WQUwoQ1AoR1BNQ19EOCksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypHUE1DX0Q4Ki9cCisgTVVYX1ZBTChDUChHUE1DX0Q5KSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKkdQTUNfRDkqL1wKKyBNVVhfVkFMKENQKEdQTUNfRDEwKSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKkdQTUNfRDEwKi9cCisgTVVYX1ZBTChDUChHUE1DX0QxMSksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypHUE1DX0QxMSovXAorIE1VWF9WQUwoQ1AoR1BNQ19EMTIpLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qR1BNQ19EMTIqL1wKKyBNVVhfVkFMKENQKEdQTUNfRDEzKSwJCShJRU4gIHwgUFREIHwgRElTIHwgTTApKSAvKkdQTUNfRDEzKi9cCisgTVVYX1ZBTChDUChHUE1DX0QxNCksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypHUE1DX0QxNCovXAorIE1VWF9WQUwoQ1AoR1BNQ19EMTUpLAkJKElFTiAgfCBQVEQgfCBESVMgfCBNMCkpIC8qR1BNQ19EMTUqL1wKKyBNVVhfVkFMKENQKEdQTUNfTkNTMCksCQkoSURJUyB8IFBUVSB8IEVOICB8IE0wKSkgLypHUE1DX25DUzAqL1wKKyBNVVhfVkFMKENQKEdQTUNfTkNTMSksCQkoSURJUyB8IFBUVSB8IEVOICB8IE03KSkgLypHUE1DX25DUzEqL1wKKyBNVVhfVkFMKENQKEdQTUNfTkNTMiksCQkoSURJUyB8IFBUVSB8IEVOICB8IE03KSkgLypHUE1DX25DUzIqL1wKKyBNVVhfVkFMKENQKEdQTUNfTkNTMyksCQkoSURJUyB8IFBUVSB8IEVOICB8IE03KSkgLypHUE1DX25DUzMqL1wKKyBNVVhfVkFMKENQKEdQTUNfTkNTNCksCQkoSURJUyB8IFBUVSB8IEVOICB8IE03KSkgLypHUE1DX25DUzQqL1wKKyBNVVhfVkFMKENQKEdQTUNfTkNTNSksCQkoSURJUyB8IFBURCB8IERJUyB8IE03KSkgLypHUE1DX25DUzUqL1wKKyBNVVhfVkFMKENQKEdQTUNfTkNTNiksCQkoSUVOICB8IFBURCB8IERJUyB8IE03KSkgLypHUE1DX25DUzYqL1wKKyBNVVhfVkFMKENQKEdQTUNfTkNTNyksCQkoSUVOICB8IFBUVSB8IEVOICB8IE03KSkgLypHUE1DX25DUzcqL1wKKyBNVVhfVkFMKENQKEdQTUNfQ0xLKSwJCShJRElTIHwgUFREIHwgRElTIHwgTTApKSAvKkdQTUNfQ0xLKi9cCisgTVVYX1ZBTChDUChHUE1DX05BRFZfQUxFKSwJKElESVMgfCBQVEQgfCBESVMgfCBNMCkpIC8qR1BNQ19uQURWX0FMRSovXAorIE1VWF9WQUwoQ1AoR1BNQ19OT0UpLAkJKElESVMgfCBQVEQgfCBESVMgfCBNMCkpIC8qR1BNQ19uT0UqL1wKKyBNVVhfVkFMKENQKEdQTUNfTldFKSwJCShJRElTIHwgUFREIHwgRElTIHwgTTApKSAvKkdQTUNfbldFKi9cCisgTVVYX1ZBTChDUChHUE1DX05XUCksCQkoSURJUyB8IFBUVSB8IERJUyB8IE0wKSkgLypHUE1DX25XUCovXAorIE1VWF9WQUwoQ1AoR1BNQ19OQkUwX0NMRSksCShJRElTIHwgUFREIHwgRElTIHwgTTApKSAvKkdQTUNfbkJFMF9DTEUqL1wKKyBNVVhfVkFMKENQKEdQTUNfTkJFMSksCQkoSUVOICB8IFBURCB8IERJUyB8IE0wKSkgLypHUE1DX25CRTEqL1wKKyBNVVhfVkFMKENQKEdQTUNfV0FJVDApLAkoSUVOICB8IFBURCB8IEVOICB8IE0wKSkgLypHUE1DX1dBSVQwKi9cCisgTVVYX1ZBTChDUChHUE1DX1dBSVQxKSwJKElFTiAgfCBQVFUgfCBFTiAgfCBNMCkpIC8qR1BNQ19XQUlUMSovXAorIE1VWF9WQUwoQ1AoR1BNQ19XQUlUMiksCShJRU4gIHwgUFRVIHwgRU4gIHwgTTApKSAvKkdQTUNfV0FJVDIqL1wKKyBNVVhfVkFMKENQKEdQTUNfV0FJVDMpLAkoSUVOICB8IFBUVSB8IEVOICB8IE0wKSkgLypHUE1DX1dBSVQzKi8KKworI2VuZGlmIC8qIF9CT0FSRF9aT09NX0hfICovCmRpZmYgLS1naXQgYS9ib2FyZC9zbWRrMjQwMC9NYWtlZmlsZSBiL2JvYXJkL3NhbXN1bmcvc21kazI0MDAvTWFrZWZpbGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGJvYXJkL3NtZGsyNDAwL01ha2VmaWxlCnJlbmFtZSB0byBib2FyZC9zYW1zdW5nL3NtZGsyNDAwL01ha2VmaWxlCmRpZmYgLS1naXQgYS9ib2FyZC9zbWRrMjQwMC9jb25maWcubWsgYi9ib2FyZC9zYW1zdW5nL3NtZGsyNDAwL2NvbmZpZy5tawpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYm9hcmQvc21kazI0MDAvY29uZmlnLm1rCnJlbmFtZSB0byBib2FyZC9zYW1zdW5nL3NtZGsyNDAwL2NvbmZpZy5tawpkaWZmIC0tZ2l0IGEvYm9hcmQvc21kazI0MDAvZmxhc2guYyBiL2JvYXJkL3NhbXN1bmcvc21kazI0MDAvZmxhc2guYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYm9hcmQvc21kazI0MDAvZmxhc2guYwpyZW5hbWUgdG8gYm9hcmQvc2Ftc3VuZy9zbWRrMjQwMC9mbGFzaC5jCmRpZmYgLS1naXQgYS9ib2FyZC9zbWRrMjQwMC9sb3dsZXZlbF9pbml0LlMgYi9ib2FyZC9zYW1zdW5nL3NtZGsyNDAwL2xvd2xldmVsX2luaXQuUwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYm9hcmQvc21kazI0MDAvbG93bGV2ZWxfaW5pdC5TCnJlbmFtZSB0byBib2FyZC9zYW1zdW5nL3NtZGsyNDAwL2xvd2xldmVsX2luaXQuUwpkaWZmIC0tZ2l0IGEvYm9hcmQvc21kazI0MDAvc21kazI0MDAuYyBiL2JvYXJkL3NhbXN1bmcvc21kazI0MDAvc21kazI0MDAuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYm9hcmQvc21kazI0MDAvc21kazI0MDAuYwpyZW5hbWUgdG8gYm9hcmQvc2Ftc3VuZy9zbWRrMjQwMC9zbWRrMjQwMC5jCmRpZmYgLS1naXQgYS9ib2FyZC9zbWRrMjQwMC91LWJvb3QubGRzIGIvYm9hcmQvc2Ftc3VuZy9zbWRrMjQwMC91LWJvb3QubGRzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBib2FyZC9zbWRrMjQwMC91LWJvb3QubGRzCnJlbmFtZSB0byBib2FyZC9zYW1zdW5nL3NtZGsyNDAwL3UtYm9vdC5sZHMKZGlmZiAtLWdpdCBhL2JvYXJkL3NtZGsyNDEwL01ha2VmaWxlIGIvYm9hcmQvc2Ftc3VuZy9zbWRrMjQxMC9NYWtlZmlsZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYm9hcmQvc21kazI0MTAvTWFrZWZpbGUKcmVuYW1lIHRvIGJvYXJkL3NhbXN1bmcvc21kazI0MTAvTWFrZWZpbGUKZGlmZiAtLWdpdCBhL2JvYXJkL3NtZGsyNDEwL2NvbmZpZy5tayBiL2JvYXJkL3NhbXN1bmcvc21kazI0MTAvY29uZmlnLm1rCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBib2FyZC9zbWRrMjQxMC9jb25maWcubWsKcmVuYW1lIHRvIGJvYXJkL3NhbXN1bmcvc21kazI0MTAvY29uZmlnLm1rCmRpZmYgLS1naXQgYS9ib2FyZC9zbWRrMjQxMC9mbGFzaC5jIGIvYm9hcmQvc2Ftc3VuZy9zbWRrMjQxMC9mbGFzaC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBib2FyZC9zbWRrMjQxMC9mbGFzaC5jCnJlbmFtZSB0byBib2FyZC9zYW1zdW5nL3NtZGsyNDEwL2ZsYXNoLmMKZGlmZiAtLWdpdCBhL2JvYXJkL3NtZGsyNDEwL2xvd2xldmVsX2luaXQuUyBiL2JvYXJkL3NhbXN1bmcvc21kazI0MTAvbG93bGV2ZWxfaW5pdC5TCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBib2FyZC9zbWRrMjQxMC9sb3dsZXZlbF9pbml0LlMKcmVuYW1lIHRvIGJvYXJkL3NhbXN1bmcvc21kazI0MTAvbG93bGV2ZWxfaW5pdC5TCmRpZmYgLS1naXQgYS9ib2FyZC9zbWRrMjQxMC9zbWRrMjQxMC5jIGIvYm9hcmQvc2Ftc3VuZy9zbWRrMjQxMC9zbWRrMjQxMC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBib2FyZC9zbWRrMjQxMC9zbWRrMjQxMC5jCnJlbmFtZSB0byBib2FyZC9zYW1zdW5nL3NtZGsyNDEwL3NtZGsyNDEwLmMKZGlmZiAtLWdpdCBhL2JvYXJkL3NtZGsyNDEwL3UtYm9vdC5sZHMgYi9ib2FyZC9zYW1zdW5nL3NtZGsyNDEwL3UtYm9vdC5sZHMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGJvYXJkL3NtZGsyNDEwL3UtYm9vdC5sZHMKcmVuYW1lIHRvIGJvYXJkL3NhbXN1bmcvc21kazI0MTAvdS1ib290LmxkcwpkaWZmIC0tZ2l0IGEvYm9hcmQvc3Qvbm1kazg4MTUvTWFrZWZpbGUgYi9ib2FyZC9zdC9ubWRrODgxNS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTlhNDI0Ci0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvc3Qvbm1kazg4MTUvTWFrZWZpbGUKQEAgLTAsMCArMSw1NSBAQAorIworIyAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNAorIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgorIworIyAoQykgQ29weXJpZ2h0IDIwMDQKKyMgQVJNIEx0ZC4KKyMgUGhpbGlwcGUgUm9iaW4sIDxwaGlsaXBwZS5yb2JpbkBhcm0uY29tPgorIworIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworIyBwcm9qZWN0LgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisjIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisjIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorIyBNQSAwMjExMS0xMzA3IFVTQQorIworCitpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKKworTElCCT0gJChvYmopbGliJChCT0FSRCkuYQorCitDT0JKUwk6PSBubWRrODgxNS5vCitTT0JKUwk6PSBwbGF0Zm9ybS5vCisKK1NSQ1MJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQorU09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpKQorCiskKExJQik6ICQob2JqKS5kZXBlbmQgJChPQkpTKSAkKFNPQkpTKQorCSQoQVIpICQoQVJGTEFHUykgJEAgJChPQkpTKSAkKFNPQkpTKQorCitjbGVhbjoKKwlybSAtZiAkKFNPQkpTKSAkKE9CSlMpCisKK2Rpc3RjbGVhbjoJY2xlYW4KKwlybSAtZiAkKExJQikgY29yZSAqLmJhayAkKG9iaikuZGVwZW5kCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKKworc2luY2x1ZGUgJChvYmopLmRlcGVuZAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC9zdC9ubWRrODgxNS9jb25maWcubWsgYi9ib2FyZC9zdC9ubWRrODgxNS9jb25maWcubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTkwMzkzYgotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL3N0L25tZGs4ODE1L2NvbmZpZy5tawpAQCAtMCwwICsxLDI2IEBACisjIChDKSBDb3B5cmlnaHQgMjAwNworIyBTVE1pY3JvZWxlY3Ryb25pY3MsIDx3d3cuc3QuY29tPgorIworIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworIyBwcm9qZWN0LgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisjIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisjIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorIyBNQSAwMjExMS0xMzA3IFVTQQorIworIworIyBpbWFnZSBzaG91bGQgYmUgbG9hZGVkIGF0IDB4MDEwMDAwMDAKKyMKKworVEVYVF9CQVNFID0gMHgwM0Y4MDAwMApkaWZmIC0tZ2l0IGEvYm9hcmQvc3Qvbm1kazg4MTUvbm1kazg4MTUuYyBiL2JvYXJkL3N0L25tZGs4ODE1L25tZGs4ODE1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzU0ZWFjMQotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL3N0L25tZGs4ODE1L25tZGs4ODE1LmMKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwNQorICogU1RNaWNyb2xlbGN0cm9uaWNzLCA8d3d3LnN0LmNvbT4KKyAqCisgKiAoQykgQ29weXJpZ2h0IDIwMDQKKyAqIEFSTSBMdGQuCisgKiBQaGlsaXBwZSBSb2JpbiwgPHBoaWxpcHBlLnJvYmluQGFybS5jb20+CisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorCitERUNMQVJFX0dMT0JBTF9EQVRBX1BUUjsKKworI2lmZGVmIENPTkZJR19TSE9XX0JPT1RfUFJPR1JFU1MKK3ZvaWQgc2hvd19ib290X3Byb2dyZXNzKGludCBwcm9ncmVzcykKK3sKKwlwcmludGYoIiVpXG4iLCBwcm9ncmVzcyk7Cit9CisjZW5kaWYKKworLyoKKyAqIE1pc2NlbGxhbmVvdXMgcGxhdGZvcm0gZGVwZW5kZW50IGluaXRpYWxpc2F0aW9ucworICovCitpbnQgYm9hcmRfaW5pdCh2b2lkKQoreworCWdkLT5iZC0+YmlfYXJjaF9udW1iZXIgPSBNQUNIX1RZUEVfTk9NQURJSzsKKwlnZC0+YmQtPmJpX2Jvb3RfcGFyYW1zID0gMHgwMDAwMDEwMDsKKwl3cml0ZWwoMHhDMzc4MDBGMCwgTk9NQURJS19HUElPMV9CQVNFICsgMHgyMCk7CisJd3JpdGVsKDB4MDAwMDAwMDAsIE5PTUFESUtfR1BJTzFfQkFTRSArIDB4MjQpOworCXdyaXRlbCgweDAwMDAwMDAwLCBOT01BRElLX0dQSU8xX0JBU0UgKyAweDI4KTsKKwl3cml0ZWwocmVhZGwoTk9NQURJS19TUkNfQkFTRSkgfCAweDgwMDAsIE5PTUFESUtfU1JDX0JBU0UpOworCisJaWNhY2hlX2VuYWJsZSgpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBtaXNjX2luaXRfcih2b2lkKQoreworCXNldGVudigidmVyaWZ5IiwgIm4iKTsKKwlyZXR1cm4gMDsKK30KKworaW50IGRyYW1faW5pdCh2b2lkKQoreworCS8qIHNldCBkcmFtIGJhbmsgc3RhcnQgYWRkciBhbmQgc2l6ZSAqLworCWdkLT5iZC0+YmlfZHJhbVswXS5zdGFydCA9IFBIWVNfU0RSQU1fMTsKKwlnZC0+YmQtPmJpX2RyYW1bMF0uc2l6ZSA9IFBIWVNfU0RSQU1fMV9TSVpFOworCisJZ2QtPmJkLT5iaV9kcmFtWzFdLnN0YXJ0ID0gUEhZU19TRFJBTV8yOworCWdkLT5iZC0+YmlfZHJhbVsxXS5zaXplID0gUEhZU19TRFJBTV8yX1NJWkU7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9ib2FyZC9zdC9ubWRrODgxNS9wbGF0Zm9ybS5TIGIvYm9hcmQvc3Qvbm1kazg4MTUvcGxhdGZvcm0uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTY3MTEwCi0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvc3Qvbm1kazg4MTUvcGxhdGZvcm0uUwpAQCAtMCwwICsxLDM0MCBAQAorLyoKKyAqIEJvYXJkIHNwZWNpZmljIHNldHVwIGluZm8KKyAqCisgKiAoQykgQ29weXJpZ2h0IDIwMDUKKyAqIFNUTWljcm9sZWxjdHJvbmljcywgPHd3dy5zdC5jb20+CisgKgorICogKEMpIENvcHlyaWdodCAyMDA0LCBBUk0gTHRkLgorICogUGhpbGlwcGUgUm9iaW4sIDxwaGlsaXBwZS5yb2JpbkBhcm0uY29tPgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNpbmNsdWRlIDx2ZXJzaW9uLmg+CisKKy5nbG9ibCBsb3dsZXZlbF9pbml0Citsb3dsZXZlbF9pbml0OgorCS8qIEp1bXAgdG8gdGhlIGZsYXNoIGFkZHJlc3MgKi8KKwlsZHIgcjAsID1DRkdfT05FTkFORF9CQVNFCisKKwkvKgorCSAqIE1ha2UgaXQgaW5kZXBlbmRlbnQgd2hldGhlciB3ZSBib290IGZyb20gMHgwIG9yIDB4MzAwMDAwMDAuCisJICogTm9uLXBvcnRhYmxlOiBpdCByZWxpZXMgb24gdGhlIGtub3dsZWRnZSB0aGF0IGlwIGhhcyB0byBiZSB1cGRhdGVkCisJICovCisJb3JyIGlwLCBpcCwgcjAJLyogYWRqdXN0IHJldHVybiBhZGRyZXNzIG9mIGNwdV9pbml0X2NyaXQgKi8KKwlvcnIgbHIsIGxyLCByMAkvKiBhZGp1c3QgcmV0dXJuIGFkZHJlc3MgKi8KKwlvcnIgcGMsIHBjLCByMAkvKiBqdW1wIHRvIHRoZSBub3JtYWwgYWRkcmVzcyAqLworCW5vcAorCisJLyogSW5pdGlhbGl6ZSBQTEwsIFJlbWFwIGNsZWFyLCBGU01DLCBNUE1DIGhlcmUhICovCisJLyogV2hhdCBhYm91dCBHUElPLCBDTENEIGFuZCBVQVJUICovCisKKwkvKiBQTEwgSW5pdGlhbGl6YXRpb24gKi8KKwkvKiBQcm9nIHRoZSBQTEwxIEAgMjY2IE1IeiA9PT4gU0RSQU0gQ2xvY2sgPSAxMDAuOCBNSHogKi8KKwlsZHIgcjAsID1OT01BRElLX1NSQ19CQVNFCisKKwlsZHIgcjEsID0weDJCMDEzNTAyCisKKwlzdHIgcjEsIFtyMCwgIzB4MTRdCisKKwkvKiBVc2VkIHRvIHNldCBhbGwgdGhlIHRpbWVycyBjbG9jayB0byAyLjRNSFogKi8KKwlsZHIgcjEsID0weDJBQUFBMDA0CisJc3RyIHIxLCBbcjBdCisKKwlsZHIgcjEsID0weDEwMDAwMDAwCisJc3RyIHIxLCBbcjAsICMweDEwXQorCisJLyogRlNNQyBzZXR1cCAtLS0tICovCisJbGRyIHIwLCA9Tk9NQURJS19GU01DX0JBU0UKKworCWxkciByMSwgPTB4MTBEQgkJLyogRm9yIDE2LWJpdCBOT1IgZmxhc2ggKi8KKwlzdHIgcjEsIFtyMCwgIzB4MDhdCisKKwlsZHIgcjEsID0weDAzMzMzMzMzCS8qIEZvciAxNi1iaXQgTk9SIGZsYXNoICovCisJc3RyIHIxLCBbcjAsICMweGNdCisKKwkvKiBvbmVOQU5EIHNldHRpbmcgKi8KKwlsZHIgcjEsID0weDAwMDAxMDVCCS8qIEJDUjAgUHJvZyBjb250cm9sIHJlZ2lzdGVyICovCisJc3RyIHIxLCBbcjBdCisKKwlsZHIgcjEsID0weDBBMjAwNTUxCS8qIEJUUjAgUHJvZyB0aW1pbmcgcmVnaXN0ZXIgKi8KKwlzdHIgcjEsIFtyMCwgIzB4MDRdCisKKwkvKiBwcmVsb2FkIHRoZSBpbnN0cnVjdGlvbnMgaW50byBpY2FjaGUgKi8KKwlhZGQgcjAsIHBjLCAjMHgxRgorCWJpYyByMCwgcjAsICMweDFGCisJbWNyIHAxNSwgMCwgcjAsIGM3LCBjMTMsIDEKKwlhZGQgcjAsIHIwLCAjMHgyMAorCW1jciBwMTUsIDAsIHIwLCBjNywgYzEzLCAxCisKKwkvKiBOb3cgQ2xlYXIgUmVtYXAgKi8KKwlsZHIgcjAsID1OT01BRElLX1NSQ19CQVNFCisKKwlsZHIgcjEsID0weDIwMDQKKwlzdHIgcjEsIFtyMF0KKworCWxkciByMSwgPTB4MTAwMDAwMDAKKwlzdHIgcjEsIFtyMCwgIzB4MTBdCisKKwlsZHIgcjAsID0weDEwMUU5MDAwCisJbGRyIHIxLCA9MHgyMDA0CisJc3RyIHIxLCBbcjBdCisKKwlsZHIgcjAsID1OT01BRElLX1NSQ19CQVNFCisJbGRyIHIxLCA9MHgyMTA0CisJc3RyIHIxLCBbcjBdCisKKwkvKiBGU01DIHNldHVwIC0tICovCisJbW92IHIwLCAjKE5PTUFESUtfRlNNQ19CQVNFICYgMHgxMDAwMDAwMCkKKwlvcnIgcjAsIHIwLCAjKE5PTUFESUtfRlNNQ19CQVNFICYgMHgwRkZGRkZGRikKKworCWxkciByMSwgPTB4MTBEQgkJLyogRm9yIDE2LWJpdCBOT1IgZmxhc2ggKi8KKwlzdHIgcjEsIFtyMCwgIzB4OF0KKworCWxkciByMSwgPTB4MDMzMzMzMzMJLyogRm9yIDE2LWJpdCBOT1IgZmxhc2ggKi8KKwlzdHIgcjEsIFtyMCwgIzB4Y10KKworCS8qIE1QTUMgU2V0dXAgKi8KKwlsZHIgcjAsID1OT01BRElLX01QTUNfQkFTRQorCisJbGRyIHIxLCA9MHhGMDAwMDMKKwlzdHIgcjEsIFtyMF0JCS8qIEVuYWJsZSB0aGUgTVBNQyBhbmQgdGhlIERMTCAqLworCisJbGRyIHIxLCA9MHgxODMKKwlzdHIgcjEsIFtyMCwgIzB4MjBdCisKKwlsZHIgcjIsID1OT01BRElLX1BNVV9CQVNFCisKKwlsZHIgcjEsID0weDExMTEKKwlzdHIgcjEsIFtyMl0KKworCWxkciByMSwgPTB4MTExMQkJLyogUHJvZyB0aGUsIG1hbmQgZGVsYXkgc3RyYXRlZ3kgKi8KKwlzdHIgcjEsIFtyMCwgIzB4MjhdCisKKwlsZHIgcjEsID0weDEwMwkJLyogTk9QICxtYW5kICovCisJc3RyIHIxLCBbcjAsICMweDIwXQorCisJLyogRklYTUUgLS0gV2FpdCByZXF1aXJlZCBoZXJlICovCisKKwlsZHIgcjEsID0weDEwMwkJLyogUEFMTCAsbWFuZCovCisJc3RyIHIxLCBbcjAsICMweDIwXQorCisJbGRyIHIxLCA9MHgxCisJc3RyIHIxLCBbcjAsICMweDI0XQkvKiBUbyBkbyBhdCBsZWFzdCB0d28gYXV0by1yZWZyZXNoICovCisKKwkvKiBGSVhNRSAtLSBXYWl0IHJlcXVpcmVkIGhlcmUgKi8KKworCS8qIEF1dG8tcmVmcmVzaCBwZXJpb2QgPSA3Ljh1cyBAIFNEUkFNIENsb2NrID0gMTAwLjggTUh6ICovCisJbGRyIHIxLCA9MHgzMQorCXN0ciByMSwgW3IwLCAjMHgyNF0KKworCS8qIFByb2cgTGl0dGxlIEVuZGlhbiwgTm90IGRlZmluZWQgaW4gODgwMCBib2FyZCAqLworCWxkciByMSwgPTB4MAorCXN0ciByMSwJW3IwLCAjMHg4XQorCisKKwlsZHIgcjEsID0weDIKKwlzdHIgcjEsIFtyMCwgIzB4MzBdCQkvKiBQcm9nIHRSUCB0aW1pbmcgKi8KKworCWxkciByMSwgPTB4NAkJCS8qIENoYW5nZSBmb3IgODgxNSAqLworCXN0ciByMSwgW3IwLCAjMHgzNF0JCS8qIFByb2cgdFJBUyB0aW1pbmcgKi8KKworCWxkciByMSwgPTB4QgorCXN0ciByMSwgW3IwLCAjMHgzOF0JCS8qIFByb2cgdFNSRVggdGltaW5nICovCisKKworCWxkciByMSwgPTB4MQorCXN0ciByMSwgW3IwLCAjMHg0NF0JCS8qIFByb2cgdFdSIHRpbWluZyAqLworCisJbGRyIHIxLCA9MHg4CisJc3RyIHIxLCBbcjAsICMweDQ4XQkJLyogUHJvZyB0UkMgdGltaW5nICovCisKKwlsZHIgcjEsID0weEEKKwlzdHIgcjEsIFtyMCwgIzB4NENdCQkvKiBQcm9nIHRSRkMgdGltaW5nICovCisKKwlsZHIgcjEsID0weEIKKwlzdHIgcjEsIFtyMCwgIzB4NTBdCQkvKiBQcm9nIHRYU1IgdGltaW5nICovCisKKwlsZHIgcjEsID0weDEKKwlzdHIgcjEsIFtyMCwgIzB4NTRdCQkvKiBQcm9nIHRSUkQgdGltaW5nICovCisKKwlsZHIgcjEsID0weDEKKwlzdHIgcjEsIFtyMCwgIzB4NThdCQkvKiBQcm9nIHRNUkQgdGltaW5nICovCisKKwlsZHIgcjEsID0weDEKKwlzdHIgcjEsIFtyMCwgIzB4NUNdCQkvKiBQcm9nIHRDRExSIHRpbWluZyAqLworCisJLyogRERSLVNEUkFNIE1FTU9SWSBJUyBPTiBCQU5LMCA4ODE1ICovCisJbGRyIHIxLCA9MHgzMDQJCQkvKiBQcm9nIFJBUyBhbmQgQ0FTIGZvciBDUyAwICovCisJc3RyIHIxLCBbcjAsICMweDEwNF0KKworCS8qIFNEUi1TRFJBTSBNRU1PUlkgSVMgT04gQkFOSzEgODgxNSAqLworCWxkciByMSwgPTB4MzA0CQkJLyogUHJvZyBSQVMgYW5kIENBUyBmb3IgQ1MgMSAqLworCXN0ciByMSwgW3IwLCAjMHgxMjRdCisJLyogVEhFIERBVEEgQlVTIFdJREUgSVMgUFJPR1JBTSBGT1IgMTYtQklUUyAqLworCS8qIEREUi1TRFJBTSBNRU1PUlkgSVMgT04gQkFOSzAqLworCisJbGRyIHIxLCA9MHg4ODQJCQkvKiA4ODE1IDogY29uZmlnIHJlZyBpbiBCUkMgZm9yIENTMCAqLworCXN0ciByMSwgW3IwLCAjMHgxMDBdCisKKwkvKlNEUi1TRFJBTSBNRU1PUlkgSVMgT04gQkFOSzEqLworCisJbGRyIHIxLCA9MHg4ODQJCQkvKiA4ODE1IDogY29uZmlnIHJlZyBpbiBCUkMgZm9yIENTMSAqLworCXN0ciByMSwgW3IwLCAjMHgxMjBdCisKKwlsZHIgcjEsID0weDgzCQkJLypNT0RFIE1hbmQqLworCXN0ciByMSwgW3IwLCAjMHgyMF0KKworCS8qIExPQUQgTU9ERSBSRUdJU1RFUiBGT1IgMiBidXJzdHMgb2YgMTZiLCB3aXRoIEREUiBtZW0gT04gQkFOSzAgKi8KKworCWxkciByMSwgPTB4NjIwMDAJCQkvKkRhdGEgaW4qLworCWxkciByMSwgW3IxXQorCisJLyogTE9BRCBNT0RFIFJFR0lTVEVSIEZPUiAyIGJ1cnN0cyBvZiAxNmIsIHdpdGggRERSIG1lbSBPTiBCQU5LMSAqLworCisJbGRyIHIxLCA9MHg4MDYyMDAwCisJbGRyIHIxLCBbcjFdCisKKwlsZHIgcjEsID0weDAwMworCXN0ciByMSwgW3IwLCAjMHgyMF0KKworCS8qIEVOQUJMRSBBTEwgVEhFIEJVRkZFUiBGT1IgRUFDSCBBSEIgUE9SVCovCisKKwlsZHIgcjEsID0weDAxCQkJLyogRW5hYmxlIGJ1ZmZlciAwICovCisJc3RyIHIxLCBbcjAsICMweDQwMF0KKworCWxkciByMSwgPTB4MDEJCQkvKiBFbmFibGUgYnVmZmVyIDEgKi8KKwlzdHIgcjEsIFtyMCwgIzB4NDIwXQorCisJbGRyIHIxLCA9MHgwMQkJCS8qIEVuYWJsZSBidWZmZXIgMiAqLworCXN0ciByMSwgW3IwLCAjMHg0NDBdCisKKwlsZHIgcjEsID0weDAxCQkJLyogRW5hYmxlIGJ1ZmZlciAzICovCisJc3RyIHIxLCBbcjAsICMweDQ2MF0KKworCWxkciByMSwgPTB4MDEJCQkvKiBFbmFibGUgYnVmZmVyIDQgKi8KKwlzdHIgcjEsIFtyMCwgIzB4NDgwXQorCisJbGRyIHIxLCA9MHgwMQkJCS8qIEVuYWJsZSBidWZmZXIgNSAqLworCXN0ciByMSwgW3IwLCAjMHg0QTBdCisKKwkvKiBHUElPIHNldHRpbmdzICovCisKKwlsZHIgcjAsID1OT01BRElLX0dQSU8xX0JBU0UKKworCWxkciByMSwgPTB4QzA2MDAwMDAKKwlzdHIgcjEsIFtyMCwgIzB4MjBdCisKKwlsZHIgcjEsID0weDNGOUZGRkZGCQkvKiBBQkhJIGNoYW5nZSB0aGlzIGZvciB1YXJ0MSAqLworCXN0ciByMSwgW3IwLCAjMHgyNF0KKworCWxkciByMSwgPTB4M0Y5RkZGRkYJCS8qIEFCSEkgY2hhbmdlIHRoaXMgZm9yIHVhcnQxICovCisJc3RyIHIxLCBbcjAsICMweDI4XQorCisJbGRyIHIwLCA9Tk9NQURJS19HUElPMF9CQVNFCisKKwlsZHIgcjEsID0weEZGRkZGRkZGCisJc3RyIHIxLCBbcjAsICMweDIwXQorCisJbGRyIHIxLCA9MHgwMAorCXN0ciByMSwgW3IwLCAjMHgyNF0KKworCWxkciByMSwgPTB4MDAKKwlzdHIgcjEsIFtyMCwgIzB4MjhdCisKKwkvKiBDb25maWd1cmUgQ1BMRF9DVFJMIHJlZ2lzdGVyIGZvciBlbmFibGluZyBNVVggbG9naWMgZm9yIFVBUlQwL1VBUlQyICovCisKKwlsZHIgcjAsID1OT01BRElLX0ZTTUNfQkFTRQorCisJbGRyIHIxLCA9MHgxMERCCQkJLyogSU5JVCBGU01DIGJhbmsgMCAqLworCXN0ciByMSwgW3IwLCAjMHgwMF0KKworCWxkciByMSwgPTB4MEZGRkZGRkYKKwlzdHIgcjEsIFtyMCwgIzB4MDRdCisKKwlsZHIgcjEsID0weDAxMERCCQkvKiBJTklUIEZTTUMgYmFuayAxICovCisJc3RyIHIxLCBbcjAsICMweDA4XQorCisJbGRyIHIxLCA9MHgwMEZGRkZGRkYKKwlzdHIgcjEsIFtyMCwgIzB4MENdCisKKwlsZHIgcjAsID1OT01BRElLX1VBUlQwX0JBU0UKKworCWxkciByMSwgPTB4MDAwMDAwMDAKKwlzdHIgcjEsIFtyMCwgIzB4MzBdCisKKwlsZHIgcjEsID0weDAwMDAwMDRlCisJc3RyIHIxLCBbcjAsICMweDI0XQorCisJbGRyIHIxLCA9MHgwMDAwMDAwOAorCXN0ciByMSwgW3IwLCAjMHgyOF0KKworCWxkciByMSwgPTB4MDAwMDAwNjAKKwlzdHIgcjEsIFtyMCwgIzB4MkNdCisKKwlsZHIgcjEsID0weDAwMDAwMzAxCisJc3RyIHIxLCBbcjAsICMweDMwXQorCisJbGRyIHIxLCA9MHgwMDAwMDA2NgorCXN0ciByMSwgW3IwXQorCisJbGRyIHIwLCA9Tk9NQURJS19VQVJUMV9CQVNFCisKKwlsZHIgcjEsID0weDAwMDAwMDAwCisJc3RyIHIxLCBbcjAsICMweDMwXQorCisJbGRyIHIxLCA9MHgwMDAwMDA0ZQorCXN0ciByMSwgW3IwLCAjMHgyNF0KKworCWxkciByMSwgPTB4MDAwMDAwMDgKKwlzdHIgcjEsIFtyMCwgIzB4MjhdCisKKwlsZHIgcjEsID0weDAwMDAwMDYwCisJc3RyIHIxLCBbcjAsICMweDJDXQorCisJbGRyIHIxLCA9MHgwMDAwMDMwMQorCXN0ciByMSwgW3IwLCAjMHgzMF0KKworCWxkciByMSwgPTB4MDAwMDAwNjYKKwlzdHIgcjEsIFtyMF0KKworCWxkciByMCwgPU5PTUFESUtfVUFSVDJfQkFTRQorCisJbGRyIHIxLCA9MHgwMDAwMDAwMAorCXN0ciByMSwgW3IwLCAjMHgzMF0KKworCWxkciByMSwgPTB4MDAwMDAwNGUKKwlzdHIgcjEsIFtyMCwgIzB4MjRdCisKKwlsZHIgcjEsID0weDAwMDAwMDA4CisJc3RyIHIxLCBbcjAsICMweDI4XQorCisJbGRyIHIxLCA9MHgwMDAwMDA2MAorCXN0ciByMSwgW3IwLCAjMHgyQ10KKworCWxkciByMSwgPTB4MDAwMDAzMDEKKwlzdHIgcjEsIFtyMCwgIzB4MzBdCisKKwlsZHIgcjEsID0weDAwMDAwMDY2CisJc3RyIHIxLCBbcjBdCisKKwkvKiBDb25maWd1cmUgQ1BMRCB0byBlbmFibGUgVUFSVDAgKi8KKworCW1vdiBwYywgbHIKZGlmZiAtLWdpdCBhL2JvYXJkL3N0L25tZGs4ODE1L3UtYm9vdC5sZHMgYi9ib2FyZC9zdC9ubWRrODgxNS91LWJvb3QubGRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkNjQ4MWIKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9zdC9ubWRrODgxNS91LWJvb3QubGRzCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDIKKyAqIEdhcnkgSmVubmVqb2huLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCA8Z2pAZGVueC5kZT4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCitPVVRQVVRfRk9STUFUKCJlbGYzMi1saXR0bGVhcm0iLCAiZWxmMzItbGl0dGxlYXJtIiwgImVsZjMyLWxpdHRsZWFybSIpCitPVVRQVVRfQVJDSChhcm0pCitFTlRSWShfc3RhcnQpCitTRUNUSU9OUworeworCS4gPSAweDAwMDAwMDAwOworCS4gPSBBTElHTig0KTsKKwkudGV4dAk6CisJeworCQljcHUvYXJtOTI2ZWpzL3N0YXJ0Lm8JKC50ZXh0KQorCQkqKC50ZXh0KQorCX0KKwkuID0gQUxJR04oNCk7CisJLnJvZGF0YSA6IHsgKigucm9kYXRhKSB9CisJLiA9IEFMSUdOKDQpOworCS5kYXRhIDogeyAqKC5kYXRhKSB9CisJLiA9IEFMSUdOKDQpOworCS5nb3QgOiB7ICooLmdvdCkgfQorCisJX191X2Jvb3RfY21kX3N0YXJ0ID0gLjsKKwkudV9ib290X2NtZCA6IHsgKigudV9ib290X2NtZCkgfQorCV9fdV9ib290X2NtZF9lbmQgPSAuOworCisJLiA9IEFMSUdOKDQpOworCV9fYnNzX3N0YXJ0ID0gLjsKKwkuYnNzIChOT0xPQUQpIDogeyAqKC5ic3MpIC4gPSBBTElHTig0KTsgfQorCV9lbmQgPSAuOworfQpkaWZmIC0tZ2l0IGEvY3B1L2FybTkyNmVqcy9ub21hZGlrL01ha2VmaWxlIGIvY3B1L2FybTkyNmVqcy9ub21hZGlrL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzYmQyZWUKLS0tIC9kZXYvbnVsbAorKysgYi9jcHUvYXJtOTI2ZWpzL25vbWFkaWsvTWFrZWZpbGUKQEAgLTAsMCArMSw0NiBAQAorIworIyAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNgorIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgorIworIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworIyBwcm9qZWN0LgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisjIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisjIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorIyBNQSAwMjExMS0xMzA3IFVTQQorIworCitpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKKworTElCCT0gJChvYmopbGliJChTT0MpLmEKKworQ09CSlMJPSB0aW1lci5vCitTT0JKUwk9IHJlc2V0Lm8KKworU1JDUwk6PSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKKworYWxsOgkkKG9iaikuZGVwZW5kICQoTElCKQorCiskKExJQik6CSQoT0JKUykKKwkkKEFSKSAkKEFSRkxBR1MpICRAICQoT0JKUykKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5taworCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2NwdS9hcm05MjZlanMvbm9tYWRpay9yZXNldC5TIGIvY3B1L2FybTkyNmVqcy9ub21hZGlrL3Jlc2V0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQ4OTk2YgotLS0gL2Rldi9udWxsCisrKyBiL2NwdS9hcm05MjZlanMvbm9tYWRpay9yZXNldC5TCkBAIC0wLDAgKzEsMjUgQEAKKyNpbmNsdWRlIDxjb25maWcuaD4KKy8qCisgKiBQcm9jZXNzb3IgcmVzZXQgZm9yIE5vbWFkaWsKKyAqLworCisJLmFsaWduIDUKKy5nbG9ibCByZXNldF9jcHUKK3Jlc2V0X2NwdToKKyNpZiBkZWZpbmVkIENPTkZJR19OT01BRElLXzg4MTUKKwlsZHIJcjAsID1OT01BRElLX1NSQ19CQVNFCisJbGRyCXIxLCA9MHgxCisJc3RyCXIxLCBbcjAsICMweDE4XQorI2Vsc2UKKwlsZHIJcjEsIHJzdGN0bDEJLyogZ2V0IGNsa20xIHJlc2V0IGN0bCAqLworCW1vdglyMywgIzB4MAorCXN0cmgJcjMsIFtyMV0JLyogY2xlYXIgaXQgKi8KKwltb3YJcjMsICMweDgKKwlzdHJoCXIzLCBbcjFdCS8qIGZvcmNlIGRzcCthcm0gcmVzZXQgKi8KKyNlbmRpZgorCitfbG9vcF9mb3JldmVyOgorCWIJX2xvb3BfZm9yZXZlcgorCityc3RjdGwxOgorCS53b3JkIDB4ZmZmZWNlMTAKZGlmZiAtLWdpdCBhL2NwdS9hcm05MjZlanMvbm9tYWRpay90aW1lci5jIGIvY3B1L2FybTkyNmVqcy9ub21hZGlrL3RpbWVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmIyMjA4YwotLS0gL2Rldi9udWxsCisrKyBiL2NwdS9hcm05MjZlanMvbm9tYWRpay90aW1lci5jCkBAIC0wLDAgKzEsMTgzIEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDAzCisgKiBUZXhhcyBJbnN0cnVtZW50cyA8d3d3LnRpLmNvbT4KKyAqCisgKiAoQykgQ29weXJpZ2h0IDIwMDIKKyAqIFN5c2dvIFJlYWwtVGltZSBTb2x1dGlvbnMsIEdtYkggPHd3dy5lbGlub3MuY29tPgorICogTWFyaXVzIEdyb2VnZXIgPG1ncm9lZ2VyQHN5c2dvLmRlPgorICoKKyAqIChDKSBDb3B5cmlnaHQgMjAwMgorICogU3lzZ28gUmVhbC1UaW1lIFNvbHV0aW9ucywgR21iSCA8d3d3LmVsaW5vcy5jb20+CisgKiBBbGV4IFp1ZXBrZSA8YXp1QHN5c2dvLmRlPgorICoKKyAqIChDKSBDb3B5cmlnaHQgMjAwMi0yMDA0CisgKiBHYXJ5IEplbm5lam9obiwgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgPGdqQGRlbnguZGU+CisgKgorICogKEMpIENvcHlyaWdodCAyMDA0CisgKiBQaGlsaXBwZSBSb2JpbiwgQVJNIEx0ZC4gPHBoaWxpcHBlLnJvYmluQGFybS5jb20+CisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFybTkyNmVqcy5oPgorCisjZGVmaW5lIFRJTUVSX0xPQURfVkFMIDB4ZmZmZmZmZmYKKworLyogbWFjcm8gdG8gcmVhZCB0aGUgMzIgYml0IHRpbWVyICovCisjZGVmaW5lIFJFQURfVElNRVIgcmVhZGwoQ09ORklHX1NZU19USU1FUkJBU0UgKyAyMCkKKworc3RhdGljIHVsb25nIHRpbWVzdGFtcDsKK3N0YXRpYyB1bG9uZyBsYXN0ZGVjOworCisvKiBub3RoaW5nIHJlYWxseSB0byBkbyB3aXRoIGludGVycnVwdHMsIGp1c3Qgc3RhcnRzIHVwIGEgY291bnRlci4gKi8KK2ludCB0aW1lcl9pbml0KHZvaWQpCit7CisJLyogTG9hZCB0aW1lciB3aXRoIGluaXRpYWwgdmFsdWUgKi8KKwl3cml0ZWwoVElNRVJfTE9BRF9WQUwsIENPTkZJR19TWVNfVElNRVJCQVNFICsgMTYpOworCisJLyoKKwkgKiBTZXQgdGltZXIgdG8gYmUgZW5hYmxlZCwgZnJlZS1ydW5uaW5nLCBubyBpbnRlcnJ1cHRzLCAyNTYgZGl2aWRlciwKKwkgKiAzMi1iaXQsIHdyYXAtbW9kZQorCSAqLworCXdyaXRlbCgweDhhLCBDT05GSUdfU1lTX1RJTUVSQkFTRSArIDI0KTsKKworCS8qIGluaXQgdGhlIHRpbWVzdGFtcCBhbmQgbGFzdGRlYyB2YWx1ZSAqLworCXJlc2V0X3RpbWVyX21hc2tlZCgpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiB0aW1lciB3aXRob3V0IGludGVycnVwdHMKKyAqLwordm9pZCByZXNldF90aW1lcih2b2lkKQoreworCXJlc2V0X3RpbWVyX21hc2tlZCgpOworfQorCit1bG9uZyBnZXRfdGltZXIodWxvbmcgYmFzZSkKK3sKKwlyZXR1cm4gZ2V0X3RpbWVyX21hc2tlZCgpIC0gYmFzZTsKK30KKwordm9pZCBzZXRfdGltZXIodWxvbmcgdCkKK3sKKwl0aW1lc3RhbXAgPSB0OworfQorCisvKiBkZWxheSB4IHVzZWNvbmRzIEFORCBwZXJzZXJ2ZSBhZHZhbmNlIHRpbXN0YW1wIHZhbHVlICovCit2b2lkIHVkZWxheSh1bnNpZ25lZCBsb25nIHVzZWMpCit7CisJdWxvbmcgdG1vLCB0bXA7CisKKwlpZiAodXNlYyA+PSAxMDAwKSB7CisJCS8qIGlmICJiaWciIG51bWJlciwgc3ByZWFkIG5vcm1hbGl6YXRpb24gdG8gc2Vjb25kcyAqLworCQl0bW8gPSB1c2VjIC8gMTAwMDsJLyogc3RhcnQgdG8gbm9ybWFsaXplICovCisJCXRtbyAqPSBDT05GSUdfU1lTX0haOwkvKiBmaW5kIG51bWJlciBvZiAidGlja3MiICovCisJCXRtbyAvPSAxMDAwOwkJLyogZmluaXNoIG5vcm1hbGl6ZS4gKi8KKwl9IGVsc2UgeworCQkvKiBzbWFsbCBudW1iZXIsIGRvbid0IGtpbGwgaXQgcHJpb3IgdG8gSFogbXVsdGlwbHkgKi8KKwkJdG1vID0gdXNlYyAqIENPTkZJR19TWVNfSFo7CisJCXRtbyAvPSAoMTAwMCAqIDEwMDApOworCX0KKworCXRtcCA9IGdldF90aW1lcigwKTsJCS8qIGdldCBjdXJyZW50IHRpbWVzdGFtcCAqLworCWlmICgodG1vICsgdG1wICsgMSkgPCB0bXApCS8qIHdpbGwgcm9sbCB0aW1lIHN0YW1wPyAqLworCQlyZXNldF90aW1lcl9tYXNrZWQoKTsJLyogcmVzZXQgdG8gMCwgc2V0IGxhc3RkZWMgdmFsdWUgKi8KKwllbHNlCisJCXRtbyArPSB0bXA7CisKKwl3aGlsZSAoZ2V0X3RpbWVyX21hc2tlZCgpIDwgdG1vKQorCQkvKiBub3RoaW5nICovIDsKK30KKwordm9pZCByZXNldF90aW1lcl9tYXNrZWQodm9pZCkKK3sKKwkvKiByZXNldCB0aW1lICovCisJbGFzdGRlYyA9IFJFQURfVElNRVI7CS8qIGNhcHVyZSBjdXJyZW50IGRlY3JlbWVudGVyIHZhbHVlIHRpbWUgKi8KKwl0aW1lc3RhbXAgPSAwOwkJLyogc3RhcnQgImFkdmFuY2luZyIgdGltZSBzdGFtcCBmcm9tIDAgKi8KK30KKwordWxvbmcgZ2V0X3RpbWVyX21hc2tlZCh2b2lkKQoreworCXVsb25nIG5vdyA9IFJFQURfVElNRVI7CQkvKiBjdXJyZW50IHRpY2sgdmFsdWUgKi8KKworCWlmIChsYXN0ZGVjID49IG5vdykgewkJLyogbm9ybWFsIG1vZGUgKG5vbiByb2xsKSAqLworCQkvKiBtb3ZlIHN0YW1wIGZvcmR3YXJkICovCisJCXRpbWVzdGFtcCArPSBsYXN0ZGVjIC0gbm93OworCX0gZWxzZSB7CisJCS8qCisJCSAqIEFuIG92ZXJmbG93IGlzIGV4cGVjdGVkLgorCQkgKiBudHMgPSB0cyArIGxkICsgKFRMViAtIG5vdykKKwkJICogdHM9b2xkIHN0YW1wLCBsZD10aW1lIHRoYXQgcGFzc2VkIGJlZm9yZSBwYXNzaW5nIHRocm91Z2ggLTEKKwkJICogKFRMVi1ub3cpIGFtb3VudCBvZiB0aW1lIGFmdGVyIHBhc3NpbmcgdGhvdWdoIC0xCisJCSAqIG50cyA9IG5ldyAiYWR2YW5jaW5nIHRpbWUgc3RhbXAiLi4uaXQgY291bGQgYWxzbyByb2xsCisJCSAqLworCQl0aW1lc3RhbXAgKz0gbGFzdGRlYyArIFRJTUVSX0xPQURfVkFMIC0gbm93OworCX0KKwlsYXN0ZGVjID0gbm93OworCisJcmV0dXJuIHRpbWVzdGFtcDsKK30KKworLyogd2FpdHMgc3BlY2lmaWVkIGRlbGF5IHZhbHVlIGFuZCByZXNldHMgdGltZXN0YW1wICovCit2b2lkIHVkZWxheV9tYXNrZWQodW5zaWduZWQgbG9uZyB1c2VjKQoreworCXVsb25nIHRtbzsKKworCWlmICh1c2VjID49IDEwMDApIHsKKwkJLyogaWYgImJpZyIgbnVtYmVyLCBzcHJlYWQgbm9ybWFsaXphdGlvbiB0byBzZWNvbmRzICovCisJCXRtbyA9IHVzZWMgLyAxMDAwOwkvKiBzdGFydCB0byBub3JtYWxpemUgKi8KKwkJdG1vICo9IENPTkZJR19TWVNfSFo7CS8qIGZpbmQgbnVtYmVyIG9mICJ0aWNrcyIgKi8KKwkJdG1vIC89IDEwMDA7CQkvKiBmaW5pc2ggbm9ybWFsaXplLiAqLworCX0gZWxzZSB7CisJCS8qIGVsc2Ugc21hbGwgbnVtYmVyLCBkb24ndCBraWxsIGl0IHByaW9yIHRvIEhaIG11bHRpcGx5ICovCisJCXRtbyA9IHVzZWMgKiBDT05GSUdfU1lTX0haOworCQl0bW8gLz0gKDEwMDAqMTAwMCk7CisJfQorCisJcmVzZXRfdGltZXJfbWFza2VkKCk7CisJLyogc2V0ICJhZHZhbmNpbmciIHRpbWVzdGFtcCB0byAwLCBzZXQgbGFzdGRlYyB2YXVsZSAqLworCisJd2hpbGUgKGdldF90aW1lcl9tYXNrZWQoKSA8IHRtbykKKwkJLyogbm90aGluZyAqLyA7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGRlcml2ZWQgZnJvbSBQb3dlclBDIGNvZGUgKHJlYWQgdGltZWJhc2UgYXMgbG9uZyBsb25nKS4KKyAqIE9uIEFSTSBpdCBqdXN0IHJldHVybnMgdGhlIHRpbWVyIHZhbHVlLgorICovCit1bnNpZ25lZCBsb25nIGxvbmcgZ2V0X3RpY2tzKHZvaWQpCit7CisJcmV0dXJuIGdldF90aW1lcigwKTsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgZGVyaXZlZCBmcm9tIFBvd2VyUEMgY29kZSAodGltZWJhc2UgY2xvY2sgZnJlcXVlbmN5KS4KKyAqIE9uIEFSTSBpdCByZXR1cm5zIHRoZSBudW1iZXIgb2YgdGltZXIgdGlja3MgcGVyIHNlY29uZC4KKyAqLwordWxvbmcgZ2V0X3RiY2xrKHZvaWQpCit7CisJdWxvbmcgdGJjbGs7CisKKwl0YmNsayA9IENPTkZJR19TWVNfSFo7CisJcmV0dXJuIHRiY2xrOworfQpkaWZmIC0tZ2l0IGEvY3B1L2FybV9jb3J0ZXhhOC9NYWtlZmlsZSBiL2NwdS9hcm1fY29ydGV4YTgvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWUyMDI5OQotLS0gL2Rldi9udWxsCisrKyBiL2NwdS9hcm1fY29ydGV4YTgvTWFrZWZpbGUKQEAgLTAsMCArMSw0NyBAQAorIworIyAoQykgQ29weXJpZ2h0IDIwMDAtMjAwMworIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgorIworIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworIyBwcm9qZWN0LgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisjIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisjIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorIyBNQSAwMjExMS0xMzA3IFVTQQorIworCitpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKKworTElCCT0gJChvYmopbGliJChDUFUpLmEKKworU1RBUlQJOj0gc3RhcnQubworQ09CSlMJOj0gY3B1Lm8KKworU1JDUwk6PSAkKFNUQVJUOi5vPS5TKSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCitTVEFSVAk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTVEFSVCkpCisKK2FsbDoJJChvYmopLmRlcGVuZCAkKFNUQVJUKSAkKExJQikKKworJChMSUIpOgkkKE9CSlMpCisJJChBUikgJChBUkZMQUdTKSAkQCAkKE9CSlMpCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKKworc2luY2x1ZGUgJChvYmopLmRlcGVuZAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY3B1L2FybV9jb3J0ZXhhOC9jb25maWcubWsgYi9jcHUvYXJtX2NvcnRleGE4L2NvbmZpZy5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDIxNzYyCi0tLSAvZGV2L251bGwKKysrIGIvY3B1L2FybV9jb3J0ZXhhOC9jb25maWcubWsKQEAgLTAsMCArMSwzNiBAQAorIworIyAoQykgQ29weXJpZ2h0IDIwMDIKKyMgR2FyeSBKZW5uZWpvaG4sIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIDxnakBkZW54LmRlPgorIworIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworIyBwcm9qZWN0LgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisjIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisjIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorIyBNQSAwMjExMS0xMzA3IFVTQQorIworUExBVEZPUk1fUkVMRkxBR1MgKz0gLWZuby1zdHJpY3QtYWxpYXNpbmcgLWZuby1jb21tb24gLWZmaXhlZC1yOCBcCisJCSAgICAgLW1zb2Z0LWZsb2F0CisKKyMgTWFrZSBBUk12NSB0byBhbGxvdyBtb3JlIGNvbXBpbGVycyB0byB3b3JrLCBldmVuIHRob3VnaCBpdHMgdjdhLgorUExBVEZPUk1fQ1BQRkxBR1MgKz0gLW1hcmNoPWFybXY1CisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMKKyMgU3VwcGx5IG9wdGlvbnMgYWNjb3JkaW5nIHRvIGNvbXBpbGVyIHZlcnNpb24KKyMKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorUExBVEZPUk1fQ1BQRkxBR1MgKz0kKGNhbGwgY2Mtb3B0aW9uKQorUExBVEZPUk1fQ1BQRkxBR1MgKz0kKGNhbGwgY2Mtb3B0aW9uLC1tbm8tdGh1bWItaW50ZXJ3b3JrLCkKK1BMQVRGT1JNX1JFTEZMQUdTICs9JChjYWxsIGNjLW9wdGlvbiwtbXNob3J0LWxvYWQtYnl0ZXMsXAorCQkgICAgJChjYWxsIGNjLW9wdGlvbiwtbWFsaWdubWVudC10cmFwcywpKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NwdS9hcm1fY29ydGV4YTgvY3B1LmMgYi9jcHUvYXJtX2NvcnRleGE4L2NwdS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViYzVlYTIKLS0tIC9kZXYvbnVsbAorKysgYi9jcHUvYXJtX2NvcnRleGE4L2NwdS5jCkBAIC0wLDAgKzEsMjQxIEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDA4IFRleGFzIEluc3R1cm1lbnRzCisgKgorICogKEMpIENvcHlyaWdodCAyMDAyCisgKiBTeXNnbyBSZWFsLVRpbWUgU29sdXRpb25zLCBHbWJIIDx3d3cuZWxpbm9zLmNvbT4KKyAqIE1hcml1cyBHcm9lZ2VyIDxtZ3JvZWdlckBzeXNnby5kZT4KKyAqCisgKiAoQykgQ29weXJpZ2h0IDIwMDIKKyAqIEdhcnkgSmVubmVqb2huLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCA8Z2pAZGVueC5kZT4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisvKgorICogQ1BVIHNwZWNpZmljIGNvZGUKKyAqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8Y29tbWFuZC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3N5c19wcm90by5oPgorCisjaWZkZWYgQ09ORklHX1VTRV9JUlEKK0RFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOworI2VuZGlmCisKKyNpZm5kZWYgQ09ORklHX0wyX09GRgordm9pZCBsMmNhY2hlX2Rpc2FibGUodm9pZCk7CisjZW5kaWYKKworc3RhdGljIHZvaWQgY2FjaGVfZmx1c2godm9pZCk7CisKKy8qIHJlYWQgY28tcHJvY2Vzc29yIDE1LCByZWdpc3RlciAjMSAoY29udHJvbCByZWdpc3RlcikgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIHJlYWRfcDE1X2MxKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyB2YWx1ZTsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKCJtcmMgcDE1LCAwLCAlMCwgYzEsIGMwLCAwXAorCQkJICAgICBAIHJlYWQgY29udHJvbCByZWdcbiI6Ij1yIih2YWx1ZSkKKwkJCSAgICAgOjoibWVtb3J5Iik7CisJcmV0dXJuIHZhbHVlOworfQorCisvKiB3cml0ZSB0byBjby1wcm9jZXNzb3IgMTUsIHJlZ2lzdGVyICMxIChjb250cm9sIHJlZ2lzdGVyKSAqLworc3RhdGljIHZvaWQgd3JpdGVfcDE1X2MxKHVuc2lnbmVkIGxvbmcgdmFsdWUpCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oIm1jciBwMTUsIDAsICUwLCBjMSwgYzAsIDBcCisJCQkgICAgIEAgd3JpdGUgaXQgYmFja1xuIjo6InIiKHZhbHVlKQorCQkJICAgICA6ICJtZW1vcnkiKTsKKworCXJlYWRfcDE1X2MxKCk7Cit9CisKK3N0YXRpYyB2b2lkIGNwX2RlbGF5KHZvaWQpCit7CisJLyogTWFueSBPTUFQIHJlZ3MgbmVlZCBhdCBsZWFzdCAyIG5vcHMgKi8KKwlhc20oIm5vcCIpOworCWFzbSgibm9wIik7Cit9CisKKy8qIFNlZSBhbHNvIEFSTSBSZWYuIE1hbi4gKi8KKyNkZWZpbmUgQzFfTU1VCQkoMTw8MCkJLyogbW11IG9mZi9vbiAqLworI2RlZmluZSBDMV9BTElHTgkoMTw8MSkJLyogYWxpZ25tZW50IGZhdWx0cyBvZmYvb24gKi8KKyNkZWZpbmUgQzFfREMJCSgxPDwyKQkvKiBkY2FjaGUgb2ZmL29uICovCisjZGVmaW5lIEMxX1dCCQkoMTw8MykJLyogbWVyZ2luZyB3cml0ZSBidWZmZXIgb24vb2ZmICovCisjZGVmaW5lIEMxX0JJR19FTkRJQU4JKDE8PDcpCS8qIGJpZyBlbmRpYW4gb2ZmL29uICovCisjZGVmaW5lIEMxX1NZU19QUk9UCSgxPDw4KQkvKiBzeXN0ZW0gcHJvdGVjdGlvbiAqLworI2RlZmluZSBDMV9ST01fUFJPVAkoMTw8OSkJLyogUk9NIHByb3RlY3Rpb24gKi8KKyNkZWZpbmUgQzFfSUMJCSgxPDwxMikJLyogaWNhY2hlIG9mZi9vbiAqLworI2RlZmluZSBDMV9ISUdIX1ZFQ1RPUlMJKDE8PDEzKQkvKiBsb2NhdGlvbiBvZiB2ZWN0b3JzOiBsb3cvaGlnaCBhZGRyZXNzZXMgKi8KKyNkZWZpbmUgUkVTRVJWRURfMQkoMHhmIDw8IDMpCS8qIG11c3QgYmUgMTExYiBmb3IgUi9XICovCisKK2ludCBjcHVfaW5pdCh2b2lkKQoreworCS8qCisJICogc2V0dXAgdXAgc3RhY2tzIGlmIG5lY2Vzc2FyeQorCSAqLworI2lmZGVmIENPTkZJR19VU0VfSVJRCisJSVJRX1NUQUNLX1NUQVJUID0KKwkgICAgX2FybWJvb3Rfc3RhcnQgLSBDT05GSUdfU1lTX01BTExPQ19MRU4gLSBDT05GSUdfU1lTX0dCTF9EQVRBX1NJWkUgLSA0OworCUZJUV9TVEFDS19TVEFSVCA9IElSUV9TVEFDS19TVEFSVCAtIENPTkZJR19TVEFDS1NJWkVfSVJROworI2VuZGlmCisJcmV0dXJuIDA7Cit9CisKK2ludCBjbGVhbnVwX2JlZm9yZV9saW51eCh2b2lkKQoreworCXVuc2lnbmVkIGludCBpOworCisJLyoKKwkgKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBqdXN0IGJlZm9yZSB3ZSBjYWxsIGxpbnV4CisJICogaXQgcHJlcGFyZXMgdGhlIHByb2Nlc3NvciBmb3IgbGludXgKKwkgKgorCSAqIHdlIHR1cm4gb2ZmIGNhY2hlcyBldGMgLi4uCisJICovCisJZGlzYWJsZV9pbnRlcnJ1cHRzKCk7CisKKwkvKiB0dXJuIG9mZiBJL0QtY2FjaGUgKi8KKwlpY2FjaGVfZGlzYWJsZSgpOworCWRjYWNoZV9kaXNhYmxlKCk7CisKKwkvKiBpbnZhbGlkYXRlIEktY2FjaGUgKi8KKwljYWNoZV9mbHVzaCgpOworCisjaWZuZGVmIENPTkZJR19MMl9PRkYKKwkvKiB0dXJuIG9mZiBMMiBjYWNoZSAqLworCWwyY2FjaGVfZGlzYWJsZSgpOworCS8qIGludmFsaWRhdGUgTDIgY2FjaGUgYWxzbyAqLworCXY3X2ZsdXNoX2RjYWNoZV9hbGwoZ2V0X2RldmljZV90eXBlKCkpOworI2VuZGlmCisJaSA9IDA7CisJLyogbWVtIGJhcnJpZXIgdG8gc3luYyB1cCB0aGluZ3MgKi8KKwlhc20oIm1jciBwMTUsIDAsICUwLCBjNywgYzEwLCA0IjogOiJyIihpKSk7CisKKyNpZm5kZWYgQ09ORklHX0wyX09GRgorCWwyY2FjaGVfZW5hYmxlKCk7CisjZW5kaWYKKworCXJldHVybiAwOworfQorCitpbnQgZG9fcmVzZXQoY21kX3RibF90ICpjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJZGlzYWJsZV9pbnRlcnJ1cHRzKCk7CisJcmVzZXRfY3B1KDApOworCisJLyogTk9UUkVBQ0hFRCAqLworCXJldHVybiAwOworfQorCit2b2lkIGljYWNoZV9lbmFibGUodm9pZCkKK3sKKwl1bG9uZyByZWc7CisKKwlyZWcgPSByZWFkX3AxNV9jMSgpOwkvKiBnZXQgY29udHJvbCByZWcuICovCisJY3BfZGVsYXkoKTsKKwl3cml0ZV9wMTVfYzEocmVnIHwgQzFfSUMpOworfQorCit2b2lkIGljYWNoZV9kaXNhYmxlKHZvaWQpCit7CisJdWxvbmcgcmVnOworCisJcmVnID0gcmVhZF9wMTVfYzEoKTsKKwljcF9kZWxheSgpOworCXdyaXRlX3AxNV9jMShyZWcgJiB+QzFfSUMpOworfQorCit2b2lkIGRjYWNoZV9kaXNhYmxlICh2b2lkKQoreworCXVsb25nIHJlZzsKKworCXJlZyA9IHJlYWRfcDE1X2MxICgpOworCWNwX2RlbGF5ICgpOworCXdyaXRlX3AxNV9jMSAocmVnICYgfkMxX0RDKTsKK30KKwordm9pZCBsMmNhY2hlX2VuYWJsZSgpCit7CisJdW5zaWduZWQgbG9uZyBpOworCXZvbGF0aWxlIHVuc2lnbmVkIGludCBqOworCisJLyogRVMyIG9ud2FyZHMgd2UgY2FuIGRpc2FibGUvZW5hYmxlIEwyIG91cnNlbHZlcyAqLworCWlmIChnZXRfY3B1X3JldigpID09IENQVV8zNDMwX0VTMikgeworCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygibXJjIHAxNSwgMCwgJTAsIGMxLCBjMCwgMSI6Ij1yIihpKSk7CisJCV9fYXNtX18gX192b2xhdGlsZV9fKCJvcnIgJTAsICUwLCAjMHgyIjoiPXIiKGkpKTsKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oIm1jciBwMTUsIDAsICUwLCBjMSwgYzAsIDEiOiI9ciIoaSkpOworCX0gZWxzZSB7CisJCS8qIFNhdmUgcjAsIHIxMiBhbmQgcmVzdG9yZSB0aGVtIGFmdGVyIHVzYWdlICovCisJCV9fYXNtX18gX192b2xhdGlsZV9fKCJtb3YgJTAsIHIxMiI6Ij1yIihqKSk7CisJCV9fYXNtX18gX192b2xhdGlsZV9fKCJtb3YgJTAsIHIwIjoiPXIiKGkpKTsKKworCQkvKgorCQkgKiBHUCBEZXZpY2UgUk9NIGNvZGUgQVBJIHVzYWdlIGhlcmUKKwkJICogcjEyID0gQVVYQ1IgV3JpdGUgZnVuY3Rpb24gYW5kIHIwIHZhbHVlCisJCSAqLworCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygibW92IHIxMiwgIzB4MyIpOworCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygibXJjIHAxNSwgMCwgcjAsIGMxLCBjMCwgMSIpOworCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygib3JyIHIwLCByMCwgIzB4MiIpOworCQkvKiBTTUkgaW5zdHJ1Y3Rpb24gdG8gY2FsbCBST00gQ29kZSBBUEkgKi8KKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oIi53b3JkIDB4RTE2MDAwNzAiKTsKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oIm1vdiByMCwgJTAiOiI9ciIoaSkpOworCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygibW92IHIxMiwgJTAiOiI9ciIoaikpOworCX0KKworfQorCit2b2lkIGwyY2FjaGVfZGlzYWJsZSgpCit7CisJdW5zaWduZWQgbG9uZyBpOworCXZvbGF0aWxlIHVuc2lnbmVkIGludCBqOworCisJLyogRVMyIG9ud2FyZHMgd2UgY2FuIGRpc2FibGUvZW5hYmxlIEwyIG91cnNlbHZlcyAqLworCWlmIChnZXRfY3B1X3JldigpID09IENQVV8zNDMwX0VTMikgeworCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygibXJjIHAxNSwgMCwgJTAsIGMxLCBjMCwgMSI6Ij1yIihpKSk7CisJCV9fYXNtX18gX192b2xhdGlsZV9fKCJiaWMgJTAsICUwLCAjMHgyIjoiPXIiKGkpKTsKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oIm1jciBwMTUsIDAsICUwLCBjMSwgYzAsIDEiOiI9ciIoaSkpOworCX0gZWxzZSB7CisJCS8qIFNhdmUgcjAsIHIxMiBhbmQgcmVzdG9yZSB0aGVtIGFmdGVyIHVzYWdlICovCisJCV9fYXNtX18gX192b2xhdGlsZV9fKCJtb3YgJTAsIHIxMiI6Ij1yIihqKSk7CisJCV9fYXNtX18gX192b2xhdGlsZV9fKCJtb3YgJTAsIHIwIjoiPXIiKGkpKTsKKworCQkvKgorCQkgKiBHUCBEZXZpY2UgUk9NIGNvZGUgQVBJIHVzYWdlIGhlcmUKKwkJICogcjEyID0gQVVYQ1IgV3JpdGUgZnVuY3Rpb24gYW5kIHIwIHZhbHVlCisJCSAqLworCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygibW92IHIxMiwgIzB4MyIpOworCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygibXJjIHAxNSwgMCwgcjAsIGMxLCBjMCwgMSIpOworCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygiYmljIHIwLCByMCwgIzB4MiIpOworCQkvKiBTTUkgaW5zdHJ1Y3Rpb24gdG8gY2FsbCBST00gQ29kZSBBUEkgKi8KKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oIi53b3JkIDB4RTE2MDAwNzAiKTsKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oIm1vdiByMCwgJTAiOiI9ciIoaSkpOworCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygibW92IHIxMiwgJTAiOiI9ciIoaikpOworCX0KK30KKworaW50IGljYWNoZV9zdGF0dXModm9pZCkKK3sKKwlyZXR1cm4gKHJlYWRfcDE1X2MxKCkgJiBDMV9JQykgIT0gMDsKK30KKworc3RhdGljIHZvaWQgY2FjaGVfZmx1c2godm9pZCkKK3sKKwlhc20gKCJtY3IgcDE1LCAwLCAlMCwgYzcsIGM1LCAwIjogOiJyIiAoMCkpOworfQorCmRpZmYgLS1naXQgYS9jcHUvYXJtX2NvcnRleGE4L29tYXAzL01ha2VmaWxlIGIvY3B1L2FybV9jb3J0ZXhhOC9vbWFwMy9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTZiM2RkCi0tLSAvZGV2L251bGwKKysrIGIvY3B1L2FybV9jb3J0ZXhhOC9vbWFwMy9NYWtlZmlsZQpAQCAtMCwwICsxLDQ2IEBACisjCisjIChDKSBDb3B5cmlnaHQgMjAwMC0yMDAzCisjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCisjCisjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisjIHByb2plY3QuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyMgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyMgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisjIE1BIDAyMTExLTEzMDcgVVNBCisjCisKK2luY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5taworCitMSUIJPSAgJChvYmopbGliJChTT0MpLmEKKworU09CSlMJOj0gbG93bGV2ZWxfaW5pdC5vCitDT0JKUwk6PSBzeXNfaW5mby5vIGJvYXJkLm8gY2xvY2subyBpbnRlcnJ1cHRzLm8gbWVtLm8gc3lzbGliLm8KKworU1JDUwk6PSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykgJChTT0JKUykpCisKK2FsbDoJICQob2JqKS5kZXBlbmQgJChMSUIpCisKKyQoTElCKToJJChPQkpTKQorCSQoQVIpICQoQVJGTEFHUykgJEAgJChPQkpTKQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCisKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvY3B1L2FybV9jb3J0ZXhhOC9vbWFwMy9ib2FyZC5jIGIvY3B1L2FybV9jb3J0ZXhhOC9vbWFwMy9ib2FyZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiYjNlMjgKLS0tIC9kZXYvbnVsbAorKysgYi9jcHUvYXJtX2NvcnRleGE4L29tYXAzL2JvYXJkLmMKQEAgLTAsMCArMSwzNDQgQEAKKy8qCisgKgorICogQ29tbW9uIGJvYXJkIGZ1bmN0aW9ucyBmb3IgT01BUDMgYmFzZWQgYm9hcmRzLgorICoKKyAqIChDKSBDb3B5cmlnaHQgMjAwNC0yMDA4CisgKiBUZXhhcyBJbnN0cnVtZW50cywgPHd3dy50aS5jb20+CisgKgorICogQXV0aG9yIDoKKyAqICAgICAgU3VuaWwgS3VtYXIgPHN1bmlsc2FpbmkwNUBnbWFpbC5jb20+CisgKiAgICAgIFNoYXNoaSBSYW5qYW4gPHNoYXNoaXJhbmphbm1jYTA1QGdtYWlsLmNvbT4KKyAqCisgKiBEZXJpdmVkIGZyb20gQmVhZ2xlIEJvYXJkIGFuZCAzNDMwIFNEUCBjb2RlIGJ5CisgKiAgICAgIFJpY2hhcmQgV29vZHJ1ZmYgPHItd29vZHJ1ZmYyQHRpLmNvbT4KKyAqICAgICAgU3llZCBNb2hhbW1lZCBLaGFzaW0gPGtoYXNpbUB0aS5jb20+CisgKgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvc3lzX3Byb3RvLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvbWVtLmg+CisKK2V4dGVybiBvbWFwM19zeXNpbmZvIHN5c2luZm87CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFJvdXRpbmU6IGRlbGF5CisgKiBEZXNjcmlwdGlvbjogc3Bpbm5pbmcgZGVsYXkgdG8gdXNlIGJlZm9yZSB1ZGVsYXkgd29ya3MKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBkZWxheSh1bnNpZ25lZCBsb25nIGxvb3BzKQoreworCV9fYXNtX18gdm9sYXRpbGUgKCIxOlxuIiAic3VicyAlMCwgJTEsICMxXG4iCisJCQkgICJibmUgMWIiOiI9ciIgKGxvb3BzKToiMCIobG9vcHMpKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUm91dGluZTogc2VjdXJlX3VubG9jaworICogRGVzY3JpcHRpb246IFNldHVwIHNlY3VyaXR5IHJlZ2lzdGVycyBmb3IgYWNjZXNzCisgKiAgICAgICAgICAgICAgKEdQIERldmljZSBvbmx5KQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBzZWN1cmVfdW5sb2NrX21lbSh2b2lkKQoreworCXBtX3QgKnBtX3J0X2FwZV9iYXNlID0gKHBtX3QgKilQTV9SVF9BUEVfQkFTRV9BRERSX0FSTTsKKwlwbV90ICpwbV9ncG1jX2Jhc2UgPSAocG1fdCAqKVBNX0dQTUNfQkFTRV9BRERSX0FSTTsKKwlwbV90ICpwbV9vY21fcmFtX2Jhc2UgPSAocG1fdCAqKVBNX09DTV9SQU1fQkFTRV9BRERSX0FSTTsKKwlwbV90ICpwbV9pdmEyX2Jhc2UgPSAocG1fdCAqKVBNX0lWQTJfQkFTRV9BRERSX0FSTTsKKwlzbXNfdCAqc21zX2Jhc2UgPSAoc21zX3QgKilPTUFQMzRYWF9TTVNfQkFTRTsKKworCS8qIFByb3RlY3Rpb24gTW9kdWxlIFJlZ2lzdGVyIFRhcmdldCBBUEUgKFBNX1JUKSAqLworCXdyaXRlbChVTkxPQ0tfMSwgJnBtX3J0X2FwZV9iYXNlLT5yZXFfaW5mb19wZXJtaXNzaW9uXzEpOworCXdyaXRlbChVTkxPQ0tfMSwgJnBtX3J0X2FwZV9iYXNlLT5yZWFkX3Blcm1pc3Npb25fMCk7CisJd3JpdGVsKFVOTE9DS18xLCAmcG1fcnRfYXBlX2Jhc2UtPndpcnRlX3Blcm1pc3Npb25fMCk7CisJd3JpdGVsKFVOTE9DS18yLCAmcG1fcnRfYXBlX2Jhc2UtPmFkZHJfbWF0Y2hfMSk7CisKKwl3cml0ZWwoVU5MT0NLXzMsICZwbV9ncG1jX2Jhc2UtPnJlcV9pbmZvX3Blcm1pc3Npb25fMCk7CisJd3JpdGVsKFVOTE9DS18zLCAmcG1fZ3BtY19iYXNlLT5yZWFkX3Blcm1pc3Npb25fMCk7CisJd3JpdGVsKFVOTE9DS18zLCAmcG1fZ3BtY19iYXNlLT53aXJ0ZV9wZXJtaXNzaW9uXzApOworCisJd3JpdGVsKFVOTE9DS18zLCAmcG1fb2NtX3JhbV9iYXNlLT5yZXFfaW5mb19wZXJtaXNzaW9uXzApOworCXdyaXRlbChVTkxPQ0tfMywgJnBtX29jbV9yYW1fYmFzZS0+cmVhZF9wZXJtaXNzaW9uXzApOworCXdyaXRlbChVTkxPQ0tfMywgJnBtX29jbV9yYW1fYmFzZS0+d2lydGVfcGVybWlzc2lvbl8wKTsKKwl3cml0ZWwoVU5MT0NLXzIsICZwbV9vY21fcmFtX2Jhc2UtPmFkZHJfbWF0Y2hfMik7CisKKwkvKiBJVkEgQ2hhbmdlcyAqLworCXdyaXRlbChVTkxPQ0tfMywgJnBtX2l2YTJfYmFzZS0+cmVxX2luZm9fcGVybWlzc2lvbl8wKTsKKwl3cml0ZWwoVU5MT0NLXzMsICZwbV9pdmEyX2Jhc2UtPnJlYWRfcGVybWlzc2lvbl8wKTsKKwl3cml0ZWwoVU5MT0NLXzMsICZwbV9pdmEyX2Jhc2UtPndpcnRlX3Blcm1pc3Npb25fMCk7CisKKwkvKiBTRFJDIHJlZ2lvbiAwIHB1YmxpYyAqLworCXdyaXRlbChVTkxPQ0tfMSwgJnNtc19iYXNlLT5yZ19hdHQwKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUm91dGluZTogc2VjdXJld29ybGRfZXhpdCgpCisgKiBEZXNjcmlwdGlvbjogSWYgY2hpcCBpcyBFTVUgYW5kIGJvb3QgdHlwZSBpcyBleHRlcm5hbAorICoJCWNvbmZpZ3VyZSBzZWN1cmUgcmVnaXN0ZXJzIGFuZCBleGl0IHNlY3VyZSB3b3JsZAorICogICAgICAgICAgICAgIGdlbmVyYWwgdXNlLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBzZWN1cmV3b3JsZF9leGl0KCkKK3sKKwl1bnNpZ25lZCBsb25nIGk7CisKKwkvKiBjb25maWdydWUgbm9uLXNlY3VyZSBhY2Nlc3MgY29udHJvbCByZWdpc3RlciAqLworCV9fYXNtX18gX192b2xhdGlsZV9fKCJtcmMgcDE1LCAwLCAlMCwgYzEsIGMxLCAyIjoiPXIiKGkpKTsKKwkvKiBlbmFibGluZyBjby1wcm9jZXNzb3IgQ1AxMCBhbmQgQ1AxMSBhY2Nlc3NlcyBpbiBOUyB3b3JsZCAqLworCV9fYXNtX18gX192b2xhdGlsZV9fKCJvcnIgJTAsICUwLCAjMHhDMDAiOiI9ciIoaSkpOworCS8qCisJICogYWxsb3cgYWxsb2NhdGlvbiBvZiBsb2NrZWQgVExCcyBhbmQgTDIgbGluZXMgaW4gTlMgd29ybGQKKwkgKiBhbGxvdyB1c2Ugb2YgUExFIHJlZ2lzdGVycyBpbiBOUyB3b3JsZCBhbHNvCisJICovCisJX19hc21fXyBfX3ZvbGF0aWxlX18oIm9yciAlMCwgJTAsICMweDcwMDAwIjoiPXIiKGkpKTsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygibWNyIHAxNSwgMCwgJTAsIGMxLCBjMSwgMiI6Ij1yIihpKSk7CisKKwkvKiBFbmFibGUgQVNBIGluIEFDUiByZWdpc3RlciAqLworCV9fYXNtX18gX192b2xhdGlsZV9fKCJtcmMgcDE1LCAwLCAlMCwgYzEsIGMwLCAxIjoiPXIiKGkpKTsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygib3JyICUwLCAlMCwgIzB4MTAiOiI9ciIoaSkpOworCV9fYXNtX18gX192b2xhdGlsZV9fKCJtY3IgcDE1LCAwLCAlMCwgYzEsIGMwLCAxIjoiPXIiKGkpKTsKKworCS8qIEV4aXRpbmcgc2VjdXJlIHdvcmxkICovCisJX19hc21fXyBfX3ZvbGF0aWxlX18oIm1yYyBwMTUsIDAsICUwLCBjMSwgYzEsIDAiOiI9ciIoaSkpOworCV9fYXNtX18gX192b2xhdGlsZV9fKCJvcnIgJTAsICUwLCAjMHgzMSI6Ij1yIihpKSk7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oIm1jciBwMTUsIDAsICUwLCBjMSwgYzEsIDAiOiI9ciIoaSkpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBSb3V0aW5lOiBzZXR1cF9hdXhjcigpCisgKiBEZXNjcmlwdGlvbjogV3JpdGUgdG8gQXV4Q1IgZGVzaXJlZCB2YWx1ZSB1c2luZyBTTUkuCisgKiAgICAgICAgICAgICAgZ2VuZXJhbCB1c2UuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIHNldHVwX2F1eGNyKCkKK3sKKwl1bnNpZ25lZCBsb25nIGk7CisJdm9sYXRpbGUgdW5zaWduZWQgaW50IGo7CisJLyogU2F2ZSByMCwgcjEyIGFuZCByZXN0b3JlIHRoZW0gYWZ0ZXIgdXNhZ2UgKi8KKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygibW92ICUwLCByMTIiOiI9ciIoaikpOworCV9fYXNtX18gX192b2xhdGlsZV9fKCJtb3YgJTAsIHIwIjoiPXIiKGkpKTsKKworCS8qCisJICogR1AgRGV2aWNlIFJPTSBjb2RlIEFQSSB1c2FnZSBoZXJlCisJICogcjEyID0gQVVYQ1IgV3JpdGUgZnVuY3Rpb24gYW5kIHIwIHZhbHVlCisJICovCisJX19hc21fXyBfX3ZvbGF0aWxlX18oIm1vdiByMTIsICMweDMiKTsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygibXJjIHAxNSwgMCwgcjAsIGMxLCBjMCwgMSIpOworCS8qIEVuYWJsaW5nIEFTQSAqLworCV9fYXNtX18gX192b2xhdGlsZV9fKCJvcnIgcjAsIHIwLCAjMHgxMCIpOworCS8qIEVuYWJsZSBMMU5FT04gKi8KKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygib3JyIHIwLCByMCwgIzEgPDwgNSIpOworCS8qIFNNSSBpbnN0cnVjdGlvbiB0byBjYWxsIFJPTSBDb2RlIEFQSSAqLworCV9fYXNtX18gX192b2xhdGlsZV9fKCIud29yZCAweEUxNjAwMDcwIik7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oIm1vdiByMCwgJTAiOiI9ciIoaSkpOworCV9fYXNtX18gX192b2xhdGlsZV9fKCJtb3YgcjEyLCAlMCI6Ij1yIihqKSk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFJvdXRpbmU6IHRyeV91bmxvY2tfc3JhbSgpCisgKiBEZXNjcmlwdGlvbjogSWYgY2hpcCBpcyBHUC9FTVUoc3BlY2lhbCkgdHlwZSwgdW5sb2NrIHRoZSBTUkFNIGZvcgorICogICAgICAgICAgICAgIGdlbmVyYWwgdXNlLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCB0cnlfdW5sb2NrX21lbW9yeSgpCit7CisJaW50IG1vZGU7CisJaW50IGluX3NkcmFtID0gaXNfcnVubmluZ19pbl9zZHJhbSgpOworCisJLyoKKwkgKiBpZiBHUCBkZXZpY2UgdW5sb2NrIGRldmljZSBTUkFNIGZvciBnZW5lcmFsIHVzZQorCSAqIHNlY3VyZSBjb2RlIGJyZWFrcyBmb3IgU2VjdXJlL0VtdWxhdGlvbiBkZXZpY2UgLSBIUy9FL1QKKwkgKi8KKwltb2RlID0gZ2V0X2RldmljZV90eXBlKCk7CisJaWYgKG1vZGUgPT0gR1BfREVWSUNFKQorCQlzZWN1cmVfdW5sb2NrX21lbSgpOworCisJLyoKKwkgKiBJZiBkZXZpY2UgaXMgRU1VIGFuZCBib290IGlzIFhJUCBleHRlcm5hbCBib290aW5nCisJICogVW5sb2NrIGZpcmV3YWxscyBhbmQgZGlzYWJsZSBMMiBhbmQgcHV0IGNoaXAKKwkgKiBvdXQgb2Ygc2VjdXJlIHdvcmxkCisJICoKKwkgKiBBc3N1bWluZyBtZW1vcmllcyBhcmUgdW5sb2NrZWQgYnkgdGhlIGRlbW9uIHdobyBwdXQgdXMgaW4gU0RSQU0KKwkgKi8KKwlpZiAoKG1vZGUgPD0gRU1VX0RFVklDRSkgJiYgKGdldF9ib290X3R5cGUoKSA9PSAweDFGKQorCSAgICAmJiAoIWluX3NkcmFtKSkgeworCQlzZWN1cmVfdW5sb2NrX21lbSgpOworCQlzZWN1cmV3b3JsZF9leGl0KCk7CisJfQorCisJcmV0dXJuOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBSb3V0aW5lOiBzX2luaXQKKyAqIERlc2NyaXB0aW9uOiBEb2VzIGVhcmx5IHN5c3RlbSBpbml0IG9mIG11eGluZyBhbmQgY2xvY2tzLgorICogICAgICAgICAgICAgIC0gQ2FsbGVkIHBhdGggaXMgd2l0aCBTUkFNIHN0YWNrLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBzX2luaXQodm9pZCkKK3sKKwlpbnQgaW5fc2RyYW0gPSBpc19ydW5uaW5nX2luX3NkcmFtKCk7CisKKwl3YXRjaGRvZ19pbml0KCk7CisKKwl0cnlfdW5sb2NrX21lbW9yeSgpOworCisJLyoKKwkgKiBSaWdodCBub3cgZmx1c2hpbmcgYXQgbG93IE1QVSBzcGVlZC4KKwkgKiBOZWVkIHRvIG1vdmUgYWZ0ZXIgY2xvY2sgaW5pdAorCSAqLworCXY3X2ZsdXNoX2RjYWNoZV9hbGwoZ2V0X2RldmljZV90eXBlKCkpOworI2lmbmRlZiBDT05GSUdfSUNBQ0hFX09GRgorCWljYWNoZV9lbmFibGUoKTsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0wyX09GRgorCWwyY2FjaGVfZGlzYWJsZSgpOworI2Vsc2UKKwlsMmNhY2hlX2VuYWJsZSgpOworI2VuZGlmCisJLyoKKwkgKiBXcml0aW5nIHRvIEF1eENSIGluIFUtYm9vdCB1c2luZyBTTUkgZm9yIEdQIERFVgorCSAqIEN1cnJlbnRseSBTTUkgaW4gS2VybmVsIG9uIEVTMiBkZXZpY2VzIHNlZW1zIHRvIGhhdmUgYW4gaXNzdWUKKwkgKiBPbmNlIHRoYXQgaXMgcmVzb2x2ZWQsIHdlIGNhbiBwb3N0cG9uZSB0aGlzIGNvbmZpZyB0byBrZXJuZWwKKwkgKi8KKwlpZiAoZ2V0X2RldmljZV90eXBlKCkgPT0gR1BfREVWSUNFKQorCQlzZXR1cF9hdXhjcigpOworCisJc2V0X211eGNvbmZfcmVncygpOworCWRlbGF5KDEwMCk7CisKKwlwcmNtX2luaXQoKTsKKworCXBlcl9jbG9ja3NfZW5hYmxlKCk7CisKKwlpZiAoIWluX3NkcmFtKQorCQlzZHJjX2luaXQoKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUm91dGluZTogd2FpdF9mb3JfY29tbWFuZF9jb21wbGV0ZQorICogRGVzY3JpcHRpb246IFdhaXQgZm9yIHBvc3RpbmcgdG8gZmluaXNoIG9uIHdhdGNoZG9nCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIHdhaXRfZm9yX2NvbW1hbmRfY29tcGxldGUod2F0Y2hkb2dfdCAqd2RfYmFzZSkKK3sKKwlpbnQgcGVuZGluZyA9IDE7CisJZG8geworCQlwZW5kaW5nID0gcmVhZGwoJndkX2Jhc2UtPnd3cHMpOworCX0gd2hpbGUgKHBlbmRpbmcpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBSb3V0aW5lOiB3YXRjaGRvZ19pbml0CisgKiBEZXNjcmlwdGlvbjogU2h1dCBkb3duIHdhdGNoIGRvZ3MKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgd2F0Y2hkb2dfaW5pdCh2b2lkKQoreworCXdhdGNoZG9nX3QgKndkMl9iYXNlID0gKHdhdGNoZG9nX3QgKilXRDJfQkFTRTsKKwlwcmNtX3QgKnByY21fYmFzZSA9IChwcmNtX3QgKilQUkNNX0JBU0U7CisKKwkvKgorCSAqIFRoZXJlIGFyZSAzIHdhdGNoIGRvZ3MgV0QxPVNlY3VyZSwgV0QyPU1QVSwgV0QzPUlWQS4gV0QxIGlzCisJICogZWl0aGVyIHRha2VuIGNhcmUgb2YgYnkgUk9NIChIUy9FTVUpIG9yIG5vdCBhY2Nlc3NpYmxlIChHUCkuCisJICogV2UgbmVlZCB0byB0YWtlIGNhcmUgb2YgV0QyLU1QVSBvciB0YWtlIGEgUFJDTSByZXNldC4gV0QzCisJICogc2hvdWxkIG5vdCBiZSBydW5uaW5nIGFuZCBkb2VzIG5vdCBnZW5lcmF0ZSBhIFBSQ00gcmVzZXQuCisJICovCisKKwlzcjMyKCZwcmNtX2Jhc2UtPmZjbGtlbl93a3VwLCA1LCAxLCAxKTsKKwlzcjMyKCZwcmNtX2Jhc2UtPmljbGtlbl93a3VwLCA1LCAxLCAxKTsKKwl3YWl0X29uX3ZhbHVlKFNUX1dEVDIsIDB4MjAsICZwcmNtX2Jhc2UtPmlkbGVzdF93a3VwLCA1KTsKKworCXdyaXRlbChXRF9VTkxPQ0sxLCAmd2QyX2Jhc2UtPndzcHIpOworCXdhaXRfZm9yX2NvbW1hbmRfY29tcGxldGUod2QyX2Jhc2UpOworCXdyaXRlbChXRF9VTkxPQ0syLCAmd2QyX2Jhc2UtPndzcHIpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBSb3V0aW5lOiBkcmFtX2luaXQKKyAqIERlc2NyaXB0aW9uOiBzZXRzIHVib290cyBpZGVhIG9mIHNkcmFtIHNpemUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ludCBkcmFtX2luaXQodm9pZCkKK3sKKwlERUNMQVJFX0dMT0JBTF9EQVRBX1BUUjsKKwl1bnNpZ25lZCBpbnQgc2l6ZTAgPSAwLCBzaXplMSA9IDA7CisJdTMyIGJ0eXBlOworCisJYnR5cGUgPSBnZXRfYm9hcmRfdHlwZSgpOworCisJZGlzcGxheV9ib2FyZF9pbmZvKGJ0eXBlKTsKKworCS8qCisJICogSWYgYSBzZWNvbmQgYmFuayBvZiBERFIgaXMgYXR0YWNoZWQgdG8gQ1MxIHRoaXMgaXMKKwkgKiB3aGVyZSBpdCBjYW4gYmUgc3RhcnRlZC4gIEVhcmx5IGluaXQgY29kZSB3aWxsIGluaXQKKwkgKiBtZW1vcnkgb24gQ1MwLgorCSAqLworCWlmICgoc3lzaW5mby5tdHlwZSA9PSBERFJfQ09NQk8pIHx8IChzeXNpbmZvLm10eXBlID09IEREUl9TVEFDS0VEKSkgeworCQlkb19zZHJjX2luaXQoQ1MxLCBOT1RfRUFSTFkpOworCQltYWtlX2NzMV9jb250aWd1b3VzKCk7CisJfQorCisJc2l6ZTAgPSBnZXRfc2RyX2NzX3NpemUoQ1MwKTsKKwlzaXplMSA9IGdldF9zZHJfY3Nfc2l6ZShDUzEpOworCisJZ2QtPmJkLT5iaV9kcmFtWzBdLnN0YXJ0ID0gUEhZU19TRFJBTV8xOworCWdkLT5iZC0+YmlfZHJhbVswXS5zaXplID0gc2l6ZTA7CisJZ2QtPmJkLT5iaV9kcmFtWzFdLnN0YXJ0ID0gUEhZU19TRFJBTV8xICsgZ2V0X3Nkcl9jc19vZmZzZXQoQ1MxKTsKKwlnZC0+YmQtPmJpX2RyYW1bMV0uc2l6ZSA9IHNpemUxOworCisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIER1bW15IGZ1bmN0aW9uIHRvIGhhbmRsZSBlcnJvcnMgZm9yIEVBQkkgaW5jb21wYXRpYmlsaXR5CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIHJhaXNlKHZvaWQpCit7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIER1bW15IGZ1bmN0aW9uIHRvIGhhbmRsZSBlcnJvcnMgZm9yIEVBQkkgaW5jb21wYXRpYmlsaXR5CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIGFib3J0KHZvaWQpCit7Cit9CisKKyNpZmRlZiBDT05GSUdfTkFORF9PTUFQX0dQTUMKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIE9NQVAzIHNwZWNpZmljIGNvbW1hbmQgdG8gc3dpdGNoIGJldHdlZW4gTkFORCBIVyBhbmQgU1cgZWNjCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IGRvX3N3aXRjaF9lY2MoY21kX3RibF90ICogY21kdHAsIGludCBmbGFnLCBpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCWlmIChhcmdjICE9IDIpCisJCWdvdG8gdXNhZ2U7CisJaWYgKHN0cm5jbXAoYXJndlsxXSwgImh3IiwgMikgPT0gMCkKKwkJb21hcF9uYW5kX3N3aXRjaF9lY2MoMSk7CisJZWxzZSBpZiAoc3RybmNtcChhcmd2WzFdLCAic3ciLCAyKSA9PSAwKQorCQlvbWFwX25hbmRfc3dpdGNoX2VjYygwKTsKKwllbHNlCisJCWdvdG8gdXNhZ2U7CisKKwlyZXR1cm4gMDsKKwordXNhZ2U6CisJcHJpbnRmICgiVXNhZ2U6IG5hbmRlY2MgJXNcbiIsIGNtZHRwLT5oZWxwKTsKKwlyZXR1cm4gMTsKK30KKworVV9CT09UX0NNRCgKKwluYW5kZWNjLCAyLCAxLAlkb19zd2l0Y2hfZWNjLAorCSJuYW5kZWNjIC0gc3dpdGNoIE9NQVAzIE5BTkQgRUNDIGNhbGN1bGF0aW9uIGFsZ29yaXRobVxuIiwKKwkiW2h3L3N3XSAtIFN3aXRjaCBiZXR3ZWVuIE5BTkQgaGFyZHdhcmUgKGh3KSBvciBzb2Z0d2FyZSAoc3cpIGVjYyBhbGdvcml0aG1cbiIKKwkpOworCisjZW5kaWYgLyogQ09ORklHX05BTkRfT01BUF9HUE1DICovCmRpZmYgLS1naXQgYS9jcHUvYXJtX2NvcnRleGE4L29tYXAzL2Nsb2NrLmMgYi9jcHUvYXJtX2NvcnRleGE4L29tYXAzL2Nsb2NrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGFjMzFiZQotLS0gL2Rldi9udWxsCisrKyBiL2NwdS9hcm1fY29ydGV4YTgvb21hcDMvY2xvY2suYwpAQCAtMCwwICsxLDM4MSBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwOAorICogVGV4YXMgSW5zdHJ1bWVudHMsIDx3d3cudGkuY29tPgorICoKKyAqIEF1dGhvciA6CisgKiAgICAgIE1hbmlrYW5kYW4gUGlsbGFpIDxtYW5pLnBpbGxhaUB0aS5jb20+CisgKgorICogRGVyaXZlZCBmcm9tIEJlYWdsZSBCb2FyZCBhbmQgT01BUDMgU0RQIGNvZGUgYnkKKyAqICAgICAgUmljaGFyZCBXb29kcnVmZiA8ci13b29kcnVmZjJAdGkuY29tPgorICogICAgICBTeWVkIE1vaGFtbWVkIEtoYXNpbSA8a2hhc2ltQHRpLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvY2xvY2tzLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvY2xvY2tzX29tYXAzLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvbWVtLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvc3lzX3Byb3RvLmg+CisjaW5jbHVkZSA8ZW52aXJvbm1lbnQuaD4KKyNpbmNsdWRlIDxjb21tYW5kLmg+CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGdldF9zeXNfY2xrX3NwZWVkKCkgLSBkZXRlcm1pbmUgcmVmZXJlbmNlIG9zY2lsbGF0b3Igc3BlZWQKKyAqICAgICAgICAgICAgICAgICAgICAgICBiYXNlZCBvbiBrbm93biAzMmtIeiBjbG9jayBhbmQgZ3B0aW1lci4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3UzMiBnZXRfb3NjX2Nsa19zcGVlZCh2b2lkKQoreworCXUzMiBzdGFydCwgY3N0YXJ0LCBjZW5kLCBjZGlmZiwgdmFsOworCXByY21fdCAqcHJjbV9iYXNlID0gKHByY21fdCAqKVBSQ01fQkFTRTsKKwlwcm1fdCAqcHJtX2Jhc2UgPSAocHJtX3QgKilQUk1fQkFTRTsKKwlncHRpbWVyX3QgKmdwdDFfYmFzZSA9IChncHRpbWVyX3QgKilPTUFQMzRYWF9HUFQxOworCXMzMmt0aW1lcl90ICpzMzJrX2Jhc2UgPSAoczMya3RpbWVyX3QgKilTWU5DXzMyS1RJTUVSX0JBU0U7CisKKwl2YWwgPSByZWFkbCgmcHJtX2Jhc2UtPmNsa3NyY19jdHJsKTsKKworCS8qIElmIFNZU19DTEsgaXMgYmVpbmcgZGl2aWRlZCBieSAyLCByZW1vdmUgZm9yIG5vdyAqLworCXZhbCA9ICh2YWwgJiAoflNZU0NMS0RJVl8yKSkgfCBTWVNDTEtESVZfMTsKKwl3cml0ZWwodmFsLCAmcHJtX2Jhc2UtPmNsa3NyY19jdHJsKTsKKworCS8qIGVuYWJsZSB0aW1lcjIgKi8KKwl2YWwgPSByZWFkbCgmcHJjbV9iYXNlLT5jbGtzZWxfd2t1cCkgfCBDTEtTRUxfR1BUMTsKKworCS8qIHNlbGVjdCBzeXNfY2xrIGZvciBHUFQxICovCisJd3JpdGVsKHZhbCwgJnByY21fYmFzZS0+Y2xrc2VsX3drdXApOworCisJLyogRW5hYmxlIEkgYW5kIEYgQ2xvY2tzIGZvciBHUFQxICovCisJdmFsID0gcmVhZGwoJnByY21fYmFzZS0+aWNsa2VuX3drdXApIHwgRU5fR1BUMSB8IEVOXzMyS1NZTkM7CisJd3JpdGVsKHZhbCwgJnByY21fYmFzZS0+aWNsa2VuX3drdXApOworCXZhbCA9IHJlYWRsKCZwcmNtX2Jhc2UtPmZjbGtlbl93a3VwKSB8IEVOX0dQVDE7CisJd3JpdGVsKHZhbCwgJnByY21fYmFzZS0+ZmNsa2VuX3drdXApOworCisJd3JpdGVsKDAsICZncHQxX2Jhc2UtPnRsZHIpOwkJLyogc3RhcnQgY291bnRpbmcgYXQgMCAqLworCXdyaXRlbChHUFRfRU4sICZncHQxX2Jhc2UtPnRjbHIpOwkvKiBlbmFibGUgY2xvY2sgKi8KKworCS8qIGVuYWJsZSAzMmtIeiBzb3VyY2UsIGRldGVybWluZSBzeXNfY2xrIHZpYSBnYXVnaW5nICovCisKKwkvKiBzdGFydCB0aW1lIGluIDIwIGN5Y2xlcyAqLworCXN0YXJ0ID0gMjAgKyByZWFkbCgmczMya19iYXNlLT5zMzJrX2NyKTsKKworCS8qIGRlYWQgbG9vcCB0aWxsIHN0YXJ0IHRpbWUgKi8KKwl3aGlsZSAocmVhZGwoJnMzMmtfYmFzZS0+czMya19jcikgPCBzdGFydCk7CisKKwkvKiBnZXQgc3RhcnQgc3lzX2NsayBjb3VudCAqLworCWNzdGFydCA9IHJlYWRsKCZncHQxX2Jhc2UtPnRjcnIpOworCisJLyogd2FpdCBmb3IgNDAgY3ljbGVzICovCisJd2hpbGUgKHJlYWRsKCZzMzJrX2Jhc2UtPnMzMmtfY3IpIDwgKHN0YXJ0ICsgMjApKSA7CisJY2VuZCA9IHJlYWRsKCZncHQxX2Jhc2UtPnRjcnIpOwkJLyogZ2V0IGVuZCBzeXNfY2xrIGNvdW50ICovCisJY2RpZmYgPSBjZW5kIC0gY3N0YXJ0OwkJCS8qIGdldCBlbGFwc2VkIHRpY2tzICovCisKKwkvKiBiYXNlZCBvbiBudW1iZXIgb2YgdGlja3MgYXNzaWduIHNwZWVkICovCisJaWYgKGNkaWZmID4gMTkwMDApCisJCXJldHVybiBTMzhfNE07CisJZWxzZSBpZiAoY2RpZmYgPiAxNTIwMCkKKwkJcmV0dXJuIFMyNk07CisJZWxzZSBpZiAoY2RpZmYgPiAxMzAwMCkKKwkJcmV0dXJuIFMyNE07CisJZWxzZSBpZiAoY2RpZmYgPiA5MDAwKQorCQlyZXR1cm4gUzE5XzJNOworCWVsc2UgaWYgKGNkaWZmID4gNzYwMCkKKwkJcmV0dXJuIFMxM007CisJZWxzZQorCQlyZXR1cm4gUzEyTTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogZ2V0X3N5c19jbGtpbl9zZWwoKSAtIHJldHVybnMgdGhlIHN5c19jbGtpbl9zZWwgZmllbGQgdmFsdWUgYmFzZWQgb24KKyAqICAgICAgICAgICAgICAgICAgICAgICBpbnB1dCBvc2NpbGxhdG9yIGNsb2NrIGZyZXF1ZW5jeS4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgZ2V0X3N5c19jbGtpbl9zZWwodTMyIG9zY19jbGssIHUzMiAqc3lzX2Nsa2luX3NlbCkKK3sKKwlzd2l0Y2gob3NjX2NsaykgeworCWNhc2UgUzM4XzRNOgorCQkqc3lzX2Nsa2luX3NlbCA9IDQ7CisJCWJyZWFrOworCWNhc2UgUzI2TToKKwkJKnN5c19jbGtpbl9zZWwgPSAzOworCQlicmVhazsKKwljYXNlIFMxOV8yTToKKwkJKnN5c19jbGtpbl9zZWwgPSAyOworCQlicmVhazsKKwljYXNlIFMxM006CisJCSpzeXNfY2xraW5fc2VsID0gMTsKKwkJYnJlYWs7CisJY2FzZSBTMTJNOgorCWRlZmF1bHQ6CisJCSpzeXNfY2xraW5fc2VsID0gMDsKKwl9Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIHByY21faW5pdCgpIC0gaW5pdHMgY2xvY2tzIGZvciBQUkNNIGFzIGRlZmluZWQgaW4gY2xvY2tzLmgKKyAqICAgICAgICAgICAgICAgY2FsbGVkIGZyb20gU1JBTSwgb3IgRmxhc2ggKHVzaW5nIHRlbXAgU1JBTSBzdGFjaykuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIHByY21faW5pdCh2b2lkKQoreworCXZvaWQgKCpmX2xvY2tfcGxsKSAodTMyLCB1MzIsIHUzMiwgdTMyKTsKKwlpbnQgeGlwX3NhZmUsIHAwLCBwMSwgcDIsIHAzOworCXUzMiBvc2NfY2xrID0gMCwgc3lzX2Nsa2luX3NlbDsKKwl1MzIgY2xrX2luZGV4LCBzaWxfaW5kZXg7CisJcHJtX3QgKnBybV9iYXNlID0gKHBybV90ICopUFJNX0JBU0U7CisJcHJjbV90ICpwcmNtX2Jhc2UgPSAocHJjbV90ICopUFJDTV9CQVNFOworCWRwbGxfcGFyYW0gKmRwbGxfcGFyYW1fcDsKKworCWZfbG9ja19wbGwgPSAodm9pZCAqKSAoKHUzMikgJl9lbmRfdmVjdCAtICh1MzIpICZfc3RhcnQgKworCQkJCVNSQU1fVkVDVF9DT0RFKTsKKworCXhpcF9zYWZlID0gaXNfcnVubmluZ19pbl9zcmFtKCk7CisKKwkvKgorCSAqIEdhdWdlIHRoZSBpbnB1dCBjbG9jayBzcGVlZCBhbmQgZmluZCBvdXQgdGhlIHN5c19jbGtpbl9zZWwKKwkgKiB2YWx1ZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBpbnB1dCBjbG9jay4KKwkgKi8KKwlvc2NfY2xrID0gZ2V0X29zY19jbGtfc3BlZWQoKTsKKwlnZXRfc3lzX2Nsa2luX3NlbChvc2NfY2xrLCAmc3lzX2Nsa2luX3NlbCk7CisKKwkvKiBzZXQgaW5wdXQgY3J5c3RhbCBzcGVlZCAqLworCXNyMzIoJnBybV9iYXNlLT5jbGtzZWwsIDAsIDMsIHN5c19jbGtpbl9zZWwpOworCisJLyogSWYgdGhlIGlucHV0IGNsb2NrIGlzIGdyZWF0ZXIgdGhhbiAxOS4yTSBhbHdheXMgZGl2aWRlLzIgKi8KKwlpZiAoc3lzX2Nsa2luX3NlbCA+IDIpIHsKKwkJLyogaW5wdXQgY2xvY2sgZGl2aWRlciAqLworCQlzcjMyKCZwcm1fYmFzZS0+Y2xrc3JjX2N0cmwsIDYsIDIsIDIpOworCQljbGtfaW5kZXggPSBzeXNfY2xraW5fc2VsIC8gMjsKKwl9IGVsc2UgeworCQkvKiBpbnB1dCBjbG9jayBkaXZpZGVyICovCisJCXNyMzIoJnBybV9iYXNlLT5jbGtzcmNfY3RybCwgNiwgMiwgMSk7CisJCWNsa19pbmRleCA9IHN5c19jbGtpbl9zZWw7CisJfQorCisJLyoKKwkgKiBUaGUgRFBMTCB0YWJsZXMgYXJlIGRlZmluZWQgYWNjb3JkaW5nIHRvIHN5c2NsayB2YWx1ZSBhbmQKKwkgKiBzaWxpY29uIHJldmlzaW9uLiBUaGUgY2xrX2luZGV4IHZhbHVlIHdpbGwgYmUgdXNlZCB0byBnZXQKKwkgKiB0aGUgdmFsdWVzIGZvciB0aGF0IGlucHV0IHN5c2NsayBmcm9tIHRoZSBEUExMIHBhcmFtIHRhYmxlCisJICogYW5kIHNpbF9pbmRleCB3aWxsIGdldCB0aGUgdmFsdWVzIGZvciB0aGF0IFN5c0NsayBmb3IgdGhlCisJICogYXBwcm9wcmlhdGUgc2lsaWNvbiByZXYuCisJICovCisJc2lsX2luZGV4ID0gZ2V0X2NwdV9yZXYoKSAtIDE7CisKKwkvKiBVbmxvY2sgTVBVIERQTEwgKHNsb3dzIHRoaW5ncyBkb3duLCBhbmQgbmVlZGVkIGxhdGVyKSAqLworCXNyMzIoJnByY21fYmFzZS0+Y2xrZW5fcGxsX21wdSwgMCwgMywgUExMX0xPV19QT1dFUl9CWVBBU1MpOworCXdhaXRfb25fdmFsdWUoU1RfTVBVX0NMSywgMCwgJnByY21fYmFzZS0+aWRsZXN0X3BsbF9tcHUsIExERUxBWSk7CisKKwkvKiBHZXR0aW5nIHRoZSBiYXNlIGFkZHJlc3Mgb2YgQ29yZSBEUExMIHBhcmFtIHRhYmxlICovCisJZHBsbF9wYXJhbV9wID0gKGRwbGxfcGFyYW0gKikgZ2V0X2NvcmVfZHBsbF9wYXJhbSgpOworCisJLyogTW92aW5nIGl0IHRvIHRoZSByaWdodCBzeXNjbGsgYW5kIEVTIHJldiBiYXNlICovCisJZHBsbF9wYXJhbV9wID0gZHBsbF9wYXJhbV9wICsgMyAqIGNsa19pbmRleCArIHNpbF9pbmRleDsKKwlpZiAoeGlwX3NhZmUpIHsKKwkJLyoKKwkJICogQ09SRSBEUExMCisJCSAqIHNyMzIoQ01fQ0xLU0VMMl9FTVUpIHNldCBvdmVycmlkZSB0byB3b3JrIHdoZW4gYXNsZWVwCisJCSAqLworCQlzcjMyKCZwcmNtX2Jhc2UtPmNsa2VuX3BsbCwgMCwgMywgUExMX0ZBU1RfUkVMT0NLX0JZUEFTUyk7CisJCXdhaXRfb25fdmFsdWUoU1RfQ09SRV9DTEssIDAsICZwcmNtX2Jhc2UtPmlkbGVzdF9ja2dlbiwKKwkJCQlMREVMQVkpOworCisJCS8qCisJCSAqIEZvciBPTUFQMyBFUzEuMCBFcnJhdGEgMS41MCwgZGVmYXVsdCB2YWx1ZSBkaXJlY3RseSBkb2Vzbid0CisJCSAqIHdvcmsuIHdyaXRlIGFub3RoZXIgdmFsdWUgYW5kIHRoZW4gZGVmYXVsdCB2YWx1ZS4KKwkJICovCisKKwkJLyogbTN4MiAqLworCQlzcjMyKCZwcmNtX2Jhc2UtPmNsa3NlbDFfZW11LCAxNiwgNSwgQ09SRV9NM1gyICsgMSk7CisJCS8qIG0zeDIgKi8KKwkJc3IzMigmcHJjbV9iYXNlLT5jbGtzZWwxX2VtdSwgMTYsIDUsIENPUkVfTTNYMik7CisJCS8qIFNldCBNMiAqLworCQlzcjMyKCZwcmNtX2Jhc2UtPmNsa3NlbDFfcGxsLCAyNywgMiwgZHBsbF9wYXJhbV9wLT5tMik7CisJCS8qIFNldCBNICovCisJCXNyMzIoJnByY21fYmFzZS0+Y2xrc2VsMV9wbGwsIDE2LCAxMSwgZHBsbF9wYXJhbV9wLT5tKTsKKwkJLyogU2V0IE4gKi8KKwkJc3IzMigmcHJjbV9iYXNlLT5jbGtzZWwxX3BsbCwgOCwgNywgZHBsbF9wYXJhbV9wLT5uKTsKKwkJLyogOTZNIFNyYyAqLworCQlzcjMyKCZwcmNtX2Jhc2UtPmNsa3NlbDFfcGxsLCA2LCAxLCAwKTsKKwkJLyogc3NpICovCisJCXNyMzIoJnByY21fYmFzZS0+Y2xrc2VsX2NvcmUsIDgsIDQsIENPUkVfU1NJX0RJVik7CisJCS8qIGZzdXNiICovCisJCXNyMzIoJnByY21fYmFzZS0+Y2xrc2VsX2NvcmUsIDQsIDIsIENPUkVfRlVTQl9ESVYpOworCQkvKiBsNCAqLworCQlzcjMyKCZwcmNtX2Jhc2UtPmNsa3NlbF9jb3JlLCAyLCAyLCBDT1JFX0w0X0RJVik7CisJCS8qIGwzICovCisJCXNyMzIoJnByY21fYmFzZS0+Y2xrc2VsX2NvcmUsIDAsIDIsIENPUkVfTDNfRElWKTsKKwkJLyogZ2Z4ICovCisJCXNyMzIoJnByY21fYmFzZS0+Y2xrc2VsX2dmeCwgMCwgMywgR0ZYX0RJVik7CisJCS8qIHJlc2V0IG1nciAqLworCQlzcjMyKCZwcmNtX2Jhc2UtPmNsa3NlbF93a3VwLCAxLCAyLCBXS1VQX1JTTSk7CisJCS8qIEZSRVFTRUwgKi8KKwkJc3IzMigmcHJjbV9iYXNlLT5jbGtlbl9wbGwsIDQsIDQsIGRwbGxfcGFyYW1fcC0+ZnNlbCk7CisJCS8qIGxvY2sgbW9kZSAqLworCQlzcjMyKCZwcmNtX2Jhc2UtPmNsa2VuX3BsbCwgMCwgMywgUExMX0xPQ0spOworCisJCXdhaXRfb25fdmFsdWUoU1RfQ09SRV9DTEssIDEsICZwcmNtX2Jhc2UtPmlkbGVzdF9ja2dlbiwKKwkJCQlMREVMQVkpOworCX0gZWxzZSBpZiAoaXNfcnVubmluZ19pbl9mbGFzaCgpKSB7CisJCS8qCisJCSAqIGlmIHJ1bm5pbmcgZnJvbSBmbGFzaCwganVtcCB0byBzbWFsbCByZWxvY2F0ZWQgY29kZQorCQkgKiBhcmVhIGluIFNSQU0uCisJCSAqLworCQlwMCA9IHJlYWRsKCZwcmNtX2Jhc2UtPmNsa2VuX3BsbCk7CisJCXNyMzIoJnAwLCAwLCAzLCBQTExfRkFTVF9SRUxPQ0tfQllQQVNTKTsKKwkJc3IzMigmcDAsIDQsIDQsIGRwbGxfcGFyYW1fcC0+ZnNlbCk7CS8qIEZSRVFTRUwgKi8KKworCQlwMSA9IHJlYWRsKCZwcmNtX2Jhc2UtPmNsa3NlbDFfcGxsKTsKKwkJc3IzMigmcDEsIDI3LCAyLCBkcGxsX3BhcmFtX3AtPm0yKTsJLyogU2V0IE0yICovCisJCXNyMzIoJnAxLCAxNiwgMTEsIGRwbGxfcGFyYW1fcC0+bSk7CS8qIFNldCBNICovCisJCXNyMzIoJnAxLCA4LCA3LCBkcGxsX3BhcmFtX3AtPm4pOwkJLyogU2V0IE4gKi8KKwkJc3IzMigmcDEsIDYsIDEsIDApOwkvKiBzZXQgc291cmNlIGZvciA5Nk0gKi8KKworCQlwMiA9IHJlYWRsKCZwcmNtX2Jhc2UtPmNsa3NlbF9jb3JlKTsKKwkJc3IzMigmcDIsIDgsIDQsIENPUkVfU1NJX0RJVik7CS8qIHNzaSAqLworCQlzcjMyKCZwMiwgNCwgMiwgQ09SRV9GVVNCX0RJVik7CS8qIGZzdXNiICovCisJCXNyMzIoJnAyLCAyLCAyLCBDT1JFX0w0X0RJVik7CS8qIGw0ICovCisJCXNyMzIoJnAyLCAwLCAyLCBDT1JFX0wzX0RJVik7CS8qIGwzICovCisKKwkJcDMgPSAodTMyKSZwcmNtX2Jhc2UtPmlkbGVzdF9ja2dlbjsKKworCQkoKmZfbG9ja19wbGwpIChwMCwgcDEsIHAyLCBwMyk7CisJfQorCisJLyogUEVSIERQTEwgKi8KKwlzcjMyKCZwcmNtX2Jhc2UtPmNsa2VuX3BsbCwgMTYsIDMsIFBMTF9TVE9QKTsKKwl3YWl0X29uX3ZhbHVlKFNUX1BFUklQSF9DTEssIDAsICZwcmNtX2Jhc2UtPmlkbGVzdF9ja2dlbiwgTERFTEFZKTsKKworCS8qIEdldHRpbmcgdGhlIGJhc2UgYWRkcmVzcyB0byBQRVIgRFBMTCBwYXJhbSB0YWJsZSAqLworCisJLyogU2V0IE4gKi8KKwlkcGxsX3BhcmFtX3AgPSAoZHBsbF9wYXJhbSAqKSBnZXRfcGVyX2RwbGxfcGFyYW0oKTsKKworCS8qIE1vdmluZyBpdCB0byB0aGUgcmlnaHQgc3lzY2xrIGJhc2UgKi8KKwlkcGxsX3BhcmFtX3AgPSBkcGxsX3BhcmFtX3AgKyBjbGtfaW5kZXg7CisKKwkvKgorCSAqIEVycmF0YSAxLjUwIFdvcmthcm91bmQgZm9yIE9NQVAzIEVTMS4wIG9ubHkKKwkgKiBJZiB1c2luZyBkZWZhdWx0IGRpdmlzb3JzLCB3cml0ZSBkZWZhdWx0IGRpdmlzb3IgKyAxCisJICogYW5kIHRoZW4gdGhlIGFjdHVhbCBkaXZpc29yIHZhbHVlCisJICovCisJc3IzMigmcHJjbV9iYXNlLT5jbGtzZWwxX2VtdSwgMjQsIDUsIFBFUl9NNlgyICsgMSk7CS8qIHNldCBNNiAqLworCXNyMzIoJnByY21fYmFzZS0+Y2xrc2VsMV9lbXUsIDI0LCA1LCBQRVJfTTZYMik7CQkvKiBzZXQgTTYgKi8KKwlzcjMyKCZwcmNtX2Jhc2UtPmNsa3NlbF9jYW0sIDAsIDUsIFBFUl9NNVgyICsgMSk7CS8qIHNldCBNNSAqLworCXNyMzIoJnByY21fYmFzZS0+Y2xrc2VsX2NhbSwgMCwgNSwgUEVSX001WDIpOwkJLyogc2V0IE01ICovCisJc3IzMigmcHJjbV9iYXNlLT5jbGtzZWxfZHNzLCAwLCA1LCBQRVJfTTRYMiArIDEpOwkvKiBzZXQgTTQgKi8KKwlzcjMyKCZwcmNtX2Jhc2UtPmNsa3NlbF9kc3MsIDAsIDUsIFBFUl9NNFgyKTsJCS8qIHNldCBNNCAqLworCXNyMzIoJnByY21fYmFzZS0+Y2xrc2VsX2RzcywgOCwgNSwgUEVSX00zWDIgKyAxKTsJLyogc2V0IE0zICovCisJc3IzMigmcHJjbV9iYXNlLT5jbGtzZWxfZHNzLCA4LCA1LCBQRVJfTTNYMik7CQkvKiBzZXQgTTMgKi8KKwlzcjMyKCZwcmNtX2Jhc2UtPmNsa3NlbDNfcGxsLCAwLCA1LCBkcGxsX3BhcmFtX3AtPm0yICsgMSk7IC8qIHNldCBNMiAqLworCXNyMzIoJnByY21fYmFzZS0+Y2xrc2VsM19wbGwsIDAsIDUsIGRwbGxfcGFyYW1fcC0+bTIpOwkvKiBzZXQgTTIgKi8KKwkvKiBXb3JrYXJvdW5kIGVuZCAqLworCisJc3IzMigmcHJjbV9iYXNlLT5jbGtzZWwyX3BsbCwgOCwgMTEsIGRwbGxfcGFyYW1fcC0+bSk7CS8qIHNldCBtICovCisJc3IzMigmcHJjbV9iYXNlLT5jbGtzZWwyX3BsbCwgMCwgNywgZHBsbF9wYXJhbV9wLT5uKTsJLyogc2V0IG4gKi8KKwlzcjMyKCZwcmNtX2Jhc2UtPmNsa2VuX3BsbCwgMjAsIDQsIGRwbGxfcGFyYW1fcC0+ZnNlbCk7CS8qIEZSRVFTRUwgKi8KKwlzcjMyKCZwcmNtX2Jhc2UtPmNsa2VuX3BsbCwgMTYsIDMsIFBMTF9MT0NLKTsJCS8qIGxvY2sgbW9kZSAqLworCXdhaXRfb25fdmFsdWUoU1RfUEVSSVBIX0NMSywgMiwgJnByY21fYmFzZS0+aWRsZXN0X2NrZ2VuLCBMREVMQVkpOworCisJLyogR2V0dGluZyB0aGUgYmFzZSBhZGRyZXNzIHRvIE1QVSBEUExMIHBhcmFtIHRhYmxlICovCisJZHBsbF9wYXJhbV9wID0gKGRwbGxfcGFyYW0gKikgZ2V0X21wdV9kcGxsX3BhcmFtKCk7CisKKwkvKiBNb3ZpbmcgaXQgdG8gdGhlIHJpZ2h0IHN5c2NsayBhbmQgRVMgcmV2IGJhc2UgKi8KKwlkcGxsX3BhcmFtX3AgPSBkcGxsX3BhcmFtX3AgKyAzICogY2xrX2luZGV4ICsgc2lsX2luZGV4OworCisJLyogTVBVIERQTEwgKHVubG9ja2VkIGFscmVhZHkpICovCisKKwkvKiBTZXQgTTIgKi8KKwlzcjMyKCZwcmNtX2Jhc2UtPmNsa3NlbDJfcGxsX21wdSwgMCwgNSwgZHBsbF9wYXJhbV9wLT5tMik7CisJLyogU2V0IE0gKi8KKwlzcjMyKCZwcmNtX2Jhc2UtPmNsa3NlbDFfcGxsX21wdSwgOCwgMTEsIGRwbGxfcGFyYW1fcC0+bSk7CisJLyogU2V0IE4gKi8KKwlzcjMyKCZwcmNtX2Jhc2UtPmNsa3NlbDFfcGxsX21wdSwgMCwgNywgZHBsbF9wYXJhbV9wLT5uKTsKKwkvKiBGUkVRU0VMICovCisJc3IzMigmcHJjbV9iYXNlLT5jbGtlbl9wbGxfbXB1LCA0LCA0LCBkcGxsX3BhcmFtX3AtPmZzZWwpOworCS8qIGxvY2sgbW9kZSAqLworCXNyMzIoJnByY21fYmFzZS0+Y2xrZW5fcGxsX21wdSwgMCwgMywgUExMX0xPQ0spOworCXdhaXRfb25fdmFsdWUoU1RfTVBVX0NMSywgMSwgJnByY21fYmFzZS0+aWRsZXN0X3BsbF9tcHUsIExERUxBWSk7CisKKwkvKiBHZXR0aW5nIHRoZSBiYXNlIGFkZHJlc3MgdG8gSVZBIERQTEwgcGFyYW0gdGFibGUgKi8KKwlkcGxsX3BhcmFtX3AgPSAoZHBsbF9wYXJhbSAqKSBnZXRfaXZhX2RwbGxfcGFyYW0oKTsKKworCS8qIE1vdmluZyBpdCB0byB0aGUgcmlnaHQgc3lzY2xrIGFuZCBFUyByZXYgYmFzZSAqLworCWRwbGxfcGFyYW1fcCA9IGRwbGxfcGFyYW1fcCArIDMgKiBjbGtfaW5kZXggKyBzaWxfaW5kZXg7CisKKwkvKiBJVkEgRFBMTCAoc2V0IHRvIDEyKjIwPTI0ME1IeikgKi8KKwlzcjMyKCZwcmNtX2Jhc2UtPmNsa2VuX3BsbF9pdmEyLCAwLCAzLCBQTExfU1RPUCk7CisJd2FpdF9vbl92YWx1ZShTVF9JVkEyX0NMSywgMCwgJnByY21fYmFzZS0+aWRsZXN0X3BsbF9pdmEyLCBMREVMQVkpOworCS8qIHNldCBNMiAqLworCXNyMzIoJnByY21fYmFzZS0+Y2xrc2VsMl9wbGxfaXZhMiwgMCwgNSwgZHBsbF9wYXJhbV9wLT5tMik7CisJLyogc2V0IE0gKi8KKwlzcjMyKCZwcmNtX2Jhc2UtPmNsa3NlbDFfcGxsX2l2YTIsIDgsIDExLCBkcGxsX3BhcmFtX3AtPm0pOworCS8qIHNldCBOICovCisJc3IzMigmcHJjbV9iYXNlLT5jbGtzZWwxX3BsbF9pdmEyLCAwLCA3LCBkcGxsX3BhcmFtX3AtPm4pOworCS8qIEZSRVFTRUwgKi8KKwlzcjMyKCZwcmNtX2Jhc2UtPmNsa2VuX3BsbF9pdmEyLCA0LCA0LCBkcGxsX3BhcmFtX3AtPmZzZWwpOworCS8qIGxvY2sgbW9kZSAqLworCXNyMzIoJnByY21fYmFzZS0+Y2xrZW5fcGxsX2l2YTIsIDAsIDMsIFBMTF9MT0NLKTsKKwl3YWl0X29uX3ZhbHVlKFNUX0lWQTJfQ0xLLCAxLCAmcHJjbV9iYXNlLT5pZGxlc3RfcGxsX2l2YTIsIExERUxBWSk7CisKKwkvKiBTZXQgdXAgR1BUaW1lcnMgdG8gc3lzX2NsayBzb3VyY2Ugb25seSAqLworCXNyMzIoJnByY21fYmFzZS0+Y2xrc2VsX3BlciwgMCwgOCwgMHhmZik7CisJc3IzMigmcHJjbV9iYXNlLT5jbGtzZWxfd2t1cCwgMCwgMSwgMSk7CisKKwlzZGVsYXkoNTAwMCk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIHBlcmlwaGVyYWxfZW5hYmxlKCkgLSBFbmFibGUgdGhlIGNsa3MgJiBwb3dlciBmb3IgcGVyaWZzIChHUFQyLCBVQVJUMSwuLi4pCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIHBlcl9jbG9ja3NfZW5hYmxlKHZvaWQpCit7CisJcHJjbV90ICpwcmNtX2Jhc2UgPSAocHJjbV90ICopUFJDTV9CQVNFOworCisJLyogRW5hYmxlIEdQMiB0aW1lci4gKi8KKwlzcjMyKCZwcmNtX2Jhc2UtPmNsa3NlbF9wZXIsIDAsIDEsIDB4MSk7CS8qIEdQVDIgPSBzeXMgY2xrICovCisJc3IzMigmcHJjbV9iYXNlLT5pY2xrZW5fcGVyLCAzLCAxLCAweDEpOwkvKiBJQ0tlbiBHUFQyICovCisJc3IzMigmcHJjbV9iYXNlLT5mY2xrZW5fcGVyLCAzLCAxLCAweDEpOwkvKiBGQ0tlbiBHUFQyICovCisKKyNpZmRlZiBDT05GSUdfU1lTX05TMTY1NTAKKwkvKiBFbmFibGUgVUFSVDEgY2xvY2tzICovCisJc3IzMigmcHJjbV9iYXNlLT5mY2xrZW4xX2NvcmUsIDEzLCAxLCAweDEpOworCXNyMzIoJnByY21fYmFzZS0+aWNsa2VuMV9jb3JlLCAxMywgMSwgMHgxKTsKKworCS8qIFVBUlQgMyBDbG9ja3MgKi8KKwlzcjMyKCZwcmNtX2Jhc2UtPmZjbGtlbl9wZXIsIDExLCAxLCAweDEpOworCXNyMzIoJnByY21fYmFzZS0+aWNsa2VuX3BlciwgMTEsIDEsIDB4MSk7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfRFJJVkVSX09NQVAzNFhYX0kyQworCS8qIFR1cm4gb24gYWxsIDMgSTJDIGNsb2NrcyAqLworCXNyMzIoJnByY21fYmFzZS0+ZmNsa2VuMV9jb3JlLCAxNSwgMywgMHg3KTsKKwlzcjMyKCZwcmNtX2Jhc2UtPmljbGtlbjFfY29yZSwgMTUsIDMsIDB4Nyk7CS8qIEkyQzEsMiwzID0gb24gKi8KKyNlbmRpZgorCS8qIEVuYWJsZSB0aGUgSUNMSyBmb3IgMzJLIFN5bmMgVGltZXIgYXMgaXRzIHVzZWQgaW4gdWRlbGF5ICovCisJc3IzMigmcHJjbV9iYXNlLT5pY2xrZW5fd2t1cCwgMiwgMSwgMHgxKTsKKworCXNyMzIoJnByY21fYmFzZS0+ZmNsa2VuX2l2YTIsIDAsIDMyLCBGQ0tfSVZBMl9PTik7CisJc3IzMigmcHJjbV9iYXNlLT5mY2xrZW4xX2NvcmUsIDAsIDMyLCBGQ0tfQ09SRTFfT04pOworCXNyMzIoJnByY21fYmFzZS0+aWNsa2VuMV9jb3JlLCAwLCAzMiwgSUNLX0NPUkUxX09OKTsKKwlzcjMyKCZwcmNtX2Jhc2UtPmljbGtlbjJfY29yZSwgMCwgMzIsIElDS19DT1JFMl9PTik7CisJc3IzMigmcHJjbV9iYXNlLT5mY2xrZW5fd2t1cCwgMCwgMzIsIEZDS19XS1VQX09OKTsKKwlzcjMyKCZwcmNtX2Jhc2UtPmljbGtlbl93a3VwLCAwLCAzMiwgSUNLX1dLVVBfT04pOworCXNyMzIoJnByY21fYmFzZS0+ZmNsa2VuX2RzcywgMCwgMzIsIEZDS19EU1NfT04pOworCXNyMzIoJnByY21fYmFzZS0+aWNsa2VuX2RzcywgMCwgMzIsIElDS19EU1NfT04pOworCXNyMzIoJnByY21fYmFzZS0+ZmNsa2VuX2NhbSwgMCwgMzIsIEZDS19DQU1fT04pOworCXNyMzIoJnByY21fYmFzZS0+aWNsa2VuX2NhbSwgMCwgMzIsIElDS19DQU1fT04pOworCXNyMzIoJnByY21fYmFzZS0+ZmNsa2VuX3BlciwgMCwgMzIsIEZDS19QRVJfT04pOworCXNyMzIoJnByY21fYmFzZS0+aWNsa2VuX3BlciwgMCwgMzIsIElDS19QRVJfT04pOworCisJc2RlbGF5KDEwMDApOworfQpkaWZmIC0tZ2l0IGEvY3B1L2FybV9jb3J0ZXhhOC9vbWFwMy9jb25maWcubWsgYi9jcHUvYXJtX2NvcnRleGE4L29tYXAzL2NvbmZpZy5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYmI3NTNlCi0tLSAvZGV2L251bGwKKysrIGIvY3B1L2FybV9jb3J0ZXhhOC9vbWFwMy9jb25maWcubWsKQEAgLTAsMCArMSwzNiBAQAorIworIyAoQykgQ29weXJpZ2h0IDIwMDIKKyMgR2FyeSBKZW5uZWpvaG4sIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIDxnakBkZW54LmRlPgorIworIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworIyBwcm9qZWN0LgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisjIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisjIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorIyBNQSAwMjExMS0xMzA3IFVTQQorIworUExBVEZPUk1fUkVMRkxBR1MgKz0gLWZuby1zdHJpY3QtYWxpYXNpbmcgLWZuby1jb21tb24gLWZmaXhlZC1yOCBcCisJCSAgICAgLW1zb2Z0LWZsb2F0CisKKyMgTWFrZSBBUk12NSB0byBhbGxvdyBtb3JlIGNvbXBpbGVycyB0byB3b3JrLCBldmVuIHRob3VnaCBpdHMgdjdhLgorUExBVEZPUk1fQ1BQRkxBR1MgKz0gLW1hcmNoPWFybXY1CisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMKKyMgU3VwcGx5IG9wdGlvbnMgYWNjb3JkaW5nIHRvIGNvbXBpbGVyIHZlcnNpb24KKyMKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorUExBVEZPUk1fQ1BQRkxBR1MgKz0kKGNhbGwgY2Mtb3B0aW9uKQorUExBVEZPUk1fQ1BQRkxBR1MgKz0kKGNhbGwgY2Mtb3B0aW9uLC1tbm8tdGh1bWItaW50ZXJ3b3JrLCkKK1BMQVRGT1JNX1JFTEZMQUdTICs9JChjYWxsIGNjLW9wdGlvbiwtbXNob3J0LWxvYWQtYnl0ZXMsXAorCQkgICAgJChjYWxsIGNjLW9wdGlvbiwtbWFsaWdubWVudC10cmFwcywpKQpkaWZmIC0tZ2l0IGEvY3B1L2FybV9jb3J0ZXhhOC9vbWFwMy9pbnRlcnJ1cHRzLmMgYi9jcHUvYXJtX2NvcnRleGE4L29tYXAzL2ludGVycnVwdHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTk4MTdkCi0tLSAvZGV2L251bGwKKysrIGIvY3B1L2FybV9jb3J0ZXhhOC9vbWFwMy9pbnRlcnJ1cHRzLmMKQEAgLTAsMCArMSwyOTcgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDgKKyAqIFRleGFzIEluc3RydW1lbnRzCisgKgorICogUmljaGFyZCBXb29kcnVmZiA8ci13b29kcnVmZjJAdGkuY29tPgorICogU3llZCBNb2FobW1lZCBLaGFzaW0gPGtoYXNpbUB0aS5jb20+CisgKgorICogKEMpIENvcHlyaWdodCAyMDAyCisgKiBTeXNnbyBSZWFsLVRpbWUgU29sdXRpb25zLCBHbWJIIDx3d3cuZWxpbm9zLmNvbT4KKyAqIE1hcml1cyBHcm9lZ2VyIDxtZ3JvZWdlckBzeXNnby5kZT4KKyAqIEFsZXggWnVlcGtlIDxhenVAc3lzZ28uZGU+CisgKgorICogKEMpIENvcHlyaWdodCAyMDAyCisgKiBHYXJ5IEplbm5lam9obiwgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgPGdqQGRlbnguZGU+CisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9wcm9jLWFybXYvcHRyYWNlLmg+CisKKyNkZWZpbmUgVElNRVJfTE9BRF9WQUwgMAorCisjaWZkZWYgQ09ORklHX1VTRV9JUlEKKy8qIGVuYWJsZSBJUlEgaW50ZXJydXB0cyAqLwordm9pZCBlbmFibGVfaW50ZXJydXB0cyh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgdGVtcDsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygibXJzICUwLCBjcHNyXG4iCisJCQkgICAgICJiaWMgJTAsICUwLCAjMHg4MFxuIiAibXNyIGNwc3JfYywgJTAiOiI9ciIodGVtcCkKKwkJCSAgICAgOjoibWVtb3J5Iik7Cit9CisKKy8qCisgKiBkaXNhYmxlIElSUS9GSVEgaW50ZXJydXB0cworICogcmV0dXJucyB0cnVlIGlmIGludGVycnVwdHMgaGFkIGJlZW4gZW5hYmxlZCBiZWZvcmUgd2UgZGlzYWJsZWQgdGhlbQorICovCitpbnQgZGlzYWJsZV9pbnRlcnJ1cHRzKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBvbGQsIHRlbXA7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oIm1ycyAlMCwgY3BzclxuIgorCQkJICAgICAib3JyICUxLCAlMCwgIzB4YzBcbiIKKwkJCSAgICAgIm1zciBjcHNyX2MsICUxIjoiPXIiKG9sZCksICI9ciIodGVtcCkKKwkJCSAgICAgOjoibWVtb3J5Iik7CisJcmV0dXJuIChvbGQgJiAweDgwKSA9PSAwOworfQorI2Vsc2UKK3ZvaWQgZW5hYmxlX2ludGVycnVwdHModm9pZCkKK3sKKwlyZXR1cm47Cit9CitpbnQgZGlzYWJsZV9pbnRlcnJ1cHRzKHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKwordm9pZCBiYWRfbW9kZSh2b2lkKQoreworCXBhbmljKCJSZXNldHRpbmcgQ1BVIC4uLlxuIik7CisJcmVzZXRfY3B1KDApOworfQorCit2b2lkIHNob3dfcmVncyhzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWNvbnN0IGNoYXIgKnByb2Nlc3Nvcl9tb2Rlc1tdID0geworCQkiVVNFUl8yNiIsICJGSVFfMjYiLCAiSVJRXzI2IiwgIlNWQ18yNiIsCisJCSJVSzRfMjYiLCAiVUs1XzI2IiwgIlVLNl8yNiIsICJVSzdfMjYiLAorCQkiVUs4XzI2IiwgIlVLOV8yNiIsICJVSzEwXzI2IiwgIlVLMTFfMjYiLAorCQkiVUsxMl8yNiIsICJVSzEzXzI2IiwgIlVLMTRfMjYiLCAiVUsxNV8yNiIsCisJCSJVU0VSXzMyIiwgIkZJUV8zMiIsICJJUlFfMzIiLCAiU1ZDXzMyIiwKKwkJIlVLNF8zMiIsICJVSzVfMzIiLCAiVUs2XzMyIiwgIkFCVF8zMiIsCisJCSJVSzhfMzIiLCAiVUs5XzMyIiwgIlVLMTBfMzIiLCAiVU5EXzMyIiwKKwkJIlVLMTJfMzIiLCAiVUsxM18zMiIsICJVSzE0XzMyIiwgIlNZU18zMiIsCisJfTsKKworCWZsYWdzID0gY29uZGl0aW9uX2NvZGVzKHJlZ3MpOworCisJcHJpbnRmKCJwYyA6IFs8JTA4bHg+XSAgICBsciA6IFs8JTA4bHg+XVxuIgorCQkic3AgOiAlMDhseCAgaXAgOiAlMDhseCAgZnAgOiAlMDhseFxuIiwKKwkJaW5zdHJ1Y3Rpb25fcG9pbnRlcihyZWdzKSwKKwkJcmVncy0+QVJNX2xyLCByZWdzLT5BUk1fc3AsIHJlZ3MtPkFSTV9pcCwgcmVncy0+QVJNX2ZwKTsKKwlwcmludGYoInIxMDogJTA4bHggIHI5IDogJTA4bHggIHI4IDogJTA4bHhcbiIsCisJCXJlZ3MtPkFSTV9yMTAsIHJlZ3MtPkFSTV9yOSwgcmVncy0+QVJNX3I4KTsKKwlwcmludGYoInI3IDogJTA4bHggIHI2IDogJTA4bHggIHI1IDogJTA4bHggIHI0IDogJTA4bHhcbiIsCisJCXJlZ3MtPkFSTV9yNywgcmVncy0+QVJNX3I2LCByZWdzLT5BUk1fcjUsIHJlZ3MtPkFSTV9yNCk7CisJcHJpbnRmKCJyMyA6ICUwOGx4ICByMiA6ICUwOGx4ICByMSA6ICUwOGx4ICByMCA6ICUwOGx4XG4iLAorCQlyZWdzLT5BUk1fcjMsIHJlZ3MtPkFSTV9yMiwgcmVncy0+QVJNX3IxLCByZWdzLT5BUk1fcjApOworCXByaW50ZigiRmxhZ3M6ICVjJWMlYyVjIiwKKwkJZmxhZ3MgJiBDQ19OX0JJVCA/ICdOJyA6ICduJywKKwkJZmxhZ3MgJiBDQ19aX0JJVCA/ICdaJyA6ICd6JywKKwkJZmxhZ3MgJiBDQ19DX0JJVCA/ICdDJyA6ICdjJywgZmxhZ3MgJiBDQ19WX0JJVCA/ICdWJyA6ICd2Jyk7CisJcHJpbnRmKCIgIElSUXMgJXMgIEZJUXMgJXMgIE1vZGUgJXMlc1xuIiwKKwkJaW50ZXJydXB0c19lbmFibGVkKHJlZ3MpID8gIm9uIiA6ICJvZmYiLAorCQlmYXN0X2ludGVycnVwdHNfZW5hYmxlZChyZWdzKSA/ICJvbiIgOiAib2ZmIiwKKwkJcHJvY2Vzc29yX21vZGVzW3Byb2Nlc3Nvcl9tb2RlKHJlZ3MpXSwKKwkJdGh1bWJfbW9kZShyZWdzKSA/ICIgKFQpIiA6ICIiKTsKK30KKwordm9pZCBkb191bmRlZmluZWRfaW5zdHJ1Y3Rpb24oc3RydWN0IHB0X3JlZ3MgKnB0X3JlZ3MpCit7CisJcHJpbnRmKCJ1bmRlZmluZWQgaW5zdHJ1Y3Rpb25cbiIpOworCXNob3dfcmVncyhwdF9yZWdzKTsKKwliYWRfbW9kZSgpOworfQorCit2b2lkIGRvX3NvZnR3YXJlX2ludGVycnVwdChzdHJ1Y3QgcHRfcmVncyAqcHRfcmVncykKK3sKKwlwcmludGYoInNvZnR3YXJlIGludGVycnVwdFxuIik7CisJc2hvd19yZWdzKHB0X3JlZ3MpOworCWJhZF9tb2RlKCk7Cit9CisKK3ZvaWQgZG9fcHJlZmV0Y2hfYWJvcnQoc3RydWN0IHB0X3JlZ3MgKnB0X3JlZ3MpCit7CisJcHJpbnRmKCJwcmVmZXRjaCBhYm9ydFxuIik7CisJc2hvd19yZWdzKHB0X3JlZ3MpOworCWJhZF9tb2RlKCk7Cit9CisKK3ZvaWQgZG9fZGF0YV9hYm9ydChzdHJ1Y3QgcHRfcmVncyAqcHRfcmVncykKK3sKKwlwcmludGYoImRhdGEgYWJvcnRcbiIpOworCXNob3dfcmVncyhwdF9yZWdzKTsKKwliYWRfbW9kZSgpOworfQorCit2b2lkIGRvX25vdF91c2VkKHN0cnVjdCBwdF9yZWdzICpwdF9yZWdzKQoreworCXByaW50Zigibm90IHVzZWRcbiIpOworCXNob3dfcmVncyhwdF9yZWdzKTsKKwliYWRfbW9kZSgpOworfQorCit2b2lkIGRvX2ZpcShzdHJ1Y3QgcHRfcmVncyAqcHRfcmVncykKK3sKKwlwcmludGYoImZhc3QgaW50ZXJydXB0IHJlcXVlc3RcbiIpOworCXNob3dfcmVncyhwdF9yZWdzKTsKKwliYWRfbW9kZSgpOworfQorCit2b2lkIGRvX2lycShzdHJ1Y3QgcHRfcmVncyAqcHRfcmVncykKK3sKKwlwcmludGYoImludGVycnVwdCByZXF1ZXN0XG4iKTsKKwlzaG93X3JlZ3MocHRfcmVncyk7CisJYmFkX21vZGUoKTsKK30KKworCitzdGF0aWMgdWxvbmcgdGltZXN0YW1wOworc3RhdGljIHVsb25nIGxhc3RpbmM7CitzdGF0aWMgZ3B0aW1lcl90ICp0aW1lcl9iYXNlID0gKGdwdGltZXJfdCAqKUNPTkZJR19TWVNfVElNRVJCQVNFOworCisvKiBub3RoaW5nIHJlYWxseSB0byBkbyB3aXRoIGludGVycnVwdHMsIGp1c3Qgc3RhcnRzIHVwIGEgY291bnRlci4gKi8KK2ludCBpbnRlcnJ1cHRfaW5pdCh2b2lkKQoreworCS8qIHN0YXJ0IHRoZSBjb3VudGVyIHRpY2tpbmcgdXAsIHJlbG9hZCB2YWx1ZSBvbiBvdmVyZmxvdyAqLworCXdyaXRlbChUSU1FUl9MT0FEX1ZBTCwgJnRpbWVyX2Jhc2UtPnRsZHIpOworCS8qIGVuYWJsZSB0aW1lciAqLworCXdyaXRlbCgoQ09ORklHX1NZU19QVlQgPDwgMikgfCBUQ0xSX1BSRSB8IFRDTFJfQVIgfCBUQ0xSX1NULAorCQkmdGltZXJfYmFzZS0+dGNscik7CisKKwlyZXNldF90aW1lcl9tYXNrZWQoKTsJLyogaW5pdCB0aGUgdGltZXN0YW1wIGFuZCBsYXN0aW5jIHZhbHVlICovCisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIHRpbWVyIHdpdGhvdXQgaW50ZXJydXB0cworICovCit2b2lkIHJlc2V0X3RpbWVyKHZvaWQpCit7CisJcmVzZXRfdGltZXJfbWFza2VkKCk7Cit9CisKK3Vsb25nIGdldF90aW1lcih1bG9uZyBiYXNlKQoreworCXJldHVybiBnZXRfdGltZXJfbWFza2VkKCkgLSBiYXNlOworfQorCit2b2lkIHNldF90aW1lcih1bG9uZyB0KQoreworCXRpbWVzdGFtcCA9IHQ7Cit9CisKKy8qIGRlbGF5IHggdXNlY29uZHMgQU5EIHBlcnNlcnZlIGFkdmFuY2UgdGltc3RhbXAgdmFsdWUgKi8KK3ZvaWQgdWRlbGF5KHVuc2lnbmVkIGxvbmcgdXNlYykKK3sKKwl1bG9uZyB0bW8sIHRtcDsKKworCS8qIGlmICJiaWciIG51bWJlciwgc3ByZWFkIG5vcm1hbGl6YXRpb24gdG8gc2Vjb25kcyAqLworCWlmICh1c2VjID49IDEwMDApIHsKKwkJLyogaWYgImJpZyIgbnVtYmVyLCBzcHJlYWQgbm9ybWFsaXphdGlvbiB0byBzZWNvbmRzICovCisJCXRtbyA9IHVzZWMgLyAxMDAwOworCQkvKiBmaW5kIG51bWJlciBvZiAidGlja3MiIHRvIHdhaXQgdG8gYWNoaWV2ZSB0YXJnZXQgKi8KKwkJdG1vICo9IENPTkZJR19TWVNfSFo7CisJCXRtbyAvPSAxMDAwOwkvKiBmaW5pc2ggbm9ybWFsaXplLiAqLworCX0gZWxzZSB7LyogZWxzZSBzbWFsbCBudW1iZXIsIGRvbid0IGtpbGwgaXQgcHJpb3IgdG8gSFogbXVsdGlwbHkgKi8KKwkJdG1vID0gdXNlYyAqIENPTkZJR19TWVNfSFo7CisJCXRtbyAvPSAoMTAwMCAqIDEwMDApOworCX0KKworCXRtcCA9IGdldF90aW1lcigwKTsJLyogZ2V0IGN1cnJlbnQgdGltZXN0YW1wICovCisJLyogaWYgc2V0dGluZyB0aGlzIGZvcndhcmQgd2lsbCByb2xsIHRpbWUgc3RhbXAgKi8KKwlpZiAoKHRtbyArIHRtcCArIDEpIDwgdG1wKQorCQkvKiByZXNldCAiYWR2YW5jaW5nIiB0aW1lc3RhbXAgdG8gMCwgc2V0IGxhc3RpbmMgdmFsdWUgKi8KKwkJcmVzZXRfdGltZXJfbWFza2VkKCk7CisJZWxzZQorCQl0bW8gKz0gdG1wOwkvKiBlbHNlLCBzZXQgYWR2YW5jaW5nIHN0YW1wIHdha2UgdXAgdGltZSAqLworCXdoaWxlIChnZXRfdGltZXJfbWFza2VkKCkgPCB0bW8pCS8qIGxvb3AgdGlsbCBldmVudCAqLworCQkgLypOT1AqLzsKK30KKwordm9pZCByZXNldF90aW1lcl9tYXNrZWQodm9pZCkKK3sKKwkvKiByZXNldCB0aW1lLCBjYXB0dXJlIGN1cnJlbnQgaW5jcmVtZW50ZXIgdmFsdWUgdGltZSAqLworCWxhc3RpbmMgPSByZWFkbCgmdGltZXJfYmFzZS0+dGNycik7CisJdGltZXN0YW1wID0gMDsJCS8qIHN0YXJ0ICJhZHZhbmNpbmciIHRpbWUgc3RhbXAgZnJvbSAwICovCit9CisKK3Vsb25nIGdldF90aW1lcl9tYXNrZWQodm9pZCkKK3sKKwl1bG9uZyBub3cgPSByZWFkbCgmdGltZXJfYmFzZS0+dGNycik7IC8qIGN1cnJlbnQgdGljayB2YWx1ZSAqLworCisJaWYgKG5vdyA+PSBsYXN0aW5jKQkvKiBub3JtYWwgbW9kZSAobm9uIHJvbGwpICovCisJCS8qIG1vdmUgc3RhbXAgZm9yZHdhcmQgd2l0aCBhYnNvdWx0ZSBkaWZmIHRpY2tzICovCisJCXRpbWVzdGFtcCArPSAobm93IC0gbGFzdGluYyk7CisJZWxzZQkvKiB3ZSBoYXZlIHJvbGxvdmVyIG9mIGluY3JlbWVudGVyICovCisJCXRpbWVzdGFtcCArPSAoMHhGRkZGRkZGRiAtIGxhc3RpbmMpICsgbm93OworCWxhc3RpbmMgPSBub3c7CisJcmV0dXJuIHRpbWVzdGFtcDsKK30KKworLyogd2FpdHMgc3BlY2lmaWVkIGRlbGF5IHZhbHVlIGFuZCByZXNldHMgdGltZXN0YW1wICovCit2b2lkIHVkZWxheV9tYXNrZWQodW5zaWduZWQgbG9uZyB1c2VjKQoreworCXVsb25nIHRtbzsKKwl1bG9uZyBlbmR0aW1lOworCXNpZ25lZCBsb25nIGRpZmY7CisKKwkvKiBpZiAiYmlnIiBudW1iZXIsIHNwcmVhZCBub3JtYWxpemF0aW9uIHRvIHNlY29uZHMgKi8KKwlpZiAodXNlYyA+PSAxMDAwKSB7CisJCS8qIHN0YXJ0IHRvIG5vcm1hbGl6ZSBmb3IgdXNlYyB0byB0aWNrcyBwZXIgc2VjICovCisJCXRtbyA9IHVzZWMgLyAxMDAwOworCQkvKiBmaW5kIG51bWJlciBvZiAidGlja3MiIHRvIHdhaXQgdG8gYWNoaWV2ZSB0YXJnZXQgKi8KKwkJdG1vICo9IENPTkZJR19TWVNfSFo7CisJCXRtbyAvPSAxMDAwOwkvKiBmaW5pc2ggbm9ybWFsaXplLiAqLworCX0gZWxzZSB7CQkvKiBlbHNlIHNtYWxsIG51bWJlciwgKi8KKwkJCQkvKiBkb24ndCBraWxsIGl0IHByaW9yIHRvIEhaIG11bHRpcGx5ICovCisJCXRtbyA9IHVzZWMgKiBDT05GSUdfU1lTX0haOworCQl0bW8gLz0gKDEwMDAgKiAxMDAwKTsKKwl9CisJZW5kdGltZSA9IGdldF90aW1lcl9tYXNrZWQoKSArIHRtbzsKKworCWRvIHsKKwkJdWxvbmcgbm93ID0gZ2V0X3RpbWVyX21hc2tlZCgpOworCQlkaWZmID0gZW5kdGltZSAtIG5vdzsKKwl9IHdoaWxlIChkaWZmID49IDApOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBpcyBkZXJpdmVkIGZyb20gUG93ZXJQQyBjb2RlIChyZWFkIHRpbWViYXNlIGFzIGxvbmcgbG9uZykuCisgKiBPbiBBUk0gaXQganVzdCByZXR1cm5zIHRoZSB0aW1lciB2YWx1ZS4KKyAqLwordW5zaWduZWQgbG9uZyBsb25nIGdldF90aWNrcyh2b2lkKQoreworCXJldHVybiBnZXRfdGltZXIoMCk7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGRlcml2ZWQgZnJvbSBQb3dlclBDIGNvZGUgKHRpbWViYXNlIGNsb2NrIGZyZXF1ZW5jeSkuCisgKiBPbiBBUk0gaXQgcmV0dXJucyB0aGUgbnVtYmVyIG9mIHRpbWVyIHRpY2tzIHBlciBzZWNvbmQuCisgKi8KK3Vsb25nIGdldF90YmNsayh2b2lkKQoreworCXVsb25nIHRiY2xrOworCXRiY2xrID0gQ09ORklHX1NZU19IWjsKKwlyZXR1cm4gdGJjbGs7Cit9CmRpZmYgLS1naXQgYS9jcHUvYXJtX2NvcnRleGE4L29tYXAzL2xvd2xldmVsX2luaXQuUyBiL2NwdS9hcm1fY29ydGV4YTgvb21hcDMvbG93bGV2ZWxfaW5pdC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmMWY5MjcKLS0tIC9kZXYvbnVsbAorKysgYi9jcHUvYXJtX2NvcnRleGE4L29tYXAzL2xvd2xldmVsX2luaXQuUwpAQCAtMCwwICsxLDM2MSBAQAorLyoKKyAqIEJvYXJkIHNwZWNpZmljIHNldHVwIGluZm8KKyAqCisgKiAoQykgQ29weXJpZ2h0IDIwMDgKKyAqIFRleGFzIEluc3RydW1lbnRzLCA8d3d3LnRpLmNvbT4KKyAqCisgKiBJbml0aWFsIENvZGUgYnk6CisgKiBSaWNoYXJkIFdvb2RydWZmIDxyLXdvb2RydWZmMkB0aS5jb20+CisgKiBTeWVkIE1vaGFtbWVkIEtoYXNpbSA8a2hhc2ltQHRpLmNvbT4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisjaW5jbHVkZSA8dmVyc2lvbi5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL21lbS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2Nsb2Nrc19vbWFwMy5oPgorCitfVEVYVF9CQVNFOgorCS53b3JkCVRFWFRfQkFTRQkvKiBzZHJhbSBsb2FkIGFkZHIgZnJvbSBjb25maWcubWsgKi8KKworI2lmICFkZWZpbmVkKENPTkZJR19TWVNfTkFORF9CT09UKSAmJiAhZGVmaW5lZChDT05GSUdfU1lTX05BTkRfQk9PVCkKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogY3B5X2Nsa19jb2RlOiByZWxvY2F0ZXMgY2xvY2sgY29kZSBpbnRvIFNSQU0gd2hlcmUgaXRzIHNhZmVyIHRvIGV4ZWN1dGUKKyAqIFIxID0gU1JBTSBkZXN0aW5hdGlvbiBhZGRyZXNzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisuZ2xvYmFsIGNweV9jbGtfY29kZQorIGNweV9jbGtfY29kZToKKwkvKiBDb3B5IERQTEwgY29kZSBpbnRvIFNSQU0gKi8KKwlhZHIJcjAsIGdvX3RvX3NwZWVkCQkvKiBnZXQgYWRkciBvZiBjbG9jayBzZXR0aW5nIGNvZGUgKi8KKwltb3YJcjIsICMzODQJCS8qIHIyIHNpemUgdG8gY29weSAoZGl2IGJ5IDMyIGJ5dGVzKSAqLworCW1vdglyMSwgcjEJCQkvKiByMSA8LSBkZXN0IGFkZHJlc3MgKHBhc3NlZCBpbikgKi8KKwlhZGQJcjIsIHIyLCByMAkJLyogcjIgPC0gc291cmNlIGVuZCBhZGRyZXNzICovCituZXh0MjoKKwlsZG1pYQlyMCEsIHtyMyAtIHIxMH0JCS8qIGNvcHkgZnJvbSBzb3VyY2UgYWRkcmVzcyBbcjBdICovCisJc3RtaWEJcjEhLCB7cjMgLSByMTB9CQkvKiBjb3B5IHRvICAgdGFyZ2V0IGFkZHJlc3MgW3IxXSAqLworCWNtcAlyMCwgcjIJCQkvKiB1bnRpbCBzb3VyY2UgZW5kIGFkZHJlc3MgW3IyXSAqLworCWJuZQluZXh0MgorCW1vdglwYywgbHIJCQkvKiBiYWNrIHRvIGNhbGxlciAqLworCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBnb190b19zcGVlZDogLU1vdmVzIHRvIGJ5cGFzcywgLUNvbW1pdHMgY2xvY2sgZGl2aWRlcnMsIC1wdXRzIGRwbGwgYXQgc3BlZWQKKyAqICAgICAgICAgICAgICAgLWV4ZWN1dGVkIGZyb20gU1JBTS4KKyAqICBSMCA9IENNX0NMS0VOX1BMTC1ieXBhc3MgdmFsdWUKKyAqICBSMSA9IENNX0NMS1NFTDFfUExMLW0sIG4sIGFuZCBkaXZpZGVyIHZhbHVlcworICogIFIyID0gQ01fQ0xLU0VMX0NPUkUtZGl2aWRlciB2YWx1ZXMKKyAqICBSMyA9IENNX0lETEVTVF9DS0dFTiAtIGFkZHIgZHBsbCBsb2NrIHdhaXQKKyAqCisgKiAgTm90ZTogSWYgY29yZSB1bmxvY2tzL3JlbG9ja3MgYW5kIFNEUkFNIGlzIHJ1bm5pbmcgZmFzdCBhbHJlYWR5IGl0IGdldHMKKyAqICAgICAgICBjb25mdXNlZC4gIEEgcmVzZXQgb2YgdGhlIGNvbnRyb2xsZXIgZ2V0cyBpdCBiYWNrLiAgVGFraW5nIGF3YXkgaXRzCisgKiAgICAgICAgTDMgd2hlbiBpdHMgbm90IGluIHNlbGYgcmVmcmVzaCBzZWVtcyBiYWQgZm9yIGl0LiAgTm9ybWFsbHksIHRoaXMKKyAqCSAgY29kZSBydW5zIGZyb20gZmxhc2ggYmVmb3JlIFNEUiBpcyBpbml0IHNvIHRoYXQgc2hvdWxkIGJlIG9rLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisuZ2xvYmFsIGdvX3RvX3NwZWVkCisgZ29fdG9fc3BlZWQ6CisJc3RtZmQgc3AhLCB7cjQgLSByNn0KKworCS8qIG1vdmUgaW50byBmYXN0IHJlbG9jayBieXBhc3MgKi8KKwlsZHIJcjQsIHBsbF9jdGxfYWRkCisJc3RyCXIwLCBbcjRdCit3YWl0MToKKwlsZHIJcjUsIFtyM10JCS8qIGdldCBzdGF0dXMgKi8KKwlhbmQJcjUsIHI1LCAjMHgxCQkvKiBpc29sYXRlIGNvcmUgc3RhdHVzICovCisJY21wCXI1LCAjMHgxCQkvKiBzdGlsbCBsb2NrZWQ/ICovCisJYmVxCXdhaXQxCQkJLyogaWYgbG9jaywgbG9vcCAqLworCisJLyogc2V0IG5ldyBkcGxsIGRpdmlkZXJzIF9hZnRlcl8gaW4gYnlwYXNzICovCisJbGRyCXI1LCBwbGxfZGl2X2FkZDEKKwlzdHIJcjEsIFtyNV0JCS8qIHNldCBtLCBuLCBtMiAqLworCWxkcglyNSwgcGxsX2Rpdl9hZGQyCisJc3RyCXIyLCBbcjVdCQkvKiBzZXQgbDMvbDQvLi4gZGl2aWRlcnMqLworCWxkcglyNSwgcGxsX2Rpdl9hZGQzCS8qIHdrdXAgKi8KKwlsZHIJcjIsIHBsbF9kaXZfdmFsMwkvKiByc20gdmFsICovCisJc3RyCXIyLCBbcjVdCisJbGRyCXI1LCBwbGxfZGl2X2FkZDQJLyogZ2Z4ICovCisJbGRyCXIyLCBwbGxfZGl2X3ZhbDQKKwlzdHIJcjIsIFtyNV0KKwlsZHIJcjUsIHBsbF9kaXZfYWRkNQkvKiBlbXUgKi8KKwlsZHIJcjIsIHBsbF9kaXZfdmFsNQorCXN0cglyMiwgW3I1XQorCisJLyogbm93IHByZXBhcmUgR1BNQyAoZmxhc2gpIGZvciBuZXcgZHBsbCBzcGVlZCAqLworCS8qIGZsYXNoIG5lZWRzIHRvIGJlIHN0YWJsZSB3aGVuIHdlIGp1bXAgYmFjayB0byBpdCAqLworCWxkcglyNSwgZmxhc2hfY2ZnM19hZGRyCisJbGRyCXIyLCBmbGFzaF9jZmczX3ZhbAorCXN0cglyMiwgW3I1XQorCWxkcglyNSwgZmxhc2hfY2ZnNF9hZGRyCisJbGRyCXIyLCBmbGFzaF9jZmc0X3ZhbAorCXN0cglyMiwgW3I1XQorCWxkcglyNSwgZmxhc2hfY2ZnNV9hZGRyCisJbGRyCXIyLCBmbGFzaF9jZmc1X3ZhbAorCXN0cglyMiwgW3I1XQorCWxkcglyNSwgZmxhc2hfY2ZnMV9hZGRyCisJbGRyCXIyLCBbcjVdCisJb3JyCXIyLCByMiwgIzB4MwkJLyogdXAgZ3BtYyBkaXZpZGVyICovCisJc3RyCXIyLCBbcjVdCisKKwkvKiBsb2NrIERQTEwzIGFuZCB3YWl0IGEgYml0ICovCisJb3JyCXIwLCByMCwgIzB4NwkvKiBzZXQgdXAgZm9yIGxvY2sgbW9kZSAqLworCXN0cglyMCwgW3I0XQkvKiBsb2NrICovCisJbm9wCQkJLyogQVJNIHNsb3cgYXQgdGhpcyBwb2ludCB3b3JraW5nIGF0IHN5c19jbGsgKi8KKwlub3AKKwlub3AKKwlub3AKK3dhaXQyOgorCWxkcglyNSwgW3IzXQkvKiBnZXQgc3RhdHVzICovCisJYW5kCXI1LCByNSwgIzB4MQkvKiBpc29sYXRlIGNvcmUgc3RhdHVzICovCisJY21wCXI1LCAjMHgxCS8qIHN0aWxsIGxvY2tlZD8gKi8KKwlibmUJd2FpdDIJCS8qIGlmIGxvY2ssIGxvb3AgKi8KKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlsZG1mZAlzcCEsIHtyNCAtIHI2fQorCW1vdglwYywgbHIJCS8qIGJhY2sgdG8gY2FsbGVyLCBsb2NrZWQgKi8KKworX2dvX3RvX3NwZWVkOiAud29yZCBnb190b19zcGVlZAorCisvKiB0aGVzZSBjb25zdGFudHMgbmVlZCB0byBiZSBjbG9zZSBmb3IgUElDIGNvZGUgKi8KKy8qIFRoZSBOb3IgaGFzIHRvIGJlIGluIHRoZSBGbGFzaCBCYXNlIENTMCBmb3IgdGhpcyBjb25kaXRpb24gdG8gaGFwcGVuICovCitmbGFzaF9jZmcxX2FkZHI6CisJLndvcmQgKEdQTUNfQ09ORklHX0NTMCArIEdQTUNfQ09ORklHMSkKK2ZsYXNoX2NmZzNfYWRkcjoKKwkud29yZCAoR1BNQ19DT05GSUdfQ1MwICsgR1BNQ19DT05GSUczKQorZmxhc2hfY2ZnM192YWw6CisJLndvcmQgU1ROT1JfR1BNQ19DT05GSUczCitmbGFzaF9jZmc0X2FkZHI6CisJLndvcmQgKEdQTUNfQ09ORklHX0NTMCArIEdQTUNfQ09ORklHNCkKK2ZsYXNoX2NmZzRfdmFsOgorCS53b3JkIFNUTk9SX0dQTUNfQ09ORklHNAorZmxhc2hfY2ZnNV92YWw6CisJLndvcmQgU1ROT1JfR1BNQ19DT05GSUc1CitmbGFzaF9jZmc1X2FkZHI6CisJLndvcmQgKEdQTUNfQ09ORklHX0NTMCArIEdQTUNfQ09ORklHNSkKK3BsbF9jdGxfYWRkOgorCS53b3JkIENNX0NMS0VOX1BMTAorcGxsX2Rpdl9hZGQxOgorCS53b3JkIENNX0NMS1NFTDFfUExMCitwbGxfZGl2X2FkZDI6CisJLndvcmQgQ01fQ0xLU0VMX0NPUkUKK3BsbF9kaXZfYWRkMzoKKwkud29yZCBDTV9DTEtTRUxfV0tVUAorcGxsX2Rpdl92YWwzOgorCS53b3JkIChXS1VQX1JTTSA8PCAxKQorcGxsX2Rpdl9hZGQ0OgorCS53b3JkIENNX0NMS1NFTF9HRlgKK3BsbF9kaXZfdmFsNDoKKwkud29yZCAoR0ZYX0RJViA8PCAwKQorcGxsX2Rpdl9hZGQ1OgorCS53b3JkIENNX0NMS1NFTDFfRU1VCitwbGxfZGl2X3ZhbDU6CisJLndvcmQgQ0xTRUwxX0VNVV9WQUwKKworI2VuZGlmCisKKy5nbG9ibCBsb3dsZXZlbF9pbml0Citsb3dsZXZlbF9pbml0OgorCWxkcglzcCwgU1JBTV9TVEFDSworCXN0cglpcCwgW3NwXQkvKiBzdGFzaCBvbGQgbGluayByZWdpc3RlciAqLworCW1vdglpcCwgbHIJCS8qIHNhdmUgbGluayByZWcgYWNyb3NzIGNhbGwgKi8KKwlibAlzX2luaXQJCS8qIGdvIHNldHVwIHBsbCwgbXV4LCBtZW1vcnkgKi8KKwlsZHIJaXAsIFtzcF0JLyogcmVzdG9yZSBzYXZlIGlwICovCisJbW92CWxyLCBpcAkJLyogcmVzdG9yZSBsaW5rIHJlZyAqLworCisJLyogYmFjayB0byBhcmNoIGNhbGxpbmcgY29kZSAqLworCW1vdglwYywgbHIKKworCS8qIHRoZSBsaXRlcmFsIHBvb2xzIG9yaWdpbiAqLworCS5sdG9yZworCitSRUdfQ09OVFJPTF9TVEFUVVM6CisJLndvcmQgQ09OVFJPTF9TVEFUVVMKK1NSQU1fU1RBQ0s6CisJLndvcmQgTE9XX0xFVkVMX1NSQU1fU1RBQ0sKKworLyogRFBMTCgxLTQpIFBBUkFNIFRBQkxFUyAqLworCisvKgorICogRWFjaCBvZiB0aGUgdGFibGVzIGhhcyBNLCBOLCBGUkVRU0VMLCBNMiB2YWx1ZXMgZGVmaW5lZCBmb3Igbm9taW5hbAorICogT1BQICgxLjJWKS4gVGhlIGZpZWxkcyBhcmUgZGVmaW5lZCBhY2NvcmRpbmcgdG8gZHBsbF9wYXJhbSBzdHJ1Y3QgKGNsb2NrLmMpLgorICogVGhlIHZhbHVlcyBhcmUgZGVmaW5lZCBmb3IgYWxsIHBvc3NpYmxlIHN5c2NsayBhbmQgZm9yIEVTMSBhbmQgRVMyLgorICovCisKK21wdV9kcGxsX3BhcmFtOgorLyogMTJNSHogKi8KKy8qIEVTMSAqLworLndvcmQgTVBVX01fMTJfRVMxLCBNUFVfTl8xMl9FUzEsIE1QVV9GU0VMXzEyX0VTMSwgTVBVX00yXzEyX0VTMQorLyogRVMyICovCisud29yZCBNUFVfTV8xMl9FUzIsIE1QVV9OXzEyX0VTMiwgTVBVX0ZTRUxfMTJfRVMyLCBNUFVfTTJfRVMyCisvKiAzNDEwICovCisud29yZCBNUFVfTV8xMiwgTVBVX05fMTIsIE1QVV9GU0VMXzEyLCBNUFVfTTJfMTIKKworLyogMTNNSHogKi8KKy8qIEVTMSAqLworLndvcmQgTVBVX01fMTNfRVMxLCBNUFVfTl8xM19FUzEsIE1QVV9GU0VMXzEzX0VTMSwgTVBVX00yXzEzX0VTMQorLyogRVMyICovCisud29yZCBNUFVfTV8xM19FUzIsIE1QVV9OXzEzX0VTMiwgTVBVX0ZTRUxfMTNfRVMyLCBNUFVfTTJfMTNfRVMyCisvKiAzNDEwICovCisud29yZCBNUFVfTV8xMywgTVBVX05fMTMsIE1QVV9GU0VMXzEzLCBNUFVfTTJfMTMKKworLyogMTkuMk1IeiAqLworLyogRVMxICovCisud29yZCBNUFVfTV8xOVAyX0VTMSwgTVBVX05fMTlQMl9FUzEsIE1QVV9GU0VMXzE5UDJfRVMxLCBNUFVfTTJfMTlQMl9FUzEKKy8qIEVTMiAqLworLndvcmQgTVBVX01fMTlQMl9FUzIsIE1QVV9OXzE5UDJfRVMyLCBNUFVfRlNFTF8xOVAyX0VTMiwgTVBVX00yXzE5UDJfRVMyCisvKiAzNDEwICovCisud29yZCBNUFVfTV8xOVAyLCBNUFVfTl8xOVAyLCBNUFVfRlNFTF8xOVAyLCBNUFVfTTJfMTlQMgorCisvKiAyNk1IeiAqLworLyogRVMxICovCisud29yZCBNUFVfTV8yNl9FUzEsIE1QVV9OXzI2X0VTMSwgTVBVX0ZTRUxfMjZfRVMxLCBNUFVfTTJfMjZfRVMxCisvKiBFUzIgKi8KKy53b3JkIE1QVV9NXzI2X0VTMiwgTVBVX05fMjZfRVMyLCBNUFVfRlNFTF8yNl9FUzIsIE1QVV9NMl8yNl9FUzIKKy8qIDM0MTAgKi8KKy53b3JkIE1QVV9NXzI2LCBNUFVfTl8yNiwgTVBVX0ZTRUxfMjYsIE1QVV9NMl8yNgorCisvKiAzOC40TUh6ICovCisvKiBFUzEgKi8KKy53b3JkIE1QVV9NXzM4UDRfRVMxLCBNUFVfTl8zOFA0X0VTMSwgTVBVX0ZTRUxfMzhQNF9FUzEsIE1QVV9NMl8zOFA0X0VTMQorLyogRVMyICovCisud29yZCBNUFVfTV8zOFA0X0VTMiwgTVBVX05fMzhQNF9FUzIsIE1QVV9GU0VMXzM4UDRfRVMyLCBNUFVfTTJfMzhQNF9FUzIKKy8qIDM0MTAgKi8KKy53b3JkIE1QVV9NXzM4UDQsIE1QVV9OXzM4UDQsIE1QVV9GU0VMXzM4UDQsIE1QVV9NMl8zOFA0CisKKworLmdsb2JsIGdldF9tcHVfZHBsbF9wYXJhbQorZ2V0X21wdV9kcGxsX3BhcmFtOgorCWFkcglyMCwgbXB1X2RwbGxfcGFyYW0KKwltb3YJcGMsIGxyCisKK2l2YV9kcGxsX3BhcmFtOgorLyogMTJNSHogKi8KKy8qIEVTMSAqLworLndvcmQgSVZBX01fMTJfRVMxLCBJVkFfTl8xMl9FUzEsIElWQV9GU0VMXzEyX0VTMSwgSVZBX00yXzEyX0VTMQorLyogRVMyICovCisud29yZCBJVkFfTV8xMl9FUzIsIElWQV9OXzEyX0VTMiwgSVZBX0ZTRUxfMTJfRVMyLCBJVkFfTTJfMTJfRVMyCisvKiAzNDEwICovCisud29yZCBJVkFfTV8xMiwgSVZBX05fMTIsIElWQV9GU0VMXzEyLCBJVkFfTTJfMTIKKworLyogMTNNSHogKi8KKy8qIEVTMSAqLworLndvcmQgSVZBX01fMTNfRVMxLCBJVkFfTl8xM19FUzEsIElWQV9GU0VMXzEzX0VTMSwgSVZBX00yXzEzX0VTMQorLyogRVMyICovCisud29yZCBJVkFfTV8xM19FUzIsIElWQV9OXzEzX0VTMiwgIElWQV9GU0VMXzEzX0VTMiwgSVZBX00yXzEzX0VTMgorLyogMzQxMCAqLworLndvcmQgSVZBX01fMTMsIElWQV9OXzEzLCBJVkFfRlNFTF8xMywgSVZBX00yXzEzCisKKy8qIDE5LjJNSHogKi8KKy8qIEVTMSAqLworLndvcmQgSVZBX01fMTlQMl9FUzEsIElWQV9OXzE5UDJfRVMxLCBJVkFfRlNFTF8xOVAyX0VTMSwgSVZBX00yXzE5UDJfRVMxCisvKiBFUzIgKi8KKy53b3JkIElWQV9NXzE5UDJfRVMyLCBJVkFfTl8xOVAyX0VTMiwgSVZBX0ZTRUxfMTlQMl9FUzIsIElWQV9NMl8xOVAyX0VTMgorLyogMzQxMCAqLworLndvcmQgSVZBX01fMTlQMiwgSVZBX05fMTlQMiwgSVZBX0ZTRUxfMTlQMiwgSVZBX00yXzE5UDIKKworLyogMjZNSHogKi8KKy8qIEVTMSAqLworLndvcmQgSVZBX01fMjZfRVMxLCBJVkFfTl8yNl9FUzEsIElWQV9GU0VMXzI2X0VTMSwgSVZBX00yXzI2X0VTMQorLyogRVMyICovCisud29yZCBJVkFfTV8yNl9FUzIsIElWQV9OXzI2X0VTMiwgSVZBX0ZTRUxfMjZfRVMyLCBJVkFfTTJfMjZfRVMyCisvKiAzNDEwICovCisud29yZCBJVkFfTV8yNiwgSVZBX05fMjYsIElWQV9GU0VMXzI2LCBJVkFfTTJfMjYKKworLyogMzguNE1IeiAqLworLyogRVMxICovCisud29yZCBJVkFfTV8zOFA0X0VTMSwgSVZBX05fMzhQNF9FUzEsIElWQV9GU0VMXzM4UDRfRVMxLCBJVkFfTTJfMzhQNF9FUzEKKy8qIEVTMiAqLworLndvcmQgSVZBX01fMzhQNF9FUzIsIElWQV9OXzM4UDRfRVMyLCBJVkFfRlNFTF8zOFA0X0VTMiwgSVZBX00yXzM4UDRfRVMyCisvKiAzNDEwICovCisud29yZCBJVkFfTV8zOFA0LCBJVkFfTl8zOFA0LCBJVkFfRlNFTF8zOFA0LCBJVkFfTTJfMzhQNAorCisKKy5nbG9ibCBnZXRfaXZhX2RwbGxfcGFyYW0KK2dldF9pdmFfZHBsbF9wYXJhbToKKwlhZHIJcjAsIGl2YV9kcGxsX3BhcmFtCisJbW92CXBjLCBscgorCisvKiBDb3JlIERQTEwgdGFyZ2V0cyBmb3IgTDMgYXQgMTY2ICYgTDEzMyAqLworY29yZV9kcGxsX3BhcmFtOgorLyogMTJNSHogKi8KKy8qIEVTMSAqLworLndvcmQgQ09SRV9NXzEyX0VTMSwgQ09SRV9OXzEyX0VTMSwgQ09SRV9GU0xfMTJfRVMxLCBDT1JFX00yXzEyX0VTMQorLyogRVMyICovCisud29yZCBDT1JFX01fMTIsIENPUkVfTl8xMiwgQ09SRV9GU0VMXzEyLCBDT1JFX00yXzEyCisvKiAzNDEwICovCisud29yZCBDT1JFX01fMTIsIENPUkVfTl8xMiwgQ09SRV9GU0VMXzEyLCBDT1JFX00yXzEyCisKKy8qIDEzTUh6ICovCisvKiBFUzEgKi8KKy53b3JkIENPUkVfTV8xM19FUzEsIENPUkVfTl8xM19FUzEsIENPUkVfRlNMXzEzX0VTMSwgQ09SRV9NMl8xM19FUzEKKy8qIEVTMiAqLworLndvcmQgQ09SRV9NXzEzLCBDT1JFX05fMTMsIENPUkVfRlNFTF8xMywgQ09SRV9NMl8xMworLyogMzQxMCAqLworLndvcmQgQ09SRV9NXzEzLCBDT1JFX05fMTMsIENPUkVfRlNFTF8xMywgQ09SRV9NMl8xMworCisvKiAxOS4yTUh6ICovCisvKiBFUzEgKi8KKy53b3JkIENPUkVfTV8xOVAyX0VTMSwgQ09SRV9OXzE5UDJfRVMxLCBDT1JFX0ZTTF8xOVAyX0VTMSwgQ09SRV9NMl8xOVAyX0VTMQorLyogRVMyICovCisud29yZCBDT1JFX01fMTlQMiwgQ09SRV9OXzE5UDIsIENPUkVfRlNFTF8xOVAyLCBDT1JFX00yXzE5UDIKKy8qIDM0MTAgKi8KKy53b3JkIENPUkVfTV8xOVAyLCBDT1JFX05fMTlQMiwgQ09SRV9GU0VMXzE5UDIsIENPUkVfTTJfMTlQMgorCisvKiAyNk1IeiAqLworLyogRVMxICovCisud29yZCBDT1JFX01fMjZfRVMxLCBDT1JFX05fMjZfRVMxLCBDT1JFX0ZTTF8yNl9FUzEsIENPUkVfTTJfMjZfRVMxCisvKiBFUzIgKi8KKy53b3JkIENPUkVfTV8yNiwgQ09SRV9OXzI2LCBDT1JFX0ZTRUxfMjYsIENPUkVfTTJfMjYKKy8qIDM0MTAgKi8KKy53b3JkIENPUkVfTV8yNiwgQ09SRV9OXzI2LCBDT1JFX0ZTRUxfMjYsIENPUkVfTTJfMjYKKworLyogMzguNE1IeiAqLworLyogRVMxICovCisud29yZCBDT1JFX01fMzhQNF9FUzEsIENPUkVfTl8zOFA0X0VTMSwgQ09SRV9GU0xfMzhQNF9FUzEsIENPUkVfTTJfMzhQNF9FUzEKKy8qIEVTMiAqLworLndvcmQgQ09SRV9NXzM4UDQsIENPUkVfTl8zOFA0LCBDT1JFX0ZTRUxfMzhQNCwgQ09SRV9NMl8zOFA0CisvKiAzNDEwICovCisud29yZCBDT1JFX01fMzhQNCwgQ09SRV9OXzM4UDQsIENPUkVfRlNFTF8zOFA0LCBDT1JFX00yXzM4UDQKKworLmdsb2JsIGdldF9jb3JlX2RwbGxfcGFyYW0KK2dldF9jb3JlX2RwbGxfcGFyYW06CisJYWRyCXIwLCBjb3JlX2RwbGxfcGFyYW0KKwltb3YJcGMsIGxyCisKKy8qIFBFUiBEUExMIHZhbHVlcyBhcmUgc2FtZSBmb3IgYm90aCBFUzEgYW5kIEVTMiAqLworcGVyX2RwbGxfcGFyYW06CisvKiAxMk1IeiAqLworLndvcmQgUEVSX01fMTIsIFBFUl9OXzEyLCBQRVJfRlNFTF8xMiwgUEVSX00yXzEyCisKKy8qIDEzTUh6ICovCisud29yZCBQRVJfTV8xMywgUEVSX05fMTMsIFBFUl9GU0VMXzEzLCBQRVJfTTJfMTMKKworLyogMTkuMk1IeiAqLworLndvcmQgUEVSX01fMTlQMiwgUEVSX05fMTlQMiwgUEVSX0ZTRUxfMTlQMiwgUEVSX00yXzE5UDIKKworLyogMjZNSHogKi8KKy53b3JkIFBFUl9NXzI2LCBQRVJfTl8yNiwgUEVSX0ZTRUxfMjYsIFBFUl9NMl8yNgorCisvKiAzOC40TUh6ICovCisud29yZCBQRVJfTV8zOFA0LCBQRVJfTl8zOFA0LCBQRVJfRlNFTF8zOFA0LCBQRVJfTTJfMzhQNAorCisuZ2xvYmwgZ2V0X3Blcl9kcGxsX3BhcmFtCitnZXRfcGVyX2RwbGxfcGFyYW06CisJYWRyCXIwLCBwZXJfZHBsbF9wYXJhbQorCW1vdglwYywgbHIKZGlmZiAtLWdpdCBhL2NwdS9hcm1fY29ydGV4YTgvb21hcDMvbWVtLmMgYi9jcHUvYXJtX2NvcnRleGE4L29tYXAzL21lbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjYzIyYzQKLS0tIC9kZXYvbnVsbAorKysgYi9jcHUvYXJtX2NvcnRleGE4L29tYXAzL21lbS5jCkBAIC0wLDAgKzEsMjg0IEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDA4CisgKiBUZXhhcyBJbnN0cnVtZW50cywgPHd3dy50aS5jb20+CisgKgorICogQXV0aG9yIDoKKyAqICAgICBNYW5pa2FuZGFuIFBpbGxhaSA8bWFuaS5waWxsYWlAdGkuY29tPgorICoKKyAqIEluaXRpYWwgQ29kZSBmcm9tOgorICogICAgIFJpY2hhcmQgV29vZHJ1ZmYgPHItd29vZHJ1ZmYyQHRpLmNvbT4KKyAqICAgICBTeWVkIE1vaGFtbWVkIEtoYXNpbSA8a2hhc2ltQHRpLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvbWVtLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvc3lzX3Byb3RvLmg+CisjaW5jbHVkZSA8Y29tbWFuZC5oPgorCisvKgorICogT25seSBPbmUgTkFORCBhbGxvd2VkIG9uIGJvYXJkIGF0IGEgdGltZS4KKyAqIFRoZSBHUE1DIENTIEJhc2UgZm9yIHRoZSBzYW1lCisgKi8KK3Vuc2lnbmVkIGludCBib290X2ZsYXNoX2Jhc2U7Cit1bnNpZ25lZCBpbnQgYm9vdF9mbGFzaF9vZmY7Cit1bnNpZ25lZCBpbnQgYm9vdF9mbGFzaF9zZWM7Cit1bnNpZ25lZCBpbnQgYm9vdF9mbGFzaF90eXBlOwordm9sYXRpbGUgdW5zaWduZWQgaW50IGJvb3RfZmxhc2hfZW52X2FkZHI7CisKKyNpZiBkZWZpbmVkKENPTkZJR19DTURfTkFORCkKK3N0YXRpYyB1MzIgZ3BtY19tX25hbmRbR1BNQ19NQVhfUkVHXSA9IHsKKwlNX05BTkRfR1BNQ19DT05GSUcxLAorCU1fTkFORF9HUE1DX0NPTkZJRzIsCisJTV9OQU5EX0dQTUNfQ09ORklHMywKKwlNX05BTkRfR1BNQ19DT05GSUc0LAorCU1fTkFORF9HUE1DX0NPTkZJRzUsCisJTV9OQU5EX0dQTUNfQ09ORklHNiwgMAorfTsKKworZ3BtY19jc3hfdCAqbmFuZF9jc19iYXNlOworZ3BtY190ICpncG1jX2NmZ19iYXNlOworCisjaWYgZGVmaW5lZChDT05GSUdfRU5WX0lTX0lOX05BTkQpCisjZGVmaW5lIEdQTUNfQ1MgMAorI2Vsc2UKKyNkZWZpbmUgR1BNQ19DUyAxCisjZW5kaWYKKworI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19DTURfT05FTkFORCkKK3N0YXRpYyB1MzIgZ3BtY19vbmVuYW5kW0dQTUNfTUFYX1JFR10gPSB7CisJT05FTkFORF9HUE1DX0NPTkZJRzEsCisJT05FTkFORF9HUE1DX0NPTkZJRzIsCisJT05FTkFORF9HUE1DX0NPTkZJRzMsCisJT05FTkFORF9HUE1DX0NPTkZJRzQsCisJT05FTkFORF9HUE1DX0NPTkZJRzUsCisJT05FTkFORF9HUE1DX0NPTkZJRzYsIDAKK307CisKK2dwbWNfY3N4X3QgKm9uZW5hbmRfY3NfYmFzZTsKKworI2lmIGRlZmluZWQoQ09ORklHX0VOVl9JU19JTl9PTkVOQU5EKQorI2RlZmluZSBHUE1DX0NTIDAKKyNlbHNlCisjZGVmaW5lIEdQTUNfQ1MgMQorI2VuZGlmCisKKyNlbmRpZgorCitzdGF0aWMgc2RyY190ICpzZHJjX2Jhc2UgPSAoc2RyY190ICopT01BUDM0WFhfU0RSQ19CQVNFOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIG1ha2VfY3MxX2NvbnRpZ3VvdXMoKSAtIGZvciBlczIgYW5kIGFib3ZlIHJlbWFwIGNzMSBiZWhpbmQgY3MwIHRvIGFsbG93CisgKiAgY29tbWFuZCBsaW5lIG1lbT14eXogdXNlIGFsbCBtZW1vcnkgd2l0aCBvdXQgZGlzY29udGludW91cyBzdXBwb3J0CisgKiAgY29tcGlsZWQgaW4uICBDb3VsZCBkbyBpdCBhdCB0aGUgQVRBRywgYnV0IHRoZXJlIHJlYWxseSBpcyB0d28gYmFua3MuLi4KKyAqIENhbGxlZCBhcyBwYXJ0IG9mIDJuZCBwaGFzZSBERFIgaW5pdC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgbWFrZV9jczFfY29udGlndW91cyh2b2lkKQoreworCXUzMiBzaXplLCBhX2FkZF9sb3csIGFfYWRkX2hpZ2g7CisKKwlzaXplID0gZ2V0X3Nkcl9jc19zaXplKENTMCk7CisJc2l6ZSAvPSBTWl8zMk07CQkJLyogZmluZCBzaXplIHRvIG9mZnNldCBDUzEgKi8KKwlhX2FkZF9oaWdoID0gKHNpemUgJiAzKSA8PCA4OwkvKiBzZXQgdXAgbG93IGZpZWxkICovCisJYV9hZGRfbG93ID0gKHNpemUgJiAweDNDKSA+PiAyOwkvKiBzZXQgdXAgaGlnaCBmaWVsZCAqLworCXdyaXRlbCgoYV9hZGRfaGlnaCB8IGFfYWRkX2xvdyksICZzZHJjX2Jhc2UtPmNzX2NmZyk7CisKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgbWVtX29rKCkgLSB0ZXN0IHVzZWQgdG8gc2VlIGlmIHRpbWluZ3MgYXJlIGNvcnJlY3QKKyAqICAgICAgICAgICAgIGZvciBhIHBhcnQuIEhlbHBzIGluIGd1ZXNzaW5nIHdoaWNoIHBhcnQKKyAqICAgICAgICAgICAgIHdlIGFyZSBjdXJyZW50bHkgdXNpbmcuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3UzMiBtZW1fb2sodTMyIGNzKQoreworCXUzMiB2YWwxLCB2YWwyLCBhZGRyOworCXUzMiBwYXR0ZXJuID0gMHgxMjM0NTY3ODsKKworCWFkZHIgPSBPTUFQMzRYWF9TRFJDX0NTMCArIGdldF9zZHJfY3Nfb2Zmc2V0KGNzKTsKKworCXdyaXRlbCgweDAsIGFkZHIgKyAweDQwMCk7CS8qIGNsZWFyIHBvcyBBICovCisJd3JpdGVsKHBhdHRlcm4sIGFkZHIpOwkJLyogcGF0dGVybiB0byBwb3MgQiAqLworCXdyaXRlbCgweDAsIGFkZHIgKyA0KTsJCS8qIHJlbW92ZSBwYXR0ZXJuIG9mZiB0aGUgYnVzICovCisJdmFsMSA9IHJlYWRsKGFkZHIgKyAweDQwMCk7CS8qIGdldCBwb3MgQSB2YWx1ZSAqLworCXZhbDIgPSByZWFkbChhZGRyKTsJCS8qIGdldCB2YWwyICovCisKKwlpZiAoKHZhbDEgIT0gMCkgfHwgKHZhbDIgIT0gcGF0dGVybikpCS8qIHNlZSBpZiBwb3MgQSB2YWwgY2hhbmdlZCAqLworCQlyZXR1cm4gMDsKKwllbHNlCisJCXJldHVybiAxOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBzZHJjX2luaXQoKSAtIGluaXQgdGhlIHNkcmMgY2hpcCBzZWxlY3RzIENTMCBhbmQgQ1MxCisgKiAgLSBlYXJseSBpbml0IHJvdXRpbmVzLCBjYWxsZWQgZnJvbSBmbGFzaCBvcgorICogIFNSQU0uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgc2RyY19pbml0KHZvaWQpCit7CisJLyogb25seSBpbml0IHVwIGZpcnN0IGJhbmsgaGVyZSAqLworCWRvX3NkcmNfaW5pdChDUzAsIEVBUkxZX0lOSVQpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogZG9fc2RyY19pbml0KCk6IGluaXRpYWxpemUgdGhlIFNEUkFNIGZvciB1c2UuCisgKiAgLWNvZGUgc2V0cyB1cCBTRFJBTSBiYXNpYyBTRFJDIHRpbWluZ3MgZm9yIENTMAorICogIC1vcHRpbWFsIHNldHRpbmdzIGNhbiBiZSBwbGFjZWQgaGVyZSwgb3IgcmVkb25lIGFmdGVyIGkyYworICogICAgICBpbnNwZWN0aW9uIG9mIGJvYXJkIGluZm8KKyAqCisgKiAgLSBjb2RlIGNhbGxlZCBvbmNlIGluIEMtU3RhY2sgb25seSBjb250ZXh0IGZvciBDUzAgYW5kIGEgcG9zc2libGUgMm5kCisgKiAgICAgIHRpbWUgZGVwZW5kaW5nIG9uIG1lbW9yeSBjb25maWd1cmF0aW9uIGZyb20gc3RhY2srZ2xvYmFsIGNvbnRleHQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwordm9pZCBkb19zZHJjX2luaXQodTMyIGNzLCB1MzIgZWFybHkpCit7CisJc2RyY19hY3RpbV90ICpzZHJjX2FjdGltX2Jhc2U7CisKKwlpZihjcykKKwkJc2RyY19hY3RpbV9iYXNlID0gKHNkcmNfYWN0aW1fdCAqKVNEUkNfQUNUSU1fQ1RSTDFfQkFTRTsKKwllbHNlCisJCXNkcmNfYWN0aW1fYmFzZSA9IChzZHJjX2FjdGltX3QgKilTRFJDX0FDVElNX0NUUkwwX0JBU0U7CisKKwlpZiAoZWFybHkpIHsKKwkJLyogcmVzZXQgc2RyYyBjb250cm9sbGVyICovCisJCXdyaXRlbChTT0ZUUkVTRVQsICZzZHJjX2Jhc2UtPnN5c2NvbmZpZyk7CisJCXdhaXRfb25fdmFsdWUoUkVTRVRET05FLCBSRVNFVERPTkUsICZzZHJjX2Jhc2UtPnN0YXR1cywKKwkJCSAgICAgIDEyMDAwMDAwKTsKKwkJd3JpdGVsKDAsICZzZHJjX2Jhc2UtPnN5c2NvbmZpZyk7CisKKwkJLyogc2V0dXAgc2RyYyB0byBiYWxsIG11eCAqLworCQl3cml0ZWwoU0RQX1NEUkNfU0hBUklORywgJnNkcmNfYmFzZS0+c2hhcmluZyk7CisKKwkJLyogRGlzYWJsZSBQb3dlciBEb3duIG9mIENLRSBjdXogb2YgMSBDS0Ugb24gY29tYm8gcGFydCAqLworCQl3cml0ZWwoU1JGUk9OUkVTRVQgfCBQQUdFUE9MSUNZX0hJR0gsICZzZHJjX2Jhc2UtPnBvd2VyKTsKKworCQl3cml0ZWwoRU5BRExMIHwgRExMUEhBU0VfOTAsICZzZHJjX2Jhc2UtPmRsbGFfY3RybCk7CisJCXNkZWxheSgweDIwMDAwKTsKKwl9CisKKwl3cml0ZWwoUkFTV0lEVEhfMTNCSVRTIHwgQ0FTV0lEVEhfMTBCSVRTIHwgQUREUk1VWExFR0FDWSB8CisJCVJBTVNJWkVfMTI4IHwgQkFOS0FMTE9DQVRJT04gfCBCMzJOT1QxNiB8IEIzMk5PVDE2IHwKKwkJREVFUFBEIHwgRERSX1NEUkFNLCAmc2RyY19iYXNlLT5jc1tjc10ubWNmZyk7CisJd3JpdGVsKEFSQ1YgfCBBUkVfQVJDVl8xLCAmc2RyY19iYXNlLT5jc1tjc10ucmZyX2N0cmwpOworCXdyaXRlbChWX0FDVElNQV8xNjUsICZzZHJjX2FjdGltX2Jhc2UtPmN0cmxhKTsKKwl3cml0ZWwoVl9BQ1RJTUJfMTY1LCAmc2RyY19hY3RpbV9iYXNlLT5jdHJsYik7CisKKwl3cml0ZWwoQ01EX05PUCwgJnNkcmNfYmFzZSAtPmNzW2NzXS5tYW51YWwpOworCXdyaXRlbChDTURfUFJFQ0hBUkdFLCAmc2RyY19iYXNlLT5jc1tjc10ubWFudWFsKTsKKwl3cml0ZWwoQ01EX0FVVE9SRUZSRVNILCAmc2RyY19iYXNlLT5jc1tjc10ubWFudWFsKTsKKwl3cml0ZWwoQ01EX0FVVE9SRUZSRVNILCAmc2RyY19iYXNlLT5jc1tjc10ubWFudWFsKTsKKworCS8qCisJICogQ0FTIGxhdGVuY3kgMywgV3JpdGUgQnVyc3QgPSBSZWFkIEJ1cnN0LCBTZXJpYWwgTW9kZSwKKwkgKiBCdXJzdCBsZW5ndGggPSA0CisJICovCisJd3JpdGVsKENBU0wzIHwgQlVSU1RMRU5HVEg0LCAmc2RyY19iYXNlLT5jc1tjc10ubXIpOworCisJaWYgKCFtZW1fb2soY3MpKQorCQl3cml0ZWwoMCwgJnNkcmNfYmFzZS0+Y3NbY3NdLm1jZmcpOworfQorCit2b2lkIGVuYWJsZV9ncG1jX2NvbmZpZyh1MzIgKmdwbWNfY29uZmlnLCBncG1jX2NzeF90ICpncG1jX2NzX2Jhc2UsIHUzMiBiYXNlLAorCQkJdTMyIHNpemUpCit7CisJd3JpdGVsKDAsICZncG1jX2NzX2Jhc2UtPmNvbmZpZzcpOworCXNkZWxheSgxMDAwKTsKKwkvKiBEZWxheSBmb3Igc2V0dGxpbmcgKi8KKwl3cml0ZWwoZ3BtY19jb25maWdbMF0sICZncG1jX2NzX2Jhc2UtPmNvbmZpZzEpOworCXdyaXRlbChncG1jX2NvbmZpZ1sxXSwgJmdwbWNfY3NfYmFzZS0+Y29uZmlnMik7CisJd3JpdGVsKGdwbWNfY29uZmlnWzJdLCAmZ3BtY19jc19iYXNlLT5jb25maWczKTsKKwl3cml0ZWwoZ3BtY19jb25maWdbM10sICZncG1jX2NzX2Jhc2UtPmNvbmZpZzQpOworCXdyaXRlbChncG1jX2NvbmZpZ1s0XSwgJmdwbWNfY3NfYmFzZS0+Y29uZmlnNSk7CisJd3JpdGVsKGdwbWNfY29uZmlnWzVdLCAmZ3BtY19jc19iYXNlLT5jb25maWc2KTsKKwkvKiBFbmFibGUgdGhlIGNvbmZpZyAqLworCXdyaXRlbCgoKChzaXplICYgMHhGKSA8PCA4KSB8ICgoYmFzZSA+PiAyNCkgJiAweDNGKSB8CisJCSgxIDw8IDYpKSwgJmdwbWNfY3NfYmFzZS0+Y29uZmlnNyk7CisJc2RlbGF5KDIwMDApOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGdwbWNfaW5pdCgpOiBpbml0IGdwbWMgYnVzCisgKiBJbml0IEdQTUMgZm9yIHgxNiwgTXV4TW9kZSAoU0RSQU0gaW4geDMyKS4KKyAqIFRoaXMgY29kZSBjYW4gb25seSBiZSBleGVjdXRlZCBmcm9tIFNSQU0gb3IgU0RSQU0uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIGdwbWNfaW5pdCh2b2lkKQoreworCS8qIHB1dHRpbmcgYSBibGFua2V0IGNoZWNrIG9uIEdQTUMgYmFzZWQgb24gWmVCdSBmb3Igbm93ICovCisJdTMyICpncG1jX2NvbmZpZyA9IE5VTEw7CisJZ3BtY190ICpncG1jX2Jhc2UgPSAoZ3BtY190ICopR1BNQ19CQVNFOworCWdwbWNfY3N4X3QgKmdwbWNfY3NfYmFzZSA9IChncG1jX2NzeF90ICopR1BNQ19DT05GSUdfQ1MwX0JBU0U7CisJdTMyIGJhc2UgPSAwOworCXUzMiBzaXplID0gMDsKKwl1MzIgZl9vZmYgPSBDT05GSUdfU1lTX01PTklUT1JfTEVOOworCXUzMiBmX3NlYyA9IDA7CisJdTMyIGNvbmZpZyA9IDA7CisKKwkvKiBnbG9iYWwgc2V0dGluZ3MgKi8KKwl3cml0ZWwoMCwgJmdwbWNfYmFzZS0+aXJxZW5hYmxlKTsgLyogaXNyJ3Mgc291cmNlcyBtYXNrZWQgKi8KKwl3cml0ZWwoMCwgJmdwbWNfYmFzZS0+dGltZW91dF9jb250cm9sKTsvKiB0aW1lb3V0IGRpc2FibGUgKi8KKworCWNvbmZpZyA9IHJlYWRsKCZncG1jX2Jhc2UtPmNvbmZpZyk7CisJY29uZmlnICY9ICh+MHhmMDApOworCXdyaXRlbChjb25maWcsICZncG1jX2Jhc2UtPmNvbmZpZyk7CisKKwkvKgorCSAqIERpc2FibGUgdGhlIEdQTUMwIGNvbmZpZyBzZXQgYnkgUk9NIGNvZGUKKwkgKiBJdCBjb25mbGljdHMgd2l0aCBvdXIgTVBEQiAoYm90aCBhdCAweDA4MDAwMDAwKQorCSAqLworCXdyaXRlbCgwLCAmZ3BtY19jc19iYXNlLT5jb25maWc3KTsKKwlzZGVsYXkoMTAwMCk7CisKKyNpZiBkZWZpbmVkKENPTkZJR19DTURfTkFORCkJLyogQ1MgMCAqLworCWdwbWNfY29uZmlnID0gZ3BtY19tX25hbmQ7CisJZ3BtY19jZmdfYmFzZSA9IGdwbWNfYmFzZTsKKwluYW5kX2NzX2Jhc2UgPSAoZ3BtY19jc3hfdCAqKShHUE1DX0NPTkZJR19DUzBfQkFTRSArCisJCQkJCShHUE1DX0NTICogR1BNQ19DT05GSUdfV0lEVEgpKTsKKwliYXNlID0gUElTTU8xX05BTkRfQkFTRTsKKwlzaXplID0gUElTTU8xX05BTkRfU0laRTsKKwllbmFibGVfZ3BtY19jb25maWcoZ3BtY19jb25maWcsIG5hbmRfY3NfYmFzZSwgYmFzZSwgc2l6ZSk7CisjaWYgZGVmaW5lZChDT05GSUdfRU5WX0lTX0lOX05BTkQpCisJZl9vZmYgPSBTTU5BTkRfRU5WX09GRlNFVDsKKwlmX3NlYyA9IFNaXzEyOEs7CisJLyogZW52IHNldHVwICovCisJYm9vdF9mbGFzaF9iYXNlID0gYmFzZTsKKwlib290X2ZsYXNoX29mZiA9IGZfb2ZmOworCWJvb3RfZmxhc2hfc2VjID0gZl9zZWM7CisJYm9vdF9mbGFzaF9lbnZfYWRkciA9IGZfb2ZmOworI2VuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX0NNRF9PTkVOQU5EKQorCWdwbWNfY29uZmlnID0gZ3BtY19vbmVuYW5kOworCW9uZW5hbmRfY3NfYmFzZSA9IChncG1jX2NzeF90ICopKEdQTUNfQ09ORklHX0NTMF9CQVNFICsKKwkJCQkJKEdQTUNfQ1MgKiBHUE1DX0NPTkZJR19XSURUSCkpOworCWJhc2UgPSBQSVNNTzFfT05FTl9CQVNFOworCXNpemUgPSBQSVNNTzFfT05FTl9TSVpFOworCWVuYWJsZV9ncG1jX2NvbmZpZyhncG1jX2NvbmZpZywgb25lbmFuZF9jc19iYXNlLCBiYXNlLCBzaXplKTsKKyNpZiBkZWZpbmVkKENPTkZJR19FTlZfSVNfSU5fT05FTkFORCkKKwlmX29mZiA9IE9ORU5BTkRfRU5WX09GRlNFVDsKKwlmX3NlYyA9IFNaXzEyOEs7CisJLyogZW52IHNldHVwICovCisJYm9vdF9mbGFzaF9iYXNlID0gYmFzZTsKKwlib290X2ZsYXNoX29mZiA9IGZfb2ZmOworCWJvb3RfZmxhc2hfc2VjID0gZl9zZWM7CisJYm9vdF9mbGFzaF9lbnZfYWRkciA9IGZfb2ZmOworI2VuZGlmCisjZW5kaWYKK30KZGlmZiAtLWdpdCBhL2NwdS9hcm1fY29ydGV4YTgvb21hcDMvc3lzX2luZm8uYyBiL2NwdS9hcm1fY29ydGV4YTgvb21hcDMvc3lzX2luZm8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjAxMmI2Ci0tLSAvZGV2L251bGwKKysrIGIvY3B1L2FybV9jb3J0ZXhhOC9vbWFwMy9zeXNfaW5mby5jCkBAIC0wLDAgKzEsMjU0IEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDA4CisgKiBUZXhhcyBJbnN0cnVtZW50cywgPHd3dy50aS5jb20+CisgKgorICogQXV0aG9yIDoKKyAqICAgICAgTWFuaWthbmRhbiBQaWxsYWkgPG1hbmkucGlsbGFpQHRpLmNvbT4KKyAqCisgKiBEZXJpdmVkIGZyb20gQmVhZ2xlIEJvYXJkIGFuZCAzNDMwIFNEUCBjb2RlIGJ5CisgKiAgICAgIFJpY2hhcmQgV29vZHJ1ZmYgPHItd29vZHJ1ZmYyQHRpLmNvbT4KKyAqICAgICAgU3llZCBNb2hhbW1lZCBLaGFzaW0gPGtoYXNpbUB0aS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIC9QVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9tZW0uaD4JLyogZ2V0IG1lbSB0YWJsZXMgKi8KKyNpbmNsdWRlIDxhc20vYXJjaC9zeXNfcHJvdG8uaD4KKyNpbmNsdWRlIDxpMmMuaD4KKworZXh0ZXJuIG9tYXAzX3N5c2luZm8gc3lzaW5mbzsKK3N0YXRpYyBncG1jX2NzeF90ICpncG1jX2NzX2Jhc2UgPSAoZ3BtY19jc3hfdCAqKUdQTUNfQ09ORklHX0NTMF9CQVNFOworc3RhdGljIHNkcmNfdCAqc2RyY19iYXNlID0gKHNkcmNfdCAqKU9NQVAzNFhYX1NEUkNfQkFTRTsKK3N0YXRpYyBjdHJsX3QgKmN0cmxfYmFzZSA9IChjdHJsX3QgKilPTUFQMzRYWF9DVFJMX0JBU0U7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGdldF9jcHVfcmV2KHZvaWQpIC0gZXh0cmFjdCB2ZXJzaW9uIGluZm8KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit1MzIgZ2V0X2NwdV9yZXYodm9pZCkKK3sKKwl1MzIgY3B1aWQgPSAwOworCisJLyoKKwkgKiBPbiBFUzEuMCB0aGUgSURDT0RFIHJlZ2lzdGVyIGlzIG5vdCBleHBvc2VkIG9uIEw0CisJICogc28gdXNpbmcgQ1BVIElEIHRvIGRpZmZlcmVudGlhdGUKKwkgKiBiZXR3ZWVuIEVTMi4wIGFuZCBFUzEuMC4KKwkgKi8KKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygibXJjIHAxNSwgMCwgJTAsIGMwLCBjMCwgMCI6Ij1yIihjcHVpZCkpOworCWlmICgoY3B1aWQgJiAweGYpID09IDB4MCkKKwkJcmV0dXJuIENQVV8zNDMwX0VTMTsKKwllbHNlCisJCXJldHVybiBDUFVfMzQzMF9FUzI7CisKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGlzX21lbV9zZHIoKSAtIHJldHVybiAxIGlmIG1lbSB0eXBlIGluIHVzZSBpcyBTRFIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordTMyIGlzX21lbV9zZHIodm9pZCkKK3sKKwlpZiAocmVhZGwoJnNkcmNfYmFzZS0+Y3NbQ1MwXS5tcikgPT0gU0RQX1NEUkNfTVJfMF9TRFIpCisJCXJldHVybiAxOworCXJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGdldF9jczBfc2l6ZSgpIC0gZ2V0IHNpemUgb2YgY2hpcCBzZWxlY3QgMC8xCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordTMyIGdldF9zZHJfY3Nfc2l6ZSh1MzIgY3MpCit7CisJdTMyIHNpemU7CisKKwkvKiBnZXQgcmFtIHNpemUgZmllbGQgKi8KKwlzaXplID0gcmVhZGwoJnNkcmNfYmFzZS0+Y3NbY3NdLm1jZmcpID4+IDg7CisJc2l6ZSAmPSAweDNGRjsJCS8qIHJlbW92ZSB1bndhbnRlZCBiaXRzICovCisJc2l6ZSAqPSBTWl8yTTsJCS8qIGZpbmQgc2l6ZSBpbiBNQiAqLworCXJldHVybiBzaXplOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGdldF9zZHJfY3Nfb2Zmc2V0KCkgLSBnZXQgb2Zmc2V0IG9mIGNzIGZyb20gY3MwIHN0YXJ0CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordTMyIGdldF9zZHJfY3Nfb2Zmc2V0KHUzMiBjcykKK3sKKwl1MzIgb2Zmc2V0OworCisJaWYgKCFjcykKKwkJcmV0dXJuIDA7CisKKwlvZmZzZXQgPSByZWFkbCgmc2RyY19iYXNlLT5jc19jZmcpOworCW9mZnNldCA9IChvZmZzZXQgJiAxNSkgPDwgMjcgfCAob2Zmc2V0ICYgMHgzMCkgPj4gMTc7CisKKwlyZXR1cm4gb2Zmc2V0OworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGdldF9ib2FyZF90eXBlKCkgLSBnZXQgYm9hcmQgdHlwZSBiYXNlZCBvbiBjdXJyZW50IHByb2R1Y3Rpb24gc3RhdHMuCisgKiAgLSBOT1RFLTEtOiAyIEkyQyBFRVBST01zIHdpbGwgc29tZWRheSBiZSBwb3B1bGF0ZWQgd2l0aCBwcm9wZXIgaW5mby4KKyAqICAgIHdoZW4gdGhleSBhcmUgYXZhaWxhYmxlIHdlIGNhbiBnZXQgaW5mbyBmcm9tIHRoZXJlLiAgVGhpcyBzaG91bGQKKyAqICAgIGJlIGNvcnJlY3Qgb2YgYWxsIGtub3duIGJvYXJkcyB1cCB1bnRpbCB0b2RheS4KKyAqICAtIE5PVEUtMi0gRUVQUk9NcyBhcmUgcG9wdWxhdGVkIGJ1dCB0aGV5IGFyZSB1cGRhdGVkIHZlcnkgc2xvd2x5LiAgVG8KKyAqICAgIGF2b2lkIHdhaXRpbmcgb24gdGhlbSB3ZSB3aWxsIHVzZSBFUyB2ZXJzaW9uIG9mIHRoZSBjaGlwIHRvIGdldCBpbmZvLgorICogICAgQSBsYXRlciB2ZXJzaW9uIG9mIHRoZSBGUEdBIG1pZ3RoIHNvbHZlIHRoZWlyIHNwZWVkIGlzc3VlLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3UzMiBnZXRfYm9hcmRfdHlwZSh2b2lkKQoreworCWlmIChnZXRfY3B1X3JldigpID09IENQVV8zNDMwX0VTMikKKwkJcmV0dXJuIHN5c2luZm8uYm9hcmRfdHlwZV92MjsKKwllbHNlCisJCXJldHVybiBzeXNpbmZvLmJvYXJkX3R5cGVfdjE7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBnZXRfZ3BtYzBfYmFzZSgpIC0gUmV0dXJuIGN1cnJlbnQgYWRkcmVzcyBoYXJkd2FyZSB3aWxsIGJlCisgKiAgICAgZmV0Y2hpbmcgZnJvbS4gVGhlIGJlbG93IGVmZmVjdGl2ZWx5IGdpdmVzIHdoYXQgaXMgY29ycmVjdCwgaXRzIGEgYml0CisgKiAgIG1pcy1sZWFkaW5nIGNvbXBhcmVkIHRvIHRoZSBUUk0uICBGb3IgdGhlIG1vc3QgZ2VuZXJhbCBjYXNlIHRoZSBtYXNrCisgKiAgIG5lZWRzIHRvIGJlIGFsc28gdGFrZW4gaW50byBhY2NvdW50IHRoaXMgZG9lcyB3b3JrIGluIHByYWN0aWNlLgorICogICAtIGZvciB1LWJvb3Qgd2UgY3VycmVudGx5IG1hcDoKKyAqICAgICAgIC0tIDAgdG8gbm90aGluZywKKyAqICAgICAgIC0tIDQgdG8gZmxhc2gKKyAqICAgICAgIC0tIDggdG8gZW5lbnQKKyAqICAgICAgIC0tIGMgdG8gd2lmaQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit1MzIgZ2V0X2dwbWMwX2Jhc2Uodm9pZCkKK3sKKwl1MzIgYjsKKworCWIgPSByZWFkbCgmZ3BtY19jc19iYXNlLT5jb25maWc3KTsKKwliICY9IDB4MUY7CQkvKiBrZWVwIGJhc2UgWzU6MF0gKi8KKwliID0gYiA8PCAyNDsJCS8qIHJldCAweDBiMDAwMDAwICovCisJcmV0dXJuIGI7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBnZXRfZ3BtYzBfd2lkdGgoKSAtIFNlZSBpZiBidXMgaXMgaW4geDggb3IgeDE2IChtYWlubHkgZm9yIG5hbmQpCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3UzMiBnZXRfZ3BtYzBfd2lkdGgodm9pZCkKK3sKKwlyZXR1cm4gV0lEVEhfMTZCSVQ7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBnZXRfYm9hcmRfcmV2KCkgLSBzZXR1cCB0byBwYXNzIGtlcm5lbCBib2FyZCByZXZpc2lvbiBpbmZvcm1hdGlvbgorICogcmV0dXJuczooYml0WzAtM10gc3ViIHZlcnNpb24sIGhpZ2hlciBiaXRbNy00XSBpcyBoaWdoZXIgdmVyc2lvbikKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordTMyIGdldF9ib2FyZF9yZXYodm9pZCkKK3sKKwlyZXR1cm4gMHgyMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIGRpc3BsYXlfYm9hcmRfaW5mbygpIC0gcHJpbnQgYmFubmVyIHdpdGggYm9hcmQgaW5mby4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIGRpc3BsYXlfYm9hcmRfaW5mbyh1MzIgYnR5cGUpCit7CisJY2hhciAqbWVtX3MsICpzZWNfczsKKworCWlmIChpc19tZW1fc2RyKCkpCisJCW1lbV9zID0gIm1TRFIiOworCWVsc2UKKwkJbWVtX3MgPSAiTFBERFIiOworCisJc3dpdGNoIChnZXRfZGV2aWNlX3R5cGUoKSkgeworCWNhc2UgVFNUX0RFVklDRToKKwkJc2VjX3MgPSAiVFNUIjsKKwkJYnJlYWs7CisJY2FzZSBFTVVfREVWSUNFOgorCQlzZWNfcyA9ICJFTVUiOworCQlicmVhazsKKwljYXNlIEhTX0RFVklDRToKKwkJc2VjX3MgPSAiSFMiOworCQlicmVhazsKKwljYXNlIEdQX0RFVklDRToKKwkJc2VjX3MgPSAiR1AiOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlzZWNfcyA9ICI/IjsKKwl9CisKKwlwcmludGYoIk9NQVAlcy0lcyByZXYgJWQsIENQVS1PUFAyIEwzLTE2NU1IelxuIiwgc3lzaW5mby5jcHVfc3RyaW5nLAorCSAgICAgICBzZWNfcywgZ2V0X2NwdV9yZXYoKSk7CisJcHJpbnRmKCIlcyArICVzLyVzXG4iLCBzeXNpbmZvLmJvYXJkX3N0cmluZywKKwkgICAgICAgbWVtX3MsIHN5c2luZm8ubmFuZF9zdHJpbmcpOworCit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIGdldF9iYXNlKCk7IGdldCB1cHBlciBhZGRyIG9mIGN1cnJlbnQgZXhlY3V0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3UzMiBnZXRfYmFzZSh2b2lkKQoreworCXUzMiB2YWw7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygibW92ICUwLCBwYyBcbiI6Ij1yIih2YWwpOjoibWVtb3J5Iik7CisJdmFsICY9IDB4RjAwMDAwMDA7CisJdmFsID4+PSAyODsKKwlyZXR1cm4gdmFsOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBpc19ydW5uaW5nX2luX2ZsYXNoKCkgLSB0ZWxsIGlmIGN1cnJlbnRseSBydW5uaW5nIGluCisgKiAgRkxBU0guCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3UzMiBpc19ydW5uaW5nX2luX2ZsYXNoKHZvaWQpCit7CisJaWYgKGdldF9iYXNlKCkgPCA0KQorCQlyZXR1cm4gMTsJLyogaW4gRkxBU0ggKi8KKworCXJldHVybiAwOwkJLyogcnVubmluZyBpbiBTUkFNIG9yIFNEUkFNICovCit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIGlzX3J1bm5pbmdfaW5fc3JhbSgpIC0gdGVsbCBpZiBjdXJyZW50bHkgcnVubmluZyBpbgorICogIFNSQU0uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3UzMiBpc19ydW5uaW5nX2luX3NyYW0odm9pZCkKK3sKKwlpZiAoZ2V0X2Jhc2UoKSA9PSA0KQorCQlyZXR1cm4gMTsJLyogaW4gU1JBTSAqLworCisJcmV0dXJuIDA7CQkvKiBydW5uaW5nIGluIEZMQVNIIG9yIFNEUkFNICovCit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIGlzX3J1bm5pbmdfaW5fc2RyYW0oKSAtIHRlbGwgaWYgY3VycmVudGx5IHJ1bm5pbmcgaW4KKyAqICBTRFJBTS4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordTMyIGlzX3J1bm5pbmdfaW5fc2RyYW0odm9pZCkKK3sKKwlpZiAoZ2V0X2Jhc2UoKSA+IDQpCisJCXJldHVybiAxOwkvKiBpbiBTRFJBTSAqLworCisJcmV0dXJuIDA7CQkvKiBydW5uaW5nIGluIFNSQU0gb3IgRkxBU0ggKi8KK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIGdldF9ib290X3R5cGUoKSAtIElzIHRoaXMgYW4gWElQIHR5cGUgZGV2aWNlIG9yIGEgc3RyZWFtIG9uZQorICogIGJpdHMgNC0wIHNwZWNpZnkgdHlwZS4gQml0IDUgc2F5cyBtZW0vcGVyaWYKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit1MzIgZ2V0X2Jvb3RfdHlwZSh2b2lkKQoreworCXJldHVybiAocmVhZGwoJmN0cmxfYmFzZS0+c3RhdHVzKSAmIFNZU0JPT1RfTUFTSyk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgZ2V0X2RldmljZV90eXBlKCk6IHRlbGwgaWYgR1AvSFMvRU1VL1RTVAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit1MzIgZ2V0X2RldmljZV90eXBlKHZvaWQpCit7CisJcmV0dXJuICgocmVhZGwoJmN0cmxfYmFzZS0+c3RhdHVzKSAmIChERVZJQ0VfTUFTSykpID4+IDgpOworfQpkaWZmIC0tZ2l0IGEvY3B1L2FybV9jb3J0ZXhhOC9vbWFwMy9zeXNsaWIuYyBiL2NwdS9hcm1fY29ydGV4YTgvb21hcDMvc3lzbGliLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWNlZDQ5NQotLS0gL2Rldi9udWxsCisrKyBiL2NwdS9hcm1fY29ydGV4YTgvb21hcDMvc3lzbGliLmMKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwOAorICogVGV4YXMgSW5zdHJ1bWVudHMsIDx3d3cudGkuY29tPgorICoKKyAqIFJpY2hhcmQgV29vZHJ1ZmYgPHItd29vZHJ1ZmYyQHRpLmNvbT4KKyAqIFN5ZWQgTW9oYW1tZWQgS2hhc2ltIDxraGFzaW1AdGkuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9tZW0uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9jbG9ja3MuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9zeXNfcHJvdG8uaD4KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogc2RlbGF5KCkgLSBzaW1wbGUgc3BpbiBsb29wLiAgV2lsbCBiZSBjb25zdGFudCB0aW1lIGFzCisgKiAgaXRzIGdlbmVyYWxseSB1c2VkIGluIGJ5cGFzcyBjb25kaXRpb25zIG9ubHkuICBUaGlzCisgKiAgaXMgbmVjZXNzYXJ5IHVudGlsIHRpbWVycyBhcmUgYWNjZXNzaWJsZS4KKyAqCisgKiAgbm90IGlubGluZSB0byBpbmNyZWFzZSBjaGFuY2VzIGl0cyBpbiBjYWNoZSB3aGVuIGNhbGxlZAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIHNkZWxheSh1bnNpZ25lZCBsb25nIGxvb3BzKQoreworCV9fYXNtX18gdm9sYXRpbGUgKCIxOlxuIiAic3VicyAlMCwgJTEsICMxXG4iCisJCQkgICJibmUgMWIiOiI9ciIgKGxvb3BzKToiMCIobG9vcHMpKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBzcjMyIC0gY2xlYXIgJiBzZXQgYSB2YWx1ZSBpbiBhIGJpdCByYW5nZSBmb3IgYSAzMiBiaXQgYWRkcmVzcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBzcjMyKHZvaWQgKmFkZHIsIHUzMiBzdGFydF9iaXQsIHUzMiBudW1fYml0cywgdTMyIHZhbHVlKQoreworCXUzMiB0bXAsIG1zayA9IDA7CisJbXNrID0gMSA8PCBudW1fYml0czsKKwktLW1zazsKKwl0bXAgPSByZWFkbCgodTMyKWFkZHIpICYgfihtc2sgPDwgc3RhcnRfYml0KTsKKwl0bXAgfD0gdmFsdWUgPDwgc3RhcnRfYml0OworCXdyaXRlbCh0bXAsICh1MzIpYWRkcik7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIHdhaXRfb25fdmFsdWUoKSAtIGNvbW1vbiByb3V0aW5lIHRvIGFsbG93IHdhaXRpbmcgZm9yIGNoYW5nZXMgaW4KKyAqICAgdm9sYXRpbGUgcmVncy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit1MzIgd2FpdF9vbl92YWx1ZSh1MzIgcmVhZF9iaXRfbWFzaywgdTMyIG1hdGNoX3ZhbHVlLCB2b2lkICpyZWFkX2FkZHIsCisJCSAgdTMyIGJvdW5kKQoreworCXUzMiBpID0gMCwgdmFsOworCWRvIHsKKwkJKytpOworCQl2YWwgPSByZWFkbCgodTMyKXJlYWRfYWRkcikgJiByZWFkX2JpdF9tYXNrOworCQlpZiAodmFsID09IG1hdGNoX3ZhbHVlKQorCQkJcmV0dXJuIDE7CisJCWlmIChpID09IGJvdW5kKQorCQkJcmV0dXJuIDA7CisJfSB3aGlsZSAoMSk7Cit9CmRpZmYgLS1naXQgYS9jcHUvYXJtX2NvcnRleGE4L3N0YXJ0LlMgYi9jcHUvYXJtX2NvcnRleGE4L3N0YXJ0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDdhY2RiZAotLS0gL2Rldi9udWxsCisrKyBiL2NwdS9hcm1fY29ydGV4YTgvc3RhcnQuUwpAQCAtMCwwICsxLDUxNiBAQAorLyoKKyAqIGFybWJvb3QgLSBTdGFydHVwIENvZGUgZm9yIE9NQVAzNTMwL0FSTSBDb3J0ZXggQ1BVLWNvcmUKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQJVGV4YXMgSW5zdHJ1bWVudHMgPHItd29vZHJ1ZmYyQHRpLmNvbT4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDEJTWFyaXVzIEdyw7ZnZXIgPG1hZ0BzeXNnby5kZT4KKyAqIENvcHlyaWdodCAoYykgMjAwMglBbGV4IFrDvHBrZSA8YXp1QHN5c2dvLmRlPgorICogQ29weXJpZ2h0IChjKSAyMDAyCUdhcnkgSmVubmVqb2huIDxnakBkZW54LmRlPgorICogQ29weXJpZ2h0IChjKSAyMDAzCVJpY2hhcmQgV29vZHJ1ZmYgPHItd29vZHJ1ZmYyQHRpLmNvbT4KKyAqIENvcHlyaWdodCAoYykgMjAwMwlLc2hpdGlqIDxrc2hpdGlqQHRpLmNvbT4KKyAqIENvcHlyaWdodCAoYykgMjAwNi0yMDA4IFN5ZWQgTW9oYW1tZWQgS2hhc2ltIDx4MGtoYXNpbUB0aS5jb20+CisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCSBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorI2luY2x1ZGUgPHZlcnNpb24uaD4KKworLmdsb2JsIF9zdGFydAorX3N0YXJ0OiBiCXJlc2V0CisJbGRyCXBjLCBfdW5kZWZpbmVkX2luc3RydWN0aW9uCisJbGRyCXBjLCBfc29mdHdhcmVfaW50ZXJydXB0CisJbGRyCXBjLCBfcHJlZmV0Y2hfYWJvcnQKKwlsZHIJcGMsIF9kYXRhX2Fib3J0CisJbGRyCXBjLCBfbm90X3VzZWQKKwlsZHIJcGMsIF9pcnEKKwlsZHIJcGMsIF9maXEKKworX3VuZGVmaW5lZF9pbnN0cnVjdGlvbjogLndvcmQgdW5kZWZpbmVkX2luc3RydWN0aW9uCitfc29mdHdhcmVfaW50ZXJydXB0Ogkud29yZCBzb2Z0d2FyZV9pbnRlcnJ1cHQKK19wcmVmZXRjaF9hYm9ydDoJLndvcmQgcHJlZmV0Y2hfYWJvcnQKK19kYXRhX2Fib3J0OgkJLndvcmQgZGF0YV9hYm9ydAorX25vdF91c2VkOgkJLndvcmQgbm90X3VzZWQKK19pcnE6CQkJLndvcmQgaXJxCitfZmlxOgkJCS53b3JkIGZpcQorX3BhZDoJCQkud29yZCAweDEyMzQ1Njc4IC8qIG5vdyAxNio0PTY0ICovCisuZ2xvYmFsIF9lbmRfdmVjdAorX2VuZF92ZWN0OgorCisJLmJhbGlnbmwgMTYsMHhkZWFkYmVlZgorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBTdGFydHVwIENvZGUgKHJlc2V0IHZlY3RvcikKKyAqCisgKiBkbyBpbXBvcnRhbnQgaW5pdCBvbmx5IGlmIHdlIGRvbid0IHN0YXJ0IGZyb20gbWVtb3J5IQorICogc2V0dXAgTWVtb3J5IGFuZCBib2FyZCBzcGVjaWZpYyBiaXRzIHByaW9yIHRvIHJlbG9jYXRpb24uCisgKiByZWxvY2F0ZSBhcm1ib290IHRvIHJhbQorICogc2V0dXAgc3RhY2sKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworX1RFWFRfQkFTRToKKwkud29yZAlURVhUX0JBU0UKKworLmdsb2JsIF9hcm1ib290X3N0YXJ0CitfYXJtYm9vdF9zdGFydDoKKwkud29yZCBfc3RhcnQKKworLyoKKyAqIFRoZXNlIGFyZSBkZWZpbmVkIGluIHRoZSBib2FyZC1zcGVjaWZpYyBsaW5rZXIgc2NyaXB0LgorICovCisuZ2xvYmwgX2Jzc19zdGFydAorX2Jzc19zdGFydDoKKwkud29yZCBfX2Jzc19zdGFydAorCisuZ2xvYmwgX2Jzc19lbmQKK19ic3NfZW5kOgorCS53b3JkIF9lbmQKKworI2lmZGVmIENPTkZJR19VU0VfSVJRCisvKiBJUlEgc3RhY2sgbWVtb3J5IChjYWxjdWxhdGVkIGF0IHJ1bi10aW1lKSAqLworLmdsb2JsIElSUV9TVEFDS19TVEFSVAorSVJRX1NUQUNLX1NUQVJUOgorCS53b3JkCTB4MGJhZGMwZGUKKworLyogSVJRIHN0YWNrIG1lbW9yeSAoY2FsY3VsYXRlZCBhdCBydW4tdGltZSkgKi8KKy5nbG9ibCBGSVFfU1RBQ0tfU1RBUlQKK0ZJUV9TVEFDS19TVEFSVDoKKwkud29yZCAweDBiYWRjMGRlCisjZW5kaWYKKworLyoKKyAqIHRoZSBhY3R1YWwgcmVzZXQgY29kZQorICovCisKK3Jlc2V0OgorCS8qCisJICogc2V0IHRoZSBjcHUgdG8gU1ZDMzIgbW9kZQorCSAqLworCW1ycwlyMCwgY3BzcgorCWJpYwlyMCwgcjAsICMweDFmCisJb3JyCXIwLCByMCwgIzB4ZDMKKwltc3IJY3BzcixyMAorCisjaWYgKENPTkZJR19PTUFQMzRYWCkKKwkvKiBDb3B5IHZlY3RvcnMgdG8gbWFzayBST00gaW5kaXJlY3QgYWRkciAqLworCWFkcglyMCwgX3N0YXJ0CQlAIHIwIDwtIGN1cnJlbnQgcG9zaXRpb24gb2YgY29kZQorCWFkZAlyMCwgcjAsICM0CQlAIHNraXAgcmVzZXQgdmVjdG9yCisJbW92CXIyLCAjNjQJCQlAIHIyIDwtIHNpemUgdG8gY29weQorCWFkZAlyMiwgcjAsIHIyCQlAIHIyIDwtIHNvdXJjZSBlbmQgYWRkcmVzcworCW1vdglyMSwgI1NSQU1fT0ZGU0VUMAlAIGJ1aWxkIHZlY3QgYWRkcgorCW1vdglyMywgI1NSQU1fT0ZGU0VUMQorCWFkZAlyMSwgcjEsIHIzCisJbW92CXIzLCAjU1JBTV9PRkZTRVQyCisJYWRkCXIxLCByMSwgcjMKK25leHQ6CisJbGRtaWEJcjAhLCB7cjMgLSByMTB9CQlAIGNvcHkgZnJvbSBzb3VyY2UgYWRkcmVzcyBbcjBdCisJc3RtaWEJcjEhLCB7cjMgLSByMTB9CQlAIGNvcHkgdG8gICB0YXJnZXQgYWRkcmVzcyBbcjFdCisJY21wCXIwLCByMgkJCUAgdW50aWwgc291cmNlIGVuZCBhZGRyZXNzIFtyMl0KKwlibmUJbmV4dAkJCUAgbG9vcCB1bnRpbCBlcXVhbCAqLworI2lmICFkZWZpbmVkKENPTkZJR19TWVNfTkFORF9CT09UKSAmJiAhZGVmaW5lZChDT05GSUdfU1lTX09ORU5BTkRfQk9PVCkKKwkvKiBObyBuZWVkIHRvIGNvcHkvZXhlYyB0aGUgY2xvY2sgY29kZSAtIERQTEwgYWRqdXN0IGFscmVhZHkgZG9uZQorCSAqIGluIE5BTkQvb25lTkFORCBCb290LgorCSAqLworCWJsCWNweV9jbGtfY29kZQkJQCBwdXQgZHBsbCBhZGp1c3QgY29kZSBiZWhpbmQgdmVjdG9ycworI2VuZGlmIC8qIE5BTkQgQm9vdCAqLworI2VuZGlmCisJLyogdGhlIG1hc2sgUk9NIGNvZGUgc2hvdWxkIGhhdmUgUExMIGFuZCBvdGhlcnMgc3RhYmxlICovCisjaWZuZGVmIENPTkZJR19TS0lQX0xPV0xFVkVMX0lOSVQKKwlibAljcHVfaW5pdF9jcml0CisjZW5kaWYKKworI2lmbmRlZiBDT05GSUdfU0tJUF9SRUxPQ0FURV9VQk9PVAorcmVsb2NhdGU6CQkJCUAgcmVsb2NhdGUgVS1Cb290IHRvIFJBTQorCWFkcglyMCwgX3N0YXJ0CQlAIHIwIDwtIGN1cnJlbnQgcG9zaXRpb24gb2YgY29kZQorCWxkcglyMSwgX1RFWFRfQkFTRQkJQCB0ZXN0IGlmIHdlIHJ1biBmcm9tIGZsYXNoIG9yIFJBTQorCWNtcAlyMCwgcjEJCQlAIGRvbid0IHJlbG9jIGR1cmluZyBkZWJ1ZworCWJlcQlzdGFja19zZXR1cAorCisJbGRyCXIyLCBfYXJtYm9vdF9zdGFydAorCWxkcglyMywgX2Jzc19zdGFydAorCXN1YglyMiwgcjMsIHIyCQlAIHIyIDwtIHNpemUgb2YgYXJtYm9vdAorCWFkZAlyMiwgcjAsIHIyCQlAIHIyIDwtIHNvdXJjZSBlbmQgYWRkcmVzcworCitjb3B5X2xvb3A6CQkJCUAgY29weSAzMiBieXRlcyBhdCBhIHRpbWUKKwlsZG1pYQlyMCEsIHtyMyAtIHIxMH0JCUAgY29weSBmcm9tIHNvdXJjZSBhZGRyZXNzIFtyMF0KKwlzdG1pYQlyMSEsIHtyMyAtIHIxMH0JCUAgY29weSB0byAgIHRhcmdldCBhZGRyZXNzIFtyMV0KKwljbXAJcjAsIHIyCQkJQCB1bnRpbCBzb3VyY2UgZW5kIGFkZHJlZWUgW3IyXQorCWJsZQljb3B5X2xvb3AKKyNlbmRpZgkvKiBDT05GSUdfU0tJUF9SRUxPQ0FURV9VQk9PVCAqLworCisJLyogU2V0IHVwIHRoZSBzdGFjayAqLworc3RhY2tfc2V0dXA6CisJbGRyCXIwLCBfVEVYVF9CQVNFCQlAIHVwcGVyIDEyOCBLaUI6IHJlbG9jYXRlZCB1Ym9vdAorCXN1YglyMCwgcjAsICNDT05GSUdfU1lTX01BTExPQ19MRU4gQCBtYWxsb2MgYXJlYQorCXN1YglyMCwgcjAsICNDT05GSUdfU1lTX0dCTF9EQVRBX1NJWkUgQCBiZGluZm8KKyNpZmRlZiBDT05GSUdfVVNFX0lSUQorCXN1YglyMCwgcjAsICMoQ09ORklHX1NUQUNLU0laRV9JUlEgKyBDT05GSUdfU1RBQ0tTSVpFX0ZJUSkKKyNlbmRpZgorCXN1YglzcCwgcjAsICMxMgkJQCBsZWF2ZSAzIHdvcmRzIGZvciBhYm9ydC1zdGFjaworCWFuZAlzcCwgc3AsICN+NwkJQCA4IGJ5dGUgYWxpbmdlZCBmb3IgKGxkci9zdHIpZAorCisJLyogQ2xlYXIgQlNTIChpZiBhbnkpLiBJcyBiZWxvdyB0eCAod2F0Y2ggbG9hZCBhZGRyIC0gbmVlZCBzcGFjZSkgKi8KK2NsZWFyX2JzczoKKwlsZHIJcjAsIF9ic3Nfc3RhcnQJCUAgZmluZCBzdGFydCBvZiBic3Mgc2VnbWVudAorCWxkcglyMSwgX2Jzc19lbmQJCUAgc3RvcCBoZXJlCisJbW92CXIyLCAjMHgwMDAwMDAwMAkJQCBjbGVhciB2YWx1ZQorY2xic3NfbDoKKwlzdHIJcjIsIFtyMF0JCUAgY2xlYXIgQlNTIGxvY2F0aW9uCisJY21wCXIwLCByMQkJCUAgYXJlIHdlIGF0IHRoZSBlbmQgeWV0CisJYWRkCXIwLCByMCwgIzQJCUAgaW5jcmVtZW50IGNsZWFyIGluZGV4IHBvaW50ZXIKKwlibmUJY2xic3NfbAkJCUAga2VlcCBjbGVhcmluZyB0aWxsIGF0IGVuZAorCisJbGRyCXBjLCBfc3RhcnRfYXJtYm9vdAlAIGp1bXAgdG8gQyBjb2RlCisKK19zdGFydF9hcm1ib290OiAud29yZCBzdGFydF9hcm1ib290CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBDUFVfaW5pdF9jcml0aWNhbCByZWdpc3RlcnMKKyAqCisgKiBzZXR1cCBpbXBvcnRhbnQgcmVnaXN0ZXJzCisgKiBzZXR1cCBtZW1vcnkgdGltaW5nCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitjcHVfaW5pdF9jcml0OgorCS8qCisJICogSW52YWxpZGF0ZSBMMSBJL0QKKwkgKi8KKwltb3YJcjAsICMwCQkJQCBzZXQgdXAgZm9yIE1DUgorCW1jcglwMTUsIDAsIHIwLCBjOCwgYzcsIDAJQCBpbnZhbGlkYXRlIFRMQnMKKwltY3IJcDE1LCAwLCByMCwgYzcsIGM1LCAwCUAgaW52YWxpZGF0ZSBpY2FjaGUKKworCS8qCisJICogZGlzYWJsZSBNTVUgc3R1ZmYgYW5kIGNhY2hlcworCSAqLworCW1yYwlwMTUsIDAsIHIwLCBjMSwgYzAsIDAKKwliaWMJcjAsIHIwLCAjMHgwMDAwMjAwMAlAIGNsZWFyIGJpdHMgMTMgKC0tVi0pCisJYmljCXIwLCByMCwgIzB4MDAwMDAwMDcJQCBjbGVhciBiaXRzIDI6MCAoLUNBTSkKKwlvcnIJcjAsIHIwLCAjMHgwMDAwMDAwMglAIHNldCBiaXQgMSAoLS1BLSkgQWxpZ24KKwlvcnIJcjAsIHIwLCAjMHgwMDAwMDgwMAlAIHNldCBiaXQgMTIgKFotLS0pIEJUQgorCW1jcglwMTUsIDAsIHIwLCBjMSwgYzAsIDAKKworCS8qCisJICogSnVtcCB0byBib2FyZCBzcGVjaWZpYyBpbml0aWFsaXphdGlvbi4uLgorCSAqIFRoZSBNYXNrIFJPTSB3aWxsIGhhdmUgYWxyZWFkeSBpbml0aWFsaXplZAorCSAqIGJhc2ljIG1lbW9yeS4gR28gaGVyZSB0byBidW1wIHVwIGNsb2NrIHJhdGUgYW5kIGhhbmRsZQorCSAqIHdha2UgdXAgY29uZGl0aW9ucy4KKwkgKi8KKwltb3YJaXAsIGxyCQkJQCBwZXJzZXZlcmUgbGluayByZWcgYWNyb3NzIGNhbGwKKwlibAlsb3dsZXZlbF9pbml0CQlAIGdvIHNldHVwIHBsbCxtdXgsbWVtb3J5CisJbW92CWxyLCBpcAkJCUAgcmVzdG9yZSBsaW5rCisJbW92CXBjLCBscgkJCUAgYmFjayB0byBteSBjYWxsZXIKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEludGVycnVwdCBoYW5kbGluZworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KK0AKK0AgSVJRIHN0YWNrIGZyYW1lLgorQAorI2RlZmluZSBTX0ZSQU1FX1NJWkUJNzIKKworI2RlZmluZSBTX09MRF9SMAk2OAorI2RlZmluZSBTX1BTUgkJNjQKKyNkZWZpbmUgU19QQwkJNjAKKyNkZWZpbmUgU19MUgkJNTYKKyNkZWZpbmUgU19TUAkJNTIKKworI2RlZmluZSBTX0lQCQk0OAorI2RlZmluZSBTX0ZQCQk0NAorI2RlZmluZSBTX1IxMAkJNDAKKyNkZWZpbmUgU19SOQkJMzYKKyNkZWZpbmUgU19SOAkJMzIKKyNkZWZpbmUgU19SNwkJMjgKKyNkZWZpbmUgU19SNgkJMjQKKyNkZWZpbmUgU19SNQkJMjAKKyNkZWZpbmUgU19SNAkJMTYKKyNkZWZpbmUgU19SMwkJMTIKKyNkZWZpbmUgU19SMgkJOAorI2RlZmluZSBTX1IxCQk0CisjZGVmaW5lIFNfUjAJCTAKKworI2RlZmluZSBNT0RFX1NWQyAweDEzCisjZGVmaW5lIElfQklUCSAweDgwCisKKy8qCisgKiB1c2UgYmFkX3NhdmVfdXNlcl9yZWdzIGZvciBhYm9ydC9wcmVmZXRjaC91bmRlZi9zd2kgLi4uCisgKiB1c2UgaXJxX3NhdmVfdXNlcl9yZWdzIC8gaXJxX3Jlc3RvcmVfdXNlcl9yZWdzIGZvciBJUlEvRklRIGhhbmRsaW5nCisgKi8KKworCS5tYWNybwliYWRfc2F2ZV91c2VyX3JlZ3MKKwlzdWIJc3AsIHNwLCAjU19GUkFNRV9TSVpFCQlAIGNhcnZlIG91dCBhIGZyYW1lIG9uIGN1cnJlbnQKKwkJCQkJCUAgdXNlciBzdGFjaworCXN0bWlhCXNwLCB7cjAgLSByMTJ9CQkJQCBTYXZlIHVzZXIgcmVnaXN0ZXJzIChub3cgaW4KKwkJCQkJCUAgc3ZjIG1vZGUpIHIwLXIxMgorCisJbGRyCXIyLCBfYXJtYm9vdF9zdGFydAorCXN1YglyMiwgcjIsICMoQ09ORklHX1NZU19NQUxMT0NfTEVOKQorCXN1YglyMiwgcjIsICMoQ09ORklHX1NZU19HQkxfREFUQV9TSVpFICsgOCkJQCBzZXQgYmFzZSAyIHdvcmRzIGludG8gYWJvcnQKKwkJCQkJCUAgc3RhY2sKKwlsZG1pYQlyMiwge3IyIC0gcjN9CQkJQCBnZXQgdmFsdWVzIGZvciAiYWJvcnRlZCIgcGMKKwkJCQkJCUAgYW5kIGNwc3IgKGludG8gcGFybSByZWdzKQorCWFkZAlyMCwgc3AsICNTX0ZSQU1FX1NJWkUJCUAgZ3JhYiBwb2ludGVyIHRvIG9sZCBzdGFjaworCisJYWRkCXI1LCBzcCwgI1NfU1AKKwltb3YJcjEsIGxyCisJc3RtaWEJcjUsIHtyMCAtIHIzfQkJCUAgc2F2ZSBzcF9TVkMsIGxyX1NWQywgcGMsIGNwc3IKKwltb3YJcjAsIHNwCQkJCUAgc2F2ZSBjdXJyZW50IHN0YWNrIGludG8gcjAKKwkJCQkJCUAgKHBhcmFtIHJlZ2lzdGVyKQorCS5lbmRtCisKKwkubWFjcm8JaXJxX3NhdmVfdXNlcl9yZWdzCisJc3ViCXNwLCBzcCwgI1NfRlJBTUVfU0laRQorCXN0bWlhCXNwLCB7cjAgLSByMTJ9CQkJQCBDYWxsaW5nIHIwLXIxMgorCWFkZAlyOCwgc3AsICNTX1BDCQkJQCAhISBSOCBORUVEUyB0byBiZSBzYXZlZCAhIQorCQkJCQkJQCBhIHJlc2VydmVkIHN0YWNrIHNwb3Qgd291bGQKKwkJCQkJCUAgYmUgZ29vZC4KKwlzdG1kYglyOCwge3NwLCBscn1eCQkJQCBDYWxsaW5nIFNQLCBMUgorCXN0cglsciwgW3I4LCAjMF0JCQlAIFNhdmUgY2FsbGluZyBQQworCW1ycwlyNiwgc3BzcgorCXN0cglyNiwgW3I4LCAjNF0JCQlAIFNhdmUgQ1BTUgorCXN0cglyMCwgW3I4LCAjOF0JCQlAIFNhdmUgT0xEX1IwCisJbW92CXIwLCBzcAorCS5lbmRtCisKKwkubWFjcm8JaXJxX3Jlc3RvcmVfdXNlcl9yZWdzCisJbGRtaWEJc3AsIHtyMCAtIGxyfV4JCQlAIENhbGxpbmcgcjAgLSBscgorCW1vdglyMCwgcjAKKwlsZHIJbHIsIFtzcCwgI1NfUENdCQkJQCBHZXQgUEMKKwlhZGQJc3AsIHNwLCAjU19GUkFNRV9TSVpFCisJc3VicwlwYywgbHIsICM0CQkJQCByZXR1cm4gJiBtb3ZlIHNwc3Jfc3ZjIGludG8KKwkJCQkJCUAgY3BzcgorCS5lbmRtCisKKwkubWFjcm8gZ2V0X2JhZF9zdGFjaworCWxkcglyMTMsIF9hcm1ib290X3N0YXJ0CQlAIHNldHVwIG91ciBtb2RlIHN0YWNrIChlbnRlcgorCQkJCQkJQCBpbiBiYW5rZWQgbW9kZSkKKwlzdWIJcjEzLCByMTMsICMoQ09ORklHX1NZU19NQUxMT0NfTEVOKQlAIG1vdmUgcGFzdCBtYWxsb2MgcG9vbAorCXN1YglyMTMsIHIxMywgIyhDT05GSUdfU1lTX0dCTF9EQVRBX1NJWkUgKyA4KSBAIG1vdmUgdG8gcmVzZXJ2ZWQgYSBjb3VwbGUKKwkJCQkJCUAgc3BvdHMgZm9yIGFib3J0IHN0YWNrCisKKwlzdHIJbHIsIFtyMTNdCQkJQCBzYXZlIGNhbGxlciBsciBpbiBwb3NpdGlvbiAwCisJCQkJCQlAIG9mIHNhdmVkIHN0YWNrCisJbXJzCWxyLCBzcHNyCQkJQCBnZXQgdGhlIHNwc3IKKwlzdHIJbHIsIFtyMTMsICM0XQkJCUAgc2F2ZSBzcHNyIGluIHBvc2l0aW9uIDEgb2YKKwkJCQkJCUAgc2F2ZWQgc3RhY2sKKworCW1vdglyMTMsICNNT0RFX1NWQwkJCUAgcHJlcGFyZSBTVkMtTW9kZQorCUAgbXNyCXNwc3JfYywgcjEzCisJbXNyCXNwc3IsIHIxMwkJCUAgc3dpdGNoIG1vZGVzLCBtYWtlIHN1cmUKKwkJCQkJCUAgbW92ZXMgd2lsbCBleGVjdXRlCisJbW92CWxyLCBwYwkJCQlAIGNhcHR1cmUgcmV0dXJuIHBjCisJbW92cwlwYywgbHIJCQkJQCBqdW1wIHRvIG5leHQgaW5zdHJ1Y3Rpb24gJgorCQkJCQkJQCBzd2l0Y2ggbW9kZXMuCisJLmVuZG0KKworCS5tYWNybyBnZXRfYmFkX3N0YWNrX3N3aQorCXN1YglyMTMsIHIxMywgIzQJCQlAIHNwYWNlIG9uIGN1cnJlbnQgc3RhY2sgZm9yCisJCQkJCQlAIHNjcmF0Y2ggcmVnLgorCXN0cglyMCwgW3IxM10JCQlAIHNhdmUgUjAncyB2YWx1ZS4KKwlsZHIJcjAsIF9hcm1ib290X3N0YXJ0CQlAIGdldCBkYXRhIHJlZ2lvbnMgc3RhcnQKKwlzdWIJcjAsIHIwLCAjKENPTkZJR19TWVNfTUFMTE9DX0xFTikJQCBtb3ZlIHBhc3QgbWFsbG9jIHBvb2wKKwlzdWIJcjAsIHIwLCAjKENPTkZJR19TWVNfR0JMX0RBVEFfU0laRSArIDgpCUAgbW92ZSBwYXN0IGdibCBhbmQgYSBjb3VwbGUKKwkJCQkJCUAgc3BvdHMgZm9yIGFib3J0IHN0YWNrCisJc3RyCWxyLCBbcjBdCQkJQCBzYXZlIGNhbGxlciBsciBpbiBwb3NpdGlvbiAwCisJCQkJCQlAIG9mIHNhdmVkIHN0YWNrCisJbXJzCXIwLCBzcHNyCQkJQCBnZXQgdGhlIHNwc3IKKwlzdHIJbHIsIFtyMCwgIzRdCQkJQCBzYXZlIHNwc3IgaW4gcG9zaXRpb24gMSBvZgorCQkJCQkJQCBzYXZlZCBzdGFjaworCWxkcglyMCwgW3IxM10JCQlAIHJlc3RvcmUgcjAKKwlhZGQJcjEzLCByMTMsICM0CQkJQCBwb3Agc3RhY2sgZW50cnkKKwkuZW5kbQorCisJLm1hY3JvIGdldF9pcnFfc3RhY2sJCQlAIHNldHVwIElSUSBzdGFjaworCWxkcglzcCwgSVJRX1NUQUNLX1NUQVJUCisJLmVuZG0KKworCS5tYWNybyBnZXRfZmlxX3N0YWNrCQkJQCBzZXR1cCBGSVEgc3RhY2sKKwlsZHIJc3AsIEZJUV9TVEFDS19TVEFSVAorCS5lbmRtCisKKy8qCisgKiBleGNlcHRpb24gaGFuZGxlcnMKKyAqLworCS5hbGlnbgk1Cit1bmRlZmluZWRfaW5zdHJ1Y3Rpb246CisJZ2V0X2JhZF9zdGFjaworCWJhZF9zYXZlX3VzZXJfcmVncworCWJsCWRvX3VuZGVmaW5lZF9pbnN0cnVjdGlvbgorCisJLmFsaWduCTUKK3NvZnR3YXJlX2ludGVycnVwdDoKKwlnZXRfYmFkX3N0YWNrX3N3aQorCWJhZF9zYXZlX3VzZXJfcmVncworCWJsCWRvX3NvZnR3YXJlX2ludGVycnVwdAorCisJLmFsaWduCTUKK3ByZWZldGNoX2Fib3J0OgorCWdldF9iYWRfc3RhY2sKKwliYWRfc2F2ZV91c2VyX3JlZ3MKKwlibAlkb19wcmVmZXRjaF9hYm9ydAorCisJLmFsaWduCTUKK2RhdGFfYWJvcnQ6CisJZ2V0X2JhZF9zdGFjaworCWJhZF9zYXZlX3VzZXJfcmVncworCWJsCWRvX2RhdGFfYWJvcnQKKworCS5hbGlnbgk1Citub3RfdXNlZDoKKwlnZXRfYmFkX3N0YWNrCisJYmFkX3NhdmVfdXNlcl9yZWdzCisJYmwJZG9fbm90X3VzZWQKKworI2lmZGVmIENPTkZJR19VU0VfSVJRCisKKwkuYWxpZ24JNQoraXJxOgorCWdldF9pcnFfc3RhY2sKKwlpcnFfc2F2ZV91c2VyX3JlZ3MKKwlibAlkb19pcnEKKwlpcnFfcmVzdG9yZV91c2VyX3JlZ3MKKworCS5hbGlnbgk1CitmaXE6CisJZ2V0X2ZpcV9zdGFjaworCS8qIHNvbWVvbmUgb3VnaHQgdG8gd3JpdGUgYSBtb3JlIGVmZmVjdGl2ZSBmaXFfc2F2ZV91c2VyX3JlZ3MgKi8KKwlpcnFfc2F2ZV91c2VyX3JlZ3MKKwlibAlkb19maXEKKwlpcnFfcmVzdG9yZV91c2VyX3JlZ3MKKworI2Vsc2UKKworCS5hbGlnbgk1CitpcnE6CisJZ2V0X2JhZF9zdGFjaworCWJhZF9zYXZlX3VzZXJfcmVncworCWJsCWRvX2lycQorCisJLmFsaWduCTUKK2ZpcToKKwlnZXRfYmFkX3N0YWNrCisJYmFkX3NhdmVfdXNlcl9yZWdzCisJYmwJZG9fZmlxCisKKyNlbmRpZgorCisvKgorICoJdjdfZmx1c2hfZGNhY2hlX2FsbCgpCisgKgorICoJRmx1c2ggdGhlIHdob2xlIEQtY2FjaGUuCisgKgorICoJQ29ycnVwdGVkIHJlZ2lzdGVyczogcjAtcjUsIHI3LCByOS1yMTEKKyAqCisgKgktIG1tCS0gbW1fc3RydWN0IGRlc2NyaWJpbmcgYWRkcmVzcyBzcGFjZQorICovCisJLmFsaWduIDUKKy5nbG9iYWwgdjdfZmx1c2hfZGNhY2hlX2FsbAordjdfZmx1c2hfZGNhY2hlX2FsbDoKKwlzdG1mZAlyMTMhLCB7cjAgLSByNSwgcjcsIHI5IC0gcjEyLCByMTR9CisKKwltb3YJcjcsIHIwCQkJCUAgdGFrZSBhIGJhY2t1cCBvZiBkZXZpY2UgdHlwZQorCWNtcAlyMCwgIzB4MwkJCUAgY2hlY2sgaWYgdGhlIGRldmljZSB0eXBlIGlzCisJCQkJCQlAIEdQCisJbW92ZXEgcjEyLCAjMHgxCQkJCUAgc2V0IHVwIHRvIGludmFsaWRlIEwyCitzbWk6CS53b3JkIDB4MDE2MDAwNzAJCQlAIENhbGwgU01JIG1vbml0b3IgKHNtaWVxKQorCWNtcAlyNywgIzB4MwkJCUAgY29tcGFyZSBhZ2FpbiBpbiBjYXNlIGl0cworCQkJCQkJQCBsb3N0CisJYmVxCWZpbmlzaGVkX2ludmFsCQkJQCBpZiBHUCBkZXZpY2UsIGludmFsIGRvbmUKKwkJCQkJCUAgYWJvdmUKKworCW1yYwlwMTUsIDEsIHIwLCBjMCwgYzAsIDEJCUAgcmVhZCBjbGlkcgorCWFuZHMJcjMsIHIwLCAjMHg3MDAwMDAwCQlAIGV4dHJhY3QgbG9jIGZyb20gY2xpZHIKKwltb3YJcjMsIHIzLCBsc3IgIzIzCQkJQCBsZWZ0IGFsaWduIGxvYyBiaXQgZmllbGQKKwliZXEJZmluaXNoZWRfaW52YWwJCQlAIGlmIGxvYyBpcyAwLCB0aGVuIG5vIG5lZWQgdG8KKwkJCQkJCUAgY2xlYW4KKwltb3YJcjEwLCAjMAkJCQlAIHN0YXJ0IGNsZWFuIGF0IGNhY2hlIGxldmVsIDAKK2ludmFsX2xvb3AxOgorCWFkZAlyMiwgcjEwLCByMTAsIGxzciAjMQkJQCB3b3JrIG91dCAzeCBjdXJyZW50IGNhY2hlCisJCQkJCQlAIGxldmVsCisJbW92CXIxLCByMCwgbHNyIHIyCQkJQCBleHRyYWN0IGNhY2hlIHR5cGUgYml0cyBmcm9tCisJCQkJCQlAIGNsaWRyCisJYW5kCXIxLCByMSwgIzcJCQlAIG1hc2sgb2YgdGhlIGJpdHMgZm9yIGN1cnJlbnQKKwkJCQkJCUAgY2FjaGUgb25seQorCWNtcAlyMSwgIzIJCQkJQCBzZWUgd2hhdCBjYWNoZSB3ZSBoYXZlIGF0CisJCQkJCQlAIHRoaXMgbGV2ZWwKKwlibHQJc2tpcF9pbnZhbAkJCUAgc2tpcCBpZiBubyBjYWNoZSwgb3IganVzdAorCQkJCQkJQCBpLWNhY2hlCisJbWNyCXAxNSwgMiwgcjEwLCBjMCwgYzAsIDAJCUAgc2VsZWN0IGN1cnJlbnQgY2FjaGUgbGV2ZWwKKwkJCQkJCUAgaW4gY3NzcgorCW1vdglyMiwgIzAJCQkJQCBvcGVyYW5kIGZvciBtY3IgU0JaCisJbWNyCXAxNSwgMCwgcjIsIGM3LCBjNSwgNAkJQCBmbHVzaCBwcmVmZXRjaCBidWZmZXIgdG8KKwkJCQkJCUAgc3ljaCB0aGUgbmV3IGNzc3ImY3NpZHIsCisJCQkJCQlAIHdpdGggYXJtdjcgdGhpcyBpcyAnaXNiJywKKwkJCQkJCUAgYnV0IHdlIGNvbXBpbGUgd2l0aCBhcm12NQorCW1yYwlwMTUsIDEsIHIxLCBjMCwgYzAsIDAJCUAgcmVhZCB0aGUgbmV3IGNzaWRyCisJYW5kCXIyLCByMSwgIzcJCQlAIGV4dHJhY3QgdGhlIGxlbmd0aCBvZiB0aGUKKwkJCQkJCUAgY2FjaGUgbGluZXMKKwlhZGQJcjIsIHIyLCAjNAkJCUAgYWRkIDQgKGxpbmUgbGVuZ3RoIG9mZnNldCkKKwlsZHIJcjQsID0weDNmZgorCWFuZHMJcjQsIHI0LCByMSwgbHNyICMzCQlAIGZpbmQgbWF4aW11bSBudW1iZXIgb24gdGhlCisJCQkJCQlAIHdheSBzaXplCisJY2x6CXI1LCByNAkJCQlAIGZpbmQgYml0IHBvc2l0aW9uIG9mIHdheQorCQkJCQkJQCBzaXplIGluY3JlbWVudAorCWxkcglyNywgPTB4N2ZmZgorCWFuZHMJcjcsIHI3LCByMSwgbHNyICMxMwkJQCBleHRyYWN0IG1heCBudW1iZXIgb2YgdGhlCisJCQkJCQlAIGluZGV4IHNpemUKK2ludmFsX2xvb3AyOgorCW1vdglyOSwgcjQJCQkJQCBjcmVhdGUgd29ya2luZyBjb3B5IG9mIG1heAorCQkJCQkJQCB3YXkgc2l6ZQoraW52YWxfbG9vcDM6CisJb3JyCXIxMSwgcjEwLCByOSwgbHNsIHI1CQlAIGZhY3RvciB3YXkgYW5kIGNhY2hlIG51bWJlcgorCQkJCQkJQCBpbnRvIHIxMQorCW9ycglyMTEsIHIxMSwgcjcsIGxzbCByMgkJQCBmYWN0b3IgaW5kZXggbnVtYmVyIGludG8gcjExCisJbWNyCXAxNSwgMCwgcjExLCBjNywgYzYsIDIJCUAgaW52YWxpZGF0ZSBieSBzZXQvd2F5CisJc3VicwlyOSwgcjksICMxCQkJQCBkZWNyZW1lbnQgdGhlIHdheQorCWJnZQlpbnZhbF9sb29wMworCXN1YnMJcjcsIHI3LCAjMQkJCUAgZGVjcmVtZW50IHRoZSBpbmRleAorCWJnZQlpbnZhbF9sb29wMgorc2tpcF9pbnZhbDoKKwlhZGQJcjEwLCByMTAsICMyCQkJQCBpbmNyZW1lbnQgY2FjaGUgbnVtYmVyCisJY21wCXIzLCByMTAKKwliZ3QJaW52YWxfbG9vcDEKK2ZpbmlzaGVkX2ludmFsOgorCW1vdglyMTAsICMwCQkJCUAgc3dpdGggYmFjayB0byBjYWNoZSBsZXZlbCAwCisJbWNyCXAxNSwgMiwgcjEwLCBjMCwgYzAsIDAJCUAgc2VsZWN0IGN1cnJlbnQgY2FjaGUgbGV2ZWwKKwkJCQkJCUAgaW4gY3NzcgorCW1jcglwMTUsIDAsIHIxMCwgYzcsIGM1LCA0CQlAIGZsdXNoIHByZWZldGNoIGJ1ZmZlciwKKwkJCQkJCUAgd2l0aCBhcm12NyB0aGlzIGlzICdpc2InLAorCQkJCQkJQCBidXQgd2UgY29tcGlsZSB3aXRoIGFybXY1CisKKwlsZG1mZAlyMTMhLCB7cjAgLSByNSwgcjcsIHI5IC0gcjEyLCBwY30KKworCisJLmFsaWduCTUKKy5nbG9iYWwgcmVzZXRfY3B1CityZXNldF9jcHU6CisJbGRyCXIxLCByc3RjdGwJCQlAIGdldCBhZGRyIGZvciBnbG9iYWwgcmVzZXQKKwkJCQkJCUAgcmVnCisJbW92CXIzLCAjMHgyCQkJQCBmdWxsIHJlc2V0IHBsbCArIG1wdQorCXN0cglyMywgW3IxXQkJCUAgZm9yY2UgcmVzZXQKKwltb3YJcjAsIHIwCitfbG9vcF9mb3JldmVyOgorCWIJX2xvb3BfZm9yZXZlcgorcnN0Y3RsOgorCS53b3JkCVBSTV9SU1RDVFJMCmRpZmYgLS1naXQgYS9kb2MvUkVBRE1FLm5tZGs4ODE1IGIvZG9jL1JFQURNRS5ubWRrODgxNQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTNjZmFlCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL1JFQURNRS5ubWRrODgxNQpAQCAtMCwwICsxLDIyIEBACisKK1RoZSBOb21hZGlrIDg4MTUgQ1BVIGhhcyBhICJzZWN1cmUiIGJvb3QgbW9kZSB3aGVyZSBubyBleHRlcm5hbCBhY2Nlc3MKKyhub3QgZXZlbiBKVEFHKSBpcyBhbGxvd2VkLiAgVGhlICJyZW1hcCIgYml0cyBpbiB0aGUgZXZhbHVhdGlvbiBib2FyZAorYXJlIGNvbmZpZ3VyZWQgaW4gb3JkZXIgdG8gYm9vdCBmcm9tIHRoZSBpbnRlcm5hbCBST00gbWVtb3J5IChpbgorc2VjdXJlIG1vZGUpLgorCitUaGUgYm9vdCBwcm9jZXNzIGFzIGRlZmluZWQgYnkgdGhlIG1hbnVmYWN0dXJlciBleGVjdXRlcyBleHRlcm5hbCBjb2RlCisobG9hZGVkIGZyb20gTkFORCBvciBPbmVOQU5EKSB0aGF0IHRoYXQgZGlzYWJsZXMgc3VjaCAic2VjdXJpdHkiIGluCitvcmRlciB0byBydW4gdS1ib290IGFuZCBsYXRlciB0aGUga2VybmVsIHdpdGhvdXQgY29uc3RyYWludHMuIFN1Y2gKK2NvZGUgaXMgYSBwcm9wcmlldGFyeSBpbml0aWFsIGJvb3QgbG9hZGVyLCBjYWxsZWQgIlgtTG9hZGVyIiAoaW4gY2FzZQorYW55b25lIHdvbmRlcnMsIGl0IGhhcyBubyByZWxhdGlvbnMgd2l0aCBvdGhlciBsb2FkZXJzIHdpdGggdGhlIHNhbWUKK25hbWUgYW5kIHRoZXJlIGlzIG5vIEdQTCBjb2RlIGluc2lkZSB0aGUgU1QgWC1Mb2FkZXIpLgorCitTRFJBTSBjb25maWd1cmF0aW9uLCBQTEwgc2V0dXAgYW5kIGluaXRpYWwgbG9hZGluZyBmcm9tIE5BTkQgaXMKK2ltcGxlbWVudGVkIGluIHRoZSBYLUxvYWRlciwgc28gVS1Cb290IGlzIGFscmVhZHkgcnVubmluZyBpbiBTRFJBTQord2hlbiBjb250cm9sIGlzIGhhbmRlZCBvdmVyIHRvIGl0LgorCisKK09uIHd3dy5zdC5jb20vbm9tYWRpayBhbmQgb24gd3d3LnN0bndpcmVsZXNzLmNvbSB0aGVyZSBhcmUgZG9jdW1lbnRzLAorc3VtbWFyeSBkYXRhIGFuZCB3aGl0ZSBwYXBlcnMgb24gTm9tYWRpay4gVGhlIGZ1bGwgZGF0YXNoZWV0IGZvcgorU1RuODgxNSBpcyBub3QgY3VycmVudGx5IGF2YWlsYWJsZSBvbiBsaW5lIGJ1dCB1bmRlciBzcGVjaWZpYyByZXF1ZXN0Cit0byB0aGUgbG9jYWwgU1Qgc2FsZXMgb2ZmaWNlcy4KZGlmZiAtLWdpdCBhL2RvYy9SRUFETUUub21hcDMgYi9kb2MvUkVBRE1FLm9tYXAzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiYTMwN2YKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvUkVBRE1FLm9tYXAzCkBAIC0wLDAgKzEsMTE2IEBACisKK1N1bW1hcnkKKz09PT09PT0KKworVGhpcyBSRUFETUUgaXMgYWJvdXQgVS1Cb290IHN1cHBvcnQgZm9yIFRJJ3MgQVJNIENvcnRleC1BOCBiYXNlZCBPTUFQMyBbMV0KK2ZhbWlseSBvZiBTb0NzLiBUSSdzIE9NQVAzIFNvQyBmYW1pbHkgY29udGFpbnMgYW4gQVJNIENvcnRleC1BOC4gQWRkaXRpb25hbGx5LAorc29tZSBmYW1pbHkgbWVtYmVycyBjb250YWluIGEgVE1TMzIwQzY0eCsgRFNQIGFuZC9vciBhbiBJbWFnaW5hdGlvbiBTR1ggMkQvM0QKK2dyYXBoaWNzIHByb2Nlc3NvciBhbmQgdmFyaW91cyBvdGhlciBzdGFuZGFyZCBwZXJpcGhlcmFscy4KKworQ3VycmVudGx5IHRoZSBmb2xsb3dpbmcgYm9hcmRzIGFyZSBzdXBwb3J0ZWQ6CisKKyogT01BUDM1MzAgQmVhZ2xlQm9hcmQgWzJdCisKKyogR3Vtc3RpeCBPdmVybyBbM10KKworKiBUSSBFVk0gWzRdCisKKyogT3BlblBhbmRvcmEgTHRkLiBQYW5kb3JhIFs1XQorCisqIFRJL0xvZ2ljIFBEIFpvb20gTURLIFs2XQorCitUb29sY2hhaW4KKz09PT09PT09PQorCitXaGlsZSBBUk0gQ29ydGV4LUE4IHN1cHBvcnQgQVJNIHY3IGluc3RydWN0aW9uIHNldCAoLW1hcmNoPWFybXY3YSkgd2UgY29tcGlsZQord2l0aCAtbWFyY2g9YXJtdjUgdG8gYWxsb3cgbW9yZSBjb21waWxlcnMgdG8gd29yay4gRm9yIFUtQm9vdCBjb2RlIHRoaXMgaGFzCitubyBwZXJmb3JtYW5jZSBpbXBhY3QuCisKK0J1aWxkCis9PT09PQorCisqIEJlYWdsZUJvYXJkOgorCittYWtlIG9tYXAzX2JlYWdsZV9jb25maWcKK21ha2UKKworKiBHdW1zdGl4IE92ZXJvOgorCittYWtlIG9tYXAzX292ZXJvX2NvbmZpZworbWFrZQorCisqIFRJIEVWTToKKworbWFrZSBvbWFwM19ldm1fY29uZmlnCittYWtlCisKKyogUGFuZG9yYToKKworbWFrZSBvbWFwM19wYW5kb3JhX2NvbmZpZworbWFrZQorCisqIFpvb20gTURLOgorCittYWtlIG9tYXAzX3pvb20xX2NvbmZpZworbWFrZQorCitDdXN0b20gY29tbWFuZHMKKz09PT09PT09PT09PT09PQorCitUbyBtYWtlIFUtQm9vdCBmb3IgT01BUDMgc3VwcG9ydCBOQU5EIGRldmljZSBTVyBvciBIVyBFQ0MgY2FsY3VsYXRpb24sIFUtQm9vdAorZm9yIE9NQVAzIHN1cHBvcnRzIGN1c3RvbSB1c2VyIGNvbW1hbmQKKworbmFuZGVjYyBody9zdworCitUbyBiZSBjb21wYXRpYmxlIHdpdGggTkFORCBkcml2ZXJzIHVzaW5nIFNXIEVDQyAoZS5nLiBrZXJuZWwgY29kZSkKKworbmFuZGVjYyBzdworCitlbmFibGVzIFNXIEVDQyBjYWxjdWxhdGlvbi4gSFcgRUNDIGVuYWJsZWQgd2l0aAorCituYW5kZWNjIGh3CisKK2lzIHR5cGljYWxseSB1c2VkIHRvIHdyaXRlIDJuZCBzdGFnZSBib290bG9hZGVyIChrbm93biBhcyAneC1sb2FkZXInKSB3aGljaCBpcworZXhlY3V0ZWQgYnkgT01BUDMncyBib290IHJvbSBhbmQgdGhlcmVmb3JlIGhhcyB0byBiZSB3cml0dGVuIHdpdGggSFcgRUNDLgorCitGb3IgYWxsIG90aGVyIGNvbW1hbmRzIHNlZQorCitoZWxwCisKK0Fja25vd2xlZGdlbWVudHMKKz09PT09PT09PT09PT09PT0KKworT01BUDMgVS1Cb290IGlzIGJhc2VkIG9uIFUtQm9vdCB0YXIgYmFsbCBbN10gZm9yIEJlYWdsZUJvYXJkIGFuZCBFVk0gZG9uZSBieQorc2V2ZXJhbCBUSSBlbXBsb3llZXMuCisKK0xpbmtzCis9PT09PQorCitbMV0gT01BUDM6CisKK2h0dHA6Ly93d3cudGkuY29tL29tYXAzIChoaWdoIHZvbHVtZSkgYW5kCitodHRwOi8vd3d3LnRpLmNvbS9vbWFwMzV4IChicm9hZCBtYXJrZXQpCisKK1syXSBPTUFQMzUzMCBCZWFnbGVCb2FyZDoKKworaHR0cDovL2JlYWdsZWJvYXJkLm9yZy8KKworWzNdIEd1bXN0aXggT3Zlcm86CisKK2h0dHA6Ly93d3cuZ3Vtc3RpeC5uZXQvT3Zlcm8vCisKK1s0XSBUSSBFVk06CisKK2h0dHA6Ly9mb2N1cy50aS5jb20vZG9jcy90b29sc3cvZm9sZGVycy9wcmludC90bWR4ZXZtMzUwMy5odG1sCisKK1s1XSBPcGVuUGFuZG9yYSBMdGQuIFBhbmRvcmE6CisKK2h0dHA6Ly9vcGVucGFuZG9yYS5vcmcvCisKK1s2XSBUSS9Mb2dpYyBQRCBab29tIE1ESzoKKworaHR0cDovL3d3dy5sb2dpY3BkLmNvbS9wcm9kdWN0cy9kZXZraXQvdGkvem9vbV9tb2JpbGVfZGV2ZWxvcG1lbnRfa2l0CisKK1s3XSBUSSBPTUFQMyBVLUJvb3Q6CisKK2h0dHA6Ly9iZWFnbGVib2FyZC5nb29nbGVjb2RlLmNvbS9maWxlcy91LWJvb3RfYmVhZ2xlX3JldmIudGFyLmd6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9NYWtlZmlsZSBiL2RyaXZlcnMvaTJjL01ha2VmaWxlCmluZGV4IDA4Y2I5MWQuLjljNzQ2NTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvaTJjL01ha2VmaWxlCkBAIC0zMCw2ICszMCw3IEBACiBDT0JKUy0kKENPTkZJR19JMkNfTVhDKSArPSBteGNfaTJjLm8KIENPQkpTLSQoQ09ORklHX0RSSVZFUl9PTUFQMTUxMF9JMkMpICs9IG9tYXAxNTEwX2kyYy5vCiBDT0JKUy0kKENPTkZJR19EUklWRVJfT01BUDI0WFhfSTJDKSArPSBvbWFwMjR4eF9pMmMubworQ09CSlMtJChDT05GSUdfRFJJVkVSX09NQVAzNFhYX0kyQykgKz0gb21hcDI0eHhfaTJjLm8KIENPQkpTLSQoQ09ORklHX1NPRlRfSTJDKSArPSBzb2Z0X2kyYy5vCiBDT0JKUy0kKENPTkZJR19UU0kxMDhfSTJDKSArPSB0c2kxMDhfaTJjLm8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvb21hcDI0eHhfaTJjLmMgYi9kcml2ZXJzL2kyYy9vbWFwMjR4eF9pMmMuYwppbmRleCA0NDI3OTM4Li42Nzg0NjAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9vbWFwMjR4eF9pMmMuYworKysgYi9kcml2ZXJzL2kyYy9vbWFwMjR4eF9pMmMuYwpAQCAtMTA5LDcgKzEwOSwxMSBAQAogCiAJCXN0YXR1cyA9IHdhaXRfZm9yX3BpbiAoKTsKIAkJaWYgKHN0YXR1cyAmIEkyQ19TVEFUX1JSRFkpIHsKKyNpZiBkZWZpbmVkKENPTkZJR19PTUFQMjQzWCkgfHwgZGVmaW5lZChDT05GSUdfT01BUDM0WFgpCisJCQkqdmFsdWUgPSByZWFkYiAoSTJDX0RBVEEpOworI2Vsc2UKIAkJCSp2YWx1ZSA9IHJlYWR3IChJMkNfREFUQSk7CisjZW5kaWYKIAkJCXVkZWxheSAoMjAwMDApOwogCQl9IGVsc2UgewogCQkJaTJjX2Vycm9yID0gMTsKQEAgLTE1MCw4ICsxNTQsMjMgQEAKIAlzdGF0dXMgPSB3YWl0X2Zvcl9waW4gKCk7CiAKIAlpZiAoc3RhdHVzICYgSTJDX1NUQVRfWFJEWSkgeworI2lmIGRlZmluZWQoQ09ORklHX09NQVAyNDNYKSB8fCBkZWZpbmVkKENPTkZJR19PTUFQMzRYWCkKKwkJLyogc2VuZCBvdXQgMSBieXRlICovCisJCXdyaXRlYiAocmVnb2Zmc2V0LCBJMkNfREFUQSk7CisJCXdyaXRldyAoSTJDX1NUQVRfWFJEWSwgSTJDX1NUQVQpOworCisJCXN0YXR1cyA9IHdhaXRfZm9yX3BpbiAoKTsKKwkJaWYgKChzdGF0dXMgJiBJMkNfU1RBVF9YUkRZKSkgeworCQkJLyogc2VuZCBvdXQgbmV4dCAxIGJ5dGUgKi8KKwkJCXdyaXRlYiAodmFsdWUsIEkyQ19EQVRBKTsKKwkJCXdyaXRldyAoSTJDX1NUQVRfWFJEWSwgSTJDX1NUQVQpOworCQl9IGVsc2UgeworCQkJaTJjX2Vycm9yID0gMTsKKwkJfQorI2Vsc2UKIAkJLyogc2VuZCBvdXQgdHdvIGJ5dGVzICovCiAJCXdyaXRldyAoKHZhbHVlIDw8IDgpICsgcmVnb2Zmc2V0LCBJMkNfREFUQSk7CisjZW5kaWYKIAkJLyogbXVzdCBoYXZlIGVub3VnaCBkZWxheSB0byBhbGxvdyBCQiBiaXQgdG8gZ28gbG93ICovCiAJCXVkZWxheSAoNTAwMDApOwogCQlpZiAocmVhZHcgKEkyQ19TVEFUKSAmIEkyQ19TVEFUX05BQ0spIHsKQEAgLTE4OCw3ICsyMDcsMTEgQEAKIAl3aGlsZSgxKXsKIAkJc3RhdCA9IHJlYWR3KEkyQ19TVEFUKTsKIAkJaWYoc3RhdCA9PSBJMkNfU1RBVF9SUkRZKXsKKyNpZiBkZWZpbmVkKENPTkZJR19PTUFQMjQzWCkgfHwgZGVmaW5lZChDT05GSUdfT01BUDM0WFgpCisJCQlyZWFkYihJMkNfREFUQSk7CisjZWxzZQogCQkJcmVhZHcoSTJDX0RBVEEpOworI2VuZGlmCiAJCQl3cml0ZXcoSTJDX1NUQVRfUlJEWSxJMkNfU1RBVCk7CiAJCQl1ZGVsYXkoMTAwMCk7CiAJCX1lbHNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9NYWtlZmlsZSBiL2RyaXZlcnMvbW1jL01ha2VmaWxlCmluZGV4IDNkYzAzMWIuLmJiMGQ1MmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbW1jL01ha2VmaWxlCkBAIC0yNiw2ICsyNiw3IEBACiBMSUIJOj0gJChvYmopbGlibW1jLmEKIAogQ09CSlMtJChDT05GSUdfQVRNRUxfTUNJKSArPSBhdG1lbF9tY2kubworQ09CSlMtJChDT05GSUdfT01BUDNfTU1DKSArPSBvbWFwM19tbWMubwogCiBDT0JKUwk6PSAkKENPQkpTLXkpCiBTUkNTCTo9ICQoQ09CSlM6Lm89LmMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9vbWFwM19tbWMuYyBiL2RyaXZlcnMvbW1jL29tYXAzX21tYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxNDg3MDIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21tYy9vbWFwM19tbWMuYwpAQCAtMCwwICsxLDU1OCBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwOAorICogVGV4YXMgSW5zdHJ1bWVudHMsIDx3d3cudGkuY29tPgorICogU3llZCBNb2hhbW1lZCBLaGFzaW0gPGtoYXNpbUB0aS5jb20+CisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uJ3MgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZS4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgPGZhdC5oPgorI2luY2x1ZGUgPG1tYy5oPgorI2luY2x1ZGUgPHBhcnQuaD4KKyNpbmNsdWRlIDxpMmMuaD4KKworY29uc3QgdW5zaWduZWQgc2hvcnQgbW1jX3RyYW5zc3BlZWRfdmFsWzE1XVs0XSA9IHsKKwl7Q0xLRCgxMCwgMSksIENMS0QoMTAsIDEwKSwgQ0xLRCgxMCwgMTAwKSwgQ0xLRCgxMCwgMTAwMCl9LAorCXtDTEtEKDEyLCAxKSwgQ0xLRCgxMiwgMTApLCBDTEtEKDEyLCAxMDApLCBDTEtEKDEyLCAxMDAwKX0sCisJe0NMS0QoMTMsIDEpLCBDTEtEKDEzLCAxMCksIENMS0QoMTMsIDEwMCksIENMS0QoMTMsIDEwMDApfSwKKwl7Q0xLRCgxNSwgMSksIENMS0QoMTUsIDEwKSwgQ0xLRCgxNSwgMTAwKSwgQ0xLRCgxNSwgMTAwMCl9LAorCXtDTEtEKDIwLCAxKSwgQ0xLRCgyMCwgMTApLCBDTEtEKDIwLCAxMDApLCBDTEtEKDIwLCAxMDAwKX0sCisJe0NMS0QoMjYsIDEpLCBDTEtEKDI2LCAxMCksIENMS0QoMjYsIDEwMCksIENMS0QoMjYsIDEwMDApfSwKKwl7Q0xLRCgzMCwgMSksIENMS0QoMzAsIDEwKSwgQ0xLRCgzMCwgMTAwKSwgQ0xLRCgzMCwgMTAwMCl9LAorCXtDTEtEKDM1LCAxKSwgQ0xLRCgzNSwgMTApLCBDTEtEKDM1LCAxMDApLCBDTEtEKDM1LCAxMDAwKX0sCisJe0NMS0QoNDAsIDEpLCBDTEtEKDQwLCAxMCksIENMS0QoNDAsIDEwMCksIENMS0QoNDAsIDEwMDApfSwKKwl7Q0xLRCg0NSwgMSksIENMS0QoNDUsIDEwKSwgQ0xLRCg0NSwgMTAwKSwgQ0xLRCg0NSwgMTAwMCl9LAorCXtDTEtEKDUyLCAxKSwgQ0xLRCg1MiwgMTApLCBDTEtEKDUyLCAxMDApLCBDTEtEKDUyLCAxMDAwKX0sCisJe0NMS0QoNTUsIDEpLCBDTEtEKDU1LCAxMCksIENMS0QoNTUsIDEwMCksIENMS0QoNTUsIDEwMDApfSwKKwl7Q0xLRCg2MCwgMSksIENMS0QoNjAsIDEwKSwgQ0xLRCg2MCwgMTAwKSwgQ0xLRCg2MCwgMTAwMCl9LAorCXtDTEtEKDcwLCAxKSwgQ0xLRCg3MCwgMTApLCBDTEtEKDcwLCAxMDApLCBDTEtEKDcwLCAxMDAwKX0sCisJe0NMS0QoODAsIDEpLCBDTEtEKDgwLCAxMCksIENMS0QoODAsIDEwMCksIENMS0QoODAsIDEwMDApfQorfTsKKworbW1jX2NhcmRfZGF0YSBjdXJfY2FyZF9kYXRhOworc3RhdGljIGJsb2NrX2Rldl9kZXNjX3QgbW1jX2Jsa19kZXY7CisKK2Jsb2NrX2Rldl9kZXNjX3QgKm1tY19nZXRfZGV2KGludCBkZXYpCit7CisJcmV0dXJuIChibG9ja19kZXZfZGVzY190ICopICZtbWNfYmxrX2RldjsKK30KKwordm9pZCB0d2w0MDMwX21tY19jb25maWcodm9pZCkKK3sKKwl1bnNpZ25lZCBjaGFyIGRhdGE7CisKKwlkYXRhID0gMHgyMDsKKwlpMmNfd3JpdGUoMHg0QiwgMHg4MiwgMSwgJmRhdGEsIDEpOworCWRhdGEgPSAweDI7CisJaTJjX3dyaXRlKDB4NEIsIDB4ODUsIDEsICZkYXRhLCAxKTsKK30KKwordW5zaWduZWQgY2hhciBtbWNfYm9hcmRfaW5pdCh2b2lkKQoreworCXVuc2lnbmVkIGludCB2YWx1ZSA9IDA7CisKKwl0d2w0MDMwX21tY19jb25maWcoKTsKKworCXZhbHVlID0gQ09OVFJPTF9QQklBU19MSVRFOworCUNPTlRST0xfUEJJQVNfTElURSA9IHZhbHVlIHwgKDEgPDwgMikgfCAoMSA8PCAxKSB8ICgxIDw8IDkpOworCisJdmFsdWUgPSBDT05UUk9MX0RFVl9DT05GMDsKKwlDT05UUk9MX0RFVl9DT05GMCA9IHZhbHVlIHwgKDEgPDwgMjQpOworCisJcmV0dXJuIDE7Cit9CisKK3ZvaWQgbW1jX2luaXRfc3RyZWFtKHZvaWQpCit7CisJdm9sYXRpbGUgdW5zaWduZWQgaW50IG1tY19zdGF0OworCisJT01BUF9IU01NQ19DT04gfD0gSU5JVF9JTklUU1RSRUFNOworCisJT01BUF9IU01NQ19DTUQgPSBNTUNfQ01EMDsKKwlkbyB7CisJCW1tY19zdGF0ID0gT01BUF9IU01NQ19TVEFUOworCX0gd2hpbGUgKCEobW1jX3N0YXQgJiBDQ19NQVNLKSk7CisKKwlPTUFQX0hTTU1DX1NUQVQgPSBDQ19NQVNLOworCisJT01BUF9IU01NQ19DTUQgPSBNTUNfQ01EMDsKKwlkbyB7CisJCW1tY19zdGF0ID0gT01BUF9IU01NQ19TVEFUOworCX0gd2hpbGUgKCEobW1jX3N0YXQgJiBDQ19NQVNLKSk7CisKKwlPTUFQX0hTTU1DX1NUQVQgPSBPTUFQX0hTTU1DX1NUQVQ7CisJT01BUF9IU01NQ19DT04gJj0gfklOSVRfSU5JVFNUUkVBTTsKK30KKwordW5zaWduZWQgY2hhciBtbWNfY2xvY2tfY29uZmlnKHVuc2lnbmVkIGludCBpY2xrLCB1bnNpZ25lZCBzaG9ydCBjbGtfZGl2KQoreworCXVuc2lnbmVkIGludCB2YWw7CisKKwltbWNfcmVnX291dChPTUFQX0hTTU1DX1NZU0NUTCwgKElDRV9NQVNLIHwgRFRPX01BU0sgfCBDRU5fTUFTSyksCisJCSAgICAoSUNFX1NUT1AgfCBEVE9fMTVUSERUTyB8IENFTl9ESVNBQkxFKSk7CisKKwlzd2l0Y2ggKGljbGspIHsKKwljYXNlIENMS19JTklUU0VROgorCQl2YWwgPSBNTUNfSU5JVF9TRVFfQ0xLIC8gMjsKKwkJYnJlYWs7CisJY2FzZSBDTEtfNDAwS0haOgorCQl2YWwgPSBNTUNfNDAwa0h6X0NMSzsKKwkJYnJlYWs7CisJY2FzZSBDTEtfTUlTQzoKKwkJdmFsID0gY2xrX2RpdjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQorCW1tY19yZWdfb3V0KE9NQVBfSFNNTUNfU1lTQ1RMLAorCQkgICAgSUNFX01BU0sgfCBDTEtEX01BU0ssICh2YWwgPDwgQ0xLRF9PRkZTRVQpIHwgSUNFX09TQ0lMTEFURSk7CisKKwl3aGlsZSAoKE9NQVBfSFNNTUNfU1lTQ1RMICYgSUNTX01BU0spID09IElDU19OT1RSRUFEWSkgOworCisJT01BUF9IU01NQ19TWVNDVEwgfD0gQ0VOX0VOQUJMRTsKKwlyZXR1cm4gMTsKK30KKwordW5zaWduZWQgY2hhciBtbWNfaW5pdF9zZXR1cCh2b2lkKQoreworCXVuc2lnbmVkIGludCByZWdfdmFsOworCisJbW1jX2JvYXJkX2luaXQoKTsKKworCU9NQVBfSFNNTUNfU1lTQ09ORklHIHw9IE1NQ19TT0ZUUkVTRVQ7CisJd2hpbGUgKChPTUFQX0hTTU1DX1NZU1NUQVRVUyAmIFJFU0VURE9ORSkgPT0gMCkgOworCisJT01BUF9IU01NQ19TWVNDVEwgfD0gU09GVFJFU0VUQUxMOworCXdoaWxlICgoT01BUF9IU01NQ19TWVNDVEwgJiBTT0ZUUkVTRVRBTEwpICE9IDB4MCkgOworCisJT01BUF9IU01NQ19IQ1RMID0gRFRXXzFfQklUTU9ERSB8IFNEQlBfUFdST0ZGIHwgU0RWU18zVjA7CisJT01BUF9IU01NQ19DQVBBIHw9IFZTMzBfM1YwU1VQIHwgVlMxOF8xVjhTVVA7CisKKwlyZWdfdmFsID0gT01BUF9IU01NQ19DT04gJiBSRVNFUlZFRF9NQVNLOworCisJT01BUF9IU01NQ19DT04gPSBDVFBMX01NQ19TRCB8IHJlZ192YWwgfCBXUFBfQUNUSVZFSElHSCB8CisJCUNEUF9BQ1RJVkVISUdIIHwgTUlUX0NUTyB8IERXOF8xXzRCSVRNT0RFIHwgTU9ERV9GVU5DIHwKKwkJU1RSX0JMT0NLIHwgSFJfTk9IT1NUUkVTUCB8IElOSVRfTk9JTklUIHwgTk9PUEVORFJBSU47CisKKwltbWNfY2xvY2tfY29uZmlnKENMS19JTklUU0VRLCAwKTsKKwlPTUFQX0hTTU1DX0hDVEwgfD0gU0RCUF9QV1JPTjsKKworCU9NQVBfSFNNTUNfSUUgPSAweDMwN2YwMDMzOworCisJbW1jX2luaXRfc3RyZWFtKCk7CisJcmV0dXJuIDE7Cit9CisKK3Vuc2lnbmVkIGNoYXIgbW1jX3NlbmRfY21kKHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGludCBhcmcsCisJCQkgICB1bnNpZ25lZCBpbnQgKnJlc3BvbnNlKQoreworCXZvbGF0aWxlIHVuc2lnbmVkIGludCBtbWNfc3RhdDsKKworCXdoaWxlICgoT01BUF9IU01NQ19QU1RBVEUgJiBEQVRJX01BU0spID09IERBVElfQ01ERElTKSA7CisKKwlPTUFQX0hTTU1DX0JMSyA9IEJMRU5fNTEyQllURVNMRU4gfCBOQkxLX1NUUENOVDsKKwlPTUFQX0hTTU1DX1NUQVQgPSAweEZGRkZGRkZGOworCU9NQVBfSFNNTUNfQVJHID0gYXJnOworCU9NQVBfSFNNTUNfQ01EID0gY21kIHwgQ01EX1RZUEVfTk9STUFMIHwgQ0lDRV9OT0NIRUNLIHwKKwkgICAgQ0NDRV9OT0NIRUNLIHwgTVNCU19TR0xFQkxLIHwgQUNFTl9ESVNBQkxFIHwgQkNFX0RJU0FCTEUgfAorCSAgICBERV9ESVNBQkxFOworCisJd2hpbGUgKDEpIHsKKwkJZG8geworCQkJbW1jX3N0YXQgPSBPTUFQX0hTTU1DX1NUQVQ7CisJCX0gd2hpbGUgKG1tY19zdGF0ID09IDApOworCisJCWlmICgobW1jX3N0YXQgJiBFUlJJX01BU0spICE9IDApCisJCQlyZXR1cm4gKHVuc2lnbmVkIGNoYXIpIG1tY19zdGF0OworCisJCWlmIChtbWNfc3RhdCAmIENDX01BU0spIHsKKwkJCU9NQVBfSFNNTUNfU1RBVCA9IENDX01BU0s7CisJCQlyZXNwb25zZVswXSA9IE9NQVBfSFNNTUNfUlNQMTA7CisJCQlpZiAoKGNtZCAmIFJTUF9UWVBFX01BU0spID09IFJTUF9UWVBFX0xHSFQxMzYpIHsKKwkJCQlyZXNwb25zZVsxXSA9IE9NQVBfSFNNTUNfUlNQMzI7CisJCQkJcmVzcG9uc2VbMl0gPSBPTUFQX0hTTU1DX1JTUDU0OworCQkJCXJlc3BvbnNlWzNdID0gT01BUF9IU01NQ19SU1A3NjsKKwkJCX0KKwkJCWJyZWFrOworCQl9CisJfQorCXJldHVybiAxOworfQorCit1bnNpZ25lZCBjaGFyIG1tY19yZWFkX2RhdGEodW5zaWduZWQgaW50ICpvdXRwdXRfYnVmKQoreworCXZvbGF0aWxlIHVuc2lnbmVkIGludCBtbWNfc3RhdDsKKwl1bnNpZ25lZCBpbnQgcmVhZF9jb3VudCA9IDA7CisKKwkvKgorCSAqIFN0YXJ0IFBvbGxlZCBSZWFkCisJICovCisJd2hpbGUgKDEpIHsKKwkJZG8geworCQkJbW1jX3N0YXQgPSBPTUFQX0hTTU1DX1NUQVQ7CisJCX0gd2hpbGUgKG1tY19zdGF0ID09IDApOworCisJCWlmICgobW1jX3N0YXQgJiBFUlJJX01BU0spICE9IDApCisJCQlyZXR1cm4gKHVuc2lnbmVkIGNoYXIpIG1tY19zdGF0OworCisJCWlmIChtbWNfc3RhdCAmIEJSUl9NQVNLKSB7CisJCQl1bnNpZ25lZCBpbnQgazsKKworCQkJT01BUF9IU01NQ19TVEFUIHw9IEJSUl9NQVNLOworCQkJZm9yIChrID0gMDsgayA8IE1NQ1NEX1NFQ1RPUl9TSVpFIC8gNDsgaysrKSB7CisJCQkJKm91dHB1dF9idWYgPSBPTUFQX0hTTU1DX0RBVEE7CisJCQkJb3V0cHV0X2J1ZisrOworCQkJCXJlYWRfY291bnQgKz0gNDsKKwkJCX0KKwkJfQorCisJCWlmIChtbWNfc3RhdCAmIEJXUl9NQVNLKQorCQkJT01BUF9IU01NQ19TVEFUIHw9IEJXUl9NQVNLOworCisJCWlmIChtbWNfc3RhdCAmIFRDX01BU0spIHsKKwkJCU9NQVBfSFNNTUNfU1RBVCB8PSBUQ19NQVNLOworCQkJYnJlYWs7CisJCX0KKwl9CisJcmV0dXJuIDE7Cit9CisKK3Vuc2lnbmVkIGNoYXIgbW1jX2RldGVjdF9jYXJkKG1tY19jYXJkX2RhdGEgKm1tY19jYXJkX2N1cikKK3sKKwl1bnNpZ25lZCBjaGFyIGVycjsKKwl1bnNpZ25lZCBpbnQgYXJndW1lbnQgPSAwOworCXVuc2lnbmVkIGludCBvY3JfdmFsdWUsIG9jcl9yZWN2ZCwgcmV0X2NtZDQxLCBoY3NfdmFsOworCXVuc2lnbmVkIGludCByZXNwWzRdOworCXVuc2lnbmVkIHNob3J0IHJldHJ5X2NudCA9IDIwMDA7CisKKwkvKiBTZXQgdG8gSW5pdGlhbGl6YXRpb24gQ2xvY2sgKi8KKwllcnIgPSBtbWNfY2xvY2tfY29uZmlnKENMS180MDBLSFosIDApOworCWlmIChlcnIgIT0gMSkKKwkJcmV0dXJuIGVycjsKKworCW1tY19jYXJkX2N1ci0+UkNBID0gTU1DX1JFTEFUSVZFX0NBUkRfQUREUkVTUzsKKwlhcmd1bWVudCA9IDB4MDAwMDAwMDA7CisKKwlvY3JfdmFsdWUgPSAoMHgxRkYgPDwgMTUpOworCWVyciA9IG1tY19zZW5kX2NtZChNTUNfQ01EMCwgYXJndW1lbnQsIHJlc3ApOworCWlmIChlcnIgIT0gMSkKKwkJcmV0dXJuIGVycjsKKworCWFyZ3VtZW50ID0gU0RfQ01EOF9DSEVDS19QQVRURVJOIHwgU0RfQ01EOF8yXzdfM182X1ZfUkFOR0U7CisJZXJyID0gbW1jX3NlbmRfY21kKE1NQ19TRENNRDgsIGFyZ3VtZW50LCByZXNwKTsKKwloY3NfdmFsID0gKGVyciA9PSAxKSA/CisJCU1NQ19PQ1JfUkVHX0hPU1RfQ0FQQUNJVFlfU1VQUE9SVF9TRUNUT1IgOgorCQlNTUNfT0NSX1JFR19IT1NUX0NBUEFDSVRZX1NVUFBPUlRfQllURTsKKworCWFyZ3VtZW50ID0gMHgwMDAwIDw8IDE2OworCWVyciA9IG1tY19zZW5kX2NtZChNTUNfQ01ENTUsIGFyZ3VtZW50LCByZXNwKTsKKwlpZiAoZXJyID09IDEpIHsKKwkJbW1jX2NhcmRfY3VyLT5jYXJkX3R5cGUgPSBTRF9DQVJEOworCQlvY3JfdmFsdWUgfD0gaGNzX3ZhbDsKKwkJcmV0X2NtZDQxID0gTU1DX0FDTUQ0MTsKKwl9IGVsc2UgeworCQltbWNfY2FyZF9jdXItPmNhcmRfdHlwZSA9IE1NQ19DQVJEOworCQlvY3JfdmFsdWUgfD0gTU1DX09DUl9SRUdfQUNDRVNTX01PREVfU0VDVE9SOworCQlyZXRfY21kNDEgPSBNTUNfQ01EMTsKKwkJT01BUF9IU01NQ19DT04gJj0gfk9EOworCQlPTUFQX0hTTU1DX0NPTiB8PSBPUEVORFJBSU47CisJfQorCisJYXJndW1lbnQgPSBvY3JfdmFsdWU7CisJZXJyID0gbW1jX3NlbmRfY21kKHJldF9jbWQ0MSwgYXJndW1lbnQsIHJlc3ApOworCWlmIChlcnIgIT0gMSkKKwkJcmV0dXJuIGVycjsKKworCW9jcl9yZWN2ZCA9ICgobW1jX3Jlc3BfcjMgKikgcmVzcCktPm9jcjsKKworCXdoaWxlICghKG9jcl9yZWN2ZCAmICgweDEgPDwgMzEpKSAmJiAocmV0cnlfY250ID4gMCkpIHsKKwkJcmV0cnlfY250LS07CisJCWlmIChtbWNfY2FyZF9jdXItPmNhcmRfdHlwZSA9PSBTRF9DQVJEKSB7CisJCQlhcmd1bWVudCA9IDB4MDAwMCA8PCAxNjsKKwkJCWVyciA9IG1tY19zZW5kX2NtZChNTUNfQ01ENTUsIGFyZ3VtZW50LCByZXNwKTsKKwkJfQorCisJCWFyZ3VtZW50ID0gb2NyX3ZhbHVlOworCQllcnIgPSBtbWNfc2VuZF9jbWQocmV0X2NtZDQxLCBhcmd1bWVudCwgcmVzcCk7CisJCWlmIChlcnIgIT0gMSkKKwkJCXJldHVybiBlcnI7CisJCW9jcl9yZWN2ZCA9ICgobW1jX3Jlc3BfcjMgKikgcmVzcCktPm9jcjsKKwl9CisKKwlpZiAoIShvY3JfcmVjdmQgJiAoMHgxIDw8IDMxKSkpCisJCXJldHVybiAwOworCisJaWYgKG1tY19jYXJkX2N1ci0+Y2FyZF90eXBlID09IE1NQ19DQVJEKSB7CisJCWlmICgob2NyX3JlY3ZkICYgTU1DX09DUl9SRUdfQUNDRVNTX01PREVfTUFTSykgPT0KKwkJCU1NQ19PQ1JfUkVHX0FDQ0VTU19NT0RFX1NFQ1RPUikgeworCQkJbW1jX2NhcmRfY3VyLT5tb2RlID0gU0VDVE9SX01PREU7CisJCX0gZWxzZSB7CisJCQltbWNfY2FyZF9jdXItPm1vZGUgPSBCWVRFX01PREU7CisJCX0KKworCQlvY3JfcmVjdmQgJj0gfk1NQ19PQ1JfUkVHX0FDQ0VTU19NT0RFX01BU0s7CisJfSBlbHNlIHsKKwkJaWYgKChvY3JfcmVjdmQgJiBNTUNfT0NSX1JFR19IT1NUX0NBUEFDSVRZX1NVUFBPUlRfTUFTSykKKwkJCT09IE1NQ19PQ1JfUkVHX0hPU1RfQ0FQQUNJVFlfU1VQUE9SVF9TRUNUT1IpIHsKKwkJCW1tY19jYXJkX2N1ci0+bW9kZSA9IFNFQ1RPUl9NT0RFOworCQl9IGVsc2UgeworCQkJbW1jX2NhcmRfY3VyLT5tb2RlID0gQllURV9NT0RFOworCQl9CisJCW9jcl9yZWN2ZCAmPSB+TU1DX09DUl9SRUdfSE9TVF9DQVBBQ0lUWV9TVVBQT1JUX01BU0s7CisJfQorCisJb2NyX3JlY3ZkICY9IH4oMHgxIDw8IDMxKTsKKwlpZiAoIShvY3JfcmVjdmQgJiBvY3JfdmFsdWUpKQorCQlyZXR1cm4gMDsKKworCWVyciA9IG1tY19zZW5kX2NtZChNTUNfQ01EMiwgYXJndW1lbnQsIHJlc3ApOworCWlmIChlcnIgIT0gMSkKKwkJcmV0dXJuIGVycjsKKworCWlmIChtbWNfY2FyZF9jdXItPmNhcmRfdHlwZSA9PSBNTUNfQ0FSRCkgeworCQlhcmd1bWVudCA9IG1tY19jYXJkX2N1ci0+UkNBIDw8IDE2OworCQllcnIgPSBtbWNfc2VuZF9jbWQoTU1DX0NNRDMsIGFyZ3VtZW50LCByZXNwKTsKKwkJaWYgKGVyciAhPSAxKQorCQkJcmV0dXJuIGVycjsKKwl9IGVsc2UgeworCQlhcmd1bWVudCA9IDB4MDAwMDAwMDA7CisJCWVyciA9IG1tY19zZW5kX2NtZChNTUNfU0RDTUQzLCBhcmd1bWVudCwgcmVzcCk7CisJCWlmIChlcnIgIT0gMSkKKwkJCXJldHVybiBlcnI7CisKKwkJbW1jX2NhcmRfY3VyLT5SQ0EgPSAoKG1tY19yZXNwX3I2ICopIHJlc3ApLT5uZXdwdWJsaXNoZWRyY2E7CisJfQorCisJT01BUF9IU01NQ19DT04gJj0gfk9EOworCU9NQVBfSFNNTUNfQ09OIHw9IE5PT1BFTkRSQUlOOworCXJldHVybiAxOworfQorCit1bnNpZ25lZCBjaGFyIG1tY19yZWFkX2NhcmRzaXplKG1tY19jYXJkX2RhdGEgKm1tY19kZXZfZGF0YSwKKwkJCQltbWNfY3NkX3JlZ190ICpjdXJfY3NkKQoreworCW1tY19leHRlbmRlZF9jc2RfcmVnX3QgZXh0X2NzZDsKKwl1bnNpZ25lZCBpbnQgc2l6ZSwgY291bnQsIGJsa19sZW4sIGJsa19ubywgY2FyZF9zaXplLCBhcmd1bWVudDsKKwl1bnNpZ25lZCBjaGFyIGVycjsKKwl1bnNpZ25lZCBpbnQgcmVzcFs0XTsKKworCWlmIChtbWNfZGV2X2RhdGEtPm1vZGUgPT0gU0VDVE9SX01PREUpIHsKKwkJaWYgKG1tY19kZXZfZGF0YS0+Y2FyZF90eXBlID09IFNEX0NBUkQpIHsKKwkJCWNhcmRfc2l6ZSA9CisJCQkJKCgobW1jX3NkMl9jc2RfcmVnX3QgKikgY3VyX2NzZCktPgorCQkJCWNfc2l6ZV9sc2IgJiBNTUNfU0QyX0NTRF9DX1NJWkVfTFNCX01BU0spIHwKKwkJCQkoKCgobW1jX3NkMl9jc2RfcmVnX3QgKikgY3VyX2NzZCktPgorCQkJCWNfc2l6ZV9tc2IgJiBNTUNfU0QyX0NTRF9DX1NJWkVfTVNCX01BU0spCisJCQkJPDwgTU1DX1NEMl9DU0RfQ19TSVpFX01TQl9PRkZTRVQpOworCQkJbW1jX2Rldl9kYXRhLT5zaXplID0gY2FyZF9zaXplICogMTAyNDsKKwkJCWlmIChtbWNfZGV2X2RhdGEtPnNpemUgPT0gMCkKKwkJCQlyZXR1cm4gMDsKKwkJfSBlbHNlIHsKKwkJCWFyZ3VtZW50ID0gMHgwMDAwMDAwMDsKKwkJCWVyciA9IG1tY19zZW5kX2NtZChNTUNfQ01EOCwgYXJndW1lbnQsIHJlc3ApOworCQkJaWYgKGVyciAhPSAxKQorCQkJCXJldHVybiBlcnI7CisJCQllcnIgPSBtbWNfcmVhZF9kYXRhKCh1bnNpZ25lZCBpbnQgKikgJmV4dF9jc2QpOworCQkJaWYgKGVyciAhPSAxKQorCQkJCXJldHVybiBlcnI7CisJCQltbWNfZGV2X2RhdGEtPnNpemUgPSBleHRfY3NkLnNlY3RvcmNvdW50OworCisJCQlpZiAobW1jX2Rldl9kYXRhLT5zaXplID09IDApCisJCQkJbW1jX2Rldl9kYXRhLT5zaXplID0gODM4ODYwODsKKwkJfQorCX0gZWxzZSB7CisJCWlmIChjdXJfY3NkLT5jX3NpemVfbXVsdCA+PSA4KQorCQkJcmV0dXJuIDA7CisKKwkJaWYgKGN1cl9jc2QtPnJlYWRfYmxfbGVuID49IDEyKQorCQkJcmV0dXJuIDA7CisKKwkJLyogQ29tcHV0ZSBzaXplICovCisJCWNvdW50ID0gMSA8PCAoY3VyX2NzZC0+Y19zaXplX211bHQgKyAyKTsKKwkJY2FyZF9zaXplID0gKGN1cl9jc2QtPmNfc2l6ZV9sc2IgJiBNTUNfQ1NEX0NfU0laRV9MU0JfTUFTSykgfAorCQkJKChjdXJfY3NkLT5jX3NpemVfbXNiICYgTU1DX0NTRF9DX1NJWkVfTVNCX01BU0spCisJCQk8PCBNTUNfQ1NEX0NfU0laRV9NU0JfT0ZGU0VUKTsKKwkJYmxrX25vID0gKGNhcmRfc2l6ZSArIDEpICogY291bnQ7CisJCWJsa19sZW4gPSAxIDw8IGN1cl9jc2QtPnJlYWRfYmxfbGVuOworCQlzaXplID0gYmxrX25vICogYmxrX2xlbjsKKwkJbW1jX2Rldl9kYXRhLT5zaXplID0gc2l6ZSAvIE1NQ1NEX1NFQ1RPUl9TSVpFOworCQlpZiAobW1jX2Rldl9kYXRhLT5zaXplID09IDApCisJCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIDE7Cit9CisKK3Vuc2lnbmVkIGNoYXIgb21hcF9tbWNfcmVhZF9zZWN0KHVuc2lnbmVkIGludCBzdGFydF9zZWMsIHVuc2lnbmVkIGludCBudW1fYnl0ZXMsCisJCQkJIG1tY19jYXJkX2RhdGEgKm1tY19jLAorCQkJCSB1bnNpZ25lZCBsb25nICpvdXRwdXRfYnVmKQoreworCXVuc2lnbmVkIGNoYXIgZXJyOworCXVuc2lnbmVkIGludCBhcmd1bWVudDsKKwl1bnNpZ25lZCBpbnQgcmVzcFs0XTsKKwl1bnNpZ25lZCBpbnQgbnVtX3NlY192YWwgPQorCQkobnVtX2J5dGVzICsgKE1NQ1NEX1NFQ1RPUl9TSVpFIC0gMSkpIC8gTU1DU0RfU0VDVE9SX1NJWkU7CisJdW5zaWduZWQgaW50IHNlY19pbmNfdmFsOworCisJaWYgKG51bV9zZWNfdmFsID09IDApCisJCXJldHVybiAxOworCisJaWYgKG1tY19jLT5tb2RlID09IFNFQ1RPUl9NT0RFKSB7CisJCWFyZ3VtZW50ID0gc3RhcnRfc2VjOworCQlzZWNfaW5jX3ZhbCA9IDE7CisJfSBlbHNlIHsKKwkJYXJndW1lbnQgPSBzdGFydF9zZWMgKiBNTUNTRF9TRUNUT1JfU0laRTsKKwkJc2VjX2luY192YWwgPSBNTUNTRF9TRUNUT1JfU0laRTsKKwl9CisKKwl3aGlsZSAobnVtX3NlY192YWwpIHsKKwkJZXJyID0gbW1jX3NlbmRfY21kKE1NQ19DTUQxNywgYXJndW1lbnQsIHJlc3ApOworCQlpZiAoZXJyICE9IDEpCisJCQlyZXR1cm4gZXJyOworCisJCWVyciA9IG1tY19yZWFkX2RhdGEoKHVuc2lnbmVkIGludCAqKSBvdXRwdXRfYnVmKTsKKwkJaWYgKGVyciAhPSAxKQorCQkJcmV0dXJuIGVycjsKKworCQlvdXRwdXRfYnVmICs9IChNTUNTRF9TRUNUT1JfU0laRSAvIDQpOworCQlhcmd1bWVudCArPSBzZWNfaW5jX3ZhbDsKKwkJbnVtX3NlY192YWwtLTsKKwl9CisJcmV0dXJuIDE7Cit9CisKK3Vuc2lnbmVkIGNoYXIgY29uZmlndXJlX21tYyhtbWNfY2FyZF9kYXRhICptbWNfY2FyZF9jdXIpCit7CisJdW5zaWduZWQgY2hhciByZXRfdmFsOworCXVuc2lnbmVkIGludCBhcmd1bWVudDsKKwl1bnNpZ25lZCBpbnQgcmVzcFs0XTsKKwl1bnNpZ25lZCBpbnQgdHJhbnNfY2xrLCB0cmFuc19mYWN0LCB0cmFuc191bml0LCByZXRyaWVzID0gMjsKKwltbWNfY3NkX3JlZ190IENhcmRfQ1NEOworCXVuc2lnbmVkIGNoYXIgdHJhbnNfc3BlZWQ7CisKKwlyZXRfdmFsID0gbW1jX2luaXRfc2V0dXAoKTsKKworCWlmIChyZXRfdmFsICE9IDEpCisJCXJldHVybiByZXRfdmFsOworCisJZG8geworCQlyZXRfdmFsID0gbW1jX2RldGVjdF9jYXJkKG1tY19jYXJkX2N1cik7CisJCXJldHJpZXMtLTsKKwl9IHdoaWxlICgocmV0cmllcyA+IDApICYmIChyZXRfdmFsICE9IDEpKTsKKworCWFyZ3VtZW50ID0gbW1jX2NhcmRfY3VyLT5SQ0EgPDwgMTY7CisJcmV0X3ZhbCA9IG1tY19zZW5kX2NtZChNTUNfQ01EOSwgYXJndW1lbnQsIHJlc3ApOworCWlmIChyZXRfdmFsICE9IDEpCisJCXJldHVybiByZXRfdmFsOworCisJKCh1bnNpZ25lZCBpbnQgKikgJkNhcmRfQ1NEKVszXSA9IHJlc3BbM107CisJKCh1bnNpZ25lZCBpbnQgKikgJkNhcmRfQ1NEKVsyXSA9IHJlc3BbMl07CisJKCh1bnNpZ25lZCBpbnQgKikgJkNhcmRfQ1NEKVsxXSA9IHJlc3BbMV07CisJKCh1bnNpZ25lZCBpbnQgKikgJkNhcmRfQ1NEKVswXSA9IHJlc3BbMF07CisKKwlpZiAobW1jX2NhcmRfY3VyLT5jYXJkX3R5cGUgPT0gTU1DX0NBUkQpCisJCW1tY19jYXJkX2N1ci0+dmVyc2lvbiA9IENhcmRfQ1NELnNwZWNfdmVyczsKKworCXRyYW5zX3NwZWVkID0gQ2FyZF9DU0QudHJhbl9zcGVlZDsKKworCXJldF92YWwgPSBtbWNfc2VuZF9jbWQoTU1DX0NNRDQsIE1NQ19EU1JfREVGQVVMVCA8PCAxNiwgcmVzcCk7CisJaWYgKHJldF92YWwgIT0gMSkKKwkJcmV0dXJuIHJldF92YWw7CisKKwl0cmFuc191bml0ID0gdHJhbnNfc3BlZWQgJiBNTUNfQ1NEX1RSQU5fU1BFRURfVU5JVF9NQVNLOworCXRyYW5zX2ZhY3QgPSB0cmFuc19zcGVlZCAmIE1NQ19DU0RfVFJBTl9TUEVFRF9GQUNUT1JfTUFTSzsKKworCWlmICh0cmFuc191bml0ID4gTU1DX0NTRF9UUkFOX1NQRUVEX1VOSVRfMTAwTUhaKQorCQlyZXR1cm4gMDsKKworCWlmICgodHJhbnNfZmFjdCA8IE1NQ19DU0RfVFJBTl9TUEVFRF9GQUNUT1JfMV8wKSB8fAorCQkodHJhbnNfZmFjdCA+IE1NQ19DU0RfVFJBTl9TUEVFRF9GQUNUT1JfOF8wKSkKKwkJcmV0dXJuIDA7CisKKwl0cmFuc191bml0ID4+PSAwOworCXRyYW5zX2ZhY3QgPj49IDM7CisKKwl0cmFuc19jbGsgPSBtbWNfdHJhbnNzcGVlZF92YWxbdHJhbnNfZmFjdCAtIDFdW3RyYW5zX3VuaXRdICogMjsKKwlyZXRfdmFsID0gbW1jX2Nsb2NrX2NvbmZpZyhDTEtfTUlTQywgdHJhbnNfY2xrKTsKKworCWlmIChyZXRfdmFsICE9IDEpCisJCXJldHVybiByZXRfdmFsOworCisJYXJndW1lbnQgPSBtbWNfY2FyZF9jdXItPlJDQSA8PCAxNjsKKwlyZXRfdmFsID0gbW1jX3NlbmRfY21kKE1NQ19DTUQ3X1NFTEVDVCwgYXJndW1lbnQsIHJlc3ApOworCWlmIChyZXRfdmFsICE9IDEpCisJCXJldHVybiByZXRfdmFsOworCisJLyogQ29uZmlndXJlIHRoZSBibG9jayBsZW5ndGggdG8gNTEyIGJ5dGVzICovCisJYXJndW1lbnQgPSBNTUNTRF9TRUNUT1JfU0laRTsKKwlyZXRfdmFsID0gbW1jX3NlbmRfY21kKE1NQ19DTUQxNiwgYXJndW1lbnQsIHJlc3ApOworCWlmIChyZXRfdmFsICE9IDEpCisJCXJldHVybiByZXRfdmFsOworCisJLyogZ2V0IHRoZSBjYXJkIHNpemUgaW4gc2VjdG9ycyAqLworCXJldF92YWwgPSBtbWNfcmVhZF9jYXJkc2l6ZShtbWNfY2FyZF9jdXIsICZDYXJkX0NTRCk7CisJaWYgKHJldF92YWwgIT0gMSkKKwkJcmV0dXJuIHJldF92YWw7CisKKwlyZXR1cm4gMTsKK30KK3Vuc2lnbmVkIGxvbmcgbW1jX2JyZWFkKGludCBkZXZfbnVtLCB1bnNpZ25lZCBsb25nIGJsa25yLCBsYmFpbnRfdCBibGtjbnQsCisJCQl2b2lkICpkc3QpCit7CisJb21hcF9tbWNfcmVhZF9zZWN0KGJsa25yLCAoYmxrY250ICogTU1DU0RfU0VDVE9SX1NJWkUpLCAmY3VyX2NhcmRfZGF0YSwKKwkJCSAgICh1bnNpZ25lZCBsb25nICopIGRzdCk7CisJcmV0dXJuIDE7Cit9CisKK2ludCBtbWNfaW5pdChpbnQgdmVyYm9zZSkKK3sKKwlpZiAoY29uZmlndXJlX21tYygmY3VyX2NhcmRfZGF0YSkgIT0gMSkKKwkJcmV0dXJuIDE7CisKKwltbWNfYmxrX2Rldi5pZl90eXBlID0gSUZfVFlQRV9NTUM7CisJbW1jX2Jsa19kZXYucGFydF90eXBlID0gUEFSVF9UWVBFX0RPUzsKKwltbWNfYmxrX2Rldi5kZXYgPSAwOworCW1tY19ibGtfZGV2Lmx1biA9IDA7CisJbW1jX2Jsa19kZXYudHlwZSA9IDA7CisKKwkvKiBGSVhNRSBmaWxsIGluIHRoZSBjb3JyZWN0IHNpemUgKGlzIHNldCB0byAzMk1CeXRlKSAqLworCW1tY19ibGtfZGV2LmJsa3N6ID0gTU1DU0RfU0VDVE9SX1NJWkU7CisJbW1jX2Jsa19kZXYubGJhID0gMHgxMDAwMDsKKwltbWNfYmxrX2Rldi5yZW1vdmFibGUgPSAwOworCW1tY19ibGtfZGV2LmJsb2NrX3JlYWQgPSBtbWNfYnJlYWQ7CisKKwlmYXRfcmVnaXN0ZXJfZGV2aWNlKCZtbWNfYmxrX2RldiwgMSk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBtbWNfcmVhZCh1bG9uZyBzcmMsIHVjaGFyICpkc3QsIGludCBzaXplKQoreworCXJldHVybiAwOworfQorCitpbnQgbW1jX3dyaXRlKHVjaGFyICpzcmMsIHVsb25nIGRzdCwgaW50IHNpemUpCit7CisJcmV0dXJuIDA7Cit9CisKK2ludCBtbWMyaW5mbyh1bG9uZyBhZGRyKQoreworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9NYWtlZmlsZSBiL2RyaXZlcnMvbXRkL25hbmQvTWFrZWZpbGUKaW5kZXggYjBhYmU2ZS4uZjdiMmIyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL210ZC9uYW5kL01ha2VmaWxlCkBAIC0zOCw2ICszOCw3IEBACiBDT0JKUy0kKENPTkZJR19OQU5EX0ZTTF9FTEJDKSArPSBmc2xfZWxiY19uYW5kLm8KIENPQkpTLSQoQ09ORklHX05BTkRfRlNMX1VQTSkgKz0gZnNsX3VwbS5vCiBDT0JKUy0kKENPTkZJR19OQU5EX1MzQzY0WFgpICs9IHMzYzY0eHgubworQ09CSlMtJChDT05GSUdfTkFORF9PTUFQX0dQTUMpICs9IG9tYXBfZ3BtYy5vCiBlbmRpZgogCiBDT0JKUwk6PSAkKENPQkpTLXkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL29tYXBfZ3BtYy5jIGIvZHJpdmVycy9tdGQvbmFuZC9vbWFwX2dwbWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjhlZDM5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9vbWFwX2dwbWMuYwpAQCAtMCwwICsxLDM1MyBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwNC0yMDA4IFRleGFzIEluc3RydW1lbnRzLCA8d3d3LnRpLmNvbT4KKyAqIFJvaGl0IENob3JhcmlhIDxyb2hpdGtjQHRpLmNvbT4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2Vycm5vLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvbWVtLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvb21hcF9ncG1jLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL25hbmRfZWNjLmg+CisjaW5jbHVkZSA8bmFuZC5oPgorCitzdGF0aWMgdWludDhfdCBjczsKK3N0YXRpYyBncG1jX3QgKmdwbWNfYmFzZSA9IChncG1jX3QgKilHUE1DX0JBU0U7CitzdGF0aWMgZ3BtY19jc3hfdCAqZ3BtY19jc19iYXNlOworc3RhdGljIHN0cnVjdCBuYW5kX2VjY2xheW91dCBod19uYW5kX29vYiA9IEdQTUNfTkFORF9IV19FQ0NfTEFZT1VUOworCisvKgorICogb21hcF9uYW5kX2h3Y29udHJvbCAtIFNldCB0aGUgYWRkcmVzcyBwb2ludGVycyBjb3JyZXRseSBmb3IgdGhlCisgKgkJCWZvbGxvd2luZyBhZGRyZXNzL2RhdGEvY29tbWFuZCBvcGVyYXRpb24KKyAqLworc3RhdGljIHZvaWQgb21hcF9uYW5kX2h3Y29udHJvbChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50MzJfdCBjbWQsCisJCQkJdWludDMyX3QgY3RybCkKK3sKKwlyZWdpc3RlciBzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OworCisJLyoKKwkgKiBQb2ludCB0aGUgSU9fQUREUiB0byBEQVRBIGFuZCBBRERSRVNTIHJlZ2lzdGVycyBpbnN0ZWFkCisJICogb2YgY2hpcCBhZGRyZXNzCisJICovCisJc3dpdGNoIChjdHJsKSB7CisJY2FzZSBOQU5EX0NUUkxfQ0hBTkdFIHwgTkFORF9DVFJMX0NMRToKKwkJdGhpcy0+SU9fQUREUl9XID0gKHZvaWQgX19pb21lbSAqKSZncG1jX2NzX2Jhc2UtPm5hbmRfY21kOworCQlicmVhazsKKwljYXNlIE5BTkRfQ1RSTF9DSEFOR0UgfCBOQU5EX0NUUkxfQUxFOgorCQl0aGlzLT5JT19BRERSX1cgPSAodm9pZCBfX2lvbWVtICopJmdwbWNfY3NfYmFzZS0+bmFuZF9hZHI7CisJCWJyZWFrOworCWNhc2UgTkFORF9DVFJMX0NIQU5HRSB8IE5BTkRfTkNFOgorCQl0aGlzLT5JT19BRERSX1cgPSAodm9pZCBfX2lvbWVtICopJmdwbWNfY3NfYmFzZS0+bmFuZF9kYXQ7CisJCWJyZWFrOworCX0KKworCWlmIChjbWQgIT0gTkFORF9DTURfTk9ORSkKKwkJd3JpdGViKGNtZCwgdGhpcy0+SU9fQUREUl9XKTsKK30KKworLyoKKyAqIG9tYXBfaHdlY2NfaW5pdCAtIEluaXRpYWxpemUgdGhlIEhhcmR3YXJlIEVDQyBmb3IgTkFORCBmbGFzaCBpbgorICogICAgICAgICAgICAgICAgICAgR1BNQyBjb250cm9sbGVyCisgKiBAbXRkOiAgICAgICAgTVREIGRldmljZSBzdHJ1Y3R1cmUKKyAqCisgKi8KK3N0YXRpYyB2b2lkIG9tYXBfaHdlY2NfaW5pdChzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwKQoreworCS8qCisJICogSW5pdCBFQ0MgQ29udHJvbCBSZWdpc3RlcgorCSAqIENsZWFyIGFsbCBFQ0MgfCBFbmFibGUgUmVnMQorCSAqLworCXdyaXRlbChFQ0NDTEVBUiB8IEVDQ1JFU1VMVFJFRzEsICZncG1jX2Jhc2UtPmVjY19jb250cm9sKTsKKwl3cml0ZWwoRUNDU0laRTEgfCBFQ0NTSVpFMCB8IEVDQ1NJWkUwU0VMLCAmZ3BtY19iYXNlLT5lY2Nfc2l6ZV9jb25maWcpOworfQorCisvKgorICogZ2VuX3RydWVfZWNjIC0gVGhpcyBmdW5jdGlvbiB3aWxsIGdlbmVyYXRlIHRydWUgRUNDIHZhbHVlLCB3aGljaAorICogY2FuIGJlIHVzZWQgd2hlbiBjb3JyZWN0aW5nIGRhdGEgcmVhZCBmcm9tIE5BTkQgZmxhc2ggbWVtb3J5IGNvcmUKKyAqCisgKiBAZWNjX2J1ZjoJYnVmZmVyIHRvIHN0b3JlIGVjYyBjb2RlCisgKgorICogQHJldHVybjoJcmUtZm9ybWF0dGVkIEVDQyB2YWx1ZQorICovCitzdGF0aWMgdWludDMyX3QgZ2VuX3RydWVfZWNjKHVpbnQ4X3QgKmVjY19idWYpCit7CisJcmV0dXJuIGVjY19idWZbMF0gfCAoZWNjX2J1ZlsxXSA8PCAxNikgfCAoKGVjY19idWZbMl0gJiAweEYwKSA8PCAyMCkgfAorCQkoKGVjY19idWZbMl0gJiAweDBGKSA8PCA4KTsKK30KKworLyoKKyAqIG9tYXBfY29ycmVjdF9kYXRhIC0gQ29tcGFyZXMgdGhlIGVjYyByZWFkIGZyb20gbmFuZCBzcGFyZSBhcmVhIHdpdGggRUNDCisgKiByZWdpc3RlcnMgdmFsdWVzIGFuZCBjb3JyZWN0cyBvbmUgYml0IGVycm9yIGlmIGl0IGhhcyBvY2N1cmVkCisgKiBGdXJ0aGVyIGRldGFpbHMgY2FuIGJlIGhhZCBmcm9tIE9NQVAgVFJNIGFuZCB0aGUgZm9sbG93aW5nIHNlbGVjdGVkIGxpbmtzOgorICogaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9IYW1taW5nX2NvZGUKKyAqIGh0dHA6Ly93d3cuY3MudXRleGFzLmVkdS91c2Vycy9wbGF4dG9uL2MvMzM3LzA1Zi9zbGlkZXMvRXJyb3JDb3JyZWN0aW9uLTQucGRmCisgKgorICogQG10ZDoJCSBNVEQgZGV2aWNlIHN0cnVjdHVyZQorICogQGRhdDoJCSBwYWdlIGRhdGEKKyAqIEByZWFkX2VjYzoJCSBlY2MgcmVhZCBmcm9tIG5hbmQgZmxhc2gKKyAqIEBjYWxjX2VjYzoJCSBlY2MgcmVhZCBmcm9tIEVDQyByZWdpc3RlcnMKKyAqCisgKiBAcmV0dXJuIDAgaWYgZGF0YSBpcyBPSyBvciBjb3JyZWN0ZWQsIGVsc2UgcmV0dXJucyAtMQorICovCitzdGF0aWMgaW50IG9tYXBfY29ycmVjdF9kYXRhKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1aW50OF90ICpkYXQsCisJCQkJdWludDhfdCAqcmVhZF9lY2MsIHVpbnQ4X3QgKmNhbGNfZWNjKQoreworCXVpbnQzMl90IG9yaWdfZWNjLCBuZXdfZWNjLCByZXMsIGhtOworCXVpbnQxNl90IHBhcml0eV9iaXRzLCBieXRlOworCXVpbnQ4X3QgYml0OworCisJLyogUmVnZW5lcmF0ZSB0aGUgb3JnaW5hbCBFQ0MgKi8KKwlvcmlnX2VjYyA9IGdlbl90cnVlX2VjYyhyZWFkX2VjYyk7CisJbmV3X2VjYyA9IGdlbl90cnVlX2VjYyhjYWxjX2VjYyk7CisJLyogR2V0IHRoZSBYT1Igb2YgcmVhbCBlY2MgKi8KKwlyZXMgPSBvcmlnX2VjYyBeIG5ld19lY2M7CisJaWYgKHJlcykgeworCQkvKiBHZXQgdGhlIGhhbW1pbmcgd2lkdGggKi8KKwkJaG0gPSBod2VpZ2h0MzIocmVzKTsKKwkJLyogU2luZ2xlIGJpdCBlcnJvcnMgY2FuIGJlIGNvcnJlY3RlZCEgKi8KKwkJaWYgKGhtID09IDEyKSB7CisJCQkvKiBDb3JyZWN0YWJsZSBkYXRhISAqLworCQkJcGFyaXR5X2JpdHMgPSByZXMgPj4gMTY7CisJCQliaXQgPSAocGFyaXR5X2JpdHMgJiAweDcpOworCQkJYnl0ZSA9IChwYXJpdHlfYml0cyA+PiAzKSAmIDB4MUZGOworCQkJLyogRmxpcCB0aGUgYml0IHRvIGNvcnJlY3QgKi8KKwkJCWRhdFtieXRlXSBePSAoMHgxIDw8IGJpdCk7CisJCX0gZWxzZSBpZiAoaG0gPT0gMSkgeworCQkJcHJpbnRmKCJFcnJvcjogRWNjIGlzIHdyb25nXG4iKTsKKwkJCS8qIEVDQyBpdHNlbGYgaXMgY29ycnVwdGVkICovCisJCQlyZXR1cm4gMjsKKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKiBobSBkaXN0YW5jZSAhPSBwYXJpdHkgcGFpcnMgT1Igb25lLCBjb3VsZCBtZWFuIDIgYml0CisJCQkgKiBlcnJvciBPUiBwb3RlbnRpYWxseSBiZSBvbiBhIGJsYW5rIHBhZ2UuLgorCQkJICogb3JpZ19lY2M6IGNvbnRhaW5zIHNwYXJlIGFyZWEgZGF0YSBmcm9tIG5hbmQgZmxhc2guCisJCQkgKiBuZXdfZWNjOiBnZW5lcmF0ZWQgZWNjIHdoaWxlIHJlYWRpbmcgZGF0YSBhcmVhLgorCQkJICogTm90ZTogaWYgdGhlIGVjYyA9IDAsIGFsbCBkYXRhIGJpdHMgZnJvbSB3aGljaCBpdCB3YXMKKwkJCSAqIGdlbmVyYXRlZCBhcmUgMHhGRi4KKwkJCSAqIFRoZSAzIGJ5dGUoMjQgYml0cykgZWNjIGlzIGdlbmVyYXRlZCBwZXIgNTEyYnl0ZQorCQkJICogY2h1bmsgb2YgYSBwYWdlLiBJZiBvcmlnX2VjYyhmcm9tIHNwYXJlIGFyZWEpCisJCQkgKiBpcyAweEZGICYmIG5ld19lY2MoY29tcHV0ZWQgbm93IGZyb20gZGF0YSBhcmVhKT0weDAsCisJCQkgKiB0aGlzIG1lYW5zIHRoYXQgZGF0YSBhcmVhIGlzIDB4RkYgYW5kIHNwYXJlIGFyZWEgaXMKKwkJCSAqIDB4RkYuIEEgc3VyZSBzaWduIG9mIGEgZXJhc2VkIHBhZ2UhCisJCQkgKi8KKwkJCWlmICgob3JpZ19lY2MgPT0gMHgwRkZGMEZGRikgJiYgKG5ld19lY2MgPT0gMHgwMDAwMDAwMCkpCisJCQkJcmV0dXJuIDA7CisJCQlwcmludGYoIkVycm9yOiBCYWQgY29tcGFyZSEgZmFpbGVkXG4iKTsKKwkJCS8qIGRldGVjdGVkIDIgYml0IGVycm9yICovCisJCQlyZXR1cm4gLTE7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiAgb21hcF9jYWxjdWxhdGVfZWNjIC0gR2VuZXJhdGUgbm9uLWludmVydGVkIEVDQyBieXRlcy4KKyAqCisgKiAgVXNpbmcgbm9uaW52ZXJ0ZWQgRUNDIGNhbiBiZSBjb25zaWRlcmVkIHVnbHkgc2luY2Ugd3JpdGluZyBhIGJsYW5rCisgKiAgcGFnZSBpZS4gcGFkZGluZyB3aWxsIGNsZWFyIHRoZSBFQ0MgYnl0ZXMuIFRoaXMgaXMgbm8gcHJvYmxlbSBhcworICogIGxvbmcgbm9ib2R5IGlzIHRyeWluZyB0byB3cml0ZSBkYXRhIG9uIHRoZSBzZWVtaW5nbHkgdW51c2VkIHBhZ2UuCisgKiAgUmVhZGluZyBhbiBlcmFzZWQgcGFnZSB3aWxsIHByb2R1Y2UgYW4gRUNDIG1pc21hdGNoIGJldHdlZW4KKyAqICBnZW5lcmF0ZWQgYW5kIHJlYWQgRUNDIGJ5dGVzIHRoYXQgaGFzIHRvIGJlIGRlYWx0IHdpdGggc2VwYXJhdGVseS4KKyAqICBFLmcuIGlmIHBhZ2UgaXMgMHhGRiAoZnJlc2ggZXJhc2VkKSwgYW5kIGlmIEhXIEVDQyBlbmdpbmUgd2l0aGluIEdQTUMKKyAqICBpcyB1c2VkLCB0aGUgcmVzdWx0IG9mIHJlYWQgd2lsbCBiZSAweDAgd2hpbGUgdGhlIEVDQyBvZmZzZXRzIG9mIHRoZQorICogIHNwYXJlIGFyZWEgd2lsbCBiZSAweEZGIHdoaWNoIHdpbGwgcmVzdWx0IGluIGFuIEVDQyBtaXNtYXRjaC4KKyAqICBAbXRkOglNVEQgc3RydWN0dXJlCisgKiAgQGRhdDoJdW51c2VkCisgKiAgQGVjY19jb2RlOgllY2NfY29kZSBidWZmZXIKKyAqLworc3RhdGljIGludCBvbWFwX2NhbGN1bGF0ZV9lY2Moc3RydWN0IG10ZF9pbmZvICptdGQsIGNvbnN0IHVpbnQ4X3QgKmRhdCwKKwkJCQl1aW50OF90ICplY2NfY29kZSkKK3sKKwl1X2ludDMyX3QgdmFsOworCisJLyogU3RhcnQgUmVhZGluZyBmcm9tIEhXIEVDQzFfUmVzdWx0ID0gMHgyMDAgKi8KKwl2YWwgPSByZWFkbCgmZ3BtY19iYXNlLT5lY2MxX3Jlc3VsdCk7CisKKwllY2NfY29kZVswXSA9IHZhbCAmIDB4RkY7CisJZWNjX2NvZGVbMV0gPSAodmFsID4+IDE2KSAmIDB4RkY7CisJZWNjX2NvZGVbMl0gPSAoKHZhbCA+PiA4KSAmIDB4MEYpIHwgKCh2YWwgPj4gMjApICYgMHhGMCk7CisKKwkvKgorCSAqIFN0b3AgcmVhZGluZyBhbnltb3JlIEVDQyB2YWxzIGFuZCBjbGVhciBvbGQgcmVzdWx0cworCSAqIGVuYWJsZSB3aWxsIGJlIGNhbGxlZCBpZiBtb3JlIHJlYWRzIGFyZSByZXF1aXJlZAorCSAqLworCXdyaXRlbCgweDAwMCwgJmdwbWNfYmFzZS0+ZWNjX2NvbmZpZyk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIG9tYXBfZW5hYmxlX2VjYyAtIFRoaXMgZnVuY3Rpb24gZW5hYmxlcyB0aGUgaGFyZHdhcmUgZWNjIGZ1bmN0aW9uYWxpdHkKKyAqIEBtdGQ6ICAgICAgICBNVEQgZGV2aWNlIHN0cnVjdHVyZQorICogQG1vZGU6ICAgICAgIFJlYWQvV3JpdGUgbW9kZQorICovCitzdGF0aWMgdm9pZCBvbWFwX2VuYWJsZV9od2VjYyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50MzJfdCBtb2RlKQoreworCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSBtdGQtPnByaXY7CisJdWludDMyX3QgdmFsLCBkZXZfd2lkdGggPSAoY2hpcC0+b3B0aW9ucyAmIE5BTkRfQlVTV0lEVEhfMTYpID4+IDE7CisKKwlzd2l0Y2ggKG1vZGUpIHsKKwljYXNlIE5BTkRfRUNDX1JFQUQ6CisJY2FzZSBOQU5EX0VDQ19XUklURToKKwkJLyogQ2xlYXIgdGhlIGVjYyByZXN1bHQgcmVnaXN0ZXJzLCBzZWxlY3QgZWNjIHJlZyBhcyAxICovCisJCXdyaXRlbChFQ0NDTEVBUiB8IEVDQ1JFU1VMVFJFRzEsICZncG1jX2Jhc2UtPmVjY19jb250cm9sKTsKKworCQkvKgorCQkgKiBTaXplIDAgPSAweEZGLCBTaXplMSBpcyAweEZGIC0gYm90aCBhcmUgNTEyIGJ5dGVzCisJCSAqIHRlbGwgYWxsIHJlZ3MgdG8gZ2VuZXJhdGUgc2l6ZTAgc2l6ZWQgcmVncworCQkgKiB3ZSBqdXN0IGhhdmUgYSBzaW5nbGUgRUNDIGVuZ2luZSBmb3IgYWxsIENTCisJCSAqLworCQl3cml0ZWwoRUNDU0laRTEgfCBFQ0NTSVpFMCB8IEVDQ1NJWkUwU0VMLAorCQkJJmdwbWNfYmFzZS0+ZWNjX3NpemVfY29uZmlnKTsKKwkJdmFsID0gKGRldl93aWR0aCA8PCA3KSB8IChjcyA8PCAxKSB8ICgweDEpOworCQl3cml0ZWwodmFsLCAmZ3BtY19iYXNlLT5lY2NfY29uZmlnKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRmKCJFcnJvcjogVW5yZWNvZ25pemVkIE1vZGVbJWRdIVxuIiwgbW9kZSk7CisJCWJyZWFrOworCX0KK30KKworLyoKKyAqIG9tYXBfbmFuZF9zd2l0Y2hfZWNjIC0gc3dpdGNoIHRoZSBFQ0Mgb3BlcmF0aW9uIGIvdyBoL3cgZWNjIGFuZCBzL3cgZWNjLgorICogVGhlIGRlZmF1bHQgaXMgdG8gY29tZSB1cCBvbiBzL3cgZWNjCisgKgorICogQGhhcmR3YXJlIC0gMSAtc3dpdGNoIHRvIGgvdyBlY2MsIDAgLSBzL3cgZWNjCisgKgorICovCit2b2lkIG9tYXBfbmFuZF9zd2l0Y2hfZWNjKGludDMyX3QgaGFyZHdhcmUpCit7CisJc3RydWN0IG5hbmRfY2hpcCAqbmFuZDsKKwlzdHJ1Y3QgbXRkX2luZm8gKm10ZDsKKworCWlmIChuYW5kX2N1cnJfZGV2aWNlIDwgMCB8fAorCSAgICBuYW5kX2N1cnJfZGV2aWNlID49IENPTkZJR19TWVNfTUFYX05BTkRfREVWSUNFIHx8CisJICAgICFuYW5kX2luZm9bbmFuZF9jdXJyX2RldmljZV0ubmFtZSkgeworCQlwcmludGYoIkVycm9yOiBDYW4ndCBzd2l0Y2ggZWNjLCBubyBkZXZpY2VzIGF2YWlsYWJsZVxuIik7CisJCXJldHVybjsKKwl9CisKKwltdGQgPSAmbmFuZF9pbmZvW25hbmRfY3Vycl9kZXZpY2VdOworCW5hbmQgPSBtdGQtPnByaXY7CisKKwluYW5kLT5vcHRpb25zIHw9IE5BTkRfT1dOX0JVRkZFUlM7CisKKwkvKiBSZXNldCBlY2MgaW50ZXJmYWNlICovCisJbmFuZC0+ZWNjLnJlYWRfcGFnZSA9IE5VTEw7CisJbmFuZC0+ZWNjLndyaXRlX3BhZ2UgPSBOVUxMOworCW5hbmQtPmVjYy5yZWFkX29vYiA9IE5VTEw7CisJbmFuZC0+ZWNjLndyaXRlX29vYiA9IE5VTEw7CisJbmFuZC0+ZWNjLmh3Y3RsID0gTlVMTDsKKwluYW5kLT5lY2MuY29ycmVjdCA9IE5VTEw7CisJbmFuZC0+ZWNjLmNhbGN1bGF0ZSA9IE5VTEw7CisKKwkvKiBTZXR1cCB0aGUgZWNjIGNvbmZpZ3VyYXRpb25zIGFnYWluICovCisJaWYgKGhhcmR3YXJlKSB7CisJCW5hbmQtPmVjYy5tb2RlID0gTkFORF9FQ0NfSFc7CisJCW5hbmQtPmVjYy5sYXlvdXQgPSAmaHdfbmFuZF9vb2I7CisJCW5hbmQtPmVjYy5zaXplID0gNTEyOworCQluYW5kLT5lY2MuYnl0ZXMgPSAzOworCQluYW5kLT5lY2MuaHdjdGwgPSBvbWFwX2VuYWJsZV9od2VjYzsKKwkJbmFuZC0+ZWNjLmNvcnJlY3QgPSBvbWFwX2NvcnJlY3RfZGF0YTsKKwkJbmFuZC0+ZWNjLmNhbGN1bGF0ZSA9IG9tYXBfY2FsY3VsYXRlX2VjYzsKKwkJb21hcF9od2VjY19pbml0KG5hbmQpOworCQlwcmludGYoIkhXIEVDQyBzZWxlY3RlZFxuIik7CisJfSBlbHNlIHsKKwkJbmFuZC0+ZWNjLm1vZGUgPSBOQU5EX0VDQ19TT0ZUOworCQkvKiBVc2UgbXRkIGRlZmF1bHQgc2V0dGluZ3MgKi8KKwkJbmFuZC0+ZWNjLmxheW91dCA9IE5VTEw7CisJCXByaW50ZigiU1cgRUNDIHNlbGVjdGVkXG4iKTsKKwl9CisKKwkvKiBVcGRhdGUgTkFORCBoYW5kbGluZyBhZnRlciBFQ0MgbW9kZSBzd2l0Y2ggKi8KKwluYW5kX3NjYW5fdGFpbChtdGQpOworCisJbmFuZC0+b3B0aW9ucyAmPSB+TkFORF9PV05fQlVGRkVSUzsKK30KKworLyoKKyAqIEJvYXJkLXNwZWNpZmljIE5BTkQgaW5pdGlhbGl6YXRpb24uIFRoZSBmb2xsb3dpbmcgbWVtYmVycyBvZiB0aGUKKyAqIGFyZ3VtZW50IGFyZSBib2FyZC1zcGVjaWZpYzoKKyAqIC0gSU9fQUREUl9SOiBhZGRyZXNzIHRvIHJlYWQgdGhlIDggSS9PIGxpbmVzIG9mIHRoZSBmbGFzaCBkZXZpY2UKKyAqIC0gSU9fQUREUl9XOiBhZGRyZXNzIHRvIHdyaXRlIHRoZSA4IEkvTyBsaW5lcyBvZiB0aGUgZmxhc2ggZGV2aWNlCisgKiAtIGNtZF9jdHJsOiBoYXJkd2FyZXNwZWNpZmljIGZ1bmN0aW9uIGZvciBhY2Nlc2luZyBjb250cm9sLWxpbmVzCisgKiAtIHdhaXRmdW5jOiBoYXJkd2FyZXNwZWNpZmljIGZ1bmN0aW9uIGZvciBhY2Nlc2luZyBkZXZpY2UgcmVhZHkvYnVzeSBsaW5lCisgKiAtIGVjYy5od2N0bDogZnVuY3Rpb24gdG8gZW5hYmxlIChyZXNldCkgaGFyZHdhcmUgZWNjIGdlbmVyYXRvcgorICogLSBlY2MubW9kZTogbW9kZSBvZiBlY2MsIHNlZSBkZWZpbmVzCisgKiAtIGNoaXBfZGVsYXk6IGNoaXAgZGVwZW5kZW50IGRlbGF5IGZvciB0cmFuc2ZlcmluZyBkYXRhIGZyb20gYXJyYXkgdG8KKyAqICAgcmVhZCByZWdzICh0UikKKyAqIC0gb3B0aW9uczogdmFyaW91cyBjaGlwIG9wdGlvbnMuIFRoZXkgY2FuIHBhcnRseSBiZSBzZXQgdG8gaW5mb3JtCisgKiAgIG5hbmRfc2NhbiBhYm91dCBzcGVjaWFsIGZ1bmN0aW9uYWxpdHkuIFNlZSB0aGUgZGVmaW5lcyBmb3IgZnVydGhlcgorICogICBleHBsYW5hdGlvbgorICovCitpbnQgYm9hcmRfbmFuZF9pbml0KHN0cnVjdCBuYW5kX2NoaXAgKm5hbmQpCit7CisJaW50MzJfdCBncG1jX2NvbmZpZyA9IDA7CisJY3MgPSAwOworCisJLyoKKwkgKiB4bG9hZGVyL1Vib290J3MgZ3BtYyBjb25maWd1cmF0aW9uIHdvdWxkIGhhdmUgY29uZmlndXJlZCBHUE1DIGZvcgorCSAqIG5hbmQgdHlwZSBvZiBtZW1vcnkuIFRoZSBmb2xsb3dpbmcgbG9naWMgc2NhbnMgYW5kIGxhdGNoZXMgb24gdG8gdGhlCisJICogZmlyc3QgQ1Mgd2l0aCBOQU5EIHR5cGUgbWVtb3J5LgorCSAqIFRCRDogbmVlZCB0byBtYWtlIHRoaXMgbG9naWMgZ2VuZXJpYyB0byBoYW5kbGUgbXVsdGlwbGUgQ1MgTkFORAorCSAqIGRldmljZXMuCisJICovCisJd2hpbGUgKGNzIDwgR1BNQ19NQVhfQ1MpIHsKKwkJLyoKKwkJICogRWFjaCBHUE1DIHNldCBmb3IgYSBzaW5nbGUgQ1MgaXMgYXQgb2Zmc2V0IDB4MzAKKwkJICogLSBhbHJlYWR5IHJlbWFwcGVkIGZvciB1cworCQkgKi8KKwkJZ3BtY19jc19iYXNlID0gKGdwbWNfY3N4X3QgKikoR1BNQ19DT05GSUdfQ1MwX0JBU0UgKworCQkJCShjcyAqIEdQTUNfQ09ORklHX1dJRFRIKSk7CisJCS8qIENoZWNrIGlmIE5BTkQgdHlwZSBpcyBzZXQgKi8KKwkJaWYgKChyZWFkbCgmZ3BtY19jc19iYXNlLT5jb25maWcxKSAmIDB4QzAwKSA9PQorCQkgICAgIDB4ODAwKSB7CisJCQkvKiBGb3VuZCBpdCEhICovCisJCQlicmVhazsKKwkJfQorCQljcysrOworCX0KKwlpZiAoY3MgPj0gR1BNQ19NQVhfQ1MpIHsKKwkJcHJpbnRmKCJOQU5EOiBVbmFibGUgdG8gZmluZCBOQU5EIHNldHRpbmdzIGluICIKKwkJCSJHUE1DIENvbmZpZ3VyYXRpb24gLSBxdWl0dGluZ1xuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWdwbWNfY29uZmlnID0gcmVhZGwoJmdwbWNfYmFzZS0+Y29uZmlnKTsKKwkvKiBEaXNhYmxlIFdyaXRlIHByb3RlY3QgKi8KKwlncG1jX2NvbmZpZyB8PSAweDEwOworCXdyaXRlbChncG1jX2NvbmZpZywgJmdwbWNfYmFzZS0+Y29uZmlnKTsKKworCW5hbmQtPklPX0FERFJfUiA9ICh2b2lkIF9faW9tZW0gKikmZ3BtY19jc19iYXNlLT5uYW5kX2RhdDsKKwluYW5kLT5JT19BRERSX1cgPSAodm9pZCBfX2lvbWVtICopJmdwbWNfY3NfYmFzZS0+bmFuZF9jbWQ7CisKKwluYW5kLT5jbWRfY3RybCA9IG9tYXBfbmFuZF9od2NvbnRyb2w7CisJbmFuZC0+b3B0aW9ucyA9IE5BTkRfTk9fUEFERElORyB8IE5BTkRfQ0FDSEVQUkcgfCBOQU5EX05PX0FVVE9JTkNSOworCS8qIElmIHdlIGFyZSAxNiBiaXQgZGV2LCBvdXIgZ3BtYyBjb25maWcgdGVsbHMgdXMgdGhhdCAqLworCWlmICgocmVhZGwoZ3BtY19jc19iYXNlKSAmIDB4MzAwMCkgPT0gMHgxMDAwKQorCQluYW5kLT5vcHRpb25zIHw9IE5BTkRfQlVTV0lEVEhfMTY7CisKKwluYW5kLT5jaGlwX2RlbGF5ID0gMTAwOworCS8qIERlZmF1bHQgRUNDIG1vZGUgKi8KKwluYW5kLT5lY2MubW9kZSA9IE5BTkRfRUNDX1NPRlQ7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL01ha2VmaWxlIGIvZXhhbXBsZXMvTWFrZWZpbGUKaW5kZXggYjBhODg1My4uOTI3MDEwZCAxMDA2NDQKLS0tIGEvZXhhbXBsZXMvTWFrZWZpbGUKKysrIGIvZXhhbXBsZXMvTWFrZWZpbGUKQEAgLTMzLDkgKzMzLDEzIEBACiBpZmVxICgkKEJPQVJEKSxvbWFwMjQyMGg0KQogTE9BRF9BRERSID0gMHg4MDMwMDAwMAogZWxzZQoraWZlcSAoJChDUFUpLG9tYXAzKQorTE9BRF9BRERSID0gMHg4MDMwMDAwMAorZWxzZQogTE9BRF9BRERSID0gMHhjMTAwMDAwCiBlbmRpZgogZW5kaWYKK2VuZGlmCiAKIGlmZXEgKCQoQVJDSCksbWlwcykKIExPQURfQUREUiA9IDB4ODAyMDAwMDAgLVQgbWlwcy5sZHMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW14MzEvbXgzMS1yZWdzLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1teDMxL214MzEtcmVncy5oCmluZGV4IGIwNGE3MTguLmU3MzYwNTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW14MzEvbXgzMS1yZWdzLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtbXgzMS9teDMxLXJlZ3MuaApAQCAtMzQsNyArMzQsNyBAQAogI2RlZmluZSBDQ01fUERSMQkoQ0NNX0JBU0UgKyAweDA4KQogI2RlZmluZSBDQ01fUkNTUgkoQ0NNX0JBU0UgKyAweDBjKQogI2RlZmluZSBDQ01fTVBDVEwJKENDTV9CQVNFICsgMHgxMCkKLSNkZWZpbmUgQ0NNX1VQQ1RMCShDQ01fQkFTRSArIDB4MTApCisjZGVmaW5lIENDTV9VUENUTAkoQ0NNX0JBU0UgKyAweDE0KQogI2RlZmluZSBDQ01fU1BDVEwJKENDTV9CQVNFICsgMHgxOCkKICNkZWZpbmUgQ0NNX0NPU1IJKENDTV9CQVNFICsgMHgxQykKICNkZWZpbmUgQ0NNX0NHUjAJKENDTV9CQVNFICsgMHgyMCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAzL2Nsb2Nrcy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcDMvY2xvY2tzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzFhMGNiNgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAzL2Nsb2Nrcy5oCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDYtMjAwOAorICogVGV4YXMgSW5zdHJ1bWVudHMsIDx3d3cudGkuY29tPgorICogUmljaGFyZCBXb29kcnVmZiA8ci13b29kcnVmZjJAdGkuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiAvUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworI2lmbmRlZiBfQ0xPQ0tTX0hfCisjZGVmaW5lIF9DTE9DS1NfSF8KKworI2RlZmluZSBMREVMQVkJCTEyMDAwMDAwCisKKyNkZWZpbmUgUzEyTQkJMTIwMDAwMDAKKyNkZWZpbmUgUzEzTQkJMTMwMDAwMDAKKyNkZWZpbmUgUzE5XzJNCQkxOTIwMDAwMAorI2RlZmluZSBTMjRNCQkyNDAwMDAwMAorI2RlZmluZSBTMjZNCQkyNjAwMDAwMAorI2RlZmluZSBTMzhfNE0JCTM4NDAwMDAwCisKKyNkZWZpbmUgRkNLX0lWQTJfT04JMHgwMDAwMDAwMQorI2RlZmluZSBGQ0tfQ09SRTFfT04JMHgwM2ZmZmUyOQorI2RlZmluZSBJQ0tfQ09SRTFfT04JMHgzZmZmZmZmYgorI2RlZmluZSBJQ0tfQ09SRTJfT04JMHgwMDAwMDAxZgorI2RlZmluZSBGQ0tfV0tVUF9PTgkweDAwMDAwMGU5CisjZGVmaW5lIElDS19XS1VQX09OCTB4MDAwMDAwM2YKKyNkZWZpbmUgRkNLX0RTU19PTgkweDAwMDAwMDA1CisjZGVmaW5lIElDS19EU1NfT04JMHgwMDAwMDAwMQorI2RlZmluZSBGQ0tfQ0FNX09OCTB4MDAwMDAwMDEKKyNkZWZpbmUgSUNLX0NBTV9PTgkweDAwMDAwMDAxCisjZGVmaW5lIEZDS19QRVJfT04JMHgwMDAzZmZmZgorI2RlZmluZSBJQ0tfUEVSX09OCTB4MDAwM2ZmZmYKKworLyogVXNlZCB0byBpbmRleCBpbnRvIERQTEwgcGFyYW1ldGVyIHRhYmxlcyAqLwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGludCBtOworCXVuc2lnbmVkIGludCBuOworCXVuc2lnbmVkIGludCBmc2VsOworCXVuc2lnbmVkIGludCBtMjsKK30gZHBsbF9wYXJhbTsKKworLyogRm9sbG93aW5nIGZ1bmN0aW9ucyBhcmUgZXhwb3J0ZWQgZnJvbSBsb3dsZXZlbF9pbml0LlMgKi8KK2V4dGVybiBkcGxsX3BhcmFtICpnZXRfbXB1X2RwbGxfcGFyYW0odm9pZCk7CitleHRlcm4gZHBsbF9wYXJhbSAqZ2V0X2l2YV9kcGxsX3BhcmFtKHZvaWQpOworZXh0ZXJuIGRwbGxfcGFyYW0gKmdldF9jb3JlX2RwbGxfcGFyYW0odm9pZCk7CitleHRlcm4gZHBsbF9wYXJhbSAqZ2V0X3Blcl9kcGxsX3BhcmFtKHZvaWQpOworCitleHRlcm4gdm9pZCAqX2VuZF92ZWN0LCAqX3N0YXJ0OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAzL2Nsb2Nrc19vbWFwMy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcDMvY2xvY2tzX29tYXAzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjYxNDA3YgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAzL2Nsb2Nrc19vbWFwMy5oCkBAIC0wLDAgKzEsMjg1IEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDA2LTIwMDgKKyAqIFRleGFzIEluc3RydW1lbnRzLCA8d3d3LnRpLmNvbT4KKyAqIFJpY2hhcmQgV29vZHJ1ZmYgPHItd29vZHJ1ZmYyQHRpLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgL1BVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKyNpZm5kZWYgX0NMT0NLU19PTUFQM19IXworI2RlZmluZSBfQ0xPQ0tTX09NQVAzX0hfCisKKyNkZWZpbmUgUExMX1NUT1AJCTEJLyogUEVSICYgSVZBICovCisjZGVmaW5lIFBMTF9MT1dfUE9XRVJfQllQQVNTCTUJLyogTVBVLCBJVkEgJiBDT1JFICovCisjZGVmaW5lIFBMTF9GQVNUX1JFTE9DS19CWVBBU1MJNgkvKiBDT1JFICovCisjZGVmaW5lIFBMTF9MT0NLCQk3CS8qIE1QVSwgSVZBLCBDT1JFICYgUEVSICovCisKKy8qCisgKiBUaGUgZm9sbG93aW5nIGNvbmZpZ3VyYXRpb25zIGFyZSBPUFAgYW5kIFN5c0NsayB2YWx1ZSBpbmRlcGVuZGFudAorICogYW5kIGhlbmNlIGFyZSBkZWZpbmVkIGhlcmUuIEFsbCB0aGUgb3RoZXIgRFBMTCByZWxhdGVkIHZhbHVlcyBhcmUKKyAqIHRhYnVsYXRlZCBpbiBsb3dsZXZlbF9pbml0LlMuCisgKi8KKworLyogQ09SRSBEUExMICovCisjZGVmaW5lIENPUkVfTTNYMgkyCS8qIDMzMk1IeiA6IENNX0NMS1NFTDFfRU1VICovCisjZGVmaW5lIENPUkVfU1NJX0RJVgkzCS8qIDIyMU1IeiA6IENNX0NMS1NFTF9DT1JFICovCisjZGVmaW5lIENPUkVfRlVTQl9ESVYJMgkvKiA0MS41TUh6OiAqLworI2RlZmluZSBDT1JFX0w0X0RJVgkyCS8qIDgzTUh6ICA6IEw0ICovCisjZGVmaW5lIENPUkVfTDNfRElWCTIJLyogMTY2TUh6IDogTDMge0REUn0gKi8KKyNkZWZpbmUgR0ZYX0RJVgkJMgkvKiA4M01IeiAgOiBDTV9DTEtTRUxfR0ZYICovCisjZGVmaW5lIFdLVVBfUlNNCTIJLyogNDEuNU1IejogQ01fQ0xLU0VMX1dLVVAgKi8KKworLyogUEVSIERQTEwgKi8KKyNkZWZpbmUgUEVSX002WDIJMwkvKiAyODhNSHo6IENNX0NMS1NFTDFfRU1VICovCisjZGVmaW5lIFBFUl9NNVgyCTQJLyogMjE2TUh6OiBDTV9DTEtTRUxfQ0FNICovCisjZGVmaW5lIFBFUl9NNFgyCTIJLyogNDMyTUh6OiBDTV9DTEtTRUxfRFNTLWRzczEgKi8KKyNkZWZpbmUgUEVSX00zWDIJMTYJLyogNTRNSHogOiBDTV9DTEtTRUxfRFNTLXR2ICovCisKKyNkZWZpbmUgQ0xTRUwxX0VNVV9WQUwgKChDT1JFX00zWDIgPDwgMTYpIHwgKFBFUl9NNlgyIDw8IDI0KSB8ICgweDBBNTApKQorCisvKiBNUFUgRFBMTCAqLworCisjZGVmaW5lIE1QVV9NXzEyX0VTMQkJMHgwRkUKKyNkZWZpbmUgTVBVX05fMTJfRVMxCQkweDA3CisjZGVmaW5lIE1QVV9GU0VMXzEyX0VTMQkJMHgwNQorI2RlZmluZSBNUFVfTTJfMTJfRVMxCQkweDAxCisKKyNkZWZpbmUgTVBVX01fMTJfRVMyCQkweDBGQQorI2RlZmluZSBNUFVfTl8xMl9FUzIJCTB4MDUKKyNkZWZpbmUgTVBVX0ZTRUxfMTJfRVMyCQkweDA3CisjZGVmaW5lIE1QVV9NMl9FUzIJCTB4MDEKKworI2RlZmluZSBNUFVfTV8xMgkJMHgwODUKKyNkZWZpbmUgTVBVX05fMTIJCTB4MDUKKyNkZWZpbmUgTVBVX0ZTRUxfMTIJCTB4MDcKKyNkZWZpbmUgTVBVX00yXzEyCQkweDAxCisKKyNkZWZpbmUgTVBVX01fMTNfRVMxCQkweDE3RAorI2RlZmluZSBNUFVfTl8xM19FUzEJCTB4MEMKKyNkZWZpbmUgTVBVX0ZTRUxfMTNfRVMxCQkweDAzCisjZGVmaW5lIE1QVV9NMl8xM19FUzEJCTB4MDEKKworI2RlZmluZSBNUFVfTV8xM19FUzIJCTB4MUY0CisjZGVmaW5lIE1QVV9OXzEzX0VTMgkJMHgwQworI2RlZmluZSBNUFVfRlNFTF8xM19FUzIJCTB4MDMKKyNkZWZpbmUgTVBVX00yXzEzX0VTMgkJMHgwMQorCisjZGVmaW5lIE1QVV9NXzEzCQkweDEwQQorI2RlZmluZSBNUFVfTl8xMwkJMHgwQworI2RlZmluZSBNUFVfRlNFTF8xMwkJMHgwMworI2RlZmluZSBNUFVfTTJfMTMJCTB4MDEKKworI2RlZmluZSBNUFVfTV8xOVAyX0VTMQkJMHgxNzkKKyNkZWZpbmUgTVBVX05fMTlQMl9FUzEJCTB4MTIKKyNkZWZpbmUgTVBVX0ZTRUxfMTlQMl9FUzEJMHgwNAorI2RlZmluZSBNUFVfTTJfMTlQMl9FUzEJCTB4MDEKKworI2RlZmluZSBNUFVfTV8xOVAyX0VTMgkJMHgyNzEKKyNkZWZpbmUgTVBVX05fMTlQMl9FUzIJCTB4MTcKKyNkZWZpbmUgTVBVX0ZTRUxfMTlQMl9FUzIJMHgwMworI2RlZmluZSBNUFVfTTJfMTlQMl9FUzIJCTB4MDEKKworI2RlZmluZSBNUFVfTV8xOVAyCQkweDE0QworI2RlZmluZSBNUFVfTl8xOVAyCQkweDE3CisjZGVmaW5lIE1QVV9GU0VMXzE5UDIJCTB4MDMKKyNkZWZpbmUgTVBVX00yXzE5UDIJCTB4MDEKKworI2RlZmluZSBNUFVfTV8yNl9FUzEJCTB4MTdECisjZGVmaW5lIE1QVV9OXzI2X0VTMQkJMHgxOQorI2RlZmluZSBNUFVfRlNFTF8yNl9FUzEJCTB4MDMKKyNkZWZpbmUgTVBVX00yXzI2X0VTMQkJMHgwMQorCisjZGVmaW5lIE1QVV9NXzI2X0VTMgkJMHgwRkEKKyNkZWZpbmUgTVBVX05fMjZfRVMyCQkweDBDCisjZGVmaW5lIE1QVV9GU0VMXzI2X0VTMgkJMHgwNworI2RlZmluZSBNUFVfTTJfMjZfRVMyCQkweDAxCisKKyNkZWZpbmUgTVBVX01fMjYJCTB4MDg1CisjZGVmaW5lIE1QVV9OXzI2CQkweDBDCisjZGVmaW5lIE1QVV9GU0VMXzI2CQkweDA3CisjZGVmaW5lIE1QVV9NMl8yNgkJMHgwMQorCisjZGVmaW5lIE1QVV9NXzM4UDRfRVMxCQkweDFGQQorI2RlZmluZSBNUFVfTl8zOFA0X0VTMQkJMHgzMgorI2RlZmluZSBNUFVfRlNFTF8zOFA0X0VTMQkweDAzCisjZGVmaW5lIE1QVV9NMl8zOFA0X0VTMQkJMHgwMQorCisjZGVmaW5lIE1QVV9NXzM4UDRfRVMyCQkweDI3MQorI2RlZmluZSBNUFVfTl8zOFA0X0VTMgkJMHgyRgorI2RlZmluZSBNUFVfRlNFTF8zOFA0X0VTMgkweDAzCisjZGVmaW5lIE1QVV9NMl8zOFA0X0VTMgkJMHgwMQorCisjZGVmaW5lIE1QVV9NXzM4UDQJCTB4MTRDCisjZGVmaW5lIE1QVV9OXzM4UDQJCTB4MkYKKyNkZWZpbmUgTVBVX0ZTRUxfMzhQNAkJMHgwMworI2RlZmluZSBNUFVfTTJfMzhQNAkJMHgwMQorCisvKiBJVkEgRFBMTCAqLworCisjZGVmaW5lIElWQV9NXzEyX0VTMQkJMHgwN0QKKyNkZWZpbmUgSVZBX05fMTJfRVMxCQkweDA1CisjZGVmaW5lIElWQV9GU0VMXzEyX0VTMQkJMHgwNworI2RlZmluZSBJVkFfTTJfMTJfRVMxCQkweDAxCisKKyNkZWZpbmUgSVZBX01fMTJfRVMyCQkweDBCNAorI2RlZmluZSBJVkFfTl8xMl9FUzIJCTB4MDUKKyNkZWZpbmUgSVZBX0ZTRUxfMTJfRVMyCQkweDA3CisjZGVmaW5lIElWQV9NMl8xMl9FUzIJCTB4MDEKKworI2RlZmluZSBJVkFfTV8xMgkJMHgwODUKKyNkZWZpbmUgSVZBX05fMTIJCTB4MDUKKyNkZWZpbmUgSVZBX0ZTRUxfMTIJCTB4MDcKKyNkZWZpbmUgSVZBX00yXzEyCQkweDAxCisKKyNkZWZpbmUgSVZBX01fMTNfRVMxCQkweDBGQQorI2RlZmluZSBJVkFfTl8xM19FUzEJCTB4MEMKKyNkZWZpbmUgSVZBX0ZTRUxfMTNfRVMxCQkweDAzCisjZGVmaW5lIElWQV9NMl8xM19FUzEJCTB4MDEKKworI2RlZmluZSBJVkFfTV8xM19FUzIJCTB4MTY4CisjZGVmaW5lIElWQV9OXzEzX0VTMgkJMHgwQworI2RlZmluZSBJVkFfRlNFTF8xM19FUzIJCTB4MDMKKyNkZWZpbmUgSVZBX00yXzEzX0VTMgkJMHgwMQorCisjZGVmaW5lIElWQV9NXzEzCQkweDEwQQorI2RlZmluZSBJVkFfTl8xMwkJMHgwQworI2RlZmluZSBJVkFfRlNFTF8xMwkJMHgwMworI2RlZmluZSBJVkFfTTJfMTMJCTB4MDEKKworI2RlZmluZSBJVkFfTV8xOVAyX0VTMQkJMHgwODIKKyNkZWZpbmUgSVZBX05fMTlQMl9FUzEJCTB4MDkKKyNkZWZpbmUgSVZBX0ZTRUxfMTlQMl9FUzEJMHgwNworI2RlZmluZSBJVkFfTTJfMTlQMl9FUzEJCTB4MDEKKworI2RlZmluZSBJVkFfTV8xOVAyX0VTMgkJMHgwRTEKKyNkZWZpbmUgSVZBX05fMTlQMl9FUzIJCTB4MEIKKyNkZWZpbmUgSVZBX0ZTRUxfMTlQMl9FUzIJMHgwNgorI2RlZmluZSBJVkFfTTJfMTlQMl9FUzIJCTB4MDEKKworI2RlZmluZSBJVkFfTV8xOVAyCQkweDE0QworI2RlZmluZSBJVkFfTl8xOVAyCQkweDE3CisjZGVmaW5lIElWQV9GU0VMXzE5UDIJCTB4MDMKKyNkZWZpbmUgSVZBX00yXzE5UDIJCTB4MDEKKworI2RlZmluZSBJVkFfTV8yNl9FUzEJCTB4MDdECisjZGVmaW5lIElWQV9OXzI2X0VTMQkJMHgwQworI2RlZmluZSBJVkFfRlNFTF8yNl9FUzEJCTB4MDcKKyNkZWZpbmUgSVZBX00yXzI2X0VTMQkJMHgwMQorCisjZGVmaW5lIElWQV9NXzI2X0VTMgkJMHgwQjQKKyNkZWZpbmUgSVZBX05fMjZfRVMyCQkweDBDCisjZGVmaW5lIElWQV9GU0VMXzI2X0VTMgkJMHgwNworI2RlZmluZSBJVkFfTTJfMjZfRVMyCQkweDAxCisKKyNkZWZpbmUgSVZBX01fMjYJCTB4MDg1CisjZGVmaW5lIElWQV9OXzI2CQkweDBDCisjZGVmaW5lIElWQV9GU0VMXzI2CQkweDA3CisjZGVmaW5lIElWQV9NMl8yNgkJMHgwMQorCisjZGVmaW5lIElWQV9NXzM4UDRfRVMxCQkweDEzRgorI2RlZmluZSBJVkFfTl8zOFA0X0VTMQkJMHgzMAorI2RlZmluZSBJVkFfRlNFTF8zOFA0X0VTMQkweDAzCisjZGVmaW5lIElWQV9NMl8zOFA0X0VTMQkJMHgwMQorCisjZGVmaW5lIElWQV9NXzM4UDRfRVMyCQkweDBFMQorI2RlZmluZSBJVkFfTl8zOFA0X0VTMgkJMHgxNworI2RlZmluZSBJVkFfRlNFTF8zOFA0X0VTMgkweDA2CisjZGVmaW5lIElWQV9NMl8zOFA0X0VTMgkJMHgwMQorCisjZGVmaW5lIElWQV9NXzM4UDQJCTB4MTRDCisjZGVmaW5lIElWQV9OXzM4UDQJCTB4MkYKKyNkZWZpbmUgSVZBX0ZTRUxfMzhQNAkJMHgwMworI2RlZmluZSBJVkFfTTJfMzhQNAkJMHgwMQorCisvKiBDT1JFIERQTEwgKi8KKworI2RlZmluZSBDT1JFX01fMTIJCTB4QTYKKyNkZWZpbmUgQ09SRV9OXzEyCQkweDA1CisjZGVmaW5lIENPUkVfRlNFTF8xMgkJMHgwNworI2RlZmluZSBDT1JFX00yXzEyCQkweDAxCS8qIE0zIG9mIDIgKi8KKworI2RlZmluZSBDT1JFX01fMTJfRVMxCQkweDE5RgorI2RlZmluZSBDT1JFX05fMTJfRVMxCQkweDBFCisjZGVmaW5lIENPUkVfRlNMXzEyX0VTMQkJMHgwMworI2RlZmluZSBDT1JFX00yXzEyX0VTMQkJMHgxCS8qIE0zIG9mIDIgKi8KKworI2RlZmluZSBDT1JFX01fMTMJCTB4MTRDCisjZGVmaW5lIENPUkVfTl8xMwkJMHgwQworI2RlZmluZSBDT1JFX0ZTRUxfMTMJCTB4MDMKKyNkZWZpbmUgQ09SRV9NMl8xMwkJMHgwMQkvKiBNMyBvZiAyICovCisKKyNkZWZpbmUgQ09SRV9NXzEzX0VTMQkJMHgxQjIKKyNkZWZpbmUgQ09SRV9OXzEzX0VTMQkJMHgxMAorI2RlZmluZSBDT1JFX0ZTTF8xM19FUzEJCTB4MDMKKyNkZWZpbmUgQ09SRV9NMl8xM19FUzEJCTB4MDEJLyogTTMgb2YgMiAqLworCisjZGVmaW5lIENPUkVfTV8xOVAyCQkweDE5RgorI2RlZmluZSBDT1JFX05fMTlQMgkJMHgxNworI2RlZmluZSBDT1JFX0ZTRUxfMTlQMgkJMHgwMworI2RlZmluZSBDT1JFX00yXzE5UDIJCTB4MDEJLyogTTMgb2YgMiAqLworCisjZGVmaW5lIENPUkVfTV8xOVAyX0VTMQkJMHgxOUYKKyNkZWZpbmUgQ09SRV9OXzE5UDJfRVMxCQkweDE3CisjZGVmaW5lIENPUkVfRlNMXzE5UDJfRVMxCTB4MDMKKyNkZWZpbmUgQ09SRV9NMl8xOVAyX0VTMQkweDAxCS8qIE0zIG9mIDIgKi8KKworI2RlZmluZSBDT1JFX01fMjYJCTB4QTYKKyNkZWZpbmUgQ09SRV9OXzI2CQkweDBDCisjZGVmaW5lIENPUkVfRlNFTF8yNgkJMHgwNworI2RlZmluZSBDT1JFX00yXzI2CQkweDAxCS8qIE0zIG9mIDIgKi8KKworI2RlZmluZSBDT1JFX01fMjZfRVMxCQkweDFCMgorI2RlZmluZSBDT1JFX05fMjZfRVMxCQkweDIxCisjZGVmaW5lIENPUkVfRlNMXzI2X0VTMQkJMHgwMworI2RlZmluZSBDT1JFX00yXzI2X0VTMQkJMHgwMQkvKiBNMyBvZiAyICovCisKKyNkZWZpbmUgQ09SRV9NXzM4UDQJCTB4MTlGCisjZGVmaW5lIENPUkVfTl8zOFA0CQkweDJGCisjZGVmaW5lIENPUkVfRlNFTF8zOFA0CQkweDAzCisjZGVmaW5lIENPUkVfTTJfMzhQNAkJMHgwMQkvKiBNMyBvZiAyICovCisKKyNkZWZpbmUgQ09SRV9NXzM4UDRfRVMxCQkweDE5RgorI2RlZmluZSBDT1JFX05fMzhQNF9FUzEJCTB4MkYKKyNkZWZpbmUgQ09SRV9GU0xfMzhQNF9FUzEJMHgwMworI2RlZmluZSBDT1JFX00yXzM4UDRfRVMxCTB4MDEJLyogTTMgb2YgMiAqLworCisvKiBQRVIgRFBMTCAqLworCisjZGVmaW5lIFBFUl9NXzEyCQkweEQ4CisjZGVmaW5lIFBFUl9OXzEyCQkweDA1CisjZGVmaW5lIFBFUl9GU0VMXzEyCQkweDA3CisjZGVmaW5lIFBFUl9NMl8xMgkJMHgwOQorCisjZGVmaW5lIFBFUl9NXzEzCQkweDFCMAorI2RlZmluZSBQRVJfTl8xMwkJMHgwQworI2RlZmluZSBQRVJfRlNFTF8xMwkJMHgwMworI2RlZmluZSBQRVJfTTJfMTMJCTB4MDkKKworI2RlZmluZSBQRVJfTV8xOVAyCQkweEUxCisjZGVmaW5lIFBFUl9OXzE5UDIJCTB4MDkKKyNkZWZpbmUgUEVSX0ZTRUxfMTlQMgkJMHgwNworI2RlZmluZSBQRVJfTTJfMTlQMgkJMHgwOQorCisjZGVmaW5lIFBFUl9NXzI2CQkweEQ4CisjZGVmaW5lIFBFUl9OXzI2CQkweDBDCisjZGVmaW5lIFBFUl9GU0VMXzI2CQkweDA3CisjZGVmaW5lIFBFUl9NMl8yNgkJMHgwOQorCisjZGVmaW5lIFBFUl9NXzM4UDQJCTB4RTEKKyNkZWZpbmUgUEVSX05fMzhQNAkJMHgxMworI2RlZmluZSBQRVJfRlNFTF8zOFA0CQkweDA3CisjZGVmaW5lIFBFUl9NMl8zOFA0CQkweDA5CisKKyNlbmRpZgkvKiBlbmRpZiBfQ0xPQ0tTX09NQVAzX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwMy9jcHUuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAzL2NwdS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5YzBiMzYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwMy9jcHUuaApAQCAtMCwwICsxLDQwMiBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwNi0yMDA4CisgKiBUZXhhcyBJbnN0cnVtZW50cywgPHd3dy50aS5jb20+CisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKgorICovCisKKyNpZm5kZWYgX0NQVV9ICisjZGVmaW5lIF9DUFVfSAorCisvKiBSZWdpc3RlciBvZmZzZXRzIG9mIGNvbW1vbiBtb2R1bGVzICovCisvKiBDb250cm9sICovCisjaWZuZGVmIF9fQVNTRU1CTFlfXwordHlwZWRlZiBzdHJ1Y3QgY3RybCB7CisJdW5zaWduZWQgY2hhciByZXMxWzB4QzBdOworCXVuc2lnbmVkIHNob3J0IGdwbWNfbmFkdl9hbGU7CS8qIDB4QzAgKi8KKwl1bnNpZ25lZCBzaG9ydCBncG1jX25vZTsJLyogMHhDMiAqLworCXVuc2lnbmVkIHNob3J0IGdwbWNfbndlOwkvKiAweEM0ICovCisJdW5zaWduZWQgY2hhciByZXMyWzB4MjJBXTsKKwl1bnNpZ25lZCBpbnQgc3RhdHVzOwkJLyogMHgyRjAgKi8KK30gY3RybF90OworI2Vsc2UgLyogX19BU1NFTUJMWV9fICovCisjZGVmaW5lIENPTlRST0xfU1RBVFVTCQkweDJGMAorI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworCisvKiBkZXZpY2UgdHlwZSAqLworI2RlZmluZSBERVZJQ0VfTUFTSwkJKDB4NyA8PCA4KQorI2RlZmluZSBTWVNCT09UX01BU0sJCTB4MUYKKyNkZWZpbmUgVFNUX0RFVklDRQkJMHgwCisjZGVmaW5lIEVNVV9ERVZJQ0UJCTB4MQorI2RlZmluZSBIU19ERVZJQ0UJCTB4MgorI2RlZmluZSBHUF9ERVZJQ0UJCTB4MworCisvKiBHUE1DIENTMy9jczQvY3M2IG5vdCBhdmFsaWFibGUgKi8KKyNkZWZpbmUgR1BNQ19CQVNFCQkoT01BUDM0WFhfR1BNQ19CQVNFKQorI2RlZmluZSBHUE1DX0NPTkZJR19DUzAJCTB4NjAKKyNkZWZpbmUgR1BNQ19DT05GSUdfQ1M2CQkweDE1MAorI2RlZmluZSBHUE1DX0NPTkZJR19DUzBfQkFTRQkoR1BNQ19CQVNFICsgR1BNQ19DT05GSUdfQ1MwKQorI2RlZmluZSBHUE1DX0NPTkZJR19DUzZfQkFTRQkoR1BNQ19CQVNFICsgR1BNQ19DT05GSUdfQ1M2KQorI2RlZmluZSBHUE1DX0NPTkZJR19XUAkJMHgxMAorCisjZGVmaW5lIEdQTUNfQ09ORklHX1dJRFRICTB4MzAKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KK3R5cGVkZWYgc3RydWN0IGdwbWMgeworCXVuc2lnbmVkIGNoYXIgcmVzMVsweDEwXTsKKwl1bnNpZ25lZCBpbnQgc3lzY29uZmlnOwkJLyogMHgxMCAqLworCXVuc2lnbmVkIGNoYXIgcmVzMlsweDRdOworCXVuc2lnbmVkIGludCBpcnFzdGF0dXM7CQkvKiAweDE4ICovCisJdW5zaWduZWQgaW50IGlycWVuYWJsZTsgCS8qIDB4MUMgKi8KKwl1bnNpZ25lZCBjaGFyIHJlczNbMHgyMF07CisJdW5zaWduZWQgaW50IHRpbWVvdXRfY29udHJvbDsgCS8qIDB4NDAgKi8KKwl1bnNpZ25lZCBjaGFyIHJlczRbMHhDXTsKKwl1bnNpZ25lZCBpbnQgY29uZmlnOwkJLyogMHg1MCAqLworCXVuc2lnbmVkIGludCBzdGF0dXM7CQkvKiAweDU0ICovCisJdW5zaWduZWQgY2hhciByZXM1WzB4MTlDXTsKKwl1bnNpZ25lZCBpbnQgZWNjX2NvbmZpZzsJLyogMHgxRjQgKi8KKwl1bnNpZ25lZCBpbnQgZWNjX2NvbnRyb2w7CS8qIDB4MUY4ICovCisJdW5zaWduZWQgaW50IGVjY19zaXplX2NvbmZpZzsJLyogMHgxRkMgKi8KKwl1bnNpZ25lZCBpbnQgZWNjMV9yZXN1bHQ7CS8qIDB4MjAwICovCisJdW5zaWduZWQgaW50IGVjYzJfcmVzdWx0OwkvKiAweDIwNCAqLworCXVuc2lnbmVkIGludCBlY2MzX3Jlc3VsdDsJLyogMHgyMDggKi8KKwl1bnNpZ25lZCBpbnQgZWNjNF9yZXN1bHQ7CS8qIDB4MjBDICovCisJdW5zaWduZWQgaW50IGVjYzVfcmVzdWx0OwkvKiAweDIxMCAqLworCXVuc2lnbmVkIGludCBlY2M2X3Jlc3VsdDsJLyogMHgyMTQgKi8KKwl1bnNpZ25lZCBpbnQgZWNjN19yZXN1bHQ7CS8qIDB4MjE4ICovCisJdW5zaWduZWQgaW50IGVjYzhfcmVzdWx0OwkvKiAweDIxQyAqLworCXVuc2lnbmVkIGludCBlY2M5X3Jlc3VsdDsJLyogMHgyMjAgKi8KK30gZ3BtY190OworCit0eXBlZGVmIHN0cnVjdCBncG1jX2NzeCB7CisJdW5zaWduZWQgaW50IGNvbmZpZzE7CQkvKiAweDAwICovCisJdW5zaWduZWQgaW50IGNvbmZpZzI7CQkvKiAweDA0ICovCisJdW5zaWduZWQgaW50IGNvbmZpZzM7CQkvKiAweDA4ICovCisJdW5zaWduZWQgaW50IGNvbmZpZzQ7CQkvKiAweDBDICovCisJdW5zaWduZWQgaW50IGNvbmZpZzU7CQkvKiAweDEwICovCisJdW5zaWduZWQgaW50IGNvbmZpZzY7CQkvKiAweDE0ICovCisJdW5zaWduZWQgaW50IGNvbmZpZzc7CQkvKiAweDE4ICovCisJdW5zaWduZWQgaW50IG5hbmRfY21kOwkJLyogMHgxQyAqLworCXVuc2lnbmVkIGludCBuYW5kX2FkcjsJCS8qIDB4MjAgKi8KKwl1bnNpZ25lZCBpbnQgbmFuZF9kYXQ7CQkvKiAweDI0ICovCit9IGdwbWNfY3N4X3Q7CisjZWxzZSAvKiBfX0FTU0VNQkxZX18gKi8KKyNkZWZpbmUgR1BNQ19DT05GSUcxCQkweDAwCisjZGVmaW5lIEdQTUNfQ09ORklHMgkJMHgwNAorI2RlZmluZSBHUE1DX0NPTkZJRzMJCTB4MDgKKyNkZWZpbmUgR1BNQ19DT05GSUc0CQkweDBDCisjZGVmaW5lIEdQTUNfQ09ORklHNQkJMHgxMAorI2RlZmluZSBHUE1DX0NPTkZJRzYJCTB4MTQKKyNkZWZpbmUgR1BNQ19DT05GSUc3CQkweDE4CisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisKKy8qIEdQTUMgTWFwcGluZyAqLworI2RlZmluZSBGTEFTSF9CQVNFCQkweDEwMDAwMDAwCS8qIE5PUiBmbGFzaCwgKi8KKwkJCQkJCS8qIGFsaWduZWQgdG8gMjU2IE1lZyAqLworI2RlZmluZSBGTEFTSF9CQVNFX1NEUFYxCTB4MDQwMDAwMDAJLyogTk9SIGZsYXNoLCAqLworCQkJCQkJLyogYWxpZ25lZCB0byA2NCBNZWcgKi8KKyNkZWZpbmUgRkxBU0hfQkFTRV9TRFBWMgkweDEwMDAwMDAwCS8qIE5PUiBmbGFzaCwgKi8KKwkJCQkJCS8qIGFsaWduZWQgdG8gMjU2IE1lZyAqLworI2RlZmluZSBERUJVR19CQVNFCQkweDA4MDAwMDAwCS8qIGRlYnVnIGJvYXJkICovCisjZGVmaW5lIE5BTkRfQkFTRQkJMHgzMDAwMDAwMAkvKiBOQU5EIGFkZHIgKi8KKwkJCQkJCS8qIChhY3R1YWwgc2l6ZSBzbWFsbCBwb3J0KSAqLworI2RlZmluZSBQSVNNTzJfQkFTRQkJMHgxODAwMDAwMAkvKiBQSVNNTzIgQ1MxLzIgKi8KKyNkZWZpbmUgT05FTkFORF9NQVAJCTB4MjAwMDAwMDAJLyogT25lTmFuZCBhZGRyICovCisJCQkJCQkvKiAoYWN0dWFsIHNpemUgc21hbGwgcG9ydCkgKi8KKy8qIFNNUyAqLworI2lmbmRlZiBfX0FTU0VNQkxZX18KK3R5cGVkZWYgc3RydWN0IHNtcyB7CisJdW5zaWduZWQgY2hhciByZXMxWzB4MTBdOworCXVuc2lnbmVkIGludCBzeXNjb25maWc7CQkvKiAweDEwICovCisJdW5zaWduZWQgY2hhciByZXMyWzB4MzRdOworCXVuc2lnbmVkIGludCByZ19hdHQwOwkJLyogMHg0OCAqLworCXVuc2lnbmVkIGNoYXIgcmVzM1sweDg0XTsKKwl1bnNpZ25lZCBpbnQgY2xhc3NfYXJiMDsJLyogMHhEMCAqLworfSBzbXNfdDsKKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KKworI2RlZmluZSBCVVJTVENPTVBMRVRFX0dST1VQNwkoMHgxIDw8IDMxKQorCisvKiBTRFJDICovCisjaWZuZGVmIF9fQVNTRU1CTFlfXwordHlwZWRlZiBzdHJ1Y3Qgc2RyY19jcyB7CisJdW5zaWduZWQgaW50IG1jZmc7CQkvKiAweDgwIHx8IDB4QjAgKi8KKwl1bnNpZ25lZCBpbnQgbXI7CQkvKiAweDg0IHx8IDB4QjQgKi8KKwl1bnNpZ25lZCBjaGFyIHJlczFbMHg0XTsKKwl1bnNpZ25lZCBpbnQgZW1yMjsJCS8qIDB4OEMgfHwgMHhCQyAqLworCXVuc2lnbmVkIGNoYXIgcmVzMlsweDE0XTsKKwl1bnNpZ25lZCBpbnQgcmZyX2N0cmw7CQkvKiAweDg0IHx8IDB4RDQgKi8KKwl1bnNpZ25lZCBpbnQgbWFudWFsOwkJLyogMHhBOCB8fCAweEQ4ICovCisJdW5zaWduZWQgY2hhciByZXMzWzB4NF07Cit9IHNkcmNfY3NfdDsKKwordHlwZWRlZiBzdHJ1Y3Qgc2RyY19hY3RpbSB7CisJdW5zaWduZWQgaW50IGN0cmxhOwkJLyogMHg5QyB8fCAweEM0ICovCisJdW5zaWduZWQgaW50IGN0cmxiOwkJLyogMHhBMCB8fCAweEM4ICovCit9IHNkcmNfYWN0aW1fdDsKKwordHlwZWRlZiBzdHJ1Y3Qgc2RyYyB7CisJdW5zaWduZWQgY2hhciByZXMxWzB4MTBdOworCXVuc2lnbmVkIGludCBzeXNjb25maWc7CQkvKiAweDEwICovCisJdW5zaWduZWQgaW50IHN0YXR1czsJCS8qIDB4MTQgKi8KKwl1bnNpZ25lZCBjaGFyIHJlczJbMHgyOF07CisJdW5zaWduZWQgaW50IGNzX2NmZzsJCS8qIDB4NDAgKi8KKwl1bnNpZ25lZCBpbnQgc2hhcmluZzsJCS8qIDB4NDQgKi8KKwl1bnNpZ25lZCBjaGFyIHJlczNbMHgxOF07CisJdW5zaWduZWQgaW50IGRsbGFfY3RybDsJCS8qIDB4NjAgKi8KKwl1bnNpZ25lZCBpbnQgZGxsYV9zdGF0dXM7CS8qIDB4NjQgKi8KKwl1bnNpZ25lZCBpbnQgZGxsYl9jdHJsOwkJLyogMHg2OCAqLworCXVuc2lnbmVkIGludCBkbGxiX3N0YXR1czsJLyogMHg2QyAqLworCXVuc2lnbmVkIGludCBwb3dlcjsJCS8qIDB4NzAgKi8KKwl1bnNpZ25lZCBjaGFyIHJlczRbMHhDXTsKKwlzZHJjX2NzX3QgY3NbMl07CQkvKiAweDgwIHx8IDB4QjAgKi8KK30gc2RyY190OworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworCisjZGVmaW5lIERMTFBIQVNFXzkwCQkoMHgxIDw8IDEpCisjZGVmaW5lIExPQURETEwJCQkoMHgxIDw8IDIpCisjZGVmaW5lIEVOQURMTAkJCSgweDEgPDwgMykKKyNkZWZpbmUgRExMX0RFTEFZX01BU0sJCTB4RkYwMAorI2RlZmluZSBETExfTk9fRklMVEVSX01BU0sJKCgweDEgPDwgOSkgfCAoMHgxIDw8IDgpKQorCisjZGVmaW5lIFBBR0VQT0xJQ1lfSElHSAkJKDB4MSA8PCAwKQorI2RlZmluZSBTUkZST05SRVNFVAkJKDB4MSA8PCA3KQorI2RlZmluZSBXQUtFVVBQUk9DCQkoMHgxIDw8IDI2KQorCisjZGVmaW5lIEREUl9TRFJBTQkJKDB4MSA8PCAwKQorI2RlZmluZSBERUVQUEQJCQkoMHgxIDw8IDMpCisjZGVmaW5lIEIzMk5PVDE2CQkoMHgxIDw8IDQpCisjZGVmaW5lIEJBTktBTExPQ0FUSU9OCQkoMHgyIDw8IDYpCisjZGVmaW5lIFJBTVNJWkVfMTI4CQkoMHg0MCA8PCA4KSAvKiBSQU0gc2l6ZSBpbiAyTUIgY2h1bmtzICovCisjZGVmaW5lIEFERFJNVVhMRUdBQ1kJCSgweDEgPDwgMTkpCisjZGVmaW5lIENBU1dJRFRIXzEwQklUUwkJKDB4NSA8PCAyMCkKKyNkZWZpbmUgUkFTV0lEVEhfMTNCSVRTCQkoMHgyIDw8IDI0KQorI2RlZmluZSBCVVJTVExFTkdUSDQJCSgweDIgPDwgMCkKKyNkZWZpbmUgQ0FTTDMJCQkoMHgzIDw8IDQpCisjZGVmaW5lIFNEUkNfQUNUSU1fQ1RSTDBfQkFTRQkoT01BUDM0WFhfU0RSQ19CQVNFICsgMHg5QykKKyNkZWZpbmUgU0RSQ19BQ1RJTV9DVFJMMV9CQVNFCShPTUFQMzRYWF9TRFJDX0JBU0UgKyAweEM0KQorI2RlZmluZSBBUkVfQVJDVl8xCQkoMHgxIDw8IDApCisjZGVmaW5lIEFSQ1YJCQkoMHg0ZTIgPDwgOCkgLyogQXV0b3JlZnJlc2ggY291bnQgKi8KKyNkZWZpbmUgT01BUDM0WFhfU0RSQ19DUzAJMHg4MDAwMDAwMAorI2RlZmluZSBPTUFQMzRYWF9TRFJDX0NTMQkweEEwMDAwMDAwCisjZGVmaW5lIENNRF9OT1AJCQkweDAKKyNkZWZpbmUgQ01EX1BSRUNIQVJHRQkJMHgxCisjZGVmaW5lIENNRF9BVVRPUkVGUkVTSAkJMHgyCisjZGVmaW5lIENNRF9FTlRSX1BXUkRPV04JMHgzCisjZGVmaW5lIENNRF9FWElUX1BXUkRPV04JMHg0CisjZGVmaW5lIENNRF9FTlRSX1NSRlJTSAkJMHg1CisjZGVmaW5lIENNRF9DS0VfSElHSAkJMHg2CisjZGVmaW5lIENNRF9DS0VfTE9XCQkweDcKKyNkZWZpbmUgU09GVFJFU0VUCQkoMHgxIDw8IDEpCisjZGVmaW5lIFNNQVJUX0lETEUJCSgweDIgPDwgMykKKyNkZWZpbmUgUkVGX09OX0lETEUJCSgweDEgPDwgNikKKworLyogdGltZXIgcmVncyBvZmZzZXRzICgzMiBiaXQgcmVncykgKi8KKworI2lmbmRlZiBfX0FTU0VNQkxZX18KK3R5cGVkZWYgc3RydWN0IGdwdGltZXIgeworCXVuc2lnbmVkIGludCB0aWRyOwkvKiAweDAwIHIgKi8KKwl1bnNpZ25lZCBjaGFyIHJlc1sweGNdOworCXVuc2lnbmVkIGludCB0aW9jcF9jZmc7CS8qIDB4MTAgcncgKi8KKwl1bnNpZ25lZCBpbnQgdGlzdGF0OwkvKiAweDE0IHIgKi8KKwl1bnNpZ25lZCBpbnQgdGlzcjsJLyogMHgxOCBydyAqLworCXVuc2lnbmVkIGludCB0aWVyOwkvKiAweDFjIHJ3ICovCisJdW5zaWduZWQgaW50IHR3ZXI7CS8qIDB4MjAgcncgKi8KKwl1bnNpZ25lZCBpbnQgdGNscjsJLyogMHgyNCBydyAqLworCXVuc2lnbmVkIGludCB0Y3JyOwkvKiAweDI4IHJ3ICovCisJdW5zaWduZWQgaW50IHRsZHI7CS8qIDB4MmMgcncgKi8KKwl1bnNpZ25lZCBpbnQgdHRncjsJLyogMHgzMCBydyAqLworCXVuc2lnbmVkIGludCB0d3BjOwkvKiAweDM0IHIqLworCXVuc2lnbmVkIGludCB0bWFyOwkvKiAweDM4IHJ3Ki8KKwl1bnNpZ25lZCBpbnQgdGNhcjE7CS8qIDB4M2MgciAqLworCXVuc2lnbmVkIGludCB0Y2ljcjsJLyogMHg0MCBydyAqLworCXVuc2lnbmVkIGludCB0Y2FyMjsJLyogMHg0NCByICovCit9IGdwdGltZXJfdDsKKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KKworLyogZW5hYmxlIHN5c19jbGsgTk8tcHJlc2NhbGUgLzEgKi8KKyNkZWZpbmUgR1BUX0VOCQkJKCgweDAgPDwgMikgfCAoMHgxIDw8IDEpIHwgKDB4MSA8PCAwKSkKKworLyogV2F0Y2hkb2cgKi8KKyNpZm5kZWYgX19BU1NFTUJMWV9fCit0eXBlZGVmIHN0cnVjdCB3YXRjaGRvZyB7CisJdW5zaWduZWQgY2hhciByZXMxWzB4MzRdOworCXVuc2lnbmVkIGludCB3d3BzOwkvKiAweDM0IHIgKi8KKwl1bnNpZ25lZCBjaGFyIHJlczJbMHgxMF07CisJdW5zaWduZWQgaW50IHdzcHI7CS8qIDB4NDggcncgKi8KK30gd2F0Y2hkb2dfdDsKKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KKworI2RlZmluZSBXRF9VTkxPQ0sxCQkweEFBQUEKKyNkZWZpbmUgV0RfVU5MT0NLMgkJMHg1NTU1CisKKy8qIFBSQ00gKi8KKyNkZWZpbmUgUFJDTV9CQVNFCQkweDQ4MDA0MDAwCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCit0eXBlZGVmIHN0cnVjdCBwcmNtIHsKKwl1bnNpZ25lZCBpbnQgZmNsa2VuX2l2YTI7CS8qIDB4MDAgKi8KKwl1bnNpZ25lZCBpbnQgY2xrZW5fcGxsX2l2YTI7CS8qIDB4MDQgKi8KKwl1bnNpZ25lZCBjaGFyIHJlczFbMHgxY107CisJdW5zaWduZWQgaW50IGlkbGVzdF9wbGxfaXZhMjsJLyogMHgyNCAqLworCXVuc2lnbmVkIGNoYXIgcmVzMlsweDE4XTsKKwl1bnNpZ25lZCBpbnQgY2xrc2VsMV9wbGxfaXZhMiA7CS8qIDB4NDAgKi8KKwl1bnNpZ25lZCBpbnQgY2xrc2VsMl9wbGxfaXZhMjsJLyogMHg0NCAqLworCXVuc2lnbmVkIGNoYXIgcmVzM1sweDhiY107CisJdW5zaWduZWQgaW50IGNsa2VuX3BsbF9tcHU7CS8qIDB4OTA0ICovCisJdW5zaWduZWQgY2hhciByZXM0WzB4MWNdOworCXVuc2lnbmVkIGludCBpZGxlc3RfcGxsX21wdTsJLyogMHg5MjQgKi8KKwl1bnNpZ25lZCBjaGFyIHJlczVbMHgxOF07CisJdW5zaWduZWQgaW50IGNsa3NlbDFfcGxsX21wdTsJLyogMHg5NDAgKi8KKwl1bnNpZ25lZCBpbnQgY2xrc2VsMl9wbGxfbXB1OwkvKiAweDk0NCAqLworCXVuc2lnbmVkIGNoYXIgcmVzNlsweGI4XTsKKwl1bnNpZ25lZCBpbnQgZmNsa2VuMV9jb3JlOwkvKiAweGEwMCAqLworCXVuc2lnbmVkIGNoYXIgcmVzN1sweGNdOworCXVuc2lnbmVkIGludCBpY2xrZW4xX2NvcmU7CS8qIDB4YTEwICovCisJdW5zaWduZWQgaW50IGljbGtlbjJfY29yZTsJLyogMHhhMTQgKi8KKwl1bnNpZ25lZCBjaGFyIHJlczhbMHgyOF07CisJdW5zaWduZWQgaW50IGNsa3NlbF9jb3JlOwkvKiAweGE0MCAqLworCXVuc2lnbmVkIGNoYXIgcmVzOVsweGJjXTsKKwl1bnNpZ25lZCBpbnQgZmNsa2VuX2dmeDsJLyogMHhiMDAgKi8KKwl1bnNpZ25lZCBjaGFyIHJlczEwWzB4Y107CisJdW5zaWduZWQgaW50IGljbGtlbl9nZng7CS8qIDB4YjEwICovCisJdW5zaWduZWQgY2hhciByZXMxMVsweDJjXTsKKwl1bnNpZ25lZCBpbnQgY2xrc2VsX2dmeDsJLyogMHhiNDAgKi8KKwl1bnNpZ25lZCBjaGFyIHJlczEyWzB4YmNdOworCXVuc2lnbmVkIGludCBmY2xrZW5fd2t1cDsJLyogMHhjMDAgKi8KKwl1bnNpZ25lZCBjaGFyIHJlczEzWzB4Y107CisJdW5zaWduZWQgaW50IGljbGtlbl93a3VwOwkvKiAweGMxMCAqLworCXVuc2lnbmVkIGNoYXIgcmVzMTRbMHhjXTsKKwl1bnNpZ25lZCBpbnQgaWRsZXN0X3drdXA7CS8qIDB4YzIwICovCisJdW5zaWduZWQgY2hhciByZXMxNVsweDFjXTsKKwl1bnNpZ25lZCBpbnQgY2xrc2VsX3drdXA7CS8qIDB4YzQwICovCisJdW5zaWduZWQgY2hhciByZXMxNlsweGJjXTsKKwl1bnNpZ25lZCBpbnQgY2xrZW5fcGxsOwkJLyogMHhkMDAgKi8KKwl1bnNpZ25lZCBjaGFyIHJlczE3WzB4MWNdOworCXVuc2lnbmVkIGludCBpZGxlc3RfY2tnZW47CS8qIDB4ZDIwICovCisJdW5zaWduZWQgY2hhciByZXMxOFsweDFjXTsKKwl1bnNpZ25lZCBpbnQgY2xrc2VsMV9wbGw7CS8qIDB4ZDQwICovCisJdW5zaWduZWQgaW50IGNsa3NlbDJfcGxsOwkvKiAweGQ0NCAqLworCXVuc2lnbmVkIGludCBjbGtzZWwzX3BsbDsJLyogMHhkNDggKi8KKwl1bnNpZ25lZCBjaGFyIHJlczE5WzB4YjRdOworCXVuc2lnbmVkIGludCBmY2xrZW5fZHNzOwkvKiAweGUwMCAqLworCXVuc2lnbmVkIGNoYXIgcmVzMjBbMHhjXTsKKwl1bnNpZ25lZCBpbnQgaWNsa2VuX2RzczsJLyogMHhlMTAgKi8KKwl1bnNpZ25lZCBjaGFyIHJlczIxWzB4MmNdOworCXVuc2lnbmVkIGludCBjbGtzZWxfZHNzOwkvKiAweGU0MCAqLworCXVuc2lnbmVkIGNoYXIgcmVzMjJbMHhiY107CisJdW5zaWduZWQgaW50IGZjbGtlbl9jYW07CS8qIDB4ZjAwICovCisJdW5zaWduZWQgY2hhciByZXMyM1sweGNdOworCXVuc2lnbmVkIGludCBpY2xrZW5fY2FtOwkvKiAweGYxMCAqLworCXVuc2lnbmVkIGNoYXIgcmVzMjRbMHgyY107CisJdW5zaWduZWQgaW50IGNsa3NlbF9jYW07CS8qIDB4ZjQwICovCisJdW5zaWduZWQgY2hhciByZXMyNVsweGJjXTsKKwl1bnNpZ25lZCBpbnQgZmNsa2VuX3BlcjsJLyogMHgxMDAwICovCisJdW5zaWduZWQgY2hhciByZXMyNlsweGNdOworCXVuc2lnbmVkIGludCBpY2xrZW5fcGVyOwkvKiAweDEwMTAgKi8KKwl1bnNpZ25lZCBjaGFyIHJlczI3WzB4MmNdOworCXVuc2lnbmVkIGludCBjbGtzZWxfcGVyOwkvKiAweDEwNDAgKi8KKwl1bnNpZ25lZCBjaGFyIHJlczI4WzB4ZmNdOworCXVuc2lnbmVkIGludCBjbGtzZWwxX2VtdTsJLyogMHgxMTQwICovCit9IHByY21fdDsKKyNlbHNlIC8qIF9fQVNTRU1CTFlfXyAqLworI2RlZmluZSBDTV9DTEtTRUxfQ09SRQkJMHg0ODAwNGE0MAorI2RlZmluZSBDTV9DTEtTRUxfR0ZYCQkweDQ4MDA0YjQwCisjZGVmaW5lIENNX0NMS1NFTF9XS1VQCQkweDQ4MDA0YzQwCisjZGVmaW5lIENNX0NMS0VOX1BMTAkJMHg0ODAwNGQwMAorI2RlZmluZSBDTV9DTEtTRUwxX1BMTAkJMHg0ODAwNGQ0MAorI2RlZmluZSBDTV9DTEtTRUwxX0VNVQkJMHg0ODAwNTE0MAorI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworCisjZGVmaW5lIFBSTV9CQVNFCQkweDQ4MzA2MDAwCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCit0eXBlZGVmIHN0cnVjdCBwcm0geworCXVuc2lnbmVkIGNoYXIgcmVzMVsweGQ0MF07CisJdW5zaWduZWQgaW50IGNsa3NlbDsJCS8qIDB4ZDQwICovCisJdW5zaWduZWQgY2hhciByZXMyWzB4NTBjXTsKKwl1bnNpZ25lZCBpbnQgcnN0Y3RybDsJCS8qIDB4MTI1MCAqLworCXVuc2lnbmVkIGNoYXIgcmVzM1sweDFjXTsKKwl1bnNpZ25lZCBpbnQgY2xrc3JjX2N0cmw7CS8qIDB4MTI3MCAqLworfSBwcm1fdDsKKyNlbHNlIC8qIF9fQVNTRU1CTFlfXyAqLworI2RlZmluZSBQUk1fUlNUQ1RSTAkJMHg0ODMwNzI1MAorI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworCisjZGVmaW5lIFNZU0NMS0RJVl8xCQkoMHgxIDw8IDYpCisjZGVmaW5lIFNZU0NMS0RJVl8yCQkoMHgxIDw8IDcpCisKKyNkZWZpbmUgQ0xLU0VMX0dQVDEJCSgweDEgPDwgMCkKKworI2RlZmluZSBFTl9HUFQxCQkJKDB4MSA8PCAwKQorI2RlZmluZSBFTl8zMktTWU5DCQkoMHgxIDw8IDIpCisKKyNkZWZpbmUgU1RfV0RUMgkJCSgweDEgPDwgNSkKKworI2RlZmluZSBTVF9NUFVfQ0xLCQkoMHgxIDw8IDApCisKKyNkZWZpbmUgU1RfQ09SRV9DTEsJCSgweDEgPDwgMCkKKworI2RlZmluZSBTVF9QRVJJUEhfQ0xLCQkoMHgxIDw8IDEpCisKKyNkZWZpbmUgU1RfSVZBMl9DTEsJCSgweDEgPDwgMCkKKworI2RlZmluZSBSRVNFVERPTkUJCSgweDEgPDwgMCkKKworI2RlZmluZSBUQ0xSX1NUCQkJKDB4MSA8PCAwKQorI2RlZmluZSBUQ0xSX0FSCQkJKDB4MSA8PCAxKQorI2RlZmluZSBUQ0xSX1BSRQkJKDB4MSA8PCA1KQorCisvKiBTTVgtQVBFICovCisjZGVmaW5lIFBNX1JUX0FQRV9CQVNFX0FERFJfQVJNCQkoU01YX0FQRV9CQVNFICsgMHgxMDAwMCkKKyNkZWZpbmUgUE1fR1BNQ19CQVNFX0FERFJfQVJNCQkoU01YX0FQRV9CQVNFICsgMHgxMjQwMCkKKyNkZWZpbmUgUE1fT0NNX1JBTV9CQVNFX0FERFJfQVJNCShTTVhfQVBFX0JBU0UgKyAweDEyODAwKQorI2RlZmluZSBQTV9JVkEyX0JBU0VfQUREUl9BUk0JCShTTVhfQVBFX0JBU0UgKyAweDE0MDAwKQorCisjaWZuZGVmIF9fQVNTRU1CTFlfXwordHlwZWRlZiBzdHJ1Y3QgcG0geworCXVuc2lnbmVkIGNoYXIgcmVzMVsweDQ4XTsKKwl1bnNpZ25lZCBpbnQgcmVxX2luZm9fcGVybWlzc2lvbl8wOwkvKiAweDQ4ICovCisJdW5zaWduZWQgY2hhciByZXMyWzB4NF07CisJdW5zaWduZWQgaW50IHJlYWRfcGVybWlzc2lvbl8wOwkJLyogMHg1MCAqLworCXVuc2lnbmVkIGNoYXIgcmVzM1sweDRdOworCXVuc2lnbmVkIGludCB3aXJ0ZV9wZXJtaXNzaW9uXzA7CS8qIDB4NTggKi8KKwl1bnNpZ25lZCBjaGFyIHJlczRbMHg0XTsKKwl1bnNpZ25lZCBpbnQgYWRkcl9tYXRjaF8xOwkJLyogMHg1OCAqLworCXVuc2lnbmVkIGNoYXIgcmVzNVsweDRdOworCXVuc2lnbmVkIGludCByZXFfaW5mb19wZXJtaXNzaW9uXzE7CS8qIDB4NjggKi8KKwl1bnNpZ25lZCBjaGFyIHJlczZbMHgxNF07CisJdW5zaWduZWQgaW50IGFkZHJfbWF0Y2hfMjsJCS8qIDB4ODAgKi8KK30gcG1fdDsKKyNlbmRpZiAvKl9fQVNTRU1CTFlfXyAqLworCisvKiBQZXJtaXNzaW9uIHZhbHVlcyBmb3IgcmVnaXN0ZXJzIC1GdWxsIGZsZWRnZWQgcGVybWlzc2lvbnMgdG8gYWxsICovCisjZGVmaW5lIFVOTE9DS18xCQkJMHhGRkZGRkZGRgorI2RlZmluZSBVTkxPQ0tfMgkJCTB4MDAwMDAwMDAKKyNkZWZpbmUgVU5MT0NLXzMJCQkweDAwMDBGRkZGCisKKyNkZWZpbmUgTk9UX0VBUkxZCQkJMAorCisvKiBJMkMgYmFzZSAqLworI2RlZmluZSBJMkNfQkFTRTEJCShPTUFQMzRYWF9DT1JFX0w0X0lPX0JBU0UgKyAweDcwMDAwKQorI2RlZmluZSBJMkNfQkFTRTIJCShPTUFQMzRYWF9DT1JFX0w0X0lPX0JBU0UgKyAweDcyMDAwKQorI2RlZmluZSBJMkNfQkFTRTMJCShPTUFQMzRYWF9DT1JFX0w0X0lPX0JBU0UgKyAweDYwMDAwKQorCisjZW5kaWYgLyogX0NQVV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwMy9pMmMuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAzL2kyYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5MzdmMzUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwMy9pMmMuaApAQCAtMCwwICsxLDEyOCBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwNC0yMDA4CisgKiBUZXhhcyBJbnN0cnVtZW50cywgPHd3dy50aS5jb20+CisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKyNpZm5kZWYgX0kyQ19IXworI2RlZmluZSBfSTJDX0hfCisKKyNkZWZpbmUgSTJDX0RFRkFVTFRfQkFTRQlJMkNfQkFTRTEKKworI2RlZmluZSBJMkNfUkVWCQkoSTJDX0RFRkFVTFRfQkFTRSArIDB4MDApCisjZGVmaW5lIEkyQ19JRSAJCShJMkNfREVGQVVMVF9CQVNFICsgMHgwNCkKKyNkZWZpbmUgSTJDX1NUQVQJKEkyQ19ERUZBVUxUX0JBU0UgKyAweDA4KQorI2RlZmluZSBJMkNfSVYgCQkoSTJDX0RFRkFVTFRfQkFTRSArIDB4MGMpCisjZGVmaW5lIEkyQ19CVUYJCShJMkNfREVGQVVMVF9CQVNFICsgMHgxNCkKKyNkZWZpbmUgSTJDX0NOVAkJKEkyQ19ERUZBVUxUX0JBU0UgKyAweDE4KQorI2RlZmluZSBJMkNfREFUQQkoSTJDX0RFRkFVTFRfQkFTRSArIDB4MWMpCisjZGVmaW5lIEkyQ19TWVNDCShJMkNfREVGQVVMVF9CQVNFICsgMHgyMCkKKyNkZWZpbmUgSTJDX0NPTgkJKEkyQ19ERUZBVUxUX0JBU0UgKyAweDI0KQorI2RlZmluZSBJMkNfT0EgCQkoSTJDX0RFRkFVTFRfQkFTRSArIDB4MjgpCisjZGVmaW5lIEkyQ19TQSAJCShJMkNfREVGQVVMVF9CQVNFICsgMHgyYykKKyNkZWZpbmUgSTJDX1BTQwkJKEkyQ19ERUZBVUxUX0JBU0UgKyAweDMwKQorI2RlZmluZSBJMkNfU0NMTAkoSTJDX0RFRkFVTFRfQkFTRSArIDB4MzQpCisjZGVmaW5lIEkyQ19TQ0xICShJMkNfREVGQVVMVF9CQVNFICsgMHgzOCkKKyNkZWZpbmUgSTJDX1NZU1RFU1QJKEkyQ19ERUZBVUxUX0JBU0UgKyAweDNjKQorCisvKiBJMkMgbWFza3MgKi8KKworLyogSTJDIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKEkyQ19JRSk6ICovCisjZGVmaW5lIEkyQ19JRV9HQ19JRQkoMSA8PCA1KQorI2RlZmluZSBJMkNfSUVfWFJEWV9JRQkoMSA8PCA0KSAvKiBUcmFuc21pdCBkYXRhIHJlYWR5IGludGVycnVwdCBlbmFibGUgKi8KKyNkZWZpbmUgSTJDX0lFX1JSRFlfSUUJKDEgPDwgMykgLyogUmVjZWl2ZSBkYXRhIHJlYWR5IGludGVycnVwdCBlbmFibGUgKi8KKyNkZWZpbmUgSTJDX0lFX0FSRFlfSUUJKDEgPDwgMikgLyogUmVnaXN0ZXIgYWNjZXNzIHJlYWR5IGludGVycnVwdCBlbmFibGUgKi8KKyNkZWZpbmUgSTJDX0lFX05BQ0tfSUUJKDEgPDwgMSkgLyogTm8gYWNrbm93bGVkZ21lbnQgaW50ZXJydXB0IGVuYWJsZSAqLworI2RlZmluZSBJMkNfSUVfQUxfSUUJKDEgPDwgMCkgLyogQXJiaXRyYXRpb24gbG9zdCBpbnRlcnJ1cHQgZW5hYmxlICovCisKKy8qIEkyQyBTdGF0dXMgUmVnaXN0ZXIgKEkyQ19TVEFUKTogKi8KKworI2RlZmluZSBJMkNfU1RBVF9TQkQJKDEgPDwgMTUpIC8qIFNpbmdsZSBieXRlIGRhdGEgKi8KKyNkZWZpbmUgSTJDX1NUQVRfQkIJKDEgPDwgMTIpIC8qIEJ1cyBidXN5ICovCisjZGVmaW5lIEkyQ19TVEFUX1JPVlIJKDEgPDwgMTEpIC8qIFJlY2VpdmUgb3ZlcnJ1biAqLworI2RlZmluZSBJMkNfU1RBVF9YVURGCSgxIDw8IDEwKSAvKiBUcmFuc21pdCB1bmRlcmZsb3cgKi8KKyNkZWZpbmUgSTJDX1NUQVRfQUFTCSgxIDw8IDkpICAvKiBBZGRyZXNzIGFzIHNsYXZlICovCisjZGVmaW5lIEkyQ19TVEFUX0dDCSgxIDw8IDUpCisjZGVmaW5lIEkyQ19TVEFUX1hSRFkJKDEgPDwgNCkgIC8qIFRyYW5zbWl0IGRhdGEgcmVhZHkgKi8KKyNkZWZpbmUgSTJDX1NUQVRfUlJEWQkoMSA8PCAzKSAgLyogUmVjZWl2ZSBkYXRhIHJlYWR5ICovCisjZGVmaW5lIEkyQ19TVEFUX0FSRFkJKDEgPDwgMikgIC8qIFJlZ2lzdGVyIGFjY2VzcyByZWFkeSAqLworI2RlZmluZSBJMkNfU1RBVF9OQUNLCSgxIDw8IDEpICAvKiBObyBhY2tub3dsZWRnbWVudCBpbnRlcnJ1cHQgZW5hYmxlICovCisjZGVmaW5lIEkyQ19TVEFUX0FMCSgxIDw8IDApICAvKiBBcmJpdHJhdGlvbiBsb3N0IGludGVycnVwdCBlbmFibGUgKi8KKworLyogSTJDIEludGVycnVwdCBDb2RlIFJlZ2lzdGVyIChJMkNfSU5UQ09ERSk6ICovCisKKyNkZWZpbmUgSTJDX0lOVENPREVfTUFTSwk3CisjZGVmaW5lIEkyQ19JTlRDT0RFX05PTkUJMAorI2RlZmluZSBJMkNfSU5UQ09ERV9BTAkJMQkvKiBBcmJpdHJhdGlvbiBsb3N0ICovCisjZGVmaW5lIEkyQ19JTlRDT0RFX05BSwkJMgkvKiBObyBhY2tub3dsZWRnZW1lbnQvZ2VuZXJhbCBjYWxsICovCisjZGVmaW5lIEkyQ19JTlRDT0RFX0FSRFkJMwkvKiBSZWdpc3RlciBhY2Nlc3MgcmVhZHkgKi8KKyNkZWZpbmUgSTJDX0lOVENPREVfUlJEWQk0CS8qIFJjdiBkYXRhIHJlYWR5ICovCisjZGVmaW5lIEkyQ19JTlRDT0RFX1hSRFkJNQkvKiBYbWl0IGRhdGEgcmVhZHkgKi8KKworLyogSTJDIEJ1ZmZlciBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIChJMkNfQlVGKTogKi8KKworI2RlZmluZSBJMkNfQlVGX1JETUFfRU4JCSgxIDw8IDE1KSAvKiBSZWNlaXZlIERNQSBjaGFubmVsIGVuYWJsZSAqLworI2RlZmluZSBJMkNfQlVGX1hETUFfRU4JCSgxIDw8IDcpICAvKiBUcmFuc21pdCBETUEgY2hhbm5lbCBlbmFibGUgKi8KKworLyogSTJDIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKEkyQ19DT04pOiAqLworCisjZGVmaW5lIEkyQ19DT05fRU4JKDEgPDwgMTUpICAvKiBJMkMgbW9kdWxlIGVuYWJsZSAqLworI2RlZmluZSBJMkNfQ09OX0JFCSgxIDw8IDE0KSAgLyogQmlnIGVuZGlhbiBtb2RlICovCisjZGVmaW5lIEkyQ19DT05fU1RCCSgxIDw8IDExKSAgLyogU3RhcnQgYnl0ZSBtb2RlIChtYXN0ZXIgbW9kZSBvbmx5KSAqLworI2RlZmluZSBJMkNfQ09OX01TVAkoMSA8PCAxMCkgIC8qIE1hc3Rlci9zbGF2ZSBtb2RlICovCisjZGVmaW5lIEkyQ19DT05fVFJYCSgxIDw8IDkpICAgLyogVHJhbnNtaXR0ZXIvcmVjZWl2ZXIgbW9kZSAqLworCQkJCSAgIC8qIChtYXN0ZXIgbW9kZSBvbmx5KSAqLworI2RlZmluZSBJMkNfQ09OX1hBCSgxIDw8IDgpICAgLyogRXhwYW5kIGFkZHJlc3MgKi8KKyNkZWZpbmUgSTJDX0NPTl9TVFAJKDEgPDwgMSkgICAvKiBTdG9wIGNvbmRpdGlvbiAobWFzdGVyIG1vZGUgb25seSkgKi8KKyNkZWZpbmUgSTJDX0NPTl9TVFQJKDEgPDwgMCkgICAvKiBTdGFydCBjb25kaXRpb24gKG1hc3RlciBtb2RlIG9ubHkpICovCisKKy8qIEkyQyBTeXN0ZW0gVGVzdCBSZWdpc3RlciAoSTJDX1NZU1RFU1QpOiAqLworCisjZGVmaW5lIEkyQ19TWVNURVNUX1NUX0VOCSgxIDw8IDE1KSAvKiBTeXN0ZW0gdGVzdCBlbmFibGUgKi8KKyNkZWZpbmUgSTJDX1NZU1RFU1RfRlJFRQkoMSA8PCAxNCkgLyogRnJlZSBydW5uaW5nIG1vZGUsIG9uIGJya3BvaW50KSAqLworI2RlZmluZSBJMkNfU1lTVEVTVF9UTU9ERV9NQVNLCSgzIDw8IDEyKSAvKiBUZXN0IG1vZGUgc2VsZWN0ICovCisjZGVmaW5lIEkyQ19TWVNURVNUX1RNT0RFX1NISUZUCSgxMikJICAvKiBUZXN0IG1vZGUgc2VsZWN0ICovCisjZGVmaW5lIEkyQ19TWVNURVNUX1NDTF9JCSgxIDw8IDMpICAvKiBTQ0wgbGluZSBzZW5zZSBpbnB1dCB2YWx1ZSAqLworI2RlZmluZSBJMkNfU1lTVEVTVF9TQ0xfTwkoMSA8PCAyKSAgLyogU0NMIGxpbmUgZHJpdmUgb3V0cHV0IHZhbHVlICovCisjZGVmaW5lIEkyQ19TWVNURVNUX1NEQV9JCSgxIDw8IDEpICAvKiBTREEgbGluZSBzZW5zZSBpbnB1dCB2YWx1ZSAqLworI2RlZmluZSBJMkNfU1lTVEVTVF9TREFfTwkoMSA8PCAwKSAgLyogU0RBIGxpbmUgZHJpdmUgb3V0cHV0IHZhbHVlICovCisKKyNkZWZpbmUgSTJDX1NDTExfU0NMTAkJMAorI2RlZmluZSBJMkNfU0NMTF9TQ0xMX00JCTB4RkYKKyNkZWZpbmUgSTJDX1NDTExfSFNTQ0xMCQk4CisjZGVmaW5lIEkyQ19TQ0xIX0hTU0NMTF9NCTB4RkYKKyNkZWZpbmUgSTJDX1NDTEhfU0NMSAkJMAorI2RlZmluZSBJMkNfU0NMSF9TQ0xIX00JCTB4RkYKKyNkZWZpbmUgSTJDX1NDTEhfSFNTQ0xICQk4CisjZGVmaW5lIEkyQ19TQ0xIX0hTU0NMSF9NCTB4RkYKKworI2RlZmluZSBPTUFQX0kyQ19TVEFOREFSRAkxMDAKKyNkZWZpbmUgT01BUF9JMkNfRkFTVF9NT0RFCTQwMAorI2RlZmluZSBPTUFQX0kyQ19ISUdIX1NQRUVECTM0MDAKKworI2RlZmluZSBTWVNURU1fQ0xPQ0tfMTIJCTEyMDAwCisjZGVmaW5lIFNZU1RFTV9DTE9DS18xMwkJMTMwMDAKKyNkZWZpbmUgU1lTVEVNX0NMT0NLXzE5MgkxOTIwMAorI2RlZmluZSBTWVNURU1fQ0xPQ0tfOTYJCTk2MDAwCisKKyNkZWZpbmUgSTJDX0lQX0NMSwkJU1lTVEVNX0NMT0NLXzk2CisjZGVmaW5lIEkyQ19QU0NfTUFYCQkweDBmCisjZGVmaW5lIEkyQ19QU0NfTUlOCQkweDAwCisKKyNlbmRpZiAvKiBfSTJDX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwMy9tZW0uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAzL21lbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmMGY5MGIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwMy9tZW0uaApAQCAtMCwwICsxLDIyNyBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwNi0yMDA4CisgKiBUZXhhcyBJbnN0cnVtZW50cywgPHd3dy50aS5jb20+CisgKiBSaWNoYXJkIFdvb2RydWZmIDxyLXdvb2RydWZmMkB0aS5jb20+CisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2lmbmRlZiBfTUVNX0hfCisjZGVmaW5lIF9NRU1fSF8KKworI2RlZmluZSBDUzAJCTB4MAorI2RlZmluZSBDUzEJCTB4MSAvKiBtaXJyb3IgQ1MxIHJlZ3MgYXBwZWFyIG9mZnNldCAweDMwIGZyb20gQ1MwICovCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCit0eXBlZGVmIGVudW0geworCVNUQUNLRUQgPSAwLAorCUlQX0REUiA9IDEsCisJQ09NQk9fRERSID0gMiwKKwlJUF9TRFIgPSAzLAorfSBtZW1fdDsKKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KKworI2RlZmluZSBFQVJMWV9JTklUCTEKKworLyogU2xvd2VyIGZ1bGwgZnJlcXVlbmN5IHJhbmdlIGRlZmF1bHQgdGltaW5ncyBmb3IgeDMyIG9wZXJhdGlvbiovCisjZGVmaW5lIFNEUF9TRFJDX1NIQVJJTkcJMHgwMDAwMDEwMAorI2RlZmluZSBTRFBfU0RSQ19NUl8wX1NEUgkweDAwMDAwMDMxCisKKy8qIG9wdGltaXplZCB0aW1pbmdzIGdvb2QgZm9yIGN1cnJlbnQgc2hpcHBpbmcgcGFydHMgKi8KKyNkZWZpbmUgU0RQXzM0MzBfU0RSQ19SRlJfQ1RSTF8xNjVNSHoJMHgwMDA0ZTIwMSAvKiA3Ljh1cy82bnMgLSA1MD0weDRlMiAqLworCisjZGVmaW5lIERMTF9PRkZTRVQJCTAKKyNkZWZpbmUgRExMX1dSSVRFRERSQ0xLWDJESVMJMQorI2RlZmluZSBETExfRU5BRExMCQkxCisjZGVmaW5lIERMTF9MT0NLRExMCQkwCisjZGVmaW5lIERMTF9ETExQSEFTRV83MgkJMAorI2RlZmluZSBETExfRExMUEhBU0VfOTAJCTEKKworLyogcmt3IC0gbmVlZCB0byBmaW5kIG9mIDkwLzcyIGRlZ3JlZSByZWNvbW1lbmRhdGlvbiBmb3Igc3BlZWQgbGlrZSBiZWZvcmUgKi8KKyNkZWZpbmUgU0RQX1NEUkNfRExMQUJfQ1RSTAkoKERMTF9FTkFETEwgPDwgMykgfCBcCisJCQkJKERMTF9MT0NLRExMIDw8IDIpIHwgKERMTF9ETExQSEFTRV85MCA8PCAxKSkKKworLyogSW5maW5lb24gcGFydCBvZiAzNDMwU0RQICgxNjVNSHogb3B0aW1pemVkKSA2LjA2bnMKKyAqICAgQUNUSU1BCisgKglUREFMID0gVHdyL1RjayArIFRycC90Y2sgPSAxNS82ICsgMTgvNiA9IDIuNSArIDMgPSA1LjUgLT4gNgorICoJVERQTCAoVHdyKSA9IDE1LzYJPSAyLjUgLT4gMworICoJVFJSRCA9IDEyLzYJPSAyCisgKglUUkNEID0gMTgvNgk9IDMKKyAqCVRSUCA9IDE4LzYJPSAzCisgKglUUkFTID0gNDIvNgk9IDcKKyAqCVRSQyA9IDYwLzYJPSAxMAorICoJVFJGQyA9IDcyLzYJPSAxMgorICogICBBQ1RJTUIKKyAqCVRDS0UgPSAyCisgKglYU1IgPSAxMjAvNiA9IDIwCisgKi8KKyNkZWZpbmUgVERBTF8xNjUJNgorI2RlZmluZSBURFBMXzE2NQkzCisjZGVmaW5lIFRSUkRfMTY1CTIKKyNkZWZpbmUgVFJDRF8xNjUJMworI2RlZmluZSBUUlBfMTY1CQkzCisjZGVmaW5lIFRSQVNfMTY1CTcKKyNkZWZpbmUgVFJDXzE2NQkJMTAKKyNkZWZpbmUgVFJGQ18xNjUJMjEKKyNkZWZpbmUgVl9BQ1RJTUFfMTY1CSgoVFJGQ18xNjUgPDwgMjcpIHwgKFRSQ18xNjUgPDwgMjIpIHwgXAorCQkJKFRSQVNfMTY1IDw8IDE4KSB8IChUUlBfMTY1IDw8IDE1KSB8ICBcCisJCQkoVFJDRF8xNjUgPDwgMTIpIHwgKFRSUkRfMTY1IDw8IDkpIHwgIFwKKwkJCShURFBMXzE2NSA8PCA2KSB8IChUREFMXzE2NSkpCisKKyNkZWZpbmUgVFdUUl8xNjUJMQorI2RlZmluZSBUQ0tFXzE2NQkxCisjZGVmaW5lIFRYUF8xNjUJCTUKKyNkZWZpbmUgWFNSXzE2NQkJMjMKKyNkZWZpbmUgVl9BQ1RJTUJfMTY1CSgoKFRDS0VfMTY1IDw8IDEyKSB8IChYU1JfMTY1IDw8IDApKSB8CVwKKwkJCShUWFBfMTY1IDw8IDgpIHwgKFRXVFJfMTY1IDw8IDE2KSkKKworI2RlZmluZSBTRFBfU0RSQ19BQ1RJTV9DVFJMQV8wCVZfQUNUSU1BXzE2NQorI2RlZmluZSBTRFBfU0RSQ19BQ1RJTV9DVFJMQl8wCVZfQUNUSU1CXzE2NQorI2RlZmluZSBTRFBfU0RSQ19SRlJfQ1RSTAlTRFBfMzQzMF9TRFJDX1JGUl9DVFJMXzE2NU1IegorCisvKgorICogR1BNQyBzZXR0aW5ncyAtCisgKiBEZWZpbml0aW9ucyBpcyBhcyBwZXIgdGhlIGZvbGxvd2luZyBmb3JtYXQKKyAqICNkZWZpbmUgPFBBUlQ+X0dQTUNfQ09ORklHPHg+IDx2YWx1ZT4KKyAqIFdoZXJlOgorICogUEFSVCBpcyB0aGUgcGFydCBuYW1lIGUuZy4gU1ROT1IgLSBJbnRlbCBTdHJhdGEgRmxhc2gKKyAqIHggaXMgR1BNQyBjb25maWcgcmVnaXN0ZXJzIGZyb20gMSB0byA2ICh0aGVyZSB3aWxsIGJlIDYgbWFjcm9zKQorICogVmFsdWUgaXMgY29ycmVzcG9uZGluZyB2YWx1ZQorICoKKyAqIEZvciBldmVyeSB2YWxpZCBQUkNNIGNvbmZpZ3VyYXRpb24gdGhlcmUgc2hvdWxkIGJlIG9ubHkgb25lIGRlZmluaXRpb24gb2YKKyAqIHRoZSBzYW1lLiBpZiB2YWx1ZXMgYXJlIGluZGVwZW5kZW50IG9mIHRoZSBib2FyZCwgdGhpcyBkZWZpbml0aW9uIHdpbGwgYmUKKyAqIHByZXNlbnQgaW4gdGhpcyBmaWxlIGlmIHZhbHVlcyBhcmUgZGVwZW5kZW50IG9uIHRoZSBib2FyZCwgdGhlbiB0aGlzIHNob3VsZAorICogZ28gaW50byBjb3JyZXNwb25kaW5nIG1lbS1ib2FyZE5hbWUuaCBmaWxlCisgKgorICogQ3VycmVudGx5IHZhbGlkIHBhcnQgTmFtZXMgYXJlIChQQVJUKToKKyAqIFNUTk9SIC0gSW50ZWwgU3RyYXRhIEZsYXNoCisgKiBTTU5BTkQgLSBTYW1zdW5nIE5BTkQKKyAqIE1QREIgLSBINCBNUERCIGJvYXJkCisgKiBTQk5PUiAtIFNpYmxleSBOT1IKKyAqIE1OQU5EIC0gTWljcm9uIExhcmdlIHBhZ2UgeDE2IE5BTkQKKyAqIE9OTkFORCAtIFNhbXN1bmcgT25lIE5BTkQKKyAqCisgKiBpbmNsdWRlL2NvbmZpZ3MvZmlsZS5oIGNvbnRhaW5zIHRoZSBkZWZuIC0gZm9yIGFsbCBDUyB3ZSBhcmUgaW50ZXJlc3RlZAorICogI2RlZmluZSBPTUFQMzRYWF9HUE1DX0NTeCBQQVJUCisgKiAjZGVmaW5lIE9NQVAzNFhYX0dQTUNfQ1N4X1NJWkUgU2l6ZQorICogI2RlZmluZSBPTUFQMzRYWF9HUE1DX0NTeF9NQVAgTWFwCisgKiBXaGVyZToKKyAqIHggLSBDUyBudW1iZXIKKyAqIFBBUlQgLSBQYXJ0IE5hbWUgYXMgZGVmaW5lZCBhYm92ZQorICogU0laRSAtIGhvdyBiaWcgaXMgdGhlIG1hcHBpbmcgdG8gYmUKKyAqICAgR1BNQ19TSVpFXzEyOE0gLSAweDgKKyAqICAgR1BNQ19TSVpFXzY0TSAgLSAweEMKKyAqICAgR1BNQ19TSVpFXzMyTSAgLSAweEUKKyAqICAgR1BNQ19TSVpFXzE2TSAgLSAweEYKKyAqIE1BUCAgLSBNYXAgdGhpcyBDUyB0byB3aGljaCBhZGRyZXNzKEdQTUMgYWRkcmVzcyBzcGFjZSktIEFic29sdXRlIGFkZHJlc3MKKyAqICAgPj4yNCBiZWZvcmUgYmVpbmcgdXNlZC4KKyAqLworI2RlZmluZSBHUE1DX1NJWkVfMTI4TQkweDgKKyNkZWZpbmUgR1BNQ19TSVpFXzY0TQkweEMKKyNkZWZpbmUgR1BNQ19TSVpFXzMyTQkweEUKKyNkZWZpbmUgR1BNQ19TSVpFXzE2TQkweEYKKworI2RlZmluZSBTTU5BTkRfR1BNQ19DT05GSUcxCTB4MDAwMDA4MDAKKyNkZWZpbmUgU01OQU5EX0dQTUNfQ09ORklHMgkweDAwMTQxNDAwCisjZGVmaW5lIFNNTkFORF9HUE1DX0NPTkZJRzMJMHgwMDE0MTQwMAorI2RlZmluZSBTTU5BTkRfR1BNQ19DT05GSUc0CTB4MEYwMTBGMDEKKyNkZWZpbmUgU01OQU5EX0dQTUNfQ09ORklHNQkweDAxMEMxNDE0CisjZGVmaW5lIFNNTkFORF9HUE1DX0NPTkZJRzYJMHgxRjBGMEE4MAorI2RlZmluZSBTTU5BTkRfR1BNQ19DT05GSUc3CTB4MDAwMDBDNDQKKworI2RlZmluZSBNX05BTkRfR1BNQ19DT05GSUcxCTB4MDAwMDE4MDAKKyNkZWZpbmUgTV9OQU5EX0dQTUNfQ09ORklHMgkweDAwMTQxNDAwCisjZGVmaW5lIE1fTkFORF9HUE1DX0NPTkZJRzMJMHgwMDE0MTQwMAorI2RlZmluZSBNX05BTkRfR1BNQ19DT05GSUc0CTB4MEYwMTBGMDEKKyNkZWZpbmUgTV9OQU5EX0dQTUNfQ09ORklHNQkweDAxMEMxNDE0CisjZGVmaW5lIE1fTkFORF9HUE1DX0NPTkZJRzYJMHgxZjBmMEE4MAorI2RlZmluZSBNX05BTkRfR1BNQ19DT05GSUc3CTB4MDAwMDBDNDQKKworI2RlZmluZSBTVE5PUl9HUE1DX0NPTkZJRzEJMHgzCisjZGVmaW5lIFNUTk9SX0dQTUNfQ09ORklHMgkweDAwMTUxNTAxCisjZGVmaW5lIFNUTk9SX0dQTUNfQ09ORklHMwkweDAwMDYwNjAyCisjZGVmaW5lIFNUTk9SX0dQTUNfQ09ORklHNAkweDExMDkxMTA5CisjZGVmaW5lIFNUTk9SX0dQTUNfQ09ORklHNQkweDAxMTQxRjFGCisjZGVmaW5lIFNUTk9SX0dQTUNfQ09ORklHNgkweDAwMDAwNGM0CisKKyNkZWZpbmUgU0lCTk9SX0dQTUNfQ09ORklHMQkweDEyMDAKKyNkZWZpbmUgU0lCTk9SX0dQTUNfQ09ORklHMgkweDAwMWYxZjAwCisjZGVmaW5lIFNJQk5PUl9HUE1DX0NPTkZJRzMJMHgwMDA4MDgwMgorI2RlZmluZSBTSUJOT1JfR1BNQ19DT05GSUc0CTB4MUMwOTFDMDkKKyNkZWZpbmUgU0lCTk9SX0dQTUNfQ09ORklHNQkweDAxMTMxRjFGCisjZGVmaW5lIFNJQk5PUl9HUE1DX0NPTkZJRzYJMHgxRjBGMDNDMgorCisjZGVmaW5lIFNEUFYyX01QREJfR1BNQ19DT05GSUcxCTB4MDA2MTEyMDAKKyNkZWZpbmUgU0RQVjJfTVBEQl9HUE1DX0NPTkZJRzIJMHgwMDFGMUYwMQorI2RlZmluZSBTRFBWMl9NUERCX0dQTUNfQ09ORklHMwkweDAwMDgwODAzCisjZGVmaW5lIFNEUFYyX01QREJfR1BNQ19DT05GSUc0CTB4MUQwOTFEMDkKKyNkZWZpbmUgU0RQVjJfTVBEQl9HUE1DX0NPTkZJRzUJMHgwNDFEMUYxRgorI2RlZmluZSBTRFBWMl9NUERCX0dQTUNfQ09ORklHNgkweDFEMDkwNEM0CisKKyNkZWZpbmUgTVBEQl9HUE1DX0NPTkZJRzEJMHgwMDAxMTAwMAorI2RlZmluZSBNUERCX0dQTUNfQ09ORklHMgkweDAwMWYxZjAxCisjZGVmaW5lIE1QREJfR1BNQ19DT05GSUczCTB4MDAwODA4MDMKKyNkZWZpbmUgTVBEQl9HUE1DX0NPTkZJRzQJMHgxYzBiMWMwYQorI2RlZmluZSBNUERCX0dQTUNfQ09ORklHNQkweDA0MWYxRjFGCisjZGVmaW5lIE1QREJfR1BNQ19DT05GSUc2CTB4MUYwRjA0QzQKKworI2RlZmluZSBQMl9HUE1DX0NPTkZJRzEJMHgwCisjZGVmaW5lIFAyX0dQTUNfQ09ORklHMgkweDAKKyNkZWZpbmUgUDJfR1BNQ19DT05GSUczCTB4MAorI2RlZmluZSBQMl9HUE1DX0NPTkZJRzQJMHgwCisjZGVmaW5lIFAyX0dQTUNfQ09ORklHNQkweDAKKyNkZWZpbmUgUDJfR1BNQ19DT05GSUc2CTB4MAorCisjZGVmaW5lIE9ORU5BTkRfR1BNQ19DT05GSUcxCTB4MDAwMDEyMDAKKyNkZWZpbmUgT05FTkFORF9HUE1DX0NPTkZJRzIJMHgwMDBGMEYwMQorI2RlZmluZSBPTkVOQU5EX0dQTUNfQ09ORklHMwkweDAwMDMwMzAxCisjZGVmaW5lIE9ORU5BTkRfR1BNQ19DT05GSUc0CTB4MEYwNDBGMDQKKyNkZWZpbmUgT05FTkFORF9HUE1DX0NPTkZJRzUJMHgwMTBGMTAxMAorI2RlZmluZSBPTkVOQU5EX0dQTUNfQ09ORklHNgkweDFGMDYwMDAwCisKKyNkZWZpbmUgTkVUX0dQTUNfQ09ORklHMQkweDAwMDAxMDAwCisjZGVmaW5lIE5FVF9HUE1DX0NPTkZJRzIJMHgwMDFlMWUwMQorI2RlZmluZSBORVRfR1BNQ19DT05GSUczCTB4MDAwODAzMDAKKyNkZWZpbmUgTkVUX0dQTUNfQ09ORklHNAkweDFjMDkxYzA5CisjZGVmaW5lIE5FVF9HUE1DX0NPTkZJRzUJMHgwNDE4MWYxZgorI2RlZmluZSBORVRfR1BNQ19DT05GSUc2CTB4MDAwMDBGQ0YKKyNkZWZpbmUgTkVUX0dQTUNfQ09ORklHNwkweDAwMDAwZjZjCisKKy8qIG1heCBudW1iZXIgb2YgR1BNQyBDaGlwIFNlbGVjdHMgKi8KKyNkZWZpbmUgR1BNQ19NQVhfQ1MJOAorLyogbWF4IG51bWJlciBvZiBHUE1DIHJlZ3MgKi8KKyNkZWZpbmUgR1BNQ19NQVhfUkVHCTcKKworI2RlZmluZSBQSVNNTzFfTk9SCTEKKyNkZWZpbmUgUElTTU8xX05BTkQJMgorI2RlZmluZSBQSVNNTzJfQ1MwCTMKKyNkZWZpbmUgUElTTU8yX0NTMQk0CisjZGVmaW5lIFBJU01PMV9PTkVOQU5ECTUKKyNkZWZpbmUgREJHX01QREIJNgorI2RlZmluZSBQSVNNTzJfTkFORF9DUzAgNworI2RlZmluZSBQSVNNTzJfTkFORF9DUzEgOAorCisvKiBtYWtlIGl0IHJlYWRhYmxlIGZvciB0aGUgZ3BtY19pbml0ICovCisjZGVmaW5lIFBJU01PMV9OT1JfQkFTRQkJRkxBU0hfQkFTRQorI2RlZmluZSBQSVNNTzFfTkFORF9CQVNFCU5BTkRfQkFTRQorI2RlZmluZSBQSVNNTzJfQ1MwX0JBU0UJCVBJU01PMl9NQVAxCisjZGVmaW5lIFBJU01PMV9PTkVOX0JBU0UJT05FTkFORF9NQVAKKyNkZWZpbmUgREJHX01QREJfQkFTRQkJREVCVUdfQkFTRQorCisjZW5kaWYgLyogZW5kaWYgX01FTV9IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcDMvbW1jLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwMy9tbWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTU4NGQ5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcDMvbW1jLmgKQEAgLTAsMCArMSwyMzUgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDgKKyAqIFRleGFzIEluc3RydW1lbnRzLCA8d3d3LnRpLmNvbT4KKyAqIFN5ZWQgTW9oYW1tZWQgS2hhc2ltIDxraGFzaW1AdGkuY29tPgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbidzIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpZm5kZWYgTU1DX0gKKyNkZWZpbmUgTU1DX0gKKworI2luY2x1ZGUgIm1tY19ob3N0X2RlZi5oIgorCisvKiBSZXNwb25zZXMgKi8KKyNkZWZpbmUgUlNQX1RZUEVfTk9ORQkoUlNQX1RZUEVfTk9SU1AgICB8IENDQ0VfTk9DSEVDSyB8IENJQ0VfTk9DSEVDSykKKyNkZWZpbmUgUlNQX1RZUEVfUjEJKFJTUF9UWVBFX0xHSFQ0OCAgfCBDQ0NFX0NIRUNLICAgfCBDSUNFX0NIRUNLKQorI2RlZmluZSBSU1BfVFlQRV9SMUIJKFJTUF9UWVBFX0xHSFQ0OEIgfCBDQ0NFX0NIRUNLICAgfCBDSUNFX0NIRUNLKQorI2RlZmluZSBSU1BfVFlQRV9SMgkoUlNQX1RZUEVfTEdIVDEzNiB8IENDQ0VfQ0hFQ0sgICB8IENJQ0VfTk9DSEVDSykKKyNkZWZpbmUgUlNQX1RZUEVfUjMJKFJTUF9UWVBFX0xHSFQ0OCAgfCBDQ0NFX05PQ0hFQ0sgfCBDSUNFX05PQ0hFQ0spCisjZGVmaW5lIFJTUF9UWVBFX1I0CShSU1BfVFlQRV9MR0hUNDggIHwgQ0NDRV9OT0NIRUNLIHwgQ0lDRV9OT0NIRUNLKQorI2RlZmluZSBSU1BfVFlQRV9SNQkoUlNQX1RZUEVfTEdIVDQ4ICB8IENDQ0VfQ0hFQ0sgICB8IENJQ0VfQ0hFQ0spCisjZGVmaW5lIFJTUF9UWVBFX1I2CShSU1BfVFlQRV9MR0hUNDggIHwgQ0NDRV9DSEVDSyAgIHwgQ0lDRV9DSEVDSykKKyNkZWZpbmUgUlNQX1RZUEVfUjcJKFJTUF9UWVBFX0xHSFQ0OCAgfCBDQ0NFX0NIRUNLICAgfCBDSUNFX0NIRUNLKQorCisvKiBBbGwgc3VwcG9ydGVkIGNvbW1hbmRzICovCisjZGVmaW5lIE1NQ19DTUQwCShJTkRFWCgwKSAgfCBSU1BfVFlQRV9OT05FIHwgRFBfTk9fREFUQSB8IERESVJfV1JJVEUpCisjZGVmaW5lIE1NQ19DTUQxCShJTkRFWCgxKSAgfCBSU1BfVFlQRV9SMyAgIHwgRFBfTk9fREFUQSB8IERESVJfV1JJVEUpCisjZGVmaW5lIE1NQ19DTUQyCShJTkRFWCgyKSAgfCBSU1BfVFlQRV9SMiAgIHwgRFBfTk9fREFUQSB8IERESVJfV1JJVEUpCisjZGVmaW5lIE1NQ19DTUQzCShJTkRFWCgzKSAgfCBSU1BfVFlQRV9SMSAgIHwgRFBfTk9fREFUQSB8IERESVJfV1JJVEUpCisjZGVmaW5lIE1NQ19TRENNRDMJKElOREVYKDMpICB8IFJTUF9UWVBFX1I2ICAgfCBEUF9OT19EQVRBIHwgRERJUl9XUklURSkKKyNkZWZpbmUgTU1DX0NNRDQJKElOREVYKDQpICB8IFJTUF9UWVBFX05PTkUgfCBEUF9OT19EQVRBIHwgRERJUl9XUklURSkKKyNkZWZpbmUgTU1DX0NNRDYJKElOREVYKDYpICB8IFJTUF9UWVBFX1IxQiAgfCBEUF9OT19EQVRBIHwgRERJUl9XUklURSkKKyNkZWZpbmUgTU1DX0NNRDdfU0VMRUNUCShJTkRFWCg3KSAgfCBSU1BfVFlQRV9SMUIgIHwgRFBfTk9fREFUQSB8IERESVJfV1JJVEUpCisjZGVmaW5lIE1NQ19DTUQ3X0RFU0VMRUNUIChJTkRFWCg3KXwgUlNQX1RZUEVfTk9ORSB8IERQX05PX0RBVEEgfCBERElSX1dSSVRFKQorI2RlZmluZSBNTUNfQ01EOAkoSU5ERVgoOCkgIHwgUlNQX1RZUEVfUjEgICB8IERQX0RBVEEgICAgfCBERElSX1JFQUQpCisjZGVmaW5lIE1NQ19TRENNRDgJKElOREVYKDgpICB8IFJTUF9UWVBFX1I3ICAgfCBEUF9OT19EQVRBIHwgRERJUl9XUklURSkKKyNkZWZpbmUgTU1DX0NNRDkJKElOREVYKDkpICB8IFJTUF9UWVBFX1IyICAgfCBEUF9OT19EQVRBIHwgRERJUl9XUklURSkKKyNkZWZpbmUgTU1DX0NNRDEyCShJTkRFWCgxMikgfCBSU1BfVFlQRV9SMUIgIHwgRFBfTk9fREFUQSB8IERESVJfV1JJVEUpCisjZGVmaW5lIE1NQ19DTUQxMwkoSU5ERVgoMTMpIHwgUlNQX1RZUEVfUjEgICB8IERQX05PX0RBVEEgfCBERElSX1dSSVRFKQorI2RlZmluZSBNTUNfQ01EMTUJKElOREVYKDE1KSB8IFJTUF9UWVBFX05PTkUgfCBEUF9OT19EQVRBIHwgRERJUl9XUklURSkKKyNkZWZpbmUgTU1DX0NNRDE2CShJTkRFWCgxNikgfCBSU1BfVFlQRV9SMSAgIHwgRFBfTk9fREFUQSB8IERESVJfV1JJVEUpCisjZGVmaW5lIE1NQ19DTUQxNwkoSU5ERVgoMTcpIHwgUlNQX1RZUEVfUjEgICB8IERQX0RBVEEgICAgfCBERElSX1JFQUQpCisjZGVmaW5lIE1NQ19DTUQyNAkoSU5ERVgoMjQpIHwgUlNQX1RZUEVfUjEgICB8IERQX0RBVEEgICAgfCBERElSX1dSSVRFKQorI2RlZmluZSBNTUNfQUNNRDYJKElOREVYKDYpICB8IFJTUF9UWVBFX1IxICAgfCBEUF9OT19EQVRBIHwgRERJUl9XUklURSkKKyNkZWZpbmUgTU1DX0FDTUQ0MQkoSU5ERVgoNDEpIHwgUlNQX1RZUEVfUjMgICB8IERQX05PX0RBVEEgfCBERElSX1dSSVRFKQorI2RlZmluZSBNTUNfQUNNRDUxCShJTkRFWCg1MSkgfCBSU1BfVFlQRV9SMSAgIHwgRFBfREFUQSAgICB8IERESVJfUkVBRCkKKyNkZWZpbmUgTU1DX0NNRDU1CShJTkRFWCg1NSkgfCBSU1BfVFlQRV9SMSAgIHwgRFBfTk9fREFUQSB8IERESVJfV1JJVEUpCisKKyNkZWZpbmUgTU1DX0FDX0NNRF9SQ0FfTUFTSwkodW5zaWduZWQgaW50KSgweEZGRkYgPDwgMTYpCisjZGVmaW5lIE1NQ19CQ19DTURfRFNSX01BU0sJKHVuc2lnbmVkIGludCkoMHhGRkZGIDw8IDE2KQorI2RlZmluZSBNTUNfRFNSX0RFRkFVTFQJCTB4MDQwNAorI2RlZmluZSBTRF9DTUQ4X0NIRUNLX1BBVFRFUk4JMHhBQQorI2RlZmluZSBTRF9DTUQ4XzJfN18zXzZfVl9SQU5HRQkoMHgwMSA8PCA4KQorCisvKiBDbG9jayBDb25maWd1cmF0aW9ucyBhbmQgTWFjcm9zICovCisKKyNkZWZpbmUgTU1DX0NMT0NLX1JFRkVSRU5DRQkJOTYKKyNkZWZpbmUgTU1DX1JFTEFUSVZFX0NBUkRfQUREUkVTUwkweDEyMzQKKyNkZWZpbmUgTU1DX0lOSVRfU0VRX0NMSwkJKE1NQ19DTE9DS19SRUZFUkVOQ0UgKiAxMDAwIC8gODApCisjZGVmaW5lIE1NQ180MDBrSHpfQ0xLCQkJKE1NQ19DTE9DS19SRUZFUkVOQ0UgKiAxMDAwIC8gNDAwKQorI2RlZmluZSBDTEtEUihyLCBmLCB1KQkJCSgoKChyKSoxMDApIC8gKChmKSoodSkpKSArIDEpCisjZGVmaW5lIENMS0QoZiwgdSkJCQkoQ0xLRFIoTU1DX0NMT0NLX1JFRkVSRU5DRSwgZiwgdSkpCisKKyNkZWZpbmUgTU1DX09DUl9SRUdfQUNDRVNTX01PREVfTUFTSwkoMHgzIDw8IDI5KQorI2RlZmluZSBNTUNfT0NSX1JFR19BQ0NFU1NfTU9ERV9CWVRFIAkoMHgwIDw8IDI5KQorI2RlZmluZSBNTUNfT0NSX1JFR19BQ0NFU1NfTU9ERV9TRUNUT1IJKDB4MiA8PCAyOSkKKworI2RlZmluZSBNTUNfT0NSX1JFR19IT1NUX0NBUEFDSVRZX1NVUFBPUlRfTUFTSwkJKDB4MSA8PCAzMCkKKyNkZWZpbmUgTU1DX09DUl9SRUdfSE9TVF9DQVBBQ0lUWV9TVVBQT1JUX0JZVEUJCSgweDAgPDwgMzApCisjZGVmaW5lIE1NQ19PQ1JfUkVHX0hPU1RfQ0FQQUNJVFlfU1VQUE9SVF9TRUNUT1IJKDB4MSA8PCAzMCkKKworI2RlZmluZSBNTUNfU0QyX0NTRF9DX1NJWkVfTFNCX01BU0sJMHhGRkZGCisjZGVmaW5lIE1NQ19TRDJfQ1NEX0NfU0laRV9NU0JfTUFTSwkweDAwM0YKKyNkZWZpbmUgTU1DX1NEMl9DU0RfQ19TSVpFX01TQl9PRkZTRVQJMTYKKyNkZWZpbmUgTU1DX0NTRF9DX1NJWkVfTFNCX01BU0sJCTB4MDAwMworI2RlZmluZSBNTUNfQ1NEX0NfU0laRV9NU0JfTUFTSwkJMHgwM0ZGCisjZGVmaW5lIE1NQ19DU0RfQ19TSVpFX01TQl9PRkZTRVQJMgorCisjZGVmaW5lIE1NQ19DU0RfVFJBTl9TUEVFRF9VTklUX01BU0sJKDB4MDcgPDwgMCkKKyNkZWZpbmUgTU1DX0NTRF9UUkFOX1NQRUVEX0ZBQ1RPUl9NQVNLCSgweDBGIDw8IDMpCisjZGVmaW5lIE1NQ19DU0RfVFJBTl9TUEVFRF9VTklUXzEwME1IWgkoMHgzIDw8IDApCisjZGVmaW5lIE1NQ19DU0RfVFJBTl9TUEVFRF9GQUNUT1JfMV8wCSgweDAxIDw8IDMpCisjZGVmaW5lIE1NQ19DU0RfVFJBTl9TUEVFRF9GQUNUT1JfOF8wCSgweDBGIDw8IDMpCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBub3RfdXNlZDoxOworCXVuc2lnbmVkIGNyYzo3OworCXVuc2lnbmVkIGVjYzoyOworCXVuc2lnbmVkIGZpbGVfZm9ybWF0OjI7CisJdW5zaWduZWQgdG1wX3dyaXRlX3Byb3RlY3Q6MTsKKwl1bnNpZ25lZCBwZXJtX3dyaXRlX3Byb3RlY3Q6MTsKKwl1bnNpZ25lZCBjb3B5OjE7CisJdW5zaWduZWQgZmlsZV9mb3JtYXRfZ3JwOjE7CisJdW5zaWduZWQgY29udGVudF9wcm90X2FwcDoxOworCXVuc2lnbmVkIHJlc2VydmVkXzE6NDsKKwl1bnNpZ25lZCB3cml0ZV9ibF9wYXJ0aWFsOjE7CisJdW5zaWduZWQgd3JpdGVfYmxfbGVuOjQ7CisJdW5zaWduZWQgcjJ3X2ZhY3RvcjozOworCXVuc2lnbmVkIGRlZmF1bHRfZWNjOjI7CisJdW5zaWduZWQgd3BfZ3JwX2VuYWJsZToxOworCXVuc2lnbmVkIHdwX2dycF9zaXplOjU7CisJdW5zaWduZWQgZXJhc2VfZ3JwX211bHQ6NTsKKwl1bnNpZ25lZCBlcmFzZV9ncnBfc2l6ZTo1OworCXVuc2lnbmVkIGNfc2l6ZV9tdWx0OjM7CisJdW5zaWduZWQgdmRkX3dfY3Vycl9tYXg6MzsKKwl1bnNpZ25lZCB2ZGRfd19jdXJyX21pbjozOworCXVuc2lnbmVkIHZkZF9yX2N1cnJfbWF4OjM7CisJdW5zaWduZWQgdmRkX3JfY3Vycl9taW46MzsKKwl1bnNpZ25lZCBjX3NpemVfbHNiOjI7CisJdW5zaWduZWQgY19zaXplX21zYjoxMDsKKwl1bnNpZ25lZCByZXNlcnZlZF8yOjI7CisJdW5zaWduZWQgZHNyX2ltcDoxOworCXVuc2lnbmVkIHJlYWRfYmxrX21pc2FsaWduOjE7CisJdW5zaWduZWQgd3JpdGVfYmxrX21pc2FsaWduOjE7CisJdW5zaWduZWQgcmVhZF9ibF9wYXJ0aWFsOjE7CisJdW5zaWduZWQgcmVhZF9ibF9sZW46NDsKKwl1bnNpZ25lZCBjY2M6MTI7CisJdW5zaWduZWQgdHJhbl9zcGVlZDo4OworCXVuc2lnbmVkIG5zYWM6ODsKKwl1bnNpZ25lZCB0YWFjOjg7CisJdW5zaWduZWQgcmVzZXJ2ZWRfMzoyOworCXVuc2lnbmVkIHNwZWNfdmVyczo0OworCXVuc2lnbmVkIGNzZF9zdHJ1Y3R1cmU6MjsKK30gbW1jX2NzZF9yZWdfdDsKKworLyogY3NkIGZvciBzZDIuMCAqLwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIG5vdF91c2VkOjE7CisJdW5zaWduZWQgY3JjOjc7CisJdW5zaWduZWQgcmVzZXJ2ZWRfMToyOworCXVuc2lnbmVkIGZpbGVfZm9ybWF0OjI7CisJdW5zaWduZWQgdG1wX3dyaXRlX3Byb3RlY3Q6MTsKKwl1bnNpZ25lZCBwZXJtX3dyaXRlX3Byb3RlY3Q6MTsKKwl1bnNpZ25lZCBjb3B5OjE7CisJdW5zaWduZWQgZmlsZV9mb3JtYXRfZ3JwOjE7CisJdW5zaWduZWQgcmVzZXJ2ZWRfMjo1OworCXVuc2lnbmVkIHdyaXRlX2JsX3BhcnRpYWw6MTsKKwl1bnNpZ25lZCB3cml0ZV9ibF9sZW46NDsKKwl1bnNpZ25lZCByMndfZmFjdG9yOjM7CisJdW5zaWduZWQgcmVzZXJ2ZWRfMzoyOworCXVuc2lnbmVkIHdwX2dycF9lbmFibGU6MTsKKwl1bnNpZ25lZCB3cF9ncnBfc2l6ZTo3OworCXVuc2lnbmVkIHNlY3Rvcl9zaXplOjc7CisJdW5zaWduZWQgZXJhc2VfYmxrX2xlbjoxOworCXVuc2lnbmVkIHJlc2VydmVkXzQ6MTsKKwl1bnNpZ25lZCBjX3NpemVfbHNiOjE2OworCXVuc2lnbmVkIGNfc2l6ZV9tc2I6NjsKKwl1bnNpZ25lZCByZXNlcnZlZF81OjY7CisJdW5zaWduZWQgZHNyX2ltcDoxOworCXVuc2lnbmVkIHJlYWRfYmxrX21pc2FsaWduOjE7CisJdW5zaWduZWQgd3JpdGVfYmxrX21pc2FsaWduOjE7CisJdW5zaWduZWQgcmVhZF9ibF9wYXJ0aWFsOjE7CisJdW5zaWduZWQgcmVhZF9ibF9sZW46NDsKKwl1bnNpZ25lZCBjY2M6MTI7CisJdW5zaWduZWQgdHJhbl9zcGVlZDo4OworCXVuc2lnbmVkIG5zYWM6ODsKKwl1bnNpZ25lZCB0YWFjOjg7CisJdW5zaWduZWQgcmVzZXJ2ZWRfNjo2OworCXVuc2lnbmVkIGNzZF9zdHJ1Y3R1cmU6MjsKK30gbW1jX3NkMl9jc2RfcmVnX3Q7CisKKy8qIGV4dGVuZGVkIGNzZCAtIDUxMiBieXRlcyBsb25nICovCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgY2hhciByZXNlcnZlZF8xWzE4MV07CisJdW5zaWduZWQgY2hhciBlcmFzZWRtZW1vcnljb250ZW50OworCXVuc2lnbmVkIGNoYXIgcmVzZXJ2ZWRfMjsKKwl1bnNpZ25lZCBjaGFyIGJ1c3dpZHRobW9kZTsKKwl1bnNpZ25lZCBjaGFyIHJlc2VydmVkXzM7CisJdW5zaWduZWQgY2hhciBoaWdoc3BlZWRpbnRlcmZhY2V0aW1pbmc7CisJdW5zaWduZWQgY2hhciByZXNlcnZlZF80OworCXVuc2lnbmVkIGNoYXIgcG93ZXJjbGFzczsKKwl1bnNpZ25lZCBjaGFyIHJlc2VydmVkXzU7CisJdW5zaWduZWQgY2hhciBjb21tYW5kc2V0cmV2aXNpb247CisJdW5zaWduZWQgY2hhciByZXNlcnZlZF82OworCXVuc2lnbmVkIGNoYXIgY29tbWFuZHNldDsKKwl1bnNpZ25lZCBjaGFyIGV4dGVuZGVkY3NkcmV2aXNpb247CisJdW5zaWduZWQgY2hhciByZXNlcnZlZF83OworCXVuc2lnbmVkIGNoYXIgY3Nkc3RydWN0dXJldmVyc2lvbjsKKwl1bnNpZ25lZCBjaGFyIHJlc2VydmVkXzg7CisJdW5zaWduZWQgY2hhciBjYXJkdHlwZTsKKwl1bnNpZ25lZCBjaGFyIHJlc2VydmVkXzlbM107CisJdW5zaWduZWQgY2hhciBwb3dlcmNsYXNzXzUybWh6XzFfOTV2OworCXVuc2lnbmVkIGNoYXIgcG93ZXJjbGFzc18yNm1oel8xXzk1djsKKwl1bnNpZ25lZCBjaGFyIHBvd2VyY2xhc3NfNTJtaHpfM182djsKKwl1bnNpZ25lZCBjaGFyIHBvd2VyY2xhc3NfMjZtaHpfM182djsKKwl1bnNpZ25lZCBjaGFyIHJlc2VydmVkXzEwOworCXVuc2lnbmVkIGNoYXIgbWlucmVhZHBlcmZfNGJfMjZtaHo7CisJdW5zaWduZWQgY2hhciBtaW53cml0ZXBlcmZfNGJfMjZtaHo7CisJdW5zaWduZWQgY2hhciBtaW5yZWFkcGVyZl84Yl8yNm1oel80Yl81Mm1oejsKKwl1bnNpZ25lZCBjaGFyIG1pbndyaXRlcGVyZl84Yl8yNm1oel80Yl81Mm1oejsKKwl1bnNpZ25lZCBjaGFyIG1pbnJlYWRwZXJmXzhiXzUybWh6OworCXVuc2lnbmVkIGNoYXIgbWlud3JpdGVwZXJmXzhiXzUybWh6OworCXVuc2lnbmVkIGNoYXIgcmVzZXJ2ZWRfMTE7CisJdW5zaWduZWQgaW50IHNlY3RvcmNvdW50OworCXVuc2lnbmVkIGNoYXIgcmVzZXJ2ZWRfMTJbMjg4XTsKKwl1bnNpZ25lZCBjaGFyIHN1cHBvcnRlZGNvbW1hbmRzZXRzOworCXVuc2lnbmVkIGNoYXIgcmVzZXJ2ZWRfMTNbN107Cit9IG1tY19leHRlbmRlZF9jc2RfcmVnX3Q7CisKKy8qIG1tYyBzZCByZXNwb25jZSAqLwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGludCBvY3I7Cit9IG1tY19yZXNwX3IzOworCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgc2hvcnQgY2FyZHN0YXR1czsKKwl1bnNpZ25lZCBzaG9ydCBuZXdwdWJsaXNoZWRyY2E7Cit9IG1tY19yZXNwX3I2OworCitleHRlcm4gbW1jX2NhcmRfZGF0YSBtbWNfZGV2OworCit1bnNpZ25lZCBjaGFyIG1tY19sb3dsZXZlbF9pbml0KHZvaWQpOwordW5zaWduZWQgY2hhciBtbWNfc2VuZF9jb21tYW5kKHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGludCBhcmcsCisJCQkgICAgICAgdW5zaWduZWQgaW50ICpyZXNwb25zZSk7Cit1bnNpZ25lZCBjaGFyIG1tY19zZXR1cF9jbG9jayh1bnNpZ25lZCBpbnQgaWNsaywgdW5zaWduZWQgc2hvcnQgY2xrZCk7Cit1bnNpZ25lZCBjaGFyIG1tY19zZXRfb3BlbmRyYWluKHVuc2lnbmVkIGNoYXIgc3RhdGUpOwordW5zaWduZWQgY2hhciBtbWNfcmVhZF9kYXRhKHVuc2lnbmVkIGludCAqb3V0cHV0X2J1Zik7CisKKyNlbmRpZiAvKiBNTUNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcDMvbW1jX2hvc3RfZGVmLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwMy9tbWNfaG9zdF9kZWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZmIzNzZhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcDMvbW1jX2hvc3RfZGVmLmgKQEAgLTAsMCArMSwxNjYgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDgKKyAqIFRleGFzIEluc3RydW1lbnRzLCA8d3d3LnRpLmNvbT4KKyAqIFN5ZWQgTW9oYW1tZWQgS2hhc2ltIDxraGFzaW1AdGkuY29tPgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbidzIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpZm5kZWYgTU1DX0hPU1RfREVGX0gKKyNkZWZpbmUgTU1DX0hPU1RfREVGX0gKKworLyoKKyAqIE9NQVAgSFNNTUMgcmVnaXN0ZXIgZGVmaW5pdGlvbnMKKyAqLworI2RlZmluZSBPTUFQX0hTTU1DX1NZU0NPTkZJRwkJKCoodW5zaWduZWQgaW50ICopIDB4NDgwOUMwMTApCisjZGVmaW5lIE9NQVBfSFNNTUNfU1lTU1RBVFVTCQkoKih1bnNpZ25lZCBpbnQgKikgMHg0ODA5QzAxNCkKKyNkZWZpbmUgT01BUF9IU01NQ19DT04JCQkoKih1bnNpZ25lZCBpbnQgKikgMHg0ODA5QzAyQykKKyNkZWZpbmUgT01BUF9IU01NQ19CTEsJCQkoKih1bnNpZ25lZCBpbnQgKikgMHg0ODA5QzEwNCkKKyNkZWZpbmUgT01BUF9IU01NQ19BUkcJCQkoKih1bnNpZ25lZCBpbnQgKikgMHg0ODA5QzEwOCkKKyNkZWZpbmUgT01BUF9IU01NQ19DTUQJCQkoKih1bnNpZ25lZCBpbnQgKikgMHg0ODA5QzEwQykKKyNkZWZpbmUgT01BUF9IU01NQ19SU1AxMAkJKCoodW5zaWduZWQgaW50ICopIDB4NDgwOUMxMTApCisjZGVmaW5lIE9NQVBfSFNNTUNfUlNQMzIJCSgqKHVuc2lnbmVkIGludCAqKSAweDQ4MDlDMTE0KQorI2RlZmluZSBPTUFQX0hTTU1DX1JTUDU0CQkoKih1bnNpZ25lZCBpbnQgKikgMHg0ODA5QzExOCkKKyNkZWZpbmUgT01BUF9IU01NQ19SU1A3NgkJKCoodW5zaWduZWQgaW50ICopIDB4NDgwOUMxMUMpCisjZGVmaW5lIE9NQVBfSFNNTUNfREFUQQkJCSgqKHVuc2lnbmVkIGludCAqKSAweDQ4MDlDMTIwKQorI2RlZmluZSBPTUFQX0hTTU1DX1BTVEFURQkJKCoodW5zaWduZWQgaW50ICopIDB4NDgwOUMxMjQpCisjZGVmaW5lIE9NQVBfSFNNTUNfSENUTAkJCSgqKHVuc2lnbmVkIGludCAqKSAweDQ4MDlDMTI4KQorI2RlZmluZSBPTUFQX0hTTU1DX1NZU0NUTAkJKCoodW5zaWduZWQgaW50ICopIDB4NDgwOUMxMkMpCisjZGVmaW5lIE9NQVBfSFNNTUNfU1RBVAkJCSgqKHVuc2lnbmVkIGludCAqKSAweDQ4MDlDMTMwKQorI2RlZmluZSBPTUFQX0hTTU1DX0lFCQkJKCoodW5zaWduZWQgaW50ICopIDB4NDgwOUMxMzQpCisjZGVmaW5lIE9NQVBfSFNNTUNfQ0FQQQkJCSgqKHVuc2lnbmVkIGludCAqKSAweDQ4MDlDMTQwKQorCisvKiBUMiBSZWdpc3RlciBkZWZpbml0aW9ucyAqLworI2RlZmluZSBDT05UUk9MX0RFVl9DT05GMAkJKCoodW5zaWduZWQgaW50ICopIDB4NDgwMDIyNzQpCisjZGVmaW5lIENPTlRST0xfUEJJQVNfTElURQkJKCoodW5zaWduZWQgaW50ICopIDB4NDgwMDI1MjApCisKKy8qCisgKiBPTUFQIEhTIE1NQyBCaXQgZGVmaW5pdGlvbnMKKyAqLworI2RlZmluZSBNTUNfU09GVFJFU0VUCQkJKDB4MSA8PCAxKQorI2RlZmluZSBSRVNFVERPTkUJCQkoMHgxIDw8IDApCisjZGVmaW5lIE5PT1BFTkRSQUlOCQkJKDB4MCA8PCAwKQorI2RlZmluZSBPUEVORFJBSU4JCQkoMHgxIDw8IDApCisjZGVmaW5lIE9ECQkJCSgweDEgPDwgMCkKKyNkZWZpbmUgSU5JVF9OT0lOSVQJCQkoMHgwIDw8IDEpCisjZGVmaW5lIElOSVRfSU5JVFNUUkVBTQkJCSgweDEgPDwgMSkKKyNkZWZpbmUgSFJfTk9IT1NUUkVTUAkJCSgweDAgPDwgMikKKyNkZWZpbmUgU1RSX0JMT0NLIAkJCSgweDAgPDwgMykKKyNkZWZpbmUgTU9ERV9GVU5DCQkJKDB4MCA8PCA0KQorI2RlZmluZSBEVzhfMV80QklUTU9ERSAJCQkoMHgwIDw8IDUpCisjZGVmaW5lIE1JVF9DVE8JCQkJKDB4MCA8PCA2KQorI2RlZmluZSBDRFBfQUNUSVZFSElHSAkJCSgweDAgPDwgNykKKyNkZWZpbmUgV1BQX0FDVElWRUhJR0ggCQkJKDB4MCA8PCA4KQorI2RlZmluZSBSRVNFUlZFRF9NQVNLCQkJKDB4MyA8PCA5KQorI2RlZmluZSBDVFBMX01NQ19TRCAJCQkoMHgwIDw8IDExKQorI2RlZmluZSBCTEVOXzUxMkJZVEVTTEVOCQkoMHgyMDAgPDwgMCkKKyNkZWZpbmUgTkJMS19TVFBDTlQJCQkoMHgwIDw8IDE2KQorI2RlZmluZSBERV9ESVNBQkxFCQkJKDB4MCA8PCAwKQorI2RlZmluZSBCQ0VfRElTQUJMRQkJCSgweDAgPDwgMSkKKyNkZWZpbmUgQUNFTl9ESVNBQkxFCQkJKDB4MCA8PCAyKQorI2RlZmluZSBERElSX09GRlNFVAkJCSg0KQorI2RlZmluZSBERElSX01BU0sJCQkoMHgxIDw8IDQpCisjZGVmaW5lIERESVJfV1JJVEUJCQkoMHgwIDw8IDQpCisjZGVmaW5lIERESVJfUkVBRAkJCSgweDEgPDwgNCkKKyNkZWZpbmUgTVNCU19TR0xFQkxLCQkJKDB4MCA8PCA1KQorI2RlZmluZSBSU1BfVFlQRV9PRkZTRVQJCQkoMTYpCisjZGVmaW5lIFJTUF9UWVBFX01BU0sJCQkoMHgzIDw8IDE2KQorI2RlZmluZSBSU1BfVFlQRV9OT1JTUAkJCSgweDAgPDwgMTYpCisjZGVmaW5lIFJTUF9UWVBFX0xHSFQxMzYJCSgweDEgPDwgMTYpCisjZGVmaW5lIFJTUF9UWVBFX0xHSFQ0OAkJCSgweDIgPDwgMTYpCisjZGVmaW5lIFJTUF9UWVBFX0xHSFQ0OEIJCSgweDMgPDwgMTYpCisjZGVmaW5lIENDQ0VfTk9DSEVDSwkJCSgweDAgPDwgMTkpCisjZGVmaW5lIENDQ0VfQ0hFQ0sJCQkoMHgxIDw8IDE5KQorI2RlZmluZSBDSUNFX05PQ0hFQ0sJCQkoMHgwIDw8IDIwKQorI2RlZmluZSBDSUNFX0NIRUNLCQkJKDB4MSA8PCAyMCkKKyNkZWZpbmUgRFBfT0ZGU0VUCQkJKDIxKQorI2RlZmluZSBEUF9NQVNLCQkJCSgweDEgPDwgMjEpCisjZGVmaW5lIERQX05PX0RBVEEJCQkoMHgwIDw8IDIxKQorI2RlZmluZSBEUF9EQVRBCQkJCSgweDEgPDwgMjEpCisjZGVmaW5lIENNRF9UWVBFX05PUk1BTAkJCSgweDAgPDwgMjIpCisjZGVmaW5lIElOREVYX09GRlNFVAkJCSgyNCkKKyNkZWZpbmUgSU5ERVhfTUFTSwkJCSgweDNmIDw8IDI0KQorI2RlZmluZSBJTkRFWChpKQkJCShpIDw8IDI0KQorI2RlZmluZSBEQVRJX01BU0sJCQkoMHgxIDw8IDEpCisjZGVmaW5lIERBVElfQ01ERElTCQkJKDB4MSA8PCAxKQorI2RlZmluZSBEVFdfMV9CSVRNT0RFCQkJKDB4MCA8PCAxKQorI2RlZmluZSBEVFdfNF9CSVRNT0RFCQkJKDB4MSA8PCAxKQorI2RlZmluZSBTREJQX1BXUk9GRgkJCSgweDAgPDwgOCkKKyNkZWZpbmUgU0RCUF9QV1JPTgkJCSgweDEgPDwgOCkKKyNkZWZpbmUgU0RWU18xVjgJCQkoMHg1IDw8IDkpCisjZGVmaW5lIFNEVlNfM1YwCQkJKDB4NiA8PCA5KQorI2RlZmluZSBJQ0VfTUFTSwkJCSgweDEgPDwgMCkKKyNkZWZpbmUgSUNFX1NUT1AJCQkoMHgwIDw8IDApCisjZGVmaW5lIElDU19NQVNLCQkJKDB4MSA8PCAxKQorI2RlZmluZSBJQ1NfTk9UUkVBRFkJCQkoMHgwIDw8IDEpCisjZGVmaW5lIElDRV9PU0NJTExBVEUJCQkoMHgxIDw8IDApCisjZGVmaW5lIENFTl9NQVNLCQkJKDB4MSA8PCAyKQorI2RlZmluZSBDRU5fRElTQUJMRQkJCSgweDAgPDwgMikKKyNkZWZpbmUgQ0VOX0VOQUJMRQkJCSgweDEgPDwgMikKKyNkZWZpbmUgQ0xLRF9PRkZTRVQJCQkoNikKKyNkZWZpbmUgQ0xLRF9NQVNLCQkJKDB4M0ZGIDw8IDYpCisjZGVmaW5lIERUT19NQVNLCQkJKDB4RiA8PCAxNikKKyNkZWZpbmUgRFRPXzE1VEhEVE8JCQkoMHhFIDw8IDE2KQorI2RlZmluZSBTT0ZUUkVTRVRBTEwJCQkoMHgxIDw8IDI0KQorI2RlZmluZSBDQ19NQVNLCQkJCSgweDEgPDwgMCkKKyNkZWZpbmUgVENfTUFTSwkJCQkoMHgxIDw8IDEpCisjZGVmaW5lIEJXUl9NQVNLCQkJKDB4MSA8PCA0KQorI2RlZmluZSBCUlJfTUFTSwkJCSgweDEgPDwgNSkKKyNkZWZpbmUgRVJSSV9NQVNLCQkJKDB4MSA8PCAxNSkKKyNkZWZpbmUgSUVfQ0MJCQkJKDB4MDEgPDwgMCkKKyNkZWZpbmUgSUVfVEMJCQkJKDB4MDEgPDwgMSkKKyNkZWZpbmUgSUVfQldSCQkJCSgweDAxIDw8IDQpCisjZGVmaW5lIElFX0JSUgkJCQkoMHgwMSA8PCA1KQorI2RlZmluZSBJRV9DVE8JCQkJKDB4MDEgPDwgMTYpCisjZGVmaW5lIElFX0NDUkMJCQkJKDB4MDEgPDwgMTcpCisjZGVmaW5lIElFX0NFQgkJCQkoMHgwMSA8PCAxOCkKKyNkZWZpbmUgSUVfQ0lFCQkJCSgweDAxIDw8IDE5KQorI2RlZmluZSBJRV9EVE8JCQkJKDB4MDEgPDwgMjApCisjZGVmaW5lIElFX0RDUkMJCQkJKDB4MDEgPDwgMjEpCisjZGVmaW5lIElFX0RFQgkJCQkoMHgwMSA8PCAyMikKKyNkZWZpbmUgSUVfQ0VSUgkJCQkoMHgwMSA8PCAyOCkKKyNkZWZpbmUgSUVfQkFEQQkJCQkoMHgwMSA8PCAyOSkKKworI2RlZmluZSBWUzMwXzNWMFNVUAkJCSgxIDw8IDI1KQorI2RlZmluZSBWUzE4XzFWOFNVUAkJCSgxIDw8IDI2KQorCisvKiBEcml2ZXIgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgTU1DU0RfU0VDVE9SX1NJWkUJCTUxMgorI2RlZmluZSBNTUNfQ0FSRAkJCTAKKyNkZWZpbmUgU0RfQ0FSRAkJCQkxCisjZGVmaW5lIEJZVEVfTU9ERQkJCTAKKyNkZWZpbmUgU0VDVE9SX01PREUJCQkxCisjZGVmaW5lIENMS19JTklUU0VRCQkJMAorI2RlZmluZSBDTEtfNDAwS0haCQkJMQorI2RlZmluZSBDTEtfTUlTQwkJCTIKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGludCBjYXJkX3R5cGU7CisJdW5zaWduZWQgaW50IHZlcnNpb247CisJdW5zaWduZWQgaW50IG1vZGU7CisJdW5zaWduZWQgaW50IHNpemU7CisJdW5zaWduZWQgaW50IFJDQTsKK30gbW1jX2NhcmRfZGF0YTsKKworI2RlZmluZSBtbWNfcmVnX291dChhZGRyLCBtYXNrLCB2YWwpXAorCShhZGRyKSA9ICgoKGFkZHIpKSAmICh+KG1hc2spKSkgfCAoKHZhbCkgJiAobWFzaykpOworI2RlZmluZSBtbWNfcmVnX291dChhZGRyLCBtYXNrLCB2YWwpXAorCShhZGRyKSA9ICgoKGFkZHIpKSAmICh+KG1hc2spKSkgfCAoKHZhbCkgJiAobWFzaykpOworCisjZW5kaWYgLyogTU1DX0hPU1RfREVGX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAzL211eC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcDMvbXV4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGMwMWM3MwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAzL211eC5oCkBAIC0wLDAgKzEsNDEyIEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDA2LTIwMDgKKyAqIFRleGFzIEluc3RydW1lbnRzLCA8d3d3LnRpLmNvbT4KKyAqIFN5ZWQgTW9oYW1tZWQgS2hhc2ltIDx4MGtoYXNpbUB0aS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKyNpZm5kZWYgX01VWF9IXworI2RlZmluZSBfTVVYX0hfCisKKy8qCisgKiBJRU4gIC0gSW5wdXQgRW5hYmxlCisgKiBJRElTIC0gSW5wdXQgRGlzYWJsZQorICogUFREICAtIFB1bGwgdHlwZSBEb3duCisgKiBQVFUgIC0gUHVsbCB0eXBlIFVwCisgKiBESVMgIC0gUHVsbCB0eXBlIHNlbGVjdGlvbiBpcyBpbmFjdGl2ZQorICogRU4gICAtIFB1bGwgdHlwZSBzZWxlY3Rpb24gaXMgYWN0aXZlCisgKiBNMCAgIC0gTW9kZSAwCisgKi8KKworI2RlZmluZSBJRU4JKDEgPDwgOCkKKworI2RlZmluZSBJRElTCSgwIDw8IDgpCisjZGVmaW5lIFBUVQkoMSA8PCA0KQorI2RlZmluZSBQVEQJKDAgPDwgNCkKKyNkZWZpbmUgRU4JKDEgPDwgMykKKyNkZWZpbmUgRElTCSgwIDw8IDMpCisKKyNkZWZpbmUgTTAJMAorI2RlZmluZSBNMQkxCisjZGVmaW5lIE0yCTIKKyNkZWZpbmUgTTMJMworI2RlZmluZSBNNAk0CisjZGVmaW5lIE01CTUKKyNkZWZpbmUgTTYJNgorI2RlZmluZSBNNwk3CisKKy8qCisgKiBUbyBnZXQgdGhlIGFjdHVhbCBhZGRyZXNzIHRoZSBvZmZzZXQgaGFzIHRvIGFkZGVkCisgKiB3aXRoIE9NQVAzNFhYX0NUUkxfQkFTRSB0byBnZXQgdGhlIGFjdHVhbCBhZGRyZXNzCisgKi8KKworLypTRFJDKi8KKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX1NEUkNfRDAJCTB4MDAzMAorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfU0RSQ19EMQkJMHgwMDMyCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9TRFJDX0QyCQkweDAwMzQKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX1NEUkNfRDMJCTB4MDAzNgorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfU0RSQ19ENAkJMHgwMDM4CisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9TRFJDX0Q1CQkweDAwM0EKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX1NEUkNfRDYJCTB4MDAzQworI2RlZmluZSBDT05UUk9MX1BBRENPTkZfU0RSQ19ENwkJMHgwMDNFCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9TRFJDX0Q4CQkweDAwNDAKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX1NEUkNfRDkJCTB4MDA0MgorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfU0RSQ19EMTAJMHgwMDQ0CisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9TRFJDX0QxMQkweDAwNDYKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX1NEUkNfRDEyCTB4MDA0OAorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfU0RSQ19EMTMJMHgwMDRBCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9TRFJDX0QxNAkweDAwNEMKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX1NEUkNfRDE1CTB4MDA0RQorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfU0RSQ19EMTYJMHgwMDUwCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9TRFJDX0QxNwkweDAwNTIKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX1NEUkNfRDE4CTB4MDA1NAorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfU0RSQ19EMTkJMHgwMDU2CisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9TRFJDX0QyMAkweDAwNTgKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX1NEUkNfRDIxCTB4MDA1QQorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfU0RSQ19EMjIJMHgwMDVDCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9TRFJDX0QyMwkweDAwNUUKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX1NEUkNfRDI0CTB4MDA2MAorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfU0RSQ19EMjUJMHgwMDYyCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9TRFJDX0QyNgkweDAwNjQKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX1NEUkNfRDI3CTB4MDA2NgorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfU0RSQ19EMjgJMHgwMDY4CisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9TRFJDX0QyOQkweDAwNkEKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX1NEUkNfRDMwCTB4MDA2QworI2RlZmluZSBDT05UUk9MX1BBRENPTkZfU0RSQ19EMzEJMHgwMDZFCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9TRFJDX0NMSwkweDAwNzAKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX1NEUkNfRFFTMAkweDAwNzIKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX1NEUkNfRFFTMQkweDAwNzQKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX1NEUkNfRFFTMgkweDAwNzYKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX1NEUkNfRFFTMwkweDAwNzgKKy8qR1BNQyovCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9HUE1DX0ExCQkweDAwN0EKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX0dQTUNfQTIJCTB4MDA3QworI2RlZmluZSBDT05UUk9MX1BBRENPTkZfR1BNQ19BMwkJMHgwMDdFCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9HUE1DX0E0CQkweDAwODAKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX0dQTUNfQTUJCTB4MDA4MgorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfR1BNQ19BNgkJMHgwMDg0CisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9HUE1DX0E3CQkweDAwODYKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX0dQTUNfQTgJCTB4MDA4OAorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfR1BNQ19BOQkJMHgwMDhBCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9HUE1DX0ExMAkweDAwOEMKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX0dQTUNfRDAJCTB4MDA4RQorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfR1BNQ19EMQkJMHgwMDkwCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9HUE1DX0QyCQkweDAwOTIKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX0dQTUNfRDMJCTB4MDA5NAorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfR1BNQ19ENAkJMHgwMDk2CisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9HUE1DX0Q1CQkweDAwOTgKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX0dQTUNfRDYJCTB4MDA5QQorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfR1BNQ19ENwkJMHgwMDlDCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9HUE1DX0Q4CQkweDAwOUUKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX0dQTUNfRDkJCTB4MDBBMAorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfR1BNQ19EMTAJMHgwMEEyCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9HUE1DX0QxMQkweDAwQTQKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX0dQTUNfRDEyCTB4MDBBNgorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfR1BNQ19EMTMJMHgwMEE4CisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9HUE1DX0QxNAkweDAwQUEKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX0dQTUNfRDE1CTB4MDBBQworI2RlZmluZSBDT05UUk9MX1BBRENPTkZfR1BNQ19OQ1MwCTB4MDBBRQorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfR1BNQ19OQ1MxCTB4MDBCMAorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfR1BNQ19OQ1MyCTB4MDBCMgorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfR1BNQ19OQ1MzCTB4MDBCNAorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfR1BNQ19OQ1M0CTB4MDBCNgorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfR1BNQ19OQ1M1CTB4MDBCOAorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfR1BNQ19OQ1M2CTB4MDBCQQorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfR1BNQ19OQ1M3CTB4MDBCQworI2RlZmluZSBDT05UUk9MX1BBRENPTkZfR1BNQ19DTEsJMHgwMEJFCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9HUE1DX05BRFZfQUxFCTB4MDBDMAorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfR1BNQ19OT0UJMHgwMEMyCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9HUE1DX05XRQkweDAwQzQKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX0dQTUNfTkJFMF9DTEUJMHgwMEM2CisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9HUE1DX05CRTEJMHgwMEM4CisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9HUE1DX05XUAkweDAwQ0EKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX0dQTUNfV0FJVDAJMHgwMENDCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9HUE1DX1dBSVQxCTB4MDBDRQorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfR1BNQ19XQUlUMgkweDAwRDAKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX0dQTUNfV0FJVDMJMHgwMEQyCisvKkRTUyovCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9EU1NfUENMSwkweDAwRDQKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX0RTU19IU1lOQwkweDAwRDYKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX0RTU19WU1lOQwkweDAwRDgKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX0RTU19BQ0JJQVMJMHgwMERBCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9EU1NfREFUQTAJMHgwMERDCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9EU1NfREFUQTEJMHgwMERFCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9EU1NfREFUQTIJMHgwMEUwCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9EU1NfREFUQTMJMHgwMEUyCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9EU1NfREFUQTQJMHgwMEU0CisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9EU1NfREFUQTUJMHgwMEU2CisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9EU1NfREFUQTYJMHgwMEU4CisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9EU1NfREFUQTcJMHgwMEVBCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9EU1NfREFUQTgJMHgwMEVDCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9EU1NfREFUQTkJMHgwMEVFCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9EU1NfREFUQTEwCTB4MDBGMAorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfRFNTX0RBVEExMQkweDAwRjIKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX0RTU19EQVRBMTIJMHgwMEY0CisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9EU1NfREFUQTEzCTB4MDBGNgorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfRFNTX0RBVEExNAkweDAwRjgKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX0RTU19EQVRBMTUJMHgwMEZBCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9EU1NfREFUQTE2CTB4MDBGQworI2RlZmluZSBDT05UUk9MX1BBRENPTkZfRFNTX0RBVEExNwkweDAwRkUKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX0RTU19EQVRBMTgJMHgwMTAwCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9EU1NfREFUQTE5CTB4MDEwMgorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfRFNTX0RBVEEyMAkweDAxMDQKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX0RTU19EQVRBMjEJMHgwMTA2CisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9EU1NfREFUQTIyCTB4MDEwOAorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfRFNTX0RBVEEyMwkweDAxMEEKKy8qQ0FNRVJBKi8KKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX0NBTV9IUwkJMHgwMTBDCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9DQU1fVlMJCTB4MDEwRQorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfQ0FNX1hDTEtBCTB4MDExMAorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfQ0FNX1BDTEsJMHgwMTEyCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9DQU1fRkxECQkweDAxMTQKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX0NBTV9EMAkJMHgwMTE2CisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9DQU1fRDEJCTB4MDExOAorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfQ0FNX0QyCQkweDAxMUEKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX0NBTV9EMwkJMHgwMTFDCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9DQU1fRDQJCTB4MDExRQorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfQ0FNX0Q1CQkweDAxMjAKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX0NBTV9ENgkJMHgwMTIyCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9DQU1fRDcJCTB4MDEyNAorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfQ0FNX0Q4CQkweDAxMjYKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX0NBTV9EOQkJMHgwMTI4CisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9DQU1fRDEwCQkweDAxMkEKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX0NBTV9EMTEJCTB4MDEyQworI2RlZmluZSBDT05UUk9MX1BBRENPTkZfQ0FNX1hDTEtCCTB4MDEyRQorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfQ0FNX1dFTgkJMHgwMTMwCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9DQU1fU1RST0JFCTB4MDEzMgorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfQ1NJMl9EWDAJMHgwMTM0CisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9DU0kyX0RZMAkweDAxMzYKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX0NTSTJfRFgxCTB4MDEzOAorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfQ1NJMl9EWTEJMHgwMTNBCisvKkF1ZGlvIEludGVyZmFjZSAqLworI2RlZmluZSBDT05UUk9MX1BBRENPTkZfTUNCU1AyX0ZTWAkweDAxM0MKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX01DQlNQMl9DTEtYCTB4MDEzRQorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfTUNCU1AyX0RSCTB4MDE0MAorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfTUNCU1AyX0RYCTB4MDE0MgorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfTU1DMV9DTEsJMHgwMTQ0CisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9NTUMxX0NNRAkweDAxNDYKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX01NQzFfREFUMAkweDAxNDgKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX01NQzFfREFUMQkweDAxNEEKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX01NQzFfREFUMgkweDAxNEMKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX01NQzFfREFUMwkweDAxNEUKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX01NQzFfREFUNAkweDAxNTAKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX01NQzFfREFUNQkweDAxNTIKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX01NQzFfREFUNgkweDAxNTQKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX01NQzFfREFUNwkweDAxNTYKKy8qV2lyZWxlc3MgTEFOICovCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9NTUMyX0NMSwkweDAxNTgKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX01NQzJfQ01ECTB4MDE1QQorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfTU1DMl9EQVQwCTB4MDE1QworI2RlZmluZSBDT05UUk9MX1BBRENPTkZfTU1DMl9EQVQxCTB4MDE1RQorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfTU1DMl9EQVQyCTB4MDE2MAorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfTU1DMl9EQVQzCTB4MDE2MgorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfTU1DMl9EQVQ0CTB4MDE2NAorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfTU1DMl9EQVQ1CTB4MDE2NgorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfTU1DMl9EQVQ2CTB4MDE2OAorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfTU1DMl9EQVQ3CTB4MDE2QQorLypCbHVldG9vdGgqLworI2RlZmluZSBDT05UUk9MX1BBRENPTkZfTUNCU1AzX0RYCTB4MDE2QworI2RlZmluZSBDT05UUk9MX1BBRENPTkZfTUNCU1AzX0RSCTB4MDE2RQorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfTUNCU1AzX0NMS1gJMHgwMTcwCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9NQ0JTUDNfRlNYCTB4MDE3MgorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfVUFSVDJfQ1RTCTB4MDE3NAorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfVUFSVDJfUlRTCTB4MDE3NgorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfVUFSVDJfVFgJMHgwMTc4CisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9VQVJUMl9SWAkweDAxN0EKKy8qTW9kZW0gSW50ZXJmYWNlICovCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9VQVJUMV9UWAkweDAxN0MKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX1VBUlQxX1JUUwkweDAxN0UKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX1VBUlQxX0NUUwkweDAxODAKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX1VBUlQxX1JYCTB4MDE4MgorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfTUNCU1A0X0NMS1gJMHgwMTg0CisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9NQ0JTUDRfRFIJMHgwMTg2CisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9NQ0JTUDRfRFgJMHgwMTg4CisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9NQ0JTUDRfRlNYCTB4MDE4QQorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfTUNCU1AxX0NMS1IJMHgwMThDCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9NQ0JTUDFfRlNSCTB4MDE4RQorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfTUNCU1AxX0RYCTB4MDE5MAorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfTUNCU1AxX0RSCTB4MDE5MgorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfTUNCU1BfQ0xLUwkweDAxOTQKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX01DQlNQMV9GU1gJMHgwMTk2CisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9NQ0JTUDFfQ0xLWAkweDAxOTgKKy8qU2VyaWFsIEludGVyZmFjZSovCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9VQVJUM19DVFNfUkNUWAkweDAxOUEKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX1VBUlQzX1JUU19TRAkweDAxOUMKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX1VBUlQzX1JYX0lSUlgJMHgwMTlFCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9VQVJUM19UWF9JUlRYCTB4MDFBMAorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfSFNVU0IwX0NMSwkweDAxQTIKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX0hTVVNCMF9TVFAJMHgwMUE0CisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9IU1VTQjBfRElSCTB4MDFBNgorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfSFNVU0IwX05YVAkweDAxQTgKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX0hTVVNCMF9EQVRBMAkweDAxQUEKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX0hTVVNCMF9EQVRBMQkweDAxQUMKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX0hTVVNCMF9EQVRBMgkweDAxQUUKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX0hTVVNCMF9EQVRBMwkweDAxQjAKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX0hTVVNCMF9EQVRBNAkweDAxQjIKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX0hTVVNCMF9EQVRBNQkweDAxQjQKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX0hTVVNCMF9EQVRBNgkweDAxQjYKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX0hTVVNCMF9EQVRBNwkweDAxQjgKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX0kyQzFfU0NMCTB4MDFCQQorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfSTJDMV9TREEJMHgwMUJDCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9JMkMyX1NDTAkweDAxQkUKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX0kyQzJfU0RBCTB4MDFDMAorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfSTJDM19TQ0wJMHgwMUMyCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9JMkMzX1NEQQkweDAxQzQKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX0kyQzRfU0NMCTB4MEEwMAorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfSTJDNF9TREEJMHgwQTAyCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9IRFFfU0lPCQkweDAxQzYKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX01DU1BJMV9DTEsJMHgwMUM4CisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9NQ1NQSTFfU0lNTwkweDAxQ0EKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX01DU1BJMV9TT01JCTB4MDFDQworI2RlZmluZSBDT05UUk9MX1BBRENPTkZfTUNTUEkxX0NTMAkweDAxQ0UKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX01DU1BJMV9DUzEJMHgwMUQwCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9NQ1NQSTFfQ1MyCTB4MDFEMgorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfTUNTUEkxX0NTMwkweDAxRDQKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX01DU1BJMl9DTEsJMHgwMUQ2CisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9NQ1NQSTJfU0lNTwkweDAxRDgKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX01DU1BJMl9TT01JCTB4MDFEQQorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfTUNTUEkyX0NTMAkweDAxREMKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX01DU1BJMl9DUzEJMHgwMURFCisvKkNvbnRyb2wgYW5kIGRlYnVnICovCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9TWVNfMzJLCQkweDBBMDQKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX1NZU19DTEtSRVEJMHgwQTA2CisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9TWVNfTklSUQkweDAxRTAKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX1NZU19CT09UMAkweDBBMEEKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX1NZU19CT09UMQkweDBBMEMKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX1NZU19CT09UMgkweDBBMEUKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX1NZU19CT09UMwkweDBBMTAKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX1NZU19CT09UNAkweDBBMTIKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX1NZU19CT09UNQkweDBBMTQKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX1NZU19CT09UNgkweDBBMTYKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX1NZU19PRkZfTU9ERQkweDBBMTgKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX1NZU19DTEtPVVQxCTB4MEExQQorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfU1lTX0NMS09VVDIJMHgwMUUyCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9KVEFHX25UUlNUCTB4MEExQworI2RlZmluZSBDT05UUk9MX1BBRENPTkZfSlRBR19UQ0sJMHgwQTFFCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9KVEFHX1RNUwkweDBBMjAKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX0pUQUdfVERJCTB4MEEyMgorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfSlRBR19FTVUwCTB4MEEyNAorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfSlRBR19FTVUxCTB4MEEyNgorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfRVRLX0NMSwkJMHgwQTI4CisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9FVEtfQ1RMCQkweDBBMkEKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX0VUS19EMAkJMHgwQTJDCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9FVEtfRDEJCTB4MEEyRQorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfRVRLX0QyCQkweDBBMzAKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX0VUS19EMwkJMHgwQTMyCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9FVEtfRDQJCTB4MEEzNAorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfRVRLX0Q1CQkweDBBMzYKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX0VUS19ENgkJMHgwQTM4CisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9FVEtfRDcJCTB4MEEzQQorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfRVRLX0Q4CQkweDBBM0MKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX0VUS19EOQkJMHgwQTNFCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9FVEtfRDEwCQkweDBBNDAKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX0VUS19EMTEJCTB4MEE0MgorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfRVRLX0QxMgkJMHgwQTQ0CisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9FVEtfRDEzCQkweDBBNDYKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX0VUS19EMTQJCTB4MEE0OAorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfRVRLX0QxNQkJMHgwQTRBCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9FVEtfQ0xLX0VTMgkweDA1RDgKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX0VUS19DVExfRVMyCTB4MDVEQQorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfRVRLX0QwX0VTMgkweDA1REMKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX0VUS19EMV9FUzIJMHgwNURFCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9FVEtfRDJfRVMyCTB4MDVFMAorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfRVRLX0QzX0VTMgkweDA1RTIKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX0VUS19ENF9FUzIJMHgwNUU0CisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9FVEtfRDVfRVMyCTB4MDVFNgorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfRVRLX0Q2X0VTMgkweDA1RTgKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX0VUS19EN19FUzIJMHgwNUVBCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9FVEtfRDhfRVMyCTB4MDVFQworI2RlZmluZSBDT05UUk9MX1BBRENPTkZfRVRLX0Q5X0VTMgkweDA1RUUKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX0VUS19EMTBfRVMyCTB4MDVGMAorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfRVRLX0QxMV9FUzIJMHgwNUYyCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9FVEtfRDEyX0VTMgkweDA1RjQKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX0VUS19EMTNfRVMyCTB4MDVGNgorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfRVRLX0QxNF9FUzIJMHgwNUY4CisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9FVEtfRDE1X0VTMgkweDA1RkEKKy8qRGllIHRvIERpZSAqLworI2RlZmluZSBDT05UUk9MX1BBRENPTkZfRDJEX01DQUQwCTB4MDFFNAorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfRDJEX01DQUQxCTB4MDFFNgorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfRDJEX01DQUQyCTB4MDFFOAorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfRDJEX01DQUQzCTB4MDFFQQorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfRDJEX01DQUQ0CTB4MDFFQworI2RlZmluZSBDT05UUk9MX1BBRENPTkZfRDJEX01DQUQ1CTB4MDFFRQorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfRDJEX01DQUQ2CTB4MDFGMAorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfRDJEX01DQUQ3CTB4MDFGMgorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfRDJEX01DQUQ4CTB4MDFGNAorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfRDJEX01DQUQ5CTB4MDFGNgorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfRDJEX01DQUQxMAkweDAxRjgKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX0QyRF9NQ0FEMTEJMHgwMUZBCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9EMkRfTUNBRDEyCTB4MDFGQworI2RlZmluZSBDT05UUk9MX1BBRENPTkZfRDJEX01DQUQxMwkweDAxRkUKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX0QyRF9NQ0FEMTQJMHgwMjAwCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9EMkRfTUNBRDE1CTB4MDIwMgorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfRDJEX01DQUQxNgkweDAyMDQKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX0QyRF9NQ0FEMTcJMHgwMjA2CisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9EMkRfTUNBRDE4CTB4MDIwOAorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfRDJEX01DQUQxOQkweDAyMEEKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX0QyRF9NQ0FEMjAJMHgwMjBDCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9EMkRfTUNBRDIxCTB4MDIwRQorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfRDJEX01DQUQyMgkweDAyMTAKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX0QyRF9NQ0FEMjMJMHgwMjEyCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9EMkRfTUNBRDI0CTB4MDIxNAorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfRDJEX01DQUQyNQkweDAyMTYKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX0QyRF9NQ0FEMjYJMHgwMjE4CisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9EMkRfTUNBRDI3CTB4MDIxQQorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfRDJEX01DQUQyOAkweDAyMUMKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX0QyRF9NQ0FEMjkJMHgwMjFFCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9EMkRfTUNBRDMwCTB4MDIyMAorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfRDJEX01DQUQzMQkweDAyMjIKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX0QyRF9NQ0FEMzIJMHgwMjI0CisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9EMkRfTUNBRDMzCTB4MDIyNgorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfRDJEX01DQUQzNAkweDAyMjgKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX0QyRF9NQ0FEMzUJMHgwMjJBCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9EMkRfTUNBRDM2CTB4MDIyQworI2RlZmluZSBDT05UUk9MX1BBRENPTkZfRDJEX0NMSzI2TUkJMHgwMjJFCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9EMkRfTlJFU1BXUk9OCTB4MDIzMAorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfRDJEX05SRVNXQVJNCTB4MDIzMgorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfRDJEX0FSTTlOSVJRCTB4MDIzNAorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfRDJEX1VNQTJQNkZJUQkweDAyMzYKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX0QyRF9TUElOVAkweDAyMzgKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX0QyRF9GUklOVAkweDAyM0EKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX0QyRF9ETUFSRVEwCTB4MDIzQworI2RlZmluZSBDT05UUk9MX1BBRENPTkZfRDJEX0RNQVJFUTEJMHgwMjNFCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9EMkRfRE1BUkVRMgkweDAyNDAKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX0QyRF9ETUFSRVEzCTB4MDI0MgorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfRDJEX04zR1RSU1QJMHgwMjQ0CisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9EMkRfTjNHVERJCTB4MDI0NgorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfRDJEX04zR1RETwkweDAyNDgKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX0QyRF9OM0dUTVMJMHgwMjRBCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9EMkRfTjNHVENLCTB4MDI0QworI2RlZmluZSBDT05UUk9MX1BBRENPTkZfRDJEX04zR1JUQ0sJMHgwMjRFCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9EMkRfTVNUREJZCTB4MDI1MAorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfRDJEX1NXQUtFVVAJMHgwQTRDCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9EMkRfSURMRVJFUQkweDAyNTIKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX0QyRF9JRExFQUNLCTB4MDI1NAorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfRDJEX01XUklURQkweDAyNTYKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX0QyRF9TV1JJVEUJMHgwMjU4CisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9EMkRfTVJFQUQJMHgwMjVBCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9EMkRfU1JFQUQJMHgwMjVDCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9EMkRfTUJVU0ZMQUcJMHgwMjVFCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9EMkRfU0JVU0ZMQUcJMHgwMjYwCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9TRFJDX0NLRTAJMHgwMjYyCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9TRFJDX0NLRTEJMHgwMjY0CisKKyNkZWZpbmUgTVVYX1ZBTChPRkZTRVQsVkFMVUUpXAorCXdyaXRldygoVkFMVUUpLCBPTUFQMzRYWF9DVFJMX0JBU0UgKyAoT0ZGU0VUKSk7CisKKyNkZWZpbmUJQ1AoeCkJKENPTlRST0xfUEFEQ09ORl8jI3gpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcDMvb21hcDMuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAzL29tYXAzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQ3MzY1NgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAzL29tYXAzLmgKQEAgLTAsMCArMSwyMTggQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDYtMjAwOAorICogVGV4YXMgSW5zdHJ1bWVudHMsIDx3d3cudGkuY29tPgorICogUmljaGFyZCBXb29kcnVmZiA8ci13b29kcnVmZjJAdGkuY29tPgorICogU3llZCBNb2hhbW1lZCBLaGFzaW0gPHgwa2hhc2ltQHRpLmNvbT4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaWZuZGVmIF9PTUFQM19IXworI2RlZmluZSBfT01BUDNfSF8KKworLyogU3R1ZmYgb24gTDMgSW50ZXJjb25uZWN0ICovCisjZGVmaW5lIFNNWF9BUEVfQkFTRQkJCTB4NjgwMDAwMDAKKworLyogR1BNQyAqLworI2RlZmluZSBPTUFQMzRYWF9HUE1DX0JBU0UJCTB4NkUwMDAwMDAKKworLyogU01TICovCisjZGVmaW5lIE9NQVAzNFhYX1NNU19CQVNFCQkweDZDMDAwMDAwCisKKy8qIFNEUkMgKi8KKyNkZWZpbmUgT01BUDM0WFhfU0RSQ19CQVNFCQkweDZEMDAwMDAwCisKKy8qCisgKiBMNCBQZXJpcGhlcmFscyAtIEw0IFdha2V1cCBhbmQgTDQgQ29yZSBub3cKKyAqLworI2RlZmluZSBPTUFQMzRYWF9DT1JFX0w0X0lPX0JBU0UJMHg0ODAwMDAwMAorI2RlZmluZSBPTUFQMzRYWF9XQUtFVVBfTDRfSU9fQkFTRQkweDQ4MzAwMDAwCisjZGVmaW5lIE9NQVAzNFhYX0w0X1BFUgkJCTB4NDkwMDAwMDAKKyNkZWZpbmUgT01BUDM0WFhfTDRfSU9fQkFTRQkJT01BUDM0WFhfQ09SRV9MNF9JT19CQVNFCisKKy8qIENPTlRST0wgKi8KKyNkZWZpbmUgT01BUDM0WFhfQ1RSTF9CQVNFCQkoT01BUDM0WFhfTDRfSU9fQkFTRSArIDB4MjAwMCkKKworLyogVUFSVCAqLworI2RlZmluZSBPTUFQMzRYWF9VQVJUMQkJCShPTUFQMzRYWF9MNF9JT19CQVNFICsgMHg2YTAwMCkKKyNkZWZpbmUgT01BUDM0WFhfVUFSVDIJCQkoT01BUDM0WFhfTDRfSU9fQkFTRSArIDB4NmMwMDApCisjZGVmaW5lIE9NQVAzNFhYX1VBUlQzCQkJKE9NQVAzNFhYX0w0X1BFUiArIDB4MjAwMDApCisKKy8qIEdlbmVyYWwgUHVycG9zZSBUaW1lcnMgKi8KKyNkZWZpbmUgT01BUDM0WFhfR1BUMQkJCTB4NDgzMTgwMDAKKyNkZWZpbmUgT01BUDM0WFhfR1BUMgkJCTB4NDkwMzIwMDAKKyNkZWZpbmUgT01BUDM0WFhfR1BUMwkJCTB4NDkwMzQwMDAKKyNkZWZpbmUgT01BUDM0WFhfR1BUNAkJCTB4NDkwMzYwMDAKKyNkZWZpbmUgT01BUDM0WFhfR1BUNQkJCTB4NDkwMzgwMDAKKyNkZWZpbmUgT01BUDM0WFhfR1BUNgkJCTB4NDkwM0EwMDAKKyNkZWZpbmUgT01BUDM0WFhfR1BUNwkJCTB4NDkwM0MwMDAKKyNkZWZpbmUgT01BUDM0WFhfR1BUOAkJCTB4NDkwM0UwMDAKKyNkZWZpbmUgT01BUDM0WFhfR1BUOQkJCTB4NDkwNDAwMDAKKyNkZWZpbmUgT01BUDM0WFhfR1BUMTAJCQkweDQ4MDg2MDAwCisjZGVmaW5lIE9NQVAzNFhYX0dQVDExCQkJMHg0ODA4ODAwMAorI2RlZmluZSBPTUFQMzRYWF9HUFQxMgkJCTB4NDgzMDQwMDAKKworLyogV2F0Y2hEb2cgVGltZXJzICgxIHNlY3VyZSwgMyBHUCkgKi8KKyNkZWZpbmUgV0QxX0JBU0UJCQkweDQ4MzBDMDAwCisjZGVmaW5lIFdEMl9CQVNFCQkJMHg0ODMxNDAwMAorI2RlZmluZSBXRDNfQkFTRQkJCTB4NDkwMzAwMDAKKworLyogMzJLVElNRVIgKi8KKyNkZWZpbmUgU1lOQ18zMktUSU1FUl9CQVNFCQkweDQ4MzIwMDAwCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKK3R5cGVkZWYgc3RydWN0IHMzMmt0aW1lciB7CisJdW5zaWduZWQgY2hhciByZXNbMHgxMF07CisJdW5zaWduZWQgaW50IHMzMmtfY3I7CQkvKiAweDEwICovCit9IHMzMmt0aW1lcl90OworCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisKKy8qIE9NQVAzIEdQSU8gcmVnaXN0ZXJzICovCisjZGVmaW5lIE9NQVAzNFhYX0dQSU8xX0JBU0UJCTB4NDgzMTAwMDAKKyNkZWZpbmUgT01BUDM0WFhfR1BJTzJfQkFTRQkJMHg0OTA1MDAwMAorI2RlZmluZSBPTUFQMzRYWF9HUElPM19CQVNFCQkweDQ5MDUyMDAwCisjZGVmaW5lIE9NQVAzNFhYX0dQSU80X0JBU0UJCTB4NDkwNTQwMDAKKyNkZWZpbmUgT01BUDM0WFhfR1BJTzVfQkFTRQkJMHg0OTA1NjAwMAorI2RlZmluZSBPTUFQMzRYWF9HUElPNl9CQVNFCQkweDQ5MDU4MDAwCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCit0eXBlZGVmIHN0cnVjdCBncGlvIHsKKwl1bnNpZ25lZCBjaGFyIHJlczFbMHgzNF07CisJdW5zaWduZWQgaW50IG9lOwkJLyogMHgzNCAqLworCXVuc2lnbmVkIGNoYXIgcmVzMlsweDU4XTsKKwl1bnNpZ25lZCBpbnQgY2xlYXJkYXRhb3V0OwkvKiAweDkwICovCisJdW5zaWduZWQgaW50IHNldGRhdGFvdXQ7CS8qIDB4OTQgKi8KK30gZ3Bpb190OworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworCisjZGVmaW5lIEdQSU8wCQkJCSgweDEgPDwgMCkKKyNkZWZpbmUgR1BJTzEJCQkJKDB4MSA8PCAxKQorI2RlZmluZSBHUElPMgkJCQkoMHgxIDw8IDIpCisjZGVmaW5lIEdQSU8zCQkJCSgweDEgPDwgMykKKyNkZWZpbmUgR1BJTzQJCQkJKDB4MSA8PCA0KQorI2RlZmluZSBHUElPNQkJCQkoMHgxIDw8IDUpCisjZGVmaW5lIEdQSU82CQkJCSgweDEgPDwgNikKKyNkZWZpbmUgR1BJTzcJCQkJKDB4MSA8PCA3KQorI2RlZmluZSBHUElPOAkJCQkoMHgxIDw8IDgpCisjZGVmaW5lIEdQSU85CQkJCSgweDEgPDwgOSkKKyNkZWZpbmUgR1BJTzEwCQkJCSgweDEgPDwgMTApCisjZGVmaW5lIEdQSU8xMQkJCQkoMHgxIDw8IDExKQorI2RlZmluZSBHUElPMTIJCQkJKDB4MSA8PCAxMikKKyNkZWZpbmUgR1BJTzEzCQkJCSgweDEgPDwgMTMpCisjZGVmaW5lIEdQSU8xNAkJCQkoMHgxIDw8IDE0KQorI2RlZmluZSBHUElPMTUJCQkJKDB4MSA8PCAxNSkKKyNkZWZpbmUgR1BJTzE2CQkJCSgweDEgPDwgMTYpCisjZGVmaW5lIEdQSU8xNwkJCQkoMHgxIDw8IDE3KQorI2RlZmluZSBHUElPMTgJCQkJKDB4MSA8PCAxOCkKKyNkZWZpbmUgR1BJTzE5CQkJCSgweDEgPDwgMTkpCisjZGVmaW5lIEdQSU8yMAkJCQkoMHgxIDw8IDIwKQorI2RlZmluZSBHUElPMjEJCQkJKDB4MSA8PCAyMSkKKyNkZWZpbmUgR1BJTzIyCQkJCSgweDEgPDwgMjIpCisjZGVmaW5lIEdQSU8yMwkJCQkoMHgxIDw8IDIzKQorI2RlZmluZSBHUElPMjQJCQkJKDB4MSA8PCAyNCkKKyNkZWZpbmUgR1BJTzI1CQkJCSgweDEgPDwgMjUpCisjZGVmaW5lIEdQSU8yNgkJCQkoMHgxIDw8IDI2KQorI2RlZmluZSBHUElPMjcJCQkJKDB4MSA8PCAyNykKKyNkZWZpbmUgR1BJTzI4CQkJCSgweDEgPDwgMjgpCisjZGVmaW5lIEdQSU8yOQkJCQkoMHgxIDw8IDI5KQorI2RlZmluZSBHUElPMzAJCQkJKDB4MSA8PCAzMCkKKyNkZWZpbmUgR1BJTzMxCQkJCSgweDEgPDwgMzEpCisKKy8qIGJhc2UgYWRkcmVzcyBmb3IgaW5kaXJlY3QgdmVjdG9ycyAoaW50ZXJuYWwgYm9vdCBtb2RlKSAqLworI2RlZmluZSBTUkFNX09GRlNFVDAJCQkweDQwMDAwMDAwCisjZGVmaW5lIFNSQU1fT0ZGU0VUMQkJCTB4MDAyMDAwMDAKKyNkZWZpbmUgU1JBTV9PRkZTRVQyCQkJMHgwMDAwRjgwMAorI2RlZmluZSBTUkFNX1ZFQ1RfQ09ERQkJCShTUkFNX09GRlNFVDAgfCBTUkFNX09GRlNFVDEgfCBcCisJCQkJCSBTUkFNX09GRlNFVDIpCisKKyNkZWZpbmUgTE9XX0xFVkVMX1NSQU1fU1RBQ0sJCTB4NDAyMEZGRkMKKworI2RlZmluZSBERUJVR19MRUQxCQkJMTQ5CS8qIGdwaW8gKi8KKyNkZWZpbmUgREVCVUdfTEVEMgkJCTE1MAkvKiBncGlvICovCisKKyNkZWZpbmUgWERSX1BPUAkJNQkvKiBwYWNrYWdlIG9uIHBhY2thZ2UgcGFydCAqLworI2RlZmluZSBTRFJfRElTQ1JFVEUJNAkvKiAxMjhNIG1lbW9yeSBTRFIgbW9kdWxlICovCisjZGVmaW5lIEREUl9TVEFDS0VECTMJLyogc3RhY2tlZCBwYXJ0IG9uIDI0MjIgKi8KKyNkZWZpbmUgRERSX0NPTUJPCTIJLyogY29tYm8gcGFydCBvbiBjcHUgZGF1Z2h0ZXIgY2FyZCAqLworI2RlZmluZSBERFJfRElTQ1JFVEUJMQkvKiAyeDE2IHBhcnRzIG9uIGRhdWdodGVyIGNhcmQgKi8KKworI2RlZmluZSBERFJfMTAwCQkxMDAJLyogdHlwZSBmb3VuZCBvbiBtb3N0IG1lbSBkLWJvYXJkcyAqLworI2RlZmluZSBERFJfMTExCQkxMTEJLyogc29tZSBjb21ibyBwYXJ0cyAqLworI2RlZmluZSBERFJfMTMzCQkxMzMJLyogbW9zdCBjb21ibywgc29tZSBtZW0gZC1ib2FyZHMgKi8KKyNkZWZpbmUgRERSXzE2NQkJMTY1CS8qIGZ1dHVyZSBwYXJ0cyAqLworCisjZGVmaW5lIENQVV8zNDMwCTB4MzQzMAorCisvKgorICogMzQzeCByZWFsIGhhcmR3YXJlOgorICogIEVTMSAgICAgPSByZXYgMAorICoKKyAqIDM0M3ggY29kZSBkZWZpbmVzOgorICogRVMxICAgICA9IDArMSA9IDEKKyAqIEVTMSAgICAgPSAxKzEgPSAxCisgKi8KKyNkZWZpbmUgQ1BVXzM0MzBfRVMxCQkxCisjZGVmaW5lIENQVV8zNDMwX0VTMgkJMgorCisjZGVmaW5lIFdJRFRIXzhCSVQJCTB4MDAwMAorI2RlZmluZSBXSURUSF8xNkJJVAkJMHgxMDAwCS8qIGJpdCBwb3MgZm9yIDE2IGJpdCBpbiBncG1jICovCisKKy8qIFNEUCBkZWZpbml0aW9ucyBhY2NvcmRpbmcgdG8gRlBHQSBSZXYuIElzIHRoaXMgT0s/PyAqLworI2RlZmluZSBTRFBfMzQzMF9WMQkJMHgxCisjZGVmaW5lIFNEUF8zNDMwX1YyCQkweDIKKworLyogRVZNIGRlZmluaXRpb25zICovCisjZGVmaW5lIE9NQVAzRVZNX1YxCQkweDEKKyNkZWZpbmUgT01BUDNFVk1fVjIJCTB4MgorCisvKiBJMkMgcG93ZXIgbWFuYWdlbWVudCBjb21wYW5pb24gZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgUFdSTUdUX0FERFJfSUQxCQkweDQ4CisjZGVmaW5lIFBXUk1HVF9BRERSX0lEMgkJMHg0OQorI2RlZmluZSBQV1JNR1RfQUREUl9JRDMJCTB4NEEKKyNkZWZpbmUgUFdSTUdUX0FERFJfSUQ0CQkweDRCCisKKy8qIEkyQyBJRDMgKHNsYXZlMykgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgTEVERU4JCQkweEVFCisKKyNkZWZpbmUgTEVEQU9OCQkJKDB4MSA8PCAwKQorI2RlZmluZSBMRURCT04JCQkoMHgxIDw8IDEpCisjZGVmaW5lIExFREFQV00JCQkoMHgxIDw8IDQpCisjZGVmaW5lIExFREJQV00JCQkoMHgxIDw8IDUpCisKKy8qIEkyQyBJRDQgKHNsYXZlNCkgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgVkFVWDJfREVWX0dSUAkJMHg3NgorI2RlZmluZSBWQVVYMl9ERURJQ0FURUQJCTB4NzkKKyNkZWZpbmUgVkFVWDNfREVWX0dSUAkJMHg3QQorI2RlZmluZSBWQVVYM19ERURJQ0FURUQJCTB4N0QKKyNkZWZpbmUgVlBMTDJfREVWX0dSUAkJMHg4RQorI2RlZmluZSBWUExMMl9ERURJQ0FURUQJCTB4OTEKKyNkZWZpbmUgVkRBQ19ERVZfR1JQCQkweDk2CisjZGVmaW5lIFZEQUNfREVESUNBVEVECQkweDk5CisKKyNkZWZpbmUgREVWX0dSUF9QMQkJMHgyMAorI2RlZmluZSBERVZfR1JQX0FMTAkJMHhFMAorCisjZGVmaW5lIFZBVVgyX1ZTRUxfMjgJCTB4MDkKKyNkZWZpbmUgVkFVWDNfVlNFTF8yOAkJMHgwMworI2RlZmluZSBWUExMMl9WU0VMXzE4CQkweDA1CisjZGVmaW5lIFZEQUNfVlNFTF8xOAkJMHgwMworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAzL29tYXBfZ3BtYy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcDMvb21hcF9ncG1jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGVkZjYxMQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAzL29tYXBfZ3BtYy5oCkBAIC0wLDAgKzEsODQgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDQtMjAwOCBUZXhhcyBJbnN0cnVtZW50cywgPHd3dy50aS5jb20+CisgKiBSb2hpdCBDaG9yYXJpYSA8cm9oaXRrY0B0aS5jb20+CisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKyNpZm5kZWYgX19BU01fQVJDSF9PTUFQX0dQTUNfSAorI2RlZmluZSBfX0FTTV9BUkNIX09NQVBfR1BNQ19ICisKKyNkZWZpbmUgR1BNQ19CVUZfRU1QVFkJMAorI2RlZmluZSBHUE1DX0JVRl9GVUxMCTEKKworI2RlZmluZSBFQ0NDTEVBUgkoMHgxIDw8IDgpCisjZGVmaW5lIEVDQ1JFU1VMVFJFRzEJKDB4MSA8PCAwKQorI2RlZmluZSBFQ0NTSVpFNTEyQllURQkweEZGCisjZGVmaW5lIEVDQ1NJWkUxCShFQ0NTSVpFNTEyQllURSA8PCAyMikKKyNkZWZpbmUgRUNDU0laRTAJKEVDQ1NJWkU1MTJCWVRFIDw8IDEyKQorI2RlZmluZSBFQ0NTSVpFMFNFTAkoMHgwMDAgPDwgMCkKKworLyogR2VuZXJpYyBFQ0MgTGF5b3V0cyAqLworLyogTGFyZ2UgUGFnZSB4OCBOQU5EIGRldmljZSBMYXlvdXQgKi8KKyNpZmRlZiBHUE1DX05BTkRfRUNDX0xQX3g4X0xBWU9VVAorI2RlZmluZSBHUE1DX05BTkRfSFdfRUNDX0xBWU9VVCB7XAorCS5lY2NieXRlcyA9IDEyLFwKKwkuZWNjcG9zID0gezEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsXAorCQk5LCAxMCwgMTEsIDEyfSxcCisJLm9vYmZyZWUgPSB7XAorCQl7Lm9mZnNldCA9IDEzLFwKKwkJIC5sZW5ndGggPSA1MSB9IH0gXAorfQorI2VuZGlmCisKKy8qIExhcmdlIFBhZ2UgeDE2IE5BTkQgZGV2aWNlIExheW91dCAqLworI2lmZGVmIEdQTUNfTkFORF9FQ0NfTFBfeDE2X0xBWU9VVAorI2RlZmluZSBHUE1DX05BTkRfSFdfRUNDX0xBWU9VVCB7XAorCS5lY2NieXRlcyA9IDEyLFwKKwkuZWNjcG9zID0gezIsIDMsIDQsIDUsIDYsIDcsIDgsIDksXAorCQkxMCwgMTEsIDEyLCAxM30sXAorCS5vb2JmcmVlID0ge1wKKwkJey5vZmZzZXQgPSAxNCxcCisJCSAubGVuZ3RoID0gNTAgfSB9IFwKK30KKyNlbmRpZgorCisvKiBTbWFsbCBQYWdlIHg4IE5BTkQgZGV2aWNlIExheW91dCAqLworI2lmZGVmIEdQTUNfTkFORF9FQ0NfU1BfeDhfTEFZT1VUCisjZGVmaW5lIEdQTUNfTkFORF9IV19FQ0NfTEFZT1VUIHtcCisJLmVjY2J5dGVzID0gMyxcCisJLmVjY3BvcyA9IHsxLCAyLCAzfSxcCisJLm9vYmZyZWUgPSB7XAorCQl7Lm9mZnNldCA9IDQsXAorCQkgLmxlbmd0aCA9IDEyIH0gfSBcCit9CisjZW5kaWYKKworLyogU21hbGwgUGFnZSB4MTYgTkFORCBkZXZpY2UgTGF5b3V0ICovCisjaWZkZWYgR1BNQ19OQU5EX0VDQ19TUF94MTZfTEFZT1VUCisjZGVmaW5lIEdQTUNfTkFORF9IV19FQ0NfTEFZT1VUIHtcCisJLmVjY2J5dGVzID0gMyxcCisJLmVjY3BvcyA9IHsyLCAzLCA0fSxcCisJLm9vYmZyZWUgPSB7XAorCQl7Lm9mZnNldCA9IDUsXAorCQkgLmxlbmd0aCA9IDExIH0gfSBcCit9CisjZW5kaWYKKworI2VuZGlmIC8qIF9fQVNNX0FSQ0hfT01BUF9HUE1DX0ggKi8KKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcDMvc3lzX3Byb3RvLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwMy9zeXNfcHJvdG8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzYyNGU4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcDMvc3lzX3Byb3RvLmgKQEAgLTAsMCArMSw3MSBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwNC0yMDA4CisgKiBUZXhhcyBJbnN0cnVtZW50cywgPHd3dy50aS5jb20+CisgKiBSaWNoYXJkIFdvb2RydWZmIDxyLXdvb2RydWZmMkB0aS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIC9QVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICAqLworI2lmbmRlZiBfU1lTX1BST1RPX0hfCisjZGVmaW5lIF9TWVNfUFJPVE9fSF8KKwordHlwZWRlZiBzdHJ1Y3QgeworCXUzMiBib2FyZF90eXBlX3YxOworCXUzMiBib2FyZF90eXBlX3YyOworCXUzMiBtdHlwZTsKKwljaGFyICpjcHVfc3RyaW5nOworCWNoYXIgKmJvYXJkX3N0cmluZzsKKwljaGFyICpuYW5kX3N0cmluZzsKK30gb21hcDNfc3lzaW5mbzsKKwordm9pZCBwcmNtX2luaXQodm9pZCk7Cit2b2lkIHBlcl9jbG9ja3NfZW5hYmxlKHZvaWQpOworCit2b2lkIG1lbWlmX2luaXQodm9pZCk7Cit2b2lkIHNkcmNfaW5pdCh2b2lkKTsKK3ZvaWQgZG9fc2RyY19pbml0KHUzMiwgdTMyKTsKK3ZvaWQgZ3BtY19pbml0KHZvaWQpOworCit2b2lkIHdhdGNoZG9nX2luaXQodm9pZCk7Cit2b2lkIHNldF9tdXhjb25mX3JlZ3Modm9pZCk7CisKK3UzMiBnZXRfY3B1X3Jldih2b2lkKTsKK3UzMiBnZXRfbWVtX3R5cGUodm9pZCk7Cit1MzIgZ2V0X3N5c2Jvb3RfdmFsdWUodm9pZCk7Cit1MzIgaXNfZ3BtY19tdXhlZCh2b2lkKTsKK3UzMiBnZXRfZ3BtYzBfdHlwZSh2b2lkKTsKK3UzMiBnZXRfZ3BtYzBfd2lkdGgodm9pZCk7Cit1MzIgZ2V0X2JvYXJkX3R5cGUodm9pZCk7Cit2b2lkIGRpc3BsYXlfYm9hcmRfaW5mbyh1MzIpOwordTMyIGdldF9zZHJfY3Nfc2l6ZSh1MzIpOwordTMyIGdldF9zZHJfY3Nfb2Zmc2V0KHUzMik7Cit1MzIgaXNfcnVubmluZ19pbl9zZHJhbSh2b2lkKTsKK3UzMiBpc19ydW5uaW5nX2luX3NyYW0odm9pZCk7Cit1MzIgaXNfcnVubmluZ19pbl9mbGFzaCh2b2lkKTsKK3UzMiBnZXRfZGV2aWNlX3R5cGUodm9pZCk7Cit2b2lkIGwyY2FjaGVfZW5hYmxlKHZvaWQpOwordm9pZCBzZWN1cmV3b3JsZF9leGl0KHZvaWQpOwordm9pZCBzZXR1cF9hdXhjcih2b2lkKTsKK3ZvaWQgdHJ5X3VubG9ja19tZW1vcnkodm9pZCk7Cit1MzIgZ2V0X2Jvb3RfdHlwZSh2b2lkKTsKK3ZvaWQgdjdfZmx1c2hfZGNhY2hlX2FsbCh1MzIpOwordm9pZCBzcjMyKHZvaWQgKiwgdTMyLCB1MzIsIHUzMik7Cit1MzIgd2FpdF9vbl92YWx1ZSh1MzIsIHUzMiwgdm9pZCAqLCB1MzIpOwordm9pZCBzZGVsYXkodW5zaWduZWQgbG9uZyk7Cit2b2lkIG1ha2VfY3MxX2NvbnRpZ3VvdXModm9pZCk7Cit2b2lkIG9tYXBfbmFuZF9zd2l0Y2hfZWNjKGludCk7Cit2b2lkIHBvd2VyX2luaXRfcih2b2lkKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvU1gxLmggYi9pbmNsdWRlL2NvbmZpZ3MvU1gxLmgKaW5kZXggZmQxYTNiZC4uNzhjNTE1MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL1NYMS5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9TWDEuaApAQCAtMTE2LDcgKzExNiw5IEBACiAjaW5jbHVkZSA8Y29uZmlncy9vbWFwMTUxMC5oPgogCiAjZGVmaW5lIENPTkZJR19CT09UQVJHUwkJIm1lbT0xNk0gY29uc29sZT10dHlTMCwxMTUyMDBuOCByb290PS9kZXYvbXRkYmxvY2szIHJ3IgorI2lmZGVmIENPTkZJR19TVERPVVRfVVNCVFRZCiAjZGVmaW5lIENPTkZJR19QUkVCT09UCQkic2V0ZW52IHN0ZG91dCB1c2J0dHk7c2V0ZW52IHN0ZGluIHVzYnR0eSIKKyNlbmRpZgogCiAvKgogICogTWlzY2VsbGFuZW91cyBjb25maWd1cmFibGUgb3B0aW9ucwpAQCAtMTY3LDE1ICsxNjksMTkgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogRkxBU0ggYW5kIGVudmlyb25tZW50IG9yZ2FuaXphdGlvbgorICogVjEKKyAqIFBIWVNfRkxBU0hfU0laRV8xCQkJKDE2IDw8IDEwKQkxNiBNQgorICogUEhZU19GTEFTSF9TSVpFXzIJCQkoOCA8PCAxMCkJIDggTUIKKyAqIFYyIG9ubHkgMSBmbGFzaAorICogUEhZU19GTEFTSF9TSVpFXzEJCQkoMzIgPDwgMTApCTMyIE1CCiAgKi8KICNkZWZpbmUgQ09ORklHX1NZU19NQVhfRkxBU0hfQkFOS1MJMgkvKiBtYXggbnVtYmVyIG9mIG1lbW9yeSBiYW5rcyAqLwotI2RlZmluZSBQSFlTX0ZMQVNIX1NJWkUJCSgxNiA8PCAxMCkgLyogMTYgTUIgKi8KICNkZWZpbmUgUEhZU19GTEFTSF9TRUNUX1NJWkUJKDEyOCoxMDI0KSAvKiBTaXplIG9mIGEgc2VjdG9yICgxMjhrQikgKi8KLSNkZWZpbmUgQ09ORklHX1NZU19NQVhfRkxBU0hfU0VDVAkoMTI4KQkvKiBtYXggbnVtYmVyIG9mIHNlY3RvcnMgb24gb25lIGNoaXAgKi8KKyNkZWZpbmUgQ09ORklHX1NZU19NQVhfRkxBU0hfU0VDVAkoMjU2KQkvKiBtYXggbnVtYmVyIG9mIHNlY3RvcnMgb24gb25lIGNoaXAgKi8KICNkZWZpbmUgQ09ORklHX0VOVl9BRERSCShDT05GSUdfU1lTX0ZMQVNIX0JBU0UgKyBQSFlTX0ZMQVNIX1NFQ1RfU0laRSkgLyogYWRkciBvZiBlbnZpcm9ubWVudCAqLwogI2RlZmluZSBDT05GSUdfU1lTX01PTklUT1JfQkFTRQlDT05GSUdfU1lTX0ZMQVNIX0JBU0UJLyogTW9uaXRvciBhdCBiZWdpbm5pbmcgb2YgZmxhc2ggKi8KICNkZWZpbmUgQ09ORklHX1NZU19NT05JVE9SX0xFTgkJUEhZU19GTEFTSF9TRUNUX1NJWkUJLyogUmVzZXJ2ZSAxIHNlY3RvciAqLwotI2RlZmluZSBDT05GSUdfU1lTX0ZMQVNIX0JBTktTX0xJU1QJeyBDT05GSUdfU1lTX0ZMQVNIX0JBU0UsIENPTkZJR19TWVNfRkxBU0hfQkFTRSArIFBIWVNfRkxBU0hfU0laRSB9CisjZGVmaW5lIENPTkZJR19TWVNfRkxBU0hfQkFOS1NfTElTVAl7IENPTkZJR19TWVNfRkxBU0hfQkFTRSwgUEhZU19GTEFTSF8yIH0KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogRkxBU0ggZHJpdmVyIHNldHVwCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3Mvbm1kazg4MTUuaCBiL2luY2x1ZGUvY29uZmlncy9ubWRrODgxNS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxZGUwOGYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2NvbmZpZ3Mvbm1kazg4MTUuaApAQCAtMCwwICsxLDE4OCBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwNQorICogU1RNaWNyb2VsZWN0cm9uaWNzLgorICogQ29uZmlndXJhdGlvbiBzZXR0aW5ncyBmb3IgdGhlIFNUbjg4MTUgbm9tYWRpayBib2FyZC4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4JIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaWZuZGVmIF9fQ09ORklHX0gKKyNkZWZpbmUgX19DT05GSUdfSAorCisjZGVmaW5lIENPTkZJR19BUk05MjZFSlMKKyNkZWZpbmUgQ09ORklHX05PTUFESUsKKyNkZWZpbmUgQ09ORklHX05PTUFESUtfODgxNQorI2RlZmluZSBDT05GSUdfTk9NQURJS19OREsxNQorI2RlZmluZSBDT05GSUdfTk9NQURJS19OSEsxNQorCisjZGVmaW5lIENPTkZJR19TS0lQX0xPV0xFVkVMX0lOSVQgLyogd2UgaGF2ZSBhbHJlYWR5IGJlZW4gbG9hZGVkIHRvIFJBTSAqLworCisvKiBjb21tYW5kcyAqLworI2luY2x1ZGUgPGNvbmZpZ19jbWRfZGVmYXVsdC5oPgorI2RlZmluZSBDT05GSUdfQ01EX1BJTkcKKyNkZWZpbmUgQ09ORklHX0NNRF9ESENQCisvKiBBdCB0aGlzIHBvaW50IHRoZXJlIGlzIG5vIGZsYXNoIGRyaXZlciwgc28gcmVtb3ZlIHNvbWUgY29tbWFuZHMgKi8KKyN1bmRlZiBDT05GSUdfQ01EX0VOVgorI3VuZGVmIENPTkZJR19DTURfRkxBU0gKKyN1bmRlZiBDT05GSUdfQ01EX0lNTFMKKworLyogdXNlciBpbnRlcmZhY2UgKi8KKyNkZWZpbmUgQ09ORklHX1NZU19MT05HSEVMUAorI2RlZmluZSBDT05GSUdfU1lTX0hVU0hfUEFSU0VSCisjZGVmaW5lIENPTkZJR19TWVNfUFJPTVBUCQkiTm9tYWRpaz4gIgorI2RlZmluZSBDT05GSUdfU1lTX1BST01QVF9IVVNIX1BTMgkiPiAiCisjZGVmaW5lIENPTkZJR19TWVNfQ0JTSVpFCQkyNTYJLyogQ29uc29sZSBJL08gQnVmZmVyIFNpemUgKi8KKyNkZWZpbmUgQ09ORklHX1NZU19QQlNJWkUJCShDT05GSUdfU1lTX0NCU0laRSBcCisJCQkJCSsgc2l6ZW9mKENPTkZJR19TWVNfUFJPTVBUKSArIDE2KQorI2RlZmluZSBDT05GSUdfU1lTX0JBUkdTSVpFCUNPTkZJR19TWVNfQ0JTSVpFIC8qIEJvb3QgQXJnIEJ1ZmZlciBTaXplICovCisjZGVmaW5lIENPTkZJR19TWVNfTUFYQVJHUwkxNgorI2RlZmluZSBDT05GSUdfU1lTX0xPQURfQUREUgkweDgwMDAwMAkvKiBkZWZhdWx0IGxvYWQgYWRkcmVzcyAqLworI2RlZmluZSBDT05GSUdfU1lTX0xPQURTX0JBVURfQ0hBTkdFCisKKy8qIGJvb3QgY29uZmlnICovCisjZGVmaW5lIENPTkZJR19TRVRVUF9NRU1PUllfVEFHUworI2RlZmluZSBDT05GSUdfSU5JVFJEX1RBRworI2RlZmluZSBDT05GSUdfQ01ETElORV9UQUcKKyNkZWZpbmUgQ09ORklHX0JPT1RERUxBWQkxCisjZGVmaW5lIENPTkZJR19CT09UQVJHUwkicm9vdD0vZGV2L3JhbTAgY29uc29sZT10dHlBTUExLDExNTIwMG44IGluaXQ9bGludXhyYyIKKyNkZWZpbmUgQ09ORklHX0JPT1RDT01NQU5ECSJmc2xvYWQgMHgxMDAwMDAga2VybmVsLnVpbWc7IiBcCisJCQkJIiBmc2xvYWQgMHg4MDAwMDAgaW5pdHJkLmd6LnVpbWc7IiBcCisJCQkJIiBib290bSAweDEwMDAwMCAweDgwMDAwMCIKKworLyogbWVtb3J5LXJlbGF0ZWQgaW5mb3JtYXRpb24gKi8KKyNkZWZpbmUgQ09ORklHX05SX0RSQU1fQkFOS1MJMgorI2RlZmluZSBQSFlTX1NEUkFNXzEJCTB4MDAwMDAwMDAJLyogRERSLVNEUkFNIEJhbmsgIzEgKi8KKyNkZWZpbmUgUEhZU19TRFJBTV8xX1NJWkUJMHgwNDAwMDAwMAkvKiA2NCBNQiAqLworI2RlZmluZSBQSFlTX1NEUkFNXzIJCTB4MDgwMDAwMDAJLyogU0RSLVNEUkFNIEJBTksgIzIqLworI2RlZmluZSBQSFlTX1NEUkFNXzJfU0laRQkweDA0MDAwMDAwCS8qIDY0IE1CICovCisKKyNkZWZpbmUgQ09ORklHX1NUQUNLU0laRQkoMTI4ICogMTAyNCkJLyogcmVndWxhciBzdGFjayAqLworI2lmZGVmIENPTkZJR19VU0VfSVJRCisjICBkZWZpbmUgQ09ORklHX1NUQUNLU0laRV9JUlEJKDQgKiAxMDI0KQkvKiBJUlEgc3RhY2sgKi8KKyMgIGRlZmluZSBDT05GSUdfU1RBQ0tTSVpFX0ZJUQkoNCAqIDEwMjQpCS8qIEZJUSBzdGFjayAqLworI2VuZGlmCisKKyNkZWZpbmUgQ09ORklHX1NZU19NRU1URVNUX1NUQVJUCTB4MDAwMDAwMDAKKyNkZWZpbmUgQ09ORklHX1NZU19NRU1URVNUX0VORAkJMHgwRkZGRkZGRgorI2RlZmluZSBDT05GSUdfU1lTX01BTExPQ19MRU4JCShDT05GSUdfRU5WX1NJWkUgKyAyNTYgKiAxMDI0KQorI2RlZmluZSBDT05GSUdfU1lTX0dCTF9EQVRBX1NJWkUJMTI4CS8qIGZvciBpbml0aWFsIGRhdGEgKi8KKworI2RlZmluZSBDT05GSUdfTUlTQ19JTklUX1IJLyogY2FsbCBtaXNjX2luaXRfciBkdXJpbmcgc3RhcnQgdXAgKi8KKworLyogdGltaW5nIGluZm9ybWF6aW9uICovCisjZGVmaW5lIENPTkZJR19TWVNfSFoJCSgyNDAwMDAwIC8gMjU2KQkvKiBUaW1lcjA6IDIuNE1oeiArIGRpdmlkZXIgKi8KKyNkZWZpbmUgQ09ORklHX1NZU19USU1FUkJBU0UJMHgxMDFFMjAwMAorI3VuZGVmCUNPTkZJR19TWVNfQ0xLU19JTl9IWgorCisvKiBzZXJpYWwgcG9ydCAoUEwwMTEpIGNvbmZpZ3VyYXRpb24gKi8KKyNkZWZpbmUgQ09ORklHX1BMMDExX1NFUklBTAorI2RlZmluZSBDT05GSUdfQ09OU19JTkRFWAkxCisjZGVmaW5lIENPTkZJR19CQVVEUkFURQkJMTE1MjAwCisjZGVmaW5lIENPTkZJR19TWVNfQkFVRFJBVEVfVEFCTEUJeyA5NjAwLCAxOTIwMCwgMzg0MDAsIDU3NjAwLCAxMTUyMDAgfQorI2RlZmluZSBDRkdfU0VSSUFMMAkJMHgxMDFGRDAwMAorI2RlZmluZSBDRkdfU0VSSUFMMQkJMHgxMDFGQjAwMAorCisjZGVmaW5lIENPTkZJR19QTDAxeF9QT1JUUwl7ICh2b2lkICopQ0ZHX1NFUklBTDAsICh2b2lkICopQ0ZHX1NFUklBTDEgfQorI2RlZmluZSBDT05GSUdfUEwwMTFfQ0xPQ0sJNDgwMDAwMDAKKworLyogRXRoZXJuZXQgKi8KKyNkZWZpbmUgUENJX01FTU9SWV9WQUREUgkweGU4MDAwMDAwCisjZGVmaW5lIFBDSV9JT19WQUREUgkJMHhlZTAwMDAwMAorI2RlZmluZSBfX2lvKGEpCQkJKCh2b2lkIF9faW9tZW0gKikoUENJX0lPX1ZBRERSICsgKGEpKSkKKyNkZWZpbmUgX19tZW1faXNhKGEpCQkoKGEpICsgUENJX01FTU9SWV9WQUREUikKKworI2RlZmluZSBDT05GSUdfRFJJVkVSX1NNQzkxMTExCS8qIFVzaW5nIFNNQzkxYzExMSovCisjZGVmaW5lIENPTkZJR19TTUM5MTExMV9CQVNFCTB4MzQwMDAzMDAKKyN1bmRlZiAgQ09ORklHX1NNQzkxMTExX0VYVF9QSFkJLyogSW50ZXJuYWwgUEhZICovCisjZGVmaW5lIENPTkZJR19TTUNfVVNFXzMyX0JJVAorI2RlZmluZSBDT05GSUdfQk9PVEZJTEUJCSJ1SW1hZ2UiCisKKy8qIGZsYXNoIG1lbW9yeSBhbmQgZmlsZXN5c3RlbSBpbmZvcm1hdGlvbiAqLworI2RlZmluZSBDT05GSUdfRE9TX1BBUlRJVElPTgorI2RlZmluZSBDT05GSUdfTVREX09ORU5BTkRfVkVSSUZZX1dSSVRFCisjZGVmaW5lIENPTkZJR19TWVNfT05FTkFORF9CQVNFCQkweDMwMDAwMDAwCisjZGVmaW5lIENPTkZJR19TWVNfTUFYX05BTkRfREVWSUNFCTEKKyNkZWZpbmUgQ09ORklHX1NZU19OQU5EX0JBU0UJCTB4NDAwMDAwMDAKKworI2RlZmluZSBDT05GSUdfU1lTX05PX0ZMQVNICisKKyNpZmRlZiBDT05GSUdfQk9PVF9PTkVOQU5ECisKKyMgICB1bmRlZiBDT05GSUdfQ01EX05BTkQgLyogVGVtcG9yYXJ5OiBuYW5kIGFuZCBvbmVuYW5kIGNhbid0IGNvZXhpc3QgKi8KKyAgIC8qIFBhcnRpdGlvbgkJCQlTaXplCVN0YXJ0CisgICAgKiBYbG9hZGVyVE9DICsgWC1Mb2FkZXIJCTI1NktCCTB4MDAwMDAwMDAKKyAgICAqIE1lbW9yeSBpbml0IGZ1bmN0aW9uCQkyNTZLQgkweDAwMDQwMDAwCisgICAgKiBVLUJvb3QJCQkJMk1CCTB4MDAwODAwMDAKKyAgICAqIFN5c2ltYWdlIChrZXJuZWwgKyByYW1kaXNrKQk0TUIJMHgwMDI4MDAwMAorICAgICogSkZGUzIgUm9vdCBmaWxlc3lzdGVtCQkyMk1CCTB4MDA2ODAwMDAKKyAgICAqIEpGRlMyIFVzZXIgRGF0YQkJCTIyNy41TUIJMHgwMUM4MDAwMAorICAgICovCisjICAgZGVmaW5lIENPTkZJR19KRkZTMl9QQVJUX1NJWkUJMHg0MDAwMDAKKyMgICBkZWZpbmUgQ09ORklHX0pGRlMyX1BBUlRfT0ZGU0VUCTB4MjgwMDAwCisKKyMgICBkZWZpbmUgQ09ORklHX0VOVl9JU19JTl9PTkVOQU5ECisjICAgZGVmaW5lIENPTkZJR19FTlZfU0laRQkJKDI1NiAqIDEwMjQpCisjICAgZGVmaW5lIENPTkZJR19FTlZfQUREUgkJMHgzMDMwMDAwMAorCisjZWxzZSAvKiAhIENPTkZJR19CT09UX09ORU5BTkQgKi8KKworIyAgIHVuZGVmIENPTkZJR19DTURfT05FTkFORCAvKiBUZW1wb3Jhcnk6IG5hbmQgYW5kIG9uZW5hbmQgY2FuJ3QgY29leGlzdCAqLworCisjICAgZGVmaW5lIENPTkZJR19KRkZTMl9ERVYJCSJuYW5kMCIKKyMgICBkZWZpbmUgQ09ORklHX0pGRlMyX05BTkQJCTEgLyogRm9yIHRoZSBqZmZzMiBzdXBwb3J0Ki8KKyMgICBkZWZpbmUgQ09ORklHX0pGRlMyX1BBUlRfU0laRQkweDAwMzAwMDAwCisjICAgZGVmaW5lIENPTkZJR19KRkZTMl9QQVJUX09GRlNFVAkweDAwMjgwMDAwCisKKyMgICBkZWZpbmUgQ09ORklHX0VOVl9JU19JTl9OQU5ECisjICAgZGVmaW5lIENPTkZJR19FTlZfU0laRQkJMHgyMDAwMCAvKjEyOCBLYiovCisjICAgZGVmaW5lIENPTkZJR19FTlZfT0ZGU0VUCQkoMHg4MDAwMDAwIC0gQ09ORklHX0VOVl9TSVpFKQorCisjZW5kaWYgLyogQ09ORklHX0JPT1RfT05FTkFORCAqLworCisvKiBUZW1wb3JhcmlseSwgdW50aWwgd2UgaGF2ZSBubyBkcml2ZXIsIGVudiBpcyBub3QgaW4gbmFuZCAqLworI3VuZGVmIENPTkZJR19FTlZfSVNfSU5fTkFORAorI2RlZmluZSBDT05GSUdfRU5WX0lTX05PV0hFUkUKKworLyogdGhpcyBpcyBuZWVkZWQgdG8gbWFrZSBoZWxsb193b3JsZC5jIGFuZCBvdGhlciBzdHVmZiBoYXBweSAqLworI2RlZmluZSBDT05GSUdfU1lTX01BWF9GTEFTSF9TRUNUCTUxMgorI2RlZmluZSBDT05GSUdfU1lTX01BWF9GTEFTSF9CQU5LUwkxCisKKy8qIGJhc2UgYWRkcmVzc2VzIG9mIG91ciBwZXJpcGhlcmFscyAqLworI2RlZmluZSBOT01BRElLX1NSQ19CQVNFCTB4MTAxRTAwMDAJLyogU3lzdGVtIGFuZCBSZXNldCBDbnQgKi8KKyNkZWZpbmUgTk9NQURJS19QTVVfQkFTRQkweDEwMUU5MDAwCS8qIFBvd2VyIE1hbmFnZW1lbnQgVW5pdCAqLworI2RlZmluZSBOT01BRElLX01QTUNfQkFTRQkweDEwMTEwMDAwCS8qIFNEUkFNIENvbnRyb2xsZXIgKi8KKyNkZWZpbmUgTk9NQURJS19GU01DX0JBU0UJMHgxMDEwMDAwMAkvKiBGU01DIENvbnRyb2xsZXIgKi8KKyNkZWZpbmUgTk9NQURJS18xTkFORF9CQVNFCTB4MzAwMDAwMDAKKyNkZWZpbmUgTk9NQURJS19HUElPMF9CQVNFCTB4MTAxRTQwMDAKKyNkZWZpbmUgTk9NQURJS19HUElPMV9CQVNFCTB4MTAxRTUwMDAKKyNkZWZpbmUgTk9NQURJS19HUElPMl9CQVNFCTB4MTAxRTYwMDAKKyNkZWZpbmUgTk9NQURJS19HUElPM19CQVNFCTB4MTAxRTcwMDAKKyNkZWZpbmUgTk9NQURJS19DUExEX0JBU0UJMHgzNjAwMDAwMAorI2RlZmluZSBOT01BRElLX1VBUlQwX0JBU0UJMHgxMDFGRDAwMAorI2RlZmluZSBOT01BRElLX1VBUlQxX0JBU0UJMHgxMDFGQjAwMAorI2RlZmluZSBOT01BRElLX1VBUlQyX0JBU0UJMHgxMDFGMjAwMAorCisjZGVmaW5lIE5PTUFESUtfSTJDMV9CQVNFCTB4MTAxRjcwMDAJLyogSTJDMSBpbnRlcmZhY2UgKi8KKyNkZWZpbmUgTk9NQURJS19JMkMwX0JBU0UJMHgxMDFGODAwMAkvKiBJMkMwIGludGVyZmFjZSAqLworCisjZGVmaW5lIE5PTUFESUtfUlRDX0JBU0UJMHgxMDFFODAwMAorI2RlZmluZSBOT01BRElLX0VUSDBfQkFTRQkweDM2ODAwMzAwCisjZGVmaW5lIE5PTUFESUtfQ1BMRF9VQVJUX0JBU0UJMHgzNjQ4MDAwMAorCisjZW5kaWYgLyogX19DT05GSUdfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL29tYXAzX2JlYWdsZS5oIGIvaW5jbHVkZS9jb25maWdzL29tYXAzX2JlYWdsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwNTc2MDYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2NvbmZpZ3Mvb21hcDNfYmVhZ2xlLmgKQEAgLTAsMCArMSwzMjUgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDYtMjAwOAorICogVGV4YXMgSW5zdHJ1bWVudHMuCisgKiBSaWNoYXJkIFdvb2RydWZmIDxyLXdvb2RydWZmMkB0aS5jb20+CisgKiBTeWVkIE1vaGFtbWVkIEtoYXNpbSA8eDBraGFzaW1AdGkuY29tPgorICoKKyAqIENvbmZpZ3VyYXRpb24gc2V0dGluZ3MgZm9yIHRoZSBUSSBPTUFQMzUzMCBCZWFnbGUgYm9hcmQuCisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCSBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2lmbmRlZiBfX0NPTkZJR19ICisjZGVmaW5lIF9fQ09ORklHX0gKKyNpbmNsdWRlIDxhc20vc2l6ZXMuaD4KKworLyoKKyAqIEhpZ2ggTGV2ZWwgQ29uZmlndXJhdGlvbiBPcHRpb25zCisgKi8KKyNkZWZpbmUgQ09ORklHX0FSTUNPUlRFWEE4CTEJLyogVGhpcyBpcyBhbiBBUk0gVjcgQ1BVIGNvcmUgKi8KKyNkZWZpbmUgQ09ORklHX09NQVAJCTEJLyogaW4gYSBUSSBPTUFQIGNvcmUgKi8KKyNkZWZpbmUgQ09ORklHX09NQVAzNFhYCQkxCS8qIHdoaWNoIGlzIGEgMzRYWCAqLworI2RlZmluZSBDT05GSUdfT01BUDM0MzAJCTEJLyogd2hpY2ggaXMgaW4gYSAzNDMwICovCisjZGVmaW5lIENPTkZJR19PTUFQM19CRUFHTEUJMQkvKiB3b3JraW5nIHdpdGggQkVBR0xFICovCisKKyNpbmNsdWRlIDxhc20vYXJjaC9jcHUuaD4JCS8qIGdldCBjaGlwIGFuZCBib2FyZCBkZWZzICovCisjaW5jbHVkZSA8YXNtL2FyY2gvb21hcDMuaD4KKworLyogQ2xvY2sgRGVmaW5lcyAqLworI2RlZmluZSBWX09TQ0sJCQkyNjAwMDAwMAkvKiBDbG9jayBvdXRwdXQgZnJvbSBUMiAqLworI2RlZmluZSBWX1NDTEsJCQkoVl9PU0NLID4+IDEpCisKKyN1bmRlZiBDT05GSUdfVVNFX0lSUQkJCQkvKiBubyBzdXBwb3J0IGZvciBJUlFzICovCisjZGVmaW5lIENPTkZJR19NSVNDX0lOSVRfUgorCisjZGVmaW5lIENPTkZJR19DTURMSU5FX1RBRwkJMQkvKiBlbmFibGUgcGFzc2luZyBvZiBBVEFHcyAqLworI2RlZmluZSBDT05GSUdfU0VUVVBfTUVNT1JZX1RBR1MJMQorI2RlZmluZSBDT05GSUdfSU5JVFJEX1RBRwkJMQorI2RlZmluZSBDT05GSUdfUkVWSVNJT05fVEFHCQkxCisKKy8qCisgKiBTaXplIG9mIG1hbGxvYygpIHBvb2wKKyAqLworI2RlZmluZSBDT05GSUdfRU5WX1NJWkUJCQlTWl8xMjhLCS8qIFRvdGFsIFNpemUgRW52aXJvbm1lbnQgKi8KKwkJCQkJCS8qIFNlY3RvciAqLworI2RlZmluZSBDT05GSUdfU1lTX01BTExPQ19MRU4JCShDT05GSUdfRU5WX1NJWkUgKyBTWl8xMjhLKQorI2RlZmluZSBDT05GSUdfU1lTX0dCTF9EQVRBX1NJWkUJMTI4CS8qIGJ5dGVzIHJlc2VydmVkIGZvciAqLworCQkJCQkJLyogaW5pdGlhbCBkYXRhICovCisKKy8qCisgKiBIYXJkd2FyZSBkcml2ZXJzCisgKi8KKworLyoKKyAqIE5TMTY1NTAgQ29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIFZfTlMxNjU1MF9DTEsJCQk0ODAwMDAwMAkvKiA0OE1IeiAoQVBMTDk2LzIpICovCisKKyNkZWZpbmUgQ09ORklHX1NZU19OUzE2NTUwCisjZGVmaW5lIENPTkZJR19TWVNfTlMxNjU1MF9TRVJJQUwKKyNkZWZpbmUgQ09ORklHX1NZU19OUzE2NTUwX1JFR19TSVpFCSgtNCkKKyNkZWZpbmUgQ09ORklHX1NZU19OUzE2NTUwX0NMSwkJVl9OUzE2NTUwX0NMSworCisvKgorICogc2VsZWN0IHNlcmlhbCBjb25zb2xlIGNvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBDT05GSUdfQ09OU19JTkRFWAkJMworI2RlZmluZSBDT05GSUdfU1lTX05TMTY1NTBfQ09NMwkJT01BUDM0WFhfVUFSVDMKKyNkZWZpbmUgQ09ORklHX1NFUklBTDMJCQkzCS8qIFVBUlQzIG9uIEJlYWdsZSBSZXYgMiAqLworCisvKiBhbGxvdyB0byBvdmVyd3JpdGUgc2VyaWFsIGFuZCBldGhhZGRyICovCisjZGVmaW5lIENPTkZJR19FTlZfT1ZFUldSSVRFCisjZGVmaW5lIENPTkZJR19CQVVEUkFURQkJCTExNTIwMAorI2RlZmluZSBDT05GSUdfU1lTX0JBVURSQVRFX1RBQkxFCXs0ODAwLCA5NjAwLCAxOTIwMCwgMzg0MDAsIDU3NjAwLFwKKwkJCQkJMTE1MjAwfQorI2RlZmluZSBDT05GSUdfTU1DCQkJMQorI2RlZmluZSBDT05GSUdfT01BUDNfTU1DCQkxCisjZGVmaW5lIENPTkZJR19ET1NfUEFSVElUSU9OCQkxCisKKy8qIGNvbW1hbmRzIHRvIGluY2x1ZGUgKi8KKyNpbmNsdWRlIDxjb25maWdfY21kX2RlZmF1bHQuaD4KKworI2RlZmluZSBDT05GSUdfQ01EX0VYVDIJCS8qIEVYVDIgU3VwcG9ydAkJCSovCisjZGVmaW5lIENPTkZJR19DTURfRkFUCQkvKiBGQVQgc3VwcG9ydAkJCSovCisjZGVmaW5lIENPTkZJR19DTURfSkZGUzIJLyogSkZGUzIgU3VwcG9ydAkJKi8KKworI2RlZmluZSBDT05GSUdfQ01EX0kyQwkJLyogSTJDIHNlcmlhbCBidXMgc3VwcG9ydAkqLworI2RlZmluZSBDT05GSUdfQ01EX01NQwkJLyogTU1DIHN1cHBvcnQJCQkqLworI2RlZmluZSBDT05GSUdfQ01EX05BTkQJCS8qIE5BTkQgc3VwcG9ydAkJCSovCisKKyN1bmRlZiBDT05GSUdfQ01EX0ZMQVNICQkvKiBmbGluZm8sIGVyYXNlLCBwcm90ZWN0CSovCisjdW5kZWYgQ09ORklHX0NNRF9GUEdBCQkvKiBGUEdBIGNvbmZpZ3VyYXRpb24gU3VwcG9ydAkqLworI3VuZGVmIENPTkZJR19DTURfSU1JCQkvKiBpbWluZm8JCQkqLworI3VuZGVmIENPTkZJR19DTURfSU1MUwkJLyogTGlzdCBhbGwgZm91bmQgaW1hZ2VzCSovCisjdW5kZWYgQ09ORklHX0NNRF9ORVQJCS8qIGJvb3RwLCB0ZnRwYm9vdCwgcmFycGJvb3QJKi8KKyN1bmRlZiBDT05GSUdfQ01EX05GUwkJLyogTkZTIHN1cHBvcnQJCQkqLworCisjZGVmaW5lIENPTkZJR19TWVNfTk9fRkxBU0gKKyNkZWZpbmUgQ09ORklHX1NZU19JMkNfU1BFRUQJCTEwMDAwMAorI2RlZmluZSBDT05GSUdfU1lTX0kyQ19TTEFWRQkJMQorI2RlZmluZSBDT05GSUdfU1lTX0kyQ19CVVMJCTAKKyNkZWZpbmUgQ09ORklHX1NZU19JMkNfQlVTX1NFTEVDVAkxCisjZGVmaW5lIENPTkZJR19EUklWRVJfT01BUDM0WFhfSTJDCTEKKworLyoKKyAqIEJvYXJkIE5BTkQgSW5mby4KKyAqLworI2RlZmluZSBDT05GSUdfTkFORF9PTUFQX0dQTUMKKyNkZWZpbmUgQ09ORklHX1NZU19OQU5EX0FERFIJCU5BTkRfQkFTRQkvKiBwaHlzaWNhbCBhZGRyZXNzICovCisJCQkJCQkJLyogdG8gYWNjZXNzIG5hbmQgKi8KKyNkZWZpbmUgQ09ORklHX1NZU19OQU5EX0JBU0UJCU5BTkRfQkFTRQkvKiBwaHlzaWNhbCBhZGRyZXNzICovCisJCQkJCQkJLyogdG8gYWNjZXNzIG5hbmQgYXQgKi8KKwkJCQkJCQkvKiBDUzAgKi8KKyNkZWZpbmUgR1BNQ19OQU5EX0VDQ19MUF94MTZfTEFZT1VUCTEKKworI2RlZmluZSBDT05GSUdfU1lTX01BWF9OQU5EX0RFVklDRQkxCQkvKiBNYXggbnVtYmVyIG9mIE5BTkQgKi8KKwkJCQkJCQkvKiBkZXZpY2VzICovCisjZGVmaW5lIFNFQ1RPUlNJWkUJCQk1MTIKKworI2RlZmluZSBOQU5EX0FMTE9XX0VSQVNFX0FMTAorI2RlZmluZSBBRERSX0NPTFVNTgkJCTEKKyNkZWZpbmUgQUREUl9QQUdFCQkJMgorI2RlZmluZSBBRERSX0NPTFVNTl9QQUdFCQkzCisKKyNkZWZpbmUgTkFORF9DaGlwSURfVU5LTk9XTgkJMHgwMAorI2RlZmluZSBOQU5EX01BWF9GTE9PUlMJCQkxCisjZGVmaW5lIE5BTkRfTUFYX0NISVBTCQkJMQorI2RlZmluZSBOQU5EX05PX1JCCQkJMQorI2RlZmluZSBDT05GSUdfU1lTX05BTkRfV1AKKworI2RlZmluZSBDT05GSUdfSkZGUzJfTkFORAorLyogbmFuZCBkZXZpY2UgamZmczIgbGl2ZXMgb24gKi8KKyNkZWZpbmUgQ09ORklHX0pGRlMyX0RFVgkJIm5hbmQwIgorLyogc3RhcnQgb2YgamZmczIgcGFydGl0aW9uICovCisjZGVmaW5lIENPTkZJR19KRkZTMl9QQVJUX09GRlNFVAkweDY4MDAwMAorI2RlZmluZSBDT05GSUdfSkZGUzJfUEFSVF9TSVpFCQkweGY5ODAwMDAJLyogc2l6ZSBvZiBqZmZzMiAqLworCQkJCQkJCS8qIHBhcnRpdGlvbiAqLworCisvKiBFbnZpcm9ubWVudCBpbmZvcm1hdGlvbiAqLworI2RlZmluZSBDT05GSUdfQk9PVERFTEFZCQkxMAorCisjZGVmaW5lIENPTkZJR19FWFRSQV9FTlZfU0VUVElOR1MgXAorCSJsb2FkYWRkcj0weDgyMDAwMDAwXDAiIFwKKwkiY29uc29sZT10dHlTMiwxMTUyMDBuOFwwIiBcCisJInZpZGVvbW9kZT0xMDI0eDc2OEA2MCx2eHJlcz0xMDI0LHZ5cmVzPTc2OFwwIiBcCisJInZpZGVvc3BlYz1vbWFwZmI6dnJhbToyTSx2cmFtOjRNXDAiIFwKKwkibW1jYXJncz1zZXRlbnYgYm9vdGFyZ3MgY29uc29sZT0ke2NvbnNvbGV9ICIgXAorCQkidmlkZW89JHt2aWRlb3NwZWN9LG1vZGU6JHt2aWRlb21vZGV9ICIgXAorCQkicm9vdD0vZGV2L21tY2JsazBwMiBydyAiIFwKKwkJInJvb3Rmc3R5cGU9ZXh0MyByb290d2FpdFwwIiBcCisJIm5hbmRhcmdzPXNldGVudiBib290YXJncyBjb25zb2xlPSR7Y29uc29sZX0gIiBcCisJCSJ2aWRlbz0ke3ZpZGVvc3BlY30sbW9kZToke3ZpZGVvbW9kZX0gIiBcCisJCSJyb290PS9kZXYvbXRkYmxvY2s0IHJ3ICIgXAorCQkicm9vdGZzdHlwZT1qZmZzMlwwIiBcCisJImxvYWRib290c2NyaXB0PWZhdGxvYWQgbW1jIDAgJHtsb2FkYWRkcn0gYm9vdC5zY3JcMCIgXAorCSJib290c2NyaXB0PWVjaG8gUnVubmluZyBib290c2NyaXB0IGZyb20gbW1jIC4uLjsgIiBcCisJCSJhdXRvc2NyICR7bG9hZGFkZHJ9XDAiIFwKKwkibG9hZHVpbWFnZT1mYXRsb2FkIG1tYyAwICR7bG9hZGFkZHJ9IHVJbWFnZVwwIiBcCisJIm1tY2Jvb3Q9ZWNobyBCb290aW5nIGZyb20gbW1jIC4uLjsgIiBcCisJCSJydW4gbW1jYXJnczsgIiBcCisJCSJib290bSAke2xvYWRhZGRyfVwwIiBcCisJIm5hbmRib290PWVjaG8gQm9vdGluZyBmcm9tIG5hbmQgLi4uOyAiIFwKKwkJInJ1biBuYW5kYXJnczsgIiBcCisJCSJuYW5kIHJlYWQgJHtsb2FkYWRkcn0gMjgwMDAwIDQwMDAwMDsgIiBcCisJCSJib290bSAke2xvYWRhZGRyfVwwIiBcCisKKyNkZWZpbmUgQ09ORklHX0JPT1RDT01NQU5EIFwKKwkiaWYgbW1jaW5pdDsgdGhlbiAiIFwKKwkJImlmIHJ1biBsb2FkYm9vdHNjcmlwdDsgdGhlbiAiIFwKKwkJCSJydW4gYm9vdHNjcmlwdDsgIiBcCisJCSJlbHNlICIgXAorCQkJImlmIHJ1biBsb2FkdWltYWdlOyB0aGVuICIgXAorCQkJCSJydW4gbW1jYm9vdDsgIiBcCisJCQkiZWxzZSBydW4gbmFuZGJvb3Q7ICIgXAorCQkJImZpOyAiIFwKKwkJImZpOyAiIFwKKwkiZWxzZSBydW4gbmFuZGJvb3Q7IGZpIgorCisjZGVmaW5lIENPTkZJR19BVVRPX0NPTVBMRVRFCQkxCisvKgorICogTWlzY2VsbGFuZW91cyBjb25maWd1cmFibGUgb3B0aW9ucworICovCisjZGVmaW5lIFZfUFJPTVBUCQkJIk9NQVAzIGJlYWdsZWJvYXJkLm9yZyAjICIKKworI2RlZmluZSBDT05GSUdfU1lTX0xPTkdIRUxQCQkvKiB1bmRlZiB0byBzYXZlIG1lbW9yeSAqLworI2RlZmluZSBDT05GSUdfU1lTX0hVU0hfUEFSU0VSCQkvKiB1c2UgImh1c2giIGNvbW1hbmQgcGFyc2VyICovCisjZGVmaW5lIENPTkZJR19TWVNfUFJPTVBUX0hVU0hfUFMyCSI+ICIKKyNkZWZpbmUgQ09ORklHX1NZU19QUk9NUFQJCVZfUFJPTVBUCisjZGVmaW5lIENPTkZJR19TWVNfQ0JTSVpFCQkyNTYJLyogQ29uc29sZSBJL08gQnVmZmVyIFNpemUgKi8KKy8qIFByaW50IEJ1ZmZlciBTaXplICovCisjZGVmaW5lIENPTkZJR19TWVNfUEJTSVpFCQkoQ09ORklHX1NZU19DQlNJWkUgKyBcCisJCQkJCXNpemVvZihDT05GSUdfU1lTX1BST01QVCkgKyAxNikKKyNkZWZpbmUgQ09ORklHX1NZU19NQVhBUkdTCQkxNgkvKiBtYXggbnVtYmVyIG9mIGNvbW1hbmQgYXJncyAqLworLyogQm9vdCBBcmd1bWVudCBCdWZmZXIgU2l6ZSAqLworI2RlZmluZSBDT05GSUdfU1lTX0JBUkdTSVpFCQkoQ09ORklHX1NZU19DQlNJWkUpCisKKyNkZWZpbmUgQ09ORklHX1NZU19NRU1URVNUX1NUQVJUCShPTUFQMzRYWF9TRFJDX0NTMCkJLyogbWVtdGVzdCAqLworCQkJCQkJCQkvKiB3b3JrcyBvbiAqLworI2RlZmluZSBDT05GSUdfU1lTX01FTVRFU1RfRU5ECQkoT01BUDM0WFhfU0RSQ19DUzAgKyBcCisJCQkJCTB4MDFGMDAwMDApIC8qIDMxTUIgKi8KKworI3VuZGVmCUNPTkZJR19TWVNfQ0xLU19JTl9IWgkJLyogZXZlcnl0aGluZywgaW5jbCBib2FyZCBpbmZvLCBpbiBIeiAqLworCisjZGVmaW5lIENPTkZJR19TWVNfTE9BRF9BRERSCQkoT01BUDM0WFhfU0RSQ19DUzApCS8qIGRlZmF1bHQgKi8KKwkJCQkJCQkvKiBsb2FkIGFkZHJlc3MgKi8KKworLyoKKyAqIDI0MzAgaGFzIDEyIEdQIHRpbWVycywgdGhleSBjYW4gYmUgZHJpdmVuIGJ5IHRoZSBTeXNDbGsgKDEyLzEzLzE5LjIpIG9yIGJ5CisgKiAzMktIeiBjbGssIG9yIGZyb20gZXh0ZXJuYWwgc2lnLiBUaGlzIHJhdGUgaXMgZGl2aWRlZCBieSBhIGxvY2FsIGRpdmlzb3IuCisgKi8KKyNkZWZpbmUgVl9QVlQJCQkJNworCisjZGVmaW5lIENPTkZJR19TWVNfVElNRVJCQVNFCQkoT01BUDM0WFhfR1BUMikKKyNkZWZpbmUgQ09ORklHX1NZU19QVlQJCQlWX1BWVAkvKiAyXihwdnQrMSkgKi8KKyNkZWZpbmUgQ09ORklHX1NZU19IWgkJCSgoVl9TQ0xLKSAvICgyIDw8IENPTkZJR19TWVNfUFZUKSkKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogU3RhY2sgc2l6ZXMKKyAqCisgKiBUaGUgc3RhY2sgc2l6ZXMgYXJlIHNldCB1cCBpbiBzdGFydC5TIHVzaW5nIHRoZSBzZXR0aW5ncyBiZWxvdworICovCisjZGVmaW5lIENPTkZJR19TVEFDS1NJWkUJU1pfMTI4SwkvKiByZWd1bGFyIHN0YWNrICovCisjaWZkZWYgQ09ORklHX1VTRV9JUlEKKyNkZWZpbmUgQ09ORklHX1NUQUNLU0laRV9JUlEJU1pfNEsJLyogSVJRIHN0YWNrICovCisjZGVmaW5lIENPTkZJR19TVEFDS1NJWkVfRklRCVNaXzRLCS8qIEZJUSBzdGFjayAqLworI2VuZGlmCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFBoeXNpY2FsIE1lbW9yeSBNYXAKKyAqLworI2RlZmluZSBDT05GSUdfTlJfRFJBTV9CQU5LUwkyCS8qIENTMSBtYXkgb3IgbWF5IG5vdCBiZSBwb3B1bGF0ZWQgKi8KKyNkZWZpbmUgUEhZU19TRFJBTV8xCQlPTUFQMzRYWF9TRFJDX0NTMAorI2RlZmluZSBQSFlTX1NEUkFNXzFfU0laRQlTWl8zMk0JLyogYXQgbGVhc3QgMzIgbWVnICovCisjZGVmaW5lIFBIWVNfU0RSQU1fMgkJT01BUDM0WFhfU0RSQ19DUzEKKworLyogU0RSQU0gQmFuayBBbGxvY2F0aW9uIG1ldGhvZCAqLworI2RlZmluZSBTRFJDX1JfQl9DCQkxCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIEZMQVNIIGFuZCBlbnZpcm9ubWVudCBvcmdhbml6YXRpb24KKyAqLworCisvKiAqKioqIFBJU01PIFNVUFBPUlQgKioqICovCisKKy8qIENvbmZpZ3VyZSB0aGUgUElTTU8gKi8KKyNkZWZpbmUgUElTTU8xX05BTkRfU0laRQkJR1BNQ19TSVpFXzEyOE0KKyNkZWZpbmUgUElTTU8xX09ORU5fU0laRQkJR1BNQ19TSVpFXzEyOE0KKworI2RlZmluZSBDT05GSUdfU1lTX01BWF9GTEFTSF9TRUNUCTUyMAkvKiBtYXggbnVtYmVyIG9mIHNlY3RvcnMgb24gKi8KKwkJCQkJCS8qIG9uZSBjaGlwICovCisjZGVmaW5lIENPTkZJR19TWVNfTUFYX0ZMQVNIX0JBTktTCTIJLyogbWF4IG51bWJlciBvZiBmbGFzaCBiYW5rcyAqLworI2RlZmluZSBDT05GSUdfU1lTX01PTklUT1JfTEVOCQlTWl8yNTZLCS8qIFJlc2VydmUgMiBzZWN0b3JzICovCisKKyNkZWZpbmUgQ09ORklHX1NZU19GTEFTSF9CQVNFCQlib290X2ZsYXNoX2Jhc2UKKworLyogTW9uaXRvciBhdCBzdGFydCBvZiBmbGFzaCAqLworI2RlZmluZSBDT05GSUdfU1lTX01PTklUT1JfQkFTRQkJQ09ORklHX1NZU19GTEFTSF9CQVNFCisjZGVmaW5lIENPTkZJR19TWVNfT05FTkFORF9CQVNFCQlPTkVOQU5EX01BUAorCisjZGVmaW5lIENPTkZJR19FTlZfSVNfSU5fTkFORAkJMQorI2RlZmluZSBPTkVOQU5EX0VOVl9PRkZTRVQJCTB4MjYwMDAwIC8qIGVudmlyb25tZW50IHN0YXJ0cyBoZXJlICovCisjZGVmaW5lIFNNTkFORF9FTlZfT0ZGU0VUCQkweDI2MDAwMCAvKiBlbnZpcm9ubWVudCBzdGFydHMgaGVyZSAqLworCisjZGVmaW5lIENPTkZJR19TWVNfRU5WX1NFQ1RfU0laRQlib290X2ZsYXNoX3NlYworI2RlZmluZSBDT05GSUdfRU5WX09GRlNFVAkJYm9vdF9mbGFzaF9vZmYKKyNkZWZpbmUgQ09ORklHX0VOVl9BRERSCQkJU01OQU5EX0VOVl9PRkZTRVQKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogQ0ZJIEZMQVNIIGRyaXZlciBzZXR1cAorICovCisvKiB0aW1lb3V0IHZhbHVlcyBhcmUgaW4gdGlja3MgKi8KKyNkZWZpbmUgQ09ORklHX1NZU19GTEFTSF9FUkFTRV9UT1VUCSgxMDAgKiBDT05GSUdfU1lTX0haKQorI2RlZmluZSBDT05GSUdfU1lTX0ZMQVNIX1dSSVRFX1RPVVQJKDEwMCAqIENPTkZJR19TWVNfSFopCisKKy8qIEZsYXNoIGJhbmtzIEpGRlMyIHNob3VsZCB1c2UgKi8KKyNkZWZpbmUgQ09ORklHX1NZU19NQVhfTVREX0JBTktTCShDT05GSUdfU1lTX01BWF9GTEFTSF9CQU5LUyArIFwKKwkJCQkJQ09ORklHX1NZU19NQVhfTkFORF9ERVZJQ0UpCisjZGVmaW5lIENPTkZJR19TWVNfSkZGUzJfTUVNX05BTkQKKy8qIHVzZSBmbGFzaF9pbmZvWzJdICovCisjZGVmaW5lIENPTkZJR19TWVNfSkZGUzJfRklSU1RfQkFOSwlDT05GSUdfU1lTX01BWF9GTEFTSF9CQU5LUworI2RlZmluZSBDT05GSUdfU1lTX0pGRlMyX05VTV9CQU5LUwkxCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCitleHRlcm4gZ3BtY19jc3hfdCAqbmFuZF9jc19iYXNlOworZXh0ZXJuIGdwbWNfdCAqZ3BtY19jZmdfYmFzZTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgYm9vdF9mbGFzaF9iYXNlOworZXh0ZXJuIHZvbGF0aWxlIHVuc2lnbmVkIGludCBib290X2ZsYXNoX2Vudl9hZGRyOworZXh0ZXJuIHVuc2lnbmVkIGludCBib290X2ZsYXNoX29mZjsKK2V4dGVybiB1bnNpZ25lZCBpbnQgYm9vdF9mbGFzaF9zZWM7CitleHRlcm4gdW5zaWduZWQgaW50IGJvb3RfZmxhc2hfdHlwZTsKKyNlbmRpZgorCisKKyNkZWZpbmUgV1JJVEVfTkFORF9DT01NQU5EKGQsIGFkcilcCisJCQl3cml0ZWwoZCwgJm5hbmRfY3NfYmFzZS0+bmFuZF9jbWQpCisjZGVmaW5lIFdSSVRFX05BTkRfQUREUkVTUyhkLCBhZHIpXAorCQkJd3JpdGVsKGQsICZuYW5kX2NzX2Jhc2UtPm5hbmRfYWRyKQorI2RlZmluZSBXUklURV9OQU5EKGQsIGFkcikgd3JpdGV3KGQsICZuYW5kX2NzX2Jhc2UtPm5hbmRfZGF0KQorI2RlZmluZSBSRUFEX05BTkQoYWRyKSByZWFkbCgmbmFuZF9jc19iYXNlLT5uYW5kX2RhdCkKKworLyogT3RoZXIgTkFORCBBY2Nlc3MgQVBJcyAqLworI2RlZmluZSBOQU5EX1dQX09GRigpIGRvIHtyZWFkbCgmZ3BtY19jZmdfYmFzZS0+Y29uZmlnKSB8PSBHUE1DX0NPTkZJR19XUDsgfSBcCisJCQl3aGlsZSAoMCkKKyNkZWZpbmUgTkFORF9XUF9PTigpIGRvIHtyZWFkbCgmZ3BtY19jZmdfYmFzZS0+Y29uZmlnKSAmPSB+R1BNQ19DT05GSUdfV1A7IH0gXAorCQkJd2hpbGUgKDApCisjZGVmaW5lIE5BTkRfRElTQUJMRV9DRShuYW5kKQorI2RlZmluZSBOQU5EX0VOQUJMRV9DRShuYW5kKQorI2RlZmluZSBOQU5EX1dBSVRfUkVBRFkobmFuZCkJdWRlbGF5KDEwKQorCisjZW5kaWYgLyogX19DT05GSUdfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL29tYXAzX2V2bS5oIGIvaW5jbHVkZS9jb25maWdzL29tYXAzX2V2bS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0NDk4YTkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2NvbmZpZ3Mvb21hcDNfZXZtLmgKQEAgLTAsMCArMSwzNDUgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDYtMjAwOAorICogVGV4YXMgSW5zdHJ1bWVudHMuCisgKiBBdXRob3IgOgorICoJTWFuaWthbmRhbiBQaWxsYWkgPG1hbmkucGlsbGFpQHRpLmNvbT4KKyAqIERlcml2ZWQgZnJvbSBCZWFnbGUgQm9hcmQgYW5kIDM0MzAgU0RQIGNvZGUgYnkKKyAqCVJpY2hhcmQgV29vZHJ1ZmYgPHItd29vZHJ1ZmYyQHRpLmNvbT4KKyAqCVN5ZWQgTW9oYW1tZWQgS2hhc2ltIDxraGFzaW1AdGkuY29tPgorICoKKyAqIE1hbmlrYW5kYW4gUGlsbGFpIDxtYW5pLnBpbGxhaUB0aS5jb20+CisgKgorICogQ29uZmlndXJhdGlvbiBzZXR0aW5ncyBmb3IgdGhlIFRJIE9NQVAzIEVWTSBib2FyZC4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4JIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaWZuZGVmIF9fQ09ORklHX0gKKyNkZWZpbmUgX19DT05GSUdfSAorI2luY2x1ZGUgPGFzbS9zaXplcy5oPgorCisvKgorICogSGlnaCBMZXZlbCBDb25maWd1cmF0aW9uIE9wdGlvbnMKKyAqLworI2RlZmluZSBDT05GSUdfQVJNQ09SVEVYQTgJMQkvKiBUaGlzIGlzIGFuIEFSTSBWNyBDUFUgY29yZSAqLworI2RlZmluZSBDT05GSUdfT01BUAkJMQkvKiBpbiBhIFRJIE9NQVAgY29yZSAqLworI2RlZmluZSBDT05GSUdfT01BUDM0WFgJCTEJLyogd2hpY2ggaXMgYSAzNFhYICovCisjZGVmaW5lIENPTkZJR19PTUFQMzQzMAkJMQkvKiB3aGljaCBpcyBpbiBhIDM0MzAgKi8KKyNkZWZpbmUgQ09ORklHX09NQVAzX0VWTQkxCS8qIHdvcmtpbmcgd2l0aCBFVk0gKi8KKworI2luY2x1ZGUgPGFzbS9hcmNoL2NwdS5oPgkvKiBnZXQgY2hpcCBhbmQgYm9hcmQgZGVmcyAqLworI2luY2x1ZGUgPGFzbS9hcmNoL29tYXAzLmg+CisKKy8qIENsb2NrIERlZmluZXMgKi8KKyNkZWZpbmUgVl9PU0NLCQkJMjYwMDAwMDAJLyogQ2xvY2sgb3V0cHV0IGZyb20gVDIgKi8KKyNkZWZpbmUgVl9TQ0xLCQkJKFZfT1NDSyA+PiAxKQorCisjdW5kZWYgQ09ORklHX1VTRV9JUlEJCQkvKiBubyBzdXBwb3J0IGZvciBJUlFzICovCisjZGVmaW5lIENPTkZJR19NSVNDX0lOSVRfUgorCisjZGVmaW5lIENPTkZJR19DTURMSU5FX1RBRwkJMQkvKiBlbmFibGUgcGFzc2luZyBvZiBBVEFHcyAqLworI2RlZmluZSBDT05GSUdfU0VUVVBfTUVNT1JZX1RBR1MJMQorI2RlZmluZSBDT05GSUdfSU5JVFJEX1RBRwkJMQorI2RlZmluZSBDT05GSUdfUkVWSVNJT05fVEFHCQkxCisKKy8qCisgKiBTaXplIG9mIG1hbGxvYygpIHBvb2wKKyAqLworI2RlZmluZSBDT05GSUdfRU5WX1NJWkUJCQlTWl8xMjhLCS8qIFRvdGFsIFNpemUgRW52aXJvbm1lbnQgKi8KKwkJCQkJCS8qIFNlY3RvciAqLworI2RlZmluZSBDT05GSUdfU1lTX01BTExPQ19MRU4JCShDT05GSUdfRU5WX1NJWkUgKyBTWl8xMjhLKQorI2RlZmluZSBDT05GSUdfU1lTX0dCTF9EQVRBX1NJWkUJMTI4CS8qIGJ5dGVzIHJlc2VydmVkIGZvciAqLworCQkJCQkJLyogaW5pdGlhbCBkYXRhICovCisKKy8qCisgKiBIYXJkd2FyZSBkcml2ZXJzCisgKi8KKworLyoKKyAqIE5TMTY1NTAgQ29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIFZfTlMxNjU1MF9DTEsJCQk0ODAwMDAwMAkvKiA0OE1IeiAoQVBMTDk2LzIpICovCisKKyNkZWZpbmUgQ09ORklHX1NZU19OUzE2NTUwCisjZGVmaW5lIENPTkZJR19TWVNfTlMxNjU1MF9TRVJJQUwKKyNkZWZpbmUgQ09ORklHX1NZU19OUzE2NTUwX1JFR19TSVpFCSgtNCkKKyNkZWZpbmUgQ09ORklHX1NZU19OUzE2NTUwX0NMSwkJVl9OUzE2NTUwX0NMSworCisvKgorICogc2VsZWN0IHNlcmlhbCBjb25zb2xlIGNvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBDT05GSUdfQ09OU19JTkRFWAkJMQorI2RlZmluZSBDT05GSUdfU1lTX05TMTY1NTBfQ09NMQkJT01BUDM0WFhfVUFSVDEKKyNkZWZpbmUgQ09ORklHX1NFUklBTDEJCQkxCS8qIFVBUlQxIG9uIE9NQVAzIEVWTSAqLworCisvKiBhbGxvdyB0byBvdmVyd3JpdGUgc2VyaWFsIGFuZCBldGhhZGRyICovCisjZGVmaW5lIENPTkZJR19FTlZfT1ZFUldSSVRFCisjZGVmaW5lIENPTkZJR19CQVVEUkFURQkJCTExNTIwMAorI2RlZmluZSBDT05GSUdfU1lTX0JBVURSQVRFX1RBQkxFCXs0ODAwLCA5NjAwLCAxOTIwMCwgMzg0MDAsIDU3NjAwLFwKKwkJCQkJMTE1MjAwfQorI2RlZmluZSBDT05GSUdfTU1DCQkJMQorI2RlZmluZSBDT05GSUdfT01BUDNfTU1DCQkxCisjZGVmaW5lIENPTkZJR19ET1NfUEFSVElUSU9OCQkxCisKKy8qIGNvbW1hbmRzIHRvIGluY2x1ZGUgKi8KKyNpbmNsdWRlIDxjb25maWdfY21kX2RlZmF1bHQuaD4KKworI2RlZmluZSBDT05GSUdfQ01EX0VYVDIJCS8qIEVYVDIgU3VwcG9ydAkJCSovCisjZGVmaW5lIENPTkZJR19DTURfRkFUCQkvKiBGQVQgc3VwcG9ydAkJCSovCisjZGVmaW5lIENPTkZJR19DTURfSkZGUzIJLyogSkZGUzIgU3VwcG9ydAkJKi8KKworI2RlZmluZSBDT05GSUdfQ01EX0kyQwkJLyogSTJDIHNlcmlhbCBidXMgc3VwcG9ydAkqLworI2RlZmluZSBDT05GSUdfQ01EX01NQwkJLyogTU1DIHN1cHBvcnQJCQkqLworI2RlZmluZSBDT05GSUdfQ01EX09ORU5BTkQJLyogT05FTkFORCBzdXBwb3J0CQkqLworI2RlZmluZSBDT05GSUdfQ01EX0RIQ1AKKyNkZWZpbmUgQ09ORklHX0NNRF9QSU5HCisKKyN1bmRlZiBDT05GSUdfQ01EX0ZMQVNICQkvKiBmbGluZm8sIGVyYXNlLCBwcm90ZWN0CSovCisjdW5kZWYgQ09ORklHX0NNRF9GUEdBCQkvKiBGUEdBIGNvbmZpZ3VyYXRpb24gU3VwcG9ydAkqLworI3VuZGVmIENPTkZJR19DTURfSU1JCQkvKiBpbWluZm8JCQkqLworI3VuZGVmIENPTkZJR19DTURfSU1MUwkJLyogTGlzdCBhbGwgZm91bmQgaW1hZ2VzCSovCisKKyNkZWZpbmUgQ09ORklHX1NZU19OT19GTEFTSAorI2RlZmluZSBDT05GSUdfU1lTX0kyQ19TUEVFRAkJMTAwMDAwCisjZGVmaW5lIENPTkZJR19TWVNfSTJDX1NMQVZFCQkxCisjZGVmaW5lIENPTkZJR19TWVNfSTJDX0JVUwkJMAorI2RlZmluZSBDT05GSUdfU1lTX0kyQ19CVVNfU0VMRUNUCTEKKyNkZWZpbmUgQ09ORklHX0RSSVZFUl9PTUFQMzRYWF9JMkMJMQorCisvKgorICogQm9hcmQgTkFORCBJbmZvLgorICovCisjZGVmaW5lIENPTkZJR19TWVNfTkFORF9BRERSCQlOQU5EX0JBU0UJLyogcGh5c2ljYWwgYWRkcmVzcyAqLworCQkJCQkJCS8qIHRvIGFjY2VzcyBuYW5kICovCisjZGVmaW5lIENPTkZJR19TWVNfTkFORF9CQVNFCQlOQU5EX0JBU0UJLyogcGh5c2ljYWwgYWRkcmVzcyAqLworCQkJCQkJCS8qIHRvIGFjY2VzcyAqLworCQkJCQkJCS8qIG5hbmQgYXQgQ1MwICovCisKKyNkZWZpbmUgQ09ORklHX1NZU19NQVhfTkFORF9ERVZJQ0UJMQkJLyogTWF4IG51bWJlciBvZiAqLworCQkJCQkJCS8qIE5BTkQgZGV2aWNlcyAqLworI2RlZmluZSBTRUNUT1JTSVpFCQkJNTEyCisKKyNkZWZpbmUgTkFORF9BTExPV19FUkFTRV9BTEwKKyNkZWZpbmUgQUREUl9DT0xVTU4JCQkxCisjZGVmaW5lIEFERFJfUEFHRQkJCTIKKyNkZWZpbmUgQUREUl9DT0xVTU5fUEFHRQkJMworCisjZGVmaW5lIE5BTkRfQ2hpcElEX1VOS05PV04JCTB4MDAKKyNkZWZpbmUgTkFORF9NQVhfRkxPT1JTCQkJMQorI2RlZmluZSBOQU5EX01BWF9DSElQUwkJCTEKKyNkZWZpbmUgTkFORF9OT19SQgkJCTEKKyNkZWZpbmUgQ09ORklHX1NZU19OQU5EX1dQCisKKyNkZWZpbmUgQ09ORklHX0pGRlMyX05BTkQKKy8qIG5hbmQgZGV2aWNlIGpmZnMyIGxpdmVzIG9uICovCisjZGVmaW5lIENPTkZJR19KRkZTMl9ERVYJCSJuYW5kMCIKKy8qIHN0YXJ0IG9mIGpmZnMyIHBhcnRpdGlvbiAqLworI2RlZmluZSBDT05GSUdfSkZGUzJfUEFSVF9PRkZTRVQJMHg2ODAwMDAKKyNkZWZpbmUgQ09ORklHX0pGRlMyX1BBUlRfU0laRQkJMHhmOTgwMDAwCS8qIHN6IG9mIGpmZnMyIHBhcnQgKi8KKworLyogRW52aXJvbm1lbnQgaW5mb3JtYXRpb24gKi8KKyNkZWZpbmUgQ09ORklHX0JPT1RERUxBWQkxMAorCisjZGVmaW5lIENPTkZJR19FWFRSQV9FTlZfU0VUVElOR1MgXAorCSJsb2FkYWRkcj0weDgyMDAwMDAwXDAiIFwKKwkiY29uc29sZT10dHlTMiwxMTUyMDBuOFwwIiBcCisJIm1tY2FyZ3M9c2V0ZW52IGJvb3RhcmdzIGNvbnNvbGU9JHtjb25zb2xlfSAiIFwKKwkJInJvb3Q9L2Rldi9tbWNibGswcDIgcncgIiBcCisJCSJyb290ZnN0eXBlPWV4dDMgcm9vdHdhaXRcMCIgXAorCSJuYW5kYXJncz1zZXRlbnYgYm9vdGFyZ3MgY29uc29sZT0ke2NvbnNvbGV9ICIgXAorCQkicm9vdD0vZGV2L210ZGJsb2NrNCBydyAiIFwKKwkJInJvb3Rmc3R5cGU9amZmczJcMCIgXAorCSJsb2FkYm9vdHNjcmlwdD1mYXRsb2FkIG1tYyAwICR7bG9hZGFkZHJ9IGJvb3Quc2NyXDAiIFwKKwkiYm9vdHNjcmlwdD1lY2hvIFJ1bm5pbmcgYm9vdHNjcmlwdCBmcm9tIG1tYyAuLi47ICIgXAorCQkiYXV0b3NjciAke2xvYWRhZGRyfVwwIiBcCisJImxvYWR1aW1hZ2U9ZmF0bG9hZCBtbWMgMCAke2xvYWRhZGRyfSB1SW1hZ2VcMCIgXAorCSJtbWNib290PWVjaG8gQm9vdGluZyBmcm9tIG1tYyAuLi47ICIgXAorCQkicnVuIG1tY2FyZ3M7ICIgXAorCQkiYm9vdG0gJHtsb2FkYWRkcn1cMCIgXAorCSJuYW5kYm9vdD1lY2hvIEJvb3RpbmcgZnJvbSBuYW5kIC4uLjsgIiBcCisJCSJydW4gbmFuZGFyZ3M7ICIgXAorCQkib25lbmFuZCByZWFkICR7bG9hZGFkZHJ9IDI4MDAwMCA0MDAwMDA7ICIgXAorCQkiYm9vdG0gJHtsb2FkYWRkcn1cMCIgXAorCisjZGVmaW5lIENPTkZJR19CT09UQ09NTUFORCBcCisJImlmIG1tY2luaXQ7IHRoZW4gIiBcCisJCSJpZiBydW4gbG9hZGJvb3RzY3JpcHQ7IHRoZW4gIiBcCisJCQkicnVuIGJvb3RzY3JpcHQ7ICIgXAorCQkiZWxzZSAiIFwKKwkJCSJpZiBydW4gbG9hZHVpbWFnZTsgdGhlbiAiIFwKKwkJCQkicnVuIG1tY2Jvb3Q7ICIgXAorCQkJImVsc2UgcnVuIG5hbmRib290OyAiIFwKKwkJCSJmaTsgIiBcCisJCSJmaTsgIiBcCisJImVsc2UgcnVuIG5hbmRib290OyBmaSIKKworI2RlZmluZSBDT05GSUdfQVVUT19DT01QTEVURQkxCisvKgorICogTWlzY2VsbGFuZW91cyBjb25maWd1cmFibGUgb3B0aW9ucworICovCisjZGVmaW5lIFZfUFJPTVBUCQkiT01BUDNfRVZNICMgIgorCisjZGVmaW5lIENPTkZJR19TWVNfTE9OR0hFTFAJCS8qIHVuZGVmIHRvIHNhdmUgbWVtb3J5ICovCisjZGVmaW5lIENPTkZJR19TWVNfSFVTSF9QQVJTRVIJCS8qIHVzZSAiaHVzaCIgY29tbWFuZCBwYXJzZXIgKi8KKyNkZWZpbmUgQ09ORklHX1NZU19QUk9NUFRfSFVTSF9QUzIJIj4gIgorI2RlZmluZSBDT05GSUdfU1lTX1BST01QVAkJVl9QUk9NUFQKKyNkZWZpbmUgQ09ORklHX1NZU19DQlNJWkUJCTI1NgkvKiBDb25zb2xlIEkvTyBCdWZmZXIgU2l6ZSAqLworLyogUHJpbnQgQnVmZmVyIFNpemUgKi8KKyNkZWZpbmUgQ09ORklHX1NZU19QQlNJWkUJCShDT05GSUdfU1lTX0NCU0laRSArIFwKKwkJCQkJc2l6ZW9mKENPTkZJR19TWVNfUFJPTVBUKSArIDE2KQorI2RlZmluZSBDT05GSUdfU1lTX01BWEFSR1MJCTE2CS8qIG1heCBudW1iZXIgb2YgY29tbWFuZCAqLworCQkJCQkJLyogYXJncyAqLworLyogQm9vdCBBcmd1bWVudCBCdWZmZXIgU2l6ZSAqLworI2RlZmluZSBDT05GSUdfU1lTX0JBUkdTSVpFCQkoQ09ORklHX1NZU19DQlNJWkUpCisvKiBtZW10ZXN0IHdvcmtzIG9uICovCisjZGVmaW5lIENPTkZJR19TWVNfTUVNVEVTVF9TVEFSVAkoT01BUDM0WFhfU0RSQ19DUzApCisjZGVmaW5lIENPTkZJR19TWVNfTUVNVEVTVF9FTkQJCShPTUFQMzRYWF9TRFJDX0NTMCArIFwKKwkJCQkJMHgwMUYwMDAwMCkgLyogMzFNQiAqLworCisjdW5kZWYJQ09ORklHX1NZU19DTEtTX0lOX0haCQkvKiBldmVyeXRoaW5nLCBpbmNsIGJvYXJkIGluZm8sICovCisJCQkJCS8qIGluIEh6ICovCisKKyNkZWZpbmUgQ09ORklHX1NZU19MT0FEX0FERFIJCShPTUFQMzRYWF9TRFJDX0NTMCkgLyogZGVmYXVsdCBsb2FkICovCisJCQkJCQkJCS8qIGFkZHJlc3MgKi8KKworLyoKKyAqIDI0MzAgaGFzIDEyIEdQIHRpbWVycywgdGhleSBjYW4gYmUgZHJpdmVuIGJ5IHRoZSBTeXNDbGsgKDEyLzEzLzE5LjIpIG9yIGJ5CisgKiAzMktIeiBjbGssIG9yIGZyb20gZXh0ZXJuYWwgc2lnLiBUaGlzIHJhdGUgaXMgZGl2aWRlZCBieSBhIGxvY2FsIGRpdmlzb3IuCisgKi8KKyNkZWZpbmUgVl9QVlQJCQkJNworCisjZGVmaW5lIENPTkZJR19TWVNfVElNRVJCQVNFCQlPTUFQMzRYWF9HUFQyCisjZGVmaW5lIENPTkZJR19TWVNfUFZUCQkJVl9QVlQJLyogMl4ocHZ0KzEpICovCisjZGVmaW5lIENPTkZJR19TWVNfSFoJCQkoKFZfU0NMSykgLyAoMiA8PCBDT05GSUdfU1lTX1BWVCkpCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFN0YWNrIHNpemVzCisgKgorICogVGhlIHN0YWNrIHNpemVzIGFyZSBzZXQgdXAgaW4gc3RhcnQuUyB1c2luZyB0aGUgc2V0dGluZ3MgYmVsb3cKKyAqLworI2RlZmluZSBDT05GSUdfU1RBQ0tTSVpFCVNaXzEyOEsJLyogcmVndWxhciBzdGFjayAqLworI2lmZGVmIENPTkZJR19VU0VfSVJRCisjZGVmaW5lIENPTkZJR19TVEFDS1NJWkVfSVJRCVNaXzRLCS8qIElSUSBzdGFjayAqLworI2RlZmluZSBDT05GSUdfU1RBQ0tTSVpFX0ZJUQlTWl80SwkvKiBGSVEgc3RhY2sgKi8KKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBQaHlzaWNhbCBNZW1vcnkgTWFwCisgKi8KKyNkZWZpbmUgQ09ORklHX05SX0RSQU1fQkFOS1MJMgkvKiBDUzEgbWF5IG9yIG1heSBub3QgYmUgcG9wdWxhdGVkICovCisjZGVmaW5lIFBIWVNfU0RSQU1fMQkJT01BUDM0WFhfU0RSQ19DUzAKKyNkZWZpbmUgUEhZU19TRFJBTV8xX1NJWkUJU1pfMzJNCS8qIGF0IGxlYXN0IDMyIG1lZyAqLworI2RlZmluZSBQSFlTX1NEUkFNXzIJCU9NQVAzNFhYX1NEUkNfQ1MxCisKKy8qIFNEUkFNIEJhbmsgQWxsb2NhdGlvbiBtZXRob2QgKi8KKyNkZWZpbmUgU0RSQ19SX0JfQwkJMQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBGTEFTSCBhbmQgZW52aXJvbm1lbnQgb3JnYW5pemF0aW9uCisgKi8KKworLyogKioqKiBQSVNNTyBTVVBQT1JUICoqKiAqLworCisvKiBDb25maWd1cmUgdGhlIFBJU01PICovCisjZGVmaW5lIFBJU01PMV9OQU5EX1NJWkUJCUdQTUNfU0laRV8xMjhNCisjZGVmaW5lIFBJU01PMV9PTkVOX1NJWkUJCUdQTUNfU0laRV8xMjhNCisKKyNkZWZpbmUgQ09ORklHX1NZU19NQVhfRkxBU0hfU0VDVAk1MjAJLyogbWF4IG51bWJlciBvZiBzZWN0b3JzICovCisJCQkJCQkvKiBvbiBvbmUgY2hpcCAqLworI2RlZmluZSBDT05GSUdfU1lTX01BWF9GTEFTSF9CQU5LUwkyCS8qIG1heCBudW1iZXIgb2YgZmxhc2ggYmFua3MgKi8KKyNkZWZpbmUgQ09ORklHX1NZU19NT05JVE9SX0xFTgkJU1pfMjU2SwkvKiBSZXNlcnZlIDIgc2VjdG9ycyAqLworCisjZGVmaW5lIENPTkZJR19TWVNfRkxBU0hfQkFTRQkJYm9vdF9mbGFzaF9iYXNlCisKKy8qIE1vbml0b3IgYXQgc3RhcnQgb2YgZmxhc2ggKi8KKyNkZWZpbmUgQ09ORklHX1NZU19NT05JVE9SX0JBU0UJCUNPTkZJR19TWVNfRkxBU0hfQkFTRQorI2RlZmluZSBDT05GSUdfU1lTX09ORU5BTkRfQkFTRQkJT05FTkFORF9NQVAKKworI2RlZmluZSBDT05GSUdfRU5WX0lTX0lOX09ORU5BTkQJMQorI2RlZmluZSBPTkVOQU5EX0VOVl9PRkZTRVQJCTB4MjYwMDAwIC8qIGVudmlyb25tZW50IHN0YXJ0cyBoZXJlICovCisjZGVmaW5lIFNNTkFORF9FTlZfT0ZGU0VUCQkweDI2MDAwMCAvKiBlbnZpcm9ubWVudCBzdGFydHMgaGVyZSAqLworCisjZGVmaW5lIENPTkZJR19TWVNfRU5WX1NFQ1RfU0laRQlib290X2ZsYXNoX3NlYworI2RlZmluZSBDT05GSUdfRU5WX09GRlNFVAkJYm9vdF9mbGFzaF9vZmYKKyNkZWZpbmUgQ09ORklHX0VOVl9BRERSCQkJYm9vdF9mbGFzaF9lbnZfYWRkcgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBDRkkgRkxBU0ggZHJpdmVyIHNldHVwCisgKi8KKy8qIHRpbWVvdXQgdmFsdWVzIGFyZSBpbiB0aWNrcyAqLworI2RlZmluZSBDT05GSUdfU1lTX0ZMQVNIX0VSQVNFX1RPVVQJKDEwMCAqIENPTkZJR19TWVNfSFopCisjZGVmaW5lIENPTkZJR19TWVNfRkxBU0hfV1JJVEVfVE9VVAkoMTAwICogQ09ORklHX1NZU19IWikKKworLyogRmxhc2ggYmFua3MgSkZGUzIgc2hvdWxkIHVzZSAqLworI2RlZmluZSBDT05GSUdfU1lTX01BWF9NVERfQkFOS1MJKENPTkZJR19TWVNfTUFYX0ZMQVNIX0JBTktTICsgXAorCQkJCQlDT05GSUdfU1lTX01BWF9OQU5EX0RFVklDRSkKKyNkZWZpbmUgQ09ORklHX1NZU19KRkZTMl9NRU1fTkFORAorLyogdXNlIGZsYXNoX2luZm9bMl0gKi8KKyNkZWZpbmUgQ09ORklHX1NZU19KRkZTMl9GSVJTVF9CQU5LCUNPTkZJR19TWVNfTUFYX0ZMQVNIX0JBTktTCisjZGVmaW5lIENPTkZJR19TWVNfSkZGUzJfTlVNX0JBTktTCTEKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KK2V4dGVybiBncG1jX2NzeF90ICpuYW5kX2NzX2Jhc2U7CitleHRlcm4gZ3BtY190ICpncG1jX2NmZ19iYXNlOworZXh0ZXJuIHVuc2lnbmVkIGludCBib290X2ZsYXNoX2Jhc2U7CitleHRlcm4gdm9sYXRpbGUgdW5zaWduZWQgaW50IGJvb3RfZmxhc2hfZW52X2FkZHI7CitleHRlcm4gdW5zaWduZWQgaW50IGJvb3RfZmxhc2hfb2ZmOworZXh0ZXJuIHVuc2lnbmVkIGludCBib290X2ZsYXNoX3NlYzsKK2V4dGVybiB1bnNpZ25lZCBpbnQgYm9vdF9mbGFzaF90eXBlOworI2VuZGlmCisKKworI2RlZmluZSBXUklURV9OQU5EX0NPTU1BTkQoZCwgYWRyKVwKKwkJCXdyaXRlbChkLCAmbmFuZF9jc19iYXNlLT5uYW5kX2NtZCkKKyNkZWZpbmUgV1JJVEVfTkFORF9BRERSRVNTKGQsIGFkcilcCisJCQl3cml0ZWwoZCwgJm5hbmRfY3NfYmFzZS0+bmFuZF9hZHIpCisjZGVmaW5lIFdSSVRFX05BTkQoZCwgYWRyKSB3cml0ZXcoZCwgJm5hbmRfY3NfYmFzZS0+bmFuZF9kYXQpCisjZGVmaW5lIFJFQURfTkFORChhZHIpIHJlYWRsKCZuYW5kX2NzX2Jhc2UtPm5hbmRfZGF0KQorCisvKiBPdGhlciBOQU5EIEFjY2VzcyBBUElzICovCisjZGVmaW5lIE5BTkRfV1BfT0ZGKCkgZG8ge3JlYWRsKCZncG1jX2NmZ19iYXNlLT5jb25maWcpIHw9IEdQTUNfQ09ORklHX1dQOyB9IFwKKwkJCXdoaWxlICgwKQorI2RlZmluZSBOQU5EX1dQX09OKCkgZG8ge3JlYWRsKCZncG1jX2NmZ19iYXNlLT5jb25maWcpICY9IH5HUE1DX0NPTkZJR19XUDsgfSBcCisJCQl3aGlsZSAoMCkKKyNkZWZpbmUgTkFORF9ESVNBQkxFX0NFKG5hbmQpCisjZGVmaW5lIE5BTkRfRU5BQkxFX0NFKG5hbmQpCisjZGVmaW5lIE5BTkRfV0FJVF9SRUFEWShuYW5kKQl1ZGVsYXkoMTApCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogU01TQzkxMTUgRXRoZXJuZXQgZnJvbSBTTVNDOTExOCBmYW1pbHkKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaWYgZGVmaW5lZChDT05GSUdfQ01EX05FVCkKKworI2RlZmluZSBDT05GSUdfRFJJVkVSX1NNQzkxMVgKKyNkZWZpbmUgQ09ORklHX0RSSVZFUl9TTUM5MTFYXzMyX0JJVAorI2RlZmluZSBDT05GSUdfRFJJVkVSX1NNQzkxMVhfQkFTRQkweDJDMDAwMDAwCisKKyNlbmRpZiAvKiAoQ09ORklHX0NNRF9ORVQpICovCisKKy8qCisgKiBCT09UUCBmaWVsZHMKKyAqLworCisjZGVmaW5lIENPTkZJR19CT09UUF9TVUJORVRNQVNLCQkweDAwMDAwMDAxCisjZGVmaW5lIENPTkZJR19CT09UUF9HQVRFV0FZCQkweDAwMDAwMDAyCisjZGVmaW5lIENPTkZJR19CT09UUF9IT1NUTkFNRQkJMHgwMDAwMDAwNAorI2RlZmluZSBDT05GSUdfQk9PVFBfQk9PVFBBVEgJCTB4MDAwMDAwMTAKKworI2VuZGlmIC8qIF9fQ09ORklHX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9vbWFwM19vdmVyby5oIGIvaW5jbHVkZS9jb25maWdzL29tYXAzX292ZXJvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGVlMDQxNwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvY29uZmlncy9vbWFwM19vdmVyby5oCkBAIC0wLDAgKzEsMzE4IEBACisvKgorICogQ29uZmlndXJhdGlvbiBzZXR0aW5ncyBmb3IgdGhlIEd1bXN0aXggT3Zlcm8gYm9hcmQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCSBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2lmbmRlZiBfX0NPTkZJR19ICisjZGVmaW5lIF9fQ09ORklHX0gKKyNpbmNsdWRlIDxhc20vc2l6ZXMuaD4KKworLyoKKyAqIEhpZ2ggTGV2ZWwgQ29uZmlndXJhdGlvbiBPcHRpb25zCisgKi8KKyNkZWZpbmUgQ09ORklHX0FSTUNPUlRFWEE4CTEJLyogVGhpcyBpcyBhbiBBUk0gVjcgQ1BVIGNvcmUgKi8KKyNkZWZpbmUgQ09ORklHX09NQVAJCTEJLyogaW4gYSBUSSBPTUFQIGNvcmUgKi8KKyNkZWZpbmUgQ09ORklHX09NQVAzNFhYCQkxCS8qIHdoaWNoIGlzIGEgMzRYWCAqLworI2RlZmluZSBDT05GSUdfT01BUDM0MzAJCTEJLyogd2hpY2ggaXMgaW4gYSAzNDMwICovCisjZGVmaW5lIENPTkZJR19PTUFQM19PVkVSTwkJMQkvKiB3b3JraW5nIHdpdGggb3Zlcm8gKi8KKworI2luY2x1ZGUgPGFzbS9hcmNoL2NwdS5oPgkvKiBnZXQgY2hpcCBhbmQgYm9hcmQgZGVmcyAqLworI2luY2x1ZGUgPGFzbS9hcmNoL29tYXAzLmg+CisKKy8qIENsb2NrIERlZmluZXMgKi8KKyNkZWZpbmUgVl9PU0NLCQkJMjYwMDAwMDAJLyogQ2xvY2sgb3V0cHV0IGZyb20gVDIgKi8KKyNkZWZpbmUgVl9TQ0xLCQkJKFZfT1NDSyA+PiAxKQorCisjdW5kZWYgQ09ORklHX1VTRV9JUlEJCS8qIG5vIHN1cHBvcnQgZm9yIElSUXMgKi8KKyNkZWZpbmUgQ09ORklHX01JU0NfSU5JVF9SCisKKyNkZWZpbmUgQ09ORklHX0NNRExJTkVfVEFHCQkxCS8qIGVuYWJsZSBwYXNzaW5nIG9mIEFUQUdzICovCisjZGVmaW5lIENPTkZJR19TRVRVUF9NRU1PUllfVEFHUwkxCisjZGVmaW5lIENPTkZJR19JTklUUkRfVEFHCQkxCisjZGVmaW5lIENPTkZJR19SRVZJU0lPTl9UQUcJCTEKKworLyoKKyAqIFNpemUgb2YgbWFsbG9jKCkgcG9vbAorICovCisjZGVmaW5lIENPTkZJR19FTlZfU0laRQkJCVNaXzEyOEsJLyogVG90YWwgU2l6ZSBFbnZpcm9ubWVudCAqLworCQkJCQkJLyogU2VjdG9yICovCisjZGVmaW5lIENPTkZJR19TWVNfTUFMTE9DX0xFTgkJKENPTkZJR19FTlZfU0laRSArIFNaXzEyOEspCisjZGVmaW5lIENPTkZJR19TWVNfR0JMX0RBVEFfU0laRQkxMjgJLyogYnl0ZXMgcmVzZXJ2ZWQgZm9yICovCisJCQkJCQkvKiBpbml0aWFsIGRhdGEgKi8KKworLyoKKyAqIEhhcmR3YXJlIGRyaXZlcnMKKyAqLworCisvKgorICogTlMxNjU1MCBDb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgVl9OUzE2NTUwX0NMSwkJCTQ4MDAwMDAwCS8qIDQ4TUh6IChBUExMOTYvMikgKi8KKworI2RlZmluZSBDT05GSUdfU1lTX05TMTY1NTAKKyNkZWZpbmUgQ09ORklHX1NZU19OUzE2NTUwX1NFUklBTAorI2RlZmluZSBDT05GSUdfU1lTX05TMTY1NTBfUkVHX1NJWkUJKC00KQorI2RlZmluZSBDT05GSUdfU1lTX05TMTY1NTBfQ0xLCQlWX05TMTY1NTBfQ0xLCisKKy8qCisgKiBzZWxlY3Qgc2VyaWFsIGNvbnNvbGUgY29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENPTkZJR19DT05TX0lOREVYCQkzCisjZGVmaW5lIENPTkZJR19TWVNfTlMxNjU1MF9DT00zCQlPTUFQMzRYWF9VQVJUMworI2RlZmluZSBDT05GSUdfU0VSSUFMMwkJCTMKKworLyogYWxsb3cgdG8gb3ZlcndyaXRlIHNlcmlhbCBhbmQgZXRoYWRkciAqLworI2RlZmluZSBDT05GSUdfRU5WX09WRVJXUklURQorI2RlZmluZSBDT05GSUdfQkFVRFJBVEUJCQkxMTUyMDAKKyNkZWZpbmUgQ09ORklHX1NZU19CQVVEUkFURV9UQUJMRQl7NDgwMCwgOTYwMCwgMTkyMDAsIDM4NDAwLCA1NzYwMCwgXAorCQkJCQkxMTUyMDB9CisjZGVmaW5lIENPTkZJR19NTUMJCQkxCisjZGVmaW5lIENPTkZJR19PTUFQM19NTUMJCTEKKyNkZWZpbmUgQ09ORklHX0RPU19QQVJUSVRJT04JCTEKKworLyogY29tbWFuZHMgdG8gaW5jbHVkZSAqLworI2luY2x1ZGUgPGNvbmZpZ19jbWRfZGVmYXVsdC5oPgorCisjZGVmaW5lIENPTkZJR19DTURfRVhUMgkJLyogRVhUMiBTdXBwb3J0CQkJKi8KKyNkZWZpbmUgQ09ORklHX0NNRF9GQVQJCS8qIEZBVCBzdXBwb3J0CQkJKi8KKyNkZWZpbmUgQ09ORklHX0NNRF9KRkZTMgkvKiBKRkZTMiBTdXBwb3J0CQkqLworCisjZGVmaW5lIENPTkZJR19DTURfSTJDCQkvKiBJMkMgc2VyaWFsIGJ1cyBzdXBwb3J0CSovCisjZGVmaW5lIENPTkZJR19DTURfTU1DCQkvKiBNTUMgc3VwcG9ydAkJCSovCisjZGVmaW5lIENPTkZJR19DTURfTkFORAkJLyogTkFORCBzdXBwb3J0CQkJKi8KKworI3VuZGVmIENPTkZJR19DTURfRkxBU0gJCS8qIGZsaW5mbywgZXJhc2UsIHByb3RlY3QJKi8KKyN1bmRlZiBDT05GSUdfQ01EX0ZQR0EJCS8qIEZQR0EgY29uZmlndXJhdGlvbiBTdXBwb3J0CSovCisjdW5kZWYgQ09ORklHX0NNRF9JTUkJCS8qIGltaW5mbwkJCSovCisjdW5kZWYgQ09ORklHX0NNRF9JTUxTCQkvKiBMaXN0IGFsbCBmb3VuZCBpbWFnZXMJKi8KKyN1bmRlZiBDT05GSUdfQ01EX05FVAkJLyogYm9vdHAsIHRmdHBib290LCByYXJwYm9vdAkqLworI3VuZGVmIENPTkZJR19DTURfTkZTCQkvKiBORlMgc3VwcG9ydAkJCSovCisKKyNkZWZpbmUgQ09ORklHX1NZU19OT19GTEFTSAorI2RlZmluZSBDT05GSUdfU1lTX0kyQ19TUEVFRAkJMTAwMDAwCisjZGVmaW5lIENPTkZJR19TWVNfSTJDX1NMQVZFCQkxCisjZGVmaW5lIENPTkZJR19TWVNfSTJDX0JVUwkJMAorI2RlZmluZSBDT05GSUdfU1lTX0kyQ19CVVNfU0VMRUNUCTEKKyNkZWZpbmUgQ09ORklHX0RSSVZFUl9PTUFQMzRYWF9JMkMJMQorCisvKgorICogQm9hcmQgTkFORCBJbmZvLgorICovCisjZGVmaW5lIENPTkZJR19OQU5EX09NQVBfR1BNQworI2RlZmluZSBDT05GSUdfU1lTX05BTkRfQUREUgkJTkFORF9CQVNFCS8qIHBoeXNpY2FsIGFkZHJlc3MgKi8KKwkJCQkJCQkvKiB0byBhY2Nlc3MgbmFuZCAqLworI2RlZmluZSBDT05GSUdfU1lTX05BTkRfQkFTRQkJTkFORF9CQVNFCS8qIHBoeXNpY2FsIGFkZHJlc3MgKi8KKwkJCQkJCQkvKiB0byBhY2Nlc3MgbmFuZCAqLworCQkJCQkJCS8qIGF0IENTMCAqLworI2RlZmluZSBHUE1DX05BTkRfRUNDX0xQX3gxNl9MQVlPVVQJMQorCisjZGVmaW5lIENPTkZJR19TWVNfTUFYX05BTkRfREVWSUNFCTEJLyogTWF4IG51bWJlciBvZiBOQU5EICovCisJCQkJCQkvKiBkZXZpY2VzICovCisjZGVmaW5lIFNFQ1RPUlNJWkUJCQk1MTIKKworI2RlZmluZSBOQU5EX0FMTE9XX0VSQVNFX0FMTAorI2RlZmluZSBBRERSX0NPTFVNTgkJCTEKKyNkZWZpbmUgQUREUl9QQUdFCQkJMgorI2RlZmluZSBBRERSX0NPTFVNTl9QQUdFCQkzCisKKyNkZWZpbmUgTkFORF9DaGlwSURfVU5LTk9XTgkJMHgwMAorI2RlZmluZSBOQU5EX01BWF9GTE9PUlMJCQkxCisjZGVmaW5lIE5BTkRfTUFYX0NISVBTCQkJMQorI2RlZmluZSBOQU5EX05PX1JCCQkJMQorI2RlZmluZSBDT05GSUdfU1lTX05BTkRfV1AKKworI2RlZmluZSBDT05GSUdfSkZGUzJfTkFORAorLyogbmFuZCBkZXZpY2UgamZmczIgbGl2ZXMgb24gKi8KKyNkZWZpbmUgQ09ORklHX0pGRlMyX0RFVgkJIm5hbmQwIgorLyogc3RhcnQgb2YgamZmczIgcGFydGl0aW9uICovCisjZGVmaW5lIENPTkZJR19KRkZTMl9QQVJUX09GRlNFVAkweDY4MDAwMAorI2RlZmluZSBDT05GSUdfSkZGUzJfUEFSVF9TSVpFCQkweGY5ODAwMDAJLyogc2l6ZSBvZiBqZmZzMiAqLworCQkJCQkJCS8qIHBhcnRpdGlvbiAqLworCisvKiBFbnZpcm9ubWVudCBpbmZvcm1hdGlvbiAqLworI2RlZmluZSBDT05GSUdfQk9PVERFTEFZCQk1CisKKyNkZWZpbmUgQ09ORklHX0VYVFJBX0VOVl9TRVRUSU5HUyBcCisJImxvYWRhZGRyPTB4ODIwMDAwMDBcMCIgXAorCSJjb25zb2xlPXR0eVMyLDExNTIwMG44XDAiIFwKKwkidmlkZW9tb2RlPTEwMjR4NzY4QDYwLHZ4cmVzPTEwMjQsdnlyZXM9NzY4XDAiIFwKKwkidmlkZW9zcGVjPW9tYXBmYjp2cmFtOjJNLHZyYW06NE1cMCIgXAorCSJtbWNhcmdzPXNldGVudiBib290YXJncyBjb25zb2xlPSR7Y29uc29sZX0gIiBcCisJCSJ2aWRlbz0ke3ZpZGVvc3BlY30sbW9kZToke3ZpZGVvbW9kZX0gIiBcCisJCSJyb290PS9kZXYvbW1jYmxrMHAyIHJ3ICIgXAorCQkicm9vdGZzdHlwZT1leHQzIHJvb3R3YWl0XDAiIFwKKwkibmFuZGFyZ3M9c2V0ZW52IGJvb3RhcmdzIGNvbnNvbGU9JHtjb25zb2xlfSAiIFwKKwkJInZpZGVvPSR7dmlkZW9zcGVjfSxtb2RlOiR7dmlkZW9tb2RlfSAiIFwKKwkJInJvb3Q9L2Rldi9tdGRibG9jazQgcncgIiBcCisJCSJyb290ZnN0eXBlPWpmZnMyXDAiIFwKKwkibG9hZGJvb3RzY3JpcHQ9ZmF0bG9hZCBtbWMgMCAke2xvYWRhZGRyfSBib290LnNjclwwIiBcCisJImJvb3RzY3JpcHQ9ZWNobyBSdW5uaW5nIGJvb3RzY3JpcHQgZnJvbSBtbWMgLi4uOyAiIFwKKwkJImF1dG9zY3IgJHtsb2FkYWRkcn1cMCIgXAorCSJsb2FkdWltYWdlPWZhdGxvYWQgbW1jIDAgJHtsb2FkYWRkcn0gdUltYWdlXDAiIFwKKwkibW1jYm9vdD1lY2hvIEJvb3RpbmcgZnJvbSBtbWMgLi4uOyAiIFwKKwkJInJ1biBtbWNhcmdzOyAiIFwKKwkJImJvb3RtICR7bG9hZGFkZHJ9XDAiIFwKKwkibmFuZGJvb3Q9ZWNobyBCb290aW5nIGZyb20gbmFuZCAuLi47ICIgXAorCQkicnVuIG5hbmRhcmdzOyAiIFwKKwkJIm5hbmQgcmVhZCAke2xvYWRhZGRyfSAyODAwMDAgNDAwMDAwOyAiIFwKKwkJImJvb3RtICR7bG9hZGFkZHJ9XDAiIFwKKworI2RlZmluZSBDT05GSUdfQk9PVENPTU1BTkQgXAorCSJpZiBtbWNpbml0OyB0aGVuICIgXAorCQkiaWYgcnVuIGxvYWRib290c2NyaXB0OyB0aGVuICIgXAorCQkJInJ1biBib290c2NyaXB0OyAiIFwKKwkJImVsc2UgIiBcCisJCQkiaWYgcnVuIGxvYWR1aW1hZ2U7IHRoZW4gIiBcCisJCQkJInJ1biBtbWNib290OyAiIFwKKwkJCSJlbHNlIHJ1biBuYW5kYm9vdDsgIiBcCisJCQkiZmk7ICIgXAorCQkiZmk7ICIgXAorCSJlbHNlIHJ1biBuYW5kYm9vdDsgZmkiCisKKyNkZWZpbmUgQ09ORklHX0FVVE9fQ09NUExFVEUJMQorLyoKKyAqIE1pc2NlbGxhbmVvdXMgY29uZmlndXJhYmxlIG9wdGlvbnMKKyAqLworI2RlZmluZSBWX1BST01QVAkJIk92ZXJvICMgIgorCisjZGVmaW5lIENPTkZJR19TWVNfTE9OR0hFTFAJCS8qIHVuZGVmIHRvIHNhdmUgbWVtb3J5ICovCisjZGVmaW5lIENPTkZJR19TWVNfSFVTSF9QQVJTRVIJCS8qIHVzZSAiaHVzaCIgY29tbWFuZCBwYXJzZXIgKi8KKyNkZWZpbmUgQ09ORklHX1NZU19QUk9NUFRfSFVTSF9QUzIJIj4gIgorI2RlZmluZSBDT05GSUdfU1lTX1BST01QVAkJVl9QUk9NUFQKKyNkZWZpbmUgQ09ORklHX1NZU19DQlNJWkUJCTI1NgkvKiBDb25zb2xlIEkvTyBCdWZmZXIgU2l6ZSAqLworLyogUHJpbnQgQnVmZmVyIFNpemUgKi8KKyNkZWZpbmUgQ09ORklHX1NZU19QQlNJWkUJCShDT05GSUdfU1lTX0NCU0laRSArIFwKKwkJCQkJc2l6ZW9mKENPTkZJR19TWVNfUFJPTVBUKSArIDE2KQorI2RlZmluZSBDT05GSUdfU1lTX01BWEFSR1MJCTE2CS8qIG1heCBudW1iZXIgb2YgY29tbWFuZCAqLworCQkJCQkJLyogYXJncyAqLworLyogQm9vdCBBcmd1bWVudCBCdWZmZXIgU2l6ZSAqLworI2RlZmluZSBDT05GSUdfU1lTX0JBUkdTSVpFCQlDT05GSUdfU1lTX0NCU0laRQorLyogbWVtdGVzdCB3b3JrcyBvbiAqLworI2RlZmluZSBDT05GSUdfU1lTX01FTVRFU1RfU1RBUlQJKE9NQVAzNFhYX1NEUkNfQ1MwKQorI2RlZmluZSBDT05GSUdfU1lTX01FTVRFU1RfRU5ECQkoT01BUDM0WFhfU0RSQ19DUzAgKyBcCisJCQkJCTB4MDFGMDAwMDApIC8qIDMxTUIgKi8KKworI3VuZGVmCUNPTkZJR19TWVNfQ0xLU19JTl9IWgkJLyogZXZlcnl0aGluZywgaW5jbCBib2FyZCBpbmZvLCAqLworCQkJCQkvKiBpbiBIeiAqLworCisjZGVmaW5lIENPTkZJR19TWVNfTE9BRF9BRERSCQkoT01BUDM0WFhfU0RSQ19DUzApIC8qIGRlZmF1bHQgbG9hZCAqLworCQkJCQkJCQkvKiBhZGRyZXNzICovCisKKy8qCisgKiAyNDMwIGhhcyAxMiBHUCB0aW1lcnMsIHRoZXkgY2FuIGJlIGRyaXZlbiBieSB0aGUgU3lzQ2xrICgxMi8xMy8xOS4yKSBvciBieQorICogMzJLSHogY2xrLCBvciBmcm9tIGV4dGVybmFsIHNpZy4gVGhpcyByYXRlIGlzIGRpdmlkZWQgYnkgYSBsb2NhbCBkaXZpc29yLgorICovCisjZGVmaW5lIFZfUFZUCQkJCTcKKworI2RlZmluZSBDT05GSUdfU1lTX1RJTUVSQkFTRQkJKE9NQVAzNFhYX0dQVDIpCisjZGVmaW5lIENPTkZJR19TWVNfUFZUCQkJVl9QVlQJLyogMl4ocHZ0KzEpICovCisjZGVmaW5lIENPTkZJR19TWVNfSFoJCQkoKFZfU0NMSykgLyAoMiA8PCBDT05GSUdfU1lTX1BWVCkpCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFN0YWNrIHNpemVzCisgKgorICogVGhlIHN0YWNrIHNpemVzIGFyZSBzZXQgdXAgaW4gc3RhcnQuUyB1c2luZyB0aGUgc2V0dGluZ3MgYmVsb3cKKyAqLworI2RlZmluZSBDT05GSUdfU1RBQ0tTSVpFCVNaXzEyOEsJLyogcmVndWxhciBzdGFjayAqLworI2lmZGVmIENPTkZJR19VU0VfSVJRCisjZGVmaW5lIENPTkZJR19TVEFDS1NJWkVfSVJRCVNaXzRLCS8qIElSUSBzdGFjayAqLworI2RlZmluZSBDT05GSUdfU1RBQ0tTSVpFX0ZJUQlTWl80SwkvKiBGSVEgc3RhY2sgKi8KKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBQaHlzaWNhbCBNZW1vcnkgTWFwCisgKi8KKyNkZWZpbmUgQ09ORklHX05SX0RSQU1fQkFOS1MJMgkvKiBDUzEgbWF5IG9yIG1heSBub3QgYmUgcG9wdWxhdGVkICovCisjZGVmaW5lIFBIWVNfU0RSQU1fMQkJT01BUDM0WFhfU0RSQ19DUzAKKyNkZWZpbmUgUEhZU19TRFJBTV8xX1NJWkUJU1pfMzJNCS8qIGF0IGxlYXN0IDMyIG1lZyAqLworI2RlZmluZSBQSFlTX1NEUkFNXzIJCU9NQVAzNFhYX1NEUkNfQ1MxCisKKy8qIFNEUkFNIEJhbmsgQWxsb2NhdGlvbiBtZXRob2QgKi8KKyNkZWZpbmUgU0RSQ19SX0JfQwkJMQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBGTEFTSCBhbmQgZW52aXJvbm1lbnQgb3JnYW5pemF0aW9uCisgKi8KKworLyogKioqKiBQSVNNTyBTVVBQT1JUICoqKiAqLworCisvKiBDb25maWd1cmUgdGhlIFBJU01PICovCisjZGVmaW5lIFBJU01PMV9OQU5EX1NJWkUJCUdQTUNfU0laRV8xMjhNCisjZGVmaW5lIFBJU01PMV9PTkVOX1NJWkUJCUdQTUNfU0laRV8xMjhNCisKKyNkZWZpbmUgQ09ORklHX1NZU19NQVhfRkxBU0hfU0VDVAk1MjAJLyogbWF4IG51bWJlciBvZiBzZWN0b3JzIG9uICovCisJCQkJCQkvKiBvbmUgY2hpcCAqLworI2RlZmluZSBDT05GSUdfU1lTX01BWF9GTEFTSF9CQU5LUwkyCS8qIG1heCBudW1iZXIgb2YgZmxhc2ggYmFua3MgKi8KKyNkZWZpbmUgQ09ORklHX1NZU19NT05JVE9SX0xFTgkJU1pfMjU2SwkvKiBSZXNlcnZlIDIgc2VjdG9ycyAqLworCisjZGVmaW5lIENPTkZJR19TWVNfRkxBU0hfQkFTRQkJYm9vdF9mbGFzaF9iYXNlCisKKy8qIE1vbml0b3IgYXQgc3RhcnQgb2YgZmxhc2ggKi8KKyNkZWZpbmUgQ09ORklHX1NZU19NT05JVE9SX0JBU0UJCUNPTkZJR19TWVNfRkxBU0hfQkFTRQorI2RlZmluZSBDT05GSUdfU1lTX09ORU5BTkRfQkFTRQkJT05FTkFORF9NQVAKKworI2RlZmluZSBDT05GSUdfRU5WX0lTX0lOX05BTkQJCTEKKyNkZWZpbmUgT05FTkFORF9FTlZfT0ZGU0VUCQkweDI0MDAwMCAvKiBlbnZpcm9ubWVudCBzdGFydHMgaGVyZSAqLworI2RlZmluZSBTTU5BTkRfRU5WX09GRlNFVAkJMHgyNDAwMDAgLyogZW52aXJvbm1lbnQgc3RhcnRzIGhlcmUgKi8KKworI2RlZmluZSBDT05GSUdfU1lTX0VOVl9TRUNUX1NJWkUJYm9vdF9mbGFzaF9zZWMKKyNkZWZpbmUgQ09ORklHX0VOVl9PRkZTRVQJCWJvb3RfZmxhc2hfb2ZmCisjZGVmaW5lIENPTkZJR19FTlZfQUREUgkJCVNNTkFORF9FTlZfT0ZGU0VUCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIENGSSBGTEFTSCBkcml2ZXIgc2V0dXAKKyAqLworLyogdGltZW91dCB2YWx1ZXMgYXJlIGluIHRpY2tzICovCisjZGVmaW5lIENPTkZJR19TWVNfRkxBU0hfRVJBU0VfVE9VVAkoMTAwICogQ09ORklHX1NZU19IWikKKyNkZWZpbmUgQ09ORklHX1NZU19GTEFTSF9XUklURV9UT1VUCSgxMDAgKiBDT05GSUdfU1lTX0haKQorCisvKiBGbGFzaCBiYW5rcyBKRkZTMiBzaG91bGQgdXNlICovCisjZGVmaW5lIENPTkZJR19TWVNfTUFYX01URF9CQU5LUwkoQ09ORklHX1NZU19NQVhfRkxBU0hfQkFOS1MgKyBcCisJCQkJCUNPTkZJR19TWVNfTUFYX05BTkRfREVWSUNFKQorI2RlZmluZSBDT05GSUdfU1lTX0pGRlMyX01FTV9OQU5ECisvKiB1c2UgZmxhc2hfaW5mb1syXSAqLworI2RlZmluZSBDT05GSUdfU1lTX0pGRlMyX0ZJUlNUX0JBTksJQ09ORklHX1NZU19NQVhfRkxBU0hfQkFOS1MKKyNkZWZpbmUgQ09ORklHX1NZU19KRkZTMl9OVU1fQkFOS1MJMQorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworZXh0ZXJuIGdwbWNfY3N4X3QgKm5hbmRfY3NfYmFzZTsKK2V4dGVybiBncG1jX3QgKmdwbWNfY2ZnX2Jhc2U7CitleHRlcm4gdW5zaWduZWQgaW50IGJvb3RfZmxhc2hfYmFzZTsKK2V4dGVybiB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgYm9vdF9mbGFzaF9lbnZfYWRkcjsKK2V4dGVybiB1bnNpZ25lZCBpbnQgYm9vdF9mbGFzaF9vZmY7CitleHRlcm4gdW5zaWduZWQgaW50IGJvb3RfZmxhc2hfc2VjOworZXh0ZXJuIHVuc2lnbmVkIGludCBib290X2ZsYXNoX3R5cGU7CisjZW5kaWYKKworCisjZGVmaW5lIFdSSVRFX05BTkRfQ09NTUFORChkLCBhZHIpXAorCQkJd3JpdGVsKGQsICZuYW5kX2NzX2Jhc2UtPm5hbmRfY21kKQorI2RlZmluZSBXUklURV9OQU5EX0FERFJFU1MoZCwgYWRyKVwKKwkJCXdyaXRlbChkLCAmbmFuZF9jc19iYXNlLT5uYW5kX2FkcikKKyNkZWZpbmUgV1JJVEVfTkFORChkLCBhZHIpIHdyaXRldyhkLCAmbmFuZF9jc19iYXNlLT5uYW5kX2RhdCkKKyNkZWZpbmUgUkVBRF9OQU5EKGFkcikgcmVhZGwoJm5hbmRfY3NfYmFzZS0+bmFuZF9kYXQpCisKKy8qIE90aGVyIE5BTkQgQWNjZXNzIEFQSXMgKi8KKyNkZWZpbmUgTkFORF9XUF9PRkYoKSBkbyB7cmVhZGwoJmdwbWNfY2ZnX2Jhc2UtPmNvbmZpZykgfD0gR1BNQ19DT05GSUdfV1A7IH0gXAorCQkJd2hpbGUgKDApCisjZGVmaW5lIE5BTkRfV1BfT04oKSBkbyB7cmVhZGwoJmdwbWNfY2ZnX2Jhc2UtPmNvbmZpZykgJj0gfkdQTUNfQ09ORklHX1dQOyB9IFwKKwkJCXdoaWxlICgwKQorI2RlZmluZSBOQU5EX0RJU0FCTEVfQ0UobmFuZCkKKyNkZWZpbmUgTkFORF9FTkFCTEVfQ0UobmFuZCkKKyNkZWZpbmUgTkFORF9XQUlUX1JFQURZKG5hbmQpCXVkZWxheSgxMCkKKworI2VuZGlmCQkJCS8qIF9fQ09ORklHX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9vbWFwM19wYW5kb3JhLmggYi9pbmNsdWRlL2NvbmZpZ3Mvb21hcDNfcGFuZG9yYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwYzAzNzQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2NvbmZpZ3Mvb21hcDNfcGFuZG9yYS5oCkBAIC0wLDAgKzEsMzIwIEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDA4CisgKiBHcmF6dnlkYXMgSWdub3RhcyA8bm90YXNhc0BnbWFpbC5jb20+CisgKgorICogQ29uZmlndXJhdGlvbiBzZXR0aW5ncyBmb3IgdGhlIE9NQVAzIFBhbmRvcmEuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCSBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2lmbmRlZiBfX0NPTkZJR19ICisjZGVmaW5lIF9fQ09ORklHX0gKKyNpbmNsdWRlIDxhc20vc2l6ZXMuaD4KKworLyoKKyAqIEhpZ2ggTGV2ZWwgQ29uZmlndXJhdGlvbiBPcHRpb25zCisgKi8KKyNkZWZpbmUgQ09ORklHX0FSTUNPUlRFWEE4CTEJLyogVGhpcyBpcyBhbiBBUk0gVjcgQ1BVIGNvcmUgKi8KKyNkZWZpbmUgQ09ORklHX09NQVAJCTEJLyogaW4gYSBUSSBPTUFQIGNvcmUgKi8KKyNkZWZpbmUgQ09ORklHX09NQVAzNFhYCQkxCS8qIHdoaWNoIGlzIGEgMzRYWCAqLworI2RlZmluZSBDT05GSUdfT01BUDM0MzAJCTEJLyogd2hpY2ggaXMgaW4gYSAzNDMwICovCisjZGVmaW5lIENPTkZJR19PTUFQM19QQU5ET1JBCTEJLyogd29ya2luZyB3aXRoIHBhbmRvcmEgKi8KKworI2luY2x1ZGUgPGFzbS9hcmNoL2NwdS5oPgkvKiBnZXQgY2hpcCBhbmQgYm9hcmQgZGVmcyAqLworI2luY2x1ZGUgPGFzbS9hcmNoL29tYXAzLmg+CisKKy8qIENsb2NrIERlZmluZXMgKi8KKyNkZWZpbmUgVl9PU0NLCQkJMjYwMDAwMDAJLyogQ2xvY2sgb3V0cHV0IGZyb20gVDIgKi8KKyNkZWZpbmUgVl9TQ0xLCQkJKFZfT1NDSyA+PiAxKQorCisjdW5kZWYgQ09ORklHX1VTRV9JUlEJCS8qIG5vIHN1cHBvcnQgZm9yIElSUXMgKi8KKyNkZWZpbmUgQ09ORklHX01JU0NfSU5JVF9SCisKKyNkZWZpbmUgQ09ORklHX0NNRExJTkVfVEFHCQkxCS8qIGVuYWJsZSBwYXNzaW5nIG9mIEFUQUdzICovCisjZGVmaW5lIENPTkZJR19TRVRVUF9NRU1PUllfVEFHUwkxCisjZGVmaW5lIENPTkZJR19JTklUUkRfVEFHCQkxCisjZGVmaW5lIENPTkZJR19SRVZJU0lPTl9UQUcJCTEKKworLyoKKyAqIFNpemUgb2YgbWFsbG9jKCkgcG9vbAorICovCisjZGVmaW5lIENPTkZJR19FTlZfU0laRQkJCVNaXzEyOEsJLyogVG90YWwgU2l6ZSBFbnZpcm9ubWVudCAqLworCQkJCQkJLyogU2VjdG9yICovCisjZGVmaW5lIENPTkZJR19TWVNfTUFMTE9DX0xFTgkJKENPTkZJR19FTlZfU0laRSArIFNaXzEyOEspCisjZGVmaW5lIENPTkZJR19TWVNfR0JMX0RBVEFfU0laRQkxMjgJLyogYnl0ZXMgcmVzZXJ2ZWQgZm9yICovCisJCQkJCQkvKiBpbml0aWFsIGRhdGEgKi8KKworLyoKKyAqIEhhcmR3YXJlIGRyaXZlcnMKKyAqLworCisvKgorICogTlMxNjU1MCBDb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgVl9OUzE2NTUwX0NMSwkJCTQ4MDAwMDAwCS8qIDQ4TUh6IChBUExMOTYvMikgKi8KKworI2RlZmluZSBDT05GSUdfU1lTX05TMTY1NTAKKyNkZWZpbmUgQ09ORklHX1NZU19OUzE2NTUwX1NFUklBTAorI2RlZmluZSBDT05GSUdfU1lTX05TMTY1NTBfUkVHX1NJWkUJKC00KQorI2RlZmluZSBDT05GSUdfU1lTX05TMTY1NTBfQ0xLCQlWX05TMTY1NTBfQ0xLCisKKy8qCisgKiBzZWxlY3Qgc2VyaWFsIGNvbnNvbGUgY29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENPTkZJR19DT05TX0lOREVYCQkzCisjZGVmaW5lIENPTkZJR19TWVNfTlMxNjU1MF9DT00zCQlPTUFQMzRYWF9VQVJUMworI2RlZmluZSBDT05GSUdfU0VSSUFMMwkJCTMKKworLyogYWxsb3cgdG8gb3ZlcndyaXRlIHNlcmlhbCBhbmQgZXRoYWRkciAqLworI2RlZmluZSBDT05GSUdfRU5WX09WRVJXUklURQorI2RlZmluZSBDT05GSUdfQkFVRFJBVEUJCQkxMTUyMDAKKyNkZWZpbmUgQ09ORklHX1NZU19CQVVEUkFURV9UQUJMRQl7NDgwMCwgOTYwMCwgMTkyMDAsIDM4NDAwLCA1NzYwMCwgXAorCQkJCQkxMTUyMDB9CisjZGVmaW5lIENPTkZJR19NTUMJCQkxCisjZGVmaW5lIENPTkZJR19PTUFQM19NTUMJCTEKKyNkZWZpbmUgQ09ORklHX0RPU19QQVJUSVRJT04JCTEKKworLyogY29tbWFuZHMgdG8gaW5jbHVkZSAqLworI2luY2x1ZGUgPGNvbmZpZ19jbWRfZGVmYXVsdC5oPgorCisjZGVmaW5lIENPTkZJR19DTURfRVhUMgkJLyogRVhUMiBTdXBwb3J0CQkJKi8KKyNkZWZpbmUgQ09ORklHX0NNRF9GQVQJCS8qIEZBVCBzdXBwb3J0CQkJKi8KKyNkZWZpbmUgQ09ORklHX0NNRF9KRkZTMgkvKiBKRkZTMiBTdXBwb3J0CQkqLworCisjZGVmaW5lIENPTkZJR19DTURfSTJDCQkvKiBJMkMgc2VyaWFsIGJ1cyBzdXBwb3J0CSovCisjZGVmaW5lIENPTkZJR19DTURfTU1DCQkvKiBNTUMgc3VwcG9ydAkJCSovCisjZGVmaW5lIENPTkZJR19DTURfTkFORAkJLyogTkFORCBzdXBwb3J0CQkJKi8KKworI3VuZGVmIENPTkZJR19DTURfRkxBU0gJCS8qIGZsaW5mbywgZXJhc2UsIHByb3RlY3QJKi8KKyN1bmRlZiBDT05GSUdfQ01EX0ZQR0EJCS8qIEZQR0EgY29uZmlndXJhdGlvbiBTdXBwb3J0CSovCisjdW5kZWYgQ09ORklHX0NNRF9JTUkJCS8qIGltaW5mbwkJCSovCisjdW5kZWYgQ09ORklHX0NNRF9JTUxTCQkvKiBMaXN0IGFsbCBmb3VuZCBpbWFnZXMJKi8KKyN1bmRlZiBDT05GSUdfQ01EX05FVAkJLyogYm9vdHAsIHRmdHBib290LCByYXJwYm9vdAkqLworI3VuZGVmIENPTkZJR19DTURfTkZTCQkvKiBORlMgc3VwcG9ydAkJCSovCisKKyNkZWZpbmUgQ09ORklHX1NZU19OT19GTEFTSAorI2RlZmluZSBDT05GSUdfU1lTX0kyQ19TUEVFRAkJMTAwMDAwCisjZGVmaW5lIENPTkZJR19TWVNfSTJDX1NMQVZFCQkxCisjZGVmaW5lIENPTkZJR19TWVNfSTJDX0JVUwkJMAorI2RlZmluZSBDT05GSUdfU1lTX0kyQ19CVVNfU0VMRUNUCTEKKyNkZWZpbmUgQ09ORklHX0RSSVZFUl9PTUFQMzRYWF9JMkMJMQorCisvKgorICogQm9hcmQgTkFORCBJbmZvLgorICovCisjZGVmaW5lIENPTkZJR19OQU5EX09NQVBfR1BNQworI2RlZmluZSBDT05GSUdfU1lTX05BTkRfQUREUgkJTkFORF9CQVNFCS8qIHBoeXNpY2FsIGFkZHJlc3MgKi8KKwkJCQkJCQkvKiB0byBhY2Nlc3MgbmFuZCAqLworI2RlZmluZSBDT05GSUdfU1lTX05BTkRfQkFTRQkJTkFORF9CQVNFCS8qIHBoeXNpY2FsIGFkZHJlc3MgKi8KKwkJCQkJCQkvKiB0byBhY2Nlc3MgbmFuZCAqLworCQkJCQkJCS8qIGF0IENTMCAqLworI2RlZmluZSBHUE1DX05BTkRfRUNDX0xQX3gxNl9MQVlPVVQJMQorCisjZGVmaW5lIENPTkZJR19TWVNfTUFYX05BTkRfREVWSUNFCTEJLyogTWF4IG51bWJlciBvZiBOQU5EICovCisJCQkJCQkvKiBkZXZpY2VzICovCisjZGVmaW5lIFNFQ1RPUlNJWkUJCQk1MTIKKworI2RlZmluZSBOQU5EX0FMTE9XX0VSQVNFX0FMTAorI2RlZmluZSBBRERSX0NPTFVNTgkJCTEKKyNkZWZpbmUgQUREUl9QQUdFCQkJMgorI2RlZmluZSBBRERSX0NPTFVNTl9QQUdFCQkzCisKKyNkZWZpbmUgTkFORF9DaGlwSURfVU5LTk9XTgkJMHgwMAorI2RlZmluZSBOQU5EX01BWF9GTE9PUlMJCQkxCisjZGVmaW5lIE5BTkRfTUFYX0NISVBTCQkJMQorI2RlZmluZSBOQU5EX05PX1JCCQkJMQorI2RlZmluZSBDT05GSUdfU1lTX05BTkRfV1AKKworI2RlZmluZSBDT05GSUdfSkZGUzJfTkFORAorLyogbmFuZCBkZXZpY2UgamZmczIgbGl2ZXMgb24gKi8KKyNkZWZpbmUgQ09ORklHX0pGRlMyX0RFVgkJIm5hbmQwIgorLyogc3RhcnQgb2YgamZmczIgcGFydGl0aW9uICovCisjZGVmaW5lIENPTkZJR19KRkZTMl9QQVJUX09GRlNFVAkweDY4MDAwMAorI2RlZmluZSBDT05GSUdfSkZGUzJfUEFSVF9TSVpFCQkweGY5ODAwMDAJLyogc2l6ZSBvZiBqZmZzMiAqLworCQkJCQkJCS8qIHBhcnRpdGlvbiAqLworCisvKiBFbnZpcm9ubWVudCBpbmZvcm1hdGlvbiAqLworI2RlZmluZSBDT05GSUdfQk9PVERFTEFZCQkxCisKKyNkZWZpbmUgQ09ORklHX0VYVFJBX0VOVl9TRVRUSU5HUyBcCisJImxvYWRhZGRyPTB4ODIwMDAwMDBcMCIgXAorCSJjb25zb2xlPXR0eVMwLDExNTIwMG44XDAiIFwKKwkidmlkZW9zcGVjPW9tYXBmYjp2cmFtOjJNLHZyYW06NE1cMCIgXAorCSJtbWNhcmdzPXNldGVudiBib290YXJncyBjb25zb2xlPSR7Y29uc29sZX0gIiBcCisJCSJ2aWRlbz0ke3ZpZGVvc3BlY30gIiBcCisJCSJyb290PS9kZXYvbW1jYmxrMHAyIHJ3ICIgXAorCQkicm9vdGZzdHlwZT1leHQzIHJvb3R3YWl0XDAiIFwKKwkibmFuZGFyZ3M9c2V0ZW52IGJvb3RhcmdzIGNvbnNvbGU9JHtjb25zb2xlfSAiIFwKKwkJInZpZGVvPSR7dmlkZW9zcGVjfSAiIFwKKwkJInJvb3Q9L2Rldi9tdGRibG9jazQgcncgIiBcCisJCSJyb290ZnN0eXBlPWpmZnMyXDAiIFwKKwkibG9hZGJvb3RzY3JpcHQ9ZmF0bG9hZCBtbWMgMCAke2xvYWRhZGRyfSBib290LnNjclwwIiBcCisJImJvb3RzY3JpcHQ9ZWNobyBSdW5uaW5nIGJvb3RzY3JpcHQgZnJvbSBtbWMgLi4uOyAiIFwKKwkJImF1dG9zY3IgJHtsb2FkYWRkcn1cMCIgXAorCSJsb2FkdWltYWdlPWZhdGxvYWQgbW1jIDAgJHtsb2FkYWRkcn0gdUltYWdlXDAiIFwKKwkibW1jYm9vdD1lY2hvIEJvb3RpbmcgZnJvbSBtbWMgLi4uOyAiIFwKKwkJInJ1biBtbWNhcmdzOyAiIFwKKwkJImJvb3RtICR7bG9hZGFkZHJ9XDAiIFwKKwkibmFuZGJvb3Q9ZWNobyBCb290aW5nIGZyb20gbmFuZCAuLi47ICIgXAorCQkicnVuIG5hbmRhcmdzOyAiIFwKKwkJIm5hbmQgcmVhZCAke2xvYWRhZGRyfSAyODAwMDAgNDAwMDAwOyAiIFwKKwkJImJvb3RtICR7bG9hZGFkZHJ9XDAiIFwKKworI2RlZmluZSBDT05GSUdfQk9PVENPTU1BTkQgXAorCSJpZiBtbWNpbml0OyB0aGVuICIgXAorCQkiaWYgcnVuIGxvYWRib290c2NyaXB0OyB0aGVuICIgXAorCQkJInJ1biBib290c2NyaXB0OyAiIFwKKwkJImVsc2UgIiBcCisJCQkiaWYgcnVuIGxvYWR1aW1hZ2U7IHRoZW4gIiBcCisJCQkJInJ1biBtbWNib290OyAiIFwKKwkJCSJlbHNlIHJ1biBuYW5kYm9vdDsgIiBcCisJCQkiZmk7ICIgXAorCQkiZmk7ICIgXAorCSJlbHNlIHJ1biBuYW5kYm9vdDsgZmkiCisKKyNkZWZpbmUgQ09ORklHX0FVVE9fQ09NUExFVEUJMQorLyoKKyAqIE1pc2NlbGxhbmVvdXMgY29uZmlndXJhYmxlIG9wdGlvbnMKKyAqLworI2RlZmluZSBWX1BST01QVAkJIlBhbmRvcmEgIyAiCisKKyNkZWZpbmUgQ09ORklHX1NZU19MT05HSEVMUAkJLyogdW5kZWYgdG8gc2F2ZSBtZW1vcnkgKi8KKyNkZWZpbmUgQ09ORklHX1NZU19IVVNIX1BBUlNFUgkJLyogdXNlICJodXNoIiBjb21tYW5kIHBhcnNlciAqLworI2RlZmluZSBDT05GSUdfU1lTX1BST01QVF9IVVNIX1BTMgkiPiAiCisjZGVmaW5lIENPTkZJR19TWVNfUFJPTVBUCQlWX1BST01QVAorI2RlZmluZSBDT05GSUdfU1lTX0NCU0laRQkJMjU2CS8qIENvbnNvbGUgSS9PIEJ1ZmZlciBTaXplICovCisvKiBQcmludCBCdWZmZXIgU2l6ZSAqLworI2RlZmluZSBDT05GSUdfU1lTX1BCU0laRQkJKENPTkZJR19TWVNfQ0JTSVpFICsgXAorCQkJCQlzaXplb2YoQ09ORklHX1NZU19QUk9NUFQpICsgMTYpCisjZGVmaW5lIENPTkZJR19TWVNfTUFYQVJHUwkJMTYJLyogbWF4IG51bWJlciBvZiBjb21tYW5kICovCisJCQkJCQkvKiBhcmdzICovCisvKiBCb290IEFyZ3VtZW50IEJ1ZmZlciBTaXplICovCisjZGVmaW5lIENPTkZJR19TWVNfQkFSR1NJWkUJCUNPTkZJR19TWVNfQ0JTSVpFCisvKiBtZW10ZXN0IHdvcmtzIG9uICovCisjZGVmaW5lIENPTkZJR19TWVNfTUVNVEVTVF9TVEFSVAkoT01BUDM0WFhfU0RSQ19DUzApCisjZGVmaW5lIENPTkZJR19TWVNfTUVNVEVTVF9FTkQJCShPTUFQMzRYWF9TRFJDX0NTMCArIFwKKwkJCQkJMHgwMUYwMDAwMCkgLyogMzFNQiAqLworCisjdW5kZWYJQ09ORklHX1NZU19DTEtTX0lOX0haCQkvKiBldmVyeXRoaW5nLCBpbmNsIGJvYXJkIGluZm8sICovCisJCQkJCS8qIGluIEh6ICovCisKKyNkZWZpbmUgQ09ORklHX1NZU19MT0FEX0FERFIJCShPTUFQMzRYWF9TRFJDX0NTMCkgLyogZGVmYXVsdCBsb2FkICovCisJCQkJCQkJCS8qIGFkZHJlc3MgKi8KKworLyoKKyAqIDI0MzAgaGFzIDEyIEdQIHRpbWVycywgdGhleSBjYW4gYmUgZHJpdmVuIGJ5IHRoZSBTeXNDbGsgKDEyLzEzLzE5LjIpIG9yIGJ5CisgKiAzMktIeiBjbGssIG9yIGZyb20gZXh0ZXJuYWwgc2lnLiBUaGlzIHJhdGUgaXMgZGl2aWRlZCBieSBhIGxvY2FsIGRpdmlzb3IuCisgKi8KKyNkZWZpbmUgVl9QVlQJCQkJNworCisjZGVmaW5lIENPTkZJR19TWVNfVElNRVJCQVNFCQkoT01BUDM0WFhfR1BUMikKKyNkZWZpbmUgQ09ORklHX1NZU19QVlQJCQlWX1BWVAkvKiAyXihwdnQrMSkgKi8KKyNkZWZpbmUgQ09ORklHX1NZU19IWgkJCSgoVl9TQ0xLKSAvICgyIDw8IENPTkZJR19TWVNfUFZUKSkKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogU3RhY2sgc2l6ZXMKKyAqCisgKiBUaGUgc3RhY2sgc2l6ZXMgYXJlIHNldCB1cCBpbiBzdGFydC5TIHVzaW5nIHRoZSBzZXR0aW5ncyBiZWxvdworICovCisjZGVmaW5lIENPTkZJR19TVEFDS1NJWkUJU1pfMTI4SwkvKiByZWd1bGFyIHN0YWNrICovCisjaWZkZWYgQ09ORklHX1VTRV9JUlEKKyNkZWZpbmUgQ09ORklHX1NUQUNLU0laRV9JUlEJU1pfNEsJLyogSVJRIHN0YWNrICovCisjZGVmaW5lIENPTkZJR19TVEFDS1NJWkVfRklRCVNaXzRLCS8qIEZJUSBzdGFjayAqLworI2VuZGlmCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFBoeXNpY2FsIE1lbW9yeSBNYXAKKyAqLworI2RlZmluZSBDT05GSUdfTlJfRFJBTV9CQU5LUwkyCS8qIENTMSBtYXkgb3IgbWF5IG5vdCBiZSBwb3B1bGF0ZWQgKi8KKyNkZWZpbmUgUEhZU19TRFJBTV8xCQlPTUFQMzRYWF9TRFJDX0NTMAorI2RlZmluZSBQSFlTX1NEUkFNXzFfU0laRQlTWl8zMk0JLyogYXQgbGVhc3QgMzIgbWVnICovCisjZGVmaW5lIFBIWVNfU0RSQU1fMgkJT01BUDM0WFhfU0RSQ19DUzEKKworLyogU0RSQU0gQmFuayBBbGxvY2F0aW9uIG1ldGhvZCAqLworI2RlZmluZSBTRFJDX1JfQl9DCQkxCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIEZMQVNIIGFuZCBlbnZpcm9ubWVudCBvcmdhbml6YXRpb24KKyAqLworCisvKiAqKioqIFBJU01PIFNVUFBPUlQgKioqICovCisKKy8qIENvbmZpZ3VyZSB0aGUgUElTTU8gKi8KKyNkZWZpbmUgUElTTU8xX05BTkRfU0laRQkJR1BNQ19TSVpFXzEyOE0KKyNkZWZpbmUgUElTTU8xX09ORU5fU0laRQkJR1BNQ19TSVpFXzEyOE0KKworI2RlZmluZSBDT05GSUdfU1lTX01BWF9GTEFTSF9TRUNUCTUyMAkvKiBtYXggbnVtYmVyIG9mIHNlY3RvcnMgb24gKi8KKwkJCQkJCS8qIG9uZSBjaGlwICovCisjZGVmaW5lIENPTkZJR19TWVNfTUFYX0ZMQVNIX0JBTktTCTIJLyogbWF4IG51bWJlciBvZiBmbGFzaCBiYW5rcyAqLworI2RlZmluZSBDT05GSUdfU1lTX01PTklUT1JfTEVOCQlTWl8yNTZLCS8qIFJlc2VydmUgMiBzZWN0b3JzICovCisKKyNkZWZpbmUgQ09ORklHX1NZU19GTEFTSF9CQVNFCQlib290X2ZsYXNoX2Jhc2UKKworLyogTW9uaXRvciBhdCBzdGFydCBvZiBmbGFzaCAqLworI2RlZmluZSBDT05GSUdfU1lTX01PTklUT1JfQkFTRQkJQ09ORklHX1NZU19GTEFTSF9CQVNFCisjZGVmaW5lIENPTkZJR19TWVNfT05FTkFORF9CQVNFCQlPTkVOQU5EX01BUAorCisjZGVmaW5lIENPTkZJR19FTlZfSVNfSU5fTkFORAkJMQorI2RlZmluZSBPTkVOQU5EX0VOVl9PRkZTRVQJCTB4MjQwMDAwIC8qIGVudmlyb25tZW50IHN0YXJ0cyBoZXJlICovCisjZGVmaW5lIFNNTkFORF9FTlZfT0ZGU0VUCQkweDI0MDAwMCAvKiBlbnZpcm9ubWVudCBzdGFydHMgaGVyZSAqLworCisjZGVmaW5lIENPTkZJR19TWVNfRU5WX1NFQ1RfU0laRQlib290X2ZsYXNoX3NlYworI2RlZmluZSBDT05GSUdfRU5WX09GRlNFVAkJYm9vdF9mbGFzaF9vZmYKKyNkZWZpbmUgQ09ORklHX0VOVl9BRERSCQkJU01OQU5EX0VOVl9PRkZTRVQKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogQ0ZJIEZMQVNIIGRyaXZlciBzZXR1cAorICovCisvKiB0aW1lb3V0IHZhbHVlcyBhcmUgaW4gdGlja3MgKi8KKyNkZWZpbmUgQ09ORklHX1NZU19GTEFTSF9FUkFTRV9UT1VUCSgxMDAgKiBDT05GSUdfU1lTX0haKQorI2RlZmluZSBDT05GSUdfU1lTX0ZMQVNIX1dSSVRFX1RPVVQJKDEwMCAqIENPTkZJR19TWVNfSFopCisKKy8qIEZsYXNoIGJhbmtzIEpGRlMyIHNob3VsZCB1c2UgKi8KKyNkZWZpbmUgQ09ORklHX1NZU19NQVhfTVREX0JBTktTCShDT05GSUdfU1lTX01BWF9GTEFTSF9CQU5LUyArIFwKKwkJCQkJQ09ORklHX1NZU19NQVhfTkFORF9ERVZJQ0UpCisjZGVmaW5lIENPTkZJR19TWVNfSkZGUzJfTUVNX05BTkQKKy8qIHVzZSBmbGFzaF9pbmZvWzJdICovCisjZGVmaW5lIENPTkZJR19TWVNfSkZGUzJfRklSU1RfQkFOSwlDT05GSUdfU1lTX01BWF9GTEFTSF9CQU5LUworI2RlZmluZSBDT05GSUdfU1lTX0pGRlMyX05VTV9CQU5LUwkxCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCitleHRlcm4gZ3BtY19jc3hfdCAqbmFuZF9jc19iYXNlOworZXh0ZXJuIGdwbWNfdCAqZ3BtY19jZmdfYmFzZTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgYm9vdF9mbGFzaF9iYXNlOworZXh0ZXJuIHZvbGF0aWxlIHVuc2lnbmVkIGludCBib290X2ZsYXNoX2Vudl9hZGRyOworZXh0ZXJuIHVuc2lnbmVkIGludCBib290X2ZsYXNoX29mZjsKK2V4dGVybiB1bnNpZ25lZCBpbnQgYm9vdF9mbGFzaF9zZWM7CitleHRlcm4gdW5zaWduZWQgaW50IGJvb3RfZmxhc2hfdHlwZTsKKyNlbmRpZgorCisKKyNkZWZpbmUgV1JJVEVfTkFORF9DT01NQU5EKGQsIGFkcilcCisJCQl3cml0ZWwoZCwgJm5hbmRfY3NfYmFzZS0+bmFuZF9jbWQpCisjZGVmaW5lIFdSSVRFX05BTkRfQUREUkVTUyhkLCBhZHIpXAorCQkJd3JpdGVsKGQsICZuYW5kX2NzX2Jhc2UtPm5hbmRfYWRyKQorI2RlZmluZSBXUklURV9OQU5EKGQsIGFkcikgd3JpdGV3KGQsICZuYW5kX2NzX2Jhc2UtPm5hbmRfZGF0KQorI2RlZmluZSBSRUFEX05BTkQoYWRyKSByZWFkbCgmbmFuZF9jc19iYXNlLT5uYW5kX2RhdCkKKworLyogT3RoZXIgTkFORCBBY2Nlc3MgQVBJcyAqLworI2RlZmluZSBOQU5EX1dQX09GRigpIGRvIHtyZWFkbCgmZ3BtY19jZmdfYmFzZS0+Y29uZmlnKSB8PSBHUE1DX0NPTkZJR19XUDsgfSBcCisJCQl3aGlsZSAoMCkKKyNkZWZpbmUgTkFORF9XUF9PTigpIGRvIHtyZWFkbCgmZ3BtY19jZmdfYmFzZS0+Y29uZmlnKSAmPSB+R1BNQ19DT05GSUdfV1A7IH0gXAorCQkJd2hpbGUgKDApCisjZGVmaW5lIE5BTkRfRElTQUJMRV9DRShuYW5kKQorI2RlZmluZSBOQU5EX0VOQUJMRV9DRShuYW5kKQorI2RlZmluZSBOQU5EX1dBSVRfUkVBRFkobmFuZCkJdWRlbGF5KDEwKQorCisjZW5kaWYJCQkJLyogX19DT05GSUdfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL29tYXAzX3pvb20xLmggYi9pbmNsdWRlL2NvbmZpZ3Mvb21hcDNfem9vbTEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NGQyNDE2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9jb25maWdzL29tYXAzX3pvb20xLmgKQEAgLTAsMCArMSwzMjYgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDYtMjAwOAorICogVGV4YXMgSW5zdHJ1bWVudHMuCisgKiBSaWNoYXJkIFdvb2RydWZmIDxyLXdvb2RydWZmMkB0aS5jb20+CisgKiBTeWVkIE1vaGFtbWVkIEtoYXNpbSA8eDBraGFzaW1AdGkuY29tPgorICogTmlzaGFudGggTWVub24gPG5tQHRpLmNvbT4KKyAqCisgKiBDb25maWd1cmF0aW9uIHNldHRpbmdzIGZvciB0aGUgVEkgT01BUDM0MzAgWm9vbSBNREsgYm9hcmQuCisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCSBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2lmbmRlZiBfX0NPTkZJR19ICisjZGVmaW5lIF9fQ09ORklHX0gKKyNpbmNsdWRlIDxhc20vc2l6ZXMuaD4KKworLyoKKyAqIEhpZ2ggTGV2ZWwgQ29uZmlndXJhdGlvbiBPcHRpb25zCisgKi8KKyNkZWZpbmUgQ09ORklHX0FSTUNPUlRFWEE4CTEJLyogVGhpcyBpcyBhbiBBUk0gVjcgQ1BVIGNvcmUgKi8KKyNkZWZpbmUgQ09ORklHX09NQVAJCTEJLyogaW4gYSBUSSBPTUFQIGNvcmUgKi8KKyNkZWZpbmUgQ09ORklHX09NQVAzNFhYCQkxCS8qIHdoaWNoIGlzIGEgMzRYWCAqLworI2RlZmluZSBDT05GSUdfT01BUDM0MzAJCTEJLyogd2hpY2ggaXMgaW4gYSAzNDMwICovCisjZGVmaW5lIENPTkZJR19PTUFQM19aT09NMQkxCS8qIHdvcmtpbmcgd2l0aCBab29tIE1ESyBSZXYxICovCisKKyNpbmNsdWRlIDxhc20vYXJjaC9jcHUuaD4JCS8qIGdldCBjaGlwIGFuZCBib2FyZCBkZWZzICovCisjaW5jbHVkZSA8YXNtL2FyY2gvb21hcDMuaD4KKworLyogQ2xvY2sgRGVmaW5lcyAqLworI2RlZmluZSBWX09TQ0sJCQkyNjAwMDAwMAkvKiBDbG9jayBvdXRwdXQgZnJvbSBUMiAqLworI2RlZmluZSBWX1NDTEsJCQkoVl9PU0NLID4+IDEpCisKKyN1bmRlZiBDT05GSUdfVVNFX0lSUQkJCQkvKiBubyBzdXBwb3J0IGZvciBJUlFzICovCisjZGVmaW5lIENPTkZJR19NSVNDX0lOSVRfUgorCisjZGVmaW5lIENPTkZJR19DTURMSU5FX1RBRwkJMQkvKiBlbmFibGUgcGFzc2luZyBvZiBBVEFHcyAqLworI2RlZmluZSBDT05GSUdfU0VUVVBfTUVNT1JZX1RBR1MJMQorI2RlZmluZSBDT05GSUdfSU5JVFJEX1RBRwkJMQorI2RlZmluZSBDT05GSUdfUkVWSVNJT05fVEFHCQkxCisKKy8qCisgKiBTaXplIG9mIG1hbGxvYygpIHBvb2wKKyAqLworI2RlZmluZSBDT05GSUdfRU5WX1NJWkUJCQlTWl8xMjhLCS8qIFRvdGFsIFNpemUgRW52aXJvbm1lbnQgKi8KKwkJCQkJCS8qIFNlY3RvciAqLworI2RlZmluZSBDT05GSUdfU1lTX01BTExPQ19MRU4JCShDT05GSUdfRU5WX1NJWkUgKyBTWl8xMjhLKQorI2RlZmluZSBDT05GSUdfU1lTX0dCTF9EQVRBX1NJWkUJMTI4CS8qIGJ5dGVzIHJlc2VydmVkIGZvciAqLworCQkJCQkJLyogaW5pdGlhbCBkYXRhICovCisKKy8qCisgKiBIYXJkd2FyZSBkcml2ZXJzCisgKi8KKworLyoKKyAqIE5TMTY1NTAgQ29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIFZfTlMxNjU1MF9DTEsJCQk0ODAwMDAwMAkvKiA0OE1IeiAoQVBMTDk2LzIpICovCisKKyNkZWZpbmUgQ09ORklHX1NZU19OUzE2NTUwCisjZGVmaW5lIENPTkZJR19TWVNfTlMxNjU1MF9TRVJJQUwKKyNkZWZpbmUgQ09ORklHX1NZU19OUzE2NTUwX1JFR19TSVpFCSgtNCkKKyNkZWZpbmUgQ09ORklHX1NZU19OUzE2NTUwX0NMSwkJVl9OUzE2NTUwX0NMSworCisvKgorICogc2VsZWN0IHNlcmlhbCBjb25zb2xlIGNvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBDT05GSUdfQ09OU19JTkRFWAkJMworI2RlZmluZSBDT05GSUdfU1lTX05TMTY1NTBfQ09NMwkJT01BUDM0WFhfVUFSVDMKKyNkZWZpbmUgQ09ORklHX1NFUklBTDMJCQkzCS8qIFVBUlQzICovCisKKy8qIGFsbG93IHRvIG92ZXJ3cml0ZSBzZXJpYWwgYW5kIGV0aGFkZHIgKi8KKyNkZWZpbmUgQ09ORklHX0VOVl9PVkVSV1JJVEUKKyNkZWZpbmUgQ09ORklHX0JBVURSQVRFCQkJMTE1MjAwCisjZGVmaW5lIENPTkZJR19TWVNfQkFVRFJBVEVfVEFCTEUJezQ4MDAsIDk2MDAsIDE5MjAwLCAzODQwMCwgNTc2MDAsXAorCQkJCQkxMTUyMDB9CisjZGVmaW5lIENPTkZJR19NTUMJCQkxCisjZGVmaW5lIENPTkZJR19PTUFQM19NTUMJCTEKKyNkZWZpbmUgQ09ORklHX0RPU19QQVJUSVRJT04JCTEKKworLyogY29tbWFuZHMgdG8gaW5jbHVkZSAqLworI2luY2x1ZGUgPGNvbmZpZ19jbWRfZGVmYXVsdC5oPgorCisjZGVmaW5lIENPTkZJR19DTURfRVhUMgkJLyogRVhUMiBTdXBwb3J0CQkJKi8KKyNkZWZpbmUgQ09ORklHX0NNRF9GQVQJCS8qIEZBVCBzdXBwb3J0CQkJKi8KKyNkZWZpbmUgQ09ORklHX0NNRF9KRkZTMgkvKiBKRkZTMiBTdXBwb3J0CQkqLworCisjZGVmaW5lIENPTkZJR19DTURfSTJDCQkvKiBJMkMgc2VyaWFsIGJ1cyBzdXBwb3J0CSovCisjZGVmaW5lIENPTkZJR19DTURfTU1DCQkvKiBNTUMgc3VwcG9ydAkJCSovCisjZGVmaW5lIENPTkZJR19DTURfTkFORAkJLyogTkFORCBzdXBwb3J0CQkJKi8KKworI3VuZGVmIENPTkZJR19DTURfRkxBU0gJCS8qIGZsaW5mbywgZXJhc2UsIHByb3RlY3QJKi8KKyN1bmRlZiBDT05GSUdfQ01EX0ZQR0EJCS8qIEZQR0EgY29uZmlndXJhdGlvbiBTdXBwb3J0CSovCisjdW5kZWYgQ09ORklHX0NNRF9JTUkJCS8qIGltaW5mbwkJCSovCisjdW5kZWYgQ09ORklHX0NNRF9JTUxTCQkvKiBMaXN0IGFsbCBmb3VuZCBpbWFnZXMJKi8KKyN1bmRlZiBDT05GSUdfQ01EX05FVAkJLyogYm9vdHAsIHRmdHBib290LCByYXJwYm9vdAkqLworI3VuZGVmIENPTkZJR19DTURfTkZTCQkvKiBORlMgc3VwcG9ydAkJCSovCisKKyNkZWZpbmUgQ09ORklHX1NZU19OT19GTEFTSAorI2RlZmluZSBDT05GSUdfU1lTX0kyQ19TUEVFRAkJMTAwMDAwCisjZGVmaW5lIENPTkZJR19TWVNfSTJDX1NMQVZFCQkxCisjZGVmaW5lIENPTkZJR19TWVNfSTJDX0JVUwkJMAorI2RlZmluZSBDT05GSUdfU1lTX0kyQ19CVVNfU0VMRUNUCTEKKyNkZWZpbmUgQ09ORklHX0RSSVZFUl9PTUFQMzRYWF9JMkMJMQorCisvKgorICogQm9hcmQgTkFORCBJbmZvLgorICovCisjZGVmaW5lIENPTkZJR19OQU5EX09NQVBfR1BNQworI2RlZmluZSBDT05GSUdfU1lTX05BTkRfQUREUgkJTkFORF9CQVNFCS8qIHBoeXNpY2FsIGFkZHJlc3MgKi8KKwkJCQkJCQkvKiB0byBhY2Nlc3MgbmFuZCAqLworI2RlZmluZSBDT05GSUdfU1lTX05BTkRfQkFTRQkJTkFORF9CQVNFCS8qIHBoeXNpY2FsIGFkZHJlc3MgKi8KKwkJCQkJCQkvKiB0byBhY2Nlc3MgbmFuZCBhdCAqLworCQkJCQkJCS8qIENTMCAqLworI2RlZmluZSBHUE1DX05BTkRfRUNDX0xQX3gxNl9MQVlPVVQJMQorCisjZGVmaW5lIENPTkZJR19TWVNfTUFYX05BTkRfREVWSUNFCTEJCS8qIE1heCBudW1iZXIgb2YgTkFORCAqLworCQkJCQkJCS8qIGRldmljZXMgKi8KKyNkZWZpbmUgU0VDVE9SU0laRQkJCTUxMgorCisjZGVmaW5lIE5BTkRfQUxMT1dfRVJBU0VfQUxMCisjZGVmaW5lIEFERFJfQ09MVU1OCQkJMQorI2RlZmluZSBBRERSX1BBR0UJCQkyCisjZGVmaW5lIEFERFJfQ09MVU1OX1BBR0UJCTMKKworI2RlZmluZSBOQU5EX0NoaXBJRF9VTktOT1dOCQkweDAwCisjZGVmaW5lIE5BTkRfTUFYX0ZMT09SUwkJCTEKKyNkZWZpbmUgTkFORF9NQVhfQ0hJUFMJCQkxCisjZGVmaW5lIE5BTkRfTk9fUkIJCQkxCisjZGVmaW5lIENPTkZJR19TWVNfTkFORF9XUAorCisjZGVmaW5lIENPTkZJR19KRkZTMl9OQU5ECisvKiBuYW5kIGRldmljZSBqZmZzMiBsaXZlcyBvbiAqLworI2RlZmluZSBDT05GSUdfSkZGUzJfREVWCQkibmFuZDAiCisvKiBzdGFydCBvZiBqZmZzMiBwYXJ0aXRpb24gKi8KKyNkZWZpbmUgQ09ORklHX0pGRlMyX1BBUlRfT0ZGU0VUCTB4NjgwMDAwCisjZGVmaW5lIENPTkZJR19KRkZTMl9QQVJUX1NJWkUJCTB4Zjk4MDAwMAkvKiBzaXplIG9mIGpmZnMyICovCisJCQkJCQkJLyogcGFydGl0aW9uICovCisKKy8qIEVudmlyb25tZW50IGluZm9ybWF0aW9uICovCisjZGVmaW5lIENPTkZJR19CT09UREVMQVkJCTEwCisKKyNkZWZpbmUgQ09ORklHX0VYVFJBX0VOVl9TRVRUSU5HUyBcCisJImxvYWRhZGRyPTB4ODIwMDAwMDBcMCIgXAorCSJjb25zb2xlPXR0eVMyLDExNTIwMG44XDAiIFwKKwkidmlkZW9tb2RlPTEwMjR4NzY4QDYwLHZ4cmVzPTEwMjQsdnlyZXM9NzY4XDAiIFwKKwkidmlkZW9zcGVjPW9tYXBmYjp2cmFtOjJNLHZyYW06NE1cMCIgXAorCSJtbWNhcmdzPXNldGVudiBib290YXJncyBjb25zb2xlPSR7Y29uc29sZX0gIiBcCisJCSJ2aWRlbz0ke3ZpZGVvc3BlY30sbW9kZToke3ZpZGVvbW9kZX0gIiBcCisJCSJyb290PS9kZXYvbW1jYmxrMHAyIHJ3ICIgXAorCQkicm9vdGZzdHlwZT1leHQzIHJvb3R3YWl0XDAiIFwKKwkibmFuZGFyZ3M9c2V0ZW52IGJvb3RhcmdzIGNvbnNvbGU9JHtjb25zb2xlfSAiIFwKKwkJInZpZGVvPSR7dmlkZW9zcGVjfSxtb2RlOiR7dmlkZW9tb2RlfSAiIFwKKwkJInJvb3Q9L2Rldi9tdGRibG9jazQgcncgIiBcCisJCSJyb290ZnN0eXBlPWpmZnMyXDAiIFwKKwkibG9hZGJvb3RzY3JpcHQ9ZmF0bG9hZCBtbWMgMCAke2xvYWRhZGRyfSBib290LnNjclwwIiBcCisJImJvb3RzY3JpcHQ9ZWNobyBSdW5uaW5nIGJvb3RzY3JpcHQgZnJvbSBtbWMgLi4uOyAiIFwKKwkJImF1dG9zY3IgJHtsb2FkYWRkcn1cMCIgXAorCSJsb2FkdWltYWdlPWZhdGxvYWQgbW1jIDAgJHtsb2FkYWRkcn0gdUltYWdlXDAiIFwKKwkibW1jYm9vdD1lY2hvIEJvb3RpbmcgZnJvbSBtbWMgLi4uOyAiIFwKKwkJInJ1biBtbWNhcmdzOyAiIFwKKwkJImJvb3RtICR7bG9hZGFkZHJ9XDAiIFwKKwkibmFuZGJvb3Q9ZWNobyBCb290aW5nIGZyb20gbmFuZCAuLi47ICIgXAorCQkicnVuIG5hbmRhcmdzOyAiIFwKKwkJIm5hbmQgcmVhZCAke2xvYWRhZGRyfSAyODAwMDAgNDAwMDAwOyAiIFwKKwkJImJvb3RtICR7bG9hZGFkZHJ9XDAiIFwKKworI2RlZmluZSBDT05GSUdfQk9PVENPTU1BTkQgXAorCSJpZiBtbWNpbml0OyB0aGVuICIgXAorCQkiaWYgcnVuIGxvYWRib290c2NyaXB0OyB0aGVuICIgXAorCQkJInJ1biBib290c2NyaXB0OyAiIFwKKwkJImVsc2UgIiBcCisJCQkiaWYgcnVuIGxvYWR1aW1hZ2U7IHRoZW4gIiBcCisJCQkJInJ1biBtbWNib290OyAiIFwKKwkJCSJlbHNlIHJ1biBuYW5kYm9vdDsgIiBcCisJCQkiZmk7ICIgXAorCQkiZmk7ICIgXAorCSJlbHNlIHJ1biBuYW5kYm9vdDsgZmkiCisKKyNkZWZpbmUgQ09ORklHX0FVVE9fQ09NUExFVEUJCTEKKy8qCisgKiBNaXNjZWxsYW5lb3VzIGNvbmZpZ3VyYWJsZSBvcHRpb25zCisgKi8KKyNkZWZpbmUgVl9QUk9NUFQJCQkiT01BUDMgWm9vbTEjICIKKworI2RlZmluZSBDT05GSUdfU1lTX0xPTkdIRUxQCQkvKiB1bmRlZiB0byBzYXZlIG1lbW9yeSAqLworI2RlZmluZSBDT05GSUdfU1lTX0hVU0hfUEFSU0VSCQkvKiB1c2UgImh1c2giIGNvbW1hbmQgcGFyc2VyICovCisjZGVmaW5lIENPTkZJR19TWVNfUFJPTVBUX0hVU0hfUFMyCSI+ICIKKyNkZWZpbmUgQ09ORklHX1NZU19QUk9NUFQJCVZfUFJPTVBUCisjZGVmaW5lIENPTkZJR19TWVNfQ0JTSVpFCQkyNTYJLyogQ29uc29sZSBJL08gQnVmZmVyIFNpemUgKi8KKy8qIFByaW50IEJ1ZmZlciBTaXplICovCisjZGVmaW5lIENPTkZJR19TWVNfUEJTSVpFCQkoQ09ORklHX1NZU19DQlNJWkUgKyBcCisJCQkJCXNpemVvZihDT05GSUdfU1lTX1BST01QVCkgKyAxNikKKyNkZWZpbmUgQ09ORklHX1NZU19NQVhBUkdTCQkxNgkvKiBtYXggbnVtYmVyIG9mIGNvbW1hbmQgYXJncyAqLworLyogQm9vdCBBcmd1bWVudCBCdWZmZXIgU2l6ZSAqLworI2RlZmluZSBDT05GSUdfU1lTX0JBUkdTSVpFCQkoQ09ORklHX1NZU19DQlNJWkUpCisKKyNkZWZpbmUgQ09ORklHX1NZU19NRU1URVNUX1NUQVJUCShPTUFQMzRYWF9TRFJDX0NTMCkJLyogbWVtdGVzdCAqLworCQkJCQkJCQkvKiB3b3JrcyBvbiAqLworI2RlZmluZSBDT05GSUdfU1lTX01FTVRFU1RfRU5ECQkoT01BUDM0WFhfU0RSQ19DUzAgKyBcCisJCQkJCTB4MDFGMDAwMDApIC8qIDMxTUIgKi8KKworI3VuZGVmCUNPTkZJR19TWVNfQ0xLU19JTl9IWgkJLyogZXZlcnl0aGluZywgaW5jbCBib2FyZCBpbmZvLCBpbiBIeiAqLworCisjZGVmaW5lIENPTkZJR19TWVNfTE9BRF9BRERSCQkoT01BUDM0WFhfU0RSQ19DUzApCS8qIGRlZmF1bHQgKi8KKwkJCQkJCQkvKiBsb2FkIGFkZHJlc3MgKi8KKworLyoKKyAqIDI0MzAgaGFzIDEyIEdQIHRpbWVycywgdGhleSBjYW4gYmUgZHJpdmVuIGJ5IHRoZSBTeXNDbGsgKDEyLzEzLzE5LjIpIG9yIGJ5CisgKiAzMktIeiBjbGssIG9yIGZyb20gZXh0ZXJuYWwgc2lnLiBUaGlzIHJhdGUgaXMgZGl2aWRlZCBieSBhIGxvY2FsIGRpdmlzb3IuCisgKi8KKyNkZWZpbmUgVl9QVlQJCQkJNworCisjZGVmaW5lIENPTkZJR19TWVNfVElNRVJCQVNFCQkoT01BUDM0WFhfR1BUMikKKyNkZWZpbmUgQ09ORklHX1NZU19QVlQJCQlWX1BWVAkvKiAyXihwdnQrMSkgKi8KKyNkZWZpbmUgQ09ORklHX1NZU19IWgkJCSgoVl9TQ0xLKSAvICgyIDw8IENPTkZJR19TWVNfUFZUKSkKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogU3RhY2sgc2l6ZXMKKyAqCisgKiBUaGUgc3RhY2sgc2l6ZXMgYXJlIHNldCB1cCBpbiBzdGFydC5TIHVzaW5nIHRoZSBzZXR0aW5ncyBiZWxvdworICovCisjZGVmaW5lIENPTkZJR19TVEFDS1NJWkUJU1pfMTI4SwkvKiByZWd1bGFyIHN0YWNrICovCisjaWZkZWYgQ09ORklHX1VTRV9JUlEKKyNkZWZpbmUgQ09ORklHX1NUQUNLU0laRV9JUlEJU1pfNEsJLyogSVJRIHN0YWNrICovCisjZGVmaW5lIENPTkZJR19TVEFDS1NJWkVfRklRCVNaXzRLCS8qIEZJUSBzdGFjayAqLworI2VuZGlmCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFBoeXNpY2FsIE1lbW9yeSBNYXAKKyAqLworI2RlZmluZSBDT05GSUdfTlJfRFJBTV9CQU5LUwkyCS8qIENTMSBtYXkgb3IgbWF5IG5vdCBiZSBwb3B1bGF0ZWQgKi8KKyNkZWZpbmUgUEhZU19TRFJBTV8xCQlPTUFQMzRYWF9TRFJDX0NTMAorI2RlZmluZSBQSFlTX1NEUkFNXzFfU0laRQlTWl8zMk0JLyogYXQgbGVhc3QgMzIgbWVnICovCisjZGVmaW5lIFBIWVNfU0RSQU1fMgkJT01BUDM0WFhfU0RSQ19DUzEKKworLyogU0RSQU0gQmFuayBBbGxvY2F0aW9uIG1ldGhvZCAqLworI2RlZmluZSBTRFJDX1JfQl9DCQkxCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIEZMQVNIIGFuZCBlbnZpcm9ubWVudCBvcmdhbml6YXRpb24KKyAqLworCisvKiAqKioqIFBJU01PIFNVUFBPUlQgKioqICovCisKKy8qIENvbmZpZ3VyZSB0aGUgUElTTU8gKi8KKyNkZWZpbmUgUElTTU8xX05BTkRfU0laRQkJR1BNQ19TSVpFXzEyOE0KKyNkZWZpbmUgUElTTU8xX09ORU5fU0laRQkJR1BNQ19TSVpFXzEyOE0KKworI2RlZmluZSBDT05GSUdfU1lTX01BWF9GTEFTSF9TRUNUCTUyMAkvKiBtYXggbnVtYmVyIG9mIHNlY3RvcnMgb24gKi8KKwkJCQkJCS8qIG9uZSBjaGlwICovCisjZGVmaW5lIENPTkZJR19TWVNfTUFYX0ZMQVNIX0JBTktTCTIJLyogbWF4IG51bWJlciBvZiBmbGFzaCBiYW5rcyAqLworI2RlZmluZSBDT05GSUdfU1lTX01PTklUT1JfTEVOCQlTWl8yNTZLCS8qIFJlc2VydmUgMiBzZWN0b3JzICovCisKKyNkZWZpbmUgQ09ORklHX1NZU19GTEFTSF9CQVNFCQlib290X2ZsYXNoX2Jhc2UKKworLyogTW9uaXRvciBhdCBzdGFydCBvZiBmbGFzaCAqLworI2RlZmluZSBDT05GSUdfU1lTX01PTklUT1JfQkFTRQkJQ09ORklHX1NZU19GTEFTSF9CQVNFCisjZGVmaW5lIENPTkZJR19TWVNfT05FTkFORF9CQVNFCQlPTkVOQU5EX01BUAorCisjZGVmaW5lIENPTkZJR19FTlZfSVNfSU5fTkFORAkJMQorI2RlZmluZSBPTkVOQU5EX0VOVl9PRkZTRVQJCTB4MjYwMDAwIC8qIGVudmlyb25tZW50IHN0YXJ0cyBoZXJlICovCisjZGVmaW5lIFNNTkFORF9FTlZfT0ZGU0VUCQkweDI2MDAwMCAvKiBlbnZpcm9ubWVudCBzdGFydHMgaGVyZSAqLworCisjZGVmaW5lIENPTkZJR19TWVNfRU5WX1NFQ1RfU0laRQlib290X2ZsYXNoX3NlYworI2RlZmluZSBDT05GSUdfRU5WX09GRlNFVAkJYm9vdF9mbGFzaF9vZmYKKyNkZWZpbmUgQ09ORklHX0VOVl9BRERSCQkJU01OQU5EX0VOVl9PRkZTRVQKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogQ0ZJIEZMQVNIIGRyaXZlciBzZXR1cAorICovCisvKiB0aW1lb3V0IHZhbHVlcyBhcmUgaW4gdGlja3MgKi8KKyNkZWZpbmUgQ09ORklHX1NZU19GTEFTSF9FUkFTRV9UT1VUCSgxMDAgKiBDT05GSUdfU1lTX0haKQorI2RlZmluZSBDT05GSUdfU1lTX0ZMQVNIX1dSSVRFX1RPVVQJKDEwMCAqIENPTkZJR19TWVNfSFopCisKKy8qIEZsYXNoIGJhbmtzIEpGRlMyIHNob3VsZCB1c2UgKi8KKyNkZWZpbmUgQ09ORklHX1NZU19NQVhfTVREX0JBTktTCShDT05GSUdfU1lTX01BWF9GTEFTSF9CQU5LUyArIFwKKwkJCQkJQ09ORklHX1NZU19NQVhfTkFORF9ERVZJQ0UpCisjZGVmaW5lIENPTkZJR19TWVNfSkZGUzJfTUVNX05BTkQKKy8qIHVzZSBmbGFzaF9pbmZvWzJdICovCisjZGVmaW5lIENPTkZJR19TWVNfSkZGUzJfRklSU1RfQkFOSwlDT05GSUdfU1lTX01BWF9GTEFTSF9CQU5LUworI2RlZmluZSBDT05GSUdfU1lTX0pGRlMyX05VTV9CQU5LUwkxCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCitleHRlcm4gZ3BtY19jc3hfdCAqbmFuZF9jc19iYXNlOworZXh0ZXJuIGdwbWNfdCAqZ3BtY19jZmdfYmFzZTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgYm9vdF9mbGFzaF9iYXNlOworZXh0ZXJuIHZvbGF0aWxlIHVuc2lnbmVkIGludCBib290X2ZsYXNoX2Vudl9hZGRyOworZXh0ZXJuIHVuc2lnbmVkIGludCBib290X2ZsYXNoX29mZjsKK2V4dGVybiB1bnNpZ25lZCBpbnQgYm9vdF9mbGFzaF9zZWM7CitleHRlcm4gdW5zaWduZWQgaW50IGJvb3RfZmxhc2hfdHlwZTsKKyNlbmRpZgorCisKKyNkZWZpbmUgV1JJVEVfTkFORF9DT01NQU5EKGQsIGFkcilcCisJCQl3cml0ZWwoZCwgJm5hbmRfY3NfYmFzZS0+bmFuZF9jbWQpCisjZGVmaW5lIFdSSVRFX05BTkRfQUREUkVTUyhkLCBhZHIpXAorCQkJd3JpdGVsKGQsICZuYW5kX2NzX2Jhc2UtPm5hbmRfYWRyKQorI2RlZmluZSBXUklURV9OQU5EKGQsIGFkcikgd3JpdGV3KGQsICZuYW5kX2NzX2Jhc2UtPm5hbmRfZGF0KQorI2RlZmluZSBSRUFEX05BTkQoYWRyKSByZWFkbCgmbmFuZF9jc19iYXNlLT5uYW5kX2RhdCkKKworLyogT3RoZXIgTkFORCBBY2Nlc3MgQVBJcyAqLworI2RlZmluZSBOQU5EX1dQX09GRigpIGRvIHtyZWFkbCgmZ3BtY19jZmdfYmFzZS0+Y29uZmlnKSB8PSBHUE1DX0NPTkZJR19XUDsgfSBcCisJCQl3aGlsZSAoMCkKKyNkZWZpbmUgTkFORF9XUF9PTigpIGRvIHtyZWFkbCgmZ3BtY19jZmdfYmFzZS0+Y29uZmlnKSAmPSB+R1BNQ19DT05GSUdfV1A7IH0gXAorCQkJd2hpbGUgKDApCisjZGVmaW5lIE5BTkRfRElTQUJMRV9DRShuYW5kKQorI2RlZmluZSBOQU5EX0VOQUJMRV9DRShuYW5kKQorI2RlZmluZSBOQU5EX1dBSVRfUkVBRFkobmFuZCkJdWRlbGF5KDEwKQorCisjZW5kaWYJCQkJLyogX19DT05GSUdfSCAqLwo=